@vendasta/billing 14.45.0 → 14.47.0

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.
Files changed (41) hide show
  1. package/esm2022/lib/_internal/enums/index.mjs +2 -2
  2. package/esm2022/lib/_internal/enums/tax-rule.enum.mjs +7 -1
  3. package/esm2022/lib/_internal/interfaces/annotations.interface.mjs +1 -1
  4. package/esm2022/lib/_internal/interfaces/api.interface.mjs +1 -1
  5. package/esm2022/lib/_internal/interfaces/billable-item.interface.mjs +1 -1
  6. package/esm2022/lib/_internal/interfaces/index.mjs +1 -1
  7. package/esm2022/lib/_internal/interfaces/invoice.interface.mjs +1 -1
  8. package/esm2022/lib/_internal/interfaces/pricing-plan-product.interface.mjs +1 -1
  9. package/esm2022/lib/_internal/interfaces/subscription.interface.mjs +1 -1
  10. package/esm2022/lib/_internal/interfaces/tax-rule.interface.mjs +1 -1
  11. package/esm2022/lib/_internal/objects/annotations.mjs +21 -1
  12. package/esm2022/lib/_internal/objects/api.mjs +4 -1
  13. package/esm2022/lib/_internal/objects/billable-item.mjs +56 -27
  14. package/esm2022/lib/_internal/objects/index.mjs +6 -6
  15. package/esm2022/lib/_internal/objects/invoice.mjs +36 -1
  16. package/esm2022/lib/_internal/objects/pricing-plan-product.mjs +5 -5
  17. package/esm2022/lib/_internal/objects/subscription.mjs +7 -1
  18. package/esm2022/lib/_internal/objects/tax-rule.mjs +44 -1
  19. package/esm2022/lib/_internal/tax.api.service.mjs +7 -2
  20. package/fesm2022/vendasta-billing.mjs +178 -31
  21. package/fesm2022/vendasta-billing.mjs.map +1 -1
  22. package/lib/_internal/enums/index.d.ts +1 -1
  23. package/lib/_internal/enums/tax-rule.enum.d.ts +5 -0
  24. package/lib/_internal/interfaces/annotations.interface.d.ts +3 -0
  25. package/lib/_internal/interfaces/api.interface.d.ts +1 -0
  26. package/lib/_internal/interfaces/billable-item.interface.d.ts +10 -5
  27. package/lib/_internal/interfaces/index.d.ts +5 -5
  28. package/lib/_internal/interfaces/invoice.interface.d.ts +6 -0
  29. package/lib/_internal/interfaces/pricing-plan-product.interface.d.ts +2 -2
  30. package/lib/_internal/interfaces/subscription.interface.d.ts +2 -0
  31. package/lib/_internal/interfaces/tax-rule.interface.d.ts +6 -0
  32. package/lib/_internal/objects/annotations.d.ts +6 -0
  33. package/lib/_internal/objects/api.d.ts +1 -0
  34. package/lib/_internal/objects/billable-item.d.ts +16 -8
  35. package/lib/_internal/objects/index.d.ts +5 -5
  36. package/lib/_internal/objects/invoice.d.ts +9 -0
  37. package/lib/_internal/objects/pricing-plan-product.d.ts +6 -6
  38. package/lib/_internal/objects/subscription.d.ts +2 -0
  39. package/lib/_internal/objects/tax-rule.d.ts +12 -0
  40. package/lib/_internal/tax.api.service.d.ts +3 -2
  41. package/package.json +1 -1
@@ -302,9 +302,9 @@ export class ListPricingPlanProductsResponse {
302
302
  return toReturn;
303
303
  }
304
304
  }
305
- export class PricingPlanProductPricingEntry {
305
+ export class CreatePricingPlanProductRequestPricingEntry {
306
306
  static fromProto(proto) {
307
- let m = new PricingPlanProductPricingEntry();
307
+ let m = new CreatePricingPlanProductRequestPricingEntry();
308
308
  m = Object.assign(m, proto);
309
309
  if (proto.value) {
310
310
  m.value = PricingPlanProductPricing.fromProto(proto.value);
@@ -328,9 +328,9 @@ export class PricingPlanProductPricingEntry {
328
328
  return toReturn;
329
329
  }
330
330
  }
331
- export class CreatePricingPlanProductRequestPricingEntry {
331
+ export class PricingPlanProductPricingEntry {
332
332
  static fromProto(proto) {
333
- let m = new CreatePricingPlanProductRequestPricingEntry();
333
+ let m = new PricingPlanProductPricingEntry();
334
334
  m = Object.assign(m, proto);
335
335
  if (proto.value) {
336
336
  m.value = PricingPlanProductPricing.fromProto(proto.value);
@@ -610,4 +610,4 @@ export class UpsertWholesalePricingRequest {
610
610
  return toReturn;
611
611
  }
612
612
  }
613
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2luZy1wbGFuLXByb2R1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9iaWxsaW5nX3Nkay9zcmMvbGliL19pbnRlcm5hbC9vYmplY3RzL3ByaWNpbmctcGxhbi1wcm9kdWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxLQUFLLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFOUIsTUFBTSxVQUFVLGlCQUFpQixDQUFJLE9BQVksRUFBRSxLQUFhO0lBQzlELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxPQUFPLCtCQUErQjtJQVd4QyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSwrQkFBK0IsRUFBRSxDQUFDO1FBQzlDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFBQyxDQUFDLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFjLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQUM7UUFDbEcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtB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QyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQWMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUNsRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUN6SyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FBQztRQUN6RCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUFDO1FBQzVELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLENBQW9CLENBQUMsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQUM7UUFDM0csSUFBSSxLQUFL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Q0FBQyx3QkFBd0IsQ0FBQztTQUFDO1FBQy9RLElBQUksT0FBTyxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsc0JBQThCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztTQUFDO1FBQ25RLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbW1pdG1lbnQgfSBmcm9tICcuL2NvbW1pdG1lbnQnO1xuaW1wb3J0IHsgRmllbGRNYXNrIH0gZnJvbSAnLi9maWVsZC1tYXNrJztcbmltcG9ydCB7IFBhZ2VkUmVxdWVzdE9wdGlvbnMsIFBhZ2VkUmVzcG9uc2VNZXRhZGF0YSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IFByaWNpbmdQbGFuUHJvZHVjdFByaWNpbmcgfSBmcm9tICcuL3ByaWNpbmctcGxhbic7XG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBwcmljaW5nUGxhbklkOiBzdHJpbmc7XG4gICAgc2t1OiBzdHJpbmc7XG4gICAgZnJlcXVlbmN5OiBlLkZyZXF1ZW5jeTtcbiAgICBwcmljaW5nOiB7W2tleTogc3RyaW5nXTogUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZ307XG4gICAgY29tbWl0bWVudDogQ29tbWl0bWVudDtcbiAgICBzdHJhdGVneTogZS5CaWxsaW5nU3RyYXRlZ3k7XG4gICAgdm9sdW1lQ29tbWl0bWVudDogbnVtYmVyO1xuICAgIHZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdDogRGF0ZTtcbiAgICB2b2x1bWVDb21taXRtZW50RW5kc0F0OiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZnJlcXVlbmN5KSB7bS5mcmVxdWVuY3kgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkZyZXF1ZW5jeT4oZS5GcmVxdWVuY3ksIHByb3RvLmZyZXF1ZW5jeSk7fVxuICAgICAgICBpZiAocHJvdG8ucHJpY2luZykge20ucHJpY2luZyA9IE9iamVjdC5rZXlzKHByb3RvLnByaWNpbmcpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZy5mcm9tUHJvdG8ocHJvdG8ucHJpY2luZ1trXSk7IHJldHVybiBvYmo7IH0sIHt9KTt9XG4gICAgICAgIGlmIChwcm90by5jb21taXRtZW50KSB7bS5jb21taXRtZW50ID0gQ29tbWl0bWVudC5mcm9tUHJvdG8ocHJvdG8uY29tbWl0bWVudCk7fVxuICAgICAgICBpZiAocHJvdG8uc3RyYXRlZ3kpIHttLnN0cmF0ZWd5ID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5CaWxsaW5nU3RyYXRlZ3k+KGUuQmlsbGluZ1N0cmF0ZWd5LCBwcm90by5zdHJhdGVneSk7fVxuICAgICAgICBpZiAocHJvdG8udm9sdW1lQ29tbWl0bWVudCkge20udm9sdW1lQ29tbWl0bWVudCA9IHBhcnNlSW50KHByb3RvLnZvbHVtZUNvbW1pdG1lbnQsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by52b2x1bWVDb21taXRtZW50U3RhcnRzQXQpIHttLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCA9IG5ldyBEYXRlKHByb3RvLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCk7fVxuICAgICAgICBpZiAocHJvdG8udm9sdW1lQ29tbWl0bWVudEVuZHNBdCkge20udm9sdW1lQ29tbWl0bWVudEVuZHNBdCA9IG5ldyBEYXRlKHByb3RvLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZ1BsYW5JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJpY2luZ1BsYW5JZCddID0gdGhpcy5wcmljaW5nUGxhbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1J10gPSB0aGlzLnNrdTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mcmVxdWVuY3kgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ZyZXF1ZW5jeSddID0gdGhpcy5mcmVxdWVuY3k7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcmljaW5nICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ByaWNpbmcnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucHJpY2luZyA/ICh0aGlzLnByaWNpbmcgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucHJpY2luZzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21taXRtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbW1pdG1lbnQgIT09IG51bGwpIHt0b1JldHVyblsnY29tbWl0bWVudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb21taXRtZW50ID8gKHRoaXMuY29tbWl0bWVudCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb21taXRtZW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0cmF0ZWd5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdHJhdGVneSddID0gdGhpcy5zdHJhdGVneTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52b2x1bWVDb21taXRtZW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2b2x1bWVDb21taXRtZW50J10gPSB0aGlzLnZvbHVtZUNvbW1pdG1lbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCAhPT0gbnVsbCkge3RvUmV0dXJuWyd2b2x1bWVDb21taXRtZW50U3RhcnRzQXQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ID8gKHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQgIT09IG51bGwpIHt0b1JldHVyblsndm9sdW1lQ29tbWl0bWVudEVuZHNBdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0ID8gKHRoaXMudm9sdW1lQ29tbWl0bWVudEVuZHNBdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlc3BvbnNlIGltcGxlbWVudHMgaS5DcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcHJpY2luZ1BsYW5JZDogc3RyaW5nO1xuICAgIHNrdTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljaW5nUGxhbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmljaW5nUGxhbklkJ10gPSB0aGlzLnByaWNpbmdQbGFuSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHByaWNpbmdQbGFuSWQ6IHN0cmluZztcbiAgICBza3U6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZ1BsYW5JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJpY2luZ1BsYW5JZCddID0gdGhpcy5wcmljaW5nUGxhbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1J10gPSB0aGlzLnNrdTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3QgaW1wbGVtZW50cyBpLkdldE11bHRpUHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgcHJpY2luZ1BsYW5JZDogc3RyaW5nO1xuICAgIHNrdXM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljaW5nUGxhbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmljaW5nUGxhbklkJ10gPSB0aGlzLnByaWNpbmdQbGFuSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1cyddID0gdGhpcy5za3VzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHByaWNpbmdQbGFuUHJvZHVjdHM6IFByaWNpbmdQbGFuUHJvZHVjdFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucHJpY2luZ1BsYW5Qcm9kdWN0cykge20ucHJpY2luZ1BsYW5Qcm9kdWN0cyA9IHByb3RvLnByaWNpbmdQbGFuUHJvZHVjdHMubWFwKFByaWNpbmdQbGFuUHJvZHVjdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVByaWNpbmdQbGFuUHJvZHVjdFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZ1BsYW5Qcm9kdWN0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcmljaW5nUGxhblByb2R1Y3RzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ByaWNpbmdQbGFuUHJvZHVjdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucHJpY2luZ1BsYW5Qcm9kdWN0cyA/ICh0aGlzLnByaWNpbmdQbGFuUHJvZHVjdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucHJpY2luZ1BsYW5Qcm9kdWN0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBwcmljaW5nUGxhbklkOiBzdHJpbmc7XG4gICAgc2t1OiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNpbmdQbGFuSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByaWNpbmdQbGFuSWQnXSA9IHRoaXMucHJpY2luZ1BsYW5JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5za3UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NrdSddID0gdGhpcy5za3U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFByaWNpbmdQbGFuUHJvZHVjdFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwcmljaW5nUGxhblByb2R1Y3Q6IFByaWNpbmdQbGFuUHJvZHVjdDtcbiAgICBwcmljaW5nUGxhbkRlZmF1bHRTdHJhdGVneTogZS5CaWxsaW5nU3RyYXRlZ3k7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFByaWNpbmdQbGFuUHJvZHVjdFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnByaWNpbmdQbGFuUHJvZHVjdCkge20ucHJpY2luZ1BsYW5Qcm9kdWN0ID0gUHJpY2luZ1BsYW5Qcm9kdWN0LmZyb21Qcm90byhwcm90by5wcmljaW5nUGxhblByb2R1Y3QpO31cbiAgICAgICAgaWYgKHByb3RvLnByaWNpbmdQbGFuRGVmYXVsdFN0cmF0ZWd5KSB7bS5wcmljaW5nUGxhbkRlZmF1bHRTdHJhdGVneSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQmlsbGluZ1N0cmF0ZWd5PihlLkJpbGxpbmdTdHJhdGVneSwgcHJvdG8ucHJpY2luZ1BsYW5EZWZhdWx0U3RyYXRlZ3kpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNpbmdQbGFuUHJvZHVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcmljaW5nUGxhblByb2R1Y3QgIT09IG51bGwpIHt0b1JldHVyblsncHJpY2luZ1BsYW5Qcm9kdWN0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnByaWNpbmdQbGFuUHJvZHVjdCA/ICh0aGlzLnByaWNpbmdQbGFuUHJvZHVjdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wcmljaW5nUGxhblByb2R1Y3Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZ1BsYW5EZWZhdWx0U3RyYXRlZ3kgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByaWNpbmdQbGFuRGVmYXVsdFN0cmF0ZWd5J10gPSB0aGlzLnByaWNpbmdQbGFuRGVmYXVsdFN0cmF0ZWd5O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RQcmljaW5nUGxhblByb2R1Y3RzUmVxdWVzdExpc3RQcmljaW5nUGxhblByb2R1Y3RzRmlsdGVycyBpbXBsZW1lbnRzIGkuTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0TGlzdFByaWNpbmdQbGFuUHJvZHVjdHNGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBza3U6IHN0cmluZztcbiAgICBwcmljaW5nUGxhbklkczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c1JlcXVlc3RMaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c0ZpbHRlcnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c1JlcXVlc3RMaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c0ZpbHRlcnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RQcmljaW5nUGxhblByb2R1Y3RzUmVxdWVzdExpc3RQcmljaW5nUGxhblByb2R1Y3RzRmlsdGVyc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1J10gPSB0aGlzLnNrdTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljaW5nUGxhbklkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJpY2luZ1BsYW5JZHMnXSA9IHRoaXMucHJpY2luZ1BsYW5JZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHNrdTogc3RyaW5nO1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnM7XG4gICAgZmlsdGVyczogTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0TGlzdFByaWNpbmdQbGFuUHJvZHVjdHNGaWx0ZXJzO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ09wdGlvbnMpIHttLnBhZ2luZ09wdGlvbnMgPSBQYWdlZFJlcXVlc3RPcHRpb25zLmZyb21Qcm90byhwcm90by5wYWdpbmdPcHRpb25zKTt9XG4gICAgICAgIGlmIChwcm90by5maWx0ZXJzKSB7bS5maWx0ZXJzID0gTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0TGlzdFByaWNpbmdQbGFuUHJvZHVjdHNGaWx0ZXJzLmZyb21Qcm90byhwcm90by5maWx0ZXJzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdPcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ09wdGlvbnMgPyAodGhpcy5wYWdpbmdPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ09wdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWx0ZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpbHRlcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmlsdGVycyA/ICh0aGlzLmZpbHRlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmlsdGVyczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwcm9kdWN0czogUHJpY2luZ1BsYW5Qcm9kdWN0W107XG4gICAgcGFnaW5nTWV0YWRhdGE6IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RQcmljaW5nUGxhblByb2R1Y3RzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnByb2R1Y3RzKSB7bS5wcm9kdWN0cyA9IHByb3RvLnByb2R1Y3RzLm1hcChQcmljaW5nUGxhblByb2R1Y3QuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdNZXRhZGF0YSkge20ucGFnaW5nTWV0YWRhdGEgPSBQYWdlZFJlc3BvbnNlTWV0YWRhdGEuZnJvbVByb3RvKHByb3RvLnBhZ2luZ01ldGFkYXRhKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb2R1Y3RzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByb2R1Y3RzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Byb2R1Y3RzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnByb2R1Y3RzID8gKHRoaXMucHJvZHVjdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucHJvZHVjdHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nTWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nTWV0YWRhdGEgPyAodGhpcy5wYWdpbmdNZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdNZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nRW50cnkgaW1wbGVtZW50cyBpLlByaWNpbmdQbGFuUHJvZHVjdFByaWNpbmdFbnRyeUludGVyZmFjZSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IFByaWNpbmdQbGFuUHJvZHVjdFByaWNpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nRW50cnkge1xuICAgICAgICBsZXQgbSA9IG5ldyBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nRW50cnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmFsdWUpIHttLnZhbHVlID0gUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZy5mcm9tUHJvdG8ocHJvdG8udmFsdWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5QcmljaW5nUGxhblByb2R1Y3RQcmljaW5nRW50cnlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tleSddID0gdGhpcy5rZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudmFsdWUgIT09IG51bGwpIHt0b1JldHVyblsndmFsdWUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudmFsdWUgPyAodGhpcy52YWx1ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52YWx1ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0UHJpY2luZ0VudHJ5IGltcGxlbWVudHMgaS5DcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0UHJpY2luZ0VudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RQcmljaW5nRW50cnkge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0UHJpY2luZ0VudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnZhbHVlKSB7bS52YWx1ZSA9IFByaWNpbmdQbGFuUHJvZHVjdFByaWNpbmcuZnJvbVByb3RvKHByb3RvLnZhbHVlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdFByaWNpbmdFbnRyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsna2V5J10gPSB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd2YWx1ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52YWx1ZSA/ICh0aGlzLnZhbHVlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RQcmljaW5nRW50cnkgaW1wbGVtZW50cyBpLlVwZGF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RQcmljaW5nRW50cnlJbnRlcmZhY2Uge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdFByaWNpbmdFbnRyeSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RQcmljaW5nRW50cnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmFsdWUpIHttLnZhbHVlID0gUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZy5mcm9tUHJvdG8ocHJvdG8udmFsdWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0UHJpY2luZ0VudHJ5SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMua2V5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydrZXknXSA9IHRoaXMua2V5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZhbHVlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZhbHVlID8gKHRoaXMudmFsdWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudmFsdWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJpY2luZ1BsYW5Qcm9kdWN0IGltcGxlbWVudHMgaS5QcmljaW5nUGxhblByb2R1Y3RJbnRlcmZhY2Uge1xuICAgIHByaWNpbmdQbGFuSWQ6IHN0cmluZztcbiAgICBza3U6IHN0cmluZztcbiAgICBmcmVxdWVuY3k6IGUuRnJlcXVlbmN5O1xuICAgIHByaWNpbmc6IHtba2V5OiBzdHJpbmddOiBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nfTtcbiAgICBjb21taXRtZW50OiBDb21taXRtZW50O1xuICAgIGNyZWF0ZWQ6IERhdGU7XG4gICAgbW9kaWZpZWQ6IERhdGU7XG4gICAgc3RyYXRlZ3k6IGUuQmlsbGluZ1N0cmF0ZWd5O1xuICAgIHZvbHVtZUNvbW1pdG1lbnQ6IG51bWJlcjtcbiAgICB2b2x1bWVDb21taXRtZW50U3RhcnRzQXQ6IERhdGU7XG4gICAgdm9sdW1lQ29tbWl0bWVudEVuZHNBdDogRGF0ZTtcbiAgICBwcmljaW5nVHlwZTogZS5Qcm9kdWN0UHJpY2luZ1R5cGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQcmljaW5nUGxhblByb2R1Y3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBQcmljaW5nUGxhblByb2R1Y3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZnJlcXVlbmN5KSB7bS5mcmVxdWVuY3kgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkZyZXF1ZW5jeT4oZS5GcmVxdWVuY3ksIHByb3RvLmZyZXF1ZW5jeSk7fVxuICAgICAgICBpZiAocHJvdG8ucHJpY2luZykge20ucHJpY2luZyA9IE9iamVjdC5rZXlzKHByb3RvLnByaWNpbmcpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZy5mcm9tUHJvdG8ocHJvdG8ucHJpY2luZ1trXSk7IHJldHVybiBvYmo7IH0sIHt9KTt9XG4gICAgICAgIGlmIChwcm90by5jb21taXRtZW50KSB7bS5jb21taXRtZW50ID0gQ29tbWl0bWVudC5mcm9tUHJvdG8ocHJvdG8uY29tbWl0bWVudCk7fVxuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZCkge20uY3JlYXRlZCA9IG5ldyBEYXRlKHByb3RvLmNyZWF0ZWQpO31cbiAgICAgICAgaWYgKHByb3RvLm1vZGlmaWVkKSB7bS5tb2RpZmllZCA9IG5ldyBEYXRlKHByb3RvLm1vZGlmaWVkKTt9XG4gICAgICAgIGlmIChwcm90by5zdHJhdGVneSkge20uc3RyYXRlZ3kgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkJpbGxpbmdTdHJhdGVneT4oZS5CaWxsaW5nU3RyYXRlZ3ksIHByb3RvLnN0cmF0ZWd5KTt9XG4gICAgICAgIGlmIChwcm90by52b2x1bWVDb21taXRtZW50KSB7bS52b2x1bWVDb21taXRtZW50ID0gcGFyc2VJbnQocHJvdG8udm9sdW1lQ29tbWl0bWVudCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCkge20udm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ID0gbmV3IERhdGUocHJvdG8udm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0KTt9XG4gICAgICAgIGlmIChwcm90by52b2x1bWVDb21taXRtZW50RW5kc0F0KSB7bS52b2x1bWVDb21taXRtZW50RW5kc0F0ID0gbmV3IERhdGUocHJvdG8udm9sdW1lQ29tbWl0bWVudEVuZHNBdCk7fVxuICAgICAgICBpZiAocHJvdG8ucHJpY2luZ1R5cGUpIHttLnByaWNpbmdUeXBlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5Qcm9kdWN0UHJpY2luZ1R5cGU+KGUuUHJvZHVjdFByaWNpbmdUeXBlLCBwcm90by5wcmljaW5nVHlwZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlByaWNpbmdQbGFuUHJvZHVjdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNpbmdQbGFuSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByaWNpbmdQbGFuSWQnXSA9IHRoaXMucHJpY2luZ1BsYW5JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5za3UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NrdSddID0gdGhpcy5za3U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnJlcXVlbmN5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydmcmVxdWVuY3knXSA9IHRoaXMuZnJlcXVlbmN5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNpbmcgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucHJpY2luZyAhPT0gbnVsbCkge3RvUmV0dXJuWydwcmljaW5nJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnByaWNpbmcgPyAodGhpcy5wcmljaW5nIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnByaWNpbmc7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29tbWl0bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb21taXRtZW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbW1pdG1lbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29tbWl0bWVudCA/ICh0aGlzLmNvbW1pdG1lbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29tbWl0bWVudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jcmVhdGVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNyZWF0ZWQgIT09IG51bGwpIHt0b1JldHVyblsnY3JlYXRlZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jcmVhdGVkID8gKHRoaXMuY3JlYXRlZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jcmVhdGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1vZGlmaWVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1vZGlmaWVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ21vZGlmaWVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1vZGlmaWVkID8gKHRoaXMubW9kaWZpZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubW9kaWZpZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RyYXRlZ3kgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0cmF0ZWd5J10gPSB0aGlzLnN0cmF0ZWd5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZvbHVtZUNvbW1pdG1lbnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZvbHVtZUNvbW1pdG1lbnQnXSA9IHRoaXMudm9sdW1lQ29tbWl0bWVudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52b2x1bWVDb21taXRtZW50U3RhcnRzQXQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52b2x1bWVDb21taXRtZW50U3RhcnRzQXQgPyAodGhpcy52b2x1bWVDb21taXRtZW50U3RhcnRzQXQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudm9sdW1lQ29tbWl0bWVudEVuZHNBdCAhPT0gbnVsbCkge3RvUmV0dXJuWyd2b2x1bWVDb21taXRtZW50RW5kc0F0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQgPyAodGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZ1R5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByaWNpbmdUeXBlJ10gPSB0aGlzLnByaWNpbmdUeXBlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHByaWNpbmdQbGFuSWQ6IHN0cmluZztcbiAgICBza3U6IHN0cmluZztcbiAgICBmcmVxdWVuY3k6IGUuRnJlcXVlbmN5O1xuICAgIHByaWNpbmc6IHtba2V5OiBzdHJpbmddOiBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nfTtcbiAgICBjb21taXRtZW50OiBDb21taXRtZW50O1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuICAgIHN0cmF0ZWd5OiBlLkJpbGxpbmdTdHJhdGVneTtcbiAgICB2b2x1bWVDb21taXRtZW50OiBudW1iZXI7XG4gICAgdm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0OiBEYXRlO1xuICAgIHZvbHVtZUNvbW1pdG1lbnRFbmRzQXQ6IERhdGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5mcmVxdWVuY3kpIHttLmZyZXF1ZW5jeSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuRnJlcXVlbmN5PihlLkZyZXF1ZW5jeSwgcHJvdG8uZnJlcXVlbmN5KTt9XG4gICAgICAgIGlmIChwcm90by5wcmljaW5nKSB7bS5wcmljaW5nID0gT2JqZWN0LmtleXMocHJvdG8ucHJpY2luZykucmVkdWNlPGFueT4oKG9iaiwgaykgPT4geyBvYmpba10gPSBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nLmZyb21Qcm90byhwcm90by5wcmljaW5nW2tdKTsgcmV0dXJuIG9iajsgfSwge30pO31cbiAgICAgICAgaWYgKHByb3RvLmNvbW1pdG1lbnQpIHttLmNvbW1pdG1lbnQgPSBDb21taXRtZW50LmZyb21Qcm90byhwcm90by5jb21taXRtZW50KTt9XG4gICAgICAgIGlmIChwcm90by5maWVsZE1hc2spIHttLmZpZWxkTWFzayA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZmllbGRNYXNrKTt9XG4gICAgICAgIGlmIChwcm90by5zdHJhdGVneSkge20uc3RyYXRlZ3kgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkJpbGxpbmdTdHJhdGVneT4oZS5CaWxsaW5nU3RyYXRlZ3ksIHByb3RvLnN0cmF0ZWd5KTt9XG4gICAgICAgIGlmIChwcm90by52b2x1bWVDb21taXRtZW50KSB7bS52b2x1bWVDb21taXRtZW50ID0gcGFyc2VJbnQocHJvdG8udm9sdW1lQ29tbWl0bWVudCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCkge20udm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ID0gbmV3IERhdGUocHJvdG8udm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0KTt9XG4gICAgICAgIGlmIChwcm90by52b2x1bWVDb21taXRtZW50RW5kc0F0KSB7bS52b2x1bWVDb21taXRtZW50RW5kc0F0ID0gbmV3IERhdGUocHJvdG8udm9sdW1lQ29tbWl0bWVudEVuZHNBdCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljaW5nUGxhbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmljaW5nUGxhbklkJ10gPSB0aGlzLnByaWNpbmdQbGFuSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZyZXF1ZW5jeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZnJlcXVlbmN5J10gPSB0aGlzLmZyZXF1ZW5jeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljaW5nICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByaWNpbmcgIT09IG51bGwpIHt0b1JldHVyblsncHJpY2luZyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wcmljaW5nID8gKHRoaXMucHJpY2luZyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wcmljaW5nO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbW1pdG1lbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29tbWl0bWVudCAhPT0gbnVsbCkge3RvUmV0dXJuWydjb21taXRtZW50J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbW1pdG1lbnQgPyAodGhpcy5jb21taXRtZW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbW1pdG1lbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdHJhdGVneSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RyYXRlZ3knXSA9IHRoaXMuc3RyYXRlZ3k7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudm9sdW1lQ29tbWl0bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndm9sdW1lQ29tbWl0bWVudCddID0gdGhpcy52b2x1bWVDb21taXRtZW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52b2x1bWVDb21taXRtZW50U3RhcnRzQXQgIT09IG51bGwpIHt0b1JldHVyblsndm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCA/ICh0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52b2x1bWVDb21taXRtZW50U3RhcnRzQXQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudm9sdW1lQ29tbWl0bWVudEVuZHNBdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZvbHVtZUNvbW1pdG1lbnRFbmRzQXQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudm9sdW1lQ29tbWl0bWVudEVuZHNBdCA/ICh0aGlzLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudm9sdW1lQ29tbWl0bWVudEVuZHNBdDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuVXBkYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2VJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcHNlcnRXaG9sZXNhbGVQcmljaW5nUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBzZXJ0V2hvbGVzYWxlUHJpY2luZ1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHByaWNpbmdQbGFuSWQ6IHN0cmluZztcbiAgICBza3U6IHN0cmluZztcbiAgICBwcmljaW5nOiBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nW107XG4gICAgdGVybUNvbW1pdG1lbnQ6IENvbW1pdG1lbnQ7XG4gICAgc3RyYXRlZ3k6IGUuQmlsbGluZ1N0cmF0ZWd5O1xuICAgIHZvbHVtZUNvbW1pdG1lbnQ6IG51bWJlcjtcbiAgICB2b2x1bWVDb21taXRtZW50U3RhcnRzQXQ6IERhdGU7XG4gICAgdm9sdW1lQ29tbWl0bWVudEVuZHNBdDogRGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwc2VydFdob2xlc2FsZVByaWNpbmdSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBzZXJ0V2hvbGVzYWxlUHJpY2luZ1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucHJpY2luZykge20ucHJpY2luZyA9IHByb3RvLnByaWNpbmcubWFwKFByaWNpbmdQbGFuUHJvZHVjdFByaWNpbmcuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by50ZXJtQ29tbWl0bWVudCkge20udGVybUNvbW1pdG1lbnQgPSBDb21taXRtZW50LmZyb21Qcm90byhwcm90by50ZXJtQ29tbWl0bWVudCk7fVxuICAgICAgICBpZiAocHJvdG8uc3RyYXRlZ3kpIHttLnN0cmF0ZWd5ID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5CaWxsaW5nU3RyYXRlZ3k+KGUuQmlsbGluZ1N0cmF0ZWd5LCBwcm90by5zdHJhdGVneSk7fVxuICAgICAgICBpZiAocHJvdG8udm9sdW1lQ29tbWl0bWVudCkge20udm9sdW1lQ29tbWl0bWVudCA9IHBhcnNlSW50KHByb3RvLnZvbHVtZUNvbW1pdG1lbnQsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by52b2x1bWVDb21taXRtZW50U3RhcnRzQXQpIHttLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCA9IG5ldyBEYXRlKHByb3RvLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCk7fVxuICAgICAgICBpZiAocHJvdG8udm9sdW1lQ29tbWl0bWVudEVuZHNBdCkge20udm9sdW1lQ29tbWl0bWVudEVuZHNBdCA9IG5ldyBEYXRlKHByb3RvLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcHNlcnRXaG9sZXNhbGVQcmljaW5nUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNpbmdQbGFuSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByaWNpbmdQbGFuSWQnXSA9IHRoaXMucHJpY2luZ1BsYW5JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5za3UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NrdSddID0gdGhpcy5za3U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcmljaW5nICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ByaWNpbmcnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucHJpY2luZyA/ICh0aGlzLnByaWNpbmcgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucHJpY2luZzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZXJtQ29tbWl0bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50ZXJtQ29tbWl0bWVudCAhPT0gbnVsbCkge3RvUmV0dXJuWyd0ZXJtQ29tbWl0bWVudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50ZXJtQ29tbWl0bWVudCA/ICh0aGlzLnRlcm1Db21taXRtZW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRlcm1Db21taXRtZW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0cmF0ZWd5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdHJhdGVneSddID0gdGhpcy5zdHJhdGVneTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52b2x1bWVDb21taXRtZW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2b2x1bWVDb21taXRtZW50J10gPSB0aGlzLnZvbHVtZUNvbW1pdG1lbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCAhPT0gbnVsbCkge3RvUmV0dXJuWyd2b2x1bWVDb21taXRtZW50U3RhcnRzQXQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ID8gKHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQgIT09IG51bGwpIHt0b1JldHVyblsndm9sdW1lQ29tbWl0bWVudEVuZHNBdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0ID8gKHRoaXMudm9sdW1lQ29tbWl0bWVudEVuZHNBdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIl19
613
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2luZy1wbGFuLXByb2R1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9iaWxsaW5nX3Nkay9zcmMvbGliL19pbnRlcm5hbC9vYmplY3RzL3ByaWNpbmctcGxhbi1wcm9kdWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxLQUFLLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFOUIsTUFBTSxVQUFVLGlCQUFpQixDQUFJLE9BQVksRUFBRSxLQUFhO0lBQzlELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxPQUFPLCtCQUErQjtJQVd4QyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSwrQkFBK0IsRUFBRSxDQUFDO1FBQzlDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFBQyxDQUFDLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFjLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQUM7UUFDbEcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtB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QyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQWMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUNsRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUN6SyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FBQztRQUN6RCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUFDO1FBQzVELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLENBQW9CLENBQUMsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQUM7UUFDM0csSUFBSSxLQUFL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Q0FBQyx3QkFBd0IsQ0FBQztTQUFDO1FBQy9RLElBQUksT0FBTyxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsc0JBQThCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztTQUFDO1FBQ25RLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbW1pdG1lbnQgfSBmcm9tICcuL2NvbW1pdG1lbnQnO1xuaW1wb3J0IHsgRmllbGRNYXNrIH0gZnJvbSAnLi9maWVsZC1tYXNrJztcbmltcG9ydCB7IFBhZ2VkUmVxdWVzdE9wdGlvbnMsIFBhZ2VkUmVzcG9uc2VNZXRhZGF0YSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IFByaWNpbmdQbGFuUHJvZHVjdFByaWNpbmcgfSBmcm9tICcuL3ByaWNpbmctcGxhbic7XG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBwcmljaW5nUGxhbklkOiBzdHJpbmc7XG4gICAgc2t1OiBzdHJpbmc7XG4gICAgZnJlcXVlbmN5OiBlLkZyZXF1ZW5jeTtcbiAgICBwcmljaW5nOiB7W2tleTogc3RyaW5nXTogUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZ307XG4gICAgY29tbWl0bWVudDogQ29tbWl0bWVudDtcbiAgICBzdHJhdGVneTogZS5CaWxsaW5nU3RyYXRlZ3k7XG4gICAgdm9sdW1lQ29tbWl0bWVudDogbnVtYmVyO1xuICAgIHZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdDogRGF0ZTtcbiAgICB2b2x1bWVDb21taXRtZW50RW5kc0F0OiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZnJlcXVlbmN5KSB7bS5mcmVxdWVuY3kgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkZyZXF1ZW5jeT4oZS5GcmVxdWVuY3ksIHByb3RvLmZyZXF1ZW5jeSk7fVxuICAgICAgICBpZiAocHJvdG8ucHJpY2luZykge20ucHJpY2luZyA9IE9iamVjdC5rZXlzKHByb3RvLnByaWNpbmcpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZy5mcm9tUHJvdG8ocHJvdG8ucHJpY2luZ1trXSk7IHJldHVybiBvYmo7IH0sIHt9KTt9XG4gICAgICAgIGlmIChwcm90by5jb21taXRtZW50KSB7bS5jb21taXRtZW50ID0gQ29tbWl0bWVudC5mcm9tUHJvdG8ocHJvdG8uY29tbWl0bWVudCk7fVxuICAgICAgICBpZiAocHJvdG8uc3RyYXRlZ3kpIHttLnN0cmF0ZWd5ID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5CaWxsaW5nU3RyYXRlZ3k+KGUuQmlsbGluZ1N0cmF0ZWd5LCBwcm90by5zdHJhdGVneSk7fVxuICAgICAgICBpZiAocHJvdG8udm9sdW1lQ29tbWl0bWVudCkge20udm9sdW1lQ29tbWl0bWVudCA9IHBhcnNlSW50KHByb3RvLnZvbHVtZUNvbW1pdG1lbnQsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by52b2x1bWVDb21taXRtZW50U3RhcnRzQXQpIHttLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCA9IG5ldyBEYXRlKHByb3RvLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCk7fVxuICAgICAgICBpZiAocHJvdG8udm9sdW1lQ29tbWl0bWVudEVuZHNBdCkge20udm9sdW1lQ29tbWl0bWVudEVuZHNBdCA9IG5ldyBEYXRlKHByb3RvLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZ1BsYW5JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJpY2luZ1BsYW5JZCddID0gdGhpcy5wcmljaW5nUGxhbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1J10gPSB0aGlzLnNrdTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mcmVxdWVuY3kgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ZyZXF1ZW5jeSddID0gdGhpcy5mcmVxdWVuY3k7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcmljaW5nICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ByaWNpbmcnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucHJpY2luZyA/ICh0aGlzLnByaWNpbmcgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucHJpY2luZzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21taXRtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbW1pdG1lbnQgIT09IG51bGwpIHt0b1JldHVyblsnY29tbWl0bWVudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb21taXRtZW50ID8gKHRoaXMuY29tbWl0bWVudCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb21taXRtZW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0cmF0ZWd5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdHJhdGVneSddID0gdGhpcy5zdHJhdGVneTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52b2x1bWVDb21taXRtZW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2b2x1bWVDb21taXRtZW50J10gPSB0aGlzLnZvbHVtZUNvbW1pdG1lbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCAhPT0gbnVsbCkge3RvUmV0dXJuWyd2b2x1bWVDb21taXRtZW50U3RhcnRzQXQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ID8gKHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQgIT09IG51bGwpIHt0b1JldHVyblsndm9sdW1lQ29tbWl0bWVudEVuZHNBdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0ID8gKHRoaXMudm9sdW1lQ29tbWl0bWVudEVuZHNBdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlc3BvbnNlIGltcGxlbWVudHMgaS5DcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcHJpY2luZ1BsYW5JZDogc3RyaW5nO1xuICAgIHNrdTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljaW5nUGxhbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmljaW5nUGxhbklkJ10gPSB0aGlzLnByaWNpbmdQbGFuSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHByaWNpbmdQbGFuSWQ6IHN0cmluZztcbiAgICBza3U6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZ1BsYW5JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJpY2luZ1BsYW5JZCddID0gdGhpcy5wcmljaW5nUGxhbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1J10gPSB0aGlzLnNrdTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3QgaW1wbGVtZW50cyBpLkdldE11bHRpUHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgcHJpY2luZ1BsYW5JZDogc3RyaW5nO1xuICAgIHNrdXM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljaW5nUGxhbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmljaW5nUGxhbklkJ10gPSB0aGlzLnByaWNpbmdQbGFuSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1cyddID0gdGhpcy5za3VzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHByaWNpbmdQbGFuUHJvZHVjdHM6IFByaWNpbmdQbGFuUHJvZHVjdFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucHJpY2luZ1BsYW5Qcm9kdWN0cykge20ucHJpY2luZ1BsYW5Qcm9kdWN0cyA9IHByb3RvLnByaWNpbmdQbGFuUHJvZHVjdHMubWFwKFByaWNpbmdQbGFuUHJvZHVjdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVByaWNpbmdQbGFuUHJvZHVjdFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZ1BsYW5Qcm9kdWN0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcmljaW5nUGxhblByb2R1Y3RzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ByaWNpbmdQbGFuUHJvZHVjdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucHJpY2luZ1BsYW5Qcm9kdWN0cyA/ICh0aGlzLnByaWNpbmdQbGFuUHJvZHVjdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucHJpY2luZ1BsYW5Qcm9kdWN0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBwcmljaW5nUGxhbklkOiBzdHJpbmc7XG4gICAgc2t1OiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNpbmdQbGFuSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByaWNpbmdQbGFuSWQnXSA9IHRoaXMucHJpY2luZ1BsYW5JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5za3UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NrdSddID0gdGhpcy5za3U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFByaWNpbmdQbGFuUHJvZHVjdFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwcmljaW5nUGxhblByb2R1Y3Q6IFByaWNpbmdQbGFuUHJvZHVjdDtcbiAgICBwcmljaW5nUGxhbkRlZmF1bHRTdHJhdGVneTogZS5CaWxsaW5nU3RyYXRlZ3k7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFByaWNpbmdQbGFuUHJvZHVjdFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnByaWNpbmdQbGFuUHJvZHVjdCkge20ucHJpY2luZ1BsYW5Qcm9kdWN0ID0gUHJpY2luZ1BsYW5Qcm9kdWN0LmZyb21Qcm90byhwcm90by5wcmljaW5nUGxhblByb2R1Y3QpO31cbiAgICAgICAgaWYgKHByb3RvLnByaWNpbmdQbGFuRGVmYXVsdFN0cmF0ZWd5KSB7bS5wcmljaW5nUGxhbkRlZmF1bHRTdHJhdGVneSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQmlsbGluZ1N0cmF0ZWd5PihlLkJpbGxpbmdTdHJhdGVneSwgcHJvdG8ucHJpY2luZ1BsYW5EZWZhdWx0U3RyYXRlZ3kpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNpbmdQbGFuUHJvZHVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcmljaW5nUGxhblByb2R1Y3QgIT09IG51bGwpIHt0b1JldHVyblsncHJpY2luZ1BsYW5Qcm9kdWN0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnByaWNpbmdQbGFuUHJvZHVjdCA/ICh0aGlzLnByaWNpbmdQbGFuUHJvZHVjdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wcmljaW5nUGxhblByb2R1Y3Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZ1BsYW5EZWZhdWx0U3RyYXRlZ3kgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByaWNpbmdQbGFuRGVmYXVsdFN0cmF0ZWd5J10gPSB0aGlzLnByaWNpbmdQbGFuRGVmYXVsdFN0cmF0ZWd5O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RQcmljaW5nUGxhblByb2R1Y3RzUmVxdWVzdExpc3RQcmljaW5nUGxhblByb2R1Y3RzRmlsdGVycyBpbXBsZW1lbnRzIGkuTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0TGlzdFByaWNpbmdQbGFuUHJvZHVjdHNGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBza3U6IHN0cmluZztcbiAgICBwcmljaW5nUGxhbklkczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c1JlcXVlc3RMaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c0ZpbHRlcnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c1JlcXVlc3RMaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c0ZpbHRlcnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RQcmljaW5nUGxhblByb2R1Y3RzUmVxdWVzdExpc3RQcmljaW5nUGxhblByb2R1Y3RzRmlsdGVyc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1J10gPSB0aGlzLnNrdTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljaW5nUGxhbklkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJpY2luZ1BsYW5JZHMnXSA9IHRoaXMucHJpY2luZ1BsYW5JZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHNrdTogc3RyaW5nO1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnM7XG4gICAgZmlsdGVyczogTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0TGlzdFByaWNpbmdQbGFuUHJvZHVjdHNGaWx0ZXJzO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ09wdGlvbnMpIHttLnBhZ2luZ09wdGlvbnMgPSBQYWdlZFJlcXVlc3RPcHRpb25zLmZyb21Qcm90byhwcm90by5wYWdpbmdPcHRpb25zKTt9XG4gICAgICAgIGlmIChwcm90by5maWx0ZXJzKSB7bS5maWx0ZXJzID0gTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0TGlzdFByaWNpbmdQbGFuUHJvZHVjdHNGaWx0ZXJzLmZyb21Qcm90byhwcm90by5maWx0ZXJzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdPcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ09wdGlvbnMgPyAodGhpcy5wYWdpbmdPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ09wdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWx0ZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpbHRlcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmlsdGVycyA/ICh0aGlzLmZpbHRlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmlsdGVyczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwcm9kdWN0czogUHJpY2luZ1BsYW5Qcm9kdWN0W107XG4gICAgcGFnaW5nTWV0YWRhdGE6IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RQcmljaW5nUGxhblByb2R1Y3RzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UHJpY2luZ1BsYW5Qcm9kdWN0c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnByb2R1Y3RzKSB7bS5wcm9kdWN0cyA9IHByb3RvLnByb2R1Y3RzLm1hcChQcmljaW5nUGxhblByb2R1Y3QuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdNZXRhZGF0YSkge20ucGFnaW5nTWV0YWRhdGEgPSBQYWdlZFJlc3BvbnNlTWV0YWRhdGEuZnJvbVByb3RvKHByb3RvLnBhZ2luZ01ldGFkYXRhKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFByaWNpbmdQbGFuUHJvZHVjdHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb2R1Y3RzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByb2R1Y3RzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Byb2R1Y3RzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnByb2R1Y3RzID8gKHRoaXMucHJvZHVjdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucHJvZHVjdHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nTWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nTWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnaW5nTWV0YWRhdGEgPyAodGhpcy5wYWdpbmdNZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdNZXRhZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0UHJpY2luZ0VudHJ5IGltcGxlbWVudHMgaS5DcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0UHJpY2luZ0VudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RQcmljaW5nRW50cnkge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0UHJpY2luZ0VudHJ5KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnZhbHVlKSB7bS52YWx1ZSA9IFByaWNpbmdQbGFuUHJvZHVjdFByaWNpbmcuZnJvbVByb3RvKHByb3RvLnZhbHVlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdFByaWNpbmdFbnRyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsna2V5J10gPSB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd2YWx1ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52YWx1ZSA/ICh0aGlzLnZhbHVlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByaWNpbmdQbGFuUHJvZHVjdFByaWNpbmdFbnRyeSBpbXBsZW1lbnRzIGkuUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZ0VudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFByaWNpbmdQbGFuUHJvZHVjdFByaWNpbmdFbnRyeSB7XG4gICAgICAgIGxldCBtID0gbmV3IFByaWNpbmdQbGFuUHJvZHVjdFByaWNpbmdFbnRyeSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by52YWx1ZSkge20udmFsdWUgPSBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nLmZyb21Qcm90byhwcm90by52YWx1ZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlByaWNpbmdQbGFuUHJvZHVjdFByaWNpbmdFbnRyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsna2V5J10gPSB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd2YWx1ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52YWx1ZSA/ICh0aGlzLnZhbHVlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RQcmljaW5nRW50cnkgaW1wbGVtZW50cyBpLlVwZGF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RQcmljaW5nRW50cnlJbnRlcmZhY2Uge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdFByaWNpbmdFbnRyeSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RQcmljaW5nRW50cnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmFsdWUpIHttLnZhbHVlID0gUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZy5mcm9tUHJvdG8ocHJvdG8udmFsdWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0UHJpY2luZ0VudHJ5SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMua2V5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydrZXknXSA9IHRoaXMua2V5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZhbHVlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZhbHVlID8gKHRoaXMudmFsdWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudmFsdWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJpY2luZ1BsYW5Qcm9kdWN0IGltcGxlbWVudHMgaS5QcmljaW5nUGxhblByb2R1Y3RJbnRlcmZhY2Uge1xuICAgIHByaWNpbmdQbGFuSWQ6IHN0cmluZztcbiAgICBza3U6IHN0cmluZztcbiAgICBmcmVxdWVuY3k6IGUuRnJlcXVlbmN5O1xuICAgIHByaWNpbmc6IHtba2V5OiBzdHJpbmddOiBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nfTtcbiAgICBjb21taXRtZW50OiBDb21taXRtZW50O1xuICAgIGNyZWF0ZWQ6IERhdGU7XG4gICAgbW9kaWZpZWQ6IERhdGU7XG4gICAgc3RyYXRlZ3k6IGUuQmlsbGluZ1N0cmF0ZWd5O1xuICAgIHZvbHVtZUNvbW1pdG1lbnQ6IG51bWJlcjtcbiAgICB2b2x1bWVDb21taXRtZW50U3RhcnRzQXQ6IERhdGU7XG4gICAgdm9sdW1lQ29tbWl0bWVudEVuZHNBdDogRGF0ZTtcbiAgICBwcmljaW5nVHlwZTogZS5Qcm9kdWN0UHJpY2luZ1R5cGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQcmljaW5nUGxhblByb2R1Y3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBQcmljaW5nUGxhblByb2R1Y3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZnJlcXVlbmN5KSB7bS5mcmVxdWVuY3kgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkZyZXF1ZW5jeT4oZS5GcmVxdWVuY3ksIHByb3RvLmZyZXF1ZW5jeSk7fVxuICAgICAgICBpZiAocHJvdG8ucHJpY2luZykge20ucHJpY2luZyA9IE9iamVjdC5rZXlzKHByb3RvLnByaWNpbmcpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZy5mcm9tUHJvdG8ocHJvdG8ucHJpY2luZ1trXSk7IHJldHVybiBvYmo7IH0sIHt9KTt9XG4gICAgICAgIGlmIChwcm90by5jb21taXRtZW50KSB7bS5jb21taXRtZW50ID0gQ29tbWl0bWVudC5mcm9tUHJvdG8ocHJvdG8uY29tbWl0bWVudCk7fVxuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZCkge20uY3JlYXRlZCA9IG5ldyBEYXRlKHByb3RvLmNyZWF0ZWQpO31cbiAgICAgICAgaWYgKHByb3RvLm1vZGlmaWVkKSB7bS5tb2RpZmllZCA9IG5ldyBEYXRlKHByb3RvLm1vZGlmaWVkKTt9XG4gICAgICAgIGlmIChwcm90by5zdHJhdGVneSkge20uc3RyYXRlZ3kgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkJpbGxpbmdTdHJhdGVneT4oZS5CaWxsaW5nU3RyYXRlZ3ksIHByb3RvLnN0cmF0ZWd5KTt9XG4gICAgICAgIGlmIChwcm90by52b2x1bWVDb21taXRtZW50KSB7bS52b2x1bWVDb21taXRtZW50ID0gcGFyc2VJbnQocHJvdG8udm9sdW1lQ29tbWl0bWVudCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCkge20udm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ID0gbmV3IERhdGUocHJvdG8udm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0KTt9XG4gICAgICAgIGlmIChwcm90by52b2x1bWVDb21taXRtZW50RW5kc0F0KSB7bS52b2x1bWVDb21taXRtZW50RW5kc0F0ID0gbmV3IERhdGUocHJvdG8udm9sdW1lQ29tbWl0bWVudEVuZHNBdCk7fVxuICAgICAgICBpZiAocHJvdG8ucHJpY2luZ1R5cGUpIHttLnByaWNpbmdUeXBlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5Qcm9kdWN0UHJpY2luZ1R5cGU+KGUuUHJvZHVjdFByaWNpbmdUeXBlLCBwcm90by5wcmljaW5nVHlwZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlByaWNpbmdQbGFuUHJvZHVjdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNpbmdQbGFuSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByaWNpbmdQbGFuSWQnXSA9IHRoaXMucHJpY2luZ1BsYW5JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5za3UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NrdSddID0gdGhpcy5za3U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnJlcXVlbmN5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydmcmVxdWVuY3knXSA9IHRoaXMuZnJlcXVlbmN5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNpbmcgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucHJpY2luZyAhPT0gbnVsbCkge3RvUmV0dXJuWydwcmljaW5nJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnByaWNpbmcgPyAodGhpcy5wcmljaW5nIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnByaWNpbmc7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29tbWl0bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb21taXRtZW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbW1pdG1lbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29tbWl0bWVudCA/ICh0aGlzLmNvbW1pdG1lbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29tbWl0bWVudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jcmVhdGVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNyZWF0ZWQgIT09IG51bGwpIHt0b1JldHVyblsnY3JlYXRlZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jcmVhdGVkID8gKHRoaXMuY3JlYXRlZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jcmVhdGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1vZGlmaWVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1vZGlmaWVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ21vZGlmaWVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1vZGlmaWVkID8gKHRoaXMubW9kaWZpZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubW9kaWZpZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RyYXRlZ3kgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0cmF0ZWd5J10gPSB0aGlzLnN0cmF0ZWd5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZvbHVtZUNvbW1pdG1lbnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZvbHVtZUNvbW1pdG1lbnQnXSA9IHRoaXMudm9sdW1lQ29tbWl0bWVudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52b2x1bWVDb21taXRtZW50U3RhcnRzQXQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52b2x1bWVDb21taXRtZW50U3RhcnRzQXQgPyAodGhpcy52b2x1bWVDb21taXRtZW50U3RhcnRzQXQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudm9sdW1lQ29tbWl0bWVudEVuZHNBdCAhPT0gbnVsbCkge3RvUmV0dXJuWyd2b2x1bWVDb21taXRtZW50RW5kc0F0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQgPyAodGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZ1R5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByaWNpbmdUeXBlJ10gPSB0aGlzLnByaWNpbmdUeXBlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHByaWNpbmdQbGFuSWQ6IHN0cmluZztcbiAgICBza3U6IHN0cmluZztcbiAgICBmcmVxdWVuY3k6IGUuRnJlcXVlbmN5O1xuICAgIHByaWNpbmc6IHtba2V5OiBzdHJpbmddOiBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nfTtcbiAgICBjb21taXRtZW50OiBDb21taXRtZW50O1xuICAgIGZpZWxkTWFzazogRmllbGRNYXNrO1xuICAgIHN0cmF0ZWd5OiBlLkJpbGxpbmdTdHJhdGVneTtcbiAgICB2b2x1bWVDb21taXRtZW50OiBudW1iZXI7XG4gICAgdm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0OiBEYXRlO1xuICAgIHZvbHVtZUNvbW1pdG1lbnRFbmRzQXQ6IERhdGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVQcmljaW5nUGxhblByb2R1Y3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5mcmVxdWVuY3kpIHttLmZyZXF1ZW5jeSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuRnJlcXVlbmN5PihlLkZyZXF1ZW5jeSwgcHJvdG8uZnJlcXVlbmN5KTt9XG4gICAgICAgIGlmIChwcm90by5wcmljaW5nKSB7bS5wcmljaW5nID0gT2JqZWN0LmtleXMocHJvdG8ucHJpY2luZykucmVkdWNlPGFueT4oKG9iaiwgaykgPT4geyBvYmpba10gPSBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nLmZyb21Qcm90byhwcm90by5wcmljaW5nW2tdKTsgcmV0dXJuIG9iajsgfSwge30pO31cbiAgICAgICAgaWYgKHByb3RvLmNvbW1pdG1lbnQpIHttLmNvbW1pdG1lbnQgPSBDb21taXRtZW50LmZyb21Qcm90byhwcm90by5jb21taXRtZW50KTt9XG4gICAgICAgIGlmIChwcm90by5maWVsZE1hc2spIHttLmZpZWxkTWFzayA9IEZpZWxkTWFzay5mcm9tUHJvdG8ocHJvdG8uZmllbGRNYXNrKTt9XG4gICAgICAgIGlmIChwcm90by5zdHJhdGVneSkge20uc3RyYXRlZ3kgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkJpbGxpbmdTdHJhdGVneT4oZS5CaWxsaW5nU3RyYXRlZ3ksIHByb3RvLnN0cmF0ZWd5KTt9XG4gICAgICAgIGlmIChwcm90by52b2x1bWVDb21taXRtZW50KSB7bS52b2x1bWVDb21taXRtZW50ID0gcGFyc2VJbnQocHJvdG8udm9sdW1lQ29tbWl0bWVudCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCkge20udm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ID0gbmV3IERhdGUocHJvdG8udm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0KTt9XG4gICAgICAgIGlmIChwcm90by52b2x1bWVDb21taXRtZW50RW5kc0F0KSB7bS52b2x1bWVDb21taXRtZW50RW5kc0F0ID0gbmV3IERhdGUocHJvdG8udm9sdW1lQ29tbWl0bWVudEVuZHNBdCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZVByaWNpbmdQbGFuUHJvZHVjdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljaW5nUGxhbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcmljaW5nUGxhbklkJ10gPSB0aGlzLnByaWNpbmdQbGFuSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZyZXF1ZW5jeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZnJlcXVlbmN5J10gPSB0aGlzLmZyZXF1ZW5jeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljaW5nICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByaWNpbmcgIT09IG51bGwpIHt0b1JldHVyblsncHJpY2luZyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wcmljaW5nID8gKHRoaXMucHJpY2luZyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wcmljaW5nO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbW1pdG1lbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29tbWl0bWVudCAhPT0gbnVsbCkge3RvUmV0dXJuWydjb21taXRtZW50J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbW1pdG1lbnQgPyAodGhpcy5jb21taXRtZW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbW1pdG1lbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdHJhdGVneSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RyYXRlZ3knXSA9IHRoaXMuc3RyYXRlZ3k7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudm9sdW1lQ29tbWl0bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndm9sdW1lQ29tbWl0bWVudCddID0gdGhpcy52b2x1bWVDb21taXRtZW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52b2x1bWVDb21taXRtZW50U3RhcnRzQXQgIT09IG51bGwpIHt0b1JldHVyblsndm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCA/ICh0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52b2x1bWVDb21taXRtZW50U3RhcnRzQXQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudm9sdW1lQ29tbWl0bWVudEVuZHNBdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZvbHVtZUNvbW1pdG1lbnRFbmRzQXQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudm9sdW1lQ29tbWl0bWVudEVuZHNBdCA/ICh0aGlzLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudm9sdW1lQ29tbWl0bWVudEVuZHNBdDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuVXBkYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2VJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVQcmljaW5nUGxhblByb2R1Y3RSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlUHJpY2luZ1BsYW5Qcm9kdWN0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcHNlcnRXaG9sZXNhbGVQcmljaW5nUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBzZXJ0V2hvbGVzYWxlUHJpY2luZ1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHByaWNpbmdQbGFuSWQ6IHN0cmluZztcbiAgICBza3U6IHN0cmluZztcbiAgICBwcmljaW5nOiBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nW107XG4gICAgdGVybUNvbW1pdG1lbnQ6IENvbW1pdG1lbnQ7XG4gICAgc3RyYXRlZ3k6IGUuQmlsbGluZ1N0cmF0ZWd5O1xuICAgIHZvbHVtZUNvbW1pdG1lbnQ6IG51bWJlcjtcbiAgICB2b2x1bWVDb21taXRtZW50U3RhcnRzQXQ6IERhdGU7XG4gICAgdm9sdW1lQ29tbWl0bWVudEVuZHNBdDogRGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwc2VydFdob2xlc2FsZVByaWNpbmdSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBzZXJ0V2hvbGVzYWxlUHJpY2luZ1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucHJpY2luZykge20ucHJpY2luZyA9IHByb3RvLnByaWNpbmcubWFwKFByaWNpbmdQbGFuUHJvZHVjdFByaWNpbmcuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by50ZXJtQ29tbWl0bWVudCkge20udGVybUNvbW1pdG1lbnQgPSBDb21taXRtZW50LmZyb21Qcm90byhwcm90by50ZXJtQ29tbWl0bWVudCk7fVxuICAgICAgICBpZiAocHJvdG8uc3RyYXRlZ3kpIHttLnN0cmF0ZWd5ID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5CaWxsaW5nU3RyYXRlZ3k+KGUuQmlsbGluZ1N0cmF0ZWd5LCBwcm90by5zdHJhdGVneSk7fVxuICAgICAgICBpZiAocHJvdG8udm9sdW1lQ29tbWl0bWVudCkge20udm9sdW1lQ29tbWl0bWVudCA9IHBhcnNlSW50KHByb3RvLnZvbHVtZUNvbW1pdG1lbnQsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by52b2x1bWVDb21taXRtZW50U3RhcnRzQXQpIHttLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCA9IG5ldyBEYXRlKHByb3RvLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCk7fVxuICAgICAgICBpZiAocHJvdG8udm9sdW1lQ29tbWl0bWVudEVuZHNBdCkge20udm9sdW1lQ29tbWl0bWVudEVuZHNBdCA9IG5ldyBEYXRlKHByb3RvLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcHNlcnRXaG9sZXNhbGVQcmljaW5nUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNpbmdQbGFuSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByaWNpbmdQbGFuSWQnXSA9IHRoaXMucHJpY2luZ1BsYW5JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5za3UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NrdSddID0gdGhpcy5za3U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcmljaW5nICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ByaWNpbmcnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucHJpY2luZyA/ICh0aGlzLnByaWNpbmcgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucHJpY2luZzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZXJtQ29tbWl0bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50ZXJtQ29tbWl0bWVudCAhPT0gbnVsbCkge3RvUmV0dXJuWyd0ZXJtQ29tbWl0bWVudCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50ZXJtQ29tbWl0bWVudCA/ICh0aGlzLnRlcm1Db21taXRtZW50IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRlcm1Db21taXRtZW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0cmF0ZWd5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdHJhdGVneSddID0gdGhpcy5zdHJhdGVneTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52b2x1bWVDb21taXRtZW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2b2x1bWVDb21taXRtZW50J10gPSB0aGlzLnZvbHVtZUNvbW1pdG1lbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdCAhPT0gbnVsbCkge3RvUmV0dXJuWyd2b2x1bWVDb21taXRtZW50U3RhcnRzQXQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0ID8gKHRoaXMudm9sdW1lQ29tbWl0bWVudFN0YXJ0c0F0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRTdGFydHNBdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZvbHVtZUNvbW1pdG1lbnRFbmRzQXQgIT09IG51bGwpIHt0b1JldHVyblsndm9sdW1lQ29tbWl0bWVudEVuZHNBdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0ID8gKHRoaXMudm9sdW1lQ29tbWl0bWVudEVuZHNBdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy52b2x1bWVDb21taXRtZW50RW5kc0F0O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIl19