css-to-tailwind-react 0.2.2 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -39,9 +39,12 @@ export declare class CSSParser {
39
39
  private mapper;
40
40
  private breakpoints;
41
41
  private sourceOrderCounter;
42
+ private variableRegistry;
42
43
  constructor(mapper: TailwindMapper, screens?: Record<string, string | [string, string]>);
43
44
  private resetSourceOrder;
44
45
  private getNextSourceOrder;
46
+ private collectVariables;
47
+ private resolveDeclarationValue;
45
48
  private convertDeclarations;
46
49
  private processSimpleRule;
47
50
  private processDescendantRule;
package/dist/cssParser.js CHANGED
@@ -12,6 +12,7 @@ const pseudoSelectorResolver_1 = require("./utils/pseudoSelectorResolver");
12
12
  const descendantSelectorResolver_1 = require("./utils/descendantSelectorResolver");
13
13
  const variantAssembler_1 = require("./utils/variantAssembler");
14
14
  const specificityCalculator_1 = require("./utils/specificityCalculator");
15
+ const variableRegistry_1 = require("./utils/variableRegistry");
15
16
  class CSSParser {
16
17
  constructor(mapper, screens) {
17
18
  this.sourceOrderCounter = 0;
@@ -19,22 +20,91 @@ class CSSParser {
19
20
  this.breakpoints = screens
20
21
  ? (0, breakpointResolver_1.resolveBreakpointsFromConfig)(screens)
21
22
  : (0, breakpointResolver_1.getBreakpoints)();
23
+ this.variableRegistry = new variableRegistry_1.VariableRegistry();
22
24
  }
23
25
  resetSourceOrder() {
24
26
  this.sourceOrderCounter = 0;
27
+ this.variableRegistry.clear();
25
28
  }
26
29
  getNextSourceOrder() {
27
30
  return ++this.sourceOrderCounter;
28
31
  }
29
- convertDeclarations(declarations, specificity, sourceOrder) {
32
+ collectVariables(node, additionalVariants = []) {
33
+ let sourceOrder = 0;
34
+ node.walkRules((rule) => {
35
+ const selector = rule.selector;
36
+ const isRootSelector = selector === ':root';
37
+ let scope;
38
+ let specificity;
39
+ if (isRootSelector) {
40
+ scope = (0, variableRegistry_1.createGlobalScope)();
41
+ specificity = { inline: 0, id: 0, class: 0, element: 0 };
42
+ }
43
+ else {
44
+ const parsed = (0, descendantSelectorResolver_1.parseDescendantSelector)(selector);
45
+ if (parsed.isComplex) {
46
+ return;
47
+ }
48
+ if (parsed.parent) {
49
+ scope = (0, variableRegistry_1.createSelectorScope)(selector, parsed.parent.type);
50
+ specificity = (0, specificityCalculator_1.calculateDescendantSpecificity)(parsed.parent.type, parsed.parent.name, parsed.target.type, parsed.target.name);
51
+ }
52
+ else {
53
+ const selectorType = selector.startsWith('.') ? 'class' : 'element';
54
+ scope = (0, variableRegistry_1.createSelectorScope)(selector, selectorType);
55
+ specificity = (0, specificityCalculator_1.calculateSelectorSpecificity)(selector);
56
+ }
57
+ }
58
+ rule.walkDecls((decl) => {
59
+ if (!(0, variableRegistry_1.isCssVariable)(decl.prop)) {
60
+ return;
61
+ }
62
+ const varDef = {
63
+ name: decl.prop,
64
+ value: decl.value,
65
+ scope,
66
+ specificity,
67
+ sourceOrder: ++sourceOrder,
68
+ variants: additionalVariants
69
+ };
70
+ this.variableRegistry.register(varDef);
71
+ logger_1.logger.verbose(`Registered CSS variable: ${decl.prop} = ${decl.value} (scope: ${scope.type})`);
72
+ });
73
+ });
74
+ }
75
+ resolveDeclarationValue(value, selector, specificity, variants) {
76
+ if (!(0, variableRegistry_1.isVarExpression)(value)) {
77
+ return { resolvedValue: value, hasUnresolved: false };
78
+ }
79
+ const context = {
80
+ selector,
81
+ specificity,
82
+ variants
83
+ };
84
+ const result = this.variableRegistry.resolveValue(value, context);
85
+ return { resolvedValue: result.value, hasUnresolved: result.hasUnresolved };
86
+ }
87
+ convertDeclarations(declarations, specificity, sourceOrder, selector = '', variants = []) {
30
88
  const conversionResults = [];
31
89
  const conversionWarnings = [];
32
90
  declarations.forEach(decl => {
33
- const result = this.mapper.convertProperty(decl.property, decl.value);
91
+ const valueToConvert = this.resolveDeclarationValue(decl.value, selector, specificity, variants);
92
+ if (valueToConvert.hasUnresolved) {
93
+ conversionResults.push({
94
+ declaration: decl,
95
+ converted: false,
96
+ className: null,
97
+ resolvedValue: valueToConvert.resolvedValue
98
+ });
99
+ conversionWarnings.push(`Could not fully resolve var() in: ${decl.property}: ${decl.value}`);
100
+ return;
101
+ }
102
+ const result = this.mapper.convertProperty(decl.property, valueToConvert.resolvedValue);
34
103
  conversionResults.push({
35
104
  declaration: decl,
36
105
  converted: !result.skipped && result.className !== null,
37
- className: result.className
106
+ className: result.className,
107
+ resolvedValue: valueToConvert.resolvedValue
38
108
  });
39
109
  if (result.skipped && result.reason) {
40
110
  conversionWarnings.push(result.reason);
@@ -87,9 +157,9 @@ class CSSParser {
87
157
  class: specificity.class + pseudoCount,
88
158
  element: specificity.element
89
159
  };
90
- const { utilities, conversionResults, conversionWarnings } = this.convertDeclarations(declarations, specificityWithPseudo, sourceOrder);
91
160
  const pseudoVariants = parsed.pseudos || [];
92
161
  const allVariants = (0, variantAssembler_1.normalizeVariantOrder)([...pseudoVariants, ...additionalVariants]);
162
+ const { utilities, conversionResults, conversionWarnings } = this.convertDeclarations(declarations, specificityWithPseudo, sourceOrder, selector, allVariants);
93
163
  const utilitiesForSelector = utilities.map(u => ({
94
164
  ...u,
95
165
  variants: allVariants
@@ -139,7 +209,7 @@ class CSSParser {
139
209
  }
140
210
  const sourceOrder = this.getNextSourceOrder();
141
211
  const specificity = (0, specificityCalculator_1.calculateDescendantSpecificity)(parsed.parent.type, parsed.parent.name, parsed.target.type, parsed.target.name);
142
- const { utilities, conversionResults, conversionWarnings } = this.convertDeclarations(declarations, specificity, sourceOrder);
212
+ const { utilities, conversionResults, conversionWarnings } = this.convertDeclarations(declarations, specificity, sourceOrder, selector, additionalVariants);
143
213
  const utilitiesWithVariants = utilities.map(u => ({
144
214
  ...u,
145
215
  variants: (0, variantAssembler_1.normalizeVariantOrder)([...u.variants, ...additionalVariants])
@@ -175,6 +245,7 @@ class CSSParser {
175
245
  parser: postcss_safe_parser_1.default,
176
246
  from: filePath
177
247
  }).then(result => result.root);
248
+ this.collectVariables(root, []);
178
249
  root.walkAtRules((atRule) => {
179
250
  if (atRule.name !== 'media') {
180
251
  return;
@@ -185,6 +256,7 @@ class CSSParser {
185
256
  return;
186
257
  }
187
258
  const responsiveVariant = mediaResult.breakpoint;
259
+ this.collectVariables(atRule, [responsiveVariant]);
188
260
  const nestedRules = [];
189
261
  atRule.walkRules((rule) => {
190
262
  nestedRules.push(rule);
@@ -410,4 +482,4 @@ class CSSParser {
410
482
  }
411
483
  }
412
484
  exports.CSSParser = CSSParser;
413
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nzc1BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBbUU7QUFDbkUsOEVBQTZDO0FBRTdDLDJDQUF3QztBQUN4QyxtRUFLb0M7QUFDcEMsMkVBSXdDO0FBQ3hDLG1GQU00QztBQUM1QywrREFNa0M7QUFDbEMseUVBS3VDO0FBMkN2QyxNQUFhLFNBQVM7SUFLcEIsWUFBWSxNQUFzQixFQUFFLE9BQW1EO1FBRi9FLHVCQUFrQixHQUFXLENBQUMsQ0FBQztRQUdyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU87WUFDeEIsQ0FBQyxDQUFDLElBQUEsaURBQTRCLEVBQUMsT0FBTyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxJQUFBLG1DQUFjLEdBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsWUFBMkIsRUFDM0IsV0FBd0IsRUFDeEIsV0FBbUI7UUFNbkIsTUFBTSxpQkFBaUIsR0FJbEIsRUFBRSxDQUFDO1FBQ1IsTUFBTSxrQkFBa0IsR0FBYSxFQUFFLENBQUM7UUFFeEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RSxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixTQUFTLEVBQUUsQ0FBQyxNQUFNLENB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RCw4QkFpZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBvc3Rjc3MsIHsgUm9vdCwgUnVsZSwgRGVjbGFyYXRpb24sIEF0UnVsZSB9IGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHNhZmVQYXJzZXIgZnJvbSAncG9zdGNzcy1zYWZlLXBhcnNlcic7XG5pbXBvcnQgeyBUYWlsd2luZE1hcHBlciwgQ1NTUHJvcGVydHkgfSBmcm9tICcuL3RhaWx3aW5kTWFwcGVyJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCB7IFxuICBCcmVha3BvaW50LCBcbiAgZ2V0QnJlYWtwb2ludHMsIFxuICByZXNvbHZlQnJlYWtwb2ludHNGcm9tQ29uZmlnLFxuICBwcm9jZXNzTWVkaWFRdWVyeSBcbn0gZnJvbSAnLi91dGlscy9icmVha3BvaW50UmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1BzZXVkb1NlbGVjdG9yLFxuICBwYXJzZU11bHRpcGxlU2VsZWN0b3JzLFxuICBQYXJzZWRTZWxlY3RvclxufSBmcm9tICcuL3V0aWxzL3BzZXVkb1NlbGVjdG9yUmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgcGFyc2VEZXNjZW5kYW50U2VsZWN0b3IsXG4gIHByb2Nlc3NEZXNjZW5kYW50U2VsZWN0b3IsXG4gIERlc2NlbmRhbnRTZWxlY3RvcixcbiAgU2VsZWN0b3JQYXJ0LFxuICBpc0h0bWxFbGVtZW50XG59IGZyb20gJy4vdXRpbHMvZGVzY2VuZGFudFNlbGVjdG9yUmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgYXNzZW1ibGVVdGlsaXR5LFxuICBhc3NlbWJsZVV0aWxpdGllcyxcbiAgTWVyZ2VkVXRpbGl0eSxcbiAgbWVyZ2VVdGlsaXRpZXMsXG4gIG5vcm1hbGl6ZVZhcmlhbnRPcmRlclxufSBmcm9tICcuL3V0aWxzL3ZhcmlhbnRBc3NlbWJsZXInO1xuaW1wb3J0IHtcbiAgU3BlY2lmaWNpdHksXG4gIGNhbGN1bGF0ZVNlbGVjdG9yU3BlY2lmaWNpdHksXG4gIGNhbGN1bGF0ZURlc2NlbmRhbnRTcGVjaWZpY2l0eSxcbiAgWkVST19TUEVDSUZJQ0lUWVxufSBmcm9tICcuL3V0aWxzL3NwZWNpZmljaXR5Q2FsY3VsYXRvcic7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eUZvclV0aWxpdHkgfSBmcm9tICcuL3V0aWxzL3Byb3BlcnR5TWFwcGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBVdGlsaXR5V2l0aFZhcmlhbnQge1xuICB2YWx1ZTogc3RyaW5nO1xuICB2YXJpYW50czogc3RyaW5nW107XG4gIGNzc1Byb3BlcnR5OiBzdHJpbmc7XG4gIHNwZWNpZmljaXR5OiBTcGVjaWZpY2l0eTtcbiAgc291cmNlT3JkZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RvclRhcmdldCB7XG4gIHR5cGU6ICdjbGFzcycgfCAnZWxlbWVudCc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDU1NSdWxlIHtcbiAgc2VsZWN0b3I6IHN0cmluZztcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXTtcbiAgY29udmVydGVkQ2xhc3Nlczogc3RyaW5nW107XG4gIHV0aWxpdGllczogVXRpbGl0eVdpdGhWYXJpYW50W107XG4gIHNraXBwZWQ6IGJvb2xlYW47XG4gIGZ1bGx5Q29udmVydGVkOiBib29sZWFuO1xuICBwYXJ0aWFsQ29udmVyc2lvbjogYm9vbGVhbjtcbiAgcmVhc29uPzogc3RyaW5nO1xuICBpc0Rlc2NlbmRhbnQ6IGJvb2xlYW47XG4gIHBhcmVudFNlbGVjdG9yPzogU2VsZWN0b3JUYXJnZXQ7XG4gIHRhcmdldFNlbGVjdG9yPzogU2VsZWN0b3JUYXJnZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTUGFyc2VSZXN1bHQge1xuICBjc3M6IHN0cmluZztcbiAgcnVsZXM6IENTU1J1bGVbXTtcbiAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgY2FuRGVsZXRlOiBib29sZWFuO1xuICB3YXJuaW5nczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTVXNhZ2VNYXAge1xuICBbY2xhc3NOYW1lOiBzdHJpbmddOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIENTU1BhcnNlciB7XG4gIHByaXZhdGUgbWFwcGVyOiBUYWlsd2luZE1hcHBlcjtcbiAgcHJpdmF0ZSBicmVha3BvaW50czogQnJlYWtwb2ludFtdO1xuICBwcml2YXRlIHNvdXJjZU9yZGVyQ291bnRlcjogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihtYXBwZXI6IFRhaWx3aW5kTWFwcGVyLCBzY3JlZW5zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgW3N0cmluZywgc3RyaW5nXT4pIHtcbiAgICB0aGlzLm1hcHBlciA9IG1hcHBlcjtcbiAgICB0aGlzLmJyZWFrcG9pbnRzID0gc2NyZWVucyBcbiAgICAgID8gcmVzb2x2ZUJyZWFrcG9pbnRzRnJvbUNvbmZpZyhzY3JlZW5zKSBcbiAgICAgIDogZ2V0QnJlYWtwb2ludHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRTb3VyY2VPcmRlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNvdXJjZU9yZGVyQ291bnRlciA9IDA7XG4gIH1cblxuICBwcml2YXRlIGdldE5leHRTb3VyY2VPcmRlcigpOiBudW1iZXIge1xuICAgIHJldHVybiArK3RoaXMuc291cmNlT3JkZXJDb3VudGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RGVjbGFyYXRpb25zKFxuICAgIGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXSxcbiAgICBzcGVjaWZpY2l0eTogU3BlY2lmaWNpdHksXG4gICAgc291cmNlT3JkZXI6IG51bWJlclxuICApOiB7XG4gICAgdXRpbGl0aWVzOiBVdGlsaXR5V2l0aFZhcmlhbnRbXTtcbiAgICBjb252ZXJzaW9uUmVzdWx0czogQXJyYXk8eyBkZWNsYXJhdGlvbjogQ1NTUHJvcGVydHk7IGNvbnZlcnRlZDogYm9vbGVhbjsgY2xhc3NOYW1lOiBzdHJpbmcgfCBudWxsIH0+O1xuICAgIGNvbnZlcnNpb25XYXJuaW5nczogc3RyaW5nW107XG4gIH0ge1xuICAgIGNvbnN0IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7XG4gICAgICBkZWNsYXJhdGlvbjogQ1NTUHJvcGVydHk7XG4gICAgICBjb252ZXJ0ZWQ6IGJvb2xlYW47XG4gICAgICBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgfT4gPSBbXTtcbiAgICBjb25zdCBjb252ZXJzaW9uV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBkZWNsYXJhdGlvbnMuZm9yRWFjaChkZWNsID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWFwcGVyLmNvbnZlcnRQcm9wZXJ0eShkZWNsLnByb3BlcnR5LCBkZWNsLnZhbHVlKTtcbiAgICAgIGNvbnZlcnNpb25SZXN1bHRzLnB1c2goe1xuICAgICAgICBkZWNsYXJhdGlvbjogZGVjbCxcbiAgICAgICAgY29udmVydGVkOiAhcmVzdWx0LnNraXBwZWQgJiYgcmVzdWx0LmNsYXNzTmFtZSAhPT0gbnVsbCxcbiAgICAgICAgY2xhc3NOYW1lOiByZXN1bHQuY2xhc3NOYW1lXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuc2tpcHBlZCAmJiByZXN1bHQucmVhc29uKSB7XG4gICAgICAgIGNvbnZlcnNpb25XYXJuaW5ncy5wdXNoKHJlc3VsdC5yZWFzb24pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgdXRpbGl0aWVzOiBVdGlsaXR5V2l0aFZhcmlhbnRbXSA9IGNvbnZlcnNpb25SZXN1bHRzXG4gICAgICAuZmlsdGVyKHIgPT4gci5jb252ZXJ0ZWQgJiYgci5jbGFzc05hbWUpXG4gICAgICAubWFwKHIgPT4gKHtcbiAgICAgICAgdmFsdWU6IHIuY2xhc3NOYW1lISxcbiAgICAgICAgdmFyaWFudHM6IFtdLFxuICAgICAgICBjc3NQcm9wZXJ0eTogci5kZWNsYXJhdGlvbi5wcm9wZXJ0eSxcbiAgICAgICAgc3BlY2lmaWNpdHksXG4gICAgICAgIHNvdXJjZU9yZGVyXG4gICAgICB9KSk7XG5cbiAgICByZXR1cm4geyB1dGlsaXRpZXMsIGNvbnZlcnNpb25SZXN1bHRzLCBjb252ZXJzaW9uV2FybmluZ3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1NpbXBsZVJ1bGUoXG4gICAgcnVsZTogUnVsZSxcbiAgICBhZGRpdGlvbmFsVmFyaWFudHM6IHN0cmluZ1tdID0gW11cbiAgKTogeyBjc3NSdWxlczogQ1NTUnVsZVtdOyBjb252ZXJzaW9uUmVzdWx0czogQXJyYXk8eyBkZWNsYXJhdGlvbjogQ1NTUHJvcGVydHk7IGNvbnZlcnRlZDogYm9vbGVhbjsgY2xhc3NOYW1lOiBzdHJpbmcgfCBudWxsIH0+W107IGNvbnZlcnNpb25XYXJuaW5nczogc3RyaW5nW10gfSB8IG51bGwge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gcnVsZS5zZWxlY3RvcjtcbiAgICBjb25zdCBwYXJzZWRTZWxlY3RvcnMgPSBwYXJzZU11bHRpcGxlU2VsZWN0b3JzKHNlbGVjdG9yKTtcbiAgICBcbiAgICBjb25zdCB2YWxpZFNlbGVjdG9ycyA9IHBhcnNlZFNlbGVjdG9ycy5maWx0ZXIocyA9PiAhcy5pc0NvbXBsZXggJiYgcy5iYXNlQ2xhc3MpO1xuICAgIFxuICAgIGlmICh2YWxpZFNlbGVjdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXSA9IFtdO1xuXG4gICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgIGlmIChkZWNsLnByb3Auc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWNsLnZhbHVlLmluY2x1ZGVzKCdjYWxjKCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVjbGFyYXRpb25zLnB1c2goe1xuICAgICAgICBwcm9wZXJ0eTogZGVjbC5wcm9wLFxuICAgICAgICB2YWx1ZTogZGVjbC52YWx1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY3NzUnVsZXM6IENTU1J1bGVbXSA9IFtdO1xuICAgIGNvbnN0IGFsbENvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGwgfT5bXSA9IFtdO1xuICAgIGNvbnN0IGFsbENvbnZlcnNpb25XYXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgcGFyc2VkIG9mIHZhbGlkU2VsZWN0b3JzKSB7XG4gICAgICBjb25zdCBzb3VyY2VPcmRlciA9IHRoaXMuZ2V0TmV4dFNvdXJjZU9yZGVyKCk7XG4gICAgICBjb25zdCBzcGVjaWZpY2l0eSA9IGNhbGN1bGF0ZVNlbGVjdG9yU3BlY2lmaWNpdHkoc2VsZWN0b3IpO1xuICAgICAgY29uc3QgcHNldWRvQ291bnQgPSAocGFyc2VkLnBzZXVkb3MgfHwgW10pLmxlbmd0aDtcbiAgICAgIGNvbnN0IHNwZWNpZmljaXR5V2l0aFBzZXVkbyA9IHtcbiAgICAgICAgaW5saW5lOiBzcGVjaWZpY2l0eS5pbmxpbmUsXG4gICAgICAgIGlkOiBzcGVjaWZpY2l0eS5pZCxcbiAgICAgICAgY2xhc3M6IHNwZWNpZmljaXR5LmNsYXNzICsgcHNldWRvQ291bnQsXG4gICAgICAgIGVsZW1lbnQ6IHNwZWNpZmljaXR5LmVsZW1lbnRcbiAgICAgIH07XG4gICAgICBcbiAgICAgIGNvbnN0IHsgdXRpbGl0aWVzLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH0gPSB0aGlzLmNvbnZlcnREZWNsYXJhdGlvbnMoXG4gICAgICAgIGRlY2xhcmF0aW9ucyxcbiAgICAgICAgc3BlY2lmaWNpdHlXaXRoUHNldWRvLFxuICAgICAgICBzb3VyY2VPcmRlclxuICAgICAgKTtcbiAgICAgIFxuICAgICAgY29uc3QgcHNldWRvVmFyaWFudHMgPSBwYXJzZWQucHNldWRvcyB8fCBbXTtcbiAgICAgIGNvbnN0IGFsbFZhcmlhbnRzID0gbm9ybWFsaXplVmFyaWFudE9yZGVyKFsuLi5wc2V1ZG9WYXJpYW50cywgLi4uYWRkaXRpb25hbFZhcmlhbnRzXSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHV0aWxpdGllc0ZvclNlbGVjdG9yID0gdXRpbGl0aWVzLm1hcCh1ID0+ICh7XG4gICAgICAgIC4uLnUsXG4gICAgICAgIHZhcmlhbnRzOiBhbGxWYXJpYW50c1xuICAgICAgfSkpO1xuXG4gICAgICBjb25zdCBjb252ZXJ0ZWRDbGFzc2VzID0gYXNzZW1ibGVVdGlsaXRpZXModXRpbGl0aWVzRm9yU2VsZWN0b3IpO1xuXG4gICAgICBjb25zdCBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgPSBjb252ZXJzaW9uUmVzdWx0cy5ldmVyeShyID0+IHIuY29udmVydGVkKTtcbiAgICAgIGNvbnN0IHNvbWVEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgPSBjb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDA7XG5cbiAgICAgIGNvbnN0IGNzc1J1bGU6IENTU1J1bGUgPSB7XG4gICAgICAgIHNlbGVjdG9yOiBzZWxlY3RvcixcbiAgICAgICAgY2xhc3NOYW1lOiBwYXJzZWQuYmFzZUNsYXNzLFxuICAgICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnZlcnRlZENsYXNzZXMsXG4gICAgICAgIHV0aWxpdGllczogdXRpbGl0aWVzRm9yU2VsZWN0b3IsXG4gICAgICAgIHNraXBwZWQ6ICFzb21lRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgICBmdWxseUNvbnZlcnRlZDogYWxsRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgICBwYXJ0aWFsQ29udmVyc2lvbjogc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCAmJiAhYWxsRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgICByZWFzb246ICFzb21lRGVjbGFyYXRpb25zQ29udmVydGVkID8gJ05vIGNvbnZlcnRpYmxlIGRlY2xhcmF0aW9ucycgOiB1bmRlZmluZWQsXG4gICAgICAgIGlzRGVzY2VuZGFudDogZmFsc2VcbiAgICAgIH07XG5cbiAgICAgIGNzc1J1bGVzLnB1c2goY3NzUnVsZSk7XG4gICAgICBhbGxDb252ZXJzaW9uUmVzdWx0cy5wdXNoKGNvbnZlcnNpb25SZXN1bHRzKTtcbiAgICAgIGFsbENvbnZlcnNpb25XYXJuaW5ncy5wdXNoKC4uLmNvbnZlcnNpb25XYXJuaW5ncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY3NzUnVsZXMsIGNvbnZlcnNpb25SZXN1bHRzOiBhbGxDb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzOiBhbGxDb252ZXJzaW9uV2FybmluZ3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0Rlc2NlbmRhbnRSdWxlKFxuICAgIHJ1bGU6IFJ1bGUsXG4gICAgYWRkaXRpb25hbFZhcmlhbnRzOiBzdHJpbmdbXSA9IFtdXG4gICk6IHsgY3NzUnVsZTogQ1NTUnVsZTsgY29udmVyc2lvblJlc3VsdHM6IEFycmF5PHsgZGVjbGFyYXRpb246IENTU1Byb3BlcnR5OyBjb252ZXJ0ZWQ6IGJvb2xlYW47IGNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbCB9PjsgY29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXSB9IHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBydWxlLnNlbGVjdG9yO1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGVzY2VuZGFudFNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICBcbiAgICBpZiAocGFyc2VkLmlzQ29tcGxleCB8fCAhcGFyc2VkLnBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zOiBDU1NQcm9wZXJ0eVtdID0gW107XG5cbiAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgaWYgKGRlY2wucHJvcC5zdGFydHNXaXRoKCctLScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlY2wudmFsdWUuaW5jbHVkZXMoJ2NhbGMoJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWNsYXJhdGlvbnMucHVzaCh7XG4gICAgICAgIHByb3BlcnR5OiBkZWNsLnByb3AsXG4gICAgICAgIHZhbHVlOiBkZWNsLnZhbHVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VPcmRlciA9IHRoaXMuZ2V0TmV4dFNvdXJjZU9yZGVyKCk7XG4gICAgY29uc3Qgc3BlY2lmaWNpdHkgPSBjYWxjdWxhdGVEZXNjZW5kYW50U3BlY2lmaWNpdHkoXG4gICAgICBwYXJzZWQucGFyZW50LnR5cGUsXG4gICAgICBwYXJzZWQucGFyZW50Lm5hbWUsXG4gICAgICBwYXJzZWQudGFyZ2V0LnR5cGUsXG4gICAgICBwYXJzZWQudGFyZ2V0Lm5hbWVcbiAgICApO1xuXG4gICAgY29uc3QgeyB1dGlsaXRpZXMsIGNvbnZlcnNpb25SZXN1bHRzLCBjb252ZXJzaW9uV2FybmluZ3MgfSA9IHRoaXMuY29udmVydERlY2xhcmF0aW9ucyhcbiAgICAgIGRlY2xhcmF0aW9ucyxcbiAgICAgIHNwZWNpZmljaXR5LFxuICAgICAgc291cmNlT3JkZXJcbiAgICApO1xuICAgIFxuICAgIGNvbnN0IHV0aWxpdGllc1dpdGhWYXJpYW50cyA9IHV0aWxpdGllcy5tYXAodSA9PiAoe1xuICAgICAgLi4udSxcbiAgICAgIHZhcmlhbnRzOiBub3JtYWxpemVWYXJpYW50T3JkZXIoWy4uLnUudmFyaWFudHMsIC4uLmFkZGl0aW9uYWxWYXJpYW50c10pXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29udmVydGVkQ2xhc3NlcyA9IGFzc2VtYmxlVXRpbGl0aWVzKHV0aWxpdGllc1dpdGhWYXJpYW50cyk7XG5cbiAgICBjb25zdCBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgPSBjb252ZXJzaW9uUmVzdWx0cy5ldmVyeShyID0+IHIuY29udmVydGVkKTtcbiAgICBjb25zdCBzb21lRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gcGFyc2VkLnBhcmVudC50eXBlID09PSAnY2xhc3MnID8gcGFyc2VkLnBhcmVudC5uYW1lIDogJyc7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHBhcnNlZC50YXJnZXQudHlwZSA9PT0gJ2NsYXNzJyA/IGAuJHtwYXJzZWQudGFyZ2V0Lm5hbWV9YCA6IHBhcnNlZC50YXJnZXQubmFtZTtcblxuICAgIGNvbnN0IGNzc1J1bGU6IENTU1J1bGUgPSB7XG4gICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICBjb252ZXJ0ZWRDbGFzc2VzLFxuICAgICAgdXRpbGl0aWVzOiB1dGlsaXRpZXNXaXRoVmFyaWFudHMsXG4gICAgICBza2lwcGVkOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgIGZ1bGx5Q29udmVydGVkOiBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQsXG4gICAgICBwYXJ0aWFsQ29udmVyc2lvbjogc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCAmJiAhYWxsRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgcmVhc29uOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCA/ICdObyBjb252ZXJ0aWJsZSBkZWNsYXJhdGlvbnMnIDogdW5kZWZpbmVkLFxuICAgICAgaXNEZXNjZW5kYW50OiB0cnVlLFxuICAgICAgcGFyZW50U2VsZWN0b3I6IHBhcnNlZC5wYXJlbnQsXG4gICAgICB0YXJnZXRTZWxlY3RvcjogcGFyc2VkLnRhcmdldFxuICAgIH07XG5cbiAgICByZXR1cm4geyBjc3NSdWxlLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH07XG4gIH1cblxuICBhc3luYyBwYXJzZShjc3M6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8Q1NTUGFyc2VSZXN1bHQ+IHtcbiAgICB0aGlzLnJlc2V0U291cmNlT3JkZXIoKTtcbiAgICBjb25zdCBydWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByb290ID0gYXdhaXQgcG9zdGNzcygpLnByb2Nlc3MoY3NzLCB7XG4gICAgICAgIHBhcnNlcjogc2FmZVBhcnNlcixcbiAgICAgICAgZnJvbTogZmlsZVBhdGhcbiAgICAgIH0pLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5yb290KTtcblxuICAgICAgcm9vdC53YWxrQXRSdWxlcygoYXRSdWxlKSA9PiB7XG4gICAgICAgIGlmIChhdFJ1bGUubmFtZSAhPT0gJ21lZGlhJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lZGlhUmVzdWx0ID0gcHJvY2Vzc01lZGlhUXVlcnkoYXRSdWxlLnBhcmFtcywgdGhpcy5icmVha3BvaW50cyk7XG5cbiAgICAgICAgaWYgKG1lZGlhUmVzdWx0LnNraXBwZWQpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKG1lZGlhUmVzdWx0LnJlYXNvbiB8fCBgU2tpcHBlZCBtZWRpYSBxdWVyeTogJHthdFJ1bGUucGFyYW1zfWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNpdmVWYXJpYW50ID0gbWVkaWFSZXN1bHQuYnJlYWtwb2ludCE7XG5cbiAgICAgICAgY29uc3QgbmVzdGVkUnVsZXM6IFJ1bGVbXSA9IFtdO1xuICAgICAgICBhdFJ1bGUud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgICAgICAgbmVzdGVkUnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIG5lc3RlZFJ1bGVzKSB7XG4gICAgICAgICAgY29uc3QgZGVzY2VuZGFudFJlc3VsdCA9IHRoaXMucHJvY2Vzc0Rlc2NlbmRhbnRSdWxlKHJ1bGUsIFtyZXNwb25zaXZlVmFyaWFudF0pO1xuICAgICAgICAgIGlmIChkZXNjZW5kYW50UmVzdWx0KSB7XG4gICAgICAgICAgICBydWxlcy5wdXNoKGRlc2NlbmRhbnRSZXN1bHQuY3NzUnVsZSk7XG4gICAgICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLmRlc2NlbmRhbnRSZXN1bHQuY29udmVyc2lvbldhcm5pbmdzKTtcblxuICAgICAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQuY3NzUnVsZS5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQuY3NzUnVsZS5mdWxseUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICAgIHJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgZGVzY2VuZGFudCBydWxlICR7cnVsZS5zZWxlY3Rvcn0gaW4gQG1lZGlhIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2YgZGVzY2VuZGFudFJlc3VsdC5jb252ZXJzaW9uUmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgaWYgKGNyLmNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gb2YgZGVzY2VuZGFudCBydWxlIGluIEBtZWRpYSDihpIgJHtyZXNwb25zaXZlVmFyaWFudH1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc2ltcGxlUmVzdWx0ID0gdGhpcy5wcm9jZXNzU2ltcGxlUnVsZShydWxlLCBbcmVzcG9uc2l2ZVZhcmlhbnRdKTtcbiAgICAgICAgICBpZiAoc2ltcGxlUmVzdWx0KSB7XG4gICAgICAgICAgICBydWxlcy5wdXNoKC4uLnNpbXBsZVJlc3VsdC5jc3NSdWxlcyk7XG4gICAgICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLnNpbXBsZVJlc3VsdC5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgICAgICBjb25zdCBhbnlDb252ZXJ0ZWQgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMuc29tZShyID0+IHIuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwKTtcbiAgICAgICAgICAgIGlmIChhbnlDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgY29uc3QgYWxsRnVsbHlDb252ZXJ0ZWQgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMuZXZlcnkociA9PiByLmZ1bGx5Q29udmVydGVkKTtcbiAgICAgICAgICAgICAgaWYgKGFsbEZ1bGx5Q29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGFzc05hbWVzID0gc2ltcGxlUmVzdWx0LmNzc1J1bGVzLm1hcChyID0+IHIuY2xhc3NOYW1lKS5qb2luKCcsIC4nKTtcbiAgICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVtb3ZlZCBydWxlIC4ke2NsYXNzTmFtZXN9IGluIEBtZWRpYSAobWluLXdpZHRoKSDihpIgJHtyZXNwb25zaXZlVmFyaWFudH1gKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNyIG9mIHNpbXBsZVJlc3VsdC5jb252ZXJzaW9uUmVzdWx0cy5mbGF0KCkpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjci5jb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbC5wcm9wID09PSBjci5kZWNsYXJhdGlvbi5wcm9wZXJ0eSAmJiBkZWNsLnZhbHVlID09PSBjci5kZWNsYXJhdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUGFydGlhbCBjb252ZXJzaW9uIGluIEBtZWRpYSDihpIgJHtyZXNwb25zaXZlVmFyaWFudH1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3YXJuaW5ncy5wdXNoKGBTa2lwcGVkIHJ1bGUgaW4gQG1lZGlhOiAke3J1bGUuc2VsZWN0b3J9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF0UnVsZS5ub2RlcyAmJiBhdFJ1bGUubm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgYXRSdWxlLnJlbW92ZSgpO1xuICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZW1vdmVkIGVtcHR5IEBtZWRpYSBydWxlYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByb290LndhbGtSdWxlcygocnVsZSkgPT4ge1xuICAgICAgICBpZiAocnVsZS5wYXJlbnQgJiYgcnVsZS5wYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXNjZW5kYW50UmVzdWx0ID0gdGhpcy5wcm9jZXNzRGVzY2VuZGFudFJ1bGUocnVsZSk7XG4gICAgICAgIGlmIChkZXNjZW5kYW50UmVzdWx0KSB7XG4gICAgICAgICAgcnVsZXMucHVzaChkZXNjZW5kYW50UmVzdWx0LmNzc1J1bGUpO1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goLi4uZGVzY2VuZGFudFJlc3VsdC5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQuY3NzUnVsZS5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmZ1bGx5Q29udmVydGVkKSB7XG4gICAgICAgICAgICAgIHJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZW1vdmVkIGRlc2NlbmRhbnQgcnVsZSAke3J1bGUuc2VsZWN0b3J9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNyIG9mIGRlc2NlbmRhbnRSZXN1bHQuY29udmVyc2lvblJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3IuY29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbC5wcm9wID09PSBjci5kZWNsYXJhdGlvbi5wcm9wZXJ0eSAmJiBkZWNsLnZhbHVlID09PSBjci5kZWNsYXJhdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUGFydGlhbCBjb252ZXJzaW9uIG9mIGRlc2NlbmRhbnQgcnVsZWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaW1wbGVSZXN1bHQgPSB0aGlzLnByb2Nlc3NTaW1wbGVSdWxlKHJ1bGUpO1xuICAgICAgICBcbiAgICAgICAgaWYgKCFzaW1wbGVSZXN1bHQpIHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZURlc2NlbmRhbnRTZWxlY3RvcihydWxlLnNlbGVjdG9yKTtcbiAgICAgICAgICBpZiAocGFyc2VkLmlzQ29tcGxleCkge1xuICAgICAgICAgICAgd2FybmluZ3MucHVzaChwYXJzZWQucmVhc29uIHx8IGBTa2lwcGVkIGNvbXBsZXggc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBTa2lwcGluZyBjb21wbGV4IHNlbGVjdG9yOiAke3J1bGUuc2VsZWN0b3J9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFNlbGVjdG9ycyA9IHBhcnNlTXVsdGlwbGVTZWxlY3RvcnMocnVsZS5zZWxlY3Rvcik7XG4gICAgICAgICAgICBjb25zdCBhbGxDb21wbGV4ID0gcGFyc2VkU2VsZWN0b3JzLmV2ZXJ5KHMgPT4gcy5pc0NvbXBsZXgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoYWxsQ29tcGxleCkge1xuICAgICAgICAgICAgICBjb25zdCByZWFzb25zID0gcGFyc2VkU2VsZWN0b3JzLm1hcChzID0+IHMucmVhc29uKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goLi4ucmVhc29ucyBhcyBzdHJpbmdbXSk7XG4gICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBTa2lwcGluZyBjb21wbGV4IHNlbGVjdG9yOiAke3J1bGUuc2VsZWN0b3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bGVzLnB1c2goLi4uc2ltcGxlUmVzdWx0LmNzc1J1bGVzKTtcbiAgICAgICAgd2FybmluZ3MucHVzaCguLi5zaW1wbGVSZXN1bHQuY29udmVyc2lvbldhcm5pbmdzKTtcblxuICAgICAgICBjb25zdCBhbnlDb252ZXJ0ZWQgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMuc29tZShyID0+IHIuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwKTtcbiAgICAgICAgaWYgKGFueUNvbnZlcnRlZCkge1xuICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgICAgY29uc3QgYWxsRnVsbHlDb252ZXJ0ZWQgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMuZXZlcnkociA9PiByLmZ1bGx5Q29udmVydGVkKTtcbiAgICAgICAgICBpZiAoYWxsRnVsbHlDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgIHJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWVzID0gc2ltcGxlUmVzdWx0LmNzc1J1bGVzLm1hcChyID0+IHIuY2xhc3NOYW1lKS5qb2luKCcsIC4nKTtcbiAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZW1vdmVkIHJ1bGUgLiR7Y2xhc3NOYW1lc30gKGFsbCBkZWNsYXJhdGlvbnMgY29udmVydGVkKWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNyIG9mIHNpbXBsZVJlc3VsdC5jb252ZXJzaW9uUmVzdWx0cy5mbGF0KCkpIHtcbiAgICAgICAgICAgICAgaWYgKGNyLmNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGVjbC5wcm9wID09PSBjci5kZWNsYXJhdGlvbi5wcm9wZXJ0eSAmJiBkZWNsLnZhbHVlID09PSBjci5kZWNsYXJhdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBkZWNsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUGFydGlhbCBjb252ZXJzaW9uIG9mIHJ1bGVgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByb290LndhbGtBdFJ1bGVzKChhdFJ1bGUpID0+IHtcbiAgICAgICAgaWYgKGF0UnVsZS5ub2RlcyAmJiBhdFJ1bGUubm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgYXRSdWxlLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2FuRGVsZXRlID0gcm9vdC5ub2Rlcy5sZW5ndGggPT09IDA7XG4gICAgICBjb25zdCBuZXdDc3MgPSByb290LnRvU3RyaW5nKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNzczogbmV3Q3NzLFxuICAgICAgICBydWxlcyxcbiAgICAgICAgaGFzQ2hhbmdlcyxcbiAgICAgICAgY2FuRGVsZXRlLFxuICAgICAgICB3YXJuaW5nc1xuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBwYXJzZSBDU1MgJHtmaWxlUGF0aH06YCwgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDU1MgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VJbnRlcm5hbFN0eWxlKGh0bWw6IHN0cmluZyk6IHsgXG4gICAgc3R5bGVzOiBBcnJheTx7IGNvbnRlbnQ6IHN0cmluZzsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfT47XG4gICAgd2FybmluZ3M6IHN0cmluZ1tdO1xuICB9IHtcbiAgICBjb25zdCBzdHlsZXM6IEFycmF5PHsgY29udGVudDogc3RyaW5nOyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PiA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgY29uc3Qgc3R5bGVSZWdleCA9IC88c3R5bGVbXj5dKj4oW1xcc1xcU10qPyk8XFwvc3R5bGU+L2dpO1xuICAgIGxldCBtYXRjaDtcblxuICAgIHdoaWxlICgobWF0Y2ggPSBzdHlsZVJlZ2V4LmV4ZWMoaHRtbCkpICE9PSBudWxsKSB7XG4gICAgICBzdHlsZXMucHVzaCh7XG4gICAgICAgIGNvbnRlbnQ6IG1hdGNoWzFdLnRyaW0oKSxcbiAgICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4LFxuICAgICAgICBlbmQ6IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdHlsZXMsIHdhcm5pbmdzIH07XG4gIH1cblxuICBhc3luYyBwYXJzZUludGVybmFsQ1NTKGh0bWw6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8e1xuICAgIGh0bWw6IHN0cmluZztcbiAgICBydWxlczogQ1NTUnVsZVtdO1xuICAgIGhhc0NoYW5nZXM6IGJvb2xlYW47XG4gICAgd2FybmluZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgY29uc3QgYWxsUnVsZXM6IENTU1J1bGVbXSA9IFtdO1xuICAgIGNvbnN0IGFsbFdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBtb2RpZmllZEh0bWwgPSBodG1sO1xuICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICBjb25zdCB7IHN0eWxlcyB9ID0gdGhpcy5wYXJzZUludGVybmFsU3R5bGUoaHRtbCk7XG5cbiAgICBmb3IgKGxldCBpID0gc3R5bGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBzdHlsZSA9IHN0eWxlc1tpXTtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wYXJzZShzdHlsZS5jb250ZW50LCBmaWxlUGF0aCk7XG4gICAgICAgIFxuICAgICAgICBhbGxSdWxlcy5wdXNoKC4uLnJlc3VsdC5ydWxlcyk7XG4gICAgICAgIGFsbFdhcm5pbmdzLnB1c2goLi4ucmVzdWx0Lndhcm5pbmdzKTtcblxuICAgICAgICBpZiAocmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChyZXN1bHQuY2FuRGVsZXRlIHx8IHJlc3VsdC5jc3MudHJpbSgpID09PSAnJykge1xuICAgICAgICAgICAgbW9kaWZpZWRIdG1sID0gbW9kaWZpZWRIdG1sLnNsaWNlKDAsIHN0eWxlLnN0YXJ0KSArIG1vZGlmaWVkSHRtbC5zbGljZShzdHlsZS5lbmQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmUgPSBtb2RpZmllZEh0bWwuc2xpY2UoMCwgc3R5bGUuc3RhcnQpO1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBtb2RpZmllZEh0bWwuc2xpY2Uoc3R5bGUuZW5kKTtcbiAgICAgICAgICAgIGNvbnN0IHRhZ1N0YXJ0ID0gaHRtbC5zbGljZShzdHlsZS5zdGFydCkubWF0Y2goLzxzdHlsZVtePl0qPi8pPy5bMF0gfHwgJzxzdHlsZT4nO1xuICAgICAgICAgICAgY29uc3QgdGFnRW5kID0gJzwvc3R5bGU+JztcbiAgICAgICAgICAgIG1vZGlmaWVkSHRtbCA9IGJlZm9yZSArIHRhZ1N0YXJ0ICsgJ1xcbicgKyByZXN1bHQuY3NzICsgJ1xcbicgKyB0YWdFbmQgKyBhZnRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gcGFyc2UgaW50ZXJuYWwgc3R5bGUgYmxvY2s6ICR7ZXJyb3J9YCk7XG4gICAgICAgIGFsbFdhcm5pbmdzLnB1c2goYEZhaWxlZCB0byBwYXJzZSBpbnRlcm5hbCBzdHlsZTogJHtlcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaHRtbDogbW9kaWZpZWRIdG1sLFxuICAgICAgcnVsZXM6IGFsbFJ1bGVzLFxuICAgICAgaGFzQ2hhbmdlcyxcbiAgICAgIHdhcm5pbmdzOiBhbGxXYXJuaW5nc1xuICAgIH07XG4gIH1cblxuICBleHRyYWN0SW1wb3J0UGF0aHMoY29kZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGltcG9ydHM6IHN0cmluZ1tdID0gW107XG4gICAgXG4gICAgY29uc3QgaW1wb3J0UmVnZXggPSAvaW1wb3J0XFxzK1snXCJdKFteJ1wiXStcXC5jc3MpWydcIl07Py9nO1xuICAgIGxldCBtYXRjaDtcbiAgICBcbiAgICB3aGlsZSAoKG1hdGNoID0gaW1wb3J0UmVnZXguZXhlYyhjb2RlKSkgIT09IG51bGwpIHtcbiAgICAgIGltcG9ydHMucHVzaChtYXRjaFsxXSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWlyZVJlZ2V4ID0gL3JlcXVpcmVcXHMqXFwoXFxzKlsnXCJdKFteJ1wiXStcXC5jc3MpWydcIl1cXHMqXFwpL2c7XG4gICAgd2hpbGUgKChtYXRjaCA9IHJlcXVpcmVSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgICAgaW1wb3J0cy5wdXNoKG1hdGNoWzFdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1wb3J0cztcbiAgfVxufSJdfQ==
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nzc1BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBbUU7QUFDbkUsOEVBQTZDO0FBRTdDLDJDQUF3QztBQUN4QyxtRUFLb0M7QUFDcEMsMkVBSXdDO0FBQ3hDLG1GQU00QztBQUM1QywrREFNa0M7QUFDbEMseUVBS3VDO0FBRXZDLCtEQVNrQztBQTBDbEMsTUFBYSxTQUFTO0lBTXBCLFlBQVksTUFBc0IsRUFBRSxPQUFtRDtRQUgvRSx1QkFBa0IsR0FBVyxDQUFDLENBQUM7UUFJckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPO1lBQ3hCLENBQUMsQ0FBQyxJQUFBLGlEQUE0QixFQUFDLE9BQU8sQ0FBQztZQUN2QyxDQUFDLENBQUMsSUFBQSxtQ0FBYyxHQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksbUNBQWdCLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNuQyxDQUFDO0lBRU8sZ0JBQWdCLENBQ3RCLElBQW1CLEVBQ25CLHFCQUErQixFQUFFO1FBRWpDLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztRQUVwQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvQixNQUFNLGNBQWMsR0FBRyxRQUFRLEtBQUssT0FBTyxDQUFDO1lBRTVDLElBQUksS0FBb0IsQ0FBQztZ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akIsQ0FBQztDQUNGO0FBL21CRCw4QkErbUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBvc3Rjc3MsIHsgUm9vdCwgUnVsZSwgRGVjbGFyYXRpb24sIEF0UnVsZSB9IGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHNhZmVQYXJzZXIgZnJvbSAncG9zdGNzcy1zYWZlLXBhcnNlcic7XG5pbXBvcnQgeyBUYWlsd2luZE1hcHBlciwgQ1NTUHJvcGVydHkgfSBmcm9tICcuL3RhaWx3aW5kTWFwcGVyJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCB7IFxuICBCcmVha3BvaW50LCBcbiAgZ2V0QnJlYWtwb2ludHMsIFxuICByZXNvbHZlQnJlYWtwb2ludHNGcm9tQ29uZmlnLFxuICBwcm9jZXNzTWVkaWFRdWVyeSBcbn0gZnJvbSAnLi91dGlscy9icmVha3BvaW50UmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1BzZXVkb1NlbGVjdG9yLFxuICBwYXJzZU11bHRpcGxlU2VsZWN0b3JzLFxuICBQYXJzZWRTZWxlY3RvclxufSBmcm9tICcuL3V0aWxzL3BzZXVkb1NlbGVjdG9yUmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgcGFyc2VEZXNjZW5kYW50U2VsZWN0b3IsXG4gIHByb2Nlc3NEZXNjZW5kYW50U2VsZWN0b3IsXG4gIERlc2NlbmRhbnRTZWxlY3RvcixcbiAgU2VsZWN0b3JQYXJ0LFxuICBpc0h0bWxFbGVtZW50XG59IGZyb20gJy4vdXRpbHMvZGVzY2VuZGFudFNlbGVjdG9yUmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgYXNzZW1ibGVVdGlsaXR5LFxuICBhc3NlbWJsZVV0aWxpdGllcyxcbiAgTWVyZ2VkVXRpbGl0eSxcbiAgbWVyZ2VVdGlsaXRpZXMsXG4gIG5vcm1hbGl6ZVZhcmlhbnRPcmRlclxufSBmcm9tICcuL3V0aWxzL3ZhcmlhbnRBc3NlbWJsZXInO1xuaW1wb3J0IHtcbiAgU3BlY2lmaWNpdHksXG4gIGNhbGN1bGF0ZVNlbGVjdG9yU3BlY2lmaWNpdHksXG4gIGNhbGN1bGF0ZURlc2NlbmRhbnRTcGVjaWZpY2l0eSxcbiAgWkVST19TUEVDSUZJQ0lUWVxufSBmcm9tICcuL3V0aWxzL3NwZWNpZmljaXR5Q2FsY3VsYXRvcic7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eUZvclV0aWxpdHkgfSBmcm9tICcuL3V0aWxzL3Byb3BlcnR5TWFwcGVyJztcbmltcG9ydCB7XG4gIFZhcmlhYmxlUmVnaXN0cnksXG4gIFZhcmlhYmxlRGVmaW5pdGlvbixcbiAgVmFyaWFibGVTY29wZSxcbiAgUmVzb2x1dGlvbkNvbnRleHQsXG4gIGlzQ3NzVmFyaWFibGUsXG4gIGlzVmFyRXhwcmVzc2lvbixcbiAgY3JlYXRlR2xvYmFsU2NvcGUsXG4gIGNyZWF0ZVNlbGVjdG9yU2NvcGVcbn0gZnJvbSAnLi91dGlscy92YXJpYWJsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IGludGVyZmFjZSBVdGlsaXR5V2l0aFZhcmlhbnQge1xuICB2YWx1ZTogc3RyaW5nO1xuICB2YXJpYW50czogc3RyaW5nW107XG4gIGNzc1Byb3BlcnR5OiBzdHJpbmc7XG4gIHNwZWNpZmljaXR5OiBTcGVjaWZpY2l0eTtcbiAgc291cmNlT3JkZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RvclRhcmdldCB7XG4gIHR5cGU6ICdjbGFzcycgfCAnZWxlbWVudCc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDU1NSdWxlIHtcbiAgc2VsZWN0b3I6IHN0cmluZztcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXTtcbiAgY29udmVydGVkQ2xhc3Nlczogc3RyaW5nW107XG4gIHV0aWxpdGllczogVXRpbGl0eVdpdGhWYXJpYW50W107XG4gIHNraXBwZWQ6IGJvb2xlYW47XG4gIGZ1bGx5Q29udmVydGVkOiBib29sZWFuO1xuICBwYXJ0aWFsQ29udmVyc2lvbjogYm9vbGVhbjtcbiAgcmVhc29uPzogc3RyaW5nO1xuICBpc0Rlc2NlbmRhbnQ6IGJvb2xlYW47XG4gIHBhcmVudFNlbGVjdG9yPzogU2VsZWN0b3JUYXJnZXQ7XG4gIHRhcmdldFNlbGVjdG9yPzogU2VsZWN0b3JUYXJnZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTUGFyc2VSZXN1bHQge1xuICBjc3M6IHN0cmluZztcbiAgcnVsZXM6IENTU1J1bGVbXTtcbiAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgY2FuRGVsZXRlOiBib29sZWFuO1xuICB3YXJuaW5nczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTVXNhZ2VNYXAge1xuICBbY2xhc3NOYW1lOiBzdHJpbmddOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIENTU1BhcnNlciB7XG4gIHByaXZhdGUgbWFwcGVyOiBUYWlsd2luZE1hcHBlcjtcbiAgcHJpdmF0ZSBicmVha3BvaW50czogQnJlYWtwb2ludFtdO1xuICBwcml2YXRlIHNvdXJjZU9yZGVyQ291bnRlcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSB2YXJpYWJsZVJlZ2lzdHJ5OiBWYXJpYWJsZVJlZ2lzdHJ5O1xuXG4gIGNvbnN0cnVjdG9yKG1hcHBlcjogVGFpbHdpbmRNYXBwZXIsIHNjcmVlbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBbc3RyaW5nLCBzdHJpbmddPikge1xuICAgIHRoaXMubWFwcGVyID0gbWFwcGVyO1xuICAgIHRoaXMuYnJlYWtwb2ludHMgPSBzY3JlZW5zIFxuICAgICAgPyByZXNvbHZlQnJlYWtwb2ludHNGcm9tQ29uZmlnKHNjcmVlbnMpIFxuICAgICAgOiBnZXRCcmVha3BvaW50cygpO1xuICAgIHRoaXMudmFyaWFibGVSZWdpc3RyeSA9IG5ldyBWYXJpYWJsZVJlZ2lzdHJ5KCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0U291cmNlT3JkZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zb3VyY2VPcmRlckNvdW50ZXIgPSAwO1xuICAgIHRoaXMudmFyaWFibGVSZWdpc3RyeS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROZXh0U291cmNlT3JkZXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKyt0aGlzLnNvdXJjZU9yZGVyQ291bnRlcjtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdFZhcmlhYmxlcyhcbiAgICBub2RlOiBSb290IHwgQXRSdWxlLFxuICAgIGFkZGl0aW9uYWxWYXJpYW50czogc3RyaW5nW10gPSBbXVxuICApOiB2b2lkIHtcbiAgICBsZXQgc291cmNlT3JkZXIgPSAwO1xuICAgIFxuICAgIG5vZGUud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IHJ1bGUuc2VsZWN0b3I7XG4gICAgICBjb25zdCBpc1Jvb3RTZWxlY3RvciA9IHNlbGVjdG9yID09PSAnOnJvb3QnO1xuICAgICAgXG4gICAgICBsZXQgc2NvcGU6IFZhcmlhYmxlU2NvcGU7XG4gICAgICBsZXQgc3BlY2lmaWNpdHk6IFNwZWNpZmljaXR5O1xuICAgICAgXG4gICAgICBpZiAoaXNSb290U2VsZWN0b3IpIHtcbiAgICAgICAgc2NvcGUgPSBjcmVhdGVHbG9iYWxTY29wZSgpO1xuICAgICAgICBzcGVjaWZpY2l0eSA9IHsgaW5saW5lOiAwLCBpZDogMCwgY2xhc3M6IDAsIGVsZW1lbnQ6IDAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGVzY2VuZGFudFNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgaWYgKHBhcnNlZC5pc0NvbXBsZXgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChwYXJzZWQucGFyZW50KSB7XG4gICAgICAgICAgc2NvcGUgPSBjcmVhdGVTZWxlY3RvclNjb3BlKHNlbGVjdG9yLCBwYXJzZWQucGFyZW50LnR5cGUpO1xuICAgICAgICAgIHNwZWNpZmljaXR5ID0gY2FsY3VsYXRlRGVzY2VuZGFudFNwZWNpZmljaXR5KFxuICAgICAgICAgICAgcGFyc2VkLnBhcmVudC50eXBlLFxuICAgICAgICAgICAgcGFyc2VkLnBhcmVudC5uYW1lLFxuICAgICAgICAgICAgcGFyc2VkLnRhcmdldC50eXBlLFxuICAgICAgICAgICAgcGFyc2VkLnRhcmdldC5uYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RvclR5cGUgPSBzZWxlY3Rvci5zdGFydHNXaXRoKCcuJykgPyAnY2xhc3MnIDogJ2VsZW1lbnQnO1xuICAgICAgICAgIHNjb3BlID0gY3JlYXRlU2VsZWN0b3JTY29wZShzZWxlY3Rvciwgc2VsZWN0b3JUeXBlKTtcbiAgICAgICAgICBzcGVjaWZpY2l0eSA9IGNhbGN1bGF0ZVNlbGVjdG9yU3BlY2lmaWNpdHkoc2VsZWN0b3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgIGlmICghaXNDc3NWYXJpYWJsZShkZWNsLnByb3ApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCB2YXJEZWY6IFZhcmlhYmxlRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBuYW1lOiBkZWNsLnByb3AsXG4gICAgICAgICAgdmFsdWU6IGRlY2wudmFsdWUsXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgc3BlY2lmaWNpdHksXG4gICAgICAgICAgc291cmNlT3JkZXI6ICsrc291cmNlT3JkZXIsXG4gICAgICAgICAgdmFyaWFudHM6IGFkZGl0aW9uYWxWYXJpYW50c1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy52YXJpYWJsZVJlZ2lzdHJ5LnJlZ2lzdGVyKHZhckRlZik7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZWdpc3RlcmVkIENTUyB2YXJpYWJsZTogJHtkZWNsLnByb3B9ID0gJHtkZWNsLnZhbHVlfSAoc2NvcGU6ICR7c2NvcGUudHlwZX0pYCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURlY2xhcmF0aW9uVmFsdWUoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBzZWxlY3Rvcjogc3RyaW5nLFxuICAgIHNwZWNpZmljaXR5OiBTcGVjaWZpY2l0eSxcbiAgICB2YXJpYW50czogc3RyaW5nW11cbiAgKTogeyByZXNvbHZlZFZhbHVlOiBzdHJpbmc7IGhhc1VucmVzb2x2ZWQ6IGJvb2xlYW4gfSB7XG4gICAgaWYgKCFpc1ZhckV4cHJlc3Npb24odmFsdWUpKSB7XG4gICAgICByZXR1cm4geyByZXNvbHZlZFZhbHVlOiB2YWx1ZSwgaGFzVW5yZXNvbHZlZDogZmFsc2UgfTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY29udGV4dDogUmVzb2x1dGlvbkNvbnRleHQgPSB7XG4gICAgICBzZWxlY3RvcixcbiAgICAgIHNwZWNpZmljaXR5LFxuICAgICAgdmFyaWFudHNcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudmFyaWFibGVSZWdpc3RyeS5yZXNvbHZlVmFsdWUodmFsdWUsIGNvbnRleHQpO1xuICAgIHJldHVybiB7IHJlc29sdmVkVmFsdWU6IHJlc3VsdC52YWx1ZSwgaGFzVW5yZXNvbHZlZDogcmVzdWx0Lmhhc1VucmVzb2x2ZWQgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydERlY2xhcmF0aW9ucyhcbiAgICBkZWNsYXJhdGlvbnM6IENTU1Byb3BlcnR5W10sXG4gICAgc3BlY2lmaWNpdHk6IFNwZWNpZmljaXR5LFxuICAgIHNvdXJjZU9yZGVyOiBudW1iZXIsXG4gICAgc2VsZWN0b3I6IHN0cmluZyA9ICcnLFxuICAgIHZhcmlhbnRzOiBzdHJpbmdbXSA9IFtdXG4gICk6IHtcbiAgICB1dGlsaXRpZXM6IFV0aWxpdHlXaXRoVmFyaWFudFtdO1xuICAgIGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7IHJlc29sdmVkVmFsdWU/OiBzdHJpbmcgfT47XG4gICAgY29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXTtcbiAgfSB7XG4gICAgY29uc3QgY29udmVyc2lvblJlc3VsdHM6IEFycmF5PHtcbiAgICAgIGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTtcbiAgICAgIGNvbnZlcnRlZDogYm9vbGVhbjtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHJlc29sdmVkVmFsdWU/OiBzdHJpbmc7XG4gICAgfT4gPSBbXTtcbiAgICBjb25zdCBjb252ZXJzaW9uV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBkZWNsYXJhdGlvbnMuZm9yRWFjaChkZWNsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlVG9Db252ZXJ0ID0gdGhpcy5yZXNvbHZlRGVjbGFyYXRpb25WYWx1ZShcbiAgICAgICAgZGVjbC52YWx1ZSxcbiAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgIHNwZWNpZmljaXR5LFxuICAgICAgICB2YXJpYW50c1xuICAgICAgKTtcbiAgICAgIFxuICAgICAgaWYgKHZhbHVlVG9Db252ZXJ0Lmhhc1VucmVzb2x2ZWQpIHtcbiAgICAgICAgY29udmVyc2lvblJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgZGVjbGFyYXRpb246IGRlY2wsXG4gICAgICAgICAgY29udmVydGVkOiBmYWxzZSxcbiAgICAgICAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgICAgICAgcmVzb2x2ZWRWYWx1ZTogdmFsdWVUb0NvbnZlcnQucmVzb2x2ZWRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29udmVyc2lvbldhcm5pbmdzLnB1c2goYENvdWxkIG5vdCBmdWxseSByZXNvbHZlIHZhcigpIGluOiAke2RlY2wucHJvcGVydHl9OiAke2RlY2wudmFsdWV9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tYXBwZXIuY29udmVydFByb3BlcnR5KGRlY2wucHJvcGVydHksIHZhbHVlVG9Db252ZXJ0LnJlc29sdmVkVmFsdWUpO1xuICAgICAgY29udmVyc2lvblJlc3VsdHMucHVzaCh7XG4gICAgICAgIGRlY2xhcmF0aW9uOiBkZWNsLFxuICAgICAgICBjb252ZXJ0ZWQ6ICFyZXN1bHQuc2tpcHBlZCAmJiByZXN1bHQuY2xhc3NOYW1lICE9PSBudWxsLFxuICAgICAgICBjbGFzc05hbWU6IHJlc3VsdC5jbGFzc05hbWUsXG4gICAgICAgIHJlc29sdmVkVmFsdWU6IHZhbHVlVG9Db252ZXJ0LnJlc29sdmVkVmFsdWVcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdC5za2lwcGVkICYmIHJlc3VsdC5yZWFzb24pIHtcbiAgICAgICAgY29udmVyc2lvbldhcm5pbmdzLnB1c2gocmVzdWx0LnJlYXNvbik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB1dGlsaXRpZXM6IFV0aWxpdHlXaXRoVmFyaWFudFtdID0gY29udmVyc2lvblJlc3VsdHNcbiAgICAgIC5maWx0ZXIociA9PiByLmNvbnZlcnRlZCAmJiByLmNsYXNzTmFtZSlcbiAgICAgIC5tYXAociA9PiAoe1xuICAgICAgICB2YWx1ZTogci5jbGFzc05hbWUhLFxuICAgICAgICB2YXJpYW50czogW10sXG4gICAgICAgIGNzc1Byb3BlcnR5OiByLmRlY2xhcmF0aW9uLnByb3BlcnR5LFxuICAgICAgICBzcGVjaWZpY2l0eSxcbiAgICAgICAgc291cmNlT3JkZXJcbiAgICAgIH0pKTtcblxuICAgIHJldHVybiB7IHV0aWxpdGllcywgY29udmVyc2lvblJlc3VsdHMsIGNvbnZlcnNpb25XYXJuaW5ncyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU2ltcGxlUnVsZShcbiAgICBydWxlOiBSdWxlLFxuICAgIGFkZGl0aW9uYWxWYXJpYW50czogc3RyaW5nW10gPSBbXVxuICApOiB7IGNzc1J1bGVzOiBDU1NSdWxlW107IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7IHJlc29sdmVkVmFsdWU/OiBzdHJpbmcgfT5bXTsgY29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXSB9IHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBydWxlLnNlbGVjdG9yO1xuICAgIGNvbnN0IHBhcnNlZFNlbGVjdG9ycyA9IHBhcnNlTXVsdGlwbGVTZWxlY3RvcnMoc2VsZWN0b3IpO1xuICAgIFxuICAgIGNvbnN0IHZhbGlkU2VsZWN0b3JzID0gcGFyc2VkU2VsZWN0b3JzLmZpbHRlcihzID0+ICFzLmlzQ29tcGxleCAmJiBzLmJhc2VDbGFzcyk7XG4gICAgXG4gICAgaWYgKHZhbGlkU2VsZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zOiBDU1NQcm9wZXJ0eVtdID0gW107XG5cbiAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgaWYgKGRlY2wucHJvcC5zdGFydHNXaXRoKCctLScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlY2wudmFsdWUuaW5jbHVkZXMoJ2NhbGMoJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWNsYXJhdGlvbnMucHVzaCh7XG4gICAgICAgIHByb3BlcnR5OiBkZWNsLnByb3AsXG4gICAgICAgIHZhbHVlOiBkZWNsLnZhbHVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjc3NSdWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3QgYWxsQ29udmVyc2lvblJlc3VsdHM6IEFycmF5PHsgZGVjbGFyYXRpb246IENTU1Byb3BlcnR5OyBjb252ZXJ0ZWQ6IGJvb2xlYW47IGNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbDsgcmVzb2x2ZWRWYWx1ZT86IHN0cmluZyB9PltdID0gW107XG4gICAgY29uc3QgYWxsQ29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYXJzZWQgb2YgdmFsaWRTZWxlY3RvcnMpIHtcbiAgICAgIGNvbnN0IHNvdXJjZU9yZGVyID0gdGhpcy5nZXROZXh0U291cmNlT3JkZXIoKTtcbiAgICAgIGNvbnN0IHNwZWNpZmljaXR5ID0gY2FsY3VsYXRlU2VsZWN0b3JTcGVjaWZpY2l0eShzZWxlY3Rvcik7XG4gICAgICBjb25zdCBwc2V1ZG9Db3VudCA9IChwYXJzZWQucHNldWRvcyB8fCBbXSkubGVuZ3RoO1xuICAgICAgY29uc3Qgc3BlY2lmaWNpdHlXaXRoUHNldWRvID0ge1xuICAgICAgICBpbmxpbmU6IHNwZWNpZmljaXR5LmlubGluZSxcbiAgICAgICAgaWQ6IHNwZWNpZmljaXR5LmlkLFxuICAgICAgICBjbGFzczogc3BlY2lmaWNpdHkuY2xhc3MgKyBwc2V1ZG9Db3VudCxcbiAgICAgICAgZWxlbWVudDogc3BlY2lmaWNpdHkuZWxlbWVudFxuICAgICAgfTtcbiAgICAgIFxuICAgICAgY29uc3QgcHNldWRvVmFyaWFudHMgPSBwYXJzZWQucHNldWRvcyB8fCBbXTtcbiAgICAgIGNvbnN0IGFsbFZhcmlhbnRzID0gbm9ybWFsaXplVmFyaWFudE9yZGVyKFsuLi5wc2V1ZG9WYXJpYW50cywgLi4uYWRkaXRpb25hbFZhcmlhbnRzXSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHsgdXRpbGl0aWVzLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH0gPSB0aGlzLmNvbnZlcnREZWNsYXJhdGlvbnMoXG4gICAgICAgIGRlY2xhcmF0aW9ucyxcbiAgICAgICAgc3BlY2lmaWNpdHlXaXRoUHNldWRvLFxuICAgICAgICBzb3VyY2VPcmRlcixcbiAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgIGFsbFZhcmlhbnRzXG4gICAgICApO1xuICAgICAgXG4gICAgICBjb25zdCB1dGlsaXRpZXNGb3JTZWxlY3RvciA9IHV0aWxpdGllcy5tYXAodSA9PiAoe1xuICAgICAgICAuLi51LFxuICAgICAgICB2YXJpYW50czogYWxsVmFyaWFudHNcbiAgICAgIH0pKTtcblxuICAgICAgY29uc3QgY29udmVydGVkQ2xhc3NlcyA9IGFzc2VtYmxlVXRpbGl0aWVzKHV0aWxpdGllc0ZvclNlbGVjdG9yKTtcblxuICAgICAgY29uc3QgYWxsRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVyc2lvblJlc3VsdHMuZXZlcnkociA9PiByLmNvbnZlcnRlZCk7XG4gICAgICBjb25zdCBzb21lRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwO1xuXG4gICAgICBjb25zdCBjc3NSdWxlOiBDU1NSdWxlID0ge1xuICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICAgIGNsYXNzTmFtZTogcGFyc2VkLmJhc2VDbGFzcyxcbiAgICAgICAgZGVjbGFyYXRpb25zLFxuICAgICAgICBjb252ZXJ0ZWRDbGFzc2VzLFxuICAgICAgICB1dGlsaXRpZXM6IHV0aWxpdGllc0ZvclNlbGVjdG9yLFxuICAgICAgICBza2lwcGVkOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgICAgZnVsbHlDb252ZXJ0ZWQ6IGFsbERlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgICAgcGFydGlhbENvbnZlcnNpb246IHNvbWVEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgJiYgIWFsbERlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgICAgcmVhc29uOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCA/ICdObyBjb252ZXJ0aWJsZSBkZWNsYXJhdGlvbnMnIDogdW5kZWZpbmVkLFxuICAgICAgICBpc0Rlc2NlbmRhbnQ6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgICBjc3NSdWxlcy5wdXNoKGNzc1J1bGUpO1xuICAgICAgYWxsQ29udmVyc2lvblJlc3VsdHMucHVzaChjb252ZXJzaW9uUmVzdWx0cyk7XG4gICAgICBhbGxDb252ZXJzaW9uV2FybmluZ3MucHVzaCguLi5jb252ZXJzaW9uV2FybmluZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNzc1J1bGVzLCBjb252ZXJzaW9uUmVzdWx0czogYWxsQ29udmVyc2lvblJlc3VsdHMsIGNvbnZlcnNpb25XYXJuaW5nczogYWxsQ29udmVyc2lvbldhcm5pbmdzIH07XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NEZXNjZW5kYW50UnVsZShcbiAgICBydWxlOiBSdWxlLFxuICAgIGFkZGl0aW9uYWxWYXJpYW50czogc3RyaW5nW10gPSBbXVxuICApOiB7IGNzc1J1bGU6IENTU1J1bGU7IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7IHJlc29sdmVkVmFsdWU/OiBzdHJpbmcgfT47IGNvbnZlcnNpb25XYXJuaW5nczogc3RyaW5nW10gfSB8IG51bGwge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gcnVsZS5zZWxlY3RvcjtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZURlc2NlbmRhbnRTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgXG4gICAgaWYgKHBhcnNlZC5pc0NvbXBsZXggfHwgIXBhcnNlZC5wYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXSA9IFtdO1xuXG4gICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgIGlmIChkZWNsLnByb3Auc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWNsLnZhbHVlLmluY2x1ZGVzKCdjYWxjKCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVjbGFyYXRpb25zLnB1c2goe1xuICAgICAgICBwcm9wZXJ0eTogZGVjbC5wcm9wLFxuICAgICAgICB2YWx1ZTogZGVjbC52YWx1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlT3JkZXIgPSB0aGlzLmdldE5leHRTb3VyY2VPcmRlcigpO1xuICAgIGNvbnN0IHNwZWNpZmljaXR5ID0gY2FsY3VsYXRlRGVzY2VuZGFudFNwZWNpZmljaXR5KFxuICAgICAgcGFyc2VkLnBhcmVudC50eXBlLFxuICAgICAgcGFyc2VkLnBhcmVudC5uYW1lLFxuICAgICAgcGFyc2VkLnRhcmdldC50eXBlLFxuICAgICAgcGFyc2VkLnRhcmdldC5uYW1lXG4gICAgKTtcblxuICAgIGNvbnN0IHsgdXRpbGl0aWVzLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH0gPSB0aGlzLmNvbnZlcnREZWNsYXJhdGlvbnMoXG4gICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICBzcGVjaWZpY2l0eSxcbiAgICAgIHNvdXJjZU9yZGVyLFxuICAgICAgc2VsZWN0b3IsXG4gICAgICBhZGRpdGlvbmFsVmFyaWFudHNcbiAgICApO1xuICAgIFxuICAgIGNvbnN0IHV0aWxpdGllc1dpdGhWYXJpYW50cyA9IHV0aWxpdGllcy5tYXAodSA9PiAoe1xuICAgICAgLi4udSxcbiAgICAgIHZhcmlhbnRzOiBub3JtYWxpemVWYXJpYW50T3JkZXIoWy4uLnUudmFyaWFudHMsIC4uLmFkZGl0aW9uYWxWYXJpYW50c10pXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29udmVydGVkQ2xhc3NlcyA9IGFzc2VtYmxlVXRpbGl0aWVzKHV0aWxpdGllc1dpdGhWYXJpYW50cyk7XG5cbiAgICBjb25zdCBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgPSBjb252ZXJzaW9uUmVzdWx0cy5ldmVyeShyID0+IHIuY29udmVydGVkKTtcbiAgICBjb25zdCBzb21lRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gcGFyc2VkLnBhcmVudC50eXBlID09PSAnY2xhc3MnID8gcGFyc2VkLnBhcmVudC5uYW1lIDogJyc7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHBhcnNlZC50YXJnZXQudHlwZSA9PT0gJ2NsYXNzJyA/IGAuJHtwYXJzZWQudGFyZ2V0Lm5hbWV9YCA6IHBhcnNlZC50YXJnZXQubmFtZTtcblxuICAgIGNvbnN0IGNzc1J1bGU6IENTU1J1bGUgPSB7XG4gICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICBjb252ZXJ0ZWRDbGFzc2VzLFxuICAgICAgdXRpbGl0aWVzOiB1dGlsaXRpZXNXaXRoVmFyaWFudHMsXG4gICAgICBza2lwcGVkOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgIGZ1bGx5Q29udmVydGVkOiBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQsXG4gICAgICBwYXJ0aWFsQ29udmVyc2lvbjogc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCAmJiAhYWxsRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgcmVhc29uOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCA/ICdObyBjb252ZXJ0aWJsZSBkZWNsYXJhdGlvbnMnIDogdW5kZWZpbmVkLFxuICAgICAgaXNEZXNjZW5kYW50OiB0cnVlLFxuICAgICAgcGFyZW50U2VsZWN0b3I6IHBhcnNlZC5wYXJlbnQsXG4gICAgICB0YXJnZXRTZWxlY3RvcjogcGFyc2VkLnRhcmdldFxuICAgIH07XG5cbiAgICByZXR1cm4geyBjc3NSdWxlLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH07XG4gIH1cblxuICBhc3luYyBwYXJzZShjc3M6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8Q1NTUGFyc2VSZXN1bHQ+IHtcbiAgICB0aGlzLnJlc2V0U291cmNlT3JkZXIoKTtcbiAgICBjb25zdCBydWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByb290ID0gYXdhaXQgcG9zdGNzcygpLnByb2Nlc3MoY3NzLCB7XG4gICAgICAgIHBhcnNlcjogc2FmZVBhcnNlcixcbiAgICAgICAgZnJvbTogZmlsZVBhdGhcbiAgICAgIH0pLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5yb290KTtcblxuICAgICAgdGhpcy5jb2xsZWN0VmFyaWFibGVzKHJvb3QsIFtdKTtcblxuICAgICAgcm9vdC53YWxrQXRSdWxlcygoYXRSdWxlKSA9PiB7XG4gICAgICAgIGlmIChhdFJ1bGUubmFtZSAhPT0gJ21lZGlhJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lZGlhUmVzdWx0ID0gcHJvY2Vzc01lZGlhUXVlcnkoYXRSdWxlLnBhcmFtcywgdGhpcy5icmVha3BvaW50cyk7XG5cbiAgICAgICAgaWYgKG1lZGlhUmVzdWx0LnNraXBwZWQpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKG1lZGlhUmVzdWx0LnJlYXNvbiB8fCBgU2tpcHBlZCBtZWRpYSBxdWVyeTogJHthdFJ1bGUucGFyYW1zfWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNpdmVWYXJpYW50ID0gbWVkaWFSZXN1bHQuYnJlYWtwb2ludCE7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNvbGxlY3RWYXJpYWJsZXMoYXRSdWxlLCBbcmVzcG9uc2l2ZVZhcmlhbnRdKTtcblxuICAgICAgICBjb25zdCBuZXN0ZWRSdWxlczogUnVsZVtdID0gW107XG4gICAgICAgIGF0UnVsZS53YWxrUnVsZXMoKHJ1bGUpID0+IHtcbiAgICAgICAgICBuZXN0ZWRSdWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgbmVzdGVkUnVsZXMpIHtcbiAgICAgICAgICBjb25zdCBkZXNjZW5kYW50UmVzdWx0ID0gdGhpcy5wcm9jZXNzRGVzY2VuZGFudFJ1bGUocnVsZSwgW3Jlc3BvbnNpdmVWYXJpYW50XSk7XG4gICAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQpIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlKTtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goLi4uZGVzY2VuZGFudFJlc3VsdC5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmZ1bGx5Q29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVtb3ZlZCBkZXNjZW5kYW50IHJ1bGUgJHtydWxlLnNlbGVjdG9yfSBpbiBAbWVkaWEg4oaSICR7cmVzcG9uc2l2ZVZhcmlhbnR9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjciBvZiBkZXNjZW5kYW50UmVzdWx0LmNvbnZlcnNpb25SZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY3IuY29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wucHJvcCA9PT0gY3IuZGVjbGFyYXRpb24ucHJvcGVydHkgJiYgZGVjbC52YWx1ZSA9PT0gY3IuZGVjbGFyYXRpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFBhcnRpYWwgY29udmVyc2lvbiBvZiBkZXNjZW5kYW50IHJ1bGUgaW4gQG1lZGlhIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzaW1wbGVSZXN1bHQgPSB0aGlzLnByb2Nlc3NTaW1wbGVSdWxlKHJ1bGUsIFtyZXNwb25zaXZlVmFyaWFudF0pO1xuICAgICAgICAgIGlmIChzaW1wbGVSZXN1bHQpIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goLi4uc2ltcGxlUmVzdWx0LmNzc1J1bGVzKTtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goLi4uc2ltcGxlUmVzdWx0LmNvbnZlcnNpb25XYXJuaW5ncyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFueUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5zb21lKHIgPT4gci5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgaWYgKGFueUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBjb25zdCBhbGxGdWxseUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5ldmVyeShyID0+IHIuZnVsbHlDb252ZXJ0ZWQpO1xuICAgICAgICAgICAgICBpZiAoYWxsRnVsbHlDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICBydWxlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMubWFwKHIgPT4gci5jbGFzc05hbWUpLmpvaW4oJywgLicpO1xuICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZW1vdmVkIHJ1bGUgLiR7Y2xhc3NOYW1lc30gaW4gQG1lZGlhIChtaW4td2lkdGgpIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2Ygc2ltcGxlUmVzdWx0LmNvbnZlcnNpb25SZXN1bHRzLmZsYXQoKSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGNyLmNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gaW4gQG1lZGlhIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goYFNraXBwZWQgcnVsZSBpbiBAbWVkaWE6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgZW1wdHkgQG1lZGlhIHJ1bGVgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJvb3Qud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgICAgIGlmIChydWxlLnBhcmVudCAmJiBydWxlLnBhcmVudC50eXBlID09PSAnYXRydWxlJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRSZXN1bHQgPSB0aGlzLnByb2Nlc3NEZXNjZW5kYW50UnVsZShydWxlKTtcbiAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQpIHtcbiAgICAgICAgICBydWxlcy5wdXNoKGRlc2NlbmRhbnRSZXN1bHQuY3NzUnVsZSk7XG4gICAgICAgICAgd2FybmluZ3MucHVzaCguLi5kZXNjZW5kYW50UmVzdWx0LmNvbnZlcnNpb25XYXJuaW5ncyk7XG5cbiAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChkZXNjZW5kYW50UmVzdWx0LmNzc1J1bGUuZnVsbHlDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgZGVzY2VuZGFudCBydWxlICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2YgZGVzY2VuZGFudFJlc3VsdC5jb252ZXJzaW9uUmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmIChjci5jb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVjbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gb2YgZGVzY2VuZGFudCBydWxlYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpbXBsZVJlc3VsdCA9IHRoaXMucHJvY2Vzc1NpbXBsZVJ1bGUocnVsZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoIXNpbXBsZVJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGVzY2VuZGFudFNlbGVjdG9yKHJ1bGUuc2VsZWN0b3IpO1xuICAgICAgICAgIGlmIChwYXJzZWQuaXNDb21wbGV4KSB7XG4gICAgICAgICAgICB3YXJuaW5ncy5wdXNoKHBhcnNlZC5yZWFzb24gfHwgYFNraXBwZWQgY29tcGxleCBzZWxlY3RvcjogJHtydWxlLnNlbGVjdG9yfWApO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFNraXBwaW5nIGNvbXBsZXggc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkU2VsZWN0b3JzID0gcGFyc2VNdWx0aXBsZVNlbGVjdG9ycyhydWxlLnNlbGVjdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGFsbENvbXBsZXggPSBwYXJzZWRTZWxlY3RvcnMuZXZlcnkocyA9PiBzLmlzQ29tcGxleCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChhbGxDb21wbGV4KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlYXNvbnMgPSBwYXJzZWRTZWxlY3RvcnMubWFwKHMgPT4gcy5yZWFzb24pLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgICAgd2FybmluZ3MucHVzaCguLi5yZWFzb25zIGFzIHN0cmluZ1tdKTtcbiAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFNraXBwaW5nIGNvbXBsZXggc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVsZXMucHVzaCguLi5zaW1wbGVSZXN1bHQuY3NzUnVsZXMpO1xuICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLnNpbXBsZVJlc3VsdC5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgIGNvbnN0IGFueUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5zb21lKHIgPT4gci5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApO1xuICAgICAgICBpZiAoYW55Q29udmVydGVkKSB7XG4gICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICBjb25zdCBhbGxGdWxseUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5ldmVyeShyID0+IHIuZnVsbHlDb252ZXJ0ZWQpO1xuICAgICAgICAgIGlmIChhbGxGdWxseUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMubWFwKHIgPT4gci5jbGFzc05hbWUpLmpvaW4oJywgLicpO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgcnVsZSAuJHtjbGFzc05hbWVzfSAoYWxsIGRlY2xhcmF0aW9ucyBjb252ZXJ0ZWQpYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2Ygc2ltcGxlUmVzdWx0LmNvbnZlcnNpb25SZXN1bHRzLmZsYXQoKSkge1xuICAgICAgICAgICAgICBpZiAoY3IuY29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gb2YgcnVsZWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJvb3Qud2Fsa0F0UnVsZXMoKGF0UnVsZSkgPT4ge1xuICAgICAgICBpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjYW5EZWxldGUgPSByb290Lm5vZGVzLmxlbmd0aCA9PT0gMDtcbiAgICAgIGNvbnN0IG5ld0NzcyA9IHJvb3QudG9TdHJpbmcoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3NzOiBuZXdDc3MsXG4gICAgICAgIHJ1bGVzLFxuICAgICAgICBoYXNDaGFuZ2VzLFxuICAgICAgICBjYW5EZWxldGUsXG4gICAgICAgIHdhcm5pbmdzXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHBhcnNlIENTUyAke2ZpbGVQYXRofTpgLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENTUyBwYXJzaW5nIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZUludGVybmFsU3R5bGUoaHRtbDogc3RyaW5nKTogeyBcbiAgICBzdHlsZXM6IEFycmF5PHsgY29udGVudDogc3RyaW5nOyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PjtcbiAgICB3YXJuaW5nczogc3RyaW5nW107XG4gIH0ge1xuICAgIGNvbnN0IHN0eWxlczogQXJyYXk8eyBjb250ZW50OiBzdHJpbmc7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0+ID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdCBzdHlsZVJlZ2V4ID0gLzxzdHlsZVtePl0qPihbXFxzXFxTXSo/KTxcXC9zdHlsZT4vZ2k7XG4gICAgbGV0IG1hdGNoO1xuXG4gICAgd2hpbGUgKChtYXRjaCA9IHN0eWxlUmVnZXguZXhlYyhodG1sKSkgIT09IG51bGwpIHtcbiAgICAgIHN0eWxlcy5wdXNoKHtcbiAgICAgICAgY29udGVudDogbWF0Y2hbMV0udHJpbSgpLFxuICAgICAgICBzdGFydDogbWF0Y2guaW5kZXgsXG4gICAgICAgIGVuZDogbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7IHN0eWxlcywgd2FybmluZ3MgfTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlSW50ZXJuYWxDU1MoaHRtbDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx7XG4gICAgaHRtbDogc3RyaW5nO1xuICAgIHJ1bGVzOiBDU1NSdWxlW107XG4gICAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgICB3YXJuaW5nczogc3RyaW5nW107XG4gIH0+IHtcbiAgICBjb25zdCBhbGxSdWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3QgYWxsV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IG1vZGlmaWVkSHRtbCA9IGh0bWw7XG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHsgc3R5bGVzIH0gPSB0aGlzLnBhcnNlSW50ZXJuYWxTdHlsZShodG1sKTtcblxuICAgIGZvciAobGV0IGkgPSBzdHlsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gc3R5bGVzW2ldO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBhcnNlKHN0eWxlLmNvbnRlbnQsIGZpbGVQYXRoKTtcbiAgICAgICAgXG4gICAgICAgIGFsbFJ1bGVzLnB1c2goLi4ucmVzdWx0LnJ1bGVzKTtcbiAgICAgICAgYWxsV2FybmluZ3MucHVzaCguLi5yZXN1bHQud2FybmluZ3MpO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaGFzQ2hhbmdlcykge1xuICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHJlc3VsdC5jYW5EZWxldGUgfHwgcmVzdWx0LmNzcy50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICBtb2RpZmllZEh0bWwgPSBtb2RpZmllZEh0bWwuc2xpY2UoMCwgc3R5bGUuc3RhcnQpICsgbW9kaWZpZWRIdG1sLnNsaWNlKHN0eWxlLmVuZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IG1vZGlmaWVkSHRtbC5zbGljZSgwLCBzdHlsZS5zdGFydCk7XG4gICAgICAgICAgICBjb25zdCBhZnRlciA9IG1vZGlmaWVkSHRtbC5zbGljZShzdHlsZS5lbmQpO1xuICAgICAgICAgICAgY29uc3QgdGFnU3RhcnQgPSBodG1sLnNsaWNlKHN0eWxlLnN0YXJ0KS5tYXRjaCgvPHN0eWxlW14+XSo+Lyk/LlswXSB8fCAnPHN0eWxlPic7XG4gICAgICAgICAgICBjb25zdCB0YWdFbmQgPSAnPC9zdHlsZT4nO1xuICAgICAgICAgICAgbW9kaWZpZWRIdG1sID0gYmVmb3JlICsgdGFnU3RhcnQgKyAnXFxuJyArIHJlc3VsdC5jc3MgKyAnXFxuJyArIHRhZ0VuZCArIGFmdGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBwYXJzZSBpbnRlcm5hbCBzdHlsZSBibG9jazogJHtlcnJvcn1gKTtcbiAgICAgICAgYWxsV2FybmluZ3MucHVzaChgRmFpbGVkIHRvIHBhcnNlIGludGVybmFsIHN0eWxlOiAke2Vycm9yfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBodG1sOiBtb2RpZmllZEh0bWwsXG4gICAgICBydWxlczogYWxsUnVsZXMsXG4gICAgICBoYXNDaGFuZ2VzLFxuICAgICAgd2FybmluZ3M6IGFsbFdhcm5pbmdzXG4gICAgfTtcbiAgfVxuXG4gIGV4dHJhY3RJbXBvcnRQYXRocyhjb2RlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgaW1wb3J0czogc3RyaW5nW10gPSBbXTtcbiAgICBcbiAgICBjb25zdCBpbXBvcnRSZWdleCA9IC9pbXBvcnRcXHMrWydcIl0oW14nXCJdK1xcLmNzcylbJ1wiXTs/L2c7XG4gICAgbGV0IG1hdGNoO1xuICAgIFxuICAgIHdoaWxlICgobWF0Y2ggPSBpbXBvcnRSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgICAgaW1wb3J0cy5wdXNoKG1hdGNoWzFdKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1aXJlUmVnZXggPSAvcmVxdWlyZVxccypcXChcXHMqWydcIl0oW14nXCJdK1xcLmNzcylbJ1wiXVxccypcXCkvZztcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVxdWlyZVJlZ2V4LmV4ZWMoY29kZSkpICE9PSBudWxsKSB7XG4gICAgICBpbXBvcnRzLnB1c2gobWF0Y2hbMV0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBvcnRzO1xuICB9XG59Il19
@@ -8,26 +8,64 @@ export interface ConversionResult {
8
8
  skipped: boolean;
9
9
  reason?: string;
10
10
  }
11
+ export interface MultiConversionResult {
12
+ classes: string[];
13
+ warnings: string[];
14
+ cssProperties: string[];
15
+ }
11
16
  export declare class TailwindMapper {
12
17
  private config;
13
18
  private spacingScale;
19
+ private maxWidthScale;
20
+ private fontSizeScale;
21
+ private lineHeightScale;
22
+ private letterSpacingScale;
23
+ private zIndexScale;
24
+ private opacityScale;
14
25
  constructor(config: TailwindConfig);
15
26
  private buildSpacingScale;
27
+ private buildMaxWidthScale;
28
+ private buildFontSizeScale;
29
+ private buildLineHeightScale;
30
+ private buildLetterSpacingScale;
31
+ private buildZIndexScale;
32
+ private buildOpacityScale;
16
33
  private pxToSpacing;
17
34
  private extractPx;
35
+ private parseSpacingValue;
36
+ private buildSpacingUtility;
37
+ private tokenizeValue;
18
38
  convertProperty(property: string, value: string): ConversionResult;
39
+ convertPropertyWithMultiple(property: string, value: string): MultiConversionResult;
40
+ private convertSpacingShorthand;
19
41
  private convertDisplay;
20
42
  private convertMargin;
21
43
  private convertPadding;
44
+ private convertDimensionConstraint;
22
45
  private convertFontWeight;
23
46
  private convertFontSize;
47
+ private convertTextDecoration;
48
+ private convertTextTransform;
49
+ private convertLetterSpacing;
50
+ private convertLineHeight;
24
51
  private convertFlexbox;
52
+ private convertFlexShorthand;
25
53
  private convertGap;
26
54
  private convertWidth;
27
55
  private convertHeight;
28
56
  private convertBackgroundColor;
29
57
  private convertTextColor;
30
58
  private convertBorderRadius;
59
+ private convertBorder;
60
+ private convertBorderShorthand;
61
+ private convertDirectionalBorderShorthand;
62
+ private convertAspectRatio;
63
+ private convertOverflow;
64
+ private convertObjectFit;
65
+ private convertObjectPosition;
66
+ private convertOpacity;
67
+ private convertWordBreak;
68
+ private convertZIndex;
31
69
  convertMultiple(properties: CSSProperty[]): {
32
70
  classes: string[];
33
71
  warnings: string[];