@xpr-agents/sdk 0.2.2 → 0.2.3

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.
@@ -236,42 +236,66 @@ class AgentRegistry {
236
236
  upper_bound: agent.owner,
237
237
  limit: 1,
238
238
  });
239
- if (kycResult.rows.length > 0 && kycResult.rows[0].kyc?.length > 0) {
240
- // Find the highest KYC level, handling various formats:
241
- // - number: 3
242
- // - string number: "3"
243
- // - provider:level: "metallicus:3"
244
- // - comma-separated multi-provider: "provA:3,provB:1"
245
- const levels = [];
246
- for (const k of kycResult.rows[0].kyc) {
247
- if (typeof k.kyc_level === 'number') {
248
- levels.push(k.kyc_level);
249
- }
250
- else {
251
- const levelStr = String(k.kyc_level);
252
- // Handle comma-separated multi-provider strings (e.g., "provA:3,provB:1")
253
- const providers = levelStr.split(',');
254
- for (const provider of providers) {
255
- const trimmed = provider.trim();
256
- if (trimmed.includes(':')) {
257
- // "provider:level" format - take the level part
258
- const parts = trimmed.split(':');
259
- const level = parseInt(parts[parts.length - 1], 10);
260
- if (!isNaN(level))
261
- levels.push(level);
239
+ if (kycResult.rows.length > 0) {
240
+ const row = kycResult.rows[0];
241
+ const rawKyc = row.kyc;
242
+ if (Array.isArray(rawKyc) && rawKyc.length > 0) {
243
+ // KYC entries can be:
244
+ // - objects: {kyc_provider, kyc_level, kyc_date} where kyc_level is a claims string
245
+ // - plain numbers (test environments)
246
+ // - plain strings
247
+ const levels = [];
248
+ for (const entry of rawKyc) {
249
+ if (typeof entry === 'number') {
250
+ levels.push(entry);
251
+ }
252
+ else if (typeof entry === 'string') {
253
+ const num = parseInt(entry, 10);
254
+ if (!isNaN(num))
255
+ levels.push(num);
256
+ }
257
+ else if (typeof entry === 'object' && entry !== null) {
258
+ const k = entry;
259
+ const kycLevel = k.kyc_level;
260
+ if (typeof kycLevel === 'number') {
261
+ levels.push(kycLevel);
262
262
  }
263
- else {
264
- // Plain number string
265
- const level = parseInt(trimmed, 10);
266
- if (!isNaN(level))
267
- levels.push(level);
263
+ else if (typeof kycLevel === 'string') {
264
+ // Parse claims string: "trulioo:address,trulioo:lastname,..."
265
+ // or numeric formats: "3", "provider:3"
266
+ const claims = kycLevel.split(',').filter(s => s.trim().length > 0);
267
+ let foundNumeric = false;
268
+ for (const claim of claims) {
269
+ const trimmed = claim.trim();
270
+ if (trimmed.includes(':')) {
271
+ const parts = trimmed.split(':');
272
+ const level = parseInt(parts[parts.length - 1], 10);
273
+ if (!isNaN(level) && String(level) === parts[parts.length - 1]) {
274
+ levels.push(level);
275
+ foundNumeric = true;
276
+ }
277
+ }
278
+ else {
279
+ const level = parseInt(trimmed, 10);
280
+ if (!isNaN(level)) {
281
+ levels.push(level);
282
+ foundNumeric = true;
283
+ }
284
+ }
285
+ }
286
+ // If no numeric levels found, derive from claim count
287
+ if (!foundNumeric && claims.length > 0) {
288
+ levels.push(Math.min(Math.ceil(claims.length / 3), 3));
289
+ }
268
290
  }
269
291
  }
270
292
  }
293
+ kycLevel = levels.length > 0 ? Math.max(...levels) : 0;
294
+ }
295
+ // Fallback: if no KYC level extracted but account is verified, use level 1
296
+ if (kycLevel === 0 && row.verified === 1) {
297
+ kycLevel = 1;
271
298
  }
272
- // P2 FIX: Safe max - fallback to 0 if no valid levels found
273
- // Math.max(...[]) returns -Infinity, which would poison trust scores
274
- kycLevel = levels.length > 0 ? Math.max(...levels) : 0;
275
299
  }
276
300
  }
277
301
  // Get system stake from eosio::voters
@@ -889,4 +913,4 @@ class AgentRegistry {
889
913
  }
890
914
  }
891
915
  exports.AgentRegistry = AgentRegistry;
892
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnRSZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9BZ2VudFJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1CQSxtQ0FBeUc7QUFFekcsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFFckMsc0NBQXNDO0FBQ3RDLE1BQU0sZUFBZSxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQVUsQ0FBQztBQUV2Riw4QkFBOEI7QUFDOUIsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBRTdFOzs7OztHQUtHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxJQU0xQjtJQUNDLDJEQUEyRDtJQUMzRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDNUIsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JDLDBFQUEwRTtRQUMxRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQzlFLENBQUM7SUFDSCxDQUFDO0lBRUQsbUVBQW1FO0lBQ25FLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksS0FBSyxD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Q0FDRjtBQXQ2QkQsc0NBczZCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFnZW50LFxuICBBZ2VudFJhdyxcbiAgUGx1Z2luLFxuICBQbHVnaW5SYXcsXG4gIEFnZW50UGx1Z2luLFxuICBBZ2VudFBsdWdpblJhdyxcbiAgQWdlbnRDb3JlQ29uZmlnLFxuICBBZ2VudExpc3RPcHRpb25zLFxuICBSZWdpc3RlckFnZW50RGF0YSxcbiAgVXBkYXRlQWdlbnREYXRhLFxuICBUcmFuc2FjdGlvblJlc3VsdCxcbiAgSnNvblJwYyxcbiAgUHJvdG9uU2Vzc2lvbixcbiAgUGx1Z2luQ2F0ZWdvcnksXG4gIFBhZ2luYXRlZFJlc3VsdCxcbiAgVHJ1c3RTY29yZSxcbiAgQWdlbnRTY29yZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBwYXJzZUNhcGFiaWxpdGllcywgc2FmZUpzb25QYXJzZSwgZm9ybWF0WHByLCBjYWxjdWxhdGVUcnVzdFNjb3JlLCBzYWZlUGFyc2VJbnQgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgREVGQVVMVF9DT05UUkFDVCA9ICdhZ2VudGNvcmUnO1xuXG4vLyBWYWxpZCBwcm90b2NvbHMgZm9yIGFnZW50IGVuZHBvaW50c1xuY29uc3QgVkFMSURfUFJPVE9DT0xTID0gWydodHRwJywgJ2h0dHBzJywgJ2dycGMnLCAnd2Vic29ja2V0JywgJ21xdHQnLCAnd3NzJ10gYXMgY29uc3Q7XG5cbi8vIFZhbGlkIGVuZHBvaW50IFVSTCBwcmVmaXhlc1xuY29uc3QgVkFMSURfRU5EUE9JTlRfUFJFRklYRVMgPSBbJ2h0dHA6Ly8nLCAnaHR0cHM6Ly8nLCAnZ3JwYzovLycsICd3c3M6Ly8nXTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgYWdlbnQgcmVnaXN0cmF0aW9uL3VwZGF0ZSBkYXRhIGJlZm9yZSBzZW5kaW5nIHRvIHRoZSBibG9ja2NoYWluLlxuICogVGhyb3dzIGRlc2NyaXB0aXZlIGVycm9ycyBmb3IgaW52YWxpZCBpbnB1dC5cbiAqXG4gKiBDUklUSUNBTCBGSVg6IFZhbGlkYXRlcyBUUklNTUVEIGxlbmd0aCB0byBwcmV2ZW50IHdoaXRlc3BhY2UgcGFkZGluZyBieXBhc3MuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQWdlbnREYXRhKGRhdGE6IHtcbiAgbmFtZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGVuZHBvaW50Pzogc3RyaW5nO1xuICBwcm90b2NvbD86IHN0cmluZztcbiAgY2FwYWJpbGl0aWVzPzogc3RyaW5nW107XG59KTogdm9pZCB7XG4gIC8vIFZhbGlkYXRlIG5hbWU6IDEtNjQgY2hhcmFjdGVycyBhZnRlciB0cmltbWluZywgbm9uLWVtcHR5XG4gIGlmIChkYXRhLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZGF0YS5uYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOYW1lIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB9XG4gICAgY29uc3QgdHJpbW1lZE5hbWUgPSBkYXRhLm5hbWUudHJpbSgpO1xuICAgIC8vIENSSVRJQ0FMIEZJWDogQ2hlY2sgdHJpbW1lZCBsZW5ndGggdG8gcHJldmVudCB3aGl0ZXNwYWNlIHBhZGRpbmcgYnlwYXNzXG4gICAgaWYgKHRyaW1tZWROYW1lLmxlbmd0aCA8IDEgfHwgdHJpbW1lZE5hbWUubGVuZ3RoID4gNjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTmFtZSBtdXN0IGJlIDEtNjQgY2hhcmFjdGVycyAoYWZ0ZXIgdHJpbW1pbmcgd2hpdGVzcGFjZSknKTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBkZXNjcmlwdGlvbjogMS0yNTYgY2hhcmFjdGVycyBhZnRlciB0cmltbWluZywgbm9uLWVtcHR5XG4gIGlmIChkYXRhLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGRhdGEuZGVzY3JpcHRpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rlc2NyaXB0aW9uIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB9XG4gICAgY29uc3QgdHJpbW1lZERlc2MgPSBkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKTtcbiAgICAvLyBDUklUSUNBTCBGSVg6IENoZWNrIHRyaW1tZWQgbGVuZ3RoIHRvIHByZXZlbnQgd2hpdGVzcGFjZSBwYWRkaW5nIGJ5cGFzc1xuICAgIGlmICh0cmltbWVkRGVzYy5sZW5ndGggPCAxIHx8IHRyaW1tZWREZXNjLmxlbmd0aCA+IDI1Nikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXNjcmlwdGlvbiBtdXN0IGJlIDEtMjU2IGNoYXJhY3RlcnMgKGFmdGVyIHRyaW1taW5nIHdoaXRlc3BhY2UpJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgZW5kcG9pbnQ6IDEtMjU2IGNoYXJhY3RlcnMgYWZ0ZXIgdHJpbW1pbmcsIG11c3Qgc3RhcnQgd2l0aCB2YWxpZCBwcm90b2NvbCBwcmVmaXhcbiAgaWYgKGRhdGEuZW5kcG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZGF0YS5lbmRwb2ludCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRW5kcG9pbnQgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cbiAgICBjb25zdCB0cmltbWVkRW5kcG9pbnQgPSBkYXRhLmVuZHBvaW50LnRyaW0oKTtcbiAgICAvLyBDUklUSUNBTCBGSVg6IENoZWNrIHRyaW1tZWQgbGVuZ3RoIHRvIHByZXZlbnQgd2hpdGVzcGFjZSBwYWRkaW5nIGJ5cGFzc1xuICAgIGlmICh0cmltbWVkRW5kcG9pbnQubGVuZ3RoIDwgMSB8fCB0cmltbWVkRW5kcG9pbnQubGVuZ3RoID4gMjU2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuZHBvaW50IG11c3QgYmUgMS0yNTYgY2hhcmFjdGVycyBhbmQgc3RhcnQgd2l0aCBodHRwOi8vLCBodHRwczovLywgZ3JwYzovLywgb3Igd3NzOi8vJyk7XG4gICAgfVxuICAgIGNvbnN0IGhhc1ZhbGlkUHJlZml4ID0gVkFMSURfRU5EUE9JTlRfUFJFRklYRVMuc29tZShwcmVmaXggPT5cbiAgICAgIHRyaW1tZWRFbmRwb2ludC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocHJlZml4KVxuICAgICk7XG4gICAgaWYgKCFoYXNWYWxpZFByZWZpeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmRwb2ludCBtdXN0IGJlIDEtMjU2IGNoYXJhY3RlcnMgYW5kIHN0YXJ0IHdpdGggaHR0cDovLywgaHR0cHM6Ly8sIGdycGM6Ly8sIG9yIHdzczovLycpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHByb3RvY29sOiBtdXN0IGJlIG9uZSBvZiB0aGUgdmFsaWQgcHJvdG9jb2xzIChjYXNlLWluc2Vuc2l0aXZlKVxuICBpZiAoZGF0YS5wcm90b2NvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFByb3RvY29sID0gZGF0YS5wcm90b2NvbC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghVkFMSURfUFJPVE9DT0xTLmluY2x1ZGVzKG5vcm1hbGl6ZWRQcm90b2NvbCBhcyB0eXBlb2YgVkFMSURfUFJPVE9DT0xTW251bWJlcl0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3RvY29sIG11c3QgYmUgb25lIG9mOiAke1ZBTElEX1BST1RPQ09MUy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGNhcGFiaWxpdGllczogYXJyYXksIHdoZW4gc3RyaW5naWZpZWQgbXVzdCBiZSA8PSAyMDQ4IGNoYXJhY3RlcnNcbiAgaWYgKGRhdGEuY2FwYWJpbGl0aWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YS5jYXBhYmlsaXRpZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhcGFiaWxpdGllcyBtdXN0IGJlIGFuIGFycmF5IHdpdGggc3RyaW5naWZpZWQgbGVuZ3RoIDw9IDIwNDggY2hhcmFjdGVycycpO1xuICAgIH1cbiAgICBjb25zdCBzdHJpbmdpZmllZCA9IEpTT04uc3RyaW5naWZ5KGRhdGEuY2FwYWJpbGl0aWVzKTtcbiAgICBpZiAoc3RyaW5naWZpZWQubGVuZ3RoID4gMjA0OCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYXBhYmlsaXRpZXMgbXVzdCBiZSBhbiBhcnJheSB3aXRoIHN0cmluZ2lmaWVkIGxlbmd0aCA8PSAyMDQ4IGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFnZW50UmVnaXN0cnkge1xuICBwcml2YXRlIHJwYzogSnNvblJwYztcbiAgcHJpdmF0ZSBzZXNzaW9uOiBQcm90b25TZXNzaW9uIHwgbnVsbDtcbiAgcHJpdmF0ZSBjb250cmFjdDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHJwYzogSnNvblJwYywgc2Vzc2lvbj86IFByb3RvblNlc3Npb24sIGNvbnRyYWN0Pzogc3RyaW5nKSB7XG4gICAgdGhpcy5ycGMgPSBycGM7XG4gICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbiB8fCBudWxsO1xuICAgIHRoaXMuY29udHJhY3QgPSBjb250cmFjdCB8fCBERUZBVUxUX0NPTlRSQUNUO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT0gUkVBRCBPUEVSQVRJT05TID09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldCBhIHNpbmdsZSBhZ2VudCBieSBhY2NvdW50IG5hbWVcbiAgICovXG4gIGFzeW5jIGdldEFnZW50KGFjY291bnQ6IHN0cmluZyk6IFByb21pc2U8QWdlbnQgfCBudWxsPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8QWdlbnRSYXc+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICB0YWJsZTogJ2FnZW50cycsXG4gICAgICBsb3dlcl9ib3VuZDogYWNjb3VudCxcbiAgICAgIHVwcGVyX2JvdW5kOiBhY2NvdW50LFxuICAgICAgbGltaXQ6IDEsXG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0LnJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUFnZW50KHJlc3VsdC5yb3dzWzBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGFsbCBhZ2VudHMgd2l0aCBvcHRpb25hbCBmaWx0ZXJzIGFuZCBwYWdpbmF0aW9uXG4gICAqIEByZXR1cm5zIFBhZ2luYXRlZFJlc3VsdCB3aXRoIGl0ZW1zLCBoYXNNb3JlIGZsYWcsIGFuZCBuZXh0Q3Vyc29yIGZvciBwYWdpbmF0aW9uXG4gICAqL1xuICBhc3luYyBsaXN0QWdlbnRzKG9wdGlvbnM6IEFnZW50TGlzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8UGFnaW5hdGVkUmVzdWx0PEFnZW50Pj4ge1xuICAgIGNvbnN0IHsgbGltaXQgPSAxMDAsIGN1cnNvciwgYWN0aXZlX29ubHkgPSB0cnVlIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8QWdlbnRSYXc+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICB0YWJsZTogJ2FnZW50cycsXG4gICAgICBsb3dlcl9ib3VuZDogY3Vyc29yLFxuICAgICAgbGltaXQ6IGxpbWl0ICsgMSwgLy8gRmV0Y2ggb25lIGV4dHJhIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBtb3JlXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYXNNb3JlID0gcmVzdWx0LnJvd3MubGVuZ3RoID4gbGltaXQ7XG4gICAgY29uc3Qgcm93cyA9IGhhc01vcmUgPyByZXN1bHQucm93cy5zbGljZSgwLCBsaW1pdCkgOiByZXN1bHQucm93cztcbiAgICBsZXQgYWdlbnRzID0gcm93cy5tYXAoKHJvdykgPT4gdGhpcy5wYXJzZUFnZW50KHJvdykpO1xuXG4gICAgLy8gQXBwbHkgZmlsdGVycyBhZnRlciBmZXRjaGluZ1xuICAgIGlmIChhY3RpdmVfb25seSkge1xuICAgICAgYWdlbnRzID0gYWdlbnRzLmZpbHRlcigoYSkgPT4gYS5hY3RpdmUpO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IEFnZW50cyB1c2Ugc3lzdGVtIHN0YWtpbmcgKGVvc2lvOjp2b3RlcnMpLCBub3QgY29udHJhY3QtbWFuYWdlZCBzdGFraW5nXG4gICAgLy8gVG8gZmlsdGVyIGJ5IHN0YWtlLCBxdWVyeSBzeXN0ZW0gc3Rha2luZyBzZXBhcmF0ZWx5XG5cbiAgICAvLyBHZXQgbmV4dCBjdXJzb3IgZnJvbSB0aGUgbGFzdCByb3cgaWYgdGhlcmUgYXJlIG1vcmVcbiAgICBjb25zdCBuZXh0Q3Vyc29yID0gaGFzTW9yZSAmJiByb3dzLmxlbmd0aCA+IDBcbiAgICAgID8gcm93c1tyb3dzLmxlbmd0aCAtIDFdLmFjY291bnRcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBhZ2VudHMsXG4gICAgICBoYXNNb3JlLFxuICAgICAgbmV4dEN1cnNvcixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgdGhyb3VnaCBhbGwgYWdlbnRzIHdpdGggYXV0b21hdGljIHBhZ2luYXRpb25cbiAgICovXG4gIGFzeW5jICpsaXN0QWdlbnRzSXRlcmF0b3Iob3B0aW9uczogT21pdDxBZ2VudExpc3RPcHRpb25zLCAnY3Vyc29yJz4gPSB7fSk6IEFzeW5jR2VuZXJhdG9yPEFnZW50PiB7XG4gICAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5saXN0QWdlbnRzKHsgLi4ub3B0aW9ucywgY3Vyc29yIH0pO1xuICAgICAgZm9yIChjb25zdCBhZ2VudCBvZiByZXN1bHQuaXRlbXMpIHtcbiAgICAgICAgeWllbGQgYWdlbnQ7XG4gICAgICB9XG4gICAgICBjdXJzb3IgPSByZXN1bHQubmV4dEN1cnNvcjtcbiAgICB9IHdoaWxlIChjdXJzb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHBsdWdpbiBieSBJRFxuICAgKi9cbiAgYXN5bmMgZ2V0UGx1Z2luKGlkOiBudW1iZXIpOiBQcm9taXNlPFBsdWdpbiB8IG51bGw+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czxQbHVnaW5SYXc+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICB0YWJsZTogJ3BsdWdpbnMnLFxuICAgICAgbG93ZXJfYm91bmQ6IFN0cmluZyhpZCksXG4gICAgICB1cHBlcl9ib3VuZDogU3RyaW5nKGlkKSxcbiAgICAgIGxpbWl0OiAxLFxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdC5yb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VQbHVnaW4ocmVzdWx0LnJvd3NbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgYWxsIHBsdWdpbnNcbiAgICovXG4gIGFzeW5jIGxpc3RQbHVnaW5zKGNhdGVnb3J5PzogUGx1Z2luQ2F0ZWdvcnkpOiBQcm9taXNlPFBsdWdpbltdPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8UGx1Z2luUmF3Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdwbHVnaW5zJyxcbiAgICAgIGxpbWl0OiAxMDAwLFxuICAgIH0pO1xuXG4gICAgbGV0IHBsdWdpbnMgPSByZXN1bHQucm93cy5tYXAoKHJvdykgPT4gdGhpcy5wYXJzZVBsdWdpbihyb3cpKTtcblxuICAgIGlmIChjYXRlZ29yeSkge1xuICAgICAgcGx1Z2lucyA9IHBsdWdpbnMuZmlsdGVyKChwKSA9PiBwLmNhdGVnb3J5ID09PSBjYXRlZ29yeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsdWdpbnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBsdWdpbnMgYXNzaWduZWQgdG8gYW4gYWdlbnRcbiAgICovXG4gIGFzeW5jIGdldEFnZW50UGx1Z2lucyhhY2NvdW50OiBzdHJpbmcpOiBQcm9taXNlPEFnZW50UGx1Z2luW10+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czxBZ2VudFBsdWdpblJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnYWdlbnRwbHVncycsXG4gICAgICBpbmRleF9wb3NpdGlvbjogMixcbiAgICAgIGtleV90eXBlOiAnbmFtZScsXG4gICAgICBsb3dlcl9ib3VuZDogYWNjb3VudCxcbiAgICAgIHVwcGVyX2JvdW5kOiBhY2NvdW50LFxuICAgICAgbGltaXQ6IDEwMCxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQucm93cy5tYXAoKHJvdykgPT4gdGhpcy5wYXJzZUFnZW50UGx1Z2luKHJvdykpO1xuICB9XG5cbiAgLy8gTm90ZTogQWdlbnRzIHVzZSBzeXN0ZW0gc3Rha2luZyB2aWEgZW9zaW86OnZvdGVycyB0YWJsZSwgbm90IGNvbnRyYWN0LW1hbmFnZWQgc3Rha2luZ1xuICAvLyBUaGVyZSBpcyBubyB1bnN0YWtlcyB0YWJsZSBpbiBhZ2VudGNvcmUgLSBhZ2VudHMgc3Rha2UvdW5zdGFrZSB2aWEgc3lzdGVtIHJlc291cmNlc1xuICAvLyBVc2UgYWdlbnRjb3JlOjpnZXRhZ2VudGluZm8gYWN0aW9uIHRvIHF1ZXJ5IGFuIGFnZW50J3Mgc3lzdGVtIHN0YWtlXG5cbiAgLyoqXG4gICAqIEdldCB0cnVzdCBzY29yZSBmb3IgYW4gYWdlbnQgKDAtMTAwKVxuICAgKiBDb21iaW5lcyBLWUMgbGV2ZWwsIHN0YWtlLCByZXB1dGF0aW9uLCBhbmQgbG9uZ2V2aXR5XG4gICAqL1xuICBhc3luYyBnZXRUcnVzdFNjb3JlKGFjY291bnQ6IHN0cmluZyk6IFByb21pc2U8VHJ1c3RTY29yZSB8IG51bGw+IHtcbiAgICAvLyBHZXQgYWdlbnRcbiAgICBjb25zdCBhZ2VudCA9IGF3YWl0IHRoaXMuZ2V0QWdlbnQoYWNjb3VudCk7XG4gICAgaWYgKCFhZ2VudCkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBHZXQgYWdlbnQgc2NvcmUgZnJvbSBhZ2VudGZlZWRcbiAgICBjb25zdCBmZWVkQ29udHJhY3QgPSAnYWdlbnRmZWVkJzsgLy8gRGVmYXVsdCBmZWVkIGNvbnRyYWN0XG4gICAgY29uc3Qgc2NvcmVSZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czx7XG4gICAgICBhZ2VudDogc3RyaW5nO1xuICAgICAgdG90YWxfc2NvcmU6IHN0cmluZztcbiAgICAgIHRvdGFsX3dlaWdodDogc3RyaW5nO1xuICAgICAgZmVlZGJhY2tfY291bnQ6IHN0cmluZztcbiAgICAgIGF2Z19zY29yZTogc3RyaW5nO1xuICAgICAgbGFzdF91cGRhdGVkOiBzdHJpbmc7XG4gICAgfT4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IGZlZWRDb250cmFjdCxcbiAgICAgIHNjb3BlOiBmZWVkQ29udHJhY3QsXG4gICAgICB0YWJsZTogJ2FnZW50c2NvcmVzJyxcbiAgICAgIGxvd2VyX2JvdW5kOiBhY2NvdW50LFxuICAgICAgdXBwZXJfYm91bmQ6IGFjY291bnQsXG4gICAgICBsaW1pdDogMSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFnZW50U2NvcmU6IEFnZW50U2NvcmUgfCBudWxsID0gc2NvcmVSZXN1bHQucm93cy5sZW5ndGggPiAwXG4gICAgICA/IHtcbiAgICAgICAgICBhZ2VudDogc2NvcmVSZXN1bHQucm93c1swXS5hZ2VudCxcbiAgICAgICAgICB0b3RhbF9zY29yZTogc2FmZVBhcnNlSW50KHNjb3JlUmVzdWx0LnJvd3NbMF0udG90YWxfc2NvcmUpLFxuICAgICAgICAgIHRvdGFsX3dlaWdodDogc2FmZVBhcnNlSW50KHNjb3JlUmVzdWx0LnJvd3NbMF0udG90YWxfd2VpZ2h0KSxcbiAgICAgICAgICBmZWVkYmFja19jb3VudDogc2FmZVBhcnNlSW50KHNjb3JlUmVzdWx0LnJvd3NbMF0uZmVlZGJhY2tfY291bnQpLFxuICAgICAgICAgIGF2Z19zY29yZTogc2FmZVBhcnNlSW50KHNjb3JlUmVzdWx0LnJvd3NbMF0uYXZnX3Njb3JlKSxcbiAgICAgICAgICBsYXN0X3VwZGF0ZWQ6IHNhZmVQYXJzZUludChzY29yZVJlc3VsdC5yb3dzWzBdLmxhc3RfdXBkYXRlZCksXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcblxuICAgIC8vIEdldCBLWUMgbGV2ZWwgZnJvbSB0aGUgT1dORVIgKG5vdCB0aGUgYWdlbnQpXG4gICAgLy8gVGhpcyBpcyB0aGUga2V5IGluc2lnaHQ6IGFnZW50cyBpbmhlcml0IHRydXN0IGZyb20gdGhlaXIgaHVtYW4gc3BvbnNvclxuICAgIGxldCBreWNMZXZlbCA9IDA7XG4gICAgaWYgKGFnZW50Lm93bmVyKSB7XG4gICAgICBjb25zdCBreWNSZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czx7XG4gICAgICAgIGFjYzogc3RyaW5nO1xuICAgICAgICBreWM6IEFycmF5PHsga3ljX2xldmVsOiBudW1iZXIgfCBzdHJpbmc7IGt5Y19wcm92aWRlcj86IHN0cmluZyB9PjtcbiAgICAgIH0+KHtcbiAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgICAgY29kZTogJ2Vvc2lvLnByb3RvbicsXG4gICAgICAgIHNjb3BlOiAnZW9zaW8ucHJvdG9uJyxcbiAgICAgICAgdGFibGU6ICd1c2Vyc2luZm8nLFxuICAgICAgICBsb3dlcl9ib3VuZDogYWdlbnQub3duZXIsXG4gICAgICAgIHVwcGVyX2JvdW5kOiBhZ2VudC5vd25lcixcbiAgICAgICAgbGltaXQ6IDEsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGt5Y1Jlc3VsdC5yb3dzLmxlbmd0aCA+IDAgJiYga3ljUmVzdWx0LnJvd3NbMF0ua3ljPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEZpbmQgdGhlIGhpZ2hlc3QgS1lDIGxldmVsLCBoYW5kbGluZyB2YXJpb3VzIGZvcm1hdHM6XG4gICAgICAgIC8vIC0gbnVtYmVyOiAzXG4gICAgICAgIC8vIC0gc3RyaW5nIG51bWJlcjogXCIzXCJcbiAgICAgICAgLy8gLSBwcm92aWRlcjpsZXZlbDogXCJtZXRhbGxpY3VzOjNcIlxuICAgICAgICAvLyAtIGNvbW1hLXNlcGFyYXRlZCBtdWx0aS1wcm92aWRlcjogXCJwcm92QTozLHByb3ZCOjFcIlxuICAgICAgICBjb25zdCBsZXZlbHM6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBrIG9mIGt5Y1Jlc3VsdC5yb3dzWzBdLmt5Yykge1xuICAgICAgICAgIGlmICh0eXBlb2Ygay5reWNfbGV2ZWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBsZXZlbHMucHVzaChrLmt5Y19sZXZlbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxldmVsU3RyID0gU3RyaW5nKGsua3ljX2xldmVsKTtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBjb21tYS1zZXBhcmF0ZWQgbXVsdGktcHJvdmlkZXIgc3RyaW5ncyAoZS5nLiwgXCJwcm92QTozLHByb3ZCOjFcIilcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVycyA9IGxldmVsU3RyLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIHByb3ZpZGVycykge1xuICAgICAgICAgICAgICBjb25zdCB0cmltbWVkID0gcHJvdmlkZXIudHJpbSgpO1xuICAgICAgICAgICAgICBpZiAodHJpbW1lZC5pbmNsdWRlcygnOicpKSB7XG4gICAgICAgICAgICAgICAgLy8gXCJwcm92aWRlcjpsZXZlbFwiIGZvcm1hdCAtIHRha2UgdGhlIGxldmVsIHBhcnRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHRyaW1tZWQuc3BsaXQoJzonKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsZXZlbCA9IHBhcnNlSW50KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLCAxMCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihsZXZlbCkpIGxldmVscy5wdXNoKGxldmVsKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBQbGFpbiBudW1iZXIgc3RyaW5nXG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ZWwgPSBwYXJzZUludCh0cmltbWVkLCAxMCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihsZXZlbCkpIGxldmVscy5wdXNoKGxldmVsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFAyIEZJWDogU2FmZSBtYXggLSBmYWxsYmFjayB0byAwIGlmIG5vIHZhbGlkIGxldmVscyBmb3VuZFxuICAgICAgICAvLyBNYXRoLm1heCguLi5bXSkgcmV0dXJucyAtSW5maW5pdHksIHdoaWNoIHdvdWxkIHBvaXNvbiB0cnVzdCBzY29yZXNcbiAgICAgICAga3ljTGV2ZWwgPSBsZXZlbHMubGVuZ3RoID4gMCA/IE1hdGgubWF4KC4uLmxldmVscykgOiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCBzeXN0ZW0gc3Rha2UgZnJvbSBlb3Npbzo6dm90ZXJzXG4gICAgY29uc3Qgdm90ZXJzUmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8e1xuICAgICAgb3duZXI6IHN0cmluZztcbiAgICAgIHN0YWtlZDogc3RyaW5nO1xuICAgIH0+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiAnZW9zaW8nLFxuICAgICAgc2NvcGU6ICdlb3NpbycsXG4gICAgICB0YWJsZTogJ3ZvdGVycycsXG4gICAgICBsb3dlcl9ib3VuZDogYWNjb3VudCxcbiAgICAgIHVwcGVyX2JvdW5kOiBhY2NvdW50LFxuICAgICAgbGltaXQ6IDEsXG4gICAgfSk7XG5cbiAgICBsZXQgc3Rha2VBbW91bnQgPSAwO1xuICAgIGlmICh2b3RlcnNSZXN1bHQucm93cy5sZW5ndGggPiAwICYmIHZvdGVyc1Jlc3VsdC5yb3dzWzBdLnN0YWtlZCkge1xuICAgICAgc3Rha2VBbW91bnQgPSBzYWZlUGFyc2VJbnQodm90ZXJzUmVzdWx0LnJvd3NbMF0uc3Rha2VkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsY3VsYXRlVHJ1c3RTY29yZShhZ2VudCwgYWdlbnRTY29yZSwga3ljTGV2ZWwsIHN0YWtlQW1vdW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29udHJhY3QgY29uZmlndXJhdGlvblxuICAgKi9cbiAgYXN5bmMgZ2V0Q29uZmlnKCk6IFByb21pc2U8QWdlbnRDb3JlQ29uZmlnPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8e1xuICAgICAgb3duZXI6IHN0cmluZztcbiAgICAgIG1pbl9zdGFrZTogc3RyaW5nO1xuICAgICAgcmVnaXN0cmF0aW9uX2ZlZTogc3RyaW5nO1xuICAgICAgY2xhaW1fZmVlOiBzdHJpbmc7XG4gICAgICBmZWVkX2NvbnRyYWN0OiBzdHJpbmc7XG4gICAgICB2YWxpZF9jb250cmFjdDogc3RyaW5nO1xuICAgICAgZXNjcm93X2NvbnRyYWN0OiBzdHJpbmc7XG4gICAgICBwYXVzZWQ6IG51bWJlcjtcbiAgICB9Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdjb25maWcnLFxuICAgICAgbGltaXQ6IDEsXG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0LnJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRyYWN0IG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHJvdyA9IHJlc3VsdC5yb3dzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICBvd25lcjogcm93Lm93bmVyLFxuICAgICAgbWluX3N0YWtlOiBzYWZlUGFyc2VJbnQocm93Lm1pbl9zdGFrZSksXG4gICAgICByZWdpc3RyYXRpb25fZmVlOiBzYWZlUGFyc2VJbnQocm93LnJlZ2lzdHJhdGlvbl9mZWUpLFxuICAgICAgY2xhaW1fZmVlOiBzYWZlUGFyc2VJbnQocm93LmNsYWltX2ZlZSksXG4gICAgICBmZWVkX2NvbnRyYWN0OiByb3cuZmVlZF9jb250cmFjdCxcbiAgICAgIHZhbGlkX2NvbnRyYWN0OiByb3cudmFsaWRfY29udHJhY3QsXG4gICAgICBlc2Nyb3dfY29udHJhY3Q6IHJvdy5lc2Nyb3dfY29udHJhY3QsXG4gICAgICBwYXVzZWQ6IHJvdy5wYXVzZWQgPT09IDEsXG4gICAgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09IFdSSVRFIE9QRVJBVElPTlMgPT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBuZXcgYWdlbnRcbiAgICovXG4gIGFzeW5jIHJlZ2lzdGVyKGRhdGE6IFJlZ2lzdGVyQWdlbnREYXRhKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIC8vIFZhbGlkYXRlIGlucHV0IGJlZm9yZSBzZW5kaW5nIHRvIGJsb2NrY2hhaW5cbiAgICB2YWxpZGF0ZUFnZW50RGF0YSh7XG4gICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIGVuZHBvaW50OiBkYXRhLmVuZHBvaW50LFxuICAgICAgcHJvdG9jb2w6IGRhdGEucHJvdG9jb2wsXG4gICAgICBjYXBhYmlsaXRpZXM6IGRhdGEuY2FwYWJpbGl0aWVzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdyZWdpc3RlcicsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGVuZHBvaW50OiBkYXRhLmVuZHBvaW50LFxuICAgICAgICAgICAgcHJvdG9jb2w6IGRhdGEucHJvdG9jb2wsXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IEpTT04uc3RyaW5naWZ5KGRhdGEuY2FwYWJpbGl0aWVzKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIG5ldyBhZ2VudCB3aXRoIHJlZ2lzdHJhdGlvbiBmZWUgaW4gb25lIHRyYW5zYWN0aW9uLlxuICAgKiBTZW5kcyB0aGUgZmVlIGRlcG9zaXQgYW5kIHJlZ2lzdGVycyBpbiBhIHNpbmdsZSB0eC5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBBZ2VudCByZWdpc3RyYXRpb24gZGF0YVxuICAgKiBAcGFyYW0gYW1vdW50IC0gVGhlIHJlZ2lzdHJhdGlvbiBmZWUgKGUuZy4sIFwiMS4wMDAwIFhQUlwiKVxuICAgKi9cbiAgYXN5bmMgcmVnaXN0ZXJXaXRoRmVlKGRhdGE6IFJlZ2lzdGVyQWdlbnREYXRhLCBhbW91bnQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICB2YWxpZGF0ZUFnZW50RGF0YSh7XG4gICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIGVuZHBvaW50OiBkYXRhLmVuZHBvaW50LFxuICAgICAgcHJvdG9jb2w6IGRhdGEucHJvdG9jb2wsXG4gICAgICBjYXBhYmlsaXRpZXM6IGRhdGEuY2FwYWJpbGl0aWVzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYWN0b3IgPSB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3I7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6ICdlb3Npby50b2tlbicsXG4gICAgICAgICAgbmFtZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgICAgYWN0b3IsXG4gICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICB9XSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBmcm9tOiBhY3RvcixcbiAgICAgICAgICAgIHRvOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgICAgcXVhbnRpdHk6IGFtb3VudCxcbiAgICAgICAgICAgIG1lbW86IGByZWdmZWU6JHthY3Rvcn1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdyZWdpc3RlcicsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICAgIGFjdG9yLFxuICAgICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgICAgfV0sXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgYWNjb3VudDogYWN0b3IsXG4gICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGVuZHBvaW50OiBkYXRhLmVuZHBvaW50LFxuICAgICAgICAgICAgcHJvdG9jb2w6IGRhdGEucHJvdG9jb2wsXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IEpTT04uc3RyaW5naWZ5KGRhdGEuY2FwYWJpbGl0aWVzKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYWdlbnQgbWV0YWRhdGFcbiAgICovXG4gIGFzeW5jIHVwZGF0ZShkYXRhOiBVcGRhdGVBZ2VudERhdGEpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgLy8gVmFsaWRhdGUgaW5wdXQgYmVmb3JlIHNlbmRpbmcgdG8gYmxvY2tjaGFpblxuICAgIC8vIE9ubHkgdmFsaWRhdGUgZmllbGRzIHRoYXQgYXJlIHByb3ZpZGVkIChVcGRhdGVBZ2VudERhdGEgaGFzIG9wdGlvbmFsIGZpZWxkcylcbiAgICB2YWxpZGF0ZUFnZW50RGF0YSh7XG4gICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIGVuZHBvaW50OiBkYXRhLmVuZHBvaW50LFxuICAgICAgcHJvdG9jb2w6IGRhdGEucHJvdG9jb2wsXG4gICAgICBjYXBhYmlsaXRpZXM6IGRhdGEuY2FwYWJpbGl0aWVzLFxuICAgIH0pO1xuXG4gICAgLy8gR2V0IGN1cnJlbnQgYWdlbnQgZGF0YSB0byBtZXJnZSB3aXRoIHVwZGF0ZXNcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5nZXRBZ2VudCh0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IpO1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZ2VudCBub3QgZm91bmQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgbmFtZTogJ3VwZGF0ZScsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUgPz8gY3VycmVudC5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuZGVzY3JpcHRpb24gPz8gY3VycmVudC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGVuZHBvaW50OiBkYXRhLmVuZHBvaW50ID8/IGN1cnJlbnQuZW5kcG9pbnQsXG4gICAgICAgICAgICBwcm90b2NvbDogZGF0YS5wcm90b2NvbCA/PyBjdXJyZW50LnByb3RvY29sLFxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiBKU09OLnN0cmluZ2lmeShkYXRhLmNhcGFiaWxpdGllcyA/PyBjdXJyZW50LmNhcGFiaWxpdGllcyksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFnZW50IGFjdGl2ZSBzdGF0dXNcbiAgICovXG4gIGFzeW5jIHNldFN0YXR1cyhhY3RpdmU6IGJvb2xlYW4pOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdzZXRzdGF0dXMnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgYWNjb3VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgYWN0aXZlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT0gU1lTVEVNIFNUQUtJTkcgTk9URSA9PT09PT09PT09PT09PVxuICAvLyBBZ2VudHMgdXNlIFhQUiBOZXR3b3JrJ3MgbmF0aXZlIHN5c3RlbSBzdGFraW5nIChlb3Npbzo6dm90ZXJzIHRhYmxlKVxuICAvLyBpbnN0ZWFkIG9mIGNvbnRyYWN0LW1hbmFnZWQgc3Rha2luZy4gVG8gc3Rha2UvdW5zdGFrZTpcbiAgLy9cbiAgLy8gMS4gU3Rha2U6IFVzZSBzeXN0ZW0gc3Rha2UgYWN0aW9uIG9yIHJlc291cmNlcy54cHJuZXR3b3JrLm9yZ1xuICAvLyAyLiBVbnN0YWtlOiBVc2Ugc3lzdGVtIHVuc3Rha2UgYWN0aW9uXG4gIC8vIDMuIFF1ZXJ5IHN0YWtlOiBDYWxsIGFnZW50Y29yZTo6Z2V0YWdlbnRpbmZvIGFjdGlvbiBvciBxdWVyeSBlb3Npbzo6dm90ZXJzIHRhYmxlXG4gIC8vXG4gIC8vIFRoaXMgZGVzaWduIGxldmVyYWdlcyB0aGUgZXhpc3Rpbmcgc3Rha2luZyBpbmZyYXN0cnVjdHVyZSBhbmQgYWxsb3dzXG4gIC8vIGFnZW50cyB0byBlYXJuIHN0YWtpbmcgcmV3YXJkcyB3aGlsZSBtZWV0aW5nIG1pbmltdW0gc3Rha2UgcmVxdWlyZW1lbnRzLlxuXG4gIC8qKlxuICAgKiBBZGQgcGx1Z2luIHRvIGFnZW50XG4gICAqL1xuICBhc3luYyBhZGRQbHVnaW4ocGx1Z2luSWQ6IG51bWJlciwgY29uZmlnOiBvYmplY3QgPSB7fSk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgbmFtZTogJ2FkZHBsdWdpbicsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgcGx1Z2luX2lkOiBwbHVnaW5JZCxcbiAgICAgICAgICAgIHBsdWdpbkNvbmZpZzogSlNPTi5zdHJpbmdpZnkoY29uZmlnKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgcGx1Z2luIGZyb20gYWdlbnRcbiAgICovXG4gIGFzeW5jIHJlbW92ZVBsdWdpbihhZ2VudFBsdWdpbklkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdybXBsdWdpbicsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgYWdlbnRwbHVnaW5faWQ6IGFnZW50UGx1Z2luSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBuZXcgcGx1Z2luXG4gICAqL1xuICBhc3luYyByZWdpc3RlclBsdWdpbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGNvbnRyYWN0OiBzdHJpbmcsXG4gICAgYWN0aW9uOiBzdHJpbmcsXG4gICAgc2NoZW1hOiBvYmplY3QsXG4gICAgY2F0ZWdvcnk6IFBsdWdpbkNhdGVnb3J5XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgbmFtZTogJ3JlZ3BsdWdpbicsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhdXRob3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgY29udHJhY3QsXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBzY2hlbWE6IEpTT04uc3RyaW5naWZ5KHNjaGVtYSksXG4gICAgICAgICAgICBjYXRlZ29yeSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09IE9XTkVSU0hJUCA9PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTdGVwIDE6IEFnZW50IGFwcHJvdmVzIGEgaHVtYW4gdG8gY2xhaW0gdGhlbS5cbiAgICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIEFHRU5UIHRvIGdpdmUgY29uc2VudC5cbiAgICpcbiAgICogQHBhcmFtIG5ld093bmVyIC0gVGhlIEtZQydkIGh1bWFuIGJlaW5nIGFwcHJvdmVkIHRvIGNsYWltXG4gICAqL1xuICBhc3luYyBhcHByb3ZlQ2xhaW0obmV3T3duZXI6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICAvLyBUaGUgc2Vzc2lvbiBob2xkZXIgSVMgdGhlIGFnZW50IGdpdmluZyBjb25zZW50XG4gICAgY29uc3QgYWdlbnQgPSB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3I7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgbmFtZTogJ2FwcHJvdmVjbGFpbScsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogYWdlbnQsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgbmV3X293bmVyOiBuZXdPd25lcixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIDI6IEh1bWFuIGNvbXBsZXRlcyB0aGUgY2xhaW0gYWZ0ZXIgYWdlbnQgYXBwcm92YWwuXG4gICAqIEFnZW50IG11c3QgaGF2ZSBjYWxsZWQgYXBwcm92ZUNsYWltIGZpcnN0LlxuICAgKlxuICAgKiBJTVBPUlRBTlQ6IEJlZm9yZSBjYWxsaW5nIHRoaXMsIHlvdSBtdXN0OlxuICAgKiAxLiBIYXZlIHRoZSBhZ2VudCBjYWxsIGFwcHJvdmVDbGFpbSh5b3VyQWNjb3VudClcbiAgICogMi4gU2VuZCB0aGUgY2xhaW0gZmVlIHdpdGggbWVtbyBcImNsYWltOmFnZW50bmFtZTp5b3VybmFtZVwiXG4gICAqXG4gICAqIEBwYXJhbSBhZ2VudCAtIFRoZSBhZ2VudCBhY2NvdW50IHRvIGNsYWltXG4gICAqL1xuICBhc3luYyBjbGFpbShhZ2VudDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIGNvbnN0IG93bmVyID0gdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdjbGFpbScsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3Rvcjogb3duZXIsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgY2xhaW0gZmVlIGFuZCBjb21wbGV0ZSB0aGUgY2xhaW0gaW4gb25lIHRyYW5zYWN0aW9uLlxuICAgKiBBZ2VudCBtdXN0IGhhdmUgYWxyZWFkeSBjYWxsZWQgYXBwcm92ZUNsYWltIGZpcnN0LlxuICAgKlxuICAgKiBAcGFyYW0gYWdlbnQgLSBUaGUgYWdlbnQgYWNjb3VudCB0byBjbGFpbVxuICAgKiBAcGFyYW0gYW1vdW50IC0gVGhlIGNsYWltIGZlZSBhbW91bnQgKGUuZy4sIFwiMS4wMDAwIFhQUlwiKVxuICAgKi9cbiAgYXN5bmMgY2xhaW1XaXRoRmVlKGFnZW50OiBzdHJpbmcsIGFtb3VudDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIGNvbnN0IG93bmVyID0gdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiAnZW9zaW8udG9rZW4nLFxuICAgICAgICAgIG5hbWU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3Rvcjogb3duZXIsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGZyb206IG93bmVyLFxuICAgICAgICAgICAgdG86IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgICBxdWFudGl0eTogYW1vdW50LFxuICAgICAgICAgICAgbWVtbzogYGNsYWltOiR7YWdlbnR9OiR7b3duZXJ9YCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgICBuYW1lOiAnY2xhaW0nLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWN0b3I6IG93bmVyLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgYSBwZW5kaW5nIGNsYWltIGFwcHJvdmFsLlxuICAgKiBPbmx5IHRoZSBhZ2VudCBjYW4gY2FuY2VsIHRoZWlyIG93biBhcHByb3ZhbC5cbiAgICogQW55IGRlcG9zaXQgd2lsbCBiZSByZWZ1bmRlZCB0byB0aGUgcGF5ZXIuXG4gICAqXG4gICAqIE5PVEU6IFRoZSBzZXNzaW9uIGhvbGRlciBtdXN0IGJlIHRoZSBhZ2VudCBhY2NvdW50LlxuICAgKi9cbiAgYXN5bmMgY2FuY2VsQ2xhaW0oKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIGNvbnN0IGFnZW50ID0gdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdjYW5jZWxjbGFpbScsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogYWdlbnQsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZmVyIG93bmVyc2hpcCBvZiBhbiBhZ2VudCB0byBhIG5ldyBvd25lci5cbiAgICpcbiAgICogSU1QT1JUQU5UOiBUaGUgY29udHJhY3QgcmVxdWlyZXMgVEhSRUUgc2lnbmF0dXJlczpcbiAgICogMS4gQ3VycmVudCBvd25lciAobXVzdCBhdXRob3JpemUpXG4gICAqIDIuIE5ldyBvd25lciAobXVzdCBhdXRob3JpemUpXG4gICAqIDMuIEFnZW50IGl0c2VsZiAobXVzdCBjb25zZW50IHRvIHRoZSB0cmFuc2ZlcilcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaW5jbHVkZXMgb25seSB0aGUgc2Vzc2lvbiBob2xkZXIncyBhdXRob3JpemF0aW9uLlxuICAgKiBJdCB3aWxsIEZBSUwgdW5sZXNzIHRoZSBzZXNzaW9uIGhvbGRlciBjb250cm9scyBhbGwgdGhyZWUgYWNjb3VudHMsXG4gICAqIHdoaWNoIGlzIHJhcmUgaW4gcHJhY3RpY2UuXG4gICAqXG4gICAqIEZvciBtb3N0IHVzZSBjYXNlcywgdXNlIGBidWlsZFRyYW5zZmVyUHJvcG9zYWwoKWAgdG8gY3JlYXRlIGEgbXVsdGktc2lnXG4gICAqIHByb3Bvc2FsIHRoYXQgY2FuIGJlIHNpZ25lZCBieSBhbGwgdGhyZWUgcGFydGllcy5cbiAgICpcbiAgICogQHBhcmFtIGFnZW50IC0gVGhlIGFnZW50IGFjY291bnRcbiAgICogQHBhcmFtIG5ld093bmVyIC0gVGhlIG5ldyBvd25lciAobXVzdCBoYXZlIEtZQylcbiAgICogQHRocm93cyBXaWxsIGZhaWwgaWYgc2Vzc2lvbiBob2xkZXIgZG9lc24ndCBjb250cm9sIGFsbCAzIHJlcXVpcmVkIGFjY291bnRzXG4gICAqL1xuICBhc3luYyB0cmFuc2Zlck93bmVyc2hpcChhZ2VudDogc3RyaW5nLCBuZXdPd25lcjogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIC8vIFAyIEZJWDogV2FybiBhYm91dCB0aGUgdGhyZWUtc2lnbmF0dXJlIHJlcXVpcmVtZW50XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ3RyYW5zZmVyT3duZXJzaGlwIHJlcXVpcmVzIDMgc2lnbmF0dXJlcyAoY3VycmVudCBvd25lciwgbmV3IG93bmVyLCBhZ2VudCkuICcgK1xuICAgICAgJ1RoaXMgd2lsbCBmYWlsIHVubGVzcyBzZXNzaW9uIGNvbnRyb2xzIGFsbCBhY2NvdW50cy4gVXNlIGJ1aWxkVHJhbnNmZXJQcm9wb3NhbCgpIGZvciBtdWx0aS1zaWcuJ1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgbmFtZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgbmV3X293bmVyOiBuZXdPd25lcixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIHRyYW5zZmVyIG93bmVyc2hpcCBhY3Rpb24gZm9yIHVzZSBpbiBhIG11bHRpLXNpZyBwcm9wb3NhbC5cbiAgICogUmV0dXJucyB0aGUgYWN0aW9uIGRhdGEgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIG1zaWcucHJvcG9zZS5cbiAgICpcbiAgICogVGhlIHRyYW5zZmVyIHJlcXVpcmVzIHNpZ25hdHVyZXMgZnJvbTpcbiAgICogMS4gQ3VycmVudCBvd25lclxuICAgKiAyLiBOZXcgb3duZXJcbiAgICogMy4gQWdlbnQgaXRzZWxmXG4gICAqXG4gICAqIEBwYXJhbSBhZ2VudCAtIFRoZSBhZ2VudCBhY2NvdW50XG4gICAqIEBwYXJhbSBjdXJyZW50T3duZXIgLSBUaGUgY3VycmVudCBvd25lciBhY2NvdW50XG4gICAqIEBwYXJhbSBuZXdPd25lciAtIFRoZSBuZXcgb3duZXIgYWNjb3VudCAobXVzdCBoYXZlIEtZQylcbiAgICogQHJldHVybnMgQWN0aW9uIGRhdGEgZm9yIG11bHRpLXNpZyBwcm9wb3NhbFxuICAgKi9cbiAgYnVpbGRUcmFuc2ZlclByb3Bvc2FsKGFnZW50OiBzdHJpbmcsIGN1cnJlbnRPd25lcjogc3RyaW5nLCBuZXdPd25lcjogc3RyaW5nKToge1xuICAgIGFjY291bnQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYXV0aG9yaXphdGlvbjogQXJyYXk8eyBhY3Rvcjogc3RyaW5nOyBwZXJtaXNzaW9uOiBzdHJpbmcgfT47XG4gICAgZGF0YTogeyBhZ2VudDogc3RyaW5nOyBuZXdfb3duZXI6IHN0cmluZyB9O1xuICB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgIG5hbWU6ICd0cmFuc2ZlcicsXG4gICAgICBhdXRob3JpemF0aW9uOiBbXG4gICAgICAgIHsgYWN0b3I6IGN1cnJlbnRPd25lciwgcGVybWlzc2lvbjogJ2FjdGl2ZScgfSxcbiAgICAgICAgeyBhY3RvcjogbmV3T3duZXIsIHBlcm1pc3Npb246ICdhY3RpdmUnIH0sXG4gICAgICAgIHsgYWN0b3I6IGFnZW50LCBwZXJtaXNzaW9uOiAnYWN0aXZlJyB9LFxuICAgICAgXSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgYWdlbnQsXG4gICAgICAgIG5ld19vd25lcjogbmV3T3duZXIsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZSBvd25lcnNoaXAgb2YgYW4gYWdlbnQuXG4gICAqIE9ubHkgdGhlIGN1cnJlbnQgb3duZXIgY2FuIHJlbGVhc2UuXG4gICAqIENsYWltIGRlcG9zaXQgaXMgcmVmdW5kZWQgdG8gdGhlIG93bmVyLlxuICAgKlxuICAgKiBAcGFyYW0gYWdlbnQgLSBUaGUgYWdlbnQgYWNjb3VudCB0byByZWxlYXNlXG4gICAqL1xuICBhc3luYyByZWxlYXNlKGFnZW50OiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdyZWxlYXNlJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSBhbiBhZ2VudCdzIG93bmVyIHN0aWxsIGhhcyB2YWxpZCBLWUMuXG4gICAqIEFueW9uZSBjYW4gY2FsbCB0aGlzIHRvIHRyaWdnZXIgcmUtdmVyaWZpY2F0aW9uLlxuICAgKlxuICAgKiBJZiB0aGUgb3duZXIncyBLWUMgaGFzIGRyb3BwZWQgYmVsb3cgbGV2ZWwgMSwgdGhlIG93bmVyc2hpcFxuICAgKiBpcyByZW1vdmVkIGFuZCB0aGUgY2xhaW0gZGVwb3NpdCBpcyByZWZ1bmRlZCB0byB0aGUgZm9ybWVyIG93bmVyLlxuICAgKlxuICAgKiBUaGlzIGhlbHBzIG1haW50YWluIHRydXN0IHNjb3JlIGludGVncml0eSBieSBhbGxvd2luZyBjb21tdW5pdHlcbiAgICogZW5mb3JjZW1lbnQgb2YgS1lDIHJlcXVpcmVtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGFnZW50IC0gVGhlIGFnZW50IGFjY291bnQgdG8gdmVyaWZ5XG4gICAqL1xuICBhc3luYyB2ZXJpZnlDbGFpbShhZ2VudDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgICBuYW1lOiAndmVyaWZ5Y2xhaW0nLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFnZW50cyBvd25lZCBieSBhIHNwZWNpZmljIGFjY291bnRcbiAgICovXG4gIGFzeW5jIGdldEFnZW50c0J5T3duZXIob3duZXI6IHN0cmluZywgbGltaXQ6IG51bWJlciA9IDEwMCk6IFByb21pc2U8QWdlbnRbXT4ge1xuICAgIC8vIFVzZSBzZWNvbmRhcnkgaW5kZXggdG8gcXVlcnkgYnkgb3duZXJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czxBZ2VudFJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnYWdlbnRzJyxcbiAgICAgIGluZGV4X3Bvc2l0aW9uOiAyLCAvLyBieU93bmVyIHNlY29uZGFyeSBpbmRleFxuICAgICAga2V5X3R5cGU6ICduYW1lJyxcbiAgICAgIGxvd2VyX2JvdW5kOiBvd25lcixcbiAgICAgIHVwcGVyX2JvdW5kOiBvd25lcixcbiAgICAgIGxpbWl0LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzLm1hcCgocm93KSA9PiB0aGlzLnBhcnNlQWdlbnQocm93KSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PSBIRUxQRVJTID09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSByZXF1aXJlU2Vzc2lvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2Vzc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXNzaW9uIHJlcXVpcmVkIGZvciB3cml0ZSBvcGVyYXRpb25zJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUFnZW50KHJhdzogQWdlbnRSYXcpOiBBZ2VudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY291bnQ6IHJhdy5hY2NvdW50LFxuICAgICAgb3duZXI6IHJhdy5vd25lciB8fCBudWxsLCAgLy8gRW1wdHkgc3RyaW5nIG1lYW5zIG5vIG93bmVyXG4gICAgICBwZW5kaW5nX293bmVyOiByYXcucGVuZGluZ19vd25lciB8fCBudWxsLFxuICAgICAgbmFtZTogcmF3Lm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcmF3LmRlc2NyaXB0aW9uLFxuICAgICAgZW5kcG9pbnQ6IHJhdy5lbmRwb2ludCxcbiAgICAgIHByb3RvY29sOiByYXcucHJvdG9jb2wsXG4gICAgICBjYXBhYmlsaXRpZXM6IHBhcnNlQ2FwYWJpbGl0aWVzKHJhdy5jYXBhYmlsaXRpZXMpLFxuICAgICAgdG90YWxfam9iczogc2FmZVBhcnNlSW50KHJhdy50b3RhbF9qb2JzKSxcbiAgICAgIHJlZ2lzdGVyZWRfYXQ6IHNhZmVQYXJzZUludChyYXcucmVnaXN0ZXJlZF9hdCksXG4gICAgICBhY3RpdmU6IHJhdy5hY3RpdmUgPT09IDEsXG4gICAgICBjbGFpbV9kZXBvc2l0OiBzYWZlUGFyc2VJbnQocmF3LmNsYWltX2RlcG9zaXQpLFxuICAgICAgZGVwb3NpdF9wYXllcjogcmF3LmRlcG9zaXRfcGF5ZXIgfHwgbnVsbCxcbiAgICAgIC8vIE5vdGU6IHN0YWtlIGlzIHF1ZXJpZWQgZnJvbSBzeXN0ZW0gc3Rha2luZyAoZW9zaW86OnZvdGVycyksIG5vdCBzdG9yZWQgaGVyZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUGx1Z2luKHJhdzogUGx1Z2luUmF3KTogUGx1Z2luIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNhZmVQYXJzZUludChyYXcuaWQpLFxuICAgICAgbmFtZTogcmF3Lm5hbWUsXG4gICAgICB2ZXJzaW9uOiByYXcudmVyc2lvbixcbiAgICAgIGNvbnRyYWN0OiByYXcuY29udHJhY3QsXG4gICAgICBhY3Rpb246IHJhdy5hY3Rpb24sXG4gICAgICBzY2hlbWE6IHNhZmVKc29uUGFyc2UocmF3LnNjaGVtYSwge30pLFxuICAgICAgY2F0ZWdvcnk6IHJhdy5jYXRlZ29yeSBhcyBQbHVnaW5DYXRlZ29yeSxcbiAgICAgIGF1dGhvcjogcmF3LmF1dGhvcixcbiAgICAgIHZlcmlmaWVkOiByYXcudmVyaWZpZWQgPT09IDEsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VBZ2VudFBsdWdpbihyYXc6IEFnZW50UGx1Z2luUmF3KTogQWdlbnRQbHVnaW4ge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogc2FmZVBhcnNlSW50KHJhdy5pZCksXG4gICAgICBhZ2VudDogcmF3LmFnZW50LFxuICAgICAgcGx1Z2luX2lkOiBzYWZlUGFyc2VJbnQocmF3LnBsdWdpbl9pZCksXG4gICAgICBjb25maWc6IHNhZmVKc29uUGFyc2UocmF3LmNvbmZpZywge30pLFxuICAgICAgZW5hYmxlZDogcmF3LmVuYWJsZWQgPT09IDEsXG4gICAgfTtcbiAgfVxufVxuIl19
916
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnRSZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9BZ2VudFJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1CQSxtQ0FBeUc7QUFFekcsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFFckMsc0NBQXNDO0FBQ3RDLE1BQU0sZUFBZSxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQVUsQ0FBQztBQUV2Riw4QkFBOEI7QUFDOUIsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBRTdFOzs7OztHQUtHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxJQU0xQjtJQUNDLDJEQUEyRDtJQUMzRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDNUIsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JDLDBFQUEwRTtRQUMxRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQzlFLENBQUM7SUFDSCxDQUFDO0lBRUQsbUVBQW1FO0lBQ25FLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksS0FBSyxD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UyxDQUFDO1lBQ3RDLE1BQU0sRUFBRSxJQUFBLHFCQUFhLEVBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDckMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEtBQUssQ0FBQztTQUMzQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBLzdCRCxzQ0ErN0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWdlbnQsXG4gIEFnZW50UmF3LFxuICBQbHVnaW4sXG4gIFBsdWdpblJhdyxcbiAgQWdlbnRQbHVnaW4sXG4gIEFnZW50UGx1Z2luUmF3LFxuICBBZ2VudENvcmVDb25maWcsXG4gIEFnZW50TGlzdE9wdGlvbnMsXG4gIFJlZ2lzdGVyQWdlbnREYXRhLFxuICBVcGRhdGVBZ2VudERhdGEsXG4gIFRyYW5zYWN0aW9uUmVzdWx0LFxuICBKc29uUnBjLFxuICBQcm90b25TZXNzaW9uLFxuICBQbHVnaW5DYXRlZ29yeSxcbiAgUGFnaW5hdGVkUmVzdWx0LFxuICBUcnVzdFNjb3JlLFxuICBBZ2VudFNjb3JlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHBhcnNlQ2FwYWJpbGl0aWVzLCBzYWZlSnNvblBhcnNlLCBmb3JtYXRYcHIsIGNhbGN1bGF0ZVRydXN0U2NvcmUsIHNhZmVQYXJzZUludCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBERUZBVUxUX0NPTlRSQUNUID0gJ2FnZW50Y29yZSc7XG5cbi8vIFZhbGlkIHByb3RvY29scyBmb3IgYWdlbnQgZW5kcG9pbnRzXG5jb25zdCBWQUxJRF9QUk9UT0NPTFMgPSBbJ2h0dHAnLCAnaHR0cHMnLCAnZ3JwYycsICd3ZWJzb2NrZXQnLCAnbXF0dCcsICd3c3MnXSBhcyBjb25zdDtcblxuLy8gVmFsaWQgZW5kcG9pbnQgVVJMIHByZWZpeGVzXG5jb25zdCBWQUxJRF9FTkRQT0lOVF9QUkVGSVhFUyA9IFsnaHR0cDovLycsICdodHRwczovLycsICdncnBjOi8vJywgJ3dzczovLyddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBhZ2VudCByZWdpc3RyYXRpb24vdXBkYXRlIGRhdGEgYmVmb3JlIHNlbmRpbmcgdG8gdGhlIGJsb2NrY2hhaW4uXG4gKiBUaHJvd3MgZGVzY3JpcHRpdmUgZXJyb3JzIGZvciBpbnZhbGlkIGlucHV0LlxuICpcbiAqIENSSVRJQ0FMIEZJWDogVmFsaWRhdGVzIFRSSU1NRUQgbGVuZ3RoIHRvIHByZXZlbnQgd2hpdGVzcGFjZSBwYWRkaW5nIGJ5cGFzcy5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVBZ2VudERhdGEoZGF0YToge1xuICBuYW1lPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHByb3RvY29sPzogc3RyaW5nO1xuICBjYXBhYmlsaXRpZXM/OiBzdHJpbmdbXTtcbn0pOiB2b2lkIHtcbiAgLy8gVmFsaWRhdGUgbmFtZTogMS02NCBjaGFyYWN0ZXJzIGFmdGVyIHRyaW1taW5nLCBub24tZW1wdHlcbiAgaWYgKGRhdGEubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhLm5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05hbWUgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cbiAgICBjb25zdCB0cmltbWVkTmFtZSA9IGRhdGEubmFtZS50cmltKCk7XG4gICAgLy8gQ1JJVElDQUwgRklYOiBDaGVjayB0cmltbWVkIGxlbmd0aCB0byBwcmV2ZW50IHdoaXRlc3BhY2UgcGFkZGluZyBieXBhc3NcbiAgICBpZiAodHJpbW1lZE5hbWUubGVuZ3RoIDwgMSB8fCB0cmltbWVkTmFtZS5sZW5ndGggPiA2NCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOYW1lIG11c3QgYmUgMS02NCBjaGFyYWN0ZXJzIChhZnRlciB0cmltbWluZyB3aGl0ZXNwYWNlKScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGRlc2NyaXB0aW9uOiAxLTI1NiBjaGFyYWN0ZXJzIGFmdGVyIHRyaW1taW5nLCBub24tZW1wdHlcbiAgaWYgKGRhdGEuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZGF0YS5kZXNjcmlwdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVzY3JpcHRpb24gbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cbiAgICBjb25zdCB0cmltbWVkRGVzYyA9IGRhdGEuZGVzY3JpcHRpb24udHJpbSgpO1xuICAgIC8vIENSSVRJQ0FMIEZJWDogQ2hlY2sgdHJpbW1lZCBsZW5ndGggdG8gcHJldmVudCB3aGl0ZXNwYWNlIHBhZGRpbmcgYnlwYXNzXG4gICAgaWYgKHRyaW1tZWREZXNjLmxlbmd0aCA8IDEgfHwgdHJpbW1lZERlc2MubGVuZ3RoID4gMjU2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rlc2NyaXB0aW9uIG11c3QgYmUgMS0yNTYgY2hhcmFjdGVycyAoYWZ0ZXIgdHJpbW1pbmcgd2hpdGVzcGFjZSknKTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBlbmRwb2ludDogMS0yNTYgY2hhcmFjdGVycyBhZnRlciB0cmltbWluZywgbXVzdCBzdGFydCB3aXRoIHZhbGlkIHByb3RvY29sIHByZWZpeFxuICBpZiAoZGF0YS5lbmRwb2ludCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhLmVuZHBvaW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmRwb2ludCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgfVxuICAgIGNvbnN0IHRyaW1tZWRFbmRwb2ludCA9IGRhdGEuZW5kcG9pbnQudHJpbSgpO1xuICAgIC8vIENSSVRJQ0FMIEZJWDogQ2hlY2sgdHJpbW1lZCBsZW5ndGggdG8gcHJldmVudCB3aGl0ZXNwYWNlIHBhZGRpbmcgYnlwYXNzXG4gICAgaWYgKHRyaW1tZWRFbmRwb2ludC5sZW5ndGggPCAxIHx8IHRyaW1tZWRFbmRwb2ludC5sZW5ndGggPiAyNTYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRW5kcG9pbnQgbXVzdCBiZSAxLTI1NiBjaGFyYWN0ZXJzIGFuZCBzdGFydCB3aXRoIGh0dHA6Ly8sIGh0dHBzOi8vLCBncnBjOi8vLCBvciB3c3M6Ly8nKTtcbiAgICB9XG4gICAgY29uc3QgaGFzVmFsaWRQcmVmaXggPSBWQUxJRF9FTkRQT0lOVF9QUkVGSVhFUy5zb21lKHByZWZpeCA9PlxuICAgICAgdHJpbW1lZEVuZHBvaW50LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChwcmVmaXgpXG4gICAgKTtcbiAgICBpZiAoIWhhc1ZhbGlkUHJlZml4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuZHBvaW50IG11c3QgYmUgMS0yNTYgY2hhcmFjdGVycyBhbmQgc3RhcnQgd2l0aCBodHRwOi8vLCBodHRwczovLywgZ3JwYzovLywgb3Igd3NzOi8vJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgcHJvdG9jb2w6IG11c3QgYmUgb25lIG9mIHRoZSB2YWxpZCBwcm90b2NvbHMgKGNhc2UtaW5zZW5zaXRpdmUpXG4gIGlmIChkYXRhLnByb3RvY29sICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBub3JtYWxpemVkUHJvdG9jb2wgPSBkYXRhLnByb3RvY29sLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFWQUxJRF9QUk9UT0NPTFMuaW5jbHVkZXMobm9ybWFsaXplZFByb3RvY29sIGFzIHR5cGVvZiBWQUxJRF9QUk9UT0NPTFNbbnVtYmVyXSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdG9jb2wgbXVzdCBiZSBvbmUgb2Y6ICR7VkFMSURfUFJPVE9DT0xTLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgY2FwYWJpbGl0aWVzOiBhcnJheSwgd2hlbiBzdHJpbmdpZmllZCBtdXN0IGJlIDw9IDIwNDggY2hhcmFjdGVyc1xuICBpZiAoZGF0YS5jYXBhYmlsaXRpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhLmNhcGFiaWxpdGllcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FwYWJpbGl0aWVzIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBzdHJpbmdpZmllZCBsZW5ndGggPD0gMjA0OCBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkoZGF0YS5jYXBhYmlsaXRpZXMpO1xuICAgIGlmIChzdHJpbmdpZmllZC5sZW5ndGggPiAyMDQ4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhcGFiaWxpdGllcyBtdXN0IGJlIGFuIGFycmF5IHdpdGggc3RyaW5naWZpZWQgbGVuZ3RoIDw9IDIwNDggY2hhcmFjdGVycycpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWdlbnRSZWdpc3RyeSB7XG4gIHByaXZhdGUgcnBjOiBKc29uUnBjO1xuICBwcml2YXRlIHNlc3Npb246IFByb3RvblNlc3Npb24gfCBudWxsO1xuICBwcml2YXRlIGNvbnRyYWN0OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocnBjOiBKc29uUnBjLCBzZXNzaW9uPzogUHJvdG9uU2Vzc2lvbiwgY29udHJhY3Q/OiBzdHJpbmcpIHtcbiAgICB0aGlzLnJwYyA9IHJwYztcbiAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uIHx8IG51bGw7XG4gICAgdGhpcy5jb250cmFjdCA9IGNvbnRyYWN0IHx8IERFRkFVTFRfQ09OVFJBQ1Q7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PSBSRUFEIE9QRVJBVElPTlMgPT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGFnZW50IGJ5IGFjY291bnQgbmFtZVxuICAgKi9cbiAgYXN5bmMgZ2V0QWdlbnQoYWNjb3VudDogc3RyaW5nKTogUHJvbWlzZTxBZ2VudCB8IG51bGw+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czxBZ2VudFJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnYWdlbnRzJyxcbiAgICAgIGxvd2VyX2JvdW5kOiBhY2NvdW50LFxuICAgICAgdXBwZXJfYm91bmQ6IGFjY291bnQsXG4gICAgICBsaW1pdDogMSxcbiAgICB9KTtcblxuICAgIGlmIChyZXN1bHQucm93cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnBhcnNlQWdlbnQocmVzdWx0LnJvd3NbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgYWxsIGFnZW50cyB3aXRoIG9wdGlvbmFsIGZpbHRlcnMgYW5kIHBhZ2luYXRpb25cbiAgICogQHJldHVybnMgUGFnaW5hdGVkUmVzdWx0IHdpdGggaXRlbXMsIGhhc01vcmUgZmxhZywgYW5kIG5leHRDdXJzb3IgZm9yIHBhZ2luYXRpb25cbiAgICovXG4gIGFzeW5jIGxpc3RBZ2VudHMob3B0aW9uczogQWdlbnRMaXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxQYWdpbmF0ZWRSZXN1bHQ8QWdlbnQ+PiB7XG4gICAgY29uc3QgeyBsaW1pdCA9IDEwMCwgY3Vyc29yLCBhY3RpdmVfb25seSA9IHRydWUgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czxBZ2VudFJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnYWdlbnRzJyxcbiAgICAgIGxvd2VyX2JvdW5kOiBjdXJzb3IsXG4gICAgICBsaW1pdDogbGltaXQgKyAxLCAvLyBGZXRjaCBvbmUgZXh0cmEgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIG1vcmVcbiAgICB9KTtcblxuICAgIGNvbnN0IGhhc01vcmUgPSByZXN1bHQucm93cy5sZW5ndGggPiBsaW1pdDtcbiAgICBjb25zdCByb3dzID0gaGFzTW9yZSA/IHJlc3VsdC5yb3dzLnNsaWNlKDAsIGxpbWl0KSA6IHJlc3VsdC5yb3dzO1xuICAgIGxldCBhZ2VudHMgPSByb3dzLm1hcCgocm93KSA9PiB0aGlzLnBhcnNlQWdlbnQocm93KSk7XG5cbiAgICAvLyBBcHBseSBmaWx0ZXJzIGFmdGVyIGZldGNoaW5nXG4gICAgaWYgKGFjdGl2ZV9vbmx5KSB7XG4gICAgICBhZ2VudHMgPSBhZ2VudHMuZmlsdGVyKChhKSA9PiBhLmFjdGl2ZSk7XG4gICAgfVxuXG4gICAgLy8gTm90ZTogQWdlbnRzIHVzZSBzeXN0ZW0gc3Rha2luZyAoZW9zaW86OnZvdGVycyksIG5vdCBjb250cmFjdC1tYW5hZ2VkIHN0YWtpbmdcbiAgICAvLyBUbyBmaWx0ZXIgYnkgc3Rha2UsIHF1ZXJ5IHN5c3RlbSBzdGFraW5nIHNlcGFyYXRlbHlcblxuICAgIC8vIEdldCBuZXh0IGN1cnNvciBmcm9tIHRoZSBsYXN0IHJvdyBpZiB0aGVyZSBhcmUgbW9yZVxuICAgIGNvbnN0IG5leHRDdXJzb3IgPSBoYXNNb3JlICYmIHJvd3MubGVuZ3RoID4gMFxuICAgICAgPyByb3dzW3Jvd3MubGVuZ3RoIC0gMV0uYWNjb3VudFxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IGFnZW50cyxcbiAgICAgIGhhc01vcmUsXG4gICAgICBuZXh0Q3Vyc29yLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSB0aHJvdWdoIGFsbCBhZ2VudHMgd2l0aCBhdXRvbWF0aWMgcGFnaW5hdGlvblxuICAgKi9cbiAgYXN5bmMgKmxpc3RBZ2VudHNJdGVyYXRvcihvcHRpb25zOiBPbWl0PEFnZW50TGlzdE9wdGlvbnMsICdjdXJzb3InPiA9IHt9KTogQXN5bmNHZW5lcmF0b3I8QWdlbnQ+IHtcbiAgICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBkbyB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmxpc3RBZ2VudHMoeyAuLi5vcHRpb25zLCBjdXJzb3IgfSk7XG4gICAgICBmb3IgKGNvbnN0IGFnZW50IG9mIHJlc3VsdC5pdGVtcykge1xuICAgICAgICB5aWVsZCBhZ2VudDtcbiAgICAgIH1cbiAgICAgIGN1cnNvciA9IHJlc3VsdC5uZXh0Q3Vyc29yO1xuICAgIH0gd2hpbGUgKGN1cnNvcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcGx1Z2luIGJ5IElEXG4gICAqL1xuICBhc3luYyBnZXRQbHVnaW4oaWQ6IG51bWJlcik6IFByb21pc2U8UGx1Z2luIHwgbnVsbD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPFBsdWdpblJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAncGx1Z2lucycsXG4gICAgICBsb3dlcl9ib3VuZDogU3RyaW5nKGlkKSxcbiAgICAgIHVwcGVyX2JvdW5kOiBTdHJpbmcoaWQpLFxuICAgICAgbGltaXQ6IDEsXG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0LnJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVBsdWdpbihyZXN1bHQucm93c1swXSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBhbGwgcGx1Z2luc1xuICAgKi9cbiAgYXN5bmMgbGlzdFBsdWdpbnMoY2F0ZWdvcnk/OiBQbHVnaW5DYXRlZ29yeSk6IFByb21pc2U8UGx1Z2luW10+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czxQbHVnaW5SYXc+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICB0YWJsZTogJ3BsdWdpbnMnLFxuICAgICAgbGltaXQ6IDEwMDAsXG4gICAgfSk7XG5cbiAgICBsZXQgcGx1Z2lucyA9IHJlc3VsdC5yb3dzLm1hcCgocm93KSA9PiB0aGlzLnBhcnNlUGx1Z2luKHJvdykpO1xuXG4gICAgaWYgKGNhdGVnb3J5KSB7XG4gICAgICBwbHVnaW5zID0gcGx1Z2lucy5maWx0ZXIoKHApID0+IHAuY2F0ZWdvcnkgPT09IGNhdGVnb3J5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGx1Z2lucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGx1Z2lucyBhc3NpZ25lZCB0byBhbiBhZ2VudFxuICAgKi9cbiAgYXN5bmMgZ2V0QWdlbnRQbHVnaW5zKGFjY291bnQ6IHN0cmluZyk6IFByb21pc2U8QWdlbnRQbHVnaW5bXT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPEFnZW50UGx1Z2luUmF3Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdhZ2VudHBsdWdzJyxcbiAgICAgIGluZGV4X3Bvc2l0aW9uOiAyLFxuICAgICAga2V5X3R5cGU6ICduYW1lJyxcbiAgICAgIGxvd2VyX2JvdW5kOiBhY2NvdW50LFxuICAgICAgdXBwZXJfYm91bmQ6IGFjY291bnQsXG4gICAgICBsaW1pdDogMTAwLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzLm1hcCgocm93KSA9PiB0aGlzLnBhcnNlQWdlbnRQbHVnaW4ocm93KSk7XG4gIH1cblxuICAvLyBOb3RlOiBBZ2VudHMgdXNlIHN5c3RlbSBzdGFraW5nIHZpYSBlb3Npbzo6dm90ZXJzIHRhYmxlLCBub3QgY29udHJhY3QtbWFuYWdlZCBzdGFraW5nXG4gIC8vIFRoZXJlIGlzIG5vIHVuc3Rha2VzIHRhYmxlIGluIGFnZW50Y29yZSAtIGFnZW50cyBzdGFrZS91bnN0YWtlIHZpYSBzeXN0ZW0gcmVzb3VyY2VzXG4gIC8vIFVzZSBhZ2VudGNvcmU6OmdldGFnZW50aW5mbyBhY3Rpb24gdG8gcXVlcnkgYW4gYWdlbnQncyBzeXN0ZW0gc3Rha2VcblxuICAvKipcbiAgICogR2V0IHRydXN0IHNjb3JlIGZvciBhbiBhZ2VudCAoMC0xMDApXG4gICAqIENvbWJpbmVzIEtZQyBsZXZlbCwgc3Rha2UsIHJlcHV0YXRpb24sIGFuZCBsb25nZXZpdHlcbiAgICovXG4gIGFzeW5jIGdldFRydXN0U2NvcmUoYWNjb3VudDogc3RyaW5nKTogUHJvbWlzZTxUcnVzdFNjb3JlIHwgbnVsbD4ge1xuICAgIC8vIEdldCBhZ2VudFxuICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgdGhpcy5nZXRBZ2VudChhY2NvdW50KTtcbiAgICBpZiAoIWFnZW50KSByZXR1cm4gbnVsbDtcblxuICAgIC8vIEdldCBhZ2VudCBzY29yZSBmcm9tIGFnZW50ZmVlZFxuICAgIGNvbnN0IGZlZWRDb250cmFjdCA9ICdhZ2VudGZlZWQnOyAvLyBEZWZhdWx0IGZlZWQgY29udHJhY3RcbiAgICBjb25zdCBzY29yZVJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPHtcbiAgICAgIGFnZW50OiBzdHJpbmc7XG4gICAgICB0b3RhbF9zY29yZTogc3RyaW5nO1xuICAgICAgdG90YWxfd2VpZ2h0OiBzdHJpbmc7XG4gICAgICBmZWVkYmFja19jb3VudDogc3RyaW5nO1xuICAgICAgYXZnX3Njb3JlOiBzdHJpbmc7XG4gICAgICBsYXN0X3VwZGF0ZWQ6IHN0cmluZztcbiAgICB9Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogZmVlZENvbnRyYWN0LFxuICAgICAgc2NvcGU6IGZlZWRDb250cmFjdCxcbiAgICAgIHRhYmxlOiAnYWdlbnRzY29yZXMnLFxuICAgICAgbG93ZXJfYm91bmQ6IGFjY291bnQsXG4gICAgICB1cHBlcl9ib3VuZDogYWNjb3VudCxcbiAgICAgIGxpbWl0OiAxLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYWdlbnRTY29yZTogQWdlbnRTY29yZSB8IG51bGwgPSBzY29yZVJlc3VsdC5yb3dzLmxlbmd0aCA+IDBcbiAgICAgID8ge1xuICAgICAgICAgIGFnZW50OiBzY29yZVJlc3VsdC5yb3dzWzBdLmFnZW50LFxuICAgICAgICAgIHRvdGFsX3Njb3JlOiBzYWZlUGFyc2VJbnQoc2NvcmVSZXN1bHQucm93c1swXS50b3RhbF9zY29yZSksXG4gICAgICAgICAgdG90YWxfd2VpZ2h0OiBzYWZlUGFyc2VJbnQoc2NvcmVSZXN1bHQucm93c1swXS50b3RhbF93ZWlnaHQpLFxuICAgICAgICAgIGZlZWRiYWNrX2NvdW50OiBzYWZlUGFyc2VJbnQoc2NvcmVSZXN1bHQucm93c1swXS5mZWVkYmFja19jb3VudCksXG4gICAgICAgICAgYXZnX3Njb3JlOiBzYWZlUGFyc2VJbnQoc2NvcmVSZXN1bHQucm93c1swXS5hdmdfc2NvcmUpLFxuICAgICAgICAgIGxhc3RfdXBkYXRlZDogc2FmZVBhcnNlSW50KHNjb3JlUmVzdWx0LnJvd3NbMF0ubGFzdF91cGRhdGVkKSxcbiAgICAgICAgfVxuICAgICAgOiBudWxsO1xuXG4gICAgLy8gR2V0IEtZQyBsZXZlbCBmcm9tIHRoZSBPV05FUiAobm90IHRoZSBhZ2VudClcbiAgICAvLyBUaGlzIGlzIHRoZSBrZXkgaW5zaWdodDogYWdlbnRzIGluaGVyaXQgdHJ1c3QgZnJvbSB0aGVpciBodW1hbiBzcG9uc29yXG4gICAgbGV0IGt5Y0xldmVsID0gMDtcbiAgICBpZiAoYWdlbnQub3duZXIpIHtcbiAgICAgIGNvbnN0IGt5Y1Jlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPHtcbiAgICAgICAgYWNjOiBzdHJpbmc7XG4gICAgICAgIHZlcmlmaWVkPzogbnVtYmVyO1xuICAgICAgICBreWM6IHVua25vd25bXTtcbiAgICAgIH0+KHtcbiAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgICAgY29kZTogJ2Vvc2lvLnByb3RvbicsXG4gICAgICAgIHNjb3BlOiAnZW9zaW8ucHJvdG9uJyxcbiAgICAgICAgdGFibGU6ICd1c2Vyc2luZm8nLFxuICAgICAgICBsb3dlcl9ib3VuZDogYWdlbnQub3duZXIsXG4gICAgICAgIHVwcGVyX2JvdW5kOiBhZ2VudC5vd25lcixcbiAgICAgICAgbGltaXQ6IDEsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGt5Y1Jlc3VsdC5yb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgcm93ID0ga3ljUmVzdWx0LnJvd3NbMF07XG4gICAgICAgIGNvbnN0IHJhd0t5YyA9IHJvdy5reWM7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJhd0t5YykgJiYgcmF3S3ljLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyBLWUMgZW50cmllcyBjYW4gYmU6XG4gICAgICAgICAgLy8gLSBvYmplY3RzOiB7a3ljX3Byb3ZpZGVyLCBreWNfbGV2ZWwsIGt5Y19kYXRlfSB3aGVyZSBreWNfbGV2ZWwgaXMgYSBjbGFpbXMgc3RyaW5nXG4gICAgICAgICAgLy8gLSBwbGFpbiBudW1iZXJzICh0ZXN0IGVudmlyb25tZW50cylcbiAgICAgICAgICAvLyAtIHBsYWluIHN0cmluZ3NcbiAgICAgICAgICBjb25zdCBsZXZlbHM6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJhd0t5Yykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgbGV2ZWxzLnB1c2goZW50cnkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG51bSA9IHBhcnNlSW50KGVudHJ5LCAxMCk7XG4gICAgICAgICAgICAgIGlmICghaXNOYU4obnVtKSkgbGV2ZWxzLnB1c2gobnVtKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnb2JqZWN0JyAmJiBlbnRyeSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBjb25zdCBrID0gZW50cnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICAgIGNvbnN0IGt5Y0xldmVsID0gay5reWNfbGV2ZWw7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2Yga3ljTGV2ZWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgbGV2ZWxzLnB1c2goa3ljTGV2ZWwpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBreWNMZXZlbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBjbGFpbXMgc3RyaW5nOiBcInRydWxpb286YWRkcmVzcyx0cnVsaW9vOmxhc3RuYW1lLC4uLlwiXG4gICAgICAgICAgICAgICAgLy8gb3IgbnVtZXJpYyBmb3JtYXRzOiBcIjNcIiwgXCJwcm92aWRlcjozXCJcbiAgICAgICAgICAgICAgICBjb25zdCBjbGFpbXMgPSBreWNMZXZlbC5zcGxpdCgnLCcpLmZpbHRlcihzID0+IHMudHJpbSgpLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgICAgIGxldCBmb3VuZE51bWVyaWMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNsYWltIG9mIGNsYWltcykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdHJpbW1lZCA9IGNsYWltLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgIGlmICh0cmltbWVkLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSB0cmltbWVkLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxldmVsID0gcGFyc2VJbnQocGFydHNbcGFydHMubGVuZ3RoIC0gMV0sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihsZXZlbCkgJiYgU3RyaW5nKGxldmVsKSA9PT0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMucHVzaChsZXZlbCk7XG4gICAgICAgICAgICAgICAgICAgICAgZm91bmROdW1lcmljID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGV2ZWwgPSBwYXJzZUludCh0cmltbWVkLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4obGV2ZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzLnB1c2gobGV2ZWwpO1xuICAgICAgICAgICAgICAgICAgICAgIGZvdW5kTnVtZXJpYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSWYgbm8gbnVtZXJpYyBsZXZlbHMgZm91bmQsIGRlcml2ZSBmcm9tIGNsYWltIGNvdW50XG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZE51bWVyaWMgJiYgY2xhaW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGxldmVscy5wdXNoKE1hdGgubWluKE1hdGguY2VpbChjbGFpbXMubGVuZ3RoIC8gMyksIDMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBreWNMZXZlbCA9IGxldmVscy5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4ubGV2ZWxzKSA6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGYWxsYmFjazogaWYgbm8gS1lDIGxldmVsIGV4dHJhY3RlZCBidXQgYWNjb3VudCBpcyB2ZXJpZmllZCwgdXNlIGxldmVsIDFcbiAgICAgICAgaWYgKGt5Y0xldmVsID09PSAwICYmIHJvdy52ZXJpZmllZCA9PT0gMSkge1xuICAgICAgICAgIGt5Y0xldmVsID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCBzeXN0ZW0gc3Rha2UgZnJvbSBlb3Npbzo6dm90ZXJzXG4gICAgY29uc3Qgdm90ZXJzUmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8e1xuICAgICAgb3duZXI6IHN0cmluZztcbiAgICAgIHN0YWtlZDogc3RyaW5nO1xuICAgIH0+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiAnZW9zaW8nLFxuICAgICAgc2NvcGU6ICdlb3NpbycsXG4gICAgICB0YWJsZTogJ3ZvdGVycycsXG4gICAgICBsb3dlcl9ib3VuZDogYWNjb3VudCxcbiAgICAgIHVwcGVyX2JvdW5kOiBhY2NvdW50LFxuICAgICAgbGltaXQ6IDEsXG4gICAgfSk7XG5cbiAgICBsZXQgc3Rha2VBbW91bnQgPSAwO1xuICAgIGlmICh2b3RlcnNSZXN1bHQucm93cy5sZW5ndGggPiAwICYmIHZvdGVyc1Jlc3VsdC5yb3dzWzBdLnN0YWtlZCkge1xuICAgICAgc3Rha2VBbW91bnQgPSBzYWZlUGFyc2VJbnQodm90ZXJzUmVzdWx0LnJvd3NbMF0uc3Rha2VkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsY3VsYXRlVHJ1c3RTY29yZShhZ2VudCwgYWdlbnRTY29yZSwga3ljTGV2ZWwsIHN0YWtlQW1vdW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29udHJhY3QgY29uZmlndXJhdGlvblxuICAgKi9cbiAgYXN5bmMgZ2V0Q29uZmlnKCk6IFByb21pc2U8QWdlbnRDb3JlQ29uZmlnPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8e1xuICAgICAgb3duZXI6IHN0cmluZztcbiAgICAgIG1pbl9zdGFrZTogc3RyaW5nO1xuICAgICAgcmVnaXN0cmF0aW9uX2ZlZTogc3RyaW5nO1xuICAgICAgY2xhaW1fZmVlOiBzdHJpbmc7XG4gICAgICBmZWVkX2NvbnRyYWN0OiBzdHJpbmc7XG4gICAgICB2YWxpZF9jb250cmFjdDogc3RyaW5nO1xuICAgICAgZXNjcm93X2NvbnRyYWN0OiBzdHJpbmc7XG4gICAgICBwYXVzZWQ6IG51bWJlcjtcbiAgICB9Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdjb25maWcnLFxuICAgICAgbGltaXQ6IDEsXG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0LnJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRyYWN0IG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHJvdyA9IHJlc3VsdC5yb3dzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICBvd25lcjogcm93Lm93bmVyLFxuICAgICAgbWluX3N0YWtlOiBzYWZlUGFyc2VJbnQocm93Lm1pbl9zdGFrZSksXG4gICAgICByZWdpc3RyYXRpb25fZmVlOiBzYWZlUGFyc2VJbnQocm93LnJlZ2lzdHJhdGlvbl9mZWUpLFxuICAgICAgY2xhaW1fZmVlOiBzYWZlUGFyc2VJbnQocm93LmNsYWltX2ZlZSksXG4gICAgICBmZWVkX2NvbnRyYWN0OiByb3cuZmVlZF9jb250cmFjdCxcbiAgICAgIHZhbGlkX2NvbnRyYWN0OiByb3cudmFsaWRfY29udHJhY3QsXG4gICAgICBlc2Nyb3dfY29udHJhY3Q6IHJvdy5lc2Nyb3dfY29udHJhY3QsXG4gICAgICBwYXVzZWQ6IHJvdy5wYXVzZWQgPT09IDEsXG4gICAgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09IFdSSVRFIE9QRVJBVElPTlMgPT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBuZXcgYWdlbnRcbiAgICovXG4gIGFzeW5jIHJlZ2lzdGVyKGRhdGE6IFJlZ2lzdGVyQWdlbnREYXRhKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIC8vIFZhbGlkYXRlIGlucHV0IGJlZm9yZSBzZW5kaW5nIHRvIGJsb2NrY2hhaW5cbiAgICB2YWxpZGF0ZUFnZW50RGF0YSh7XG4gICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIGVuZHBvaW50OiBkYXRhLmVuZHBvaW50LFxuICAgICAgcHJvdG9jb2w6IGRhdGEucHJvdG9jb2wsXG4gICAgICBjYXBhYmlsaXRpZXM6IGRhdGEuY2FwYWJpbGl0aWVzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdyZWdpc3RlcicsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGVuZHBvaW50OiBkYXRhLmVuZHBvaW50LFxuICAgICAgICAgICAgcHJvdG9jb2w6IGRhdGEucHJvdG9jb2wsXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IEpTT04uc3RyaW5naWZ5KGRhdGEuY2FwYWJpbGl0aWVzKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIG5ldyBhZ2VudCB3aXRoIHJlZ2lzdHJhdGlvbiBmZWUgaW4gb25lIHRyYW5zYWN0aW9uLlxuICAgKiBTZW5kcyB0aGUgZmVlIGRlcG9zaXQgYW5kIHJlZ2lzdGVycyBpbiBhIHNpbmdsZSB0eC5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBBZ2VudCByZWdpc3RyYXRpb24gZGF0YVxuICAgKiBAcGFyYW0gYW1vdW50IC0gVGhlIHJlZ2lzdHJhdGlvbiBmZWUgKGUuZy4sIFwiMS4wMDAwIFhQUlwiKVxuICAgKi9cbiAgYXN5bmMgcmVnaXN0ZXJXaXRoRmVlKGRhdGE6IFJlZ2lzdGVyQWdlbnREYXRhLCBhbW91bnQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICB2YWxpZGF0ZUFnZW50RGF0YSh7XG4gICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIGVuZHBvaW50OiBkYXRhLmVuZHBvaW50LFxuICAgICAgcHJvdG9jb2w6IGRhdGEucHJvdG9jb2wsXG4gICAgICBjYXBhYmlsaXRpZXM6IGRhdGEuY2FwYWJpbGl0aWVzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYWN0b3IgPSB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3I7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6ICdlb3Npby50b2tlbicsXG4gICAgICAgICAgbmFtZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgICAgYWN0b3IsXG4gICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICB9XSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBmcm9tOiBhY3RvcixcbiAgICAgICAgICAgIHRvOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgICAgcXVhbnRpdHk6IGFtb3VudCxcbiAgICAgICAgICAgIG1lbW86IGByZWdmZWU6JHthY3Rvcn1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdyZWdpc3RlcicsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICAgIGFjdG9yLFxuICAgICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgICAgfV0sXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgYWNjb3VudDogYWN0b3IsXG4gICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGVuZHBvaW50OiBkYXRhLmVuZHBvaW50LFxuICAgICAgICAgICAgcHJvdG9jb2w6IGRhdGEucHJvdG9jb2wsXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IEpTT04uc3RyaW5naWZ5KGRhdGEuY2FwYWJpbGl0aWVzKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYWdlbnQgbWV0YWRhdGFcbiAgICovXG4gIGFzeW5jIHVwZGF0ZShkYXRhOiBVcGRhdGVBZ2VudERhdGEpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgLy8gVmFsaWRhdGUgaW5wdXQgYmVmb3JlIHNlbmRpbmcgdG8gYmxvY2tjaGFpblxuICAgIC8vIE9ubHkgdmFsaWRhdGUgZmllbGRzIHRoYXQgYXJlIHByb3ZpZGVkIChVcGRhdGVBZ2VudERhdGEgaGFzIG9wdGlvbmFsIGZpZWxkcylcbiAgICB2YWxpZGF0ZUFnZW50RGF0YSh7XG4gICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIGVuZHBvaW50OiBkYXRhLmVuZHBvaW50LFxuICAgICAgcHJvdG9jb2w6IGRhdGEucHJvdG9jb2wsXG4gICAgICBjYXBhYmlsaXRpZXM6IGRhdGEuY2FwYWJpbGl0aWVzLFxuICAgIH0pO1xuXG4gICAgLy8gR2V0IGN1cnJlbnQgYWdlbnQgZGF0YSB0byBtZXJnZSB3aXRoIHVwZGF0ZXNcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5nZXRBZ2VudCh0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IpO1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZ2VudCBub3QgZm91bmQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgbmFtZTogJ3VwZGF0ZScsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUgPz8gY3VycmVudC5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuZGVzY3JpcHRpb24gPz8gY3VycmVudC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGVuZHBvaW50OiBkYXRhLmVuZHBvaW50ID8/IGN1cnJlbnQuZW5kcG9pbnQsXG4gICAgICAgICAgICBwcm90b2NvbDogZGF0YS5wcm90b2NvbCA/PyBjdXJyZW50LnByb3RvY29sLFxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiBKU09OLnN0cmluZ2lmeShkYXRhLmNhcGFiaWxpdGllcyA/PyBjdXJyZW50LmNhcGFiaWxpdGllcyksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFnZW50IGFjdGl2ZSBzdGF0dXNcbiAgICovXG4gIGFzeW5jIHNldFN0YXR1cyhhY3RpdmU6IGJvb2xlYW4pOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdzZXRzdGF0dXMnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgYWNjb3VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgYWN0aXZlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT0gU1lTVEVNIFNUQUtJTkcgTk9URSA9PT09PT09PT09PT09PVxuICAvLyBBZ2VudHMgdXNlIFhQUiBOZXR3b3JrJ3MgbmF0aXZlIHN5c3RlbSBzdGFraW5nIChlb3Npbzo6dm90ZXJzIHRhYmxlKVxuICAvLyBpbnN0ZWFkIG9mIGNvbnRyYWN0LW1hbmFnZWQgc3Rha2luZy4gVG8gc3Rha2UvdW5zdGFrZTpcbiAgLy9cbiAgLy8gMS4gU3Rha2U6IFVzZSBzeXN0ZW0gc3Rha2UgYWN0aW9uIG9yIHJlc291cmNlcy54cHJuZXR3b3JrLm9yZ1xuICAvLyAyLiBVbnN0YWtlOiBVc2Ugc3lzdGVtIHVuc3Rha2UgYWN0aW9uXG4gIC8vIDMuIFF1ZXJ5IHN0YWtlOiBDYWxsIGFnZW50Y29yZTo6Z2V0YWdlbnRpbmZvIGFjdGlvbiBvciBxdWVyeSBlb3Npbzo6dm90ZXJzIHRhYmxlXG4gIC8vXG4gIC8vIFRoaXMgZGVzaWduIGxldmVyYWdlcyB0aGUgZXhpc3Rpbmcgc3Rha2luZyBpbmZyYXN0cnVjdHVyZSBhbmQgYWxsb3dzXG4gIC8vIGFnZW50cyB0byBlYXJuIHN0YWtpbmcgcmV3YXJkcyB3aGlsZSBtZWV0aW5nIG1pbmltdW0gc3Rha2UgcmVxdWlyZW1lbnRzLlxuXG4gIC8qKlxuICAgKiBBZGQgcGx1Z2luIHRvIGFnZW50XG4gICAqL1xuICBhc3luYyBhZGRQbHVnaW4ocGx1Z2luSWQ6IG51bWJlciwgY29uZmlnOiBvYmplY3QgPSB7fSk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgbmFtZTogJ2FkZHBsdWdpbicsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgcGx1Z2luX2lkOiBwbHVnaW5JZCxcbiAgICAgICAgICAgIHBsdWdpbkNvbmZpZzogSlNPTi5zdHJpbmdpZnkoY29uZmlnKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgcGx1Z2luIGZyb20gYWdlbnRcbiAgICovXG4gIGFzeW5jIHJlbW92ZVBsdWdpbihhZ2VudFBsdWdpbklkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdybXBsdWdpbicsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgYWdlbnRwbHVnaW5faWQ6IGFnZW50UGx1Z2luSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBuZXcgcGx1Z2luXG4gICAqL1xuICBhc3luYyByZWdpc3RlclBsdWdpbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGNvbnRyYWN0OiBzdHJpbmcsXG4gICAgYWN0aW9uOiBzdHJpbmcsXG4gICAgc2NoZW1hOiBvYmplY3QsXG4gICAgY2F0ZWdvcnk6IFBsdWdpbkNhdGVnb3J5XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgbmFtZTogJ3JlZ3BsdWdpbicsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhdXRob3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgY29udHJhY3QsXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBzY2hlbWE6IEpTT04uc3RyaW5naWZ5KHNjaGVtYSksXG4gICAgICAgICAgICBjYXRlZ29yeSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09IE9XTkVSU0hJUCA9PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTdGVwIDE6IEFnZW50IGFwcHJvdmVzIGEgaHVtYW4gdG8gY2xhaW0gdGhlbS5cbiAgICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIEFHRU5UIHRvIGdpdmUgY29uc2VudC5cbiAgICpcbiAgICogQHBhcmFtIG5ld093bmVyIC0gVGhlIEtZQydkIGh1bWFuIGJlaW5nIGFwcHJvdmVkIHRvIGNsYWltXG4gICAqL1xuICBhc3luYyBhcHByb3ZlQ2xhaW0obmV3T3duZXI6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICAvLyBUaGUgc2Vzc2lvbiBob2xkZXIgSVMgdGhlIGFnZW50IGdpdmluZyBjb25zZW50XG4gICAgY29uc3QgYWdlbnQgPSB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3I7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgbmFtZTogJ2FwcHJvdmVjbGFpbScsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogYWdlbnQsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgbmV3X293bmVyOiBuZXdPd25lcixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIDI6IEh1bWFuIGNvbXBsZXRlcyB0aGUgY2xhaW0gYWZ0ZXIgYWdlbnQgYXBwcm92YWwuXG4gICAqIEFnZW50IG11c3QgaGF2ZSBjYWxsZWQgYXBwcm92ZUNsYWltIGZpcnN0LlxuICAgKlxuICAgKiBJTVBPUlRBTlQ6IEJlZm9yZSBjYWxsaW5nIHRoaXMsIHlvdSBtdXN0OlxuICAgKiAxLiBIYXZlIHRoZSBhZ2VudCBjYWxsIGFwcHJvdmVDbGFpbSh5b3VyQWNjb3VudClcbiAgICogMi4gU2VuZCB0aGUgY2xhaW0gZmVlIHdpdGggbWVtbyBcImNsYWltOmFnZW50bmFtZTp5b3VybmFtZVwiXG4gICAqXG4gICAqIEBwYXJhbSBhZ2VudCAtIFRoZSBhZ2VudCBhY2NvdW50IHRvIGNsYWltXG4gICAqL1xuICBhc3luYyBjbGFpbShhZ2VudDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIGNvbnN0IG93bmVyID0gdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdjbGFpbScsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3Rvcjogb3duZXIsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgY2xhaW0gZmVlIGFuZCBjb21wbGV0ZSB0aGUgY2xhaW0gaW4gb25lIHRyYW5zYWN0aW9uLlxuICAgKiBBZ2VudCBtdXN0IGhhdmUgYWxyZWFkeSBjYWxsZWQgYXBwcm92ZUNsYWltIGZpcnN0LlxuICAgKlxuICAgKiBAcGFyYW0gYWdlbnQgLSBUaGUgYWdlbnQgYWNjb3VudCB0byBjbGFpbVxuICAgKiBAcGFyYW0gYW1vdW50IC0gVGhlIGNsYWltIGZlZSBhbW91bnQgKGUuZy4sIFwiMS4wMDAwIFhQUlwiKVxuICAgKi9cbiAgYXN5bmMgY2xhaW1XaXRoRmVlKGFnZW50OiBzdHJpbmcsIGFtb3VudDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIGNvbnN0IG93bmVyID0gdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiAnZW9zaW8udG9rZW4nLFxuICAgICAgICAgIG5hbWU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3Rvcjogb3duZXIsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGZyb206IG93bmVyLFxuICAgICAgICAgICAgdG86IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgICBxdWFudGl0eTogYW1vdW50LFxuICAgICAgICAgICAgbWVtbzogYGNsYWltOiR7YWdlbnR9OiR7b3duZXJ9YCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgICBuYW1lOiAnY2xhaW0nLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWN0b3I6IG93bmVyLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgYSBwZW5kaW5nIGNsYWltIGFwcHJvdmFsLlxuICAgKiBPbmx5IHRoZSBhZ2VudCBjYW4gY2FuY2VsIHRoZWlyIG93biBhcHByb3ZhbC5cbiAgICogQW55IGRlcG9zaXQgd2lsbCBiZSByZWZ1bmRlZCB0byB0aGUgcGF5ZXIuXG4gICAqXG4gICAqIE5PVEU6IFRoZSBzZXNzaW9uIGhvbGRlciBtdXN0IGJlIHRoZSBhZ2VudCBhY2NvdW50LlxuICAgKi9cbiAgYXN5bmMgY2FuY2VsQ2xhaW0oKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIGNvbnN0IGFnZW50ID0gdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdjYW5jZWxjbGFpbScsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3RvcjogYWdlbnQsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZmVyIG93bmVyc2hpcCBvZiBhbiBhZ2VudCB0byBhIG5ldyBvd25lci5cbiAgICpcbiAgICogSU1QT1JUQU5UOiBUaGUgY29udHJhY3QgcmVxdWlyZXMgVEhSRUUgc2lnbmF0dXJlczpcbiAgICogMS4gQ3VycmVudCBvd25lciAobXVzdCBhdXRob3JpemUpXG4gICAqIDIuIE5ldyBvd25lciAobXVzdCBhdXRob3JpemUpXG4gICAqIDMuIEFnZW50IGl0c2VsZiAobXVzdCBjb25zZW50IHRvIHRoZSB0cmFuc2ZlcilcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaW5jbHVkZXMgb25seSB0aGUgc2Vzc2lvbiBob2xkZXIncyBhdXRob3JpemF0aW9uLlxuICAgKiBJdCB3aWxsIEZBSUwgdW5sZXNzIHRoZSBzZXNzaW9uIGhvbGRlciBjb250cm9scyBhbGwgdGhyZWUgYWNjb3VudHMsXG4gICAqIHdoaWNoIGlzIHJhcmUgaW4gcHJhY3RpY2UuXG4gICAqXG4gICAqIEZvciBtb3N0IHVzZSBjYXNlcywgdXNlIGBidWlsZFRyYW5zZmVyUHJvcG9zYWwoKWAgdG8gY3JlYXRlIGEgbXVsdGktc2lnXG4gICAqIHByb3Bvc2FsIHRoYXQgY2FuIGJlIHNpZ25lZCBieSBhbGwgdGhyZWUgcGFydGllcy5cbiAgICpcbiAgICogQHBhcmFtIGFnZW50IC0gVGhlIGFnZW50IGFjY291bnRcbiAgICogQHBhcmFtIG5ld093bmVyIC0gVGhlIG5ldyBvd25lciAobXVzdCBoYXZlIEtZQylcbiAgICogQHRocm93cyBXaWxsIGZhaWwgaWYgc2Vzc2lvbiBob2xkZXIgZG9lc24ndCBjb250cm9sIGFsbCAzIHJlcXVpcmVkIGFjY291bnRzXG4gICAqL1xuICBhc3luYyB0cmFuc2Zlck93bmVyc2hpcChhZ2VudDogc3RyaW5nLCBuZXdPd25lcjogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIC8vIFAyIEZJWDogV2FybiBhYm91dCB0aGUgdGhyZWUtc2lnbmF0dXJlIHJlcXVpcmVtZW50XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ3RyYW5zZmVyT3duZXJzaGlwIHJlcXVpcmVzIDMgc2lnbmF0dXJlcyAoY3VycmVudCBvd25lciwgbmV3IG93bmVyLCBhZ2VudCkuICcgK1xuICAgICAgJ1RoaXMgd2lsbCBmYWlsIHVubGVzcyBzZXNzaW9uIGNvbnRyb2xzIGFsbCBhY2NvdW50cy4gVXNlIGJ1aWxkVHJhbnNmZXJQcm9wb3NhbCgpIGZvciBtdWx0aS1zaWcuJ1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgbmFtZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgbmV3X293bmVyOiBuZXdPd25lcixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIHRyYW5zZmVyIG93bmVyc2hpcCBhY3Rpb24gZm9yIHVzZSBpbiBhIG11bHRpLXNpZyBwcm9wb3NhbC5cbiAgICogUmV0dXJucyB0aGUgYWN0aW9uIGRhdGEgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIG1zaWcucHJvcG9zZS5cbiAgICpcbiAgICogVGhlIHRyYW5zZmVyIHJlcXVpcmVzIHNpZ25hdHVyZXMgZnJvbTpcbiAgICogMS4gQ3VycmVudCBvd25lclxuICAgKiAyLiBOZXcgb3duZXJcbiAgICogMy4gQWdlbnQgaXRzZWxmXG4gICAqXG4gICAqIEBwYXJhbSBhZ2VudCAtIFRoZSBhZ2VudCBhY2NvdW50XG4gICAqIEBwYXJhbSBjdXJyZW50T3duZXIgLSBUaGUgY3VycmVudCBvd25lciBhY2NvdW50XG4gICAqIEBwYXJhbSBuZXdPd25lciAtIFRoZSBuZXcgb3duZXIgYWNjb3VudCAobXVzdCBoYXZlIEtZQylcbiAgICogQHJldHVybnMgQWN0aW9uIGRhdGEgZm9yIG11bHRpLXNpZyBwcm9wb3NhbFxuICAgKi9cbiAgYnVpbGRUcmFuc2ZlclByb3Bvc2FsKGFnZW50OiBzdHJpbmcsIGN1cnJlbnRPd25lcjogc3RyaW5nLCBuZXdPd25lcjogc3RyaW5nKToge1xuICAgIGFjY291bnQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYXV0aG9yaXphdGlvbjogQXJyYXk8eyBhY3Rvcjogc3RyaW5nOyBwZXJtaXNzaW9uOiBzdHJpbmcgfT47XG4gICAgZGF0YTogeyBhZ2VudDogc3RyaW5nOyBuZXdfb3duZXI6IHN0cmluZyB9O1xuICB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgIG5hbWU6ICd0cmFuc2ZlcicsXG4gICAgICBhdXRob3JpemF0aW9uOiBbXG4gICAgICAgIHsgYWN0b3I6IGN1cnJlbnRPd25lciwgcGVybWlzc2lvbjogJ2FjdGl2ZScgfSxcbiAgICAgICAgeyBhY3RvcjogbmV3T3duZXIsIHBlcm1pc3Npb246ICdhY3RpdmUnIH0sXG4gICAgICAgIHsgYWN0b3I6IGFnZW50LCBwZXJtaXNzaW9uOiAnYWN0aXZlJyB9LFxuICAgICAgXSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgYWdlbnQsXG4gICAgICAgIG5ld19vd25lcjogbmV3T3duZXIsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZSBvd25lcnNoaXAgb2YgYW4gYWdlbnQuXG4gICAqIE9ubHkgdGhlIGN1cnJlbnQgb3duZXIgY2FuIHJlbGVhc2UuXG4gICAqIENsYWltIGRlcG9zaXQgaXMgcmVmdW5kZWQgdG8gdGhlIG93bmVyLlxuICAgKlxuICAgKiBAcGFyYW0gYWdlbnQgLSBUaGUgYWdlbnQgYWNjb3VudCB0byByZWxlYXNlXG4gICAqL1xuICBhc3luYyByZWxlYXNlKGFnZW50OiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIG5hbWU6ICdyZWxlYXNlJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSBhbiBhZ2VudCdzIG93bmVyIHN0aWxsIGhhcyB2YWxpZCBLWUMuXG4gICAqIEFueW9uZSBjYW4gY2FsbCB0aGlzIHRvIHRyaWdnZXIgcmUtdmVyaWZpY2F0aW9uLlxuICAgKlxuICAgKiBJZiB0aGUgb3duZXIncyBLWUMgaGFzIGRyb3BwZWQgYmVsb3cgbGV2ZWwgMSwgdGhlIG93bmVyc2hpcFxuICAgKiBpcyByZW1vdmVkIGFuZCB0aGUgY2xhaW0gZGVwb3NpdCBpcyByZWZ1bmRlZCB0byB0aGUgZm9ybWVyIG93bmVyLlxuICAgKlxuICAgKiBUaGlzIGhlbHBzIG1haW50YWluIHRydXN0IHNjb3JlIGludGVncml0eSBieSBhbGxvd2luZyBjb21tdW5pdHlcbiAgICogZW5mb3JjZW1lbnQgb2YgS1lDIHJlcXVpcmVtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGFnZW50IC0gVGhlIGFnZW50IGFjY291bnQgdG8gdmVyaWZ5XG4gICAqL1xuICBhc3luYyB2ZXJpZnlDbGFpbShhZ2VudDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgICBuYW1lOiAndmVyaWZ5Y2xhaW0nLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFnZW50cyBvd25lZCBieSBhIHNwZWNpZmljIGFjY291bnRcbiAgICovXG4gIGFzeW5jIGdldEFnZW50c0J5T3duZXIob3duZXI6IHN0cmluZywgbGltaXQ6IG51bWJlciA9IDEwMCk6IFByb21pc2U8QWdlbnRbXT4ge1xuICAgIC8vIFVzZSBzZWNvbmRhcnkgaW5kZXggdG8gcXVlcnkgYnkgb3duZXJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czxBZ2VudFJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnYWdlbnRzJyxcbiAgICAgIGluZGV4X3Bvc2l0aW9uOiAyLCAvLyBieU93bmVyIHNlY29uZGFyeSBpbmRleFxuICAgICAga2V5X3R5cGU6ICduYW1lJyxcbiAgICAgIGxvd2VyX2JvdW5kOiBvd25lcixcbiAgICAgIHVwcGVyX2JvdW5kOiBvd25lcixcbiAgICAgIGxpbWl0LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzLm1hcCgocm93KSA9PiB0aGlzLnBhcnNlQWdlbnQocm93KSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PSBIRUxQRVJTID09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSByZXF1aXJlU2Vzc2lvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2Vzc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXNzaW9uIHJlcXVpcmVkIGZvciB3cml0ZSBvcGVyYXRpb25zJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUFnZW50KHJhdzogQWdlbnRSYXcpOiBBZ2VudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY291bnQ6IHJhdy5hY2NvdW50LFxuICAgICAgb3duZXI6IHJhdy5vd25lciB8fCBudWxsLCAgLy8gRW1wdHkgc3RyaW5nIG1lYW5zIG5vIG93bmVyXG4gICAgICBwZW5kaW5nX293bmVyOiByYXcucGVuZGluZ19vd25lciB8fCBudWxsLFxuICAgICAgbmFtZTogcmF3Lm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcmF3LmRlc2NyaXB0aW9uLFxuICAgICAgZW5kcG9pbnQ6IHJhdy5lbmRwb2ludCxcbiAgICAgIHByb3RvY29sOiByYXcucHJvdG9jb2wsXG4gICAgICBjYXBhYmlsaXRpZXM6IHBhcnNlQ2FwYWJpbGl0aWVzKHJhdy5jYXBhYmlsaXRpZXMpLFxuICAgICAgdG90YWxfam9iczogc2FmZVBhcnNlSW50KHJhdy50b3RhbF9qb2JzKSxcbiAgICAgIHJlZ2lzdGVyZWRfYXQ6IHNhZmVQYXJzZUludChyYXcucmVnaXN0ZXJlZF9hdCksXG4gICAgICBhY3RpdmU6IHJhdy5hY3RpdmUgPT09IDEsXG4gICAgICBjbGFpbV9kZXBvc2l0OiBzYWZlUGFyc2VJbnQocmF3LmNsYWltX2RlcG9zaXQpLFxuICAgICAgZGVwb3NpdF9wYXllcjogcmF3LmRlcG9zaXRfcGF5ZXIgfHwgbnVsbCxcbiAgICAgIC8vIE5vdGU6IHN0YWtlIGlzIHF1ZXJpZWQgZnJvbSBzeXN0ZW0gc3Rha2luZyAoZW9zaW86OnZvdGVycyksIG5vdCBzdG9yZWQgaGVyZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUGx1Z2luKHJhdzogUGx1Z2luUmF3KTogUGx1Z2luIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNhZmVQYXJzZUludChyYXcuaWQpLFxuICAgICAgbmFtZTogcmF3Lm5hbWUsXG4gICAgICB2ZXJzaW9uOiByYXcudmVyc2lvbixcbiAgICAgIGNvbnRyYWN0OiByYXcuY29udHJhY3QsXG4gICAgICBhY3Rpb246IHJhdy5hY3Rpb24sXG4gICAgICBzY2hlbWE6IHNhZmVKc29uUGFyc2UocmF3LnNjaGVtYSwge30pLFxuICAgICAgY2F0ZWdvcnk6IHJhdy5jYXRlZ29yeSBhcyBQbHVnaW5DYXRlZ29yeSxcbiAgICAgIGF1dGhvcjogcmF3LmF1dGhvcixcbiAgICAgIHZlcmlmaWVkOiByYXcudmVyaWZpZWQgPT09IDEsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VBZ2VudFBsdWdpbihyYXc6IEFnZW50UGx1Z2luUmF3KTogQWdlbnRQbHVnaW4ge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogc2FmZVBhcnNlSW50KHJhdy5pZCksXG4gICAgICBhZ2VudDogcmF3LmFnZW50LFxuICAgICAgcGx1Z2luX2lkOiBzYWZlUGFyc2VJbnQocmF3LnBsdWdpbl9pZCksXG4gICAgICBjb25maWc6IHNhZmVKc29uUGFyc2UocmF3LmNvbmZpZywge30pLFxuICAgICAgZW5hYmxlZDogcmF3LmVuYWJsZWQgPT09IDEsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -217,6 +217,10 @@ export declare class EscrowRegistry {
217
217
  * List open jobs (agent not assigned)
218
218
  */
219
219
  listOpenJobs(options?: JobListOptions): Promise<PaginatedResult<Job>>;
220
+ /**
221
+ * Get evidence URI for a delivered job (stored in separate jobevidence table)
222
+ */
223
+ getJobEvidence(jobId: number): Promise<string | null>;
220
224
  /**
221
225
  * List bids for a job
222
226
  */
@@ -449,28 +449,60 @@ class EscrowRegistry {
449
449
  */
450
450
  async listOpenJobs(options = {}) {
451
451
  const { limit = 100, cursor } = options;
452
+ // Open jobs are sparse in the table — we must paginate through all rows
453
+ // to find enough open jobs (agent is empty), not just fetch `limit` rows.
454
+ const BATCH_SIZE = 100;
455
+ let lowerBound = cursor;
456
+ let openJobs = [];
457
+ let tableHasMore = true;
458
+ while (openJobs.length < limit && tableHasMore) {
459
+ const result = await this.rpc.get_table_rows({
460
+ json: true,
461
+ code: this.contract,
462
+ scope: this.contract,
463
+ table: 'jobs',
464
+ lower_bound: lowerBound,
465
+ limit: BATCH_SIZE,
466
+ });
467
+ if (result.rows.length === 0) {
468
+ tableHasMore = false;
469
+ break;
470
+ }
471
+ tableHasMore = result.rows.length === BATCH_SIZE;
472
+ lowerBound = result.rows[result.rows.length - 1].id + 1;
473
+ let batch = result.rows
474
+ .filter(row => row.agent === '' || row.agent === '.............')
475
+ .map(row => this.parseJob(row));
476
+ if (options.state) {
477
+ batch = batch.filter(j => j.state === options.state);
478
+ }
479
+ openJobs.push(...batch);
480
+ }
481
+ const hasMore = openJobs.length > limit || tableHasMore;
482
+ const items = openJobs.slice(0, limit);
483
+ return {
484
+ items,
485
+ hasMore,
486
+ nextCursor: hasMore && items.length > 0 ? String(items[items.length - 1].id + 1) : undefined,
487
+ };
488
+ }
489
+ /**
490
+ * Get evidence URI for a delivered job (stored in separate jobevidence table)
491
+ */
492
+ async getJobEvidence(jobId) {
452
493
  const result = await this.rpc.get_table_rows({
453
494
  json: true,
454
495
  code: this.contract,
455
496
  scope: this.contract,
456
- table: 'jobs',
457
- lower_bound: cursor,
458
- limit: limit + 1,
497
+ table: 'jobevidence',
498
+ lower_bound: String(jobId),
499
+ upper_bound: String(jobId),
500
+ limit: 1,
459
501
  });
460
- const hasMore = result.rows.length > limit;
461
- const rows = hasMore ? result.rows.slice(0, limit) : result.rows;
462
- // Open jobs have empty agent name
463
- let jobs = rows
464
- .filter(row => row.agent === '' || row.agent === '.............')
465
- .map(row => this.parseJob(row));
466
- if (options.state) {
467
- jobs = jobs.filter(j => j.state === options.state);
502
+ if (result.rows.length > 0) {
503
+ return result.rows[0].evidence_uri;
468
504
  }
469
- return {
470
- items: jobs,
471
- hasMore,
472
- nextCursor: hasMore && rows.length > 0 ? rows[rows.length - 1].id : undefined,
473
- };
505
+ return null;
474
506
  }
475
507
  /**
476
508
  * List bids for a job
@@ -866,4 +898,4 @@ class EscrowRegistry {
866
898
  }
867
899
  }
868
900
  exports.EscrowRegistry = EscrowRegistry;
869
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXNjcm93UmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRXNjcm93UmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsbUNBQXVDO0FBaUt2QywrQ0FBK0M7QUFFL0MsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7QUFDdkMsTUFBTSxVQUFVLEdBQWU7SUFDN0IsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWTtJQUM3QyxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsWUFBWTtDQUMvRCxDQUFDO0FBQ0YsTUFBTSxnQkFBZ0IsR0FBcUIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM1RixNQUFNLG1CQUFtQixHQUF3QixDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRW5HLE1BQWEsY0FBYztJQUt6QixZQUFZLEdBQVksRUFBRSxPQUF1QixFQUFFLFFBQWlCO1FBQ2xFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLGdCQUFnQixDQUFDO0lBQy9DLENBQUM7SUFFRCxnREFBZ0Q7SUFFaEQ7O09BRUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQVU7UUFDckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBUztZQUNuRCxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDcEIsS0FBSyxFQUFFLE1BQU07WUFDYixXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN2QixX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RU8sUUFBUSxDQUFDLEdBQVc7UUFDMUIsT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDaEMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1lBQ2hCLE1BQU0sRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUNoQyxRQUFRLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDcEMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1lBQ3RCLFVBQVUsRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztTQUN6QyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBLzhCRCx3Q0ErOEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSnNvblJwYyxcbiAgUHJvdG9uU2Vzc2lvbixcbiAgVHJhbnNhY3Rpb25SZXN1bHQsXG4gIFBhZ2luYXRlZFJlc3VsdCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBzYWZlUGFyc2VJbnQgfSBmcm9tICcuL3V0aWxzJztcblxuLy8gPT09PT09PT09PT09PT0gRXNjcm93IFR5cGVzID09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgSm9iIHtcbiAgaWQ6IG51bWJlcjtcbiAgY2xpZW50OiBzdHJpbmc7XG4gIGFnZW50OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGRlbGl2ZXJhYmxlczogc3RyaW5nW107XG4gIGFtb3VudDogbnVtYmVyO1xuICBzeW1ib2w6IHN0cmluZztcbiAgZnVuZGVkX2Ftb3VudDogbnVtYmVyO1xuICByZWxlYXNlZF9hbW91bnQ6IG51bWJlcjtcbiAgc3RhdGU6IEpvYlN0YXRlO1xuICBkZWFkbGluZTogbnVtYmVyO1xuICBhcmJpdHJhdG9yOiBzdHJpbmc7XG4gIGpvYl9oYXNoOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IG51bWJlcjtcbiAgdXBkYXRlZF9hdDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpvYlJhdyB7XG4gIGlkOiBzdHJpbmc7XG4gIGNsaWVudDogc3RyaW5nO1xuICBhZ2VudDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBkZWxpdmVyYWJsZXM6IHN0cmluZztcbiAgYW1vdW50OiBzdHJpbmc7XG4gIHN5bWJvbDogc3RyaW5nO1xuICBmdW5kZWRfYW1vdW50OiBzdHJpbmc7XG4gIHJlbGVhc2VkX2Ftb3VudDogc3RyaW5nO1xuICBzdGF0ZTogbnVtYmVyO1xuICBkZWFkbGluZTogc3RyaW5nO1xuICBhcmJpdHJhdG9yOiBzdHJpbmc7XG4gIGpvYl9oYXNoOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgdXBkYXRlZF9hdDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBKb2JTdGF0ZSA9XG4gIHwgJ2NyZWF0ZWQnXG4gIHwgJ2Z1bmRlZCdcbiAgfCAnYWNjZXB0ZWQnXG4gIHwgJ2lucHJvZ3Jlc3MnXG4gIHwgJ2RlbGl2ZXJlZCdcbiAgfCAnZGlzcHV0ZWQnXG4gIHwgJ2NvbXBsZXRlZCdcbiAgfCAncmVmdW5kZWQnXG4gIHwgJ2FyYml0cmF0ZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1pbGVzdG9uZSB7XG4gIGlkOiBudW1iZXI7XG4gIGpvYl9pZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgb3JkZXI6IG51bWJlcjtcbiAgc3RhdGU6IE1pbGVzdG9uZVN0YXRlO1xuICBldmlkZW5jZV91cmk6IHN0cmluZztcbiAgc3VibWl0dGVkX2F0OiBudW1iZXI7XG4gIGFwcHJvdmVkX2F0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlsZXN0b25lUmF3IHtcbiAgaWQ6IHN0cmluZztcbiAgam9iX2lkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICBvcmRlcjogbnVtYmVyO1xuICBzdGF0ZTogbnVtYmVyO1xuICBldmlkZW5jZV91cmk6IHN0cmluZztcbiAgc3VibWl0dGVkX2F0OiBzdHJpbmc7XG4gIGFwcHJvdmVkX2F0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1pbGVzdG9uZVN0YXRlID0gJ3BlbmRpbmcnIHwgJ3N1Ym1pdHRlZCcgfCAnYXBwcm92ZWQnIHwgJ2Rpc3B1dGVkJztcblxuZXhwb3J0IGludGVyZmFjZSBFc2Nyb3dEaXNwdXRlIHtcbiAgaWQ6IG51bWJlcjtcbiAgam9iX2lkOiBudW1iZXI7XG4gIHJhaXNlZF9ieTogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgZXZpZGVuY2VfdXJpOiBzdHJpbmc7XG4gIGNsaWVudF9hbW91bnQ6IG51bWJlcjtcbiAgYWdlbnRfYW1vdW50OiBudW1iZXI7XG4gIHJlc29sdXRpb246IERpc3B1dGVSZXNvbHV0aW9uO1xuICByZXNvbHZlcjogc3RyaW5nO1xuICByZXNvbHV0aW9uX25vdGVzOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IG51bWJlcjtcbiAgcmVzb2x2ZWRfYXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRGlzcHV0ZVJlc29sdXRpb24gPSAncGVuZGluZycgfCAnY2xpZW50X3dpbnMnIHwgJ2FnZW50X3dpbnMnIHwgJ3NwbGl0JztcblxuZXhwb3J0IGludGVyZmFjZSBBcmJpdHJhdG9yIHtcbiAgYWNjb3VudDogc3RyaW5nO1xuICBzdGFrZTogbnVtYmVyO1xuICBmZWVfcGVyY2VudDogbnVtYmVyO1xuICB0b3RhbF9jYXNlczogbnVtYmVyO1xuICBzdWNjZXNzZnVsX2Nhc2VzOiBudW1iZXI7XG4gIGFjdGl2ZV9kaXNwdXRlczogbnVtYmVyO1xuICBhY3RpdmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmlkIHtcbiAgaWQ6IG51bWJlcjtcbiAgam9iX2lkOiBudW1iZXI7XG4gIGFnZW50OiBzdHJpbmc7XG4gIGFtb3VudDogbnVtYmVyO1xuICB0aW1lbGluZTogbnVtYmVyO1xuICBwcm9wb3NhbDogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmlkUmF3IHtcbiAgaWQ6IHN0cmluZztcbiAgam9iX2lkOiBzdHJpbmc7XG4gIGFnZW50OiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICB0aW1lbGluZTogc3RyaW5nO1xuICBwcm9wb3NhbDogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSm9iRGF0YSB7XG4gIGFnZW50Pzogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBkZWxpdmVyYWJsZXM6IHN0cmluZ1tdO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgc3ltYm9sPzogc3RyaW5nO1xuICBkZWFkbGluZT86IG51bWJlcjtcbiAgYXJiaXRyYXRvcj86IHN0cmluZztcbiAgam9iX2hhc2g/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VibWl0QmlkRGF0YSB7XG4gIGpvYl9pZDogbnVtYmVyO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgdGltZWxpbmU6IG51bWJlcjtcbiAgcHJvcG9zYWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRNaWxlc3RvbmVEYXRhIHtcbiAgam9iX2lkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFtb3VudDogbnVtYmVyO1xuICBvcmRlcjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpvYkxpc3RPcHRpb25zIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIGN1cnNvcj86IHN0cmluZztcbiAgc3RhdGU/OiBKb2JTdGF0ZTtcbn1cblxuLy8gPT09PT09PT09PT09PT0gUmVnaXN0cnkgQ2xhc3MgPT09PT09PT09PT09PT1cblxuY29uc3QgREVGQVVMVF9DT05UUkFDVCA9ICdhZ2VudGVzY3Jvdyc7XG5jb25zdCBKT0JfU1RBVEVTOiBKb2JTdGF0ZVtdID0gW1xuICAnY3JlYXRlZCcsICdmdW5kZWQnLCAnYWNjZXB0ZWQnLCAnaW5wcm9ncmVzcycsXG4gICdkZWxpdmVyZWQnLCAnZGlzcHV0ZWQnLCAnY29tcGxldGVkJywgJ3JlZnVuZGVkJywgJ2FyYml0cmF0ZWQnXG5dO1xuY29uc3QgTUlMRVNUT05FX1NUQVRFUzogTWlsZXN0b25lU3RhdGVbXSA9IFsncGVuZGluZycsICdzdWJtaXR0ZWQnLCAnYXBwcm92ZWQnLCAnZGlzcHV0ZWQnXTtcbmNvbnN0IERJU1BVVEVfUkVTT0xVVElPTlM6IERpc3B1dGVSZXNvbHV0aW9uW10gPSBbJ3BlbmRpbmcnLCAnY2xpZW50X3dpbnMnLCAnYWdlbnRfd2lucycsICdzcGxpdCddO1xuXG5leHBvcnQgY2xhc3MgRXNjcm93UmVnaXN0cnkge1xuICBwcml2YXRlIHJwYzogSnNvblJwYztcbiAgcHJpdmF0ZSBzZXNzaW9uOiBQcm90b25TZXNzaW9uIHwgbnVsbDtcbiAgcHJpdmF0ZSBjb250cmFjdDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHJwYzogSnNvblJwYywgc2Vzc2lvbj86IFByb3RvblNlc3Npb24sIGNvbnRyYWN0Pzogc3RyaW5nKSB7XG4gICAgdGhpcy5ycGMgPSBycGM7XG4gICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbiB8fCBudWxsO1xuICAgIHRoaXMuY29udHJhY3QgPSBjb250cmFjdCB8fCBERUZBVUxUX0NPTlRSQUNUO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT0gUkVBRCBPUEVSQVRJT05TID09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldCBhIGpvYiBieSBJRFxuICAgKi9cbiAgYXN5bmMgZ2V0Sm9iKGlkOiBudW1iZXIpOiBQcm9taXNlPEpvYiB8IG51bGw+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czxKb2JSYXc+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICB0YWJsZTogJ2pvYnMnLFxuICAgICAgbG93ZXJfYm91bmQ6IFN0cmluZyhpZCksXG4gICAgICB1cHBlcl9ib3VuZDogU3RyaW5nKGlkKSxcbiAgICAgIGxpbWl0OiAxLFxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdC5yb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VKb2IocmVzdWx0LnJvd3NbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgam9icyBmb3IgYSBjbGllbnRcbiAgICovXG4gIGFzeW5jIGxpc3RKb2JzQnlDbGllbnQoY2xpZW50OiBzdHJpbmcsIG9wdGlvbnM6IEpvYkxpc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFBhZ2luYXRlZFJlc3VsdDxKb2I+PiB7XG4gICAgY29uc3QgeyBsaW1pdCA9IDEwMCwgY3Vyc29yIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8Sm9iUmF3Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdqb2JzJyxcbiAgICAgIGluZGV4X3Bvc2l0aW9uOiAyLCAvLyBieUNsaWVudCBpbmRleFxuICAgICAga2V5X3R5cGU6ICdpNjQnLFxuICAgICAgbG93ZXJfYm91bmQ6IGN1cnNvcixcbiAgICAgIGxpbWl0OiBsaW1pdCArIDEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYXNNb3JlID0gcmVzdWx0LnJvd3MubGVuZ3RoID4gbGltaXQ7XG4gICAgY29uc3Qgcm93cyA9IGhhc01vcmUgPyByZXN1bHQucm93cy5zbGljZSgwLCBsaW1pdCkgOiByZXN1bHQucm93cztcbiAgICBsZXQgam9icyA9IHJvd3NcbiAgICAgIC5maWx0ZXIocm93ID0+IHJvdy5jbGllbnQgPT09IGNsaWVudClcbiAgICAgIC5tYXAocm93ID0+IHRoaXMucGFyc2VKb2Iocm93KSk7XG5cbiAgICBpZiAob3B0aW9ucy5zdGF0ZSkge1xuICAgICAgam9icyA9IGpvYnMuZmlsdGVyKGogPT4gai5zdGF0ZSA9PT0gb3B0aW9ucy5zdGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBqb2JzLFxuICAgICAgaGFzTW9yZSxcbiAgICAgIG5leHRDdXJzb3I6IGhhc01vcmUgJiYgcm93cy5sZW5ndGggPiAwID8gcm93c1tyb3dzLmxlbmd0aCAtIDFdLmlkIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBqb2JzIGZvciBhbiBhZ2VudFxuICAgKi9cbiAgYXN5bmMgbGlzdEpvYnNCeUFnZW50KGFnZW50OiBzdHJpbmcsIG9wdGlvbnM6IEpvYkxpc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFBhZ2luYXRlZFJlc3VsdDxKb2I+PiB7XG4gICAgY29uc3QgeyBsaW1pdCA9IDEwMCwgY3Vyc29yIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8Sm9iUmF3Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdqb2JzJyxcbiAgICAgIGluZGV4X3Bvc2l0aW9uOiAzLCAvLyBieUFnZW50IGluZGV4XG4gICAgICBrZXlfdHlwZTogJ2k2NCcsXG4gICAgICBsb3dlcl9ib3VuZDogY3Vyc29yLFxuICAgICAgbGltaXQ6IGxpbWl0ICsgMSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGhhc01vcmUgPSByZXN1bHQucm93cy5sZW5ndGggPiBsaW1pdDtcbiAgICBjb25zdCByb3dzID0gaGFzTW9yZSA/IHJlc3VsdC5yb3dzLnNsaWNlKDAsIGxpbWl0KSA6IHJlc3VsdC5yb3dzO1xuICAgIGxldCBqb2JzID0gcm93c1xuICAgICAgLmZpbHRlcihyb3cgPT4gcm93LmFnZW50ID09PSBhZ2VudClcbiAgICAgIC5tYXAocm93ID0+IHRoaXMucGFyc2VKb2Iocm93KSk7XG5cbiAgICBpZiAob3B0aW9ucy5zdGF0ZSkge1xuICAgICAgam9icyA9IGpvYnMuZmlsdGVyKGogPT4gai5zdGF0ZSA9PT0gb3B0aW9ucy5zdGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBqb2JzLFxuICAgICAgaGFzTW9yZSxcbiAgICAgIG5leHRDdXJzb3I6IGhhc01vcmUgJiYgcm93cy5sZW5ndGggPiAwID8gcm93c1tyb3dzLmxlbmd0aCAtIDFdLmlkIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1pbGVzdG9uZXMgZm9yIGEgam9iXG4gICAqL1xuICBhc3luYyBnZXRKb2JNaWxlc3RvbmVzKGpvYklkOiBudW1iZXIpOiBQcm9taXNlPE1pbGVzdG9uZVtdPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8TWlsZXN0b25lUmF3Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdtaWxlc3RvbmVzJyxcbiAgICAgIGluZGV4X3Bvc2l0aW9uOiAyLCAvLyBieUpvYiBpbmRleFxuICAgICAga2V5X3R5cGU6ICdpNjQnLFxuICAgICAgbGltaXQ6IDEwMCxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQucm93c1xuICAgICAgLmZpbHRlcihyb3cgPT4gc2FmZVBhcnNlSW50KHJvdy5qb2JfaWQpID09PSBqb2JJZClcbiAgICAgIC5tYXAocm93ID0+IHRoaXMucGFyc2VNaWxlc3RvbmUocm93KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRpc3B1dGUgZm9yIGEgam9iXG4gICAqL1xuICBhc3luYyBnZXRKb2JEaXNwdXRlKGpvYklkOiBudW1iZXIpOiBQcm9taXNlPEVzY3Jvd0Rpc3B1dGUgfCBudWxsPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8e1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIGpvYl9pZDogc3RyaW5nO1xuICAgICAgcmFpc2VkX2J5OiBzdHJpbmc7XG4gICAgICByZWFzb246IHN0cmluZztcbiAgICAgIGV2aWRlbmNlX3VyaTogc3RyaW5nO1xuICAgICAgY2xpZW50X2Ftb3VudDogc3RyaW5nO1xuICAgICAgYWdlbnRfYW1vdW50OiBzdHJpbmc7XG4gICAgICByZXNvbHV0aW9uOiBudW1iZXI7XG4gICAgICByZXNvbHZlcjogc3RyaW5nO1xuICAgICAgcmVzb2x1dGlvbl9ub3Rlczogc3RyaW5nO1xuICAgICAgY3JlYXRlZF9hdDogc3RyaW5nO1xuICAgICAgcmVzb2x2ZWRfYXQ6IHN0cmluZztcbiAgICB9Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdkaXNwdXRlcycsXG4gICAgICBpbmRleF9wb3NpdGlvbjogMiwgLy8gYnlKb2IgaW5kZXhcbiAgICAgIGtleV90eXBlOiAnaTY0JyxcbiAgICAgIGxpbWl0OiAxMDAsXG4gICAgfSk7XG5cbiAgICBjb25zdCBkaXNwdXRlID0gcmVzdWx0LnJvd3MuZmluZChyb3cgPT4gc2FmZVBhcnNlSW50KHJvdy5qb2JfaWQpID09PSBqb2JJZCk7XG4gICAgaWYgKCFkaXNwdXRlKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogc2FmZVBhcnNlSW50KGRpc3B1dGUuaWQpLFxuICAgICAgam9iX2lkOiBzYWZlUGFyc2VJbnQoZGlzcHV0ZS5qb2JfaWQpLFxuICAgICAgcmFpc2VkX2J5OiBkaXNwdXRlLnJhaXNlZF9ieSxcbiAgICAgIHJlYXNvbjogZGlzcHV0ZS5yZWFzb24sXG4gICAgICBldmlkZW5jZV91cmk6IGRpc3B1dGUuZXZpZGVuY2VfdXJpLFxuICAgICAgY2xpZW50X2Ftb3VudDogc2FmZVBhcnNlSW50KGRpc3B1dGUuY2xpZW50X2Ftb3VudCksXG4gICAgICBhZ2VudF9hbW91bnQ6IHNhZmVQYXJzZUludChkaXNwdXRlLmFnZW50X2Ftb3VudCksXG4gICAgICByZXNvbHV0aW9uOiBESVNQVVRFX1JFU09MVVRJT05TW2Rpc3B1dGUucmVzb2x1dGlvbl0sXG4gICAgICByZXNvbHZlcjogZGlzcHV0ZS5yZXNvbHZlcixcbiAgICAgIHJlc29sdXRpb25fbm90ZXM6IGRpc3B1dGUucmVzb2x1dGlvbl9ub3RlcyxcbiAgICAgIGNyZWF0ZWRfYXQ6IHNhZmVQYXJzZUludChkaXNwdXRlLmNyZWF0ZWRfYXQpLFxuICAgICAgcmVzb2x2ZWRfYXQ6IHNhZmVQYXJzZUludChkaXNwdXRlLnJlc29sdmVkX2F0KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgYXZhaWxhYmxlIGFyYml0cmF0b3JzXG4gICAqL1xuICBhc3luYyBsaXN0QXJiaXRyYXRvcnMoKTogUHJvbWlzZTxBcmJpdHJhdG9yW10+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czx7XG4gICAgICBhY2NvdW50OiBzdHJpbmc7XG4gICAgICBzdGFrZTogc3RyaW5nO1xuICAgICAgZmVlX3BlcmNlbnQ6IHN0cmluZztcbiAgICAgIHRvdGFsX2Nhc2VzOiBzdHJpbmc7XG4gICAgICBzdWNjZXNzZnVsX2Nhc2VzOiBzdHJpbmc7XG4gICAgICBhY3RpdmVfZGlzcHV0ZXM6IHN0cmluZztcbiAgICAgIGFjdGl2ZTogbnVtYmVyO1xuICAgIH0+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICB0YWJsZTogJ2FyYml0cmF0b3JzJyxcbiAgICAgIGxpbWl0OiAxMDAsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NcbiAgICAgIC5maWx0ZXIocm93ID0+IHJvdy5hY3RpdmUgPT09IDEpXG4gICAgICAubWFwKHJvdyA9PiAoe1xuICAgICAgICBhY2NvdW50OiByb3cuYWNjb3VudCxcbiAgICAgICAgc3Rha2U6IHNhZmVQYXJzZUludChyb3cuc3Rha2UpLFxuICAgICAgICBmZWVfcGVyY2VudDogc2FmZVBhcnNlSW50KHJvdy5mZWVfcGVyY2VudCksXG4gICAgICAgIHRvdGFsX2Nhc2VzOiBzYWZlUGFyc2VJbnQocm93LnRvdGFsX2Nhc2VzKSxcbiAgICAgICAgc3VjY2Vzc2Z1bF9jYXNlczogc2FmZVBhcnNlSW50KHJvdy5zdWNjZXNzZnVsX2Nhc2VzKSxcbiAgICAgICAgYWN0aXZlX2Rpc3B1dGVzOiBzYWZlUGFyc2VJbnQocm93LmFjdGl2ZV9kaXNwdXRlcyksXG4gICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09IFdSSVRFIE9QRVJBVElPTlMgPT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGpvYlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlSm9iKGRhdGE6IENyZWF0ZUpvYkRhdGEpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnY3JlYXRlam9iJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGFnZW50OiBkYXRhLmFnZW50IHx8ICcnLFxuICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBkYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGRlbGl2ZXJhYmxlczogSlNPTi5zdHJpbmdpZnkoZGF0YS5kZWxpdmVyYWJsZXMpLFxuICAgICAgICAgIGFtb3VudDogZGF0YS5hbW91bnQsXG4gICAgICAgICAgc3ltYm9sOiBkYXRhLnN5bWJvbCB8fCAnWFBSJyxcbiAgICAgICAgICBkZWFkbGluZTogZGF0YS5kZWFkbGluZSB8fCAwLFxuICAgICAgICAgIGFyYml0cmF0b3I6IGRhdGEuYXJiaXRyYXRvciB8fCAnJyxcbiAgICAgICAgICBqb2JfaGFzaDogZGF0YS5qb2JfaGFzaCB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmQgYSBqb2JcbiAgICovXG4gIGFzeW5jIGZ1bmRKb2Ioam9iSWQ6IG51bWJlciwgYW1vdW50OiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiAnZW9zaW8udG9rZW4nLFxuICAgICAgICBuYW1lOiAndHJhbnNmZXInLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZnJvbTogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHRvOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIHF1YW50aXR5OiBhbW91bnQsXG4gICAgICAgICAgbWVtbzogYGZ1bmQ6JHtqb2JJZH1gLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0IGEgam9iIChhcyBhZ2VudClcbiAgICovXG4gIGFzeW5jIGFjY2VwdEpvYihqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2FjY2VwdGpvYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogam9iSWQsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB3b3JraW5nIG9uIGEgam9iIChhcyBhZ2VudClcbiAgICovXG4gIGFzeW5jIHN0YXJ0Sm9iKGpvYklkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnc3RhcnRqb2InLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYWdlbnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsaXZlciBhIGpvYiAoYXMgYWdlbnQpXG4gICAqL1xuICBhc3luYyBkZWxpdmVySm9iKGpvYklkOiBudW1iZXIsIGV2aWRlbmNlVXJpOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnZGVsaXZlcicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogam9iSWQsXG4gICAgICAgICAgZXZpZGVuY2VfdXJpOiBldmlkZW5jZVVyaSxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcHJvdmUgZGVsaXZlcnkgKGFzIGNsaWVudClcbiAgICovXG4gIGFzeW5jIGFwcHJvdmVEZWxpdmVyeShqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2FwcHJvdmUnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY2xpZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgam9iX2lkOiBqb2JJZCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG1pbGVzdG9uZSB0byBhIGpvYlxuICAgKi9cbiAgYXN5bmMgYWRkTWlsZXN0b25lKGRhdGE6IEFkZE1pbGVzdG9uZURhdGEpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnYWRkbWlsZXN0b25lJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogZGF0YS5qb2JfaWQsXG4gICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgICAgYW1vdW50OiBkYXRhLmFtb3VudCxcbiAgICAgICAgICBvcmRlcjogZGF0YS5vcmRlcixcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdCBhIG1pbGVzdG9uZSAoYXMgYWdlbnQpXG4gICAqL1xuICBhc3luYyBzdWJtaXRNaWxlc3RvbmUobWlsZXN0b25lSWQ6IG51bWJlciwgZXZpZGVuY2VVcmk6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdzdWJtaXRtaWxlJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFnZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgbWlsZXN0b25lX2lkOiBtaWxlc3RvbmVJZCxcbiAgICAgICAgICBldmlkZW5jZV91cmk6IGV2aWRlbmNlVXJpLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwcm92ZSBhIG1pbGVzdG9uZSAoYXMgY2xpZW50KVxuICAgKi9cbiAgYXN5bmMgYXBwcm92ZU1pbGVzdG9uZShtaWxlc3RvbmVJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2FwcHJvdmVtaWxlJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIG1pbGVzdG9uZV9pZDogbWlsZXN0b25lSWQsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSYWlzZSBhIGRpc3B1dGVcbiAgICovXG4gIGFzeW5jIHJhaXNlRGlzcHV0ZShqb2JJZDogbnVtYmVyLCByZWFzb246IHN0cmluZywgZXZpZGVuY2VVcmk/OiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnZGlzcHV0ZScsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICByYWlzZWRfYnk6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgICBldmlkZW5jZV91cmk6IGV2aWRlbmNlVXJpIHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGEgam9iIChhcyBjbGllbnQpXG4gICAqL1xuICBhc3luYyBjYW5jZWxKb2Ioam9iSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdjYW5jZWwnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY2xpZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgam9iX2lkOiBqb2JJZCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsYWltIHRpbWVvdXQgKHJlZnVuZCBvciBhdXRvLWFwcHJvdmUpXG4gICAqL1xuICBhc3luYyBjbGFpbVRpbWVvdXQoam9iSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICd0aW1lb3V0JyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsYWltZXI6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xhaW0gYWNjZXB0YW5jZSB0aW1lb3V0IHJlZnVuZCAoYXMgY2xpZW50KVxuICAgKi9cbiAgYXN5bmMgY2xhaW1BY2NlcHRhbmNlVGltZW91dChqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2FjY3B0dGltZW91dCcsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjbGllbnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PSBCSURESU5HID09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIExpc3Qgb3BlbiBqb2JzIChhZ2VudCBub3QgYXNzaWduZWQpXG4gICAqL1xuICBhc3luYyBsaXN0T3BlbkpvYnMob3B0aW9uczogSm9iTGlzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8UGFnaW5hdGVkUmVzdWx0PEpvYj4+IHtcbiAgICBjb25zdCB7IGxpbWl0ID0gMTAwLCBjdXJzb3IgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czxKb2JSYXc+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICB0YWJsZTogJ2pvYnMnLFxuICAgICAgbG93ZXJfYm91bmQ6IGN1cnNvcixcbiAgICAgIGxpbWl0OiBsaW1pdCArIDEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYXNNb3JlID0gcmVzdWx0LnJvd3MubGVuZ3RoID4gbGltaXQ7XG4gICAgY29uc3Qgcm93cyA9IGhhc01vcmUgPyByZXN1bHQucm93cy5zbGljZSgwLCBsaW1pdCkgOiByZXN1bHQucm93cztcbiAgICAvLyBPcGVuIGpvYnMgaGF2ZSBlbXB0eSBhZ2VudCBuYW1lXG4gICAgbGV0IGpvYnMgPSByb3dzXG4gICAgICAuZmlsdGVyKHJvdyA9PiByb3cuYWdlbnQgPT09ICcnIHx8IHJvdy5hZ2VudCA9PT0gJy4uLi4uLi4uLi4uLi4nKVxuICAgICAgLm1hcChyb3cgPT4gdGhpcy5wYXJzZUpvYihyb3cpKTtcblxuICAgIGlmIChvcHRpb25zLnN0YXRlKSB7XG4gICAgICBqb2JzID0gam9icy5maWx0ZXIoaiA9PiBqLnN0YXRlID09PSBvcHRpb25zLnN0YXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IGpvYnMsXG4gICAgICBoYXNNb3JlLFxuICAgICAgbmV4dEN1cnNvcjogaGFzTW9yZSAmJiByb3dzLmxlbmd0aCA+IDAgPyByb3dzW3Jvd3MubGVuZ3RoIC0gMV0uaWQgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGJpZHMgZm9yIGEgam9iXG4gICAqL1xuICBhc3luYyBsaXN0Qmlkc0ZvckpvYihqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxCaWRbXT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPEJpZFJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnYmlkcycsXG4gICAgICBpbmRleF9wb3NpdGlvbjogMiwgLy8gYnlKb2IgaW5kZXhcbiAgICAgIGtleV90eXBlOiAnaTY0JyxcbiAgICAgIGxvd2VyX2JvdW5kOiBTdHJpbmcoam9iSWQpLFxuICAgICAgbGltaXQ6IDEwMCxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQucm93c1xuICAgICAgLmZpbHRlcihyb3cgPT4gc2FmZVBhcnNlSW50KHJvdy5qb2JfaWQpID09PSBqb2JJZClcbiAgICAgIC5tYXAocm93ID0+IHRoaXMucGFyc2VCaWQocm93KSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3BlY2lmaWMgYmlkXG4gICAqL1xuICBhc3luYyBnZXRCaWQoaWQ6IG51bWJlcik6IFByb21pc2U8QmlkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPEJpZFJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnYmlkcycsXG4gICAgICBsb3dlcl9ib3VuZDogU3RyaW5nKGlkKSxcbiAgICAgIHVwcGVyX2JvdW5kOiBTdHJpbmcoaWQpLFxuICAgICAgbGltaXQ6IDEsXG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0LnJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUJpZChyZXN1bHQucm93c1swXSk7XG4gIH1cblxuICAvKipcbiAgICogU3VibWl0IGEgYmlkIG9uIGFuIG9wZW4gam9iIChhcyBhZ2VudClcbiAgICovXG4gIGFzeW5jIHN1Ym1pdEJpZChkYXRhOiBTdWJtaXRCaWREYXRhKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ3N1Ym1pdGJpZCcsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogZGF0YS5qb2JfaWQsXG4gICAgICAgICAgYW1vdW50OiBkYXRhLmFtb3VudCxcbiAgICAgICAgICB0aW1lbGluZTogZGF0YS50aW1lbGluZSxcbiAgICAgICAgICBwcm9wb3NhbDogZGF0YS5wcm9wb3NhbCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhIGJpZCAoYXMgY2xpZW50KSDigJQgYXNzaWducyB0aGUgYWdlbnQgdG8gdGhlIGpvYlxuICAgKi9cbiAgYXN5bmMgc2VsZWN0QmlkKGJpZElkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnc2VsZWN0YmlkJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGJpZF9pZDogYmlkSWQsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaXRoZHJhdyBhIGJpZCAoYXMgYWdlbnQpXG4gICAqL1xuICBhc3luYyB3aXRoZHJhd0JpZChiaWRJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ3dpdGhkcmF3YmlkJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFnZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgYmlkX2lkOiBiaWRJZCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT0gQVJCSVRSQVRPUiBNQU5BR0VNRU5UID09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFzIGFuIGFyYml0cmF0b3JcbiAgICovXG4gIGFzeW5jIHJlZ2lzdGVyQXJiaXRyYXRvcihmZWVQZXJjZW50OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAncmVnYXJiJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBmZWVfcGVyY2VudDogZmVlUGVyY2VudCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YWtlIFhQUiBhcyBhcmJpdHJhdG9yICh2aWEgdG9rZW4gdHJhbnNmZXIpXG4gICAqXG4gICAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgc3RyaW5nIChlLmcuLCBcIjEwMDAuMDAwMCBYUFJcIilcbiAgICovXG4gIGFzeW5jIHN0YWtlQXJiaXRyYXRvcihhbW91bnQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6ICdlb3Npby50b2tlbicsXG4gICAgICAgIG5hbWU6ICd0cmFuc2ZlcicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBmcm9tOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgdG86IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgcXVhbnRpdHk6IGFtb3VudCxcbiAgICAgICAgICBtZW1vOiAnYXJic3Rha2UnLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXJiaXRyYXRlIGEgZGlzcHV0ZVxuICAgKlxuICAgKiBAcGFyYW0gZGlzcHV0ZUlkIC0gVGhlIGRpc3B1dGUgdG8gcmVzb2x2ZVxuICAgKiBAcGFyYW0gY2xpZW50UGVyY2VudCAtIFBlcmNlbnRhZ2Ugb2YgcmVtYWluaW5nIGZ1bmRzIHRvIGdpdmUgdG8gY2xpZW50ICgwLTEwMClcbiAgICogQHBhcmFtIHJlc29sdXRpb25Ob3RlcyAtIEV4cGxhbmF0aW9uIG9mIHRoZSByZXNvbHV0aW9uXG4gICAqL1xuICBhc3luYyBhcmJpdHJhdGUoXG4gICAgZGlzcHV0ZUlkOiBudW1iZXIsXG4gICAgY2xpZW50UGVyY2VudDogbnVtYmVyLFxuICAgIHJlc29sdXRpb25Ob3Rlczogc3RyaW5nXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdhcmJpdHJhdGUnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYXJiaXRyYXRvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGRpc3B1dGVfaWQ6IGRpc3B1dGVJZCxcbiAgICAgICAgICBjbGllbnRfcGVyY2VudDogY2xpZW50UGVyY2VudCxcbiAgICAgICAgICByZXNvbHV0aW9uX25vdGVzOiByZXNvbHV0aW9uTm90ZXMsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgZGlzcHV0ZSBhZnRlciB0aW1lb3V0IChvd25lci1vbmx5IGZhbGxiYWNrKS5cbiAgICogQ2FuIG9ubHkgYmUgY2FsbGVkIGFmdGVyIDE0IGRheXMgc2luY2UgZGlzcHV0ZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGRpc3B1dGVJZCAtIFRoZSBkaXNwdXRlIHRvIHJlc29sdmVcbiAgICogQHBhcmFtIGNsaWVudFBlcmNlbnQgLSBQZXJjZW50YWdlIG9mIHJlbWFpbmluZyBmdW5kcyB0byBnaXZlIHRvIGNsaWVudCAoMC0xMDApXG4gICAqIEBwYXJhbSByZXNvbHV0aW9uTm90ZXMgLSBFeHBsYW5hdGlvbiBvZiB0aGUgcmVzb2x1dGlvblxuICAgKi9cbiAgYXN5bmMgcmVzb2x2ZVRpbWVvdXQoXG4gICAgZGlzcHV0ZUlkOiBudW1iZXIsXG4gICAgY2xpZW50UGVyY2VudDogbnVtYmVyLFxuICAgIHJlc29sdXRpb25Ob3Rlczogc3RyaW5nXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdyZXNvbHZldG1vdXQnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZGlzcHV0ZV9pZDogZGlzcHV0ZUlkLFxuICAgICAgICAgIGNsaWVudF9wZXJjZW50OiBjbGllbnRQZXJjZW50LFxuICAgICAgICAgIHJlc29sdXRpb25fbm90ZXM6IHJlc29sdXRpb25Ob3RlcyxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIGFyYml0cmF0b3IgKG11c3QgaGF2ZSBzdWZmaWNpZW50IHN0YWtlKVxuICAgKi9cbiAgYXN5bmMgYWN0aXZhdGVBcmJpdHJhdG9yKCk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdhY3RpdmF0ZWFyYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlIGFyYml0cmF0b3IgKHN0b3AgYWNjZXB0aW5nIG5ldyBjYXNlcylcbiAgICovXG4gIGFzeW5jIGRlYWN0aXZhdGVBcmJpdHJhdG9yKCk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdkZWFjdGFyYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRvIHVuc3Rha2UgYXJiaXRyYXRvciBmdW5kcyAoNy1kYXkgZGVsYXkpLlxuICAgKiBNdXN0IGJlIGRlYWN0aXZhdGVkIGFuZCBoYXZlIG5vIHBlbmRpbmcgZGlzcHV0ZXMgZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gdW5zdGFrZSBpbiBzbWFsbGVzdCB1bml0cyAoZS5nLiwgMTAwMDAgPSAxLjAwMDAgWFBSKVxuICAgKi9cbiAgYXN5bmMgdW5zdGFrZUFyYml0cmF0b3IoYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAndW5zdGFrZWFyYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgYW1vdW50LFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgdW5zdGFrZWQgYXJiaXRyYXRvciBmdW5kcyAoYWZ0ZXIgNy1kYXkgZGVsYXkpXG4gICAqL1xuICBhc3luYyB3aXRoZHJhd0FyYml0cmF0b3JTdGFrZSgpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnd2l0aGRyYXdhcmInLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYWNjb3VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGEgcGVuZGluZyB1bnN0YWtlIHJlcXVlc3QgKHJldHVybnMgZnVuZHMgdG8gYWN0aXZlIHN0YWtlKVxuICAgKi9cbiAgYXN5bmMgY2FuY2VsQXJiaXRyYXRvclVuc3Rha2UoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2NhbmNlbHVuc3RrJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIHVwIGNvbXBsZXRlZCBqb2JzIChwZXJtaXNzaW9ubGVzcylcbiAgICovXG4gIGFzeW5jIGNsZWFuSm9icyhtYXhBZ2U6IG51bWJlciwgbWF4RGVsZXRlOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnY2xlYW5qb2JzJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG1heF9hZ2U6IG1heEFnZSxcbiAgICAgICAgICBtYXhfZGVsZXRlOiBtYXhEZWxldGUsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiB1cCByZXNvbHZlZCBkaXNwdXRlcyAocGVybWlzc2lvbmxlc3MpXG4gICAqL1xuICBhc3luYyBjbGVhbkRpc3B1dGVzKG1heEFnZTogbnVtYmVyLCBtYXhEZWxldGU6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdjbGVhbmRpc3BzJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG1heF9hZ2U6IG1heEFnZSxcbiAgICAgICAgICBtYXhfZGVsZXRlOiBtYXhEZWxldGUsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09IEhFTFBFUlMgPT09PT09PT09PT09PT1cblxuICBwcml2YXRlIHJlcXVpcmVTZXNzaW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZXNzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nlc3Npb24gcmVxdWlyZWQgZm9yIHdyaXRlIG9wZXJhdGlvbnMnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSm9iKHJhdzogSm9iUmF3KTogSm9iIHtcbiAgICBsZXQgZGVsaXZlcmFibGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBkZWxpdmVyYWJsZXMgPSBKU09OLnBhcnNlKHJhdy5kZWxpdmVyYWJsZXMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgZGVsaXZlcmFibGVzID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBzYWZlUGFyc2VJbnQocmF3LmlkKSxcbiAgICAgIGNsaWVudDogcmF3LmNsaWVudCxcbiAgICAgIGFnZW50OiByYXcuYWdlbnQsXG4gICAgICB0aXRsZTogcmF3LnRpdGxlLFxuICAgICAgZGVzY3JpcHRpb246IHJhdy5kZXNjcmlwdGlvbixcbiAgICAgIGRlbGl2ZXJhYmxlcyxcbiAgICAgIGFtb3VudDogc2FmZVBhcnNlSW50KHJhdy5hbW91bnQpLFxuICAgICAgc3ltYm9sOiByYXcuc3ltYm9sLFxuICAgICAgZnVuZGVkX2Ftb3VudDogc2FmZVBhcnNlSW50KHJhdy5mdW5kZWRfYW1vdW50KSxcbiAgICAgIHJlbGVhc2VkX2Ftb3VudDogc2FmZVBhcnNlSW50KHJhdy5yZWxlYXNlZF9hbW91bnQpLFxuICAgICAgc3RhdGU6IEpPQl9TVEFURVNbcmF3LnN0YXRlXSB8fCAnY3JlYXRlZCcsXG4gICAgICBkZWFkbGluZTogc2FmZVBhcnNlSW50KHJhdy5kZWFkbGluZSksXG4gICAgICBhcmJpdHJhdG9yOiByYXcuYXJiaXRyYXRvcixcbiAgICAgIGpvYl9oYXNoOiByYXcuam9iX2hhc2gsXG4gICAgICBjcmVhdGVkX2F0OiBzYWZlUGFyc2VJbnQocmF3LmNyZWF0ZWRfYXQpLFxuICAgICAgdXBkYXRlZF9hdDogc2FmZVBhcnNlSW50KHJhdy51cGRhdGVkX2F0KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU1pbGVzdG9uZShyYXc6IE1pbGVzdG9uZVJhdyk6IE1pbGVzdG9uZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBzYWZlUGFyc2VJbnQocmF3LmlkKSxcbiAgICAgIGpvYl9pZDogc2FmZVBhcnNlSW50KHJhdy5qb2JfaWQpLFxuICAgICAgdGl0bGU6IHJhdy50aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiByYXcuZGVzY3JpcHRpb24sXG4gICAgICBhbW91bnQ6IHNhZmVQYXJzZUludChyYXcuYW1vdW50KSxcbiAgICAgIG9yZGVyOiByYXcub3JkZXIsXG4gICAgICBzdGF0ZTogTUlMRVNUT05FX1NUQVRFU1tyYXcuc3RhdGVdIHx8ICdwZW5kaW5nJyxcbiAgICAgIGV2aWRlbmNlX3VyaTogcmF3LmV2aWRlbmNlX3VyaSxcbiAgICAgIHN1Ym1pdHRlZF9hdDogc2FmZVBhcnNlSW50KHJhdy5zdWJtaXR0ZWRfYXQpLFxuICAgICAgYXBwcm92ZWRfYXQ6IHNhZmVQYXJzZUludChyYXcuYXBwcm92ZWRfYXQpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQmlkKHJhdzogQmlkUmF3KTogQmlkIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNhZmVQYXJzZUludChyYXcuaWQpLFxuICAgICAgam9iX2lkOiBzYWZlUGFyc2VJbnQocmF3LmpvYl9pZCksXG4gICAgICBhZ2VudDogcmF3LmFnZW50LFxuICAgICAgYW1vdW50OiBzYWZlUGFyc2VJbnQocmF3LmFtb3VudCksXG4gICAgICB0aW1lbGluZTogc2FmZVBhcnNlSW50KHJhdy50aW1lbGluZSksXG4gICAgICBwcm9wb3NhbDogcmF3LnByb3Bvc2FsLFxuICAgICAgY3JlYXRlZF9hdDogc2FmZVBhcnNlSW50KHJhdy5jcmVhdGVkX2F0KSxcbiAgICB9O1xuICB9XG59XG4iXX0=
901
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXNjcm93UmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRXNjcm93UmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsbUNBQXVDO0FBaUt2QywrQ0FBK0M7QUFFL0MsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7QUFDdkMsTUFBTSxVQUFVLEdBQWU7SUFDN0IsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWTtJQUM3QyxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsWUFBWTtDQUMvRCxDQUFDO0FBQ0YsTUFBTSxnQkFBZ0IsR0FBcUIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM1RixNQUFNLG1CQUFtQixHQUF3QixDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRW5HLE1BQWEsY0FBYztJQUt6QixZQUFZLEdBQVksRUFBRSxPQUF1QixFQUFFLFFBQWlCO1FBQ2xFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLGdCQUFnQixDQUFDO0lBQy9DLENBQUM7SUFFRCxnREFBZ0Q7SUFFaEQ7O09BRUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQVU7UUFDckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBUztZQUNuRCxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDcEIsS0FBSyxFQUFFLE1BQU07WUFDYixXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN2QixXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN2QixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUMsQ0FBQztRQUVILElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxVQUEwQixFQUFFO1FBQ2pFLE1BQU0sRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUV4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFTO1lBQ25ELElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNwQixLQUFLLEVBQUUsTUFBTTtZQUNiLGNBQWMsRUFBRSxDQUFDLEVBQUUsaUJBQWlCO1lBQ3BDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsV0FBVyxFQUFFLE1BQU07WUFDbkIsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUMzQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNqRSxJQUFJLElBQUksR0FBRyxJQUFJO2FBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUM7YUFDcEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWxDLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xCLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSTtZQUNYLE9BQU87WUFDUCxVQUFVLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDOUUsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBYSxFQUFFLFVBQTBCLEVBQUU7UUFDL0QsTUFBTSxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRXhDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQVM7WUFDbkQsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3BCLEtBQUssRUFBRSxNQUFNO1lBQ2IsY0FBYyxFQUFFLENBQUMsRUFBRSxnQkFBZ0I7WUFDbkMsUUFBUSxFQUFFLEtBQUs7WUFDZixXQUFXLEVBQUUsTUFBTTtZQUNuQixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2pFLElBQUksSUFBSSxHQUFHLElBQUk7YUFDWixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQzthQUNsQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFbEMsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsT0FBTztZQUNMLEtBQUssRUFBRSxJQUFJO1lBQ1gsT0FBTztZQUNQLFVBQVUsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUM5RSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQWE7UUFDbEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBZTtZQUN6RCxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDcEIsS0FBSyxFQUFFLFlBQVk7WUFDbkIsY0FBYyxFQUFFLENBQUMsRUFBRSxjQUFjO1lBQ2pDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsS0FBSyxFQUFFLEdBQUc7U0FDWCxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJO2FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUM7YUFDakQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQWE7UUFDL0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FhekM7WUFDRCxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDcEIsS0FBSyxFQUFFLFVBQVU7WUFDakIsY0FBYyxFQUFFLENBQUMsRUFBRSxjQUFjO1lBQ2pDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsS0FBSyxFQUFFLEdBQUc7U0FDWCxDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQztRQUUxQixPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUEsb0JBQVksRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sRUFBRSxJQUFBLG9CQUFZLEVBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNwQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDNUIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNsQyxhQUFhLEVBQUUsSUFBQSxvQkFBWSxFQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDbEQsWUFBWSxFQUFFLElBQUEsb0JBQVksRUFBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1lBQ2hELFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ25ELFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUMxQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO1lBQzFDLFVBQVUsRUFBRSxJQUFBLG9CQUFZLEVBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUM1QyxXQUFXLEVBQUUsSUFBQSxvQkFBWSxFQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7U0FDL0MsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxlQUFlO1FBQ25CLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBUXpDO1lBQ0QsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3BCLEtBQUssRUFBRSxhQUFhO1lBQ3BCLEtBQUssRUFBRSxHQUFHO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUMsSUFBSTthQUNmLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO2FBQy9CLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDWCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87WUFDcEIsS0FBSyxFQUFFLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQzlCLFdBQVcsRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztZQUMxQyxXQUFXLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7WUFDMUMsZ0JBQWdCLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNwRCxlQUFlLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDbEQsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxpREFBaUQ7SUFFakQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQW1CO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxXQUFXO29CQUNqQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUNoQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO3dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7d0JBQ2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzt3QkFDN0IsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzt3QkFDL0MsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO3dCQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLO3dCQUM1QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDO3dCQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFO3dCQUNqQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFO3FCQUM5QjtpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFhLEVBQUUsTUFBYztRQUN6QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLGFBQWE7b0JBQ3RCLElBQUksRUFBRSxVQUFVO29CQUNoQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUM5QixFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQ2pCLFFBQVEsRUFBRSxNQUFNO3dCQUNoQixJQUFJLEVBQUUsUUFBUSxLQUFLLEVBQUU7cUJBQ3RCO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQy9CLE1BQU0sRUFBRSxLQUFLO3FCQUNkO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQWE7UUFDMUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQy9CLE1BQU0sRUFBRSxLQUFLO3FCQUNkO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQWEsRUFBRSxXQUFtQjtRQUNqRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsU0FBUztvQkFDZixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUMvQixNQUFNLEVBQUUsS0FBSzt3QkFDYixZQUFZLEVBQUUsV0FBVztxQkFDMUI7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBYTtRQUNqQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsU0FBUztvQkFDZixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUNoQyxNQUFNLEVBQUUsS0FBSztxQkFDZDtpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFzQjtRQUN2QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsY0FBYztvQkFDcEIsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzt3QkFDaEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO3dCQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7d0JBQ2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzt3QkFDN0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO3dCQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7cUJBQ2xCO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLFdBQW1CLEVBQUUsV0FBbUI7UUFDNUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQy9CLFlBQVksRUFBRSxXQUFXO3dCQUN6QixZQUFZLEVBQUUsV0FBVztxQkFDMUI7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFtQjtRQUN4QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsYUFBYTtvQkFDbkIsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzt3QkFDaEMsWUFBWSxFQUFFLFdBQVc7cUJBQzFCO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQWEsRUFBRSxNQUFjLEVBQUUsV0FBb0I7UUFDcEUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzt3QkFDbkMsTUFBTSxFQUFFLEtBQUs7d0JBQ2IsTUFBTTt3QkFDTixZQUFZLEVBQUUsV0FBVyxJQUFJLEVBQUU7cUJBQ2hDO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzt3QkFDaEMsTUFBTSxFQUFFLEtBQUs7cUJBQ2Q7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsU0FBUztvQkFDZixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUNqQyxNQUFNLEVBQUUsS0FBSztxQkFDZDtpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLHNCQUFzQixDQUFDLEtBQWE7UUFDeEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQ2hDLE1BQU0sRUFBRSxLQUFLO3FCQUNkO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsd0NBQXdDO0lBRXhDOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUEwQixFQUFFO1FBQzdDLE1BQU0sRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUV4Qyx3RUFBd0U7UUFDeEUsMEVBQTBFO1FBQzFFLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDeEIsSUFBSSxRQUFRLEdBQVUsRUFBRSxDQUFDO1FBQ3pCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztRQUV4QixPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQy9DLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQVM7Z0JBQ25ELElBQUksRUFBRSxJQUFJO2dCQUNWLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUNwQixLQUFLLEVBQUUsTUFBTTtnQkFDYixXQUFXLEVBQUUsVUFBVTtnQkFDdkIsS0FBSyxFQUFFLFVBQVU7YUFDbEIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDckIsTUFBTTtZQUNSLENBQUM7WUFFRCxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDO1lBQ2pELFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFeEQsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUk7aUJBQ3BCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssZUFBZSxDQUFDO2lCQUNoRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFbEMsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2xCLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLElBQUksWUFBWSxDQUFDO1FBQ3hELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXZDLE9BQU87WUFDTCxLQUFLO1lBQ0wsT0FBTztZQUNQLFVBQVUsRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDN0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBYTtRQUNoQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUEyQztZQUNyRixJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDcEIsS0FBSyxFQUFFLGFBQWE7WUFDcEIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDMUIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDMUIsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFhO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQVM7WUFDbkQsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3BCLEtBQUssRUFBRSxNQUFNO1lBQ2IsY0FBYyxFQUFFLENBQUMsRUFBRSxjQUFjO1lBQ2pDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDMUIsS0FBSyxFQUFFLEdBQUc7U0FDWCxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJO2FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUM7YUFDakQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBVTtRQUNyQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFTO1lBQ25ELElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNwQixLQUFLLEVBQUUsTUFBTTtZQUNiLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssRUFBRSxDQUFDO1NBQ1QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQW1CO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxXQUFXO29CQUNqQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUMvQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTt3QkFDbkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO3dCQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7cUJBQ3hCO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQ2hDLE1BQU0sRUFBRSxLQUFLO3FCQUNkO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQy9CLE1BQU0sRUFBRSxLQUFLO3FCQUNkO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsc0RBQXNEO0lBRXREOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFVBQWtCO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxRQUFRO29CQUNkLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQ2pDLFdBQVcsRUFBRSxVQUFVO3FCQUN4QjtpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQWM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxhQUFhO29CQUN0QixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzt3QkFDOUIsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRO3dCQUNqQixRQUFRLEVBQUUsTUFBTTt3QkFDaEIsSUFBSSxFQUFFLFVBQVU7cUJBQ2pCO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FDYixTQUFpQixFQUNqQixhQUFxQixFQUNyQixlQUF1QjtRQUV2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsV0FBVztvQkFDakIsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzt3QkFDcEMsVUFBVSxFQUFFLFNBQVM7d0JBQ3JCLGNBQWMsRUFBRSxhQUFhO3dCQUM3QixnQkFBZ0IsRUFBRSxlQUFlO3FCQUNsQztpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUNsQixTQUFpQixFQUNqQixhQUFxQixFQUNyQixlQUF1QjtRQUV2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsY0FBYztvQkFDcEIsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixVQUFVLEVBQUUsU0FBUzt3QkFDckIsY0FBYyxFQUFFLGFBQWE7d0JBQzdCLGdCQUFnQixFQUFFLGVBQWU7cUJBQ2xDO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsa0JBQWtCO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxhQUFhO29CQUNuQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3FCQUNsQztpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSztxQkFDbEM7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFjO1FBQ3BDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxZQUFZO29CQUNsQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3dCQUNqQyxNQUFNO3FCQUNQO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsdUJBQXVCO1FBQzNCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxhQUFhO29CQUNuQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLO3FCQUNsQztpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLHVCQUF1QjtRQUMzQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakMsT0FBTyxFQUFFLENBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN0QixJQUFJLEVBQUUsYUFBYTtvQkFDbkIsYUFBYSxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxVQUFVO3lCQUMxQyxDQUFDO29CQUNGLElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSztxQkFDbEM7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBYyxFQUFFLFNBQWlCO1FBQy9DLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxXQUFXO29CQUNqQixhQUFhLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFVBQVU7eUJBQzFDLENBQUM7b0JBQ0YsSUFBSSxFQUFFO3dCQUNKLE9BQU8sRUFBRSxNQUFNO3dCQUNmLFVBQVUsRUFBRSxTQUFTO3FCQUN0QjtpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFjLEVBQUUsU0FBaUI7UUFDbkQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLGFBQWEsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTt5QkFDMUMsQ0FBQztvQkFDRixJQUFJLEVBQUU7d0JBQ0osT0FBTyxFQUFFLE1BQU07d0JBQ2YsVUFBVSxFQUFFLFNBQVM7cUJBQ3RCO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsd0NBQXdDO0lBRWhDLGNBQWM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDM0QsQ0FBQztJQUNILENBQUM7SUFFTyxRQUFRLENBQUMsR0FBVztRQUMxQixJQUFJLFlBQVksR0FBYSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDO1lBQ0gsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtZQUNsQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7WUFDaEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1lBQ2hCLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVztZQUM1QixZQUFZO1lBQ1osTUFBTSxFQUFFLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQ2hDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtZQUNsQixhQUFhLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7WUFDOUMsZUFBZSxFQUFFLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQ2xELEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVM7WUFDekMsUUFBUSxFQUFFLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ3BDLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtZQUMxQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7WUFDdEIsVUFBVSxFQUFFLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQ3hDLFVBQVUsRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztTQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFpQjtRQUN0QyxPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUNoQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7WUFDaEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1lBQzVCLE1BQU0sRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUNoQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7WUFDaEIsS0FBSyxFQUFFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTO1lBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsWUFBWTtZQUM5QixZQUFZLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7WUFDNUMsV0FBVyxFQUFFLElBQUEsb0JBQVksRUFBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1NBQzNDLENBQUM7SUFDSixDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQVc7UUFDMUIsT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDaEMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1lBQ2hCLE1BQU0sRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUNoQyxRQUFRLEVBQUUsSUFBQSxvQkFBWSxFQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDcEMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1lBQ3RCLFVBQVUsRUFBRSxJQUFBLG9CQUFZLEVBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztTQUN6QyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdC9CRCx3Q0FzL0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSnNvblJwYyxcbiAgUHJvdG9uU2Vzc2lvbixcbiAgVHJhbnNhY3Rpb25SZXN1bHQsXG4gIFBhZ2luYXRlZFJlc3VsdCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBzYWZlUGFyc2VJbnQgfSBmcm9tICcuL3V0aWxzJztcblxuLy8gPT09PT09PT09PT09PT0gRXNjcm93IFR5cGVzID09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgSm9iIHtcbiAgaWQ6IG51bWJlcjtcbiAgY2xpZW50OiBzdHJpbmc7XG4gIGFnZW50OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGRlbGl2ZXJhYmxlczogc3RyaW5nW107XG4gIGFtb3VudDogbnVtYmVyO1xuICBzeW1ib2w6IHN0cmluZztcbiAgZnVuZGVkX2Ftb3VudDogbnVtYmVyO1xuICByZWxlYXNlZF9hbW91bnQ6IG51bWJlcjtcbiAgc3RhdGU6IEpvYlN0YXRlO1xuICBkZWFkbGluZTogbnVtYmVyO1xuICBhcmJpdHJhdG9yOiBzdHJpbmc7XG4gIGpvYl9oYXNoOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IG51bWJlcjtcbiAgdXBkYXRlZF9hdDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpvYlJhdyB7XG4gIGlkOiBzdHJpbmc7XG4gIGNsaWVudDogc3RyaW5nO1xuICBhZ2VudDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBkZWxpdmVyYWJsZXM6IHN0cmluZztcbiAgYW1vdW50OiBzdHJpbmc7XG4gIHN5bWJvbDogc3RyaW5nO1xuICBmdW5kZWRfYW1vdW50OiBzdHJpbmc7XG4gIHJlbGVhc2VkX2Ftb3VudDogc3RyaW5nO1xuICBzdGF0ZTogbnVtYmVyO1xuICBkZWFkbGluZTogc3RyaW5nO1xuICBhcmJpdHJhdG9yOiBzdHJpbmc7XG4gIGpvYl9oYXNoOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgdXBkYXRlZF9hdDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBKb2JTdGF0ZSA9XG4gIHwgJ2NyZWF0ZWQnXG4gIHwgJ2Z1bmRlZCdcbiAgfCAnYWNjZXB0ZWQnXG4gIHwgJ2lucHJvZ3Jlc3MnXG4gIHwgJ2RlbGl2ZXJlZCdcbiAgfCAnZGlzcHV0ZWQnXG4gIHwgJ2NvbXBsZXRlZCdcbiAgfCAncmVmdW5kZWQnXG4gIHwgJ2FyYml0cmF0ZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1pbGVzdG9uZSB7XG4gIGlkOiBudW1iZXI7XG4gIGpvYl9pZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgb3JkZXI6IG51bWJlcjtcbiAgc3RhdGU6IE1pbGVzdG9uZVN0YXRlO1xuICBldmlkZW5jZV91cmk6IHN0cmluZztcbiAgc3VibWl0dGVkX2F0OiBudW1iZXI7XG4gIGFwcHJvdmVkX2F0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlsZXN0b25lUmF3IHtcbiAgaWQ6IHN0cmluZztcbiAgam9iX2lkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICBvcmRlcjogbnVtYmVyO1xuICBzdGF0ZTogbnVtYmVyO1xuICBldmlkZW5jZV91cmk6IHN0cmluZztcbiAgc3VibWl0dGVkX2F0OiBzdHJpbmc7XG4gIGFwcHJvdmVkX2F0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1pbGVzdG9uZVN0YXRlID0gJ3BlbmRpbmcnIHwgJ3N1Ym1pdHRlZCcgfCAnYXBwcm92ZWQnIHwgJ2Rpc3B1dGVkJztcblxuZXhwb3J0IGludGVyZmFjZSBFc2Nyb3dEaXNwdXRlIHtcbiAgaWQ6IG51bWJlcjtcbiAgam9iX2lkOiBudW1iZXI7XG4gIHJhaXNlZF9ieTogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgZXZpZGVuY2VfdXJpOiBzdHJpbmc7XG4gIGNsaWVudF9hbW91bnQ6IG51bWJlcjtcbiAgYWdlbnRfYW1vdW50OiBudW1iZXI7XG4gIHJlc29sdXRpb246IERpc3B1dGVSZXNvbHV0aW9uO1xuICByZXNvbHZlcjogc3RyaW5nO1xuICByZXNvbHV0aW9uX25vdGVzOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IG51bWJlcjtcbiAgcmVzb2x2ZWRfYXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRGlzcHV0ZVJlc29sdXRpb24gPSAncGVuZGluZycgfCAnY2xpZW50X3dpbnMnIHwgJ2FnZW50X3dpbnMnIHwgJ3NwbGl0JztcblxuZXhwb3J0IGludGVyZmFjZSBBcmJpdHJhdG9yIHtcbiAgYWNjb3VudDogc3RyaW5nO1xuICBzdGFrZTogbnVtYmVyO1xuICBmZWVfcGVyY2VudDogbnVtYmVyO1xuICB0b3RhbF9jYXNlczogbnVtYmVyO1xuICBzdWNjZXNzZnVsX2Nhc2VzOiBudW1iZXI7XG4gIGFjdGl2ZV9kaXNwdXRlczogbnVtYmVyO1xuICBhY3RpdmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmlkIHtcbiAgaWQ6IG51bWJlcjtcbiAgam9iX2lkOiBudW1iZXI7XG4gIGFnZW50OiBzdHJpbmc7XG4gIGFtb3VudDogbnVtYmVyO1xuICB0aW1lbGluZTogbnVtYmVyO1xuICBwcm9wb3NhbDogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmlkUmF3IHtcbiAgaWQ6IHN0cmluZztcbiAgam9iX2lkOiBzdHJpbmc7XG4gIGFnZW50OiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICB0aW1lbGluZTogc3RyaW5nO1xuICBwcm9wb3NhbDogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSm9iRGF0YSB7XG4gIGFnZW50Pzogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBkZWxpdmVyYWJsZXM6IHN0cmluZ1tdO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgc3ltYm9sPzogc3RyaW5nO1xuICBkZWFkbGluZT86IG51bWJlcjtcbiAgYXJiaXRyYXRvcj86IHN0cmluZztcbiAgam9iX2hhc2g/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VibWl0QmlkRGF0YSB7XG4gIGpvYl9pZDogbnVtYmVyO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgdGltZWxpbmU6IG51bWJlcjtcbiAgcHJvcG9zYWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRNaWxlc3RvbmVEYXRhIHtcbiAgam9iX2lkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFtb3VudDogbnVtYmVyO1xuICBvcmRlcjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpvYkxpc3RPcHRpb25zIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIGN1cnNvcj86IHN0cmluZztcbiAgc3RhdGU/OiBKb2JTdGF0ZTtcbn1cblxuLy8gPT09PT09PT09PT09PT0gUmVnaXN0cnkgQ2xhc3MgPT09PT09PT09PT09PT1cblxuY29uc3QgREVGQVVMVF9DT05UUkFDVCA9ICdhZ2VudGVzY3Jvdyc7XG5jb25zdCBKT0JfU1RBVEVTOiBKb2JTdGF0ZVtdID0gW1xuICAnY3JlYXRlZCcsICdmdW5kZWQnLCAnYWNjZXB0ZWQnLCAnaW5wcm9ncmVzcycsXG4gICdkZWxpdmVyZWQnLCAnZGlzcHV0ZWQnLCAnY29tcGxldGVkJywgJ3JlZnVuZGVkJywgJ2FyYml0cmF0ZWQnXG5dO1xuY29uc3QgTUlMRVNUT05FX1NUQVRFUzogTWlsZXN0b25lU3RhdGVbXSA9IFsncGVuZGluZycsICdzdWJtaXR0ZWQnLCAnYXBwcm92ZWQnLCAnZGlzcHV0ZWQnXTtcbmNvbnN0IERJU1BVVEVfUkVTT0xVVElPTlM6IERpc3B1dGVSZXNvbHV0aW9uW10gPSBbJ3BlbmRpbmcnLCAnY2xpZW50X3dpbnMnLCAnYWdlbnRfd2lucycsICdzcGxpdCddO1xuXG5leHBvcnQgY2xhc3MgRXNjcm93UmVnaXN0cnkge1xuICBwcml2YXRlIHJwYzogSnNvblJwYztcbiAgcHJpdmF0ZSBzZXNzaW9uOiBQcm90b25TZXNzaW9uIHwgbnVsbDtcbiAgcHJpdmF0ZSBjb250cmFjdDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHJwYzogSnNvblJwYywgc2Vzc2lvbj86IFByb3RvblNlc3Npb24sIGNvbnRyYWN0Pzogc3RyaW5nKSB7XG4gICAgdGhpcy5ycGMgPSBycGM7XG4gICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbiB8fCBudWxsO1xuICAgIHRoaXMuY29udHJhY3QgPSBjb250cmFjdCB8fCBERUZBVUxUX0NPTlRSQUNUO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT0gUkVBRCBPUEVSQVRJT05TID09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldCBhIGpvYiBieSBJRFxuICAgKi9cbiAgYXN5bmMgZ2V0Sm9iKGlkOiBudW1iZXIpOiBQcm9taXNlPEpvYiB8IG51bGw+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czxKb2JSYXc+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICB0YWJsZTogJ2pvYnMnLFxuICAgICAgbG93ZXJfYm91bmQ6IFN0cmluZyhpZCksXG4gICAgICB1cHBlcl9ib3VuZDogU3RyaW5nKGlkKSxcbiAgICAgIGxpbWl0OiAxLFxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdC5yb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VKb2IocmVzdWx0LnJvd3NbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgam9icyBmb3IgYSBjbGllbnRcbiAgICovXG4gIGFzeW5jIGxpc3RKb2JzQnlDbGllbnQoY2xpZW50OiBzdHJpbmcsIG9wdGlvbnM6IEpvYkxpc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFBhZ2luYXRlZFJlc3VsdDxKb2I+PiB7XG4gICAgY29uc3QgeyBsaW1pdCA9IDEwMCwgY3Vyc29yIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8Sm9iUmF3Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdqb2JzJyxcbiAgICAgIGluZGV4X3Bvc2l0aW9uOiAyLCAvLyBieUNsaWVudCBpbmRleFxuICAgICAga2V5X3R5cGU6ICdpNjQnLFxuICAgICAgbG93ZXJfYm91bmQ6IGN1cnNvcixcbiAgICAgIGxpbWl0OiBsaW1pdCArIDEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYXNNb3JlID0gcmVzdWx0LnJvd3MubGVuZ3RoID4gbGltaXQ7XG4gICAgY29uc3Qgcm93cyA9IGhhc01vcmUgPyByZXN1bHQucm93cy5zbGljZSgwLCBsaW1pdCkgOiByZXN1bHQucm93cztcbiAgICBsZXQgam9icyA9IHJvd3NcbiAgICAgIC5maWx0ZXIocm93ID0+IHJvdy5jbGllbnQgPT09IGNsaWVudClcbiAgICAgIC5tYXAocm93ID0+IHRoaXMucGFyc2VKb2Iocm93KSk7XG5cbiAgICBpZiAob3B0aW9ucy5zdGF0ZSkge1xuICAgICAgam9icyA9IGpvYnMuZmlsdGVyKGogPT4gai5zdGF0ZSA9PT0gb3B0aW9ucy5zdGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBqb2JzLFxuICAgICAgaGFzTW9yZSxcbiAgICAgIG5leHRDdXJzb3I6IGhhc01vcmUgJiYgcm93cy5sZW5ndGggPiAwID8gcm93c1tyb3dzLmxlbmd0aCAtIDFdLmlkIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBqb2JzIGZvciBhbiBhZ2VudFxuICAgKi9cbiAgYXN5bmMgbGlzdEpvYnNCeUFnZW50KGFnZW50OiBzdHJpbmcsIG9wdGlvbnM6IEpvYkxpc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFBhZ2luYXRlZFJlc3VsdDxKb2I+PiB7XG4gICAgY29uc3QgeyBsaW1pdCA9IDEwMCwgY3Vyc29yIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8Sm9iUmF3Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdqb2JzJyxcbiAgICAgIGluZGV4X3Bvc2l0aW9uOiAzLCAvLyBieUFnZW50IGluZGV4XG4gICAgICBrZXlfdHlwZTogJ2k2NCcsXG4gICAgICBsb3dlcl9ib3VuZDogY3Vyc29yLFxuICAgICAgbGltaXQ6IGxpbWl0ICsgMSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGhhc01vcmUgPSByZXN1bHQucm93cy5sZW5ndGggPiBsaW1pdDtcbiAgICBjb25zdCByb3dzID0gaGFzTW9yZSA/IHJlc3VsdC5yb3dzLnNsaWNlKDAsIGxpbWl0KSA6IHJlc3VsdC5yb3dzO1xuICAgIGxldCBqb2JzID0gcm93c1xuICAgICAgLmZpbHRlcihyb3cgPT4gcm93LmFnZW50ID09PSBhZ2VudClcbiAgICAgIC5tYXAocm93ID0+IHRoaXMucGFyc2VKb2Iocm93KSk7XG5cbiAgICBpZiAob3B0aW9ucy5zdGF0ZSkge1xuICAgICAgam9icyA9IGpvYnMuZmlsdGVyKGogPT4gai5zdGF0ZSA9PT0gb3B0aW9ucy5zdGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBqb2JzLFxuICAgICAgaGFzTW9yZSxcbiAgICAgIG5leHRDdXJzb3I6IGhhc01vcmUgJiYgcm93cy5sZW5ndGggPiAwID8gcm93c1tyb3dzLmxlbmd0aCAtIDFdLmlkIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1pbGVzdG9uZXMgZm9yIGEgam9iXG4gICAqL1xuICBhc3luYyBnZXRKb2JNaWxlc3RvbmVzKGpvYklkOiBudW1iZXIpOiBQcm9taXNlPE1pbGVzdG9uZVtdPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8TWlsZXN0b25lUmF3Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdtaWxlc3RvbmVzJyxcbiAgICAgIGluZGV4X3Bvc2l0aW9uOiAyLCAvLyBieUpvYiBpbmRleFxuICAgICAga2V5X3R5cGU6ICdpNjQnLFxuICAgICAgbGltaXQ6IDEwMCxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQucm93c1xuICAgICAgLmZpbHRlcihyb3cgPT4gc2FmZVBhcnNlSW50KHJvdy5qb2JfaWQpID09PSBqb2JJZClcbiAgICAgIC5tYXAocm93ID0+IHRoaXMucGFyc2VNaWxlc3RvbmUocm93KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRpc3B1dGUgZm9yIGEgam9iXG4gICAqL1xuICBhc3luYyBnZXRKb2JEaXNwdXRlKGpvYklkOiBudW1iZXIpOiBQcm9taXNlPEVzY3Jvd0Rpc3B1dGUgfCBudWxsPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMuZ2V0X3RhYmxlX3Jvd3M8e1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIGpvYl9pZDogc3RyaW5nO1xuICAgICAgcmFpc2VkX2J5OiBzdHJpbmc7XG4gICAgICByZWFzb246IHN0cmluZztcbiAgICAgIGV2aWRlbmNlX3VyaTogc3RyaW5nO1xuICAgICAgY2xpZW50X2Ftb3VudDogc3RyaW5nO1xuICAgICAgYWdlbnRfYW1vdW50OiBzdHJpbmc7XG4gICAgICByZXNvbHV0aW9uOiBudW1iZXI7XG4gICAgICByZXNvbHZlcjogc3RyaW5nO1xuICAgICAgcmVzb2x1dGlvbl9ub3Rlczogc3RyaW5nO1xuICAgICAgY3JlYXRlZF9hdDogc3RyaW5nO1xuICAgICAgcmVzb2x2ZWRfYXQ6IHN0cmluZztcbiAgICB9Pih7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHNjb3BlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgdGFibGU6ICdkaXNwdXRlcycsXG4gICAgICBpbmRleF9wb3NpdGlvbjogMiwgLy8gYnlKb2IgaW5kZXhcbiAgICAgIGtleV90eXBlOiAnaTY0JyxcbiAgICAgIGxpbWl0OiAxMDAsXG4gICAgfSk7XG5cbiAgICBjb25zdCBkaXNwdXRlID0gcmVzdWx0LnJvd3MuZmluZChyb3cgPT4gc2FmZVBhcnNlSW50KHJvdy5qb2JfaWQpID09PSBqb2JJZCk7XG4gICAgaWYgKCFkaXNwdXRlKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogc2FmZVBhcnNlSW50KGRpc3B1dGUuaWQpLFxuICAgICAgam9iX2lkOiBzYWZlUGFyc2VJbnQoZGlzcHV0ZS5qb2JfaWQpLFxuICAgICAgcmFpc2VkX2J5OiBkaXNwdXRlLnJhaXNlZF9ieSxcbiAgICAgIHJlYXNvbjogZGlzcHV0ZS5yZWFzb24sXG4gICAgICBldmlkZW5jZV91cmk6IGRpc3B1dGUuZXZpZGVuY2VfdXJpLFxuICAgICAgY2xpZW50X2Ftb3VudDogc2FmZVBhcnNlSW50KGRpc3B1dGUuY2xpZW50X2Ftb3VudCksXG4gICAgICBhZ2VudF9hbW91bnQ6IHNhZmVQYXJzZUludChkaXNwdXRlLmFnZW50X2Ftb3VudCksXG4gICAgICByZXNvbHV0aW9uOiBESVNQVVRFX1JFU09MVVRJT05TW2Rpc3B1dGUucmVzb2x1dGlvbl0sXG4gICAgICByZXNvbHZlcjogZGlzcHV0ZS5yZXNvbHZlcixcbiAgICAgIHJlc29sdXRpb25fbm90ZXM6IGRpc3B1dGUucmVzb2x1dGlvbl9ub3RlcyxcbiAgICAgIGNyZWF0ZWRfYXQ6IHNhZmVQYXJzZUludChkaXNwdXRlLmNyZWF0ZWRfYXQpLFxuICAgICAgcmVzb2x2ZWRfYXQ6IHNhZmVQYXJzZUludChkaXNwdXRlLnJlc29sdmVkX2F0KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgYXZhaWxhYmxlIGFyYml0cmF0b3JzXG4gICAqL1xuICBhc3luYyBsaXN0QXJiaXRyYXRvcnMoKTogUHJvbWlzZTxBcmJpdHJhdG9yW10+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czx7XG4gICAgICBhY2NvdW50OiBzdHJpbmc7XG4gICAgICBzdGFrZTogc3RyaW5nO1xuICAgICAgZmVlX3BlcmNlbnQ6IHN0cmluZztcbiAgICAgIHRvdGFsX2Nhc2VzOiBzdHJpbmc7XG4gICAgICBzdWNjZXNzZnVsX2Nhc2VzOiBzdHJpbmc7XG4gICAgICBhY3RpdmVfZGlzcHV0ZXM6IHN0cmluZztcbiAgICAgIGFjdGl2ZTogbnVtYmVyO1xuICAgIH0+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICB0YWJsZTogJ2FyYml0cmF0b3JzJyxcbiAgICAgIGxpbWl0OiAxMDAsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NcbiAgICAgIC5maWx0ZXIocm93ID0+IHJvdy5hY3RpdmUgPT09IDEpXG4gICAgICAubWFwKHJvdyA9PiAoe1xuICAgICAgICBhY2NvdW50OiByb3cuYWNjb3VudCxcbiAgICAgICAgc3Rha2U6IHNhZmVQYXJzZUludChyb3cuc3Rha2UpLFxuICAgICAgICBmZWVfcGVyY2VudDogc2FmZVBhcnNlSW50KHJvdy5mZWVfcGVyY2VudCksXG4gICAgICAgIHRvdGFsX2Nhc2VzOiBzYWZlUGFyc2VJbnQocm93LnRvdGFsX2Nhc2VzKSxcbiAgICAgICAgc3VjY2Vzc2Z1bF9jYXNlczogc2FmZVBhcnNlSW50KHJvdy5zdWNjZXNzZnVsX2Nhc2VzKSxcbiAgICAgICAgYWN0aXZlX2Rpc3B1dGVzOiBzYWZlUGFyc2VJbnQocm93LmFjdGl2ZV9kaXNwdXRlcyksXG4gICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09IFdSSVRFIE9QRVJBVElPTlMgPT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGpvYlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlSm9iKGRhdGE6IENyZWF0ZUpvYkRhdGEpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnY3JlYXRlam9iJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGFnZW50OiBkYXRhLmFnZW50IHx8ICcnLFxuICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBkYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGRlbGl2ZXJhYmxlczogSlNPTi5zdHJpbmdpZnkoZGF0YS5kZWxpdmVyYWJsZXMpLFxuICAgICAgICAgIGFtb3VudDogZGF0YS5hbW91bnQsXG4gICAgICAgICAgc3ltYm9sOiBkYXRhLnN5bWJvbCB8fCAnWFBSJyxcbiAgICAgICAgICBkZWFkbGluZTogZGF0YS5kZWFkbGluZSB8fCAwLFxuICAgICAgICAgIGFyYml0cmF0b3I6IGRhdGEuYXJiaXRyYXRvciB8fCAnJyxcbiAgICAgICAgICBqb2JfaGFzaDogZGF0YS5qb2JfaGFzaCB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmQgYSBqb2JcbiAgICovXG4gIGFzeW5jIGZ1bmRKb2Ioam9iSWQ6IG51bWJlciwgYW1vdW50OiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiAnZW9zaW8udG9rZW4nLFxuICAgICAgICBuYW1lOiAndHJhbnNmZXInLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZnJvbTogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHRvOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICAgIHF1YW50aXR5OiBhbW91bnQsXG4gICAgICAgICAgbWVtbzogYGZ1bmQ6JHtqb2JJZH1gLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0IGEgam9iIChhcyBhZ2VudClcbiAgICovXG4gIGFzeW5jIGFjY2VwdEpvYihqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2FjY2VwdGpvYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogam9iSWQsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB3b3JraW5nIG9uIGEgam9iIChhcyBhZ2VudClcbiAgICovXG4gIGFzeW5jIHN0YXJ0Sm9iKGpvYklkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnc3RhcnRqb2InLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYWdlbnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsaXZlciBhIGpvYiAoYXMgYWdlbnQpXG4gICAqL1xuICBhc3luYyBkZWxpdmVySm9iKGpvYklkOiBudW1iZXIsIGV2aWRlbmNlVXJpOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnZGVsaXZlcicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogam9iSWQsXG4gICAgICAgICAgZXZpZGVuY2VfdXJpOiBldmlkZW5jZVVyaSxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcHJvdmUgZGVsaXZlcnkgKGFzIGNsaWVudClcbiAgICovXG4gIGFzeW5jIGFwcHJvdmVEZWxpdmVyeShqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2FwcHJvdmUnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY2xpZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgam9iX2lkOiBqb2JJZCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG1pbGVzdG9uZSB0byBhIGpvYlxuICAgKi9cbiAgYXN5bmMgYWRkTWlsZXN0b25lKGRhdGE6IEFkZE1pbGVzdG9uZURhdGEpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnYWRkbWlsZXN0b25lJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogZGF0YS5qb2JfaWQsXG4gICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgICAgYW1vdW50OiBkYXRhLmFtb3VudCxcbiAgICAgICAgICBvcmRlcjogZGF0YS5vcmRlcixcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdCBhIG1pbGVzdG9uZSAoYXMgYWdlbnQpXG4gICAqL1xuICBhc3luYyBzdWJtaXRNaWxlc3RvbmUobWlsZXN0b25lSWQ6IG51bWJlciwgZXZpZGVuY2VVcmk6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdzdWJtaXRtaWxlJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFnZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgbWlsZXN0b25lX2lkOiBtaWxlc3RvbmVJZCxcbiAgICAgICAgICBldmlkZW5jZV91cmk6IGV2aWRlbmNlVXJpLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwcm92ZSBhIG1pbGVzdG9uZSAoYXMgY2xpZW50KVxuICAgKi9cbiAgYXN5bmMgYXBwcm92ZU1pbGVzdG9uZShtaWxlc3RvbmVJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2FwcHJvdmVtaWxlJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIG1pbGVzdG9uZV9pZDogbWlsZXN0b25lSWQsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSYWlzZSBhIGRpc3B1dGVcbiAgICovXG4gIGFzeW5jIHJhaXNlRGlzcHV0ZShqb2JJZDogbnVtYmVyLCByZWFzb246IHN0cmluZywgZXZpZGVuY2VVcmk/OiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnZGlzcHV0ZScsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICByYWlzZWRfYnk6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgICBldmlkZW5jZV91cmk6IGV2aWRlbmNlVXJpIHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGEgam9iIChhcyBjbGllbnQpXG4gICAqL1xuICBhc3luYyBjYW5jZWxKb2Ioam9iSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdjYW5jZWwnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY2xpZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgam9iX2lkOiBqb2JJZCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsYWltIHRpbWVvdXQgKHJlZnVuZCBvciBhdXRvLWFwcHJvdmUpXG4gICAqL1xuICBhc3luYyBjbGFpbVRpbWVvdXQoam9iSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICd0aW1lb3V0JyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsYWltZXI6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xhaW0gYWNjZXB0YW5jZSB0aW1lb3V0IHJlZnVuZCAoYXMgY2xpZW50KVxuICAgKi9cbiAgYXN5bmMgY2xhaW1BY2NlcHRhbmNlVGltZW91dChqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2FjY3B0dGltZW91dCcsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjbGllbnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBqb2JfaWQ6IGpvYklkLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PSBCSURESU5HID09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIExpc3Qgb3BlbiBqb2JzIChhZ2VudCBub3QgYXNzaWduZWQpXG4gICAqL1xuICBhc3luYyBsaXN0T3BlbkpvYnMob3B0aW9uczogSm9iTGlzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8UGFnaW5hdGVkUmVzdWx0PEpvYj4+IHtcbiAgICBjb25zdCB7IGxpbWl0ID0gMTAwLCBjdXJzb3IgfSA9IG9wdGlvbnM7XG5cbiAgICAvLyBPcGVuIGpvYnMgYXJlIHNwYXJzZSBpbiB0aGUgdGFibGUg4oCUIHdlIG11c3QgcGFnaW5hdGUgdGhyb3VnaCBhbGwgcm93c1xuICAgIC8vIHRvIGZpbmQgZW5vdWdoIG9wZW4gam9icyAoYWdlbnQgaXMgZW1wdHkpLCBub3QganVzdCBmZXRjaCBgbGltaXRgIHJvd3MuXG4gICAgY29uc3QgQkFUQ0hfU0laRSA9IDEwMDtcbiAgICBsZXQgbG93ZXJCb3VuZCA9IGN1cnNvcjtcbiAgICBsZXQgb3BlbkpvYnM6IEpvYltdID0gW107XG4gICAgbGV0IHRhYmxlSGFzTW9yZSA9IHRydWU7XG5cbiAgICB3aGlsZSAob3BlbkpvYnMubGVuZ3RoIDwgbGltaXQgJiYgdGFibGVIYXNNb3JlKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYy5nZXRfdGFibGVfcm93czxKb2JSYXc+KHtcbiAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgICAgY29kZTogdGhpcy5jb250cmFjdCxcbiAgICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIHRhYmxlOiAnam9icycsXG4gICAgICAgIGxvd2VyX2JvdW5kOiBsb3dlckJvdW5kLFxuICAgICAgICBsaW1pdDogQkFUQ0hfU0laRSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzdWx0LnJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRhYmxlSGFzTW9yZSA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdGFibGVIYXNNb3JlID0gcmVzdWx0LnJvd3MubGVuZ3RoID09PSBCQVRDSF9TSVpFO1xuICAgICAgbG93ZXJCb3VuZCA9IHJlc3VsdC5yb3dzW3Jlc3VsdC5yb3dzLmxlbmd0aCAtIDFdLmlkICsgMTtcblxuICAgICAgbGV0IGJhdGNoID0gcmVzdWx0LnJvd3NcbiAgICAgICAgLmZpbHRlcihyb3cgPT4gcm93LmFnZW50ID09PSAnJyB8fCByb3cuYWdlbnQgPT09ICcuLi4uLi4uLi4uLi4uJylcbiAgICAgICAgLm1hcChyb3cgPT4gdGhpcy5wYXJzZUpvYihyb3cpKTtcblxuICAgICAgaWYgKG9wdGlvbnMuc3RhdGUpIHtcbiAgICAgICAgYmF0Y2ggPSBiYXRjaC5maWx0ZXIoaiA9PiBqLnN0YXRlID09PSBvcHRpb25zLnN0YXRlKTtcbiAgICAgIH1cblxuICAgICAgb3BlbkpvYnMucHVzaCguLi5iYXRjaCk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzTW9yZSA9IG9wZW5Kb2JzLmxlbmd0aCA+IGxpbWl0IHx8IHRhYmxlSGFzTW9yZTtcbiAgICBjb25zdCBpdGVtcyA9IG9wZW5Kb2JzLnNsaWNlKDAsIGxpbWl0KTtcblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtcyxcbiAgICAgIGhhc01vcmUsXG4gICAgICBuZXh0Q3Vyc29yOiBoYXNNb3JlICYmIGl0ZW1zLmxlbmd0aCA+IDAgPyBTdHJpbmcoaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0uaWQgKyAxKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBldmlkZW5jZSBVUkkgZm9yIGEgZGVsaXZlcmVkIGpvYiAoc3RvcmVkIGluIHNlcGFyYXRlIGpvYmV2aWRlbmNlIHRhYmxlKVxuICAgKi9cbiAgYXN5bmMgZ2V0Sm9iRXZpZGVuY2Uoam9iSWQ6IG51bWJlcik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPHsgam9iX2lkOiBzdHJpbmc7IGV2aWRlbmNlX3VyaTogc3RyaW5nIH0+KHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBjb2RlOiB0aGlzLmNvbnRyYWN0LFxuICAgICAgc2NvcGU6IHRoaXMuY29udHJhY3QsXG4gICAgICB0YWJsZTogJ2pvYmV2aWRlbmNlJyxcbiAgICAgIGxvd2VyX2JvdW5kOiBTdHJpbmcoam9iSWQpLFxuICAgICAgdXBwZXJfYm91bmQ6IFN0cmluZyhqb2JJZCksXG4gICAgICBsaW1pdDogMSxcbiAgICB9KTtcblxuICAgIGlmIChyZXN1bHQucm93cy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcmVzdWx0LnJvd3NbMF0uZXZpZGVuY2VfdXJpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGJpZHMgZm9yIGEgam9iXG4gICAqL1xuICBhc3luYyBsaXN0Qmlkc0ZvckpvYihqb2JJZDogbnVtYmVyKTogUHJvbWlzZTxCaWRbXT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPEJpZFJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnYmlkcycsXG4gICAgICBpbmRleF9wb3NpdGlvbjogMiwgLy8gYnlKb2IgaW5kZXhcbiAgICAgIGtleV90eXBlOiAnaTY0JyxcbiAgICAgIGxvd2VyX2JvdW5kOiBTdHJpbmcoam9iSWQpLFxuICAgICAgbGltaXQ6IDEwMCxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQucm93c1xuICAgICAgLmZpbHRlcihyb3cgPT4gc2FmZVBhcnNlSW50KHJvdy5qb2JfaWQpID09PSBqb2JJZClcbiAgICAgIC5tYXAocm93ID0+IHRoaXMucGFyc2VCaWQocm93KSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3BlY2lmaWMgYmlkXG4gICAqL1xuICBhc3luYyBnZXRCaWQoaWQ6IG51bWJlcik6IFByb21pc2U8QmlkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjLmdldF90YWJsZV9yb3dzPEJpZFJhdz4oe1xuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGNvZGU6IHRoaXMuY29udHJhY3QsXG4gICAgICBzY29wZTogdGhpcy5jb250cmFjdCxcbiAgICAgIHRhYmxlOiAnYmlkcycsXG4gICAgICBsb3dlcl9ib3VuZDogU3RyaW5nKGlkKSxcbiAgICAgIHVwcGVyX2JvdW5kOiBTdHJpbmcoaWQpLFxuICAgICAgbGltaXQ6IDEsXG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0LnJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUJpZChyZXN1bHQucm93c1swXSk7XG4gIH1cblxuICAvKipcbiAgICogU3VibWl0IGEgYmlkIG9uIGFuIG9wZW4gam9iIChhcyBhZ2VudClcbiAgICovXG4gIGFzeW5jIHN1Ym1pdEJpZChkYXRhOiBTdWJtaXRCaWREYXRhKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ3N1Ym1pdGJpZCcsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhZ2VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGpvYl9pZDogZGF0YS5qb2JfaWQsXG4gICAgICAgICAgYW1vdW50OiBkYXRhLmFtb3VudCxcbiAgICAgICAgICB0aW1lbGluZTogZGF0YS50aW1lbGluZSxcbiAgICAgICAgICBwcm9wb3NhbDogZGF0YS5wcm9wb3NhbCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhIGJpZCAoYXMgY2xpZW50KSDigJQgYXNzaWducyB0aGUgYWdlbnQgdG8gdGhlIGpvYlxuICAgKi9cbiAgYXN5bmMgc2VsZWN0QmlkKGJpZElkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnc2VsZWN0YmlkJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNsaWVudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGJpZF9pZDogYmlkSWQsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaXRoZHJhdyBhIGJpZCAoYXMgYWdlbnQpXG4gICAqL1xuICBhc3luYyB3aXRoZHJhd0JpZChiaWRJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ3dpdGhkcmF3YmlkJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFnZW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgYmlkX2lkOiBiaWRJZCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT0gQVJCSVRSQVRPUiBNQU5BR0VNRU5UID09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFzIGFuIGFyYml0cmF0b3JcbiAgICovXG4gIGFzeW5jIHJlZ2lzdGVyQXJiaXRyYXRvcihmZWVQZXJjZW50OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAncmVnYXJiJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBmZWVfcGVyY2VudDogZmVlUGVyY2VudCxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YWtlIFhQUiBhcyBhcmJpdHJhdG9yICh2aWEgdG9rZW4gdHJhbnNmZXIpXG4gICAqXG4gICAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgc3RyaW5nIChlLmcuLCBcIjEwMDAuMDAwMCBYUFJcIilcbiAgICovXG4gIGFzeW5jIHN0YWtlQXJiaXRyYXRvcihhbW91bnQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6ICdlb3Npby50b2tlbicsXG4gICAgICAgIG5hbWU6ICd0cmFuc2ZlcicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBmcm9tOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgdG86IHRoaXMuY29udHJhY3QsXG4gICAgICAgICAgcXVhbnRpdHk6IGFtb3VudCxcbiAgICAgICAgICBtZW1vOiAnYXJic3Rha2UnLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXJiaXRyYXRlIGEgZGlzcHV0ZVxuICAgKlxuICAgKiBAcGFyYW0gZGlzcHV0ZUlkIC0gVGhlIGRpc3B1dGUgdG8gcmVzb2x2ZVxuICAgKiBAcGFyYW0gY2xpZW50UGVyY2VudCAtIFBlcmNlbnRhZ2Ugb2YgcmVtYWluaW5nIGZ1bmRzIHRvIGdpdmUgdG8gY2xpZW50ICgwLTEwMClcbiAgICogQHBhcmFtIHJlc29sdXRpb25Ob3RlcyAtIEV4cGxhbmF0aW9uIG9mIHRoZSByZXNvbHV0aW9uXG4gICAqL1xuICBhc3luYyBhcmJpdHJhdGUoXG4gICAgZGlzcHV0ZUlkOiBudW1iZXIsXG4gICAgY2xpZW50UGVyY2VudDogbnVtYmVyLFxuICAgIHJlc29sdXRpb25Ob3Rlczogc3RyaW5nXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdhcmJpdHJhdGUnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYXJiaXRyYXRvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIGRpc3B1dGVfaWQ6IGRpc3B1dGVJZCxcbiAgICAgICAgICBjbGllbnRfcGVyY2VudDogY2xpZW50UGVyY2VudCxcbiAgICAgICAgICByZXNvbHV0aW9uX25vdGVzOiByZXNvbHV0aW9uTm90ZXMsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgZGlzcHV0ZSBhZnRlciB0aW1lb3V0IChvd25lci1vbmx5IGZhbGxiYWNrKS5cbiAgICogQ2FuIG9ubHkgYmUgY2FsbGVkIGFmdGVyIDE0IGRheXMgc2luY2UgZGlzcHV0ZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGRpc3B1dGVJZCAtIFRoZSBkaXNwdXRlIHRvIHJlc29sdmVcbiAgICogQHBhcmFtIGNsaWVudFBlcmNlbnQgLSBQZXJjZW50YWdlIG9mIHJlbWFpbmluZyBmdW5kcyB0byBnaXZlIHRvIGNsaWVudCAoMC0xMDApXG4gICAqIEBwYXJhbSByZXNvbHV0aW9uTm90ZXMgLSBFeHBsYW5hdGlvbiBvZiB0aGUgcmVzb2x1dGlvblxuICAgKi9cbiAgYXN5bmMgcmVzb2x2ZVRpbWVvdXQoXG4gICAgZGlzcHV0ZUlkOiBudW1iZXIsXG4gICAgY2xpZW50UGVyY2VudDogbnVtYmVyLFxuICAgIHJlc29sdXRpb25Ob3Rlczogc3RyaW5nXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdyZXNvbHZldG1vdXQnLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZGlzcHV0ZV9pZDogZGlzcHV0ZUlkLFxuICAgICAgICAgIGNsaWVudF9wZXJjZW50OiBjbGllbnRQZXJjZW50LFxuICAgICAgICAgIHJlc29sdXRpb25fbm90ZXM6IHJlc29sdXRpb25Ob3RlcyxcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIGFyYml0cmF0b3IgKG11c3QgaGF2ZSBzdWZmaWNpZW50IHN0YWtlKVxuICAgKi9cbiAgYXN5bmMgYWN0aXZhdGVBcmJpdHJhdG9yKCk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdhY3RpdmF0ZWFyYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlIGFyYml0cmF0b3IgKHN0b3AgYWNjZXB0aW5nIG5ldyBjYXNlcylcbiAgICovXG4gIGFzeW5jIGRlYWN0aXZhdGVBcmJpdHJhdG9yKCk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdkZWFjdGFyYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRvIHVuc3Rha2UgYXJiaXRyYXRvciBmdW5kcyAoNy1kYXkgZGVsYXkpLlxuICAgKiBNdXN0IGJlIGRlYWN0aXZhdGVkIGFuZCBoYXZlIG5vIHBlbmRpbmcgZGlzcHV0ZXMgZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gdW5zdGFrZSBpbiBzbWFsbGVzdCB1bml0cyAoZS5nLiwgMTAwMDAgPSAxLjAwMDAgWFBSKVxuICAgKi9cbiAgYXN5bmMgdW5zdGFrZUFyYml0cmF0b3IoYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAndW5zdGFrZWFyYicsXG4gICAgICAgIGF1dGhvcml6YXRpb246IFt7XG4gICAgICAgICAgYWN0b3I6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgICBwZXJtaXNzaW9uOiB0aGlzLnNlc3Npb24hLmF1dGgucGVybWlzc2lvbixcbiAgICAgICAgfV0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY2NvdW50OiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgYW1vdW50LFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2l0aGRyYXcgdW5zdGFrZWQgYXJiaXRyYXRvciBmdW5kcyAoYWZ0ZXIgNy1kYXkgZGVsYXkpXG4gICAqL1xuICBhc3luYyB3aXRoZHJhd0FyYml0cmF0b3JTdGFrZSgpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnd2l0aGRyYXdhcmInLFxuICAgICAgICBhdXRob3JpemF0aW9uOiBbe1xuICAgICAgICAgIGFjdG9yOiB0aGlzLnNlc3Npb24hLmF1dGguYWN0b3IsXG4gICAgICAgICAgcGVybWlzc2lvbjogdGhpcy5zZXNzaW9uIS5hdXRoLnBlcm1pc3Npb24sXG4gICAgICAgIH1dLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYWNjb3VudDogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGEgcGVuZGluZyB1bnN0YWtlIHJlcXVlc3QgKHJldHVybnMgZnVuZHMgdG8gYWN0aXZlIHN0YWtlKVxuICAgKi9cbiAgYXN5bmMgY2FuY2VsQXJiaXRyYXRvclVuc3Rha2UoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB0aGlzLnNlc3Npb24hLmxpbmsudHJhbnNhY3Qoe1xuICAgICAgYWN0aW9uczogW3tcbiAgICAgICAgYWNjb3VudDogdGhpcy5jb250cmFjdCxcbiAgICAgICAgbmFtZTogJ2NhbmNlbHVuc3RrJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGFjY291bnQ6IHRoaXMuc2Vzc2lvbiEuYXV0aC5hY3RvcixcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIHVwIGNvbXBsZXRlZCBqb2JzIChwZXJtaXNzaW9ubGVzcylcbiAgICovXG4gIGFzeW5jIGNsZWFuSm9icyhtYXhBZ2U6IG51bWJlciwgbWF4RGVsZXRlOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlU2Vzc2lvbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiEubGluay50cmFuc2FjdCh7XG4gICAgICBhY3Rpb25zOiBbe1xuICAgICAgICBhY2NvdW50OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgICBuYW1lOiAnY2xlYW5qb2JzJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG1heF9hZ2U6IG1heEFnZSxcbiAgICAgICAgICBtYXhfZGVsZXRlOiBtYXhEZWxldGUsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiB1cCByZXNvbHZlZCBkaXNwdXRlcyAocGVybWlzc2lvbmxlc3MpXG4gICAqL1xuICBhc3luYyBjbGVhbkRpc3B1dGVzKG1heEFnZTogbnVtYmVyLCBtYXhEZWxldGU6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0aGlzLnJlcXVpcmVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uIS5saW5rLnRyYW5zYWN0KHtcbiAgICAgIGFjdGlvbnM6IFt7XG4gICAgICAgIGFjY291bnQ6IHRoaXMuY29udHJhY3QsXG4gICAgICAgIG5hbWU6ICdjbGVhbmRpc3BzJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogW3tcbiAgICAgICAgICBhY3RvcjogdGhpcy5zZXNzaW9uIS5hdXRoLmFjdG9yLFxuICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMuc2Vzc2lvbiEuYXV0aC5wZXJtaXNzaW9uLFxuICAgICAgICB9XSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG1heF9hZ2U6IG1heEFnZSxcbiAgICAgICAgICBtYXhfZGVsZXRlOiBtYXhEZWxldGUsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09IEhFTFBFUlMgPT09PT09PT09PT09PT1cblxuICBwcml2YXRlIHJlcXVpcmVTZXNzaW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZXNzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nlc3Npb24gcmVxdWlyZWQgZm9yIHdyaXRlIG9wZXJhdGlvbnMnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSm9iKHJhdzogSm9iUmF3KTogSm9iIHtcbiAgICBsZXQgZGVsaXZlcmFibGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBkZWxpdmVyYWJsZXMgPSBKU09OLnBhcnNlKHJhdy5kZWxpdmVyYWJsZXMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgZGVsaXZlcmFibGVzID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBzYWZlUGFyc2VJbnQocmF3LmlkKSxcbiAgICAgIGNsaWVudDogcmF3LmNsaWVudCxcbiAgICAgIGFnZW50OiByYXcuYWdlbnQsXG4gICAgICB0aXRsZTogcmF3LnRpdGxlLFxuICAgICAgZGVzY3JpcHRpb246IHJhdy5kZXNjcmlwdGlvbixcbiAgICAgIGRlbGl2ZXJhYmxlcyxcbiAgICAgIGFtb3VudDogc2FmZVBhcnNlSW50KHJhdy5hbW91bnQpLFxuICAgICAgc3ltYm9sOiByYXcuc3ltYm9sLFxuICAgICAgZnVuZGVkX2Ftb3VudDogc2FmZVBhcnNlSW50KHJhdy5mdW5kZWRfYW1vdW50KSxcbiAgICAgIHJlbGVhc2VkX2Ftb3VudDogc2FmZVBhcnNlSW50KHJhdy5yZWxlYXNlZF9hbW91bnQpLFxuICAgICAgc3RhdGU6IEpPQl9TVEFURVNbcmF3LnN0YXRlXSB8fCAnY3JlYXRlZCcsXG4gICAgICBkZWFkbGluZTogc2FmZVBhcnNlSW50KHJhdy5kZWFkbGluZSksXG4gICAgICBhcmJpdHJhdG9yOiByYXcuYXJiaXRyYXRvcixcbiAgICAgIGpvYl9oYXNoOiByYXcuam9iX2hhc2gsXG4gICAgICBjcmVhdGVkX2F0OiBzYWZlUGFyc2VJbnQocmF3LmNyZWF0ZWRfYXQpLFxuICAgICAgdXBkYXRlZF9hdDogc2FmZVBhcnNlSW50KHJhdy51cGRhdGVkX2F0KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU1pbGVzdG9uZShyYXc6IE1pbGVzdG9uZVJhdyk6IE1pbGVzdG9uZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBzYWZlUGFyc2VJbnQocmF3LmlkKSxcbiAgICAgIGpvYl9pZDogc2FmZVBhcnNlSW50KHJhdy5qb2JfaWQpLFxuICAgICAgdGl0bGU6IHJhdy50aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiByYXcuZGVzY3JpcHRpb24sXG4gICAgICBhbW91bnQ6IHNhZmVQYXJzZUludChyYXcuYW1vdW50KSxcbiAgICAgIG9yZGVyOiByYXcub3JkZXIsXG4gICAgICBzdGF0ZTogTUlMRVNUT05FX1NUQVRFU1tyYXcuc3RhdGVdIHx8ICdwZW5kaW5nJyxcbiAgICAgIGV2aWRlbmNlX3VyaTogcmF3LmV2aWRlbmNlX3VyaSxcbiAgICAgIHN1Ym1pdHRlZF9hdDogc2FmZVBhcnNlSW50KHJhdy5zdWJtaXR0ZWRfYXQpLFxuICAgICAgYXBwcm92ZWRfYXQ6IHNhZmVQYXJzZUludChyYXcuYXBwcm92ZWRfYXQpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQmlkKHJhdzogQmlkUmF3KTogQmlkIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNhZmVQYXJzZUludChyYXcuaWQpLFxuICAgICAgam9iX2lkOiBzYWZlUGFyc2VJbnQocmF3LmpvYl9pZCksXG4gICAgICBhZ2VudDogcmF3LmFnZW50LFxuICAgICAgYW1vdW50OiBzYWZlUGFyc2VJbnQocmF3LmFtb3VudCksXG4gICAgICB0aW1lbGluZTogc2FmZVBhcnNlSW50KHJhdy50aW1lbGluZSksXG4gICAgICBwcm9wb3NhbDogcmF3LnByb3Bvc2FsLFxuICAgICAgY3JlYXRlZF9hdDogc2FmZVBhcnNlSW50KHJhdy5jcmVhdGVkX2F0KSxcbiAgICB9O1xuICB9XG59XG4iXX0=
package/dist/index.d.ts CHANGED
@@ -21,7 +21,7 @@ export declare const NETWORKS: {
21
21
  };
22
22
  readonly TESTNET: {
23
23
  readonly rpc: "https://tn1.protonnz.com";
24
- readonly hyperion: "https://proton-testnet.eosusa.io";
24
+ readonly hyperion: "https://api-xprnetwork-test.saltant.io";
25
25
  readonly chainId: "71ee83bcf52142d61019d95f9cc5427ba6a0d7ff8accd9e2088ae2abeaf3d3dd";
26
26
  };
27
27
  };
package/dist/index.js CHANGED
@@ -60,8 +60,8 @@ exports.NETWORKS = {
60
60
  },
61
61
  TESTNET: {
62
62
  rpc: 'https://tn1.protonnz.com',
63
- hyperion: 'https://proton-testnet.eosusa.io',
63
+ hyperion: 'https://api-xprnetwork-test.saltant.io',
64
64
  chainId: '71ee83bcf52142d61019d95f9cc5427ba6a0d7ff8accd9e2088ae2abeaf3d3dd',
65
65
  },
66
66
  };
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQkFBbUI7QUFDbkIsaURBQWdEO0FBQXZDLDhHQUFBLGFBQWEsT0FBQTtBQUN0Qix1REFBc0Q7QUFBN0Msb0hBQUEsZ0JBQWdCLE9BQUE7QUFDekIsMkRBQTBEO0FBQWpELHdIQUFBLGtCQUFrQixPQUFBO0FBQzNCLG1EQUFrRDtBQUF6QyxnSEFBQSxjQUFjLE9BQUE7QUFDdkIseUNBQWtEO0FBQXpDLHNHQUFBLFNBQVMsT0FBQTtBQUFFLHFHQUFBLFFBQVEsT0FBQTtBQUM1QiwyQ0FBOEY7QUFBckYsNkdBQUEsZUFBZSxPQUFBO0FBQUUsc0dBQUEsUUFBUSxPQUFBO0FBQUUsNEdBQUEsY0FBYyxPQUFBO0FBQUUsaUhBQUEsbUJBQW1CLE9BQUE7QUFrQnZFLGVBQWU7QUFDZiwwQ0FBd0I7QUFFeEIsa0JBQWtCO0FBQ2xCLGlDQVNpQjtBQVJmLDRHQUFBLG1CQUFtQixPQUFBO0FBQ25CLHVHQUFBLGNBQWMsT0FBQTtBQUNkLGtHQUFBLFNBQVMsT0FBQTtBQUNULGlHQUFBLFFBQVEsT0FBQTtBQUNSLHdHQUFBLGVBQWUsT0FBQTtBQUNmLDJHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLG1HQUFBLFVBQVUsT0FBQTtBQUNWLHFHQUFBLFlBQVksT0FBQTtBQUdkLHlCQUF5QjtBQUNaLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFdBQVcsRUFBRSxZQUFZO0lBQ3pCLFlBQVksRUFBRSxhQUFhO0NBQ25CLENBQUM7QUFFWCxvQkFBb0I7QUFDUCxRQUFBLFFBQVEsR0FBRztJQUN0QixPQUFPLEVBQUU7UUFDUCxHQUFHLEVBQUUsMEJBQTBCO1FBQy9CLFFBQVEsRUFBRSwwQkFBMEI7UUFDcEMsT0FBTyxFQUFFLGtFQUFrRTtLQUM1RTtJQUNELE9BQU8sRUFBRTtRQUNQLEdBQUcsRUFBRSwwQkFBMEI7UUFDL0IsUUFBUSxFQUFFLGtDQUFrQztRQUM1QyxPQUFPLEVBQUUsa0VBQWtFO0tBQzVFO0NBQ08sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIE1haW4gU0RLIGV4cG9ydHNcbmV4cG9ydCB7IEFnZW50UmVnaXN0cnkgfSBmcm9tICcuL0FnZW50UmVnaXN0cnknO1xuZXhwb3J0IHsgRmVlZGJhY2tSZWdpc3RyeSB9IGZyb20gJy4vRmVlZGJhY2tSZWdpc3RyeSc7XG5leHBvcnQgeyBWYWxpZGF0aW9uUmVnaXN0cnkgfSBmcm9tICcuL1ZhbGlkYXRpb25SZWdpc3RyeSc7XG5leHBvcnQgeyBFc2Nyb3dSZWdpc3RyeSB9IGZyb20gJy4vRXNjcm93UmVnaXN0cnknO1xuZXhwb3J0IHsgQTJBQ2xpZW50LCBBMkFFcnJvciB9IGZyb20gJy4vQTJBQ2xpZW50JztcbmV4cG9ydCB7IGNyZWF0ZUEyQURpZ2VzdCwgaGFzaEJvZHksIHNpZ25BMkFSZXF1ZXN0LCByZWNvdmVyQTJBUHVibGljS2V5IH0gZnJvbSAnLi9lb3Npby1hdXRoJztcblxuLy8gRXNjcm93IHR5cGVzIChleHBvcnRlZCBzZXBhcmF0ZWx5IHNpbmNlIHRoZXkncmUgZGVmaW5lZCBpbiB0aGUgcmVnaXN0cnkgZmlsZSlcbmV4cG9ydCB0eXBlIHtcbiAgSm9iLFxuICBKb2JTdGF0ZSxcbiAgTWlsZXN0b25lLFxuICBNaWxlc3RvbmVTdGF0ZSxcbiAgRXNjcm93RGlzcHV0ZSxcbiAgRGlzcHV0ZVJlc29sdXRpb24sXG4gIEFyYml0cmF0b3IsXG4gIEJpZCxcbiAgQ3JlYXRlSm9iRGF0YSxcbiAgU3VibWl0QmlkRGF0YSxcbiAgQWRkTWlsZXN0b25lRGF0YSxcbiAgSm9iTGlzdE9wdGlvbnMsXG59IGZyb20gJy4vRXNjcm93UmVnaXN0cnknO1xuXG4vLyBUeXBlIGV4cG9ydHNcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuXG4vLyBVdGlsaXR5IGV4cG9ydHNcbmV4cG9ydCB7XG4gIGNhbGN1bGF0ZVRydXN0U2NvcmUsXG4gIGdldFRydXN0UmF0aW5nLFxuICBmb3JtYXRYcHIsXG4gIHBhcnNlWHByLFxuICBmb3JtYXRUaW1lc3RhbXAsXG4gIGlzVmFsaWRBY2NvdW50TmFtZSxcbiAgaXNWYWxpZFVybCxcbiAgZ2V0S3ljV2VpZ2h0LFxufSBmcm9tICcuL3V0aWxzJztcblxuLy8gRGVmYXVsdCBjb250cmFjdCBuYW1lc1xuZXhwb3J0IGNvbnN0IENPTlRSQUNUUyA9IHtcbiAgQUdFTlRfQ09SRTogJ2FnZW50Y29yZScsXG4gIEFHRU5UX0ZFRUQ6ICdhZ2VudGZlZWQnLFxuICBBR0VOVF9WQUxJRDogJ2FnZW50dmFsaWQnLFxuICBBR0VOVF9FU0NST1c6ICdhZ2VudGVzY3JvdycsXG59IGFzIGNvbnN0O1xuXG4vLyBOZXR3b3JrIGVuZHBvaW50c1xuZXhwb3J0IGNvbnN0IE5FVFdPUktTID0ge1xuICBNQUlOTkVUOiB7XG4gICAgcnBjOiAnaHR0cHM6Ly9wcm90b24uZW9zdXNhLmlvJyxcbiAgICBoeXBlcmlvbjogJ2h0dHBzOi8vcHJvdG9uLmVvc3VzYS5pbycsXG4gICAgY2hhaW5JZDogJzM4NGRhODg4MTEyMDI3ZjAzMjE4NTBhMTY5ZjczN2MzM2U1M2IzODhhYWQ0OGI1YWRhY2U0YmFiOTdmNDM3ZTAnLFxuICB9LFxuICBURVNUTkVUOiB7XG4gICAgcnBjOiAnaHR0cHM6Ly90bjEucHJvdG9ubnouY29tJyxcbiAgICBoeXBlcmlvbjogJ2h0dHBzOi8vcHJvdG9uLXRlc3RuZXQuZW9zdXNhLmlvJyxcbiAgICBjaGFpbklkOiAnNzFlZTgzYmNmNTIxNDJkNjEwMTlkOTVmOWNjNTQyN2JhNmEwZDdmZjhhY2NkOWUyMDg4YWUyYWJlYWYzZDNkZCcsXG4gIH0sXG59IGFzIGNvbnN0O1xuIl19
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQkFBbUI7QUFDbkIsaURBQWdEO0FBQXZDLDhHQUFBLGFBQWEsT0FBQTtBQUN0Qix1REFBc0Q7QUFBN0Msb0hBQUEsZ0JBQWdCLE9BQUE7QUFDekIsMkRBQTBEO0FBQWpELHdIQUFBLGtCQUFrQixPQUFBO0FBQzNCLG1EQUFrRDtBQUF6QyxnSEFBQSxjQUFjLE9BQUE7QUFDdkIseUNBQWtEO0FBQXpDLHNHQUFBLFNBQVMsT0FBQTtBQUFFLHFHQUFBLFFBQVEsT0FBQTtBQUM1QiwyQ0FBOEY7QUFBckYsNkdBQUEsZUFBZSxPQUFBO0FBQUUsc0dBQUEsUUFBUSxPQUFBO0FBQUUsNEdBQUEsY0FBYyxPQUFBO0FBQUUsaUhBQUEsbUJBQW1CLE9BQUE7QUFrQnZFLGVBQWU7QUFDZiwwQ0FBd0I7QUFFeEIsa0JBQWtCO0FBQ2xCLGlDQVNpQjtBQVJmLDRHQUFBLG1CQUFtQixPQUFBO0FBQ25CLHVHQUFBLGNBQWMsT0FBQTtBQUNkLGtHQUFBLFNBQVMsT0FBQTtBQUNULGlHQUFBLFFBQVEsT0FBQTtBQUNSLHdHQUFBLGVBQWUsT0FBQTtBQUNmLDJHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLG1HQUFBLFVBQVUsT0FBQTtBQUNWLHFHQUFBLFlBQVksT0FBQTtBQUdkLHlCQUF5QjtBQUNaLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFdBQVcsRUFBRSxZQUFZO0lBQ3pCLFlBQVksRUFBRSxhQUFhO0NBQ25CLENBQUM7QUFFWCxvQkFBb0I7QUFDUCxRQUFBLFFBQVEsR0FBRztJQUN0QixPQUFPLEVBQUU7UUFDUCxHQUFHLEVBQUUsMEJBQTBCO1FBQy9CLFFBQVEsRUFBRSwwQkFBMEI7UUFDcEMsT0FBTyxFQUFFLGtFQUFrRTtLQUM1RTtJQUNELE9BQU8sRUFBRTtRQUNQLEdBQUcsRUFBRSwwQkFBMEI7UUFDL0IsUUFBUSxFQUFFLHdDQUF3QztRQUNsRCxPQUFPLEVBQUUsa0VBQWtFO0tBQzVFO0NBQ08sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIE1haW4gU0RLIGV4cG9ydHNcbmV4cG9ydCB7IEFnZW50UmVnaXN0cnkgfSBmcm9tICcuL0FnZW50UmVnaXN0cnknO1xuZXhwb3J0IHsgRmVlZGJhY2tSZWdpc3RyeSB9IGZyb20gJy4vRmVlZGJhY2tSZWdpc3RyeSc7XG5leHBvcnQgeyBWYWxpZGF0aW9uUmVnaXN0cnkgfSBmcm9tICcuL1ZhbGlkYXRpb25SZWdpc3RyeSc7XG5leHBvcnQgeyBFc2Nyb3dSZWdpc3RyeSB9IGZyb20gJy4vRXNjcm93UmVnaXN0cnknO1xuZXhwb3J0IHsgQTJBQ2xpZW50LCBBMkFFcnJvciB9IGZyb20gJy4vQTJBQ2xpZW50JztcbmV4cG9ydCB7IGNyZWF0ZUEyQURpZ2VzdCwgaGFzaEJvZHksIHNpZ25BMkFSZXF1ZXN0LCByZWNvdmVyQTJBUHVibGljS2V5IH0gZnJvbSAnLi9lb3Npby1hdXRoJztcblxuLy8gRXNjcm93IHR5cGVzIChleHBvcnRlZCBzZXBhcmF0ZWx5IHNpbmNlIHRoZXkncmUgZGVmaW5lZCBpbiB0aGUgcmVnaXN0cnkgZmlsZSlcbmV4cG9ydCB0eXBlIHtcbiAgSm9iLFxuICBKb2JTdGF0ZSxcbiAgTWlsZXN0b25lLFxuICBNaWxlc3RvbmVTdGF0ZSxcbiAgRXNjcm93RGlzcHV0ZSxcbiAgRGlzcHV0ZVJlc29sdXRpb24sXG4gIEFyYml0cmF0b3IsXG4gIEJpZCxcbiAgQ3JlYXRlSm9iRGF0YSxcbiAgU3VibWl0QmlkRGF0YSxcbiAgQWRkTWlsZXN0b25lRGF0YSxcbiAgSm9iTGlzdE9wdGlvbnMsXG59IGZyb20gJy4vRXNjcm93UmVnaXN0cnknO1xuXG4vLyBUeXBlIGV4cG9ydHNcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuXG4vLyBVdGlsaXR5IGV4cG9ydHNcbmV4cG9ydCB7XG4gIGNhbGN1bGF0ZVRydXN0U2NvcmUsXG4gIGdldFRydXN0UmF0aW5nLFxuICBmb3JtYXRYcHIsXG4gIHBhcnNlWHByLFxuICBmb3JtYXRUaW1lc3RhbXAsXG4gIGlzVmFsaWRBY2NvdW50TmFtZSxcbiAgaXNWYWxpZFVybCxcbiAgZ2V0S3ljV2VpZ2h0LFxufSBmcm9tICcuL3V0aWxzJztcblxuLy8gRGVmYXVsdCBjb250cmFjdCBuYW1lc1xuZXhwb3J0IGNvbnN0IENPTlRSQUNUUyA9IHtcbiAgQUdFTlRfQ09SRTogJ2FnZW50Y29yZScsXG4gIEFHRU5UX0ZFRUQ6ICdhZ2VudGZlZWQnLFxuICBBR0VOVF9WQUxJRDogJ2FnZW50dmFsaWQnLFxuICBBR0VOVF9FU0NST1c6ICdhZ2VudGVzY3JvdycsXG59IGFzIGNvbnN0O1xuXG4vLyBOZXR3b3JrIGVuZHBvaW50c1xuZXhwb3J0IGNvbnN0IE5FVFdPUktTID0ge1xuICBNQUlOTkVUOiB7XG4gICAgcnBjOiAnaHR0cHM6Ly9wcm90b24uZW9zdXNhLmlvJyxcbiAgICBoeXBlcmlvbjogJ2h0dHBzOi8vcHJvdG9uLmVvc3VzYS5pbycsXG4gICAgY2hhaW5JZDogJzM4NGRhODg4MTEyMDI3ZjAzMjE4NTBhMTY5ZjczN2MzM2U1M2IzODhhYWQ0OGI1YWRhY2U0YmFiOTdmNDM3ZTAnLFxuICB9LFxuICBURVNUTkVUOiB7XG4gICAgcnBjOiAnaHR0cHM6Ly90bjEucHJvdG9ubnouY29tJyxcbiAgICBoeXBlcmlvbjogJ2h0dHBzOi8vYXBpLXhwcm5ldHdvcmstdGVzdC5zYWx0YW50LmlvJyxcbiAgICBjaGFpbklkOiAnNzFlZTgzYmNmNTIxNDJkNjEwMTlkOTVmOWNjNTQyN2JhNmEwZDdmZjhhY2NkOWUyMDg4YWUyYWJlYWYzZDNkZCcsXG4gIH0sXG59IGFzIGNvbnN0O1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xpr-agents/sdk",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "TypeScript SDK for XPR Network Trustless Agent Registry - register agents, submit feedback, validate outputs, and manage escrow jobs",
5
5
  "author": "XPR Network",
6
6
  "license": "MIT",