occam-nominal 1.0.320 → 1.0.324

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.
@@ -8,7 +8,9 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
+ const _occamlanguages = require("occam-languages");
11
12
  const _declaration = /*#__PURE__*/ _interop_require_default(require("../declaration"));
13
+ const _continuation = require("../../utilities/continuation");
12
14
  const _elements = require("../../elements");
13
15
  const _type = require("../../utilities/type");
14
16
  function _interop_require_default(obj) {
@@ -16,6 +18,7 @@ function _interop_require_default(obj) {
16
18
  default: obj
17
19
  };
18
20
  }
21
+ const { every } = _occamlanguages.continuationUtilities, { breakable } = _occamlanguages.breakPointUtilities;
19
22
  const _default = (0, _elements.define)(class TypeDeclaration extends _declaration.default {
20
23
  constructor(context, string, node, breakPoint, type, superTypes, provisional){
21
24
  super(context, string, node, breakPoint);
@@ -40,32 +43,29 @@ const _default = (0, _elements.define)(class TypeDeclaration extends _declaratio
40
43
  const properties = [];
41
44
  return properties;
42
45
  }
43
- async verify(context) {
44
- let verifies = false;
45
- await this.break(context);
46
+ verify = breakable(function(context, continuation) {
46
47
  const typeDeclarationString = this.getString(); ///
47
48
  context.trace(`Verifying the '${typeDeclarationString}' type declaration...`);
48
- const typeVerifies = this.verifyType(context);
49
- if (typeVerifies) {
50
- const superTypesVerify = this.verifySuperTypes(context);
51
- if (superTypesVerify) {
52
- const typePrefixVerifies = this.verifyTypePrefix(context);
53
- if (typePrefixVerifies) {
54
- const properties = this.getProperties(), typePrefix = context.getTypePrefix(), prefixName = typePrefix !== null ? typePrefix.getPrefixName() : null;
55
- this.type.setProvisional(this.provisional);
56
- this.type.setProperties(properties);
57
- this.type.setPrefixName(prefixName);
58
- context.addType(this.type);
59
- verifies = true;
60
- }
49
+ const verifyType = this.verifyType.bind(this), verifySuperTypes = this.verifySuperTypes.bind(this), verifyTypePrefix = this.verifyTypePrefix.bind(this);
50
+ return (0, _continuation.all)([
51
+ verifyType,
52
+ verifySuperTypes,
53
+ verifyTypePrefix
54
+ ], context, (verifies)=>{
55
+ if (verifies) {
56
+ const properties = this.getProperties(), typePrefix = context.getTypePrefix(), prefixName = typePrefix !== null ? typePrefix.getPrefixName() : null;
57
+ this.type.setProvisional(this.provisional);
58
+ this.type.setProperties(properties);
59
+ this.type.setPrefixName(prefixName);
60
+ context.addType(this.type);
61
61
  }
62
- }
63
- if (verifies) {
64
- context.debug(`...verified the '${typeDeclarationString}' type declaration.`);
65
- }
66
- return verifies;
67
- }
68
- verifyType(context) {
62
+ if (verifies) {
63
+ context.debug(`...verified the '${typeDeclarationString}' type declaration.`);
64
+ }
65
+ return continuation(verifies);
66
+ });
67
+ });
68
+ verifyType(context, continuation) {
69
69
  let typeVerifies = false;
70
70
  const typeString = this.type.getString(), typeDeclarationString = this.getString(); ///
71
71
  context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type...`);
@@ -83,9 +83,42 @@ const _default = (0, _elements.define)(class TypeDeclaration extends _declaratio
83
83
  if (typeVerifies) {
84
84
  context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type`);
85
85
  }
86
- return typeVerifies;
86
+ return continuation(typeVerifies);
87
+ }
88
+ verifyTypePrefix(context, continuation) {
89
+ let typePrefixVerifies = false;
90
+ const typeString = this.type.getString(), typeDeclarationString = this.getString(); ///
91
+ context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix...`);
92
+ const typePrefixed = this.type.isPrefixed();
93
+ if (!typePrefixed) {
94
+ typePrefixVerifies = true;
95
+ } else {
96
+ context.debug(`The '${typeDeclarationString}' type declaration's '${typeString}' type is prefixed.`);
97
+ }
98
+ if (typePrefixVerifies) {
99
+ context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix.`);
100
+ }
101
+ return continuation(typePrefixVerifies);
102
+ }
103
+ verifySuperTypes(context, continuation) {
104
+ const superTypes = [], typeDeclarationString = this.getString(); ///
105
+ context.trace(`Verifying the '${typeDeclarationString}' type declaration's super-types...`);
106
+ every(this.superTypes, (superType, continuation)=>{
107
+ this.verifySuperType(superType, superTypes, context, continuation);
108
+ }, (superTypesVerify)=>{
109
+ if (superTypesVerify) {
110
+ const superTypesLength = superTypes.length;
111
+ if (superTypesLength === 0) {
112
+ const baseType = (0, _type.baseTypeFromNothing)(), superTyupe = baseType; ///
113
+ superTypes.push(superTyupe);
114
+ }
115
+ this.type.setSuperTypes(superTypes);
116
+ context.debug(`...verified the '${typeDeclarationString}' type declaration's super-types.`);
117
+ }
118
+ return continuation(superTypesVerify);
119
+ });
87
120
  }
88
- verifySuperType(superType, superTypes, context) {
121
+ verifySuperType(superType, superTypes, context, continuation) {
89
122
  let superTypeVerifies = false;
90
123
  const superTypeString = superType.getString(), typeDeclarationString = this.getString(); ///
91
124
  context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type...`);
@@ -104,45 +137,9 @@ const _default = (0, _elements.define)(class TypeDeclaration extends _declaratio
104
137
  if (superTypeVerifies) {
105
138
  context.debug(`...verified the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type.`);
106
139
  }
107
- return superTypeVerifies;
108
- }
109
- verifySuperTypes(context) {
110
- let superTypesVerify;
111
- const superTypes = [], typeDeclarationString = this.getString(); ///
112
- context.trace(`Verifying the '${typeDeclarationString}' type declaration's super-types...`);
113
- superTypesVerify = this.superTypes.every((superType)=>{
114
- const superTypeVerifies = this.verifySuperType(superType, superTypes, context);
115
- if (superTypeVerifies) {
116
- return true;
117
- }
118
- });
119
- if (superTypesVerify) {
120
- const superTypesLength = superTypes.length;
121
- if (superTypesLength === 0) {
122
- const baseType = (0, _type.baseTypeFromNothing)(), superTyupe = baseType; ///
123
- superTypes.push(superTyupe);
124
- }
125
- this.type.setSuperTypes(superTypes);
126
- context.debug(`...verified the '${typeDeclarationString}' type declaration's super-types.`);
127
- }
128
- return superTypesVerify;
129
- }
130
- verifyTypePrefix(context) {
131
- let typePrefixVerifies = false;
132
- const typeString = this.type.getString(), typeDeclarationString = this.getString(); ///
133
- context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix...`);
134
- const typePrefixed = this.type.isPrefixed();
135
- if (!typePrefixed) {
136
- typePrefixVerifies = true;
137
- } else {
138
- context.debug(`The '${typeDeclarationString}' type declaration's '${typeString}' type is prefixed.`);
139
- }
140
- if (typePrefixVerifies) {
141
- context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix.`);
142
- }
143
- return typePrefixVerifies;
140
+ return continuation(superTypeVerifies);
144
141
  }
145
142
  static name = "TypeDeclaration";
146
143
  });
147
144
 
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2RlY2xhcmF0aW9uL3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi4vZGVjbGFyYXRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBUeXBlRGVjbGFyYXRpb24gZXh0ZW5kcyBEZWNsYXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnN1cGVyVHlwZXMgPSBzdXBlclR5cGVzO1xuICAgIHRoaXMucHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldFN1cGVyVHlwZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwZXJUeXBlcztcbiAgfVxuXG4gIGlzUHJvdmlzaW9uYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXR0eXBlRGVjbGFyYXRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICB0eXBlRGVjbGFyYXRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gdHlwZURlY2xhcmF0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IFtdO1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBhc3luYyB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgYXdhaXQgdGhpcy5icmVhayhjb250ZXh0KTtcblxuICAgIGNvbnN0IHR5cGVEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbi4uLmApO1xuXG4gICAgY29uc3QgdHlwZVZlcmlmaWVzID0gdGhpcy52ZXJpZnlUeXBlKGNvbnRleHQpO1xuXG4gICAgaWYgKHR5cGVWZXJpZmllcykge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlc1ZlcmlmeSA9IHRoaXMudmVyaWZ5U3VwZXJUeXBlcyhjb250ZXh0KTtcblxuICAgICAgaWYgKHN1cGVyVHlwZXNWZXJpZnkpIHtcbiAgICAgICAgY29uc3QgdHlwZVByZWZpeFZlcmlmaWVzID0gdGhpcy52ZXJpZnlUeXBlUHJlZml4KGNvbnRleHQpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlZml4VmVyaWZpZXMpIHtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgICAgICAgICAgdHlwZVByZWZpeCA9IGNvbnRleHQuZ2V0VHlwZVByZWZpeCgpLFxuICAgICAgICAgICAgICAgIHByZWZpeE5hbWUgPSAodHlwZVByZWZpeCAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVQcmVmaXguZ2V0UHJlZml4TmFtZSgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgICAgICAgICB0aGlzLnR5cGUuc2V0UHJvdmlzaW9uYWwodGhpcy5wcm92aXNpb25hbCk7XG5cbiAgICAgICAgICB0aGlzLnR5cGUuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcblxuICAgICAgICAgIHRoaXMudHlwZS5zZXRQcmVmaXhOYW1lKHByZWZpeE5hbWUpO1xuXG4gICAgICAgICAgY29udGV4dC5hZGRUeXBlKHRoaXMudHlwZSk7XG5cbiAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIHZlcmlmeVR5cGUoY29udGV4dCkge1xuICAgIGxldCB0eXBlVmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZS4uLmApO1xuXG4gICAgY29uc3QgdHlwZU5hbWUgPSB0aGlzLnR5cGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIGluY2x1ZGVSZWxlYXNlID0gZmFsc2UsXG4gICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICBpZiAoIXR5cGVQcmVzZW50KSB7XG4gICAgICBjb25zdCBwcmVmaXhlZFR5cGVOYW1lID0gdHlwZU5hbWUsIC8vL1xuICAgICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSk7XG5cbiAgICAgIGlmICghdHlwZVByZXNlbnQpIHtcbiAgICAgICAgdHlwZVZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZWApO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlVmVyaWZpZXM7XG4gIH1cblxuICB2ZXJpZnlTdXBlclR5cGUoc3VwZXJUeXBlLCBzdXBlclR5cGVzLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1cGVyVHlwZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLi4uYCk7XG5cbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgdHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWUsIC8vL1xuICAgICAgICAgIHR5cGVDb21wYXJlc1RvVHlwZU5hbWUgPSB0aGlzLnR5cGUuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIGlmICghdHlwZUNvbXBhcmVzVG9UeXBlTmFtZSkge1xuICAgICAgc3VwZXJUeXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgIGlmIChzdXBlclR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHlwZSk7XG5cbiAgICAgICAgc3VwZXJUeXBlVmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3N1cGVyVHlwZVN0cmluZ30nIHN1cGVyLXR5cGUgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlJ3MgbmFtZSBjb21wYXJlcyB0byB0aGUgJHt0eXBlTmFtZX0nIHR5cGUncyBuYW1lLmApO1xuICAgIH1cblxuICAgIGlmIChzdXBlclR5cGVWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlclR5cGVWZXJpZmllcztcbiAgfVxuXG4gIHZlcmlmeVN1cGVyVHlwZXMoY29udGV4dCkge1xuICAgIGxldCBzdXBlclR5cGVzVmVyaWZ5O1xuXG4gICAgY29uc3Qgc3VwZXJUeXBlcyA9IFtdLFxuICAgICAgICAgIHR5cGVEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3Mgc3VwZXItdHlwZXMuLi5gKTtcblxuICAgIHN1cGVyVHlwZXNWZXJpZnkgPSB0aGlzLnN1cGVyVHlwZXMuZXZlcnkoKHN1cGVyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlVmVyaWZpZXMgPSB0aGlzLnZlcmlmeVN1cGVyVHlwZShzdXBlclR5cGUsIHN1cGVyVHlwZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwZXJUeXBlVmVyaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc3VwZXJUeXBlc1ZlcmlmeSkge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlc0xlbmd0aCA9IHN1cGVyVHlwZXMubGVuZ3RoO1xuXG4gICAgICBpZiAoc3VwZXJUeXBlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICAgICAgc3VwZXJUeXVwZSA9IGJhc2VUeXBlOyAgLy8vXG5cbiAgICAgICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHl1cGUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnR5cGUuc2V0U3VwZXJUeXBlcyhzdXBlclR5cGVzKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyBzdXBlci10eXBlcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXJUeXBlc1ZlcmlmeTtcbiAgfVxuXG4gIHZlcmlmeVR5cGVQcmVmaXgoY29udGV4dCkge1xuICAgIGxldCB0eXBlUHJlZml4VmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZSdzIHByZWZpeC4uLmApO1xuXG4gICAgY29uc3QgdHlwZVByZWZpeGVkID0gdGhpcy50eXBlLmlzUHJlZml4ZWQoKTtcblxuICAgIGlmICghdHlwZVByZWZpeGVkKSB7XG4gICAgICB0eXBlUHJlZml4VmVyaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbidzICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIHByZWZpeGVkLmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlUHJlZml4VmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGUncyBwcmVmaXguYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhWZXJpZmllcztcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUeXBlRGVjbGFyYXRpb25cIjtcbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIlR5cGVEZWNsYXJhdGlvbiIsIkRlY2xhcmF0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidHlwZSIsInN1cGVyVHlwZXMiLCJwcm92aXNpb25hbCIsImdldFR5cGUiLCJnZXRTdXBlclR5cGVzIiwiaXNQcm92aXNpb25hbCIsImdldHR5cGVEZWNsYXJhdGlvbk5vZGUiLCJnZXROb2RlIiwidHlwZURlY2xhcmF0aW9uTm9kZSIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwidmVyaWZ5IiwidmVyaWZpZXMiLCJicmVhayIsInR5cGVEZWNsYXJhdGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidHlwZVZlcmlmaWVzIiwidmVyaWZ5VHlwZSIsInN1cGVyVHlwZXNWZXJpZnkiLCJ2ZXJpZnlTdXBlclR5cGVzIiwidHlwZVByZWZpeFZlcmlmaWVzIiwidmVyaWZ5VHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJnZXRUeXBlUHJlZml4IiwicHJlZml4TmFtZSIsImdldFByZWZpeE5hbWUiLCJzZXRQcm92aXNpb25hbCIsInNldFByb3BlcnRpZXMiLCJzZXRQcmVmaXhOYW1lIiwiYWRkVHlwZSIsImRlYnVnIiwidHlwZVN0cmluZyIsInR5cGVOYW1lIiwiZ2V0TmFtZSIsImluY2x1ZGVSZWxlYXNlIiwidHlwZVByZXNlbnQiLCJpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSIsInByZWZpeGVkVHlwZU5hbWUiLCJpc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lIiwidmVyaWZ5U3VwZXJUeXBlIiwic3VwZXJUeXBlIiwic3VwZXJUeXBlVmVyaWZpZXMiLCJzdXBlclR5cGVTdHJpbmciLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJ0eXBlQ29tcGFyZXNUb1R5cGVOYW1lIiwiY29tcGFyZVR5cGVOYW1lIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsInB1c2giLCJldmVyeSIsInN1cGVyVHlwZXNMZW5ndGgiLCJsZW5ndGgiLCJiYXNlVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJzdXBlclR5dXBlIiwic2V0U3VwZXJUeXBlcyIsInR5cGVQcmVmaXhlZCIsImlzUHJlZml4ZWQiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFPQTs7O2VBQUE7OztvRUFMd0I7MEJBRUQ7c0JBQ2E7Ozs7OztNQUVwQyxXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLHdCQUF3QkMsb0JBQVc7SUFDN0QsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVB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
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2RlY2xhcmF0aW9uL3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IERlY2xhcmF0aW9uIGZyb20gXCIuLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBhbGwgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmNvbnN0IHsgZXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWthYmxlIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgVHlwZURlY2xhcmF0aW9uIGV4dGVuZHMgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5zdXBlclR5cGVzID0gc3VwZXJUeXBlcztcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRTdXBlclR5cGVzKCkge1xuICAgIHJldHVybiB0aGlzLnN1cGVyVHlwZXM7XG4gIH1cblxuICBpc1Byb3Zpc2lvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0dHlwZURlY2xhcmF0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHR5cGVEZWNsYXJhdGlvbk5vZGU7XG4gIH1cblxuICBnZXRQcm9wZXJ0aWVzKCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBbXTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgdmVyaWZ5ID0gYnJlYWthYmxlKGZ1bmN0aW9uIChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCB0eXBlRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHZlcmlmeVR5cGUgPSB0aGlzLnZlcmlmeVR5cGUuYmluZCh0aGlzKSxcbiAgICAgICAgICB2ZXJpZnlTdXBlclR5cGVzID0gdGhpcy52ZXJpZnlTdXBlclR5cGVzLmJpbmQodGhpcyksXG4gICAgICAgICAgdmVyaWZ5VHlwZVByZWZpeCA9IHRoaXMudmVyaWZ5VHlwZVByZWZpeC5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2ZXJpZnlUeXBlLFxuICAgICAgdmVyaWZ5U3VwZXJUeXBlcyxcbiAgICAgIHZlcmlmeVR5cGVQcmVmaXhcbiAgICBdLCBjb250ZXh0LCAodmVyaWZpZXMpID0+IHtcbiAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgICAgICAgIHR5cGVQcmVmaXggPSBjb250ZXh0LmdldFR5cGVQcmVmaXgoKSxcbiAgICAgICAgICAgICAgcHJlZml4TmFtZSA9ICh0eXBlUHJlZml4ICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVQcmVmaXguZ2V0UHJlZml4TmFtZSgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gICAgICAgIHRoaXMudHlwZS5zZXRQcm92aXNpb25hbCh0aGlzLnByb3Zpc2lvbmFsKTtcblxuICAgICAgICB0aGlzLnR5cGUuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcblxuICAgICAgICB0aGlzLnR5cGUuc2V0UHJlZml4TmFtZShwcmVmaXhOYW1lKTtcblxuICAgICAgICBjb250ZXh0LmFkZFR5cGUodGhpcy50eXBlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmVyaWZ5VHlwZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdHlwZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCB0eXBlU3RyaW5nID0gdGhpcy50eXBlLmdldFN0cmluZygpLFxuICAgICAgICAgIHR5cGVEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGUuLi5gKTtcblxuICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKSxcbiAgICAgICAgICBpbmNsdWRlUmVsZWFzZSA9IGZhbHNlLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgaWYgKCF0eXBlUHJlc2VudCkge1xuICAgICAgY29uc3QgcHJlZml4ZWRUeXBlTmFtZSA9IHR5cGVOYW1lLCAvLy9cbiAgICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpO1xuXG4gICAgICBpZiAoIXR5cGVQcmVzZW50KSB7XG4gICAgICAgIHR5cGVWZXJpZmllcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGVgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHR5cGVWZXJpZmllcyk7XG4gIH1cblxuICB2ZXJpZnlUeXBlUHJlZml4KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0eXBlUHJlZml4VmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZSdzIHByZWZpeC4uLmApO1xuXG4gICAgY29uc3QgdHlwZVByZWZpeGVkID0gdGhpcy50eXBlLmlzUHJlZml4ZWQoKTtcblxuICAgIGlmICghdHlwZVByZWZpeGVkKSB7XG4gICAgICB0eXBlUHJlZml4VmVyaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbidzICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIHByZWZpeGVkLmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlUHJlZml4VmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGUncyBwcmVmaXguYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0eXBlUHJlZml4VmVyaWZpZXMpO1xuICB9XG5cbiAgdmVyaWZ5U3VwZXJUeXBlcyhjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdXBlclR5cGVzID0gW10sXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyBzdXBlci10eXBlcy4uLmApO1xuXG4gICAgZXZlcnkodGhpcy5zdXBlclR5cGVzLCAoc3VwZXJUeXBlLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHRoaXMudmVyaWZ5U3VwZXJUeXBlKHN1cGVyVHlwZSwgc3VwZXJUeXBlcywgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCAoc3VwZXJUeXBlc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKHN1cGVyVHlwZXNWZXJpZnkpIHtcbiAgICAgICAgY29uc3Qgc3VwZXJUeXBlc0xlbmd0aCA9IHN1cGVyVHlwZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdXBlclR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgICAgICAgc3VwZXJUeXVwZSA9IGJhc2VUeXBlOyAgLy8vXG5cbiAgICAgICAgICBzdXBlclR5cGVzLnB1c2goc3VwZXJUeXVwZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnR5cGUuc2V0U3VwZXJUeXBlcyhzdXBlclR5cGVzKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbidzIHN1cGVyLXR5cGVzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cGVyVHlwZXNWZXJpZnkpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5U3VwZXJUeXBlKHN1cGVyVHlwZSwgc3VwZXJUeXBlcywgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHN1cGVyVHlwZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLi4uYCk7XG5cbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgdHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWUsIC8vL1xuICAgICAgICAgIHR5cGVDb21wYXJlc1RvVHlwZU5hbWUgPSB0aGlzLnR5cGUuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIGlmICghdHlwZUNvbXBhcmVzVG9UeXBlTmFtZSkge1xuICAgICAgc3VwZXJUeXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgIGlmIChzdXBlclR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHlwZSk7XG5cbiAgICAgICAgc3VwZXJUeXBlVmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3N1cGVyVHlwZVN0cmluZ30nIHN1cGVyLXR5cGUgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlJ3MgbmFtZSBjb21wYXJlcyB0byB0aGUgJHt0eXBlTmFtZX0nIHR5cGUncyBuYW1lLmApO1xuICAgIH1cblxuICAgIGlmIChzdXBlclR5cGVWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3VwZXJUeXBlVmVyaWZpZXMpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlR5cGVEZWNsYXJhdGlvblwiO1xufSk7XG4iXSwibmFtZXMiOlsiZXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiVHlwZURlY2xhcmF0aW9uIiwiRGVjbGFyYXRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0eXBlIiwic3VwZXJUeXBlcyIsInByb3Zpc2lvbmFsIiwiZ2V0VHlwZSIsImdldFN1cGVyVHlwZXMiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0dHlwZURlY2xhcmF0aW9uTm9kZSIsImdldE5vZGUiLCJ0eXBlRGVjbGFyYXRpb25Ob2RlIiwiZ2V0UHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJ2ZXJpZnkiLCJjb250aW51YXRpb24iLCJ0eXBlRGVjbGFyYXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZlcmlmeVR5cGUiLCJiaW5kIiwidmVyaWZ5U3VwZXJUeXBlcyIsInZlcmlmeVR5cGVQcmVmaXgiLCJhbGwiLCJ2ZXJpZmllcyIsInR5cGVQcmVmaXgiLCJnZXRUeXBlUHJlZml4IiwicHJlZml4TmFtZSIsImdldFByZWZpeE5hbWUiLCJzZXRQcm92aXNpb25hbCIsInNldFByb3BlcnRpZXMiLCJzZXRQcmVmaXhOYW1lIiwiYWRkVHlwZSIsImRlYnVnIiwidHlwZVZlcmlmaWVzIiwidHlwZVN0cmluZyIsInR5cGVOYW1lIiwiZ2V0TmFtZSIsImluY2x1ZGVSZWxlYXNlIiwidHlwZVByZXNlbnQiLCJpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSIsInByZWZpeGVkVHlwZU5hbWUiLCJpc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lIiwidHlwZVByZWZpeFZlcmlmaWVzIiwidHlwZVByZWZpeGVkIiwiaXNQcmVmaXhlZCIsInN1cGVyVHlwZSIsInZlcmlmeVN1cGVyVHlwZSIsInN1cGVyVHlwZXNWZXJpZnkiLCJzdXBlclR5cGVzTGVuZ3RoIiwibGVuZ3RoIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwic3VwZXJUeXVwZSIsInB1c2giLCJzZXRTdXBlclR5cGVzIiwic3VwZXJUeXBlVmVyaWZpZXMiLCJzdXBlclR5cGVTdHJpbmciLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJ0eXBlQ29tcGFyZXNUb1R5cGVOYW1lIiwiY29tcGFyZVR5cGVOYW1lIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsIm5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVgyRDtvRUFFbkM7OEJBRUo7MEJBQ0c7c0JBQ2E7Ozs7OztBQUVwQyxNQUFNLEVBQUVBLEtBQUssRUFBRSxHQUFHQyxxQ0FBcUIsRUFDakMsRUFBRUMsU0FBUyxFQUFFLEdBQUdDLG1DQUFtQjtNQUV6QyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLHdCQUF3QkMsb0JBQVc7SUFDN0QsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxDQUFFO1FBQzVFLEtBQUssQ0FBQ04sU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtJQUNyQjtJQUVBQyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNILElBQUk7SUFDbEI7SUFFQUksZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNILFVBQVU7SUFDeEI7SUFFQUksZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNILFdBQVc7SUFDekI7SUFFQUkseUJBQXlCO1FBQ3ZCLE1BQU1SLE9BQU8sSUFBSSxDQUFDUyxPQUFPLElBQ25CQyxzQkFBc0JWLE1BQU0sR0FBRztRQUVyQyxPQUFPVTtJQUNUO0lBRUFDLGdCQUFnQjtRQUNkLE1BQU1DLGFBQWEsRUFBRTtRQUVyQixPQUFPQTtJQUNUO0lBRUFDLFNBQVNwQixVQUFVLFNBQVVLLE9BQU8sRUFBRWdCLFlBQVk7UUFDaEQsTUFBTUMsd0JB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
@@ -64,7 +64,12 @@ const _default = (0, _elements.define)(class FrameSubstitution extends _substitu
64
64
  const frameEqualToReplacementFrame = this.replacementFrame.isEqualTo(frame), comparedToFrame = frameEqualToReplacementFrame; ///
65
65
  return comparedToFrame;
66
66
  }
67
- validate(context, continuation) {
67
+ validate(strict, context, continuation) {
68
+ if (continuation === undefined) {
69
+ continuation = context; ///
70
+ context = strict; ///
71
+ strict = false;
72
+ }
68
73
  const frameSubstitutionString = this.getString(); ///
69
74
  context.trace(`Validating the '${frameSubstitutionString}' frame substitution...`);
70
75
  const validSubstitution = this.findValidSubstitution(context);
@@ -74,27 +79,29 @@ const _default = (0, _elements.define)(class FrameSubstitution extends _substitu
74
79
  return continuation(frameSubstitution);
75
80
  }
76
81
  const generalContext = this.getGeneralContext(), specificContext = this.getSpecificContext();
77
- (0, _context.attempts)((generalContext, specificContext)=>{
78
- const validateTargetFrame = this.validateTargetFrame.bind(this), validateReplacementFrame = this.validateReplacementFrame.bind(this);
79
- return (0, _continuation.all)([
80
- validateTargetFrame,
81
- validateReplacementFrame
82
- ], generalContext, specificContext, (validates)=>{
83
- let frameSubstitution = null;
84
- if (validates) {
85
- const substitution = this; ///
86
- frameSubstitution = substitution; ///
87
- context.addSubstitution(substitution);
88
- }
89
- if (validates) {
90
- this.commit(generalContext, specificContext);
91
- }
92
- if (validates) {
93
- context.debug(`...validated the '${frameSubstitutionString}' frame substitution.`);
94
- }
95
- return continuation(frameSubstitution);
96
- });
97
- }, generalContext, specificContext);
82
+ (strict ? _context.pass : _context.waive)((context)=>{
83
+ (0, _context.attempts)((generalContext, specificContext)=>{
84
+ const validateTargetFrame = this.validateTargetFrame.bind(this), validateReplacementFrame = this.validateReplacementFrame.bind(this);
85
+ return (0, _continuation.all)([
86
+ validateTargetFrame,
87
+ validateReplacementFrame
88
+ ], generalContext, specificContext, (validates)=>{
89
+ let frameSubstitution = null;
90
+ if (validates) {
91
+ const substitution = this; ///
92
+ frameSubstitution = substitution; ///
93
+ context.addSubstitution(substitution);
94
+ }
95
+ if (validates) {
96
+ this.commit(generalContext, specificContext);
97
+ }
98
+ if (validates) {
99
+ context.debug(`...validated the '${frameSubstitutionString}' frame substitution.`);
100
+ }
101
+ return continuation(frameSubstitution);
102
+ });
103
+ }, generalContext, specificContext);
104
+ }, context);
98
105
  }
99
106
  validateTargetFrame(generalContext, specificContext, continuation) {
100
107
  const context = generalContext, frameSubstitutionString = this.getString(); ///
@@ -261,4 +268,4 @@ function replacementFrameFromFrameSubstitutionNode(frameSubstitutionNode, specif
261
268
  return replacementFrame;
262
269
  }
263
270
 
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3N1YnN0aXR1dGlvbi9mcmFtZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IFN1YnN0aXR1dGlvbiBmcm9tIFwiLi4vc3Vic3RpdHV0aW9uXCI7XG5cbmltcG9ydCB7IGFsbCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRnJhbWVTdWJzdGl0dXRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBlbGlkZSwgYWJsYXRlLCBhYmxhdGVzLCBkZXNjZW5kLCBtYW5pZmVzdCwgYXR0ZW1wdHMsIHJlY29uY2lsZSwgaW5zdGFudGlhdGUsIHVuc2VyaWFsaXNlcyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEZyYW1lU3Vic3RpdHV0aW9uIGV4dGVuZHMgU3Vic3RpdHV0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpIHtcbiAgICBzdXBlcihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMudGFyZ2V0RnJhbWUgPSB0YXJnZXRGcmFtZTtcbiAgICB0aGlzLnJlcGxhY2VtZW50RnJhbWUgPSByZXBsYWNlbWVudEZyYW1lO1xuICB9XG5cbiAgZ2V0VGFyZ2V0RnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0RnJhbWU7XG4gIH1cblxuICBnZXRSZXBsYWNlbWVudEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJlcGxhY2VtZW50RnJhbWU7XG4gIH1cblxuICBnZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uTm9kZTtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZU5vZGUoKSB7IHJldHVybiB0aGlzLnRhcmdldEZyYW1lLmdldE1ldGF2YXJpYWJsZU5vZGUoKTsgfVxuXG4gIGdldFRhcmdldE5vZGUoKSB7XG4gICAgY29uc3QgdGFyZ2V0RnJhbWVOb2RlID0gdGhpcy50YXJnZXRGcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgdGVyZ2V0Tm9kZSA9IHRhcmdldEZyYW1lTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gdGVyZ2V0Tm9kZTtcbiAgfVxuXG4gIGdldFJlcGxhY2VtZW50Tm9kZSgpIHtcbiAgICBjb25zdCByZXBsYWNlbWVudEZyYW1lTm9kZSA9IHRoaXMucmVwbGFjZW1lbnRGcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgcmVwbGFjZW1lbnROb2RlID0gcmVwbGFjZW1lbnRGcmFtZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHJlcGxhY2VtZW50Tm9kZTtcbiAgfVxuXG4gIGlzVHJpdmlhbCgpIHtcbiAgICBjb25zdCB0YXJnZXRGcmFtZUVxdWFsVG9SZXBsYWNlbWVudEZyYW1lID0gdGhpcy50YXJnZXRGcmFtZS5pc0VxdWFsVG8odGhpcy5yZXBsYWNlbWVudEZyYW1lKSxcbiAgICAgICAgICB0cml2aWFsID0gdGFyZ2V0RnJhbWVFcXVhbFRvUmVwbGFjZW1lbnRGcmFtZTsgLy8vXG5cbiAgICByZXR1cm4gdHJpdmlhbDtcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7IHJldHVybiB0aGlzLnRhcmdldEZyYW1lLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgY29uc3QgdGFyZ2V0RnJhbWVDb21wYXJlc1RvUGFyYW1ldGVyID0gdGhpcy50YXJnZXRGcmFtZS5jb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlciksXG4gICAgICAgICAgY29tcGFyZXNUb1BhcmFtZXRlciA9IHRhcmdldEZyYW1lQ29tcGFyZXNUb1BhcmFtZXRlcjsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbWV0ZXI7XG4gIH1cblxuICBjb21wYXJlRnJhbWUoZnJhbWUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBmcmFtZUVxdWFsVG9SZXBsYWNlbWVudEZyYW1lID0gdGhpcy5yZXBsYWNlbWVudEZyYW1lLmlzRXF1YWxUbyhmcmFtZSksXG4gICAgICAgICAgY29tcGFyZWRUb0ZyYW1lID0gZnJhbWVFcXVhbFRvUmVwbGFjZW1lbnRGcmFtZTsgLy8vXG5cbiAgICByZXR1cm4gY29tcGFyZWRUb0ZyYW1lO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN1YnN0aXR1dGlvblN0cmluZ30nIGZyYW1lIHN1YnN0aXR1dGlvbi4uLmApO1xuXG4gICAgY29uc3QgdmFsaWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRWYWxpZFN1YnN0aXR1dGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb24gPSB2YWxpZFN1YnN0aXR1dGlvbjsgIC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7ZnJhbWVTdWJzdGl0dXRpb25TdHJpbmd9JyBmcmFtZSBzdWJzdGl0dXRpb24gaXMgYWxyZWFkeSB2YWxpZC5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihmcmFtZVN1YnN0aXR1dGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldEdlbmVyYWxDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gdGhpcy5nZXRTcGVjaWZpY0NvbnRleHQoKTtcblxuICAgIGF0dGVtcHRzKChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVRhcmdldEZyYW1lID0gdGhpcy52YWxpZGF0ZVRhcmdldEZyYW1lLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVJlcGxhY2VtZW50RnJhbWUgPSB0aGlzLnZhbGlkYXRlUmVwbGFjZW1lbnRGcmFtZS5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVUYXJnZXRGcmFtZSxcbiAgICAgICAgdmFsaWRhdGVSZXBsYWNlbWVudEZyYW1lXG4gICAgICBdLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHRoaXM7ICAvLy9cblxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uOyAvLy9cblxuICAgICAgICAgIGNvbnRleHQuYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgdGhpcy5jb21taXQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN1YnN0aXR1dGlvblN0cmluZ30nIGZyYW1lIHN1YnN0aXR1dGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZnJhbWVTdWJzdGl0dXRpb24pO1xuICAgICAgfSk7XG4gICAgfSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICB2YWxpZGF0ZVRhcmdldEZyYW1lKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZnJhbWVTdWJzdGl0dXRpb25TdHJpbmd9JyBmcmFtZSBzdWJzdGl0dXRpb24ncyB0YXJnZXQgZnJhbWUuLi5gKTtcblxuICAgIGNvbnN0IHRhcmdldEZyYW1lU2luZ3VsYXIgPSB0aGlzLnRhcmdldEZyYW1lLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghdGFyZ2V0RnJhbWVTaW5ndWxhcikge1xuICAgICAgY29uc3QgdGFyZ2V0RnJhbWVTdHJpbmcgPSB0aGlzLnRhcmdldEZyYW1lLmdldFN0cmluZygpLFxuICAgICAgICAgICAgdGFyZ2V0RnJhbWVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3RhcmdldEZyYW1lU3RyaW5nfScgdGFyZ2V0IGZyYW1lIGlzIG5vdCBzaW5ndWxhci5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0YXJnZXRGcmFtZVZhbGlkYXRlcyk7XG4gICAgfVxuXG4gICAgZWxpZGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnRhcmdldEZyYW1lLnZhbGlkYXRlKGNvbnRleHQsICh0YXJnZXRGcmFtZSkgPT4ge1xuICAgICAgICBsZXQgdGFyZ2V0RnJhbWVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGFyZ2V0RnJhbWUgIT09IG51bGwpIHtcbiAgICAgICAgICB0YXJnZXRGcmFtZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0RnJhbWVWYWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nfScgZnJhbWUgc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IGZyYW1lLi4uYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHRhcmdldEZyYW1lVmFsaWRhdGVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdmFsaWRhdGVSZXBsYWNlbWVudEZyYW1lKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nfScgZnJhbWUgc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgZnJhbWUuLi5gKTtcblxuICAgIGVsaWRlKChjb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBsYWNlbWVudEZyYW1lLnZhbGlkYXRlKGNvbnRleHQsIChyZXBsYWNlbWVudEZyYW1lKSA9PiB7XG4gICAgICAgIGxldCByZXBsYWNlbWVudEZyYW1lVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHJlcGxhY2VtZW50RnJhbWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXBsYWNlbWVudEZyYW1lVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXBsYWNlbWVudEZyYW1lVmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN1YnN0aXR1dGlvblN0cmluZ30nIGZyYW1lIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IGZyYW1lLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihyZXBsYWNlbWVudEZyYW1lVmFsaWRhdGVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBnZW5lcmFsU3Vic3RpdHV0aW9uID0gdGhpcywgLy8vXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24sXG4gICAgICAgICAgZ2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZyA9IGdlbmVyYWxTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmcgPSBzcGVjaWZpY1N1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB3aXRoIHRoZSAnJHtnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uLi4uYCk7XG5cbiAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHVuaWZ5VGFyZ2V0RnJhbWUgPSB0aGlzLnVuaWZ5VGFyZ2V0RnJhbWUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHVuaWZ5UmVwbGFjZW1lbnRGcmFtZSA9IHRoaXMudW5pZnlSZXBsYWNlbWVudEZyYW1lLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICB1bmlmeVJlcGxhY2VtZW50RnJhbWUsXG4gICAgICAgIHVuaWZ5VGFyZ2V0RnJhbWVcbiAgICAgIF0sIHN1YnN0aXR1dGlvbiwgY29udGV4dCwgKHN1YnN0aXR1dGlvblVuaWZpZXMpID0+IHtcbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvblVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmNvbW1pdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvblVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB3aXRoIHRoZSAnJHtnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJzdGl0dXRpb25VbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlUYXJnZXRGcmFtZShzdWJzdGl0dXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGdlbmVyYWxTdWJzdGl0dXRpb24gPSB0aGlzLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbixcbiAgICAgICAgICBnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZyA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IGZyYW1lIHdpdGggdGhlICcke2dlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24ncyB0YXJnZXQgZnJhbWUuLi5gKTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdWJzdGl0dXRpb25HZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxTdWJzdGl0dXRpb24uZ2V0R2VuZXJhbENvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvbkdlbmVyYWxDb250ZXh0ID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0R2VuZXJhbENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmFsU3Vic3RpdHV0aW9uVGFyZ2V0RnJhbWUgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFRhcmdldEZyYW1lKCksXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25UYXJnZXRGcmFtZSA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFRhcmdldEZyYW1lKCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBnZW5lcmFsU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzcGVjaWZpY1N1YnN0aXR1dGlvbkdlbmVyYWxDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbEZyYW1lID0gZ2VuZXJhbFN1YnN0aXR1dGlvblRhcmdldEZyYW1lLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY0ZyYW1lID0gc3BlY2lmaWNTdWJzdGl0dXRpb25UYXJnZXRGcmFtZTsgLy8vXG5cbiAgICByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgZnJhbWVOb2RlID0gZ2VuZXJhbEZyYW1lLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGdlbmVyYWxDb250ZXh0KTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0YXJnZXRGcmFtZVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHRhcmdldEZyYW1lVW5pZmllcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyYW1lID0gc3BlY2lmaWNGcmFtZTsgIC8vL1xuXG4gICAgICByZXR1cm4gbWV0YXZhcmlhYmxlLnVuaWZ5RnJhbWUoZnJhbWUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChmcmFtZVVuaWZpZXMpID0+IHtcbiAgICAgICAgbGV0IHRhcmdldEZyYW1lVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChmcmFtZVVuaWZpZXMpIHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgdGFyZ2V0RnJhbWVVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXRGcmFtZVVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LnRyYWNlKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHRhcmdldCBmcmFtZSB3aXRoIHRoZSAnJHtnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IGZyYW1lLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0YXJnZXRGcmFtZVVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5UmVwbGFjZW1lbnRGcmFtZShzdWJzdGl0dXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGdlbmVyYWxTdWJzdGl0dXRpb24gPSB0aGlzLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbixcbiAgICAgICAgICBnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZyA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgZnJhbWUgd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IGZyYW1lLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0ID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRTcGVjaWZpY0NvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFNwZWNpZmljQ29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25SZXBsYWNlbWVudEZyYW1lID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRSZXBsYWNlbWVudEZyYW1lKCksXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25SZXBsYWNlbWVudEZyYW1lID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0UmVwbGFjZW1lbnRGcmFtZSgpLFxuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gZ2VuZXJhbFN1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IHNwZWNpZmljU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbEZyYW1lID0gZ2VuZXJhbFN1YnN0aXR1dGlvblJlcGxhY2VtZW50RnJhbWUsIC8vL1xuICAgICAgICAgIHNwZWNpZmljRnJhbWUgPSBzcGVjaWZpY1N1YnN0aXR1dGlvblJlcGxhY2VtZW50RnJhbWU7IC8vL1xuXG4gICAgcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lTm9kZSA9IGdlbmVyYWxGcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgZ2VuZXJhbENvbnRleHQpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50RnJhbWVVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihyZXBsYWNlbWVudEZyYW1lVW5pZmllcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyYW1lID0gc3BlY2lmaWNGcmFtZTsgIC8vL1xuXG4gICAgICByZXR1cm4gbWV0YXZhcmlhYmxlLnVuaWZ5RnJhbWUoZnJhbWUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChmcmFtZVVuaWZpZXMpID0+IHtcbiAgICAgICAgbGV0IHJlcGxhY2VtZW50RnJhbWVVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGZyYW1lVW5pZmllcykge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICByZXBsYWNlbWVudEZyYW1lVW5pZmllcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVwbGFjZW1lbnRGcmFtZVVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LnRyYWNlKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IGZyYW1lIHdpdGggdGhlICcke2dlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24ncyByZXBsYWNlbWVudCBmcmFtZS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24ocmVwbGFjZW1lbnRGcmFtZVVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJGcmFtZVN1YnN0aXR1dGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGZyYW1lU3Vic3RpdHV0aW9ubiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICB1bnNlcmlhbGlzZXMoKGpzb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbk5vZGUgPSBpbnN0YW50aWF0ZUZyYW1lU3Vic3RpdHV0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgICAgbm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgICB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb25uID0gbmV3IEZyYW1lU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldEZyYW1lLCByZXBsYWNlbWVudEZyYW1lKTtcbiAgICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb25uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgICBsZXQgZnJhbWVTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICAgIGlmIChmcmFtZVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIGFibGF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBkZXNjZW5kKChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICB9LCBjb250ZXh0KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBmcmFtZVN1YnN0aXR1dGlvblxuXG4gICAgYWJsYXRlcygoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgaW5zdGFudGlhdGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBtYW5pZmVzdCgoZ2VuZXJhbENvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvblN0cmluZyA9IGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlKGZyYW1lLCBtZXRhdmFyaWFibGUpLFxuICAgICAgICAgICAgICAgIHN0cmluZyA9IGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nLCAgLy8vXG4gICAgICAgICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uTm9kZSA9IGluc3RhbnRpYXRlRnJhbWVTdWJzdGl0dXRpb24oc3RyaW5nLCBjb250ZXh0KTtcblxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZnJhbWVOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IGdlbmVyYWxDb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBjb25zdCB0YXJnZXRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIHRhcmdldEZyYW1lID0gZ2VuZXJhbENvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUodGFyZ2V0RnJhbWVOb2RlKTtcblxuICByZXR1cm4gdGFyZ2V0RnJhbWU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50RnJhbWVOb2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50RnJhbWVOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50RnJhbWUgPSBzcGVjaWZpY0NvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUocmVwbGFjZW1lbnRGcmFtZU5vZGUpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudEZyYW1lO1xufVxuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJGcmFtZVN1YnN0aXR1dGlvbiIsIlN1YnN0aXR1dGlvbiIsImNvbnRleHRzIiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0YXJnZXRGcmFtZSIsInJlcGxhY2VtZW50RnJhbWUiLCJnZXRUYXJnZXRGcmFtZSIsImdldFJlcGxhY2VtZW50RnJhbWUiLCJnZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJnZXROb2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImdldFRhcmdldE5vZGUiLCJ0YXJnZXRGcmFtZU5vZGUiLCJ0ZXJnZXROb2RlIiwiZ2V0UmVwbGFjZW1lbnROb2RlIiwicmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJyZXBsYWNlbWVudE5vZGUiLCJpc1RyaXZpYWwiLCJ0YXJnZXRGcmFtZUVxdWFsVG9SZXBsYWNlbWVudEZyYW1lIiwiaXNFcXVhbFRvIiwidHJpdmlhbCIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJjb21wYXJlUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwidGFyZ2V0RnJhbWVDb21wYXJlc1RvUGFyYW1ldGVyIiwiY29tcGFyZXNUb1BhcmFtZXRlciIsImNvbXBhcmVGcmFtZSIsImZyYW1lIiwiY29udGV4dCIsImZyYW1lRXF1YWxUb1JlcGxhY2VtZW50RnJhbWUiLCJjb21wYXJlZFRvRnJhbWUiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZFN1YnN0aXR1dGlvbiIsImZpbmRWYWxpZFN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uIiwiZGVidWciLCJnZW5lcmFsQ29udGV4dCIsImdldEdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiZ2V0U3BlY2lmaWNDb250ZXh0IiwiYXR0ZW1wdHMiLCJ2YWxpZGF0ZVRhcmdldEZyYW1lIiwiYmluZCIsInZhbGlkYXRlUmVwbGFjZW1lbnRGcmFtZSIsImFsbCIsInZhbGlkYXRlcyIsInN1YnN0aXR1dGlvbiIsImFkZFN1YnN0aXR1dGlvbiIsImNvbW1pdCIsInRhcmdldEZyYW1lU2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwidGFyZ2V0RnJhbWVTdHJpbmciLCJ0YXJnZXRGcmFtZVZhbGlkYXRlcyIsImVsaWRlIiwicmVwbGFjZW1lbnRGcmFtZVZhbGlkYXRlcyIsInVuaWZ5U3Vic3RpdHV0aW9uIiwiZ2VuZXJhbFN1YnN0aXR1dGlvbiIsInNwZWNpZmljU3Vic3RpdHV0aW9uIiwiZ2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZyIsInNwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nIiwicmVjb25jaWxlIiwidW5pZnlUYXJnZXRGcmFtZSIsInVuaWZ5UmVwbGFjZW1lbnRGcmFtZSIsInN1YnN0aXR1dGlvblVuaWZpZXMiLCJnZW5lcmFsU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY1N1YnN0aXR1dGlvbkdlbmVyYWxDb250ZXh0IiwiZ2VuZXJhbFN1YnN0aXR1dGlvblRhcmdldEZyYW1lIiwic3BlY2lmaWNTdWJzdGl0dXRpb25UYXJnZXRGcmFtZSIsImdlbmVyYWxGcmFtZSIsInNwZWNpZmljRnJhbWUiLCJmcmFtZU5vZGUiLCJnZXRGcmFtZU5vZGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlIiwidGFyZ2V0RnJhbWVVbmlmaWVzIiwidW5pZnlGcmFtZSIsImZyYW1lVW5pZmllcyIsImdlbmVyYWxTdWJzdGl0dXRpb25TcGVjaWZpY0NvbnRleHQiLCJzcGVjaWZpY1N1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCIsImdlbmVyYWxTdWJzdGl0dXRpb25SZXBsYWNlbWVudEZyYW1lIiwic3BlY2lmaWNTdWJzdGl0dXRpb25SZXBsYWNlbWVudEZyYW1lIiwicmVwbGFjZW1lbnRGcmFtZVVuaWZpZXMiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIiwiZnJhbWVTdWJzdGl0dXRpb25uIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZXMiLCJpbnN0YW50aWF0ZUZyYW1lU3Vic3RpdHV0aW9uIiwidGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJhYmxhdGUiLCJkZXNjZW5kIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwiYWJsYXRlcyIsIm1hbmlmZXN0IiwiZnJhbWVTdWJzdGl0dXRpb25TdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJnZXRSZXBsYWNlbWVudEZyYW1lTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZUE7OztlQUFBOzs7Z0NBYm9DO3FFQUVYOzhCQUVMOzBCQUNHOzZCQUNzQjt5QkFDYzt3QkFDSzt5QkFDMEM7Ozs7OztBQUUxRyxNQUFNLEVBQUVBLGtCQUFrQixFQUFFLEdBQUdDLG1DQUFtQjtNQUVsRCxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLDBCQUEwQkMscUJBQVk7SUFDaEUsWUFBWUMsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxXQUFXLEVBQUVDLGdCQUFnQixDQUFFO1FBQzdFLEtBQUssQ0FBQ0wsVUFBVUMsUUFBUUMsTUFBTUM7UUFFOUIsSUFBSSxDQUFDQyxXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUdBO0lBQzFCO0lBRUFDLGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDRixXQUFXO0lBQ3pCO0lBRUFHLHNCQUFzQjtRQUNwQixPQUFPLElBQUksQ0FBQ0YsZ0JBQWdCO0lBQzlCO0lBRUFHLDJCQUEyQjtRQUN6QixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMsd0JBQXdCUixNQUFNLEdBQUc7UUFFdkMsT0FBT1E7SUFDVDtJQUVBQyxzQkFBc0I7UUFBRSxPQUFPLElBQUksQ0FBQ1AsV0FBVyxDQUFDTyxtQkFBbUI7SUFBSTtJQUV2RUMsZ0JBQWdCO1FBQ2QsTUFBTUMsa0JBQWtCLElBQUksQ0FBQ1QsV0FBVyxDQUFDSyxPQUFPLElBQzFDSyxhQUFhRCxpQkFBaUIsR0FBRztRQUV2QyxPQUFPQztJQUNUO0lBRUFDLHFCQUFxQjtRQUNuQixNQUFNQyx1QkFBdUIsSUFBSSxDQUFDWCxnQkFBZ0IsQ0FBQ0ksT0FBTyxJQUNwRFEsa0JBQWtCRCxzQkFBc0IsR0FBRztRQUVqRCxPQUFPQztJQUNUO0lBRUFDLFlBQVk7UUFDVixNQUFNQyxxQ0FBcUMsSUFBSSxDQUFDZixXQUFXLENBQUNnQixTQUFTLENBQUMsSUFBSSxDQUFDZixnQkFBZ0IsR0FDckZnQixVQUFVRixvQ0FBb0MsR0FBRztRQUV2RCxPQUFPRTtJQUNUO0lBRUFDLHNCQUFzQkMsZ0JBQWdCLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQ25CLFdBQVcsQ0FBQ2tCLHFCQUFxQixDQUFDQztJQUFtQjtJQUUzR0MsaUJBQWlCQyxTQUFTLEVBQUU7UUFDMUIsTUFBTUMsaUNBQWlDLElBQUksQ0FBQ3RCLFdBQVcsQ0FBQ29CLGdCQUFnQixDQUFDQyxZQUNuRUUsc0JBQXNCRCxnQ0FBaUMsR0FBRztRQUVoRSxPQUFPQztJQUNUO0lBRUFDLGFBQWFDLEtBQUssRUFBRUMsT0FBTyxFQUFFO1FBQzNCLE1BQU1DLCtCQUErQixJQUFJLENBQUMxQixnQkFBZ0IsQ0FBQ2UsU0FBUyxDQUFDUyxRQUMvREcsa0JBQWtCRCw4QkFBOEIsR0FBRztRQUV6RCxPQUFPQztJQUNUO0lBRUFDLFNBQVNILE9BQU8sRUFBRUksWUFBWSxFQUFFO1FBQzlCLE1BQU1DLDBCQUEwQixJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXRETixRQUFRTyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYsd0JBQXdCLHVCQUF1QixDQUFDO1FBRWpGLE1BQU1HLG9CQUFvQixJQUFJLENBQUNDLHFCQUFxQixDQUFDVDtRQUVyRCxJQUFJUSxzQkFBc0IsTUFBTTtZQUM5QixNQUFNRSxvQkFBb0JGLG1CQUFvQixHQUFHO1lBRWpEUixRQUFRVyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUVOLHdCQUF3QixzQ0FBc0MsQ0FBQztZQUV4RixPQUFPRCxhQUFhTTtRQUN0QjtRQUVBLE1BQU1FLGlCQUFpQixJQUFJLENBQUNDLGlCQUFpQixJQUN2Q0Msa0JBQWtCLElBQUksQ0FBQ0Msa0JBQWtCO1FBRS9DQyxJQUFBQSxpQkFBUSxFQUFDLENBQUNKLGdCQUFnQkU7WUFDeEIsTUFBTUcsc0JBQXNCLElBQUksQ0FBQ0EsbUJBQW1CLENBQUNDLElBQUksQ0FBQyxJQUFJLEdBQ3hEQywyQkFBMkIsSUFBSSxDQUFDQSx3QkFBd0IsQ0FBQ0QsSUFBSSxDQUFDLElBQUk7WUFFeEUsT0FBT0UsSUFBQUEsaUJBQUcsRUFBQztnQkFDVEg7Z0JBQ0FFO2FBQ0QsRUFBRVAsZ0JBQWdCRSxpQkFBaUIsQ0FBQ087Z0JBQ25DLElBQUlYLG9CQUFvQjtnQkFFeEIsSUFBSVcsV0FBVztvQkFDYixNQUFNQyxlQUFlLElBQUksRUFBRyxHQUFHO29CQUUvQlosb0JBQW9CWSxjQUFjLEdBQUc7b0JBRXJDdEIsUUFBUXVCLGVBQWUsQ0FBQ0Q7Z0JBQzFCO2dCQUVBLElBQUlELFdBQVc7b0JBQ2IsSUFBSSxDQUFDRyxNQUFNLENBQUNaLGdCQUFnQkU7Z0JBQzlCO2dCQUVBLElBQUlPLFdBQVc7b0JBQ2JyQixRQUFRVyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRU4sd0JBQXdCLHFCQUFxQixDQUFDO2dCQUNuRjtnQkFFQSxPQUFPRCxhQUFhTTtZQUN0QjtRQUNGLEdBQUdFLGdCQUFnQkU7SUFDckI7SUFFQUcsb0JBQW9CTCxjQUFjLEVBQUVFLGVBQWUsRUFBRVYsWUFBWSxFQUFFO1FBQ2pFLE1BQU1KLFVBQVVZLGdCQUNWUCwwQkFBMEIsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUV0RE4sUUFBUU8sS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLHdCQUF3QixzQ0FBc0MsQ0FBQztRQUVoRyxNQUFNb0Isc0JBQXNCLElBQUksQ0FBQ25ELFdBQVcsQ0FBQ29ELFVBQVU7UUFFdkQsSUFBSSxDQUFDRCxxQkFBcUI7WUFDeEIsTUFBTUUsb0JBQW9CLElBQUksQ0FBQ3JELFdBQVcsQ0FBQ2dDLFNBQVMsSUFDOUNzQix1QkFBdUI7WUFFN0I1QixRQUFRVyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUVnQixrQkFBa0IsK0JBQStCLENBQUM7WUFFeEUsT0FBT3ZCLGFBQWF3QjtRQUN0QjtRQUVBQyxJQUFBQSxjQUFLLEVBQUMsQ0FBQzdCO1lBQ0wsT0FBTyxJQUFJLENBQUMxQixXQUFXLENBQUM2QixRQUFRLENBQUNILFNBQVMsQ0FBQzFCO2dCQUN6QyxJQUFJc0QsdUJBQXVCO2dCQUUzQixJQUFJdEQsZ0JBQWdCLE1BQU07b0JBQ3hCc0QsdUJBQXVCO2dCQUN6QjtnQkFFQSxJQUFJQSxzQkFBc0I7b0JBQ3hCNUIsUUFBUVcsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVOLHdCQUF3QixzQ0FBc0MsQ0FBQztnQkFDcEc7Z0JBRUEsT0FBT0QsYUFBYXdCO1lBQ3RCO1FBQ0YsR0FBRzVCO0lBQ0w7SUFFQW1CLHlCQUF5QlAsY0FBYyxFQUFFRSxlQUFlLEVBQUVWLFlBQVksRUFBRTtRQUN0RSxNQUFNSixVQUFVYyxpQkFDVlQsMEJBQTBCLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFdEROLFFBQVFPLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRix3QkFBd0IsMkNBQTJDLENBQUM7UUFFckd3QixJQUFBQSxjQUFLLEVBQUMsQ0FBQzdCO1lBQ0wsT0FBTyxJQUFJLENBQUN6QixnQkFBZ0IsQ0FBQzRCLFFBQVEsQ0FBQ0gsU0FBUyxDQUFDekI7Z0JBQzlDLElBQUl1RCw0QkFBNEI7Z0JBRWhDLElBQUl2RCxxQkFBcUIsTUFBTTtvQkFDN0J1RCw0QkFBNEI7Z0JBQzlCO2dCQUVBLElBQUlBLDJCQUEyQjtvQkFDN0I5QixRQUFRVyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRU4sd0JBQXdCLHlDQUF5QyxDQUFDO2dCQUN2RztnQkFFQSxPQUFPRCxhQUFhMEI7WUFDdEI7UUFDRixHQUFHOUI7SUFDTDtJQUVBK0Isa0JBQWtCVCxZQUFZLEVBQUV0QixPQUFPLEVBQUVJLFlBQVksRUFBRTtRQUNyRCxNQUFNNEIsc0JBQXNCLElBQUksRUFDMUJDLHVCQUF1QlgsY0FDdkJZLDRCQUE0QkYsb0JBQW9CMUIsU0FBUyxJQUN6RDZCLDZCQUE2QkYscUJBQXFCM0IsU0FBUztRQUVqRU4sUUFBUU8sS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFNEIsMkJBQTJCLHlCQUF5QixFQUFFRCwwQkFBMEIsaUJBQWlCLENBQUM7UUFFaklFLElBQUFBLGtCQUFTLEVBQUMsQ0FBQ3BDO1lBQ1QsTUFBTXFDLG1CQUFtQixJQUFJLENBQUNBLGdCQUFnQixDQUFDbkIsSUFBSSxDQUFDLElBQUksR0FDbERvQix3QkFBd0IsSUFBSSxDQUFDQSxxQkFBcUIsQ0FBQ3BCLElBQUksQ0FBQyxJQUFJO1lBRWxFLE9BQU9FLElBQUFBLGlCQUFHLEVBQUM7Z0JBQ1RrQjtnQkFDQUQ7YUFDRCxFQUFFZixjQUFjdEIsU0FBUyxDQUFDdUM7Z0JBQ3pCLElBQUlBLHFCQUFxQjtvQkFDdkJ2QyxRQUFRd0IsTUFBTTtnQkFDaEI7Z0JBRUEsSUFBSWUscUJBQXFCO29CQUN2QnZDLFFBQVFXLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFd0IsMkJBQTJCLHlCQUF5QixFQUFFRCwwQkFBMEIsZUFBZSxDQUFDO2dCQUNuSTtnQkFFQSxPQUFPOUIsYUFBYW1DO1lBQ3RCO1FBQ0YsR0FBR3ZDO0lBQ0w7SUFFQXFDLGlCQUFpQmYsWUFBWSxFQUFFdEIsT0FBTyxFQUFFSSxZQUFZLEVBQUU7UUFDcEQsTUFBTTRCLHNCQUFzQixJQUFJLEVBQzFCQyx1QkFBdUJYLGNBQ3ZCWSw0QkFBNEJGLG9CQUFvQjFCLFNBQVMsSUFDekQ2Qiw2QkFBNkJGLHFCQUFxQjNCLFNBQVM7UUFFakVOLFFBQVFPLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRTRCLDJCQUEyQix3Q0FBd0MsRUFBRUQsMEJBQTBCLGdDQUFnQyxDQUFDO1FBRS9KLE1BQU1NLG9DQUFvQ1Isb0JBQW9CbkIsaUJBQWlCLElBQ3pFNEIscUNBQXFDUixxQkFBcUJwQixpQkFBaUIsSUFDM0U2QixpQ0FBaUNWLG9CQUFvQnhELGNBQWMsSUFDbkVtRSxrQ0FBa0NWLHFCQUFxQnpELGNBQWMsSUFDckVvQyxpQkFBaUI0QixtQ0FDakIxQixrQkFBa0IyQixvQ0FDbEJHLGVBQWVGLGdDQUNmRyxnQkFBZ0JGLGlDQUFpQyxHQUFHO1FBRTFEUCxJQUFBQSxrQkFBUyxFQUFDLENBQUN0QjtZQUNULE1BQU1nQyxZQUFZRixhQUFhRyxZQUFZLElBQ3JDQyxlQUFlQywwQkFBMEJILFdBQVdsQztZQUUxRCxJQUFJb0MsaUJBQWlCLE1BQU07Z0JBQ3pCLE1BQU1FLHFCQUFxQjtnQkFFM0IsT0FBTzlDLGFBQWE4QztZQUN0QjtZQUVBLE1BQU1uRCxRQUFROEMsZUFBZ0IsR0FBRztZQUVqQyxPQUFPRyxhQUFhRyxVQUFVLENBQUNwRCxPQUFPYSxnQkFBZ0JFLGlCQUFpQixDQUFDc0M7Z0JBQ3RFLElBQUlGLHFCQUFxQjtnQkFFekIsSUFBSUUsY0FBYztvQkFDaEJ0QyxnQkFBZ0JVLE1BQU0sQ0FBQ3hCO29CQUV2QmtELHFCQUFxQjtnQkFDdkI7Z0JBRUEsSUFBSUEsb0JBQW9CO29CQUN0QmxELFFBQVFPLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFNEIsMkJBQTJCLHdDQUF3QyxFQUFFRCwwQkFBMEIsOEJBQThCLENBQUM7Z0JBQ2pLO2dCQUVBLE9BQU85QixhQUFhOEM7WUFDdEI7UUFDRixHQUFHcEM7SUFDTDtJQUVBd0Isc0JBQXNCaEIsWUFBWSxFQUFFdEIsT0FBTyxFQUFFSSxZQUFZLEVBQUU7UUFDekQsTUFBTTRCLHNCQUFzQixJQUFJLEVBQzFCQyx1QkFBdUJYLGNBQ3ZCWSw0QkFBNEJGLG9CQUFvQjFCLFNBQVMsSUFDekQ2Qiw2QkFBNkJGLHFCQUFxQjNCLFNBQVM7UUFFakVOLFFBQVFPLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRTRCLDJCQUEyQiw2Q0FBNkMsRUFBRUQsMEJBQTBCLHFDQUFxQyxDQUFDO1FBRXpLLE1BQU1tQixxQ0FBcUNyQixvQkFBb0JqQixrQkFBa0IsSUFDM0V1QyxzQ0FBc0NyQixxQkFBcUJsQixrQkFBa0IsSUFDN0V3QyxzQ0FBc0N2QixvQkFBb0J2RCxtQkFBbUIsSUFDN0UrRSx1Q0FBdUN2QixxQkFBcUJ4RCxtQkFBbUIsSUFDL0VtQyxpQkFBaUJ5QyxvQ0FDakJ2QyxrQkFBa0J3QyxxQ0FDbEJWLGVBQWVXLHFDQUNmVixnQkFBZ0JXLHNDQUFzQyxHQUFHO1FBRS9EcEIsSUFBQUEsa0JBQVMsRUFBQyxDQUFDdEI7WUFDVCxNQUFNZ0MsWUFBWUYsYUFBYWpFLE9BQU8sSUFDaENxRSxlQUFlQywwQkFBMEJILFdBQVdsQztZQUUxRCxJQUFJb0MsaUJBQWlCLE1BQU07Z0JBQ3pCLE1BQU1TLDBCQUEwQjtnQkFFaEMsT0FBT3JELGFBQWFxRDtZQUN0QjtZQUVBLE1BQU0xRCxRQUFROEMsZUFBZ0IsR0FBRztZQUVqQyxPQUFPRyxhQUFhRyxVQUFVLENBQUNwRCxPQUFPYSxnQkFBZ0JFLGlCQUFpQixDQUFDc0M7Z0JBQ3RFLElBQUlLLDBCQUEwQjtnQkFFOUIsSUFBSUwsY0FBYztvQkFDaEJ0QyxnQkFBZ0JVLE1BQU0sQ0FBQ3hCO29CQUV2QnlELDBCQUEwQjtnQkFDNUI7Z0JBRUEsSUFBSUEseUJBQXlCO29CQUMzQnpELFFBQVFPLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFNEIsMkJBQTJCLDZDQUE2QyxFQUFFRCwwQkFBMEIsbUNBQW1DLENBQUM7Z0JBQzNLO2dCQUVBLE9BQU85QixhQUFhcUQ7WUFDdEI7UUFDRixHQUFHM0M7SUFDTDtJQUVBLE9BQU80QyxPQUFPLG9CQUFvQjtJQUVsQyxPQUFPQyxTQUFTQyxJQUFJLEVBQUU1RCxPQUFPLEVBQUU7UUFDN0IsSUFBSTZELHFCQUFxQjtRQUV6QixNQUFNLEVBQUVILElBQUksRUFBRSxHQUFHRTtRQUVqQixJQUFJLElBQUksQ0FBQ0YsSUFBSSxLQUFLQSxNQUFNO1lBQ3RCSSxJQUFBQSxvQkFBVyxFQUFDLENBQUM5RDtnQkFDWCtELElBQUFBLHFCQUFZLEVBQUMsQ0FBQ0gsTUFBTWhELGdCQUFnQkU7b0JBQ2xDLE1BQU0sRUFBRTNDLE1BQU0sRUFBRSxHQUFHeUYsTUFDYmhGLHdCQUF3Qm9GLElBQUFBLHlDQUE0QixFQUFDN0YsUUFBUTZCLFVBQzdENUIsT0FBT1EsdUJBQ1BWLFdBQVc7d0JBQ1QwQzt3QkFDQUU7cUJBQ0QsRUFDRHpDLGFBQWFSLG1CQUFtQitGLE9BQ2hDdEYsY0FBYzJGLHFDQUFxQ3JGLHVCQUF1QmdDLGlCQUMxRXJDLG1CQUFtQjJGLDBDQUEwQ3RGLHVCQUF1QmtDO29CQUUxRitDLHFCQUFxQixJQUFJN0Ysa0JBQWtCRSxVQUFVQyxRQUFRQyxNQUFNQyxZQUFZQyxhQUFhQztnQkFDOUYsR0FBR3FGLE1BQU01RDtZQUNYLEdBQUdBO1FBQ0w7UUFFQSxPQUFPNkQ7SUFDVDtJQUVBLE9BQU9NLGtCQUFrQkMsYUFBYSxFQUFFcEUsT0FBTyxFQUFFO1FBQy9DLElBQUlVLG9CQUFvQjtRQUV4QixNQUFNOUIsd0JBQXdCd0YsY0FBYzFGLHdCQUF3QjtRQUVwRSxJQUFJRSwwQkFBMEIsTUFBTTtZQUNsQ3lGLElBQUFBLGVBQU0sRUFBQyxDQUFDckU7Z0JBQ05zRSxJQUFBQSxnQkFBTyxFQUFDLENBQUN0RTtvQkFDUCxNQUFNWSxpQkFBaUJaLFNBQ2pCYyxrQkFBa0JkLFNBQVUsR0FBRztvQkFFckNVLG9CQUFvQjZELElBQUFBLG1EQUEwQyxFQUFDM0YsdUJBQXVCZ0MsZ0JBQWdCRTtnQkFDeEcsR0FBR2Q7WUFDTCxHQUFHQTtRQUNMO1FBRUEsT0FBT1U7SUFDVDtJQUVBLE9BQU84RCx5QkFBeUJ6RSxLQUFLLEVBQUVpRCxZQUFZLEVBQUVwQyxjQUFjLEVBQUVFLGVBQWUsRUFBRTtRQUNwRixJQUFJSjtRQUVKK0QsSUFBQUEsZ0JBQU8sRUFBQyxDQUFDN0QsZ0JBQWdCRTtZQUN2QmdELElBQUFBLG9CQUFXLEVBQUMsQ0FBQ2hEO2dCQUNYNEQsSUFBQUEsaUJBQVEsRUFBQyxDQUFDOUQ7b0JBQ1IsTUFBTVAsMEJBQTBCc0UsSUFBQUEsdURBQStDLEVBQUM1RSxPQUFPaUQsZUFDakY3RSxTQUFTa0MseUJBQ1RMLFVBQVVjLGlCQUNWbEMsd0JBQXdCb0YsSUFBQUEseUNBQTRCLEVBQUM3RixRQUFRNkI7b0JBRW5FVSxvQkFBb0I2RCxJQUFBQSxtREFBMEMsRUFBQzNGLHVCQUF1QmdDLGdCQUFnQkU7Z0JBQ3hHLEdBQUdGLGdCQUFnQkU7WUFDckIsR0FBR0E7UUFDTCxHQUFHRixnQkFBZ0JFO1FBRW5CLE9BQU9KO0lBQ1Q7QUFDRjtBQUVBLFNBQVN1QywwQkFBMEJILFNBQVMsRUFBRWxDLGNBQWM7SUFDMUQsSUFBSW9DLGVBQWU7SUFFbkIsTUFBTXZELG1CQUFtQnFELFVBQVVqRSxtQkFBbUI7SUFFdEQsSUFBSVkscUJBQXFCLE1BQU07UUFDN0J1RCxlQUFlcEMsZUFBZWdFLGtDQUFrQyxDQUFDbkY7SUFDbkU7SUFFQSxPQUFPdUQ7QUFDVDtBQUVBLFNBQVNpQixxQ0FBcUNyRixxQkFBcUIsRUFBRWdDLGNBQWM7SUFDakYsTUFBTTdCLGtCQUFrQkgsc0JBQXNCaUcsa0JBQWtCLElBQzFEdkcsY0FBY3NDLGVBQWVrRSxvQkFBb0IsQ0FBQy9GO0lBRXhELE9BQU9UO0FBQ1Q7QUFFQSxTQUFTNEYsMENBQTBDdEYscUJBQXFCLEVBQUVrQyxlQUFlO0lBQ3ZGLE1BQU01Qix1QkFBdUJOLHNCQUFzQm1HLHVCQUF1QixJQUNwRXhHLG1CQUFtQnVDLGdCQUFnQmdFLG9CQUFvQixDQUFDNUY7SUFFOUQsT0FBT1g7QUFDVCJ9
271
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3N1YnN0aXR1dGlvbi9mcmFtZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IFN1YnN0aXR1dGlvbiBmcm9tIFwiLi4vc3Vic3RpdHV0aW9uXCI7XG5cbmltcG9ydCB7IGFsbCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRnJhbWVTdWJzdGl0dXRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBwYXNzLCB3YWl2ZSwgZWxpZGUsIGFibGF0ZSwgYWJsYXRlcywgZGVzY2VuZCwgbWFuaWZlc3QsIGF0dGVtcHRzLCByZWNvbmNpbGUsIGluc3RhbnRpYXRlLCB1bnNlcmlhbGlzZXMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha1BvaW50RnJvbUpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBGcmFtZVN1YnN0aXR1dGlvbiBleHRlbmRzIFN1YnN0aXR1dGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldEZyYW1lLCByZXBsYWNlbWVudEZyYW1lKSB7XG4gICAgc3VwZXIoY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRhcmdldEZyYW1lID0gdGFyZ2V0RnJhbWU7XG4gICAgdGhpcy5yZXBsYWNlbWVudEZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZTtcbiAgfVxuXG4gIGdldFRhcmdldEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnRhcmdldEZyYW1lO1xuICB9XG5cbiAgZ2V0UmVwbGFjZW1lbnRGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlbWVudEZyYW1lO1xuICB9XG5cbiAgZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbk5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbk5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkgeyByZXR1cm4gdGhpcy50YXJnZXRGcmFtZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7IH1cblxuICBnZXRUYXJnZXROb2RlKCkge1xuICAgIGNvbnN0IHRhcmdldEZyYW1lTm9kZSA9IHRoaXMudGFyZ2V0RnJhbWUuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcmdldE5vZGUgPSB0YXJnZXRGcmFtZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHRlcmdldE5vZGU7XG4gIH1cblxuICBnZXRSZXBsYWNlbWVudE5vZGUoKSB7XG4gICAgY29uc3QgcmVwbGFjZW1lbnRGcmFtZU5vZGUgPSB0aGlzLnJlcGxhY2VtZW50RnJhbWUuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9IHJlcGxhY2VtZW50RnJhbWVOb2RlOyAvLy9cblxuICAgIHJldHVybiByZXBsYWNlbWVudE5vZGU7XG4gIH1cblxuICBpc1RyaXZpYWwoKSB7XG4gICAgY29uc3QgdGFyZ2V0RnJhbWVFcXVhbFRvUmVwbGFjZW1lbnRGcmFtZSA9IHRoaXMudGFyZ2V0RnJhbWUuaXNFcXVhbFRvKHRoaXMucmVwbGFjZW1lbnRGcmFtZSksXG4gICAgICAgICAgdHJpdmlhbCA9IHRhcmdldEZyYW1lRXF1YWxUb1JlcGxhY2VtZW50RnJhbWU7IC8vL1xuXG4gICAgcmV0dXJuIHRyaXZpYWw7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkgeyByZXR1cm4gdGhpcy50YXJnZXRGcmFtZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7IH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGNvbnN0IHRhcmdldEZyYW1lQ29tcGFyZXNUb1BhcmFtZXRlciA9IHRoaXMudGFyZ2V0RnJhbWUuY29tcGFyZVBhcmFtZXRlcihwYXJhbWV0ZXIpLFxuICAgICAgICAgIGNvbXBhcmVzVG9QYXJhbWV0ZXIgPSB0YXJnZXRGcmFtZUNvbXBhcmVzVG9QYXJhbWV0ZXI7ICAvLy9cblxuICAgIHJldHVybiBjb21wYXJlc1RvUGFyYW1ldGVyO1xuICB9XG5cbiAgY29tcGFyZUZyYW1lKGZyYW1lLCBjb250ZXh0KSB7XG4gICAgY29uc3QgZnJhbWVFcXVhbFRvUmVwbGFjZW1lbnRGcmFtZSA9IHRoaXMucmVwbGFjZW1lbnRGcmFtZS5pc0VxdWFsVG8oZnJhbWUpLFxuICAgICAgICAgIGNvbXBhcmVkVG9GcmFtZSA9IGZyYW1lRXF1YWxUb1JlcGxhY2VtZW50RnJhbWU7IC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVkVG9GcmFtZTtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0cmljdCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgaWYgKGNvbnRpbnVhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250aW51YXRpb24gPSBjb250ZXh0OyAvLy9cblxuICAgICAgY29udGV4dCA9IHN0cmljdDsgLy8vXG5cbiAgICAgIHN0cmljdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZnJhbWVTdWJzdGl0dXRpb25TdHJpbmd9JyBmcmFtZSBzdWJzdGl0dXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kVmFsaWRTdWJzdGl0dXRpb24oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uID0gdmFsaWRTdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2ZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nfScgZnJhbWUgc3Vic3RpdHV0aW9uIGlzIGFscmVhZHkgdmFsaWQuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZnJhbWVTdWJzdGl0dXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gdGhpcy5nZXRHZW5lcmFsQ29udGV4dCgpLFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IHRoaXMuZ2V0U3BlY2lmaWNDb250ZXh0KCk7XG5cbiAgICAoc3RyaWN0ID8gcGFzcyA6IHdhaXZlKSgoY29udGV4dCkgPT4ge1xuICAgICAgYXR0ZW1wdHMoKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVUYXJnZXRGcmFtZSA9IHRoaXMudmFsaWRhdGVUYXJnZXRGcmFtZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2YWxpZGF0ZVJlcGxhY2VtZW50RnJhbWUgPSB0aGlzLnZhbGlkYXRlUmVwbGFjZW1lbnRGcmFtZS5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICAgIHZhbGlkYXRlVGFyZ2V0RnJhbWUsXG4gICAgICAgICAgdmFsaWRhdGVSZXBsYWNlbWVudEZyYW1lXG4gICAgICAgIF0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgICAgICBsZXQgZnJhbWVTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbjsgLy8vXG5cbiAgICAgICAgICAgIGNvbnRleHQuYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgICAgdGhpcy5jb21taXQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN1YnN0aXR1dGlvblN0cmluZ30nIGZyYW1lIHN1YnN0aXR1dGlvbi5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lU3Vic3RpdHV0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHZhbGlkYXRlVGFyZ2V0RnJhbWUoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN1YnN0aXR1dGlvblN0cmluZ30nIGZyYW1lIHN1YnN0aXR1dGlvbidzIHRhcmdldCBmcmFtZS4uLmApO1xuXG4gICAgY29uc3QgdGFyZ2V0RnJhbWVTaW5ndWxhciA9IHRoaXMudGFyZ2V0RnJhbWUuaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKCF0YXJnZXRGcmFtZVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB0YXJnZXRGcmFtZVN0cmluZyA9IHRoaXMudGFyZ2V0RnJhbWUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICB0YXJnZXRGcmFtZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dGFyZ2V0RnJhbWVTdHJpbmd9JyB0YXJnZXQgZnJhbWUgaXMgbm90IHNpbmd1bGFyLmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRhcmdldEZyYW1lVmFsaWRhdGVzKTtcbiAgICB9XG5cbiAgICBlbGlkZSgoY29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0RnJhbWUudmFsaWRhdGUoY29udGV4dCwgKHRhcmdldEZyYW1lKSA9PiB7XG4gICAgICAgIGxldCB0YXJnZXRGcmFtZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0YXJnZXRGcmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRhcmdldEZyYW1lVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXRGcmFtZVZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZnJhbWVTdWJzdGl0dXRpb25TdHJpbmd9JyBmcmFtZSBzdWJzdGl0dXRpb24ncyB0YXJnZXQgZnJhbWUuLi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odGFyZ2V0RnJhbWVWYWxpZGF0ZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB2YWxpZGF0ZVJlcGxhY2VtZW50RnJhbWUoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZnJhbWVTdWJzdGl0dXRpb25TdHJpbmd9JyBmcmFtZSBzdWJzdGl0dXRpb24ncyByZXBsYWNlbWVudCBmcmFtZS4uLmApO1xuXG4gICAgZWxpZGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VtZW50RnJhbWUudmFsaWRhdGUoY29udGV4dCwgKHJlcGxhY2VtZW50RnJhbWUpID0+IHtcbiAgICAgICAgbGV0IHJlcGxhY2VtZW50RnJhbWVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAocmVwbGFjZW1lbnRGcmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJlcGxhY2VtZW50RnJhbWVWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcGxhY2VtZW50RnJhbWVWYWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nfScgZnJhbWUgc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgZnJhbWUuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHJlcGxhY2VtZW50RnJhbWVWYWxpZGF0ZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGdlbmVyYWxTdWJzdGl0dXRpb24gPSB0aGlzLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbixcbiAgICAgICAgICBnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZyA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIHdpdGggdGhlICcke2dlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24uLi5gKTtcblxuICAgIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdW5pZnlUYXJnZXRGcmFtZSA9IHRoaXMudW5pZnlUYXJnZXRGcmFtZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdW5pZnlSZXBsYWNlbWVudEZyYW1lID0gdGhpcy51bmlmeVJlcGxhY2VtZW50RnJhbWUuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgIHVuaWZ5UmVwbGFjZW1lbnRGcmFtZSxcbiAgICAgICAgdW5pZnlUYXJnZXRGcmFtZVxuICAgICAgXSwgc3Vic3RpdHV0aW9uLCBjb250ZXh0LCAoc3Vic3RpdHV0aW9uVW5pZmllcykgPT4ge1xuICAgICAgICBpZiAoc3Vic3RpdHV0aW9uVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3Vic3RpdHV0aW9uVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIHdpdGggdGhlICcke2dlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24uYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1YnN0aXR1dGlvblVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVRhcmdldEZyYW1lKHN1YnN0aXR1dGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZ2VuZXJhbFN1YnN0aXR1dGlvbiA9IHRoaXMsIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmcgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24ncyB0YXJnZXQgZnJhbWUgd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHRhcmdldCBmcmFtZS4uLmApO1xuXG4gICAgY29uc3QgZ2VuZXJhbFN1YnN0aXR1dGlvbkdlbmVyYWxDb250ZXh0ID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRHZW5lcmFsQ29udGV4dCgpLFxuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQgPSBzcGVjaWZpY1N1YnN0aXR1dGlvbi5nZXRHZW5lcmFsQ29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25UYXJnZXRGcmFtZSA9IGdlbmVyYWxTdWJzdGl0dXRpb24uZ2V0VGFyZ2V0RnJhbWUoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblRhcmdldEZyYW1lID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0VGFyZ2V0RnJhbWUoKSxcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxTdWJzdGl0dXRpb25HZW5lcmFsQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IHNwZWNpZmljU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsRnJhbWUgPSBnZW5lcmFsU3Vic3RpdHV0aW9uVGFyZ2V0RnJhbWUsIC8vL1xuICAgICAgICAgIHNwZWNpZmljRnJhbWUgPSBzcGVjaWZpY1N1YnN0aXR1dGlvblRhcmdldEZyYW1lOyAvLy9cblxuICAgIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBmcmFtZU5vZGUgPSBnZW5lcmFsRnJhbWUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgZ2VuZXJhbENvbnRleHQpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEZyYW1lVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odGFyZ2V0RnJhbWVVbmlmaWVzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZnJhbWUgPSBzcGVjaWZpY0ZyYW1lOyAgLy8vXG5cbiAgICAgIHJldHVybiBtZXRhdmFyaWFibGUudW5pZnlGcmFtZShmcmFtZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGZyYW1lVW5pZmllcykgPT4ge1xuICAgICAgICBsZXQgdGFyZ2V0RnJhbWVVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGZyYW1lVW5pZmllcykge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICB0YXJnZXRGcmFtZVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldEZyYW1lVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQudHJhY2UoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IGZyYW1lIHdpdGggdGhlICcke2dlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24ncyB0YXJnZXQgZnJhbWUuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHRhcmdldEZyYW1lVW5pZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlSZXBsYWNlbWVudEZyYW1lKHN1YnN0aXR1dGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZ2VuZXJhbFN1YnN0aXR1dGlvbiA9IHRoaXMsIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmcgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24ncyByZXBsYWNlbWVudCBmcmFtZSB3aXRoIHRoZSAnJHtnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgZnJhbWUuLi5gKTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdWJzdGl0dXRpb25TcGVjaWZpY0NvbnRleHQgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFNwZWNpZmljQ29udGV4dCgpLFxuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0ID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0U3BlY2lmaWNDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbFN1YnN0aXR1dGlvblJlcGxhY2VtZW50RnJhbWUgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFJlcGxhY2VtZW50RnJhbWUoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblJlcGxhY2VtZW50RnJhbWUgPSBzcGVjaWZpY1N1YnN0aXR1dGlvbi5nZXRSZXBsYWNlbWVudEZyYW1lKCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBnZW5lcmFsU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gc3BlY2lmaWNTdWJzdGl0dXRpb25TcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsRnJhbWUgPSBnZW5lcmFsU3Vic3RpdHV0aW9uUmVwbGFjZW1lbnRGcmFtZSwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNGcmFtZSA9IHNwZWNpZmljU3Vic3RpdHV0aW9uUmVwbGFjZW1lbnRGcmFtZTsgLy8vXG5cbiAgICByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgZnJhbWVOb2RlID0gZ2VuZXJhbEZyYW1lLmdldE5vZGUoKSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBnZW5lcmFsQ29udGV4dCk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGUgPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRGcmFtZVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHJlcGxhY2VtZW50RnJhbWVVbmlmaWVzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZnJhbWUgPSBzcGVjaWZpY0ZyYW1lOyAgLy8vXG5cbiAgICAgIHJldHVybiBtZXRhdmFyaWFibGUudW5pZnlGcmFtZShmcmFtZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGZyYW1lVW5pZmllcykgPT4ge1xuICAgICAgICBsZXQgcmVwbGFjZW1lbnRGcmFtZVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoZnJhbWVVbmlmaWVzKSB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIHJlcGxhY2VtZW50RnJhbWVVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXBsYWNlbWVudEZyYW1lVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQudHJhY2UoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgZnJhbWUgd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IGZyYW1lLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihyZXBsYWNlbWVudEZyYW1lVW5pZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkZyYW1lU3Vic3RpdHV0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgZnJhbWVTdWJzdGl0dXRpb25uID0gbnVsbDtcblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbjtcblxuICAgIGlmICh0aGlzLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIHVuc2VyaWFsaXNlcygoanNvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uTm9kZSA9IGluc3RhbnRpYXRlRnJhbWVTdWJzdGl0dXRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBub2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICAgIHRhcmdldEZyYW1lID0gdGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50RnJhbWUgPSByZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbm4gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpO1xuICAgICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbm47XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICAgIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gICAgaWYgKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgYWJsYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGRlc2NlbmQoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQsIC8vL1xuICAgICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH0sIGNvbnRleHQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21GcmFtZUFuZE1ldGF2YXJpYWJsZShmcmFtZSwgbWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IGZyYW1lU3Vic3RpdHV0aW9uXG5cbiAgICBhYmxhdGVzKChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBpbnN0YW50aWF0ZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIG1hbmlmZXN0KChnZW5lcmFsQ29udGV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nID0gZnJhbWVTdWJzdGl0dXRpb25TdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSksXG4gICAgICAgICAgICAgICAgc3RyaW5nID0gZnJhbWVTdWJzdGl0dXRpb25TdHJpbmcsICAvLy9cbiAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gaW5zdGFudGlhdGVGcmFtZVN1YnN0aXR1dGlvbihzdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICAgICAgfSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGdlbmVyYWxDb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gZ2VuZXJhbENvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSBnZW5lcmFsQ29udGV4dC5maW5kRnJhbWVCeUZyYW1lTm9kZSh0YXJnZXRGcmFtZU5vZGUpO1xuXG4gIHJldHVybiB0YXJnZXRGcmFtZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRGcmFtZU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IHNwZWNpZmljQ29udGV4dC5maW5kRnJhbWVCeUZyYW1lTm9kZShyZXBsYWNlbWVudEZyYW1lTm9kZSk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50RnJhbWU7XG59XG4iXSwibmFtZXMiOlsiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkZyYW1lU3Vic3RpdHV0aW9uIiwiU3Vic3RpdHV0aW9uIiwiY29udGV4dHMiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInRhcmdldEZyYW1lIiwicmVwbGFjZW1lbnRGcmFtZSIsImdldFRhcmdldEZyYW1lIiwiZ2V0UmVwbGFjZW1lbnRGcmFtZSIsImdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsImdldE5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZ2V0VGFyZ2V0Tm9kZSIsInRhcmdldEZyYW1lTm9kZSIsInRlcmdldE5vZGUiLCJnZXRSZXBsYWNlbWVudE5vZGUiLCJyZXBsYWNlbWVudEZyYW1lTm9kZSIsInJlcGxhY2VtZW50Tm9kZSIsImlzVHJpdmlhbCIsInRhcmdldEZyYW1lRXF1YWxUb1JlcGxhY2VtZW50RnJhbWUiLCJpc0VxdWFsVG8iLCJ0cml2aWFsIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImNvbXBhcmVQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJ0YXJnZXRGcmFtZUNvbXBhcmVzVG9QYXJhbWV0ZXIiLCJjb21wYXJlc1RvUGFyYW1ldGVyIiwiY29tcGFyZUZyYW1lIiwiZnJhbWUiLCJjb250ZXh0IiwiZnJhbWVFcXVhbFRvUmVwbGFjZW1lbnRGcmFtZSIsImNvbXBhcmVkVG9GcmFtZSIsInZhbGlkYXRlIiwic3RyaWN0IiwiY29udGludWF0aW9uIiwidW5kZWZpbmVkIiwiZnJhbWVTdWJzdGl0dXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkU3Vic3RpdHV0aW9uIiwiZmluZFZhbGlkU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJkZWJ1ZyIsImdlbmVyYWxDb250ZXh0IiwiZ2V0R2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJnZXRTcGVjaWZpY0NvbnRleHQiLCJwYXNzIiwid2FpdmUiLCJhdHRlbXB0cyIsInZhbGlkYXRlVGFyZ2V0RnJhbWUiLCJiaW5kIiwidmFsaWRhdGVSZXBsYWNlbWVudEZyYW1lIiwiYWxsIiwidmFsaWRhdGVzIiwic3Vic3RpdHV0aW9uIiwiYWRkU3Vic3RpdHV0aW9uIiwiY29tbWl0IiwidGFyZ2V0RnJhbWVTaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ0YXJnZXRGcmFtZVN0cmluZyIsInRhcmdldEZyYW1lVmFsaWRhdGVzIiwiZWxpZGUiLCJyZXBsYWNlbWVudEZyYW1lVmFsaWRhdGVzIiwidW5pZnlTdWJzdGl0dXRpb24iLCJnZW5lcmFsU3Vic3RpdHV0aW9uIiwic3BlY2lmaWNTdWJzdGl0dXRpb24iLCJnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nIiwic3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmciLCJyZWNvbmNpbGUiLCJ1bmlmeVRhcmdldEZyYW1lIiwidW5pZnlSZXBsYWNlbWVudEZyYW1lIiwic3Vic3RpdHV0aW9uVW5pZmllcyIsImdlbmVyYWxTdWJzdGl0dXRpb25HZW5lcmFsQ29udGV4dCIsInNwZWNpZmljU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQiLCJnZW5lcmFsU3Vic3RpdHV0aW9uVGFyZ2V0RnJhbWUiLCJzcGVjaWZpY1N1YnN0aXR1dGlvblRhcmdldEZyYW1lIiwiZ2VuZXJhbEZyYW1lIiwic3BlY2lmaWNGcmFtZSIsImZyYW1lTm9kZSIsImdldEZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUiLCJ0YXJnZXRGcmFtZVVuaWZpZXMiLCJ1bmlmeUZyYW1lIiwiZnJhbWVVbmlmaWVzIiwiZ2VuZXJhbFN1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCIsInNwZWNpZmljU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0IiwiZ2VuZXJhbFN1YnN0aXR1dGlvblJlcGxhY2VtZW50RnJhbWUiLCJzcGVjaWZpY1N1YnN0aXR1dGlvblJlcGxhY2VtZW50RnJhbWUiLCJyZXBsYWNlbWVudEZyYW1lVW5pZmllcyIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJmcmFtZVN1YnN0aXR1dGlvbm4iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlcyIsImluc3RhbnRpYXRlRnJhbWVTdWJzdGl0dXRpb24iLCJ0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsImZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsImFibGF0ZSIsImRlc2NlbmQiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUiLCJhYmxhdGVzIiwibWFuaWZlc3QiLCJmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJnZXRUYXJnZXRGcmFtZU5vZGUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsImdldFJlcGxhY2VtZW50RnJhbWVOb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFlQTs7O2VBQUE7OztnQ0Fib0M7cUVBRVg7OEJBRUw7MEJBQ0c7NkJBQ3NCO3lCQUNjO3dCQUNLO3lCQUN1RDs7Ozs7O0FBRXZILE1BQU0sRUFBRUEsa0JBQWtCLEVBQUUsR0FBR0MsbUNBQW1CO01BRWxELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsMEJBQTBCQyxxQkFBWTtJQUNoRSxZQUFZQyxRQUFRLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsRUFBRUMsZ0JBQWdCLENBQUU7UUFDN0UsS0FBSyxDQUFDTCxVQUFVQyxRQUFRQyxNQUFNQztRQUU5QixJQUFJLENBQUNDLFdBQVcsR0FBR0E7UUFDbkIsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBR0E7SUFDMUI7SUFFQUMsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUNGLFdBQVc7SUFDekI7SUFFQUcsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDRixnQkFBZ0I7SUFDOUI7SUFFQUcsMkJBQTJCO1FBQ3pCLE1BQU1OLE9BQU8sSUFBSSxDQUFDTyxPQUFPLElBQ25CQyx3QkFBd0JSLE1BQU0sR0FBRztRQUV2QyxPQUFPUTtJQUNUO0lBRUFDLHNCQUFzQjtRQUFFLE9BQU8sSUFBSSxDQUFDUCxXQUFXLENBQUNPLG1CQUFtQjtJQUFJO0lBRXZFQyxnQkFBZ0I7UUFDZCxNQUFNQyxrQkFBa0IsSUFBSSxDQUFDVCxXQUFXLENBQUNLLE9BQU8sSUFDMUNLLGFBQWFELGlCQUFpQixHQUFHO1FBRXZDLE9BQU9DO0lBQ1Q7SUFFQUMscUJBQXFCO1FBQ25CLE1BQU1DLHVCQUF1QixJQUFJLENBQUNYLGdCQUFnQixD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