@rivet-health/design-system 40.28.0 → 40.30.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.
@@ -1671,6 +1671,8 @@ export var Chart;
1671
1671
  const WIDTH_PER_NUMBER = 7;
1672
1672
  const WIDTH_PER_PERIOD = 2;
1673
1673
  const WIDTH_PER_SLASH = 4;
1674
+ //When the data axis grows, the data is always given at least this portion of the provided size
1675
+ const GROWN_DATA_MINIMUM_RATIO = 0.5;
1674
1676
  const DEFAULT_HORIZONTAL_BAR_CORNER_RADIUS = 4;
1675
1677
  const FLOW_CONNECTION_CURVE_CONSTANT = 0.5;
1676
1678
  function getFormattingAndColors(originalData, data, config) {
@@ -3119,7 +3121,9 @@ export var Chart;
3119
3121
  endPaddingTotalSize.target +
3120
3122
  dataLabelPaddingTotalSize.target;
3121
3123
  }
3122
- else {
3124
+ else if (axisScale !== 'grow' &&
3125
+ (axisScale !== 'no-scale' || scalingConfig.dataScale.type === 'fit')) {
3126
+ //Growing and non-fitting data axes can scroll instead
3123
3127
  // eslint-disable-next-line no-console
3124
3128
  console.warn('The provided element sizes mean the chart cannot display at this small of a size');
3125
3129
  return {
@@ -3140,7 +3144,11 @@ export var Chart;
3140
3144
  axisScale === 'grow' ||
3141
3145
  axisScale === 'shrink' ||
3142
3146
  scalingConfig.dataScale.type === 'fit') {
3143
- const sizeForData = getFittedDataSize(data, config, boundingDimension - fixedSizeValue, flowLabelSize);
3147
+ //A growing data axis scrolls rather than squeezing the data below its minimum size
3148
+ const availableSize = axisScale === 'grow'
3149
+ ? Math.max(boundingDimension - fixedSizeValue, getMinimumGrownDataSize(data, config, boundingDimension, flowLabelSize))
3150
+ : boundingDimension - fixedSizeValue;
3151
+ const sizeForData = getFittedDataSize(data, config, availableSize, flowLabelSize);
3144
3152
  if (sizeForData === null) {
3145
3153
  // eslint-disable-next-line no-console
3146
3154
  console.warn('The provided minimum data element size means the chart cannot display at this small of a size');
@@ -3165,7 +3173,7 @@ export var Chart;
3165
3173
  dataLabelPadding: dataLabelPaddingConfig.target,
3166
3174
  fontSize: fontSizeConfig.target,
3167
3175
  sizeForData,
3168
- totalSize: boundingDimension,
3176
+ totalSize: fixedSizeValue + availableSize,
3169
3177
  bucketLabelTextSize,
3170
3178
  };
3171
3179
  }
@@ -3205,6 +3213,14 @@ export var Chart;
3205
3213
  bucketLabelTextSize,
3206
3214
  };
3207
3215
  }
3216
+ //The least space a growing data axis gives the data: a portion of the provided size, on top of the space that
3217
+ // elements enlarged to the minimum size need (so the data stays proportional rather than all being the minimum)
3218
+ function getMinimumGrownDataSize(data, config, boundingDimension, labelSize) {
3219
+ const minimumElementsSize = data.type === 'flow-processed'
3220
+ ? getMaxFlowBucketSize(data, 0, getMinimumDataElementSize(config), labelSize) - getFlowMidLabelSize(data, labelSize)
3221
+ : 0;
3222
+ return boundingDimension * GROWN_DATA_MINIMUM_RATIO + minimumElementsSize;
3223
+ }
3208
3224
  //For flow charts, finds the size the data scale should map to so that every bucket (including its own data labels,
3209
3225
  // and any elements enlarged to the minimum size) fits in the available size
3210
3226
  //Returns null if the minimum sizes alone can't fit
@@ -3740,4 +3756,4 @@ export var Chart;
3740
3756
  };
3741
3757
  }
3742
3758
  })(Chart || (Chart = {}));
3743
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV2RSxPQUFPLEVBSUwsd0JBQXdCLEVBSXhCLHFCQUFxQixFQUlyQixrQ0FBa0MsR0FHbkMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixNQUFNLEtBQVcsS0FBSyxDQXd5THJCO0FBeHlMRCxXQUFpQixLQUFLO0lBQ1AseUJBQW1CLEdBQUc7UUFDakMsYUFBYTtRQUNiLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLGdDQUFnQztRQUNoQyxpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztR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SyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsOEJBQThCLENBQUM7UUFFNUQsTUFBTSxJQUFJLEdBQUc7VUFDUCxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7O1VBRTlDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDdEQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUN0RCxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7O1VBRTlDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTs7VUFFcEQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTtVQUM1RCxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxLQUFLLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1VBQzVELFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTs7O0tBR3pELENBQUM7UUFFRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxTQUFTLEtBQUssQ0FDWixDQUFTLEVBQ1QsQ0FBUyxFQUNULENBQVMsRUFDVCxDQUFTLEVBQ1QsQ0FBUztRQUVULE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELFNBQVMsVUFBVSxDQUNqQixDQUFTLEVBQ1QsSUFLQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsOEJBQThCLENBQUM7UUFDM0UsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDOUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM5QyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFFdEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRVgsNENBQTRDO1FBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTVDLElBQUksRUFBRSxH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LENBQUMsTUFBTSxFQUFFO1lBQ2xDLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQy9CLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtnQkFDM0IsU0FBUyxHQUFHLENBQUMsQ0FBQzthQUNmO1NBQ0Y7UUFDRCxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUU7WUFDbEIsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNmLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtnQkFDM0IsU0FBUyxHQUFHLENBQUMsQ0FBQzthQUNmO1NBQ0Y7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLFVBQVU7WUFDbkIsT0FBTyxFQUFFLFVBQVU7WUFDbkIsV0FBVyxFQUFFLFFBQVE7WUFDckIsWUFBWSxFQUFFLFNBQVM7U0FDeEIsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLEVBeHlMZ0IsS0FBSyxLQUFMLEtBQUssUUF3eUxyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnJlbmN5UGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBzY2FsZUxpbmVhciB9IGZyb20gJ2QzLXNjYWxlJztcbmltcG9ydCB7IGFyYywgYXJlYSwgbGluZSwgcGllIH0gZnJvbSAnZDMtc2hhcGUnO1xuaW1wb3J0IHsgdXRjRm9ybWF0IH0gZnJvbSAnZDMtdGltZS1mb3JtYXQnO1xuaW1wb3J0IHsgc3VtLCB1bmlxIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERheXNQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL2RheXMucGlwZSc7XG5pbXBvcnQgeyBOdW1iZXJQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL251bWJlci5waXBlJztcbmltcG9ydCB7IFBlcmNlbnRhZ2VQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL3BlcmNlbnRhZ2UucGlwZSc7XG5pbXBvcnQgeyBTbWFsbEN1cnJlbmN5UGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9zbWFsbC1jdXJyZW5jeS5waXBlJztcbmltcG9ydCB7IFNtYWxsTnVtYmVyUGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9zbWFsbC1udW1iZXIucGlwZSc7XG5pbXBvcnQgeyBDYWxsb3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3ZlcmxheS9jYWxsb3V0L2NhbGxvdXQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIENoYXJ0RGF0YURpcmVjdGlvbixcbiAgQ2hhcnRTY2FsZUVsZW1lbnQsXG4gIENvbnRhaW5lclNjYWxpbmdUeXBlLFxuICBEZWZhdWx0RG9udXRTaXppbmdDb25maWcsXG4gIERlZmF1bHRTY2FsaW5nQ29uZmlnLFxuICBEb251dFNpemluZ0NvbmZpZyxcbiAgRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uLFxuICBlbXB0eUNoYXJ0U2NhbGVWYWx1ZXMsXG4gIEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICBGdWxsRWxlbWVudFNjYWxpbmdDb25maWcsXG4gIEZ1bGxTY2FsaW5nQ29uZmlnLFxuICBnZXREZWZhdWx0U2NhbGluZ0NvbmZpZ0J5Q2hhcnRUeXBlLFxuICBOb25FbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgUGFydGlhbEVsZW1lbnRTY2FsaW5nQ29uZmlnLFxufSBmcm9tICcuL2NoYXJ0LXNjYWxpbmcnO1xuXG5leHBvcnQgbmFtZXNwYWNlIENoYXJ0IHtcbiAgZXhwb3J0IGNvbnN0IGRlZmF1bHRDb2xvclBhbGV0dGUgPSBbXG4gICAgLy9CYXNlIGNvbG9yc1xuICAgICctLWJhamEtYmxhc3QtNTAnLFxuICAgICctLXRlYWwtZGlhbW9uZC01MCcsXG4gICAgJy0tZnlyZS01MCcsXG4gICAgJy0tdGFuZy01MCcsXG4gICAgJy0tcHVycC02MCcsXG4gICAgJy0tcm9zaS03MCcsXG4gICAgLy9TaGlmdCBsaWdodGVyIGZyb20gYmFzZSBieSAtMjBcbiAgICAnLS1iYWphLWJsYXN0LTMwJyxcbiAgICAnLS10ZWFsLWRpYW1vbmQtMzAnLFxuICAgICctLWZ5cmUtMzAnLFxuICAgICctLXRhbmctMzAnLFxuICAgICctLXB1cnAtNDAnLFxuICAgICctLXJvc2ktNTAnLFxuICAgIC8vU2hpZnQgZGFya2VyIGZyb20gYmFzZSBieSArMjBcbiAgICAnLS1iYWphLWJsYXN0LTcwJyxcbiAgICAnLS10ZWFsLWRpYW1vbmQtNzAnLFxuICAgICctLWZ5cmUtNzAnLFxuICAgICctLXRhbmctNzAnLFxuICAgICctLXB1cnAtODAnLFxuICAgICctLXJvc2ktOTAnLFxuICBdO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGFydChcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBkYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgcmV0dXJuIGNvbmZpZy50eXBlID09PSAnbGluZSdcbiAgICAgID8gbGluZXMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBjb25maWcudHlwZSA9PT0gJ2FyZWEnXG4gICAgICA/IGFyZWFzKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucylcbiAgICAgIDogY29uZmlnLnR5cGUgPT09ICdkb251dCdcbiAgICAgID8gYXJjcyhjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInXG4gICAgICA/IGhvcml6b250YWxCYXJzKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucylcbiAgICAgIDogY29uZmlnLnR5cGUgPT09ICdiYXInXG4gICAgICA/IGJhcnMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBjb25maWcudHlwZSA9PT0gJ3dhdGVyZmFsbCdcbiAgICAgID8gd2F0ZXJmYWxsKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucylcbiAgICAgIDogY29uZmlnLnR5cGUgPT09ICdmdW5uZWwnXG4gICAgICA/IGZ1bm5lbChjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGNvbmZpZy50eXBlID09PSAnZmxvdydcbiAgICAgID8gZmxvd3MoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBlbXB0eUNoYXJ0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGluZXMoXG4gICAgY29uZmlnOiBDb25maWdXaXRoRnVsbFNjYWxpbmcsXG4gICAgYWxsRGF0YTogSW5wdXREYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGlmICghd2FybkZsb3dEYXRhKGFsbERhdGEsICdsaW5lJykpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdjb25maWcnIH07XG4gICAgfVxuICAgIGNvbnN0IHsgZGF0YTogaGlkZGVuRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgaWYgKGhpZGRlbkRhdGEudHlwZSA9PT0gJ2xhYmVsZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBMYWJlbGVkIHNlcmllcyBhcmVuJ3QgY3VycmVudGx5IHN1cHBvcnRlZCBmb3IgbGluZSBjaGFydHNcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGhpZGRlbkRhdGEpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBTdXBwbGVtZW50YXJ5IHkgdmFsdWVzIGFyZW4ndCBzdXBwb3J0ZWQgZm9yIG5vbi1iYXIgY2hhcnRzXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIHdhcm5VbnN1cHBvcnRlZFBhdHRlcm5zKGhpZGRlbkRhdGEsIFsnc3RyaXBlZCcsICdkb3RzJ10sICdsaW5lJyk7XG4gICAgLy9UaGlzIGFzc2lnbm1lbnQgbWFrZXMgdHlwZXNjcmlwdCByZWNvZ25pemUgdGhlIGFjdHVhbCB0eXBlIChUaW1lc2VyaWVzRGF0YSlcbiAgICBjb25zdCBkYXRhID0gaGlkZGVuRGF0YTtcblxuICAgIGNvbnN0IHsgZGF0ZUZvcm1hdCwgcGlwZVRyYW5zZm9ybSwgY29sb3JzIH0gPSBnZXRGb3JtYXR0aW5nQW5kQ29sb3JzKFxuICAgICAgYWxsRGF0YSxcbiAgICAgIGRhdGEsXG4gICAgICBjb25maWcsXG4gICAgKTtcblxuICAgIGNvbnN0IGNoYXJ0U2l6aW5nVmFsdWVzID0gZ2V0RnVsbENoYXJ0U2NhbGVWYWx1ZXMoXG4gICAgICBjb25maWcsXG4gICAgICBkYXRhLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICk7XG4gICAgaWYgKGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnc2l6aW5nJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRpY2tDb3VudCA9IGdldEJ1Y2tldFRpY2tDb3VudChjaGFydFNpemluZ1ZhbHVlcyk7XG4gICAgY29uc3QgeFRpY2tzID0gZ2VuZXJhdGVUaW1lc2VyaWVzVGlja3MoXG4gICAgICBkYXRhLFxuICAgICAgY29uZmlnLFxuICAgICAgdGlja0NvdW50LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICkubWFwKHRpY2sgPT4gdG9YVGljayh0aWNrKSk7XG4gICAgY29uc3QgeFNjYWxlID0gKGluZGV4OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudG90YWxMZWZ0T2Zmc2V0ICsgY2hhcnRTaXppbmdWYWx1ZXMuYnVja2V0R2FwICogaW5kZXhcbiAgICAgICk7XG4gICAgfTtcbiAgICBjb25zdCB7IHNjYWxlLCB0aWNrczogZGF0YVRpY2tzIH0gPSBjYWxjRGF0YUF4aXNTY2FsZXNBbmRUaWNrcyhcbiAgICAgIGRhdGEsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgY29uZmlnLFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgKTtcbiAgICBjb25zdCB5VGlja3MgPSBkYXRhVGlja3MubWFwKHRpY2sgPT4gdG9ZVGljayh0aWNrKSk7XG5cbiAgICBjb25zdCBpbmRpY2VzID0gZGF0YS54Lm1hcCgoXywgaSkgPT4gaSk7XG4gICAgY29uc3QgbGluZXMgPVxuICAgICAgZGF0YS54Lmxlbmd0aCA+IDFcbiAgICAgICAgPyBkYXRhLnlzLm1hcCh5ID0+ICh7XG4gICAgICAgICAgICBsaW5lOiBsaW5lPG51bWJlcj4oXG4gICAgICAgICAgICAgIGkgPT4geFNjYWxlKGkpLFxuICAgICAgICAgICAgICBpID0+IHNjYWxlKHkudmFsdWVzW2ldLCB5LmlzU2Vjb25kYXJ5KSxcbiAgICAgICAgICAgICkoaW5kaWNlcyksXG4gICAgICAgICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICAgICAgfSkpXG4gICAgICAgIDogW107XG4gICAgY29uc3QgY2lyY2xlcyA9XG4gICAgICBkYXRhLngubGVuZ3RoID09PSAxXG4gICAgICAgID8gZGF0YS55cy5tYXAoKHlTZXJpZXMsIGkpID0+ICh7XG4gICAgICAgICAgICBjeDogeFNjYWxlKDApLFxuICAgICAgICAgICAgY3k6IHNjYWxlKHlTZXJpZXMudmFsdWVzWzBdLCBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIGksIDApKSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgOiBbXTtcblxuICAgIGNvbnN0IHlPZmZzZXQgPSBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nO1xuICAgIGNvbnN0IGRhdGFMYWJlbHM6IERhdGFMYWJlbFtdID0gZGF0YS55cy5mbGF0TWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHN1YkxhYmVsczogRGF0YUxhYmVsW10gPSB5LnZhbHVlcy5tYXAoKHZhbCwgeEluZGV4KSA9PiAoe1xuICAgICAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCcsXG4gICAgICAgIGxhYmVsOiBwaXBlVHJhbnNmb3JtKHZhbCwgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCkpLFxuICAgICAgICB5UG9zOiBzY2FsZSh2YWwsIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCB4SW5kZXgpKSAtIHlPZmZzZXQsXG4gICAgICAgIHhQb3M6IHhTY2FsZSh4SW5kZXgpLFxuICAgICAgICBhbmNob3I6ICdtaWRkbGUnLFxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIHN1YkxhYmVscztcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczoge1xuICAgICAgcmVjdDogRE9NUmVjdDtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFg6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFk6IG51bWJlcjtcbiAgICB9KTogSG92ZXJSZXR1cm4ge1xuICAgICAgY29uc3QgcmVhbFBvc1ggPSBwb3MueCArIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgcmVhbFBvc1kgPSBwb3MueSArIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgaWYgKFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCB8fFxuICAgICAgICBnZXRJZkhvdmVyT3V0T2ZCb3VuZHMoXG4gICAgICAgICAgcG9zLngsXG4gICAgICAgICAgcG9zLnksXG4gICAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgICAgcmVhbFBvc1ksXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB4SG92ZXJJbmRpY2VzID0gZ2V0QnVja2V0QW5kQ2x1c3Rlck51bUZvckhvdmVyKFxuICAgICAgICByZWFsUG9zWCxcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZGF0YS54Lmxlbmd0aCxcbiAgICAgICk7XG4gICAgICBpZiAoIXhIb3ZlckluZGljZXMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB7IGJ1Y2tldE51bTogeEluZGV4IH0gPSB4SG92ZXJJbmRpY2VzO1xuICAgICAgY29uc3QgeCA9IHhTY2FsZSh4SW5kZXgpO1xuICAgICAgY29uc3QgdmlzaWJsZVlJbmRleCA9IGZpbmROZWFyZXN0SW5kZXhXaXRoU2Vjb25kYXJ5KFxuICAgICAgICBkYXRhLnlzLm1hcCgoeSwgaSkgPT4gKHtcbiAgICAgICAgICB2YWx1ZTogeS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICBpc1NlY29uZGFyeTogY2hlY2tJZlNlY29uZGFyeShkYXRhLCBpLCB4SW5kZXgpLFxuICAgICAgICB9KSksXG4gICAgICAgIHBvcy55LFxuICAgICAgICBzY2FsZSxcbiAgICAgICk7XG4gICAgICBjb25zdCB5SW5kZXggPSB2aXNpYmxlSW5kaWNlc1t2aXNpYmxlWUluZGV4XTtcbiAgICAgIGNvbnN0IHlzID0gZGF0YS55cy5tYXAoKHksIGkpID0+XG4gICAgICAgIHNjYWxlKHkudmFsdWVzW3hJbmRleF0sIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgaSwgeEluZGV4KSksXG4gICAgICApO1xuXG4gICAgICBjb25zdCBmb3JtYXQgPSAoZGF0ZTogRGF0ZSkgPT5cbiAgICAgICAgZm9ybWF0ZWREYXRlKGNvbmZpZy5kYXRlRm9ybWF0IHx8ICdkYXknLCBkYXRlKTtcblxuICAgICAgLy8gQ2xhbXAgaW4gY2hhcnQtbG9jYWwgY29vcmRpbmF0ZXMgZmlyc3Qgc28gdGhlIHRvb2x0aXAgc3RheXMgd2l0aGluIHRoZVxuICAgICAgLy8gdmlzaWJsZSBjaGFydCBhcmVhLCB0aGVuIHRyYW5zbGF0ZSB0byB2aWV3cG9ydCBjb29yZGluYXRlcyBieSBhZGRpbmdcbiAgICAgIC8vIHBvcy5yZWN0LngveSAod2hpY2ggYXJlIHZpZXdwb3J0LXJlbGF0aXZlIGZyb20gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KS5cbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IHggLSBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWSA9IHlzW3Zpc2libGVZSW5kZXhdIC0gcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICBjb25zdCB7IGFuY2hvclgsIGFuY2hvclkgfSA9IGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICAgICAgbG9jYWxBbmNob3JYLFxuICAgICAgICBsb2NhbEFuY2hvclksXG4gICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICApO1xuICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgIGFuY2hvclggKyBwb3MucmVjdC54LFxuICAgICAgICBhbmNob3JZICsgcG9zLnJlY3QueSxcbiAgICAgICAgU01BTExfUEFERElORyxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBob3ZlclR5cGU6ICdzdGFuZGFyZCcsXG4gICAgICAgIHgsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgeXMsXG4gICAgICAgIHlJbmRleCxcbiAgICAgICAgdmlzaWJsZVlJbmRleCxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBkYXRlOiBmb3JtYXQobmV3IERhdGUoZGF0YS54W3hJbmRleF0pKSxcbiAgICAgICAgICBtZXRyaWNzOiBkYXRhLnlzXG4gICAgICAgICAgICAubWFwKCh5LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgY29sb3I6IGNvbG9yc1tpbmRleCAlIGNvbG9ycy5sZW5ndGhdLFxuICAgICAgICAgICAgICBsYWJlbDogeS5sYWJlbCxcbiAgICAgICAgICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICBwaXBlVHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgeS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgaW5kZXgsIHhJbmRleCksXG4gICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICkgPz8gJy0nLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PT0gdmlzaWJsZVlJbmRleCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGFydFdpZHRoOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFdpZHRoLFxuICAgICAgY2hhcnRIZWlnaHQ6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsSGVpZ2h0LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICB4VGlja3MsXG4gICAgICB5VGlja3MsXG4gICAgICBjb2xvcnMsXG4gICAgICBsaW5lcyxcbiAgICAgIGNpcmNsZXMsXG4gICAgICBob3ZlcixcbiAgICAgIGJhcnM6IFtdLFxuICAgICAgYXJlYXM6IFtdLFxuICAgICAgYXJjczogW10sXG4gICAgICBob3Jpem9udGFsQmFyczogW10sXG4gICAgICBkYXRhTGFiZWxzLFxuICAgICAgd2F0ZXJmYWxsTGluZXM6IFtdLFxuICAgICAgZ3JhZGllbnRzOiBbXSxcbiAgICAgIGZsb3dDb25uZWN0aW9uczogW10sXG4gICAgICBob3Jpem9udGFsQ29udGFpbmVyU2NhbGU6IGNoYXJ0U2l6aW5nVmFsdWVzLmhvcml6b250YWxDb250YWluZXJTY2FsZSxcbiAgICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6IGNoYXJ0U2l6aW5nVmFsdWVzLnZlcnRpY2FsQ29udGFpbmVyU2NhbGUsXG4gICAgICBjaGFydEVycm9yOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhcmVhcyhcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBhbGxEYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgaWYgKCF3YXJuRmxvd0RhdGEoYWxsRGF0YSwgJ2FyZWEnKSkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ2NvbmZpZycgfTtcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhOiB1bmNoZWNrZWREYXRhLCB2aXNpYmxlSW5kaWNlcyB9ID0gaGlkZShhbGxEYXRhKTtcbiAgICBpZiAodW5jaGVja2VkRGF0YS50eXBlID09PSAnbGFiZWxlZCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIExhYmVsZWQgc2VyaWVzIGFyZW4ndCBjdXJyZW50bHkgc3VwcG9ydGVkIGZvciBhcmVhIGNoYXJ0c1wiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnNob3dEYXRhTGFiZWxzID09PSB0cnVlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBEYXRhIGxhYmVscyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBhbnkgc3RhY2tlZCBjaGFydCB0eXBlXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YSh1bmNoZWNrZWREYXRhKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgU3VwcGxlbWVudGFyeSB5IHZhbHVlcyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBub24tYmFyIGNoYXJ0c1wiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICB3YXJuVW5zdXBwb3J0ZWRQYXR0ZXJucyh1bmNoZWNrZWREYXRhLCBbJ3N0cmlwZWQnXSwgJ2FyZWEnKTtcbiAgICAvL1RoaXMgYXNzaWdubWVudCBtYWtlcyB0eXBlc2NyaXB0IHJlY29nbml6ZSB0aGUgYWN0dWFsIHR5cGUgKFRpbWVzZXJpZXNEYXRhKVxuICAgIGNvbnN0IGRhdGEgPSB1bmNoZWNrZWREYXRhO1xuXG4gICAgY29uc3QgeyBkYXRlRm9ybWF0LCBwaXBlVHJhbnNmb3JtLCBjb2xvcnMgfSA9IGdldEZvcm1hdHRpbmdBbmRDb2xvcnMoXG4gICAgICBhbGxEYXRhLFxuICAgICAgZGF0YSxcbiAgICAgIGNvbmZpZyxcbiAgICApO1xuICAgIGNvbnN0IGNoYXJ0U2l6aW5nVmFsdWVzID0gZ2V0RnVsbENoYXJ0U2NhbGVWYWx1ZXMoXG4gICAgICBjb25maWcsXG4gICAgICBkYXRhLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICk7XG4gICAgaWYgKGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnc2l6aW5nJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRpY2tDb3VudCA9IGdldEJ1Y2tldFRpY2tDb3VudChjaGFydFNpemluZ1ZhbHVlcyk7XG4gICAgY29uc3QgeFRpY2tzID0gZ2VuZXJhdGVUaW1lc2VyaWVzVGlja3MoXG4gICAgICBkYXRhLFxuICAgICAgY29uZmlnLFxuICAgICAgdGlja0NvdW50LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICkubWFwKHRpY2sgPT4gdG9YVGljayh0aWNrKSk7XG4gICAgY29uc3QgeFNjYWxlID0gKGluZGV4OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudG90YWxMZWZ0T2Zmc2V0ICsgY2hhcnRTaXppbmdWYWx1ZXMuYnVja2V0R2FwICogaW5kZXhcbiAgICAgICk7XG4gICAgfTtcbiAgICBjb25zdCB7IHNjYWxlLCB0aWNrczogZGF0YVRpY2tzIH0gPSBjYWxjRGF0YUF4aXNTY2FsZXNBbmRUaWNrcyhcbiAgICAgIGRhdGEsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgY29uZmlnLFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgKTtcbiAgICBjb25zdCB5VGlja3MgPSBkYXRhVGlja3MubWFwKHRpY2sgPT4gdG9ZVGljayh0aWNrKSk7XG4gICAgY29uc3QgemVyb0F4aXNQb3NWYWwgPSBzY2FsZSgwLCB0cnVlKTtcblxuICAgIGNvbnN0IGluZGljZXMgPSBkYXRhLngubWFwKChfLCBpKSA9PiBpKTtcbiAgICBjb25zdCBhcmVhcyA9IGRhdGEueXMubWFwKCh5LCB5SW5kZXgpID0+ICh7XG4gICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICBhcmVhOiBhcmVhPG51bWJlcj4oXG4gICAgICAgIGkgPT4geFNjYWxlKGkpLFxuICAgICAgICBpID0+IGdldEJhcllJbmZvKGRhdGEsIGNvbmZpZywgeUluZGV4LCBpLCBzY2FsZSkueVZhbHVlLFxuICAgICAgICBpID0+XG4gICAgICAgICAgZ2V0QmFyWUluZm8oZGF0YSwgY29uZmlnLCB5SW5kZXgsIGksIHNjYWxlKS55VmFsdWUgK1xuICAgICAgICAgIGdldEJhcllJbmZvKGRhdGEsIGNvbmZpZywgeUluZGV4LCBpLCBzY2FsZSkuaGVpZ2h0LFxuICAgICAgKShpbmRpY2VzKSxcbiAgICB9KSk7XG5cbiAgICBmdW5jdGlvbiBob3Zlcihwb3M6IHtcbiAgICAgIHJlY3Q6IERPTVJlY3Q7XG4gICAgICB4OiBudW1iZXI7XG4gICAgICB5OiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxYOiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxZOiBudW1iZXI7XG4gICAgfSk6IEhvdmVyUmV0dXJuIHtcbiAgICAgIGNvbnN0IHJlYWxQb3NYID0gcG9zLnggKyBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgIGNvbnN0IHJlYWxQb3NZID0gcG9zLnkgKyBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgIGlmIChcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMgPT09IG51bGwgfHxcbiAgICAgICAgZ2V0SWZIb3Zlck91dE9mQm91bmRzKFxuICAgICAgICAgIHBvcy54LFxuICAgICAgICAgIHBvcy55LFxuICAgICAgICAgIHJlYWxQb3NYLFxuICAgICAgICAgIHJlYWxQb3NZLFxuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeEhvdmVySW5kaWNlcyA9IGdldEJ1Y2tldEFuZENsdXN0ZXJOdW1Gb3JIb3ZlcihcbiAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGRhdGEueC5sZW5ndGgsXG4gICAgICApO1xuICAgICAgaWYgKCF4SG92ZXJJbmRpY2VzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBidWNrZXROdW06IHhJbmRleCB9ID0geEhvdmVySW5kaWNlcztcbiAgICAgIGNvbnN0IHggPSB4U2NhbGUoeEluZGV4KTtcbiAgICAgIGNvbnN0IGZ1bGxZcyA9IGRhdGEueXMubWFwKChfLCBtYXBZSW5kZXgpID0+XG4gICAgICAgIGdldEJhcllJbmZvKGRhdGEsIGNvbmZpZywgbWFwWUluZGV4LCB4SW5kZXgsIHNjYWxlKSxcbiAgICAgICk7XG4gICAgICBjb25zdCB5cyA9IGZ1bGxZcy5tYXAoeSA9PiB5LnlWYWx1ZSk7XG4gICAgICAvL1RoaXMgaXMgdGhlIHlzIGFycmF5LCBidXQgc2hpZnRlZCBzbyB0aGF0IHRoZSB5IHBvc2l0aW9uIGZvciBuZWdhdGl2ZSB2YWx1ZXMgaXMgYXdheSBmcm9tIHRoZSBheGlzIChmb3IgdGhlIGhvdmVyIGNpcmNsZXMpXG4gICAgICBjb25zdCBzaGlmdGVkWXMgPSBmdWxsWXMubWFwKHkgPT4ge1xuICAgICAgICBpZiAoeS55VmFsdWUgPj0gemVyb0F4aXNQb3NWYWwpIHtcbiAgICAgICAgICByZXR1cm4geS55VmFsdWUgKyB5LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geS55VmFsdWU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHlQb3NTaWduID0gemVyb0F4aXNQb3NWYWwgLSBwb3MueTtcbiAgICAgIGxldCB2aXNpYmxlWUluZGV4ID0gLTE7XG4gICAgICBpZiAoeVBvc1NpZ24gPCAwICYmIGRhdGEueXMuZmluZCh5ID0+IHkudmFsdWVzLmZpbmQodmFsID0+IHZhbCA8IDApKSkge1xuICAgICAgICBmb3IgKGxldCBpID0geXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAoeXNbaV0gPj0gemVyb0F4aXNQb3NWYWwgJiYgeXNbaV0gPCBwb3MueSkge1xuICAgICAgICAgICAgdmlzaWJsZVlJbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoeXNbaV0gPD0gemVyb0F4aXNQb3NWYWwgJiYgeXNbaV0gPCBwb3MueSkge1xuICAgICAgICAgICAgdmlzaWJsZVlJbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh2aXNpYmxlWUluZGV4ID09PSAtMSkge1xuICAgICAgICBpZiAocG9zLnkgPD0gemVyb0F4aXNQb3NWYWwpIHtcbiAgICAgICAgICB2aXNpYmxlWUluZGV4ID0geXMuaW5kZXhPZihNYXRoLm1pbiguLi55cykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpc2libGVZSW5kZXggPSB5cy5pbmRleE9mKE1hdGgubWF4KC4uLnlzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHlJbmRleCA9IHZpc2libGVJbmRpY2VzW3Zpc2libGVZSW5kZXhdO1xuICAgICAgY29uc3QgbG9jYWxBbmNob3JYID0geCAtIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgbG9jYWxBbmNob3JZID0geXNbdmlzaWJsZVlJbmRleF0gLSBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgIGNvbnN0IHsgYW5jaG9yWCwgYW5jaG9yWSB9ID0gY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgICAgICBsb2NhbEFuY2hvclgsXG4gICAgICAgIGxvY2FsQW5jaG9yWSxcbiAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICk7XG4gICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgYW5jaG9yWCArIHBvcy5yZWN0LngsXG4gICAgICAgIGFuY2hvclkgKyBwb3MucmVjdC55LFxuICAgICAgICBTTUFMTF9QQURESU5HLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhvdmVyVHlwZTogJ3N0YW5kYXJkJyxcbiAgICAgICAgeCxcbiAgICAgICAgeEluZGV4LFxuICAgICAgICB5czogc2hpZnRlZFlzLFxuICAgICAgICB5SW5kZXgsXG4gICAgICAgIHZpc2libGVZSW5kZXgsXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgZGF0ZTogdXRjRm9ybWF0KCclQiAlZCwgJVknKShuZXcgRGF0ZShkYXRhLnhbeEluZGV4XSkpLFxuICAgICAgICAgIG1ldHJpY3M6IGRhdGEueXNcbiAgICAgICAgICAgIC5tYXAoKHksIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICBjb2xvcjogY29sb3JzW2luZGV4ICUgY29sb3JzLmxlbmd0aF0sXG4gICAgICAgICAgICAgIGxhYmVsOiB5LmxhYmVsLFxuICAgICAgICAgICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICAgICAgICAgIHZhbHVlOiBwaXBlVHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHkudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCBpbmRleCwgeEluZGV4KSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PT0gdmlzaWJsZVlJbmRleCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGFydFdpZHRoOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFdpZHRoLFxuICAgICAgY2hhcnRIZWlnaHQ6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsSGVpZ2h0LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICB4VGlja3MsXG4gICAgICB5VGlja3MsXG4gICAgICBjb2xvcnMsXG4gICAgICBhcmVhcyxcbiAgICAgIGxpbmVzOiBbXSxcbiAgICAgIGNpcmNsZXM6IFtdLFxuICAgICAgaG92ZXIsXG4gICAgICBiYXJzOiBbXSxcbiAgICAgIGFyY3M6IFtdLFxuICAgICAgaG9yaXpvbnRhbEJhcnM6IFtdLFxuICAgICAgZGF0YUxhYmVsczogW10sXG4gICAgICB3YXRlcmZhbGxMaW5lczogW10sXG4gICAgICBncmFkaWVudHM6IFtdLFxuICAgICAgZmxvd0Nvbm5lY3Rpb25zOiBbXSxcbiAgICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlLFxuICAgICAgdmVydGljYWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMudmVydGljYWxDb250YWluZXJTY2FsZSxcbiAgICAgIGNoYXJ0RXJyb3I6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJhcnMoXG4gICAgY29uZmlnOiBDb25maWdXaXRoRnVsbFNjYWxpbmcsXG4gICAgYWxsRGF0YTogSW5wdXREYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGlmICghd2FybkZsb3dEYXRhKGFsbERhdGEsICdiYXInKSkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ2NvbmZpZycgfTtcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhLCB2aXNpYmxlSW5kaWNlcywgdmlzaWJsZVN1cHBJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy5zaG93RGF0YUxhYmVscyA9PT0gdHJ1ZSAmJlxuICAgICAgaXNTdGFja2VkRGF0YShjb25maWcpICYmXG4gICAgICAhaXNHcm91cGluZ1R5cGVFeGNlcHRpb24oZGF0YSwgY29uZmlnKVxuICAgICkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgRGF0YSBsYWJlbHMgYXJlbid0IHN1cHBvcnRlZCBmb3IgYW55IHN0YWNrZWQgY2hhcnQgdHlwZVwiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSAmJlxuICAgICAgaXNDbHVzdGVyZWREYXRhKGRhdGEsIGNvbmZpZywgZmFsc2UpICYmXG4gICAgICAhaXNHcm91cGluZ1R5cGVFeGNlcHRpb24oZGF0YSwgY29uZmlnKVxuICAgICkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgU3VwcGxlbWVudGFyeSB5IHZhbHVlcyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBjbHVzdGVyZWQgZGF0YSAoanVzdCB1c2UgYW5vdGhlciBub3JtYWwgeSBzZXJpZXMpXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIHJldHVybiBiYXJzSGVscGVyKFxuICAgICAgY29uZmlnLFxuICAgICAgYWxsRGF0YSxcbiAgICAgIGRhdGEsXG4gICAgICB2aXNpYmxlSW5kaWNlcyxcbiAgICAgIHZpc2libGVTdXBwSW5kaWNlcyxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBmYWxzZSxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBmdW5uZWwoXG4gICAgY29uZmlnOiBDb25maWdXaXRoRnVsbFNjYWxpbmcsXG4gICAgYWxsRGF0YTogSW5wdXREYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGlmICghd2FybkZsb3dEYXRhKGFsbERhdGEsICdmdW5uZWwnKSkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ2NvbmZpZycgfTtcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhLCB2aXNpYmxlSW5kaWNlcywgdmlzaWJsZVN1cHBJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIHJldHVybiBiYXJzSGVscGVyKFxuICAgICAgY29uZmlnLFxuICAgICAgYWxsRGF0YSxcbiAgICAgIGRhdGEsXG4gICAgICB2aXNpYmxlSW5kaWNlcyxcbiAgICAgIHZpc2libGVTdXBwSW5kaWNlcyxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICB0cnVlLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdhdGVyZmFsbChcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBhbGxEYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgaWYgKCF3YXJuRmxvd0RhdGEoYWxsRGF0YSwgJ3dhdGVyZmFsbCcpKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnY29uZmlnJyB9O1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGE6IHVuY2hlY2tlZERhdGEsIHZpc2libGVJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YSh1bmNoZWNrZWREYXRhKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgU3VwcGxlbWVudGFyeSB5IHZhbHVlcyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBub24tYmFyIGNoYXJ0c1wiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnNlY29uZGFyeVZhbHVlVHlwZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0hlYWRzIHVwISBXYXRlcmZhbGwgY2hhcnRzIGRvIG5vdCBjdXJyZW50bHkgaGF2ZSB0d28tYXhpcyBzdXBwb3J0JyxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgd2FyblVuc3VwcG9ydGVkUGF0dGVybnModW5jaGVja2VkRGF0YSwgW10sICd3YXRlcmZhbGwnKTtcblxuICAgIHJldHVybiBiYXJzSGVscGVyKFxuICAgICAgY29uZmlnLFxuICAgICAgYWxsRGF0YSxcbiAgICAgIHVuY2hlY2tlZERhdGEsXG4gICAgICB2aXNpYmxlSW5kaWNlcyxcbiAgICAgIFtdLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIGZhbHNlLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gYmFyc0hlbHBlcihcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBhbGxEYXRhOiBOb25GbG93RGF0YSxcbiAgICB1bmNoZWNrZWREYXRhOiBOb25GbG93RGF0YSxcbiAgICB2aXNpYmxlSW5kaWNlczogbnVtYmVyW10sXG4gICAgdmlzaWJsZVN1cHBJbmRpY2VzOiBudW1iZXJbXSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICAgIGlzRnVubmVsOiBib29sZWFuLFxuICAgIGlzV2F0ZXJmYWxsOiBib29sZWFuLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBjb25zdCB7IGRhdGVGb3JtYXQsIHBpcGVUcmFuc2Zvcm0sIGNvbG9ySW5kaWNlcywgY29sb3JzIH0gPVxuICAgICAgZ2V0Rm9ybWF0dGluZ0FuZENvbG9ycyhhbGxEYXRhLCB1bmNoZWNrZWREYXRhLCBjb25maWcpO1xuICAgIGNvbnN0IHdhdGVyZmFsbERhdGEgPSB3YXRlcmZhbGxUcmFuc2Zvcm0odW5jaGVja2VkRGF0YSwgaXNXYXRlcmZhbGwpO1xuICAgIGNvbnN0IGRhdGEgPSBpc1dhdGVyZmFsbCA/IHdhdGVyZmFsbERhdGEuZGF0YSA6IHVuY2hlY2tlZERhdGE7XG5cbiAgICBjb25zdCBjaGFydFNpemluZ1ZhbHVlcyA9IGdldEZ1bGxDaGFydFNjYWxlVmFsdWVzKFxuICAgICAgY29uZmlnLFxuICAgICAgZGF0YSxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgZGF0ZUZvcm1hdCxcbiAgICApO1xuICAgIGlmIChjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ3NpemluZycgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0aWNrQ291bnQgPSBnZXRCdWNrZXRUaWNrQ291bnQoY2hhcnRTaXppbmdWYWx1ZXMpO1xuICAgIGNvbnN0IHhUaWNrcyA9IChcbiAgICAgIGRhdGEudHlwZSA9PT0gJ2xhYmVsZWQnXG4gICAgICAgID8gZ2VuZXJhdGVMYWJlbGxlZFRpY2tzKGRhdGEsIGNvbmZpZywgdGlja0NvdW50LCBjaGFydFNpemluZ1ZhbHVlcylcbiAgICAgICAgOiBnZW5lcmF0ZVRpbWVzZXJpZXNUaWNrcyhcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICB0aWNrQ291bnQsXG4gICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgKVxuICAgICkubWFwKHRpY2sgPT4gdG9YVGljayh0aWNrKSk7XG4gICAgY29uc3QgeyBzY2FsZSwgdGlja3M6IGRhdGFUaWNrcyB9ID0gY2FsY0RhdGFBeGlzU2NhbGVzQW5kVGlja3MoXG4gICAgICBkYXRhLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICk7XG4gICAgY29uc3QgeVRpY2tzID0gZGF0YVRpY2tzLm1hcCh0aWNrID0+IHRvWVRpY2sodGljaykpO1xuICAgIGNvbnN0IHplcm9BeGlzUG9zVmFsID0gc2NhbGUoMCwgdHJ1ZSk7XG5cbiAgICBjb25zdCBncmFkaWVudHM6IFJlY3RbXVtdID0gW107XG4gICAgY29uc3QgYmFyczogUmVjdFtdW10gPSBkYXRhLnlzLm1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpbmRTZXJpZXNHcmFkaWVudHM6IFJlY3RbXSA9IFtdO1xuICAgICAgY29uc3QgaW5kU2VyaWVzQmFycyA9IHkudmFsdWVzLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgeyB5VmFsdWUsIGhlaWdodCB9ID0gZ2V0QmFyWUluZm8oXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgeUluZGV4LFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIHNjYWxlLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB4VmFsdWUgPSBjYWxjdWxhdGVCYXJQb3NpdGlvbihcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBpc0NsdXN0ZXJlZERhdGEoZGF0YSwgY29uZmlnLCBmYWxzZSkgPyB5SW5kZXggOiAwLFxuICAgICAgICApO1xuICAgICAgICBpZiAoaXNGdW5uZWwpIHtcbiAgICAgICAgICAvL1RoZSBlbXB0eSBncmFkaWVudCBzdGlsbCBuZWVkcyB0byBiZSBpbnNlcnRlZCB0byBrZWVwIGRhdGEgYWxpZ25lZFxuICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgaW5kU2VyaWVzR3JhZGllbnRzLnB1c2goe1xuICAgICAgICAgICAgICBlbGVtZW50VHlwZTogJ3JlY3QnLFxuICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgeVZhbHVlOiBwcmV2QmFyWVZhbCB9ID0gZ2V0QmFyWUluZm8oXG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgeUluZGV4LFxuICAgICAgICAgICAgICBpbmRleCAtIDEsXG4gICAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaW5kU2VyaWVzR3JhZGllbnRzLnB1c2goe1xuICAgICAgICAgICAgICBlbGVtZW50VHlwZTogJ3JlY3QnLFxuICAgICAgICAgICAgICB4OiB4VmFsdWUsXG4gICAgICAgICAgICAgIHk6IHByZXZCYXJZVmFsLFxuICAgICAgICAgICAgICB3aWR0aDogY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLm1heCh5VmFsdWUgLSBwcmV2QmFyWVZhbCwgMCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYXI6IFJlY3QgPSB7XG4gICAgICAgICAgZWxlbWVudFR5cGU6ICdyZWN0JyxcbiAgICAgICAgICB4OiB4VmFsdWUsXG4gICAgICAgICAgeTogeVZhbHVlLFxuICAgICAgICAgIHdpZHRoOiBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYmFyO1xuICAgICAgfSk7XG4gICAgICBncmFkaWVudHMucHVzaChpbmRTZXJpZXNHcmFkaWVudHMpO1xuICAgICAgcmV0dXJuIGluZFNlcmllc0JhcnM7XG4gICAgfSk7XG4gICAgbGV0IHN1cHBCYXJzOiBSZWN0W11bXSA9IFtdO1xuICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSkge1xuICAgICAgc3VwcEJhcnMgPSBkYXRhLnN1cHBsZW1lbnRhcnlZcy5tYXAoKHksIHlJbmRleCkgPT5cbiAgICAgICAgeS52YWx1ZXMubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgeVZhbHVlLCBoZWlnaHQgfSA9IGdldEJhcllJbmZvKFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHlJbmRleCxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeFZhbHVlID0gY2FsY3VsYXRlQmFyUG9zaXRpb24oXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIHkuc3VwcGxlbWVudGFsSW5kZXggKyAxLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAncmVjdCcsXG4gICAgICAgICAgICB4OiB4VmFsdWUsXG4gICAgICAgICAgICB5OiB5VmFsdWUsXG4gICAgICAgICAgICB3aWR0aDogY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBiYXJzLnB1c2goLi4uc3VwcEJhcnMpO1xuICAgICAgY29sb3JzLnB1c2goXG4gICAgICAgIC4uLmRhdGEuc3VwcGxlbWVudGFyeVlzLm1hcCh5ID0+XG4gICAgICAgICAgZ2V0Q29sb3IoeSwgY29sb3JJbmRpY2VzLCBjb25maWcuY29sb3JzKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2F0ZXJmYWxsTGluZXM6IHtcbiAgICAgIHgxOiBudW1iZXI7XG4gICAgICB4MjogbnVtYmVyO1xuICAgICAgeTE6IG51bWJlcjtcbiAgICAgIHkyOiBudW1iZXI7XG4gICAgfVtdID0gW107XG4gICAgaWYgKGlzV2F0ZXJmYWxsKSB7XG4gICAgICAvL01vdmUgYmFycyBiYXNlZCBvbiBoZWlnaHQgb2YgcHJldmlvdXMgYmFycyAoZXhjZXB0IHRoZSB0b3RhbCBiYXIpXG4gICAgICBsZXQgYmFyT2Zmc2V0UnVubmluZ1RvdGFsID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBsZXQgYmFyT2Zmc2V0Q2hhbmdlID0gMDtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBiYXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgYmFySXNOZWdhdGl2ZSA9XG4gICAgICAgICAgICBiYXJzW2pdW2ldLnkgPj0gemVyb0F4aXNQb3NWYWwgJiYgYmFyc1tqXVtpXS5oZWlnaHQgPiAwO1xuICAgICAgICAgIGlmIChiYXJJc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICBiYXJPZmZzZXRDaGFuZ2UgLT0gYmFyc1tqXVtpXS5oZWlnaHQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJhck9mZnNldENoYW5nZSArPSBiYXJzW2pdW2ldLmhlaWdodDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYmFyc1tqXVtpXS5vZmZzZXQgPSBiYXJPZmZzZXRSdW5uaW5nVG90YWw7XG4gICAgICAgICAgYmFyc1tqXVtpXS55IC09IGJhck9mZnNldFJ1bm5pbmdUb3RhbDtcbiAgICAgICAgICBpZiAoaiA9PT0gYmFycy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBjb25zdCB4MSA9IGJhcnNbal1baV0ueCArIGJhcnNbYmFycy5sZW5ndGggLSAxXVtpXS53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHkxID0gYmFyc1tqXVtpXS55ICsgKGJhcklzTmVnYXRpdmUgPyBiYXJzW2pdW2ldLmhlaWdodCA6IDApO1xuICAgICAgICAgICAgY29uc3QgeDIgPSBiYXJzW2pdW2kgKyAxXS54O1xuICAgICAgICAgICAgY29uc3QgeTIgPSB5MTtcbiAgICAgICAgICAgIHdhdGVyZmFsbExpbmVzLnB1c2goe1xuICAgICAgICAgICAgICB4MSxcbiAgICAgICAgICAgICAgeTEsXG4gICAgICAgICAgICAgIHgyLFxuICAgICAgICAgICAgICB5MixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBiYXJPZmZzZXRSdW5uaW5nVG90YWwgKz0gYmFyT2Zmc2V0Q2hhbmdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRhdGFMYWJlbHM6IERhdGFMYWJlbFtdID0gZGF0YS55cy5mbGF0TWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHN1YkxhYmVsczogRGF0YUxhYmVsW10gPSB5LnZhbHVlcy5tYXAoKHZhbCwgeEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTmVnYXRpdmVCYXIgPVxuICAgICAgICAgIGJhcnNbeUluZGV4XVt4SW5kZXhdLnkgPj0gemVyb0F4aXNQb3NWYWwgJiZcbiAgICAgICAgICBiYXJzW3lJbmRleF1beEluZGV4XS5oZWlnaHQgPiAwO1xuICAgICAgICBjb25zdCB5T2Zmc2V0ID0gaXNOZWdhdGl2ZUJhclxuICAgICAgICAgID8gY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZyArXG4gICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxUZXh0U2l6ZSArXG4gICAgICAgICAgICBiYXJzW3lJbmRleF1beEluZGV4XS5oZWlnaHRcbiAgICAgICAgICA6IC1jaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJyxcbiAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgIHBpcGVUcmFuc2Zvcm0odmFsLCBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgeEluZGV4KSkgPz8gJycsXG4gICAgICAgICAgeVBvczpcbiAgICAgICAgICAgIChpc0Z1bm5lbCAmJiBncmFkaWVudHNbeUluZGV4XVt4SW5kZXhdLmhlaWdodCAhPT0gMFxuICAgICAgICAgICAgICA/IGdyYWRpZW50c1t5SW5kZXhdW3hJbmRleF0ueVxuICAgICAgICAgICAgICA6IGJhcnNbeUluZGV4XVt4SW5kZXhdLnkpICsgeU9mZnNldCxcbiAgICAgICAgICB4UG9zOiBiYXJzW3lJbmRleF1beEluZGV4XS54ICsgYmFyc1t5SW5kZXhdW3hJbmRleF0ud2lkdGggLyAyLFxuICAgICAgICAgIGFuY2hvcjogJ21pZGRsZScsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzdWJMYWJlbHM7XG4gICAgfSk7XG4gICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpKSB7XG4gICAgICBjb25zdCBzdXBwRGF0YUxhYmVsczogRGF0YUxhYmVsW10gPSBkYXRhLnN1cHBsZW1lbnRhcnlZcy5mbGF0TWFwKFxuICAgICAgICAoeSwgeUluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3ViTGFiZWxzOiBEYXRhTGFiZWxbXSA9IHkudmFsdWVzLm1hcCgodmFsLCB4SW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzTmVnYXRpdmVCYXIgPVxuICAgICAgICAgICAgICBzdXBwQmFyc1t5SW5kZXhdW3hJbmRleF0ueSA+PSB6ZXJvQXhpc1Bvc1ZhbCAmJlxuICAgICAgICAgICAgICBzdXBwQmFyc1t5SW5kZXhdW3hJbmRleF0uaGVpZ2h0ID4gMDtcbiAgICAgICAgICAgIGNvbnN0IHlPZmZzZXQgPSBpc05lZ2F0aXZlQmFyXG4gICAgICAgICAgICAgID8gY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZyArXG4gICAgICAgICAgICAgICAgc3VwcEJhcnNbeUluZGV4XVt4SW5kZXhdLmhlaWdodFxuICAgICAgICAgICAgICA6IC1jaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnLFxuICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICBwaXBlVHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgKSA/PyAnJyxcbiAgICAgICAgICAgICAgeVBvczogc3VwcEJhcnNbeUluZGV4XVt4SW5kZXhdLnkgKyB5T2Zmc2V0LFxuICAgICAgICAgICAgICB4UG9zOlxuICAgICAgICAgICAgICAgIHN1cHBCYXJzW3lJbmRleF1beEluZGV4XS54ICsgc3VwcEJhcnNbeUluZGV4XVt4SW5kZXhdLndpZHRoIC8gMixcbiAgICAgICAgICAgICAgYW5jaG9yOiAnbWlkZGxlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHN1YkxhYmVscztcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBkYXRhTGFiZWxzLnB1c2goLi4uc3VwcERhdGFMYWJlbHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczoge1xuICAgICAgcmVjdDogRE9NUmVjdDtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFg6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFk6IG51bWJlcjtcbiAgICB9KTogSG92ZXJSZXR1cm4ge1xuICAgICAgY29uc3QgcmVhbFBvc1ggPSBwb3MueCArIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgcmVhbFBvc1kgPSBwb3MueSArIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgaWYgKFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCB8fFxuICAgICAgICBnZXRJZkhvdmVyT3V0T2ZCb3VuZHMoXG4gICAgICAgICAgcG9zLngsXG4gICAgICAgICAgcG9zLnksXG4gICAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgICAgcmVhbFBvc1ksXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdXBwWXMgPSBoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSA/IGRhdGEuc3VwcGxlbWVudGFyeVlzIDogbnVsbDtcblxuICAgICAgY29uc3QgeEhvdmVySW5kaWNlcyA9IGdldEJ1Y2tldEFuZENsdXN0ZXJOdW1Gb3JIb3ZlcihcbiAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGRhdGEueC5sZW5ndGgsXG4gICAgICApO1xuICAgICAgaWYgKCF4SG92ZXJJbmRpY2VzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICBidWNrZXROdW06IHhJbmRleCxcbiAgICAgICAgY2x1c3Rlck51bSxcbiAgICAgICAgY2x1c3Rlck5vcm1Db3VudCxcbiAgICAgICAgY2x1c3Rlck51bVR5cGUsXG4gICAgICB9ID0geEhvdmVySW5kaWNlcztcblxuICAgICAgbGV0IGlzU3VwcFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gICAgICBsZXQgc3VwcEluZGV4VmFsID0gMDtcbiAgICAgIGlmIChzdXBwWXMpIHtcbiAgICAgICAgc3VwcEluZGV4VmFsID0gY2x1c3Rlck51bSAtIGNsdXN0ZXJOb3JtQ291bnQ7XG4gICAgICAgIGlmIChjbHVzdGVyTnVtVHlwZSA9PT0gJ3N1cHAnKSB7XG4gICAgICAgICAgaXNTdXBwVmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGNYID0gY2FsY3VsYXRlQmFyUG9zaXRpb24oXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgY2x1c3Rlck51bSxcbiAgICAgICk7XG4gICAgICBjb25zdCB5cyA9IGRhdGEueXMubWFwKChfLCBtYXBZSW5kZXgpID0+XG4gICAgICAgIGlzU3VwcFZhbHVlXG4gICAgICAgICAgPyBnZXRTdXBwQmFyWUluZm9WaWFZSW5kZXgoXG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgbWFwWUluZGV4LFxuICAgICAgICAgICAgICBzdXBwSW5kZXhWYWwsXG4gICAgICAgICAgICAgIHhJbmRleCxcbiAgICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgICApLnlWYWx1ZVxuICAgICAgICAgIDogZ2V0QmFyWUluZm8oZGF0YSwgY29uZmlnLCBtYXBZSW5kZXgsIHhJbmRleCwgc2NhbGUpLnlWYWx1ZSAtXG4gICAgICAgICAgICAoIWlzU3VwcFZhbHVlICYmIGlzV2F0ZXJmYWxsXG4gICAgICAgICAgICAgID8gYmFyc1ttYXBZSW5kZXhdW3hJbmRleF0ub2Zmc2V0ID8/IDBcbiAgICAgICAgICAgICAgOiAwKSxcbiAgICAgICk7XG4gICAgICBjb25zdCB5UG9zU2lnbiA9IHplcm9BeGlzUG9zVmFsIC0gcmVhbFBvc1k7XG4gICAgICBsZXQgdmlzaWJsZVlJbmRleCA9IC0xO1xuICAgICAgbGV0IGRyb3BPZmZIb3ZlckRldGVjdGVkID0gZmFsc2U7XG4gICAgICBpZiAoeVBvc1NpZ24gPCAwICYmIGRhdGEueXMuZmluZCh5ID0+IHkudmFsdWVzLmZpbmQodmFsID0+IHZhbCA8IDApKSkge1xuICAgICAgICBmb3IgKGxldCBpID0geXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAoeXNbaV0gPj0gemVyb0F4aXNQb3NWYWwgJiYgeXNbaV0gPCByZWFsUG9zWSkge1xuICAgICAgICAgICAgdmlzaWJsZVlJbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoeXNbaV0gPD0gemVyb0F4aXNQb3NWYWwgJiYgeXNbaV0gPCByZWFsUG9zWSkge1xuICAgICAgICAgICAgdmlzaWJsZVlJbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0NsdXN0ZXJlZERhdGEoZGF0YSwgY29uZmlnLCBmYWxzZSkgJiYgIXN1cHBZcykge1xuICAgICAgICB2aXNpYmxlWUluZGV4ID0gY2x1c3Rlck51bTtcbiAgICAgICAgaWYgKGlzRnVubmVsICYmIHhJbmRleCAhPT0gMCAmJiB5c1t2aXNpYmxlWUluZGV4XSA+IHJlYWxQb3NZKSB7XG4gICAgICAgICAgZHJvcE9mZkhvdmVyRGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodmlzaWJsZVlJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgaWYgKHJlYWxQb3NZIDw9IHplcm9BeGlzUG9zVmFsKSB7XG4gICAgICAgICAgdmlzaWJsZVlJbmRleCA9IHlzLmluZGV4T2YoTWF0aC5taW4oLi4ueXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aXNpYmxlWUluZGV4ID0geXMuaW5kZXhPZihNYXRoLm1heCguLi55cykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB5SW5kZXggPSB2aXNpYmxlSW5kaWNlc1t2aXNpYmxlWUluZGV4XTtcbiAgICAgIGxldCB7IHlWYWx1ZSwgaGVpZ2h0IH0gPSBpc1N1cHBWYWx1ZVxuICAgICAgICA/IGdldFN1cHBCYXJZSW5mb1ZpYVlJbmRleChcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICB5SW5kZXgsXG4gICAgICAgICAgICBzdXBwSW5kZXhWYWwsXG4gICAgICAgICAgICB4SW5kZXgsXG4gICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICApXG4gICAgICAgIDogZ2V0QmFyWUluZm8oZGF0YSwgY29uZmlnLCB5SW5kZXgsIHhJbmRleCwgc2NhbGUpO1xuICAgICAgaWYgKGRyb3BPZmZIb3ZlckRldGVjdGVkKSB7XG4gICAgICAgIHlWYWx1ZSA9IGdyYWRpZW50c1t5SW5kZXhdW3hJbmRleF0ueTtcbiAgICAgICAgaGVpZ2h0ID0gZ3JhZGllbnRzW3lJbmRleF1beEluZGV4XS5oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IGNhbGNYIC0gcG9zLmNvbnRhaW5lclNjcm9sbFggLSBTTUFMTF9QQURESU5HO1xuICAgICAgY29uc3Qgd2lkdGggPSBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplICsgU01BTExfUEFERElORyAqIDI7XG4gICAgICBjb25zdCB3YXRlcmZhbGxPZmZzZXQgPVxuICAgICAgICAhaXNTdXBwVmFsdWUgJiYgaXNXYXRlcmZhbGwgPyBiYXJzW3lJbmRleF1beEluZGV4XS5vZmZzZXQgPz8gMCA6IDA7XG4gICAgICBjb25zdCBsb2NhbEFuY2hvclkgPSB5VmFsdWUgLSBwb3MuY29udGFpbmVyU2Nyb2xsWSAtIHdhdGVyZmFsbE9mZnNldDtcbiAgICAgIGNvbnN0IHsgYW5jaG9yWCwgYW5jaG9yWSwgYW5jaG9yV2lkdGgsIGFuY2hvckhlaWdodCB9ID1cbiAgICAgICAgY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgICAgICAgIGxvY2FsQW5jaG9yWCxcbiAgICAgICAgICBsb2NhbEFuY2hvclksXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICk7XG4gICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgYW5jaG9yWCArIHBvcy5yZWN0LngsXG4gICAgICAgIGFuY2hvclkgKyBwb3MucmVjdC55LFxuICAgICAgICBhbmNob3JXaWR0aCxcbiAgICAgICAgYW5jaG9ySGVpZ2h0LFxuICAgICAgKTtcbiAgICAgIC8vV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgaW5kZXggZm9yIHRoZSBsYXRlciBjaGVja0lmU2Vjb25kYXJ5IGNhbGxcbiAgICAgIGNvbnN0IHlzRm9yTWV0cmljczoge1xuICAgICAgICBkYXRhOiBTdXBwbGVtZW50YXJ5RGF0YVkgfCBEYXRhWTtcbiAgICAgICAgb3JpZ2luYWxJbmRleDogbnVtYmVyO1xuICAgICAgfVtdID1cbiAgICAgICAgaXNTdXBwVmFsdWUgJiYgc3VwcFlzXG4gICAgICAgICAgPyBzdXBwWXNcbiAgICAgICAgICAgICAgLm1hcCgoc3VwcFksIGluZGV4KSA9PiAoeyBkYXRhOiBzdXBwWSwgb3JpZ2luYWxJbmRleDogaW5kZXggfSkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoc3VwcFkgPT4gc3VwcFkuZGF0YS5zdXBwbGVtZW50YWxJbmRleCA9PT0gc3VwcEluZGV4VmFsKVxuICAgICAgICAgIDogZGF0YS55cy5tYXAoKHksIGluZGV4KSA9PiAoeyBkYXRhOiB5LCBvcmlnaW5hbEluZGV4OiBpbmRleCB9KSk7XG4gICAgICAvLyBGaW5kIHRoZSBzcGVjaWZpYyBzdXBwbGVtZW50YXJ5IGl0ZW0gdGhhdCB3YXMgaG92ZXJlZFxuICAgICAgY29uc3QgZ3JvdXBTdXBwcyA9IHN1cHBZc1xuICAgICAgICA/IHN1cHBZcy5maWx0ZXIocyA9PiBzLnN1cHBsZW1lbnRhbEluZGV4ID09PSBzdXBwSW5kZXhWYWwpID8/IFtdXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBzdXBwQXJyYXlJbmRleCA9IHZpc2libGVZSW5kZXg7IC8vIFVzZSB0aGUgdmlzdWFsIFkgcG9zaXRpb24gd2l0aGluIHRoZSBsYXllclxuICAgICAgY29uc3QgZmlsdGVyZWRTdXBwWUluZGV4ID1cbiAgICAgICAgc3VwcEFycmF5SW5kZXggPj0gMCAmJiBzdXBwQXJyYXlJbmRleCA8IGdyb3VwU3VwcHMubGVuZ3RoICYmIHN1cHBZc1xuICAgICAgICAgID8gc3VwcFlzLmluZGV4T2YoZ3JvdXBTdXBwc1tzdXBwQXJyYXlJbmRleF0pID8/IC0xXG4gICAgICAgICAgOiAtMTtcbiAgICAgIGNvbnN0IHN1cHBZSW5kZXggPVxuICAgICAgICBmaWx0ZXJlZFN1cHBZSW5kZXggPj0gMCA/IHZpc2libGVTdXBwSW5kaWNlc1tmaWx0ZXJlZFN1cHBZSW5kZXhdIDogLTE7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhvdmVyVHlwZTogJ3N0YW5kYXJkJyxcbiAgICAgICAgeDogY2FsY1ggKyBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplIC8gMixcbiAgICAgICAgeEluZGV4LFxuICAgICAgICB5cyxcbiAgICAgICAgeUluZGV4LFxuICAgICAgICB2aXNpYmxlWUluZGV4LFxuICAgICAgICAuLi4oaXNTdXBwVmFsdWUgJiYgc3VwcFlJbmRleCA+PSAwXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGlzU3VwcFZhbHVlLFxuICAgICAgICAgICAgICBzdXBwWUluZGV4OiBzdXBwWUluZGV4LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oZHJvcE9mZkhvdmVyRGV0ZWN0ZWQgPyB7IGlzRHJvcE9mZjogdHJ1ZSB9IDoge30pLFxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIGRhdGU6XG4gICAgICAgICAgICBkYXRhLnR5cGUgPT09ICdsYWJlbGVkJ1xuICAgICAgICAgICAgICA/IGRyb3BPZmZIb3ZlckRldGVjdGVkXG4gICAgICAgICAgICAgICAgPyAnRHJvcCBvZmYgZnJvbSAnLmNvbmNhdChkYXRhLnhbeEluZGV4IC0gMV0ubGFiZWwpXG4gICAgICAgICAgICAgICAgOiBkYXRhLnhbeEluZGV4XS5sYWJlbFxuICAgICAgICAgICAgICA6IHV0Y0Zvcm1hdCgnJUIgJWQsICVZJykobmV3IERhdGUoZGF0YS54W3hJbmRleF0pKSxcbiAgICAgICAgICBtZXRyaWNzOiB5c0Zvck1ldHJpY3NcbiAgICAgICAgICAgIC5tYXAoeSA9PiAoe1xuICAgICAgICAgICAgICBjb2xvcjogZ2V0Q29sb3IoXG4gICAgICAgICAgICAgICAgaXNXYXRlcmZhbGwgPyB3YXRlcmZhbGxEYXRhLm1hcC5nZXQoeS5kYXRhKSA6IHkuZGF0YSxcbiAgICAgICAgICAgICAgICBjb2xvckluZGljZXMsXG4gICAgICAgICAgICAgICAgY29uZmlnLmNvbG9ycyxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkuZGF0YS5sYWJlbCxcbiAgICAgICAgICAgICAgcGF0dGVybjogeS5kYXRhLnBhdHRlcm4sXG4gICAgICAgICAgICAgIHZhbHVlOiBwaXBlVHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIGRyb3BPZmZIb3ZlckRldGVjdGVkXG4gICAgICAgICAgICAgICAgICA/IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgICAgIHkuZGF0YS52YWx1ZXNbeEluZGV4IC0gMV0gLSB5LmRhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiB5LmRhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShcbiAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICB5Lm9yaWdpbmFsSW5kZXgsXG4gICAgICAgICAgICAgICAgICBkcm9wT2ZmSG92ZXJEZXRlY3RlZCA/IHhJbmRleCAtIDEgOiB4SW5kZXgsXG4gICAgICAgICAgICAgICAgICBpc1N1cHBWYWx1ZSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKF8sIGkpID0+IGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYXJ0V2lkdGg6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsV2lkdGgsXG4gICAgICBjaGFydEhlaWdodDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxIZWlnaHQsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgIHhUaWNrcyxcbiAgICAgIHlUaWNrcyxcbiAgICAgIGNvbG9ycyxcbiAgICAgIGJhcnMsXG4gICAgICBsaW5lczogW10sXG4gICAgICBjaXJjbGVzOiBbXSxcbiAgICAgIGFyZWFzOiBbXSxcbiAgICAgIGhvdmVyLFxuICAgICAgYXJjczogW10sXG4gICAgICBob3Jpem9udGFsQmFyczogW10sXG4gICAgICBkYXRhTGFiZWxzLFxuICAgICAgd2F0ZXJmYWxsTGluZXMsXG4gICAgICBncmFkaWVudHMsXG4gICAgICBmbG93Q29ubmVjdGlvbnM6IFtdLFxuICAgICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGUsXG4gICAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlLFxuICAgICAgY2hhcnRFcnJvcjogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaG9yaXpvbnRhbEJhcnMoXG4gICAgY29uZmlnOiBDb25maWdXaXRoRnVsbFNjYWxpbmcsXG4gICAgYWxsRGF0YTogSW5wdXREYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGlmICghd2FybkZsb3dEYXRhKGFsbERhdGEsICdob3Jpem9udGFsIGJhcicpKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnY29uZmlnJyB9O1xuICAgIH1cbiAgICAvL1NvbWUgb2YgdGhpcyBzdHVmZiBnZXRzIGNvbmZ1c2luZywgYmVjYXVzZSB4IGFuZCB5IGFyZSBlc3NlbnRpYWxseSBpbnZlcnRlZCBoZXJlXG4gICAgLy8gIFNvLCBpZiB5b3Ugc2VlIGEgc2l0dWF0aW9uIHdoZXJlIGEgdmFyaWFibGUgaXMgbmFtZWQgJ3knLCBidXQgcmVmZXJlbmNpbmdcbiAgICAvLyAgJ3gnIChvciB2aWNlIHZlcnNhKSwgdGhhdCdzIHdoeVxuICAgIGNvbnN0IHsgZGF0YSwgdmlzaWJsZUluZGljZXMsIHZpc2libGVTdXBwSW5kaWNlcyB9ID0gaGlkZShhbGxEYXRhKTtcbiAgICBpZiAoXG4gICAgICBjb25maWcuc2hvd0RhdGFMYWJlbHMgPT09IHRydWUgJiZcbiAgICAgIGlzU3RhY2tlZERhdGEoY29uZmlnKSAmJlxuICAgICAgIWlzR3JvdXBpbmdUeXBlRXhjZXB0aW9uKGRhdGEsIGNvbmZpZylcbiAgICApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIERhdGEgbGFiZWxzIGFyZW4ndCBzdXBwb3J0ZWQgZm9yIGFueSBzdGFja2VkIGNoYXJ0IHR5cGVcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgJiZcbiAgICAgIGlzQ2x1c3RlcmVkRGF0YShkYXRhLCBjb25maWcsIGZhbHNlKSAmJlxuICAgICAgIWlzR3JvdXBpbmdUeXBlRXhjZXB0aW9uKGRhdGEsIGNvbmZpZylcbiAgICApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIFN1cHBsZW1lbnRhcnkgeSB2YWx1ZXMgYXJlbid0IHN1cHBvcnRlZCBmb3IgY2x1c3RlcmVkIGRhdGEgKGp1c3QgdXNlIGFub3RoZXIgbm9ybWFsIHkgc2VyaWVzKVwiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cblxuICAgIGNvbnN0IHsgZGF0ZUZvcm1hdCwgcGlwZVRyYW5zZm9ybSwgY29sb3JJbmRpY2VzLCBjb2xvcnMgfSA9XG4gICAgICBnZXRGb3JtYXR0aW5nQW5kQ29sb3JzKGFsbERhdGEsIGRhdGEsIGNvbmZpZyk7XG5cbiAgICBjb25zdCBjaGFydFNpemluZ1ZhbHVlcyA9IGdldEZ1bGxDaGFydFNjYWxlVmFsdWVzKFxuICAgICAgY29uZmlnLFxuICAgICAgZGF0YSxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgZGF0ZUZvcm1hdCxcbiAgICApO1xuICAgIGlmIChjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ3NpemluZycgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0aWNrQ291bnQgPSBnZXRCdWNrZXRUaWNrQ291bnQoY2hhcnRTaXppbmdWYWx1ZXMpO1xuICAgIGNvbnN0IHlUaWNrcyA9IChcbiAgICAgIGRhdGEudHlwZSA9PT0gJ2xhYmVsZWQnXG4gICAgICAgID8gZ2VuZXJhdGVMYWJlbGxlZFRpY2tzKGRhdGEsIGNvbmZpZywgdGlja0NvdW50LCBjaGFydFNpemluZ1ZhbHVlcylcbiAgICAgICAgOiBnZW5lcmF0ZVRpbWVzZXJpZXNUaWNrcyhcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICB0aWNrQ291bnQsXG4gICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgKVxuICAgICkubWFwKHRpY2sgPT4gdG9ZVGljayh0aWNrKSk7XG4gICAgY29uc3QgeyBzY2FsZSwgdGlja3M6IGRhdGFUaWNrcyB9ID0gY2FsY0RhdGFBeGlzU2NhbGVzQW5kVGlja3MoXG4gICAgICBkYXRhLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICk7XG4gICAgY29uc3QgeFRpY2tzID0gZGF0YVRpY2tzLm1hcCh0aWNrID0+IHRvWFRpY2sodGljaykpO1xuICAgIGNvbnN0IHplcm9BeGlzUG9zVmFsID0gc2NhbGUoMCwgdHJ1ZSk7XG5cbiAgICBjb25zdCBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnM6IHtcbiAgICAgIHhQb3M6IG51bWJlcjtcbiAgICAgIHlQb3M6IG51bWJlcjtcbiAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgfVtdW10gPSBbXTtcbiAgICBjb25zdCBob3Jpem9udGFsQmFycyA9IGRhdGEueXMubWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHN1YlNpbXBIb3JCYXJzOiB7XG4gICAgICAgIHhQb3M6IG51bWJlcjtcbiAgICAgICAgeVBvczogbnVtYmVyO1xuICAgICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgfVtdID0gW107XG4gICAgICBjb25zdCByZXRWYWwgPSB5LnZhbHVlcy5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgeFZhbHVlLCB3aWR0aCB9ID0gZ2V0QmFyWEluZm8oXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgeUluZGV4LFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIHNjYWxlLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjbHVzdGVySW5mbyA9IGdldENsdXN0ZXJJbmZvRm9yQnVja2V0KGRhdGEsIGNvbmZpZyk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJOdW0gPSBjbHVzdGVySW5mby5ub3JtQ2x1c3RlckluZGljZXMuaW5kZXhPZih5SW5kZXgpO1xuICAgICAgICBjb25zdCB5VmFsdWUgPSBjYWxjdWxhdGVCYXJQb3NpdGlvbihcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBpc0NsdXN0ZXJlZERhdGEoZGF0YSwgY29uZmlnLCBmYWxzZSkgPyBjbHVzdGVyTnVtIDogMCxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBob3JSID0gTWF0aC5taW4oXG4gICAgICAgICAgREVGQVVMVF9IT1JJWk9OVEFMX0JBUl9DT1JORVJfUkFESVVTLFxuICAgICAgICAgIE1hdGguZmxvb3Iod2lkdGggLyAyKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdmVyUiA9IE1hdGgubWluKFxuICAgICAgICAgIERFRkFVTFRfSE9SSVpPTlRBTF9CQVJfQ09STkVSX1JBRElVUyxcbiAgICAgICAgICBNYXRoLmZsb29yKGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgLyAyKSxcbiAgICAgICAgKTtcbiAgICAgICAgc3ViU2ltcEhvckJhcnMucHVzaCh7XG4gICAgICAgICAgeFBvczogeFZhbHVlLFxuICAgICAgICAgIHlQb3M6IHlWYWx1ZSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vSWYgY2x1c3Rlck51bSBpcyAtMSwgdGhlbiB0aGUgdmFsdWUgb2YgZGF0YVt5SW5kZXhdW3hJbmRleF0gbXVzdCBiZSB6ZXJvXG4gICAgICAgIGlmIChjbHVzdGVyTnVtID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBob3Jpem9udGFsQmFyOiAnJyxcbiAgICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICAgIHg6IHhWYWx1ZSxcbiAgICAgICAgICAgIHk6IHlWYWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vRG9uJ3QgZHJhdyBhbnl0aGluZyBmb3IgemVyby12YWx1ZSBiYXJzXG4gICAgICAgIGlmICh3aWR0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBob3Jpem9udGFsQmFyOiAnJyxcbiAgICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICAgIHg6IHhWYWx1ZSxcbiAgICAgICAgICAgIHk6IHlWYWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNQb3NpdGl2ZSA9IGRhdGEueXNbeUluZGV4XS52YWx1ZXNbaW5kZXhdID4gMDtcbiAgICAgICAgY29uc3QgaGFzQW55TmVnYXRpdmVCYXJzID0gZGF0YS55c1xuICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgLmZpbmQodmFsID0+IHZhbCA8IDApO1xuICAgICAgICBjb25zdCBoYXNBbnlQb3NpdGl2ZUJhcnMgPSBkYXRhLnlzXG4gICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAuZmluZCh2YWwgPT4gdmFsID4gMCk7XG5cbiAgICAgICAgLy9UaGVzZSBjaGVja3MgYXJlIHRvIG1ha2Ugc3VyZSB3ZSBzdGlsbCByb3VuZCBpZiBhbGwgcHJldmlvdXMvbGF0ZXIgdmFsdWVzIGFyZSAwXG4gICAgICAgIGNvbnN0IGFsbExlZnRaZXJvID0gaXNQb3NpdGl2ZVxuICAgICAgICAgID8gZGF0YS55c1xuICAgICAgICAgICAgICAuc2xpY2UoMCwgeUluZGV4KVxuICAgICAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgPiAwKS5sZW5ndGggPT09IDAgJiYgIWhhc0FueU5lZ2F0aXZlQmFyc1xuICAgICAgICAgIDogZGF0YS55c1xuICAgICAgICAgICAgICAuc2xpY2UoeUluZGV4ICsgMSwgZGF0YS55cy5sZW5ndGgpXG4gICAgICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgICAgIC5maWx0ZXIodmFsID0+IHZhbCA8IDApLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgY29uc3QgbGVmdFNpZGVSb3VuZCA9ICFpc1N0YWNrZWREYXRhKGNvbmZpZykgfHwgYWxsTGVmdFplcm87XG4gICAgICAgIGNvbnN0IGFsbFJpZ2h0WmVybyA9IGlzUG9zaXRpdmVcbiAgICAgICAgICA/IGRhdGEueXNcbiAgICAgICAgICAgICAgLnNsaWNlKHlJbmRleCArIDEsIGRhdGEueXMubGVuZ3RoKVxuICAgICAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgPiAwKS5sZW5ndGggPT09IDBcbiAgICAgICAgICA6IGRhdGEueXNcbiAgICAgICAgICAgICAgLnNsaWNlKDAsIHlJbmRleClcbiAgICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgICAgLmZpbHRlcih2YWwgPT4gdmFsIDwgMCkubGVuZ3RoID09PSAwICYmICFoYXNBbnlQb3NpdGl2ZUJhcnM7XG4gICAgICAgIGNvbnN0IHJpZ2h0U2lkZVJvdW5kID0gIWlzU3RhY2tlZERhdGEoY29uZmlnKSB8fCBhbGxSaWdodFplcm87XG4gICAgICAgIGNvbnN0IHBhdGhEID0gY2FsY3VsYXRlSG9yaXpvbnRhbEJhclBhdGgoXG4gICAgICAgICAgbGVmdFNpZGVSb3VuZCxcbiAgICAgICAgICByaWdodFNpZGVSb3VuZCxcbiAgICAgICAgICB4VmFsdWUsXG4gICAgICAgICAgeVZhbHVlLFxuICAgICAgICAgIGhvclIsXG4gICAgICAgICAgdmVyUixcbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhvcml6b250YWxCYXI6IHBhdGhELFxuICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICB4OiB4VmFsdWUsXG4gICAgICAgICAgeTogeVZhbHVlLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnMucHVzaChzdWJTaW1wSG9yQmFycyk7XG4gICAgICByZXR1cm4gcmV0VmFsO1xuICAgIH0pO1xuICAgIGNvbnN0IHN1cHBZcyA9IGRhdGEuc3VwcGxlbWVudGFyeVlzO1xuICAgIGNvbnN0IHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnM6IHtcbiAgICAgIHhQb3M6IG51bWJlcjtcbiAgICAgIHlQb3M6IG51bWJlcjtcbiAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgfVtdW10gPSBbXTtcbiAgICBpZiAoc3VwcFlzKSB7XG4gICAgICBjb25zdCBzdXBwSG9yaXpvbnRhbEJhcnMgPSBzdXBwWXMubWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViU2ltcEhvckJhcnM6IHtcbiAgICAgICAgICB4UG9zOiBudW1iZXI7XG4gICAgICAgICAgeVBvczogbnVtYmVyO1xuICAgICAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICAgIH1bXSA9IFtdO1xuICAgICAgICBjb25zdCByZXRWYWwgPSB5LnZhbHVlcy5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyB4VmFsdWUsIHdpZHRoIH0gPSBnZXRCYXJYSW5mbyhcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICB5SW5kZXgsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGNsdXN0ZXJJbmZvID0gZ2V0Q2x1c3RlckluZm9Gb3JCdWNrZXQoZGF0YSwgY29uZmlnKTtcbiAgICAgICAgICBjb25zdCBjbHVzdGVyTnVtID1cbiAgICAgICAgICAgIGNsdXN0ZXJJbmZvLnN1cHBDbHVzdGVySW5kaWNlcy5pbmRleE9mKHkuc3VwcGxlbWVudGFsSW5kZXgpICtcbiAgICAgICAgICAgIGNsdXN0ZXJJbmZvLm5vcm1Db3VudDtcbiAgICAgICAgICBjb25zdCB5VmFsdWUgPSBjYWxjdWxhdGVCYXJQb3NpdGlvbihcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgY2x1c3Rlck51bSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgaG9yUiA9IE1hdGgubWluKFxuICAgICAgICAgICAgREVGQVVMVF9IT1JJWk9OVEFMX0JBUl9DT1JORVJfUkFESVVTLFxuICAgICAgICAgICAgTWF0aC5mbG9vcih3aWR0aCAvIDIpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgdmVyUiA9IE1hdGgubWluKFxuICAgICAgICAgICAgREVGQVVMVF9IT1JJWk9OVEFMX0JBUl9DT1JORVJfUkFESVVTLFxuICAgICAgICAgICAgTWF0aC5mbG9vcihjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplIC8gMiksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzdWJTaW1wSG9yQmFycy5wdXNoKHtcbiAgICAgICAgICAgIHhQb3M6IHhWYWx1ZSxcbiAgICAgICAgICAgIHlQb3M6IHlWYWx1ZSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vRG9uJ3QgZHJhdyBhbnl0aGluZyBmb3IgemVyby12YWx1ZSBiYXJzXG4gICAgICAgICAgaWYgKHdpZHRoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBob3Jpem9udGFsQmFyOiAnJyxcbiAgICAgICAgICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgICAgICAgICB4OiB4VmFsdWUsXG4gICAgICAgICAgICAgIHk6IHlWYWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXNQb3NpdGl2ZSA9IHN1cHBZc1t5SW5kZXhdLnZhbHVlc1tpbmRleF0gPiAwO1xuICAgICAgICAgIGNvbnN0IGhhc0FueU5lZ2F0aXZlQmFycyA9IHN1cHBZc1xuICAgICAgICAgICAgLmZpbHRlcihzdXBwWSA9PiBzdXBwWS5zdXBwbGVtZW50YWxJbmRleCA9PT0geS5zdXBwbGVtZW50YWxJbmRleClcbiAgICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgICAuZmluZCh2YWwgPT4gdmFsIDwgMCk7XG4gICAgICAgICAgY29uc3QgaGFzQW55UG9zaXRpdmVCYXJzID0gc3VwcFlzXG4gICAgICAgICAgICAuZmlsdGVyKHN1cHBZID0+IHN1cHBZLnN1cHBsZW1lbnRhbEluZGV4ID09PSB5LnN1cHBsZW1lbnRhbEluZGV4KVxuICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgIC5maW5kKHZhbCA9PiB2YWwgPiAwKTtcblxuICAgICAgICAgIC8vVGhlc2UgY2hlY2tzIGFyZSB0byBtYWtlIHN1cmUgd2Ugc3RpbGwgcm91bmQgaWYgYWxsIHByZXZpb3VzL2xhdGVyIHZhbHVlcyBhcmUgMFxuICAgICAgICAgIGNvbnN0IGFsbExlZnRaZXJvID0gaXNQb3NpdGl2ZVxuICAgICAgICAgICAgPyBzdXBwWXNcbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgeUluZGV4KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBzdXBwWSA9PiBzdXBwWS5zdXBwbGVtZW50YWxJbmRleCA9PT0geS5zdXBwbGVtZW50YWxJbmRleCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgPiAwKS5sZW5ndGggPT09IDAgJiYgIWhhc0FueU5lZ2F0aXZlQmFyc1xuICAgICAgICAgICAgOiBzdXBwWXNcbiAgICAgICAgICAgICAgICAuc2xpY2UoeUluZGV4ICsgMSwgc3VwcFlzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgc3VwcFkgPT4gc3VwcFkuc3VwcGxlbWVudGFsSW5kZXggPT09IHkuc3VwcGxlbWVudGFsSW5kZXgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgICAgICAgLmZpbHRlcih2YWwgPT4gdmFsIDwgMCkubGVuZ3RoID09PSAwO1xuICAgICAgICAgIGNvbnN0IGxlZnRTaWRlUm91bmQgPSAhaXNTdGFja2VkRGF0YShjb25maWcpIHx8IGFsbExlZnRaZXJvO1xuICAgICAgICAgIGNvbnN0IGFsbFJpZ2h0WmVybyA9IGlzUG9zaXRpdmVcbiAgICAgICAgICAgID8gc3VwcFlzXG4gICAgICAgICAgICAgICAgLnNsaWNlKHlJbmRleCArIDEsIHN1cHBZcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIHN1cHBZID0+IHN1cHBZLnN1cHBsZW1lbnRhbEluZGV4ID09PSB5LnN1cHBsZW1lbnRhbEluZGV4LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIodmFsID0+IHZhbCA+IDApLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgOiBzdXBwWXNcbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgeUluZGV4KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBzdXBwWSA9PiBzdXBwWS5zdXBwbGVtZW50YWxJbmRleCA9PT0geS5zdXBwbGVtZW50YWxJbmRleCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgPCAwKS5sZW5ndGggPT09IDAgJiYgIWhhc0FueVBvc2l0aXZlQmFycztcbiAgICAgICAgICBjb25zdCByaWdodFNpZGVSb3VuZCA9ICFpc1N0YWNrZWREYXRhKGNvbmZpZykgfHwgYWxsUmlnaHRaZXJvO1xuICAgICAgICAgIGNvbnN0IHBhdGhEID0gY2FsY3VsYXRlSG9yaXpvbnRhbEJhclBhdGgoXG4gICAgICAgICAgICBsZWZ0U2lkZVJvdW5kLFxuICAgICAgICAgICAgcmlnaHRTaWRlUm91bmQsXG4gICAgICAgICAgICB4VmFsdWUsXG4gICAgICAgICAgICB5VmFsdWUsXG4gICAgICAgICAgICBob3JSLFxuICAgICAgICAgICAgdmVyUixcbiAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBob3Jpem9udGFsQmFyOiBwYXRoRCxcbiAgICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICAgIHg6IHhWYWx1ZSxcbiAgICAgICAgICAgIHk6IHlWYWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFycy5wdXNoKHN1YlNpbXBIb3JCYXJzKTtcbiAgICAgICAgcmV0dXJuIHJldFZhbDtcbiAgICAgIH0pO1xuICAgICAgaG9yaXpvbnRhbEJhcnMucHVzaCguLi5zdXBwSG9yaXpvbnRhbEJhcnMpO1xuICAgICAgY29sb3JzLnB1c2goLi4uc3VwcFlzLm1hcCh5ID0+IGdldENvbG9yKHksIGNvbG9ySW5kaWNlcywgY29uZmlnLmNvbG9ycykpKTtcbiAgICB9XG5cbiAgICBjb25zdCB5T2Zmc2V0ID0gY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZTtcbiAgICBjb25zdCBkYXRhTGFiZWxzOiBEYXRhTGFiZWxbXSA9IGRhdGEueXMuZmxhdE1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzdWJMYWJlbHM6IERhdGFMYWJlbFtdID0geS52YWx1ZXMubWFwKCh2YWwsIHhJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBiYXJJc05lZ2F0aXZlID1cbiAgICAgICAgICBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnNbeUluZGV4XVt4SW5kZXhdLnhQb3MgPCB6ZXJvQXhpc1Bvc1ZhbCAmJlxuICAgICAgICAgIHNpbXBsaWZpZWRIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ud2lkdGggPiAwO1xuICAgICAgICBjb25zdCB4T2Zmc2V0ID0gYmFySXNOZWdhdGl2ZVxuICAgICAgICAgID8gLWNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmdcbiAgICAgICAgICA6IHNpbXBsaWZpZWRIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ud2lkdGggK1xuICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCcsXG4gICAgICAgICAgbGFiZWw6XG4gICAgICAgICAgICBwaXBlVHJhbnNmb3JtKHZhbCwgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCkpID8/ICcnLFxuICAgICAgICAgIHlQb3M6IHNpbXBsaWZpZWRIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ueVBvcyArIHlPZmZzZXQsXG4gICAgICAgICAgeFBvczogc2ltcGxpZmllZEhvcml6b250YWxCYXJzW3lJbmRleF1beEluZGV4XS54UG9zICsgeE9mZnNldCxcbiAgICAgICAgICBhbmNob3I6IGJhcklzTmVnYXRpdmUgPyAnZW5kJyA6ICdzdGFydCcsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzdWJMYWJlbHM7XG4gICAgfSk7XG4gICAgaWYgKHN1cHBZcykge1xuICAgICAgY29uc3Qgc3VwcERhdGFMYWJlbHM6IERhdGFMYWJlbFtdID0gc3VwcFlzLmZsYXRNYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJMYWJlbHM6IERhdGFMYWJlbFtdID0geS52YWx1ZXMubWFwKCh2YWwsIHhJbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhcklzTmVnYXRpdmUgPVxuICAgICAgICAgICAgc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ueFBvcyA8XG4gICAgICAgICAgICAgIHplcm9BeGlzUG9zVmFsICYmXG4gICAgICAgICAgICBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzW3lJbmRleF1beEluZGV4XS53aWR0aCA+IDA7XG4gICAgICAgICAgY29uc3QgeE9mZnNldCA9IGJhcklzTmVnYXRpdmVcbiAgICAgICAgICAgID8gLWNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmdcbiAgICAgICAgICAgIDogc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ud2lkdGggK1xuICAgICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCcsXG4gICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgcGlwZVRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCwgdHJ1ZSksXG4gICAgICAgICAgICAgICkgPz8gJycsXG4gICAgICAgICAgICB5UG9zOiBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzW3lJbmRleF1beEluZGV4XS55UG9zICsgeU9mZnNldCxcbiAgICAgICAgICAgIHhQb3M6IHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnNbeUluZGV4XVt4SW5kZXhdLnhQb3MgKyB4T2Zmc2V0LFxuICAgICAgICAgICAgYW5jaG9yOiBiYXJJc05lZ2F0aXZlID8gJ2VuZCcgOiAnc3RhcnQnLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3ViTGFiZWxzO1xuICAgICAgfSk7XG4gICAgICBkYXRhTGFiZWxzLnB1c2goLi4uc3VwcERhdGFMYWJlbHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczoge1xuICAgICAgcmVjdDogRE9NUmVjdDtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFg6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFk6IG51bWJlcjtcbiAgICB9KTogSG92ZXJSZXR1cm4ge1xuICAgICAgY29uc3QgcmVhbFBvc1ggPSBwb3MueCArIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgcmVhbFBvc1kgPSBwb3MueSArIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgaWYgKFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCB8fFxuICAgICAgICBnZXRJZkhvdmVyT3V0T2ZCb3VuZHMoXG4gICAgICAgICAgcG9zLngsXG4gICAgICAgICAgcG9zLnksXG4gICAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgICAgcmVhbFBvc1ksXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdXBwWXMgPSBoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSA/IGRhdGEuc3VwcGxlbWVudGFyeVlzIDogbnVsbDtcbiAgICAgIGNvbnN0IHhIb3ZlckluZGljZXMgPSBnZXRCdWNrZXRBbmRDbHVzdGVyTnVtRm9ySG92ZXIoXG4gICAgICAgIHJlYWxQb3NZLFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBkYXRhLngubGVuZ3RoLFxuICAgICAgKTtcbiAgICAgIGlmICgheEhvdmVySW5kaWNlcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYnVja2V0TnVtOiB4SW5kZXgsXG4gICAgICAgIGNsdXN0ZXJOdW0sXG4gICAgICAgIGNsdXN0ZXJOb3JtQ291bnQsXG4gICAgICAgIGNsdXN0ZXJOdW1UeXBlLFxuICAgICAgfSA9IHhIb3ZlckluZGljZXM7XG5cbiAgICAgIGxldCB4ID0gY2FsY3VsYXRlQmFyUG9zaXRpb24oXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgY2x1c3Rlck51bSxcbiAgICAgICk7XG4gICAgICBsZXQgaXNTdXBwVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgIGxldCBzdXBwSW5kZXhWYWwgPSAwO1xuICAgICAgaWYgKHN1cHBZcykge1xuICAgICAgICBzdXBwSW5kZXhWYWwgPSBjbHVzdGVyTnVtIC0gY2x1c3Rlck5vcm1Db3VudDtcbiAgICAgICAgaWYgKGNsdXN0ZXJOdW1UeXBlID09PSAnc3VwcCcpIHtcbiAgICAgICAgICBpc1N1cHBWYWx1ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gV2hlbiBob3ZlcmluZyBzdXBwbGVtZW50YXJ5IHZhbHVlcywgZ2V0IGJhcnMgZm9yIHRoYXQgc3VwcGxlbWVudGFsIGxheWVyXG4gICAgICAvLyBXaGVuIGhvdmVyaW5nIG9yaWdpbmFsIFlzLCBnZXQgYmFycyBmb3Igb3JpZ2luYWwgWXNcbiAgICAgIGNvbnN0IGZ1bGxZcyA9XG4gICAgICAgIGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpICYmIGlzU3VwcFZhbHVlXG4gICAgICAgICAgPyAoXG4gICAgICAgICAgICAgIGRhdGEuc3VwcGxlbWVudGFyeVlzLmZpbHRlcihcbiAgICAgICAgICAgICAgICBzID0+IHMuc3VwcGxlbWVudGFsSW5kZXggPT09IHN1cHBJbmRleFZhbCxcbiAgICAgICAgICAgICAgKSA/PyBbXVxuICAgICAgICAgICAgKS5tYXAoc3VwcFkgPT5cbiAgICAgICAgICAgICAgZ2V0QmFyWEluZm8oXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgZGF0YS5zdXBwbGVtZW50YXJ5WXMuaW5kZXhPZihzdXBwWSksXG4gICAgICAgICAgICAgICAgeEluZGV4LFxuICAgICAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBkYXRhLnlzLm1hcCgoXywgbWFwWUluZGV4KSA9PlxuICAgICAgICAgICAgICBnZXRCYXJYSW5mbyhkYXRhLCBjb25maWcsIG1hcFlJbmRleCwgeEluZGV4LCBzY2FsZSksXG4gICAgICAgICAgICApO1xuICAgICAgY29uc3QgeXMgPSBmdWxsWXMubWFwKHkgPT4geS54VmFsdWUpO1xuICAgICAgbGV0IHZpc2libGVZSW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnVsbFlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxlZnRCb3JkZXIgPSBmdWxsWXNbaV0ueFZhbHVlO1xuICAgICAgICBjb25zdCByaWdodEJvcmRlckNhbmRpZGF0ZXMgPSBmdWxsWXNcbiAgICAgICAgICAuZmlsdGVyKHkgPT4geS54VmFsdWUgPiBsZWZ0Qm9yZGVyKVxuICAgICAgICAgIC5tYXAoeSA9PiB5LnhWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0Qm9yZGVyID1cbiAgICAgICAgICByaWdodEJvcmRlckNhbmRpZGF0ZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBNYXRoLm1pbiguLi5yaWdodEJvcmRlckNhbmRpZGF0ZXMpXG4gICAgICAgICAgICA6IGxlZnRCb3JkZXIgKyBmdWxsWXNbaV0ud2lkdGg7XG4gICAgICAgIGlmIChyZWFsUG9zWCA+IGxlZnRCb3JkZXIgJiYgcmVhbFBvc1ggPCByaWdodEJvcmRlcikge1xuICAgICAgICAgIHZpc2libGVZSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNDbHVzdGVyZWREYXRhKGRhdGEsIGNvbmZpZywgZmFsc2UpKSB7XG4gICAgICAgIHZpc2libGVZSW5kZXggPSBjbHVzdGVyTnVtO1xuICAgICAgfVxuXG4gICAgICBpZiAodmlzaWJsZVlJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgaWYgKHJlYWxQb3NYID49IHplcm9BeGlzUG9zVmFsKSB7XG4gICAgICAgICAgdmlzaWJsZVlJbmRleCA9IHlzLmluZGV4T2YoTWF0aC5tYXgoLi4ueXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aXNpYmxlWUluZGV4ID0geXMuaW5kZXhPZihNYXRoLm1pbiguLi55cykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBGb3Igc3VwcGxlbWVudGFyeSBiYXJzOiB2aXNpYmxlWUluZGV4IGlzIGluZGV4IHdpdGhpbiBmaWx0ZXJlZCBzdXBwbGVtZW50YXJ5IGFycmF5XG4gICAgICAvLyBGb3Igb3JpZ2luYWwgWXM6IHZpc2libGVZSW5kZXggaXMgaW5kZXggd2l0aGluIG9yaWdpbmFsIFlzIGFycmF5XG4gICAgICBjb25zdCBhY3R1YWxTdXBwWUluZGV4ID1cbiAgICAgICAgaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgJiYgaXNTdXBwVmFsdWVcbiAgICAgICAgICA/IGRhdGEuc3VwcGxlbWVudGFyeVlzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgcyA9PlxuICAgICAgICAgICAgICAgIHMuc3VwcGxlbWVudGFsSW5kZXggPT09IHN1cHBJbmRleFZhbCAmJlxuICAgICAgICAgICAgICAgIGRhdGEuc3VwcGxlbWVudGFyeVlzXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKHMyID0+IHMyLnN1cHBsZW1lbnRhbEluZGV4ID09PSBzdXBwSW5kZXhWYWwpXG4gICAgICAgICAgICAgICAgICAuaW5kZXhPZihzKSA9PT0gdmlzaWJsZVlJbmRleCxcbiAgICAgICAgICAgICkgPz8gLTFcbiAgICAgICAgICA6IC0xO1xuXG4gICAgICBjb25zdCB5SW5kZXggPSBpc1N1cHBWYWx1ZSA/IDAgOiB2aXNpYmxlSW5kaWNlc1t2aXNpYmxlWUluZGV4XTtcblxuICAgICAgLy9DaGVjayBpZiB3ZSd2ZSBsYW5kZWQgb24gYSB6ZXJvLXdpZHRoIGJhciAob25seSByZWFsbHkgcmVsZXZhbnQgb24gZW5kcylcbiAgICAgIGNvbnN0IGJhcnNUb0NoZWNrID0gaXNTdXBwVmFsdWVcbiAgICAgICAgPyBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzXG4gICAgICAgIDogc2ltcGxpZmllZEhvcml6b250YWxCYXJzO1xuICAgICAgY29uc3QgYmFySW5kZXhUb0NoZWNrID0gaXNTdXBwVmFsdWUgPyBhY3R1YWxTdXBwWUluZGV4IDogdmlzaWJsZVlJbmRleDtcblxuICAgICAgaWYgKFxuICAgICAgICBiYXJJbmRleFRvQ2hlY2sgPj0gMCAmJlxuICAgICAgICBiYXJzVG9DaGVja1tiYXJJbmRleFRvQ2hlY2tdW3hJbmRleF0ud2lkdGggPT09IDAgJiZcbiAgICAgICAgaXNTdGFja2VkRGF0YShjb25maWcpXG4gICAgICApIHtcbiAgICAgICAgbGV0IGFsdEJhckZvdW5kID0gZmFsc2U7XG4gICAgICAgIC8vQ2hlY2sgdXB3YXJkc1xuICAgICAgICBmb3IgKGxldCBpID0gYmFySW5kZXhUb0NoZWNrICsgMTsgaSA8IGJhcnNUb0NoZWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFsdEJhckZvdW5kKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJhcnNUb0NoZWNrW2ldW3hJbmRleF0ud2lkdGggIT09IDApIHtcbiAgICAgICAgICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSAmJiBpc1N1cHBWYWx1ZSkge1xuICAgICAgICAgICAgICB2aXNpYmxlWUluZGV4ID0gZGF0YS5zdXBwbGVtZW50YXJ5WXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHMgPT4gcy5zdXBwbGVtZW50YWxJbmRleCA9PT0gc3VwcEluZGV4VmFsKVxuICAgICAgICAgICAgICAgIC5pbmRleE9mKGRhdGEuc3VwcGxlbWVudGFyeVlzW2ldKSE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2aXNpYmxlWUluZGV4ID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFsdEJhckZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL0NoZWNrIGRvd253YXJkc1xuICAgICAgICBmb3IgKGxldCBpID0gYmFySW5kZXhUb0NoZWNrIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAoYWx0QmFyRm91bmQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmFyc1RvQ2hlY2tbaV1beEluZGV4XS53aWR0aCAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpICYmIGlzU3VwcFZhbHVlKSB7XG4gICAgICAgICAgICAgIHZpc2libGVZSW5kZXggPSBkYXRhLnN1cHBsZW1lbnRhcnlZc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIocyA9PiBzLnN1cHBsZW1lbnRhbEluZGV4ID09PSBzdXBwSW5kZXhWYWwpXG4gICAgICAgICAgICAgICAgLmluZGV4T2YoZGF0YS5zdXBwbGVtZW50YXJ5WXNbaV0pITtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZpc2libGVZSW5kZXggPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWx0QmFyRm91bmQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvcmlnaW5hbFN1cHBZSW5kZXggPVxuICAgICAgICBpc1N1cHBWYWx1ZSAmJiBhY3R1YWxTdXBwWUluZGV4ID49IDBcbiAgICAgICAgICA/IHZpc2libGVTdXBwSW5kaWNlc1thY3R1YWxTdXBwWUluZGV4XVxuICAgICAgICAgIDogLTE7XG5cbiAgICAgIGNvbnN0IGJhclhQb3MgPSBpc1N1cHBWYWx1ZVxuICAgICAgICA/IHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnNbYWN0dWFsU3VwcFlJbmRleF1beEluZGV4XS54UG9zXG4gICAgICAgIDogc2ltcGxpZmllZEhvcml6b250YWxCYXJzW3Zpc2libGVZSW5kZXhdW3hJbmRleF0ueFBvcztcbiAgICAgIGNvbnN0IGJhcllQb3MgPSBpc1N1cHBWYWx1ZVxuICAgICAgICA/IHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnNbYWN0dWFsU3VwcFlJbmRleF1beEluZGV4XS55UG9zXG4gICAgICAgIDogc2ltcGxpZmllZEhvcml6b250YWxCYXJzW3Zpc2libGVZSW5kZXhdW3hJbmRleF0ueVBvcztcbiAgICAgIGNvbnN0IGJhcldpZHRoID0gaXNTdXBwVmFsdWVcbiAgICAgICAgPyBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzW2FjdHVhbFN1cHBZSW5kZXhdW3hJbmRleF0ud2lkdGhcbiAgICAgICAgOiBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnNbdmlzaWJsZVlJbmRleF1beEluZGV4XS53aWR0aDtcblxuICAgICAgY29uc3QgbG9jYWxBbmNob3JYID0gYmFyWFBvcyAtIHBvcy5jb250YWluZXJTY3JvbGxYIC0gU01BTExfUEFERElORztcbiAgICAgIGNvbnN0IHdpZHRoID0gYmFyV2lkdGggKyBTTUFMTF9QQURESU5HICogMjtcbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWSA9IGJhcllQb3MgLSBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemU7XG4gICAgICBjb25zdCB7IGFuY2hvclgsIGFuY2hvclksIGFuY2hvcldpZHRoLCBhbmNob3JIZWlnaHQgfSA9XG4gICAgICAgIGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICAgICAgICBsb2NhbEFuY2hvclgsXG4gICAgICAgICAgbG9jYWxBbmNob3JZLFxuICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICApO1xuICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgIGFuY2hvclggKyBwb3MucmVjdC54LFxuICAgICAgICBhbmNob3JZICsgcG9zLnJlY3QueSxcbiAgICAgICAgYW5jaG9yV2lkdGgsXG4gICAgICAgIGFuY2hvckhlaWdodCxcbiAgICAgICk7XG4gICAgICAvL1dlIG5lZWQgdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsIGluZGV4IGZvciB0aGUgbGF0ZXIgY2hlY2tJZlNlY29uZGFyeSBjYWxsXG4gICAgICBjb25zdCB5c0Zvck1ldHJpY3M6IHtcbiAgICAgICAgZGF0YTogU3VwcGxlbWVudGFyeURhdGFZIHwgRGF0YVk7XG4gICAgICAgIG9yaWdpbmFsSW5kZXg6IG51bWJlcjtcbiAgICAgIH1bXSA9XG4gICAgICAgIGlzU3VwcFZhbHVlICYmIHN1cHBZc1xuICAgICAgICAgID8gc3VwcFlzXG4gICAgICAgICAgICAgIC5tYXAoKHN1cHBZLCBpbmRleCkgPT4gKHsgZGF0YTogc3VwcFksIG9yaWdpbmFsSW5kZXg6IGluZGV4IH0pKVxuICAgICAgICAgICAgICAuZmlsdGVyKHN1cHBZID0+IHN1cHBZLmRhdGEuc3VwcGxlbWVudGFsSW5kZXggPT09IHN1cHBJbmRleFZhbClcbiAgICAgICAgICA6IGRhdGEueXMubWFwKCh5LCBpbmRleCkgPT4gKHsgZGF0YTogeSwgb3JpZ2luYWxJbmRleDogaW5kZXggfSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG92ZXJUeXBlOiAnc3RhbmRhcmQnLFxuICAgICAgICB4LFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHlzLFxuICAgICAgICB5SW5kZXgsXG4gICAgICAgIHZpc2libGVZSW5kZXgsXG4gICAgICAgIC4uLihpc1N1cHBWYWx1ZSAmJiBvcmlnaW5hbFN1cHBZSW5kZXggPj0gMFxuICAgICAgICAgID8geyBpc1N1cHBWYWx1ZSwgc3VwcFlJbmRleDogb3JpZ2luYWxTdXBwWUluZGV4IH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBkYXRlOlxuICAgICAgICAgICAgZGF0YS50eXBlID09PSAnbGFiZWxlZCdcbiAgICAgICAgICAgICAgPyBkYXRhLnhbeEluZGV4XS5sYWJlbFxuICAgICAgICAgICAgICA6IHV0Y0Zvcm1hdCgnJUIgJWQsICVZJykobmV3IERhdGUoZGF0YS54W3hJbmRleF0pKSxcbiAgICAgICAgICBtZXRyaWNzOiB5c0Zvck1ldHJpY3NcbiAgICAgICAgICAgIC5tYXAoeSA9PiAoe1xuICAgICAgICAgICAgICBjb2xvcjogZ2V0Q29sb3IoeS5kYXRhLCBjb2xvckluZGljZXMsIGNvbmZpZy5jb2xvcnMpLFxuICAgICAgICAgICAgICBsYWJlbDogeS5kYXRhLmxhYmVsLFxuICAgICAgICAgICAgICBwYXR0ZXJuOiB5LmRhdGEucGF0dGVybixcbiAgICAgICAgICAgICAgdmFsdWU6IHBpcGVUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgeS5kYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeS5vcmlnaW5hbEluZGV4LCB4SW5kZXgsIGlzU3VwcFZhbHVlKSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PT0gdmlzaWJsZVlJbmRleCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGFydFdpZHRoOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFdpZHRoLFxuICAgICAgY2hhcnRIZWlnaHQ6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsSGVpZ2h0LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICB4VGlja3M6IHhUaWNrcyxcbiAgICAgIHlUaWNrczogeVRpY2tzLFxuICAgICAgaG92ZXIsXG4gICAgICBjb2xvcnMsXG4gICAgICBiYXJzOiBbXSxcbiAgICAgIGxpbmVzOiBbXSxcbiAgICAgIGNpcmNsZXM6IFtdLFxuICAgICAgYXJlYXM6IFtdLFxuICAgICAgYXJjczogW10sXG4gICAgICBob3Jpem9udGFsQmFycyxcbiAgICAgIGRhdGFMYWJlbHMsXG4gICAgICB3YXRlcmZhbGxMaW5lczogW10sXG4gICAgICBncmFkaWVudHM6IFtdLFxuICAgICAgZmxvd0Nvbm5lY3Rpb25zOiBbXSxcbiAgICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlLFxuICAgICAgdmVydGljYWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMudmVydGljYWxDb250YWluZXJTY2FsZSxcbiAgICAgIGNoYXJ0RXJyb3I6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFyY3MoXG4gICAgY29uZmlnOiBEb251dENvbmZpZyxcbiAgICBhbGxEYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgaWYgKCF3YXJuRmxvd0RhdGEoYWxsRGF0YSwgJ2RvbnV0JykpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdjb25maWcnIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNvbmZpZy5zZWNvbmRhcnlWYWx1ZVR5cGUgJiZcbiAgICAgIChjb25maWcudmFsdWVUeXBlID09PSAncGVyY2VudGFnZScgfHxcbiAgICAgICAgY29uZmlnLnNlY29uZGFyeVZhbHVlVHlwZSA9PT0gJ3BlcmNlbnRhZ2UnKVxuICAgICkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgVHdvIGF4ZXMgd2l0aCBwZXJjZW50YWdlIGFyZW4ndCBzdXBwb3J0ZWQgZm9yIGRvbnV0IGNoYXJ0c1wiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEoYWxsRGF0YSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIFN1cHBsZW1lbnRhcnkgeSB2YWx1ZXMgYXJlbid0IHN1cHBvcnRlZCBmb3Igbm9uLWJhciBjaGFydHNcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgd2FyblVuc3VwcG9ydGVkUGF0dGVybnMoYWxsRGF0YSwgW10sICdkb251dCcpO1xuICAgIGNvbnN0IHsgZGF0YTogdW5zdGFja2VkRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgY29uc3QgZG9udXREYXRhID0gQ2hhcnQuY29udmVydENoYXJ0RGF0YVRvRG9udXREYXRhKHVuc3RhY2tlZERhdGEpO1xuICAgIGNvbnN0IGhhc05vblplcm9WYWx1ZSA9IGRvbnV0RGF0YS5zb21lKGQgPT4gZC52YWx1ZSA+IDApO1xuICAgIGNvbnN0IGFyY0RhdGEgPSBoYXNOb25aZXJvVmFsdWVcbiAgICAgID8gZG9udXREYXRhXG4gICAgICA6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgIGNvbnN0IGNvbG9ycyA9IGhhc05vblplcm9WYWx1ZVxuICAgICAgPyB2aXNpYmxlSW5kaWNlcy5tYXAoaSA9PiBjb25maWcuY29sb3JzW2kgJSBjb25maWcuY29sb3JzLmxlbmd0aF0pXG4gICAgICA6IFsnLS1ncmF5LTMwJ107XG4gICAgY29uc3QgeyBwaXBlVHJhbnNmb3JtIH0gPSBnZXRGb3JtYXR0aW5nQW5kQ29sb3JzKFxuICAgICAgYWxsRGF0YSxcbiAgICAgIHVuc3RhY2tlZERhdGEsXG4gICAgICBjb25maWcsXG4gICAgKTtcblxuICAgIGNvbnN0IGRvbnV0RGVmYXVsdENvbmZpZyA9IERlZmF1bHREb251dFNpemluZ0NvbmZpZztcbiAgICBjb25zdCBkYXRhTGFiZWxQYWRkaW5nQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgY29uZmlnLmRvbnV0RGlzcGxheUluZm8uc2NhbGluZ0NvbmZpZz8uZWxlbWVudFNjYWxlcyxcbiAgICAgIGRvbnV0RGVmYXVsdENvbmZpZy5lbGVtZW50U2NhbGVzLFxuICAgICAgJ2RhdGFMYWJlbFBhZGRpbmcnLFxuICAgICk7XG4gICAgY29uc3QgZm9udFNpemVDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBjb25maWcuZG9udXREaXNwbGF5SW5mby5zY2FsaW5nQ29uZmlnPy5lbGVtZW50U2NhbGVzLFxuICAgICAgZG9udXREZWZhdWx0Q29uZmlnLmVsZW1lbnRTY2FsZXMsXG4gICAgICAnZm9udFNpemUnLFxuICAgICk7XG4gICAgY29uc3QgZGF0YUxhYmVsVGV4dFNpemluZyA9IGdldERhdGFMYWJlbFNpemUoXG4gICAgICB1bnN0YWNrZWREYXRhLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGZvbnRTaXplQ29uZmlnLnRhcmdldCxcbiAgICApO1xuXG4gICAgY29uc3QgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlID1cbiAgICAgIGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWc/Lmhvcml6b250YWxDb250YWluZXJTY2FsZSAhPT1cbiAgICAgIHVuZGVmaW5lZFxuICAgICAgICA/IGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWcuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlXG4gICAgICAgIDogZG9udXREZWZhdWx0Q29uZmlnLmhvcml6b250YWxDb250YWluZXJTY2FsZTtcbiAgICBjb25zdCB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlID1cbiAgICAgIGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWc/LnZlcnRpY2FsQ29udGFpbmVyU2NhbGUgIT09XG4gICAgICB1bmRlZmluZWRcbiAgICAgICAgPyBjb25maWcuZG9udXREaXNwbGF5SW5mby5zY2FsaW5nQ29uZmlnLnZlcnRpY2FsQ29udGFpbmVyU2NhbGVcbiAgICAgICAgOiBkb251dERlZmF1bHRDb25maWcudmVydGljYWxDb250YWluZXJTY2FsZTtcbiAgICBjb25zdCBvdXRlclJhZGl1c0NvbmZpZyA9XG4gICAgICBjb25maWcuZG9udXREaXNwbGF5SW5mby5zY2FsaW5nQ29uZmlnPy5vdXRlclJhZGl1cyAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gY29uZmlnLmRvbnV0RGlzcGxheUluZm8uc2NhbGluZ0NvbmZpZy5vdXRlclJhZGl1c1xuICAgICAgICA6IGRvbnV0RGVmYXVsdENvbmZpZy5vdXRlclJhZGl1cztcbiAgICBjb25zdCBkcmF3UmFkaXVzQ29uZmlnID1cbiAgICAgIGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWc/LmRyYXdSYWRpdXMgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWcuZHJhd1JhZGl1c1xuICAgICAgICA6IGRvbnV0RGVmYXVsdENvbmZpZy5kcmF3UmFkaXVzO1xuXG4gICAgY29uc3Qgb3V0ZXIgPVxuICAgICAgb3V0ZXJSYWRpdXNDb25maWcudHlwZSA9PT0gJ3Byb3BvcnRpb24nXG4gICAgICAgID8gKGRpbWVuc2lvbnMuaGVpZ2h0IC8gMikgKiBvdXRlclJhZGl1c0NvbmZpZy52YWx1ZVxuICAgICAgICA6IG91dGVyUmFkaXVzQ29uZmlnLnZhbHVlO1xuICAgIGNvbnN0IGRyYXdSYWRpdXMgPVxuICAgICAgZHJhd1JhZGl1c0NvbmZpZy50eXBlID09PSAncHJvcG9ydGlvbidcbiAgICAgICAgPyBvdXRlciAqIGRyYXdSYWRpdXNDb25maWcudmFsdWVcbiAgICAgICAgOiBkcmF3UmFkaXVzQ29uZmlnLnZhbHVlO1xuICAgIGNvbnN0IGlubmVyID0gb3V0ZXIgLSBkcmF3UmFkaXVzO1xuXG4gICAgY29uc3QgcGllQXJjcyA9IHBpZTxEb251dERhdGE+KClcbiAgICAgIC5zb3J0VmFsdWVzKG51bGwpXG4gICAgICAudmFsdWUoZCA9PiBNYXRoLm1heChkLnZhbHVlLCAwKSkoYXJjRGF0YSk7XG5cbiAgICBjb25zdCBhcmNzID0gcGllQXJjcy5tYXAocGllQXJjID0+XG4gICAgICBhcmM8RG9udXREYXRhPigpXG4gICAgICAgIC5pbm5lclJhZGl1cyhpbm5lcilcbiAgICAgICAgLm91dGVyUmFkaXVzKG91dGVyKVxuICAgICAgICAucGFkQW5nbGUoMC4wMTMpXG4gICAgICAgIC5zdGFydEFuZ2xlKHBpZUFyYy5zdGFydEFuZ2xlKVxuICAgICAgICAuZW5kQW5nbGUocGllQXJjLmVuZEFuZ2xlKShwaWVBcmMuZGF0YSksXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGFMYWJlbHM6IERhdGFMYWJlbFtdID0gaGFzTm9uWmVyb1ZhbHVlXG4gICAgICA/IHBpZUFyY3MubWFwKGFyYyA9PiB7XG4gICAgICAgICAgLy9Eb24ndCBzaG93IGRhdGEgbGFiZWxzIGZvciB6ZXJvLXdpZHRoIGRvbnV0IHNsaWNlcyAoaW5jbHVkZXMgbmVnYXRpdmUgdmFsdWVzKVxuICAgICAgICAgIGlmIChhcmMuc3RhcnRBbmdsZSA9PT0gYXJjLmVuZEFuZ2xlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCcsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgeVBvczogMCxcbiAgICAgICAgICAgICAgeFBvczogMCxcbiAgICAgICAgICAgICAgYW5jaG9yOiAnbWlkZGxlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGFyY0NlbnRlckFuZ2xlID0gKGFyYy5zdGFydEFuZ2xlICsgYXJjLmVuZEFuZ2xlKSAvIDI7XG4gICAgICAgICAgY29uc3QgZWRnZVBvaW50ID0gYXJjVG9Qb2ludChhcmNDZW50ZXJBbmdsZSwgb3V0ZXIpO1xuICAgICAgICAgIGNvbnN0IGxpbmVFbmRQb2ludCA9IGFyY1RvUG9pbnQoXG4gICAgICAgICAgICBhcmNDZW50ZXJBbmdsZSxcbiAgICAgICAgICAgIG91dGVyICsgZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBtaWRkbGVBcmVhID0gb3V0ZXIgLyA0O1xuICAgICAgICAgIGxldCB5T2Zmc2V0ID0gMDtcbiAgICAgICAgICBsZXQgeE9mZnNldCA9IDA7XG4gICAgICAgICAgaWYgKGxpbmVFbmRQb2ludC55ID4gMCkge1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGxpbmVFbmRQb2ludC55KSA8IG1pZGRsZUFyZWEpIHtcbiAgICAgICAgICAgICAgeU9mZnNldCA9IFNNQUxMX1BBRERJTkcgLyAyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgeU9mZnNldCA9IFNNQUxMX1BBRERJTkc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobGluZUVuZFBvaW50LngpIDwgbWlkZGxlQXJlYSkge1xuICAgICAgICAgICAgICB5T2Zmc2V0ICs9IFNNQUxMX1BBRERJTkcgLyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobGluZUVuZFBvaW50LnkpIDwgbWlkZGxlQXJlYSkge1xuICAgICAgICAgICAgICB5T2Zmc2V0ID0gU01BTExfUEFERElORyAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobGluZUVuZFBvaW50LngpIDwgbWlkZGxlQXJlYSkge1xuICAgICAgICAgICAgICB5T2Zmc2V0IC09IFNNQUxMX1BBRERJTkcgLyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnLFxuICAgICAgICAgICAgbGFiZWw6IHBpcGVUcmFuc2Zvcm0oYXJjLmRhdGEudmFsdWUsIGFyYy5kYXRhLmlzU2Vjb25kYXJ5KSxcbiAgICAgICAgICAgIHlQb3M6IGxpbmVFbmRQb2ludC55ICsgeU9mZnNldCxcbiAgICAgICAgICAgIHhQb3M6IGxpbmVFbmRQb2ludC54ICsgeE9mZnNldCxcbiAgICAgICAgICAgIGFuY2hvcjpcbiAgICAgICAgICAgICAgTWF0aC5hYnMobGluZUVuZFBvaW50LngpIDwgbWlkZGxlQXJlYVxuICAgICAgICAgICAgICAgID8gJ21pZGRsZSdcbiAgICAgICAgICAgICAgICA6IGxpbmVFbmRQb2ludC54IDwgMFxuICAgICAgICAgICAgICAgID8gJ2VuZCdcbiAgICAgICAgICAgICAgICA6ICdzdGFydCcsXG4gICAgICAgICAgICBsaW5lOiB7XG4gICAgICAgICAgICAgIHgxOiBlZGdlUG9pbnQueCxcbiAgICAgICAgICAgICAgeTE6IGVkZ2VQb2ludC55LFxuICAgICAgICAgICAgICB4MjogbGluZUVuZFBvaW50LngsXG4gICAgICAgICAgICAgIHkyOiBsaW5lRW5kUG9pbnQueSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIDogW107XG5cbiAgICBjb25zdCBkcmF3V2lkdGggPVxuICAgICAgKG91dGVyICtcbiAgICAgICAgKGNvbmZpZy5zaG93RGF0YUxhYmVsc1xuICAgICAgICAgID8gZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQgKyBkYXRhTGFiZWxUZXh0U2l6aW5nLmhvcml6b250YWxcbiAgICAgICAgICA6IDApKSAqXG4gICAgICAyO1xuICAgIGNvbnN0IGRyYXdIZWlnaHQgPVxuICAgICAgKG91dGVyICtcbiAgICAgICAgKGNvbmZpZy5zaG93RGF0YUxhYmVsc1xuICAgICAgICAgID8gZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQgKyBkYXRhTGFiZWxUZXh0U2l6aW5nLnZlcnRpY2FsXG4gICAgICAgICAgOiAwKSkgKlxuICAgICAgMjtcblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczoge1xuICAgICAgcmVjdDogRE9NUmVjdDtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFg6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFk6IG51bWJlcjtcbiAgICB9KTogSG92ZXJSZXR1cm4ge1xuICAgICAgY29uc3QgcmVhbFBvc1ggPSBwb3MueCArIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgcmVhbFBvc1kgPSBwb3MueSArIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgaWYgKFxuICAgICAgICBnZXRJZkhvdmVyT3V0T2ZCb3VuZHMoXG4gICAgICAgICAgcG9zLngsXG4gICAgICAgICAgcG9zLnksXG4gICAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgICAgcmVhbFBvc1ksXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBjZW50ZXJQb2ludFggPSBkaW1lbnNpb25zLndpZHRoIC8gMjtcbiAgICAgIGNvbnN0IGNlbnRlclBvaW50WSA9IGRpbWVuc2lvbnMuaGVpZ2h0IC8gMjtcbiAgICAgIGNvbnN0IGRvbnV0UG9zaXRpb25YID0gcmVhbFBvc1ggLSBjZW50ZXJQb2ludFg7XG4gICAgICBjb25zdCBkb251dFBvc2l0aW9uWSA9IHJlYWxQb3NZIC0gY2VudGVyUG9pbnRZO1xuICAgICAgY29uc3QgaG92ZXJQb3NBcmNJbmZvID0gcG9pbnRUb0FyYyhkb251dFBvc2l0aW9uWCwgZG9udXRQb3NpdGlvblkpO1xuICAgICAgY29uc3QgYXJjQ2VudGVyTGluZSA9IChvdXRlciArIGlubmVyKSAvIDI7XG5cbiAgICAgIC8vRGV0ZWN0IGRvbnV0IHNsaWNlXG4gICAgICBsZXQgZm91bmRZSW5kZXggPSAtMTtcbiAgICAgIGxldCBwcmVmZXJyZWRQb3NpdGlvbjogQ2FsbG91dENvbXBvbmVudC5BbmNob3JlZFBvc2l0aW9uIHwgdW5kZWZpbmVkID1cbiAgICAgICAgdW5kZWZpbmVkO1xuICAgICAgbGV0IGRvbnV0WFBvc2l0aW9uID0gMDtcbiAgICAgIGxldCBkb251dFlQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpZUFyY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYXJjID0gcGllQXJjc1tpXTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgaG92ZXJQb3NBcmNJbmZvLmFuZ2xlID4gYXJjLnN0YXJ0QW5nbGUgJiZcbiAgICAgICAgICBob3ZlclBvc0FyY0luZm8uYW5nbGUgPCBhcmMuZW5kQW5nbGUgJiZcbiAgICAgICAgICBob3ZlclBvc0FyY0luZm8ucmFkaXVzID4gYXJjQ2VudGVyTGluZSAtIGRyYXdSYWRpdXMgJiZcbiAgICAgICAgICBob3ZlclBvc0FyY0luZm8ucmFkaXVzIDwgYXJjQ2VudGVyTGluZSArIGRyYXdSYWRpdXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm91bmRZSW5kZXggPSBpO1xuICAgICAgICAgIGNvbnN0IGFyY0NlbnRlclBvaW50ID0gYXJjVG9Qb2ludChcbiAgICAgICAgICAgIChhcmMuc3RhcnRBbmdsZSArIGFyYy5lbmRBbmdsZSkgLyAyLFxuICAgICAgICAgICAgYXJjQ2VudGVyTGluZSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy9OZWVkIHRvIHVuLW9mZnNldCB0aGUgcG9zaXRpb25zXG4gICAgICAgICAgZG9udXRYUG9zaXRpb24gPSBhcmNDZW50ZXJQb2ludC54ICsgY2VudGVyUG9pbnRYO1xuICAgICAgICAgIGRvbnV0WVBvc2l0aW9uID0gYXJjQ2VudGVyUG9pbnQueSArIGNlbnRlclBvaW50WTtcbiAgICAgICAgICBjb25zdCB2ZXJ0aWNhbEFyZWEgPVxuICAgICAgICAgICAgYXJjQ2VudGVyUG9pbnQueSA8IChkaW1lbnNpb25zLmhlaWdodCAqIC0xKSAvIDRcbiAgICAgICAgICAgICAgPyAndG9wJ1xuICAgICAgICAgICAgICA6IGFyY0NlbnRlclBvaW50LnkgPiBkaW1lbnNpb25zLmhlaWdodCAvIDRcbiAgICAgICAgICAgICAgPyAnYm90dG9tJ1xuICAgICAgICAgICAgICA6ICdjZW50ZXInO1xuXG4gICAgICAgICAgLy9EZXRlcm1pbmUgdGhlIGJlc3QgcG9zaXRpb24gZm9yIHRoZSB0b29sdGlwXG4gICAgICAgICAgaWYgKGFyY0NlbnRlclBvaW50LnggPiAwKSB7XG4gICAgICAgICAgICAvL1JpZ2h0IHBhdGhcbiAgICAgICAgICAgIGlmICghY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IHZlcnRpY2FsQXJlYSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgcHJlZmVycmVkUG9zaXRpb24gPSAnY2VudGVyLXJpZ2h0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmVydGljYWxBcmVhID09PSAndG9wJykge1xuICAgICAgICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbiA9ICdyaWdodC10b3AnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2ZXJ0aWNhbEFyZWEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICAgIHByZWZlcnJlZFBvc2l0aW9uID0gJ3JpZ2h0LWJvdHRvbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vTGVmdCBwYXRoXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCB2ZXJ0aWNhbEFyZWEgPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICAgIHByZWZlcnJlZFBvc2l0aW9uID0gJ2NlbnRlci1sZWZ0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmVydGljYWxBcmVhID09PSAndG9wJykge1xuICAgICAgICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbiA9ICdsZWZ0LXRvcCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQXJlYSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgICAgcHJlZmVycmVkUG9zaXRpb24gPSAnbGVmdC1ib3R0b20nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kWUluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghaGFzTm9uWmVyb1ZhbHVlKSB7XG4gICAgICAgIGRvbnV0WFBvc2l0aW9uID0gY2VudGVyUG9pbnRYICsgYXJjQ2VudGVyTGluZTtcbiAgICAgICAgZG9udXRZUG9zaXRpb24gPSBjZW50ZXJQb2ludFk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IGRvbnV0WFBvc2l0aW9uIC0gcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICBjb25zdCBsb2NhbEFuY2hvclkgPSBkb251dFlQb3NpdGlvbiAtIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgY29uc3QgeyBhbmNob3JYLCBhbmNob3JZIH0gPSBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgICAgIGxvY2FsQW5jaG9yWCxcbiAgICAgICAgbG9jYWxBbmNob3JZLFxuICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBhbmNob3JYICsgcG9zLnJlY3QueCxcbiAgICAgICAgYW5jaG9yWSArIHBvcy5yZWN0LnksXG4gICAgICAgIFNNQUxMX1BBRERJTkcsXG4gICAgICAgIDAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG92ZXJUeXBlOiAnc3RhbmRhcmQnLFxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIHByZWZlcnJlZFBvc2l0aW9uLFxuICAgICAgICAgIGRhdGU6IG51bGwsXG4gICAgICAgICAgbWV0cmljczogZG9udXREYXRhXG4gICAgICAgICAgICAubWFwKCh5LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgY29sb3I6IGNvbG9yc1tpbmRleCAlIGNvbG9ycy5sZW5ndGhdLFxuICAgICAgICAgICAgICBsYWJlbDogeS5sYWJlbCxcbiAgICAgICAgICAgICAgdmFsdWU6IHBpcGVUcmFuc2Zvcm0oeS52YWx1ZSwgeS5pc1NlY29uZGFyeSwgdHJ1ZSksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKF8sIGkpID0+IGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09PSBmb3VuZFlJbmRleCksXG4gICAgICAgIH0sXG4gICAgICAgIC8vTm90IHVzZWQgYnkgZG9udXQgY2hhcnRzXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHhJbmRleDogMCxcbiAgICAgICAgeXM6IFtdLFxuICAgICAgICB5SW5kZXg6IDAsXG4gICAgICAgIHZpc2libGVZSW5kZXg6IDAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGFydFdpZHRoOiBkcmF3V2lkdGgsXG4gICAgICBjaGFydEhlaWdodDogZHJhd0hlaWdodCxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiB7XG4gICAgICAgIC4uLmVtcHR5Q2hhcnRTY2FsZVZhbHVlcyxcbiAgICAgICAgZGF0YUxhYmVsUGFkZGluZzogZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgIGRhdGFMYWJlbFRleHRTaXplOiBkYXRhTGFiZWxUZXh0U2l6aW5nLmhvcml6b250YWwsXG4gICAgICAgIGZvbnRTaXplOiBmb250U2l6ZUNvbmZpZy50YXJnZXQsXG4gICAgICB9LFxuICAgICAgeFRpY2tzOiBbXSxcbiAgICAgIHlUaWNrczogW10sXG4gICAgICBhcmVhczogW10sXG4gICAgICBsaW5lczogW10sXG4gICAgICBjaXJjbGVzOiBbXSxcbiAgICAgIGJhcnM6IFtdLFxuICAgICAgY29sb3JzLFxuICAgICAgYXJjcyxcbiAgICAgIGhvcml6b250YWxCYXJzOiBbXSxcbiAgICAgIGRhdGFMYWJlbHMsXG4gICAgICB3YXRlcmZhbGxMaW5lczogW10sXG4gICAgICBncmFkaWVudHM6IFtdLFxuICAgICAgZmxvd0Nvbm5lY3Rpb25zOiBbXSxcbiAgICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZSxcbiAgICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGUsXG4gICAgICBjaGFydEVycm9yOiBudWxsLFxuICAgICAgaG92ZXIsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsb3dzKFxuICAgIGNvbmZpZzogRmxvd0NvbmZpZyxcbiAgICBhbGxEYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgaWYgKGFsbERhdGEudHlwZSAhPT0gJ2Zsb3cnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgSGVhZHMgdXAhIFRoZSAnJHthbGxEYXRhLnR5cGV9JyBkYXRhIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkIGZvciBmbG93IGNoYXJ0cy5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdjb25maWcnIH07XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGZsb3dzVHJhbnNmb3JtKGNvbmZpZywgYWxsRGF0YSk7XG4gICAgaWYgKGRhdGEueC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICBjb25zdCBvdmVyYWxsVG90YWwgPSBkYXRhLnhbMF0udG90YWxDb3VudDtcblxuICAgIGNvbnN0IGNoYXJ0U2l6aW5nVmFsdWVzID0gZ2V0RnVsbENoYXJ0U2NhbGVWYWx1ZXMoXG4gICAgICBjb25maWcsXG4gICAgICBkYXRhLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIG51bGwsXG4gICAgICBudWxsLFxuICAgICk7XG4gICAgaWYgKGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnc2l6aW5nJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2NhbGUgfSA9IGNhbGNEYXRhQXhpc1NjYWxlc0FuZFRpY2tzKFxuICAgICAgZGF0YSxcbiAgICAgIG51bGwsXG4gICAgICBjb25maWcsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICApO1xuICAgIGNvbnN0IHZhbHVlUGlwZXMgPSBnZXRQaXBlcyhjb25maWcudmFsdWVUeXBlKTtcbiAgICBjb25zdCBwZXJjZW50UGlwZXMgPSBnZXRQaXBlcygncGVyY2VudGFnZScpO1xuXG4gICAgY29uc3QgYmFyczogRmxvd1JlY3RbXVtdID0gW107XG4gICAgY29uc3QgZmxvd0Nvbm5lY3Rpb25zOiBGbG93Q29ubmVjdGlvblJlbmRlcltdID0gW107XG4gICAgY29uc3QgZGF0YUxhYmVsczogRmxvd0RhdGFMYWJlbFtdID0gW107XG4gICAgY29uc3QgbWluaW11bVNpemUgPSBnZXRNaW5pbXVtRGF0YUVsZW1lbnRTaXplKGNvbmZpZyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGJ1Y2tldEJhcnM6IEZsb3dSZWN0W10gPSBbXTtcbiAgICAgIGxldCBydW5uaW5nSGVpZ2h0ID0gMDtcbiAgICAgIGZvciAoY29uc3QgYmFyIG9mIGRhdGEueFtpXS5zdWJCdWNrZXRzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVpbmdDb3VudCA9IGJhci5jb25uZWN0aW9uc1xuICAgICAgICAgIC5maWx0ZXIoY29ubmVjdGlvbiA9PiBjb25uZWN0aW9uLmRpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnKVxuICAgICAgICAgIC5tYXAoY29ubmVjdGlvbiA9PiBjb25uZWN0aW9uLmNvdW50KVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHRvdGFsU2l6ZTogdG90YWxIZWlnaHQsXG4gICAgICAgICAgY29udGludWluZ1NpemU6IGRhcmtlbmVkSGVpZ2h0LFxuICAgICAgICAgIGNvbm5lY3Rpb25TaXplcyxcbiAgICAgICAgfSA9IGdldEZsb3dTdWJCdWNrZXRTaXplcyhcbiAgICAgICAgICBiYXIsXG4gICAgICAgICAgdmFsdWUgPT4gc2NhbGUodmFsdWUsIGZhbHNlKSAtIGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsVG9wT2Zmc2V0LFxuICAgICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uSGVpZ2h0ID0gKGNvbm5lY3Rpb246IEZsb3dDb25uZWN0aW9uKTogbnVtYmVyID0+XG4gICAgICAgICAgY29ubmVjdGlvblNpemVzW2Jhci5jb25uZWN0aW9ucy5pbmRleE9mKGNvbm5lY3Rpb24pXTtcbiAgICAgICAgY29uc3Qgbm9uRGFya2VuZWRIZWlnaHQgPSB0b3RhbEhlaWdodCAtIGRhcmtlbmVkSGVpZ2h0O1xuICAgICAgICBjb25zdCBkYXJrZW5lZFkgPSBydW5uaW5nSGVpZ2h0ICsgY2hhcnRTaXppbmdWYWx1ZXMudG90YWxUb3BPZmZzZXQ7XG4gICAgICAgIGNvbnN0IG5vbkRhcmtlbmVkWSA9IGRhcmtlbmVkWSArIGRhcmtlbmVkSGVpZ2h0O1xuXG4gICAgICAgIGNvbnN0IHdpZHRoID0gY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZTtcbiAgICAgICAgY29uc3QgeCA9XG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudG90YWxMZWZ0T2Zmc2V0ICtcbiAgICAgICAgICBpICogKGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgKyBjaGFydFNpemluZ1ZhbHVlcy5idWNrZXRHYXApO1xuICAgICAgICBjb25zdCBjb2xvck92ZXJyaWRlID0gY29uZmlnLmZsb3dDb25maWcuc3ViQnVja2V0c0NvbmZpZy5maW5kKFxuICAgICAgICAgIGJjID0+IGJjLmJ1Y2tldElkID09PSBiYXIuaWQsXG4gICAgICAgICk/LmNvbG9yO1xuICAgICAgICBpZiAoZGFya2VuZWRIZWlnaHQgPiAwKSB7XG4gICAgICAgICAgYnVja2V0QmFycy5wdXNoKHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAncmVjdCcsXG4gICAgICAgICAgICByZWN0VHlwZTogJ2Zsb3cnLFxuICAgICAgICAgICAgaGVpZ2h0OiBkYXJrZW5lZEhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgeTogZGFya2VuZWRZLFxuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIGNvbG9yT3ZlcnJpZGUsXG4gICAgICAgICAgICBkYXJrZW46IHRydWUsXG4gICAgICAgICAgICBkZUVtcGhhc2l6ZTogaXNEZUVtcGhhc2l6ZWQoY29uZmlnLCBiYXIuaWQsIHRydWUpLFxuICAgICAgICAgICAgaWQ6IGJhci5pZCxcbiAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBpLFxuICAgICAgICAgICAgY291bnQ6IGNvbnRpbnVpbmdDb3VudCxcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IGJhci5jb3VudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9uRGFya2VuZWRIZWlnaHQgPiAwKSB7XG4gICAgICAgICAgYnVja2V0QmFycy5wdXNoKHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAncmVjdCcsXG4gICAgICAgICAgICByZWN0VHlwZTogJ2Zsb3cnLFxuICAgICAgICAgICAgaGVpZ2h0OiBub25EYXJrZW5lZEhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgeTogbm9uRGFya2VuZWRZLFxuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIGNvbG9yT3ZlcnJpZGUsXG4gICAgICAgICAgICBkYXJrZW46IGZhbHNlLFxuICAgICAgICAgICAgZGVFbXBoYXNpemU6IGlzRGVFbXBoYXNpemVkKGNvbmZpZywgYmFyLmlkLCBmYWxzZSksXG4gICAgICAgICAgICBpZDogYmFyLmlkLFxuICAgICAgICAgICAgYnVja2V0SW5kZXg6IGksXG4gICAgICAgICAgICBjb3VudDogYmFyLmNvdW50IC0gY29udGludWluZ0NvdW50LFxuICAgICAgICAgICAgdG90YWxDb3VudDogYmFyLmNvdW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vSW52aXNpYmxlIGJhciBmb3IgaG92ZXIgaGlnaGxpZ2h0IHB1cnBvc2VzXG4gICAgICAgIGJ1Y2tldEJhcnMucHVzaCh7XG4gICAgICAgICAgZWxlbWVudFR5cGU6ICdyZWN0JyxcbiAgICAgICAgICByZWN0VHlwZTogJ2Zsb3cnLFxuICAgICAgICAgIGhlaWdodDogZGFya2VuZWRIZWlnaHQgKyBub25EYXJrZW5lZEhlaWdodCxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICB5OiBkYXJrZW5lZFksXG4gICAgICAgICAgeCxcbiAgICAgICAgICBub25EaXNwbGF5OiB0cnVlLFxuICAgICAgICAgIGlkOiBiYXIuaWQsXG4gICAgICAgICAgYnVja2V0SW5kZXg6IGksXG4gICAgICAgICAgY291bnQ6IGJhci5jb3VudCxcbiAgICAgICAgICB0b3RhbENvdW50OiBiYXIuY291bnQsXG4gICAgICAgICAgZGFya2VuOiBmYWxzZSxcbiAgICAgICAgICBkZUVtcGhhc2l6ZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBydW5uaW5nSGVpZ2h0ICs9XG4gICAgICAgICAgdG90YWxIZWlnaHQgK1xuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmcgK1xuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFRleHRTaXplO1xuXG4gICAgICAgIC8vQ29ubmVjdGlvbnNcbiAgICAgICAgLy9BZGQgbmV3IHJlbmRlcnMgZm9yIGZvcndhcmQgY29ubmVjdGlvbnNcbiAgICAgICAgbGV0IHZlcnRpY2FsQ29ubmVjdGlvbk9mZnNldCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgY29ubmVjdGlvbiBvZiBiYXIuY29ubmVjdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIGNvbm5lY3Rpb24gPT4gY29ubmVjdGlvbi5kaXJlY3Rpb24gPT09ICdmb3J3YXJkJyxcbiAgICAgICAgKSkge1xuICAgICAgICAgIGNvbnN0IHRvcExpbmVZMSA9IGRhcmtlbmVkWSArIHZlcnRpY2FsQ29ubmVjdGlvbk9mZnNldDtcbiAgICAgICAgICBjb25zdCBib3R0b21MaW5lWTEgPSB0b3BMaW5lWTEgKyBjb25uZWN0aW9uSGVpZ2h0KGNvbm5lY3Rpb24pO1xuICAgICAgICAgIGNvbnN0IHgxID0geCArIHdpZHRoO1xuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25SZW5kZXI6IEZsb3dDb25uZWN0aW9uUmVuZGVyID0ge1xuICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdjb25uZWN0aW9uJyxcbiAgICAgICAgICAgIHN0YXJ0OiBjb25uZWN0aW9uLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBjb25uZWN0aW9uLmVuZCxcbiAgICAgICAgICAgIGNvdW50OiBjb25uZWN0aW9uLmNvdW50LFxuICAgICAgICAgICAgc3RlcDogaSxcbiAgICAgICAgICAgIHRvcExpbmU6IHtcbiAgICAgICAgICAgICAgeTE6IHRvcExpbmVZMSxcbiAgICAgICAgICAgICAgeDEsXG4gICAgICAgICAgICAgIC8vVG8gYmUgZmlsbGVkIGluIGxhdGVyXG4gICAgICAgICAgICAgIHkyOiAwLFxuICAgICAgICAgICAgICB4MjogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib3R0b21MaW5lOiB7XG4gICAgICAgICAgICAgIHkxOiBib3R0b21MaW5lWTEsXG4gICAgICAgICAgICAgIHgxLFxuICAgICAgICAgICAgICAvL1RvIGJlIGZpbGxlZCBpbiBsYXRlclxuICAgICAgICAgICAgICB5MjogMCxcbiAgICAgICAgICAgICAgeDI6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy9UbyBiZSBmaWxsZWQgaW4gbGF0ZXJcbiAgICAgICAgICAgIHBhdGg6ICcnLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdmVydGljYWxDb25uZWN0aW9uT2Zmc2V0ICs9IGNvbm5lY3Rpb25IZWlnaHQoY29ubmVjdGlvbik7XG4gICAgICAgICAgZmxvd0Nvbm5lY3Rpb25zLnB1c2goY29ubmVjdGlvblJlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy9CYWNrZmlsbCBwb3NpdGlvbiBpbmZvIGZvciBiYWNrd2FyZHMgY29ubmVjdGlvbnNcbiAgICAgICAgdmVydGljYWxDb25uZWN0aW9uT2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBjb25uZWN0aW9uIG9mIGJhci5jb25uZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgY29ubmVjdGlvbiA9PiBjb25uZWN0aW9uLmRpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyxcbiAgICAgICAgKSkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ29ubmVjdGlvbiA9IGZsb3dDb25uZWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgY29uID0+XG4gICAgICAgICAgICAgIGNvbi5zdGFydCA9PT0gY29ubmVjdGlvbi5zdGFydCAmJlxuICAgICAgICAgICAgICBjb24uZW5kID09PSBjb25uZWN0aW9uLmVuZCAmJlxuICAgICAgICAgICAgICBjb24uc3RlcCA9PT0gaSAtIDEsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2hpbmdDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCB0b3BMaW5lWTIgPSBkYXJrZW5lZFkgKyB2ZXJ0aWNhbENvbm5lY3Rpb25PZmZzZXQ7XG4gICAgICAgICAgICBjb25zdCBib3R0b21MaW5lWTIgPSB0b3BMaW5lWTIgKyBjb25uZWN0aW9uSGVpZ2h0KGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgbWF0Y2hpbmdDb25uZWN0aW9uLnRvcExpbmUueTIgPSB0b3BMaW5lWTI7XG4gICAgICAgICAgICBtYXRjaGluZ0Nvbm5lY3Rpb24udG9wTGluZS54MiA9IHg7XG4gICAgICAgICAgICBtYXRjaGluZ0Nvbm5lY3Rpb24uYm90dG9tTGluZS55MiA9IGJvdHRvbUxpbmVZMjtcbiAgICAgICAgICAgIG1hdGNoaW5nQ29ubmVjdGlvbi5ib3R0b21MaW5lLngyID0geDtcbiAgICAgICAgICAgIG1hdGNoaW5nQ29ubmVjdGlvbi5wYXRoID1cbiAgICAgICAgICAgICAgY2FsY3VsYXRlRmxvd0Nvbm5lY3Rpb25QYXRoKG1hdGNoaW5nQ29ubmVjdGlvbik7XG5cbiAgICAgICAgICAgIHZlcnRpY2FsQ29ubmVjdGlvbk9mZnNldCArPSBjb25uZWN0aW9uSGVpZ2h0KGNvbm5lY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vRGF0YSBMYWJlbHNcbiAgICAgICAgY29uc3QgYmFyTmFtZSA9IGNvbmZpZy5mbG93Q29uZmlnLnN1YkJ1Y2tldHNDb25maWcuZmluZChcbiAgICAgICAgICBzYmMgPT4gc2JjLmJ1Y2tldElkID09PSBiYXIuaWQsXG4gICAgICAgICk/LmJ1Y2tldE5hbWU7XG4gICAgICAgIGlmIChiYXJOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkYXRhTGFiZWxzLnB1c2goe1xuICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnLFxuICAgICAgICAgICAgZGF0YUxhYmVsVHlwZTogJ2Zsb3cnLFxuICAgICAgICAgICAgbGFiZWw6IGAke2Jhck5hbWV9ICgke3BlcmNlbnRQaXBlcy5waXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgICAgYmFyLmNvdW50IC8gZGF0YS54W2ldLnRvdGFsQ291bnQsXG4gICAgICAgICAgICApfSlgLFxuICAgICAgICAgICAgeFBvczogeCxcbiAgICAgICAgICAgIHlQb3M6XG4gICAgICAgICAgICAgIGRhcmtlbmVkWSAtXG4gICAgICAgICAgICAgIChjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxUZXh0U2l6ZSArXG4gICAgICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZykgL1xuICAgICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICBhbmNob3I6ICdzdGFydCcsXG4gICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgYnVja2V0SW5kZXg6IGksXG4gICAgICAgICAgICBiYXJJZDogYmFyLmlkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhclN1YnRpdGxlID0gY29uZmlnLmZsb3dDb25maWcuc3VidGl0bGVGb3JtYXRTdHJpbmcucmVwbGFjZShcbiAgICAgICAgICAne3ZhbHVlfScsXG4gICAgICAgICAgdmFsdWVQaXBlcy5waXBlLnRyYW5zZm9ybShiYXIuY291bnQpLFxuICAgICAgICApO1xuICAgICAgICBkYXRhTGFiZWxzLnB1c2goe1xuICAgICAgICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJyxcbiAgICAgICAgICBkYXRhTGFiZWxUeXBlOiAnZmxvdycsXG4gICAgICAgICAgbGFiZWw6IGJhclN1YnRpdGxlLFxuICAgICAgICAgIHhQb3M6IHgsXG4gICAgICAgICAgeVBvczogZGFya2VuZWRZIC0gY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZyAvIDQsXG4gICAgICAgICAgYW5jaG9yOiAnc3RhcnQnLFxuICAgICAgICAgIGJ1Y2tldEluZGV4OiBpLFxuICAgICAgICAgIGJhcklkOiBiYXIuaWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYmFycy5wdXNoKGJ1Y2tldEJhcnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczoge1xuICAgICAgcmVjdDogRE9NUmVjdDtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFg6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFk6IG51bWJlcjtcbiAgICB9KTogSG92ZXJSZXR1cm4ge1xuICAgICAgY29uc3QgcmVhbFBvc1ggPSBwb3MueCArIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgcmVhbFBvc1kgPSBwb3MueSArIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgaWYgKFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCB8fFxuICAgICAgICBnZXRJZkhvdmVyT3V0T2ZCb3VuZHMoXG4gICAgICAgICAgcG9zLngsXG4gICAgICAgICAgcG9zLnksXG4gICAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgICAgcmVhbFBvc1ksXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBidWNrZXRJbmRleEluZm8gPSBnZXRGbG93QnVja2V0SW5kZXhGb3JIb3ZlcihcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIHJlYWxQb3NYLFxuICAgICAgKTtcbiAgICAgIGlmIChidWNrZXRJbmRleEluZm8gPT09IG51bGwgfHwgYnVja2V0SW5kZXhJbmZvLmluZGV4ID49IGJhcnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGJ1Y2tldEluZGV4SW5mby5hcmVhID09PSAnYmFyJykge1xuICAgICAgICBmb3IgKGNvbnN0IGJhciBvZiBiYXJzW2J1Y2tldEluZGV4SW5mby5pbmRleF0pIHtcbiAgICAgICAgICBpZiAocmVhbFBvc1kgPCBiYXIueSkge1xuICAgICAgICAgICAgLy9CYXIgdGl0bGVcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IGJhci54IC0gcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGJhci53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9XG4gICAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmcgLyAyICtcbiAgICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsVGV4dFNpemU7XG4gICAgICAgICAgICBjb25zdCBsb2NhbEFuY2hvclkgPSBiYXIueSAtIChwb3MuY29udGFpbmVyU2Nyb2xsWSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb25zdCB7IGFuY2hvclgsIGFuY2hvclksIGFuY2hvcldpZHRoLCBhbmNob3JIZWlnaHQgfSA9XG4gICAgICAgICAgICAgIGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICAgICAgICAgICAgICBsb2NhbEFuY2hvclgsXG4gICAgICAgICAgICAgICAgbG9jYWxBbmNob3JZLFxuICAgICAgICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgICAgICAgIGFuY2hvclggKyBwb3MucmVjdC54LFxuICAgICAgICAgICAgICBhbmNob3JZICsgcG9zLnJlY3QueSxcbiAgICAgICAgICAgICAgYW5jaG9yV2lkdGgsXG4gICAgICAgICAgICAgIGFuY2hvckhlaWdodCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBob3ZlclR5cGU6ICdmbG93JyxcbiAgICAgICAgICAgICAgaG92ZXJUYXJnZXQ6ICdiYXJUaXRsZScsXG4gICAgICAgICAgICAgIGJhcklkOiBiYXIuaWQgPz8gJycsXG4gICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBidWNrZXRJbmRleEluZm8uaW5kZXgsXG4gICAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICAgICAgc3VidGl0bGU6IGNvbmZpZy5mbG93Q29uZmlnLnN1YnRpdGxlRm9ybWF0U3RyaW5nLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAne3ZhbHVlfScsXG4gICAgICAgICAgICAgICAgICB2YWx1ZVBpcGVzLnBpcGUudHJhbnNmb3JtKGJhci50b3RhbENvdW50KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgLy8gVGhlIGludmlzaWJsZSBoaWdobGlnaHQgYmFyIHNwYW5zIGJvdGggcG9ydGlvbnMsIHNvIHNraXAgaXQgdG9cbiAgICAgICAgICAgIC8vIGF2b2lkIG1pc3JlcG9ydGluZyBhIHBvcnRpb24gYm91bmRhcnkgYXMgdGhlIGVuZGluZyBwb3J0aW9uXG4gICAgICAgICAgICAhYmFyLm5vbkRpc3BsYXkgJiZcbiAgICAgICAgICAgIHJlYWxQb3NZID49IGJhci55ICYmXG4gICAgICAgICAgICByZWFsUG9zWSA8IGJhci55ICsgYmFyLmhlaWdodFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy9CYXJcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IGJhci54IC0gcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGJhci53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWSA9IGJhci55IC0gcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBiYXIuaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgeyBhbmNob3JYLCBhbmNob3JZLCBhbmNob3JXaWR0aCwgYW5jaG9ySGVpZ2h0IH0gPVxuICAgICAgICAgICAgICBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgICAgICAgICAgICAgbG9jYWxBbmNob3JYLFxuICAgICAgICAgICAgICAgIGxvY2FsQW5jaG9yWSxcbiAgICAgICAgICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICAgICAgICBhbmNob3JYICsgcG9zLnJlY3QueCxcbiAgICAgICAgICAgICAgYW5jaG9yWSArIHBvcy5yZWN0LnksXG4gICAgICAgICAgICAgIGFuY2hvcldpZHRoLFxuICAgICAgICAgICAgICBhbmNob3JIZWlnaHQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaG92ZXJUeXBlOiAnZmxvdycsXG4gICAgICAgICAgICAgIGhvdmVyVGFyZ2V0OiAnYmFyJyxcbiAgICAgICAgICAgICAgYmFySWQ6IGJhci5pZCA/PyAnJyxcbiAgICAgICAgICAgICAgYnVja2V0SW5kZXg6IGJ1Y2tldEluZGV4SW5mby5pbmRleCxcbiAgICAgICAgICAgICAgZm9yRGFya2VuOiBiYXIuZGFya2VuID09PSB0cnVlLFxuICAgICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBjb25maWcuZmxvd0NvbmZpZy5zdWJ0aXRsZUZvcm1hdFN0cmluZy5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgJ3t2YWx1ZX0nLFxuICAgICAgICAgICAgICAgICAgdmFsdWVQaXBlcy5waXBlLnRyYW5zZm9ybShiYXIuY291bnQpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBjb25uZWN0aW9uIG9mIGZsb3dDb25uZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgZmxvd0NvbiA9PiBmbG93Q29uLnN0ZXAgPT09IGJ1Y2tldEluZGV4SW5mby5pbmRleCxcbiAgICAgICAgKSkge1xuICAgICAgICAgIGlmIChjaGVja0lmUG9pbnRXaXRoaW5Db25uZWN0aW9uKGNvbm5lY3Rpb24sIHJlYWxQb3NYLCByZWFsUG9zWSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IGNvbm5lY3Rpb24udG9wTGluZS54MSAtIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBjb25uZWN0aW9uLnRvcExpbmUueDIgLSBjb25uZWN0aW9uLnRvcExpbmUueDE7XG4gICAgICAgICAgICBjb25zdCBjdXJ2ZVRvcCA9IGJlemllcllBdFgoXG4gICAgICAgICAgICAgIChjb25uZWN0aW9uLnRvcExpbmUueDEgKyBjb25uZWN0aW9uLnRvcExpbmUueDIpIC8gMixcbiAgICAgICAgICAgICAgY29ubmVjdGlvbi50b3BMaW5lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnZlQm90dG9tID0gYmV6aWVyWUF0WChcbiAgICAgICAgICAgICAgKGNvbm5lY3Rpb24udG9wTGluZS54MSArIGNvbm5lY3Rpb24udG9wTGluZS54MikgLyAyLFxuICAgICAgICAgICAgICBjb25uZWN0aW9uLmJvdHRvbUxpbmUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxBbmNob3JZID0gY3VydmVUb3AgLSBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGN1cnZlQm90dG9tIC0gY3VydmVUb3A7XG4gICAgICAgICAgICBjb25zdCB7IGFuY2hvclgsIGFuY2hvclksIGFuY2hvcldpZHRoLCBhbmNob3JIZWlnaHQgfSA9XG4gICAgICAgICAgICAgIGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICAgICAgICAgICAgICBsb2NhbEFuY2hvclgsXG4gICAgICAgICAgICAgICAgbG9jYWxBbmNob3JZLFxuICAgICAgICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgICAgICAgIGFuY2hvclggKyBwb3MucmVjdC54LFxuICAgICAgICAgICAgICBhbmNob3JZICsgcG9zLnJlY3QueSxcbiAgICAgICAgICAgICAgYW5jaG9yV2lkdGgsXG4gICAgICAgICAgICAgIGFuY2hvckhlaWdodCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBob3ZlclR5cGU6ICdmbG93JyxcbiAgICAgICAgICAgICAgaG92ZXJUYXJnZXQ6ICdjb25uZWN0aW9uJyxcbiAgICAgICAgICAgICAgc3RhcnRJZDogY29ubmVjdGlvbi5zdGFydCxcbiAgICAgICAgICAgICAgZW5kSWQ6IGNvbm5lY3Rpb24uZW5kLFxuICAgICAgICAgICAgICBzdGFydEJ1Y2tldEluZGV4OiBjb25uZWN0aW9uLnN0ZXAsXG4gICAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICAgICAgc3VidGl0bGU6IGNvbmZpZy5mbG93Q29uZmlnLnN1YnRpdGxlRm9ybWF0U3RyaW5nLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAne3ZhbHVlfScsXG4gICAgICAgICAgICAgICAgICB2YWx1ZVBpcGVzLnBpcGUudHJhbnNmb3JtKGNvbm5lY3Rpb24uY291bnQpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hhcnRXaWR0aDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxXaWR0aCxcbiAgICAgIGNoYXJ0SGVpZ2h0OiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbEhlaWdodCxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgeFRpY2tzOiBbXSxcbiAgICAgIHlUaWNrczogW10sXG4gICAgICBjb2xvcnM6IFtdLFxuICAgICAgYmFycyxcbiAgICAgIGxpbmVzOiBbXSxcbiAgICAgIGNpcmNsZXM6IFtdLFxuICAgICAgYXJlYXM6IFtdLFxuICAgICAgaG92ZXIsXG4gICAgICBhcmNzOiBbXSxcbiAgICAgIGhvcml6b250YWxCYXJzOiBbXSxcbiAgICAgIGRhdGFMYWJlbHMsXG4gICAgICB3YXRlcmZhbGxMaW5lczogW10sXG4gICAgICBncmFkaWVudHM6IFtdLFxuICAgICAgZmxvd0Nvbm5lY3Rpb25zLFxuICAgICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGUsXG4gICAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlLFxuICAgICAgY2hhcnRFcnJvcjogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLypcbiAgICBNaXJyb3JzIHRoZSBidWNrZXRpbmcgaW4gZmxvd3NUcmFuc2Zvcm06IGEgcGF0aCBjb250cmlidXRlcyB2YWx1ZXNbaV0gdG9cbiAgICB0aGUgYmFyIGF0IHN0ZXAgaSwgYW5kIHZhbHVlc1tpICsgMV0gdG8gaXRzIGZvcndhcmQgY29ubmVjdGlvbiAod2hpY2ggaXNcbiAgICBhbHNvIHRoZSBiYXIncyBjb250aW51aW5nIHBvcnRpb24pLlxuICAqL1xuICBmdW5jdGlvbiBmbG93VmFsdWVBdFN0ZXAoeTogRmxvd1ksIHN0ZXA6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiB5LnN0ZXBzLmxlbmd0aCA+IHN0ZXAgJiYgeS52YWx1ZXMubGVuZ3RoID4gc3RlcFxuICAgICAgPyB5LnZhbHVlc1tzdGVwXVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gc3VtRmxvd1ZhbHVlcyhcbiAgICBkYXRhOiBGbG93RGF0YSxcbiAgICB5SW5kaWNlczogbnVtYmVyW10sXG4gICAgc3RlcDogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIHJldHVybiB5SW5kaWNlc1xuICAgICAgLm1hcChpbmRleCA9PiBmbG93VmFsdWVBdFN0ZXAoZGF0YS55c1tpbmRleF0sIHN0ZXApID8/IDApXG4gICAgICAucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdG9GbG93Q2xpY2tFdmVudChcbiAgICBob3ZlcjogRmxvd0hvdmVyVGFyZ2V0LFxuICAgIGRhdGE6IEZsb3dEYXRhLFxuICApOiBGbG93Q2xpY2tFdmVudCB7XG4gICAgY29uc3QgYWxsWUluZGljZXMgPSBkYXRhLnlzLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KTtcbiAgICBpZiAoaG92ZXIuaG92ZXJUYXJnZXQgPT09ICdjb25uZWN0aW9uJykge1xuICAgICAgY29uc3Qgc3RlcCA9IGhvdmVyLnN0YXJ0QnVja2V0SW5kZXg7XG4gICAgICBjb25zdCB5SW5kaWNlcyA9IGFsbFlJbmRpY2VzLmZpbHRlcihcbiAgICAgICAgaW5kZXggPT5cbiAgICAgICAgICBkYXRhLnlzW2luZGV4XS5zdGVwc1tzdGVwXSA9PT0gaG92ZXIuc3RhcnRJZCAmJlxuICAgICAgICAgIGZsb3dWYWx1ZUF0U3RlcChkYXRhLnlzW2luZGV4XSwgc3RlcCkgIT09IG51bGwgJiZcbiAgICAgICAgICBkYXRhLnlzW2luZGV4XS5zdGVwc1tzdGVwICsgMV0gPT09IGhvdmVyLmVuZElkICYmXG4gICAgICAgICAgZmxvd1ZhbHVlQXRTdGVwKGRhdGEueXNbaW5kZXhdLCBzdGVwICsgMSkgIT09IG51bGwsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFyZ2V0OiAnY29ubmVjdGlvbicsXG4gICAgICAgIHN0YXJ0QnVja2V0SW5kZXg6IHN0ZXAsXG4gICAgICAgIHN0YXJ0SWQ6IGhvdmVyLnN0YXJ0SWQsXG4gICAgICAgIGVuZElkOiBob3Zlci5lbmRJZCxcbiAgICAgICAgY291bnQ6IHN1bUZsb3dWYWx1ZXMoZGF0YSwgeUluZGljZXMsIHN0ZXAgKyAxKSxcbiAgICAgICAgeUluZGljZXMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0ZXAgPSBob3Zlci5idWNrZXRJbmRleDtcbiAgICBjb25zdCBiYXJZSW5kaWNlcyA9IGFsbFlJbmRpY2VzLmZpbHRlcihcbiAgICAgIGluZGV4ID0+XG4gICAgICAgIGRhdGEueXNbaW5kZXhdLnN0ZXBzW3N0ZXBdID09PSBob3Zlci5iYXJJZCAmJlxuICAgICAgICBmbG93VmFsdWVBdFN0ZXAoZGF0YS55c1tpbmRleF0sIHN0ZXApICE9PSBudWxsLFxuICAgICk7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IHN1bUZsb3dWYWx1ZXMoZGF0YSwgYmFyWUluZGljZXMsIHN0ZXApO1xuICAgIGNvbnN0IGJhc2UgPSB7IGJ1Y2tldEluZGV4OiBzdGVwLCBiYXJJZDogaG92ZXIuYmFySWQgfTtcbiAgICBpZiAoaG92ZXIuaG92ZXJUYXJnZXQgPT09ICdiYXJUaXRsZScpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIHRhcmdldDogJ3RpdGxlJyxcbiAgICAgICAgY291bnQ6IHRvdGFsQ291bnQsXG4gICAgICAgIHlJbmRpY2VzOiBiYXJZSW5kaWNlcyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgY29udGludWluZ0NvdW50ID0gc3VtRmxvd1ZhbHVlcyhkYXRhLCBiYXJZSW5kaWNlcywgc3RlcCArIDEpO1xuICAgIGlmIChob3Zlci5mb3JEYXJrZW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIHRhcmdldDogJ2NvbnRpbnVpbmcnLFxuICAgICAgICBjb3VudDogY29udGludWluZ0NvdW50LFxuICAgICAgICB0b3RhbENvdW50LFxuICAgICAgICB5SW5kaWNlczogYmFyWUluZGljZXMuZmlsdGVyKFxuICAgICAgICAgIGluZGV4ID0+IChmbG93VmFsdWVBdFN0ZXAoZGF0YS55c1tpbmRleF0sIHN0ZXAgKyAxKSA/PyAwKSA+IDAsXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZSxcbiAgICAgIHRhcmdldDogJ2VuZGluZycsXG4gICAgICBjb3VudDogdG90YWxDb3VudCAtIGNvbnRpbnVpbmdDb3VudCxcbiAgICAgIHRvdGFsQ291bnQsXG4gICAgICB5SW5kaWNlczogYmFyWUluZGljZXMuZmlsdGVyKFxuICAgICAgICBpbmRleCA9PlxuICAgICAgICAgIChmbG93VmFsdWVBdFN0ZXAoZGF0YS55c1tpbmRleF0sIHN0ZXApID8/IDApID5cbiAgICAgICAgICAoZmxvd1ZhbHVlQXRTdGVwKGRhdGEueXNbaW5kZXhdLCBzdGVwICsgMSkgPz8gMCksXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBTTUFMTF9QQURESU5HID0gODtcbiAgZXhwb3J0IGNvbnN0IERFRkFVTFRfRk9OVF9TSVpFID0gMTI7IC8vdGhlIHdpZHRoIGNvbnN0YW50cyBhcmUgYmFzZWQgb24gZm9udCBzaXplIDEyLCBzbyB0aGlzIHZhcmlhYmxlIGNhbiBoZWxwIHcvIHNjYWxpbmdcbiAgZXhwb3J0IGNvbnN0IFdJRFRIX1BFUl9MRVRURVIgPSA2LjU7XG4gIGNvbnN0IFdJRFRIX1BFUl9OVU1CRVIgPSA3O1xuICBjb25zdCBXSURUSF9QRVJfUEVSSU9EID0gMjtcbiAgY29uc3QgV0lEVEhfUEVSX1NMQVNIID0gNDtcbiAgY29uc3QgREVGQVVMVF9IT1JJWk9OVEFMX0JBUl9DT1JORVJfUkFESVVTID0gNDtcbiAgY29uc3QgRkxPV19DT05ORUNUSU9OX0NVUlZFX0NPTlNUQU5UID0gMC41O1xuXG4gIGZ1bmN0aW9uIGdldEZvcm1hdHRpbmdBbmRDb2xvcnMoXG4gICAgb3JpZ2luYWxEYXRhOiBOb25GbG93RGF0YSxcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgKSB7XG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IChkYXRlOiBEYXRlKSA9PlxuICAgICAgZm9ybWF0ZWREYXRlKGNvbmZpZy5kYXRlRm9ybWF0IHx8ICdkYXknLCBkYXRlKTtcbiAgICBjb25zdCB7IHBpcGUsIGZ1bGxQaXBlIH0gPSBnZXRQaXBlcyhjb25maWcudmFsdWVUeXBlKTtcbiAgICBjb25zdCB7IHBpcGU6IHNlY29uZGFyeVBpcGUsIGZ1bGxQaXBlOiBzZWNvbmRhcnlGdWxsUGlwZSB9ID1cbiAgICAgIGNvbmZpZy5zZWNvbmRhcnlWYWx1ZVR5cGVcbiAgICAgICAgPyBnZXRQaXBlcyhjb25maWcuc2Vjb25kYXJ5VmFsdWVUeXBlKVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHBpcGUsXG4gICAgICAgICAgICBmdWxsUGlwZSxcbiAgICAgICAgICB9O1xuICAgIGNvbnN0IHBpcGVUcmFuc2Zvcm0gPSAoXG4gICAgICB2YWx1ZTogbnVtYmVyLFxuICAgICAgaXNTZWNvbmRhcnk6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gICAgICBpc0Z1bGw/OiBib29sZWFuLFxuICAgICk6IHN0cmluZyA9PiB7XG4gICAgICBpZiAoaXNGdWxsICE9PSB0cnVlKSB7XG4gICAgICAgIGlmIChpc1NlY29uZGFyeSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBzZWNvbmRhcnlQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGxldCByZXRWYWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKGlzU2Vjb25kYXJ5KSB7XG4gICAgICAgIHJldFZhbCA9IHNlY29uZGFyeUZ1bGxQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXRWYWwgPSBmdWxsUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldFZhbCAhPT0gbnVsbCA/IHJldFZhbCA6ICctJztcbiAgICB9O1xuXG4gICAgLy8gUHJlLWNhbGN1bGF0ZSBjb2xvciBpbmRpY2VzIGZvciBhbGwgaXRlbXMgKHVzZSBvcmlnaW5hbCBkYXRhIGZvciBzdGFibGUgY29sb3JzKVxuICAgIGNvbnN0IGNvbG9ySW5kaWNlcyA9IGNhbGN1bGF0ZUNvbG9ySW5kaWNlcyhvcmlnaW5hbERhdGEpO1xuICAgIGNvbnN0IGNvbG9ycyA9IGRhdGEueXMubWFwKHkgPT4gZ2V0Q29sb3IoeSwgY29sb3JJbmRpY2VzLCBjb25maWcuY29sb3JzKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBjb2xvckluZGljZXMsXG4gICAgICBjb2xvcnMsXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb2xvckluZGljZXMoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICk6IE1hcDxEYXRhWSB8IFN1cHBsZW1lbnRhcnlEYXRhWSwgbnVtYmVyPiB7XG4gICAgY29uc3QgY29sb3JNYXAgPSBuZXcgTWFwPERhdGFZIHwgU3VwcGxlbWVudGFyeURhdGFZLCBudW1iZXI+KCk7XG5cbiAgICAvLyBPcmlnaW5hbCBZczogdXNlIHRoZWlyIGFycmF5IGluZGV4IGRpcmVjdGx5XG4gICAgZGF0YS55cy5mb3JFYWNoKCh5LCBpbmRleCkgPT4ge1xuICAgICAgY29sb3JNYXAuc2V0KHksIGluZGV4KTtcbiAgICB9KTtcblxuICAgIC8vIFN1cHBsZW1lbnRhcnkgWXM6IGdyb3VwIGJ5IHN1cHBsZW1lbnRhbEluZGV4LCB1c2UgcG9zaXRpb24gd2l0aGluIHRoYXQgZ3JvdXBcbiAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkpIHtcbiAgICAgIGNvbnN0IHN1cHBHcm91cHMgPSBuZXcgTWFwPG51bWJlciwgU3VwcGxlbWVudGFyeURhdGFZW10+KCk7XG5cbiAgICAgIGRhdGEuc3VwcGxlbWVudGFyeVlzLmZvckVhY2goc3VwcFkgPT4ge1xuICAgICAgICBpZiAoIXN1cHBHcm91cHMuaGFzKHN1cHBZLnN1cHBsZW1lbnRhbEluZGV4KSkge1xuICAgICAgICAgIHN1cHBHcm91cHMuc2V0KHN1cHBZLnN1cHBsZW1lbnRhbEluZGV4LCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwcEdyb3Vwcy5nZXQoc3VwcFkuc3VwcGxlbWVudGFsSW5kZXgpIS5wdXNoKHN1cHBZKTtcbiAgICAgIH0pO1xuXG4gICAgICBzdXBwR3JvdXBzLmZvckVhY2goaXRlbXMgPT4ge1xuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBwb3NpdGlvbkluR3JvdXApID0+IHtcbiAgICAgICAgICBjb2xvck1hcC5zZXQoaXRlbSwgcG9zaXRpb25Jbkdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sb3JNYXA7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0Q29sb3IoXG4gICAgaXRlbTogRGF0YVkgfCBTdXBwbGVtZW50YXJ5RGF0YVkgfCB1bmRlZmluZWQsXG4gICAgY29sb3JJbmRpY2VzOiBNYXA8RGF0YVkgfCBTdXBwbGVtZW50YXJ5RGF0YVksIG51bWJlcj4sXG4gICAgY29sb3JzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29sb3JzWzBdO1xuICAgIH1cbiAgICBpZiAoaXRlbS5jb2xvclRva2VuKSByZXR1cm4gaXRlbS5jb2xvclRva2VuO1xuICAgIGNvbnN0IGNvbG9ySW5kZXggPSBjb2xvckluZGljZXMuZ2V0KGl0ZW0pID8/IDA7XG4gICAgcmV0dXJuIGNvbG9yc1tjb2xvckluZGV4ICUgY29sb3JzLmxlbmd0aF07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCdWNrZXRUaWNrQ291bnQoY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzKTogbnVtYmVyIHtcbiAgICBsZXQgYXZhaWxhYmxlU2l6ZSA9IDA7XG4gICAgbGV0IG1pblNwYWNpbmcgPSAxO1xuICAgIGlmIChjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgIGF2YWlsYWJsZVNpemUgPVxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFdpZHRoIC1cbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMubGVmdFBhZGRpbmcgLVxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5yaWdodFBhZGRpbmc7XG4gICAgICBtaW5TcGFjaW5nID1cbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuaG9yaXpvbnRhbEF4aXNMYWJlbFRleHRTaXplICsgU01BTExfUEFERElORztcbiAgICB9XG4gICAgaWYgKGNoYXJ0U2l6aW5nVmFsdWVzLmNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICBhdmFpbGFibGVTaXplID1cbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudG90YWxIZWlnaHQgLVxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy50b3BQYWRkaW5nIC1cbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuYm90dG9tUGFkZGluZztcbiAgICAgIG1pblNwYWNpbmcgPSBjaGFydFNpemluZ1ZhbHVlcy52ZXJ0aWNhbEF4aXNMYWJlbFRleHRTaXplICsgU01BTExfUEFERElORztcbiAgICB9XG4gICAgbWluU3BhY2luZyA9IG1pblNwYWNpbmcgKiAoY2hhcnRTaXppbmdWYWx1ZXMuZm9udFNpemUgLyBERUZBVUxUX0ZPTlRfU0laRSk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDIsIE1hdGguZmxvb3IoYXZhaWxhYmxlU2l6ZSAvIG1pblNwYWNpbmcpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENsdXN0ZXJJbmZvRm9yQnVja2V0KFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICApOiB7XG4gICAgbm9ybUNvdW50OiBudW1iZXI7XG4gICAgc3VwcENvdW50OiBudW1iZXI7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBub3JtQ2x1c3RlckluZGljZXM6IG51bWJlcltdO1xuICAgIHN1cHBDbHVzdGVySW5kaWNlczogbnVtYmVyW107XG4gIH0ge1xuICAgIC8vIFNsb3QgbGF5b3V0IGlzIHRoZSBzYW1lIGZvciBldmVyeSBidWNrZXQg4oCUIHplcm8gdmFsdWVzIHN0aWxsIG9jY3VweVxuICAgIC8vIHRoZWlyIHNsb3QsIHRoZXkganVzdCByZW5kZXIgd2l0aCBubyBoZWlnaHQvd2lkdGguIFRoaXMga2VlcHMgYnVja2V0XG4gICAgLy8gc2l6ZXMsIGJhciBwb3NpdGlvbnMsIGFuZCBob3ZlciBkZXRlY3Rpb24gY29uc2lzdGVudCBhY3Jvc3MgYnVja2V0c1xuICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggc2VyaWVzIGhhcHBlbiB0byBiZSB6ZXJvLlxuICAgIGNvbnN0IG5vcm1DbHVzdGVySW5kaWNlcyA9IGRhdGEueXMubWFwKChfLCB5SW5kZXgpID0+IHlJbmRleCk7XG4gICAgY29uc3Qgbm9ybUNsdXN0ZXJDb3VudCA9IG5vcm1DbHVzdGVySW5kaWNlcy5sZW5ndGg7XG4gICAgY29uc3Qgc3VwcENsdXN0ZXJJbmRpY2VzID0gdW5pcShcbiAgICAgIGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpXG4gICAgICAgID8gZGF0YS5zdXBwbGVtZW50YXJ5WXMubWFwKHkgPT4geS5zdXBwbGVtZW50YWxJbmRleClcbiAgICAgICAgOiBbXSxcbiAgICApO1xuICAgIHN1cHBDbHVzdGVySW5kaWNlcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG5cbiAgICBjb25zdCBzdXBwQ2x1c3RlckNvdW50ID0gc3VwcENsdXN0ZXJJbmRpY2VzLmxlbmd0aDtcbiAgICBjb25zdCBhY3R1YWxOb3JtQ2x1c3RlckNvdW50ID0gaXNDbHVzdGVyZWREYXRhKGRhdGEsIGNvbmZpZywgZmFsc2UpXG4gICAgICA/IG5vcm1DbHVzdGVyQ291bnRcbiAgICAgIDogTWF0aC5taW4obm9ybUNsdXN0ZXJDb3VudCwgMSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbm9ybUNvdW50OiBhY3R1YWxOb3JtQ2x1c3RlckNvdW50LFxuICAgICAgc3VwcENvdW50OiBzdXBwQ2x1c3RlckNvdW50LFxuICAgICAgdG90YWw6IGFjdHVhbE5vcm1DbHVzdGVyQ291bnQgKyBzdXBwQ2x1c3RlckNvdW50LFxuICAgICAgbm9ybUNsdXN0ZXJJbmRpY2VzLFxuICAgICAgc3VwcENsdXN0ZXJJbmRpY2VzLFxuICAgIH07XG4gIH1cblxuICAvL1RoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIHRvdGFsIGRpc3RhbmNlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBnaXZlbiBidWNrZXQsIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgYnVja2V0XG4gIGZ1bmN0aW9uIGdldEJ1Y2tldFNpemUoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsQmFyTnVtYmVyID0gZ2V0Q2x1c3RlckluZm9Gb3JCdWNrZXQoZGF0YSwgY29uZmlnKTtcbiAgICBjb25zdCBidWNrZXRTaXplID1cbiAgICAgIHRvdGFsQmFyTnVtYmVyLnRvdGFsICogY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSArXG4gICAgICAodG90YWxCYXJOdW1iZXIudG90YWwgLSAxKSAqIGNoYXJ0U2l6aW5nVmFsdWVzLmJhckNsdXN0ZXJHYXA7XG5cbiAgICByZXR1cm4gYnVja2V0U2l6ZTtcbiAgfVxuXG4gIC8vVGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgdG90YWwgZGlzdGFuY2UgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGdpdmVuIGJ1Y2tldCwgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGJ1Y2tldFxuICBmdW5jdGlvbiBnZXRUb3RhbEJ1Y2tldEdhcChcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gICk6IG51bWJlciB7XG4gICAgY29uc3QgYnVja2V0U2l6ZSA9IGdldEJ1Y2tldFNpemUoZGF0YSwgY29uZmlnLCBjaGFydFNpemluZ1ZhbHVlcyk7XG4gICAgcmV0dXJuIGJ1Y2tldFNpemUgKyBjaGFydFNpemluZ1ZhbHVlcy5idWNrZXRHYXA7XG4gIH1cblxuICAvL1RoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIHRvdGFsIGRpc3RhbmNlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBidWNrZXQsIHRvIHRoZSBzdGFydCBvZiB0aGUgZ2l2ZW4gYnVja2V0XG4gIGZ1bmN0aW9uIGdldFRvdGFsUHJlQnVja2V0R2FwKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGxldCBjdW11bGF0aXZlQnVja2V0R2FwID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Y2tldEluZGV4OyBpKyspIHtcbiAgICAgIGN1bXVsYXRpdmVCdWNrZXRHYXAgKz0gZ2V0VG90YWxCdWNrZXRHYXAoZGF0YSwgY29uZmlnLCBjaGFydFNpemluZ1ZhbHVlcyk7XG4gICAgfVxuICAgIHJldHVybiBjdW11bGF0aXZlQnVja2V0R2FwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVUaW1lc2VyaWVzVGlja3MoXG4gICAgZGF0YTogVGltZXNlcmllc0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgdGlja0NvdW50OiBudW1iZXIsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICAgIGZvcm1hdDogKGRhdGU6IERhdGUpID0+IHN0cmluZyxcbiAgKTogR2VuZXJpY1RpY2tbXSB7XG4gICAgY29uc3QgZ2V0TGFiZWwgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgcmV0dXJuIGZvcm1hdChuZXcgRGF0ZShkYXRhLnhbaW5kZXhdKSk7XG4gICAgfTtcbiAgICByZXR1cm4gZ2V0VGlja3MoZGF0YSwgZ2V0TGFiZWwsIGNvbmZpZywgdGlja0NvdW50LCBjaGFydFNpemluZ1ZhbHVlcyk7XG4gIH1cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUxhYmVsbGVkVGlja3MoXG4gICAgZGF0YTogTGFiZWxlZERhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgdGlja0NvdW50OiBudW1iZXIsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICApOiBHZW5lcmljVGlja1tdIHtcbiAgICBjb25zdCBnZXRMYWJlbCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICByZXR1cm4gZGF0YS54W2luZGV4XS5sYWJlbDtcbiAgICB9O1xuICAgIHJldHVybiBnZXRUaWNrcyhkYXRhLCBnZXRMYWJlbCwgY29uZmlnLCB0aWNrQ291bnQsIGNoYXJ0U2l6aW5nVmFsdWVzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRpY2tzKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGdldExhYmVsOiAoaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIHRpY2tDb3VudDogbnVtYmVyLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgKTogR2VuZXJpY1RpY2tbXSB7XG4gICAgaWYgKGRhdGEueC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKGRhdGEueC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGxhYmVsT2Zmc2V0ID0gZ2V0VGlja0xhYmVsT2Zmc2V0KFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBbeyB2YWx1ZTogbGFiZWxPZmZzZXQsIGxhYmVsOiBnZXRMYWJlbCgwKSB9XTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0SW5kZXggPSBkYXRhLngubGVuZ3RoIC0gMTtcbiAgICBjb25zdCB0aWNrQnVja2V0U3BhY2luZyA9IE1hdGguY2VpbChsYXN0SW5kZXggLyB0aWNrQ291bnQpO1xuICAgIGNvbnN0IG51bVRpY2tzID0gTWF0aC5mbG9vcihsYXN0SW5kZXggLyB0aWNrQnVja2V0U3BhY2luZykgKyAxO1xuICAgIGNvbnN0IHN0ZXAgPSBsYXN0SW5kZXggLyAobnVtVGlja3MgLSAxKTtcblxuICAgIC8vIEFsd2F5cyBpbmNsdWRlIGZpcnN0IGFuZCBsYXN0IGRhdGEgcG9pbnRzLlxuICAgIC8vIElubmVyIHRpY2tzIGFyZSBhcHByb3hpbWF0ZWx5IGV2ZW5seSBzcGFjZWQgdXNpbmcgcm91bmRpbmcuXG4gICAgY29uc3QgaW5kaWNlczogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRpY2tzOyBpKyspIHtcbiAgICAgIGluZGljZXMucHVzaChNYXRoLnJvdW5kKGkgKiBzdGVwKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGljZXMubWFwKGkgPT4ge1xuICAgICAgY29uc3QgbGFiZWxPZmZzZXQgPSBnZXRUaWNrTGFiZWxPZmZzZXQoXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIGksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6XG4gICAgICAgICAgZ2V0VG90YWxQcmVCdWNrZXRHYXAoZGF0YSwgY29uZmlnLCBjaGFydFNpemluZ1ZhbHVlcywgaSkgK1xuICAgICAgICAgIGxhYmVsT2Zmc2V0LFxuICAgICAgICBsYWJlbDogZ2V0TGFiZWwoaSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VGlja0xhYmVsT2Zmc2V0KFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICApIHtcbiAgICBjb25zdCBpbmhlcmVudE9mZnNldCA9XG4gICAgICBjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsVG9wT2Zmc2V0XG4gICAgICAgIDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxMZWZ0T2Zmc2V0O1xuICAgIC8vVG8gaGF2ZSB0aGUgbGFiZWwgYmUgY2VudGVyZWQgb24gdGhlIGJ1Y2tldCdzIGNlbnRlciBwb3NpdGlvblxuICAgIGNvbnN0IGJ1Y2tldE9mZnNldCA9IGdldEJ1Y2tldFNpemUoZGF0YSwgY29uZmlnLCBjaGFydFNpemluZ1ZhbHVlcykgLyAyO1xuICAgIGxldCBob3Jpem9udGFsQmFyT2Zmc2V0ID0gMDtcbiAgICBpZiAoY2hhcnRTaXppbmdWYWx1ZXMuY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIC8vVGhpcyBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IHRoZSBpbmhlcmVudE9mZnNldCBhbmQgYnVja2V0T2Zmc2V0IHJlc3VsdCBpbiBtYXRjaGluZyB5IHZhbHVlcyBmb3IgdGhlIGJhciBhbmQgdGhlIGxhYmVsXG4gICAgICAvLyAgSG93ZXZlciwgZm9yIHRoZSBiYXIsIHRoYXQgeSBwb3NpdGlvbiBpcyB0aGUgdG9wIG9mIHRoZSBiYXIsIHdoaWxlIGZvciB0aGUgbGFiZWwsIGl0J3MgdGhlIGJvdHRvbSBvZiB0aGUgbGFiZWxcbiAgICAgIC8vICBXaGVuIGV4YWN0bHkgbGluZWQgdXAgbGlrZSB0aGF0LCB0aGUgbGFiZWwgYWN0dWFsbHkgbG9va3MgYSBsaXR0bGUgbG93LCBzbyB0aGF0IC0yIG1ha2VzIGl0IGxvb2sgY29ycmVjdFxuICAgICAgaG9yaXpvbnRhbEJhck9mZnNldCA9IGNoYXJ0U2l6aW5nVmFsdWVzLmZvbnRTaXplIC8gMiAtIDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluaGVyZW50T2Zmc2V0ICsgYnVja2V0T2Zmc2V0ICsgaG9yaXpvbnRhbEJhck9mZnNldDtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIElucHV0RGF0YSA9IExhYmVsZWREYXRhIHwgVGltZXNlcmllc0RhdGEgfCBGbG93RGF0YTtcbiAgZXhwb3J0IHR5cGUgUHJvY2Vzc0RhdGEgPSBMYWJlbGVkRGF0YSB8IFRpbWVzZXJpZXNEYXRhIHwgUHJvY2Vzc2VkRmxvd0RhdGE7XG4gIGV4cG9ydCB0eXBlIE5vbkZsb3dEYXRhID0gTGFiZWxlZERhdGEgfCBUaW1lc2VyaWVzRGF0YTtcblxuICB0eXBlIEJhc2VEYXRhID0ge1xuICAgIHlzOiBEYXRhWVtdO1xuICAgIHN1cHBsZW1lbnRhcnlZcz86IFN1cHBsZW1lbnRhcnlEYXRhWVtdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFBhdHRlcm4gPSAnc29saWQnIHwgJ3N0cmlwZWQnIHwgJ2RvdHMnO1xuXG4gIGV4cG9ydCB0eXBlIERhdGFZID0ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgY29sb3JUb2tlbj86IHN0cmluZztcbiAgICBoaWRkZW4/OiBib29sZWFuO1xuICAgIGlzU2Vjb25kYXJ5PzogYm9vbGVhbjtcbiAgICBwYXR0ZXJuPzogUGF0dGVybjtcbiAgICBzaG93TGVnZW5kSXRlbT86IGJvb2xlYW47XG4gICAgY2xpY2thYmxlPzogYm9vbGVhbjtcbiAgICB2YWx1ZXM6IG51bWJlcltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFN1cHBsZW1lbnRhcnlEYXRhWSA9IERhdGFZICYge1xuICAgIHN1cHBsZW1lbnRhbEluZGV4OiBudW1iZXI7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRmxvd1kgPSB7XG4gICAgc3RlcHM6IHN0cmluZ1tdOyAvL1Nob3VsZCBhbHdheXMgbWF0Y2ggaW4gbGVuZ3RoIHcvIHZhbHVlc1xuICAgIHZhbHVlczogbnVtYmVyW107IC8vRmxvd1kgdmFsdWVzIHNob3VsZCBhbHdheXMgYmUgd2Vha2x5IGRlY3JlYXNpbmdcbiAgICBjbGlja2FibGU/OiBib29sZWFuO1xuICB9O1xuXG4gIC8vQ3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGZvciBob3Jpem9udGFsIGJhciBjaGFydHNcbiAgZXhwb3J0IHR5cGUgTGFiZWxlZERhdGEgPSBCYXNlRGF0YSAmIHtcbiAgICB0eXBlOiAnbGFiZWxlZCc7XG4gICAgeDogeyBsYWJlbDogc3RyaW5nOyBpc1NlY29uZGFyeT86IGJvb2xlYW4gfVtdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFRpbWVzZXJpZXNEYXRhID0gQmFzZURhdGEgJiB7XG4gICAgdHlwZTogJ3RpbWVzZXJpZXMnO1xuICAgIHg6IG51bWJlcltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZsb3dEYXRhID0ge1xuICAgIHR5cGU6ICdmbG93JztcbiAgICB5czogRmxvd1lbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBQcm9jZXNzZWRGbG93RGF0YSA9IHtcbiAgICB0eXBlOiAnZmxvdy1wcm9jZXNzZWQnO1xuICAgIHg6IEZsb3dCdWNrZXRbXTtcbiAgfTtcblxuICB0eXBlIEZsb3dCdWNrZXQgPSB7XG4gICAgdG90YWxDb3VudDogbnVtYmVyO1xuICAgIHN1YkJ1Y2tldHM6IEZsb3dTdWJCdWNrZXRbXTtcbiAgfTtcblxuICB0eXBlIEZsb3dTdWJCdWNrZXQgPSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIGNvbm5lY3Rpb25zOiBGbG93Q29ubmVjdGlvbltdO1xuICB9O1xuXG4gIHR5cGUgRmxvd0Nvbm5lY3Rpb24gPSB7XG4gICAgZGlyZWN0aW9uOiAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuICAgIHN0YXJ0OiBzdHJpbmc7XG4gICAgZW5kOiBzdHJpbmc7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGbG93Q29ubmVjdGlvblJlbmRlciA9IE9taXQ8Rmxvd0Nvbm5lY3Rpb24sICdkaXJlY3Rpb24nPiAmIHtcbiAgICBlbGVtZW50VHlwZTogJ2Nvbm5lY3Rpb24nO1xuICAgIHN0ZXA6IG51bWJlcjtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgZW1waGFzaXplPzogYm9vbGVhbjtcbiAgICB0b3BMaW5lOiB7XG4gICAgICB4MTogbnVtYmVyO1xuICAgICAgeTE6IG51bWJlcjtcbiAgICAgIHgyOiBudW1iZXI7XG4gICAgICB5MjogbnVtYmVyO1xuICAgIH07XG4gICAgYm90dG9tTGluZToge1xuICAgICAgeDE6IG51bWJlcjtcbiAgICAgIHkxOiBudW1iZXI7XG4gICAgICB4MjogbnVtYmVyO1xuICAgICAgeTI6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuXG4gIHR5cGUgRG9udXREYXRhID0ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIGlzU2Vjb25kYXJ5PzogYm9vbGVhbjtcbiAgfTtcblxuICB0eXBlIERpbWVuc2lvbnMgPSB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBDaGFydFR5cGUgPVxuICAgIHwgJ2xpbmUnXG4gICAgfCAnYXJlYSdcbiAgICB8ICdiYXInXG4gICAgfCAnaG9yaXpvbnRhbC1iYXInXG4gICAgfCAnZG9udXQnXG4gICAgfCAnd2F0ZXJmYWxsJ1xuICAgIHwgJ2Z1bm5lbCdcbiAgICB8ICdmbG93JztcblxuICB0eXBlIEJhc2VDb25maWcgPSB7XG4gICAgdHlwZTogQ2hhcnRUeXBlO1xuICAgIGdyb3VwZWRUb29sdGlwOiBib29sZWFuO1xuICAgIGNvbG9yczogc3RyaW5nW107XG4gICAgYWxsb3dMZWdlbmRUb2dnbGU6IGJvb2xlYW47XG4gICAgemVyb1N0YXRlTWVzc2FnZTogc3RyaW5nO1xuICAgIHNpemluZ0Vycm9yU3RhdGVNZXNzYWdlOiBzdHJpbmc7XG4gICAgdmFsdWVUeXBlOiBWYWx1ZVR5cGU7XG4gICAgc2Vjb25kYXJ5VmFsdWVUeXBlPzogVmFsdWVUeXBlO1xuICAgIHRydW5jYXRlTGVnZW5kOiBib29sZWFuO1xuICAgIGRhdGVGb3JtYXQ/OiBJbnRlcnZhbDtcbiAgICBzaG93RGF0YUxhYmVscz86IGJvb2xlYW47XG4gIH07XG5cbiAgdHlwZSBEb251dFN1YkNvbmZpZyA9IHtcbiAgICBzaXplOiAneHNtYWxsJyB8ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XG4gICAgZGlzcGxheVZhbHVlOiBzdHJpbmc7XG4gICAgZGlzcGxheUxhYmVsPzogc3RyaW5nO1xuICAgIHNjYWxpbmdDb25maWc/OiBEb251dFNpemluZ0NvbmZpZztcbiAgfTtcblxuICB0eXBlIEZsb3dTdWJDb25maWcgPSB7XG4gICAgc3VidGl0bGVGb3JtYXRTdHJpbmc6IHN0cmluZztcbiAgICBzdWJCdWNrZXRzQ29uZmlnOiB7XG4gICAgICBidWNrZXRJZDogc3RyaW5nO1xuICAgICAgYnVja2V0TmFtZTogc3RyaW5nO1xuICAgICAgY29sb3I6IHN0cmluZztcbiAgICAgIGlzSGlnaGxpZ2h0ZWQ/OiBib29sZWFuO1xuICAgIH1bXTtcbiAgICBjb25uZWN0aW9uQ29sb3I/OiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgQ29uZmlnID0gQmFzZUNvbmZpZyAmXG4gICAgKFxuICAgICAgfCB7XG4gICAgICAgICAgdHlwZTogJ2xpbmUnIHwgJ2FyZWEnIHwgJ3dhdGVyZmFsbCcgfCAnZnVubmVsJztcbiAgICAgICAgICBzY2FsaW5nQ29uZmlnPzogRnVsbFNjYWxpbmdDb25maWc7XG4gICAgICAgIH1cbiAgICAgIHwge1xuICAgICAgICAgIHR5cGU6ICdiYXInIHwgJ2hvcml6b250YWwtYmFyJztcbiAgICAgICAgICBncm91cGluZ1R5cGU6ICdzdGFja2VkJyB8ICdjbHVzdGVyZWQnO1xuICAgICAgICAgIHNjYWxpbmdDb25maWc/OiBGdWxsU2NhbGluZ0NvbmZpZztcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgdHlwZTogJ2RvbnV0JztcbiAgICAgICAgICBkb251dERpc3BsYXlJbmZvOiBEb251dFN1YkNvbmZpZztcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgdHlwZTogJ2Zsb3cnO1xuICAgICAgICAgIHNob3dEYXRhTGFiZWxzOiB0cnVlO1xuICAgICAgICAgIGZsb3dDb25maWc6IEZsb3dTdWJDb25maWc7XG4gICAgICAgICAgc2NhbGluZ0NvbmZpZz86IEZ1bGxTY2FsaW5nQ29uZmlnO1xuICAgICAgICB9XG4gICAgKTtcblxuICB0eXBlIERvbnV0Q29uZmlnID0gRXh0cmFjdDxDb25maWcsIHsgdHlwZTogJ2RvbnV0JyB9PjtcblxuICB0eXBlIEZsb3dDb25maWcgPSBFeHRyYWN0PENvbmZpZywgeyB0eXBlOiAnZmxvdycgfT47XG5cbiAgdHlwZSBDb25maWdXaXRoRnVsbFNjYWxpbmcgPSBFeHRyYWN0PFxuICAgIENvbmZpZyxcbiAgICB7XG4gICAgICB0eXBlOlxuICAgICAgICB8ICdiYXInXG4gICAgICAgIHwgJ2hvcml6b250YWwtYmFyJ1xuICAgICAgICB8ICdsaW5lJ1xuICAgICAgICB8ICdhcmVhJ1xuICAgICAgICB8ICd3YXRlcmZhbGwnXG4gICAgICAgIHwgJ2Z1bm5lbCdcbiAgICAgICAgfCAnZmxvdyc7XG4gICAgfVxuICA+O1xuXG4gIGV4cG9ydCBjb25zdCBkZWZhdWx0Q29uZmlnOiBDb25maWcgPSB7XG4gICAgdHlwZTogJ2xpbmUnLFxuICAgIGdyb3VwZWRUb29sdGlwOiB0cnVlLFxuICAgIGNvbG9yczogZGVmYXVsdENvbG9yUGFsZXR0ZSxcbiAgICBhbGxvd0xlZ2VuZFRvZ2dsZTogZmFsc2UsXG4gICAgemVyb1N0YXRlTWVzc2FnZTogJ05vIGRhdGEgdG8gZGlzcGxheS4nLFxuICAgIHNpemluZ0Vycm9yU3RhdGVNZXNzYWdlOiAnVGhlIGNoYXJ0IGNhbm5vdCBkaXNwbGF5IGF0IHRoZSBjdXJyZW50IHNpemUuJyxcbiAgICB2YWx1ZVR5cGU6ICdjdXJyZW5jeScsXG4gICAgdHJ1bmNhdGVMZWdlbmQ6IHRydWUsXG4gICAgZGF0ZUZvcm1hdDogJ2RheScsXG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IGRlZmF1bHREb251dENvbmZpZzogQ29uZmlnID0ge1xuICAgIHR5cGU6ICdkb251dCcsXG4gICAgZ3JvdXBlZFRvb2x0aXA6IHRydWUsXG4gICAgY29sb3JzOiBkZWZhdWx0Q29sb3JQYWxldHRlLFxuICAgIGFsbG93TGVnZW5kVG9nZ2xlOiBmYWxzZSxcbiAgICB6ZXJvU3RhdGVNZXNzYWdlOiAnTm8gZGF0YSB0byBkaXNwbGF5LicsXG4gICAgc2l6aW5nRXJyb3JTdGF0ZU1lc3NhZ2U6ICdUaGUgY2hhcnQgY2Fubm90IGRpc3BsYXkgYXQgdGhlIGN1cnJlbnQgc2l6ZS4nLFxuICAgIHZhbHVlVHlwZTogJ2N1cnJlbmN5JyxcbiAgICB0cnVuY2F0ZUxlZ2VuZDogdHJ1ZSxcbiAgICBkYXRlRm9ybWF0OiAnZGF5JyxcbiAgICBkb251dERpc3BsYXlJbmZvOiB7XG4gICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgIGRpc3BsYXlWYWx1ZTogJycsXG4gICAgfSxcbiAgfTtcblxuICB0eXBlIEdlbmVyaWNUaWNrID0ge1xuICAgIHZhbHVlOiBudW1iZXI7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBzZWNvbmRhcnlMYWJlbD86IHN0cmluZztcbiAgfTtcblxuICB0eXBlIFhUaWNrID0gT21pdDxHZW5lcmljVGljaywgJ3ZhbHVlJz4gJiB7XG4gICAgeDogbnVtYmVyO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHRvWFRpY2sodGljazogR2VuZXJpY1RpY2spOiBYVGljayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRpY2sudmFsdWUsXG4gICAgICBsYWJlbDogdGljay5sYWJlbCxcbiAgICAgIHNlY29uZGFyeUxhYmVsOiB0aWNrLnNlY29uZGFyeUxhYmVsLFxuICAgIH07XG4gIH1cblxuICB0eXBlIFlUaWNrID0gT21pdDxHZW5lcmljVGljaywgJ3ZhbHVlJz4gJiB7XG4gICAgeTogbnVtYmVyO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHRvWVRpY2sodGljazogR2VuZXJpY1RpY2spOiBZVGljayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHk6IHRpY2sudmFsdWUsXG4gICAgICBsYWJlbDogdGljay5sYWJlbCxcbiAgICAgIHNlY29uZGFyeUxhYmVsOiB0aWNrLnNlY29uZGFyeUxhYmVsLFxuICAgIH07XG4gIH1cblxuICB0eXBlIEJhc2ljUmVjdCA9IHtcbiAgICBlbGVtZW50VHlwZTogJ3JlY3QnO1xuICAgIHJlY3RUeXBlPzogc3RyaW5nO1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgcGF0dGVybj86IFBhdHRlcm47XG4gICAgcm91bmRpbmc/OiAndG9wJyB8ICdib3R0b20nIHwgJ2FsbCcgfCAnbm9uZSc7XG4gICAgbm9uRGlzcGxheT86IGJvb2xlYW47XG4gIH07XG5cbiAgdHlwZSBGbG93UmVjdCA9IEJhc2ljUmVjdCAmIHtcbiAgICByZWN0VHlwZTogJ2Zsb3cnO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgYnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgICBjb2xvck92ZXJyaWRlPzogc3RyaW5nO1xuICAgIGRhcmtlbjogYm9vbGVhbjtcbiAgICBkZUVtcGhhc2l6ZTogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBSZWN0ID0gKEJhc2ljUmVjdCAmIHsgcmVjdFR5cGU/OiB1bmRlZmluZWQgfSkgfCBGbG93UmVjdDtcblxuICB0eXBlIENpcmNsZSA9IHtcbiAgICBjeDogbnVtYmVyO1xuICAgIGN5OiBudW1iZXI7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRmxvd0hvdmVyVGFyZ2V0ID1cbiAgICB8IHtcbiAgICAgICAgaG92ZXJUYXJnZXQ6ICdiYXJUaXRsZSc7XG4gICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgICAgIGJhcklkOiBzdHJpbmc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIGhvdmVyVGFyZ2V0OiAnYmFyJztcbiAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgYmFySWQ6IHN0cmluZztcbiAgICAgICAgZm9yRGFya2VuOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBob3ZlclRhcmdldDogJ2Nvbm5lY3Rpb24nO1xuICAgICAgICBzdGFydElkOiBzdHJpbmc7XG4gICAgICAgIGVuZElkOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0QnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICAgIH07XG5cbiAgZXhwb3J0IHR5cGUgRmxvd0hvdmVyUmV0dXJuID0ge1xuICAgIGhvdmVyVHlwZTogJ2Zsb3cnO1xuXG4gICAgdG9vbHRpcDoge1xuICAgICAgYW5jaG9yOiBET01SZWN0O1xuICAgICAgc3VidGl0bGU6IHN0cmluZztcbiAgICAgIHNlY29uZGFyeVN1YnRpdGxlPzogc3RyaW5nO1xuICAgIH07XG4gIH0gJiBGbG93SG92ZXJUYXJnZXQ7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhIGNsaWNrYWJsZSBmbG93IGVsZW1lbnQgaXMgY2xpY2tlZC4gYHlJbmRpY2VzYCBhcmUgdGhlXG4gICAqIGluZGljZXMgaW50byBgRmxvd0RhdGEueXNgIG9mIHRoZSBwYXRocyB0aGF0IG1ha2UgdXAgdGhlIGNsaWNrZWQgZWxlbWVudC5cbiAgICovXG4gIGV4cG9ydCB0eXBlIEZsb3dDbGlja0V2ZW50ID0ge1xuICAgIGNvdW50OiBudW1iZXI7XG4gICAgeUluZGljZXM6IG51bWJlcltdO1xuICB9ICYgKFxuICAgIHwgKHtcbiAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgYmFySWQ6IHN0cmluZztcbiAgICAgIH0gJiAoXG4gICAgICAgIHwge1xuICAgICAgICAgICAgdGFyZ2V0OiAndGl0bGUnO1xuICAgICAgICAgIH1cbiAgICAgICAgfCB7XG4gICAgICAgICAgICB0YXJnZXQ6ICdjb250aW51aW5nJyB8ICdlbmRpbmcnO1xuICAgICAgICAgICAgdG90YWxDb3VudDogbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICkpXG4gICAgfCB7XG4gICAgICAgIHRhcmdldDogJ2Nvbm5lY3Rpb24nO1xuICAgICAgICBzdGFydEJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgICAgIHN0YXJ0SWQ6IHN0cmluZztcbiAgICAgICAgZW5kSWQ6IHN0cmluZztcbiAgICAgIH1cbiAgKTtcblxuICBleHBvcnQgdHlwZSBIb3ZlclJldHVybiA9XG4gICAgfCB7XG4gICAgICAgIGhvdmVyVHlwZTogJ3N0YW5kYXJkJztcbiAgICAgICAgLy8gdGhlIGluZGljZXMgaW50byB0aGUgZGF0YSBvZiB0aGUgY2xvc2VzdCBwb2ludFxuICAgICAgICB4SW5kZXg6IG51bWJlcjtcbiAgICAgICAgLy8gd2Ugd2FudCB0byBrbm93IHdoaWNoIHZpc2libGUgeSBpbmRleCBpcyBob3ZlcmVkXG4gICAgICAgIC8vIGFuZCB3aGljaCBhY3R1YWwgeSBpbmRleCBpcyBob3ZlcmVkXG4gICAgICAgIHlJbmRleDogbnVtYmVyO1xuICAgICAgICB2aXNpYmxlWUluZGV4OiBudW1iZXI7XG4gICAgICAgIGlzU3VwcFZhbHVlPzogYm9vbGVhbjtcbiAgICAgICAgc3VwcFlJbmRleD86IG51bWJlcjtcbiAgICAgICAgLy9GdW5uZWwgb25seSwgZm9yIHdoZW4gZHJvcE9mZiBzZWN0aW9uIGlzIGhvdmVyZWRcbiAgICAgICAgaXNEcm9wT2ZmPzogYm9vbGVhbjtcblxuICAgICAgICAvLyB0aGUgdmlld3BvcnQgeCBhbmQgeXMgb2YgdGhlIGhvdmVyZWQgaXRlbXNcbiAgICAgICAgeDogbnVtYmVyO1xuICAgICAgICB5czogbnVtYmVyW107XG5cbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcjogRE9NUmVjdDtcbiAgICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbj86IENhbGxvdXRDb21wb25lbnQuQW5jaG9yZWRQb3NpdGlvbjtcbiAgICAgICAgICBkYXRlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgIG1ldHJpY3M6IHtcbiAgICAgICAgICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgICAgICAgdmFsdWU6IHN0cmluZztcbiAgICAgICAgICAgIHBhdHRlcm4/OiBQYXR0ZXJuO1xuICAgICAgICAgIH1bXTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB8IEZsb3dIb3ZlclJldHVyblxuICAgIHwgbnVsbDtcblxuICAvLyBIb3ZlciBpcyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2aWV3cG9ydCB4IGFuZCB5IGFuZCByZXR1cm5zIGEgcmljaFxuICAvLyBzZXQgb2YgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB2YWx1ZXMgYXJlIGJlaW5nIGhvdmVyZWQgYW5kIHdoYXQgdGhlIHRvb2x0aXBcbiAgLy8gc2hvdWxkIGxvb2sgbGlrZVxuICBleHBvcnQgdHlwZSBIb3ZlciA9IChwb3M6IHtcbiAgICByZWN0OiBET01SZWN0O1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgY29udGFpbmVyU2Nyb2xsWDogbnVtYmVyO1xuICAgIGNvbnRhaW5lclNjcm9sbFk6IG51bWJlcjtcbiAgfSkgPT4gSG92ZXJSZXR1cm47XG5cbiAgZXhwb3J0IHR5cGUgVG9vbHRpcENvbnRleHQgPSB7XG4gICAgeEluZGV4OiBudW1iZXI7XG4gICAgeUluZGV4OiBudW1iZXI7XG4gICAgaXNTdXBwVmFsdWU/OiBib29sZWFuO1xuICAgIHN1cHBZSW5kZXg/OiBudW1iZXI7XG4gIH07XG5cbiAgLy8gUmVuZGVyZWRDaGFydCByZXByZXNlbnRzIGFsbCBvZiB0aGUgcGFydHMgb2YgYSBjaGFydFxuICAvLyB0aGF0IGVuZCB1cCBvbiBzY3JlZW4uIEV2ZXJ5IGNoYXJ0IGhhcyB4IGFuZCB5IHRpY2tzXG4gIC8vIGFuZCBob3ZlciBmdW5jdGlvbmFsaXR5LCBldmVuIHRob3VnaCB0aGV5IG1pZ2h0IGJlXG4gIC8vIGRpZmZlcmVudCBmcm9tIGNoYXJ0IHRvIGNoYXJ0LlxuICBleHBvcnQgdHlwZSBSZW5kZXJlZENoYXJ0ID0ge1xuICAgIGNoYXJ0V2lkdGg6IG51bWJlcjtcbiAgICBjaGFydEhlaWdodDogbnVtYmVyO1xuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcztcbiAgICB4VGlja3M6IFhUaWNrW107XG4gICAgeVRpY2tzOiBZVGlja1tdO1xuICAgIGhvdmVyPzogSG92ZXI7XG4gICAgY29sb3JzOiBzdHJpbmdbXTtcbiAgICBsaW5lczogeyBwYXR0ZXJuPzogUGF0dGVybjsgbGluZTogc3RyaW5nIHwgbnVsbCB9W107XG4gICAgY2lyY2xlczogQ2lyY2xlW107IC8vTGluZSBmYWxsYmFjayBmb3IgYSBzaW5nbGUgcG9pbnRcbiAgICBhcmVhczogeyBwYXR0ZXJuPzogUGF0dGVybjsgYXJlYTogc3RyaW5nIHwgbnVsbCB9W107XG4gICAgYmFyczogUmVjdFtdW107XG4gICAgYXJjczogKHN0cmluZyB8IG51bGwpW107XG4gICAgaG9yaXpvbnRhbEJhcnM6IHtcbiAgICAgIHBhdHRlcm4/OiBQYXR0ZXJuO1xuICAgICAgaG9yaXpvbnRhbEJhcjogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICB9W11bXTtcbiAgICBkYXRhTGFiZWxzOiBEYXRhTGFiZWxbXTtcbiAgICB3YXRlcmZhbGxMaW5lczoge1xuICAgICAgeDE6IG51bWJlcjtcbiAgICAgIHgyOiBudW1iZXI7XG4gICAgICB5MTogbnVtYmVyO1xuICAgICAgeTI6IG51bWJlcjtcbiAgICB9W107XG4gICAgZ3JhZGllbnRzOiBSZWN0W11bXTtcbiAgICBmbG93Q29ubmVjdGlvbnM6IEZsb3dDb25uZWN0aW9uUmVuZGVyW107XG4gICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOiBDb250YWluZXJTY2FsaW5nVHlwZTtcbiAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlOiBDb250YWluZXJTY2FsaW5nVHlwZTtcbiAgICBjaGFydEVycm9yOiAnc2l6aW5nJyB8ICdjb25maWcnIHwgbnVsbDtcbiAgfTtcblxuICB0eXBlIEJhc2ljRGF0YUxhYmVsID0ge1xuICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJztcbiAgICBkYXRhTGFiZWxUeXBlPzogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgeFBvczogbnVtYmVyO1xuICAgIHlQb3M6IG51bWJlcjtcbiAgICBhbmNob3I6ICdzdGFydCcgfCAnbWlkZGxlJyB8ICdlbmQnO1xuICAgIGxpbmU/OiB7XG4gICAgICB4MTogbnVtYmVyO1xuICAgICAgeTE6IG51bWJlcjtcbiAgICAgIHgyOiBudW1iZXI7XG4gICAgICB5MjogbnVtYmVyO1xuICAgIH07XG4gICAgYm9sZD86IGJvb2xlYW47XG4gIH07XG5cbiAgdHlwZSBGbG93RGF0YUxhYmVsID0gQmFzaWNEYXRhTGFiZWwgJiB7XG4gICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnO1xuICAgIGRhdGFMYWJlbFR5cGU6ICdmbG93JztcbiAgICAvL0hlbHBlciBkYXRhIGZvciBmbG93c1xuICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgYmFySWQ6IHN0cmluZztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBEYXRhTGFiZWwgPVxuICAgIHwgKEJhc2ljRGF0YUxhYmVsICYgeyBkYXRhTGFiZWxUeXBlPzogdW5kZWZpbmVkIH0pXG4gICAgfCBGbG93RGF0YUxhYmVsO1xuXG4gIGNvbnN0IGVtcHR5Q2hhcnQ6IFJlbmRlcmVkQ2hhcnQgPSB7XG4gICAgY2hhcnRXaWR0aDogMCxcbiAgICBjaGFydEhlaWdodDogMCxcbiAgICBjaGFydFNpemluZ1ZhbHVlczogZW1wdHlDaGFydFNjYWxlVmFsdWVzLFxuICAgIHhUaWNrczogW10sXG4gICAgeVRpY2tzOiBbXSxcbiAgICBjb2xvcnM6IFtdLFxuICAgIGxpbmVzOiBbXSxcbiAgICBjaXJjbGVzOiBbXSxcbiAgICBhcmVhczogW10sXG4gICAgYmFyczogW10sXG4gICAgYXJjczogW10sXG4gICAgaG9yaXpvbnRhbEJhcnM6IFtdLFxuICAgIGRhdGFMYWJlbHM6IFtdLFxuICAgIHdhdGVyZmFsbExpbmVzOiBbXSxcbiAgICBncmFkaWVudHM6IFtdLFxuICAgIGZsb3dDb25uZWN0aW9uczogW10sXG4gICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOiAnbm8tc2NhbGUnLFxuICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6ICduby1zY2FsZScsXG4gICAgY2hhcnRFcnJvcjogbnVsbCxcbiAgfTtcblxuICAvLyd5JyBpbiB0aGlzIGZ1bmN0aW9uIHJlZmVycyB0byB0aGUgZGF0YSB5LCBzaW5jZSB0aGlzIGZ1bmN0aW9uXG4gIC8vIGlzIGFsc28gdXNlZCBieSBob3Jpem9udGFsLWJhcnMsIHdoZXJlIHRoZSBkYXRhIHkgaXMgdGhlIGNoYXJ0IHhcbiAgZnVuY3Rpb24gY2FsY0RhdGFBeGlzU2NhbGVzQW5kVGlja3MoXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgcGlwZVRyYW5zZm9ybUlucHV0OlxuICAgICAgfCAoKHZhbHVlOiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuKSA9PiBzdHJpbmcpXG4gICAgICB8IG51bGwsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICApOiB7XG4gICAgc2NhbGU6IChpbnB1dDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyO1xuICAgIHRpY2tzOiBHZW5lcmljVGlja1tdO1xuICB9IHtcbiAgICBjb25zdCBwaXBlVHJhbnNmb3JtID1cbiAgICAgIHBpcGVUcmFuc2Zvcm1JbnB1dCAhPT0gbnVsbCA/IHBpcGVUcmFuc2Zvcm1JbnB1dCA6ICgpID0+ICcnO1xuICAgIGNvbnN0IHtcbiAgICAgIHByaW1hcnlEYXRhTWluLFxuICAgICAgcHJpbWFyeURhdGFNYXgsXG4gICAgICBzZWNvbmRhcnlEYXRhTWluLFxuICAgICAgc2Vjb25kYXJ5RGF0YU1heCxcbiAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXgsXG4gICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnLFxuICAgIH0gPSBjYWxjRGF0YVNjYWxpbmdWYWx1ZXMoZGF0YSwgY29uZmlnKTtcbiAgICBjb25zdCBzdGFydE9mZnNldCA9XG4gICAgICBjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsTGVmdE9mZnNldFxuICAgICAgICA6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsVG9wT2Zmc2V0O1xuICAgIGxldCBtaW5TcGFjaW5nID1cbiAgICAgIChjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IGNoYXJ0U2l6aW5nVmFsdWVzLmhvcml6b250YWxBeGlzTGFiZWxUZXh0U2l6ZVxuICAgICAgICA6IGNoYXJ0U2l6aW5nVmFsdWVzLnZlcnRpY2FsQXhpc0xhYmVsVGV4dFNpemUpICsgU01BTExfUEFERElORztcbiAgICBtaW5TcGFjaW5nID0gbWluU3BhY2luZyAqIChjaGFydFNpemluZ1ZhbHVlcy5mb250U2l6ZSAvIERFRkFVTFRfRk9OVF9TSVpFKTtcbiAgICBjb25zdCBzcGFjaW5nVGlja0NvdW50ID0gTWF0aC5tYXgoXG4gICAgICAyLFxuICAgICAgTWF0aC5mbG9vcihjaGFydFNpemluZ1ZhbHVlcy5zaXplRm9yRGF0YSAvIG1pblNwYWNpbmcpLFxuICAgICk7XG4gICAgY29uc3QgYWN0dWFsVGFyZ2V0VGlja0NvdW50ID0gTWF0aC5taW4oXG4gICAgICBzcGFjaW5nVGlja0NvdW50LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudGFyZ2V0VGlja0NvdW50LFxuICAgICk7XG5cbiAgICBjb25zdCBoYXNQcmltYXJ5ID0gcHJpbWFyeURhdGFNaW4gIT09IDAgfHwgcHJpbWFyeURhdGFNYXggIT09IDA7XG4gICAgY29uc3QgaGFzU2Vjb25kYXJ5ID0gc2Vjb25kYXJ5RGF0YU1pbiAhPT0gMCB8fCBzZWNvbmRhcnlEYXRhTWF4ICE9PSAwO1xuICAgIGNvbnN0IHNjYWxlUmFuZ2UgPVxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHxcbiAgICAgIGNvbmZpZy50eXBlID09PSAnZmxvdydcbiAgICAgICAgPyBbMCwgY2hhcnRTaXppbmdWYWx1ZXMuc2l6ZUZvckRhdGFdXG4gICAgICAgIDogW2NoYXJ0U2l6aW5nVmFsdWVzLnNpemVGb3JEYXRhLCAwXTtcbiAgICAvL1RoZXNlICdlZmZlY3RpdmUnIHZhbHVlcyBlbnN1cmUgd2UgaGF2ZSByb29tIGZvciBwb3RlbnRpYWwgc3RhY2tpbmcgb2Ygc2Vjb25kYXJ5IGFuZCBub24tc2Vjb25kYXJ5IHZhbHVlc1xuICAgIGxldCBlZmZlY3RpdmVQcmltYXJ5TWluID0gcHJpbWFyeURhdGFNaW4gKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnO1xuICAgIGxldCBlZmZlY3RpdmVQcmltYXJ5TWF4ID0gcHJpbWFyeURhdGFNYXggKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4O1xuXG4gICAgLy9TaW1wbGVyIHBhdGggZm9yIGRhdGEgdy9vIHNlY29uZGFyaWVzXG4gICAgaWYgKCFoYXNTZWNvbmRhcnkpIHtcbiAgICAgIGNvbnN0IHByaW1hcnlZRG9tYWluID0gW2VmZmVjdGl2ZVByaW1hcnlNaW4sIGVmZmVjdGl2ZVByaW1hcnlNYXhdO1xuXG4gICAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcihwcmltYXJ5WURvbWFpbiwgc2NhbGVSYW5nZSk7XG4gICAgICBjb25zdCB0aWNrczogR2VuZXJpY1RpY2tbXSA9IHlTY2FsZVxuICAgICAgICAudGlja3MoYWN0dWFsVGFyZ2V0VGlja0NvdW50KVxuICAgICAgICAubWFwKHRpY2sgPT4gKHtcbiAgICAgICAgICB2YWx1ZTogeVNjYWxlKHRpY2spICsgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgbGFiZWw6IHBpcGVUcmFuc2Zvcm0odGljaywgZmFsc2UpLFxuICAgICAgICB9KSk7XG4gICAgICBjb25zdCBzY2FsZSA9IChpbnB1dDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHlTY2FsZShpbnB1dCkgKyBzdGFydE9mZnNldDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY2FsZSxcbiAgICAgICAgdGlja3MsXG4gICAgICB9O1xuICAgIH1cbiAgICAvL1NpbXBsZXIgcGF0aCBmb3IgZGF0YSB3L28gcHJpbWFyaWVzXG4gICAgaWYgKCFoYXNQcmltYXJ5KSB7XG4gICAgICBjb25zdCBzZWNvbmRhcnlZRG9tYWluID0gW3NlY29uZGFyeURhdGFNaW4sIHNlY29uZGFyeURhdGFNYXhdO1xuXG4gICAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcihzZWNvbmRhcnlZRG9tYWluLCBzY2FsZVJhbmdlKTtcbiAgICAgIGNvbnN0IHRpY2tzOiBHZW5lcmljVGlja1tdID0geVNjYWxlXG4gICAgICAgIC50aWNrcyhhY3R1YWxUYXJnZXRUaWNrQ291bnQpXG4gICAgICAgIC5tYXAodGljayA9PiAoe1xuICAgICAgICAgIHZhbHVlOiB5U2NhbGUodGljaykgKyBzdGFydE9mZnNldCxcbiAgICAgICAgICBsYWJlbDogcGlwZVRyYW5zZm9ybSh0aWNrLCB0cnVlKSxcbiAgICAgICAgfSkpO1xuICAgICAgY29uc3Qgc2NhbGUgPSAoaW5wdXQ6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgICAgIHJldHVybiB5U2NhbGUoaW5wdXQpICsgc3RhcnRPZmZzZXQ7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIHRpY2tzLFxuICAgICAgfTtcbiAgICB9XG4gICAgbGV0IGVmZmVjdGl2ZVNlY29uZGFyeU1heCA9IDA7XG4gICAgbGV0IGVmZmVjdGl2ZVNlY29uZGFyeU1pbiA9IDA7XG5cbiAgICAvL1RoaXMgYmxvY2sgc2V0cyB0aGUgZWZmZWN0aXZlIG1heCBmb3IgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5XG4gICAgLy9UaGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBlZmZlY3RpdmUgbWF4ZXMgZm9yIGJvdGggZGF0YSBzZXRzIGFyZSBwcm9wZXJseSBzZXQgc28gdGhhdFxuICAgIC8vIDAgd2lsbCBmYWxsIGF0IHRoZSBzYW1lIHBsYWNlIG9uIGJvdGggYW5kIGVhY2ggd2lsbCBoYXZlICdyb29tJyBmb3IgcG90ZW50aWFsIHN0YWNraW5nXG4gICAgaWYgKFxuICAgICAgKHByaW1hcnlEYXRhTWF4IDw9IDAgJiYgc2Vjb25kYXJ5RGF0YU1pbiA+PSAwKSB8fFxuICAgICAgKHByaW1hcnlEYXRhTWluID49IDAgJiYgc2Vjb25kYXJ5RGF0YU1heCA8PSAwKVxuICAgICkge1xuICAgICAgLy9JbiB0aGlzIHNjZW5hcmlvLCBvbmUgc2V0IG9mIGRhdGEgaXMgY29tcGV0ZWx5IHBvc2l0aXZlLCB3aGlsZSB0aGUgb3RoZXIgaXMgY29tcGxldGVseSBuZWdhdGl2ZVxuICAgICAgLy9UaGUgdHdvIGRhdGEgc2V0cyBjYW4gc2NhbGUgY29tcGxldGVseSBpbmRlcGVuZGVudGx5XG4gICAgICAvL1dlICdtaXJyb3InIHRoZSB2YWx1ZXMgb2YgdGhlIHR3byBkYXRhIHNldHMsIHdoaWNoJ2xsIHB1dCB0aGUgMCBheGlzIGluIHRoZSBjZW50ZXIgb2YgdGhlIGRhdGFcbiAgICAgIGlmIChwcmltYXJ5RGF0YU1heCA8PSAwKSB7XG4gICAgICAgIGVmZmVjdGl2ZVByaW1hcnlNYXggPSBNYXRoLmFicyhlZmZlY3RpdmVQcmltYXJ5TWluKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmltYXJ5RGF0YU1pbiA+PSAwKSB7XG4gICAgICAgIGVmZmVjdGl2ZVByaW1hcnlNaW4gPSAtTWF0aC5hYnMoZWZmZWN0aXZlUHJpbWFyeU1heCk7XG4gICAgICB9XG4gICAgICBpZiAoc2Vjb25kYXJ5RGF0YU1heCA8PSAwKSB7XG4gICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1pbiA9IHNlY29uZGFyeURhdGFNaW47XG4gICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1heCA9IE1hdGguYWJzKHNlY29uZGFyeURhdGFNaW4pO1xuICAgICAgfVxuICAgICAgaWYgKHNlY29uZGFyeURhdGFNaW4gPj0gMCkge1xuICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNYXggPSBzZWNvbmRhcnlEYXRhTWF4O1xuICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNaW4gPSAtc2Vjb25kYXJ5RGF0YU1heDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByaW1hcnlEYXRhTWF4ID4gMCkge1xuICAgICAgaWYgKHByaW1hcnlEYXRhTWluIDwgMCkge1xuICAgICAgICAvL1ByaW1hcnkgZGF0YSBoYXMgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlXG4gICAgICAgIGlmIChzZWNvbmRhcnlEYXRhTWF4ID4gMCkge1xuICAgICAgICAgIC8vU2Vjb25kYXJ5IGRhdGEgaGFzIHBvc2l0aXZlXG4gICAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWF4ID0gc2Vjb25kYXJ5RGF0YU1heCAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXg7XG4gICAgICAgICAgaWYgKHNlY29uZGFyeURhdGFNaW4gPCAwKSB7XG4gICAgICAgICAgICAvL1NlY29uZGFyeSBkYXRhIGhhcyBuZWdhdGl2ZVxuICAgICAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWluID1cbiAgICAgICAgICAgICAgc2Vjb25kYXJ5RGF0YU1pbiAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vU2Vjb25kYXJ5IGRhdGEgaXMgb25seSBwb3NpdGl2ZVxuICAgICAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWluID1cbiAgICAgICAgICAgICAgKHNlY29uZGFyeURhdGFNYXggLyBwcmltYXJ5RGF0YU1heCkgKlxuICAgICAgICAgICAgICBwcmltYXJ5RGF0YU1pbiAqXG4gICAgICAgICAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vU2Vjb25kYXJ5IGRhdGEgaGFzIG9ubHkgbmVnYXRpdmVcbiAgICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNaW4gPSBzZWNvbmRhcnlEYXRhTWluICogc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZztcbiAgICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNYXggPVxuICAgICAgICAgICAgKHNlY29uZGFyeURhdGFNaW4gLyBwcmltYXJ5RGF0YU1pbikgKlxuICAgICAgICAgICAgcHJpbWFyeURhdGFNYXggKlxuICAgICAgICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck1heDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9QcmltYXJ5IGRhdGEgaXMgb25seSBwb3NpdGl2ZVxuICAgICAgICAvL0R1ZSB0byBlYXJsaWVyIGNoZWNrLCB3ZSBrbm93IHRoYXQgc2Vjb25kYXJ5IGRhdGEgaXMgZWl0aGVyIGFsc28gYWxsLXBvc2l0aXZlLCBvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmVcbiAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWF4ID0gc2Vjb25kYXJ5RGF0YU1heCAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXg7XG4gICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1pbiA9IHNlY29uZGFyeURhdGFNaW4gKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnO1xuICAgICAgICBlZmZlY3RpdmVQcmltYXJ5TWluID1cbiAgICAgICAgICAocHJpbWFyeURhdGFNYXggLyBzZWNvbmRhcnlEYXRhTWF4KSAqXG4gICAgICAgICAgc2Vjb25kYXJ5RGF0YU1pbiAqXG4gICAgICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy9QcmltYXJ5IGRhdGEgaXMgb25seSBuZWdhdGl2ZVxuICAgICAgLy9EdWUgdG8gZWFybGllciBjaGVjaywgd2Uga25vdyB0aGF0IHNlY29uZGFyeSBkYXRhIGlzIGVpdGhlciBhbHNvIGFsbC1uZWdhdGl2ZSwgb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlXG4gICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNYXggPSBzZWNvbmRhcnlEYXRhTWF4ICogc2NhbGVEb21haW5NdWx0aXBsZUZvck1heDtcbiAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1pbiA9IHNlY29uZGFyeURhdGFNaW4gKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnO1xuICAgICAgZWZmZWN0aXZlUHJpbWFyeU1heCA9XG4gICAgICAgIChwcmltYXJ5RGF0YU1pbiAvIHNlY29uZGFyeURhdGFNaW4pICpcbiAgICAgICAgc2Vjb25kYXJ5RGF0YU1heCAqXG4gICAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXg7XG4gICAgfVxuICAgIGNvbnN0IHByaW1hcnlZRG9tYWluID0gW2VmZmVjdGl2ZVByaW1hcnlNaW4sIGVmZmVjdGl2ZVByaW1hcnlNYXhdO1xuXG4gICAgY29uc3QgeVNjYWxlID0gc2NhbGVMaW5lYXIocHJpbWFyeVlEb21haW4sIHNjYWxlUmFuZ2UpO1xuXG4gICAgLy9GaWd1cmluZyBvdXQgdGhlIGJlc3QgdGljayBjb3VudCB0byBmaXQgdGhlIHR3byBkYXRhIHNyb3VjZXNcbiAgICBjb25zdCB5U2NhbGVQcmltYXJ5UHJvdG8gPSBzY2FsZUxpbmVhcihwcmltYXJ5WURvbWFpbiwgc2NhbGVSYW5nZSk7XG4gICAgY29uc3QgeVNjYWxlU2Vjb25kYXJ5UHJvdG8gPSBzY2FsZUxpbmVhcihcbiAgICAgIFtlZmZlY3RpdmVTZWNvbmRhcnlNaW4sIGVmZmVjdGl2ZVNlY29uZGFyeU1heF0sXG4gICAgICBzY2FsZVJhbmdlLFxuICAgICk7XG4gICAgY29uc3QgdGlja0NvdW50ID0gTWF0aC5tYXgoXG4gICAgICBhY3R1YWxUYXJnZXRUaWNrQ291bnQsXG4gICAgICB5U2NhbGVQcmltYXJ5UHJvdG8udGlja3MoYWN0dWFsVGFyZ2V0VGlja0NvdW50KS5sZW5ndGgsXG4gICAgICB5U2NhbGVTZWNvbmRhcnlQcm90by50aWNrcyhhY3R1YWxUYXJnZXRUaWNrQ291bnQpLmxlbmd0aCxcbiAgICApO1xuICAgIGNvbnN0IHByaW1hcnlUaWNrcyA9IHlTY2FsZS50aWNrcyh0aWNrQ291bnQpLm1hcCh0aWNrID0+ICh7XG4gICAgICB2YWx1ZTogeVNjYWxlKHRpY2spICsgc3RhcnRPZmZzZXQsXG4gICAgICBsYWJlbDogcGlwZVRyYW5zZm9ybSh0aWNrLCBmYWxzZSksXG4gICAgICByYXdZOiB0aWNrLFxuICAgIH0pKTtcblxuICAgIC8vRmluZGluZyBhIGRvbWFpbiBmb3IgdGhlIHNlY29uZGFyeSBkYXRhIHN1Y2ggdGhhdCBpdCB3aWxsIHJlc3VsdCBpbiByb3VuZCB0aWNrIHZhbHVlcyB3aGVuIG1hdGNoZWQgd2l0aCB0aGUgcHJpbWFyeSB0aWNrc1xuICAgIGNvbnN0IHNlY29uZGFyeVRpY2tzUHJvdG8gPSB5U2NhbGVTZWNvbmRhcnlQcm90b1xuICAgICAgLnRpY2tzKHRpY2tDb3VudClcbiAgICAgIC5tYXAodGljayA9PiAoe1xuICAgICAgICB5OiB5U2NhbGVTZWNvbmRhcnlQcm90byh0aWNrKSxcbiAgICAgICAgcmF3WTogdGljayxcbiAgICAgICAgbGFiZWw6IHBpcGVUcmFuc2Zvcm0odGljaywgdHJ1ZSksXG4gICAgICB9KSk7XG4gICAgY29uc3QgcHJpbWFyeU1pblRpY2sgPSBNYXRoLm1pbiguLi5wcmltYXJ5VGlja3MubWFwKHRpY2sgPT4gdGljay5yYXdZKSk7XG4gICAgY29uc3QgcHJpbWFyeU1heFRpY2sgPSBNYXRoLm1heCguLi5wcmltYXJ5VGlja3MubWFwKHRpY2sgPT4gdGljay5yYXdZKSk7XG4gICAgY29uc3QgcHJpbWFyeURvbWFpbk1heFRpY2tSYXRpbyA9XG4gICAgICBwcmltYXJ5TWF4VGljayAhPT0gMCA/IGVmZmVjdGl2ZVByaW1hcnlNYXggLyBwcmltYXJ5TWF4VGljayA6IDA7XG4gICAgY29uc3QgcHJpbWFyeURvbWFpbk1pblRpY2tSYXRpbyA9XG4gICAgICBwcmltYXJ5TWluVGljayAhPT0gMCA/IGVmZmVjdGl2ZVByaW1hcnlNaW4gLyBwcmltYXJ5TWluVGljayA6IDA7XG5cbiAgICBjb25zdCBwcmltYXJ5R2FwID0gcHJpbWFyeVRpY2tzWzFdLnJhd1kgLSBwcmltYXJ5VGlja3NbMF0ucmF3WTtcbiAgICBjb25zdCB0aWNrc0JlbG93WmVybyA9IHByaW1hcnlNaW5UaWNrIC8gcHJpbWFyeUdhcDtcbiAgICBjb25zdCB0aWNrc0Fib3ZlWmVybyA9IHByaW1hcnlNYXhUaWNrIC8gcHJpbWFyeUdhcDtcblxuICAgIGNvbnN0IHNlY29uZGFyeUdhcCA9XG4gICAgICBzZWNvbmRhcnlUaWNrc1Byb3RvWzFdLnJhd1kgLSBzZWNvbmRhcnlUaWNrc1Byb3RvWzBdLnJhd1k7XG4gICAgbGV0IGNhbGNSYW5nZU11bHQgPSAxO1xuICAgIGNvbnN0IHNlY29uZGFyeURvbWFpbk1pbk11bHQgPVxuICAgICAgdGlja3NCZWxvd1plcm8gKiBzZWNvbmRhcnlHYXAgKiBwcmltYXJ5RG9tYWluTWluVGlja1JhdGlvO1xuICAgIGNvbnN0IHNlY29uZGFyeURvbWFpbk1heE11bHQgPVxuICAgICAgdGlja3NBYm92ZVplcm8gKiBzZWNvbmRhcnlHYXAgKiBwcmltYXJ5RG9tYWluTWF4VGlja1JhdGlvO1xuICAgIC8vRmlyc3QsIHdlIGVuc3VyZSB0aGUgY2FsY1JhbmdlTXVsdCBpcyBiaWcgZW5vdWdoXG4gICAgbGV0IHNpemVVcENvbXBsZXRlID0gZmFsc2U7XG4gICAgd2hpbGUgKCFzaXplVXBDb21wbGV0ZSkge1xuICAgICAgY29uc3QgY2FsY1JhbmdlVG9vU21hbGxGb3JNaW4gPVxuICAgICAgICBzZWNvbmRhcnlEb21haW5NaW5NdWx0ICogY2FsY1JhbmdlTXVsdCA+IGVmZmVjdGl2ZVNlY29uZGFyeU1pbiAmJlxuICAgICAgICBzZWNvbmRhcnlEb21haW5NaW5NdWx0ICE9PSAwO1xuICAgICAgY29uc3QgY2FsY1JhbmdlVG9vU21hbGxGb3JNYXggPVxuICAgICAgICBzZWNvbmRhcnlEb21haW5NYXhNdWx0ICogY2FsY1JhbmdlTXVsdCA8IGVmZmVjdGl2ZVNlY29uZGFyeU1heCAmJlxuICAgICAgICBzZWNvbmRhcnlEb21haW5NYXhNdWx0ICE9PSAwO1xuICAgICAgaWYgKGNhbGNSYW5nZVRvb1NtYWxsRm9yTWluIHx8IGNhbGNSYW5nZVRvb1NtYWxsRm9yTWF4KSB7XG4gICAgICAgIGNhbGNSYW5nZU11bHQgPSBjYWxjUmFuZ2VNdWx0ICogMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemVVcENvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy9UaGVuLCB3ZSBjaGVjayBpZiB3ZSBjYW4gc2NhbGUgZG93biAoZm9yIHRoaXMgb25lLCBib3RoIGNvbmRpdGlvbnMgaGF2ZSB0byBiZSB0cnVlLCBzbyBpdCB3b24ndCB1bmRvIGEgcHJldmlvdXMgc2NhbGUgdXApXG4gICAgbGV0IHNpemVEb3duQ29tcGxldGUgPSBmYWxzZTtcbiAgICB3aGlsZSAoIXNpemVEb3duQ29tcGxldGUpIHtcbiAgICAgIGNvbnN0IGNhbGNSYW5nZVRvb0JpZ0Zvck1pbiA9XG4gICAgICAgIHNlY29uZGFyeURvbWFpbk1pbk11bHQgKiBjYWxjUmFuZ2VNdWx0IDwgZWZmZWN0aXZlU2Vjb25kYXJ5TWluICogMiAmJlxuICAgICAgICBzZWNvbmRhcnlEb21haW5NaW5NdWx0ICE9PSAwO1xuICAgICAgY29uc3QgY2FsY1JhbmdlVG9vQmlnRm9yTWF4ID1cbiAgICAgICAgc2Vjb25kYXJ5RG9tYWluTWF4TXVsdCAqIGNhbGNSYW5nZU11bHQgPiBlZmZlY3RpdmVTZWNvbmRhcnlNYXggKiAyICYmXG4gICAgICAgIHNlY29uZGFyeURvbWFpbk1heE11bHQgIT09IDA7XG4gICAgICBpZiAoY2FsY1JhbmdlVG9vQmlnRm9yTWluICYmIGNhbGNSYW5nZVRvb0JpZ0Zvck1heCkge1xuICAgICAgICBjYWxjUmFuZ2VNdWx0ID0gY2FsY1JhbmdlTXVsdCAvIDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaXplRG93bkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNlY29uZGFyeURvbWFpbk1pbiA9IHNlY29uZGFyeURvbWFpbk1pbk11bHQgKiBjYWxjUmFuZ2VNdWx0O1xuICAgIGxldCBzZWNvbmRhcnlEb21haW5NYXggPSBzZWNvbmRhcnlEb21haW5NYXhNdWx0ICogY2FsY1JhbmdlTXVsdDtcbiAgICAvL0lmIHRoZSBkYXRhIGlzIGxvcHNpZGVkIGVub3VnaCwgaXQncyBwb3NzaWJsZSB0aGF0IG9uZSBvZiBwb3NpdGl2ZS9uZWdhdGl2ZSBoYXZlIHZhbHVlcywgYnV0IG5vIHRpY2tzXG4gICAgaWYgKHNlY29uZGFyeURvbWFpbk1pbiA9PT0gMCAmJiBlZmZlY3RpdmVQcmltYXJ5TWluIDwgMCkge1xuICAgICAgY29uc3QgcG9zU2VjUmF0aW8gPSBzZWNvbmRhcnlEb21haW5NYXggLyBlZmZlY3RpdmVQcmltYXJ5TWF4O1xuICAgICAgc2Vjb25kYXJ5RG9tYWluTWluID0gcG9zU2VjUmF0aW8gKiBlZmZlY3RpdmVQcmltYXJ5TWluO1xuICAgIH1cbiAgICBpZiAoc2Vjb25kYXJ5RG9tYWluTWF4ID09PSAwICYmIGVmZmVjdGl2ZVByaW1hcnlNYXggPiAwKSB7XG4gICAgICBjb25zdCBwb3NTZWNSYXRpbyA9IHNlY29uZGFyeURvbWFpbk1pbiAvIGVmZmVjdGl2ZVByaW1hcnlNaW47XG4gICAgICBzZWNvbmRhcnlEb21haW5NYXggPSBwb3NTZWNSYXRpbyAqIGVmZmVjdGl2ZVByaW1hcnlNYXg7XG4gICAgfVxuICAgIGNvbnN0IHlTY2FsZVNlY29uZGFyeSA9IHNjYWxlTGluZWFyKFxuICAgICAgW3NlY29uZGFyeURvbWFpbk1pbiwgc2Vjb25kYXJ5RG9tYWluTWF4XSxcbiAgICAgIHNjYWxlUmFuZ2UsXG4gICAgKTtcblxuICAgIGNvbnN0IHRpY2tzOiBHZW5lcmljVGlja1tdID0gcHJpbWFyeVRpY2tzLm1hcCh0aWNrID0+ICh7XG4gICAgICAuLi50aWNrLFxuICAgICAgc2Vjb25kYXJ5TGFiZWw6IHBpcGVUcmFuc2Zvcm0oXG4gICAgICAgIHlTY2FsZVNlY29uZGFyeS5pbnZlcnQoeVNjYWxlKHRpY2sucmF3WSkpLFxuICAgICAgICB0cnVlLFxuICAgICAgKSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBzY2FsZSA9IChpbnB1dDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IG51bWJlciA9PiB7XG4gICAgICBpZiAoaXNTZWNvbmRhcnkpIHtcbiAgICAgICAgcmV0dXJuIHlTY2FsZVNlY29uZGFyeShpbnB1dCkgKyBzdGFydE9mZnNldDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB5U2NhbGUoaW5wdXQpICsgc3RhcnRPZmZzZXQ7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgc2NhbGUsXG4gICAgICB0aWNrcyxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FsY0RhdGFTY2FsaW5nVmFsdWVzKGRhdGE6IFByb2Nlc3NEYXRhLCBjb25maWc6IENvbmZpZykge1xuICAgIGNvbnN0IGlzU3RhY2tlZCA9IGlzU3RhY2tlZERhdGEoY29uZmlnKTtcbiAgICBjb25zdCBwcmltYXJ5RG9tYWluVmFsdWVzID0gY2FsY1lTY2FsZURvbWFpblZhbHVlcyhkYXRhLCBpc1N0YWNrZWQsIGZhbHNlKTtcbiAgICBjb25zdCBzZWNvbmRhcnlEb21haW5WYWx1ZXMgPSBjYWxjWVNjYWxlRG9tYWluVmFsdWVzKGRhdGEsIGlzU3RhY2tlZCwgdHJ1ZSk7XG4gICAgY29uc3QgcHJpbWFyeURhdGFNYXggPSBNYXRoLm1heCguLi5wcmltYXJ5RG9tYWluVmFsdWVzLm1hcCh2YWwgPT4gdmFsLm1heCkpO1xuICAgIGNvbnN0IHNlY29uZGFyeURhdGFNYXggPSBNYXRoLm1heChcbiAgICAgIC4uLnNlY29uZGFyeURvbWFpblZhbHVlcy5tYXAodmFsID0+IHZhbC5tYXgpLFxuICAgICk7XG4gICAgY29uc3QgcHJpbWFyeURhdGFNaW4gPSBNYXRoLm1pbiguLi5wcmltYXJ5RG9tYWluVmFsdWVzLm1hcCh2YWwgPT4gdmFsLm1pbikpO1xuICAgIGNvbnN0IHNlY29uZGFyeURhdGFNaW4gPSBNYXRoLm1pbihcbiAgICAgIC4uLnNlY29uZGFyeURvbWFpblZhbHVlcy5tYXAodmFsID0+IHZhbC5taW4pLFxuICAgICk7XG4gICAgbGV0IHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXggPSAxO1xuICAgIGxldCBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnID0gMTtcblxuICAgIC8vQ2FsY3VsYXRpbmcgaG93IG11Y2ggd2UgbmVlZCB0byBtdWx0aXBsZSB0aGUgZG9tYWluIGJ5IHRvICdmaXQnIGJvdGggYXhlcycgZGF0YVxuICAgIGlmIChpc1N0YWNrZWQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJpbWFyeURvbWFpblZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvL0NoZWNrIHBvc2l0aXZlIG1heFxuICAgICAgICBjb25zdCBwcmltYXJ5VmFsID0gcHJpbWFyeURvbWFpblZhbHVlc1tpXS5tYXg7XG4gICAgICAgIGNvbnN0IHNlY29uZGFyeVZhbCA9IHNlY29uZGFyeURvbWFpblZhbHVlc1tpXS5tYXg7XG4gICAgICAgIGNvbnN0IHByaW1hcnlSYXRpbyA9XG4gICAgICAgICAgcHJpbWFyeURhdGFNYXggIT09IDAgPyBwcmltYXJ5VmFsIC8gcHJpbWFyeURhdGFNYXggOiAwO1xuICAgICAgICBjb25zdCBzZWNvbmRhcnlSYXRpbyA9XG4gICAgICAgICAgc2Vjb25kYXJ5RGF0YU1heCAhPT0gMCA/IHNlY29uZGFyeVZhbCAvIHNlY29uZGFyeURhdGFNYXggOiAwO1xuICAgICAgICBjb25zdCBtdWx0VmFsID0gcHJpbWFyeVJhdGlvICsgc2Vjb25kYXJ5UmF0aW87XG4gICAgICAgIGlmIChtdWx0VmFsID4gc2NhbGVEb21haW5NdWx0aXBsZUZvck1heCkge1xuICAgICAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXggPSBtdWx0VmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9DaGVjayBuZWdhdGl2ZSBtaW5cbiAgICAgICAgY29uc3QgcHJpbWFyeU5lZ1ZhbCA9XG4gICAgICAgICAgcHJpbWFyeURvbWFpblZhbHVlc1tpXS5taW4gPCAwID8gcHJpbWFyeURvbWFpblZhbHVlc1tpXS5taW4gOiAwO1xuICAgICAgICBjb25zdCBzZWNvbmRhcnlOZWdWYWwgPVxuICAgICAgICAgIHNlY29uZGFyeURvbWFpblZhbHVlc1tpXS5taW4gPCAwID8gc2Vjb25kYXJ5RG9tYWluVmFsdWVzW2ldLm1pbiA6IDA7XG4gICAgICAgIGNvbnN0IHByaW1hcnlOZWdSYXRpbyA9XG4gICAgICAgICAgcHJpbWFyeURhdGFNaW4gIT09IDAgPyBwcmltYXJ5TmVnVmFsIC8gcHJpbWFyeURhdGFNaW4gOiAwO1xuICAgICAgICBjb25zdCBzZWNvbmRhcnlOZWdSYXRpbyA9XG4gICAgICAgICAgc2Vjb25kYXJ5RGF0YU1pbiAhPT0gMCA/IHNlY29uZGFyeU5lZ1ZhbCAvIHNlY29uZGFyeURhdGFNaW4gOiAwO1xuICAgICAgICBjb25zdCBuZWdNdWx0VmFsID0gcHJpbWFyeU5lZ1JhdGlvICsgc2Vjb25kYXJ5TmVnUmF0aW87XG4gICAgICAgIGlmIChuZWdNdWx0VmFsID4gc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZykge1xuICAgICAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWcgPSBuZWdNdWx0VmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByaW1hcnlEYXRhTWluLFxuICAgICAgcHJpbWFyeURhdGFNYXgsXG4gICAgICBzZWNvbmRhcnlEYXRhTWluLFxuICAgICAgc2Vjb25kYXJ5RGF0YU1heCxcbiAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXgsXG4gICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjWVNjYWxlRG9tYWluVmFsdWVzKFxuICAgIGRhdGE6IFByb2Nlc3NEYXRhLFxuICAgIGlzU3RhY2tlZDogYm9vbGVhbixcbiAgICBmb3JTZWNvbmRhcnk6IGJvb2xlYW4sXG4gICk6IHsgbWF4OiBudW1iZXI7IG1pbjogbnVtYmVyIH1bXSB7XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Zsb3ctcHJvY2Vzc2VkJykge1xuICAgICAgaWYgKGZvclNlY29uZGFyeSkge1xuICAgICAgICAvL0Zsb3cgY2hhcnRzIGRvbid0IHN1cHBvcnQgc2Vjb25kYXJ5IGRhdGFcbiAgICAgICAgcmV0dXJuIFt7IG1pbjogMCwgbWF4OiAwIH1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICBtYXg6IE1hdGgubWF4KC4uLmRhdGEueC5tYXAoeCA9PiB4LnRvdGFsQ291bnQpKSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuICAgIGNvbnN0IHBvc3NpYmx5U3RhY2tlZFlzID0gZGF0YS55cy5tYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgLy9IYW5kbGUgc3RhY2tpbmdcbiAgICAgIHJldHVybiBpc1N0YWNrZWRcbiAgICAgICAgPyB5LnZhbHVlcy5tYXAoKHZhbCwgeEluZGV4KSA9PiB7XG4gICAgICAgICAgICBsZXQgcHJldlJ1bm5pbmdUb3RhbCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCB5SSA9IDA7IHlJIDwgeUluZGV4OyB5SSsrKSB7XG4gICAgICAgICAgICAgIGlmIChjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJLCB4SW5kZXgsIGZhbHNlKSAhPT0gZm9yU2Vjb25kYXJ5KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWRkVmFsID0gZGF0YS55c1t5SV0udmFsdWVzW3hJbmRleF07XG4gICAgICAgICAgICAgIC8vT25seSBzdGFjayB2YWx1ZXMgb2YgdGhlIHNhbWUgc2lnblxuICAgICAgICAgICAgICBpZiAoYWRkVmFsIDwgMCA9PT0gdmFsIDwgMCkge1xuICAgICAgICAgICAgICAgIHByZXZSdW5uaW5nVG90YWwgKz0gYWRkVmFsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsICsgcHJldlJ1bm5pbmdUb3RhbDtcbiAgICAgICAgICB9KVxuICAgICAgICA6IHkudmFsdWVzO1xuICAgIH0pO1xuICAgIGNvbnN0IHN1cHBZcyA9IGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpID8gZGF0YS5zdXBwbGVtZW50YXJ5WXMgOiBudWxsO1xuICAgIGxldCBwb3NzaWJseVN0YWNrZWRTdXBZczogbnVtYmVyW11bXSA9IFtdO1xuICAgIGlmIChzdXBwWXMpIHtcbiAgICAgIHBvc3NpYmx5U3RhY2tlZFN1cFlzID0gc3VwcFlzLm1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICAgIC8vSGFuZGxlIHN0YWNraW5nXG4gICAgICAgIHJldHVybiBpc1N0YWNrZWRcbiAgICAgICAgICA/IHkudmFsdWVzLm1hcCgodmFsLCB4SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHByZXZSdW5uaW5nVG90YWwgPSAwO1xuICAgICAgICAgICAgICBmb3IgKGxldCB5SSA9IDA7IHlJIDwgeUluZGV4OyB5SSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SSwgeEluZGV4LCB0cnVlKSAhPT0gZm9yU2Vjb25kYXJ5IHx8XG4gICAgICAgICAgICAgICAgICBzdXBwWXNbeUldLnN1cHBsZW1lbnRhbEluZGV4ICE9PSB5LnN1cHBsZW1lbnRhbEluZGV4XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYWRkVmFsID0gc3VwcFlzW3lJXS52YWx1ZXNbeEluZGV4XTtcbiAgICAgICAgICAgICAgICAvL09ubHkgc3RhY2sgdmFsdWVzIG9mIHRoZSBzYW1lIHNpZ25cbiAgICAgICAgICAgICAgICBpZiAoYWRkVmFsIDwgMCA9PT0gdmFsIDwgMCkge1xuICAgICAgICAgICAgICAgICAgcHJldlJ1bm5pbmdUb3RhbCArPSBhZGRWYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB2YWwgKyBwcmV2UnVubmluZ1RvdGFsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHkudmFsdWVzO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NhbGVSYW5nZTogeyBtYXg6IG51bWJlcjsgbWluOiBudW1iZXIgfVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG1heE5vcm1ZID0gTWF0aC5tYXgoXG4gICAgICAgIC4uLnBvc3NpYmx5U3RhY2tlZFlzLm1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCBpLCBmYWxzZSkgIT09IGZvclNlY29uZGFyeSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB5W2ldO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBtaW5Ob3JtWSA9IE1hdGgubWluKFxuICAgICAgICAuLi5wb3NzaWJseVN0YWNrZWRZcy5tYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgaSwgZmFsc2UpICE9PSBmb3JTZWNvbmRhcnkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geVtpXTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgY29uc3QgbWF4U3VwWSA9IHN1cHBZc1xuICAgICAgICA/IE1hdGgubWF4KFxuICAgICAgICAgICAgLi4ucG9zc2libHlTdGFja2VkU3VwWXMubWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCBpLCB0cnVlKSAhPT0gZm9yU2Vjb25kYXJ5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHlbaV07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApXG4gICAgICAgIDogMDtcbiAgICAgIGNvbnN0IG1pblN1cFkgPSBzdXBwWXNcbiAgICAgICAgPyBNYXRoLm1pbihcbiAgICAgICAgICAgIC4uLnBvc3NpYmx5U3RhY2tlZFN1cFlzLm1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgaSwgdHJ1ZSkgIT09IGZvclNlY29uZGFyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB5W2ldO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgICA6IDA7XG4gICAgICBjb25zdCBtYXggPVxuICAgICAgICBtYXhOb3JtWSA+IDAgJiYgbWF4Tm9ybVkgPiBtYXhTdXBZXG4gICAgICAgICAgPyBtYXhOb3JtWVxuICAgICAgICAgIDogbWF4U3VwWSA+IDBcbiAgICAgICAgICA/IG1heFN1cFlcbiAgICAgICAgICA6IDA7XG4gICAgICBjb25zdCBtaW4gPVxuICAgICAgICBtaW5Ob3JtWSA8IDAgJiYgbWluTm9ybVkgPCBtaW5TdXBZXG4gICAgICAgICAgPyBtaW5Ob3JtWVxuICAgICAgICAgIDogbWluU3VwWSA8IDBcbiAgICAgICAgICA/IG1pblN1cFlcbiAgICAgICAgICA6IDA7XG4gICAgICBzY2FsZVJhbmdlLnB1c2goeyBtYXgsIG1pbiB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNjYWxlUmFuZ2U7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVCYXJQb3NpdGlvbihcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gICAgYnVja2V0TnVtOiBudW1iZXIsXG4gICAgY2x1c3Rlck51bTogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IG9mZnNldCA9XG4gICAgICBjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCdcbiAgICAgICAgPyBjaGFydFNpemluZ1ZhbHVlcy50b3RhbExlZnRPZmZzZXRcbiAgICAgICAgOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFRvcE9mZnNldDtcbiAgICBjb25zdCBjbHVzdGVyT2Zmc2V0ID1cbiAgICAgIGNsdXN0ZXJOdW0gKlxuICAgICAgKGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgKyBjaGFydFNpemluZ1ZhbHVlcy5iYXJDbHVzdGVyR2FwKTtcbiAgICBjb25zdCBjdW11bGF0aXZlQnVja2V0R2FwID0gZ2V0VG90YWxQcmVCdWNrZXRHYXAoXG4gICAgICBkYXRhLFxuICAgICAgY29uZmlnLFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICBidWNrZXROdW0sXG4gICAgKTtcbiAgICByZXR1cm4gb2Zmc2V0ICsgY3VtdWxhdGl2ZUJ1Y2tldEdhcCArIGNsdXN0ZXJPZmZzZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVIb3Jpem9udGFsQmFyUGF0aChcbiAgICBsZWZ0U2lkZVJvdW5kOiBib29sZWFuLFxuICAgIHJpZ2h0U2lkZVJvdW5kOiBib29sZWFuLFxuICAgIHhWYWx1ZTogbnVtYmVyLFxuICAgIHlWYWx1ZTogbnVtYmVyLFxuICAgIGhvclI6IG51bWJlcixcbiAgICB2ZXJSOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgd2lkdGg6IG51bWJlcixcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAobGVmdFNpZGVSb3VuZCAmJiByaWdodFNpZGVSb3VuZCkge1xuICAgICAgLy9Cb3RoLXNpZGVzIHJvdW5kaW5nIHZhcmlhdGlvblxuICAgICAgY29uc3QgcGF0aEQgPSBgXG4gICAgICAgIE0gJHt4VmFsdWUgKyBob3JSfSwke3lWYWx1ZX1cbiAgICAgICAgaCAke3dpZHRoIC0gaG9yUiAqIDJ9XG4gICAgICAgIHEke2hvclJ9LDAgJHtob3JSfSwke3ZlclJ9XG4gICAgICAgIHYgJHtoZWlnaHQgLSB2ZXJSICogMn1cbiAgICAgICAgcTAsJHt2ZXJSfSAtJHtob3JSfSwke3ZlclJ9XG4gICAgICAgIGggJHstKHdpZHRoIC0gaG9yUiAqIDIpfVxuICAgICAgICBxLSR7aG9yUn0sMCAtJHtob3JSfSwtJHt2ZXJSfVxuICAgICAgICB2IC0ke2hlaWdodCAtIHZlclIgKiAyfVxuICAgICAgICBxMCwtJHt2ZXJSfSAke2hvclJ9LC0ke3ZlclJ9XG4gICAgICAgIFpcbiAgICAgIGA7XG4gICAgICByZXR1cm4gcGF0aEQ7XG4gICAgfVxuICAgIGlmIChsZWZ0U2lkZVJvdW5kKSB7XG4gICAgICAvL0xlZnQtc2lkZSByb3VuZGluZyB2YXJpYXRpb25cbiAgICAgIGNvbnN0IHBhdGhEID0gYFxuICAgICAgICBNICR7eFZhbHVlICsgaG9yUn0sJHt5VmFsdWV9XG4gICAgICAgIGggJHt3aWR0aCAtIGhvclJ9XG4gICAgICAgIHYgJHtoZWlnaHR9XG4gICAgICAgIGggJHstKHdpZHRoIC0gaG9yUil9XG4gICAgICAgIHEtJHtob3JSfSwwIC0ke2hvclJ9LC0ke3ZlclJ9XG4gICAgICAgIHYgLSR7aGVpZ2h0IC0gdmVyUiAqIDJ9XG4gICAgICAgIHEwLC0ke3ZlclJ9ICR7aG9yUn0sLSR7dmVyUn1cbiAgICAgICAgWlxuICAgICAgYDtcbiAgICAgIHJldHVybiBwYXRoRDtcbiAgICB9XG4gICAgaWYgKHJpZ2h0U2lkZVJvdW5kKSB7XG4gICAgICAvL1JpZ2h0LXNpZGUgcm91bmRpbmcgdmFyaWF0aW9uXG4gICAgICBjb25zdCBwYXRoRCA9IGBcbiAgICAgICAgTSAke3hWYWx1ZX0sJHt5VmFsdWV9XG4gICAgICAgIGggJHt3aWR0aCAtIGhvclJ9XG4gICAgICAgIHEke2hvclJ9LDAgJHtob3JSfSwke3ZlclJ9XG4gICAgICAgIHYgJHtoZWlnaHQgLSB2ZXJSICogMn1cbiAgICAgICAgcTAsJHt2ZXJSfSAtJHtob3JSfSwke3ZlclJ9XG4gICAgICAgIGggJHstKHdpZHRoIC0gaG9yUil9XG4gICAgICAgIFpcbiAgICAgIGA7XG4gICAgICByZXR1cm4gcGF0aEQ7XG4gICAgfVxuICAgIC8vTm8tcm91bmRpbmcgdmFyaWF0aW9uXG4gICAgY29uc3QgcGF0aEQgPSBgXG4gICAgICBNICR7eFZhbHVlfSwke3lWYWx1ZX1cbiAgICAgIGggJHt3aWR0aH1cbiAgICAgIHYgJHtoZWlnaHR9XG4gICAgICBoICR7LXdpZHRofVxuICAgICAgdiAtJHtoZWlnaHR9XG4gICAgICBaXG4gICAgYDtcbiAgICByZXR1cm4gcGF0aEQ7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCdWNrZXRBbmRDbHVzdGVyTnVtRm9ySG92ZXIoXG4gICAgcG9zOiBudW1iZXIsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGJ1Y2tldENvdW50OiBudW1iZXIsXG4gICk6IHtcbiAgICBidWNrZXROdW06IG51bWJlcjtcbiAgICBjbHVzdGVyTnVtOiBudW1iZXI7XG4gICAgY2x1c3Rlck5vcm1Db3VudDogbnVtYmVyO1xuICAgIGNsdXN0ZXJOdW1UeXBlOiAnbm9ybScgfCAnc3VwcCc7XG4gIH0gfCBudWxsIHtcbiAgICBsZXQgYnVja2V0TGVld2F5ID0gY2hhcnRTaXppbmdWYWx1ZXMuYnVja2V0R2FwIC8gNDtcbiAgICAvL2lmIHRoZXJlJ3Mgb25seSAxIGRhdGEgcG9pbnQsIHVzZSB0aGUgb3V0ZXJHYXAgYXMgbGVld2F5IGluc3RlYWRcbiAgICBpZiAoZGF0YS54Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgYnVja2V0TGVld2F5ID0gY2hhcnRTaXppbmdWYWx1ZXMub3V0ZXJHYXAgLyA0O1xuICAgIH1cbiAgICBjb25zdCBiYXJMZWV3YXkgPSBjaGFydFNpemluZ1ZhbHVlcy5iYXJDbHVzdGVyR2FwIC8gMjtcblxuICAgIGNvbnN0IG9mZnNldCA9XG4gICAgICBjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCdcbiAgICAgICAgPyBjaGFydFNpemluZ1ZhbHVlcy50b3RhbExlZnRPZmZzZXRcbiAgICAgICAgOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFRvcE9mZnNldDtcbiAgICBjb25zdCByZWxhdGl2ZVBvcyA9IHBvcyAtIG9mZnNldDtcbiAgICBsZXQgYnVja2V0TnVtID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXRDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBidWNrZXRTdGFydFBvcyA9IGdldFRvdGFsUHJlQnVja2V0R2FwKFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICBpLFxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgYnVja2V0U3RhcnRQb3MgLSBidWNrZXRMZWV3YXkgPCByZWxhdGl2ZVBvcyAmJlxuICAgICAgICBidWNrZXRTdGFydFBvcyArXG4gICAgICAgICAgZ2V0QnVja2V0U2l6ZShkYXRhLCBjb25maWcsIGNoYXJ0U2l6aW5nVmFsdWVzKSArXG4gICAgICAgICAgYnVja2V0TGVld2F5ID5cbiAgICAgICAgICByZWxhdGl2ZVBvc1xuICAgICAgKSB7XG4gICAgICAgIGJ1Y2tldE51bSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYnVja2V0TnVtID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICghaXNDbHVzdGVyZWREYXRhKGRhdGEsIGNvbmZpZywgdHJ1ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJ1Y2tldE51bSxcbiAgICAgICAgY2x1c3Rlck51bTogMCxcbiAgICAgICAgY2x1c3Rlck5vcm1Db3VudDogMSxcbiAgICAgICAgY2x1c3Rlck51bVR5cGU6ICdub3JtJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRpdmVCdWNrZXRQb3MgPVxuICAgICAgcmVsYXRpdmVQb3MgLVxuICAgICAgZ2V0VG90YWxQcmVCdWNrZXRHYXAoZGF0YSwgY29uZmlnLCBjaGFydFNpemluZ1ZhbHVlcywgYnVja2V0TnVtKTtcbiAgICBjb25zdCBjbHVzdGVyQ291bnQgPSBnZXRDbHVzdGVySW5mb0ZvckJ1Y2tldChkYXRhLCBjb25maWcpO1xuICAgIGxldCBjbHVzdGVyTnVtID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbHVzdGVyQ291bnQudG90YWw7IGkrKykge1xuICAgICAgY29uc3QgYmFyU3RhcnRQb3MgPVxuICAgICAgICAoY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSArIGNoYXJ0U2l6aW5nVmFsdWVzLmJhckNsdXN0ZXJHYXApICogaTtcbiAgICAgIGlmIChcbiAgICAgICAgYmFyU3RhcnRQb3MgLSBiYXJMZWV3YXkgPCByZWxhdGl2ZUJ1Y2tldFBvcyAmJlxuICAgICAgICBiYXJTdGFydFBvcyArIGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgKyBiYXJMZWV3YXkgPiByZWxhdGl2ZUJ1Y2tldFBvc1xuICAgICAgKSB7XG4gICAgICAgIGNsdXN0ZXJOdW0gPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNsdXN0ZXJOdW0gPT09IC0xKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbGV0IGNsdXN0ZXJOdW1UeXBlOiAnbm9ybScgfCAnc3VwcCcgPSAnbm9ybSc7XG4gICAgaWYgKGNsdXN0ZXJOdW0gPj0gY2x1c3RlckNvdW50Lm5vcm1Db3VudCkge1xuICAgICAgY2x1c3Rlck51bVR5cGUgPSAnc3VwcCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1Y2tldE51bSxcbiAgICAgIGNsdXN0ZXJOdW0sXG4gICAgICBjbHVzdGVyTm9ybUNvdW50OiBjbHVzdGVyQ291bnQubm9ybUNvdW50LFxuICAgICAgY2x1c3Rlck51bVR5cGUsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmROZWFyZXN0SW5kZXhXaXRoU2Vjb25kYXJ5KFxuICAgIHlJbmZvOiB7IHZhbHVlOiBudW1iZXI7IGlzU2Vjb25kYXJ5OiBib29sZWFuIH1bXSxcbiAgICB5UG9zOiBudW1iZXIsXG4gICAgc2NhbGU6IChpbnB1dDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyLFxuICApIHtcbiAgICBsZXQgZm91bmRJbmRleCA9IDA7XG4gICAgbGV0IGN1cnJNaW5EaXN0YW5jZSA9IE1hdGguYWJzKFxuICAgICAgc2NhbGUoeUluZm9bMF0udmFsdWUsIHlJbmZvWzBdLmlzU2Vjb25kYXJ5KSAtIHlQb3MsXG4gICAgKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHlJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBuZXdEaXN0YW5jZSA9IE1hdGguYWJzKFxuICAgICAgICBzY2FsZSh5SW5mb1tpXS52YWx1ZSwgeUluZm9baV0uaXNTZWNvbmRhcnkpIC0geVBvcyxcbiAgICAgICk7XG4gICAgICBpZiAobmV3RGlzdGFuY2UgPCBjdXJyTWluRGlzdGFuY2UpIHtcbiAgICAgICAgZm91bmRJbmRleCA9IGk7XG4gICAgICAgIGN1cnJNaW5EaXN0YW5jZSA9IG5ld0Rpc3RhbmNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm91bmRJbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJhcllJbmZvKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIHlJbmRleDogbnVtYmVyLFxuICAgIHhJbmRleDogbnVtYmVyLFxuICAgIHNjYWxlOiAoaW5wdXQ6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IG51bWJlcixcbiAgICBpc1N1cHBsZW1lbnRhcnk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogeyB5VmFsdWU6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gICAgY29uc3QgaXNTdGFja2VkID0gaXNTdGFja2VkRGF0YShjb25maWcpO1xuICAgIGNvbnN0IG1pbmltdW1TaXplID0gZ2V0TWluaW11bURhdGFFbGVtZW50U2l6ZShjb25maWcpO1xuICAgIGNvbnN0IHplcm9WYWwgPSBzY2FsZSgwLCB0cnVlKTtcbiAgICBjb25zdCB5RGF0YSA9IGdldE1haW5PclN1cHBZKGRhdGEsIHlJbmRleCwgaXNTdXBwbGVtZW50YXJ5KTtcbiAgICBjb25zdCBzY2FsZVZhbHVlID0gc2NhbGUoXG4gICAgICB5RGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCB4SW5kZXgsIGlzU3VwcGxlbWVudGFyeSksXG4gICAgKTtcbiAgICBpZiAoc2NhbGVWYWx1ZSA+IHplcm9WYWwpIHtcbiAgICAgIGxldCBwcmV2QmFySGVpZ2h0cyA9IDA7XG4gICAgICBpZiAoaXNTdGFja2VkKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeUluZGV4OyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjaGVja0RhdGEgPSBnZXRNYWluT3JTdXBwWShkYXRhLCBpLCBpc1N1cHBsZW1lbnRhcnkpO1xuICAgICAgICAgIC8vQm90aCB5RGF0YSBhbmQgY2hlY2tEYXRhIGFyZSBkZWZpbml0ZWx5IFN1cHBsZW1lbnRhcnlEYXRhWXMgaWYgaXNTdXBwbGVtZW50YXJ5IGlzIHRydWUsIGJ1dCB0aGV5IGRvbid0IHJlYWxpemUgaXRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc1N1cHBsZW1lbnRhcnkgJiZcbiAgICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4geURhdGEgJiZcbiAgICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4gY2hlY2tEYXRhXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoeURhdGEuc3VwcGxlbWVudGFsSW5kZXggIT09IGNoZWNrRGF0YS5zdXBwbGVtZW50YWxJbmRleCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY2hlY2tWYWx1ZSA9IHNjYWxlKFxuICAgICAgICAgICAgY2hlY2tEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCBpLCB4SW5kZXgsIGlzU3VwcGxlbWVudGFyeSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvL1NraXAgcG9zaXRpdmUgdmFsdWVzXG4gICAgICAgICAgaWYgKGNoZWNrVmFsdWUgPCB6ZXJvVmFsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJldkJhckhlaWdodHMgKz0gYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgICAgICAgY2hlY2tWYWx1ZSAtIHplcm9WYWwsXG4gICAgICAgICAgICBjaGVja0RhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB5VmFsdWUgPSB6ZXJvVmFsICsgcHJldkJhckhlaWdodHM7XG4gICAgICBjb25zdCBoZWlnaHQgPSBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICAgIHNjYWxlVmFsdWUgLSB6ZXJvVmFsLFxuICAgICAgICB5RGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgbWluaW11bVNpemUsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgeVZhbHVlLCBoZWlnaHQgfTtcbiAgICB9XG4gICAgbGV0IHByZXZCYXJIZWlnaHRzID0gMDtcbiAgICBpZiAoaXNTdGFja2VkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlJbmRleDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrRGF0YSA9IGdldE1haW5PclN1cHBZKGRhdGEsIGksIGlzU3VwcGxlbWVudGFyeSk7XG4gICAgICAgIC8vQm90aCB5RGF0YSBhbmQgY2hlY2tEYXRhIGFyZSBkZWZpbml0ZWx5IFN1cHBsZW1lbnRhcnlEYXRhWXMgaWYgaXNTdXBwbGVtZW50YXJ5IGlzIHRydWUsIGJ1dCB0aGV5IGRvbid0IHJlYWxpemUgaXRcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGlzU3VwcGxlbWVudGFyeSAmJlxuICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4geURhdGEgJiZcbiAgICAgICAgICAnc3VwcGxlbWVudGFsSW5kZXgnIGluIGNoZWNrRGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoeURhdGEuc3VwcGxlbWVudGFsSW5kZXggIT09IGNoZWNrRGF0YS5zdXBwbGVtZW50YWxJbmRleCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrVmFsdWUgPSBzY2FsZShcbiAgICAgICAgICBjaGVja0RhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCBpLCB4SW5kZXgsIGlzU3VwcGxlbWVudGFyeSksXG4gICAgICAgICk7XG4gICAgICAgIC8vU2tpcCBuZWdhdGl2ZSB2YWx1ZXNcbiAgICAgICAgaWYgKGNoZWNrVmFsdWUgPiB6ZXJvVmFsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcHJldkJhckhlaWdodHMgKz0gYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgICAgIHplcm9WYWwgLSBjaGVja1ZhbHVlLFxuICAgICAgICAgIGNoZWNrRGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaGVpZ2h0ID0gYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgemVyb1ZhbCAtIHNjYWxlVmFsdWUsXG4gICAgICB5RGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgIG1pbmltdW1TaXplLFxuICAgICk7XG4gICAgY29uc3QgeVZhbHVlID0gemVyb1ZhbCAtIGhlaWdodCAtIHByZXZCYXJIZWlnaHRzO1xuICAgIHJldHVybiB7IHlWYWx1ZSwgaGVpZ2h0IH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTdXBwQmFyWUluZm9WaWFZSW5kZXgoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgeUluZGV4OiBudW1iZXIsXG4gICAgc3VwcEluZGV4OiBudW1iZXIsXG4gICAgeEluZGV4OiBudW1iZXIsXG4gICAgc2NhbGU6IChpbnB1dDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyLFxuICApOiB7IHlWYWx1ZTogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHtcbiAgICBpZiAoIWhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpKSB7XG4gICAgICByZXR1cm4geyB5VmFsdWU6IDAsIGhlaWdodDogMCB9O1xuICAgIH1cbiAgICBjb25zdCBzdXBwWXMgPSBkYXRhLnN1cHBsZW1lbnRhcnlZcztcbiAgICAvLyBGaW5kIHN1cHBsZW1lbnRhcnkgYmFycyB3aXRoIHRoZSBnaXZlbiBzdXBwbGVtZW50YWxJbmRleFxuICAgIGNvbnN0IGdyb3VwU3VwcHMgPSBzdXBwWXMuZmlsdGVyKHMgPT4gcy5zdXBwbGVtZW50YWxJbmRleCA9PT0gc3VwcEluZGV4KTtcbiAgICAvLyB5SW5kZXggcmVmZXJzIHRvIHdoaWNoIFkgc2VyaWVzICh3aXRoaW4gdGhlIHN1cHBsZW1lbnRhbCBncm91cCkgd2UncmUgbG9va2luZyBhdFxuICAgIGlmICh5SW5kZXggPj0gMCAmJiB5SW5kZXggPCBncm91cFN1cHBzLmxlbmd0aCkge1xuICAgICAgLy8gRmluZCB0aGlzIHN1cHAgaW4gdGhlIG9yaWdpbmFsIGFycmF5XG4gICAgICBjb25zdCBzdXBwSW5PcmlnaW5hbEFycmF5ID0gc3VwcFlzLmluZGV4T2YoZ3JvdXBTdXBwc1t5SW5kZXhdKTtcbiAgICAgIHJldHVybiBnZXRCYXJZSW5mbyhcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBzdXBwSW5PcmlnaW5hbEFycmF5LFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHNjYWxlLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgeVZhbHVlOiAwLCBoZWlnaHQ6IDAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE1haW5PclN1cHBZKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIHlJbmRleDogbnVtYmVyLFxuICAgIGlzU3VwcGxlbWVudGFyeTogYm9vbGVhbixcbiAgKTogRGF0YVkgfCBTdXBwbGVtZW50YXJ5RGF0YVkge1xuICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSAmJiBpc1N1cHBsZW1lbnRhcnkpIHtcbiAgICAgIHJldHVybiBkYXRhLnN1cHBsZW1lbnRhcnlZc1t5SW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YS55c1t5SW5kZXhdO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QmFyWEluZm8oXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgeUluZGV4OiBudW1iZXIsXG4gICAgeEluZGV4OiBudW1iZXIsXG4gICAgc2NhbGU6IChpbnB1dDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyLFxuICAgIGlzU3VwcGxlbWVudGFyeTogYm9vbGVhbiA9IGZhbHNlLFxuICApOiB7IHhWYWx1ZTogbnVtYmVyOyB3aWR0aDogbnVtYmVyIH0ge1xuICAgIGNvbnN0IGlzU3RhY2tlZCA9IGlzU3RhY2tlZERhdGEoY29uZmlnKTtcbiAgICBjb25zdCBtaW5pbXVtU2l6ZSA9IGdldE1pbmltdW1EYXRhRWxlbWVudFNpemUoY29uZmlnKTtcbiAgICBjb25zdCB6ZXJvVmFsID0gc2NhbGUoMCwgdHJ1ZSk7XG4gICAgY29uc3QgeURhdGEgPSBnZXRNYWluT3JTdXBwWShkYXRhLCB5SW5kZXgsIGlzU3VwcGxlbWVudGFyeSk7XG4gICAgY29uc3Qgc2NhbGVWYWx1ZSA9IHNjYWxlKFxuICAgICAgeURhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgeEluZGV4LCBpc1N1cHBsZW1lbnRhcnkpLFxuICAgICk7XG4gICAgaWYgKHNjYWxlVmFsdWUgPCB6ZXJvVmFsKSB7XG4gICAgICBsZXQgcHJldkJhcldpZHRocyA9IDA7XG4gICAgICBpZiAoaXNTdGFja2VkKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeUluZGV4OyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjaGVja0RhdGEgPSBnZXRNYWluT3JTdXBwWShkYXRhLCBpLCBpc1N1cHBsZW1lbnRhcnkpO1xuICAgICAgICAgIC8vQm90aCB5RGF0YSBhbmQgY2hlY2tEYXRhIGFyZSBkZWZpbml0ZWx5IFN1cHBsZW1lbnRhcnlEYXRhWXMgaWYgaXNTdXBwbGVtZW50YXJ5IGlzIHRydWUsIGJ1dCB0aGV5IGRvbid0IHJlYWxpemUgaXRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc1N1cHBsZW1lbnRhcnkgJiZcbiAgICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4geURhdGEgJiZcbiAgICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4gY2hlY2tEYXRhXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoeURhdGEuc3VwcGxlbWVudGFsSW5kZXggIT09IGNoZWNrRGF0YS5zdXBwbGVtZW50YWxJbmRleCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY2hlY2tWYWwgPSBzY2FsZShcbiAgICAgICAgICAgIGNoZWNrRGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgaSwgeEluZGV4LCBpc1N1cHBsZW1lbnRhcnkpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy9Ta2lwIHBvc2l0aXZlIHZhbHVlc1xuICAgICAgICAgIGlmIChjaGVja1ZhbCA+IHplcm9WYWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmV2QmFyV2lkdGhzICs9IGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgICAgICAgIHplcm9WYWwgLSBjaGVja1ZhbCxcbiAgICAgICAgICAgIGNoZWNrRGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHdpZHRoID0gYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgICB6ZXJvVmFsIC0gc2NhbGVWYWx1ZSxcbiAgICAgICAgeURhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHhWYWx1ZSA9IHplcm9WYWwgLSB3aWR0aCAtIHByZXZCYXJXaWR0aHM7XG4gICAgICByZXR1cm4geyB4VmFsdWUsIHdpZHRoIH07XG4gICAgfVxuICAgIGxldCBwcmV2QmFyV2lkdGhzID0gMDtcbiAgICBpZiAoaXNTdGFja2VkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlJbmRleDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrRGF0YSA9IGdldE1haW5PclN1cHBZKGRhdGEsIGksIGlzU3VwcGxlbWVudGFyeSk7XG4gICAgICAgIC8vQm90aCB5RGF0YSBhbmQgY2hlY2tEYXRhIGFyZSBkZWZpbml0ZWx5IFN1cHBsZW1lbnRhcnlEYXRhWXMgaWYgaXNTdXBwbGVtZW50YXJ5IGlzIHRydWUsIGJ1dCB0aGV5IGRvbid0IHJlYWxpemUgaXRcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGlzU3VwcGxlbWVudGFyeSAmJlxuICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4geURhdGEgJiZcbiAgICAgICAgICAnc3VwcGxlbWVudGFsSW5kZXgnIGluIGNoZWNrRGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoeURhdGEuc3VwcGxlbWVudGFsSW5kZXggIT09IGNoZWNrRGF0YS5zdXBwbGVtZW50YWxJbmRleCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrVmFsID0gc2NhbGUoXG4gICAgICAgICAgY2hlY2tEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgaSwgeEluZGV4LCBpc1N1cHBsZW1lbnRhcnkpLFxuICAgICAgICApO1xuICAgICAgICAvL1NraXAgbmVnYXRpdmUgdmFsdWVzXG4gICAgICAgIGlmIChjaGVja1ZhbCA8IHplcm9WYWwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2QmFyV2lkdGhzICs9IGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgICAgICBjaGVja1ZhbCAtIHplcm9WYWwsXG4gICAgICAgICAgY2hlY2tEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB4VmFsdWUgPSBwcmV2QmFyV2lkdGhzICsgemVyb1ZhbDtcbiAgICBjb25zdCB3aWR0aCA9IGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgIHNjYWxlVmFsdWUgLSB6ZXJvVmFsLFxuICAgICAgeURhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICBtaW5pbXVtU2l6ZSxcbiAgICApO1xuICAgIHJldHVybiB7IHhWYWx1ZSwgd2lkdGggfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrSWZTZWNvbmRhcnkoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgeUluZGV4OiBudW1iZXIsXG4gICAgeEluZGV4OiBudW1iZXIsXG4gICAgaXNTdXBwbGVtZW50YXJ5OiBib29sZWFuID0gZmFsc2UsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChkYXRhLnR5cGUgPT09ICdsYWJlbGVkJykge1xuICAgICAgaWYgKGRhdGEueFt4SW5kZXhdLmlzU2Vjb25kYXJ5ID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2V0TWFpbk9yU3VwcFkoZGF0YSwgeUluZGV4LCBpc1N1cHBsZW1lbnRhcnkpLmlzU2Vjb25kYXJ5ID09PSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gd2FyblVuc3VwcG9ydGVkUGF0dGVybnMoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgc3VwcG9ydGVkUGF0dGVybnM6IFBhdHRlcm5bXSxcbiAgICBjaGFydFR5cGU6IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgYWxsWXM6IERhdGFZW10gPSBbXG4gICAgICAuLi5kYXRhLnlzLFxuICAgICAgLi4uKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpID8gZGF0YS5zdXBwbGVtZW50YXJ5WXMgOiBbXSksXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IHkgb2YgYWxsWXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgeS5wYXR0ZXJuICYmXG4gICAgICAgIHkucGF0dGVybiAhPT0gJ3NvbGlkJyAmJlxuICAgICAgICAhc3VwcG9ydGVkUGF0dGVybnMuaW5jbHVkZXMoeS5wYXR0ZXJuKVxuICAgICAgKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgSGVhZHMgdXAhIFRoZSAnJHt5LnBhdHRlcm59JyBwYXR0ZXJuIGlzbid0IHN1cHBvcnRlZCBmb3IgJHtjaGFydFR5cGV9IGNoYXJ0cy4gRmFsbGluZyBiYWNrIHRvIHNvbGlkLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gd2FybkZsb3dEYXRhKFxuICAgIGRhdGE6IElucHV0RGF0YSxcbiAgICBjaGFydFR5cGU6IHN0cmluZyxcbiAgKTogZGF0YSBpcyBOb25GbG93RGF0YSB7XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Zsb3cnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgSGVhZHMgdXAhIFRoZSAnZmxvdycgZGF0YSB0eXBlIGlzbid0IHN1cHBvcnRlZCBmb3IgJHtjaGFydFR5cGV9IGNoYXJ0cy5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBoaWRlIHN0cmlwcyBvdXQgaGlkZGVuIHkgdmFsdWVzIHdoaWxlIHJldGFpbmluZyB0aGUgb3JpZ2luYWwgaW5kaWNlc1xuICAvLyBmb3IgdGhlIHJlbWFpbmluZyB2aXNpYmxlIHZhbHVlc1xuICBmdW5jdGlvbiBoaWRlKGRhdGE6IE5vbkZsb3dEYXRhKToge1xuICAgIGRhdGE6IE5vbkZsb3dEYXRhO1xuICAgIHZpc2libGVJbmRpY2VzOiBudW1iZXJbXTtcbiAgICB2aXNpYmxlU3VwcEluZGljZXM6IG51bWJlcltdO1xuICB9IHtcbiAgICBjb25zdCB2aXNpYmxlSW5kaWNlcyA9IGRhdGEueXNcbiAgICAgIC5tYXAoKHksIGkpID0+ICh7IHksIGkgfSkpXG4gICAgICAuZmlsdGVyKCh7IHkgfSkgPT4gIXkuaGlkZGVuKVxuICAgICAgLm1hcCgoeyBpIH0pID0+IGkpO1xuICAgIGNvbnN0IHZpc2libGVTdXBwSW5kaWNlcyA9IGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpXG4gICAgICA/IGRhdGEuc3VwcGxlbWVudGFyeVlzXG4gICAgICAgICAgLm1hcCgoeSwgaSkgPT4gKHsgeSwgaSB9KSlcbiAgICAgICAgICAuZmlsdGVyKCh7IHkgfSkgPT4gIXkuaGlkZGVuKVxuICAgICAgICAgIC5tYXAoKHsgaSB9KSA9PiBpKVxuICAgICAgOiBbXTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YToge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICB5czogdmlzaWJsZUluZGljZXMubWFwKGkgPT4gZGF0YS55c1tpXSksXG4gICAgICAgIHN1cHBsZW1lbnRhcnlZczogdmlzaWJsZVN1cHBJbmRpY2VzLm1hcChpID0+IGRhdGEuc3VwcGxlbWVudGFyeVlzIVtpXSksXG4gICAgICB9LFxuICAgICAgdmlzaWJsZUluZGljZXMsXG4gICAgICB2aXNpYmxlU3VwcEluZGljZXMsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdhdGVyZmFsbFRyYW5zZm9ybShcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBpc1dhdGVyZmFsbDogYm9vbGVhbixcbiAgKTogeyBkYXRhOiBMYWJlbGVkRGF0YTsgbWFwOiBNYXA8RGF0YVksIERhdGFZPiB9IHtcbiAgICBjb25zdCB3YXRlcmZhbGxNYXAgPSBuZXcgTWFwPERhdGFZLCBEYXRhWT4oKTtcbiAgICBpZiAoZGF0YS50eXBlID09PSAndGltZXNlcmllcycgfHwgIWlzV2F0ZXJmYWxsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdHlwZTogJ2xhYmVsZWQnLFxuICAgICAgICAgIHg6IFtdLFxuICAgICAgICAgIHlzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgICAgbWFwOiB3YXRlcmZhbGxNYXAsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBuZXdEYXRhOiBMYWJlbGVkRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICB4OiBbLi4uZGF0YS54LCB7IGxhYmVsOiAnVG90YWwnIH1dLFxuICAgICAgeXM6IFtcbiAgICAgICAgLi4uZGF0YS55cy5tYXAoeSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3WTogRGF0YVkgPSB7XG4gICAgICAgICAgICAuLi55LFxuICAgICAgICAgICAgdmFsdWVzOiBbLi4ueS52YWx1ZXMsIHkudmFsdWVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApXSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHdhdGVyZmFsbE1hcC5zZXQobmV3WSwgeSk7XG4gICAgICAgICAgcmV0dXJuIG5ld1k7XG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBuZXdEYXRhLFxuICAgICAgbWFwOiB3YXRlcmZhbGxNYXAsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsb3dzVHJhbnNmb3JtKFxuICAgIGNvbmZpZzogRmxvd0NvbmZpZyxcbiAgICBkYXRhOiBGbG93RGF0YSxcbiAgKTogUHJvY2Vzc2VkRmxvd0RhdGEge1xuICAgIGNvbnN0IHJldHVybkJ1Y2tldHM6IEZsb3dCdWNrZXRbXSA9IFtdO1xuICAgIGNvbnN0IG1heFBhdGhMZW5ndGggPSBNYXRoLm1heCguLi5kYXRhLnlzLm1hcCh5ID0+IHkuc3RlcHMubGVuZ3RoKSk7XG4gICAgaWYgKG1heFBhdGhMZW5ndGggPiAwICYmIG1heFBhdGhMZW5ndGggPCBJbmZpbml0eSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhQYXRoTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZmxvd0J1Y2tldDogRmxvd0J1Y2tldCA9IHtcbiAgICAgICAgICB0b3RhbENvdW50OiAwLFxuICAgICAgICAgIHN1YkJ1Y2tldHM6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IHkgb2YgZGF0YS55cykge1xuICAgICAgICAgIGlmICh5LnZhbHVlcy5sZW5ndGggPiBpICYmIHkuc3RlcHMubGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgY29uc3Qgc3ViQnVja2V0SWQgPSB5LnN0ZXBzW2ldO1xuICAgICAgICAgICAgY29uc3QgZm91bmRTdWJCdWNrZXQgPSBmbG93QnVja2V0LnN1YkJ1Y2tldHMuZmluZChcbiAgICAgICAgICAgICAgc3ViQnVja2V0ID0+IHN1YkJ1Y2tldC5pZCA9PT0gc3ViQnVja2V0SWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IHN1YkJ1Y2tldDogRmxvd1N1YkJ1Y2tldDtcbiAgICAgICAgICAgIGlmIChmb3VuZFN1YkJ1Y2tldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHN1YkJ1Y2tldCA9IGZvdW5kU3ViQnVja2V0O1xuICAgICAgICAgICAgICBzdWJCdWNrZXQuY291bnQgKz0geS52YWx1ZXNbaV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdWJCdWNrZXQgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHN1YkJ1Y2tldElkLFxuICAgICAgICAgICAgICAgIGNvdW50OiB5LnZhbHVlc1tpXSxcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uczogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGZsb3dCdWNrZXQuc3ViQnVja2V0cy5wdXNoKHN1YkJ1Y2tldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbG93QnVja2V0LnRvdGFsQ291bnQgKz0geS52YWx1ZXNbaV07XG5cbiAgICAgICAgICAgIC8vRmlsbCBpbiBiYWNrd2FyZHMgY29ubmVjdGlvbnNcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBmb3VuZENvbm5lY3Rpb24gPSBzdWJCdWNrZXQuY29ubmVjdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uID0+XG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnN0YXJ0ID09PSB5LnN0ZXBzW2kgLSAxXSAmJlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5lbmQgPT09IHN1YkJ1Y2tldElkICYmXG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmRpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGZvdW5kQ29ubmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZm91bmRDb25uZWN0aW9uLmNvdW50ICs9IHkudmFsdWVzW2ldO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Nvbm5lY3Rpb246IEZsb3dDb25uZWN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgICAgICAgc3RhcnQ6IHkuc3RlcHNbaSAtIDFdLFxuICAgICAgICAgICAgICAgICAgZW5kOiBzdWJCdWNrZXRJZCxcbiAgICAgICAgICAgICAgICAgIGNvdW50OiB5LnZhbHVlc1tpXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHN1YkJ1Y2tldC5jb25uZWN0aW9ucy5wdXNoKG5ld0Nvbm5lY3Rpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vRmlsbCBpbiBmb3J3YXJkcyBjb25uZWN0aW9uc1xuICAgICAgICAgICAgaWYgKGkgPCB5LnN0ZXBzLmxlbmd0aCAtIDEgJiYgaSA8IHkudmFsdWVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgZm91bmRDb25uZWN0aW9uID0gc3ViQnVja2V0LmNvbm5lY3Rpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zdGFydCA9PT0gc3ViQnVja2V0SWQgJiZcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uZW5kID09PSB5LnN0ZXBzW2kgKyAxXSAmJlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5kaXJlY3Rpb24gPT09ICdmb3J3YXJkJyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGZvdW5kQ29ubmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZm91bmRDb25uZWN0aW9uLmNvdW50ICs9IHkudmFsdWVzW2kgKyAxXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb25uZWN0aW9uOiBGbG93Q29ubmVjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN1YkJ1Y2tldElkLFxuICAgICAgICAgICAgICAgICAgZW5kOiB5LnN0ZXBzW2kgKyAxXSxcbiAgICAgICAgICAgICAgICAgIGNvdW50OiB5LnZhbHVlc1tpICsgMV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBzdWJCdWNrZXQuY29ubmVjdGlvbnMucHVzaChuZXdDb25uZWN0aW9uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm5CdWNrZXRzLnB1c2goZmxvd0J1Y2tldCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViQnVja2V0T3JkZXJpbmdNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlnLmZsb3dDb25maWcuc3ViQnVja2V0c0NvbmZpZy5sZW5ndGg7IGkrKykge1xuICAgICAgc3ViQnVja2V0T3JkZXJpbmdNYXAuc2V0KFxuICAgICAgICBjb25maWcuZmxvd0NvbmZpZy5zdWJCdWNrZXRzQ29uZmlnW2ldLmJ1Y2tldElkLFxuICAgICAgICBpLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgbWFwR2V0ID0gKGlkOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xuICAgICAgY29uc3QgZm91bmRSZXN1bHQgPSBzdWJCdWNrZXRPcmRlcmluZ01hcC5nZXQoaWQpO1xuICAgICAgaWYgKGZvdW5kUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kUmVzdWx0O1xuICAgICAgfVxuICAgICAgLy9JZiBzb21ldGhpbmcgaXNuJ3QgZGVmaW5lZCBpbiB0aGUgY29uZmlnLCBwdXQgaXQgYXQgdGhlIGVuZFxuICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH07XG5cbiAgICAvL0Vuc3VyZSB0aGUgZGF0YSBpcyBzb3J0ZWQgdGhlIHNhbWUgdGhlIHdheSB0aGUgY29uZmlnIGlzLCBhbmQgZHJvcCBlbXB0eVxuICAgIC8vYmFycy9jb25uZWN0aW9ucyBzbyB0aGV5J3JlIG5laXRoZXIgZGlzcGxheWVkIG5vciBmYWN0b3JlZCBpbnRvIHNpemluZ1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZmxvdy1wcm9jZXNzZWQnLFxuICAgICAgeDogcmV0dXJuQnVja2V0cy5tYXAoYnVja2V0ID0+ICh7XG4gICAgICAgIC4uLmJ1Y2tldCxcbiAgICAgICAgc3ViQnVja2V0czogYnVja2V0LnN1YkJ1Y2tldHNcbiAgICAgICAgICAuZmlsdGVyKHN1YkJ1Y2tldCA9PiBzdWJCdWNrZXQuY291bnQgIT09IDApXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IG1hcEdldChhLmlkKSAtIG1hcEdldChiLmlkKSlcbiAgICAgICAgICAubWFwKHN1YkJ1Y2tldCA9PiAoe1xuICAgICAgICAgICAgLi4uc3ViQnVja2V0LFxuICAgICAgICAgICAgY29ubmVjdGlvbnM6IHN1YkJ1Y2tldC5jb25uZWN0aW9uc1xuICAgICAgICAgICAgICAuZmlsdGVyKGNvbm5lY3Rpb24gPT4gY29ubmVjdGlvbi5jb3VudCAhPT0gMClcbiAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFNvcnQgPSBtYXBHZXQoYS5zdGFydCkgLSBtYXBHZXQoYi5zdGFydCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0U29ydCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0U29ydDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcEdldChhLmVuZCkgLSBtYXBHZXQoYi5lbmQpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICB9KSksXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIHR5cGUgVmFsdWVUeXBlID0gJ2NvdW50JyB8ICdjdXJyZW5jeScgfCAncGVyY2VudGFnZScgfCAnZGF5cyc7XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFBpcGVzKHZhbHVlVHlwZTogVmFsdWVUeXBlKSB7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgJ2NvdW50Jzoge1xuICAgICAgICByZXR1cm4geyBwaXBlOiBuZXcgU21hbGxOdW1iZXJQaXBlKCksIGZ1bGxQaXBlOiBuZXcgTnVtYmVyUGlwZSgpIH07XG4gICAgICB9XG4gICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGlwZTogbmV3IFNtYWxsQ3VycmVuY3lQaXBlKCksXG4gICAgICAgICAgZnVsbFBpcGU6IG5ldyBDdXJyZW5jeVBpcGUoJ2VuLXVzJyksXG4gICAgICAgIH07XG4gICAgICBjYXNlICdwZXJjZW50YWdlJzoge1xuICAgICAgICBjb25zdCBwaXBlID0gbmV3IFBlcmNlbnRhZ2VQaXBlKCk7XG4gICAgICAgIHJldHVybiB7IHBpcGUsIGZ1bGxQaXBlOiBwaXBlIH07XG4gICAgICB9XG4gICAgICBjYXNlICdkYXlzJzoge1xuICAgICAgICBjb25zdCBwaXBlID0gbmV3IERheXNQaXBlKCk7XG4gICAgICAgIHJldHVybiB7IHBpcGUsIGZ1bGxQaXBlOiBwaXBlIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW50ZXJ2YWxzID0gWyd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgSW50ZXJ2YWwgPSAodHlwZW9mIGludGVydmFscylbbnVtYmVyXTtcblxuICBleHBvcnQgZnVuY3Rpb24gZm9ybWF0ZWREYXRlKGRhdGVGb3JtYXQ6IEludGVydmFsLCBkYXRlOiBEYXRlKSB7XG4gICAgaWYgKGRhdGVGb3JtYXQgPT09ICdxdWFydGVyJykge1xuICAgICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICAgIGNvbnN0IHllYXIgPSB1dGNGb3JtYXQoZ2V0VGltZUludGVydmFsRm9ybWF0KCd5ZWFyJykpKGRhdGUpO1xuICAgICAgcmV0dXJuIGBRJHtxdWFydGVyfSAke3llYXJ9YDtcbiAgICB9XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0VGltZUludGVydmFsRm9ybWF0KGRhdGVGb3JtYXQpO1xuICAgIHJldHVybiB1dGNGb3JtYXQoZm9ybWF0KShkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRpbWVJbnRlcnZhbEZvcm1hdChpbnRlcnZhbDogSW50ZXJ2YWwpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoaW50ZXJ2YWwpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgcmV0dXJuICclbS8lZC8lWSc7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgcmV0dXJuICclYiAlWSc7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuICclWSc7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRDaGFydERhdGFUb0RvbnV0RGF0YShcbiAgICBjaGFydERhdGE6IE5vbkZsb3dEYXRhLFxuICApOiBEb251dERhdGFbXSB7XG4gICAgaWYgKGNoYXJ0RGF0YS55cy5maW5kKHkgPT4geS52YWx1ZXMubGVuZ3RoID4gMSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIFBpZSBjaGFydHMgZG9uJ3Qgc3VwcG9ydCBtdWx0aXBsZSB2YWx1ZXMgcGVyIHNlcmllc1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkb251dERhdGEgPSBjaGFydERhdGEueXMubWFwKHkgPT4gKHtcbiAgICAgIGxhYmVsOiB5LmxhYmVsLFxuICAgICAgaGlkZGVuOiB5LmhpZGRlbixcbiAgICAgIHZhbHVlOiB5LnZhbHVlcy5sZW5ndGggPj0gMSA/IHkudmFsdWVzWzBdIDogMCxcbiAgICAgIGlzU2Vjb25kYXJ5OiB5LmlzU2Vjb25kYXJ5LFxuICAgIH0pKTtcbiAgICByZXR1cm4gZG9udXREYXRhO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJjVG9Qb2ludChhbmdsZTogbnVtYmVyLCByYWRpdXM6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICB4OiByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyAyKSxcbiAgICAgIHk6IHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlIC0gTWF0aC5QSSAvIDIpLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwb2ludFRvQXJjKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgY29uc3QgcmFkaXVzID0gTWF0aC5oeXBvdCh4LCB5KTtcbiAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKHksIHgpICsgTWF0aC5QSSAvIDI7XG4gICAgLy9Ob3JtYWxpemUgdG8gYmUgd2l0aGluIHJhbmdlIFswLCAyz4BdXG4gICAgYW5nbGUgPSAoYW5nbGUgKyAyICogTWF0aC5QSSkgJSAoMiAqIE1hdGguUEkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFuZ2xlLFxuICAgICAgcmFkaXVzLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRGdWxsQ2hhcnRTY2FsZVZhbHVlcyhcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICAgIHBpcGVUcmFuc2Zvcm06ICgodmFsdWU6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4pID0+IHN0cmluZykgfCBudWxsLFxuICAgIGRhdGVGb3JtYXQ6ICgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKSB8IG51bGwsXG4gICk6IEZ1bGxDaGFydFNjYWxlVmFsdWVzIHwgbnVsbCB7XG4gICAgY29uc3QgY2hhcnREYXRhRGlyZWN0aW9uID0gZ2V0Q2hhcnREYXRhRGlyZWN0aW9uKGNvbmZpZyk7XG4gICAgY29uc3QgZGVmYXVsdFNjYWxpbmdDb25maWcgPSBnZXREZWZhdWx0U2NhbGluZ0NvbmZpZ0J5Q2hhcnRUeXBlKFxuICAgICAgY29uZmlnLnR5cGUsXG4gICAgICBjb25maWcuc2Vjb25kYXJ5VmFsdWVUeXBlICE9PSB1bmRlZmluZWQsXG4gICAgKTtcbiAgICBjb25zdCBzY2FsaW5nQ29uZmlnID0gY29tYmluZVNjYWxpbmdJbmZvKGNvbmZpZywgZGVmYXVsdFNjYWxpbmdDb25maWcpO1xuICAgIGNvbnN0IG5vbkRhdGFBeGlzVmFsdWVzID0gY2FsY3VsYXRlTm9uRGF0YUF4aXNWYWx1ZXMoXG4gICAgICBjb25maWcsXG4gICAgICBzY2FsaW5nQ29uZmlnLFxuICAgICAgY29uZmlnLnNjYWxpbmdDb25maWc/LmVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2NhbGluZ0NvbmZpZy5lbGVtZW50U2NhbGVzLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICBjb25zdCBkYXRhQXhpc1ZhbHVlcyA9IGNhbGN1bGF0ZURhdGFBeGlzVmFsdWVzKFxuICAgICAgY29uZmlnLFxuICAgICAgc2NhbGluZ0NvbmZpZyxcbiAgICAgIGNvbmZpZy5zY2FsaW5nQ29uZmlnPy5lbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNjYWxpbmdDb25maWcuZWxlbWVudFNjYWxlcyxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBkYXRhLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGRhdGVGb3JtYXQsXG4gICAgKTtcbiAgICBpZiAoXG4gICAgICBub25EYXRhQXhpc1ZhbHVlcy5zaXppbmdFcnJvciA9PT0gdHJ1ZSB8fFxuICAgICAgZGF0YUF4aXNWYWx1ZXMuc2l6aW5nRXJyb3IgPT09IHRydWVcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBkYXRhTGFiZWxTdGFydFBhZGRpbmcgPVxuICAgICAgZ2V0RGF0YUxhYmVsU2l6aW5nQ291bnQoZGF0YSwgY29uZmlnKS5zdGFydCAqXG4gICAgICAoZGF0YUF4aXNWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZyArIGRhdGFBeGlzVmFsdWVzLmRhdGFMYWJlbFRleHRTaXplKTtcbiAgICBjb25zdCBkYXRhTGFiZWxFbmRQYWRkaW5nID1cbiAgICAgIGdldERhdGFMYWJlbFNpemluZ0NvdW50KGRhdGEsIGNvbmZpZykuZW5kICpcbiAgICAgIChkYXRhQXhpc1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nICsgZGF0YUF4aXNWYWx1ZXMuZGF0YUxhYmVsVGV4dFNpemUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5vbkRhdGFBeGlzVmFsdWVzLFxuICAgICAgLi4uZGF0YUF4aXNWYWx1ZXMsXG4gICAgICBsZWZ0UGFkZGluZzpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IGRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZ1xuICAgICAgICAgIDogbm9uRGF0YUF4aXNWYWx1ZXMuc3RhcnRQYWRkaW5nLFxuICAgICAgcmlnaHRQYWRkaW5nOlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gZGF0YUF4aXNWYWx1ZXMuZW5kUGFkZGluZ1xuICAgICAgICAgIDogbm9uRGF0YUF4aXNWYWx1ZXMuZW5kUGFkZGluZyxcbiAgICAgIHRvcFBhZGRpbmc6XG4gICAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgPyBub25EYXRhQXhpc1ZhbHVlcy5zdGFydFBhZGRpbmdcbiAgICAgICAgICA6IGRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZyxcbiAgICAgIGJvdHRvbVBhZGRpbmc6XG4gICAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgPyBub25EYXRhQXhpc1ZhbHVlcy5lbmRQYWRkaW5nXG4gICAgICAgICAgOiBkYXRhQXhpc1ZhbHVlcy5lbmRQYWRkaW5nLFxuICAgICAgdG90YWxMZWZ0T2Zmc2V0OlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gZGF0YUF4aXNWYWx1ZXMuc3RhcnRQYWRkaW5nICtcbiAgICAgICAgICAgIGRhdGFBeGlzVmFsdWVzLmxlZnRCdWNrZXRMYWJlbCArXG4gICAgICAgICAgICBkYXRhTGFiZWxTdGFydFBhZGRpbmdcbiAgICAgICAgICA6IG5vbkRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZyArIG5vbkRhdGFBeGlzVmFsdWVzLm91dGVyR2FwLFxuICAgICAgdG90YWxSaWdodE9mZnNldDpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IGRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZyArIGRhdGFMYWJlbEVuZFBhZGRpbmdcbiAgICAgICAgICA6IG5vbkRhdGFBeGlzVmFsdWVzLmVuZFBhZGRpbmcgKyBub25EYXRhQXhpc1ZhbHVlcy5vdXRlckdhcCxcbiAgICAgIHRvdGFsVG9wT2Zmc2V0OlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gbm9uRGF0YUF4aXNWYWx1ZXMuc3RhcnRQYWRkaW5nICsgbm9uRGF0YUF4aXNWYWx1ZXMub3V0ZXJHYXBcbiAgICAgICAgICA6IGRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZyArIGRhdGFMYWJlbFN0YXJ0UGFkZGluZyxcbiAgICAgIHRvdGFsQm90dG9tT2Zmc2V0OlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gbm9uRGF0YUF4aXNWYWx1ZXMuZW5kUGFkZGluZyArIG5vbkRhdGFBeGlzVmFsdWVzLm91dGVyR2FwXG4gICAgICAgICAgOiBkYXRhQXhpc1ZhbHVlcy5lbmRQYWRkaW5nICsgZGF0YUxhYmVsRW5kUGFkZGluZyxcbiAgICAgIHRhcmdldFRpY2tDb3VudDogc2NhbGluZ0NvbmZpZy50YXJnZXRUaWNrQ291bnQsXG4gICAgICBzaXplRm9yRGF0YTogZGF0YUF4aXNWYWx1ZXMuc2l6ZUZvckRhdGEsXG4gICAgICB0b3RhbFdpZHRoOlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gZGF0YUF4aXNWYWx1ZXMudG90YWxTaXplXG4gICAgICAgICAgOiBub25EYXRhQXhpc1ZhbHVlcy50b3RhbFNpemUsXG4gICAgICB0b3RhbEhlaWdodDpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IG5vbkRhdGFBeGlzVmFsdWVzLnRvdGFsU2l6ZVxuICAgICAgICAgIDogZGF0YUF4aXNWYWx1ZXMudG90YWxTaXplLFxuICAgICAgZGF0YUxhYmVsVGV4dFNpemU6IGNvbmZpZy5zaG93RGF0YUxhYmVsc1xuICAgICAgICA/IGRhdGFBeGlzVmFsdWVzLmRhdGFMYWJlbFRleHRTaXplXG4gICAgICAgIDogMCxcbiAgICAgIGhvcml6b250YWxBeGlzTGFiZWxUZXh0U2l6ZTpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAndmVydGljYWwnXG4gICAgICAgICAgPyBkYXRhQXhpc1ZhbHVlcy5idWNrZXRMYWJlbFRleHRTaXplXG4gICAgICAgICAgOiBkYXRhQXhpc1ZhbHVlcy5kYXRhTGFiZWxUZXh0U2l6ZSwgLy9UaWNrcyBhbmQgZGF0YSBsYWJlbHMgdXNlIHRoZSBzYW1lIGZvcm1hdHRpbmcgb24gdGhlIHNhbWUga2luZCBvZiBkYXRhXG4gICAgICB2ZXJ0aWNhbEF4aXNMYWJlbFRleHRTaXplOiBkYXRhQXhpc1ZhbHVlcy5mb250U2l6ZSxcbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbixcbiAgICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZTogc2NhbGluZ0NvbmZpZy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGUsXG4gICAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlOiBzY2FsaW5nQ29uZmlnLnZlcnRpY2FsQ29udGFpbmVyU2NhbGUsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZU5vbkRhdGFBeGlzVmFsdWVzKFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIHNjYWxpbmdDb25maWc6IE5vbkVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICAgIGVsZW1lbnRTY2FsZXM6IFBhcnRpYWxFbGVtZW50U2NhbGluZ0NvbmZpZyB8IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0U2l6aW5nOiBGdWxsRWxlbWVudFNjYWxpbmdDb25maWcsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgKToge1xuICAgIGJhclNpemU6IG51bWJlcjtcbiAgICBiYXJDbHVzdGVyR2FwOiBudW1iZXI7XG4gICAgYnVja2V0R2FwOiBudW1iZXI7XG4gICAgb3V0ZXJHYXA6IG51bWJlcjtcbiAgICBzdGFydFBhZGRpbmc6IG51bWJlcjtcbiAgICBlbmRQYWRkaW5nOiBudW1iZXI7XG4gICAgdG90YWxTaXplOiBudW1iZXI7XG4gICAgc2l6aW5nRXJyb3I/OiBib29sZWFuO1xuICB9IHtcbiAgICBjb25zdCBjaGFydERhdGFEaXJlY3Rpb24gPSBnZXRDaGFydERhdGFEaXJlY3Rpb24oY29uZmlnKTtcbiAgICBjb25zdCBib3VuZGluZ0RpbWVuc2lvbiA9XG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IGRpbWVuc2lvbnMuaGVpZ2h0XG4gICAgICAgIDogZGltZW5zaW9ucy53aWR0aDtcbiAgICBjb25zdCBheGlzU2NhbGUgPVxuICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyBzY2FsaW5nQ29uZmlnPy52ZXJ0aWNhbEF4aXNTY2FsZVxuICAgICAgICA6IHNjYWxpbmdDb25maWc/Lmhvcml6b250YWxBeGlzU2NhbGU7XG5cbiAgICBjb25zdCBiYXJTaXplQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICAnYmFyU2l6ZScsXG4gICAgKTtcbiAgICBjb25zdCBiYXJDbHVzdGVyR2FwQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICAnYmFyQ2x1c3RlckdhcCcsXG4gICAgKTtcbiAgICBjb25zdCBidWNrZXRHYXBDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgICdidWNrZXRHYXAnLFxuICAgICk7XG4gICAgY29uc3Qgb3V0ZXJHYXBDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgICdvdXRlckdhcCcsXG4gICAgKTtcbiAgICBjb25zdCBzdGFydFBhZGRpbmdDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ3RvcFBhZGRpbmcnIDogJ2xlZnRQYWRkaW5nJyxcbiAgICApO1xuICAgIGNvbnN0IGVuZFBhZGRpbmdDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ2JvdHRvbVBhZGRpbmcnIDogJ3JpZ2h0UGFkZGluZycsXG4gICAgKTtcblxuICAgIGNvbnN0IGJ1Y2tldENvdW50ID0gZGF0YS54Lmxlbmd0aDtcbiAgICBsZXQgYmFyQ291bnQgPSAwO1xuICAgIGxldCBiYXJDbHVzdGVyR2FwQ291bnQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVja2V0Q291bnQ7IGkrKykge1xuICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Zsb3ctcHJvY2Vzc2VkJykge1xuICAgICAgICBiYXJDb3VudCArPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYnVja2V0Q2x1c3RlckNvdW50ID0gZ2V0Q2x1c3RlckluZm9Gb3JCdWNrZXQoZGF0YSwgY29uZmlnKTtcbiAgICAgICAgYmFyQ291bnQgKz0gYnVja2V0Q2x1c3RlckNvdW50LnRvdGFsO1xuICAgICAgICBiYXJDbHVzdGVyR2FwQ291bnQgKz0gYnVja2V0Q2x1c3RlckNvdW50LnRvdGFsIC0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYnVja2V0R2FwQ291bnQgPSBidWNrZXRDb3VudCAtIDE7XG5cbiAgICBjb25zdCBiYXJUb3RhbFNpemUgPSBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgICAgYmFyU2l6ZUNvbmZpZyxcbiAgICAgIGJhckNvdW50LFxuICAgICk7XG4gICAgY29uc3QgY2x1c3RlckdhcFRvdGFsU2l6ZSA9IGRldGVybWluZVBvc3NpYmxlU2l6ZXNPZkVsZW1lbnQoXG4gICAgICBiYXJDbHVzdGVyR2FwQ29uZmlnLFxuICAgICAgYmFyQ2x1c3RlckdhcENvdW50LFxuICAgICk7XG4gICAgY29uc3QgYnVja2V0R2FwVG90YWxTaXplID0gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICAgIGJ1Y2tldEdhcENvbmZpZyxcbiAgICAgIGJ1Y2tldEdhcENvdW50LFxuICAgICk7XG4gICAgY29uc3Qgb3V0ZXJHYXBUb3RhbFNpemUgPSBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgICAgb3V0ZXJHYXBDb25maWcsXG4gICAgICAyLFxuICAgICk7XG4gICAgY29uc3Qgc3RhcnRQYWRkaW5nVG90YWxTaXplID0gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICAgIHN0YXJ0UGFkZGluZ0NvbmZpZyxcbiAgICAgIDEsXG4gICAgKTtcbiAgICBjb25zdCBlbmRQYWRkaW5nVG90YWxTaXplID0gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICAgIGVuZFBhZGRpbmdDb25maWcsXG4gICAgICAxLFxuICAgICk7XG5cbiAgICBjb25zdCBjYWxjVGFyZ2V0U2l6ZSA9XG4gICAgICBiYXJUb3RhbFNpemUudGFyZ2V0ICtcbiAgICAgIGNsdXN0ZXJHYXBUb3RhbFNpemUudGFyZ2V0ICtcbiAgICAgIGJ1Y2tldEdhcFRvdGFsU2l6ZS50YXJnZXQgK1xuICAgICAgb3V0ZXJHYXBUb3RhbFNpemUudGFyZ2V0ICtcbiAgICAgIHN0YXJ0UGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQgK1xuICAgICAgZW5kUGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQ7XG5cbiAgICBpZiAoXG4gICAgICBheGlzU2NhbGUgPT09ICduby1zY2FsZScgfHxcbiAgICAgIGNhbGNUYXJnZXRTaXplID09PSBib3VuZGluZ0RpbWVuc2lvbiB8fFxuICAgICAgKGF4aXNTY2FsZSA9PT0gJ2dyb3cnICYmIGNhbGNUYXJnZXRTaXplID4gYm91bmRpbmdEaW1lbnNpb24pIHx8XG4gICAgICAoYXhpc1NjYWxlID09PSAnc2hyaW5rJyAmJiBjYWxjVGFyZ2V0U2l6ZSA8IGJvdW5kaW5nRGltZW5zaW9uKVxuICAgICkge1xuICAgICAgLy9ObyBlbGVtZW50IHNjYWxpbmcgbmVjZXNzYXJ5LCByZXR1cm4gZXZlcnl0aGluZyBhcyBpdCdzIHRhcmdldCB2YWx1ZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFyU2l6ZTogYmFyU2l6ZUNvbmZpZy50YXJnZXQsXG4gICAgICAgIGJhckNsdXN0ZXJHYXA6IGJhckNsdXN0ZXJHYXBDb25maWcudGFyZ2V0LFxuICAgICAgICBidWNrZXRHYXA6IGJ1Y2tldEdhcENvbmZpZy50YXJnZXQsXG4gICAgICAgIG91dGVyR2FwOiBvdXRlckdhcENvbmZpZy50YXJnZXQsXG4gICAgICAgIHN0YXJ0UGFkZGluZzogc3RhcnRQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgICAgZW5kUGFkZGluZzogZW5kUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgIHRvdGFsU2l6ZTogY2FsY1RhcmdldFNpemUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGNhbGNNaW5TaXplID1cbiAgICAgIGJhclRvdGFsU2l6ZS5taW4gK1xuICAgICAgY2x1c3RlckdhcFRvdGFsU2l6ZS5taW4gK1xuICAgICAgYnVja2V0R2FwVG90YWxTaXplLm1pbiArXG4gICAgICBvdXRlckdhcFRvdGFsU2l6ZS5taW4gK1xuICAgICAgc3RhcnRQYWRkaW5nVG90YWxTaXplLm1pbiArXG4gICAgICBlbmRQYWRkaW5nVG90YWxTaXplLm1pbjtcblxuICAgIC8vTm90ZTogVGhpcyBpcyBvbmx5IGFjdHVhbGx5IGEgbWF4IHNpemUgaWYgYWxsIGVsZW1lbnRzIGhhdmUgYSBkZWZpbmVkIG1heFxuICAgIGNvbnN0IGNhbGNNYXhTaXplID1cbiAgICAgIGJhclRvdGFsU2l6ZS5tYXggK1xuICAgICAgY2x1c3RlckdhcFRvdGFsU2l6ZS5tYXggK1xuICAgICAgYnVja2V0R2FwVG90YWxTaXplLm1heCArXG4gICAgICBvdXRlckdhcFRvdGFsU2l6ZS5tYXggK1xuICAgICAgc3RhcnRQYWRkaW5nVG90YWxTaXplLm1heCArXG4gICAgICBlbmRQYWRkaW5nVG90YWxTaXplLm1heDtcblxuICAgIGlmIChjYWxjTWluU2l6ZSA+IGJvdW5kaW5nRGltZW5zaW9uKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnVGhlIHByb3ZpZGVkIG1pbmltdW0gZWxlbWVudCBzaXplcyBtZWFuIHRoZSBjaGFydCBjYW5ub3QgZGlzcGxheSBhdCB0aGlzIHNtYWxsIG9mIGEgc2l6ZScsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFyU2l6ZTogMCxcbiAgICAgICAgYmFyQ2x1c3RlckdhcDogMCxcbiAgICAgICAgYnVja2V0R2FwOiAwLFxuICAgICAgICBvdXRlckdhcDogMCxcbiAgICAgICAgc3RhcnRQYWRkaW5nOiAwLFxuICAgICAgICBlbmRQYWRkaW5nOiAwLFxuICAgICAgICB0b3RhbFNpemU6IDAsXG4gICAgICAgIHNpemluZ0Vycm9yOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnQ2hlY2tzID0gW1xuICAgICAgZ2V0Q2hlY2tpbmdJbmZvRm9yRWxlbWVudENvbmZpZyhiYXJTaXplQ29uZmlnLCBiYXJDb3VudCksXG4gICAgICBnZXRDaGVja2luZ0luZm9Gb3JFbGVtZW50Q29uZmlnKGJhckNsdXN0ZXJHYXBDb25maWcsIGJhckNsdXN0ZXJHYXBDb3VudCksXG4gICAgICBnZXRDaGVja2luZ0luZm9Gb3JFbGVtZW50Q29uZmlnKGJ1Y2tldEdhcENvbmZpZywgYnVja2V0R2FwQ291bnQpLFxuICAgICAgZ2V0Q2hlY2tpbmdJbmZvRm9yRWxlbWVudENvbmZpZyhvdXRlckdhcENvbmZpZywgMiksXG4gICAgICBnZXRDaGVja2luZ0luZm9Gb3JFbGVtZW50Q29uZmlnKHN0YXJ0UGFkZGluZ0NvbmZpZywgMSksXG4gICAgICBnZXRDaGVja2luZ0luZm9Gb3JFbGVtZW50Q29uZmlnKGVuZFBhZGRpbmdDb25maWcsIDEpLFxuICAgIF07XG4gICAgbGV0IGN1cnJTY2FsaW5nRmFjdG9yID0gMTtcbiAgICBpZiAoY2FsY1RhcmdldFNpemUgPiBib3VuZGluZ0RpbWVuc2lvbikge1xuICAgICAgLy9TY2FsaW5nIGRvd25cbiAgICAgIGxldCBmaW5hbFNjYWxpbmdGYWN0b3JGb3VuZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKCFmaW5hbFNjYWxpbmdGYWN0b3JGb3VuZCkge1xuICAgICAgICBjb25zdCBuZXh0U2NhbGVGYWN0b3JCcmVha3BvaW50ID0gTWF0aC5tYXgoXG4gICAgICAgICAgLi4uY29uZmlnQ2hlY2tzXG4gICAgICAgICAgICAubWFwKGNoZWNrID0+IGNoZWNrLm1pblNjYWxlRmFjdG9yKVxuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgKHZhbCk6IHZhbCBpcyBudW1iZXIgPT5cbiAgICAgICAgICAgICAgICB2YWwgIT09IHVuZGVmaW5lZCAmJiAhKHZhbCA+PSBjdXJyU2NhbGluZ0ZhY3RvciksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIDAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1NjYWxlRmFjdG9yU2l6ZSA9IGdldFN1bUZvclNjYWxlVmFsdWUoXG4gICAgICAgICAgY29uZmlnQ2hlY2tzLFxuICAgICAgICAgIG5leHRTY2FsZUZhY3RvckJyZWFrcG9pbnQsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG5ld1NjYWxlRmFjdG9yU2l6ZSA8PSBib3VuZGluZ0RpbWVuc2lvbikge1xuICAgICAgICAgIC8vVGhlcmUncyBhIHNjYWxlIHZhbHVlIHRoYXQnbGwgd29yayBiZXR3ZWVuIHRoZSBjdXJyIGFuZCBuZXcgdmFsdWVzXG4gICAgICAgICAgLy9UaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0J2xsIGp1c3QgYmUgYXQgdGhlaXIgbWluXG4gICAgICAgICAgY29uc3Qgbm9uU2NhbGVhYmxlVmFsdWVzID0gY29uZmlnQ2hlY2tzLmZpbHRlcihcbiAgICAgICAgICAgIGNoZWNrID0+XG4gICAgICAgICAgICAgIGNoZWNrLm1pblNjYWxlRmFjdG9yICYmIGNoZWNrLm1pblNjYWxlRmFjdG9yID49IGN1cnJTY2FsaW5nRmFjdG9yLFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy9UaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IGNhbiBzdGlsbCBiZSBzY2FsZWQgZG93blxuICAgICAgICAgIGNvbnN0IHNjYWxlYWJsZVZhbHVlcyA9IGNvbmZpZ0NoZWNrcy5maWx0ZXIoXG4gICAgICAgICAgICBjaGVjayA9PlxuICAgICAgICAgICAgICAhY2hlY2subWluU2NhbGVGYWN0b3IgfHwgY2hlY2subWluU2NhbGVGYWN0b3IgPCBjdXJyU2NhbGluZ0ZhY3RvcixcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHdvcmtpbmdTcGFjZSA9XG4gICAgICAgICAgICBib3VuZGluZ0RpbWVuc2lvbiAtXG4gICAgICAgICAgICBnZXRTdW1Gb3JTY2FsZVZhbHVlKG5vblNjYWxlYWJsZVZhbHVlcywgY3VyclNjYWxpbmdGYWN0b3IpO1xuICAgICAgICAgIGN1cnJTY2FsaW5nRmFjdG9yID1cbiAgICAgICAgICAgIHdvcmtpbmdTcGFjZSAvIGdldFN1bUZvclNjYWxlVmFsdWUoc2NhbGVhYmxlVmFsdWVzLCAxKTtcbiAgICAgICAgICBmaW5hbFNjYWxpbmdGYWN0b3JGb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy9PbmUgb2YgdGhlIGVsZW1lbnRzIGlzIGhpdHRpbmcgdGhlaXIgbWluU2NhbGVGYWN0b3IsIHNvIGZvciBzaW1wbGljaXR5IHdlJ2xsIGp1c3QgZ28gYWdhaW5cbiAgICAgICAgICBjdXJyU2NhbGluZ0ZhY3RvciA9IG5leHRTY2FsZUZhY3RvckJyZWFrcG9pbnQ7XG5cbiAgICAgICAgICAvL0p1c3QgaW4gY2FzZSwgdGhvdWdoIHByZXZpb3VzIGNoZWNrcyBzaG91bGQgbWFrZSB0aGlzIGltcG9zc2libGVcbiAgICAgICAgICBpZiAoY3VyclNjYWxpbmdGYWN0b3IgPT09IDApIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICdUaGUgZ2l2ZW4gc2l6ZSBjYW5ub3QgY29udGFpbiB0aGUgZml4ZWQgc2l6ZXMgZ2l2ZW4gZm9yIHRoZSBlbGVtZW50cycsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYmFyU2l6ZTogMCxcbiAgICAgICAgICAgICAgYmFyQ2x1c3RlckdhcDogMCxcbiAgICAgICAgICAgICAgYnVja2V0R2FwOiAwLFxuICAgICAgICAgICAgICBvdXRlckdhcDogMCxcbiAgICAgICAgICAgICAgc3RhcnRQYWRkaW5nOiAwLFxuICAgICAgICAgICAgICBlbmRQYWRkaW5nOiAwLFxuICAgICAgICAgICAgICB0b3RhbFNpemU6IDAsXG4gICAgICAgICAgICAgIHNpemluZ0Vycm9yOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy9DaGVja2luZyB0byBzZWUgaWYgYWxsIGVsZW1lbnRzIGhhdmUgYSBkZWZpbmVkIG1heFxuICAgICAgY29uc3QgbWF4aW11bVNpemVQb3NzaWJsZSA9XG4gICAgICAgIGNvbmZpZ0NoZWNrcy5maWx0ZXIoY2hlY2sgPT4gY2hlY2subWF4U2NhbGVGYWN0b3IgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAubGVuZ3RoID09PSAwO1xuICAgICAgLy9JZiBhbGwgZWxlbWVudHMgaGF2ZSBhIGRlZmluZWQgbWF4LCBhbmQgdGhhdCBtYXggaXMgbGVzcyB0aGFuIHRoZSBzaXplIHdlJ3JlIHRyeWluZyB0byBncm93IHRvLCBpdCdzIGltcG9zc2libGVcbiAgICAgIGlmIChtYXhpbXVtU2l6ZVBvc3NpYmxlICYmIGNhbGNNYXhTaXplIDwgYm91bmRpbmdEaW1lbnNpb24pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgcHJvdmlkZWQgbWF4aW11bSBlbGVtZW50IHdpZHRocyBtZWFuIHRoZSBjaGFydCBjYW5ub3QgZGlzcGxheSBhdCB0aGlzIGxhcmdlIG9mIGEgc2l6ZScsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYmFyU2l6ZTogMCxcbiAgICAgICAgICBiYXJDbHVzdGVyR2FwOiAwLFxuICAgICAgICAgIGJ1Y2tldEdhcDogMCxcbiAgICAgICAgICBvdXRlckdhcDogMCxcbiAgICAgICAgICBzdGFydFBhZGRpbmc6IDAsXG4gICAgICAgICAgZW5kUGFkZGluZzogMCxcbiAgICAgICAgICB0b3RhbFNpemU6IDAsXG4gICAgICAgICAgc2l6aW5nRXJyb3I6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvL1NjYWxpbmcgdXBcbiAgICAgIGxldCBmaW5hbFNjYWxpbmdGYWN0b3JGb3VuZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKCFmaW5hbFNjYWxpbmdGYWN0b3JGb3VuZCkge1xuICAgICAgICBjb25zdCBuZXh0U2NhbGVGYWN0b3JCcmVha3BvaW50ID0gTWF0aC5taW4oXG4gICAgICAgICAgLi4uY29uZmlnQ2hlY2tzXG4gICAgICAgICAgICAubWFwKGNoZWNrID0+IGNoZWNrLm1heFNjYWxlRmFjdG9yKVxuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgKHZhbCk6IHZhbCBpcyBudW1iZXIgPT5cbiAgICAgICAgICAgICAgICB2YWwgIT09IHVuZGVmaW5lZCAmJiAhKHZhbCA8PSBjdXJyU2NhbGluZ0ZhY3RvciksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdTY2FsZUZhY3RvclNpemUgPSBnZXRTdW1Gb3JTY2FsZVZhbHVlKFxuICAgICAgICAgIGNvbmZpZ0NoZWNrcyxcbiAgICAgICAgICBuZXh0U2NhbGVGYWN0b3JCcmVha3BvaW50LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBuZXdTY2FsZUZhY3RvclNpemUgPj0gYm91bmRpbmdEaW1lbnNpb24gfHxcbiAgICAgICAgICBuZXh0U2NhbGVGYWN0b3JCcmVha3BvaW50ID09PSBJbmZpbml0eVxuICAgICAgICApIHtcbiAgICAgICAgICAvL1RoZXJlJ3MgYSBzY2FsZSB2YWx1ZSB0aGF0J2xsIHdvcmsgYmV0d2VlbiB0aGUgY3VyciBhbmQgbmV3IHZhbHVlc1xuICAgICAgICAgIC8vVGhlc2UgYXJlIHRoZSB2YWx1ZXMgdGhhdCdsbCBqdXN0IGJlIGF0IHRoZWlyIG1heFxuICAgICAgICAgIGNvbnN0IG5vblNjYWxlYWJsZVZhbHVlcyA9IGNvbmZpZ0NoZWNrcy5maWx0ZXIoXG4gICAgICAgICAgICBjaGVjayA9PlxuICAgICAgICAgICAgICBjaGVjay5tYXhTY2FsZUZhY3RvciAmJiBjaGVjay5tYXhTY2FsZUZhY3RvciA8PSBjdXJyU2NhbGluZ0ZhY3RvcixcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vVGhlc2UgYXJlIHRoZSB2YWx1ZXMgdGhhdCBjYW4gc3RpbGwgYmUgc2NhbGVkIHVwXG4gICAgICAgICAgY29uc3Qgc2NhbGVhYmxlVmFsdWVzID0gY29uZmlnQ2hlY2tzLmZpbHRlcihcbiAgICAgICAgICAgIGNoZWNrID0+XG4gICAgICAgICAgICAgICFjaGVjay5tYXhTY2FsZUZhY3RvciB8fCBjaGVjay5tYXhTY2FsZUZhY3RvciA+IGN1cnJTY2FsaW5nRmFjdG9yLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgd29ya2luZ1NwYWNlID1cbiAgICAgICAgICAgIGJvdW5kaW5nRGltZW5zaW9uIC1cbiAgICAgICAgICAgIGdldFN1bUZvclNjYWxlVmFsdWUobm9uU2NhbGVhYmxlVmFsdWVzLCBjdXJyU2NhbGluZ0ZhY3Rvcik7XG4gICAgICAgICAgY3VyclNjYWxpbmdGYWN0b3IgPVxuICAgICAgICAgICAgd29ya2luZ1NwYWNlIC8gZ2V0U3VtRm9yU2NhbGVWYWx1ZShzY2FsZWFibGVWYWx1ZXMsIDEpO1xuICAgICAgICAgIGZpbmFsU2NhbGluZ0ZhY3RvckZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvL09uZSBvZiB0aGUgZWxlbWVudHMgaXMgaGl0dGluZyB0aGVpciBtYXhTY2FsZUZhY3Rvciwgc28gZm9yIHNpbXBsaWNpdHkgd2UnbGwganVzdCBnbyBhZ2FpblxuICAgICAgICAgIGN1cnJTY2FsaW5nRmFjdG9yID0gbmV4dFNjYWxlRmFjdG9yQnJlYWtwb2ludDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBiYXJTaXplID0gZ2V0U2NhbGVkRWxlbWVudFNpemUoYmFyU2l6ZUNvbmZpZywgY3VyclNjYWxpbmdGYWN0b3IpO1xuICAgIGNvbnN0IGJhckNsdXN0ZXJHYXAgPSBnZXRTY2FsZWRFbGVtZW50U2l6ZShcbiAgICAgIGJhckNsdXN0ZXJHYXBDb25maWcsXG4gICAgICBjdXJyU2NhbGluZ0ZhY3RvcixcbiAgICApO1xuICAgIGNvbnN0IGJ1Y2tldEdhcCA9IGdldFNjYWxlZEVsZW1lbnRTaXplKGJ1Y2tldEdhcENvbmZpZywgY3VyclNjYWxpbmdGYWN0b3IpO1xuICAgIHJldHVybiB7XG4gICAgICBiYXJTaXplLFxuICAgICAgYmFyQ2x1c3RlckdhcCxcbiAgICAgIGJ1Y2tldEdhcCxcbiAgICAgIG91dGVyR2FwOiBnZXRTY2FsZWRFbGVtZW50U2l6ZShvdXRlckdhcENvbmZpZywgY3VyclNjYWxpbmdGYWN0b3IpLFxuICAgICAgc3RhcnRQYWRkaW5nOiBnZXRTY2FsZWRFbGVtZW50U2l6ZShzdGFydFBhZGRpbmdDb25maWcsIGN1cnJTY2FsaW5nRmFjdG9yKSxcbiAgICAgIGVuZFBhZGRpbmc6IGdldFNjYWxlZEVsZW1lbnRTaXplKGVuZFBhZGRpbmdDb25maWcsIGN1cnJTY2FsaW5nRmFjdG9yKSxcbiAgICAgIHRvdGFsU2l6ZTogYm91bmRpbmdEaW1lbnNpb24sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZURhdGFBeGlzVmFsdWVzKFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIHNjYWxpbmdDb25maWc6IE5vbkVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICAgIGVsZW1lbnRTY2FsZXM6IFBhcnRpYWxFbGVtZW50U2NhbGluZ0NvbmZpZyB8IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0U2l6aW5nOiBGdWxsRWxlbWVudFNjYWxpbmdDb25maWcsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgICBwaXBlVHJhbnNmb3JtOiAoKHZhbHVlOiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuKSA9PiBzdHJpbmcpIHwgbnVsbCxcbiAgICBkYXRlRm9ybWF0OiAoKGRhdGU6IERhdGUpID0+IHN0cmluZykgfCBudWxsLFxuICApOiB7XG4gICAgc3RhcnRQYWRkaW5nOiBudW1iZXI7XG4gICAgZW5kUGFkZGluZzogbnVtYmVyO1xuICAgIGxlZnRCdWNrZXRMYWJlbDogbnVtYmVyO1xuICAgIGRhdGFMYWJlbFRleHRTaXplOiBudW1iZXI7XG4gICAgZGF0YUxhYmVsUGFkZGluZzogbnVtYmVyO1xuICAgIGZvbnRTaXplOiBudW1iZXI7XG4gICAgc2l6ZUZvckRhdGE6IG51bWJlcjtcbiAgICB0b3RhbFNpemU6IG51bWJlcjtcbiAgICBidWNrZXRMYWJlbFRleHRTaXplOiBudW1iZXI7XG4gICAgc2l6aW5nRXJyb3I/OiBib29sZWFuO1xuICB9IHtcbiAgICBjb25zdCBjaGFydERhdGFEaXJlY3Rpb24gPSBnZXRDaGFydERhdGFEaXJlY3Rpb24oY29uZmlnKTtcbiAgICBjb25zdCBib3VuZGluZ0RpbWVuc2lvbiA9XG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IGRpbWVuc2lvbnMud2lkdGhcbiAgICAgICAgOiBkaW1lbnNpb25zLmhlaWdodDtcbiAgICBjb25zdCBheGlzU2NhbGUgPVxuICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyBzY2FsaW5nQ29uZmlnLmhvcml6b250YWxBeGlzU2NhbGVcbiAgICAgICAgOiBzY2FsaW5nQ29uZmlnLnZlcnRpY2FsQXhpc1NjYWxlO1xuXG4gICAgY29uc3Qgc3RhcnRQYWRkaW5nQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICdsZWZ0UGFkZGluZycgOiAndG9wUGFkZGluZycsXG4gICAgKTtcbiAgICBjb25zdCBlbmRQYWRkaW5nQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICdyaWdodFBhZGRpbmcnIDogJ2JvdHRvbVBhZGRpbmcnLFxuICAgICk7XG4gICAgY29uc3QgbGVmdExhYmVsQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICAnbGVmdEJ1Y2tldExhYmVsJyxcbiAgICApO1xuICAgIGNvbnN0IGRhdGFMYWJlbFBhZGRpbmdDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgICdkYXRhTGFiZWxQYWRkaW5nJyxcbiAgICApO1xuICAgIGNvbnN0IGZvbnRTaXplQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICAnZm9udFNpemUnLFxuICAgICk7XG4gICAgY29uc3QgZm9udFNpemUgPSBmb250U2l6ZUNvbmZpZy50YXJnZXQ7XG4gICAgY29uc3QgZGF0YUxhYmVsVGV4dFNpemluZyA9IGdldERhdGFMYWJlbFNpemUoZGF0YSwgcGlwZVRyYW5zZm9ybSwgZm9udFNpemUpO1xuICAgIC8vV2UgYWx3YXlzIGNhbGN1bGF0ZSBhbmQgcmV0dXJuIGRhdGFMYWJlbFRleHRTaXplLCBzaW5jZSBpdCdzIGFsc28gdXNlZCBmb3IgZGV0ZXJtaW5nIGF4aXMgbGFiZWwgc2l6ZVxuICAgIGNvbnN0IGRhdGFMYWJlbFRleHRTaXplID1cbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gZGF0YUxhYmVsVGV4dFNpemluZy5ob3Jpem9udGFsXG4gICAgICAgIDogZGF0YUxhYmVsVGV4dFNpemluZy52ZXJ0aWNhbDtcbiAgICBjb25zdCBkYXRhTGFiZWxGaXhlZFNpemUgPVxuICAgICAgZGF0YUxhYmVsVGV4dFNpemUgKiBnZXREYXRhTGFiZWxTaXppbmdDb3VudChkYXRhLCBjb25maWcpLnRvdGFsO1xuICAgIGNvbnN0IGJ1Y2tldExhYmVsVGV4dFNpemUgPSBnZXRCdWNrZXRMYWJlbFNpemUoZGF0YSwgZm9udFNpemUsIGRhdGVGb3JtYXQpO1xuICAgIC8vRmxvdyBjaGFydHMgaGF2ZSBhIGRhdGEgbGFiZWwgYWJvdmUgZWFjaCBzdWItYnVja2V0XG4gICAgY29uc3QgZmxvd0xhYmVsU2l6ZSA9IGRhdGFMYWJlbFRleHRTaXplICsgZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQ7XG5cbiAgICBjb25zdCBzdGFydFBhZGRpbmdUb3RhbFNpemUgPSBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgICAgc3RhcnRQYWRkaW5nQ29uZmlnLFxuICAgICAgMSxcbiAgICApO1xuICAgIGNvbnN0IGVuZFBhZGRpbmdUb3RhbFNpemUgPSBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgICAgZW5kUGFkZGluZ0NvbmZpZyxcbiAgICAgIDEsXG4gICAgKTtcbiAgICBjb25zdCBkYXRhTGFiZWxQYWRkaW5nVG90YWxTaXplID0gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICAgIGRhdGFMYWJlbFBhZGRpbmdDb25maWcsXG4gICAgICBnZXREYXRhTGFiZWxTaXppbmdDb3VudChkYXRhLCBjb25maWcpLnRvdGFsLFxuICAgICk7XG5cbiAgICBsZXQgbGVmdEJ1Y2tldExhYmVsQWN0dWFsU2l6ZSA9IGxlZnRMYWJlbENvbmZpZy50YXJnZXQ7XG4gICAgaWYgKGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIGRhdGEudHlwZSA9PT0gJ2xhYmVsZWQnKSB7XG4gICAgICAvL0ZvciBob3Jpem9udGFsIGJhcnMsIHRoZSBzdGFydCBwYWRkaW5nIHdpbGwgc2NhbGUgYmFzZWQgb24gdGhlIGJ1Y2tldCBsYWJlbHNcbiAgICAgIGNvbnN0IGxvbmdlc3RMYWJlbExlbmd0aCA9XG4gICAgICAgIE1hdGgubWF4KC4uLmRhdGEueC5tYXAoeCA9PiB4LmxhYmVsLmxlbmd0aCkpICpcbiAgICAgICAgKFdJRFRIX1BFUl9MRVRURVIgKiAoZm9udFNpemUgLyBERUZBVUxUX0ZPTlRfU0laRSkpO1xuICAgICAgY29uc3QgbWluTGVuZ3RoID0gbGVmdExhYmVsQ29uZmlnLm1pblxuICAgICAgICA/IE1hdGgubWF4KGxvbmdlc3RMYWJlbExlbmd0aCwgbGVmdExhYmVsQ29uZmlnLm1pbilcbiAgICAgICAgOiBsb25nZXN0TGFiZWxMZW5ndGg7XG4gICAgICBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplID0gbGVmdExhYmVsQ29uZmlnLm1heFxuICAgICAgICA/IE1hdGgubWluKG1pbkxlbmd0aCwgbGVmdExhYmVsQ29uZmlnLm1heClcbiAgICAgICAgOiBsb25nZXN0TGFiZWxMZW5ndGg7XG4gICAgfVxuXG4gICAgbGV0IGZpeGVkU2l6ZVZhbHVlID1cbiAgICAgIGxlZnRCdWNrZXRMYWJlbEFjdHVhbFNpemUgK1xuICAgICAgZGF0YUxhYmVsRml4ZWRTaXplICtcbiAgICAgIHN0YXJ0UGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQgK1xuICAgICAgZW5kUGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQgK1xuICAgICAgZGF0YUxhYmVsUGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQ7XG4gICAgaWYgKGZpeGVkU2l6ZVZhbHVlID4gYm91bmRpbmdEaW1lbnNpb24pIHtcbiAgICAgIC8vU2VlIGlmIGZ1cnRoZXIgdHJ1bmNhdGluZyB0aGUgbGFiZWwgY2FuIGhlbHBcbiAgICAgIGlmIChcbiAgICAgICAgbGVmdExhYmVsQ29uZmlnLm1pbiAmJlxuICAgICAgICBmaXhlZFNpemVWYWx1ZSAtIGJvdW5kaW5nRGltZW5zaW9uIDxcbiAgICAgICAgICBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplIC0gbGVmdExhYmVsQ29uZmlnLm1pblxuICAgICAgKSB7XG4gICAgICAgIGxlZnRCdWNrZXRMYWJlbEFjdHVhbFNpemUgPVxuICAgICAgICAgIGxlZnRCdWNrZXRMYWJlbEFjdHVhbFNpemUgLSAoZml4ZWRTaXplVmFsdWUgLSBib3VuZGluZ0RpbWVuc2lvbik7XG4gICAgICAgIGZpeGVkU2l6ZVZhbHVlID1cbiAgICAgICAgICBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplICtcbiAgICAgICAgICBzdGFydFBhZGRpbmdUb3RhbFNpemUudGFyZ2V0ICtcbiAgICAgICAgICBlbmRQYWRkaW5nVG90YWxTaXplLnRhcmdldCArXG4gICAgICAgICAgZGF0YUxhYmVsUGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBwcm92aWRlZCBlbGVtZW50IHNpemVzIG1lYW4gdGhlIGNoYXJ0IGNhbm5vdCBkaXNwbGF5IGF0IHRoaXMgc21hbGwgb2YgYSBzaXplJyxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydFBhZGRpbmc6IDAsXG4gICAgICAgICAgZW5kUGFkZGluZzogMCxcbiAgICAgICAgICBsZWZ0QnVja2V0TGFiZWw6IDAsXG4gICAgICAgICAgZGF0YUxhYmVsVGV4dFNpemU6IDAsXG4gICAgICAgICAgZGF0YUxhYmVsUGFkZGluZzogMCxcbiAgICAgICAgICBmb250U2l6ZTogMCxcbiAgICAgICAgICBzaXplRm9yRGF0YTogMCxcbiAgICAgICAgICB0b3RhbFNpemU6IDAsXG4gICAgICAgICAgYnVja2V0TGFiZWxUZXh0U2l6ZTogMCxcbiAgICAgICAgICBzaXppbmdFcnJvcjogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgYXhpc1NjYWxlID09PSAnc2NhbGUtdG8tZml0JyB8fFxuICAgICAgYXhpc1NjYWxlID09PSAnZ3JvdycgfHxcbiAgICAgIGF4aXNTY2FsZSA9PT0gJ3NocmluaycgfHxcbiAgICAgIHNjYWxpbmdDb25maWcuZGF0YVNjYWxlLnR5cGUgPT09ICdmaXQnXG4gICAgKSB7XG4gICAgICBjb25zdCBzaXplRm9yRGF0YSA9IGdldEZpdHRlZERhdGFTaXplKFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGJvdW5kaW5nRGltZW5zaW9uIC0gZml4ZWRTaXplVmFsdWUsXG4gICAgICAgIGZsb3dMYWJlbFNpemUsXG4gICAgICApO1xuICAgICAgaWYgKHNpemVGb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIHByb3ZpZGVkIG1pbmltdW0gZGF0YSBlbGVtZW50IHNpemUgbWVhbnMgdGhlIGNoYXJ0IGNhbm5vdCBkaXNwbGF5IGF0IHRoaXMgc21hbGwgb2YgYSBzaXplJyxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydFBhZGRpbmc6IDAsXG4gICAgICAgICAgZW5kUGFkZGluZzogMCxcbiAgICAgICAgICBsZWZ0QnVja2V0TGFiZWw6IDAsXG4gICAgICAgICAgZGF0YUxhYmVsVGV4dFNpemU6IDAsXG4gICAgICAgICAgZGF0YUxhYmVsUGFkZGluZzogMCxcbiAgICAgICAgICBmb250U2l6ZTogMCxcbiAgICAgICAgICBzaXplRm9yRGF0YTogMCxcbiAgICAgICAgICB0b3RhbFNpemU6IDAsXG4gICAgICAgICAgYnVja2V0TGFiZWxUZXh0U2l6ZTogMCxcbiAgICAgICAgICBzaXppbmdFcnJvcjogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0UGFkZGluZzogc3RhcnRQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgICAgZW5kUGFkZGluZzogZW5kUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgIGxlZnRCdWNrZXRMYWJlbDogbGVmdEJ1Y2tldExhYmVsQWN0dWFsU2l6ZSxcbiAgICAgICAgZGF0YUxhYmVsVGV4dFNpemUsXG4gICAgICAgIGRhdGFMYWJlbFBhZGRpbmc6IGRhdGFMYWJlbFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgICBmb250U2l6ZTogZm9udFNpemVDb25maWcudGFyZ2V0LFxuICAgICAgICBzaXplRm9yRGF0YSxcbiAgICAgICAgdG90YWxTaXplOiBib3VuZGluZ0RpbWVuc2lvbixcbiAgICAgICAgYnVja2V0TGFiZWxUZXh0U2l6ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgcHJpbWFyeURhdGFNaW4sXG4gICAgICBwcmltYXJ5RGF0YU1heCxcbiAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXgsXG4gICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnLFxuICAgIH0gPSBjYWxjRGF0YVNjYWxpbmdWYWx1ZXMoZGF0YSwgY29uZmlnKTtcblxuICAgIGNvbnN0IGVmZmVjdGl2ZVByaW1hcnlNYXhGb3JTY2FsaW5nID1cbiAgICAgIHByaW1hcnlEYXRhTWF4ICogc2NhbGVEb21haW5NdWx0aXBsZUZvck1heDtcbiAgICBjb25zdCBlZmZlY3RpdmVQcmltYXJ5TWluRm9yU2NhbGluZyA9XG4gICAgICBwcmltYXJ5RGF0YU1pbiA8IDAgPyBwcmltYXJ5RGF0YU1pbiAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWcgOiAwO1xuXG4gICAgaWYgKHNjYWxpbmdDb25maWcuZGF0YVNjYWxlLnR5cGUgPT09ICdtYXgnKSB7XG4gICAgICBjb25zdCBkYXRhU2l6ZSA9XG4gICAgICAgIHNjYWxpbmdDb25maWcuZGF0YVNjYWxlLnZhbHVlICpcbiAgICAgICAgKChlZmZlY3RpdmVQcmltYXJ5TWF4Rm9yU2NhbGluZyAtIGVmZmVjdGl2ZVByaW1hcnlNaW5Gb3JTY2FsaW5nKSAvXG4gICAgICAgICAgZWZmZWN0aXZlUHJpbWFyeU1heEZvclNjYWxpbmcpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnRQYWRkaW5nOiBzdGFydFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgICBlbmRQYWRkaW5nOiBlbmRQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgICAgbGVmdEJ1Y2tldExhYmVsOiBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplLFxuICAgICAgICBkYXRhTGFiZWxUZXh0U2l6ZSxcbiAgICAgICAgZGF0YUxhYmVsUGFkZGluZzogZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgIGZvbnRTaXplOiBmb250U2l6ZUNvbmZpZy50YXJnZXQsXG4gICAgICAgIHNpemVGb3JEYXRhOiBkYXRhU2l6ZSxcbiAgICAgICAgdG90YWxTaXplOlxuICAgICAgICAgIGdldFNjYWxlZERhdGFUb3RhbFNpemUoZGF0YSwgY29uZmlnLCBkYXRhU2l6ZSwgZmxvd0xhYmVsU2l6ZSkgK1xuICAgICAgICAgIGZpeGVkU2l6ZVZhbHVlLFxuICAgICAgICBidWNrZXRMYWJlbFRleHRTaXplLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhU2l6ZSA9XG4gICAgICAoKGVmZmVjdGl2ZVByaW1hcnlNYXhGb3JTY2FsaW5nIC0gZWZmZWN0aXZlUHJpbWFyeU1pbkZvclNjYWxpbmcpIC9cbiAgICAgICAgc2NhbGluZ0NvbmZpZy5kYXRhU2NhbGUucmF0aW8udmFsdWUpICpcbiAgICAgIHNjYWxpbmdDb25maWcuZGF0YVNjYWxlLnJhdGlvLnB4O1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydFBhZGRpbmc6IHN0YXJ0UGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICBlbmRQYWRkaW5nOiBlbmRQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgIGxlZnRCdWNrZXRMYWJlbDogbGVmdEJ1Y2tldExhYmVsQWN0dWFsU2l6ZSxcbiAgICAgIGRhdGFMYWJlbFRleHRTaXplLFxuICAgICAgZGF0YUxhYmVsUGFkZGluZzogZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICBmb250U2l6ZTogZm9udFNpemVDb25maWcudGFyZ2V0LFxuICAgICAgc2l6ZUZvckRhdGE6IGRhdGFTaXplLFxuICAgICAgdG90YWxTaXplOlxuICAgICAgICBnZXRTY2FsZWREYXRhVG90YWxTaXplKGRhdGEsIGNvbmZpZywgZGF0YVNpemUsIGZsb3dMYWJlbFNpemUpICtcbiAgICAgICAgZml4ZWRTaXplVmFsdWUsXG4gICAgICBidWNrZXRMYWJlbFRleHRTaXplLFxuICAgIH07XG4gIH1cblxuICAvL0ZvciBmbG93IGNoYXJ0cywgZmluZHMgdGhlIHNpemUgdGhlIGRhdGEgc2NhbGUgc2hvdWxkIG1hcCB0byBzbyB0aGF0IGV2ZXJ5IGJ1Y2tldCAoaW5jbHVkaW5nIGl0cyBvd24gZGF0YSBsYWJlbHMsXG4gIC8vIGFuZCBhbnkgZWxlbWVudHMgZW5sYXJnZWQgdG8gdGhlIG1pbmltdW0gc2l6ZSkgZml0cyBpbiB0aGUgYXZhaWxhYmxlIHNpemVcbiAgLy9SZXR1cm5zIG51bGwgaWYgdGhlIG1pbmltdW0gc2l6ZXMgYWxvbmUgY2FuJ3QgZml0XG4gIGZ1bmN0aW9uIGdldEZpdHRlZERhdGFTaXplKFxuICAgIGRhdGE6IFByb2Nlc3NEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGF2YWlsYWJsZVNpemU6IG51bWJlcixcbiAgICBsYWJlbFNpemU6IG51bWJlcixcbiAgKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ2Zsb3ctcHJvY2Vzc2VkJykge1xuICAgICAgcmV0dXJuIGF2YWlsYWJsZVNpemU7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFNYXggPSBNYXRoLm1heCguLi5kYXRhLngubWFwKHggPT4geC50b3RhbENvdW50KSk7XG4gICAgaWYgKGRhdGFNYXggPD0gMCkge1xuICAgICAgcmV0dXJuIGF2YWlsYWJsZVNpemU7XG4gICAgfVxuICAgIGNvbnN0IG1pbmltdW1TaXplID0gZ2V0TWluaW11bURhdGFFbGVtZW50U2l6ZShjb25maWcpO1xuICAgIGNvbnN0IGJ1Y2tldEF2YWlsYWJsZVNpemUgPVxuICAgICAgYXZhaWxhYmxlU2l6ZSArIGdldEZsb3dNaWRMYWJlbFNpemUoZGF0YSwgbGFiZWxTaXplKTtcbiAgICAvL0NhbGN1bGF0ZSB3aGF0IHRoZSBzaXppbmcgd291bGQgbmVlZCB0byBiZSBmb3IgZWFjaCBpbmRpdmlkdWFsIGNvbHVtbixcbiAgICAvLyAgdGFraW5nIHRoZSB2YWx1ZSB0aGF0IGlzIG1vc3QgcmVzdHJpY3RpdmUuIE5vdCBhcHBseWluZyBtaW5pbXVtIHNpemUgeWV0XG4gICAgY29uc3QgdW5lbmxhcmdlZFJhdGlvID0gTWF0aC5taW4oXG4gICAgICAuLi5kYXRhLnhcbiAgICAgICAgLmZpbHRlcihidWNrZXQgPT4gYnVja2V0LnRvdGFsQ291bnQgPiAwKVxuICAgICAgICAubWFwKFxuICAgICAgICAgIGJ1Y2tldCA9PlxuICAgICAgICAgICAgKGJ1Y2tldEF2YWlsYWJsZVNpemUgLSAoYnVja2V0LnN1YkJ1Y2tldHMubGVuZ3RoIC0gMSkgKiBsYWJlbFNpemUpIC9cbiAgICAgICAgICAgIGJ1Y2tldC50b3RhbENvdW50LFxuICAgICAgICApLFxuICAgICk7XG4gICAgaWYgKFxuICAgICAgbWluaW11bVNpemUgPT09IDAgfHxcbiAgICAgIGdldE1heEZsb3dCdWNrZXRTaXplKGRhdGEsIHVuZW5sYXJnZWRSYXRpbywgbWluaW11bVNpemUsIGxhYmVsU2l6ZSkgPD1cbiAgICAgICAgYnVja2V0QXZhaWxhYmxlU2l6ZVxuICAgICkge1xuICAgICAgcmV0dXJuIHVuZW5sYXJnZWRSYXRpbyAqIGRhdGFNYXg7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGdldE1heEZsb3dCdWNrZXRTaXplKGRhdGEsIDAsIG1pbmltdW1TaXplLCBsYWJlbFNpemUpID5cbiAgICAgIGJ1Y2tldEF2YWlsYWJsZVNpemVcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvL05vdywgd2UgYXBwbHkgbWluaW11bSBzaXplIHRvIHRoZSBiYXJzIHRvIGNhbGN1bGF0ZSBvdXIgdHJ1ZSByYXRpbyAoZm91bmQgdGhyb3VnaCBiaW5hcnkgc2VhcmNoKVxuICAgIGxldCBsb3cgPSAwO1xuICAgIGxldCBoaWdoID0gdW5lbmxhcmdlZFJhdGlvO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTA7IGkrKykge1xuICAgICAgY29uc3QgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjtcbiAgICAgIGlmIChcbiAgICAgICAgZ2V0TWF4Rmxvd0J1Y2tldFNpemUoZGF0YSwgbWlkLCBtaW5pbXVtU2l6ZSwgbGFiZWxTaXplKSA+XG4gICAgICAgIGJ1Y2tldEF2YWlsYWJsZVNpemVcbiAgICAgICkge1xuICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG93ID0gbWlkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbG93ICogZGF0YU1heDtcbiAgfVxuXG4gIC8vVGhlIHNpemUgbmVlZGVkIGFsb25nIHRoZSBkYXRhIGF4aXMgYmV5b25kIHRoZSBmaXhlZCBzaXplXG4gIC8vRm9yIGZsb3cgY2hhcnRzLCB0aGlzIGlzIGJhc2VkIG9uIHRoZSB0YWxsZXN0IGJ1Y2tldCAoaW5jbHVkaW5nIGl0cyBvd24gZGF0YSBsYWJlbHMgYW5kIGFueSBlbmxhcmdlZCBlbGVtZW50cyksXG4gIC8vIHJhdGhlciB0aGFuIGFzc3VtaW5nIHRoZSBidWNrZXQgd2l0aCB0aGUgbW9zdCBkYXRhIGFsc28gaGFzIHRoZSBtb3N0IHN1Yi1idWNrZXRzXG4gIGZ1bmN0aW9uIGdldFNjYWxlZERhdGFUb3RhbFNpemUoXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgZGF0YVNpemU6IG51bWJlcixcbiAgICBsYWJlbFNpemU6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICBpZiAoZGF0YS50eXBlICE9PSAnZmxvdy1wcm9jZXNzZWQnKSB7XG4gICAgICByZXR1cm4gZGF0YVNpemU7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFNYXggPSBNYXRoLm1heCguLi5kYXRhLngubWFwKHggPT4geC50b3RhbENvdW50KSk7XG4gICAgaWYgKGRhdGFNYXggPD0gMCkge1xuICAgICAgcmV0dXJuIGRhdGFTaXplO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgZ2V0TWF4Rmxvd0J1Y2tldFNpemUoXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFTaXplIC8gZGF0YU1heCxcbiAgICAgICAgZ2V0TWluaW11bURhdGFFbGVtZW50U2l6ZShjb25maWcpLFxuICAgICAgICBsYWJlbFNpemUsXG4gICAgICApIC0gZ2V0Rmxvd01pZExhYmVsU2l6ZShkYXRhLCBsYWJlbFNpemUpXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERhdGFMYWJlbFNpemUoXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgcGlwZVRyYW5zZm9ybTogKCh2YWx1ZTogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbikgPT4gc3RyaW5nKSB8IG51bGwsXG4gICAgZm9udFNpemU6IG51bWJlcixcbiAgKTogeyBob3Jpem9udGFsOiBudW1iZXI7IHZlcnRpY2FsOiBudW1iZXIgfSB7XG4gICAgbGV0IG5vcm1Ib3Jpem9udGFsTWF4TGVuZ3RoID0gMDtcbiAgICBsZXQgbm9ybVN1cHBNYXhMZW5ndGggPSAwO1xuICAgIGlmIChkYXRhLnR5cGUgIT09ICdmbG93LXByb2Nlc3NlZCcgJiYgcGlwZVRyYW5zZm9ybSAhPT0gbnVsbCkge1xuICAgICAgbm9ybUhvcml6b250YWxNYXhMZW5ndGggPSBNYXRoLm1heChcbiAgICAgICAgLi4uZGF0YS55cy5tYXAoKHksIHlJbmRleCkgPT5cbiAgICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICAgIC4uLnkudmFsdWVzLm1hcCgodmFsLCB4SW5kZXgpID0+XG4gICAgICAgICAgICAgIGNoZWNrTGFiZWxMZW5ndGgoXG4gICAgICAgICAgICAgICAgcGlwZVRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCB4SW5kZXgsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIG5vcm1TdXBwTWF4TGVuZ3RoID0gTWF0aC5tYXgoXG4gICAgICAgIC4uLihkYXRhLnN1cHBsZW1lbnRhcnlZcyA/PyBbXSkubWFwKCh5LCB5SW5kZXgpID0+XG4gICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAuLi55LnZhbHVlcy5tYXAoKHZhbCwgeEluZGV4KSA9PlxuICAgICAgICAgICAgICBjaGVja0xhYmVsTGVuZ3RoKFxuICAgICAgICAgICAgICAgIHBpcGVUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgeEluZGV4LCB0cnVlKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Zsb3ctcHJvY2Vzc2VkJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG9yaXpvbnRhbDogTWF0aC5tYXgobm9ybUhvcml6b250YWxNYXhMZW5ndGgsIG5vcm1TdXBwTWF4TGVuZ3RoKSxcbiAgICAgICAgdmVydGljYWw6IGZvbnRTaXplICogMixcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBob3Jpem9udGFsOiBNYXRoLm1heChub3JtSG9yaXpvbnRhbE1heExlbmd0aCwgbm9ybVN1cHBNYXhMZW5ndGgpLFxuICAgICAgdmVydGljYWw6IGZvbnRTaXplLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCdWNrZXRMYWJlbFNpemUoXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgZm9udFNpemU6IG51bWJlcixcbiAgICBkYXRlRm9ybWF0OiAoKGRhdGU6IERhdGUpID0+IHN0cmluZykgfCBudWxsLFxuICApIHtcbiAgICBpZiAoZGF0ZUZvcm1hdCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ2xhYmVsZWQnKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgICAuLi5kYXRhLngubWFwKHggPT4gY2hlY2tMYWJlbExlbmd0aCh4LmxhYmVsLCBmb250U2l6ZSkpLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICd0aW1lc2VyaWVzJykge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgICAgLi4uZGF0YS54Lm1hcCh4ID0+XG4gICAgICAgICAgICBjaGVja0xhYmVsTGVuZ3RoKGRhdGVGb3JtYXQobmV3IERhdGUoeCkpLCBmb250U2l6ZSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0xhYmVsTGVuZ3RoKHZhbHVlOiBzdHJpbmcsIGZvbnRTaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHBlcmlvZENvdW50ID0gKHZhbHVlLm1hdGNoKC9cXC4vZykgfHwgW10pLmxlbmd0aDtcbiAgICBjb25zdCBzbGFzaENvdW50ID0gKHZhbHVlLm1hdGNoKC9cXC8vZykgfHwgW10pLmxlbmd0aDtcbiAgICBjb25zdCBmb250U2NhbGVGYWN0b3IgPSBmb250U2l6ZSAvIERFRkFVTFRfRk9OVF9TSVpFO1xuICAgIHJldHVybiAoXG4gICAgICAodmFsdWUubGVuZ3RoIC0gKHBlcmlvZENvdW50ICsgc2xhc2hDb3VudCkpICpcbiAgICAgICAgKFdJRFRIX1BFUl9OVU1CRVIgKiBmb250U2NhbGVGYWN0b3IpICtcbiAgICAgIHBlcmlvZENvdW50ICogKFdJRFRIX1BFUl9QRVJJT0QgKiBmb250U2NhbGVGYWN0b3IpICtcbiAgICAgIHNsYXNoQ291bnQgKiAoV0lEVEhfUEVSX1NMQVNIICogZm9udFNjYWxlRmFjdG9yKVxuICAgICk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNCYXJUeXBlKHR5cGU6IENoYXJ0LkNoYXJ0VHlwZSk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHR5cGUgPT09ICdiYXInIHx8XG4gICAgICB0eXBlID09PSAnaG9yaXpvbnRhbC1iYXInIHx8XG4gICAgICB0eXBlID09PSAnd2F0ZXJmYWxsJyB8fFxuICAgICAgdHlwZSA9PT0gJ2Z1bm5lbCdcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvL09ubHkgYmFyLXR5cGUgYW5kIGZsb3cgY2hhcnRzIGhhdmUgZGlzY3JldGUgZGF0YSBlbGVtZW50cyB0aGF0IHRoZSBtaW5pbXVtIHNpemUgYXBwbGllcyB0b1xuICBmdW5jdGlvbiBnZXRNaW5pbXVtRGF0YUVsZW1lbnRTaXplKGNvbmZpZzogQ29uZmlnKTogbnVtYmVyIHtcbiAgICBpZiAoXG4gICAgICBjb25maWcudHlwZSA9PT0gJ2RvbnV0JyB8fFxuICAgICAgY29uZmlnLnR5cGUgPT09ICdsaW5lJyB8fFxuICAgICAgY29uZmlnLnR5cGUgPT09ICdhcmVhJ1xuICAgICkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBjb25maWcuc2NhbGluZ0NvbmZpZz8uZGF0YVNjYWxlPy5taW5pbXVtRGF0YUVsZW1lbnRTaXplID8/IDA7XG4gIH1cblxuICAvL0FueSBkYXRhIGVsZW1lbnQgd2l0aCBhIG5vbi16ZXJvIHZhbHVlIGlzIGtlcHQgYXQgb3IgYWJvdmUgdGhlIG1pbmltdW0gc2l6ZVxuICBmdW5jdGlvbiBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIHZhbHVlOiBudW1iZXIsXG4gICAgbWluaW11bVNpemU6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IDAgPyBNYXRoLm1heChzaXplLCBtaW5pbXVtU2l6ZSkgOiBzaXplO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Rmxvd1N1YkJ1Y2tldFNpemVzKFxuICAgIHN1YkJ1Y2tldDogRmxvd1N1YkJ1Y2tldCxcbiAgICB2YWx1ZVRvU2l6ZTogKHZhbHVlOiBudW1iZXIpID0+IG51bWJlcixcbiAgICBtaW5pbXVtU2l6ZTogbnVtYmVyLFxuICApOiB7XG4gICAgdG90YWxTaXplOiBudW1iZXI7XG4gICAgY29udGludWluZ1NpemU6IG51bWJlcjtcbiAgICBjb25uZWN0aW9uU2l6ZXM6IG51bWJlcltdO1xuICB9IHtcbiAgICBjb25zdCBjb25uZWN0aW9uU2l6ZXMgPSBzdWJCdWNrZXQuY29ubmVjdGlvbnMubWFwKGNvbm5lY3Rpb24gPT5cbiAgICAgIGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgICAgdmFsdWVUb1NpemUoY29ubmVjdGlvbi5jb3VudCksXG4gICAgICAgIGNvbm5lY3Rpb24uY291bnQsXG4gICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgKSxcbiAgICApO1xuICAgIGNvbnN0IHN1bVNpemVzID0gKGRpcmVjdGlvbjogRmxvd0Nvbm5lY3Rpb25bJ2RpcmVjdGlvbiddKTogbnVtYmVyID0+XG4gICAgICBzdW0oXG4gICAgICAgIGNvbm5lY3Rpb25TaXplcy5maWx0ZXIoXG4gICAgICAgICAgKF8sIGkpID0+IHN1YkJ1Y2tldC5jb25uZWN0aW9uc1tpXS5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbixcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgY29uc3QgY29udGludWluZ1NpemUgPSBzdW1TaXplcygnZm9yd2FyZCcpO1xuICAgIGNvbnN0IG5vbkNvbnRpbnVpbmdDb3VudCA9XG4gICAgICBzdWJCdWNrZXQuY291bnQgLVxuICAgICAgc3VtKFxuICAgICAgICBzdWJCdWNrZXQuY29ubmVjdGlvbnNcbiAgICAgICAgICAuZmlsdGVyKGNvbm5lY3Rpb24gPT4gY29ubmVjdGlvbi5kaXJlY3Rpb24gPT09ICdmb3J3YXJkJylcbiAgICAgICAgICAubWFwKGNvbm5lY3Rpb24gPT4gY29ubmVjdGlvbi5jb3VudCksXG4gICAgICApO1xuICAgIC8vVGhlIHN1Yi1idWNrZXQgbXVzdCBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgYWxsIG9mIGl0cyAocG9zc2libHkgZW5sYXJnZWQpIGNvbm5lY3Rpb25zIG9uIGVpdGhlciBzaWRlXG4gICAgY29uc3QgdG90YWxTaXplID0gTWF0aC5tYXgoXG4gICAgICBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICAgIHZhbHVlVG9TaXplKHN1YkJ1Y2tldC5jb3VudCksXG4gICAgICAgIHN1YkJ1Y2tldC5jb3VudCxcbiAgICAgICAgbWluaW11bVNpemUsXG4gICAgICApLFxuICAgICAgY29udGludWluZ1NpemUgK1xuICAgICAgICBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICAgICAgdmFsdWVUb1NpemUobm9uQ29udGludWluZ0NvdW50KSxcbiAgICAgICAgICBub25Db250aW51aW5nQ291bnQsXG4gICAgICAgICAgbWluaW11bVNpemUsXG4gICAgICAgICksXG4gICAgICBzdW1TaXplcygnYmFja3dhcmQnKSxcbiAgICApO1xuICAgIHJldHVybiB7IHRvdGFsU2l6ZSwgY29udGludWluZ1NpemUsIGNvbm5lY3Rpb25TaXplcyB9O1xuICB9XG5cbiAgLy9UaGUgc2l6ZSBvZiB0aGUgdGFsbGVzdCBmbG93IGJ1Y2tldCBmb3IgdGhlIGdpdmVuIHNjYWxpbmcgcmF0aW8sIGluY2x1ZGluZyB0aGUgZGF0YSBsYWJlbHMgYmV0d2VlbiBpdHMgc3ViLWJ1Y2tldHNcbiAgLy8gIFRoZSBsYWJlbCBhYm92ZSB0aGUgZmlyc3Qgc3ViLWJ1Y2tldCBpcyBleGNsdWRlZCwgc2luY2UgaXQncyBwYXJ0IG9mIHRoZSB0b3Agb2Zmc2V0XG4gIGZ1bmN0aW9uIGdldE1heEZsb3dCdWNrZXRTaXplKFxuICAgIGRhdGE6IFByb2Nlc3NlZEZsb3dEYXRhLFxuICAgIHB4UGVyVmFsdWU6IG51bWJlcixcbiAgICBtaW5pbXVtU2l6ZTogbnVtYmVyLFxuICAgIGxhYmVsU2l6ZTogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIC4uLmRhdGEueC5tYXAoXG4gICAgICAgIGJ1Y2tldCA9PlxuICAgICAgICAgIHN1bShcbiAgICAgICAgICAgIGJ1Y2tldC5zdWJCdWNrZXRzLm1hcChcbiAgICAgICAgICAgICAgc3ViQnVja2V0ID0+XG4gICAgICAgICAgICAgICAgZ2V0Rmxvd1N1YkJ1Y2tldFNpemVzKFxuICAgICAgICAgICAgICAgICAgc3ViQnVja2V0LFxuICAgICAgICAgICAgICAgICAgdmFsdWUgPT4gdmFsdWUgKiBweFBlclZhbHVlLFxuICAgICAgICAgICAgICAgICAgbWluaW11bVNpemUsXG4gICAgICAgICAgICAgICAgKS50b3RhbFNpemUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICkgK1xuICAgICAgICAgIChidWNrZXQuc3ViQnVja2V0cy5sZW5ndGggLSAxKSAqIGxhYmVsU2l6ZSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8vVGhlIGZpeGVkIHNpemUgcmVzZXJ2ZXMgcm9vbSBmb3IgdGhlIGxhYmVscyBiZXR3ZWVuIHN1Yi1idWNrZXRzIGFzIGlmIGV2ZXJ5IGJ1Y2tldCBoYWQgYXMgbWFueSBzdWItYnVja2V0cyBhcyB0aGVcbiAgLy8gYnVja2V0IHdpdGggdGhlIG1vc3QsIHNvIHRoaXMgaXMgdGhlIHBvcnRpb24gb2YgdGhlIGZpeGVkIHNpemUgdGhhdCBlYWNoIGJ1Y2tldCBjYW4gaW5zdGVhZCB1c2UgYmFzZWQgb24gaXRzIG93biBsYWJlbHNcbiAgZnVuY3Rpb24gZ2V0Rmxvd01pZExhYmVsU2l6ZShcbiAgICBkYXRhOiBQcm9jZXNzZWRGbG93RGF0YSxcbiAgICBsYWJlbFNpemU6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKFxuICAgICAgKE1hdGgubWF4KC4uLmRhdGEueC5tYXAoYnVja2V0ID0+IGJ1Y2tldC5zdWJCdWNrZXRzLmxlbmd0aCkpIC0gMSkgKlxuICAgICAgbGFiZWxTaXplXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3RhY2tlZERhdGEoY29uZmlnOiBDb25maWcpOiBib29sZWFuIHtcbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdiYXInIHx8IGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKSB7XG4gICAgICBpZiAoY29uZmlnLmdyb3VwaW5nVHlwZSA9PT0gJ3N0YWNrZWQnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdhcmVhJyB8fCBjb25maWcudHlwZSA9PT0gJ3dhdGVyZmFsbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NsdXN0ZXJlZERhdGEoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgaW5jbHVkZVN1cHBsZW1lbnRhcnk6IGJvb2xlYW4sXG4gICk6IGJvb2xlYW4ge1xuICAgIC8vSXQgdmFyaWVzIHdoZXRoZXIgd2Ugd2FudCB0byBpbmNsdWRlIHN1cHBsZW1lbnRhcnkgZGF0YSBpbiB0aGlzIGNoZWNrXG4gICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpICYmIGluY2x1ZGVTdXBwbGVtZW50YXJ5KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGNvbmZpZy50eXBlID09PSAnYmFyJyB8fCBjb25maWcudHlwZSA9PT0gJ2hvcml6b250YWwtYmFyJykgJiZcbiAgICAgIGNvbmZpZy5ncm91cGluZ1R5cGUgPT09ICdjbHVzdGVyZWQnXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnZnVubmVsJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vSW4gc29tZSBjYXNlcywgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gY2x1c3RlcmVkIGFuZCBzdGFja2VkIGRvZXNuJ3QgbWF0dGVyXG4gIGZ1bmN0aW9uIGlzR3JvdXBpbmdUeXBlRXhjZXB0aW9uKGRhdGE6IE5vbkZsb3dEYXRhLCBjb25maWc6IENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmIChkYXRhLnlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vQ2hlY2tpbmcgZm9yIGEgJ21ldHJpYycgY2hhcnRzLCB3aGljaCBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgaG9yaXpvbnRhbCBiYXIgY2hhcnRzLFxuICAgIC8vIHdoZXJlIGVhY2ggc2VyaWVzIGlzIGFsc28gYSBidWNrZXQgKGFuZCB2aWNlIHZlcnNhKVxuICAgIGlmIChjb25maWcudHlwZSA9PT0gJ2hvcml6b250YWwtYmFyJykge1xuICAgICAgaWYgKFxuICAgICAgICBkYXRhLngubGVuZ3RoID09PSBkYXRhLnlzLmxlbmd0aCAmJlxuICAgICAgICBkYXRhLnlzLmxlbmd0aCA9PT1cbiAgICAgICAgICBkYXRhLnlzLmZpbHRlcih5ID0+IHkudmFsdWVzLmZpbHRlcih2YWwgPT4gdmFsICE9PSAwKS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGE6IElucHV0RGF0YSk6IGRhdGEgaXMgTm9uRmxvd0RhdGEgJiB7XG4gICAgc3VwcGxlbWVudGFyeVlzOiBOb25OdWxsYWJsZTxOb25GbG93RGF0YVsnc3VwcGxlbWVudGFyeVlzJ10+O1xuICB9IHtcbiAgICBpZiAoZGF0YS50eXBlID09PSAnZmxvdycpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGRhdGEuc3VwcGxlbWVudGFyeVlzICYmIGRhdGEuc3VwcGxlbWVudGFyeVlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgZWxlbWVudFNjYWxlczogUGFydGlhbEVsZW1lbnRTY2FsaW5nQ29uZmlnIHwgdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRTY2FsaW5nQ29uZmlnOiBGdWxsRWxlbWVudFNjYWxpbmdDb25maWcsXG4gICAgZWxlbWVudDogQ2hhcnRTY2FsZUVsZW1lbnQsXG4gICk6IEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgZGVmYXVsdEVsZW1lbnRDb25maWcgPSBkZWZhdWx0U2NhbGluZ0NvbmZpZ1tlbGVtZW50XTtcbiAgICBsZXQgaW5wdXRDb25maWc6IEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbiB8IG51bGw7XG4gICAgaWYgKGVsZW1lbnRTY2FsZXMpIHtcbiAgICAgIGNvbnN0IHBvc3NpYmxlQ29uZmlnID0gZWxlbWVudFNjYWxlc1tlbGVtZW50XTtcbiAgICAgIGlmIChwb3NzaWJsZUNvbmZpZykge1xuICAgICAgICBpbnB1dENvbmZpZyA9IHBvc3NpYmxlQ29uZmlnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXRDb25maWcgPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dENvbmZpZyA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGlucHV0Q29uZmlnICE9PSBudWxsKSB7XG4gICAgICBjb25zdCByZXR1cm5Db25maWcgPSBpbnB1dENvbmZpZyBhcyBFbGVtZW50U2NhbGluZ0NvbmZpZ3VyYXRpb247XG4gICAgICByZXR1cm4gcmV0dXJuQ29uZmlnO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdEVsZW1lbnRDb25maWcudGFyZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJldHVybkNvbmZpZyA9IGRlZmF1bHRFbGVtZW50Q29uZmlnIGFzIEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbjtcbiAgICAgIHJldHVybiByZXR1cm5Db25maWc7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IDAsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRldGVybWluZVBvc3NpYmxlU2l6ZXNPZkVsZW1lbnQoXG4gICAgZWxlbWVudENvbmZpZzogRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uLFxuICAgIGVsZW1lbnRDb3VudDogbnVtYmVyLFxuICApOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlcjsgdGFyZ2V0OiBudW1iZXIgfSB7XG4gICAgY29uc3QgaW5kTWluID0gZWxlbWVudENvbmZpZy5taW4gIT09IHVuZGVmaW5lZCA/IGVsZW1lbnRDb25maWcubWluIDogMDtcbiAgICBjb25zdCBpbmRNYXggPSBlbGVtZW50Q29uZmlnLm1heCAhPT0gdW5kZWZpbmVkID8gZWxlbWVudENvbmZpZy5tYXggOiAwO1xuICAgIGNvbnN0IGluZFRhcmdldCA9IGVsZW1lbnRDb25maWcudGFyZ2V0O1xuICAgIHJldHVybiB7XG4gICAgICBtaW46IGluZE1pbiAqIGVsZW1lbnRDb3VudCxcbiAgICAgIG1heDogaW5kTWF4ICogZWxlbWVudENvdW50LFxuICAgICAgdGFyZ2V0OiBpbmRUYXJnZXQgKiBlbGVtZW50Q291bnQsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRldGVybWluZVRvdGFsU2NhbGVkU2l6ZU9mRWxlbWVudChcbiAgICBlbGVtZW50Q29uZmlnOiBFbGVtZW50U2NhbGluZ0NvbmZpZ3VyYXRpb24sXG4gICAgZWxlbWVudENvdW50OiBudW1iZXIsXG4gICAgc2NhbGVWYWx1ZTogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IHNjYWxlZFZhbCA9IGdldFNjYWxlZEVsZW1lbnRTaXplKGVsZW1lbnRDb25maWcsIHNjYWxlVmFsdWUpO1xuICAgIHJldHVybiBzY2FsZWRWYWwgKiBlbGVtZW50Q291bnQ7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTY2FsZWRFbGVtZW50U2l6ZShcbiAgICBlbGVtZW50Q29uZmlnOiBFbGVtZW50U2NhbGluZ0NvbmZpZ3VyYXRpb24sXG4gICAgc2NhbGVWYWx1ZTogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IHNjYWxlZFRhcmdldCA9IGVsZW1lbnRDb25maWcudGFyZ2V0ICogc2NhbGVWYWx1ZTtcbiAgICBpZiAoc2NhbGVWYWx1ZSA8IDEpIHtcbiAgICAgIGlmIChlbGVtZW50Q29uZmlnLm1pbiAmJiBlbGVtZW50Q29uZmlnLm1pbiA+IHNjYWxlZFRhcmdldCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudENvbmZpZy5taW47XG4gICAgICB9XG4gICAgICByZXR1cm4gc2NhbGVkVGFyZ2V0O1xuICAgIH1cbiAgICBpZiAoc2NhbGVWYWx1ZSA+IDEpIHtcbiAgICAgIGlmIChlbGVtZW50Q29uZmlnLm1heCAmJiBlbGVtZW50Q29uZmlnLm1heCA8IHNjYWxlZFRhcmdldCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudENvbmZpZy5tYXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2NhbGVkVGFyZ2V0O1xuICAgIH1cbiAgICByZXR1cm4gc2NhbGVkVGFyZ2V0O1xuICB9XG5cbiAgdHlwZSBFbGVtZW50U2NhbGVDaGVja0luZm8gPSB7XG4gICAgY29uZmlnOiBFbGVtZW50U2NhbGluZ0NvbmZpZ3VyYXRpb247XG4gICAgbWluU2NhbGVGYWN0b3I/OiBudW1iZXI7XG4gICAgbWF4U2NhbGVGYWN0b3I/OiBudW1iZXI7XG4gICAgZWxlbWVudENvdW50OiBudW1iZXI7XG4gIH07XG5cbiAgZnVuY3Rpb24gZ2V0Q2hlY2tpbmdJbmZvRm9yRWxlbWVudENvbmZpZyhcbiAgICBjb25maWc6IEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbixcbiAgICBlbGVtZW50Q291bnQ6IG51bWJlcixcbiAgKTogRWxlbWVudFNjYWxlQ2hlY2tJbmZvIHtcbiAgICBsZXQgbWluU2NhbGVGYWN0b3I6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY29uZmlnLm1pbikge1xuICAgICAgbWluU2NhbGVGYWN0b3IgPVxuICAgICAgICBjb25maWcudGFyZ2V0ICE9PSAwID8gY29uZmlnLm1pbiAvIGNvbmZpZy50YXJnZXQgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBtYXhTY2FsZUZhY3RvcjogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChjb25maWcubWF4KSB7XG4gICAgICBtYXhTY2FsZUZhY3RvciA9XG4gICAgICAgIGNvbmZpZy50YXJnZXQgIT09IDAgPyBjb25maWcubWF4IC8gY29uZmlnLnRhcmdldCA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIG1pblNjYWxlRmFjdG9yLFxuICAgICAgbWF4U2NhbGVGYWN0b3IsXG4gICAgICBlbGVtZW50Q291bnQsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN1bUZvclNjYWxlVmFsdWUoXG4gICAgY2hlY2tJbmZvczogRWxlbWVudFNjYWxlQ2hlY2tJbmZvW10sXG4gICAgc2NhbGVWYWx1ZTogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tJbmZvcykge1xuICAgICAgc3VtICs9IGRldGVybWluZVRvdGFsU2NhbGVkU2l6ZU9mRWxlbWVudChcbiAgICAgICAgY2hlY2suY29uZmlnLFxuICAgICAgICBjaGVjay5lbGVtZW50Q291bnQsXG4gICAgICAgIHNjYWxlVmFsdWUsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gc3VtO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGF0YUxhYmVsU2l6aW5nQ291bnQoXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICk6IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXI7IHRvdGFsOiBudW1iZXIgfSB7XG4gICAgaWYgKGNvbmZpZy5zaG93RGF0YUxhYmVscyAhPT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgIGVuZDogMCxcbiAgICAgICAgdG90YWw6IDAsXG4gICAgICB9O1xuICAgIH1cbiAgICAvL0RhdGEgbGFiZWxzIGFyZSBhbHdheXMgc2hvd24gYWJvdmUgdGhlIGRhdGEgZm9yIGFsbCBidXQgdGhlc2UgMyB0eXBlc1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy50eXBlICE9PSAnYmFyJyAmJlxuICAgICAgY29uZmlnLnR5cGUgIT09ICdob3Jpem9udGFsLWJhcicgJiZcbiAgICAgIGNvbmZpZy50eXBlICE9PSAnd2F0ZXJmYWxsJyAmJlxuICAgICAgY29uZmlnLnR5cGUgIT09ICdmbG93J1xuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IDEsXG4gICAgICAgIGVuZDogMCxcbiAgICAgICAgdG90YWw6IDEsXG4gICAgICB9O1xuICAgIH1cbiAgICBsZXQgc3RhcnRDb3VudCA9IDA7XG4gICAgbGV0IG1pZENvdW50ID0gMDtcbiAgICBsZXQgZW5kQ291bnQgPSAwO1xuICAgIGlmIChkYXRhLnR5cGUgIT09ICdmbG93LXByb2Nlc3NlZCcpIHtcbiAgICAgIGlmIChkYXRhLnlzLmZpbmQoeSA9PiB5LnZhbHVlcy5maW5kKHZhbCA9PiB2YWwgPj0gMCkpKSB7XG4gICAgICAgIGlmIChjb25maWcudHlwZSA9PT0gJ2hvcml6b250YWwtYmFyJykge1xuICAgICAgICAgIGVuZENvdW50ICs9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRDb3VudCArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS55cy5maW5kKHkgPT4geS52YWx1ZXMuZmluZCh2YWwgPT4gdmFsIDwgMCkpKSB7XG4gICAgICAgIGlmIChjb25maWcudHlwZSA9PT0gJ2hvcml6b250YWwtYmFyJykge1xuICAgICAgICAgIHN0YXJ0Q291bnQgKz0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmRDb3VudCArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0Q291bnQgPSAxO1xuICAgICAgbWlkQ291bnQgPSBNYXRoLm1heCguLi5kYXRhLngubWFwKHggPT4geC5zdWJCdWNrZXRzLmxlbmd0aCkpIC0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBzdGFydENvdW50LFxuICAgICAgZW5kOiBlbmRDb3VudCxcbiAgICAgIHRvdGFsOiBzdGFydENvdW50ICsgbWlkQ291bnQgKyBlbmRDb3VudCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SWZIb3Zlck91dE9mQm91bmRzKFxuICAgIC8vUG9zaXRpb24gbm90IGFjY291bnRpbmcgZm9yIHNjcm9sbGluZ1xuICAgIHJlbFBvc1g6IG51bWJlcixcbiAgICByZWxQb3NZOiBudW1iZXIsXG4gICAgLy9Qb3NpdGlvbiBhY2NvdW50aW5nIGZvciBzY3JvbGxpbmdcbiAgICByZWFsUG9zWDogbnVtYmVyLFxuICAgIHJlYWxQb3NZOiBudW1iZXIsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzIHwgbnVsbCxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBib29sZWFuIHtcbiAgICAvL0NoZWNrIGlmIHdlJ3JlIG9uIHRvcCBvZiBvbmUgb2YgdGhlIHNjcm9sbGJhcnNcbiAgICBpZiAocmVsUG9zWCA+IGRpbWVuc2lvbnMud2lkdGggfHwgcmVsUG9zWSA+IGRpbWVuc2lvbnMuaGVpZ2h0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsKSB7XG4gICAgICAvL0lmIGNoYXJ0U2l6aW5nVmFsdWVzIGFyZW4ndCBwcm92aWRlZCwgbm8gbW9yZSBjaGVja3NcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy9DaGVjayBpZiB3ZSdyZSBpbiBvbmUgb2YgdGhlIHBhZGRpbmcgYXJlYXNcbiAgICBpZiAoXG4gICAgICByZWFsUG9zWCA8IGNoYXJ0U2l6aW5nVmFsdWVzLmxlZnRQYWRkaW5nIHx8XG4gICAgICByZWFsUG9zWCA+XG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsV2lkdGggLSBjaGFydFNpemluZ1ZhbHVlcy5yaWdodFBhZGRpbmcgfHxcbiAgICAgIHJlYWxQb3NZIDwgY2hhcnRTaXppbmdWYWx1ZXMudG9wUGFkZGluZyB8fFxuICAgICAgcmVhbFBvc1kgPiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbEhlaWdodCAtIGNoYXJ0U2l6aW5nVmFsdWVzLmJvdHRvbVBhZGRpbmdcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDaGFydERhdGFEaXJlY3Rpb24oY29uZmlnOiBDb25maWcpOiBDaGFydERhdGFEaXJlY3Rpb24ge1xuICAgIGlmIChjb25maWcudHlwZSA9PT0gJ2hvcml6b250YWwtYmFyJykge1xuICAgICAgcmV0dXJuICdob3Jpem9udGFsJztcbiAgICB9XG4gICAgcmV0dXJuICd2ZXJ0aWNhbCc7XG4gIH1cblxuICBmdW5jdGlvbiBjb21iaW5lU2NhbGluZ0luZm8oXG4gICAgY29uZmlnOiBDb25maWdXaXRoRnVsbFNjYWxpbmcsXG4gICAgZGVmYXVsdENvbmZpZzogRGVmYXVsdFNjYWxpbmdDb25maWcsXG4gICk6IE5vbkVsZW1lbnRTY2FsaW5nQ29uZmlnIHtcbiAgICBjb25zdCBwcm92aWRlZFNjYWxpbmdDb25maWcgPSBjb25maWcuc2NhbGluZ0NvbmZpZztcbiAgICBjb25zdCBjaGFydERhdGFEaXJlY3Rpb24gPSBnZXRDaGFydERhdGFEaXJlY3Rpb24oY29uZmlnKTtcblxuICAgIC8vSWYgdGhlIHVzZXIgcHJvdmlkZXMgYSBkYXRhIHNjYWxlLCB3ZSBkb24ndCB3YW50IHRvIG92ZXJyaWRlIHRoYXQgdW5sZXNzIHRoZXkgYWxzbyBwcm92aWRlZCBhIHNwZWNpZmljIHNjYWxlIGZvciB0aGUgY29ycmVzcG9uZGluZyBheGlzXG4gICAgY29uc3QgZGF0YVNjYWxlID1cbiAgICAgIHByb3ZpZGVkU2NhbGluZ0NvbmZpZyAmJiBwcm92aWRlZFNjYWxpbmdDb25maWcuZGF0YVNjYWxlXG4gICAgICAgID8gcHJvdmlkZWRTY2FsaW5nQ29uZmlnLmRhdGFTY2FsZVxuICAgICAgICA6IGRlZmF1bHRDb25maWcubm9uRWxlbWVudFNjYWxlcy5kYXRhU2NhbGU7XG4gICAgbGV0IHZlcnRpY2FsQXhpc1NjYWxlID0gcHJvdmlkZWRTY2FsaW5nQ29uZmlnPy52ZXJ0aWNhbEF4aXNTY2FsZTtcbiAgICBpZiAodmVydGljYWxBeGlzU2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGRhdGFTY2FsZS50eXBlID09PSAnZml0Jykge1xuICAgICAgICB2ZXJ0aWNhbEF4aXNTY2FsZSA9IGRlZmF1bHRDb25maWcubm9uRWxlbWVudFNjYWxlcy52ZXJ0aWNhbEF4aXNTY2FsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vVGhlIHZlcnRpY2FsIGF4aXMgaXMgdGhlIGRhdGEgYXhpcywgdGhlIGRhdGFTY2FsZSBoYXMgYSB1c2VyLWlucHV0dGVkIHZhbHVlLCBhbmQgdGhlcmUgaXNuJ3QgYSB1c2VyLWlucHV0dGVkIHZlcnRpY2FsQXhpc1NjYWxlXG4gICAgICAgIC8vIFNvLCB3ZSdsbCBwcmV2ZW50IHRoZSBheGlzIHNjYWxpbmcgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSBkYXRhU2NhbGVcbiAgICAgICAgdmVydGljYWxBeGlzU2NhbGUgPSAnbm8tc2NhbGUnO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgaG9yaXpvbnRhbEF4aXNTY2FsZSA9IHByb3ZpZGVkU2NhbGluZ0NvbmZpZz8uaG9yaXpvbnRhbEF4aXNTY2FsZTtcbiAgICBpZiAoaG9yaXpvbnRhbEF4aXNTY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY2hhcnREYXRhRGlyZWN0aW9uID09PSAndmVydGljYWwnIHx8IGRhdGFTY2FsZS50eXBlID09PSAnZml0Jykge1xuICAgICAgICBob3Jpem9udGFsQXhpc1NjYWxlID1cbiAgICAgICAgICBkZWZhdWx0Q29uZmlnLm5vbkVsZW1lbnRTY2FsZXMuaG9yaXpvbnRhbEF4aXNTY2FsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vVGhlIGhvcml6b250YWwgYXhpcyBpcyB0aGUgZGF0YSBheGlzLCB0aGUgZGF0YVNjYWxlIGhhcyBhIHVzZXItaW5wdXR0ZWQgdmFsdWUsIGFuZCB0aGVyZSBpc24ndCBhIHVzZXItaW5wdXR0ZWQgaG9yaXpvbnRhbEF4aXNTY2FsZVxuICAgICAgICAvLyBTbywgd2UnbGwgcHJldmVudCB0aGUgYXhpcyBzY2FsaW5nIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgZGF0YVNjYWxlXG4gICAgICAgIGhvcml6b250YWxBeGlzU2NhbGUgPSAnbm8tc2NhbGUnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YVNjYWxlOlxuICAgICAgICBwcm92aWRlZFNjYWxpbmdDb25maWcgJiYgcHJvdmlkZWRTY2FsaW5nQ29uZmlnLmRhdGFTY2FsZVxuICAgICAgICAgID8gcHJvdmlkZWRTY2FsaW5nQ29uZmlnLmRhdGFTY2FsZVxuICAgICAgICAgIDogZGVmYXVsdENvbmZpZy5ub25FbGVtZW50U2NhbGVzLmRhdGFTY2FsZSxcbiAgICAgIGhvcml6b250YWxBeGlzU2NhbGUsXG4gICAgICB2ZXJ0aWNhbEF4aXNTY2FsZSxcbiAgICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZTpcbiAgICAgICAgcHJvdmlkZWRTY2FsaW5nQ29uZmlnICYmIHByb3ZpZGVkU2NhbGluZ0NvbmZpZy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGVcbiAgICAgICAgICA/IHByb3ZpZGVkU2NhbGluZ0NvbmZpZy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGVcbiAgICAgICAgICA6IGRlZmF1bHRDb25maWcubm9uRWxlbWVudFNjYWxlcy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGUsXG4gICAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlOlxuICAgICAgICBwcm92aWRlZFNjYWxpbmdDb25maWcgJiYgcHJvdmlkZWRTY2FsaW5nQ29uZmlnLnZlcnRpY2FsQ29udGFpbmVyU2NhbGVcbiAgICAgICAgICA/IHByb3ZpZGVkU2NhbGluZ0NvbmZpZy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlXG4gICAgICAgICAgOiBkZWZhdWx0Q29uZmlnLm5vbkVsZW1lbnRTY2FsZXMudmVydGljYWxDb250YWluZXJTY2FsZSxcbiAgICAgIHRhcmdldFRpY2tDb3VudDpcbiAgICAgICAgcHJvdmlkZWRTY2FsaW5nQ29uZmlnICYmXG4gICAgICAgIHByb3ZpZGVkU2NhbGluZ0NvbmZpZy50YXJnZXRUaWNrQ291bnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gcHJvdmlkZWRTY2FsaW5nQ29uZmlnLnRhcmdldFRpY2tDb3VudFxuICAgICAgICAgIDogZGVmYXVsdENvbmZpZy5ub25FbGVtZW50U2NhbGVzLnRhcmdldFRpY2tDb3VudCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaXNEZUVtcGhhc2l6ZWQoXG4gICAgY29uZmlnOiBGbG93Q29uZmlnLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgaXNEYXJrZW5lZDogYm9vbGVhbixcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ZWRCdWNrZXRzID0gY29uZmlnLmZsb3dDb25maWcuc3ViQnVja2V0c0NvbmZpZ1xuICAgICAgLmZpbHRlcihzYmMgPT4gc2JjLmlzSGlnaGxpZ2h0ZWQgPT09IHRydWUpXG4gICAgICAubWFwKHNiYyA9PiBzYmMuYnVja2V0SWQpO1xuICAgIGlmIChoaWdobGlnaHRlZEJ1Y2tldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpc0RhcmtlbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGhpZ2hsaWdodGVkQnVja2V0cy5zb21lKGhiID0+IGhiID09PSBpZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVGbG93Q29ubmVjdGlvblBhdGgoXG4gICAgY29ubmVjdGlvbjogRmxvd0Nvbm5lY3Rpb25SZW5kZXIsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgZHggPSBjb25uZWN0aW9uLnRvcExpbmUueDIgLSBjb25uZWN0aW9uLnRvcExpbmUueDE7XG4gICAgY29uc3QgY3VydmUgPSBNYXRoLmFicyhkeCkgKiBGTE9XX0NPTk5FQ1RJT05fQ1VSVkVfQ09OU1RBTlQ7XG5cbiAgICBjb25zdCBwYXRoID0gYFxuICAgICAgTSAke2Nvbm5lY3Rpb24udG9wTGluZS54MX0sJHtjb25uZWN0aW9uLnRvcExpbmUueTF9XG5cbiAgICAgIEMgJHtjb25uZWN0aW9uLnRvcExpbmUueDEgKyBjdXJ2ZX0sJHtjb25uZWN0aW9uLnRvcExpbmUueTF9XG4gICAgICAgICR7Y29ubmVjdGlvbi50b3BMaW5lLngyIC0gY3VydmV9LCR7Y29ubmVjdGlvbi50b3BMaW5lLnkyfVxuICAgICAgICAke2Nvbm5lY3Rpb24udG9wTGluZS54Mn0sJHtjb25uZWN0aW9uLnRvcExpbmUueTJ9XG5cbiAgICAgIEwgJHtjb25uZWN0aW9uLmJvdHRvbUxpbmUueDJ9LCR7Y29ubmVjdGlvbi5ib3R0b21MaW5lLnkyfVxuXG4gICAgICBDICR7Y29ubmVjdGlvbi5ib3R0b21MaW5lLngyIC0gY3VydmV9LCR7Y29ubmVjdGlvbi5ib3R0b21MaW5lLnkyfVxuICAgICAgICAke2Nvbm5lY3Rpb24uYm90dG9tTGluZS54MSArIGN1cnZlfSwke2Nvbm5lY3Rpb24uYm90dG9tTGluZS55MX1cbiAgICAgICAgJHtjb25uZWN0aW9uLmJvdHRvbUxpbmUueDF9LCR7Y29ubmVjdGlvbi5ib3R0b21MaW5lLnkxfVxuXG4gICAgICBaXG4gICAgYDtcblxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgZnVuY3Rpb24gY3ViaWMoXG4gICAgYTogbnVtYmVyLFxuICAgIGI6IG51bWJlcixcbiAgICBjOiBudW1iZXIsXG4gICAgZDogbnVtYmVyLFxuICAgIHQ6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICBjb25zdCBtdCA9IDEgLSB0O1xuICAgIHJldHVybiBtdCAqKiAzICogYSArIDMgKiBtdCAqKiAyICogdCAqIGIgKyAzICogbXQgKiB0ICoqIDIgKiBjICsgdCAqKiAzICogZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJlemllcllBdFgoXG4gICAgeDogbnVtYmVyLFxuICAgIGxpbmU6IHtcbiAgICAgIHgxOiBudW1iZXI7XG4gICAgICB5MTogbnVtYmVyO1xuICAgICAgeDI6IG51bWJlcjtcbiAgICAgIHkyOiBudW1iZXI7XG4gICAgfSxcbiAgKTogbnVtYmVyIHtcbiAgICBjb25zdCBjdXJ2ZSA9IE1hdGguYWJzKGxpbmUueDIgLSBsaW5lLngxKSAqIEZMT1dfQ09OTkVDVElPTl9DVVJWRV9DT05TVEFOVDtcbiAgICBjb25zdCBwMCA9IHsgeDogbGluZS54MSwgeTogbGluZS55MSB9O1xuICAgIGNvbnN0IHAxID0geyB4OiBsaW5lLngxICsgY3VydmUsIHk6IGxpbmUueTEgfTtcbiAgICBjb25zdCBwMiA9IHsgeDogbGluZS54MiAtIGN1cnZlLCB5OiBsaW5lLnkyIH07XG4gICAgY29uc3QgcDMgPSB7IHg6IGxpbmUueDIsIHk6IGxpbmUueTIgfTtcblxuICAgIGxldCBsbyA9IDA7XG4gICAgbGV0IGhpID0gMTtcblxuICAgIC8vIEJpbmFyeSBzZWFyY2ggZm9yIHQgd2hlcmUgYmV6aWVyWCh0KSB+PSB4XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gKGxvICsgaGkpIC8gMjtcbiAgICAgIGNvbnN0IGJ4ID0gY3ViaWMocDAueCwgcDEueCwgcDIueCwgcDMueCwgdCk7XG5cbiAgICAgIGlmIChieCA8IHgpIGxvID0gdDtcbiAgICAgIGVsc2UgaGkgPSB0O1xuICAgIH1cblxuICAgIGNvbnN0IHQgPSAobG8gKyBoaSkgLyAyO1xuICAgIHJldHVybiBjdWJpYyhwMC55LCBwMS55LCBwMi55LCBwMy55LCB0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrSWZQb2ludFdpdGhpbkNvbm5lY3Rpb24oXG4gICAgY29ubmVjdGlvbjogRmxvd0Nvbm5lY3Rpb25SZW5kZXIsXG4gICAgcG9pbnRYOiBudW1iZXIsXG4gICAgcG9pbnRZOiBudW1iZXIsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRvcFkgPSBiZXppZXJZQXRYKHBvaW50WCwgY29ubmVjdGlvbi50b3BMaW5lKTtcblxuICAgIGNvbnN0IGJvdHRvbVkgPSBiZXppZXJZQXRYKHBvaW50WCwgY29ubmVjdGlvbi5ib3R0b21MaW5lKTtcblxuICAgIHJldHVybiAoXG4gICAgICBwb2ludFggPj0gY29ubmVjdGlvbi50b3BMaW5lLngxICYmXG4gICAgICBwb2ludFggPD0gY29ubmVjdGlvbi50b3BMaW5lLngyICYmXG4gICAgICBwb2ludFkgPj0gTWF0aC5taW4odG9wWSwgYm90dG9tWSkgJiZcbiAgICAgIHBvaW50WSA8PSBNYXRoLm1heCh0b3BZLCBib3R0b21ZKVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRGbG93QnVja2V0SW5kZXhGb3JIb3ZlcihcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gICAgeFBvczogbnVtYmVyLFxuICApOiB7IGluZGV4OiBudW1iZXI7IGFyZWE6ICdiYXInIHwgJ2Nvbm5lY3Rpb24nIH0gfCBudWxsIHtcbiAgICBsZXQgYnVja2V0SW5kZXggPSAwO1xuICAgIGNvbnN0IGJ1Y2tldExlZnRFZGdlID0gY2hhcnRTaXppbmdWYWx1ZXMudG90YWxMZWZ0T2Zmc2V0O1xuICAgIGNvbnN0IHRvdGFsQnVja2V0R2FwID1cbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgKyBjaGFydFNpemluZ1ZhbHVlcy5idWNrZXRHYXA7XG4gICAgaWYgKGJ1Y2tldExlZnRFZGdlID4geFBvcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHdoaWxlIChidWNrZXRMZWZ0RWRnZSArIGJ1Y2tldEluZGV4ICogdG90YWxCdWNrZXRHYXAgPCB4UG9zKSB7XG4gICAgICBpZiAoYnVja2V0TGVmdEVkZ2UgKyAoYnVja2V0SW5kZXggKyAxKSAqIHRvdGFsQnVja2V0R2FwID4geFBvcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYnVja2V0TGVmdEVkZ2UgK1xuICAgICAgICAgICAgYnVja2V0SW5kZXggKiB0b3RhbEJ1Y2tldEdhcCArXG4gICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplID5cbiAgICAgICAgICB4UG9zXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmRleDogYnVja2V0SW5kZXgsXG4gICAgICAgICAgICBhcmVhOiAnYmFyJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmRleDogYnVja2V0SW5kZXgsXG4gICAgICAgICAgICBhcmVhOiAnY29ubmVjdGlvbicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnVja2V0SW5kZXggKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvL1RoZXNlIG92ZXJsb2FkcyBlbnN1cmUgdGhlIGZ1bmN0aW9uIGtub3dzIHRoYXQsIGlmIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGRlZmluZWQgb24gaW5wdXQsIHRoZXknbGwgYmUgZGVmaW5lZCBvbiBvdXRwdXRcbiAgZnVuY3Rpb24gY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgIGFuY2hvclg6IG51bWJlcixcbiAgICBhbmNob3JZOiBudW1iZXIsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogeyBhbmNob3JYOiBudW1iZXI7IGFuY2hvclk6IG51bWJlciB9O1xuXG4gIGZ1bmN0aW9uIGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICBhbmNob3JYOiBudW1iZXIsXG4gICAgYW5jaG9yWTogbnVtYmVyLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgKToge1xuICAgIGFuY2hvclg6IG51bWJlcjtcbiAgICBhbmNob3JZOiBudW1iZXI7XG4gICAgYW5jaG9yV2lkdGg6IG51bWJlcjtcbiAgICBhbmNob3JIZWlnaHQ6IG51bWJlcjtcbiAgfTtcblxuICBmdW5jdGlvbiBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgYW5jaG9yWDogbnVtYmVyLFxuICAgIGFuY2hvclk6IG51bWJlcixcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICAgIHdpZHRoPzogbnVtYmVyLFxuICAgIGhlaWdodD86IG51bWJlcixcbiAgKToge1xuICAgIGFuY2hvclg6IG51bWJlcjtcbiAgICBhbmNob3JZOiBudW1iZXI7XG4gICAgYW5jaG9yV2lkdGg/OiBudW1iZXI7XG4gICAgYW5jaG9ySGVpZ2h0PzogbnVtYmVyO1xuICB9IHtcbiAgICBsZXQgcmV0QW5jaG9yWCA9IGFuY2hvclg7XG4gICAgbGV0IHJldEFuY2hvclkgPSBhbmNob3JZO1xuICAgIGxldCByZXRXaWR0aDogbnVtYmVyIHwgdW5kZWZpbmVkID0gd2lkdGg7XG4gICAgbGV0IHJldEhlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkID0gaGVpZ2h0O1xuICAgIGlmIChyZXRBbmNob3JYID4gZGltZW5zaW9ucy53aWR0aCkge1xuICAgICAgcmV0QW5jaG9yWCA9IGRpbWVuc2lvbnMud2lkdGg7XG4gICAgICBpZiAocmV0V2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXRXaWR0aCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXRBbmNob3JYIDwgMCkge1xuICAgICAgcmV0QW5jaG9yWCA9IDA7XG4gICAgICBpZiAocmV0V2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXRXaWR0aCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXRBbmNob3JZID4gZGltZW5zaW9ucy5oZWlnaHQpIHtcbiAgICAgIHJldEFuY2hvclkgPSBkaW1lbnNpb25zLmhlaWdodDtcbiAgICAgIGlmIChyZXRIZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXRIZWlnaHQgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmV0QW5jaG9yWSA8IDApIHtcbiAgICAgIHJldEFuY2hvclkgPSAwO1xuICAgICAgaWYgKHJldEhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldEhlaWdodCA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFuY2hvclg6IHJldEFuY2hvclgsXG4gICAgICBhbmNob3JZOiByZXRBbmNob3JZLFxuICAgICAgYW5jaG9yV2lkdGg6IHJldFdpZHRoLFxuICAgICAgYW5jaG9ySGVpZ2h0OiByZXRIZWlnaHQsXG4gICAgfTtcbiAgfVxufVxuIl19
3759
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV2RSxPQUFPLEVBSUwsd0JBQXdCLEVBSXhCLHFCQUFxQixFQUlyQixrQ0FBa0MsR0FHbkMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixNQUFNLEtBQVcsS0FBSyxDQSswTHJCO0FBLzBMRCxXQUFpQixLQUFLO0lBQ1AseUJBQW1CLEdBQUc7UUFDakMsYUFBYTtRQUNiLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLGdDQUFnQztRQUNoQyxpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCwrQkFBK0I7UUFDL0IsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO0tBQ1osQ0FBQztJQUVGLFNBQWdCLEtBQUssQ0FDbkIsTUFBYyxFQUNkLElBQWUsRUFDZixVQUFzQjtRQUV0QixPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTTtZQUMzQixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU07Z0JBQ3hCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU87b0JBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUM7b0JBQ2hDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLGdCQUFnQjt3QkFDbEMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQzt3QkFDMUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssS0FBSzs0QkFDdkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQzs0QkFDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssV0FBVztnQ0FDN0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQztnQ0FDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUTtvQ0FDMUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQztvQ0FDbEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTTt3Q0FDeEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQzt3Q0FDakMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUNqQixDQUFDO0lBdEJlLFdBQUssUUFzQnBCLENBQUE7SUFFRCxTQUFTLEtBQUssQ0FDWixNQUE2QixFQUM3QixPQUFrQixFQUNsQixVQUFzQjtRQUV0QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNsQyxPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQ2hEO1FBQ0QsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDakMsc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQ1YscUVBQXFFLENBQ3RFLENBQUM7WUFDRixPQUFPLFVBQVUsQ0FBQztTQUNuQjtRQUNELElBQUksb0JBQW9CLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEMsc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysc0VBQXNFLENBQ3ZFLENBQUM7WUFDRixPQUFPLFVBQVUsQ0FBQztTQUNuQjtRQUNELHVCQUF1QixDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRSw2RUFBNkU7UUFDN0UsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBRXhCLE1BQU0sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxHQUFHLHNCQUFzQixDQUNsRSxPQUFPLEVBQ1AsSUFBSSxFQUNKLE1BQU0sQ0FDUCxDQUFDO1FBRUYsTUFBTSxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FDL0MsTUFBTSxFQUNOLElBQUksRUFDSixVQUFVLEVBQ1YsYUFBYSxFQUNiLFVBQVUsQ0FDWCxDQUFDO1FBQ0YsSUFBSSxpQkFBaUIsS0FBSyxJQUFJLEVBQUU7WUFDOUIsT0FBTyxFQUFFLEdBQUcsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQztTQUNoRDtRQUVELE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDeEQsTUFBTSxNQUFNLEdBQUcsdUJBQXVCLENBQ3BDLElBQUksRUFDSixNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLENBQ1gsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQWEsRUFBVSxFQUFFO1lBQ3ZDLE9BQU8sQ0FDTCxpQkFBaUIsQ0FBQyxlQUFlLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FDeEUsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUNGLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLDBCQUEwQixDQUM1RCxJQUFJLEVBQ0osYUFBYSxFQUNiLE1BQU0sRUFDTixpQkFBaUIsQ0FDbEIsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUNULElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDZixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQixJQUFJLEVBQUUsSUFBSSxDQUNSLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNkLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUN2QyxDQUFDLE9BQU8sQ0FBQztnQkFDVixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87YUFDbkIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNULE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDM0IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDM0QsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVULE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDO1FBQ25ELE1BQU0sVUFBVSxHQUFnQixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUM1RCxNQUFNLFNBQVMsR0FBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxXQUFXLEVBQUUsV0FBVztnQkFDeEIsS0FBSyxFQUFFLGFBQWEsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDakUsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU87Z0JBQ2xFLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUNwQixNQUFNLEVBQUUsUUFBUTthQUNqQixDQUFDLENBQUMsQ0FBQztZQUNKLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxLQUFLLENBQUMsR0FNZDtZQUNDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDO1lBQzlDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDO1lBQzlDLElBQ0UsaUJBQWlCLEtBQUssSUFBSTtnQkFDMUIscUJBQXFCLENBQ25CLEdBQUcsQ0FBQyxDQUFDLEVBQ0wsR0FBRyxDQUFDLENBQUMsRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLGlCQUFpQixFQUNqQixVQUFVLENBQ1gsRUFDRDtnQkFDQSxPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsTUFBTSxhQUFhLEdBQUcsOEJBQThCLENBQ2xELFFBQVEsRUFDUixpQkFBaUIsRUFDakIsSUFBSSxFQUNKLE1BQU0sRUFDTixJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDZCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbEIsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QixNQUFNLGFBQWEsR0FBRyw2QkFBNkIsQ0FDakQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZCLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQzthQUMvQyxDQUFDLENBQUMsRUFDSCxHQUFHLENBQUMsQ0FBQyxFQUNMLEtBQUssQ0FDTixDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQzlCLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FDM0QsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBVSxFQUFFLEVBQUUsQ0FDNUIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRWpELHlFQUF5RTtZQUN6RSx1RUFBdUU7WUFDdkUseUVBQXlFO1lBQ3pFLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDOUMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5RCxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLHdCQUF3QixDQUNuRCxZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsQ0FDWCxDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQ3hCLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDcEIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNwQixhQUFhLEVBQ2IsQ0FBQyxDQUNGLENBQUM7WUFDRixPQUFPO2dCQUNMLFNBQVMsRUFBRSxVQUFVO2dCQUNyQixDQUFDO2dCQUNELE1BQU07Z0JBQ04sRUFBRTtnQkFDRixNQUFNO2dCQUNOLGFBQWE7Z0JBQ2IsT0FBTyxFQUFFO29CQUNQLE1BQU07b0JBQ04sSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ3RDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTt5QkFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUNsQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO3dCQUNwQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7d0JBQ2QsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO3dCQUNsQixLQUFLLEVBQ0gsYUFBYSxDQUNYLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ2hCLGdCQUFnQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQ3JDLElBQUksQ0FDTCxJQUFJLEdBQUc7cUJBQ1gsQ0FBQyxDQUFDO3lCQUNGLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksQ0FBQyxLQUFLLGFBQWEsQ0FBQztpQkFDbEU7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU87WUFDTCxVQUFVLEVBQUUsaUJBQWlCLENBQUMsVUFBVTtZQUN4QyxXQUFXLEVBQUUsaUJBQWlCLENBQUMsV0FBVztZQUMxQyxpQkFBaUI7WUFDakIsTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sS0FBSztZQUNMLE9BQU87WUFDUCxLQUFLO1lBQ0wsSUFBSSxFQUFFLEVBQUU7WUFDUixLQUFLLEVBQUUsRUFBRTtZQUNULElBQUksRUFBRSxFQUFFO1lBQ1IsY0FBYyxFQUFFLEVBQUU7WUFDbEIsVUFBVTtZQUNWLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLFNBQVMsRUFBRSxFQUFFO1lBQ2IsZUFBZSxFQUFFLEVBQUU7WUFDbkIsd0JBQXdCLEVBQUUsaUJBQWlCLENBQUMsd0JBQXdCO1lBQ3BFLHNCQUFzQixFQUFFLGlCQUFpQixDQUFDLHNCQUFzQjtZQUNoRSxVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsS0FBSyxDQUNaLE1BQTZCLEVBQzdCLE9BQWtCLEVBQ2xCLFVBQXNCO1FBRXRCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ2xDLE9BQU8sRUFBRSxHQUFHLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDaEQ7UUFDRCxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsSUFBSSxhQUFhLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUNwQyxzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLElBQUksQ0FDVixxRUFBcUUsQ0FDdEUsQ0FBQztZQUNGLE9BQU8sVUFBVSxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxNQUFNLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtZQUNsQyxzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLElBQUksQ0FDVixtRUFBbUUsQ0FDcEUsQ0FBQztZQUNGLE9BQU8sVUFBVSxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUN2QyxzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLElBQUksQ0FDVixzRUFBc0UsQ0FDdkUsQ0FBQztZQUNGLE9BQU8sVUFBVSxDQUFDO1NBQ25CO1FBQ0QsdUJBQXVCLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUQsNkVBQTZFO1FBQzdFLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUUzQixNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxzQkFBc0IsQ0FDbEUsT0FBTyxFQUNQLElBQUksRUFDSixNQUFNLENBQ1AsQ0FBQztRQUNGLE1BQU0saUJBQWlCLEdBQUcsdUJBQXVCLENBQy9DLE1BQU0sRUFDTixJQUFJLEVBQ0osVUFBVSxFQUNWLGFBQWEsRUFDYixVQUFVLENBQ1gsQ0FBQztRQUNGLElBQUksaUJBQWlCLEtBQUssSUFBSSxFQUFFO1lBQzlCLE9BQU8sRUFBRSxHQUFHLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDaEQ7UUFFRCxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sTUFBTSxHQUFHLHVCQUF1QixDQUNwQyxJQUFJLEVBQ0osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxDQUNYLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFhLEVBQVUsRUFBRTtZQUN2QyxPQUFPLENBQ0wsaUJBQWlCLENBQUMsZUFBZSxHQUFHLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQ3hFLENBQUM7UUFDSixDQUFDLENBQUM7UUFDRixNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRywwQkFBMEIsQ0FDNUQsSUFBSSxFQUNKLGFBQWEsRUFDYixNQUFNLEVBQ04saUJBQWlCLENBQ2xCLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEQsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4QyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87WUFDbEIsSUFBSSxFQUFFLElBQUksQ0FDUixDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDZCxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUN2RCxDQUFDLENBQUMsRUFBRSxDQUNGLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTTtnQkFDbEQsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQ3JELENBQUMsT0FBTyxDQUFDO1NBQ1gsQ0FBQyxDQUFDLENBQUM7UUFFSixTQUFTLEtBQUssQ0FBQyxHQU1kO1lBQ0MsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDOUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDOUMsSUFDRSxpQkFBaUIsS0FBSyxJQUFJO2dCQUMxQixxQkFBcUIsQ0FDbkIsR0FBRyxDQUFDLENBQUMsRUFDTCxHQUFHLENBQUMsQ0FBQyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLFVBQVUsQ0FDWCxFQUNEO2dCQUNBLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxNQUFNLGFBQWEsR0FBRyw4QkFBOEIsQ0FDbEQsUUFBUSxFQUNSLGlCQUFpQixFQUNqQixJQUFJLEVBQ0osTUFBTSxFQUNOLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUNkLENBQUM7WUFDRixJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNsQixPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUM7WUFDNUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQzFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3BELENBQUM7WUFDRixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLDRIQUE0SDtZQUM1SCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMvQixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksY0FBYyxFQUFFO29CQUM5QixPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztpQkFDNUI7Z0JBQ0QsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsY0FBYyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDeEMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDcEUsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN2QyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxjQUFjLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUU7d0JBQzVDLGFBQWEsR0FBRyxDQUFDLENBQUM7d0JBQ2xCLE1BQU07cUJBQ1A7aUJBQ0Y7YUFDRjtpQkFBTTtnQkFDTCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUM1QyxhQUFhLEdBQUcsQ0FBQyxDQUFDO3dCQUNsQixNQUFNO3FCQUNQO2lCQUNGO2FBQ0Y7WUFDRCxJQUFJLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLGNBQWMsRUFBRTtvQkFDM0IsYUFBYSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQzdDO3FCQUFNO29CQUNMLGFBQWEsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUM3QzthQUNGO1lBQ0QsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDOUMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5RCxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLHdCQUF3QixDQUNuRCxZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsQ0FDWCxDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQ3hCLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDcEIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNwQixhQUFhLEVBQ2IsQ0FBQyxDQUNGLENBQUM7WUFDRixPQUFPO2dCQUNMLFNBQVMsRUFBRSxVQUFVO2dCQUNyQixDQUFDO2dCQUNELE1BQU07Z0JBQ04sRUFBRSxFQUFFLFNBQVM7Z0JBQ2IsTUFBTTtnQkFDTixhQUFhO2dCQUNiLE9BQU8sRUFBRTtvQkFDUCxNQUFNO29CQUNOLElBQUksRUFBRSxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUN0RCxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUU7eUJBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDbEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQzt3QkFDcEMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO3dCQUNkLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTzt3QkFDbEIsS0FBSyxFQUFFLGFBQWEsQ0FDbEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDaEIsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFDckMsSUFBSSxDQUNMO3FCQUNGLENBQUMsQ0FBQzt5QkFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLENBQUMsS0FBSyxhQUFhLENBQUM7aUJBQ2xFO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPO1lBQ0wsVUFBVSxFQUFFLGlCQUFpQixDQUFDLFVBQVU7WUFDeEMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLFdBQVc7WUFDMUMsaUJBQWlCO1lBQ2pCLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLEtBQUs7WUFDTCxLQUFLLEVBQUUsRUFBRTtZQUNULE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSztZQUNMLElBQUksRUFBRSxFQUFFO1lBQ1IsSUFBSSxFQUFFLEVBQUU7WUFDUixjQUFjLEVBQUUsRUFBRTtZQUNsQixVQUFVLEVBQUUsRUFBRTtZQUNkLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLFNBQVMsRUFBRSxFQUFFO1lBQ2IsZUFBZSxFQUFFLEVBQUU7WUFDbkIsd0JBQXdCLEVBQUUsaUJBQWlCLENBQUMsd0JBQXdCO1lBQ3BFLHNCQUFzQixFQUFFLGlCQUFpQixDQUFDLHNCQUFzQjtZQUNoRSxVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsSUFBSSxDQUNYLE1BQTZCLEVBQzdCLE9BQWtCLEVBQ2xCLFVBQXNCO1FBRXRCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sRUFBRSxHQUFHLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDaEQ7UUFDRCxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRSxJQUNFLE1BQU0sQ0FBQyxjQUFjLEtBQUssSUFBSTtZQUM5QixhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3JCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUN0QztZQUNBLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUNWLG1FQUFtRSxDQUNwRSxDQUFDO1lBQ0YsT0FBTyxVQUFVLENBQUM7U0FDbkI7UUFDRCxJQUNFLG9CQUFvQixDQUFDLElBQUksQ0FBQztZQUMxQixlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7WUFDcEMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQ3RDO1lBQ0Esc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQ1YseUdBQXlHLENBQzFHLENBQUM7WUFDRixPQUFPLFVBQVUsQ0FBQztTQUNuQjtRQUNELE9BQU8sVUFBVSxDQUNmLE1BQU0sRUFDTixPQUFPLEVBQ1AsSUFBSSxFQUNKLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLEtBQUssRUFDTCxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLE1BQU0sQ0FDYixNQUE2QixFQUM3QixPQUFrQixFQUNsQixVQUFzQjtRQUV0QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRTtZQUNwQyxPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQ2hEO1FBQ0QsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsT0FBTyxVQUFVLENBQ2YsTUFBTSxFQUNOLE9BQU8sRUFDUCxJQUFJLEVBQ0osY0FBYyxFQUNkLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsSUFBSSxFQUNKLEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsU0FBUyxDQUNoQixNQUE2QixFQUM3QixPQUFrQixFQUNsQixVQUFzQjtRQUV0QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBRTtZQUN2QyxPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQ2hEO1FBQ0QsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlELElBQUksb0JBQW9CLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDdkMsc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysc0VBQXNFLENBQ3ZFLENBQUM7WUFDRixPQUFPLFVBQVUsQ0FBQztTQUNuQjtRQUNELElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFO1lBQzdCLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUNWLG1FQUFtRSxDQUNwRSxDQUFDO1lBQ0YsT0FBTyxVQUFVLENBQUM7U0FDbkI7UUFDRCx1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXhELE9BQU8sVUFBVSxDQUNmLE1BQU0sRUFDTixPQUFPLEVBQ1AsYUFBYSxFQUNiLGNBQWMsRUFDZCxFQUFFLEVBQ0YsVUFBVSxFQUNWLEtBQUssRUFDTCxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLFVBQVUsQ0FDakIsTUFBNkIsRUFDN0IsT0FBb0IsRUFDcEIsYUFBMEIsRUFDMUIsY0FBd0IsRUFDeEIsa0JBQTRCLEVBQzVCLFVBQXNCLEVBQ3RCLFFBQWlCLEVBQ2pCLFdBQW9CO1FBRXBCLE1BQU0sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FDdkQsc0JBQXNCLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6RCxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckUsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFFOUQsTUFBTSxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FDL0MsTUFBTSxFQUNOLElBQUksRUFDSixVQUFVLEVBQ1YsYUFBYSxFQUNiLFVBQVUsQ0FDWCxDQUFDO1FBQ0YsSUFBSSxpQkFBaUIsS0FBSyxJQUFJLEVBQUU7WUFDOUIsT0FBTyxFQUFFLEdBQUcsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQztTQUNoRDtRQUVELE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDeEQsTUFBTSxNQUFNLEdBQUcsQ0FDYixJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVM7WUFDckIsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixDQUFDO1lBQ25FLENBQUMsQ0FBQyx1QkFBdUIsQ0FDckIsSUFBSSxFQUNKLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsQ0FDWCxDQUNOLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0IsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsMEJBQTBCLENBQzVELElBQUksRUFDSixhQUFhLEVBQ2IsTUFBTSxFQUNOLGlCQUFpQixDQUNsQixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFdEMsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sSUFBSSxHQUFhLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQy9DLE1BQU0sa0JBQWtCLEdBQVcsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUM5QyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FDcEMsSUFBSSxFQUNKLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssQ0FDTixDQUFDO2dCQUNGLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUNqQyxJQUFJLEVBQ0osTUFBTSxFQUNOLGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNsRCxDQUFDO2dCQUNGLElBQUksUUFBUSxFQUFFO29CQUNaLG9FQUFvRTtvQkFDcEUsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO3dCQUNmLGtCQUFrQixDQUFDLElBQUksQ0FBQzs0QkFDdEIsV0FBVyxFQUFFLE1BQU07NEJBQ25CLENBQUMsRUFBRSxDQUFDOzRCQUNKLENBQUMsRUFBRSxDQUFDOzRCQUNKLEtBQUssRUFBRSxDQUFDOzRCQUNSLE1BQU0sRUFBRSxDQUFDO3lCQUNWLENBQUMsQ0FBQztxQkFDSjt5QkFBTTt3QkFDTCxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLFdBQVcsQ0FDekMsSUFBSSxFQUNKLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxHQUFHLENBQUMsRUFDVCxLQUFLLENBQ04sQ0FBQzt3QkFFRixrQkFBa0IsQ0FBQyxJQUFJLENBQUM7NEJBQ3RCLFdBQVcsRUFBRSxNQUFNOzRCQUNuQixDQUFDLEVBQUUsTUFBTTs0QkFDVCxDQUFDLEVBQUUsV0FBVzs0QkFDZCxLQUFLLEVBQUUsaUJBQWlCLENBQUMsT0FBTzs0QkFDaEMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUM7eUJBQzFDLENBQUMsQ0FBQztxQkFDSjtpQkFDRjtnQkFFRCxNQUFNLEdBQUcsR0FBUztvQkFDaEIsV0FBVyxFQUFFLE1BQU07b0JBQ25CLENBQUMsRUFBRSxNQUFNO29CQUNULENBQUMsRUFBRSxNQUFNO29CQUNULEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxPQUFPO29CQUNoQyxNQUFNO29CQUNOLE1BQU0sRUFBRSxDQUFDO29CQUNULE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztpQkFDbkIsQ0FBQztnQkFDRixPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUMsQ0FBQyxDQUFDO1lBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ25DLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxRQUFRLEdBQWEsRUFBRSxDQUFDO1FBQzVCLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUIsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQ2hELENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN4QixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FDcEMsSUFBSSxFQUNKLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxJQUFJLENBQ0wsQ0FBQztnQkFDRixNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FDakMsSUFBSSxFQUNKLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQ3hCLENBQUM7Z0JBQ0YsT0FBTztvQkFDTCxXQUFXLEVBQUUsTUFBTTtvQkFDbkIsQ0FBQyxFQUFFLE1BQU07b0JBQ1QsQ0FBQyxFQUFFLE1BQU07b0JBQ1QsS0FBSyxFQUFFLGlCQUFpQixDQUFDLE9BQU87b0JBQ2hDLE1BQU07b0JBQ04sTUFBTSxFQUFFLENBQUM7b0JBQ1QsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO2lCQUNuQixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztZQUN2QixNQUFNLENBQUMsSUFBSSxDQUNULEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDOUIsUUFBUSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUN6QyxDQUNGLENBQUM7U0FDSDtRQUVELE1BQU0sY0FBYyxHQUtkLEVBQUUsQ0FBQztRQUNULElBQUksV0FBVyxFQUFFO1lBQ2YsbUVBQW1FO1lBQ25FLElBQUkscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzFDLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztnQkFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3BDLE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFDMUQsSUFBSSxhQUFhLEVBQUU7d0JBQ2pCLGVBQWUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO3FCQUN0Qzt5QkFBTTt3QkFDTCxlQUFlLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztxQkFDdEM7b0JBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxxQkFBcUIsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ3pCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO3dCQUN6RCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzVCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQzt3QkFDZCxjQUFjLENBQUMsSUFBSSxDQUFDOzRCQUNsQixFQUFFOzRCQUNGLEVBQUU7NEJBQ0YsRUFBRTs0QkFDRixFQUFFO3lCQUNILENBQUMsQ0FBQztxQkFDSjtpQkFDRjtnQkFDRCxxQkFBcUIsSUFBSSxlQUFlLENBQUM7YUFDMUM7U0FDRjtRQUVELE1BQU0sVUFBVSxHQUFnQixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUM1RCxNQUFNLFNBQVMsR0FBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQzFELE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWM7b0JBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLE9BQU8sR0FBRyxhQUFhO29CQUMzQixDQUFDLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCO3dCQUNsQyxpQkFBaUIsQ0FBQyxpQkFBaUI7d0JBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO29CQUM3QixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDeEMsT0FBTztvQkFDTCxXQUFXLEVBQUUsV0FBVztvQkFDeEIsS0FBSyxFQUNILGFBQWEsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQ2xFLElBQUksRUFDRixDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7d0JBQ2pELENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPO29CQUN2QyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7b0JBQzdELE1BQU0sRUFBRSxRQUFRO2lCQUNqQixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUIsTUFBTSxjQUFjLEdBQWdCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUM5RCxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDWixNQUFNLFNBQVMsR0FBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7b0JBQzFELE1BQU0sYUFBYSxHQUNqQixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWM7d0JBQzVDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUN0QyxNQUFNLE9BQU8sR0FBRyxhQUFhO3dCQUMzQixDQUFDLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCOzRCQUNsQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTt3QkFDakMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3hDLE9BQU87d0JBQ0wsV0FBVyxFQUFFLFdBQVc7d0JBQ3hCLEtBQUssRUFDSCxhQUFhLENBQ1gsR0FBRyxFQUNILGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUM3QyxJQUFJLEVBQUU7d0JBQ1QsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTzt3QkFDMUMsSUFBSSxFQUNGLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDO3dCQUNqRSxNQUFNLEVBQUUsUUFBUTtxQkFDakIsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDLENBQ0YsQ0FBQztZQUNGLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztTQUNwQztRQUVELFNBQVMsS0FBSyxDQUFDLEdBTWQ7WUFDQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5QyxJQUNFLGlCQUFpQixLQUFLLElBQUk7Z0JBQzFCLHFCQUFxQixDQUNuQixHQUFHLENBQUMsQ0FBQyxFQUNMLEdBQUcsQ0FBQyxDQUFDLEVBQ0wsUUFBUSxFQUNSLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsVUFBVSxDQUNYLEVBQ0Q7Z0JBQ0EsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFFeEUsTUFBTSxhQUFhLEdBQUcsOEJBQThCLENBQ2xELFFBQVEsRUFDUixpQkFBaUIsRUFDakIsSUFBSSxFQUNKLE1BQU0sRUFDTixJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDZCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbEIsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE1BQU0sRUFDSixTQUFTLEVBQUUsTUFBTSxFQUNqQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLGNBQWMsR0FDZixHQUFHLGFBQWEsQ0FBQztZQUVsQixJQUFJLFdBQVcsR0FBWSxLQUFLLENBQUM7WUFDakMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLElBQUksTUFBTSxFQUFFO2dCQUNWLFlBQVksR0FBRyxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQzdDLElBQUksY0FBYyxLQUFLLE1BQU0sRUFBRTtvQkFDN0IsV0FBVyxHQUFHLElBQUksQ0FBQztpQkFDcEI7YUFDRjtZQUVELE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUNoQyxJQUFJLEVBQ0osTUFBTSxFQUNOLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sVUFBVSxDQUNYLENBQUM7WUFDRixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUN0QyxXQUFXO2dCQUNULENBQUMsQ0FBQyx3QkFBd0IsQ0FDdEIsSUFBSSxFQUNKLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLENBQ04sQ0FBQyxNQUFNO2dCQUNWLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU07b0JBQzFELENBQUMsQ0FBQyxXQUFXLElBQUksV0FBVzt3QkFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQzt3QkFDckMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNYLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxjQUFjLEdBQUcsUUFBUSxDQUFDO1lBQzNDLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLElBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BFLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDdkMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUU7d0JBQy9DLGFBQWEsR0FBRyxDQUFDLENBQUM7d0JBQ2xCLE1BQU07cUJBQ1A7aUJBQ0Y7YUFDRjtpQkFBTTtnQkFDTCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUU7d0JBQy9DLGFBQWEsR0FBRyxDQUFDLENBQUM7d0JBQ2xCLE1BQU07cUJBQ1A7aUJBQ0Y7YUFDRjtZQUNELElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ25ELGFBQWEsR0FBRyxVQUFVLENBQUM7Z0JBQzNCLElBQUksUUFBUSxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFFBQVEsRUFBRTtvQkFDNUQsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO2lCQUM3QjthQUNGO1lBQ0QsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksUUFBUSxJQUFJLGNBQWMsRUFBRTtvQkFDOUIsYUFBYSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQzdDO3FCQUFNO29CQUNMLGFBQWEsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUM3QzthQUNGO1lBQ0QsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzdDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsV0FBVztnQkFDbEMsQ0FBQyxDQUFDLHdCQUF3QixDQUN0QixJQUFJLEVBQ0osTUFBTSxFQUNOLE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssQ0FDTjtnQkFDSCxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRCxJQUFJLG9CQUFvQixFQUFFO2dCQUN4QixNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7YUFDM0M7WUFFRCxNQUFNLFlBQVksR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixHQUFHLGFBQWEsQ0FBQztZQUNsRSxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQztZQUM1RCxNQUFNLGVBQWUsR0FDbkIsQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sWUFBWSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO1lBQ3JFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsR0FDbkQsd0JBQXdCLENBQ3RCLFlBQVksRUFDWixZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLENBQ1AsQ0FBQztZQUNKLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUN4QixPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3BCLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDcEIsV0FBVyxFQUNYLFlBQVksQ0FDYixDQUFDO1lBQ0YsNEVBQTRFO1lBQzVFLE1BQU0sWUFBWSxHQUloQixXQUFXLElBQUksTUFBTTtnQkFDbkIsQ0FBQyxDQUFDLE1BQU07cUJBQ0gsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7cUJBQzlELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEtBQUssWUFBWSxDQUFDO2dCQUNuRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLHdEQUF3RDtZQUN4RCxNQUFNLFVBQVUsR0FBRyxNQUFNO2dCQUN2QixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsS0FBSyxZQUFZLENBQUMsSUFBSSxFQUFFO2dCQUNoRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLENBQUMsNkNBQTZDO1lBQ25GLE1BQU0sa0JBQWtCLEdBQ3RCLGNBQWMsSUFBSSxDQUFDLElBQUksY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLElBQUksTUFBTTtnQkFDakUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDVCxNQUFNLFVBQVUsR0FDZCxrQkFBa0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXhFLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLFVBQVU7Z0JBQ3JCLENBQUMsRUFBRSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxHQUFHLENBQUM7Z0JBQ3hDLE1BQU07Z0JBQ04sRUFBRTtnQkFDRixNQUFNO2dCQUNOLGFBQWE7Z0JBQ2IsR0FBRyxDQUFDLFdBQVcsSUFBSSxVQUFVLElBQUksQ0FBQztvQkFDaEMsQ0FBQyxDQUFDO3dCQUNFLFdBQVc7d0JBQ1gsVUFBVSxFQUFFLFVBQVU7cUJBQ3ZCO29CQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxPQUFPLEVBQUU7b0JBQ1AsTUFBTTtvQkFDTixJQUFJLEVBQ0YsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTO3dCQUNyQixDQUFDLENBQUMsb0JBQW9COzRCQUNwQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzs0QkFDbkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSzt3QkFDeEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ3RELE9BQU8sRUFBRSxZQUFZO3lCQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUNULEtBQUssRUFBRSxRQUFRLENBQ2IsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQ3BELFlBQVksRUFDWixNQUFNLENBQUMsTUFBTSxDQUNkO3dCQUNELEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQ25CLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU87d0JBQ3ZCLEtBQUssRUFBRSxhQUFhLENBQ2xCLG9CQUFvQjs0QkFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUNqRCxDQUFDLENBQ0Y7NEJBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUN6QixnQkFBZ0IsQ0FDZCxJQUFJLEVBQ0osQ0FBQyxDQUFDLGFBQWEsRUFDZixvQkFBb0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUMxQyxXQUFXLENBQ1osRUFDRCxJQUFJLENBQ0w7cUJBQ0YsQ0FBQyxDQUFDO3lCQUNGLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksQ0FBQyxLQUFLLGFBQWEsQ0FBQztpQkFDbEU7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU87WUFDTCxVQUFVLEVBQUUsaUJBQWlCLENBQUMsVUFBVTtZQUN4QyxXQUFXLEVBQUUsaUJBQWlCLENBQUMsV0FBVztZQUMxQyxpQkFBaUI7WUFDakIsTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sSUFBSTtZQUNKLEtBQUssRUFBRSxFQUFFO1lBQ1QsT0FBTyxFQUFFLEVBQUU7WUFDWCxLQUFLLEVBQUUsRUFBRTtZQUNULEtBQUs7WUFDTCxJQUFJLEVBQUUsRUFBRTtZQUNSLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLFVBQVU7WUFDVixjQUFjO1lBQ2QsU0FBUztZQUNULGVBQWUsRUFBRSxFQUFFO1lBQ25CLHdCQUF3QixFQUFFLGlCQUFpQixDQUFDLHdCQUF3QjtZQUNwRSxzQkFBc0IsRUFBRSxpQkFBaUIsQ0FBQyxzQkFBc0I7WUFDaEUsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLGNBQWMsQ0FDckIsTUFBNkIsRUFDN0IsT0FBa0IsRUFDbEIsVUFBc0I7UUFFdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtZQUM1QyxPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQ2hEO1FBQ0Qsa0ZBQWtGO1FBQ2xGLDZFQUE2RTtRQUM3RSxtQ0FBbUM7UUFDbkMsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsSUFDRSxNQUFNLENBQUMsY0FBYyxLQUFLLElBQUk7WUFDOUIsYUFBYSxDQUFDLE1BQU0sQ0FBQztZQUNyQixDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFDdEM7WUFDQSxzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLElBQUksQ0FDVixtRUFBbUUsQ0FDcEUsQ0FBQztZQUNGLE9BQU8sVUFBVSxDQUFDO1NBQ25CO1FBQ0QsSUFDRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7WUFDMUIsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO1lBQ3BDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUN0QztZQUNBLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUNWLHlHQUF5RyxDQUMxRyxDQUFDO1lBQ0YsT0FBTyxVQUFVLENBQUM7U0FDbkI7UUFFRCxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQ3ZELHNCQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFaEQsTUFBTSxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FDL0MsTUFBTSxFQUNOLElBQUksRUFDSixVQUFVLEVBQ1YsYUFBYSxFQUNiLFVBQVUsQ0FDWCxDQUFDO1FBQ0YsSUFBSSxpQkFBaUIsS0FBSyxJQUFJLEVBQUU7WUFDOUIsT0FBTyxFQUFFLEdBQUcsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQztTQUNoRDtRQUVELE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDeEQsTUFBTSxNQUFNLEdBQUcsQ0FDYixJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVM7WUFDckIsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixDQUFDO1lBQ25FLENBQUMsQ0FBQyx1QkFBdUIsQ0FDckIsSUFBSSxFQUNKLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsQ0FDWCxDQUNOLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0IsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsMEJBQTBCLENBQzVELElBQUksRUFDSixhQUFhLEVBQ2IsTUFBTSxFQUNOLGlCQUFpQixDQUNsQixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFdEMsTUFBTSx3QkFBd0IsR0FJdEIsRUFBRSxDQUFDO1FBQ1gsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDL0MsTUFBTSxjQUFjLEdBSWQsRUFBRSxDQUFDO1lBQ1QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3ZDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsV0FBVyxDQUNuQyxJQUFJLEVBQ0osTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxDQUNOLENBQUM7Z0JBQ0YsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMxRCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FDakMsSUFBSSxFQUNKLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEQsQ0FBQztnQkFFRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNuQixvQ0FBb0MsRUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQ3RCLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDbkIsb0NBQW9DLEVBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUMxQyxDQUFDO2dCQUNGLGNBQWMsQ0FBQyxJQUFJLENBQUM7b0JBQ2xCLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxNQUFNO29CQUNaLEtBQUs7aUJBQ04sQ0FBQyxDQUFDO2dCQUNILDBFQUEwRTtnQkFDMUUsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ3JCLE9BQU87d0JBQ0wsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTzt3QkFDbEIsQ0FBQyxFQUFFLE1BQU07d0JBQ1QsQ0FBQyxFQUFFLE1BQU07cUJBQ1YsQ0FBQztpQkFDSDtnQkFDRCx5Q0FBeUM7Z0JBQ3pDLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtvQkFDZixPQUFPO3dCQUNMLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87d0JBQ2xCLENBQUMsRUFBRSxNQUFNO3dCQUNULENBQUMsRUFBRSxNQUFNO3FCQUNWLENBQUM7aUJBQ0g7Z0JBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxFQUFFO3FCQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUU7cUJBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFeEIsaUZBQWlGO2dCQUNqRixNQUFNLFdBQVcsR0FBRyxVQUFVO29CQUM1QixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7eUJBQ0osS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7eUJBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCO29CQUMvRCxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7eUJBQ0osS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7eUJBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLGFBQWEsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxXQUFXLENBQUM7Z0JBQzVELE1BQU0sWUFBWSxHQUFHLFVBQVU7b0JBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTt5QkFDSixLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzt5QkFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO29CQUN4QyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7eUJBQ0osS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7eUJBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2xFLE1BQU0sY0FBYyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFlBQVksQ0FBQztnQkFDOUQsTUFBTSxLQUFLLEdBQUcsMEJBQTBCLENBQ3RDLGFBQWEsRUFDYixjQUFjLEVBQ2QsTUFBTSxFQUNOLE1BQU0sRUFDTixJQUFJLEVBQ0osSUFBSSxFQUNKLGlCQUFpQixDQUFDLE9BQU8sRUFDekIsS0FBSyxDQUNOLENBQUM7Z0JBQ0YsT0FBTztvQkFDTCxhQUFhLEVBQUUsS0FBSztvQkFDcEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO29CQUNsQixDQUFDLEVBQUUsTUFBTTtvQkFDVCxDQUFDLEVBQUUsTUFBTTtpQkFDVixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDOUMsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3BDLE1BQU0sNEJBQTRCLEdBSTFCLEVBQUUsQ0FBQztRQUNYLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNsRCxNQUFNLGNBQWMsR0FJZCxFQUFFLENBQUM7Z0JBQ1QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ3ZDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsV0FBVyxDQUNuQyxJQUFJLEVBQ0osTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLElBQUksQ0FDTCxDQUFDO29CQUNGLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDMUQsTUFBTSxVQUFVLEdBQ2QsV0FBVyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7d0JBQzNELFdBQVcsQ0FBQyxTQUFTLENBQUM7b0JBQ3hCLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUNqQyxJQUFJLEVBQ0osTUFBTSxFQUNOLGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsVUFBVSxDQUNYLENBQUM7b0JBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDbkIsb0NBQW9DLEVBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUN0QixDQUFDO29CQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ25CLG9DQUFvQyxFQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FDMUMsQ0FBQztvQkFDRixjQUFjLENBQUMsSUFBSSxDQUFDO3dCQUNsQixJQUFJLEVBQUUsTUFBTTt3QkFDWixJQUFJLEVBQUUsTUFBTTt3QkFDWixLQUFLO3FCQUNOLENBQUMsQ0FBQztvQkFDSCx5Q0FBeUM7b0JBQ3pDLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTt3QkFDZixPQUFPOzRCQUNMLGFBQWEsRUFBRSxFQUFFOzRCQUNqQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87NEJBQ2xCLENBQUMsRUFBRSxNQUFNOzRCQUNULENBQUMsRUFBRSxNQUFNO3lCQUNWLENBQUM7cUJBQ0g7b0JBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3BELE1BQU0sa0JBQWtCLEdBQUcsTUFBTTt5QkFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGlCQUFpQixLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQzt5QkFDaEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN4QixNQUFNLGtCQUFrQixHQUFHLE1BQU07eUJBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQUM7eUJBQ2hFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFFeEIsaUZBQWlGO29CQUNqRixNQUFNLFdBQVcsR0FBRyxVQUFVO3dCQUM1QixDQUFDLENBQUMsTUFBTTs2QkFDSCxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQzs2QkFDaEIsTUFBTSxDQUNMLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGlCQUFpQixLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FDekQ7NkJBQ0EsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzs2QkFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0I7d0JBQy9ELENBQUMsQ0FBQyxNQUFNOzZCQUNILEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7NkJBQ2hDLE1BQU0sQ0FDTCxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQ3pEOzZCQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO29CQUMzQyxNQUFNLGFBQWEsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxXQUFXLENBQUM7b0JBQzVELE1BQU0sWUFBWSxHQUFHLFVBQVU7d0JBQzdCLENBQUMsQ0FBQyxNQUFNOzZCQUNILEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7NkJBQ2hDLE1BQU0sQ0FDTCxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQ3pEOzZCQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQzt3QkFDeEMsQ0FBQyxDQUFDLE1BQU07NkJBQ0gsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7NkJBQ2hCLE1BQU0sQ0FDTCxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQ3pEOzZCQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7b0JBQ2xFLE1BQU0sY0FBYyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFlBQVksQ0FBQztvQkFDOUQsTUFBTSxLQUFLLEdBQUcsMEJBQTBCLENBQ3RDLGFBQWEsRUFDYixjQUFjLEVBQ2QsTUFBTSxFQUNOLE1BQU0sRUFDTixJQUFJLEVBQ0osSUFBSSxFQUNKLGlCQUFpQixDQUFDLE9BQU8sRUFDekIsS0FBSyxDQUNOLENBQUM7b0JBQ0YsT0FBTzt3QkFDTCxhQUFhLEVBQUUsS0FBSzt3QkFDcEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO3dCQUNsQixDQUFDLEVBQUUsTUFBTTt3QkFDVCxDQUFDLEVBQUUsTUFBTTtxQkFDVixDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUNILDRCQUE0QixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbEQsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7WUFDSCxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0U7UUFFRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7UUFDMUMsTUFBTSxVQUFVLEdBQWdCLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzVELE1BQU0sU0FBUyxHQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDMUQsTUFBTSxhQUFhLEdBQ2pCLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRyxjQUFjO29CQUM5RCx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLE9BQU8sR0FBRyxhQUFhO29CQUMzQixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0I7b0JBQ3JDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLO3dCQUM5QyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDdkMsT0FBTztvQkFDTCxXQUFXLEVBQUUsV0FBVztvQkFDeEIsS0FBSyxFQUNILGFBQWEsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQ2xFLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsT0FBTztvQkFDN0QsSUFBSSxFQUFFLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRyxPQUFPO29CQUM3RCxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU87aUJBQ3hDLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxNQUFNLEVBQUU7WUFDVixNQUFNLGNBQWMsR0FBZ0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDL0QsTUFBTSxTQUFTLEdBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO29CQUMxRCxNQUFNLGFBQWEsR0FDakIsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSTt3QkFDL0MsY0FBYzt3QkFDaEIsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztvQkFDekQsTUFBTSxPQUFPLEdBQUcsYUFBYTt3QkFDM0IsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCO3dCQUNyQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSzs0QkFDbEQsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3ZDLE9BQU87d0JBQ0wsV0FBVyxFQUFFLFdBQVc7d0JBQ3hCLEtBQUssRUFDSCxhQUFhLENBQ1gsR0FBRyxFQUNILGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUM3QyxJQUFJLEVBQUU7d0JBQ1QsSUFBSSxFQUFFLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRyxPQUFPO3dCQUNqRSxJQUFJLEVBQUUsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLE9BQU87d0JBQ2pFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTztxQkFDeEMsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztZQUNILFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztTQUNwQztRQUVELFNBQVMsS0FBSyxDQUFDLEdBTWQ7WUFDQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5QyxJQUNFLGlCQUFpQixLQUFLLElBQUk7Z0JBQzFCLHFCQUFxQixDQUNuQixHQUFHLENBQUMsQ0FBQyxFQUNMLEdBQUcsQ0FBQyxDQUFDLEVBQ0wsUUFBUSxFQUNSLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsVUFBVSxDQUNYLEVBQ0Q7Z0JBQ0EsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDeEUsTUFBTSxhQUFhLEdBQUcsOEJBQThCLENBQ2xELFFBQVEsRUFDUixpQkFBaUIsRUFDakIsSUFBSSxFQUNKLE1BQU0sRUFDTixJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDZCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbEIsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE1BQU0sRUFDSixTQUFTLEVBQUUsTUFBTSxFQUNqQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLGNBQWMsR0FDZixHQUFHLGFBQWEsQ0FBQztZQUVsQixJQUFJLENBQUMsR0FBRyxvQkFBb0IsQ0FDMUIsSUFBSSxFQUNKLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFVBQVUsQ0FDWCxDQUFDO1lBQ0YsSUFBSSxXQUFXLEdBQVksS0FBSyxDQUFDO1lBQ2pDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLE1BQU0sRUFBRTtnQkFDVixZQUFZLEdBQUcsVUFBVSxHQUFHLGdCQUFnQixDQUFDO2dCQUM3QyxJQUFJLGNBQWMsS0FBSyxNQUFNLEVBQUU7b0JBQzdCLFdBQVcsR0FBRyxJQUFJLENBQUM7aUJBQ3BCO2FBQ0Y7WUFFRCwyRUFBMkU7WUFDM0Usc0RBQXNEO1lBQ3RELE1BQU0sTUFBTSxHQUNWLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVc7Z0JBQ3ZDLENBQUMsQ0FBQyxDQUNFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUN6QixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsS0FBSyxZQUFZLENBQzFDLElBQUksRUFBRSxDQUNSLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ1osV0FBVyxDQUNULElBQUksRUFDSixNQUFNLEVBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQ25DLE1BQU0sRUFDTixLQUFLLEVBQ0wsSUFBSSxDQUNMLENBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQzNCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3BELENBQUM7WUFDUixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN0QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNwQyxNQUFNLHFCQUFxQixHQUFHLE1BQU07cUJBQ2pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO3FCQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RCLE1BQU0sV0FBVyxHQUNmLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO29CQUNwQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLElBQUksUUFBUSxHQUFHLFVBQVUsSUFBSSxRQUFRLEdBQUcsV0FBVyxFQUFFO29CQUNuRCxhQUFhLEdBQUcsQ0FBQyxDQUFDO2lCQUNuQjthQUNGO1lBQ0QsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDeEMsYUFBYSxHQUFHLFVBQVUsQ0FBQzthQUM1QjtZQUVELElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN4QixJQUFJLFFBQVEsSUFBSSxjQUFjLEVBQUU7b0JBQzlCLGFBQWEsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUM3QztxQkFBTTtvQkFDTCxhQUFhLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDN0M7YUFDRjtZQUNELHFGQUFxRjtZQUNyRixtRUFBbUU7WUFDbkUsTUFBTSxnQkFBZ0IsR0FDcEIsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVztnQkFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUM1QixDQUFDLENBQUMsRUFBRSxDQUNGLENBQUMsQ0FBQyxpQkFBaUIsS0FBSyxZQUFZO29CQUNwQyxJQUFJLENBQUMsZUFBZTt5QkFDakIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLGlCQUFpQixLQUFLLFlBQVksQ0FBQzt5QkFDbkQsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLGFBQWEsQ0FDbEMsSUFBSSxDQUFDLENBQUM7Z0JBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRVQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUUvRCwwRUFBMEU7WUFDMUUsTUFBTSxXQUFXLEdBQUcsV0FBVztnQkFDN0IsQ0FBQyxDQUFDLDRCQUE0QjtnQkFDOUIsQ0FBQyxDQUFDLHdCQUF3QixDQUFDO1lBQzdCLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUV2RSxJQUNFLGVBQWUsSUFBSSxDQUFDO2dCQUNwQixXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUM7Z0JBQ2hELGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFDckI7Z0JBQ0EsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixlQUFlO2dCQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsZUFBZSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDN0QsSUFBSSxXQUFXLEVBQUU7d0JBQ2YsTUFBTTtxQkFDUDtvQkFDRCxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO3dCQUN0QyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsRUFBRTs0QkFDN0MsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlO2lDQUNqQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEtBQUssWUFBWSxDQUFDO2lDQUNqRCxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDO3lCQUN0Qzs2QkFBTTs0QkFDTCxhQUFhLEdBQUcsQ0FBQyxDQUFDO3lCQUNuQjt3QkFDRCxXQUFXLEdBQUcsSUFBSSxDQUFDO3FCQUNwQjtpQkFDRjtnQkFFRCxpQkFBaUI7Z0JBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsZUFBZSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM3QyxJQUFJLFdBQVcsRUFBRTt3QkFDZixNQUFNO3FCQUNQO29CQUNELElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7d0JBQ3RDLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxFQUFFOzRCQUM3QyxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWU7aUNBQ2pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsS0FBSyxZQUFZLENBQUM7aUNBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUM7eUJBQ3RDOzZCQUFNOzRCQUNMLGFBQWEsR0FBRyxDQUFDLENBQUM7eUJBQ25CO3dCQUNELFdBQVcsR0FBRyxJQUFJLENBQUM7cUJBQ3BCO2lCQUNGO2FBQ0Y7WUFFRCxNQUFNLGtCQUFrQixHQUN0QixXQUFXLElBQUksZ0JBQWdCLElBQUksQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDO2dCQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFVCxNQUFNLE9BQU8sR0FBRyxXQUFXO2dCQUN6QixDQUFDLENBQUMsNEJBQTRCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJO2dCQUM3RCxDQUFDLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3pELE1BQU0sT0FBTyxHQUFHLFdBQVc7Z0JBQ3pCLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUk7Z0JBQzdELENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDekQsTUFBTSxRQUFRLEdBQUcsV0FBVztnQkFDMUIsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztnQkFDOUQsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUUxRCxNQUFNLFlBQVksR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixHQUFHLGFBQWEsQ0FBQztZQUNwRSxNQUFNLEtBQUssR0FBRyxRQUFRLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQztZQUMzQyxNQUFNLFlBQVksR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDO1lBQ3BELE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztZQUN6QyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEdBQ25ELHdCQUF3QixDQUN0QixZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxDQUNQLENBQUM7WUFDSixNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FDeEIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNwQixPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3BCLFdBQVcsRUFDWCxZQUFZLENBQ2IsQ0FBQztZQUNGLDRFQUE0RTtZQUM1RSxNQUFNLFlBQVksR0FJaEIsV0FBVyxJQUFJLE1BQU07Z0JBQ25CLENBQUMsQ0FBQyxNQUFNO3FCQUNILEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO3FCQUM5RCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixLQUFLLFlBQVksQ0FBQztnQkFDbkUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyRSxPQUFPO2dCQUNMLFNBQVMsRUFBRSxVQUFVO2dCQUNyQixDQUFDO2dCQUNELE1BQU07Z0JBQ04sRUFBRTtnQkFDRixNQUFNO2dCQUNOLGFBQWE7Z0JBQ2IsR0FBRyxDQUFDLFdBQVcsSUFBSSxrQkFBa0IsSUFBSSxDQUFDO29CQUN4QyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFO29CQUNqRCxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNQLE9BQU8sRUFBRTtvQkFDUCxNQUFNO29CQUNOLElBQUksRUFDRixJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVM7d0JBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUs7d0JBQ3RCLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUN0RCxPQUFPLEVBQUUsWUFBWTt5QkFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDVCxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7d0JBQ3BELEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQ25CLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU87d0JBQ3ZCLEtBQUssRUFBRSxhQUFhLENBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUNyQixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQzVELElBQUksQ0FDTDtxQkFDRixDQUFDLENBQUM7eUJBQ0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsSUFBSSxDQUFDLEtBQUssYUFBYSxDQUFDO2lCQUNsRTthQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTztZQUNMLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxVQUFVO1lBQ3hDLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXO1lBQzFDLGlCQUFpQjtZQUNqQixNQUFNLEVBQUUsTUFBTTtZQUNkLE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSztZQUNMLE1BQU07WUFDTixJQUFJLEVBQUUsRUFBRTtZQUNSLEtBQUssRUFBRSxFQUFFO1lBQ1QsT0FBTyxFQUFFLEVBQUU7WUFDWCxLQUFLLEVBQUUsRUFBRTtZQUNULElBQUksRUFBRSxFQUFFO1lBQ1IsY0FBYztZQUNkLFVBQVU7WUFDVixjQUFjLEVBQUUsRUFBRTtZQUNsQixTQUFTLEVBQUUsRUFBRTtZQUNiLGVBQWUsRUFBRSxFQUFFO1lBQ25CLHdCQUF3QixFQUFFLGlCQUFpQixDQUFDLHdCQUF3QjtZQUNwRSxzQkFBc0IsRUFBRSxpQkFBaUIsQ0FBQyxzQkFBc0I7WUFDaEUsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLElBQUksQ0FDWCxNQUFtQixFQUNuQixPQUFrQixFQUNsQixVQUFzQjtRQUV0QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNuQyxPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQ2hEO1FBQ0QsSUFDRSxNQUFNLENBQUMsa0JBQWtCO1lBQ3pCLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxZQUFZO2dCQUNoQyxNQUFNLENBQUMsa0JBQWtCLEtBQUssWUFBWSxDQUFDLEVBQzdDO1lBQ0Esc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysc0VBQXNFLENBQ3ZFLENBQUM7WUFDRixPQUFPLFVBQVUsQ0FBQztTQUNuQjtRQUNELElBQUksb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakMsc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysc0VBQXNFLENBQ3ZFLENBQUM7WUFDRixPQUFPLFVBQVUsQ0FBQztTQUNuQjtRQUNELHVCQUF1QixDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRSxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6RCxNQUFNLE9BQU8sR0FBRyxlQUFlO1lBQzdCLENBQUMsQ0FBQyxTQUFTO1lBQ1gsQ0FBQyxDQUFDO2dCQUNFO29CQUNFLEtBQUssRUFBRSxFQUFFO29CQUNULEtBQUssRUFBRSxDQUFDO2lCQUNUO2FBQ0YsQ0FBQztRQUNOLE1BQU0sTUFBTSxHQUFHLGVBQWU7WUFDNUIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxzQkFBc0IsQ0FDOUMsT0FBTyxFQUNQLGFBQWEsRUFDYixNQUFNLENBQ1AsQ0FBQztRQUVGLE1BQU0sa0JBQWtCLEdBQUcsd0JBQXdCLENBQUM7UUFDcEQsTUFBTSxzQkFBc0IsR0FBRyxxQkFBcUIsQ0FDbEQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQ3BELGtCQUFrQixDQUFDLGFBQWEsRUFDaEMsa0JBQWtCLENBQ25CLENBQUM7UUFDRixNQUFNLGNBQWMsR0FBRyxxQkFBcUIsQ0FDMUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQ3BELGtCQUFrQixDQUFDLGFBQWEsRUFDaEMsVUFBVSxDQUNYLENBQUM7UUFDRixNQUFNLG1CQUFtQixHQUFHLGdCQUFnQixDQUMxQyxhQUFhLEVBQ2IsYUFBYSxFQUNiLGNBQWMsQ0FBQyxNQUFNLENBQ3RCLENBQUM7UUFFRixNQUFNLHdCQUF3QixHQUM1QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLHdCQUF3QjtZQUMvRCxTQUFTO1lBQ1AsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsd0JBQXdCO1lBQ2hFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQztRQUNsRCxNQUFNLHNCQUFzQixHQUMxQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLHNCQUFzQjtZQUM3RCxTQUFTO1lBQ1AsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsc0JBQXNCO1lBQzlELENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQztRQUNoRCxNQUFNLGlCQUFpQixHQUNyQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFdBQVcsS0FBSyxTQUFTO1lBQzlELENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVc7WUFDbkQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQztRQUNyQyxNQUFNLGdCQUFnQixHQUNwQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFVBQVUsS0FBSyxTQUFTO1lBQzdELENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFVBQVU7WUFDbEQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQztRQUVwQyxNQUFNLEtBQUssR0FDVCxpQkFBaUIsQ0FBQyxJQUFJLEtBQUssWUFBWTtZQUNyQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEtBQUs7WUFDbkQsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztRQUM5QixNQUFNLFVBQVUsR0FDZCxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssWUFBWTtZQUNwQyxDQUFDLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUs7WUFDaEMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsVUFBVSxDQUFDO1FBRWpDLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBYTthQUM3QixVQUFVLENBQUMsSUFBSSxDQUFDO2FBQ2hCLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTdDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDaEMsR0FBRyxFQUFhO2FBQ2IsV0FBVyxDQUFDLEtBQUssQ0FBQzthQUNsQixXQUFXLENBQUMsS0FBSyxDQUFDO2FBQ2xCLFFBQVEsQ0FBQyxLQUFLLENBQUM7YUFDZixVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQzthQUM3QixRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FDMUMsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFnQixlQUFlO1lBQzdDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNoQiwrRUFBK0U7Z0JBQy9FLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxHQUFHLENBQUMsUUFBUSxFQUFFO29CQUNuQyxPQUFPO3dCQUNMLFdBQVcsRUFBRSxXQUFXO3dCQUN4QixLQUFLLEVBQUUsRUFBRTt3QkFDVCxJQUFJLEVBQUUsQ0FBQzt3QkFDUCxJQUFJLEVBQUUsQ0FBQzt3QkFDUCxNQUFNLEVBQUUsUUFBUTtxQkFDakIsQ0FBQztpQkFDSDtnQkFDRCxNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0QsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDcEQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUM3QixjQUFjLEVBQ2QsS0FBSyxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FDdEMsQ0FBQztnQkFDRixNQUFNLFVBQVUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDaEIsSUFBSSxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDdEIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUU7d0JBQ3pDLE9BQU8sR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO3FCQUM3Qjt5QkFBTTt3QkFDTCxPQUFPLEdBQUcsYUFBYSxDQUFDO3FCQUN6QjtvQkFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRTt3QkFDekMsT0FBTyxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7cUJBQzlCO2lCQUNGO3FCQUFNO29CQUNMLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxFQUFFO3dCQUN6QyxPQUFPLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQztxQkFDN0I7b0JBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUU7d0JBQ3pDLE9BQU8sSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO3FCQUM5QjtpQkFDRjtnQkFDRCxPQUFPO29CQUNMLFdBQVcsRUFBRSxXQUFXO29CQUN4QixLQUFLLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO29CQUMxRCxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsR0FBRyxPQUFPO29CQUM5QixJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsR0FBRyxPQUFPO29CQUM5QixNQUFNLEVBQ0osSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVTt3QkFDbkMsQ0FBQyxDQUFDLFFBQVE7d0JBQ1YsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQzs0QkFDcEIsQ0FBQyxDQUFDLEtBQUs7NEJBQ1AsQ0FBQyxDQUFDLE9BQU87b0JBQ2IsSUFBSSxFQUFFO3dCQUNKLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQzt3QkFDZixFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7d0JBQ2YsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO3dCQUNsQixFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7cUJBQ25CO2lCQUNGLENBQUM7WUFDSixDQUFDLENBQUM7WUFDSixDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsTUFBTSxTQUFTLEdBQ2IsQ0FBQyxLQUFLO1lBQ0osQ0FBQyxNQUFNLENBQUMsY0FBYztnQkFDcEIsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxVQUFVO2dCQUNoRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDVCxDQUFDLENBQUM7UUFDSixNQUFNLFVBQVUsR0FDZCxDQUFDLEtBQUs7WUFDSixDQUFDLE1BQU0sQ0FBQyxjQUFjO2dCQUNwQixDQUFDLENBQUMsc0JBQXNCLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDLFFBQVE7Z0JBQzlELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNULENBQUMsQ0FBQztRQUVKLFNBQVMsS0FBSyxDQUFDLEdBTWQ7WUFDQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5QyxJQUNFLHFCQUFxQixDQUNuQixHQUFHLENBQUMsQ0FBQyxFQUNMLEdBQUcsQ0FBQyxDQUFDLEVBQ0wsUUFBUSxFQUNSLFFBQVEsRUFDUixJQUFJLEVBQ0osVUFBVSxDQUNYLEVBQ0Q7Z0JBQ0EsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sY0FBYyxHQUFHLFFBQVEsR0FBRyxZQUFZLENBQUM7WUFDL0MsTUFBTSxjQUFjLEdBQUcsUUFBUSxHQUFHLFlBQVksQ0FBQztZQUMvQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUUxQyxvQkFBb0I7WUFDcEIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckIsSUFBSSxpQkFBaUIsR0FDbkIsU0FBUyxDQUFDO1lBQ1osSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztZQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdkMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV2QixJQUNFLGVBQWUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVU7b0JBQ3RDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLFFBQVE7b0JBQ3BDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsYUFBYSxHQUFHLFVBQVU7b0JBQ25ELGVBQWUsQ0FBQyxNQUFNLEdBQUcsYUFBYSxHQUFHLFVBQVUsRUFDbkQ7b0JBQ0EsV0FBVyxHQUFHLENBQUMsQ0FBQztvQkFDaEIsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUMvQixDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFDbkMsYUFBYSxDQUNkLENBQUM7b0JBRUYsaUNBQWlDO29CQUNqQyxjQUFjLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUM7b0JBQ2pELGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQztvQkFDakQsTUFBTSxZQUFZLEdBQ2hCLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzt3QkFDN0MsQ0FBQyxDQUFDLEtBQUs7d0JBQ1AsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDOzRCQUMxQyxDQUFDLENBQUMsUUFBUTs0QkFDVixDQUFDLENBQUMsUUFBUSxDQUFDO29CQUVmLDZDQUE2QztvQkFDN0MsSUFBSSxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDeEIsWUFBWTt3QkFDWixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsSUFBSSxZQUFZLEtBQUssUUFBUSxFQUFFOzRCQUN2RCxpQkFBaUIsR0FBRyxjQUFjLENBQUM7eUJBQ3BDOzZCQUFNLElBQUksWUFBWSxLQUFLLEtBQUssRUFBRTs0QkFDakMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO3lCQUNqQzs2QkFBTSxJQUFJLFlBQVksS0FBSyxRQUFRLEVBQUU7NEJBQ3BDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQzt5QkFDcEM7cUJBQ0Y7eUJBQU07d0JBQ0wsV0FBVzt3QkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsSUFBSSxZQUFZLEtBQUssUUFBUSxFQUFFOzRCQUN2RCxpQkFBaUIsR0FBRyxhQUFhLENBQUM7eUJBQ25DOzZCQUFNLElBQUksWUFBWSxLQUFLLEtBQUssRUFBRTs0QkFDakMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO3lCQUNoQzs2QkFBTSxJQUFJLFlBQVksS0FBSyxRQUFRLEVBQUU7NEJBQ3BDLGlCQUFpQixHQUFHLGFBQWEsQ0FBQzt5QkFDbkM7cUJBQ0Y7b0JBQ0QsTUFBTTtpQkFDUDthQUNGO1lBQ0QsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNwQixjQUFjLEdBQUcsWUFBWSxHQUFHLGFBQWEsQ0FBQztnQkFDOUMsY0FBYyxHQUFHLFlBQVksQ0FBQzthQUMvQjtZQUVELE1BQU0sWUFBWSxHQUFHLGNBQWMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDM0QsTUFBTSxZQUFZLEdBQUcsY0FBYyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUMzRCxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLHdCQUF3QixDQUNuRCxZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsQ0FDWCxDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQ3hCLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDcEIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNwQixhQUFhLEVBQ2IsQ0FBQyxDQUNGLENBQUM7WUFDRixPQUFPO2dCQUNMLFNBQVMsRUFBRSxVQUFVO2dCQUNyQixPQUFPLEVBQUU7b0JBQ1AsTUFBTTtvQkFDTixpQkFBaUI7b0JBQ2pCLElBQUksRUFBRSxJQUFJO29CQUNWLE9BQU8sRUFBRSxTQUFTO3lCQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ2xCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7d0JBQ3BDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSzt3QkFDZCxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7cUJBQ25ELENBQUMsQ0FBQzt5QkFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLENBQUMsS0FBSyxXQUFXLENBQUM7aUJBQ2hFO2dCQUNELDBCQUEwQjtnQkFDMUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ0osTUFBTSxFQUFFLENBQUM7Z0JBQ1QsRUFBRSxFQUFFLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLENBQUM7Z0JBQ1QsYUFBYSxFQUFFLENBQUM7YUFDakIsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPO1lBQ0wsVUFBVSxFQUFFLFNBQVM7WUFDckIsV0FBVyxFQUFFLFVBQVU7WUFDdkIsaUJBQWlCLEVBQUU7Z0JBQ2pCLEdBQUcscUJBQXFCO2dCQUN4QixnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNO2dCQUMvQyxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxVQUFVO2dCQUNqRCxRQUFRLEVBQUUsY0FBYyxDQUFDLE1BQU07YUFDaEM7WUFDRCxNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxFQUFFO1lBQ1YsS0FBSyxFQUFFLEVBQUU7WUFDVCxLQUFLLEVBQUUsRUFBRTtZQUNULE9BQU8sRUFBRSxFQUFFO1lBQ1gsSUFBSSxFQUFFLEVBQUU7WUFDUixNQUFNO1lBQ04sSUFBSTtZQUNKLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLFVBQVU7WUFDVixjQUFjLEVBQUUsRUFBRTtZQUNsQixTQUFTLEVBQUUsRUFBRTtZQUNiLGVBQWUsRUFBRSxFQUFFO1lBQ25CLHdCQUF3QjtZQUN4QixzQkFBc0I7WUFDdEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsS0FBSztTQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxLQUFLLENBQ1osTUFBa0IsRUFDbEIsT0FBa0IsRUFDbEIsVUFBc0I7UUFFdEIsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUMzQixzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLElBQUksQ0FDVixrQkFBa0IsT0FBTyxDQUFDLElBQUksOENBQThDLENBQzdFLENBQUM7WUFDRixPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQ2hEO1FBRUQsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2QixPQUFPLFVBQVUsQ0FBQztTQUNuQjtRQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBRTFDLE1BQU0saUJBQWlCLEdBQUcsdUJBQXVCLENBQy9DLE1BQU0sRUFDTixJQUFJLEVBQ0osVUFBVSxFQUNWLElBQUksRUFDSixJQUFJLENBQ0wsQ0FBQztRQUNGLElBQUksaUJBQWlCLEtBQUssSUFBSSxFQUFFO1lBQzlCLE9BQU8sRUFBRSxHQUFHLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDaEQ7UUFFRCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsMEJBQTBCLENBQzFDLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLGlCQUFpQixDQUNsQixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFNUMsTUFBTSxJQUFJLEdBQWlCLEVBQUUsQ0FBQztRQUM5QixNQUFNLGVBQWUsR0FBMkIsRUFBRSxDQUFDO1FBQ25ELE1BQU0sVUFBVSxHQUFvQixFQUFFLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sVUFBVSxHQUFlLEVBQUUsQ0FBQztZQUNsQyxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDdEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRTtnQkFDdEMsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLFdBQVc7cUJBQ3BDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDO3FCQUN4RCxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO3FCQUNuQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixNQUFNLEVBQ0osU0FBUyxFQUFFLFdBQVcsRUFDdEIsY0FBYyxFQUFFLGNBQWMsRUFDOUIsZUFBZSxHQUNoQixHQUFHLHFCQUFxQixDQUN2QixHQUFHLEVBQ0gsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLGlCQUFpQixDQUFDLGNBQWMsRUFDL0QsV0FBVyxDQUNaLENBQUM7Z0JBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFVBQTBCLEVBQVUsRUFBRSxDQUM5RCxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDdkQsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLEdBQUcsY0FBYyxDQUFDO2dCQUN2RCxNQUFNLFNBQVMsR0FBRyxhQUFhLEdBQUcsaUJBQWlCLENBQUMsY0FBYyxDQUFDO2dCQUNuRSxNQUFNLFlBQVksR0FBRyxTQUFTLEdBQUcsY0FBYyxDQUFDO2dCQUVoRCxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxHQUNMLGlCQUFpQixDQUFDLGVBQWU7b0JBQ2pDLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQzNELEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUM3QixFQUFFLEtBQUssQ0FBQztnQkFDVCxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUU7b0JBQ3RCLFVBQVUsQ0FBQyxJQUFJLENBQUM7d0JBQ2QsV0FBVyxFQUFFLE1BQU07d0JBQ25CLFFBQVEsRUFBRSxNQUFNO3dCQUNoQixNQUFNLEVBQUUsY0FBYzt3QkFDdEIsS0FBSzt3QkFDTCxDQUFDLEVBQUUsU0FBUzt3QkFDWixDQUFDO3dCQUNELGFBQWE7d0JBQ2IsTUFBTSxFQUFFLElBQUk7d0JBQ1osV0FBVyxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUM7d0JBQ2pELEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTt3QkFDVixXQUFXLEVBQUUsQ0FBQzt3QkFDZCxLQUFLLEVBQUUsZUFBZTt3QkFDdEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLO3FCQUN0QixDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLEVBQUU7b0JBQ3pCLFVBQVUsQ0FBQyxJQUFJLENBQUM7d0JBQ2QsV0FBVyxFQUFFLE1BQU07d0JBQ25CLFFBQVEsRUFBRSxNQUFNO3dCQUNoQixNQUFNLEVBQUUsaUJBQWlCO3dCQUN6QixLQUFLO3dCQUNMLENBQUMsRUFBRSxZQUFZO3dCQUNmLENBQUM7d0JBQ0QsYUFBYTt3QkFDYixNQUFNLEVBQUUsS0FBSzt3QkFDYixXQUFXLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQzt3QkFDbEQsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO3dCQUNWLFdBQVcsRUFBRSxDQUFDO3dCQUNkLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLGVBQWU7d0JBQ2xDLFVBQVUsRUFBRSxHQUFHLENBQUMsS0FBSztxQkFDdEIsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELDRDQUE0QztnQkFDNUMsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDZCxXQUFXLEVBQUUsTUFBTTtvQkFDbkIsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLE1BQU0sRUFBRSxjQUFjLEdBQUcsaUJBQWlCO29CQUMxQyxLQUFLO29CQUNMLENBQUMsRUFBRSxTQUFTO29CQUNaLENBQUM7b0JBQ0QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDVixXQUFXLEVBQUUsQ0FBQztvQkFDZCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7b0JBQ2hCLFVBQVUsRUFBRSxHQUFHLENBQUMsS0FBSztvQkFDckIsTUFBTSxFQUFFLEtBQUs7b0JBQ2IsV0FBVyxFQUFFLEtBQUs7aUJBQ25CLENBQUMsQ0FBQztnQkFDSCxhQUFhO29CQUNYLFdBQVc7d0JBQ1gsaUJBQWlCLENBQUMsZ0JBQWdCO3dCQUNsQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQztnQkFFdEMsYUFBYTtnQkFDYix5Q0FBeUM7Z0JBQ3pDLElBQUksd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQyxLQUFLLE1BQU0sVUFBVSxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUM3QyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUNqRCxFQUFFO29CQUNELE1BQU0sU0FBUyxHQUFHLFNBQVMsR0FBRyx3QkFBd0IsQ0FBQztvQkFDdkQsTUFBTSxZQUFZLEdBQUcsU0FBUyxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUM5RCxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUNyQixNQUFNLGdCQUFnQixHQUF5Qjt3QkFDN0MsV0FBVyxFQUFFLFlBQVk7d0JBQ3pCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSzt3QkFDdkIsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHO3dCQUNuQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7d0JBQ3ZCLElBQUksRUFBRSxDQUFDO3dCQUNQLE9BQU8sRUFBRTs0QkFDUCxFQUFFLEVBQUUsU0FBUzs0QkFDYixFQUFFOzRCQUNGLHVCQUF1Qjs0QkFDdkIsRUFBRSxFQUFFLENBQUM7NEJBQ0wsRUFBRSxFQUFFLENBQUM7eUJBQ047d0JBQ0QsVUFBVSxFQUFFOzRCQUNWLEVBQUUsRUFBRSxZQUFZOzRCQUNoQixFQUFFOzRCQUNGLHVCQUF1Qjs0QkFDdkIsRUFBRSxFQUFFLENBQUM7NEJBQ0wsRUFBRSxFQUFFLENBQUM7eUJBQ047d0JBQ0QsdUJBQXVCO3dCQUN2QixJQUFJLEVBQUUsRUFBRTtxQkFDVCxDQUFDO29CQUNGLHdCQUF3QixJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUN6RCxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7aUJBQ3hDO2dCQUNELGtEQUFrRDtnQkFDbEQsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QixLQUFLLE1BQU0sVUFBVSxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUM3QyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUNsRCxFQUFFO29CQUNELE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FDN0MsR0FBRyxDQUFDLEVBQUUsQ0FDSixHQUFHLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxLQUFLO3dCQUM5QixHQUFHLENBQUMsR0FBRyxLQUFLLFVBQVUsQ0FBQyxHQUFHO3dCQUMxQixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQ3JCLENBQUM7b0JBQ0YsSUFBSSxrQkFBa0IsRUFBRTt3QkFDdEIsTUFBTSxTQUFTLEdBQUcsU0FBUyxHQUFHLHdCQUF3QixDQUFDO3dCQUN2RCxNQUFNLFlBQVksR0FBRyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQzlELGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDO3dCQUMxQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDbEMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUM7d0JBQ2hELGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUNyQyxrQkFBa0IsQ0FBQyxJQUFJOzRCQUNyQiwyQkFBMkIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3dCQUVsRCx3QkFBd0IsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDMUQ7aUJBQ0Y7Z0JBRUQsYUFBYTtnQkFDYixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDckQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQy9CLEVBQUUsVUFBVSxDQUFDO2dCQUNkLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtvQkFDekIsVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDZCxXQUFXLEVBQUUsV0FBVzt3QkFDeEIsYUFBYSxFQUFFLE1BQU07d0JBQ3JCLEtBQUssRUFBRSxHQUFHLE9BQU8sS0FBSyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDL0MsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FDakMsR0FBRzt3QkFDSixJQUFJLEVBQUUsQ0FBQzt3QkFDUCxJQUFJLEVBQ0YsU0FBUzs0QkFDVCxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQjtnQ0FDbEMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7Z0NBQ25DLENBQUM7d0JBQ0wsTUFBTSxFQUFFLE9BQU87d0JBQ2YsSUFBSSxFQUFFLElBQUk7d0JBQ1YsV0FBVyxFQUFFLENBQUM7d0JBQ2QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO3FCQUNkLENBQUMsQ0FBQztpQkFDSjtnQkFDRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FDaEUsU0FBUyxFQUNULFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FDckMsQ0FBQztnQkFDRixVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNkLFdBQVcsRUFBRSxXQUFXO29CQUN4QixhQUFhLEVBQUUsTUFBTTtvQkFDckIsS0FBSyxFQUFFLFdBQVc7b0JBQ2xCLElBQUksRUFBRSxDQUFDO29CQUNQLElBQUksRUFBRSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQztvQkFDeEQsTUFBTSxFQUFFLE9BQU87b0JBQ2YsV0FBVyxFQUFFLENBQUM7b0JBQ2QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2lCQUNkLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN2QjtRQUVELFNBQVMsS0FBSyxDQUFDLEdBTWQ7WUFDQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5QyxJQUNFLGlCQUFpQixLQUFLLElBQUk7Z0JBQzFCLHFCQUFxQixDQUNuQixHQUFHLENBQUMsQ0FBQyxFQUNMLEdBQUcsQ0FBQyxDQUFDLEVBQ0wsUUFBUSxFQUNSLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsVUFBVSxDQUNYLEVBQ0Q7Z0JBQ0EsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELE1BQU0sZUFBZSxHQUFHLDBCQUEwQixDQUNoRCxpQkFBaUIsRUFDakIsUUFBUSxDQUNULENBQUM7WUFDRixJQUFJLGVBQWUsS0FBSyxJQUFJLElBQUksZUFBZSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNwRSxPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsSUFBSSxlQUFlLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtnQkFDbEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUM3QyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUNwQixXQUFXO3dCQUNYLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDO3dCQUNsRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO3dCQUN4QixNQUFNLE1BQU0sR0FDVixpQkFBaUIsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDOzRCQUN0QyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQzt3QkFDdEMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsQ0FBQzt3QkFDN0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxHQUNuRCx3QkFBd0IsQ0FDdEIsWUFBWSxFQUNaLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sQ0FDUCxDQUFDO3dCQUNKLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUN4QixPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3BCLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDcEIsV0FBVyxFQUNYLFlBQVksQ0FDYixDQUFDO3dCQUNGLE9BQU87NEJBQ0wsU0FBUyxFQUFFLE1BQU07NEJBQ2pCLFdBQVcsRUFBRSxVQUFVOzRCQUN2QixLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFOzRCQUNuQixXQUFXLEVBQUUsZUFBZSxDQUFDLEtBQUs7NEJBQ2xDLE9BQU8sRUFBRTtnQ0FDUCxNQUFNO2dDQUNOLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FDdEQsU0FBUyxFQUNULFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FDMUM7NkJBQ0Y7eUJBQ0YsQ0FBQztxQkFDSDt5QkFBTTtvQkFDTCxpRUFBaUU7b0JBQ2pFLDhEQUE4RDtvQkFDOUQsQ0FBQyxHQUFHLENBQUMsVUFBVTt3QkFDZixRQUFRLElBQUksR0FBRyxDQUFDLENBQUM7d0JBQ2pCLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQzdCO3dCQUNBLEtBQUs7d0JBQ0wsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7d0JBQ2xELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7d0JBQ3hCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDO3dCQUNsRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO3dCQUMxQixNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEdBQ25ELHdCQUF3QixDQUN0QixZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxDQUNQLENBQUM7d0JBQ0osTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQ3hCLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDcEIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNwQixXQUFXLEVBQ1gsWUFBWSxDQUNiLENBQUM7d0JBQ0YsT0FBTzs0QkFDTCxTQUFTLEVBQUUsTUFBTTs0QkFDakIsV0FBVyxFQUFFLEtBQUs7NEJBQ2xCLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUU7NEJBQ25CLFdBQVcsRUFBRSxlQUFlLENBQUMsS0FBSzs0QkFDbEMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEtBQUssSUFBSTs0QkFDOUIsT0FBTyxFQUFFO2dDQUNQLE1BQU07Z0NBQ04sUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUN0RCxTQUFTLEVBQ1QsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUNyQzs2QkFDRjt5QkFDRixDQUFDO3FCQUNIO2lCQUNGO2FBQ0Y7aUJBQU07Z0JBQ0wsS0FBSyxNQUFNLFVBQVUsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUM3QyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLEtBQUssQ0FDbEQsRUFBRTtvQkFDRCxJQUFJLDRCQUE0QixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7d0JBQ2hFLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQzt3QkFDbEUsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQzVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FDekIsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDbkQsVUFBVSxDQUFDLE9BQU8sQ0FDbkIsQ0FBQzt3QkFDRixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQzVCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQ25ELFVBQVUsQ0FBQyxVQUFVLENBQ3RCLENBQUM7d0JBQ0YsTUFBTSxZQUFZLEdBQUcsUUFBUSxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQzt3QkFDckQsTUFBTSxNQUFNLEdBQUcsV0FBVyxHQUFHLFFBQVEsQ0FBQzt3QkFDdEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxHQUNuRCx3QkFBd0IsQ0FDdEIsWUFBWSxFQUNaLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sQ0FDUCxDQUFDO3dCQUNKLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUN4QixPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3BCLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDcEIsV0FBVyxFQUNYLFlBQVksQ0FDYixDQUFDO3dCQUNGLE9BQU87NEJBQ0wsU0FBUyxFQUFFLE1BQU07NEJBQ2pCLFdBQVcsRUFBRSxZQUFZOzRCQUN6QixPQUFPLEVBQUUsVUFBVSxDQUFDLEtBQUs7NEJBQ3pCLEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRzs0QkFDckIsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLElBQUk7NEJBQ2pDLE9BQU8sRUFBRTtnQ0FDUCxNQUFNO2dDQUNOLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FDdEQsU0FBUyxFQUNULFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FDNUM7NkJBQ0Y7eUJBQ0YsQ0FBQztxQkFDSDtpQkFDRjthQUNGO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTztZQUNMLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxVQUFVO1lBQ3hDLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXO1lBQzFDLGlCQUFpQjtZQUNqQixNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxFQUFFO1lBQ1YsTUFBTSxFQUFFLEVBQUU7WUFDVixJQUFJO1lBQ0osS0FBSyxFQUFFLEVBQUU7WUFDVCxPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSztZQUNMLElBQUksRUFBRSxFQUFFO1lBQ1IsY0FBYyxFQUFFLEVBQUU7WUFDbEIsVUFBVTtZQUNWLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLFNBQVMsRUFBRSxFQUFFO1lBQ2IsZUFBZTtZQUNmLHdCQUF3QixFQUFFLGlCQUFpQixDQUFDLHdCQUF3QjtZQUNwRSxzQkFBc0IsRUFBRSxpQkFBaUIsQ0FBQyxzQkFBc0I7WUFDaEUsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztNQUlFO0lBQ0YsU0FBUyxlQUFlLENBQUMsQ0FBUSxFQUFFLElBQVk7UUFDN0MsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSTtZQUNwRCxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUM7SUFFRCxTQUFTLGFBQWEsQ0FDcEIsSUFBYyxFQUNkLFFBQWtCLEVBQ2xCLElBQVk7UUFFWixPQUFPLFFBQVE7YUFDWixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBZ0IsZ0JBQWdCLENBQzlCLEtBQXNCLEVBQ3RCLElBQWM7UUFFZCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELElBQUksS0FBSyxDQUFDLFdBQVcsS0FBSyxZQUFZLEVBQUU7WUFDdEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQ2pDLEtBQUssQ0FBQyxFQUFFLENBQ04sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLE9BQU87Z0JBQzVDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUk7Z0JBQzlDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsS0FBSztnQkFDOUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FDckQsQ0FBQztZQUNGLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2dCQUNsQixLQUFLLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDOUMsUUFBUTthQUNULENBQUM7U0FDSDtRQUVELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDL0IsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FDcEMsS0FBSyxDQUFDLEVBQUUsQ0FDTixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsS0FBSztZQUMxQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQ2pELENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRCxNQUFNLElBQUksR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2RCxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssVUFBVSxFQUFFO1lBQ3BDLE9BQU87Z0JBQ0wsR0FBRyxJQUFJO2dCQUNQLE1BQU0sRUFBRSxPQUFPO2dCQUNmLEtBQUssRUFBRSxVQUFVO2dCQUNqQixRQUFRLEVBQUUsV0FBVzthQUN0QixDQUFDO1NBQ0g7UUFFRCxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ25CLE9BQU87Z0JBQ0wsR0FBRyxJQUFJO2dCQUNQLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixLQUFLLEVBQUUsZUFBZTtnQkFDdEIsVUFBVTtnQkFDVixRQUFRLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FDMUIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQzlEO2FBQ0YsQ0FBQztTQUNIO1FBQ0QsT0FBTztZQUNMLEdBQUcsSUFBSTtZQUNQLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLEtBQUssRUFBRSxVQUFVLEdBQUcsZUFBZTtZQUNuQyxVQUFVO1lBQ1YsUUFBUSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQzFCLEtBQUssQ0FBQyxFQUFFLENBQ04sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUNuRDtTQUNGLENBQUM7SUFDSixDQUFDO0lBaEVlLHNCQUFnQixtQkFnRS9CLENBQUE7SUFFRCxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDWCx1QkFBaUIsR0FBRyxFQUFFLENBQUMsQ0FBQyxxRkFBcUY7SUFDN0csc0JBQWdCLEdBQUcsR0FBRyxDQUFDO0lBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztJQUMxQiwrRkFBK0Y7SUFDL0YsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLENBQUM7SUFDckMsTUFBTSxvQ0FBb0MsR0FBRyxDQUFDLENBQUM7SUFDL0MsTUFBTSw4QkFBOEIsR0FBRyxHQUFHLENBQUM7SUFFM0MsU0FBUyxzQkFBc0IsQ0FDN0IsWUFBeUIsRUFDekIsSUFBaUIsRUFDakIsTUFBYztRQUVkLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBVSxFQUFFLEVBQUUsQ0FDaEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pELE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RCxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsR0FDeEQsTUFBTSxDQUFDLGtCQUFrQjtZQUN2QixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztZQUNyQyxDQUFDLENBQUM7Z0JBQ0UsSUFBSTtnQkFDSixRQUFRO2FBQ1QsQ0FBQztRQUNSLE1BQU0sYUFBYSxHQUFHLENBQ3BCLEtBQWEsRUFDYixXQUFnQyxFQUNoQyxNQUFnQixFQUNSLEVBQUU7WUFDVixJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7Z0JBQ25CLElBQUksV0FBVyxLQUFLLElBQUksRUFBRTtvQkFDeEIsT0FBTyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUN2QztnQkFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDOUI7WUFDRCxJQUFJLE1BQU0sR0FBa0IsSUFBSSxDQUFDO1lBQ2pDLElBQUksV0FBVyxFQUFFO2dCQUNmLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDN0M7aUJBQU07Z0JBQ0wsTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEM7WUFDRCxPQUFPLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3hDLENBQUMsQ0FBQztRQUVGLGtGQUFrRjtRQUNsRixNQUFNLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRTFFLE9BQU87WUFDTCxVQUFVO1lBQ1YsYUFBYTtZQUNiLFlBQVk7WUFDWixNQUFNO1NBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFnQixxQkFBcUIsQ0FDbkMsSUFBaUI7UUFFakIsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXNDLENBQUM7UUFFL0QsOENBQThDO1FBQzlDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzNCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsK0VBQStFO1FBQy9FLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWdDLENBQUM7WUFFM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO29CQUM1QyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDN0M7Z0JBQ0QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUM7WUFFSCxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFO29CQUN0QyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDdEMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQTdCZSwyQkFBcUIsd0JBNkJwQyxDQUFBO0lBRUQsU0FBZ0IsUUFBUSxDQUN0QixJQUE0QyxFQUM1QyxZQUFxRCxFQUNyRCxNQUF5QjtRQUV6QixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDdEIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEI7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzVDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLE9BQU8sTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQVhlLGNBQVEsV0FXdkIsQ0FBQTtJQUVELFNBQVMsa0JBQWtCLENBQUMsaUJBQXVDO1FBQ2pFLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxpQkFBaUIsQ0FBQyxrQkFBa0IsS0FBSyxVQUFVLEVBQUU7WUFDdkQsYUFBYTtnQkFDWCxpQkFBaUIsQ0FBQyxVQUFVO29CQUM1QixpQkFBaUIsQ0FBQyxXQUFXO29CQUM3QixpQkFBaUIsQ0FBQyxZQUFZLENBQUM7WUFDakMsVUFBVTtnQkFDUixpQkFBaUIsQ0FBQywyQkFBMkIsR0FBRyxhQUFhLENBQUM7U0FDakU7UUFDRCxJQUFJLGlCQUFpQixDQUFDLGtCQUFrQixLQUFLLFlBQVksRUFBRTtZQUN6RCxhQUFhO2dCQUNYLGlCQUFpQixDQUFDLFdBQVc7b0JBQzdCLGlCQUFpQixDQUFDLFVBQVU7b0JBQzVCLGlCQUFpQixDQUFDLGFBQWEsQ0FBQztZQUNsQyxVQUFVLEdBQUcsaUJBQWlCLENBQUMseUJBQXlCLEdBQUcsYUFBYSxDQUFDO1NBQzFFO1FBQ0QsVUFBVSxHQUFHLFVBQVUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxNQUFBLGlCQUFpQixDQUFDLENBQUM7UUFDM0UsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxTQUFTLHVCQUF1QixDQUM5QixJQUFpQixFQUNqQixNQUFjO1FBUWQsc0VBQXNFO1FBQ3RFLHVFQUF1RTtRQUN2RSxzRUFBc0U7UUFDdEUsZ0RBQWdEO1FBQ2hELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5RCxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUNuRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FDN0Isb0JBQW9CLENBQUMsSUFBSSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztZQUNwRCxDQUFDLENBQUMsRUFBRSxDQUNQLENBQUM7UUFDRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFekMsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7UUFDbkQsTUFBTSxzQkFBc0IsR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7WUFDakUsQ0FBQyxDQUFDLGdCQUFnQjtZQUNsQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVsQyxPQUFPO1lBQ0wsU0FBUyxFQUFFLHNCQUFzQjtZQUNqQyxTQUFTLEVBQUUsZ0JBQWdCO1lBQzNCLEtBQUssRUFBRSxzQkFBc0IsR0FBRyxnQkFBZ0I7WUFDaEQsa0JBQWtCO1lBQ2xCLGtCQUFrQjtTQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVELDZHQUE2RztJQUM3RyxTQUFTLGFBQWEsQ0FDcEIsSUFBaUIsRUFDakIsTUFBYyxFQUNkLGlCQUF1QztRQUV2QyxNQUFNLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsTUFBTSxVQUFVLEdBQ2QsY0FBYyxDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxPQUFPO1lBQ2hELENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLENBQUM7UUFFL0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELDRHQUE0RztJQUM1RyxTQUFTLGlCQUFpQixDQUN4QixJQUFpQixFQUNqQixNQUFjLEVBQ2QsaUJBQXVDO1FBRXZDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDbEUsT0FBTyxVQUFVLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxDQUFDO0lBQ2xELENBQUM7SUFFRCw2R0FBNkc7SUFDN0csU0FBUyxvQkFBb0IsQ0FDM0IsSUFBaUIsRUFDakIsTUFBYyxFQUNkLGlCQUF1QyxFQUN2QyxXQUFtQjtRQUVuQixJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQztRQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLG1CQUFtQixJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztTQUMzRTtRQUNELE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVELFNBQVMsdUJBQXVCLENBQzlCLElBQW9CLEVBQ3BCLE1BQWMsRUFDZCxTQUFpQixFQUNqQixpQkFBdUMsRUFDdkMsTUFBOEI7UUFFOUIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUNqQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsU0FBUyxxQkFBcUIsQ0FDNUIsSUFBaUIsRUFDakIsTUFBYyxFQUNkLFNBQWlCLEVBQ2pCLGlCQUF1QztRQUV2QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQ2pDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELFNBQVMsUUFBUSxDQUNmLElBQWlCLEVBQ2pCLFFBQW1DLEVBQ25DLE1BQWMsRUFDZCxTQUFpQixFQUNqQixpQkFBdUM7UUFFdkMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUNwQyxJQUFJLEVBQ0osTUFBTSxFQUNOLGlCQUFpQixFQUNqQixDQUFDLENBQ0YsQ0FBQztZQUNGLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDckQ7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDcEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUMzRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvRCxNQUFNLElBQUksR0FBRyxTQUFTLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFeEMsNkNBQTZDO1FBQzdDLDhEQUE4RDtRQUM5RCxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDcEM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDckIsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQ3BDLElBQUksRUFDSixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLENBQUMsQ0FDRixDQUFDO1lBQ0YsT0FBTztnQkFDTCxLQUFLLEVBQ0gsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7b0JBQ3hELFdBQVc7Z0JBQ2IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDbkIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsa0JBQWtCLENBQ3pCLElBQWlCLEVBQ2pCLE1BQWMsRUFDZCxpQkFBdUMsRUFDdkMsV0FBbUI7UUFFbkIsTUFBTSxjQUFjLEdBQ2xCLGlCQUFpQixDQUFDLGtCQUFrQixLQUFLLFlBQVk7WUFDbkQsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGNBQWM7WUFDbEMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQztRQUN4QywrREFBK0Q7UUFDL0QsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEUsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxpQkFBaUIsQ0FBQyxrQkFBa0IsS0FBSyxZQUFZLEVBQUU7WUFDekQsMEhBQTBIO1lBQzFILGtIQUFrSDtZQUNsSCw0R0FBNEc7WUFDNUcsbUJBQW1CLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUQ7UUFFRCxPQUFPLGNBQWMsR0FBRyxZQUFZLEdBQUcsbUJBQW1CLENBQUM7SUFDN0QsQ0FBQztJQTJMWSxtQkFBYSxHQUFXO1FBQ25DLElBQUksRUFBRSxNQUFNO1FBQ1osY0FBYyxFQUFFLElBQUk7UUFDcEIsTUFBTSxFQUFFLE1BQUEsbUJBQW1CO1FBQzNCLGlCQUFpQixFQUFFLEtBQUs7UUFDeEIsZ0JBQWdCLEVBQUUscUJBQXFCO1FBQ3ZDLHVCQUF1QixFQUFFLCtDQUErQztRQUN4RSxTQUFTLEVBQUUsVUFBVTtRQUNyQixjQUFjLEVBQUUsSUFBSTtRQUNwQixVQUFVLEVBQUUsS0FBSztLQUNsQixDQUFDO0lBRVcsd0JBQWtCLEdBQVc7UUFDeEMsSUFBSSxFQUFFLE9BQU87UUFDYixjQUFjLEVBQUUsSUFBSTtRQUNwQixNQUFNLEVBQUUsTUFBQSxtQkFBbUI7UUFDM0IsaUJBQWlCLEVBQUUsS0FBSztRQUN4QixnQkFBZ0IsRUFBRSxxQkFBcUI7UUFDdkMsdUJBQXVCLEVBQUUsK0NBQStDO1FBQ3hFLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLGdCQUFnQixFQUFFO1lBQ2hCLElBQUksRUFBRSxRQUFRO1lBQ2QsWUFBWSxFQUFFLEVBQUU7U0FDakI7S0FDRixDQUFDO0lBWUYsU0FBUyxPQUFPLENBQUMsSUFBaUI7UUFDaEMsT0FBTztZQUNMLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSztZQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7U0FDcEMsQ0FBQztJQUNKLENBQUM7SUFNRCxTQUFTLE9BQU8sQ0FBQyxJQUFpQjtRQUNoQyxPQUFPO1lBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztTQUNwQyxDQUFDO0lBQ0osQ0FBQztJQThNRCxNQUFNLFVBQVUsR0FBa0I7UUFDaEMsVUFBVSxFQUFFLENBQUM7UUFDYixXQUFXLEVBQUUsQ0FBQztRQUNkLGlCQUFpQixFQUFFLHFCQUFxQjtRQUN4QyxNQUFNLEVBQUUsRUFBRTtRQUNWLE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTSxFQUFFLEVBQUU7UUFDVixLQUFLLEVBQUUsRUFBRTtRQUNULE9BQU8sRUFBRSxFQUFFO1FBQ1gsS0FBSyxFQUFFLEVBQUU7UUFDVCxJQUFJLEVBQUUsRUFBRTtRQUNSLElBQUksRUFBRSxFQUFFO1FBQ1IsY0FBYyxFQUFFLEVBQUU7UUFDbEIsVUFBVSxFQUFFLEVBQUU7UUFDZCxjQUFjLEVBQUUsRUFBRTtRQUNsQixTQUFTLEVBQUUsRUFBRTtRQUNiLGVBQWUsRUFBRSxFQUFFO1FBQ25CLHdCQUF3QixFQUFFLFVBQVU7UUFDcEMsc0JBQXNCLEVBQUUsVUFBVTtRQUNsQyxVQUFVLEVBQUUsSUFBSTtLQUNqQixDQUFDO0lBRUYsZ0VBQWdFO0lBQ2hFLG1FQUFtRTtJQUNuRSxTQUFTLDBCQUEwQixDQUNqQyxJQUFpQixFQUNqQixrQkFFUSxFQUNSLE1BQWMsRUFDZCxpQkFBdUM7UUFLdkMsTUFBTSxhQUFhLEdBQ2pCLGtCQUFrQixLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUM5RCxNQUFNLEVBQ0osY0FBYyxFQUNkLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6Qix5QkFBeUIsR0FDMUIsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxXQUFXLEdBQ2YsaUJBQWlCLENBQUMsa0JBQWtCLEtBQUssWUFBWTtZQUNuRCxDQUFDLENBQUMsaUJBQWlCLENBQUMsZUFBZTtZQUNuQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDO1FBQ3ZDLElBQUksVUFBVSxHQUNaLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLEtBQUssWUFBWTtZQUNwRCxDQUFDLENBQUMsaUJBQWlCLENBQUMsMkJBQTJCO1lBQy9DLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLGFBQWEsQ0FBQztRQUNuRSxVQUFVLEdBQUcsVUFBVSxHQUFHLENBQUMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLE1BQUEsaUJBQWlCLENBQUMsQ0FBQztRQUMzRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQy9CLENBQUMsRUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FDdkQsQ0FBQztRQUNGLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDcEMsZ0JBQWdCLEVBQ2hCLGlCQUFpQixDQUFDLGVBQWUsQ0FDbEMsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLGNBQWMsS0FBSyxDQUFDLElBQUksY0FBYyxLQUFLLENBQUMsQ0FBQztRQUNoRSxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsS0FBSyxDQUFDLElBQUksZ0JBQWdCLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sVUFBVSxHQUNkLGlCQUFpQixDQUFDLGtCQUFrQixLQUFLLFlBQVk7WUFDckQsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNO1lBQ3BCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLDJHQUEyRztRQUMzRyxJQUFJLG1CQUFtQixHQUFHLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQztRQUNyRSxJQUFJLG1CQUFtQixHQUFHLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQztRQUVyRSx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixNQUFNLGNBQWMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFFbEUsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN2RCxNQUFNLEtBQUssR0FBa0IsTUFBTTtpQkFDaEMsS0FBSyxDQUFDLHFCQUFxQixDQUFDO2lCQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNaLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVztnQkFDakMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2FBQ2xDLENBQUMsQ0FBQyxDQUFDO1lBQ04sTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFhLEVBQVUsRUFBRTtnQkFDdEMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDO1lBQ3JDLENBQUMsQ0FBQztZQUNGLE9BQU87Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2FBQ04sQ0FBQztTQUNIO1FBQ0QscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixNQUFNLGdCQUFnQixHQUFHLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUU5RCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDekQsTUFBTSxLQUFLLEdBQWtCLE1BQU07aUJBQ2hDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQztpQkFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDWixLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVc7Z0JBQ2pDLEtBQUssRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQzthQUNqQyxDQUFDLENBQUMsQ0FBQztZQUNOLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBYSxFQUFVLEVBQUU7Z0JBQ3RDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLFdBQVcsQ0FBQztZQUNyQyxDQUFDLENBQUM7WUFDRixPQUFPO2dCQUNMLEtBQUs7Z0JBQ0wsS0FBSzthQUNOLENBQUM7U0FDSDtRQUNELElBQUkscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUkscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBRTlCLDZEQUE2RDtRQUM3RCxxRkFBcUY7UUFDckYseUZBQXlGO1FBQ3pGLElBQ0UsQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLGdCQUFnQixJQUFJLENBQUMsQ0FBQztZQUM5QyxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksZ0JBQWdCLElBQUksQ0FBQyxDQUFDLEVBQzlDO1lBQ0EsaUdBQWlHO1lBQ2pHLHNEQUFzRDtZQUN0RCxnR0FBZ0c7WUFDaEcsSUFBSSxjQUFjLElBQUksQ0FBQyxFQUFFO2dCQUN2QixtQkFBbUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDckQ7WUFDRCxJQUFJLGNBQWMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3ZCLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pCLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDO2dCQUN6QyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDcEQ7WUFDRCxJQUFJLGdCQUFnQixJQUFJLENBQUMsRUFBRTtnQkFDekIscUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3pDLHFCQUFxQixHQUFHLENBQUMsZ0JBQWdCLENBQUM7YUFDM0M7U0FDRjthQUFNLElBQUksY0FBYyxHQUFHLENBQUMsRUFBRTtZQUM3QixJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLHdDQUF3QztnQkFDeEMsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7b0JBQ3hCLDZCQUE2QjtvQkFDN0IscUJBQXFCLEdBQUcsZ0JBQWdCLEdBQUcseUJBQXlCLENBQUM7b0JBQ3JFLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFO3dCQUN4Qiw2QkFBNkI7d0JBQzdCLHFCQUFxQjs0QkFDbkIsZ0JBQWdCLEdBQUcseUJBQXlCLENBQUM7cUJBQ2hEO3lCQUFNO3dCQUNMLGlDQUFpQzt3QkFDakMscUJBQXFCOzRCQUNuQixDQUFDLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztnQ0FDbkMsY0FBYztnQ0FDZCx5QkFBeUIsQ0FBQztxQkFDN0I7aUJBQ0Y7cUJBQU07b0JBQ0wsa0NBQWtDO29CQUNsQyxxQkFBcUIsR0FBRyxnQkFBZ0IsR0FBRyx5QkFBeUIsQ0FBQztvQkFDckUscUJBQXFCO3dCQUNuQixDQUFDLGdCQUFnQixHQUFHLGNBQWMsQ0FBQzs0QkFDbkMsY0FBYzs0QkFDZCx5QkFBeUIsQ0FBQztpQkFDN0I7YUFDRjtpQkFBTTtnQkFDTCwrQkFBK0I7Z0JBQy9CLHlHQUF5RztnQkFDekcscUJBQXFCLEdBQUcsZ0JBQWdCLEdBQUcseUJBQXlCLENBQUM7Z0JBQ3JFLHFCQUFxQixHQUFHLGdCQUFnQixHQUFHLHlCQUF5QixDQUFDO2dCQUNyRSxtQkFBbUI7b0JBQ2pCLENBQUMsY0FBYyxHQUFHLGdCQUFnQixDQUFDO3dCQUNuQyxnQkFBZ0I7d0JBQ2hCLHlCQUF5QixDQUFDO2FBQzdCO1NBQ0Y7YUFBTTtZQUNMLCtCQUErQjtZQUMvQix5R0FBeUc7WUFDekcscUJBQXFCLEdBQUcsZ0JBQWdCLEdBQUcseUJBQXlCLENBQUM7WUFDckUscUJBQXFCLEdBQUcsZ0JBQWdCLEdBQUcseUJBQXlCLENBQUM7WUFDckUsbUJBQW1CO2dCQUNqQixDQUFDLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQztvQkFDbkMsZ0JBQWdCO29CQUNoQix5QkFBeUIsQ0FBQztTQUM3QjtRQUNELE1BQU0sY0FBYyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUVsRSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXZELDhEQUE4RDtRQUM5RCxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkUsTUFBTSxvQkFBb0IsR0FBRyxXQUFXLENBQ3RDLENBQUMscUJBQXFCLEVBQUUscUJBQXFCLENBQUMsRUFDOUMsVUFBVSxDQUNYLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUN4QixxQkFBcUIsRUFDckIsa0JBQWtCLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsTUFBTSxFQUN0RCxvQkFBb0IsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxNQUFNLENBQ3pELENBQUM7UUFDRixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXO1lBQ2pDLEtBQUssRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztZQUNqQyxJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUMsQ0FBQyxDQUFDO1FBRUosMkhBQTJIO1FBQzNILE1BQU0sbUJBQW1CLEdBQUcsb0JBQW9CO2FBQzdDLEtBQUssQ0FBQyxTQUFTLENBQUM7YUFDaEIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNaLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7WUFDN0IsSUFBSSxFQUFFLElBQUk7WUFDVixLQUFLLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7U0FDakMsQ0FBQyxDQUFDLENBQUM7UUFDTixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEUsTUFBTSx5QkFBeUIsR0FDN0IsY0FBYyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsTUFBTSx5QkFBeUIsR0FDN0IsY0FBYyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEUsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9ELE1BQU0sY0FBYyxHQUFHLGNBQWMsR0FBRyxVQUFVLENBQUM7UUFDbkQsTUFBTSxjQUFjLEdBQUcsY0FBYyxHQUFHLFVBQVUsQ0FBQztRQUVuRCxNQUFNLFlBQVksR0FDaEIsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM1RCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEIsTUFBTSxzQkFBc0IsR0FDMUIsY0FBYyxHQUFHLFlBQVksR0FBRyx5QkFBeUIsQ0FBQztRQUM1RCxNQUFNLHNCQUFzQixHQUMxQixjQUFjLEdBQUcsWUFBWSxHQUFHLHlCQUF5QixDQUFDO1FBQzVELGtEQUFrRDtRQUNsRCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDM0IsT0FBTyxDQUFDLGNBQWMsRUFBRTtZQUN0QixNQUFNLHVCQUF1QixHQUMzQixzQkFBc0IsR0FBRyxhQUFhLEdBQUcscUJBQXFCO2dCQUM5RCxzQkFBc0IsS0FBSyxDQUFDLENBQUM7WUFDL0IsTUFBTSx1QkFBdUIsR0FDM0Isc0JBQXNCLEdBQUcsYUFBYSxHQUFHLHFCQUFxQjtnQkFDOUQsc0JBQXNCLEtBQUssQ0FBQyxDQUFDO1lBQy9CLElBQUksdUJBQXVCLElBQUksdUJBQXVCLEVBQUU7Z0JBQ3RELGFBQWEsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO2FBQ25DO2lCQUFNO2dCQUNMLGNBQWMsR0FBRyxJQUFJLENBQUM7YUFDdkI7U0FDRjtRQUNELDJIQUEySDtRQUMzSCxJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM3QixPQUFPLENBQUMsZ0JBQWdCLEVBQUU7WUFDeEIsTUFBTSxxQkFBcUIsR0FDekIsc0JBQXNCLEdBQUcsYUFBYSxHQUFHLHFCQUFxQixHQUFHLENBQUM7Z0JBQ2xFLHNCQUFzQixLQUFLLENBQUMsQ0FBQztZQUMvQixNQUFNLHFCQUFxQixHQUN6QixzQkFBc0IsR0FBRyxhQUFhLEdBQUcscUJBQXFCLEdBQUcsQ0FBQztnQkFDbEUsc0JBQXNCLEtBQUssQ0FBQyxDQUFDO1lBQy9CLElBQUkscUJBQXFCLElBQUkscUJBQXFCLEVBQUU7Z0JBQ2xELGFBQWEsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO2FBQ25DO2lCQUFNO2dCQUNMLGdCQUFnQixHQUFHLElBQUksQ0FBQzthQUN6QjtTQUNGO1FBQ0QsSUFBSSxrQkFBa0IsR0FBRyxzQkFBc0IsR0FBRyxhQUFhLENBQUM7UUFDaEUsSUFBSSxrQkFBa0IsR0FBRyxzQkFBc0IsR0FBRyxhQUFhLENBQUM7UUFDaEUsdUdBQXVHO1FBQ3ZHLElBQUksa0JBQWtCLEtBQUssQ0FBQyxJQUFJLG1CQUFtQixHQUFHLENBQUMsRUFBRTtZQUN2RCxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztZQUM3RCxrQkFBa0IsR0FBRyxXQUFXLEdBQUcsbUJBQW1CLENBQUM7U0FDeEQ7UUFDRCxJQUFJLGtCQUFrQixLQUFLLENBQUMsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLEVBQUU7WUFDdkQsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLEdBQUcsbUJBQW1CLENBQUM7WUFDN0Qsa0JBQWtCLEdBQUcsV0FBVyxHQUFHLG1CQUFtQixDQUFDO1NBQ3hEO1FBQ0QsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUNqQyxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLEVBQ3hDLFVBQVUsQ0FDWCxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQWtCLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELEdBQUcsSUFBSTtZQUNQLGNBQWMsRUFBRSxhQUFhLENBQzNCLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUN6QyxJQUFJLENBQ0w7U0FDRixDQUFDLENBQUMsQ0FBQztRQUVKLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBYSxFQUFFLFdBQWdDLEVBQVUsRUFBRTtZQUN4RSxJQUFJLFdBQVcsRUFBRTtnQkFDZixPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUM7YUFDN0M7WUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDckMsQ0FBQyxDQUFDO1FBQ0YsT0FBTztZQUNMLEtBQUs7WUFDTCxLQUFLO1NBQ04sQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLHFCQUFxQixDQUFDLElBQWlCLEVBQUUsTUFBYztRQUM5RCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxtQkFBbUIsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNFLE1BQU0scUJBQXFCLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUMvQixHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FDN0MsQ0FBQztRQUNGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQy9CLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUM3QyxDQUFDO1FBQ0YsSUFBSSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFDbEMsSUFBSSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFFbEMsaUZBQWlGO1FBQ2pGLElBQUksU0FBUyxFQUFFO1lBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbkQsb0JBQW9CO2dCQUNwQixNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQzlDLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDbEQsTUFBTSxZQUFZLEdBQ2hCLGNBQWMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekQsTUFBTSxjQUFjLEdBQ2xCLGdCQUFnQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9ELE1BQU0sT0FBTyxHQUFHLFlBQVksR0FBRyxjQUFjLENBQUM7Z0JBQzlDLElBQUksT0FBTyxHQUFHLHlCQUF5QixFQUFFO29CQUN2Qyx5QkFBeUIsR0FBRyxPQUFPLENBQUM7aUJBQ3JDO2dCQUVELG9CQUFvQjtnQkFDcEIsTUFBTSxhQUFhLEdBQ2pCLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLGVBQWUsR0FDbkIscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RFLE1BQU0sZUFBZSxHQUNuQixjQUFjLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELE1BQU0saUJBQWlCLEdBQ3JCLGdCQUFnQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLE1BQU0sVUFBVSxHQUFHLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztnQkFDdkQsSUFBSSxVQUFVLEdBQUcseUJBQXlCLEVBQUU7b0JBQzFDLHlCQUF5QixHQUFHLFVBQVUsQ0FBQztpQkFDeEM7YUFDRjtTQUNGO1FBRUQsT0FBTztZQUNMLGNBQWM7WUFDZCxjQUFjO1lBQ2QsZ0JBQWdCO1lBQ2hCLGdCQUFnQjtZQUNoQix5QkFBeUI7WUFDekIseUJBQXlCO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsSUFBaUIsRUFDakIsU0FBa0IsRUFDbEIsWUFBcUI7UUFFckIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO1lBQ2xDLElBQUksWUFBWSxFQUFFO2dCQUNoQiwwQ0FBMEM7Z0JBQzFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDN0I7WUFDRCxPQUFPO2dCQUNMO29CQUNFLEdBQUcsRUFBRSxDQUFDO29CQUNOLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ2hEO2FBQ0YsQ0FBQztTQUNIO1FBQ0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNsRCxpQkFBaUI7WUFDakIsT0FBTyxTQUFTO2dCQUNkLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtvQkFDM0IsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7b0JBQ3pCLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7d0JBQ2xDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssWUFBWSxFQUFFOzRCQUM5RCxTQUFTO3lCQUNWO3dCQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUMxQyxvQ0FBb0M7d0JBQ3BDLElBQUksTUFBTSxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzRCQUMxQixnQkFBZ0IsSUFBSSxNQUFNLENBQUM7eUJBQzVCO3FCQUNGO29CQUNELE9BQU8sR0FBRyxHQUFHLGdCQUFnQixDQUFDO2dCQUNoQyxDQUFDLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEUsSUFBSSxvQkFBb0IsR0FBZSxFQUFFLENBQUM7UUFDMUMsSUFBSSxNQUFNLEVBQUU7WUFDVixvQkFBb0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUM5QyxpQkFBaUI7Z0JBQ2pCLE9BQU8sU0FBUztvQkFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7d0JBQzNCLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO3dCQUN6QixLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFOzRCQUNsQyxJQUNFLGdCQUFnQixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLFlBQVk7Z0NBQ3pELE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQ3BEO2dDQUNBLFNBQVM7NkJBQ1Y7NEJBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDekMsb0NBQW9DOzRCQUNwQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsRUFBRTtnQ0FDMUIsZ0JBQWdCLElBQUksTUFBTSxDQUFDOzZCQUM1Qjt5QkFDRjt3QkFDRCxPQUFPLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQztvQkFDaEMsQ0FBQyxDQUFDO29CQUNKLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0sVUFBVSxHQUFtQyxFQUFFLENBQUM7UUFDdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3ZCLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNyQyxJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLFlBQVksRUFBRTtvQkFDN0QsT0FBTyxDQUFDLENBQUM7aUJBQ1Y7Z0JBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDdkIsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssWUFBWSxFQUFFO29CQUM3RCxPQUFPLENBQUMsQ0FBQztpQkFDVjtnQkFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7WUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNO2dCQUNwQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDTixHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtvQkFDeEMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxZQUFZLEVBQUU7d0JBQzVELE9BQU8sQ0FBQyxDQUFDO3FCQUNWO29CQUNELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNkLENBQUMsQ0FBQyxDQUNIO2dCQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDTixNQUFNLE9BQU8sR0FBRyxNQUFNO2dCQUNwQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDTixHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtvQkFDeEMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxZQUFZLEVBQUU7d0JBQzVELE9BQU8sQ0FBQyxDQUFDO3FCQUNWO29CQUNELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNkLENBQUMsQ0FBQyxDQUNIO2dCQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDTixNQUFNLEdBQUcsR0FDUCxRQUFRLEdBQUcsQ0FBQyxJQUFJLFFBQVEsR0FBRyxPQUFPO2dCQUNoQyxDQUFDLENBQUMsUUFBUTtnQkFDVixDQUFDLENBQUMsT0FBTyxHQUFHLENBQUM7b0JBQ2IsQ0FBQyxDQUFDLE9BQU87b0JBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNSLE1BQU0sR0FBRyxHQUNQLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLE9BQU87Z0JBQ2hDLENBQUMsQ0FBQyxRQUFRO2dCQUNWLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQztvQkFDYixDQUFDLENBQUMsT0FBTztvQkFDVCxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELFNBQVMsb0JBQW9CLENBQzNCLElBQWlCLEVBQ2pCLE1BQWMsRUFDZCxpQkFBdUMsRUFDdkMsU0FBaUIsRUFDakIsVUFBa0I7UUFFbEIsTUFBTSxNQUFNLEdBQ1YsaUJBQWlCLENBQUMsa0JBQWtCLEtBQUssVUFBVTtZQUNqRCxDQUFDLENBQUMsaUJBQWlCLENBQUMsZUFBZTtZQUNuQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDO1FBQ3ZDLE1BQU0sYUFBYSxHQUNqQixVQUFVO1lBQ1YsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsTUFBTSxtQkFBbUIsR0FBRyxvQkFBb0IsQ0FDOUMsSUFBSSxFQUNKLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsU0FBUyxDQUNWLENBQUM7UUFDRixPQUFPLE1BQU0sR0FBRyxtQkFBbUIsR0FBRyxhQUFhLENBQUM7SUFDdEQsQ0FBQztJQUVELFNBQVMsMEJBQTBCLENBQ2pDLGFBQXNCLEVBQ3RCLGNBQXVCLEVBQ3ZCLE1BQWMsRUFDZCxNQUFjLEVBQ2QsSUFBWSxFQUNaLElBQVksRUFDWixNQUFjLEVBQ2QsS0FBYTtRQUViLElBQUksYUFBYSxJQUFJLGNBQWMsRUFBRTtZQUNuQywrQkFBK0I7WUFDL0IsTUFBTSxLQUFLLEdBQUc7WUFDUixNQUFNLEdBQUcsSUFBSSxJQUFJLE1BQU07WUFDdkIsS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDO1dBQ2pCLElBQUksTUFBTSxJQUFJLElBQUksSUFBSTtZQUNyQixNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUM7YUFDaEIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJO1lBQ3RCLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLE9BQU8sSUFBSSxLQUFLLElBQUk7YUFDdkIsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDO2NBQ2hCLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSTs7T0FFNUIsQ0FBQztZQUNGLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLGFBQWEsRUFBRTtZQUNqQiw4QkFBOEI7WUFDOUIsTUFBTSxLQUFLLEdBQUc7WUFDUixNQUFNLEdBQUcsSUFBSSxJQUFJLE1BQU07WUFDdkIsS0FBSyxHQUFHLElBQUk7WUFDWixNQUFNO1lBQ04sQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDZixJQUFJLE9BQU8sSUFBSSxLQUFLLElBQUk7YUFDdkIsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDO2NBQ2hCLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSTs7T0FFNUIsQ0FBQztZQUNGLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLGNBQWMsRUFBRTtZQUNsQiwrQkFBK0I7WUFDL0IsTUFBTSxLQUFLLEdBQUc7WUFDUixNQUFNLElBQUksTUFBTTtZQUNoQixLQUFLLEdBQUcsSUFBSTtXQUNiLElBQUksTUFBTSxJQUFJLElBQUksSUFBSTtZQUNyQixNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUM7YUFDaEIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJO1lBQ3RCLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOztPQUVwQixDQUFDO1lBQ0YsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELHVCQUF1QjtRQUN2QixNQUFNLEtBQUssR0FBRztVQUNSLE1BQU0sSUFBSSxNQUFNO1VBQ2hCLEtBQUs7VUFDTCxNQUFNO1VBQ04sQ0FBQyxLQUFLO1dBQ0wsTUFBTTs7S0FFWixDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUyw4QkFBOEIsQ0FDckMsR0FBVyxFQUNYLGlCQUF1QyxFQUN2QyxJQUFpQixFQUNqQixNQUFjLEVBQ2QsV0FBbUI7UUFPbkIsSUFBSSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNuRCxrRUFBa0U7UUFDbEUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsWUFBWSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7U0FDL0M7UUFDRCxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRXRELE1BQU0sTUFBTSxHQUNWLGlCQUFpQixDQUFDLGtCQUFrQixLQUFLLFVBQVU7WUFDakQsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGVBQWU7WUFDbkMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQztRQUN2QyxNQUFNLFdBQVcsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLENBQ3pDLElBQUksRUFDSixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLENBQUMsQ0FDRixDQUFDO1lBQ0YsSUFDRSxjQUFjLEdBQUcsWUFBWSxHQUFHLFdBQVc7Z0JBQzNDLGNBQWM7b0JBQ1osYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQUM7b0JBQzlDLFlBQVk7b0JBQ1osV0FBVyxFQUNiO2dCQUNBLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2QsTUFBTTthQUNQO1NBQ0Y7UUFDRCxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3hDLE9BQU87Z0JBQ0wsU0FBUztnQkFDVCxVQUFVLEVBQUUsQ0FBQztnQkFDYixnQkFBZ0IsRUFBRSxDQUFDO2dCQUNuQixjQUFjLEVBQUUsTUFBTTthQUN2QixDQUFDO1NBQ0g7UUFFRCxNQUFNLGlCQUFpQixHQUNyQixXQUFXO1lBQ1gsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuRSxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0QsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsTUFBTSxXQUFXLEdBQ2YsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BFLElBQ0UsV0FBVyxHQUFHLFNBQVMsR0FBRyxpQkFBaUI7Z0JBQzNDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLGlCQUFpQixFQUN2RTtnQkFDQSxVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLE1BQU07YUFDUDtTQUNGO1FBQ0QsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksY0FBYyxHQUFvQixNQUFNLENBQUM7UUFDN0MsSUFBSSxVQUFVLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBRTtZQUN4QyxjQUFjLEdBQUcsTUFBTSxDQUFDO1NBQ3pCO1FBRUQsT0FBTztZQUNMLFNBQVM7WUFDVCxVQUFVO1lBQ1YsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLFNBQVM7WUFDeEMsY0FBYztTQUNmLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyw2QkFBNkIsQ0FDcEMsS0FBZ0QsRUFDaEQsSUFBWSxFQUNaLEtBQWtFO1FBRWxFLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUM1QixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUNuRCxDQUFDO1FBQ0YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FDbkQsQ0FBQztZQUNGLElBQUksV0FBVyxHQUFHLGVBQWUsRUFBRTtnQkFDakMsVUFBVSxHQUFHLENBQUMsQ0FBQztnQkFDZixlQUFlLEdBQUcsV0FBVyxDQUFDO2FBQy9CO1NBQ0Y7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsU0FBUyxXQUFXLENBQ2xCLElBQWlCLEVBQ2pCLE1BQWMsRUFDZCxNQUFjLEVBQ2QsTUFBYyxFQUNkLEtBQWtFLEVBQ2xFLGtCQUEyQixLQUFLO1FBRWhDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxNQUFNLFdBQVcsR0FBRyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FDdEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDcEIsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQ3hELENBQUM7UUFDRixJQUFJLFVBQVUsR0FBRyxPQUFPLEVBQUU7WUFDeEIsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksU0FBUyxFQUFFO2dCQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQy9CLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO29CQUMzRCxtSEFBbUg7b0JBQ25ILElBQ0UsZUFBZTt3QkFDZixtQkFBbUIsSUFBSSxLQUFLO3dCQUM1QixtQkFBbUIsSUFBSSxTQUFTLEVBQ2hDO3dCQUNBLElBQUksS0FBSyxDQUFDLGlCQUFpQixLQUFLLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTs0QkFDM0QsU0FBUzt5QkFDVjtxQkFDRjtvQkFDRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQ3RCLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3hCLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUNuRCxDQUFDO29CQUNGLHNCQUFzQjtvQkFDdEIsSUFBSSxVQUFVLEdBQUcsT0FBTyxFQUFFO3dCQUN4QixTQUFTO3FCQUNWO29CQUNELGNBQWMsSUFBSSwyQkFBMkIsQ0FDM0MsVUFBVSxHQUFHLE9BQU8sRUFDcEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDeEIsV0FBVyxDQUNaLENBQUM7aUJBQ0g7YUFDRjtZQUNELE1BQU0sTUFBTSxHQUFHLE9BQU8sR0FBRyxjQUFjLENBQUM7WUFDeEMsTUFBTSxNQUFNLEdBQUcsMkJBQTJCLENBQ3hDLFVBQVUsR0FBRyxPQUFPLEVBQ3BCLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3BCLFdBQVcsQ0FDWixDQUFDO1lBQ0YsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztTQUMzQjtRQUNELElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLFNBQVMsRUFBRTtZQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUMzRCxtSEFBbUg7Z0JBQ25ILElBQ0UsZUFBZTtvQkFDZixtQkFBbUIsSUFBSSxLQUFLO29CQUM1QixtQkFBbUIsSUFBSSxTQUFTLEVBQ2hDO29CQUNBLElBQUksS0FBSyxDQUFDLGlCQUFpQixLQUFLLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTt3QkFDM0QsU0FBUztxQkFDVjtpQkFDRjtnQkFDRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQ3RCLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3hCLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUNuRCxDQUFDO2dCQUNGLHNCQUFzQjtnQkFDdEIsSUFBSSxVQUFVLEdBQUcsT0FBTyxFQUFFO29CQUN4QixTQUFTO2lCQUNWO2dCQUNELGNBQWMsSUFBSSwyQkFBMkIsQ0FDM0MsT0FBTyxHQUFHLFVBQVUsRUFDcEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDeEIsV0FBVyxDQUNaLENBQUM7YUFDSDtTQUNGO1FBQ0QsTUFBTSxNQUFNLEdBQUcsMkJBQTJCLENBQ3hDLE9BQU8sR0FBRyxVQUFVLEVBQ3BCLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3BCLFdBQVcsQ0FDWixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxjQUFjLENBQUM7UUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsU0FBUyx3QkFBd0IsQ0FDL0IsSUFBaUIsRUFDakIsTUFBYyxFQUNkLE1BQWMsRUFDZCxTQUFpQixFQUNqQixNQUFjLEVBQ2QsS0FBa0U7UUFFbEUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztTQUNqQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDcEMsMkRBQTJEO1FBQzNELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEtBQUssU0FBUyxDQUFDLENBQUM7UUFDekUsbUZBQW1GO1FBQ25GLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUM3Qyx1Q0FBdUM7WUFDdkMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sV0FBVyxDQUNoQixJQUFJLEVBQ0osTUFBTSxFQUNOLG1CQUFtQixFQUNuQixNQUFNLEVBQ04sS0FBSyxFQUNMLElBQUksQ0FDTCxDQUFDO1NBQ0g7UUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFNBQVMsY0FBYyxDQUNyQixJQUFpQixFQUNqQixNQUFjLEVBQ2QsZUFBd0I7UUFFeEIsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLEVBQUU7WUFDakQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFTLFdBQVcsQ0FDbEIsSUFBaUIsRUFDakIsTUFBYyxFQUNkLE1BQWMsRUFDZCxNQUFjLEVBQ2QsS0FBa0UsRUFDbEUsa0JBQTJCLEtBQUs7UUFFaEMsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sV0FBVyxHQUFHLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDNUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUN0QixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUNwQixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FDeEQsQ0FBQztRQUNGLElBQUksVUFBVSxHQUFHLE9BQU8sRUFBRTtZQUN4QixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDdEIsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDL0IsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7b0JBQzNELG1IQUFtSDtvQkFDbkgsSUFDRSxlQUFlO3dCQUNmLG1CQUFtQixJQUFJLEtBQUs7d0JBQzVCLG1CQUFtQixJQUFJLFNBQVMsRUFDaEM7d0JBQ0EsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssU0FBUyxDQUFDLGlCQUFpQixFQUFFOzRCQUMzRCxTQUFTO3lCQUNWO3FCQUNGO29CQUNELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FDcEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDeEIsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQ25ELENBQUM7b0JBQ0Ysc0JBQXNCO29CQUN0QixJQUFJLFFBQVEsR0FBRyxPQUFPLEVBQUU7d0JBQ3RCLFNBQVM7cUJBQ1Y7b0JBQ0QsYUFBYSxJQUFJLDJCQUEyQixDQUMxQyxPQUFPLEdBQUcsUUFBUSxFQUNsQixTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUN4QixXQUFXLENBQ1osQ0FBQztpQkFDSDthQUNGO1lBQ0QsTUFBTSxLQUFLLEdBQUcsMkJBQTJCLENBQ3ZDLE9BQU8sR0FBRyxVQUFVLEVBQ3BCLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3BCLFdBQVcsQ0FDWixDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxhQUFhLENBQUM7WUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUMxQjtRQUNELElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLFNBQVMsRUFBRTtZQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUMzRCxtSEFBbUg7Z0JBQ25ILElBQ0UsZUFBZTtvQkFDZixtQkFBbUIsSUFBSSxLQUFLO29CQUM1QixtQkFBbUIsSUFBSSxTQUFTLEVBQ2hDO29CQUNBLElBQUksS0FBSyxDQUFDLGlCQUFpQixLQUFLLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRTt3QkFDM0QsU0FBUztxQkFDVjtpQkFDRjtnQkFDRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQ3BCLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3hCLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUNuRCxDQUFDO2dCQUNGLHNCQUFzQjtnQkFDdEIsSUFBSSxRQUFRLEdBQUcsT0FBTyxFQUFFO29CQUN0QixTQUFTO2lCQUNWO2dCQUNELGFBQWEsSUFBSSwyQkFBMkIsQ0FDMUMsUUFBUSxHQUFHLE9BQU8sRUFDbEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDeEIsV0FBVyxDQUNaLENBQUM7YUFDSDtTQUNGO1FBQ0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxHQUFHLE9BQU8sQ0FBQztRQUN2QyxNQUFNLEtBQUssR0FBRywyQkFBMkIsQ0FDdkMsVUFBVSxHQUFHLE9BQU8sRUFDcEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDcEIsV0FBVyxDQUNaLENBQUM7UUFDRixPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTLGdCQUFnQixDQUN2QixJQUFpQixFQUNqQixNQUFjLEVBQ2QsTUFBYyxFQUNkLGtCQUEyQixLQUFLO1FBRWhDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQztJQUM1RSxDQUFDO0lBRUQsU0FBUyx1QkFBdUIsQ0FDOUIsSUFBaUIsRUFDakIsaUJBQTRCLEVBQzVCLFNBQWlCO1FBRWpCLE1BQU0sS0FBSyxHQUFZO1lBQ3JCLEdBQUcsSUFBSSxDQUFDLEVBQUU7WUFDVixHQUFHLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUM1RCxDQUFDO1FBQ0YsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUU7WUFDckIsSUFDRSxDQUFDLENBQUMsT0FBTztnQkFDVCxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU87Z0JBQ3JCLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFDdEM7Z0JBQ0Esc0NBQXNDO2dCQUN0QyxPQUFPLENBQUMsSUFBSSxDQUNWLGtCQUFrQixDQUFDLENBQUMsT0FBTyxpQ0FBaUMsU0FBUyxpQ0FBaUMsQ0FDdkcsQ0FBQzthQUNIO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsU0FBUyxZQUFZLENBQ25CLElBQWUsRUFDZixTQUFpQjtRQUVqQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ3hCLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUNWLHNEQUFzRCxTQUFTLFVBQVUsQ0FDMUUsQ0FBQztZQUNGLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsbUNBQW1DO0lBQ25DLFNBQVMsSUFBSSxDQUFDLElBQWlCO1FBSzdCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFO2FBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN6QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7YUFDNUIsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsTUFBTSxrQkFBa0IsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7WUFDbkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlO2lCQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3pCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztpQkFDNUIsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxPQUFPO1lBQ0wsSUFBSSxFQUFFO2dCQUNKLEdBQUcsSUFBSTtnQkFDUCxFQUFFLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2RTtZQUNELGNBQWM7WUFDZCxrQkFBa0I7U0FDbkIsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLGtCQUFrQixDQUN6QixJQUFpQixFQUNqQixXQUFvQjtRQUVwQixNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzlDLE9BQU87Z0JBQ0wsSUFBSSxFQUFFO29CQUNKLElBQUksRUFBRSxTQUFTO29CQUNmLENBQUMsRUFBRSxFQUFFO29CQUNMLEVBQUUsRUFBRSxFQUFFO2lCQUNQO2dCQUNELEdBQUcsRUFBRSxZQUFZO2FBQ2xCLENBQUM7U0FDSDtRQUNELE1BQU0sT0FBTyxHQUFnQjtZQUMzQixHQUFHLElBQUk7WUFDUCxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDbEMsRUFBRSxFQUFFO2dCQUNGLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ2pCLE1BQU0sSUFBSSxHQUFVO3dCQUNsQixHQUFHLENBQUM7d0JBQ0osTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDM0QsQ0FBQztvQkFDRixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDMUIsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDO2FBQ0g7U0FDRixDQUFDO1FBQ0YsT0FBTztZQUNMLElBQUksRUFBRSxPQUFPO1lBQ2IsR0FBRyxFQUFFLFlBQVk7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLGNBQWMsQ0FDckIsTUFBa0IsRUFDbEIsSUFBYztRQUVkLE1BQU0sYUFBYSxHQUFpQixFQUFFLENBQUM7UUFDdkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksYUFBYSxHQUFHLENBQUMsSUFBSSxhQUFhLEdBQUcsUUFBUSxFQUFFO1lBQ2pELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLE1BQU0sVUFBVSxHQUFlO29CQUM3QixVQUFVLEVBQUUsQ0FBQztvQkFDYixVQUFVLEVBQUUsRUFBRTtpQkFDZixDQUFDO2dCQUNGLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtvQkFDdkIsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUM3QyxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMvQixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDL0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FDMUMsQ0FBQzt3QkFDRixJQUFJLFNBQXdCLENBQUM7d0JBQzdCLElBQUksY0FBYyxLQUFLLFNBQVMsRUFBRTs0QkFDaEMsU0FBUyxHQUFHLGNBQWMsQ0FBQzs0QkFDM0IsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNoQzs2QkFBTTs0QkFDTCxTQUFTLEdBQUc7Z0NBQ1YsRUFBRSxFQUFFLFdBQVc7Z0NBQ2YsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dDQUNsQixXQUFXLEVBQUUsRUFBRTs2QkFDaEIsQ0FBQzs0QkFDRixVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzt5QkFDdkM7d0JBQ0QsVUFBVSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUVyQywrQkFBK0I7d0JBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTs0QkFDVCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDaEQsVUFBVSxDQUFDLEVBQUUsQ0FDWCxVQUFVLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDbkMsVUFBVSxDQUFDLEdBQUcsS0FBSyxXQUFXO2dDQUM5QixVQUFVLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FDdEMsQ0FBQzs0QkFDRixJQUFJLGVBQWUsS0FBSyxTQUFTLEVBQUU7Z0NBQ2pDLGVBQWUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDdEM7aUNBQU07Z0NBQ0wsTUFBTSxhQUFhLEdBQW1CO29DQUNwQyxTQUFTLEVBQUUsVUFBVTtvQ0FDckIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQ0FDckIsR0FBRyxFQUFFLFdBQVc7b0NBQ2hCLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztpQ0FDbkIsQ0FBQztnQ0FDRixTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzs2QkFDM0M7eUJBQ0Y7d0JBRUQsOEJBQThCO3dCQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDckQsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2hELFVBQVUsQ0FBQyxFQUFFLENBQ1gsVUFBVSxDQUFDLEtBQUssS0FBSyxXQUFXO2dDQUNoQyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDakMsVUFBVSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQ3JDLENBQUM7NEJBQ0YsSUFBSSxlQUFlLEtBQUssU0FBUyxFQUFFO2dDQUNqQyxlQUFlLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzZCQUMxQztpQ0FBTTtnQ0FDTCxNQUFNLGFBQWEsR0FBbUI7b0NBQ3BDLFNBQVMsRUFBRSxTQUFTO29DQUNwQixLQUFLLEVBQUUsV0FBVztvQ0FDbEIsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQ0FDbkIsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQ0FDdkIsQ0FBQztnQ0FDRixTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzs2QkFDM0M7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNoQztTQUNGO1FBRUQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUN2RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEUsb0JBQW9CLENBQUMsR0FBRyxDQUN0QixNQUFNLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFDOUMsQ0FBQyxDQUNGLENBQUM7U0FDSDtRQUNELE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBVSxFQUFVLEVBQUU7WUFDcEMsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtnQkFDN0IsT0FBTyxXQUFXLENBQUM7YUFDcEI7WUFDRCw2REFBNkQ7WUFDN0QsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDO1FBRUYsMEVBQTBFO1FBQzFFLHdFQUF3RTtRQUN4RSxPQUFPO1lBQ0wsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixDQUFDLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzlCLEdBQUcsTUFBTTtnQkFDVCxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7cUJBQzFCLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO3FCQUMxQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQzNDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2pCLEdBQUcsU0FBUztvQkFDWixXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVc7eUJBQy9CLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO3lCQUM1QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ2IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNwRCxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7NEJBQ25CLE9BQU8sU0FBUyxDQUFDO3lCQUNsQjt3QkFDRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkMsQ0FBQyxDQUFDO2lCQUNMLENBQUMsQ0FBQzthQUNOLENBQUMsQ0FBQztTQUNKLENBQUM7SUFDSixDQUFDO0lBSUQsU0FBZ0IsUUFBUSxDQUFDLFNBQW9CO1FBQzNDLFFBQVEsU0FBUyxFQUFFO1lBQ2pCLEtBQUssT0FBTyxDQUFDLENBQUM7Z0JBQ1osT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLGVBQWUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7YUFDcEU7WUFDRCxLQUFLLFVBQVU7Z0JBQ2IsT0FBTztvQkFDTCxJQUFJLEVBQUUsSUFBSSxpQkFBaUIsRUFBRTtvQkFDN0IsUUFBUSxFQUFFLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQztpQkFDcEMsQ0FBQztZQUNKLEtBQUssWUFBWSxDQUFDLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2pDO1lBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQztnQkFDWCxNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNqQztTQUNGO0lBQ0gsQ0FBQztJQW5CZSxjQUFRLFdBbUJ2QixDQUFBO0lBRUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFVLENBQUM7SUFHdkUsU0FBZ0IsWUFBWSxDQUFDLFVBQW9CLEVBQUUsSUFBVTtRQUMzRCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4RCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1RCxPQUFPLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1NBQzlCO1FBQ0QsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQVJlLGtCQUFZLGVBUTNCLENBQUE7SUFFRCxTQUFTLHFCQUFxQixDQUFDLFFBQWtCO1FBQy9DLFFBQVEsUUFBUSxFQUFFO1lBQ2hCLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxNQUFNO2dCQUNULE9BQU8sVUFBVSxDQUFDO1lBQ3BCLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxTQUFTO2dCQUNaLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLEtBQUssTUFBTTtnQkFDVCxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVELFNBQWdCLDJCQUEyQixDQUN6QyxTQUFzQjtRQUV0QixJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDL0Msc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsK0RBQStELENBQ2hFLENBQUM7U0FDSDtRQUVELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7WUFDZCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07WUFDaEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVc7U0FDM0IsQ0FBQyxDQUFDLENBQUM7UUFDSixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBakJlLGlDQUEyQiw4QkFpQjFDLENBQUE7SUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFhLEVBQUUsTUFBYztRQUMvQyxPQUFPO1lBQ0wsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6QyxDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzFDLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxVQUFVLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0Msc0NBQXNDO1FBQ3RDLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU5QyxPQUFPO1lBQ0wsS0FBSztZQUNMLE1BQU07U0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsdUJBQXVCLENBQzlCLE1BQTZCLEVBQzdCLElBQWlCLEVBQ2pCLFVBQXNCLEVBQ3RCLGFBQXVFLEVBQ3ZFLFVBQTJDO1FBRTNDLE1BQU0sa0JBQWtCLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsTUFBTSxvQkFBb0IsR0FBRyxrQ0FBa0MsQ0FDN0QsTUFBTSxDQUFDLElBQUksRUFDWCxNQUFNLENBQUMsa0JBQWtCLEtBQUssU0FBUyxDQUN4QyxDQUFDO1FBQ0YsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDdkUsTUFBTSxpQkFBaUIsR0FBRywwQkFBMEIsQ0FDbEQsTUFBTSxFQUNOLGFBQWEsRUFDYixNQUFNLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFDbkMsb0JBQW9CLENBQUMsYUFBYSxFQUNsQyxVQUFVLEVBQ1YsSUFBSSxDQUNMLENBQUM7UUFDRixNQUFNLGNBQWMsR0FBRyx1QkFBdUIsQ0FDNUMsTUFBTSxFQUNOLGFBQWEsRUFDYixNQUFNLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFDbkMsb0JBQW9CLENBQUMsYUFBYSxFQUNsQyxVQUFVLEVBQ1YsSUFBSSxFQUNKLGFBQWEsRUFDYixVQUFVLENBQ1gsQ0FBQztRQUNGLElBQ0UsaUJBQWlCLENBQUMsV0FBVyxLQUFLLElBQUk7WUFDdEMsY0FBYyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQ25DO1lBQ0EsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0scUJBQXFCLEdBQ3pCLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLO1lBQzNDLENBQUMsY0FBYyxDQUFDLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sbUJBQW1CLEdBQ3ZCLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHO1lBQ3pDLENBQUMsY0FBYyxDQUFDLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXZFLE9BQU87WUFDTCxHQUFHLGlCQUFpQjtZQUNwQixHQUFHLGNBQWM7WUFDakIsV0FBVyxFQUNULGtCQUFrQixLQUFLLFlBQVk7Z0JBQ2pDLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWTtnQkFDN0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFlBQVk7WUFDcEMsWUFBWSxFQUNWLGtCQUFrQixLQUFLLFlBQVk7Z0JBQ2pDLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVTtnQkFDM0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFVBQVU7WUFDbEMsVUFBVSxFQUNSLGtCQUFrQixLQUFLLFlBQVk7Z0JBQ2pDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZO2dCQUNoQyxDQUFDLENBQUMsY0FBYyxDQUFDLFlBQVk7WUFDakMsYUFBYSxFQUNYLGtCQUFrQixLQUFLLFlBQVk7Z0JBQ2pDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVO2dCQUM5QixDQUFDLENBQUMsY0FBYyxDQUFDLFVBQVU7WUFDL0IsZUFBZSxFQUNiLGtCQUFrQixLQUFLLFlBQVk7Z0JBQ2pDLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWTtvQkFDM0IsY0FBYyxDQUFDLGVBQWU7b0JBQzlCLHFCQUFxQjtnQkFDdkIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxRQUFRO1lBQ2pFLGdCQUFnQixFQUNkLGtCQUFrQixLQUFLLFlBQVk7Z0JBQ2pDLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxHQUFHLG1CQUFtQjtnQkFDbkQsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRO1lBQy9ELGNBQWMsRUFDWixrQkFBa0IsS0FBSyxZQUFZO2dCQUNqQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsWUFBWSxHQUFHLGlCQUFpQixDQUFDLFFBQVE7Z0JBQzdELENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxHQUFHLHFCQUFxQjtZQUN6RCxpQkFBaUIsRUFDZixrQkFBa0IsS0FBSyxZQUFZO2dCQUNqQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsVUFBVSxHQUFHLGlCQUFpQixDQUFDLFFBQVE7Z0JBQzNELENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLG1CQUFtQjtZQUNyRCxlQUFlLEVBQUUsYUFBYSxDQUFDLGVBQWU7WUFDOUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxXQUFXO1lBQ3ZDLFVBQVUsRUFDUixrQkFBa0IsS0FBSyxZQUFZO2dCQUNqQyxDQUFDLENBQUMsY0FBYyxDQUFDLFNBQVM7Z0JBQzFCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTO1lBQ2pDLFdBQVcsRUFDVCxrQkFBa0IsS0FBSyxZQUFZO2dCQUNqQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsU0FBUztnQkFDN0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTO1lBQzlCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxjQUFjO2dCQUN0QyxDQUFDLENBQUMsY0FBYyxDQUFDLGlCQUFpQjtnQkFDbEMsQ0FBQyxDQUFDLENBQUM7WUFDTCwyQkFBMkIsRUFDekIsa0JBQWtCLEtBQUssVUFBVTtnQkFDL0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxtQkFBbUI7Z0JBQ3BDLENBQUMsQ0FBQyxjQUFjLENBQUMsaUJBQWlCO1lBQ3RDLHlCQUF5QixFQUFFLGNBQWMsQ0FBQyxRQUFRO1lBQ2xELGtCQUFrQjtZQUNsQix3QkFBd0IsRUFBRSxhQUFhLENBQUMsd0JBQXdCO1lBQ2hFLHNCQUFzQixFQUFFLGFBQWEsQ0FBQyxzQkFBc0I7U0FDN0QsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLDBCQUEwQixDQUNqQyxNQUFjLEVBQ2QsYUFBc0MsRUFDdEMsYUFBc0QsRUFDdEQsYUFBdUMsRUFDdkMsVUFBc0IsRUFDdEIsSUFBaUI7UUFXakIsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RCxNQUFNLGlCQUFpQixHQUNyQixrQkFBa0IsS0FBSyxZQUFZO1lBQ2pDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUNuQixDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUN2QixNQUFNLFNBQVMsR0FDYixrQkFBa0IsS0FBSyxZQUFZO1lBQ2pDLENBQUMsQ0FBQyxhQUFhLEVBQUUsaUJBQWlCO1lBQ2xDLENBQUMsQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLENBQUM7UUFFekMsTUFBTSxhQUFhLEdBQUcscUJBQXFCLENBQ3pDLGFBQWEsRUFDYixhQUFhLEVBQ2IsU0FBUyxDQUNWLENBQUM7UUFDRixNQUFNLG1CQUFtQixHQUFHLHFCQUFxQixDQUMvQyxhQUFhLEVBQ2IsYUFBYSxFQUNiLGVBQWUsQ0FDaEIsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFHLHFCQUFxQixDQUMzQyxhQUFhLEVBQ2IsYUFBYSxFQUNiLFdBQVcsQ0FDWixDQUFDO1FBQ0YsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQzFDLGFBQWEsRUFDYixhQUFhLEVBQ2IsVUFBVSxDQUNYLENBQUM7UUFDRixNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixDQUM5QyxhQUFhLEVBQ2IsYUFBYSxFQUNiLGtCQUFrQixLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQ25FLENBQUM7UUFDRixNQUFNLGdCQUFnQixHQUFHLHFCQUFxQixDQUM1QyxhQUFhLEVBQ2IsYUFBYSxFQUNiLGtCQUFrQixLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQ3ZFLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNsQyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDakIsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLEVBQUU7Z0JBQ2xDLFFBQVEsSUFBSSxDQUFDLENBQUM7YUFDZjtpQkFBTTtnQkFDTCxNQUFNLGtCQUFrQixHQUFHLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDakUsUUFBUSxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQztnQkFDckMsa0JBQWtCLElBQUksa0JBQWtCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUNwRDtTQUNGO1FBQ0QsTUFBTSxjQUFjLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUV2QyxNQUFNLFlBQVksR0FBRywrQkFBK0IsQ0FDbEQsYUFBYSxFQUNiLFFBQVEsQ0FDVCxDQUFDO1FBQ0YsTUFBTSxtQkFBbUIsR0FBRywrQkFBK0IsQ0FDekQsbUJBQW1CLEVBQ25CLGtCQUFrQixDQUNuQixDQUFDO1FBQ0YsTUFBTSxrQkFBa0IsR0FBRywrQkFBK0IsQ0FDeEQsZUFBZSxFQUNmLGNBQWMsQ0FDZixDQUFDO1FBQ0YsTUFBTSxpQkFBaUIsR0FBRywrQkFBK0IsQ0FDdkQsY0FBYyxFQUNkLENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxxQkFBcUIsR0FBRywrQkFBK0IsQ0FDM0Qsa0JBQWtCLEVBQ2xCLENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxtQkFBbUIsR0FBRywrQkFBK0IsQ0FDekQsZ0JBQWdCLEVBQ2hCLENBQUMsQ0FDRixDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQ2xCLFlBQVksQ0FBQyxNQUFNO1lBQ25CLG1CQUFtQixDQUFDLE1BQU07WUFDMUIsa0JBQWtCLENBQUMsTUFBTTtZQUN6QixpQkFBaUIsQ0FBQyxNQUFNO1lBQ3hCLHFCQUFxQixDQUFDLE1BQU07WUFDNUIsbUJBQW1CLENBQUMsTUFBTSxDQUFDO1FBRTdCLElBQ0UsU0FBUyxLQUFLLFVBQVU7WUFDeEIsY0FBYyxLQUFLLGlCQUFpQjtZQUNwQyxDQUFDLFNBQVMsS0FBSyxNQUFNLElBQUksY0FBYyxHQUFHLGlCQUFpQixDQUFDO1lBQzVELENBQUMsU0FBUyxLQUFLLFFBQVEsSUFBSSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsRUFDOUQ7WUFDQSxzRUFBc0U7WUFDdEUsT0FBTztnQkFDTCxPQUFPLEVBQUUsYUFBYSxDQUFDLE1BQU07Z0JBQzdCLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNO2dCQUN6QyxTQUFTLEVBQUUsZUFBZSxDQUFDLE1BQU07Z0JBQ2pDLFFBQVEsRUFBRSxjQUFjLENBQUMsTUFBTTtnQkFDL0IsWUFBWSxFQUFFLGtCQUFrQixDQUFDLE1BQU07Z0JBQ3ZDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNO2dCQUNuQyxTQUFTLEVBQUUsY0FBYzthQUMxQixDQUFDO1NBQ0g7UUFFRCxNQUFNLFdBQVcsR0FDZixZQUFZLENBQUMsR0FBRztZQUNoQixtQkFBbUIsQ0FBQyxHQUFHO1lBQ3ZCLGtCQUFrQixDQUFDLEdBQUc7WUFDdEIsaUJBQWlCLENBQUMsR0FBRztZQUNyQixxQkFBcUIsQ0FBQyxHQUFHO1lBQ3pCLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztRQUUxQiwyRUFBMkU7UUFDM0UsTUFBTSxXQUFXLEdBQ2YsWUFBWSxDQUFDLEdBQUc7WUFDaEIsbUJBQW1CLENBQUMsR0FBRztZQUN2QixrQkFBa0IsQ0FBQyxHQUFHO1lBQ3RCLGlCQUFpQixDQUFDLEdBQUc7WUFDckIscUJBQXFCLENBQUMsR0FBRztZQUN6QixtQkFBbUIsQ0FBQyxHQUFHLENBQUM7UUFFMUIsSUFBSSxXQUFXLEdBQUcsaUJBQWlCLEVBQUU7WUFDbkMsc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsMEZBQTBGLENBQzNGLENBQUM7WUFDRixPQUFPO2dCQUNMLE9BQU8sRUFBRSxDQUFDO2dCQUNWLGFBQWEsRUFBRSxDQUFDO2dCQUNoQixTQUFTLEVBQUUsQ0FBQztnQkFDWixRQUFRLEVBQUUsQ0FBQztnQkFDWCxZQUFZLEVBQUUsQ0FBQztnQkFDZixVQUFVLEVBQUUsQ0FBQztnQkFDYixTQUFTLEVBQUUsQ0FBQztnQkFDWixXQUFXLEVBQUUsSUFBSTthQUNsQixDQUFDO1NBQ0g7UUFDRCxNQUFNLFlBQVksR0FBRztZQUNuQiwrQkFBK0IsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDO1lBQ3hELCtCQUErQixDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDO1lBQ3hFLCtCQUErQixDQUFDLGVBQWUsRUFBRSxjQUFjLENBQUM7WUFDaEUsK0JBQStCLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUNsRCwrQkFBK0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDdEQsK0JBQStCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1NBQ3JELENBQUM7UUFDRixJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLGNBQWMsR0FBRyxpQkFBaUIsRUFBRTtZQUN0QyxjQUFjO1lBQ2QsSUFBSSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7WUFDcEMsT0FBTyxDQUFDLHVCQUF1QixFQUFFO2dCQUMvQixNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3hDLEdBQUcsWUFBWTtxQkFDWixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO3FCQUNsQyxNQUFNLENBQ0wsQ0FBQyxHQUFHLEVBQWlCLEVBQUUsQ0FDckIsR0FBRyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLENBQ25ELEVBQ0gsQ0FBQyxDQUNGLENBQUM7Z0JBQ0YsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FDNUMsWUFBWSxFQUNaLHlCQUF5QixDQUMxQixDQUFDO2dCQUVGLElBQUksa0JBQWtCLElBQUksaUJBQWlCLEVBQUU7b0JBQzNDLG9FQUFvRTtvQkFDcEUsbURBQW1EO29CQUNuRCxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxNQUFNLENBQzVDLEtBQUssQ0FBQyxFQUFFLENBQ04sS0FBSyxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLGlCQUFpQixDQUNwRSxDQUFDO29CQUNGLG9EQUFvRDtvQkFDcEQsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FDekMsS0FBSyxDQUFDLEVBQUUsQ0FDTixDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FDcEUsQ0FBQztvQkFDRixNQUFNLFlBQVksR0FDaEIsaUJBQWlCO3dCQUNqQixtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO29CQUM3RCxpQkFBaUI7d0JBQ2YsWUFBWSxHQUFHLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDekQsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO2lCQUNoQztxQkFBTTtvQkFDTCw0RkFBNEY7b0JBQzVGLGlCQUFpQixHQUFHLHlCQUF5QixDQUFDO29CQUU5QyxrRUFBa0U7b0JBQ2xFLElBQUksaUJBQWlCLEtBQUssQ0FBQyxFQUFFO3dCQUMzQixzQ0FBc0M7d0JBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysc0VBQXNFLENBQ3ZFLENBQUM7d0JBQ0YsT0FBTzs0QkFDTCxPQUFPLEVBQUUsQ0FBQzs0QkFDVixhQUFhLEVBQUUsQ0FBQzs0QkFDaEIsU0FBUyxFQUFFLENBQUM7NEJBQ1osUUFBUSxFQUFFLENBQUM7NEJBQ1gsWUFBWSxFQUFFLENBQUM7NEJBQ2YsVUFBVSxFQUFFLENBQUM7NEJBQ2IsU0FBUyxFQUFFLENBQUM7NEJBQ1osV0FBVyxFQUFFLElBQUk7eUJBQ2xCLENBQUM7cUJBQ0g7aUJBQ0Y7YUFDRjtTQUNGO2FBQU07WUFDTCxvREFBb0Q7WUFDcEQsTUFBTSxtQkFBbUIsR0FDdkIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDO2lCQUM3RCxNQUFNLEtBQUssQ0FBQyxDQUFDO1lBQ2xCLGlIQUFpSDtZQUNqSCxJQUFJLG1CQUFtQixJQUFJLFdBQVcsR0FBRyxpQkFBaUIsRUFBRTtnQkFDMUQsc0NBQXNDO2dCQUN0QyxPQUFPLENBQUMsSUFBSSxDQUNWLDJGQUEyRixDQUM1RixDQUFDO2dCQUNGLE9BQU87b0JBQ0wsT0FBTyxFQUFFLENBQUM7b0JBQ1YsYUFBYSxFQUFFLENBQUM7b0JBQ2hCLFNBQVMsRUFBRSxDQUFDO29CQUNaLFFBQVEsRUFBRSxDQUFDO29CQUNYLFlBQVksRUFBRSxDQUFDO29CQUNmLFVBQVUsRUFBRSxDQUFDO29CQUNiLFNBQVMsRUFBRSxDQUFDO29CQUNaLFdBQVcsRUFBRSxJQUFJO2lCQUNsQixDQUFDO2FBQ0g7WUFDRCxZQUFZO1lBQ1osSUFBSSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7WUFDcEMsT0FBTyxDQUFDLHVCQUF1QixFQUFFO2dCQUMvQixNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3hDLEdBQUcsWUFBWTtxQkFDWixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO3FCQUNsQyxNQUFNLENBQ0wsQ0FBQyxHQUFHLEVBQWlCLEVBQUUsQ0FDckIsR0FBRyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLENBQ25ELENBQ0osQ0FBQztnQkFDRixNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUM1QyxZQUFZLEVBQ1oseUJBQXlCLENBQzFCLENBQUM7Z0JBRUYsSUFDRSxrQkFBa0IsSUFBSSxpQkFBaUI7b0JBQ3ZDLHlCQUF5QixLQUFLLFFBQVEsRUFDdEM7b0JBQ0Esb0VBQW9FO29CQUNwRSxtREFBbUQ7b0JBQ25ELE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FDNUMsS0FBSyxDQUFDLEVBQUUsQ0FDTixLQUFLLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksaUJBQWlCLENBQ3BFLENBQUM7b0JBQ0Ysa0RBQWtEO29CQUNsRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUN6QyxLQUFLLENBQUMsRUFBRSxDQUNOLENBQUMsS0FBSyxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUMsY0FBYyxHQUFHLGlCQUFpQixDQUNwRSxDQUFDO29CQUNGLE1BQU0sWUFBWSxHQUNoQixpQkFBaUI7d0JBQ2pCLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLENBQUM7b0JBQzdELGlCQUFpQjt3QkFDZixZQUFZLEdBQUcsbUJBQW1CLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN6RCx1QkFBdUIsR0FBRyxJQUFJLENBQUM7aUJBQ2hDO3FCQUFNO29CQUNMLDRGQUE0RjtvQkFDNUYsaUJBQWlCLEdBQUcseUJBQXlCLENBQUM7aUJBQy9DO2FBQ0Y7U0FDRjtRQUNELE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sYUFBYSxHQUFHLG9CQUFvQixDQUN4QyxtQkFBbUIsRUFDbkIsaUJBQWlCLENBQ2xCLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUMzRSxPQUFPO1lBQ0wsT0FBTztZQUNQLGFBQWE7WUFDYixTQUFTO1lBQ1QsUUFBUSxFQUFFLG9CQUFvQixDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQztZQUNqRSxZQUFZLEVBQUUsb0JBQW9CLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUM7WUFDekUsVUFBVSxFQUFFLG9CQUFvQixDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDO1lBQ3JFLFNBQVMsRUFBRSxpQkFBaUI7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLHVCQUF1QixDQUM5QixNQUFjLEVBQ2QsYUFBc0MsRUFDdEMsYUFBc0QsRUFDdEQsYUFBdUMsRUFDdkMsVUFBc0IsRUFDdEIsSUFBaUIsRUFDakIsYUFBdUUsRUFDdkUsVUFBMkM7UUFhM0MsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RCxNQUFNLGlCQUFpQixHQUNyQixrQkFBa0IsS0FBSyxZQUFZO1lBQ2pDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSztZQUNsQixDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUN4QixNQUFNLFNBQVMsR0FDYixrQkFBa0IsS0FBSyxZQUFZO1lBQ2pDLENBQUMsQ0FBQyxhQUFhLENBQUMsbUJBQW1CO1lBQ25DLENBQUMsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUM7UUFFdEMsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FDOUMsYUFBYSxFQUNiLGFBQWEsRUFDYixrQkFBa0IsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUNuRSxDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FDNUMsYUFBYSxFQUNiLGFBQWEsRUFDYixrQkFBa0IsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUN2RSxDQUFDO1FBQ0YsTUFBTSxlQUFlLEdBQUcscUJBQXFCLENBQzNDLGFBQWEsRUFDYixhQUFhLEVBQ2IsaUJBQWlCLENBQ2xCLENBQUM7UUFDRixNQUFNLHNCQUFzQixHQUFHLHFCQUFxQixDQUNsRCxhQUFhLEVBQ2IsYUFBYSxFQUNiLGtCQUFrQixDQUNuQixDQUFDO1FBQ0YsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQzFDLGFBQWEsRUFDYixhQUFhLEVBQ2IsVUFBVSxDQUNYLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RSxzR0FBc0c7UUFDdEcsTUFBTSxpQkFBaUIsR0FDckIsa0JBQWtCLEtBQUssWUFBWTtZQUNqQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsVUFBVTtZQUNoQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDO1FBQ25DLE1BQU0sa0JBQWtCLEdBQ3RCLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbEUsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNFLHFEQUFxRDtRQUNyRCxNQUFNLGFBQWEsR0FBRyxpQkFBaUIsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUM7UUFFeEUsTUFBTSxxQkFBcUIsR0FBRywrQkFBK0IsQ0FDM0Qsa0JBQWtCLEVBQ2xCLENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxtQkFBbUIsR0FBRywrQkFBK0IsQ0FDekQsZ0JBQWdCLEVBQ2hCLENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSx5QkFBeUIsR0FBRywrQkFBK0IsQ0FDL0Qsc0JBQXNCLEVBQ3RCLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQzVDLENBQUM7UUFFRixJQUFJLHlCQUF5QixHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDdkQsSUFBSSxrQkFBa0IsS0FBSyxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDbEUsOEVBQThFO1lBQzlFLE1BQU0sa0JBQWtCLEdBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVDLENBQUMsTUFBQSxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsR0FBRyxNQUFBLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUN0RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsR0FBRztnQkFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1lBQ3ZCLHlCQUF5QixHQUFHLGVBQWUsQ0FBQyxHQUFHO2dCQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQztnQkFDMUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1NBQ3hCO1FBRUQsSUFBSSxjQUFjLEdBQ2hCLHlCQUF5QjtZQUN6QixrQkFBa0I7WUFDbEIscUJBQXFCLENBQUMsTUFBTTtZQUM1QixtQkFBbUIsQ0FBQyxNQUFNO1lBQzFCLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztRQUNuQyxJQUFJLGNBQWMsR0FBRyxpQkFBaUIsRUFBRTtZQUN0Qyw4Q0FBOEM7WUFDOUMsSUFDRSxlQUFlLENBQUMsR0FBRztnQkFDbkIsY0FBYyxHQUFHLGlCQUFpQjtvQkFDaEMseUJBQXlCLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFDakQ7Z0JBQ0EseUJBQXlCO29CQUN2Qix5QkFBeUIsR0FBRyxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNuRSxjQUFjO29CQUNaLHlCQUF5Qjt3QkFDekIscUJBQXFCLENBQUMsTUFBTTt3QkFDNUIsbUJBQW1CLENBQUMsTUFBTTt3QkFDMUIseUJBQXlCLENBQUMsTUFBTSxDQUFDO2FBQ3BDO2lCQUFNLElBQ0wsU0FBUyxLQUFLLE1BQU07Z0JBQ3BCLENBQUMsU0FBUyxLQUFLLFVBQVUsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsRUFDcEU7Z0JBQ0Esc0RBQXNEO2dCQUN0RCxzQ0FBc0M7Z0JBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysa0ZBQWtGLENBQ25GLENBQUM7Z0JBQ0YsT0FBTztvQkFDTCxZQUFZLEVBQUUsQ0FBQztvQkFDZixVQUFVLEVBQUUsQ0FBQztvQkFDYixlQUFlLEVBQUUsQ0FBQztvQkFDbEIsaUJBQWlCLEVBQUUsQ0FBQztvQkFDcEIsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDbkIsUUFBUSxFQUFFLENBQUM7b0JBQ1gsV0FBVyxFQUFFLENBQUM7b0JBQ2QsU0FBUyxFQUFFLENBQUM7b0JBQ1osbUJBQW1CLEVBQUUsQ0FBQztvQkFDdEIsV0FBVyxFQUFFLElBQUk7aUJBQ2xCLENBQUM7YUFDSDtTQUNGO1FBQ0QsSUFDRSxTQUFTLEtBQUssY0FBYztZQUM1QixTQUFTLEtBQUssTUFBTTtZQUNwQixTQUFTLEtBQUssUUFBUTtZQUN0QixhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQ3RDO1lBQ0EsbUZBQW1GO1lBQ25GLE1BQU0sYUFBYSxHQUNqQixTQUFTLEtBQUssTUFBTTtnQkFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ04saUJBQWlCLEdBQUcsY0FBYyxFQUNsQyx1QkFBdUIsQ0FDckIsSUFBSSxFQUNKLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsYUFBYSxDQUNkLENBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQztZQUN6QyxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FDbkMsSUFBSSxFQUNKLE1BQU0sRUFDTixhQUFhLEVBQ2IsYUFBYSxDQUNkLENBQUM7WUFDRixJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7Z0JBQ3hCLHNDQUFzQztnQkFDdEMsT0FBTyxDQUFDLElBQUksQ0FDViwrRkFBK0YsQ0FDaEcsQ0FBQztnQkFDRixPQUFPO29CQUNMLFlBQVksRUFBRSxDQUFDO29CQUNmLFVBQVUsRUFBRSxDQUFDO29CQUNiLGVBQWUsRUFBRSxDQUFDO29CQUNsQixpQkFBaUIsRUFBRSxDQUFDO29CQUNwQixnQkFBZ0IsRUFBRSxDQUFDO29CQUNuQixRQUFRLEVBQUUsQ0FBQztvQkFDWCxXQUFXLEVBQUUsQ0FBQztvQkFDZCxTQUFTLEVBQUUsQ0FBQztvQkFDWixtQkFBbUIsRUFBRSxDQUFDO29CQUN0QixXQUFXLEVBQUUsSUFBSTtpQkFDbEIsQ0FBQzthQUNIO1lBQ0QsT0FBTztnQkFDTCxZQUFZLEVBQUUsa0JBQWtCLENBQUMsTUFBTTtnQkFDdkMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLE1BQU07Z0JBQ25DLGVBQWUsRUFBRSx5QkFBeUI7Z0JBQzFDLGlCQUFpQjtnQkFDakIsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUMsTUFBTTtnQkFDL0MsUUFBUSxFQUFFLGNBQWMsQ0FBQyxNQUFNO2dCQUMvQixXQUFXO2dCQUNYLFNBQVMsRUFBRSxjQUFjLEdBQUcsYUFBYTtnQkFDekMsbUJBQW1CO2FBQ3BCLENBQUM7U0FDSDtRQUVELE1BQU0sRUFDSixjQUFjLEVBQ2QsY0FBYyxFQUNkLHlCQUF5QixFQUN6Qix5QkFBeUIsR0FDMUIsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFeEMsTUFBTSw2QkFBNkIsR0FDakMsY0FBYyxHQUFHLHlCQUF5QixDQUFDO1FBQzdDLE1BQU0sNkJBQTZCLEdBQ2pDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRFLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQzFDLE1BQU0sUUFBUSxHQUNaLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSztnQkFDN0IsQ0FBQyxDQUFDLDZCQUE2QixHQUFHLDZCQUE2QixDQUFDO29CQUM5RCw2QkFBNkIsQ0FBQyxDQUFDO1lBQ25DLE9BQU87Z0JBQ0wsWUFBWSxFQUFFLGtCQUFrQixDQUFDLE1BQU07Z0JBQ3ZDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNO2dCQUNuQyxlQUFlLEVBQUUseUJBQXlCO2dCQUMxQyxpQkFBaUI7Z0JBQ2pCLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDLE1BQU07Z0JBQy9DLFFBQVEsRUFBRSxjQUFjLENBQUMsTUFBTTtnQkFDL0IsV0FBVyxFQUFFLFFBQVE7Z0JBQ3JCLFNBQVMsRUFDUCxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUM7b0JBQzdELGNBQWM7Z0JBQ2hCLG1CQUFtQjthQUNwQixDQUFDO1NBQ0g7UUFFRCxNQUFNLFFBQVEsR0FDWixDQUFDLENBQUMsNkJBQTZCLEdBQUcsNkJBQTZCLENBQUM7WUFDOUQsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3RDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxPQUFPO1lBQ0wsWUFBWSxFQUFFLGtCQUFrQixDQUFDLE1BQU07WUFDdkMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLE1BQU07WUFDbkMsZUFBZSxFQUFFLHlCQUF5QjtZQUMxQyxpQkFBaUI7WUFDakIsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUMsTUFBTTtZQUMvQyxRQUFRLEVBQUUsY0FBYyxDQUFDLE1BQU07WUFDL0IsV0FBVyxFQUFFLFFBQVE7WUFDckIsU0FBUyxFQUNQLHNCQUFzQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQztnQkFDN0QsY0FBYztZQUNoQixtQkFBbUI7U0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRCw4R0FBOEc7SUFDOUcsZ0hBQWdIO0lBQ2hILFNBQVMsdUJBQXVCLENBQzlCLElBQWlCLEVBQ2pCLE1BQWMsRUFDZCxpQkFBeUIsRUFDekIsU0FBaUI7UUFFakIsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0I7WUFDNUIsQ0FBQyxDQUFDLG9CQUFvQixDQUNsQixJQUFJLEVBQ0osQ0FBQyxFQUNELHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxFQUNqQyxTQUFTLENBQ1YsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixPQUFPLGlCQUFpQixHQUFHLHdCQUF3QixHQUFHLG1CQUFtQixDQUFDO0lBQzVFLENBQUM7SUFFRCxtSEFBbUg7SUFDbkgsNEVBQTRFO0lBQzVFLG1EQUFtRDtJQUNuRCxTQUFTLGlCQUFpQixDQUN4QixJQUFpQixFQUNqQixNQUFjLEVBQ2QsYUFBcUIsRUFDckIsU0FBaUI7UUFFakIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO1lBQ2xDLE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFO1lBQ2hCLE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBQ0QsTUFBTSxXQUFXLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsTUFBTSxtQkFBbUIsR0FDdkIsYUFBYSxHQUFHLG1CQUFtQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN2RCx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQzlCLEdBQUcsSUFBSSxDQUFDLENBQUM7YUFDTixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQzthQUN2QyxHQUFHLENBQ0YsTUFBTSxDQUFDLEVBQUUsQ0FDUCxDQUFDLG1CQUFtQixHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxVQUFVLENBQ3BCLENBQ0osQ0FBQztRQUNGLElBQ0UsV0FBVyxLQUFLLENBQUM7WUFDakIsb0JBQW9CLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDO2dCQUNqRSxtQkFBbUIsRUFDckI7WUFDQSxPQUFPLGVBQWUsR0FBRyxPQUFPLENBQUM7U0FDbEM7UUFDRCxJQUNFLG9CQUFvQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQztZQUNyRCxtQkFBbUIsRUFDbkI7WUFDQSxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0Qsa0dBQWtHO1FBQ2xHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLElBQUksSUFBSSxHQUFHLGVBQWUsQ0FBQztRQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QixJQUNFLG9CQUFvQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQztnQkFDdkQsbUJBQW1CLEVBQ25CO2dCQUNBLElBQUksR0FBRyxHQUFHLENBQUM7YUFDWjtpQkFBTTtnQkFDTCxHQUFHLEdBQUcsR0FBRyxDQUFDO2FBQ1g7U0FDRjtRQUNELE9BQU8sR0FBRyxHQUFHLE9BQU8sQ0FBQztJQUN2QixDQUFDO0lBRUQsMkRBQTJEO0lBQzNELGlIQUFpSDtJQUNqSCxtRkFBbUY7SUFDbkYsU0FBUyxzQkFBc0IsQ0FDN0IsSUFBaUIsRUFDakIsTUFBYyxFQUNkLFFBQWdCLEVBQ2hCLFNBQWlCO1FBRWpCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRTtZQUNsQyxPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUksT0FBTyxJQUFJLENBQUMsRUFBRTtZQUNoQixPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUNELE9BQU8sQ0FDTCxvQkFBb0IsQ0FDbEIsSUFBSSxFQUNKLFFBQVEsR0FBRyxPQUFPLEVBQ2xCLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxFQUNqQyxTQUFTLENBQ1YsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQ3pDLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxnQkFBZ0IsQ0FDdkIsSUFBaUIsRUFDakIsYUFBdUUsRUFDdkUsUUFBZ0I7UUFFaEIsSUFBSSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixJQUFJLGFBQWEsS0FBSyxJQUFJLEVBQUU7WUFDNUQsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDaEMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUMzQixJQUFJLENBQUMsR0FBRyxDQUNOLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FDOUIsZ0JBQWdCLENBQ2QsYUFBYSxDQUNYLEdBQUcsRUFDSCxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FDOUMsRUFDRCxRQUFRLENBQ1QsQ0FDRixDQUNGLENBQ0YsQ0FDRixDQUFDO1lBQ0YsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDMUIsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQ2hELElBQUksQ0FBQyxHQUFHLENBQ04sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUM5QixnQkFBZ0IsQ0FDZCxhQUFhLENBQ1gsR0FBRyxFQUNILGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUM3QyxFQUNELFFBQVEsQ0FDVCxDQUNGLENBQ0YsQ0FDRixDQUNGLENBQUM7U0FDSDtRQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRTtZQUNsQyxPQUFPO2dCQUNMLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLGlCQUFpQixDQUFDO2dCQUNoRSxRQUFRLEVBQUUsUUFBUSxHQUFHLENBQUM7YUFDdkIsQ0FBQztTQUNIO1FBQ0QsT0FBTztZQUNMLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLGlCQUFpQixDQUFDO1lBQ2hFLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxrQkFBa0IsQ0FDekIsSUFBaUIsRUFDakIsUUFBZ0IsRUFDaEIsVUFBMkM7UUFFM0MsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQ3ZCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FDYixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUN4RCxDQUFDO2FBQ0g7aUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTtnQkFDckMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNiLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDaEIsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQ3BELENBQ0YsQ0FBQzthQUNIO1NBQ0Y7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQWEsRUFBRSxRQUFnQjtRQUN2RCxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3RELE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDckQsTUFBTSxlQUFlLEdBQUcsUUFBUSxHQUFHLE1BQUEsaUJBQWlCLENBQUM7UUFDckQsT0FBTyxDQUNMLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQztZQUN6QyxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztZQUN0QyxXQUFXLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7WUFDbEQsVUFBVSxHQUFHLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxDQUNqRCxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQWdCLFNBQVMsQ0FBQyxJQUFxQjtRQUM3QyxJQUNFLElBQUksS0FBSyxLQUFLO1lBQ2QsSUFBSSxLQUFLLGdCQUFnQjtZQUN6QixJQUFJLEtBQUssV0FBVztZQUNwQixJQUFJLEtBQUssUUFBUSxFQUNqQjtZQUNBLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFWZSxlQUFTLFlBVXhCLENBQUE7SUFFRCw0RkFBNEY7SUFDNUYsU0FBUyx5QkFBeUIsQ0FBQyxNQUFjO1FBQy9DLElBQ0UsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPO1lBQ3ZCLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTTtZQUN0QixNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFDdEI7WUFDQSxPQUFPLENBQUMsQ0FBQztTQUNWO1FBQ0QsT0FBTyxNQUFNLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsSUFBSSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxTQUFTLDJCQUEyQixDQUNsQyxJQUFZLEVBQ1osS0FBYSxFQUNiLFdBQW1CO1FBRW5CLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRCxDQUFDO0lBRUQsU0FBUyxxQkFBcUIsQ0FDNUIsU0FBd0IsRUFDeEIsV0FBc0MsRUFDdEMsV0FBbUI7UUFNbkIsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FDN0QsMkJBQTJCLENBQ3pCLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQzdCLFVBQVUsQ0FBQyxLQUFLLEVBQ2hCLFdBQVcsQ0FDWixDQUNGLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxDQUFDLFNBQXNDLEVBQVUsRUFBRSxDQUNsRSxHQUFHLENBQ0QsZUFBZSxDQUFDLE1BQU0sQ0FDcEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQzNELENBQ0YsQ0FBQztRQUNKLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQyxNQUFNLGtCQUFrQixHQUN0QixTQUFTLENBQUMsS0FBSztZQUNmLEdBQUcsQ0FDRCxTQUFTLENBQUMsV0FBVztpQkFDbEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7aUJBQ3hELEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FDdkMsQ0FBQztRQUNKLHFHQUFxRztRQUNyRyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUN4QiwyQkFBMkIsQ0FDekIsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFDNUIsU0FBUyxDQUFDLEtBQUssRUFDZixXQUFXLENBQ1osRUFDRCxjQUFjO1lBQ1osMkJBQTJCLENBQ3pCLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUMvQixrQkFBa0IsRUFDbEIsV0FBVyxDQUNaLEVBQ0gsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUNyQixDQUFDO1FBQ0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVELG9IQUFvSDtJQUNwSCx1RkFBdUY7SUFDdkYsU0FBUyxvQkFBb0IsQ0FDM0IsSUFBdUIsRUFDdkIsVUFBa0IsRUFDbEIsV0FBbUIsRUFDbkIsU0FBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNiLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQ1gsTUFBTSxDQUFDLEVBQUUsQ0FDUCxHQUFHLENBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQ25CLFNBQVMsQ0FBQyxFQUFFLENBQ1YscUJBQXFCLENBQ25CLFNBQVMsRUFDVCxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxVQUFVLEVBQzNCLFdBQVcsQ0FDWixDQUFDLFNBQVMsQ0FDZCxDQUNGO1lBQ0QsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQzdDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxtSEFBbUg7SUFDbkgsMEhBQTBIO0lBQzFILFNBQVMsbUJBQW1CLENBQzFCLElBQXVCLEVBQ3ZCLFNBQWlCO1FBRWpCLE9BQU8sQ0FDTCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakUsU0FBUyxDQUNWLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxhQUFhLENBQUMsTUFBYztRQUNuQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLEVBQUU7WUFDN0QsSUFBSSxNQUFNLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtnQkFDckMsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUN6RCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUyxlQUFlLENBQ3RCLElBQWlCLEVBQ2pCLE1BQWMsRUFDZCxvQkFBNkI7UUFFN0IsdUVBQXVFO1FBQ3ZFLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksb0JBQW9CLEVBQUU7WUFDdEQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQ0UsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDO1lBQzNELE1BQU0sQ0FBQyxZQUFZLEtBQUssV0FBVyxFQUNuQztZQUNBLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzVCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsU0FBUyx1QkFBdUIsQ0FBQyxJQUFpQixFQUFFLE1BQWM7UUFDaEUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELG9GQUFvRjtRQUNwRixzREFBc0Q7UUFDdEQsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO1lBQ3BDLElBQ0UsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNO2dCQUNoQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU07b0JBQ1osSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO3lCQUNoRSxNQUFNLEVBQ1g7Z0JBQ0EsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFlO1FBRzNDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDeEIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0QsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFNBQVMscUJBQXFCLENBQzVCLGFBQXNELEVBQ3RELG9CQUE4QyxFQUM5QyxPQUEwQjtRQUUxQixNQUFNLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELElBQUksV0FBK0MsQ0FBQztRQUNwRCxJQUFJLGFBQWEsRUFBRTtZQUNqQixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLFdBQVcsR0FBRyxjQUFjLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0wsV0FBVyxHQUFHLElBQUksQ0FBQzthQUNwQjtTQUNGO2FBQU07WUFDTCxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3BCO1FBRUQsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQ3hCLE1BQU0sWUFBWSxHQUFHLFdBQTBDLENBQUM7WUFDaEUsT0FBTyxZQUFZLENBQUM7U0FDckI7UUFDRCxJQUFJLG9CQUFvQixDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDN0MsTUFBTSxZQUFZLEdBQUcsb0JBQW1ELENBQUM7WUFDekUsT0FBTyxZQUFZLENBQUM7U0FDckI7UUFDRCxPQUFPO1lBQ0wsTUFBTSxFQUFFLENBQUM7U0FDVixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsK0JBQStCLENBQ3RDLGFBQTBDLEVBQzFDLFlBQW9CO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RSxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLE9BQU87WUFDTCxHQUFHLEVBQUUsTUFBTSxHQUFHLFlBQVk7WUFDMUIsR0FBRyxFQUFFLE1BQU0sR0FBRyxZQUFZO1lBQzFCLE1BQU0sRUFBRSxTQUFTLEdBQUcsWUFBWTtTQUNqQyxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsaUNBQWlDLENBQ3hDLGFBQTBDLEVBQzFDLFlBQW9CLEVBQ3BCLFVBQWtCO1FBRWxCLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsRSxPQUFPLFNBQVMsR0FBRyxZQUFZLENBQUM7SUFDbEMsQ0FBQztJQUVELFNBQVMsb0JBQW9CLENBQzNCLGFBQTBDLEVBQzFDLFVBQWtCO1FBRWxCLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO1FBQ3ZELElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtZQUNsQixJQUFJLGFBQWEsQ0FBQyxHQUFHLElBQUksYUFBYSxDQUFDLEdBQUcsR0FBRyxZQUFZLEVBQUU7Z0JBQ3pELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQzthQUMxQjtZQUNELE9BQU8sWUFBWSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLElBQUksYUFBYSxDQUFDLEdBQUcsSUFBSSxhQUFhLENBQUMsR0FBRyxHQUFHLFlBQVksRUFBRTtnQkFDekQsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDO2FBQzFCO1lBQ0QsT0FBTyxZQUFZLENBQUM7U0FDckI7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBU0QsU0FBUywrQkFBK0IsQ0FDdEMsTUFBbUMsRUFDbkMsWUFBb0I7UUFFcEIsSUFBSSxjQUFjLEdBQXVCLFNBQVMsQ0FBQztRQUNuRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDZCxjQUFjO2dCQUNaLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUNoRTtRQUNELElBQUksY0FBYyxHQUF1QixTQUFTLENBQUM7UUFDbkQsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2QsY0FBYztnQkFDWixNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDaEU7UUFDRCxPQUFPO1lBQ0wsTUFBTTtZQUNOLGNBQWM7WUFDZCxjQUFjO1lBQ2QsWUFBWTtTQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxtQkFBbUIsQ0FDMUIsVUFBbUMsRUFDbkMsVUFBa0I7UUFFbEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osS0FBSyxNQUFNLEtBQUssSUFBSSxVQUFVLEVBQUU7WUFDOUIsR0FBRyxJQUFJLGlDQUFpQyxDQUN0QyxLQUFLLENBQUMsTUFBTSxFQUNaLEtBQUssQ0FBQyxZQUFZLEVBQ2xCLFVBQVUsQ0FDWCxDQUFDO1NBQ0g7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxTQUFTLHVCQUF1QixDQUM5QixJQUFpQixFQUNqQixNQUFjO1FBRWQsSUFBSSxNQUFNLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtZQUNsQyxPQUFPO2dCQUNMLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO2dCQUNOLEtBQUssRUFBRSxDQUFDO2FBQ1QsQ0FBQztTQUNIO1FBQ0QsdUVBQXVFO1FBQ3ZFLElBQ0UsTUFBTSxDQUFDLElBQUksS0FBSyxLQUFLO1lBQ3JCLE1BQU0sQ0FBQyxJQUFJLEtBQUssZ0JBQWdCO1lBQ2hDLE1BQU0sQ0FBQyxJQUFJLEtBQUssV0FBVztZQUMzQixNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFDdEI7WUFDQSxPQUFPO2dCQUNMLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO2dCQUNOLEtBQUssRUFBRSxDQUFDO2FBQ1QsQ0FBQztTQUNIO1FBQ0QsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO1lBQ2xDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNyRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLEVBQUU7b0JBQ3BDLFFBQVEsSUFBSSxDQUFDLENBQUM7aUJBQ2Y7cUJBQU07b0JBQ0wsVUFBVSxJQUFJLENBQUMsQ0FBQztpQkFDakI7YUFDRjtZQUNELElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNwRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLEVBQUU7b0JBQ3BDLFVBQVUsSUFBSSxDQUFDLENBQUM7aUJBQ2pCO3FCQUFNO29CQUNMLFFBQVEsSUFBSSxDQUFDLENBQUM7aUJBQ2Y7YUFDRjtTQUNGO2FBQU07WUFDTCxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEU7UUFDRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLFVBQVU7WUFDakIsR0FBRyxFQUFFLFFBQVE7WUFDYixLQUFLLEVBQUUsVUFBVSxHQUFHLFFBQVEsR0FBRyxRQUFRO1NBQ3hDLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxxQkFBcUI7SUFDNUIsdUNBQXVDO0lBQ3ZDLE9BQWUsRUFDZixPQUFlO0lBQ2YsbUNBQW1DO0lBQ25DLFFBQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLGlCQUE4QyxFQUM5QyxVQUFzQjtRQUV0QixnREFBZ0Q7UUFDaEQsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUM3RCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxpQkFBaUIsS0FBSyxJQUFJLEVBQUU7WUFDOUIsc0RBQXNEO1lBQ3RELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCw0Q0FBNEM7UUFDNUMsSUFDRSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsV0FBVztZQUN4QyxRQUFRO2dCQUNOLGlCQUFpQixDQUFDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxZQUFZO1lBQy9ELFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVO1lBQ3ZDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxFQUMxRTtZQUNBLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxTQUFTLHFCQUFxQixDQUFDLE1BQWM7UUFDM0MsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO1lBQ3BDLE9BQU8sWUFBWSxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELFNBQVMsa0JBQWtCLENBQ3pCLE1BQTZCLEVBQzdCLGFBQW1DO1FBRW5DLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUNuRCxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpELHlJQUF5STtRQUN6SSxNQUFNLFNBQVMsR0FDYixxQkFBcUIsSUFBSSxxQkFBcUIsQ0FBQyxTQUFTO1lBQ3RELENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTO1lBQ2pDLENBQUMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1FBQy9DLElBQUksaUJBQWlCLEdBQUcscUJBQXFCLEVBQUUsaUJBQWlCLENBQUM7UUFDakUsSUFBSSxpQkFBaUIsS0FBSyxTQUFTLEVBQUU7WUFDbkMsSUFBSSxrQkFBa0IsS0FBSyxZQUFZLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7Z0JBQ25FLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQzthQUN0RTtpQkFBTTtnQkFDTCxnSUFBZ0k7Z0JBQ2hJLHlFQUF5RTtnQkFDekUsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO2FBQ2hDO1NBQ0Y7UUFDRCxJQUFJLG1CQUFtQixHQUFHLHFCQUFxQixFQUFFLG1CQUFtQixDQUFDO1FBQ3JFLElBQUksbUJBQW1CLEtBQUssU0FBUyxFQUFFO1lBQ3JDLElBQUksa0JBQWtCLEtBQUssVUFBVSxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO2dCQUNqRSxtQkFBbUI7b0JBQ2pCLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQzthQUN0RDtpQkFBTTtnQkFDTCxvSUFBb0k7Z0JBQ3BJLHlFQUF5RTtnQkFDekUsbUJBQW1CLEdBQUcsVUFBVSxDQUFDO2FBQ2xDO1NBQ0Y7UUFDRCxPQUFPO1lBQ0wsU0FBUyxFQUNQLHFCQUFxQixJQUFJLHFCQUFxQixDQUFDLFNBQVM7Z0JBQ3RELENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTO2dCQUNqQyxDQUFDLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVM7WUFDOUMsbUJBQW1CO1lBQ25CLGlCQUFpQjtZQUNqQix3QkFBd0IsRUFDdEIscUJBQXFCLElBQUkscUJBQXFCLENBQUMsd0JBQXdCO2dCQUNyRSxDQUFDLENBQUMscUJBQXFCLENBQUMsd0JBQXdCO2dCQUNoRCxDQUFDLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLHdCQUF3QjtZQUM3RCxzQkFBc0IsRUFDcEIscUJBQXFCLElBQUkscUJBQXFCLENBQUMsc0JBQXNCO2dCQUNuRSxDQUFDLENBQUMscUJBQXFCLENBQUMsc0JBQXNCO2dCQUM5QyxDQUFDLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQjtZQUMzRCxlQUFlLEVBQ2IscUJBQXFCO2dCQUNyQixxQkFBcUIsQ0FBQyxlQUFlLEtBQUssU0FBUztnQkFDakQsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLGVBQWU7Z0JBQ3ZDLENBQUMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsZUFBZTtTQUNyRCxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsY0FBYyxDQUNyQixNQUFrQixFQUNsQixFQUFVLEVBQ1YsVUFBbUI7UUFFbkIsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLGdCQUFnQjthQUMxRCxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQzthQUN6QyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ25DLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLFVBQVUsRUFBRTtZQUNkLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUM1QyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsU0FBUywyQkFBMkIsQ0FDbEMsVUFBZ0M7UUFFaEMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyw4QkFBOEIsQ0FBQztRQUU1RCxNQUFNLElBQUksR0FBRztVQUNQLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTs7VUFFOUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUN0RCxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxLQUFLLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3RELFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTs7VUFFOUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFOztVQUVwRCxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxLQUFLLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1VBQzVELFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLEtBQUssSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7VUFDNUQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFOzs7S0FHekQsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVMsS0FBSyxDQUNaLENBQVMsRUFDVCxDQUFTLEVBQ1QsQ0FBUyxFQUNULENBQVMsRUFDVCxDQUFTO1FBRVQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsU0FBUyxVQUFVLENBQ2pCLENBQVMsRUFDVCxJQUtDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyw4QkFBOEIsQ0FBQztRQUMzRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdEMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM5QyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzlDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUV0QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFWCw0Q0FBNEM7UUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFNUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztnQkFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDOztnQkFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2I7UUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVB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LEtBQUssU0FBUyxFQUFFO2dCQUMzQixTQUFTLEdBQUcsQ0FBQyxDQUFDO2FBQ2Y7U0FDRjtRQUVELE9BQU87WUFDTCxPQUFPLEVBQUUsVUFBVTtZQUNuQixPQUFPLEVBQUUsVUFBVTtZQUNuQixXQUFXLEVBQUUsUUFBUTtZQUNyQixZQUFZLEVBQUUsU0FBUztTQUN4QixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsRUEvMExnQixLQUFLLEtBQUwsS0FBSyxRQSswTHJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VycmVuY3lQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHNjYWxlTGluZWFyIH0gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IHsgYXJjLCBhcmVhLCBsaW5lLCBwaWUgfSBmcm9tICdkMy1zaGFwZSc7XG5pbXBvcnQgeyB1dGNGb3JtYXQgfSBmcm9tICdkMy10aW1lLWZvcm1hdCc7XG5pbXBvcnQgeyBzdW0sIHVuaXEgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRGF5c1BpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvZGF5cy5waXBlJztcbmltcG9ydCB7IE51bWJlclBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvbnVtYmVyLnBpcGUnO1xuaW1wb3J0IHsgUGVyY2VudGFnZVBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvcGVyY2VudGFnZS5waXBlJztcbmltcG9ydCB7IFNtYWxsQ3VycmVuY3lQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL3NtYWxsLWN1cnJlbmN5LnBpcGUnO1xuaW1wb3J0IHsgU21hbGxOdW1iZXJQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL3NtYWxsLW51bWJlci5waXBlJztcbmltcG9ydCB7IENhbGxvdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9vdmVybGF5L2NhbGxvdXQvY2FsbG91dC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQ2hhcnREYXRhRGlyZWN0aW9uLFxuICBDaGFydFNjYWxlRWxlbWVudCxcbiAgQ29udGFpbmVyU2NhbGluZ1R5cGUsXG4gIERlZmF1bHREb251dFNpemluZ0NvbmZpZyxcbiAgRGVmYXVsdFNjYWxpbmdDb25maWcsXG4gIERvbnV0U2l6aW5nQ29uZmlnLFxuICBFbGVtZW50U2NhbGluZ0NvbmZpZ3VyYXRpb24sXG4gIGVtcHR5Q2hhcnRTY2FsZVZhbHVlcyxcbiAgRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gIEZ1bGxFbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgRnVsbFNjYWxpbmdDb25maWcsXG4gIGdldERlZmF1bHRTY2FsaW5nQ29uZmlnQnlDaGFydFR5cGUsXG4gIE5vbkVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICBQYXJ0aWFsRWxlbWVudFNjYWxpbmdDb25maWcsXG59IGZyb20gJy4vY2hhcnQtc2NhbGluZyc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2hhcnQge1xuICBleHBvcnQgY29uc3QgZGVmYXVsdENvbG9yUGFsZXR0ZSA9IFtcbiAgICAvL0Jhc2UgY29sb3JzXG4gICAgJy0tYmFqYS1ibGFzdC01MCcsXG4gICAgJy0tdGVhbC1kaWFtb25kLTUwJyxcbiAgICAnLS1meXJlLTUwJyxcbiAgICAnLS10YW5nLTUwJyxcbiAgICAnLS1wdXJwLTYwJyxcbiAgICAnLS1yb3NpLTcwJyxcbiAgICAvL1NoaWZ0IGxpZ2h0ZXIgZnJvbSBiYXNlIGJ5IC0yMFxuICAgICctLWJhamEtYmxhc3QtMzAnLFxuICAgICctLXRlYWwtZGlhbW9uZC0zMCcsXG4gICAgJy0tZnlyZS0zMCcsXG4gICAgJy0tdGFuZy0zMCcsXG4gICAgJy0tcHVycC00MCcsXG4gICAgJy0tcm9zaS01MCcsXG4gICAgLy9TaGlmdCBkYXJrZXIgZnJvbSBiYXNlIGJ5ICsyMFxuICAgICctLWJhamEtYmxhc3QtNzAnLFxuICAgICctLXRlYWwtZGlhbW9uZC03MCcsXG4gICAgJy0tZnlyZS03MCcsXG4gICAgJy0tdGFuZy03MCcsXG4gICAgJy0tcHVycC04MCcsXG4gICAgJy0tcm9zaS05MCcsXG4gIF07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0KFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGRhdGE6IElucHV0RGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICByZXR1cm4gY29uZmlnLnR5cGUgPT09ICdsaW5lJ1xuICAgICAgPyBsaW5lcyhjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGNvbmZpZy50eXBlID09PSAnYXJlYSdcbiAgICAgID8gYXJlYXMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBjb25maWcudHlwZSA9PT0gJ2RvbnV0J1xuICAgICAgPyBhcmNzKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucylcbiAgICAgIDogY29uZmlnLnR5cGUgPT09ICdob3Jpem9udGFsLWJhcidcbiAgICAgID8gaG9yaXpvbnRhbEJhcnMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBjb25maWcudHlwZSA9PT0gJ2JhcidcbiAgICAgID8gYmFycyhjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGNvbmZpZy50eXBlID09PSAnd2F0ZXJmYWxsJ1xuICAgICAgPyB3YXRlcmZhbGwoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBjb25maWcudHlwZSA9PT0gJ2Z1bm5lbCdcbiAgICAgID8gZnVubmVsKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucylcbiAgICAgIDogY29uZmlnLnR5cGUgPT09ICdmbG93J1xuICAgICAgPyBmbG93cyhjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGVtcHR5Q2hhcnQ7XG4gIH1cblxuICBmdW5jdGlvbiBsaW5lcyhcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBhbGxEYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgaWYgKCF3YXJuRmxvd0RhdGEoYWxsRGF0YSwgJ2xpbmUnKSkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ2NvbmZpZycgfTtcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhOiBoaWRkZW5EYXRhLCB2aXNpYmxlSW5kaWNlcyB9ID0gaGlkZShhbGxEYXRhKTtcbiAgICBpZiAoaGlkZGVuRGF0YS50eXBlID09PSAnbGFiZWxlZCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIExhYmVsZWQgc2VyaWVzIGFyZW4ndCBjdXJyZW50bHkgc3VwcG9ydGVkIGZvciBsaW5lIGNoYXJ0c1wiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEoaGlkZGVuRGF0YSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIFN1cHBsZW1lbnRhcnkgeSB2YWx1ZXMgYXJlbid0IHN1cHBvcnRlZCBmb3Igbm9uLWJhciBjaGFydHNcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgd2FyblVuc3VwcG9ydGVkUGF0dGVybnMoaGlkZGVuRGF0YSwgWydzdHJpcGVkJywgJ2RvdHMnXSwgJ2xpbmUnKTtcbiAgICAvL1RoaXMgYXNzaWdubWVudCBtYWtlcyB0eXBlc2NyaXB0IHJlY29nbml6ZSB0aGUgYWN0dWFsIHR5cGUgKFRpbWVzZXJpZXNEYXRhKVxuICAgIGNvbnN0IGRhdGEgPSBoaWRkZW5EYXRhO1xuXG4gICAgY29uc3QgeyBkYXRlRm9ybWF0LCBwaXBlVHJhbnNmb3JtLCBjb2xvcnMgfSA9IGdldEZvcm1hdHRpbmdBbmRDb2xvcnMoXG4gICAgICBhbGxEYXRhLFxuICAgICAgZGF0YSxcbiAgICAgIGNvbmZpZyxcbiAgICApO1xuXG4gICAgY29uc3QgY2hhcnRTaXppbmdWYWx1ZXMgPSBnZXRGdWxsQ2hhcnRTY2FsZVZhbHVlcyhcbiAgICAgIGNvbmZpZyxcbiAgICAgIGRhdGEsXG4gICAgICBkaW1lbnNpb25zLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGRhdGVGb3JtYXQsXG4gICAgKTtcbiAgICBpZiAoY2hhcnRTaXppbmdWYWx1ZXMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdzaXppbmcnIH07XG4gICAgfVxuXG4gICAgY29uc3QgdGlja0NvdW50ID0gZ2V0QnVja2V0VGlja0NvdW50KGNoYXJ0U2l6aW5nVmFsdWVzKTtcbiAgICBjb25zdCB4VGlja3MgPSBnZW5lcmF0ZVRpbWVzZXJpZXNUaWNrcyhcbiAgICAgIGRhdGEsXG4gICAgICBjb25maWcsXG4gICAgICB0aWNrQ291bnQsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgIGRhdGVGb3JtYXQsXG4gICAgKS5tYXAodGljayA9PiB0b1hUaWNrKHRpY2spKTtcbiAgICBjb25zdCB4U2NhbGUgPSAoaW5kZXg6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy50b3RhbExlZnRPZmZzZXQgKyBjaGFydFNpemluZ1ZhbHVlcy5idWNrZXRHYXAgKiBpbmRleFxuICAgICAgKTtcbiAgICB9O1xuICAgIGNvbnN0IHsgc2NhbGUsIHRpY2tzOiBkYXRhVGlja3MgfSA9IGNhbGNEYXRhQXhpc1NjYWxlc0FuZFRpY2tzKFxuICAgICAgZGF0YSxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBjb25maWcsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICApO1xuICAgIGNvbnN0IHlUaWNrcyA9IGRhdGFUaWNrcy5tYXAodGljayA9PiB0b1lUaWNrKHRpY2spKTtcblxuICAgIGNvbnN0IGluZGljZXMgPSBkYXRhLngubWFwKChfLCBpKSA9PiBpKTtcbiAgICBjb25zdCBsaW5lcyA9XG4gICAgICBkYXRhLngubGVuZ3RoID4gMVxuICAgICAgICA/IGRhdGEueXMubWFwKHkgPT4gKHtcbiAgICAgICAgICAgIGxpbmU6IGxpbmU8bnVtYmVyPihcbiAgICAgICAgICAgICAgaSA9PiB4U2NhbGUoaSksXG4gICAgICAgICAgICAgIGkgPT4gc2NhbGUoeS52YWx1ZXNbaV0sIHkuaXNTZWNvbmRhcnkpLFxuICAgICAgICAgICAgKShpbmRpY2VzKSxcbiAgICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICB9KSlcbiAgICAgICAgOiBbXTtcbiAgICBjb25zdCBjaXJjbGVzID1cbiAgICAgIGRhdGEueC5sZW5ndGggPT09IDFcbiAgICAgICAgPyBkYXRhLnlzLm1hcCgoeVNlcmllcywgaSkgPT4gKHtcbiAgICAgICAgICAgIGN4OiB4U2NhbGUoMCksXG4gICAgICAgICAgICBjeTogc2NhbGUoeVNlcmllcy52YWx1ZXNbMF0sIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgaSwgMCkpLFxuICAgICAgICAgIH0pKVxuICAgICAgICA6IFtdO1xuXG4gICAgY29uc3QgeU9mZnNldCA9IGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmc7XG4gICAgY29uc3QgZGF0YUxhYmVsczogRGF0YUxhYmVsW10gPSBkYXRhLnlzLmZsYXRNYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3ViTGFiZWxzOiBEYXRhTGFiZWxbXSA9IHkudmFsdWVzLm1hcCgodmFsLCB4SW5kZXgpID0+ICh7XG4gICAgICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJyxcbiAgICAgICAgbGFiZWw6IHBpcGVUcmFuc2Zvcm0odmFsLCBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgeEluZGV4KSksXG4gICAgICAgIHlQb3M6IHNjYWxlKHZhbCwgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCkpIC0geU9mZnNldCxcbiAgICAgICAgeFBvczogeFNjYWxlKHhJbmRleCksXG4gICAgICAgIGFuY2hvcjogJ21pZGRsZScsXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gc3ViTGFiZWxzO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gaG92ZXIocG9zOiB7XG4gICAgICByZWN0OiBET01SZWN0O1xuICAgICAgeDogbnVtYmVyO1xuICAgICAgeTogbnVtYmVyO1xuICAgICAgY29udGFpbmVyU2Nyb2xsWDogbnVtYmVyO1xuICAgICAgY29udGFpbmVyU2Nyb2xsWTogbnVtYmVyO1xuICAgIH0pOiBIb3ZlclJldHVybiB7XG4gICAgICBjb25zdCByZWFsUG9zWCA9IHBvcy54ICsgcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICBjb25zdCByZWFsUG9zWSA9IHBvcy55ICsgcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsIHx8XG4gICAgICAgIGdldElmSG92ZXJPdXRPZkJvdW5kcyhcbiAgICAgICAgICBwb3MueCxcbiAgICAgICAgICBwb3MueSxcbiAgICAgICAgICByZWFsUG9zWCxcbiAgICAgICAgICByZWFsUG9zWSxcbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHhIb3ZlckluZGljZXMgPSBnZXRCdWNrZXRBbmRDbHVzdGVyTnVtRm9ySG92ZXIoXG4gICAgICAgIHJlYWxQb3NYLFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBkYXRhLngubGVuZ3RoLFxuICAgICAgKTtcbiAgICAgIGlmICgheEhvdmVySW5kaWNlcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYnVja2V0TnVtOiB4SW5kZXggfSA9IHhIb3ZlckluZGljZXM7XG4gICAgICBjb25zdCB4ID0geFNjYWxlKHhJbmRleCk7XG4gICAgICBjb25zdCB2aXNpYmxlWUluZGV4ID0gZmluZE5lYXJlc3RJbmRleFdpdGhTZWNvbmRhcnkoXG4gICAgICAgIGRhdGEueXMubWFwKCh5LCBpKSA9PiAoe1xuICAgICAgICAgIHZhbHVlOiB5LnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgIGlzU2Vjb25kYXJ5OiBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIGksIHhJbmRleCksXG4gICAgICAgIH0pKSxcbiAgICAgICAgcG9zLnksXG4gICAgICAgIHNjYWxlLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHlJbmRleCA9IHZpc2libGVJbmRpY2VzW3Zpc2libGVZSW5kZXhdO1xuICAgICAgY29uc3QgeXMgPSBkYXRhLnlzLm1hcCgoeSwgaSkgPT5cbiAgICAgICAgc2NhbGUoeS52YWx1ZXNbeEluZGV4XSwgY2hlY2tJZlNlY29uZGFyeShkYXRhLCBpLCB4SW5kZXgpKSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGZvcm1hdCA9IChkYXRlOiBEYXRlKSA9PlxuICAgICAgICBmb3JtYXRlZERhdGUoY29uZmlnLmRhdGVGb3JtYXQgfHwgJ2RheScsIGRhdGUpO1xuXG4gICAgICAvLyBDbGFtcCBpbiBjaGFydC1sb2NhbCBjb29yZGluYXRlcyBmaXJzdCBzbyB0aGUgdG9vbHRpcCBzdGF5cyB3aXRoaW4gdGhlXG4gICAgICAvLyB2aXNpYmxlIGNoYXJ0IGFyZWEsIHRoZW4gdHJhbnNsYXRlIHRvIHZpZXdwb3J0IGNvb3JkaW5hdGVzIGJ5IGFkZGluZ1xuICAgICAgLy8gcG9zLnJlY3QueC95ICh3aGljaCBhcmUgdmlld3BvcnQtcmVsYXRpdmUgZnJvbSBnZXRCb3VuZGluZ0NsaWVudFJlY3QpLlxuICAgICAgY29uc3QgbG9jYWxBbmNob3JYID0geCAtIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgbG9jYWxBbmNob3JZID0geXNbdmlzaWJsZVlJbmRleF0gLSBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgIGNvbnN0IHsgYW5jaG9yWCwgYW5jaG9yWSB9ID0gY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgICAgICBsb2NhbEFuY2hvclgsXG4gICAgICAgIGxvY2FsQW5jaG9yWSxcbiAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICk7XG4gICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgYW5jaG9yWCArIHBvcy5yZWN0LngsXG4gICAgICAgIGFuY2hvclkgKyBwb3MucmVjdC55LFxuICAgICAgICBTTUFMTF9QQURESU5HLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhvdmVyVHlwZTogJ3N0YW5kYXJkJyxcbiAgICAgICAgeCxcbiAgICAgICAgeEluZGV4LFxuICAgICAgICB5cyxcbiAgICAgICAgeUluZGV4LFxuICAgICAgICB2aXNpYmxlWUluZGV4LFxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIGRhdGU6IGZvcm1hdChuZXcgRGF0ZShkYXRhLnhbeEluZGV4XSkpLFxuICAgICAgICAgIG1ldHJpY3M6IGRhdGEueXNcbiAgICAgICAgICAgIC5tYXAoKHksIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICBjb2xvcjogY29sb3JzW2luZGV4ICUgY29sb3JzLmxlbmd0aF0sXG4gICAgICAgICAgICAgIGxhYmVsOiB5LmxhYmVsLFxuICAgICAgICAgICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgIHBpcGVUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICB5LnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCBpbmRleCwgeEluZGV4KSxcbiAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgKSA/PyAnLScsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKF8sIGkpID0+IGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYXJ0V2lkdGg6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsV2lkdGgsXG4gICAgICBjaGFydEhlaWdodDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxIZWlnaHQsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgIHhUaWNrcyxcbiAgICAgIHlUaWNrcyxcbiAgICAgIGNvbG9ycyxcbiAgICAgIGxpbmVzLFxuICAgICAgY2lyY2xlcyxcbiAgICAgIGhvdmVyLFxuICAgICAgYmFyczogW10sXG4gICAgICBhcmVhczogW10sXG4gICAgICBhcmNzOiBbXSxcbiAgICAgIGhvcml6b250YWxCYXJzOiBbXSxcbiAgICAgIGRhdGFMYWJlbHMsXG4gICAgICB3YXRlcmZhbGxMaW5lczogW10sXG4gICAgICBncmFkaWVudHM6IFtdLFxuICAgICAgZmxvd0Nvbm5lY3Rpb25zOiBbXSxcbiAgICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlLFxuICAgICAgdmVydGljYWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMudmVydGljYWxDb250YWluZXJTY2FsZSxcbiAgICAgIGNoYXJ0RXJyb3I6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFyZWFzKFxuICAgIGNvbmZpZzogQ29uZmlnV2l0aEZ1bGxTY2FsaW5nLFxuICAgIGFsbERhdGE6IElucHV0RGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBpZiAoIXdhcm5GbG93RGF0YShhbGxEYXRhLCAnYXJlYScpKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnY29uZmlnJyB9O1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGE6IHVuY2hlY2tlZERhdGEsIHZpc2libGVJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIGlmICh1bmNoZWNrZWREYXRhLnR5cGUgPT09ICdsYWJlbGVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgTGFiZWxlZCBzZXJpZXMgYXJlbid0IGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9yIGFyZWEgY2hhcnRzXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIGlmIChjb25maWcuc2hvd0RhdGFMYWJlbHMgPT09IHRydWUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIERhdGEgbGFiZWxzIGFyZW4ndCBzdXBwb3J0ZWQgZm9yIGFueSBzdGFja2VkIGNoYXJ0IHR5cGVcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKHVuY2hlY2tlZERhdGEpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBTdXBwbGVtZW50YXJ5IHkgdmFsdWVzIGFyZW4ndCBzdXBwb3J0ZWQgZm9yIG5vbi1iYXIgY2hhcnRzXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIHdhcm5VbnN1cHBvcnRlZFBhdHRlcm5zKHVuY2hlY2tlZERhdGEsIFsnc3RyaXBlZCddLCAnYXJlYScpO1xuICAgIC8vVGhpcyBhc3NpZ25tZW50IG1ha2VzIHR5cGVzY3JpcHQgcmVjb2duaXplIHRoZSBhY3R1YWwgdHlwZSAoVGltZXNlcmllc0RhdGEpXG4gICAgY29uc3QgZGF0YSA9IHVuY2hlY2tlZERhdGE7XG5cbiAgICBjb25zdCB7IGRhdGVGb3JtYXQsIHBpcGVUcmFuc2Zvcm0sIGNvbG9ycyB9ID0gZ2V0Rm9ybWF0dGluZ0FuZENvbG9ycyhcbiAgICAgIGFsbERhdGEsXG4gICAgICBkYXRhLFxuICAgICAgY29uZmlnLFxuICAgICk7XG4gICAgY29uc3QgY2hhcnRTaXppbmdWYWx1ZXMgPSBnZXRGdWxsQ2hhcnRTY2FsZVZhbHVlcyhcbiAgICAgIGNvbmZpZyxcbiAgICAgIGRhdGEsXG4gICAgICBkaW1lbnNpb25zLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGRhdGVGb3JtYXQsXG4gICAgKTtcbiAgICBpZiAoY2hhcnRTaXppbmdWYWx1ZXMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdzaXppbmcnIH07XG4gICAgfVxuXG4gICAgY29uc3QgdGlja0NvdW50ID0gZ2V0QnVja2V0VGlja0NvdW50KGNoYXJ0U2l6aW5nVmFsdWVzKTtcbiAgICBjb25zdCB4VGlja3MgPSBnZW5lcmF0ZVRpbWVzZXJpZXNUaWNrcyhcbiAgICAgIGRhdGEsXG4gICAgICBjb25maWcsXG4gICAgICB0aWNrQ291bnQsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgIGRhdGVGb3JtYXQsXG4gICAgKS5tYXAodGljayA9PiB0b1hUaWNrKHRpY2spKTtcbiAgICBjb25zdCB4U2NhbGUgPSAoaW5kZXg6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy50b3RhbExlZnRPZmZzZXQgKyBjaGFydFNpemluZ1ZhbHVlcy5idWNrZXRHYXAgKiBpbmRleFxuICAgICAgKTtcbiAgICB9O1xuICAgIGNvbnN0IHsgc2NhbGUsIHRpY2tzOiBkYXRhVGlja3MgfSA9IGNhbGNEYXRhQXhpc1NjYWxlc0FuZFRpY2tzKFxuICAgICAgZGF0YSxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBjb25maWcsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICApO1xuICAgIGNvbnN0IHlUaWNrcyA9IGRhdGFUaWNrcy5tYXAodGljayA9PiB0b1lUaWNrKHRpY2spKTtcbiAgICBjb25zdCB6ZXJvQXhpc1Bvc1ZhbCA9IHNjYWxlKDAsIHRydWUpO1xuXG4gICAgY29uc3QgaW5kaWNlcyA9IGRhdGEueC5tYXAoKF8sIGkpID0+IGkpO1xuICAgIGNvbnN0IGFyZWFzID0gZGF0YS55cy5tYXAoKHksIHlJbmRleCkgPT4gKHtcbiAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgIGFyZWE6IGFyZWE8bnVtYmVyPihcbiAgICAgICAgaSA9PiB4U2NhbGUoaSksXG4gICAgICAgIGkgPT4gZ2V0QmFyWUluZm8oZGF0YSwgY29uZmlnLCB5SW5kZXgsIGksIHNjYWxlKS55VmFsdWUsXG4gICAgICAgIGkgPT5cbiAgICAgICAgICBnZXRCYXJZSW5mbyhkYXRhLCBjb25maWcsIHlJbmRleCwgaSwgc2NhbGUpLnlWYWx1ZSArXG4gICAgICAgICAgZ2V0QmFyWUluZm8oZGF0YSwgY29uZmlnLCB5SW5kZXgsIGksIHNjYWxlKS5oZWlnaHQsXG4gICAgICApKGluZGljZXMpLFxuICAgIH0pKTtcblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczoge1xuICAgICAgcmVjdDogRE9NUmVjdDtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFg6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFk6IG51bWJlcjtcbiAgICB9KTogSG92ZXJSZXR1cm4ge1xuICAgICAgY29uc3QgcmVhbFBvc1ggPSBwb3MueCArIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgcmVhbFBvc1kgPSBwb3MueSArIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgaWYgKFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCB8fFxuICAgICAgICBnZXRJZkhvdmVyT3V0T2ZCb3VuZHMoXG4gICAgICAgICAgcG9zLngsXG4gICAgICAgICAgcG9zLnksXG4gICAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgICAgcmVhbFBvc1ksXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB4SG92ZXJJbmRpY2VzID0gZ2V0QnVja2V0QW5kQ2x1c3Rlck51bUZvckhvdmVyKFxuICAgICAgICByZWFsUG9zWCxcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZGF0YS54Lmxlbmd0aCxcbiAgICAgICk7XG4gICAgICBpZiAoIXhIb3ZlckluZGljZXMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB7IGJ1Y2tldE51bTogeEluZGV4IH0gPSB4SG92ZXJJbmRpY2VzO1xuICAgICAgY29uc3QgeCA9IHhTY2FsZSh4SW5kZXgpO1xuICAgICAgY29uc3QgZnVsbFlzID0gZGF0YS55cy5tYXAoKF8sIG1hcFlJbmRleCkgPT5cbiAgICAgICAgZ2V0QmFyWUluZm8oZGF0YSwgY29uZmlnLCBtYXBZSW5kZXgsIHhJbmRleCwgc2NhbGUpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHlzID0gZnVsbFlzLm1hcCh5ID0+IHkueVZhbHVlKTtcbiAgICAgIC8vVGhpcyBpcyB0aGUgeXMgYXJyYXksIGJ1dCBzaGlmdGVkIHNvIHRoYXQgdGhlIHkgcG9zaXRpb24gZm9yIG5lZ2F0aXZlIHZhbHVlcyBpcyBhd2F5IGZyb20gdGhlIGF4aXMgKGZvciB0aGUgaG92ZXIgY2lyY2xlcylcbiAgICAgIGNvbnN0IHNoaWZ0ZWRZcyA9IGZ1bGxZcy5tYXAoeSA9PiB7XG4gICAgICAgIGlmICh5LnlWYWx1ZSA+PSB6ZXJvQXhpc1Bvc1ZhbCkge1xuICAgICAgICAgIHJldHVybiB5LnlWYWx1ZSArIHkuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5LnlWYWx1ZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgeVBvc1NpZ24gPSB6ZXJvQXhpc1Bvc1ZhbCAtIHBvcy55O1xuICAgICAgbGV0IHZpc2libGVZSW5kZXggPSAtMTtcbiAgICAgIGlmICh5UG9zU2lnbiA8IDAgJiYgZGF0YS55cy5maW5kKHkgPT4geS52YWx1ZXMuZmluZCh2YWwgPT4gdmFsIDwgMCkpKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB5cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmICh5c1tpXSA+PSB6ZXJvQXhpc1Bvc1ZhbCAmJiB5c1tpXSA8IHBvcy55KSB7XG4gICAgICAgICAgICB2aXNpYmxlWUluZGV4ID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh5c1tpXSA8PSB6ZXJvQXhpc1Bvc1ZhbCAmJiB5c1tpXSA8IHBvcy55KSB7XG4gICAgICAgICAgICB2aXNpYmxlWUluZGV4ID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHZpc2libGVZSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGlmIChwb3MueSA8PSB6ZXJvQXhpc1Bvc1ZhbCkge1xuICAgICAgICAgIHZpc2libGVZSW5kZXggPSB5cy5pbmRleE9mKE1hdGgubWluKC4uLnlzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlzaWJsZVlJbmRleCA9IHlzLmluZGV4T2YoTWF0aC5tYXgoLi4ueXMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeUluZGV4ID0gdmlzaWJsZUluZGljZXNbdmlzaWJsZVlJbmRleF07XG4gICAgICBjb25zdCBsb2NhbEFuY2hvclggPSB4IC0gcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICBjb25zdCBsb2NhbEFuY2hvclkgPSB5c1t2aXNpYmxlWUluZGV4XSAtIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgY29uc3QgeyBhbmNob3JYLCBhbmNob3JZIH0gPSBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgICAgIGxvY2FsQW5jaG9yWCxcbiAgICAgICAgbG9jYWxBbmNob3JZLFxuICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBhbmNob3JYICsgcG9zLnJlY3QueCxcbiAgICAgICAgYW5jaG9yWSArIHBvcy5yZWN0LnksXG4gICAgICAgIFNNQUxMX1BBRERJTkcsXG4gICAgICAgIDAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG92ZXJUeXBlOiAnc3RhbmRhcmQnLFxuICAgICAgICB4LFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHlzOiBzaGlmdGVkWXMsXG4gICAgICAgIHlJbmRleCxcbiAgICAgICAgdmlzaWJsZVlJbmRleCxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBkYXRlOiB1dGNGb3JtYXQoJyVCICVkLCAlWScpKG5ldyBEYXRlKGRhdGEueFt4SW5kZXhdKSksXG4gICAgICAgICAgbWV0cmljczogZGF0YS55c1xuICAgICAgICAgICAgLm1hcCgoeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICAgICAgdmFsdWU6IHBpcGVUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgeS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIGluZGV4LCB4SW5kZXgpLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKF8sIGkpID0+IGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYXJ0V2lkdGg6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsV2lkdGgsXG4gICAgICBjaGFydEhlaWdodDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxIZWlnaHQsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgIHhUaWNrcyxcbiAgICAgIHlUaWNrcyxcbiAgICAgIGNvbG9ycyxcbiAgICAgIGFyZWFzLFxuICAgICAgbGluZXM6IFtdLFxuICAgICAgY2lyY2xlczogW10sXG4gICAgICBob3ZlcixcbiAgICAgIGJhcnM6IFtdLFxuICAgICAgYXJjczogW10sXG4gICAgICBob3Jpem9udGFsQmFyczogW10sXG4gICAgICBkYXRhTGFiZWxzOiBbXSxcbiAgICAgIHdhdGVyZmFsbExpbmVzOiBbXSxcbiAgICAgIGdyYWRpZW50czogW10sXG4gICAgICBmbG93Q29ubmVjdGlvbnM6IFtdLFxuICAgICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGUsXG4gICAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlLFxuICAgICAgY2hhcnRFcnJvcjogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYmFycyhcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBhbGxEYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgaWYgKCF3YXJuRmxvd0RhdGEoYWxsRGF0YSwgJ2JhcicpKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnY29uZmlnJyB9O1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGEsIHZpc2libGVJbmRpY2VzLCB2aXNpYmxlU3VwcEluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgaWYgKFxuICAgICAgY29uZmlnLnNob3dEYXRhTGFiZWxzID09PSB0cnVlICYmXG4gICAgICBpc1N0YWNrZWREYXRhKGNvbmZpZykgJiZcbiAgICAgICFpc0dyb3VwaW5nVHlwZUV4Y2VwdGlvbihkYXRhLCBjb25maWcpXG4gICAgKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBEYXRhIGxhYmVscyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBhbnkgc3RhY2tlZCBjaGFydCB0eXBlXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpICYmXG4gICAgICBpc0NsdXN0ZXJlZERhdGEoZGF0YSwgY29uZmlnLCBmYWxzZSkgJiZcbiAgICAgICFpc0dyb3VwaW5nVHlwZUV4Y2VwdGlvbihkYXRhLCBjb25maWcpXG4gICAgKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBTdXBwbGVtZW50YXJ5IHkgdmFsdWVzIGFyZW4ndCBzdXBwb3J0ZWQgZm9yIGNsdXN0ZXJlZCBkYXRhIChqdXN0IHVzZSBhbm90aGVyIG5vcm1hbCB5IHNlcmllcylcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgcmV0dXJuIGJhcnNIZWxwZXIoXG4gICAgICBjb25maWcsXG4gICAgICBhbGxEYXRhLFxuICAgICAgZGF0YSxcbiAgICAgIHZpc2libGVJbmRpY2VzLFxuICAgICAgdmlzaWJsZVN1cHBJbmRpY2VzLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIGZhbHNlLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZ1bm5lbChcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBhbGxEYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgaWYgKCF3YXJuRmxvd0RhdGEoYWxsRGF0YSwgJ2Z1bm5lbCcpKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnY29uZmlnJyB9O1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGEsIHZpc2libGVJbmRpY2VzLCB2aXNpYmxlU3VwcEluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgcmV0dXJuIGJhcnNIZWxwZXIoXG4gICAgICBjb25maWcsXG4gICAgICBhbGxEYXRhLFxuICAgICAgZGF0YSxcbiAgICAgIHZpc2libGVJbmRpY2VzLFxuICAgICAgdmlzaWJsZVN1cHBJbmRpY2VzLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIHRydWUsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gd2F0ZXJmYWxsKFxuICAgIGNvbmZpZzogQ29uZmlnV2l0aEZ1bGxTY2FsaW5nLFxuICAgIGFsbERhdGE6IElucHV0RGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBpZiAoIXdhcm5GbG93RGF0YShhbGxEYXRhLCAnd2F0ZXJmYWxsJykpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdjb25maWcnIH07XG4gICAgfVxuICAgIGNvbnN0IHsgZGF0YTogdW5jaGVja2VkRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKHVuY2hlY2tlZERhdGEpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBTdXBwbGVtZW50YXJ5IHkgdmFsdWVzIGFyZW4ndCBzdXBwb3J0ZWQgZm9yIG5vbi1iYXIgY2hhcnRzXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIGlmIChjb25maWcuc2Vjb25kYXJ5VmFsdWVUeXBlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnSGVhZHMgdXAhIFdhdGVyZmFsbCBjaGFydHMgZG8gbm90IGN1cnJlbnRseSBoYXZlIHR3by1heGlzIHN1cHBvcnQnLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICB3YXJuVW5zdXBwb3J0ZWRQYXR0ZXJucyh1bmNoZWNrZWREYXRhLCBbXSwgJ3dhdGVyZmFsbCcpO1xuXG4gICAgcmV0dXJuIGJhcnNIZWxwZXIoXG4gICAgICBjb25maWcsXG4gICAgICBhbGxEYXRhLFxuICAgICAgdW5jaGVja2VkRGF0YSxcbiAgICAgIHZpc2libGVJbmRpY2VzLFxuICAgICAgW10sXG4gICAgICBkaW1lbnNpb25zLFxuICAgICAgZmFsc2UsXG4gICAgICB0cnVlLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBiYXJzSGVscGVyKFxuICAgIGNvbmZpZzogQ29uZmlnV2l0aEZ1bGxTY2FsaW5nLFxuICAgIGFsbERhdGE6IE5vbkZsb3dEYXRhLFxuICAgIHVuY2hlY2tlZERhdGE6IE5vbkZsb3dEYXRhLFxuICAgIHZpc2libGVJbmRpY2VzOiBudW1iZXJbXSxcbiAgICB2aXNpYmxlU3VwcEluZGljZXM6IG51bWJlcltdLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICAgaXNGdW5uZWw6IGJvb2xlYW4sXG4gICAgaXNXYXRlcmZhbGw6IGJvb2xlYW4sXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGNvbnN0IHsgZGF0ZUZvcm1hdCwgcGlwZVRyYW5zZm9ybSwgY29sb3JJbmRpY2VzLCBjb2xvcnMgfSA9XG4gICAgICBnZXRGb3JtYXR0aW5nQW5kQ29sb3JzKGFsbERhdGEsIHVuY2hlY2tlZERhdGEsIGNvbmZpZyk7XG4gICAgY29uc3Qgd2F0ZXJmYWxsRGF0YSA9IHdhdGVyZmFsbFRyYW5zZm9ybSh1bmNoZWNrZWREYXRhLCBpc1dhdGVyZmFsbCk7XG4gICAgY29uc3QgZGF0YSA9IGlzV2F0ZXJmYWxsID8gd2F0ZXJmYWxsRGF0YS5kYXRhIDogdW5jaGVja2VkRGF0YTtcblxuICAgIGNvbnN0IGNoYXJ0U2l6aW5nVmFsdWVzID0gZ2V0RnVsbENoYXJ0U2NhbGVWYWx1ZXMoXG4gICAgICBjb25maWcsXG4gICAgICBkYXRhLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICk7XG4gICAgaWYgKGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnc2l6aW5nJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRpY2tDb3VudCA9IGdldEJ1Y2tldFRpY2tDb3VudChjaGFydFNpemluZ1ZhbHVlcyk7XG4gICAgY29uc3QgeFRpY2tzID0gKFxuICAgICAgZGF0YS50eXBlID09PSAnbGFiZWxlZCdcbiAgICAgICAgPyBnZW5lcmF0ZUxhYmVsbGVkVGlja3MoZGF0YSwgY29uZmlnLCB0aWNrQ291bnQsIGNoYXJ0U2l6aW5nVmFsdWVzKVxuICAgICAgICA6IGdlbmVyYXRlVGltZXNlcmllc1RpY2tzKFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHRpY2tDb3VudCxcbiAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgICApXG4gICAgKS5tYXAodGljayA9PiB0b1hUaWNrKHRpY2spKTtcbiAgICBjb25zdCB7IHNjYWxlLCB0aWNrczogZGF0YVRpY2tzIH0gPSBjYWxjRGF0YUF4aXNTY2FsZXNBbmRUaWNrcyhcbiAgICAgIGRhdGEsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgY29uZmlnLFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgKTtcbiAgICBjb25zdCB5VGlja3MgPSBkYXRhVGlja3MubWFwKHRpY2sgPT4gdG9ZVGljayh0aWNrKSk7XG4gICAgY29uc3QgemVyb0F4aXNQb3NWYWwgPSBzY2FsZSgwLCB0cnVlKTtcblxuICAgIGNvbnN0IGdyYWRpZW50czogUmVjdFtdW10gPSBbXTtcbiAgICBjb25zdCBiYXJzOiBSZWN0W11bXSA9IGRhdGEueXMubWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGluZFNlcmllc0dyYWRpZW50czogUmVjdFtdID0gW107XG4gICAgICBjb25zdCBpbmRTZXJpZXNCYXJzID0geS52YWx1ZXMubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB7IHlWYWx1ZSwgaGVpZ2h0IH0gPSBnZXRCYXJZSW5mbyhcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICB5SW5kZXgsXG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgc2NhbGUsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHhWYWx1ZSA9IGNhbGN1bGF0ZUJhclBvc2l0aW9uKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGlzQ2x1c3RlcmVkRGF0YShkYXRhLCBjb25maWcsIGZhbHNlKSA/IHlJbmRleCA6IDAsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpc0Z1bm5lbCkge1xuICAgICAgICAgIC8vVGhlIGVtcHR5IGdyYWRpZW50IHN0aWxsIG5lZWRzIHRvIGJlIGluc2VydGVkIHRvIGtlZXAgZGF0YSBhbGlnbmVkXG4gICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICBpbmRTZXJpZXNHcmFkaWVudHMucHVzaCh7XG4gICAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAncmVjdCcsXG4gICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyB5VmFsdWU6IHByZXZCYXJZVmFsIH0gPSBnZXRCYXJZSW5mbyhcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICB5SW5kZXgsXG4gICAgICAgICAgICAgIGluZGV4IC0gMSxcbiAgICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpbmRTZXJpZXNHcmFkaWVudHMucHVzaCh7XG4gICAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAncmVjdCcsXG4gICAgICAgICAgICAgIHg6IHhWYWx1ZSxcbiAgICAgICAgICAgICAgeTogcHJldkJhcllWYWwsXG4gICAgICAgICAgICAgIHdpZHRoOiBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplLFxuICAgICAgICAgICAgICBoZWlnaHQ6IE1hdGgubWF4KHlWYWx1ZSAtIHByZXZCYXJZVmFsLCAwKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJhcjogUmVjdCA9IHtcbiAgICAgICAgICBlbGVtZW50VHlwZTogJ3JlY3QnLFxuICAgICAgICAgIHg6IHhWYWx1ZSxcbiAgICAgICAgICB5OiB5VmFsdWUsXG4gICAgICAgICAgd2lkdGg6IGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBiYXI7XG4gICAgICB9KTtcbiAgICAgIGdyYWRpZW50cy5wdXNoKGluZFNlcmllc0dyYWRpZW50cyk7XG4gICAgICByZXR1cm4gaW5kU2VyaWVzQmFycztcbiAgICB9KTtcbiAgICBsZXQgc3VwcEJhcnM6IFJlY3RbXVtdID0gW107XG4gICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpKSB7XG4gICAgICBzdXBwQmFycyA9IGRhdGEuc3VwcGxlbWVudGFyeVlzLm1hcCgoeSwgeUluZGV4KSA9PlxuICAgICAgICB5LnZhbHVlcy5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyB5VmFsdWUsIGhlaWdodCB9ID0gZ2V0QmFyWUluZm8oXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgeUluZGV4LFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB4VmFsdWUgPSBjYWxjdWxhdGVCYXJQb3NpdGlvbihcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgeS5zdXBwbGVtZW50YWxJbmRleCArIDEsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdyZWN0JyxcbiAgICAgICAgICAgIHg6IHhWYWx1ZSxcbiAgICAgICAgICAgIHk6IHlWYWx1ZSxcbiAgICAgICAgICAgIHdpZHRoOiBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGJhcnMucHVzaCguLi5zdXBwQmFycyk7XG4gICAgICBjb2xvcnMucHVzaChcbiAgICAgICAgLi4uZGF0YS5zdXBwbGVtZW50YXJ5WXMubWFwKHkgPT5cbiAgICAgICAgICBnZXRDb2xvcih5LCBjb2xvckluZGljZXMsIGNvbmZpZy5jb2xvcnMpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB3YXRlcmZhbGxMaW5lczoge1xuICAgICAgeDE6IG51bWJlcjtcbiAgICAgIHgyOiBudW1iZXI7XG4gICAgICB5MTogbnVtYmVyO1xuICAgICAgeTI6IG51bWJlcjtcbiAgICB9W10gPSBbXTtcbiAgICBpZiAoaXNXYXRlcmZhbGwpIHtcbiAgICAgIC8vTW92ZSBiYXJzIGJhc2VkIG9uIGhlaWdodCBvZiBwcmV2aW91cyBiYXJzIChleGNlcHQgdGhlIHRvdGFsIGJhcilcbiAgICAgIGxldCBiYXJPZmZzZXRSdW5uaW5nVG90YWwgPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGxldCBiYXJPZmZzZXRDaGFuZ2UgPSAwO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJhcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBiYXJJc05lZ2F0aXZlID1cbiAgICAgICAgICAgIGJhcnNbal1baV0ueSA+PSB6ZXJvQXhpc1Bvc1ZhbCAmJiBiYXJzW2pdW2ldLmhlaWdodCA+IDA7XG4gICAgICAgICAgaWYgKGJhcklzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgIGJhck9mZnNldENoYW5nZSAtPSBiYXJzW2pdW2ldLmhlaWdodDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmFyT2Zmc2V0Q2hhbmdlICs9IGJhcnNbal1baV0uaGVpZ2h0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBiYXJzW2pdW2ldLm9mZnNldCA9IGJhck9mZnNldFJ1bm5pbmdUb3RhbDtcbiAgICAgICAgICBiYXJzW2pdW2ldLnkgLT0gYmFyT2Zmc2V0UnVubmluZ1RvdGFsO1xuICAgICAgICAgIGlmIChqID09PSBiYXJzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHgxID0gYmFyc1tqXVtpXS54ICsgYmFyc1tiYXJzLmxlbmd0aCAtIDFdW2ldLndpZHRoO1xuICAgICAgICAgICAgY29uc3QgeTEgPSBiYXJzW2pdW2ldLnkgKyAoYmFySXNOZWdhdGl2ZSA/IGJhcnNbal1baV0uaGVpZ2h0IDogMCk7XG4gICAgICAgICAgICBjb25zdCB4MiA9IGJhcnNbal1baSArIDFdLng7XG4gICAgICAgICAgICBjb25zdCB5MiA9IHkxO1xuICAgICAgICAgICAgd2F0ZXJmYWxsTGluZXMucHVzaCh7XG4gICAgICAgICAgICAgIHgxLFxuICAgICAgICAgICAgICB5MSxcbiAgICAgICAgICAgICAgeDIsXG4gICAgICAgICAgICAgIHkyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJhck9mZnNldFJ1bm5pbmdUb3RhbCArPSBiYXJPZmZzZXRDaGFuZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YUxhYmVsczogRGF0YUxhYmVsW10gPSBkYXRhLnlzLmZsYXRNYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3ViTGFiZWxzOiBEYXRhTGFiZWxbXSA9IHkudmFsdWVzLm1hcCgodmFsLCB4SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgaXNOZWdhdGl2ZUJhciA9XG4gICAgICAgICAgYmFyc1t5SW5kZXhdW3hJbmRleF0ueSA+PSB6ZXJvQXhpc1Bvc1ZhbCAmJlxuICAgICAgICAgIGJhcnNbeUluZGV4XVt4SW5kZXhdLmhlaWdodCA+IDA7XG4gICAgICAgIGNvbnN0IHlPZmZzZXQgPSBpc05lZ2F0aXZlQmFyXG4gICAgICAgICAgPyBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nICtcbiAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFRleHRTaXplICtcbiAgICAgICAgICAgIGJhcnNbeUluZGV4XVt4SW5kZXhdLmhlaWdodFxuICAgICAgICAgIDogLWNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmc7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnLFxuICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgcGlwZVRyYW5zZm9ybSh2YWwsIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCB4SW5kZXgpKSA/PyAnJyxcbiAgICAgICAgICB5UG9zOlxuICAgICAgICAgICAgKGlzRnVubmVsICYmIGdyYWRpZW50c1t5SW5kZXhdW3hJbmRleF0uaGVpZ2h0ICE9PSAwXG4gICAgICAgICAgICAgID8gZ3JhZGllbnRzW3lJbmRleF1beEluZGV4XS55XG4gICAgICAgICAgICAgIDogYmFyc1t5SW5kZXhdW3hJbmRleF0ueSkgKyB5T2Zmc2V0LFxuICAgICAgICAgIHhQb3M6IGJhcnNbeUluZGV4XVt4SW5kZXhdLnggKyBiYXJzW3lJbmRleF1beEluZGV4XS53aWR0aCAvIDIsXG4gICAgICAgICAgYW5jaG9yOiAnbWlkZGxlJyxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN1YkxhYmVscztcbiAgICB9KTtcbiAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkpIHtcbiAgICAgIGNvbnN0IHN1cHBEYXRhTGFiZWxzOiBEYXRhTGFiZWxbXSA9IGRhdGEuc3VwcGxlbWVudGFyeVlzLmZsYXRNYXAoXG4gICAgICAgICh5LCB5SW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBzdWJMYWJlbHM6IERhdGFMYWJlbFtdID0geS52YWx1ZXMubWFwKCh2YWwsIHhJbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNOZWdhdGl2ZUJhciA9XG4gICAgICAgICAgICAgIHN1cHBCYXJzW3lJbmRleF1beEluZGV4XS55ID49IHplcm9BeGlzUG9zVmFsICYmXG4gICAgICAgICAgICAgIHN1cHBCYXJzW3lJbmRleF1beEluZGV4XS5oZWlnaHQgPiAwO1xuICAgICAgICAgICAgY29uc3QgeU9mZnNldCA9IGlzTmVnYXRpdmVCYXJcbiAgICAgICAgICAgICAgPyBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nICtcbiAgICAgICAgICAgICAgICBzdXBwQmFyc1t5SW5kZXhdW3hJbmRleF0uaGVpZ2h0XG4gICAgICAgICAgICAgIDogLWNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmc7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCcsXG4gICAgICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgICAgIHBpcGVUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgeEluZGV4LCB0cnVlKSxcbiAgICAgICAgICAgICAgICApID8/ICcnLFxuICAgICAgICAgICAgICB5UG9zOiBzdXBwQmFyc1t5SW5kZXhdW3hJbmRleF0ueSArIHlPZmZzZXQsXG4gICAgICAgICAgICAgIHhQb3M6XG4gICAgICAgICAgICAgICAgc3VwcEJhcnNbeUluZGV4XVt4SW5kZXhdLnggKyBzdXBwQmFyc1t5SW5kZXhdW3hJbmRleF0ud2lkdGggLyAyLFxuICAgICAgICAgICAgICBhbmNob3I6ICdtaWRkbGUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gc3ViTGFiZWxzO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGRhdGFMYWJlbHMucHVzaCguLi5zdXBwRGF0YUxhYmVscyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaG92ZXIocG9zOiB7XG4gICAgICByZWN0OiBET01SZWN0O1xuICAgICAgeDogbnVtYmVyO1xuICAgICAgeTogbnVtYmVyO1xuICAgICAgY29udGFpbmVyU2Nyb2xsWDogbnVtYmVyO1xuICAgICAgY29udGFpbmVyU2Nyb2xsWTogbnVtYmVyO1xuICAgIH0pOiBIb3ZlclJldHVybiB7XG4gICAgICBjb25zdCByZWFsUG9zWCA9IHBvcy54ICsgcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICBjb25zdCByZWFsUG9zWSA9IHBvcy55ICsgcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsIHx8XG4gICAgICAgIGdldElmSG92ZXJPdXRPZkJvdW5kcyhcbiAgICAgICAgICBwb3MueCxcbiAgICAgICAgICBwb3MueSxcbiAgICAgICAgICByZWFsUG9zWCxcbiAgICAgICAgICByZWFsUG9zWSxcbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1cHBZcyA9IGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpID8gZGF0YS5zdXBwbGVtZW50YXJ5WXMgOiBudWxsO1xuXG4gICAgICBjb25zdCB4SG92ZXJJbmRpY2VzID0gZ2V0QnVja2V0QW5kQ2x1c3Rlck51bUZvckhvdmVyKFxuICAgICAgICByZWFsUG9zWCxcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZGF0YS54Lmxlbmd0aCxcbiAgICAgICk7XG4gICAgICBpZiAoIXhIb3ZlckluZGljZXMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB7XG4gICAgICAgIGJ1Y2tldE51bTogeEluZGV4LFxuICAgICAgICBjbHVzdGVyTnVtLFxuICAgICAgICBjbHVzdGVyTm9ybUNvdW50LFxuICAgICAgICBjbHVzdGVyTnVtVHlwZSxcbiAgICAgIH0gPSB4SG92ZXJJbmRpY2VzO1xuXG4gICAgICBsZXQgaXNTdXBwVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgIGxldCBzdXBwSW5kZXhWYWwgPSAwO1xuICAgICAgaWYgKHN1cHBZcykge1xuICAgICAgICBzdXBwSW5kZXhWYWwgPSBjbHVzdGVyTnVtIC0gY2x1c3Rlck5vcm1Db3VudDtcbiAgICAgICAgaWYgKGNsdXN0ZXJOdW1UeXBlID09PSAnc3VwcCcpIHtcbiAgICAgICAgICBpc1N1cHBWYWx1ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FsY1ggPSBjYWxjdWxhdGVCYXJQb3NpdGlvbihcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgeEluZGV4LFxuICAgICAgICBjbHVzdGVyTnVtLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHlzID0gZGF0YS55cy5tYXAoKF8sIG1hcFlJbmRleCkgPT5cbiAgICAgICAgaXNTdXBwVmFsdWVcbiAgICAgICAgICA/IGdldFN1cHBCYXJZSW5mb1ZpYVlJbmRleChcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICBtYXBZSW5kZXgsXG4gICAgICAgICAgICAgIHN1cHBJbmRleFZhbCxcbiAgICAgICAgICAgICAgeEluZGV4LFxuICAgICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgICkueVZhbHVlXG4gICAgICAgICAgOiBnZXRCYXJZSW5mbyhkYXRhLCBjb25maWcsIG1hcFlJbmRleCwgeEluZGV4LCBzY2FsZSkueVZhbHVlIC1cbiAgICAgICAgICAgICghaXNTdXBwVmFsdWUgJiYgaXNXYXRlcmZhbGxcbiAgICAgICAgICAgICAgPyBiYXJzW21hcFlJbmRleF1beEluZGV4XS5vZmZzZXQgPz8gMFxuICAgICAgICAgICAgICA6IDApLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHlQb3NTaWduID0gemVyb0F4aXNQb3NWYWwgLSByZWFsUG9zWTtcbiAgICAgIGxldCB2aXNpYmxlWUluZGV4ID0gLTE7XG4gICAgICBsZXQgZHJvcE9mZkhvdmVyRGV0ZWN0ZWQgPSBmYWxzZTtcbiAgICAgIGlmICh5UG9zU2lnbiA8IDAgJiYgZGF0YS55cy5maW5kKHkgPT4geS52YWx1ZXMuZmluZCh2YWwgPT4gdmFsIDwgMCkpKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB5cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmICh5c1tpXSA+PSB6ZXJvQXhpc1Bvc1ZhbCAmJiB5c1tpXSA8IHJlYWxQb3NZKSB7XG4gICAgICAgICAgICB2aXNpYmxlWUluZGV4ID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh5c1tpXSA8PSB6ZXJvQXhpc1Bvc1ZhbCAmJiB5c1tpXSA8IHJlYWxQb3NZKSB7XG4gICAgICAgICAgICB2aXNpYmxlWUluZGV4ID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQ2x1c3RlcmVkRGF0YShkYXRhLCBjb25maWcsIGZhbHNlKSAmJiAhc3VwcFlzKSB7XG4gICAgICAgIHZpc2libGVZSW5kZXggPSBjbHVzdGVyTnVtO1xuICAgICAgICBpZiAoaXNGdW5uZWwgJiYgeEluZGV4ICE9PSAwICYmIHlzW3Zpc2libGVZSW5kZXhdID4gcmVhbFBvc1kpIHtcbiAgICAgICAgICBkcm9wT2ZmSG92ZXJEZXRlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh2aXNpYmxlWUluZGV4ID09PSAtMSkge1xuICAgICAgICBpZiAocmVhbFBvc1kgPD0gemVyb0F4aXNQb3NWYWwpIHtcbiAgICAgICAgICB2aXNpYmxlWUluZGV4ID0geXMuaW5kZXhPZihNYXRoLm1pbiguLi55cykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpc2libGVZSW5kZXggPSB5cy5pbmRleE9mKE1hdGgubWF4KC4uLnlzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHlJbmRleCA9IHZpc2libGVJbmRpY2VzW3Zpc2libGVZSW5kZXhdO1xuICAgICAgbGV0IHsgeVZhbHVlLCBoZWlnaHQgfSA9IGlzU3VwcFZhbHVlXG4gICAgICAgID8gZ2V0U3VwcEJhcllJbmZvVmlhWUluZGV4KFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHlJbmRleCxcbiAgICAgICAgICAgIHN1cHBJbmRleFZhbCxcbiAgICAgICAgICAgIHhJbmRleCxcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgIClcbiAgICAgICAgOiBnZXRCYXJZSW5mbyhkYXRhLCBjb25maWcsIHlJbmRleCwgeEluZGV4LCBzY2FsZSk7XG4gICAgICBpZiAoZHJvcE9mZkhvdmVyRGV0ZWN0ZWQpIHtcbiAgICAgICAgeVZhbHVlID0gZ3JhZGllbnRzW3lJbmRleF1beEluZGV4XS55O1xuICAgICAgICBoZWlnaHQgPSBncmFkaWVudHNbeUluZGV4XVt4SW5kZXhdLmhlaWdodDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9jYWxBbmNob3JYID0gY2FsY1ggLSBwb3MuY29udGFpbmVyU2Nyb2xsWCAtIFNNQUxMX1BBRERJTkc7XG4gICAgICBjb25zdCB3aWR0aCA9IGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgKyBTTUFMTF9QQURESU5HICogMjtcbiAgICAgIGNvbnN0IHdhdGVyZmFsbE9mZnNldCA9XG4gICAgICAgICFpc1N1cHBWYWx1ZSAmJiBpc1dhdGVyZmFsbCA/IGJhcnNbeUluZGV4XVt4SW5kZXhdLm9mZnNldCA/PyAwIDogMDtcbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWSA9IHlWYWx1ZSAtIHBvcy5jb250YWluZXJTY3JvbGxZIC0gd2F0ZXJmYWxsT2Zmc2V0O1xuICAgICAgY29uc3QgeyBhbmNob3JYLCBhbmNob3JZLCBhbmNob3JXaWR0aCwgYW5jaG9ySGVpZ2h0IH0gPVxuICAgICAgICBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgICAgICAgbG9jYWxBbmNob3JYLFxuICAgICAgICAgIGxvY2FsQW5jaG9yWSxcbiAgICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgKTtcbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBhbmNob3JYICsgcG9zLnJlY3QueCxcbiAgICAgICAgYW5jaG9yWSArIHBvcy5yZWN0LnksXG4gICAgICAgIGFuY2hvcldpZHRoLFxuICAgICAgICBhbmNob3JIZWlnaHQsXG4gICAgICApO1xuICAgICAgLy9XZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBpbmRleCBmb3IgdGhlIGxhdGVyIGNoZWNrSWZTZWNvbmRhcnkgY2FsbFxuICAgICAgY29uc3QgeXNGb3JNZXRyaWNzOiB7XG4gICAgICAgIGRhdGE6IFN1cHBsZW1lbnRhcnlEYXRhWSB8IERhdGFZO1xuICAgICAgICBvcmlnaW5hbEluZGV4OiBudW1iZXI7XG4gICAgICB9W10gPVxuICAgICAgICBpc1N1cHBWYWx1ZSAmJiBzdXBwWXNcbiAgICAgICAgICA/IHN1cHBZc1xuICAgICAgICAgICAgICAubWFwKChzdXBwWSwgaW5kZXgpID0+ICh7IGRhdGE6IHN1cHBZLCBvcmlnaW5hbEluZGV4OiBpbmRleCB9KSlcbiAgICAgICAgICAgICAgLmZpbHRlcihzdXBwWSA9PiBzdXBwWS5kYXRhLnN1cHBsZW1lbnRhbEluZGV4ID09PSBzdXBwSW5kZXhWYWwpXG4gICAgICAgICAgOiBkYXRhLnlzLm1hcCgoeSwgaW5kZXgpID0+ICh7IGRhdGE6IHksIG9yaWdpbmFsSW5kZXg6IGluZGV4IH0pKTtcbiAgICAgIC8vIEZpbmQgdGhlIHNwZWNpZmljIHN1cHBsZW1lbnRhcnkgaXRlbSB0aGF0IHdhcyBob3ZlcmVkXG4gICAgICBjb25zdCBncm91cFN1cHBzID0gc3VwcFlzXG4gICAgICAgID8gc3VwcFlzLmZpbHRlcihzID0+IHMuc3VwcGxlbWVudGFsSW5kZXggPT09IHN1cHBJbmRleFZhbCkgPz8gW11cbiAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IHN1cHBBcnJheUluZGV4ID0gdmlzaWJsZVlJbmRleDsgLy8gVXNlIHRoZSB2aXN1YWwgWSBwb3NpdGlvbiB3aXRoaW4gdGhlIGxheWVyXG4gICAgICBjb25zdCBmaWx0ZXJlZFN1cHBZSW5kZXggPVxuICAgICAgICBzdXBwQXJyYXlJbmRleCA+PSAwICYmIHN1cHBBcnJheUluZGV4IDwgZ3JvdXBTdXBwcy5sZW5ndGggJiYgc3VwcFlzXG4gICAgICAgICAgPyBzdXBwWXMuaW5kZXhPZihncm91cFN1cHBzW3N1cHBBcnJheUluZGV4XSkgPz8gLTFcbiAgICAgICAgICA6IC0xO1xuICAgICAgY29uc3Qgc3VwcFlJbmRleCA9XG4gICAgICAgIGZpbHRlcmVkU3VwcFlJbmRleCA+PSAwID8gdmlzaWJsZVN1cHBJbmRpY2VzW2ZpbHRlcmVkU3VwcFlJbmRleF0gOiAtMTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG92ZXJUeXBlOiAnc3RhbmRhcmQnLFxuICAgICAgICB4OiBjYWxjWCArIGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgLyAyLFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHlzLFxuICAgICAgICB5SW5kZXgsXG4gICAgICAgIHZpc2libGVZSW5kZXgsXG4gICAgICAgIC4uLihpc1N1cHBWYWx1ZSAmJiBzdXBwWUluZGV4ID49IDBcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgaXNTdXBwVmFsdWUsXG4gICAgICAgICAgICAgIHN1cHBZSW5kZXg6IHN1cHBZSW5kZXgsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihkcm9wT2ZmSG92ZXJEZXRlY3RlZCA/IHsgaXNEcm9wT2ZmOiB0cnVlIH0gOiB7fSksXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgZGF0ZTpcbiAgICAgICAgICAgIGRhdGEudHlwZSA9PT0gJ2xhYmVsZWQnXG4gICAgICAgICAgICAgID8gZHJvcE9mZkhvdmVyRGV0ZWN0ZWRcbiAgICAgICAgICAgICAgICA/ICdEcm9wIG9mZiBmcm9tICcuY29uY2F0KGRhdGEueFt4SW5kZXggLSAxXS5sYWJlbClcbiAgICAgICAgICAgICAgICA6IGRhdGEueFt4SW5kZXhdLmxhYmVsXG4gICAgICAgICAgICAgIDogdXRjRm9ybWF0KCclQiAlZCwgJVknKShuZXcgRGF0ZShkYXRhLnhbeEluZGV4XSkpLFxuICAgICAgICAgIG1ldHJpY3M6IHlzRm9yTWV0cmljc1xuICAgICAgICAgICAgLm1hcCh5ID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBnZXRDb2xvcihcbiAgICAgICAgICAgICAgICBpc1dhdGVyZmFsbCA/IHdhdGVyZmFsbERhdGEubWFwLmdldCh5LmRhdGEpIDogeS5kYXRhLFxuICAgICAgICAgICAgICAgIGNvbG9ySW5kaWNlcyxcbiAgICAgICAgICAgICAgICBjb25maWcuY29sb3JzLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBsYWJlbDogeS5kYXRhLmxhYmVsLFxuICAgICAgICAgICAgICBwYXR0ZXJuOiB5LmRhdGEucGF0dGVybixcbiAgICAgICAgICAgICAgdmFsdWU6IHBpcGVUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgZHJvcE9mZkhvdmVyRGV0ZWN0ZWRcbiAgICAgICAgICAgICAgICAgID8gTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgeS5kYXRhLnZhbHVlc1t4SW5kZXggLSAxXSAtIHkuZGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IHkuZGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KFxuICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgIHkub3JpZ2luYWxJbmRleCxcbiAgICAgICAgICAgICAgICAgIGRyb3BPZmZIb3ZlckRldGVjdGVkID8geEluZGV4IC0gMSA6IHhJbmRleCxcbiAgICAgICAgICAgICAgICAgIGlzU3VwcFZhbHVlLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLmZpbHRlcigoXywgaSkgPT4gY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IGkgPT09IHZpc2libGVZSW5kZXgpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hhcnRXaWR0aDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxXaWR0aCxcbiAgICAgIGNoYXJ0SGVpZ2h0OiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbEhlaWdodCxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgeFRpY2tzLFxuICAgICAgeVRpY2tzLFxuICAgICAgY29sb3JzLFxuICAgICAgYmFycyxcbiAgICAgIGxpbmVzOiBbXSxcbiAgICAgIGNpcmNsZXM6IFtdLFxuICAgICAgYXJlYXM6IFtdLFxuICAgICAgaG92ZXIsXG4gICAgICBhcmNzOiBbXSxcbiAgICAgIGhvcml6b250YWxCYXJzOiBbXSxcbiAgICAgIGRhdGFMYWJlbHMsXG4gICAgICB3YXRlcmZhbGxMaW5lcyxcbiAgICAgIGdyYWRpZW50cyxcbiAgICAgIGZsb3dDb25uZWN0aW9uczogW10sXG4gICAgICBob3Jpem9udGFsQ29udGFpbmVyU2NhbGU6IGNoYXJ0U2l6aW5nVmFsdWVzLmhvcml6b250YWxDb250YWluZXJTY2FsZSxcbiAgICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6IGNoYXJ0U2l6aW5nVmFsdWVzLnZlcnRpY2FsQ29udGFpbmVyU2NhbGUsXG4gICAgICBjaGFydEVycm9yOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBob3Jpem9udGFsQmFycyhcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBhbGxEYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgaWYgKCF3YXJuRmxvd0RhdGEoYWxsRGF0YSwgJ2hvcml6b250YWwgYmFyJykpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdjb25maWcnIH07XG4gICAgfVxuICAgIC8vU29tZSBvZiB0aGlzIHN0dWZmIGdldHMgY29uZnVzaW5nLCBiZWNhdXNlIHggYW5kIHkgYXJlIGVzc2VudGlhbGx5IGludmVydGVkIGhlcmVcbiAgICAvLyAgU28sIGlmIHlvdSBzZWUgYSBzaXR1YXRpb24gd2hlcmUgYSB2YXJpYWJsZSBpcyBuYW1lZCAneScsIGJ1dCByZWZlcmVuY2luZ1xuICAgIC8vICAneCcgKG9yIHZpY2UgdmVyc2EpLCB0aGF0J3Mgd2h5XG4gICAgY29uc3QgeyBkYXRhLCB2aXNpYmxlSW5kaWNlcywgdmlzaWJsZVN1cHBJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy5zaG93RGF0YUxhYmVscyA9PT0gdHJ1ZSAmJlxuICAgICAgaXNTdGFja2VkRGF0YShjb25maWcpICYmXG4gICAgICAhaXNHcm91cGluZ1R5cGVFeGNlcHRpb24oZGF0YSwgY29uZmlnKVxuICAgICkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgRGF0YSBsYWJlbHMgYXJlbid0IHN1cHBvcnRlZCBmb3IgYW55IHN0YWNrZWQgY2hhcnQgdHlwZVwiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSAmJlxuICAgICAgaXNDbHVzdGVyZWREYXRhKGRhdGEsIGNvbmZpZywgZmFsc2UpICYmXG4gICAgICAhaXNHcm91cGluZ1R5cGVFeGNlcHRpb24oZGF0YSwgY29uZmlnKVxuICAgICkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgU3VwcGxlbWVudGFyeSB5IHZhbHVlcyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBjbHVzdGVyZWQgZGF0YSAoanVzdCB1c2UgYW5vdGhlciBub3JtYWwgeSBzZXJpZXMpXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYXRlRm9ybWF0LCBwaXBlVHJhbnNmb3JtLCBjb2xvckluZGljZXMsIGNvbG9ycyB9ID1cbiAgICAgIGdldEZvcm1hdHRpbmdBbmRDb2xvcnMoYWxsRGF0YSwgZGF0YSwgY29uZmlnKTtcblxuICAgIGNvbnN0IGNoYXJ0U2l6aW5nVmFsdWVzID0gZ2V0RnVsbENoYXJ0U2NhbGVWYWx1ZXMoXG4gICAgICBjb25maWcsXG4gICAgICBkYXRhLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICk7XG4gICAgaWYgKGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnc2l6aW5nJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRpY2tDb3VudCA9IGdldEJ1Y2tldFRpY2tDb3VudChjaGFydFNpemluZ1ZhbHVlcyk7XG4gICAgY29uc3QgeVRpY2tzID0gKFxuICAgICAgZGF0YS50eXBlID09PSAnbGFiZWxlZCdcbiAgICAgICAgPyBnZW5lcmF0ZUxhYmVsbGVkVGlja3MoZGF0YSwgY29uZmlnLCB0aWNrQ291bnQsIGNoYXJ0U2l6aW5nVmFsdWVzKVxuICAgICAgICA6IGdlbmVyYXRlVGltZXNlcmllc1RpY2tzKFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHRpY2tDb3VudCxcbiAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgICApXG4gICAgKS5tYXAodGljayA9PiB0b1lUaWNrKHRpY2spKTtcbiAgICBjb25zdCB7IHNjYWxlLCB0aWNrczogZGF0YVRpY2tzIH0gPSBjYWxjRGF0YUF4aXNTY2FsZXNBbmRUaWNrcyhcbiAgICAgIGRhdGEsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgY29uZmlnLFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgKTtcbiAgICBjb25zdCB4VGlja3MgPSBkYXRhVGlja3MubWFwKHRpY2sgPT4gdG9YVGljayh0aWNrKSk7XG4gICAgY29uc3QgemVyb0F4aXNQb3NWYWwgPSBzY2FsZSgwLCB0cnVlKTtcblxuICAgIGNvbnN0IHNpbXBsaWZpZWRIb3Jpem9udGFsQmFyczoge1xuICAgICAgeFBvczogbnVtYmVyO1xuICAgICAgeVBvczogbnVtYmVyO1xuICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICB9W11bXSA9IFtdO1xuICAgIGNvbnN0IGhvcml6b250YWxCYXJzID0gZGF0YS55cy5tYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3ViU2ltcEhvckJhcnM6IHtcbiAgICAgICAgeFBvczogbnVtYmVyO1xuICAgICAgICB5UG9zOiBudW1iZXI7XG4gICAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICB9W10gPSBbXTtcbiAgICAgIGNvbnN0IHJldFZhbCA9IHkudmFsdWVzLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgeyB4VmFsdWUsIHdpZHRoIH0gPSBnZXRCYXJYSW5mbyhcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICB5SW5kZXgsXG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgc2NhbGUsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJJbmZvID0gZ2V0Q2x1c3RlckluZm9Gb3JCdWNrZXQoZGF0YSwgY29uZmlnKTtcbiAgICAgICAgY29uc3QgY2x1c3Rlck51bSA9IGNsdXN0ZXJJbmZvLm5vcm1DbHVzdGVySW5kaWNlcy5pbmRleE9mKHlJbmRleCk7XG4gICAgICAgIGNvbnN0IHlWYWx1ZSA9IGNhbGN1bGF0ZUJhclBvc2l0aW9uKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGlzQ2x1c3RlcmVkRGF0YShkYXRhLCBjb25maWcsIGZhbHNlKSA/IGNsdXN0ZXJOdW0gOiAwLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGhvclIgPSBNYXRoLm1pbihcbiAgICAgICAgICBERUZBVUxUX0hPUklaT05UQUxfQkFSX0NPUk5FUl9SQURJVVMsXG4gICAgICAgICAgTWF0aC5mbG9vcih3aWR0aCAvIDIpLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB2ZXJSID0gTWF0aC5taW4oXG4gICAgICAgICAgREVGQVVMVF9IT1JJWk9OVEFMX0JBUl9DT1JORVJfUkFESVVTLFxuICAgICAgICAgIE1hdGguZmxvb3IoY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSAvIDIpLFxuICAgICAgICApO1xuICAgICAgICBzdWJTaW1wSG9yQmFycy5wdXNoKHtcbiAgICAgICAgICB4UG9zOiB4VmFsdWUsXG4gICAgICAgICAgeVBvczogeVZhbHVlLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICB9KTtcbiAgICAgICAgLy9JZiBjbHVzdGVyTnVtIGlzIC0xLCB0aGVuIHRoZSB2YWx1ZSBvZiBkYXRhW3lJbmRleF1beEluZGV4XSBtdXN0IGJlIHplcm9cbiAgICAgICAgaWYgKGNsdXN0ZXJOdW0gPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvcml6b250YWxCYXI6ICcnLFxuICAgICAgICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgICAgICAgeDogeFZhbHVlLFxuICAgICAgICAgICAgeTogeVZhbHVlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy9Eb24ndCBkcmF3IGFueXRoaW5nIGZvciB6ZXJvLXZhbHVlIGJhcnNcbiAgICAgICAgaWYgKHdpZHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvcml6b250YWxCYXI6ICcnLFxuICAgICAgICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgICAgICAgeDogeFZhbHVlLFxuICAgICAgICAgICAgeTogeVZhbHVlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc1Bvc2l0aXZlID0gZGF0YS55c1t5SW5kZXhdLnZhbHVlc1tpbmRleF0gPiAwO1xuICAgICAgICBjb25zdCBoYXNBbnlOZWdhdGl2ZUJhcnMgPSBkYXRhLnlzXG4gICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAuZmluZCh2YWwgPT4gdmFsIDwgMCk7XG4gICAgICAgIGNvbnN0IGhhc0FueVBvc2l0aXZlQmFycyA9IGRhdGEueXNcbiAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgIC5maW5kKHZhbCA9PiB2YWwgPiAwKTtcblxuICAgICAgICAvL1RoZXNlIGNoZWNrcyBhcmUgdG8gbWFrZSBzdXJlIHdlIHN0aWxsIHJvdW5kIGlmIGFsbCBwcmV2aW91cy9sYXRlciB2YWx1ZXMgYXJlIDBcbiAgICAgICAgY29uc3QgYWxsTGVmdFplcm8gPSBpc1Bvc2l0aXZlXG4gICAgICAgICAgPyBkYXRhLnlzXG4gICAgICAgICAgICAgIC5zbGljZSgwLCB5SW5kZXgpXG4gICAgICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgICAgIC5maWx0ZXIodmFsID0+IHZhbCA+IDApLmxlbmd0aCA9PT0gMCAmJiAhaGFzQW55TmVnYXRpdmVCYXJzXG4gICAgICAgICAgOiBkYXRhLnlzXG4gICAgICAgICAgICAgIC5zbGljZSh5SW5kZXggKyAxLCBkYXRhLnlzLmxlbmd0aClcbiAgICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgICAgLmZpbHRlcih2YWwgPT4gdmFsIDwgMCkubGVuZ3RoID09PSAwO1xuICAgICAgICBjb25zdCBsZWZ0U2lkZVJvdW5kID0gIWlzU3RhY2tlZERhdGEoY29uZmlnKSB8fCBhbGxMZWZ0WmVybztcbiAgICAgICAgY29uc3QgYWxsUmlnaHRaZXJvID0gaXNQb3NpdGl2ZVxuICAgICAgICAgID8gZGF0YS55c1xuICAgICAgICAgICAgICAuc2xpY2UoeUluZGV4ICsgMSwgZGF0YS55cy5sZW5ndGgpXG4gICAgICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgICAgIC5maWx0ZXIodmFsID0+IHZhbCA+IDApLmxlbmd0aCA9PT0gMFxuICAgICAgICAgIDogZGF0YS55c1xuICAgICAgICAgICAgICAuc2xpY2UoMCwgeUluZGV4KVxuICAgICAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgPCAwKS5sZW5ndGggPT09IDAgJiYgIWhhc0FueVBvc2l0aXZlQmFycztcbiAgICAgICAgY29uc3QgcmlnaHRTaWRlUm91bmQgPSAhaXNTdGFja2VkRGF0YShjb25maWcpIHx8IGFsbFJpZ2h0WmVybztcbiAgICAgICAgY29uc3QgcGF0aEQgPSBjYWxjdWxhdGVIb3Jpem9udGFsQmFyUGF0aChcbiAgICAgICAgICBsZWZ0U2lkZVJvdW5kLFxuICAgICAgICAgIHJpZ2h0U2lkZVJvdW5kLFxuICAgICAgICAgIHhWYWx1ZSxcbiAgICAgICAgICB5VmFsdWUsXG4gICAgICAgICAgaG9yUixcbiAgICAgICAgICB2ZXJSLFxuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9yaXpvbnRhbEJhcjogcGF0aEQsXG4gICAgICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgICAgIHg6IHhWYWx1ZSxcbiAgICAgICAgICB5OiB5VmFsdWUsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHNpbXBsaWZpZWRIb3Jpem9udGFsQmFycy5wdXNoKHN1YlNpbXBIb3JCYXJzKTtcbiAgICAgIHJldHVybiByZXRWYWw7XG4gICAgfSk7XG4gICAgY29uc3Qgc3VwcFlzID0gZGF0YS5zdXBwbGVtZW50YXJ5WXM7XG4gICAgY29uc3Qgc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFyczoge1xuICAgICAgeFBvczogbnVtYmVyO1xuICAgICAgeVBvczogbnVtYmVyO1xuICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICB9W11bXSA9IFtdO1xuICAgIGlmIChzdXBwWXMpIHtcbiAgICAgIGNvbnN0IHN1cHBIb3Jpem9udGFsQmFycyA9IHN1cHBZcy5tYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJTaW1wSG9yQmFyczoge1xuICAgICAgICAgIHhQb3M6IG51bWJlcjtcbiAgICAgICAgICB5UG9zOiBudW1iZXI7XG4gICAgICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICAgICAgfVtdID0gW107XG4gICAgICAgIGNvbnN0IHJldFZhbCA9IHkudmFsdWVzLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHhWYWx1ZSwgd2lkdGggfSA9IGdldEJhclhJbmZvKFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHlJbmRleCxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgY2x1c3RlckluZm8gPSBnZXRDbHVzdGVySW5mb0ZvckJ1Y2tldChkYXRhLCBjb25maWcpO1xuICAgICAgICAgIGNvbnN0IGNsdXN0ZXJOdW0gPVxuICAgICAgICAgICAgY2x1c3RlckluZm8uc3VwcENsdXN0ZXJJbmRpY2VzLmluZGV4T2YoeS5zdXBwbGVtZW50YWxJbmRleCkgK1xuICAgICAgICAgICAgY2x1c3RlckluZm8ubm9ybUNvdW50O1xuICAgICAgICAgIGNvbnN0IHlWYWx1ZSA9IGNhbGN1bGF0ZUJhclBvc2l0aW9uKFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBjbHVzdGVyTnVtLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBob3JSID0gTWF0aC5taW4oXG4gICAgICAgICAgICBERUZBVUxUX0hPUklaT05UQUxfQkFSX0NPUk5FUl9SQURJVVMsXG4gICAgICAgICAgICBNYXRoLmZsb29yKHdpZHRoIC8gMiksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2ZXJSID0gTWF0aC5taW4oXG4gICAgICAgICAgICBERUZBVUxUX0hPUklaT05UQUxfQkFSX0NPUk5FUl9SQURJVVMsXG4gICAgICAgICAgICBNYXRoLmZsb29yKGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgLyAyKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHN1YlNpbXBIb3JCYXJzLnB1c2goe1xuICAgICAgICAgICAgeFBvczogeFZhbHVlLFxuICAgICAgICAgICAgeVBvczogeVZhbHVlLFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy9Eb24ndCBkcmF3IGFueXRoaW5nIGZvciB6ZXJvLXZhbHVlIGJhcnNcbiAgICAgICAgICBpZiAod2lkdGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGhvcml6b250YWxCYXI6ICcnLFxuICAgICAgICAgICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICAgICAgICAgIHg6IHhWYWx1ZSxcbiAgICAgICAgICAgICAgeTogeVZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpc1Bvc2l0aXZlID0gc3VwcFlzW3lJbmRleF0udmFsdWVzW2luZGV4XSA+IDA7XG4gICAgICAgICAgY29uc3QgaGFzQW55TmVnYXRpdmVCYXJzID0gc3VwcFlzXG4gICAgICAgICAgICAuZmlsdGVyKHN1cHBZID0+IHN1cHBZLnN1cHBsZW1lbnRhbEluZGV4ID09PSB5LnN1cHBsZW1lbnRhbEluZGV4KVxuICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgIC5maW5kKHZhbCA9PiB2YWwgPCAwKTtcbiAgICAgICAgICBjb25zdCBoYXNBbnlQb3NpdGl2ZUJhcnMgPSBzdXBwWXNcbiAgICAgICAgICAgIC5maWx0ZXIoc3VwcFkgPT4gc3VwcFkuc3VwcGxlbWVudGFsSW5kZXggPT09IHkuc3VwcGxlbWVudGFsSW5kZXgpXG4gICAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgICAgLmZpbmQodmFsID0+IHZhbCA+IDApO1xuXG4gICAgICAgICAgLy9UaGVzZSBjaGVja3MgYXJlIHRvIG1ha2Ugc3VyZSB3ZSBzdGlsbCByb3VuZCBpZiBhbGwgcHJldmlvdXMvbGF0ZXIgdmFsdWVzIGFyZSAwXG4gICAgICAgICAgY29uc3QgYWxsTGVmdFplcm8gPSBpc1Bvc2l0aXZlXG4gICAgICAgICAgICA/IHN1cHBZc1xuICAgICAgICAgICAgICAgIC5zbGljZSgwLCB5SW5kZXgpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIHN1cHBZID0+IHN1cHBZLnN1cHBsZW1lbnRhbEluZGV4ID09PSB5LnN1cHBsZW1lbnRhbEluZGV4LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIodmFsID0+IHZhbCA+IDApLmxlbmd0aCA9PT0gMCAmJiAhaGFzQW55TmVnYXRpdmVCYXJzXG4gICAgICAgICAgICA6IHN1cHBZc1xuICAgICAgICAgICAgICAgIC5zbGljZSh5SW5kZXggKyAxLCBzdXBwWXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBzdXBwWSA9PiBzdXBwWS5zdXBwbGVtZW50YWxJbmRleCA9PT0geS5zdXBwbGVtZW50YWxJbmRleCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgPCAwKS5sZW5ndGggPT09IDA7XG4gICAgICAgICAgY29uc3QgbGVmdFNpZGVSb3VuZCA9ICFpc1N0YWNrZWREYXRhKGNvbmZpZykgfHwgYWxsTGVmdFplcm87XG4gICAgICAgICAgY29uc3QgYWxsUmlnaHRaZXJvID0gaXNQb3NpdGl2ZVxuICAgICAgICAgICAgPyBzdXBwWXNcbiAgICAgICAgICAgICAgICAuc2xpY2UoeUluZGV4ICsgMSwgc3VwcFlzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgc3VwcFkgPT4gc3VwcFkuc3VwcGxlbWVudGFsSW5kZXggPT09IHkuc3VwcGxlbWVudGFsSW5kZXgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgICAgICAgLmZpbHRlcih2YWwgPT4gdmFsID4gMCkubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA6IHN1cHBZc1xuICAgICAgICAgICAgICAgIC5zbGljZSgwLCB5SW5kZXgpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIHN1cHBZID0+IHN1cHBZLnN1cHBsZW1lbnRhbEluZGV4ID09PSB5LnN1cHBsZW1lbnRhbEluZGV4LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIodmFsID0+IHZhbCA8IDApLmxlbmd0aCA9PT0gMCAmJiAhaGFzQW55UG9zaXRpdmVCYXJzO1xuICAgICAgICAgIGNvbnN0IHJpZ2h0U2lkZVJvdW5kID0gIWlzU3RhY2tlZERhdGEoY29uZmlnKSB8fCBhbGxSaWdodFplcm87XG4gICAgICAgICAgY29uc3QgcGF0aEQgPSBjYWxjdWxhdGVIb3Jpem9udGFsQmFyUGF0aChcbiAgICAgICAgICAgIGxlZnRTaWRlUm91bmQsXG4gICAgICAgICAgICByaWdodFNpZGVSb3VuZCxcbiAgICAgICAgICAgIHhWYWx1ZSxcbiAgICAgICAgICAgIHlWYWx1ZSxcbiAgICAgICAgICAgIGhvclIsXG4gICAgICAgICAgICB2ZXJSLFxuICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvcml6b250YWxCYXI6IHBhdGhELFxuICAgICAgICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgICAgICAgeDogeFZhbHVlLFxuICAgICAgICAgICAgeTogeVZhbHVlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzLnB1c2goc3ViU2ltcEhvckJhcnMpO1xuICAgICAgICByZXR1cm4gcmV0VmFsO1xuICAgICAgfSk7XG4gICAgICBob3Jpem9udGFsQmFycy5wdXNoKC4uLnN1cHBIb3Jpem9udGFsQmFycyk7XG4gICAgICBjb2xvcnMucHVzaCguLi5zdXBwWXMubWFwKHkgPT4gZ2V0Q29sb3IoeSwgY29sb3JJbmRpY2VzLCBjb25maWcuY29sb3JzKSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHlPZmZzZXQgPSBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplO1xuICAgIGNvbnN0IGRhdGFMYWJlbHM6IERhdGFMYWJlbFtdID0gZGF0YS55cy5mbGF0TWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHN1YkxhYmVsczogRGF0YUxhYmVsW10gPSB5LnZhbHVlcy5tYXAoKHZhbCwgeEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhcklzTmVnYXRpdmUgPVxuICAgICAgICAgIHNpbXBsaWZpZWRIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ueFBvcyA8IHplcm9BeGlzUG9zVmFsICYmXG4gICAgICAgICAgc2ltcGxpZmllZEhvcml6b250YWxCYXJzW3lJbmRleF1beEluZGV4XS53aWR0aCA+IDA7XG4gICAgICAgIGNvbnN0IHhPZmZzZXQgPSBiYXJJc05lZ2F0aXZlXG4gICAgICAgICAgPyAtY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZ1xuICAgICAgICAgIDogc2ltcGxpZmllZEhvcml6b250YWxCYXJzW3lJbmRleF1beEluZGV4XS53aWR0aCArXG4gICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJyxcbiAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgIHBpcGVUcmFuc2Zvcm0odmFsLCBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgeEluZGV4KSkgPz8gJycsXG4gICAgICAgICAgeVBvczogc2ltcGxpZmllZEhvcml6b250YWxCYXJzW3lJbmRleF1beEluZGV4XS55UG9zICsgeU9mZnNldCxcbiAgICAgICAgICB4UG9zOiBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnNbeUluZGV4XVt4SW5kZXhdLnhQb3MgKyB4T2Zmc2V0LFxuICAgICAgICAgIGFuY2hvcjogYmFySXNOZWdhdGl2ZSA/ICdlbmQnIDogJ3N0YXJ0JyxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN1YkxhYmVscztcbiAgICB9KTtcbiAgICBpZiAoc3VwcFlzKSB7XG4gICAgICBjb25zdCBzdXBwRGF0YUxhYmVsczogRGF0YUxhYmVsW10gPSBzdXBwWXMuZmxhdE1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YkxhYmVsczogRGF0YUxhYmVsW10gPSB5LnZhbHVlcy5tYXAoKHZhbCwgeEluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFySXNOZWdhdGl2ZSA9XG4gICAgICAgICAgICBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzW3lJbmRleF1beEluZGV4XS54UG9zIDxcbiAgICAgICAgICAgICAgemVyb0F4aXNQb3NWYWwgJiZcbiAgICAgICAgICAgIHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnNbeUluZGV4XVt4SW5kZXhdLndpZHRoID4gMDtcbiAgICAgICAgICBjb25zdCB4T2Zmc2V0ID0gYmFySXNOZWdhdGl2ZVxuICAgICAgICAgICAgPyAtY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZ1xuICAgICAgICAgICAgOiBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzW3lJbmRleF1beEluZGV4XS53aWR0aCArXG4gICAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmc7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJyxcbiAgICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgICBwaXBlVHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgeEluZGV4LCB0cnVlKSxcbiAgICAgICAgICAgICAgKSA/PyAnJyxcbiAgICAgICAgICAgIHlQb3M6IHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnNbeUluZGV4XVt4SW5kZXhdLnlQb3MgKyB5T2Zmc2V0LFxuICAgICAgICAgICAgeFBvczogc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ueFBvcyArIHhPZmZzZXQsXG4gICAgICAgICAgICBhbmNob3I6IGJhcklzTmVnYXRpdmUgPyAnZW5kJyA6ICdzdGFydCcsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJMYWJlbHM7XG4gICAgICB9KTtcbiAgICAgIGRhdGFMYWJlbHMucHVzaCguLi5zdXBwRGF0YUxhYmVscyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaG92ZXIocG9zOiB7XG4gICAgICByZWN0OiBET01SZWN0O1xuICAgICAgeDogbnVtYmVyO1xuICAgICAgeTogbnVtYmVyO1xuICAgICAgY29udGFpbmVyU2Nyb2xsWDogbnVtYmVyO1xuICAgICAgY29udGFpbmVyU2Nyb2xsWTogbnVtYmVyO1xuICAgIH0pOiBIb3ZlclJldHVybiB7XG4gICAgICBjb25zdCByZWFsUG9zWCA9IHBvcy54ICsgcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICBjb25zdCByZWFsUG9zWSA9IHBvcy55ICsgcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsIHx8XG4gICAgICAgIGdldElmSG92ZXJPdXRPZkJvdW5kcyhcbiAgICAgICAgICBwb3MueCxcbiAgICAgICAgICBwb3MueSxcbiAgICAgICAgICByZWFsUG9zWCxcbiAgICAgICAgICByZWFsUG9zWSxcbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1cHBZcyA9IGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpID8gZGF0YS5zdXBwbGVtZW50YXJ5WXMgOiBudWxsO1xuICAgICAgY29uc3QgeEhvdmVySW5kaWNlcyA9IGdldEJ1Y2tldEFuZENsdXN0ZXJOdW1Gb3JIb3ZlcihcbiAgICAgICAgcmVhbFBvc1ksXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGRhdGEueC5sZW5ndGgsXG4gICAgICApO1xuICAgICAgaWYgKCF4SG92ZXJJbmRpY2VzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICBidWNrZXROdW06IHhJbmRleCxcbiAgICAgICAgY2x1c3Rlck51bSxcbiAgICAgICAgY2x1c3Rlck5vcm1Db3VudCxcbiAgICAgICAgY2x1c3Rlck51bVR5cGUsXG4gICAgICB9ID0geEhvdmVySW5kaWNlcztcblxuICAgICAgbGV0IHggPSBjYWxjdWxhdGVCYXJQb3NpdGlvbihcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgeEluZGV4LFxuICAgICAgICBjbHVzdGVyTnVtLFxuICAgICAgKTtcbiAgICAgIGxldCBpc1N1cHBWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgbGV0IHN1cHBJbmRleFZhbCA9IDA7XG4gICAgICBpZiAoc3VwcFlzKSB7XG4gICAgICAgIHN1cHBJbmRleFZhbCA9IGNsdXN0ZXJOdW0gLSBjbHVzdGVyTm9ybUNvdW50O1xuICAgICAgICBpZiAoY2x1c3Rlck51bVR5cGUgPT09ICdzdXBwJykge1xuICAgICAgICAgIGlzU3VwcFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBXaGVuIGhvdmVyaW5nIHN1cHBsZW1lbnRhcnkgdmFsdWVzLCBnZXQgYmFycyBmb3IgdGhhdCBzdXBwbGVtZW50YWwgbGF5ZXJcbiAgICAgIC8vIFdoZW4gaG92ZXJpbmcgb3JpZ2luYWwgWXMsIGdldCBiYXJzIGZvciBvcmlnaW5hbCBZc1xuICAgICAgY29uc3QgZnVsbFlzID1cbiAgICAgICAgaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgJiYgaXNTdXBwVmFsdWVcbiAgICAgICAgICA/IChcbiAgICAgICAgICAgICAgZGF0YS5zdXBwbGVtZW50YXJ5WXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIHMgPT4gcy5zdXBwbGVtZW50YWxJbmRleCA9PT0gc3VwcEluZGV4VmFsLFxuICAgICAgICAgICAgICApID8/IFtdXG4gICAgICAgICAgICApLm1hcChzdXBwWSA9PlxuICAgICAgICAgICAgICBnZXRCYXJYSW5mbyhcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICBkYXRhLnN1cHBsZW1lbnRhcnlZcy5pbmRleE9mKHN1cHBZKSxcbiAgICAgICAgICAgICAgICB4SW5kZXgsXG4gICAgICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGRhdGEueXMubWFwKChfLCBtYXBZSW5kZXgpID0+XG4gICAgICAgICAgICAgIGdldEJhclhJbmZvKGRhdGEsIGNvbmZpZywgbWFwWUluZGV4LCB4SW5kZXgsIHNjYWxlKSxcbiAgICAgICAgICAgICk7XG4gICAgICBjb25zdCB5cyA9IGZ1bGxZcy5tYXAoeSA9PiB5LnhWYWx1ZSk7XG4gICAgICBsZXQgdmlzaWJsZVlJbmRleCA9IC0xO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmdWxsWXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbGVmdEJvcmRlciA9IGZ1bGxZc1tpXS54VmFsdWU7XG4gICAgICAgIGNvbnN0IHJpZ2h0Qm9yZGVyQ2FuZGlkYXRlcyA9IGZ1bGxZc1xuICAgICAgICAgIC5maWx0ZXIoeSA9PiB5LnhWYWx1ZSA+IGxlZnRCb3JkZXIpXG4gICAgICAgICAgLm1hcCh5ID0+IHkueFZhbHVlKTtcbiAgICAgICAgY29uc3QgcmlnaHRCb3JkZXIgPVxuICAgICAgICAgIHJpZ2h0Qm9yZGVyQ2FuZGlkYXRlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IE1hdGgubWluKC4uLnJpZ2h0Qm9yZGVyQ2FuZGlkYXRlcylcbiAgICAgICAgICAgIDogbGVmdEJvcmRlciArIGZ1bGxZc1tpXS53aWR0aDtcbiAgICAgICAgaWYgKHJlYWxQb3NYID4gbGVmdEJvcmRlciAmJiByZWFsUG9zWCA8IHJpZ2h0Qm9yZGVyKSB7XG4gICAgICAgICAgdmlzaWJsZVlJbmRleCA9IGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0NsdXN0ZXJlZERhdGEoZGF0YSwgY29uZmlnLCBmYWxzZSkpIHtcbiAgICAgICAgdmlzaWJsZVlJbmRleCA9IGNsdXN0ZXJOdW07XG4gICAgICB9XG5cbiAgICAgIGlmICh2aXNpYmxlWUluZGV4ID09PSAtMSkge1xuICAgICAgICBpZiAocmVhbFBvc1ggPj0gemVyb0F4aXNQb3NWYWwpIHtcbiAgICAgICAgICB2aXNpYmxlWUluZGV4ID0geXMuaW5kZXhPZihNYXRoLm1heCguLi55cykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpc2libGVZSW5kZXggPSB5cy5pbmRleE9mKE1hdGgubWluKC4uLnlzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEZvciBzdXBwbGVtZW50YXJ5IGJhcnM6IHZpc2libGVZSW5kZXggaXMgaW5kZXggd2l0aGluIGZpbHRlcmVkIHN1cHBsZW1lbnRhcnkgYXJyYXlcbiAgICAgIC8vIEZvciBvcmlnaW5hbCBZczogdmlzaWJsZVlJbmRleCBpcyBpbmRleCB3aXRoaW4gb3JpZ2luYWwgWXMgYXJyYXlcbiAgICAgIGNvbnN0IGFjdHVhbFN1cHBZSW5kZXggPVxuICAgICAgICBoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSAmJiBpc1N1cHBWYWx1ZVxuICAgICAgICAgID8gZGF0YS5zdXBwbGVtZW50YXJ5WXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICBzID0+XG4gICAgICAgICAgICAgICAgcy5zdXBwbGVtZW50YWxJbmRleCA9PT0gc3VwcEluZGV4VmFsICYmXG4gICAgICAgICAgICAgICAgZGF0YS5zdXBwbGVtZW50YXJ5WXNcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoczIgPT4gczIuc3VwcGxlbWVudGFsSW5kZXggPT09IHN1cHBJbmRleFZhbClcbiAgICAgICAgICAgICAgICAgIC5pbmRleE9mKHMpID09PSB2aXNpYmxlWUluZGV4LFxuICAgICAgICAgICAgKSA/PyAtMVxuICAgICAgICAgIDogLTE7XG5cbiAgICAgIGNvbnN0IHlJbmRleCA9IGlzU3VwcFZhbHVlID8gMCA6IHZpc2libGVJbmRpY2VzW3Zpc2libGVZSW5kZXhdO1xuXG4gICAgICAvL0NoZWNrIGlmIHdlJ3ZlIGxhbmRlZCBvbiBhIHplcm8td2lkdGggYmFyIChvbmx5IHJlYWxseSByZWxldmFudCBvbiBlbmRzKVxuICAgICAgY29uc3QgYmFyc1RvQ2hlY2sgPSBpc1N1cHBWYWx1ZVxuICAgICAgICA/IHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnNcbiAgICAgICAgOiBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnM7XG4gICAgICBjb25zdCBiYXJJbmRleFRvQ2hlY2sgPSBpc1N1cHBWYWx1ZSA/IGFjdHVhbFN1cHBZSW5kZXggOiB2aXNpYmxlWUluZGV4O1xuXG4gICAgICBpZiAoXG4gICAgICAgIGJhckluZGV4VG9DaGVjayA+PSAwICYmXG4gICAgICAgIGJhcnNUb0NoZWNrW2JhckluZGV4VG9DaGVja11beEluZGV4XS53aWR0aCA9PT0gMCAmJlxuICAgICAgICBpc1N0YWNrZWREYXRhKGNvbmZpZylcbiAgICAgICkge1xuICAgICAgICBsZXQgYWx0QmFyRm91bmQgPSBmYWxzZTtcbiAgICAgICAgLy9DaGVjayB1cHdhcmRzXG4gICAgICAgIGZvciAobGV0IGkgPSBiYXJJbmRleFRvQ2hlY2sgKyAxOyBpIDwgYmFyc1RvQ2hlY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoYWx0QmFyRm91bmQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmFyc1RvQ2hlY2tbaV1beEluZGV4XS53aWR0aCAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpICYmIGlzU3VwcFZhbHVlKSB7XG4gICAgICAgICAgICAgIHZpc2libGVZSW5kZXggPSBkYXRhLnN1cHBsZW1lbnRhcnlZc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIocyA9PiBzLnN1cHBsZW1lbnRhbEluZGV4ID09PSBzdXBwSW5kZXhWYWwpXG4gICAgICAgICAgICAgICAgLmluZGV4T2YoZGF0YS5zdXBwbGVtZW50YXJ5WXNbaV0pITtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZpc2libGVZSW5kZXggPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWx0QmFyRm91bmQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vQ2hlY2sgZG93bndhcmRzXG4gICAgICAgIGZvciAobGV0IGkgPSBiYXJJbmRleFRvQ2hlY2sgLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChhbHRCYXJGb3VuZCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChiYXJzVG9DaGVja1tpXVt4SW5kZXhdLndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgJiYgaXNTdXBwVmFsdWUpIHtcbiAgICAgICAgICAgICAgdmlzaWJsZVlJbmRleCA9IGRhdGEuc3VwcGxlbWVudGFyeVlzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihzID0+IHMuc3VwcGxlbWVudGFsSW5kZXggPT09IHN1cHBJbmRleFZhbClcbiAgICAgICAgICAgICAgICAuaW5kZXhPZihkYXRhLnN1cHBsZW1lbnRhcnlZc1tpXSkhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmlzaWJsZVlJbmRleCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbHRCYXJGb3VuZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsU3VwcFlJbmRleCA9XG4gICAgICAgIGlzU3VwcFZhbHVlICYmIGFjdHVhbFN1cHBZSW5kZXggPj0gMFxuICAgICAgICAgID8gdmlzaWJsZVN1cHBJbmRpY2VzW2FjdHVhbFN1cHBZSW5kZXhdXG4gICAgICAgICAgOiAtMTtcblxuICAgICAgY29uc3QgYmFyWFBvcyA9IGlzU3VwcFZhbHVlXG4gICAgICAgID8gc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFyc1thY3R1YWxTdXBwWUluZGV4XVt4SW5kZXhdLnhQb3NcbiAgICAgICAgOiBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnNbdmlzaWJsZVlJbmRleF1beEluZGV4XS54UG9zO1xuICAgICAgY29uc3QgYmFyWVBvcyA9IGlzU3VwcFZhbHVlXG4gICAgICAgID8gc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFyc1thY3R1YWxTdXBwWUluZGV4XVt4SW5kZXhdLnlQb3NcbiAgICAgICAgOiBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnNbdmlzaWJsZVlJbmRleF1beEluZGV4XS55UG9zO1xuICAgICAgY29uc3QgYmFyV2lkdGggPSBpc1N1cHBWYWx1ZVxuICAgICAgICA/IHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnNbYWN0dWFsU3VwcFlJbmRleF1beEluZGV4XS53aWR0aFxuICAgICAgICA6IHNpbXBsaWZpZWRIb3Jpem9udGFsQmFyc1t2aXNpYmxlWUluZGV4XVt4SW5kZXhdLndpZHRoO1xuXG4gICAgICBjb25zdCBsb2NhbEFuY2hvclggPSBiYXJYUG9zIC0gcG9zLmNvbnRhaW5lclNjcm9sbFggLSBTTUFMTF9QQURESU5HO1xuICAgICAgY29uc3Qgd2lkdGggPSBiYXJXaWR0aCArIFNNQUxMX1BBRERJTkcgKiAyO1xuICAgICAgY29uc3QgbG9jYWxBbmNob3JZID0gYmFyWVBvcyAtIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZTtcbiAgICAgIGNvbnN0IHsgYW5jaG9yWCwgYW5jaG9yWSwgYW5jaG9yV2lkdGgsIGFuY2hvckhlaWdodCB9ID1cbiAgICAgICAgY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgICAgICAgIGxvY2FsQW5jaG9yWCxcbiAgICAgICAgICBsb2NhbEFuY2hvclksXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICk7XG4gICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgYW5jaG9yWCArIHBvcy5yZWN0LngsXG4gICAgICAgIGFuY2hvclkgKyBwb3MucmVjdC55LFxuICAgICAgICBhbmNob3JXaWR0aCxcbiAgICAgICAgYW5jaG9ySGVpZ2h0LFxuICAgICAgKTtcbiAgICAgIC8vV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgaW5kZXggZm9yIHRoZSBsYXRlciBjaGVja0lmU2Vjb25kYXJ5IGNhbGxcbiAgICAgIGNvbnN0IHlzRm9yTWV0cmljczoge1xuICAgICAgICBkYXRhOiBTdXBwbGVtZW50YXJ5RGF0YVkgfCBEYXRhWTtcbiAgICAgICAgb3JpZ2luYWxJbmRleDogbnVtYmVyO1xuICAgICAgfVtdID1cbiAgICAgICAgaXNTdXBwVmFsdWUgJiYgc3VwcFlzXG4gICAgICAgICAgPyBzdXBwWXNcbiAgICAgICAgICAgICAgLm1hcCgoc3VwcFksIGluZGV4KSA9PiAoeyBkYXRhOiBzdXBwWSwgb3JpZ2luYWxJbmRleDogaW5kZXggfSkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoc3VwcFkgPT4gc3VwcFkuZGF0YS5zdXBwbGVtZW50YWxJbmRleCA9PT0gc3VwcEluZGV4VmFsKVxuICAgICAgICAgIDogZGF0YS55cy5tYXAoKHksIGluZGV4KSA9PiAoeyBkYXRhOiB5LCBvcmlnaW5hbEluZGV4OiBpbmRleCB9KSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBob3ZlclR5cGU6ICdzdGFuZGFyZCcsXG4gICAgICAgIHgsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgeXMsXG4gICAgICAgIHlJbmRleCxcbiAgICAgICAgdmlzaWJsZVlJbmRleCxcbiAgICAgICAgLi4uKGlzU3VwcFZhbHVlICYmIG9yaWdpbmFsU3VwcFlJbmRleCA+PSAwXG4gICAgICAgICAgPyB7IGlzU3VwcFZhbHVlLCBzdXBwWUluZGV4OiBvcmlnaW5hbFN1cHBZSW5kZXggfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIGRhdGU6XG4gICAgICAgICAgICBkYXRhLnR5cGUgPT09ICdsYWJlbGVkJ1xuICAgICAgICAgICAgICA/IGRhdGEueFt4SW5kZXhdLmxhYmVsXG4gICAgICAgICAgICAgIDogdXRjRm9ybWF0KCclQiAlZCwgJVknKShuZXcgRGF0ZShkYXRhLnhbeEluZGV4XSkpLFxuICAgICAgICAgIG1ldHJpY3M6IHlzRm9yTWV0cmljc1xuICAgICAgICAgICAgLm1hcCh5ID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBnZXRDb2xvcih5LmRhdGEsIGNvbG9ySW5kaWNlcywgY29uZmlnLmNvbG9ycyksXG4gICAgICAgICAgICAgIGxhYmVsOiB5LmRhdGEubGFiZWwsXG4gICAgICAgICAgICAgIHBhdHRlcm46IHkuZGF0YS5wYXR0ZXJuLFxuICAgICAgICAgICAgICB2YWx1ZTogcGlwZVRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB5LmRhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5Lm9yaWdpbmFsSW5kZXgsIHhJbmRleCwgaXNTdXBwVmFsdWUpLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKF8sIGkpID0+IGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYXJ0V2lkdGg6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsV2lkdGgsXG4gICAgICBjaGFydEhlaWdodDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxIZWlnaHQsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgIHhUaWNrczogeFRpY2tzLFxuICAgICAgeVRpY2tzOiB5VGlja3MsXG4gICAgICBob3ZlcixcbiAgICAgIGNvbG9ycyxcbiAgICAgIGJhcnM6IFtdLFxuICAgICAgbGluZXM6IFtdLFxuICAgICAgY2lyY2xlczogW10sXG4gICAgICBhcmVhczogW10sXG4gICAgICBhcmNzOiBbXSxcbiAgICAgIGhvcml6b250YWxCYXJzLFxuICAgICAgZGF0YUxhYmVscyxcbiAgICAgIHdhdGVyZmFsbExpbmVzOiBbXSxcbiAgICAgIGdyYWRpZW50czogW10sXG4gICAgICBmbG93Q29ubmVjdGlvbnM6IFtdLFxuICAgICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGUsXG4gICAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlLFxuICAgICAgY2hhcnRFcnJvcjogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYXJjcyhcbiAgICBjb25maWc6IERvbnV0Q29uZmlnLFxuICAgIGFsbERhdGE6IElucHV0RGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBpZiAoIXdhcm5GbG93RGF0YShhbGxEYXRhLCAnZG9udXQnKSkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ2NvbmZpZycgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY29uZmlnLnNlY29uZGFyeVZhbHVlVHlwZSAmJlxuICAgICAgKGNvbmZpZy52YWx1ZVR5cGUgPT09ICdwZXJjZW50YWdlJyB8fFxuICAgICAgICBjb25maWcuc2Vjb25kYXJ5VmFsdWVUeXBlID09PSAncGVyY2VudGFnZScpXG4gICAgKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBUd28gYXhlcyB3aXRoIHBlcmNlbnRhZ2UgYXJlbid0IHN1cHBvcnRlZCBmb3IgZG9udXQgY2hhcnRzXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YShhbGxEYXRhKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgU3VwcGxlbWVudGFyeSB5IHZhbHVlcyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBub24tYmFyIGNoYXJ0c1wiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICB3YXJuVW5zdXBwb3J0ZWRQYXR0ZXJucyhhbGxEYXRhLCBbXSwgJ2RvbnV0Jyk7XG4gICAgY29uc3QgeyBkYXRhOiB1bnN0YWNrZWREYXRhLCB2aXNpYmxlSW5kaWNlcyB9ID0gaGlkZShhbGxEYXRhKTtcbiAgICBjb25zdCBkb251dERhdGEgPSBDaGFydC5jb252ZXJ0Q2hhcnREYXRhVG9Eb251dERhdGEodW5zdGFja2VkRGF0YSk7XG4gICAgY29uc3QgaGFzTm9uWmVyb1ZhbHVlID0gZG9udXREYXRhLnNvbWUoZCA9PiBkLnZhbHVlID4gMCk7XG4gICAgY29uc3QgYXJjRGF0YSA9IGhhc05vblplcm9WYWx1ZVxuICAgICAgPyBkb251dERhdGFcbiAgICAgIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgY29uc3QgY29sb3JzID0gaGFzTm9uWmVyb1ZhbHVlXG4gICAgICA/IHZpc2libGVJbmRpY2VzLm1hcChpID0+IGNvbmZpZy5jb2xvcnNbaSAlIGNvbmZpZy5jb2xvcnMubGVuZ3RoXSlcbiAgICAgIDogWyctLWdyYXktMzAnXTtcbiAgICBjb25zdCB7IHBpcGVUcmFuc2Zvcm0gfSA9IGdldEZvcm1hdHRpbmdBbmRDb2xvcnMoXG4gICAgICBhbGxEYXRhLFxuICAgICAgdW5zdGFja2VkRGF0YSxcbiAgICAgIGNvbmZpZyxcbiAgICApO1xuXG4gICAgY29uc3QgZG9udXREZWZhdWx0Q29uZmlnID0gRGVmYXVsdERvbnV0U2l6aW5nQ29uZmlnO1xuICAgIGNvbnN0IGRhdGFMYWJlbFBhZGRpbmdDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBjb25maWcuZG9udXREaXNwbGF5SW5mby5zY2FsaW5nQ29uZmlnPy5lbGVtZW50U2NhbGVzLFxuICAgICAgZG9udXREZWZhdWx0Q29uZmlnLmVsZW1lbnRTY2FsZXMsXG4gICAgICAnZGF0YUxhYmVsUGFkZGluZycsXG4gICAgKTtcbiAgICBjb25zdCBmb250U2l6ZUNvbmZpZyA9IGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICAgIGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWc/LmVsZW1lbnRTY2FsZXMsXG4gICAgICBkb251dERlZmF1bHRDb25maWcuZWxlbWVudFNjYWxlcyxcbiAgICAgICdmb250U2l6ZScsXG4gICAgKTtcbiAgICBjb25zdCBkYXRhTGFiZWxUZXh0U2l6aW5nID0gZ2V0RGF0YUxhYmVsU2l6ZShcbiAgICAgIHVuc3RhY2tlZERhdGEsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgZm9udFNpemVDb25maWcudGFyZ2V0LFxuICAgICk7XG5cbiAgICBjb25zdCBob3Jpem9udGFsQ29udGFpbmVyU2NhbGUgPVxuICAgICAgY29uZmlnLmRvbnV0RGlzcGxheUluZm8uc2NhbGluZ0NvbmZpZz8uaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlICE9PVxuICAgICAgdW5kZWZpbmVkXG4gICAgICAgID8gY29uZmlnLmRvbnV0RGlzcGxheUluZm8uc2NhbGluZ0NvbmZpZy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGVcbiAgICAgICAgOiBkb251dERlZmF1bHRDb25maWcuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlO1xuICAgIGNvbnN0IHZlcnRpY2FsQ29udGFpbmVyU2NhbGUgPVxuICAgICAgY29uZmlnLmRvbnV0RGlzcGxheUluZm8uc2NhbGluZ0NvbmZpZz8udmVydGljYWxDb250YWluZXJTY2FsZSAhPT1cbiAgICAgIHVuZGVmaW5lZFxuICAgICAgICA/IGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWcudmVydGljYWxDb250YWluZXJTY2FsZVxuICAgICAgICA6IGRvbnV0RGVmYXVsdENvbmZpZy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlO1xuICAgIGNvbnN0IG91dGVyUmFkaXVzQ29uZmlnID1cbiAgICAgIGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWc/Lm91dGVyUmFkaXVzICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBjb25maWcuZG9udXREaXNwbGF5SW5mby5zY2FsaW5nQ29uZmlnLm91dGVyUmFkaXVzXG4gICAgICAgIDogZG9udXREZWZhdWx0Q29uZmlnLm91dGVyUmFkaXVzO1xuICAgIGNvbnN0IGRyYXdSYWRpdXNDb25maWcgPVxuICAgICAgY29uZmlnLmRvbnV0RGlzcGxheUluZm8uc2NhbGluZ0NvbmZpZz8uZHJhd1JhZGl1cyAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gY29uZmlnLmRvbnV0RGlzcGxheUluZm8uc2NhbGluZ0NvbmZpZy5kcmF3UmFkaXVzXG4gICAgICAgIDogZG9udXREZWZhdWx0Q29uZmlnLmRyYXdSYWRpdXM7XG5cbiAgICBjb25zdCBvdXRlciA9XG4gICAgICBvdXRlclJhZGl1c0NvbmZpZy50eXBlID09PSAncHJvcG9ydGlvbidcbiAgICAgICAgPyAoZGltZW5zaW9ucy5oZWlnaHQgLyAyKSAqIG91dGVyUmFkaXVzQ29uZmlnLnZhbHVlXG4gICAgICAgIDogb3V0ZXJSYWRpdXNDb25maWcudmFsdWU7XG4gICAgY29uc3QgZHJhd1JhZGl1cyA9XG4gICAgICBkcmF3UmFkaXVzQ29uZmlnLnR5cGUgPT09ICdwcm9wb3J0aW9uJ1xuICAgICAgICA/IG91dGVyICogZHJhd1JhZGl1c0NvbmZpZy52YWx1ZVxuICAgICAgICA6IGRyYXdSYWRpdXNDb25maWcudmFsdWU7XG4gICAgY29uc3QgaW5uZXIgPSBvdXRlciAtIGRyYXdSYWRpdXM7XG5cbiAgICBjb25zdCBwaWVBcmNzID0gcGllPERvbnV0RGF0YT4oKVxuICAgICAgLnNvcnRWYWx1ZXMobnVsbClcbiAgICAgIC52YWx1ZShkID0+IE1hdGgubWF4KGQudmFsdWUsIDApKShhcmNEYXRhKTtcblxuICAgIGNvbnN0IGFyY3MgPSBwaWVBcmNzLm1hcChwaWVBcmMgPT5cbiAgICAgIGFyYzxEb251dERhdGE+KClcbiAgICAgICAgLmlubmVyUmFkaXVzKGlubmVyKVxuICAgICAgICAub3V0ZXJSYWRpdXMob3V0ZXIpXG4gICAgICAgIC5wYWRBbmdsZSgwLjAxMylcbiAgICAgICAgLnN0YXJ0QW5nbGUocGllQXJjLnN0YXJ0QW5nbGUpXG4gICAgICAgIC5lbmRBbmdsZShwaWVBcmMuZW5kQW5nbGUpKHBpZUFyYy5kYXRhKSxcbiAgICApO1xuXG4gICAgY29uc3QgZGF0YUxhYmVsczogRGF0YUxhYmVsW10gPSBoYXNOb25aZXJvVmFsdWVcbiAgICAgID8gcGllQXJjcy5tYXAoYXJjID0+IHtcbiAgICAgICAgICAvL0Rvbid0IHNob3cgZGF0YSBsYWJlbHMgZm9yIHplcm8td2lkdGggZG9udXQgc2xpY2VzIChpbmNsdWRlcyBuZWdhdGl2ZSB2YWx1ZXMpXG4gICAgICAgICAgaWYgKGFyYy5zdGFydEFuZ2xlID09PSBhcmMuZW5kQW5nbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJyxcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICB5UG9zOiAwLFxuICAgICAgICAgICAgICB4UG9zOiAwLFxuICAgICAgICAgICAgICBhbmNob3I6ICdtaWRkbGUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYXJjQ2VudGVyQW5nbGUgPSAoYXJjLnN0YXJ0QW5nbGUgKyBhcmMuZW5kQW5nbGUpIC8gMjtcbiAgICAgICAgICBjb25zdCBlZGdlUG9pbnQgPSBhcmNUb1BvaW50KGFyY0NlbnRlckFuZ2xlLCBvdXRlcik7XG4gICAgICAgICAgY29uc3QgbGluZUVuZFBvaW50ID0gYXJjVG9Qb2ludChcbiAgICAgICAgICAgIGFyY0NlbnRlckFuZ2xlLFxuICAgICAgICAgICAgb3V0ZXIgKyBkYXRhTGFiZWxQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IG1pZGRsZUFyZWEgPSBvdXRlciAvIDQ7XG4gICAgICAgICAgbGV0IHlPZmZzZXQgPSAwO1xuICAgICAgICAgIGxldCB4T2Zmc2V0ID0gMDtcbiAgICAgICAgICBpZiAobGluZUVuZFBvaW50LnkgPiAwKSB7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobGluZUVuZFBvaW50LnkpIDwgbWlkZGxlQXJlYSkge1xuICAgICAgICAgICAgICB5T2Zmc2V0ID0gU01BTExfUEFERElORyAvIDI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB5T2Zmc2V0ID0gU01BTExfUEFERElORztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhsaW5lRW5kUG9pbnQueCkgPCBtaWRkbGVBcmVhKSB7XG4gICAgICAgICAgICAgIHlPZmZzZXQgKz0gU01BTExfUEFERElORyAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhsaW5lRW5kUG9pbnQueSkgPCBtaWRkbGVBcmVhKSB7XG4gICAgICAgICAgICAgIHlPZmZzZXQgPSBTTUFMTF9QQURESU5HIC8gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhsaW5lRW5kUG9pbnQueCkgPCBtaWRkbGVBcmVhKSB7XG4gICAgICAgICAgICAgIHlPZmZzZXQgLT0gU01BTExfUEFERElORyAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCcsXG4gICAgICAgICAgICBsYWJlbDogcGlwZVRyYW5zZm9ybShhcmMuZGF0YS52YWx1ZSwgYXJjLmRhdGEuaXNTZWNvbmRhcnkpLFxuICAgICAgICAgICAgeVBvczogbGluZUVuZFBvaW50LnkgKyB5T2Zmc2V0LFxuICAgICAgICAgICAgeFBvczogbGluZUVuZFBvaW50LnggKyB4T2Zmc2V0LFxuICAgICAgICAgICAgYW5jaG9yOlxuICAgICAgICAgICAgICBNYXRoLmFicyhsaW5lRW5kUG9pbnQueCkgPCBtaWRkbGVBcmVhXG4gICAgICAgICAgICAgICAgPyAnbWlkZGxlJ1xuICAgICAgICAgICAgICAgIDogbGluZUVuZFBvaW50LnggPCAwXG4gICAgICAgICAgICAgICAgPyAnZW5kJ1xuICAgICAgICAgICAgICAgIDogJ3N0YXJ0JyxcbiAgICAgICAgICAgIGxpbmU6IHtcbiAgICAgICAgICAgICAgeDE6IGVkZ2VQb2ludC54LFxuICAgICAgICAgICAgICB5MTogZWRnZVBvaW50LnksXG4gICAgICAgICAgICAgIHgyOiBsaW5lRW5kUG9pbnQueCxcbiAgICAgICAgICAgICAgeTI6IGxpbmVFbmRQb2ludC55LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgOiBbXTtcblxuICAgIGNvbnN0IGRyYXdXaWR0aCA9XG4gICAgICAob3V0ZXIgK1xuICAgICAgICAoY29uZmlnLnNob3dEYXRhTGFiZWxzXG4gICAgICAgICAgPyBkYXRhTGFiZWxQYWRkaW5nQ29uZmlnLnRhcmdldCArIGRhdGFMYWJlbFRleHRTaXppbmcuaG9yaXpvbnRhbFxuICAgICAgICAgIDogMCkpICpcbiAgICAgIDI7XG4gICAgY29uc3QgZHJhd0hlaWdodCA9XG4gICAgICAob3V0ZXIgK1xuICAgICAgICAoY29uZmlnLnNob3dEYXRhTGFiZWxzXG4gICAgICAgICAgPyBkYXRhTGFiZWxQYWRkaW5nQ29uZmlnLnRhcmdldCArIGRhdGFMYWJlbFRleHRTaXppbmcudmVydGljYWxcbiAgICAgICAgICA6IDApKSAqXG4gICAgICAyO1xuXG4gICAgZnVuY3Rpb24gaG92ZXIocG9zOiB7XG4gICAgICByZWN0OiBET01SZWN0O1xuICAgICAgeDogbnVtYmVyO1xuICAgICAgeTogbnVtYmVyO1xuICAgICAgY29udGFpbmVyU2Nyb2xsWDogbnVtYmVyO1xuICAgICAgY29udGFpbmVyU2Nyb2xsWTogbnVtYmVyO1xuICAgIH0pOiBIb3ZlclJldHVybiB7XG4gICAgICBjb25zdCByZWFsUG9zWCA9IHBvcy54ICsgcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICBjb25zdCByZWFsUG9zWSA9IHBvcy55ICsgcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICBpZiAoXG4gICAgICAgIGdldElmSG92ZXJPdXRPZkJvdW5kcyhcbiAgICAgICAgICBwb3MueCxcbiAgICAgICAgICBwb3MueSxcbiAgICAgICAgICByZWFsUG9zWCxcbiAgICAgICAgICByZWFsUG9zWSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNlbnRlclBvaW50WCA9IGRpbWVuc2lvbnMud2lkdGggLyAyO1xuICAgICAgY29uc3QgY2VudGVyUG9pbnRZID0gZGltZW5zaW9ucy5oZWlnaHQgLyAyO1xuICAgICAgY29uc3QgZG9udXRQb3NpdGlvblggPSByZWFsUG9zWCAtIGNlbnRlclBvaW50WDtcbiAgICAgIGNvbnN0IGRvbnV0UG9zaXRpb25ZID0gcmVhbFBvc1kgLSBjZW50ZXJQb2ludFk7XG4gICAgICBjb25zdCBob3ZlclBvc0FyY0luZm8gPSBwb2ludFRvQXJjKGRvbnV0UG9zaXRpb25YLCBkb251dFBvc2l0aW9uWSk7XG4gICAgICBjb25zdCBhcmNDZW50ZXJMaW5lID0gKG91dGVyICsgaW5uZXIpIC8gMjtcblxuICAgICAgLy9EZXRlY3QgZG9udXQgc2xpY2VcbiAgICAgIGxldCBmb3VuZFlJbmRleCA9IC0xO1xuICAgICAgbGV0IHByZWZlcnJlZFBvc2l0aW9uOiBDYWxsb3V0Q29tcG9uZW50LkFuY2hvcmVkUG9zaXRpb24gfCB1bmRlZmluZWQgPVxuICAgICAgICB1bmRlZmluZWQ7XG4gICAgICBsZXQgZG9udXRYUG9zaXRpb24gPSAwO1xuICAgICAgbGV0IGRvbnV0WVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGllQXJjcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhcmMgPSBwaWVBcmNzW2ldO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBob3ZlclBvc0FyY0luZm8uYW5nbGUgPiBhcmMuc3RhcnRBbmdsZSAmJlxuICAgICAgICAgIGhvdmVyUG9zQXJjSW5mby5hbmdsZSA8IGFyYy5lbmRBbmdsZSAmJlxuICAgICAgICAgIGhvdmVyUG9zQXJjSW5mby5yYWRpdXMgPiBhcmNDZW50ZXJMaW5lIC0gZHJhd1JhZGl1cyAmJlxuICAgICAgICAgIGhvdmVyUG9zQXJjSW5mby5yYWRpdXMgPCBhcmNDZW50ZXJMaW5lICsgZHJhd1JhZGl1c1xuICAgICAgICApIHtcbiAgICAgICAgICBmb3VuZFlJbmRleCA9IGk7XG4gICAgICAgICAgY29uc3QgYXJjQ2VudGVyUG9pbnQgPSBhcmNUb1BvaW50KFxuICAgICAgICAgICAgKGFyYy5zdGFydEFuZ2xlICsgYXJjLmVuZEFuZ2xlKSAvIDIsXG4gICAgICAgICAgICBhcmNDZW50ZXJMaW5lLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvL05lZWQgdG8gdW4tb2Zmc2V0IHRoZSBwb3NpdGlvbnNcbiAgICAgICAgICBkb251dFhQb3NpdGlvbiA9IGFyY0NlbnRlclBvaW50LnggKyBjZW50ZXJQb2ludFg7XG4gICAgICAgICAgZG9udXRZUG9zaXRpb24gPSBhcmNDZW50ZXJQb2ludC55ICsgY2VudGVyUG9pbnRZO1xuICAgICAgICAgIGNvbnN0IHZlcnRpY2FsQXJlYSA9XG4gICAgICAgICAgICBhcmNDZW50ZXJQb2ludC55IDwgKGRpbWVuc2lvbnMuaGVpZ2h0ICogLTEpIC8gNFxuICAgICAgICAgICAgICA/ICd0b3AnXG4gICAgICAgICAgICAgIDogYXJjQ2VudGVyUG9pbnQueSA+IGRpbWVuc2lvbnMuaGVpZ2h0IC8gNFxuICAgICAgICAgICAgICA/ICdib3R0b20nXG4gICAgICAgICAgICAgIDogJ2NlbnRlcic7XG5cbiAgICAgICAgICAvL0RldGVybWluZSB0aGUgYmVzdCBwb3NpdGlvbiBmb3IgdGhlIHRvb2x0aXBcbiAgICAgICAgICBpZiAoYXJjQ2VudGVyUG9pbnQueCA+IDApIHtcbiAgICAgICAgICAgIC8vUmlnaHQgcGF0aFxuICAgICAgICAgICAgaWYgKCFjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgdmVydGljYWxBcmVhID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbiA9ICdjZW50ZXItcmlnaHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2ZXJ0aWNhbEFyZWEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgIHByZWZlcnJlZFBvc2l0aW9uID0gJ3JpZ2h0LXRvcCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQXJlYSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgICAgcHJlZmVycmVkUG9zaXRpb24gPSAncmlnaHQtYm90dG9tJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy9MZWZ0IHBhdGhcbiAgICAgICAgICAgIGlmICghY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IHZlcnRpY2FsQXJlYSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgcHJlZmVycmVkUG9zaXRpb24gPSAnY2VudGVyLWxlZnQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2ZXJ0aWNhbEFyZWEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgIHByZWZlcnJlZFBvc2l0aW9uID0gJ2xlZnQtdG9wJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmVydGljYWxBcmVhID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbiA9ICdsZWZ0LWJvdHRvbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRZSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKCFoYXNOb25aZXJvVmFsdWUpIHtcbiAgICAgICAgZG9udXRYUG9zaXRpb24gPSBjZW50ZXJQb2ludFggKyBhcmNDZW50ZXJMaW5lO1xuICAgICAgICBkb251dFlQb3NpdGlvbiA9IGNlbnRlclBvaW50WTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9jYWxBbmNob3JYID0gZG9udXRYUG9zaXRpb24gLSBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWSA9IGRvbnV0WVBvc2l0aW9uIC0gcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICBjb25zdCB7IGFuY2hvclgsIGFuY2hvclkgfSA9IGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICAgICAgbG9jYWxBbmNob3JYLFxuICAgICAgICBsb2NhbEFuY2hvclksXG4gICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICApO1xuICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgIGFuY2hvclggKyBwb3MucmVjdC54LFxuICAgICAgICBhbmNob3JZICsgcG9zLnJlY3QueSxcbiAgICAgICAgU01BTExfUEFERElORyxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBob3ZlclR5cGU6ICdzdGFuZGFyZCcsXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgcHJlZmVycmVkUG9zaXRpb24sXG4gICAgICAgICAgZGF0ZTogbnVsbCxcbiAgICAgICAgICBtZXRyaWNzOiBkb251dERhdGFcbiAgICAgICAgICAgIC5tYXAoKHksIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICBjb2xvcjogY29sb3JzW2luZGV4ICUgY29sb3JzLmxlbmd0aF0sXG4gICAgICAgICAgICAgIGxhYmVsOiB5LmxhYmVsLFxuICAgICAgICAgICAgICB2YWx1ZTogcGlwZVRyYW5zZm9ybSh5LnZhbHVlLCB5LmlzU2Vjb25kYXJ5LCB0cnVlKSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLmZpbHRlcigoXywgaSkgPT4gY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IGkgPT09IGZvdW5kWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgICAgLy9Ob3QgdXNlZCBieSBkb251dCBjaGFydHNcbiAgICAgICAgeDogMCxcbiAgICAgICAgeEluZGV4OiAwLFxuICAgICAgICB5czogW10sXG4gICAgICAgIHlJbmRleDogMCxcbiAgICAgICAgdmlzaWJsZVlJbmRleDogMCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYXJ0V2lkdGg6IGRyYXdXaWR0aCxcbiAgICAgIGNoYXJ0SGVpZ2h0OiBkcmF3SGVpZ2h0LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXM6IHtcbiAgICAgICAgLi4uZW1wdHlDaGFydFNjYWxlVmFsdWVzLFxuICAgICAgICBkYXRhTGFiZWxQYWRkaW5nOiBkYXRhTGFiZWxQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgICAgZGF0YUxhYmVsVGV4dFNpemU6IGRhdGFMYWJlbFRleHRTaXppbmcuaG9yaXpvbnRhbCxcbiAgICAgICAgZm9udFNpemU6IGZvbnRTaXplQ29uZmlnLnRhcmdldCxcbiAgICAgIH0sXG4gICAgICB4VGlja3M6IFtdLFxuICAgICAgeVRpY2tzOiBbXSxcbiAgICAgIGFyZWFzOiBbXSxcbiAgICAgIGxpbmVzOiBbXSxcbiAgICAgIGNpcmNsZXM6IFtdLFxuICAgICAgYmFyczogW10sXG4gICAgICBjb2xvcnMsXG4gICAgICBhcmNzLFxuICAgICAgaG9yaXpvbnRhbEJhcnM6IFtdLFxuICAgICAgZGF0YUxhYmVscyxcbiAgICAgIHdhdGVyZmFsbExpbmVzOiBbXSxcbiAgICAgIGdyYWRpZW50czogW10sXG4gICAgICBmbG93Q29ubmVjdGlvbnM6IFtdLFxuICAgICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlLFxuICAgICAgdmVydGljYWxDb250YWluZXJTY2FsZSxcbiAgICAgIGNoYXJ0RXJyb3I6IG51bGwsXG4gICAgICBob3ZlcixcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZmxvd3MoXG4gICAgY29uZmlnOiBGbG93Q29uZmlnLFxuICAgIGFsbERhdGE6IElucHV0RGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBpZiAoYWxsRGF0YS50eXBlICE9PSAnZmxvdycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBIZWFkcyB1cCEgVGhlICcke2FsbERhdGEudHlwZX0nIGRhdGEgdHlwZSBpc24ndCBzdXBwb3J0ZWQgZm9yIGZsb3cgY2hhcnRzLmAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ2NvbmZpZycgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gZmxvd3NUcmFuc2Zvcm0oY29uZmlnLCBhbGxEYXRhKTtcbiAgICBpZiAoZGF0YS54Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIGNvbnN0IG92ZXJhbGxUb3RhbCA9IGRhdGEueFswXS50b3RhbENvdW50O1xuXG4gICAgY29uc3QgY2hhcnRTaXppbmdWYWx1ZXMgPSBnZXRGdWxsQ2hhcnRTY2FsZVZhbHVlcyhcbiAgICAgIGNvbmZpZyxcbiAgICAgIGRhdGEsXG4gICAgICBkaW1lbnNpb25zLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGwsXG4gICAgKTtcbiAgICBpZiAoY2hhcnRTaXppbmdWYWx1ZXMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdzaXppbmcnIH07XG4gICAgfVxuXG4gICAgY29uc3QgeyBzY2FsZSB9ID0gY2FsY0RhdGFBeGlzU2NhbGVzQW5kVGlja3MoXG4gICAgICBkYXRhLFxuICAgICAgbnVsbCxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICk7XG4gICAgY29uc3QgdmFsdWVQaXBlcyA9IGdldFBpcGVzKGNvbmZpZy52YWx1ZVR5cGUpO1xuICAgIGNvbnN0IHBlcmNlbnRQaXBlcyA9IGdldFBpcGVzKCdwZXJjZW50YWdlJyk7XG5cbiAgICBjb25zdCBiYXJzOiBGbG93UmVjdFtdW10gPSBbXTtcbiAgICBjb25zdCBmbG93Q29ubmVjdGlvbnM6IEZsb3dDb25uZWN0aW9uUmVuZGVyW10gPSBbXTtcbiAgICBjb25zdCBkYXRhTGFiZWxzOiBGbG93RGF0YUxhYmVsW10gPSBbXTtcbiAgICBjb25zdCBtaW5pbXVtU2l6ZSA9IGdldE1pbmltdW1EYXRhRWxlbWVudFNpemUoY29uZmlnKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYnVja2V0QmFyczogRmxvd1JlY3RbXSA9IFtdO1xuICAgICAgbGV0IHJ1bm5pbmdIZWlnaHQgPSAwO1xuICAgICAgZm9yIChjb25zdCBiYXIgb2YgZGF0YS54W2ldLnN1YkJ1Y2tldHMpIHtcbiAgICAgICAgY29uc3QgY29udGludWluZ0NvdW50ID0gYmFyLmNvbm5lY3Rpb25zXG4gICAgICAgICAgLmZpbHRlcihjb25uZWN0aW9uID0+IGNvbm5lY3Rpb24uZGlyZWN0aW9uID09PSAnZm9yd2FyZCcpXG4gICAgICAgICAgLm1hcChjb25uZWN0aW9uID0+IGNvbm5lY3Rpb24uY291bnQpXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgdG90YWxTaXplOiB0b3RhbEhlaWdodCxcbiAgICAgICAgICBjb250aW51aW5nU2l6ZTogZGFya2VuZWRIZWlnaHQsXG4gICAgICAgICAgY29ubmVjdGlvblNpemVzLFxuICAgICAgICB9ID0gZ2V0Rmxvd1N1YkJ1Y2tldFNpemVzKFxuICAgICAgICAgIGJhcixcbiAgICAgICAgICB2YWx1ZSA9PiBzY2FsZSh2YWx1ZSwgZmFsc2UpIC0gY2hhcnRTaXppbmdWYWx1ZXMudG90YWxUb3BPZmZzZXQsXG4gICAgICAgICAgbWluaW11bVNpemUsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25IZWlnaHQgPSAoY29ubmVjdGlvbjogRmxvd0Nvbm5lY3Rpb24pOiBudW1iZXIgPT5cbiAgICAgICAgICBjb25uZWN0aW9uU2l6ZXNbYmFyLmNvbm5lY3Rpb25zLmluZGV4T2YoY29ubmVjdGlvbildO1xuICAgICAgICBjb25zdCBub25EYXJrZW5lZEhlaWdodCA9IHRvdGFsSGVpZ2h0IC0gZGFya2VuZWRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGRhcmtlbmVkWSA9IHJ1bm5pbmdIZWlnaHQgKyBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFRvcE9mZnNldDtcbiAgICAgICAgY29uc3Qgbm9uRGFya2VuZWRZID0gZGFya2VuZWRZICsgZGFya2VuZWRIZWlnaHQ7XG5cbiAgICAgICAgY29uc3Qgd2lkdGggPSBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplO1xuICAgICAgICBjb25zdCB4ID1cbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy50b3RhbExlZnRPZmZzZXQgK1xuICAgICAgICAgIGkgKiAoY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSArIGNoYXJ0U2l6aW5nVmFsdWVzLmJ1Y2tldEdhcCk7XG4gICAgICAgIGNvbnN0IGNvbG9yT3ZlcnJpZGUgPSBjb25maWcuZmxvd0NvbmZpZy5zdWJCdWNrZXRzQ29uZmlnLmZpbmQoXG4gICAgICAgICAgYmMgPT4gYmMuYnVja2V0SWQgPT09IGJhci5pZCxcbiAgICAgICAgKT8uY29sb3I7XG4gICAgICAgIGlmIChkYXJrZW5lZEhlaWdodCA+IDApIHtcbiAgICAgICAgICBidWNrZXRCYXJzLnB1c2goe1xuICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdyZWN0JyxcbiAgICAgICAgICAgIHJlY3RUeXBlOiAnZmxvdycsXG4gICAgICAgICAgICBoZWlnaHQ6IGRhcmtlbmVkSGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICB5OiBkYXJrZW5lZFksXG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgY29sb3JPdmVycmlkZSxcbiAgICAgICAgICAgIGRhcmtlbjogdHJ1ZSxcbiAgICAgICAgICAgIGRlRW1waGFzaXplOiBpc0RlRW1waGFzaXplZChjb25maWcsIGJhci5pZCwgdHJ1ZSksXG4gICAgICAgICAgICBpZDogYmFyLmlkLFxuICAgICAgICAgICAgYnVja2V0SW5kZXg6IGksXG4gICAgICAgICAgICBjb3VudDogY29udGludWluZ0NvdW50LFxuICAgICAgICAgICAgdG90YWxDb3VudDogYmFyLmNvdW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub25EYXJrZW5lZEhlaWdodCA+IDApIHtcbiAgICAgICAgICBidWNrZXRCYXJzLnB1c2goe1xuICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdyZWN0JyxcbiAgICAgICAgICAgIHJlY3RUeXBlOiAnZmxvdycsXG4gICAgICAgICAgICBoZWlnaHQ6IG5vbkRhcmtlbmVkSGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICB5OiBub25EYXJrZW5lZFksXG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgY29sb3JPdmVycmlkZSxcbiAgICAgICAgICAgIGRhcmtlbjogZmFsc2UsXG4gICAgICAgICAgICBkZUVtcGhhc2l6ZTogaXNEZUVtcGhhc2l6ZWQoY29uZmlnLCBiYXIuaWQsIGZhbHNlKSxcbiAgICAgICAgICAgIGlkOiBiYXIuaWQsXG4gICAgICAgICAgICBidWNrZXRJbmRleDogaSxcbiAgICAgICAgICAgIGNvdW50OiBiYXIuY291bnQgLSBjb250aW51aW5nQ291bnQsXG4gICAgICAgICAgICB0b3RhbENvdW50OiBiYXIuY291bnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy9JbnZpc2libGUgYmFyIGZvciBob3ZlciBoaWdobGlnaHQgcHVycG9zZXNcbiAgICAgICAgYnVja2V0QmFycy5wdXNoKHtcbiAgICAgICAgICBlbGVtZW50VHlwZTogJ3JlY3QnLFxuICAgICAgICAgIHJlY3RUeXBlOiAnZmxvdycsXG4gICAgICAgICAgaGVpZ2h0OiBkYXJrZW5lZEhlaWdodCArIG5vbkRhcmtlbmVkSGVpZ2h0LFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIHk6IGRhcmtlbmVkWSxcbiAgICAgICAgICB4LFxuICAgICAgICAgIG5vbkRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgaWQ6IGJhci5pZCxcbiAgICAgICAgICBidWNrZXRJbmRleDogaSxcbiAgICAgICAgICBjb3VudDogYmFyLmNvdW50LFxuICAgICAgICAgIHRvdGFsQ291bnQ6IGJhci5jb3VudCxcbiAgICAgICAgICBkYXJrZW46IGZhbHNlLFxuICAgICAgICAgIGRlRW1waGFzaXplOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJ1bm5pbmdIZWlnaHQgKz1cbiAgICAgICAgICB0b3RhbEhlaWdodCArXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZyArXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsVGV4dFNpemU7XG5cbiAgICAgICAgLy9Db25uZWN0aW9uc1xuICAgICAgICAvL0FkZCBuZXcgcmVuZGVycyBmb3IgZm9yd2FyZCBjb25uZWN0aW9uc1xuICAgICAgICBsZXQgdmVydGljYWxDb25uZWN0aW9uT2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBjb25uZWN0aW9uIG9mIGJhci5jb25uZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgY29ubmVjdGlvbiA9PiBjb25uZWN0aW9uLmRpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnLFxuICAgICAgICApKSB7XG4gICAgICAgICAgY29uc3QgdG9wTGluZVkxID0gZGFya2VuZWRZICsgdmVydGljYWxDb25uZWN0aW9uT2Zmc2V0O1xuICAgICAgICAgIGNvbnN0IGJvdHRvbUxpbmVZMSA9IHRvcExpbmVZMSArIGNvbm5lY3Rpb25IZWlnaHQoY29ubmVjdGlvbik7XG4gICAgICAgICAgY29uc3QgeDEgPSB4ICsgd2lkdGg7XG4gICAgICAgICAgY29uc3QgY29ubmVjdGlvblJlbmRlcjogRmxvd0Nvbm5lY3Rpb25SZW5kZXIgPSB7XG4gICAgICAgICAgICBlbGVtZW50VHlwZTogJ2Nvbm5lY3Rpb24nLFxuICAgICAgICAgICAgc3RhcnQ6IGNvbm5lY3Rpb24uc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGNvbm5lY3Rpb24uZW5kLFxuICAgICAgICAgICAgY291bnQ6IGNvbm5lY3Rpb24uY291bnQsXG4gICAgICAgICAgICBzdGVwOiBpLFxuICAgICAgICAgICAgdG9wTGluZToge1xuICAgICAgICAgICAgICB5MTogdG9wTGluZVkxLFxuICAgICAgICAgICAgICB4MSxcbiAgICAgICAgICAgICAgLy9UbyBiZSBmaWxsZWQgaW4gbGF0ZXJcbiAgICAgICAgICAgICAgeTI6IDAsXG4gICAgICAgICAgICAgIHgyOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvdHRvbUxpbmU6IHtcbiAgICAgICAgICAgICAgeTE6IGJvdHRvbUxpbmVZMSxcbiAgICAgICAgICAgICAgeDEsXG4gICAgICAgICAgICAgIC8vVG8gYmUgZmlsbGVkIGluIGxhdGVyXG4gICAgICAgICAgICAgIHkyOiAwLFxuICAgICAgICAgICAgICB4MjogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvL1RvIGJlIGZpbGxlZCBpbiBsYXRlclxuICAgICAgICAgICAgcGF0aDogJycsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB2ZXJ0aWNhbENvbm5lY3Rpb25PZmZzZXQgKz0gY29ubmVjdGlvbkhlaWdodChjb25uZWN0aW9uKTtcbiAgICAgICAgICBmbG93Q29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uUmVuZGVyKTtcbiAgICAgICAgfVxuICAgICAgICAvL0JhY2tmaWxsIHBvc2l0aW9uIGluZm8gZm9yIGJhY2t3YXJkcyBjb25uZWN0aW9uc1xuICAgICAgICB2ZXJ0aWNhbENvbm5lY3Rpb25PZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgYmFyLmNvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgICAgICBjb25uZWN0aW9uID0+IGNvbm5lY3Rpb24uZGlyZWN0aW9uID09PSAnYmFja3dhcmQnLFxuICAgICAgICApKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdDb25uZWN0aW9uID0gZmxvd0Nvbm5lY3Rpb25zLmZpbmQoXG4gICAgICAgICAgICBjb24gPT5cbiAgICAgICAgICAgICAgY29uLnN0YXJ0ID09PSBjb25uZWN0aW9uLnN0YXJ0ICYmXG4gICAgICAgICAgICAgIGNvbi5lbmQgPT09IGNvbm5lY3Rpb24uZW5kICYmXG4gICAgICAgICAgICAgIGNvbi5zdGVwID09PSBpIC0gMSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0Nvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcExpbmVZMiA9IGRhcmtlbmVkWSArIHZlcnRpY2FsQ29ubmVjdGlvbk9mZnNldDtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbUxpbmVZMiA9IHRvcExpbmVZMiArIGNvbm5lY3Rpb25IZWlnaHQoY29ubmVjdGlvbik7XG4gICAgICAgICAgICBtYXRjaGluZ0Nvbm5lY3Rpb24udG9wTGluZS55MiA9IHRvcExpbmVZMjtcbiAgICAgICAgICAgIG1hdGNoaW5nQ29ubmVjdGlvbi50b3BMaW5lLngyID0geDtcbiAgICAgICAgICAgIG1hdGNoaW5nQ29ubmVjdGlvbi5ib3R0b21MaW5lLnkyID0gYm90dG9tTGluZVkyO1xuICAgICAgICAgICAgbWF0Y2hpbmdDb25uZWN0aW9uLmJvdHRvbUxpbmUueDIgPSB4O1xuICAgICAgICAgICAgbWF0Y2hpbmdDb25uZWN0aW9uLnBhdGggPVxuICAgICAgICAgICAgICBjYWxjdWxhdGVGbG93Q29ubmVjdGlvblBhdGgobWF0Y2hpbmdDb25uZWN0aW9uKTtcblxuICAgICAgICAgICAgdmVydGljYWxDb25uZWN0aW9uT2Zmc2V0ICs9IGNvbm5lY3Rpb25IZWlnaHQoY29ubmVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy9EYXRhIExhYmVsc1xuICAgICAgICBjb25zdCBiYXJOYW1lID0gY29uZmlnLmZsb3dDb25maWcuc3ViQnVja2V0c0NvbmZpZy5maW5kKFxuICAgICAgICAgIHNiYyA9PiBzYmMuYnVja2V0SWQgPT09IGJhci5pZCxcbiAgICAgICAgKT8uYnVja2V0TmFtZTtcbiAgICAgICAgaWYgKGJhck5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRhdGFMYWJlbHMucHVzaCh7XG4gICAgICAgICAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCcsXG4gICAgICAgICAgICBkYXRhTGFiZWxUeXBlOiAnZmxvdycsXG4gICAgICAgICAgICBsYWJlbDogYCR7YmFyTmFtZX0gKCR7cGVyY2VudFBpcGVzLnBpcGUudHJhbnNmb3JtKFxuICAgICAgICAgICAgICBiYXIuY291bnQgLyBkYXRhLnhbaV0udG90YWxDb3VudCxcbiAgICAgICAgICAgICl9KWAsXG4gICAgICAgICAgICB4UG9zOiB4LFxuICAgICAgICAgICAgeVBvczpcbiAgICAgICAgICAgICAgZGFya2VuZWRZIC1cbiAgICAgICAgICAgICAgKGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFRleHRTaXplICtcbiAgICAgICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nKSAvXG4gICAgICAgICAgICAgICAgMixcbiAgICAgICAgICAgIGFuY2hvcjogJ3N0YXJ0JyxcbiAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICBidWNrZXRJbmRleDogaSxcbiAgICAgICAgICAgIGJhcklkOiBiYXIuaWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmFyU3VidGl0bGUgPSBjb25maWcuZmxvd0NvbmZpZy5zdWJ0aXRsZUZvcm1hdFN0cmluZy5yZXBsYWNlKFxuICAgICAgICAgICd7dmFsdWV9JyxcbiAgICAgICAgICB2YWx1ZVBpcGVzLnBpcGUudHJhbnNmb3JtKGJhci5jb3VudCksXG4gICAgICAgICk7XG4gICAgICAgIGRhdGFMYWJlbHMucHVzaCh7XG4gICAgICAgICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnLFxuICAgICAgICAgIGRhdGFMYWJlbFR5cGU6ICdmbG93JyxcbiAgICAgICAgICBsYWJlbDogYmFyU3VidGl0bGUsXG4gICAgICAgICAgeFBvczogeCxcbiAgICAgICAgICB5UG9zOiBkYXJrZW5lZFkgLSBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nIC8gNCxcbiAgICAgICAgICBhbmNob3I6ICdzdGFydCcsXG4gICAgICAgICAgYnVja2V0SW5kZXg6IGksXG4gICAgICAgICAgYmFySWQ6IGJhci5pZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBiYXJzLnB1c2goYnVja2V0QmFycyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaG92ZXIocG9zOiB7XG4gICAgICByZWN0OiBET01SZWN0O1xuICAgICAgeDogbnVtYmVyO1xuICAgICAgeTogbnVtYmVyO1xuICAgICAgY29udGFpbmVyU2Nyb2xsWDogbnVtYmVyO1xuICAgICAgY29udGFpbmVyU2Nyb2xsWTogbnVtYmVyO1xuICAgIH0pOiBIb3ZlclJldHVybiB7XG4gICAgICBjb25zdCByZWFsUG9zWCA9IHBvcy54ICsgcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICBjb25zdCByZWFsUG9zWSA9IHBvcy55ICsgcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsIHx8XG4gICAgICAgIGdldElmSG92ZXJPdXRPZkJvdW5kcyhcbiAgICAgICAgICBwb3MueCxcbiAgICAgICAgICBwb3MueSxcbiAgICAgICAgICByZWFsUG9zWCxcbiAgICAgICAgICByZWFsUG9zWSxcbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJ1Y2tldEluZGV4SW5mbyA9IGdldEZsb3dCdWNrZXRJbmRleEZvckhvdmVyKFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgcmVhbFBvc1gsXG4gICAgICApO1xuICAgICAgaWYgKGJ1Y2tldEluZGV4SW5mbyA9PT0gbnVsbCB8fCBidWNrZXRJbmRleEluZm8uaW5kZXggPj0gYmFycy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoYnVja2V0SW5kZXhJbmZvLmFyZWEgPT09ICdiYXInKSB7XG4gICAgICAgIGZvciAoY29uc3QgYmFyIG9mIGJhcnNbYnVja2V0SW5kZXhJbmZvLmluZGV4XSkge1xuICAgICAgICAgIGlmIChyZWFsUG9zWSA8IGJhci55KSB7XG4gICAgICAgICAgICAvL0JhciB0aXRsZVxuICAgICAgICAgICAgY29uc3QgbG9jYWxBbmNob3JYID0gYmFyLnggLSBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gYmFyLndpZHRoO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID1cbiAgICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZyAvIDIgK1xuICAgICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxUZXh0U2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWSA9IGJhci55IC0gKHBvcy5jb250YWluZXJTY3JvbGxZICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IHsgYW5jaG9yWCwgYW5jaG9yWSwgYW5jaG9yV2lkdGgsIGFuY2hvckhlaWdodCB9ID1cbiAgICAgICAgICAgICAgY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgICAgICAgICAgICAgIGxvY2FsQW5jaG9yWCxcbiAgICAgICAgICAgICAgICBsb2NhbEFuY2hvclksXG4gICAgICAgICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgICAgICAgYW5jaG9yWCArIHBvcy5yZWN0LngsXG4gICAgICAgICAgICAgIGFuY2hvclkgKyBwb3MucmVjdC55LFxuICAgICAgICAgICAgICBhbmNob3JXaWR0aCxcbiAgICAgICAgICAgICAgYW5jaG9ySGVpZ2h0LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGhvdmVyVHlwZTogJ2Zsb3cnLFxuICAgICAgICAgICAgICBob3ZlclRhcmdldDogJ2JhclRpdGxlJyxcbiAgICAgICAgICAgICAgYmFySWQ6IGJhci5pZCA/PyAnJyxcbiAgICAgICAgICAgICAgYnVja2V0SW5kZXg6IGJ1Y2tldEluZGV4SW5mby5pbmRleCxcbiAgICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgICAgICBzdWJ0aXRsZTogY29uZmlnLmZsb3dDb25maWcuc3VidGl0bGVGb3JtYXRTdHJpbmcucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICd7dmFsdWV9JyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlUGlwZXMucGlwZS50cmFuc2Zvcm0oYmFyLnRvdGFsQ291bnQpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAvLyBUaGUgaW52aXNpYmxlIGhpZ2hsaWdodCBiYXIgc3BhbnMgYm90aCBwb3J0aW9ucywgc28gc2tpcCBpdCB0b1xuICAgICAgICAgICAgLy8gYXZvaWQgbWlzcmVwb3J0aW5nIGEgcG9ydGlvbiBib3VuZGFyeSBhcyB0aGUgZW5kaW5nIHBvcnRpb25cbiAgICAgICAgICAgICFiYXIubm9uRGlzcGxheSAmJlxuICAgICAgICAgICAgcmVhbFBvc1kgPj0gYmFyLnkgJiZcbiAgICAgICAgICAgIHJlYWxQb3NZIDwgYmFyLnkgKyBiYXIuaGVpZ2h0XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvL0JhclxuICAgICAgICAgICAgY29uc3QgbG9jYWxBbmNob3JYID0gYmFyLnggLSBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gYmFyLndpZHRoO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxBbmNob3JZID0gYmFyLnkgLSBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJhci5oZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCB7IGFuY2hvclgsIGFuY2hvclksIGFuY2hvcldpZHRoLCBhbmNob3JIZWlnaHQgfSA9XG4gICAgICAgICAgICAgIGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICAgICAgICAgICAgICBsb2NhbEFuY2hvclgsXG4gICAgICAgICAgICAgICAgbG9jYWxBbmNob3JZLFxuICAgICAgICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgICAgICAgIGFuY2hvclggKyBwb3MucmVjdC54LFxuICAgICAgICAgICAgICBhbmNob3JZICsgcG9zLnJlY3QueSxcbiAgICAgICAgICAgICAgYW5jaG9yV2lkdGgsXG4gICAgICAgICAgICAgIGFuY2hvckhlaWdodCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBob3ZlclR5cGU6ICdmbG93JyxcbiAgICAgICAgICAgICAgaG92ZXJUYXJnZXQ6ICdiYXInLFxuICAgICAgICAgICAgICBiYXJJZDogYmFyLmlkID8/ICcnLFxuICAgICAgICAgICAgICBidWNrZXRJbmRleDogYnVja2V0SW5kZXhJbmZvLmluZGV4LFxuICAgICAgICAgICAgICBmb3JEYXJrZW46IGJhci5kYXJrZW4gPT09IHRydWUsXG4gICAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICAgICAgc3VidGl0bGU6IGNvbmZpZy5mbG93Q29uZmlnLnN1YnRpdGxlRm9ybWF0U3RyaW5nLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAne3ZhbHVlfScsXG4gICAgICAgICAgICAgICAgICB2YWx1ZVBpcGVzLnBpcGUudHJhbnNmb3JtKGJhci5jb3VudCksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgZmxvd0Nvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgICAgICBmbG93Q29uID0+IGZsb3dDb24uc3RlcCA9PT0gYnVja2V0SW5kZXhJbmZvLmluZGV4LFxuICAgICAgICApKSB7XG4gICAgICAgICAgaWYgKGNoZWNrSWZQb2ludFdpdGhpbkNvbm5lY3Rpb24oY29ubmVjdGlvbiwgcmVhbFBvc1gsIHJlYWxQb3NZKSkge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxBbmNob3JYID0gY29ubmVjdGlvbi50b3BMaW5lLngxIC0gcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGNvbm5lY3Rpb24udG9wTGluZS54MiAtIGNvbm5lY3Rpb24udG9wTGluZS54MTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnZlVG9wID0gYmV6aWVyWUF0WChcbiAgICAgICAgICAgICAgKGNvbm5lY3Rpb24udG9wTGluZS54MSArIGNvbm5lY3Rpb24udG9wTGluZS54MikgLyAyLFxuICAgICAgICAgICAgICBjb25uZWN0aW9uLnRvcExpbmUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY3VydmVCb3R0b20gPSBiZXppZXJZQXRYKFxuICAgICAgICAgICAgICAoY29ubmVjdGlvbi50b3BMaW5lLngxICsgY29ubmVjdGlvbi50b3BMaW5lLngyKSAvIDIsXG4gICAgICAgICAgICAgIGNvbm5lY3Rpb24uYm90dG9tTGluZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbEFuY2hvclkgPSBjdXJ2ZVRvcCAtIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gY3VydmVCb3R0b20gLSBjdXJ2ZVRvcDtcbiAgICAgICAgICAgIGNvbnN0IHsgYW5jaG9yWCwgYW5jaG9yWSwgYW5jaG9yV2lkdGgsIGFuY2hvckhlaWdodCB9ID1cbiAgICAgICAgICAgICAgY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgICAgICAgICAgICAgIGxvY2FsQW5jaG9yWCxcbiAgICAgICAgICAgICAgICBsb2NhbEFuY2hvclksXG4gICAgICAgICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgICAgICAgYW5jaG9yWCArIHBvcy5yZWN0LngsXG4gICAgICAgICAgICAgIGFuY2hvclkgKyBwb3MucmVjdC55LFxuICAgICAgICAgICAgICBhbmNob3JXaWR0aCxcbiAgICAgICAgICAgICAgYW5jaG9ySGVpZ2h0LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGhvdmVyVHlwZTogJ2Zsb3cnLFxuICAgICAgICAgICAgICBob3ZlclRhcmdldDogJ2Nvbm5lY3Rpb24nLFxuICAgICAgICAgICAgICBzdGFydElkOiBjb25uZWN0aW9uLnN0YXJ0LFxuICAgICAgICAgICAgICBlbmRJZDogY29ubmVjdGlvbi5lbmQsXG4gICAgICAgICAgICAgIHN0YXJ0QnVja2V0SW5kZXg6IGNvbm5lY3Rpb24uc3RlcCxcbiAgICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgICAgICBzdWJ0aXRsZTogY29uZmlnLmZsb3dDb25maWcuc3VidGl0bGVGb3JtYXRTdHJpbmcucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICd7dmFsdWV9JyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlUGlwZXMucGlwZS50cmFuc2Zvcm0oY29ubmVjdGlvbi5jb3VudCksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGFydFdpZHRoOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFdpZHRoLFxuICAgICAgY2hhcnRIZWlnaHQ6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsSGVpZ2h0LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICB4VGlja3M6IFtdLFxuICAgICAgeVRpY2tzOiBbXSxcbiAgICAgIGNvbG9yczogW10sXG4gICAgICBiYXJzLFxuICAgICAgbGluZXM6IFtdLFxuICAgICAgY2lyY2xlczogW10sXG4gICAgICBhcmVhczogW10sXG4gICAgICBob3ZlcixcbiAgICAgIGFyY3M6IFtdLFxuICAgICAgaG9yaXpvbnRhbEJhcnM6IFtdLFxuICAgICAgZGF0YUxhYmVscyxcbiAgICAgIHdhdGVyZmFsbExpbmVzOiBbXSxcbiAgICAgIGdyYWRpZW50czogW10sXG4gICAgICBmbG93Q29ubmVjdGlvbnMsXG4gICAgICBob3Jpem9udGFsQ29udGFpbmVyU2NhbGU6IGNoYXJ0U2l6aW5nVmFsdWVzLmhvcml6b250YWxDb250YWluZXJTY2FsZSxcbiAgICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6IGNoYXJ0U2l6aW5nVmFsdWVzLnZlcnRpY2FsQ29udGFpbmVyU2NhbGUsXG4gICAgICBjaGFydEVycm9yOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvKlxuICAgIE1pcnJvcnMgdGhlIGJ1Y2tldGluZyBpbiBmbG93c1RyYW5zZm9ybTogYSBwYXRoIGNvbnRyaWJ1dGVzIHZhbHVlc1tpXSB0b1xuICAgIHRoZSBiYXIgYXQgc3RlcCBpLCBhbmQgdmFsdWVzW2kgKyAxXSB0byBpdHMgZm9yd2FyZCBjb25uZWN0aW9uICh3aGljaCBpc1xuICAgIGFsc28gdGhlIGJhcidzIGNvbnRpbnVpbmcgcG9ydGlvbikuXG4gICovXG4gIGZ1bmN0aW9uIGZsb3dWYWx1ZUF0U3RlcCh5OiBGbG93WSwgc3RlcDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHkuc3RlcHMubGVuZ3RoID4gc3RlcCAmJiB5LnZhbHVlcy5sZW5ndGggPiBzdGVwXG4gICAgICA/IHkudmFsdWVzW3N0ZXBdXG4gICAgICA6IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBzdW1GbG93VmFsdWVzKFxuICAgIGRhdGE6IEZsb3dEYXRhLFxuICAgIHlJbmRpY2VzOiBudW1iZXJbXSxcbiAgICBzdGVwOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgcmV0dXJuIHlJbmRpY2VzXG4gICAgICAubWFwKGluZGV4ID0+IGZsb3dWYWx1ZUF0U3RlcChkYXRhLnlzW2luZGV4XSwgc3RlcCkgPz8gMClcbiAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB0b0Zsb3dDbGlja0V2ZW50KFxuICAgIGhvdmVyOiBGbG93SG92ZXJUYXJnZXQsXG4gICAgZGF0YTogRmxvd0RhdGEsXG4gICk6IEZsb3dDbGlja0V2ZW50IHtcbiAgICBjb25zdCBhbGxZSW5kaWNlcyA9IGRhdGEueXMubWFwKChfLCBpbmRleCkgPT4gaW5kZXgpO1xuICAgIGlmIChob3Zlci5ob3ZlclRhcmdldCA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICBjb25zdCBzdGVwID0gaG92ZXIuc3RhcnRCdWNrZXRJbmRleDtcbiAgICAgIGNvbnN0IHlJbmRpY2VzID0gYWxsWUluZGljZXMuZmlsdGVyKFxuICAgICAgICBpbmRleCA9PlxuICAgICAgICAgIGRhdGEueXNbaW5kZXhdLnN0ZXBzW3N0ZXBdID09PSBob3Zlci5zdGFydElkICYmXG4gICAgICAgICAgZmxvd1ZhbHVlQXRTdGVwKGRhdGEueXNbaW5kZXhdLCBzdGVwKSAhPT0gbnVsbCAmJlxuICAgICAgICAgIGRhdGEueXNbaW5kZXhdLnN0ZXBzW3N0ZXAgKyAxXSA9PT0gaG92ZXIuZW5kSWQgJiZcbiAgICAgICAgICBmbG93VmFsdWVBdFN0ZXAoZGF0YS55c1tpbmRleF0sIHN0ZXAgKyAxKSAhPT0gbnVsbCxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXJnZXQ6ICdjb25uZWN0aW9uJyxcbiAgICAgICAgc3RhcnRCdWNrZXRJbmRleDogc3RlcCxcbiAgICAgICAgc3RhcnRJZDogaG92ZXIuc3RhcnRJZCxcbiAgICAgICAgZW5kSWQ6IGhvdmVyLmVuZElkLFxuICAgICAgICBjb3VudDogc3VtRmxvd1ZhbHVlcyhkYXRhLCB5SW5kaWNlcywgc3RlcCArIDEpLFxuICAgICAgICB5SW5kaWNlcyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcCA9IGhvdmVyLmJ1Y2tldEluZGV4O1xuICAgIGNvbnN0IGJhcllJbmRpY2VzID0gYWxsWUluZGljZXMuZmlsdGVyKFxuICAgICAgaW5kZXggPT5cbiAgICAgICAgZGF0YS55c1tpbmRleF0uc3RlcHNbc3RlcF0gPT09IGhvdmVyLmJhcklkICYmXG4gICAgICAgIGZsb3dWYWx1ZUF0U3RlcChkYXRhLnlzW2luZGV4XSwgc3RlcCkgIT09IG51bGwsXG4gICAgKTtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gc3VtRmxvd1ZhbHVlcyhkYXRhLCBiYXJZSW5kaWNlcywgc3RlcCk7XG4gICAgY29uc3QgYmFzZSA9IHsgYnVja2V0SW5kZXg6IHN0ZXAsIGJhcklkOiBob3Zlci5iYXJJZCB9O1xuICAgIGlmIChob3Zlci5ob3ZlclRhcmdldCA9PT0gJ2JhclRpdGxlJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgdGFyZ2V0OiAndGl0bGUnLFxuICAgICAgICBjb3VudDogdG90YWxDb3VudCxcbiAgICAgICAgeUluZGljZXM6IGJhcllJbmRpY2VzLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250aW51aW5nQ291bnQgPSBzdW1GbG93VmFsdWVzKGRhdGEsIGJhcllJbmRpY2VzLCBzdGVwICsgMSk7XG4gICAgaWYgKGhvdmVyLmZvckRhcmtlbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgdGFyZ2V0OiAnY29udGludWluZycsXG4gICAgICAgIGNvdW50OiBjb250aW51aW5nQ291bnQsXG4gICAgICAgIHRvdGFsQ291bnQsXG4gICAgICAgIHlJbmRpY2VzOiBiYXJZSW5kaWNlcy5maWx0ZXIoXG4gICAgICAgICAgaW5kZXggPT4gKGZsb3dWYWx1ZUF0U3RlcChkYXRhLnlzW2luZGV4XSwgc3RlcCArIDEpID8/IDApID4gMCxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5iYXNlLFxuICAgICAgdGFyZ2V0OiAnZW5kaW5nJyxcbiAgICAgIGNvdW50OiB0b3RhbENvdW50IC0gY29udGludWluZ0NvdW50LFxuICAgICAgdG90YWxDb3VudCxcbiAgICAgIHlJbmRpY2VzOiBiYXJZSW5kaWNlcy5maWx0ZXIoXG4gICAgICAgIGluZGV4ID0+XG4gICAgICAgICAgKGZsb3dWYWx1ZUF0U3RlcChkYXRhLnlzW2luZGV4XSwgc3RlcCkgPz8gMCkgPlxuICAgICAgICAgIChmbG93VmFsdWVBdFN0ZXAoZGF0YS55c1tpbmRleF0sIHN0ZXAgKyAxKSA/PyAwKSxcbiAgICAgICksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IFNNQUxMX1BBRERJTkcgPSA4O1xuICBleHBvcnQgY29uc3QgREVGQVVMVF9GT05UX1NJWkUgPSAxMjsgLy90aGUgd2lkdGggY29uc3RhbnRzIGFyZSBiYXNlZCBvbiBmb250IHNpemUgMTIsIHNvIHRoaXMgdmFyaWFibGUgY2FuIGhlbHAgdy8gc2NhbGluZ1xuICBleHBvcnQgY29uc3QgV0lEVEhfUEVSX0xFVFRFUiA9IDYuNTtcbiAgY29uc3QgV0lEVEhfUEVSX05VTUJFUiA9IDc7XG4gIGNvbnN0IFdJRFRIX1BFUl9QRVJJT0QgPSAyO1xuICBjb25zdCBXSURUSF9QRVJfU0xBU0ggPSA0O1xuICAvL1doZW4gdGhlIGRhdGEgYXhpcyBncm93cywgdGhlIGRhdGEgaXMgYWx3YXlzIGdpdmVuIGF0IGxlYXN0IHRoaXMgcG9ydGlvbiBvZiB0aGUgcHJvdmlkZWQgc2l6ZVxuICBjb25zdCBHUk9XTl9EQVRBX01JTklNVU1fUkFUSU8gPSAwLjU7XG4gIGNvbnN0IERFRkFVTFRfSE9SSVpPTlRBTF9CQVJfQ09STkVSX1JBRElVUyA9IDQ7XG4gIGNvbnN0IEZMT1dfQ09OTkVDVElPTl9DVVJWRV9DT05TVEFOVCA9IDAuNTtcblxuICBmdW5jdGlvbiBnZXRGb3JtYXR0aW5nQW5kQ29sb3JzKFxuICAgIG9yaWdpbmFsRGF0YTogTm9uRmxvd0RhdGEsXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICkge1xuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSAoZGF0ZTogRGF0ZSkgPT5cbiAgICAgIGZvcm1hdGVkRGF0ZShjb25maWcuZGF0ZUZvcm1hdCB8fCAnZGF5JywgZGF0ZSk7XG4gICAgY29uc3QgeyBwaXBlLCBmdWxsUGlwZSB9ID0gZ2V0UGlwZXMoY29uZmlnLnZhbHVlVHlwZSk7XG4gICAgY29uc3QgeyBwaXBlOiBzZWNvbmRhcnlQaXBlLCBmdWxsUGlwZTogc2Vjb25kYXJ5RnVsbFBpcGUgfSA9XG4gICAgICBjb25maWcuc2Vjb25kYXJ5VmFsdWVUeXBlXG4gICAgICAgID8gZ2V0UGlwZXMoY29uZmlnLnNlY29uZGFyeVZhbHVlVHlwZSlcbiAgICAgICAgOiB7XG4gICAgICAgICAgICBwaXBlLFxuICAgICAgICAgICAgZnVsbFBpcGUsXG4gICAgICAgICAgfTtcbiAgICBjb25zdCBwaXBlVHJhbnNmb3JtID0gKFxuICAgICAgdmFsdWU6IG51bWJlcixcbiAgICAgIGlzU2Vjb25kYXJ5OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICAgICAgaXNGdWxsPzogYm9vbGVhbixcbiAgICApOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKGlzRnVsbCAhPT0gdHJ1ZSkge1xuICAgICAgICBpZiAoaXNTZWNvbmRhcnkgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gc2Vjb25kYXJ5UGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBsZXQgcmV0VmFsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChpc1NlY29uZGFyeSkge1xuICAgICAgICByZXRWYWwgPSBzZWNvbmRhcnlGdWxsUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0VmFsID0gZnVsbFBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXRWYWwgIT09IG51bGwgPyByZXRWYWwgOiAnLSc7XG4gICAgfTtcblxuICAgIC8vIFByZS1jYWxjdWxhdGUgY29sb3IgaW5kaWNlcyBmb3IgYWxsIGl0ZW1zICh1c2Ugb3JpZ2luYWwgZGF0YSBmb3Igc3RhYmxlIGNvbG9ycylcbiAgICBjb25zdCBjb2xvckluZGljZXMgPSBjYWxjdWxhdGVDb2xvckluZGljZXMob3JpZ2luYWxEYXRhKTtcbiAgICBjb25zdCBjb2xvcnMgPSBkYXRhLnlzLm1hcCh5ID0+IGdldENvbG9yKHksIGNvbG9ySW5kaWNlcywgY29uZmlnLmNvbG9ycykpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGVGb3JtYXQsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgY29sb3JJbmRpY2VzLFxuICAgICAgY29sb3JzLFxuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29sb3JJbmRpY2VzKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICApOiBNYXA8RGF0YVkgfCBTdXBwbGVtZW50YXJ5RGF0YVksIG51bWJlcj4ge1xuICAgIGNvbnN0IGNvbG9yTWFwID0gbmV3IE1hcDxEYXRhWSB8IFN1cHBsZW1lbnRhcnlEYXRhWSwgbnVtYmVyPigpO1xuXG4gICAgLy8gT3JpZ2luYWwgWXM6IHVzZSB0aGVpciBhcnJheSBpbmRleCBkaXJlY3RseVxuICAgIGRhdGEueXMuZm9yRWFjaCgoeSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbG9yTWFwLnNldCh5LCBpbmRleCk7XG4gICAgfSk7XG5cbiAgICAvLyBTdXBwbGVtZW50YXJ5IFlzOiBncm91cCBieSBzdXBwbGVtZW50YWxJbmRleCwgdXNlIHBvc2l0aW9uIHdpdGhpbiB0aGF0IGdyb3VwXG4gICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpKSB7XG4gICAgICBjb25zdCBzdXBwR3JvdXBzID0gbmV3IE1hcDxudW1iZXIsIFN1cHBsZW1lbnRhcnlEYXRhWVtdPigpO1xuXG4gICAgICBkYXRhLnN1cHBsZW1lbnRhcnlZcy5mb3JFYWNoKHN1cHBZID0+IHtcbiAgICAgICAgaWYgKCFzdXBwR3JvdXBzLmhhcyhzdXBwWS5zdXBwbGVtZW50YWxJbmRleCkpIHtcbiAgICAgICAgICBzdXBwR3JvdXBzLnNldChzdXBwWS5zdXBwbGVtZW50YWxJbmRleCwgW10pO1xuICAgICAgICB9XG4gICAgICAgIHN1cHBHcm91cHMuZ2V0KHN1cHBZLnN1cHBsZW1lbnRhbEluZGV4KSEucHVzaChzdXBwWSk7XG4gICAgICB9KTtcblxuICAgICAgc3VwcEdyb3Vwcy5mb3JFYWNoKGl0ZW1zID0+IHtcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgcG9zaXRpb25Jbkdyb3VwKSA9PiB7XG4gICAgICAgICAgY29sb3JNYXAuc2V0KGl0ZW0sIHBvc2l0aW9uSW5Hcm91cCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbG9yTWFwO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9yKFxuICAgIGl0ZW06IERhdGFZIHwgU3VwcGxlbWVudGFyeURhdGFZIHwgdW5kZWZpbmVkLFxuICAgIGNvbG9ySW5kaWNlczogTWFwPERhdGFZIHwgU3VwcGxlbWVudGFyeURhdGFZLCBudW1iZXI+LFxuICAgIGNvbG9yczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNvbG9yc1swXTtcbiAgICB9XG4gICAgaWYgKGl0ZW0uY29sb3JUb2tlbikgcmV0dXJuIGl0ZW0uY29sb3JUb2tlbjtcbiAgICBjb25zdCBjb2xvckluZGV4ID0gY29sb3JJbmRpY2VzLmdldChpdGVtKSA/PyAwO1xuICAgIHJldHVybiBjb2xvcnNbY29sb3JJbmRleCAlIGNvbG9ycy5sZW5ndGhdO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QnVja2V0VGlja0NvdW50KGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyk6IG51bWJlciB7XG4gICAgbGV0IGF2YWlsYWJsZVNpemUgPSAwO1xuICAgIGxldCBtaW5TcGFjaW5nID0gMTtcbiAgICBpZiAoY2hhcnRTaXppbmdWYWx1ZXMuY2hhcnREYXRhRGlyZWN0aW9uID09PSAndmVydGljYWwnKSB7XG4gICAgICBhdmFpbGFibGVTaXplID1cbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudG90YWxXaWR0aCAtXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmxlZnRQYWRkaW5nIC1cbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMucmlnaHRQYWRkaW5nO1xuICAgICAgbWluU3BhY2luZyA9XG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmhvcml6b250YWxBeGlzTGFiZWxUZXh0U2l6ZSArIFNNQUxMX1BBRERJTkc7XG4gICAgfVxuICAgIGlmIChjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgYXZhaWxhYmxlU2l6ZSA9XG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsSGVpZ2h0IC1cbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudG9wUGFkZGluZyAtXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmJvdHRvbVBhZGRpbmc7XG4gICAgICBtaW5TcGFjaW5nID0gY2hhcnRTaXppbmdWYWx1ZXMudmVydGljYWxBeGlzTGFiZWxUZXh0U2l6ZSArIFNNQUxMX1BBRERJTkc7XG4gICAgfVxuICAgIG1pblNwYWNpbmcgPSBtaW5TcGFjaW5nICogKGNoYXJ0U2l6aW5nVmFsdWVzLmZvbnRTaXplIC8gREVGQVVMVF9GT05UX1NJWkUpO1xuICAgIHJldHVybiBNYXRoLm1heCgyLCBNYXRoLmZsb29yKGF2YWlsYWJsZVNpemUgLyBtaW5TcGFjaW5nKSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDbHVzdGVySW5mb0ZvckJ1Y2tldChcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgKToge1xuICAgIG5vcm1Db3VudDogbnVtYmVyO1xuICAgIHN1cHBDb3VudDogbnVtYmVyO1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgbm9ybUNsdXN0ZXJJbmRpY2VzOiBudW1iZXJbXTtcbiAgICBzdXBwQ2x1c3RlckluZGljZXM6IG51bWJlcltdO1xuICB9IHtcbiAgICAvLyBTbG90IGxheW91dCBpcyB0aGUgc2FtZSBmb3IgZXZlcnkgYnVja2V0IOKAlCB6ZXJvIHZhbHVlcyBzdGlsbCBvY2N1cHlcbiAgICAvLyB0aGVpciBzbG90LCB0aGV5IGp1c3QgcmVuZGVyIHdpdGggbm8gaGVpZ2h0L3dpZHRoLiBUaGlzIGtlZXBzIGJ1Y2tldFxuICAgIC8vIHNpemVzLCBiYXIgcG9zaXRpb25zLCBhbmQgaG92ZXIgZGV0ZWN0aW9uIGNvbnNpc3RlbnQgYWNyb3NzIGJ1Y2tldHNcbiAgICAvLyByZWdhcmRsZXNzIG9mIHdoaWNoIHNlcmllcyBoYXBwZW4gdG8gYmUgemVyby5cbiAgICBjb25zdCBub3JtQ2x1c3RlckluZGljZXMgPSBkYXRhLnlzLm1hcCgoXywgeUluZGV4KSA9PiB5SW5kZXgpO1xuICAgIGNvbnN0IG5vcm1DbHVzdGVyQ291bnQgPSBub3JtQ2x1c3RlckluZGljZXMubGVuZ3RoO1xuICAgIGNvbnN0IHN1cHBDbHVzdGVySW5kaWNlcyA9IHVuaXEoXG4gICAgICBoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKVxuICAgICAgICA/IGRhdGEuc3VwcGxlbWVudGFyeVlzLm1hcCh5ID0+IHkuc3VwcGxlbWVudGFsSW5kZXgpXG4gICAgICAgIDogW10sXG4gICAgKTtcbiAgICBzdXBwQ2x1c3RlckluZGljZXMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuXG4gICAgY29uc3Qgc3VwcENsdXN0ZXJDb3VudCA9IHN1cHBDbHVzdGVySW5kaWNlcy5sZW5ndGg7XG4gICAgY29uc3QgYWN0dWFsTm9ybUNsdXN0ZXJDb3VudCA9IGlzQ2x1c3RlcmVkRGF0YShkYXRhLCBjb25maWcsIGZhbHNlKVxuICAgICAgPyBub3JtQ2x1c3RlckNvdW50XG4gICAgICA6IE1hdGgubWluKG5vcm1DbHVzdGVyQ291bnQsIDEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5vcm1Db3VudDogYWN0dWFsTm9ybUNsdXN0ZXJDb3VudCxcbiAgICAgIHN1cHBDb3VudDogc3VwcENsdXN0ZXJDb3VudCxcbiAgICAgIHRvdGFsOiBhY3R1YWxOb3JtQ2x1c3RlckNvdW50ICsgc3VwcENsdXN0ZXJDb3VudCxcbiAgICAgIG5vcm1DbHVzdGVySW5kaWNlcyxcbiAgICAgIHN1cHBDbHVzdGVySW5kaWNlcyxcbiAgICB9O1xuICB9XG5cbiAgLy9UaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSB0b3RhbCBkaXN0YW5jZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZ2l2ZW4gYnVja2V0LCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJ1Y2tldFxuICBmdW5jdGlvbiBnZXRCdWNrZXRTaXplKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgKTogbnVtYmVyIHtcbiAgICBjb25zdCB0b3RhbEJhck51bWJlciA9IGdldENsdXN0ZXJJbmZvRm9yQnVja2V0KGRhdGEsIGNvbmZpZyk7XG4gICAgY29uc3QgYnVja2V0U2l6ZSA9XG4gICAgICB0b3RhbEJhck51bWJlci50b3RhbCAqIGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgK1xuICAgICAgKHRvdGFsQmFyTnVtYmVyLnRvdGFsIC0gMSkgKiBjaGFydFNpemluZ1ZhbHVlcy5iYXJDbHVzdGVyR2FwO1xuXG4gICAgcmV0dXJuIGJ1Y2tldFNpemU7XG4gIH1cblxuICAvL1RoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIHRvdGFsIGRpc3RhbmNlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBnaXZlbiBidWNrZXQsIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBidWNrZXRcbiAgZnVuY3Rpb24gZ2V0VG90YWxCdWNrZXRHYXAoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IGJ1Y2tldFNpemUgPSBnZXRCdWNrZXRTaXplKGRhdGEsIGNvbmZpZywgY2hhcnRTaXppbmdWYWx1ZXMpO1xuICAgIHJldHVybiBidWNrZXRTaXplICsgY2hhcnRTaXppbmdWYWx1ZXMuYnVja2V0R2FwO1xuICB9XG5cbiAgLy9UaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSB0b3RhbCBkaXN0YW5jZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgYnVja2V0LCB0byB0aGUgc3RhcnQgb2YgdGhlIGdpdmVuIGJ1Y2tldFxuICBmdW5jdGlvbiBnZXRUb3RhbFByZUJ1Y2tldEdhcChcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gICAgYnVja2V0SW5kZXg6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICBsZXQgY3VtdWxhdGl2ZUJ1Y2tldEdhcCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXRJbmRleDsgaSsrKSB7XG4gICAgICBjdW11bGF0aXZlQnVja2V0R2FwICs9IGdldFRvdGFsQnVja2V0R2FwKGRhdGEsIGNvbmZpZywgY2hhcnRTaXppbmdWYWx1ZXMpO1xuICAgIH1cbiAgICByZXR1cm4gY3VtdWxhdGl2ZUJ1Y2tldEdhcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlVGltZXNlcmllc1RpY2tzKFxuICAgIGRhdGE6IFRpbWVzZXJpZXNEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIHRpY2tDb3VudDogbnVtYmVyLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgICBmb3JtYXQ6IChkYXRlOiBEYXRlKSA9PiBzdHJpbmcsXG4gICk6IEdlbmVyaWNUaWNrW10ge1xuICAgIGNvbnN0IGdldExhYmVsID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIHJldHVybiBmb3JtYXQobmV3IERhdGUoZGF0YS54W2luZGV4XSkpO1xuICAgIH07XG4gICAgcmV0dXJuIGdldFRpY2tzKGRhdGEsIGdldExhYmVsLCBjb25maWcsIHRpY2tDb3VudCwgY2hhcnRTaXppbmdWYWx1ZXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVMYWJlbGxlZFRpY2tzKFxuICAgIGRhdGE6IExhYmVsZWREYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIHRpY2tDb3VudDogbnVtYmVyLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgKTogR2VuZXJpY1RpY2tbXSB7XG4gICAgY29uc3QgZ2V0TGFiZWwgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgcmV0dXJuIGRhdGEueFtpbmRleF0ubGFiZWw7XG4gICAgfTtcbiAgICByZXR1cm4gZ2V0VGlja3MoZGF0YSwgZ2V0TGFiZWwsIGNvbmZpZywgdGlja0NvdW50LCBjaGFydFNpemluZ1ZhbHVlcyk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUaWNrcyhcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBnZXRMYWJlbDogKGluZGV4OiBudW1iZXIpID0+IHN0cmluZyxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICB0aWNrQ291bnQ6IG51bWJlcixcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gICk6IEdlbmVyaWNUaWNrW10ge1xuICAgIGlmIChkYXRhLngubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmIChkYXRhLngubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBsYWJlbE9mZnNldCA9IGdldFRpY2tMYWJlbE9mZnNldChcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gW3sgdmFsdWU6IGxhYmVsT2Zmc2V0LCBsYWJlbDogZ2V0TGFiZWwoMCkgfV07XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdEluZGV4ID0gZGF0YS54Lmxlbmd0aCAtIDE7XG4gICAgY29uc3QgdGlja0J1Y2tldFNwYWNpbmcgPSBNYXRoLmNlaWwobGFzdEluZGV4IC8gdGlja0NvdW50KTtcbiAgICBjb25zdCBudW1UaWNrcyA9IE1hdGguZmxvb3IobGFzdEluZGV4IC8gdGlja0J1Y2tldFNwYWNpbmcpICsgMTtcbiAgICBjb25zdCBzdGVwID0gbGFzdEluZGV4IC8gKG51bVRpY2tzIC0gMSk7XG5cbiAgICAvLyBBbHdheXMgaW5jbHVkZSBmaXJzdCBhbmQgbGFzdCBkYXRhIHBvaW50cy5cbiAgICAvLyBJbm5lciB0aWNrcyBhcmUgYXBwcm94aW1hdGVseSBldmVubHkgc3BhY2VkIHVzaW5nIHJvdW5kaW5nLlxuICAgIGNvbnN0IGluZGljZXM6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1UaWNrczsgaSsrKSB7XG4gICAgICBpbmRpY2VzLnB1c2goTWF0aC5yb3VuZChpICogc3RlcCkpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzLm1hcChpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsT2Zmc2V0ID0gZ2V0VGlja0xhYmVsT2Zmc2V0KFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICBpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOlxuICAgICAgICAgIGdldFRvdGFsUHJlQnVja2V0R2FwKGRhdGEsIGNvbmZpZywgY2hhcnRTaXppbmdWYWx1ZXMsIGkpICtcbiAgICAgICAgICBsYWJlbE9mZnNldCxcbiAgICAgICAgbGFiZWw6IGdldExhYmVsKGkpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRpY2tMYWJlbE9mZnNldChcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gICAgYnVja2V0SW5kZXg6IG51bWJlcixcbiAgKSB7XG4gICAgY29uc3QgaW5oZXJlbnRPZmZzZXQgPVxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFRvcE9mZnNldFxuICAgICAgICA6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsTGVmdE9mZnNldDtcbiAgICAvL1RvIGhhdmUgdGhlIGxhYmVsIGJlIGNlbnRlcmVkIG9uIHRoZSBidWNrZXQncyBjZW50ZXIgcG9zaXRpb25cbiAgICBjb25zdCBidWNrZXRPZmZzZXQgPSBnZXRCdWNrZXRTaXplKGRhdGEsIGNvbmZpZywgY2hhcnRTaXppbmdWYWx1ZXMpIC8gMjtcbiAgICBsZXQgaG9yaXpvbnRhbEJhck9mZnNldCA9IDA7XG4gICAgaWYgKGNoYXJ0U2l6aW5nVmFsdWVzLmNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAvL1RoaXMgYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCB0aGUgaW5oZXJlbnRPZmZzZXQgYW5kIGJ1Y2tldE9mZnNldCByZXN1bHQgaW4gbWF0Y2hpbmcgeSB2YWx1ZXMgZm9yIHRoZSBiYXIgYW5kIHRoZSBsYWJlbFxuICAgICAgLy8gIEhvd2V2ZXIsIGZvciB0aGUgYmFyLCB0aGF0IHkgcG9zaXRpb24gaXMgdGhlIHRvcCBvZiB0aGUgYmFyLCB3aGlsZSBmb3IgdGhlIGxhYmVsLCBpdCdzIHRoZSBib3R0b20gb2YgdGhlIGxhYmVsXG4gICAgICAvLyAgV2hlbiBleGFjdGx5IGxpbmVkIHVwIGxpa2UgdGhhdCwgdGhlIGxhYmVsIGFjdHVhbGx5IGxvb2tzIGEgbGl0dGxlIGxvdywgc28gdGhhdCAtMiBtYWtlcyBpdCBsb29rIGNvcnJlY3RcbiAgICAgIGhvcml6b250YWxCYXJPZmZzZXQgPSBjaGFydFNpemluZ1ZhbHVlcy5mb250U2l6ZSAvIDIgLSAyO1xuICAgIH1cblxuICAgIHJldHVybiBpbmhlcmVudE9mZnNldCArIGJ1Y2tldE9mZnNldCArIGhvcml6b250YWxCYXJPZmZzZXQ7XG4gIH1cblxuICBleHBvcnQgdHlwZSBJbnB1dERhdGEgPSBMYWJlbGVkRGF0YSB8IFRpbWVzZXJpZXNEYXRhIHwgRmxvd0RhdGE7XG4gIGV4cG9ydCB0eXBlIFByb2Nlc3NEYXRhID0gTGFiZWxlZERhdGEgfCBUaW1lc2VyaWVzRGF0YSB8IFByb2Nlc3NlZEZsb3dEYXRhO1xuICBleHBvcnQgdHlwZSBOb25GbG93RGF0YSA9IExhYmVsZWREYXRhIHwgVGltZXNlcmllc0RhdGE7XG5cbiAgdHlwZSBCYXNlRGF0YSA9IHtcbiAgICB5czogRGF0YVlbXTtcbiAgICBzdXBwbGVtZW50YXJ5WXM/OiBTdXBwbGVtZW50YXJ5RGF0YVlbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBQYXR0ZXJuID0gJ3NvbGlkJyB8ICdzdHJpcGVkJyB8ICdkb3RzJztcblxuICBleHBvcnQgdHlwZSBEYXRhWSA9IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGNvbG9yVG9rZW4/OiBzdHJpbmc7XG4gICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICBpc1NlY29uZGFyeT86IGJvb2xlYW47XG4gICAgcGF0dGVybj86IFBhdHRlcm47XG4gICAgc2hvd0xlZ2VuZEl0ZW0/OiBib29sZWFuO1xuICAgIGNsaWNrYWJsZT86IGJvb2xlYW47XG4gICAgdmFsdWVzOiBudW1iZXJbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTdXBwbGVtZW50YXJ5RGF0YVkgPSBEYXRhWSAmIHtcbiAgICBzdXBwbGVtZW50YWxJbmRleDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZsb3dZID0ge1xuICAgIHN0ZXBzOiBzdHJpbmdbXTsgLy9TaG91bGQgYWx3YXlzIG1hdGNoIGluIGxlbmd0aCB3LyB2YWx1ZXNcbiAgICB2YWx1ZXM6IG51bWJlcltdOyAvL0Zsb3dZIHZhbHVlcyBzaG91bGQgYWx3YXlzIGJlIHdlYWtseSBkZWNyZWFzaW5nXG4gICAgY2xpY2thYmxlPzogYm9vbGVhbjtcbiAgfTtcblxuICAvL0N1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBmb3IgaG9yaXpvbnRhbCBiYXIgY2hhcnRzXG4gIGV4cG9ydCB0eXBlIExhYmVsZWREYXRhID0gQmFzZURhdGEgJiB7XG4gICAgdHlwZTogJ2xhYmVsZWQnO1xuICAgIHg6IHsgbGFiZWw6IHN0cmluZzsgaXNTZWNvbmRhcnk/OiBib29sZWFuIH1bXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBUaW1lc2VyaWVzRGF0YSA9IEJhc2VEYXRhICYge1xuICAgIHR5cGU6ICd0aW1lc2VyaWVzJztcbiAgICB4OiBudW1iZXJbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGbG93RGF0YSA9IHtcbiAgICB0eXBlOiAnZmxvdyc7XG4gICAgeXM6IEZsb3dZW107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgUHJvY2Vzc2VkRmxvd0RhdGEgPSB7XG4gICAgdHlwZTogJ2Zsb3ctcHJvY2Vzc2VkJztcbiAgICB4OiBGbG93QnVja2V0W107XG4gIH07XG5cbiAgdHlwZSBGbG93QnVja2V0ID0ge1xuICAgIHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgICBzdWJCdWNrZXRzOiBGbG93U3ViQnVja2V0W107XG4gIH07XG5cbiAgdHlwZSBGbG93U3ViQnVja2V0ID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBjb25uZWN0aW9uczogRmxvd0Nvbm5lY3Rpb25bXTtcbiAgfTtcblxuICB0eXBlIEZsb3dDb25uZWN0aW9uID0ge1xuICAgIGRpcmVjdGlvbjogJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJztcbiAgICBzdGFydDogc3RyaW5nO1xuICAgIGVuZDogc3RyaW5nO1xuICAgIGNvdW50OiBudW1iZXI7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRmxvd0Nvbm5lY3Rpb25SZW5kZXIgPSBPbWl0PEZsb3dDb25uZWN0aW9uLCAnZGlyZWN0aW9uJz4gJiB7XG4gICAgZWxlbWVudFR5cGU6ICdjb25uZWN0aW9uJztcbiAgICBzdGVwOiBudW1iZXI7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGVtcGhhc2l6ZT86IGJvb2xlYW47XG4gICAgdG9wTGluZToge1xuICAgICAgeDE6IG51bWJlcjtcbiAgICAgIHkxOiBudW1iZXI7XG4gICAgICB4MjogbnVtYmVyO1xuICAgICAgeTI6IG51bWJlcjtcbiAgICB9O1xuICAgIGJvdHRvbUxpbmU6IHtcbiAgICAgIHgxOiBudW1iZXI7XG4gICAgICB5MTogbnVtYmVyO1xuICAgICAgeDI6IG51bWJlcjtcbiAgICAgIHkyOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICB0eXBlIERvbnV0RGF0YSA9IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGhpZGRlbj86IGJvb2xlYW47XG4gICAgdmFsdWU6IG51bWJlcjtcbiAgICBpc1NlY29uZGFyeT86IGJvb2xlYW47XG4gIH07XG5cbiAgdHlwZSBEaW1lbnNpb25zID0ge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgQ2hhcnRUeXBlID1cbiAgICB8ICdsaW5lJ1xuICAgIHwgJ2FyZWEnXG4gICAgfCAnYmFyJ1xuICAgIHwgJ2hvcml6b250YWwtYmFyJ1xuICAgIHwgJ2RvbnV0J1xuICAgIHwgJ3dhdGVyZmFsbCdcbiAgICB8ICdmdW5uZWwnXG4gICAgfCAnZmxvdyc7XG5cbiAgdHlwZSBCYXNlQ29uZmlnID0ge1xuICAgIHR5cGU6IENoYXJ0VHlwZTtcbiAgICBncm91cGVkVG9vbHRpcDogYm9vbGVhbjtcbiAgICBjb2xvcnM6IHN0cmluZ1tdO1xuICAgIGFsbG93TGVnZW5kVG9nZ2xlOiBib29sZWFuO1xuICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZztcbiAgICBzaXppbmdFcnJvclN0YXRlTWVzc2FnZTogc3RyaW5nO1xuICAgIHZhbHVlVHlwZTogVmFsdWVUeXBlO1xuICAgIHNlY29uZGFyeVZhbHVlVHlwZT86IFZhbHVlVHlwZTtcbiAgICB0cnVuY2F0ZUxlZ2VuZDogYm9vbGVhbjtcbiAgICBkYXRlRm9ybWF0PzogSW50ZXJ2YWw7XG4gICAgc2hvd0RhdGFMYWJlbHM/OiBib29sZWFuO1xuICB9O1xuXG4gIHR5cGUgRG9udXRTdWJDb25maWcgPSB7XG4gICAgc2l6ZTogJ3hzbWFsbCcgfCAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICAgIGRpc3BsYXlWYWx1ZTogc3RyaW5nO1xuICAgIGRpc3BsYXlMYWJlbD86IHN0cmluZztcbiAgICBzY2FsaW5nQ29uZmlnPzogRG9udXRTaXppbmdDb25maWc7XG4gIH07XG5cbiAgdHlwZSBGbG93U3ViQ29uZmlnID0ge1xuICAgIHN1YnRpdGxlRm9ybWF0U3RyaW5nOiBzdHJpbmc7XG4gICAgc3ViQnVja2V0c0NvbmZpZzoge1xuICAgICAgYnVja2V0SWQ6IHN0cmluZztcbiAgICAgIGJ1Y2tldE5hbWU6IHN0cmluZztcbiAgICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgICBpc0hpZ2hsaWdodGVkPzogYm9vbGVhbjtcbiAgICB9W107XG4gICAgY29ubmVjdGlvbkNvbG9yPzogc3RyaW5nO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbmZpZyA9IEJhc2VDb25maWcgJlxuICAgIChcbiAgICAgIHwge1xuICAgICAgICAgIHR5cGU6ICdsaW5lJyB8ICdhcmVhJyB8ICd3YXRlcmZhbGwnIHwgJ2Z1bm5lbCc7XG4gICAgICAgICAgc2NhbGluZ0NvbmZpZz86IEZ1bGxTY2FsaW5nQ29uZmlnO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICB0eXBlOiAnYmFyJyB8ICdob3Jpem9udGFsLWJhcic7XG4gICAgICAgICAgZ3JvdXBpbmdUeXBlOiAnc3RhY2tlZCcgfCAnY2x1c3RlcmVkJztcbiAgICAgICAgICBzY2FsaW5nQ29uZmlnPzogRnVsbFNjYWxpbmdDb25maWc7XG4gICAgICAgIH1cbiAgICAgIHwge1xuICAgICAgICAgIHR5cGU6ICdkb251dCc7XG4gICAgICAgICAgZG9udXREaXNwbGF5SW5mbzogRG9udXRTdWJDb25maWc7XG4gICAgICAgIH1cbiAgICAgIHwge1xuICAgICAgICAgIHR5cGU6ICdmbG93JztcbiAgICAgICAgICBzaG93RGF0YUxhYmVsczogdHJ1ZTtcbiAgICAgICAgICBmbG93Q29uZmlnOiBGbG93U3ViQ29uZmlnO1xuICAgICAgICAgIHNjYWxpbmdDb25maWc/OiBGdWxsU2NhbGluZ0NvbmZpZztcbiAgICAgICAgfVxuICAgICk7XG5cbiAgdHlwZSBEb251dENvbmZpZyA9IEV4dHJhY3Q8Q29uZmlnLCB7IHR5cGU6ICdkb251dCcgfT47XG5cbiAgdHlwZSBGbG93Q29uZmlnID0gRXh0cmFjdDxDb25maWcsIHsgdHlwZTogJ2Zsb3cnIH0+O1xuXG4gIHR5cGUgQ29uZmlnV2l0aEZ1bGxTY2FsaW5nID0gRXh0cmFjdDxcbiAgICBDb25maWcsXG4gICAge1xuICAgICAgdHlwZTpcbiAgICAgICAgfCAnYmFyJ1xuICAgICAgICB8ICdob3Jpem9udGFsLWJhcidcbiAgICAgICAgfCAnbGluZSdcbiAgICAgICAgfCAnYXJlYSdcbiAgICAgICAgfCAnd2F0ZXJmYWxsJ1xuICAgICAgICB8ICdmdW5uZWwnXG4gICAgICAgIHwgJ2Zsb3cnO1xuICAgIH1cbiAgPjtcblxuICBleHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZzogQ29uZmlnID0ge1xuICAgIHR5cGU6ICdsaW5lJyxcbiAgICBncm91cGVkVG9vbHRpcDogdHJ1ZSxcbiAgICBjb2xvcnM6IGRlZmF1bHRDb2xvclBhbGV0dGUsXG4gICAgYWxsb3dMZWdlbmRUb2dnbGU6IGZhbHNlLFxuICAgIHplcm9TdGF0ZU1lc3NhZ2U6ICdObyBkYXRhIHRvIGRpc3BsYXkuJyxcbiAgICBzaXppbmdFcnJvclN0YXRlTWVzc2FnZTogJ1RoZSBjaGFydCBjYW5ub3QgZGlzcGxheSBhdCB0aGUgY3VycmVudCBzaXplLicsXG4gICAgdmFsdWVUeXBlOiAnY3VycmVuY3knLFxuICAgIHRydW5jYXRlTGVnZW5kOiB0cnVlLFxuICAgIGRhdGVGb3JtYXQ6ICdkYXknLFxuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBkZWZhdWx0RG9udXRDb25maWc6IENvbmZpZyA9IHtcbiAgICB0eXBlOiAnZG9udXQnLFxuICAgIGdyb3VwZWRUb29sdGlwOiB0cnVlLFxuICAgIGNvbG9yczogZGVmYXVsdENvbG9yUGFsZXR0ZSxcbiAgICBhbGxvd0xlZ2VuZFRvZ2dsZTogZmFsc2UsXG4gICAgemVyb1N0YXRlTWVzc2FnZTogJ05vIGRhdGEgdG8gZGlzcGxheS4nLFxuICAgIHNpemluZ0Vycm9yU3RhdGVNZXNzYWdlOiAnVGhlIGNoYXJ0IGNhbm5vdCBkaXNwbGF5IGF0IHRoZSBjdXJyZW50IHNpemUuJyxcbiAgICB2YWx1ZVR5cGU6ICdjdXJyZW5jeScsXG4gICAgdHJ1bmNhdGVMZWdlbmQ6IHRydWUsXG4gICAgZGF0ZUZvcm1hdDogJ2RheScsXG4gICAgZG9udXREaXNwbGF5SW5mbzoge1xuICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICBkaXNwbGF5VmFsdWU6ICcnLFxuICAgIH0sXG4gIH07XG5cbiAgdHlwZSBHZW5lcmljVGljayA9IHtcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgc2Vjb25kYXJ5TGFiZWw/OiBzdHJpbmc7XG4gIH07XG5cbiAgdHlwZSBYVGljayA9IE9taXQ8R2VuZXJpY1RpY2ssICd2YWx1ZSc+ICYge1xuICAgIHg6IG51bWJlcjtcbiAgfTtcblxuICBmdW5jdGlvbiB0b1hUaWNrKHRpY2s6IEdlbmVyaWNUaWNrKTogWFRpY2sge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB0aWNrLnZhbHVlLFxuICAgICAgbGFiZWw6IHRpY2subGFiZWwsXG4gICAgICBzZWNvbmRhcnlMYWJlbDogdGljay5zZWNvbmRhcnlMYWJlbCxcbiAgICB9O1xuICB9XG5cbiAgdHlwZSBZVGljayA9IE9taXQ8R2VuZXJpY1RpY2ssICd2YWx1ZSc+ICYge1xuICAgIHk6IG51bWJlcjtcbiAgfTtcblxuICBmdW5jdGlvbiB0b1lUaWNrKHRpY2s6IEdlbmVyaWNUaWNrKTogWVRpY2sge1xuICAgIHJldHVybiB7XG4gICAgICB5OiB0aWNrLnZhbHVlLFxuICAgICAgbGFiZWw6IHRpY2subGFiZWwsXG4gICAgICBzZWNvbmRhcnlMYWJlbDogdGljay5zZWNvbmRhcnlMYWJlbCxcbiAgICB9O1xuICB9XG5cbiAgdHlwZSBCYXNpY1JlY3QgPSB7XG4gICAgZWxlbWVudFR5cGU6ICdyZWN0JztcbiAgICByZWN0VHlwZT86IHN0cmluZztcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgIHBhdHRlcm4/OiBQYXR0ZXJuO1xuICAgIHJvdW5kaW5nPzogJ3RvcCcgfCAnYm90dG9tJyB8ICdhbGwnIHwgJ25vbmUnO1xuICAgIG5vbkRpc3BsYXk/OiBib29sZWFuO1xuICB9O1xuXG4gIHR5cGUgRmxvd1JlY3QgPSBCYXNpY1JlY3QgJiB7XG4gICAgcmVjdFR5cGU6ICdmbG93JztcbiAgICBpZDogc3RyaW5nO1xuICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICB0b3RhbENvdW50OiBudW1iZXI7XG4gICAgY29sb3JPdmVycmlkZT86IHN0cmluZztcbiAgICBkYXJrZW46IGJvb2xlYW47XG4gICAgZGVFbXBoYXNpemU6IGJvb2xlYW47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgUmVjdCA9IChCYXNpY1JlY3QgJiB7IHJlY3RUeXBlPzogdW5kZWZpbmVkIH0pIHwgRmxvd1JlY3Q7XG5cbiAgdHlwZSBDaXJjbGUgPSB7XG4gICAgY3g6IG51bWJlcjtcbiAgICBjeTogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZsb3dIb3ZlclRhcmdldCA9XG4gICAgfCB7XG4gICAgICAgIGhvdmVyVGFyZ2V0OiAnYmFyVGl0bGUnO1xuICAgICAgICBidWNrZXRJbmRleDogbnVtYmVyO1xuICAgICAgICBiYXJJZDogc3RyaW5nO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBob3ZlclRhcmdldDogJ2Jhcic7XG4gICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgICAgIGJhcklkOiBzdHJpbmc7XG4gICAgICAgIGZvckRhcmtlbjogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgaG92ZXJUYXJnZXQ6ICdjb25uZWN0aW9uJztcbiAgICAgICAgc3RhcnRJZDogc3RyaW5nO1xuICAgICAgICBlbmRJZDogc3RyaW5nO1xuICAgICAgICBzdGFydEJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZsb3dIb3ZlclJldHVybiA9IHtcbiAgICBob3ZlclR5cGU6ICdmbG93JztcblxuICAgIHRvb2x0aXA6IHtcbiAgICAgIGFuY2hvcjogRE9NUmVjdDtcbiAgICAgIHN1YnRpdGxlOiBzdHJpbmc7XG4gICAgICBzZWNvbmRhcnlTdWJ0aXRsZT86IHN0cmluZztcbiAgICB9O1xuICB9ICYgRmxvd0hvdmVyVGFyZ2V0O1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYSBjbGlja2FibGUgZmxvdyBlbGVtZW50IGlzIGNsaWNrZWQuIGB5SW5kaWNlc2AgYXJlIHRoZVxuICAgKiBpbmRpY2VzIGludG8gYEZsb3dEYXRhLnlzYCBvZiB0aGUgcGF0aHMgdGhhdCBtYWtlIHVwIHRoZSBjbGlja2VkIGVsZW1lbnQuXG4gICAqL1xuICBleHBvcnQgdHlwZSBGbG93Q2xpY2tFdmVudCA9IHtcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIHlJbmRpY2VzOiBudW1iZXJbXTtcbiAgfSAmIChcbiAgICB8ICh7XG4gICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgICAgIGJhcklkOiBzdHJpbmc7XG4gICAgICB9ICYgKFxuICAgICAgICB8IHtcbiAgICAgICAgICAgIHRhcmdldDogJ3RpdGxlJztcbiAgICAgICAgICB9XG4gICAgICAgIHwge1xuICAgICAgICAgICAgdGFyZ2V0OiAnY29udGludWluZycgfCAnZW5kaW5nJztcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICApKVxuICAgIHwge1xuICAgICAgICB0YXJnZXQ6ICdjb25uZWN0aW9uJztcbiAgICAgICAgc3RhcnRCdWNrZXRJbmRleDogbnVtYmVyO1xuICAgICAgICBzdGFydElkOiBzdHJpbmc7XG4gICAgICAgIGVuZElkOiBzdHJpbmc7XG4gICAgICB9XG4gICk7XG5cbiAgZXhwb3J0IHR5cGUgSG92ZXJSZXR1cm4gPVxuICAgIHwge1xuICAgICAgICBob3ZlclR5cGU6ICdzdGFuZGFyZCc7XG4gICAgICAgIC8vIHRoZSBpbmRpY2VzIGludG8gdGhlIGRhdGEgb2YgdGhlIGNsb3Nlc3QgcG9pbnRcbiAgICAgICAgeEluZGV4OiBudW1iZXI7XG4gICAgICAgIC8vIHdlIHdhbnQgdG8ga25vdyB3aGljaCB2aXNpYmxlIHkgaW5kZXggaXMgaG92ZXJlZFxuICAgICAgICAvLyBhbmQgd2hpY2ggYWN0dWFsIHkgaW5kZXggaXMgaG92ZXJlZFxuICAgICAgICB5SW5kZXg6IG51bWJlcjtcbiAgICAgICAgdmlzaWJsZVlJbmRleDogbnVtYmVyO1xuICAgICAgICBpc1N1cHBWYWx1ZT86IGJvb2xlYW47XG4gICAgICAgIHN1cHBZSW5kZXg/OiBudW1iZXI7XG4gICAgICAgIC8vRnVubmVsIG9ubHksIGZvciB3aGVuIGRyb3BPZmYgc2VjdGlvbiBpcyBob3ZlcmVkXG4gICAgICAgIGlzRHJvcE9mZj86IGJvb2xlYW47XG5cbiAgICAgICAgLy8gdGhlIHZpZXdwb3J0IHggYW5kIHlzIG9mIHRoZSBob3ZlcmVkIGl0ZW1zXG4gICAgICAgIHg6IG51bWJlcjtcbiAgICAgICAgeXM6IG51bWJlcltdO1xuXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3I6IERPTVJlY3Q7XG4gICAgICAgICAgcHJlZmVycmVkUG9zaXRpb24/OiBDYWxsb3V0Q29tcG9uZW50LkFuY2hvcmVkUG9zaXRpb247XG4gICAgICAgICAgZGF0ZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICBtZXRyaWNzOiB7XG4gICAgICAgICAgICBjb2xvcjogc3RyaW5nO1xuICAgICAgICAgICAgbGFiZWw6IHN0cmluZztcbiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgICAgICAgICBwYXR0ZXJuPzogUGF0dGVybjtcbiAgICAgICAgICB9W107XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfCBGbG93SG92ZXJSZXR1cm5cbiAgICB8IG51bGw7XG5cbiAgLy8gSG92ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmlld3BvcnQgeCBhbmQgeSBhbmQgcmV0dXJucyBhIHJpY2hcbiAgLy8gc2V0IG9mIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdmFsdWVzIGFyZSBiZWluZyBob3ZlcmVkIGFuZCB3aGF0IHRoZSB0b29sdGlwXG4gIC8vIHNob3VsZCBsb29rIGxpa2VcbiAgZXhwb3J0IHR5cGUgSG92ZXIgPSAocG9zOiB7XG4gICAgcmVjdDogRE9NUmVjdDtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIGNvbnRhaW5lclNjcm9sbFg6IG51bWJlcjtcbiAgICBjb250YWluZXJTY3JvbGxZOiBudW1iZXI7XG4gIH0pID0+IEhvdmVyUmV0dXJuO1xuXG4gIGV4cG9ydCB0eXBlIFRvb2x0aXBDb250ZXh0ID0ge1xuICAgIHhJbmRleDogbnVtYmVyO1xuICAgIHlJbmRleDogbnVtYmVyO1xuICAgIGlzU3VwcFZhbHVlPzogYm9vbGVhbjtcbiAgICBzdXBwWUluZGV4PzogbnVtYmVyO1xuICB9O1xuXG4gIC8vIFJlbmRlcmVkQ2hhcnQgcmVwcmVzZW50cyBhbGwgb2YgdGhlIHBhcnRzIG9mIGEgY2hhcnRcbiAgLy8gdGhhdCBlbmQgdXAgb24gc2NyZWVuLiBFdmVyeSBjaGFydCBoYXMgeCBhbmQgeSB0aWNrc1xuICAvLyBhbmQgaG92ZXIgZnVuY3Rpb25hbGl0eSwgZXZlbiB0aG91Z2ggdGhleSBtaWdodCBiZVxuICAvLyBkaWZmZXJlbnQgZnJvbSBjaGFydCB0byBjaGFydC5cbiAgZXhwb3J0IHR5cGUgUmVuZGVyZWRDaGFydCA9IHtcbiAgICBjaGFydFdpZHRoOiBudW1iZXI7XG4gICAgY2hhcnRIZWlnaHQ6IG51bWJlcjtcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXM7XG4gICAgeFRpY2tzOiBYVGlja1tdO1xuICAgIHlUaWNrczogWVRpY2tbXTtcbiAgICBob3Zlcj86IEhvdmVyO1xuICAgIGNvbG9yczogc3RyaW5nW107XG4gICAgbGluZXM6IHsgcGF0dGVybj86IFBhdHRlcm47IGxpbmU6IHN0cmluZyB8IG51bGwgfVtdO1xuICAgIGNpcmNsZXM6IENpcmNsZVtdOyAvL0xpbmUgZmFsbGJhY2sgZm9yIGEgc2luZ2xlIHBvaW50XG4gICAgYXJlYXM6IHsgcGF0dGVybj86IFBhdHRlcm47IGFyZWE6IHN0cmluZyB8IG51bGwgfVtdO1xuICAgIGJhcnM6IFJlY3RbXVtdO1xuICAgIGFyY3M6IChzdHJpbmcgfCBudWxsKVtdO1xuICAgIGhvcml6b250YWxCYXJzOiB7XG4gICAgICBwYXR0ZXJuPzogUGF0dGVybjtcbiAgICAgIGhvcml6b250YWxCYXI6IHN0cmluZyB8IG51bGw7XG4gICAgICB4OiBudW1iZXI7XG4gICAgICB5OiBudW1iZXI7XG4gICAgfVtdW107XG4gICAgZGF0YUxhYmVsczogRGF0YUxhYmVsW107XG4gICAgd2F0ZXJmYWxsTGluZXM6IHtcbiAgICAgIHgxOiBudW1iZXI7XG4gICAgICB4MjogbnVtYmVyO1xuICAgICAgeTE6IG51bWJlcjtcbiAgICAgIHkyOiBudW1iZXI7XG4gICAgfVtdO1xuICAgIGdyYWRpZW50czogUmVjdFtdW107XG4gICAgZmxvd0Nvbm5lY3Rpb25zOiBGbG93Q29ubmVjdGlvblJlbmRlcltdO1xuICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZTogQ29udGFpbmVyU2NhbGluZ1R5cGU7XG4gICAgdmVydGljYWxDb250YWluZXJTY2FsZTogQ29udGFpbmVyU2NhbGluZ1R5cGU7XG4gICAgY2hhcnRFcnJvcjogJ3NpemluZycgfCAnY29uZmlnJyB8IG51bGw7XG4gIH07XG5cbiAgdHlwZSBCYXNpY0RhdGFMYWJlbCA9IHtcbiAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCc7XG4gICAgZGF0YUxhYmVsVHlwZT86IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHhQb3M6IG51bWJlcjtcbiAgICB5UG9zOiBudW1iZXI7XG4gICAgYW5jaG9yOiAnc3RhcnQnIHwgJ21pZGRsZScgfCAnZW5kJztcbiAgICBsaW5lPzoge1xuICAgICAgeDE6IG51bWJlcjtcbiAgICAgIHkxOiBudW1iZXI7XG4gICAgICB4MjogbnVtYmVyO1xuICAgICAgeTI6IG51bWJlcjtcbiAgICB9O1xuICAgIGJvbGQ/OiBib29sZWFuO1xuICB9O1xuXG4gIHR5cGUgRmxvd0RhdGFMYWJlbCA9IEJhc2ljRGF0YUxhYmVsICYge1xuICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJztcbiAgICBkYXRhTGFiZWxUeXBlOiAnZmxvdyc7XG4gICAgLy9IZWxwZXIgZGF0YSBmb3IgZmxvd3NcbiAgICBidWNrZXRJbmRleDogbnVtYmVyO1xuICAgIGJhcklkOiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRGF0YUxhYmVsID1cbiAgICB8IChCYXNpY0RhdGFMYWJlbCAmIHsgZGF0YUxhYmVsVHlwZT86IHVuZGVmaW5lZCB9KVxuICAgIHwgRmxvd0RhdGFMYWJlbDtcblxuICBjb25zdCBlbXB0eUNoYXJ0OiBSZW5kZXJlZENoYXJ0ID0ge1xuICAgIGNoYXJ0V2lkdGg6IDAsXG4gICAgY2hhcnRIZWlnaHQ6IDAsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IGVtcHR5Q2hhcnRTY2FsZVZhbHVlcyxcbiAgICB4VGlja3M6IFtdLFxuICAgIHlUaWNrczogW10sXG4gICAgY29sb3JzOiBbXSxcbiAgICBsaW5lczogW10sXG4gICAgY2lyY2xlczogW10sXG4gICAgYXJlYXM6IFtdLFxuICAgIGJhcnM6IFtdLFxuICAgIGFyY3M6IFtdLFxuICAgIGhvcml6b250YWxCYXJzOiBbXSxcbiAgICBkYXRhTGFiZWxzOiBbXSxcbiAgICB3YXRlcmZhbGxMaW5lczogW10sXG4gICAgZ3JhZGllbnRzOiBbXSxcbiAgICBmbG93Q29ubmVjdGlvbnM6IFtdLFxuICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZTogJ25vLXNjYWxlJyxcbiAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlOiAnbm8tc2NhbGUnLFxuICAgIGNoYXJ0RXJyb3I6IG51bGwsXG4gIH07XG5cbiAgLy8neScgaW4gdGhpcyBmdW5jdGlvbiByZWZlcnMgdG8gdGhlIGRhdGEgeSwgc2luY2UgdGhpcyBmdW5jdGlvblxuICAvLyBpcyBhbHNvIHVzZWQgYnkgaG9yaXpvbnRhbC1iYXJzLCB3aGVyZSB0aGUgZGF0YSB5IGlzIHRoZSBjaGFydCB4XG4gIGZ1bmN0aW9uIGNhbGNEYXRhQXhpc1NjYWxlc0FuZFRpY2tzKFxuICAgIGRhdGE6IFByb2Nlc3NEYXRhLFxuICAgIHBpcGVUcmFuc2Zvcm1JbnB1dDpcbiAgICAgIHwgKCh2YWx1ZTogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbikgPT4gc3RyaW5nKVxuICAgICAgfCBudWxsLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgKToge1xuICAgIHNjYWxlOiAoaW5wdXQ6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IG51bWJlcjtcbiAgICB0aWNrczogR2VuZXJpY1RpY2tbXTtcbiAgfSB7XG4gICAgY29uc3QgcGlwZVRyYW5zZm9ybSA9XG4gICAgICBwaXBlVHJhbnNmb3JtSW5wdXQgIT09IG51bGwgPyBwaXBlVHJhbnNmb3JtSW5wdXQgOiAoKSA9PiAnJztcbiAgICBjb25zdCB7XG4gICAgICBwcmltYXJ5RGF0YU1pbixcbiAgICAgIHByaW1hcnlEYXRhTWF4LFxuICAgICAgc2Vjb25kYXJ5RGF0YU1pbixcbiAgICAgIHNlY29uZGFyeURhdGFNYXgsXG4gICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4LFxuICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZyxcbiAgICB9ID0gY2FsY0RhdGFTY2FsaW5nVmFsdWVzKGRhdGEsIGNvbmZpZyk7XG4gICAgY29uc3Qgc3RhcnRPZmZzZXQgPVxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyBjaGFydFNpemluZ1ZhbHVlcy50b3RhbExlZnRPZmZzZXRcbiAgICAgICAgOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFRvcE9mZnNldDtcbiAgICBsZXQgbWluU3BhY2luZyA9XG4gICAgICAoY2hhcnRTaXppbmdWYWx1ZXMuY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyBjaGFydFNpemluZ1ZhbHVlcy5ob3Jpem9udGFsQXhpc0xhYmVsVGV4dFNpemVcbiAgICAgICAgOiBjaGFydFNpemluZ1ZhbHVlcy52ZXJ0aWNhbEF4aXNMYWJlbFRleHRTaXplKSArIFNNQUxMX1BBRERJTkc7XG4gICAgbWluU3BhY2luZyA9IG1pblNwYWNpbmcgKiAoY2hhcnRTaXppbmdWYWx1ZXMuZm9udFNpemUgLyBERUZBVUxUX0ZPTlRfU0laRSk7XG4gICAgY29uc3Qgc3BhY2luZ1RpY2tDb3VudCA9IE1hdGgubWF4KFxuICAgICAgMixcbiAgICAgIE1hdGguZmxvb3IoY2hhcnRTaXppbmdWYWx1ZXMuc2l6ZUZvckRhdGEgLyBtaW5TcGFjaW5nKSxcbiAgICApO1xuICAgIGNvbnN0IGFjdHVhbFRhcmdldFRpY2tDb3VudCA9IE1hdGgubWluKFxuICAgICAgc3BhY2luZ1RpY2tDb3VudCxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLnRhcmdldFRpY2tDb3VudCxcbiAgICApO1xuXG4gICAgY29uc3QgaGFzUHJpbWFyeSA9IHByaW1hcnlEYXRhTWluICE9PSAwIHx8IHByaW1hcnlEYXRhTWF4ICE9PSAwO1xuICAgIGNvbnN0IGhhc1NlY29uZGFyeSA9IHNlY29uZGFyeURhdGFNaW4gIT09IDAgfHwgc2Vjb25kYXJ5RGF0YU1heCAhPT0gMDtcbiAgICBjb25zdCBzY2FsZVJhbmdlID1cbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8XG4gICAgICBjb25maWcudHlwZSA9PT0gJ2Zsb3cnXG4gICAgICAgID8gWzAsIGNoYXJ0U2l6aW5nVmFsdWVzLnNpemVGb3JEYXRhXVxuICAgICAgICA6IFtjaGFydFNpemluZ1ZhbHVlcy5zaXplRm9yRGF0YSwgMF07XG4gICAgLy9UaGVzZSAnZWZmZWN0aXZlJyB2YWx1ZXMgZW5zdXJlIHdlIGhhdmUgcm9vbSBmb3IgcG90ZW50aWFsIHN0YWNraW5nIG9mIHNlY29uZGFyeSBhbmQgbm9uLXNlY29uZGFyeSB2YWx1ZXNcbiAgICBsZXQgZWZmZWN0aXZlUHJpbWFyeU1pbiA9IHByaW1hcnlEYXRhTWluICogc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZztcbiAgICBsZXQgZWZmZWN0aXZlUHJpbWFyeU1heCA9IHByaW1hcnlEYXRhTWF4ICogc2NhbGVEb21haW5NdWx0aXBsZUZvck1heDtcblxuICAgIC8vU2ltcGxlciBwYXRoIGZvciBkYXRhIHcvbyBzZWNvbmRhcmllc1xuICAgIGlmICghaGFzU2Vjb25kYXJ5KSB7XG4gICAgICBjb25zdCBwcmltYXJ5WURvbWFpbiA9IFtlZmZlY3RpdmVQcmltYXJ5TWluLCBlZmZlY3RpdmVQcmltYXJ5TWF4XTtcblxuICAgICAgY29uc3QgeVNjYWxlID0gc2NhbGVMaW5lYXIocHJpbWFyeVlEb21haW4sIHNjYWxlUmFuZ2UpO1xuICAgICAgY29uc3QgdGlja3M6IEdlbmVyaWNUaWNrW10gPSB5U2NhbGVcbiAgICAgICAgLnRpY2tzKGFjdHVhbFRhcmdldFRpY2tDb3VudClcbiAgICAgICAgLm1hcCh0aWNrID0+ICh7XG4gICAgICAgICAgdmFsdWU6IHlTY2FsZSh0aWNrKSArIHN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIGxhYmVsOiBwaXBlVHJhbnNmb3JtKHRpY2ssIGZhbHNlKSxcbiAgICAgICAgfSkpO1xuICAgICAgY29uc3Qgc2NhbGUgPSAoaW5wdXQ6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgICAgIHJldHVybiB5U2NhbGUoaW5wdXQpICsgc3RhcnRPZmZzZXQ7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIHRpY2tzLFxuICAgICAgfTtcbiAgICB9XG4gICAgLy9TaW1wbGVyIHBhdGggZm9yIGRhdGEgdy9vIHByaW1hcmllc1xuICAgIGlmICghaGFzUHJpbWFyeSkge1xuICAgICAgY29uc3Qgc2Vjb25kYXJ5WURvbWFpbiA9IFtzZWNvbmRhcnlEYXRhTWluLCBzZWNvbmRhcnlEYXRhTWF4XTtcblxuICAgICAgY29uc3QgeVNjYWxlID0gc2NhbGVMaW5lYXIoc2Vjb25kYXJ5WURvbWFpbiwgc2NhbGVSYW5nZSk7XG4gICAgICBjb25zdCB0aWNrczogR2VuZXJpY1RpY2tbXSA9IHlTY2FsZVxuICAgICAgICAudGlja3MoYWN0dWFsVGFyZ2V0VGlja0NvdW50KVxuICAgICAgICAubWFwKHRpY2sgPT4gKHtcbiAgICAgICAgICB2YWx1ZTogeVNjYWxlKHRpY2spICsgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgbGFiZWw6IHBpcGVUcmFuc2Zvcm0odGljaywgdHJ1ZSksXG4gICAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHNjYWxlID0gKGlucHV0OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgICAgICByZXR1cm4geVNjYWxlKGlucHV0KSArIHN0YXJ0T2Zmc2V0O1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjYWxlLFxuICAgICAgICB0aWNrcyxcbiAgICAgIH07XG4gICAgfVxuICAgIGxldCBlZmZlY3RpdmVTZWNvbmRhcnlNYXggPSAwO1xuICAgIGxldCBlZmZlY3RpdmVTZWNvbmRhcnlNaW4gPSAwO1xuXG4gICAgLy9UaGlzIGJsb2NrIHNldHMgdGhlIGVmZmVjdGl2ZSBtYXggZm9yIHByaW1hcnkgYW5kIHNlY29uZGFyeVxuICAgIC8vVGhpcyB0byBlbnN1cmUgdGhhdCB0aGUgZWZmZWN0aXZlIG1heGVzIGZvciBib3RoIGRhdGEgc2V0cyBhcmUgcHJvcGVybHkgc2V0IHNvIHRoYXRcbiAgICAvLyAwIHdpbGwgZmFsbCBhdCB0aGUgc2FtZSBwbGFjZSBvbiBib3RoIGFuZCBlYWNoIHdpbGwgaGF2ZSAncm9vbScgZm9yIHBvdGVudGlhbCBzdGFja2luZ1xuICAgIGlmIChcbiAgICAgIChwcmltYXJ5RGF0YU1heCA8PSAwICYmIHNlY29uZGFyeURhdGFNaW4gPj0gMCkgfHxcbiAgICAgIChwcmltYXJ5RGF0YU1pbiA+PSAwICYmIHNlY29uZGFyeURhdGFNYXggPD0gMClcbiAgICApIHtcbiAgICAgIC8vSW4gdGhpcyBzY2VuYXJpbywgb25lIHNldCBvZiBkYXRhIGlzIGNvbXBldGVseSBwb3NpdGl2ZSwgd2hpbGUgdGhlIG90aGVyIGlzIGNvbXBsZXRlbHkgbmVnYXRpdmVcbiAgICAgIC8vVGhlIHR3byBkYXRhIHNldHMgY2FuIHNjYWxlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnRseVxuICAgICAgLy9XZSAnbWlycm9yJyB0aGUgdmFsdWVzIG9mIHRoZSB0d28gZGF0YSBzZXRzLCB3aGljaCdsbCBwdXQgdGhlIDAgYXhpcyBpbiB0aGUgY2VudGVyIG9mIHRoZSBkYXRhXG4gICAgICBpZiAocHJpbWFyeURhdGFNYXggPD0gMCkge1xuICAgICAgICBlZmZlY3RpdmVQcmltYXJ5TWF4ID0gTWF0aC5hYnMoZWZmZWN0aXZlUHJpbWFyeU1pbik7XG4gICAgICB9XG4gICAgICBpZiAocHJpbWFyeURhdGFNaW4gPj0gMCkge1xuICAgICAgICBlZmZlY3RpdmVQcmltYXJ5TWluID0gLU1hdGguYWJzKGVmZmVjdGl2ZVByaW1hcnlNYXgpO1xuICAgICAgfVxuICAgICAgaWYgKHNlY29uZGFyeURhdGFNYXggPD0gMCkge1xuICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNaW4gPSBzZWNvbmRhcnlEYXRhTWluO1xuICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNYXggPSBNYXRoLmFicyhzZWNvbmRhcnlEYXRhTWluKTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWNvbmRhcnlEYXRhTWluID49IDApIHtcbiAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWF4ID0gc2Vjb25kYXJ5RGF0YU1heDtcbiAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWluID0gLXNlY29uZGFyeURhdGFNYXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcmltYXJ5RGF0YU1heCA+IDApIHtcbiAgICAgIGlmIChwcmltYXJ5RGF0YU1pbiA8IDApIHtcbiAgICAgICAgLy9QcmltYXJ5IGRhdGEgaGFzIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZVxuICAgICAgICBpZiAoc2Vjb25kYXJ5RGF0YU1heCA+IDApIHtcbiAgICAgICAgICAvL1NlY29uZGFyeSBkYXRhIGhhcyBwb3NpdGl2ZVxuICAgICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1heCA9IHNlY29uZGFyeURhdGFNYXggKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4O1xuICAgICAgICAgIGlmIChzZWNvbmRhcnlEYXRhTWluIDwgMCkge1xuICAgICAgICAgICAgLy9TZWNvbmRhcnkgZGF0YSBoYXMgbmVnYXRpdmVcbiAgICAgICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1pbiA9XG4gICAgICAgICAgICAgIHNlY29uZGFyeURhdGFNaW4gKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL1NlY29uZGFyeSBkYXRhIGlzIG9ubHkgcG9zaXRpdmVcbiAgICAgICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1pbiA9XG4gICAgICAgICAgICAgIChzZWNvbmRhcnlEYXRhTWF4IC8gcHJpbWFyeURhdGFNYXgpICpcbiAgICAgICAgICAgICAgcHJpbWFyeURhdGFNaW4gKlxuICAgICAgICAgICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvL1NlY29uZGFyeSBkYXRhIGhhcyBvbmx5IG5lZ2F0aXZlXG4gICAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWluID0gc2Vjb25kYXJ5RGF0YU1pbiAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWc7XG4gICAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWF4ID1cbiAgICAgICAgICAgIChzZWNvbmRhcnlEYXRhTWluIC8gcHJpbWFyeURhdGFNaW4pICpcbiAgICAgICAgICAgIHByaW1hcnlEYXRhTWF4ICpcbiAgICAgICAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vUHJpbWFyeSBkYXRhIGlzIG9ubHkgcG9zaXRpdmVcbiAgICAgICAgLy9EdWUgdG8gZWFybGllciBjaGVjaywgd2Uga25vdyB0aGF0IHNlY29uZGFyeSBkYXRhIGlzIGVpdGhlciBhbHNvIGFsbC1wb3NpdGl2ZSwgb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlXG4gICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1heCA9IHNlY29uZGFyeURhdGFNYXggKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4O1xuICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNaW4gPSBzZWNvbmRhcnlEYXRhTWluICogc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZztcbiAgICAgICAgZWZmZWN0aXZlUHJpbWFyeU1pbiA9XG4gICAgICAgICAgKHByaW1hcnlEYXRhTWF4IC8gc2Vjb25kYXJ5RGF0YU1heCkgKlxuICAgICAgICAgIHNlY29uZGFyeURhdGFNaW4gKlxuICAgICAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vUHJpbWFyeSBkYXRhIGlzIG9ubHkgbmVnYXRpdmVcbiAgICAgIC8vRHVlIHRvIGVhcmxpZXIgY2hlY2ssIHdlIGtub3cgdGhhdCBzZWNvbmRhcnkgZGF0YSBpcyBlaXRoZXIgYWxzbyBhbGwtbmVnYXRpdmUsIG9yIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZVxuICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWF4ID0gc2Vjb25kYXJ5RGF0YU1heCAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXg7XG4gICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNaW4gPSBzZWNvbmRhcnlEYXRhTWluICogc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZztcbiAgICAgIGVmZmVjdGl2ZVByaW1hcnlNYXggPVxuICAgICAgICAocHJpbWFyeURhdGFNaW4gLyBzZWNvbmRhcnlEYXRhTWluKSAqXG4gICAgICAgIHNlY29uZGFyeURhdGFNYXggKlxuICAgICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4O1xuICAgIH1cbiAgICBjb25zdCBwcmltYXJ5WURvbWFpbiA9IFtlZmZlY3RpdmVQcmltYXJ5TWluLCBlZmZlY3RpdmVQcmltYXJ5TWF4XTtcblxuICAgIGNvbnN0IHlTY2FsZSA9IHNjYWxlTGluZWFyKHByaW1hcnlZRG9tYWluLCBzY2FsZVJhbmdlKTtcblxuICAgIC8vRmlndXJpbmcgb3V0IHRoZSBiZXN0IHRpY2sgY291bnQgdG8gZml0IHRoZSB0d28gZGF0YSBzcm91Y2VzXG4gICAgY29uc3QgeVNjYWxlUHJpbWFyeVByb3RvID0gc2NhbGVMaW5lYXIocHJpbWFyeVlEb21haW4sIHNjYWxlUmFuZ2UpO1xuICAgIGNvbnN0IHlTY2FsZVNlY29uZGFyeVByb3RvID0gc2NhbGVMaW5lYXIoXG4gICAgICBbZWZmZWN0aXZlU2Vjb25kYXJ5TWluLCBlZmZlY3RpdmVTZWNvbmRhcnlNYXhdLFxuICAgICAgc2NhbGVSYW5nZSxcbiAgICApO1xuICAgIGNvbnN0IHRpY2tDb3VudCA9IE1hdGgubWF4KFxuICAgICAgYWN0dWFsVGFyZ2V0VGlja0NvdW50LFxuICAgICAgeVNjYWxlUHJpbWFyeVByb3RvLnRpY2tzKGFjdHVhbFRhcmdldFRpY2tDb3VudCkubGVuZ3RoLFxuICAgICAgeVNjYWxlU2Vjb25kYXJ5UHJvdG8udGlja3MoYWN0dWFsVGFyZ2V0VGlja0NvdW50KS5sZW5ndGgsXG4gICAgKTtcbiAgICBjb25zdCBwcmltYXJ5VGlja3MgPSB5U2NhbGUudGlja3ModGlja0NvdW50KS5tYXAodGljayA9PiAoe1xuICAgICAgdmFsdWU6IHlTY2FsZSh0aWNrKSArIHN0YXJ0T2Zmc2V0LFxuICAgICAgbGFiZWw6IHBpcGVUcmFuc2Zvcm0odGljaywgZmFsc2UpLFxuICAgICAgcmF3WTogdGljayxcbiAgICB9KSk7XG5cbiAgICAvL0ZpbmRpbmcgYSBkb21haW4gZm9yIHRoZSBzZWNvbmRhcnkgZGF0YSBzdWNoIHRoYXQgaXQgd2lsbCByZXN1bHQgaW4gcm91bmQgdGljayB2YWx1ZXMgd2hlbiBtYXRjaGVkIHdpdGggdGhlIHByaW1hcnkgdGlja3NcbiAgICBjb25zdCBzZWNvbmRhcnlUaWNrc1Byb3RvID0geVNjYWxlU2Vjb25kYXJ5UHJvdG9cbiAgICAgIC50aWNrcyh0aWNrQ291bnQpXG4gICAgICAubWFwKHRpY2sgPT4gKHtcbiAgICAgICAgeTogeVNjYWxlU2Vjb25kYXJ5UHJvdG8odGljayksXG4gICAgICAgIHJhd1k6IHRpY2ssXG4gICAgICAgIGxhYmVsOiBwaXBlVHJhbnNmb3JtKHRpY2ssIHRydWUpLFxuICAgICAgfSkpO1xuICAgIGNvbnN0IHByaW1hcnlNaW5UaWNrID0gTWF0aC5taW4oLi4ucHJpbWFyeVRpY2tzLm1hcCh0aWNrID0+IHRpY2sucmF3WSkpO1xuICAgIGNvbnN0IHByaW1hcnlNYXhUaWNrID0gTWF0aC5tYXgoLi4ucHJpbWFyeVRpY2tzLm1hcCh0aWNrID0+IHRpY2sucmF3WSkpO1xuICAgIGNvbnN0IHByaW1hcnlEb21haW5NYXhUaWNrUmF0aW8gPVxuICAgICAgcHJpbWFyeU1heFRpY2sgIT09IDAgPyBlZmZlY3RpdmVQcmltYXJ5TWF4IC8gcHJpbWFyeU1heFRpY2sgOiAwO1xuICAgIGNvbnN0IHByaW1hcnlEb21haW5NaW5UaWNrUmF0aW8gPVxuICAgICAgcHJpbWFyeU1pblRpY2sgIT09IDAgPyBlZmZlY3RpdmVQcmltYXJ5TWluIC8gcHJpbWFyeU1pblRpY2sgOiAwO1xuXG4gICAgY29uc3QgcHJpbWFyeUdhcCA9IHByaW1hcnlUaWNrc1sxXS5yYXdZIC0gcHJpbWFyeVRpY2tzWzBdLnJhd1k7XG4gICAgY29uc3QgdGlja3NCZWxvd1plcm8gPSBwcmltYXJ5TWluVGljayAvIHByaW1hcnlHYXA7XG4gICAgY29uc3QgdGlja3NBYm92ZVplcm8gPSBwcmltYXJ5TWF4VGljayAvIHByaW1hcnlHYXA7XG5cbiAgICBjb25zdCBzZWNvbmRhcnlHYXAgPVxuICAgICAgc2Vjb25kYXJ5VGlja3NQcm90b1sxXS5yYXdZIC0gc2Vjb25kYXJ5VGlja3NQcm90b1swXS5yYXdZO1xuICAgIGxldCBjYWxjUmFuZ2VNdWx0ID0gMTtcbiAgICBjb25zdCBzZWNvbmRhcnlEb21haW5NaW5NdWx0ID1cbiAgICAgIHRpY2tzQmVsb3daZXJvICogc2Vjb25kYXJ5R2FwICogcHJpbWFyeURvbWFpbk1pblRpY2tSYXRpbztcbiAgICBjb25zdCBzZWNvbmRhcnlEb21haW5NYXhNdWx0ID1cbiAgICAgIHRpY2tzQWJvdmVaZXJvICogc2Vjb25kYXJ5R2FwICogcHJpbWFyeURvbWFpbk1heFRpY2tSYXRpbztcbiAgICAvL0ZpcnN0LCB3ZSBlbnN1cmUgdGhlIGNhbGNSYW5nZU11bHQgaXMgYmlnIGVub3VnaFxuICAgIGxldCBzaXplVXBDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHdoaWxlICghc2l6ZVVwQ29tcGxldGUpIHtcbiAgICAgIGNvbnN0IGNhbGNSYW5nZVRvb1NtYWxsRm9yTWluID1cbiAgICAgICAgc2Vjb25kYXJ5RG9tYWluTWluTXVsdCAqIGNhbGNSYW5nZU11bHQgPiBlZmZlY3RpdmVTZWNvbmRhcnlNaW4gJiZcbiAgICAgICAgc2Vjb25kYXJ5RG9tYWluTWluTXVsdCAhPT0gMDtcbiAgICAgIGNvbnN0IGNhbGNSYW5nZVRvb1NtYWxsRm9yTWF4ID1cbiAgICAgICAgc2Vjb25kYXJ5RG9tYWluTWF4TXVsdCAqIGNhbGNSYW5nZU11bHQgPCBlZmZlY3RpdmVTZWNvbmRhcnlNYXggJiZcbiAgICAgICAgc2Vjb25kYXJ5RG9tYWluTWF4TXVsdCAhPT0gMDtcbiAgICAgIGlmIChjYWxjUmFuZ2VUb29TbWFsbEZvck1pbiB8fCBjYWxjUmFuZ2VUb29TbWFsbEZvck1heCkge1xuICAgICAgICBjYWxjUmFuZ2VNdWx0ID0gY2FsY1JhbmdlTXVsdCAqIDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaXplVXBDb21wbGV0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vVGhlbiwgd2UgY2hlY2sgaWYgd2UgY2FuIHNjYWxlIGRvd24gKGZvciB0aGlzIG9uZSwgYm90aCBjb25kaXRpb25zIGhhdmUgdG8gYmUgdHJ1ZSwgc28gaXQgd29uJ3QgdW5kbyBhIHByZXZpb3VzIHNjYWxlIHVwKVxuICAgIGxldCBzaXplRG93bkNvbXBsZXRlID0gZmFsc2U7XG4gICAgd2hpbGUgKCFzaXplRG93bkNvbXBsZXRlKSB7XG4gICAgICBjb25zdCBjYWxjUmFuZ2VUb29CaWdGb3JNaW4gPVxuICAgICAgICBzZWNvbmRhcnlEb21haW5NaW5NdWx0ICogY2FsY1JhbmdlTXVsdCA8IGVmZmVjdGl2ZVNlY29uZGFyeU1pbiAqIDIgJiZcbiAgICAgICAgc2Vjb25kYXJ5RG9tYWluTWluTXVsdCAhPT0gMDtcbiAgICAgIGNvbnN0IGNhbGNSYW5nZVRvb0JpZ0Zvck1heCA9XG4gICAgICAgIHNlY29uZGFyeURvbWFpbk1heE11bHQgKiBjYWxjUmFuZ2VNdWx0ID4gZWZmZWN0aXZlU2Vjb25kYXJ5TWF4ICogMiAmJlxuICAgICAgICBzZWNvbmRhcnlEb21haW5NYXhNdWx0ICE9PSAwO1xuICAgICAgaWYgKGNhbGNSYW5nZVRvb0JpZ0Zvck1pbiAmJiBjYWxjUmFuZ2VUb29CaWdGb3JNYXgpIHtcbiAgICAgICAgY2FsY1JhbmdlTXVsdCA9IGNhbGNSYW5nZU11bHQgLyAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2l6ZURvd25Db21wbGV0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBzZWNvbmRhcnlEb21haW5NaW4gPSBzZWNvbmRhcnlEb21haW5NaW5NdWx0ICogY2FsY1JhbmdlTXVsdDtcbiAgICBsZXQgc2Vjb25kYXJ5RG9tYWluTWF4ID0gc2Vjb25kYXJ5RG9tYWluTWF4TXVsdCAqIGNhbGNSYW5nZU11bHQ7XG4gICAgLy9JZiB0aGUgZGF0YSBpcyBsb3BzaWRlZCBlbm91Z2gsIGl0J3MgcG9zc2libGUgdGhhdCBvbmUgb2YgcG9zaXRpdmUvbmVnYXRpdmUgaGF2ZSB2YWx1ZXMsIGJ1dCBubyB0aWNrc1xuICAgIGlmIChzZWNvbmRhcnlEb21haW5NaW4gPT09IDAgJiYgZWZmZWN0aXZlUHJpbWFyeU1pbiA8IDApIHtcbiAgICAgIGNvbnN0IHBvc1NlY1JhdGlvID0gc2Vjb25kYXJ5RG9tYWluTWF4IC8gZWZmZWN0aXZlUHJpbWFyeU1heDtcbiAgICAgIHNlY29uZGFyeURvbWFpbk1pbiA9IHBvc1NlY1JhdGlvICogZWZmZWN0aXZlUHJpbWFyeU1pbjtcbiAgICB9XG4gICAgaWYgKHNlY29uZGFyeURvbWFpbk1heCA9PT0gMCAmJiBlZmZlY3RpdmVQcmltYXJ5TWF4ID4gMCkge1xuICAgICAgY29uc3QgcG9zU2VjUmF0aW8gPSBzZWNvbmRhcnlEb21haW5NaW4gLyBlZmZlY3RpdmVQcmltYXJ5TWluO1xuICAgICAgc2Vjb25kYXJ5RG9tYWluTWF4ID0gcG9zU2VjUmF0aW8gKiBlZmZlY3RpdmVQcmltYXJ5TWF4O1xuICAgIH1cbiAgICBjb25zdCB5U2NhbGVTZWNvbmRhcnkgPSBzY2FsZUxpbmVhcihcbiAgICAgIFtzZWNvbmRhcnlEb21haW5NaW4sIHNlY29uZGFyeURvbWFpbk1heF0sXG4gICAgICBzY2FsZVJhbmdlLFxuICAgICk7XG5cbiAgICBjb25zdCB0aWNrczogR2VuZXJpY1RpY2tbXSA9IHByaW1hcnlUaWNrcy5tYXAodGljayA9PiAoe1xuICAgICAgLi4udGljayxcbiAgICAgIHNlY29uZGFyeUxhYmVsOiBwaXBlVHJhbnNmb3JtKFxuICAgICAgICB5U2NhbGVTZWNvbmRhcnkuaW52ZXJ0KHlTY2FsZSh0aWNrLnJhd1kpKSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICksXG4gICAgfSkpO1xuXG4gICAgY29uc3Qgc2NhbGUgPSAoaW5wdXQ6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBudW1iZXIgPT4ge1xuICAgICAgaWYgKGlzU2Vjb25kYXJ5KSB7XG4gICAgICAgIHJldHVybiB5U2NhbGVTZWNvbmRhcnkoaW5wdXQpICsgc3RhcnRPZmZzZXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4geVNjYWxlKGlucHV0KSArIHN0YXJ0T2Zmc2V0O1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjYWxlLFxuICAgICAgdGlja3MsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGNEYXRhU2NhbGluZ1ZhbHVlcyhkYXRhOiBQcm9jZXNzRGF0YSwgY29uZmlnOiBDb25maWcpIHtcbiAgICBjb25zdCBpc1N0YWNrZWQgPSBpc1N0YWNrZWREYXRhKGNvbmZpZyk7XG4gICAgY29uc3QgcHJpbWFyeURvbWFpblZhbHVlcyA9IGNhbGNZU2NhbGVEb21haW5WYWx1ZXMoZGF0YSwgaXNTdGFja2VkLCBmYWxzZSk7XG4gICAgY29uc3Qgc2Vjb25kYXJ5RG9tYWluVmFsdWVzID0gY2FsY1lTY2FsZURvbWFpblZhbHVlcyhkYXRhLCBpc1N0YWNrZWQsIHRydWUpO1xuICAgIGNvbnN0IHByaW1hcnlEYXRhTWF4ID0gTWF0aC5tYXgoLi4ucHJpbWFyeURvbWFpblZhbHVlcy5tYXAodmFsID0+IHZhbC5tYXgpKTtcbiAgICBjb25zdCBzZWNvbmRhcnlEYXRhTWF4ID0gTWF0aC5tYXgoXG4gICAgICAuLi5zZWNvbmRhcnlEb21haW5WYWx1ZXMubWFwKHZhbCA9PiB2YWwubWF4KSxcbiAgICApO1xuICAgIGNvbnN0IHByaW1hcnlEYXRhTWluID0gTWF0aC5taW4oLi4ucHJpbWFyeURvbWFpblZhbHVlcy5tYXAodmFsID0+IHZhbC5taW4pKTtcbiAgICBjb25zdCBzZWNvbmRhcnlEYXRhTWluID0gTWF0aC5taW4oXG4gICAgICAuLi5zZWNvbmRhcnlEb21haW5WYWx1ZXMubWFwKHZhbCA9PiB2YWwubWluKSxcbiAgICApO1xuICAgIGxldCBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4ID0gMTtcbiAgICBsZXQgc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZyA9IDE7XG5cbiAgICAvL0NhbGN1bGF0aW5nIGhvdyBtdWNoIHdlIG5lZWQgdG8gbXVsdGlwbGUgdGhlIGRvbWFpbiBieSB0byAnZml0JyBib3RoIGF4ZXMnIGRhdGFcbiAgICBpZiAoaXNTdGFja2VkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaW1hcnlEb21haW5WYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy9DaGVjayBwb3NpdGl2ZSBtYXhcbiAgICAgICAgY29uc3QgcHJpbWFyeVZhbCA9IHByaW1hcnlEb21haW5WYWx1ZXNbaV0ubWF4O1xuICAgICAgICBjb25zdCBzZWNvbmRhcnlWYWwgPSBzZWNvbmRhcnlEb21haW5WYWx1ZXNbaV0ubWF4O1xuICAgICAgICBjb25zdCBwcmltYXJ5UmF0aW8gPVxuICAgICAgICAgIHByaW1hcnlEYXRhTWF4ICE9PSAwID8gcHJpbWFyeVZhbCAvIHByaW1hcnlEYXRhTWF4IDogMDtcbiAgICAgICAgY29uc3Qgc2Vjb25kYXJ5UmF0aW8gPVxuICAgICAgICAgIHNlY29uZGFyeURhdGFNYXggIT09IDAgPyBzZWNvbmRhcnlWYWwgLyBzZWNvbmRhcnlEYXRhTWF4IDogMDtcbiAgICAgICAgY29uc3QgbXVsdFZhbCA9IHByaW1hcnlSYXRpbyArIHNlY29uZGFyeVJhdGlvO1xuICAgICAgICBpZiAobXVsdFZhbCA+IHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXgpIHtcbiAgICAgICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4ID0gbXVsdFZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vQ2hlY2sgbmVnYXRpdmUgbWluXG4gICAgICAgIGNvbnN0IHByaW1hcnlOZWdWYWwgPVxuICAgICAgICAgIHByaW1hcnlEb21haW5WYWx1ZXNbaV0ubWluIDwgMCA/IHByaW1hcnlEb21haW5WYWx1ZXNbaV0ubWluIDogMDtcbiAgICAgICAgY29uc3Qgc2Vjb25kYXJ5TmVnVmFsID1cbiAgICAgICAgICBzZWNvbmRhcnlEb21haW5WYWx1ZXNbaV0ubWluIDwgMCA/IHNlY29uZGFyeURvbWFpblZhbHVlc1tpXS5taW4gOiAwO1xuICAgICAgICBjb25zdCBwcmltYXJ5TmVnUmF0aW8gPVxuICAgICAgICAgIHByaW1hcnlEYXRhTWluICE9PSAwID8gcHJpbWFyeU5lZ1ZhbCAvIHByaW1hcnlEYXRhTWluIDogMDtcbiAgICAgICAgY29uc3Qgc2Vjb25kYXJ5TmVnUmF0aW8gPVxuICAgICAgICAgIHNlY29uZGFyeURhdGFNaW4gIT09IDAgPyBzZWNvbmRhcnlOZWdWYWwgLyBzZWNvbmRhcnlEYXRhTWluIDogMDtcbiAgICAgICAgY29uc3QgbmVnTXVsdFZhbCA9IHByaW1hcnlOZWdSYXRpbyArIHNlY29uZGFyeU5lZ1JhdGlvO1xuICAgICAgICBpZiAobmVnTXVsdFZhbCA+IHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWcpIHtcbiAgICAgICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnID0gbmVnTXVsdFZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwcmltYXJ5RGF0YU1pbixcbiAgICAgIHByaW1hcnlEYXRhTWF4LFxuICAgICAgc2Vjb25kYXJ5RGF0YU1pbixcbiAgICAgIHNlY29uZGFyeURhdGFNYXgsXG4gICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4LFxuICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZyxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FsY1lTY2FsZURvbWFpblZhbHVlcyhcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgICBpc1N0YWNrZWQ6IGJvb2xlYW4sXG4gICAgZm9yU2Vjb25kYXJ5OiBib29sZWFuLFxuICApOiB7IG1heDogbnVtYmVyOyBtaW46IG51bWJlciB9W10ge1xuICAgIGlmIChkYXRhLnR5cGUgPT09ICdmbG93LXByb2Nlc3NlZCcpIHtcbiAgICAgIGlmIChmb3JTZWNvbmRhcnkpIHtcbiAgICAgICAgLy9GbG93IGNoYXJ0cyBkb24ndCBzdXBwb3J0IHNlY29uZGFyeSBkYXRhXG4gICAgICAgIHJldHVybiBbeyBtaW46IDAsIG1heDogMCB9XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgbWF4OiBNYXRoLm1heCguLi5kYXRhLngubWFwKHggPT4geC50b3RhbENvdW50KSksXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cbiAgICBjb25zdCBwb3NzaWJseVN0YWNrZWRZcyA9IGRhdGEueXMubWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgIC8vSGFuZGxlIHN0YWNraW5nXG4gICAgICByZXR1cm4gaXNTdGFja2VkXG4gICAgICAgID8geS52YWx1ZXMubWFwKCh2YWwsIHhJbmRleCkgPT4ge1xuICAgICAgICAgICAgbGV0IHByZXZSdW5uaW5nVG90YWwgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgeUkgPSAwOyB5SSA8IHlJbmRleDsgeUkrKykge1xuICAgICAgICAgICAgICBpZiAoY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SSwgeEluZGV4LCBmYWxzZSkgIT09IGZvclNlY29uZGFyeSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFkZFZhbCA9IGRhdGEueXNbeUldLnZhbHVlc1t4SW5kZXhdO1xuICAgICAgICAgICAgICAvL09ubHkgc3RhY2sgdmFsdWVzIG9mIHRoZSBzYW1lIHNpZ25cbiAgICAgICAgICAgICAgaWYgKGFkZFZhbCA8IDAgPT09IHZhbCA8IDApIHtcbiAgICAgICAgICAgICAgICBwcmV2UnVubmluZ1RvdGFsICs9IGFkZFZhbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbCArIHByZXZSdW5uaW5nVG90YWw7XG4gICAgICAgICAgfSlcbiAgICAgICAgOiB5LnZhbHVlcztcbiAgICB9KTtcbiAgICBjb25zdCBzdXBwWXMgPSBoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSA/IGRhdGEuc3VwcGxlbWVudGFyeVlzIDogbnVsbDtcbiAgICBsZXQgcG9zc2libHlTdGFja2VkU3VwWXM6IG51bWJlcltdW10gPSBbXTtcbiAgICBpZiAoc3VwcFlzKSB7XG4gICAgICBwb3NzaWJseVN0YWNrZWRTdXBZcyA9IHN1cHBZcy5tYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgICAvL0hhbmRsZSBzdGFja2luZ1xuICAgICAgICByZXR1cm4gaXNTdGFja2VkXG4gICAgICAgICAgPyB5LnZhbHVlcy5tYXAoKHZhbCwgeEluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBwcmV2UnVubmluZ1RvdGFsID0gMDtcbiAgICAgICAgICAgICAgZm9yIChsZXQgeUkgPSAwOyB5SSA8IHlJbmRleDsgeUkrKykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUksIHhJbmRleCwgdHJ1ZSkgIT09IGZvclNlY29uZGFyeSB8fFxuICAgICAgICAgICAgICAgICAgc3VwcFlzW3lJXS5zdXBwbGVtZW50YWxJbmRleCAhPT0geS5zdXBwbGVtZW50YWxJbmRleFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFkZFZhbCA9IHN1cHBZc1t5SV0udmFsdWVzW3hJbmRleF07XG4gICAgICAgICAgICAgICAgLy9Pbmx5IHN0YWNrIHZhbHVlcyBvZiB0aGUgc2FtZSBzaWduXG4gICAgICAgICAgICAgICAgaWYgKGFkZFZhbCA8IDAgPT09IHZhbCA8IDApIHtcbiAgICAgICAgICAgICAgICAgIHByZXZSdW5uaW5nVG90YWwgKz0gYWRkVmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdmFsICsgcHJldlJ1bm5pbmdUb3RhbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiB5LnZhbHVlcztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHNjYWxlUmFuZ2U6IHsgbWF4OiBudW1iZXI7IG1pbjogbnVtYmVyIH1bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtYXhOb3JtWSA9IE1hdGgubWF4KFxuICAgICAgICAuLi5wb3NzaWJseVN0YWNrZWRZcy5tYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgaSwgZmFsc2UpICE9PSBmb3JTZWNvbmRhcnkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geVtpXTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgY29uc3QgbWluTm9ybVkgPSBNYXRoLm1pbihcbiAgICAgICAgLi4ucG9zc2libHlTdGFja2VkWXMubWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAoY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIGksIGZhbHNlKSAhPT0gZm9yU2Vjb25kYXJ5KSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHlbaV07XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1heFN1cFkgPSBzdXBwWXNcbiAgICAgICAgPyBNYXRoLm1heChcbiAgICAgICAgICAgIC4uLnBvc3NpYmx5U3RhY2tlZFN1cFlzLm1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgaSwgdHJ1ZSkgIT09IGZvclNlY29uZGFyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB5W2ldO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgICA6IDA7XG4gICAgICBjb25zdCBtaW5TdXBZID0gc3VwcFlzXG4gICAgICAgID8gTWF0aC5taW4oXG4gICAgICAgICAgICAuLi5wb3NzaWJseVN0YWNrZWRTdXBZcy5tYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIGksIHRydWUpICE9PSBmb3JTZWNvbmRhcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4geVtpXTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIClcbiAgICAgICAgOiAwO1xuICAgICAgY29uc3QgbWF4ID1cbiAgICAgICAgbWF4Tm9ybVkgPiAwICYmIG1heE5vcm1ZID4gbWF4U3VwWVxuICAgICAgICAgID8gbWF4Tm9ybVlcbiAgICAgICAgICA6IG1heFN1cFkgPiAwXG4gICAgICAgICAgPyBtYXhTdXBZXG4gICAgICAgICAgOiAwO1xuICAgICAgY29uc3QgbWluID1cbiAgICAgICAgbWluTm9ybVkgPCAwICYmIG1pbk5vcm1ZIDwgbWluU3VwWVxuICAgICAgICAgID8gbWluTm9ybVlcbiAgICAgICAgICA6IG1pblN1cFkgPCAwXG4gICAgICAgICAgPyBtaW5TdXBZXG4gICAgICAgICAgOiAwO1xuICAgICAgc2NhbGVSYW5nZS5wdXNoKHsgbWF4LCBtaW4gfSk7XG4gICAgfVxuICAgIHJldHVybiBzY2FsZVJhbmdlO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FsY3VsYXRlQmFyUG9zaXRpb24oXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICAgIGJ1Y2tldE51bTogbnVtYmVyLFxuICAgIGNsdXN0ZXJOdW06IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICBjb25zdCBvZmZzZXQgPVxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuY2hhcnREYXRhRGlyZWN0aW9uID09PSAndmVydGljYWwnXG4gICAgICAgID8gY2hhcnRTaXppbmdWYWx1ZXMudG90YWxMZWZ0T2Zmc2V0XG4gICAgICAgIDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxUb3BPZmZzZXQ7XG4gICAgY29uc3QgY2x1c3Rlck9mZnNldCA9XG4gICAgICBjbHVzdGVyTnVtICpcbiAgICAgIChjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplICsgY2hhcnRTaXppbmdWYWx1ZXMuYmFyQ2x1c3RlckdhcCk7XG4gICAgY29uc3QgY3VtdWxhdGl2ZUJ1Y2tldEdhcCA9IGdldFRvdGFsUHJlQnVja2V0R2FwKFxuICAgICAgZGF0YSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgYnVja2V0TnVtLFxuICAgICk7XG4gICAgcmV0dXJuIG9mZnNldCArIGN1bXVsYXRpdmVCdWNrZXRHYXAgKyBjbHVzdGVyT2Zmc2V0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FsY3VsYXRlSG9yaXpvbnRhbEJhclBhdGgoXG4gICAgbGVmdFNpZGVSb3VuZDogYm9vbGVhbixcbiAgICByaWdodFNpZGVSb3VuZDogYm9vbGVhbixcbiAgICB4VmFsdWU6IG51bWJlcixcbiAgICB5VmFsdWU6IG51bWJlcixcbiAgICBob3JSOiBudW1iZXIsXG4gICAgdmVyUjogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKGxlZnRTaWRlUm91bmQgJiYgcmlnaHRTaWRlUm91bmQpIHtcbiAgICAgIC8vQm90aC1zaWRlcyByb3VuZGluZyB2YXJpYXRpb25cbiAgICAgIGNvbnN0IHBhdGhEID0gYFxuICAgICAgICBNICR7eFZhbHVlICsgaG9yUn0sJHt5VmFsdWV9XG4gICAgICAgIGggJHt3aWR0aCAtIGhvclIgKiAyfVxuICAgICAgICBxJHtob3JSfSwwICR7aG9yUn0sJHt2ZXJSfVxuICAgICAgICB2ICR7aGVpZ2h0IC0gdmVyUiAqIDJ9XG4gICAgICAgIHEwLCR7dmVyUn0gLSR7aG9yUn0sJHt2ZXJSfVxuICAgICAgICBoICR7LSh3aWR0aCAtIGhvclIgKiAyKX1cbiAgICAgICAgcS0ke2hvclJ9LDAgLSR7aG9yUn0sLSR7dmVyUn1cbiAgICAgICAgdiAtJHtoZWlnaHQgLSB2ZXJSICogMn1cbiAgICAgICAgcTAsLSR7dmVyUn0gJHtob3JSfSwtJHt2ZXJSfVxuICAgICAgICBaXG4gICAgICBgO1xuICAgICAgcmV0dXJuIHBhdGhEO1xuICAgIH1cbiAgICBpZiAobGVmdFNpZGVSb3VuZCkge1xuICAgICAgLy9MZWZ0LXNpZGUgcm91bmRpbmcgdmFyaWF0aW9uXG4gICAgICBjb25zdCBwYXRoRCA9IGBcbiAgICAgICAgTSAke3hWYWx1ZSArIGhvclJ9LCR7eVZhbHVlfVxuICAgICAgICBoICR7d2lkdGggLSBob3JSfVxuICAgICAgICB2ICR7aGVpZ2h0fVxuICAgICAgICBoICR7LSh3aWR0aCAtIGhvclIpfVxuICAgICAgICBxLSR7aG9yUn0sMCAtJHtob3JSfSwtJHt2ZXJSfVxuICAgICAgICB2IC0ke2hlaWdodCAtIHZlclIgKiAyfVxuICAgICAgICBxMCwtJHt2ZXJSfSAke2hvclJ9LC0ke3ZlclJ9XG4gICAgICAgIFpcbiAgICAgIGA7XG4gICAgICByZXR1cm4gcGF0aEQ7XG4gICAgfVxuICAgIGlmIChyaWdodFNpZGVSb3VuZCkge1xuICAgICAgLy9SaWdodC1zaWRlIHJvdW5kaW5nIHZhcmlhdGlvblxuICAgICAgY29uc3QgcGF0aEQgPSBgXG4gICAgICAgIE0gJHt4VmFsdWV9LCR7eVZhbHVlfVxuICAgICAgICBoICR7d2lkdGggLSBob3JSfVxuICAgICAgICBxJHtob3JSfSwwICR7aG9yUn0sJHt2ZXJSfVxuICAgICAgICB2ICR7aGVpZ2h0IC0gdmVyUiAqIDJ9XG4gICAgICAgIHEwLCR7dmVyUn0gLSR7aG9yUn0sJHt2ZXJSfVxuICAgICAgICBoICR7LSh3aWR0aCAtIGhvclIpfVxuICAgICAgICBaXG4gICAgICBgO1xuICAgICAgcmV0dXJuIHBhdGhEO1xuICAgIH1cbiAgICAvL05vLXJvdW5kaW5nIHZhcmlhdGlvblxuICAgIGNvbnN0IHBhdGhEID0gYFxuICAgICAgTSAke3hWYWx1ZX0sJHt5VmFsdWV9XG4gICAgICBoICR7d2lkdGh9XG4gICAgICB2ICR7aGVpZ2h0fVxuICAgICAgaCAkey13aWR0aH1cbiAgICAgIHYgLSR7aGVpZ2h0fVxuICAgICAgWlxuICAgIGA7XG4gICAgcmV0dXJuIHBhdGhEO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QnVja2V0QW5kQ2x1c3Rlck51bUZvckhvdmVyKFxuICAgIHBvczogbnVtYmVyLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBidWNrZXRDb3VudDogbnVtYmVyLFxuICApOiB7XG4gICAgYnVja2V0TnVtOiBudW1iZXI7XG4gICAgY2x1c3Rlck51bTogbnVtYmVyO1xuICAgIGNsdXN0ZXJOb3JtQ291bnQ6IG51bWJlcjtcbiAgICBjbHVzdGVyTnVtVHlwZTogJ25vcm0nIHwgJ3N1cHAnO1xuICB9IHwgbnVsbCB7XG4gICAgbGV0IGJ1Y2tldExlZXdheSA9IGNoYXJ0U2l6aW5nVmFsdWVzLmJ1Y2tldEdhcCAvIDQ7XG4gICAgLy9pZiB0aGVyZSdzIG9ubHkgMSBkYXRhIHBvaW50LCB1c2UgdGhlIG91dGVyR2FwIGFzIGxlZXdheSBpbnN0ZWFkXG4gICAgaWYgKGRhdGEueC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGJ1Y2tldExlZXdheSA9IGNoYXJ0U2l6aW5nVmFsdWVzLm91dGVyR2FwIC8gNDtcbiAgICB9XG4gICAgY29uc3QgYmFyTGVld2F5ID0gY2hhcnRTaXppbmdWYWx1ZXMuYmFyQ2x1c3RlckdhcCAvIDI7XG5cbiAgICBjb25zdCBvZmZzZXQgPVxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuY2hhcnREYXRhRGlyZWN0aW9uID09PSAndmVydGljYWwnXG4gICAgICAgID8gY2hhcnRTaXppbmdWYWx1ZXMudG90YWxMZWZ0T2Zmc2V0XG4gICAgICAgIDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxUb3BPZmZzZXQ7XG4gICAgY29uc3QgcmVsYXRpdmVQb3MgPSBwb3MgLSBvZmZzZXQ7XG4gICAgbGV0IGJ1Y2tldE51bSA9IC0xO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVja2V0Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgYnVja2V0U3RhcnRQb3MgPSBnZXRUb3RhbFByZUJ1Y2tldEdhcChcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgaSxcbiAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIGJ1Y2tldFN0YXJ0UG9zIC0gYnVja2V0TGVld2F5IDwgcmVsYXRpdmVQb3MgJiZcbiAgICAgICAgYnVja2V0U3RhcnRQb3MgK1xuICAgICAgICAgIGdldEJ1Y2tldFNpemUoZGF0YSwgY29uZmlnLCBjaGFydFNpemluZ1ZhbHVlcykgK1xuICAgICAgICAgIGJ1Y2tldExlZXdheSA+XG4gICAgICAgICAgcmVsYXRpdmVQb3NcbiAgICAgICkge1xuICAgICAgICBidWNrZXROdW0gPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGJ1Y2tldE51bSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoIWlzQ2x1c3RlcmVkRGF0YShkYXRhLCBjb25maWcsIHRydWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBidWNrZXROdW0sXG4gICAgICAgIGNsdXN0ZXJOdW06IDAsXG4gICAgICAgIGNsdXN0ZXJOb3JtQ291bnQ6IDEsXG4gICAgICAgIGNsdXN0ZXJOdW1UeXBlOiAnbm9ybScsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlbGF0aXZlQnVja2V0UG9zID1cbiAgICAgIHJlbGF0aXZlUG9zIC1cbiAgICAgIGdldFRvdGFsUHJlQnVja2V0R2FwKGRhdGEsIGNvbmZpZywgY2hhcnRTaXppbmdWYWx1ZXMsIGJ1Y2tldE51bSk7XG4gICAgY29uc3QgY2x1c3RlckNvdW50ID0gZ2V0Q2x1c3RlckluZm9Gb3JCdWNrZXQoZGF0YSwgY29uZmlnKTtcbiAgICBsZXQgY2x1c3Rlck51bSA9IC0xO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2x1c3RlckNvdW50LnRvdGFsOyBpKyspIHtcbiAgICAgIGNvbnN0IGJhclN0YXJ0UG9zID1cbiAgICAgICAgKGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgKyBjaGFydFNpemluZ1ZhbHVlcy5iYXJDbHVzdGVyR2FwKSAqIGk7XG4gICAgICBpZiAoXG4gICAgICAgIGJhclN0YXJ0UG9zIC0gYmFyTGVld2F5IDwgcmVsYXRpdmVCdWNrZXRQb3MgJiZcbiAgICAgICAgYmFyU3RhcnRQb3MgKyBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplICsgYmFyTGVld2F5ID4gcmVsYXRpdmVCdWNrZXRQb3NcbiAgICAgICkge1xuICAgICAgICBjbHVzdGVyTnVtID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjbHVzdGVyTnVtID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGxldCBjbHVzdGVyTnVtVHlwZTogJ25vcm0nIHwgJ3N1cHAnID0gJ25vcm0nO1xuICAgIGlmIChjbHVzdGVyTnVtID49IGNsdXN0ZXJDb3VudC5ub3JtQ291bnQpIHtcbiAgICAgIGNsdXN0ZXJOdW1UeXBlID0gJ3N1cHAnO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBidWNrZXROdW0sXG4gICAgICBjbHVzdGVyTnVtLFxuICAgICAgY2x1c3Rlck5vcm1Db3VudDogY2x1c3RlckNvdW50Lm5vcm1Db3VudCxcbiAgICAgIGNsdXN0ZXJOdW1UeXBlLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kTmVhcmVzdEluZGV4V2l0aFNlY29uZGFyeShcbiAgICB5SW5mbzogeyB2YWx1ZTogbnVtYmVyOyBpc1NlY29uZGFyeTogYm9vbGVhbiB9W10sXG4gICAgeVBvczogbnVtYmVyLFxuICAgIHNjYWxlOiAoaW5wdXQ6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IG51bWJlcixcbiAgKSB7XG4gICAgbGV0IGZvdW5kSW5kZXggPSAwO1xuICAgIGxldCBjdXJyTWluRGlzdGFuY2UgPSBNYXRoLmFicyhcbiAgICAgIHNjYWxlKHlJbmZvWzBdLnZhbHVlLCB5SW5mb1swXS5pc1NlY29uZGFyeSkgLSB5UG9zLFxuICAgICk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB5SW5mby5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbmV3RGlzdGFuY2UgPSBNYXRoLmFicyhcbiAgICAgICAgc2NhbGUoeUluZm9baV0udmFsdWUsIHlJbmZvW2ldLmlzU2Vjb25kYXJ5KSAtIHlQb3MsXG4gICAgICApO1xuICAgICAgaWYgKG5ld0Rpc3RhbmNlIDwgY3Vyck1pbkRpc3RhbmNlKSB7XG4gICAgICAgIGZvdW5kSW5kZXggPSBpO1xuICAgICAgICBjdXJyTWluRGlzdGFuY2UgPSBuZXdEaXN0YW5jZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kSW5kZXg7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCYXJZSW5mbyhcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICB5SW5kZXg6IG51bWJlcixcbiAgICB4SW5kZXg6IG51bWJlcixcbiAgICBzY2FsZTogKGlucHV0OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiBudW1iZXIsXG4gICAgaXNTdXBwbGVtZW50YXJ5OiBib29sZWFuID0gZmFsc2UsXG4gICk6IHsgeVZhbHVlOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0ge1xuICAgIGNvbnN0IGlzU3RhY2tlZCA9IGlzU3RhY2tlZERhdGEoY29uZmlnKTtcbiAgICBjb25zdCBtaW5pbXVtU2l6ZSA9IGdldE1pbmltdW1EYXRhRWxlbWVudFNpemUoY29uZmlnKTtcbiAgICBjb25zdCB6ZXJvVmFsID0gc2NhbGUoMCwgdHJ1ZSk7XG4gICAgY29uc3QgeURhdGEgPSBnZXRNYWluT3JTdXBwWShkYXRhLCB5SW5kZXgsIGlzU3VwcGxlbWVudGFyeSk7XG4gICAgY29uc3Qgc2NhbGVWYWx1ZSA9IHNjYWxlKFxuICAgICAgeURhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgeEluZGV4LCBpc1N1cHBsZW1lbnRhcnkpLFxuICAgICk7XG4gICAgaWYgKHNjYWxlVmFsdWUgPiB6ZXJvVmFsKSB7XG4gICAgICBsZXQgcHJldkJhckhlaWdodHMgPSAwO1xuICAgICAgaWYgKGlzU3RhY2tlZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlJbmRleDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY2hlY2tEYXRhID0gZ2V0TWFpbk9yU3VwcFkoZGF0YSwgaSwgaXNTdXBwbGVtZW50YXJ5KTtcbiAgICAgICAgICAvL0JvdGggeURhdGEgYW5kIGNoZWNrRGF0YSBhcmUgZGVmaW5pdGVseSBTdXBwbGVtZW50YXJ5RGF0YVlzIGlmIGlzU3VwcGxlbWVudGFyeSBpcyB0cnVlLCBidXQgdGhleSBkb24ndCByZWFsaXplIGl0XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNTdXBwbGVtZW50YXJ5ICYmXG4gICAgICAgICAgICAnc3VwcGxlbWVudGFsSW5kZXgnIGluIHlEYXRhICYmXG4gICAgICAgICAgICAnc3VwcGxlbWVudGFsSW5kZXgnIGluIGNoZWNrRGF0YVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHlEYXRhLnN1cHBsZW1lbnRhbEluZGV4ICE9PSBjaGVja0RhdGEuc3VwcGxlbWVudGFsSW5kZXgpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNoZWNrVmFsdWUgPSBzY2FsZShcbiAgICAgICAgICAgIGNoZWNrRGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgaSwgeEluZGV4LCBpc1N1cHBsZW1lbnRhcnkpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy9Ta2lwIHBvc2l0aXZlIHZhbHVlc1xuICAgICAgICAgIGlmIChjaGVja1ZhbHVlIDwgemVyb1ZhbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByZXZCYXJIZWlnaHRzICs9IGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgICAgICAgIGNoZWNrVmFsdWUgLSB6ZXJvVmFsLFxuICAgICAgICAgICAgY2hlY2tEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgICAgbWluaW11bVNpemUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeVZhbHVlID0gemVyb1ZhbCArIHByZXZCYXJIZWlnaHRzO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgICBzY2FsZVZhbHVlIC0gemVyb1ZhbCxcbiAgICAgICAgeURhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7IHlWYWx1ZSwgaGVpZ2h0IH07XG4gICAgfVxuICAgIGxldCBwcmV2QmFySGVpZ2h0cyA9IDA7XG4gICAgaWYgKGlzU3RhY2tlZCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5SW5kZXg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGVja0RhdGEgPSBnZXRNYWluT3JTdXBwWShkYXRhLCBpLCBpc1N1cHBsZW1lbnRhcnkpO1xuICAgICAgICAvL0JvdGggeURhdGEgYW5kIGNoZWNrRGF0YSBhcmUgZGVmaW5pdGVseSBTdXBwbGVtZW50YXJ5RGF0YVlzIGlmIGlzU3VwcGxlbWVudGFyeSBpcyB0cnVlLCBidXQgdGhleSBkb24ndCByZWFsaXplIGl0XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpc1N1cHBsZW1lbnRhcnkgJiZcbiAgICAgICAgICAnc3VwcGxlbWVudGFsSW5kZXgnIGluIHlEYXRhICYmXG4gICAgICAgICAgJ3N1cHBsZW1lbnRhbEluZGV4JyBpbiBjaGVja0RhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHlEYXRhLnN1cHBsZW1lbnRhbEluZGV4ICE9PSBjaGVja0RhdGEuc3VwcGxlbWVudGFsSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja1ZhbHVlID0gc2NhbGUoXG4gICAgICAgICAgY2hlY2tEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgaSwgeEluZGV4LCBpc1N1cHBsZW1lbnRhcnkpLFxuICAgICAgICApO1xuICAgICAgICAvL1NraXAgbmVnYXRpdmUgdmFsdWVzXG4gICAgICAgIGlmIChjaGVja1ZhbHVlID4gemVyb1ZhbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHByZXZCYXJIZWlnaHRzICs9IGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgICAgICB6ZXJvVmFsIC0gY2hlY2tWYWx1ZSxcbiAgICAgICAgICBjaGVja0RhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgbWluaW11bVNpemUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGhlaWdodCA9IGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgIHplcm9WYWwgLSBzY2FsZVZhbHVlLFxuICAgICAgeURhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICBtaW5pbXVtU2l6ZSxcbiAgICApO1xuICAgIGNvbnN0IHlWYWx1ZSA9IHplcm9WYWwgLSBoZWlnaHQgLSBwcmV2QmFySGVpZ2h0cztcbiAgICByZXR1cm4geyB5VmFsdWUsIGhlaWdodCB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U3VwcEJhcllJbmZvVmlhWUluZGV4KFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIHlJbmRleDogbnVtYmVyLFxuICAgIHN1cHBJbmRleDogbnVtYmVyLFxuICAgIHhJbmRleDogbnVtYmVyLFxuICAgIHNjYWxlOiAoaW5wdXQ6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IG51bWJlcixcbiAgKTogeyB5VmFsdWU6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gICAgaWYgKCFoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSkge1xuICAgICAgcmV0dXJuIHsgeVZhbHVlOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICB9XG4gICAgY29uc3Qgc3VwcFlzID0gZGF0YS5zdXBwbGVtZW50YXJ5WXM7XG4gICAgLy8gRmluZCBzdXBwbGVtZW50YXJ5IGJhcnMgd2l0aCB0aGUgZ2l2ZW4gc3VwcGxlbWVudGFsSW5kZXhcbiAgICBjb25zdCBncm91cFN1cHBzID0gc3VwcFlzLmZpbHRlcihzID0+IHMuc3VwcGxlbWVudGFsSW5kZXggPT09IHN1cHBJbmRleCk7XG4gICAgLy8geUluZGV4IHJlZmVycyB0byB3aGljaCBZIHNlcmllcyAod2l0aGluIHRoZSBzdXBwbGVtZW50YWwgZ3JvdXApIHdlJ3JlIGxvb2tpbmcgYXRcbiAgICBpZiAoeUluZGV4ID49IDAgJiYgeUluZGV4IDwgZ3JvdXBTdXBwcy5sZW5ndGgpIHtcbiAgICAgIC8vIEZpbmQgdGhpcyBzdXBwIGluIHRoZSBvcmlnaW5hbCBhcnJheVxuICAgICAgY29uc3Qgc3VwcEluT3JpZ2luYWxBcnJheSA9IHN1cHBZcy5pbmRleE9mKGdyb3VwU3VwcHNbeUluZGV4XSk7XG4gICAgICByZXR1cm4gZ2V0QmFyWUluZm8oXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgc3VwcEluT3JpZ2luYWxBcnJheSxcbiAgICAgICAgeEluZGV4LFxuICAgICAgICBzY2FsZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7IHlWYWx1ZTogMCwgaGVpZ2h0OiAwIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRNYWluT3JTdXBwWShcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICB5SW5kZXg6IG51bWJlcixcbiAgICBpc1N1cHBsZW1lbnRhcnk6IGJvb2xlYW4sXG4gICk6IERhdGFZIHwgU3VwcGxlbWVudGFyeURhdGFZIHtcbiAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgJiYgaXNTdXBwbGVtZW50YXJ5KSB7XG4gICAgICByZXR1cm4gZGF0YS5zdXBwbGVtZW50YXJ5WXNbeUluZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEueXNbeUluZGV4XTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJhclhJbmZvKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIHlJbmRleDogbnVtYmVyLFxuICAgIHhJbmRleDogbnVtYmVyLFxuICAgIHNjYWxlOiAoaW5wdXQ6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IG51bWJlcixcbiAgICBpc1N1cHBsZW1lbnRhcnk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogeyB4VmFsdWU6IG51bWJlcjsgd2lkdGg6IG51bWJlciB9IHtcbiAgICBjb25zdCBpc1N0YWNrZWQgPSBpc1N0YWNrZWREYXRhKGNvbmZpZyk7XG4gICAgY29uc3QgbWluaW11bVNpemUgPSBnZXRNaW5pbXVtRGF0YUVsZW1lbnRTaXplKGNvbmZpZyk7XG4gICAgY29uc3QgemVyb1ZhbCA9IHNjYWxlKDAsIHRydWUpO1xuICAgIGNvbnN0IHlEYXRhID0gZ2V0TWFpbk9yU3VwcFkoZGF0YSwgeUluZGV4LCBpc1N1cHBsZW1lbnRhcnkpO1xuICAgIGNvbnN0IHNjYWxlVmFsdWUgPSBzY2FsZShcbiAgICAgIHlEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCwgaXNTdXBwbGVtZW50YXJ5KSxcbiAgICApO1xuICAgIGlmIChzY2FsZVZhbHVlIDwgemVyb1ZhbCkge1xuICAgICAgbGV0IHByZXZCYXJXaWR0aHMgPSAwO1xuICAgICAgaWYgKGlzU3RhY2tlZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlJbmRleDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY2hlY2tEYXRhID0gZ2V0TWFpbk9yU3VwcFkoZGF0YSwgaSwgaXNTdXBwbGVtZW50YXJ5KTtcbiAgICAgICAgICAvL0JvdGggeURhdGEgYW5kIGNoZWNrRGF0YSBhcmUgZGVmaW5pdGVseSBTdXBwbGVtZW50YXJ5RGF0YVlzIGlmIGlzU3VwcGxlbWVudGFyeSBpcyB0cnVlLCBidXQgdGhleSBkb24ndCByZWFsaXplIGl0XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNTdXBwbGVtZW50YXJ5ICYmXG4gICAgICAgICAgICAnc3VwcGxlbWVudGFsSW5kZXgnIGluIHlEYXRhICYmXG4gICAgICAgICAgICAnc3VwcGxlbWVudGFsSW5kZXgnIGluIGNoZWNrRGF0YVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHlEYXRhLnN1cHBsZW1lbnRhbEluZGV4ICE9PSBjaGVja0RhdGEuc3VwcGxlbWVudGFsSW5kZXgpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNoZWNrVmFsID0gc2NhbGUoXG4gICAgICAgICAgICBjaGVja0RhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIGksIHhJbmRleCwgaXNTdXBwbGVtZW50YXJ5KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vU2tpcCBwb3NpdGl2ZSB2YWx1ZXNcbiAgICAgICAgICBpZiAoY2hlY2tWYWwgPiB6ZXJvVmFsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJldkJhcldpZHRocyArPSBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICAgICAgICB6ZXJvVmFsIC0gY2hlY2tWYWwsXG4gICAgICAgICAgICBjaGVja0RhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB3aWR0aCA9IGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgICAgemVyb1ZhbCAtIHNjYWxlVmFsdWUsXG4gICAgICAgIHlEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICk7XG4gICAgICBjb25zdCB4VmFsdWUgPSB6ZXJvVmFsIC0gd2lkdGggLSBwcmV2QmFyV2lkdGhzO1xuICAgICAgcmV0dXJuIHsgeFZhbHVlLCB3aWR0aCB9O1xuICAgIH1cbiAgICBsZXQgcHJldkJhcldpZHRocyA9IDA7XG4gICAgaWYgKGlzU3RhY2tlZCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5SW5kZXg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGVja0RhdGEgPSBnZXRNYWluT3JTdXBwWShkYXRhLCBpLCBpc1N1cHBsZW1lbnRhcnkpO1xuICAgICAgICAvL0JvdGggeURhdGEgYW5kIGNoZWNrRGF0YSBhcmUgZGVmaW5pdGVseSBTdXBwbGVtZW50YXJ5RGF0YVlzIGlmIGlzU3VwcGxlbWVudGFyeSBpcyB0cnVlLCBidXQgdGhleSBkb24ndCByZWFsaXplIGl0XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpc1N1cHBsZW1lbnRhcnkgJiZcbiAgICAgICAgICAnc3VwcGxlbWVudGFsSW5kZXgnIGluIHlEYXRhICYmXG4gICAgICAgICAgJ3N1cHBsZW1lbnRhbEluZGV4JyBpbiBjaGVja0RhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHlEYXRhLnN1cHBsZW1lbnRhbEluZGV4ICE9PSBjaGVja0RhdGEuc3VwcGxlbWVudGFsSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja1ZhbCA9IHNjYWxlKFxuICAgICAgICAgIGNoZWNrRGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIGksIHhJbmRleCwgaXNTdXBwbGVtZW50YXJ5KSxcbiAgICAgICAgKTtcbiAgICAgICAgLy9Ta2lwIG5lZ2F0aXZlIHZhbHVlc1xuICAgICAgICBpZiAoY2hlY2tWYWwgPCB6ZXJvVmFsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcHJldkJhcldpZHRocyArPSBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICAgICAgY2hlY2tWYWwgLSB6ZXJvVmFsLFxuICAgICAgICAgIGNoZWNrRGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeFZhbHVlID0gcHJldkJhcldpZHRocyArIHplcm9WYWw7XG4gICAgY29uc3Qgd2lkdGggPSBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICBzY2FsZVZhbHVlIC0gemVyb1ZhbCxcbiAgICAgIHlEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgbWluaW11bVNpemUsXG4gICAgKTtcbiAgICByZXR1cm4geyB4VmFsdWUsIHdpZHRoIH07XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0lmU2Vjb25kYXJ5KFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIHlJbmRleDogbnVtYmVyLFxuICAgIHhJbmRleDogbnVtYmVyLFxuICAgIGlzU3VwcGxlbWVudGFyeTogYm9vbGVhbiA9IGZhbHNlLFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoZGF0YS50eXBlID09PSAnbGFiZWxlZCcpIHtcbiAgICAgIGlmIChkYXRhLnhbeEluZGV4XS5pc1NlY29uZGFyeSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdldE1haW5PclN1cHBZKGRhdGEsIHlJbmRleCwgaXNTdXBwbGVtZW50YXJ5KS5pc1NlY29uZGFyeSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdhcm5VbnN1cHBvcnRlZFBhdHRlcm5zKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIHN1cHBvcnRlZFBhdHRlcm5zOiBQYXR0ZXJuW10sXG4gICAgY2hhcnRUeXBlOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGFsbFlzOiBEYXRhWVtdID0gW1xuICAgICAgLi4uZGF0YS55cyxcbiAgICAgIC4uLihoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSA/IGRhdGEuc3VwcGxlbWVudGFyeVlzIDogW10pLFxuICAgIF07XG4gICAgZm9yIChjb25zdCB5IG9mIGFsbFlzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHkucGF0dGVybiAmJlxuICAgICAgICB5LnBhdHRlcm4gIT09ICdzb2xpZCcgJiZcbiAgICAgICAgIXN1cHBvcnRlZFBhdHRlcm5zLmluY2x1ZGVzKHkucGF0dGVybilcbiAgICAgICkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYEhlYWRzIHVwISBUaGUgJyR7eS5wYXR0ZXJufScgcGF0dGVybiBpc24ndCBzdXBwb3J0ZWQgZm9yICR7Y2hhcnRUeXBlfSBjaGFydHMuIEZhbGxpbmcgYmFjayB0byBzb2xpZC5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdhcm5GbG93RGF0YShcbiAgICBkYXRhOiBJbnB1dERhdGEsXG4gICAgY2hhcnRUeXBlOiBzdHJpbmcsXG4gICk6IGRhdGEgaXMgTm9uRmxvd0RhdGEge1xuICAgIGlmIChkYXRhLnR5cGUgPT09ICdmbG93Jykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEhlYWRzIHVwISBUaGUgJ2Zsb3cnIGRhdGEgdHlwZSBpc24ndCBzdXBwb3J0ZWQgZm9yICR7Y2hhcnRUeXBlfSBjaGFydHMuYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gaGlkZSBzdHJpcHMgb3V0IGhpZGRlbiB5IHZhbHVlcyB3aGlsZSByZXRhaW5pbmcgdGhlIG9yaWdpbmFsIGluZGljZXNcbiAgLy8gZm9yIHRoZSByZW1haW5pbmcgdmlzaWJsZSB2YWx1ZXNcbiAgZnVuY3Rpb24gaGlkZShkYXRhOiBOb25GbG93RGF0YSk6IHtcbiAgICBkYXRhOiBOb25GbG93RGF0YTtcbiAgICB2aXNpYmxlSW5kaWNlczogbnVtYmVyW107XG4gICAgdmlzaWJsZVN1cHBJbmRpY2VzOiBudW1iZXJbXTtcbiAgfSB7XG4gICAgY29uc3QgdmlzaWJsZUluZGljZXMgPSBkYXRhLnlzXG4gICAgICAubWFwKCh5LCBpKSA9PiAoeyB5LCBpIH0pKVxuICAgICAgLmZpbHRlcigoeyB5IH0pID0+ICF5LmhpZGRlbilcbiAgICAgIC5tYXAoKHsgaSB9KSA9PiBpKTtcbiAgICBjb25zdCB2aXNpYmxlU3VwcEluZGljZXMgPSBoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKVxuICAgICAgPyBkYXRhLnN1cHBsZW1lbnRhcnlZc1xuICAgICAgICAgIC5tYXAoKHksIGkpID0+ICh7IHksIGkgfSkpXG4gICAgICAgICAgLmZpbHRlcigoeyB5IH0pID0+ICF5LmhpZGRlbilcbiAgICAgICAgICAubWFwKCh7IGkgfSkgPT4gaSlcbiAgICAgIDogW107XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgeXM6IHZpc2libGVJbmRpY2VzLm1hcChpID0+IGRhdGEueXNbaV0pLFxuICAgICAgICBzdXBwbGVtZW50YXJ5WXM6IHZpc2libGVTdXBwSW5kaWNlcy5tYXAoaSA9PiBkYXRhLnN1cHBsZW1lbnRhcnlZcyFbaV0pLFxuICAgICAgfSxcbiAgICAgIHZpc2libGVJbmRpY2VzLFxuICAgICAgdmlzaWJsZVN1cHBJbmRpY2VzLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB3YXRlcmZhbGxUcmFuc2Zvcm0oXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgaXNXYXRlcmZhbGw6IGJvb2xlYW4sXG4gICk6IHsgZGF0YTogTGFiZWxlZERhdGE7IG1hcDogTWFwPERhdGFZLCBEYXRhWT4gfSB7XG4gICAgY29uc3Qgd2F0ZXJmYWxsTWFwID0gbmV3IE1hcDxEYXRhWSwgRGF0YVk+KCk7XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ3RpbWVzZXJpZXMnIHx8ICFpc1dhdGVyZmFsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHR5cGU6ICdsYWJlbGVkJyxcbiAgICAgICAgICB4OiBbXSxcbiAgICAgICAgICB5czogW10sXG4gICAgICAgIH0sXG4gICAgICAgIG1hcDogd2F0ZXJmYWxsTWFwLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgbmV3RGF0YTogTGFiZWxlZERhdGEgPSB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgeDogWy4uLmRhdGEueCwgeyBsYWJlbDogJ1RvdGFsJyB9XSxcbiAgICAgIHlzOiBbXG4gICAgICAgIC4uLmRhdGEueXMubWFwKHkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1k6IERhdGFZID0ge1xuICAgICAgICAgICAgLi4ueSxcbiAgICAgICAgICAgIHZhbHVlczogWy4uLnkudmFsdWVzLCB5LnZhbHVlcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKV0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICB3YXRlcmZhbGxNYXAuc2V0KG5ld1ksIHkpO1xuICAgICAgICAgIHJldHVybiBuZXdZO1xuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogbmV3RGF0YSxcbiAgICAgIG1hcDogd2F0ZXJmYWxsTWFwLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBmbG93c1RyYW5zZm9ybShcbiAgICBjb25maWc6IEZsb3dDb25maWcsXG4gICAgZGF0YTogRmxvd0RhdGEsXG4gICk6IFByb2Nlc3NlZEZsb3dEYXRhIHtcbiAgICBjb25zdCByZXR1cm5CdWNrZXRzOiBGbG93QnVja2V0W10gPSBbXTtcbiAgICBjb25zdCBtYXhQYXRoTGVuZ3RoID0gTWF0aC5tYXgoLi4uZGF0YS55cy5tYXAoeSA9PiB5LnN0ZXBzLmxlbmd0aCkpO1xuICAgIGlmIChtYXhQYXRoTGVuZ3RoID4gMCAmJiBtYXhQYXRoTGVuZ3RoIDwgSW5maW5pdHkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4UGF0aExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGZsb3dCdWNrZXQ6IEZsb3dCdWNrZXQgPSB7XG4gICAgICAgICAgdG90YWxDb3VudDogMCxcbiAgICAgICAgICBzdWJCdWNrZXRzOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCB5IG9mIGRhdGEueXMpIHtcbiAgICAgICAgICBpZiAoeS52YWx1ZXMubGVuZ3RoID4gaSAmJiB5LnN0ZXBzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YkJ1Y2tldElkID0geS5zdGVwc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kU3ViQnVja2V0ID0gZmxvd0J1Y2tldC5zdWJCdWNrZXRzLmZpbmQoXG4gICAgICAgICAgICAgIHN1YkJ1Y2tldCA9PiBzdWJCdWNrZXQuaWQgPT09IHN1YkJ1Y2tldElkLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBzdWJCdWNrZXQ6IEZsb3dTdWJCdWNrZXQ7XG4gICAgICAgICAgICBpZiAoZm91bmRTdWJCdWNrZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBzdWJCdWNrZXQgPSBmb3VuZFN1YkJ1Y2tldDtcbiAgICAgICAgICAgICAgc3ViQnVja2V0LmNvdW50ICs9IHkudmFsdWVzW2ldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3ViQnVja2V0ID0ge1xuICAgICAgICAgICAgICAgIGlkOiBzdWJCdWNrZXRJZCxcbiAgICAgICAgICAgICAgICBjb3VudDogeS52YWx1ZXNbaV0sXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbnM6IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBmbG93QnVja2V0LnN1YkJ1Y2tldHMucHVzaChzdWJCdWNrZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmxvd0J1Y2tldC50b3RhbENvdW50ICs9IHkudmFsdWVzW2ldO1xuXG4gICAgICAgICAgICAvL0ZpbGwgaW4gYmFja3dhcmRzIGNvbm5lY3Rpb25zXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgZm91bmRDb25uZWN0aW9uID0gc3ViQnVja2V0LmNvbm5lY3Rpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zdGFydCA9PT0geS5zdGVwc1tpIC0gMV0gJiZcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uZW5kID09PSBzdWJCdWNrZXRJZCAmJlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5kaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChmb3VuZENvbm5lY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGZvdW5kQ29ubmVjdGlvbi5jb3VudCArPSB5LnZhbHVlc1tpXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb25uZWN0aW9uOiBGbG93Q29ubmVjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgICAgICAgIHN0YXJ0OiB5LnN0ZXBzW2kgLSAxXSxcbiAgICAgICAgICAgICAgICAgIGVuZDogc3ViQnVja2V0SWQsXG4gICAgICAgICAgICAgICAgICBjb3VudDogeS52YWx1ZXNbaV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBzdWJCdWNrZXQuY29ubmVjdGlvbnMucHVzaChuZXdDb25uZWN0aW9uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL0ZpbGwgaW4gZm9yd2FyZHMgY29ubmVjdGlvbnNcbiAgICAgICAgICAgIGlmIChpIDwgeS5zdGVwcy5sZW5ndGggLSAxICYmIGkgPCB5LnZhbHVlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kQ29ubmVjdGlvbiA9IHN1YkJ1Y2tldC5jb25uZWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPT5cbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc3RhcnQgPT09IHN1YkJ1Y2tldElkICYmXG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmVuZCA9PT0geS5zdGVwc1tpICsgMV0gJiZcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uZGlyZWN0aW9uID09PSAnZm9yd2FyZCcsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChmb3VuZENvbm5lY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGZvdW5kQ29ubmVjdGlvbi5jb3VudCArPSB5LnZhbHVlc1tpICsgMV07XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29ubmVjdGlvbjogRmxvd0Nvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdWJCdWNrZXRJZCxcbiAgICAgICAgICAgICAgICAgIGVuZDogeS5zdGVwc1tpICsgMV0sXG4gICAgICAgICAgICAgICAgICBjb3VudDogeS52YWx1ZXNbaSArIDFdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgc3ViQnVja2V0LmNvbm5lY3Rpb25zLnB1c2gobmV3Q29ubmVjdGlvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuQnVja2V0cy5wdXNoKGZsb3dCdWNrZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN1YkJ1Y2tldE9yZGVyaW5nTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZy5mbG93Q29uZmlnLnN1YkJ1Y2tldHNDb25maWcubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN1YkJ1Y2tldE9yZGVyaW5nTWFwLnNldChcbiAgICAgICAgY29uZmlnLmZsb3dDb25maWcuc3ViQnVja2V0c0NvbmZpZ1tpXS5idWNrZXRJZCxcbiAgICAgICAgaSxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IG1hcEdldCA9IChpZDogc3RyaW5nKTogbnVtYmVyID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kUmVzdWx0ID0gc3ViQnVja2V0T3JkZXJpbmdNYXAuZ2V0KGlkKTtcbiAgICAgIGlmIChmb3VuZFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmb3VuZFJlc3VsdDtcbiAgICAgIH1cbiAgICAgIC8vSWYgc29tZXRoaW5nIGlzbid0IGRlZmluZWQgaW4gdGhlIGNvbmZpZywgcHV0IGl0IGF0IHRoZSBlbmRcbiAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9O1xuXG4gICAgLy9FbnN1cmUgdGhlIGRhdGEgaXMgc29ydGVkIHRoZSBzYW1lIHRoZSB3YXkgdGhlIGNvbmZpZyBpcywgYW5kIGRyb3AgZW1wdHlcbiAgICAvL2JhcnMvY29ubmVjdGlvbnMgc28gdGhleSdyZSBuZWl0aGVyIGRpc3BsYXllZCBub3IgZmFjdG9yZWQgaW50byBzaXppbmdcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zsb3ctcHJvY2Vzc2VkJyxcbiAgICAgIHg6IHJldHVybkJ1Y2tldHMubWFwKGJ1Y2tldCA9PiAoe1xuICAgICAgICAuLi5idWNrZXQsXG4gICAgICAgIHN1YkJ1Y2tldHM6IGJ1Y2tldC5zdWJCdWNrZXRzXG4gICAgICAgICAgLmZpbHRlcihzdWJCdWNrZXQgPT4gc3ViQnVja2V0LmNvdW50ICE9PSAwKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtYXBHZXQoYS5pZCkgLSBtYXBHZXQoYi5pZCkpXG4gICAgICAgICAgLm1hcChzdWJCdWNrZXQgPT4gKHtcbiAgICAgICAgICAgIC4uLnN1YkJ1Y2tldCxcbiAgICAgICAgICAgIGNvbm5lY3Rpb25zOiBzdWJCdWNrZXQuY29ubmVjdGlvbnNcbiAgICAgICAgICAgICAgLmZpbHRlcihjb25uZWN0aW9uID0+IGNvbm5lY3Rpb24uY291bnQgIT09IDApXG4gICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RTb3J0ID0gbWFwR2V0KGEuc3RhcnQpIC0gbWFwR2V0KGIuc3RhcnQpO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdFNvcnQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFNvcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBtYXBHZXQoYS5lbmQpIC0gbWFwR2V0KGIuZW5kKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSkpLFxuICAgICAgfSkpLFxuICAgIH07XG4gIH1cblxuICB0eXBlIFZhbHVlVHlwZSA9ICdjb3VudCcgfCAnY3VycmVuY3knIHwgJ3BlcmNlbnRhZ2UnIHwgJ2RheXMnO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRQaXBlcyh2YWx1ZVR5cGU6IFZhbHVlVHlwZSkge1xuICAgIHN3aXRjaCAodmFsdWVUeXBlKSB7XG4gICAgICBjYXNlICdjb3VudCc6IHtcbiAgICAgICAgcmV0dXJuIHsgcGlwZTogbmV3IFNtYWxsTnVtYmVyUGlwZSgpLCBmdWxsUGlwZTogbmV3IE51bWJlclBpcGUoKSB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBpcGU6IG5ldyBTbWFsbEN1cnJlbmN5UGlwZSgpLFxuICAgICAgICAgIGZ1bGxQaXBlOiBuZXcgQ3VycmVuY3lQaXBlKCdlbi11cycpLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAncGVyY2VudGFnZSc6IHtcbiAgICAgICAgY29uc3QgcGlwZSA9IG5ldyBQZXJjZW50YWdlUGlwZSgpO1xuICAgICAgICByZXR1cm4geyBwaXBlLCBmdWxsUGlwZTogcGlwZSB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnZGF5cyc6IHtcbiAgICAgICAgY29uc3QgcGlwZSA9IG5ldyBEYXlzUGlwZSgpO1xuICAgICAgICByZXR1cm4geyBwaXBlLCBmdWxsUGlwZTogcGlwZSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGludGVydmFscyA9IFsneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5J10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIEludGVydmFsID0gKHR5cGVvZiBpbnRlcnZhbHMpW251bWJlcl07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdGVkRGF0ZShkYXRlRm9ybWF0OiBJbnRlcnZhbCwgZGF0ZTogRGF0ZSkge1xuICAgIGlmIChkYXRlRm9ybWF0ID09PSAncXVhcnRlcicpIHtcbiAgICAgIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgICBjb25zdCB5ZWFyID0gdXRjRm9ybWF0KGdldFRpbWVJbnRlcnZhbEZvcm1hdCgneWVhcicpKShkYXRlKTtcbiAgICAgIHJldHVybiBgUSR7cXVhcnRlcn0gJHt5ZWFyfWA7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1hdCA9IGdldFRpbWVJbnRlcnZhbEZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICByZXR1cm4gdXRjRm9ybWF0KGZvcm1hdCkoZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUaW1lSW50ZXJ2YWxGb3JtYXQoaW50ZXJ2YWw6IEludGVydmFsKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGludGVydmFsKSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHJldHVybiAnJW0vJWQvJVknO1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgIHJldHVybiAnJWIgJVknO1xuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIHJldHVybiAnJVknO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0Q2hhcnREYXRhVG9Eb251dERhdGEoXG4gICAgY2hhcnREYXRhOiBOb25GbG93RGF0YSxcbiAgKTogRG9udXREYXRhW10ge1xuICAgIGlmIChjaGFydERhdGEueXMuZmluZCh5ID0+IHkudmFsdWVzLmxlbmd0aCA+IDEpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBQaWUgY2hhcnRzIGRvbid0IHN1cHBvcnQgbXVsdGlwbGUgdmFsdWVzIHBlciBzZXJpZXNcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZG9udXREYXRhID0gY2hhcnREYXRhLnlzLm1hcCh5ID0+ICh7XG4gICAgICBsYWJlbDogeS5sYWJlbCxcbiAgICAgIGhpZGRlbjogeS5oaWRkZW4sXG4gICAgICB2YWx1ZTogeS52YWx1ZXMubGVuZ3RoID49IDEgPyB5LnZhbHVlc1swXSA6IDAsXG4gICAgICBpc1NlY29uZGFyeTogeS5pc1NlY29uZGFyeSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIGRvbnV0RGF0YTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFyY1RvUG9pbnQoYW5nbGU6IG51bWJlciwgcmFkaXVzOiBudW1iZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcmFkaXVzICogTWF0aC5jb3MoYW5nbGUgLSBNYXRoLlBJIC8gMiksXG4gICAgICB5OiByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkgLyAyKSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcG9pbnRUb0FyYyh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIGNvbnN0IHJhZGl1cyA9IE1hdGguaHlwb3QoeCwgeSk7XG4gICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih5LCB4KSArIE1hdGguUEkgLyAyO1xuICAgIC8vTm9ybWFsaXplIHRvIGJlIHdpdGhpbiByYW5nZSBbMCwgMs+AXVxuICAgIGFuZ2xlID0gKGFuZ2xlICsgMiAqIE1hdGguUEkpICUgKDIgKiBNYXRoLlBJKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhbmdsZSxcbiAgICAgIHJhZGl1cyxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RnVsbENoYXJ0U2NhbGVWYWx1ZXMoXG4gICAgY29uZmlnOiBDb25maWdXaXRoRnVsbFNjYWxpbmcsXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgICBwaXBlVHJhbnNmb3JtOiAoKHZhbHVlOiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuKSA9PiBzdHJpbmcpIHwgbnVsbCxcbiAgICBkYXRlRm9ybWF0OiAoKGRhdGU6IERhdGUpID0+IHN0cmluZykgfCBudWxsLFxuICApOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyB8IG51bGwge1xuICAgIGNvbnN0IGNoYXJ0RGF0YURpcmVjdGlvbiA9IGdldENoYXJ0RGF0YURpcmVjdGlvbihjb25maWcpO1xuICAgIGNvbnN0IGRlZmF1bHRTY2FsaW5nQ29uZmlnID0gZ2V0RGVmYXVsdFNjYWxpbmdDb25maWdCeUNoYXJ0VHlwZShcbiAgICAgIGNvbmZpZy50eXBlLFxuICAgICAgY29uZmlnLnNlY29uZGFyeVZhbHVlVHlwZSAhPT0gdW5kZWZpbmVkLFxuICAgICk7XG4gICAgY29uc3Qgc2NhbGluZ0NvbmZpZyA9IGNvbWJpbmVTY2FsaW5nSW5mbyhjb25maWcsIGRlZmF1bHRTY2FsaW5nQ29uZmlnKTtcbiAgICBjb25zdCBub25EYXRhQXhpc1ZhbHVlcyA9IGNhbGN1bGF0ZU5vbkRhdGFBeGlzVmFsdWVzKFxuICAgICAgY29uZmlnLFxuICAgICAgc2NhbGluZ0NvbmZpZyxcbiAgICAgIGNvbmZpZy5zY2FsaW5nQ29uZmlnPy5lbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNjYWxpbmdDb25maWcuZWxlbWVudFNjYWxlcyxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBkYXRhLFxuICAgICk7XG4gICAgY29uc3QgZGF0YUF4aXNWYWx1ZXMgPSBjYWxjdWxhdGVEYXRhQXhpc1ZhbHVlcyhcbiAgICAgIGNvbmZpZyxcbiAgICAgIHNjYWxpbmdDb25maWcsXG4gICAgICBjb25maWcuc2NhbGluZ0NvbmZpZz8uZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTY2FsaW5nQ29uZmlnLmVsZW1lbnRTY2FsZXMsXG4gICAgICBkaW1lbnNpb25zLFxuICAgICAgZGF0YSxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICk7XG4gICAgaWYgKFxuICAgICAgbm9uRGF0YUF4aXNWYWx1ZXMuc2l6aW5nRXJyb3IgPT09IHRydWUgfHxcbiAgICAgIGRhdGFBeGlzVmFsdWVzLnNpemluZ0Vycm9yID09PSB0cnVlXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZGF0YUxhYmVsU3RhcnRQYWRkaW5nID1cbiAgICAgIGdldERhdGFMYWJlbFNpemluZ0NvdW50KGRhdGEsIGNvbmZpZykuc3RhcnQgKlxuICAgICAgKGRhdGFBeGlzVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmcgKyBkYXRhQXhpc1ZhbHVlcy5kYXRhTGFiZWxUZXh0U2l6ZSk7XG4gICAgY29uc3QgZGF0YUxhYmVsRW5kUGFkZGluZyA9XG4gICAgICBnZXREYXRhTGFiZWxTaXppbmdDb3VudChkYXRhLCBjb25maWcpLmVuZCAqXG4gICAgICAoZGF0YUF4aXNWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZyArIGRhdGFBeGlzVmFsdWVzLmRhdGFMYWJlbFRleHRTaXplKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5ub25EYXRhQXhpc1ZhbHVlcyxcbiAgICAgIC4uLmRhdGFBeGlzVmFsdWVzLFxuICAgICAgbGVmdFBhZGRpbmc6XG4gICAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgPyBkYXRhQXhpc1ZhbHVlcy5zdGFydFBhZGRpbmdcbiAgICAgICAgICA6IG5vbkRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZyxcbiAgICAgIHJpZ2h0UGFkZGluZzpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IGRhdGFBeGlzVmFsdWVzLmVuZFBhZGRpbmdcbiAgICAgICAgICA6IG5vbkRhdGFBeGlzVmFsdWVzLmVuZFBhZGRpbmcsXG4gICAgICB0b3BQYWRkaW5nOlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gbm9uRGF0YUF4aXNWYWx1ZXMuc3RhcnRQYWRkaW5nXG4gICAgICAgICAgOiBkYXRhQXhpc1ZhbHVlcy5zdGFydFBhZGRpbmcsXG4gICAgICBib3R0b21QYWRkaW5nOlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gbm9uRGF0YUF4aXNWYWx1ZXMuZW5kUGFkZGluZ1xuICAgICAgICAgIDogZGF0YUF4aXNWYWx1ZXMuZW5kUGFkZGluZyxcbiAgICAgIHRvdGFsTGVmdE9mZnNldDpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IGRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZyArXG4gICAgICAgICAgICBkYXRhQXhpc1ZhbHVlcy5sZWZ0QnVja2V0TGFiZWwgK1xuICAgICAgICAgICAgZGF0YUxhYmVsU3RhcnRQYWRkaW5nXG4gICAgICAgICAgOiBub25EYXRhQXhpc1ZhbHVlcy5zdGFydFBhZGRpbmcgKyBub25EYXRhQXhpc1ZhbHVlcy5vdXRlckdhcCxcbiAgICAgIHRvdGFsUmlnaHRPZmZzZXQ6XG4gICAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgPyBkYXRhQXhpc1ZhbHVlcy5zdGFydFBhZGRpbmcgKyBkYXRhTGFiZWxFbmRQYWRkaW5nXG4gICAgICAgICAgOiBub25EYXRhQXhpc1ZhbHVlcy5lbmRQYWRkaW5nICsgbm9uRGF0YUF4aXNWYWx1ZXMub3V0ZXJHYXAsXG4gICAgICB0b3RhbFRvcE9mZnNldDpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IG5vbkRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZyArIG5vbkRhdGFBeGlzVmFsdWVzLm91dGVyR2FwXG4gICAgICAgICAgOiBkYXRhQXhpc1ZhbHVlcy5zdGFydFBhZGRpbmcgKyBkYXRhTGFiZWxTdGFydFBhZGRpbmcsXG4gICAgICB0b3RhbEJvdHRvbU9mZnNldDpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IG5vbkRhdGFBeGlzVmFsdWVzLmVuZFBhZGRpbmcgKyBub25EYXRhQXhpc1ZhbHVlcy5vdXRlckdhcFxuICAgICAgICAgIDogZGF0YUF4aXNWYWx1ZXMuZW5kUGFkZGluZyArIGRhdGFMYWJlbEVuZFBhZGRpbmcsXG4gICAgICB0YXJnZXRUaWNrQ291bnQ6IHNjYWxpbmdDb25maWcudGFyZ2V0VGlja0NvdW50LFxuICAgICAgc2l6ZUZvckRhdGE6IGRhdGFBeGlzVmFsdWVzLnNpemVGb3JEYXRhLFxuICAgICAgdG90YWxXaWR0aDpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IGRhdGFBeGlzVmFsdWVzLnRvdGFsU2l6ZVxuICAgICAgICAgIDogbm9uRGF0YUF4aXNWYWx1ZXMudG90YWxTaXplLFxuICAgICAgdG90YWxIZWlnaHQ6XG4gICAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgPyBub25EYXRhQXhpc1ZhbHVlcy50b3RhbFNpemVcbiAgICAgICAgICA6IGRhdGFBeGlzVmFsdWVzLnRvdGFsU2l6ZSxcbiAgICAgIGRhdGFMYWJlbFRleHRTaXplOiBjb25maWcuc2hvd0RhdGFMYWJlbHNcbiAgICAgICAgPyBkYXRhQXhpc1ZhbHVlcy5kYXRhTGFiZWxUZXh0U2l6ZVxuICAgICAgICA6IDAsXG4gICAgICBob3Jpem9udGFsQXhpc0xhYmVsVGV4dFNpemU6XG4gICAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJ1xuICAgICAgICAgID8gZGF0YUF4aXNWYWx1ZXMuYnVja2V0TGFiZWxUZXh0U2l6ZVxuICAgICAgICAgIDogZGF0YUF4aXNWYWx1ZXMuZGF0YUxhYmVsVGV4dFNpemUsIC8vVGlja3MgYW5kIGRhdGEgbGFiZWxzIHVzZSB0aGUgc2FtZSBmb3JtYXR0aW5nIG9uIHRoZSBzYW1lIGtpbmQgb2YgZGF0YVxuICAgICAgdmVydGljYWxBeGlzTGFiZWxUZXh0U2l6ZTogZGF0YUF4aXNWYWx1ZXMuZm9udFNpemUsXG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24sXG4gICAgICBob3Jpem9udGFsQ29udGFpbmVyU2NhbGU6IHNjYWxpbmdDb25maWcuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlLFxuICAgICAgdmVydGljYWxDb250YWluZXJTY2FsZTogc2NhbGluZ0NvbmZpZy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVOb25EYXRhQXhpc1ZhbHVlcyhcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBzY2FsaW5nQ29uZmlnOiBOb25FbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgICBlbGVtZW50U2NhbGVzOiBQYXJ0aWFsRWxlbWVudFNjYWxpbmdDb25maWcgfCB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFNpemluZzogRnVsbEVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICk6IHtcbiAgICBiYXJTaXplOiBudW1iZXI7XG4gICAgYmFyQ2x1c3RlckdhcDogbnVtYmVyO1xuICAgIGJ1Y2tldEdhcDogbnVtYmVyO1xuICAgIG91dGVyR2FwOiBudW1iZXI7XG4gICAgc3RhcnRQYWRkaW5nOiBudW1iZXI7XG4gICAgZW5kUGFkZGluZzogbnVtYmVyO1xuICAgIHRvdGFsU2l6ZTogbnVtYmVyO1xuICAgIHNpemluZ0Vycm9yPzogYm9vbGVhbjtcbiAgfSB7XG4gICAgY29uc3QgY2hhcnREYXRhRGlyZWN0aW9uID0gZ2V0Q2hhcnREYXRhRGlyZWN0aW9uKGNvbmZpZyk7XG4gICAgY29uc3QgYm91bmRpbmdEaW1lbnNpb24gPVxuICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyBkaW1lbnNpb25zLmhlaWdodFxuICAgICAgICA6IGRpbWVuc2lvbnMud2lkdGg7XG4gICAgY29uc3QgYXhpc1NjYWxlID1cbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gc2NhbGluZ0NvbmZpZz8udmVydGljYWxBeGlzU2NhbGVcbiAgICAgICAgOiBzY2FsaW5nQ29uZmlnPy5ob3Jpem9udGFsQXhpc1NjYWxlO1xuXG4gICAgY29uc3QgYmFyU2l6ZUNvbmZpZyA9IGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICAgIGVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2l6aW5nLFxuICAgICAgJ2JhclNpemUnLFxuICAgICk7XG4gICAgY29uc3QgYmFyQ2x1c3RlckdhcENvbmZpZyA9IGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICAgIGVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2l6aW5nLFxuICAgICAgJ2JhckNsdXN0ZXJHYXAnLFxuICAgICk7XG4gICAgY29uc3QgYnVja2V0R2FwQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICAnYnVja2V0R2FwJyxcbiAgICApO1xuICAgIGNvbnN0IG91dGVyR2FwQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICAnb3V0ZXJHYXAnLFxuICAgICk7XG4gICAgY29uc3Qgc3RhcnRQYWRkaW5nQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICd0b3BQYWRkaW5nJyA6ICdsZWZ0UGFkZGluZycsXG4gICAgKTtcbiAgICBjb25zdCBlbmRQYWRkaW5nQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICdib3R0b21QYWRkaW5nJyA6ICdyaWdodFBhZGRpbmcnLFxuICAgICk7XG5cbiAgICBjb25zdCBidWNrZXRDb3VudCA9IGRhdGEueC5sZW5ndGg7XG4gICAgbGV0IGJhckNvdW50ID0gMDtcbiAgICBsZXQgYmFyQ2x1c3RlckdhcENvdW50ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Y2tldENvdW50OyBpKyspIHtcbiAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdmbG93LXByb2Nlc3NlZCcpIHtcbiAgICAgICAgYmFyQ291bnQgKz0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJ1Y2tldENsdXN0ZXJDb3VudCA9IGdldENsdXN0ZXJJbmZvRm9yQnVja2V0KGRhdGEsIGNvbmZpZyk7XG4gICAgICAgIGJhckNvdW50ICs9IGJ1Y2tldENsdXN0ZXJDb3VudC50b3RhbDtcbiAgICAgICAgYmFyQ2x1c3RlckdhcENvdW50ICs9IGJ1Y2tldENsdXN0ZXJDb3VudC50b3RhbCAtIDE7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJ1Y2tldEdhcENvdW50ID0gYnVja2V0Q291bnQgLSAxO1xuXG4gICAgY29uc3QgYmFyVG90YWxTaXplID0gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICAgIGJhclNpemVDb25maWcsXG4gICAgICBiYXJDb3VudCxcbiAgICApO1xuICAgIGNvbnN0IGNsdXN0ZXJHYXBUb3RhbFNpemUgPSBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgICAgYmFyQ2x1c3RlckdhcENvbmZpZyxcbiAgICAgIGJhckNsdXN0ZXJHYXBDb3VudCxcbiAgICApO1xuICAgIGNvbnN0IGJ1Y2tldEdhcFRvdGFsU2l6ZSA9IGRldGVybWluZVBvc3NpYmxlU2l6ZXNPZkVsZW1lbnQoXG4gICAgICBidWNrZXRHYXBDb25maWcsXG4gICAgICBidWNrZXRHYXBDb3VudCxcbiAgICApO1xuICAgIGNvbnN0IG91dGVyR2FwVG90YWxTaXplID0gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICAgIG91dGVyR2FwQ29uZmlnLFxuICAgICAgMixcbiAgICApO1xuICAgIGNvbnN0IHN0YXJ0UGFkZGluZ1RvdGFsU2l6ZSA9IGRldGVybWluZVBvc3NpYmxlU2l6ZXNPZkVsZW1lbnQoXG4gICAgICBzdGFydFBhZGRpbmdDb25maWcsXG4gICAgICAxLFxuICAgICk7XG4gICAgY29uc3QgZW5kUGFkZGluZ1RvdGFsU2l6ZSA9IGRldGVybWluZVBvc3NpYmxlU2l6ZXNPZkVsZW1lbnQoXG4gICAgICBlbmRQYWRkaW5nQ29uZmlnLFxuICAgICAgMSxcbiAgICApO1xuXG4gICAgY29uc3QgY2FsY1RhcmdldFNpemUgPVxuICAgICAgYmFyVG90YWxTaXplLnRhcmdldCArXG4gICAgICBjbHVzdGVyR2FwVG90YWxTaXplLnRhcmdldCArXG4gICAgICBidWNrZXRHYXBUb3RhbFNpemUudGFyZ2V0ICtcbiAgICAgIG91dGVyR2FwVG90YWxTaXplLnRhcmdldCArXG4gICAgICBzdGFydFBhZGRpbmdUb3RhbFNpemUudGFyZ2V0ICtcbiAgICAgIGVuZFBhZGRpbmdUb3RhbFNpemUudGFyZ2V0O1xuXG4gICAgaWYgKFxuICAgICAgYXhpc1NjYWxlID09PSAnbm8tc2NhbGUnIHx8XG4gICAgICBjYWxjVGFyZ2V0U2l6ZSA9PT0gYm91bmRpbmdEaW1lbnNpb24gfHxcbiAgICAgIChheGlzU2NhbGUgPT09ICdncm93JyAmJiBjYWxjVGFyZ2V0U2l6ZSA+IGJvdW5kaW5nRGltZW5zaW9uKSB8fFxuICAgICAgKGF4aXNTY2FsZSA9PT0gJ3NocmluaycgJiYgY2FsY1RhcmdldFNpemUgPCBib3VuZGluZ0RpbWVuc2lvbilcbiAgICApIHtcbiAgICAgIC8vTm8gZWxlbWVudCBzY2FsaW5nIG5lY2Vzc2FyeSwgcmV0dXJuIGV2ZXJ5dGhpbmcgYXMgaXQncyB0YXJnZXQgdmFsdWVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhclNpemU6IGJhclNpemVDb25maWcudGFyZ2V0LFxuICAgICAgICBiYXJDbHVzdGVyR2FwOiBiYXJDbHVzdGVyR2FwQ29uZmlnLnRhcmdldCxcbiAgICAgICAgYnVja2V0R2FwOiBidWNrZXRHYXBDb25maWcudGFyZ2V0LFxuICAgICAgICBvdXRlckdhcDogb3V0ZXJHYXBDb25maWcudGFyZ2V0LFxuICAgICAgICBzdGFydFBhZGRpbmc6IHN0YXJ0UGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgIGVuZFBhZGRpbmc6IGVuZFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgICB0b3RhbFNpemU6IGNhbGNUYXJnZXRTaXplLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBjYWxjTWluU2l6ZSA9XG4gICAgICBiYXJUb3RhbFNpemUubWluICtcbiAgICAgIGNsdXN0ZXJHYXBUb3RhbFNpemUubWluICtcbiAgICAgIGJ1Y2tldEdhcFRvdGFsU2l6ZS5taW4gK1xuICAgICAgb3V0ZXJHYXBUb3RhbFNpemUubWluICtcbiAgICAgIHN0YXJ0UGFkZGluZ1RvdGFsU2l6ZS5taW4gK1xuICAgICAgZW5kUGFkZGluZ1RvdGFsU2l6ZS5taW47XG5cbiAgICAvL05vdGU6IFRoaXMgaXMgb25seSBhY3R1YWxseSBhIG1heCBzaXplIGlmIGFsbCBlbGVtZW50cyBoYXZlIGEgZGVmaW5lZCBtYXhcbiAgICBjb25zdCBjYWxjTWF4U2l6ZSA9XG4gICAgICBiYXJUb3RhbFNpemUubWF4ICtcbiAgICAgIGNsdXN0ZXJHYXBUb3RhbFNpemUubWF4ICtcbiAgICAgIGJ1Y2tldEdhcFRvdGFsU2l6ZS5tYXggK1xuICAgICAgb3V0ZXJHYXBUb3RhbFNpemUubWF4ICtcbiAgICAgIHN0YXJ0UGFkZGluZ1RvdGFsU2l6ZS5tYXggK1xuICAgICAgZW5kUGFkZGluZ1RvdGFsU2l6ZS5tYXg7XG5cbiAgICBpZiAoY2FsY01pblNpemUgPiBib3VuZGluZ0RpbWVuc2lvbikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1RoZSBwcm92aWRlZCBtaW5pbXVtIGVsZW1lbnQgc2l6ZXMgbWVhbiB0aGUgY2hhcnQgY2Fubm90IGRpc3BsYXkgYXQgdGhpcyBzbWFsbCBvZiBhIHNpemUnLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhclNpemU6IDAsXG4gICAgICAgIGJhckNsdXN0ZXJHYXA6IDAsXG4gICAgICAgIGJ1Y2tldEdhcDogMCxcbiAgICAgICAgb3V0ZXJHYXA6IDAsXG4gICAgICAgIHN0YXJ0UGFkZGluZzogMCxcbiAgICAgICAgZW5kUGFkZGluZzogMCxcbiAgICAgICAgdG90YWxTaXplOiAwLFxuICAgICAgICBzaXppbmdFcnJvcjogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ0NoZWNrcyA9IFtcbiAgICAgIGdldENoZWNraW5nSW5mb0ZvckVsZW1lbnRDb25maWcoYmFyU2l6ZUNvbmZpZywgYmFyQ291bnQpLFxuICAgICAgZ2V0Q2hlY2tpbmdJbmZvRm9yRWxlbWVudENvbmZpZyhiYXJDbHVzdGVyR2FwQ29uZmlnLCBiYXJDbHVzdGVyR2FwQ291bnQpLFxuICAgICAgZ2V0Q2hlY2tpbmdJbmZvRm9yRWxlbWVudENvbmZpZyhidWNrZXRHYXBDb25maWcsIGJ1Y2tldEdhcENvdW50KSxcbiAgICAgIGdldENoZWNraW5nSW5mb0ZvckVsZW1lbnRDb25maWcob3V0ZXJHYXBDb25maWcsIDIpLFxuICAgICAgZ2V0Q2hlY2tpbmdJbmZvRm9yRWxlbWVudENvbmZpZyhzdGFydFBhZGRpbmdDb25maWcsIDEpLFxuICAgICAgZ2V0Q2hlY2tpbmdJbmZvRm9yRWxlbWVudENvbmZpZyhlbmRQYWRkaW5nQ29uZmlnLCAxKSxcbiAgICBdO1xuICAgIGxldCBjdXJyU2NhbGluZ0ZhY3RvciA9IDE7XG4gICAgaWYgKGNhbGNUYXJnZXRTaXplID4gYm91bmRpbmdEaW1lbnNpb24pIHtcbiAgICAgIC8vU2NhbGluZyBkb3duXG4gICAgICBsZXQgZmluYWxTY2FsaW5nRmFjdG9yRm91bmQgPSBmYWxzZTtcbiAgICAgIHdoaWxlICghZmluYWxTY2FsaW5nRmFjdG9yRm91bmQpIHtcbiAgICAgICAgY29uc3QgbmV4dFNjYWxlRmFjdG9yQnJlYWtwb2ludCA9IE1hdGgubWF4KFxuICAgICAgICAgIC4uLmNvbmZpZ0NoZWNrc1xuICAgICAgICAgICAgLm1hcChjaGVjayA9PiBjaGVjay5taW5TY2FsZUZhY3RvcilcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICh2YWwpOiB2YWwgaXMgbnVtYmVyID0+XG4gICAgICAgICAgICAgICAgdmFsICE9PSB1bmRlZmluZWQgJiYgISh2YWwgPj0gY3VyclNjYWxpbmdGYWN0b3IpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAwLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdTY2FsZUZhY3RvclNpemUgPSBnZXRTdW1Gb3JTY2FsZVZhbHVlKFxuICAgICAgICAgIGNvbmZpZ0NoZWNrcyxcbiAgICAgICAgICBuZXh0U2NhbGVGYWN0b3JCcmVha3BvaW50LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChuZXdTY2FsZUZhY3RvclNpemUgPD0gYm91bmRpbmdEaW1lbnNpb24pIHtcbiAgICAgICAgICAvL1RoZXJlJ3MgYSBzY2FsZSB2YWx1ZSB0aGF0J2xsIHdvcmsgYmV0d2VlbiB0aGUgY3VyciBhbmQgbmV3IHZhbHVlc1xuICAgICAgICAgIC8vVGhlc2UgYXJlIHRoZSB2YWx1ZXMgdGhhdCdsbCBqdXN0IGJlIGF0IHRoZWlyIG1pblxuICAgICAgICAgIGNvbnN0IG5vblNjYWxlYWJsZVZhbHVlcyA9IGNvbmZpZ0NoZWNrcy5maWx0ZXIoXG4gICAgICAgICAgICBjaGVjayA9PlxuICAgICAgICAgICAgICBjaGVjay5taW5TY2FsZUZhY3RvciAmJiBjaGVjay5taW5TY2FsZUZhY3RvciA+PSBjdXJyU2NhbGluZ0ZhY3RvcixcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vVGhlc2UgYXJlIHRoZSB2YWx1ZXMgdGhhdCBjYW4gc3RpbGwgYmUgc2NhbGVkIGRvd25cbiAgICAgICAgICBjb25zdCBzY2FsZWFibGVWYWx1ZXMgPSBjb25maWdDaGVja3MuZmlsdGVyKFxuICAgICAgICAgICAgY2hlY2sgPT5cbiAgICAgICAgICAgICAgIWNoZWNrLm1pblNjYWxlRmFjdG9yIHx8IGNoZWNrLm1pblNjYWxlRmFjdG9yIDwgY3VyclNjYWxpbmdGYWN0b3IsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB3b3JraW5nU3BhY2UgPVxuICAgICAgICAgICAgYm91bmRpbmdEaW1lbnNpb24gLVxuICAgICAgICAgICAgZ2V0U3VtRm9yU2NhbGVWYWx1ZShub25TY2FsZWFibGVWYWx1ZXMsIGN1cnJTY2FsaW5nRmFjdG9yKTtcbiAgICAgICAgICBjdXJyU2NhbGluZ0ZhY3RvciA9XG4gICAgICAgICAgICB3b3JraW5nU3BhY2UgLyBnZXRTdW1Gb3JTY2FsZVZhbHVlKHNjYWxlYWJsZVZhbHVlcywgMSk7XG4gICAgICAgICAgZmluYWxTY2FsaW5nRmFjdG9yRm91bmQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vT25lIG9mIHRoZSBlbGVtZW50cyBpcyBoaXR0aW5nIHRoZWlyIG1pblNjYWxlRmFjdG9yLCBzbyBmb3Igc2ltcGxpY2l0eSB3ZSdsbCBqdXN0IGdvIGFnYWluXG4gICAgICAgICAgY3VyclNjYWxpbmdGYWN0b3IgPSBuZXh0U2NhbGVGYWN0b3JCcmVha3BvaW50O1xuXG4gICAgICAgICAgLy9KdXN0IGluIGNhc2UsIHRob3VnaCBwcmV2aW91cyBjaGVja3Mgc2hvdWxkIG1ha2UgdGhpcyBpbXBvc3NpYmxlXG4gICAgICAgICAgaWYgKGN1cnJTY2FsaW5nRmFjdG9yID09PSAwKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAnVGhlIGdpdmVuIHNpemUgY2Fubm90IGNvbnRhaW4gdGhlIGZpeGVkIHNpemVzIGdpdmVuIGZvciB0aGUgZWxlbWVudHMnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGJhclNpemU6IDAsXG4gICAgICAgICAgICAgIGJhckNsdXN0ZXJHYXA6IDAsXG4gICAgICAgICAgICAgIGJ1Y2tldEdhcDogMCxcbiAgICAgICAgICAgICAgb3V0ZXJHYXA6IDAsXG4gICAgICAgICAgICAgIHN0YXJ0UGFkZGluZzogMCxcbiAgICAgICAgICAgICAgZW5kUGFkZGluZzogMCxcbiAgICAgICAgICAgICAgdG90YWxTaXplOiAwLFxuICAgICAgICAgICAgICBzaXppbmdFcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vQ2hlY2tpbmcgdG8gc2VlIGlmIGFsbCBlbGVtZW50cyBoYXZlIGEgZGVmaW5lZCBtYXhcbiAgICAgIGNvbnN0IG1heGltdW1TaXplUG9zc2libGUgPVxuICAgICAgICBjb25maWdDaGVja3MuZmlsdGVyKGNoZWNrID0+IGNoZWNrLm1heFNjYWxlRmFjdG9yID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgLmxlbmd0aCA9PT0gMDtcbiAgICAgIC8vSWYgYWxsIGVsZW1lbnRzIGhhdmUgYSBkZWZpbmVkIG1heCwgYW5kIHRoYXQgbWF4IGlzIGxlc3MgdGhhbiB0aGUgc2l6ZSB3ZSdyZSB0cnlpbmcgdG8gZ3JvdyB0bywgaXQncyBpbXBvc3NpYmxlXG4gICAgICBpZiAobWF4aW11bVNpemVQb3NzaWJsZSAmJiBjYWxjTWF4U2l6ZSA8IGJvdW5kaW5nRGltZW5zaW9uKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIHByb3ZpZGVkIG1heGltdW0gZWxlbWVudCB3aWR0aHMgbWVhbiB0aGUgY2hhcnQgY2Fubm90IGRpc3BsYXkgYXQgdGhpcyBsYXJnZSBvZiBhIHNpemUnLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJhclNpemU6IDAsXG4gICAgICAgICAgYmFyQ2x1c3RlckdhcDogMCxcbiAgICAgICAgICBidWNrZXRHYXA6IDAsXG4gICAgICAgICAgb3V0ZXJHYXA6IDAsXG4gICAgICAgICAgc3RhcnRQYWRkaW5nOiAwLFxuICAgICAgICAgIGVuZFBhZGRpbmc6IDAsXG4gICAgICAgICAgdG90YWxTaXplOiAwLFxuICAgICAgICAgIHNpemluZ0Vycm9yOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy9TY2FsaW5nIHVwXG4gICAgICBsZXQgZmluYWxTY2FsaW5nRmFjdG9yRm91bmQgPSBmYWxzZTtcbiAgICAgIHdoaWxlICghZmluYWxTY2FsaW5nRmFjdG9yRm91bmQpIHtcbiAgICAgICAgY29uc3QgbmV4dFNjYWxlRmFjdG9yQnJlYWtwb2ludCA9IE1hdGgubWluKFxuICAgICAgICAgIC4uLmNvbmZpZ0NoZWNrc1xuICAgICAgICAgICAgLm1hcChjaGVjayA9PiBjaGVjay5tYXhTY2FsZUZhY3RvcilcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICh2YWwpOiB2YWwgaXMgbnVtYmVyID0+XG4gICAgICAgICAgICAgICAgdmFsICE9PSB1bmRlZmluZWQgJiYgISh2YWwgPD0gY3VyclNjYWxpbmdGYWN0b3IpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV3U2NhbGVGYWN0b3JTaXplID0gZ2V0U3VtRm9yU2NhbGVWYWx1ZShcbiAgICAgICAgICBjb25maWdDaGVja3MsXG4gICAgICAgICAgbmV4dFNjYWxlRmFjdG9yQnJlYWtwb2ludCxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV3U2NhbGVGYWN0b3JTaXplID49IGJvdW5kaW5nRGltZW5zaW9uIHx8XG4gICAgICAgICAgbmV4dFNjYWxlRmFjdG9yQnJlYWtwb2ludCA9PT0gSW5maW5pdHlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy9UaGVyZSdzIGEgc2NhbGUgdmFsdWUgdGhhdCdsbCB3b3JrIGJldHdlZW4gdGhlIGN1cnIgYW5kIG5ldyB2YWx1ZXNcbiAgICAgICAgICAvL1RoZXNlIGFyZSB0aGUgdmFsdWVzIHRoYXQnbGwganVzdCBiZSBhdCB0aGVpciBtYXhcbiAgICAgICAgICBjb25zdCBub25TY2FsZWFibGVWYWx1ZXMgPSBjb25maWdDaGVja3MuZmlsdGVyKFxuICAgICAgICAgICAgY2hlY2sgPT5cbiAgICAgICAgICAgICAgY2hlY2subWF4U2NhbGVGYWN0b3IgJiYgY2hlY2subWF4U2NhbGVGYWN0b3IgPD0gY3VyclNjYWxpbmdGYWN0b3IsXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvL1RoZXNlIGFyZSB0aGUgdmFsdWVzIHRoYXQgY2FuIHN0aWxsIGJlIHNjYWxlZCB1cFxuICAgICAgICAgIGNvbnN0IHNjYWxlYWJsZVZhbHVlcyA9IGNvbmZpZ0NoZWNrcy5maWx0ZXIoXG4gICAgICAgICAgICBjaGVjayA9PlxuICAgICAgICAgICAgICAhY2hlY2subWF4U2NhbGVGYWN0b3IgfHwgY2hlY2subWF4U2NhbGVGYWN0b3IgPiBjdXJyU2NhbGluZ0ZhY3RvcixcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHdvcmtpbmdTcGFjZSA9XG4gICAgICAgICAgICBib3VuZGluZ0RpbWVuc2lvbiAtXG4gICAgICAgICAgICBnZXRTdW1Gb3JTY2FsZVZhbHVlKG5vblNjYWxlYWJsZVZhbHVlcywgY3VyclNjYWxpbmdGYWN0b3IpO1xuICAgICAgICAgIGN1cnJTY2FsaW5nRmFjdG9yID1cbiAgICAgICAgICAgIHdvcmtpbmdTcGFjZSAvIGdldFN1bUZvclNjYWxlVmFsdWUoc2NhbGVhYmxlVmFsdWVzLCAxKTtcbiAgICAgICAgICBmaW5hbFNjYWxpbmdGYWN0b3JGb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy9PbmUgb2YgdGhlIGVsZW1lbnRzIGlzIGhpdHRpbmcgdGhlaXIgbWF4U2NhbGVGYWN0b3IsIHNvIGZvciBzaW1wbGljaXR5IHdlJ2xsIGp1c3QgZ28gYWdhaW5cbiAgICAgICAgICBjdXJyU2NhbGluZ0ZhY3RvciA9IG5leHRTY2FsZUZhY3RvckJyZWFrcG9pbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYmFyU2l6ZSA9IGdldFNjYWxlZEVsZW1lbnRTaXplKGJhclNpemVDb25maWcsIGN1cnJTY2FsaW5nRmFjdG9yKTtcbiAgICBjb25zdCBiYXJDbHVzdGVyR2FwID0gZ2V0U2NhbGVkRWxlbWVudFNpemUoXG4gICAgICBiYXJDbHVzdGVyR2FwQ29uZmlnLFxuICAgICAgY3VyclNjYWxpbmdGYWN0b3IsXG4gICAgKTtcbiAgICBjb25zdCBidWNrZXRHYXAgPSBnZXRTY2FsZWRFbGVtZW50U2l6ZShidWNrZXRHYXBDb25maWcsIGN1cnJTY2FsaW5nRmFjdG9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgYmFyU2l6ZSxcbiAgICAgIGJhckNsdXN0ZXJHYXAsXG4gICAgICBidWNrZXRHYXAsXG4gICAgICBvdXRlckdhcDogZ2V0U2NhbGVkRWxlbWVudFNpemUob3V0ZXJHYXBDb25maWcsIGN1cnJTY2FsaW5nRmFjdG9yKSxcbiAgICAgIHN0YXJ0UGFkZGluZzogZ2V0U2NhbGVkRWxlbWVudFNpemUoc3RhcnRQYWRkaW5nQ29uZmlnLCBjdXJyU2NhbGluZ0ZhY3RvciksXG4gICAgICBlbmRQYWRkaW5nOiBnZXRTY2FsZWRFbGVtZW50U2l6ZShlbmRQYWRkaW5nQ29uZmlnLCBjdXJyU2NhbGluZ0ZhY3RvciksXG4gICAgICB0b3RhbFNpemU6IGJvdW5kaW5nRGltZW5zaW9uLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVEYXRhQXhpc1ZhbHVlcyhcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBzY2FsaW5nQ29uZmlnOiBOb25FbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgICBlbGVtZW50U2NhbGVzOiBQYXJ0aWFsRWxlbWVudFNjYWxpbmdDb25maWcgfCB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFNpemluZzogRnVsbEVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgcGlwZVRyYW5zZm9ybTogKCh2YWx1ZTogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbikgPT4gc3RyaW5nKSB8IG51bGwsXG4gICAgZGF0ZUZvcm1hdDogKChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpIHwgbnVsbCxcbiAgKToge1xuICAgIHN0YXJ0UGFkZGluZzogbnVtYmVyO1xuICAgIGVuZFBhZGRpbmc6IG51bWJlcjtcbiAgICBsZWZ0QnVja2V0TGFiZWw6IG51bWJlcjtcbiAgICBkYXRhTGFiZWxUZXh0U2l6ZTogbnVtYmVyO1xuICAgIGRhdGFMYWJlbFBhZGRpbmc6IG51bWJlcjtcbiAgICBmb250U2l6ZTogbnVtYmVyO1xuICAgIHNpemVGb3JEYXRhOiBudW1iZXI7XG4gICAgdG90YWxTaXplOiBudW1iZXI7XG4gICAgYnVja2V0TGFiZWxUZXh0U2l6ZTogbnVtYmVyO1xuICAgIHNpemluZ0Vycm9yPzogYm9vbGVhbjtcbiAgfSB7XG4gICAgY29uc3QgY2hhcnREYXRhRGlyZWN0aW9uID0gZ2V0Q2hhcnREYXRhRGlyZWN0aW9uKGNvbmZpZyk7XG4gICAgY29uc3QgYm91bmRpbmdEaW1lbnNpb24gPVxuICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyBkaW1lbnNpb25zLndpZHRoXG4gICAgICAgIDogZGltZW5zaW9ucy5oZWlnaHQ7XG4gICAgY29uc3QgYXhpc1NjYWxlID1cbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gc2NhbGluZ0NvbmZpZy5ob3Jpem9udGFsQXhpc1NjYWxlXG4gICAgICAgIDogc2NhbGluZ0NvbmZpZy52ZXJ0aWNhbEF4aXNTY2FsZTtcblxuICAgIGNvbnN0IHN0YXJ0UGFkZGluZ0NvbmZpZyA9IGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICAgIGVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2l6aW5nLFxuICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAnbGVmdFBhZGRpbmcnIDogJ3RvcFBhZGRpbmcnLFxuICAgICk7XG4gICAgY29uc3QgZW5kUGFkZGluZ0NvbmZpZyA9IGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICAgIGVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2l6aW5nLFxuICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAncmlnaHRQYWRkaW5nJyA6ICdib3R0b21QYWRkaW5nJyxcbiAgICApO1xuICAgIGNvbnN0IGxlZnRMYWJlbENvbmZpZyA9IGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICAgIGVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2l6aW5nLFxuICAgICAgJ2xlZnRCdWNrZXRMYWJlbCcsXG4gICAgKTtcbiAgICBjb25zdCBkYXRhTGFiZWxQYWRkaW5nQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICAnZGF0YUxhYmVsUGFkZGluZycsXG4gICAgKTtcbiAgICBjb25zdCBmb250U2l6ZUNvbmZpZyA9IGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICAgIGVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2l6aW5nLFxuICAgICAgJ2ZvbnRTaXplJyxcbiAgICApO1xuICAgIGNvbnN0IGZvbnRTaXplID0gZm9udFNpemVDb25maWcudGFyZ2V0O1xuICAgIGNvbnN0IGRhdGFMYWJlbFRleHRTaXppbmcgPSBnZXREYXRhTGFiZWxTaXplKGRhdGEsIHBpcGVUcmFuc2Zvcm0sIGZvbnRTaXplKTtcbiAgICAvL1dlIGFsd2F5cyBjYWxjdWxhdGUgYW5kIHJldHVybiBkYXRhTGFiZWxUZXh0U2l6ZSwgc2luY2UgaXQncyBhbHNvIHVzZWQgZm9yIGRldGVybWluZyBheGlzIGxhYmVsIHNpemVcbiAgICBjb25zdCBkYXRhTGFiZWxUZXh0U2l6ZSA9XG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IGRhdGFMYWJlbFRleHRTaXppbmcuaG9yaXpvbnRhbFxuICAgICAgICA6IGRhdGFMYWJlbFRleHRTaXppbmcudmVydGljYWw7XG4gICAgY29uc3QgZGF0YUxhYmVsRml4ZWRTaXplID1cbiAgICAgIGRhdGFMYWJlbFRleHRTaXplICogZ2V0RGF0YUxhYmVsU2l6aW5nQ291bnQoZGF0YSwgY29uZmlnKS50b3RhbDtcbiAgICBjb25zdCBidWNrZXRMYWJlbFRleHRTaXplID0gZ2V0QnVja2V0TGFiZWxTaXplKGRhdGEsIGZvbnRTaXplLCBkYXRlRm9ybWF0KTtcbiAgICAvL0Zsb3cgY2hhcnRzIGhhdmUgYSBkYXRhIGxhYmVsIGFib3ZlIGVhY2ggc3ViLWJ1Y2tldFxuICAgIGNvbnN0IGZsb3dMYWJlbFNpemUgPSBkYXRhTGFiZWxUZXh0U2l6ZSArIGRhdGFMYWJlbFBhZGRpbmdDb25maWcudGFyZ2V0O1xuXG4gICAgY29uc3Qgc3RhcnRQYWRkaW5nVG90YWxTaXplID0gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICAgIHN0YXJ0UGFkZGluZ0NvbmZpZyxcbiAgICAgIDEsXG4gICAgKTtcbiAgICBjb25zdCBlbmRQYWRkaW5nVG90YWxTaXplID0gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICAgIGVuZFBhZGRpbmdDb25maWcsXG4gICAgICAxLFxuICAgICk7XG4gICAgY29uc3QgZGF0YUxhYmVsUGFkZGluZ1RvdGFsU2l6ZSA9IGRldGVybWluZVBvc3NpYmxlU2l6ZXNPZkVsZW1lbnQoXG4gICAgICBkYXRhTGFiZWxQYWRkaW5nQ29uZmlnLFxuICAgICAgZ2V0RGF0YUxhYmVsU2l6aW5nQ291bnQoZGF0YSwgY29uZmlnKS50b3RhbCxcbiAgICApO1xuXG4gICAgbGV0IGxlZnRCdWNrZXRMYWJlbEFjdHVhbFNpemUgPSBsZWZ0TGFiZWxDb25maWcudGFyZ2V0O1xuICAgIGlmIChjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyAmJiBkYXRhLnR5cGUgPT09ICdsYWJlbGVkJykge1xuICAgICAgLy9Gb3IgaG9yaXpvbnRhbCBiYXJzLCB0aGUgc3RhcnQgcGFkZGluZyB3aWxsIHNjYWxlIGJhc2VkIG9uIHRoZSBidWNrZXQgbGFiZWxzXG4gICAgICBjb25zdCBsb25nZXN0TGFiZWxMZW5ndGggPVxuICAgICAgICBNYXRoLm1heCguLi5kYXRhLngubWFwKHggPT4geC5sYWJlbC5sZW5ndGgpKSAqXG4gICAgICAgIChXSURUSF9QRVJfTEVUVEVSICogKGZvbnRTaXplIC8gREVGQVVMVF9GT05UX1NJWkUpKTtcbiAgICAgIGNvbnN0IG1pbkxlbmd0aCA9IGxlZnRMYWJlbENvbmZpZy5taW5cbiAgICAgICAgPyBNYXRoLm1heChsb25nZXN0TGFiZWxMZW5ndGgsIGxlZnRMYWJlbENvbmZpZy5taW4pXG4gICAgICAgIDogbG9uZ2VzdExhYmVsTGVuZ3RoO1xuICAgICAgbGVmdEJ1Y2tldExhYmVsQWN0dWFsU2l6ZSA9IGxlZnRMYWJlbENvbmZpZy5tYXhcbiAgICAgICAgPyBNYXRoLm1pbihtaW5MZW5ndGgsIGxlZnRMYWJlbENvbmZpZy5tYXgpXG4gICAgICAgIDogbG9uZ2VzdExhYmVsTGVuZ3RoO1xuICAgIH1cblxuICAgIGxldCBmaXhlZFNpemVWYWx1ZSA9XG4gICAgICBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplICtcbiAgICAgIGRhdGFMYWJlbEZpeGVkU2l6ZSArXG4gICAgICBzdGFydFBhZGRpbmdUb3RhbFNpemUudGFyZ2V0ICtcbiAgICAgIGVuZFBhZGRpbmdUb3RhbFNpemUudGFyZ2V0ICtcbiAgICAgIGRhdGFMYWJlbFBhZGRpbmdUb3RhbFNpemUudGFyZ2V0O1xuICAgIGlmIChmaXhlZFNpemVWYWx1ZSA+IGJvdW5kaW5nRGltZW5zaW9uKSB7XG4gICAgICAvL1NlZSBpZiBmdXJ0aGVyIHRydW5jYXRpbmcgdGhlIGxhYmVsIGNhbiBoZWxwXG4gICAgICBpZiAoXG4gICAgICAgIGxlZnRMYWJlbENvbmZpZy5taW4gJiZcbiAgICAgICAgZml4ZWRTaXplVmFsdWUgLSBib3VuZGluZ0RpbWVuc2lvbiA8XG4gICAgICAgICAgbGVmdEJ1Y2tldExhYmVsQWN0dWFsU2l6ZSAtIGxlZnRMYWJlbENvbmZpZy5taW5cbiAgICAgICkge1xuICAgICAgICBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplID1cbiAgICAgICAgICBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplIC0gKGZpeGVkU2l6ZVZhbHVlIC0gYm91bmRpbmdEaW1lbnNpb24pO1xuICAgICAgICBmaXhlZFNpemVWYWx1ZSA9XG4gICAgICAgICAgbGVmdEJ1Y2tldExhYmVsQWN0dWFsU2l6ZSArXG4gICAgICAgICAgc3RhcnRQYWRkaW5nVG90YWxTaXplLnRhcmdldCArXG4gICAgICAgICAgZW5kUGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQgK1xuICAgICAgICAgIGRhdGFMYWJlbFBhZGRpbmdUb3RhbFNpemUudGFyZ2V0O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgYXhpc1NjYWxlICE9PSAnZ3JvdycgJiZcbiAgICAgICAgKGF4aXNTY2FsZSAhPT0gJ25vLXNjYWxlJyB8fCBzY2FsaW5nQ29uZmlnLmRhdGFTY2FsZS50eXBlID09PSAnZml0JylcbiAgICAgICkge1xuICAgICAgICAvL0dyb3dpbmcgYW5kIG5vbi1maXR0aW5nIGRhdGEgYXhlcyBjYW4gc2Nyb2xsIGluc3RlYWRcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgcHJvdmlkZWQgZWxlbWVudCBzaXplcyBtZWFuIHRoZSBjaGFydCBjYW5ub3QgZGlzcGxheSBhdCB0aGlzIHNtYWxsIG9mIGEgc2l6ZScsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnRQYWRkaW5nOiAwLFxuICAgICAgICAgIGVuZFBhZGRpbmc6IDAsXG4gICAgICAgICAgbGVmdEJ1Y2tldExhYmVsOiAwLFxuICAgICAgICAgIGRhdGFMYWJlbFRleHRTaXplOiAwLFxuICAgICAgICAgIGRhdGFMYWJlbFBhZGRpbmc6IDAsXG4gICAgICAgICAgZm9udFNpemU6IDAsXG4gICAgICAgICAgc2l6ZUZvckRhdGE6IDAsXG4gICAgICAgICAgdG90YWxTaXplOiAwLFxuICAgICAgICAgIGJ1Y2tldExhYmVsVGV4dFNpemU6IDAsXG4gICAgICAgICAgc2l6aW5nRXJyb3I6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGF4aXNTY2FsZSA9PT0gJ3NjYWxlLXRvLWZpdCcgfHxcbiAgICAgIGF4aXNTY2FsZSA9PT0gJ2dyb3cnIHx8XG4gICAgICBheGlzU2NhbGUgPT09ICdzaHJpbmsnIHx8XG4gICAgICBzY2FsaW5nQ29uZmlnLmRhdGFTY2FsZS50eXBlID09PSAnZml0J1xuICAgICkge1xuICAgICAgLy9BIGdyb3dpbmcgZGF0YSBheGlzIHNjcm9sbHMgcmF0aGVyIHRoYW4gc3F1ZWV6aW5nIHRoZSBkYXRhIGJlbG93IGl0cyBtaW5pbXVtIHNpemVcbiAgICAgIGNvbnN0IGF2YWlsYWJsZVNpemUgPVxuICAgICAgICBheGlzU2NhbGUgPT09ICdncm93J1xuICAgICAgICAgID8gTWF0aC5tYXgoXG4gICAgICAgICAgICAgIGJvdW5kaW5nRGltZW5zaW9uIC0gZml4ZWRTaXplVmFsdWUsXG4gICAgICAgICAgICAgIGdldE1pbmltdW1Hcm93bkRhdGFTaXplKFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgIGJvdW5kaW5nRGltZW5zaW9uLFxuICAgICAgICAgICAgICAgIGZsb3dMYWJlbFNpemUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBib3VuZGluZ0RpbWVuc2lvbiAtIGZpeGVkU2l6ZVZhbHVlO1xuICAgICAgY29uc3Qgc2l6ZUZvckRhdGEgPSBnZXRGaXR0ZWREYXRhU2l6ZShcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBhdmFpbGFibGVTaXplLFxuICAgICAgICBmbG93TGFiZWxTaXplLFxuICAgICAgKTtcbiAgICAgIGlmIChzaXplRm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBwcm92aWRlZCBtaW5pbXVtIGRhdGEgZWxlbWVudCBzaXplIG1lYW5zIHRoZSBjaGFydCBjYW5ub3QgZGlzcGxheSBhdCB0aGlzIHNtYWxsIG9mIGEgc2l6ZScsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnRQYWRkaW5nOiAwLFxuICAgICAgICAgIGVuZFBhZGRpbmc6IDAsXG4gICAgICAgICAgbGVmdEJ1Y2tldExhYmVsOiAwLFxuICAgICAgICAgIGRhdGFMYWJlbFRleHRTaXplOiAwLFxuICAgICAgICAgIGRhdGFMYWJlbFBhZGRpbmc6IDAsXG4gICAgICAgICAgZm9udFNpemU6IDAsXG4gICAgICAgICAgc2l6ZUZvckRhdGE6IDAsXG4gICAgICAgICAgdG90YWxTaXplOiAwLFxuICAgICAgICAgIGJ1Y2tldExhYmVsVGV4dFNpemU6IDAsXG4gICAgICAgICAgc2l6aW5nRXJyb3I6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydFBhZGRpbmc6IHN0YXJ0UGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgIGVuZFBhZGRpbmc6IGVuZFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgICBsZWZ0QnVja2V0TGFiZWw6IGxlZnRCdWNrZXRMYWJlbEFjdHVhbFNpemUsXG4gICAgICAgIGRhdGFMYWJlbFRleHRTaXplLFxuICAgICAgICBkYXRhTGFiZWxQYWRkaW5nOiBkYXRhTGFiZWxQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgICAgZm9udFNpemU6IGZvbnRTaXplQ29uZmlnLnRhcmdldCxcbiAgICAgICAgc2l6ZUZvckRhdGEsXG4gICAgICAgIHRvdGFsU2l6ZTogZml4ZWRTaXplVmFsdWUgKyBhdmFpbGFibGVTaXplLFxuICAgICAgICBidWNrZXRMYWJlbFRleHRTaXplLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBwcmltYXJ5RGF0YU1pbixcbiAgICAgIHByaW1hcnlEYXRhTWF4LFxuICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck1heCxcbiAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWcsXG4gICAgfSA9IGNhbGNEYXRhU2NhbGluZ1ZhbHVlcyhkYXRhLCBjb25maWcpO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlUHJpbWFyeU1heEZvclNjYWxpbmcgPVxuICAgICAgcHJpbWFyeURhdGFNYXggKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4O1xuICAgIGNvbnN0IGVmZmVjdGl2ZVByaW1hcnlNaW5Gb3JTY2FsaW5nID1cbiAgICAgIHByaW1hcnlEYXRhTWluIDwgMCA/IHByaW1hcnlEYXRhTWluICogc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZyA6IDA7XG5cbiAgICBpZiAoc2NhbGluZ0NvbmZpZy5kYXRhU2NhbGUudHlwZSA9PT0gJ21heCcpIHtcbiAgICAgIGNvbnN0IGRhdGFTaXplID1cbiAgICAgICAgc2NhbGluZ0NvbmZpZy5kYXRhU2NhbGUudmFsdWUgKlxuICAgICAgICAoKGVmZmVjdGl2ZVByaW1hcnlNYXhGb3JTY2FsaW5nIC0gZWZmZWN0aXZlUHJpbWFyeU1pbkZvclNjYWxpbmcpIC9cbiAgICAgICAgICBlZmZlY3RpdmVQcmltYXJ5TWF4Rm9yU2NhbGluZyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydFBhZGRpbmc6IHN0YXJ0UGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgIGVuZFBhZGRpbmc6IGVuZFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgICBsZWZ0QnVja2V0TGFiZWw6IGxlZnRCdWNrZXRMYWJlbEFjdHVhbFNpemUsXG4gICAgICAgIGRhdGFMYWJlbFRleHRTaXplLFxuICAgICAgICBkYXRhTGFiZWxQYWRkaW5nOiBkYXRhTGFiZWxQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgICAgZm9udFNpemU6IGZvbnRTaXplQ29uZmlnLnRhcmdldCxcbiAgICAgICAgc2l6ZUZvckRhdGE6IGRhdGFTaXplLFxuICAgICAgICB0b3RhbFNpemU6XG4gICAgICAgICAgZ2V0U2NhbGVkRGF0YVRvdGFsU2l6ZShkYXRhLCBjb25maWcsIGRhdGFTaXplLCBmbG93TGFiZWxTaXplKSArXG4gICAgICAgICAgZml4ZWRTaXplVmFsdWUsXG4gICAgICAgIGJ1Y2tldExhYmVsVGV4dFNpemUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGFTaXplID1cbiAgICAgICgoZWZmZWN0aXZlUHJpbWFyeU1heEZvclNjYWxpbmcgLSBlZmZlY3RpdmVQcmltYXJ5TWluRm9yU2NhbGluZykgL1xuICAgICAgICBzY2FsaW5nQ29uZmlnLmRhdGFTY2FsZS5yYXRpby52YWx1ZSkgKlxuICAgICAgc2NhbGluZ0NvbmZpZy5kYXRhU2NhbGUucmF0aW8ucHg7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0UGFkZGluZzogc3RhcnRQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgIGVuZFBhZGRpbmc6IGVuZFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgbGVmdEJ1Y2tldExhYmVsOiBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplLFxuICAgICAgZGF0YUxhYmVsVGV4dFNpemUsXG4gICAgICBkYXRhTGFiZWxQYWRkaW5nOiBkYXRhTGFiZWxQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgIGZvbnRTaXplOiBmb250U2l6ZUNvbmZpZy50YXJnZXQsXG4gICAgICBzaXplRm9yRGF0YTogZGF0YVNpemUsXG4gICAgICB0b3RhbFNpemU6XG4gICAgICAgIGdldFNjYWxlZERhdGFUb3RhbFNpemUoZGF0YSwgY29uZmlnLCBkYXRhU2l6ZSwgZmxvd0xhYmVsU2l6ZSkgK1xuICAgICAgICBmaXhlZFNpemVWYWx1ZSxcbiAgICAgIGJ1Y2tldExhYmVsVGV4dFNpemUsXG4gICAgfTtcbiAgfVxuXG4gIC8vVGhlIGxlYXN0IHNwYWNlIGEgZ3Jvd2luZyBkYXRhIGF4aXMgZ2l2ZXMgdGhlIGRhdGE6IGEgcG9ydGlvbiBvZiB0aGUgcHJvdmlkZWQgc2l6ZSwgb24gdG9wIG9mIHRoZSBzcGFjZSB0aGF0XG4gIC8vIGVsZW1lbnRzIGVubGFyZ2VkIHRvIHRoZSBtaW5pbXVtIHNpemUgbmVlZCAoc28gdGhlIGRhdGEgc3RheXMgcHJvcG9ydGlvbmFsIHJhdGhlciB0aGFuIGFsbCBiZWluZyB0aGUgbWluaW11bSlcbiAgZnVuY3Rpb24gZ2V0TWluaW11bUdyb3duRGF0YVNpemUoXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgYm91bmRpbmdEaW1lbnNpb246IG51bWJlcixcbiAgICBsYWJlbFNpemU6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICBjb25zdCBtaW5pbXVtRWxlbWVudHNTaXplID1cbiAgICAgIGRhdGEudHlwZSA9PT0gJ2Zsb3ctcHJvY2Vzc2VkJ1xuICAgICAgICA/IGdldE1heEZsb3dCdWNrZXRTaXplKFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBnZXRNaW5pbXVtRGF0YUVsZW1lbnRTaXplKGNvbmZpZyksXG4gICAgICAgICAgICBsYWJlbFNpemUsXG4gICAgICAgICAgKSAtIGdldEZsb3dNaWRMYWJlbFNpemUoZGF0YSwgbGFiZWxTaXplKVxuICAgICAgICA6IDA7XG4gICAgcmV0dXJuIGJvdW5kaW5nRGltZW5zaW9uICogR1JPV05fREFUQV9NSU5JTVVNX1JBVElPICsgbWluaW11bUVsZW1lbnRzU2l6ZTtcbiAgfVxuXG4gIC8vRm9yIGZsb3cgY2hhcnRzLCBmaW5kcyB0aGUgc2l6ZSB0aGUgZGF0YSBzY2FsZSBzaG91bGQgbWFwIHRvIHNvIHRoYXQgZXZlcnkgYnVja2V0IChpbmNsdWRpbmcgaXRzIG93biBkYXRhIGxhYmVscyxcbiAgLy8gYW5kIGFueSBlbGVtZW50cyBlbmxhcmdlZCB0byB0aGUgbWluaW11bSBzaXplKSBmaXRzIGluIHRoZSBhdmFpbGFibGUgc2l6ZVxuICAvL1JldHVybnMgbnVsbCBpZiB0aGUgbWluaW11bSBzaXplcyBhbG9uZSBjYW4ndCBmaXRcbiAgZnVuY3Rpb24gZ2V0Rml0dGVkRGF0YVNpemUoXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgYXZhaWxhYmxlU2l6ZTogbnVtYmVyLFxuICAgIGxhYmVsU2l6ZTogbnVtYmVyLFxuICApOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAoZGF0YS50eXBlICE9PSAnZmxvdy1wcm9jZXNzZWQnKSB7XG4gICAgICByZXR1cm4gYXZhaWxhYmxlU2l6ZTtcbiAgICB9XG4gICAgY29uc3QgZGF0YU1heCA9IE1hdGgubWF4KC4uLmRhdGEueC5tYXAoeCA9PiB4LnRvdGFsQ291bnQpKTtcbiAgICBpZiAoZGF0YU1heCA8PSAwKSB7XG4gICAgICByZXR1cm4gYXZhaWxhYmxlU2l6ZTtcbiAgICB9XG4gICAgY29uc3QgbWluaW11bVNpemUgPSBnZXRNaW5pbXVtRGF0YUVsZW1lbnRTaXplKGNvbmZpZyk7XG4gICAgY29uc3QgYnVja2V0QXZhaWxhYmxlU2l6ZSA9XG4gICAgICBhdmFpbGFibGVTaXplICsgZ2V0Rmxvd01pZExhYmVsU2l6ZShkYXRhLCBsYWJlbFNpemUpO1xuICAgIC8vQ2FsY3VsYXRlIHdoYXQgdGhlIHNpemluZyB3b3VsZCBuZWVkIHRvIGJlIGZvciBlYWNoIGluZGl2aWR1YWwgY29sdW1uLFxuICAgIC8vICB0YWtpbmcgdGhlIHZhbHVlIHRoYXQgaXMgbW9zdCByZXN0cmljdGl2ZS4gTm90IGFwcGx5aW5nIG1pbmltdW0gc2l6ZSB5ZXRcbiAgICBjb25zdCB1bmVubGFyZ2VkUmF0aW8gPSBNYXRoLm1pbihcbiAgICAgIC4uLmRhdGEueFxuICAgICAgICAuZmlsdGVyKGJ1Y2tldCA9PiBidWNrZXQudG90YWxDb3VudCA+IDApXG4gICAgICAgIC5tYXAoXG4gICAgICAgICAgYnVja2V0ID0+XG4gICAgICAgICAgICAoYnVja2V0QXZhaWxhYmxlU2l6ZSAtIChidWNrZXQuc3ViQnVja2V0cy5sZW5ndGggLSAxKSAqIGxhYmVsU2l6ZSkgL1xuICAgICAgICAgICAgYnVja2V0LnRvdGFsQ291bnQsXG4gICAgICAgICksXG4gICAgKTtcbiAgICBpZiAoXG4gICAgICBtaW5pbXVtU2l6ZSA9PT0gMCB8fFxuICAgICAgZ2V0TWF4Rmxvd0J1Y2tldFNpemUoZGF0YSwgdW5lbmxhcmdlZFJhdGlvLCBtaW5pbXVtU2l6ZSwgbGFiZWxTaXplKSA8PVxuICAgICAgICBidWNrZXRBdmFpbGFibGVTaXplXG4gICAgKSB7XG4gICAgICByZXR1cm4gdW5lbmxhcmdlZFJhdGlvICogZGF0YU1heDtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgZ2V0TWF4Rmxvd0J1Y2tldFNpemUoZGF0YSwgMCwgbWluaW11bVNpemUsIGxhYmVsU2l6ZSkgPlxuICAgICAgYnVja2V0QXZhaWxhYmxlU2l6ZVxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vTm93LCB3ZSBhcHBseSBtaW5pbXVtIHNpemUgdG8gdGhlIGJhcnMgdG8gY2FsY3VsYXRlIG91ciB0cnVlIHJhdGlvIChmb3VuZCB0aHJvdWdoIGJpbmFyeSBzZWFyY2gpXG4gICAgbGV0IGxvdyA9IDA7XG4gICAgbGV0IGhpZ2ggPSB1bmVubGFyZ2VkUmF0aW87XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDsgaSsrKSB7XG4gICAgICBjb25zdCBtaWQgPSAobG93ICsgaGlnaCkgLyAyO1xuICAgICAgaWYgKFxuICAgICAgICBnZXRNYXhGbG93QnVja2V0U2l6ZShkYXRhLCBtaWQsIG1pbmltdW1TaXplLCBsYWJlbFNpemUpID5cbiAgICAgICAgYnVja2V0QXZhaWxhYmxlU2l6ZVxuICAgICAgKSB7XG4gICAgICAgIGhpZ2ggPSBtaWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb3cgPSBtaWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsb3cgKiBkYXRhTWF4O1xuICB9XG5cbiAgLy9UaGUgc2l6ZSBuZWVkZWQgYWxvbmcgdGhlIGRhdGEgYXhpcyBiZXlvbmQgdGhlIGZpeGVkIHNpemVcbiAgLy9Gb3IgZmxvdyBjaGFydHMsIHRoaXMgaXMgYmFzZWQgb24gdGhlIHRhbGxlc3QgYnVja2V0IChpbmNsdWRpbmcgaXRzIG93biBkYXRhIGxhYmVscyBhbmQgYW55IGVubGFyZ2VkIGVsZW1lbnRzKSxcbiAgLy8gcmF0aGVyIHRoYW4gYXNzdW1pbmcgdGhlIGJ1Y2tldCB3aXRoIHRoZSBtb3N0IGRhdGEgYWxzbyBoYXMgdGhlIG1vc3Qgc3ViLWJ1Y2tldHNcbiAgZnVuY3Rpb24gZ2V0U2NhbGVkRGF0YVRvdGFsU2l6ZShcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBkYXRhU2l6ZTogbnVtYmVyLFxuICAgIGxhYmVsU2l6ZTogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGlmIChkYXRhLnR5cGUgIT09ICdmbG93LXByb2Nlc3NlZCcpIHtcbiAgICAgIHJldHVybiBkYXRhU2l6ZTtcbiAgICB9XG4gICAgY29uc3QgZGF0YU1heCA9IE1hdGgubWF4KC4uLmRhdGEueC5tYXAoeCA9PiB4LnRvdGFsQ291bnQpKTtcbiAgICBpZiAoZGF0YU1heCA8PSAwKSB7XG4gICAgICByZXR1cm4gZGF0YVNpemU7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBnZXRNYXhGbG93QnVja2V0U2l6ZShcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGF0YVNpemUgLyBkYXRhTWF4LFxuICAgICAgICBnZXRNaW5pbXVtRGF0YUVsZW1lbnRTaXplKGNvbmZpZyksXG4gICAgICAgIGxhYmVsU2l6ZSxcbiAgICAgICkgLSBnZXRGbG93TWlkTGFiZWxTaXplKGRhdGEsIGxhYmVsU2l6ZSlcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGF0YUxhYmVsU2l6ZShcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgICBwaXBlVHJhbnNmb3JtOiAoKHZhbHVlOiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuKSA9PiBzdHJpbmcpIHwgbnVsbCxcbiAgICBmb250U2l6ZTogbnVtYmVyLFxuICApOiB7IGhvcml6b250YWw6IG51bWJlcjsgdmVydGljYWw6IG51bWJlciB9IHtcbiAgICBsZXQgbm9ybUhvcml6b250YWxNYXhMZW5ndGggPSAwO1xuICAgIGxldCBub3JtU3VwcE1heExlbmd0aCA9IDA7XG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ2Zsb3ctcHJvY2Vzc2VkJyAmJiBwaXBlVHJhbnNmb3JtICE9PSBudWxsKSB7XG4gICAgICBub3JtSG9yaXpvbnRhbE1heExlbmd0aCA9IE1hdGgubWF4KFxuICAgICAgICAuLi5kYXRhLnlzLm1hcCgoeSwgeUluZGV4KSA9PlxuICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgLi4ueS52YWx1ZXMubWFwKCh2YWwsIHhJbmRleCkgPT5cbiAgICAgICAgICAgICAgY2hlY2tMYWJlbExlbmd0aChcbiAgICAgICAgICAgICAgICBwaXBlVHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCwgZmFsc2UpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgbm9ybVN1cHBNYXhMZW5ndGggPSBNYXRoLm1heChcbiAgICAgICAgLi4uKGRhdGEuc3VwcGxlbWVudGFyeVlzID8/IFtdKS5tYXAoKHksIHlJbmRleCkgPT5cbiAgICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICAgIC4uLnkudmFsdWVzLm1hcCgodmFsLCB4SW5kZXgpID0+XG4gICAgICAgICAgICAgIGNoZWNrTGFiZWxMZW5ndGgoXG4gICAgICAgICAgICAgICAgcGlwZVRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCB4SW5kZXgsIHRydWUpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGF0YS50eXBlID09PSAnZmxvdy1wcm9jZXNzZWQnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBob3Jpem9udGFsOiBNYXRoLm1heChub3JtSG9yaXpvbnRhbE1heExlbmd0aCwgbm9ybVN1cHBNYXhMZW5ndGgpLFxuICAgICAgICB2ZXJ0aWNhbDogZm9udFNpemUgKiAyLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGhvcml6b250YWw6IE1hdGgubWF4KG5vcm1Ib3Jpem9udGFsTWF4TGVuZ3RoLCBub3JtU3VwcE1heExlbmd0aCksXG4gICAgICB2ZXJ0aWNhbDogZm9udFNpemUsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJ1Y2tldExhYmVsU2l6ZShcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgICBmb250U2l6ZTogbnVtYmVyLFxuICAgIGRhdGVGb3JtYXQ6ICgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKSB8IG51bGwsXG4gICkge1xuICAgIGlmIChkYXRlRm9ybWF0ICE9PSBudWxsKSB7XG4gICAgICBpZiAoZGF0YS50eXBlID09PSAnbGFiZWxlZCcpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICAgIC4uLmRhdGEueC5tYXAoeCA9PiBjaGVja0xhYmVsTGVuZ3RoKHgubGFiZWwsIGZvbnRTaXplKSksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ3RpbWVzZXJpZXMnKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgICAuLi5kYXRhLngubWFwKHggPT5cbiAgICAgICAgICAgIGNoZWNrTGFiZWxMZW5ndGgoZGF0ZUZvcm1hdChuZXcgRGF0ZSh4KSksIGZvbnRTaXplKSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrTGFiZWxMZW5ndGgodmFsdWU6IHN0cmluZywgZm9udFNpemU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgcGVyaW9kQ291bnQgPSAodmFsdWUubWF0Y2goL1xcLi9nKSB8fCBbXSkubGVuZ3RoO1xuICAgIGNvbnN0IHNsYXNoQ291bnQgPSAodmFsdWUubWF0Y2goL1xcLy9nKSB8fCBbXSkubGVuZ3RoO1xuICAgIGNvbnN0IGZvbnRTY2FsZUZhY3RvciA9IGZvbnRTaXplIC8gREVGQVVMVF9GT05UX1NJWkU7XG4gICAgcmV0dXJuIChcbiAgICAgICh2YWx1ZS5sZW5ndGggLSAocGVyaW9kQ291bnQgKyBzbGFzaENvdW50KSkgKlxuICAgICAgICAoV0lEVEhfUEVSX05VTUJFUiAqIGZvbnRTY2FsZUZhY3RvcikgK1xuICAgICAgcGVyaW9kQ291bnQgKiAoV0lEVEhfUEVSX1BFUklPRCAqIGZvbnRTY2FsZUZhY3RvcikgK1xuICAgICAgc2xhc2hDb3VudCAqIChXSURUSF9QRVJfU0xBU0ggKiBmb250U2NhbGVGYWN0b3IpXG4gICAgKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0JhclR5cGUodHlwZTogQ2hhcnQuQ2hhcnRUeXBlKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdHlwZSA9PT0gJ2JhcicgfHxcbiAgICAgIHR5cGUgPT09ICdob3Jpem9udGFsLWJhcicgfHxcbiAgICAgIHR5cGUgPT09ICd3YXRlcmZhbGwnIHx8XG4gICAgICB0eXBlID09PSAnZnVubmVsJ1xuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vT25seSBiYXItdHlwZSBhbmQgZmxvdyBjaGFydHMgaGF2ZSBkaXNjcmV0ZSBkYXRhIGVsZW1lbnRzIHRoYXQgdGhlIG1pbmltdW0gc2l6ZSBhcHBsaWVzIHRvXG4gIGZ1bmN0aW9uIGdldE1pbmltdW1EYXRhRWxlbWVudFNpemUoY29uZmlnOiBDb25maWcpOiBudW1iZXIge1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy50eXBlID09PSAnZG9udXQnIHx8XG4gICAgICBjb25maWcudHlwZSA9PT0gJ2xpbmUnIHx8XG4gICAgICBjb25maWcudHlwZSA9PT0gJ2FyZWEnXG4gICAgKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZy5zY2FsaW5nQ29uZmlnPy5kYXRhU2NhbGU/Lm1pbmltdW1EYXRhRWxlbWVudFNpemUgPz8gMDtcbiAgfVxuXG4gIC8vQW55IGRhdGEgZWxlbWVudCB3aXRoIGEgbm9uLXplcm8gdmFsdWUgaXMga2VwdCBhdCBvciBhYm92ZSB0aGUgbWluaW11bSBzaXplXG4gIGZ1bmN0aW9uIGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICBzaXplOiBudW1iZXIsXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBtaW5pbXVtU2l6ZTogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gMCA/IE1hdGgubWF4KHNpemUsIG1pbmltdW1TaXplKSA6IHNpemU7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRGbG93U3ViQnVja2V0U2l6ZXMoXG4gICAgc3ViQnVja2V0OiBGbG93U3ViQnVja2V0LFxuICAgIHZhbHVlVG9TaXplOiAodmFsdWU6IG51bWJlcikgPT4gbnVtYmVyLFxuICAgIG1pbmltdW1TaXplOiBudW1iZXIsXG4gICk6IHtcbiAgICB0b3RhbFNpemU6IG51bWJlcjtcbiAgICBjb250aW51aW5nU2l6ZTogbnVtYmVyO1xuICAgIGNvbm5lY3Rpb25TaXplczogbnVtYmVyW107XG4gIH0ge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25TaXplcyA9IHN1YkJ1Y2tldC5jb25uZWN0aW9ucy5tYXAoY29ubmVjdGlvbiA9PlxuICAgICAgYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgICB2YWx1ZVRvU2l6ZShjb25uZWN0aW9uLmNvdW50KSxcbiAgICAgICAgY29ubmVjdGlvbi5jb3VudCxcbiAgICAgICAgbWluaW11bVNpemUsXG4gICAgICApLFxuICAgICk7XG4gICAgY29uc3Qgc3VtU2l6ZXMgPSAoZGlyZWN0aW9uOiBGbG93Q29ubmVjdGlvblsnZGlyZWN0aW9uJ10pOiBudW1iZXIgPT5cbiAgICAgIHN1bShcbiAgICAgICAgY29ubmVjdGlvblNpemVzLmZpbHRlcihcbiAgICAgICAgICAoXywgaSkgPT4gc3ViQnVja2V0LmNvbm5lY3Rpb25zW2ldLmRpcmVjdGlvbiA9PT0gZGlyZWN0aW9uLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICBjb25zdCBjb250aW51aW5nU2l6ZSA9IHN1bVNpemVzKCdmb3J3YXJkJyk7XG4gICAgY29uc3Qgbm9uQ29udGludWluZ0NvdW50ID1cbiAgICAgIHN1YkJ1Y2tldC5jb3VudCAtXG4gICAgICBzdW0oXG4gICAgICAgIHN1YkJ1Y2tldC5jb25uZWN0aW9uc1xuICAgICAgICAgIC5maWx0ZXIoY29ubmVjdGlvbiA9PiBjb25uZWN0aW9uLmRpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnKVxuICAgICAgICAgIC5tYXAoY29ubmVjdGlvbiA9PiBjb25uZWN0aW9uLmNvdW50KSxcbiAgICAgICk7XG4gICAgLy9UaGUgc3ViLWJ1Y2tldCBtdXN0IGJlIGJpZyBlbm91Z2ggdG8gaG9sZCBhbGwgb2YgaXRzIChwb3NzaWJseSBlbmxhcmdlZCkgY29ubmVjdGlvbnMgb24gZWl0aGVyIHNpZGVcbiAgICBjb25zdCB0b3RhbFNpemUgPSBNYXRoLm1heChcbiAgICAgIGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgICAgdmFsdWVUb1NpemUoc3ViQnVja2V0LmNvdW50KSxcbiAgICAgICAgc3ViQnVja2V0LmNvdW50LFxuICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICksXG4gICAgICBjb250aW51aW5nU2l6ZSArXG4gICAgICAgIGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgICAgICB2YWx1ZVRvU2l6ZShub25Db250aW51aW5nQ291bnQpLFxuICAgICAgICAgIG5vbkNvbnRpbnVpbmdDb3VudCxcbiAgICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICAgKSxcbiAgICAgIHN1bVNpemVzKCdiYWNrd2FyZCcpLFxuICAgICk7XG4gICAgcmV0dXJuIHsgdG90YWxTaXplLCBjb250aW51aW5nU2l6ZSwgY29ubmVjdGlvblNpemVzIH07XG4gIH1cblxuICAvL1RoZSBzaXplIG9mIHRoZSB0YWxsZXN0IGZsb3cgYnVja2V0IGZvciB0aGUgZ2l2ZW4gc2NhbGluZyByYXRpbywgaW5jbHVkaW5nIHRoZSBkYXRhIGxhYmVscyBiZXR3ZWVuIGl0cyBzdWItYnVja2V0c1xuICAvLyAgVGhlIGxhYmVsIGFib3ZlIHRoZSBmaXJzdCBzdWItYnVja2V0IGlzIGV4Y2x1ZGVkLCBzaW5jZSBpdCdzIHBhcnQgb2YgdGhlIHRvcCBvZmZzZXRcbiAgZnVuY3Rpb24gZ2V0TWF4Rmxvd0J1Y2tldFNpemUoXG4gICAgZGF0YTogUHJvY2Vzc2VkRmxvd0RhdGEsXG4gICAgcHhQZXJWYWx1ZTogbnVtYmVyLFxuICAgIG1pbmltdW1TaXplOiBudW1iZXIsXG4gICAgbGFiZWxTaXplOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgLi4uZGF0YS54Lm1hcChcbiAgICAgICAgYnVja2V0ID0+XG4gICAgICAgICAgc3VtKFxuICAgICAgICAgICAgYnVja2V0LnN1YkJ1Y2tldHMubWFwKFxuICAgICAgICAgICAgICBzdWJCdWNrZXQgPT5cbiAgICAgICAgICAgICAgICBnZXRGbG93U3ViQnVja2V0U2l6ZXMoXG4gICAgICAgICAgICAgICAgICBzdWJCdWNrZXQsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9PiB2YWx1ZSAqIHB4UGVyVmFsdWUsXG4gICAgICAgICAgICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICAgICAgICAgICApLnRvdGFsU2l6ZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSArXG4gICAgICAgICAgKGJ1Y2tldC5zdWJCdWNrZXRzLmxlbmd0aCAtIDEpICogbGFiZWxTaXplLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLy9UaGUgZml4ZWQgc2l6ZSByZXNlcnZlcyByb29tIGZvciB0aGUgbGFiZWxzIGJldHdlZW4gc3ViLWJ1Y2tldHMgYXMgaWYgZXZlcnkgYnVja2V0IGhhZCBhcyBtYW55IHN1Yi1idWNrZXRzIGFzIHRoZVxuICAvLyBidWNrZXQgd2l0aCB0aGUgbW9zdCwgc28gdGhpcyBpcyB0aGUgcG9ydGlvbiBvZiB0aGUgZml4ZWQgc2l6ZSB0aGF0IGVhY2ggYnVja2V0IGNhbiBpbnN0ZWFkIHVzZSBiYXNlZCBvbiBpdHMgb3duIGxhYmVsc1xuICBmdW5jdGlvbiBnZXRGbG93TWlkTGFiZWxTaXplKFxuICAgIGRhdGE6IFByb2Nlc3NlZEZsb3dEYXRhLFxuICAgIGxhYmVsU2l6ZTogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIHJldHVybiAoXG4gICAgICAoTWF0aC5tYXgoLi4uZGF0YS54Lm1hcChidWNrZXQgPT4gYnVja2V0LnN1YkJ1Y2tldHMubGVuZ3RoKSkgLSAxKSAqXG4gICAgICBsYWJlbFNpemVcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNTdGFja2VkRGF0YShjb25maWc6IENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmIChjb25maWcudHlwZSA9PT0gJ2JhcicgfHwgY29uZmlnLnR5cGUgPT09ICdob3Jpem9udGFsLWJhcicpIHtcbiAgICAgIGlmIChjb25maWcuZ3JvdXBpbmdUeXBlID09PSAnc3RhY2tlZCcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcudHlwZSA9PT0gJ2FyZWEnIHx8IGNvbmZpZy50eXBlID09PSAnd2F0ZXJmYWxsJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ2x1c3RlcmVkRGF0YShcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBpbmNsdWRlU3VwcGxlbWVudGFyeTogYm9vbGVhbixcbiAgKTogYm9vbGVhbiB7XG4gICAgLy9JdCB2YXJpZXMgd2hldGhlciB3ZSB3YW50IHRvIGluY2x1ZGUgc3VwcGxlbWVudGFyeSBkYXRhIGluIHRoaXMgY2hlY2tcbiAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgJiYgaW5jbHVkZVN1cHBsZW1lbnRhcnkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAoY29uZmlnLnR5cGUgPT09ICdiYXInIHx8IGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKSAmJlxuICAgICAgY29uZmlnLmdyb3VwaW5nVHlwZSA9PT0gJ2NsdXN0ZXJlZCdcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdmdW5uZWwnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy9JbiBzb21lIGNhc2VzLCB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBjbHVzdGVyZWQgYW5kIHN0YWNrZWQgZG9lc24ndCBtYXR0ZXJcbiAgZnVuY3Rpb24gaXNHcm91cGluZ1R5cGVFeGNlcHRpb24oZGF0YTogTm9uRmxvd0RhdGEsIGNvbmZpZzogQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKGRhdGEueXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy9DaGVja2luZyBmb3IgYSAnbWV0cmljJyBjaGFydHMsIHdoaWNoIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBob3Jpem9udGFsIGJhciBjaGFydHMsXG4gICAgLy8gd2hlcmUgZWFjaCBzZXJpZXMgaXMgYWxzbyBhIGJ1Y2tldCAoYW5kIHZpY2UgdmVyc2EpXG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGEueC5sZW5ndGggPT09IGRhdGEueXMubGVuZ3RoICYmXG4gICAgICAgIGRhdGEueXMubGVuZ3RoID09PVxuICAgICAgICAgIGRhdGEueXMuZmlsdGVyKHkgPT4geS52YWx1ZXMuZmlsdGVyKHZhbCA9PiB2YWwgIT09IDApLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgIC5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YTogSW5wdXREYXRhKTogZGF0YSBpcyBOb25GbG93RGF0YSAmIHtcbiAgICBzdXBwbGVtZW50YXJ5WXM6IE5vbk51bGxhYmxlPE5vbkZsb3dEYXRhWydzdXBwbGVtZW50YXJ5WXMnXT47XG4gIH0ge1xuICAgIGlmIChkYXRhLnR5cGUgPT09ICdmbG93Jykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZGF0YS5zdXBwbGVtZW50YXJ5WXMgJiYgZGF0YS5zdXBwbGVtZW50YXJ5WXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICBlbGVtZW50U2NhbGVzOiBQYXJ0aWFsRWxlbWVudFNjYWxpbmdDb25maWcgfCB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFNjYWxpbmdDb25maWc6IEZ1bGxFbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgICBlbGVtZW50OiBDaGFydFNjYWxlRWxlbWVudCxcbiAgKTogRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBkZWZhdWx0RWxlbWVudENvbmZpZyA9IGRlZmF1bHRTY2FsaW5nQ29uZmlnW2VsZW1lbnRdO1xuICAgIGxldCBpbnB1dENvbmZpZzogRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uIHwgbnVsbDtcbiAgICBpZiAoZWxlbWVudFNjYWxlcykge1xuICAgICAgY29uc3QgcG9zc2libGVDb25maWcgPSBlbGVtZW50U2NhbGVzW2VsZW1lbnRdO1xuICAgICAgaWYgKHBvc3NpYmxlQ29uZmlnKSB7XG4gICAgICAgIGlucHV0Q29uZmlnID0gcG9zc2libGVDb25maWc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dENvbmZpZyA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0Q29uZmlnID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXRDb25maWcgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHJldHVybkNvbmZpZyA9IGlucHV0Q29uZmlnIGFzIEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbjtcbiAgICAgIHJldHVybiByZXR1cm5Db25maWc7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0RWxlbWVudENvbmZpZy50YXJnZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcmV0dXJuQ29uZmlnID0gZGVmYXVsdEVsZW1lbnRDb25maWcgYXMgRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uO1xuICAgICAgcmV0dXJuIHJldHVybkNvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogMCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICBlbGVtZW50Q29uZmlnOiBFbGVtZW50U2NhbGluZ0NvbmZpZ3VyYXRpb24sXG4gICAgZWxlbWVudENvdW50OiBudW1iZXIsXG4gICk6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyOyB0YXJnZXQ6IG51bWJlciB9IHtcbiAgICBjb25zdCBpbmRNaW4gPSBlbGVtZW50Q29uZmlnLm1pbiAhPT0gdW5kZWZpbmVkID8gZWxlbWVudENvbmZpZy5taW4gOiAwO1xuICAgIGNvbnN0IGluZE1heCA9IGVsZW1lbnRDb25maWcubWF4ICE9PSB1bmRlZmluZWQgPyBlbGVtZW50Q29uZmlnLm1heCA6IDA7XG4gICAgY29uc3QgaW5kVGFyZ2V0ID0gZWxlbWVudENvbmZpZy50YXJnZXQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1pbjogaW5kTWluICogZWxlbWVudENvdW50LFxuICAgICAgbWF4OiBpbmRNYXggKiBlbGVtZW50Q291bnQsXG4gICAgICB0YXJnZXQ6IGluZFRhcmdldCAqIGVsZW1lbnRDb3VudCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGV0ZXJtaW5lVG90YWxTY2FsZWRTaXplT2ZFbGVtZW50KFxuICAgIGVsZW1lbnRDb25maWc6IEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbixcbiAgICBlbGVtZW50Q291bnQ6IG51bWJlcixcbiAgICBzY2FsZVZhbHVlOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgY29uc3Qgc2NhbGVkVmFsID0gZ2V0U2NhbGVkRWxlbWVudFNpemUoZWxlbWVudENvbmZpZywgc2NhbGVWYWx1ZSk7XG4gICAgcmV0dXJuIHNjYWxlZFZhbCAqIGVsZW1lbnRDb3VudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNjYWxlZEVsZW1lbnRTaXplKFxuICAgIGVsZW1lbnRDb25maWc6IEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbixcbiAgICBzY2FsZVZhbHVlOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgY29uc3Qgc2NhbGVkVGFyZ2V0ID0gZWxlbWVudENvbmZpZy50YXJnZXQgKiBzY2FsZVZhbHVlO1xuICAgIGlmIChzY2FsZVZhbHVlIDwgMSkge1xuICAgICAgaWYgKGVsZW1lbnRDb25maWcubWluICYmIGVsZW1lbnRDb25maWcubWluID4gc2NhbGVkVGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50Q29uZmlnLm1pbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzY2FsZWRUYXJnZXQ7XG4gICAgfVxuICAgIGlmIChzY2FsZVZhbHVlID4gMSkge1xuICAgICAgaWYgKGVsZW1lbnRDb25maWcubWF4ICYmIGVsZW1lbnRDb25maWcubWF4IDwgc2NhbGVkVGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50Q29uZmlnLm1heDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzY2FsZWRUYXJnZXQ7XG4gICAgfVxuICAgIHJldHVybiBzY2FsZWRUYXJnZXQ7XG4gIH1cblxuICB0eXBlIEVsZW1lbnRTY2FsZUNoZWNrSW5mbyA9IHtcbiAgICBjb25maWc6IEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbjtcbiAgICBtaW5TY2FsZUZhY3Rvcj86IG51bWJlcjtcbiAgICBtYXhTY2FsZUZhY3Rvcj86IG51bWJlcjtcbiAgICBlbGVtZW50Q291bnQ6IG51bWJlcjtcbiAgfTtcblxuICBmdW5jdGlvbiBnZXRDaGVja2luZ0luZm9Gb3JFbGVtZW50Q29uZmlnKFxuICAgIGNvbmZpZzogRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uLFxuICAgIGVsZW1lbnRDb3VudDogbnVtYmVyLFxuICApOiBFbGVtZW50U2NhbGVDaGVja0luZm8ge1xuICAgIGxldCBtaW5TY2FsZUZhY3RvcjogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChjb25maWcubWluKSB7XG4gICAgICBtaW5TY2FsZUZhY3RvciA9XG4gICAgICAgIGNvbmZpZy50YXJnZXQgIT09IDAgPyBjb25maWcubWluIC8gY29uZmlnLnRhcmdldCA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IG1heFNjYWxlRmFjdG9yOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbmZpZy5tYXgpIHtcbiAgICAgIG1heFNjYWxlRmFjdG9yID1cbiAgICAgICAgY29uZmlnLnRhcmdldCAhPT0gMCA/IGNvbmZpZy5tYXggLyBjb25maWcudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnLFxuICAgICAgbWluU2NhbGVGYWN0b3IsXG4gICAgICBtYXhTY2FsZUZhY3RvcixcbiAgICAgIGVsZW1lbnRDb3VudCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U3VtRm9yU2NhbGVWYWx1ZShcbiAgICBjaGVja0luZm9zOiBFbGVtZW50U2NhbGVDaGVja0luZm9bXSxcbiAgICBzY2FsZVZhbHVlOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChjb25zdCBjaGVjayBvZiBjaGVja0luZm9zKSB7XG4gICAgICBzdW0gKz0gZGV0ZXJtaW5lVG90YWxTY2FsZWRTaXplT2ZFbGVtZW50KFxuICAgICAgICBjaGVjay5jb25maWcsXG4gICAgICAgIGNoZWNrLmVsZW1lbnRDb3VudCxcbiAgICAgICAgc2NhbGVWYWx1ZSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBzdW07XG4gIH1cblxuICBmdW5jdGlvbiBnZXREYXRhTGFiZWxTaXppbmdDb3VudChcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgKTogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlcjsgdG90YWw6IG51bWJlciB9IHtcbiAgICBpZiAoY29uZmlnLnNob3dEYXRhTGFiZWxzICE9PSB0cnVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogMCxcbiAgICAgICAgZW5kOiAwLFxuICAgICAgICB0b3RhbDogMCxcbiAgICAgIH07XG4gICAgfVxuICAgIC8vRGF0YSBsYWJlbHMgYXJlIGFsd2F5cyBzaG93biBhYm92ZSB0aGUgZGF0YSBmb3IgYWxsIGJ1dCB0aGVzZSAzIHR5cGVzXG4gICAgaWYgKFxuICAgICAgY29uZmlnLnR5cGUgIT09ICdiYXInICYmXG4gICAgICBjb25maWcudHlwZSAhPT0gJ2hvcml6b250YWwtYmFyJyAmJlxuICAgICAgY29uZmlnLnR5cGUgIT09ICd3YXRlcmZhbGwnICYmXG4gICAgICBjb25maWcudHlwZSAhPT0gJ2Zsb3cnXG4gICAgKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogMSxcbiAgICAgICAgZW5kOiAwLFxuICAgICAgICB0b3RhbDogMSxcbiAgICAgIH07XG4gICAgfVxuICAgIGxldCBzdGFydENvdW50ID0gMDtcbiAgICBsZXQgbWlkQ291bnQgPSAwO1xuICAgIGxldCBlbmRDb3VudCA9IDA7XG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ2Zsb3ctcHJvY2Vzc2VkJykge1xuICAgICAgaWYgKGRhdGEueXMuZmluZCh5ID0+IHkudmFsdWVzLmZpbmQodmFsID0+IHZhbCA+PSAwKSkpIHtcbiAgICAgICAgaWYgKGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKSB7XG4gICAgICAgICAgZW5kQ291bnQgKz0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydENvdW50ICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkYXRhLnlzLmZpbmQoeSA9PiB5LnZhbHVlcy5maW5kKHZhbCA9PiB2YWwgPCAwKSkpIHtcbiAgICAgICAgaWYgKGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKSB7XG4gICAgICAgICAgc3RhcnRDb3VudCArPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZENvdW50ICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRDb3VudCA9IDE7XG4gICAgICBtaWRDb3VudCA9IE1hdGgubWF4KC4uLmRhdGEueC5tYXAoeCA9PiB4LnN1YkJ1Y2tldHMubGVuZ3RoKSkgLSAxO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IHN0YXJ0Q291bnQsXG4gICAgICBlbmQ6IGVuZENvdW50LFxuICAgICAgdG90YWw6IHN0YXJ0Q291bnQgKyBtaWRDb3VudCArIGVuZENvdW50LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJZkhvdmVyT3V0T2ZCb3VuZHMoXG4gICAgLy9Qb3NpdGlvbiBub3QgYWNjb3VudGluZyBmb3Igc2Nyb2xsaW5nXG4gICAgcmVsUG9zWDogbnVtYmVyLFxuICAgIHJlbFBvc1k6IG51bWJlcixcbiAgICAvL1Bvc2l0aW9uIGFjY291bnRpbmcgZm9yIHNjcm9sbGluZ1xuICAgIHJlYWxQb3NYOiBudW1iZXIsXG4gICAgcmVhbFBvc1k6IG51bWJlcixcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMgfCBudWxsLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IGJvb2xlYW4ge1xuICAgIC8vQ2hlY2sgaWYgd2UncmUgb24gdG9wIG9mIG9uZSBvZiB0aGUgc2Nyb2xsYmFyc1xuICAgIGlmIChyZWxQb3NYID4gZGltZW5zaW9ucy53aWR0aCB8fCByZWxQb3NZID4gZGltZW5zaW9ucy5oZWlnaHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoY2hhcnRTaXppbmdWYWx1ZXMgPT09IG51bGwpIHtcbiAgICAgIC8vSWYgY2hhcnRTaXppbmdWYWx1ZXMgYXJlbid0IHByb3ZpZGVkLCBubyBtb3JlIGNoZWNrc1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvL0NoZWNrIGlmIHdlJ3JlIGluIG9uZSBvZiB0aGUgcGFkZGluZyBhcmVhc1xuICAgIGlmIChcbiAgICAgIHJlYWxQb3NYIDwgY2hhcnRTaXppbmdWYWx1ZXMubGVmdFBhZGRpbmcgfHxcbiAgICAgIHJlYWxQb3NYID5cbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudG90YWxXaWR0aCAtIGNoYXJ0U2l6aW5nVmFsdWVzLnJpZ2h0UGFkZGluZyB8fFxuICAgICAgcmVhbFBvc1kgPCBjaGFydFNpemluZ1ZhbHVlcy50b3BQYWRkaW5nIHx8XG4gICAgICByZWFsUG9zWSA+IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsSGVpZ2h0IC0gY2hhcnRTaXppbmdWYWx1ZXMuYm90dG9tUGFkZGluZ1xuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENoYXJ0RGF0YURpcmVjdGlvbihjb25maWc6IENvbmZpZyk6IENoYXJ0RGF0YURpcmVjdGlvbiB7XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKSB7XG4gICAgICByZXR1cm4gJ2hvcml6b250YWwnO1xuICAgIH1cbiAgICByZXR1cm4gJ3ZlcnRpY2FsJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbWJpbmVTY2FsaW5nSW5mbyhcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBkZWZhdWx0Q29uZmlnOiBEZWZhdWx0U2NhbGluZ0NvbmZpZyxcbiAgKTogTm9uRWxlbWVudFNjYWxpbmdDb25maWcge1xuICAgIGNvbnN0IHByb3ZpZGVkU2NhbGluZ0NvbmZpZyA9IGNvbmZpZy5zY2FsaW5nQ29uZmlnO1xuICAgIGNvbnN0IGNoYXJ0RGF0YURpcmVjdGlvbiA9IGdldENoYXJ0RGF0YURpcmVjdGlvbihjb25maWcpO1xuXG4gICAgLy9JZiB0aGUgdXNlciBwcm92aWRlcyBhIGRhdGEgc2NhbGUsIHdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgdGhhdCB1bmxlc3MgdGhleSBhbHNvIHByb3ZpZGVkIGEgc3BlY2lmaWMgc2NhbGUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGF4aXNcbiAgICBjb25zdCBkYXRhU2NhbGUgPVxuICAgICAgcHJvdmlkZWRTY2FsaW5nQ29uZmlnICYmIHByb3ZpZGVkU2NhbGluZ0NvbmZpZy5kYXRhU2NhbGVcbiAgICAgICAgPyBwcm92aWRlZFNjYWxpbmdDb25maWcuZGF0YVNjYWxlXG4gICAgICAgIDogZGVmYXVsdENvbmZpZy5ub25FbGVtZW50U2NhbGVzLmRhdGFTY2FsZTtcbiAgICBsZXQgdmVydGljYWxBeGlzU2NhbGUgPSBwcm92aWRlZFNjYWxpbmdDb25maWc/LnZlcnRpY2FsQXhpc1NjYWxlO1xuICAgIGlmICh2ZXJ0aWNhbEF4aXNTY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgZGF0YVNjYWxlLnR5cGUgPT09ICdmaXQnKSB7XG4gICAgICAgIHZlcnRpY2FsQXhpc1NjYWxlID0gZGVmYXVsdENvbmZpZy5ub25FbGVtZW50U2NhbGVzLnZlcnRpY2FsQXhpc1NjYWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9UaGUgdmVydGljYWwgYXhpcyBpcyB0aGUgZGF0YSBheGlzLCB0aGUgZGF0YVNjYWxlIGhhcyBhIHVzZXItaW5wdXR0ZWQgdmFsdWUsIGFuZCB0aGVyZSBpc24ndCBhIHVzZXItaW5wdXR0ZWQgdmVydGljYWxBeGlzU2NhbGVcbiAgICAgICAgLy8gU28sIHdlJ2xsIHByZXZlbnQgdGhlIGF4aXMgc2NhbGluZyBmcm9tIGludGVyZmVyaW5nIHdpdGggdGhlIGRhdGFTY2FsZVxuICAgICAgICB2ZXJ0aWNhbEF4aXNTY2FsZSA9ICduby1zY2FsZSc7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBob3Jpem9udGFsQXhpc1NjYWxlID0gcHJvdmlkZWRTY2FsaW5nQ29uZmlnPy5ob3Jpem9udGFsQXhpc1NjYWxlO1xuICAgIGlmIChob3Jpem9udGFsQXhpc1NjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjaGFydERhdGFEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgfHwgZGF0YVNjYWxlLnR5cGUgPT09ICdmaXQnKSB7XG4gICAgICAgIGhvcml6b250YWxBeGlzU2NhbGUgPVxuICAgICAgICAgIGRlZmF1bHRDb25maWcubm9uRWxlbWVudFNjYWxlcy5ob3Jpem9udGFsQXhpc1NjYWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9UaGUgaG9yaXpvbnRhbCBheGlzIGlzIHRoZSBkYXRhIGF4aXMsIHRoZSBkYXRhU2NhbGUgaGFzIGEgdXNlci1pbnB1dHRlZCB2YWx1ZSwgYW5kIHRoZXJlIGlzbid0IGEgdXNlci1pbnB1dHRlZCBob3Jpem9udGFsQXhpc1NjYWxlXG4gICAgICAgIC8vIFNvLCB3ZSdsbCBwcmV2ZW50IHRoZSBheGlzIHNjYWxpbmcgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSBkYXRhU2NhbGVcbiAgICAgICAgaG9yaXpvbnRhbEF4aXNTY2FsZSA9ICduby1zY2FsZSc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkYXRhU2NhbGU6XG4gICAgICAgIHByb3ZpZGVkU2NhbGluZ0NvbmZpZyAmJiBwcm92aWRlZFNjYWxpbmdDb25maWcuZGF0YVNjYWxlXG4gICAgICAgICAgPyBwcm92aWRlZFNjYWxpbmdDb25maWcuZGF0YVNjYWxlXG4gICAgICAgICAgOiBkZWZhdWx0Q29uZmlnLm5vbkVsZW1lbnRTY2FsZXMuZGF0YVNjYWxlLFxuICAgICAgaG9yaXpvbnRhbEF4aXNTY2FsZSxcbiAgICAgIHZlcnRpY2FsQXhpc1NjYWxlLFxuICAgICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOlxuICAgICAgICBwcm92aWRlZFNjYWxpbmdDb25maWcgJiYgcHJvdmlkZWRTY2FsaW5nQ29uZmlnLmhvcml6b250YWxDb250YWluZXJTY2FsZVxuICAgICAgICAgID8gcHJvdmlkZWRTY2FsaW5nQ29uZmlnLmhvcml6b250YWxDb250YWluZXJTY2FsZVxuICAgICAgICAgIDogZGVmYXVsdENvbmZpZy5ub25FbGVtZW50U2NhbGVzLmhvcml6b250YWxDb250YWluZXJTY2FsZSxcbiAgICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6XG4gICAgICAgIHByb3ZpZGVkU2NhbGluZ0NvbmZpZyAmJiBwcm92aWRlZFNjYWxpbmdDb25maWcudmVydGljYWxDb250YWluZXJTY2FsZVxuICAgICAgICAgID8gcHJvdmlkZWRTY2FsaW5nQ29uZmlnLnZlcnRpY2FsQ29udGFpbmVyU2NhbGVcbiAgICAgICAgICA6IGRlZmF1bHRDb25maWcubm9uRWxlbWVudFNjYWxlcy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlLFxuICAgICAgdGFyZ2V0VGlja0NvdW50OlxuICAgICAgICBwcm92aWRlZFNjYWxpbmdDb25maWcgJiZcbiAgICAgICAgcHJvdmlkZWRTY2FsaW5nQ29uZmlnLnRhcmdldFRpY2tDb3VudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBwcm92aWRlZFNjYWxpbmdDb25maWcudGFyZ2V0VGlja0NvdW50XG4gICAgICAgICAgOiBkZWZhdWx0Q29uZmlnLm5vbkVsZW1lbnRTY2FsZXMudGFyZ2V0VGlja0NvdW50LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpc0RlRW1waGFzaXplZChcbiAgICBjb25maWc6IEZsb3dDb25maWcsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBpc0RhcmtlbmVkOiBib29sZWFuLFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBoaWdobGlnaHRlZEJ1Y2tldHMgPSBjb25maWcuZmxvd0NvbmZpZy5zdWJCdWNrZXRzQ29uZmlnXG4gICAgICAuZmlsdGVyKHNiYyA9PiBzYmMuaXNIaWdobGlnaHRlZCA9PT0gdHJ1ZSlcbiAgICAgIC5tYXAoc2JjID0+IHNiYy5idWNrZXRJZCk7XG4gICAgaWYgKGhpZ2hsaWdodGVkQnVja2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGlzRGFya2VuZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoaGlnaGxpZ2h0ZWRCdWNrZXRzLnNvbWUoaGIgPT4gaGIgPT09IGlkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZUZsb3dDb25uZWN0aW9uUGF0aChcbiAgICBjb25uZWN0aW9uOiBGbG93Q29ubmVjdGlvblJlbmRlcixcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBkeCA9IGNvbm5lY3Rpb24udG9wTGluZS54MiAtIGNvbm5lY3Rpb24udG9wTGluZS54MTtcbiAgICBjb25zdCBjdXJ2ZSA9IE1hdGguYWJzKGR4KSAqIEZMT1dfQ09OTkVDVElPTl9DVVJWRV9DT05TVEFOVDtcblxuICAgIGNvbnN0IHBhdGggPSBgXG4gICAgICBNICR7Y29ubmVjdGlvbi50b3BMaW5lLngxfSwke2Nvbm5lY3Rpb24udG9wTGluZS55MX1cblxuICAgICAgQyAke2Nvbm5lY3Rpb24udG9wTGluZS54MSArIGN1cnZlfSwke2Nvbm5lY3Rpb24udG9wTGluZS55MX1cbiAgICAgICAgJHtjb25uZWN0aW9uLnRvcExpbmUueDIgLSBjdXJ2ZX0sJHtjb25uZWN0aW9uLnRvcExpbmUueTJ9XG4gICAgICAgICR7Y29ubmVjdGlvbi50b3BMaW5lLngyfSwke2Nvbm5lY3Rpb24udG9wTGluZS55Mn1cblxuICAgICAgTCAke2Nvbm5lY3Rpb24uYm90dG9tTGluZS54Mn0sJHtjb25uZWN0aW9uLmJvdHRvbUxpbmUueTJ9XG5cbiAgICAgIEMgJHtjb25uZWN0aW9uLmJvdHRvbUxpbmUueDIgLSBjdXJ2ZX0sJHtjb25uZWN0aW9uLmJvdHRvbUxpbmUueTJ9XG4gICAgICAgICR7Y29ubmVjdGlvbi5ib3R0b21MaW5lLngxICsgY3VydmV9LCR7Y29ubmVjdGlvbi5ib3R0b21MaW5lLnkxfVxuICAgICAgICAke2Nvbm5lY3Rpb24uYm90dG9tTGluZS54MX0sJHtjb25uZWN0aW9uLmJvdHRvbUxpbmUueTF9XG5cbiAgICAgIFpcbiAgICBgO1xuXG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBmdW5jdGlvbiBjdWJpYyhcbiAgICBhOiBudW1iZXIsXG4gICAgYjogbnVtYmVyLFxuICAgIGM6IG51bWJlcixcbiAgICBkOiBudW1iZXIsXG4gICAgdDogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IG10ID0gMSAtIHQ7XG4gICAgcmV0dXJuIG10ICoqIDMgKiBhICsgMyAqIG10ICoqIDIgKiB0ICogYiArIDMgKiBtdCAqIHQgKiogMiAqIGMgKyB0ICoqIDMgKiBkO1xuICB9XG5cbiAgZnVuY3Rpb24gYmV6aWVyWUF0WChcbiAgICB4OiBudW1iZXIsXG4gICAgbGluZToge1xuICAgICAgeDE6IG51bWJlcjtcbiAgICAgIHkxOiBudW1iZXI7XG4gICAgICB4MjogbnVtYmVyO1xuICAgICAgeTI6IG51bWJlcjtcbiAgICB9LFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IGN1cnZlID0gTWF0aC5hYnMobGluZS54MiAtIGxpbmUueDEpICogRkxPV19DT05ORUNUSU9OX0NVUlZFX0NPTlNUQU5UO1xuICAgIGNvbnN0IHAwID0geyB4OiBsaW5lLngxLCB5OiBsaW5lLnkxIH07XG4gICAgY29uc3QgcDEgPSB7IHg6IGxpbmUueDEgKyBjdXJ2ZSwgeTogbGluZS55MSB9O1xuICAgIGNvbnN0IHAyID0geyB4OiBsaW5lLngyIC0gY3VydmUsIHk6IGxpbmUueTIgfTtcbiAgICBjb25zdCBwMyA9IHsgeDogbGluZS54MiwgeTogbGluZS55MiB9O1xuXG4gICAgbGV0IGxvID0gMDtcbiAgICBsZXQgaGkgPSAxO1xuXG4gICAgLy8gQmluYXJ5IHNlYXJjaCBmb3IgdCB3aGVyZSBiZXppZXJYKHQpIH49IHhcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAgICAgIGNvbnN0IHQgPSAobG8gKyBoaSkgLyAyO1xuICAgICAgY29uc3QgYnggPSBjdWJpYyhwMC54LCBwMS54LCBwMi54LCBwMy54LCB0KTtcblxuICAgICAgaWYgKGJ4IDwgeCkgbG8gPSB0O1xuICAgICAgZWxzZSBoaSA9IHQ7XG4gICAgfVxuXG4gICAgY29uc3QgdCA9IChsbyArIGhpKSAvIDI7XG4gICAgcmV0dXJuIGN1YmljKHAwLnksIHAxLnksIHAyLnksIHAzLnksIHQpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tJZlBvaW50V2l0aGluQ29ubmVjdGlvbihcbiAgICBjb25uZWN0aW9uOiBGbG93Q29ubmVjdGlvblJlbmRlcixcbiAgICBwb2ludFg6IG51bWJlcixcbiAgICBwb2ludFk6IG51bWJlcixcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdG9wWSA9IGJlemllcllBdFgocG9pbnRYLCBjb25uZWN0aW9uLnRvcExpbmUpO1xuXG4gICAgY29uc3QgYm90dG9tWSA9IGJlemllcllBdFgocG9pbnRYLCBjb25uZWN0aW9uLmJvdHRvbUxpbmUpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHBvaW50WCA+PSBjb25uZWN0aW9uLnRvcExpbmUueDEgJiZcbiAgICAgIHBvaW50WCA8PSBjb25uZWN0aW9uLnRvcExpbmUueDIgJiZcbiAgICAgIHBvaW50WSA+PSBNYXRoLm1pbih0b3BZLCBib3R0b21ZKSAmJlxuICAgICAgcG9pbnRZIDw9IE1hdGgubWF4KHRvcFksIGJvdHRvbVkpXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEZsb3dCdWNrZXRJbmRleEZvckhvdmVyKFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgICB4UG9zOiBudW1iZXIsXG4gICk6IHsgaW5kZXg6IG51bWJlcjsgYXJlYTogJ2JhcicgfCAnY29ubmVjdGlvbicgfSB8IG51bGwge1xuICAgIGxldCBidWNrZXRJbmRleCA9IDA7XG4gICAgY29uc3QgYnVja2V0TGVmdEVkZ2UgPSBjaGFydFNpemluZ1ZhbHVlcy50b3RhbExlZnRPZmZzZXQ7XG4gICAgY29uc3QgdG90YWxCdWNrZXRHYXAgPVxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSArIGNoYXJ0U2l6aW5nVmFsdWVzLmJ1Y2tldEdhcDtcbiAgICBpZiAoYnVja2V0TGVmdEVkZ2UgPiB4UG9zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgd2hpbGUgKGJ1Y2tldExlZnRFZGdlICsgYnVja2V0SW5kZXggKiB0b3RhbEJ1Y2tldEdhcCA8IHhQb3MpIHtcbiAgICAgIGlmIChidWNrZXRMZWZ0RWRnZSArIChidWNrZXRJbmRleCArIDEpICogdG90YWxCdWNrZXRHYXAgPiB4UG9zKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBidWNrZXRMZWZ0RWRnZSArXG4gICAgICAgICAgICBidWNrZXRJbmRleCAqIHRvdGFsQnVja2V0R2FwICtcbiAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgPlxuICAgICAgICAgIHhQb3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4OiBidWNrZXRJbmRleCxcbiAgICAgICAgICAgIGFyZWE6ICdiYXInLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4OiBidWNrZXRJbmRleCxcbiAgICAgICAgICAgIGFyZWE6ICdjb25uZWN0aW9uJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBidWNrZXRJbmRleCArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vVGhlc2Ugb3ZlcmxvYWRzIGVuc3VyZSB0aGUgZnVuY3Rpb24ga25vd3MgdGhhdCwgaWYgd2lkdGggYW5kIGhlaWdodCBhcmUgZGVmaW5lZCBvbiBpbnB1dCwgdGhleSdsbCBiZSBkZWZpbmVkIG9uIG91dHB1dFxuICBmdW5jdGlvbiBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgYW5jaG9yWDogbnVtYmVyLFxuICAgIGFuY2hvclk6IG51bWJlcixcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiB7IGFuY2hvclg6IG51bWJlcjsgYW5jaG9yWTogbnVtYmVyIH07XG5cbiAgZnVuY3Rpb24gY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgIGFuY2hvclg6IG51bWJlcixcbiAgICBhbmNob3JZOiBudW1iZXIsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICApOiB7XG4gICAgYW5jaG9yWDogbnVtYmVyO1xuICAgIGFuY2hvclk6IG51bWJlcjtcbiAgICBhbmNob3JXaWR0aDogbnVtYmVyO1xuICAgIGFuY2hvckhlaWdodDogbnVtYmVyO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICBhbmNob3JYOiBudW1iZXIsXG4gICAgYW5jaG9yWTogbnVtYmVyLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICAgd2lkdGg/OiBudW1iZXIsXG4gICAgaGVpZ2h0PzogbnVtYmVyLFxuICApOiB7XG4gICAgYW5jaG9yWDogbnVtYmVyO1xuICAgIGFuY2hvclk6IG51bWJlcjtcbiAgICBhbmNob3JXaWR0aD86IG51bWJlcjtcbiAgICBhbmNob3JIZWlnaHQ/OiBudW1iZXI7XG4gIH0ge1xuICAgIGxldCByZXRBbmNob3JYID0gYW5jaG9yWDtcbiAgICBsZXQgcmV0QW5jaG9yWSA9IGFuY2hvclk7XG4gICAgbGV0IHJldFdpZHRoOiBudW1iZXIgfCB1bmRlZmluZWQgPSB3aWR0aDtcbiAgICBsZXQgcmV0SGVpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQgPSBoZWlnaHQ7XG4gICAgaWYgKHJldEFuY2hvclggPiBkaW1lbnNpb25zLndpZHRoKSB7XG4gICAgICByZXRBbmNob3JYID0gZGltZW5zaW9ucy53aWR0aDtcbiAgICAgIGlmIChyZXRXaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldFdpZHRoID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJldEFuY2hvclggPCAwKSB7XG4gICAgICByZXRBbmNob3JYID0gMDtcbiAgICAgIGlmIChyZXRXaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldFdpZHRoID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJldEFuY2hvclkgPiBkaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgcmV0QW5jaG9yWSA9IGRpbWVuc2lvbnMuaGVpZ2h0O1xuICAgICAgaWYgKHJldEhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldEhlaWdodCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXRBbmNob3JZIDwgMCkge1xuICAgICAgcmV0QW5jaG9yWSA9IDA7XG4gICAgICBpZiAocmV0SGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0SGVpZ2h0ID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYW5jaG9yWDogcmV0QW5jaG9yWCxcbiAgICAgIGFuY2hvclk6IHJldEFuY2hvclksXG4gICAgICBhbmNob3JXaWR0aDogcmV0V2lkdGgsXG4gICAgICBhbmNob3JIZWlnaHQ6IHJldEhlaWdodCxcbiAgICB9O1xuICB9XG59XG4iXX0=