@sabstravtech/obtservices 0.0.3 → 0.0.19020100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular/fetchers.d.ts +1 -0
- package/angular/lib/vendor/classes/helpers.d.ts +6 -3
- package/angular/lib/vendor/fetchers/conferma-office.fetcher.d.ts +6 -0
- package/angular/lib/vendor/fetchers/search-irl-stations.fetcher.d.ts +7 -0
- package/angular/lib/vendor/services/search.service.d.ts +5 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +268 -6
- package/angular/obtservices.module.d.ts +1 -1
- package/angular/sabstravtech-obtservices-angular.d.ts +6 -5
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/base/fetchers.d.ts +2 -0
- package/base/lib/vendor/classes/base-enterprise.d.ts +4 -0
- package/base/lib/vendor/classes/bookable-basket.d.ts +1 -1
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +6 -1
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +21 -5
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +22 -75
- package/base/lib/vendor/classes/helpers.d.ts +3 -0
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +21 -10
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/fetchers/conferma-office.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/irl-quote-fetcher.d.ts +1 -1
- package/base/lib/vendor/fetchers/search-irl-stations.fetcher.d.ts +20 -0
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +1 -1
- package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +4 -35
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +4 -40
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +9 -2
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +3 -1
- package/base/lib/vendor/interfaces/flight-filters.interface.d.ts +21 -25
- package/base/lib/vendor/interfaces/hotel-recent-search-args.interface.d.ts +23 -0
- package/base/lib/vendor/interfaces/value-display.d.ts +2 -2
- package/base/lib/vendor/models/traveller.object.d.ts +7 -0
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +1 -1
- package/base/lib/vendor/services/search.service.d.ts +10 -3
- package/base/lib/vendor/types/graphql.types.d.ts +253 -6
- package/base/lib/vendor/types/types.d.ts +11 -2
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.js +200 -64
- package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.js +1632 -1085
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
- package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
- package/esm2015/angular/fetchers.js +2 -1
- package/esm2015/angular/lib/vendor/classes/helpers.js +25 -4
- package/esm2015/angular/lib/vendor/fetchers/conferma-office.fetcher.js +22 -0
- package/esm2015/angular/lib/vendor/fetchers/search-irl-stations.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/services/search.service.js +35 -29
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +174 -6
- package/esm2015/angular/obtservices.module.js +3 -3
- package/esm2015/angular/sabstravtech-obtservices-angular.js +7 -6
- package/esm2015/base/fetchers.js +3 -1
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +49 -2
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +2 -2
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +95 -15
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +262 -52
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +439 -713
- package/esm2015/base/lib/vendor/classes/helpers.js +239 -24
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +74 -70
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +153 -118
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +58 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +6 -3
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/fetchers/conferma-office.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/irl-quote-fetcher.js +2 -2
- package/esm2015/base/lib/vendor/fetchers/search-irl-stations.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +43 -2
- package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/flight-filters.interface.js +2 -1
- package/esm2015/base/lib/vendor/interfaces/hotel-recent-search-args.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/value-display.js +1 -1
- package/esm2015/base/lib/vendor/models/traveller.object.js +8 -1
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +3 -2
- package/esm2015/base/lib/vendor/services/search.service.js +67 -12
- package/esm2015/base/lib/vendor/types/graphql.types.js +13 -2
- package/esm2015/base/lib/vendor/types/types.js +1 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +238 -16
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +1561 -1045
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +4 -4
|
@@ -216,6 +216,7 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
216
216
|
this._dropoff_date = null;
|
|
217
217
|
this._dropoff_time = null;
|
|
218
218
|
this.resultsSessionName = CarhireEnterpriseSearch.STORAGE_SESSION_RESULTS;
|
|
219
|
+
this.multiResultsSessionName = CarhireEnterpriseSearch.STORAGE_SESSION_RESULTS;
|
|
219
220
|
const data = storageService.getSessionItem(CarhireEnterpriseSearch.STORAGE_SESSION_PARAMS) || {
|
|
220
221
|
tempParams: {}
|
|
221
222
|
};
|
|
@@ -1201,4 +1202,4 @@ export class CarhireEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1201
1202
|
}
|
|
1202
1203
|
CarhireEnterpriseSearch.STORAGE_SESSION_PARAMS = 'carhire_params';
|
|
1203
1204
|
CarhireEnterpriseSearch.STORAGE_SESSION_RESULTS = 'carhire_results';
|
|
1204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHekQsT0FBTyxFQUFjLEVBQUUsRUFBbUIsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVXRFLE9BQU8sRUFRTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixXQUFXLEVBQ1gsYUFBYSxFQUdkLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQU1MLGFBQWEsRUFJZCxNQUFNLGdCQUFnQixDQUFDO0FBY3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJM0MsTUFBTSxDQUFOLElBQVksWUFNWDtBQU5ELFdBQVksWUFBWTtJQUN0QiwrQkFBZSxDQUFBO0lBQ2YsK0JBQWUsQ0FBQTtJQUNmLDZCQUFhLENBQUE7SUFDYix1Q0FBdUIsQ0FBQTtJQUN2Qix1Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBTlcsWUFBWSxLQUFaLFlBQVksUUFNdkI7QUFFRCxNQUFNLE9BQU8sdUJBSVgsU0FBUSxvQkFJUDtJQTRsQkQsaUNBQWlDO0lBRWpDLFlBQ1UsY0FBNkMsRUFDN0MsZ0NBQThFLEVBQzlFLE9BQTJCLEVBQzNCLGFBQStDLEVBQ3ZELGNBQWtDLEVBQzFCLGFBQStDO1FBRXZELEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQVBkLG1CQUFjLEdBQWQsY0FBYyxDQUErQjtRQUM3QyxxQ0FBZ0MsR0FBaEMsZ0NBQWdDLENBQThDO1FBQzlFLFlBQU8s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ZW50JztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2FySGlyZVNvcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLXNvcnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ2FySGlyZUZpbHRlcnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLWZpbHRlcnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgU2VsZWN0RmlsdGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWxlY3QtZmlsdGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQ2FySGlyZURldGFpbFJlcXVlc3RSZXNwb25zZSxcclxuICBDdXJyZW5jeUNvZGUsXHJcbiAgQmFza2V0SXRlbSxcclxuICBDYXJIaXJlSW5wdXRJZGVudGlmaWVycyxcclxuICBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcclxuICBRdWVyeVNlYXJjaENhckhpcmVBcmdzLFxyXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIENhckhpcmVUcmFuc21pc3Npb24sXHJcbiAgQ2FySGlyZUNsYXNzLFxyXG4gIENhckhpcmVUeXBlLFxyXG4gIERpc3RhbmNlVHlwZXMsXHJcbiAgU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlc1xyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIENhckhpcmVRdW90ZVJlc3VsdCxcclxuICBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxyXG4gIFZlbmRvcixcclxuICBMb2NhdGlvblR5cGVzLFxyXG4gIExvY2F0aW9uRGV0YWlscyxcclxuICBDYXJIaXJlRGVwb3QsXHJcbiAgUmVjZW50U2VhcmNoXHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYXJoaXJlUXVvdGVGZXRjaGVyLFxyXG4gIENhckhpcmVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2NhcmhpcmUtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgQ2FySGlyZVRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0ljYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXIsXHJcbiAgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1hdmFpbGFiaWxpdHktZGV0YWlsLmZldGNoZXInO1xyXG5pbXBvcnQgeyB0YWtlLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IElDYXJDbGFzc2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXItaGlyZS1jbGFzc2VzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuXHJcbmV4cG9ydCBlbnVtIFNvcnRUeXBlc0NhciB7XHJcbiAgcHJpY2UgPSAncHJpY2UnLFxyXG4gIGJyYW5kID0gJ2JyYW5kJyxcclxuICBzaXplID0gJ3NpemUnLFxyXG4gIHByZWZlcnJlZCA9ICdwcmVmZXJyZWQnLFxyXG4gIGV4cGVuc2l2ZSA9ICdleHBlbnNpdmUnXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIENIX1EgZXh0ZW5kcyBDYXJIaXJlRmV0Y2hlclR5cGUsXHJcbiAgICBDSEFEX1EgZXh0ZW5kcyBDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclR5cGVcclxuICA+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIENhckhpcmVUZW1wUGFyYW1zLFxyXG4gICAgQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXksXHJcbiAgICBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIENhcmhpcmVFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXHJcbntcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdjYXJoaXJlX3BhcmFtcyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ2NhcmhpcmVfcmVzdWx0cyc7XHJcblxyXG4gIC8vICEgLSBIYXJkY29kZWQgRGF0YVxyXG4gIHByaXZhdGUgX2NhclR5cGVDb2RlczogW3N0cmluZywgc3RyaW5nLCBDYXJIaXJlVHlwZV1bXSA9IFtcclxuICAgIFsnQicsICcyLTMgRG9vcicsIENhckhpcmVUeXBlLlR3b1RvVGhyZWVEb29yXSxcclxuICAgIFsnQycsICcyLzQgRG9vcicsIENhckhpcmVUeXBlLlR3b09yRm91ckRvb3JdLFxyXG4gICAgWydEJywgJzQtNSBEb29yJywgQ2FySGlyZVR5cGUuRm91clRvRml2ZURvb3JdLFxyXG4gICAgWydXJywgJ1dhZ29uIC8gRXN0YXRlJywgQ2FySGlyZVR5cGUuV2Fnb25PckVzdGF0ZV0sXHJcbiAgICBbJ1YnLCAnUGFzc2VuZ2VyIFZhbicsIENhckhpcmVUeXBlLlBhc3NlbmdlclZhbl0sXHJcbiAgICBbJ0wnLCAnTGltb3VzaW5lJywgQ2FySGlyZVR5cGUuTGltb3VzaW5lXSxcclxuICAgIFsnUycsICdTcG9ydCcsIENhckhpcmVUeXBlLlNwb3J0XSxcclxuICAgIFsnVCcsICdDb252ZXJ0aWJsZScsIENhckhpcmVUeXBlLkNvbnZlcnRpYmxlXSxcclxuICAgIFsnRicsICdTVVYnLCBDYXJIaXJlVHlwZS5TdXZdLFxyXG4gICAgWydKJywgJ09wZW4gQWlyIEFsbCBUZXJyYWluJywgQ2FySGlyZVR5cGUuT3BlbkFpckFsbFRlcnJhaW5dLFxyXG4gICAgWydYJywgJ1NwZWNpYWwnLCBDYXJIaXJlVHlwZS5TcGVjaWFsXSxcclxuICAgIFsnUCcsICdQaWNrdXAgUmVndWxhciBDYWInLCBDYXJIaXJlVHlwZS5QaWNrVXBSZWd1bGFyQ2FiXSxcclxuICAgIFsnUScsICdQaWNrdXAgRXh0ZW5kZWQgQ2FiJywgQ2FySGlyZVR5cGUuUGlja1VwRXh0ZW5kZWRDYWJdLFxyXG4gICAgWydaJywgJ1NwZWNpYWwgT2ZmZXIgQ2FyJywgQ2FySGlyZVR5cGUuU3BlY2lhbE9mZmVyQ2FyXSxcclxuICAgIFsnRScsICdDb3VwZScsIENhckhpcmVUeXBlLkNvdXBlXSxcclxuICAgIFsnTScsICdNb25vc3BhY2UgKEV1cm9wZSknLCBDYXJIaXJlVHlwZS5Nb25vc3BhY2VFdXJvcGVhblVzZV0sXHJcbiAgICBbJ1InLCAnUmVjcmVhdGlvbmFsIFZlaGljbGUnLCBDYXJIaXJlVHlwZS5TdXZdLFxyXG4gICAgWydIJywgJ01vdG9yIEhvbWUnLCBDYXJIaXJlVHlwZS5Nb3RvckhvbWVdLFxyXG4gICAgWydZJywgJzItV2hlZWwgVmVoaWNsZScsIENhckhpcmVUeXBlLlR3b1doZWVsVmVoaWNsZV0sXHJcbiAgICBbJ04nLCAnUm9hZHN0ZXInLCBDYXJIaXJlVHlwZS5Sb2Fkc3Rlcl0sXHJcbiAgICBbJ0cnLCAnQ3Jvc3NvdmVyJywgQ2FySGlyZVR5cGUuU3V2XSxcclxuICAgIFsnSycsICdDb21tZXJjaWFsIFZhbiAvIFRydWNrJywgQ2FySGlyZVR5cGUuUGFzc2VuZ2VyVmFuXVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2NhckFpckNvbmRpdGlvblR5cGVzOiBbc3RyaW5nLCBzdHJpbmcsIGJvb2xlYW5dW10gPSBbXHJcbiAgICBbJ0FueScsICdBbnknLCBudWxsXSxcclxuICAgIFsnWScsICdZZXMnLCB0cnVlXSxcclxuICAgIFsnTicsICdObycsIGZhbHNlXVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2NhclRyYW5zbWlzc2lvbkNvZGVzOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUcmFuc21pc3Npb25dW10gPSBbXHJcbiAgICBbJ00nLCAnTWFudWFsJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxyXG4gICAgWydOJywgJ01hbnVhbCA0LVdoZWVsIERyaXZlJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxyXG4gICAgWydDJywgJ01hbnVhbCBBbGwtV2hlZWwgRHJpdmUnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLk1hbnVhbF0sXHJcbiAgICBbJ0EnLCAnQXV0b21hdGljJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5BdXRvXSxcclxuICAgIFsnQicsICdBdXRvbWF0aWMgNC1XaGVlbCBEcml2ZScsIENhckhpcmVUcmFuc21pc3Npb24uQXV0b10sXHJcbiAgICBbJ0QnLCAnQXV0b21hdGljIEFsbC0gV2hlZWwgRHJpdmUnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLkF1dG9dXHJcbiAgXTtcclxuXHJcbiAgY2FyaGlyZUNvZGVzOiBhbnk7XHJcbiAgcHJpdmF0ZSBfdmVuZG9yczogVmVuZG9yW10gPSBbXHJcbiAgICB7IGNvZGU6ICctJywgbmFtZTogJ0FueScgfSxcclxuICAgIHsgY29kZTogJ0FDJywgbmFtZTogJ0FjZSBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnQUQnLCBuYW1lOiAnQWR2YW50YWdlIFJlbnQgQSBDYXInIH0sXHJcbiAgICB7IGNvZGU6ICdBTCcsIG5hbWU6ICdBbGFtbycgfSxcclxuICAgIHsgY29kZTogJ1pJJywgbmFtZTogJ0F2aXMnIH0sXHJcbiAgICB7IGNvZGU6ICdBVCcsIG5hbWU6ICdBdGVzYScgfSxcclxuICAgIHsgY29kZTogJ1pEJywgbmFtZTogJ0J1ZGdldCBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnQ0knLCBuYW1lOiAnQ2l0ZXIgUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ1pSJywgbmFtZTogJ0RvbGxhciBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnREYnLCBuYW1lOiAnRHJpdmluZyBGb3JjZScgfSxcclxuICAgIHsgY29kZTogJ0VZJywgbmFtZTogJ0Vjb25vbXkgUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0VUJywgbmFtZTogJ0VudGVycHJpc2UnIH0sXHJcbiAgICB7IGNvZGU6ICdFUCcsIG5hbWU6ICdFdXJvcGNhcicgfSxcclxuICAgIHsgY29kZTogJ0lNJywgbmFtZTogJ0V1cm9wY2FyIFNvdXRoYWZyaWNhJyB9LFxyXG4gICAgeyBjb2RlOiAnRVonLCBuYW1lOiAnRXogUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0ZGJywgbmFtZTogJ0ZpcmVmbHknIH0sXHJcbiAgICB7IGNvZGU6ICdGWCcsIG5hbWU6ICdGb3ggUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0dOJywgbmFtZTogJ0d1ZXJpbiBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnWkUnLCBuYW1lOiAnSGVydHonIH0sXHJcbiAgICB7IGNvZGU6ICdMTScsIG5hbWU6ICdMICYgTSBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnTEwnLCBuYW1lOiAnTG9jYWxpemEnIH0sXHJcbiAgICB7IGNvZGU6ICdNVycsIG5hbWU6ICdNaWR3YXkgQ2FyIFJlbnRhbCcgfSxcclxuICAgIHsgY29kZTogJ1pMJywgbmFtZTogJ05hdGlvbmFsIENhciBSZW50YWwgU3lzdGVtJyB9LFxyXG4gICAgeyBjb2RlOiAnTkMnLCBuYW1lOiAnTmV4dGNhcicgfSxcclxuICAgIHsgY29kZTogJ05VJywgbmFtZTogJ051IENhciBSZW50YWxzJyB9LFxyXG4gICAgeyBjb2RlOiAnWkEnLCBuYW1lOiAnUGF5bGVzcyBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnUFInLCBuYW1lOiAnUHJpY2VsZXNzJyB9LFxyXG4gICAgeyBjb2RlOiAnUlcnLCBuYW1lOiAnUmVudCBBIFdyZWNrJyB9LFxyXG4gICAgeyBjb2RlOiAnU1gnLCBuYW1lOiAnU2l4dCcgfSxcclxuICAgIHsgY29kZTogJ1RFJywgbmFtZTogJ1RlbXBlc3QnIH0sXHJcbiAgICB7IGNvZGU6ICdYRicsIG5hbWU6ICdUZXN0LVMgQ3Jvc3MgR2FsaWxlbycgfSxcclxuICAgIHsgY29kZTogJ1hHJywgbmFtZTogJ1Rlc3QtUyBDcm9zcyBUcm5nJyB9LFxyXG4gICAgeyBjb2RlOiAnWlQnLCBuYW1lOiAnVGhyaWZ0eSBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnUE0nLCBuYW1lOiAnVHJhdmVscG9ydCBUZXN0IENvZGUnIH0sXHJcbiAgICB7IGNvZGU6ICdTVicsIG5hbWU6ICdVLVNhdmUgQXV0byBSZW50YWwnIH0sXHJcbiAgICB7IGNvZGU6ICdXRicsIG5hbWU6ICdXb29kZm9yZCcgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2Nhcl9jbGFzc2VzOiBJQ2FyQ2xhc3Nlc1tdID0gW1xyXG4gICAgeyBjb2RlOiAnTScsIG5hbWU6ICdNaW5pJywga2V5OiBDYXJIaXJlQ2xhc3MuTWluaSwgdmFsdWU6ICcxMCcgfSxcclxuICAgIHsgY29kZTogJ04nLCBuYW1lOiAnTWluaSBFbGl0ZScsIGtleTogQ2FySGlyZUNsYXNzLk1pbmlFbGl0ZSwgdmFsdWU6ICcyMCcgfSxcclxuICAgIHsgY29kZTogJ0UnLCBuYW1lOiAnRWNvbm9teScsIGtleTogQ2FySGlyZUNsYXNzLkVjb25vbXksIHZhbHVlOiAnMzAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdIJyxcclxuICAgICAgbmFtZTogJ0Vjb25vbXkgRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5FY29ub215RWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnNDAnXHJcbiAgICB9LFxyXG4gICAgeyBjb2RlOiAnQycsIG5hbWU6ICdDb21wYWN0Jywga2V5OiBDYXJIaXJlQ2xhc3MuQ29tcGFjdCwgdmFsdWU6ICc1MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ0QnLFxyXG4gICAgICBuYW1lOiAnQ29tcGFjdCBFbGl0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkNvbXBhY3RFbGl0ZSxcclxuICAgICAgdmFsdWU6ICc2MCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdJJyxcclxuICAgICAgbmFtZTogJ0ludGVybWVkaWF0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkludGVybWVkaWF0ZSxcclxuICAgICAgdmFsdWU6ICc3MCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdKJyxcclxuICAgICAgbmFtZTogJ0ludGVybWVkaWF0ZSBFbGl0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkludGVybWVkaWF0ZUVsaXRlLFxyXG4gICAgICB2YWx1ZTogJzgwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ1MnLCBuYW1lOiAnU3RhbmRhcmQnLCBrZXk6IENhckhpcmVDbGFzcy5TdGFuZGFyZCwgdmFsdWU6ICc5MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ1InLFxyXG4gICAgICBuYW1lOiAnU3RhbmRhcmQgRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5TdGFuZGFyZEVsaXRlLFxyXG4gICAgICB2YWx1ZTogJzEwMCdcclxuICAgIH0sXHJcbiAgICB7IGNvZGU6ICdGJywgbmFtZTogJ0Z1bGwgU2l6ZScsIGtleTogQ2FySGlyZUNsYXNzLkZ1bGxzaXplLCB2YWx1ZTogJzExMCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ0cnLFxyXG4gICAgICBuYW1lOiAnRnVsbCBTaXplIEVsaXRlJyxcclxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuRnVsbHNpemVFbGl0ZSxcclxuICAgICAgdmFsdWU6ICcxMjAnXHJcbiAgICB9LFxyXG4gICAgeyBjb2RlOiAnUCcsIG5hbWU6ICdQcmVtaXVtJywga2V5OiBDYXJIaXJlQ2xhc3MuUHJlbWl1bSwgdmFsdWU6ICcxMzAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdVJyxcclxuICAgICAgbmFtZTogJ1ByZW1pdW0gRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5QcmVtaXVtRWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnMTQwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ0wnLCBuYW1lOiAnTHV4dXJ5Jywga2V5OiBDYXJIaXJlQ2xhc3MuTHV4dXJ5LCB2YWx1ZTogJzE1MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ1cnLFxyXG4gICAgICBuYW1lOiAnTHV4dXJ5IEVsaXRlJyxcclxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuTHV4dXJ5RWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnMTYwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ08nLCBuYW1lOiAnT3ZlcnNpemUnLCBrZXk6IENhckhpcmVDbGFzcy5PdmVyc2l6ZSwgdmFsdWU6ICcxNzAnIH0sXHJcbiAgICB7IGNvZGU6ICdYJywgbmFtZTogJ1NwZWNpYWwnLCBrZXk6IENhckhpcmVDbGFzcy5TcGVjaWFsLCB2YWx1ZTogJzE4MCcgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2xvY2F0aW9uX3R5cGVzID0gW1xyXG4gICAgTG9jYXRpb25UeXBlcy5DaXR5LFxyXG4gICAgTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxyXG4gICAgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgY2FyQ2xhc3NNYXA6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7XHJcbiAgICBtaW5pOiAwLFxyXG4gICAgJ21pbmkgZWxpdGUnOiAxLFxyXG4gICAgZWNvbm9teTogMixcclxuICAgICdlY29ub215IGVsaXRlJzogMyxcclxuICAgIGNvbXBhY3Q6IDQsXHJcbiAgICAnY29tcGFjdCBzcGVjaWFsJzogNSxcclxuICAgICdjb21wYWN0IGVsaXRlJzogNixcclxuICAgIGludGVybWVkaWF0ZTogNyxcclxuICAgICdpbnRlcm1lZGlhdGUgZWxpdGUnOiA4LFxyXG4gICAgc3RhbmRhcmQ6IDksXHJcbiAgICAnc3RhbmRhcmQgZWxpdGUnOiAxMCxcclxuICAgICdmdWxsIHNpemUnOiAxMSxcclxuICAgICdmdWxsIHNpemUgZWxpdGUnOiAxMixcclxuICAgIHByZW1pdW06IDEzLFxyXG4gICAgJ3ByZW1pdW0gZWxpdGUnOiAxNCxcclxuICAgIGx1eHVyeTogMTUsXHJcbiAgICAnbHV4dXJ5IGVsaXRlJzogMTYsXHJcbiAgICBvdmVyc2l6ZTogMTcsXHJcbiAgICBzcGVjaWFsOiAxOFxyXG4gIH07XHJcbiAgLy8gISAtIEVuZCBvZiBoYXJkY29kZWQgZGF0YVxyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5DYXI7XHJcblxyXG4gIHByaXZhdGUgX25nYlBpY2t1cERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHJpdmF0ZSBfcGlja3VwVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX25nYkRyb3BvZmZEYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX2Ryb3BvZmZUaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfc29ydGluZ19vcHRpb25zOiBDYXJIaXJlU29ydFtdID0gW1xyXG4gICAge1xyXG4gICAgICB2YWx1ZTogMCxcclxuICAgICAgZGlzcGxheTogJ0NoZWFwZXN0IEZpcnN0J1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdmFsdWU6IDEsXHJcbiAgICAgIGRpc3BsYXk6ICdNb3N0IEV4cGVuc2l2ZSBGaXJzdCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHZhbHVlOiAyLFxyXG4gICAgICBkaXNwbGF5OiAnUHJlZmVycmVkIEZpcnN0J1xyXG4gICAgfVxyXG4gIF07XHJcbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfbWluSW5EYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKClcclxuICB9O1xyXG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdO1xyXG5cclxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVzdGltYXRlZE1pbGVhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZXN0aW1hdGVkTWlsZWFnZTtcclxuICB9XHJcblxyXG4gIHNldCBlc3RpbWF0ZWRNaWxlYWdlKG1pbGFnZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZXN0aW1hdGVkTWlsZWFnZSA9IG1pbGFnZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwaWNrdXBUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGlja3VwVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBwaWNrdXBUaW1lKG5ld3RpbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGlja3VwVGltZSA9IG5ld3RpbWU7XHJcbiAgICB0aGlzLl91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRyb3BvZmZUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHJvcG9mZlRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZlRpbWUobmV3dGltZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9kcm9wb2ZmVGltZSA9IG5ld3RpbWU7XHJcbiAgICB0aGlzLl91cGRhdGVOZ2JEcm9wb2ZmRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCBwb3N0Y29kZVBpY2t1cFJhdygpOiBMb2NhdGlvbkRldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cFJhdztcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZVBpY2t1cFJhdyhuZXdQaWNrdXBDb3VudHJ5OiBMb2NhdGlvbkRldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cFJhdyA9IG5ld1BpY2t1cENvdW50cnk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zdGNvZGVEcm9wb2ZmUmF3KCk6IExvY2F0aW9uRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlRHJvcG9mZlJhdztcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZURyb3BvZmZSYXcobmV3UGlja3VwQ291bnRyeTogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVEcm9wb2ZmUmF3ID0gbmV3UGlja3VwQ291bnRyeTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaXR5UGlja3VwRGVwb3QoKTogQ2FySGlyZURlcG90IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cERlcG90O1xyXG4gIH1cclxuXHJcbiAgc2V0IGNpdHlQaWNrdXBEZXBvdChuZXdQaWNrdXBDb3VudHJ5OiBDYXJIaXJlRGVwb3QpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaXR5UGlja3VwRGVwb3QgPSBuZXdQaWNrdXBDb3VudHJ5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNpdHlEcm9wb2ZmRGVwb3QoKTogQ2FySGlyZURlcG90IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmZEZXBvdDtcclxuICB9XHJcblxyXG4gIHNldCBjaXR5RHJvcG9mZkRlcG90KG5ld1Bvc3RDb2RlRHJvcG9mZjogQ2FySGlyZURlcG90KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmZEZXBvdCA9IG5ld1Bvc3RDb2RlRHJvcG9mZjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwb3N0Y29kZVBpY2t1cCgpOiBDYXJIaXJlRGVwb3Qge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cDtcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZVBpY2t1cChuZXdQaWNrdXBDb3VudHJ5OiBDYXJIaXJlRGVwb3QpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cCA9IG5ld1BpY2t1cENvdW50cnk7XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlUGlja3VwKSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc3Rjb2RlRHJvcG9mZigpOiBDYXJIaXJlRGVwb3Qge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZURyb3BvZmY7XHJcbiAgfVxyXG5cclxuICBzZXQgcG9zdGNvZGVEcm9wb2ZmKG5ld1Bvc3RDb2RlRHJvcG9mZjogQ2FySGlyZURlcG90KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVEcm9wb2ZmID0gbmV3UG9zdENvZGVEcm9wb2ZmO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNpdHlQaWNrdXAoKTogTG9jYXRpb25EZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cDtcclxuICB9XHJcblxyXG4gIHNldCBjaXR5UGlja3VwKG5ld1BpY2t1cDogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cCA9IG5ld1BpY2t1cDtcclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cCkge1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5DaXR5O1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2l0eURyb3BvZmYoKTogTG9jYXRpb25EZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmY7XHJcbiAgfVxyXG5cclxuICBzZXQgY2l0eURyb3BvZmYobmV3RHJvcG9mZjogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmYgPSBuZXdEcm9wb2ZmO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1pbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcclxuICB9XHJcblxyXG4gIGdldCBtaW5JbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluSW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXlbXTtcclxuICAvLyAtIEdldHRlcnMgQW5kIFNldHRlcnMgRm9yIFZhcmlvdXMgVmFyaWFibGVzXHJcbiAgZ2V0IHBpY2t1cF9jb3VudHJ5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnBpY2t1cF9jb3VudHJ5O1xyXG4gIH1cclxuXHJcbiAgc2V0IHBpY2t1cF9jb3VudHJ5KG5ld1BpY2t1cENvdW50cnk6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnBpY2t1cF9jb3VudHJ5ID0gbmV3UGlja3VwQ291bnRyeTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBkcm9wb2ZmX2NvdW50cnkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9jb3VudHJ5O1xyXG4gIH1cclxuXHJcbiAgc2V0IGRyb3BvZmZfY291bnRyeShuZXdEcm9wb2ZmQ291bnRyeTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9jb3VudHJ5ID0gbmV3RHJvcG9mZkNvdW50cnk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcGlja3VwX2xvY2F0aW9uKCk6IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2xvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IHBpY2t1cF9sb2NhdGlvbihwaWNrdXBMb2NhdGlvbjogT0JUQWlycG9ydERldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfbG9jYXRpb24gPSBwaWNrdXBMb2NhdGlvbjtcclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMucGlja3VwX2xvY2F0aW9uKSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmV0dXJuX3RvX3BpY2t1cCkge1xyXG4gICAgICB0aGlzLmRyb3BvZmZfbG9jYXRpb24gPSBwaWNrdXBMb2NhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZHJvcG9mZl9sb2NhdGlvbigpOiBPQlRBaXJwb3J0RGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRyb3BvZmZfbG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZl9sb2NhdGlvbihkcm9wT2ZmTG9jYXRpb246IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9sb2NhdGlvbiA9IGRyb3BPZmZMb2NhdGlvbjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHNldCBuZ2JQaWNrdXBEYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9uZ2JQaWNrdXBEYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5nYlBpY2t1cERhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmdiUGlja3VwRGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBuZ2JEcm9wb2ZmRGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fbmdiRHJvcG9mZkRhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU5nYkRyb3BvZmZEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5nYkRyb3BvZmZEYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX25nYkRyb3BvZmZEYXRlO1xyXG4gIH1cclxuXHJcbiAgLy8gRGF0ZXRpbWVzIHdpdGhpbiB0aGUgcXVlcnkgaXRzZWxmXHJcbiAgZ2V0IHBpY2t1cF9kYXRldGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2RhdGV0aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHBpY2t1cF9kYXRldGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnBpY2t1cF9kYXRldGltZSA9IHZhbHVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgIHRoaXMuX25nYlBpY2t1cERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuX3BpY2t1cFRpbWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnSEg6bW0nKVxyXG4gICAgICAgICAgPyBtb21lbnQodmFsdWUpLmZvcm1hdCgnSEg6bW0nKVxyXG4gICAgICAgICAgOiAnMDc6MzAnO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX21pbkluRGF0ZSA9IHtcclxuICAgICAgICBkYXk6IHZhbHVlLmRhdGUoKSxcclxuICAgICAgICBtb250aDogdmFsdWUubW9udGgoKSArIDEsXHJcbiAgICAgICAgeWVhcjogdmFsdWUueWVhcigpXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAodmFsdWUuaXNTYW1lT3JBZnRlcih0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9kYXRldGltZSkpIHtcclxuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSB0aGlzLmRyb3BvZmZfZGF0ZXRpbWVcclxuICAgICAgICAgIC5zZXQoJ2RhdGUnLCB2YWx1ZS5kYXRlKCkpXHJcbiAgICAgICAgICAuc2V0KCdtb250aCcsIHZhbHVlLm1vbnRoKCkpXHJcbiAgICAgICAgICAuc2V0KCd5ZWFyJywgdmFsdWUueWVhcigpKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRyb3BvZmZfZGF0ZXRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRyb3BvZmZfZGF0ZXRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZl9kYXRldGltZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmRyb3BvZmZfZGF0ZXRpbWUgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fbmdiRHJvcG9mZkRhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgICB0aGlzLl9kcm9wb2ZmVGltZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpXHJcbiAgICAgICAgPyBtb21lbnQodmFsdWUpLmZvcm1hdCgnSEg6bW0nKVxyXG4gICAgICAgIDogJzA4OjMwJztcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXHJcbiAgcHJpdmF0ZSBfcGlja3VwX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBnZXQgcGlja3VwX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGlja3VwX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX3BpY2t1cF9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVQaWNrdXBEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcGlja3VwX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHBpY2t1cF90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGlja3VwX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX3RpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGlja3VwX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVBpY2t1cERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcm9wb2ZmX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBnZXQgZHJvcG9mZl9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Ryb3BvZmZfZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBkcm9wb2ZmX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX2Ryb3BvZmZfZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlRHJvcG9mZkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcm9wb2ZmX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IGRyb3BvZmZfdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Ryb3BvZmZfdGltZTtcclxuICB9XHJcblxyXG4gIHNldCBkcm9wb2ZmX3RpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZHJvcG9mZl90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVEcm9wb2ZmRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCByZXR1cm5fdG9fcGlja3VwKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5fdG9fcGlja3VwO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybl90b19waWNrdXAobmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuX3RvX3BpY2t1cCA9IG5ld1ZhbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5WZW5kb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuVmVuZG9yO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlblZlbmRvcihuZXdWZW5kb3I6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblZlbmRvciA9IG5ld1ZlbmRvcjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYXJDbGFzcygpOiBDYXJIaXJlQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYXJDbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBjYXJDbGFzcyhjYXJDbGFzczogQ2FySGlyZUNsYXNzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FyQ2xhc3MgPSBjYXJDbGFzcztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYXJUeXBlKCk6IENhckhpcmVUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FyVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBjYXJUeXBlKHR5cGU6IENhckhpcmVUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FyVHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhbnNtaXNzaW9uKCk6IENhckhpcmVUcmFuc21pc3Npb24ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50cmFuc21pc3Npb247XHJcbiAgfVxyXG5cclxuICBzZXQgdHJhbnNtaXNzaW9uKHRyYW5zOiBDYXJIaXJlVHJhbnNtaXNzaW9uKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhbnNtaXNzaW9uID0gdHJhbnM7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYWlyQ29uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5haXJDb247XHJcbiAgfVxyXG5cclxuICBzZXQgYWlyQ29uKG5ld0NvbjogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFpckNvbiA9IG5ld0NvbjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBsb2NhdGlvblR5cGUoKTogTG9jYXRpb25UeXBlcyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uVHlwZTtcclxuICB9XHJcbiAgc2V0IGxvY2F0aW9uVHlwZSh2YWx1ZTogTG9jYXRpb25UeXBlcykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uVHlwZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKSB7XHJcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxyXG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcclxuICAgICAgQXJyYXkoOTYpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgLy8gISAtIFRoZSBiZWxvdyB2YWx1ZXMgaGF2ZSBnZXR0ZXJzIG9ubHkgKEkuRSBDYW5ub3QgbW9kaWZ5KVxyXG5cclxuICBnZXQgY2FyQWlyQ29uZGl0aW9uVHlwZXMoKTogW3N0cmluZywgc3RyaW5nLCBib29sZWFuXVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9jYXJBaXJDb25kaXRpb25UeXBlcztcclxuICB9XHJcblxyXG4gIGdldCBjYXJUcmFuc21pc3Npb25Db2RlcygpOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUcmFuc21pc3Npb25dW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhclRyYW5zbWlzc2lvbkNvZGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhclR5cGVDb2RlcygpOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUeXBlXVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9jYXJUeXBlQ29kZXM7XHJcbiAgfVxyXG5cclxuICBnZXQgdmVuZG9ycygpOiBWZW5kb3JbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmVuZG9ycztcclxuICB9XHJcblxyXG4gIGdldCBzb3J0aW5nT3B0aW9ucygpOiBDYXJIaXJlU29ydFtdIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0aW5nX29wdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvLyAhIC0gRW5kIG9mIGdldHRlcnMgYW5kIHNldHRlcnNcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNhcmhpcmVmZXRjaGVyOiBCYXNlQ2FyaGlyZVF1b3RlRmV0Y2hlcjxDSF9RPixcclxuICAgIHByaXZhdGUgY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXI6IEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjxDSEFEX1E+LFxyXG4gICAgcHJpdmF0ZSBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2VcclxuICApIHtcclxuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlKTtcclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgdGVtcFBhcmFtczogQ2FySGlyZVRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIENhcmhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBDYXJIaXJlVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMoc2VhcmNoU2VydmljZS5tYWtlQ2FySGlyZVF1ZXJ5KGRhdGEudGVtcFBhcmFtcykpO1xyXG5cclxuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XHJcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuQ2FyXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5hZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0cyA9XHJcbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PENhckhpcmVRdW90ZVJlc3VsdEFycmF5PihcclxuICAgICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgICApIHx8IFtdO1xyXG5cclxuICAgIHRoaXMuZnVsbFJlc3VsdHMgPSBoZWxwZXJzLmNsb25lKHJlc3VsdHMgfHwgW10pO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlQ2FySGlyZVF1ZXJ5KCkpO1xyXG4gICAgdGhpcy5lc3RpbWF0ZWRNaWxlYWdlID0gbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAge1xyXG4gICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtc1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIC8vIGdvIG92ZXIgYW5kIGNoZWNrIHRoYXQgYWxsIG9mIHRoZSB2YXJpb3VzIHZhcmlhYmxlcyBhcmUgY29ycmVjdFxyXG5cclxuICAgIC8vIGZpcnN0IG9mIGFsbCBjaGVjayB0aGF0IHdlIGhhdmUgYSB2YWxpZCBsb2NhdGlvblxyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMubG9jYXRpb25UeXBlKSB7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5BaXJwb3J0OlxyXG4gICAgICAgIGlmICghdGhpcy5waWNrdXBfbG9jYXRpb24gfHwgIXRoaXMucGlja3VwX2xvY2F0aW9uLmRlc3RpbmF0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgcGlja3VwIGxvY2F0aW9uJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZHJvcG9mZl9sb2NhdGlvbiB8fCAhdGhpcy5kcm9wb2ZmX2xvY2F0aW9uLmRlc3RpbmF0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcG9mZiBsb2NhdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XHJcbiAgICAgICAgaWYgKCF0aGlzLmNpdHlQaWNrdXApIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBwaWNrdXAgY2l0eScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNpdHlEcm9wb2ZmKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcG9mZiBjaXR5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuUG9zdGNvZGU6XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvc3Rjb2RlUGlja3VwKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgcGlja3VwIGRlcG90Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucG9zdGNvZGVEcm9wb2ZmKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcG9mZiBkZXBvdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5lc3RpbWF0ZWRNaWxlYWdlICYmIHRoaXMuZXN0aW1hdGVkTWlsZWFnZSA8PSAwKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgJ0VzdGltYXRlZCBNaWxhZ2UgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLnBpY2t1cF9kYXRldGltZSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBwaWNrdXAgdGltZSBhbmQgZGF0ZScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZHJvcG9mZl9kYXRldGltZSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBkcm9wIG9mZiB0aW1lIGFuZCBkYXRlJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWU/LmlzU2FtZU9yQmVmb3JlKHRoaXMucGlja3VwX2RhdGV0aW1lLCAnbWludXRlJylcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdEcm9wb2ZmIGRhdGUvdGltZSBjYW5ub3QgYmUgYmVmb3JlIG9yIHRoZSBzYW1lIGFzIHBpY2t1cCBkYXRlL3RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGlja3VwX2RhdGV0aW1lPy5pc0JlZm9yZShtb21lbnQoKSkpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ1BpY2t1cCBkYXRlL3RpbWUgbXVzdCBiZSBhZnRlciBwcmVzZW50IGRhdGUvdGltZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5kcm9wb2ZmX2RhdGV0aW1lPy5pc0JlZm9yZShtb21lbnQoKSkpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ0Ryb3BvZmYgZGF0ZS90aW1lIG11c3QgYmUgYWZ0ZXIgcHJlc2VudCBkYXRlL3RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XHJcblxyXG4gICAgdGhpcy5pc1ZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcclxuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKFxyXG4gICAgICAgIHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkodGhpcy5nZXRTZWFyY2hRdWVyeSgpKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgdGhpcy5jYXJoaXJlZmV0Y2hlci5mZXRjaExpc3QoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYXJIaXJlQXJncz4ocXVlcnkpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBRdWVyeVNlYXJjaENhckhpcmVBcmdzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBhbnkgPSBxdWVyeTtcclxuICAgIHN3aXRjaCAodGhpcy5sb2NhdGlvblR5cGUpIHtcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XHJcbiAgICAgICAgcmVjZW50U2VhcmNoUXVlcnkuY2l0eSA9IHtcclxuICAgICAgICAgIHBpY2t1cE5hbWU6IHRoaXMuY2l0eVBpY2t1cC5uYW1lLFxyXG4gICAgICAgICAgcGlja3VwQ291bnRyeUNvZGU6IHRoaXMuY2l0eVBpY2t1cC5jb3VudHJ5Q29kZSxcclxuICAgICAgICAgIHBpY2t1cENpdHk6IHRoaXMuY2l0eVBpY2t1cC5pZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgcGlja3VwTGF0aXR1ZGU6IHRoaXMuY2l0eVBpY2t1cC5sYXRpdHVkZSxcclxuICAgICAgICAgIHBpY2t1cExvbmdpdHVkZTogdGhpcy5jaXR5UGlja3VwLmxvbmdpdHVkZSxcclxuXHJcbiAgICAgICAgICBkcm9wT2ZmTmFtZTogdGhpcy5jaXR5RHJvcG9mZi5uYW1lLFxyXG4gICAgICAgICAgZHJvcG9mZkNvdW50cnlDb2RlOiB0aGlzLmNpdHlEcm9wb2ZmLmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgZHJvcG9mZkNpdHk6IHRoaXMuY2l0eURyb3BvZmYuaWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgIGRyb3BPZmZMYXRpdHVkZTogdGhpcy5jaXR5RHJvcG9mZi5sYXRpdHVkZSxcclxuICAgICAgICAgIGRyb3BPZmZMb25naXR1ZGU6IHRoaXMuY2l0eURyb3BvZmYubG9uZ2l0dWRlLFxyXG5cclxuICAgICAgICAgIHBpY2t1cEFkZHJlc3NMaW5lczogdGhpcy5jaXR5UGlja3VwRGVwb3QuYWRkcmVzc0xpbmVzWzBdLFxyXG4gICAgICAgICAgcGlja3VwQ2l0eU5hbWU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmNpdHlOYW1lLFxyXG4gICAgICAgICAgcGlja3VwRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBWZW5kb3I6IHRoaXMuY2l0eVBpY2t1cERlcG90LnZlbmRvcixcclxuICAgICAgICAgIHBpY2t1cFZlbmRvckNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LnZlbmRvckNvZGUsXHJcblxyXG4gICAgICAgICAgZHJvcE9mZkFkZHJlc3NMaW5lczogdGhpcy5jaXR5RHJvcG9mZkRlcG90LmFkZHJlc3NMaW5lc1swXSxcclxuICAgICAgICAgIGRyb3BPZmZDaXR5TmFtZTogdGhpcy5jaXR5RHJvcG9mZkRlcG90LmNpdHlOYW1lLFxyXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgICAgICB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBkcm9wT2ZmTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZlZlbmRvcjogdGhpcy5jaXR5RHJvcG9mZkRlcG90LnZlbmRvcixcclxuICAgICAgICAgIGRyb3BPZmZWZW5kb3JDb2RlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QudmVuZG9yQ29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZTpcclxuICAgICAgICByZWNlbnRTZWFyY2hRdWVyeS5kZXBvdCA9IHtcclxuICAgICAgICAgIHZlbmRvckNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAudmVuZG9yQ29kZSxcclxuICAgICAgICAgIHBpY2t1cExvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5leHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cEFkZHJlc3NMaW5lczogdGhpcy5wb3N0Y29kZVBpY2t1cC5hZGRyZXNzTGluZXNbMF0sXHJcbiAgICAgICAgICBwaWNrdXBDaXR5TmFtZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5jaXR5TmFtZSxcclxuICAgICAgICAgIHBpY2t1cFZlbmRvcjogdGhpcy5wb3N0Y29kZVBpY2t1cC52ZW5kb3IsXHJcblxyXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZURyb3BvZmYubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgICAgICB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5leHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIGRyb3BvZmZBZGRyZXNzTGluZXM6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmFkZHJlc3NMaW5lc1swXSxcclxuICAgICAgICAgIGRyb3BvZmZDaXR5TmFtZTogdGhpcy5wb3N0Y29kZURyb3BvZmYuY2l0eU5hbWUsXHJcbiAgICAgICAgICBkcm9wb2ZmVmVuZG9yOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi52ZW5kb3IsXHJcblxyXG4gICAgICAgICAgcGlja3VwUG9zdENvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXBSYXcubmFtZSxcclxuICAgICAgICAgIHBpY2t1cExhdGl0dWRlOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3LmxhdGl0dWRlLFxyXG4gICAgICAgICAgcGlja3VwTG9uZ2l0dWRlOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3LmxvbmdpdHVkZSxcclxuXHJcbiAgICAgICAgICBkcm9wb2ZmUG9zdENvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3Lm5hbWUsXHJcbiAgICAgICAgICBkcm9wb2ZmTGF0aXR1ZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3LmxhdGl0dWRlLFxyXG4gICAgICAgICAgZHJvcG9mZkxvbmdpdHVkZTogdGhpcy5wb3N0Y29kZURyb3BvZmZSYXcubG9uZ2l0dWRlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuQ2FyLFxyXG4gICAgICBzZWFyY2hBcmdzOiByZWNlbnRTZWFyY2hRdWVyeSxcclxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5waWNrdXBfZGF0ZXRpbWUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaG9zZW5WZW5kb3IgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52ZW5kb3I7XHJcbiAgICB0aGlzLmNhckNsYXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2xhc3M7XHJcbiAgICB0aGlzLmNhclR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50eXBlO1xyXG4gICAgdGhpcy50cmFuc21pc3Npb24gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmFuc21pc3Npb247XHJcbiAgICB0aGlzLmFpckNvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmFpcmNvbjtcclxuICAgIHRoaXMuZXN0aW1hdGVkTWlsZWFnZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmVzdGltYXRlZERhaWx5RGlzdGFuY2U7XHJcbiAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZHJvcG9mZkRhdGVUaW1lKTtcclxuICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnBpY2t1cERhdGVUaW1lKTtcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eSkge1xyXG4gICAgICB0aGlzLmdldFBhcmFtc0ZvckNhcmJ5Q2l0eShyZWNlbnRTZWFyY2gpO1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5haXJwb3J0KSB7XHJcbiAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlBaXJwb3J0KHJlY2VudFNlYXJjaCk7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90KSB7XHJcbiAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlQb3N0Q29kZShyZWNlbnRTZWFyY2gpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJhbXNGb3JDYXJieUFpcnBvcnQocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5BaXJwb3J0O1xyXG4gICAgY29tYmluZUxhdGVzdChbXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmFpcnBvcnQucGlja3VwQ29kZVxyXG4gICAgICApLFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5haXJwb3J0LmRyb3BvZmZDb2RlXHJcbiAgICAgIClcclxuICAgIF0pLnN1YnNjcmliZSgoW2RlcGFydExvY2F0aW9uLCBhcnJpdmVMb2NhdGlvbl0pID0+IHtcclxuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2xvY2F0aW9uID0ge1xyXG4gICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxyXG4gICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXHJcbiAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKFxyXG4gICAgICAgICAgICBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gudGVybWluYWxzXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgY291bnRyeUNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5waWNrdXBfbG9jYXRpb24gPSB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgIGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2NvdW50cnkgPSB0aGlzLmRyb3BvZmZfbG9jYXRpb24uY291bnRyeUNvZGU7XHJcbiAgICAgICAgdGhpcy5waWNrdXBfY291bnRyeSA9IHRoaXMucGlja3VwX2xvY2F0aW9uLmNvdW50cnlDb2RlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJhbXNGb3JDYXJieUNpdHkocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5DaXR5O1xyXG5cclxuICAgIHRoaXMuY2l0eVBpY2t1cCA9IHtcclxuICAgICAgY291bnRyeUNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwQ291bnRyeUNvZGUsXHJcbiAgICAgIGlkOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cENpdHksXHJcbiAgICAgIG5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwTmFtZSxcclxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5LFxyXG4gICAgICBsYXRpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBMYXRpdHVkZSxcclxuICAgICAgbG9uZ2l0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cExvbmdpdHVkZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNpdHlEcm9wb2ZmID0ge1xyXG4gICAgICBjb3VudHJ5Q29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wb2ZmQ291bnRyeUNvZGUsXHJcbiAgICAgIGlkOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BvZmZDaXR5LFxyXG4gICAgICBuYW1lOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZOYW1lLFxyXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXHJcbiAgICAgIGxhdGl0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZMYXRpdHVkZSxcclxuICAgICAgbG9uZ2l0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZMb25naXR1ZGVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jaXR5RHJvcG9mZkRlcG90ID0ge1xyXG4gICAgICBhZGRyZXNzTGluZXM6IFtyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZBZGRyZXNzTGluZXNdLFxyXG4gICAgICBjaXR5TmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wT2ZmQ2l0eU5hbWUsXHJcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZkxvY2F0aW9uQ29kZSxcclxuICAgICAgdmVuZG9yOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZWZW5kb3IsXHJcbiAgICAgIHZlbmRvckNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZlZlbmRvckNvZGVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jaXR5UGlja3VwRGVwb3QgPSB7XHJcbiAgICAgIGFkZHJlc3NMaW5lczogW3JlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwQWRkcmVzc0xpbmVzXSxcclxuICAgICAgY2l0eU5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwQ2l0eU5hbWUsXHJcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwRXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBMb2NhdGlvbkNvZGUsXHJcbiAgICAgIHZlbmRvcjogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBWZW5kb3IsXHJcbiAgICAgIHZlbmRvckNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwVmVuZG9yQ29kZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJhbXNGb3JDYXJieVBvc3RDb2RlKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuUG9zdGNvZGU7XHJcbiAgICB0aGlzLnBvc3Rjb2RlRHJvcG9mZiA9IHtcclxuICAgICAgYWRkcmVzc0xpbmVzOiBbcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcG9mZkFkZHJlc3NMaW5lc10sXHJcbiAgICAgIHZlbmRvckNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnZlbmRvckNvZGUsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcE9mZkxvY2F0aW9uQ29kZSxcclxuICAgICAgZXh0ZW5kZWRMb2NhdGlvbkNvZGU6XHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICBjaXR5TmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcG9mZkNpdHlOYW1lLFxyXG4gICAgICB2ZW5kb3I6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BvZmZWZW5kb3JcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wb3N0Y29kZURyb3BvZmZSYXcgPSB7XHJcbiAgICAgIG5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BvZmZQb3N0Q29kZSxcclxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcclxuICAgICAgbGF0aXR1ZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BvZmZMYXRpdHVkZSxcclxuICAgICAgbG9uZ2l0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5kcm9wb2ZmTG9uZ2l0dWRlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5wb3N0Y29kZVBpY2t1cCA9IHtcclxuICAgICAgYWRkcmVzc0xpbmVzOiBbcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwQWRkcmVzc0xpbmVzXSxcclxuICAgICAgdmVuZG9yQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QudmVuZG9yQ29kZSxcclxuICAgICAgbG9jYXRpb25Db2RlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5waWNrdXBMb2NhdGlvbkNvZGUsXHJcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICBjaXR5TmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwQ2l0eU5hbWUsXHJcbiAgICAgIHZlbmRvcjogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwVmVuZG9yXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucG9zdGNvZGVQaWNrdXBSYXcgPSB7XHJcbiAgICAgIG5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnBpY2t1cFBvc3RDb2RlLFxyXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlLFxyXG4gICAgICBsYXRpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwTGF0aXR1ZGUsXHJcbiAgICAgIGxvbmdpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwTG9uZ2l0dWRlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBRdWVyeVNlYXJjaENhckhpcmVBcmdzIHtcclxuICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhckhpcmVBcmdzID0ge30gYXMgUXVlcnlTZWFyY2hDYXJIaXJlQXJncztcclxuICAgIHN3aXRjaCAodGhpcy5sb2NhdGlvblR5cGUpIHtcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ6XHJcbiAgICAgICAgcXVlcnkuYWlycG9ydCA9IHtcclxuICAgICAgICAgIHBpY2t1cENvZGU6ICcnLFxyXG4gICAgICAgICAgZHJvcG9mZkNvZGU6ICcnXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcXVlcnkuYWlycG9ydC5waWNrdXBDb2RlID0gdGhpcy5waWNrdXBfbG9jYXRpb24uZ2F0ZXdheTtcclxuICAgICAgICBxdWVyeS5haXJwb3J0LmRyb3BvZmZDb2RlID0gdGhpcy5yZXR1cm5fdG9fcGlja3VwXHJcbiAgICAgICAgICA/IHRoaXMucGlja3VwX2xvY2F0aW9uLmdhdGV3YXlcclxuICAgICAgICAgIDogdGhpcy5kcm9wb2ZmX2xvY2F0aW9uLmdhdGV3YXk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5DaXR5OlxyXG4gICAgICAgIHF1ZXJ5LmNpdHkgPSB7XHJcbiAgICAgICAgICBwaWNrdXBDb3VudHJ5Q29kZTogdGhpcy5jaXR5UGlja3VwLmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgcGlja3VwQ2l0eTogdGhpcy5jaXR5UGlja3VwLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBkcm9wb2ZmQ291bnRyeUNvZGU6IHRoaXMuY2l0eURyb3BvZmYuY291bnRyeUNvZGUsXHJcbiAgICAgICAgICBkcm9wb2ZmQ2l0eTogdGhpcy5jaXR5RHJvcG9mZi5pZC50b1N0cmluZygpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlOlxyXG4gICAgICAgIHF1ZXJ5LmRlcG90ID0ge1xyXG4gICAgICAgICAgdmVuZG9yQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC52ZW5kb3JDb2RlLFxyXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZURyb3BvZmYubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5leHRlbmRlZExvY2F0aW9uQ29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBxdWVyeS5kcm9wb2ZmRGF0ZVRpbWUgPSB0aGlzLmRyb3BvZmZfZGF0ZXRpbWU7XHJcbiAgICBxdWVyeS5waWNrdXBEYXRlVGltZSA9IHRoaXMucGlja3VwX2RhdGV0aW1lO1xyXG5cclxuICAgIC8vIG5vdyBmb3IgdGhlIG9wdGlvbmFsIGZpZWxkcyAtIG51bGxpZnkgdGhlc2UgaWYgdGhleSBhcmUgJy0nIChBbnkpXHJcbiAgICBxdWVyeS5haXJjb24gPSB0aGlzLmFpckNvbiB8fCBudWxsO1xyXG4gICAgcXVlcnkudmVuZG9yID0gdGhpcy5jaG9zZW5WZW5kb3IgPT09ICctJyA/IG51bGwgOiB0aGlzLmNob3NlblZlbmRvcjtcclxuICAgIHF1ZXJ5LnRyYW5zbWlzc2lvbiA9IHRoaXMudHJhbnNtaXNzaW9uIHx8IG51bGw7XHJcbiAgICBxdWVyeS5jbGFzcyA9IHRoaXMuY2FyQ2xhc3MgfHwgbnVsbDtcclxuICAgIHF1ZXJ5LnR5cGUgPSB0aGlzLmNhclR5cGUgfHwgbnVsbDtcclxuICAgIHF1ZXJ5LmVzdGltYXRlZERhaWx5RGlzdGFuY2UgPSB0aGlzLmVzdGltYXRlZE1pbGVhZ2UgfHwgbnVsbDtcclxuICAgIHF1ZXJ5LmVzdGltYXRlZERhaWx5RGlzdGFuY2VVbml0cyA9IHRoaXMuZXN0aW1hdGVkTWlsZWFnZVxyXG4gICAgICA/IERpc3RhbmNlVHlwZXMuTVxyXG4gICAgICA6IG51bGw7IC8vIFNldHRpbmcgYXMgbWlsZXMgZm9yIG5vdyAtIG1heSBzd2FwIG91dCBmb3Iga2lsb21ldGVycyBsYXRlclxyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYXJIaXJlQXJncz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHRvZG8gLSB0dXJuIHRoaXMgaW50byBhIEJFIGNhbGwgdG8gZHluYW1pY2FsbHkgZ2V0IHRoZSBsaXN0IG9mIGNhciBjbGFzc2VzXHJcbiAgICogQHJldHVybnMgYWxsIGNhciBjbGFzc2VzIGFzIGFuIGFycmF5XHJcbiAgICovXHJcbiAgZ2V0Q2FyQ2xhc3NlcygpOiBPYnNlcnZhYmxlPElDYXJDbGFzc2VzW10+IHtcclxuICAgIHJldHVybiBvZih0aGlzLl9jYXJfY2xhc3Nlcyk7XHJcbiAgfVxyXG5cclxuICBnZXRMb2NhdGlvblR5cGVzKCkge1xyXG4gICAgcmV0dXJuIG9mKHRoaXMuX2xvY2F0aW9uX3R5cGVzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGZpbHRlciBkb3duIHRoZSBjYXIgcmVzdWx0cyBiYXNlZCBvbiB1c2VyIGNob3NlbiBmaWx0ZXJzXHJcbiAgICovXHJcbiAgZmlsdGVyUmVzdWx0cyhhcHBsaWVkRmlsdGVyczogQ2FySGlyZUZpbHRlcnMsIHNlbGVjdGVkU29ydDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgZnVsbFJlc3VsdHM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5ID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICB0aGlzLmZ1bGxSZXN1bHRzXHJcbiAgICApO1xyXG5cclxuICAgIC8vIG5vdyBhcHBseSBmaWx0ZXJzXHJcbiAgICAvLyBwcmljZSBmaWx0ZXJzXHJcbiAgICBmdWxsUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLmZpbHRlcigocmVzdWx0OiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLmdldFByaWNlKHJlc3VsdCk7XHJcblxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHByaWNlID49IGFwcGxpZWRGaWx0ZXJzLm1pblByaWNlICYmIHByaWNlIDw9IGFwcGxpZWRGaWx0ZXJzLm1heFByaWNlXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBhcHBseSB0cmFuc21pc3Npb24gZmlsdGVyc1xyXG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLmZpbHRlckJ5VHJhbnNtaXNzaW9uVHlwZShcclxuICAgICAgYXBwbGllZEZpbHRlcnMudHJhbnNtaXNzaW9ucyxcclxuICAgICAgZnVsbFJlc3VsdHNcclxuICAgICk7XHJcblxyXG4gICAgLy8gYWlyY29uXHJcbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuZmlsdGVyQnlBaXJjb25UeXBlKFxyXG4gICAgICBhcHBsaWVkRmlsdGVycy5haXJDb25kaXRpb25pbmcsXHJcbiAgICAgIGZ1bGxSZXN1bHRzXHJcbiAgICApO1xyXG5cclxuICAgIC8vIGNhciB0eXBlcyAoY2xhc3MpXHJcbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuZmlsdGVyQnlDYXJUeXBlKGFwcGxpZWRGaWx0ZXJzLnR5cGVzLCBmdWxsUmVzdWx0cyk7XHJcblxyXG4gICAgLy8gY29tcGFueVxyXG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLmZpbHRlckJ5Q29tcGFueShhcHBsaWVkRmlsdGVycy5jb21wYW5pZXMsIGZ1bGxSZXN1bHRzKTtcclxuXHJcbiAgICAvLyBsYXN0bHkgYXBwbHkgYW55IHJlcXVpcmVkIHNvcnRpbmdcclxuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5zb3J0UmVzdWx0cyhzZWxlY3RlZFNvcnQsIGZ1bGxSZXN1bHRzKTtcclxuXHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChmdWxsUmVzdWx0cyk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUNvbXBhbnkoXHJcbiAgICBjb21wYW5pZXM6IFNlbGVjdEZpbHRlcltdLFxyXG4gICAgY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IGNvbXBhbmllcy5maWx0ZXIoKGNvbXBhbnkpID0+IGNvbXBhbnkuc2VsZWN0ZWQpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZC5sZW5ndGgpIHtcclxuICAgICAgY2FycyA9IGNhcnMuZmlsdGVyKChjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhdmVTZWxlY3RlZCA9IHNlbGVjdGVkLmZpbmQoXHJcbiAgICAgICAgICAoc2VsYzogYW55KSA9PlxyXG4gICAgICAgICAgICBzZWxjLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT1cclxuICAgICAgICAgICAgY2FyLmlkZW50aWZpZXJzLnZlbmRvci50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGhhdmVTZWxlY3RlZDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhcnM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUNhclR5cGUoXHJcbiAgICB0eXBlczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICBjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIC8vIHRoaXMgaXMgYSBmaWx0ZXIgdHlwZSB3aGljaCBhbGxvd3MgbW9yZSB0aGFuIG9uZSB0byBiZSBzZXRcclxuICAgIC8vIGlmIG5vbmUgYXJlIHNldCBhbGxvdyBhbGwgdGhyb3VnaFxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkID0gdHlwZXMuZmlsdGVyKCh0eXBlKSA9PiB0eXBlLnNlbGVjdGVkKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBoYXZlU2VsZWN0ZWQgPSBzZWxlY3RlZC5maW5kKFxyXG4gICAgICAgICAgKHNlbGMpID0+XHJcbiAgICAgICAgICAgIHNlbGMudmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PVxyXG4gICAgICAgICAgICBjYXIuZGlzcGxheVJlY29yZC52ZWhpY2xlLmNsYXNzLnRvTG93ZXJDYXNlKClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gaGF2ZVNlbGVjdGVkO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FycztcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5VHJhbnNtaXNzaW9uVHlwZShcclxuICAgIHRyYW5taXNzaW9uczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICBjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IHNlbGVjdGVkVHJhbnNtaXNzaW9uID0gdHJhbm1pc3Npb25zLmZpbmQoKHRyYW5zKSA9PiB7XHJcbiAgICAgIHJldHVybiB0cmFucy5zZWxlY3RlZDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZFRyYW5zbWlzc2lvbiAmJiBzZWxlY3RlZFRyYW5zbWlzc2lvbi52YWx1ZSAhPT0gJ1knKSB7XHJcbiAgICAgIC8vIG5vdCAnQW55J1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRyYW5zID0gY2FyLmlkZW50aWZpZXJzLnZlaFR5cGVbMl07XHJcblxyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdHJhbnMudG9Mb3dlckNhc2UoKSA9PT1cclxuICAgICAgICAgICAgc2VsZWN0ZWRUcmFuc21pc3Npb24udmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBFcnJvciBmaWx0ZXJpbmcgdHJhbnNtaXNzaW9uczogJHtlcnJvcn0gKysrYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FycztcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5QWlyY29uVHlwZShcclxuICAgIGFpcmNvbnM6IFNlbGVjdEZpbHRlcltdLFxyXG4gICAgY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEFpcmNvbiA9IGFpcmNvbnMuZmluZCgoYWMpID0+IHtcclxuICAgICAgcmV0dXJuIGFjLnNlbGVjdGVkO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkQWlyY29uICYmIHNlbGVjdGVkQWlyY29uLnZhbHVlICE9PSAnQScpIHtcclxuICAgICAgLy8gbm90ICdBbnknXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY2FycyA9IGNhcnMuZmlsdGVyKChjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYWMgPSBjYXIuaWRlbnRpZmllcnMudmVoVHlwZVszXTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBhYy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZEFpcmNvbi52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgKysrIEVycm9yIGZpbHRlcmluZyBhaXJjb25zOiAke2Vycm9yfSArKytgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYXJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0c1xyXG4gICAqIEBwYXJhbSBzZWxlY3RlZFNvcnQgLSB0aGUgc29ydCB3ZSBoYXZlIGNob3NlblxyXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gb3B0aW9uYWxseSBwYXNzIGluIHRoZSByZXN1bHRzLCBpZiBub3QgcHJvdmlkZWQgLSB1c2VzIGludGVybmFsIHJlc3VsdHMgKG5vdCBmdWxsLCB3b3VsZCBjYXVzZSBpc3N1ZXMpXHJcbiAgICovXHJcbiAgc29ydFJlc3VsdHMoXHJcbiAgICBzZWxlY3RlZFNvcnQ6IG51bWJlcixcclxuICAgIHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGxldCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgcmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWVcclxuICAgICk7XHJcbiAgICBzd2l0Y2ggKHNlbGVjdGVkU29ydCkge1xyXG4gICAgICBjYXNlIDA6IC8vIGNoZWFwZXN0XHJcbiAgICAgICAgZnVsbFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PlxyXG4gICAgICAgICAgICB0aGlzLmdldFByaWNlKGEpIC0gdGhpcy5nZXRQcmljZShiKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gZXhwZW5zaXZlXHJcbiAgICAgICAgZnVsbFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PlxyXG4gICAgICAgICAgICB0aGlzLmdldFByaWNlKGIpIC0gdGhpcy5nZXRQcmljZShhKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjogLy8gcHJlZmVycmVkIFRPRE9cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOiAvLyBicmFuZFxyXG4gICAgICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5zb3J0QnlCcmFuZChmdWxsUmVzdWx0cyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDogLy8gc2l6ZVxyXG4gICAgICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5zb3J0QnlTaXplKGZ1bGxSZXN1bHRzKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIC8vIGZhbGxiYWNrIHRvIHdoYXRldmVyIHdhcyBiZWZvcmVcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZ1bGxSZXN1bHRzKTtcclxuICAgIHJldHVybiBmdWxsUmVzdWx0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHMgZXhwZW5zaXZlXHJcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBmdWxsIHJlc3VsdHMgZnJvbSBzb3J0IHJlc3VsdHMgZnVuY3Rpb25cclxuICAgKi9cclxuXHJcbiAgc29ydEV4cGVuc2l2ZShyZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgcmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWVcclxuICAgICk7XHJcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcclxuICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PlxyXG4gICAgICAgIHRoaXMuZ2V0UHJpY2UoYikgLSB0aGlzLmdldFByaWNlKGEpXHJcbiAgICApO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkUmVzdWx0cyk7XHJcbiAgICByZXR1cm4gc29ydGVkUmVzdWx0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHMgY2hlYXBlc3RcclxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIGZ1bGwgcmVzdWx0cyBmcm9tIHNvcnQgcmVzdWx0cyBmdW5jdGlvblxyXG4gICAqL1xyXG5cclxuICBzb3J0Q2hlYXBlc3QocmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgY29uc3QgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXHJcbiAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT5cclxuICAgICAgICB0aGlzLmdldFByaWNlKGEpIC0gdGhpcy5nZXRQcmljZShiKVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHNvcnRlZFJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHNvcnRlZFJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzXHJcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBmdWxsIHJlc3VsdHMgZnJvbSBzb3J0IHJlc3VsdHMgZnVuY3Rpb25cclxuICAgKi9cclxuICBzb3J0QnlTaXplKHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICByZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICBsZXQgYVZhbDogbnVtYmVyO1xyXG4gICAgICAgIGxldCBiVmFsOiBudW1iZXI7XHJcbiAgICAgICAgYVZhbCA9IHRoaXMuY2FyQ2xhc3NNYXBbYS5kaXNwbGF5UmVjb3JkLnZlaGljbGUuY2xhc3MudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgYlZhbCA9IHRoaXMuY2FyQ2xhc3NNYXBbYi5kaXNwbGF5UmVjb3JkLnZlaGljbGUuY2xhc3MudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgaWYgKGFWYWwgPj0gMCAmJiBiVmFsID49IDApIHtcclxuICAgICAgICAgIHJldHVybiBhVmFsIC0gYlZhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0xOyAvLyBqdXN0IHBsYWNlIHRoZW0gYXQgZW5kICAtIHVucmVjb2duaXNlZCBwcm9kdWN0IGRlc2NyaXB0aW9uXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcclxuICAgIHJldHVybiBzb3J0ZWRSZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0c1xyXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gZnVsbCByZXN1bHRzIGZyb20gc29ydCByZXN1bHRzIGZ1bmN0aW9uXHJcbiAgICovXHJcbiAgc29ydEJ5QnJhbmQocmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgY29uc3QgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXHJcbiAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGxldCBicmFuZEEgPSBhLmlkZW50aWZpZXJzLnZlbmRvcjtcclxuICAgICAgICBsZXQgYnJhbmRCID0gYi5pZGVudGlmaWVycy52ZW5kb3I7XHJcblxyXG4gICAgICAgIC8vIHN3aXRjaGluZyBhcyB0aGVzZSBzdHJpbmdzIGRvbid0IG1hdGNoIHRoZSBicmFuZCBuYW1lXHJcbiAgICAgICAgc3dpdGNoIChicmFuZEEpIHtcclxuICAgICAgICAgIGNhc2UgJ1pFJzpcclxuICAgICAgICAgICAgYnJhbmRBID0gJ0hFJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdaSSc6XHJcbiAgICAgICAgICAgIGJyYW5kQSA9ICdBVic7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoIChicmFuZEIpIHtcclxuICAgICAgICAgIGNhc2UgJ1pFJzpcclxuICAgICAgICAgICAgYnJhbmRCID0gJ0hFJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdaSSc6XHJcbiAgICAgICAgICAgIGJyYW5kQiA9ICdBVic7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJyYW5kQSA8IGJyYW5kQikge1xyXG4gICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYnJhbmRBID4gYnJhbmRCKSB7XHJcbiAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHNvcnRlZFJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHNvcnRlZFJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdGhlIHByaWNlIG9mIGEgaW5kaXZpZHVhbCBjYXJcclxuICAgKi9cclxuICBnZXRQcmljZShjYXI6IENhckhpcmVRdW90ZVJlc3VsdCk6IG51bWJlciB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKGNhci5kaXNwbGF5UmVjb3JkLmNoYXJnZXNbMF0uYW1vdW50KTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxyXG5cclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWluUHJpY2UoY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGNhcnMucmVkdWNlKChtaW46IG51bWJlciwgY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLmdldFByaWNlKGNhcik7XHJcbiAgICAgIGlmIChwcmljZSA8IG1pbikge1xyXG4gICAgICAgIG1pbiA9IHByaWNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBtaW47XHJcbiAgICB9LCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XHJcbiAgfVxyXG5cclxuICBnZXRNYXhQcmljZShjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gY2Fycy5yZWR1Y2UoKG1heDogbnVtYmVyLCBjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCBwcmljZSA9IHRoaXMuZ2V0UHJpY2UoY2FyKTtcclxuICAgICAgaWYgKHByaWNlID4gbWF4KSB7XHJcbiAgICAgICAgbWF4ID0gcHJpY2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG1heDtcclxuICAgIH0sIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgZmxpZ2h0SXRlbTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMgPVxyXG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkZsaWdodF0/LnNlYXJjaFF1ZXJ5O1xyXG4gICAgaWYgKGZsaWdodEl0ZW0pIHtcclxuICAgICAgLy8gVE9ETyBmbGlnaHRzIGhhdmVuJ3QgYmVlbiBkb25lIHlldC5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUGlja3VwRGF0ZVRpbWUoKSB7XHJcbiAgICBpZiAodGhpcy5fcGlja3VwX2RhdGUgJiYgdGhpcy5fcGlja3VwX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9waWNrdXBfZGF0ZSxcclxuICAgICAgICB0aGlzLl9waWNrdXBfdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnBpY2t1cF9kYXRldGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZURyb3BvZmZEYXRlVGltZSgpIHtcclxuICAgIGlmICh0aGlzLl9kcm9wb2ZmX2RhdGUgJiYgdGhpcy5fZHJvcG9mZl90aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fZHJvcG9mZl9kYXRlLFxyXG4gICAgICAgIHRoaXMuX2Ryb3BvZmZfdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpIHtcclxuICAgIGlmICh0aGlzLl9uZ2JQaWNrdXBEYXRlICYmIHRoaXMuX3BpY2t1cFRpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9uZ2JQaWNrdXBEYXRlLFxyXG4gICAgICAgIHRoaXMuX3BpY2t1cFRpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVOZ2JEcm9wb2ZmRGF0ZVRpbWUoKSB7XHJcbiAgICBpZiAodGhpcy5fbmdiRHJvcG9mZkRhdGUgJiYgdGhpcy5fZHJvcG9mZlRpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSxcclxuICAgICAgICB0aGlzLl9kcm9wb2ZmVGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc092ZXJOaWdodCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG91dHdhcmREYXkgPSB0aGlzLnBpY2t1cF9kYXRldGltZS5kYXRlKCk7XHJcbiAgICBjb25zdCByZXR1cm5EYXkgPSB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUuZGF0ZSgpO1xyXG4gICAgaWYgKHJldHVybkRheSAtIG91dHdhcmREYXkgPj0gMSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBtaW5QcmljZSA9IHRoaXMuZ2V0TWluUHJpY2UocmVzdWx0cyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhbW91bnQ6IG1pblByaWNlLFxyXG4gICAgICBjdXJyZW5jeUNvZGU6IHJlc3VsdHNbMF0uZGlzcGxheVJlY29yZC5jaGFyZ2VzWzBdLmN1cnJlbmN5Q29kZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgYXZhaWxhYmlsaXR5IGRldGFpbHMgZm9yIGEgcGFydGljdWxhciBjYXIgaGlyZSByZXN1bHQgdXNpbmcgbG9jYXRpb25EZXRhaWxzIHBhcmFtXHJcbiAgICogQHBhcmFtIGxvY2F0aW9uRGV0YWlscyAtIGUuZy4gdGFrZW4gZnJvbSByZXNwb25zZSBkYXRhIGluIHNlYXJjaENhckhpcmUgcXVlcnlcclxuICAgKiBAcGFyYW0gaXNMb2FkaW5nIGJlaGF2aW91clN1YmplY3QgZm9yIGhhbmRsaW5nIGxvYWRpbmcgc3Bpbm5lciBzdGF0ZSBvZiByZXF1ZXN0XHJcbiAgICovXHJcbiAgZ2V0Q2FySGlyZUF2YWlsYWJpbGl0eURldGFpbChcclxuICAgIGxvY2F0aW9uRGV0YWlsczogQ2FySGlyZUlucHV0SWRlbnRpZmllcnMsXHJcbiAgICBpc0xvYWRpbmc6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8Q2FySGlyZURldGFpbFJlcXVlc3RSZXNwb25zZT4ge1xyXG4gICAgaWYgKCFpc0xvYWRpbmcudmFsdWUpIHtcclxuICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclxyXG4gICAgICAuZmV0Y2hMaXN0KHsgbG9jYXRpb25EZXRhaWxzIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHQ6IENhckhpcmVEZXRhaWxSZXF1ZXN0UmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChpc0xvYWRpbmcudmFsdWUpIHtcclxuICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gYWRkIGNhciBoaXJlIHRvIGJhc2tldFxyXG4gICAqL1xyXG4gIGFzeW5jIGFkZENhckhpcmVUb0Jhc2tldChcclxuICAgIGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5OiBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcclxuICAgIGNhckhpcmVRdWVyeTogU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoY2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHkudW5hdmFpbGFibGUpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIGRpc3BsYXlSZWNvcmQsXHJcbiAgICAgICAgaWRlbnRpZmllcnMsXHJcbiAgICAgICAgc291cmNlSWRcclxuICAgICAgfSA9IGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5O1xyXG4gICAgICBjb25zdCBwcmljZSA9IHBhcnNlRmxvYXQoZGlzcGxheVJlY29yZD8uY2hhcmdlc1swXT8uYW1vdW50ID8/ICcwJyk7XHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcclxuICAgICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgICBwaWNrVXBEYXRldGltZTogbmV3IERhdGUoZGlzcGxheVJlY29yZC5waWNrdXApLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgICAgIGRyb3BPZmZEYXRldGltZTogbmV3IERhdGUoZGlzcGxheVJlY29yZC5kcm9wb2ZmKS50b0lTT1N0cmluZygpLFxyXG4gICAgICAgICAgICBwaWNrVXBMb2NhdGlvbjoge1xyXG4gICAgICAgICAgICAgIGlhdGE6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uVHlwZSA9PT0gTG9jYXRpb25UeXBlcy5BaXJwb3J0XHJcbiAgICAgICAgICAgICAgICAgID8gaWRlbnRpZmllcnMubG9jYXRpb25Db2RlXHJcbiAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgbmFtZTogZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgIGFkZHJlc3M6IGAke2Rpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24udG9wTGluZX0sICR7ZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi5jaXR5fWAsXHJcbiAgICAgICAgICAgICAgcG9zdGNvZGU6IGRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24ucG9zdENvZGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZHJvcE9mZkxvY2F0aW9uOiB7XHJcbiAgICAgICAgICAgICAgaWF0YTpcclxuICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb25UeXBlID09PSBMb2NhdGlvblR5cGVzLkFpcnBvcnRcclxuICAgICAgICAgICAgICAgICAgPyBpZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25cclxuICAgICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICBuYW1lOiBkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgYWRkcmVzczogYCR7ZGlzcGxheVJlY29yZC5yZXR1cm5Mb2NhdGlvbi50b3BMaW5lfSwgJHtkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLmNpdHl9YCxcclxuICAgICAgICAgICAgICBwb3N0Y29kZTogZGlzcGxheVJlY29yZC5yZXR1cm5Mb2NhdGlvbi5wb3N0Q29kZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYXI6IHtcclxuICAgICAgICAgICAgICB0eXBlOiBkaXNwbGF5UmVjb3JkLnZlaGljbGUudHlwZSxcclxuICAgICAgICAgICAgICBtYW51YWxUcmFuc21pc3Npb246IGRpc3BsYXlSZWNvcmQudmVoaWNsZS50cmFuc21pc3Npb24uaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICBDYXJIaXJlVHJhbnNtaXNzaW9uLk1hbnVhbFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmVuZG9yTmFtZTogZGlzcGxheVJlY29yZC52ZW5kb3IubmFtZSxcclxuICAgICAgICAgICAgaWRlbnRpZmllcnM6IHtcclxuICAgICAgICAgICAgICBkcm9wT2ZmTG9jYXRpb246IGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbixcclxuICAgICAgICAgICAgICBsb2NhdGlvbkNvZGU6IGlkZW50aWZpZXJzLmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgICAgICBsb2NhdGlvbk5hbWU6IGlkZW50aWZpZXJzLmxvY2F0aW9uTmFtZSxcclxuICAgICAgICAgICAgICB2ZWhUeXBlOiBpZGVudGlmaWVycy52ZWhUeXBlLFxyXG4gICAgICAgICAgICAgIHZlbmRvcjogaWRlbnRpZmllcnMudmVuZG9yXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwcmljZSxcclxuICAgICAgICAgIGN1cnJlbmN5OiAnR0JQJyBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeTogY2FySGlyZVF1ZXJ5LFxyXG4gICAgICAgICAgY28yUGVySXRlbSxcclxuICAgICAgICAgIGNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICAgIG91dGJvdW5kRGF0ZTogbmV3IERhdGUoZGlzcGxheVJlY29yZC5waWNrdXApLnRvSVNPU3RyaW5nKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICB9XHJcbn1cclxuIl19
|
|
1205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHekQsT0FBTyxFQUFjLEVBQUUsRUFBbUIsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVXRFLE9BQU8sRUFRTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixXQUFXLEVBQ1gsYUFBYSxFQUdkLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQU1MLGFBQWEsRUFJZCxNQUFNLGdCQUFnQixDQUFDO0FBY3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJM0MsTUFBTSxDQUFOLElBQVksWUFNWDtBQU5ELFdBQVksWUFBWTtJQUN0QiwrQkFBZSxDQUFBO0lBQ2YsK0JBQWUsQ0FBQTtJQUNmLDZCQUFhLENBQUE7SUFDYix1Q0FBdUIsQ0FBQTtJQUN2Qix1Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBTlcsWUFBWSxLQUFaLFlBQVksUUFNdkI7QUFFRCxNQUFNLE9BQU8sdUJBSVgsU0FBUSxvQkFJUDtJQTRsQkQsaUNBQWlDO0lBRWpDLFlBQ1UsY0FBNkMsRUFDN0MsZ0NBQThFLEVBQzlFLE9BQTJCLEVBQzNCLGFBQStDLEVBQ3ZELGNBQWtDLEVBQzFCLGFBQStDO1FBRXZELEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQVBkLG1CQUFjLEdBQWQsY0FBYyxDQUErQjtRQUM3QyxxQ0FBZ0MsR0FBaEMsZ0NBQWdDLENBQThDO1FBQzlFLFlBQU8s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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2FySGlyZVNvcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLXNvcnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ2FySGlyZUZpbHRlcnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nhci1oaXJlLWZpbHRlcnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgU2VsZWN0RmlsdGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWxlY3QtZmlsdGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQ2FySGlyZURldGFpbFJlcXVlc3RSZXNwb25zZSxcclxuICBDdXJyZW5jeUNvZGUsXHJcbiAgQmFza2V0SXRlbSxcclxuICBDYXJIaXJlSW5wdXRJZGVudGlmaWVycyxcclxuICBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcclxuICBRdWVyeVNlYXJjaENhckhpcmVBcmdzLFxyXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIENhckhpcmVUcmFuc21pc3Npb24sXHJcbiAgQ2FySGlyZUNsYXNzLFxyXG4gIENhckhpcmVUeXBlLFxyXG4gIERpc3RhbmNlVHlwZXMsXHJcbiAgU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlc1xyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIENhckhpcmVRdW90ZVJlc3VsdCxcclxuICBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxyXG4gIFZlbmRvcixcclxuICBMb2NhdGlvblR5cGVzLFxyXG4gIExvY2F0aW9uRGV0YWlscyxcclxuICBDYXJIaXJlRGVwb3QsXHJcbiAgUmVjZW50U2VhcmNoXHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYXJoaXJlUXVvdGVGZXRjaGVyLFxyXG4gIENhckhpcmVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2NhcmhpcmUtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgQ2FySGlyZVRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0ljYXJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXIsXHJcbiAgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1hdmFpbGFiaWxpdHktZGV0YWlsLmZldGNoZXInO1xyXG5pbXBvcnQgeyB0YWtlLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IElDYXJDbGFzc2VzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXItaGlyZS1jbGFzc2VzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuXHJcbmV4cG9ydCBlbnVtIFNvcnRUeXBlc0NhciB7XHJcbiAgcHJpY2UgPSAncHJpY2UnLFxyXG4gIGJyYW5kID0gJ2JyYW5kJyxcclxuICBzaXplID0gJ3NpemUnLFxyXG4gIHByZWZlcnJlZCA9ICdwcmVmZXJyZWQnLFxyXG4gIGV4cGVuc2l2ZSA9ICdleHBlbnNpdmUnXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIENIX1EgZXh0ZW5kcyBDYXJIaXJlRmV0Y2hlclR5cGUsXHJcbiAgICBDSEFEX1EgZXh0ZW5kcyBDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclR5cGVcclxuICA+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIENhckhpcmVUZW1wUGFyYW1zLFxyXG4gICAgQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXksXHJcbiAgICBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIENhcmhpcmVFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXHJcbntcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdjYXJoaXJlX3BhcmFtcyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ2NhcmhpcmVfcmVzdWx0cyc7XHJcblxyXG4gIC8vICEgLSBIYXJkY29kZWQgRGF0YVxyXG4gIHByaXZhdGUgX2NhclR5cGVDb2RlczogW3N0cmluZywgc3RyaW5nLCBDYXJIaXJlVHlwZV1bXSA9IFtcclxuICAgIFsnQicsICcyLTMgRG9vcicsIENhckhpcmVUeXBlLlR3b1RvVGhyZWVEb29yXSxcclxuICAgIFsnQycsICcyLzQgRG9vcicsIENhckhpcmVUeXBlLlR3b09yRm91ckRvb3JdLFxyXG4gICAgWydEJywgJzQtNSBEb29yJywgQ2FySGlyZVR5cGUuRm91clRvRml2ZURvb3JdLFxyXG4gICAgWydXJywgJ1dhZ29uIC8gRXN0YXRlJywgQ2FySGlyZVR5cGUuV2Fnb25PckVzdGF0ZV0sXHJcbiAgICBbJ1YnLCAnUGFzc2VuZ2VyIFZhbicsIENhckhpcmVUeXBlLlBhc3NlbmdlclZhbl0sXHJcbiAgICBbJ0wnLCAnTGltb3VzaW5lJywgQ2FySGlyZVR5cGUuTGltb3VzaW5lXSxcclxuICAgIFsnUycsICdTcG9ydCcsIENhckhpcmVUeXBlLlNwb3J0XSxcclxuICAgIFsnVCcsICdDb252ZXJ0aWJsZScsIENhckhpcmVUeXBlLkNvbnZlcnRpYmxlXSxcclxuICAgIFsnRicsICdTVVYnLCBDYXJIaXJlVHlwZS5TdXZdLFxyXG4gICAgWydKJywgJ09wZW4gQWlyIEFsbCBUZXJyYWluJywgQ2FySGlyZVR5cGUuT3BlbkFpckFsbFRlcnJhaW5dLFxyXG4gICAgWydYJywgJ1NwZWNpYWwnLCBDYXJIaXJlVHlwZS5TcGVjaWFsXSxcclxuICAgIFsnUCcsICdQaWNrdXAgUmVndWxhciBDYWInLCBDYXJIaXJlVHlwZS5QaWNrVXBSZWd1bGFyQ2FiXSxcclxuICAgIFsnUScsICdQaWNrdXAgRXh0ZW5kZWQgQ2FiJywgQ2FySGlyZVR5cGUuUGlja1VwRXh0ZW5kZWRDYWJdLFxyXG4gICAgWydaJywgJ1NwZWNpYWwgT2ZmZXIgQ2FyJywgQ2FySGlyZVR5cGUuU3BlY2lhbE9mZmVyQ2FyXSxcclxuICAgIFsnRScsICdDb3VwZScsIENhckhpcmVUeXBlLkNvdXBlXSxcclxuICAgIFsnTScsICdNb25vc3BhY2UgKEV1cm9wZSknLCBDYXJIaXJlVHlwZS5Nb25vc3BhY2VFdXJvcGVhblVzZV0sXHJcbiAgICBbJ1InLCAnUmVjcmVhdGlvbmFsIFZlaGljbGUnLCBDYXJIaXJlVHlwZS5TdXZdLFxyXG4gICAgWydIJywgJ01vdG9yIEhvbWUnLCBDYXJIaXJlVHlwZS5Nb3RvckhvbWVdLFxyXG4gICAgWydZJywgJzItV2hlZWwgVmVoaWNsZScsIENhckhpcmVUeXBlLlR3b1doZWVsVmVoaWNsZV0sXHJcbiAgICBbJ04nLCAnUm9hZHN0ZXInLCBDYXJIaXJlVHlwZS5Sb2Fkc3Rlcl0sXHJcbiAgICBbJ0cnLCAnQ3Jvc3NvdmVyJywgQ2FySGlyZVR5cGUuU3V2XSxcclxuICAgIFsnSycsICdDb21tZXJjaWFsIFZhbiAvIFRydWNrJywgQ2FySGlyZVR5cGUuUGFzc2VuZ2VyVmFuXVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2NhckFpckNvbmRpdGlvblR5cGVzOiBbc3RyaW5nLCBzdHJpbmcsIGJvb2xlYW5dW10gPSBbXHJcbiAgICBbJ0FueScsICdBbnknLCBudWxsXSxcclxuICAgIFsnWScsICdZZXMnLCB0cnVlXSxcclxuICAgIFsnTicsICdObycsIGZhbHNlXVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2NhclRyYW5zbWlzc2lvbkNvZGVzOiBbc3RyaW5nLCBzdHJpbmcsIENhckhpcmVUcmFuc21pc3Npb25dW10gPSBbXHJcbiAgICBbJ00nLCAnTWFudWFsJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxyXG4gICAgWydOJywgJ01hbnVhbCA0LVdoZWVsIERyaXZlJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5NYW51YWxdLFxyXG4gICAgWydDJywgJ01hbnVhbCBBbGwtV2hlZWwgRHJpdmUnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLk1hbnVhbF0sXHJcbiAgICBbJ0EnLCAnQXV0b21hdGljJywgQ2FySGlyZVRyYW5zbWlzc2lvbi5BdXRvXSxcclxuICAgIFsnQicsICdBdXRvbWF0aWMgNC1XaGVlbCBEcml2ZScsIENhckhpcmVUcmFuc21pc3Npb24uQXV0b10sXHJcbiAgICBbJ0QnLCAnQXV0b21hdGljIEFsbC0gV2hlZWwgRHJpdmUnLCBDYXJIaXJlVHJhbnNtaXNzaW9uLkF1dG9dXHJcbiAgXTtcclxuXHJcbiAgY2FyaGlyZUNvZGVzOiBhbnk7XHJcbiAgcHJpdmF0ZSBfdmVuZG9yczogVmVuZG9yW10gPSBbXHJcbiAgICB7IGNvZGU6ICctJywgbmFtZTogJ0FueScgfSxcclxuICAgIHsgY29kZTogJ0FDJywgbmFtZTogJ0FjZSBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnQUQnLCBuYW1lOiAnQWR2YW50YWdlIFJlbnQgQSBDYXInIH0sXHJcbiAgICB7IGNvZGU6ICdBTCcsIG5hbWU6ICdBbGFtbycgfSxcclxuICAgIHsgY29kZTogJ1pJJywgbmFtZTogJ0F2aXMnIH0sXHJcbiAgICB7IGNvZGU6ICdBVCcsIG5hbWU6ICdBdGVzYScgfSxcclxuICAgIHsgY29kZTogJ1pEJywgbmFtZTogJ0J1ZGdldCBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnQ0knLCBuYW1lOiAnQ2l0ZXIgUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ1pSJywgbmFtZTogJ0RvbGxhciBSZW50IEEgQ2FyJyB9LFxyXG4gICAgeyBjb2RlOiAnREYnLCBuYW1lOiAnRHJpdmluZyBGb3JjZScgfSxcclxuICAgIHsgY29kZTogJ0VZJywgbmFtZTogJ0Vjb25vbXkgUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0VUJywgbmFtZTogJ0VudGVycHJpc2UnIH0sXHJcbiAgICB7IGNvZGU6ICdFUCcsIG5hbWU6ICdFdXJvcGNhcicgfSxcclxuICAgIHsgY29kZTogJ0lNJywgbmFtZTogJ0V1cm9wY2FyIFNvdXRoYWZyaWNhJyB9LFxyXG4gICAgeyBjb2RlOiAnRVonLCBuYW1lOiAnRXogUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0ZGJywgbmFtZTogJ0ZpcmVmbHknIH0sXHJcbiAgICB7IGNvZGU6ICdGWCcsIG5hbWU6ICdGb3ggUmVudCBBIENhcicgfSxcclxuICAgIHsgY29kZTogJ0dOJywgbmFtZTogJ0d1ZXJpbiBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnWkUnLCBuYW1lOiAnSGVydHonIH0sXHJcbiAgICB7IGNvZGU6ICdMTScsIG5hbWU6ICdMICYgTSBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnTEwnLCBuYW1lOiAnTG9jYWxpemEnIH0sXHJcbiAgICB7IGNvZGU6ICdNVycsIG5hbWU6ICdNaWR3YXkgQ2FyIFJlbnRhbCcgfSxcclxuICAgIHsgY29kZTogJ1pMJywgbmFtZTogJ05hdGlvbmFsIENhciBSZW50YWwgU3lzdGVtJyB9LFxyXG4gICAgeyBjb2RlOiAnTkMnLCBuYW1lOiAnTmV4dGNhcicgfSxcclxuICAgIHsgY29kZTogJ05VJywgbmFtZTogJ051IENhciBSZW50YWxzJyB9LFxyXG4gICAgeyBjb2RlOiAnWkEnLCBuYW1lOiAnUGF5bGVzcyBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnUFInLCBuYW1lOiAnUHJpY2VsZXNzJyB9LFxyXG4gICAgeyBjb2RlOiAnUlcnLCBuYW1lOiAnUmVudCBBIFdyZWNrJyB9LFxyXG4gICAgeyBjb2RlOiAnU1gnLCBuYW1lOiAnU2l4dCcgfSxcclxuICAgIHsgY29kZTogJ1RFJywgbmFtZTogJ1RlbXBlc3QnIH0sXHJcbiAgICB7IGNvZGU6ICdYRicsIG5hbWU6ICdUZXN0LVMgQ3Jvc3MgR2FsaWxlbycgfSxcclxuICAgIHsgY29kZTogJ1hHJywgbmFtZTogJ1Rlc3QtUyBDcm9zcyBUcm5nJyB9LFxyXG4gICAgeyBjb2RlOiAnWlQnLCBuYW1lOiAnVGhyaWZ0eSBDYXIgUmVudGFsJyB9LFxyXG4gICAgeyBjb2RlOiAnUE0nLCBuYW1lOiAnVHJhdmVscG9ydCBUZXN0IENvZGUnIH0sXHJcbiAgICB7IGNvZGU6ICdTVicsIG5hbWU6ICdVLVNhdmUgQXV0byBSZW50YWwnIH0sXHJcbiAgICB7IGNvZGU6ICdXRicsIG5hbWU6ICdXb29kZm9yZCcgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2Nhcl9jbGFzc2VzOiBJQ2FyQ2xhc3Nlc1tdID0gW1xyXG4gICAgeyBjb2RlOiAnTScsIG5hbWU6ICdNaW5pJywga2V5OiBDYXJIaXJlQ2xhc3MuTWluaSwgdmFsdWU6ICcxMCcgfSxcclxuICAgIHsgY29kZTogJ04nLCBuYW1lOiAnTWluaSBFbGl0ZScsIGtleTogQ2FySGlyZUNsYXNzLk1pbmlFbGl0ZSwgdmFsdWU6ICcyMCcgfSxcclxuICAgIHsgY29kZTogJ0UnLCBuYW1lOiAnRWNvbm9teScsIGtleTogQ2FySGlyZUNsYXNzLkVjb25vbXksIHZhbHVlOiAnMzAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdIJyxcclxuICAgICAgbmFtZTogJ0Vjb25vbXkgRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5FY29ub215RWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnNDAnXHJcbiAgICB9LFxyXG4gICAgeyBjb2RlOiAnQycsIG5hbWU6ICdDb21wYWN0Jywga2V5OiBDYXJIaXJlQ2xhc3MuQ29tcGFjdCwgdmFsdWU6ICc1MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ0QnLFxyXG4gICAgICBuYW1lOiAnQ29tcGFjdCBFbGl0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkNvbXBhY3RFbGl0ZSxcclxuICAgICAgdmFsdWU6ICc2MCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdJJyxcclxuICAgICAgbmFtZTogJ0ludGVybWVkaWF0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkludGVybWVkaWF0ZSxcclxuICAgICAgdmFsdWU6ICc3MCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdKJyxcclxuICAgICAgbmFtZTogJ0ludGVybWVkaWF0ZSBFbGl0ZScsXHJcbiAgICAgIGtleTogQ2FySGlyZUNsYXNzLkludGVybWVkaWF0ZUVsaXRlLFxyXG4gICAgICB2YWx1ZTogJzgwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ1MnLCBuYW1lOiAnU3RhbmRhcmQnLCBrZXk6IENhckhpcmVDbGFzcy5TdGFuZGFyZCwgdmFsdWU6ICc5MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ1InLFxyXG4gICAgICBuYW1lOiAnU3RhbmRhcmQgRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5TdGFuZGFyZEVsaXRlLFxyXG4gICAgICB2YWx1ZTogJzEwMCdcclxuICAgIH0sXHJcbiAgICB7IGNvZGU6ICdGJywgbmFtZTogJ0Z1bGwgU2l6ZScsIGtleTogQ2FySGlyZUNsYXNzLkZ1bGxzaXplLCB2YWx1ZTogJzExMCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ0cnLFxyXG4gICAgICBuYW1lOiAnRnVsbCBTaXplIEVsaXRlJyxcclxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuRnVsbHNpemVFbGl0ZSxcclxuICAgICAgdmFsdWU6ICcxMjAnXHJcbiAgICB9LFxyXG4gICAgeyBjb2RlOiAnUCcsIG5hbWU6ICdQcmVtaXVtJywga2V5OiBDYXJIaXJlQ2xhc3MuUHJlbWl1bSwgdmFsdWU6ICcxMzAnIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdVJyxcclxuICAgICAgbmFtZTogJ1ByZW1pdW0gRWxpdGUnLFxyXG4gICAgICBrZXk6IENhckhpcmVDbGFzcy5QcmVtaXVtRWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnMTQwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ0wnLCBuYW1lOiAnTHV4dXJ5Jywga2V5OiBDYXJIaXJlQ2xhc3MuTHV4dXJ5LCB2YWx1ZTogJzE1MCcgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ1cnLFxyXG4gICAgICBuYW1lOiAnTHV4dXJ5IEVsaXRlJyxcclxuICAgICAga2V5OiBDYXJIaXJlQ2xhc3MuTHV4dXJ5RWxpdGUsXHJcbiAgICAgIHZhbHVlOiAnMTYwJ1xyXG4gICAgfSxcclxuICAgIHsgY29kZTogJ08nLCBuYW1lOiAnT3ZlcnNpemUnLCBrZXk6IENhckhpcmVDbGFzcy5PdmVyc2l6ZSwgdmFsdWU6ICcxNzAnIH0sXHJcbiAgICB7IGNvZGU6ICdYJywgbmFtZTogJ1NwZWNpYWwnLCBrZXk6IENhckhpcmVDbGFzcy5TcGVjaWFsLCB2YWx1ZTogJzE4MCcgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2xvY2F0aW9uX3R5cGVzID0gW1xyXG4gICAgTG9jYXRpb25UeXBlcy5DaXR5LFxyXG4gICAgTG9jYXRpb25UeXBlcy5BaXJwb3J0LFxyXG4gICAgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgY2FyQ2xhc3NNYXA6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7XHJcbiAgICBtaW5pOiAwLFxyXG4gICAgJ21pbmkgZWxpdGUnOiAxLFxyXG4gICAgZWNvbm9teTogMixcclxuICAgICdlY29ub215IGVsaXRlJzogMyxcclxuICAgIGNvbXBhY3Q6IDQsXHJcbiAgICAnY29tcGFjdCBzcGVjaWFsJzogNSxcclxuICAgICdjb21wYWN0IGVsaXRlJzogNixcclxuICAgIGludGVybWVkaWF0ZTogNyxcclxuICAgICdpbnRlcm1lZGlhdGUgZWxpdGUnOiA4LFxyXG4gICAgc3RhbmRhcmQ6IDksXHJcbiAgICAnc3RhbmRhcmQgZWxpdGUnOiAxMCxcclxuICAgICdmdWxsIHNpemUnOiAxMSxcclxuICAgICdmdWxsIHNpemUgZWxpdGUnOiAxMixcclxuICAgIHByZW1pdW06IDEzLFxyXG4gICAgJ3ByZW1pdW0gZWxpdGUnOiAxNCxcclxuICAgIGx1eHVyeTogMTUsXHJcbiAgICAnbHV4dXJ5IGVsaXRlJzogMTYsXHJcbiAgICBvdmVyc2l6ZTogMTcsXHJcbiAgICBzcGVjaWFsOiAxOFxyXG4gIH07XHJcbiAgLy8gISAtIEVuZCBvZiBoYXJkY29kZWQgZGF0YVxyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5DYXI7XHJcblxyXG4gIHByaXZhdGUgX25nYlBpY2t1cERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHJpdmF0ZSBfcGlja3VwVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX25nYkRyb3BvZmZEYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX2Ryb3BvZmZUaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfc29ydGluZ19vcHRpb25zOiBDYXJIaXJlU29ydFtdID0gW1xyXG4gICAge1xyXG4gICAgICB2YWx1ZTogMCxcclxuICAgICAgZGlzcGxheTogJ0NoZWFwZXN0IEZpcnN0J1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdmFsdWU6IDEsXHJcbiAgICAgIGRpc3BsYXk6ICdNb3N0IEV4cGVuc2l2ZSBGaXJzdCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHZhbHVlOiAyLFxyXG4gICAgICBkaXNwbGF5OiAnUHJlZmVycmVkIEZpcnN0J1xyXG4gICAgfVxyXG4gIF07XHJcbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfbWluSW5EYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKClcclxuICB9O1xyXG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdO1xyXG5cclxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVzdGltYXRlZE1pbGVhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZXN0aW1hdGVkTWlsZWFnZTtcclxuICB9XHJcblxyXG4gIHNldCBlc3RpbWF0ZWRNaWxlYWdlKG1pbGFnZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZXN0aW1hdGVkTWlsZWFnZSA9IG1pbGFnZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwaWNrdXBUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGlja3VwVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBwaWNrdXBUaW1lKG5ld3RpbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGlja3VwVGltZSA9IG5ld3RpbWU7XHJcbiAgICB0aGlzLl91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRyb3BvZmZUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHJvcG9mZlRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZlRpbWUobmV3dGltZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9kcm9wb2ZmVGltZSA9IG5ld3RpbWU7XHJcbiAgICB0aGlzLl91cGRhdGVOZ2JEcm9wb2ZmRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCBwb3N0Y29kZVBpY2t1cFJhdygpOiBMb2NhdGlvbkRldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cFJhdztcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZVBpY2t1cFJhdyhuZXdQaWNrdXBDb3VudHJ5OiBMb2NhdGlvbkRldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cFJhdyA9IG5ld1BpY2t1cENvdW50cnk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcG9zdGNvZGVEcm9wb2ZmUmF3KCk6IExvY2F0aW9uRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlRHJvcG9mZlJhdztcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZURyb3BvZmZSYXcobmV3UGlja3VwQ291bnRyeTogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVEcm9wb2ZmUmF3ID0gbmV3UGlja3VwQ291bnRyeTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaXR5UGlja3VwRGVwb3QoKTogQ2FySGlyZURlcG90IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cERlcG90O1xyXG4gIH1cclxuXHJcbiAgc2V0IGNpdHlQaWNrdXBEZXBvdChuZXdQaWNrdXBDb3VudHJ5OiBDYXJIaXJlRGVwb3QpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaXR5UGlja3VwRGVwb3QgPSBuZXdQaWNrdXBDb3VudHJ5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNpdHlEcm9wb2ZmRGVwb3QoKTogQ2FySGlyZURlcG90IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmZEZXBvdDtcclxuICB9XHJcblxyXG4gIHNldCBjaXR5RHJvcG9mZkRlcG90KG5ld1Bvc3RDb2RlRHJvcG9mZjogQ2FySGlyZURlcG90KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmZEZXBvdCA9IG5ld1Bvc3RDb2RlRHJvcG9mZjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwb3N0Y29kZVBpY2t1cCgpOiBDYXJIaXJlRGVwb3Qge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cDtcclxuICB9XHJcblxyXG4gIHNldCBwb3N0Y29kZVBpY2t1cChuZXdQaWNrdXBDb3VudHJ5OiBDYXJIaXJlRGVwb3QpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZVBpY2t1cCA9IG5ld1BpY2t1cENvdW50cnk7XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLnBvc3Rjb2RlUGlja3VwKSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvblR5cGUgPSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBvc3Rjb2RlRHJvcG9mZigpOiBDYXJIaXJlRGVwb3Qge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wb3N0Y29kZURyb3BvZmY7XHJcbiAgfVxyXG5cclxuICBzZXQgcG9zdGNvZGVEcm9wb2ZmKG5ld1Bvc3RDb2RlRHJvcG9mZjogQ2FySGlyZURlcG90KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucG9zdGNvZGVEcm9wb2ZmID0gbmV3UG9zdENvZGVEcm9wb2ZmO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNpdHlQaWNrdXAoKTogTG9jYXRpb25EZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cDtcclxuICB9XHJcblxyXG4gIHNldCBjaXR5UGlja3VwKG5ld1BpY2t1cDogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cCA9IG5ld1BpY2t1cDtcclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuY2l0eVBpY2t1cCkge1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5DaXR5O1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2l0eURyb3BvZmYoKTogTG9jYXRpb25EZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmY7XHJcbiAgfVxyXG5cclxuICBzZXQgY2l0eURyb3BvZmYobmV3RHJvcG9mZjogTG9jYXRpb25EZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2l0eURyb3BvZmYgPSBuZXdEcm9wb2ZmO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1pbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcclxuICB9XHJcblxyXG4gIGdldCBtaW5JbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluSW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXk8c3RyaW5nPltdO1xyXG4gIC8vIC0gR2V0dGVycyBBbmQgU2V0dGVycyBGb3IgVmFyaW91cyBWYXJpYWJsZXNcclxuICBnZXQgcGlja3VwX2NvdW50cnkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2NvdW50cnk7XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2NvdW50cnkobmV3UGlja3VwQ291bnRyeTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2NvdW50cnkgPSBuZXdQaWNrdXBDb3VudHJ5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRyb3BvZmZfY291bnRyeSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2NvdW50cnk7XHJcbiAgfVxyXG5cclxuICBzZXQgZHJvcG9mZl9jb3VudHJ5KG5ld0Ryb3BvZmZDb3VudHJ5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2NvdW50cnkgPSBuZXdEcm9wb2ZmQ291bnRyeTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwaWNrdXBfbG9jYXRpb24oKTogT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfbG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2xvY2F0aW9uKHBpY2t1cExvY2F0aW9uOiBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnBpY2t1cF9sb2NhdGlvbiA9IHBpY2t1cExvY2F0aW9uO1xyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5waWNrdXBfbG9jYXRpb24pIHtcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuQWlycG9ydDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXR1cm5fdG9fcGlja3VwKSB7XHJcbiAgICAgIHRoaXMuZHJvcG9mZl9sb2NhdGlvbiA9IHBpY2t1cExvY2F0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBkcm9wb2ZmX2xvY2F0aW9uKCk6IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9sb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBkcm9wb2ZmX2xvY2F0aW9uKGRyb3BPZmZMb2NhdGlvbjogT0JUQWlycG9ydERldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2xvY2F0aW9uID0gZHJvcE9mZkxvY2F0aW9uO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5nYlBpY2t1cERhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX25nYlBpY2t1cERhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU5nYlBpY2t1cERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmdiUGlja3VwRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9uZ2JQaWNrdXBEYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5nYkRyb3BvZmZEYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlTmdiRHJvcG9mZkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmdiRHJvcG9mZkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmdiRHJvcG9mZkRhdGU7XHJcbiAgfVxyXG5cclxuICAvLyBEYXRldGltZXMgd2l0aGluIHRoZSBxdWVyeSBpdHNlbGZcclxuICBnZXQgcGlja3VwX2RhdGV0aW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5waWNrdXBfZGF0ZXRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgcGlja3VwX2RhdGV0aW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucGlja3VwX2RhdGV0aW1lID0gdmFsdWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgdGhpcy5fbmdiUGlja3VwRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5fcGlja3VwVGltZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpXHJcbiAgICAgICAgICA/IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpXHJcbiAgICAgICAgICA6ICcwNzozMCc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbWluSW5EYXRlID0ge1xyXG4gICAgICAgIGRheTogdmFsdWUuZGF0ZSgpLFxyXG4gICAgICAgIG1vbnRoOiB2YWx1ZS5tb250aCgpICsgMSxcclxuICAgICAgICB5ZWFyOiB2YWx1ZS55ZWFyKClcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZS5pc1NhbWVPckFmdGVyKHRoaXMudGVtcFBhcmFtcy5kcm9wb2ZmX2RhdGV0aW1lKSkge1xyXG4gICAgICAgIHRoaXMuZHJvcG9mZl9kYXRldGltZSA9IHRoaXMuZHJvcG9mZl9kYXRldGltZVxyXG4gICAgICAgICAgLnNldCgnZGF0ZScsIHZhbHVlLmRhdGUoKSlcclxuICAgICAgICAgIC5zZXQoJ21vbnRoJywgdmFsdWUubW9udGgoKSlcclxuICAgICAgICAgIC5zZXQoJ3llYXInLCB2YWx1ZS55ZWFyKCkpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge31cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZHJvcG9mZl9kYXRldGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9kYXRldGltZTtcclxuICB9XHJcblxyXG4gIHNldCBkcm9wb2ZmX2RhdGV0aW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZHJvcG9mZl9kYXRldGltZSA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuX2Ryb3BvZmZUaW1lID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ0hIOm1tJylcclxuICAgICAgICA/IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbScpXHJcbiAgICAgICAgOiAnMDg6MzAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gIWRhdGUgYW5kIHRpbWUgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgTFVcclxuICBwcml2YXRlIF9waWNrdXBfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBwaWNrdXBfZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9waWNrdXBfZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBwaWNrdXBfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fcGlja3VwX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVBpY2t1cERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9waWNrdXBfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgcGlja3VwX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9waWNrdXBfdGltZTtcclxuICB9XHJcblxyXG4gIHNldCBwaWNrdXBfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9waWNrdXBfdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUGlja3VwRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Ryb3BvZmZfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBkcm9wb2ZmX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHJvcG9mZl9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRyb3BvZmZfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fZHJvcG9mZl9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVEcm9wb2ZmRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Ryb3BvZmZfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgZHJvcG9mZl90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHJvcG9mZl90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRyb3BvZmZfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9kcm9wb2ZmX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZURyb3BvZmZEYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldHVybl90b19waWNrdXAoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybl90b19waWNrdXA7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuX3RvX3BpY2t1cChuZXdWYWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5fdG9fcGlja3VwID0gbmV3VmFsO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblZlbmRvcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5WZW5kb3I7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuVmVuZG9yKG5ld1ZlbmRvcjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuVmVuZG9yID0gbmV3VmVuZG9yO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhckNsYXNzKCk6IENhckhpcmVDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhckNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhckNsYXNzKGNhckNsYXNzOiBDYXJIaXJlQ2xhc3MpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jYXJDbGFzcyA9IGNhckNsYXNzO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhclR5cGUoKTogQ2FySGlyZVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYXJUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhclR5cGUodHlwZTogQ2FySGlyZVR5cGUpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jYXJUeXBlID0gdHlwZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmFuc21pc3Npb24oKTogQ2FySGlyZVRyYW5zbWlzc2lvbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRyYW5zbWlzc2lvbjtcclxuICB9XHJcblxyXG4gIHNldCB0cmFuc21pc3Npb24odHJhbnM6IENhckhpcmVUcmFuc21pc3Npb24pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc21pc3Npb24gPSB0cmFucztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBhaXJDb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFpckNvbjtcclxuICB9XHJcblxyXG4gIHNldCBhaXJDb24obmV3Q29uOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWlyQ29uID0gbmV3Q29uO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxvY2F0aW9uVHlwZSgpOiBMb2NhdGlvblR5cGVzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlO1xyXG4gIH1cclxuICBzZXQgbG9jYXRpb25UeXBlKHZhbHVlOiBMb2NhdGlvblR5cGVzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25UeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg5NilcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICAvLyAhIC0gVGhlIGJlbG93IHZhbHVlcyBoYXZlIGdldHRlcnMgb25seSAoSS5FIENhbm5vdCBtb2RpZnkpXHJcblxyXG4gIGdldCBjYXJBaXJDb25kaXRpb25UeXBlcygpOiBbc3RyaW5nLCBzdHJpbmcsIGJvb2xlYW5dW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhckFpckNvbmRpdGlvblR5cGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhclRyYW5zbWlzc2lvbkNvZGVzKCk6IFtzdHJpbmcsIHN0cmluZywgQ2FySGlyZVRyYW5zbWlzc2lvbl1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FyVHJhbnNtaXNzaW9uQ29kZXM7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FyVHlwZUNvZGVzKCk6IFtzdHJpbmcsIHN0cmluZywgQ2FySGlyZVR5cGVdW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhclR5cGVDb2RlcztcclxuICB9XHJcblxyXG4gIGdldCB2ZW5kb3JzKCk6IFZlbmRvcltdIHtcclxuICAgIHJldHVybiB0aGlzLl92ZW5kb3JzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNvcnRpbmdPcHRpb25zKCk6IENhckhpcmVTb3J0W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRpbmdfb3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8vICEgLSBFbmQgb2YgZ2V0dGVycyBhbmQgc2V0dGVyc1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2FyaGlyZWZldGNoZXI6IEJhc2VDYXJoaXJlUXVvdGVGZXRjaGVyPENIX1E+LFxyXG4gICAgcHJpdmF0ZSBjYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjogQmFzZUNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyPENIQURfUT4sXHJcbiAgICBwcml2YXRlIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UpO1xyXG4gICAgY29uc3QgZGF0YToge1xyXG4gICAgICB0ZW1wUGFyYW1zOiBDYXJIaXJlVGVtcFBhcmFtcztcclxuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShcclxuICAgICAgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgKSB8fCB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIENhckhpcmVUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VDYXJIaXJlUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XHJcblxyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5DYXJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHRzID1cclxuICAgICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8Q2FySGlyZVF1b3RlUmVzdWx0QXJyYXk+KFxyXG4gICAgICAgIHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lXHJcbiAgICAgICkgfHwgW107XHJcblxyXG4gICAgdGhpcy5mdWxsUmVzdWx0cyA9IGhlbHBlcnMuY2xvbmUocmVzdWx0cyB8fCBbXSk7XHJcbiAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPSBDYXJoaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuXHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlQ2FySGlyZVF1ZXJ5KCkpO1xyXG4gICAgdGhpcy5lc3RpbWF0ZWRNaWxlYWdlID0gbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAge1xyXG4gICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtc1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIC8vIGdvIG92ZXIgYW5kIGNoZWNrIHRoYXQgYWxsIG9mIHRoZSB2YXJpb3VzIHZhcmlhYmxlcyBhcmUgY29ycmVjdFxyXG5cclxuICAgIC8vIGZpcnN0IG9mIGFsbCBjaGVjayB0aGF0IHdlIGhhdmUgYSB2YWxpZCBsb2NhdGlvblxyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMubG9jYXRpb25UeXBlKSB7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5BaXJwb3J0OlxyXG4gICAgICAgIGlmICghdGhpcy5waWNrdXBfbG9jYXRpb24gfHwgIXRoaXMucGlja3VwX2xvY2F0aW9uLmRlc3RpbmF0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgcGlja3VwIGxvY2F0aW9uJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZHJvcG9mZl9sb2NhdGlvbiB8fCAhdGhpcy5kcm9wb2ZmX2xvY2F0aW9uLmRlc3RpbmF0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcG9mZiBsb2NhdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XHJcbiAgICAgICAgaWYgKCF0aGlzLmNpdHlQaWNrdXApIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBwaWNrdXAgY2l0eScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNpdHlEcm9wb2ZmKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcG9mZiBjaXR5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExvY2F0aW9uVHlwZXMuUG9zdGNvZGU6XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvc3Rjb2RlUGlja3VwKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgcGlja3VwIGRlcG90Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucG9zdGNvZGVEcm9wb2ZmKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc3VwcGx5IGEgZHJvcG9mZiBkZXBvdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5lc3RpbWF0ZWRNaWxlYWdlICYmIHRoaXMuZXN0aW1hdGVkTWlsZWFnZSA8PSAwKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgJ0VzdGltYXRlZCBNaWxhZ2UgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLnBpY2t1cF9kYXRldGltZSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBwaWNrdXAgdGltZSBhbmQgZGF0ZScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZHJvcG9mZl9kYXRldGltZSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzdXBwbHkgYSBkcm9wIG9mZiB0aW1lIGFuZCBkYXRlJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWU/LmlzU2FtZU9yQmVmb3JlKHRoaXMucGlja3VwX2RhdGV0aW1lLCAnbWludXRlJylcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdEcm9wb2ZmIGRhdGUvdGltZSBjYW5ub3QgYmUgYmVmb3JlIG9yIHRoZSBzYW1lIGFzIHBpY2t1cCBkYXRlL3RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGlja3VwX2RhdGV0aW1lPy5pc0JlZm9yZShtb21lbnQoKSkpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ1BpY2t1cCBkYXRlL3RpbWUgbXVzdCBiZSBhZnRlciBwcmVzZW50IGRhdGUvdGltZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5kcm9wb2ZmX2RhdGV0aW1lPy5pc0JlZm9yZShtb21lbnQoKSkpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ0Ryb3BvZmYgZGF0ZS90aW1lIG11c3QgYmUgYWZ0ZXIgcHJlc2VudCBkYXRlL3RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XHJcblxyXG4gICAgdGhpcy5pc1ZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcclxuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKFxyXG4gICAgICAgIHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkodGhpcy5nZXRTZWFyY2hRdWVyeSgpKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgdGhpcy5jYXJoaXJlZmV0Y2hlci5mZXRjaExpc3QoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYXJIaXJlQXJncz4ocXVlcnkpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBRdWVyeVNlYXJjaENhckhpcmVBcmdzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBhbnkgPSBxdWVyeTtcclxuICAgIHN3aXRjaCAodGhpcy5sb2NhdGlvblR5cGUpIHtcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkNpdHk6XHJcbiAgICAgICAgcmVjZW50U2VhcmNoUXVlcnkuY2l0eSA9IHtcclxuICAgICAgICAgIHBpY2t1cE5hbWU6IHRoaXMuY2l0eVBpY2t1cC5uYW1lLFxyXG4gICAgICAgICAgcGlja3VwQ291bnRyeUNvZGU6IHRoaXMuY2l0eVBpY2t1cC5jb3VudHJ5Q29kZSxcclxuICAgICAgICAgIHBpY2t1cENpdHk6IHRoaXMuY2l0eVBpY2t1cC5pZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgcGlja3VwTGF0aXR1ZGU6IHRoaXMuY2l0eVBpY2t1cC5sYXRpdHVkZSxcclxuICAgICAgICAgIHBpY2t1cExvbmdpdHVkZTogdGhpcy5jaXR5UGlja3VwLmxvbmdpdHVkZSxcclxuXHJcbiAgICAgICAgICBkcm9wT2ZmTmFtZTogdGhpcy5jaXR5RHJvcG9mZi5uYW1lLFxyXG4gICAgICAgICAgZHJvcG9mZkNvdW50cnlDb2RlOiB0aGlzLmNpdHlEcm9wb2ZmLmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgZHJvcG9mZkNpdHk6IHRoaXMuY2l0eURyb3BvZmYuaWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgIGRyb3BPZmZMYXRpdHVkZTogdGhpcy5jaXR5RHJvcG9mZi5sYXRpdHVkZSxcclxuICAgICAgICAgIGRyb3BPZmZMb25naXR1ZGU6IHRoaXMuY2l0eURyb3BvZmYubG9uZ2l0dWRlLFxyXG5cclxuICAgICAgICAgIHBpY2t1cEFkZHJlc3NMaW5lczogdGhpcy5jaXR5UGlja3VwRGVwb3QuYWRkcmVzc0xpbmVzWzBdLFxyXG4gICAgICAgICAgcGlja3VwQ2l0eU5hbWU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmNpdHlOYW1lLFxyXG4gICAgICAgICAgcGlja3VwRXh0ZW5kZWRMb2NhdGlvbkNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LmV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlQaWNrdXBEZXBvdC5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBWZW5kb3I6IHRoaXMuY2l0eVBpY2t1cERlcG90LnZlbmRvcixcclxuICAgICAgICAgIHBpY2t1cFZlbmRvckNvZGU6IHRoaXMuY2l0eVBpY2t1cERlcG90LnZlbmRvckNvZGUsXHJcblxyXG4gICAgICAgICAgZHJvcE9mZkFkZHJlc3NMaW5lczogdGhpcy5jaXR5RHJvcG9mZkRlcG90LmFkZHJlc3NMaW5lc1swXSxcclxuICAgICAgICAgIGRyb3BPZmZDaXR5TmFtZTogdGhpcy5jaXR5RHJvcG9mZkRlcG90LmNpdHlOYW1lLFxyXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgICAgICB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QuZXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBkcm9wT2ZmTG9jYXRpb25Db2RlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZlZlbmRvcjogdGhpcy5jaXR5RHJvcG9mZkRlcG90LnZlbmRvcixcclxuICAgICAgICAgIGRyb3BPZmZWZW5kb3JDb2RlOiB0aGlzLmNpdHlEcm9wb2ZmRGVwb3QudmVuZG9yQ29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5Qb3N0Y29kZTpcclxuICAgICAgICByZWNlbnRTZWFyY2hRdWVyeS5kZXBvdCA9IHtcclxuICAgICAgICAgIHZlbmRvckNvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXAudmVuZG9yQ29kZSxcclxuICAgICAgICAgIHBpY2t1cExvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5sb2NhdGlvbkNvZGUsXHJcbiAgICAgICAgICBwaWNrdXBFeHRlbmRlZExvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5leHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cEFkZHJlc3NMaW5lczogdGhpcy5wb3N0Y29kZVBpY2t1cC5hZGRyZXNzTGluZXNbMF0sXHJcbiAgICAgICAgICBwaWNrdXBDaXR5TmFtZTogdGhpcy5wb3N0Y29kZVBpY2t1cC5jaXR5TmFtZSxcclxuICAgICAgICAgIHBpY2t1cFZlbmRvcjogdGhpcy5wb3N0Y29kZVBpY2t1cC52ZW5kb3IsXHJcblxyXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZURyb3BvZmYubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgICAgICB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5leHRlbmRlZExvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIGRyb3BvZmZBZGRyZXNzTGluZXM6IHRoaXMucG9zdGNvZGVEcm9wb2ZmLmFkZHJlc3NMaW5lc1swXSxcclxuICAgICAgICAgIGRyb3BvZmZDaXR5TmFtZTogdGhpcy5wb3N0Y29kZURyb3BvZmYuY2l0eU5hbWUsXHJcbiAgICAgICAgICBkcm9wb2ZmVmVuZG9yOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi52ZW5kb3IsXHJcblxyXG4gICAgICAgICAgcGlja3VwUG9zdENvZGU6IHRoaXMucG9zdGNvZGVQaWNrdXBSYXcubmFtZSxcclxuICAgICAgICAgIHBpY2t1cExhdGl0dWRlOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3LmxhdGl0dWRlLFxyXG4gICAgICAgICAgcGlja3VwTG9uZ2l0dWRlOiB0aGlzLnBvc3Rjb2RlUGlja3VwUmF3LmxvbmdpdHVkZSxcclxuXHJcbiAgICAgICAgICBkcm9wb2ZmUG9zdENvZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3Lm5hbWUsXHJcbiAgICAgICAgICBkcm9wb2ZmTGF0aXR1ZGU6IHRoaXMucG9zdGNvZGVEcm9wb2ZmUmF3LmxhdGl0dWRlLFxyXG4gICAgICAgICAgZHJvcG9mZkxvbmdpdHVkZTogdGhpcy5wb3N0Y29kZURyb3BvZmZSYXcubG9uZ2l0dWRlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuQ2FyLFxyXG4gICAgICBzZWFyY2hBcmdzOiByZWNlbnRTZWFyY2hRdWVyeSxcclxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5waWNrdXBfZGF0ZXRpbWUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaG9zZW5WZW5kb3IgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52ZW5kb3I7XHJcbiAgICB0aGlzLmNhckNsYXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2xhc3M7XHJcbiAgICB0aGlzLmNhclR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50eXBlO1xyXG4gICAgdGhpcy50cmFuc21pc3Npb24gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmFuc21pc3Npb247XHJcbiAgICB0aGlzLmFpckNvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmFpcmNvbjtcclxuICAgIHRoaXMuZXN0aW1hdGVkTWlsZWFnZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmVzdGltYXRlZERhaWx5RGlzdGFuY2U7XHJcbiAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZHJvcG9mZkRhdGVUaW1lKTtcclxuICAgIHRoaXMucGlja3VwX2RhdGV0aW1lID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnBpY2t1cERhdGVUaW1lKTtcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eSkge1xyXG4gICAgICB0aGlzLmdldFBhcmFtc0ZvckNhcmJ5Q2l0eShyZWNlbnRTZWFyY2gpO1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5haXJwb3J0KSB7XHJcbiAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlBaXJwb3J0KHJlY2VudFNlYXJjaCk7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90KSB7XHJcbiAgICAgIHRoaXMuZ2V0UGFyYW1zRm9yQ2FyYnlQb3N0Q29kZShyZWNlbnRTZWFyY2gpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJhbXNGb3JDYXJieUFpcnBvcnQocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5BaXJwb3J0O1xyXG4gICAgY29tYmluZUxhdGVzdChbXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmFpcnBvcnQucGlja3VwQ29kZVxyXG4gICAgICApLFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5haXJwb3J0LmRyb3BvZmZDb2RlXHJcbiAgICAgIClcclxuICAgIF0pLnN1YnNjcmliZSgoW2RlcGFydExvY2F0aW9uLCBhcnJpdmVMb2NhdGlvbl0pID0+IHtcclxuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2xvY2F0aW9uID0ge1xyXG4gICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxyXG4gICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXHJcbiAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKFxyXG4gICAgICAgICAgICBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gudGVybWluYWxzXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgY291bnRyeUNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5waWNrdXBfbG9jYXRpb24gPSB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgIGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5kcm9wb2ZmX2NvdW50cnkgPSB0aGlzLmRyb3BvZmZfbG9jYXRpb24uY291bnRyeUNvZGU7XHJcbiAgICAgICAgdGhpcy5waWNrdXBfY291bnRyeSA9IHRoaXMucGlja3VwX2xvY2F0aW9uLmNvdW50cnlDb2RlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJhbXNGb3JDYXJieUNpdHkocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMubG9jYXRpb25UeXBlID0gTG9jYXRpb25UeXBlcy5DaXR5O1xyXG5cclxuICAgIHRoaXMuY2l0eVBpY2t1cCA9IHtcclxuICAgICAgY291bnRyeUNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwQ291bnRyeUNvZGUsXHJcbiAgICAgIGlkOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cENpdHksXHJcbiAgICAgIG5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwTmFtZSxcclxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5LFxyXG4gICAgICBsYXRpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBMYXRpdHVkZSxcclxuICAgICAgbG9uZ2l0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LnBpY2t1cExvbmdpdHVkZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNpdHlEcm9wb2ZmID0ge1xyXG4gICAgICBjb3VudHJ5Q29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wb2ZmQ291bnRyeUNvZGUsXHJcbiAgICAgIGlkOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BvZmZDaXR5LFxyXG4gICAgICBuYW1lOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZOYW1lLFxyXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXHJcbiAgICAgIGxhdGl0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZMYXRpdHVkZSxcclxuICAgICAgbG9uZ2l0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZMb25naXR1ZGVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jaXR5RHJvcG9mZkRlcG90ID0ge1xyXG4gICAgICBhZGRyZXNzTGluZXM6IFtyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZBZGRyZXNzTGluZXNdLFxyXG4gICAgICBjaXR5TmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5kcm9wT2ZmQ2l0eU5hbWUsXHJcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZkxvY2F0aW9uQ29kZSxcclxuICAgICAgdmVuZG9yOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jaXR5LmRyb3BPZmZWZW5kb3IsXHJcbiAgICAgIHZlbmRvckNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkuZHJvcE9mZlZlbmRvckNvZGVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jaXR5UGlja3VwRGVwb3QgPSB7XHJcbiAgICAgIGFkZHJlc3NMaW5lczogW3JlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwQWRkcmVzc0xpbmVzXSxcclxuICAgICAgY2l0eU5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwQ2l0eU5hbWUsXHJcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwRXh0ZW5kZWRMb2NhdGlvbkNvZGUsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBMb2NhdGlvbkNvZGUsXHJcbiAgICAgIHZlbmRvcjogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2l0eS5waWNrdXBWZW5kb3IsXHJcbiAgICAgIHZlbmRvckNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNpdHkucGlja3VwVmVuZG9yQ29kZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJhbXNGb3JDYXJieVBvc3RDb2RlKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvY2F0aW9uVHlwZSA9IExvY2F0aW9uVHlwZXMuUG9zdGNvZGU7XHJcbiAgICB0aGlzLnBvc3Rjb2RlRHJvcG9mZiA9IHtcclxuICAgICAgYWRkcmVzc0xpbmVzOiBbcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcG9mZkFkZHJlc3NMaW5lc10sXHJcbiAgICAgIHZlbmRvckNvZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnZlbmRvckNvZGUsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcE9mZkxvY2F0aW9uQ29kZSxcclxuICAgICAgZXh0ZW5kZWRMb2NhdGlvbkNvZGU6XHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICBjaXR5TmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QuZHJvcG9mZkNpdHlOYW1lLFxyXG4gICAgICB2ZW5kb3I6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BvZmZWZW5kb3JcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wb3N0Y29kZURyb3BvZmZSYXcgPSB7XHJcbiAgICAgIG5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BvZmZQb3N0Q29kZSxcclxuICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcclxuICAgICAgbGF0aXR1ZGU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LmRyb3BvZmZMYXRpdHVkZSxcclxuICAgICAgbG9uZ2l0dWRlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5kcm9wb2ZmTG9uZ2l0dWRlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5wb3N0Y29kZVBpY2t1cCA9IHtcclxuICAgICAgYWRkcmVzc0xpbmVzOiBbcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwQWRkcmVzc0xpbmVzXSxcclxuICAgICAgdmVuZG9yQ29kZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QudmVuZG9yQ29kZSxcclxuICAgICAgbG9jYXRpb25Db2RlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBvdC5waWNrdXBMb2NhdGlvbkNvZGUsXHJcbiAgICAgIGV4dGVuZGVkTG9jYXRpb25Db2RlOlxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICBjaXR5TmFtZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwQ2l0eU5hbWUsXHJcbiAgICAgIHZlbmRvcjogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwVmVuZG9yXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucG9zdGNvZGVQaWNrdXBSYXcgPSB7XHJcbiAgICAgIG5hbWU6IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlcG90LnBpY2t1cFBvc3RDb2RlLFxyXG4gICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlLFxyXG4gICAgICBsYXRpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwTGF0aXR1ZGUsXHJcbiAgICAgIGxvbmdpdHVkZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwb3QucGlja3VwTG9uZ2l0dWRlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBRdWVyeVNlYXJjaENhckhpcmVBcmdzIHtcclxuICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhckhpcmVBcmdzID0ge30gYXMgUXVlcnlTZWFyY2hDYXJIaXJlQXJncztcclxuICAgIHN3aXRjaCAodGhpcy5sb2NhdGlvblR5cGUpIHtcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLkFpcnBvcnQ6XHJcbiAgICAgICAgcXVlcnkuYWlycG9ydCA9IHtcclxuICAgICAgICAgIHBpY2t1cENvZGU6ICcnLFxyXG4gICAgICAgICAgZHJvcG9mZkNvZGU6ICcnXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcXVlcnkuYWlycG9ydC5waWNrdXBDb2RlID0gdGhpcy5waWNrdXBfbG9jYXRpb24uZ2F0ZXdheTtcclxuICAgICAgICBxdWVyeS5haXJwb3J0LmRyb3BvZmZDb2RlID0gdGhpcy5yZXR1cm5fdG9fcGlja3VwXHJcbiAgICAgICAgICA/IHRoaXMucGlja3VwX2xvY2F0aW9uLmdhdGV3YXlcclxuICAgICAgICAgIDogdGhpcy5kcm9wb2ZmX2xvY2F0aW9uLmdhdGV3YXk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTG9jYXRpb25UeXBlcy5DaXR5OlxyXG4gICAgICAgIHF1ZXJ5LmNpdHkgPSB7XHJcbiAgICAgICAgICBwaWNrdXBDb3VudHJ5Q29kZTogdGhpcy5jaXR5UGlja3VwLmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgcGlja3VwQ2l0eTogdGhpcy5jaXR5UGlja3VwLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBkcm9wb2ZmQ291bnRyeUNvZGU6IHRoaXMuY2l0eURyb3BvZmYuY291bnRyeUNvZGUsXHJcbiAgICAgICAgICBkcm9wb2ZmQ2l0eTogdGhpcy5jaXR5RHJvcG9mZi5pZC50b1N0cmluZygpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlOlxyXG4gICAgICAgIHF1ZXJ5LmRlcG90ID0ge1xyXG4gICAgICAgICAgdmVuZG9yQ29kZTogdGhpcy5wb3N0Y29kZVBpY2t1cC52ZW5kb3JDb2RlLFxyXG4gICAgICAgICAgcGlja3VwTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgIHBpY2t1cEV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlUGlja3VwLmV4dGVuZGVkTG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkxvY2F0aW9uQ29kZTogdGhpcy5wb3N0Y29kZURyb3BvZmYubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgZHJvcE9mZkV4dGVuZGVkTG9jYXRpb25Db2RlOiB0aGlzLnBvc3Rjb2RlRHJvcG9mZi5leHRlbmRlZExvY2F0aW9uQ29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBxdWVyeS5kcm9wb2ZmRGF0ZVRpbWUgPSB0aGlzLmRyb3BvZmZfZGF0ZXRpbWU7XHJcbiAgICBxdWVyeS5waWNrdXBEYXRlVGltZSA9IHRoaXMucGlja3VwX2RhdGV0aW1lO1xyXG5cclxuICAgIC8vIG5vdyBmb3IgdGhlIG9wdGlvbmFsIGZpZWxkcyAtIG51bGxpZnkgdGhlc2UgaWYgdGhleSBhcmUgJy0nIChBbnkpXHJcbiAgICBxdWVyeS5haXJjb24gPSB0aGlzLmFpckNvbiB8fCBudWxsO1xyXG4gICAgcXVlcnkudmVuZG9yID0gdGhpcy5jaG9zZW5WZW5kb3IgPT09ICctJyA/IG51bGwgOiB0aGlzLmNob3NlblZlbmRvcjtcclxuICAgIHF1ZXJ5LnRyYW5zbWlzc2lvbiA9IHRoaXMudHJhbnNtaXNzaW9uIHx8IG51bGw7XHJcbiAgICBxdWVyeS5jbGFzcyA9IHRoaXMuY2FyQ2xhc3MgfHwgbnVsbDtcclxuICAgIHF1ZXJ5LnR5cGUgPSB0aGlzLmNhclR5cGUgfHwgbnVsbDtcclxuICAgIHF1ZXJ5LmVzdGltYXRlZERhaWx5RGlzdGFuY2UgPSB0aGlzLmVzdGltYXRlZE1pbGVhZ2UgfHwgbnVsbDtcclxuICAgIHF1ZXJ5LmVzdGltYXRlZERhaWx5RGlzdGFuY2VVbml0cyA9IHRoaXMuZXN0aW1hdGVkTWlsZWFnZVxyXG4gICAgICA/IERpc3RhbmNlVHlwZXMuTVxyXG4gICAgICA6IG51bGw7IC8vIFNldHRpbmcgYXMgbWlsZXMgZm9yIG5vdyAtIG1heSBzd2FwIG91dCBmb3Iga2lsb21ldGVycyBsYXRlclxyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYXJIaXJlQXJncz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHRvZG8gLSB0dXJuIHRoaXMgaW50byBhIEJFIGNhbGwgdG8gZHluYW1pY2FsbHkgZ2V0IHRoZSBsaXN0IG9mIGNhciBjbGFzc2VzXHJcbiAgICogQHJldHVybnMgYWxsIGNhciBjbGFzc2VzIGFzIGFuIGFycmF5XHJcbiAgICovXHJcbiAgZ2V0Q2FyQ2xhc3NlcygpOiBPYnNlcnZhYmxlPElDYXJDbGFzc2VzW10+IHtcclxuICAgIHJldHVybiBvZih0aGlzLl9jYXJfY2xhc3Nlcyk7XHJcbiAgfVxyXG5cclxuICBnZXRMb2NhdGlvblR5cGVzKCkge1xyXG4gICAgcmV0dXJuIG9mKHRoaXMuX2xvY2F0aW9uX3R5cGVzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGZpbHRlciBkb3duIHRoZSBjYXIgcmVzdWx0cyBiYXNlZCBvbiB1c2VyIGNob3NlbiBmaWx0ZXJzXHJcbiAgICovXHJcbiAgZmlsdGVyUmVzdWx0cyhhcHBsaWVkRmlsdGVyczogQ2FySGlyZUZpbHRlcnMsIHNlbGVjdGVkU29ydDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgZnVsbFJlc3VsdHM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5ID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICB0aGlzLmZ1bGxSZXN1bHRzXHJcbiAgICApO1xyXG5cclxuICAgIC8vIG5vdyBhcHBseSBmaWx0ZXJzXHJcbiAgICAvLyBwcmljZSBmaWx0ZXJzXHJcbiAgICBmdWxsUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLmZpbHRlcigocmVzdWx0OiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLmdldFByaWNlKHJlc3VsdCk7XHJcblxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHByaWNlID49IGFwcGxpZWRGaWx0ZXJzLm1pblByaWNlICYmIHByaWNlIDw9IGFwcGxpZWRGaWx0ZXJzLm1heFByaWNlXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBhcHBseSB0cmFuc21pc3Npb24gZmlsdGVyc1xyXG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLmZpbHRlckJ5VHJhbnNtaXNzaW9uVHlwZShcclxuICAgICAgYXBwbGllZEZpbHRlcnMudHJhbnNtaXNzaW9ucyxcclxuICAgICAgZnVsbFJlc3VsdHNcclxuICAgICk7XHJcblxyXG4gICAgLy8gYWlyY29uXHJcbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuZmlsdGVyQnlBaXJjb25UeXBlKFxyXG4gICAgICBhcHBsaWVkRmlsdGVycy5haXJDb25kaXRpb25pbmcsXHJcbiAgICAgIGZ1bGxSZXN1bHRzXHJcbiAgICApO1xyXG5cclxuICAgIC8vIGNhciB0eXBlcyAoY2xhc3MpXHJcbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuZmlsdGVyQnlDYXJUeXBlKGFwcGxpZWRGaWx0ZXJzLnR5cGVzLCBmdWxsUmVzdWx0cyk7XHJcblxyXG4gICAgLy8gY29tcGFueVxyXG4gICAgZnVsbFJlc3VsdHMgPSB0aGlzLmZpbHRlckJ5Q29tcGFueShhcHBsaWVkRmlsdGVycy5jb21wYW5pZXMsIGZ1bGxSZXN1bHRzKTtcclxuXHJcbiAgICAvLyBsYXN0bHkgYXBwbHkgYW55IHJlcXVpcmVkIHNvcnRpbmdcclxuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5zb3J0UmVzdWx0cyhzZWxlY3RlZFNvcnQsIGZ1bGxSZXN1bHRzKTtcclxuXHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChmdWxsUmVzdWx0cyk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUNvbXBhbnkoXHJcbiAgICBjb21wYW5pZXM6IFNlbGVjdEZpbHRlcltdLFxyXG4gICAgY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IGNvbXBhbmllcy5maWx0ZXIoKGNvbXBhbnkpID0+IGNvbXBhbnkuc2VsZWN0ZWQpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZC5sZW5ndGgpIHtcclxuICAgICAgY2FycyA9IGNhcnMuZmlsdGVyKChjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhdmVTZWxlY3RlZCA9IHNlbGVjdGVkLmZpbmQoXHJcbiAgICAgICAgICAoc2VsYzogYW55KSA9PlxyXG4gICAgICAgICAgICBzZWxjLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT1cclxuICAgICAgICAgICAgY2FyLmlkZW50aWZpZXJzLnZlbmRvci50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGhhdmVTZWxlY3RlZDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhcnM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUNhclR5cGUoXHJcbiAgICB0eXBlczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICBjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIC8vIHRoaXMgaXMgYSBmaWx0ZXIgdHlwZSB3aGljaCBhbGxvd3MgbW9yZSB0aGFuIG9uZSB0byBiZSBzZXRcclxuICAgIC8vIGlmIG5vbmUgYXJlIHNldCBhbGxvdyBhbGwgdGhyb3VnaFxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkID0gdHlwZXMuZmlsdGVyKCh0eXBlKSA9PiB0eXBlLnNlbGVjdGVkKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBoYXZlU2VsZWN0ZWQgPSBzZWxlY3RlZC5maW5kKFxyXG4gICAgICAgICAgKHNlbGMpID0+XHJcbiAgICAgICAgICAgIHNlbGMudmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PVxyXG4gICAgICAgICAgICBjYXIuZGlzcGxheVJlY29yZC52ZWhpY2xlLmNsYXNzLnRvTG93ZXJDYXNlKClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gaGF2ZVNlbGVjdGVkO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FycztcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5VHJhbnNtaXNzaW9uVHlwZShcclxuICAgIHRyYW5taXNzaW9uczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICBjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IHNlbGVjdGVkVHJhbnNtaXNzaW9uID0gdHJhbm1pc3Npb25zLmZpbmQoKHRyYW5zKSA9PiB7XHJcbiAgICAgIHJldHVybiB0cmFucy5zZWxlY3RlZDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZFRyYW5zbWlzc2lvbiAmJiBzZWxlY3RlZFRyYW5zbWlzc2lvbi52YWx1ZSAhPT0gJ1knKSB7XHJcbiAgICAgIC8vIG5vdCAnQW55J1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhcnMgPSBjYXJzLmZpbHRlcigoY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRyYW5zID0gY2FyLmlkZW50aWZpZXJzLnZlaFR5cGVbMl07XHJcblxyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdHJhbnMudG9Mb3dlckNhc2UoKSA9PT1cclxuICAgICAgICAgICAgc2VsZWN0ZWRUcmFuc21pc3Npb24udmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBFcnJvciBmaWx0ZXJpbmcgdHJhbnNtaXNzaW9uczogJHtlcnJvcn0gKysrYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FycztcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5QWlyY29uVHlwZShcclxuICAgIGFpcmNvbnM6IFNlbGVjdEZpbHRlcltdLFxyXG4gICAgY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEFpcmNvbiA9IGFpcmNvbnMuZmluZCgoYWMpID0+IHtcclxuICAgICAgcmV0dXJuIGFjLnNlbGVjdGVkO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkQWlyY29uICYmIHNlbGVjdGVkQWlyY29uLnZhbHVlICE9PSAnQScpIHtcclxuICAgICAgLy8gbm90ICdBbnknXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY2FycyA9IGNhcnMuZmlsdGVyKChjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYWMgPSBjYXIuaWRlbnRpZmllcnMudmVoVHlwZVszXTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBhYy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZEFpcmNvbi52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgKysrIEVycm9yIGZpbHRlcmluZyBhaXJjb25zOiAke2Vycm9yfSArKytgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYXJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0c1xyXG4gICAqIEBwYXJhbSBzZWxlY3RlZFNvcnQgLSB0aGUgc29ydCB3ZSBoYXZlIGNob3NlblxyXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gb3B0aW9uYWxseSBwYXNzIGluIHRoZSByZXN1bHRzLCBpZiBub3QgcHJvdmlkZWQgLSB1c2VzIGludGVybmFsIHJlc3VsdHMgKG5vdCBmdWxsLCB3b3VsZCBjYXVzZSBpc3N1ZXMpXHJcbiAgICovXHJcbiAgc29ydFJlc3VsdHMoXHJcbiAgICBzZWxlY3RlZFNvcnQ6IG51bWJlcixcclxuICAgIHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGxldCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgcmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWVcclxuICAgICk7XHJcbiAgICBzd2l0Y2ggKHNlbGVjdGVkU29ydCkge1xyXG4gICAgICBjYXNlIDA6IC8vIGNoZWFwZXN0XHJcbiAgICAgICAgZnVsbFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PlxyXG4gICAgICAgICAgICB0aGlzLmdldFByaWNlKGEpIC0gdGhpcy5nZXRQcmljZShiKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTogLy8gZXhwZW5zaXZlXHJcbiAgICAgICAgZnVsbFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PlxyXG4gICAgICAgICAgICB0aGlzLmdldFByaWNlKGIpIC0gdGhpcy5nZXRQcmljZShhKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjogLy8gcHJlZmVycmVkIFRPRE9cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOiAvLyBicmFuZFxyXG4gICAgICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5zb3J0QnlCcmFuZChmdWxsUmVzdWx0cyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDogLy8gc2l6ZVxyXG4gICAgICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5zb3J0QnlTaXplKGZ1bGxSZXN1bHRzKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIC8vIGZhbGxiYWNrIHRvIHdoYXRldmVyIHdhcyBiZWZvcmVcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZ1bGxSZXN1bHRzKTtcclxuICAgIHJldHVybiBmdWxsUmVzdWx0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHMgZXhwZW5zaXZlXHJcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBmdWxsIHJlc3VsdHMgZnJvbSBzb3J0IHJlc3VsdHMgZnVuY3Rpb25cclxuICAgKi9cclxuXHJcbiAgc29ydEV4cGVuc2l2ZShyZXN1bHRzPzogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBjb25zdCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgcmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWVcclxuICAgICk7XHJcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcclxuICAgICAgKGE6IENhckhpcmVRdW90ZVJlc3VsdCwgYjogQ2FySGlyZVF1b3RlUmVzdWx0KSA9PlxyXG4gICAgICAgIHRoaXMuZ2V0UHJpY2UoYikgLSB0aGlzLmdldFByaWNlKGEpXHJcbiAgICApO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydGVkUmVzdWx0cyk7XHJcbiAgICByZXR1cm4gc29ydGVkUmVzdWx0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIHJlc3VsdHMgY2hlYXBlc3RcclxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIGZ1bGwgcmVzdWx0cyBmcm9tIHNvcnQgcmVzdWx0cyBmdW5jdGlvblxyXG4gICAqL1xyXG5cclxuICBzb3J0Q2hlYXBlc3QocmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgY29uc3QgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXHJcbiAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT5cclxuICAgICAgICB0aGlzLmdldFByaWNlKGEpIC0gdGhpcy5nZXRQcmljZShiKVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHNvcnRlZFJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHNvcnRlZFJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSByZXN1bHRzXHJcbiAgICogQHBhcmFtIHJlc3VsdHMgLSBmdWxsIHJlc3VsdHMgZnJvbSBzb3J0IHJlc3VsdHMgZnVuY3Rpb25cclxuICAgKi9cclxuICBzb3J0QnlTaXplKHJlc3VsdHM/OiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IGZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICByZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxyXG4gICAgICAoYTogQ2FySGlyZVF1b3RlUmVzdWx0LCBiOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICBsZXQgYVZhbDogbnVtYmVyO1xyXG4gICAgICAgIGxldCBiVmFsOiBudW1iZXI7XHJcbiAgICAgICAgYVZhbCA9IHRoaXMuY2FyQ2xhc3NNYXBbYS5kaXNwbGF5UmVjb3JkLnZlaGljbGUuY2xhc3MudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgYlZhbCA9IHRoaXMuY2FyQ2xhc3NNYXBbYi5kaXNwbGF5UmVjb3JkLnZlaGljbGUuY2xhc3MudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgaWYgKGFWYWwgPj0gMCAmJiBiVmFsID49IDApIHtcclxuICAgICAgICAgIHJldHVybiBhVmFsIC0gYlZhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0xOyAvLyBqdXN0IHBsYWNlIHRoZW0gYXQgZW5kICAtIHVucmVjb2duaXNlZCBwcm9kdWN0IGRlc2NyaXB0aW9uXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChzb3J0ZWRSZXN1bHRzKTtcclxuICAgIHJldHVybiBzb3J0ZWRSZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc29ydCB0aGUgcmVzdWx0c1xyXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gZnVsbCByZXN1bHRzIGZyb20gc29ydCByZXN1bHRzIGZ1bmN0aW9uXHJcbiAgICovXHJcbiAgc29ydEJ5QnJhbmQocmVzdWx0cz86IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkge1xyXG4gICAgY29uc3QgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHJlc3VsdHMgPyByZXN1bHRzIDogdGhpcy5yZXN1bHRzLnZhbHVlXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLnNvcnQoXHJcbiAgICAgIChhOiBDYXJIaXJlUXVvdGVSZXN1bHQsIGI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGxldCBicmFuZEEgPSBhLmlkZW50aWZpZXJzLnZlbmRvcjtcclxuICAgICAgICBsZXQgYnJhbmRCID0gYi5pZGVudGlmaWVycy52ZW5kb3I7XHJcblxyXG4gICAgICAgIC8vIHN3aXRjaGluZyBhcyB0aGVzZSBzdHJpbmdzIGRvbid0IG1hdGNoIHRoZSBicmFuZCBuYW1lXHJcbiAgICAgICAgc3dpdGNoIChicmFuZEEpIHtcclxuICAgICAgICAgIGNhc2UgJ1pFJzpcclxuICAgICAgICAgICAgYnJhbmRBID0gJ0hFJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdaSSc6XHJcbiAgICAgICAgICAgIGJyYW5kQSA9ICdBVic7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoIChicmFuZEIpIHtcclxuICAgICAgICAgIGNhc2UgJ1pFJzpcclxuICAgICAgICAgICAgYnJhbmRCID0gJ0hFJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdaSSc6XHJcbiAgICAgICAgICAgIGJyYW5kQiA9ICdBVic7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJyYW5kQSA8IGJyYW5kQikge1xyXG4gICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYnJhbmRBID4gYnJhbmRCKSB7XHJcbiAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHNvcnRlZFJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHNvcnRlZFJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgdGhlIHByaWNlIG9mIGEgaW5kaXZpZHVhbCBjYXJcclxuICAgKi9cclxuICBnZXRQcmljZShjYXI6IENhckhpcmVRdW90ZVJlc3VsdCk6IG51bWJlciB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKGNhci5kaXNwbGF5UmVjb3JkLmNoYXJnZXNbMF0uYW1vdW50KTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxyXG5cclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWluUHJpY2UoY2FyczogQ2FySGlyZVF1b3RlUmVzdWx0QXJyYXkpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGNhcnMucmVkdWNlKChtaW46IG51bWJlciwgY2FyOiBDYXJIaXJlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLmdldFByaWNlKGNhcik7XHJcbiAgICAgIGlmIChwcmljZSA8IG1pbikge1xyXG4gICAgICAgIG1pbiA9IHByaWNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBtaW47XHJcbiAgICB9LCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XHJcbiAgfVxyXG5cclxuICBnZXRNYXhQcmljZShjYXJzOiBDYXJIaXJlUXVvdGVSZXN1bHRBcnJheSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gY2Fycy5yZWR1Y2UoKG1heDogbnVtYmVyLCBjYXI6IENhckhpcmVRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCBwcmljZSA9IHRoaXMuZ2V0UHJpY2UoY2FyKTtcclxuICAgICAgaWYgKHByaWNlID4gbWF4KSB7XHJcbiAgICAgICAgbWF4ID0gcHJpY2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG1heDtcclxuICAgIH0sIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgZmxpZ2h0SXRlbTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMgPVxyXG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkZsaWdodF0/LnNlYXJjaFF1ZXJ5O1xyXG4gICAgaWYgKGZsaWdodEl0ZW0pIHtcclxuICAgICAgLy8gVE9ETyBmbGlnaHRzIGhhdmVuJ3QgYmVlbiBkb25lIHlldC5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUGlja3VwRGF0ZVRpbWUoKSB7XHJcbiAgICBpZiAodGhpcy5fcGlja3VwX2RhdGUgJiYgdGhpcy5fcGlja3VwX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9waWNrdXBfZGF0ZSxcclxuICAgICAgICB0aGlzLl9waWNrdXBfdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnBpY2t1cF9kYXRldGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZURyb3BvZmZEYXRlVGltZSgpIHtcclxuICAgIGlmICh0aGlzLl9kcm9wb2ZmX2RhdGUgJiYgdGhpcy5fZHJvcG9mZl90aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fZHJvcG9mZl9kYXRlLFxyXG4gICAgICAgIHRoaXMuX2Ryb3BvZmZfdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVOZ2JQaWNrdXBEYXRlVGltZSgpIHtcclxuICAgIGlmICh0aGlzLl9uZ2JQaWNrdXBEYXRlICYmIHRoaXMuX3BpY2t1cFRpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9uZ2JQaWNrdXBEYXRlLFxyXG4gICAgICAgIHRoaXMuX3BpY2t1cFRpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5waWNrdXBfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVOZ2JEcm9wb2ZmRGF0ZVRpbWUoKSB7XHJcbiAgICBpZiAodGhpcy5fbmdiRHJvcG9mZkRhdGUgJiYgdGhpcy5fZHJvcG9mZlRpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9uZ2JEcm9wb2ZmRGF0ZSxcclxuICAgICAgICB0aGlzLl9kcm9wb2ZmVGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc092ZXJOaWdodCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG91dHdhcmREYXkgPSB0aGlzLnBpY2t1cF9kYXRldGltZS5kYXRlKCk7XHJcbiAgICBjb25zdCByZXR1cm5EYXkgPSB0aGlzLmRyb3BvZmZfZGF0ZXRpbWUuZGF0ZSgpO1xyXG4gICAgaWYgKHJldHVybkRheSAtIG91dHdhcmREYXkgPj0gMSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IENhckhpcmVRdW90ZVJlc3VsdEFycmF5KTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBtaW5QcmljZSA9IHRoaXMuZ2V0TWluUHJpY2UocmVzdWx0cyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhbW91bnQ6IG1pblByaWNlLFxyXG4gICAgICBjdXJyZW5jeUNvZGU6IHJlc3VsdHNbMF0uZGlzcGxheVJlY29yZC5jaGFyZ2VzWzBdLmN1cnJlbmN5Q29kZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgYXZhaWxhYmlsaXR5IGRldGFpbHMgZm9yIGEgcGFydGljdWxhciBjYXIgaGlyZSByZXN1bHQgdXNpbmcgbG9jYXRpb25EZXRhaWxzIHBhcmFtXHJcbiAgICogQHBhcmFtIGxvY2F0aW9uRGV0YWlscyAtIGUuZy4gdGFrZW4gZnJvbSByZXNwb25zZSBkYXRhIGluIHNlYXJjaENhckhpcmUgcXVlcnlcclxuICAgKiBAcGFyYW0gaXNMb2FkaW5nIGJlaGF2aW91clN1YmplY3QgZm9yIGhhbmRsaW5nIGxvYWRpbmcgc3Bpbm5lciBzdGF0ZSBvZiByZXF1ZXN0XHJcbiAgICovXHJcbiAgZ2V0Q2FySGlyZUF2YWlsYWJpbGl0eURldGFpbChcclxuICAgIGxvY2F0aW9uRGV0YWlsczogQ2FySGlyZUlucHV0SWRlbnRpZmllcnMsXHJcbiAgICBpc0xvYWRpbmc6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8Q2FySGlyZURldGFpbFJlcXVlc3RSZXNwb25zZT4ge1xyXG4gICAgaWYgKCFpc0xvYWRpbmcudmFsdWUpIHtcclxuICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlclxyXG4gICAgICAuZmV0Y2hMaXN0KHsgbG9jYXRpb25EZXRhaWxzIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHQ6IENhckhpcmVEZXRhaWxSZXF1ZXN0UmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChpc0xvYWRpbmcudmFsdWUpIHtcclxuICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gYWRkIGNhciBoaXJlIHRvIGJhc2tldFxyXG4gICAqL1xyXG4gIGFzeW5jIGFkZENhckhpcmVUb0Jhc2tldChcclxuICAgIGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5OiBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eSxcclxuICAgIGNhckhpcmVRdWVyeTogU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoY2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHkudW5hdmFpbGFibGUpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIGRpc3BsYXlSZWNvcmQsXHJcbiAgICAgICAgaWRlbnRpZmllcnMsXHJcbiAgICAgICAgc291cmNlSWRcclxuICAgICAgfSA9IGNhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5O1xyXG4gICAgICBjb25zdCBwcmljZSA9IHBhcnNlRmxvYXQoZGlzcGxheVJlY29yZD8uY2hhcmdlc1swXT8uYW1vdW50ID8/ICcwJyk7XHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcclxuICAgICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgICBwaWNrVXBEYXRldGltZTogbmV3IERhdGUoZGlzcGxheVJlY29yZC5waWNrdXApLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgICAgIGRyb3BPZmZEYXRldGltZTogbmV3IERhdGUoZGlzcGxheVJlY29yZC5kcm9wb2ZmKS50b0lTT1N0cmluZygpLFxyXG4gICAgICAgICAgICBwaWNrVXBMb2NhdGlvbjoge1xyXG4gICAgICAgICAgICAgIGlhdGE6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uVHlwZSA9PT0gTG9jYXRpb25UeXBlcy5BaXJwb3J0XHJcbiAgICAgICAgICAgICAgICAgID8gaWRlbnRpZmllcnMubG9jYXRpb25Db2RlXHJcbiAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgbmFtZTogZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgIGFkZHJlc3M6IGAke2Rpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24udG9wTGluZX0sICR7ZGlzcGxheVJlY29yZC5waWNrdXBMb2NhdGlvbi5jaXR5fWAsXHJcbiAgICAgICAgICAgICAgcG9zdGNvZGU6IGRpc3BsYXlSZWNvcmQucGlja3VwTG9jYXRpb24ucG9zdENvZGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZHJvcE9mZkxvY2F0aW9uOiB7XHJcbiAgICAgICAgICAgICAgaWF0YTpcclxuICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb25UeXBlID09PSBMb2NhdGlvblR5cGVzLkFpcnBvcnRcclxuICAgICAgICAgICAgICAgICAgPyBpZGVudGlmaWVycy5kcm9wT2ZmTG9jYXRpb25cclxuICAgICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICBuYW1lOiBkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgYWRkcmVzczogYCR7ZGlzcGxheVJlY29yZC5yZXR1cm5Mb2NhdGlvbi50b3BMaW5lfSwgJHtkaXNwbGF5UmVjb3JkLnJldHVybkxvY2F0aW9uLmNpdHl9YCxcclxuICAgICAgICAgICAgICBwb3N0Y29kZTogZGlzcGxheVJlY29yZC5yZXR1cm5Mb2NhdGlvbi5wb3N0Q29kZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYXI6IHtcclxuICAgICAgICAgICAgICB0eXBlOiBkaXNwbGF5UmVjb3JkLnZlaGljbGUudHlwZSxcclxuICAgICAgICAgICAgICBtYW51YWxUcmFuc21pc3Npb246IGRpc3BsYXlSZWNvcmQudmVoaWNsZS50cmFuc21pc3Npb24uaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICBDYXJIaXJlVHJhbnNtaXNzaW9uLk1hbnVhbFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmVuZG9yTmFtZTogZGlzcGxheVJlY29yZC52ZW5kb3IubmFtZSxcclxuICAgICAgICAgICAgaWRlbnRpZmllcnM6IHtcclxuICAgICAgICAgICAgICBkcm9wT2ZmTG9jYXRpb246IGlkZW50aWZpZXJzLmRyb3BPZmZMb2NhdGlvbixcclxuICAgICAgICAgICAgICBsb2NhdGlvbkNvZGU6IGlkZW50aWZpZXJzLmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgICAgICBsb2NhdGlvbk5hbWU6IGlkZW50aWZpZXJzLmxvY2F0aW9uTmFtZSxcclxuICAgICAgICAgICAgICB2ZWhUeXBlOiBpZGVudGlmaWVycy52ZWhUeXBlLFxyXG4gICAgICAgICAgICAgIHZlbmRvcjogaWRlbnRpZmllcnMudmVuZG9yXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwcmljZSxcclxuICAgICAgICAgIGN1cnJlbmN5OiAnR0JQJyBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeTogY2FySGlyZVF1ZXJ5LFxyXG4gICAgICAgICAgY28yUGVySXRlbSxcclxuICAgICAgICAgIGNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICAgIG91dGJvdW5kRGF0ZTogbmV3IERhdGUoZGlzcGxheVJlY29yZC5waWNrdXApLnRvSVNPU3RyaW5nKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICB9XHJcbn1cclxuIl19
|