@sabstravtech/obtservices 0.2.2505190850 → 0.2.2505201645
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/bundles/sabstravtech-obtservices-base.umd.js +19 -9
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +4 -4
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +7 -3
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +14 -5
- package/fesm2015/sabstravtech-obtservices-base.js +20 -7
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import moment from 'moment';
|
|
3
3
|
import Ajv from 'ajv';
|
|
4
|
-
import { BehaviorSubject, forkJoin, of, Subject,
|
|
4
|
+
import { BehaviorSubject, forkJoin, of, Subject, } from 'rxjs';
|
|
5
5
|
import { switchMap, take, map, debounceTime } from 'rxjs/operators';
|
|
6
6
|
import { BasketItemStatus, BasketStatus, LeadPassengerType, PassengerType, ServiceType, DraftBasketType } from '../types/graphql.types';
|
|
7
7
|
import { DifferentInvokdedUserReasons, DifferentTraveller, MenuSlideEnum } from '../types/types';
|
|
@@ -291,7 +291,7 @@ export class BaseEnterpriseBasketService {
|
|
|
291
291
|
for (const basket of this.currentBaskets) {
|
|
292
292
|
const basketValue = basket.subject.value;
|
|
293
293
|
if (basketValue.invokedUser) {
|
|
294
|
-
yield
|
|
294
|
+
yield this.removeBasket(basketValue.id).toPromise();
|
|
295
295
|
}
|
|
296
296
|
}
|
|
297
297
|
});
|
|
@@ -1047,10 +1047,19 @@ export class BaseEnterpriseBasketService {
|
|
|
1047
1047
|
this.validateBasketItemMiFetcher.fetchOne(query);
|
|
1048
1048
|
});
|
|
1049
1049
|
}
|
|
1050
|
+
// async validateMiBasket(basketId: string): Promise<void> {
|
|
1051
|
+
// const query = { basketId };
|
|
1052
|
+
// return firstValueFrom(this.validateBasketMiFetcher.fetchOne(query)).then(data => {
|
|
1053
|
+
// this.miViewed = true;
|
|
1054
|
+
// this.missingMIs = data;
|
|
1055
|
+
// });
|
|
1056
|
+
// }
|
|
1050
1057
|
validateMiBasket(basketId) {
|
|
1051
1058
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1052
|
-
const query = {
|
|
1053
|
-
|
|
1059
|
+
const query = {
|
|
1060
|
+
basketId
|
|
1061
|
+
};
|
|
1062
|
+
this.validateBasketMiFetcher.fetchOne(query).subscribe(data => {
|
|
1054
1063
|
this.miViewed = true;
|
|
1055
1064
|
this.missingMIs = data;
|
|
1056
1065
|
});
|
|
@@ -1613,4 +1622,4 @@ export class BaseEnterpriseBasketService {
|
|
|
1613
1622
|
});
|
|
1614
1623
|
}
|
|
1615
1624
|
}
|
|
1616
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3Ivc2VydmljZXMvZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUV0QixPQUFPLEVBQ0wsZUFBZSxFQUNmLFFBQVEsRUFHUixFQUFFLEVBQ0YsT0FBTyxFQUVQLGNBQWMsRUFFZixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRSxPQUFPLEVBS0wsZ0JBQWdCLEVBR2hCLFlBQVksRUFJWixpQkFBaUIsRUFFakIsYUFBYSxFQUViLFdBQVcsRUFNWCxlQUFlLEVBU2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLDRCQUE0QixFQUM1QixrQkFBa0IsRUFHbEIsYUFBYSxFQUVkLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFGLE9BQU8sRUFDTCx1QkFBdUIsR0FDeEIsTUFBTSx3Q0FBd0MsQ0FBQztBQW9EaEQsT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBOEJ4RSxPQUFPLEVBQ0wseUJBQXlCLEVBRTFCLE1BQU0sMkJBQTJCLENBQUM7QUEwRW5DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFNL0MsT0FBTyxFQUNMLGlDQUFpQyxFQUVsQyxNQUFNLG9DQUFvQyxDQUFDO0FBd0Q1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQVU3RSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUM7QUFnRHpCLE1BQU0sT0FBTyxjQUFjO0lBc0J6QixZQUNFLE1BQXdCLEVBQ2hCLE9BQTJCLEVBQzNCLGFBQStDLEVBQy9DLGNBQXFDLEVBQ3JDLGVBQTBDLEVBQzFDLHVCQUEwRDtRQUoxRCxZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUFDL0MsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBQ3JDLG9CQUFlLEdBQWYsZUFBZSxDQUEyQjtRQUMxQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQW1DO1FBUnBFLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBVTVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ2xCLE9BQU8sRUFBRSxJQUFJLGVBQWUsaUNBQ3ZCLE1BQU0sS0FDVCxNQUFNLEVBQUUsRUFBRSxFQUNWLGFBQWEsRUFBRSxLQUFLLEVBQ3BCLEtBQUssRUFBRSxDQUFDLEVBQ1IsUUFBUSxFQUFFLEVBQUUsRUFDWixtQkFBbUIsRUFBRSxFQUFFLEVBQ3ZCLFFBQVEsRUFBRSxFQUFFLElBQ1o7WUFDRixjQUFjLEVBQUUsSUFBSSxlQUFlLGlDQUM5QixNQUFNLEtBQ1QsTUFBTSxFQUFFLEVBQUUsRUFDVixhQUFhLEVBQUUsS0FBSyxFQUNwQixLQUFLLEVBQUUsQ0FBQyxFQUNSLFFBQVEsRUFBRSxFQUFFLEVBQ1osbUJBQW1CLEVBQUUsRUFBRSxFQUN2QixRQUFRLEVBQUUsRUFBRSxJQUNaO1lBQ0YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ2pCLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNiLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixNQUFNLEVBQUUsRUFBRTtZQUNWLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLEtBQUssRUFBRSxDQUFDO1lBQ1IsUUFBUSxFQUFFLEVBQUU7WUFDWixtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZCLFFBQVEsRUFBRSxFQUFFO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNuRCxJQUFJLENBQUMsRUFBRTtZQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUMsRUFDRCxHQUFHLENBQUMsRUFBRTtZQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUMsRUFDRCxHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksQ0FBQyxNQUF3QixFQUFFLFVBQW1CLElBQUksRUFBRSxlQUF1QixFQUFFO1FBQy9FLHVIQUF1SDtRQUN2SCw0QkFBNEI7O1FBRTVCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxZQUFZLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLGdCQUFnQixFQUFFO1lBQzVGLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDdkU7UUFDRCxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFCLE1BQU0sTUFBTSxtQ0FDUCxNQUFNLEdBQ04sQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxLQUF3QixFQUFFLElBQWdCLEVBQUUsRUFBRTs7WUFDN0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNoQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDakM7WUFDRCwwREFBMEQ7WUFDMUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztZQUMxQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDakIsSUFBSSw0QkFBNEIsQ0FDOUIsSUFBSSxFQUNKLElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLGNBQWMsQ0FDcEIsQ0FDRixDQUFDO1lBRUYsSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLGNBQWMsMENBQUUsTUFBTSxJQUFHLENBQUMsSUFBSSxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsS0FBSywwQ0FBRSxNQUFNLElBQUcsQ0FBQyxLQUFJLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsTUFBTSxDQUFBLENBQUMsRUFBRTtnQkFDdEYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2dCQUNsRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksdUJBQXVCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2FBQ3ZGO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLEVBQ0Q7WUFDRSxNQUFNLEVBQUUsRUFBRTtZQUNWLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLEtBQUssRUFBRSxDQUFBLE1BQUEsTUFBTSxDQUFDLFdBQVcsMENBQUUsTUFBTSxLQUFJLENBQUM7WUFDdEMsUUFBUSxFQUFFLEVBQUU7WUFDWixtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZCLFFBQVEsRUFBRSxFQUFFO1NBQ2IsQ0FDRixDQUNGLENBQUM7UUFDRixNQUFNLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakMsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFDLE9BQUEsTUFBQSxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxNQUFNLDBDQUFFLGFBQWEsMENBQUUsT0FBTyxDQUFBLEVBQUEsQ0FBQyxFQUFFO1lBQzFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDcEQ7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQWdCLDJCQUEyQjtJQTRML0MsWUFDVSxxQkFBd0QsRUFDeEQsc0JBQTBELEVBQzFELG1CQUEyRCxFQUMzRCxhQUE0QyxFQUM3QyxhQUF5QyxFQUN4QyxpQkFBOEMsRUFDOUMsbUJBQWtELEVBQ2xELE9BQTJCLEVBQzNCLDJCQUFtRSxFQUNuRSx1QkFBMkQsRUFDM0QsY0FBd0MsRUFDeEMscUJBQXVELEVBQ3ZELDBCQUF5RSxFQUN6RSwwQkFBK0QsRUFDL0Qsd0JBQTRELEVBQzVELHdCQUE2RCxFQUM3RCx1QkFBMkQsRUFDM0QsMEJBQWlFLEVBQ2pFLFdBQWlDLEVBQ2pDLFlBQW9DLEVBQ3BDLG9CQUE2RCxFQUM3RCw2QkFBd0UsRUFDeEUsZ0JBQW9ELEVBQ3BELGNBQWlELEVBQ2pELGtDQUFrRixFQUNsRiwwQkFBZ0UsRUFDaEUseUJBQXdFLEVBQ3hFLDBCQUF5RSxFQUN6RSw0QkFBc0UsRUFDdEUscUJBQXdELEVBQ3hELG1CQUEwRCxFQUMxRCxzQkFBeUUsRUFDekUseUJBQWdFLEVBQ2hFLDJCQUFtRSxFQUNuRSxzQkFBeUQsRUFDekQsNEJBQXNFLEVBQ3RFLGlDQUFnRixFQUNoRiwwQkFBNkQsRUFDN0QsdUJBQTRELEVBQzVELHFCQUF3RCxFQUN4RCxrQkFBaUQsRUFDakQsMkJBQW9FLEVBQ3BFLHNCQUEwRCxFQUMxRCwyQkFBd0UsRUFDeEUsK0JBQTZFLEVBQzNFLGNBQWtDLEVBQ3BDLHNCQUEwRCxFQUMxRCxnQkFBb0QsRUFDcEQsc0NBQTJGLEVBQzNGLHVCQUEyRCxFQUMzRCwyQkFBb0UsRUFDcEUsa0JBQWlELEVBQ2pELGdDQUE4RTtRQXBEOUUsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFtQztRQUN4RCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQW9DO1FBQzFELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBd0M7UUFDM0Qsa0JBQWEsR0FBYixhQUFhLENBQStCO1FBQzdDLGtCQUFhLEdBQWIsYUFBYSxDQUE0QjtRQUN4QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQTZCO1FBQzlDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBK0I7UUFDbEQsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUF3QztRQUNuRSw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQW9DO1FBQzNELG1CQUFjLEdBQWQsY0FBYyxDQUEwQjtRQUN4QywwQkFBcUIsR0FBckIscUJBQXFCLENBQWtDO1FBQ3ZELCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBK0M7UUFDekUsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUFxQztRQUMvRCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQW9DO1FBQzVELDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBcUM7UUFDN0QsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUFvQztRQUMzRCwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQXVDO1FBQ2pFLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtRQUNqQyxpQkFBWSxHQUFaLFlBQVksQ0FBd0I7UUFDcEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QztRQUM3RCxrQ0FBNkIsR0FBN0IsNkJBQTZCLENBQTJDO1FBQ3hFLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0M7UUFDcEQsbUJBQWMsR0FBZCxjQUFjLENBQW1DO1FBQ2pELHVDQUFrQyxHQUFsQyxrQ0FBa0MsQ0FBZ0Q7UUFDbEYsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUFzQztRQUNoRSw4QkFBeUIsR0FBekIseUJBQXlCLENBQStDO1FBQ3hFLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBK0M7UUFDekUsaUNBQTRCLEdBQTVCLDRCQUE0QixDQUEwQztRQUN0RSwwQkFBcUIsR0FBckIscUJBQXFCLENBQW1DO1FBQ3hELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUM7UUFDMUQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFtRDtRQUN6RSw4QkFBeUIsR0FBekIseUJBQXlCLENBQXVDO1FBQ2hFLGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FBd0M7UUFDbkUsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFtQztRQUN6RCxpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQTBDO1FBQ3RFLHNDQUFpQyxHQUFqQyxpQ0FBaUMsQ0FBK0M7UUFDaEYsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUFtQztRQUM3RCw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXFDO1FBQzVELDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBbUM7UUFDeEQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUErQjtRQUNqRCxnQ0FBMkIsR0FBM0IsMkJBQTJCLENBQXlDO1FBQ3BFLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBb0M7UUFDMUQsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUE2QztRQUN4RSxvQ0FBK0IsR0FBL0IsK0JBQStCLENBQThDO1FBQzNFLG1CQUFjLEdBQWQsY0FBYyxDQUFvQjtRQUNwQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQW9DO1FBQzFELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0M7UUFDcEQsMkNBQXNDLEdBQXRDLHNDQUFzQyxDQUFxRDtRQUMzRiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQW9DO1FBQzNELGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FBeUM7UUFDcEUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUErQjtRQUNqRCxxQ0FBZ0MsR0FBaEMsZ0NBQWdDLENBQThDO1FBN0xqRixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV0QixtQkFBYyxHQUEyQixFQUFFLENBQUM7UUFDcEQscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBRWxDLGdDQUEyQixHQUF1QyxJQUFJLE9BQU8sRUFFMUUsQ0FBQztRQUNKLG9DQUErQixHQUE2QixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNoRyx3QkFBbUIsR0FBNEIsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDL0UsbUJBQWMsR0FBNkIsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDL0UsdUJBQWtCLEdBQTZCLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ25GLG1CQUFjLEdBQTZCLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQy9FLCtCQUEwQixHQUE2QixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMzRixzQkFBaUIsR0FBNkIsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEYsaUJBQVksR0FBNkIsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDN0UsZUFBVSxHQUE2QixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMzRSx3QkFBbUIsR0FBNkIsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDcEYsbUJBQWMsR0FBNEIsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEUscUJBQWdCLEdBQVcsRUFBRSxDQUFDO1FBRTlCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxnQkFBVyxHQUF5QixFQUFFLENBQUM7UUFDdkMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUE0QjdCLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBeUIsRUFBRSxDQUFDLENBQUM7UUFFMUQsZUFBVSxHQUF1QjtZQUMvQjtnQkFDRSxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU07Z0JBQ3hCLElBQUksRUFBRSxTQUFTO2dCQUNmLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO2FBQ1A7WUFDRDtnQkFDRSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7Z0JBQ3RCLElBQUksRUFBRSxNQUFNO2dCQUNaLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO2FBQ1A7WUFDRDtnQkFDRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUs7Z0JBQ3ZCLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO2FBQ1A7WUFDRDtnQkFDRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7Z0JBQ3JCLElBQUksRUFBRSxPQUFPO2dCQUNiLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO2FBQ1A7WUFDRDtnQkFDRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUc7Z0JBQ3JCLElBQUksRUFBRSxNQUFNO2dCQUNaLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO2FBQ1A7WUFDRDtnQkFDRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFFBQVE7Z0JBQzFCLElBQUksRUFBRSxVQUFVO2dCQUNoQixLQUFLLEVBQUUsQ0FBQztnQkFDUixHQUFHLEVBQUUsQ0FBQzthQUNQO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFdBQVcsQ0FBQyxpQkFBaUI7Z0JBQ25DLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO2FBQ1A7WUFDRDtnQkFDRSxJQUFJLEVBQUUsV0FBVyxDQUFDLE9BQU87Z0JBQ3pCLElBQUksRUFBRSxTQUFTO2dCQUNmLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO2FBQ1A7WUFDRDtnQkFDRSxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU07Z0JBQ3hCLElBQUksRUFBRSxTQUFTO2dCQUNmLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO2FBQ1A7WUFDRDtnQkFDRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUs7Z0JBQ3ZCLElBQUksRUFBRSxPQUFPO2dCQUNiLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO2FBQ1A7WUFDRDtnQkFDRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFNBQVM7Z0JBQzNCLElBQUksRUFBRSxZQUFZO2dCQUNsQixLQUFLLEVBQUUsQ0FBQztnQkFDUixHQUFHLEVBQUUsQ0FBQzthQUNQO1NBQ0YsQ0FBQztRQUVGLGlCQUFZLEdBQWtDLElBQUksZUFBZSxDQUFlO1lBQzlFLEtBQUssRUFBRSxJQUFJO1lBQ1gsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDdEIsQ0FBQyxDQUFDO1FBRUgsY0FBUyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUM7UUFJdEIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUF5RDNCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSx5QkFBeUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksaUNBQWlDLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUNwQyxJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDcEMsSUFBSSxFQUFFLENBQU8sS0FBZ0IsRUFBRSxFQUFFO2dCQUMvQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQzFFLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7aUJBQ3ZDO2dCQUNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLENBQUMsQ0FBQTtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFwTEQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsS0FBYztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxJQUFZLGVBQWU7UUFDekIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFZLGVBQWUsQ0FBQyxLQUFhO1FBQ3ZDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDbEMsaUZBQWlGO1lBQ2pGLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxJQUEwQjtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBNkpEOztPQUVHO0lBQ0csd0JBQXdCOztZQUM1QixLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3hDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUN6QyxJQUFJLFdBQVcsQ0FBQyxXQUFXLEVBQUU7b0JBQzNCLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ3pEO2FBQ0Y7UUFDSCxDQUFDO0tBQUE7SUFFRCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxnQ0FBZ0M7UUFDOUIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztJQUVNLEtBQUs7UUFDViwrQ0FBK0M7UUFFL0MsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7WUFDN0Qsc0RBQXNEO1lBQ3RELElBQUksQ0FBQyxxQkFBcUI7aUJBQ3ZCLFNBQVMsQ0FBQztnQkFDVCxjQUFjLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNuQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7YUFDbEYsQ0FBQztpQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNiLFNBQVMsQ0FDUixDQUFDLE9BQTJCLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDOUMsQ0FBQyxNQUE0QixFQUFFLEVBQUUsQ0FDL0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxJQUFJO29CQUNqRCxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07b0JBQzVCLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLGVBQWU7b0JBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsQ0FDeEIsQ0FBQztnQkFDRixJQUFJLGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFO29CQUM1RCxJQUFJLE1BQU0sRUFBRTt3QkFDVixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDM0MsSUFBSSxDQUFDLFNBQVMsRUFBRTs0QkFDZCxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7eUJBQ3JDO3dCQUNELE9BQU8sU0FBUyxDQUFDO3FCQUNsQjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUU7b0JBQzFCLHFIQUFxSDtvQkFDckgsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUM1QyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUM1QyxDQUFDO29CQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsc0ZBQXNGO29CQUV6SCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pDLDBKQUEwSjt3QkFDMUosSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztxQkFDekU7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7cUJBQzdCO29CQUVELElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzdCLG9GQUFvRjt3QkFDcEYsSUFDRSxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDOzRCQUNsRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUN2RTs0QkFDQSxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7eUJBQzdDO3dCQUNELG1LQUFtSzt3QkFDbkssSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7cUJBQ3JFO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO3FCQUM3QixDQUFDLG1DQUFtQztvQkFDckMsT0FBTztpQkFDUjtnQkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFFbEMsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDN0Isb0ZBQW9GO29CQUNwRixJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTt3QkFDdEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3FCQUM3QztvQkFDRCxtS0FBbUs7b0JBQ25LLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUNyRTtxQkFBTTtvQkFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztpQkFDN0I7WUFDSCxDQUFDLEVBQ0QsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsQ0FDRixDQUFDO1NBQ0w7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBK0IsRUFBRSxFQUFFLENBQzlELE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQzdCLENBQUM7WUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBRVksaUJBQWlCLENBQUMsT0FBZTs7WUFDNUMsT0FBTyxJQUFJLENBQUMscUJBQXFCO2lCQUM5QixTQUFTLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO2lCQUNqRSxJQUFJLENBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxDQUFDLE9BQTJCLEVBQUUsRUFBRTtnQkFDbEMsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO29CQUNsQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFO3dCQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUU7NEJBQy9CLE1BQU0sU0FBUyxHQUFHLElBQUksY0FBYyxDQUNsQyxNQUFNLEVBQ04sSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLEVBQ0osSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLHVCQUF1QixDQUM3QixDQUFDOzRCQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUNwQywwQ0FBMEM7eUJBQzNDO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUVELE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUNIO2lCQUNBLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLENBQUM7S0FBQTtJQUVZLFdBQVcsQ0FDdEIsSUFBK0IsRUFDL0IsU0FBK0IsRUFDL0IsYUFBK0MsRUFDL0MsYUFBMEIsRUFBRSxFQUM1QixrQkFBNEIsRUFDNUIsWUFBc0IsRUFDdEIsa0JBQTRCOzs7WUFFNUIsT0FBTyxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFckUsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLDBJQUEwSTtnQkFDMUksU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLFNBQVMsQ0FBQzthQUNoRTtpQkFBTTtnQkFDTCxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksU0FBUyxDQUFDO2dCQUMvRCxRQUNFLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxFQUN0RjtvQkFDQSxLQUFLLDRCQUE0QixDQUFDLFFBQVE7d0JBQ3hDLE1BQU07b0JBQ1IsS0FBSyw0QkFBNEIsQ0FBQyxNQUFNO3dCQUN0QyxPQUFPLDRCQUE0QixDQUFDLE1BQU0sQ0FBQztvQkFDN0MsS0FBSyw0QkFBNEIsQ0FBQyxTQUFTO3dCQUN6QyxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDcEMsTUFBTTtvQkFDUixLQUFLLDRCQUE0QixDQUFDLFFBQVE7d0JBQ3hDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFOzRCQUN2QyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDbkUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQzNELENBQUM7NEJBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLDJCQUEyQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7eUJBQ3BGOzZCQUFNOzRCQUNMLGNBQWM7NEJBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ2hDO3dCQUNELE9BQU8sNEJBQTRCLENBQUMsUUFBUSxDQUFDO2lCQUNoRDthQUNGO1lBRUQsTUFBTSx1QkFBdUIsR0FBUSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUN6RSxjQUFjLENBQUMsNEJBQTRCLENBQzVDO2dCQUNDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQztnQkFDckYsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUVQLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUVyQyxJQUNFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWTtnQkFDckMsdUJBQXVCO2dCQUN2Qix1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDekMsVUFBVTtnQkFDVixVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDckI7Z0JBQ0EsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2dCQUNsRCxRQUNFLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUNsQyxTQUFTLEVBQ1QsVUFBVSxFQUNWLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLENBQzFDLEVBQ0Q7b0JBQ0EsS0FBSyxrQkFBa0IsQ0FBQyxRQUFRO3dCQUM5QixNQUFNO29CQUNSLEtBQUssa0JBQWtCLENBQUMsTUFBTTt3QkFDNUIsT0FBTyw0QkFBNEIsQ0FBQyxNQUFNLENBQUM7b0JBQzdDLEtBQUssa0JBQWtCLENBQUMsU0FBUzt3QkFDL0IsU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUN0QyxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLE1BQU07aUJBQ1Q7YUFDRjtZQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzVFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUM1RSxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztvQkFDMUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEtBQUs7b0JBQ3pCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7YUFDNUI7WUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZO2dCQUNuQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzdELENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVc7Z0JBQ2pDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDNUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFFckIsd0NBQXdDO1lBQ3hDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRS9CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDaEUsUUFBUSxPQUFPLEVBQUU7Z0JBQ2YsS0FBSyxLQUFLO29CQUNSLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FHckUsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBQ3JDLElBQ0UseUJBQXlCO3lCQUN6QixNQUFBLHlCQUF5QixDQUFDLE9BQU8sMENBQUUsTUFBTSxDQUFBO3dCQUN6Qyx5QkFBeUIsQ0FBQyxRQUFRLEVBQ2xDO3dCQUNBLElBQUksQ0FBQyxZQUFZLEdBQUcseUJBQXlCLENBQUMsUUFBUSxDQUFDO3FCQUN4RDtvQkFDRCxNQUFNO2dCQUNSLEtBQUssT0FBTztvQkFDVixNQUFNLDJCQUEyQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBR3ZFLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO29CQUNyQyxJQUNFLDJCQUEyQjt5QkFDM0IsTUFBQSwyQkFBMkIsQ0FBQyxLQUFLLDBDQUFFLE1BQU0sQ0FBQTt3QkFDekMsMkJBQTJCLENBQUMsUUFBUSxFQUNwQzt3QkFDQSxJQUFJLENBQUMsWUFBWSxHQUFHLDJCQUEyQixDQUFDLFFBQVEsQ0FBQztxQkFDMUQ7b0JBQ0QsTUFBTTthQUNUO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDM0MsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFFMUIsSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFO2dCQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IseUJBQXlCO2dCQUN6QixNQUFNLElBQUksQ0FBQyxzQkFBc0I7cUJBQzlCLFNBQVMsQ0FBQyxJQUFJLENBQUM7cUJBQ2YsU0FBUyxFQUFFO3FCQUNYLElBQUksQ0FDSCxDQUFDLFNBQW9DLEVBQUUsRUFBRTtvQkFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ3RCLG9DQUFvQztvQkFDcEMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDNUUsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDcEUscUJBQXFCO29CQUNyQixNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFFcEUsU0FBUyxDQUFDLElBQUksaUNBRVAsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQ3ZCLFNBQVMsR0FFZCxJQUFJLEVBQ0osS0FBSyxDQUNOLENBQUM7b0JBRUYsYUFBYSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUM1RCxhQUFhLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ3JELE1BQU0sRUFBRSxHQUE4QixTQUFTLENBQUMsV0FBVyxDQUFDO29CQUM1RCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMxQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2hDLG1GQUFtRjtvQkFDbkYsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDLEVBQ0QsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxDQUFDLENBQ0YsQ0FBQzthQUNMO1lBQ0QsT0FBTyw0QkFBNEIsQ0FBQyxRQUFRLENBQUM7O0tBQzlDO0lBRUQscUJBQXFCLENBQ25CLFNBQStCLEVBQy9CLElBQWUsRUFDZixrQkFBMkI7O1FBRTNCLHFHQUFxRztRQUNyRyxJQUFJLFNBQVMsSUFBSSxDQUFBLE1BQUEsTUFBQSxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssMENBQUUsV0FBVywwQ0FBRSxFQUFFLE9BQUssSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEVBQUUsQ0FBQSxFQUFFO1lBQ3RFLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3RCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNoRTtZQUVELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzNCLFVBQVUsQ0FBQyw4QkFBOEIsRUFDekMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQ3RCO2dCQUNFLFVBQVUsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXO2dCQUMvQyxXQUFXLEVBQUUsSUFBSTthQUNsQixDQUNGLENBQUM7U0FDSDtRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQseUJBQXlCLENBQ3ZCLFNBQStCLEVBQy9CLFVBQXVCLEVBQ3ZCLHVCQUErQjtRQUUvQixJQUFJLGNBQWMsR0FBWSxLQUFLLENBQUM7UUFDcEMsSUFBSSxXQUFXLEdBQVcsRUFBRSxDQUFDO1FBQzdCLElBQUksY0FBYyxHQUFhLEVBQUUsQ0FBQztRQUNsQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBa0IsRUFBRSxFQUFFO1lBQ2pFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBVSxFQUFFLEVBQUU7Z0JBQ2xDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFrQixFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFFMUYsSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDaEIsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkIsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQzlCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFvQixFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQzdELGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ25DO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJO1lBQ0YsY0FBYyxHQUFHLGNBQWMsQ0FBQyxNQUFNLElBQUksdUJBQXVCLENBQUM7U0FDbkU7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsMENBQTBDLEtBQUssTUFBTSxDQUFDLENBQUM7U0FDdEU7UUFFRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzNCLFVBQVUsQ0FBQyxvQ0FBb0MsRUFDL0MsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQ3RCO2dCQUNFLFlBQVksRUFBRSxXQUFXO2dCQUN6QixVQUFVLEVBQUUsVUFBVTthQUN2QixDQUNGLENBQUM7U0FDSDtRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsVUFBVSxDQUFDLEVBQVUsRUFBRSxZQUFxQixLQUFLOztRQUMvQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxFQUFFO1lBQzNCLFNBQVMsR0FBRyxJQUFJLGNBQWMsQ0FDNUI7Z0JBQ0UsRUFBRTtnQkFDRixXQUFXLEVBQUUsRUFBRTthQUNDLEVBQ2xCLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxFQUNKLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxlQUFlLEVBQ3BCLElBQUksQ0FBQyx1QkFBdUIsQ0FDN0IsQ0FBQztZQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FRMUQsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFBLE1BQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLEtBQUssMENBQUUsTUFBTSxNQUFJLE1BQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLE9BQU8sMENBQUUsTUFBTSxDQUFBLEVBQUU7WUFDcEUsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDO1NBQzdDO1FBRUQsSUFBSSxDQUFDLGFBQWE7YUFDZixRQUFRLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUM5RSxTQUFTLENBQUMsQ0FBQyxTQUEyQixFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFnQixTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQVUsRUFBRSxRQUFpQztRQUM1RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksU0FBUyxFQUFFO1lBQ2IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsRUFBVTtRQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVc7YUFDaEMsTUFBTSxDQUFDLENBQUMsVUFBc0IsRUFBVyxFQUFFO1lBQzFDLE9BQU8sVUFBVSxDQUFDLCtCQUErQixLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2hGLENBQUMsQ0FBQzthQUNELE9BQU8sQ0FBQyxDQUFDLFVBQXNCLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUdHLGdCQUFnQixDQUFDLFFBQWdCLEVBQUUsSUFBNkI7OztZQUNwRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLElBQUksU0FBUyxHQUF5QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRWhFLElBQUksQ0FBQSxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxPQUFPLDBDQUFFLElBQUksTUFBSyxXQUFXLENBQUMsS0FBSyxFQUFFO2dCQUM3QyxNQUFNLFVBQVUsR0FBRyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBc0IsRUFBRSxFQUFFO29CQUN4RixPQUFPLENBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPO3dCQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87d0JBQ25FLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQ3RFLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFFO29CQUMxQixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsRUFBRTt3QkFDbkUsUUFBUSxFQUFFLFFBQVE7cUJBQ25CLENBQUMsQ0FBQztvQkFFSCxLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRTt3QkFDN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsMkJBQTJCOzZCQUNyRCxTQUFTLENBQUM7NEJBQ1QsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVk7NEJBQ3BDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRTt5QkFDcEIsQ0FBQzs2QkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUNiLFNBQVMsRUFBRSxDQUFDO3dCQUVmLElBQUksU0FBUyxFQUFFOzRCQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDOzRCQUN0QixTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsSUFBSSxpQ0FDVixTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssR0FDdkIsU0FBUyxFQUNaLENBQUM7NEJBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDcEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt5QkFDekM7cUJBQ0Y7aUJBQ0Y7cUJBQU07b0JBQ0wsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsMkJBQTJCO3lCQUNyRCxTQUFTLENBQUM7d0JBQ1QsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVk7d0JBQ3BDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRTtxQkFDcEIsQ0FBQzt5QkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNiLFNBQVMsRUFBRSxDQUFDO29CQUVmLElBQUksU0FBUyxFQUFFO3dCQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUN0QixTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsSUFBSSxpQ0FDVixTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssR0FDdkIsU0FBUyxFQUNaLENBQUM7d0JBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDcEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDekM7aUJBQ0Y7YUFDRjtpQkFBTTtnQkFDTCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQywyQkFBMkI7cUJBQ3JELFNBQVMsQ0FBQztvQkFDVCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWTtvQkFDcEMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFO2lCQUNwQixDQUFDO3FCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2IsU0FBUyxFQUFFLENBQUM7Z0JBRWYsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ3RCLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxJQUFJLGlDQUNWLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUN2QixTQUFTLEVBQ1osQ0FBQztvQkFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNwQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUN6QzthQUNGOztLQUNGO0lBR2MsZ0JBQWdCLENBQzNCLGtCQUEyQixLQUFLLEVBQ2hDLFVBQW1CLEtBQUssRUFDeEIsZUFBd0IsS0FBSzs7WUFFN0IsT0FBTyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQzVGLElBQUksQ0FBQyxFQUFFO2dCQUNMLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDO0tBQUE7SUFFTyxVQUFVLENBQUMsRUFBVTtRQUMzQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBNEIsRUFBRSxFQUFFO1lBQy9ELE9BQU8sTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRWEsa0JBQWtCLENBQzlCLEVBQVcsRUFDWCxrQkFBMkIsS0FBSyxFQUNoQyxlQUF3QixLQUFLOztZQUU3QixJQUFJLE1BQU0sR0FBeUIsSUFBSSxDQUFDO1lBRXhDLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ1AsSUFBSSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQzVFLENBQUM7Z0JBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFO29CQUMxQiw4SEFBOEg7b0JBQzlILGNBQWMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3ZFO2dCQUNELGlEQUFpRDtnQkFDakQsK0JBQStCO2dCQUMvQixJQUFJLENBQUMsQ0FBQSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsTUFBTSxDQUFBLEVBQUU7b0JBQzNCLCtEQUErRDtvQkFDL0QsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7aUJBQ3ZEO3FCQUFNO29CQUNMLDhFQUE4RTtvQkFDOUUsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUUvQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxlQUFlLEVBQUU7d0JBQ2hFLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUVBQW1FLENBQUMsQ0FBQzt3QkFDbEYsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDbEM7b0JBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUN4QzthQUNGO2lCQUFNO2dCQUNMLHNFQUFzRTtnQkFDdEUsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRTtvQkFDbEQsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7aUJBQ3ZEO3FCQUFNO29CQUNMLG9EQUFvRDtvQkFDcEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDOUMsS0FBSyxDQUFDLEVBQUUsZUFBQyxPQUFBLENBQUEsTUFBQSxNQUFBLEtBQUssQ0FBQyxPQUFPLDBDQUFFLEtBQUssMENBQUUsTUFBTSxNQUFLLFlBQVksQ0FBQyxJQUFJLENBQUEsRUFBQSxDQUM1RCxDQUFDO29CQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDdkMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzdCLHFEQUFxRDtpQkFDdEQ7YUFDRjtZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQUVZLFlBQVksQ0FDdkIsZ0JBQXlCLEtBQUssRUFDOUIsZUFBd0IsS0FBSzs7WUFFN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxNQUFNLE1BQU0sR0FBcUI7Z0JBQy9CLEVBQUUsRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO2dCQUN2QyxLQUFLLEVBQUUsSUFBSTtnQkFDWCxTQUFTLEVBQUUsSUFBSTtnQkFDZixLQUFLLEVBQUUsSUFBSTtnQkFDWCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxTQUFTLEVBQUUsSUFBSTtnQkFDZixTQUFTLEVBQUUsSUFBSTtnQkFDZixXQUFXLEVBQUUsRUFBRTtnQkFDZixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsS0FBSzthQUNqQixDQUFDO1lBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQ2xDLE1BQU0sRUFDTixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksRUFDSixJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLENBQUMsZUFBZSxFQUNwQixJQUFJLENBQUMsdUJBQXVCLENBQzdCLENBQUM7WUFDRix3R0FBd0c7WUFFeEcsaUVBQWlFO1lBQ2pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDckYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkMsMENBQTBDO1lBRTFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzQyxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO0tBQUE7SUFFTyxnQkFBZ0IsQ0FDdEIsU0FBK0IsRUFDL0IsYUFBc0IsRUFDdEIsWUFBcUI7O1FBRXJCLE1BQU0sV0FBVyxHQUFnQixDQUFBLE1BQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLDBDQUFFLEVBQUU7WUFDeEQsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLDBDQUFFLEVBQUUsRUFBRTtZQUM1QyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsTUFBTSxRQUFRLG1DQUF1QyxXQUFXLEtBQUUsYUFBYSxFQUFFLFlBQVksR0FBRSxDQUFDO1FBRWhHLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLGFBQWE7aUJBQ2YsU0FBUyxDQUFDLFFBQVEsQ0FBQztpQkFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDYixTQUFTLENBQ1IsQ0FBQyxNQUF3QixFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLFNBQVMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDekIsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdkIsd0RBQXdEO2dCQUN4RCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtvQkFDeEUsbUVBQW1FO29CQUNuRSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO3dCQUN6QixnREFBZ0Q7d0JBQ2hELE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDbkIsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO3FCQUM1QjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsRUFDRCxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQixDQUFDLEVBQ0QsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUNULENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGFBQWEsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxhQUFhLENBQUMsSUFBSSxFQUFFO1lBQ2hGLElBQUksQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQztTQUNwQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUM7SUFDckMsQ0FBQztJQUVELHFCQUFxQixDQUFDLFdBQXlCO1FBQzdDLElBQUksY0FBYyxHQUFzQixJQUFJLENBQUM7UUFDN0MsSUFBSSxvQkFBb0IsR0FBc0IsSUFBSSxDQUFDO1FBRW5ELENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN2QyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xELG9CQUFvQixHQUFHLGNBQWMsQ0FBQztnQkFDdEMsY0FBYyxHQUFHLFVBQVUsQ0FBQzthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0VBQWdFO1FBQ2hFLElBQ0UsY0FBYztZQUNkLGNBQWMsQ0FBQyxXQUFXLENBQUMsVUFBVTtZQUNyQyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNLEVBQzlEO1lBQ0EsT0FBTyxvQkFBb0IsSUFBSSxjQUFjLENBQUM7U0FDL0M7UUFFRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsMkJBQTJCLENBQUMsV0FBeUI7UUFDbkQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakUsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQy9CLENBQUMsV0FBNEMsRUFBRSxVQUFzQixFQUFFLEVBQUU7WUFDdkUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsTUFBTSxFQUFFO2dCQUNsRCxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUM7YUFDbkQ7aUJBQU0sSUFBSSxnQkFBZ0IsRUFBRTtnQkFDM0IsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQzthQUNwRDtZQUNELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUMsRUFDRCxFQUFxQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUErQjtRQUNsRCxNQUFNLGNBQWMsR0FBWSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxRSxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsbUZBQW1GO1FBQ25GLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEIsa0RBQWtEO1FBRWxELHlDQUF5QztRQUN6QyxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLGNBQW1CLEVBQUUsRUFBRTtZQUNwRCxJQUFJLE9BQU8sY0FBYyxLQUFLLFFBQVEsSUFBSSxjQUFjLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUN0RixjQUFjLEdBQUcsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQy9DO1lBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQ0FBbUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxHQUFHLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7WUFDaEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUVILEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUgsR0FBRyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUVILEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0RSxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFM0Usb0dBQW9HO1FBQ3BHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMzQyxNQUFNLEtBQUssR0FBRyxxQ0FBcUMsY0FBYyxDQUFDLElBQUksaUJBQWlCLENBQUM7WUFDeEYsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDL0QsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkQsT0FBTyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLGdDQUFnQyxjQUFjLENBQUMsSUFBSSxpQkFBaUIsQ0FBQztZQUNuRixPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUQsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDMUYsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsU0FBK0IsSUFBSTtRQUN6RCxNQUFNLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsWUFBWSxDQUFDLFFBQWdCO1FBQzNCLElBQUksUUFBUSxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM5RCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFPLEVBQUU7O2dCQUMzQixNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLDBDQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3RDLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztpQkFDOUI7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDeEQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDM0QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsMkNBQTJDO2dCQUUzQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBRXZDLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLDBDQUFFLEVBQUUsS0FBSSxJQUFJLENBQUM7aUJBQzNEO2dCQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FDSCxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQ25CLFdBQWtCLEVBQ2xCLFdBQXFCLEVBQ3JCLGFBQStDOztRQUUvQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RSxNQUFNLFVBQVUsR0FDZCxhQUFhLENBQUMsOEJBQThCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsRSxNQUFNLElBQUksR0FBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxRQUFRLDBDQUFFLElBQUksQ0FBQztRQUNwQyxNQUFNLFFBQVEsR0FBRyxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxLQUFLLENBQUMsR0FBRyxDQUFDLDBDQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQ0UsVUFBVTtZQUNWLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFDN0U7WUFDQSxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO2dCQUNqQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9CO2lCQUFNO2dCQUNKLGFBQWEsQ0FBQyxRQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQywwQkFBMEIsQ0FDekUsaUJBQWlCLENBQ2xCLENBQUM7Z0JBQ0YsSUFDRSxVQUFVLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxLQUFLO3FCQUNyQyxNQUFBLE1BQUEsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLDBDQUFFLGFBQWEsMENBQUUsTUFBTSxDQUFBLEVBQ2hFO29CQUNBLDRHQUE0RztvQkFDNUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDL0I7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDL0I7YUFDRjtTQUNGO2FBQU07WUFDTCxPQUFPLFdBQVcsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRCxhQUFhLENBQ1gsUUFBZ0IsRUFDaEIsVUFBc0IsRUFDdEIsVUFBdUIsRUFDdkIsUUFBZ0IsQ0FBQztRQUVqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDN0IsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sYUFBYSxHQUFrQixTQUFTLENBQUMsT0FBTztnQkFDcEQsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLO2dCQUNyQixDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVE7b0JBQ3BCLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTTtvQkFDdEIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFFeEIsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO2dCQUNuQixJQUFJLENBQUMsb0JBQW9CO3FCQUN0QixTQUFTLENBQUM7b0JBQ1QsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVk7b0JBQ3BDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRTtvQkFDekIsTUFBTSxFQUFFO3dCQUNOOzRCQUNFLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRTs0QkFDaEIsYUFBYTt5QkFDZDtxQkFDRjtpQkFDRixDQUFDO3FCQUNELFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxtQkFBbUI7cUJBQ3JCLFNBQVMsQ0FBQztvQkFDVCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWTtvQkFDcEMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFO29CQUN6QixLQUFLLEVBQUU7d0JBQ0w7NEJBQ0UsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFOzRCQUNoQixhQUFhO3lCQUNkO3FCQUNGO29CQUNELGdCQUFnQixFQUFFLEtBQUs7aUJBQ3hCLENBQUM7cUJBQ0QsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWE7aUJBQ2YsUUFBUSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO2lCQUNqRSxTQUFTLENBQ1IsQ0FBQyxPQUE0QixFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxpQ0FBTSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBSyxPQUFPLEVBQUcsQ0FBQztZQUMvRCxDQUFDLEVBQ0QsQ0FBQyxDQUFDLEVBQUUsR0FBRSxDQUFDLEVBQ1AsR0FBRyxFQUFFO2dCQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQ0YsQ0FBQztTQUNMO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUNkLFFBQWdCLEVBQ2hCLFVBQXNCLEVBQ3RCLFVBQXFCLEVBQ3JCLFFBQWdCLENBQUMsRUFDakIsb0JBQXVDLGlCQUFpQixDQUFDLElBQUk7UUFFN0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDO2dCQUN4QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDcEMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFO2dCQUNqQixXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQUU7Z0JBQzFCLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCLGlCQUFpQixFQUFFLGlCQUFpQjthQUNyQyxDQUFDLENBQUMsU0FBUyxDQUNWLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFDUixHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQ1IsR0FBRyxFQUFFO2dCQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLENBQUMsQ0FDRixDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhO2lCQUNmLFFBQVEsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztpQkFDakUsU0FBUyxDQUNSLENBQUMsT0FBNEIsRUFBRSxFQUFFO2dCQUMvQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksaUNBQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUssT0FBTyxFQUFHLENBQUM7WUFDL0QsQ0FBQyxFQUNELENBQUMsQ0FBQyxFQUFFLEdBQUUsQ0FBQyxFQUNQLEdBQUcsRUFBRTtnQkFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUNGLENBQUM7U0FDTDtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsUUFBZ0IsRUFBRSxHQUE4QjtRQUMzRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzNDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUN6QixDQUFDLE1BQXFCLEVBQUUsRUFBRTtnQkFDeEIsOExBQThMO2dCQUM5TCxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO29CQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDakUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDNUMsNkJBQTZCO29CQUM3QixTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztvQkFDNUMsT0FBTyxFQUFFLENBQUM7Z0JBQ1osQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsQ0FBQyxFQUNELENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzVDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hCLENBQUMsRUFDRCxHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDOUIsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFSyxVQUFVLENBQUMsUUFBZ0I7O1lBQy9CLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FDckIsUUFBUSxFQUNSLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUM7Z0JBQ3JDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUNwQyxFQUFFLEVBQUUsUUFBUTtnQkFDWixnQkFBZ0IsRUFBRSxJQUFJO2FBQ3ZCLENBQUMsQ0FDSCxDQUFDO1lBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxDQUFDO0tBQUE7SUFFRCxvRkFBb0Y7SUFDcEYsOENBQThDO0lBQzlDLDhGQUE4RjtJQUM5RixRQUFRO0lBQ1IsSUFBSTtJQUVKLGNBQWMsQ0FBQyxRQUFnQixFQUFFLElBQWdCO1FBQy9DLElBQUksQ0FBQyxZQUFZLENBQ2YsUUFBUSxFQUNSLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7WUFDbkMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDcEMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ1osQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsb0JBQW9CLENBQUMsWUFBb0I7UUFDdkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxNQUFNLEtBQUssR0FBRztnQkFDWixZQUFZO2FBQ2IsQ0FBQztZQUNGLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUssZ0JBQWdCLENBQUMsUUFBZ0I7O1lBQ3JDLE1BQU0sS0FBSyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDM0IsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDOUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRUQsbUJBQW1CLENBQ2pCLElBQVksRUFDWixJQUFZLEVBQ1osU0FBbUMsRUFDbkMsU0FBa0IsRUFDbEIsY0FBdUIsRUFDdkIsZ0JBQXlCO1FBRXpCLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEIsTUFBTSxnQkFBZ0IsR0FDcEIsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLFFBQVEsQ0FBQztZQUM3QyxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLEtBQUssRUFBRSxJQUFJO1lBQ1gsMEJBQTBCLEVBQUUsY0FBYztZQUMxQyxnQkFBZ0I7U0FDakIsQ0FBQyxDQUFDO1FBQ0wsTUFBTSxnQkFBZ0IsR0FDcEIsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLFFBQVEsQ0FBQztZQUM3QyxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLEtBQUssRUFBRSxJQUFJO1lBQ1gsMEJBQTBCLEVBQUUsY0FBYztZQUMxQyxnQkFBZ0I7U0FDakIsQ0FBQyxDQUFDO1FBRUwsT0FBTyxRQUFRLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN4RCxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFO1lBQzdCLElBQUksY0FBYyxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztZQUNsRCxjQUFjLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FDcEMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUNwRixDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUU1QixTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLEVBQThCO1FBQzFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUE4QixFQUFFLEVBQUU7O1lBQ3ZELElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ25GLHNDQUFzQztnQkFDdEMsR0FBRyxDQUFDLElBQUksQ0FBQztvQkFDUCxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7b0JBQ2IsU0FBUyxFQUNQLElBQUksQ0FBQyxjQUFjLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLDBDQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDcEYsV0FBVyxFQUNULElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxLQUFJLE1BQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsMENBQUUsS0FBSyxDQUFBO29CQUMvRSxvQkFBb0IsRUFBRSxLQUFLO2lCQUM1QixDQUFDLENBQUM7Z0JBQ0gsSUFBSTthQUNMO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBdUIsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxtQkFBbUIsQ0FDakIsUUFBb0MsRUFDcEMsS0FBOEI7UUFFOUIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBa0MsRUFBRSxFQUFFOztZQUM1RCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3JELENBQUMsRUFBNEIsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FDdkUsQ0FBQztZQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFO2dCQUM3QixPQUFPLElBQUksQ0FBQzthQUNiO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQSxNQUFBLFVBQVUsQ0FBQyxhQUFhLDBDQUFFLFNBQVMsT0FBSyxNQUFBLFFBQVEsQ0FBQyxhQUFhLDBDQUFFLFNBQVMsQ0FBQSxDQUFDO2FBQ2xGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUssVUFBVSxDQUNkLFFBQWdCLEVBQ2hCLE9BQXNGOztZQUV0RixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDakQsTUFBTSxLQUFLLEdBQWlDO2dCQUMxQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLHFCQUFxQjtnQkFDbkUsa0JBQWtCLEVBQUUsRUFBRTtnQkFDdEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO2FBQzNCLENBQUM7WUFDRixNQUFNLFNBQVMsR0FBc0IsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sU0FBUyxHQUFzQixFQUFFLENBQUM7WUFDeEMsTUFBTSxVQUFVLEdBQXNCLEVBQUUsQ0FBQztZQUV6QyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBOEIsRUFBRSxFQUFFO2dCQUN0RCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FDL0MsS0FBSyxDQUFDLFNBQXVDLEVBQzdDLEtBQUssQ0FDTixDQUFDO2dCQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFFeEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUNsRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQzNDLFVBQVUsQ0FBQyxjQUE0QyxFQUN2RCxLQUFLLENBQ04sQ0FBQztvQkFDRixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxDQUFDLENBQUMsQ0FBQztnQkFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQ3JDLENBQUMsVUFBMEQsRUFBRSxFQUFFO29CQUM3RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQzNDLFVBQVUsQ0FBQyxjQUE0QyxFQUN2RCxLQUFLLENBQ04sQ0FBQztvQkFDRixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDLENBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLGtCQUFrQixHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztZQUN2RSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDcEQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzVDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDbEQsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3pDO1FBQ0gsQ0FBQztLQUFBO0lBRUQsNEJBQTRCLENBQzFCLFFBQWdCLEVBQ2hCLHlCQUF1RDtRQUV2RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLGtCQUFrQjtpQkFDcEIsU0FBUyxDQUFDLHlCQUF5QixDQUFDO2lCQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNiLFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBTyxNQUFjLEVBQUUsRUFBRTtvQkFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDdkMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekIsQ0FBQyxDQUFBO2dCQUNELEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDYixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQixDQUFDO2dCQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVCLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUM7YUFDRixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQ1QsYUFBc0IsS0FBSyxFQUMzQixrQkFBdUQ7UUFFdkQsTUFBTSxLQUFLLEdBQUc7WUFDWixpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUNwQyxrQkFBa0I7WUFDbEIsZ0JBQWdCLEVBQUUsVUFBVTtTQUM3QixDQUFDO1FBQ0YsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsa0JBQWtCO2lCQUNwQixTQUFTLENBQUMsS0FBSyxDQUFDO2lCQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNiLFNBQVMsQ0FDUixDQUFDLE1BQWMsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUIsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QixDQUFDLEVBQ0QsS0FBSyxDQUFDLEVBQUU7Z0JBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQixDQUFDLEVBQ0QsR0FBRyxFQUFFO2dCQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FDRixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMEJBQTBCLENBQ3hCLE1BQXFCLEVBQ3JCLFVBQXNCLEVBQ3RCLGFBQXFCO1FBRXJCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FDdEIsTUFBTSxDQUFDLEVBQUUsRUFDVCxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDO1lBQ3JDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ3BDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRTtZQUN6QixhQUFhO1NBQ2QsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBQ0Qsa0NBQWtDLENBQ2hDLFVBQXNCLEVBQ3RCLGFBQXFCO1FBRXJCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQztZQUM1QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUNwQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDekIsYUFBYTtTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxVQUFVLENBQ1IsUUFBZ0IsRUFDaEIsaUJBQTZDLEVBQzdDLGVBQXlCLEVBQ3pCLGFBQXNCO1FBRXRCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCO2FBQzFCLFNBQVMsQ0FBQztZQUNULGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ3BDLEVBQUUsRUFBRSxRQUFRO1lBQ1osaUJBQWlCO1lBQ2pCLGVBQWU7WUFDZixhQUFhO1NBQ2QsQ0FBQzthQUNELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLEVBQUU7YUFDWCxJQUFJLENBQ0gsQ0FBQyxNQUFxQixFQUFFLEVBQUU7O1lBQ3hCLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtnQkFDbkMsSUFBSSxDQUFBLE1BQUEsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGFBQWEsMENBQUUsWUFBWSwwQ0FBRSxJQUFJLDBDQUFFLE9BQU8sMENBQUUsbUJBQW1CLE1BQUssS0FBSyxFQUFFO29CQUNsRixPQUFPLENBQUMsS0FBSyxDQUFDLG1FQUFtRSxDQUFDLENBQUM7b0JBQ25GLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO29CQUNyRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2xDLE1BQU07aUJBQ1A7YUFDRjtZQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDL0MsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1lBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbEQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFFdEYsSUFBSSxhQUFhLEVBQUU7b0JBQ2pCLGFBQWEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7b0JBQ3BELGFBQWEsQ0FBQywwQkFBMEI7d0JBQ3RDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUM7b0JBQ25ELGFBQWEsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7b0JBQzVELGFBQWEsQ0FBQyxhQUFhO3dCQUN6QixDQUFBLE1BQUEsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsMENBQUUsYUFBYSxLQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUM7aUJBQ3ZFO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxLQUFLLENBQ1gsMkNBQTJDLG1CQUFtQixDQUFDLEVBQUUsTUFBTSxDQUN4RSxDQUFDO2lCQUNIO2FBQ0Y7WUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUMxQixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxFQUNELENBQU8sS0FBVSxFQUFFLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ3hDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUNwQyxFQUFFLEVBQUUsUUFBUTtnQkFDWixnQkFBZ0IsRUFBRSxJQUFJO2FBQ3ZCLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUEsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELGNBQWMsQ0FBQyxnQkFBd0IsRUFBRSxVQUFzQixFQUFFLGdCQUF3QjtRQUN2RixJQUFJLENBQUMsMEJBQTBCO2FBQzVCLFNBQVMsQ0FBQztZQUNULGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ3BDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRTtZQUN6QixTQUFTLEVBQUUsZ0JBQWdCO1NBQzVCLENBQUM7YUFDRCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUFnQixFQUFFLEtBQWE7UUFDL0MsSUFBSSxDQUFDLFlBQVksQ0FDZixRQUFRLEVBQ1IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQztZQUN0QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUNwQyxFQUFFLEVBQUUsUUFBUTtZQUNaLEtBQUs7U0FDTixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUFnQixFQUFFLEtBQWE7UUFDL0MsSUFBSSxDQUFDLFlBQVksQ0FDZixRQUFRLEVBQ1IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQztZQUN0QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUNwQyxFQUFFLEVBQUUsUUFBUTtZQUNaLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUNELFNBQVMsQ0FBQyxLQUlUO1FBQ0MsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FJaEI7UUFDQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELG1CQUFtQixDQUNqQixZQUFvQixFQUNwQixNQUFjLEVBQ2QsT0FBZTtRQUVmLE9BQU8sSUFBSSxDQUFDLDBCQUEwQjthQUNuQyxTQUFTLENBQUM7WUFDVCxVQUFVLEVBQUUsWUFBWTtZQUN4QixNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU07WUFDTixNQUFNLEVBQUUsS0FBSztZQUNiLEtBQUssRUFBRSxPQUFPO1lBQ2QsS0FBSyxFQUFFLGNBQWM7U0FDdEIsQ0FBQzthQUNELElBQUksQ0FDSCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDWCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNqRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBRTVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLHFFQUFxRTtRQUNyRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDaEcsQ0FBQztJQUVNLGNBQWMsQ0FBQyxLQUFhOztRQUNqQyxNQUFNLGVBQWUsR0FBRyxDQUFBLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQywwQ0FBRSxPQUFPLDBDQUFFLEtBQUssMENBQUUsTUFBTSxLQUFJLEVBQUUsQ0FBQztRQUNoRixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksZUFBZSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUM7WUFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSztnQkFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDbkU7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDbkM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFOztZQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQywwQ0FBRSxPQUFPLDBDQUFFLEtBQUssMENBQUUsV0FBVyxDQUNoRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUM5QyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQywwQ0FBRSxPQUFPLDBDQUFFLEtBQUssMENBQUUsV0FBVyxDQUM5RCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUM5QyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUNwRSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUNuQyxDQUFDLENBQ0YsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsU0FBUyxDQUFDLFVBQXNCO1FBQzlCLDRJQUE0STtRQUM1SSxJQUNFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ3ZFLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDaEQsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsS0FBSztnQkFDNUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUN4RSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFDdEU7WUFDQSxPQUFPLEVBQUUsQ0FBQztnQkFDUixXQUFXLEVBQUUsS0FBSztnQkFDbEIsZUFBZSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksRUFBRSwyQkFBMkI7YUFDbEMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUNFLFVBQVUsQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLENBQUMsTUFBTTtZQUM3QyxVQUFVLENBQUMsTUFBTSxLQUFLLGdCQUFnQixDQUFDLGtCQUFrQixFQUN6RDtZQUNBLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7WUFDakMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQztnQkFDOUQsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFO2FBQzFCLENBQUMsQ0FBQztZQUNILGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ3BDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNYLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsQ0FBQyxDQUFFLENBQUM7WUFDSixPQUFPLGNBQWMsQ0FBQztTQUN2QjtRQUVELE9BQU8sRUFBRSxDQUFDO1lBQ1IsV0FBVyxFQUFFLEtBQUs7WUFDbEIsZUFBZSxFQUFFLENBQUM7WUFDbEIsSUFBSSxFQUFFLG1CQUFtQjtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDL0QsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLE1BQU0sRUFBRTtnQkFDdkQsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNsQjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1AsMkNBQTJDO1FBRTNDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsY0FBYzs7UUFDWixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUN4RSxNQUFNLEtBQUssR0FBRyxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxZQUFZLEtBQUksRUFBRSxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLENBQUEsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsa0JBQWtCLDBDQUFFLFdBQVc7WUFDekQsQ0FBQyxDQUFDLEdBQUcsSUFBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxrQkFBa0IsMENBQUUsV0FBVyxDQUFBO1lBQy9DLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxNQUFNLE1BQU0sR0FBRyxDQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGtCQUFrQiwwQ0FBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGtCQUFrQiwwQ0FBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RixNQUFNLFFBQVEsR0FBRyxDQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGtCQUFrQiwwQ0FBRSxRQUFRO1lBQ25ELENBQUMsQ0FBQyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxrQkFBa0IsMENBQUUsUUFBUTtZQUN0QyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3BCLFVBQVUsQ0FBQyxtQkFBbUIsRUFDOUIsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQ3RCO1lBQ0UsS0FBSyxFQUNILDJGQUEyRjtZQUM3RixPQUFPLEVBQUUsSUFBSTtZQUNiLEtBQUs7WUFDTCxNQUFNLEVBQUUsR0FBRyxXQUFXLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRTtTQUMvQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNwQixVQUFVLENBQUMsbUJBQW1CLEVBQzlCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUN0QjtZQUNFLEtBQUssRUFDSCwwR0FBMEc7U0FDN0csQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLDBCQUEwQixDQUFDLFFBQWdCLEVBQUUsSUFBWTtRQUM5RCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU0sd0JBQXdCLENBQUMsUUFBZ0I7UUFDOUMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLFVBQVUsQ0FBQyxTQUFpQjtRQUNqQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRU0sb0JBQW9CLENBQUMsWUFBb0I7UUFDOUMsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVNLG1CQUFtQixDQUN4QixZQUFvQixFQUNwQixVQUFrQixFQUNsQixJQUFZO1FBRVosT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsU0FBUyxDQUFDO1lBQzlDLFVBQVUsRUFBRSxZQUFZO1lBQ3hCLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLElBQUk7U0FDTCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sY0FBYyxDQUFDLFFBQWdCLEVBQUUsTUFBZSxFQUFFLElBQWE7UUFDcEUsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRU0scUJBQXFCLENBQzFCLFFBQWdCLEVBQ2hCLE1BQWMsRUFDZCxJQUFhO1FBRWIsT0FBTyxJQUFJLENBQUMsNEJBQTRCLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVNLGVBQWUsQ0FDcEIsa0JBQW1DLGVBQWUsQ0FBQyxHQUFHO1FBRXRELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVNLGNBQWMsQ0FBQyxFQUFVLEVBQUUsZUFBZSxHQUFHLEtBQUs7UUFDdkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEIsVUFBVSxDQUFDLDRCQUE0QixFQUN2QyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUN0QyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQ2pCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSw2QkFBNkIsQ0FBQyxNQUFjO1FBQ2pELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVNLFlBQVk7UUFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVNLHNCQUFzQixDQUFDLEVBQVU7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUF3QjtRQUN0QyxPQUFPLElBQUksY0FBYyxDQUN2QixNQUFNLEVBQ04sSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLEVBQ0osSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLHVCQUF1QixDQUM3QixDQUFDO0lBQ0osQ0FBQztJQUVELHFCQUFxQixDQUNuQixhQUFxQixFQUNyQixlQUF1QixFQUN2QixjQUFpQyxFQUNqQyxRQUF5QixFQUN6QixLQUFjO1FBRWQsOERBQThEO1FBQzlELE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLFNBQVMsQ0FBQztZQUNqRCxhQUFhO1lBQ2IsZUFBZTtZQUNmLFFBQVE7WUFDUixjQUFjO1lBQ2QsS0FBSztTQUNOLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFSyx3QkFBd0IsQ0FBQyxNQUFjOztZQUMzQyxvRkFBb0Y7WUFDcEYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0RCxPQUFPLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFPLFNBQWMsRUFBRSxFQUFFO2dCQUNqRSxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FDM0MsQ0FBQyxFQUFFLEtBQUssRUFBUSxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQ3ZFLENBQUM7Z0JBQ0YsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7b0JBQzVCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzNDLFVBQVUsQ0FBQyx1QkFBdUIsRUFDbEM7d0JBQ0UsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLFdBQVcsRUFBRSx3QkFBd0I7d0JBQ3JDLFFBQVEsRUFBRSxJQUFJO3FCQUNmLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxDQUN0QixDQUFDO29CQUVGLElBQUksUUFBUSxFQUFFO3dCQUNaLE9BQU8sSUFBSSxDQUFDLDJCQUEyQjs2QkFDcEMsU0FBUyxDQUFDOzRCQUNULE1BQU07NEJBQ04sUUFBUTt5QkFDVCxDQUFDOzZCQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDaEIsT0FBTyxJQUFJLENBQUM7d0JBQ2QsQ0FBQyxDQUFDLENBQUM7cUJBQ047aUJBQ0Y7WUFDSCxDQUFDLENBQUEsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRUQsZ0JBQWdCO1FBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzFELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0RCxPQUFPLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxNQUFjO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM3RSxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsY0FBYyxDQUNaLE1BQWMsRUFDZCxRQUFnQixFQUNoQixpQkFBMEI7UUFFMUIsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsU0FBUyxDQUFDO1lBQ2hELE1BQU07WUFDTixRQUFRO1lBQ1IsaUJBQWlCO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx5QkFBeUIsQ0FDdkIsTUFBYyxFQUNkLG1CQUE2QjtRQUU3QixPQUFPLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxTQUFTLENBQUM7WUFDM0QsTUFBTTtZQUNOLG1CQUFtQjtTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsb0JBQW9CLENBQ2xCLE1BQWMsRUFDZCxRQUFnQixFQUNoQixpQkFBMEI7UUFFMUIsT0FBTyxJQUFJLENBQUMsaUNBQWlDLENBQUMsU0FBUyxDQUFDO1lBQ3RELE1BQU07WUFDTixRQUFRO1lBQ1IsaUJBQWlCO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FDZixTQUFpQixFQUNqQixrQkFBMkIsRUFDM0Isb0JBQTZCLEVBQzdCLHdCQUFpQyxFQUNqQyw2QkFBc0MsRUFDdEMsVUFBZ0IsRUFDaEIsYUFBcUI7UUFFckIsT0FBTyxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsYUFBYSxNQUFNLENBQUMsQ0FBQztRQUUxRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUMzQixVQUFVLENBQUMsdUJBQXVCLEVBQ2xDO1lBQ0UsUUFBUSxFQUFFLFFBQVE7WUFDbEIsV0FBVyxFQUFFLHdCQUF3QjtZQUNyQyxRQUFRLEVBQUUsSUFBSTtTQUNmLEVBQ0Q7WUFDRSxTQUFTO1lBQ1Qsa0JBQWtCO1lBQ2xCLHdCQUF3QjtZQUN4Qiw2QkFBNkI7WUFDN0IsVUFBVTtZQUNWLGFBQWE7WUFDYixvQkFBb0I7U0FDckIsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFnQixFQUFFLFdBQXFCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxjQUFzQjtRQUN6QyxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsNEVBQTRFO0lBQzVFLDZGQUE2RjtJQUM3Rix5U0FBeVM7SUFFelMsdUJBQXVCLENBQUMsYUFBdUIsRUFBRSxNQUFjO1FBQzdELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxzQkFBc0IsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQWM7UUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLHNCQUFzQixDQUFDLENBQUM7UUFFakYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELGVBQWUsQ0FDYixVQUFzQixFQUN0QixXQUFvQixFQUNwQixhQUFzQixFQUN0QixVQUFVLEdBQUcsS0FBSztRQUVsQixJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQ2pELE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQztnQkFDOUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFO2dCQUN6QixXQUFXLEVBQUUsV0FBVztnQkFDeEIsYUFBYSxFQUFFLGFBQWE7Z0JBQzVCLFVBQVU7YUFDWCxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sRUFBRSxDQUFDO1lBQ1IsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQXFCOztRQUN2QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFFLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUM5RCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQy9DLElBQUksa0JBQWtCLEVBQUU7WUFDdEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sY0FBYyxHQUNsQixhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFBLE1BQUEsYUFBYSxDQUFDLENBQUMsQ0FBQywwQ0FBRSxRQUFRLENBQUMsRUFBRSxNQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDaEYsT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUN6QixDQUFDO0lBRUssa0JBQWtCLENBQUMsY0FBc0I7O1lBQzdDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzFCLFVBQVUsQ0FBQyxtQkFBbUIsRUFDOUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUNsRDtnQkFDRSxLQUFLLEVBQUUsRUFBRTtnQkFDVCxJQUFJLEVBQUUsY0FBYztnQkFDcEIsT0FBTyxFQUFFO29CQUNQLFFBQVEsRUFBRSxJQUFJO29CQUNkLFlBQVksRUFBRSxJQUFJO29CQUNsQixZQUFZLEVBQUUsS0FBSztvQkFDbkIsY0FBYyxFQUFFLEdBQUcsRUFBRTt3QkFDbkIsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztpQkFDRjtnQkFDRCxTQUFTLEVBQUUsS0FBSzthQUNqQixDQUNGLENBQUM7WUFFRixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7S0FBQTtJQUVLLGVBQWUsQ0FBQyxFQUFVOztZQUM5QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoRixDQUFDO0tBQUE7SUFFRCx3QkFBd0IsQ0FBQyxTQUFrQjtRQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0MsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVNLDJCQUEyQixDQUFDLFFBQWdCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLGtDQUFrQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELHFCQUFxQixDQUFDLFVBQXNCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBQ0Qsc0JBQXNCLENBQUMsYUFBcUI7UUFDMUMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsd0JBQXdCLENBQ3RCLFVBQWtCLEVBQ2xCLGNBQXVCLEVBQ3ZCLGVBQXdCO1FBRXhCLE9BQU8sSUFBSSxDQUFDLCtCQUErQixDQUFDLFNBQVMsQ0FBQztZQUNwRCxVQUFVO1lBQ1YsY0FBYztZQUNkLGVBQWU7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IEFqdiBmcm9tICdhanYnO1xuaW1wb3J0IGFkZEZvcm1hdHMgZnJvbSAnYWp2LWZvcm1hdHMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBmb3JrSm9pbixcbiAgT2JzZXJ2YWJsZSxcbiAgT2JzZXJ2ZXIsXG4gIG9mLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIGZpcnN0VmFsdWVGcm9tLFxuICBsYXN0VmFsdWVGcm9tXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YWtlLCBtYXAsIGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgQWRkSXRlbVRvQmFza2V0LFxuICBCYXNrZXQsXG4gIEJhc2tldEl0ZW0sXG4gIEJhc2tldEl0ZW1DdXN0b21SZW1hcmssXG4gIEJhc2tldEl0ZW1TdGF0dXMsXG4gIEJhc2tldE5vdGUsXG4gIEJhc2tldFF1b3RlLFxuICBCYXNrZXRTdGF0dXMsXG4gIEJlZm9yZUNhbmNlbGxhdGlvbkluZm8sXG4gIENyZWF0ZUJhc2tldE11dGF0aW9uVmFyaWFibGVzLFxuICBEcmFmdEJhc2tldCxcbiAgTGVhZFBhc3NlbmdlclR5cGUsXG4gIE1hbmFnZW1lbnRJbmZvVmFsdWUsXG4gIFBhc3NlbmdlclR5cGUsXG4gIFNlcnZpY2UsXG4gIFNlcnZpY2VUeXBlLFxuICBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm8sXG4gIFVzZXJJbmZvSW5wdXQsXG4gIFVzZXIsXG4gIEJlZm9yZUFtZW5kSW5mbyxcbiAgQmFza2V0QXBwcm92YWxUaW1lc3RhbXAsXG4gIERyYWZ0QmFza2V0VHlwZSxcbiAgVHJhaW5TZWF0TWFwLFxuICBDYWJIaXJlUXVvdGUsXG4gIFNldE1pVmFsdWVJbnB1dCxcbiAgU2V0TWlWYWx1ZXNNdXRhdGlvblZhcmlhYmxlcyxcbiAgVmFsaWRhdGlvblJlc3BvbnNlLFxuICBDb3B5SW5mb0lucHV0LFxuICBCYXNrZXRJdGVtTWFuYWdlbWVudEluZm8sXG4gIENhckhpcmVWZWhpY2xlQXZhaWxpYmlsaXR5XG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuaW1wb3J0IHtcbiAgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucyxcbiAgRGlmZmVyZW50VHJhdmVsbGVyLFxuICBHZXRVc2VyQmFza2V0SXRlbVJlc3VsdCxcbiAgR2V0VXNlckJhc2tldFJlc3VsdCxcbiAgTWVudVNsaWRlRW51bSxcbiAgVXNlckJhc2tldFJlc3VsdFxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQgeyBNb2RhbFR5cGVzIH0gZnJvbSAnLi4vY2xhc3Nlcy9tb2RhbC10eXBlcy5lbnVtJztcbmltcG9ydCB7IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ltcGwgfSBmcm9tICcuLi9jbGFzc2VzL3N1cHBsZW1lbnRhcnktYm9va2luZy1pbmZvLWltcGwnO1xuaW1wb3J0IHtcbiAgQmFza2V0SW5mb01pRGV0YWlsc0ltcGwsXG59IGZyb20gJy4uL2NsYXNzZXMvYmFza2V0LWluZm8tbWktZGV0YWlscy5pbXBsJztcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4uL2NsYXNzZXMvaGVscGVycyc7XG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2RhbC1vcGVuZXIuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlR2V0VXNlckZldGNoZXIsIFNlYXJjaEdldFVzZXJGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL3VzZXItZmV0Y2hlcic7XG5pbXBvcnQge1xuICBBY2NlcHROZXdQcmljZUZldGNoZXJUeXBlLFxuICBCYXNlQWNjZXB0TmV3UHJpY2VVcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL2FjY2VwdC1uZXctcHJpY2UudXBkYXRlcic7XG5pbXBvcnQgeyBCYXNlR2V0QmFza2V0RmV0Y2hlciwgR2V0QmFza2V0RmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy9iYXNrZXQtZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlR2V0VXNlckJhc2tldHNGZXRjaGVyLFxuICBHZXRVc2VyQmFza2V0c0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2Vycy1iYXNrZXRzLWZldGNoZXInO1xuXG5pbXBvcnQge1xuICBBZGRJdGVtVG9CYXNrZXRGZXRjaGVyVHlwZSxcbiAgQmFzZUFkZEl0ZW1Ub0Jhc2tldFVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvYWRkLWl0ZW0tdG8tYmFza2V0LnVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQWRkVXNlckJhc2tldEZldGNoZXJUeXBlLFxuICBCYXNlQWRkVXNlclRvQmFza2V0SXRlbVVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvYWRkVXNlclRvQmFza2V0SXRlbSc7XG5pbXBvcnQge1xuICBBZGRHdWVzdEJhc2tldEZldGNoZXJUeXBlLFxuICBCYXNlQWRkR3Vlc3RUb0Jhc2tldEl0ZW1VcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL2FkZEd1ZXN0VG9CYXNrZXRJdGVtJztcbmltcG9ydCB7XG4gIFNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyRmV0Y2hlclR5cGUsXG4gIEJhc2VTZXRCYXNrZXRJdGVtTGVhZFBhc3NlbmdlclVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2V0LWJhc2tldC1pdGVtLWxlYWQtcGFzc2VuZ2VyLnVwZGF0ZXInO1xuaW1wb3J0IHsgQmFzZUJvb2tCYXNrZXRVcGRhdGVyLCBCb29rQmFza2V0RmV0Y2hlclR5cGUgfSBmcm9tICcuLi91cGRhdGVycy9ib29rLWJhc2tldC11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VDcmVhdGVCYXNrZXRVcGRhdGVyLFxuICBDcmVhdGVCYXNrZXRGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9jcmVhdGUtYmFza2V0LXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZURlbGV0ZUJhc2tldFVwZGF0ZXIsXG4gIERlbGV0ZUJhc2tldEZldGNoZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS1iYXNrZXQtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlUmVtb3ZlSXRlbUZyb21CYXNrZXRVcGRhdGVyLFxuICBEZWxldGVCYXNrZXRJdGVtRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvcmVtb3ZlLWl0ZW0tZnJvbS1iYXNrZXQudXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlUmV2YWxpZGF0ZUJhc2tldFVwZGF0ZXIsXG4gIFJldmFsaWRhdGVCYXNrZXRGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9yZXZhbGlkYXRlLWJhc2tldC11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VBZGRVcGRhdGVkSXRlbVRvQmFza2V0VXBkYXRlcixcbiAgQWRkVXBkYXRlZEl0ZW1Ub0Jhc2tldFVwZGF0ZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3VwZGF0ZS1iYXNrZXQtaXRlbS51cGRhdGVyJztcblxuaW1wb3J0IHsgVHJhdmVsbGVyLCBUcmF2ZWxsZXJPYmplY3QgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XG5pbXBvcnQgeyBTZWFyY2hPYmplY3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlYXJjaC1vYmplY3RzLmludGVyZmFjZSc7XG5cbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc3VwcGxlbWVudGFyeS1ib29raW5nLWluZm8taW1wbCc7XG5pbXBvcnQge1xuICBCYXNlbW92ZUJhc2tldEl0ZW1Ub0Jhc2tldCxcbiAgTW92ZUl0ZW1Ub0FEaWZmZXJlbnRCYXNrZXRUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL21vdmUtYmFza2V0LWl0ZW0tdG8tYmFza2V0JztcbmltcG9ydCB7XG4gIEJhc2VVcGRhdGVCYXNrZXROb3Rlc1R5cGUsXG4gIEJhc2VVcGRhdGVCYXNrZXROb3RlVXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy91cGRhdGUtYmFza2V0LW5vdGVzLXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZVVwZGF0ZUJhc2tldFRpdGxlVHlwZSxcbiAgQmFzZVVwZGF0ZUJhc2tldFRpdGxlVXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy91cGRhdGUtYmFza2V0LXRpdGxlLXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZVNldFBheW1lbnRPcHRpb25VcGRhdGVyLFxuICBTZXRCYXNrZXRJdGVtUGF5bWVudE1ldGhvZFR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2V0LWJhc2tldC1pdGVtLXBheW1lbnItb3B0aW9uLnVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldENhbmNlbGxhdGlvbkluZm9GZXRjaGVyLFxuICBHZXRDYW5jZWxsYXRpb25JbmZvVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtY2FuY2VsbGF0aW9uLWluZm8uZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlUmVxdWlyZXNSZWFzb25TZXJ2aWNlLFxuICBSZXF1aXJlc1JlYXNvblNlcnZpY2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi9yZXF1aXJlcy1yZWFzb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBCYXNlQ3JlYXRlQmFza2V0Tm90ZVVwZGF0ZXIsXG4gIENyZWF0ZUJhc2tldE5vdGVVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9jcmVhdGUtYmFza2V0LW5vdGUtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlQWRkQmFza2V0SXRlbU1hcmt1cFVwZGF0ZXIsXG4gIEFkZEJhc2tldEl0ZW1NYXJrdXBUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL2FkZC1iYXNrZXQtaXRlbS1tYXJrdXAudXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlQWRkQmFza2V0SXRlbUN1c3RvbVJlbWFya1VwZGF0ZXIsXG4gIEFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcmtVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9hZGQtYmFza2V0LWl0ZW0tY3VzdG9tLXJlbWFyay11cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldEJhc2tldEl0ZW1DdXN0b21SZW1hcmtzRmV0Y2hlcixcbiAgR2V0QmFza2V0SXRlbUN1c3RvbVJlbWFya3NGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYmFza2V0LWl0ZW0tY3VzdG9tLXJlbWFya3MuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VDaGFuZ2VCYXNrZXRPd25lcnNoaXBVcGRhdGVyLFxuICBDaGFuZ2VCYXNrZXRPd25lcnNoaXBVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9jaGFuZ2UtYmFza2V0LW93bmVyc2hpcC11cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldEJhc2tldFF1b3RlRmV0Y2hlcixcbiAgR2V0QmFza2V0UXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYmFza2V0LXF1b3RlLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0QmFza2V0Tm90ZXNGZXRjaGVyLFxuICBHZXRCYXNrZXROb3Rlc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1iYXNrZXQtbm90ZXMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRCYXNrZXRBcHByb3ZhbFRpbWVzdGFtcHNGZXRjaGVyLFxuICBHZXRCYXNrZXRBcHByb3ZhbFRpbWVzdGFtcHNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYmFza2V0LWFwcHJvdmFsLXRpbWVzdGFtcHMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VSZXNlbmRBcHByb3ZlckVtYWlsRmV0Y2hlcixcbiAgUmVzZW5kQXBwcm92ZXJFbWFpbFF1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvcmVzZW5kLWFwcHJvdmFsLWVtYWlsLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlQ2hlY2tJZkJhc2tldFJlcXVpcmVzQXBwcm92YWxGZXRjaGVyLFxuICBDaGVja0lmQmFza2V0UmVxdWlyZXNBcHByb3ZhbEZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2NoZWNrLWlmLWJhc2tldC1yZXF1aXJlcy1hcHByb3ZhbCc7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXREcmFmdEJhc2tldHNGZXRjaGVyLFxuICBEcmFmdEJhc2tldHNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZHJhZnQtYmFza2V0cy5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUNyZWF0ZUJhc2tldEZyb21EcmFmdFVwZGF0ZXIsXG4gIENyZWF0ZUJhc2tldEZyb21EcmFmdFVwZGF0ZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL2NyZWF0ZS1iYXNrZXQtZnJvbS1kcmFmdC11cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXIsXG4gIEdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1vZmZpY2UtYXBwcm92ZXJzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlU2VsZWN0QmFza2V0QXBwcm92ZXJVcGRhdGVyLFxuICBTZWxlY3RCYXNrZXRBcHByb3Zlck11dGF0aW9uVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zZWxlY3QtYmFza2V0LWFwcHJvdmVyLnVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VXNlckFwcHJvdmVyc0ZldGNoZXIsXG4gIEdldFVzZXJBcHByb3ZlcnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1hcHByb3ZlcnMuZmV0Y2hlcic7XG5cbmltcG9ydCB7IFVzZXJGYXZvcnVyaXRlIH0gZnJvbSAnLi4vY2xhc3Nlcy91c2VyLWZhdm91cml0ZS5lbnVtJztcbmltcG9ydCB7IE1pQ29tbWFuZCB9IGZyb20gJy4uL2RhdGEvbWktY29tbWFuZCc7XG5pbXBvcnQge1xuICBCYXNlU2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJVcGRhdGVyLFxuICBTZWxlY3RCYXNrZXROb3RpZnlBcHByb3Zlck11dGF0aW9uVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zZWxlY3QtYmFza2V0LW5vdGlmeS1hcHByb3Zlci51cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlLFxuICBSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZUludGVyZmFjZVxufSBmcm9tICcuL3JlcXVpcmVzLW92ZXJyaWRlLXJlYXNvbi5zZXJ2aWNlJztcblxuaW1wb3J0IHtcbiAgQmFzZUNhbkFtZW5kQm9va2luZ0ZldGNoZXIsXG4gIENhbkFtZW5kQm9va2luZ1R5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FuLWFtZW5kLWJvb2tpbmcuZmV0Y2hlcic7XG5cbmltcG9ydCB7IEJhc2VTaGFyZUJhc2tldFVwZGF0ZXIsIFNoYXJlQmFza2V0VXBkYXRlclR5cGUgfSBmcm9tICcuLi91cGRhdGVycy9zaGFyZS1iYXNrZXQudXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRVc2VyU2hhcmVkQmFza2V0c0ZldGNoZXIsXG4gIEdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItc2hhcmVkLWJhc2tldHMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRUcmFpblNlYXRtYXBGZXRjaGVyLFxuICBHZXRUcmFpblNlYXRtYXBGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdHJhaW4tc2VhdG1hcC5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNlbGVjdEJhc2tldE11bHRpTGV2ZWxBcHByb3ZlcnNVcGRhdGVyLFxuICBTZWxlY3RCYXNrZXRNdWx0aUxldmVsQXBwcm92ZXJzTXV0YXRpb25UeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NlbGVjdC1iYXNrZXQtbXVsdGktbGV2ZWwtYXBwcm92ZXJzLnVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZVNlYXJjaE1JQXV0b1N1Z2dlc3RWYWx1ZXNGZXRjaGVyLFxuICBTZWFyY2hNSUF1dG9TdWdnZXN0VmFsdWVzRmV0Y2hlclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtbWktYXV0by1zdWdnZXN0LXZhbHVlcy5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVZhbGlkYXRlQmFza2V0TWlGZXRjaGVyLFxuICBWYWxpZGF0ZUJhc2tldE1pRmV0Y2hlclxufSBmcm9tICcuLi9mZXRjaGVycy92YWxpZGF0ZS1iYXNrZXQtbWkuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VWYWxpZGF0ZUJhc2tldEl0ZW1NaUZldGNoZXIsXG4gIFZhbGlkYXRlQmFza2V0SXRlbU1pRmV0Y2hlclxufSBmcm9tICcuLi9mZXRjaGVycy92YWxpZGF0ZS1iYXNrZXQtaXRlbS1taS5mZXRjaGVyJztcblxuaW1wb3J0IHsgQmFzZVNldE1JVmFsdWVzVXBkYXRlciwgU2V0TUlWYWx1ZXNVcGRhdGVyIH0gZnJvbSAnLi4vdXBkYXRlcnMvc2V0LW1pLXZhbHVlcy51cGRhdGVyJztcblxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuLy8gaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCYXNlQmVmb3JlQW1lbmRDYWJTZWFyY2hRdW90ZUZldGNoZXIsXG4gIEJlZm9yZUFtZW5kQ2FiU2VhcmNoUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9iZWZvcmUtYW1lbmQtY2FiLXNlYXJjaC1xdW90ZS1mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VTZW5kQmFja1RvUXVldWVVcGRhdGVyLFxuICBTZW5kQmFja1RvUXVldWVNdXRhdGlvblR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2VuZC1iYWNrLXRvLXF1ZXVlLXVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0QmFza2V0Q28ySW5mb0ZldGNoZXIsXG4gIEdldEJhc2tldENvMkZldGNoZXJJbmZvVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9iYXNrZXQtY28yLmZldGNoZXInO1xuaW1wb3J0IHsgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkIH0gZnJvbSAnLi4vY2xhc3Nlcy9tYW5hZ2VtZW50LWluZm8tYW5kLXZhbGlkJztcbmltcG9ydCB7IEZsaWdodEpvdXJuZXlUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9mbGlnaHQtam91cm5leS10eXBlLXR5cGUuZW51bSc7XG5pbXBvcnQge1xuICBCYXNlQmVmb3JlQW1lbmRDYXJIaXJlU2VhcmNoRmV0Y2hlcixcbiAgQmVmb3JlQW1lbmRDYXJIaXJlU2VhcmNoRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYmVmb3JlLWFtZW5kLWNhci1oaXJlLXNlYXJjaC5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRNSUFwcHJvdmVyc0ZldGNoZXIsXG4gIEdldE1JQXBwcm92ZXJzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LW1pLWFwcHJvdmVycy5mZXRjaGVyJztcblxuY29uc3QgVEVNUElEID0gJ1RFTVBJRF8nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2tldEFuZEl0ZW0ge1xuICBiYXNrZXRJZDogc3RyaW5nO1xuICBpdGVtOiBCYXNrZXRJdGVtO1xufVxuZXhwb3J0IGludGVyZmFjZSBNaUdyb3VwRGV0YWlsIHtcbiAgdHlwZTogU2VydmljZVR5cGU7XG4gIG9wdGlvbnM6IHN0cmluZ1tdO1xuICBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2tldEluZm9ybWF0aW9uIHtcbiAgcHJpY2VzOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9O1xuICBtaXhlZEN1cnJlbmN5OiBib29sZWFuO1xuICBjb3VudDogbnVtYmVyO1xuICBtaUdyb3VwczogTWlHcm91cERldGFpbFtdO1xuICBiYXNrZXRJbmZvTWlEZXRhaWxzOiBCYXNrZXRJbmZvTWlEZXRhaWxzSW1wbFtdO1xuICBzdXBwSW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlW107XG4gIHJlcXVpcmVzU2VsZWN0ZWRBcHByb3Zlcj86IGJvb2xlYW47XG4gIHJlcXVpcmVzU2VsZWN0ZWRNaUFwcHJvdmVyPzogYm9vbGVhbjtcbiAgcmVxdWlyZXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyPzogYm9vbGVhbjtcbiAgcmVxdWlyZXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyUGVyTWk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2tldFByaWNlc0xpc3Qge1xuICB0eXBlOiBTZXJ2aWNlVHlwZTtcbiAgcHJpY2U6IG51bWJlcjtcbiAgY3VycmVuY3k/OiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgY28yOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFza2V0UHJpY2VzIHtcbiAgdG90YWw6IG51bWJlcjtcbiAgdG90YWxDbzI6IG51bWJlcjtcbiAgY3VycmVuY3k/OiBzdHJpbmc7XG4gIGxpc3Q6IEJhc2tldFByaWNlc0xpc3RbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNrZXRTZWxlY3RlZEFwcHJvdmVyIHtcbiAgc2VsZWN0ZWRBcHByb3Zlcj86IFVzZXI7XG4gIHNlbGVjdGVkTm90aWZ5QXBwcm92ZXI/OiBVc2VyO1xuICBhcHByb3ZlcnM/OiBhbnlbXTtcbn1cblxuZXhwb3J0IHR5cGUgQmFza2V0RGV0YWlscyA9IFVzZXJCYXNrZXRSZXN1bHQgJiBCYXNrZXRJbmZvcm1hdGlvbjtcbmV4cG9ydCBjbGFzcyBJbnRlcm5hbEJhc2tldDxRIGV4dGVuZHMgU2VhcmNoR2V0VXNlckZldGNoZXJUeXBlPlxuICBpbXBsZW1lbnRzIEJhc2tldEluZm9ybWF0aW9uLCBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxue1xuICBzdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QmFza2V0RGV0YWlscz47XG4gIHByaXZhdGUgX2Jhc2tldFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxCYXNrZXREZXRhaWxzPjtcbiAgaWQ/OiBzdHJpbmc7XG4gIHRlbXBpZD86IHN0cmluZztcbiAgcmVxdWlyZXNTZWxlY3RlZEFwcHJvdmVyPzogYm9vbGVhbjtcbiAgcmVxdWlyZXNTZWxlY3RlZE1pQXBwcm92ZXI/OiBib29sZWFuO1xuICByZXF1aXJlc1NlbGVjdGVkTm90aWZ5QXBwcm92ZXI/OiBib29sZWFuO1xuICByZXF1aXJlc1NlbGVjdGVkTm90aWZ5QXBwcm92ZXJQZXJNaT86IGJvb2xlYW47XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHByaWNlczogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfTtcbiAgbWl4ZWRDdXJyZW5jeTogYm9vbGVhbjtcbiAgbG93ZXN0UHJpY2U6IG51bWJlcjtcbiAgY291bnQ6IG51bWJlcjtcbiAgbWlHcm91cHM6IE1pR3JvdXBEZXRhaWxbXTtcbiAgYmFza2V0SW5mb01pRGV0YWlsczogYW55W107XG4gIHN1cHBJbmZvOiBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2VbXTtcbiAgZ3JhbmRUb3RhbDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfTtcbiAgbmVlZHNUb1ZpZXdNaTogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFza2V0OiBVc2VyQmFza2V0UmVzdWx0LFxuICAgIHByaXZhdGUgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcHJpdmF0ZSBnZXRVc2VyRmV0Y2hlcjogQmFzZUdldFVzZXJGZXRjaGVyPFE+LFxuICAgIHByaXZhdGUgcmVxdWlyZXNTZXJ2aWNlOiBCYXNlUmVxdWlyZXNSZWFzb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVxdWlyZXNPdmVycmlkZVNlcnZpY2U6IEJhc2VSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZVxuICApIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHtcbiAgICAgIHN1YmplY3Q6IG5ldyBCZWhhdmlvclN1YmplY3Q8QmFza2V0RGV0YWlscz4oe1xuICAgICAgICAuLi5iYXNrZXQsXG4gICAgICAgIHByaWNlczoge30sXG4gICAgICAgIG1peGVkQ3VycmVuY3k6IGZhbHNlLFxuICAgICAgICBjb3VudDogMCxcbiAgICAgICAgbWlHcm91cHM6IFtdLFxuICAgICAgICBiYXNrZXRJbmZvTWlEZXRhaWxzOiBbXSxcbiAgICAgICAgc3VwcEluZm86IFtdXG4gICAgICB9KSxcbiAgICAgIF9iYXNrZXRTdWJqZWN0OiBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2tldERldGFpbHM+KHtcbiAgICAgICAgLi4uYmFza2V0LFxuICAgICAgICBwcmljZXM6IHt9LFxuICAgICAgICBtaXhlZEN1cnJlbmN5OiBmYWxzZSxcbiAgICAgICAgY291bnQ6IDAsXG4gICAgICAgIG1pR3JvdXBzOiBbXSxcbiAgICAgICAgYmFza2V0SW5mb01pRGV0YWlsczogW10sXG4gICAgICAgIHN1cHBJbmZvOiBbXVxuICAgICAgfSksXG4gICAgICB0ZW1waWQ6IGJhc2tldC5pZCxcbiAgICAgIGlkOiBiYXNrZXQuaWQsXG4gICAgICB0aXRsZTogYmFza2V0LnRpdGxlLFxuICAgICAgcHJpY2VzOiB7fSxcbiAgICAgIG1peGVkQ3VycmVuY3k6IGZhbHNlLFxuICAgICAgY291bnQ6IDAsXG4gICAgICBtaUdyb3VwczogW10sXG4gICAgICBiYXNrZXRJbmZvTWlEZXRhaWxzOiBbXSxcbiAgICAgIHN1cHBJbmZvOiBbXVxuICAgIH0pO1xuXG4gICAgdGhpcy5fYmFza2V0U3ViamVjdC5waXBlKGRlYm91bmNlVGltZSg1MDApKS5zdWJzY3JpYmUoXG4gICAgICBkYXRhID0+IHtcbiAgICAgICAgdGhpcy5zdWJqZWN0Lm5leHQoZGF0YSk7XG4gICAgICB9LFxuICAgICAgZXJyID0+IHtcbiAgICAgICAgdGhpcy5zdWJqZWN0LmVycm9yKGVycik7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMubmV4dChiYXNrZXQpO1xuICB9XG5cbiAgZGVzdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnN1YmplY3QuY29tcGxldGUoKTtcbiAgfVxuXG4gIG5leHQoYmFza2V0OiBVc2VyQmFza2V0UmVzdWx0LCBpc0FnZW50OiBib29sZWFuID0gbnVsbCwgYmFza2V0SXRlbUlkOiBzdHJpbmcgPSAnJykge1xuICAgIC8vIHJlcGxhY2luZyB3aXRoIGEgc2hhbGxvdyBjbG9uZSBmb3IgRU5ULTg1MzQsIG1pZ2h0IFdvcmtlciwgbWlnaHQgYnJlYWsgc29tZXRoaW5nIGVsc2UuIEkgd2FudCB0byB1c2UgXy5jbG9uZURlZXBXaXRoXG4gICAgLy8gYmFza2V0ID0gXy5jbG9uZShiYXNrZXQpO1xuXG4gICAgaWYgKGJhc2tldC5zdGF0dXMgPT09IEJhc2tldFN0YXR1cy5Cb29rZWQgfHwgYmFza2V0LnN0YXR1cyA9PT0gQmFza2V0U3RhdHVzLkF3YWl0aW5nQXBwcm92YWwpIHtcbiAgICAgIGJhc2tldCA9IHRoaXMuaGVscGVycy5jbG9uZShiYXNrZXQpO1xuICAgICAgYmFza2V0ID0gdGhpcy5oZWxwZXJzLm1lcmdlT2JqZWN0cyh0aGlzLl9iYXNrZXRTdWJqZWN0LnZhbHVlLCBiYXNrZXQpO1xuICAgIH1cbiAgICB0aGlzLmlkID0gYmFza2V0LmlkO1xuICAgIHRoaXMudGl0bGUgPSBiYXNrZXQudGl0bGU7XG4gICAgY29uc3QgdG9TZW5kOiBCYXNrZXREZXRhaWxzID0ge1xuICAgICAgLi4uYmFza2V0LCAvLyBTcHJlYWQgdGhlIGV4aXN0aW5nIHByb3BlcnRpZXMgb2YgYmFza2V0XG4gICAgICAuLi4oYmFza2V0LmJhc2tldEl0ZW1zIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1bTogQmFza2V0SW5mb3JtYXRpb24sIGl0ZW06IEJhc2tldEl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoIWFjY3VtLnByaWNlc1tpdGVtLmN1cnJlbmN5XSkge1xuICAgICAgICAgICAgYWNjdW0ucHJpY2VzW2l0ZW0uY3VycmVuY3ldID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gISAtIE5lZWRzIHRvIGJlIGl0ZW0ucHJpY2UgYXMgdGhhdCBjb250YWlucyBhbnkgbWFya3Vwc1xuICAgICAgICAgIGFjY3VtLnByaWNlc1tpdGVtLmN1cnJlbmN5XSArPSBpdGVtLnByaWNlO1xuICAgICAgICAgIGFjY3VtLnN1cHBJbmZvLnB1c2goXG4gICAgICAgICAgICBuZXcgU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW1wbChcbiAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgdGhpcy5iYXNrZXRTZXJ2aWNlLFxuICAgICAgICAgICAgICB0aGlzLmhlbHBlcnMsXG4gICAgICAgICAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXJcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGl0ZW0ubWFuYWdlbWVudEluZm8/Lmxlbmd0aCA+IDAgJiYgKGl0ZW0udXNlcnM/Lmxlbmd0aCA+IDAgfHwgaXRlbS5ndWVzdHM/Lmxlbmd0aCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcrKysgQ3JlYXRpbmcgTUkgSW1wbGVtZW50YXRpb24gKysrJyk7XG4gICAgICAgICAgICBhY2N1bS5iYXNrZXRJbmZvTWlEZXRhaWxzLnB1c2gobmV3IEJhc2tldEluZm9NaURldGFpbHNJbXBsKGl0ZW0sIHRoaXMuYmFza2V0U2VydmljZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcmljZXM6IHt9LFxuICAgICAgICAgIG1peGVkQ3VycmVuY3k6IGZhbHNlLFxuICAgICAgICAgIGNvdW50OiBiYXNrZXQuYmFza2V0SXRlbXM/Lmxlbmd0aCB8fCAwLFxuICAgICAgICAgIG1pR3JvdXBzOiBbXSxcbiAgICAgICAgICBiYXNrZXRJbmZvTWlEZXRhaWxzOiBbXSxcbiAgICAgICAgICBzdXBwSW5mbzogW11cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH07XG4gICAgdG9TZW5kLm1peGVkQ3VycmVuY3kgPSBPYmplY3Qua2V5cyh0b1NlbmQucHJpY2VzKS5sZW5ndGggPiAxO1xuICAgIHRoaXMuX2Jhc2tldFN1YmplY3QubmV4dCh0b1NlbmQpO1xuXG4gICAgaWYgKGJhc2tldC5iYXNrZXRJdGVtcy5ldmVyeShpdGVtID0+IGl0ZW0/LmRldGFpbD8ub3V0d2FyZERldGFpbD8uc3BsaXRJRCkpIHtcbiAgICAgIGlmICghKGJhc2tldC5iYXNrZXRJdGVtcy5sZW5ndGggJSAyKSkge1xuICAgICAgICB0aGlzLnJlcXVpcmVzU2VydmljZS5hZGRCYXNrZXRJdGVtKGJhc2tldCwgYmFza2V0SXRlbUlkKTtcbiAgICAgICAgdGhpcy5yZXF1aXJlc092ZXJyaWRlU2VydmljZS5hZGRCYXNrZXRJdGVtKGJhc2tldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVxdWlyZXNTZXJ2aWNlLmFkZEJhc2tldEl0ZW0oYmFza2V0LCBiYXNrZXRJdGVtSWQpO1xuICAgICAgdGhpcy5yZXF1aXJlc092ZXJyaWRlU2VydmljZS5hZGRCYXNrZXRJdGVtKGJhc2tldCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRW50ZXJwcmlzZUJhc2tldFNlcnZpY2U8XG4gIEFOUFVfUSBleHRlbmRzIEFjY2VwdE5ld1ByaWNlRmV0Y2hlclR5cGUsXG4gIEFJVEJfUSBleHRlbmRzIEFkZEl0ZW1Ub0Jhc2tldEZldGNoZXJUeXBlLFxuICBBVVRCX1EgZXh0ZW5kcyBBZGRVc2VyQmFza2V0RmV0Y2hlclR5cGUsXG4gIENCX1EgZXh0ZW5kcyBDcmVhdGVCYXNrZXRGZXRjaGVyVHlwZSxcbiAgR0JfUSBleHRlbmRzIEdldEJhc2tldEZldGNoZXJUeXBlLFxuICBCQl9RIGV4dGVuZHMgQm9va0Jhc2tldEZldGNoZXJUeXBlLFxuICBEQl9RIGV4dGVuZHMgRGVsZXRlQmFza2V0RmV0Y2hlclR5cGUsXG4gIFJJQl9RIGV4dGVuZHMgRGVsZXRlQmFza2V0SXRlbUZldGNoZXJUeXBlLFxuICBSVkJfUSBleHRlbmRzIFJldmFsaWRhdGVCYXNrZXRGZXRjaGVyVHlwZSxcbiAgR1VfUSBleHRlbmRzIFNlYXJjaEdldFVzZXJGZXRjaGVyVHlwZSxcbiAgR1VCX1EgZXh0ZW5kcyBHZXRVc2VyQmFza2V0c0ZldGNoZXJUeXBlLFxuICBTQkxQX1EgZXh0ZW5kcyBTZXRCYXNrZXRJdGVtTGVhZFBhc3NlbmdlckZldGNoZXJUeXBlLFxuICBNSVREQl9RIGV4dGVuZHMgTW92ZUl0ZW1Ub0FEaWZmZXJlbnRCYXNrZXRUeXBlLFxuICBVQk5fUSBleHRlbmRzIEJhc2VVcGRhdGVCYXNrZXROb3Rlc1R5cGUsXG4gIFVCVF9RIGV4dGVuZHMgQmFzZVVwZGF0ZUJhc2tldFRpdGxlVHlwZSxcbiAgU0JNX1EgZXh0ZW5kcyBTZXRCYXNrZXRJdGVtUGF5bWVudE1ldGhvZFR5cGUsXG4gIEdDSV9RIGV4dGVuZHMgR2V0Q2FuY2VsbGF0aW9uSW5mb1R5cGUsXG4gIEFHVEJfUSBleHRlbmRzIEFkZEd1ZXN0QmFza2V0RmV0Y2hlclR5cGUsXG4gIEFVSUJfUSBleHRlbmRzIEFkZFVwZGF0ZWRJdGVtVG9CYXNrZXRVcGRhdGVyVHlwZSxcbiAgQ0JOX1EgZXh0ZW5kcyBDcmVhdGVCYXNrZXROb3RlVXBkYXRlclR5cGUsXG4gIEdCTkZfUSBleHRlbmRzIEdldEJhc2tldE5vdGVzRmV0Y2hlclR5cGUsXG4gIEdCQVRfUSBleHRlbmRzIEdldEJhc2tldEFwcHJvdmFsVGltZXN0YW1wc0ZldGNoZXJUeXBlLFxuICBBTV9RIGV4dGVuZHMgQWRkQmFza2V0SXRlbU1hcmt1cFR5cGUsXG4gIEFCSUNSX1EgZXh0ZW5kcyBBZGRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrVXBkYXRlclR5cGUsXG4gIEdCSUNfUSBleHRlbmRzIEdldEJhc2tldEl0ZW1DdXN0b21SZW1hcmtzRmV0Y2hlclR5cGUsXG4gIENCT1VfUSBleHRlbmRzIENoYW5nZUJhc2tldE93bmVyc2hpcFVwZGF0ZXJUeXBlLFxuICBHQlFGX1EgZXh0ZW5kcyBHZXRCYXNrZXRRdW90ZUZldGNoZXJUeXBlLFxuICBSQUVfUSBleHRlbmRzIFJlc2VuZEFwcHJvdmVyRW1haWxRdW90ZUZldGNoZXJUeXBlLFxuICBDSUJSQV9RIGV4dGVuZHMgQ2hlY2tJZkJhc2tldFJlcXVpcmVzQXBwcm92YWxGZXRjaGVyVHlwZSxcbiAgR09BRl9RIGV4dGVuZHMgR2V0T2ZmaWNlQXBwcm92ZXJzRmV0Y2hlclR5cGUsXG4gIFNCQV9VIGV4dGVuZHMgU2VsZWN0QmFza2V0QXBwcm92ZXJNdXRhdGlvblR5cGUsXG4gIEdEQl9RIGV4dGVuZHMgRHJhZnRCYXNrZXRzRmV0Y2hlclR5cGUsXG4gIENCRkRfUSBleHRlbmRzIENyZWF0ZUJhc2tldEZyb21EcmFmdFVwZGF0ZXJUeXBlLFxuICBTQk5BX1UgZXh0ZW5kcyBTZWxlY3RCYXNrZXROb3RpZnlBcHByb3Zlck11dGF0aW9uVHlwZSxcbiAgQ0FCX1EgZXh0ZW5kcyBDYW5BbWVuZEJvb2tpbmdUeXBlLFxuICBHVUFGX1EgZXh0ZW5kcyBHZXRVc2VyQXBwcm92ZXJzRmV0Y2hlclR5cGUsXG4gIEdNQUZfUSBleHRlbmRzIEdldE1JQXBwcm92ZXJzRmV0Y2hlclR5cGUsXG4gIFNCVV9RIGV4dGVuZHMgU2hhcmVCYXNrZXRVcGRhdGVyVHlwZSxcbiAgR1VTQl9RIGV4dGVuZHMgR2V0VXNlclNoYXJlZEJhc2tldHNGZXRjaGVyVHlwZSxcbiAgR1RTTV9RIGV4dGVuZHMgR2V0VHJhaW5TZWF0bWFwRmV0Y2hlclR5cGUsXG4gIEJBU19RIGV4dGVuZHMgQmVmb3JlQW1lbmRDYWJTZWFyY2hRdW90ZUZldGNoZXJUeXBlLFxuICBCQUNIU19RIGV4dGVuZHMgQmVmb3JlQW1lbmRDYXJIaXJlU2VhcmNoRmV0Y2hlclR5cGUsXG4gIFNCVFFfVSBleHRlbmRzIFNlbmRCYWNrVG9RdWV1ZU11dGF0aW9uVHlwZSxcbiAgR0JDX0YgZXh0ZW5kcyBHZXRCYXNrZXRDbzJGZXRjaGVySW5mb1R5cGUsXG4gIFNCTUxBX1UgZXh0ZW5kcyBTZWxlY3RCYXNrZXRNdWx0aUxldmVsQXBwcm92ZXJzTXV0YXRpb25UeXBlLFxuICBWQk1fRiBleHRlbmRzIFZhbGlkYXRlQmFza2V0TWlGZXRjaGVyLFxuICBWQklNX0YgZXh0ZW5kcyBWYWxpZGF0ZUJhc2tldEl0ZW1NaUZldGNoZXIsXG4gIFNNVl9VIGV4dGVuZHMgU2V0TUlWYWx1ZXNVcGRhdGVyLFxuICBTTUFTX0YgZXh0ZW5kcyBTZWFyY2hNSUF1dG9TdWdnZXN0VmFsdWVzRmV0Y2hlclxuPiBpbXBsZW1lbnRzIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlXG57XG4gIHB1YmxpYyBiYXNrZXRVcGRhdGluZyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY3VycmVudEJhc2tldHM6IEludGVybmFsQmFza2V0PEdVX1E+W10gPSBbXTtcbiAgYXdhaXRpbmdBcHByb3ZhbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGhpZ2hsaWdodEJhc2tldEl0ZW1zRW1pdHRlcjogU3ViamVjdDxHZXRVc2VyQmFza2V0SXRlbVJlc3VsdFtdPiA9IG5ldyBTdWJqZWN0PFxuICAgIEdldFVzZXJCYXNrZXRJdGVtUmVzdWx0W11cbiAgPigpO1xuICBsb2FkaW5nU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgYmFza2V0Q2hhbmdlRW1pdHRlcjogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBhZGRpbmdUb0Jhc2tldDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlbW92aW5nRnJvbUJhc2tldDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGRlbGV0aW5nQmFza2V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgYXV0b1N1Z2dlc3REZWZhdWx0c0xvYWRpbmc6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBjcmVhdGluZ05ld0Jhc2tldDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGlzRGlhbG9nT3BlbjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIG1pVXBkYXRpbmc6IEJlaGF2aW9yU3ViamVjdDxCb29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZXF1aXJlTmV3R1VUQmFza2V0OiBCZWhhdmlvclN1YmplY3Q8Qm9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgY2xlYXJSYWlsU2VhdHM6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gIHNlbGVjdGVkQmFza2V0SWQ6IHN0cmluZyA9ICcnO1xuICBuZXdJbnZva2VkQmFza2V0SWQ6IHN0cmluZztcbiAgdXBkYXRpbmdCYXNrZXQgPSBmYWxzZTtcbiAgX2lzQXBwcm92ZWRCYXNrZXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgX21pc3NpbmdNSXM6IFZhbGlkYXRpb25SZXNwb25zZVtdID0gW107XG4gIG1pVmlld2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGxvYWRpbmdDYW5jZWxsZWRJbmZvID0gZmFsc2U7XG4gIGdldCBpc0FwcHJvdmVkQmFza2V0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0FwcHJvdmVkQmFza2V0O1xuICB9XG5cbiAgc2V0IGlzQXBwcm92ZWRCYXNrZXQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc0FwcHJvdmVkQmFza2V0ID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3VycmVudEJhc2tldElEKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGN1cnJlbnRCYXNrZXRJRCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmN1cnJlbnRCYXNrZXRJRCkge1xuICAgICAgLy8gdGhpcyBwcmV2ZW50cyB0aGUgZW1pdHRlciBnZXR0aW5nIHN0dWNrIGluIGEgbG9vcCAgLSBjYXN1aW5nIGJyb3dzZXIgb3ZlcmxvYWRzXG4gICAgICB0aGlzLm1pVmlld2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIubmV4dCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1pc3NpbmdNSXMoKTogVmFsaWRhdGlvblJlc3BvbnNlW10ge1xuICAgIHJldHVybiB0aGlzLl9taXNzaW5nTUlzO1xuICB9XG5cbiAgc2V0IG1pc3NpbmdNSXMoZGF0YTogVmFsaWRhdGlvblJlc3BvbnNlW10pIHtcbiAgICB0aGlzLl9taXNzaW5nTUlzID0gZGF0YTtcbiAgfVxuXG4gIGJhc2tldHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEludGVybmFsQmFza2V0PEdVX1E+W10+KFtdKTtcblxuICBiYXNrZXRMaXN0OiBCYXNrZXRQcmljZXNMaXN0W10gPSBbXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuRmxpZ2h0LFxuICAgICAgdGV4dDogJ0ZMSUdIVFMnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLlJhaWwsXG4gICAgICB0ZXh0OiAnUkFJTCcsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuSG90ZWwsXG4gICAgICB0ZXh0OiAnSE9URUxTJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5DYWIsXG4gICAgICB0ZXh0OiAnVEFYSVMnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkNhcixcbiAgICAgIHRleHQ6ICdDQVJTJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5FdXJvc3RhcixcbiAgICAgIHRleHQ6ICdFVVJPU1RBUicsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWwsXG4gICAgICB0ZXh0OiAnSU5URVJOQVRJT05BTCBSQUlMJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5QYXJraW5nLFxuICAgICAgdGV4dDogJ1BBUktJTkcnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkxvdW5nZSxcbiAgICAgIHRleHQ6ICdMT1VOR0VTJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5Db2FjaCxcbiAgICAgIHRleHQ6ICdDT0FDSCcsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuRmFzdFRyYWNrLFxuICAgICAgdGV4dDogJ0ZBU1RfVFJBQ0snLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9XG4gIF07XG5cbiAgYmFza2V0UHJpY2VzOiBCZWhhdmlvclN1YmplY3Q8QmFza2V0UHJpY2VzPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QmFza2V0UHJpY2VzPih7XG4gICAgdG90YWw6IG51bGwsXG4gICAgdG90YWxDbzI6IG51bGwsXG4gICAgbGlzdDogdGhpcy5iYXNrZXRMaXN0XG4gIH0pO1xuXG4gIG1lbnVTdGF0ZSA9IE1lbnVTbGlkZUVudW0uT1VUO1xuICAvLyBjaGVja0FwcHJvdmVyTW9kYWxDbG9zZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwcml2YXRlIHJlcXVpcmVzU2VydmljZTogQmFzZVJlcXVpcmVzUmVhc29uU2VydmljZTtcbiAgcHJpdmF0ZSByZXF1aXJlc092ZXJyaWRlU2VydmljZTogQmFzZVJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlO1xuICBwcml2YXRlIHVzZXJDdXJyZW5jeSA9ICdHQlAnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWNjZXB0TmV3UHJpY2VVcGRhdGVyOiBCYXNlQWNjZXB0TmV3UHJpY2VVcGRhdGVyPEFOUFVfUT4sXG4gICAgcHJpdmF0ZSBhZGRJdGVtVG9CYXNrZXRVcGRhdGVyOiBCYXNlQWRkSXRlbVRvQmFza2V0VXBkYXRlcjxBSVRCX1E+LFxuICAgIHByaXZhdGUgYWRkVXNlclRvQmFza2V0SXRlbTogQmFzZUFkZFVzZXJUb0Jhc2tldEl0ZW1VcGRhdGVyPEFVVEJfUT4sXG4gICAgcHJpdmF0ZSBiYXNrZXRDcmVhdG9yOiBCYXNlQ3JlYXRlQmFza2V0VXBkYXRlcjxDQl9RPixcbiAgICBwdWJsaWMgYmFza2V0RmV0Y2hlcjogQmFzZUdldEJhc2tldEZldGNoZXI8R0JfUT4sXG4gICAgcHJpdmF0ZSBib29rQmFza2V0VXBkYXRlcjogQmFzZUJvb2tCYXNrZXRVcGRhdGVyPEJCX1E+LFxuICAgIHByaXZhdGUgZGVsZXRlQmFza2V0VXBkYXRlcjogQmFzZURlbGV0ZUJhc2tldFVwZGF0ZXI8REJfUT4sXG4gICAgcHJpdmF0ZSBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXG4gICAgcHJpdmF0ZSByZW1vdmVJdGVtRnJvbUJhc2tldFVwZGF0ZXI6IEJhc2VSZW1vdmVJdGVtRnJvbUJhc2tldFVwZGF0ZXI8UklCX1E+LFxuICAgIHByaXZhdGUgcmV2YWxpZGF0ZUJhc2tldFVwZGF0ZXI6IEJhc2VSZXZhbGlkYXRlQmFza2V0VXBkYXRlcjxSVkJfUT4sXG4gICAgcHJpdmF0ZSBnZXRVc2VyRmV0Y2hlcjogQmFzZUdldFVzZXJGZXRjaGVyPEdVX1E+LFxuICAgIHByaXZhdGUgZ2V0VXNlckJhc2tldHNGZXRjaGVyOiBCYXNlR2V0VXNlckJhc2tldHNGZXRjaGVyPEdVQl9RPixcbiAgICBwcml2YXRlIFNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyOiBCYXNlU2V0QmFza2V0SXRlbUxlYWRQYXNzZW5nZXJVcGRhdGVyPFNCTFBfUT4sXG4gICAgcHJpdmF0ZSBtb3ZlSXRlbVRvQURpZmZlcmVudEJhc2tldDogQmFzZW1vdmVCYXNrZXRJdGVtVG9CYXNrZXQ8TUlUREJfUT4sXG4gICAgcHJpdmF0ZSB1cGRhdGVCYXNrZXROb3Rlc1VwZGF0ZXI6IEJhc2VVcGRhdGVCYXNrZXROb3RlVXBkYXRlcjxVQk5fUT4sXG4gICAgcHJpdmF0ZSB1cGRhdGVCYXNrZXRUaXRsZVVwZGF0ZXI6IEJhc2VVcGRhdGVCYXNrZXRUaXRsZVVwZGF0ZXI8VUJUX1E+LFxuICAgIHByaXZhdGUgc2V0UGF5bWVudE1ldGhvZFVwZGF0ZXI6IEJhc2VTZXRQYXltZW50T3B0aW9uVXBkYXRlcjxTQk1fUT4sXG4gICAgcHJpdmF0ZSBnZXRDYW5jZWxsYXRpb25JbmZvRmV0Y2hlcjogQmFzZUdldENhbmNlbGxhdGlvbkluZm9GZXRjaGVyPEdDSV9RPixcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQmFzZU1vZGFsT3BlbmVyU2VydmljZSxcbiAgICBwcml2YXRlIGFkZEd1ZXN0VG9CYXNrZXRJdGVtOiBCYXNlQWRkR3Vlc3RUb0Jhc2tldEl0ZW1VcGRhdGVyPEFHVEJfUT4sXG4gICAgcHJpdmF0ZSBhZGRVcGRhdGVkSXRlbVRvQmFza2V0VXBkYXRlcjogQmFzZUFkZFVwZGF0ZWRJdGVtVG9CYXNrZXRVcGRhdGVyPEFVSUJfUT4sXG4gICAgcHJpdmF0ZSBjcmVhdGVCYXNrZXROb3RlOiBCYXNlQ3JlYXRlQmFza2V0Tm90ZVVwZGF0ZXI8Q0JOX1E+LFxuICAgIHByaXZhdGUgZ2V0QmFza2V0Tm90ZXM6IEJhc2VHZXRCYXNrZXROb3Rlc0ZldGNoZXI8R0JORl9RPixcbiAgICBwcml2YXRlIGdldEJhc2tldEFwcHJvdmFsVGltZXN0YW1wc0ZldGNoZXI6IEJhc2VHZXRCYXNrZXRBcHByb3ZhbFRpbWVzdGFtcHNGZXRjaGVyPEdCQVRfUT4sXG4gICAgcHJpdmF0ZSBhZGRCYXNrZXRJdGVtTWFya3VwVXBkYXRlcjogQmFzZUFkZEJhc2tldEl0ZW1NYXJrdXBVcGRhdGVyPEFNX1E+LFxuICAgIHByaXZhdGUgYWRkQmFza2V0SXRlbUN1c3RvbVJlbWFyazogQmFzZUFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcmtVcGRhdGVyPEFCSUNSX1E+LFxuICAgIHByaXZhdGUgZ2V0QmFza2V0SXRlbUN1c3RvbVJlbWFya3M6IEJhc2VHZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrc0ZldGNoZXI8R0JJQ19RPixcbiAgICBwcml2YXRlIGNoYW5nZUJhc2tldE93bmVyc2hpcFVwZGF0ZXI6IEJhc2VDaGFuZ2VCYXNrZXRPd25lcnNoaXBVcGRhdGVyPENCT1VfUT4sXG4gICAgcHJpdmF0ZSBnZXRCYXNrZXRRdW90ZUZldGNoZXI6IEJhc2VHZXRCYXNrZXRRdW90ZUZldGNoZXI8R0JRRl9RPixcbiAgICBwcml2YXRlIHJlc2VuZEFwcHJvdmVyRW1haWw6IEJhc2VSZXNlbmRBcHByb3ZlckVtYWlsRmV0Y2hlcjxSQUVfUT4sXG4gICAgcHJpdmF0ZSBiYXNrZXRSZXF1aXJlc0FwcHJvdmFsOiBCYXNlQ2hlY2tJZkJhc2tldFJlcXVpcmVzQXBwcm92YWxGZXRjaGVyPENJQlJBX1E+LFxuICAgIHByaXZhdGUgZ2V0T2ZmaWNlQXBwcm92ZXJzRmV0Y2hlcjogQmFzZUdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXI8R09BRl9RPixcbiAgICBwcml2YXRlIHNlbGVjdEJhc2tldEFwcHJvdmVyVXBkYXRlcjogQmFzZVNlbGVjdEJhc2tldEFwcHJvdmVyVXBkYXRlcjxTQkFfVT4sXG4gICAgcHJpdmF0ZSBnZXREcmFmdEJhc2tldHNGZXRjaGVyOiBCYXNlR2V0RHJhZnRCYXNrZXRzRmV0Y2hlcjxHREJfUT4sXG4gICAgcHJpdmF0ZSBjcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyOiBCYXNlQ3JlYXRlQmFza2V0RnJvbURyYWZ0VXBkYXRlcjxDQkZEX1E+LFxuICAgIHByaXZhdGUgc2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJVcGRhdGVyOiBCYXNlU2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJVcGRhdGVyPFNCTkFfVT4sXG4gICAgcHJpdmF0ZSBjYW5BbWVuZEJvb2tpbmdJbmZvRmV0Y2hlcjogQmFzZUNhbkFtZW5kQm9va2luZ0ZldGNoZXI8Q0FCX1E+LFxuICAgIHByaXZhdGUgZ2V0VXNlckFwcHJvdmVyc0ZldGNoZXI6IEJhc2VHZXRVc2VyQXBwcm92ZXJzRmV0Y2hlcjxHVUFGX1E+LFxuICAgIHByaXZhdGUgZ2V0TUlBcHByb3ZlcnNGZXRjaGVyOiBCYXNlR2V0TUlBcHByb3ZlcnNGZXRjaGVyPEdNQUZfUT4sXG4gICAgcHJpdmF0ZSBzaGFyZUJhc2tldFVwZGF0ZXI6IEJhc2VTaGFyZUJhc2tldFVwZGF0ZXI8U0JVX1E+LFxuICAgIHByaXZhdGUgZ2V0VXNlclNoYXJlZEJhc2tldHNGZXRjaGVyOiBCYXNlR2V0VXNlclNoYXJlZEJhc2tldHNGZXRjaGVyPEdVU0JfUT4sXG4gICAgcHJpdmF0ZSBnZXRUcmFpblNlYXRNYXBGZXRjaGVyOiBCYXNlR2V0VHJhaW5TZWF0bWFwRmV0Y2hlcjxHVFNNX1E+LFxuICAgIHByaXZhdGUgYmVmb3JlQW1lbmRDYWJTZWFyY2hmZXRjaGVyOiBCYXNlQmVmb3JlQW1lbmRDYWJTZWFyY2hRdW90ZUZldGNoZXI8QkFTX1E+LFxuICAgIHByaXZhdGUgYmVmb3JlQW1lbmRDYXJIaXJlU2VhcmNoZmV0Y2hlcjogQmFzZUJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaEZldGNoZXI8QkFDSFNfUT4sXG4gICAgcHJvdGVjdGVkIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZW5kQmFja1RvUXVldWVVcGRhdGVyOiBCYXNlU2VuZEJhY2tUb1F1ZXVlVXBkYXRlcjxTQlRRX1U+LFxuICAgIHByaXZhdGUgYmFza2V0Q28yRmV0Y2hlcjogQmFzZUdldEJhc2tldENvMkluZm9GZXRjaGVyPEdCQ19GPixcbiAgICBwcml2YXRlIHNlbGVjdEJhc2tldE11bHRpTGV2ZWxBcHByb3ZlcnNVcGRhdGVyOiBCYXNlU2VsZWN0QmFza2V0TXVsdGlMZXZlbEFwcHJvdmVyc1VwZGF0ZXI8U0JNTEFfVT4sXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUJhc2tldE1pRmV0Y2hlcjogQmFzZVZhbGlkYXRlQmFza2V0TWlGZXRjaGVyPFZCTV9GPixcbiAgICBwcml2YXRlIHZhbGlkYXRlQmFza2V0SXRlbU1pRmV0Y2hlcjogQmFzZVZhbGlkYXRlQmFza2V0SXRlbU1pRmV0Y2hlcjxWQklNX0Y+LFxuICAgIHByaXZhdGUgc2V0TUlWYWx1ZXNVcGRhdGVyOiBCYXNlU2V0TUlWYWx1ZXNVcGRhdGVyPFNNVl9VPixcbiAgICBwcml2YXRlIHNlYXJjaE1JQXV0b1N1Z2dlc3RWYWx1ZXNGZXRjaGVyOiBCYXNlU2VhcmNoTUlBdXRvU3VnZ2VzdFZhbHVlc0ZldGNoZXI8U01BU19GPlxuICApIHtcbiAgICB0aGlzLnJlcXVpcmVzU2VydmljZSA9IG5ldyBCYXNlUmVxdWlyZXNSZWFzb25TZXJ2aWNlKG1vZGFsU2VydmljZSwgdGhpcyk7XG4gICAgdGhpcy5yZXF1aXJlc092ZXJyaWRlU2VydmljZSA9IG5ldyBCYXNlUmVxdWlyZXNPdmVycmlkZVJlYXNvblNlcnZpY2UobW9kYWxTZXJ2aWNlLCB0aGlzKTtcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLmNoYW5nZVVzZXIuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXNlclNlcnZpY2UuY2hhbmdlQm9iby5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogYXN5bmMgKHZhbHVlOiBUcmF2ZWxsZXIpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudXNlclNlcnZpY2UudXNlcklzQWdlbnQoKSAmJiB0aGlzLmN1cnJlbnRCYXNrZXRzLmxlbmd0aCAmJiAhdmFsdWUpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZU9wZW5JbnZva2VkQmFza2V0cygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzYyAtIGRlbGV0ZXMgYWxsIG9wZW4gaW52b2tlZCBiYXNrZXRzXG4gICAqL1xuICBhc3luYyBkZWxldGVPcGVuSW52b2tlZEJhc2tldHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBiYXNrZXQgb2YgdGhpcy5jdXJyZW50QmFza2V0cykge1xuICAgICAgY29uc3QgYmFza2V0VmFsdWUgPSBiYXNrZXQuc3ViamVjdC52YWx1ZTtcbiAgICAgIGlmIChiYXNrZXRWYWx1ZS5pbnZva2VkVXNlcikge1xuICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnJlbW92ZUJhc2tldChiYXNrZXRWYWx1ZS5pZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFJlcXVpcmVzUmVhc29uU2VydmljZSgpOiBSZXF1aXJlc1JlYXNvblNlcnZpY2VJbnRlcmZhY2Uge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVzU2VydmljZTtcbiAgfVxuXG4gIGdldFJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlKCk6IFJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlSW50ZXJmYWNlIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlc092ZXJyaWRlU2VydmljZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICAvLyBjb25zb2xlLndhcm4oJysrKyBCYXNrZXQgUmVzZXQgQ2FsbGVkICsrKycpO1xuXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuZ2V0ZnVsbFVzZXJEZXRhaWxzKGZhbHNlKS51c2VyRGF0YS52YWx1ZSkge1xuICAgICAgLy8gY29uc29sZS53YXJuKCcrKysgRkVUQ0hJTkcgQkFTS0VUIEZST00gUkVTRVQgKysrJyk7XG4gICAgICB0aGlzLmdldFVzZXJCYXNrZXRzRmV0Y2hlclxuICAgICAgICAuZmV0Y2hMaXN0KHtcbiAgICAgICAgICBiYXNrZXRTdGF0dXNlczogW0Jhc2tldFN0YXR1cy5PcGVuXSxcbiAgICAgICAgICB1c2VyOiB0aGlzLnVzZXJTZXJ2aWNlLmdldGZ1bGxVc2VyRGV0YWlscyh0cnVlKS51c2VyRGF0YS52YWx1ZS51c2VyX2lkLnRvU3RyaW5nKClcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYmFza2V0czogVXNlckJhc2tldFJlc3VsdFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5maWx0ZXIoXG4gICAgICAgICAgICAgIChiYXNrZXQ6IEludGVybmFsQmFza2V0PEdVX1E+KSA9PlxuICAgICAgICAgICAgICAgIGJhc2tldC5zdWJqZWN0LnZhbHVlLnN0YXR1cyA9PT0gQmFza2V0U3RhdHVzLk9wZW4gfHxcbiAgICAgICAgICAgICAgICAhYmFza2V0LnN1YmplY3QudmFsdWUuc3RhdHVzIHx8XG4gICAgICAgICAgICAgICAgYmFza2V0LmlkID09PSB0aGlzLmN1cnJlbnRCYXNrZXRJRCB8fFxuICAgICAgICAgICAgICAgIHRoaXMuaXNBcHByb3ZlZEJhc2tldFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50QmFza2V0cyA9IGJhc2tldHMubWFwKChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGJhc2tldCkge1xuICAgICAgICAgICAgICAgIGxldCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0LmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoIWludEJhc2tldCkge1xuICAgICAgICAgICAgICAgICAgaW50QmFza2V0ID0gdGhpcy5jcmVhdGVJbnRCYXNrZXQoYmFza2V0KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMucHVzaChpbnRCYXNrZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaW50QmFza2V0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGV0IGN1cnJlbnRCYXNrZXRzQ29weSA9IHRoaXMuaGVscGVycy5jbG9uZShjdXJyZW50QmFza2V0cyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMudXNlclNlcnZpY2UuYm9ibykge1xuICAgICAgICAgICAgICAvLyByZW1vdmUgYmFza2VzdCB3aXRoIGludm9rZWQgdXNlciBpZiB3ZSBhcmUgbm90IGN1cnJlbnRseSBpbnZva2luZyBhIHVzZXIgLy8gPyAtIHNob3VsZCB3ZSBkbyB0aGUgb3Bwb3NpdGUgYXMgd2VsbD9cbiAgICAgICAgICAgICAgY3VycmVudEJhc2tldHNDb3B5ID0gY3VycmVudEJhc2tldHNDb3B5LmZpbHRlcihcbiAgICAgICAgICAgICAgICBiYXNrZXQgPT4gIWJhc2tldC5zdWJqZWN0LnZhbHVlLmludm9rZWRVc2VyXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgdGhpcy5iYXNrZXRzLm5leHQoY3VycmVudEJhc2tldHMpOyAvLyB1cGRhdGUgYmFza2V0IGJlZm9yZSBjdXJyZW50QmFza2V0SUQgdXBkYXRlIGJhc2tldENoYW5nZUVtaXR0ZXIgd2l0aCB0aGUgb2xkIGJhc2tldFxuXG4gICAgICAgICAgICAgIGlmIChjdXJyZW50QmFza2V0c0NvcHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRJRCBleGlzdHMgLSBkb24ndCByZXBsYWNlIGN1cnJlbnRCYXNrZXRJRCB3aXRoIGN1cnJlbnRCYXNrZXRzQ29weVswXS5pZCAoaWYgbXVsdGlwbGUgc2VydmljZXMsIHdlIG11c3QgaGF2ZSBhIHNwZWNpZmljIGN1cnJlbnRCYXNrZXRJRClcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IHRoaXMuY3VycmVudEJhc2tldElEIHx8IGN1cnJlbnRCYXNrZXRzQ29weVswXS5pZDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY3VycmVudEJhc2tldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRzIGl0ZW1zIGRvbid0IGhhdmUgY3VycmVudEJhc2tldElEIHJlc2V0IGN1cnJlbnRCYXNrZXRJRCBFTlQtNDk1OVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRCYXNrZXRzLmV2ZXJ5KGJhc2tldCA9PiBiYXNrZXQuaWQgIT09IHRoaXMuY3VycmVudEJhc2tldElEKSAmJlxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0cy5ldmVyeShiYXNrZXQgPT4gYmFza2V0LmlkICE9PSB0aGlzLmN1cnJlbnRCYXNrZXRJRClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gY3VycmVudEJhc2tldHNbMF0uaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRJRCBleGlzdHMgLSBkb24ndCByZXBsYWNlIGN1cnJlbnRCYXNrZXRJRCB3aXRoIGN1cnJlbnRCYXNrZXRzQ29weVswXS5pZCAoaWYgbXVsdGlwbGUgc2VydmljZXMsIHdlIG11c3QgaGF2ZSBhIHNwZWNpZmljIGN1cnJlbnRCYXNrZXRJRCBFTlQtNDY2MSlcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IHRoaXMuY3VycmVudEJhc2tldElEIHx8IGN1cnJlbnRCYXNrZXRzWzBdLmlkO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gbnVsbDtcbiAgICAgICAgICAgICAgfSAvLyB3YW50IHRvIGtlZXAgdGhlIGludm9rZWQgYmFza2V0c1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJhc2tldHMubmV4dChjdXJyZW50QmFza2V0cyk7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50QmFza2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRzIGl0ZW1zIGRvbid0IGhhdmUgY3VycmVudEJhc2tldElEIHJlc2V0IGN1cnJlbnRCYXNrZXRJRCBFTlQtNDk1OVxuICAgICAgICAgICAgICBpZiAoY3VycmVudEJhc2tldHMuZXZlcnkoYmFza2V0ID0+IGJhc2tldC5pZCAhPT0gdGhpcy5jdXJyZW50QmFza2V0SUQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBjdXJyZW50QmFza2V0c1swXS5pZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50QmFza2V0SUQgZXhpc3RzIC0gZG9uJ3QgcmVwbGFjZSBjdXJyZW50QmFza2V0SUQgd2l0aCBjdXJyZW50QmFza2V0c0NvcHlbMF0uaWQgKGlmIG11bHRpcGxlIHNlcnZpY2VzLCB3ZSBtdXN0IGhhdmUgYSBzcGVjaWZpYyBjdXJyZW50QmFza2V0SUQgRU5ULTQ2NjEpXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gdGhpcy5jdXJyZW50QmFza2V0SUQgfHwgY3VycmVudEJhc2tldHNbMF0uaWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLmZvckVhY2goKGJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UpID0+XG4gICAgICAgIGJhc2tldC5zdWJqZWN0LnVuc3Vic2NyaWJlKClcbiAgICAgICk7XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gW107XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWxsT3BlbkJhc2tldHModXNlcl9pZDogc3RyaW5nKTogUHJvbWlzZTxVc2VyQmFza2V0UmVzdWx0W10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyQmFza2V0c0ZldGNoZXJcbiAgICAgIC5mZXRjaExpc3QoeyBiYXNrZXRTdGF0dXNlczogW0Jhc2tldFN0YXR1cy5PcGVuXSwgdXNlcjogdXNlcl9pZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcCgocmVzdWx0czogVXNlckJhc2tldFJlc3VsdFtdKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdDogVXNlckJhc2tldFJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuZmluZEJhc2tldChyZXN1bHQuaWQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50QmFza2V0ID0gbmV3IEludGVybmFsQmFza2V0KFxuICAgICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLFxuICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXIsXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlcXVpcmVzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMucHVzaChpbnRCYXNrZXQpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdEYW41Jyx0aGlzLmN1cnJlbnRCYXNrZXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRUb0Jhc2tldChcbiAgICBpdGVtOiBBZGRJdGVtVG9CYXNrZXQuVmFyaWFibGVzLFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4sXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgdHJhdmVsbGVyczogVHJhdmVsbGVyW10gPSBbXSxcbiAgICByZXF1aXJlc1JlYXNvbktleXM6IHN0cmluZ1tdLFxuICAgIGludm9rZWRTcGxpdD86IGJvb2xlYW4sXG4gICAgaWdub3JlSW52b2tlZENoZWNrPzogYm9vbGVhblxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcbiAgICBjb25zb2xlLndhcm4oJysrKyBBdHRlbXB0aW5nIHRvIGFkZCBpdGVtIHRvIGJhc2tldDogJywgaXRlbSwgJyArKysnKTtcblxuICAgIGlmIChpbnZva2VkU3BsaXQpIHtcbiAgICAgIC8vIEVOVC02OTQzIGRvIHRoaXMgc28gd2UgdXNlIHRoZSBpbnRCYXNrZXQgaWYgd2UgaGF2ZSBvbmUsIGhhZCBhbiBpc3N1ZSBhZGRpbmcgdG8gYmFza2V0IHdpdGggbm8gY3VycmVudEJha2V0SUQgYnV0IHdlIGRpZCBoYXZlIGludGJhc2tldFxuICAgICAgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElEKSB8fCBpbnRCYXNrZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldCh0aGlzLmN1cnJlbnRCYXNrZXRJRCkgfHwgaW50QmFza2V0O1xuICAgICAgc3dpdGNoIChcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Jhc2tldEZvckludm9rZWQoaW50QmFza2V0LCB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8sIGlnbm9yZUludm9rZWRDaGVjaylcbiAgICAgICkge1xuICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY29udGludWU6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw6XG4gICAgICAgICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xuICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMubmV3QmFza2V0OlxuICAgICAgICAgIGludEJhc2tldCA9IGF3YWl0IHRoaXMuY3JlYXRlQmFza2V0KCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBpbnRCYXNrZXQuaWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaDpcbiAgICAgICAgICBpZiAoaW50QmFza2V0LnN1YmplY3QudmFsdWUuaW52b2tlZFVzZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGludm9rZWRVc2VyID0gaW50QmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXNbMF0udXNlcnMuZmluZChcbiAgICAgICAgICAgICAgdXNlciA9PiB1c2VyLmlkID09PSBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5pbnZva2VkVXNlci5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2Uuc2V0Qm9ibyhUcmF2ZWxsZXJPYmplY3QubWFrZVRyYXZlbGxlck9iamVjdEZyb21Vc2VyKGludm9rZWRVc2VyKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBib2JvXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnNldEJvYm8obnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0OiBhbnkgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcbiAgICAgIFVzZXJGYXZvcnVyaXRlLkFsbG93U2FtZVRyYXZlbGxlc3JQZXJCYXNrZXRcbiAgICApXG4gICAgICA/IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0KFVzZXJGYXZvcnVyaXRlLkFsbG93U2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQpXG4gICAgICA6IFtdO1xuXG4gICAgY29uc29sZS5sb2coc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQpO1xuXG4gICAgaWYgKFxuICAgICAgIWludEJhc2tldC5zdWJqZWN0LnZhbHVlLmNyZWF0ZWRCeUd1dCAmJlxuICAgICAgc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQgJiZcbiAgICAgIHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0WydzYW1lVHJhdmVsbGVycyddICYmXG4gICAgICB0cmF2ZWxsZXJzICYmXG4gICAgICB0cmF2ZWxsZXJzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKCcrKysgU2FtZSBUcmF2ZWxsZXJzIGlzIEVuYWJsZWQgKysrJyk7XG4gICAgICBzd2l0Y2ggKFxuICAgICAgICBhd2FpdCB0aGlzLmlzU2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQoXG4gICAgICAgICAgaW50QmFza2V0LFxuICAgICAgICAgIHRyYXZlbGxlcnMsXG4gICAgICAgICAgc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXRbJ3NhbWVUcmF2ZWxsZXJzJ11cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGNhc2UgRGlmZmVyZW50VHJhdmVsbGVyLmNvbnRpbnVlOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIERpZmZlcmVudFRyYXZlbGxlci5jYW5jZWw6XG4gICAgICAgICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xuICAgICAgICBjYXNlIERpZmZlcmVudFRyYXZlbGxlci5uZXdCYXNrZXQ6XG4gICAgICAgICAgaW50QmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IGludEJhc2tldC5pZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpdGVtLmJhc2tldCA9IGludEJhc2tldC5pZDtcbiAgICBpZiAodHJhdmVsbGVycz8ubGVuZ3RoID4gMCkge1xuICAgICAgaXRlbS51c2VycyA9IHRoaXMuaGVscGVycy5tYWtlVXNlcnModHJhdmVsbGVycy5maWx0ZXIodHJhdiA9PiAhdHJhdi5ndWVzdCkpO1xuICAgICAgaXRlbS5ndWVzdHMgPSB0aGlzLmhlbHBlcnMubWFrZVVzZXJzKHRyYXZlbGxlcnMuZmlsdGVyKHRyYXYgPT4gdHJhdi5ndWVzdCkpO1xuICAgICAgaXRlbS5sZWFkUGFzc2VuZ2VyID0gdHJhdmVsbGVyc1swXS5pZDtcbiAgICAgIGl0ZW0ubGVhZFBhc3NlbmdlclR5cGUgPSB0cmF2ZWxsZXJzWzBdLmd1ZXN0XG4gICAgICAgID8gTGVhZFBhc3NlbmdlclR5cGUuR3Vlc3RcbiAgICAgICAgOiBMZWFkUGFzc2VuZ2VyVHlwZS5Vc2VyO1xuICAgIH1cbiAgICBpdGVtLm91dGJvdW5kRGF0ZSA9IGl0ZW0ub3V0Ym91bmREYXRlXG4gICAgICA/IG5ldyBEYXRlKHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlVGltZShpdGVtLm91dGJvdW5kRGF0ZSkpXG4gICAgICA6IGl0ZW0ub3V0Ym91bmREYXRlO1xuICAgIGl0ZW0uaW5ib3VuZERhdGUgPSBpdGVtLmluYm91bmREYXRlXG4gICAgICA/IG5ldyBEYXRlKHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlVGltZShpdGVtLmluYm91bmREYXRlKSlcbiAgICAgIDogaXRlbS5pbmJvdW5kRGF0ZTtcblxuICAgIC8vIGl0ZW0ucmVxdWlyZXNSZWFzb24gPSByZXF1aXJlc1JlYXNvbjtcbiAgICBpdGVtID0gdGhpcy5jaGVja0RldGFpbHMoaXRlbSk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy51c2VyU2VydmljZS5maW5kU2VydmljZShpdGVtLnNlcnZpY2UpLnR5cGU7XG4gICAgc3dpdGNoIChzZXJ2aWNlKSB7XG4gICAgICBjYXNlICdDQVInOlxuICAgICAgICBjb25zdCBjYXJQcmVmZXJyZWRDdXJlbmN5T2JqZWN0ID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8e1xuICAgICAgICAgIGNhcmhpcmU6IHsgZW5hYmxlOiBib29sZWFuIH07XG4gICAgICAgICAgY3VycmVuY3k6IHN0cmluZztcbiAgICAgICAgfT4oVXNlckZhdm9ydXJpdGUuUHJlZmVycmVkQ3VycmVuY3kpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2FyUHJlZmVycmVkQ3VyZW5jeU9iamVjdCAmJlxuICAgICAgICAgIGNhclByZWZlcnJlZEN1cmVuY3lPYmplY3QuY2FyaGlyZT8uZW5hYmxlICYmXG4gICAgICAgICAgY2FyUHJlZmVycmVkQ3VyZW5jeU9iamVjdC5jdXJyZW5jeVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZXJDdXJyZW5jeSA9IGNhclByZWZlcnJlZEN1cmVuY3lPYmplY3QuY3VycmVuY3k7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdIT1RFTCc6XG4gICAgICAgIGNvbnN0IGhvdGVsUHJlZmVycmVkQ3VyZW5jeU9iamVjdCA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PHtcbiAgICAgICAgICBob3RlbDogeyBlbmFibGU6IGJvb2xlYW4gfTtcbiAgICAgICAgICBjdXJyZW5jeTogc3RyaW5nO1xuICAgICAgICB9PihVc2VyRmF2b3J1cml0ZS5QcmVmZXJyZWRDdXJyZW5jeSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBob3RlbFByZWZlcnJlZEN1cmVuY3lPYmplY3QgJiZcbiAgICAgICAgICBob3RlbFByZWZlcnJlZEN1cmVuY3lPYmplY3QuaG90ZWw/LmVuYWJsZSAmJlxuICAgICAgICAgIGhvdGVsUHJlZmVycmVkQ3VyZW5jeU9iamVjdC5jdXJyZW5jeVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZXJDdXJyZW5jeSA9IGhvdGVsUHJlZmVycmVkQ3VyZW5jeU9iamVjdC5jdXJyZW5jeTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaXRlbS5jb252ZXJ0Q3VycmVuY3lUbyA9IHRoaXMudXNlckN1cnJlbmN5O1xuICAgIHRoaXMucmVtb3ZlQm9va2VkQmFza2V0KCk7XG5cbiAgICBpZiAoaXRlbSAmJiBpbnRCYXNrZXQpIHtcbiAgICAgIHRoaXMuYWRkaW5nVG9CYXNrZXQubmV4dCh0cnVlKTtcbiAgICAgIC8vIHRoaXMgaXMgdGhlIGxhc3QgcG9pbnRcbiAgICAgIGF3YWl0IHRoaXMuYWRkSXRlbVRvQmFza2V0VXBkYXRlclxuICAgICAgICAudXBkYXRlT25lKGl0ZW0pXG4gICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAudGhlbihcbiAgICAgICAgICAobmV3QmFza2V0OiBQYXJ0aWFsPFVzZXJCYXNrZXRSZXN1bHQ+KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1pVmlld2VkID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBoZXJlIEkgd2FudCB0aGUgbmV3IGJhc2tldEl0ZW0gSWRcbiAgICAgICAgICAgIGNvbnN0IG9sZEl0ZW1JZHMgPSBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5iYXNrZXRJdGVtcy5tYXAoaXRlbSA9PiBpdGVtLmlkKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Jhc2tldEl0ZW1JZHMgPSBuZXdCYXNrZXQuYmFza2V0SXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgICAgICAvLyBkb24ndCBuZWVkIG1pIGhlcmVcbiAgICAgICAgICAgIGNvbnN0IG5ld0lkID0gbmV3QmFza2V0SXRlbUlkcy5maW5kKGlkID0+ICFvbGRJdGVtSWRzLmluY2x1ZGVzKGlkKSk7XG5cbiAgICAgICAgICAgIGludEJhc2tldC5uZXh0KFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uaW50QmFza2V0LnN1YmplY3QudmFsdWUsXG4gICAgICAgICAgICAgICAgLi4ubmV3QmFza2V0XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIG5ld0lkXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBzZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW3NlcnZpY2VdLmJvb2tpbmdfY2hvc2VuID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlYXJjaFNlcnZpY2Uuc2VhcmNoX29iamVjdHNbc2VydmljZV0uY2hvc2VuID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBiaTogR2V0VXNlckJhc2tldEl0ZW1SZXN1bHRbXSA9IG5ld0Jhc2tldC5iYXNrZXRJdGVtcztcbiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0QmFza2V0SXRlbXNFbWl0dGVyLm5leHQoYmkpO1xuICAgICAgICAgICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQobmV3QmFza2V0LmlkKTtcbiAgICAgICAgICAgIHRoaXMuYWRkaW5nVG9CYXNrZXQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgKysrIEN1cnJlbnRseSBBZGRpbmc6ICR7dGhpcy5pdGVtc0N1cnJlbnRseUJlaW5nQWRkZWR9IGl0ZW1zICsrK2ApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJysrKyBBZGQgSXRlbSB0byBCYXNrZXQgQ2FsbCBGaW5pc2hlZCEgKysrJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmFkZGluZ1RvQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY29udGludWU7XG4gIH1cblxuICBjaGVja0Jhc2tldEZvckludm9rZWQoXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPixcbiAgICBib2JvOiBUcmF2ZWxsZXIsXG4gICAgaWdub3JlSW52b2tlZENoZWNrOiBib29sZWFuXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIC8vIHRoaXMgY2hhbmdlIGlzIHBvdGVudGlhbGx5IHRoZSByZWFzb24gd2h5IHdlIHNvbWV0aW1lcyBnZXQgYW4gZXJyb3IgYWRkaW5nIHRvIGJhc2tldCwgbm8gaW50QmFza2V0XG4gICAgaWYgKGludEJhc2tldCAmJiBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZT8uaW52b2tlZFVzZXI/LmlkICE9PSBib2JvPy5pZCkge1xuICAgICAgaWYgKGlnbm9yZUludm9rZWRDaGVjaykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMubmV3QmFza2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgIE1vZGFsVHlwZXMuRGlmZmVyZW50SW52b2tkZWRVc2VyQ29tcG9uZW50LFxuICAgICAgICB7IGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmFza2V0Qm9ibzogaW50QmFza2V0LnN1YmplY3QudmFsdWUuaW52b2tlZFVzZXIsXG4gICAgICAgICAgY3VycmVudEJvYm86IGJvYm9cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNvbnRpbnVlKTtcbiAgfVxuXG4gIGlzU2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQoXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPixcbiAgICB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSxcbiAgICBzYW1lVHJhdmVsbGVzclBlckJhc2tldDogbnVtYmVyXG4gICk6IFByb21pc2U8RGlmZmVyZW50VHJhdmVsbGVyPiB7XG4gICAgbGV0IHNhbWVUcmF2ZWxsZXJzOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGV0IHVuaXF1ZVVzZXJzOiBVc2VyW10gPSBbXTtcbiAgICBsZXQgdW5pcXVlVXNlcnNJZHM6IHN0cmluZ1tdID0gW107XG4gICAgaW50QmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMuZm9yRWFjaCgoYmFza2V0OiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICBiYXNrZXQudXNlcnMuZm9yRWFjaCgodXNlcjogVXNlcikgPT4ge1xuICAgICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IHVuaXF1ZVVzZXJzLnNvbWUoKGV4aXN0aW5nVXNlcjogVXNlcikgPT4gZXhpc3RpbmdVc2VyLmlkID09PSB1c2VyLmlkKTtcblxuICAgICAgICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgdW5pcXVlVXNlcnMucHVzaCh1c2VyKTtcbiAgICAgICAgICB1bmlxdWVVc2Vyc0lkcy5wdXNoKHVzZXIuaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRyYXZlbGxlcnMuZm9yRWFjaCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcbiAgICAgIGlmICghdW5pcXVlVXNlcnNJZHMuc29tZSgoaWQ6IHN0cmluZykgPT4gaWQgPT09IHRyYXZlbGxlci5pZCkpIHtcbiAgICAgICAgdW5pcXVlVXNlcnNJZHMucHVzaCh0cmF2ZWxsZXIuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNhbWVUcmF2ZWxsZXJzID0gdW5pcXVlVXNlcnNJZHMubGVuZ3RoIDw9IHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGArKysgRXJyb3IgZGV0ZXJtZW5pbmcgc2FtZSB0cmF2ZWxsZXJzOiAke2Vycm9yfSArKytgKTtcbiAgICB9XG5cbiAgICBpZiAoaW50QmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubGVuZ3RoID4gMCAmJiAhc2FtZVRyYXZlbGxlcnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICBNb2RhbFR5cGVzLkRpZmZlcmVudFRyYXZlbGxlclBlckJhc2tldENvbXBvbmVudCxcbiAgICAgICAgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJbkJhc2tldDogdW5pcXVlVXNlcnMsXG4gICAgICAgICAgdHJhdmVsbGVyczogdHJhdmVsbGVyc1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudFRyYXZlbGxlci5jb250aW51ZSk7XG4gIH1cblxuICBsb2FkQmFza2V0KGlkOiBzdHJpbmcsIGZvcmNlbG9hZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgbGV0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChpZCk7XG4gICAgaWYgKCFpbnRCYXNrZXQgfHwgZm9yY2Vsb2FkKSB7XG4gICAgICBpbnRCYXNrZXQgPSBuZXcgSW50ZXJuYWxCYXNrZXQoXG4gICAgICAgIHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBiYXNrZXRJdGVtczogW11cbiAgICAgICAgfSBhcyBCYXNrZXREZXRhaWxzLFxuICAgICAgICB0aGlzLmhlbHBlcnMsXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXIsXG4gICAgICAgIHRoaXMucmVxdWlyZXNTZXJ2aWNlLFxuICAgICAgICB0aGlzLnJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlXG4gICAgICApO1xuICAgICAgdGhpcy5jdXJyZW50QmFza2V0cy5wdXNoKGludEJhc2tldCk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbmN5T2JqZWN0ID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8e1xuICAgICAgY3VycmVuY3k6IHN0cmluZztcbiAgICAgIGhvdGVsOiB7XG4gICAgICAgIGVuYWJsZTogYm9vbGVhbjtcbiAgICAgIH07XG4gICAgICBjYXJoaXJlOiB7XG4gICAgICAgIGVuYWJsZTogYm9vbGVhbjtcbiAgICAgIH07XG4gICAgfT4oVXNlckZhdm9ydXJpdGUuUHJlZmVycmVkQ3VycmVuY3kpO1xuICAgIGlmIChjdXJyZW5jeU9iamVjdD8uaG90ZWw/LmVuYWJsZSB8fCBjdXJyZW5jeU9iamVjdD8uY2FyaGlyZT8uZW5hYmxlKSB7XG4gICAgICB0aGlzLnVzZXJDdXJyZW5jeSA9IGN1cnJlbmN5T2JqZWN0LmN1cnJlbmN5O1xuICAgIH1cblxuICAgIHRoaXMuYmFza2V0RmV0Y2hlclxuICAgICAgLmZldGNoT25lKHsgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LCBpZCwgd2l0aFN1cHBsZW1lbnRhbDogdHJ1ZSB9KVxuICAgICAgLnN1YnNjcmliZSgobmV3QmFza2V0OiBVc2VyQmFza2V0UmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlQmFza2V0KGlkLCBvZig8QmFza2V0RGV0YWlscz5uZXdCYXNrZXQpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc3Vic3JpYmVUb0Jhc2tldChpZDogc3RyaW5nLCBvYnNlcnZlcjogT2JzZXJ2ZXI8QmFza2V0RGV0YWlscz4pOiB2b2lkIHtcbiAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoaWQpO1xuICAgIGlmIChpbnRCYXNrZXQpIHtcbiAgICAgIGludEJhc2tldC5zdWJqZWN0LnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRXhwaXJlZEl0ZW1zKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoaWQpO1xuICAgIGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zXG4gICAgICAuZmlsdGVyKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiBiYXNrZXRJdGVtLmxhdGVzdFZhbGlkYXRpb25QcmljZURpZmZlcmVuY2UgIT09IDAgfHwgYmFza2V0SXRlbS5leHBpcmVkO1xuICAgICAgfSlcbiAgICAgIC5mb3JFYWNoKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlQmFza2V0SXRlbShpZCwgYmFza2V0SXRlbSk7XG4gICAgICB9KTtcbiAgfVxuXG5cbmFzeW5jIHJlbW92ZUJhc2tldEl0ZW0oYmFza2V0SWQ6IHN0cmluZywgaXRlbTogR2V0VXNlckJhc2tldEl0ZW1SZXN1bHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdGhpcy5yZW1vdmluZ0Zyb21CYXNrZXQubmV4dCh0cnVlKTtcbiAgbGV0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4gPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0SWQpO1xuXG4gIGlmIChpdGVtPy5zZXJ2aWNlPy50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbCkge1xuICAgIGNvbnN0IGhvdGVsSXRlbXMgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMuZmlsdGVyKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpdGVtLmRldGFpbC5ob3RlbElkID09PSBiYXNrZXRJdGVtLmRldGFpbC5ob3RlbElkICYmXG4gICAgICAgIGl0ZW0uZGV0YWlsLnJvb21zWzBdLmlkID09PSBiYXNrZXRJdGVtLmRldGFpbC5yb29tc1swXS5pZCAmJlxuICAgICAgICBpdGVtLmRldGFpbC5yb29tc1swXS5jaGVja0luID09PSBiYXNrZXRJdGVtLmRldGFpbC5yb29tc1swXS5jaGVja0luICYmXG4gICAgICAgIGl0ZW0uZGV0YWlsLnJvb21zWzBdLmNoZWNrT3V0ID09PSBiYXNrZXRJdGVtLmRldGFpbC5yb29tc1swXS5jaGVja091dFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmIChob3RlbEl0ZW1zPy5sZW5ndGggPiAxKSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuV2FybmluZ1JlbW92ZU1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBob3RlbEl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IG5ld0Jhc2tldCA9IGF3YWl0IHRoaXMucmVtb3ZlSXRlbUZyb21CYXNrZXRVcGRhdGVyXG4gICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgICBiYXNrZXRJdGVtOiBpdGVtLmlkXG4gICAgICAgICAgfSlcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgIC50b1Byb21pc2UoKTtcblxuICAgICAgICBpZiAobmV3QmFza2V0KSB7XG4gICAgICAgICAgdGhpcy5taVZpZXdlZCA9IGZhbHNlO1xuICAgICAgICAgIGludEJhc2tldD8ubmV4dCh7XG4gICAgICAgICAgICAuLi5pbnRCYXNrZXQuc3ViamVjdC52YWx1ZSxcbiAgICAgICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucmVtb3ZpbmdGcm9tQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KGJhc2tldElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdCYXNrZXQgPSBhd2FpdCB0aGlzLnJlbW92ZUl0ZW1Gcm9tQmFza2V0VXBkYXRlclxuICAgICAgICAudXBkYXRlT25lKHtcbiAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgYmFza2V0SXRlbTogaXRlbS5pZFxuICAgICAgICB9KVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG5cbiAgICAgIGlmIChuZXdCYXNrZXQpIHtcbiAgICAgICAgdGhpcy5taVZpZXdlZCA9IGZhbHNlO1xuICAgICAgICBpbnRCYXNrZXQ/Lm5leHQoe1xuICAgICAgICAgIC4uLmludEJhc2tldC5zdWJqZWN0LnZhbHVlLFxuICAgICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW1vdmluZ0Zyb21CYXNrZXQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KGJhc2tldElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbmV3QmFza2V0ID0gYXdhaXQgdGhpcy5yZW1vdmVJdGVtRnJvbUJhc2tldFVwZGF0ZXJcbiAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGJhc2tldEl0ZW06IGl0ZW0uaWRcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuXG4gICAgaWYgKG5ld0Jhc2tldCkge1xuICAgICAgdGhpcy5taVZpZXdlZCA9IGZhbHNlO1xuICAgICAgaW50QmFza2V0Py5uZXh0KHtcbiAgICAgICAgLi4uaW50QmFza2V0LnN1YmplY3QudmFsdWUsXG4gICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlbW92aW5nRnJvbUJhc2tldC5uZXh0KGZhbHNlKTtcbiAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KGJhc2tldElkKTtcbiAgICB9XG4gIH1cbn1cblxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0QmFza2V0KFxuICAgIGdldEJvb2tlZEJhc2tldDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGluaXRpYWw6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjcmVhdGVkQnlHdXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZE9yQ3JlYXRlQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElELCBnZXRCb29rZWRCYXNrZXQsIGNyZWF0ZWRCeUd1dCkudGhlbihcbiAgICAgIGRhdGEgPT4ge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQmFza2V0KGlkOiBzdHJpbmcpOiBJbnRlcm5hbEJhc2tldDxHVV9RPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEJhc2tldHMuZmluZCgoYmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPikgPT4ge1xuICAgICAgcmV0dXJuIGJhc2tldC5pZCA9PT0gaWQgfHwgYmFza2V0LnRlbXBpZCA9PT0gaWQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRPckNyZWF0ZUJhc2tldChcbiAgICBpZD86IHN0cmluZyxcbiAgICBnZXRCb29rZWRCYXNrZXQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjcmVhdGVkQnlHdXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgbGV0IGJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4gPSBudWxsO1xuXG4gICAgaWYgKCFpZCkge1xuICAgICAgbGV0IGFsbE9wZW5CYXNrZXRzID0gYXdhaXQgdGhpcy5nZXRBbGxPcGVuQmFza2V0cyhcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRmdWxsVXNlckRldGFpbHModHJ1ZSkudXNlckRhdGEudmFsdWUudXNlcl9pZC50b1N0cmluZygpXG4gICAgICApO1xuXG4gICAgICBpZiAoIXRoaXMudXNlclNlcnZpY2UuYm9ibykge1xuICAgICAgICAvLyBFTlQtMzI3NiByZW1vdmUgYmFza2VzdCB3aXRoIGludm9rZWQgdXNlciBpZiB3ZSBhcmUgbm90IGN1cnJlbnRseSBpbnZva2luZyBhIHVzZXIgLy8gPyAtIHNob3VsZCB3ZSBkbyB0aGUgb3Bwb3NpdGUgYXMgd2VsbD9cbiAgICAgICAgYWxsT3BlbkJhc2tldHMgPSBhbGxPcGVuQmFza2V0cy5maWx0ZXIoYmFza2V0ID0+ICFiYXNrZXQuaW52b2tlZFVzZXIpO1xuICAgICAgfVxuICAgICAgLy8gY29uc29sZS5sb2coJ29wZW4gYmFza2V0czogJywgYWxsT3BlbkJhc2tldHMpO1xuICAgICAgLy8gZmluZCB0aGUgbGFzdCB1cGRhdGVkIGJhc2tldFxuICAgICAgaWYgKCFhbGxPcGVuQmFza2V0cz8ubGVuZ3RoKSB7XG4gICAgICAgIC8vIEVOVC0yNjE2IHJlbW92ZWQgYWRkaW5nIHRvIGN1cnJlbnQgYmFza2V0IGFzIHRoaXMgd2FzIGEgZHVwZVxuICAgICAgICBiYXNrZXQgPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2tldChmYWxzZSwgY3JlYXRlZEJ5R3V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGJhc2tldHMgYXJlIGFscmVhZHkgc29ydGVkIGJ5IGxhc3QgdXBkYXRlZCAtIHJldHVybiB0aGUgbGFzdCB1cGRhdGVkIGJhc2tldFxuICAgICAgICBiYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYWxsT3BlbkJhc2tldHNbMF0uaWQpO1xuXG4gICAgICAgIGlmIChiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXMgPT09ICdCT09LRUQnICYmICFnZXRCb29rZWRCYXNrZXQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJysrKyBSZXRyaWV2ZWQgYmFza2V0IGlzIGluIGJvb2tlZCBzdGF0dXMgLSBjcmVhdGluZyBhIG5ldyBvbmUgKysrJyk7XG4gICAgICAgICAgYmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2goYmFza2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY3JlYXRlIG5ldyBiYXNrZXQgZm9yIGd1dCB1c2VycyBldmVuIGlmIG90aGVyIG9wZW4gZ3V0IGJhc2tldCBleGlzdFxuICAgICAgaWYgKGNyZWF0ZWRCeUd1dCAmJiB0aGlzLnJlcXVpcmVOZXdHVVRCYXNrZXQudmFsdWUpIHtcbiAgICAgICAgYmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoZmFsc2UsIGNyZWF0ZWRCeUd1dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaG93IGJhc2tldHMgd2l0aCBPcGVuIEJhc2tldFN0YXR1cyBvbmx5IEVOVC01MjU5XG4gICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMgPSB0aGlzLmN1cnJlbnRCYXNrZXRzLmZpbHRlcihcbiAgICAgICAgICBpbnRCYSA9PiBpbnRCYS5zdWJqZWN0Py52YWx1ZT8uc3RhdHVzID09PSBCYXNrZXRTdGF0dXMuT3BlblxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuYmFza2V0cy5uZXh0KHRoaXMuY3VycmVudEJhc2tldHMpO1xuICAgICAgICBiYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoaWQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnKysrIEZvdW5kIEJhc2tldDogJywgYmFza2V0LCAnICsrKycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBiYXNrZXQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlQmFza2V0KFxuICAgIGNyZWF0ZWRCeUJvbHQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjcmVhdGVkQnlHdXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgdGhpcy5jcmVhdGluZ05ld0Jhc2tldC5uZXh0KHRydWUpO1xuICAgIGNvbnN0IGJhc2tldDogVXNlckJhc2tldFJlc3VsdCA9IHtcbiAgICAgIGlkOiBURU1QSUQgKyBtb21lbnQoKS51bml4KCkudG9TdHJpbmcoKSxcbiAgICAgIG93bmVyOiBudWxsLFxuICAgICAgcmVmZXJlbmNlOiBudWxsLFxuICAgICAgdGl0bGU6IG51bGwsXG4gICAgICBub3RlczogbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogbnVsbCxcbiAgICAgIHVwZGF0ZWRBdDogbnVsbCxcbiAgICAgIGJhc2tldEl0ZW1zOiBbXSxcbiAgICAgIHN0YXR1czogbnVsbCxcbiAgICAgIHZhbGlkYXRlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgY29uc3QgaW50QmFza2V0ID0gbmV3IEludGVybmFsQmFza2V0PEdVX1E+KFxuICAgICAgYmFza2V0LFxuICAgICAgdGhpcy5oZWxwZXJzLFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXIsXG4gICAgICB0aGlzLnJlcXVpcmVzU2VydmljZSxcbiAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2VcbiAgICApO1xuICAgIC8vIHsgc3ViamVjdDogbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNrZXQ+KGJhc2tldCksIHRlbXBpZDogYmFza2V0LmlkLCBpZDogYmFza2V0LmlkLCB0aXRsZTogYmFza2V0LmlkIH07XG5cbiAgICAvLyBlbnQtMjYxNiBvbmx5IHBsYWNlIHdlIG5lZWQgdG8gYWRkIGEgYmFza2V0IHRvIGN1cnJlbnQgYmFza2V0c1xuICAgIGNvbnN0IHRvUmV0dXJuID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXRPbkRCKGludEJhc2tldCwgY3JlYXRlZEJ5Qm9sdCwgY3JlYXRlZEJ5R3V0KTtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2godG9SZXR1cm4pO1xuICAgIC8vIGNvbnNvbGUubG9nKCdEYW45Jyx0aGlzLmN1cnJlbnRCYXNrZXRzKVxuXG4gICAgdGhpcy5iYXNrZXRzLm5leHQodGhpcy5jdXJyZW50QmFza2V0cyk7XG4gICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQodG9SZXR1cm4uaWQpO1xuICAgIHJldHVybiB0b1JldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQmFza2V0T25EQihcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0PEdVX1E+LFxuICAgIGNyZWF0ZWRCeUJvbHQ6IGJvb2xlYW4sXG4gICAgY3JlYXRlZEJ5R1VUOiBib29sZWFuXG4gICk6IFByb21pc2U8SW50ZXJuYWxCYXNrZXQ8R1VfUT4+IHtcbiAgICBjb25zdCBpbnZva2VkVXNlcjogc3RyaW5nIHwge30gPSB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkXG4gICAgICA/IHsgaW52b2tlZFVzZXI6IHRoaXMudXNlclNlcnZpY2UuYm9ibz8uaWQgfVxuICAgICAgOiB7fTtcblxuICAgIGNvbnN0IG11dGF0aW9uOiBDcmVhdGVCYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHsgLi4uaW52b2tlZFVzZXIsIGNyZWF0ZWRCeUJvbHQsIGNyZWF0ZWRCeUdVVCB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuYmFza2V0Q3JlYXRvclxuICAgICAgICAudXBkYXRlT25lKG11dGF0aW9uKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRpbmdOZXdCYXNrZXQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICBpbnRCYXNrZXQuaWQgPSBiYXNrZXQuaWQ7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQpO1xuICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIHRoZSBzdWJqZWN0IHRvIGxpc3RlbiBmb3IgZW1pdHRlZCB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGludEJhc2tldC5zdWJqZWN0LnN1YnNjcmliZSgodmFsdWU6IEJhc2tldERldGFpbHMpID0+IHtcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGVtaXR0ZWQgdmFsdWUgaXMgbm90IG51bGwgYW5kIGhhcyBhIHN0YXR1cyBwcm9wZXJ0eVxuICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRoZSBpbnRCYXNrZXQgb2JqZWN0XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShpbnRCYXNrZXQpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0aW5nTmV3QmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHt9XG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVNZW51KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lbnVTdGF0ZSA9PT0gTWVudVNsaWRlRW51bS5JTiB8fCB0aGlzLm1lbnVTdGF0ZSA9PT0gTWVudVNsaWRlRW51bS5GTEFUKSB7XG4gICAgICB0aGlzLm1lbnVTdGF0ZSA9IE1lbnVTbGlkZUVudW0uT1VUO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lbnVTdGF0ZSA9IE1lbnVTbGlkZUVudW0uSU47XG4gICAgfVxuICB9XG5cbiAgY2xvc2VNZW51KCk6IHZvaWQge1xuICAgIHRoaXMubWVudVN0YXRlID0gTWVudVNsaWRlRW51bS5PVVQ7XG4gIH1cblxuICBmaW5kTGF0ZXN0RmxpZ2h0SXRlbXMoYmFza2V0SXRlbXM6IEJhc2tldEl0ZW1bXSk6IEJhc2tldEl0ZW0gfCBudWxsIHtcbiAgICBsZXQgbGFzdEZsaWdodEl0ZW06IEJhc2tldEl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgc2Vjb25kTGFzdEZsaWdodEl0ZW06IEJhc2tldEl0ZW0gfCBudWxsID0gbnVsbDtcblxuICAgIChiYXNrZXRJdGVtcyB8fCBbXSkuZm9yRWFjaChiYXNrZXRJdGVtID0+IHtcbiAgICAgIGlmIChiYXNrZXRJdGVtLnNlcnZpY2UudHlwZSA9PT0gU2VydmljZVR5cGUuRmxpZ2h0KSB7XG4gICAgICAgIHNlY29uZExhc3RGbGlnaHRJdGVtID0gbGFzdEZsaWdodEl0ZW07XG4gICAgICAgIGxhc3RGbGlnaHRJdGVtID0gYmFza2V0SXRlbTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGlmIGR1YWwgc2luZ2xlIGFuZCByZXR1cm5UcmlwIHNldCBvdXRib3VuZCBkdWFsIHNpbmdsZSBmbGlnaHRcbiAgICBpZiAoXG4gICAgICBsYXN0RmxpZ2h0SXRlbSAmJlxuICAgICAgbGFzdEZsaWdodEl0ZW0uc2VhcmNoUXVlcnkucmV0dXJuVHJpcCAmJlxuICAgICAgbGFzdEZsaWdodEl0ZW0uZGV0YWlsLmpvdXJuZXlUeXBlID09PSBGbGlnaHRKb3VybmV5VHlwZS5TaW5nbGVcbiAgICApIHtcbiAgICAgIHJldHVybiBzZWNvbmRMYXN0RmxpZ2h0SXRlbSB8fCBsYXN0RmxpZ2h0SXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdEZsaWdodEl0ZW07XG4gIH1cblxuICBnZXRMYXRlc3RCYXNrZXRJdGVtRm9yVHlwZXMoYmFza2V0SXRlbXM6IEJhc2tldEl0ZW1bXSk6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4ge1xuICAgIGNvbnN0IGxhdGVzdEZsaWdodEl0ZW0gPSB0aGlzLmZpbmRMYXRlc3RGbGlnaHRJdGVtcyhiYXNrZXRJdGVtcyk7XG4gICAgcmV0dXJuIChiYXNrZXRJdGVtcyB8fCBbXSkucmVkdWNlKFxuICAgICAgKGxhdGVzdEl0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+LCBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICAgIGlmIChiYXNrZXRJdGVtLnNlcnZpY2UudHlwZSAhPT0gU2VydmljZVR5cGUuRmxpZ2h0KSB7XG4gICAgICAgICAgbGF0ZXN0SXRlbXNbYmFza2V0SXRlbS5zZXJ2aWNlLnR5cGVdID0gYmFza2V0SXRlbTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXRlc3RGbGlnaHRJdGVtKSB7XG4gICAgICAgICAgbGF0ZXN0SXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XSA9IGxhdGVzdEZsaWdodEl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhdGVzdEl0ZW1zO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0RldGFpbHMoaXRlbTogQWRkSXRlbVRvQmFza2V0LlZhcmlhYmxlcyk6IEFkZEl0ZW1Ub0Jhc2tldC5WYXJpYWJsZXMge1xuICAgIGNvbnN0IHNlcnZpY2VUb0NoZWNrOiBTZXJ2aWNlID0gdGhpcy51c2VyU2VydmljZS5maW5kU2VydmljZShpdGVtLnNlcnZpY2UpO1xuICAgIGlmICghc2VydmljZVRvQ2hlY2spIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIHNlcnZpY2UgZm9yIGJhc2tldCBpdGVtIDogJyArIGl0ZW0uc2VydmljZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aGUgaXRlbS5kZXRhaWwgb2JqZWN0IGFnYWluc3QgdGhlIHJlbGV2YW50IHNlcnZpY2UgZGV0YWlsU2NoZW1hIHVzaW5nIEFqdlxuICAgIGNvbnN0IGFqdiA9IG5ldyBBanYoKTtcbiAgICAvLyBhZGRGb3JtYXRzKGFqdik7Ly8gPC0tLS0tLS0gVEhJUyBJUyBPVVIgUFJPQkxFTVxuXG4gICAgLy8gQ3VzdG9tIEphdmFzY3JpcHQgSVNPIERhdGUgVGltZSBmb3JtYXRcbiAgICBhanYuYWRkRm9ybWF0KCdqcy1kYXRlLXRpbWUnLCAoZGF0ZVRpbWVTdHJpbmc6IGFueSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBkYXRlVGltZVN0cmluZyA9PT0gJ29iamVjdCcgJiYgZGF0ZVRpbWVTdHJpbmcuaGFzT3duUHJvcGVydHkoJ3RvSVNPU3RyaW5nJykpIHtcbiAgICAgICAgZGF0ZVRpbWVTdHJpbmcgPSBkYXRlVGltZVN0cmluZy50b0lTT1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTmFOKERhdGUucGFyc2UoZGF0ZVRpbWVTdHJpbmcpKTsgLy8gYW55IHRlc3QgdGhhdCByZXR1cm5zIHRydWUvZmFsc2VcbiAgICB9KTtcblxuICAgIGFqdi5hZGRGb3JtYXQoJ3JhaWxTZWF0aW5nJywgKCkgPT4ge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBhanYuYWRkRm9ybWF0KCdwYXNzcG9ydCcsICgpID0+IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgYWp2LmFkZEZvcm1hdCgnc3BlY2lhbFJlcXVlc3QnLCAoKSA9PiB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGFqdi5hZGRGb3JtYXQoJ2RhdGUtdGltZScsICgpID0+IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdmFsaWRhdGVEZXRhaWxTY2hlbWEgPSBhanYuY29tcGlsZShzZXJ2aWNlVG9DaGVjay5kZXRhaWxTY2hlbWEpO1xuICAgIGNvbnN0IHZhbGlkYXRlU2VhcmNoU2NoZW1hID0gYWp2LmNvbXBpbGUoc2VydmljZVRvQ2hlY2suc2VhcmNoUXVlcnlTY2hlbWEpO1xuXG4gICAgLy8gaWYgdGhlcmUgYXJlIGFueSBtb21lbnQgZGF0ZSBvYmplY3RzIGluIHRoZSBzZWFyY2hRdWVyeSBvYmplY3QgY29udmVydCB0aGVzZSB0byBkYXRlLXRpbWUgc3RyaW5nc1xuICAgIGl0ZW0uc2VhcmNoUXVlcnkgPSB0aGlzLmhlbHBlcnMuc2FuaXRpemVNb21lbnREYXRlcyhpdGVtLnNlYXJjaFF1ZXJ5KTtcbiAgICBpdGVtLmRldGFpbCA9IHRoaXMuaGVscGVycy5yZW1vdmVOdWxscyhpdGVtLmRldGFpbCk7XG5cbiAgICBpZiAoIXZhbGlkYXRlU2VhcmNoU2NoZW1hKGl0ZW0uc2VhcmNoUXVlcnkpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGBJdGVtIHNlYXJjaFF1ZXJ5IGlzIG5vdCB2YWxpZCBmb3IgJHtzZXJ2aWNlVG9DaGVjay5uYW1lfSBzZWFyY2ggc2NoZW1hLmA7XG4gICAgICBjb25zb2xlLndhcm4oJ3NlYXJjaFNjaGVtYScsIHNlcnZpY2VUb0NoZWNrLnNlYXJjaFF1ZXJ5U2NoZW1hKTtcbiAgICAgIGNvbnNvbGUud2FybignaXRlbS5zZWFyY2hRdWVyeScsIGl0ZW0uc2VhcmNoUXVlcnkpO1xuICAgICAgY29uc29sZS53YXJuKCdTZWFyY2ggUXVlcnkgVmFsaWRhdGlvbiBlcnJvcnMnLCB2YWxpZGF0ZVNlYXJjaFNjaGVtYS5lcnJvcnMpO1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0sIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXZhbGlkYXRlRGV0YWlsU2NoZW1hKGl0ZW0uZGV0YWlsKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBgSXRlbSBkZXRhaWwgaXMgbm90IHZhbGlkIGZvciAke3NlcnZpY2VUb0NoZWNrLm5hbWV9IGRldGFpbCBzY2hlbWEuYDtcbiAgICAgIGNvbnNvbGUud2FybignZGV0YWlsU2NoZW1hJywgc2VydmljZVRvQ2hlY2suZGV0YWlsU2NoZW1hKTtcbiAgICAgIGNvbnNvbGUud2FybignaXRlbS5kZXRhaWwnLCBpdGVtLmRldGFpbCk7XG4gICAgICBjb25zb2xlLndhcm4oJ0RldGFpbCBlcnJvcnMnLCB2YWxpZGF0ZURldGFpbFNjaGVtYS5lcnJvcnMpO1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0sIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGl0ZW0ubG93ZXN0UHJpY2UpIGl0ZW0ubG93ZXN0UHJpY2UgPSAraXRlbS5sb3dlc3RQcmljZS50b0ZpeGVkKDIpO1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgZ2V0TnVtYmVySXRlbXNGb3JCYXNrZXQoYmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPiA9IG51bGwpOiBudW1iZXIge1xuICAgIGJhc2tldCA9IGJhc2tldCB8fCB0aGlzLmZpbmRCYXNrZXQodGhpcy5jdXJyZW50QmFza2V0SUQpO1xuICAgIHJldHVybiBiYXNrZXQ/LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubGVuZ3RoIHx8IDA7XG4gIH1cblxuICByZW1vdmVCYXNrZXQoYmFza2V0aWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIGlmIChiYXNrZXRpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQmFza2V0VXBkYXRlci51cGRhdGVPbmUoeyBpZDogYmFza2V0aWQgfSkucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICAgIHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk/LmRlc3RydWN0b3IoKTtcbiAgICAgICAgICB0aGlzLmZpbHRlclJlbW92ZUJhc2tldEJ5SWQoYmFza2V0aWQpO1xuICAgICAgICAgIGlmIChiYXNrZXRpZCA9PT0gdGhpcy5zZWxlY3RlZEJhc2tldElkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQmFza2V0SWQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5maWx0ZXIoYmFza2V0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXMgPT09IEJhc2tldFN0YXR1cy5PcGVuO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdEYW4xMCcsdGhpcy5jdXJyZW50QmFza2V0cylcblxuICAgICAgICAgIHRoaXMuYmFza2V0cy5uZXh0KHRoaXMuY3VycmVudEJhc2tldHMpO1xuXG4gICAgICAgICAgaWYgKGJhc2tldGlkID09PSB0aGlzLmN1cnJlbnRCYXNrZXRJRCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSB0aGlzLmN1cnJlbnRCYXNrZXRzWzBdPy5pZCB8fCBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRlbGV0aW5nQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybiBvZihkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29udGludWVTZWFyY2hBbmRCb29rKFxuICAgIGJhc2tldEl0ZW1zOiBhbnlbXSxcbiAgICBpdGluaWFyeVVybDogc3RyaW5nW10sXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2VcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhdGVzdEJhc2tldEl0ZW1zID0gdGhpcy5nZXRMYXRlc3RCYXNrZXRJdGVtRm9yVHlwZXMoYmFza2V0SXRlbXMpO1xuICAgIGNvbnN0IG5leHRTZWFyY2g6IFNlYXJjaE9iamVjdCA9XG4gICAgICBzZWFyY2hTZXJ2aWNlLmdldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChsYXRlc3RCYXNrZXRJdGVtcyk7XG4gICAgY29uc3QgcGF0aCA9IHdpbmRvdz8ubG9jYXRpb24/Lmhhc2g7XG4gICAgY29uc3QgaGFzaFBhdGggPSBwYXRoPy5zcGxpdCgnIycpPy5bMV07XG4gICAgaWYgKFxuICAgICAgbmV4dFNlYXJjaCAmJlxuICAgICAgIShoYXNoUGF0aCA9PT0gbmV4dFNlYXJjaC5yZXN1bHRVcmwgJiYgbmV4dFNlYXJjaC50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbClcbiAgICApIHtcbiAgICAgIGlmIChzZWFyY2hTZXJ2aWNlLmlzQ2xvbmluZy52YWx1ZSkge1xuICAgICAgICByZXR1cm4gW25leHRTZWFyY2gucmVzdWx0VXJsXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChzZWFyY2hTZXJ2aWNlLnNlYXJjaGVzIGFzIGFueSlbbmV4dFNlYXJjaC50eXBlXS51cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcbiAgICAgICAgICBsYXRlc3RCYXNrZXRJdGVtc1xuICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV4dFNlYXJjaC50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbCAmJlxuICAgICAgICAgIHNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdPy5jaGVhcGVzdFByaWNlPy5hbW91bnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy9JZiBob3RlbHMgYXJlIG5leHQgYW5kIHRoZSBob3RlbCBzZWFyY2ggaGFzIGFscmVhZHkgYmVlbiBkb25lIGluIHRoZSBiYWNrZ3JvdW5kIGdvIHN0cmFpZ2h0IHRvIHRoZSByZXN1bHRzXG4gICAgICAgICAgcmV0dXJuIFtuZXh0U2VhcmNoLnJlc3VsdFVybF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtuZXh0U2VhcmNoLnNlYXJjaFVybF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGl0aW5pYXJ5VXJsO1xuICAgIH1cbiAgfVxuXG4gIGFkZFRyYXZlbGxlcnMoXG4gICAgYmFza2V0aWQ6IHN0cmluZyxcbiAgICBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLFxuICAgIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLFxuICAgIGluZGV4OiBudW1iZXIgPSAwXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgaWYgKGluZGV4IDwgdHJhdmVsbGVycy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRyYXZlbGxlciA9IHRyYXZlbGxlcnNbaW5kZXhdO1xuICAgICAgY29uc3QgcGFzc2VuZ2VyVHlwZTogUGFzc2VuZ2VyVHlwZSA9IHRyYXZlbGxlci5pc0NoaWxkXG4gICAgICAgID8gUGFzc2VuZ2VyVHlwZS5DaGlsZFxuICAgICAgICA6IHRyYXZlbGxlci5pc0luZmFudFxuICAgICAgICA/IFBhc3NlbmdlclR5cGUuSW5mYW50XG4gICAgICAgIDogUGFzc2VuZ2VyVHlwZS5BZHVsdDtcblxuICAgICAgaWYgKHRyYXZlbGxlci5ndWVzdCkge1xuICAgICAgICB0aGlzLmFkZEd1ZXN0VG9CYXNrZXRJdGVtXG4gICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgICAgICAgZ3Vlc3RzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogdHJhdmVsbGVyLmlkLFxuICAgICAgICAgICAgICAgIHBhc3NlbmdlclR5cGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZFRyYXZlbGxlcnMoYmFza2V0LmlkLCBiYXNrZXRJdGVtLCB0cmF2ZWxsZXJzLCBpbmRleCArIDEpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hZGRVc2VyVG9CYXNrZXRJdGVtXG4gICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgICAgICAgdXNlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiB0cmF2ZWxsZXIuaWQsXG4gICAgICAgICAgICAgICAgcGFzc2VuZ2VyVHlwZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgd2l0aFN1cHBsZW1lbnRhbDogZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRUcmF2ZWxsZXJzKGJhc2tldC5pZCwgYmFza2V0SXRlbSwgdHJhdmVsbGVycywgaW5kZXggKyAxKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNrZXRGZXRjaGVyXG4gICAgICAgIC5mZXRjaE9uZSh7IGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSwgaWQ6IGJhc2tldC5pZCB9KVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChiYXNrZXQxOiBHZXRVc2VyQmFza2V0UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBiYXNrZXQuc3ViamVjdC5uZXh0KHsgLi4uYmFza2V0LnN1YmplY3QudmFsdWUsIC4uLmJhc2tldDEgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBfID0+IHt9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIGJhc2tldC5uZXh0KGJhc2tldC5zdWJqZWN0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2V0TGVhZFBhc3NlbmdlcihcbiAgICBiYXNrZXRpZDogc3RyaW5nLFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgdHJhdmVsbGVyczogVHJhdmVsbGVyLFxuICAgIGluZGV4OiBudW1iZXIgPSAwLFxuICAgIGxlYWRQYXNzZW5nZXJUeXBlOiBMZWFkUGFzc2VuZ2VyVHlwZSA9IExlYWRQYXNzZW5nZXJUeXBlLlVzZXJcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgYmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGJhc2tldGlkKTtcbiAgICBpZiAoaW5kZXggPCAxKSB7XG4gICAgICB0aGlzLlNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIHVzZXJPckd1ZXN0OiB0cmF2ZWxsZXJzLmlkLFxuICAgICAgICB3aXRoU3VwcGxlbWVudGFsOiBmYWxzZSxcbiAgICAgICAgbGVhZFBhc3NlbmdlclR5cGU6IGxlYWRQYXNzZW5nZXJUeXBlXG4gICAgICB9KS5zdWJzY3JpYmUoXG4gICAgICAgICgpID0+IHt9LFxuICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0TGVhZFBhc3NlbmdlcihiYXNrZXQuaWQsIGJhc2tldEl0ZW0sIHRyYXZlbGxlcnMsIGluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmFza2V0RmV0Y2hlclxuICAgICAgICAuZmV0Y2hPbmUoeyBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksIGlkOiBiYXNrZXQuaWQgfSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYmFza2V0MTogR2V0VXNlckJhc2tldFJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgYmFza2V0LnN1YmplY3QubmV4dCh7IC4uLmJhc2tldC5zdWJqZWN0LnZhbHVlLCAuLi5iYXNrZXQxIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXyA9PiB7fSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBiYXNrZXQubmV4dChiYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUJhc2tldChiYXNrZXRpZDogc3RyaW5nLCBvYnM6IE9ic2VydmFibGU8QmFza2V0RGV0YWlscz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnVwZGF0aW5nQmFza2V0ID0gdHJ1ZTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb2JzLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxuICAgICAgICAoYmFza2V0OiBCYXNrZXREZXRhaWxzKSA9PiB7XG4gICAgICAgICAgLy8gRU5ULTc4MjcgYWRkZWQgdGhpcyB0aW1lb3V0IGFzIHdlIHdlcmUgdHJ5aW5nIHRvIGdyYWIgdGhlIGN1cnJlbnQgYmFza2V0cyBzb21ldGltZXMgYW5kIHdlIHdlcmUgc3RpbGwgd2FpdGluZyBmb3IgYW4gdXBkYXRlLCB0YmggaSB3b3VsZCBoYXZlIHJhdGhlciBmb3VuZCB3aGljaCBjYWxsIHdhcyBjYXVzaW5nIHRoZSBkZWxheVxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGluZ0Jhc2tldCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jdXJyZW50QmFza2V0cywgdGhpcy5jdXJyZW50QmFza2V0SUQsIGJhc2tldGlkKTtcbiAgICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgICAvLyBwYXNzaW5nIGFnZW50IGZvciBtaSBjaGVja1xuICAgICAgICAgICAgaW50QmFza2V0Py5uZXh0KGJhc2tldCwgdGhpcy5pc1VzZXJBZ2VudCgpKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRpbmdCYXNrZXQgPSBmYWxzZTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0aWQpO1xuICAgICAgICAgIGludEJhc2tldC5uZXh0KGludEJhc2tldC5zdWJqZWN0LnZhbHVlKTtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGluZ0Jhc2tldCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmV2YWxpZGF0ZShiYXNrZXRpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRpZCxcbiAgICAgIHRoaXMucmV2YWxpZGF0ZUJhc2tldFVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBpZDogYmFza2V0aWQsXG4gICAgICAgIHdpdGhTdXBwbGVtZW50YWw6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIubmV4dChiYXNrZXRpZCk7XG4gIH1cblxuICAvLyB2YWxpZGF0ZUZyZWVWYWxlTWkobWlJdGVtOiBNYW5hZ2VtZW50SW5mbywgZnJlZVZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAvLyAgICAgdGhpcy52YWxpZGF0ZU1pRnJlZVZhbHVlLnRlc3QoeyBtaTogbWlJdGVtLmlkLCBmcmVlVmFsdWUgfSkuc3Vic2NyaWJlKHJlc29sdmUsIHJlamVjdCk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICBhY2NlcHROZXdQcmljZShiYXNrZXRpZDogc3RyaW5nLCBpdGVtOiBCYXNrZXRJdGVtKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRpZCxcbiAgICAgIHRoaXMuYWNjZXB0TmV3UHJpY2VVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGl0ZW0uaWRcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHZhbGlkYXRlTWlCYXNrZXRJdGVtKGJhc2tldEl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0ge1xuICAgICAgICBiYXNrZXRJdGVtSWRcbiAgICAgIH07XG4gICAgICB0aGlzLnZhbGlkYXRlQmFza2V0SXRlbU1pRmV0Y2hlci5mZXRjaE9uZShxdWVyeSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZU1pQmFza2V0KGJhc2tldElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBxdWVyeSA9IHsgYmFza2V0SWQgfTtcbiAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy52YWxpZGF0ZUJhc2tldE1pRmV0Y2hlci5mZXRjaE9uZShxdWVyeSkpLnRoZW4oZGF0YSA9PiB7XG4gICAgICB0aGlzLm1pVmlld2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMubWlzc2luZ01JcyA9IGRhdGE7XG4gICAgfSk7XG4gIH1cblxuICBnZXRNaUF1dG9TdWdlc3Rpb25zKFxuICAgIG1pSWQ6IHN0cmluZyxcbiAgICB0ZXJtOiBzdHJpbmcsXG4gICAgaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXG4gICAgc2VydmljZUlkPzogc3RyaW5nLFxuICAgIG1pVmFsdWVHcm91cElkPzogc3RyaW5nLFxuICAgIHRyaWdnZXJNSVZhbHVlSWQ/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxNYW5hZ2VtZW50SW5mb1ZhbHVlW10+IHtcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCBnZXRNaUF1dG9CeVZhbHVlOiBPYnNlcnZhYmxlPE1hbmFnZW1lbnRJbmZvVmFsdWVbXT4gPVxuICAgICAgdGhpcy5zZWFyY2hNSUF1dG9TdWdnZXN0VmFsdWVzRmV0Y2hlci5mZXRjaE9uZSh7XG4gICAgICAgIG1hbmFnZW1lbnRJbmZvSWQ6IG1pSWQsXG4gICAgICAgIHF1ZXJ5OiB0ZXJtLFxuICAgICAgICBtYW5hZ2VtZW50SW5mb1ZhbHVlR3JvdXBJZDogbWlWYWx1ZUdyb3VwSWQsXG4gICAgICAgIHRyaWdnZXJNSVZhbHVlSWRcbiAgICAgIH0pO1xuICAgIGNvbnN0IGdldE1pQXV0b0J5TGFiZWw6IE9ic2VydmFibGU8TWFuYWdlbWVudEluZm9WYWx1ZVtdPiA9XG4gICAgICB0aGlzLnNlYXJjaE1JQXV0b1N1Z2dlc3RWYWx1ZXNGZXRjaGVyLmZldGNoT25lKHtcbiAgICAgICAgbWFuYWdlbWVudEluZm9JZDogbWlJZCxcbiAgICAgICAgcXVlcnk6IHRlcm0sXG4gICAgICAgIG1hbmFnZW1lbnRJbmZvVmFsdWVHcm91cElkOiBtaVZhbHVlR3JvdXBJZCxcbiAgICAgICAgdHJpZ2dlck1JVmFsdWVJZFxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gZm9ya0pvaW4oW2dldE1pQXV0b0J5VmFsdWUsIGdldE1pQXV0b0J5TGFiZWxdKS5waXBlKFxuICAgICAgbWFwKChbbWlCeVZhbHVlLCBtaUJ5TGFiZWxdKSA9PiB7XG4gICAgICAgIGxldCBtaUJ5VmFsdWVMYWJlbCA9IFsuLi5taUJ5VmFsdWUsIC4uLm1pQnlMYWJlbF07XG4gICAgICAgIG1pQnlWYWx1ZUxhYmVsID0gbWlCeVZhbHVlTGFiZWwuZmlsdGVyKFxuICAgICAgICAgIChtaUl0ZW0sIGluZGV4KSA9PiBtaUJ5VmFsdWVMYWJlbC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09IG1pSXRlbS5pZCkgPT09IGluZGV4XG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKG1pQnlWYWx1ZUxhYmVsKTtcblxuICAgICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xuICAgICAgICByZXR1cm4gbWlCeVZhbHVlTGFiZWw7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBmb3JtYXRTYXZlZE1pKG1pOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSk6IFNldE1pVmFsdWVJbnB1dFtdIHtcbiAgICByZXR1cm4gbWkucmVkdWNlKChhY2MsIGl0ZW06IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZCkgPT4ge1xuICAgICAgaWYgKGl0ZW0uc2VsZWN0ZWRWYWx1ZSAmJiBpdGVtLnZhbHVlRWRpdGFibGUgJiYgKGl0ZW0ucmVxdWlyZWQgfHwgaXRlbS5jb25kaXRpb25hbCkpIHtcbiAgICAgICAgLy8gaWYgKGl0ZW0uc2VsZWN0ZWRWYWx1ZS5mcmVlVmFsdWUpIHtcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIG1pSWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgbWlWYWx1ZUlkOlxuICAgICAgICAgICAgaXRlbS51aVByZXNlbnRhdGlvbiAhPT0gJ0xPT0tVUCcgPyBpdGVtLnNlbGVjdGVkVmFsdWUubWFuYWdlbWVudEluZm9WYWx1ZT8uaWQgOiAnJyxcbiAgICAgICAgICBtaUZyZWVWYWx1ZTpcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWRWYWx1ZS5mcmVlVmFsdWUgfHwgaXRlbS5zZWxlY3RlZFZhbHVlLm1hbmFnZW1lbnRJbmZvVmFsdWU/LnZhbHVlLFxuICAgICAgICAgIG51bGxpZnlTZWxlY3RlZFZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSBhcyBTZXRNaVZhbHVlSW5wdXRbXSk7XG4gIH1cblxuICBmaWx0ZXJQcmVTZWxlY3RlZE1JKFxuICAgIGl0ZW1MaXN0OiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSxcbiAgICB2YWx1ZTogQmFza2V0SW5mb01pRGV0YWlsc0ltcGxcbiAgKTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10ge1xuICAgIHJldHVybiBpdGVtTGlzdC5maWx0ZXIoKGxpc3RJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nTUkgPSB2YWx1ZS5iYXNrZXRJdGVtLm1hbmFnZW1lbnRJbmZvLmZpbmQoXG4gICAgICAgIChtaTogQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvKSA9PiBtaS5tYW5hZ2VtZW50SW5mby5pZCA9PT0gbGlzdEl0ZW0uaWRcbiAgICAgICk7XG4gICAgICBpZiAoIW1hdGNoaW5nTUkuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtYXRjaGluZ01JLnNlbGVjdGVkVmFsdWU/LmZyZWVWYWx1ZSAhPT0gbGlzdEl0ZW0uc2VsZWN0ZWRWYWx1ZT8uZnJlZVZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZU1pRGF0YShcbiAgICBiYXNrZXRJZDogc3RyaW5nLFxuICAgIHJlc3VsdHM6IHsgYmFza2V0SW5mb01pRGV0YWlsczogQmFza2V0SW5mb01pRGV0YWlsc0ltcGxbXTsgY29weUluZm86IENvcHlJbmZvSW5wdXRbXSB9XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJhc2tldEl0ZW1NSSA9IHJlc3VsdHMuYmFza2V0SW5mb01pRGV0YWlscztcbiAgICBjb25zdCBxdWVyeTogU2V0TWlWYWx1ZXNNdXRhdGlvblZhcmlhYmxlcyA9IHtcbiAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiBiYXNrZXRJdGVtTUlbMF0uYmFza2V0SXRlbS5jb252ZXJ0ZWRDdXJyZW5jeUNvZGUsXG4gICAgICBiYXNrZXRJdGVtTUlWYWx1ZXM6IFtdLFxuICAgICAgY29weUluZm86IHJlc3VsdHMuY29weUluZm9cbiAgICB9O1xuICAgIGNvbnN0IHBlckl0ZW1NaTogU2V0TWlWYWx1ZUlucHV0W10gPSBbXTtcbiAgICBjb25zdCBwZXJVc2VyTWk6IFNldE1pVmFsdWVJbnB1dFtdID0gW107XG4gICAgY29uc3QgcGVyR3Vlc3RNaTogU2V0TWlWYWx1ZUlucHV0W10gPSBbXTtcblxuICAgIGJhc2tldEl0ZW1NSS5mb3JFYWNoKCh2YWx1ZTogQmFza2V0SW5mb01pRGV0YWlsc0ltcGwpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkTGlzdEl0ZW0gPSB0aGlzLmZpbHRlclByZVNlbGVjdGVkTUkoXG4gICAgICAgIHZhbHVlLm1pUGVySXRlbSBhcyBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSxcbiAgICAgICAgdmFsdWVcbiAgICAgICk7XG4gICAgICBwZXJJdGVtTWkucHVzaCguLi50aGlzLmZvcm1hdFNhdmVkTWkoZmlsdGVyZWRMaXN0SXRlbSkpO1xuXG4gICAgICBPYmplY3QudmFsdWVzKHZhbHVlLm1pUGVyVXNlcikuZm9yRWFjaCh1c2VyTUlMaXN0ID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRMaXN0ID0gdGhpcy5maWx0ZXJQcmVTZWxlY3RlZE1JKFxuICAgICAgICAgIHVzZXJNSUxpc3QubWFuYWdlbWVudEluZm8gYXMgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10sXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgcGVyVXNlck1pLnB1c2goLi4udGhpcy5mb3JtYXRTYXZlZE1pKGZpbHRlcmVkTGlzdCkpO1xuICAgICAgfSk7XG5cbiAgICAgIE9iamVjdC52YWx1ZXModmFsdWUubWlQZXJHdWVzdCkuZm9yRWFjaChcbiAgICAgICAgKHVzZXJNSUxpc3Q6IHsgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZExpc3QgPSB0aGlzLmZpbHRlclByZVNlbGVjdGVkTUkoXG4gICAgICAgICAgICB1c2VyTUlMaXN0Lm1hbmFnZW1lbnRJbmZvIGFzIE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHBlckd1ZXN0TWkucHVzaCguLi50aGlzLmZvcm1hdFNhdmVkTWkoZmlsdGVyZWRMaXN0KSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gICAgcXVlcnkuYmFza2V0SXRlbU1JVmFsdWVzID0gWy4uLnBlckl0ZW1NaSwgLi4ucGVyVXNlck1pLCAuLi5wZXJHdWVzdE1pXTtcbiAgICBpZiAocXVlcnkuYmFza2V0SXRlbU1JVmFsdWVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZXRCYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlKGJhc2tldElkLCBxdWVyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRJZCk7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlTWlCYXNrZXQodGhpcy5jdXJyZW50QmFza2V0SUQpO1xuICAgICAgaW50QmFza2V0Lm5leHQoaW50QmFza2V0LnN1YmplY3QudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHNldEJhc2tldEl0ZW1NdWx0aXBsZU1JVmFsdWUoXG4gICAgYmFza2V0SWQ6IHN0cmluZyxcbiAgICBiYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlOiBTZXRNaVZhbHVlc011dGF0aW9uVmFyaWFibGVzXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KHRydWUpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0SWQpO1xuICAgICAgdGhpcy5zZXRNSVZhbHVlc1VwZGF0ZXJcbiAgICAgICAgLnVwZGF0ZU9uZShiYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiBhc3luYyAoYmFza2V0OiBCYXNrZXQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVNaUJhc2tldChiYXNrZXQuaWQpO1xuICAgICAgICAgICAgaW50QmFza2V0Lm5leHQoYmFza2V0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLm1pVXBkYXRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0TWlWYWx1ZXMoXG4gICAgaXNSZWFzc2lnbjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGJhc2tldEl0ZW1NSVZhbHVlczogU2V0TWlWYWx1ZUlucHV0IHwgU2V0TWlWYWx1ZUlucHV0W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcXVlcnkgPSB7XG4gICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICBiYXNrZXRJdGVtTUlWYWx1ZXMsXG4gICAgICB3aXRoU3VwcGxlbWVudGFsOiBpc1JlYXNzaWduXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElEKTtcbiAgICAgIHRoaXMuc2V0TUlWYWx1ZXNVcGRhdGVyXG4gICAgICAgIC51cGRhdGVPbmUocXVlcnkpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGJhc2tldDogQmFza2V0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1pVXBkYXRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5taVVwZGF0aW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRCYXNrZXRJdGVtUGF5bWVudE9wdGlvbihcbiAgICBiYXNrZXQ6IEJhc2tldERldGFpbHMsXG4gICAgYmFza2V0SXRlbTogQmFza2V0SXRlbSxcbiAgICBwYXltZW50TWV0aG9kOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0LmlkLFxuICAgICAgdGhpcy5zZXRQYXltZW50TWV0aG9kVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIHBheW1lbnRNZXRob2RcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBzZXRCYXNrZXRJdGVtUGF5bWVudE9wdGlvbk5vVXBkYXRlKFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgcGF5bWVudE1ldGhvZDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QmFza2V0RGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLnNldFBheW1lbnRNZXRob2RVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgcGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICB9XG4gIGJvb2tCYXNrZXQoXG4gICAgYmFza2V0aWQ6IHN0cmluZyxcbiAgICBzdXBwbGVtZW50YXJ5SW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvW10sXG4gICAgYWRkaXRpb25hbEVtYWlsOiBzdHJpbmdbXSxcbiAgICBhcHByb3Zlck5vdGVzPzogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNBcHByb3ZlZEJhc2tldCA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmJvb2tCYXNrZXRVcGRhdGVyXG4gICAgICAudXBkYXRlT25lKHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBpZDogYmFza2V0aWQsXG4gICAgICAgIHN1cHBsZW1lbnRhcnlJbmZvLFxuICAgICAgICBhZGRpdGlvbmFsRW1haWwsXG4gICAgICAgIGFwcHJvdmVyTm90ZXNcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihcbiAgICAgICAgKGJhc2tldDogQmFza2V0RGV0YWlscykgPT4ge1xuICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgYmFza2V0LmJhc2tldEl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5ib29raW5nRGV0YWlsPy5zdXBwbGllclJlc3A/LmJvb2s/LmRldGFpbHM/LnNlYXRTZWxlY3Rpb25Cb29rZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBXZSBoYXZlIGEgc2VhdCBzZWxlY3Rpb24gZXJyb3IgLSB0aHJvdyB1cCBhIHdhcm5pbmcgbW9kYWwgKysrYCk7XG4gICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5SYWlsU2VhdEF1dG9XYXJuaW5nTW9kYWxDb21wb25lbnQpO1xuICAgICAgICAgICAgICB0aGlzLmNsZWFyUmFpbFNlYXRzLm5leHQoaXRlbS5pZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgaW50QmFza2V0LnN1YmplY3QudmFsdWUuc3RhdHVzID0gYmFza2V0LnN0YXR1cztcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXRJdGVtcyA9IGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFza2V0LmJhc2tldEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUJhc2tldEl0ZW1zID0gYmFza2V0LmJhc2tldEl0ZW1zW2ldO1xuICAgICAgICAgICAgY29uc3QgaW50QmFza2V0SXRlbSA9IGludEJhc2tldEl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSByZXNwb25zZUJhc2tldEl0ZW1zLmlkKTtcblxuICAgICAgICAgICAgaWYgKGludEJhc2tldEl0ZW0pIHtcbiAgICAgICAgICAgICAgaW50QmFza2V0SXRlbS5zdGF0dXMgPSBiYXNrZXQuYmFza2V0SXRlbXNbaV0uc3RhdHVzO1xuICAgICAgICAgICAgICBpbnRCYXNrZXRJdGVtLmJvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlID1cbiAgICAgICAgICAgICAgICBiYXNrZXQuYmFza2V0SXRlbXNbaV0uYm9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2U7XG4gICAgICAgICAgICAgIGludEJhc2tldEl0ZW0ucG5yTG9jYXRvciA9IGJhc2tldC5iYXNrZXRJdGVtc1tpXS5wbnJMb2NhdG9yO1xuICAgICAgICAgICAgICBpbnRCYXNrZXRJdGVtLmJvb2tpbmdEZXRhaWwgPVxuICAgICAgICAgICAgICAgIGJhc2tldC5iYXNrZXRJdGVtc1tpXT8uYm9va2luZ0RldGFpbCB8fCBpbnRCYXNrZXRJdGVtLmJvb2tpbmdEZXRhaWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGArKysgVW5hYmxlIHRvIGZpbmQgYmFza2V0IGl0ZW0gd2l0aCBpZDogJHtyZXNwb25zZUJhc2tldEl0ZW1zLmlkfSArKytgXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSAnJztcbiAgICAgICAgICBpbnRCYXNrZXQubmV4dChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgY29uc3QgYmFza2V0VXBkYXRlID0gYXdhaXQgdGhpcy5nZXRCYXNrZXQoe1xuICAgICAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICAgICAgaWQ6IGJhc2tldGlkLFxuICAgICAgICAgICAgd2l0aFN1cHBsZW1lbnRhbDogdHJ1ZVxuICAgICAgICAgIH0pLnRvUHJvbWlzZSgpO1xuICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgaW50QmFza2V0Lm5leHQoYmFza2V0VXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIG1vdmVCYXNrZXRJdGVtKG9yaWdpbmFsQmFza2V0SWQ6IHN0cmluZywgYmFza2V0SXRlbTogQmFza2V0SXRlbSwgYmFza2V0SWRUb01vdmVUbzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tb3ZlSXRlbVRvQURpZmZlcmVudEJhc2tldFxuICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZCxcbiAgICAgICAgbmV3QmFza2V0OiBiYXNrZXRJZFRvTW92ZVRvXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZEJhc2tldChvcmlnaW5hbEJhc2tldElkKTtcbiAgICAgICAgdGhpcy5sb2FkQmFza2V0KGJhc2tldElkVG9Nb3ZlVG8pO1xuICAgICAgfSk7XG4gIH1cblxuICB1cGRhdGVCYXNrZXROb3RlcyhiYXNrZXRJZDogc3RyaW5nLCBub3Rlczogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRJZCxcbiAgICAgIHRoaXMudXBkYXRlQmFza2V0Tm90ZXNVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGJhc2tldElkLFxuICAgICAgICBub3Rlc1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlQmFza2V0VGl0bGUoYmFza2V0SWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0SWQsXG4gICAgICB0aGlzLnVwZGF0ZUJhc2tldFRpdGxlVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGlkOiBiYXNrZXRJZCxcbiAgICAgICAgbmV3VGl0bGU6IHRpdGxlXG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgZ2V0QmFza2V0KHF1ZXJ5OiB7XG4gICAgY29udmVydEN1cnJlbmN5VG86IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHdpdGhTdXBwbGVtZW50YWw6IGJvb2xlYW47XG4gIH0pOiBPYnNlcnZhYmxlPEdldFVzZXJCYXNrZXRSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNrZXRGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KTtcbiAgfVxuXG4gIGdldEJhc2tldENvMkluZm8ocXVlcnk6IHtcbiAgICBjb252ZXJ0Q3VycmVuY3lUbzogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgd2l0aFN1cHBsZW1lbnRhbDogYm9vbGVhbjtcbiAgfSk6IE9ic2VydmFibGU8R2V0VXNlckJhc2tldFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmJhc2tldENvMkZldGNoZXIuZmV0Y2hPbmUocXVlcnkpO1xuICB9XG5cbiAgYWRkQmFza2V0SXRlbU1hcmt1cChcbiAgICBiYXNrZXRJdGVtSWQ6IHN0cmluZyxcbiAgICBhbW91bnQ6IG51bWJlcixcbiAgICBhZ2VudElkOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXREZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQmFza2V0SXRlbU1hcmt1cFVwZGF0ZXJcbiAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtSWQsXG4gICAgICAgIG1hcmt1cDogJycsXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgYWdlbnQ6IGFnZW50SWQsXG4gICAgICAgIHRpdGxlOiAnQWdlbnQgTWFya3VwJ1xuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoYmFza2V0ID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0LmlkKTtcbiAgICAgICAgICBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5iYXNrZXRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgbWFya3VwSW5mbyA9IGJhc2tldC5iYXNrZXRJdGVtcy5maW5kKG1hcmtVcEl0ZW0gPT4gbWFya1VwSXRlbS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgICBpdGVtLnByaWNlID0gbWFya3VwSW5mby5wcmljZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpbnRCYXNrZXQubmV4dChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZSwgdGhpcy5pc1VzZXJBZ2VudCgpKTtcblxuICAgICAgICAgIHJldHVybiBiYXNrZXQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgYXRMZWFzdE9uZVNlYXJjaENob3NlbigpOiBib29sZWFuIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGFueSBpdGVtIG9uIGFueSBiYXNrZXQgd2Ugc2hvdyBiYXNrZXRzIGluIHNlYXJjaCBzY3JlZW5cbiAgICByZXR1cm4gISF0aGlzLmN1cnJlbnRCYXNrZXRzLmZpbHRlcihiYXNrZXQgPT4gYmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubGVuZ3RoKS5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0QmFza2V0U3RhdHMoaW5kZXg6IG51bWJlcik6IEJlaGF2aW9yU3ViamVjdDxCYXNrZXRQcmljZXM+IHtcbiAgICBjb25zdCBiYXNrZXRQcmljZXNPYmogPSB0aGlzLmJhc2tldHMudmFsdWVbaW5kZXhdPy5zdWJqZWN0Py52YWx1ZT8ucHJpY2VzIHx8IHt9O1xuICAgIGNvbnN0IGJhc2tldFByaWNlc0tleSA9IE9iamVjdC5rZXlzKGJhc2tldFByaWNlc09iailbMF07XG4gICAgaWYgKGJhc2tldFByaWNlc0tleSkge1xuICAgICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUuY3VycmVuY3kgPSBiYXNrZXRQcmljZXNLZXk7XG4gICAgICB0aGlzLmJhc2tldFByaWNlcy52YWx1ZS50b3RhbCA9XG4gICAgICAgIHRoaXMuYmFza2V0cy52YWx1ZVtpbmRleF0uc3ViamVjdC52YWx1ZS5wcmljZXNbYmFza2V0UHJpY2VzS2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUudG90YWwgPSAwO1xuICAgIH1cblxuICAgIHRoaXMuYmFza2V0UHJpY2VzLnZhbHVlLmxpc3QuZm9yRWFjaChrZXlzID0+IHtcbiAgICAgIGtleXMucHJpY2UgPSB0aGlzLmJhc2tldHMudmFsdWVbaW5kZXhdPy5zdWJqZWN0Py52YWx1ZT8uYmFza2V0SXRlbXNcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VydmljZS50eXBlID09PSBrZXlzLnR5cGUpXG4gICAgICAgIC5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudC5wcmljZSwgMCk7XG4gICAgICBrZXlzLmNvMiA9IHRoaXMuYmFza2V0cy52YWx1ZVtpbmRleF0/LnN1YmplY3Q/LnZhbHVlPy5iYXNrZXRJdGVtc1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZXJ2aWNlLnR5cGUgPT09IGtleXMudHlwZSlcbiAgICAgICAgLnJlZHVjZSgoc3VtLCBjdXJyZW50KSA9PiBzdW0gKyBjdXJyZW50LmNvMlBlckl0ZW0sIDApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUudG90YWxDbzIgPSB0aGlzLmJhc2tldFByaWNlcy52YWx1ZS5saXN0LnJlZHVjZShcbiAgICAgIChzdW0sIGN1cnJlbnQpID0+IHN1bSArIGN1cnJlbnQuY28yLFxuICAgICAgMFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuYmFza2V0UHJpY2VzO1xuICB9XG5cbiAgY2FuQ2FuY2VsKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiBPYnNlcnZhYmxlPEJlZm9yZUNhbmNlbGxhdGlvbkluZm8+IHtcbiAgICAvLyBOb3QgY2FuY2VsbGFibGUgaWYgdGhlIG91dGJvdW5kIGRhdGUgcGFzc2VkIGZvciBhbGwgaXRlbSB0eXBlcyBvdGhlciB0aGFuIGhvdGVsLCBmb3IgaG90ZWwgaWYgaXQgaXMgdGhlIHNhbWUgZGF5IHRoZW4gd2UgbmVlZCB0byBjaGVjayBCRVxuICAgIGlmIChcbiAgICAgIChtb21lbnQoYmFza2V0SXRlbS5vdXRib3VuZERhdGUpLmRpZmYobW9tZW50KG5ldyBEYXRlKCkpLCAnbWludXRlcycpIDw9IDAgJiZcbiAgICAgICAgYmFza2V0SXRlbS5zZXJ2aWNlLnR5cGUgIT09IFNlcnZpY2VUeXBlLkhvdGVsKSB8fFxuICAgICAgKGJhc2tldEl0ZW0uc2VydmljZS50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbCAmJlxuICAgICAgICBtb21lbnQoYmFza2V0SXRlbS5vdXRib3VuZERhdGUpLmRpZmYobW9tZW50KG5ldyBEYXRlKCkpLCAnbWludXRlcycpIDw9IDAgJiZcbiAgICAgICAgIW1vbWVudChiYXNrZXRJdGVtLm91dGJvdW5kRGF0ZSkuaXNTYW1lKG1vbWVudChuZXcgRGF0ZSgpKSwgJ2RhdGUnKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBvZih7XG4gICAgICAgIGNhbmNlbGxhYmxlOiBmYWxzZSxcbiAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiAwLFxuICAgICAgICBpbmZvOiAnT3V0Ym91bmQgZGF0ZXRpbWUgcGFzc2VkLidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGJhc2tldEl0ZW0uc3RhdHVzID09PSBCYXNrZXRJdGVtU3RhdHVzLkJvb2tlZCB8fFxuICAgICAgYmFza2V0SXRlbS5zdGF0dXMgPT09IEJhc2tldEl0ZW1TdGF0dXMuUGFydGlhbGx5Q2FuY2VsbGVkXG4gICAgKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDYW5jZWxsZWRJbmZvID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGNhbkJlQ2FuY2VsbGVkID0gdGhpcy5nZXRDYW5jZWxsYXRpb25JbmZvRmV0Y2hlci5mZXRjaE9uZSh7XG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWRcbiAgICAgIH0pO1xuICAgICAgY2FuQmVDYW5jZWxsZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nQ2FuY2VsbGVkSW5mbyA9IGZhbHNlO1xuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ0NhbmNlbGxlZEluZm8gPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgfSApO1xuICAgICAgcmV0dXJuIGNhbkJlQ2FuY2VsbGVkO1xuICAgIH1cblxuICAgIHJldHVybiBvZih7XG4gICAgICBjYW5jZWxsYWJsZTogZmFsc2UsXG4gICAgICBjYW5jZWxsYXRpb25GZWU6IDAsXG4gICAgICBpbmZvOiBcIkl0ZW0gaXNuJ3QgYm9va2VkXCJcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUJvb2tlZEJhc2tldCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5yZWR1Y2UoKGFjYywgYmFza2V0KSA9PiB7XG4gICAgICBpZiAoYmFza2V0LnN1YmplY3QudmFsdWUuc3RhdHVzICE9PSBCYXNrZXRTdGF0dXMuQm9va2VkKSB7XG4gICAgICAgIGFjYy5wdXNoKGJhc2tldCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICAvLyBjb25zb2xlLmxvZygnRGFuMTEnLHRoaXMuY3VycmVudEJhc2tldHMpXG5cbiAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgfVxuXG4gIHNob3dFcnJvck1vZGFsKCkge1xuICAgIGNvbnN0IG9mZmljZSA9IHRoaXMudXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLmFsbERldGFpbHMudmFsdWUub2ZmaWNlO1xuICAgIGNvbnN0IGVtYWlsID0gb2ZmaWNlPy5zdXBwb3J0RW1haWwgfHwgJyc7XG4gICAgY29uc3QgY291bnRyeUNvZGUgPSBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8uY291bnRyeUNvZGVcbiAgICAgID8gJysnICsgb2ZmaWNlPy5zdXBwb3J0UGhvbmVOdW1iZXI/LmNvdW50cnlDb2RlXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IG51bWJlciA9IG9mZmljZT8uc3VwcG9ydFBob25lTnVtYmVyPy5udW1iZXIgPyBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8ubnVtYmVyIDogJyc7XG4gICAgY29uc3QgYXJlYUNvZGUgPSBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8uYXJlYUNvZGVcbiAgICAgID8gb2ZmaWNlPy5zdXBwb3J0UGhvbmVOdW1iZXI/LmFyZWFDb2RlXG4gICAgICA6ICcnO1xuXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuTW9kYWxFcnJvckNvbXBvbmVudCxcbiAgICAgIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICB7XG4gICAgICAgIGVycm9yOlxuICAgICAgICAgICdUaGVyZSBhcmUgbWlzc2luZyB2YWx1ZXMgaW4gdGhlIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gc2VjdGlvbiB3aXRoaW4geW91ciBjb25maWd1cmF0aW9uLicsXG4gICAgICAgIG1pRXJyb3I6IHRydWUsXG4gICAgICAgIGVtYWlsLFxuICAgICAgICBudW1iZXI6IGAke2NvdW50cnlDb2RlfSAke2FyZWFDb2RlfSAke251bWJlcn1gXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNob3dFcnJvck1vZGFsQXBwcm92ZXJzKCkge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICBNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsXG4gICAgICB7IGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAge1xuICAgICAgICBlcnJvcjpcbiAgICAgICAgICAnWW91IGNhbm5vdCBjb250aW51ZSBhcyB5b3VyIHByb2ZpbGUgaXMgY29uZmlndXJlZCB0byBnbyBmb3IgYXBwcm92YWwgYnV0IHlvdSBoYXZlIG5vIGFwcHJvdmVycyBhc3NpZ25lZC4nXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVCYXNrZXRTY3JhdGNocGFkTm90ZShiYXNrZXRJZDogc3RyaW5nLCBub3RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEJhc2tldE5vdGU+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCYXNrZXROb3RlLnVwZGF0ZU9uZSh7IGJhc2tldElkLCBub3RlIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEJhc2tldFNjcmF0Y2hwYWROb3RlcyhiYXNrZXRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXROb3RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNrZXROb3Rlcy5mZXRjaExpc3QoeyBiYXNrZXRJZCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZW1hcmtzKHNlcnZpY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIHJldHVybiBvZihNaUNvbW1hbmQpO1xuICB9XG5cbiAgcHVibGljIGdldEJhc2tldEl0ZW1SZW1hcmtzKGJhc2tldEl0ZW1JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrcy5mZXRjaExpc3QoeyBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtSWQgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkQmFza2V0SXRlbVJlbWFyayhcbiAgICBiYXNrZXRJdGVtSWQ6IHN0cmluZyxcbiAgICByZW1hcmtUeXBlOiBzdHJpbmcsXG4gICAgdGV4dDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QmFza2V0SXRlbUN1c3RvbVJlbWFyaz4ge1xuICAgIHJldHVybiB0aGlzLmFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcmsudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW1JZCxcbiAgICAgIHJlbWFya190eXBlOiByZW1hcmtUeXBlLFxuICAgICAgdGV4dFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEJhc2tldFF1b3RlKGJhc2tldElkOiBzdHJpbmcsIHJlc2VuZDogYm9vbGVhbiwgbm90ZT86IHN0cmluZyk6IE9ic2VydmFibGU8QmFza2V0UXVvdGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNrZXRRdW90ZUZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0OiBiYXNrZXRJZCwgcmVzZW5kLCBub3RlIH0pO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZUJhc2tldE93bmVyc2hpcChcbiAgICBiYXNrZXRJZDogc3RyaW5nLFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICAgIG5vdGU/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXRRdW90ZT4ge1xuICAgIHJldHVybiB0aGlzLmNoYW5nZUJhc2tldE93bmVyc2hpcFVwZGF0ZXIudXBkYXRlT25lKHsgYmFza2V0OiBiYXNrZXRJZCwgdXNlcjogdXNlcklkLCBub3RlIH0pO1xuICB9XG5cbiAgcHVibGljIGdldERyYWZ0QmFza2V0cyhcbiAgICBkcmFmdEJhc2tldFR5cGU6IERyYWZ0QmFza2V0VHlwZSA9IERyYWZ0QmFza2V0VHlwZS5BbGxcbiAgKTogT2JzZXJ2YWJsZTxEcmFmdEJhc2tldD4ge1xuICAgIHJldHVybiB0aGlzLmdldERyYWZ0QmFza2V0c0ZldGNoZXIuZmV0Y2hMaXN0KHsgZHJhZnRCYXNrZXRUeXBlIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2VuZEFwcHJvdmFsKGlkOiBzdHJpbmcsIGFwcHJvdmVyQ2hhbmdlZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5yZXNlbmRBcHByb3ZlckVtYWlsLmZldGNoTGlzdCh7IGlkLCBhcHByb3ZlckNoYW5nZWQgfSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgTW9kYWxUeXBlcy5SZXNlbmRBcHByb3ZhbEVtYWlsQ29tcG9uZW50LFxuICAgICAgICB7IGNlbnRlcmVkOiB0cnVlLCBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAgeyBkYXRhOiAhIWRhdGEgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0lmQmFza2V0UmVxdWlyZXNBcHByb3ZhbChiYXNrZXQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmJhc2tldFJlcXVpcmVzQXBwcm92YWwuZmV0Y2hMaXN0KHsgYmFza2V0IH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2V0QmFza2V0cygpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gW107XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyUmVtb3ZlQmFza2V0QnlJZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50QmFza2V0cyA9IHRoaXMuY3VycmVudEJhc2tldHMuZmlsdGVyKGJhc2tldCA9PiBiYXNrZXQuaWQgIT09IGlkKTtcbiAgfVxuXG4gIGNyZWF0ZUludEJhc2tldChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpOiBJbnRlcm5hbEJhc2tldDxHVV9RPiB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcm5hbEJhc2tldChcbiAgICAgIGJhc2tldCxcbiAgICAgIHRoaXMuaGVscGVycyxcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLmdldFVzZXJGZXRjaGVyLFxuICAgICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UsXG4gICAgICB0aGlzLnJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUJhc2tldEZyb21EcmFmdChcbiAgICBkcmFmdEJhc2tldElkOiBzdHJpbmcsXG4gICAgbGVhZFBhc3NlbmdlcklkOiBzdHJpbmcsXG4gICAgbWFuYWdlbWVudEluZm86IFNldE1pVmFsdWVJbnB1dFtdLFxuICAgIHVzZXJJbmZvOiBVc2VySW5mb0lucHV0W10sXG4gICAgYW1lbmQ6IGJvb2xlYW5cbiAgKTogT2JzZXJ2YWJsZTxHZXRVc2VyQmFza2V0UmVzdWx0PiB7XG4gICAgLy8gY29uc3QgdXBkYXRlZE1pRm9ybWF0ID0gdGhpcy5mb3JtYXRTYXZlZE1pKG1hbmFnZW1lbnRJbmZvKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBkcmFmdEJhc2tldElkLFxuICAgICAgbGVhZFBhc3NlbmdlcklkLFxuICAgICAgdXNlckluZm8sIC8vIFVTRVJJTkZvSW5wdXRbXVxuICAgICAgbWFuYWdlbWVudEluZm8sIC8vIFNldE1JVmFsdWVJbnB1dFtdXG4gICAgICBhbWVuZFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXBwcm92ZXJMaXN0QW5kVXBkYXRlKGJhc2tldDogc3RyaW5nKTogUHJvbWlzZTxTdWJzY3JpcHRpb24+IHtcbiAgICAvLyByYW4gb3V0IG9mIHdpbGwgdG8gZ2V0IHRoaXMgd29ya2luZywgd2lsbCBuZWVkIHRvIGdldCB0aGlzIHdvcmtpbmcgZm9yIG90aGVyIE9CVHNcbiAgICBjb25zdCBvZmZpY2UgPSB0aGlzLmdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlckFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgcmV0dXJuIGZvcmtKb2luKFtvZmZpY2UsIHVzZXJdKS5zdWJzY3JpYmUoYXN5bmMgKGFwcHJvdmVyczogYW55KSA9PiB7XG4gICAgICBjb25zdCBhbGxBcHByb3ZlcnMgPSBhcHByb3ZlcnNbMF0uY29uY2F0KGFwcHJvdmVyc1sxXSk7XG4gICAgICBjb25zdCBlbWFpbHMgPSBhbGxBcHByb3ZlcnMubWFwKCh7IGVtYWlsIH06IFVzZXIpID0+IGVtYWlsKTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQXBwcm92ZXJzID0gYWxsQXBwcm92ZXJzLmZpbHRlcihcbiAgICAgICAgKHsgZW1haWwgfTogVXNlciwgaW5kZXg6IG51bWJlcikgPT4gIWVtYWlscy5pbmNsdWRlcyhlbWFpbCwgaW5kZXggKyAxKVxuICAgICAgKTtcbiAgICAgIGlmIChmaWx0ZXJlZEFwcHJvdmVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYXBwcm92ZXIgPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICAgIE1vZGFsVHlwZXMuQXBwcm92ZXJzTW9kYWxDb21wb25lbnQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxuICAgICAgICAgICAgd2luZG93Q2xhc3M6ICdyZXF1aXJlcy1yZWFzb24tZGlhbG9nJyxcbiAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGZpbHRlcmVkQXBwcm92ZXJzIH1cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoYXBwcm92ZXIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXJcbiAgICAgICAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICAgICAgICBiYXNrZXQsXG4gICAgICAgICAgICAgIGFwcHJvdmVyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QXBwcm92ZXJzTGlzdCgpOiBPYnNlcnZhYmxlPFtVc2VyW10sIFVzZXJbXV0+IHtcbiAgICBjb25zdCBvZmZpY2UgPSB0aGlzLmdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlckFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgcmV0dXJuIGZvcmtKb2luKFtvZmZpY2UsIHVzZXJdKTtcbiAgfVxuXG4gIGdldEFwcHJvdmVyc1Blck1JTGlzdChiYXNrZXQ6IHN0cmluZyk6IE9ic2VydmFibGU8VXNlcltdPiB7XG4gICAgY29uc3QgYXBwcm92ZXJzID0gdGhpcy5nZXRNSUFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0SWQ6IGJhc2tldCB9KTtcbiAgICByZXR1cm4gYXBwcm92ZXJzO1xuICB9XG5cbiAgdXBkYXRlQXBwcm92ZXIoXG4gICAgYmFza2V0OiBzdHJpbmcsXG4gICAgYXBwcm92ZXI6IHN0cmluZyxcbiAgICBjb252ZXJ0Q3VycmVuY3lUbz86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEJhc2tldERldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldCxcbiAgICAgIGFwcHJvdmVyLFxuICAgICAgY29udmVydEN1cnJlbmN5VG9cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZU11bHRpTGV2ZWxBcHByb3ZlcnMoXG4gICAgYmFza2V0OiBzdHJpbmcsXG4gICAgbXVsdGlMZXZlbEFwcHJvdmVyczogc3RyaW5nW11cbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXREZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0QmFza2V0TXVsdGlMZXZlbEFwcHJvdmVyc1VwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldCxcbiAgICAgIG11bHRpTGV2ZWxBcHByb3ZlcnNcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZU5vdGlmeUFwcHJvdmVyKFxuICAgIGJhc2tldDogc3RyaW5nLFxuICAgIGFwcHJvdmVyOiBzdHJpbmcsXG4gICAgY29udmVydEN1cnJlbmN5VG8/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXREZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBiYXNrZXQsXG4gICAgICBhcHByb3ZlcixcbiAgICAgIGNvbnZlcnRDdXJyZW5jeVRvXG4gICAgfSk7XG4gIH1cblxuICBvcGVuQXBwcm92ZXJNb2RhbChcbiAgICBhcHByb3ZlcnM6IFVzZXJbXSxcbiAgICBpc1NlbGVjdGVkQXBwcm92ZXI6IGJvb2xlYW4sXG4gICAgaXNTZWxlY3RlZE1JQXBwcm92ZXI6IGJvb2xlYW4sXG4gICAgaXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyOiBib29sZWFuLFxuICAgIGlzU2VsZWN0ZWROb3RpZnlBcHByb3ZlclBlck1JOiBib29sZWFuLFxuICAgIGJhc2tldFVzZXI6IFVzZXIsXG4gICAgYXBwcm92YWxMZXZlbDogbnVtYmVyXG4gICk6IFByb21pc2U8QmFza2V0U2VsZWN0ZWRBcHByb3Zlcj4ge1xuICAgIGNvbnNvbGUud2FybihgKysrIE9wZW5pbmcgYXBwcm92YWwgbW9kYWwgYXQgbGV2ZWw6ICR7YXBwcm92YWxMZXZlbH0gKysrYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuQXBwcm92ZXJzTW9kYWxDb21wb25lbnQsXG4gICAgICB7XG4gICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcbiAgICAgICAgd2luZG93Q2xhc3M6ICdyZXF1aXJlcy1yZWFzb24tZGlhbG9nJyxcbiAgICAgICAgY2VudGVyZWQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFwcHJvdmVycyxcbiAgICAgICAgaXNTZWxlY3RlZEFwcHJvdmVyLFxuICAgICAgICBpc1NlbGVjdGVkTm90aWZ5QXBwcm92ZXIsXG4gICAgICAgIGlzU2VsZWN0ZWROb3RpZnlBcHByb3ZlclBlck1JLFxuICAgICAgICBiYXNrZXRVc2VyLFxuICAgICAgICBhcHByb3ZhbExldmVsLFxuICAgICAgICBpc1NlbGVjdGVkTUlBcHByb3ZlclxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzaGFyZUJhc2tldChiYXNrZXRJZDogc3RyaW5nLCBzaGFyZWRVc2Vyczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPEJhc2tldD4ge1xuICAgIHJldHVybiB0aGlzLnNoYXJlQmFza2V0VXBkYXRlci51cGRhdGVPbmUoeyBiYXNrZXRJZCwgc2hhcmVkVXNlcnMgfSk7XG4gIH1cblxuICBnZXRVc2VyU2hhcmVkQmFza2V0cyhsb2dnZWRJblVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXRbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlci5mZXRjaExpc3QoeyBsb2dnZWRJblVzZXJJZCB9KTtcbiAgfVxuXG4gIC8vICEgLSBVc2UgbG9jYWxzdG9yYWdlIHRvIHRyYWNrIHRoZSBzaXplIG9mIHNoYXJlZCBiYXNrZXRzIGZvciBlYWNoIHVzZXJcbiAgLy8gISAtIHRha2VzIG9ubHkgYSBmZXcgYnl0ZXMgLSB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBhbW91bnQgdXNlZFxuICAvLyAtIHNvbWUgaGVscGZ1bCBjb2RlIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiBsb2NhbCBzdG9yYWdlIC0gdXNlIGl0IGluIHRoZSBicm93c2VyIGNvbnNvbGVcbiAgLy8gdmFyIF9sc1RvdGFsPTAsX3hMZW4sX3g7Zm9yKF94IGluIGxvY2FsU3RvcmFnZSl7IGlmKCFsb2NhbFN0b3JhZ2UuaGFzT3duUHJvcGVydHkoX3gpKXtjb250aW51ZTt9IF94TGVuPSAoKGxvY2FsU3RvcmFnZVtfeF0ubGVuZ3RoICsgX3gubGVuZ3RoKSogMik7X2xzVG90YWwrPV94TGVuOyBjb25zb2xlLmxvZyhfeC5zdWJzdHIoMCw1MCkrXCIgPSBcIisgKF94TGVuLzEwMjQpLnRvRml4ZWQoMikrXCIgS0JcIil9O2NvbnNvbGUubG9nKFwiVG90YWwgPSBcIiArIChfbHNUb3RhbCAvIDEwMjQpLnRvRml4ZWQoMikgKyBcIiBLQlwiKTtcblxuICB1cGRhdGVTaGFyZWRCYXNrZXRDb3VudChzaGFyZWRCYXNrZXRzOiBCYXNrZXRbXSwgdXNlcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldExvY2FsSXRlbShgJHt1c2VySWR9X3NoYXJlZF9iYXNrZXRfY291bnRgLCBzaGFyZWRCYXNrZXRzLmxlbmd0aCk7XG4gIH1cblxuICBnZXRTaGFyZWRCYXNrZXRDb3VudCh1c2VySWQ6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3Qgc3RvcmVkID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRMb2NhbEl0ZW0oYCR7dXNlcklkfV9zaGFyZWRfYmFza2V0X2NvdW50YCk7XG5cbiAgICByZXR1cm4gc3RvcmVkO1xuICB9XG5cbiAgY2FuQW1lbmRCb29raW5nKFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgYXJyaXZhbERhdGU/OiBzdHJpbmcsXG4gICAgZGVwYXJ0dXJlRGF0ZT86IHN0cmluZyxcbiAgICBmaXJzdENoZWNrID0gZmFsc2VcbiAgKTogT2JzZXJ2YWJsZTxCZWZvcmVBbWVuZEluZm8+IHtcbiAgICBpZiAoYmFza2V0SXRlbS5zdGF0dXMgPT09IEJhc2tldEl0ZW1TdGF0dXMuQm9va2VkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYW5BbWVuZEJvb2tpbmdJbmZvRmV0Y2hlci5mZXRjaE9uZSh7XG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIGFycml2YWxEYXRlOiBhcnJpdmFsRGF0ZSxcbiAgICAgICAgZGVwYXJ0dXJlRGF0ZTogZGVwYXJ0dXJlRGF0ZSxcbiAgICAgICAgZmlyc3RDaGVja1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHtcbiAgICAgIGNhbkFtZW5kOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgY2hlY2tGb3JTZWxmQXBwcm92ZShiYXNrZXQ6IEJhc2tldERldGFpbHMpOiBib29sZWFuIHtcbiAgICBjb25zdCBiYXNrZXRVc2VyID0gYmFza2V0Lmludm9rZWRVc2VyID8gYmFza2V0Lmludm9rZWRVc2VyIDogYmFza2V0Lm93bmVyO1xuICAgIGNvbnN0IGlzQWxsb3dTZWxmQXBwcm92ZSA9IGJhc2tldFVzZXIub2ZmaWNlLmFsbG93U2VsZkFwcHJvdmU7XG4gICAgY29uc3QgdXNlckFwcHJvdmVycyA9IGJhc2tldFVzZXIudXNlckFwcHJvdmVycztcbiAgICBpZiAoaXNBbGxvd1NlbGZBcHByb3ZlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgaXNTZWxmQXBwcm92ZXIgPVxuICAgICAgdXNlckFwcHJvdmVycy5sZW5ndGggPT09IDEgJiYgdXNlckFwcHJvdmVyc1swXT8uYXBwcm92ZXIuaWQgPT09IGJhc2tldFVzZXIuaWQ7XG4gICAgcmV0dXJuICFpc1NlbGZBcHByb3ZlcjtcbiAgfVxuXG4gIGFzeW5jIG9wZW5BcHByb3ZlV2FybmluZyh3YXJuaW5nTWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuQmFzaWNNb2RhbENvbXBvbmVudCxcbiAgICAgIHsgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsIGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJycsXG4gICAgICAgIGJvZHk6IHdhcm5pbmdNZXNzYWdlLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYnV0dG9uT2s6IHRydWUsXG4gICAgICAgICAgYnV0dG9uT2tUZXh0OiAnT2snLFxuICAgICAgICAgIGJ1dHRvbkNhbmNlbDogZmFsc2UsXG4gICAgICAgICAgYnV0dG9uT2tBY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBnZXRUcmFpblNlYXRNYXAoaWQ6IHN0cmluZyk6IFByb21pc2U8VHJhaW5TZWF0TWFwPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHJhaW5TZWF0TWFwRmV0Y2hlci5mZXRjaExpc3QoeyBpdGluZXJhcnlJZDogaWQgfSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBzZXRSZXF1aXJlc1JlYXNvbkJvb2tpbmcoaXNCb29raW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UuaXNCb29raW5nID0gaXNCb29raW5nO1xuICB9XG5cbiAgaXNVc2VyQWdlbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UudXNlcklzQWdlbnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCYXNrZXRBcHByb3ZhbFRpbWVzdGFtcHMoYmFza2V0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QmFza2V0QXBwcm92YWxUaW1lc3RhbXBbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2tldEFwcHJvdmFsVGltZXN0YW1wc0ZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0SWQgfSk7XG4gIH1cblxuICBiZWZvcmVUYXhpQW1lbmRTZWFyY2goYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IE9ic2VydmFibGU8Q2FiSGlyZVF1b3RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5iZWZvcmVBbWVuZENhYlNlYXJjaGZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZCB9KTtcbiAgfVxuICBzZW50QmFza2V0c0JhY2tUb1F1ZXVlKGRyYWZ0QmFza2V0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNlbmRCYWNrVG9RdWV1ZVVwZGF0ZXIudXBkYXRlT25lKHsgZHJhZnRCYXNrZXRJZCB9KTtcbiAgfVxuXG4gIGJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaChcbiAgICBiYXNrZXRJdGVtOiBzdHJpbmcsXG4gICAgcGlja1VwRGF0ZVRpbWU/OiBzdHJpbmcsXG4gICAgZHJvcE9mZkRhdGVUaW1lPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8Q2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHlbXT4ge1xuICAgIHJldHVybiB0aGlzLmJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaGZldGNoZXIuZmV0Y2hMaXN0KHtcbiAgICAgIGJhc2tldEl0ZW0sXG4gICAgICBwaWNrVXBEYXRlVGltZSxcbiAgICAgIGRyb3BPZmZEYXRlVGltZVxuICAgIH0pO1xuICB9XG59XG5cbiJdfQ==
|
|
1625
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3Ivc2VydmljZXMvZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUV0QixPQUFPLEVBQ0wsZUFBZSxFQUNmLFFBQVEsRUFHUixFQUFFLEVBQ0YsT0FBTyxHQUVSLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFLTCxnQkFBZ0IsRUFHaEIsWUFBWSxFQUlaLGlCQUFpQixFQUVqQixhQUFhLEVBRWIsV0FBVyxFQU1YLGVBQWUsRUFTaEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLGtCQUFrQixFQUdsQixhQUFhLEVBRWQsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDMUYsT0FBTyxFQUNMLHVCQUF1QixHQUN4QixNQUFNLHdDQUF3QyxDQUFDO0FBb0RoRCxPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUE4QnhFLE9BQU8sRUFDTCx5QkFBeUIsRUFFMUIsTUFBTSwyQkFBMkIsQ0FBQztBQTBFbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU0vQyxPQUFP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QUssQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDO1lBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUs7Z0JBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ25FO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ25DO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTs7WUFDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsMENBQUUsT0FBTywwQ0FBRSxLQUFLLDBDQUFFLFdBQVcsQ0FDaEUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFDOUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsMENBQUUsT0FBTywwQ0FBRSxLQUFLLDBDQUFFLFdBQVcsQ0FDOUQsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFDOUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FB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QUM7SUFFTSwyQkFBMkIsQ0FBQyxRQUFnQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxVQUFzQjtRQUMxQyxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUNELHNCQUFzQixDQUFDLGFBQXFCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELHdCQUF3QixDQUN0QixVQUFrQixFQUNsQixjQUF1QixFQUN2QixlQUF3QjtRQUV4QixPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxTQUFTLENBQUM7WUFDcEQsVUFBVTtZQUNWLGNBQWM7WUFDZCxlQUFlO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBBanYgZnJvbSAnYWp2JztcbmltcG9ydCBhZGRGb3JtYXRzIGZyb20gJ2Fqdi1mb3JtYXRzJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgZm9ya0pvaW4sXG4gIE9ic2VydmFibGUsXG4gIE9ic2VydmVyLFxuICBvZixcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSwgbWFwLCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIEFkZEl0ZW1Ub0Jhc2tldCxcbiAgQmFza2V0LFxuICBCYXNrZXRJdGVtLFxuICBCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrLFxuICBCYXNrZXRJdGVtU3RhdHVzLFxuICBCYXNrZXROb3RlLFxuICBCYXNrZXRRdW90ZSxcbiAgQmFza2V0U3RhdHVzLFxuICBCZWZvcmVDYW5jZWxsYXRpb25JbmZvLFxuICBDcmVhdGVCYXNrZXRNdXRhdGlvblZhcmlhYmxlcyxcbiAgRHJhZnRCYXNrZXQsXG4gIExlYWRQYXNzZW5nZXJUeXBlLFxuICBNYW5hZ2VtZW50SW5mb1ZhbHVlLFxuICBQYXNzZW5nZXJUeXBlLFxuICBTZXJ2aWNlLFxuICBTZXJ2aWNlVHlwZSxcbiAgU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvLFxuICBVc2VySW5mb0lucHV0LFxuICBVc2VyLFxuICBCZWZvcmVBbWVuZEluZm8sXG4gIEJhc2tldEFwcHJvdmFsVGltZXN0YW1wLFxuICBEcmFmdEJhc2tldFR5cGUsXG4gIFRyYWluU2VhdE1hcCxcbiAgQ2FiSGlyZVF1b3RlLFxuICBTZXRNaVZhbHVlSW5wdXQsXG4gIFNldE1pVmFsdWVzTXV0YXRpb25WYXJpYWJsZXMsXG4gIFZhbGlkYXRpb25SZXNwb25zZSxcbiAgQ29weUluZm9JbnB1dCxcbiAgQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvLFxuICBDYXJIaXJlVmVoaWNsZUF2YWlsaWJpbGl0eVxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7XG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXG4gIERpZmZlcmVudFRyYXZlbGxlcixcbiAgR2V0VXNlckJhc2tldEl0ZW1SZXN1bHQsXG4gIEdldFVzZXJCYXNrZXRSZXN1bHQsXG4gIE1lbnVTbGlkZUVudW0sXG4gIFVzZXJCYXNrZXRSZXN1bHRcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4uL2NsYXNzZXMvbW9kYWwtdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbXBsIH0gZnJvbSAnLi4vY2xhc3Nlcy9zdXBwbGVtZW50YXJ5LWJvb2tpbmctaW5mby1pbXBsJztcbmltcG9ydCB7XG4gIEJhc2tldEluZm9NaURldGFpbHNJbXBsLFxufSBmcm9tICcuLi9jbGFzc2VzL2Jhc2tldC1pbmZvLW1pLWRldGFpbHMuaW1wbCc7XG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuLi9jbGFzc2VzL2hlbHBlcnMnO1xuaW1wb3J0IHsgQmFzZU1vZGFsT3BlbmVyU2VydmljZSB9IGZyb20gJy4vbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUdldFVzZXJGZXRjaGVyLCBTZWFyY2hHZXRVc2VyRmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy91c2VyLWZldGNoZXInO1xuaW1wb3J0IHtcbiAgQWNjZXB0TmV3UHJpY2VGZXRjaGVyVHlwZSxcbiAgQmFzZUFjY2VwdE5ld1ByaWNlVXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy9hY2NlcHQtbmV3LXByaWNlLnVwZGF0ZXInO1xuaW1wb3J0IHsgQmFzZUdldEJhc2tldEZldGNoZXIsIEdldEJhc2tldEZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvYmFza2V0LWZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFVzZXJCYXNrZXRzRmV0Y2hlcixcbiAgR2V0VXNlckJhc2tldHNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlcnMtYmFza2V0cy1mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQWRkSXRlbVRvQmFza2V0RmV0Y2hlclR5cGUsXG4gIEJhc2VBZGRJdGVtVG9CYXNrZXRVcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL2FkZC1pdGVtLXRvLWJhc2tldC51cGRhdGVyJztcbmltcG9ydCB7XG4gIEFkZFVzZXJCYXNrZXRGZXRjaGVyVHlwZSxcbiAgQmFzZUFkZFVzZXJUb0Jhc2tldEl0ZW1VcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL2FkZFVzZXJUb0Jhc2tldEl0ZW0nO1xuaW1wb3J0IHtcbiAgQWRkR3Vlc3RCYXNrZXRGZXRjaGVyVHlwZSxcbiAgQmFzZUFkZEd1ZXN0VG9CYXNrZXRJdGVtVXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy9hZGRHdWVzdFRvQmFza2V0SXRlbSc7XG5pbXBvcnQge1xuICBTZXRCYXNrZXRJdGVtTGVhZFBhc3NlbmdlckZldGNoZXJUeXBlLFxuICBCYXNlU2V0QmFza2V0SXRlbUxlYWRQYXNzZW5nZXJVcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NldC1iYXNrZXQtaXRlbS1sZWFkLXBhc3Nlbmdlci51cGRhdGVyJztcbmltcG9ydCB7IEJhc2VCb29rQmFza2V0VXBkYXRlciwgQm9va0Jhc2tldEZldGNoZXJUeXBlIH0gZnJvbSAnLi4vdXBkYXRlcnMvYm9vay1iYXNrZXQtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlQ3JlYXRlQmFza2V0VXBkYXRlcixcbiAgQ3JlYXRlQmFza2V0RmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvY3JlYXRlLWJhc2tldC11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VEZWxldGVCYXNrZXRVcGRhdGVyLFxuICBEZWxldGVCYXNrZXRGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtYmFza2V0LXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZVJlbW92ZUl0ZW1Gcm9tQmFza2V0VXBkYXRlcixcbiAgRGVsZXRlQmFza2V0SXRlbUZldGNoZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS1pdGVtLWZyb20tYmFza2V0LnVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZVJldmFsaWRhdGVCYXNrZXRVcGRhdGVyLFxuICBSZXZhbGlkYXRlQmFza2V0RmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvcmV2YWxpZGF0ZS1iYXNrZXQtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlQWRkVXBkYXRlZEl0ZW1Ub0Jhc2tldFVwZGF0ZXIsXG4gIEFkZFVwZGF0ZWRJdGVtVG9CYXNrZXRVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy91cGRhdGUtYmFza2V0LWl0ZW0udXBkYXRlcic7XG5cbmltcG9ydCB7IFRyYXZlbGxlciwgVHJhdmVsbGVyT2JqZWN0IH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xuaW1wb3J0IHsgU2VhcmNoT2JqZWN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWFyY2gtb2JqZWN0cy5pbnRlcmZhY2UnO1xuXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXN1cHBsZW1lbnRhcnktYm9va2luZy1pbmZvLWltcGwnO1xuaW1wb3J0IHtcbiAgQmFzZW1vdmVCYXNrZXRJdGVtVG9CYXNrZXQsXG4gIE1vdmVJdGVtVG9BRGlmZmVyZW50QmFza2V0VHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9tb3ZlLWJhc2tldC1pdGVtLXRvLWJhc2tldCc7XG5pbXBvcnQge1xuICBCYXNlVXBkYXRlQmFza2V0Tm90ZXNUeXBlLFxuICBCYXNlVXBkYXRlQmFza2V0Tm90ZVVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvdXBkYXRlLWJhc2tldC1ub3Rlcy11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VVcGRhdGVCYXNrZXRUaXRsZVR5cGUsXG4gIEJhc2VVcGRhdGVCYXNrZXRUaXRsZVVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvdXBkYXRlLWJhc2tldC10aXRsZS11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VTZXRQYXltZW50T3B0aW9uVXBkYXRlcixcbiAgU2V0QmFza2V0SXRlbVBheW1lbnRNZXRob2RUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NldC1iYXNrZXQtaXRlbS1wYXltZW5yLW9wdGlvbi51cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRDYW5jZWxsYXRpb25JbmZvRmV0Y2hlcixcbiAgR2V0Q2FuY2VsbGF0aW9uSW5mb1R5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNhbmNlbGxhdGlvbi1pbmZvLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZVJlcXVpcmVzUmVhc29uU2VydmljZSxcbiAgUmVxdWlyZXNSZWFzb25TZXJ2aWNlSW50ZXJmYWNlXG59IGZyb20gJy4vcmVxdWlyZXMtcmVhc29uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQmFzZUNyZWF0ZUJhc2tldE5vdGVVcGRhdGVyLFxuICBDcmVhdGVCYXNrZXROb3RlVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvY3JlYXRlLWJhc2tldC1ub3RlLXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUFkZEJhc2tldEl0ZW1NYXJrdXBVcGRhdGVyLFxuICBBZGRCYXNrZXRJdGVtTWFya3VwVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9hZGQtYmFza2V0LWl0ZW0tbWFya3VwLnVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcmtVcGRhdGVyLFxuICBBZGRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvYWRkLWJhc2tldC1pdGVtLWN1c3RvbS1yZW1hcmstdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrc0ZldGNoZXIsXG4gIEdldEJhc2tldEl0ZW1DdXN0b21SZW1hcmtzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWJhc2tldC1pdGVtLWN1c3RvbS1yZW1hcmtzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlQ2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlcixcbiAgQ2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvY2hhbmdlLWJhc2tldC1vd25lcnNoaXAtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRCYXNrZXRRdW90ZUZldGNoZXIsXG4gIEdldEJhc2tldFF1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWJhc2tldC1xdW90ZS5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldEJhc2tldE5vdGVzRmV0Y2hlcixcbiAgR2V0QmFza2V0Tm90ZXNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYmFza2V0LW5vdGVzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0QmFza2V0QXBwcm92YWxUaW1lc3RhbXBzRmV0Y2hlcixcbiAgR2V0QmFza2V0QXBwcm92YWxUaW1lc3RhbXBzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWJhc2tldC1hcHByb3ZhbC10aW1lc3RhbXBzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlUmVzZW5kQXBwcm92ZXJFbWFpbEZldGNoZXIsXG4gIFJlc2VuZEFwcHJvdmVyRW1haWxRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3Jlc2VuZC1hcHByb3ZhbC1lbWFpbC5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUNoZWNrSWZCYXNrZXRSZXF1aXJlc0FwcHJvdmFsRmV0Y2hlcixcbiAgQ2hlY2tJZkJhc2tldFJlcXVpcmVzQXBwcm92YWxGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9jaGVjay1pZi1iYXNrZXQtcmVxdWlyZXMtYXBwcm92YWwnO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0RHJhZnRCYXNrZXRzRmV0Y2hlcixcbiAgRHJhZnRCYXNrZXRzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWRyYWZ0LWJhc2tldHMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VDcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyLFxuICBDcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9jcmVhdGUtYmFza2V0LWZyb20tZHJhZnQtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyLFxuICBHZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtb2ZmaWNlLWFwcHJvdmVycy5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNlbGVjdEJhc2tldEFwcHJvdmVyVXBkYXRlcixcbiAgU2VsZWN0QmFza2V0QXBwcm92ZXJNdXRhdGlvblR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2VsZWN0LWJhc2tldC1hcHByb3Zlci51cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldFVzZXJBcHByb3ZlcnNGZXRjaGVyLFxuICBHZXRVc2VyQXBwcm92ZXJzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItYXBwcm92ZXJzLmZldGNoZXInO1xuXG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4uL2NsYXNzZXMvdXNlci1mYXZvdXJpdGUuZW51bSc7XG5pbXBvcnQgeyBNaUNvbW1hbmQgfSBmcm9tICcuLi9kYXRhL21pLWNvbW1hbmQnO1xuaW1wb3J0IHtcbiAgQmFzZVNlbGVjdEJhc2tldE5vdGlmeUFwcHJvdmVyVXBkYXRlcixcbiAgU2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJNdXRhdGlvblR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2VsZWN0LWJhc2tldC1ub3RpZnktYXBwcm92ZXIudXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZSxcbiAgUmVxdWlyZXNPdmVycmlkZVJlYXNvblNlcnZpY2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi9yZXF1aXJlcy1vdmVycmlkZS1yZWFzb24uc2VydmljZSc7XG5cbmltcG9ydCB7XG4gIEJhc2VDYW5BbWVuZEJvb2tpbmdGZXRjaGVyLFxuICBDYW5BbWVuZEJvb2tpbmdUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2Nhbi1hbWVuZC1ib29raW5nLmZldGNoZXInO1xuXG5pbXBvcnQgeyBCYXNlU2hhcmVCYXNrZXRVcGRhdGVyLCBTaGFyZUJhc2tldFVwZGF0ZXJUeXBlIH0gZnJvbSAnLi4vdXBkYXRlcnMvc2hhcmUtYmFza2V0LnVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VXNlclNoYXJlZEJhc2tldHNGZXRjaGVyLFxuICBHZXRVc2VyU2hhcmVkQmFza2V0c0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLXNoYXJlZC1iYXNrZXRzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VHJhaW5TZWF0bWFwRmV0Y2hlcixcbiAgR2V0VHJhaW5TZWF0bWFwRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXRyYWluLXNlYXRtYXAuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VTZWxlY3RCYXNrZXRNdWx0aUxldmVsQXBwcm92ZXJzVXBkYXRlcixcbiAgU2VsZWN0QmFza2V0TXVsdGlMZXZlbEFwcHJvdmVyc011dGF0aW9uVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zZWxlY3QtYmFza2V0LW11bHRpLWxldmVsLWFwcHJvdmVycy51cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VTZWFyY2hNSUF1dG9TdWdnZXN0VmFsdWVzRmV0Y2hlcixcbiAgU2VhcmNoTUlBdXRvU3VnZ2VzdFZhbHVlc0ZldGNoZXJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLW1pLWF1dG8tc3VnZ2VzdC12YWx1ZXMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VWYWxpZGF0ZUJhc2tldE1pRmV0Y2hlcixcbiAgVmFsaWRhdGVCYXNrZXRNaUZldGNoZXJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdmFsaWRhdGUtYmFza2V0LW1pLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlVmFsaWRhdGVCYXNrZXRJdGVtTWlGZXRjaGVyLFxuICBWYWxpZGF0ZUJhc2tldEl0ZW1NaUZldGNoZXJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdmFsaWRhdGUtYmFza2V0LWl0ZW0tbWkuZmV0Y2hlcic7XG5cbmltcG9ydCB7IEJhc2VTZXRNSVZhbHVlc1VwZGF0ZXIsIFNldE1JVmFsdWVzVXBkYXRlciB9IGZyb20gJy4uL3VwZGF0ZXJzL3NldC1taS12YWx1ZXMudXBkYXRlcic7XG5cbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcbi8vIGltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZUJlZm9yZUFtZW5kQ2FiU2VhcmNoUXVvdGVGZXRjaGVyLFxuICBCZWZvcmVBbWVuZENhYlNlYXJjaFF1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYmVmb3JlLWFtZW5kLWNhYi1zZWFyY2gtcXVvdGUtZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlU2VuZEJhY2tUb1F1ZXVlVXBkYXRlcixcbiAgU2VuZEJhY2tUb1F1ZXVlTXV0YXRpb25UeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NlbmQtYmFjay10by1xdWV1ZS11cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldEJhc2tldENvMkluZm9GZXRjaGVyLFxuICBHZXRCYXNrZXRDbzJGZXRjaGVySW5mb1R5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYmFza2V0LWNvMi5mZXRjaGVyJztcbmltcG9ydCB7IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZCB9IGZyb20gJy4uL2NsYXNzZXMvbWFuYWdlbWVudC1pbmZvLWFuZC12YWxpZCc7XG5pbXBvcnQgeyBGbGlnaHRKb3VybmV5VHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZmxpZ2h0LWpvdXJuZXktdHlwZS10eXBlLmVudW0nO1xuaW1wb3J0IHtcbiAgQmFzZUJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaEZldGNoZXIsXG4gIEJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaEZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2JlZm9yZS1hbWVuZC1jYXItaGlyZS1zZWFyY2guZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlR2V0TUlBcHByb3ZlcnNGZXRjaGVyLFxuICBHZXRNSUFwcHJvdmVyc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1taS1hcHByb3ZlcnMuZmV0Y2hlcic7XG5cbmNvbnN0IFRFTVBJRCA9ICdURU1QSURfJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNrZXRBbmRJdGVtIHtcbiAgYmFza2V0SWQ6IHN0cmluZztcbiAgaXRlbTogQmFza2V0SXRlbTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWlHcm91cERldGFpbCB7XG4gIHR5cGU6IFNlcnZpY2VUeXBlO1xuICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgYmFza2V0SXRlbTogQmFza2V0SXRlbTtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNrZXRJbmZvcm1hdGlvbiB7XG4gIHByaWNlczogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfTtcbiAgbWl4ZWRDdXJyZW5jeTogYm9vbGVhbjtcbiAgY291bnQ6IG51bWJlcjtcbiAgbWlHcm91cHM6IE1pR3JvdXBEZXRhaWxbXTtcbiAgYmFza2V0SW5mb01pRGV0YWlsczogQmFza2V0SW5mb01pRGV0YWlsc0ltcGxbXTtcbiAgc3VwcEluZm86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZVtdO1xuICByZXF1aXJlc1NlbGVjdGVkQXBwcm92ZXI/OiBib29sZWFuO1xuICByZXF1aXJlc1NlbGVjdGVkTWlBcHByb3Zlcj86IGJvb2xlYW47XG4gIHJlcXVpcmVzU2VsZWN0ZWROb3RpZnlBcHByb3Zlcj86IGJvb2xlYW47XG4gIHJlcXVpcmVzU2VsZWN0ZWROb3RpZnlBcHByb3ZlclBlck1pPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNrZXRQcmljZXNMaXN0IHtcbiAgdHlwZTogU2VydmljZVR5cGU7XG4gIHByaWNlOiBudW1iZXI7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGNvMjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2tldFByaWNlcyB7XG4gIHRvdGFsOiBudW1iZXI7XG4gIHRvdGFsQ28yOiBudW1iZXI7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICBsaXN0OiBCYXNrZXRQcmljZXNMaXN0W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFza2V0U2VsZWN0ZWRBcHByb3ZlciB7XG4gIHNlbGVjdGVkQXBwcm92ZXI/OiBVc2VyO1xuICBzZWxlY3RlZE5vdGlmeUFwcHJvdmVyPzogVXNlcjtcbiAgYXBwcm92ZXJzPzogYW55W107XG59XG5cbmV4cG9ydCB0eXBlIEJhc2tldERldGFpbHMgPSBVc2VyQmFza2V0UmVzdWx0ICYgQmFza2V0SW5mb3JtYXRpb247XG5leHBvcnQgY2xhc3MgSW50ZXJuYWxCYXNrZXQ8USBleHRlbmRzIFNlYXJjaEdldFVzZXJGZXRjaGVyVHlwZT5cbiAgaW1wbGVtZW50cyBCYXNrZXRJbmZvcm1hdGlvbiwgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2VcbntcbiAgc3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PEJhc2tldERldGFpbHM+O1xuICBwcml2YXRlIF9iYXNrZXRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QmFza2V0RGV0YWlscz47XG4gIGlkPzogc3RyaW5nO1xuICB0ZW1waWQ/OiBzdHJpbmc7XG4gIHJlcXVpcmVzU2VsZWN0ZWRBcHByb3Zlcj86IGJvb2xlYW47XG4gIHJlcXVpcmVzU2VsZWN0ZWRNaUFwcHJvdmVyPzogYm9vbGVhbjtcbiAgcmVxdWlyZXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyPzogYm9vbGVhbjtcbiAgcmVxdWlyZXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyUGVyTWk/OiBib29sZWFuO1xuICB0aXRsZTogc3RyaW5nO1xuICBwcmljZXM6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH07XG4gIG1peGVkQ3VycmVuY3k6IGJvb2xlYW47XG4gIGxvd2VzdFByaWNlOiBudW1iZXI7XG4gIGNvdW50OiBudW1iZXI7XG4gIG1pR3JvdXBzOiBNaUdyb3VwRGV0YWlsW107XG4gIGJhc2tldEluZm9NaURldGFpbHM6IGFueVtdO1xuICBzdXBwSW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlW107XG4gIGdyYW5kVG90YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH07XG4gIG5lZWRzVG9WaWV3TWk6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhc2tldDogVXNlckJhc2tldFJlc3VsdCxcbiAgICBwcml2YXRlIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgZ2V0VXNlckZldGNoZXI6IEJhc2VHZXRVc2VyRmV0Y2hlcjxRPixcbiAgICBwcml2YXRlIHJlcXVpcmVzU2VydmljZTogQmFzZVJlcXVpcmVzUmVhc29uU2VydmljZSxcbiAgICBwcml2YXRlIHJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlOiBCYXNlUmVxdWlyZXNPdmVycmlkZVJlYXNvblNlcnZpY2VcbiAgKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7XG4gICAgICBzdWJqZWN0OiBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2tldERldGFpbHM+KHtcbiAgICAgICAgLi4uYmFza2V0LFxuICAgICAgICBwcmljZXM6IHt9LFxuICAgICAgICBtaXhlZEN1cnJlbmN5OiBmYWxzZSxcbiAgICAgICAgY291bnQ6IDAsXG4gICAgICAgIG1pR3JvdXBzOiBbXSxcbiAgICAgICAgYmFza2V0SW5mb01pRGV0YWlsczogW10sXG4gICAgICAgIHN1cHBJbmZvOiBbXVxuICAgICAgfSksXG4gICAgICBfYmFza2V0U3ViamVjdDogbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNrZXREZXRhaWxzPih7XG4gICAgICAgIC4uLmJhc2tldCxcbiAgICAgICAgcHJpY2VzOiB7fSxcbiAgICAgICAgbWl4ZWRDdXJyZW5jeTogZmFsc2UsXG4gICAgICAgIGNvdW50OiAwLFxuICAgICAgICBtaUdyb3VwczogW10sXG4gICAgICAgIGJhc2tldEluZm9NaURldGFpbHM6IFtdLFxuICAgICAgICBzdXBwSW5mbzogW11cbiAgICAgIH0pLFxuICAgICAgdGVtcGlkOiBiYXNrZXQuaWQsXG4gICAgICBpZDogYmFza2V0LmlkLFxuICAgICAgdGl0bGU6IGJhc2tldC50aXRsZSxcbiAgICAgIHByaWNlczoge30sXG4gICAgICBtaXhlZEN1cnJlbmN5OiBmYWxzZSxcbiAgICAgIGNvdW50OiAwLFxuICAgICAgbWlHcm91cHM6IFtdLFxuICAgICAgYmFza2V0SW5mb01pRGV0YWlsczogW10sXG4gICAgICBzdXBwSW5mbzogW11cbiAgICB9KTtcblxuICAgIHRoaXMuX2Jhc2tldFN1YmplY3QucGlwZShkZWJvdW5jZVRpbWUoNTAwKSkuc3Vic2NyaWJlKFxuICAgICAgZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuc3ViamVjdC5uZXh0KGRhdGEpO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMuc3ViamVjdC5lcnJvcihlcnIpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLm5leHQoYmFza2V0KTtcbiAgfVxuXG4gIGRlc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH1cblxuICBuZXh0KGJhc2tldDogVXNlckJhc2tldFJlc3VsdCwgaXNBZ2VudDogYm9vbGVhbiA9IG51bGwsIGJhc2tldEl0ZW1JZDogc3RyaW5nID0gJycpIHtcbiAgICAvLyByZXBsYWNpbmcgd2l0aCBhIHNoYWxsb3cgY2xvbmUgZm9yIEVOVC04NTM0LCBtaWdodCBXb3JrZXIsIG1pZ2h0IGJyZWFrIHNvbWV0aGluZyBlbHNlLiBJIHdhbnQgdG8gdXNlIF8uY2xvbmVEZWVwV2l0aFxuICAgIC8vIGJhc2tldCA9IF8uY2xvbmUoYmFza2V0KTtcblxuICAgIGlmIChiYXNrZXQuc3RhdHVzID09PSBCYXNrZXRTdGF0dXMuQm9va2VkIHx8IGJhc2tldC5zdGF0dXMgPT09IEJhc2tldFN0YXR1cy5Bd2FpdGluZ0FwcHJvdmFsKSB7XG4gICAgICBiYXNrZXQgPSB0aGlzLmhlbHBlcnMuY2xvbmUoYmFza2V0KTtcbiAgICAgIGJhc2tldCA9IHRoaXMuaGVscGVycy5tZXJnZU9iamVjdHModGhpcy5fYmFza2V0U3ViamVjdC52YWx1ZSwgYmFza2V0KTtcbiAgICB9XG4gICAgdGhpcy5pZCA9IGJhc2tldC5pZDtcbiAgICB0aGlzLnRpdGxlID0gYmFza2V0LnRpdGxlO1xuICAgIGNvbnN0IHRvU2VuZDogQmFza2V0RGV0YWlscyA9IHtcbiAgICAgIC4uLmJhc2tldCwgLy8gU3ByZWFkIHRoZSBleGlzdGluZyBwcm9wZXJ0aWVzIG9mIGJhc2tldFxuICAgICAgLi4uKGJhc2tldC5iYXNrZXRJdGVtcyB8fCBbXSkucmVkdWNlKFxuICAgICAgICAoYWNjdW06IEJhc2tldEluZm9ybWF0aW9uLCBpdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKCFhY2N1bS5wcmljZXNbaXRlbS5jdXJyZW5jeV0pIHtcbiAgICAgICAgICAgIGFjY3VtLnByaWNlc1tpdGVtLmN1cnJlbmN5XSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vICEgLSBOZWVkcyB0byBiZSBpdGVtLnByaWNlIGFzIHRoYXQgY29udGFpbnMgYW55IG1hcmt1cHNcbiAgICAgICAgICBhY2N1bS5wcmljZXNbaXRlbS5jdXJyZW5jeV0gKz0gaXRlbS5wcmljZTtcbiAgICAgICAgICBhY2N1bS5zdXBwSW5mby5wdXNoKFxuICAgICAgICAgICAgbmV3IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ltcGwoXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIHRoaXMuYmFza2V0U2VydmljZSxcbiAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLFxuICAgICAgICAgICAgICB0aGlzLmdldFVzZXJGZXRjaGVyXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChpdGVtLm1hbmFnZW1lbnRJbmZvPy5sZW5ndGggPiAwICYmIChpdGVtLnVzZXJzPy5sZW5ndGggPiAwIHx8IGl0ZW0uZ3Vlc3RzPy5sZW5ndGgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKysrIENyZWF0aW5nIE1JIEltcGxlbWVudGF0aW9uICsrKycpO1xuICAgICAgICAgICAgYWNjdW0uYmFza2V0SW5mb01pRGV0YWlscy5wdXNoKG5ldyBCYXNrZXRJbmZvTWlEZXRhaWxzSW1wbChpdGVtLCB0aGlzLmJhc2tldFNlcnZpY2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJpY2VzOiB7fSxcbiAgICAgICAgICBtaXhlZEN1cnJlbmN5OiBmYWxzZSxcbiAgICAgICAgICBjb3VudDogYmFza2V0LmJhc2tldEl0ZW1zPy5sZW5ndGggfHwgMCxcbiAgICAgICAgICBtaUdyb3VwczogW10sXG4gICAgICAgICAgYmFza2V0SW5mb01pRGV0YWlsczogW10sXG4gICAgICAgICAgc3VwcEluZm86IFtdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9O1xuICAgIHRvU2VuZC5taXhlZEN1cnJlbmN5ID0gT2JqZWN0LmtleXModG9TZW5kLnByaWNlcykubGVuZ3RoID4gMTtcbiAgICB0aGlzLl9iYXNrZXRTdWJqZWN0Lm5leHQodG9TZW5kKTtcblxuICAgIGlmIChiYXNrZXQuYmFza2V0SXRlbXMuZXZlcnkoaXRlbSA9PiBpdGVtPy5kZXRhaWw/Lm91dHdhcmREZXRhaWw/LnNwbGl0SUQpKSB7XG4gICAgICBpZiAoIShiYXNrZXQuYmFza2V0SXRlbXMubGVuZ3RoICUgMikpIHtcbiAgICAgICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UuYWRkQmFza2V0SXRlbShiYXNrZXQsIGJhc2tldEl0ZW1JZCk7XG4gICAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2UuYWRkQmFza2V0SXRlbShiYXNrZXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlcXVpcmVzU2VydmljZS5hZGRCYXNrZXRJdGVtKGJhc2tldCwgYmFza2V0SXRlbUlkKTtcbiAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2UuYWRkQmFza2V0SXRlbShiYXNrZXQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUVudGVycHJpc2VCYXNrZXRTZXJ2aWNlPFxuICBBTlBVX1EgZXh0ZW5kcyBBY2NlcHROZXdQcmljZUZldGNoZXJUeXBlLFxuICBBSVRCX1EgZXh0ZW5kcyBBZGRJdGVtVG9CYXNrZXRGZXRjaGVyVHlwZSxcbiAgQVVUQl9RIGV4dGVuZHMgQWRkVXNlckJhc2tldEZldGNoZXJUeXBlLFxuICBDQl9RIGV4dGVuZHMgQ3JlYXRlQmFza2V0RmV0Y2hlclR5cGUsXG4gIEdCX1EgZXh0ZW5kcyBHZXRCYXNrZXRGZXRjaGVyVHlwZSxcbiAgQkJfUSBleHRlbmRzIEJvb2tCYXNrZXRGZXRjaGVyVHlwZSxcbiAgREJfUSBleHRlbmRzIERlbGV0ZUJhc2tldEZldGNoZXJUeXBlLFxuICBSSUJfUSBleHRlbmRzIERlbGV0ZUJhc2tldEl0ZW1GZXRjaGVyVHlwZSxcbiAgUlZCX1EgZXh0ZW5kcyBSZXZhbGlkYXRlQmFza2V0RmV0Y2hlclR5cGUsXG4gIEdVX1EgZXh0ZW5kcyBTZWFyY2hHZXRVc2VyRmV0Y2hlclR5cGUsXG4gIEdVQl9RIGV4dGVuZHMgR2V0VXNlckJhc2tldHNGZXRjaGVyVHlwZSxcbiAgU0JMUF9RIGV4dGVuZHMgU2V0QmFza2V0SXRlbUxlYWRQYXNzZW5nZXJGZXRjaGVyVHlwZSxcbiAgTUlUREJfUSBleHRlbmRzIE1vdmVJdGVtVG9BRGlmZmVyZW50QmFza2V0VHlwZSxcbiAgVUJOX1EgZXh0ZW5kcyBCYXNlVXBkYXRlQmFza2V0Tm90ZXNUeXBlLFxuICBVQlRfUSBleHRlbmRzIEJhc2VVcGRhdGVCYXNrZXRUaXRsZVR5cGUsXG4gIFNCTV9RIGV4dGVuZHMgU2V0QmFza2V0SXRlbVBheW1lbnRNZXRob2RUeXBlLFxuICBHQ0lfUSBleHRlbmRzIEdldENhbmNlbGxhdGlvbkluZm9UeXBlLFxuICBBR1RCX1EgZXh0ZW5kcyBBZGRHdWVzdEJhc2tldEZldGNoZXJUeXBlLFxuICBBVUlCX1EgZXh0ZW5kcyBBZGRVcGRhdGVkSXRlbVRvQmFza2V0VXBkYXRlclR5cGUsXG4gIENCTl9RIGV4dGVuZHMgQ3JlYXRlQmFza2V0Tm90ZVVwZGF0ZXJUeXBlLFxuICBHQk5GX1EgZXh0ZW5kcyBHZXRCYXNrZXROb3Rlc0ZldGNoZXJUeXBlLFxuICBHQkFUX1EgZXh0ZW5kcyBHZXRCYXNrZXRBcHByb3ZhbFRpbWVzdGFtcHNGZXRjaGVyVHlwZSxcbiAgQU1fUSBleHRlbmRzIEFkZEJhc2tldEl0ZW1NYXJrdXBUeXBlLFxuICBBQklDUl9RIGV4dGVuZHMgQWRkQmFza2V0SXRlbUN1c3RvbVJlbWFya1VwZGF0ZXJUeXBlLFxuICBHQklDX1EgZXh0ZW5kcyBHZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrc0ZldGNoZXJUeXBlLFxuICBDQk9VX1EgZXh0ZW5kcyBDaGFuZ2VCYXNrZXRPd25lcnNoaXBVcGRhdGVyVHlwZSxcbiAgR0JRRl9RIGV4dGVuZHMgR2V0QmFza2V0UXVvdGVGZXRjaGVyVHlwZSxcbiAgUkFFX1EgZXh0ZW5kcyBSZXNlbmRBcHByb3ZlckVtYWlsUXVvdGVGZXRjaGVyVHlwZSxcbiAgQ0lCUkFfUSBleHRlbmRzIENoZWNrSWZCYXNrZXRSZXF1aXJlc0FwcHJvdmFsRmV0Y2hlclR5cGUsXG4gIEdPQUZfUSBleHRlbmRzIEdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXJUeXBlLFxuICBTQkFfVSBleHRlbmRzIFNlbGVjdEJhc2tldEFwcHJvdmVyTXV0YXRpb25UeXBlLFxuICBHREJfUSBleHRlbmRzIERyYWZ0QmFza2V0c0ZldGNoZXJUeXBlLFxuICBDQkZEX1EgZXh0ZW5kcyBDcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyVHlwZSxcbiAgU0JOQV9VIGV4dGVuZHMgU2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJNdXRhdGlvblR5cGUsXG4gIENBQl9RIGV4dGVuZHMgQ2FuQW1lbmRCb29raW5nVHlwZSxcbiAgR1VBRl9RIGV4dGVuZHMgR2V0VXNlckFwcHJvdmVyc0ZldGNoZXJUeXBlLFxuICBHTUFGX1EgZXh0ZW5kcyBHZXRNSUFwcHJvdmVyc0ZldGNoZXJUeXBlLFxuICBTQlVfUSBleHRlbmRzIFNoYXJlQmFza2V0VXBkYXRlclR5cGUsXG4gIEdVU0JfUSBleHRlbmRzIEdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlclR5cGUsXG4gIEdUU01fUSBleHRlbmRzIEdldFRyYWluU2VhdG1hcEZldGNoZXJUeXBlLFxuICBCQVNfUSBleHRlbmRzIEJlZm9yZUFtZW5kQ2FiU2VhcmNoUXVvdGVGZXRjaGVyVHlwZSxcbiAgQkFDSFNfUSBleHRlbmRzIEJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaEZldGNoZXJUeXBlLFxuICBTQlRRX1UgZXh0ZW5kcyBTZW5kQmFja1RvUXVldWVNdXRhdGlvblR5cGUsXG4gIEdCQ19GIGV4dGVuZHMgR2V0QmFza2V0Q28yRmV0Y2hlckluZm9UeXBlLFxuICBTQk1MQV9VIGV4dGVuZHMgU2VsZWN0QmFza2V0TXVsdGlMZXZlbEFwcHJvdmVyc011dGF0aW9uVHlwZSxcbiAgVkJNX0YgZXh0ZW5kcyBWYWxpZGF0ZUJhc2tldE1pRmV0Y2hlcixcbiAgVkJJTV9GIGV4dGVuZHMgVmFsaWRhdGVCYXNrZXRJdGVtTWlGZXRjaGVyLFxuICBTTVZfVSBleHRlbmRzIFNldE1JVmFsdWVzVXBkYXRlcixcbiAgU01BU19GIGV4dGVuZHMgU2VhcmNoTUlBdXRvU3VnZ2VzdFZhbHVlc0ZldGNoZXJcbj4gaW1wbGVtZW50cyBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZVxue1xuICBwdWJsaWMgYmFza2V0VXBkYXRpbmcgPSBmYWxzZTtcblxuICBwcml2YXRlIGN1cnJlbnRCYXNrZXRzOiBJbnRlcm5hbEJhc2tldDxHVV9RPltdID0gW107XG4gIGF3YWl0aW5nQXBwcm92YWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBoaWdobGlnaHRCYXNrZXRJdGVtc0VtaXR0ZXI6IFN1YmplY3Q8R2V0VXNlckJhc2tldEl0ZW1SZXN1bHRbXT4gPSBuZXcgU3ViamVjdDxcbiAgICBHZXRVc2VyQmFza2V0SXRlbVJlc3VsdFtdXG4gID4oKTtcbiAgbG9hZGluZ1N1cHBsZW1lbnRhcnlCb29raW5nSW5mbzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGJhc2tldENoYW5nZUVtaXR0ZXI6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgYWRkaW5nVG9CYXNrZXQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZW1vdmluZ0Zyb21CYXNrZXQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBkZWxldGluZ0Jhc2tldDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGF1dG9TdWdnZXN0RGVmYXVsdHNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgY3JlYXRpbmdOZXdCYXNrZXQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0RpYWxvZ09wZW46IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBtaVVwZGF0aW5nOiBCZWhhdmlvclN1YmplY3Q8Qm9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVxdWlyZU5ld0dVVEJhc2tldDogQmVoYXZpb3JTdWJqZWN0PEJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGNsZWFyUmFpbFNlYXRzOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICBzZWxlY3RlZEJhc2tldElkOiBzdHJpbmcgPSAnJztcbiAgbmV3SW52b2tlZEJhc2tldElkOiBzdHJpbmc7XG4gIHVwZGF0aW5nQmFza2V0ID0gZmFsc2U7XG4gIF9pc0FwcHJvdmVkQmFza2V0OiBib29sZWFuID0gZmFsc2U7XG4gIF9taXNzaW5nTUlzOiBWYWxpZGF0aW9uUmVzcG9uc2VbXSA9IFtdO1xuICBtaVZpZXdlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBsb2FkaW5nQ2FuY2VsbGVkSW5mbyA9IGZhbHNlO1xuICBnZXQgaXNBcHByb3ZlZEJhc2tldCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNBcHByb3ZlZEJhc2tldDtcbiAgfVxuXG4gIHNldCBpc0FwcHJvdmVkQmFza2V0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNBcHByb3ZlZEJhc2tldCA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRCYXNrZXRJRCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldCBjdXJyZW50QmFza2V0SUQodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5jdXJyZW50QmFza2V0SUQpIHtcbiAgICAgIC8vIHRoaXMgcHJldmVudHMgdGhlIGVtaXR0ZXIgZ2V0dGluZyBzdHVjayBpbiBhIGxvb3AgIC0gY2FzdWluZyBicm93c2VyIG92ZXJsb2Fkc1xuICAgICAgdGhpcy5taVZpZXdlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtaXNzaW5nTUlzKCk6IFZhbGlkYXRpb25SZXNwb25zZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fbWlzc2luZ01JcztcbiAgfVxuXG4gIHNldCBtaXNzaW5nTUlzKGRhdGE6IFZhbGlkYXRpb25SZXNwb25zZVtdKSB7XG4gICAgdGhpcy5fbWlzc2luZ01JcyA9IGRhdGE7XG4gIH1cblxuICBiYXNrZXRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcm5hbEJhc2tldDxHVV9RPltdPihbXSk7XG5cbiAgYmFza2V0TGlzdDogQmFza2V0UHJpY2VzTGlzdFtdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkZsaWdodCxcbiAgICAgIHRleHQ6ICdGTElHSFRTJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5SYWlsLFxuICAgICAgdGV4dDogJ1JBSUwnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkhvdGVsLFxuICAgICAgdGV4dDogJ0hPVEVMUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuQ2FiLFxuICAgICAgdGV4dDogJ1RBWElTJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5DYXIsXG4gICAgICB0ZXh0OiAnQ0FSUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuRXVyb3N0YXIsXG4gICAgICB0ZXh0OiAnRVVST1NUQVInLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsLFxuICAgICAgdGV4dDogJ0lOVEVSTkFUSU9OQUwgUkFJTCcsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuUGFya2luZyxcbiAgICAgIHRleHQ6ICdQQVJLSU5HJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5Mb3VuZ2UsXG4gICAgICB0ZXh0OiAnTE9VTkdFUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuQ29hY2gsXG4gICAgICB0ZXh0OiAnQ09BQ0gnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkZhc3RUcmFjayxcbiAgICAgIHRleHQ6ICdGQVNUX1RSQUNLJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfVxuICBdO1xuXG4gIGJhc2tldFByaWNlczogQmVoYXZpb3JTdWJqZWN0PEJhc2tldFByaWNlcz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2tldFByaWNlcz4oe1xuICAgIHRvdGFsOiBudWxsLFxuICAgIHRvdGFsQ28yOiBudWxsLFxuICAgIGxpc3Q6IHRoaXMuYmFza2V0TGlzdFxuICB9KTtcblxuICBtZW51U3RhdGUgPSBNZW51U2xpZGVFbnVtLk9VVDtcbiAgLy8gY2hlY2tBcHByb3Zlck1vZGFsQ2xvc2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHJpdmF0ZSByZXF1aXJlc1NlcnZpY2U6IEJhc2VSZXF1aXJlc1JlYXNvblNlcnZpY2U7XG4gIHByaXZhdGUgcmVxdWlyZXNPdmVycmlkZVNlcnZpY2U6IEJhc2VSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZTtcbiAgcHJpdmF0ZSB1c2VyQ3VycmVuY3kgPSAnR0JQJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjY2VwdE5ld1ByaWNlVXBkYXRlcjogQmFzZUFjY2VwdE5ld1ByaWNlVXBkYXRlcjxBTlBVX1E+LFxuICAgIHByaXZhdGUgYWRkSXRlbVRvQmFza2V0VXBkYXRlcjogQmFzZUFkZEl0ZW1Ub0Jhc2tldFVwZGF0ZXI8QUlUQl9RPixcbiAgICBwcml2YXRlIGFkZFVzZXJUb0Jhc2tldEl0ZW06IEJhc2VBZGRVc2VyVG9CYXNrZXRJdGVtVXBkYXRlcjxBVVRCX1E+LFxuICAgIHByaXZhdGUgYmFza2V0Q3JlYXRvcjogQmFzZUNyZWF0ZUJhc2tldFVwZGF0ZXI8Q0JfUT4sXG4gICAgcHVibGljIGJhc2tldEZldGNoZXI6IEJhc2VHZXRCYXNrZXRGZXRjaGVyPEdCX1E+LFxuICAgIHByaXZhdGUgYm9va0Jhc2tldFVwZGF0ZXI6IEJhc2VCb29rQmFza2V0VXBkYXRlcjxCQl9RPixcbiAgICBwcml2YXRlIGRlbGV0ZUJhc2tldFVwZGF0ZXI6IEJhc2VEZWxldGVCYXNrZXRVcGRhdGVyPERCX1E+LFxuICAgIHByaXZhdGUgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxuICAgIHByaXZhdGUgcmVtb3ZlSXRlbUZyb21CYXNrZXRVcGRhdGVyOiBCYXNlUmVtb3ZlSXRlbUZyb21CYXNrZXRVcGRhdGVyPFJJQl9RPixcbiAgICBwcml2YXRlIHJldmFsaWRhdGVCYXNrZXRVcGRhdGVyOiBCYXNlUmV2YWxpZGF0ZUJhc2tldFVwZGF0ZXI8UlZCX1E+LFxuICAgIHByaXZhdGUgZ2V0VXNlckZldGNoZXI6IEJhc2VHZXRVc2VyRmV0Y2hlcjxHVV9RPixcbiAgICBwcml2YXRlIGdldFVzZXJCYXNrZXRzRmV0Y2hlcjogQmFzZUdldFVzZXJCYXNrZXRzRmV0Y2hlcjxHVUJfUT4sXG4gICAgcHJpdmF0ZSBTZXRCYXNrZXRJdGVtTGVhZFBhc3NlbmdlcjogQmFzZVNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyVXBkYXRlcjxTQkxQX1E+LFxuICAgIHByaXZhdGUgbW92ZUl0ZW1Ub0FEaWZmZXJlbnRCYXNrZXQ6IEJhc2Vtb3ZlQmFza2V0SXRlbVRvQmFza2V0PE1JVERCX1E+LFxuICAgIHByaXZhdGUgdXBkYXRlQmFza2V0Tm90ZXNVcGRhdGVyOiBCYXNlVXBkYXRlQmFza2V0Tm90ZVVwZGF0ZXI8VUJOX1E+LFxuICAgIHByaXZhdGUgdXBkYXRlQmFza2V0VGl0bGVVcGRhdGVyOiBCYXNlVXBkYXRlQmFza2V0VGl0bGVVcGRhdGVyPFVCVF9RPixcbiAgICBwcml2YXRlIHNldFBheW1lbnRNZXRob2RVcGRhdGVyOiBCYXNlU2V0UGF5bWVudE9wdGlvblVwZGF0ZXI8U0JNX1E+LFxuICAgIHByaXZhdGUgZ2V0Q2FuY2VsbGF0aW9uSW5mb0ZldGNoZXI6IEJhc2VHZXRDYW5jZWxsYXRpb25JbmZvRmV0Y2hlcjxHQ0lfUT4sXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhZGRHdWVzdFRvQmFza2V0SXRlbTogQmFzZUFkZEd1ZXN0VG9CYXNrZXRJdGVtVXBkYXRlcjxBR1RCX1E+LFxuICAgIHByaXZhdGUgYWRkVXBkYXRlZEl0ZW1Ub0Jhc2tldFVwZGF0ZXI6IEJhc2VBZGRVcGRhdGVkSXRlbVRvQmFza2V0VXBkYXRlcjxBVUlCX1E+LFxuICAgIHByaXZhdGUgY3JlYXRlQmFza2V0Tm90ZTogQmFzZUNyZWF0ZUJhc2tldE5vdGVVcGRhdGVyPENCTl9RPixcbiAgICBwcml2YXRlIGdldEJhc2tldE5vdGVzOiBCYXNlR2V0QmFza2V0Tm90ZXNGZXRjaGVyPEdCTkZfUT4sXG4gICAgcHJpdmF0ZSBnZXRCYXNrZXRBcHByb3ZhbFRpbWVzdGFtcHNGZXRjaGVyOiBCYXNlR2V0QmFza2V0QXBwcm92YWxUaW1lc3RhbXBzRmV0Y2hlcjxHQkFUX1E+LFxuICAgIHByaXZhdGUgYWRkQmFza2V0SXRlbU1hcmt1cFVwZGF0ZXI6IEJhc2VBZGRCYXNrZXRJdGVtTWFya3VwVXBkYXRlcjxBTV9RPixcbiAgICBwcml2YXRlIGFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcms6IEJhc2VBZGRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrVXBkYXRlcjxBQklDUl9RPixcbiAgICBwcml2YXRlIGdldEJhc2tldEl0ZW1DdXN0b21SZW1hcmtzOiBCYXNlR2V0QmFza2V0SXRlbUN1c3RvbVJlbWFya3NGZXRjaGVyPEdCSUNfUT4sXG4gICAgcHJpdmF0ZSBjaGFuZ2VCYXNrZXRPd25lcnNoaXBVcGRhdGVyOiBCYXNlQ2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlcjxDQk9VX1E+LFxuICAgIHByaXZhdGUgZ2V0QmFza2V0UXVvdGVGZXRjaGVyOiBCYXNlR2V0QmFza2V0UXVvdGVGZXRjaGVyPEdCUUZfUT4sXG4gICAgcHJpdmF0ZSByZXNlbmRBcHByb3ZlckVtYWlsOiBCYXNlUmVzZW5kQXBwcm92ZXJFbWFpbEZldGNoZXI8UkFFX1E+LFxuICAgIHByaXZhdGUgYmFza2V0UmVxdWlyZXNBcHByb3ZhbDogQmFzZUNoZWNrSWZCYXNrZXRSZXF1aXJlc0FwcHJvdmFsRmV0Y2hlcjxDSUJSQV9RPixcbiAgICBwcml2YXRlIGdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXI6IEJhc2VHZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyPEdPQUZfUT4sXG4gICAgcHJpdmF0ZSBzZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXI6IEJhc2VTZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXI8U0JBX1U+LFxuICAgIHByaXZhdGUgZ2V0RHJhZnRCYXNrZXRzRmV0Y2hlcjogQmFzZUdldERyYWZ0QmFza2V0c0ZldGNoZXI8R0RCX1E+LFxuICAgIHByaXZhdGUgY3JlYXRlQmFza2V0RnJvbURyYWZ0VXBkYXRlcjogQmFzZUNyZWF0ZUJhc2tldEZyb21EcmFmdFVwZGF0ZXI8Q0JGRF9RPixcbiAgICBwcml2YXRlIHNlbGVjdEJhc2tldE5vdGlmeUFwcHJvdmVyVXBkYXRlcjogQmFzZVNlbGVjdEJhc2tldE5vdGlmeUFwcHJvdmVyVXBkYXRlcjxTQk5BX1U+LFxuICAgIHByaXZhdGUgY2FuQW1lbmRCb29raW5nSW5mb0ZldGNoZXI6IEJhc2VDYW5BbWVuZEJvb2tpbmdGZXRjaGVyPENBQl9RPixcbiAgICBwcml2YXRlIGdldFVzZXJBcHByb3ZlcnNGZXRjaGVyOiBCYXNlR2V0VXNlckFwcHJvdmVyc0ZldGNoZXI8R1VBRl9RPixcbiAgICBwcml2YXRlIGdldE1JQXBwcm92ZXJzRmV0Y2hlcjogQmFzZUdldE1JQXBwcm92ZXJzRmV0Y2hlcjxHTUFGX1E+LFxuICAgIHByaXZhdGUgc2hhcmVCYXNrZXRVcGRhdGVyOiBCYXNlU2hhcmVCYXNrZXRVcGRhdGVyPFNCVV9RPixcbiAgICBwcml2YXRlIGdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlcjogQmFzZUdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlcjxHVVNCX1E+LFxuICAgIHByaXZhdGUgZ2V0VHJhaW5TZWF0TWFwRmV0Y2hlcjogQmFzZUdldFRyYWluU2VhdG1hcEZldGNoZXI8R1RTTV9RPixcbiAgICBwcml2YXRlIGJlZm9yZUFtZW5kQ2FiU2VhcmNoZmV0Y2hlcjogQmFzZUJlZm9yZUFtZW5kQ2FiU2VhcmNoUXVvdGVGZXRjaGVyPEJBU19RPixcbiAgICBwcml2YXRlIGJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaGZldGNoZXI6IEJhc2VCZWZvcmVBbWVuZENhckhpcmVTZWFyY2hGZXRjaGVyPEJBQ0hTX1E+LFxuICAgIHByb3RlY3RlZCBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VuZEJhY2tUb1F1ZXVlVXBkYXRlcjogQmFzZVNlbmRCYWNrVG9RdWV1ZVVwZGF0ZXI8U0JUUV9VPixcbiAgICBwcml2YXRlIGJhc2tldENvMkZldGNoZXI6IEJhc2VHZXRCYXNrZXRDbzJJbmZvRmV0Y2hlcjxHQkNfRj4sXG4gICAgcHJpdmF0ZSBzZWxlY3RCYXNrZXRNdWx0aUxldmVsQXBwcm92ZXJzVXBkYXRlcjogQmFzZVNlbGVjdEJhc2tldE11bHRpTGV2ZWxBcHByb3ZlcnNVcGRhdGVyPFNCTUxBX1U+LFxuICAgIHByaXZhdGUgdmFsaWRhdGVCYXNrZXRNaUZldGNoZXI6IEJhc2VWYWxpZGF0ZUJhc2tldE1pRmV0Y2hlcjxWQk1fRj4sXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUJhc2tldEl0ZW1NaUZldGNoZXI6IEJhc2VWYWxpZGF0ZUJhc2tldEl0ZW1NaUZldGNoZXI8VkJJTV9GPixcbiAgICBwcml2YXRlIHNldE1JVmFsdWVzVXBkYXRlcjogQmFzZVNldE1JVmFsdWVzVXBkYXRlcjxTTVZfVT4sXG4gICAgcHJpdmF0ZSBzZWFyY2hNSUF1dG9TdWdnZXN0VmFsdWVzRmV0Y2hlcjogQmFzZVNlYXJjaE1JQXV0b1N1Z2dlc3RWYWx1ZXNGZXRjaGVyPFNNQVNfRj5cbiAgKSB7XG4gICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UgPSBuZXcgQmFzZVJlcXVpcmVzUmVhc29uU2VydmljZShtb2RhbFNlcnZpY2UsIHRoaXMpO1xuICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2UgPSBuZXcgQmFzZVJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlKG1vZGFsU2VydmljZSwgdGhpcyk7XG4gICAgdGhpcy51c2VyU2VydmljZS5jaGFuZ2VVc2VyLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLmNoYW5nZUJvYm8uc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGFzeW5jICh2YWx1ZTogVHJhdmVsbGVyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJc0FnZW50KCkgJiYgdGhpcy5jdXJyZW50QmFza2V0cy5sZW5ndGggJiYgIXZhbHVlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVPcGVuSW52b2tlZEJhc2tldHMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2MgLSBkZWxldGVzIGFsbCBvcGVuIGludm9rZWQgYmFza2V0c1xuICAgKi9cbiAgYXN5bmMgZGVsZXRlT3Blbkludm9rZWRCYXNrZXRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgYmFza2V0IG9mIHRoaXMuY3VycmVudEJhc2tldHMpIHtcbiAgICAgIGNvbnN0IGJhc2tldFZhbHVlID0gYmFza2V0LnN1YmplY3QudmFsdWU7XG4gICAgICBpZiAoYmFza2V0VmFsdWUuaW52b2tlZFVzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVCYXNrZXQoYmFza2V0VmFsdWUuaWQpLnRvUHJvbWlzZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFJlcXVpcmVzUmVhc29uU2VydmljZSgpOiBSZXF1aXJlc1JlYXNvblNlcnZpY2VJbnRlcmZhY2Uge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVzU2VydmljZTtcbiAgfVxuXG4gIGdldFJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlKCk6IFJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlSW50ZXJmYWNlIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlc092ZXJyaWRlU2VydmljZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICAvLyBjb25zb2xlLndhcm4oJysrKyBCYXNrZXQgUmVzZXQgQ2FsbGVkICsrKycpO1xuXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuZ2V0ZnVsbFVzZXJEZXRhaWxzKGZhbHNlKS51c2VyRGF0YS52YWx1ZSkge1xuICAgICAgLy8gY29uc29sZS53YXJuKCcrKysgRkVUQ0hJTkcgQkFTS0VUIEZST00gUkVTRVQgKysrJyk7XG4gICAgICB0aGlzLmdldFVzZXJCYXNrZXRzRmV0Y2hlclxuICAgICAgICAuZmV0Y2hMaXN0KHtcbiAgICAgICAgICBiYXNrZXRTdGF0dXNlczogW0Jhc2tldFN0YXR1cy5PcGVuXSxcbiAgICAgICAgICB1c2VyOiB0aGlzLnVzZXJTZXJ2aWNlLmdldGZ1bGxVc2VyRGV0YWlscyh0cnVlKS51c2VyRGF0YS52YWx1ZS51c2VyX2lkLnRvU3RyaW5nKClcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYmFza2V0czogVXNlckJhc2tldFJlc3VsdFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5maWx0ZXIoXG4gICAgICAgICAgICAgIChiYXNrZXQ6IEludGVybmFsQmFza2V0PEdVX1E+KSA9PlxuICAgICAgICAgICAgICAgIGJhc2tldC5zdWJqZWN0LnZhbHVlLnN0YXR1cyA9PT0gQmFza2V0U3RhdHVzLk9wZW4gfHxcbiAgICAgICAgICAgICAgICAhYmFza2V0LnN1YmplY3QudmFsdWUuc3RhdHVzIHx8XG4gICAgICAgICAgICAgICAgYmFza2V0LmlkID09PSB0aGlzLmN1cnJlbnRCYXNrZXRJRCB8fFxuICAgICAgICAgICAgICAgIHRoaXMuaXNBcHByb3ZlZEJhc2tldFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50QmFza2V0cyA9IGJhc2tldHMubWFwKChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGJhc2tldCkge1xuICAgICAgICAgICAgICAgIGxldCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0LmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoIWludEJhc2tldCkge1xuICAgICAgICAgICAgICAgICAgaW50QmFza2V0ID0gdGhpcy5jcmVhdGVJbnRCYXNrZXQoYmFza2V0KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMucHVzaChpbnRCYXNrZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaW50QmFza2V0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGV0IGN1cnJlbnRCYXNrZXRzQ29weSA9IHRoaXMuaGVscGVycy5jbG9uZShjdXJyZW50QmFza2V0cyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMudXNlclNlcnZpY2UuYm9ibykge1xuICAgICAgICAgICAgICAvLyByZW1vdmUgYmFza2VzdCB3aXRoIGludm9rZWQgdXNlciBpZiB3ZSBhcmUgbm90IGN1cnJlbnRseSBpbnZva2luZyBhIHVzZXIgLy8gPyAtIHNob3VsZCB3ZSBkbyB0aGUgb3Bwb3NpdGUgYXMgd2VsbD9cbiAgICAgICAgICAgICAgY3VycmVudEJhc2tldHNDb3B5ID0gY3VycmVudEJhc2tldHNDb3B5LmZpbHRlcihcbiAgICAgICAgICAgICAgICBiYXNrZXQgPT4gIWJhc2tldC5zdWJqZWN0LnZhbHVlLmludm9rZWRVc2VyXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgdGhpcy5iYXNrZXRzLm5leHQoY3VycmVudEJhc2tldHMpOyAvLyB1cGRhdGUgYmFza2V0IGJlZm9yZSBjdXJyZW50QmFza2V0SUQgdXBkYXRlIGJhc2tldENoYW5nZUVtaXR0ZXIgd2l0aCB0aGUgb2xkIGJhc2tldFxuXG4gICAgICAgICAgICAgIGlmIChjdXJyZW50QmFza2V0c0NvcHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRJRCBleGlzdHMgLSBkb24ndCByZXBsYWNlIGN1cnJlbnRCYXNrZXRJRCB3aXRoIGN1cnJlbnRCYXNrZXRzQ29weVswXS5pZCAoaWYgbXVsdGlwbGUgc2VydmljZXMsIHdlIG11c3QgaGF2ZSBhIHNwZWNpZmljIGN1cnJlbnRCYXNrZXRJRClcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IHRoaXMuY3VycmVudEJhc2tldElEIHx8IGN1cnJlbnRCYXNrZXRzQ29weVswXS5pZDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY3VycmVudEJhc2tldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRzIGl0ZW1zIGRvbid0IGhhdmUgY3VycmVudEJhc2tldElEIHJlc2V0IGN1cnJlbnRCYXNrZXRJRCBFTlQtNDk1OVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRCYXNrZXRzLmV2ZXJ5KGJhc2tldCA9PiBiYXNrZXQuaWQgIT09IHRoaXMuY3VycmVudEJhc2tldElEKSAmJlxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0cy5ldmVyeShiYXNrZXQgPT4gYmFza2V0LmlkICE9PSB0aGlzLmN1cnJlbnRCYXNrZXRJRClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gY3VycmVudEJhc2tldHNbMF0uaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRJRCBleGlzdHMgLSBkb24ndCByZXBsYWNlIGN1cnJlbnRCYXNrZXRJRCB3aXRoIGN1cnJlbnRCYXNrZXRzQ29weVswXS5pZCAoaWYgbXVsdGlwbGUgc2VydmljZXMsIHdlIG11c3QgaGF2ZSBhIHNwZWNpZmljIGN1cnJlbnRCYXNrZXRJRCBFTlQtNDY2MSlcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IHRoaXMuY3VycmVudEJhc2tldElEIHx8IGN1cnJlbnRCYXNrZXRzWzBdLmlkO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gbnVsbDtcbiAgICAgICAgICAgICAgfSAvLyB3YW50IHRvIGtlZXAgdGhlIGludm9rZWQgYmFza2V0c1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJhc2tldHMubmV4dChjdXJyZW50QmFza2V0cyk7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50QmFza2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRzIGl0ZW1zIGRvbid0IGhhdmUgY3VycmVudEJhc2tldElEIHJlc2V0IGN1cnJlbnRCYXNrZXRJRCBFTlQtNDk1OVxuICAgICAgICAgICAgICBpZiAoY3VycmVudEJhc2tldHMuZXZlcnkoYmFza2V0ID0+IGJhc2tldC5pZCAhPT0gdGhpcy5jdXJyZW50QmFza2V0SUQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBjdXJyZW50QmFza2V0c1swXS5pZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50QmFza2V0SUQgZXhpc3RzIC0gZG9uJ3QgcmVwbGFjZSBjdXJyZW50QmFza2V0SUQgd2l0aCBjdXJyZW50QmFza2V0c0NvcHlbMF0uaWQgKGlmIG11bHRpcGxlIHNlcnZpY2VzLCB3ZSBtdXN0IGhhdmUgYSBzcGVjaWZpYyBjdXJyZW50QmFza2V0SUQgRU5ULTQ2NjEpXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gdGhpcy5jdXJyZW50QmFza2V0SUQgfHwgY3VycmVudEJhc2tldHNbMF0uaWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLmZvckVhY2goKGJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UpID0+XG4gICAgICAgIGJhc2tldC5zdWJqZWN0LnVuc3Vic2NyaWJlKClcbiAgICAgICk7XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gW107XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWxsT3BlbkJhc2tldHModXNlcl9pZDogc3RyaW5nKTogUHJvbWlzZTxVc2VyQmFza2V0UmVzdWx0W10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyQmFza2V0c0ZldGNoZXJcbiAgICAgIC5mZXRjaExpc3QoeyBiYXNrZXRTdGF0dXNlczogW0Jhc2tldFN0YXR1cy5PcGVuXSwgdXNlcjogdXNlcl9pZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcCgocmVzdWx0czogVXNlckJhc2tldFJlc3VsdFtdKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdDogVXNlckJhc2tldFJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuZmluZEJhc2tldChyZXN1bHQuaWQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50QmFza2V0ID0gbmV3IEludGVybmFsQmFza2V0KFxuICAgICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLFxuICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXIsXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlcXVpcmVzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMucHVzaChpbnRCYXNrZXQpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdEYW41Jyx0aGlzLmN1cnJlbnRCYXNrZXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRUb0Jhc2tldChcbiAgICBpdGVtOiBBZGRJdGVtVG9CYXNrZXQuVmFyaWFibGVzLFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4sXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgdHJhdmVsbGVyczogVHJhdmVsbGVyW10gPSBbXSxcbiAgICByZXF1aXJlc1JlYXNvbktleXM6IHN0cmluZ1tdLFxuICAgIGludm9rZWRTcGxpdD86IGJvb2xlYW4sXG4gICAgaWdub3JlSW52b2tlZENoZWNrPzogYm9vbGVhblxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcbiAgICBjb25zb2xlLndhcm4oJysrKyBBdHRlbXB0aW5nIHRvIGFkZCBpdGVtIHRvIGJhc2tldDogJywgaXRlbSwgJyArKysnKTtcblxuICAgIGlmIChpbnZva2VkU3BsaXQpIHtcbiAgICAgIC8vIEVOVC02OTQzIGRvIHRoaXMgc28gd2UgdXNlIHRoZSBpbnRCYXNrZXQgaWYgd2UgaGF2ZSBvbmUsIGhhZCBhbiBpc3N1ZSBhZGRpbmcgdG8gYmFza2V0IHdpdGggbm8gY3VycmVudEJha2V0SUQgYnV0IHdlIGRpZCBoYXZlIGludGJhc2tldFxuICAgICAgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElEKSB8fCBpbnRCYXNrZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldCh0aGlzLmN1cnJlbnRCYXNrZXRJRCkgfHwgaW50QmFza2V0O1xuICAgICAgc3dpdGNoIChcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Jhc2tldEZvckludm9rZWQoaW50QmFza2V0LCB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8sIGlnbm9yZUludm9rZWRDaGVjaylcbiAgICAgICkge1xuICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY29udGludWU6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw6XG4gICAgICAgICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xuICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMubmV3QmFza2V0OlxuICAgICAgICAgIGludEJhc2tldCA9IGF3YWl0IHRoaXMuY3JlYXRlQmFza2V0KCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBpbnRCYXNrZXQuaWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaDpcbiAgICAgICAgICBpZiAoaW50QmFza2V0LnN1YmplY3QudmFsdWUuaW52b2tlZFVzZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGludm9rZWRVc2VyID0gaW50QmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXNbMF0udXNlcnMuZmluZChcbiAgICAgICAgICAgICAgdXNlciA9PiB1c2VyLmlkID09PSBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5pbnZva2VkVXNlci5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2Uuc2V0Qm9ibyhUcmF2ZWxsZXJPYmplY3QubWFrZVRyYXZlbGxlck9iamVjdEZyb21Vc2VyKGludm9rZWRVc2VyKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBib2JvXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnNldEJvYm8obnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0OiBhbnkgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcbiAgICAgIFVzZXJGYXZvcnVyaXRlLkFsbG93U2FtZVRyYXZlbGxlc3JQZXJCYXNrZXRcbiAgICApXG4gICAgICA/IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0KFVzZXJGYXZvcnVyaXRlLkFsbG93U2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQpXG4gICAgICA6IFtdO1xuXG4gICAgY29uc29sZS5sb2coc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQpO1xuXG4gICAgaWYgKFxuICAgICAgIWludEJhc2tldC5zdWJqZWN0LnZhbHVlLmNyZWF0ZWRCeUd1dCAmJlxuICAgICAgc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQgJiZcbiAgICAgIHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0WydzYW1lVHJhdmVsbGVycyddICYmXG4gICAgICB0cmF2ZWxsZXJzICYmXG4gICAgICB0cmF2ZWxsZXJzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKCcrKysgU2FtZSBUcmF2ZWxsZXJzIGlzIEVuYWJsZWQgKysrJyk7XG4gICAgICBzd2l0Y2ggKFxuICAgICAgICBhd2FpdCB0aGlzLmlzU2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQoXG4gICAgICAgICAgaW50QmFza2V0LFxuICAgICAgICAgIHRyYXZlbGxlcnMsXG4gICAgICAgICAgc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXRbJ3NhbWVUcmF2ZWxsZXJzJ11cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGNhc2UgRGlmZmVyZW50VHJhdmVsbGVyLmNvbnRpbnVlOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIERpZmZlcmVudFRyYXZlbGxlci5jYW5jZWw6XG4gICAgICAgICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xuICAgICAgICBjYXNlIERpZmZlcmVudFRyYXZlbGxlci5uZXdCYXNrZXQ6XG4gICAgICAgICAgaW50QmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IGludEJhc2tldC5pZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpdGVtLmJhc2tldCA9IGludEJhc2tldC5pZDtcbiAgICBpZiAodHJhdmVsbGVycz8ubGVuZ3RoID4gMCkge1xuICAgICAgaXRlbS51c2VycyA9IHRoaXMuaGVscGVycy5tYWtlVXNlcnModHJhdmVsbGVycy5maWx0ZXIodHJhdiA9PiAhdHJhdi5ndWVzdCkpO1xuICAgICAgaXRlbS5ndWVzdHMgPSB0aGlzLmhlbHBlcnMubWFrZVVzZXJzKHRyYXZlbGxlcnMuZmlsdGVyKHRyYXYgPT4gdHJhdi5ndWVzdCkpO1xuICAgICAgaXRlbS5sZWFkUGFzc2VuZ2VyID0gdHJhdmVsbGVyc1swXS5pZDtcbiAgICAgIGl0ZW0ubGVhZFBhc3NlbmdlclR5cGUgPSB0cmF2ZWxsZXJzWzBdLmd1ZXN0XG4gICAgICAgID8gTGVhZFBhc3NlbmdlclR5cGUuR3Vlc3RcbiAgICAgICAgOiBMZWFkUGFzc2VuZ2VyVHlwZS5Vc2VyO1xuICAgIH1cbiAgICBpdGVtLm91dGJvdW5kRGF0ZSA9IGl0ZW0ub3V0Ym91bmREYXRlXG4gICAgICA/IG5ldyBEYXRlKHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlVGltZShpdGVtLm91dGJvdW5kRGF0ZSkpXG4gICAgICA6IGl0ZW0ub3V0Ym91bmREYXRlO1xuICAgIGl0ZW0uaW5ib3VuZERhdGUgPSBpdGVtLmluYm91bmREYXRlXG4gICAgICA/IG5ldyBEYXRlKHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlVGltZShpdGVtLmluYm91bmREYXRlKSlcbiAgICAgIDogaXRlbS5pbmJvdW5kRGF0ZTtcblxuICAgIC8vIGl0ZW0ucmVxdWlyZXNSZWFzb24gPSByZXF1aXJlc1JlYXNvbjtcbiAgICBpdGVtID0gdGhpcy5jaGVja0RldGFpbHMoaXRlbSk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy51c2VyU2VydmljZS5maW5kU2VydmljZShpdGVtLnNlcnZpY2UpLnR5cGU7XG4gICAgc3dpdGNoIChzZXJ2aWNlKSB7XG4gICAgICBjYXNlICdDQVInOlxuICAgICAgICBjb25zdCBjYXJQcmVmZXJyZWRDdXJlbmN5T2JqZWN0ID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8e1xuICAgICAgICAgIGNhcmhpcmU6IHsgZW5hYmxlOiBib29sZWFuIH07XG4gICAgICAgICAgY3VycmVuY3k6IHN0cmluZztcbiAgICAgICAgfT4oVXNlckZhdm9ydXJpdGUuUHJlZmVycmVkQ3VycmVuY3kpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2FyUHJlZmVycmVkQ3VyZW5jeU9iamVjdCAmJlxuICAgICAgICAgIGNhclByZWZlcnJlZEN1cmVuY3lPYmplY3QuY2FyaGlyZT8uZW5hYmxlICYmXG4gICAgICAgICAgY2FyUHJlZmVycmVkQ3VyZW5jeU9iamVjdC5jdXJyZW5jeVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZXJDdXJyZW5jeSA9IGNhclByZWZlcnJlZEN1cmVuY3lPYmplY3QuY3VycmVuY3k7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdIT1RFTCc6XG4gICAgICAgIGNvbnN0IGhvdGVsUHJlZmVycmVkQ3VyZW5jeU9iamVjdCA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PHtcbiAgICAgICAgICBob3RlbDogeyBlbmFibGU6IGJvb2xlYW4gfTtcbiAgICAgICAgICBjdXJyZW5jeTogc3RyaW5nO1xuICAgICAgICB9PihVc2VyRmF2b3J1cml0ZS5QcmVmZXJyZWRDdXJyZW5jeSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBob3RlbFByZWZlcnJlZEN1cmVuY3lPYmplY3QgJiZcbiAgICAgICAgICBob3RlbFByZWZlcnJlZEN1cmVuY3lPYmplY3QuaG90ZWw/LmVuYWJsZSAmJlxuICAgICAgICAgIGhvdGVsUHJlZmVycmVkQ3VyZW5jeU9iamVjdC5jdXJyZW5jeVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZXJDdXJyZW5jeSA9IGhvdGVsUHJlZmVycmVkQ3VyZW5jeU9iamVjdC5jdXJyZW5jeTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaXRlbS5jb252ZXJ0Q3VycmVuY3lUbyA9IHRoaXMudXNlckN1cnJlbmN5O1xuICAgIHRoaXMucmVtb3ZlQm9va2VkQmFza2V0KCk7XG5cbiAgICBpZiAoaXRlbSAmJiBpbnRCYXNrZXQpIHtcbiAgICAgIHRoaXMuYWRkaW5nVG9CYXNrZXQubmV4dCh0cnVlKTtcbiAgICAgIC8vIHRoaXMgaXMgdGhlIGxhc3QgcG9pbnRcbiAgICAgIGF3YWl0IHRoaXMuYWRkSXRlbVRvQmFza2V0VXBkYXRlclxuICAgICAgICAudXBkYXRlT25lKGl0ZW0pXG4gICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAudGhlbihcbiAgICAgICAgICAobmV3QmFza2V0OiBQYXJ0aWFsPFVzZXJCYXNrZXRSZXN1bHQ+KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1pVmlld2VkID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBoZXJlIEkgd2FudCB0aGUgbmV3IGJhc2tldEl0ZW0gSWRcbiAgICAgICAgICAgIGNvbnN0IG9sZEl0ZW1JZHMgPSBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5iYXNrZXRJdGVtcy5tYXAoaXRlbSA9PiBpdGVtLmlkKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Jhc2tldEl0ZW1JZHMgPSBuZXdCYXNrZXQuYmFza2V0SXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgICAgICAvLyBkb24ndCBuZWVkIG1pIGhlcmVcbiAgICAgICAgICAgIGNvbnN0IG5ld0lkID0gbmV3QmFza2V0SXRlbUlkcy5maW5kKGlkID0+ICFvbGRJdGVtSWRzLmluY2x1ZGVzKGlkKSk7XG5cbiAgICAgICAgICAgIGludEJhc2tldC5uZXh0KFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uaW50QmFza2V0LnN1YmplY3QudmFsdWUsXG4gICAgICAgICAgICAgICAgLi4ubmV3QmFza2V0XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIG5ld0lkXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBzZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW3NlcnZpY2VdLmJvb2tpbmdfY2hvc2VuID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlYXJjaFNlcnZpY2Uuc2VhcmNoX29iamVjdHNbc2VydmljZV0uY2hvc2VuID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBiaTogR2V0VXNlckJhc2tldEl0ZW1SZXN1bHRbXSA9IG5ld0Jhc2tldC5iYXNrZXRJdGVtcztcbiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0QmFza2V0SXRlbXNFbWl0dGVyLm5leHQoYmkpO1xuICAgICAgICAgICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQobmV3QmFza2V0LmlkKTtcbiAgICAgICAgICAgIHRoaXMuYWRkaW5nVG9CYXNrZXQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgKysrIEN1cnJlbnRseSBBZGRpbmc6ICR7dGhpcy5pdGVtc0N1cnJlbnRseUJlaW5nQWRkZWR9IGl0ZW1zICsrK2ApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJysrKyBBZGQgSXRlbSB0byBCYXNrZXQgQ2FsbCBGaW5pc2hlZCEgKysrJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmFkZGluZ1RvQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY29udGludWU7XG4gIH1cblxuICBjaGVja0Jhc2tldEZvckludm9rZWQoXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPixcbiAgICBib2JvOiBUcmF2ZWxsZXIsXG4gICAgaWdub3JlSW52b2tlZENoZWNrOiBib29sZWFuXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIC8vIHRoaXMgY2hhbmdlIGlzIHBvdGVudGlhbGx5IHRoZSByZWFzb24gd2h5IHdlIHNvbWV0aW1lcyBnZXQgYW4gZXJyb3IgYWRkaW5nIHRvIGJhc2tldCwgbm8gaW50QmFza2V0XG4gICAgaWYgKGludEJhc2tldCAmJiBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZT8uaW52b2tlZFVzZXI/LmlkICE9PSBib2JvPy5pZCkge1xuICAgICAgaWYgKGlnbm9yZUludm9rZWRDaGVjaykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMubmV3QmFza2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgIE1vZGFsVHlwZXMuRGlmZmVyZW50SW52b2tkZWRVc2VyQ29tcG9uZW50LFxuICAgICAgICB7IGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmFza2V0Qm9ibzogaW50QmFza2V0LnN1YmplY3QudmFsdWUuaW52b2tlZFVzZXIsXG4gICAgICAgICAgY3VycmVudEJvYm86IGJvYm9cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNvbnRpbnVlKTtcbiAgfVxuXG4gIGlzU2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQoXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPixcbiAgICB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSxcbiAgICBzYW1lVHJhdmVsbGVzclBlckJhc2tldDogbnVtYmVyXG4gICk6IFByb21pc2U8RGlmZmVyZW50VHJhdmVsbGVyPiB7XG4gICAgbGV0IHNhbWVUcmF2ZWxsZXJzOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGV0IHVuaXF1ZVVzZXJzOiBVc2VyW10gPSBbXTtcbiAgICBsZXQgdW5pcXVlVXNlcnNJZHM6IHN0cmluZ1tdID0gW107XG4gICAgaW50QmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMuZm9yRWFjaCgoYmFza2V0OiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICBiYXNrZXQudXNlcnMuZm9yRWFjaCgodXNlcjogVXNlcikgPT4ge1xuICAgICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IHVuaXF1ZVVzZXJzLnNvbWUoKGV4aXN0aW5nVXNlcjogVXNlcikgPT4gZXhpc3RpbmdVc2VyLmlkID09PSB1c2VyLmlkKTtcblxuICAgICAgICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgdW5pcXVlVXNlcnMucHVzaCh1c2VyKTtcbiAgICAgICAgICB1bmlxdWVVc2Vyc0lkcy5wdXNoKHVzZXIuaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRyYXZlbGxlcnMuZm9yRWFjaCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcbiAgICAgIGlmICghdW5pcXVlVXNlcnNJZHMuc29tZSgoaWQ6IHN0cmluZykgPT4gaWQgPT09IHRyYXZlbGxlci5pZCkpIHtcbiAgICAgICAgdW5pcXVlVXNlcnNJZHMucHVzaCh0cmF2ZWxsZXIuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNhbWVUcmF2ZWxsZXJzID0gdW5pcXVlVXNlcnNJZHMubGVuZ3RoIDw9IHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGArKysgRXJyb3IgZGV0ZXJtZW5pbmcgc2FtZSB0cmF2ZWxsZXJzOiAke2Vycm9yfSArKytgKTtcbiAgICB9XG5cbiAgICBpZiAoaW50QmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubGVuZ3RoID4gMCAmJiAhc2FtZVRyYXZlbGxlcnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICBNb2RhbFR5cGVzLkRpZmZlcmVudFRyYXZlbGxlclBlckJhc2tldENvbXBvbmVudCxcbiAgICAgICAgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJbkJhc2tldDogdW5pcXVlVXNlcnMsXG4gICAgICAgICAgdHJhdmVsbGVyczogdHJhdmVsbGVyc1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudFRyYXZlbGxlci5jb250aW51ZSk7XG4gIH1cblxuICBsb2FkQmFza2V0KGlkOiBzdHJpbmcsIGZvcmNlbG9hZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgbGV0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChpZCk7XG4gICAgaWYgKCFpbnRCYXNrZXQgfHwgZm9yY2Vsb2FkKSB7XG4gICAgICBpbnRCYXNrZXQgPSBuZXcgSW50ZXJuYWxCYXNrZXQoXG4gICAgICAgIHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBiYXNrZXRJdGVtczogW11cbiAgICAgICAgfSBhcyBCYXNrZXREZXRhaWxzLFxuICAgICAgICB0aGlzLmhlbHBlcnMsXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXIsXG4gICAgICAgIHRoaXMucmVxdWlyZXNTZXJ2aWNlLFxuICAgICAgICB0aGlzLnJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlXG4gICAgICApO1xuICAgICAgdGhpcy5jdXJyZW50QmFza2V0cy5wdXNoKGludEJhc2tldCk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbmN5T2JqZWN0ID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8e1xuICAgICAgY3VycmVuY3k6IHN0cmluZztcbiAgICAgIGhvdGVsOiB7XG4gICAgICAgIGVuYWJsZTogYm9vbGVhbjtcbiAgICAgIH07XG4gICAgICBjYXJoaXJlOiB7XG4gICAgICAgIGVuYWJsZTogYm9vbGVhbjtcbiAgICAgIH07XG4gICAgfT4oVXNlckZhdm9ydXJpdGUuUHJlZmVycmVkQ3VycmVuY3kpO1xuICAgIGlmIChjdXJyZW5jeU9iamVjdD8uaG90ZWw/LmVuYWJsZSB8fCBjdXJyZW5jeU9iamVjdD8uY2FyaGlyZT8uZW5hYmxlKSB7XG4gICAgICB0aGlzLnVzZXJDdXJyZW5jeSA9IGN1cnJlbmN5T2JqZWN0LmN1cnJlbmN5O1xuICAgIH1cblxuICAgIHRoaXMuYmFza2V0RmV0Y2hlclxuICAgICAgLmZldGNoT25lKHsgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LCBpZCwgd2l0aFN1cHBsZW1lbnRhbDogdHJ1ZSB9KVxuICAgICAgLnN1YnNjcmliZSgobmV3QmFza2V0OiBVc2VyQmFza2V0UmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlQmFza2V0KGlkLCBvZig8QmFza2V0RGV0YWlscz5uZXdCYXNrZXQpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc3Vic3JpYmVUb0Jhc2tldChpZDogc3RyaW5nLCBvYnNlcnZlcjogT2JzZXJ2ZXI8QmFza2V0RGV0YWlscz4pOiB2b2lkIHtcbiAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoaWQpO1xuICAgIGlmIChpbnRCYXNrZXQpIHtcbiAgICAgIGludEJhc2tldC5zdWJqZWN0LnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRXhwaXJlZEl0ZW1zKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoaWQpO1xuICAgIGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zXG4gICAgICAuZmlsdGVyKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiBiYXNrZXRJdGVtLmxhdGVzdFZhbGlkYXRpb25QcmljZURpZmZlcmVuY2UgIT09IDAgfHwgYmFza2V0SXRlbS5leHBpcmVkO1xuICAgICAgfSlcbiAgICAgIC5mb3JFYWNoKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlQmFza2V0SXRlbShpZCwgYmFza2V0SXRlbSk7XG4gICAgICB9KTtcbiAgfVxuXG5cbmFzeW5jIHJlbW92ZUJhc2tldEl0ZW0oYmFza2V0SWQ6IHN0cmluZywgaXRlbTogR2V0VXNlckJhc2tldEl0ZW1SZXN1bHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdGhpcy5yZW1vdmluZ0Zyb21CYXNrZXQubmV4dCh0cnVlKTtcbiAgbGV0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4gPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0SWQpO1xuXG4gIGlmIChpdGVtPy5zZXJ2aWNlPy50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbCkge1xuICAgIGNvbnN0IGhvdGVsSXRlbXMgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMuZmlsdGVyKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpdGVtLmRldGFpbC5ob3RlbElkID09PSBiYXNrZXRJdGVtLmRldGFpbC5ob3RlbElkICYmXG4gICAgICAgIGl0ZW0uZGV0YWlsLnJvb21zWzBdLmlkID09PSBiYXNrZXRJdGVtLmRldGFpbC5yb29tc1swXS5pZCAmJlxuICAgICAgICBpdGVtLmRldGFpbC5yb29tc1swXS5jaGVja0luID09PSBiYXNrZXRJdGVtLmRldGFpbC5yb29tc1swXS5jaGVja0luICYmXG4gICAgICAgIGl0ZW0uZGV0YWlsLnJvb21zWzBdLmNoZWNrT3V0ID09PSBiYXNrZXRJdGVtLmRldGFpbC5yb29tc1swXS5jaGVja091dFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmIChob3RlbEl0ZW1zPy5sZW5ndGggPiAxKSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuV2FybmluZ1JlbW92ZU1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBob3RlbEl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IG5ld0Jhc2tldCA9IGF3YWl0IHRoaXMucmVtb3ZlSXRlbUZyb21CYXNrZXRVcGRhdGVyXG4gICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgICBiYXNrZXRJdGVtOiBpdGVtLmlkXG4gICAgICAgICAgfSlcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgIC50b1Byb21pc2UoKTtcblxuICAgICAgICBpZiAobmV3QmFza2V0KSB7XG4gICAgICAgICAgdGhpcy5taVZpZXdlZCA9IGZhbHNlO1xuICAgICAgICAgIGludEJhc2tldD8ubmV4dCh7XG4gICAgICAgICAgICAuLi5pbnRCYXNrZXQuc3ViamVjdC52YWx1ZSxcbiAgICAgICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucmVtb3ZpbmdGcm9tQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KGJhc2tldElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdCYXNrZXQgPSBhd2FpdCB0aGlzLnJlbW92ZUl0ZW1Gcm9tQmFza2V0VXBkYXRlclxuICAgICAgICAudXBkYXRlT25lKHtcbiAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgYmFza2V0SXRlbTogaXRlbS5pZFxuICAgICAgICB9KVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG5cbiAgICAgIGlmIChuZXdCYXNrZXQpIHtcbiAgICAgICAgdGhpcy5taVZpZXdlZCA9IGZhbHNlO1xuICAgICAgICBpbnRCYXNrZXQ/Lm5leHQoe1xuICAgICAgICAgIC4uLmludEJhc2tldC5zdWJqZWN0LnZhbHVlLFxuICAgICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW1vdmluZ0Zyb21CYXNrZXQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KGJhc2tldElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbmV3QmFza2V0ID0gYXdhaXQgdGhpcy5yZW1vdmVJdGVtRnJvbUJhc2tldFVwZGF0ZXJcbiAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGJhc2tldEl0ZW06IGl0ZW0uaWRcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuXG4gICAgaWYgKG5ld0Jhc2tldCkge1xuICAgICAgdGhpcy5taVZpZXdlZCA9IGZhbHNlO1xuICAgICAgaW50QmFza2V0Py5uZXh0KHtcbiAgICAgICAgLi4uaW50QmFza2V0LnN1YmplY3QudmFsdWUsXG4gICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlbW92aW5nRnJvbUJhc2tldC5uZXh0KGZhbHNlKTtcbiAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KGJhc2tldElkKTtcbiAgICB9XG4gIH1cbn1cblxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0QmFza2V0KFxuICAgIGdldEJvb2tlZEJhc2tldDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGluaXRpYWw6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjcmVhdGVkQnlHdXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZE9yQ3JlYXRlQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElELCBnZXRCb29rZWRCYXNrZXQsIGNyZWF0ZWRCeUd1dCkudGhlbihcbiAgICAgIGRhdGEgPT4ge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQmFza2V0KGlkOiBzdHJpbmcpOiBJbnRlcm5hbEJhc2tldDxHVV9RPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEJhc2tldHMuZmluZCgoYmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPikgPT4ge1xuICAgICAgcmV0dXJuIGJhc2tldC5pZCA9PT0gaWQgfHwgYmFza2V0LnRlbXBpZCA9PT0gaWQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRPckNyZWF0ZUJhc2tldChcbiAgICBpZD86IHN0cmluZyxcbiAgICBnZXRCb29rZWRCYXNrZXQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjcmVhdGVkQnlHdXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgbGV0IGJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4gPSBudWxsO1xuXG4gICAgaWYgKCFpZCkge1xuICAgICAgbGV0IGFsbE9wZW5CYXNrZXRzID0gYXdhaXQgdGhpcy5nZXRBbGxPcGVuQmFza2V0cyhcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRmdWxsVXNlckRldGFpbHModHJ1ZSkudXNlckRhdGEudmFsdWUudXNlcl9pZC50b1N0cmluZygpXG4gICAgICApO1xuXG4gICAgICBpZiAoIXRoaXMudXNlclNlcnZpY2UuYm9ibykge1xuICAgICAgICAvLyBFTlQtMzI3NiByZW1vdmUgYmFza2VzdCB3aXRoIGludm9rZWQgdXNlciBpZiB3ZSBhcmUgbm90IGN1cnJlbnRseSBpbnZva2luZyBhIHVzZXIgLy8gPyAtIHNob3VsZCB3ZSBkbyB0aGUgb3Bwb3NpdGUgYXMgd2VsbD9cbiAgICAgICAgYWxsT3BlbkJhc2tldHMgPSBhbGxPcGVuQmFza2V0cy5maWx0ZXIoYmFza2V0ID0+ICFiYXNrZXQuaW52b2tlZFVzZXIpO1xuICAgICAgfVxuICAgICAgLy8gY29uc29sZS5sb2coJ29wZW4gYmFza2V0czogJywgYWxsT3BlbkJhc2tldHMpO1xuICAgICAgLy8gZmluZCB0aGUgbGFzdCB1cGRhdGVkIGJhc2tldFxuICAgICAgaWYgKCFhbGxPcGVuQmFza2V0cz8ubGVuZ3RoKSB7XG4gICAgICAgIC8vIEVOVC0yNjE2IHJlbW92ZWQgYWRkaW5nIHRvIGN1cnJlbnQgYmFza2V0IGFzIHRoaXMgd2FzIGEgZHVwZVxuICAgICAgICBiYXNrZXQgPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2tldChmYWxzZSwgY3JlYXRlZEJ5R3V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGJhc2tldHMgYXJlIGFscmVhZHkgc29ydGVkIGJ5IGxhc3QgdXBkYXRlZCAtIHJldHVybiB0aGUgbGFzdCB1cGRhdGVkIGJhc2tldFxuICAgICAgICBiYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYWxsT3BlbkJhc2tldHNbMF0uaWQpO1xuXG4gICAgICAgIGlmIChiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXMgPT09ICdCT09LRUQnICYmICFnZXRCb29rZWRCYXNrZXQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJysrKyBSZXRyaWV2ZWQgYmFza2V0IGlzIGluIGJvb2tlZCBzdGF0dXMgLSBjcmVhdGluZyBhIG5ldyBvbmUgKysrJyk7XG4gICAgICAgICAgYmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2goYmFza2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY3JlYXRlIG5ldyBiYXNrZXQgZm9yIGd1dCB1c2VycyBldmVuIGlmIG90aGVyIG9wZW4gZ3V0IGJhc2tldCBleGlzdFxuICAgICAgaWYgKGNyZWF0ZWRCeUd1dCAmJiB0aGlzLnJlcXVpcmVOZXdHVVRCYXNrZXQudmFsdWUpIHtcbiAgICAgICAgYmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoZmFsc2UsIGNyZWF0ZWRCeUd1dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaG93IGJhc2tldHMgd2l0aCBPcGVuIEJhc2tldFN0YXR1cyBvbmx5IEVOVC01MjU5XG4gICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMgPSB0aGlzLmN1cnJlbnRCYXNrZXRzLmZpbHRlcihcbiAgICAgICAgICBpbnRCYSA9PiBpbnRCYS5zdWJqZWN0Py52YWx1ZT8uc3RhdHVzID09PSBCYXNrZXRTdGF0dXMuT3BlblxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuYmFza2V0cy5uZXh0KHRoaXMuY3VycmVudEJhc2tldHMpO1xuICAgICAgICBiYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoaWQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnKysrIEZvdW5kIEJhc2tldDogJywgYmFza2V0LCAnICsrKycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBiYXNrZXQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlQmFza2V0KFxuICAgIGNyZWF0ZWRCeUJvbHQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBjcmVhdGVkQnlHdXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgdGhpcy5jcmVhdGluZ05ld0Jhc2tldC5uZXh0KHRydWUpO1xuICAgIGNvbnN0IGJhc2tldDogVXNlckJhc2tldFJlc3VsdCA9IHtcbiAgICAgIGlkOiBURU1QSUQgKyBtb21lbnQoKS51bml4KCkudG9TdHJpbmcoKSxcbiAgICAgIG93bmVyOiBudWxsLFxuICAgICAgcmVmZXJlbmNlOiBudWxsLFxuICAgICAgdGl0bGU6IG51bGwsXG4gICAgICBub3RlczogbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogbnVsbCxcbiAgICAgIHVwZGF0ZWRBdDogbnVsbCxcbiAgICAgIGJhc2tldEl0ZW1zOiBbXSxcbiAgICAgIHN0YXR1czogbnVsbCxcbiAgICAgIHZhbGlkYXRlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgY29uc3QgaW50QmFza2V0ID0gbmV3IEludGVybmFsQmFza2V0PEdVX1E+KFxuICAgICAgYmFza2V0LFxuICAgICAgdGhpcy5oZWxwZXJzLFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXIsXG4gICAgICB0aGlzLnJlcXVpcmVzU2VydmljZSxcbiAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2VcbiAgICApO1xuICAgIC8vIHsgc3ViamVjdDogbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNrZXQ+KGJhc2tldCksIHRlbXBpZDogYmFza2V0LmlkLCBpZDogYmFza2V0LmlkLCB0aXRsZTogYmFza2V0LmlkIH07XG5cbiAgICAvLyBlbnQtMjYxNiBvbmx5IHBsYWNlIHdlIG5lZWQgdG8gYWRkIGEgYmFza2V0IHRvIGN1cnJlbnQgYmFza2V0c1xuICAgIGNvbnN0IHRvUmV0dXJuID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXRPbkRCKGludEJhc2tldCwgY3JlYXRlZEJ5Qm9sdCwgY3JlYXRlZEJ5R3V0KTtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2godG9SZXR1cm4pO1xuICAgIC8vIGNvbnNvbGUubG9nKCdEYW45Jyx0aGlzLmN1cnJlbnRCYXNrZXRzKVxuXG4gICAgdGhpcy5iYXNrZXRzLm5leHQodGhpcy5jdXJyZW50QmFza2V0cyk7XG4gICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQodG9SZXR1cm4uaWQpO1xuICAgIHJldHVybiB0b1JldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQmFza2V0T25EQihcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0PEdVX1E+LFxuICAgIGNyZWF0ZWRCeUJvbHQ6IGJvb2xlYW4sXG4gICAgY3JlYXRlZEJ5R1VUOiBib29sZWFuXG4gICk6IFByb21pc2U8SW50ZXJuYWxCYXNrZXQ8R1VfUT4+IHtcbiAgICBjb25zdCBpbnZva2VkVXNlcjogc3RyaW5nIHwge30gPSB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkXG4gICAgICA/IHsgaW52b2tlZFVzZXI6IHRoaXMudXNlclNlcnZpY2UuYm9ibz8uaWQgfVxuICAgICAgOiB7fTtcblxuICAgIGNvbnN0IG11dGF0aW9uOiBDcmVhdGVCYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHsgLi4uaW52b2tlZFVzZXIsIGNyZWF0ZWRCeUJvbHQsIGNyZWF0ZWRCeUdVVCB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuYmFza2V0Q3JlYXRvclxuICAgICAgICAudXBkYXRlT25lKG11dGF0aW9uKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRpbmdOZXdCYXNrZXQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICBpbnRCYXNrZXQuaWQgPSBiYXNrZXQuaWQ7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQpO1xuICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIHRoZSBzdWJqZWN0IHRvIGxpc3RlbiBmb3IgZW1pdHRlZCB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGludEJhc2tldC5zdWJqZWN0LnN1YnNjcmliZSgodmFsdWU6IEJhc2tldERldGFpbHMpID0+IHtcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGVtaXR0ZWQgdmFsdWUgaXMgbm90IG51bGwgYW5kIGhhcyBhIHN0YXR1cyBwcm9wZXJ0eVxuICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRoZSBpbnRCYXNrZXQgb2JqZWN0XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShpbnRCYXNrZXQpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0aW5nTmV3QmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHt9XG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVNZW51KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lbnVTdGF0ZSA9PT0gTWVudVNsaWRlRW51bS5JTiB8fCB0aGlzLm1lbnVTdGF0ZSA9PT0gTWVudVNsaWRlRW51bS5GTEFUKSB7XG4gICAgICB0aGlzLm1lbnVTdGF0ZSA9IE1lbnVTbGlkZUVudW0uT1VUO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lbnVTdGF0ZSA9IE1lbnVTbGlkZUVudW0uSU47XG4gICAgfVxuICB9XG5cbiAgY2xvc2VNZW51KCk6IHZvaWQge1xuICAgIHRoaXMubWVudVN0YXRlID0gTWVudVNsaWRlRW51bS5PVVQ7XG4gIH1cblxuICBmaW5kTGF0ZXN0RmxpZ2h0SXRlbXMoYmFza2V0SXRlbXM6IEJhc2tldEl0ZW1bXSk6IEJhc2tldEl0ZW0gfCBudWxsIHtcbiAgICBsZXQgbGFzdEZsaWdodEl0ZW06IEJhc2tldEl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgc2Vjb25kTGFzdEZsaWdodEl0ZW06IEJhc2tldEl0ZW0gfCBudWxsID0gbnVsbDtcblxuICAgIChiYXNrZXRJdGVtcyB8fCBbXSkuZm9yRWFjaChiYXNrZXRJdGVtID0+IHtcbiAgICAgIGlmIChiYXNrZXRJdGVtLnNlcnZpY2UudHlwZSA9PT0gU2VydmljZVR5cGUuRmxpZ2h0KSB7XG4gICAgICAgIHNlY29uZExhc3RGbGlnaHRJdGVtID0gbGFzdEZsaWdodEl0ZW07XG4gICAgICAgIGxhc3RGbGlnaHRJdGVtID0gYmFza2V0SXRlbTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGlmIGR1YWwgc2luZ2xlIGFuZCByZXR1cm5UcmlwIHNldCBvdXRib3VuZCBkdWFsIHNpbmdsZSBmbGlnaHRcbiAgICBpZiAoXG4gICAgICBsYXN0RmxpZ2h0SXRlbSAmJlxuICAgICAgbGFzdEZsaWdodEl0ZW0uc2VhcmNoUXVlcnkucmV0dXJuVHJpcCAmJlxuICAgICAgbGFzdEZsaWdodEl0ZW0uZGV0YWlsLmpvdXJuZXlUeXBlID09PSBGbGlnaHRKb3VybmV5VHlwZS5TaW5nbGVcbiAgICApIHtcbiAgICAgIHJldHVybiBzZWNvbmRMYXN0RmxpZ2h0SXRlbSB8fCBsYXN0RmxpZ2h0SXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdEZsaWdodEl0ZW07XG4gIH1cblxuICBnZXRMYXRlc3RCYXNrZXRJdGVtRm9yVHlwZXMoYmFza2V0SXRlbXM6IEJhc2tldEl0ZW1bXSk6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4ge1xuICAgIGNvbnN0IGxhdGVzdEZsaWdodEl0ZW0gPSB0aGlzLmZpbmRMYXRlc3RGbGlnaHRJdGVtcyhiYXNrZXRJdGVtcyk7XG4gICAgcmV0dXJuIChiYXNrZXRJdGVtcyB8fCBbXSkucmVkdWNlKFxuICAgICAgKGxhdGVzdEl0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+LCBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICAgIGlmIChiYXNrZXRJdGVtLnNlcnZpY2UudHlwZSAhPT0gU2VydmljZVR5cGUuRmxpZ2h0KSB7XG4gICAgICAgICAgbGF0ZXN0SXRlbXNbYmFza2V0SXRlbS5zZXJ2aWNlLnR5cGVdID0gYmFza2V0SXRlbTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXRlc3RGbGlnaHRJdGVtKSB7XG4gICAgICAgICAgbGF0ZXN0SXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XSA9IGxhdGVzdEZsaWdodEl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhdGVzdEl0ZW1zO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0RldGFpbHMoaXRlbTogQWRkSXRlbVRvQmFza2V0LlZhcmlhYmxlcyk6IEFkZEl0ZW1Ub0Jhc2tldC5WYXJpYWJsZXMge1xuICAgIGNvbnN0IHNlcnZpY2VUb0NoZWNrOiBTZXJ2aWNlID0gdGhpcy51c2VyU2VydmljZS5maW5kU2VydmljZShpdGVtLnNlcnZpY2UpO1xuICAgIGlmICghc2VydmljZVRvQ2hlY2spIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIHNlcnZpY2UgZm9yIGJhc2tldCBpdGVtIDogJyArIGl0ZW0uc2VydmljZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aGUgaXRlbS5kZXRhaWwgb2JqZWN0IGFnYWluc3QgdGhlIHJlbGV2YW50IHNlcnZpY2UgZGV0YWlsU2NoZW1hIHVzaW5nIEFqdlxuICAgIGNvbnN0IGFqdiA9IG5ldyBBanYoKTtcbiAgICAvLyBhZGRGb3JtYXRzKGFqdik7Ly8gPC0tLS0tLS0gVEhJUyBJUyBPVVIgUFJPQkxFTVxuXG4gICAgLy8gQ3VzdG9tIEphdmFzY3JpcHQgSVNPIERhdGUgVGltZSBmb3JtYXRcbiAgICBhanYuYWRkRm9ybWF0KCdqcy1kYXRlLXRpbWUnLCAoZGF0ZVRpbWVTdHJpbmc6IGFueSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBkYXRlVGltZVN0cmluZyA9PT0gJ29iamVjdCcgJiYgZGF0ZVRpbWVTdHJpbmcuaGFzT3duUHJvcGVydHkoJ3RvSVNPU3RyaW5nJykpIHtcbiAgICAgICAgZGF0ZVRpbWVTdHJpbmcgPSBkYXRlVGltZVN0cmluZy50b0lTT1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTmFOKERhdGUucGFyc2UoZGF0ZVRpbWVTdHJpbmcpKTsgLy8gYW55IHRlc3QgdGhhdCByZXR1cm5zIHRydWUvZmFsc2VcbiAgICB9KTtcblxuICAgIGFqdi5hZGRGb3JtYXQoJ3JhaWxTZWF0aW5nJywgKCkgPT4ge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBhanYuYWRkRm9ybWF0KCdwYXNzcG9ydCcsICgpID0+IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgYWp2LmFkZEZvcm1hdCgnc3BlY2lhbFJlcXVlc3QnLCAoKSA9PiB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGFqdi5hZGRGb3JtYXQoJ2RhdGUtdGltZScsICgpID0+IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdmFsaWRhdGVEZXRhaWxTY2hlbWEgPSBhanYuY29tcGlsZShzZXJ2aWNlVG9DaGVjay5kZXRhaWxTY2hlbWEpO1xuICAgIGNvbnN0IHZhbGlkYXRlU2VhcmNoU2NoZW1hID0gYWp2LmNvbXBpbGUoc2VydmljZVRvQ2hlY2suc2VhcmNoUXVlcnlTY2hlbWEpO1xuXG4gICAgLy8gaWYgdGhlcmUgYXJlIGFueSBtb21lbnQgZGF0ZSBvYmplY3RzIGluIHRoZSBzZWFyY2hRdWVyeSBvYmplY3QgY29udmVydCB0aGVzZSB0byBkYXRlLXRpbWUgc3RyaW5nc1xuICAgIGl0ZW0uc2VhcmNoUXVlcnkgPSB0aGlzLmhlbHBlcnMuc2FuaXRpemVNb21lbnREYXRlcyhpdGVtLnNlYXJjaFF1ZXJ5KTtcbiAgICBpdGVtLmRldGFpbCA9IHRoaXMuaGVscGVycy5yZW1vdmVOdWxscyhpdGVtLmRldGFpbCk7XG5cbiAgICBpZiAoIXZhbGlkYXRlU2VhcmNoU2NoZW1hKGl0ZW0uc2VhcmNoUXVlcnkpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGBJdGVtIHNlYXJjaFF1ZXJ5IGlzIG5vdCB2YWxpZCBmb3IgJHtzZXJ2aWNlVG9DaGVjay5uYW1lfSBzZWFyY2ggc2NoZW1hLmA7XG4gICAgICBjb25zb2xlLndhcm4oJ3NlYXJjaFNjaGVtYScsIHNlcnZpY2VUb0NoZWNrLnNlYXJjaFF1ZXJ5U2NoZW1hKTtcbiAgICAgIGNvbnNvbGUud2FybignaXRlbS5zZWFyY2hRdWVyeScsIGl0ZW0uc2VhcmNoUXVlcnkpO1xuICAgICAgY29uc29sZS53YXJuKCdTZWFyY2ggUXVlcnkgVmFsaWRhdGlvbiBlcnJvcnMnLCB2YWxpZGF0ZVNlYXJjaFNjaGVtYS5lcnJvcnMpO1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0sIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXZhbGlkYXRlRGV0YWlsU2NoZW1hKGl0ZW0uZGV0YWlsKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBgSXRlbSBkZXRhaWwgaXMgbm90IHZhbGlkIGZvciAke3NlcnZpY2VUb0NoZWNrLm5hbWV9IGRldGFpbCBzY2hlbWEuYDtcbiAgICAgIGNvbnNvbGUud2FybignZGV0YWlsU2NoZW1hJywgc2VydmljZVRvQ2hlY2suZGV0YWlsU2NoZW1hKTtcbiAgICAgIGNvbnNvbGUud2FybignaXRlbS5kZXRhaWwnLCBpdGVtLmRldGFpbCk7XG4gICAgICBjb25zb2xlLndhcm4oJ0RldGFpbCBlcnJvcnMnLCB2YWxpZGF0ZURldGFpbFNjaGVtYS5lcnJvcnMpO1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0sIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGl0ZW0ubG93ZXN0UHJpY2UpIGl0ZW0ubG93ZXN0UHJpY2UgPSAraXRlbS5sb3dlc3RQcmljZS50b0ZpeGVkKDIpO1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgZ2V0TnVtYmVySXRlbXNGb3JCYXNrZXQoYmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPiA9IG51bGwpOiBudW1iZXIge1xuICAgIGJhc2tldCA9IGJhc2tldCB8fCB0aGlzLmZpbmRCYXNrZXQodGhpcy5jdXJyZW50QmFza2V0SUQpO1xuICAgIHJldHVybiBiYXNrZXQ/LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubGVuZ3RoIHx8IDA7XG4gIH1cblxuICByZW1vdmVCYXNrZXQoYmFza2V0aWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIGlmIChiYXNrZXRpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQmFza2V0VXBkYXRlci51cGRhdGVPbmUoeyBpZDogYmFza2V0aWQgfSkucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICAgIHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk/LmRlc3RydWN0b3IoKTtcbiAgICAgICAgICB0aGlzLmZpbHRlclJlbW92ZUJhc2tldEJ5SWQoYmFza2V0aWQpO1xuICAgICAgICAgIGlmIChiYXNrZXRpZCA9PT0gdGhpcy5zZWxlY3RlZEJhc2tldElkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQmFza2V0SWQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5maWx0ZXIoYmFza2V0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXMgPT09IEJhc2tldFN0YXR1cy5PcGVuO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdEYW4xMCcsdGhpcy5jdXJyZW50QmFza2V0cylcblxuICAgICAgICAgIHRoaXMuYmFza2V0cy5uZXh0KHRoaXMuY3VycmVudEJhc2tldHMpO1xuXG4gICAgICAgICAgaWYgKGJhc2tldGlkID09PSB0aGlzLmN1cnJlbnRCYXNrZXRJRCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSB0aGlzLmN1cnJlbnRCYXNrZXRzWzBdPy5pZCB8fCBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRlbGV0aW5nQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybiBvZihkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29udGludWVTZWFyY2hBbmRCb29rKFxuICAgIGJhc2tldEl0ZW1zOiBhbnlbXSxcbiAgICBpdGluaWFyeVVybDogc3RyaW5nW10sXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2VcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhdGVzdEJhc2tldEl0ZW1zID0gdGhpcy5nZXRMYXRlc3RCYXNrZXRJdGVtRm9yVHlwZXMoYmFza2V0SXRlbXMpO1xuICAgIGNvbnN0IG5leHRTZWFyY2g6IFNlYXJjaE9iamVjdCA9XG4gICAgICBzZWFyY2hTZXJ2aWNlLmdldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChsYXRlc3RCYXNrZXRJdGVtcyk7XG4gICAgY29uc3QgcGF0aCA9IHdpbmRvdz8ubG9jYXRpb24/Lmhhc2g7XG4gICAgY29uc3QgaGFzaFBhdGggPSBwYXRoPy5zcGxpdCgnIycpPy5bMV07XG4gICAgaWYgKFxuICAgICAgbmV4dFNlYXJjaCAmJlxuICAgICAgIShoYXNoUGF0aCA9PT0gbmV4dFNlYXJjaC5yZXN1bHRVcmwgJiYgbmV4dFNlYXJjaC50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbClcbiAgICApIHtcbiAgICAgIGlmIChzZWFyY2hTZXJ2aWNlLmlzQ2xvbmluZy52YWx1ZSkge1xuICAgICAgICByZXR1cm4gW25leHRTZWFyY2gucmVzdWx0VXJsXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChzZWFyY2hTZXJ2aWNlLnNlYXJjaGVzIGFzIGFueSlbbmV4dFNlYXJjaC50eXBlXS51cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcbiAgICAgICAgICBsYXRlc3RCYXNrZXRJdGVtc1xuICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV4dFNlYXJjaC50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbCAmJlxuICAgICAgICAgIHNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdPy5jaGVhcGVzdFByaWNlPy5hbW91bnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy9JZiBob3RlbHMgYXJlIG5leHQgYW5kIHRoZSBob3RlbCBzZWFyY2ggaGFzIGFscmVhZHkgYmVlbiBkb25lIGluIHRoZSBiYWNrZ3JvdW5kIGdvIHN0cmFpZ2h0IHRvIHRoZSByZXN1bHRzXG4gICAgICAgICAgcmV0dXJuIFtuZXh0U2VhcmNoLnJlc3VsdFVybF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtuZXh0U2VhcmNoLnNlYXJjaFVybF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGl0aW5pYXJ5VXJsO1xuICAgIH1cbiAgfVxuXG4gIGFkZFRyYXZlbGxlcnMoXG4gICAgYmFza2V0aWQ6IHN0cmluZyxcbiAgICBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLFxuICAgIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLFxuICAgIGluZGV4OiBudW1iZXIgPSAwXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgaWYgKGluZGV4IDwgdHJhdmVsbGVycy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRyYXZlbGxlciA9IHRyYXZlbGxlcnNbaW5kZXhdO1xuICAgICAgY29uc3QgcGFzc2VuZ2VyVHlwZTogUGFzc2VuZ2VyVHlwZSA9IHRyYXZlbGxlci5pc0NoaWxkXG4gICAgICAgID8gUGFzc2VuZ2VyVHlwZS5DaGlsZFxuICAgICAgICA6IHRyYXZlbGxlci5pc0luZmFudFxuICAgICAgICA/IFBhc3NlbmdlclR5cGUuSW5mYW50XG4gICAgICAgIDogUGFzc2VuZ2VyVHlwZS5BZHVsdDtcblxuICAgICAgaWYgKHRyYXZlbGxlci5ndWVzdCkge1xuICAgICAgICB0aGlzLmFkZEd1ZXN0VG9CYXNrZXRJdGVtXG4gICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgICAgICAgZ3Vlc3RzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogdHJhdmVsbGVyLmlkLFxuICAgICAgICAgICAgICAgIHBhc3NlbmdlclR5cGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZFRyYXZlbGxlcnMoYmFza2V0LmlkLCBiYXNrZXRJdGVtLCB0cmF2ZWxsZXJzLCBpbmRleCArIDEpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hZGRVc2VyVG9CYXNrZXRJdGVtXG4gICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgICAgICAgdXNlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiB0cmF2ZWxsZXIuaWQsXG4gICAgICAgICAgICAgICAgcGFzc2VuZ2VyVHlwZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgd2l0aFN1cHBsZW1lbnRhbDogZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRUcmF2ZWxsZXJzKGJhc2tldC5pZCwgYmFza2V0SXRlbSwgdHJhdmVsbGVycywgaW5kZXggKyAxKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNrZXRGZXRjaGVyXG4gICAgICAgIC5mZXRjaE9uZSh7IGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSwgaWQ6IGJhc2tldC5pZCB9KVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChiYXNrZXQxOiBHZXRVc2VyQmFza2V0UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBiYXNrZXQuc3ViamVjdC5uZXh0KHsgLi4uYmFza2V0LnN1YmplY3QudmFsdWUsIC4uLmJhc2tldDEgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBfID0+IHt9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIGJhc2tldC5uZXh0KGJhc2tldC5zdWJqZWN0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2V0TGVhZFBhc3NlbmdlcihcbiAgICBiYXNrZXRpZDogc3RyaW5nLFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgdHJhdmVsbGVyczogVHJhdmVsbGVyLFxuICAgIGluZGV4OiBudW1iZXIgPSAwLFxuICAgIGxlYWRQYXNzZW5nZXJUeXBlOiBMZWFkUGFzc2VuZ2VyVHlwZSA9IExlYWRQYXNzZW5nZXJUeXBlLlVzZXJcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgYmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGJhc2tldGlkKTtcbiAgICBpZiAoaW5kZXggPCAxKSB7XG4gICAgICB0aGlzLlNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIHVzZXJPckd1ZXN0OiB0cmF2ZWxsZXJzLmlkLFxuICAgICAgICB3aXRoU3VwcGxlbWVudGFsOiBmYWxzZSxcbiAgICAgICAgbGVhZFBhc3NlbmdlclR5cGU6IGxlYWRQYXNzZW5nZXJUeXBlXG4gICAgICB9KS5zdWJzY3JpYmUoXG4gICAgICAgICgpID0+IHt9LFxuICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0TGVhZFBhc3NlbmdlcihiYXNrZXQuaWQsIGJhc2tldEl0ZW0sIHRyYXZlbGxlcnMsIGluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmFza2V0RmV0Y2hlclxuICAgICAgICAuZmV0Y2hPbmUoeyBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksIGlkOiBiYXNrZXQuaWQgfSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYmFza2V0MTogR2V0VXNlckJhc2tldFJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgYmFza2V0LnN1YmplY3QubmV4dCh7IC4uLmJhc2tldC5zdWJqZWN0LnZhbHVlLCAuLi5iYXNrZXQxIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXyA9PiB7fSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBiYXNrZXQubmV4dChiYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUJhc2tldChiYXNrZXRpZDogc3RyaW5nLCBvYnM6IE9ic2VydmFibGU8QmFza2V0RGV0YWlscz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnVwZGF0aW5nQmFza2V0ID0gdHJ1ZTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb2JzLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxuICAgICAgICAoYmFza2V0OiBCYXNrZXREZXRhaWxzKSA9PiB7XG4gICAgICAgICAgLy8gRU5ULTc4MjcgYWRkZWQgdGhpcyB0aW1lb3V0IGFzIHdlIHdlcmUgdHJ5aW5nIHRvIGdyYWIgdGhlIGN1cnJlbnQgYmFza2V0cyBzb21ldGltZXMgYW5kIHdlIHdlcmUgc3RpbGwgd2FpdGluZyBmb3IgYW4gdXBkYXRlLCB0YmggaSB3b3VsZCBoYXZlIHJhdGhlciBmb3VuZCB3aGljaCBjYWxsIHdhcyBjYXVzaW5nIHRoZSBkZWxheVxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGluZ0Jhc2tldCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jdXJyZW50QmFza2V0cywgdGhpcy5jdXJyZW50QmFza2V0SUQsIGJhc2tldGlkKTtcbiAgICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgICAvLyBwYXNzaW5nIGFnZW50IGZvciBtaSBjaGVja1xuICAgICAgICAgICAgaW50QmFza2V0Py5uZXh0KGJhc2tldCwgdGhpcy5pc1VzZXJBZ2VudCgpKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRpbmdCYXNrZXQgPSBmYWxzZTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0aWQpO1xuICAgICAgICAgIGludEJhc2tldC5uZXh0KGludEJhc2tldC5zdWJqZWN0LnZhbHVlKTtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGluZ0Jhc2tldCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmV2YWxpZGF0ZShiYXNrZXRpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRpZCxcbiAgICAgIHRoaXMucmV2YWxpZGF0ZUJhc2tldFVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBpZDogYmFza2V0aWQsXG4gICAgICAgIHdpdGhTdXBwbGVtZW50YWw6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIubmV4dChiYXNrZXRpZCk7XG4gIH1cblxuICAvLyB2YWxpZGF0ZUZyZWVWYWxlTWkobWlJdGVtOiBNYW5hZ2VtZW50SW5mbywgZnJlZVZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAvLyAgICAgdGhpcy52YWxpZGF0ZU1pRnJlZVZhbHVlLnRlc3QoeyBtaTogbWlJdGVtLmlkLCBmcmVlVmFsdWUgfSkuc3Vic2NyaWJlKHJlc29sdmUsIHJlamVjdCk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICBhY2NlcHROZXdQcmljZShiYXNrZXRpZDogc3RyaW5nLCBpdGVtOiBCYXNrZXRJdGVtKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRpZCxcbiAgICAgIHRoaXMuYWNjZXB0TmV3UHJpY2VVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGl0ZW0uaWRcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHZhbGlkYXRlTWlCYXNrZXRJdGVtKGJhc2tldEl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0ge1xuICAgICAgICBiYXNrZXRJdGVtSWRcbiAgICAgIH07XG4gICAgICB0aGlzLnZhbGlkYXRlQmFza2V0SXRlbU1pRmV0Y2hlci5mZXRjaE9uZShxdWVyeSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBhc3luYyB2YWxpZGF0ZU1pQmFza2V0KGJhc2tldElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gICBjb25zdCBxdWVyeSA9IHsgYmFza2V0SWQgfTtcbiAgLy8gICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy52YWxpZGF0ZUJhc2tldE1pRmV0Y2hlci5mZXRjaE9uZShxdWVyeSkpLnRoZW4oZGF0YSA9PiB7XG4gIC8vICAgICB0aGlzLm1pVmlld2VkID0gdHJ1ZTtcbiAgLy8gICAgIHRoaXMubWlzc2luZ01JcyA9IGRhdGE7XG4gIC8vICAgfSk7XG4gIC8vIH1cbiAgXG4gIGFzeW5jIHZhbGlkYXRlTWlCYXNrZXQoYmFza2V0SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0ge1xuICAgICAgYmFza2V0SWRcbiAgICB9O1xuICAgIHRoaXMudmFsaWRhdGVCYXNrZXRNaUZldGNoZXIuZmV0Y2hPbmUocXVlcnkpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIHRoaXMubWlWaWV3ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5taXNzaW5nTUlzID0gZGF0YTtcbiAgICB9KTtcbiAgfVxuIFxuICBnZXRNaUF1dG9TdWdlc3Rpb25zKFxuICAgIG1pSWQ6IHN0cmluZyxcbiAgICB0ZXJtOiBzdHJpbmcsXG4gICAgaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXG4gICAgc2VydmljZUlkPzogc3RyaW5nLFxuICAgIG1pVmFsdWVHcm91cElkPzogc3RyaW5nLFxuICAgIHRyaWdnZXJNSVZhbHVlSWQ/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxNYW5hZ2VtZW50SW5mb1ZhbHVlW10+IHtcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCBnZXRNaUF1dG9CeVZhbHVlOiBPYnNlcnZhYmxlPE1hbmFnZW1lbnRJbmZvVmFsdWVbXT4gPVxuICAgICAgdGhpcy5zZWFyY2hNSUF1dG9TdWdnZXN0VmFsdWVzRmV0Y2hlci5mZXRjaE9uZSh7XG4gICAgICAgIG1hbmFnZW1lbnRJbmZvSWQ6IG1pSWQsXG4gICAgICAgIHF1ZXJ5OiB0ZXJtLFxuICAgICAgICBtYW5hZ2VtZW50SW5mb1ZhbHVlR3JvdXBJZDogbWlWYWx1ZUdyb3VwSWQsXG4gICAgICAgIHRyaWdnZXJNSVZhbHVlSWRcbiAgICAgIH0pO1xuICAgIGNvbnN0IGdldE1pQXV0b0J5TGFiZWw6IE9ic2VydmFibGU8TWFuYWdlbWVudEluZm9WYWx1ZVtdPiA9XG4gICAgICB0aGlzLnNlYXJjaE1JQXV0b1N1Z2dlc3RWYWx1ZXNGZXRjaGVyLmZldGNoT25lKHtcbiAgICAgICAgbWFuYWdlbWVudEluZm9JZDogbWlJZCxcbiAgICAgICAgcXVlcnk6IHRlcm0sXG4gICAgICAgIG1hbmFnZW1lbnRJbmZvVmFsdWVHcm91cElkOiBtaVZhbHVlR3JvdXBJZCxcbiAgICAgICAgdHJpZ2dlck1JVmFsdWVJZFxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gZm9ya0pvaW4oW2dldE1pQXV0b0J5VmFsdWUsIGdldE1pQXV0b0J5TGFiZWxdKS5waXBlKFxuICAgICAgbWFwKChbbWlCeVZhbHVlLCBtaUJ5TGFiZWxdKSA9PiB7XG4gICAgICAgIGxldCBtaUJ5VmFsdWVMYWJlbCA9IFsuLi5taUJ5VmFsdWUsIC4uLm1pQnlMYWJlbF07XG4gICAgICAgIG1pQnlWYWx1ZUxhYmVsID0gbWlCeVZhbHVlTGFiZWwuZmlsdGVyKFxuICAgICAgICAgIChtaUl0ZW0sIGluZGV4KSA9PiBtaUJ5VmFsdWVMYWJlbC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09IG1pSXRlbS5pZCkgPT09IGluZGV4XG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKG1pQnlWYWx1ZUxhYmVsKTtcblxuICAgICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xuICAgICAgICByZXR1cm4gbWlCeVZhbHVlTGFiZWw7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBmb3JtYXRTYXZlZE1pKG1pOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSk6IFNldE1pVmFsdWVJbnB1dFtdIHtcbiAgICByZXR1cm4gbWkucmVkdWNlKChhY2MsIGl0ZW06IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZCkgPT4ge1xuICAgICAgaWYgKGl0ZW0uc2VsZWN0ZWRWYWx1ZSAmJiBpdGVtLnZhbHVlRWRpdGFibGUgJiYgKGl0ZW0ucmVxdWlyZWQgfHwgaXRlbS5jb25kaXRpb25hbCkpIHtcbiAgICAgICAgLy8gaWYgKGl0ZW0uc2VsZWN0ZWRWYWx1ZS5mcmVlVmFsdWUpIHtcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIG1pSWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgbWlWYWx1ZUlkOlxuICAgICAgICAgICAgaXRlbS51aVByZXNlbnRhdGlvbiAhPT0gJ0xPT0tVUCcgPyBpdGVtLnNlbGVjdGVkVmFsdWUubWFuYWdlbWVudEluZm9WYWx1ZT8uaWQgOiAnJyxcbiAgICAgICAgICBtaUZyZWVWYWx1ZTpcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWRWYWx1ZS5mcmVlVmFsdWUgfHwgaXRlbS5zZWxlY3RlZFZhbHVlLm1hbmFnZW1lbnRJbmZvVmFsdWU/LnZhbHVlLFxuICAgICAgICAgIG51bGxpZnlTZWxlY3RlZFZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSBhcyBTZXRNaVZhbHVlSW5wdXRbXSk7XG4gIH1cblxuICBmaWx0ZXJQcmVTZWxlY3RlZE1JKFxuICAgIGl0ZW1MaXN0OiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSxcbiAgICB2YWx1ZTogQmFza2V0SW5mb01pRGV0YWlsc0ltcGxcbiAgKTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10ge1xuICAgIHJldHVybiBpdGVtTGlzdC5maWx0ZXIoKGxpc3RJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nTUkgPSB2YWx1ZS5iYXNrZXRJdGVtLm1hbmFnZW1lbnRJbmZvLmZpbmQoXG4gICAgICAgIChtaTogQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvKSA9PiBtaS5tYW5hZ2VtZW50SW5mby5pZCA9PT0gbGlzdEl0ZW0uaWRcbiAgICAgICk7XG4gICAgICBpZiAoIW1hdGNoaW5nTUkuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtYXRjaGluZ01JLnNlbGVjdGVkVmFsdWU/LmZyZWVWYWx1ZSAhPT0gbGlzdEl0ZW0uc2VsZWN0ZWRWYWx1ZT8uZnJlZVZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZU1pRGF0YShcbiAgICBiYXNrZXRJZDogc3RyaW5nLFxuICAgIHJlc3VsdHM6IHsgYmFza2V0SW5mb01pRGV0YWlsczogQmFza2V0SW5mb01pRGV0YWlsc0ltcGxbXTsgY29weUluZm86IENvcHlJbmZvSW5wdXRbXSB9XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJhc2tldEl0ZW1NSSA9IHJlc3VsdHMuYmFza2V0SW5mb01pRGV0YWlscztcbiAgICBjb25zdCBxdWVyeTogU2V0TWlWYWx1ZXNNdXRhdGlvblZhcmlhYmxlcyA9IHtcbiAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiBiYXNrZXRJdGVtTUlbMF0uYmFza2V0SXRlbS5jb252ZXJ0ZWRDdXJyZW5jeUNvZGUsXG4gICAgICBiYXNrZXRJdGVtTUlWYWx1ZXM6IFtdLFxuICAgICAgY29weUluZm86IHJlc3VsdHMuY29weUluZm9cbiAgICB9O1xuICAgIGNvbnN0IHBlckl0ZW1NaTogU2V0TWlWYWx1ZUlucHV0W10gPSBbXTtcbiAgICBjb25zdCBwZXJVc2VyTWk6IFNldE1pVmFsdWVJbnB1dFtdID0gW107XG4gICAgY29uc3QgcGVyR3Vlc3RNaTogU2V0TWlWYWx1ZUlucHV0W10gPSBbXTtcblxuICAgIGJhc2tldEl0ZW1NSS5mb3JFYWNoKCh2YWx1ZTogQmFza2V0SW5mb01pRGV0YWlsc0ltcGwpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkTGlzdEl0ZW0gPSB0aGlzLmZpbHRlclByZVNlbGVjdGVkTUkoXG4gICAgICAgIHZhbHVlLm1pUGVySXRlbSBhcyBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXSxcbiAgICAgICAgdmFsdWVcbiAgICAgICk7XG4gICAgICBwZXJJdGVtTWkucHVzaCguLi50aGlzLmZvcm1hdFNhdmVkTWkoZmlsdGVyZWRMaXN0SXRlbSkpO1xuXG4gICAgICBPYmplY3QudmFsdWVzKHZhbHVlLm1pUGVyVXNlcikuZm9yRWFjaCh1c2VyTUlMaXN0ID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRMaXN0ID0gdGhpcy5maWx0ZXJQcmVTZWxlY3RlZE1JKFxuICAgICAgICAgIHVzZXJNSUxpc3QubWFuYWdlbWVudEluZm8gYXMgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW10sXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgcGVyVXNlck1pLnB1c2goLi4udGhpcy5mb3JtYXRTYXZlZE1pKGZpbHRlcmVkTGlzdCkpO1xuICAgICAgfSk7XG5cbiAgICAgIE9iamVjdC52YWx1ZXModmFsdWUubWlQZXJHdWVzdCkuZm9yRWFjaChcbiAgICAgICAgKHVzZXJNSUxpc3Q6IHsgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZExpc3QgPSB0aGlzLmZpbHRlclByZVNlbGVjdGVkTUkoXG4gICAgICAgICAgICB1c2VyTUlMaXN0Lm1hbmFnZW1lbnRJbmZvIGFzIE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHBlckd1ZXN0TWkucHVzaCguLi50aGlzLmZvcm1hdFNhdmVkTWkoZmlsdGVyZWRMaXN0KSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gICAgcXVlcnkuYmFza2V0SXRlbU1JVmFsdWVzID0gWy4uLnBlckl0ZW1NaSwgLi4ucGVyVXNlck1pLCAuLi5wZXJHdWVzdE1pXTtcbiAgICBpZiAocXVlcnkuYmFza2V0SXRlbU1JVmFsdWVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZXRCYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlKGJhc2tldElkLCBxdWVyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRJZCk7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlTWlCYXNrZXQodGhpcy5jdXJyZW50QmFza2V0SUQpO1xuICAgICAgaW50QmFza2V0Lm5leHQoaW50QmFza2V0LnN1YmplY3QudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHNldEJhc2tldEl0ZW1NdWx0aXBsZU1JVmFsdWUoXG4gICAgYmFza2V0SWQ6IHN0cmluZyxcbiAgICBiYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlOiBTZXRNaVZhbHVlc011dGF0aW9uVmFyaWFibGVzXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KHRydWUpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0SWQpO1xuICAgICAgdGhpcy5zZXRNSVZhbHVlc1VwZGF0ZXJcbiAgICAgICAgLnVwZGF0ZU9uZShiYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiBhc3luYyAoYmFza2V0OiBCYXNrZXQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVNaUJhc2tldChiYXNrZXQuaWQpO1xuICAgICAgICAgICAgaW50QmFza2V0Lm5leHQoYmFza2V0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLm1pVXBkYXRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0TWlWYWx1ZXMoXG4gICAgaXNSZWFzc2lnbjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGJhc2tldEl0ZW1NSVZhbHVlczogU2V0TWlWYWx1ZUlucHV0IHwgU2V0TWlWYWx1ZUlucHV0W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcXVlcnkgPSB7XG4gICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICBiYXNrZXRJdGVtTUlWYWx1ZXMsXG4gICAgICB3aXRoU3VwcGxlbWVudGFsOiBpc1JlYXNzaWduXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElEKTtcbiAgICAgIHRoaXMuc2V0TUlWYWx1ZXNVcGRhdGVyXG4gICAgICAgIC51cGRhdGVPbmUocXVlcnkpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGJhc2tldDogQmFza2V0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1pVXBkYXRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5taVVwZGF0aW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWlVcGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRCYXNrZXRJdGVtUGF5bWVudE9wdGlvbihcbiAgICBiYXNrZXQ6IEJhc2tldERldGFpbHMsXG4gICAgYmFza2V0SXRlbTogQmFza2V0SXRlbSxcbiAgICBwYXltZW50TWV0aG9kOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0LmlkLFxuICAgICAgdGhpcy5zZXRQYXltZW50TWV0aG9kVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIHBheW1lbnRNZXRob2RcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBzZXRCYXNrZXRJdGVtUGF5bWVudE9wdGlvbk5vVXBkYXRlKFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgcGF5bWVudE1ldGhvZDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QmFza2V0RGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLnNldFBheW1lbnRNZXRob2RVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgcGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICB9XG4gIGJvb2tCYXNrZXQoXG4gICAgYmFza2V0aWQ6IHN0cmluZyxcbiAgICBzdXBwbGVtZW50YXJ5SW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvW10sXG4gICAgYWRkaXRpb25hbEVtYWlsOiBzdHJpbmdbXSxcbiAgICBhcHByb3Zlck5vdGVzPzogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNBcHByb3ZlZEJhc2tldCA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmJvb2tCYXNrZXRVcGRhdGVyXG4gICAgICAudXBkYXRlT25lKHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBpZDogYmFza2V0aWQsXG4gICAgICAgIHN1cHBsZW1lbnRhcnlJbmZvLFxuICAgICAgICBhZGRpdGlvbmFsRW1haWwsXG4gICAgICAgIGFwcHJvdmVyTm90ZXNcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihcbiAgICAgICAgKGJhc2tldDogQmFza2V0RGV0YWlscykgPT4ge1xuICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgYmFza2V0LmJhc2tldEl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5ib29raW5nRGV0YWlsPy5zdXBwbGllclJlc3A/LmJvb2s/LmRldGFpbHM/LnNlYXRTZWxlY3Rpb25Cb29rZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBXZSBoYXZlIGEgc2VhdCBzZWxlY3Rpb24gZXJyb3IgLSB0aHJvdyB1cCBhIHdhcm5pbmcgbW9kYWwgKysrYCk7XG4gICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5SYWlsU2VhdEF1dG9XYXJuaW5nTW9kYWxDb21wb25lbnQpO1xuICAgICAgICAgICAgICB0aGlzLmNsZWFyUmFpbFNlYXRzLm5leHQoaXRlbS5pZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgaW50QmFza2V0LnN1YmplY3QudmFsdWUuc3RhdHVzID0gYmFza2V0LnN0YXR1cztcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXRJdGVtcyA9IGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFza2V0LmJhc2tldEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUJhc2tldEl0ZW1zID0gYmFza2V0LmJhc2tldEl0ZW1zW2ldO1xuICAgICAgICAgICAgY29uc3QgaW50QmFza2V0SXRlbSA9IGludEJhc2tldEl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSByZXNwb25zZUJhc2tldEl0ZW1zLmlkKTtcblxuICAgICAgICAgICAgaWYgKGludEJhc2tldEl0ZW0pIHtcbiAgICAgICAgICAgICAgaW50QmFza2V0SXRlbS5zdGF0dXMgPSBiYXNrZXQuYmFza2V0SXRlbXNbaV0uc3RhdHVzO1xuICAgICAgICAgICAgICBpbnRCYXNrZXRJdGVtLmJvb2tpbmdUaGlyZFBhcnR5UmVmZXJlbmNlID1cbiAgICAgICAgICAgICAgICBiYXNrZXQuYmFza2V0SXRlbXNbaV0uYm9va2luZ1RoaXJkUGFydHlSZWZlcmVuY2U7XG4gICAgICAgICAgICAgIGludEJhc2tldEl0ZW0ucG5yTG9jYXRvciA9IGJhc2tldC5iYXNrZXRJdGVtc1tpXS5wbnJMb2NhdG9yO1xuICAgICAgICAgICAgICBpbnRCYXNrZXRJdGVtLmJvb2tpbmdEZXRhaWwgPVxuICAgICAgICAgICAgICAgIGJhc2tldC5iYXNrZXRJdGVtc1tpXT8uYm9va2luZ0RldGFpbCB8fCBpbnRCYXNrZXRJdGVtLmJvb2tpbmdEZXRhaWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGArKysgVW5hYmxlIHRvIGZpbmQgYmFza2V0IGl0ZW0gd2l0aCBpZDogJHtyZXNwb25zZUJhc2tldEl0ZW1zLmlkfSArKytgXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSAnJztcbiAgICAgICAgICBpbnRCYXNrZXQubmV4dChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgY29uc3QgYmFza2V0VXBkYXRlID0gYXdhaXQgdGhpcy5nZXRCYXNrZXQoe1xuICAgICAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICAgICAgaWQ6IGJhc2tldGlkLFxuICAgICAgICAgICAgd2l0aFN1cHBsZW1lbnRhbDogdHJ1ZVxuICAgICAgICAgIH0pLnRvUHJvbWlzZSgpO1xuICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgaW50QmFza2V0Lm5leHQoYmFza2V0VXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIG1vdmVCYXNrZXRJdGVtKG9yaWdpbmFsQmFza2V0SWQ6IHN0cmluZywgYmFza2V0SXRlbTogQmFza2V0SXRlbSwgYmFza2V0SWRUb01vdmVUbzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tb3ZlSXRlbVRvQURpZmZlcmVudEJhc2tldFxuICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZCxcbiAgICAgICAgbmV3QmFza2V0OiBiYXNrZXRJZFRvTW92ZVRvXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZEJhc2tldChvcmlnaW5hbEJhc2tldElkKTtcbiAgICAgICAgdGhpcy5sb2FkQmFza2V0KGJhc2tldElkVG9Nb3ZlVG8pO1xuICAgICAgfSk7XG4gIH1cblxuICB1cGRhdGVCYXNrZXROb3RlcyhiYXNrZXRJZDogc3RyaW5nLCBub3Rlczogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRJZCxcbiAgICAgIHRoaXMudXBkYXRlQmFza2V0Tm90ZXNVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGJhc2tldElkLFxuICAgICAgICBub3Rlc1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlQmFza2V0VGl0bGUoYmFza2V0SWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0SWQsXG4gICAgICB0aGlzLnVwZGF0ZUJhc2tldFRpdGxlVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGlkOiBiYXNrZXRJZCxcbiAgICAgICAgbmV3VGl0bGU6IHRpdGxlXG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgZ2V0QmFza2V0KHF1ZXJ5OiB7XG4gICAgY29udmVydEN1cnJlbmN5VG86IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHdpdGhTdXBwbGVtZW50YWw6IGJvb2xlYW47XG4gIH0pOiBPYnNlcnZhYmxlPEdldFVzZXJCYXNrZXRSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNrZXRGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KTtcbiAgfVxuXG4gIGdldEJhc2tldENvMkluZm8ocXVlcnk6IHtcbiAgICBjb252ZXJ0Q3VycmVuY3lUbzogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgd2l0aFN1cHBsZW1lbnRhbDogYm9vbGVhbjtcbiAgfSk6IE9ic2VydmFibGU8R2V0VXNlckJhc2tldFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmJhc2tldENvMkZldGNoZXIuZmV0Y2hPbmUocXVlcnkpO1xuICB9XG5cbiAgYWRkQmFza2V0SXRlbU1hcmt1cChcbiAgICBiYXNrZXRJdGVtSWQ6IHN0cmluZyxcbiAgICBhbW91bnQ6IG51bWJlcixcbiAgICBhZ2VudElkOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXREZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQmFza2V0SXRlbU1hcmt1cFVwZGF0ZXJcbiAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtSWQsXG4gICAgICAgIG1hcmt1cDogJycsXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgYWdlbnQ6IGFnZW50SWQsXG4gICAgICAgIHRpdGxlOiAnQWdlbnQgTWFya3VwJ1xuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoYmFza2V0ID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0LmlkKTtcbiAgICAgICAgICBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5iYXNrZXRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgbWFya3VwSW5mbyA9IGJhc2tldC5iYXNrZXRJdGVtcy5maW5kKG1hcmtVcEl0ZW0gPT4gbWFya1VwSXRlbS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgICBpdGVtLnByaWNlID0gbWFya3VwSW5mby5wcmljZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpbnRCYXNrZXQubmV4dChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZSwgdGhpcy5pc1VzZXJBZ2VudCgpKTtcblxuICAgICAgICAgIHJldHVybiBiYXNrZXQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgYXRMZWFzdE9uZVNlYXJjaENob3NlbigpOiBib29sZWFuIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGFueSBpdGVtIG9uIGFueSBiYXNrZXQgd2Ugc2hvdyBiYXNrZXRzIGluIHNlYXJjaCBzY3JlZW5cbiAgICByZXR1cm4gISF0aGlzLmN1cnJlbnRCYXNrZXRzLmZpbHRlcihiYXNrZXQgPT4gYmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubGVuZ3RoKS5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0QmFza2V0U3RhdHMoaW5kZXg6IG51bWJlcik6IEJlaGF2aW9yU3ViamVjdDxCYXNrZXRQcmljZXM+IHtcbiAgICBjb25zdCBiYXNrZXRQcmljZXNPYmogPSB0aGlzLmJhc2tldHMudmFsdWVbaW5kZXhdPy5zdWJqZWN0Py52YWx1ZT8ucHJpY2VzIHx8IHt9O1xuICAgIGNvbnN0IGJhc2tldFByaWNlc0tleSA9IE9iamVjdC5rZXlzKGJhc2tldFByaWNlc09iailbMF07XG4gICAgaWYgKGJhc2tldFByaWNlc0tleSkge1xuICAgICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUuY3VycmVuY3kgPSBiYXNrZXRQcmljZXNLZXk7XG4gICAgICB0aGlzLmJhc2tldFByaWNlcy52YWx1ZS50b3RhbCA9XG4gICAgICAgIHRoaXMuYmFza2V0cy52YWx1ZVtpbmRleF0uc3ViamVjdC52YWx1ZS5wcmljZXNbYmFza2V0UHJpY2VzS2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUudG90YWwgPSAwO1xuICAgIH1cblxuICAgIHRoaXMuYmFza2V0UHJpY2VzLnZhbHVlLmxpc3QuZm9yRWFjaChrZXlzID0+IHtcbiAgICAgIGtleXMucHJpY2UgPSB0aGlzLmJhc2tldHMudmFsdWVbaW5kZXhdPy5zdWJqZWN0Py52YWx1ZT8uYmFza2V0SXRlbXNcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VydmljZS50eXBlID09PSBrZXlzLnR5cGUpXG4gICAgICAgIC5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudC5wcmljZSwgMCk7XG4gICAgICBrZXlzLmNvMiA9IHRoaXMuYmFza2V0cy52YWx1ZVtpbmRleF0/LnN1YmplY3Q/LnZhbHVlPy5iYXNrZXRJdGVtc1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZXJ2aWNlLnR5cGUgPT09IGtleXMudHlwZSlcbiAgICAgICAgLnJlZHVjZSgoc3VtLCBjdXJyZW50KSA9PiBzdW0gKyBjdXJyZW50LmNvMlBlckl0ZW0sIDApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUudG90YWxDbzIgPSB0aGlzLmJhc2tldFByaWNlcy52YWx1ZS5saXN0LnJlZHVjZShcbiAgICAgIChzdW0sIGN1cnJlbnQpID0+IHN1bSArIGN1cnJlbnQuY28yLFxuICAgICAgMFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuYmFza2V0UHJpY2VzO1xuICB9XG5cbiAgY2FuQ2FuY2VsKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiBPYnNlcnZhYmxlPEJlZm9yZUNhbmNlbGxhdGlvbkluZm8+IHtcbiAgICAvLyBOb3QgY2FuY2VsbGFibGUgaWYgdGhlIG91dGJvdW5kIGRhdGUgcGFzc2VkIGZvciBhbGwgaXRlbSB0eXBlcyBvdGhlciB0aGFuIGhvdGVsLCBmb3IgaG90ZWwgaWYgaXQgaXMgdGhlIHNhbWUgZGF5IHRoZW4gd2UgbmVlZCB0byBjaGVjayBCRVxuICAgIGlmIChcbiAgICAgIChtb21lbnQoYmFza2V0SXRlbS5vdXRib3VuZERhdGUpLmRpZmYobW9tZW50KG5ldyBEYXRlKCkpLCAnbWludXRlcycpIDw9IDAgJiZcbiAgICAgICAgYmFza2V0SXRlbS5zZXJ2aWNlLnR5cGUgIT09IFNlcnZpY2VUeXBlLkhvdGVsKSB8fFxuICAgICAgKGJhc2tldEl0ZW0uc2VydmljZS50eXBlID09PSBTZXJ2aWNlVHlwZS5Ib3RlbCAmJlxuICAgICAgICBtb21lbnQoYmFza2V0SXRlbS5vdXRib3VuZERhdGUpLmRpZmYobW9tZW50KG5ldyBEYXRlKCkpLCAnbWludXRlcycpIDw9IDAgJiZcbiAgICAgICAgIW1vbWVudChiYXNrZXRJdGVtLm91dGJvdW5kRGF0ZSkuaXNTYW1lKG1vbWVudChuZXcgRGF0ZSgpKSwgJ2RhdGUnKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBvZih7XG4gICAgICAgIGNhbmNlbGxhYmxlOiBmYWxzZSxcbiAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiAwLFxuICAgICAgICBpbmZvOiAnT3V0Ym91bmQgZGF0ZXRpbWUgcGFzc2VkLidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGJhc2tldEl0ZW0uc3RhdHVzID09PSBCYXNrZXRJdGVtU3RhdHVzLkJvb2tlZCB8fFxuICAgICAgYmFza2V0SXRlbS5zdGF0dXMgPT09IEJhc2tldEl0ZW1TdGF0dXMuUGFydGlhbGx5Q2FuY2VsbGVkXG4gICAgKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDYW5jZWxsZWRJbmZvID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGNhbkJlQ2FuY2VsbGVkID0gdGhpcy5nZXRDYW5jZWxsYXRpb25JbmZvRmV0Y2hlci5mZXRjaE9uZSh7XG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWRcbiAgICAgIH0pO1xuICAgICAgY2FuQmVDYW5jZWxsZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nQ2FuY2VsbGVkSW5mbyA9IGZhbHNlO1xuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ0NhbmNlbGxlZEluZm8gPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgfSApO1xuICAgICAgcmV0dXJuIGNhbkJlQ2FuY2VsbGVkO1xuICAgIH1cblxuICAgIHJldHVybiBvZih7XG4gICAgICBjYW5jZWxsYWJsZTogZmFsc2UsXG4gICAgICBjYW5jZWxsYXRpb25GZWU6IDAsXG4gICAgICBpbmZvOiBcIkl0ZW0gaXNuJ3QgYm9va2VkXCJcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUJvb2tlZEJhc2tldCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5yZWR1Y2UoKGFjYywgYmFza2V0KSA9PiB7XG4gICAgICBpZiAoYmFza2V0LnN1YmplY3QudmFsdWUuc3RhdHVzICE9PSBCYXNrZXRTdGF0dXMuQm9va2VkKSB7XG4gICAgICAgIGFjYy5wdXNoKGJhc2tldCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICAvLyBjb25zb2xlLmxvZygnRGFuMTEnLHRoaXMuY3VycmVudEJhc2tldHMpXG5cbiAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgfVxuXG4gIHNob3dFcnJvck1vZGFsKCkge1xuICAgIGNvbnN0IG9mZmljZSA9IHRoaXMudXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLmFsbERldGFpbHMudmFsdWUub2ZmaWNlO1xuICAgIGNvbnN0IGVtYWlsID0gb2ZmaWNlPy5zdXBwb3J0RW1haWwgfHwgJyc7XG4gICAgY29uc3QgY291bnRyeUNvZGUgPSBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8uY291bnRyeUNvZGVcbiAgICAgID8gJysnICsgb2ZmaWNlPy5zdXBwb3J0UGhvbmVOdW1iZXI/LmNvdW50cnlDb2RlXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IG51bWJlciA9IG9mZmljZT8uc3VwcG9ydFBob25lTnVtYmVyPy5udW1iZXIgPyBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8ubnVtYmVyIDogJyc7XG4gICAgY29uc3QgYXJlYUNvZGUgPSBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8uYXJlYUNvZGVcbiAgICAgID8gb2ZmaWNlPy5zdXBwb3J0UGhvbmVOdW1iZXI/LmFyZWFDb2RlXG4gICAgICA6ICcnO1xuXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuTW9kYWxFcnJvckNvbXBvbmVudCxcbiAgICAgIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICB7XG4gICAgICAgIGVycm9yOlxuICAgICAgICAgICdUaGVyZSBhcmUgbWlzc2luZyB2YWx1ZXMgaW4gdGhlIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gc2VjdGlvbiB3aXRoaW4geW91ciBjb25maWd1cmF0aW9uLicsXG4gICAgICAgIG1pRXJyb3I6IHRydWUsXG4gICAgICAgIGVtYWlsLFxuICAgICAgICBudW1iZXI6IGAke2NvdW50cnlDb2RlfSAke2FyZWFDb2RlfSAke251bWJlcn1gXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNob3dFcnJvck1vZGFsQXBwcm92ZXJzKCkge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICBNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsXG4gICAgICB7IGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAge1xuICAgICAgICBlcnJvcjpcbiAgICAgICAgICAnWW91IGNhbm5vdCBjb250aW51ZSBhcyB5b3VyIHByb2ZpbGUgaXMgY29uZmlndXJlZCB0byBnbyBmb3IgYXBwcm92YWwgYnV0IHlvdSBoYXZlIG5vIGFwcHJvdmVycyBhc3NpZ25lZC4nXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVCYXNrZXRTY3JhdGNocGFkTm90ZShiYXNrZXRJZDogc3RyaW5nLCBub3RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEJhc2tldE5vdGU+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCYXNrZXROb3RlLnVwZGF0ZU9uZSh7IGJhc2tldElkLCBub3RlIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEJhc2tldFNjcmF0Y2hwYWROb3RlcyhiYXNrZXRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXROb3RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNrZXROb3Rlcy5mZXRjaExpc3QoeyBiYXNrZXRJZCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZW1hcmtzKHNlcnZpY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIHJldHVybiBvZihNaUNvbW1hbmQpO1xuICB9XG5cbiAgcHVibGljIGdldEJhc2tldEl0ZW1SZW1hcmtzKGJhc2tldEl0ZW1JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrcy5mZXRjaExpc3QoeyBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtSWQgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkQmFza2V0SXRlbVJlbWFyayhcbiAgICBiYXNrZXRJdGVtSWQ6IHN0cmluZyxcbiAgICByZW1hcmtUeXBlOiBzdHJpbmcsXG4gICAgdGV4dDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QmFza2V0SXRlbUN1c3RvbVJlbWFyaz4ge1xuICAgIHJldHVybiB0aGlzLmFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcmsudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW1JZCxcbiAgICAgIHJlbWFya190eXBlOiByZW1hcmtUeXBlLFxuICAgICAgdGV4dFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEJhc2tldFF1b3RlKGJhc2tldElkOiBzdHJpbmcsIHJlc2VuZDogYm9vbGVhbiwgbm90ZT86IHN0cmluZyk6IE9ic2VydmFibGU8QmFza2V0UXVvdGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNrZXRRdW90ZUZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0OiBiYXNrZXRJZCwgcmVzZW5kLCBub3RlIH0pO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZUJhc2tldE93bmVyc2hpcChcbiAgICBiYXNrZXRJZDogc3RyaW5nLFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICAgIG5vdGU/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXRRdW90ZT4ge1xuICAgIHJldHVybiB0aGlzLmNoYW5nZUJhc2tldE93bmVyc2hpcFVwZGF0ZXIudXBkYXRlT25lKHsgYmFza2V0OiBiYXNrZXRJZCwgdXNlcjogdXNlcklkLCBub3RlIH0pO1xuICB9XG5cbiAgcHVibGljIGdldERyYWZ0QmFza2V0cyhcbiAgICBkcmFmdEJhc2tldFR5cGU6IERyYWZ0QmFza2V0VHlwZSA9IERyYWZ0QmFza2V0VHlwZS5BbGxcbiAgKTogT2JzZXJ2YWJsZTxEcmFmdEJhc2tldD4ge1xuICAgIHJldHVybiB0aGlzLmdldERyYWZ0QmFza2V0c0ZldGNoZXIuZmV0Y2hMaXN0KHsgZHJhZnRCYXNrZXRUeXBlIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2VuZEFwcHJvdmFsKGlkOiBzdHJpbmcsIGFwcHJvdmVyQ2hhbmdlZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5yZXNlbmRBcHByb3ZlckVtYWlsLmZldGNoTGlzdCh7IGlkLCBhcHByb3ZlckNoYW5nZWQgfSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgTW9kYWxUeXBlcy5SZXNlbmRBcHByb3ZhbEVtYWlsQ29tcG9uZW50LFxuICAgICAgICB7IGNlbnRlcmVkOiB0cnVlLCBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgICAgeyBkYXRhOiAhIWRhdGEgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0lmQmFza2V0UmVxdWlyZXNBcHByb3ZhbChiYXNrZXQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmJhc2tldFJlcXVpcmVzQXBwcm92YWwuZmV0Y2hMaXN0KHsgYmFza2V0IH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2V0QmFza2V0cygpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gW107XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyUmVtb3ZlQmFza2V0QnlJZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50QmFza2V0cyA9IHRoaXMuY3VycmVudEJhc2tldHMuZmlsdGVyKGJhc2tldCA9PiBiYXNrZXQuaWQgIT09IGlkKTtcbiAgfVxuXG4gIGNyZWF0ZUludEJhc2tldChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpOiBJbnRlcm5hbEJhc2tldDxHVV9RPiB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcm5hbEJhc2tldChcbiAgICAgIGJhc2tldCxcbiAgICAgIHRoaXMuaGVscGVycyxcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLmdldFVzZXJGZXRjaGVyLFxuICAgICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UsXG4gICAgICB0aGlzLnJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUJhc2tldEZyb21EcmFmdChcbiAgICBkcmFmdEJhc2tldElkOiBzdHJpbmcsXG4gICAgbGVhZFBhc3NlbmdlcklkOiBzdHJpbmcsXG4gICAgbWFuYWdlbWVudEluZm86IFNldE1pVmFsdWVJbnB1dFtdLFxuICAgIHVzZXJJbmZvOiBVc2VySW5mb0lucHV0W10sXG4gICAgYW1lbmQ6IGJvb2xlYW5cbiAgKTogT2JzZXJ2YWJsZTxHZXRVc2VyQmFza2V0UmVzdWx0PiB7XG4gICAgLy8gY29uc3QgdXBkYXRlZE1pRm9ybWF0ID0gdGhpcy5mb3JtYXRTYXZlZE1pKG1hbmFnZW1lbnRJbmZvKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBkcmFmdEJhc2tldElkLFxuICAgICAgbGVhZFBhc3NlbmdlcklkLFxuICAgICAgdXNlckluZm8sIC8vIFVTRVJJTkZvSW5wdXRbXVxuICAgICAgbWFuYWdlbWVudEluZm8sIC8vIFNldE1JVmFsdWVJbnB1dFtdXG4gICAgICBhbWVuZFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXBwcm92ZXJMaXN0QW5kVXBkYXRlKGJhc2tldDogc3RyaW5nKTogUHJvbWlzZTxTdWJzY3JpcHRpb24+IHtcbiAgICAvLyByYW4gb3V0IG9mIHdpbGwgdG8gZ2V0IHRoaXMgd29ya2luZywgd2lsbCBuZWVkIHRvIGdldCB0aGlzIHdvcmtpbmcgZm9yIG90aGVyIE9CVHNcbiAgICBjb25zdCBvZmZpY2UgPSB0aGlzLmdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlckFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgcmV0dXJuIGZvcmtKb2luKFtvZmZpY2UsIHVzZXJdKS5zdWJzY3JpYmUoYXN5bmMgKGFwcHJvdmVyczogYW55KSA9PiB7XG4gICAgICBjb25zdCBhbGxBcHByb3ZlcnMgPSBhcHByb3ZlcnNbMF0uY29uY2F0KGFwcHJvdmVyc1sxXSk7XG4gICAgICBjb25zdCBlbWFpbHMgPSBhbGxBcHByb3ZlcnMubWFwKCh7IGVtYWlsIH06IFVzZXIpID0+IGVtYWlsKTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQXBwcm92ZXJzID0gYWxsQXBwcm92ZXJzLmZpbHRlcihcbiAgICAgICAgKHsgZW1haWwgfTogVXNlciwgaW5kZXg6IG51bWJlcikgPT4gIWVtYWlscy5pbmNsdWRlcyhlbWFpbCwgaW5kZXggKyAxKVxuICAgICAgKTtcbiAgICAgIGlmIChmaWx0ZXJlZEFwcHJvdmVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYXBwcm92ZXIgPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICAgIE1vZGFsVHlwZXMuQXBwcm92ZXJzTW9kYWxDb21wb25lbnQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxuICAgICAgICAgICAgd2luZG93Q2xhc3M6ICdyZXF1aXJlcy1yZWFzb24tZGlhbG9nJyxcbiAgICAgICAgICAgIGNlbnRlcmVkOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGZpbHRlcmVkQXBwcm92ZXJzIH1cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoYXBwcm92ZXIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXJcbiAgICAgICAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICAgICAgICBiYXNrZXQsXG4gICAgICAgICAgICAgIGFwcHJvdmVyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QXBwcm92ZXJzTGlzdCgpOiBPYnNlcnZhYmxlPFtVc2VyW10sIFVzZXJbXV0+IHtcbiAgICBjb25zdCBvZmZpY2UgPSB0aGlzLmdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlckFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gICAgcmV0dXJuIGZvcmtKb2luKFtvZmZpY2UsIHVzZXJdKTtcbiAgfVxuXG4gIGdldEFwcHJvdmVyc1Blck1JTGlzdChiYXNrZXQ6IHN0cmluZyk6IE9ic2VydmFibGU8VXNlcltdPiB7XG4gICAgY29uc3QgYXBwcm92ZXJzID0gdGhpcy5nZXRNSUFwcHJvdmVyc0ZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0SWQ6IGJhc2tldCB9KTtcbiAgICByZXR1cm4gYXBwcm92ZXJzO1xuICB9XG5cbiAgdXBkYXRlQXBwcm92ZXIoXG4gICAgYmFza2V0OiBzdHJpbmcsXG4gICAgYXBwcm92ZXI6IHN0cmluZyxcbiAgICBjb252ZXJ0Q3VycmVuY3lUbz86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEJhc2tldERldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldCxcbiAgICAgIGFwcHJvdmVyLFxuICAgICAgY29udmVydEN1cnJlbmN5VG9cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZU11bHRpTGV2ZWxBcHByb3ZlcnMoXG4gICAgYmFza2V0OiBzdHJpbmcsXG4gICAgbXVsdGlMZXZlbEFwcHJvdmVyczogc3RyaW5nW11cbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXREZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0QmFza2V0TXVsdGlMZXZlbEFwcHJvdmVyc1VwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldCxcbiAgICAgIG11bHRpTGV2ZWxBcHByb3ZlcnNcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZU5vdGlmeUFwcHJvdmVyKFxuICAgIGJhc2tldDogc3RyaW5nLFxuICAgIGFwcHJvdmVyOiBzdHJpbmcsXG4gICAgY29udmVydEN1cnJlbmN5VG8/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXREZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBiYXNrZXQsXG4gICAgICBhcHByb3ZlcixcbiAgICAgIGNvbnZlcnRDdXJyZW5jeVRvXG4gICAgfSk7XG4gIH1cblxuICBvcGVuQXBwcm92ZXJNb2RhbChcbiAgICBhcHByb3ZlcnM6IFVzZXJbXSxcbiAgICBpc1NlbGVjdGVkQXBwcm92ZXI6IGJvb2xlYW4sXG4gICAgaXNTZWxlY3RlZE1JQXBwcm92ZXI6IGJvb2xlYW4sXG4gICAgaXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyOiBib29sZWFuLFxuICAgIGlzU2VsZWN0ZWROb3RpZnlBcHByb3ZlclBlck1JOiBib29sZWFuLFxuICAgIGJhc2tldFVzZXI6IFVzZXIsXG4gICAgYXBwcm92YWxMZXZlbDogbnVtYmVyXG4gICk6IFByb21pc2U8QmFza2V0U2VsZWN0ZWRBcHByb3Zlcj4ge1xuICAgIGNvbnNvbGUud2FybihgKysrIE9wZW5pbmcgYXBwcm92YWwgbW9kYWwgYXQgbGV2ZWw6ICR7YXBwcm92YWxMZXZlbH0gKysrYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuQXBwcm92ZXJzTW9kYWxDb21wb25lbnQsXG4gICAgICB7XG4gICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcbiAgICAgICAgd2luZG93Q2xhc3M6ICdyZXF1aXJlcy1yZWFzb24tZGlhbG9nJyxcbiAgICAgICAgY2VudGVyZWQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFwcHJvdmVycyxcbiAgICAgICAgaXNTZWxlY3RlZEFwcHJvdmVyLFxuICAgICAgICBpc1NlbGVjdGVkTm90aWZ5QXBwcm92ZXIsXG4gICAgICAgIGlzU2VsZWN0ZWROb3RpZnlBcHByb3ZlclBlck1JLFxuICAgICAgICBiYXNrZXRVc2VyLFxuICAgICAgICBhcHByb3ZhbExldmVsLFxuICAgICAgICBpc1NlbGVjdGVkTUlBcHByb3ZlclxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzaGFyZUJhc2tldChiYXNrZXRJZDogc3RyaW5nLCBzaGFyZWRVc2Vyczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPEJhc2tldD4ge1xuICAgIHJldHVybiB0aGlzLnNoYXJlQmFza2V0VXBkYXRlci51cGRhdGVPbmUoeyBiYXNrZXRJZCwgc2hhcmVkVXNlcnMgfSk7XG4gIH1cblxuICBnZXRVc2VyU2hhcmVkQmFza2V0cyhsb2dnZWRJblVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXRbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlci5mZXRjaExpc3QoeyBsb2dnZWRJblVzZXJJZCB9KTtcbiAgfVxuXG4gIC8vICEgLSBVc2UgbG9jYWxzdG9yYWdlIHRvIHRyYWNrIHRoZSBzaXplIG9mIHNoYXJlZCBiYXNrZXRzIGZvciBlYWNoIHVzZXJcbiAgLy8gISAtIHRha2VzIG9ubHkgYSBmZXcgYnl0ZXMgLSB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBhbW91bnQgdXNlZFxuICAvLyAtIHNvbWUgaGVscGZ1bCBjb2RlIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiBsb2NhbCBzdG9yYWdlIC0gdXNlIGl0IGluIHRoZSBicm93c2VyIGNvbnNvbGVcbiAgLy8gdmFyIF9sc1RvdGFsPTAsX3hMZW4sX3g7Zm9yKF94IGluIGxvY2FsU3RvcmFnZSl7IGlmKCFsb2NhbFN0b3JhZ2UuaGFzT3duUHJvcGVydHkoX3gpKXtjb250aW51ZTt9IF94TGVuPSAoKGxvY2FsU3RvcmFnZVtfeF0ubGVuZ3RoICsgX3gubGVuZ3RoKSogMik7X2xzVG90YWwrPV94TGVuOyBjb25zb2xlLmxvZyhfeC5zdWJzdHIoMCw1MCkrXCIgPSBcIisgKF94TGVuLzEwMjQpLnRvRml4ZWQoMikrXCIgS0JcIil9O2NvbnNvbGUubG9nKFwiVG90YWwgPSBcIiArIChfbHNUb3RhbCAvIDEwMjQpLnRvRml4ZWQoMikgKyBcIiBLQlwiKTtcblxuICB1cGRhdGVTaGFyZWRCYXNrZXRDb3VudChzaGFyZWRCYXNrZXRzOiBCYXNrZXRbXSwgdXNlcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldExvY2FsSXRlbShgJHt1c2VySWR9X3NoYXJlZF9iYXNrZXRfY291bnRgLCBzaGFyZWRCYXNrZXRzLmxlbmd0aCk7XG4gIH1cblxuICBnZXRTaGFyZWRCYXNrZXRDb3VudCh1c2VySWQ6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3Qgc3RvcmVkID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRMb2NhbEl0ZW0oYCR7dXNlcklkfV9zaGFyZWRfYmFza2V0X2NvdW50YCk7XG5cbiAgICByZXR1cm4gc3RvcmVkO1xuICB9XG5cbiAgY2FuQW1lbmRCb29raW5nKFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgYXJyaXZhbERhdGU/OiBzdHJpbmcsXG4gICAgZGVwYXJ0dXJlRGF0ZT86IHN0cmluZyxcbiAgICBmaXJzdENoZWNrID0gZmFsc2VcbiAgKTogT2JzZXJ2YWJsZTxCZWZvcmVBbWVuZEluZm8+IHtcbiAgICBpZiAoYmFza2V0SXRlbS5zdGF0dXMgPT09IEJhc2tldEl0ZW1TdGF0dXMuQm9va2VkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYW5BbWVuZEJvb2tpbmdJbmZvRmV0Y2hlci5mZXRjaE9uZSh7XG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIGFycml2YWxEYXRlOiBhcnJpdmFsRGF0ZSxcbiAgICAgICAgZGVwYXJ0dXJlRGF0ZTogZGVwYXJ0dXJlRGF0ZSxcbiAgICAgICAgZmlyc3RDaGVja1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHtcbiAgICAgIGNhbkFtZW5kOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgY2hlY2tGb3JTZWxmQXBwcm92ZShiYXNrZXQ6IEJhc2tldERldGFpbHMpOiBib29sZWFuIHtcbiAgICBjb25zdCBiYXNrZXRVc2VyID0gYmFza2V0Lmludm9rZWRVc2VyID8gYmFza2V0Lmludm9rZWRVc2VyIDogYmFza2V0Lm93bmVyO1xuICAgIGNvbnN0IGlzQWxsb3dTZWxmQXBwcm92ZSA9IGJhc2tldFVzZXIub2ZmaWNlLmFsbG93U2VsZkFwcHJvdmU7XG4gICAgY29uc3QgdXNlckFwcHJvdmVycyA9IGJhc2tldFVzZXIudXNlckFwcHJvdmVycztcbiAgICBpZiAoaXNBbGxvd1NlbGZBcHByb3ZlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgaXNTZWxmQXBwcm92ZXIgPVxuICAgICAgdXNlckFwcHJvdmVycy5sZW5ndGggPT09IDEgJiYgdXNlckFwcHJvdmVyc1swXT8uYXBwcm92ZXIuaWQgPT09IGJhc2tldFVzZXIuaWQ7XG4gICAgcmV0dXJuICFpc1NlbGZBcHByb3ZlcjtcbiAgfVxuXG4gIGFzeW5jIG9wZW5BcHByb3ZlV2FybmluZyh3YXJuaW5nTWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuQmFzaWNNb2RhbENvbXBvbmVudCxcbiAgICAgIHsgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsIGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJycsXG4gICAgICAgIGJvZHk6IHdhcm5pbmdNZXNzYWdlLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYnV0dG9uT2s6IHRydWUsXG4gICAgICAgICAgYnV0dG9uT2tUZXh0OiAnT2snLFxuICAgICAgICAgIGJ1dHRvbkNhbmNlbDogZmFsc2UsXG4gICAgICAgICAgYnV0dG9uT2tBY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBnZXRUcmFpblNlYXRNYXAoaWQ6IHN0cmluZyk6IFByb21pc2U8VHJhaW5TZWF0TWFwPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHJhaW5TZWF0TWFwRmV0Y2hlci5mZXRjaExpc3QoeyBpdGluZXJhcnlJZDogaWQgfSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBzZXRSZXF1aXJlc1JlYXNvbkJvb2tpbmcoaXNCb29raW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UuaXNCb29raW5nID0gaXNCb29raW5nO1xuICB9XG5cbiAgaXNVc2VyQWdlbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UudXNlcklzQWdlbnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCYXNrZXRBcHByb3ZhbFRpbWVzdGFtcHMoYmFza2V0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QmFza2V0QXBwcm92YWxUaW1lc3RhbXBbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2tldEFwcHJvdmFsVGltZXN0YW1wc0ZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0SWQgfSk7XG4gIH1cblxuICBiZWZvcmVUYXhpQW1lbmRTZWFyY2goYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IE9ic2VydmFibGU8Q2FiSGlyZVF1b3RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5iZWZvcmVBbWVuZENhYlNlYXJjaGZldGNoZXIuZmV0Y2hMaXN0KHsgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZCB9KTtcbiAgfVxuICBzZW50QmFza2V0c0JhY2tUb1F1ZXVlKGRyYWZ0QmFza2V0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNlbmRCYWNrVG9RdWV1ZVVwZGF0ZXIudXBkYXRlT25lKHsgZHJhZnRCYXNrZXRJZCB9KTtcbiAgfVxuXG4gIGJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaChcbiAgICBiYXNrZXRJdGVtOiBzdHJpbmcsXG4gICAgcGlja1VwRGF0ZVRpbWU/OiBzdHJpbmcsXG4gICAgZHJvcE9mZkRhdGVUaW1lPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8Q2FySGlyZVZlaGljbGVBdmFpbGliaWxpdHlbXT4ge1xuICAgIHJldHVybiB0aGlzLmJlZm9yZUFtZW5kQ2FySGlyZVNlYXJjaGZldGNoZXIuZmV0Y2hMaXN0KHtcbiAgICAgIGJhc2tldEl0ZW0sXG4gICAgICBwaWNrVXBEYXRlVGltZSxcbiAgICAgIGRyb3BPZmZEYXRlVGltZVxuICAgIH0pO1xuICB9XG59XG5cbiJdfQ==
|