construct-hub 0.4.4 → 0.4.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -666,6 +666,38 @@ If there is a reason why a tracked version cannot possibly be ingested, the S3
666
666
  object backing the canary state can be deleted, which will effectively
667
667
  re-initialize the canary to track only the latest available version.
668
668
 
669
+ ### `ConstructHub/Sources/NpmJs/Canary/NotRunningOrFailing`
670
+
671
+ #### Description
672
+
673
+ This alarm is only provisioned in case the [NpmJs package canary][package-canary]
674
+ was configured. It triggers when the canary is not running as expected, or is
675
+ reporting failures.
676
+
677
+ When the [NpmJs package canary][package-canary] does not successfully run, the
678
+ `ConstructHub/Sources/NpmJs/Canary/SLA-Breached` alarm cannot be triggered due
679
+ to lack of data. This may hence hide customer-visible problems.
680
+
681
+ #### Investigation
682
+
683
+ In the AWS Console, verify whether the alarm triggered due to
684
+ `ConstructHub/Sources/NpmJs/Canary/Failing` or
685
+ `ConstructHub/Sources/NpmJs/Canary/NotRunning`.
686
+
687
+ If the canary is not running, verify that the scheduled trigger for the [NpmJs
688
+ package canary][package-canary] is correctly enabled. If it is, and the canary
689
+ is not running, the account might have run out of available AWS Lambda
690
+ concurrency, and a limit increase request might be necessary. When that is the
691
+ case, the function will report this via the `Throttled` metric.
692
+
693
+ Otherwise, [dive into the Lambda logs][#lambda-log-dive] of the Canary function
694
+ to determine what is happening and resolve the problem.
695
+
696
+ #### Resolution
697
+
698
+ Once the canary starts unning normally again, the alarm will clear itself
699
+ without requiring any further intervention.
700
+
669
701
  ## :information_source: General Recommendations
670
702
 
671
703
  ### Diving into Lambda Function logs in CloudWatch Logs
@@ -85,6 +85,10 @@ class CatalogBuilder extends constructs_1.Construct {
85
85
  evaluationPeriods: 1,
86
86
  threshold: -5,
87
87
  });
88
+ // This is a high-severity alarm because it is indicative of a possible mass-extinction event
89
+ // in the catalog. This should definitely prompt immediate investigation, although it can also
90
+ // be caused by the recent addition of enough packages in the deny-list to cause the alarm to
91
+ // trigger.
88
92
  props.monitoring.addHighSeverityAlarm('Catalog Size Shrunk', alarmShrinkingCatalog);
89
93
  }
90
94
  metricMissingConstructFrameworkCount(opts) {
@@ -116,4 +120,4 @@ class CatalogBuilder extends constructs_1.Construct {
116
120
  }
117
121
  }
118
122
  exports.CatalogBuilder = CatalogBuilder;
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZC9jYXRhbG9nLWJ1aWxkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkNBQXlEO0FBQ3pELCtEQU1vQztBQUNwQyxpREFBOEQ7QUFDOUQsdURBQTREO0FBQzVELG1EQUFxRDtBQUVyRCwyQ0FBdUM7QUFDdkMsK0NBQWlFO0FBSWpFLG1EQUFnRDtBQUloRCx1REFBOEQ7QUFDOUQsMkNBQTREO0FBdUM1RDs7R0FFRztBQUNILE1BQWEsY0FBZSxTQUFRLHNCQUFTO0lBRzNDLFlBQW1CLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCOztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sT0FBTyxHQUFHLElBQUksZ0NBQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzNDLFdBQVcsRUFBRSxzQ0FBc0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDNUUsV0FBVyxFQUFFO2dCQUNYLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVU7Z0JBQ3BDLG1CQUFtQixFQUFFLE9BQU87Z0JBQzVCLDBCQUEwQixFQUN4QixLQUFLLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLFlBQVk7YUFDcEQ7WUFDRCxZQUFZLFFBQUUsS0FBSyxDQUFDLFlBQVksbUNBQUksd0JBQWEsQ0FBQyxTQUFTO1lBQzNELFVBQVUsRUFBRSxLQUFNO1lBQ2xCLDRCQUE0QixFQUFFLENBQUM7WUFDL0IsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxZQUFZO1NBQzlCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyx1Q0FBdUMsQ0FD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QkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDNUIsU0FBUyxFQUFFLDBCQUFTLENBQUMsT0FBTztZQUM1QixHQUFHLElBQUk7WUFDUCxVQUFVLHlGQUFzRDtZQUNoRSxTQUFTLEVBQUUsNkJBQWlCO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxvQ0FBb0MsQ0FBQyxJQUFvQjtRQUM5RCxPQUFPLElBQUksdUJBQU0sQ0FBQztZQUNoQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVCLFNBQVMsRUFBRSwwQkFBUyxDQUFDLE9BQU87WUFDNUIsR0FBRyxJQUFJO1lBQ1AsVUFBVSwwRUFBOEM7WUFDeEQsU0FBUyxFQUFFLDZCQUFpQjtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUEvSEQsd0NBK0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBc3NlbWJseVRhcmdldHMgfSBmcm9tICdAanNpaS9zcGVjJztcbmltcG9ydCB7IEFybkZvcm1hdCwgRHVyYXRpb24sIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgQ29tcGFyaXNvbk9wZXJhdG9yLFxuICBNYXRoRXhwcmVzc2lvbixcbiAgTWV0cmljLFxuICBNZXRyaWNPcHRpb25zLFxuICBTdGF0aXN0aWMsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IEVmZmVjdCwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJRnVuY3Rpb24sIFRyYWNpbmcgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgbGFtYmRhRnVuY3Rpb25VcmwsIHMzT2JqZWN0VXJsIH0gZnJvbSAnLi4vLi4vZGVlcC1saW5rJztcblxuaW1wb3J0IHsgTW9uaXRvcmluZyB9IGZyb20gJy4uLy4uL21vbml0b3JpbmcnO1xuaW1wb3J0IHsgT3ZlcnZpZXdEYXNoYm9hcmQgfSBmcm9tICcuLi8uLi9vdmVydmlldy1kYXNoYm9hcmQnO1xuaW1wb3J0IHsgUlVOQk9PS19VUkwgfSBmcm9tICcuLi8uLi9ydW5ib29rLXVybCc7XG5pbXBvcnQgeyBEZW55TGlzdCB9IGZyb20gJy4uL2RlbnktbGlzdCc7XG5pbXBvcnQgeyBGZWVkQnVpbGRlciB9IGZyb20gJy4uL2ZlZWQtYnVpbGRlcic7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdEZyYW1ld29yayB9IGZyb20gJy4uL2luZ2VzdGlvbi9mcmFtZXdvcmstZGV0ZWN0aW9uLmxhbWJkYS1zaGFyZWQnO1xuaW1wb3J0IHsgQ2F0YWxvZ0J1aWxkZXIgYXMgSGFuZGxlciB9IGZyb20gJy4vY2F0YWxvZy1idWlsZGVyJztcbmltcG9ydCB7IE1ldHJpY05hbWUsIE1FVFJJQ1NfTkFNRVNQQUNFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFByb3BzIGZvciBgQ2F0YWxvZ0J1aWxkZXJgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhdGFsb2dCdWlsZGVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIHBhY2thZ2Ugc3RvcmUgYnVja2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0OiBJQnVja2V0O1xuXG4gIC8qKlxuICAgKiBUaGUgbW9uaXRvcmluZyBoYW5kbGVyIHRvIHJlZ2lzdGVyIGFsYXJtcyB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9uaXRvcmluZzogTW9uaXRvcmluZztcblxuICAvKipcbiAgICogVGhlIG92ZXJ2aWV3IGRhc2hib2FyZCB0byBhZGQgd2lkZ2V0cyB0by5cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJ2aWV3RGFzaGJvYXJkOiBPdmVydmlld0Rhc2hib2FyZDtcblxuICAvKipcbiAgICogSG93IGxvbmcgc2hvdWxkIGV4ZWN1dGlvbiBsb2dzIGJlIHJldGFpbmVkP1xuICAgKlxuICAgKiBAZGVmYXVsdCBSZXRlbnRpb25EYXlzLlRFTl9ZRUFSU1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nUmV0ZW50aW9uPzogUmV0ZW50aW9uRGF5cztcblxuICAvKipcbiAgICogVGhlIGRlbnkgbGlzdCBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBkZW55TGlzdDogRGVueUxpc3Q7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCB0aGF0IGdlbmVyYXRlcyBSU1MvQVRPTSBmZWVkIGFmdGVyIGNhdGFsb2cgaXMgdXBkYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZmVlZEJ1aWxkZXI6IEZlZWRCdWlsZGVyO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBvciByZS1idWlsZHMgdGhlIGBjYXRhbG9nLmpzb25gIG9iamVjdCBpbiB0aGUgZGVzaWduYXRlZCBidWNrZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDYXRhbG9nQnVpbGRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbjogSUZ1bmN0aW9uO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2F0YWxvZ0J1aWxkZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IEhhbmRsZXIodGhpcywgJ0RlZmF1bHQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogYENyZWF0ZXMgdGhlIGNhdGFsb2cuanNvbiBvYmplY3QgaW4gJHtwcm9wcy5idWNrZXQuYnVja2V0TmFtZX1gLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQlVDS0VUX05BTUU6IHByb3BzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICBBV1NfRU1GX0VOVklST05NRU5UOiAnTG9jYWwnLFxuICAgICAgICBGRUVEX0JVSUxERVJfRlVOQ1RJT05fTkFNRTpcbiAgICAgICAgICBwcm9wcy5mZWVkQnVpbGRlci51cGRhdGVGZWVkRnVuY3Rpb24uZnVuY3Rpb25OYW1lLFxuICAgICAgfSxcbiAgICAgIGxvZ1JldGVudGlvbjogcHJvcHMubG9nUmV0ZW50aW9uID8/IFJldGVudGlvbkRheXMuVEVOX1lFQVJTLFxuICAgICAgbWVtb3J5U2l6ZTogMTBfMjQwLCAvLyBDdXJyZW50bHkgdGhlIG1heGltdW0gcG9zc2libGUgc2V0dGluZ1xuICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogMSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgdHJhY2luZzogVHJhY2luZy5QQVNTX1RIUk9VR0gsXG4gICAgfSk7XG4gICAgdGhpcy5mdW5jdGlvbiA9IGhhbmRsZXI7XG4gICAgcHJvcHMub3ZlcnZpZXdEYXNoYm9hcmQuYWRkQ29uY3VycmVudEV4ZWN1dGlvbk1ldHJpY1RvRGFzaGJvYXJkKFxuICAgICAgaGFuZGxlcixcbiAgICAgICdDYXRhbG9nQnVpbGRlckxhbWJkYSdcbiAgICApO1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgaW52b2tlIGl0c2VsZiBpbiBjYXNlIGl0IG5lZWRzIHRvIGNvbnRpbnVlIGl0J3Mgd29yayBpblxuICAgIC8vIGEgXCJjaGlsZFwiIGludm9jYXRpb24uIFdlIG11c3QgaGVuY2UgYWxsb3cgaXQgdG8gaW52b2tlIGl0c2VsZi4gV2UgY2Fubm90XG4gICAgLy8gdXNlIGdyYW50SW52b2tlIGFzIHRoaXMgd291bGQgKG5hdHVyYWxseSkgY2F1c2UgYSBjaXJjdWxhciByZWZlcmVuY2VcbiAgICAvLyAoRnVuY3Rpb24gLT4gUm9sZSAtPiBGdW5jdGlvbikuXG4gICAgaGFuZGxlci5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydsYW1iZGE6SW52b2tlRnVuY3Rpb24nXSxcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIFN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICAgICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgICAgICAgICAgc2VydmljZTogJ2xhbWJkYScsXG4gICAgICAgICAgICByZXNvdXJjZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gdXNpbmcgaGFuZGxlci5ncmFudEludm9rZShwcm9wcy5mZWVkQnVpbGRlci51cGRhdGVGZWVkRnVuY3Rpb24pXG4gICAgLy8gY2F1c2VzIGNpcmN1bGFyIGRlcGVuZGVuY3kgZXJyb3JcbiAgICBoYW5kbGVyLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ2xhbWJkYTpJbnZva2VGdW5jdGlvbiddLFxuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgcmVzb3VyY2VzOiBbcHJvcHMuZmVlZEJ1aWxkZXIudXBkYXRlRmVlZEZ1bmN0aW9uLmZ1bmN0aW9uQXJuXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIGFsbG93IHRoZSBjYXRhbG9nIGJ1aWxkZXIgdG8gdXNlIHRoZSBjbGllbnQuXG4gICAgcHJvcHMuZGVueUxpc3QuZ3JhbnRSZWFkKGhhbmRsZXIpO1xuXG4gICAgcHJvcHMuYnVja2V0LmdyYW50UmVhZFdyaXRlKHRoaXMuZnVuY3Rpb24pO1xuXG4gICAgLy8gTW9uaXRvciB0aGUgZGVyaXZhdGl2ZSBvZiB0aGUgY2F0YWxvZyBzaXplLCBhbmQgYWxhcm0gaWYgdGhlIGNhdGFsb2dcbiAgICAvLyBsb3NlcyBtb3JlIHRoYW4gNSBpdGVtcy4gQ2F0YWxvZyBlbGVtZW50cyBjYW4gZGlzYXBwZWFyIGlmIHRoZXkgYXJlIGFkZGVkXG4gICAgLy8gdG8gdGhlIGRlbnktbGlzdCwgb3IgaWYgdGhleSBnZXQgdW4tcHVibGlzaGVkIGZyb20gdGhlIG9yaWdpbiByZXBvc2l0b3J5LlxuICAgIC8vIFN1Y2ggY2FzZXMgYXJlIG5vcm1hbCBhbmQgc2hvdWxkbid0IHR5cGljYWxseSByZXN1bHQgaW4gYSBzaWduaWZpY2FudFxuICAgIC8vIGNvbnRyYWN0aW9uIG9mIHRoZSBjYXRhbG9nIHNpemUuXG4gICAgY29uc3QgY2F0YWxvZ1NpemVDaGFuZ2UgPSBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgZXhwcmVzc2lvbjogJ0RJRkYoRklMTChtMSwgUkVQRUFUKSknLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICAgIHVzaW5nTWV0cmljczogeyBtMTogdGhpcy5tZXRyaWNSZWdpc3RlcmVkUGFja2FnZU1ham9yVmVyc2lvbnMoKSB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGFsYXJtU2hyaW5raW5nQ2F0YWxvZyA9IGNhdGFsb2dTaXplQ2hhbmdlLmNyZWF0ZUFsYXJtKFxuICAgICAgdGhpcyxcbiAgICAgICdTaHJpbmtpbmdDYXRhbG9nQWxhcm0nLFxuICAgICAge1xuICAgICAgICBhbGFybU5hbWU6IGAke3RoaXMubm9kZS5wYXRofS9TaHJpbmtpbmdDYXRhbG9nYCxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgICdUaGUgbnVtYmVyIG9mIHBhY2thZ2VzIHJlZ2lzdGVyZWQgaW4gdGhlIGNhdGFsb2cuanNvbiBvYmplY3QgaGFzIHNocnVuayBieSBtb3JlIHRoYW4gNScsXG4gICAgICAgICAgJ2VsZW1lbnRzLiBUaGVyZSBtaWdodCBiZSBhIG1hc3MgZXh0aW5jdGlvbiBldmVudCBnb2luZyBvbi4gVGhpcyBzaG91bGQgYmUgaW52ZXN0aWdhdGVkJyxcbiAgICAgICAgICAnYXMgc29vbiBhcyBwb3NzaWJsZS4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIGBDYXRhbG9nLmpzb246ICR7czNPYmplY3RVcmwocHJvcHMuYnVja2V0LCAnY2F0YWxvZy5qc29uJyl9YCxcbiAgICAgICAgICBgQ2F0YWxvZyBCdWlsZGVyOiAke2xhbWJkYUZ1bmN0aW9uVXJsKGhhbmRsZXIpfWAsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYFJVTkJPT0s6ICR7UlVOQk9PS19VUkx9YCxcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IuTEVTU19USEFOX1RIUkVTSE9MRCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDEsXG4gICAgICAgIHRocmVzaG9sZDogLTUsXG4gICAgICB9XG4gICAgKTtcbiAgICBwcm9wcy5tb25pdG9yaW5nLmFkZEhpZ2hTZXZlcml0eUFsYXJtKFxuICAgICAgJ0NhdGFsb2cgU2l6ZSBTaHJ1bmsnLFxuICAgICAgYWxhcm1TaHJpbmtpbmdDYXRhbG9nXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNNaXNzaW5nQ29uc3RydWN0RnJhbWV3b3JrQ291bnQob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuTUlTU0lOR19DT05TVFJVQ1RfRlJBTUVXT1JLX0NPVU5ULFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNNaXNzaW5nQ29uc3RydWN0RnJhbWV3b3JrVmVyc2lvbkNvdW50KFxuICAgIG9wdHM/OiBNZXRyaWNPcHRpb25zXG4gICk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5NSVNTSU5HX0NPTlNUUlVDVF9GUkFNRVdPUktfVkVSU0lPTl9DT1VOVCxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljUmVnaXN0ZXJlZFBhY2thZ2VNYWpvclZlcnNpb25zKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUFYSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLlJFR0lTVEVSRURfUEFDS0FHRVNfTUFKT1JfVkVSU0lPTixcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIGZvcm1hdCBmb3IgY2F0YWxvZyBvYmplY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0YWxvZ01vZGVsIHtcbiAgLyoqXG4gICAqIFBhY2thZ2VzIGluIHRoZSBjYXRhbG9nLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZXM6IFBhY2thZ2VJbmZvW107XG4gIC8qKlxuICAgKiBEYXRlIHRoZSBjYXRhbG9nIHdhcyBsYXN0IHVwZGF0ZWQsIGluIElTTyA4NjAxIGZvcm1hdC5cbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEYXRhIGZvcm1hdCBmb3IgcGFja2FnZXMgc3RvcmVkIGluIHRoZSBjYXRhbG9nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VJbmZvIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhc3NlbWJseS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1ham9yIHZlcnNpb24gb2YgdGhpcyBhc3NlbWJseSwgYWNjb3JkaW5nIHRvIFNlbVZlci5cbiAgICovXG4gIHJlYWRvbmx5IG1ham9yOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wbGV0ZSBTZW1WZXIgdmVyc2lvbiBzdHJpbmcgZm9yIHRoaXMgcGFja2FnZSdzIG1ham9yIHZlcnNpb24gc3RyZWFtLFxuICAgKiBpbmNsdWRpbmcgcHJlLXJlbGVhc2UgaWRlbnRpZmllcnMsIGJ1dCBleGNsdWRpbmcgYWRkaXRpb25hbCBtZXRhZGF0YVxuICAgKiAoZXZlcnl0aGluZyBzdGFydGluZyBhdCBgK2AsIGlmIHRoZXJlIGlzIGFueSkuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBTUERYIGxpY2Vuc2UgaWRlbnRpZmllciBmb3IgdGhlIHBhY2thZ2UncyBsaWNlbnNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBrZXl3b3JkcyBjb25maWd1cmVkIG9uIHRoZSBwYWNrYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5d29yZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBhc3NpZ25lZCBieSB0aGUgZGlzY292ZXJ5IGZ1bmN0aW9uIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSBvZiB0aGlzXG4gICAqIHBhY2thZ2UncyBtYWpvciB2ZXJzaW9uIHN0cmVhbSwgaWYgYW55LlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUaGUgY29uc3RydWN0IGZyYW1ld29yaywgaWYgcHJlc2VudC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnN0cnVjdEZyYW1ld29yaz86IENvbnN0cnVjdEZyYW1ld29yayB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGF1dGhvciBvZiB0aGUgcGFja2FnZS5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcjoge1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBlbWFpbD86IHN0cmluZztcbiAgICByZWFkb25seSB1cmw/OiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGxhbmd1YWdlcyBjb25maWd1cmVkIG9uIHRoZSBwYWNrYWdlLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmdcbiAgICogY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGxhbmd1YWdlczogQXNzZW1ibHlUYXJnZXRzO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIGF0IHdoaWNoIHRoaXMgdmVyc2lvbiB3YXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWU6IERhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcGFja2FnZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuIl19
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZC9jYXRhbG9nLWJ1aWxkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkNBQXlEO0FBQ3pELCtEQU1vQztBQUNwQyxpREFBOEQ7QUFDOUQsdURBQTREO0FBQzVELG1EQUFxRDtBQUVyRCwyQ0FBdUM7QUFDdkMsK0NBQWlFO0FBSWpFLG1EQUFnRDtBQUloRCx1REFBOEQ7QUFDOUQsMkNBQTREO0FBdUM1RDs7R0FFRztBQUNILE1BQWEsY0FBZSxTQUFRLHNCQUFTO0lBRzNDLFlBQW1CLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCOztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sT0FBTyxHQUFHLElBQUksZ0NBQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzNDLFdBQVcsRUFBRSxzQ0FBc0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDNUUsV0FBVyxFQUFFO2dCQUNYLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVU7Z0JBQ3BDLG1CQUFtQixFQUFFLE9BQU87Z0JBQzVCLDBCQUEwQixFQUN4QixLQUFLLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLFlBQVk7YUFDcEQ7WUFDRCxZQUFZLFFBQUUsS0FBSyxDQUFDLFlBQVksbUNBQUksd0JBQWEsQ0FBQyxTQUFTO1lBQzNELFVBQVUsRUFBRSxLQUFNO1lBQ2xCLDRCQUE0QixFQUFFLENBQUM7WUFDL0IsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxZQUFZO1NBQzlCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyx1Q0FBdUMsQ0FDN0QsT0FBTyxFQUNQLHNCQUFzQixDQUN2QixDQUFDO1FBRUYsNEVBQTRFO1FBQzVFLDJFQUEyRTtRQUMzRSx1RUFBdUU7UUFDdkUsa0NBQWtDO1FBQ2xDLE9BQU8sQ0FBQyxlQUFlLENBQ3JCLElBQUkseUJBQWUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztZQUNsQyxNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO1lBQ3BCLFNBQVMsRUFBRTtnQkFDVCxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ3ZCLFNBQVMsRUFBRSx1QkFBUyxDQUFDLG1CQUFtQjtvQkFDeEMsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFFBQVEsRUFBRSxVQUFVO29CQUNwQixZQUFZLEVBQUUsR0FBRztpQkFDbEIsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUNILENBQUM7UUFFRixrRUFBa0U7UUFDbEUsbUNBQW1DO1FBQ25DLE9BQU8sQ0FBQyxlQUFlLENBQ3JCLElBQUkseUJBQWUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztZQUNsQyxNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO1lBQ3BCLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDO1NBQzlELENBQUMsQ0FDSCxDQUFDO1FBRUYsK0NBQStDO1FBQy9DLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWxDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUzQyx1RUFBdUU7UUFDdkUsNEVBQTRFO1FBQzVFLDRFQUE0RTtRQUM1RSx3RUFBd0U7UUFDeEUsbUNBQW1DO1FBQ25DLE1BQU0saUJBQWlCLEdBQUcsSUFBSSwrQkFBYyxDQUFDO1lBQzNDLFVBQVUsRUFBRSx3QkFBd0I7WUFDcEMsTUFBTSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QixZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLEVBQUU7U0FDbEUsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQ3pELElBQUksRUFDSix1QkFBdUIsRUFDdkI7WUFDRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksbUJBQW1CO1lBQy9DLGdCQUFnQixFQUFFO2dCQUNoQix3RkFBd0Y7Z0JBQ3hGLHdGQUF3RjtnQkFDeEYsc0JBQXNCO2dCQUN0QixFQUFFO2dCQUNGLGlCQUFpQix1QkFBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLEVBQUU7Z0JBQzVELG9CQUFvQiw2QkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDaEQsRUFBRTtnQkFDRixZQUFZLHlCQUFXLEVBQUU7YUFDMUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1osa0JBQWtCLEVBQUUsbUNBQWtCLENBQUMsbUJBQW1CO1lBQzFELGlCQUFpQixFQUFFLENBQUM7WUFDcEIsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUNkLENBQ0YsQ0FBQztRQUNGLDZGQUE2RjtRQUM3Riw4RkFBOEY7UUFDOUYsNkZBQTZGO1FBQzdGLFdBQVc7UUFDWCxLQUFLLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUNuQyxxQkFBcUIsRUFDckIscUJBQXFCLENBQ3RCLENBQUM7SUFDSixDQUFDO0lBRU0sb0NBQW9DLENBQUMsSUFBb0I7UUFDOUQsT0FBTyxJQUFJLHVCQUFNLENBQUM7WUFDaEIsTUFBTSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QixTQUFTLEVBQUUsMEJBQVMsQ0FBQyxPQUFPO1lBQzVCLEdBQUcsSUFBSTtZQUNQLFVBQVUsMEVBQThDO1lBQ3hELFNBQVMsRUFBRSw2QkFBaUI7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLDJDQUEyQyxDQUNoRCxJQUFvQjtRQUVwQixPQUFPLElBQUksdUJBQU0sQ0FBQztZQUNoQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVCLFNBQVMsRUFBRSwwQkFBUyxDQUFDLE9BQU87WUFDNUIsR0FBRyxJQUFJO1lBQ1AsVUFBVSx5RkFBc0Q7WUFDaEUsU0FBUyxFQUFFLDZCQUFpQjtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sb0NBQW9DLENBQUMsSUFBb0I7UUFDOUQsT0FBTyxJQUFJLHVCQUFNLENBQUM7WUFDaEIsTUFBTSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QixTQUFTLEVBQUUsMEJBQVMsQ0FBQyxPQUFPO1lBQzVCLEdBQUcsSUFBSTtZQUNQLFVBQVUsMEVBQThDO1lBQ3hELFNBQVMsRUFBRSw2QkFBaUI7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbklELHdDQW1JQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXNzZW1ibHlUYXJnZXRzIH0gZnJvbSAnQGpzaWkvc3BlYyc7XG5pbXBvcnQgeyBBcm5Gb3JtYXQsIER1cmF0aW9uLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIENvbXBhcmlzb25PcGVyYXRvcixcbiAgTWF0aEV4cHJlc3Npb24sXG4gIE1ldHJpYyxcbiAgTWV0cmljT3B0aW9ucyxcbiAgU3RhdGlzdGljLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgSUZ1bmN0aW9uLCBUcmFjaW5nIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IGxhbWJkYUZ1bmN0aW9uVXJsLCBzM09iamVjdFVybCB9IGZyb20gJy4uLy4uL2RlZXAtbGluayc7XG5cbmltcG9ydCB7IE1vbml0b3JpbmcgfSBmcm9tICcuLi8uLi9tb25pdG9yaW5nJztcbmltcG9ydCB7IE92ZXJ2aWV3RGFzaGJvYXJkIH0gZnJvbSAnLi4vLi4vb3ZlcnZpZXctZGFzaGJvYXJkJztcbmltcG9ydCB7IFJVTkJPT0tfVVJMIH0gZnJvbSAnLi4vLi4vcnVuYm9vay11cmwnO1xuaW1wb3J0IHsgRGVueUxpc3QgfSBmcm9tICcuLi9kZW55LWxpc3QnO1xuaW1wb3J0IHsgRmVlZEJ1aWxkZXIgfSBmcm9tICcuLi9mZWVkLWJ1aWxkZXInO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RGcmFtZXdvcmsgfSBmcm9tICcuLi9pbmdlc3Rpb24vZnJhbWV3b3JrLWRldGVjdGlvbi5sYW1iZGEtc2hhcmVkJztcbmltcG9ydCB7IENhdGFsb2dCdWlsZGVyIGFzIEhhbmRsZXIgfSBmcm9tICcuL2NhdGFsb2ctYnVpbGRlcic7XG5pbXBvcnQgeyBNZXRyaWNOYW1lLCBNRVRSSUNTX05BTUVTUEFDRSB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgYENhdGFsb2dCdWlsZGVyYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXRhbG9nQnVpbGRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlIHN0b3JlIGJ1Y2tldC5cbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldDogSUJ1Y2tldDtcblxuICAvKipcbiAgICogVGhlIG1vbml0b3JpbmcgaGFuZGxlciB0byByZWdpc3RlciBhbGFybXMgd2l0aC5cbiAgICovXG4gIHJlYWRvbmx5IG1vbml0b3Jpbmc6IE1vbml0b3Jpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvdmVydmlldyBkYXNoYm9hcmQgdG8gYWRkIHdpZGdldHMgdG8uXG4gICAqL1xuICByZWFkb25seSBvdmVydmlld0Rhc2hib2FyZDogT3ZlcnZpZXdEYXNoYm9hcmQ7XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nIHNob3VsZCBleGVjdXRpb24gbG9ncyBiZSByZXRhaW5lZD9cbiAgICpcbiAgICogQGRlZmF1bHQgUmV0ZW50aW9uRGF5cy5URU5fWUVBUlNcbiAgICovXG4gIHJlYWRvbmx5IGxvZ1JldGVudGlvbj86IFJldGVudGlvbkRheXM7XG5cbiAgLyoqXG4gICAqIFRoZSBkZW55IGxpc3QgY29uc3RydWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVueUxpc3Q6IERlbnlMaXN0O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgdGhhdCBnZW5lcmF0ZXMgUlNTL0FUT00gZmVlZCBhZnRlciBjYXRhbG9nIGlzIHVwZGF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGZlZWRCdWlsZGVyOiBGZWVkQnVpbGRlcjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgb3IgcmUtYnVpbGRzIHRoZSBgY2F0YWxvZy5qc29uYCBvYmplY3QgaW4gdGhlIGRlc2lnbmF0ZWQgYnVja2V0LlxuICovXG5leHBvcnQgY2xhc3MgQ2F0YWxvZ0J1aWxkZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgZnVuY3Rpb246IElGdW5jdGlvbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENhdGFsb2dCdWlsZGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBIYW5kbGVyKHRoaXMsICdEZWZhdWx0Jywge1xuICAgICAgZGVzY3JpcHRpb246IGBDcmVhdGVzIHRoZSBjYXRhbG9nLmpzb24gb2JqZWN0IGluICR7cHJvcHMuYnVja2V0LmJ1Y2tldE5hbWV9YCxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIEJVQ0tFVF9OQU1FOiBwcm9wcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgQVdTX0VNRl9FTlZJUk9OTUVOVDogJ0xvY2FsJyxcbiAgICAgICAgRkVFRF9CVUlMREVSX0ZVTkNUSU9OX05BTUU6XG4gICAgICAgICAgcHJvcHMuZmVlZEJ1aWxkZXIudXBkYXRlRmVlZEZ1bmN0aW9uLmZ1bmN0aW9uTmFtZSxcbiAgICAgIH0sXG4gICAgICBsb2dSZXRlbnRpb246IHByb3BzLmxvZ1JldGVudGlvbiA/PyBSZXRlbnRpb25EYXlzLlRFTl9ZRUFSUyxcbiAgICAgIG1lbW9yeVNpemU6IDEwXzI0MCwgLy8gQ3VycmVudGx5IHRoZSBtYXhpbXVtIHBvc3NpYmxlIHNldHRpbmdcbiAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IDEsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICAgIHRyYWNpbmc6IFRyYWNpbmcuUEFTU19USFJPVUdILFxuICAgIH0pO1xuICAgIHRoaXMuZnVuY3Rpb24gPSBoYW5kbGVyO1xuICAgIHByb3BzLm92ZXJ2aWV3RGFzaGJvYXJkLmFkZENvbmN1cnJlbnRFeGVjdXRpb25NZXRyaWNUb0Rhc2hib2FyZChcbiAgICAgIGhhbmRsZXIsXG4gICAgICAnQ2F0YWxvZ0J1aWxkZXJMYW1iZGEnXG4gICAgKTtcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGludm9rZSBpdHNlbGYgaW4gY2FzZSBpdCBuZWVkcyB0byBjb250aW51ZSBpdCdzIHdvcmsgaW5cbiAgICAvLyBhIFwiY2hpbGRcIiBpbnZvY2F0aW9uLiBXZSBtdXN0IGhlbmNlIGFsbG93IGl0IHRvIGludm9rZSBpdHNlbGYuIFdlIGNhbm5vdFxuICAgIC8vIHVzZSBncmFudEludm9rZSBhcyB0aGlzIHdvdWxkIChuYXR1cmFsbHkpIGNhdXNlIGEgY2lyY3VsYXIgcmVmZXJlbmNlXG4gICAgLy8gKEZ1bmN0aW9uIC0+IFJvbGUgLT4gRnVuY3Rpb24pLlxuICAgIGhhbmRsZXIuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFsnbGFtYmRhOkludm9rZUZ1bmN0aW9uJ10sXG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBTdGFjay5vZih0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICAgIHNlcnZpY2U6ICdsYW1iZGEnLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICdmdW5jdGlvbicsXG4gICAgICAgICAgICByZXNvdXJjZU5hbWU6ICcqJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIHVzaW5nIGhhbmRsZXIuZ3JhbnRJbnZva2UocHJvcHMuZmVlZEJ1aWxkZXIudXBkYXRlRmVlZEZ1bmN0aW9uKVxuICAgIC8vIGNhdXNlcyBjaXJjdWxhciBkZXBlbmRlbmN5IGVycm9yXG4gICAgaGFuZGxlci5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydsYW1iZGE6SW52b2tlRnVuY3Rpb24nXSxcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIHJlc291cmNlczogW3Byb3BzLmZlZWRCdWlsZGVyLnVwZGF0ZUZlZWRGdW5jdGlvbi5mdW5jdGlvbkFybl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBhbGxvdyB0aGUgY2F0YWxvZyBidWlsZGVyIHRvIHVzZSB0aGUgY2xpZW50LlxuICAgIHByb3BzLmRlbnlMaXN0LmdyYW50UmVhZChoYW5kbGVyKTtcblxuICAgIHByb3BzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZSh0aGlzLmZ1bmN0aW9uKTtcblxuICAgIC8vIE1vbml0b3IgdGhlIGRlcml2YXRpdmUgb2YgdGhlIGNhdGFsb2cgc2l6ZSwgYW5kIGFsYXJtIGlmIHRoZSBjYXRhbG9nXG4gICAgLy8gbG9zZXMgbW9yZSB0aGFuIDUgaXRlbXMuIENhdGFsb2cgZWxlbWVudHMgY2FuIGRpc2FwcGVhciBpZiB0aGV5IGFyZSBhZGRlZFxuICAgIC8vIHRvIHRoZSBkZW55LWxpc3QsIG9yIGlmIHRoZXkgZ2V0IHVuLXB1Ymxpc2hlZCBmcm9tIHRoZSBvcmlnaW4gcmVwb3NpdG9yeS5cbiAgICAvLyBTdWNoIGNhc2VzIGFyZSBub3JtYWwgYW5kIHNob3VsZG4ndCB0eXBpY2FsbHkgcmVzdWx0IGluIGEgc2lnbmlmaWNhbnRcbiAgICAvLyBjb250cmFjdGlvbiBvZiB0aGUgY2F0YWxvZyBzaXplLlxuICAgIGNvbnN0IGNhdGFsb2dTaXplQ2hhbmdlID0gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgIGV4cHJlc3Npb246ICdESUZGKEZJTEwobTEsIFJFUEVBVCkpJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICB1c2luZ01ldHJpY3M6IHsgbTE6IHRoaXMubWV0cmljUmVnaXN0ZXJlZFBhY2thZ2VNYWpvclZlcnNpb25zKCkgfSxcbiAgICB9KTtcbiAgICBjb25zdCBhbGFybVNocmlua2luZ0NhdGFsb2cgPSBjYXRhbG9nU2l6ZUNoYW5nZS5jcmVhdGVBbGFybShcbiAgICAgIHRoaXMsXG4gICAgICAnU2hyaW5raW5nQ2F0YWxvZ0FsYXJtJyxcbiAgICAgIHtcbiAgICAgICAgYWxhcm1OYW1lOiBgJHt0aGlzLm5vZGUucGF0aH0vU2hyaW5raW5nQ2F0YWxvZ2AsXG4gICAgICAgIGFsYXJtRGVzY3JpcHRpb246IFtcbiAgICAgICAgICAnVGhlIG51bWJlciBvZiBwYWNrYWdlcyByZWdpc3RlcmVkIGluIHRoZSBjYXRhbG9nLmpzb24gb2JqZWN0IGhhcyBzaHJ1bmsgYnkgbW9yZSB0aGFuIDUnLFxuICAgICAgICAgICdlbGVtZW50cy4gVGhlcmUgbWlnaHQgYmUgYSBtYXNzIGV4dGluY3Rpb24gZXZlbnQgZ29pbmcgb24uIFRoaXMgc2hvdWxkIGJlIGludmVzdGlnYXRlZCcsXG4gICAgICAgICAgJ2FzIHNvb24gYXMgcG9zc2libGUuJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBgQ2F0YWxvZy5qc29uOiAke3MzT2JqZWN0VXJsKHByb3BzLmJ1Y2tldCwgJ2NhdGFsb2cuanNvbicpfWAsXG4gICAgICAgICAgYENhdGFsb2cgQnVpbGRlcjogJHtsYW1iZGFGdW5jdGlvblVybChoYW5kbGVyKX1gLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIGBSVU5CT09LOiAke1JVTkJPT0tfVVJMfWAsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkxFU1NfVEhBTl9USFJFU0hPTEQsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgICB0aHJlc2hvbGQ6IC01LFxuICAgICAgfVxuICAgICk7XG4gICAgLy8gVGhpcyBpcyBhIGhpZ2gtc2V2ZXJpdHkgYWxhcm0gYmVjYXVzZSBpdCBpcyBpbmRpY2F0aXZlIG9mIGEgcG9zc2libGUgbWFzcy1leHRpbmN0aW9uIGV2ZW50XG4gICAgLy8gaW4gdGhlIGNhdGFsb2cuIFRoaXMgc2hvdWxkIGRlZmluaXRlbHkgcHJvbXB0IGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uLCBhbHRob3VnaCBpdCBjYW4gYWxzb1xuICAgIC8vIGJlIGNhdXNlZCBieSB0aGUgcmVjZW50IGFkZGl0aW9uIG9mIGVub3VnaCBwYWNrYWdlcyBpbiB0aGUgZGVueS1saXN0IHRvIGNhdXNlIHRoZSBhbGFybSB0b1xuICAgIC8vIHRyaWdnZXIuXG4gICAgcHJvcHMubW9uaXRvcmluZy5hZGRIaWdoU2V2ZXJpdHlBbGFybShcbiAgICAgICdDYXRhbG9nIFNpemUgU2hydW5rJyxcbiAgICAgIGFsYXJtU2hyaW5raW5nQ2F0YWxvZ1xuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljTWlzc2luZ0NvbnN0cnVjdEZyYW1ld29ya0NvdW50KG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUFYSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLk1JU1NJTkdfQ09OU1RSVUNUX0ZSQU1FV09SS19DT1VOVCxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljTWlzc2luZ0NvbnN0cnVjdEZyYW1ld29ya1ZlcnNpb25Db3VudChcbiAgICBvcHRzPzogTWV0cmljT3B0aW9uc1xuICApOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuTUlTU0lOR19DT05TVFJVQ1RfRlJBTUVXT1JLX1ZFUlNJT05fQ09VTlQsXG4gICAgICBuYW1lc3BhY2U6IE1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY1JlZ2lzdGVyZWRQYWNrYWdlTWFqb3JWZXJzaW9ucyhvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5SRUdJU1RFUkVEX1BBQ0tBR0VTX01BSk9SX1ZFUlNJT04sXG4gICAgICBuYW1lc3BhY2U6IE1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBmb3JtYXQgZm9yIGNhdGFsb2cgb2JqZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhdGFsb2dNb2RlbCB7XG4gIC8qKlxuICAgKiBQYWNrYWdlcyBpbiB0aGUgY2F0YWxvZy5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VzOiBQYWNrYWdlSW5mb1tdO1xuICAvKipcbiAgICogRGF0ZSB0aGUgY2F0YWxvZyB3YXMgbGFzdCB1cGRhdGVkLCBpbiBJU08gODYwMSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGF0YSBmb3JtYXQgZm9yIHBhY2thZ2VzIHN0b3JlZCBpbiB0aGUgY2F0YWxvZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWNrYWdlSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXNzZW1ibHkuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtYWpvciB2ZXJzaW9uIG9mIHRoaXMgYXNzZW1ibHksIGFjY29yZGluZyB0byBTZW1WZXIuXG4gICAqL1xuICByZWFkb25seSBtYWpvcjogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tcGxldGUgU2VtVmVyIHZlcnNpb24gc3RyaW5nIGZvciB0aGlzIHBhY2thZ2UncyBtYWpvciB2ZXJzaW9uIHN0cmVhbSxcbiAgICogaW5jbHVkaW5nIHByZS1yZWxlYXNlIGlkZW50aWZpZXJzLCBidXQgZXhjbHVkaW5nIGFkZGl0aW9uYWwgbWV0YWRhdGFcbiAgICogKGV2ZXJ5dGhpbmcgc3RhcnRpbmcgYXQgYCtgLCBpZiB0aGVyZSBpcyBhbnkpLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgU1BEWCBsaWNlbnNlIGlkZW50aWZpZXIgZm9yIHRoZSBwYWNrYWdlJ3MgbGljZW5zZS5cbiAgICovXG4gIHJlYWRvbmx5IGxpY2Vuc2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Yga2V5d29yZHMgY29uZmlndXJlZCBvbiB0aGUgcGFja2FnZS5cbiAgICovXG4gIHJlYWRvbmx5IGtleXdvcmRzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTWV0YWRhdGEgYXNzaWduZWQgYnkgdGhlIGRpc2NvdmVyeSBmdW5jdGlvbiB0byB0aGUgbGF0ZXN0IHJlbGVhc2Ugb2YgdGhpc1xuICAgKiBwYWNrYWdlJ3MgbWFqb3IgdmVyc2lvbiBzdHJlYW0sIGlmIGFueS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGhlIGNvbnN0cnVjdCBmcmFtZXdvcmssIGlmIHByZXNlbnQuXG4gICAqL1xuICByZWFkb25seSBjb25zdHJ1Y3RGcmFtZXdvcms/OiBDb25zdHJ1Y3RGcmFtZXdvcmsgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3Igb2YgdGhlIHBhY2thZ2UuXG4gICAqL1xuICByZWFkb25seSBhdXRob3I6IHtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZW1haWw/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdXJsPzogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBsYW5ndWFnZXMgY29uZmlndXJlZCBvbiB0aGUgcGFja2FnZSwgYW5kIHRoZSBjb3JyZXNwb25kaW5nXG4gICAqIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBsYW5ndWFnZXM6IEFzc2VtYmx5VGFyZ2V0cztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCBhdCB3aGljaCB0aGlzIHZlcnNpb24gd2FzIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSB0aW1lOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHBhY2thZ2UuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cbiJdfQ==
@@ -1,4 +1,5 @@
1
1
  import { Duration } from 'aws-cdk-lib';
2
+ import * as cw from 'aws-cdk-lib/aws-cloudwatch';
2
3
  import * as iam from 'aws-cdk-lib/aws-iam';
3
4
  import { RetentionDays } from 'aws-cdk-lib/aws-logs';
4
5
  import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';
@@ -206,7 +207,25 @@ export interface CodeArtifactDomainProps {
206
207
  */
207
208
  export declare class ConstructHub extends Construct implements iam.IGrantable {
208
209
  private readonly ingestion;
210
+ private readonly monitoring;
209
211
  constructor(scope: Construct, id: string, props?: ConstructHubProps);
212
+ /**
213
+ * Returns a list of all high-severity alarms from this ConstructHub instance.
214
+ * These warrant immediate attention as they are indicative of a system health
215
+ * issue.
216
+ */
217
+ get highSeverityAlarms(): cw.IAlarm[];
218
+ /**
219
+ * Returns a list of all low-severity alarms from this ConstructHub instance.
220
+ * These do not necessitate immediate attention, as they do not have direct
221
+ * customer-visible impact, or handling is not time-sensitive. They indicate
222
+ * that something unusual (not necessarily bad) is happening.
223
+ */
224
+ get lowSeverityAlarms(): cw.IAlarm[];
225
+ /**
226
+ * Returns a list of all alarms configured by this ConstructHub instance.
227
+ */
228
+ get allAlarms(): cw.IAlarm[];
210
229
  get grantPrincipal(): iam.IPrincipal;
211
230
  get ingestionQueue(): sqs.IQueue;
212
231
  private createVpc;
@@ -45,7 +45,7 @@ class ConstructHub extends constructs_1.Construct {
45
45
  const storageFactory = storage_1.S3StorageFactory.getOrCreate(this, {
46
46
  failover: props.failoverStorage,
47
47
  });
48
- const monitoring = new monitoring_1.Monitoring(this, 'Monitoring', {
48
+ this.monitoring = new monitoring_1.Monitoring(this, 'Monitoring', {
49
49
  alarmActions: props.alarmActions,
50
50
  });
51
51
  const overviewDashboard = new overview_dashboard_1.OverviewDashboard(this, 'OverviewDashboard', {
@@ -98,7 +98,7 @@ class ConstructHub extends constructs_1.Construct {
98
98
  rules: (_f = props.denyList) !== null && _f !== void 0 ? _f : [],
99
99
  packageDataBucket: packageData,
100
100
  packageDataKeyPrefix: constants_1.STORAGE_KEY_PREFIX,
101
- monitoring: monitoring,
101
+ monitoring: this.monitoring,
102
102
  overviewDashboard: overviewDashboard,
103
103
  });
104
104
  // disable fetching package stats by default if a different package
@@ -109,14 +109,14 @@ class ConstructHub extends constructs_1.Construct {
109
109
  if (fetchPackageStats) {
110
110
  packageStats = new package_stats_1.PackageStats(this, 'Stats', {
111
111
  bucket: packageData,
112
- monitoring,
112
+ monitoring: this.monitoring,
113
113
  logRetention: props.logRetention,
114
114
  objectKey: statsKey,
115
115
  });
116
116
  }
117
117
  const versionTracker = new version_tracker_1.VersionTracker(this, 'VersionTracker', {
118
118
  bucket: packageData,
119
- monitoring,
119
+ monitoring: this.monitoring,
120
120
  logRetention: props.logRetention,
121
121
  });
122
122
  const feedBuilder = new feed_builder_1.FeedBuilder(this, 'FeedBuilder', {
@@ -130,7 +130,7 @@ class ConstructHub extends constructs_1.Construct {
130
130
  codeArtifact,
131
131
  denyList,
132
132
  logRetention: props.logRetention,
133
- monitoring,
133
+ monitoring: this.monitoring,
134
134
  overviewDashboard: overviewDashboard,
135
135
  vpc,
136
136
  vpcEndpoints,
@@ -152,7 +152,7 @@ class ConstructHub extends constructs_1.Construct {
152
152
  bucket: packageData,
153
153
  gitHubCredentialsSecret: (_m = props.feedConfiguration) === null || _m === void 0 ? void 0 : _m.githubTokenSecret,
154
154
  feedBuilder,
155
- monitoring,
155
+ monitoring: this.monitoring,
156
156
  overviewDashboard,
157
157
  });
158
158
  }
@@ -161,7 +161,7 @@ class ConstructHub extends constructs_1.Construct {
161
161
  codeArtifact,
162
162
  orchestration,
163
163
  logRetention: props.logRetention,
164
- monitoring,
164
+ monitoring: this.monitoring,
165
165
  packageLinks: props.packageLinks,
166
166
  packageTags: packageTagsSerialized,
167
167
  reprocessFrequency: props.reprocessFrequency,
@@ -181,7 +181,7 @@ class ConstructHub extends constructs_1.Construct {
181
181
  });
182
182
  const webApp = new webapp_1.WebApp(this, 'WebApp', {
183
183
  domain: props.domain,
184
- monitoring,
184
+ monitoring: this.monitoring,
185
185
  packageData,
186
186
  packageLinks: props.packageLinks,
187
187
  packageTags: packageTagsSerialized,
@@ -202,7 +202,7 @@ class ConstructHub extends constructs_1.Construct {
202
202
  denyList,
203
203
  ingestion: this.ingestion,
204
204
  licenseList,
205
- monitoring,
205
+ monitoring: this.monitoring,
206
206
  queue: this.ingestion.queue,
207
207
  repository: codeArtifact,
208
208
  overviewDashboard: overviewDashboard,
@@ -210,7 +210,7 @@ class ConstructHub extends constructs_1.Construct {
210
210
  const inventory = new inventory_1.Inventory(this, 'InventoryCanary', {
211
211
  bucket: packageData,
212
212
  logRetention: props.logRetention,
213
- monitoring,
213
+ monitoring: this.monitoring,
214
214
  overviewDashboard: overviewDashboard,
215
215
  });
216
216
  new backend_dashboard_1.BackendDashboard(this, 'BackendDashboard', {
@@ -246,6 +246,31 @@ class ConstructHub extends constructs_1.Construct {
246
246
  application.associateStack(aws_cdk_lib_1.Stack.of(this));
247
247
  }
248
248
  }
249
+ /**
250
+ * Returns a list of all high-severity alarms from this ConstructHub instance.
251
+ * These warrant immediate attention as they are indicative of a system health
252
+ * issue.
253
+ */
254
+ get highSeverityAlarms() {
255
+ // Note: the array is already returned by-copy by Monitoring, so not copying again.
256
+ return this.monitoring.highSeverityAlarms;
257
+ }
258
+ /**
259
+ * Returns a list of all low-severity alarms from this ConstructHub instance.
260
+ * These do not necessitate immediate attention, as they do not have direct
261
+ * customer-visible impact, or handling is not time-sensitive. They indicate
262
+ * that something unusual (not necessarily bad) is happening.
263
+ */
264
+ get lowSeverityAlarms() {
265
+ // Note: the array is already returned by-copy by Monitoring, so not copying again.
266
+ return this.monitoring.lowSeverityAlarms;
267
+ }
268
+ /**
269
+ * Returns a list of all alarms configured by this ConstructHub instance.
270
+ */
271
+ get allAlarms() {
272
+ return [...this.highSeverityAlarms, ...this.lowSeverityAlarms];
273
+ }
249
274
  get grantPrincipal() {
250
275
  return this.ingestion.grantPrincipal;
251
276
  }
@@ -363,7 +388,7 @@ class ConstructHub extends constructs_1.Construct {
363
388
  }
364
389
  exports.ConstructHub = ConstructHub;
365
390
  _a = JSII_RTTI_SYMBOL_1;
366
- ConstructHub[_a] = { fqn: "construct-hub.ConstructHub", version: "0.4.4" };
391
+ ConstructHub[_a] = { fqn: "construct-hub.ConstructHub", version: "0.4.7" };
367
392
  /**
368
393
  * How possibly risky operations (such as doc-generation, which requires
369
394
  * installing the indexed packages in order to trans-literate sample code) are
@@ -403,4 +428,4 @@ var Isolation;
403
428
  */
404
429
  Isolation[Isolation["NO_INTERNET_ACCESS"] = 2] = "NO_INTERNET_ACCESS";
405
430
  })(Isolation = exports.Isolation || (exports.Isolation = {}));
406
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LWh1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdHJ1Y3QtaHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0dBQTJFO0FBQzNFLDZDQUFvRDtBQUNwRCwyQ0FBMkM7QUFFM0MsaURBQTRFO0FBRTVFLHlDQUF5QztBQUN6QywrQ0FBdUQ7QUFHdkQsMkNBQXVDO0FBQ3ZDLHlFQUE0RTtBQUU1RSx1Q0FBZ0Q7QUFDaEQsMkRBQXVEO0FBRXZELHlEQUFxRDtBQUNyRCxtREFBZ0Q7QUFDaEQseURBQXFEO0FBQ3JELDJEQUF3RDtBQUN4RCwyREFBdUQ7QUFDdkQsMkRBQTZEO0FBQzdELDBEQUE2RTtBQUM3RSwrREFBMkQ7QUFDM0QsMERBQXVEO0FBQ3ZELHVEQUF5RTtBQUN6RSw2Q0FBMEM7QUFDMUMsNkRBQXlEO0FBRXpELHVEQUEwQztBQUkxQywwQ0FBZ0Q7QUFDaEQsaURBQTZDO0FBQzdDLHFDQU1rQjtBQTBObEI7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQUd6QyxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixRQUEyQixFQUFFOztRQUU3QixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQ0UsS0FBSyxDQUFDLHFCQUFxQixJQUFJLElBQUk7WUFDbkMsS0FBSyxDQUFDLHNCQUFzQixJQUFJLElBQUksRUFDcEM7WUFDQSxNQUFNLElBQUksS0FBSyxDQUNiLDBIQUEwSCxDQUMzSCxDQUFDO1NBQ0g7UUFFRCxNQUFNLHVCQUF1QixHQUFHLE9BQUEsS0FBSyxDQUFDLGlCQUFpQiwwQ0FBRSxpQkFBaUIsRUFDeEUsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsS0FBSyxDQUFDO1FBRVYsTUFBTSxjQUFjLEdBQUcsMEJBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTtZQUN4RCxRQUFRLEVBQUUsS0FBSyxDQUFDLGVBQWU7U0FDaEMs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RCxXQUFZLFNBQVM7SUFDbkI7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsbUZBQXlCLENBQUE7SUFFekI7Ozs7T0FJRztJQUNILCtFQUF1QixDQUFBO0lBRXZCOzs7Ozs7OztPQVFHO0lBQ0gscUVBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQWpDVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQWlDcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1zZXJ2aWNlY2F0YWxvZ2FwcHJlZ2lzdHJ5LWFscGhhJztcbmltcG9ydCB7IER1cmF0aW9uLCBTdGFjaywgVGFncyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEFueVByaW5jaXBhbCwgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQmxvY2tQdWJsaWNBY2Nlc3MgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0ICogYXMgc2VjcmV0c21hbmFnZXIgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCAqIGFzIHNxcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3FzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgY3JlYXRlUmVzdHJpY3RlZFNlY3VyaXR5R3JvdXBzIH0gZnJvbSAnLi9fbGltaXRlZC1pbnRlcm5ldC1hY2Nlc3MnO1xuaW1wb3J0IHsgQWxhcm1BY3Rpb25zLCBEb21haW4gfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBEZW55TGlzdCwgSW5nZXN0aW9uIH0gZnJvbSAnLi9iYWNrZW5kJztcbmltcG9ydCB7IEJhY2tlbmREYXNoYm9hcmQgfSBmcm9tICcuL2JhY2tlbmQtZGFzaGJvYXJkJztcbmltcG9ydCB7IERlbnlMaXN0UnVsZSB9IGZyb20gJy4vYmFja2VuZC9kZW55LWxpc3QvYXBpJztcbmltcG9ydCB7IEZlZWRCdWlsZGVyIH0gZnJvbSAnLi9iYWNrZW5kL2ZlZWQtYnVpbGRlcic7XG5pbXBvcnQgeyBJbnZlbnRvcnkgfSBmcm9tICcuL2JhY2tlbmQvaW52ZW50b3J5JztcbmltcG9ydCB7IExpY2Vuc2VMaXN0IH0gZnJvbSAnLi9iYWNrZW5kL2xpY2Vuc2UtbGlzdCc7XG5pbXBvcnQgeyBPcmNoZXN0cmF0aW9uIH0gZnJvbSAnLi9iYWNrZW5kL29yY2hlc3RyYXRpb24nO1xuaW1wb3J0IHsgUGFja2FnZVN0YXRzIH0gZnJvbSAnLi9iYWNrZW5kL3BhY2thZ2Utc3RhdHMnO1xuaW1wb3J0IHsgUmVsZWFzZU5vdGVGZXRjaGVyIH0gZnJvbSAnLi9iYWNrZW5kL3JlbGVhc2Utbm90ZXMnO1xuaW1wb3J0IHsgQ0FUQUxPR19LRVksIFNUT1JBR0VfS0VZX1BSRUZJWCB9IGZyb20gJy4vYmFja2VuZC9zaGFyZWQvY29uc3RhbnRzJztcbmltcG9ydCB7IFZlcnNpb25UcmFja2VyIH0gZnJvbSAnLi9iYWNrZW5kL3ZlcnNpb24tdHJhY2tlcic7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSAnLi9jb2RlYXJ0aWZhY3QvcmVwb3NpdG9yeSc7XG5pbXBvcnQgeyBEb21haW5SZWRpcmVjdCwgRG9tYWluUmVkaXJlY3RTb3VyY2UgfSBmcm9tICcuL2RvbWFpbi1yZWRpcmVjdCc7XG5pbXBvcnQgeyBNb25pdG9yaW5nIH0gZnJvbSAnLi9tb25pdG9yaW5nJztcbmltcG9ydCB7IE92ZXJ2aWV3RGFzaGJvYXJkIH0gZnJvbSAnLi9vdmVydmlldy1kYXNoYm9hcmQnO1xuaW1wb3J0IHsgSVBhY2thZ2VTb3VyY2UgfSBmcm9tICcuL3BhY2thZ2Utc291cmNlJztcbmltcG9ydCB7IE5wbUpzIH0gZnJvbSAnLi9wYWNrYWdlLXNvdXJjZXMnO1xuaW1wb3J0IHsgUGFja2FnZVRhZyB9IGZyb20gJy4vcGFja2FnZS10YWcnO1xuaW1wb3J0IHsgUGFja2FnZVRhZ0dyb3VwIH0gZnJvbSAnLi9wYWNrYWdlLXRhZy1ncm91cCc7XG5pbXBvcnQgeyBQcmVsb2FkRmlsZSB9IGZyb20gJy4vcHJlbG9hZC1maWxlJztcbmltcG9ydCB7IFMzU3RvcmFnZUZhY3RvcnkgfSBmcm9tICcuL3MzL3N0b3JhZ2UnO1xuaW1wb3J0IHsgU3BkeExpY2Vuc2UgfSBmcm9tICcuL3NwZHgtbGljZW5zZSc7XG5pbXBvcnQge1xuICBXZWJBcHAsXG4gIFBhY2thZ2VMaW5rQ29uZmlnLFxuICBGZWF0dXJlZFBhY2thZ2VzLFxuICBGZWF0dXJlRmxhZ3MsXG4gIENhdGVnb3J5LFxufSBmcm9tICcuL3dlYmFwcCc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgZ2VuZXJhdGluZyBSU1MgYW5kIEFUT00gZmVlZCBmb3IgdGhlIGxhdGVzdCBwYWNrYWdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEdpdGh1YiB0b2tlbiBmb3IgZ2VuZXJhdGluZyByZWxlYXNlIG5vdGVzLiBXaGVuIG1pc3Npbmcgbm8gcmVsZWFzZSBub3RlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgUlNTL0FUT00gZmVlZFxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViVG9rZW5TZWNyZXQ/OiBzZWNyZXRzbWFuYWdlci5JU2VjcmV0O1xuXG4gIC8qKlxuICAgKiBUaXRsZSB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgZmVlZFxuICAgKi9cbiAgcmVhZG9ubHkgZmVlZFRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBkZXNjcmlwdGlvbiB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgZmVlZFxuICAgKi9cbiAgcmVhZG9ubHkgZmVlZERlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciBgQ29uc3RydWN0SHViYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zdHJ1Y3RIdWJQcm9wcyB7XG4gIC8qKlxuICAgKiBDb25uZWN0IHRoZSBodWIgdG8gYSBkb21haW4gKHJlcXVpcmVzIGEgaG9zdGVkIHpvbmUgYW5kIGEgY2VydGlmaWNhdGUpLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluPzogRG9tYWluO1xuXG4gIC8qKlxuICAgKiBBY3Rpb25zIHRvIHBlcmZvcm0gd2hlbiBhbGFybXMgYXJlIHNldC5cbiAgICovXG4gIHJlYWRvbmx5IGFsYXJtQWN0aW9ucz86IEFsYXJtQWN0aW9ucztcblxuICAvKipcbiAgICogV2hldGhlciBjb21wdXRlIGVudmlyb25tZW50cyBmb3Igc2Vuc2l0aXZlIHRhc2tzICh3aGljaCBvcGVyYXRlIG9uXG4gICAqIHVuLXRydXN0ZWQgY29tcGxleCBkYXRhLCBzdWNoIGFzIHRoZSB0cmFuc2xpdGVyYXRvciwgd2hpY2ggb3BlcmF0ZXMgd2l0aFxuICAgKiBleHRlcm5hbGx5LXNvdXJjZWQgbnBtIHBhY2thZ2UgdGFyYmFsbHMpIHNob3VsZCBydW4gaW4gbmV0d29yay1pc29sYXRlZFxuICAgKiBlbnZpcm9ubWVudHMuIFRoaXMgaW1wbGllcyB0aGUgY3JlYXRpb24gb2YgYWRkaXRvbmFsIHJlc291cmNlcywgaW5jbHVkaW5nOlxuICAgKlxuICAgKiAtIEEgVlBDIHdpdGggb25seSBpc29sYXRlZCBzdWJuZXRzLlxuICAgKiAtIFZQQyBFbmRwb2ludHMgKENsb3VkV2F0Y2ggTG9ncywgQ29kZUFydGlmYWN0LCBDb2RlQXJ0aWZhY3QgQVBJLCBTMywgLi4uKVxuICAgKiAtIEEgQ29kZUFydGlmYWN0IFJlcG9zaXRvcnkgd2l0aCBhbiBleHRlcm5hbCBjb25uZWN0aW9uIHRvIG5wbWpzLmNvbVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCB1c2Ugc2Vuc2l0aXZlVGFza0lzb2xhdGlvbiBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNvbGF0ZVNlbnNpdGl2ZVRhc2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBjb21wdXRlIGVudmlyb25tZW50cyBmb3Igc2Vuc2l0aXZlIHRhc2tzICh3aGljaCBvcGVyYXRlIG9uXG4gICAqIHVuLXRydXN0ZWQgY29tcGxleCBkYXRhLCBzdWNoIGFzIHRoZSB0cmFuc2xpdGVyYXRvciwgd2hpY2ggb3BlcmF0ZXMgd2l0aFxuICAgKiBleHRlcm5hbGx5LXNvdXJjZWQgbnBtIHBhY2thZ2UgdGFyYmFsbHMpIHNob3VsZCBydW4gaW4gbmV0d29yay1pc29sYXRlZFxuICAgKiBlbnZpcm9ubWVudHMuIFRoaXMgaW1wbGllcyB0aGUgY3JlYXRpb24gb2YgYWRkaXRvbmFsIHJlc291cmNlcywgaW5jbHVkaW5nOlxuICAgKlxuICAgKiAtIEEgVlBDIHdpdGggb25seSBpc29sYXRlZCBzdWJuZXRzLlxuICAgKiAtIFZQQyBFbmRwb2ludHMgKENsb3VkV2F0Y2ggTG9ncywgQ29kZUFydGlmYWN0LCBDb2RlQXJ0aWZhY3QgQVBJLCBTMywgLi4uKVxuICAgKiAtIEEgQ29kZUFydGlmYWN0IFJlcG9zaXRvcnkgd2l0aCBhbiBleHRlcm5hbCBjb25uZWN0aW9uIHRvIG5wbWpzLmNvbVxuICAgKlxuICAgKiBAZGVmYXVsdCBJc29sYXRpb24uTk9fSU5URVJORVRfQUNDRVNTXG4gICAqL1xuICByZWFkb25seSBzZW5zaXRpdmVUYXNrSXNvbGF0aW9uPzogSXNvbGF0aW9uO1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byByZXRhaW4gQ2xvdWRXYXRjaCBsb2dzIGZvci5cbiAgICpcbiAgICogQGRlZmF1bHRzIFJldGVudGlvbkRheXMuVEVOX1lFQVJTXG4gICAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb24/OiBSZXRlbnRpb25EYXlzO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQ2xvdWRXYXRjaCBkYXNoYm9hcmQgdGhhdCByZXByZXNlbnRzIHRoZSBoZWFsdGggb2YgYmFja2VuZFxuICAgKiBzeXN0ZW1zLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFja2VuZERhc2hib2FyZE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYWNrYWdlcyB0byBibG9jayBmcm9tIHRoZSBjb25zdHJ1Y3QgaHViLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgZGVueUxpc3Q/OiBEZW55TGlzdFJ1bGVbXTtcblxuICAvKipcbiAgICogVGhlIHBhY2thZ2Ugc291cmNlcyB0byByZWdpc3RlciB3aXRoIHRoaXMgQ29uc3RydWN0SHViIGluc3RhbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgc3RhbmRhcmQgbnBtanMuY29tIHBhY2thZ2Ugc291cmNlIHdpbGwgYmUgY29uZmlndXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VTb3VyY2VzPzogSVBhY2thZ2VTb3VyY2VbXTtcblxuICAvKipcbiAgICogVGhlIGFsbG93ZWQgbGljZW5zZXMgZm9yIHBhY2thZ2VzIGluZGV4ZWQgYnkgdGhpcyBpbnN0YW5jZSBvZiBDb25zdHJ1Y3RIdWIuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsuLi5TcGR4TGljZW5zZS5hcGFjaGUoKSwuLi5TcGR4TGljZW5zZS5ic2QoKSwuLi5TcGR4TGljZW5zZS5jZGRsKCksLi4uU3BkeExpY2Vuc2UuZXBsKCksU3BkeExpY2Vuc2UuSVNDLC4uLlNwZHhMaWNlbnNlLm1pdCgpLFNwZHhMaWNlbnNlLk1QTF8yXzBdXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkTGljZW5zZXM/OiBTcGR4TGljZW5zZVtdO1xuXG4gIC8qKlxuICAgKiBXaGVuIHVzaW5nIGEgQ29kZUFydGlmYWN0IHBhY2thZ2Ugc291cmNlLCBpdCBpcyBvZnRlbiBkZXNpcmFibGUgdG8gaGF2ZVxuICAgKiBDb25zdHJ1Y3RIdWIgcHJvdmlzaW9uIGl0J3MgaW50ZXJuYWwgQ29kZUFydGlmYWN0IHJlcG9zaXRvcnkgaW4gdGhlIHNhbWVcbiAgICogQ29kZUFydGlmYWN0IGRvbWFpbiwgYW5kIHRvIGNvbmZpZ3VyZSB0aGUgcGFja2FnZSBzb3VyY2UgcmVwb3NpdG9yeSBhcyBhblxuICAgKiB1cHN0cmVhbSBvZiB0aGUgaW50ZXJuYWwgcmVwb3NpdG9yeS4gVGhpcyB3YXksIGFsbCBwYWNrYWdlcyBpbiB0aGUgc291cmNlXG4gICAqIGFyZSBhdmFpbGFibGUgdG8gQ29uc3RydWN0SHViJ3MgYmFja2VuZCBwcm9jZXNzaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUuXG4gICAqL1xuICByZWFkb25seSBjb2RlQXJ0aWZhY3REb21haW4/OiBDb2RlQXJ0aWZhY3REb21haW5Qcm9wcztcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgY3VzdG9tIHBhY2thZ2UgcGFnZSBsaW5rcy5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VMaW5rcz86IFBhY2thZ2VMaW5rQ29uZmlnW107XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIGN1c3RvbSBwYWNrYWdlIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VUYWdzPzogUGFja2FnZVRhZ1tdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciBncm91cGluZyBjdXN0b20gcGFja2FnZSB0YWdzXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlVGFnR3JvdXBzPzogUGFja2FnZVRhZ0dyb3VwW107XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIHBhY2thZ2VzIHRvIGZlYXR1cmUgb24gdGhlIGhvbWUgcGFnZS5cbiAgICogQGRlZmF1bHQgLSBEaXNwbGF5IHRoZSAxMCBtb3N0IHJlY2VudGx5IHVwZGF0ZWQgcGFja2FnZXNcbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmVkUGFja2FnZXM/OiBGZWF0dXJlZFBhY2thZ2VzO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgZmVhdHVyZSBmbGFncyBmb3IgdGhlIHdlYiBhcHAuXG4gICAqL1xuICByZWFkb25seSBmZWF0dXJlRmxhZ3M/OiBGZWF0dXJlRmxhZ3M7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSB3aGV0aGVyIG9yIG5vdCB0aGUgYmFja2VuZCBzaG91bGQgcGVyaW9kaWNhbGx5IHF1ZXJ5IE5QTVxuICAgKiBmb3IgdGhlIG51bWJlciBvZiBkb3dubG9hZHMgYSBwYWNrYWdlIGhhcyBpbiB0aGUgcGFzdCB3ZWVrLCBhbmRcbiAgICogZGlzcGxheSBkb3dubG9hZCBjb3VudHMgb24gdGhlIHdlYiBhcHAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSBpZiBwYWNrYWdlU291cmNlcyBpcyBub3Qgc3BlY2lmaWVkICh0aGUgZGVmYXVsdHMgYXJlXG4gICAqIHVzZWQpLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHJlYWRvbmx5IGZldGNoUGFja2FnZVN0YXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQnJvd3NlIGNhdGVnb3JpZXMuIEVhY2ggY2F0ZWdvcnkgd2lsbCBhcHBlYXIgaW4gdGhlIGhvbWUgcGFnZSBhcyBhIGJ1dHRvblxuICAgKiB3aXRoIGEgbGluayB0byB0aGUgcmVsZXZhbnQgc2VhcmNoIHF1ZXJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgY2F0ZWdvcmllcz86IENhdGVnb3J5W107XG5cbiAgLyoqXG4gICAqIFdpcmUgY29uc3RydWN0IGh1YiB0byB1c2UgdGhlIGZhaWxvdmVyIHN0b3JhZ2UgYnVja2V0cy5cbiAgICpcbiAgICogRG8gbm90IGFjdGl2YXRlIHRoaXMgcHJvcGVydHkgdW50aWwgeW91J3ZlIHBvcHVsYXRlZCB5b3VyIGZhaWxvdmVyIGJ1Y2tldHNcbiAgICogd2l0aCB0aGUgbmVjZXNzYXJ5IGRhdGEuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nka2xhYnMvY29uc3RydWN0LWh1Yi9ibG9iL2Rldi9kb2NzL29wZXJhdG9yLXJ1bmJvb2subWQjc3RvcmFnZS1kaXNhc3RlclxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZmFpbG92ZXJTdG9yYWdlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSG93IGZyZXF1ZW50bHkgYWxsIHBhY2thZ2VzIHNob3VsZCBnZXQgZnVsbHkgcmVwcm9jZXNzZWQuXG4gICAqXG4gICAqIFNlZSB0aGUgb3BlcmF0b3IgcnVuYm9vayBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCByZXByb2Nlc3NpbmcuXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nka2xhYnMvY29uc3RydWN0LWh1Yi9ibG9iL21haW4vZG9jcy9vcGVyYXRvci1ydW5ib29rLm1kXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbmV2ZXJcbiAgICovXG4gIHJlYWRvbmx5IHJlcHJvY2Vzc0ZyZXF1ZW5jeT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGRvbWFpbnMgd2hpY2ggd2lsbCBiZSBzZXQgdXAgdG8gcmVkaXJlY3QgdG8gdGhlIHByaW1hcnlcbiAgICogY29uc3RydWN0IGh1YiBkb21haW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsRG9tYWlucz86IERvbWFpblJlZGlyZWN0U291cmNlW107XG5cbiAgLyoqXG4gICAqIEphdmFzY3JpcHQgdG8gcnVuIG9uIHdlYmFwcCBiZWZvcmUgYXBwIGxvYWRzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY3JlYXRlIGFuIGVtcHR5IGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByZWxvYWRTY3JpcHQ/OiBQcmVsb2FkRmlsZTtcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIEFwcFJlZ2lzdHJ5IGFwcGxpY2F0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhY2sgY29udGFpbmluZ1xuICAgKiB0aGlzIGNvbnN0cnVjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYXBwUmVnaXN0cnlBcHBsaWNhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIGdlbmVyYXRpbmcgUlNTL0F0b20gZmVlZHMgd2l0aCB0aGUgbGF0ZXN0IHBhY2thZ2VzLiBJZiB0aGUgdmFsdWUgaXMgbWlzc2luZ1xuICAgKiB0aGUgZ2VuZXJhdGVkIFJTUy9BVE9NIGZlZWQgd291bGQgbm90IGNvbnRhaW4gcmVsZWFzZSBub3Rlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmVlZENvbmZpZ3VyYXRpb24/OiBGZWVkQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBwZXJ0YWluaW5nIHRvIGFuIGV4aXN0aW5nIENvZGVBcnRpZmFjdCBEb21haW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUFydGlmYWN0RG9tYWluUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIENvZGVBcnRpZmFjdCBkb21haW4uXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFueSB1cHN0cmVhbSByZXBvc2l0b3JpZXMgaW4gdGhpcyBDb2RlQXJ0aWZhY3QgZG9tYWluIHRoYXQgc2hvdWxkIGJlXG4gICAqIGNvbmZpZ3VyZWQgb24gdGhlIGludGVybmFsIENvZGVBcnRpZmFjdCByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgdXBzdHJlYW1zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29uc3RydWN0IEh1Yi5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnN0cnVjdEh1YiBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIGlhbS5JR3JhbnRhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmdlc3Rpb246IEluZ2VzdGlvbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBDb25zdHJ1Y3RIdWJQcm9wcyA9IHt9XG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5pc29sYXRlU2Vuc2l0aXZlVGFza3MgIT0gbnVsbCAmJlxuICAgICAgcHJvcHMuc2Vuc2l0aXZlVGFza0lzb2xhdGlvbiAhPSBudWxsXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdTdXBwbHlpbmcgYm90aCBpc29sYXRlU2Vuc2l0aXZlVGFza3MgYW5kIHNlbnNpdGl2ZVRhc2tJc29sYXRpb24gaXMgbm90IHN1cHBvcnRlZC4gUmVtb3ZlIHVzYWdlIG9mIGlzb2xhdGVTZW5zaXRpdmVUYXNrcy4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEZldGNoUmVsZWFzZU5vdGVzID0gcHJvcHMuZmVlZENvbmZpZ3VyYXRpb24/LmdpdGh1YlRva2VuU2VjcmV0XG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2U7XG5cbiAgICBjb25zdCBzdG9yYWdlRmFjdG9yeSA9IFMzU3RvcmFnZUZhY3RvcnkuZ2V0T3JDcmVhdGUodGhpcywge1xuICAgICAgZmFpbG92ZXI6IHByb3BzLmZhaWxvdmVyU3RvcmFnZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1vbml0b3JpbmcgPSBuZXcgTW9uaXRvcmluZyh0aGlzLCAnTW9uaXRvcmluZycsIHtcbiAgICAgIGFsYXJtQWN0aW9uczogcHJvcHMuYWxhcm1BY3Rpb25zLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3ZlcnZpZXdEYXNoYm9hcmQgPSBuZXcgT3ZlcnZpZXdEYXNoYm9hcmQodGhpcywgJ092ZXJ2aWV3RGFzaGJvYXJkJywge1xuICAgICAgbGFtYmRhU2VydmljZUFsYXJtVGhyZXNob2xkOiA3MCxcbiAgICAgIGRhc2hib2FyZE5hbWU6IHByb3BzLmJhY2tlbmREYXNoYm9hcmROYW1lXG4gICAgICAgID8gYCR7cHJvcHMuYmFja2VuZERhc2hib2FyZE5hbWV9LW92ZXJ2aWV3YFxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhY2thZ2VEYXRhID0gc3RvcmFnZUZhY3RvcnkubmV3QnVja2V0KHRoaXMsICdQYWNrYWdlRGF0YScsIHtcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAgICAgICAgLy8gQWJvcnQgbXVsdGktcGFydCB1cGxvYWRzIGFmdGVyIDEgZGF5XG4gICAgICAgIHsgYWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQWZ0ZXI6IER1cmF0aW9uLmRheXMoMSkgfSxcbiAgICAgICAgLy8gVHJhbnNpdGlvbiBub24tY3VycmVudCBvYmplY3QgdmVyc2lvbnMgdG8gSUEgYWZ0ZXIgMSBtb250aFxuICAgICAgICB7XG4gICAgICAgICAgbm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdG9yYWdlQ2xhc3M6IHMzLlN0b3JhZ2VDbGFzcy5JTkZSRVFVRU5UX0FDQ0VTUyxcbiAgICAgICAgICAgICAgdHJhbnNpdGlvbkFmdGVyOiBEdXJhdGlvbi5kYXlzKDMxKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUGVybWFuZW50bHkgZGVsZXRlIG5vbi1jdXJyZW50IG9iamVjdCB2ZXJzaW9ucyBhZnRlciAzIG1vbnRoc1xuICAgICAgICB7XG4gICAgICAgICAgbm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uOiBEdXJhdGlvbi5kYXlzKDkwKSxcbiAgICAgICAgICBleHBpcmVkT2JqZWN0RGVsZXRlTWFya2VyOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAvLyBQZXJtYW5lbnRseSBkZWxldGUgbm9uLWN1cnJlbnQgdmVyc2lvbnMgb2YgY2F0YWxvZy5qc29uIGVhcmxpZXJcbiAgICAgICAgeyBub25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoNyksIHByZWZpeDogQ0FUQUxPR19LRVkgfSxcbiAgICAgIF0sXG4gICAgICB2ZXJzaW9uZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpc29sYXRpb24gPVxuICAgICAgcHJvcHMuc2Vuc2l0aXZlVGFza0lzb2xhdGlvbiA/P1xuICAgICAgKHByb3BzLmlzb2xhdGVTZW5zaXRpdmVUYXNrc1xuICAgICAgICA/IElzb2xhdGlvbi5OT19JTlRFUk5FVF9BQ0NFU1NcbiAgICAgICAgOiBJc29sYXRpb24uVU5MSU1JVEVEX0lOVEVSTkVUX0FDQ0VTUyk7XG5cbiAgICAvLyBDcmVhdGUgYW4gaW50ZXJuYWwgQ29kZUFydGlmYWN0IHJlcG9zaXRvcnkgaWYgd2UgcnVuIGluIG5ldHdvcmstY29udHJvbGxlZCBtb2RlLCBvciBpZiBhIGRvbWFpbiBpcyBwcm92aWRlZC5cbiAgICBjb25zdCBjb2RlQXJ0aWZhY3QgPVxuICAgICAgaXNvbGF0aW9uID09PSBJc29sYXRpb24uTk9fSU5URVJORVRfQUNDRVNTIHx8XG4gICAgICBwcm9wcy5jb2RlQXJ0aWZhY3REb21haW4gIT0gbnVsbFxuICAgICAgICA/IG5ldyBSZXBvc2l0b3J5KHRoaXMsICdDb2RlQXJ0aWZhY3QnLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1Byb3h5IHRvIG5wbWpzLmNvbSBmb3IgQ29uc3RydWN0SHViJyxcbiAgICAgICAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmNvZGVBcnRpZmFjdERvbWFpbj8ubmFtZSxcbiAgICAgICAgICAgIGRvbWFpbkV4aXN0czogcHJvcHMuY29kZUFydGlmYWN0RG9tYWluICE9IG51bGwsXG4gICAgICAgICAgICB1cHN0cmVhbXM6IHByb3BzLmNvZGVBcnRpZmFjdERvbWFpbj8udXBzdHJlYW1zLFxuICAgICAgICAgIH0pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHsgdnBjLCB2cGNFbmRwb2ludHMsIHZwY1N1Ym5ldHMsIHZwY1NlY3VyaXR5R3JvdXBzIH0gPSB0aGlzLmNyZWF0ZVZwYyhcbiAgICAgIGlzb2xhdGlvbixcbiAgICAgIGNvZGVBcnRpZmFjdFxuICAgICk7XG5cbiAgICBjb25zdCBkZW55TGlzdCA9IG5ldyBEZW55TGlzdCh0aGlzLCAnRGVueUxpc3QnLCB7XG4gICAgICBydWxlczogcHJvcHMuZGVueUxpc3QgPz8gW10sXG4gICAgICBwYWNrYWdlRGF0YUJ1Y2tldDogcGFja2FnZURhdGEsXG4gICAgICBwYWNrYWdlRGF0YUtleVByZWZpeDogU1RPUkFHRV9LRVlfUFJFRklYLFxuICAgICAgbW9uaXRvcmluZzogbW9uaXRvcmluZyxcbiAgICAgIG92ZXJ2aWV3RGFzaGJvYXJkOiBvdmVydmlld0Rhc2hib2FyZCxcbiAgICB9KTtcblxuICAgIC8vIGRpc2FibGUgZmV0Y2hpbmcgcGFja2FnZSBzdGF0cyBieSBkZWZhdWx0IGlmIGEgZGlmZmVyZW50IHBhY2thZ2VcbiAgICAvLyBzb3VyY2UgaXMgY29uZmlndXJlZFxuICAgIGNvbnN0IGZldGNoUGFja2FnZVN0YXRzID1cbiAgICAgIHByb3BzLmZldGNoUGFja2FnZVN0YXRzID8/IChwcm9wcy5wYWNrYWdlU291cmNlcyA/IGZhbHNlIDogdHJ1ZSk7XG5cbiAgICBsZXQgcGFja2FnZVN0YXRzOiBQYWNrYWdlU3RhdHMgfCB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc3RhdHNLZXkgPSAnc3RhdHMuanNvbic7XG4gICAgaWYgKGZldGNoUGFja2FnZVN0YXRzKSB7XG4gICAgICBwYWNrYWdlU3RhdHMgPSBuZXcgUGFja2FnZVN0YXRzKHRoaXMsICdTdGF0cycsIHtcbiAgICAgICAgYnVja2V0OiBwYWNrYWdlRGF0YSxcbiAgICAgICAgbW9uaXRvcmluZyxcbiAgICAgICAgbG9nUmV0ZW50aW9uOiBwcm9wcy5sb2dSZXRlbnRpb24sXG4gICAgICAgIG9iamVjdEtleTogc3RhdHNLZXksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJzaW9uVHJhY2tlciA9IG5ldyBWZXJzaW9uVHJhY2tlcih0aGlzLCAnVmVyc2lvblRyYWNrZXInLCB7XG4gICAgICBidWNrZXQ6IHBhY2thZ2VEYXRhLFxuICAgICAgbW9uaXRvcmluZyxcbiAgICAgIGxvZ1JldGVudGlvbjogcHJvcHMubG9nUmV0ZW50aW9uLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZmVlZEJ1aWxkZXIgPSBuZXcgRmVlZEJ1aWxkZXIodGhpcywgJ0ZlZWRCdWlsZGVyJywge1xuICAgICAgYnVja2V0OiBwYWNrYWdlRGF0YSxcbiAgICAgIG92ZXJ2aWV3RGFzaGJvYXJkLFxuICAgICAgZmVlZERlc2NyaXB0aW9uOiBwcm9wcy5mZWVkQ29uZmlndXJhdGlvbj8uZmVlZERlc2NyaXB0aW9uLFxuICAgICAgZmVlZFRpdGxlOiBwcm9wcy5mZWVkQ29uZmlndXJhdGlvbj8uZmVlZFRpdGxlLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3JjaGVzdHJhdGlvbiA9IG5ldyBPcmNoZXN0cmF0aW9uKHRoaXMsICdPcmNoZXN0cmF0aW9uJywge1xuICAgICAgYnVja2V0OiBwYWNrYWdlRGF0YSxcbiAgICAgIGNvZGVBcnRpZmFjdCxcbiAgICAgIGRlbnlMaXN0LFxuICAgICAgbG9nUmV0ZW50aW9uOiBwcm9wcy5sb2dSZXRlbnRpb24sXG4gICAgICBtb25pdG9yaW5nLFxuICAgICAgb3ZlcnZpZXdEYXNoYm9hcmQ6IG92ZXJ2aWV3RGFzaGJvYXJkLFxuICAgICAgdnBjLFxuICAgICAgdnBjRW5kcG9pbnRzLFxuICAgICAgdnBjU3VibmV0cyxcbiAgICAgIHZwY1NlY3VyaXR5R3JvdXBzLFxuICAgICAgZmVlZEJ1aWxkZXIsXG4gICAgfSk7XG5cbiAgICAvLyByZWJ1aWxkIHRoZSBjYXRhbG9nIHdoZW4gdGhlIGRlbnkgbGlzdCBjaGFuZ2VzLlxuICAgIGRlbnlMaXN0LnBydW5lLm9uQ2hhbmdlSW52b2tlKG9yY2hlc3RyYXRpb24uY2F0YWxvZ0J1aWxkZXIuZnVuY3Rpb24pO1xuXG4gICAgY29uc3QgcGFja2FnZVRhZ3NTZXJpYWxpemVkID1cbiAgICAgIHByb3BzLnBhY2thZ2VUYWdzPy5tYXAoKGNvbmZpZykgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICBjb25kaXRpb246IGNvbmZpZy5jb25kaXRpb24uYmluZCgpLFxuICAgICAgICB9O1xuICAgICAgfSkgPz8gW107XG5cbiAgICBsZXQgcmVsZWFzZU5vdGVzO1xuICAgIGlmIChzaG91bGRGZXRjaFJlbGVhc2VOb3Rlcykge1xuICAgICAgcmVsZWFzZU5vdGVzID0gbmV3IFJlbGVhc2VOb3RlRmV0Y2hlcih0aGlzLCAnUmVsZWFzZU5vdGVzJywge1xuICAgICAgICBidWNrZXQ6IHBhY2thZ2VEYXRhLFxuICAgICAgICBnaXRIdWJDcmVkZW50aWFsc1NlY3JldDogcHJvcHMuZmVlZENvbmZpZ3VyYXRpb24/LmdpdGh1YlRva2VuU2VjcmV0LFxuICAgICAgICBmZWVkQnVpbGRlcixcbiAgICAgICAgbW9uaXRvcmluZyxcbiAgICAgICAgb3ZlcnZpZXdEYXNoYm9hcmQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmluZ2VzdGlvbiA9IG5ldyBJbmdlc3Rpb24odGhpcywgJ0luZ2VzdGlvbicsIHtcbiAgICAgIGJ1Y2tldDogcGFja2FnZURhdGEsXG4gICAgICBjb2RlQXJ0aWZhY3QsXG4gICAgICBvcmNoZXN0cmF0aW9uLFxuICAgICAgbG9nUmV0ZW50aW9uOiBwcm9wcy5sb2dSZXRlbnRpb24sXG4gICAgICBtb25pdG9yaW5nLFxuICAgICAgcGFja2FnZUxpbmtzOiBwcm9wcy5wYWNrYWdlTGlua3MsXG4gICAgICBwYWNrYWdlVGFnczogcGFja2FnZVRhZ3NTZXJpYWxpemVkLFxuICAgICAgcmVwcm9jZXNzRnJlcXVlbmN5OiBwcm9wcy5yZXByb2Nlc3NGcmVxdWVuY3ksXG4gICAgICByZWxlYXNlTm90ZXNGZXRjaFF1ZXVlOiByZWxlYXNlTm90ZXM/LnF1ZXVlLFxuICAgICAgb3ZlcnZpZXdEYXNoYm9hcmQ6IG92ZXJ2aWV3RGFzaGJvYXJkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGljZW5zZUxpc3QgPSBuZXcgTGljZW5zZUxpc3QodGhpcywgJ0xpY2Vuc2VMaXN0Jywge1xuICAgICAgbGljZW5zZXM6IHByb3BzLmFsbG93ZWRMaWNlbnNlcyA/PyBbXG4gICAgICAgIC4uLlNwZHhMaWNlbnNlLmFwYWNoZSgpLFxuICAgICAgICAuLi5TcGR4TGljZW5zZS5ic2QoKSxcbiAgICAgICAgLi4uU3BkeExpY2Vuc2UuY2RkbCgpLFxuICAgICAgICAuLi5TcGR4TGljZW5zZS5lcGwoKSxcbiAgICAgICAgU3BkeExpY2Vuc2UuSVNDLFxuICAgICAgICAuLi5TcGR4TGljZW5zZS5taXQoKSxcbiAgICAgICAgU3BkeExpY2Vuc2UuTVBMXzJfMCxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB3ZWJBcHAgPSBuZXcgV2ViQXBwKHRoaXMsICdXZWJBcHAnLCB7XG4gICAgICBkb21haW46IHByb3BzLmRvbWFpbixcbiAgICAgIG1vbml0b3JpbmcsXG4gICAgICBwYWNrYWdlRGF0YSxcbiAgICAgIHBhY2thZ2VMaW5rczogcHJvcHMucGFja2FnZUxpbmtzLFxuICAgICAgcGFja2FnZVRhZ3M6IHBhY2thZ2VUYWdzU2VyaWFsaXplZCxcbiAgICAgIHBhY2thZ2VUYWdHcm91cHM6IHByb3BzLnBhY2thZ2VUYWdHcm91cHMsXG4gICAgICBmZWF0dXJlZFBhY2thZ2VzOiBwcm9wcy5mZWF0dXJlZFBhY2thZ2VzLFxuICAgICAgcGFja2FnZVN0YXRzLFxuICAgICAgZmVhdHVyZUZsYWdzOiBwcm9wcy5mZWF0dXJlRmxhZ3MsXG4gICAgICBjYXRlZ29yaWVzOiBwcm9wcy5jYXRlZ29yaWVzLFxuICAgICAgcHJlbG9hZFNjcmlwdDogcHJvcHMucHJlbG9hZFNjcmlwdCxcbiAgICAgIG92ZXJ2aWV3RGFzaGJvYXJkOiBvdmVydmlld0Rhc2hib2FyZCxcbiAgICAgIGluY2x1ZGVGZWVkTGluazogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIFNldCB0aGUgYmFzZSBVUkwgdGhhdCB3aWxsIGJlIHVzZWQgaW4gdGhlIFJTUy9BVE9NIGZlZWRcbiAgICBmZWVkQnVpbGRlci5zZXRDb25zdHJ1Y3RIdWJVcmwod2ViQXBwLmJhc2VVcmwpO1xuXG4gICAgY29uc3Qgc291cmNlcyA9IG5ldyBDb25zdHJ1Y3QodGhpcywgJ1NvdXJjZXMnKTtcbiAgICBjb25zdCBwYWNrYWdlU291cmNlcyA9IChwcm9wcy5wYWNrYWdlU291cmNlcyA/PyBbbmV3IE5wbUpzKCldKS5tYXAoXG4gICAgICAoc291cmNlKSA9PlxuICAgICAgICBzb3VyY2UuYmluZChzb3VyY2VzLCB7XG4gICAgICAgICAgYmFzZVVybDogd2ViQXBwLmJhc2VVcmwsXG4gICAgICAgICAgZGVueUxpc3QsXG4gICAgICAgICAgaW5nZXN0aW9uOiB0aGlzLmluZ2VzdGlvbixcbiAgICAgICAgICBsaWNlbnNlTGlzdCxcbiAgICAgICAgICBtb25pdG9yaW5nLFxuICAgICAgICAgIHF1ZXVlOiB0aGlzLmluZ2VzdGlvbi5xdWV1ZSxcbiAgICAgICAgICByZXBvc2l0b3J5OiBjb2RlQXJ0aWZhY3QsXG4gICAgICAgICAgb3ZlcnZpZXdEYXNoYm9hcmQ6IG92ZXJ2aWV3RGFzaGJvYXJkLFxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBpbnZlbnRvcnkgPSBuZXcgSW52ZW50b3J5KHRoaXMsICdJbnZlbnRvcnlDYW5hcnknLCB7XG4gICAgICBidWNrZXQ6IHBhY2thZ2VEYXRhLFxuICAgICAgbG9nUmV0ZW50aW9uOiBwcm9wcy5sb2dSZXRlbnRpb24sXG4gICAgICBtb25pdG9yaW5nLFxuICAgICAgb3ZlcnZpZXdEYXNoYm9hcmQ6IG92ZXJ2aWV3RGFzaGJvYXJkLFxuICAgIH0pO1xuXG4gICAgbmV3IEJhY2tlbmREYXNoYm9hcmQodGhpcywgJ0JhY2tlbmREYXNoYm9hcmQnLCB7XG4gICAgICBwYWNrYWdlRGF0YSxcbiAgICAgIGRhc2hib2FyZE5hbWU6IHByb3BzLmJhY2tlbmREYXNoYm9hcmROYW1lLFxuICAgICAgcGFja2FnZVNvdXJjZXMsXG4gICAgICBpbmdlc3Rpb246IHRoaXMuaW5nZXN0aW9uLFxuICAgICAgaW52ZW50b3J5LFxuICAgICAgb3JjaGVzdHJhdGlvbixcbiAgICAgIGRlbnlMaXN0LFxuICAgICAgcGFja2FnZVN0YXRzLFxuICAgICAgdmVyc2lvblRyYWNrZXIsXG4gICAgICByZWxlYXNlTm90ZXMsXG4gICAgfSk7XG5cbiAgICAvLyBhZGQgZG9tYWluIHJlZGlyZWN0c1xuICAgIGlmIChwcm9wcy5kb21haW4pIHtcbiAgICAgIGZvciAoY29uc3QgcmVkaXJjdFNvdXJjZSBvZiBwcm9wcy5hZGRpdGlvbmFsRG9tYWlucyA/PyBbXSkge1xuICAgICAgICBuZXcgRG9tYWluUmVkaXJlY3QoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgUmVkaXJlY3QtJHtyZWRpcmN0U291cmNlLmhvc3RlZFpvbmUuem9uZU5hbWV9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2U6IHJlZGlyY3RTb3VyY2UsXG4gICAgICAgICAgICB0YXJnZXREb21haW5OYW1lOiBwcm9wcy5kb21haW4/LnpvbmUuem9uZU5hbWUsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcHMuYWRkaXRpb25hbERvbWFpbnMgJiYgcHJvcHMuYWRkaXRpb25hbERvbWFpbnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBzcGVjaWZ5IFwiZG9tYWluUmVkaXJlY3RzXCIgaWYgYSBkb21haW4gaXMgbm90IHNwZWNpZmllZCdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcHMuYXBwUmVnaXN0cnlBcHBsaWNhdGlvbiA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBhcHBsaWNhdGlvbiA9IG5ldyBBcHBsaWNhdGlvbih0aGlzLCAnQXBwbGljYXRpb24nLCB7XG4gICAgICAgIGFwcGxpY2F0aW9uTmFtZTogJ0NvbnN0cnVjdEh1YicsXG4gICAgICB9KTtcbiAgICAgIGFwcGxpY2F0aW9uLmFzc29jaWF0ZVN0YWNrKFN0YWNrLm9mKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGdyYW50UHJpbmNpcGFsKCk6IGlhbS5JUHJpbmNpcGFsIHtcbiAgICByZXR1cm4gdGhpcy5pbmdlc3Rpb24uZ3JhbnRQcmluY2lwYWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluZ2VzdGlvblF1ZXVlKCk6IHNxcy5JUXVldWUge1xuICAgIHJldHVybiB0aGlzLmluZ2VzdGlvbi5xdWV1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVnBjKFxuICAgIGlzb2xhdGlvbjogSXNvbGF0aW9uLFxuICAgIGNvZGVBcnRpZmFjdDogUmVwb3NpdG9yeSB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBpZiAoaXNvbGF0aW9uID09PSBJc29sYXRpb24uVU5MSU1JVEVEX0lOVEVSTkVUX0FDQ0VTUykge1xuICAgICAgcmV0dXJuIHsgdnBjOiB1bmRlZmluZWQsIHZwY0VuZHBvaW50czogdW5kZWZpbmVkLCB2cGNTdWJuZXRzOiB1bmRlZmluZWQgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJuZXRUeXBlID1cbiAgICAgIGlzb2xhdGlvbiA9PT0gSXNvbGF0aW9uLk5PX0lOVEVSTkVUX0FDQ0VTU1xuICAgICAgICA/IGVjMi5TdWJuZXRUeXBlLklTT0xBVEVEXG4gICAgICAgIDogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVDtcbiAgICBjb25zdCB2cGNTdWJuZXRzID0geyBzdWJuZXRUeXBlIH07XG5cbiAgICBjb25zdCB2cGMgPSBuZXcgZWMyLlZwYyh0aGlzLCAnVlBDJywge1xuICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzOiB0cnVlLFxuICAgICAgZW5hYmxlRG5zU3VwcG9ydDogdHJ1ZSxcbiAgICAgIC8vIFByb3Zpc2lvbiBubyBOQVQgZ2F0ZXdheXMgaWYgd2UgYXJlIHJ1bm5pbmcgSVNPTEFURUQgKHdlIHdvdWxkbid0IGhhdmUgYSBwdWJsaWMgc3VibmV0KVxuICAgICAgbmF0R2F0ZXdheXM6IHN1Ym5ldFR5cGUgPT09IGVjMi5TdWJuZXRUeXBlLklTT0xBVEVEID8gMCA6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFByZS1hbGxvY2F0aW5nIFBVQkxJQyAvIFBSSVZBVEUgLyBJTlRFUk5BTCBzdWJuZXRzLCByZWdhcmRsZXNzIG9mIHVzZSwgc28gd2UgZG9uJ3QgY3JlYXRlXG4gICAgICAvLyBhIHdob2xlIG5ldyBWUEMgaWYgd2UgZXZlciBuZWVkIHRvIGludHJvZHVjZSBzdWJuZXRzIG9mIHRoZXNlIHR5cGVzLlxuICAgICAgc3VibmV0Q29uZmlndXJhdGlvbjogW1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIFBSSVZBVEUgc3VibmV0LCB0aGVyZSBtdXN0IGFsc28gaGF2ZSBhIFBVQkxJQyBzdWJuZXQgKGZvciBOQVQgZ2F0ZXdheXMpLlxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1B1YmxpYycsXG4gICAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDLFxuICAgICAgICAgIHJlc2VydmVkOiBzdWJuZXRUeXBlID09PSBlYzIuU3VibmV0VHlwZS5JU09MQVRFRCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdQcml2YXRlJyxcbiAgICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfTkFULFxuICAgICAgICAgIHJlc2VydmVkOiBzdWJuZXRUeXBlID09PSBlYzIuU3VibmV0VHlwZS5JU09MQVRFRCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdJc29sYXRlZCcsXG4gICAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuSVNPTEFURUQsXG4gICAgICAgICAgcmVzZXJ2ZWQ6IHN1Ym5ldFR5cGUgIT09IGVjMi5TdWJuZXRUeXBlLklTT0xBVEVELFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBUYWdzLm9mKHZwYy5ub2RlLmRlZmF1bHRDaGlsZCEpLmFkZCgnTmFtZScsIHZwYy5ub2RlLnBhdGgpO1xuXG4gICAgY29uc3Qgc2VjdXJpdHlHcm91cHMgPVxuICAgICAgc3VibmV0VHlwZSA9PT0gZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVFxuICAgICAgICA/IGNyZWF0ZVJlc3RyaWN0ZWRTZWN1cml0eUdyb3Vwcyh0aGlzLCB2cGMpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gQ3JlYXRpbmcgdGhlIENvZGVBcnRpZmFjdCBlbmRwb2ludHMgb25seSBpZiBhIHJlcG9zaXRvcnkgaXMgcHJlc2VudC5cbiAgICBjb25zdCBjb2RlQXJ0aWZhY3RFbmRwb2ludHMgPSBjb2RlQXJ0aWZhY3QgJiYge1xuICAgICAgY29kZUFydGlmYWN0QXBpOiB2cGMuYWRkSW50ZXJmYWNlRW5kcG9pbnQoJ0NvZGVBcnRpZmFjdC5BUEknLCB7XG4gICAgICAgIHByaXZhdGVEbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgc2VydmljZTogbmV3IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2NvZGVhcnRpZmFjdC5hcGknKSxcbiAgICAgICAgc3VibmV0czogdnBjU3VibmV0cyxcbiAgICAgICAgc2VjdXJpdHlHcm91cHMsXG4gICAgICB9KSxcbiAgICAgIGNvZGVBcnRpZmFjdDogdnBjLmFkZEludGVyZmFjZUVuZHBvaW50KCdDb2RlQXJ0aWZhY3QnLCB7XG4gICAgICAgIHByaXZhdGVEbnNFbmFibGVkOiB0cnVlLFxuICAgICAgICBzZXJ2aWNlOiBuZXcgZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZShcbiAgICAgICAgICAnY29kZWFydGlmYWN0LnJlcG9zaXRvcmllcydcbiAgICAgICAgKSxcbiAgICAgICAgc3VibmV0czogdnBjU3VibmV0cyxcbiAgICAgICAgc2VjdXJpdHlHcm91cHMsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgLy8gV2UnbGwgb25seSB1c2UgVlBDIGVuZHBvaW50cyBpZiB3ZSBhcmUgY29uZmlndXJlZCB0byBydW4gaW4gYW4gSVNPTEFURUQgc3VibmV0LlxuICAgIGNvbnN0IHZwY0VuZHBvaW50cyA9IHtcbiAgICAgIC4uLmNvZGVBcnRpZmFjdEVuZHBvaW50cyxcbiAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgRUNTIHdvcmtsb2FkcyBjYW4gdXNlIHRoZSBhd3Nsb2dzIGRyaXZlclxuICAgICAgY2xvdWRXYXRjaExvZ3M6IHZwYy5hZGRJbnRlcmZhY2VFbmRwb2ludCgnQ2xvdWRXYXRjaC5Mb2dzJywge1xuICAgICAgICBwcml2YXRlRG5zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgc2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5DTE9VRFdBVENIX0xPR1MsXG4gICAgICAgIHN1Ym5ldHM6IHZwY1N1Ym5ldHMsXG4gICAgICAgIHNlY3VyaXR5R3JvdXBzLFxuICAgICAgfSksXG4gICAgICAvLyBUaGVzZSBhcmUgbmVlZGVkIGZvciBFQ1Mgd29ya2xvYWRzIHRvIGJlIGFibGUgdG8gcHVsbCBpbWFnZXNcbiAgICAgIGVjckFwaTogdnBjLmFkZEludGVyZmFjZUVuZHBvaW50KCdFQ1IuQVBJJywge1xuICAgICAgICBwcml2YXRlRG5zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgc2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5FQ1IsXG4gICAgICAgIHN1Ym5ldHM6IHZwY1N1Ym5ldHMsXG4gICAgICAgIHNlY3VyaXR5R3JvdXBzLFxuICAgICAgfSksXG4gICAgICBlY3I6IHZwYy5hZGRJbnRlcmZhY2VFbmRwb2ludCgnRUNSLkRvY2tlcicsIHtcbiAgICAgICAgcHJpdmF0ZURuc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIHNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRUNSX0RPQ0tFUixcbiAgICAgICAgc3VibmV0czogdnBjU3VibmV0cyxcbiAgICAgICAgc2VjdXJpdHlHcm91cHMsXG4gICAgICB9KSxcbiAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIChhbW9uZyBvdGhlcnMpIGZvciBDb2RlQXJ0aWZhY3QgcmVnaXN0cnkgdXNhZ2VcbiAgICAgIHMzOiB2cGMuYWRkR2F0ZXdheUVuZHBvaW50KCdTMycsIHtcbiAgICAgICAgc2VydmljZTogZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuUzMsXG4gICAgICAgIHN1Ym5ldHM6IFt2cGNTdWJuZXRzXSxcbiAgICAgIH0pLFxuICAgICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIGdldHRpbmcgcmVzdWx0cyBmcm9tIEVDUyB0YXNrcyB3aXRoaW4gd29ya2Zsb3dzXG4gICAgICBzdGVwRnVuY3Rpb25zOiB2cGMuYWRkSW50ZXJmYWNlRW5kcG9pbnQoJ1N0ZXBGdW5jdGlvbnMnLCB7XG4gICAgICAgIHByaXZhdGVEbnNFbmFibGVkOiB0cnVlLFxuICAgICAgICBzZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlNURVBfRlVOQ1RJT05TLFxuICAgICAgICBzdWJuZXRzOiB2cGNTdWJuZXRzLFxuICAgICAgICBzZWN1cml0eUdyb3VwcyxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICAvLyBUaGUgUzMgYWNjZXNzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIENvZGVBcnRpZmFjdCBSZXBvc2l0b3J5IGFuZCBFQ1IgRG9ja2VyXG4gICAgLy8gZW5kcG9pbnRzIHRvIGJlIHVzZWQgKHRoZXkgc2VydmUgb2JqZWN0cyBmcm9tIFMzKS5cbiAgICB2cGNFbmRwb2ludHMuczMuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnczM6R2V0T2JqZWN0J10sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIC8vIFRoZSBpbi1yZWdpb24gQ29kZUFydGlmYWN0IFMzIEJ1Y2tldFxuICAgICAgICAgIC4uLihjb2RlQXJ0aWZhY3QgPyBbYCR7Y29kZUFydGlmYWN0LnMzQnVja2V0QXJufS8qYF0gOiBbXSksXG4gICAgICAgICAgLy8gVGhlIGluLXJlZ2lvbiBFQ1IgbGF5ZXIgYnVja2V0XG4gICAgICAgICAgYGFybjphd3M6czM6Ojpwcm9kLSR7U3RhY2sub2YodGhpcykucmVnaW9ufS1zdGFycG9ydC1sYXllci1idWNrZXQvKmAsXG4gICAgICAgIF0sXG4gICAgICAgIC8vIEl0IGRvZXNuJ3Qgc2VlbSB3ZSBjYW4gY29uc3RyYWluIHByaW5jaXBhbHMgZm9yIHRoZXNlIGdyYW50cyAodW5jbGVhclxuICAgICAgICAvLyB3aGljaCBwcmluY2lwYWwgdGhvc2UgY2FsbHMgYXJlIG1hZGUgZnJvbSwgb3IgaWYgdGhhdCBpcyBzb21ldGhpbmcgd2VcbiAgICAgICAgLy8gY291bGQgbmFtZSBoZXJlKS5cbiAgICAgICAgcHJpbmNpcGFsczogW25ldyBBbnlQcmluY2lwYWwoKV0sXG4gICAgICAgIHNpZDogJ0FsbG93LUNvZGVBcnRpZmFjdC1hbmQtRUNSJyxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiB7IHZwYywgdnBjRW5kcG9pbnRzLCB2cGNTdWJuZXRzLCB2cGNTZWN1cml0eUdyb3Vwczogc2VjdXJpdHlHcm91cHMgfTtcbiAgfVxufVxuXG4vKipcbiAqIEhvdyBwb3NzaWJseSByaXNreSBvcGVyYXRpb25zIChzdWNoIGFzIGRvYy1nZW5lcmF0aW9uLCB3aGljaCByZXF1aXJlc1xuICogaW5zdGFsbGluZyB0aGUgaW5kZXhlZCBwYWNrYWdlcyBpbiBvcmRlciB0byB0cmFucy1saXRlcmF0ZSBzYW1wbGUgY29kZSkgYXJlXG4gKiBpc29sYXRlZCB0byBtaXRpZ2F0ZSBwb3NzaWJsZSBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24gdnVsbmVyYWJpbGl0aWVzIGluIGFuZFxuICogYXJvdW5kIGBucG0gaW5zdGFsbGAgb3IgdGhlIHRyYW5zbGl0ZXJhdG9yJ3MgdXNlIG9mIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyLlxuICovXG5leHBvcnQgZW51bSBJc29sYXRpb24ge1xuICAvKipcbiAgICogTm8gaXNvbGF0aW9uIGlzIGRvbmUgd2hhdHNvZXZlci4gVGhlIGRvYy1nZW5lcmF0aW9uIHByb2Nlc3Mgc3RpbGwgaXNcbiAgICogcHJvdmlzaW9uZWQgd2l0aCBsZWFzdC1wcml2aWxlZ2UgcGVybWlzc2lvbnMsIGJ1dCByZXRhaW5zIGNvbXBsZXRlIGFjY2Vzc1xuICAgKiB0byBpbnRlcm5ldC5cbiAgICpcbiAgICogV2hpbGUgdGhpcyBtYXhpbWl6ZXMgdGhlIGNoYW5jZXMgb2Ygc3VjY2Vzc2Z1bGx5IGluc3RhbGxpbmcgcGFja2FnZXMgKGFuZFxuICAgKiBoZW5jZSBzdWNjZXNzZnVsbHkgZ2VuZXJhdGluZyBkb2N1bWVudGF0aW9uIGZvciB0aG9zZSksIGl0IGlzIGFsc28gdGhlXG4gICAqIGxlYXN0IHNlY3VyZSBtb2RlIG9mIG9wZXJhdGlvbi5cbiAgICpcbiAgICogV2UgYWR2aXNlIHlvdSBvbmx5IGNvbnNpZGVyIHVzaW5nIHRoaXMgaXNvbGF0aW9uIG1vZGUgaWYgeW91IGFyZSBob3N0aW5nIGFcbiAgICogQ29uc3RydWN0SHViIGluc3RhbmNlIHRoYXQgb25seSBpbmRleGVzIHRydXN0ZWQgcGFja2FnZXMgKGluY2x1ZGluZ1xuICAgKiB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcykuXG4gICAqL1xuICBVTkxJTUlURURfSU5URVJORVRfQUNDRVNTLFxuXG4gIC8qKlxuICAgKiBUaGUgc2FtZSBwcm90ZWN0aW9ucyBhcyBgVU5MSU1JVEVEX0lOVEVSTkVUX0FDQ0VTU2AsIGV4Y2VwdCBvdXRib3VuZFxuICAgKiBpbnRlcm5ldCBjb25uZWN0aW9ucyBhcmUgbGltaXRlZCB0byBJUCBhZGRyZXNzIHJhbmdlcyBjb3JyZXNwb25kaW5nIHRvXG4gICAqIGhvc3RpbmcgZW5kcG9pbnRzIGZvciBucG1qcy5jb20uXG4gICAqL1xuICBMSU1JVEVEX0lOVEVSTkVUX0FDQ0VTUyxcblxuICAvKipcbiAgICogVGhlIHNhbWUgcHJvdGVjdGlvbnMgYXMgYExJTUlURURfSU5URVJORVRfQUNDRVNTYCwgZXhjZXB0IGFsbCByZW1haW5pbmdcbiAgICogaW50ZXJuZXQgYWNjZXNzIGlzIHJlbW92ZWQuIEFsbCB0cmFmZmljIHRvIEFXUyBzZXJ2aWNlIGVuZHBvaW50cyBpcyByb3V0ZWRcbiAgICogdGhyb3VnaCBWUEMgRW5kcG9pbnRzLCBhcyB0aGUgY29tcHV0ZSBub2RlcyBhcmUgamFpbGVkIGluIGEgY29tcGxldGVseVxuICAgKiBpc29sYXRlZCBWUEMuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIG1vc3Qgc2VjdXJlIChhbmQgcmVjb21tZW5kZWQpIG1vZGUgb2Ygb3BlcmF0aW9uIGZvclxuICAgKiBDb25zdHJ1Y3RIdWIgaW5zdGFuY2VzLlxuICAgKi9cbiAgTk9fSU5URVJORVRfQUNDRVNTLFxufVxuIl19
431
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LWh1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdHJ1Y3QtaHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0dBQTJFO0FBQzNFLDZDQUFvRDtBQUVwRCwyQ0FBMkM7QUFFM0MsaURBQTRFO0FBRTVFLHlDQUF5QztBQUN6QywrQ0FBdUQ7QUFHdkQsMkNBQXVDO0FBQ3ZDLHlFQUE0RTtBQUU1RSx1Q0FBZ0Q7QUFDaEQsMkRBQXVEO0FBRXZELHlEQUFxRDtBQUNyRCxtREFBZ0Q7QUFDaEQseURBQXFEO0FBQ3JELDJEQUF3RDtBQUN4RCwyREFBdUQ7QUFDdkQsMkRBQTZEO0FBQzdELDBEQUE2RTtBQUM3RSwrREFBMkQ7QUFDM0QsMERBQXVEO0FBQ3ZELHVEQUF5RTtBQUN6RSw2Q0FBMEM7QUFDMUMsNkRBQXlEO0FBRXpELHVEQUEwQztBQUkxQywwQ0FBZ0Q7QUFDaEQsaURBQTZDO0FBQzdDLHFDQU1rQjtBQTBObEI7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQUl6QyxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixRQUEyQixFQUFFOztRQUU3QixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQ0UsS0FBSyxDQUFDLHFCQUFxQixJQUFJLElBQUk7WUFDbkMsS0FBSyxDQUFDLHNCQUFzQixJQUFJLElBQUksRUFDcEM7WUFDQSxNQUFNLElBQUksS0FBSyxDQUNiLDBIQUEwSCxDQUMzSCxDQUFDO1NBQ0g7UUFFRCxNQUFNLHVCQUF1QixHQUFHLE9BQUEsS0FBSyxDQUFDLGlCQUFpQiwwQ0FBRSxpQkFBaUIsRUFDeEUsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsS0FBSyxDQUFDO1FBRVYsTUFBTSxjQUFjLEdBQUcsMEJBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTtZQUN4RCxRQUFRLEVBQUUsS0FBSyxDQUFDLGVBQWU7U0FDaEMs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T0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO1lBQ3pCLFNBQVMsRUFBRTtnQkFDVCx1Q0FBdUM7Z0JBQ3ZDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMxRCxpQ0FBaUM7Z0JBQ2pDLHFCQUFxQixtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLDBCQUEwQjthQUNyRTtZQUNELHdFQUF3RTtZQUN4RSx3RUFBd0U7WUFDeEUsb0JBQW9CO1lBQ3BCLFVBQVUsRUFBRSxDQUFDLElBQUksc0JBQVksRUFBRSxDQUFDO1lBQ2hDLEdBQUcsRUFBRSw0QkFBNEI7U0FDbEMsQ0FBQyxDQUNILENBQUM7UUFFRixPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFDOUUsQ0FBQzs7QUEzYUgsb0NBNGFDOzs7QUFFRDs7Ozs7R0FLRztBQUNILElBQVksU0FpQ1g7QUFqQ0QsV0FBWSxTQUFTO0lBQ25COzs7Ozs7Ozs7Ozs7T0FZRztJQUNILG1GQUF5QixDQUFBO0lBRXpCOzs7O09BSUc7SUFDSCwrRUFBdUIsQ0FBQTtJQUV2Qjs7Ozs7Ozs7T0FRRztJQUNILHFFQUFrQixDQUFBO0FBQ3BCLENBQUMsRUFqQ1csU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUFpQ3BCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tICdAYXdzLWNkay9hd3Mtc2VydmljZWNhdGFsb2dhcHByZWdpc3RyeS1hbHBoYSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2ssIFRhZ3MgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjdyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBBbnlQcmluY2lwYWwsIEVmZmVjdCwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IEJsb2NrUHVibGljQWNjZXNzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHNlY3JldHNtYW5hZ2VyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgKiBhcyBzcXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNxcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IGNyZWF0ZVJlc3RyaWN0ZWRTZWN1cml0eUdyb3VwcyB9IGZyb20gJy4vX2xpbWl0ZWQtaW50ZXJuZXQtYWNjZXNzJztcbmltcG9ydCB7IEFsYXJtQWN0aW9ucywgRG9tYWluIH0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsgRGVueUxpc3QsIEluZ2VzdGlvbiB9IGZyb20gJy4vYmFja2VuZCc7XG5pbXBvcnQgeyBCYWNrZW5kRGFzaGJvYXJkIH0gZnJvbSAnLi9iYWNrZW5kLWRhc2hib2FyZCc7XG5pbXBvcnQgeyBEZW55TGlzdFJ1bGUgfSBmcm9tICcuL2JhY2tlbmQvZGVueS1saXN0L2FwaSc7XG5pbXBvcnQgeyBGZWVkQnVpbGRlciB9IGZyb20gJy4vYmFja2VuZC9mZWVkLWJ1aWxkZXInO1xuaW1wb3J0IHsgSW52ZW50b3J5IH0gZnJvbSAnLi9iYWNrZW5kL2ludmVudG9yeSc7XG5pbXBvcnQgeyBMaWNlbnNlTGlzdCB9IGZyb20gJy4vYmFja2VuZC9saWNlbnNlLWxpc3QnO1xuaW1wb3J0IHsgT3JjaGVzdHJhdGlvbiB9IGZyb20gJy4vYmFja2VuZC9vcmNoZXN0cmF0aW9uJztcbmltcG9ydCB7IFBhY2thZ2VTdGF0cyB9IGZyb20gJy4vYmFja2VuZC9wYWNrYWdlLXN0YXRzJztcbmltcG9ydCB7IFJlbGVhc2VOb3RlRmV0Y2hlciB9IGZyb20gJy4vYmFja2VuZC9yZWxlYXNlLW5vdGVzJztcbmltcG9ydCB7IENBVEFMT0dfS0VZLCBTVE9SQUdFX0tFWV9QUkVGSVggfSBmcm9tICcuL2JhY2tlbmQvc2hhcmVkL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBWZXJzaW9uVHJhY2tlciB9IGZyb20gJy4vYmFja2VuZC92ZXJzaW9uLXRyYWNrZXInO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gJy4vY29kZWFydGlmYWN0L3JlcG9zaXRvcnknO1xuaW1wb3J0IHsgRG9tYWluUmVkaXJlY3QsIERvbWFpblJlZGlyZWN0U291cmNlIH0gZnJvbSAnLi9kb21haW4tcmVkaXJlY3QnO1xuaW1wb3J0IHsgTW9uaXRvcmluZyB9IGZyb20gJy4vbW9uaXRvcmluZyc7XG5pbXBvcnQgeyBPdmVydmlld0Rhc2hib2FyZCB9IGZyb20gJy4vb3ZlcnZpZXctZGFzaGJvYXJkJztcbmltcG9ydCB7IElQYWNrYWdlU291cmNlIH0gZnJvbSAnLi9wYWNrYWdlLXNvdXJjZSc7XG5pbXBvcnQgeyBOcG1KcyB9IGZyb20gJy4vcGFja2FnZS1zb3VyY2VzJztcbmltcG9ydCB7IFBhY2thZ2VUYWcgfSBmcm9tICcuL3BhY2thZ2UtdGFnJztcbmltcG9ydCB7IFBhY2thZ2VUYWdHcm91cCB9IGZyb20gJy4vcGFja2FnZS10YWctZ3JvdXAnO1xuaW1wb3J0IHsgUHJlbG9hZEZpbGUgfSBmcm9tICcuL3ByZWxvYWQtZmlsZSc7XG5pbXBvcnQgeyBTM1N0b3JhZ2VGYWN0b3J5IH0gZnJvbSAnLi9zMy9zdG9yYWdlJztcbmltcG9ydCB7IFNwZHhMaWNlbnNlIH0gZnJvbSAnLi9zcGR4LWxpY2Vuc2UnO1xuaW1wb3J0IHtcbiAgV2ViQXBwLFxuICBQYWNrYWdlTGlua0NvbmZpZyxcbiAgRmVhdHVyZWRQYWNrYWdlcyxcbiAgRmVhdHVyZUZsYWdzLFxuICBDYXRlZ29yeSxcbn0gZnJvbSAnLi93ZWJhcHAnO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGdlbmVyYXRpbmcgUlNTIGFuZCBBVE9NIGZlZWQgZm9yIHRoZSBsYXRlc3QgcGFja2FnZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBHaXRodWIgdG9rZW4gZm9yIGdlbmVyYXRpbmcgcmVsZWFzZSBub3Rlcy4gV2hlbiBtaXNzaW5nIG5vIHJlbGVhc2Ugbm90ZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZ2VuZXJhdGVkIFJTUy9BVE9NIGZlZWRcbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YlRva2VuU2VjcmV0Pzogc2VjcmV0c21hbmFnZXIuSVNlY3JldDtcblxuICAvKipcbiAgICogVGl0bGUgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGZlZWRcbiAgICovXG4gIHJlYWRvbmx5IGZlZWRUaXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogZGVzY3JpcHRpb24gdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGZlZWRcbiAgICovXG4gIHJlYWRvbmx5IGZlZWREZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgYENvbnN0cnVjdEh1YmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RydWN0SHViUHJvcHMge1xuICAvKipcbiAgICogQ29ubmVjdCB0aGUgaHViIHRvIGEgZG9tYWluIChyZXF1aXJlcyBhIGhvc3RlZCB6b25lIGFuZCBhIGNlcnRpZmljYXRlKS5cbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbj86IERvbWFpbjtcblxuICAvKipcbiAgICogQWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gYWxhcm1zIGFyZSBzZXQuXG4gICAqL1xuICByZWFkb25seSBhbGFybUFjdGlvbnM/OiBBbGFybUFjdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY29tcHV0ZSBlbnZpcm9ubWVudHMgZm9yIHNlbnNpdGl2ZSB0YXNrcyAod2hpY2ggb3BlcmF0ZSBvblxuICAgKiB1bi10cnVzdGVkIGNvbXBsZXggZGF0YSwgc3VjaCBhcyB0aGUgdHJhbnNsaXRlcmF0b3IsIHdoaWNoIG9wZXJhdGVzIHdpdGhcbiAgICogZXh0ZXJuYWxseS1zb3VyY2VkIG5wbSBwYWNrYWdlIHRhcmJhbGxzKSBzaG91bGQgcnVuIGluIG5ldHdvcmstaXNvbGF0ZWRcbiAgICogZW52aXJvbm1lbnRzLiBUaGlzIGltcGxpZXMgdGhlIGNyZWF0aW9uIG9mIGFkZGl0b25hbCByZXNvdXJjZXMsIGluY2x1ZGluZzpcbiAgICpcbiAgICogLSBBIFZQQyB3aXRoIG9ubHkgaXNvbGF0ZWQgc3VibmV0cy5cbiAgICogLSBWUEMgRW5kcG9pbnRzIChDbG91ZFdhdGNoIExvZ3MsIENvZGVBcnRpZmFjdCwgQ29kZUFydGlmYWN0IEFQSSwgUzMsIC4uLilcbiAgICogLSBBIENvZGVBcnRpZmFjdCBSZXBvc2l0b3J5IHdpdGggYW4gZXh0ZXJuYWwgY29ubmVjdGlvbiB0byBucG1qcy5jb21cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHNlbnNpdGl2ZVRhc2tJc29sYXRpb24gaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzb2xhdGVTZW5zaXRpdmVUYXNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY29tcHV0ZSBlbnZpcm9ubWVudHMgZm9yIHNlbnNpdGl2ZSB0YXNrcyAod2hpY2ggb3BlcmF0ZSBvblxuICAgKiB1bi10cnVzdGVkIGNvbXBsZXggZGF0YSwgc3VjaCBhcyB0aGUgdHJhbnNsaXRlcmF0b3IsIHdoaWNoIG9wZXJhdGVzIHdpdGhcbiAgICogZXh0ZXJuYWxseS1zb3VyY2VkIG5wbSBwYWNrYWdlIHRhcmJhbGxzKSBzaG91bGQgcnVuIGluIG5ldHdvcmstaXNvbGF0ZWRcbiAgICogZW52aXJvbm1lbnRzLiBUaGlzIGltcGxpZXMgdGhlIGNyZWF0aW9uIG9mIGFkZGl0b25hbCByZXNvdXJjZXMsIGluY2x1ZGluZzpcbiAgICpcbiAgICogLSBBIFZQQyB3aXRoIG9ubHkgaXNvbGF0ZWQgc3VibmV0cy5cbiAgICogLSBWUEMgRW5kcG9pbnRzIChDbG91ZFdhdGNoIExvZ3MsIENvZGVBcnRpZmFjdCwgQ29kZUFydGlmYWN0IEFQSSwgUzMsIC4uLilcbiAgICogLSBBIENvZGVBcnRpZmFjdCBSZXBvc2l0b3J5IHdpdGggYW4gZXh0ZXJuYWwgY29ubmVjdGlvbiB0byBucG1qcy5jb21cbiAgICpcbiAgICogQGRlZmF1bHQgSXNvbGF0aW9uLk5PX0lOVEVSTkVUX0FDQ0VTU1xuICAgKi9cbiAgcmVhZG9ubHkgc2Vuc2l0aXZlVGFza0lzb2xhdGlvbj86IElzb2xhdGlvbjtcblxuICAvKipcbiAgICogSG93IGxvbmcgdG8gcmV0YWluIENsb3VkV2F0Y2ggbG9ncyBmb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0cyBSZXRlbnRpb25EYXlzLlRFTl9ZRUFSU1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nUmV0ZW50aW9uPzogUmV0ZW50aW9uRGF5cztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIENsb3VkV2F0Y2ggZGFzaGJvYXJkIHRoYXQgcmVwcmVzZW50cyB0aGUgaGVhbHRoIG9mIGJhY2tlbmRcbiAgICogc3lzdGVtcy5cbiAgICovXG4gIHJlYWRvbmx5IGJhY2tlbmREYXNoYm9hcmROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcGFja2FnZXMgdG8gYmxvY2sgZnJvbSB0aGUgY29uc3RydWN0IGh1Yi5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGRlbnlMaXN0PzogRGVueUxpc3RSdWxlW107XG5cbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlIHNvdXJjZXMgdG8gcmVnaXN0ZXIgd2l0aCB0aGlzIENvbnN0cnVjdEh1YiBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIHN0YW5kYXJkIG5wbWpzLmNvbSBwYWNrYWdlIHNvdXJjZSB3aWxsIGJlIGNvbmZpZ3VyZWQuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlU291cmNlcz86IElQYWNrYWdlU291cmNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBhbGxvd2VkIGxpY2Vuc2VzIGZvciBwYWNrYWdlcyBpbmRleGVkIGJ5IHRoaXMgaW5zdGFuY2Ugb2YgQ29uc3RydWN0SHViLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbLi4uU3BkeExpY2Vuc2UuYXBhY2hlKCksLi4uU3BkeExpY2Vuc2UuYnNkKCksLi4uU3BkeExpY2Vuc2UuY2RkbCgpLC4uLlNwZHhMaWNlbnNlLmVwbCgpLFNwZHhMaWNlbnNlLklTQywuLi5TcGR4TGljZW5zZS5taXQoKSxTcGR4TGljZW5zZS5NUExfMl8wXVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZExpY2Vuc2VzPzogU3BkeExpY2Vuc2VbXTtcblxuICAvKipcbiAgICogV2hlbiB1c2luZyBhIENvZGVBcnRpZmFjdCBwYWNrYWdlIHNvdXJjZSwgaXQgaXMgb2Z0ZW4gZGVzaXJhYmxlIHRvIGhhdmVcbiAgICogQ29uc3RydWN0SHViIHByb3Zpc2lvbiBpdCdzIGludGVybmFsIENvZGVBcnRpZmFjdCByZXBvc2l0b3J5IGluIHRoZSBzYW1lXG4gICAqIENvZGVBcnRpZmFjdCBkb21haW4sIGFuZCB0byBjb25maWd1cmUgdGhlIHBhY2thZ2Ugc291cmNlIHJlcG9zaXRvcnkgYXMgYW5cbiAgICogdXBzdHJlYW0gb2YgdGhlIGludGVybmFsIHJlcG9zaXRvcnkuIFRoaXMgd2F5LCBhbGwgcGFja2FnZXMgaW4gdGhlIHNvdXJjZVxuICAgKiBhcmUgYXZhaWxhYmxlIHRvIENvbnN0cnVjdEh1YidzIGJhY2tlbmQgcHJvY2Vzc2luZy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZUFydGlmYWN0RG9tYWluPzogQ29kZUFydGlmYWN0RG9tYWluUHJvcHM7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIGN1c3RvbSBwYWNrYWdlIHBhZ2UgbGlua3MuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTGlua3M/OiBQYWNrYWdlTGlua0NvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciBjdXN0b20gcGFja2FnZSB0YWdzXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlVGFncz86IFBhY2thZ2VUYWdbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgZ3JvdXBpbmcgY3VzdG9tIHBhY2thZ2UgdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZVRhZ0dyb3Vwcz86IFBhY2thZ2VUYWdHcm91cFtdO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciBwYWNrYWdlcyB0byBmZWF0dXJlIG9uIHRoZSBob21lIHBhZ2UuXG4gICAqIEBkZWZhdWx0IC0gRGlzcGxheSB0aGUgMTAgbW9zdCByZWNlbnRseSB1cGRhdGVkIHBhY2thZ2VzXG4gICAqL1xuICByZWFkb25seSBmZWF0dXJlZFBhY2thZ2VzPzogRmVhdHVyZWRQYWNrYWdlcztcblxuICAvKipcbiAgICogQ29uZmlndXJlIGZlYXR1cmUgZmxhZ3MgZm9yIHRoZSB3ZWIgYXBwLlxuICAgKi9cbiAgcmVhZG9ubHkgZmVhdHVyZUZsYWdzPzogRmVhdHVyZUZsYWdzO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgd2hldGhlciBvciBub3QgdGhlIGJhY2tlbmQgc2hvdWxkIHBlcmlvZGljYWxseSBxdWVyeSBOUE1cbiAgICogZm9yIHRoZSBudW1iZXIgb2YgZG93bmxvYWRzIGEgcGFja2FnZSBoYXMgaW4gdGhlIHBhc3Qgd2VlaywgYW5kXG4gICAqIGRpc3BsYXkgZG93bmxvYWQgY291bnRzIG9uIHRoZSB3ZWIgYXBwLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWUgaWYgcGFja2FnZVNvdXJjZXMgaXMgbm90IHNwZWNpZmllZCAodGhlIGRlZmF1bHRzIGFyZVxuICAgKiB1c2VkKSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICByZWFkb25seSBmZXRjaFBhY2thZ2VTdGF0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJyb3dzZSBjYXRlZ29yaWVzLiBFYWNoIGNhdGVnb3J5IHdpbGwgYXBwZWFyIGluIHRoZSBob21lIHBhZ2UgYXMgYSBidXR0b25cbiAgICogd2l0aCBhIGxpbmsgdG8gdGhlIHJlbGV2YW50IHNlYXJjaCBxdWVyeS5cbiAgICovXG4gIHJlYWRvbmx5IGNhdGVnb3JpZXM/OiBDYXRlZ29yeVtdO1xuXG4gIC8qKlxuICAgKiBXaXJlIGNvbnN0cnVjdCBodWIgdG8gdXNlIHRoZSBmYWlsb3ZlciBzdG9yYWdlIGJ1Y2tldHMuXG4gICAqXG4gICAqIERvIG5vdCBhY3RpdmF0ZSB0aGlzIHByb3BlcnR5IHVudGlsIHlvdSd2ZSBwb3B1bGF0ZWQgeW91ciBmYWlsb3ZlciBidWNrZXRzXG4gICAqIHdpdGggdGhlIG5lY2Vzc2FyeSBkYXRhLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jZGtsYWJzL2NvbnN0cnVjdC1odWIvYmxvYi9kZXYvZG9jcy9vcGVyYXRvci1ydW5ib29rLm1kI3N0b3JhZ2UtZGlzYXN0ZXJcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGZhaWxvdmVyU3RvcmFnZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhvdyBmcmVxdWVudGx5IGFsbCBwYWNrYWdlcyBzaG91bGQgZ2V0IGZ1bGx5IHJlcHJvY2Vzc2VkLlxuICAgKlxuICAgKiBTZWUgdGhlIG9wZXJhdG9yIHJ1bmJvb2sgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcmVwcm9jZXNzaW5nLlxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jZGtsYWJzL2NvbnN0cnVjdC1odWIvYmxvYi9tYWluL2RvY3Mvb3BlcmF0b3ItcnVuYm9vay5tZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5ldmVyXG4gICAqL1xuICByZWFkb25seSByZXByb2Nlc3NGcmVxdWVuY3k/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBkb21haW5zIHdoaWNoIHdpbGwgYmUgc2V0IHVwIHRvIHJlZGlyZWN0IHRvIHRoZSBwcmltYXJ5XG4gICAqIGNvbnN0cnVjdCBodWIgZG9tYWluLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbERvbWFpbnM/OiBEb21haW5SZWRpcmVjdFNvdXJjZVtdO1xuXG4gIC8qKlxuICAgKiBKYXZhc2NyaXB0IHRvIHJ1biBvbiB3ZWJhcHAgYmVmb3JlIGFwcCBsb2Fkc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNyZWF0ZSBhbiBlbXB0eSBmaWxlXG4gICAqL1xuICByZWFkb25seSBwcmVsb2FkU2NyaXB0PzogUHJlbG9hZEZpbGU7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBBcHBSZWdpc3RyeSBhcHBsaWNhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YWNrIGNvbnRhaW5pbmdcbiAgICogdGhpcyBjb25zdHJ1Y3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFwcFJlZ2lzdHJ5QXBwbGljYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciBnZW5lcmF0aW5nIFJTUy9BdG9tIGZlZWRzIHdpdGggdGhlIGxhdGVzdCBwYWNrYWdlcy4gSWYgdGhlIHZhbHVlIGlzIG1pc3NpbmdcbiAgICogdGhlIGdlbmVyYXRlZCBSU1MvQVRPTSBmZWVkIHdvdWxkIG5vdCBjb250YWluIHJlbGVhc2Ugbm90ZXNcbiAgICovXG4gIHJlYWRvbmx5IGZlZWRDb25maWd1cmF0aW9uPzogRmVlZENvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gcGVydGFpbmluZyB0byBhbiBleGlzdGluZyBDb2RlQXJ0aWZhY3QgRG9tYWluLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVBcnRpZmFjdERvbWFpblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBDb2RlQXJ0aWZhY3QgZG9tYWluLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbnkgdXBzdHJlYW0gcmVwb3NpdG9yaWVzIGluIHRoaXMgQ29kZUFydGlmYWN0IGRvbWFpbiB0aGF0IHNob3VsZCBiZVxuICAgKiBjb25maWd1cmVkIG9uIHRoZSBpbnRlcm5hbCBDb2RlQXJ0aWZhY3QgcmVwb3NpdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IHVwc3RyZWFtcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBIdWIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25zdHJ1Y3RIdWIgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBpYW0uSUdyYW50YWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5nZXN0aW9uOiBJbmdlc3Rpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgbW9uaXRvcmluZzogTW9uaXRvcmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBDb25zdHJ1Y3RIdWJQcm9wcyA9IHt9XG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5pc29sYXRlU2Vuc2l0aXZlVGFza3MgIT0gbnVsbCAmJlxuICAgICAgcHJvcHMuc2Vuc2l0aXZlVGFza0lzb2xhdGlvbiAhPSBudWxsXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdTdXBwbHlpbmcgYm90aCBpc29sYXRlU2Vuc2l0aXZlVGFza3MgYW5kIHNlbnNpdGl2ZVRhc2tJc29sYXRpb24gaXMgbm90IHN1cHBvcnRlZC4gUmVtb3ZlIHVzYWdlIG9mIGlzb2xhdGVTZW5zaXRpdmVUYXNrcy4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEZldGNoUmVsZWFzZU5vdGVzID0gcHJvcHMuZmVlZENvbmZpZ3VyYXRpb24/LmdpdGh1YlRva2VuU2VjcmV0XG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2U7XG5cbiAgICBjb25zdCBzdG9yYWdlRmFjdG9yeSA9IFMzU3RvcmFnZUZhY3RvcnkuZ2V0T3JDcmVhdGUodGhpcywge1xuICAgICAgZmFpbG92ZXI6IHByb3BzLmZhaWxvdmVyU3RvcmFnZSxcbiAgICB9KTtcblxuICAgIHRoaXMubW9uaXRvcmluZyA9IG5ldyBNb25pdG9yaW5nKHRoaXMsICdNb25pdG9yaW5nJywge1xuICAgICAgYWxhcm1BY3Rpb25zOiBwcm9wcy5hbGFybUFjdGlvbnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBvdmVydmlld0Rhc2hib2FyZCA9IG5ldyBPdmVydmlld0Rhc2hib2FyZCh0aGlzLCAnT3ZlcnZpZXdEYXNoYm9hcmQnLCB7XG4gICAgICBsYW1iZGFTZXJ2aWNlQWxhcm1UaHJlc2hvbGQ6IDcwLFxuICAgICAgZGFzaGJvYXJkTmFtZTogcHJvcHMuYmFja2VuZERhc2hib2FyZE5hbWVcbiAgICAgICAgPyBgJHtwcm9wcy5iYWNrZW5kRGFzaGJvYXJkTmFtZX0tb3ZlcnZpZXdgXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcGFja2FnZURhdGEgPSBzdG9yYWdlRmFjdG9yeS5uZXdCdWNrZXQodGhpcywgJ1BhY2thZ2VEYXRhJywge1xuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICBlbmNyeXB0aW9uOiBzMy5CdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICBsaWZlY3ljbGVSdWxlczogW1xuICAgICAgICAvLyBBYm9ydCBtdWx0aS1wYXJ0IHVwbG9hZHMgYWZ0ZXIgMSBkYXlcbiAgICAgICAgeyBhYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWRBZnRlcjogRHVyYXRpb24uZGF5cygxKSB9LFxuICAgICAgICAvLyBUcmFuc2l0aW9uIG5vbi1jdXJyZW50IG9iamVjdCB2ZXJzaW9ucyB0byBJQSBhZnRlciAxIG1vbnRoXG4gICAgICAgIHtcbiAgICAgICAgICBub25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0b3JhZ2VDbGFzczogczMuU3RvcmFnZUNsYXNzLklORlJFUVVFTlRfQUNDRVNTLFxuICAgICAgICAgICAgICB0cmFuc2l0aW9uQWZ0ZXI6IER1cmF0aW9uLmRheXMoMzEpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAvLyBQZXJtYW5lbnRseSBkZWxldGUgbm9uLWN1cnJlbnQgb2JqZWN0IHZlcnNpb25zIGFmdGVyIDMgbW9udGhzXG4gICAgICAgIHtcbiAgICAgICAgICBub25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoOTApLFxuICAgICAgICAgIGV4cGlyZWRPYmplY3REZWxldGVNYXJrZXI6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFBlcm1hbmVudGx5IGRlbGV0ZSBub24tY3VycmVudCB2ZXJzaW9ucyBvZiBjYXRhbG9nLmpzb24gZWFybGllclxuICAgICAgICB7IG5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cyg3KSwgcHJlZml4OiBDQVRBTE9HX0tFWSB9LFxuICAgICAgXSxcbiAgICAgIHZlcnNpb25lZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlzb2xhdGlvbiA9XG4gICAgICBwcm9wcy5zZW5zaXRpdmVUYXNrSXNvbGF0aW9uID8/XG4gICAgICAocHJvcHMuaXNvbGF0ZVNlbnNpdGl2ZVRhc2tzXG4gICAgICAgID8gSXNvbGF0aW9uLk5PX0lOVEVSTkVUX0FDQ0VTU1xuICAgICAgICA6IElzb2xhdGlvbi5VTkxJTUlURURfSU5URVJORVRfQUNDRVNTKTtcblxuICAgIC8vIENyZWF0ZSBhbiBpbnRlcm5hbCBDb2RlQXJ0aWZhY3QgcmVwb3NpdG9yeSBpZiB3ZSBydW4gaW4gbmV0d29yay1jb250cm9sbGVkIG1vZGUsIG9yIGlmIGEgZG9tYWluIGlzIHByb3ZpZGVkLlxuICAgIGNvbnN0IGNvZGVBcnRpZmFjdCA9XG4gICAgICBpc29sYXRpb24gPT09IElzb2xhdGlvbi5OT19JTlRFUk5FVF9BQ0NFU1MgfHxcbiAgICAgIHByb3BzLmNvZGVBcnRpZmFjdERvbWFpbiAhPSBudWxsXG4gICAgICAgID8gbmV3IFJlcG9zaXRvcnkodGhpcywgJ0NvZGVBcnRpZmFjdCcsIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUHJveHkgdG8gbnBtanMuY29tIGZvciBDb25zdHJ1Y3RIdWInLFxuICAgICAgICAgICAgZG9tYWluTmFtZTogcHJvcHMuY29kZUFydGlmYWN0RG9tYWluPy5uYW1lLFxuICAgICAgICAgICAgZG9tYWluRXhpc3RzOiBwcm9wcy5jb2RlQXJ0aWZhY3REb21haW4gIT0gbnVsbCxcbiAgICAgICAgICAgIHVwc3RyZWFtczogcHJvcHMuY29kZUFydGlmYWN0RG9tYWluPy51cHN0cmVhbXMsXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgeyB2cGMsIHZwY0VuZHBvaW50cywgdnBjU3VibmV0cywgdnBjU2VjdXJpdHlHcm91cHMgfSA9IHRoaXMuY3JlYXRlVnBjKFxuICAgICAgaXNvbGF0aW9uLFxuICAgICAgY29kZUFydGlmYWN0XG4gICAgKTtcblxuICAgIGNvbnN0IGRlbnlMaXN0ID0gbmV3IERlbnlMaXN0KHRoaXMsICdEZW55TGlzdCcsIHtcbiAgICAgIHJ1bGVzOiBwcm9wcy5kZW55TGlzdCA/PyBbXSxcbiAgICAgIHBhY2thZ2VEYXRhQnVja2V0OiBwYWNrYWdlRGF0YSxcbiAgICAgIHBhY2thZ2VEYXRhS2V5UHJlZml4OiBTVE9SQUdFX0tFWV9QUkVGSVgsXG4gICAgICBtb25pdG9yaW5nOiB0aGlzLm1vbml0b3JpbmcsXG4gICAgICBvdmVydmlld0Rhc2hib2FyZDogb3ZlcnZpZXdEYXNoYm9hcmQsXG4gICAgfSk7XG5cbiAgICAvLyBkaXNhYmxlIGZldGNoaW5nIHBhY2thZ2Ugc3RhdHMgYnkgZGVmYXVsdCBpZiBhIGRpZmZlcmVudCBwYWNrYWdlXG4gICAgLy8gc291cmNlIGlzIGNvbmZpZ3VyZWRcbiAgICBjb25zdCBmZXRjaFBhY2thZ2VTdGF0cyA9XG4gICAgICBwcm9wcy5mZXRjaFBhY2thZ2VTdGF0cyA/PyAocHJvcHMucGFja2FnZVNvdXJjZXMgPyBmYWxzZSA6IHRydWUpO1xuXG4gICAgbGV0IHBhY2thZ2VTdGF0czogUGFja2FnZVN0YXRzIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN0YXRzS2V5ID0gJ3N0YXRzLmpzb24nO1xuICAgIGlmIChmZXRjaFBhY2thZ2VTdGF0cykge1xuICAgICAgcGFja2FnZVN0YXRzID0gbmV3IFBhY2thZ2VTdGF0cyh0aGlzLCAnU3RhdHMnLCB7XG4gICAgICAgIGJ1Y2tldDogcGFja2FnZURhdGEsXG4gICAgICAgIG1vbml0b3Jpbmc6IHRoaXMubW9uaXRvcmluZyxcbiAgICAgICAgbG9nUmV0ZW50aW9uOiBwcm9wcy5sb2dSZXRlbnRpb24sXG4gICAgICAgIG9iamVjdEtleTogc3RhdHNLZXksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJzaW9uVHJhY2tlciA9IG5ldyBWZXJzaW9uVHJhY2tlcih0aGlzLCAnVmVyc2lvblRyYWNrZXInLCB7XG4gICAgICBidWNrZXQ6IHBhY2thZ2VEYXRhLFxuICAgICAgbW9uaXRvcmluZzogdGhpcy5tb25pdG9yaW5nLFxuICAgICAgbG9nUmV0ZW50aW9uOiBwcm9wcy5sb2dSZXRlbnRpb24sXG4gICAgfSk7XG5cbiAgICBjb25zdCBmZWVkQnVpbGRlciA9IG5ldyBGZWVkQnVpbGRlcih0aGlzLCAnRmVlZEJ1aWxkZXInLCB7XG4gICAgICBidWNrZXQ6IHBhY2thZ2VEYXRhLFxuICAgICAgb3ZlcnZpZXdEYXNoYm9hcmQsXG4gICAgICBmZWVkRGVzY3JpcHRpb246IHByb3BzLmZlZWRDb25maWd1cmF0aW9uPy5mZWVkRGVzY3JpcHRpb24sXG4gICAgICBmZWVkVGl0bGU6IHByb3BzLmZlZWRDb25maWd1cmF0aW9uPy5mZWVkVGl0bGUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBvcmNoZXN0cmF0aW9uID0gbmV3IE9yY2hlc3RyYXRpb24odGhpcywgJ09yY2hlc3RyYXRpb24nLCB7XG4gICAgICBidWNrZXQ6IHBhY2thZ2VEYXRhLFxuICAgICAgY29kZUFydGlmYWN0LFxuICAgICAgZGVueUxpc3QsXG4gICAgICBsb2dSZXRlbnRpb246IHByb3BzLmxvZ1JldGVudGlvbixcbiAgICAgIG1vbml0b3Jpbmc6IHRoaXMubW9uaXRvcmluZyxcbiAgICAgIG92ZXJ2aWV3RGFzaGJvYXJkOiBvdmVydmlld0Rhc2hib2FyZCxcbiAgICAgIHZwYyxcbiAgICAgIHZwY0VuZHBvaW50cyxcbiAgICAgIHZwY1N1Ym5ldHMsXG4gICAgICB2cGNTZWN1cml0eUdyb3VwcyxcbiAgICAgIGZlZWRCdWlsZGVyLFxuICAgIH0pO1xuXG4gICAgLy8gcmVidWlsZCB0aGUgY2F0YWxvZyB3aGVuIHRoZSBkZW55IGxpc3QgY2hhbmdlcy5cbiAgICBkZW55TGlzdC5wcnVuZS5vbkNoYW5nZUludm9rZShvcmNoZXN0cmF0aW9uLmNhdGFsb2dCdWlsZGVyLmZ1bmN0aW9uKTtcblxuICAgIGNvbnN0IHBhY2thZ2VUYWdzU2VyaWFsaXplZCA9XG4gICAgICBwcm9wcy5wYWNrYWdlVGFncz8ubWFwKChjb25maWcpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgY29uZGl0aW9uOiBjb25maWcuY29uZGl0aW9uLmJpbmQoKSxcbiAgICAgICAgfTtcbiAgICAgIH0pID8/IFtdO1xuXG4gICAgbGV0IHJlbGVhc2VOb3RlcztcbiAgICBpZiAoc2hvdWxkRmV0Y2hSZWxlYXNlTm90ZXMpIHtcbiAgICAgIHJlbGVhc2VOb3RlcyA9IG5ldyBSZWxlYXNlTm90ZUZldGNoZXIodGhpcywgJ1JlbGVhc2VOb3RlcycsIHtcbiAgICAgICAgYnVja2V0OiBwYWNrYWdlRGF0YSxcbiAgICAgICAgZ2l0SHViQ3JlZGVudGlhbHNTZWNyZXQ6IHByb3BzLmZlZWRDb25maWd1cmF0aW9uPy5naXRodWJUb2tlblNlY3JldCxcbiAgICAgICAgZmVlZEJ1aWxkZXIsXG4gICAgICAgIG1vbml0b3Jpbmc6IHRoaXMubW9uaXRvcmluZyxcbiAgICAgICAgb3ZlcnZpZXdEYXNoYm9hcmQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmluZ2VzdGlvbiA9IG5ldyBJbmdlc3Rpb24odGhpcywgJ0luZ2VzdGlvbicsIHtcbiAgICAgIGJ1Y2tldDogcGFja2FnZURhdGEsXG4gICAgICBjb2RlQXJ0aWZhY3QsXG4gICAgICBvcmNoZXN0cmF0aW9uLFxuICAgICAgbG9nUmV0ZW50aW9uOiBwcm9wcy5sb2dSZXRlbnRpb24sXG4gICAgICBtb25pdG9yaW5nOiB0aGlzLm1vbml0b3JpbmcsXG4gICAgICBwYWNrYWdlTGlua3M6IHByb3BzLnBhY2thZ2VMaW5rcyxcbiAgICAgIHBhY2thZ2VUYWdzOiBwYWNrYWdlVGFnc1NlcmlhbGl6ZWQsXG4gICAgICByZXByb2Nlc3NGcmVxdWVuY3k6IHByb3BzLnJlcHJvY2Vzc0ZyZXF1ZW5jeSxcbiAgICAgIHJlbGVhc2VOb3Rlc0ZldGNoUXVldWU6IHJlbGVhc2VOb3Rlcz8ucXVldWUsXG4gICAgICBvdmVydmlld0Rhc2hib2FyZDogb3ZlcnZpZXdEYXNoYm9hcmQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBsaWNlbnNlTGlzdCA9IG5ldyBMaWNlbnNlTGlzdCh0aGlzLCAnTGljZW5zZUxpc3QnLCB7XG4gICAgICBsaWNlbnNlczogcHJvcHMuYWxsb3dlZExpY2Vuc2VzID8/IFtcbiAgICAgICAgLi4uU3BkeExpY2Vuc2UuYXBhY2hlKCksXG4gICAgICAgIC4uLlNwZHhMaWNlbnNlLmJzZCgpLFxuICAgICAgICAuLi5TcGR4TGljZW5zZS5jZGRsKCksXG4gICAgICAgIC4uLlNwZHhMaWNlbnNlLmVwbCgpLFxuICAgICAgICBTcGR4TGljZW5zZS5JU0MsXG4gICAgICAgIC4uLlNwZHhMaWNlbnNlLm1pdCgpLFxuICAgICAgICBTcGR4TGljZW5zZS5NUExfMl8wLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHdlYkFwcCA9IG5ldyBXZWJBcHAodGhpcywgJ1dlYkFwcCcsIHtcbiAgICAgIGRvbWFpbjogcHJvcHMuZG9tYWluLFxuICAgICAgbW9uaXRvcmluZzogdGhpcy5tb25pdG9yaW5nLFxuICAgICAgcGFja2FnZURhdGEsXG4gICAgICBwYWNrYWdlTGlua3M6IHByb3BzLnBhY2thZ2VMaW5rcyxcbiAgICAgIHBhY2thZ2VUYWdzOiBwYWNrYWdlVGFnc1NlcmlhbGl6ZWQsXG4gICAgICBwYWNrYWdlVGFnR3JvdXBzOiBwcm9wcy5wYWNrYWdlVGFnR3JvdXBzLFxuICAgICAgZmVhdHVyZWRQYWNrYWdlczogcHJvcHMuZmVhdHVyZWRQYWNrYWdlcyxcbiAgICAgIHBhY2thZ2VTdGF0cyxcbiAgICAgIGZlYXR1cmVGbGFnczogcHJvcHMuZmVhdHVyZUZsYWdzLFxuICAgICAgY2F0ZWdvcmllczogcHJvcHMuY2F0ZWdvcmllcyxcbiAgICAgIHByZWxvYWRTY3JpcHQ6IHByb3BzLnByZWxvYWRTY3JpcHQsXG4gICAgICBvdmVydmlld0Rhc2hib2FyZDogb3ZlcnZpZXdEYXNoYm9hcmQsXG4gICAgICBpbmNsdWRlRmVlZExpbms6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBTZXQgdGhlIGJhc2UgVVJMIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSBSU1MvQVRPTSBmZWVkXG4gICAgZmVlZEJ1aWxkZXIuc2V0Q29uc3RydWN0SHViVXJsKHdlYkFwcC5iYXNlVXJsKTtcblxuICAgIGNvbnN0IHNvdXJjZXMgPSBuZXcgQ29uc3RydWN0KHRoaXMsICdTb3VyY2VzJyk7XG4gICAgY29uc3QgcGFja2FnZVNvdXJjZXMgPSAocHJvcHMucGFja2FnZVNvdXJjZXMgPz8gW25ldyBOcG1KcygpXSkubWFwKFxuICAgICAgKHNvdXJjZSkgPT5cbiAgICAgICAgc291cmNlLmJpbmQoc291cmNlcywge1xuICAgICAgICAgIGJhc2VVcmw6IHdlYkFwcC5iYXNlVXJsLFxuICAgICAgICAgIGRlbnlMaXN0LFxuICAgICAgICAgIGluZ2VzdGlvbjogdGhpcy5pbmdlc3Rpb24sXG4gICAgICAgICAgbGljZW5zZUxpc3QsXG4gICAgICAgICAgbW9uaXRvcmluZzogdGhpcy5tb25pdG9yaW5nLFxuICAgICAgICAgIHF1ZXVlOiB0aGlzLmluZ2VzdGlvbi5xdWV1ZSxcbiAgICAgICAgICByZXBvc2l0b3J5OiBjb2RlQXJ0aWZhY3QsXG4gICAgICAgICAgb3ZlcnZpZXdEYXNoYm9hcmQ6IG92ZXJ2aWV3RGFzaGJvYXJkLFxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBpbnZlbnRvcnkgPSBuZXcgSW52ZW50b3J5KHRoaXMsICdJbnZlbnRvcnlDYW5hcnknLCB7XG4gICAgICBidWNrZXQ6IHBhY2thZ2VEYXRhLFxuICAgICAgbG9nUmV0ZW50aW9uOiBwcm9wcy5sb2dSZXRlbnRpb24sXG4gICAgICBtb25pdG9yaW5nOiB0aGlzLm1vbml0b3JpbmcsXG4gICAgICBvdmVydmlld0Rhc2hib2FyZDogb3ZlcnZpZXdEYXNoYm9hcmQsXG4gICAgfSk7XG5cbiAgICBuZXcgQmFja2VuZERhc2hib2FyZCh0aGlzLCAnQmFja2VuZERhc2hib2FyZCcsIHtcbiAgICAgIHBhY2thZ2VEYXRhLFxuICAgICAgZGFzaGJvYXJkTmFtZTogcHJvcHMuYmFja2VuZERhc2hib2FyZE5hbWUsXG4gICAgICBwYWNrYWdlU291cmNlcyxcbiAgICAgIGluZ2VzdGlvbjogdGhpcy5pbmdlc3Rpb24sXG4gICAgICBpbnZlbnRvcnksXG4gICAgICBvcmNoZXN0cmF0aW9uLFxuICAgICAgZGVueUxpc3QsXG4gICAgICBwYWNrYWdlU3RhdHMsXG4gICAgICB2ZXJzaW9uVHJhY2tlcixcbiAgICAgIHJlbGVhc2VOb3RlcyxcbiAgICB9KTtcblxuICAgIC8vIGFkZCBkb21haW4gcmVkaXJlY3RzXG4gICAgaWYgKHByb3BzLmRvbWFpbikge1xuICAgICAgZm9yIChjb25zdCByZWRpcmN0U291cmNlIG9mIHByb3BzLmFkZGl0aW9uYWxEb21haW5zID8/IFtdKSB7XG4gICAgICAgIG5ldyBEb21haW5SZWRpcmVjdChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGBSZWRpcmVjdC0ke3JlZGlyY3RTb3VyY2UuaG9zdGVkWm9uZS56b25lTmFtZX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZTogcmVkaXJjdFNvdXJjZSxcbiAgICAgICAgICAgIHRhcmdldERvbWFpbk5hbWU6IHByb3BzLmRvbWFpbj8uem9uZS56b25lTmFtZSxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wcy5hZGRpdGlvbmFsRG9tYWlucyAmJiBwcm9wcy5hZGRpdGlvbmFsRG9tYWlucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQ2Fubm90IHNwZWNpZnkgXCJkb21haW5SZWRpcmVjdHNcIiBpZiBhIGRvbWFpbiBpcyBub3Qgc3BlY2lmaWVkJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5hcHBSZWdpc3RyeUFwcGxpY2F0aW9uID8/IHRydWUpIHtcbiAgICAgIGNvbnN0IGFwcGxpY2F0aW9uID0gbmV3IEFwcGxpY2F0aW9uKHRoaXMsICdBcHBsaWNhdGlvbicsIHtcbiAgICAgICAgYXBwbGljYXRpb25OYW1lOiAnQ29uc3RydWN0SHViJyxcbiAgICAgIH0pO1xuICAgICAgYXBwbGljYXRpb24uYXNzb2NpYXRlU3RhY2soU3RhY2sub2YodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgaGlnaC1zZXZlcml0eSBhbGFybXMgZnJvbSB0aGlzIENvbnN0cnVjdEh1YiBpbnN0YW5jZS5cbiAgICogVGhlc2Ugd2FycmFudCBpbW1lZGlhdGUgYXR0ZW50aW9uIGFzIHRoZXkgYXJlIGluZGljYXRpdmUgb2YgYSBzeXN0ZW0gaGVhbHRoXG4gICAqIGlzc3VlLlxuICAgKi9cbiAgcHVibGljIGdldCBoaWdoU2V2ZXJpdHlBbGFybXMoKTogY3cuSUFsYXJtW10ge1xuICAgIC8vIE5vdGU6IHRoZSBhcnJheSBpcyBhbHJlYWR5IHJldHVybmVkIGJ5LWNvcHkgYnkgTW9uaXRvcmluZywgc28gbm90IGNvcHlpbmcgYWdhaW4uXG4gICAgcmV0dXJuIHRoaXMubW9uaXRvcmluZy5oaWdoU2V2ZXJpdHlBbGFybXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGxvdy1zZXZlcml0eSBhbGFybXMgZnJvbSB0aGlzIENvbnN0cnVjdEh1YiBpbnN0YW5jZS5cbiAgICogVGhlc2UgZG8gbm90IG5lY2Vzc2l0YXRlIGltbWVkaWF0ZSBhdHRlbnRpb24sIGFzIHRoZXkgZG8gbm90IGhhdmUgZGlyZWN0XG4gICAqIGN1c3RvbWVyLXZpc2libGUgaW1wYWN0LCBvciBoYW5kbGluZyBpcyBub3QgdGltZS1zZW5zaXRpdmUuIFRoZXkgaW5kaWNhdGVcbiAgICogdGhhdCBzb21ldGhpbmcgdW51c3VhbCAobm90IG5lY2Vzc2FyaWx5IGJhZCkgaXMgaGFwcGVuaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCBsb3dTZXZlcml0eUFsYXJtcygpOiBjdy5JQWxhcm1bXSB7XG4gICAgLy8gTm90ZTogdGhlIGFycmF5IGlzIGFscmVhZHkgcmV0dXJuZWQgYnktY29weSBieSBNb25pdG9yaW5nLCBzbyBub3QgY29weWluZyBhZ2Fpbi5cbiAgICByZXR1cm4gdGhpcy5tb25pdG9yaW5nLmxvd1NldmVyaXR5QWxhcm1zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCBhbGFybXMgY29uZmlndXJlZCBieSB0aGlzIENvbnN0cnVjdEh1YiBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsQWxhcm1zKCk6IGN3LklBbGFybVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuaGlnaFNldmVyaXR5QWxhcm1zLCAuLi50aGlzLmxvd1NldmVyaXR5QWxhcm1zXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZ3JhbnRQcmluY2lwYWwoKTogaWFtLklQcmluY2lwYWwge1xuICAgIHJldHVybiB0aGlzLmluZ2VzdGlvbi5ncmFudFByaW5jaXBhbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5nZXN0aW9uUXVldWUoKTogc3FzLklRdWV1ZSB7XG4gICAgcmV0dXJuIHRoaXMuaW5nZXN0aW9uLnF1ZXVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVWcGMoXG4gICAgaXNvbGF0aW9uOiBJc29sYXRpb24sXG4gICAgY29kZUFydGlmYWN0OiBSZXBvc2l0b3J5IHwgdW5kZWZpbmVkXG4gICkge1xuICAgIGlmIChpc29sYXRpb24gPT09IElzb2xhdGlvbi5VTkxJTUlURURfSU5URVJORVRfQUNDRVNTKSB7XG4gICAgICByZXR1cm4geyB2cGM6IHVuZGVmaW5lZCwgdnBjRW5kcG9pbnRzOiB1bmRlZmluZWQsIHZwY1N1Ym5ldHM6IHVuZGVmaW5lZCB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN1Ym5ldFR5cGUgPVxuICAgICAgaXNvbGF0aW9uID09PSBJc29sYXRpb24uTk9fSU5URVJORVRfQUNDRVNTXG4gICAgICAgID8gZWMyLlN1Ym5ldFR5cGUuSVNPTEFURURcbiAgICAgICAgOiBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfTkFUO1xuICAgIGNvbnN0IHZwY1N1Ym5ldHMgPSB7IHN1Ym5ldFR5cGUgfTtcblxuICAgIGNvbnN0IHZwYyA9IG5ldyBlYzIuVnBjKHRoaXMsICdWUEMnLCB7XG4gICAgICBlbmFibGVEbnNIb3N0bmFtZXM6IHRydWUsXG4gICAgICBlbmFibGVEbnNTdXBwb3J0OiB0cnVlLFxuICAgICAgLy8gUHJvdmlzaW9uIG5vIE5BVCBnYXRld2F5cyBpZiB3ZSBhcmUgcnVubmluZyBJU09MQVRFRCAod2Ugd291bGRuJ3QgaGF2ZSBhIHB1YmxpYyBzdWJuZXQpXG4gICAgICBuYXRHYXRld2F5czogc3VibmV0VHlwZSA9PT0gZWMyLlN1Ym5ldFR5cGUuSVNPTEFURUQgPyAwIDogdW5kZWZpbmVkLFxuICAgICAgLy8gUHJlLWFsbG9jYXRpbmcgUFVCTElDIC8gUFJJVkFURSAvIElOVEVSTkFMIHN1Ym5ldHMsIHJlZ2FyZGxlc3Mgb2YgdXNlLCBzbyB3ZSBkb24ndCBjcmVhdGVcbiAgICAgIC8vIGEgd2hvbGUgbmV3IFZQQyBpZiB3ZSBldmVyIG5lZWQgdG8gaW50cm9kdWNlIHN1Ym5ldHMgb2YgdGhlc2UgdHlwZXMuXG4gICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgUFJJVkFURSBzdWJuZXQsIHRoZXJlIG11c3QgYWxzbyBoYXZlIGEgUFVCTElDIHN1Ym5ldCAoZm9yIE5BVCBnYXRld2F5cykuXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnUHVibGljJyxcbiAgICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICAgICAgcmVzZXJ2ZWQ6IHN1Ym5ldFR5cGUgPT09IGVjMi5TdWJuZXRUeXBlLklTT0xBVEVELFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1ByaXZhdGUnLFxuICAgICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9OQVQsXG4gICAgICAgICAgcmVzZXJ2ZWQ6IHN1Ym5ldFR5cGUgPT09IGVjMi5TdWJuZXRUeXBlLklTT0xBVEVELFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0lzb2xhdGVkJyxcbiAgICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5JU09MQVRFRCxcbiAgICAgICAgICByZXNlcnZlZDogc3VibmV0VHlwZSAhPT0gZWMyLlN1Ym5ldFR5cGUuSVNPTEFURUQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIFRhZ3Mub2YodnBjLm5vZGUuZGVmYXVsdENoaWxkISkuYWRkKCdOYW1lJywgdnBjLm5vZGUucGF0aCk7XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9XG4gICAgICBzdWJuZXRUeXBlID09PSBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfTkFUXG4gICAgICAgID8gY3JlYXRlUmVzdHJpY3RlZFNlY3VyaXR5R3JvdXBzKHRoaXMsIHZwYylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBDcmVhdGluZyB0aGUgQ29kZUFydGlmYWN0IGVuZHBvaW50cyBvbmx5IGlmIGEgcmVwb3NpdG9yeSBpcyBwcmVzZW50LlxuICAgIGNvbnN0IGNvZGVBcnRpZmFjdEVuZHBvaW50cyA9IGNvZGVBcnRpZmFjdCAmJiB7XG4gICAgICBjb2RlQXJ0aWZhY3RBcGk6IHZwYy5hZGRJbnRlcmZhY2VFbmRwb2ludCgnQ29kZUFydGlmYWN0LkFQSScsIHtcbiAgICAgICAgcHJpdmF0ZURuc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBzZXJ2aWNlOiBuZXcgZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnY29kZWFydGlmYWN0LmFwaScpLFxuICAgICAgICBzdWJuZXRzOiB2cGNTdWJuZXRzLFxuICAgICAgICBzZWN1cml0eUdyb3VwcyxcbiAgICAgIH0pLFxuICAgICAgY29kZUFydGlmYWN0OiB2cGMuYWRkSW50ZXJmYWNlRW5kcG9pbnQoJ0NvZGVBcnRpZmFjdCcsIHtcbiAgICAgICAgcHJpdmF0ZURuc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIHNlcnZpY2U6IG5ldyBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKFxuICAgICAgICAgICdjb2RlYXJ0aWZhY3QucmVwb3NpdG9yaWVzJ1xuICAgICAgICApLFxuICAgICAgICBzdWJuZXRzOiB2cGNTdWJuZXRzLFxuICAgICAgICBzZWN1cml0eUdyb3VwcyxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICAvLyBXZSdsbCBvbmx5IHVzZSBWUEMgZW5kcG9pbnRzIGlmIHdlIGFyZSBjb25maWd1cmVkIHRvIHJ1biBpbiBhbiBJU09MQVRFRCBzdWJuZXQuXG4gICAgY29uc3QgdnBjRW5kcG9pbnRzID0ge1xuICAgICAgLi4uY29kZUFydGlmYWN0RW5kcG9pbnRzLFxuICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgc28gdGhhdCBFQ1Mgd29ya2xvYWRzIGNhbiB1c2UgdGhlIGF3c2xvZ3MgZHJpdmVyXG4gICAgICBjbG91ZFdhdGNoTG9nczogdnBjLmFkZEludGVyZmFjZUVuZHBvaW50KCdDbG91ZFdhdGNoLkxvZ3MnLCB7XG4gICAgICAgIHByaXZhdGVEbnNFbmFibGVkOiB0cnVlLFxuICAgICAgICBzZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkNMT1VEV0FUQ0hfTE9HUyxcbiAgICAgICAgc3VibmV0czogdnBjU3VibmV0cyxcbiAgICAgICAgc2VjdXJpdHlHcm91cHMsXG4gICAgICB9KSxcbiAgICAgIC8vIFRoZXNlIGFyZSBuZWVkZWQgZm9yIEVDUyB3b3JrbG9hZHMgdG8gYmUgYWJsZSB0byBwdWxsIGltYWdlc1xuICAgICAgZWNyQXBpOiB2cGMuYWRkSW50ZXJmYWNlRW5kcG9pbnQoJ0VDUi5BUEknLCB7XG4gICAgICAgIHByaXZhdGVEbnNFbmFibGVkOiB0cnVlLFxuICAgICAgICBzZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkVDUixcbiAgICAgICAgc3VibmV0czogdnBjU3VibmV0cyxcbiAgICAgICAgc2VjdXJpdHlHcm91cHMsXG4gICAgICB9KSxcbiAgICAgIGVjcjogdnBjLmFkZEludGVyZmFjZUVuZHBvaW50KCdFQ1IuRG9ja2VyJywge1xuICAgICAgICBwcml2YXRlRG5zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgc2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5FQ1JfRE9DS0VSLFxuICAgICAgICBzdWJuZXRzOiB2cGNTdWJuZXRzLFxuICAgICAgICBzZWN1cml0eUdyb3VwcyxcbiAgICAgIH0pLFxuICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgKGFtb25nIG90aGVycykgZm9yIENvZGVBcnRpZmFjdCByZWdpc3RyeSB1c2FnZVxuICAgICAgczM6IHZwYy5hZGRHYXRld2F5RW5kcG9pbnQoJ1MzJywge1xuICAgICAgICBzZXJ2aWNlOiBlYzIuR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZS5TMyxcbiAgICAgICAgc3VibmV0czogW3ZwY1N1Ym5ldHNdLFxuICAgICAgfSksXG4gICAgICAvLyBUaGlzIGlzIHVzZWZ1bCBmb3IgZ2V0dGluZyByZXN1bHRzIGZyb20gRUNTIHRhc2tzIHdpdGhpbiB3b3JrZmxvd3NcbiAgICAgIHN0ZXBGdW5jdGlvbnM6IHZwYy5hZGRJbnRlcmZhY2VFbmRwb2ludCgnU3RlcEZ1bmN0aW9ucycsIHtcbiAgICAgICAgcHJpdmF0ZURuc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIHNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuU1RFUF9GVU5DVElPTlMsXG4gICAgICAgIHN1Ym5ldHM6IHZwY1N1Ym5ldHMsXG4gICAgICAgIHNlY3VyaXR5R3JvdXBzLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIC8vIFRoZSBTMyBhY2Nlc3MgaXMgbmVjZXNzYXJ5IGZvciB0aGUgQ29kZUFydGlmYWN0IFJlcG9zaXRvcnkgYW5kIEVDUiBEb2NrZXJcbiAgICAvLyBlbmRwb2ludHMgdG8gYmUgdXNlZCAodGhleSBzZXJ2ZSBvYmplY3RzIGZyb20gUzMpLlxuICAgIHZwY0VuZHBvaW50cy5zMy5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydzMzpHZXRPYmplY3QnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgLy8gVGhlIGluLXJlZ2lvbiBDb2RlQXJ0aWZhY3QgUzMgQnVja2V0XG4gICAgICAgICAgLi4uKGNvZGVBcnRpZmFjdCA/IFtgJHtjb2RlQXJ0aWZhY3QuczNCdWNrZXRBcm59LypgXSA6IFtdKSxcbiAgICAgICAgICAvLyBUaGUgaW4tcmVnaW9uIEVDUiBsYXllciBidWNrZXRcbiAgICAgICAgICBgYXJuOmF3czpzMzo6OnByb2QtJHtTdGFjay5vZih0aGlzKS5yZWdpb259LXN0YXJwb3J0LWxheWVyLWJ1Y2tldC8qYCxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gSXQgZG9lc24ndCBzZWVtIHdlIGNhbiBjb25zdHJhaW4gcHJpbmNpcGFscyBmb3IgdGhlc2UgZ3JhbnRzICh1bmNsZWFyXG4gICAgICAgIC8vIHdoaWNoIHByaW5jaXBhbCB0aG9zZSBjYWxscyBhcmUgbWFkZSBmcm9tLCBvciBpZiB0aGF0IGlzIHNvbWV0aGluZyB3ZVxuICAgICAgICAvLyBjb3VsZCBuYW1lIGhlcmUpLlxuICAgICAgICBwcmluY2lwYWxzOiBbbmV3IEFueVByaW5jaXBhbCgpXSxcbiAgICAgICAgc2lkOiAnQWxsb3ctQ29kZUFydGlmYWN0LWFuZC1FQ1InLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHsgdnBjLCB2cGNFbmRwb2ludHMsIHZwY1N1Ym5ldHMsIHZwY1NlY3VyaXR5R3JvdXBzOiBzZWN1cml0eUdyb3VwcyB9O1xuICB9XG59XG5cbi8qKlxuICogSG93IHBvc3NpYmx5IHJpc2t5IG9wZXJhdGlvbnMgKHN1Y2ggYXMgZG9jLWdlbmVyYXRpb24sIHdoaWNoIHJlcXVpcmVzXG4gKiBpbnN0YWxsaW5nIHRoZSBpbmRleGVkIHBhY2thZ2VzIGluIG9yZGVyIHRvIHRyYW5zLWxpdGVyYXRlIHNhbXBsZSBjb2RlKSBhcmVcbiAqIGlzb2xhdGVkIHRvIG1pdGlnYXRlIHBvc3NpYmxlIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiB2dWxuZXJhYmlsaXRpZXMgaW4gYW5kXG4gKiBhcm91bmQgYG5wbSBpbnN0YWxsYCBvciB0aGUgdHJhbnNsaXRlcmF0b3IncyB1c2Ugb2YgdGhlIFR5cGVTY3JpcHQgY29tcGlsZXIuXG4gKi9cbmV4cG9ydCBlbnVtIElzb2xhdGlvbiB7XG4gIC8qKlxuICAgKiBObyBpc29sYXRpb24gaXMgZG9uZSB3aGF0c29ldmVyLiBUaGUgZG9jLWdlbmVyYXRpb24gcHJvY2VzcyBzdGlsbCBpc1xuICAgKiBwcm92aXNpb25lZCB3aXRoIGxlYXN0LXByaXZpbGVnZSBwZXJtaXNzaW9ucywgYnV0IHJldGFpbnMgY29tcGxldGUgYWNjZXNzXG4gICAqIHRvIGludGVybmV0LlxuICAgKlxuICAgKiBXaGlsZSB0aGlzIG1heGltaXplcyB0aGUgY2hhbmNlcyBvZiBzdWNjZXNzZnVsbHkgaW5zdGFsbGluZyBwYWNrYWdlcyAoYW5kXG4gICAqIGhlbmNlIHN1Y2Nlc3NmdWxseSBnZW5lcmF0aW5nIGRvY3VtZW50YXRpb24gZm9yIHRob3NlKSwgaXQgaXMgYWxzbyB0aGVcbiAgICogbGVhc3Qgc2VjdXJlIG1vZGUgb2Ygb3BlcmF0aW9uLlxuICAgKlxuICAgKiBXZSBhZHZpc2UgeW91IG9ubHkgY29uc2lkZXIgdXNpbmcgdGhpcyBpc29sYXRpb24gbW9kZSBpZiB5b3UgYXJlIGhvc3RpbmcgYVxuICAgKiBDb25zdHJ1Y3RIdWIgaW5zdGFuY2UgdGhhdCBvbmx5IGluZGV4ZXMgdHJ1c3RlZCBwYWNrYWdlcyAoaW5jbHVkaW5nXG4gICAqIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzKS5cbiAgICovXG4gIFVOTElNSVRFRF9JTlRFUk5FVF9BQ0NFU1MsXG5cbiAgLyoqXG4gICAqIFRoZSBzYW1lIHByb3RlY3Rpb25zIGFzIGBVTkxJTUlURURfSU5URVJORVRfQUNDRVNTYCwgZXhjZXB0IG91dGJvdW5kXG4gICAqIGludGVybmV0IGNvbm5lY3Rpb25zIGFyZSBsaW1pdGVkIHRvIElQIGFkZHJlc3MgcmFuZ2VzIGNvcnJlc3BvbmRpbmcgdG9cbiAgICogaG9zdGluZyBlbmRwb2ludHMgZm9yIG5wbWpzLmNvbS5cbiAgICovXG4gIExJTUlURURfSU5URVJORVRfQUNDRVNTLFxuXG4gIC8qKlxuICAgKiBUaGUgc2FtZSBwcm90ZWN0aW9ucyBhcyBgTElNSVRFRF9JTlRFUk5FVF9BQ0NFU1NgLCBleGNlcHQgYWxsIHJlbWFpbmluZ1xuICAgKiBpbnRlcm5ldCBhY2Nlc3MgaXMgcmVtb3ZlZC4gQWxsIHRyYWZmaWMgdG8gQVdTIHNlcnZpY2UgZW5kcG9pbnRzIGlzIHJvdXRlZFxuICAgKiB0aHJvdWdoIFZQQyBFbmRwb2ludHMsIGFzIHRoZSBjb21wdXRlIG5vZGVzIGFyZSBqYWlsZWQgaW4gYSBjb21wbGV0ZWx5XG4gICAqIGlzb2xhdGVkIFZQQy5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgbW9zdCBzZWN1cmUgKGFuZCByZWNvbW1lbmRlZCkgbW9kZSBvZiBvcGVyYXRpb24gZm9yXG4gICAqIENvbnN0cnVjdEh1YiBpbnN0YW5jZXMuXG4gICAqL1xuICBOT19JTlRFUk5FVF9BQ0NFU1MsXG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import type { Alarm } from 'aws-cdk-lib/aws-cloudwatch';
1
+ import type { AlarmBase } from 'aws-cdk-lib/aws-cloudwatch';
2
2
  /**
3
3
  * ConstructHub monitoring features exposed to extension points.
4
4
  */
@@ -11,7 +11,7 @@ export interface IMonitoring {
11
11
  * high-severity CloudWatch dashboard)
12
12
  * @param alarm the alarm to be added to the high-severity dashboard.
13
13
  */
14
- addHighSeverityAlarm(title: string, alarm: Alarm): void;
14
+ addHighSeverityAlarm(title: string, alarm: AlarmBase): void;
15
15
  /**
16
16
  * Adds a low-severity alarm. If this alarm goes off, the action specified in
17
17
  * `normalAlarmAction` is triggered.
@@ -19,5 +19,5 @@ export interface IMonitoring {
19
19
  * @param title a user-friendly title for the alarm (not currently used).
20
20
  * @param alarm the alarm to be added.
21
21
  */
22
- addLowSeverityAlarm(title: string, alarm: Alarm): void;
22
+ addLowSeverityAlarm(title: string, alarm: AlarmBase): void;
23
23
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vbml0b3JpbmcvYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFsYXJtIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuXG4vKipcbiAqIENvbnN0cnVjdEh1YiBtb25pdG9yaW5nIGZlYXR1cmVzIGV4cG9zZWQgdG8gZXh0ZW5zaW9uIHBvaW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTW9uaXRvcmluZyB7XG4gIC8qKlxuICAgKiBBZGRzIGEgaGlnaC1zZXZlcml0eSBhbGFybS4gSWYgdGhpcyBhbGFybSBnb2VzIG9mZiwgdGhlIGFjdGlvbiBzcGVjaWZpZWQgaW5cbiAgICogYGhpZ2hTZXZlcml0eUFsYXJtQWN0aW9uQXJuYCBpcyB0cmlnZ2VyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB0aXRsZSBhIHVzZXItZnJpZW5kbHkgdGl0bGUgZm9yIHRoZSBhbGFybSAod2lsbCBiZSByZW5kZXJlZCBvbiB0aGVcbiAgICogICAgICAgICAgICAgIGhpZ2gtc2V2ZXJpdHkgQ2xvdWRXYXRjaCBkYXNoYm9hcmQpXG4gICAqIEBwYXJhbSBhbGFybSB0aGUgYWxhcm0gdG8gYmUgYWRkZWQgdG8gdGhlIGhpZ2gtc2V2ZXJpdHkgZGFzaGJvYXJkLlxuICAgKi9cbiAgYWRkSGlnaFNldmVyaXR5QWxhcm0odGl0bGU6IHN0cmluZywgYWxhcm06IEFsYXJtKTogdm9pZDtcblxuICAvKipcbiAgICogQWRkcyBhIGxvdy1zZXZlcml0eSBhbGFybS4gSWYgdGhpcyBhbGFybSBnb2VzIG9mZiwgdGhlIGFjdGlvbiBzcGVjaWZpZWQgaW5cbiAgICogYG5vcm1hbEFsYXJtQWN0aW9uYCBpcyB0cmlnZ2VyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB0aXRsZSBhIHVzZXItZnJpZW5kbHkgdGl0bGUgZm9yIHRoZSBhbGFybSAobm90IGN1cnJlbnRseSB1c2VkKS5cbiAgICogQHBhcmFtIGFsYXJtIHRoZSBhbGFybSB0byBiZSBhZGRlZC5cbiAgICovXG4gIGFkZExvd1NldmVyaXR5QWxhcm0odGl0bGU6IHN0cmluZywgYWxhcm06IEFsYXJtKTogdm9pZDtcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vbml0b3JpbmcvYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFsYXJtQmFzZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcblxuLyoqXG4gKiBDb25zdHJ1Y3RIdWIgbW9uaXRvcmluZyBmZWF0dXJlcyBleHBvc2VkIHRvIGV4dGVuc2lvbiBwb2ludHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU1vbml0b3Jpbmcge1xuICAvKipcbiAgICogQWRkcyBhIGhpZ2gtc2V2ZXJpdHkgYWxhcm0uIElmIHRoaXMgYWxhcm0gZ29lcyBvZmYsIHRoZSBhY3Rpb24gc3BlY2lmaWVkIGluXG4gICAqIGBoaWdoU2V2ZXJpdHlBbGFybUFjdGlvbkFybmAgaXMgdHJpZ2dlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0gdGl0bGUgYSB1c2VyLWZyaWVuZGx5IHRpdGxlIGZvciB0aGUgYWxhcm0gKHdpbGwgYmUgcmVuZGVyZWQgb24gdGhlXG4gICAqICAgICAgICAgICAgICBoaWdoLXNldmVyaXR5IENsb3VkV2F0Y2ggZGFzaGJvYXJkKVxuICAgKiBAcGFyYW0gYWxhcm0gdGhlIGFsYXJtIHRvIGJlIGFkZGVkIHRvIHRoZSBoaWdoLXNldmVyaXR5IGRhc2hib2FyZC5cbiAgICovXG4gIGFkZEhpZ2hTZXZlcml0eUFsYXJtKHRpdGxlOiBzdHJpbmcsIGFsYXJtOiBBbGFybUJhc2UpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgbG93LXNldmVyaXR5IGFsYXJtLiBJZiB0aGlzIGFsYXJtIGdvZXMgb2ZmLCB0aGUgYWN0aW9uIHNwZWNpZmllZCBpblxuICAgKiBgbm9ybWFsQWxhcm1BY3Rpb25gIGlzIHRyaWdnZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHRpdGxlIGEgdXNlci1mcmllbmRseSB0aXRsZSBmb3IgdGhlIGFsYXJtIChub3QgY3VycmVudGx5IHVzZWQpLlxuICAgKiBAcGFyYW0gYWxhcm0gdGhlIGFsYXJtIHRvIGJlIGFkZGVkLlxuICAgKi9cbiAgYWRkTG93U2V2ZXJpdHlBbGFybSh0aXRsZTogc3RyaW5nLCBhbGFybTogQWxhcm1CYXNlKTogdm9pZDtcbn1cbiJdfQ==
@@ -37,10 +37,10 @@ export declare class Monitoring extends Construct implements IMonitoring {
37
37
  * Adds a high-severity alarm. If this alarm goes off, the action specified in `highSeverityAlarmActionArn`
38
38
  * @param alarm
39
39
  */
40
- addHighSeverityAlarm(title: string, alarm: cw.Alarm): void;
41
- addLowSeverityAlarm(_title: string, alarm: cw.Alarm): void;
42
- get highSeverityAlarms(): cw.Alarm[];
43
- get lowSeverityAlarms(): cw.Alarm[];
40
+ addHighSeverityAlarm(title: string, alarm: cw.AlarmBase): void;
41
+ addLowSeverityAlarm(_title: string, alarm: cw.AlarmBase): void;
42
+ get highSeverityAlarms(): cw.AlarmBase[];
43
+ get lowSeverityAlarms(): cw.AlarmBase[];
44
44
  /**
45
45
  * Adds a canary that pings a certain URL and raises an alarm in case the URL
46
46
  * responds with an error over 80% of the times.