@fjall/util 0.56.0 → 0.58.5

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.
@@ -1,4 +1,5 @@
1
- import { Account } from "@aws-sdk/client-organizations";
1
+ import type { Account } from "@aws-sdk/client-organizations";
2
+ export type { Account } from "@aws-sdk/client-organizations";
2
3
  type Provider = "aws";
3
4
  export type ServiceConfig = {
4
5
  id: string;
@@ -87,20 +88,23 @@ export declare class Config {
87
88
  updateProviderAccountEnvironments(accountTypes: {
88
89
  [key: string]: readonly string[];
89
90
  }): void;
90
- setExistingAccounts(region: string): Promise<void>;
91
+ /**
92
+ * Sets the existing accounts list. This should be called by AccountService
93
+ * after it fetches the accounts from AWS.
94
+ * @param accounts List of AWS accounts from Organizations API
95
+ */
96
+ setExistingAccountsList(accounts: Account[]): void;
91
97
  getExistingAccounts(): Account[];
92
- getAWSAccountId(): Promise<string | undefined>;
93
98
  setPrimaryRegion(region: string): void;
94
99
  setSecondaryRegions(regions: string[]): void;
95
100
  getPrimaryRegion(): string | undefined;
96
101
  getSecondaryRegions(): string[] | undefined;
97
- setCostAllocationTags(costAllocationTags: CostAllocationTags[]): Promise<{
98
- enabled: boolean;
99
- hasTags: boolean;
100
- }>;
101
- isAWSCostExplorerEnabled(): Promise<boolean>;
102
- getDateXDaysAgo(days: number): string;
103
- getFormattedDate(date: Date): string;
102
+ /**
103
+ * Sets the cost allocation tags list. This should be called by AccountService
104
+ * after it fetches the tags from AWS Cost Explorer.
105
+ * @param tags List of cost allocation tags
106
+ */
107
+ setCostAllocationTagsList(tags: CostAllocationTags[]): void;
104
108
  getCostAllocationTags(): CostAllocationTags[];
105
109
  /**
106
110
  * Get the fjall config directory path
@@ -108,4 +112,3 @@ export declare class Config {
108
112
  */
109
113
  static getConfigDirectory(): string | null;
110
114
  }
111
- export {};
@@ -2,9 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Config = void 0;
4
4
  const fs = require("fs");
5
- const client_organizations_1 = require("@aws-sdk/client-organizations");
6
- const client_sts_1 = require("@aws-sdk/client-sts");
7
- const client_cost_explorer_1 = require("@aws-sdk/client-cost-explorer");
8
5
  /**
9
6
  * The current base-version of any newly created config file
10
7
  */
@@ -194,26 +191,17 @@ class Config {
194
191
  }
195
192
  }
196
193
  }
197
- async setExistingAccounts(region) {
198
- // Make API Call
199
- const client = new client_organizations_1.OrganizationsClient({
200
- region: region,
201
- });
202
- const request = new client_organizations_1.ListAccountsCommand({
203
- MaxResults: Number("20"),
204
- });
205
- const response = await client.send(request);
206
- this.existingAccountsConfig = response.Accounts || [];
194
+ /**
195
+ * Sets the existing accounts list. This should be called by AccountService
196
+ * after it fetches the accounts from AWS.
197
+ * @param accounts List of AWS accounts from Organizations API
198
+ */
199
+ setExistingAccountsList(accounts) {
200
+ this.existingAccountsConfig = accounts;
207
201
  }
208
202
  getExistingAccounts() {
209
203
  return this.existingAccountsConfig;
210
204
  }
211
- async getAWSAccountId() {
212
- const stsClient = new client_sts_1.STSClient({});
213
- const request = new client_sts_1.GetCallerIdentityCommand({});
214
- const response = await stsClient.send(request);
215
- return response?.Account || undefined;
216
- }
217
205
  setPrimaryRegion(region) {
218
206
  this.rootConfig.primaryRegion = region;
219
207
  }
@@ -226,82 +214,13 @@ class Config {
226
214
  getSecondaryRegions() {
227
215
  return this.rootConfig.secondaryRegions;
228
216
  }
229
- async setCostAllocationTags(costAllocationTags) {
230
- // If cost explorer is not enabled, we return an empty array
231
- const isCostExplorerEnabled = await this.isAWSCostExplorerEnabled();
232
- if (!isCostExplorerEnabled) {
233
- this.costAllocationTagsConfig = [];
234
- return { enabled: false, hasTags: false };
235
- }
236
- const client = new client_cost_explorer_1.CostExplorerClient({ region: "us-east-1" }); // Cost explorer only exists in us-east-1
237
- const command = new client_cost_explorer_1.ListCostAllocationTagsCommand({});
238
- const response = await client.send(command);
239
- // Target specific user-defined tags
240
- const targetUserTags = [
241
- "fjall:operations:pool",
242
- "fjall:costAllocation:environment",
243
- "fjall:costAllocation:service",
244
- "fjall:costAllocation:owner",
245
- ];
246
- // Filter and process tags
247
- this.costAllocationTagsConfig = (response.CostAllocationTags || [])
248
- .filter((tag) => {
249
- // Skip tags without a key
250
- if (!tag.TagKey)
251
- return false;
252
- // Keep all AWS-generated tags
253
- if (tag.Type === "AWSGenerated")
254
- return true;
255
- // Keep only specific user-defined tags
256
- return targetUserTags.includes(tag.TagKey);
257
- })
258
- .map((tag) => ({
259
- TagKey: tag.TagKey || "",
260
- Status: tag.Status || "Unknown",
261
- }));
262
- return {
263
- enabled: true,
264
- hasTags: this.costAllocationTagsConfig.length > 0,
265
- };
266
- }
267
- async isAWSCostExplorerEnabled() {
268
- try {
269
- const client = new client_cost_explorer_1.CostExplorerClient({ region: "us-east-1" });
270
- // Make a simple API call to check if Cost Explorer is accessible
271
- const input = {
272
- TimePeriod: {
273
- Start: this.getDateXDaysAgo(30),
274
- End: this.getFormattedDate(new Date()),
275
- },
276
- Dimension: "SERVICE",
277
- };
278
- const command = new client_cost_explorer_1.GetDimensionValuesCommand(input);
279
- await client.send(command);
280
- return true;
281
- }
282
- catch (error) {
283
- if (error.__type === "DataUnavailableException") {
284
- console.error("Cost Explorer data is not available yet. The service might be enabled but still preparing data.");
285
- return true; // Service is enabled but data not ready
286
- }
287
- else if (error.__type === "UnrecognizedClientException") {
288
- console.error("Cost Explorer is not enabled for this account or credentials are invalid.");
289
- console.log("Tip: Check if you've enable it in the AWS Billing console.");
290
- return false;
291
- }
292
- else {
293
- console.error("Error checking Cost Explorer status:", error);
294
- return false;
295
- }
296
- }
297
- }
298
- getDateXDaysAgo(days) {
299
- const date = new Date();
300
- date.setDate(date.getDate() - days);
301
- return this.getFormattedDate(date);
302
- }
303
- getFormattedDate(date) {
304
- return date.toISOString().split("T")[0];
217
+ /**
218
+ * Sets the cost allocation tags list. This should be called by AccountService
219
+ * after it fetches the tags from AWS Cost Explorer.
220
+ * @param tags List of cost allocation tags
221
+ */
222
+ setCostAllocationTagsList(tags) {
223
+ this.costAllocationTagsConfig = tags;
305
224
  }
306
225
  getCostAllocationTags() {
307
226
  return this.costAllocationTagsConfig;
@@ -315,4 +234,4 @@ class Config {
315
234
  }
316
235
  }
317
236
  exports.Config = Config;
318
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsd0VBSXVDO0FBQ3ZDLG9EQUEwRTtBQUMxRSx3RUFLdUM7QUFxQ3ZDOztHQUVHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFFaEM7O0dBRUc7QUFDSCxNQUFhLE1BQU07SUFLakIsWUFDRSxVQUFtQixFQUNuQixzQkFBa0MsRUFDbEMsd0JBQStDO1FBRS9DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVTtZQUMxQixDQUFDLENBQUMsVUFBVTtZQUNaLENBQUMsQ0FBQztnQkFDRSxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixRQUFRLEVBQUUsRUFBRTtnQkFDWixnQkFBZ0IsRUFBRSxFQUFFO2FBQ3JCLENBQUM7UUFFTixJQUFJLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCO1lBQ2xELENBQUMsQ0FBQyxzQkFBc0I7WUFDeEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLElBQUksQ0FBQyx3QkFBd0IsR0FBRyx3QkFBd0I7WUFDdEQsQ0FBQyxDQUFDLHdCQUF3QjtZQUMxQixDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1QsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssTUFBTSxDQUFDLG1CQUFtQjtRQUNoQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0IsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLHlCQUF5QjtRQUU5QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFB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Q3RDLENBQUM7Q0FDRjtBQTVZRCx3QkE0WUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB7XG4gIEFjY291bnQsXG4gIExpc3RBY2NvdW50c0NvbW1hbmQsXG4gIE9yZ2FuaXphdGlvbnNDbGllbnQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtb3JnYW5pemF0aW9uc1wiO1xuaW1wb3J0IHsgU1RTQ2xpZW50LCBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXN0c1wiO1xuaW1wb3J0IHtcbiAgQ29zdEV4cGxvcmVyQ2xpZW50LFxuICBMaXN0Q29zdEFsbG9jYXRpb25UYWdzQ29tbWFuZCxcbiAgR2V0RGltZW5zaW9uVmFsdWVzQ29tbWFuZCxcbiAgR2V0RGltZW5zaW9uVmFsdWVzQ29tbWFuZElucHV0LFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWNvc3QtZXhwbG9yZXJcIjtcblxudHlwZSBQcm92aWRlciA9IFwiYXdzXCI7XG5cbmV4cG9ydCB0eXBlIFNlcnZpY2VDb25maWcgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBudW1iZXI7XG4gIG9wdGlvbnM/OiBvYmplY3Q7XG4gIGRvY2tlckNvbmZpZz86IHtcbiAgICBkb2NrZXJmaWxlUGF0aDogc3RyaW5nO1xuICAgIGNvbnRhaW5lclBvcnQ6IG51bWJlcjtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFByb3ZpZGVyQWNjb3VudCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBtYW5hZ2VkPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgUm9vdENvbmZpZyA9IHtcbiAgdmVyc2lvbj86IG51bWJlcjtcbiAgZGV2ZWxvcG1lbnQ/OiBib29sZWFuO1xuICBzZXJ2aWNlcz86IHsgW2tleTogc3RyaW5nXTogU2VydmljZUNvbmZpZyB9O1xuICBwcm92aWRlcj86IFByb3ZpZGVyO1xuICBwcm92aWRlckFjY291bnRzPzogUHJvdmlkZXJBY2NvdW50W107XG4gIHByaW1hcnlSZWdpb24/OiBzdHJpbmc7XG4gIHNlY29uZGFyeVJlZ2lvbnM/OiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgQ29zdEFsbG9jYXRpb25UYWdzID0ge1xuICBUYWdLZXk6IHN0cmluZztcbiAgU3RhdHVzOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFRoZSBjdXJyZW50IGJhc2UtdmVyc2lvbiBvZiBhbnkgbmV3bHkgY3JlYXRlZCBjb25maWcgZmlsZVxuICovXG5jb25zdCBCQVNFX0NPTkZJR19WRVJTSU9OID0gMC4xO1xuXG4vKipcbiAqIENvbmZpZyBjbGFzcyBmb3IgbG9hZGluZyBhbmQgc2F2aW5nIGZqYWxsLWNvbmZpZy5qc29uIGZpbGVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbmZpZyB7XG4gIHJvb3RDb25maWc6IFJvb3RDb25maWc7XG4gIGV4aXN0aW5nQWNjb3VudHNDb25maWc6IEFjY291bnRbXTtcbiAgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnOiBDb3N0QWxsb2NhdGlvblRhZ3NbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByb290Q29uZmlnPzogb2JqZWN0LFxuICAgIGV4aXN0aW5nQWNjb3VudHNDb25maWc/OiBBY2NvdW50W10sXG4gICAgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnPzogQ29zdEFsbG9jYXRpb25UYWdzW11cbiAgKSB7XG4gICAgdGhpcy5yb290Q29uZmlnID0gcm9vdENvbmZpZ1xuICAgICAgPyByb290Q29uZmlnXG4gICAgICA6IHtcbiAgICAgICAgICB2ZXJzaW9uOiBCQVNFX0NPTkZJR19WRVJTSU9OLFxuICAgICAgICAgIHNlcnZpY2VzOiB7fSxcbiAgICAgICAgICBwcm92aWRlckFjY291bnRzOiBbXSxcbiAgICAgICAgfTtcblxuICAgIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZyA9IGV4aXN0aW5nQWNjb3VudHNDb25maWdcbiAgICAgID8gZXhpc3RpbmdBY2NvdW50c0NvbmZpZ1xuICAgICAgOiBbXTtcblxuICAgIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID0gY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnXG4gICAgICA/IGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZ1xuICAgICAgOiBbXTtcbiAgfVxuXG4gIGlzRGV2ZWxvcG1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yb290Q29uZmlnPy5kZXZlbG9wbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBmamFsbCBjb25maWcgZGlyZWN0b3J5IGJ5IHdhbGtpbmcgdXAgdGhlIGRpcmVjdG9yeSB0cmVlXG4gICAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIHRoZSBmamFsbCBjb25maWcgZGlyZWN0b3J5IG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBmaW5kQ29uZmlnRGlyZWN0b3J5KCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcblxuICAgIGxldCBjdXJyZW50RGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBtYXhEZXB0aCA9IDEwOyAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3BzXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heERlcHRoOyBpKyspIHtcbiAgICAgIC8vIENoZWNrIGlmIGN1cnJlbnQgZGlyZWN0b3J5IGNvbnRhaW5zIGZqYWxsIGNvbmZpZyBmaWxlc1xuICAgICAgY29uc3QgZmphbGxEaXIgPSBwYXRoLmpvaW4oY3VycmVudERpciwgXCJmamFsbFwiKTtcbiAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBwYXRoLmpvaW4oZmphbGxEaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIik7XG5cbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGUpKSB7XG4gICAgICAgIHJldHVybiBmamFsbERpcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgY3VycmVudCBkaXJlY3RvcnkgSVMgdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGRpcmVjdENvbmZpZ0ZpbGUgPSBwYXRoLmpvaW4oY3VycmVudERpciwgXCJmamFsbC1jb25maWcuanNvblwiKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGRpcmVjdENvbmZpZ0ZpbGUpKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50RGlyO1xuICAgICAgfVxuXG4gICAgICAvLyBNb3ZlIHVwIG9uZSBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IHBhcmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgICAgIGlmIChwYXJlbnREaXIgPT09IGN1cnJlbnREaXIpIGJyZWFrOyAvLyBSZWFjaGVkIGZpbGVzeXN0ZW0gcm9vdFxuICAgICAgY3VycmVudERpciA9IHBhcmVudERpcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGNvbmZpZyBmaWxlIGludG8gbWVtb3J5IGFzIGEgcmF3IEpTT04gc3RyaW5nXG4gICAqIEByZXR1cm5zIENvbmZpZyBhcyBKU09OIHN0cmluZyBvciBOVUxMIGlmIG5vIGNvbmZpZyBmaWxlIGFjY2Vzc2libGVcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGxvYWRDb25maWdGaWxlKGNvbmZpZ0ZpbGU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICBmcy5hY2Nlc3NTeW5jKGNvbmZpZ0ZpbGUsIGZzLmNvbnN0YW50cy5SX09LIHwgZnMuY29uc3RhbnRzLldfT0spO1xuXG4gICAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKGNvbmZpZ0ZpbGUsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgIC8vICAgYEV4cGVjdGVkIGZpbGUgJyR7Y29uZmlnRmlsZX0nIGRvZXMgbm90IGV4aXN0IG9yIGNhbm5vdCBiZSByZWFkLmBcbiAgICAgIC8vICk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gZmlsZVxuICAgKlxuICAgKiBAcmV0dXJucyBMb2FkZWQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgc3RhdGljIGxvYWRDb25maWcoKTogQ29uZmlnIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnRGlyID0gQ29uZmlnLmZpbmRDb25maWdEaXJlY3RvcnkoKTtcbiAgICAgIGlmICghY29uZmlnRGlyKSB7XG4gICAgICAgIC8vIFJldHVybiBkZWZhdWx0IGNvbmZpZyBpZiBubyBjb25maWcgZGlyZWN0b3J5IGZvdW5kXG4gICAgICAgIHJldHVybiBuZXcgQ29uZmlnKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbiAgICAgIGNvbnN0IHJvb3RDb25maWdKc29uID0gQ29uZmlnLmxvYWRDb25maWdGaWxlKFxuICAgICAgICBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpXG4gICAgICApO1xuICAgICAgY29uc3QgZXhpc3RpbmdBY2NvdW50SnNvbiA9IENvbmZpZy5sb2FkQ29uZmlnRmlsZShcbiAgICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJhY2NvdW50cy1jb25maWcuanNvblwiKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNvc3RBbGxvY2F0aW9uVGFnc0pzb24gPSBDb25maWcubG9hZENvbmZpZ0ZpbGUoXG4gICAgICAgIHBhdGguam9pbihjb25maWdEaXIsIFwiY29zdC1hbGxvY2F0aW9uLXRhZ3MtY29uZmlnLmpzb25cIilcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJvb3RDb25maWcgPSByb290Q29uZmlnSnNvblxuICAgICAgICA/IEpTT04ucGFyc2Uocm9vdENvbmZpZ0pzb24pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXhpc3RpbmdBY2NvdW50c0NvbmZpZyA9IGV4aXN0aW5nQWNjb3VudEpzb25cbiAgICAgICAgPyBKU09OLnBhcnNlKGV4aXN0aW5nQWNjb3VudEpzb24pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID0gY29zdEFsbG9jYXRpb25UYWdzSnNvblxuICAgICAgICA/IEpTT04ucGFyc2UoY29zdEFsbG9jYXRpb25UYWdzSnNvbilcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBuZXcgQ29uZmlnKFxuICAgICAgICByb290Q29uZmlnLFxuICAgICAgICBleGlzdGluZ0FjY291bnRzQ29uZmlnLFxuICAgICAgICBjb3N0QWxsb2NhdGlvblRhZ3NDb25maWdcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiVW5hYmxlIHRvIHBhcnNlIGNvbmZpZyBmaWxlLiBBYm9ydGluZy5cIiwgZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBjb25maWd1cmF0aW9uIHRvIGZpbGVcbiAgICovXG4gIHNhdmVDb25maWcoKSB7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuICAgIGNvbnN0IGNvbmZpZ0RpciA9XG4gICAgICBDb25maWcuZmluZENvbmZpZ0RpcmVjdG9yeSgpIHx8IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcImZqYWxsXCIpO1xuXG4gICAgLy8gRW5zdXJlIGRpcmVjdG9yeSBleGlzdHNcbiAgICBmcy5ta2RpclN5bmMoY29uZmlnRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHJvb3RKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5yb290Q29uZmlnLCBudWxsLCAyKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihjb25maWdEaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIiksIHJvb3RKc29uU3RyaW5nKTtcblxuICAgIGNvbnN0IGV4aXN0aW5nQWNjb3VudHNKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICB0aGlzLmV4aXN0aW5nQWNjb3VudHNDb25maWcsXG4gICAgICBudWxsLFxuICAgICAgMlxuICAgICk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbihjb25maWdEaXIsIFwiYWNjb3VudHMtY29uZmlnLmpzb25cIiksXG4gICAgICBleGlzdGluZ0FjY291bnRzSnNvblN0cmluZ1xuICAgICk7XG5cbiAgICBjb25zdCBjb3N0QWxsb2NhdGlvblRhZ3NKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICB0aGlzLmNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICAyXG4gICAgKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJjb3N0LWFsbG9jYXRpb24tdGFncy1jb25maWcuanNvblwiKSxcbiAgICAgIGNvc3RBbGxvY2F0aW9uVGFnc0pzb25TdHJpbmdcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc2NoZW1hIHZlcnNpb24gdXNlZCBmb3IgdGhpcyBjb25maWcgZmlsZVxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbiBTY2hlbWEgVmVyc2lvblxuICAgKi9cbiAgc2V0VmVyc2lvbih2ZXJzaW9uOiBudW1iZXIpIHtcbiAgICB0aGlzLnJvb3RDb25maWcudmVyc2lvbiA9IHZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IHNlcnZpY2UgdG8gdGhlIGNvbmZpZyBmaWxlXG4gICAqIEBwYXJhbSBzZXJ2aWNlS2V5IE5hbWUva2V5IG9mIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBjb25maWcgU2VydmljZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICovXG4gIGFkZFNlcnZpY2Uoc2VydmljZUtleTogc3RyaW5nLCBjb25maWc6IFNlcnZpY2VDb25maWcpIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5zZXJ2aWNlcykgdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzID0ge307XG4gICAgdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzW3NlcnZpY2VLZXldID0gY29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjb25maWcgb3B0aW9ucyBvbiBhIHByZXZpb3VzbHkgZGVmaW5lZCBzZXJ2aWNlXG4gICAqXG4gICAqIEBwYXJhbSBzZXJ2aWNlS2V5IE5hbWUva2V5IG9mIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBjb25maWcgU2VydmljZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgdG8gc2V0XG4gICAqL1xuICBzZXRTZXJ2aWNlT3B0aW9uKHNlcnZpY2VLZXk6IHN0cmluZywgY29uZmlnOiBTZXJ2aWNlQ29uZmlnKSB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuc2VydmljZXMpIHRoaXMucm9vdENvbmZpZy5zZXJ2aWNlcyA9IHt9O1xuXG4gICAgY29uc3Qgc2VydmljZSA9IHRoaXMucm9vdENvbmZpZy5zZXJ2aWNlc1tzZXJ2aWNlS2V5XTtcbiAgICBpZiAoIXNlcnZpY2UpIHJldHVybjtcblxuICAgIHRoaXMucm9vdENvbmZpZy5zZXJ2aWNlc1tzZXJ2aWNlS2V5XSA9IHsgLi4uc2VydmljZSwgLi4uY29uZmlnIH07XG4gIH1cblxuICBnZXRTZXJ2aWNlQ29uZmlnKHNlcnZpY2VLZXk6IHN0cmluZyk6IFNlcnZpY2VDb25maWcgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5zZXJ2aWNlcykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5zZXJ2aWNlc1tzZXJ2aWNlS2V5XSB8fCBudWxsO1xuICB9XG5cbiAgc2V0UHJvdmlkZXIocHJvdmlkZXI6IFByb3ZpZGVyKSB7XG4gICAgdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyID0gcHJvdmlkZXI7XG4gIH1cblxuICBhZGRQcm92aWRlckFjY291bnQoYWNjb3VudDogUHJvdmlkZXJBY2NvdW50KSB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cylcbiAgICAgIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzID0gW107XG5cbiAgICAvLyBlbnN1cmUgYWNjb3VudCBuYW1lIGlzIGFsd2F5cyBsb3dlcmNhc2VcbiAgICBhY2NvdW50Lm5hbWUgPSBhY2NvdW50Lm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcblxuICAgIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLnB1c2goYWNjb3VudCk7XG4gIH1cblxuICBnZXRQcm92aWRlckFjY291bnQoYWNjb3VudE5hbWU6IHN0cmluZykge1xuICAgIC8vIFRPRE86IEZpeCBudWxsIGVycm9yXG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLmZpbmQoXG4gICAgICAoYWNjb3VudCkgPT5cbiAgICAgICAgYWNjb3VudC5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IGFjY291bnROYW1lLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG5cbiAgZ2V0UHJvdmlkZXJBY2NvdW50QnlJZChhY2NvdW50SWQ6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cy5maW5kKFxuICAgICAgKGFjY291bnQpID0+IGFjY291bnQuaWQgPT09IGFjY291bnRJZFxuICAgICk7XG4gIH1cblxuICB1cGRhdGVQcm92aWRlckFjY291bnRFbnZpcm9ubWVudHMoYWNjb3VudFR5cGVzOiB7XG4gICAgW2tleTogc3RyaW5nXTogcmVhZG9ubHkgc3RyaW5nW107XG4gIH0pIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IFtlbnZpcm9ubWVudFR5cGUsIGFjY291bnROYW1lc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICBhY2NvdW50VHlwZXNcbiAgICApKSB7XG4gICAgICBmb3IgKGNvbnN0IGFjY291bnROYW1lIG9mIGFjY291bnROYW1lcykge1xuICAgICAgICBjb25zdCBhY2NvdW50ID0gdGhpcy5nZXRQcm92aWRlckFjY291bnQoYWNjb3VudE5hbWUpO1xuICAgICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICAgIGFjY291bnQuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudFR5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzZXRFeGlzdGluZ0FjY291bnRzKHJlZ2lvbjogc3RyaW5nKSB7XG4gICAgLy8gTWFrZSBBUEkgQ2FsbFxuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBPcmdhbml6YXRpb25zQ2xpZW50KHtcbiAgICAgIHJlZ2lvbjogcmVnaW9uLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgTGlzdEFjY291bnRzQ29tbWFuZCh7XG4gICAgICBNYXhSZXN1bHRzOiBOdW1iZXIoXCIyMFwiKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQocmVxdWVzdCk7XG4gICAgdGhpcy5leGlzdGluZ0FjY291bnRzQ29uZmlnID0gcmVzcG9uc2UuQWNjb3VudHMgfHwgW107XG4gIH1cblxuICBnZXRFeGlzdGluZ0FjY291bnRzKCk6IEFjY291bnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZztcbiAgfVxuXG4gIGFzeW5jIGdldEFXU0FjY291bnRJZCgpIHtcbiAgICBjb25zdCBzdHNDbGllbnQgPSBuZXcgU1RTQ2xpZW50KHt9KTtcbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCh7fSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzdHNDbGllbnQuc2VuZChyZXF1ZXN0KTtcblxuICAgIHJldHVybiByZXNwb25zZT8uQWNjb3VudCB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBzZXRQcmltYXJ5UmVnaW9uKHJlZ2lvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5yb290Q29uZmlnLnByaW1hcnlSZWdpb24gPSByZWdpb247XG4gIH1cblxuICBzZXRTZWNvbmRhcnlSZWdpb25zKHJlZ2lvbnM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5yb290Q29uZmlnLnNlY29uZGFyeVJlZ2lvbnMgPSByZWdpb25zO1xuICB9XG5cbiAgZ2V0UHJpbWFyeVJlZ2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJpbWFyeVJlZ2lvbjtcbiAgfVxuXG4gIGdldFNlY29uZGFyeVJlZ2lvbnMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuc2Vjb25kYXJ5UmVnaW9ucztcbiAgfVxuXG4gIGFzeW5jIHNldENvc3RBbGxvY2F0aW9uVGFncyhcbiAgICBjb3N0QWxsb2NhdGlvblRhZ3M6IENvc3RBbGxvY2F0aW9uVGFnc1tdXG4gICk6IFByb21pc2U8eyBlbmFibGVkOiBib29sZWFuOyBoYXNUYWdzOiBib29sZWFuIH0+IHtcbiAgICAvLyBJZiBjb3N0IGV4cGxvcmVyIGlzIG5vdCBlbmFibGVkLCB3ZSByZXR1cm4gYW4gZW1wdHkgYXJyYXlcbiAgICBjb25zdCBpc0Nvc3RFeHBsb3JlckVuYWJsZWQgPSBhd2FpdCB0aGlzLmlzQVdTQ29zdEV4cGxvcmVyRW5hYmxlZCgpO1xuICAgIGlmICghaXNDb3N0RXhwbG9yZXJFbmFibGVkKSB7XG4gICAgICB0aGlzLmNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyA9IFtdO1xuICAgICAgcmV0dXJuIHsgZW5hYmxlZDogZmFsc2UsIGhhc1RhZ3M6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENvc3RFeHBsb3JlckNsaWVudCh7IHJlZ2lvbjogXCJ1cy1lYXN0LTFcIiB9KTsgLy8gQ29zdCBleHBsb3JlciBvbmx5IGV4aXN0cyBpbiB1cy1lYXN0LTFcblxuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgTGlzdENvc3RBbGxvY2F0aW9uVGFnc0NvbW1hbmQoe30pO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQoY29tbWFuZCk7XG5cbiAgICAvLyBUYXJnZXQgc3BlY2lmaWMgdXNlci1kZWZpbmVkIHRhZ3NcbiAgICBjb25zdCB0YXJnZXRVc2VyVGFncyA9IFtcbiAgICAgIFwiZmphbGw6b3BlcmF0aW9uczpwb29sXCIsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCIsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIixcbiAgICBdO1xuXG4gICAgLy8gRmlsdGVyIGFuZCBwcm9jZXNzIHRhZ3NcbiAgICB0aGlzLmNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyA9IChyZXNwb25zZS5Db3N0QWxsb2NhdGlvblRhZ3MgfHwgW10pXG4gICAgICAuZmlsdGVyKCh0YWcpID0+IHtcbiAgICAgICAgLy8gU2tpcCB0YWdzIHdpdGhvdXQgYSBrZXlcbiAgICAgICAgaWYgKCF0YWcuVGFnS2V5KSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgLy8gS2VlcCBhbGwgQVdTLWdlbmVyYXRlZCB0YWdzXG4gICAgICAgIGlmICh0YWcuVHlwZSA9PT0gXCJBV1NHZW5lcmF0ZWRcIikgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgLy8gS2VlcCBvbmx5IHNwZWNpZmljIHVzZXItZGVmaW5lZCB0YWdzXG4gICAgICAgIHJldHVybiB0YXJnZXRVc2VyVGFncy5pbmNsdWRlcyh0YWcuVGFnS2V5KTtcbiAgICAgIH0pXG4gICAgICAubWFwKCh0YWcpID0+ICh7XG4gICAgICAgIFRhZ0tleTogdGFnLlRhZ0tleSB8fCBcIlwiLFxuICAgICAgICBTdGF0dXM6IHRhZy5TdGF0dXMgfHwgXCJVbmtub3duXCIsXG4gICAgICB9KSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGhhc1RhZ3M6IHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnLmxlbmd0aCA+IDAsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGlzQVdTQ29zdEV4cGxvcmVyRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IENvc3RFeHBsb3JlckNsaWVudCh7IHJlZ2lvbjogXCJ1cy1lYXN0LTFcIiB9KTtcblxuICAgICAgLy8gTWFrZSBhIHNpbXBsZSBBUEkgY2FsbCB0byBjaGVjayBpZiBDb3N0IEV4cGxvcmVyIGlzIGFjY2Vzc2libGVcbiAgICAgIGNvbnN0IGlucHV0OiBHZXREaW1lbnNpb25WYWx1ZXNDb21tYW5kSW5wdXQgPSB7XG4gICAgICAgIFRpbWVQZXJpb2Q6IHtcbiAgICAgICAgICBTdGFydDogdGhpcy5nZXREYXRlWERheXNBZ28oMzApLFxuICAgICAgICAgIEVuZDogdGhpcy5nZXRGb3JtYXR0ZWREYXRlKG5ldyBEYXRlKCkpLFxuICAgICAgICB9LFxuICAgICAgICBEaW1lbnNpb246IFwiU0VSVklDRVwiLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgY29tbWFuZCA9IG5ldyBHZXREaW1lbnNpb25WYWx1ZXNDb21tYW5kKGlucHV0KTtcbiAgICAgIGF3YWl0IGNsaWVudC5zZW5kKGNvbW1hbmQpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAoZXJyb3IuX190eXBlID09PSBcIkRhdGFVbmF2YWlsYWJsZUV4Y2VwdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJDb3N0IEV4cGxvcmVyIGRhdGEgaXMgbm90IGF2YWlsYWJsZSB5ZXQuIFRoZSBzZXJ2aWNlIG1pZ2h0IGJlIGVuYWJsZWQgYnV0IHN0aWxsIHByZXBhcmluZyBkYXRhLlwiXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBTZXJ2aWNlIGlzIGVuYWJsZWQgYnV0IGRhdGEgbm90IHJlYWR5XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLl9fdHlwZSA9PT0gXCJVbnJlY29nbml6ZWRDbGllbnRFeGNlcHRpb25cIikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQ29zdCBFeHBsb3JlciBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBhY2NvdW50IG9yIGNyZWRlbnRpYWxzIGFyZSBpbnZhbGlkLlwiXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIFwiVGlwOiBDaGVjayBpZiB5b3UndmUgZW5hYmxlIGl0IGluIHRoZSBBV1MgQmlsbGluZyBjb25zb2xlLlwiXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBjaGVja2luZyBDb3N0IEV4cGxvcmVyIHN0YXR1czpcIiwgZXJyb3IpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0ZVhEYXlzQWdvKGRheXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF5cyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZShkYXRlKTtcbiAgfVxuXG4gIGdldEZvcm1hdHRlZERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF07XG4gIH1cblxuICBnZXRDb3N0QWxsb2NhdGlvblRhZ3MoKTogQ29zdEFsbG9jYXRpb25UYWdzW10ge1xuICAgIHJldHVybiB0aGlzLmNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3RvcnkgcGF0aFxuICAgKiBAcmV0dXJucyBUaGUgcGF0aCB0byB0aGUgZmphbGwgY29uZmlnIGRpcmVjdG9yeSBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgc3RhdGljIGdldENvbmZpZ0RpcmVjdG9yeSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gQ29uZmlnLmZpbmRDb25maWdEaXJlY3RvcnkoKTtcbiAgfVxufVxuIl19
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUF5Q3pCOztHQUVHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFFaEM7O0dBRUc7QUFDSCxNQUFhLE1BQU07SUFLakIsWUFDRSxVQUFtQixFQUNuQixzQkFBa0MsRUFDbEMsd0JBQStDO1FBRS9DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVTtZQUMxQixDQUFDLENBQUMsVUFBVTtZQUNaLENBQUMsQ0FBQztnQkFDRSxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixRQUFRLEVBQUUsRUFBRTtnQkFDWixnQkFBZ0IsRUFBRSxFQUFFO2FBQ3JCLENBQUM7UUFFTixJQUFJLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCO1lBQ2xELENBQUMsQ0FBQyxzQkFBc0I7WUFDeEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLElBQUksQ0FBQyx3QkFBd0IsR0FBRyx3QkFBd0I7WUFDdEQsQ0FBQyxDQUFDLHdCQUF3QjtZQUMxQixDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1QsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssTUFBTSxDQUFDLG1CQUFtQjtRQUNoQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0IsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLHlCQUF5QjtRQUU5QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMseURBQXlEO1lBQ3pELE1BQU0sUUFB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IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuLy8gSW1wb3J0IG9ubHkgdGhlIHR5cGVzIGZyb20gQVdTIFNESyAtIG5vIGNsaWVudHMgb3IgY29tbWFuZHNcbmltcG9ydCB0eXBlIHsgQWNjb3VudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtb3JnYW5pemF0aW9uc1wiO1xuLy8gUmUtZXhwb3J0IEFjY291bnQgdHlwZSBzbyBjb25zdW1lcnMgY2FuIGltcG9ydCBpdCBmcm9tIEBmamFsbC91dGlsXG5leHBvcnQgdHlwZSB7IEFjY291bnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LW9yZ2FuaXphdGlvbnNcIjtcblxudHlwZSBQcm92aWRlciA9IFwiYXdzXCI7XG5cbmV4cG9ydCB0eXBlIFNlcnZpY2VDb25maWcgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBudW1iZXI7XG4gIG9wdGlvbnM/OiBvYmplY3Q7XG4gIGRvY2tlckNvbmZpZz86IHtcbiAgICBkb2NrZXJmaWxlUGF0aDogc3RyaW5nO1xuICAgIGNvbnRhaW5lclBvcnQ6IG51bWJlcjtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFByb3ZpZGVyQWNjb3VudCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBtYW5hZ2VkPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgUm9vdENvbmZpZyA9IHtcbiAgdmVyc2lvbj86IG51bWJlcjtcbiAgZGV2ZWxvcG1lbnQ/OiBib29sZWFuO1xuICBzZXJ2aWNlcz86IHsgW2tleTogc3RyaW5nXTogU2VydmljZUNvbmZpZyB9O1xuICBwcm92aWRlcj86IFByb3ZpZGVyO1xuICBwcm92aWRlckFjY291bnRzPzogUHJvdmlkZXJBY2NvdW50W107XG4gIHByaW1hcnlSZWdpb24/OiBzdHJpbmc7XG4gIHNlY29uZGFyeVJlZ2lvbnM/OiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgQ29zdEFsbG9jYXRpb25UYWdzID0ge1xuICBUYWdLZXk6IHN0cmluZztcbiAgU3RhdHVzOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFRoZSBjdXJyZW50IGJhc2UtdmVyc2lvbiBvZiBhbnkgbmV3bHkgY3JlYXRlZCBjb25maWcgZmlsZVxuICovXG5jb25zdCBCQVNFX0NPTkZJR19WRVJTSU9OID0gMC4xO1xuXG4vKipcbiAqIENvbmZpZyBjbGFzcyBmb3IgbG9hZGluZyBhbmQgc2F2aW5nIGZqYWxsLWNvbmZpZy5qc29uIGZpbGVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbmZpZyB7XG4gIHJvb3RDb25maWc6IFJvb3RDb25maWc7XG4gIGV4aXN0aW5nQWNjb3VudHNDb25maWc6IEFjY291bnRbXTtcbiAgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnOiBDb3N0QWxsb2NhdGlvblRhZ3NbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByb290Q29uZmlnPzogb2JqZWN0LFxuICAgIGV4aXN0aW5nQWNjb3VudHNDb25maWc/OiBBY2NvdW50W10sXG4gICAgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnPzogQ29zdEFsbG9jYXRpb25UYWdzW11cbiAgKSB7XG4gICAgdGhpcy5yb290Q29uZmlnID0gcm9vdENvbmZpZ1xuICAgICAgPyByb290Q29uZmlnXG4gICAgICA6IHtcbiAgICAgICAgICB2ZXJzaW9uOiBCQVNFX0NPTkZJR19WRVJTSU9OLFxuICAgICAgICAgIHNlcnZpY2VzOiB7fSxcbiAgICAgICAgICBwcm92aWRlckFjY291bnRzOiBbXSxcbiAgICAgICAgfTtcblxuICAgIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZyA9IGV4aXN0aW5nQWNjb3VudHNDb25maWdcbiAgICAgID8gZXhpc3RpbmdBY2NvdW50c0NvbmZpZ1xuICAgICAgOiBbXTtcblxuICAgIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID0gY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnXG4gICAgICA/IGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZ1xuICAgICAgOiBbXTtcbiAgfVxuXG4gIGlzRGV2ZWxvcG1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yb290Q29uZmlnPy5kZXZlbG9wbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBmamFsbCBjb25maWcgZGlyZWN0b3J5IGJ5IHdhbGtpbmcgdXAgdGhlIGRpcmVjdG9yeSB0cmVlXG4gICAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIHRoZSBmamFsbCBjb25maWcgZGlyZWN0b3J5IG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBmaW5kQ29uZmlnRGlyZWN0b3J5KCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcblxuICAgIGxldCBjdXJyZW50RGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBtYXhEZXB0aCA9IDEwOyAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3BzXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heERlcHRoOyBpKyspIHtcbiAgICAgIC8vIENoZWNrIGlmIGN1cnJlbnQgZGlyZWN0b3J5IGNvbnRhaW5zIGZqYWxsIGNvbmZpZyBmaWxlc1xuICAgICAgY29uc3QgZmphbGxEaXIgPSBwYXRoLmpvaW4oY3VycmVudERpciwgXCJmamFsbFwiKTtcbiAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBwYXRoLmpvaW4oZmphbGxEaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIik7XG5cbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGUpKSB7XG4gICAgICAgIHJldHVybiBmamFsbERpcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgY3VycmVudCBkaXJlY3RvcnkgSVMgdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGRpcmVjdENvbmZpZ0ZpbGUgPSBwYXRoLmpvaW4oY3VycmVudERpciwgXCJmamFsbC1jb25maWcuanNvblwiKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGRpcmVjdENvbmZpZ0ZpbGUpKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50RGlyO1xuICAgICAgfVxuXG4gICAgICAvLyBNb3ZlIHVwIG9uZSBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IHBhcmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgICAgIGlmIChwYXJlbnREaXIgPT09IGN1cnJlbnREaXIpIGJyZWFrOyAvLyBSZWFjaGVkIGZpbGVzeXN0ZW0gcm9vdFxuICAgICAgY3VycmVudERpciA9IHBhcmVudERpcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGNvbmZpZyBmaWxlIGludG8gbWVtb3J5IGFzIGEgcmF3IEpTT04gc3RyaW5nXG4gICAqIEByZXR1cm5zIENvbmZpZyBhcyBKU09OIHN0cmluZyBvciBOVUxMIGlmIG5vIGNvbmZpZyBmaWxlIGFjY2Vzc2libGVcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGxvYWRDb25maWdGaWxlKGNvbmZpZ0ZpbGU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICBmcy5hY2Nlc3NTeW5jKGNvbmZpZ0ZpbGUsIGZzLmNvbnN0YW50cy5SX09LIHwgZnMuY29uc3RhbnRzLldfT0spO1xuXG4gICAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKGNvbmZpZ0ZpbGUsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgIC8vICAgYEV4cGVjdGVkIGZpbGUgJyR7Y29uZmlnRmlsZX0nIGRvZXMgbm90IGV4aXN0IG9yIGNhbm5vdCBiZSByZWFkLmBcbiAgICAgIC8vICk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gZmlsZVxuICAgKlxuICAgKiBAcmV0dXJucyBMb2FkZWQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgc3RhdGljIGxvYWRDb25maWcoKTogQ29uZmlnIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnRGlyID0gQ29uZmlnLmZpbmRDb25maWdEaXJlY3RvcnkoKTtcbiAgICAgIGlmICghY29uZmlnRGlyKSB7XG4gICAgICAgIC8vIFJldHVybiBkZWZhdWx0IGNvbmZpZyBpZiBubyBjb25maWcgZGlyZWN0b3J5IGZvdW5kXG4gICAgICAgIHJldHVybiBuZXcgQ29uZmlnKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbiAgICAgIGNvbnN0IHJvb3RDb25maWdKc29uID0gQ29uZmlnLmxvYWRDb25maWdGaWxlKFxuICAgICAgICBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpXG4gICAgICApO1xuICAgICAgY29uc3QgZXhpc3RpbmdBY2NvdW50SnNvbiA9IENvbmZpZy5sb2FkQ29uZmlnRmlsZShcbiAgICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJhY2NvdW50cy1jb25maWcuanNvblwiKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNvc3RBbGxvY2F0aW9uVGFnc0pzb24gPSBDb25maWcubG9hZENvbmZpZ0ZpbGUoXG4gICAgICAgIHBhdGguam9pbihjb25maWdEaXIsIFwiY29zdC1hbGxvY2F0aW9uLXRhZ3MtY29uZmlnLmpzb25cIilcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJvb3RDb25maWcgPSByb290Q29uZmlnSnNvblxuICAgICAgICA/IEpTT04ucGFyc2Uocm9vdENvbmZpZ0pzb24pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXhpc3RpbmdBY2NvdW50c0NvbmZpZyA9IGV4aXN0aW5nQWNjb3VudEpzb25cbiAgICAgICAgPyBKU09OLnBhcnNlKGV4aXN0aW5nQWNjb3VudEpzb24pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID0gY29zdEFsbG9jYXRpb25UYWdzSnNvblxuICAgICAgICA/IEpTT04ucGFyc2UoY29zdEFsbG9jYXRpb25UYWdzSnNvbilcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBuZXcgQ29uZmlnKFxuICAgICAgICByb290Q29uZmlnLFxuICAgICAgICBleGlzdGluZ0FjY291bnRzQ29uZmlnLFxuICAgICAgICBjb3N0QWxsb2NhdGlvblRhZ3NDb25maWdcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiVW5hYmxlIHRvIHBhcnNlIGNvbmZpZyBmaWxlLiBBYm9ydGluZy5cIiwgZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBjb25maWd1cmF0aW9uIHRvIGZpbGVcbiAgICovXG4gIHNhdmVDb25maWcoKSB7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuICAgIGNvbnN0IGNvbmZpZ0RpciA9XG4gICAgICBDb25maWcuZmluZENvbmZpZ0RpcmVjdG9yeSgpIHx8IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcImZqYWxsXCIpO1xuXG4gICAgLy8gRW5zdXJlIGRpcmVjdG9yeSBleGlzdHNcbiAgICBmcy5ta2RpclN5bmMoY29uZmlnRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHJvb3RKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5yb290Q29uZmlnLCBudWxsLCAyKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihjb25maWdEaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIiksIHJvb3RKc29uU3RyaW5nKTtcblxuICAgIGNvbnN0IGV4aXN0aW5nQWNjb3VudHNKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICB0aGlzLmV4aXN0aW5nQWNjb3VudHNDb25maWcsXG4gICAgICBudWxsLFxuICAgICAgMlxuICAgICk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbihjb25maWdEaXIsIFwiYWNjb3VudHMtY29uZmlnLmpzb25cIiksXG4gICAgICBleGlzdGluZ0FjY291bnRzSnNvblN0cmluZ1xuICAgICk7XG5cbiAgICBjb25zdCBjb3N0QWxsb2NhdGlvblRhZ3NKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICB0aGlzLmNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICAyXG4gICAgKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJjb3N0LWFsbG9jYXRpb24tdGFncy1jb25maWcuanNvblwiKSxcbiAgICAgIGNvc3RBbGxvY2F0aW9uVGFnc0pzb25TdHJpbmdcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc2NoZW1hIHZlcnNpb24gdXNlZCBmb3IgdGhpcyBjb25maWcgZmlsZVxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbiBTY2hlbWEgVmVyc2lvblxuICAgKi9cbiAgc2V0VmVyc2lvbih2ZXJzaW9uOiBudW1iZXIpIHtcbiAgICB0aGlzLnJvb3RDb25maWcudmVyc2lvbiA9IHZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IHNlcnZpY2UgdG8gdGhlIGNvbmZpZyBmaWxlXG4gICAqIEBwYXJhbSBzZXJ2aWNlS2V5IE5hbWUva2V5IG9mIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBjb25maWcgU2VydmljZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICovXG4gIGFkZFNlcnZpY2Uoc2VydmljZUtleTogc3RyaW5nLCBjb25maWc6IFNlcnZpY2VDb25maWcpIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5zZXJ2aWNlcykgdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzID0ge307XG4gICAgdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzW3NlcnZpY2VLZXldID0gY29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjb25maWcgb3B0aW9ucyBvbiBhIHByZXZpb3VzbHkgZGVmaW5lZCBzZXJ2aWNlXG4gICAqXG4gICAqIEBwYXJhbSBzZXJ2aWNlS2V5IE5hbWUva2V5IG9mIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBjb25maWcgU2VydmljZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgdG8gc2V0XG4gICAqL1xuICBzZXRTZXJ2aWNlT3B0aW9uKHNlcnZpY2VLZXk6IHN0cmluZywgY29uZmlnOiBTZXJ2aWNlQ29uZmlnKSB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuc2VydmljZXMpIHRoaXMucm9vdENvbmZpZy5zZXJ2aWNlcyA9IHt9O1xuXG4gICAgY29uc3Qgc2VydmljZSA9IHRoaXMucm9vdENvbmZpZy5zZXJ2aWNlc1tzZXJ2aWNlS2V5XTtcbiAgICBpZiAoIXNlcnZpY2UpIHJldHVybjtcblxuICAgIHRoaXMucm9vdENvbmZpZy5zZXJ2aWNlc1tzZXJ2aWNlS2V5XSA9IHsgLi4uc2VydmljZSwgLi4uY29uZmlnIH07XG4gIH1cblxuICBnZXRTZXJ2aWNlQ29uZmlnKHNlcnZpY2VLZXk6IHN0cmluZyk6IFNlcnZpY2VDb25maWcgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5zZXJ2aWNlcykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5zZXJ2aWNlc1tzZXJ2aWNlS2V5XSB8fCBudWxsO1xuICB9XG5cbiAgc2V0UHJvdmlkZXIocHJvdmlkZXI6IFByb3ZpZGVyKSB7XG4gICAgdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyID0gcHJvdmlkZXI7XG4gIH1cblxuICBhZGRQcm92aWRlckFjY291bnQoYWNjb3VudDogUHJvdmlkZXJBY2NvdW50KSB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cylcbiAgICAgIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzID0gW107XG5cbiAgICAvLyBlbnN1cmUgYWNjb3VudCBuYW1lIGlzIGFsd2F5cyBsb3dlcmNhc2VcbiAgICBhY2NvdW50Lm5hbWUgPSBhY2NvdW50Lm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcblxuICAgIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLnB1c2goYWNjb3VudCk7XG4gIH1cblxuICBnZXRQcm92aWRlckFjY291bnQoYWNjb3VudE5hbWU6IHN0cmluZykge1xuICAgIC8vIFRPRE86IEZpeCBudWxsIGVycm9yXG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLmZpbmQoXG4gICAgICAoYWNjb3VudCkgPT5cbiAgICAgICAgYWNjb3VudC5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IGFjY291bnROYW1lLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG5cbiAgZ2V0UHJvdmlkZXJBY2NvdW50QnlJZChhY2NvdW50SWQ6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cy5maW5kKFxuICAgICAgKGFjY291bnQpID0+IGFjY291bnQuaWQgPT09IGFjY291bnRJZFxuICAgICk7XG4gIH1cblxuICB1cGRhdGVQcm92aWRlckFjY291bnRFbnZpcm9ubWVudHMoYWNjb3VudFR5cGVzOiB7XG4gICAgW2tleTogc3RyaW5nXTogcmVhZG9ubHkgc3RyaW5nW107XG4gIH0pIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IFtlbnZpcm9ubWVudFR5cGUsIGFjY291bnROYW1lc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICBhY2NvdW50VHlwZXNcbiAgICApKSB7XG4gICAgICBmb3IgKGNvbnN0IGFjY291bnROYW1lIG9mIGFjY291bnROYW1lcykge1xuICAgICAgICBjb25zdCBhY2NvdW50ID0gdGhpcy5nZXRQcm92aWRlckFjY291bnQoYWNjb3VudE5hbWUpO1xuICAgICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICAgIGFjY291bnQuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudFR5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZXhpc3RpbmcgYWNjb3VudHMgbGlzdC4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJ5IEFjY291bnRTZXJ2aWNlXG4gICAqIGFmdGVyIGl0IGZldGNoZXMgdGhlIGFjY291bnRzIGZyb20gQVdTLlxuICAgKiBAcGFyYW0gYWNjb3VudHMgTGlzdCBvZiBBV1MgYWNjb3VudHMgZnJvbSBPcmdhbml6YXRpb25zIEFQSVxuICAgKi9cbiAgc2V0RXhpc3RpbmdBY2NvdW50c0xpc3QoYWNjb3VudHM6IEFjY291bnRbXSkge1xuICAgIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZyA9IGFjY291bnRzO1xuICB9XG5cbiAgZ2V0RXhpc3RpbmdBY2NvdW50cygpOiBBY2NvdW50W10ge1xuICAgIHJldHVybiB0aGlzLmV4aXN0aW5nQWNjb3VudHNDb25maWc7XG4gIH1cblxuICBzZXRQcmltYXJ5UmVnaW9uKHJlZ2lvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5yb290Q29uZmlnLnByaW1hcnlSZWdpb24gPSByZWdpb247XG4gIH1cblxuICBzZXRTZWNvbmRhcnlSZWdpb25zKHJlZ2lvbnM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5yb290Q29uZmlnLnNlY29uZGFyeVJlZ2lvbnMgPSByZWdpb25zO1xuICB9XG5cbiAgZ2V0UHJpbWFyeVJlZ2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJpbWFyeVJlZ2lvbjtcbiAgfVxuXG4gIGdldFNlY29uZGFyeVJlZ2lvbnMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuc2Vjb25kYXJ5UmVnaW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb3N0IGFsbG9jYXRpb24gdGFncyBsaXN0LiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgQWNjb3VudFNlcnZpY2VcbiAgICogYWZ0ZXIgaXQgZmV0Y2hlcyB0aGUgdGFncyBmcm9tIEFXUyBDb3N0IEV4cGxvcmVyLlxuICAgKiBAcGFyYW0gdGFncyBMaXN0IG9mIGNvc3QgYWxsb2NhdGlvbiB0YWdzXG4gICAqL1xuICBzZXRDb3N0QWxsb2NhdGlvblRhZ3NMaXN0KHRhZ3M6IENvc3RBbGxvY2F0aW9uVGFnc1tdKSB7XG4gICAgdGhpcy5jb3N0QWxsb2NhdGlvblRhZ3NDb25maWcgPSB0YWdzO1xuICB9XG5cbiAgZ2V0Q29zdEFsbG9jYXRpb25UYWdzKCk6IENvc3RBbGxvY2F0aW9uVGFnc1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb3N0QWxsb2NhdGlvblRhZ3NDb25maWc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmamFsbCBjb25maWcgZGlyZWN0b3J5IHBhdGhcbiAgICogQHJldHVybnMgVGhlIHBhdGggdG8gdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3Rvcnkgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICovXG4gIHN0YXRpYyBnZXRDb25maWdEaXJlY3RvcnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIENvbmZpZy5maW5kQ29uZmlnRGlyZWN0b3J5KCk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fjall/util",
3
- "version": "0.56.0",
3
+ "version": "0.58.5",
4
4
  "description": "Common utility methods",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -28,5 +28,5 @@
28
28
  "overrides": {
29
29
  "@smithy/core": "2.5.5"
30
30
  },
31
- "gitHead": "f096b6a53f476cf233d09a712b1411c6a104f94f"
31
+ "gitHead": "2617d079bb2f1729a18017e30e3b3572d57fa2ee"
32
32
  }