@dbx-tools/appkit-model-gateway 0.9.175 → 0.9.176

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.
package/lib/src/models.js CHANGED
@@ -3,8 +3,16 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import { isChatClass, modelFamily, modelFamilyRank } from "@dbx-tools/model";
6
+ import { CHAT_CLASS_ORDER, compareVersionTuples, isChatClass, isOpenWeightsGpt, ModelFamily, modelFamily, modelFamilyRank, versionTuple, } from "@dbx-tools/model";
7
+ import { ModelClass, ReasoningEffort } from "@dbx-tools/shared-model";
8
+ import { SMART_ROUTER_MODEL_ID } from "@dbx-tools/shared-model-gateway";
7
9
  const CODEX_BASE_INSTRUCTIONS = "You are a coding agent. Follow the user's instructions and use the available tools to work in the current repository.";
10
+ const CODEX_SMART_ROUTER_PRIORITY = 9_000;
11
+ const CODEX_MODEL_PRIORITY_BASE = 10_000;
12
+ const CODEX_FAMILY_ORDER = [
13
+ ModelFamily.Gpt,
14
+ ...Object.values(ModelFamily).filter((family) => family !== ModelFamily.Gpt),
15
+ ];
8
16
  const REASONING_DESCRIPTIONS = {
9
17
  none: "Disable explicit reasoning",
10
18
  minimal: "Use the smallest available reasoning budget",
@@ -14,16 +22,25 @@ const REASONING_DESCRIPTIONS = {
14
22
  xhigh: "Use an extra-high reasoning budget",
15
23
  max: "Use the largest available reasoning budget",
16
24
  };
17
- export function listModelsPayload(targets, includeCodex, preserveOrder = false, preferSystemModels = false) {
25
+ export function listModelsPayload(targets, includeCodex, preserveOrder = false, preferSystemModels = false, includeSmartRouter = false) {
18
26
  const available = targets
19
27
  .filter((target) => target.endpoint?.status?.deprecated !== true)
20
28
  .filter((target) => !includeCodex || hasChatClass(target));
21
29
  if (!preserveOrder) {
22
- available.sort((left, right) => compareCatalogueTargets(left, right, (target) => target.displayName));
30
+ available.sort(includeCodex
31
+ ? compareCodexCatalogueTargets
32
+ : (left, right) => compareCatalogueTargets(left, right, (target) => target.displayName));
33
+ }
34
+ const smartRouterCandidates = available.filter((target) => target.capabilities.chat);
35
+ if (includeSmartRouter && smartRouterCandidates.length > 0) {
36
+ available.unshift(smartRouterModelTarget(smartRouterCandidates));
23
37
  }
24
38
  if (includeCodex) {
39
+ let modelIndex = 0;
25
40
  return {
26
- models: available.map((target, index) => codexModel(target, index + 1, preferSystemModels)),
41
+ models: available.map((target) => codexModel(target, target.id === SMART_ROUTER_MODEL_ID
42
+ ? CODEX_SMART_ROUTER_PRIORITY
43
+ : CODEX_MODEL_PRIORITY_BASE + modelIndex++, preferSystemModels)),
27
44
  };
28
45
  }
29
46
  return {
@@ -41,6 +58,7 @@ function openAiModel(target) {
41
58
  task: target.endpoint?.task,
42
59
  status: target.endpoint?.status ?? { deprecated: false },
43
60
  capabilities: {
61
+ smart_router: target.id === SMART_ROUTER_MODEL_ID,
44
62
  tools: target.capabilities.tools,
45
63
  reasoning: target.reasoningEfforts,
46
64
  responses: target.capabilities.responses,
@@ -50,7 +68,44 @@ function openAiModel(target) {
50
68
  ai_gateway_codex: target.capabilities.aiGatewayCodex,
51
69
  streaming: target.capabilities.streaming,
52
70
  web_search: target.capabilities.webSearch,
71
+ image_input: target.capabilities.imageInput,
72
+ apply_patch: target.capabilities.applyPatch,
73
+ },
74
+ };
75
+ }
76
+ function smartRouterModelTarget(candidates) {
77
+ const has = (capability) => candidates.some((target) => target.capabilities[capability]);
78
+ const reasoningEfforts = Object.values(ReasoningEffort).filter((effort) => candidates.some((target) => target.reasoningEfforts.includes(effort)));
79
+ return {
80
+ id: SMART_ROUTER_MODEL_ID,
81
+ aliases: [SMART_ROUTER_MODEL_ID],
82
+ displayName: "Smart Router",
83
+ endpoint: {
84
+ name: SMART_ROUTER_MODEL_ID,
85
+ displayName: "Smart Router",
86
+ description: "Uses Databricks task_v3 Smart Router to select a compatible system model for each turn.",
87
+ task: "llm/v1/chat",
88
+ class: ModelClass.ChatBalanced,
89
+ status: { deprecated: false },
90
+ },
91
+ capabilities: {
92
+ responses: true,
93
+ openResponses: true,
94
+ chat: true,
95
+ anthropic: true,
96
+ embeddings: false,
97
+ aiGatewayCodex: true,
98
+ tools: has("tools"),
99
+ reasoning: reasoningEfforts.length > 0,
100
+ streaming: true,
101
+ parallelTools: has("parallelTools"),
102
+ customTools: has("customTools"),
103
+ structuredOutput: has("structuredOutput"),
104
+ webSearch: has("webSearch"),
105
+ imageInput: has("imageInput"),
106
+ applyPatch: has("applyPatch"),
53
107
  },
108
+ reasoningEfforts,
54
109
  };
55
110
  }
56
111
  /** Codex `/v1/models` slug: the `system.ai.*` service when preferred, else the endpoint id. */
@@ -64,7 +119,7 @@ function codexModel(target, priority, preferSystemModels) {
64
119
  const efforts = target.reasoningEfforts;
65
120
  return {
66
121
  slug: codexModelSlug(target, preferSystemModels),
67
- display_name: target.displayName,
122
+ display_name: codexDisplayName(target),
68
123
  description: target.endpoint?.description ?? "Databricks model service",
69
124
  base_instructions: CODEX_BASE_INSTRUCTIONS,
70
125
  status: target.endpoint?.status ?? { deprecated: false },
@@ -93,6 +148,45 @@ function codexModel(target, priority, preferSystemModels) {
93
148
  supports_image_detail_original: false,
94
149
  };
95
150
  }
151
+ function codexDisplayName(target) {
152
+ if (catalogueFamily(target) !== ModelFamily.Gpt)
153
+ return target.displayName;
154
+ const displayName = target.displayName.replace(/^gpt(?=[\s._-])/i, "GPT");
155
+ return `Databricks ${displayName}`;
156
+ }
157
+ function compareCodexCatalogueTargets(left, right) {
158
+ const familyOrder = codexFamilyRank(left) - codexFamilyRank(right);
159
+ if (familyOrder !== 0)
160
+ return familyOrder;
161
+ const modelKindOrder = codexModelKindRank(left) - codexModelKindRank(right);
162
+ if (modelKindOrder !== 0)
163
+ return modelKindOrder;
164
+ const versionOrder = compareVersionTuples(codexVersion(right), codexVersion(left));
165
+ if (versionOrder !== 0)
166
+ return versionOrder;
167
+ const classOrder = codexClassRank(left) - codexClassRank(right);
168
+ if (classOrder !== 0)
169
+ return classOrder;
170
+ return compareCatalogueLabel(left.displayName, right.displayName);
171
+ }
172
+ function codexModelKindRank(target) {
173
+ return [target.displayName, target.id, target.modelServiceName].some((identity) => identity && isOpenWeightsGpt(identity))
174
+ ? 1
175
+ : 0;
176
+ }
177
+ function codexFamilyRank(target) {
178
+ const family = catalogueFamily(target);
179
+ const index = family ? CODEX_FAMILY_ORDER.indexOf(family) : -1;
180
+ return index >= 0 ? index : CODEX_FAMILY_ORDER.length;
181
+ }
182
+ function codexVersion(target) {
183
+ return versionTuple(target.displayName);
184
+ }
185
+ function codexClassRank(target) {
186
+ const modelClass = target.endpoint?.class;
187
+ const index = modelClass ? CHAT_CLASS_ORDER.indexOf(modelClass) : -1;
188
+ return index >= 0 ? index : CHAT_CLASS_ORDER.length;
189
+ }
96
190
  /**
97
191
  * Order listed models in three groups: major-provider chat families, the
98
192
  * remaining chat models, then embeddings. Families keep a fixed provider
@@ -159,4 +253,4 @@ function hasChatClass(target) {
159
253
  const modelClass = target.endpoint?.class;
160
254
  return modelClass !== undefined && isChatClass(modelClass);
161
255
  }
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFVN0UsTUFBTSx1QkFBdUIsR0FDM0IsdUhBQXVILENBQUM7QUFFMUgsTUFBTSxzQkFBc0IsR0FBcUM7SUFDL0QsSUFBSSxFQUFFLDRCQUE0QjtJQUNsQyxPQUFPLEVBQUUsNkNBQTZDO0lBQ3RELEdBQUcsRUFBRSw0QkFBNEI7SUFDakMsTUFBTSxFQUFFLCtCQUErQjtJQUN2QyxJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLEtBQUssRUFBRSxvQ0FBb0M7SUFDM0MsR0FBRyxFQUFFLDRDQUE0QztDQUNsRCxDQUFDO0FBcUJGLE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsT0FBK0IsRUFDL0IsWUFBcUIsRUFDckIsYUFBYSxHQUFHLEtBQUssRUFDckIsa0JBQWtCLEdBQUcsS0FBSztJQUUxQixNQUFNLFNBQVMsR0FBRyxPQUFPO1NBQ3RCLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxLQUFLLElBQUksQ0FBQztTQUNoRSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQzdCLHVCQUF1QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FDckUsQ0FBQztJQUNKLENBQUM7SUFD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QUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDN0IsSUFBSSxLQUFLLEtBQUssS0FBSztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxPQUFPLE1BQU0sSUFBSSxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxNQUFtQjtJQUM1QyxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksS0FBSyxtQkFBbUIsQ0FBQztBQUNsRyxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxJQUFZLEVBQUUsS0FBYTtJQUN4RCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDdEYsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE1BQW1CO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQzFDLE9BQU8sVUFBVSxLQUFLLFNBQVMsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3BlbkFJIGFuZCBDb2RleCBtb2RlbC1saXN0IHBheWxvYWRzIGRlcml2ZWQgZnJvbSB0aGUgbGl2ZSByZWdpc3RyeS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgaXNDaGF0Q2xhc3MsIG1vZGVsRmFtaWx5LCBtb2RlbEZhbWlseVJhbmsgfSBmcm9tIFwiQGRieC10b29scy9tb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuICBDb2RleE1vZGVsLFxuICBDb2RleE1vZGVsTGlzdFJlc3BvbnNlLFxuICBNb2RlbExpc3RSZXNwb25zZSxcbiAgTW9kZWxUYXJnZXQsXG4gIE9wZW5BSU1vZGVsLFxuICBPcGVuQUlNb2RlbExpc3RSZXNwb25zZSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsLWdhdGV3YXlcIjtcblxuY29uc3QgQ09ERVhfQkFTRV9JTlNUUlVDVElPTlMgPVxuICBcIllvdSBhcmUgYSBjb2RpbmcgYWdlbnQuIEZvbGxvdyB0aGUgdXNlcidzIGluc3RydWN0aW9ucyBhbmQgdXNlIHRoZSBhdmFpbGFibGUgdG9vbHMgdG8gd29yayBpbiB0aGUgY3VycmVudCByZXBvc2l0b3J5LlwiO1xuXG5jb25zdCBSRUFTT05JTkdfREVTQ1JJUFRJT05TOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHtcbiAgbm9uZTogXCJEaXNhYmxlIGV4cGxpY2l0IHJlYXNvbmluZ1wiLFxuICBtaW5pbWFsOiBcIlVzZSB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIHJlYXNvbmluZyBidWRnZXRcIixcbiAgbG93OiBcIlVzZSBhIGxvdyByZWFzb25pbmcgYnVkZ2V0XCIsXG4gIG1lZGl1bTogXCJVc2UgYSBtZWRpdW0gcmVhc29uaW5nIGJ1ZGdldFwiLFxuICBoaWdoOiBcIlVzZSBhIGhpZ2ggcmVhc29uaW5nIGJ1ZGdldFwiLFxuICB4aGlnaDogXCJVc2UgYW4gZXh0cmEtaGlnaCByZWFzb25pbmcgYnVkZ2V0XCIsXG4gIG1heDogXCJVc2UgdGhlIGxhcmdlc3QgYXZhaWxhYmxlIHJlYXNvbmluZyBidWRnZXRcIixcbn07XG5cbi8qKiBCdWlsZCB0aGUgY29tYmluZWQgT3BlbkFJIGFuZCBvcHRpb25hbCBDb2RleCBtb2RlbCBjYXRhbG9ndWUuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdE1vZGVsc1BheWxvYWQoXG4gIHRhcmdldHM6IHJlYWRvbmx5IE1vZGVsVGFyZ2V0W10sXG4gIGluY2x1ZGVDb2RleDogdHJ1ZSxcbiAgcHJlc2VydmVPcmRlcj86IGJvb2xlYW4sXG4gIHByZWZlclN5c3RlbU1vZGVscz86IGJvb2xlYW4sXG4pOiBDb2RleE1vZGVsTGlzdFJlc3BvbnNlO1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RNb2RlbHNQYXlsb2FkKFxuICB0YXJnZXRzOiByZWFkb25seSBNb2RlbFRhcmdldFtdLFxuICBpbmNsdWRlQ29kZXg6IGZhbHNlLFxuICBwcmVzZXJ2ZU9yZGVyPzogYm9vbGVhbixcbiAgcHJlZmVyU3lzdGVtTW9kZWxzPzogYm9vbGVhbixcbik6IE9wZW5BSU1vZGVsTGlzdFJlc3BvbnNlO1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RNb2RlbHNQYXlsb2FkKFxuICB0YXJnZXRzOiByZWFkb25seSBNb2RlbFRhcmdldFtdLFxuICBpbmNsdWRlQ29kZXg6IGJvb2xlYW4sXG4gIHByZXNlcnZlT3JkZXI/OiBib29sZWFuLFxuICBwcmVmZXJTeXN0ZW1Nb2RlbHM/OiBib29sZWFuLFxuKTogTW9kZWxMaXN0UmVzcG9uc2U7XG5leHBvcnQgZnVuY3Rpb24gbGlzdE1vZGVsc1BheWxvYWQoXG4gIHRhcmdldHM6IHJlYWRvbmx5IE1vZGVsVGFyZ2V0W10sXG4gIGluY2x1ZGVDb2RleDogYm9vbGVhbixcbiAgcHJlc2VydmVPcmRlciA9IGZhbHNlLFxuICBwcmVmZXJTeXN0ZW1Nb2RlbHMgPSBmYWxzZSxcbik6IE1vZGVsTGlzdFJlc3BvbnNlIHtcbiAgY29uc3QgYXZhaWxhYmxlID0gdGFyZ2V0c1xuICAgIC5maWx0ZXIoKHRhcmdldCkgPT4gdGFyZ2V0LmVuZHBvaW50Py5zdGF0dXM/LmRlcHJlY2F0ZWQgIT09IHRydWUpXG4gICAgLmZpbHRlcigodGFyZ2V0KSA9PiAhaW5jbHVkZUNvZGV4IHx8IGhhc0NoYXRDbGFzcyh0YXJnZXQpKTtcbiAgaWYgKCFwcmVzZXJ2ZU9yZGVyKSB7XG4gICAgYXZhaWxhYmxlLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PlxuICAgICAgY29tcGFyZUNhdGFsb2d1ZVRhcmdldHMobGVmdCwgcmlnaHQsICh0YXJnZXQpID0+IHRhcmdldC5kaXNwbGF5TmFtZSksXG4gICAgKTtcbiAgfVxuICBpZiAoaW5jbHVkZUNvZGV4KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGVsczogYXZhaWxhYmxlLm1hcCgodGFyZ2V0LCBpbmRleCkgPT4gY29kZXhNb2RlbCh0YXJnZXQsIGluZGV4ICsgMSwgcHJlZmVyU3lzdGVtTW9kZWxzKSksXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG9iamVjdDogXCJsaXN0XCIsXG4gICAgZGF0YTogYXZhaWxhYmxlLm1hcChvcGVuQWlNb2RlbCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9wZW5BaU1vZGVsKHRhcmdldDogTW9kZWxUYXJnZXQpOiBPcGVuQUlNb2RlbCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IHRhcmdldC5pZCxcbiAgICBvYmplY3Q6IFwibW9kZWxcIixcbiAgICBjcmVhdGVkOiAwLFxuICAgIG93bmVkX2J5OiBcImRhdGFicmlja3NcIixcbiAgICBuYW1lOiB0YXJnZXQuZGlzcGxheU5hbWUsXG4gICAgdGFzazogdGFyZ2V0LmVuZHBvaW50Py50YXNrLFxuICAgIHN0YXR1czogdGFyZ2V0LmVuZHBvaW50Py5zdGF0dXMgPz8geyBkZXByZWNhdGVkOiBmYWxzZSB9LFxuICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgdG9vbHM6IHRhcmdldC5jYXBhYmlsaXRpZXMudG9vbHMsXG4gICAgICByZWFzb25pbmc6IHRhcmdldC5yZWFzb25pbmdFZmZvcnRzLFxuICAgICAgcmVzcG9uc2VzOiB0YXJnZXQuY2FwYWJpbGl0aWVzLnJlc3BvbnNlcyxcbiAgICAgIG9wZW5fcmVzcG9uc2VzOiB0YXJnZXQuY2FwYWJpbGl0aWVzLm9wZW5SZXNwb25zZXMsXG4gICAgICBhbnRocm9waWM6IHRhcmdldC5jYXBhYmlsaXRpZXMuYW50aHJvcGljLFxuICAgICAgZW1iZWRkaW5nczogdGFyZ2V0LmNhcGFiaWxpdGllcy5lbWJlZGRpbmdzLFxuICAgICAgYWlfZ2F0ZXdheV9jb2RleDogdGFyZ2V0LmNhcGFiaWxpdGllcy5haUdhdGV3YXlDb2RleCxcbiAgICAgIHN0cmVhbWluZzogdGFyZ2V0LmNhcGFiaWxpdGllcy5zdHJlYW1pbmcsXG4gICAgICB3ZWJfc2VhcmNoOiB0YXJnZXQuY2FwYWJpbGl0aWVzLndlYlNlYXJjaCxcbiAgICB9LFxuICB9O1xufVxuXG4vKiogQ29kZXggYC92MS9tb2RlbHNgIHNsdWc6IHRoZSBgc3lzdGVtLmFpLipgIHNlcnZpY2Ugd2hlbiBwcmVmZXJyZWQsIGVsc2UgdGhlIGVuZHBvaW50IGlkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvZGV4TW9kZWxTbHVnKHRhcmdldDogTW9kZWxUYXJnZXQsIHByZWZlclN5c3RlbU1vZGVsczogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IG1vZGVsID1cbiAgICBwcmVmZXJTeXN0ZW1Nb2RlbHMgJiYgdGFyZ2V0LmNhcGFiaWxpdGllcy5haUdhdGV3YXlDb2RleCAmJiB0YXJnZXQubW9kZWxTZXJ2aWNlTmFtZVxuICAgICAgPyB0YXJnZXQubW9kZWxTZXJ2aWNlTmFtZVxuICAgICAgOiB0YXJnZXQuaWQ7XG4gIHJldHVybiBgZGF0YWJyaWNrcy8ke21vZGVsfWA7XG59XG5cbmZ1bmN0aW9uIGNvZGV4TW9kZWwoXG4gIHRhcmdldDogTW9kZWxUYXJnZXQsXG4gIHByaW9yaXR5OiBudW1iZXIsXG4gIHByZWZlclN5c3RlbU1vZGVsczogYm9vbGVhbixcbik6IENvZGV4TW9kZWwge1xuICBjb25zdCBlZmZvcnRzID0gdGFyZ2V0LnJlYXNvbmluZ0VmZm9ydHM7XG4gIHJldHVybiB7XG4gICAgc2x1ZzogY29kZXhNb2RlbFNsdWcodGFyZ2V0LCBwcmVmZXJTeXN0ZW1Nb2RlbHMpLFxuICAgIGRpc3BsYXlfbmFtZTogdGFyZ2V0LmRpc3BsYXlOYW1lLFxuICAgIGRlc2NyaXB0aW9uOiB0YXJnZXQuZW5kcG9pbnQ/LmRlc2NyaXB0aW9uID8/IFwiRGF0YWJyaWNrcyBtb2RlbCBzZXJ2aWNlXCIsXG4gICAgYmFzZV9pbnN0cnVjdGlvbnM6IENPREVYX0JBU0VfSU5TVFJVQ1RJT05TLFxuICAgIHN0YXR1czogdGFyZ2V0LmVuZHBvaW50Py5zdGF0dXMgPz8geyBkZXByZWNhdGVkOiBmYWxzZSB9LFxuICAgIHN1cHBvcnRlZF9yZWFzb25pbmdfbGV2ZWxzOiBlZmZvcnRzLm1hcCgoZWZmb3J0KSA9PiAoe1xuICAgICAgZWZmb3J0LFxuICAgICAgZGVzY3JpcHRpb246IFJFQVNPTklOR19ERVNDUklQVElPTlNbZWZmb3J0XSA/PyBgVXNlIHRoZSAke2VmZm9ydH0gcmVhc29uaW5nIGJ1ZGdldGAsXG4gICAgfSkpLFxuICAgIC4uLihlZmZvcnRzLmxlbmd0aCA+IDBcbiAgICAgID8geyBkZWZhdWx0X3JlYXNvbmluZ19sZXZlbDogZWZmb3J0cy5pbmNsdWRlcyhcIm1lZGl1bVwiKSA/IFwibWVkaXVtXCIgOiBlZmZvcnRzWzBdIH1cbiAgICAgIDoge30pLFxuICAgIHNoZWxsX3R5cGU6IFwidW5pZmllZF9leGVjXCIsXG4gICAgdmlzaWJpbGl0eTogXCJsaXN0XCIsXG4gICAgc3VwcG9ydGVkX2luX2FwaTogdHJ1ZSxcbiAgICBwcmlvcml0eSxcbiAgICBhdmFpbGFiaWxpdHlfbnV4OiBudWxsLFxuICAgIHVwZ3JhZGU6IG51bGwsXG4gICAgc3VwcG9ydF92ZXJib3NpdHk6IGZhbHNlLFxuICAgIGRlZmF1bHRfdmVyYm9zaXR5OiBudWxsLFxuICAgIGFwcGx5X3BhdGNoX3Rvb2xfdHlwZTogdGFyZ2V0LmNhcGFiaWxpdGllcy5jdXN0b21Ub29scyA/IFwiZnJlZWZvcm1cIiA6IG51bGwsXG4gICAgdHJ1bmNhdGlvbl9wb2xpY3k6IHsgbW9kZTogXCJ0b2tlbnNcIiwgbGltaXQ6IDEyOF8wMDAgfSxcbiAgICBjb250ZXh0X3dpbmRvdzogbnVsbCxcbiAgICBleHBlcmltZW50YWxfc3VwcG9ydGVkX3Rvb2xzOiBbXSxcbiAgICBpbnB1dF9tb2RhbGl0aWVzOiBbXCJ0ZXh0XCJdLFxuICAgIHdlYl9zZWFyY2hfdG9vbF90eXBlOiBcInRleHRcIixcbiAgICBzdXBwb3J0c19zZWFyY2hfdG9vbDogdGFyZ2V0LmNhcGFiaWxpdGllcy53ZWJTZWFyY2gsXG4gICAgc3VwcG9ydHNfaW1hZ2VfZGV0YWlsX29yaWdpbmFsOiBmYWxzZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBPcmRlciBsaXN0ZWQgbW9kZWxzIGluIHRocmVlIGdyb3VwczogbWFqb3ItcHJvdmlkZXIgY2hhdCBmYW1pbGllcywgdGhlXG4gKiByZW1haW5pbmcgY2hhdCBtb2RlbHMsIHRoZW4gZW1iZWRkaW5ncy4gRmFtaWxpZXMga2VlcCBhIGZpeGVkIHByb3ZpZGVyXG4gKiBvcmRlcjsgZWFjaCBmYW1pbHkgYW5kIHRoZSBsYXRlciBncm91cHMgc29ydCBieSB0aGUgcHVibGlzaGVkIGxhYmVsXG4gKiAoYGRpc3BsYXlfbmFtZWAgZm9yIENvZGV4LCBgbmFtZWAgb3RoZXJ3aXNlKS4gTnVtZXJpYyBzZWdtZW50cyBzb3J0XG4gKiBuYXR1cmFsbHkgc28gXCJWZW8gMy4xXCIgcHJlY2VkZXMgXCJWZW8gMy4xMFwiLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQ2F0YWxvZ3VlVGFyZ2V0cyhcbiAgbGVmdDogTW9kZWxUYXJnZXQsXG4gIHJpZ2h0OiBNb2RlbFRhcmdldCxcbiAgbGFiZWw6ICh0YXJnZXQ6IE1vZGVsVGFyZ2V0KSA9PiBzdHJpbmcsXG4pOiBudW1iZXIge1xuICBjb25zdCBncm91cCA9IGNhdGFsb2d1ZUdyb3VwKGxlZnQpIC0gY2F0YWxvZ3VlR3JvdXAocmlnaHQpO1xuICBpZiAoZ3JvdXAgIT09IDApIHJldHVybiBncm91cDtcbiAgY29uc3QgbGVmdEZhbWlseSA9IGNhdGFsb2d1ZUZhbWlseShsZWZ0KTtcbiAgY29uc3QgcmlnaHRGYW1pbHkgPSBjYXRhbG9ndWVGYW1pbHkocmlnaHQpO1xuICBpZiAobGVmdEZhbWlseSAmJiByaWdodEZhbWlseSkge1xuICAgIGNvbnN0IGZhbWlseU9yZGVyID0gbW9kZWxGYW1pbHlSYW5rKGxlZnRGYW1pbHkpIC0gbW9kZWxGYW1pbHlSYW5rKHJpZ2h0RmFtaWx5KTtcbiAgICBpZiAoZmFtaWx5T3JkZXIgIT09IDApIHJldHVybiBmYW1pbHlPcmRlcjtcbiAgfVxuICByZXR1cm4gY29tcGFyZUNhdGFsb2d1ZUxhYmVsKGxhYmVsKGxlZnQpLCBsYWJlbChyaWdodCkpO1xufVxuXG5mdW5jdGlvbiBjYXRhbG9ndWVHcm91cCh0YXJnZXQ6IE1vZGVsVGFyZ2V0KTogbnVtYmVyIHtcbiAgaWYgKGlzRW1iZWRkaW5nVGFyZ2V0KHRhcmdldCkpIHJldHVybiAyO1xuICByZXR1cm4gY2F0YWxvZ3VlRmFtaWx5KHRhcmdldCkgPyAwIDogMTtcbn1cblxuY29uc3QgSURFTlRJVFlfUFJFRklYRVMgPSBuZXcgU2V0KFtcbiAgXCJkYXRhYnJpY2tzXCIsXG4gIFwic3lzdGVtXCIsXG4gIFwiYWlcIixcbiAgXCJtZXRhXCIsXG4gIFwiZ29vZ2xlXCIsXG4gIFwib3BlbmFpXCIsXG4gIFwiYW50aHJvcGljXCIsXG5dKTtcblxuZnVuY3Rpb24gY2F0YWxvZ3VlRmFtaWx5KHRhcmdldDogTW9kZWxUYXJnZXQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoaXNFbWJlZGRpbmdUYXJnZXQodGFyZ2V0KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBpZGVudGl0eSBvZiBbdGFyZ2V0LmRpc3BsYXlOYW1lLCB0YXJnZXQuaWQsIHRhcmdldC5lbmRwb2ludD8ubmFtZV0pIHtcbiAgICBpZiAoIWlkZW50aXR5KSBjb250aW51ZTtcbiAgICBjb25zdCBmYW1pbHkgPSBjYXRhbG9ndWVGYW1pbHlGcm9tSWRlbnRpdHkoaWRlbnRpdHkpO1xuICAgIGlmIChmYW1pbHkpIHJldHVybiBmYW1pbHk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2F0YWxvZ3VlRmFtaWx5RnJvbUlkZW50aXR5KGlkZW50aXR5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0b2tlbnMgPSBpZGVudGl0eS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9bYS16MC05XSsvZykgPz8gW107XG4gIGNvbnN0IHN0YXJ0ID0gdG9rZW5zLmZpbmQoKHRva2VuKSA9PiAhSURFTlRJVFlfUFJFRklYRVMuaGFzKHRva2VuKSk7XG4gIGlmICghc3RhcnQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChzdGFydCA9PT0gXCJ2ZW9cIikgcmV0dXJuIFwiZ2VtaW5pXCI7XG4gIGNvbnN0IGZhbWlseSA9IG1vZGVsRmFtaWx5KGlkZW50aXR5KTtcbiAgcmV0dXJuIGZhbWlseSAmJiBzdGFydCA9PT0gZmFtaWx5ID8gZmFtaWx5IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0VtYmVkZGluZ1RhcmdldCh0YXJnZXQ6IE1vZGVsVGFyZ2V0KTogYm9vbGVhbiB7XG4gIHJldHVybiB0YXJnZXQuY2FwYWJpbGl0aWVzLmVtYmVkZGluZ3MgPT09IHRydWUgfHwgdGFyZ2V0LmVuZHBvaW50Py50YXNrID09PSBcImxsbS92MS9lbWJlZGRpbmdzXCI7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVDYXRhbG9ndWVMYWJlbChsZWZ0OiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGVmdC5sb2NhbGVDb21wYXJlKHJpZ2h0LCB1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSwgc2Vuc2l0aXZpdHk6IFwiYmFzZVwiIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNDaGF0Q2xhc3ModGFyZ2V0OiBNb2RlbFRhcmdldCk6IGJvb2xlYW4ge1xuICBjb25zdCBtb2RlbENsYXNzID0gdGFyZ2V0LmVuZHBvaW50Py5jbGFzcztcbiAgcmV0dXJuIG1vZGVsQ2xhc3MgIT09IHVuZGVmaW5lZCAmJiBpc0NoYXRDbGFzcyhtb2RlbENsYXNzKTtcbn1cbiJdfQ==
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsV0FBVyxFQUNYLGVBQWUsRUFDZixZQUFZLEdBQ2IsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBV3hFLE1BQU0sdUJBQXVCLEdBQzNCLHVIQUF1SCxDQUFDO0FBQzFILE1BQU0sMkJBQTJCLEdBQUcsS0FBSyxDQUFDO0FBQzFDLE1BQU0seUJBQXlCLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsV0FBVyxDQUFDLEdBQUc7SUFDZixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUFDLEdBQUcsQ0FBQztDQUNwRSxDQUFDO0FBRVgsTUFBTSxzQkFBc0IsR0FBcUM7SUFDL0QsSUFBSSxFQUFFLDRCQUE0QjtJQUNsQyxPQUFPLEVBQUUsNkNBQTZDO0lBQ3RELEdBQUcsRUFBRSw0QkFBNEI7SUFDakMsTUFBTSxFQUFFLCtCQUErQjtJQUN2QyxJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLEtBQUssRUFBRSxvQ0FBb0M7SUFDM0MsR0FBRyxFQUFFLDRDQUE0QztDQUNsRCxDQUFDO0FBd0JGLE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsT0FBK0IsRUFDL0IsWUFBcUIsRUFDckIsYUFBYSxHQUFHLEtBQUssRUFDckIsa0JBQWtCLEdBQUcsS0FBSyxFQUMxQixrQkFB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QUFLLFNBQVMsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3BlbkFJIGFuZCBDb2RleCBtb2RlbC1saXN0IHBheWxvYWRzIGRlcml2ZWQgZnJvbSB0aGUgbGl2ZSByZWdpc3RyeS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgQ0hBVF9DTEFTU19PUkRFUixcbiAgY29tcGFyZVZlcnNpb25UdXBsZXMsXG4gIGlzQ2hhdENsYXNzLFxuICBpc09wZW5XZWlnaHRzR3B0LFxuICBNb2RlbEZhbWlseSxcbiAgbW9kZWxGYW1pbHksXG4gIG1vZGVsRmFtaWx5UmFuayxcbiAgdmVyc2lvblR1cGxlLFxufSBmcm9tIFwiQGRieC10b29scy9tb2RlbFwiO1xuaW1wb3J0IHsgTW9kZWxDbGFzcywgUmVhc29uaW5nRWZmb3J0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5pbXBvcnQgeyBTTUFSVF9ST1VURVJfTU9ERUxfSUQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwtZ2F0ZXdheVwiO1xuaW1wb3J0IHR5cGUge1xuICBDb2RleE1vZGVsLFxuICBDb2RleE1vZGVsTGlzdFJlc3BvbnNlLFxuICBNb2RlbENhcGFiaWxpdGllcyxcbiAgTW9kZWxMaXN0UmVzcG9uc2UsXG4gIE1vZGVsVGFyZ2V0LFxuICBPcGVuQUlNb2RlbCxcbiAgT3BlbkFJTW9kZWxMaXN0UmVzcG9uc2UsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbC1nYXRld2F5XCI7XG5cbmNvbnN0IENPREVYX0JBU0VfSU5TVFJVQ1RJT05TID1cbiAgXCJZb3UgYXJlIGEgY29kaW5nIGFnZW50LiBGb2xsb3cgdGhlIHVzZXIncyBpbnN0cnVjdGlvbnMgYW5kIHVzZSB0aGUgYXZhaWxhYmxlIHRvb2xzIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS5cIjtcbmNvbnN0IENPREVYX1NNQVJUX1JPVVRFUl9QUklPUklUWSA9IDlfMDAwO1xuY29uc3QgQ09ERVhfTU9ERUxfUFJJT1JJVFlfQkFTRSA9IDEwXzAwMDtcbmNvbnN0IENPREVYX0ZBTUlMWV9PUkRFUiA9IFtcbiAgTW9kZWxGYW1pbHkuR3B0LFxuICAuLi5PYmplY3QudmFsdWVzKE1vZGVsRmFtaWx5KS5maWx0ZXIoKGZhbWlseSkgPT4gZmFtaWx5ICE9PSBNb2RlbEZhbWlseS5HcHQpLFxuXSBhcyBjb25zdDtcblxuY29uc3QgUkVBU09OSU5HX0RFU0NSSVBUSU9OUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7XG4gIG5vbmU6IFwiRGlzYWJsZSBleHBsaWNpdCByZWFzb25pbmdcIixcbiAgbWluaW1hbDogXCJVc2UgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSByZWFzb25pbmcgYnVkZ2V0XCIsXG4gIGxvdzogXCJVc2UgYSBsb3cgcmVhc29uaW5nIGJ1ZGdldFwiLFxuICBtZWRpdW06IFwiVXNlIGEgbWVkaXVtIHJlYXNvbmluZyBidWRnZXRcIixcbiAgaGlnaDogXCJVc2UgYSBoaWdoIHJlYXNvbmluZyBidWRnZXRcIixcbiAgeGhpZ2g6IFwiVXNlIGFuIGV4dHJhLWhpZ2ggcmVhc29uaW5nIGJ1ZGdldFwiLFxuICBtYXg6IFwiVXNlIHRoZSBsYXJnZXN0IGF2YWlsYWJsZSByZWFzb25pbmcgYnVkZ2V0XCIsXG59O1xuXG4vKiogQnVpbGQgdGhlIGNvbWJpbmVkIE9wZW5BSSBhbmQgb3B0aW9uYWwgQ29kZXggbW9kZWwgY2F0YWxvZ3VlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RNb2RlbHNQYXlsb2FkKFxuICB0YXJnZXRzOiByZWFkb25seSBNb2RlbFRhcmdldFtdLFxuICBpbmNsdWRlQ29kZXg6IHRydWUsXG4gIHByZXNlcnZlT3JkZXI/OiBib29sZWFuLFxuICBwcmVmZXJTeXN0ZW1Nb2RlbHM/OiBib29sZWFuLFxuICBpbmNsdWRlU21hcnRSb3V0ZXI/OiBib29sZWFuLFxuKTogQ29kZXhNb2RlbExpc3RSZXNwb25zZTtcbmV4cG9ydCBmdW5jdGlvbiBsaXN0TW9kZWxzUGF5bG9hZChcbiAgdGFyZ2V0czogcmVhZG9ubHkgTW9kZWxUYXJnZXRbXSxcbiAgaW5jbHVkZUNvZGV4OiBmYWxzZSxcbiAgcHJlc2VydmVPcmRlcj86IGJvb2xlYW4sXG4gIHByZWZlclN5c3RlbU1vZGVscz86IGJvb2xlYW4sXG4gIGluY2x1ZGVTbWFydFJvdXRlcj86IGJvb2xlYW4sXG4pOiBPcGVuQUlNb2RlbExpc3RSZXNwb25zZTtcbmV4cG9ydCBmdW5jdGlvbiBsaXN0TW9kZWxzUGF5bG9hZChcbiAgdGFyZ2V0czogcmVhZG9ubHkgTW9kZWxUYXJnZXRbXSxcbiAgaW5jbHVkZUNvZGV4OiBib29sZWFuLFxuICBwcmVzZXJ2ZU9yZGVyPzogYm9vbGVhbixcbiAgcHJlZmVyU3lzdGVtTW9kZWxzPzogYm9vbGVhbixcbiAgaW5jbHVkZVNtYXJ0Um91dGVyPzogYm9vbGVhbixcbik6IE1vZGVsTGlzdFJlc3BvbnNlO1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RNb2RlbHNQYXlsb2FkKFxuICB0YXJnZXRzOiByZWFkb25seSBNb2RlbFRhcmdldFtdLFxuICBpbmNsdWRlQ29kZXg6IGJvb2xlYW4sXG4gIHByZXNlcnZlT3JkZXIgPSBmYWxzZSxcbiAgcHJlZmVyU3lzdGVtTW9kZWxzID0gZmFsc2UsXG4gIGluY2x1ZGVTbWFydFJvdXRlciA9IGZhbHNlLFxuKTogTW9kZWxMaXN0UmVzcG9uc2Uge1xuICBjb25zdCBhdmFpbGFibGUgPSB0YXJnZXRzXG4gICAgLmZpbHRlcigodGFyZ2V0KSA9PiB0YXJnZXQuZW5kcG9pbnQ/LnN0YXR1cz8uZGVwcmVjYXRlZCAhPT0gdHJ1ZSlcbiAgICAuZmlsdGVyKCh0YXJnZXQpID0+ICFpbmNsdWRlQ29kZXggfHwgaGFzQ2hhdENsYXNzKHRhcmdldCkpO1xuICBpZiAoIXByZXNlcnZlT3JkZXIpIHtcbiAgICBhdmFpbGFibGUuc29ydChcbiAgICAgIGluY2x1ZGVDb2RleFxuICAgICAgICA/IGNvbXBhcmVDb2RleENhdGFsb2d1ZVRhcmdldHNcbiAgICAgICAgOiAobGVmdCwgcmlnaHQpID0+XG4gICAgICAgICAgICBjb21wYXJlQ2F0YWxvZ3VlVGFyZ2V0cyhsZWZ0LCByaWdodCwgKHRhcmdldCkgPT4gdGFyZ2V0LmRpc3BsYXlOYW1lKSxcbiAgICApO1xuICB9XG4gIGNvbnN0IHNtYXJ0Um91dGVyQ2FuZGlkYXRlcyA9IGF2YWlsYWJsZS5maWx0ZXIoKHRhcmdldCkgPT4gdGFyZ2V0LmNhcGFiaWxpdGllcy5jaGF0KTtcbiAgaWYgKGluY2x1ZGVTbWFydFJvdXRlciAmJiBzbWFydFJvdXRlckNhbmRpZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgIGF2YWlsYWJsZS51bnNoaWZ0KHNtYXJ0Um91dGVyTW9kZWxUYXJnZXQoc21hcnRSb3V0ZXJDYW5kaWRhdGVzKSk7XG4gIH1cbiAgaWYgKGluY2x1ZGVDb2RleCkge1xuICAgIGxldCBtb2RlbEluZGV4ID0gMDtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZWxzOiBhdmFpbGFibGUubWFwKCh0YXJnZXQpID0+XG4gICAgICAgIGNvZGV4TW9kZWwoXG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIHRhcmdldC5pZCA9PT0gU01BUlRfUk9VVEVSX01PREVMX0lEXG4gICAgICAgICAgICA/IENPREVYX1NNQVJUX1JPVVRFUl9QUklPUklUWVxuICAgICAgICAgICAgOiBDT0RFWF9NT0RFTF9QUklPUklUWV9CQVNFICsgbW9kZWxJbmRleCsrLFxuICAgICAgICAgIHByZWZlclN5c3RlbU1vZGVscyxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG9iamVjdDogXCJsaXN0XCIsXG4gICAgZGF0YTogYXZhaWxhYmxlLm1hcChvcGVuQWlNb2RlbCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9wZW5BaU1vZGVsKHRhcmdldDogTW9kZWxUYXJnZXQpOiBPcGVuQUlNb2RlbCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IHRhcmdldC5pZCxcbiAgICBvYmplY3Q6IFwibW9kZWxcIixcbiAgICBjcmVhdGVkOiAwLFxuICAgIG93bmVkX2J5OiBcImRhdGFicmlja3NcIixcbiAgICBuYW1lOiB0YXJnZXQuZGlzcGxheU5hbWUsXG4gICAgdGFzazogdGFyZ2V0LmVuZHBvaW50Py50YXNrLFxuICAgIHN0YXR1czogdGFyZ2V0LmVuZHBvaW50Py5zdGF0dXMgPz8geyBkZXByZWNhdGVkOiBmYWxzZSB9LFxuICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgc21hcnRfcm91dGVyOiB0YXJnZXQuaWQgPT09IFNNQVJUX1JPVVRFUl9NT0RFTF9JRCxcbiAgICAgIHRvb2xzOiB0YXJnZXQuY2FwYWJpbGl0aWVzLnRvb2xzLFxuICAgICAgcmVhc29uaW5nOiB0YXJnZXQucmVhc29uaW5nRWZmb3J0cyxcbiAgICAgIHJlc3BvbnNlczogdGFyZ2V0LmNhcGFiaWxpdGllcy5yZXNwb25zZXMsXG4gICAgICBvcGVuX3Jlc3BvbnNlczogdGFyZ2V0LmNhcGFiaWxpdGllcy5vcGVuUmVzcG9uc2VzLFxuICAgICAgYW50aHJvcGljOiB0YXJnZXQuY2FwYWJpbGl0aWVzLmFudGhyb3BpYyxcbiAgICAgIGVtYmVkZGluZ3M6IHRhcmdldC5jYXBhYmlsaXRpZXMuZW1iZWRkaW5ncyxcbiAgICAgIGFpX2dhdGV3YXlfY29kZXg6IHRhcmdldC5jYXBhYmlsaXRpZXMuYWlHYXRld2F5Q29kZXgsXG4gICAgICBzdHJlYW1pbmc6IHRhcmdldC5jYXBhYmlsaXRpZXMuc3RyZWFtaW5nLFxuICAgICAgd2ViX3NlYXJjaDogdGFyZ2V0LmNhcGFiaWxpdGllcy53ZWJTZWFyY2gsXG4gICAgICBpbWFnZV9pbnB1dDogdGFyZ2V0LmNhcGFiaWxpdGllcy5pbWFnZUlucHV0LFxuICAgICAgYXBwbHlfcGF0Y2g6IHRhcmdldC5jYXBhYmlsaXRpZXMuYXBwbHlQYXRjaCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBzbWFydFJvdXRlck1vZGVsVGFyZ2V0KGNhbmRpZGF0ZXM6IHJlYWRvbmx5IE1vZGVsVGFyZ2V0W10pOiBNb2RlbFRhcmdldCB7XG4gIGNvbnN0IGhhcyA9IChjYXBhYmlsaXR5OiBrZXlvZiBNb2RlbENhcGFiaWxpdGllcykgPT5cbiAgICBjYW5kaWRhdGVzLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LmNhcGFiaWxpdGllc1tjYXBhYmlsaXR5XSk7XG4gIGNvbnN0IHJlYXNvbmluZ0VmZm9ydHMgPSBPYmplY3QudmFsdWVzKFJlYXNvbmluZ0VmZm9ydCkuZmlsdGVyKChlZmZvcnQpID0+XG4gICAgY2FuZGlkYXRlcy5zb21lKCh0YXJnZXQpID0+IHRhcmdldC5yZWFzb25pbmdFZmZvcnRzLmluY2x1ZGVzKGVmZm9ydCkpLFxuICApO1xuICByZXR1cm4ge1xuICAgIGlkOiBTTUFSVF9ST1VURVJfTU9ERUxfSUQsXG4gICAgYWxpYXNlczogW1NNQVJUX1JPVVRFUl9NT0RFTF9JRF0sXG4gICAgZGlzcGxheU5hbWU6IFwiU21hcnQgUm91dGVyXCIsXG4gICAgZW5kcG9pbnQ6IHtcbiAgICAgIG5hbWU6IFNNQVJUX1JPVVRFUl9NT0RFTF9JRCxcbiAgICAgIGRpc3BsYXlOYW1lOiBcIlNtYXJ0IFJvdXRlclwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiVXNlcyBEYXRhYnJpY2tzIHRhc2tfdjMgU21hcnQgUm91dGVyIHRvIHNlbGVjdCBhIGNvbXBhdGlibGUgc3lzdGVtIG1vZGVsIGZvciBlYWNoIHR1cm4uXCIsXG4gICAgICB0YXNrOiBcImxsbS92MS9jaGF0XCIsXG4gICAgICBjbGFzczogTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQsXG4gICAgICBzdGF0dXM6IHsgZGVwcmVjYXRlZDogZmFsc2UgfSxcbiAgICB9LFxuICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgcmVzcG9uc2VzOiB0cnVlLFxuICAgICAgb3BlblJlc3BvbnNlczogdHJ1ZSxcbiAgICAgIGNoYXQ6IHRydWUsXG4gICAgICBhbnRocm9waWM6IHRydWUsXG4gICAgICBlbWJlZGRpbmdzOiBmYWxzZSxcbiAgICAgIGFpR2F0ZXdheUNvZGV4OiB0cnVlLFxuICAgICAgdG9vbHM6IGhhcyhcInRvb2xzXCIpLFxuICAgICAgcmVhc29uaW5nOiByZWFzb25pbmdFZmZvcnRzLmxlbmd0aCA+IDAsXG4gICAgICBzdHJlYW1pbmc6IHRydWUsXG4gICAgICBwYXJhbGxlbFRvb2xzOiBoYXMoXCJwYXJhbGxlbFRvb2xzXCIpLFxuICAgICAgY3VzdG9tVG9vbHM6IGhhcyhcImN1c3RvbVRvb2xzXCIpLFxuICAgICAgc3RydWN0dXJlZE91dHB1dDogaGFzKFwic3RydWN0dXJlZE91dHB1dFwiKSxcbiAgICAgIHdlYlNlYXJjaDogaGFzKFwid2ViU2VhcmNoXCIpLFxuICAgICAgaW1hZ2VJbnB1dDogaGFzKFwiaW1hZ2VJbnB1dFwiKSxcbiAgICAgIGFwcGx5UGF0Y2g6IGhhcyhcImFwcGx5UGF0Y2hcIiksXG4gICAgfSxcbiAgICByZWFzb25pbmdFZmZvcnRzLFxuICB9O1xufVxuXG4vKiogQ29kZXggYC92MS9tb2RlbHNgIHNsdWc6IHRoZSBgc3lzdGVtLmFpLipgIHNlcnZpY2Ugd2hlbiBwcmVmZXJyZWQsIGVsc2UgdGhlIGVuZHBvaW50IGlkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvZGV4TW9kZWxTbHVnKHRhcmdldDogTW9kZWxUYXJnZXQsIHByZWZlclN5c3RlbU1vZGVsczogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IG1vZGVsID1cbiAgICBwcmVmZXJTeXN0ZW1Nb2RlbHMgJiYgdGFyZ2V0LmNhcGFiaWxpdGllcy5haUdhdGV3YXlDb2RleCAmJiB0YXJnZXQubW9kZWxTZXJ2aWNlTmFtZVxuICAgICAgPyB0YXJnZXQubW9kZWxTZXJ2aWNlTmFtZVxuICAgICAgOiB0YXJnZXQuaWQ7XG4gIHJldHVybiBgZGF0YWJyaWNrcy8ke21vZGVsfWA7XG59XG5cbmZ1bmN0aW9uIGNvZGV4TW9kZWwoXG4gIHRhcmdldDogTW9kZWxUYXJnZXQsXG4gIHByaW9yaXR5OiBudW1iZXIsXG4gIHByZWZlclN5c3RlbU1vZGVsczogYm9vbGVhbixcbik6IENvZGV4TW9kZWwge1xuICBjb25zdCBlZmZvcnRzID0gdGFyZ2V0LnJlYXNvbmluZ0VmZm9ydHM7XG4gIHJldHVybiB7XG4gICAgc2x1ZzogY29kZXhNb2RlbFNsdWcodGFyZ2V0LCBwcmVmZXJTeXN0ZW1Nb2RlbHMpLFxuICAgIGRpc3BsYXlfbmFtZTogY29kZXhEaXNwbGF5TmFtZSh0YXJnZXQpLFxuICAgIGRlc2NyaXB0aW9uOiB0YXJnZXQuZW5kcG9pbnQ/LmRlc2NyaXB0aW9uID8/IFwiRGF0YWJyaWNrcyBtb2RlbCBzZXJ2aWNlXCIsXG4gICAgYmFzZV9pbnN0cnVjdGlvbnM6IENPREVYX0JBU0VfSU5TVFJVQ1RJT05TLFxuICAgIHN0YXR1czogdGFyZ2V0LmVuZHBvaW50Py5zdGF0dXMgPz8geyBkZXByZWNhdGVkOiBmYWxzZSB9LFxuICAgIHN1cHBvcnRlZF9yZWFzb25pbmdfbGV2ZWxzOiBlZmZvcnRzLm1hcCgoZWZmb3J0KSA9PiAoe1xuICAgICAgZWZmb3J0LFxuICAgICAgZGVzY3JpcHRpb246IFJFQVNPTklOR19ERVNDUklQVElPTlNbZWZmb3J0XSA/PyBgVXNlIHRoZSAke2VmZm9ydH0gcmVhc29uaW5nIGJ1ZGdldGAsXG4gICAgfSkpLFxuICAgIC4uLihlZmZvcnRzLmxlbmd0aCA+IDBcbiAgICAgID8geyBkZWZhdWx0X3JlYXNvbmluZ19sZXZlbDogZWZmb3J0cy5pbmNsdWRlcyhcIm1lZGl1bVwiKSA/IFwibWVkaXVtXCIgOiBlZmZvcnRzWzBdIH1cbiAgICAgIDoge30pLFxuICAgIHNoZWxsX3R5cGU6IFwidW5pZmllZF9leGVjXCIsXG4gICAgdmlzaWJpbGl0eTogXCJsaXN0XCIsXG4gICAgc3VwcG9ydGVkX2luX2FwaTogdHJ1ZSxcbiAgICBwcmlvcml0eSxcbiAgICBhdmFpbGFiaWxpdHlfbnV4OiBudWxsLFxuICAgIHVwZ3JhZGU6IG51bGwsXG4gICAgc3VwcG9ydF92ZXJib3NpdHk6IGZhbHNlLFxuICAgIGRlZmF1bHRfdmVyYm9zaXR5OiBudWxsLFxuICAgIGFwcGx5X3BhdGNoX3Rvb2xfdHlwZTogdGFyZ2V0LmNhcGFiaWxpdGllcy5jdXN0b21Ub29scyA/IFwiZnJlZWZvcm1cIiA6IG51bGwsXG4gICAgdHJ1bmNhdGlvbl9wb2xpY3k6IHsgbW9kZTogXCJ0b2tlbnNcIiwgbGltaXQ6IDEyOF8wMDAgfSxcbiAgICBjb250ZXh0X3dpbmRvdzogbnVsbCxcbiAgICBleHBlcmltZW50YWxfc3VwcG9ydGVkX3Rvb2xzOiBbXSxcbiAgICBpbnB1dF9tb2RhbGl0aWVzOiBbXCJ0ZXh0XCJdLFxuICAgIHdlYl9zZWFyY2hfdG9vbF90eXBlOiBcInRleHRcIixcbiAgICBzdXBwb3J0c19zZWFyY2hfdG9vbDogdGFyZ2V0LmNhcGFiaWxpdGllcy53ZWJTZWFyY2gsXG4gICAgc3VwcG9ydHNfaW1hZ2VfZGV0YWlsX29yaWdpbmFsOiBmYWxzZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29kZXhEaXNwbGF5TmFtZSh0YXJnZXQ6IE1vZGVsVGFyZ2V0KTogc3RyaW5nIHtcbiAgaWYgKGNhdGFsb2d1ZUZhbWlseSh0YXJnZXQpICE9PSBNb2RlbEZhbWlseS5HcHQpIHJldHVybiB0YXJnZXQuZGlzcGxheU5hbWU7XG4gIGNvbnN0IGRpc3BsYXlOYW1lID0gdGFyZ2V0LmRpc3BsYXlOYW1lLnJlcGxhY2UoL15ncHQoPz1bXFxzLl8tXSkvaSwgXCJHUFRcIik7XG4gIHJldHVybiBgRGF0YWJyaWNrcyAke2Rpc3BsYXlOYW1lfWA7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVDb2RleENhdGFsb2d1ZVRhcmdldHMobGVmdDogTW9kZWxUYXJnZXQsIHJpZ2h0OiBNb2RlbFRhcmdldCk6IG51bWJlciB7XG4gIGNvbnN0IGZhbWlseU9yZGVyID0gY29kZXhGYW1pbHlSYW5rKGxlZnQpIC0gY29kZXhGYW1pbHlSYW5rKHJpZ2h0KTtcbiAgaWYgKGZhbWlseU9yZGVyICE9PSAwKSByZXR1cm4gZmFtaWx5T3JkZXI7XG4gIGNvbnN0IG1vZGVsS2luZE9yZGVyID0gY29kZXhNb2RlbEtpbmRSYW5rKGxlZnQpIC0gY29kZXhNb2RlbEtpbmRSYW5rKHJpZ2h0KTtcbiAgaWYgKG1vZGVsS2luZE9yZGVyICE9PSAwKSByZXR1cm4gbW9kZWxLaW5kT3JkZXI7XG4gIGNvbnN0IHZlcnNpb25PcmRlciA9IGNvbXBhcmVWZXJzaW9uVHVwbGVzKGNvZGV4VmVyc2lvbihyaWdodCksIGNvZGV4VmVyc2lvbihsZWZ0KSk7XG4gIGlmICh2ZXJzaW9uT3JkZXIgIT09IDApIHJldHVybiB2ZXJzaW9uT3JkZXI7XG4gIGNvbnN0IGNsYXNzT3JkZXIgPSBjb2RleENsYXNzUmFuayhsZWZ0KSAtIGNvZGV4Q2xhc3NSYW5rKHJpZ2h0KTtcbiAgaWYgKGNsYXNzT3JkZXIgIT09IDApIHJldHVybiBjbGFzc09yZGVyO1xuICByZXR1cm4gY29tcGFyZUNhdGFsb2d1ZUxhYmVsKGxlZnQuZGlzcGxheU5hbWUsIHJpZ2h0LmRpc3BsYXlOYW1lKTtcbn1cblxuZnVuY3Rpb24gY29kZXhNb2RlbEtpbmRSYW5rKHRhcmdldDogTW9kZWxUYXJnZXQpOiBudW1iZXIge1xuICByZXR1cm4gW3RhcmdldC5kaXNwbGF5TmFtZSwgdGFyZ2V0LmlkLCB0YXJnZXQubW9kZWxTZXJ2aWNlTmFtZV0uc29tZShcbiAgICAoaWRlbnRpdHkpID0+IGlkZW50aXR5ICYmIGlzT3BlbldlaWdodHNHcHQoaWRlbnRpdHkpLFxuICApXG4gICAgPyAxXG4gICAgOiAwO1xufVxuXG5mdW5jdGlvbiBjb2RleEZhbWlseVJhbmsodGFyZ2V0OiBNb2RlbFRhcmdldCk6IG51bWJlciB7XG4gIGNvbnN0IGZhbWlseSA9IGNhdGFsb2d1ZUZhbWlseSh0YXJnZXQpO1xuICBjb25zdCBpbmRleCA9IGZhbWlseSA/IENPREVYX0ZBTUlMWV9PUkRFUi5pbmRleE9mKGZhbWlseSBhcyBNb2RlbEZhbWlseSkgOiAtMTtcbiAgcmV0dXJuIGluZGV4ID49IDAgPyBpbmRleCA6IENPREVYX0ZBTUlMWV9PUkRFUi5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIGNvZGV4VmVyc2lvbih0YXJnZXQ6IE1vZGVsVGFyZ2V0KTogcmVhZG9ubHkgbnVtYmVyW10ge1xuICByZXR1cm4gdmVyc2lvblR1cGxlKHRhcmdldC5kaXNwbGF5TmFtZSk7XG59XG5cbmZ1bmN0aW9uIGNvZGV4Q2xhc3NSYW5rKHRhcmdldDogTW9kZWxUYXJnZXQpOiBudW1iZXIge1xuICBjb25zdCBtb2RlbENsYXNzID0gdGFyZ2V0LmVuZHBvaW50Py5jbGFzcztcbiAgY29uc3QgaW5kZXggPSBtb2RlbENsYXNzID8gQ0hBVF9DTEFTU19PUkRFUi5pbmRleE9mKG1vZGVsQ2xhc3MpIDogLTE7XG4gIHJldHVybiBpbmRleCA+PSAwID8gaW5kZXggOiBDSEFUX0NMQVNTX09SREVSLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBPcmRlciBsaXN0ZWQgbW9kZWxzIGluIHRocmVlIGdyb3VwczogbWFqb3ItcHJvdmlkZXIgY2hhdCBmYW1pbGllcywgdGhlXG4gKiByZW1haW5pbmcgY2hhdCBtb2RlbHMsIHRoZW4gZW1iZWRkaW5ncy4gRmFtaWxpZXMga2VlcCBhIGZpeGVkIHByb3ZpZGVyXG4gKiBvcmRlcjsgZWFjaCBmYW1pbHkgYW5kIHRoZSBsYXRlciBncm91cHMgc29ydCBieSB0aGUgcHVibGlzaGVkIGxhYmVsXG4gKiAoYGRpc3BsYXlfbmFtZWAgZm9yIENvZGV4LCBgbmFtZWAgb3RoZXJ3aXNlKS4gTnVtZXJpYyBzZWdtZW50cyBzb3J0XG4gKiBuYXR1cmFsbHkgc28gXCJWZW8gMy4xXCIgcHJlY2VkZXMgXCJWZW8gMy4xMFwiLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQ2F0YWxvZ3VlVGFyZ2V0cyhcbiAgbGVmdDogTW9kZWxUYXJnZXQsXG4gIHJpZ2h0OiBNb2RlbFRhcmdldCxcbiAgbGFiZWw6ICh0YXJnZXQ6IE1vZGVsVGFyZ2V0KSA9PiBzdHJpbmcsXG4pOiBudW1iZXIge1xuICBjb25zdCBncm91cCA9IGNhdGFsb2d1ZUdyb3VwKGxlZnQpIC0gY2F0YWxvZ3VlR3JvdXAocmlnaHQpO1xuICBpZiAoZ3JvdXAgIT09IDApIHJldHVybiBncm91cDtcbiAgY29uc3QgbGVmdEZhbWlseSA9IGNhdGFsb2d1ZUZhbWlseShsZWZ0KTtcbiAgY29uc3QgcmlnaHRGYW1pbHkgPSBjYXRhbG9ndWVGYW1pbHkocmlnaHQpO1xuICBpZiAobGVmdEZhbWlseSAmJiByaWdodEZhbWlseSkge1xuICAgIGNvbnN0IGZhbWlseU9yZGVyID0gbW9kZWxGYW1pbHlSYW5rKGxlZnRGYW1pbHkpIC0gbW9kZWxGYW1pbHlSYW5rKHJpZ2h0RmFtaWx5KTtcbiAgICBpZiAoZmFtaWx5T3JkZXIgIT09IDApIHJldHVybiBmYW1pbHlPcmRlcjtcbiAgfVxuICByZXR1cm4gY29tcGFyZUNhdGFsb2d1ZUxhYmVsKGxhYmVsKGxlZnQpLCBsYWJlbChyaWdodCkpO1xufVxuXG5mdW5jdGlvbiBjYXRhbG9ndWVHcm91cCh0YXJnZXQ6IE1vZGVsVGFyZ2V0KTogbnVtYmVyIHtcbiAgaWYgKGlzRW1iZWRkaW5nVGFyZ2V0KHRhcmdldCkpIHJldHVybiAyO1xuICByZXR1cm4gY2F0YWxvZ3VlRmFtaWx5KHRhcmdldCkgPyAwIDogMTtcbn1cblxuY29uc3QgSURFTlRJVFlfUFJFRklYRVMgPSBuZXcgU2V0KFtcbiAgXCJkYXRhYnJpY2tzXCIsXG4gIFwic3lzdGVtXCIsXG4gIFwiYWlcIixcbiAgXCJtZXRhXCIsXG4gIFwiZ29vZ2xlXCIsXG4gIFwib3BlbmFpXCIsXG4gIFwiYW50aHJvcGljXCIsXG5dKTtcblxuZnVuY3Rpb24gY2F0YWxvZ3VlRmFtaWx5KHRhcmdldDogTW9kZWxUYXJnZXQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoaXNFbWJlZGRpbmdUYXJnZXQodGFyZ2V0KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBpZGVudGl0eSBvZiBbdGFyZ2V0LmRpc3BsYXlOYW1lLCB0YXJnZXQuaWQsIHRhcmdldC5lbmRwb2ludD8ubmFtZV0pIHtcbiAgICBpZiAoIWlkZW50aXR5KSBjb250aW51ZTtcbiAgICBjb25zdCBmYW1pbHkgPSBjYXRhbG9ndWVGYW1pbHlGcm9tSWRlbnRpdHkoaWRlbnRpdHkpO1xuICAgIGlmIChmYW1pbHkpIHJldHVybiBmYW1pbHk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2F0YWxvZ3VlRmFtaWx5RnJvbUlkZW50aXR5KGlkZW50aXR5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0b2tlbnMgPSBpZGVudGl0eS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9bYS16MC05XSsvZykgPz8gW107XG4gIGNvbnN0IHN0YXJ0ID0gdG9rZW5zLmZpbmQoKHRva2VuKSA9PiAhSURFTlRJVFlfUFJFRklYRVMuaGFzKHRva2VuKSk7XG4gIGlmICghc3RhcnQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChzdGFydCA9PT0gXCJ2ZW9cIikgcmV0dXJuIFwiZ2VtaW5pXCI7XG4gIGNvbnN0IGZhbWlseSA9IG1vZGVsRmFtaWx5KGlkZW50aXR5KTtcbiAgcmV0dXJuIGZhbWlseSAmJiBzdGFydCA9PT0gZmFtaWx5ID8gZmFtaWx5IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0VtYmVkZGluZ1RhcmdldCh0YXJnZXQ6IE1vZGVsVGFyZ2V0KTogYm9vbGVhbiB7XG4gIHJldHVybiB0YXJnZXQuY2FwYWJpbGl0aWVzLmVtYmVkZGluZ3MgPT09IHRydWUgfHwgdGFyZ2V0LmVuZHBvaW50Py50YXNrID09PSBcImxsbS92MS9lbWJlZGRpbmdzXCI7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVDYXRhbG9ndWVMYWJlbChsZWZ0OiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGVmdC5sb2NhbGVDb21wYXJlKHJpZ2h0LCB1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSwgc2Vuc2l0aXZpdHk6IFwiYmFzZVwiIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNDaGF0Q2xhc3ModGFyZ2V0OiBNb2RlbFRhcmdldCk6IGJvb2xlYW4ge1xuICBjb25zdCBtb2RlbENsYXNzID0gdGFyZ2V0LmVuZHBvaW50Py5jbGFzcztcbiAgcmV0dXJuIG1vZGVsQ2xhc3MgIT09IHVuZGVmaW5lZCAmJiBpc0NoYXRDbGFzcyhtb2RlbENsYXNzKTtcbn1cbiJdfQ==
package/lib/src/plugin.js CHANGED
@@ -13,15 +13,7 @@ export class ModelGatewayPlugin extends Plugin {
13
13
  gateway;
14
14
  constructor(config = {}) {
15
15
  super(config);
16
- this.gateway = new ModelGateway({
17
- ...(config.cacheTtlMs !== undefined ? { cacheTtlMs: config.cacheTtlMs } : {}),
18
- ...(config.overrides ? { overrides: config.overrides } : {}),
19
- ...(config.model ? { model: config.model } : {}),
20
- ...(config.modelClass ? { modelClass: config.modelClass } : {}),
21
- ...(config.preferSystemModels !== undefined
22
- ? { preferSystemModels: config.preferSystemModels }
23
- : {}),
24
- });
16
+ this.gateway = new ModelGateway(config);
25
17
  }
26
18
  injectRoutes(router) {
27
19
  this.route(router, {
@@ -72,4 +64,4 @@ export class ModelGatewayPlugin extends Plugin {
72
64
  }
73
65
  /** AppKit plugin factory for the Databricks model gateway. */
74
66
  export const modelGateway = toPlugin(ModelGatewayPlugin);
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLGNBQWMsRUFDZCxNQUFNLEVBQ04sUUFBUSxHQUdULE1BQU0sb0JBQW9CLENBQUM7QUFJNUIsT0FBTyxFQUFFLFlBQVksRUFBNEIsTUFBTSxjQUFjLENBQUM7QUFDdEUsT0FBTyxRQUFRLE1BQU0saUJBQWlCLENBQUMsT0FBTyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBS3BFLCtFQUErRTtBQUMvRSxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsTUFBZ0M7SUFDdEUsTUFBTSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQWlCLFFBQVEsQ0FBQyxDQUFDO0lBRTFDLE9BQU8sQ0FBZTtJQUV2QyxZQUFZLFNBQW1DLEVBQUU7UUFDL0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQztZQUM5QixHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzdFLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9ELEdBQUcsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEtBQUssU0FBUztnQkFDekMsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFO2dCQUNuRCxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ1IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVRLFlBQVksQ0FBQyxNQUFrQjtRQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNqQixJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRSxLQUFLO1lBQ2IsSUFBSSxFQUFFLFVBQVU7WUFDaEIsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1NBQzVELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2pCLElBQUksRUFBRSxRQUFRO1lBQ2QsTUFBTSxFQUFFLEtBQUs7WUFDYixJQUFJLEVBQUUsWUFBWTtZQUNsQixPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7U0FDL0QsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtZQUNuQyxDQUFDLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLGFBQWEsQ0FBQztZQUMxRCxDQUFDLFdBQVcsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLENBQUM7WUFDbEQsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixDQUFDO1lBQ2xELENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDO1NBQzdDLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNqQixJQUFJO2dCQUNKLE1BQU0sRUFBRSxNQUFNO2dCQUNkLElBQUk7Z0JBQ0osT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQzthQUM1RSxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQXdCLEVBQUUsUUFBMEI7UUFDL0QsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxLQUFLLENBQUMsU0FBUyxDQUNiLFFBQXdCLEVBQ3hCLE9BQXdCLEVBQ3hCLFFBQTBCO1FBRTFCLE1BQU0sYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFUSxPQUFPO1FBQ2QsT0FBTztZQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7SUFDSixDQUFDOztBQUdILDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcEtpdCBtb2RlbC1nYXRld2F5IHBsdWdpbi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lTWFuaWZlc3QsXG4gIFBsdWdpbixcbiAgdG9QbHVnaW4sXG4gIHR5cGUgQmFzZVBsdWdpbkNvbmZpZyxcbiAgdHlwZSBJQXBwUm91dGVyLFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgdHlwZSB7IENsaWVudFByb3RvY29sIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsLWdhdGV3YXlcIjtcbmltcG9ydCB0eXBlIGV4cHJlc3MgZnJvbSBcImV4cHJlc3NcIjtcblxuaW1wb3J0IHsgTW9kZWxHYXRld2F5LCB0eXBlIE1vZGVsR2F0ZXdheU9wdGlvbnMgfSBmcm9tIFwiLi9nYXRld2F5LnRzXCI7XG5pbXBvcnQgbWFuaWZlc3QgZnJvbSBcIi4vbWFuaWZlc3QuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9O1xuaW1wb3J0IHsgc2VuZEhlYWx0aCwgc2VuZEluZmVyZW5jZSwgc2VuZE1vZGVscyB9IGZyb20gXCIuL3JvdXRlcy50c1wiO1xuXG4vKiogQXBwS2l0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBtb2RlbC1nYXRld2F5IHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxHYXRld2F5UGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZywgTW9kZWxHYXRld2F5T3B0aW9ucyB7fVxuXG4vKiogQXBwS2l0IHBsdWdpbiBleHBvc2luZyBkeW5hbWljIG1vZGVsIGRpc2NvdmVyeSBhbmQgY29tcGF0aWJpbGl0eSByb3V0ZXMuICovXG5leHBvcnQgY2xhc3MgTW9kZWxHYXRld2F5UGx1Z2luIGV4dGVuZHMgUGx1Z2luPE1vZGVsR2F0ZXdheVBsdWdpbkNvbmZpZz4ge1xuICBzdGF0aWMgbWFuaWZlc3QgPSBkZWZpbmVNYW5pZmVzdDxcIm1vZGVsR2F0ZXdheVwiPihtYW5pZmVzdCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBnYXRld2F5OiBNb2RlbEdhdGV3YXk7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBNb2RlbEdhdGV3YXlQbHVnaW5Db25maWcgPSB7fSkge1xuICAgIHN1cGVyKGNvbmZpZyk7XG4gICAgdGhpcy5nYXRld2F5ID0gbmV3IE1vZGVsR2F0ZXdheSh7XG4gICAgICAuLi4oY29uZmlnLmNhY2hlVHRsTXMgIT09IHVuZGVmaW5lZCA/IHsgY2FjaGVUdGxNczogY29uZmlnLmNhY2hlVHRsTXMgfSA6IHt9KSxcbiAgICAgIC4uLihjb25maWcub3ZlcnJpZGVzID8geyBvdmVycmlkZXM6IGNvbmZpZy5vdmVycmlkZXMgfSA6IHt9KSxcbiAgICAgIC4uLihjb25maWcubW9kZWwgPyB7IG1vZGVsOiBjb25maWcubW9kZWwgfSA6IHt9KSxcbiAgICAgIC4uLihjb25maWcubW9kZWxDbGFzcyA/IHsgbW9kZWxDbGFzczogY29uZmlnLm1vZGVsQ2xhc3MgfSA6IHt9KSxcbiAgICAgIC4uLihjb25maWcucHJlZmVyU3lzdGVtTW9kZWxzICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB7IHByZWZlclN5c3RlbU1vZGVsczogY29uZmlnLnByZWZlclN5c3RlbU1vZGVscyB9XG4gICAgICAgIDoge30pLFxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgaW5qZWN0Um91dGVzKHJvdXRlcjogSUFwcFJvdXRlcik6IHZvaWQge1xuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcImhlYWx0aFwiLFxuICAgICAgbWV0aG9kOiBcImdldFwiLFxuICAgICAgcGF0aDogXCIvaGVhbHRoelwiLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKF9yZXF1ZXN0LCByZXNwb25zZSkgPT4gc2VuZEhlYWx0aChyZXNwb25zZSksXG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwibW9kZWxzXCIsXG4gICAgICBtZXRob2Q6IFwiZ2V0XCIsXG4gICAgICBwYXRoOiBcIi92MS9tb2RlbHNcIixcbiAgICAgIGhhbmRsZXI6IChyZXF1ZXN0LCByZXNwb25zZSkgPT4gdGhpcy5tb2RlbHMocmVxdWVzdCwgcmVzcG9uc2UpLFxuICAgIH0pO1xuICAgIGZvciAoY29uc3QgW25hbWUsIHBhdGgsIHByb3RvY29sXSBvZiBbXG4gICAgICBbXCJjaGF0Q29tcGxldGlvbnNcIiwgXCIvdjEvY2hhdC9jb21wbGV0aW9uc1wiLCBcIm9wZW5haS1jaGF0XCJdLFxuICAgICAgW1wicmVzcG9uc2VzXCIsIFwiL3YxL3Jlc3BvbnNlc1wiLCBcIm9wZW5haS1yZXNwb25zZXNcIl0sXG4gICAgICBbXCJtZXNzYWdlc1wiLCBcIi92MS9tZXNzYWdlc1wiLCBcImFudGhyb3BpYy1tZXNzYWdlc1wiXSxcbiAgICAgIFtcImVtYmVkZGluZ3NcIiwgXCIvdjEvZW1iZWRkaW5nc1wiLCBcIm9wZW5haS1lbWJlZGRpbmdzXCJdLFxuICAgIF0gYXMgY29uc3QpIHtcbiAgICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIGhhbmRsZXI6IChyZXF1ZXN0LCByZXNwb25zZSkgPT4gdGhpcy5pbmZlcmVuY2UocHJvdG9jb2wsIHJlcXVlc3QsIHJlc3BvbnNlKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZW5kIHRoZSBhY3RpdmUgcHJpbmNpcGFsJ3MgbW9kZWwgY2F0YWxvZ3VlLiAqL1xuICBhc3luYyBtb2RlbHMocmVxdWVzdDogZXhwcmVzcy5SZXF1ZXN0LCByZXNwb25zZTogZXhwcmVzcy5SZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHNlbmRNb2RlbHModGhpcy5nYXRld2F5LCByZXF1ZXN0LCByZXNwb25zZSk7XG4gIH1cblxuICAvKiogRXhlY3V0ZSBvbmUgY29tcGF0aWJpbGl0eSByZXF1ZXN0IGluIHRoZSBhY3RpdmUgQXBwS2l0IGlkZW50aXR5IHNjb3BlLiAqL1xuICBhc3luYyBpbmZlcmVuY2UoXG4gICAgcHJvdG9jb2w6IENsaWVudFByb3RvY29sLFxuICAgIHJlcXVlc3Q6IGV4cHJlc3MuUmVxdWVzdCxcbiAgICByZXNwb25zZTogZXhwcmVzcy5SZXNwb25zZSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc2VuZEluZmVyZW5jZSh0aGlzLmdhdGV3YXksIHByb3RvY29sLCByZXF1ZXN0LCByZXNwb25zZSk7XG4gIH1cblxuICAvKiogUmVmcmVzaCB0aGUgYWN0aXZlIHByaW5jaXBhbCdzIG1vZGVsIGNhdGFsb2d1ZS4gKi9cbiAgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmdhdGV3YXkucmVmcmVzaCgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZXhwb3J0cygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZWxzOiB0aGlzLm1vZGVscyxcbiAgICAgIGluZmVyZW5jZTogdGhpcy5pbmZlcmVuY2UsXG4gICAgICByZWZyZXNoOiB0aGlzLnJlZnJlc2gsXG4gICAgfTtcbiAgfVxufVxuXG4vKiogQXBwS2l0IHBsdWdpbiBmYWN0b3J5IGZvciB0aGUgRGF0YWJyaWNrcyBtb2RlbCBnYXRld2F5LiAqL1xuZXhwb3J0IGNvbnN0IG1vZGVsR2F0ZXdheSA9IHRvUGx1Z2luKE1vZGVsR2F0ZXdheVBsdWdpbik7XG4iXX0=
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLGNBQWMsRUFDZCxNQUFNLEVBQ04sUUFBUSxHQUdULE1BQU0sb0JBQW9CLENBQUM7QUFJNUIsT0FBTyxFQUFFLFlBQVksRUFBNEIsTUFBTSxjQUFjLENBQUM7QUFDdEUsT0FBTyxRQUFRLE1BQU0saUJBQWlCLENBQUMsT0FBTyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBS3BFLCtFQUErRTtBQUMvRSxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsTUFBZ0M7SUFDdEUsTUFBTSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQWlCLFFBQVEsQ0FBQyxDQUFDO0lBRTFDLE9BQU8sQ0FBZTtJQUV2QyxZQUFZLFNBQW1DLEVBQUU7UUFDL0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRVEsWUFBWSxDQUFDLE1BQWtCO1FBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2pCLElBQUksRUFBRSxRQUFRO1lBQ2QsTUFBTSxFQUFFLEtBQUs7WUFDYixJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7U0FDNUQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDakIsSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUUsS0FBSztZQUNiLElBQUksRUFBRSxZQUFZO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztTQUMvRCxDQUFDLENBQUM7UUFDSCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQ25DLENBQUMsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsYUFBYSxDQUFDO1lBQzFELENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQztZQUNsRCxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLENBQUM7WUFDbEQsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUM7U0FDN0MsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pCLElBQUk7Z0JBQ0osTUFBTSxFQUFFLE1BQU07Z0JBQ2QsSUFBSTtnQkFDSixPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDO2FBQzVFLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsbURBQW1EO0lBQ25ELEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBd0IsRUFBRSxRQUEwQjtRQUMvRCxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLEtBQUssQ0FBQyxTQUFTLENBQ2IsUUFBd0IsRUFDeEIsT0FBd0IsRUFDeEIsUUFBMEI7UUFFMUIsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVRLE9BQU87UUFDZCxPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQztJQUNKLENBQUM7O0FBR0gsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwS2l0IG1vZGVsLWdhdGV3YXkgcGx1Z2luLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBkZWZpbmVNYW5pZmVzdCxcbiAgUGx1Z2luLFxuICB0b1BsdWdpbixcbiAgdHlwZSBCYXNlUGx1Z2luQ29uZmlnLFxuICB0eXBlIElBcHBSb3V0ZXIsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50UHJvdG9jb2wgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwtZ2F0ZXdheVwiO1xuaW1wb3J0IHR5cGUgZXhwcmVzcyBmcm9tIFwiZXhwcmVzc1wiO1xuXG5pbXBvcnQgeyBNb2RlbEdhdGV3YXksIHR5cGUgTW9kZWxHYXRld2F5T3B0aW9ucyB9IGZyb20gXCIuL2dhdGV3YXkudHNcIjtcbmltcG9ydCBtYW5pZmVzdCBmcm9tIFwiLi9tYW5pZmVzdC5qc29uXCIgd2l0aCB7IHR5cGU6IFwianNvblwiIH07XG5pbXBvcnQgeyBzZW5kSGVhbHRoLCBzZW5kSW5mZXJlbmNlLCBzZW5kTW9kZWxzIH0gZnJvbSBcIi4vcm91dGVzLnRzXCI7XG5cbi8qKiBBcHBLaXQgY29uZmlndXJhdGlvbiBmb3IgdGhlIG1vZGVsLWdhdGV3YXkgcGx1Z2luLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbEdhdGV3YXlQbHVnaW5Db25maWcgZXh0ZW5kcyBCYXNlUGx1Z2luQ29uZmlnLCBNb2RlbEdhdGV3YXlPcHRpb25zIHt9XG5cbi8qKiBBcHBLaXQgcGx1Z2luIGV4cG9zaW5nIGR5bmFtaWMgbW9kZWwgZGlzY292ZXJ5IGFuZCBjb21wYXRpYmlsaXR5IHJvdXRlcy4gKi9cbmV4cG9ydCBjbGFzcyBNb2RlbEdhdGV3YXlQbHVnaW4gZXh0ZW5kcyBQbHVnaW48TW9kZWxHYXRld2F5UGx1Z2luQ29uZmlnPiB7XG4gIHN0YXRpYyBtYW5pZmVzdCA9IGRlZmluZU1hbmlmZXN0PFwibW9kZWxHYXRld2F5XCI+KG1hbmlmZXN0KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGdhdGV3YXk6IE1vZGVsR2F0ZXdheTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IE1vZGVsR2F0ZXdheVBsdWdpbkNvbmZpZyA9IHt9KSB7XG4gICAgc3VwZXIoY29uZmlnKTtcbiAgICB0aGlzLmdhdGV3YXkgPSBuZXcgTW9kZWxHYXRld2F5KGNvbmZpZyk7XG4gIH1cblxuICBvdmVycmlkZSBpbmplY3RSb3V0ZXMocm91dGVyOiBJQXBwUm91dGVyKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwiaGVhbHRoXCIsXG4gICAgICBtZXRob2Q6IFwiZ2V0XCIsXG4gICAgICBwYXRoOiBcIi9oZWFsdGh6XCIsXG4gICAgICBoYW5kbGVyOiBhc3luYyAoX3JlcXVlc3QsIHJlc3BvbnNlKSA9PiBzZW5kSGVhbHRoKHJlc3BvbnNlKSxcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgbmFtZTogXCJtb2RlbHNcIixcbiAgICAgIG1ldGhvZDogXCJnZXRcIixcbiAgICAgIHBhdGg6IFwiL3YxL21vZGVsc1wiLFxuICAgICAgaGFuZGxlcjogKHJlcXVlc3QsIHJlc3BvbnNlKSA9PiB0aGlzLm1vZGVscyhyZXF1ZXN0LCByZXNwb25zZSksXG4gICAgfSk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgcGF0aCwgcHJvdG9jb2xdIG9mIFtcbiAgICAgIFtcImNoYXRDb21wbGV0aW9uc1wiLCBcIi92MS9jaGF0L2NvbXBsZXRpb25zXCIsIFwib3BlbmFpLWNoYXRcIl0sXG4gICAgICBbXCJyZXNwb25zZXNcIiwgXCIvdjEvcmVzcG9uc2VzXCIsIFwib3BlbmFpLXJlc3BvbnNlc1wiXSxcbiAgICAgIFtcIm1lc3NhZ2VzXCIsIFwiL3YxL21lc3NhZ2VzXCIsIFwiYW50aHJvcGljLW1lc3NhZ2VzXCJdLFxuICAgICAgW1wiZW1iZWRkaW5nc1wiLCBcIi92MS9lbWJlZGRpbmdzXCIsIFwib3BlbmFpLWVtYmVkZGluZ3NcIl0sXG4gICAgXSBhcyBjb25zdCkge1xuICAgICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbWV0aG9kOiBcInBvc3RcIixcbiAgICAgICAgcGF0aCxcbiAgICAgICAgaGFuZGxlcjogKHJlcXVlc3QsIHJlc3BvbnNlKSA9PiB0aGlzLmluZmVyZW5jZShwcm90b2NvbCwgcmVxdWVzdCwgcmVzcG9uc2UpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNlbmQgdGhlIGFjdGl2ZSBwcmluY2lwYWwncyBtb2RlbCBjYXRhbG9ndWUuICovXG4gIGFzeW5jIG1vZGVscyhyZXF1ZXN0OiBleHByZXNzLlJlcXVlc3QsIHJlc3BvbnNlOiBleHByZXNzLlJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc2VuZE1vZGVscyh0aGlzLmdhdGV3YXksIHJlcXVlc3QsIHJlc3BvbnNlKTtcbiAgfVxuXG4gIC8qKiBFeGVjdXRlIG9uZSBjb21wYXRpYmlsaXR5IHJlcXVlc3QgaW4gdGhlIGFjdGl2ZSBBcHBLaXQgaWRlbnRpdHkgc2NvcGUuICovXG4gIGFzeW5jIGluZmVyZW5jZShcbiAgICBwcm90b2NvbDogQ2xpZW50UHJvdG9jb2wsXG4gICAgcmVxdWVzdDogZXhwcmVzcy5SZXF1ZXN0LFxuICAgIHJlc3BvbnNlOiBleHByZXNzLlJlc3BvbnNlLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzZW5kSW5mZXJlbmNlKHRoaXMuZ2F0ZXdheSwgcHJvdG9jb2wsIHJlcXVlc3QsIHJlc3BvbnNlKTtcbiAgfVxuXG4gIC8qKiBSZWZyZXNoIHRoZSBhY3RpdmUgcHJpbmNpcGFsJ3MgbW9kZWwgY2F0YWxvZ3VlLiAqL1xuICBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZ2F0ZXdheS5yZWZyZXNoKCk7XG4gIH1cblxuICBvdmVycmlkZSBleHBvcnRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlbHM6IHRoaXMubW9kZWxzLFxuICAgICAgaW5mZXJlbmNlOiB0aGlzLmluZmVyZW5jZSxcbiAgICAgIHJlZnJlc2g6IHRoaXMucmVmcmVzaCxcbiAgICB9O1xuICB9XG59XG5cbi8qKiBBcHBLaXQgcGx1Z2luIGZhY3RvcnkgZm9yIHRoZSBEYXRhYnJpY2tzIG1vZGVsIGdhdGV3YXkuICovXG5leHBvcnQgY29uc3QgbW9kZWxHYXRld2F5ID0gdG9QbHVnaW4oTW9kZWxHYXRld2F5UGx1Z2luKTtcbiJdfQ==
@@ -115,6 +115,8 @@ export class DatabricksModelRegistry {
115
115
  customTools: published.applyPatch || endpoint.name.includes("codex"),
116
116
  structuredOutput: true,
117
117
  webSearch: published.webSearch,
118
+ imageInput: published.imageInput,
119
+ applyPatch: published.applyPatch,
118
120
  };
119
121
  const aliases = new Set([
120
122
  endpoint.name,
@@ -177,4 +179,4 @@ function matchesResolveOptions(target, options) {
177
179
  return target.capabilities.chat;
178
180
  return true;
179
181
  }
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxHQUVWLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFDTCxVQUFVLEdBR1gsTUFBTSx5QkFBeUIsQ0FBQztBQU9qQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUNwQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUM7QUE0QjNELG9FQUFvRTtBQUNwRSxNQUFNLE9BQU8sdUJBQXVCO0lBQ2pCLEtBQUssQ0FBUztJQUNkLFNBQVMsQ0FBcUM7SUFDOUMsa0JBQWtCLENBQVU7SUFDNUIsTUFBTSxDQUE4QjtJQUVyRCxZQUFZLFVBQWdDLEVBQUU7UUFDNUMsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUM7UUFDOUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDN0UsTUFBTSxTQUFTLEdBQUcsTUFBTSxZQUFZLENBQUMsb0JBQW9CLENBQ3ZELE9BQU8sQ0FBQyxNQUFNLEVBQ2QsT0FBTyxDQUFDLElBQUksRUFDWixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUN0QyxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUU7WUFDL0IsYUFBYSxFQUFFLFNBQVMsQ0FBQyxNQUFNO1lBQy9CLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixXQUFXLEVBQUUsT0FBTyxDQUFDLE1BQU07U0FDNUIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQ1gsS0FBeUIsRUFDekIsVUFBdUMsRUFBRTtRQUV6QyxNQUFNLFNBQVMsR0FBRyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVFLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUNYLFNBQVMsS0FBSyxTQUFTO1lBQ3JCLENBQUMsQ0FBQyxTQUFTO1lBQ1gsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNULE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQ2pGLENBQUM7UUFDUixNQUFNLFVBQVUsR0FDZCxTQUFTLEtBQUssU0FBUztZQUNyQixDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2pCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQ3RGLENBQ0YsQ0FBQztRQUNSLE1BQU0sS0FBSyxHQUFHLE9BQU8sSUFBSSxVQUFVLENBQUM7UUFDcEMsSUFBSSxLQUFLLElBQUkscUJBQXFCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsT0FBTzthQUN0QixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7YUFDaEMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFzQyxFQUFFLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQ3JDLFNBQVMsRUFDVDtZQUNFLEdBQUcsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNELEdBQUcsT0FBTztTQUNYLEVBQ0Q7WUFDRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1NBQzVDLENBQ0YsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlFLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUU7WUFDbkMsU0FBUztZQUNULFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNwQixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBYTtRQUN4QixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sU0FBUyxHQUFHLE9BQU87YUFDdEIsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2FBQ2hDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBc0MsRUFBRSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUNwRixNQUFNLE1BQU0sR0FBRztZQUNiLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FDdkIsU0FBUyxFQUNULEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUNqQjtnQkFDRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO2FBQzVDLENBQ0Y7WUFDRCxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQ3ZCLFNBQVMsRUFDVDtnQkFDRSxNQUFNLEVBQUUsS0FBSztnQkFDYixVQUFVLEVBQUUsVUFBVSxDQUFDLFNBQVM7YUFDakMsRUFDRDtnQkFDRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO2FBQzVDLENBQ0Y7U0FDRixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxPQUFPLE1BQU07YUFDVixHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM5QyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQXlCLEVBQUUsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO2FBQy9ELE1BQU0sQ0FDTCxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLENBQzNGLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sWUFBWSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFDRCxNQUFNLFlBQVksQ0FBQyxvQkFBb0IsQ0FDckMsT0FBTyxDQUFDLE1BQU0sRUFDZCxPQUFPLENBQUMsSUFBSSxFQUNaLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQ3RDLENBQUM7UUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTyxNQUFNLENBQUMsUUFBZ0M7UUFDN0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxLQUFLLEtBQUssSUFBSSxNQUFNLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sVUFBVSxHQUNkLFFBQVEsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDO1FBQ25GLE1BQU0sWUFBWSxHQUFzQjtZQUN0QyxTQUFTLEVBQUUsQ0FBQyxVQUFVLElBQUksQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQztZQUMvRCxhQUFhLEVBQUUsQ0FBQyxVQUFVLElBQUksQ0FBQyxZQUFZO1lBQzNDLElBQUksRUFBRSxDQUFDLFVBQVU7WUFDakIsU0FBUyxFQUFFLE1BQU0sS0FBSyxRQUFRO1lBQzlCLFVBQVU7WUFDVixjQUFjLEVBQ1osQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssUUFBUTtZQUN4RixLQUFLLEVBQUUsUUFBUSxDQUFDLGFBQWEsS0FBSyxJQUFJO1lBQ3RDLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxTQUFTO1lBQzVFLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSTtZQUM5QyxXQUFXLEVBQUUsU0FBUyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDcEUsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVM7U0FDL0IsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUNyQjtZQUNFLFFBQVEsQ0FBQyxJQUFJO1lBQ2IsUUFBUSxDQUFDLFdBQVc7WUFDcEIsUUFBUSxDQUFDLGdCQUFnQjtZQUN6QixnQkFBZ0I7WUFDaEIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1NBQzlDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQzdELENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDbEMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNaLFNBQVMsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUk7WUFDakMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FDMUQsQ0FBQztRQUNGLE9BQU87WUFDTCxFQUFFLEVBQUUsUUFBUSxDQUFDLElBQUk7WUFDakIsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7WUFDckIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLElBQUk7WUFDbEQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakQsUUFBUTtZQUNSLFlBQVksRUFBRSxFQUFFLEdBQUcsWUFBWSxFQUFFLEdBQUcsUUFBUSxFQUFFLFlBQVksRUFBRTtZQUM1RCxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsZ0JBQWdCLElBQUksRUFBRTtTQUNsRCxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUFPO1FBQ25CLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsT0FBTyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFFRCxTQUFTLGdCQUFnQixDQUFDLE9BQXdCLEVBQUUsS0FBYTtJQUMvRCxPQUFPO1FBQ0wsS0FBSztRQUNMLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNqRSxDQUFDO0FBQ0osQ0FBQztBQUVELEtBQUssVUFBVSxlQUFlO0lBQzVCLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7SUFDdEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEUsT0FBTztRQUNMLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN0QixJQUFJO1FBQ0osUUFBUSxFQUFFLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhO0tBQ3ZFLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFhO0lBQ3JDLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBSyxHQUFHLG9CQUFvQjtJQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLE1BQW1CLEVBQUUsT0FBb0M7SUFDdEYsSUFBSSxPQUFPLENBQUMsYUFBYSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdEUsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztJQUN2RixJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDdEUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXF1ZXN0LXNjb3BlZCBEYXRhYnJpY2tzIG1vZGVsIGRpc2NvdmVyeSBmb3IgdGhlIEFwcEtpdCBnYXRld2F5LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Db250ZXh0LCB0eXBlIFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7XG4gIG1ldGFkYXRhLFxuICBtb2RlbENhdGFsb2csXG4gIHBvbGljeSxcbiAgc2VsZWN0aW9uLFxuICB0eXBlIExpc3RTZXJ2aW5nRW5kcG9pbnRzT3B0aW9ucyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmltcG9ydCB7IGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBNb2RlbENsYXNzLFxuICB0eXBlIFJlc29sdmVNb2RlbElucHV0LFxuICB0eXBlIFNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuICBNb2RlbENhcGFiaWxpdGllcyxcbiAgTW9kZWxDYXBhYmlsaXR5T3ZlcnJpZGUsXG4gIE1vZGVsVGFyZ2V0LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwtZ2F0ZXdheVwiO1xuXG5jb25zdCBERUZBVUxUX0NBQ0hFX1RUTF9NUyA9IDYwXzAwMDtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJhcHBraXQvbW9kZWwtZ2F0ZXdheS9yZWdpc3RyeVwiKTtcblxuLyoqIFJlc29sdXRpb24gY29udHJvbHMgcGFzc2VkIHRocm91Z2ggdG8gdGhlIG1vZGVsIHBvbGljeSBvd25lci4gKi9cbmV4cG9ydCB0eXBlIE1vZGVsUmVnaXN0cnlSZXNvbHZlT3B0aW9ucyA9IFBpY2s8UmVzb2x2ZU1vZGVsSW5wdXQsIFwibW9kZWxDbGFzc1wiIHwgXCJyZXF1aXJlc1Rvb2xzXCI+O1xuXG4vKiogRHluYW1pYyBtb2RlbCBjYXRhbG9ndWUgdXNlZCBieSByZXF1ZXN0IHJvdXRpbmcgYW5kIG1vZGVsLWxpc3QgcmVzcG9uc2VzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbFJlZ2lzdHJ5IHtcbiAgbGlzdCgpOiBQcm9taXNlPE1vZGVsVGFyZ2V0W10+O1xuICBzZWFyY2gocXVlcnk6IHN0cmluZyk6IFByb21pc2U8TW9kZWxUYXJnZXRbXT47XG4gIHJlc29sdmUobW9kZWw/OiBzdHJpbmcsIG9wdGlvbnM/OiBNb2RlbFJlZ2lzdHJ5UmVzb2x2ZU9wdGlvbnMpOiBQcm9taXNlPE1vZGVsVGFyZ2V0IHwgdW5kZWZpbmVkPjtcbiAgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKiogQ29uZmlndXJhdGlvbiBmb3Ige0BsaW5rIERhdGFicmlja3NNb2RlbFJlZ2lzdHJ5fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxSZWdpc3RyeU9wdGlvbnMge1xuICByZWFkb25seSB0dGxNcz86IG51bWJlcjtcbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogcmVhZG9ubHkgTW9kZWxDYXBhYmlsaXR5T3ZlcnJpZGVbXTtcbiAgcmVhZG9ubHkgcHJlZmVyU3lzdGVtTW9kZWxzPzogYm9vbGVhbjtcbiAgLyoqIERpc2NvdmVyIG1vZGVscyB3aXRoIHRoaXMgY2xpZW50IGluc3RlYWQgb2YgdGhlIEFwcEtpdCBleGVjdXRpb24gY29udGV4dC4gKi9cbiAgcmVhZG9ubHkgY2xpZW50PzogV29ya3NwYWNlQ2xpZW50O1xufVxuXG5pbnRlcmZhY2UgUmVnaXN0cnlDb250ZXh0IHtcbiAgcmVhZG9ubHkgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQ7XG4gIHJlYWRvbmx5IGhvc3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgaWRlbnRpdHk/OiBzdHJpbmc7XG59XG5cbi8qKiBNb2RlbCByZWdpc3RyeSBiYWNrZWQgYnkgdGhlIGFjdGl2ZSBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQuICovXG5leHBvcnQgY2xhc3MgRGF0YWJyaWNrc01vZGVsUmVnaXN0cnkgaW1wbGVtZW50cyBNb2RlbFJlZ2lzdHJ5IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0dGxNczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG92ZXJyaWRlczogcmVhZG9ubHkgTW9kZWxDYXBhYmlsaXR5T3ZlcnJpZGVbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVmZXJTeXN0ZW1Nb2RlbHM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTW9kZWxSZWdpc3RyeU9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMudHRsTXMgPSBwb3NpdGl2ZVR0bChvcHRpb25zLnR0bE1zKTtcbiAgICB0aGlzLm92ZXJyaWRlcyA9IG9wdGlvbnMub3ZlcnJpZGVzID8/IFtdO1xuICAgIHRoaXMucHJlZmVyU3lzdGVtTW9kZWxzID0gb3B0aW9ucy5wcmVmZXJTeXN0ZW1Nb2RlbHMgPz8gZmFsc2U7XG4gICAgdGhpcy5jbGllbnQgPSBvcHRpb25zLmNsaWVudDtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoKTogUHJvbWlzZTxNb2RlbFRhcmdldFtdPiB7XG4gICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMuY29udGV4dCgpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImxvYWRpbmcgY2F0YWxvZ3VlXCIsIHsgaG9zdDogY29udGV4dC5ob3N0LCB0dGxNczogdGhpcy50dGxNcyB9KTtcbiAgICBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBtb2RlbENhdGFsb2cubGlzdFNlcnZpbmdFbmRwb2ludHMoXG4gICAgICBjb250ZXh0LmNsaWVudCxcbiAgICAgIGNvbnRleHQuaG9zdCxcbiAgICAgIGNhdGFsb2d1ZU9wdGlvbnMoY29udGV4dCwgdGhpcy50dGxNcyksXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRzID0gZW5kcG9pbnRzLm1hcCgoZW5kcG9pbnQpID0+IHRoaXMudGFyZ2V0KGVuZHBvaW50KSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwibG9hZGVkIGNhdGFsb2d1ZVwiLCB7XG4gICAgICBlbmRwb2ludENvdW50OiBlbmRwb2ludHMubGVuZ3RoLFxuICAgICAgaG9zdDogY29udGV4dC5ob3N0LFxuICAgICAgdGFyZ2V0Q291bnQ6IHRhcmdldHMubGVuZ3RoLFxuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXRzO1xuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZShcbiAgICBtb2RlbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIG9wdGlvbnM6IE1vZGVsUmVnaXN0cnlSZXNvbHZlT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPE1vZGVsVGFyZ2V0IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgcmVxdWVzdGVkID0gbW9kZWwgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHVucXVhbGlmaWVkTW9kZWwobW9kZWwpO1xuICAgIGNvbnN0IHRhcmdldHMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICBjb25zdCBleGFjdElkID1cbiAgICAgIHJlcXVlc3RlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogdGFyZ2V0cy5maW5kKFxuICAgICAgICAgICAgKHRhcmdldCkgPT5cbiAgICAgICAgICAgICAgdGFyZ2V0LmlkLmxvY2FsZUNvbXBhcmUocmVxdWVzdGVkLCB1bmRlZmluZWQsIHsgc2Vuc2l0aXZpdHk6IFwiYWNjZW50XCIgfSkgPT09IDAsXG4gICAgICAgICAgKTtcbiAgICBjb25zdCBleGFjdEFsaWFzID1cbiAgICAgIHJlcXVlc3RlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogdGFyZ2V0cy5maW5kKCh0YXJnZXQpID0+XG4gICAgICAgICAgICB0YXJnZXQuYWxpYXNlcy5zb21lKFxuICAgICAgICAgICAgICAoYWxpYXMpID0+IGFsaWFzLmxvY2FsZUNvbXBhcmUocmVxdWVzdGVkLCB1bmRlZmluZWQsIHsgc2Vuc2l0aXZpdHk6IFwiYWNjZW50XCIgfSkgPT09IDAsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgY29uc3QgZXhhY3QgPSBleGFjdElkID8/IGV4YWN0QWxpYXM7XG4gICAgaWYgKGV4YWN0ICYmIG1hdGNoZXNSZXNvbHZlT3B0aW9ucyhleGFjdCwgb3B0aW9ucykpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInJlc29sdmVkIGV4YWN0IG1vZGVsXCIsIHsgcmVxdWVzdGVkLCByZXNvbHZlZDogZXhhY3QuaWQgfSk7XG4gICAgICByZXR1cm4gZXhhY3Q7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnRzID0gdGFyZ2V0c1xuICAgICAgLm1hcCgodGFyZ2V0KSA9PiB0YXJnZXQuZW5kcG9pbnQpXG4gICAgICAuZmlsdGVyKChlbmRwb2ludCk6IGVuZHBvaW50IGlzIFNlcnZpbmdFbmRwb2ludFN1bW1hcnkgPT4gZW5kcG9pbnQgIT09IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzZWxlY3Rpb24ucmVzb2x2ZU1vZGVsKFxuICAgICAgZW5kcG9pbnRzLFxuICAgICAge1xuICAgICAgICAuLi4ocmVxdWVzdGVkICE9PSB1bmRlZmluZWQgPyB7IGV4cGxpY2l0OiByZXF1ZXN0ZWQgfSA6IHt9KSxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByZWZlclN5c3RlbU1vZGVsczogdGhpcy5wcmVmZXJTeXN0ZW1Nb2RlbHMsXG4gICAgICB9LFxuICAgICk7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0cy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PT0gcmVzb2x2ZWQubW9kZWxJZCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmVzb2x2ZWQgZnV6enkgbW9kZWxcIiwge1xuICAgICAgcmVxdWVzdGVkLFxuICAgICAgcmVzb2x2ZWQ6IHRhcmdldD8uaWQsXG4gICAgICBzb3VyY2U6IHJlc29sdmVkLnNvdXJjZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgYXN5bmMgc2VhcmNoKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPE1vZGVsVGFyZ2V0W10+IHtcbiAgICBjb25zdCB0YXJnZXRzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgY29uc3QgYnlJZCA9IG5ldyBNYXAodGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4gW3RhcmdldC5pZCwgdGFyZ2V0XSkpO1xuICAgIGNvbnN0IGVuZHBvaW50cyA9IHRhcmdldHNcbiAgICAgIC5tYXAoKHRhcmdldCkgPT4gdGFyZ2V0LmVuZHBvaW50KVxuICAgICAgLmZpbHRlcigoZW5kcG9pbnQpOiBlbmRwb2ludCBpcyBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5ID0+IGVuZHBvaW50ICE9PSB1bmRlZmluZWQpO1xuICAgIGNvbnN0IHJhbmtlZCA9IFtcbiAgICAgIC4uLnNlbGVjdGlvbi5sb29rdXBNb2RlbHMoXG4gICAgICAgIGVuZHBvaW50cyxcbiAgICAgICAgeyBzZWFyY2g6IHF1ZXJ5IH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcmVmZXJTeXN0ZW1Nb2RlbHM6IHRoaXMucHJlZmVyU3lzdGVtTW9kZWxzLFxuICAgICAgICB9LFxuICAgICAgKSxcbiAgICAgIC4uLnNlbGVjdGlvbi5sb29rdXBNb2RlbHMoXG4gICAgICAgIGVuZHBvaW50cyxcbiAgICAgICAge1xuICAgICAgICAgIHNlYXJjaDogcXVlcnksXG4gICAgICAgICAgbW9kZWxDbGFzczogTW9kZWxDbGFzcy5FbWJlZGRpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcmVmZXJTeXN0ZW1Nb2RlbHM6IHRoaXMucHJlZmVyU3lzdGVtTW9kZWxzLFxuICAgICAgICB9LFxuICAgICAgKSxcbiAgICBdLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiAobGVmdC5zY29yZSA/PyAwKSAtIChyaWdodC5zY29yZSA/PyAwKSk7XG4gICAgcmV0dXJuIHJhbmtlZFxuICAgICAgLm1hcCgoeyBlbmRwb2ludCB9KSA9PiBieUlkLmdldChlbmRwb2ludC5uYW1lKSlcbiAgICAgIC5maWx0ZXIoKHRhcmdldCk6IHRhcmdldCBpcyBNb2RlbFRhcmdldCA9PiB0YXJnZXQgIT09IHVuZGVmaW5lZClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh0YXJnZXQsIGluZGV4LCBhbGwpID0+IGFsbC5maW5kSW5kZXgoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09PSB0YXJnZXQuaWQpID09PSBpbmRleCxcbiAgICAgICk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCB0aGlzLmNvbnRleHQoKTtcbiAgICBsb2dnZXIuZGVidWcoXCJjbGVhcmluZyBjYXRhbG9ndWVcIiwgeyBob3N0OiBjb250ZXh0Lmhvc3QgfSk7XG4gICAgaWYgKGNvbnRleHQuaWRlbnRpdHkpIHtcbiAgICAgIGF3YWl0IG1vZGVsQ2F0YWxvZy5jbGVhclNlcnZpbmdFbmRwb2ludHNDYWNoZShjb250ZXh0Lmhvc3QsIGNvbnRleHQuaWRlbnRpdHkpO1xuICAgIH1cbiAgICBhd2FpdCBtb2RlbENhdGFsb2cubGlzdFNlcnZpbmdFbmRwb2ludHMoXG4gICAgICBjb250ZXh0LmNsaWVudCxcbiAgICAgIGNvbnRleHQuaG9zdCxcbiAgICAgIGNhdGFsb2d1ZU9wdGlvbnMoY29udGV4dCwgdGhpcy50dGxNcyksXG4gICAgKTtcbiAgICBsb2dnZXIuZGVidWcoXCJyZWZyZXNoZWQgY2F0YWxvZ3VlXCIsIHsgaG9zdDogY29udGV4dC5ob3N0IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0YXJnZXQoZW5kcG9pbnQ6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnkpOiBNb2RlbFRhcmdldCB7XG4gICAgY29uc3QgcHVibGlzaGVkID0gbWV0YWRhdGEubW9kZWxDYXBhYmlsaXRpZXNGb3IoZW5kcG9pbnQpO1xuICAgIGNvbnN0IGZhbWlseSA9IGVuZHBvaW50LmZhbWlseT8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBvcGVuQWlGYW1pbHkgPSBmYW1pbHkgPT09IFwiZ3B0XCIgfHwgZmFtaWx5ID09PSBcIm9wZW5haVwiIHx8IGVuZHBvaW50Lm5hbWUuaW5jbHVkZXMoXCJjb2RleFwiKTtcbiAgICBjb25zdCBtb2RlbFNlcnZpY2VOYW1lID0gcG9saWN5Lm1vZGVsU2VydmljZU5hbWUoZW5kcG9pbnQubW9kZWxTZXJ2aWNlTmFtZSk7XG4gICAgY29uc3QgZW1iZWRkaW5ncyA9XG4gICAgICBlbmRwb2ludC5jbGFzcyA9PT0gTW9kZWxDbGFzcy5FbWJlZGRpbmcgfHwgZW5kcG9pbnQudGFzayA9PT0gXCJsbG0vdjEvZW1iZWRkaW5nc1wiO1xuICAgIGNvbnN0IGNhcGFiaWxpdGllczogTW9kZWxDYXBhYmlsaXRpZXMgPSB7XG4gICAgICByZXNwb25zZXM6ICFlbWJlZGRpbmdzICYmIChvcGVuQWlGYW1pbHkgfHwgcHVibGlzaGVkLnJlc3BvbnNlcyksXG4gICAgICBvcGVuUmVzcG9uc2VzOiAhZW1iZWRkaW5ncyAmJiAhb3BlbkFpRmFtaWx5LFxuICAgICAgY2hhdDogIWVtYmVkZGluZ3MsXG4gICAgICBhbnRocm9waWM6IGZhbWlseSA9PT0gXCJjbGF1ZGVcIixcbiAgICAgIGVtYmVkZGluZ3MsXG4gICAgICBhaUdhdGV3YXlDb2RleDpcbiAgICAgICAgIWVtYmVkZGluZ3MgJiYgQm9vbGVhbihtb2RlbFNlcnZpY2VOYW1lKSAmJiBmYW1pbHkgIT09IFwiY2xhdWRlXCIgJiYgZmFtaWx5ICE9PSBcImdlbWluaVwiLFxuICAgICAgdG9vbHM6IGVuZHBvaW50LnN1cHBvcnRzVG9vbHMgPT09IHRydWUsXG4gICAgICByZWFzb25pbmc6IEJvb2xlYW4oZW5kcG9pbnQucmVhc29uaW5nRWZmb3J0cz8ubGVuZ3RoKSB8fCBwdWJsaXNoZWQucmVhc29uaW5nLFxuICAgICAgc3RyZWFtaW5nOiB0cnVlLFxuICAgICAgcGFyYWxsZWxUb29sczogZW5kcG9pbnQuc3VwcG9ydHNUb29scyA9PT0gdHJ1ZSxcbiAgICAgIGN1c3RvbVRvb2xzOiBwdWJsaXNoZWQuYXBwbHlQYXRjaCB8fCBlbmRwb2ludC5uYW1lLmluY2x1ZGVzKFwiY29kZXhcIiksXG4gICAgICBzdHJ1Y3R1cmVkT3V0cHV0OiB0cnVlLFxuICAgICAgd2ViU2VhcmNoOiBwdWJsaXNoZWQud2ViU2VhcmNoLFxuICAgIH07XG4gICAgY29uc3QgYWxpYXNlcyA9IG5ldyBTZXQoXG4gICAgICBbXG4gICAgICAgIGVuZHBvaW50Lm5hbWUsXG4gICAgICAgIGVuZHBvaW50LmRpc3BsYXlOYW1lLFxuICAgICAgICBlbmRwb2ludC5tb2RlbFNlcnZpY2VOYW1lLFxuICAgICAgICBtb2RlbFNlcnZpY2VOYW1lLFxuICAgICAgICAuLi5PYmplY3QudmFsdWVzKGVuZHBvaW50LnNlcnZpY2VOYW1lcyA/PyB7fSksXG4gICAgICBdLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gQm9vbGVhbih2YWx1ZT8udHJpbSgpKSksXG4gICAgKTtcbiAgICBjb25zdCBvdmVycmlkZSA9IHRoaXMub3ZlcnJpZGVzLmZpbmQoXG4gICAgICAoY2FuZGlkYXRlKSA9PlxuICAgICAgICBjYW5kaWRhdGUubW9kZWwgPT09IGVuZHBvaW50Lm5hbWUgfHxcbiAgICAgICAgWy4uLmFsaWFzZXNdLnNvbWUoKGFsaWFzKSA9PiBhbGlhcyA9PT0gY2FuZGlkYXRlLm1vZGVsKSxcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZW5kcG9pbnQubmFtZSxcbiAgICAgIGFsaWFzZXM6IFsuLi5hbGlhc2VzXSxcbiAgICAgIGRpc3BsYXlOYW1lOiBlbmRwb2ludC5kaXNwbGF5TmFtZSA/PyBlbmRwb2ludC5uYW1lLFxuICAgICAgLi4uKGVuZHBvaW50LmZhbWlseSA/IHsgZmFtaWx5OiBlbmRwb2ludC5mYW1pbHkgfSA6IHt9KSxcbiAgICAgIC4uLihtb2RlbFNlcnZpY2VOYW1lID8geyBtb2RlbFNlcnZpY2VOYW1lIH0gOiB7fSksXG4gICAgICBlbmRwb2ludCxcbiAgICAgIGNhcGFiaWxpdGllczogeyAuLi5jYXBhYmlsaXRpZXMsIC4uLm92ZXJyaWRlPy5jYXBhYmlsaXRpZXMgfSxcbiAgICAgIHJlYXNvbmluZ0VmZm9ydHM6IGVuZHBvaW50LnJlYXNvbmluZ0VmZm9ydHMgPz8gW10sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udGV4dCgpOiBQcm9taXNlPFJlZ2lzdHJ5Q29udGV4dD4ge1xuICAgIGlmICh0aGlzLmNsaWVudCkge1xuICAgICAgY29uc3QgaG9zdCA9IChhd2FpdCB0aGlzLmNsaWVudC5jb25maWcuZ2V0SG9zdCgpKS50b1N0cmluZygpO1xuICAgICAgcmV0dXJuIHsgY2xpZW50OiB0aGlzLmNsaWVudCwgaG9zdCB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVnaXN0cnlDb250ZXh0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2F0YWxvZ3VlT3B0aW9ucyhjb250ZXh0OiBSZWdpc3RyeUNvbnRleHQsIHR0bE1zOiBudW1iZXIpOiBMaXN0U2VydmluZ0VuZHBvaW50c09wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIHR0bE1zLFxuICAgIC4uLihjb250ZXh0LmlkZW50aXR5ID8geyBjYWNoZUlkZW50aXR5OiBjb250ZXh0LmlkZW50aXR5IH0gOiB7fSksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdHJ5Q29udGV4dCgpOiBQcm9taXNlPFJlZ2lzdHJ5Q29udGV4dD4ge1xuICBjb25zdCBjb250ZXh0ID0gZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICBjb25zdCBob3N0ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LmNvbmZpZy5nZXRIb3N0KCkpLnRvU3RyaW5nKCk7XG4gIHJldHVybiB7XG4gICAgY2xpZW50OiBjb250ZXh0LmNsaWVudCxcbiAgICBob3N0LFxuICAgIGlkZW50aXR5OiBcInVzZXJJZFwiIGluIGNvbnRleHQgPyBjb250ZXh0LnVzZXJJZCA6IGNvbnRleHQuc2VydmljZVVzZXJJZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW5xdWFsaWZpZWRNb2RlbChtb2RlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG1vZGVsLnRyaW0oKS5yZXBsYWNlKC9eKD86ZGJ4fGRhdGFicmlja3MpXFwvL2ksIFwiXCIpO1xufVxuXG5mdW5jdGlvbiBwb3NpdGl2ZVR0bCh2YWx1ZSA9IERFRkFVTFRfQ0FDSEVfVFRMX01TKTogbnVtYmVyIHtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodmFsdWUpIHx8IHZhbHVlIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNb2RlbCByZWdpc3RyeSB0dGxNcyBtdXN0IGJlIGEgcG9zaXRpdmUgZmluaXRlIG51bWJlclwiKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXNSZXNvbHZlT3B0aW9ucyh0YXJnZXQ6IE1vZGVsVGFyZ2V0LCBvcHRpb25zOiBNb2RlbFJlZ2lzdHJ5UmVzb2x2ZU9wdGlvbnMpOiBib29sZWFuIHtcbiAgaWYgKG9wdGlvbnMucmVxdWlyZXNUb29scyAmJiAhdGFyZ2V0LmNhcGFiaWxpdGllcy50b29scykgcmV0dXJuIGZhbHNlO1xuICBpZiAob3B0aW9ucy5tb2RlbENsYXNzID09PSBNb2RlbENsYXNzLkVtYmVkZGluZykgcmV0dXJuIHRhcmdldC5jYXBhYmlsaXRpZXMuZW1iZWRkaW5ncztcbiAgaWYgKG9wdGlvbnMubW9kZWxDbGFzcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGFyZ2V0LmNhcGFiaWxpdGllcy5jaGF0O1xuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxHQUVWLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFDTCxVQUFVLEdBR1gsTUFBTSx5QkFBeUIsQ0FBQztBQU9qQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUNwQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUM7QUE0QjNELG9FQUFvRTtBQUNwRSxNQUFNLE9BQU8sdUJBQXVCO0lBQ2pCLEtBQUssQ0FBUztJQUNkLFNBQVMsQ0FBcUM7SUFDOUMsa0JBQWtCLENBQVU7SUFDNUIsTUFBTSxDQUE4QjtJQUVyRCxZQUFZLFVBQWdDLEVBQUU7UUFDNUMsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUM7UUFDOUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUs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QztJQUNoRSxPQUFPO1FBQ0wsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLElBQUk7UUFDSixRQUFRLEVBQUUsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWE7S0FDdkUsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQWE7SUFDckMsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CO0lBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsTUFBbUIsRUFBRSxPQUFvQztJQUN0RixJQUFJLE9BQU8sQ0FBQyxhQUFhLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN0RSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLFNBQVM7UUFBRSxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO0lBQ3ZGLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztJQUN0RSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcXVlc3Qtc2NvcGVkIERhdGFicmlja3MgbW9kZWwgZGlzY292ZXJ5IGZvciB0aGUgQXBwS2l0IGdhdGV3YXkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGdldEV4ZWN1dGlvbkNvbnRleHQsIHR5cGUgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHtcbiAgbWV0YWRhdGEsXG4gIG1vZGVsQ2F0YWxvZyxcbiAgcG9saWN5LFxuICBzZWxlY3Rpb24sXG4gIHR5cGUgTGlzdFNlcnZpbmdFbmRwb2ludHNPcHRpb25zLFxufSBmcm9tIFwiQGRieC10b29scy9tb2RlbFwiO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIE1vZGVsQ2xhc3MsXG4gIHR5cGUgUmVzb2x2ZU1vZGVsSW5wdXQsXG4gIHR5cGUgU2VydmluZ0VuZHBvaW50U3VtbWFyeSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7XG4gIE1vZGVsQ2FwYWJpbGl0aWVzLFxuICBNb2RlbENhcGFiaWxpdHlPdmVycmlkZSxcbiAgTW9kZWxUYXJnZXQsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbC1nYXRld2F5XCI7XG5cbmNvbnN0IERFRkFVTFRfQ0FDSEVfVFRMX01TID0gNjBfMDAwO1xuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImFwcGtpdC9tb2RlbC1nYXRld2F5L3JlZ2lzdHJ5XCIpO1xuXG4vKiogUmVzb2x1dGlvbiBjb250cm9scyBwYXNzZWQgdGhyb3VnaCB0byB0aGUgbW9kZWwgcG9saWN5IG93bmVyLiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxSZWdpc3RyeVJlc29sdmVPcHRpb25zID0gUGljazxSZXNvbHZlTW9kZWxJbnB1dCwgXCJtb2RlbENsYXNzXCIgfCBcInJlcXVpcmVzVG9vbHNcIj47XG5cbi8qKiBEeW5hbWljIG1vZGVsIGNhdGFsb2d1ZSB1c2VkIGJ5IHJlcXVlc3Qgcm91dGluZyBhbmQgbW9kZWwtbGlzdCByZXNwb25zZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsUmVnaXN0cnkge1xuICBsaXN0KCk6IFByb21pc2U8TW9kZWxUYXJnZXRbXT47XG4gIHNlYXJjaChxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxNb2RlbFRhcmdldFtdPjtcbiAgcmVzb2x2ZShtb2RlbD86IHN0cmluZywgb3B0aW9ucz86IE1vZGVsUmVnaXN0cnlSZXNvbHZlT3B0aW9ucyk6IFByb21pc2U8TW9kZWxUYXJnZXQgfCB1bmRlZmluZWQ+O1xuICByZWZyZXNoKCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKiBDb25maWd1cmF0aW9uIGZvciB7QGxpbmsgRGF0YWJyaWNrc01vZGVsUmVnaXN0cnl9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbFJlZ2lzdHJ5T3B0aW9ucyB7XG4gIHJlYWRvbmx5IHR0bE1zPzogbnVtYmVyO1xuICByZWFkb25seSBvdmVycmlkZXM/OiByZWFkb25seSBNb2RlbENhcGFiaWxpdHlPdmVycmlkZVtdO1xuICByZWFkb25seSBwcmVmZXJTeXN0ZW1Nb2RlbHM/OiBib29sZWFuO1xuICAvKiogRGlzY292ZXIgbW9kZWxzIHdpdGggdGhpcyBjbGllbnQgaW5zdGVhZCBvZiB0aGUgQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0LiAqL1xuICByZWFkb25seSBjbGllbnQ/OiBXb3Jrc3BhY2VDbGllbnQ7XG59XG5cbmludGVyZmFjZSBSZWdpc3RyeUNvbnRleHQge1xuICByZWFkb25seSBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudDtcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBpZGVudGl0eT86IHN0cmluZztcbn1cblxuLyoqIE1vZGVsIHJlZ2lzdHJ5IGJhY2tlZCBieSB0aGUgYWN0aXZlIEFwcEtpdCBleGVjdXRpb24gY29udGV4dC4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhYnJpY2tzTW9kZWxSZWdpc3RyeSBpbXBsZW1lbnRzIE1vZGVsUmVnaXN0cnkge1xuICBwcml2YXRlIHJlYWRvbmx5IHR0bE1zOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3ZlcnJpZGVzOiByZWFkb25seSBNb2RlbENhcGFiaWxpdHlPdmVycmlkZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHByZWZlclN5c3RlbU1vZGVsczogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNb2RlbFJlZ2lzdHJ5T3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy50dGxNcyA9IHBvc2l0aXZlVHRsKG9wdGlvbnMudHRsTXMpO1xuICAgIHRoaXMub3ZlcnJpZGVzID0gb3B0aW9ucy5vdmVycmlkZXMgPz8gW107XG4gICAgdGhpcy5wcmVmZXJTeXN0ZW1Nb2RlbHMgPSBvcHRpb25zLnByZWZlclN5c3RlbU1vZGVscyA/PyBmYWxzZTtcbiAgICB0aGlzLmNsaWVudCA9IG9wdGlvbnMuY2xpZW50O1xuICB9XG5cbiAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPE1vZGVsVGFyZ2V0W10+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gYXdhaXQgdGhpcy5jb250ZXh0KCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwibG9hZGluZyBjYXRhbG9ndWVcIiwgeyBob3N0OiBjb250ZXh0Lmhvc3QsIHR0bE1zOiB0aGlzLnR0bE1zIH0pO1xuICAgIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IG1vZGVsQ2F0YWxvZy5saXN0U2VydmluZ0VuZHBvaW50cyhcbiAgICAgIGNvbnRleHQuY2xpZW50LFxuICAgICAgY29udGV4dC5ob3N0LFxuICAgICAgY2F0YWxvZ3VlT3B0aW9ucyhjb250ZXh0LCB0aGlzLnR0bE1zKSxcbiAgICApO1xuICAgIGNvbnN0IHRhcmdldHMgPSBlbmRwb2ludHMubWFwKChlbmRwb2ludCkgPT4gdGhpcy50YXJnZXQoZW5kcG9pbnQpKTtcbiAgICBsb2dnZXIuZGVidWcoXCJsb2FkZWQgY2F0YWxvZ3VlXCIsIHtcbiAgICAgIGVuZHBvaW50Q291bnQ6IGVuZHBvaW50cy5sZW5ndGgsXG4gICAgICBob3N0OiBjb250ZXh0Lmhvc3QsXG4gICAgICB0YXJnZXRDb3VudDogdGFyZ2V0cy5sZW5ndGgsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldHM7XG4gIH1cblxuICBhc3luYyByZXNvbHZlKFxuICAgIG1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogTW9kZWxSZWdpc3RyeVJlc29sdmVPcHRpb25zID0ge30sXG4gICk6IFByb21pc2U8TW9kZWxUYXJnZXQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCByZXF1ZXN0ZWQgPSBtb2RlbCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdW5xdWFsaWZpZWRNb2RlbChtb2RlbCk7XG4gICAgY29uc3QgdGFyZ2V0cyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuICAgIGNvbnN0IGV4YWN0SWQgPVxuICAgICAgcmVxdWVzdGVkID09PSB1bmRlZmluZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiB0YXJnZXRzLmZpbmQoXG4gICAgICAgICAgICAodGFyZ2V0KSA9PlxuICAgICAgICAgICAgICB0YXJnZXQuaWQubG9jYWxlQ29tcGFyZShyZXF1ZXN0ZWQsIHVuZGVmaW5lZCwgeyBzZW5zaXRpdml0eTogXCJhY2NlbnRcIiB9KSA9PT0gMCxcbiAgICAgICAgICApO1xuICAgIGNvbnN0IGV4YWN0QWxpYXMgPVxuICAgICAgcmVxdWVzdGVkID09PSB1bmRlZmluZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiB0YXJnZXRzLmZpbmQoKHRhcmdldCkgPT5cbiAgICAgICAgICAgIHRhcmdldC5hbGlhc2VzLnNvbWUoXG4gICAgICAgICAgICAgIChhbGlhcykgPT4gYWxpYXMubG9jYWxlQ29tcGFyZShyZXF1ZXN0ZWQsIHVuZGVmaW5lZCwgeyBzZW5zaXRpdml0eTogXCJhY2NlbnRcIiB9KSA9PT0gMCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICBjb25zdCBleGFjdCA9IGV4YWN0SWQgPz8gZXhhY3RBbGlhcztcbiAgICBpZiAoZXhhY3QgJiYgbWF0Y2hlc1Jlc29sdmVPcHRpb25zKGV4YWN0LCBvcHRpb25zKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwicmVzb2x2ZWQgZXhhY3QgbW9kZWxcIiwgeyByZXF1ZXN0ZWQsIHJlc29sdmVkOiBleGFjdC5pZCB9KTtcbiAgICAgIHJldHVybiBleGFjdDtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRwb2ludHMgPSB0YXJnZXRzXG4gICAgICAubWFwKCh0YXJnZXQpID0+IHRhcmdldC5lbmRwb2ludClcbiAgICAgIC5maWx0ZXIoKGVuZHBvaW50KTogZW5kcG9pbnQgaXMgU2VydmluZ0VuZHBvaW50U3VtbWFyeSA9PiBlbmRwb2ludCAhPT0gdW5kZWZpbmVkKTtcbiAgICBjb25zdCByZXNvbHZlZCA9IHNlbGVjdGlvbi5yZXNvbHZlTW9kZWwoXG4gICAgICBlbmRwb2ludHMsXG4gICAgICB7XG4gICAgICAgIC4uLihyZXF1ZXN0ZWQgIT09IHVuZGVmaW5lZCA/IHsgZXhwbGljaXQ6IHJlcXVlc3RlZCB9IDoge30pLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJlZmVyU3lzdGVtTW9kZWxzOiB0aGlzLnByZWZlclN5c3RlbU1vZGVscyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09PSByZXNvbHZlZC5tb2RlbElkKTtcbiAgICBsb2dnZXIuZGVidWcoXCJyZXNvbHZlZCBmdXp6eSBtb2RlbFwiLCB7XG4gICAgICByZXF1ZXN0ZWQsXG4gICAgICByZXNvbHZlZDogdGFyZ2V0Py5pZCxcbiAgICAgIHNvdXJjZTogcmVzb2x2ZWQuc291cmNlLFxuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBhc3luYyBzZWFyY2gocXVlcnk6IHN0cmluZyk6IFByb21pc2U8TW9kZWxUYXJnZXRbXT4ge1xuICAgIGNvbnN0IHRhcmdldHMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICBjb25zdCBieUlkID0gbmV3IE1hcCh0YXJnZXRzLm1hcCgodGFyZ2V0KSA9PiBbdGFyZ2V0LmlkLCB0YXJnZXRdKSk7XG4gICAgY29uc3QgZW5kcG9pbnRzID0gdGFyZ2V0c1xuICAgICAgLm1hcCgodGFyZ2V0KSA9PiB0YXJnZXQuZW5kcG9pbnQpXG4gICAgICAuZmlsdGVyKChlbmRwb2ludCk6IGVuZHBvaW50IGlzIFNlcnZpbmdFbmRwb2ludFN1bW1hcnkgPT4gZW5kcG9pbnQgIT09IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgcmFua2VkID0gW1xuICAgICAgLi4uc2VsZWN0aW9uLmxvb2t1cE1vZGVscyhcbiAgICAgICAgZW5kcG9pbnRzLFxuICAgICAgICB7IHNlYXJjaDogcXVlcnkgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByZWZlclN5c3RlbU1vZGVsczogdGhpcy5wcmVmZXJTeXN0ZW1Nb2RlbHMsXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgICAgLi4uc2VsZWN0aW9uLmxvb2t1cE1vZGVscyhcbiAgICAgICAgZW5kcG9pbnRzLFxuICAgICAgICB7XG4gICAgICAgICAgc2VhcmNoOiBxdWVyeSxcbiAgICAgICAgICBtb2RlbENsYXNzOiBNb2RlbENsYXNzLkVtYmVkZGluZyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByZWZlclN5c3RlbU1vZGVsczogdGhpcy5wcmVmZXJTeXN0ZW1Nb2RlbHMsXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgIF0uc29ydCgobGVmdCwgcmlnaHQpID0+IChsZWZ0LnNjb3JlID8/IDApIC0gKHJpZ2h0LnNjb3JlID8/IDApKTtcbiAgICByZXR1cm4gcmFua2VkXG4gICAgICAubWFwKCh7IGVuZHBvaW50IH0pID0+IGJ5SWQuZ2V0KGVuZHBvaW50Lm5hbWUpKVxuICAgICAgLmZpbHRlcigodGFyZ2V0KTogdGFyZ2V0IGlzIE1vZGVsVGFyZ2V0ID0+IHRhcmdldCAhPT0gdW5kZWZpbmVkKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHRhcmdldCwgaW5kZXgsIGFsbCkgPT4gYWxsLmZpbmRJbmRleCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT09IHRhcmdldC5pZCkgPT09IGluZGV4LFxuICAgICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMuY29udGV4dCgpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNsZWFyaW5nIGNhdGFsb2d1ZVwiLCB7IGhvc3Q6IGNvbnRleHQuaG9zdCB9KTtcbiAgICBpZiAoY29udGV4dC5pZGVudGl0eSkge1xuICAgICAgYXdhaXQgbW9kZWxDYXRhbG9nLmNsZWFyU2VydmluZ0VuZHBvaW50c0NhY2hlKGNvbnRleHQuaG9zdCwgY29udGV4dC5pZGVudGl0eSk7XG4gICAgfVxuICAgIGF3YWl0IG1vZGVsQ2F0YWxvZy5saXN0U2VydmluZ0VuZHBvaW50cyhcbiAgICAgIGNvbnRleHQuY2xpZW50LFxuICAgICAgY29udGV4dC5ob3N0LFxuICAgICAgY2F0YWxvZ3VlT3B0aW9ucyhjb250ZXh0LCB0aGlzLnR0bE1zKSxcbiAgICApO1xuICAgIGxvZ2dlci5kZWJ1ZyhcInJlZnJlc2hlZCBjYXRhbG9ndWVcIiwgeyBob3N0OiBjb250ZXh0Lmhvc3QgfSk7XG4gIH1cblxuICBwcml2YXRlIHRhcmdldChlbmRwb2ludDogU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IE1vZGVsVGFyZ2V0IHtcbiAgICBjb25zdCBwdWJsaXNoZWQgPSBtZXRhZGF0YS5tb2RlbENhcGFiaWxpdGllc0ZvcihlbmRwb2ludCk7XG4gICAgY29uc3QgZmFtaWx5ID0gZW5kcG9pbnQuZmFtaWx5Py50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG9wZW5BaUZhbWlseSA9IGZhbWlseSA9PT0gXCJncHRcIiB8fCBmYW1pbHkgPT09IFwib3BlbmFpXCIgfHwgZW5kcG9pbnQubmFtZS5pbmNsdWRlcyhcImNvZGV4XCIpO1xuICAgIGNvbnN0IG1vZGVsU2VydmljZU5hbWUgPSBwb2xpY3kubW9kZWxTZXJ2aWNlTmFtZShlbmRwb2ludC5tb2RlbFNlcnZpY2VOYW1lKTtcbiAgICBjb25zdCBlbWJlZGRpbmdzID1cbiAgICAgIGVuZHBvaW50LmNsYXNzID09PSBNb2RlbENsYXNzLkVtYmVkZGluZyB8fCBlbmRwb2ludC50YXNrID09PSBcImxsbS92MS9lbWJlZGRpbmdzXCI7XG4gICAgY29uc3QgY2FwYWJpbGl0aWVzOiBNb2RlbENhcGFiaWxpdGllcyA9IHtcbiAgICAgIHJlc3BvbnNlczogIWVtYmVkZGluZ3MgJiYgKG9wZW5BaUZhbWlseSB8fCBwdWJsaXNoZWQucmVzcG9uc2VzKSxcbiAgICAgIG9wZW5SZXNwb25zZXM6ICFlbWJlZGRpbmdzICYmICFvcGVuQWlGYW1pbHksXG4gICAgICBjaGF0OiAhZW1iZWRkaW5ncyxcbiAgICAgIGFudGhyb3BpYzogZmFtaWx5ID09PSBcImNsYXVkZVwiLFxuICAgICAgZW1iZWRkaW5ncyxcbiAgICAgIGFpR2F0ZXdheUNvZGV4OlxuICAgICAgICAhZW1iZWRkaW5ncyAmJiBCb29sZWFuKG1vZGVsU2VydmljZU5hbWUpICYmIGZhbWlseSAhPT0gXCJjbGF1ZGVcIiAmJiBmYW1pbHkgIT09IFwiZ2VtaW5pXCIsXG4gICAgICB0b29sczogZW5kcG9pbnQuc3VwcG9ydHNUb29scyA9PT0gdHJ1ZSxcbiAgICAgIHJlYXNvbmluZzogQm9vbGVhbihlbmRwb2ludC5yZWFzb25pbmdFZmZvcnRzPy5sZW5ndGgpIHx8IHB1Ymxpc2hlZC5yZWFzb25pbmcsXG4gICAgICBzdHJlYW1pbmc6IHRydWUsXG4gICAgICBwYXJhbGxlbFRvb2xzOiBlbmRwb2ludC5zdXBwb3J0c1Rvb2xzID09PSB0cnVlLFxuICAgICAgY3VzdG9tVG9vbHM6IHB1Ymxpc2hlZC5hcHBseVBhdGNoIHx8IGVuZHBvaW50Lm5hbWUuaW5jbHVkZXMoXCJjb2RleFwiKSxcbiAgICAgIHN0cnVjdHVyZWRPdXRwdXQ6IHRydWUsXG4gICAgICB3ZWJTZWFyY2g6IHB1Ymxpc2hlZC53ZWJTZWFyY2gsXG4gICAgICBpbWFnZUlucHV0OiBwdWJsaXNoZWQuaW1hZ2VJbnB1dCxcbiAgICAgIGFwcGx5UGF0Y2g6IHB1Ymxpc2hlZC5hcHBseVBhdGNoLFxuICAgIH07XG4gICAgY29uc3QgYWxpYXNlcyA9IG5ldyBTZXQoXG4gICAgICBbXG4gICAgICAgIGVuZHBvaW50Lm5hbWUsXG4gICAgICAgIGVuZHBvaW50LmRpc3BsYXlOYW1lLFxuICAgICAgICBlbmRwb2ludC5tb2RlbFNlcnZpY2VOYW1lLFxuICAgICAgICBtb2RlbFNlcnZpY2VOYW1lLFxuICAgICAgICAuLi5PYmplY3QudmFsdWVzKGVuZHBvaW50LnNlcnZpY2VOYW1lcyA/PyB7fSksXG4gICAgICBdLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gQm9vbGVhbih2YWx1ZT8udHJpbSgpKSksXG4gICAgKTtcbiAgICBjb25zdCBvdmVycmlkZSA9IHRoaXMub3ZlcnJpZGVzLmZpbmQoXG4gICAgICAoY2FuZGlkYXRlKSA9PlxuICAgICAgICBjYW5kaWRhdGUubW9kZWwgPT09IGVuZHBvaW50Lm5hbWUgfHxcbiAgICAgICAgWy4uLmFsaWFzZXNdLnNvbWUoKGFsaWFzKSA9PiBhbGlhcyA9PT0gY2FuZGlkYXRlLm1vZGVsKSxcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZW5kcG9pbnQubmFtZSxcbiAgICAgIGFsaWFzZXM6IFsuLi5hbGlhc2VzXSxcbiAgICAgIGRpc3BsYXlOYW1lOiBlbmRwb2ludC5kaXNwbGF5TmFtZSA/PyBlbmRwb2ludC5uYW1lLFxuICAgICAgLi4uKGVuZHBvaW50LmZhbWlseSA/IHsgZmFtaWx5OiBlbmRwb2ludC5mYW1pbHkgfSA6IHt9KSxcbiAgICAgIC4uLihtb2RlbFNlcnZpY2VOYW1lID8geyBtb2RlbFNlcnZpY2VOYW1lIH0gOiB7fSksXG4gICAgICBlbmRwb2ludCxcbiAgICAgIGNhcGFiaWxpdGllczogeyAuLi5jYXBhYmlsaXRpZXMsIC4uLm92ZXJyaWRlPy5jYXBhYmlsaXRpZXMgfSxcbiAgICAgIHJlYXNvbmluZ0VmZm9ydHM6IGVuZHBvaW50LnJlYXNvbmluZ0VmZm9ydHMgPz8gW10sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udGV4dCgpOiBQcm9taXNlPFJlZ2lzdHJ5Q29udGV4dD4ge1xuICAgIGlmICh0aGlzLmNsaWVudCkge1xuICAgICAgY29uc3QgaG9zdCA9IChhd2FpdCB0aGlzLmNsaWVudC5jb25maWcuZ2V0SG9zdCgpKS50b1N0cmluZygpO1xuICAgICAgcmV0dXJuIHsgY2xpZW50OiB0aGlzLmNsaWVudCwgaG9zdCB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVnaXN0cnlDb250ZXh0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2F0YWxvZ3VlT3B0aW9ucyhjb250ZXh0OiBSZWdpc3RyeUNvbnRleHQsIHR0bE1zOiBudW1iZXIpOiBMaXN0U2VydmluZ0VuZHBvaW50c09wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIHR0bE1zLFxuICAgIC4uLihjb250ZXh0LmlkZW50aXR5ID8geyBjYWNoZUlkZW50aXR5OiBjb250ZXh0LmlkZW50aXR5IH0gOiB7fSksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdHJ5Q29udGV4dCgpOiBQcm9taXNlPFJlZ2lzdHJ5Q29udGV4dD4ge1xuICBjb25zdCBjb250ZXh0ID0gZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICBjb25zdCBob3N0ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LmNvbmZpZy5nZXRIb3N0KCkpLnRvU3RyaW5nKCk7XG4gIHJldHVybiB7XG4gICAgY2xpZW50OiBjb250ZXh0LmNsaWVudCxcbiAgICBob3N0LFxuICAgIGlkZW50aXR5OiBcInVzZXJJZFwiIGluIGNvbnRleHQgPyBjb250ZXh0LnVzZXJJZCA6IGNvbnRleHQuc2VydmljZVVzZXJJZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW5xdWFsaWZpZWRNb2RlbChtb2RlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG1vZGVsLnRyaW0oKS5yZXBsYWNlKC9eKD86ZGJ4fGRhdGFicmlja3MpXFwvL2ksIFwiXCIpO1xufVxuXG5mdW5jdGlvbiBwb3NpdGl2ZVR0bCh2YWx1ZSA9IERFRkFVTFRfQ0FDSEVfVFRMX01TKTogbnVtYmVyIHtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodmFsdWUpIHx8IHZhbHVlIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNb2RlbCByZWdpc3RyeSB0dGxNcyBtdXN0IGJlIGEgcG9zaXRpdmUgZmluaXRlIG51bWJlclwiKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXNSZXNvbHZlT3B0aW9ucyh0YXJnZXQ6IE1vZGVsVGFyZ2V0LCBvcHRpb25zOiBNb2RlbFJlZ2lzdHJ5UmVzb2x2ZU9wdGlvbnMpOiBib29sZWFuIHtcbiAgaWYgKG9wdGlvbnMucmVxdWlyZXNUb29scyAmJiAhdGFyZ2V0LmNhcGFiaWxpdGllcy50b29scykgcmV0dXJuIGZhbHNlO1xuICBpZiAob3B0aW9ucy5tb2RlbENsYXNzID09PSBNb2RlbENsYXNzLkVtYmVkZGluZykgcmV0dXJuIHRhcmdldC5jYXBhYmlsaXRpZXMuZW1iZWRkaW5ncztcbiAgaWYgKG9wdGlvbnMubW9kZWxDbGFzcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGFyZ2V0LmNhcGFiaWxpdGllcy5jaGF0O1xuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
package/lib/src/router.js CHANGED
@@ -55,22 +55,34 @@ export function resolveRoute(input) {
55
55
  /** Detect route-affecting features from an OpenAI or Anthropic request body. */
56
56
  export function requestedFeatures(body) {
57
57
  const tools = Array.isArray(body.tools) ? body.tools : [];
58
- const toolTypes = tools
59
- .filter((tool) => isRecord(tool))
60
- .map((tool) => tool.type);
58
+ const toolRecords = tools.filter((tool) => isRecord(tool));
59
+ const toolTypes = toolRecords.map((tool) => tool.type);
60
+ const toolNames = toolRecords
61
+ .map((tool) => typeof tool.name === "string"
62
+ ? tool.name
63
+ : isRecord(tool.function) && typeof tool.function.name === "string"
64
+ ? tool.function.name
65
+ : undefined)
66
+ .filter((name) => name !== undefined);
61
67
  const text = isRecord(body.text) ? body.text : {};
62
68
  const format = isRecord(text.format) ? text.format.type : text.format;
69
+ const outputConfig = isRecord(body.output_config) ? body.output_config : {};
63
70
  return {
64
71
  background: body.background === true,
65
72
  customTools: toolTypes.some((type) => type === "custom"),
66
73
  parallelTools: body.parallel_tool_calls === true,
67
74
  previousResponse: typeof body.previous_response_id === "string" && body.previous_response_id.length > 0,
68
- reasoning: isRecord(body.reasoning) || body.reasoning_effort !== undefined,
75
+ reasoning: isRecord(body.reasoning) ||
76
+ body.reasoning_effort !== undefined ||
77
+ isRecord(body.thinking) ||
78
+ outputConfig.effort !== undefined,
69
79
  storage: body.store === true,
70
80
  structuredOutput: format !== undefined && format !== "text",
71
81
  tools: tools.length > 0,
72
82
  unsupportedOpenResponsesTools: toolTypes.some((type) => type !== "function" && type !== "web_search" && type !== "web_search_preview"),
73
83
  webSearch: toolTypes.some((type) => type === "web_search" || type === "web_search_preview"),
84
+ imageInput: containsImageInput(body.input) || containsImageInput(body.messages),
85
+ applyPatch: toolNames.some((name) => /^apply[_-]?patch$/i.test(name)),
74
86
  };
75
87
  }
76
88
  /** Return whether an Originator header selects Codex compatibility behavior. */
@@ -129,4 +141,14 @@ function canUseAiGatewayCodex(target, features) {
129
141
  return (Boolean(target.capabilities.aiGatewayCodex && target.modelServiceName) &&
130
142
  supportsDirectResponses(target, features));
131
143
  }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVNsRCxpRkFBaUY7QUFDakYsTUFBTSxPQUFPLDhCQUErQixTQUFRLEtBQUs7SUFHbEM7SUFGWixNQUFNLEdBQUcsR0FBRyxDQUFDO0lBRXRCLFlBQXFCLFFBQTJCO1FBQzlDLEtBQUssQ0FBQywwREFBMEQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFEcEUsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFFOUMsSUFBSSxDQUFDLElBQUksR0FBRyxnQ0FBZ0MsQ0FBQztJQUMvQyxDQUFDO0NBQ0Y7QUFFRCw4RUFBOEU7QUFDOUUsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUF3QjtJQUNuRCxNQUFNLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbkQsSUFBSSxjQUFjLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksOEJBQThCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxJQUFJLGNBQWMsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQ0Usb0JBQW9CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztZQUN0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QUFnQixDQUFDLENBQ3JFLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsTUFBbUIsRUFBRSxRQUEyQjtJQUNyRSxPQUFPLENBQ0wsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDOUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FDL0QsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLFFBQTJCO0lBQzFELE1BQU0sV0FBVyxHQUFHO1FBQ2xCLEdBQUcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlELEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUMvQyxDQUFDO0lBQ0YsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxNQUFNLElBQUksOEJBQThCLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDcEYsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsTUFBbUIsRUFBRSxRQUEyQjtJQUM1RSxPQUFPLENBQ0wsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUN0RSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQzFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQdXJlIGNhcGFiaWxpdHktZHJpdmVuIHJvdXRlIHNlbGVjdGlvbiBmb3IgbW9kZWwtZ2F0ZXdheSByZXF1ZXN0cy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgcG9saWN5IH0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmltcG9ydCB7IGlzUmVjb3JkIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHtcbiAgR2F0ZXdheVJvdXRlLFxuICBNb2RlbFRhcmdldCxcbiAgUmVxdWVzdGVkRmVhdHVyZXMsXG4gIFJlc29sdmVSb3V0ZUlucHV0LFxuICBVcHN0cmVhbVByb3RvY29sLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwtZ2F0ZXdheVwiO1xuXG4vKiogRXJyb3IgcmV0dXJuZWQgd2hlbiBwcmVzZXJ2aW5nIGEgcmVxdWVzdGVkIHByb3RvY29sIGZlYXR1cmUgaXMgaW1wb3NzaWJsZS4gKi9cbmV4cG9ydCBjbGFzcyBVbnN1cHBvcnRlZEdhdGV3YXlGZWF0dXJlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IHN0YXR1cyA9IDQwMDtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBmZWF0dXJlczogcmVhZG9ubHkgc3RyaW5nW10pIHtcbiAgICBzdXBlcihgVGhlIHNlbGVjdGVkIG1vZGVsIGNhbm5vdCBwcmVzZXJ2ZSByZXF1ZXN0ZWQgZmVhdHVyZXM6ICR7ZmVhdHVyZXMuam9pbihcIiwgXCIpfWApO1xuICAgIHRoaXMubmFtZSA9IFwiVW5zdXBwb3J0ZWRHYXRld2F5RmVhdHVyZUVycm9yXCI7XG4gIH1cbn1cblxuLyoqIFNlbGVjdCB0aGUgbG93ZXN0LW92ZXJoZWFkIHVwc3RyZWFtIHRoYXQgcHJlc2VydmVzIHRoZSBjbGllbnQgY29udHJhY3QuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJvdXRlKGlucHV0OiBSZXNvbHZlUm91dGVJbnB1dCk6IEdhdGV3YXlSb3V0ZSB7XG4gIGNvbnN0IHsgY2xpZW50UHJvdG9jb2wsIGZlYXR1cmVzLCB0YXJnZXQgfSA9IGlucHV0O1xuICBpZiAoY2xpZW50UHJvdG9jb2wgPT09IFwib3BlbmFpLWVtYmVkZGluZ3NcIikge1xuICAgIGlmICghdGFyZ2V0LmNhcGFiaWxpdGllcy5lbWJlZGRpbmdzKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRHYXRld2F5RmVhdHVyZUVycm9yKFtcImVtYmVkZGluZ3NcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gZGlyZWN0Um91dGUoaW5wdXQsIFwiZGF0YWJyaWNrcy1lbWJlZGRpbmdzXCIsIHRhcmdldC5pZCk7XG4gIH1cbiAgaWYgKGNsaWVudFByb3RvY29sID09PSBcIm9wZW5haS1yZXNwb25zZXNcIikge1xuICAgIHJlamVjdFN0YXRlZnVsUmVzcG9uc2VzKGZlYXR1cmVzKTtcbiAgICBpZiAoXG4gICAgICBjYW5Vc2VBaUdhdGV3YXlDb2RleCh0YXJnZXQsIGZlYXR1cmVzKSAmJlxuICAgICAgcG9saWN5LnByZWZlcnNTeXN0ZW1Nb2RlbFNlcnZpY2UoXG4gICAgICAgIGlucHV0LnJlcXVlc3RlZE1vZGVsLFxuICAgICAgICB0YXJnZXQuaWQsXG4gICAgICAgIHRhcmdldC5tb2RlbFNlcnZpY2VOYW1lISxcbiAgICAgICAgaW5wdXQucHJlZmVyU3lzdGVtTW9kZWxzID09PSB0cnVlLFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRpcmVjdFJvdXRlKGlucHV0LCBcImRhdGFicmlja3MtYWktZ2F0ZXdheS1jb2RleFwiLCB0YXJnZXQubW9kZWxTZXJ2aWNlTmFtZSEpO1xuICAgIH1cbiAgICBpZiAodGFyZ2V0LmNhcGFiaWxpdGllcy5yZXNwb25zZXMgJiYgc3VwcG9ydHNEaXJlY3RSZXNwb25zZXModGFyZ2V0LCBmZWF0dXJlcykpIHtcbiAgICAgIHJldHVybiBkaXJlY3RSb3V0ZShpbnB1dCwgXCJkYXRhYnJpY2tzLXJlc3BvbnNlc1wiLCB0YXJnZXQuaWQpO1xuICAgIH1cbiAgICBpZiAoY2FuVXNlQWlHYXRld2F5Q29kZXgodGFyZ2V0LCBmZWF0dXJlcykpIHtcbiAgICAgIHJldHVybiBkaXJlY3RSb3V0ZShpbnB1dCwgXCJkYXRhYnJpY2tzLWFpLWdhdGV3YXktY29kZXhcIiwgdGFyZ2V0Lm1vZGVsU2VydmljZU5hbWUhKTtcbiAgICB9XG4gICAgaWYgKHRhcmdldC5jYXBhYmlsaXRpZXMub3BlblJlc3BvbnNlcyAmJiBzdXBwb3J0c09wZW5SZXNwb25zZXModGFyZ2V0LCBmZWF0dXJlcykpIHtcbiAgICAgIHJldHVybiBkaXJlY3RSb3V0ZShpbnB1dCwgXCJkYXRhYnJpY2tzLW9wZW4tcmVzcG9uc2VzXCIsIHRhcmdldC5pZCk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2xhdGVkUm91dGUoaW5wdXQpO1xuICB9XG5cbiAgaWYgKGNsaWVudFByb3RvY29sID09PSBcIm9wZW5haS1jaGF0XCIpIHtcbiAgICBpZiAodGFyZ2V0LmNhcGFiaWxpdGllcy5jaGF0ICYmIHN1cHBvcnRzVG9vbHModGFyZ2V0LCBmZWF0dXJlcykpIHtcbiAgICAgIHJldHVybiBkaXJlY3RSb3V0ZShpbnB1dCwgXCJkYXRhYnJpY2tzLWNoYXRcIiwgdGFyZ2V0LmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zbGF0ZWRSb3V0ZShpbnB1dCk7XG4gIH1cblxuICBpZiAodGFyZ2V0LmNhcGFiaWxpdGllcy5hbnRocm9waWMgJiYgc3VwcG9ydHNUb29scyh0YXJnZXQsIGZlYXR1cmVzKSkge1xuICAgIHJldHVybiBkaXJlY3RSb3V0ZShpbnB1dCwgXCJkYXRhYnJpY2tzLWFudGhyb3BpY1wiLCB0YXJnZXQuaWQpO1xuICB9XG4gIHJldHVybiB0cmFuc2xhdGVkUm91dGUoaW5wdXQpO1xufVxuXG4vKiogRGV0ZWN0IHJvdXRlLWFmZmVjdGluZyBmZWF0dXJlcyBmcm9tIGFuIE9wZW5BSSBvciBBbnRocm9waWMgcmVxdWVzdCBib2R5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RlZEZlYXR1cmVzKGJvZHk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik6IFJlcXVlc3RlZEZlYXR1cmVzIHtcbiAgY29uc3QgdG9vbHMgPSBBcnJheS5pc0FycmF5KGJvZHkudG9vbHMpID8gYm9keS50b29scyA6IFtdO1xuICBjb25zdCB0b29sVHlwZXMgPSB0b29sc1xuICAgIC5maWx0ZXIoKHRvb2wpOiB0b29sIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IGlzUmVjb3JkKHRvb2wpKVxuICAgIC5tYXAoKHRvb2wpID0+IHRvb2wudHlwZSk7XG4gIGNvbnN0IHRleHQgPSBpc1JlY29yZChib2R5LnRleHQpID8gYm9keS50ZXh0IDoge307XG4gIGNvbnN0IGZvcm1hdCA9IGlzUmVjb3JkKHRleHQuZm9ybWF0KSA/IHRleHQuZm9ybWF0LnR5cGUgOiB0ZXh0LmZvcm1hdDtcbiAgcmV0dXJuIHtcbiAgICBiYWNrZ3JvdW5kOiBib2R5LmJhY2tncm91bmQgPT09IHRydWUsXG4gICAgY3VzdG9tVG9vbHM6IHRvb2xUeXBlcy5zb21lKCh0eXBlKSA9PiB0eXBlID09PSBcImN1c3RvbVwiKSxcbiAgICBwYXJhbGxlbFRvb2xzOiBib2R5LnBhcmFsbGVsX3Rvb2xfY2FsbHMgPT09IHRydWUsXG4gICAgcHJldmlvdXNSZXNwb25zZTpcbiAgICAgIHR5cGVvZiBib2R5LnByZXZpb3VzX3Jlc3BvbnNlX2lkID09PSBcInN0cmluZ1wiICYmIGJvZHkucHJldmlvdXNfcmVzcG9uc2VfaWQubGVuZ3RoID4gMCxcbiAgICByZWFzb25pbmc6IGlzUmVjb3JkKGJvZHkucmVhc29uaW5nKSB8fCBib2R5LnJlYXNvbmluZ19lZmZvcnQgIT09IHVuZGVmaW5lZCxcbiAgICBzdG9yYWdlOiBib2R5LnN0b3JlID09PSB0cnVlLFxuICAgIHN0cnVjdHVyZWRPdXRwdXQ6IGZvcm1hdCAhPT0gdW5kZWZpbmVkICYmIGZvcm1hdCAhPT0gXCJ0ZXh0XCIsXG4gICAgdG9vbHM6IHRvb2xzLmxlbmd0aCA+IDAsXG4gICAgdW5zdXBwb3J0ZWRPcGVuUmVzcG9uc2VzVG9vbHM6IHRvb2xUeXBlcy5zb21lKFxuICAgICAgKHR5cGUpID0+IHR5cGUgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlICE9PSBcIndlYl9zZWFyY2hcIiAmJiB0eXBlICE9PSBcIndlYl9zZWFyY2hfcHJldmlld1wiLFxuICAgICksXG4gICAgd2ViU2VhcmNoOiB0b29sVHlwZXMuc29tZSgodHlwZSkgPT4gdHlwZSA9PT0gXCJ3ZWJfc2VhcmNoXCIgfHwgdHlwZSA9PT0gXCJ3ZWJfc2VhcmNoX3ByZXZpZXdcIiksXG4gIH07XG59XG5cbi8qKiBSZXR1cm4gd2hldGhlciBhbiBPcmlnaW5hdG9yIGhlYWRlciBzZWxlY3RzIENvZGV4IGNvbXBhdGliaWxpdHkgYmVoYXZpb3IuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb2RleE9yaWdpbmF0b3Iob3JpZ2luYXRvcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvcmlnaW5hdG9yPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiY29kZXhcIikgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIGRpcmVjdFJvdXRlKFxuICBpbnB1dDogUmVzb2x2ZVJvdXRlSW5wdXQsXG4gIHVwc3RyZWFtUHJvdG9jb2w6IEV4Y2x1ZGU8VXBzdHJlYW1Qcm90b2NvbCwgXCJhaS1zZGtcIj4sXG4gIHVwc3RyZWFtTW9kZWw6IHN0cmluZyxcbik6IEdhdGV3YXlSb3V0ZSB7XG4gIHJldHVybiB7XG4gICAgY2xpZW50UHJvdG9jb2w6IGlucHV0LmNsaWVudFByb3RvY29sLFxuICAgIHVwc3RyZWFtUHJvdG9jb2wsXG4gICAgdGFyZ2V0OiBpbnB1dC50YXJnZXQsXG4gICAgdXBzdHJlYW1Nb2RlbCxcbiAgICB0cmFuc2xhdGVSZXF1ZXN0OiBmYWxzZSxcbiAgICB0cmFuc2xhdGVSZXNwb25zZTogZmFsc2UsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZWRSb3V0ZShpbnB1dDogUmVzb2x2ZVJvdXRlSW5wdXQpOiBHYXRld2F5Um91dGUge1xuICByZXR1cm4ge1xuICAgIGNsaWVudFByb3RvY29sOiBpbnB1dC5jbGllbnRQcm90b2NvbCxcbiAgICB1cHN0cmVhbVByb3RvY29sOiBcImFpLXNka1wiLFxuICAgIHRhcmdldDogaW5wdXQudGFyZ2V0LFxuICAgIHVwc3RyZWFtTW9kZWw6IGlucHV0LnRhcmdldC5pZCxcbiAgICB0cmFuc2xhdGVSZXF1ZXN0OiB0cnVlLFxuICAgIHRyYW5zbGF0ZVJlc3BvbnNlOiB0cnVlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0RpcmVjdFJlc3BvbnNlcyh0YXJnZXQ6IE1vZGVsVGFyZ2V0LCBmZWF0dXJlczogUmVxdWVzdGVkRmVhdHVyZXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBzdXBwb3J0c1Rvb2xzKHRhcmdldCwgZmVhdHVyZXMpICYmXG4gICAgKCFmZWF0dXJlcy5jdXN0b21Ub29scyB8fCB0YXJnZXQuY2FwYWJpbGl0aWVzLmN1c3RvbVRvb2xzKSAmJlxuICAgICghZmVhdHVyZXMuc3RydWN0dXJlZE91dHB1dCB8fCB0YXJnZXQuY2FwYWJpbGl0aWVzLnN0cnVjdHVyZWRPdXRwdXQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzT3BlblJlc3BvbnNlcyh0YXJnZXQ6IE1vZGVsVGFyZ2V0LCBmZWF0dXJlczogUmVxdWVzdGVkRmVhdHVyZXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBzdXBwb3J0c1Rvb2xzKHRhcmdldCwgZmVhdHVyZXMpICYmXG4gICAgIWZlYXR1cmVzLmN1c3RvbVRvb2xzICYmXG4gICAgIWZlYXR1cmVzLnByZXZpb3VzUmVzcG9uc2UgJiZcbiAgICAhZmVhdHVyZXMuc3RvcmFnZSAmJlxuICAgICFmZWF0dXJlcy5iYWNrZ3JvdW5kICYmXG4gICAgIWZlYXR1cmVzLnVuc3VwcG9ydGVkT3BlblJlc3BvbnNlc1Rvb2xzICYmXG4gICAgKCFmZWF0dXJlcy53ZWJTZWFyY2ggfHwgdGFyZ2V0LmNhcGFiaWxpdGllcy53ZWJTZWFyY2gpICYmXG4gICAgKCFmZWF0dXJlcy5zdHJ1Y3R1cmVkT3V0cHV0IHx8IHRhcmdldC5jYXBhYmlsaXRpZXMuc3RydWN0dXJlZE91dHB1dClcbiAgKTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNUb29scyh0YXJnZXQ6IE1vZGVsVGFyZ2V0LCBmZWF0dXJlczogUmVxdWVzdGVkRmVhdHVyZXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAoIWZlYXR1cmVzLnRvb2xzIHx8IHRhcmdldC5jYXBhYmlsaXRpZXMudG9vbHMpICYmXG4gICAgKCFmZWF0dXJlcy5wYXJhbGxlbFRvb2xzIHx8IHRhcmdldC5jYXBhYmlsaXRpZXMucGFyYWxsZWxUb29scylcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVqZWN0U3RhdGVmdWxSZXNwb25zZXMoZmVhdHVyZXM6IFJlcXVlc3RlZEZlYXR1cmVzKTogdm9pZCB7XG4gIGNvbnN0IHVuc3VwcG9ydGVkID0gW1xuICAgIC4uLihmZWF0dXJlcy5wcmV2aW91c1Jlc3BvbnNlID8gW1wicHJldmlvdXNfcmVzcG9uc2VfaWRcIl0gOiBbXSksXG4gICAgLi4uKGZlYXR1cmVzLnN0b3JhZ2UgPyBbXCJzdG9yZVwiXSA6IFtdKSxcbiAgICAuLi4oZmVhdHVyZXMuYmFja2dyb3VuZCA/IFtcImJhY2tncm91bmRcIl0gOiBbXSksXG4gIF07XG4gIGlmICh1bnN1cHBvcnRlZC5sZW5ndGggPiAwKSB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRHYXRld2F5RmVhdHVyZUVycm9yKHVuc3VwcG9ydGVkKTtcbn1cblxuZnVuY3Rpb24gY2FuVXNlQWlHYXRld2F5Q29kZXgodGFyZ2V0OiBNb2RlbFRhcmdldCwgZmVhdHVyZXM6IFJlcXVlc3RlZEZlYXR1cmVzKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgQm9vbGVhbih0YXJnZXQuY2FwYWJpbGl0aWVzLmFpR2F0ZXdheUNvZGV4ICYmIHRhcmdldC5tb2RlbFNlcnZpY2VOYW1lKSAmJlxuICAgIHN1cHBvcnRzRGlyZWN0UmVzcG9uc2VzKHRhcmdldCwgZmVhdHVyZXMpXG4gICk7XG59XG4iXX0=
144
+ function containsImageInput(value) {
145
+ if (Array.isArray(value))
146
+ return value.some(containsImageInput);
147
+ if (!isRecord(value))
148
+ return false;
149
+ const type = typeof value.type === "string" ? value.type.toLowerCase() : "";
150
+ if (type.includes("image"))
151
+ return true;
152
+ return Object.entries(value).some(([key, nested]) => key !== "arguments" && key !== "input" && containsImageInput(nested));
153
+ }
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVNsRCxpRkFBaUY7QUFDakYsTUFBTSxPQUFPLDhCQUErQixTQUFRLEtBQUs7SUFHbEM7SUFGWixNQUFNLEdBQUcsR0FBRyxDQUFDO0lBRXRCLFlBQXFCLFFBQTJCO1FBQzlDLEtBQUssQ0FBQywwREFBMEQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFEcEUsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFFOUMsSUFBSSxDQUFDLElBQUksR0FBRyxnQ0FBZ0MsQ0FBQztJQUMvQyxDQUFDO0NBQ0Y7QUFFRCw4RUFBOEU7QUFDOUUsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUF3QjtJQUNuRCxNQUFNLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbkQsSUFBSSxjQUFjLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksOEJBQThCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxJQUFJLGNBQWMsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQ0Usb0JBQW9CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztZQUN0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QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1RSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDeEMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDL0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLFdBQVcsSUFBSSxHQUFHLEtBQUssT0FBTyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUN4RixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVyZSBjYXBhYmlsaXR5LWRyaXZlbiByb3V0ZSBzZWxlY3Rpb24gZm9yIG1vZGVsLWdhdGV3YXkgcmVxdWVzdHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHBvbGljeSB9IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5pbXBvcnQgeyBpc1JlY29yZCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEdhdGV3YXlSb3V0ZSxcbiAgTW9kZWxUYXJnZXQsXG4gIFJlcXVlc3RlZEZlYXR1cmVzLFxuICBSZXNvbHZlUm91dGVJbnB1dCxcbiAgVXBzdHJlYW1Qcm90b2NvbCxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsLWdhdGV3YXlcIjtcblxuLyoqIEVycm9yIHJldHVybmVkIHdoZW4gcHJlc2VydmluZyBhIHJlcXVlc3RlZCBwcm90b2NvbCBmZWF0dXJlIGlzIGltcG9zc2libGUuICovXG5leHBvcnQgY2xhc3MgVW5zdXBwb3J0ZWRHYXRld2F5RmVhdHVyZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBzdGF0dXMgPSA0MDA7XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgZmVhdHVyZXM6IHJlYWRvbmx5IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIoYFRoZSBzZWxlY3RlZCBtb2RlbCBjYW5ub3QgcHJlc2VydmUgcmVxdWVzdGVkIGZlYXR1cmVzOiAke2ZlYXR1cmVzLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB0aGlzLm5hbWUgPSBcIlVuc3VwcG9ydGVkR2F0ZXdheUZlYXR1cmVFcnJvclwiO1xuICB9XG59XG5cbi8qKiBTZWxlY3QgdGhlIGxvd2VzdC1vdmVyaGVhZCB1cHN0cmVhbSB0aGF0IHByZXNlcnZlcyB0aGUgY2xpZW50IGNvbnRyYWN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVSb3V0ZShpbnB1dDogUmVzb2x2ZVJvdXRlSW5wdXQpOiBHYXRld2F5Um91dGUge1xuICBjb25zdCB7IGNsaWVudFByb3RvY29sLCBmZWF0dXJlcywgdGFyZ2V0IH0gPSBpbnB1dDtcbiAgaWYgKGNsaWVudFByb3RvY29sID09PSBcIm9wZW5haS1lbWJlZGRpbmdzXCIpIHtcbiAgICBpZiAoIXRhcmdldC5jYXBhYmlsaXRpZXMuZW1iZWRkaW5ncykge1xuICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkR2F0ZXdheUZlYXR1cmVFcnJvcihbXCJlbWJlZGRpbmdzXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGRpcmVjdFJvdXRlKGlucHV0LCBcImRhdGFicmlja3MtZW1iZWRkaW5nc1wiLCB0YXJnZXQuaWQpO1xuICB9XG4gIGlmIChjbGllbnRQcm90b2NvbCA9PT0gXCJvcGVuYWktcmVzcG9uc2VzXCIpIHtcbiAgICByZWplY3RTdGF0ZWZ1bFJlc3BvbnNlcyhmZWF0dXJlcyk7XG4gICAgaWYgKFxuICAgICAgY2FuVXNlQWlHYXRld2F5Q29kZXgodGFyZ2V0LCBmZWF0dXJlcykgJiZcbiAgICAgIHBvbGljeS5wcmVmZXJzU3lzdGVtTW9kZWxTZXJ2aWNlKFxuICAgICAgICBpbnB1dC5yZXF1ZXN0ZWRNb2RlbCxcbiAgICAgICAgdGFyZ2V0LmlkLFxuICAgICAgICB0YXJnZXQubW9kZWxTZXJ2aWNlTmFtZSEsXG4gICAgICAgIGlucHV0LnByZWZlclN5c3RlbU1vZGVscyA9PT0gdHJ1ZSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBkaXJlY3RSb3V0ZShpbnB1dCwgXCJkYXRhYnJpY2tzLWFpLWdhdGV3YXktY29kZXhcIiwgdGFyZ2V0Lm1vZGVsU2VydmljZU5hbWUhKTtcbiAgICB9XG4gICAgaWYgKHRhcmdldC5jYXBhYmlsaXRpZXMucmVzcG9uc2VzICYmIHN1cHBvcnRzRGlyZWN0UmVzcG9uc2VzKHRhcmdldCwgZmVhdHVyZXMpKSB7XG4gICAgICByZXR1cm4gZGlyZWN0Um91dGUoaW5wdXQsIFwiZGF0YWJyaWNrcy1yZXNwb25zZXNcIiwgdGFyZ2V0LmlkKTtcbiAgICB9XG4gICAgaWYgKGNhblVzZUFpR2F0ZXdheUNvZGV4KHRhcmdldCwgZmVhdHVyZXMpKSB7XG4gICAgICByZXR1cm4gZGlyZWN0Um91dGUoaW5wdXQsIFwiZGF0YWJyaWNrcy1haS1nYXRld2F5LWNvZGV4XCIsIHRhcmdldC5tb2RlbFNlcnZpY2VOYW1lISk7XG4gICAgfVxuICAgIGlmICh0YXJnZXQuY2FwYWJpbGl0aWVzLm9wZW5SZXNwb25zZXMgJiYgc3VwcG9ydHNPcGVuUmVzcG9uc2VzKHRhcmdldCwgZmVhdHVyZXMpKSB7XG4gICAgICByZXR1cm4gZGlyZWN0Um91dGUoaW5wdXQsIFwiZGF0YWJyaWNrcy1vcGVuLXJlc3BvbnNlc1wiLCB0YXJnZXQuaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNsYXRlZFJvdXRlKGlucHV0KTtcbiAgfVxuXG4gIGlmIChjbGllbnRQcm90b2NvbCA9PT0gXCJvcGVuYWktY2hhdFwiKSB7XG4gICAgaWYgKHRhcmdldC5jYXBhYmlsaXRpZXMuY2hhdCAmJiBzdXBwb3J0c1Rvb2xzKHRhcmdldCwgZmVhdHVyZXMpKSB7XG4gICAgICByZXR1cm4gZGlyZWN0Um91dGUoaW5wdXQsIFwiZGF0YWJyaWNrcy1jaGF0XCIsIHRhcmdldC5pZCk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2xhdGVkUm91dGUoaW5wdXQpO1xuICB9XG5cbiAgaWYgKHRhcmdldC5jYXBhYmlsaXRpZXMuYW50aHJvcGljICYmIHN1cHBvcnRzVG9vbHModGFyZ2V0LCBmZWF0dXJlcykpIHtcbiAgICByZXR1cm4gZGlyZWN0Um91dGUoaW5wdXQsIFwiZGF0YWJyaWNrcy1hbnRocm9waWNcIiwgdGFyZ2V0LmlkKTtcbiAgfVxuICByZXR1cm4gdHJhbnNsYXRlZFJvdXRlKGlucHV0KTtcbn1cblxuLyoqIERldGVjdCByb3V0ZS1hZmZlY3RpbmcgZmVhdHVyZXMgZnJvbSBhbiBPcGVuQUkgb3IgQW50aHJvcGljIHJlcXVlc3QgYm9keS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0ZWRGZWF0dXJlcyhib2R5OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pOiBSZXF1ZXN0ZWRGZWF0dXJlcyB7XG4gIGNvbnN0IHRvb2xzID0gQXJyYXkuaXNBcnJheShib2R5LnRvb2xzKSA/IGJvZHkudG9vbHMgOiBbXTtcbiAgY29uc3QgdG9vbFJlY29yZHMgPSB0b29scy5maWx0ZXIoKHRvb2wpOiB0b29sIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IGlzUmVjb3JkKHRvb2wpKTtcbiAgY29uc3QgdG9vbFR5cGVzID0gdG9vbFJlY29yZHMubWFwKCh0b29sKSA9PiB0b29sLnR5cGUpO1xuICBjb25zdCB0b29sTmFtZXMgPSB0b29sUmVjb3Jkc1xuICAgIC5tYXAoKHRvb2wpID0+XG4gICAgICB0eXBlb2YgdG9vbC5uYW1lID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gdG9vbC5uYW1lXG4gICAgICAgIDogaXNSZWNvcmQodG9vbC5mdW5jdGlvbikgJiYgdHlwZW9mIHRvb2wuZnVuY3Rpb24ubmFtZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gdG9vbC5mdW5jdGlvbi5uYW1lXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgKVxuICAgIC5maWx0ZXIoKG5hbWUpOiBuYW1lIGlzIHN0cmluZyA9PiBuYW1lICE9PSB1bmRlZmluZWQpO1xuICBjb25zdCB0ZXh0ID0gaXNSZWNvcmQoYm9keS50ZXh0KSA/IGJvZHkudGV4dCA6IHt9O1xuICBjb25zdCBmb3JtYXQgPSBpc1JlY29yZCh0ZXh0LmZvcm1hdCkgPyB0ZXh0LmZvcm1hdC50eXBlIDogdGV4dC5mb3JtYXQ7XG4gIGNvbnN0IG91dHB1dENvbmZpZyA9IGlzUmVjb3JkKGJvZHkub3V0cHV0X2NvbmZpZykgPyBib2R5Lm91dHB1dF9jb25maWcgOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBiYWNrZ3JvdW5kOiBib2R5LmJhY2tncm91bmQgPT09IHRydWUsXG4gICAgY3VzdG9tVG9vbHM6IHRvb2xUeXBlcy5zb21lKCh0eXBlKSA9PiB0eXBlID09PSBcImN1c3RvbVwiKSxcbiAgICBwYXJhbGxlbFRvb2xzOiBib2R5LnBhcmFsbGVsX3Rvb2xfY2FsbHMgPT09IHRydWUsXG4gICAgcHJldmlvdXNSZXNwb25zZTpcbiAgICAgIHR5cGVvZiBib2R5LnByZXZpb3VzX3Jlc3BvbnNlX2lkID09PSBcInN0cmluZ1wiICYmIGJvZHkucHJldmlvdXNfcmVzcG9uc2VfaWQubGVuZ3RoID4gMCxcbiAgICByZWFzb25pbmc6XG4gICAgICBpc1JlY29yZChib2R5LnJlYXNvbmluZykgfHxcbiAgICAgIGJvZHkucmVhc29uaW5nX2VmZm9ydCAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICBpc1JlY29yZChib2R5LnRoaW5raW5nKSB8fFxuICAgICAgb3V0cHV0Q29uZmlnLmVmZm9ydCAhPT0gdW5kZWZpbmVkLFxuICAgIHN0b3JhZ2U6IGJvZHkuc3RvcmUgPT09IHRydWUsXG4gICAgc3RydWN0dXJlZE91dHB1dDogZm9ybWF0ICE9PSB1bmRlZmluZWQgJiYgZm9ybWF0ICE9PSBcInRleHRcIixcbiAgICB0b29sczogdG9vbHMubGVuZ3RoID4gMCxcbiAgICB1bnN1cHBvcnRlZE9wZW5SZXNwb25zZXNUb29sczogdG9vbFR5cGVzLnNvbWUoXG4gICAgICAodHlwZSkgPT4gdHlwZSAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGUgIT09IFwid2ViX3NlYXJjaFwiICYmIHR5cGUgIT09IFwid2ViX3NlYXJjaF9wcmV2aWV3XCIsXG4gICAgKSxcbiAgICB3ZWJTZWFyY2g6IHRvb2xUeXBlcy5zb21lKCh0eXBlKSA9PiB0eXBlID09PSBcIndlYl9zZWFyY2hcIiB8fCB0eXBlID09PSBcIndlYl9zZWFyY2hfcHJldmlld1wiKSxcbiAgICBpbWFnZUlucHV0OiBjb250YWluc0ltYWdlSW5wdXQoYm9keS5pbnB1dCkgfHwgY29udGFpbnNJbWFnZUlucHV0KGJvZHkubWVzc2FnZXMpLFxuICAgIGFwcGx5UGF0Y2g6IHRvb2xOYW1lcy5zb21lKChuYW1lKSA9PiAvXmFwcGx5W18tXT9wYXRjaCQvaS50ZXN0KG5hbWUpKSxcbiAgfTtcbn1cblxuLyoqIFJldHVybiB3aGV0aGVyIGFuIE9yaWdpbmF0b3IgaGVhZGVyIHNlbGVjdHMgQ29kZXggY29tcGF0aWJpbGl0eSBiZWhhdmlvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvZGV4T3JpZ2luYXRvcihvcmlnaW5hdG9yOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9yaWdpbmF0b3I/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJjb2RleFwiKSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGlyZWN0Um91dGUoXG4gIGlucHV0OiBSZXNvbHZlUm91dGVJbnB1dCxcbiAgdXBzdHJlYW1Qcm90b2NvbDogRXhjbHVkZTxVcHN0cmVhbVByb3RvY29sLCBcImFpLXNka1wiPixcbiAgdXBzdHJlYW1Nb2RlbDogc3RyaW5nLFxuKTogR2F0ZXdheVJvdXRlIHtcbiAgcmV0dXJuIHtcbiAgICBjbGllbnRQcm90b2NvbDogaW5wdXQuY2xpZW50UHJvdG9jb2wsXG4gICAgdXBzdHJlYW1Qcm90b2NvbCxcbiAgICB0YXJnZXQ6IGlucHV0LnRhcmdldCxcbiAgICB1cHN0cmVhbU1vZGVsLFxuICAgIHRyYW5zbGF0ZVJlcXVlc3Q6IGZhbHNlLFxuICAgIHRyYW5zbGF0ZVJlc3BvbnNlOiBmYWxzZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlZFJvdXRlKGlucHV0OiBSZXNvbHZlUm91dGVJbnB1dCk6IEdhdGV3YXlSb3V0ZSB7XG4gIHJldHVybiB7XG4gICAgY2xpZW50UHJvdG9jb2w6IGlucHV0LmNsaWVudFByb3RvY29sLFxuICAgIHVwc3RyZWFtUHJvdG9jb2w6IFwiYWktc2RrXCIsXG4gICAgdGFyZ2V0OiBpbnB1dC50YXJnZXQsXG4gICAgdXBzdHJlYW1Nb2RlbDogaW5wdXQudGFyZ2V0LmlkLFxuICAgIHRyYW5zbGF0ZVJlcXVlc3Q6IHRydWUsXG4gICAgdHJhbnNsYXRlUmVzcG9uc2U6IHRydWUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzRGlyZWN0UmVzcG9uc2VzKHRhcmdldDogTW9kZWxUYXJnZXQsIGZlYXR1cmVzOiBSZXF1ZXN0ZWRGZWF0dXJlcyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHN1cHBvcnRzVG9vbHModGFyZ2V0LCBmZWF0dXJlcykgJiZcbiAgICAoIWZlYXR1cmVzLmN1c3RvbVRvb2xzIHx8IHRhcmdldC5jYXBhYmlsaXRpZXMuY3VzdG9tVG9vbHMpICYmXG4gICAgKCFmZWF0dXJlcy5zdHJ1Y3R1cmVkT3V0cHV0IHx8IHRhcmdldC5jYXBhYmlsaXRpZXMuc3RydWN0dXJlZE91dHB1dClcbiAgKTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNPcGVuUmVzcG9uc2VzKHRhcmdldDogTW9kZWxUYXJnZXQsIGZlYXR1cmVzOiBSZXF1ZXN0ZWRGZWF0dXJlcyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHN1cHBvcnRzVG9vbHModGFyZ2V0LCBmZWF0dXJlcykgJiZcbiAgICAhZmVhdHVyZXMuY3VzdG9tVG9vbHMgJiZcbiAgICAhZmVhdHVyZXMucHJldmlvdXNSZXNwb25zZSAmJlxuICAgICFmZWF0dXJlcy5zdG9yYWdlICYmXG4gICAgIWZlYXR1cmVzLmJhY2tncm91bmQgJiZcbiAgICAhZmVhdHVyZXMudW5zdXBwb3J0ZWRPcGVuUmVzcG9uc2VzVG9vbHMgJiZcbiAgICAoIWZlYXR1cmVzLndlYlNlYXJjaCB8fCB0YXJnZXQuY2FwYWJpbGl0aWVzLndlYlNlYXJjaCkgJiZcbiAgICAoIWZlYXR1cmVzLnN0cnVjdHVyZWRPdXRwdXQgfHwgdGFyZ2V0LmNhcGFiaWxpdGllcy5zdHJ1Y3R1cmVkT3V0cHV0KVxuICApO1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c1Rvb2xzKHRhcmdldDogTW9kZWxUYXJnZXQsIGZlYXR1cmVzOiBSZXF1ZXN0ZWRGZWF0dXJlcyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgICghZmVhdHVyZXMudG9vbHMgfHwgdGFyZ2V0LmNhcGFiaWxpdGllcy50b29scykgJiZcbiAgICAoIWZlYXR1cmVzLnBhcmFsbGVsVG9vbHMgfHwgdGFyZ2V0LmNhcGFiaWxpdGllcy5wYXJhbGxlbFRvb2xzKVxuICApO1xufVxuXG5mdW5jdGlvbiByZWplY3RTdGF0ZWZ1bFJlc3BvbnNlcyhmZWF0dXJlczogUmVxdWVzdGVkRmVhdHVyZXMpOiB2b2lkIHtcbiAgY29uc3QgdW5zdXBwb3J0ZWQgPSBbXG4gICAgLi4uKGZlYXR1cmVzLnByZXZpb3VzUmVzcG9uc2UgPyBbXCJwcmV2aW91c19yZXNwb25zZV9pZFwiXSA6IFtdKSxcbiAgICAuLi4oZmVhdHVyZXMuc3RvcmFnZSA/IFtcInN0b3JlXCJdIDogW10pLFxuICAgIC4uLihmZWF0dXJlcy5iYWNrZ3JvdW5kID8gW1wiYmFja2dyb3VuZFwiXSA6IFtdKSxcbiAgXTtcbiAgaWYgKHVuc3VwcG9ydGVkLmxlbmd0aCA+IDApIHRocm93IG5ldyBVbnN1cHBvcnRlZEdhdGV3YXlGZWF0dXJlRXJyb3IodW5zdXBwb3J0ZWQpO1xufVxuXG5mdW5jdGlvbiBjYW5Vc2VBaUdhdGV3YXlDb2RleCh0YXJnZXQ6IE1vZGVsVGFyZ2V0LCBmZWF0dXJlczogUmVxdWVzdGVkRmVhdHVyZXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBCb29sZWFuKHRhcmdldC5jYXBhYmlsaXRpZXMuYWlHYXRld2F5Q29kZXggJiYgdGFyZ2V0Lm1vZGVsU2VydmljZU5hbWUpICYmXG4gICAgc3VwcG9ydHNEaXJlY3RSZXNwb25zZXModGFyZ2V0LCBmZWF0dXJlcylcbiAgKTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNJbWFnZUlucHV0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLnNvbWUoY29udGFpbnNJbWFnZUlucHV0KTtcbiAgaWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZS50eXBlID09PSBcInN0cmluZ1wiID8gdmFsdWUudHlwZS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcbiAgaWYgKHR5cGUuaW5jbHVkZXMoXCJpbWFnZVwiKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh2YWx1ZSkuc29tZShcbiAgICAoW2tleSwgbmVzdGVkXSkgPT4ga2V5ICE9PSBcImFyZ3VtZW50c1wiICYmIGtleSAhPT0gXCJpbnB1dFwiICYmIGNvbnRhaW5zSW1hZ2VJbnB1dChuZXN0ZWQpLFxuICApO1xufVxuIl19