@cdktn/provider-pagerduty 15.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +110408 -0
- package/LICENSE +355 -0
- package/README.md +94 -0
- package/lib/addon/index.d.ts +53 -0
- package/lib/addon/index.js +115 -0
- package/lib/alert-grouping-setting/index.d.ts +144 -0
- package/lib/alert-grouping-setting/index.js +366 -0
- package/lib/automation-actions-action/index.d.ts +232 -0
- package/lib/automation-actions-action/index.js +560 -0
- package/lib/automation-actions-action-service-association/index.d.ts +64 -0
- package/lib/automation-actions-action-service-association/index.js +129 -0
- package/lib/automation-actions-action-team-association/index.d.ts +64 -0
- package/lib/automation-actions-action-team-association/index.js +129 -0
- package/lib/automation-actions-runner/index.d.ts +102 -0
- package/lib/automation-actions-runner/index.js +224 -0
- package/lib/automation-actions-runner-team-association/index.d.ts +64 -0
- package/lib/automation-actions-runner-team-association/index.js +129 -0
- package/lib/business-service/index.d.ts +84 -0
- package/lib/business-service/index.js +190 -0
- package/lib/business-service-subscriber/index.d.ts +72 -0
- package/lib/business-service-subscriber/index.js +147 -0
- package/lib/data-pagerduty-alert-grouping-setting/index.d.ts +70 -0
- package/lib/data-pagerduty-alert-grouping-setting/index.js +190 -0
- package/lib/data-pagerduty-automation-actions-action/index.d.ts +186 -0
- package/lib/data-pagerduty-automation-actions-action/index.js +425 -0
- package/lib/data-pagerduty-automation-actions-runner/index.d.ts +78 -0
- package/lib/data-pagerduty-automation-actions-runner/index.js +172 -0
- package/lib/data-pagerduty-business-service/index.d.ts +46 -0
- package/lib/data-pagerduty-business-service/index.js +101 -0
- package/lib/data-pagerduty-escalation-policy/index.d.ts +47 -0
- package/lib/data-pagerduty-escalation-policy/index.js +105 -0
- package/lib/data-pagerduty-event-orchestration/index.d.ts +137 -0
- package/lib/data-pagerduty-event-orchestration/index.js +306 -0
- package/lib/data-pagerduty-event-orchestration-global-cache-variable/index.d.ts +138 -0
- package/lib/data-pagerduty-event-orchestration-global-cache-variable/index.js +315 -0
- package/lib/data-pagerduty-event-orchestration-integration/index.d.ts +100 -0
- package/lib/data-pagerduty-event-orchestration-integration/index.js +216 -0
- package/lib/data-pagerduty-event-orchestration-service-cache-variable/index.d.ts +138 -0
- package/lib/data-pagerduty-event-orchestration-service-cache-variable/index.js +315 -0
- package/lib/data-pagerduty-event-orchestrations/index.d.ts +161 -0
- package/lib/data-pagerduty-event-orchestrations/index.js +366 -0
- package/lib/data-pagerduty-extension-schema/index.d.ts +46 -0
- package/lib/data-pagerduty-extension-schema/index.js +101 -0
- package/lib/data-pagerduty-incident-custom-field/index.d.ts +60 -0
- package/lib/data-pagerduty-incident-custom-field/index.js +130 -0
- package/lib/data-pagerduty-incident-type/index.d.ts +50 -0
- package/lib/data-pagerduty-incident-type/index.js +117 -0
- package/lib/data-pagerduty-incident-type-custom-field/index.d.ts +115 -0
- package/lib/data-pagerduty-incident-type-custom-field/index.js +295 -0
- package/lib/data-pagerduty-incident-workflow/index.d.ts +57 -0
- package/lib/data-pagerduty-incident-workflow/index.js +118 -0
- package/lib/data-pagerduty-jira-cloud-account-mapping/index.d.ts +46 -0
- package/lib/data-pagerduty-jira-cloud-account-mapping/index.js +101 -0
- package/lib/data-pagerduty-license/index.d.ts +74 -0
- package/lib/data-pagerduty-license/index.js +170 -0
- package/lib/data-pagerduty-licenses/index.d.ts +92 -0
- package/lib/data-pagerduty-licenses/index.js +213 -0
- package/lib/data-pagerduty-priority/index.d.ts +48 -0
- package/lib/data-pagerduty-priority/index.js +101 -0
- package/lib/data-pagerduty-ruleset/index.d.ts +57 -0
- package/lib/data-pagerduty-ruleset/index.js +115 -0
- package/lib/data-pagerduty-schedule/index.d.ts +45 -0
- package/lib/data-pagerduty-schedule/index.js +97 -0
- package/lib/data-pagerduty-service/index.d.ts +86 -0
- package/lib/data-pagerduty-service/index.js +205 -0
- package/lib/data-pagerduty-service-custom-field/index.d.ts +92 -0
- package/lib/data-pagerduty-service-custom-field/index.js +221 -0
- package/lib/data-pagerduty-service-custom-field-value/index.d.ts +88 -0
- package/lib/data-pagerduty-service-custom-field-value/index.js +205 -0
- package/lib/data-pagerduty-service-integration/index.d.ts +56 -0
- package/lib/data-pagerduty-service-integration/index.js +119 -0
- package/lib/data-pagerduty-standards/index.d.ts +154 -0
- package/lib/data-pagerduty-standards/index.js +361 -0
- package/lib/data-pagerduty-standards-resource-scores/index.d.ts +112 -0
- package/lib/data-pagerduty-standards-resource-scores/index.js +268 -0
- package/lib/data-pagerduty-standards-resources-scores/index.d.ts +144 -0
- package/lib/data-pagerduty-standards-resources-scores/index.js +352 -0
- package/lib/data-pagerduty-tag/index.d.ts +47 -0
- package/lib/data-pagerduty-tag/index.js +97 -0
- package/lib/data-pagerduty-team/index.d.ts +77 -0
- package/lib/data-pagerduty-team/index.js +157 -0
- package/lib/data-pagerduty-team-members/index.d.ts +95 -0
- package/lib/data-pagerduty-team-members/index.js +203 -0
- package/lib/data-pagerduty-teams/index.d.ts +96 -0
- package/lib/data-pagerduty-teams/index.js +206 -0
- package/lib/data-pagerduty-user/index.d.ts +50 -0
- package/lib/data-pagerduty-user/index.js +117 -0
- package/lib/data-pagerduty-user-contact-method/index.d.ts +82 -0
- package/lib/data-pagerduty-user-contact-method/index.js +174 -0
- package/lib/data-pagerduty-users/index.d.ts +87 -0
- package/lib/data-pagerduty-users/index.js +208 -0
- package/lib/data-pagerduty-vendor/index.d.ts +46 -0
- package/lib/data-pagerduty-vendor/index.js +101 -0
- package/lib/enablement/index.d.ts +70 -0
- package/lib/enablement/index.js +151 -0
- package/lib/escalation-policy/index.d.ts +232 -0
- package/lib/escalation-policy/index.js +565 -0
- package/lib/event-orchestration/index.d.ts +156 -0
- package/lib/event-orchestration/index.js +352 -0
- package/lib/event-orchestration-global/index.d.ts +1253 -0
- package/lib/event-orchestration-global/index.js +3350 -0
- package/lib/event-orchestration-global-cache-variable/index.d.ts +182 -0
- package/lib/event-orchestration-global-cache-variable/index.js +459 -0
- package/lib/event-orchestration-integration/index.d.ts +88 -0
- package/lib/event-orchestration-integration/index.js +196 -0
- package/lib/event-orchestration-router/index.d.ts +363 -0
- package/lib/event-orchestration-router/index.js +954 -0
- package/lib/event-orchestration-service/index.d.ts +1328 -0
- package/lib/event-orchestration-service/index.js +3573 -0
- package/lib/event-orchestration-service-cache-variable/index.d.ts +182 -0
- package/lib/event-orchestration-service-cache-variable/index.js +459 -0
- package/lib/event-orchestration-unrouted/index.d.ts +653 -0
- package/lib/event-orchestration-unrouted/index.js +1722 -0
- package/lib/event-rule/index.d.ts +74 -0
- package/lib/event-rule/index.js +154 -0
- package/lib/extension/index.d.ts +91 -0
- package/lib/extension/index.js +204 -0
- package/lib/extension-servicenow/index.d.ts +138 -0
- package/lib/extension-servicenow/index.js +308 -0
- package/lib/incident-custom-field/index.d.ts +98 -0
- package/lib/incident-custom-field/index.js +207 -0
- package/lib/incident-custom-field-option/index.d.ts +72 -0
- package/lib/incident-custom-field-option/index.js +147 -0
- package/lib/incident-type/index.d.ts +80 -0
- package/lib/incident-type/index.js +176 -0
- package/lib/incident-type-custom-field/index.d.ts +117 -0
- package/lib/incident-type-custom-field/index.js +265 -0
- package/lib/incident-workflow/index.d.ts +378 -0
- package/lib/incident-workflow/index.js +943 -0
- package/lib/incident-workflow-trigger/index.d.ts +133 -0
- package/lib/incident-workflow-trigger/index.js +314 -0
- package/lib/index.d.ts +91 -0
- package/lib/index.js +97 -0
- package/lib/jira-cloud-account-mapping-rule/index.d.ts +559 -0
- package/lib/jira-cloud-account-mapping-rule/index.js +1578 -0
- package/lib/lazy-index.d.ts +4 -0
- package/lib/lazy-index.js +94 -0
- package/lib/maintenance-window/index.d.ts +81 -0
- package/lib/maintenance-window/index.js +168 -0
- package/lib/provider/index.d.ts +128 -0
- package/lib/provider/index.js +279 -0
- package/lib/response-play/index.d.ts +426 -0
- package/lib/response-play/index.js +1009 -0
- package/lib/ruleset/index.d.ts +94 -0
- package/lib/ruleset/index.js +215 -0
- package/lib/ruleset-rule/index.d.ts +1026 -0
- package/lib/ruleset-rule/index.js +2670 -0
- package/lib/schedule/index.d.ts +299 -0
- package/lib/schedule/index.js +740 -0
- package/lib/service/index.d.ts +592 -0
- package/lib/service/index.js +1608 -0
- package/lib/service-custom-field/index.d.ts +174 -0
- package/lib/service-custom-field/index.js +379 -0
- package/lib/service-custom-field-value/index.d.ts +117 -0
- package/lib/service-custom-field-value/index.js +269 -0
- package/lib/service-dependency/index.d.ts +216 -0
- package/lib/service-dependency/index.js +525 -0
- package/lib/service-event-rule/index.d.ts +964 -0
- package/lib/service-event-rule/index.js +2512 -0
- package/lib/service-integration/index.d.ts +546 -0
- package/lib/service-integration/index.js +1404 -0
- package/lib/slack-connection/index.d.ts +159 -0
- package/lib/slack-connection/index.js +369 -0
- package/lib/tag/index.d.ts +47 -0
- package/lib/tag/index.js +105 -0
- package/lib/tag-assignment/index.d.ts +61 -0
- package/lib/tag-assignment/index.js +130 -0
- package/lib/team/index.d.ts +73 -0
- package/lib/team/index.js +161 -0
- package/lib/team-membership/index.d.ts +62 -0
- package/lib/team-membership/index.js +136 -0
- package/lib/user/index.d.ts +130 -0
- package/lib/user/index.js +291 -0
- package/lib/user-contact-method/index.d.ts +98 -0
- package/lib/user-contact-method/index.js +219 -0
- package/lib/user-handoff-notification-rule/index.d.ts +131 -0
- package/lib/user-handoff-notification-rule/index.js +285 -0
- package/lib/user-notification-rule/index.d.ts +105 -0
- package/lib/user-notification-rule/index.js +258 -0
- package/lib/webhook-subscription/index.d.ts +276 -0
- package/lib/webhook-subscription/index.js +664 -0
- package/package.json +155 -0
|
@@ -0,0 +1,1608 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Service = exports.ServiceSupportHoursOutputReference = exports.ServiceScheduledActionsList = exports.ServiceScheduledActionsOutputReference = exports.ServiceScheduledActionsAtList = exports.ServiceScheduledActionsAtOutputReference = exports.ServiceIncidentUrgencyRuleOutputReference = exports.ServiceIncidentUrgencyRuleOutsideSupportHoursOutputReference = exports.ServiceIncidentUrgencyRuleDuringSupportHoursOutputReference = exports.ServiceAutoPauseNotificationsParametersOutputReference = exports.ServiceAlertGroupingParametersOutputReference = exports.ServiceAlertGroupingParametersConfigOutputReference = void 0;
|
|
5
|
+
exports.serviceAlertGroupingParametersConfigToTerraform = serviceAlertGroupingParametersConfigToTerraform;
|
|
6
|
+
exports.serviceAlertGroupingParametersConfigToHclTerraform = serviceAlertGroupingParametersConfigToHclTerraform;
|
|
7
|
+
exports.serviceAlertGroupingParametersToTerraform = serviceAlertGroupingParametersToTerraform;
|
|
8
|
+
exports.serviceAlertGroupingParametersToHclTerraform = serviceAlertGroupingParametersToHclTerraform;
|
|
9
|
+
exports.serviceAutoPauseNotificationsParametersToTerraform = serviceAutoPauseNotificationsParametersToTerraform;
|
|
10
|
+
exports.serviceAutoPauseNotificationsParametersToHclTerraform = serviceAutoPauseNotificationsParametersToHclTerraform;
|
|
11
|
+
exports.serviceIncidentUrgencyRuleDuringSupportHoursToTerraform = serviceIncidentUrgencyRuleDuringSupportHoursToTerraform;
|
|
12
|
+
exports.serviceIncidentUrgencyRuleDuringSupportHoursToHclTerraform = serviceIncidentUrgencyRuleDuringSupportHoursToHclTerraform;
|
|
13
|
+
exports.serviceIncidentUrgencyRuleOutsideSupportHoursToTerraform = serviceIncidentUrgencyRuleOutsideSupportHoursToTerraform;
|
|
14
|
+
exports.serviceIncidentUrgencyRuleOutsideSupportHoursToHclTerraform = serviceIncidentUrgencyRuleOutsideSupportHoursToHclTerraform;
|
|
15
|
+
exports.serviceIncidentUrgencyRuleToTerraform = serviceIncidentUrgencyRuleToTerraform;
|
|
16
|
+
exports.serviceIncidentUrgencyRuleToHclTerraform = serviceIncidentUrgencyRuleToHclTerraform;
|
|
17
|
+
exports.serviceScheduledActionsAtToTerraform = serviceScheduledActionsAtToTerraform;
|
|
18
|
+
exports.serviceScheduledActionsAtToHclTerraform = serviceScheduledActionsAtToHclTerraform;
|
|
19
|
+
exports.serviceScheduledActionsToTerraform = serviceScheduledActionsToTerraform;
|
|
20
|
+
exports.serviceScheduledActionsToHclTerraform = serviceScheduledActionsToHclTerraform;
|
|
21
|
+
exports.serviceSupportHoursToTerraform = serviceSupportHoursToTerraform;
|
|
22
|
+
exports.serviceSupportHoursToHclTerraform = serviceSupportHoursToHclTerraform;
|
|
23
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
24
|
+
const cdktn = require("cdktn");
|
|
25
|
+
function serviceAlertGroupingParametersConfigToTerraform(struct) {
|
|
26
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
27
|
+
return struct;
|
|
28
|
+
}
|
|
29
|
+
if (cdktn.isComplexElement(struct)) {
|
|
30
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
aggregate: cdktn.stringToTerraform(struct.aggregate),
|
|
34
|
+
fields: cdktn.listMapper(cdktn.stringToTerraform, false)(struct.fields),
|
|
35
|
+
time_window: cdktn.numberToTerraform(struct.timeWindow),
|
|
36
|
+
timeout: cdktn.numberToTerraform(struct.timeout),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function serviceAlertGroupingParametersConfigToHclTerraform(struct) {
|
|
40
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
41
|
+
return struct;
|
|
42
|
+
}
|
|
43
|
+
if (cdktn.isComplexElement(struct)) {
|
|
44
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
45
|
+
}
|
|
46
|
+
const attrs = {
|
|
47
|
+
aggregate: {
|
|
48
|
+
value: cdktn.stringToHclTerraform(struct.aggregate),
|
|
49
|
+
isBlock: false,
|
|
50
|
+
type: "simple",
|
|
51
|
+
storageClassType: "string",
|
|
52
|
+
},
|
|
53
|
+
fields: {
|
|
54
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(struct.fields),
|
|
55
|
+
isBlock: false,
|
|
56
|
+
type: "list",
|
|
57
|
+
storageClassType: "stringList",
|
|
58
|
+
},
|
|
59
|
+
time_window: {
|
|
60
|
+
value: cdktn.numberToHclTerraform(struct.timeWindow),
|
|
61
|
+
isBlock: false,
|
|
62
|
+
type: "simple",
|
|
63
|
+
storageClassType: "number",
|
|
64
|
+
},
|
|
65
|
+
timeout: {
|
|
66
|
+
value: cdktn.numberToHclTerraform(struct.timeout),
|
|
67
|
+
isBlock: false,
|
|
68
|
+
type: "simple",
|
|
69
|
+
storageClassType: "number",
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
// remove undefined attributes
|
|
73
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
74
|
+
}
|
|
75
|
+
class ServiceAlertGroupingParametersConfigOutputReference extends cdktn.ComplexObject {
|
|
76
|
+
/**
|
|
77
|
+
* @param terraformResource The parent resource
|
|
78
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
79
|
+
*/
|
|
80
|
+
constructor(terraformResource, terraformAttribute) {
|
|
81
|
+
super(terraformResource, terraformAttribute, false, 0);
|
|
82
|
+
this.isEmptyObject = false;
|
|
83
|
+
}
|
|
84
|
+
get internalValue() {
|
|
85
|
+
let hasAnyValues = this.isEmptyObject;
|
|
86
|
+
const internalValueResult = {};
|
|
87
|
+
if (this._aggregate !== undefined) {
|
|
88
|
+
hasAnyValues = true;
|
|
89
|
+
internalValueResult.aggregate = this._aggregate;
|
|
90
|
+
}
|
|
91
|
+
if (this._fields !== undefined) {
|
|
92
|
+
hasAnyValues = true;
|
|
93
|
+
internalValueResult.fields = this._fields;
|
|
94
|
+
}
|
|
95
|
+
if (this._timeWindow !== undefined) {
|
|
96
|
+
hasAnyValues = true;
|
|
97
|
+
internalValueResult.timeWindow = this._timeWindow;
|
|
98
|
+
}
|
|
99
|
+
if (this._timeout !== undefined) {
|
|
100
|
+
hasAnyValues = true;
|
|
101
|
+
internalValueResult.timeout = this._timeout;
|
|
102
|
+
}
|
|
103
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
104
|
+
}
|
|
105
|
+
set internalValue(value) {
|
|
106
|
+
if (value === undefined) {
|
|
107
|
+
this.isEmptyObject = false;
|
|
108
|
+
this._aggregate = undefined;
|
|
109
|
+
this._fields = undefined;
|
|
110
|
+
this._timeWindow = undefined;
|
|
111
|
+
this._timeout = undefined;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
115
|
+
this._aggregate = value.aggregate;
|
|
116
|
+
this._fields = value.fields;
|
|
117
|
+
this._timeWindow = value.timeWindow;
|
|
118
|
+
this._timeout = value.timeout;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
get aggregate() {
|
|
122
|
+
return this.getStringAttribute('aggregate');
|
|
123
|
+
}
|
|
124
|
+
set aggregate(value) {
|
|
125
|
+
this._aggregate = value;
|
|
126
|
+
}
|
|
127
|
+
resetAggregate() {
|
|
128
|
+
this._aggregate = undefined;
|
|
129
|
+
}
|
|
130
|
+
// Temporarily expose input value. Use with caution.
|
|
131
|
+
get aggregateInput() {
|
|
132
|
+
return this._aggregate;
|
|
133
|
+
}
|
|
134
|
+
get fields() {
|
|
135
|
+
return this.getListAttribute('fields');
|
|
136
|
+
}
|
|
137
|
+
set fields(value) {
|
|
138
|
+
this._fields = value;
|
|
139
|
+
}
|
|
140
|
+
resetFields() {
|
|
141
|
+
this._fields = undefined;
|
|
142
|
+
}
|
|
143
|
+
// Temporarily expose input value. Use with caution.
|
|
144
|
+
get fieldsInput() {
|
|
145
|
+
return this._fields;
|
|
146
|
+
}
|
|
147
|
+
get timeWindow() {
|
|
148
|
+
return this.getNumberAttribute('time_window');
|
|
149
|
+
}
|
|
150
|
+
set timeWindow(value) {
|
|
151
|
+
this._timeWindow = value;
|
|
152
|
+
}
|
|
153
|
+
resetTimeWindow() {
|
|
154
|
+
this._timeWindow = undefined;
|
|
155
|
+
}
|
|
156
|
+
// Temporarily expose input value. Use with caution.
|
|
157
|
+
get timeWindowInput() {
|
|
158
|
+
return this._timeWindow;
|
|
159
|
+
}
|
|
160
|
+
get timeout() {
|
|
161
|
+
return this.getNumberAttribute('timeout');
|
|
162
|
+
}
|
|
163
|
+
set timeout(value) {
|
|
164
|
+
this._timeout = value;
|
|
165
|
+
}
|
|
166
|
+
resetTimeout() {
|
|
167
|
+
this._timeout = undefined;
|
|
168
|
+
}
|
|
169
|
+
// Temporarily expose input value. Use with caution.
|
|
170
|
+
get timeoutInput() {
|
|
171
|
+
return this._timeout;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.ServiceAlertGroupingParametersConfigOutputReference = ServiceAlertGroupingParametersConfigOutputReference;
|
|
175
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
176
|
+
ServiceAlertGroupingParametersConfigOutputReference[_a] = { fqn: "@cdktn/provider-pagerduty.service.ServiceAlertGroupingParametersConfigOutputReference", version: "15.0.0" };
|
|
177
|
+
function serviceAlertGroupingParametersToTerraform(struct) {
|
|
178
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
179
|
+
return struct;
|
|
180
|
+
}
|
|
181
|
+
if (cdktn.isComplexElement(struct)) {
|
|
182
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
type: cdktn.stringToTerraform(struct.type),
|
|
186
|
+
config: serviceAlertGroupingParametersConfigToTerraform(struct.config),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
function serviceAlertGroupingParametersToHclTerraform(struct) {
|
|
190
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
191
|
+
return struct;
|
|
192
|
+
}
|
|
193
|
+
if (cdktn.isComplexElement(struct)) {
|
|
194
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
195
|
+
}
|
|
196
|
+
const attrs = {
|
|
197
|
+
type: {
|
|
198
|
+
value: cdktn.stringToHclTerraform(struct.type),
|
|
199
|
+
isBlock: false,
|
|
200
|
+
type: "simple",
|
|
201
|
+
storageClassType: "string",
|
|
202
|
+
},
|
|
203
|
+
config: {
|
|
204
|
+
value: serviceAlertGroupingParametersConfigToHclTerraform(struct.config),
|
|
205
|
+
isBlock: true,
|
|
206
|
+
type: "list",
|
|
207
|
+
storageClassType: "ServiceAlertGroupingParametersConfigList",
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
// remove undefined attributes
|
|
211
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
212
|
+
}
|
|
213
|
+
class ServiceAlertGroupingParametersOutputReference extends cdktn.ComplexObject {
|
|
214
|
+
/**
|
|
215
|
+
* @param terraformResource The parent resource
|
|
216
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
217
|
+
*/
|
|
218
|
+
constructor(terraformResource, terraformAttribute) {
|
|
219
|
+
super(terraformResource, terraformAttribute, false, 0);
|
|
220
|
+
this.isEmptyObject = false;
|
|
221
|
+
// config - computed: false, optional: true, required: false
|
|
222
|
+
this._config = new ServiceAlertGroupingParametersConfigOutputReference(this, "config");
|
|
223
|
+
}
|
|
224
|
+
get internalValue() {
|
|
225
|
+
let hasAnyValues = this.isEmptyObject;
|
|
226
|
+
const internalValueResult = {};
|
|
227
|
+
if (this._type !== undefined) {
|
|
228
|
+
hasAnyValues = true;
|
|
229
|
+
internalValueResult.type = this._type;
|
|
230
|
+
}
|
|
231
|
+
if (this._config?.internalValue !== undefined) {
|
|
232
|
+
hasAnyValues = true;
|
|
233
|
+
internalValueResult.config = this._config?.internalValue;
|
|
234
|
+
}
|
|
235
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
236
|
+
}
|
|
237
|
+
set internalValue(value) {
|
|
238
|
+
if (value === undefined) {
|
|
239
|
+
this.isEmptyObject = false;
|
|
240
|
+
this._type = undefined;
|
|
241
|
+
this._config.internalValue = undefined;
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
245
|
+
this._type = value.type;
|
|
246
|
+
this._config.internalValue = value.config;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
get type() {
|
|
250
|
+
return this.getStringAttribute('type');
|
|
251
|
+
}
|
|
252
|
+
set type(value) {
|
|
253
|
+
this._type = value;
|
|
254
|
+
}
|
|
255
|
+
resetType() {
|
|
256
|
+
this._type = undefined;
|
|
257
|
+
}
|
|
258
|
+
// Temporarily expose input value. Use with caution.
|
|
259
|
+
get typeInput() {
|
|
260
|
+
return this._type;
|
|
261
|
+
}
|
|
262
|
+
get config() {
|
|
263
|
+
return this._config;
|
|
264
|
+
}
|
|
265
|
+
putConfig(value) {
|
|
266
|
+
this._config.internalValue = value;
|
|
267
|
+
}
|
|
268
|
+
resetConfig() {
|
|
269
|
+
this._config.internalValue = undefined;
|
|
270
|
+
}
|
|
271
|
+
// Temporarily expose input value. Use with caution.
|
|
272
|
+
get configInput() {
|
|
273
|
+
return this._config.internalValue;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
exports.ServiceAlertGroupingParametersOutputReference = ServiceAlertGroupingParametersOutputReference;
|
|
277
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
278
|
+
ServiceAlertGroupingParametersOutputReference[_b] = { fqn: "@cdktn/provider-pagerduty.service.ServiceAlertGroupingParametersOutputReference", version: "15.0.0" };
|
|
279
|
+
function serviceAutoPauseNotificationsParametersToTerraform(struct) {
|
|
280
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
281
|
+
return struct;
|
|
282
|
+
}
|
|
283
|
+
if (cdktn.isComplexElement(struct)) {
|
|
284
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
enabled: cdktn.booleanToTerraform(struct.enabled),
|
|
288
|
+
timeout: cdktn.numberToTerraform(struct.timeout),
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
function serviceAutoPauseNotificationsParametersToHclTerraform(struct) {
|
|
292
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
293
|
+
return struct;
|
|
294
|
+
}
|
|
295
|
+
if (cdktn.isComplexElement(struct)) {
|
|
296
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
297
|
+
}
|
|
298
|
+
const attrs = {
|
|
299
|
+
enabled: {
|
|
300
|
+
value: cdktn.booleanToHclTerraform(struct.enabled),
|
|
301
|
+
isBlock: false,
|
|
302
|
+
type: "simple",
|
|
303
|
+
storageClassType: "boolean",
|
|
304
|
+
},
|
|
305
|
+
timeout: {
|
|
306
|
+
value: cdktn.numberToHclTerraform(struct.timeout),
|
|
307
|
+
isBlock: false,
|
|
308
|
+
type: "simple",
|
|
309
|
+
storageClassType: "number",
|
|
310
|
+
},
|
|
311
|
+
};
|
|
312
|
+
// remove undefined attributes
|
|
313
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
314
|
+
}
|
|
315
|
+
class ServiceAutoPauseNotificationsParametersOutputReference extends cdktn.ComplexObject {
|
|
316
|
+
/**
|
|
317
|
+
* @param terraformResource The parent resource
|
|
318
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
319
|
+
*/
|
|
320
|
+
constructor(terraformResource, terraformAttribute) {
|
|
321
|
+
super(terraformResource, terraformAttribute, false, 0);
|
|
322
|
+
this.isEmptyObject = false;
|
|
323
|
+
}
|
|
324
|
+
get internalValue() {
|
|
325
|
+
let hasAnyValues = this.isEmptyObject;
|
|
326
|
+
const internalValueResult = {};
|
|
327
|
+
if (this._enabled !== undefined) {
|
|
328
|
+
hasAnyValues = true;
|
|
329
|
+
internalValueResult.enabled = this._enabled;
|
|
330
|
+
}
|
|
331
|
+
if (this._timeout !== undefined) {
|
|
332
|
+
hasAnyValues = true;
|
|
333
|
+
internalValueResult.timeout = this._timeout;
|
|
334
|
+
}
|
|
335
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
336
|
+
}
|
|
337
|
+
set internalValue(value) {
|
|
338
|
+
if (value === undefined) {
|
|
339
|
+
this.isEmptyObject = false;
|
|
340
|
+
this._enabled = undefined;
|
|
341
|
+
this._timeout = undefined;
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
345
|
+
this._enabled = value.enabled;
|
|
346
|
+
this._timeout = value.timeout;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
get enabled() {
|
|
350
|
+
return this.getBooleanAttribute('enabled');
|
|
351
|
+
}
|
|
352
|
+
set enabled(value) {
|
|
353
|
+
this._enabled = value;
|
|
354
|
+
}
|
|
355
|
+
resetEnabled() {
|
|
356
|
+
this._enabled = undefined;
|
|
357
|
+
}
|
|
358
|
+
// Temporarily expose input value. Use with caution.
|
|
359
|
+
get enabledInput() {
|
|
360
|
+
return this._enabled;
|
|
361
|
+
}
|
|
362
|
+
get timeout() {
|
|
363
|
+
return this.getNumberAttribute('timeout');
|
|
364
|
+
}
|
|
365
|
+
set timeout(value) {
|
|
366
|
+
this._timeout = value;
|
|
367
|
+
}
|
|
368
|
+
resetTimeout() {
|
|
369
|
+
this._timeout = undefined;
|
|
370
|
+
}
|
|
371
|
+
// Temporarily expose input value. Use with caution.
|
|
372
|
+
get timeoutInput() {
|
|
373
|
+
return this._timeout;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
exports.ServiceAutoPauseNotificationsParametersOutputReference = ServiceAutoPauseNotificationsParametersOutputReference;
|
|
377
|
+
_c = JSII_RTTI_SYMBOL_1;
|
|
378
|
+
ServiceAutoPauseNotificationsParametersOutputReference[_c] = { fqn: "@cdktn/provider-pagerduty.service.ServiceAutoPauseNotificationsParametersOutputReference", version: "15.0.0" };
|
|
379
|
+
function serviceIncidentUrgencyRuleDuringSupportHoursToTerraform(struct) {
|
|
380
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
381
|
+
return struct;
|
|
382
|
+
}
|
|
383
|
+
if (cdktn.isComplexElement(struct)) {
|
|
384
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
385
|
+
}
|
|
386
|
+
return {
|
|
387
|
+
type: cdktn.stringToTerraform(struct.type),
|
|
388
|
+
urgency: cdktn.stringToTerraform(struct.urgency),
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
function serviceIncidentUrgencyRuleDuringSupportHoursToHclTerraform(struct) {
|
|
392
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
393
|
+
return struct;
|
|
394
|
+
}
|
|
395
|
+
if (cdktn.isComplexElement(struct)) {
|
|
396
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
397
|
+
}
|
|
398
|
+
const attrs = {
|
|
399
|
+
type: {
|
|
400
|
+
value: cdktn.stringToHclTerraform(struct.type),
|
|
401
|
+
isBlock: false,
|
|
402
|
+
type: "simple",
|
|
403
|
+
storageClassType: "string",
|
|
404
|
+
},
|
|
405
|
+
urgency: {
|
|
406
|
+
value: cdktn.stringToHclTerraform(struct.urgency),
|
|
407
|
+
isBlock: false,
|
|
408
|
+
type: "simple",
|
|
409
|
+
storageClassType: "string",
|
|
410
|
+
},
|
|
411
|
+
};
|
|
412
|
+
// remove undefined attributes
|
|
413
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
414
|
+
}
|
|
415
|
+
class ServiceIncidentUrgencyRuleDuringSupportHoursOutputReference extends cdktn.ComplexObject {
|
|
416
|
+
/**
|
|
417
|
+
* @param terraformResource The parent resource
|
|
418
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
419
|
+
*/
|
|
420
|
+
constructor(terraformResource, terraformAttribute) {
|
|
421
|
+
super(terraformResource, terraformAttribute, false, 0);
|
|
422
|
+
this.isEmptyObject = false;
|
|
423
|
+
}
|
|
424
|
+
get internalValue() {
|
|
425
|
+
let hasAnyValues = this.isEmptyObject;
|
|
426
|
+
const internalValueResult = {};
|
|
427
|
+
if (this._type !== undefined) {
|
|
428
|
+
hasAnyValues = true;
|
|
429
|
+
internalValueResult.type = this._type;
|
|
430
|
+
}
|
|
431
|
+
if (this._urgency !== undefined) {
|
|
432
|
+
hasAnyValues = true;
|
|
433
|
+
internalValueResult.urgency = this._urgency;
|
|
434
|
+
}
|
|
435
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
436
|
+
}
|
|
437
|
+
set internalValue(value) {
|
|
438
|
+
if (value === undefined) {
|
|
439
|
+
this.isEmptyObject = false;
|
|
440
|
+
this._type = undefined;
|
|
441
|
+
this._urgency = undefined;
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
445
|
+
this._type = value.type;
|
|
446
|
+
this._urgency = value.urgency;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
get type() {
|
|
450
|
+
return this.getStringAttribute('type');
|
|
451
|
+
}
|
|
452
|
+
set type(value) {
|
|
453
|
+
this._type = value;
|
|
454
|
+
}
|
|
455
|
+
resetType() {
|
|
456
|
+
this._type = undefined;
|
|
457
|
+
}
|
|
458
|
+
// Temporarily expose input value. Use with caution.
|
|
459
|
+
get typeInput() {
|
|
460
|
+
return this._type;
|
|
461
|
+
}
|
|
462
|
+
get urgency() {
|
|
463
|
+
return this.getStringAttribute('urgency');
|
|
464
|
+
}
|
|
465
|
+
set urgency(value) {
|
|
466
|
+
this._urgency = value;
|
|
467
|
+
}
|
|
468
|
+
resetUrgency() {
|
|
469
|
+
this._urgency = undefined;
|
|
470
|
+
}
|
|
471
|
+
// Temporarily expose input value. Use with caution.
|
|
472
|
+
get urgencyInput() {
|
|
473
|
+
return this._urgency;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
exports.ServiceIncidentUrgencyRuleDuringSupportHoursOutputReference = ServiceIncidentUrgencyRuleDuringSupportHoursOutputReference;
|
|
477
|
+
_d = JSII_RTTI_SYMBOL_1;
|
|
478
|
+
ServiceIncidentUrgencyRuleDuringSupportHoursOutputReference[_d] = { fqn: "@cdktn/provider-pagerduty.service.ServiceIncidentUrgencyRuleDuringSupportHoursOutputReference", version: "15.0.0" };
|
|
479
|
+
function serviceIncidentUrgencyRuleOutsideSupportHoursToTerraform(struct) {
|
|
480
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
481
|
+
return struct;
|
|
482
|
+
}
|
|
483
|
+
if (cdktn.isComplexElement(struct)) {
|
|
484
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
485
|
+
}
|
|
486
|
+
return {
|
|
487
|
+
type: cdktn.stringToTerraform(struct.type),
|
|
488
|
+
urgency: cdktn.stringToTerraform(struct.urgency),
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
function serviceIncidentUrgencyRuleOutsideSupportHoursToHclTerraform(struct) {
|
|
492
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
493
|
+
return struct;
|
|
494
|
+
}
|
|
495
|
+
if (cdktn.isComplexElement(struct)) {
|
|
496
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
497
|
+
}
|
|
498
|
+
const attrs = {
|
|
499
|
+
type: {
|
|
500
|
+
value: cdktn.stringToHclTerraform(struct.type),
|
|
501
|
+
isBlock: false,
|
|
502
|
+
type: "simple",
|
|
503
|
+
storageClassType: "string",
|
|
504
|
+
},
|
|
505
|
+
urgency: {
|
|
506
|
+
value: cdktn.stringToHclTerraform(struct.urgency),
|
|
507
|
+
isBlock: false,
|
|
508
|
+
type: "simple",
|
|
509
|
+
storageClassType: "string",
|
|
510
|
+
},
|
|
511
|
+
};
|
|
512
|
+
// remove undefined attributes
|
|
513
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
514
|
+
}
|
|
515
|
+
class ServiceIncidentUrgencyRuleOutsideSupportHoursOutputReference extends cdktn.ComplexObject {
|
|
516
|
+
/**
|
|
517
|
+
* @param terraformResource The parent resource
|
|
518
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
519
|
+
*/
|
|
520
|
+
constructor(terraformResource, terraformAttribute) {
|
|
521
|
+
super(terraformResource, terraformAttribute, false, 0);
|
|
522
|
+
this.isEmptyObject = false;
|
|
523
|
+
}
|
|
524
|
+
get internalValue() {
|
|
525
|
+
let hasAnyValues = this.isEmptyObject;
|
|
526
|
+
const internalValueResult = {};
|
|
527
|
+
if (this._type !== undefined) {
|
|
528
|
+
hasAnyValues = true;
|
|
529
|
+
internalValueResult.type = this._type;
|
|
530
|
+
}
|
|
531
|
+
if (this._urgency !== undefined) {
|
|
532
|
+
hasAnyValues = true;
|
|
533
|
+
internalValueResult.urgency = this._urgency;
|
|
534
|
+
}
|
|
535
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
536
|
+
}
|
|
537
|
+
set internalValue(value) {
|
|
538
|
+
if (value === undefined) {
|
|
539
|
+
this.isEmptyObject = false;
|
|
540
|
+
this._type = undefined;
|
|
541
|
+
this._urgency = undefined;
|
|
542
|
+
}
|
|
543
|
+
else {
|
|
544
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
545
|
+
this._type = value.type;
|
|
546
|
+
this._urgency = value.urgency;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
get type() {
|
|
550
|
+
return this.getStringAttribute('type');
|
|
551
|
+
}
|
|
552
|
+
set type(value) {
|
|
553
|
+
this._type = value;
|
|
554
|
+
}
|
|
555
|
+
resetType() {
|
|
556
|
+
this._type = undefined;
|
|
557
|
+
}
|
|
558
|
+
// Temporarily expose input value. Use with caution.
|
|
559
|
+
get typeInput() {
|
|
560
|
+
return this._type;
|
|
561
|
+
}
|
|
562
|
+
get urgency() {
|
|
563
|
+
return this.getStringAttribute('urgency');
|
|
564
|
+
}
|
|
565
|
+
set urgency(value) {
|
|
566
|
+
this._urgency = value;
|
|
567
|
+
}
|
|
568
|
+
resetUrgency() {
|
|
569
|
+
this._urgency = undefined;
|
|
570
|
+
}
|
|
571
|
+
// Temporarily expose input value. Use with caution.
|
|
572
|
+
get urgencyInput() {
|
|
573
|
+
return this._urgency;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
exports.ServiceIncidentUrgencyRuleOutsideSupportHoursOutputReference = ServiceIncidentUrgencyRuleOutsideSupportHoursOutputReference;
|
|
577
|
+
_e = JSII_RTTI_SYMBOL_1;
|
|
578
|
+
ServiceIncidentUrgencyRuleOutsideSupportHoursOutputReference[_e] = { fqn: "@cdktn/provider-pagerduty.service.ServiceIncidentUrgencyRuleOutsideSupportHoursOutputReference", version: "15.0.0" };
|
|
579
|
+
function serviceIncidentUrgencyRuleToTerraform(struct) {
|
|
580
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
581
|
+
return struct;
|
|
582
|
+
}
|
|
583
|
+
if (cdktn.isComplexElement(struct)) {
|
|
584
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
585
|
+
}
|
|
586
|
+
return {
|
|
587
|
+
type: cdktn.stringToTerraform(struct.type),
|
|
588
|
+
urgency: cdktn.stringToTerraform(struct.urgency),
|
|
589
|
+
during_support_hours: serviceIncidentUrgencyRuleDuringSupportHoursToTerraform(struct.duringSupportHours),
|
|
590
|
+
outside_support_hours: serviceIncidentUrgencyRuleOutsideSupportHoursToTerraform(struct.outsideSupportHours),
|
|
591
|
+
};
|
|
592
|
+
}
|
|
593
|
+
function serviceIncidentUrgencyRuleToHclTerraform(struct) {
|
|
594
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
595
|
+
return struct;
|
|
596
|
+
}
|
|
597
|
+
if (cdktn.isComplexElement(struct)) {
|
|
598
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
599
|
+
}
|
|
600
|
+
const attrs = {
|
|
601
|
+
type: {
|
|
602
|
+
value: cdktn.stringToHclTerraform(struct.type),
|
|
603
|
+
isBlock: false,
|
|
604
|
+
type: "simple",
|
|
605
|
+
storageClassType: "string",
|
|
606
|
+
},
|
|
607
|
+
urgency: {
|
|
608
|
+
value: cdktn.stringToHclTerraform(struct.urgency),
|
|
609
|
+
isBlock: false,
|
|
610
|
+
type: "simple",
|
|
611
|
+
storageClassType: "string",
|
|
612
|
+
},
|
|
613
|
+
during_support_hours: {
|
|
614
|
+
value: serviceIncidentUrgencyRuleDuringSupportHoursToHclTerraform(struct.duringSupportHours),
|
|
615
|
+
isBlock: true,
|
|
616
|
+
type: "list",
|
|
617
|
+
storageClassType: "ServiceIncidentUrgencyRuleDuringSupportHoursList",
|
|
618
|
+
},
|
|
619
|
+
outside_support_hours: {
|
|
620
|
+
value: serviceIncidentUrgencyRuleOutsideSupportHoursToHclTerraform(struct.outsideSupportHours),
|
|
621
|
+
isBlock: true,
|
|
622
|
+
type: "list",
|
|
623
|
+
storageClassType: "ServiceIncidentUrgencyRuleOutsideSupportHoursList",
|
|
624
|
+
},
|
|
625
|
+
};
|
|
626
|
+
// remove undefined attributes
|
|
627
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
628
|
+
}
|
|
629
|
+
class ServiceIncidentUrgencyRuleOutputReference extends cdktn.ComplexObject {
|
|
630
|
+
/**
|
|
631
|
+
* @param terraformResource The parent resource
|
|
632
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
633
|
+
*/
|
|
634
|
+
constructor(terraformResource, terraformAttribute) {
|
|
635
|
+
super(terraformResource, terraformAttribute, false, 0);
|
|
636
|
+
this.isEmptyObject = false;
|
|
637
|
+
// during_support_hours - computed: false, optional: true, required: false
|
|
638
|
+
this._duringSupportHours = new ServiceIncidentUrgencyRuleDuringSupportHoursOutputReference(this, "during_support_hours");
|
|
639
|
+
// outside_support_hours - computed: false, optional: true, required: false
|
|
640
|
+
this._outsideSupportHours = new ServiceIncidentUrgencyRuleOutsideSupportHoursOutputReference(this, "outside_support_hours");
|
|
641
|
+
}
|
|
642
|
+
get internalValue() {
|
|
643
|
+
let hasAnyValues = this.isEmptyObject;
|
|
644
|
+
const internalValueResult = {};
|
|
645
|
+
if (this._type !== undefined) {
|
|
646
|
+
hasAnyValues = true;
|
|
647
|
+
internalValueResult.type = this._type;
|
|
648
|
+
}
|
|
649
|
+
if (this._urgency !== undefined) {
|
|
650
|
+
hasAnyValues = true;
|
|
651
|
+
internalValueResult.urgency = this._urgency;
|
|
652
|
+
}
|
|
653
|
+
if (this._duringSupportHours?.internalValue !== undefined) {
|
|
654
|
+
hasAnyValues = true;
|
|
655
|
+
internalValueResult.duringSupportHours = this._duringSupportHours?.internalValue;
|
|
656
|
+
}
|
|
657
|
+
if (this._outsideSupportHours?.internalValue !== undefined) {
|
|
658
|
+
hasAnyValues = true;
|
|
659
|
+
internalValueResult.outsideSupportHours = this._outsideSupportHours?.internalValue;
|
|
660
|
+
}
|
|
661
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
662
|
+
}
|
|
663
|
+
set internalValue(value) {
|
|
664
|
+
if (value === undefined) {
|
|
665
|
+
this.isEmptyObject = false;
|
|
666
|
+
this._type = undefined;
|
|
667
|
+
this._urgency = undefined;
|
|
668
|
+
this._duringSupportHours.internalValue = undefined;
|
|
669
|
+
this._outsideSupportHours.internalValue = undefined;
|
|
670
|
+
}
|
|
671
|
+
else {
|
|
672
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
673
|
+
this._type = value.type;
|
|
674
|
+
this._urgency = value.urgency;
|
|
675
|
+
this._duringSupportHours.internalValue = value.duringSupportHours;
|
|
676
|
+
this._outsideSupportHours.internalValue = value.outsideSupportHours;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
get type() {
|
|
680
|
+
return this.getStringAttribute('type');
|
|
681
|
+
}
|
|
682
|
+
set type(value) {
|
|
683
|
+
this._type = value;
|
|
684
|
+
}
|
|
685
|
+
// Temporarily expose input value. Use with caution.
|
|
686
|
+
get typeInput() {
|
|
687
|
+
return this._type;
|
|
688
|
+
}
|
|
689
|
+
get urgency() {
|
|
690
|
+
return this.getStringAttribute('urgency');
|
|
691
|
+
}
|
|
692
|
+
set urgency(value) {
|
|
693
|
+
this._urgency = value;
|
|
694
|
+
}
|
|
695
|
+
resetUrgency() {
|
|
696
|
+
this._urgency = undefined;
|
|
697
|
+
}
|
|
698
|
+
// Temporarily expose input value. Use with caution.
|
|
699
|
+
get urgencyInput() {
|
|
700
|
+
return this._urgency;
|
|
701
|
+
}
|
|
702
|
+
get duringSupportHours() {
|
|
703
|
+
return this._duringSupportHours;
|
|
704
|
+
}
|
|
705
|
+
putDuringSupportHours(value) {
|
|
706
|
+
this._duringSupportHours.internalValue = value;
|
|
707
|
+
}
|
|
708
|
+
resetDuringSupportHours() {
|
|
709
|
+
this._duringSupportHours.internalValue = undefined;
|
|
710
|
+
}
|
|
711
|
+
// Temporarily expose input value. Use with caution.
|
|
712
|
+
get duringSupportHoursInput() {
|
|
713
|
+
return this._duringSupportHours.internalValue;
|
|
714
|
+
}
|
|
715
|
+
get outsideSupportHours() {
|
|
716
|
+
return this._outsideSupportHours;
|
|
717
|
+
}
|
|
718
|
+
putOutsideSupportHours(value) {
|
|
719
|
+
this._outsideSupportHours.internalValue = value;
|
|
720
|
+
}
|
|
721
|
+
resetOutsideSupportHours() {
|
|
722
|
+
this._outsideSupportHours.internalValue = undefined;
|
|
723
|
+
}
|
|
724
|
+
// Temporarily expose input value. Use with caution.
|
|
725
|
+
get outsideSupportHoursInput() {
|
|
726
|
+
return this._outsideSupportHours.internalValue;
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
exports.ServiceIncidentUrgencyRuleOutputReference = ServiceIncidentUrgencyRuleOutputReference;
|
|
730
|
+
_f = JSII_RTTI_SYMBOL_1;
|
|
731
|
+
ServiceIncidentUrgencyRuleOutputReference[_f] = { fqn: "@cdktn/provider-pagerduty.service.ServiceIncidentUrgencyRuleOutputReference", version: "15.0.0" };
|
|
732
|
+
function serviceScheduledActionsAtToTerraform(struct) {
|
|
733
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
734
|
+
return struct;
|
|
735
|
+
}
|
|
736
|
+
if (cdktn.isComplexElement(struct)) {
|
|
737
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
738
|
+
}
|
|
739
|
+
return {
|
|
740
|
+
name: cdktn.stringToTerraform(struct.name),
|
|
741
|
+
type: cdktn.stringToTerraform(struct.type),
|
|
742
|
+
};
|
|
743
|
+
}
|
|
744
|
+
function serviceScheduledActionsAtToHclTerraform(struct) {
|
|
745
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
746
|
+
return struct;
|
|
747
|
+
}
|
|
748
|
+
if (cdktn.isComplexElement(struct)) {
|
|
749
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
750
|
+
}
|
|
751
|
+
const attrs = {
|
|
752
|
+
name: {
|
|
753
|
+
value: cdktn.stringToHclTerraform(struct.name),
|
|
754
|
+
isBlock: false,
|
|
755
|
+
type: "simple",
|
|
756
|
+
storageClassType: "string",
|
|
757
|
+
},
|
|
758
|
+
type: {
|
|
759
|
+
value: cdktn.stringToHclTerraform(struct.type),
|
|
760
|
+
isBlock: false,
|
|
761
|
+
type: "simple",
|
|
762
|
+
storageClassType: "string",
|
|
763
|
+
},
|
|
764
|
+
};
|
|
765
|
+
// remove undefined attributes
|
|
766
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
767
|
+
}
|
|
768
|
+
class ServiceScheduledActionsAtOutputReference extends cdktn.ComplexObject {
|
|
769
|
+
/**
|
|
770
|
+
* @param terraformResource The parent resource
|
|
771
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
772
|
+
* @param complexObjectIndex the index of this item in the list
|
|
773
|
+
* @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
774
|
+
*/
|
|
775
|
+
constructor(terraformResource, terraformAttribute, complexObjectIndex, complexObjectIsFromSet) {
|
|
776
|
+
super(terraformResource, terraformAttribute, complexObjectIsFromSet, complexObjectIndex);
|
|
777
|
+
this.isEmptyObject = false;
|
|
778
|
+
}
|
|
779
|
+
get internalValue() {
|
|
780
|
+
if (this.resolvableValue) {
|
|
781
|
+
return this.resolvableValue;
|
|
782
|
+
}
|
|
783
|
+
let hasAnyValues = this.isEmptyObject;
|
|
784
|
+
const internalValueResult = {};
|
|
785
|
+
if (this._name !== undefined) {
|
|
786
|
+
hasAnyValues = true;
|
|
787
|
+
internalValueResult.name = this._name;
|
|
788
|
+
}
|
|
789
|
+
if (this._type !== undefined) {
|
|
790
|
+
hasAnyValues = true;
|
|
791
|
+
internalValueResult.type = this._type;
|
|
792
|
+
}
|
|
793
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
794
|
+
}
|
|
795
|
+
set internalValue(value) {
|
|
796
|
+
if (value === undefined) {
|
|
797
|
+
this.isEmptyObject = false;
|
|
798
|
+
this.resolvableValue = undefined;
|
|
799
|
+
this._name = undefined;
|
|
800
|
+
this._type = undefined;
|
|
801
|
+
}
|
|
802
|
+
else if (cdktn.Tokenization.isResolvable(value)) {
|
|
803
|
+
this.isEmptyObject = false;
|
|
804
|
+
this.resolvableValue = value;
|
|
805
|
+
}
|
|
806
|
+
else {
|
|
807
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
808
|
+
this.resolvableValue = undefined;
|
|
809
|
+
this._name = value.name;
|
|
810
|
+
this._type = value.type;
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
get name() {
|
|
814
|
+
return this.getStringAttribute('name');
|
|
815
|
+
}
|
|
816
|
+
set name(value) {
|
|
817
|
+
this._name = value;
|
|
818
|
+
}
|
|
819
|
+
resetName() {
|
|
820
|
+
this._name = undefined;
|
|
821
|
+
}
|
|
822
|
+
// Temporarily expose input value. Use with caution.
|
|
823
|
+
get nameInput() {
|
|
824
|
+
return this._name;
|
|
825
|
+
}
|
|
826
|
+
get type() {
|
|
827
|
+
return this.getStringAttribute('type');
|
|
828
|
+
}
|
|
829
|
+
set type(value) {
|
|
830
|
+
this._type = value;
|
|
831
|
+
}
|
|
832
|
+
resetType() {
|
|
833
|
+
this._type = undefined;
|
|
834
|
+
}
|
|
835
|
+
// Temporarily expose input value. Use with caution.
|
|
836
|
+
get typeInput() {
|
|
837
|
+
return this._type;
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
exports.ServiceScheduledActionsAtOutputReference = ServiceScheduledActionsAtOutputReference;
|
|
841
|
+
_g = JSII_RTTI_SYMBOL_1;
|
|
842
|
+
ServiceScheduledActionsAtOutputReference[_g] = { fqn: "@cdktn/provider-pagerduty.service.ServiceScheduledActionsAtOutputReference", version: "15.0.0" };
|
|
843
|
+
class ServiceScheduledActionsAtList extends cdktn.ComplexList {
|
|
844
|
+
/**
|
|
845
|
+
* @param terraformResource The parent resource
|
|
846
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
847
|
+
* @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
848
|
+
*/
|
|
849
|
+
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
850
|
+
super(terraformResource, terraformAttribute, wrapsSet);
|
|
851
|
+
this.terraformResource = terraformResource;
|
|
852
|
+
this.terraformAttribute = terraformAttribute;
|
|
853
|
+
this.wrapsSet = wrapsSet;
|
|
854
|
+
}
|
|
855
|
+
/**
|
|
856
|
+
* @param index the index of the item to return
|
|
857
|
+
*/
|
|
858
|
+
get(index) {
|
|
859
|
+
return new ServiceScheduledActionsAtOutputReference(this.terraformResource, this.terraformAttribute, index, this.wrapsSet);
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
exports.ServiceScheduledActionsAtList = ServiceScheduledActionsAtList;
|
|
863
|
+
_h = JSII_RTTI_SYMBOL_1;
|
|
864
|
+
ServiceScheduledActionsAtList[_h] = { fqn: "@cdktn/provider-pagerduty.service.ServiceScheduledActionsAtList", version: "15.0.0" };
|
|
865
|
+
function serviceScheduledActionsToTerraform(struct) {
|
|
866
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
867
|
+
return struct;
|
|
868
|
+
}
|
|
869
|
+
if (cdktn.isComplexElement(struct)) {
|
|
870
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
871
|
+
}
|
|
872
|
+
return {
|
|
873
|
+
to_urgency: cdktn.stringToTerraform(struct.toUrgency),
|
|
874
|
+
type: cdktn.stringToTerraform(struct.type),
|
|
875
|
+
at: cdktn.listMapper(serviceScheduledActionsAtToTerraform, true)(struct.at),
|
|
876
|
+
};
|
|
877
|
+
}
|
|
878
|
+
function serviceScheduledActionsToHclTerraform(struct) {
|
|
879
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
880
|
+
return struct;
|
|
881
|
+
}
|
|
882
|
+
if (cdktn.isComplexElement(struct)) {
|
|
883
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
884
|
+
}
|
|
885
|
+
const attrs = {
|
|
886
|
+
to_urgency: {
|
|
887
|
+
value: cdktn.stringToHclTerraform(struct.toUrgency),
|
|
888
|
+
isBlock: false,
|
|
889
|
+
type: "simple",
|
|
890
|
+
storageClassType: "string",
|
|
891
|
+
},
|
|
892
|
+
type: {
|
|
893
|
+
value: cdktn.stringToHclTerraform(struct.type),
|
|
894
|
+
isBlock: false,
|
|
895
|
+
type: "simple",
|
|
896
|
+
storageClassType: "string",
|
|
897
|
+
},
|
|
898
|
+
at: {
|
|
899
|
+
value: cdktn.listMapperHcl(serviceScheduledActionsAtToHclTerraform, true)(struct.at),
|
|
900
|
+
isBlock: true,
|
|
901
|
+
type: "list",
|
|
902
|
+
storageClassType: "ServiceScheduledActionsAtList",
|
|
903
|
+
},
|
|
904
|
+
};
|
|
905
|
+
// remove undefined attributes
|
|
906
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
907
|
+
}
|
|
908
|
+
class ServiceScheduledActionsOutputReference extends cdktn.ComplexObject {
|
|
909
|
+
/**
|
|
910
|
+
* @param terraformResource The parent resource
|
|
911
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
912
|
+
* @param complexObjectIndex the index of this item in the list
|
|
913
|
+
* @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
914
|
+
*/
|
|
915
|
+
constructor(terraformResource, terraformAttribute, complexObjectIndex, complexObjectIsFromSet) {
|
|
916
|
+
super(terraformResource, terraformAttribute, complexObjectIsFromSet, complexObjectIndex);
|
|
917
|
+
this.isEmptyObject = false;
|
|
918
|
+
// at - computed: false, optional: true, required: false
|
|
919
|
+
this._at = new ServiceScheduledActionsAtList(this, "at", false);
|
|
920
|
+
}
|
|
921
|
+
get internalValue() {
|
|
922
|
+
if (this.resolvableValue) {
|
|
923
|
+
return this.resolvableValue;
|
|
924
|
+
}
|
|
925
|
+
let hasAnyValues = this.isEmptyObject;
|
|
926
|
+
const internalValueResult = {};
|
|
927
|
+
if (this._toUrgency !== undefined) {
|
|
928
|
+
hasAnyValues = true;
|
|
929
|
+
internalValueResult.toUrgency = this._toUrgency;
|
|
930
|
+
}
|
|
931
|
+
if (this._type !== undefined) {
|
|
932
|
+
hasAnyValues = true;
|
|
933
|
+
internalValueResult.type = this._type;
|
|
934
|
+
}
|
|
935
|
+
if (this._at?.internalValue !== undefined) {
|
|
936
|
+
hasAnyValues = true;
|
|
937
|
+
internalValueResult.at = this._at?.internalValue;
|
|
938
|
+
}
|
|
939
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
940
|
+
}
|
|
941
|
+
set internalValue(value) {
|
|
942
|
+
if (value === undefined) {
|
|
943
|
+
this.isEmptyObject = false;
|
|
944
|
+
this.resolvableValue = undefined;
|
|
945
|
+
this._toUrgency = undefined;
|
|
946
|
+
this._type = undefined;
|
|
947
|
+
this._at.internalValue = undefined;
|
|
948
|
+
}
|
|
949
|
+
else if (cdktn.Tokenization.isResolvable(value)) {
|
|
950
|
+
this.isEmptyObject = false;
|
|
951
|
+
this.resolvableValue = value;
|
|
952
|
+
}
|
|
953
|
+
else {
|
|
954
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
955
|
+
this.resolvableValue = undefined;
|
|
956
|
+
this._toUrgency = value.toUrgency;
|
|
957
|
+
this._type = value.type;
|
|
958
|
+
this._at.internalValue = value.at;
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
get toUrgency() {
|
|
962
|
+
return this.getStringAttribute('to_urgency');
|
|
963
|
+
}
|
|
964
|
+
set toUrgency(value) {
|
|
965
|
+
this._toUrgency = value;
|
|
966
|
+
}
|
|
967
|
+
resetToUrgency() {
|
|
968
|
+
this._toUrgency = undefined;
|
|
969
|
+
}
|
|
970
|
+
// Temporarily expose input value. Use with caution.
|
|
971
|
+
get toUrgencyInput() {
|
|
972
|
+
return this._toUrgency;
|
|
973
|
+
}
|
|
974
|
+
get type() {
|
|
975
|
+
return this.getStringAttribute('type');
|
|
976
|
+
}
|
|
977
|
+
set type(value) {
|
|
978
|
+
this._type = value;
|
|
979
|
+
}
|
|
980
|
+
resetType() {
|
|
981
|
+
this._type = undefined;
|
|
982
|
+
}
|
|
983
|
+
// Temporarily expose input value. Use with caution.
|
|
984
|
+
get typeInput() {
|
|
985
|
+
return this._type;
|
|
986
|
+
}
|
|
987
|
+
get at() {
|
|
988
|
+
return this._at;
|
|
989
|
+
}
|
|
990
|
+
putAt(value) {
|
|
991
|
+
this._at.internalValue = value;
|
|
992
|
+
}
|
|
993
|
+
resetAt() {
|
|
994
|
+
this._at.internalValue = undefined;
|
|
995
|
+
}
|
|
996
|
+
// Temporarily expose input value. Use with caution.
|
|
997
|
+
get atInput() {
|
|
998
|
+
return this._at.internalValue;
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
exports.ServiceScheduledActionsOutputReference = ServiceScheduledActionsOutputReference;
|
|
1002
|
+
_j = JSII_RTTI_SYMBOL_1;
|
|
1003
|
+
ServiceScheduledActionsOutputReference[_j] = { fqn: "@cdktn/provider-pagerduty.service.ServiceScheduledActionsOutputReference", version: "15.0.0" };
|
|
1004
|
+
class ServiceScheduledActionsList extends cdktn.ComplexList {
|
|
1005
|
+
/**
|
|
1006
|
+
* @param terraformResource The parent resource
|
|
1007
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
1008
|
+
* @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
1009
|
+
*/
|
|
1010
|
+
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
1011
|
+
super(terraformResource, terraformAttribute, wrapsSet);
|
|
1012
|
+
this.terraformResource = terraformResource;
|
|
1013
|
+
this.terraformAttribute = terraformAttribute;
|
|
1014
|
+
this.wrapsSet = wrapsSet;
|
|
1015
|
+
}
|
|
1016
|
+
/**
|
|
1017
|
+
* @param index the index of the item to return
|
|
1018
|
+
*/
|
|
1019
|
+
get(index) {
|
|
1020
|
+
return new ServiceScheduledActionsOutputReference(this.terraformResource, this.terraformAttribute, index, this.wrapsSet);
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
exports.ServiceScheduledActionsList = ServiceScheduledActionsList;
|
|
1024
|
+
_k = JSII_RTTI_SYMBOL_1;
|
|
1025
|
+
ServiceScheduledActionsList[_k] = { fqn: "@cdktn/provider-pagerduty.service.ServiceScheduledActionsList", version: "15.0.0" };
|
|
1026
|
+
function serviceSupportHoursToTerraform(struct) {
|
|
1027
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
1028
|
+
return struct;
|
|
1029
|
+
}
|
|
1030
|
+
if (cdktn.isComplexElement(struct)) {
|
|
1031
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
1032
|
+
}
|
|
1033
|
+
return {
|
|
1034
|
+
days_of_week: cdktn.listMapper(cdktn.numberToTerraform, false)(struct.daysOfWeek),
|
|
1035
|
+
end_time: cdktn.stringToTerraform(struct.endTime),
|
|
1036
|
+
start_time: cdktn.stringToTerraform(struct.startTime),
|
|
1037
|
+
time_zone: cdktn.stringToTerraform(struct.timeZone),
|
|
1038
|
+
type: cdktn.stringToTerraform(struct.type),
|
|
1039
|
+
};
|
|
1040
|
+
}
|
|
1041
|
+
function serviceSupportHoursToHclTerraform(struct) {
|
|
1042
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
1043
|
+
return struct;
|
|
1044
|
+
}
|
|
1045
|
+
if (cdktn.isComplexElement(struct)) {
|
|
1046
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
1047
|
+
}
|
|
1048
|
+
const attrs = {
|
|
1049
|
+
days_of_week: {
|
|
1050
|
+
value: cdktn.listMapperHcl(cdktn.numberToHclTerraform, false)(struct.daysOfWeek),
|
|
1051
|
+
isBlock: false,
|
|
1052
|
+
type: "list",
|
|
1053
|
+
storageClassType: "numberList",
|
|
1054
|
+
},
|
|
1055
|
+
end_time: {
|
|
1056
|
+
value: cdktn.stringToHclTerraform(struct.endTime),
|
|
1057
|
+
isBlock: false,
|
|
1058
|
+
type: "simple",
|
|
1059
|
+
storageClassType: "string",
|
|
1060
|
+
},
|
|
1061
|
+
start_time: {
|
|
1062
|
+
value: cdktn.stringToHclTerraform(struct.startTime),
|
|
1063
|
+
isBlock: false,
|
|
1064
|
+
type: "simple",
|
|
1065
|
+
storageClassType: "string",
|
|
1066
|
+
},
|
|
1067
|
+
time_zone: {
|
|
1068
|
+
value: cdktn.stringToHclTerraform(struct.timeZone),
|
|
1069
|
+
isBlock: false,
|
|
1070
|
+
type: "simple",
|
|
1071
|
+
storageClassType: "string",
|
|
1072
|
+
},
|
|
1073
|
+
type: {
|
|
1074
|
+
value: cdktn.stringToHclTerraform(struct.type),
|
|
1075
|
+
isBlock: false,
|
|
1076
|
+
type: "simple",
|
|
1077
|
+
storageClassType: "string",
|
|
1078
|
+
},
|
|
1079
|
+
};
|
|
1080
|
+
// remove undefined attributes
|
|
1081
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
1082
|
+
}
|
|
1083
|
+
class ServiceSupportHoursOutputReference extends cdktn.ComplexObject {
|
|
1084
|
+
/**
|
|
1085
|
+
* @param terraformResource The parent resource
|
|
1086
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
1087
|
+
*/
|
|
1088
|
+
constructor(terraformResource, terraformAttribute) {
|
|
1089
|
+
super(terraformResource, terraformAttribute, false, 0);
|
|
1090
|
+
this.isEmptyObject = false;
|
|
1091
|
+
}
|
|
1092
|
+
get internalValue() {
|
|
1093
|
+
let hasAnyValues = this.isEmptyObject;
|
|
1094
|
+
const internalValueResult = {};
|
|
1095
|
+
if (this._daysOfWeek !== undefined) {
|
|
1096
|
+
hasAnyValues = true;
|
|
1097
|
+
internalValueResult.daysOfWeek = this._daysOfWeek;
|
|
1098
|
+
}
|
|
1099
|
+
if (this._endTime !== undefined) {
|
|
1100
|
+
hasAnyValues = true;
|
|
1101
|
+
internalValueResult.endTime = this._endTime;
|
|
1102
|
+
}
|
|
1103
|
+
if (this._startTime !== undefined) {
|
|
1104
|
+
hasAnyValues = true;
|
|
1105
|
+
internalValueResult.startTime = this._startTime;
|
|
1106
|
+
}
|
|
1107
|
+
if (this._timeZone !== undefined) {
|
|
1108
|
+
hasAnyValues = true;
|
|
1109
|
+
internalValueResult.timeZone = this._timeZone;
|
|
1110
|
+
}
|
|
1111
|
+
if (this._type !== undefined) {
|
|
1112
|
+
hasAnyValues = true;
|
|
1113
|
+
internalValueResult.type = this._type;
|
|
1114
|
+
}
|
|
1115
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
1116
|
+
}
|
|
1117
|
+
set internalValue(value) {
|
|
1118
|
+
if (value === undefined) {
|
|
1119
|
+
this.isEmptyObject = false;
|
|
1120
|
+
this._daysOfWeek = undefined;
|
|
1121
|
+
this._endTime = undefined;
|
|
1122
|
+
this._startTime = undefined;
|
|
1123
|
+
this._timeZone = undefined;
|
|
1124
|
+
this._type = undefined;
|
|
1125
|
+
}
|
|
1126
|
+
else {
|
|
1127
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
1128
|
+
this._daysOfWeek = value.daysOfWeek;
|
|
1129
|
+
this._endTime = value.endTime;
|
|
1130
|
+
this._startTime = value.startTime;
|
|
1131
|
+
this._timeZone = value.timeZone;
|
|
1132
|
+
this._type = value.type;
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
get daysOfWeek() {
|
|
1136
|
+
return this.getNumberListAttribute('days_of_week');
|
|
1137
|
+
}
|
|
1138
|
+
set daysOfWeek(value) {
|
|
1139
|
+
this._daysOfWeek = value;
|
|
1140
|
+
}
|
|
1141
|
+
resetDaysOfWeek() {
|
|
1142
|
+
this._daysOfWeek = undefined;
|
|
1143
|
+
}
|
|
1144
|
+
// Temporarily expose input value. Use with caution.
|
|
1145
|
+
get daysOfWeekInput() {
|
|
1146
|
+
return this._daysOfWeek;
|
|
1147
|
+
}
|
|
1148
|
+
get endTime() {
|
|
1149
|
+
return this.getStringAttribute('end_time');
|
|
1150
|
+
}
|
|
1151
|
+
set endTime(value) {
|
|
1152
|
+
this._endTime = value;
|
|
1153
|
+
}
|
|
1154
|
+
resetEndTime() {
|
|
1155
|
+
this._endTime = undefined;
|
|
1156
|
+
}
|
|
1157
|
+
// Temporarily expose input value. Use with caution.
|
|
1158
|
+
get endTimeInput() {
|
|
1159
|
+
return this._endTime;
|
|
1160
|
+
}
|
|
1161
|
+
get startTime() {
|
|
1162
|
+
return this.getStringAttribute('start_time');
|
|
1163
|
+
}
|
|
1164
|
+
set startTime(value) {
|
|
1165
|
+
this._startTime = value;
|
|
1166
|
+
}
|
|
1167
|
+
resetStartTime() {
|
|
1168
|
+
this._startTime = undefined;
|
|
1169
|
+
}
|
|
1170
|
+
// Temporarily expose input value. Use with caution.
|
|
1171
|
+
get startTimeInput() {
|
|
1172
|
+
return this._startTime;
|
|
1173
|
+
}
|
|
1174
|
+
get timeZone() {
|
|
1175
|
+
return this.getStringAttribute('time_zone');
|
|
1176
|
+
}
|
|
1177
|
+
set timeZone(value) {
|
|
1178
|
+
this._timeZone = value;
|
|
1179
|
+
}
|
|
1180
|
+
resetTimeZone() {
|
|
1181
|
+
this._timeZone = undefined;
|
|
1182
|
+
}
|
|
1183
|
+
// Temporarily expose input value. Use with caution.
|
|
1184
|
+
get timeZoneInput() {
|
|
1185
|
+
return this._timeZone;
|
|
1186
|
+
}
|
|
1187
|
+
get type() {
|
|
1188
|
+
return this.getStringAttribute('type');
|
|
1189
|
+
}
|
|
1190
|
+
set type(value) {
|
|
1191
|
+
this._type = value;
|
|
1192
|
+
}
|
|
1193
|
+
resetType() {
|
|
1194
|
+
this._type = undefined;
|
|
1195
|
+
}
|
|
1196
|
+
// Temporarily expose input value. Use with caution.
|
|
1197
|
+
get typeInput() {
|
|
1198
|
+
return this._type;
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
exports.ServiceSupportHoursOutputReference = ServiceSupportHoursOutputReference;
|
|
1202
|
+
_l = JSII_RTTI_SYMBOL_1;
|
|
1203
|
+
ServiceSupportHoursOutputReference[_l] = { fqn: "@cdktn/provider-pagerduty.service.ServiceSupportHoursOutputReference", version: "15.0.0" };
|
|
1204
|
+
/**
|
|
1205
|
+
* Represents a {@link https://registry.terraform.io/providers/pagerduty/pagerduty/3.31.0/docs/resources/service pagerduty_service}
|
|
1206
|
+
*/
|
|
1207
|
+
class Service extends cdktn.TerraformResource {
|
|
1208
|
+
// ==============
|
|
1209
|
+
// STATIC Methods
|
|
1210
|
+
// ==============
|
|
1211
|
+
/**
|
|
1212
|
+
* Generates CDKTN code for importing a Service resource upon running "cdktn plan <stack-name>"
|
|
1213
|
+
* @param scope The scope in which to define this construct
|
|
1214
|
+
* @param importToId The construct id used in the generated config for the Service to import
|
|
1215
|
+
* @param importFromId The id of the existing Service that should be imported. Refer to the {@link https://registry.terraform.io/providers/pagerduty/pagerduty/3.31.0/docs/resources/service#import import section} in the documentation of this resource for the id to use
|
|
1216
|
+
* @param provider? Optional instance of the provider where the Service to import is found
|
|
1217
|
+
*/
|
|
1218
|
+
static generateConfigForImport(scope, importToId, importFromId, provider) {
|
|
1219
|
+
return new cdktn.ImportableResource(scope, importToId, { terraformResourceType: "pagerduty_service", importId: importFromId, provider });
|
|
1220
|
+
}
|
|
1221
|
+
// ===========
|
|
1222
|
+
// INITIALIZER
|
|
1223
|
+
// ===========
|
|
1224
|
+
/**
|
|
1225
|
+
* Create a new {@link https://registry.terraform.io/providers/pagerduty/pagerduty/3.31.0/docs/resources/service pagerduty_service} Resource
|
|
1226
|
+
*
|
|
1227
|
+
* @param scope The scope in which to define this construct
|
|
1228
|
+
* @param id The scoped construct ID. Must be unique amongst siblings in the same scope
|
|
1229
|
+
* @param options ServiceConfig
|
|
1230
|
+
*/
|
|
1231
|
+
constructor(scope, id, config) {
|
|
1232
|
+
super(scope, id, {
|
|
1233
|
+
terraformResourceType: 'pagerduty_service',
|
|
1234
|
+
terraformGeneratorMetadata: {
|
|
1235
|
+
providerName: 'pagerduty',
|
|
1236
|
+
providerVersion: '3.31.0',
|
|
1237
|
+
providerVersionConstraint: '~> 3.0'
|
|
1238
|
+
},
|
|
1239
|
+
provider: config.provider,
|
|
1240
|
+
dependsOn: config.dependsOn,
|
|
1241
|
+
count: config.count,
|
|
1242
|
+
lifecycle: config.lifecycle,
|
|
1243
|
+
provisioners: config.provisioners,
|
|
1244
|
+
connection: config.connection,
|
|
1245
|
+
forEach: config.forEach
|
|
1246
|
+
});
|
|
1247
|
+
// alert_grouping_parameters - computed: false, optional: true, required: false
|
|
1248
|
+
this._alertGroupingParameters = new ServiceAlertGroupingParametersOutputReference(this, "alert_grouping_parameters");
|
|
1249
|
+
// auto_pause_notifications_parameters - computed: false, optional: true, required: false
|
|
1250
|
+
this._autoPauseNotificationsParameters = new ServiceAutoPauseNotificationsParametersOutputReference(this, "auto_pause_notifications_parameters");
|
|
1251
|
+
// incident_urgency_rule - computed: false, optional: true, required: false
|
|
1252
|
+
this._incidentUrgencyRule = new ServiceIncidentUrgencyRuleOutputReference(this, "incident_urgency_rule");
|
|
1253
|
+
// scheduled_actions - computed: false, optional: true, required: false
|
|
1254
|
+
this._scheduledActions = new ServiceScheduledActionsList(this, "scheduled_actions", false);
|
|
1255
|
+
// support_hours - computed: false, optional: true, required: false
|
|
1256
|
+
this._supportHours = new ServiceSupportHoursOutputReference(this, "support_hours");
|
|
1257
|
+
this._acknowledgementTimeout = config.acknowledgementTimeout;
|
|
1258
|
+
this._alertCreation = config.alertCreation;
|
|
1259
|
+
this._alertGrouping = config.alertGrouping;
|
|
1260
|
+
this._alertGroupingTimeout = config.alertGroupingTimeout;
|
|
1261
|
+
this._autoResolveTimeout = config.autoResolveTimeout;
|
|
1262
|
+
this._description = config.description;
|
|
1263
|
+
this._escalationPolicy = config.escalationPolicy;
|
|
1264
|
+
this._id = config.id;
|
|
1265
|
+
this._name = config.name;
|
|
1266
|
+
this._responsePlay = config.responsePlay;
|
|
1267
|
+
this._alertGroupingParameters.internalValue = config.alertGroupingParameters;
|
|
1268
|
+
this._autoPauseNotificationsParameters.internalValue = config.autoPauseNotificationsParameters;
|
|
1269
|
+
this._incidentUrgencyRule.internalValue = config.incidentUrgencyRule;
|
|
1270
|
+
this._scheduledActions.internalValue = config.scheduledActions;
|
|
1271
|
+
this._supportHours.internalValue = config.supportHours;
|
|
1272
|
+
}
|
|
1273
|
+
get acknowledgementTimeout() {
|
|
1274
|
+
return this.getStringAttribute('acknowledgement_timeout');
|
|
1275
|
+
}
|
|
1276
|
+
set acknowledgementTimeout(value) {
|
|
1277
|
+
this._acknowledgementTimeout = value;
|
|
1278
|
+
}
|
|
1279
|
+
resetAcknowledgementTimeout() {
|
|
1280
|
+
this._acknowledgementTimeout = undefined;
|
|
1281
|
+
}
|
|
1282
|
+
// Temporarily expose input value. Use with caution.
|
|
1283
|
+
get acknowledgementTimeoutInput() {
|
|
1284
|
+
return this._acknowledgementTimeout;
|
|
1285
|
+
}
|
|
1286
|
+
get alertCreation() {
|
|
1287
|
+
return this.getStringAttribute('alert_creation');
|
|
1288
|
+
}
|
|
1289
|
+
set alertCreation(value) {
|
|
1290
|
+
this._alertCreation = value;
|
|
1291
|
+
}
|
|
1292
|
+
resetAlertCreation() {
|
|
1293
|
+
this._alertCreation = undefined;
|
|
1294
|
+
}
|
|
1295
|
+
// Temporarily expose input value. Use with caution.
|
|
1296
|
+
get alertCreationInput() {
|
|
1297
|
+
return this._alertCreation;
|
|
1298
|
+
}
|
|
1299
|
+
get alertGrouping() {
|
|
1300
|
+
return this.getStringAttribute('alert_grouping');
|
|
1301
|
+
}
|
|
1302
|
+
set alertGrouping(value) {
|
|
1303
|
+
this._alertGrouping = value;
|
|
1304
|
+
}
|
|
1305
|
+
resetAlertGrouping() {
|
|
1306
|
+
this._alertGrouping = undefined;
|
|
1307
|
+
}
|
|
1308
|
+
// Temporarily expose input value. Use with caution.
|
|
1309
|
+
get alertGroupingInput() {
|
|
1310
|
+
return this._alertGrouping;
|
|
1311
|
+
}
|
|
1312
|
+
get alertGroupingTimeout() {
|
|
1313
|
+
return this.getStringAttribute('alert_grouping_timeout');
|
|
1314
|
+
}
|
|
1315
|
+
set alertGroupingTimeout(value) {
|
|
1316
|
+
this._alertGroupingTimeout = value;
|
|
1317
|
+
}
|
|
1318
|
+
resetAlertGroupingTimeout() {
|
|
1319
|
+
this._alertGroupingTimeout = undefined;
|
|
1320
|
+
}
|
|
1321
|
+
// Temporarily expose input value. Use with caution.
|
|
1322
|
+
get alertGroupingTimeoutInput() {
|
|
1323
|
+
return this._alertGroupingTimeout;
|
|
1324
|
+
}
|
|
1325
|
+
get autoResolveTimeout() {
|
|
1326
|
+
return this.getStringAttribute('auto_resolve_timeout');
|
|
1327
|
+
}
|
|
1328
|
+
set autoResolveTimeout(value) {
|
|
1329
|
+
this._autoResolveTimeout = value;
|
|
1330
|
+
}
|
|
1331
|
+
resetAutoResolveTimeout() {
|
|
1332
|
+
this._autoResolveTimeout = undefined;
|
|
1333
|
+
}
|
|
1334
|
+
// Temporarily expose input value. Use with caution.
|
|
1335
|
+
get autoResolveTimeoutInput() {
|
|
1336
|
+
return this._autoResolveTimeout;
|
|
1337
|
+
}
|
|
1338
|
+
// created_at - computed: true, optional: false, required: false
|
|
1339
|
+
get createdAt() {
|
|
1340
|
+
return this.getStringAttribute('created_at');
|
|
1341
|
+
}
|
|
1342
|
+
get description() {
|
|
1343
|
+
return this.getStringAttribute('description');
|
|
1344
|
+
}
|
|
1345
|
+
set description(value) {
|
|
1346
|
+
this._description = value;
|
|
1347
|
+
}
|
|
1348
|
+
resetDescription() {
|
|
1349
|
+
this._description = undefined;
|
|
1350
|
+
}
|
|
1351
|
+
// Temporarily expose input value. Use with caution.
|
|
1352
|
+
get descriptionInput() {
|
|
1353
|
+
return this._description;
|
|
1354
|
+
}
|
|
1355
|
+
get escalationPolicy() {
|
|
1356
|
+
return this.getStringAttribute('escalation_policy');
|
|
1357
|
+
}
|
|
1358
|
+
set escalationPolicy(value) {
|
|
1359
|
+
this._escalationPolicy = value;
|
|
1360
|
+
}
|
|
1361
|
+
// Temporarily expose input value. Use with caution.
|
|
1362
|
+
get escalationPolicyInput() {
|
|
1363
|
+
return this._escalationPolicy;
|
|
1364
|
+
}
|
|
1365
|
+
// html_url - computed: true, optional: false, required: false
|
|
1366
|
+
get htmlUrl() {
|
|
1367
|
+
return this.getStringAttribute('html_url');
|
|
1368
|
+
}
|
|
1369
|
+
get id() {
|
|
1370
|
+
return this.getStringAttribute('id');
|
|
1371
|
+
}
|
|
1372
|
+
set id(value) {
|
|
1373
|
+
this._id = value;
|
|
1374
|
+
}
|
|
1375
|
+
resetId() {
|
|
1376
|
+
this._id = undefined;
|
|
1377
|
+
}
|
|
1378
|
+
// Temporarily expose input value. Use with caution.
|
|
1379
|
+
get idInput() {
|
|
1380
|
+
return this._id;
|
|
1381
|
+
}
|
|
1382
|
+
// last_incident_timestamp - computed: true, optional: false, required: false
|
|
1383
|
+
get lastIncidentTimestamp() {
|
|
1384
|
+
return this.getStringAttribute('last_incident_timestamp');
|
|
1385
|
+
}
|
|
1386
|
+
get name() {
|
|
1387
|
+
return this.getStringAttribute('name');
|
|
1388
|
+
}
|
|
1389
|
+
set name(value) {
|
|
1390
|
+
this._name = value;
|
|
1391
|
+
}
|
|
1392
|
+
// Temporarily expose input value. Use with caution.
|
|
1393
|
+
get nameInput() {
|
|
1394
|
+
return this._name;
|
|
1395
|
+
}
|
|
1396
|
+
get responsePlay() {
|
|
1397
|
+
return this.getStringAttribute('response_play');
|
|
1398
|
+
}
|
|
1399
|
+
set responsePlay(value) {
|
|
1400
|
+
this._responsePlay = value;
|
|
1401
|
+
}
|
|
1402
|
+
resetResponsePlay() {
|
|
1403
|
+
this._responsePlay = undefined;
|
|
1404
|
+
}
|
|
1405
|
+
// Temporarily expose input value. Use with caution.
|
|
1406
|
+
get responsePlayInput() {
|
|
1407
|
+
return this._responsePlay;
|
|
1408
|
+
}
|
|
1409
|
+
// status - computed: true, optional: false, required: false
|
|
1410
|
+
get status() {
|
|
1411
|
+
return this.getStringAttribute('status');
|
|
1412
|
+
}
|
|
1413
|
+
// type - computed: true, optional: false, required: false
|
|
1414
|
+
get type() {
|
|
1415
|
+
return this.getStringAttribute('type');
|
|
1416
|
+
}
|
|
1417
|
+
get alertGroupingParameters() {
|
|
1418
|
+
return this._alertGroupingParameters;
|
|
1419
|
+
}
|
|
1420
|
+
putAlertGroupingParameters(value) {
|
|
1421
|
+
this._alertGroupingParameters.internalValue = value;
|
|
1422
|
+
}
|
|
1423
|
+
resetAlertGroupingParameters() {
|
|
1424
|
+
this._alertGroupingParameters.internalValue = undefined;
|
|
1425
|
+
}
|
|
1426
|
+
// Temporarily expose input value. Use with caution.
|
|
1427
|
+
get alertGroupingParametersInput() {
|
|
1428
|
+
return this._alertGroupingParameters.internalValue;
|
|
1429
|
+
}
|
|
1430
|
+
get autoPauseNotificationsParameters() {
|
|
1431
|
+
return this._autoPauseNotificationsParameters;
|
|
1432
|
+
}
|
|
1433
|
+
putAutoPauseNotificationsParameters(value) {
|
|
1434
|
+
this._autoPauseNotificationsParameters.internalValue = value;
|
|
1435
|
+
}
|
|
1436
|
+
resetAutoPauseNotificationsParameters() {
|
|
1437
|
+
this._autoPauseNotificationsParameters.internalValue = undefined;
|
|
1438
|
+
}
|
|
1439
|
+
// Temporarily expose input value. Use with caution.
|
|
1440
|
+
get autoPauseNotificationsParametersInput() {
|
|
1441
|
+
return this._autoPauseNotificationsParameters.internalValue;
|
|
1442
|
+
}
|
|
1443
|
+
get incidentUrgencyRule() {
|
|
1444
|
+
return this._incidentUrgencyRule;
|
|
1445
|
+
}
|
|
1446
|
+
putIncidentUrgencyRule(value) {
|
|
1447
|
+
this._incidentUrgencyRule.internalValue = value;
|
|
1448
|
+
}
|
|
1449
|
+
resetIncidentUrgencyRule() {
|
|
1450
|
+
this._incidentUrgencyRule.internalValue = undefined;
|
|
1451
|
+
}
|
|
1452
|
+
// Temporarily expose input value. Use with caution.
|
|
1453
|
+
get incidentUrgencyRuleInput() {
|
|
1454
|
+
return this._incidentUrgencyRule.internalValue;
|
|
1455
|
+
}
|
|
1456
|
+
get scheduledActions() {
|
|
1457
|
+
return this._scheduledActions;
|
|
1458
|
+
}
|
|
1459
|
+
putScheduledActions(value) {
|
|
1460
|
+
this._scheduledActions.internalValue = value;
|
|
1461
|
+
}
|
|
1462
|
+
resetScheduledActions() {
|
|
1463
|
+
this._scheduledActions.internalValue = undefined;
|
|
1464
|
+
}
|
|
1465
|
+
// Temporarily expose input value. Use with caution.
|
|
1466
|
+
get scheduledActionsInput() {
|
|
1467
|
+
return this._scheduledActions.internalValue;
|
|
1468
|
+
}
|
|
1469
|
+
get supportHours() {
|
|
1470
|
+
return this._supportHours;
|
|
1471
|
+
}
|
|
1472
|
+
putSupportHours(value) {
|
|
1473
|
+
this._supportHours.internalValue = value;
|
|
1474
|
+
}
|
|
1475
|
+
resetSupportHours() {
|
|
1476
|
+
this._supportHours.internalValue = undefined;
|
|
1477
|
+
}
|
|
1478
|
+
// Temporarily expose input value. Use with caution.
|
|
1479
|
+
get supportHoursInput() {
|
|
1480
|
+
return this._supportHours.internalValue;
|
|
1481
|
+
}
|
|
1482
|
+
// =========
|
|
1483
|
+
// SYNTHESIS
|
|
1484
|
+
// =========
|
|
1485
|
+
synthesizeAttributes() {
|
|
1486
|
+
return {
|
|
1487
|
+
acknowledgement_timeout: cdktn.stringToTerraform(this._acknowledgementTimeout),
|
|
1488
|
+
alert_creation: cdktn.stringToTerraform(this._alertCreation),
|
|
1489
|
+
alert_grouping: cdktn.stringToTerraform(this._alertGrouping),
|
|
1490
|
+
alert_grouping_timeout: cdktn.stringToTerraform(this._alertGroupingTimeout),
|
|
1491
|
+
auto_resolve_timeout: cdktn.stringToTerraform(this._autoResolveTimeout),
|
|
1492
|
+
description: cdktn.stringToTerraform(this._description),
|
|
1493
|
+
escalation_policy: cdktn.stringToTerraform(this._escalationPolicy),
|
|
1494
|
+
id: cdktn.stringToTerraform(this._id),
|
|
1495
|
+
name: cdktn.stringToTerraform(this._name),
|
|
1496
|
+
response_play: cdktn.stringToTerraform(this._responsePlay),
|
|
1497
|
+
alert_grouping_parameters: serviceAlertGroupingParametersToTerraform(this._alertGroupingParameters.internalValue),
|
|
1498
|
+
auto_pause_notifications_parameters: serviceAutoPauseNotificationsParametersToTerraform(this._autoPauseNotificationsParameters.internalValue),
|
|
1499
|
+
incident_urgency_rule: serviceIncidentUrgencyRuleToTerraform(this._incidentUrgencyRule.internalValue),
|
|
1500
|
+
scheduled_actions: cdktn.listMapper(serviceScheduledActionsToTerraform, true)(this._scheduledActions.internalValue),
|
|
1501
|
+
support_hours: serviceSupportHoursToTerraform(this._supportHours.internalValue),
|
|
1502
|
+
};
|
|
1503
|
+
}
|
|
1504
|
+
synthesizeHclAttributes() {
|
|
1505
|
+
const attrs = {
|
|
1506
|
+
acknowledgement_timeout: {
|
|
1507
|
+
value: cdktn.stringToHclTerraform(this._acknowledgementTimeout),
|
|
1508
|
+
isBlock: false,
|
|
1509
|
+
type: "simple",
|
|
1510
|
+
storageClassType: "string",
|
|
1511
|
+
},
|
|
1512
|
+
alert_creation: {
|
|
1513
|
+
value: cdktn.stringToHclTerraform(this._alertCreation),
|
|
1514
|
+
isBlock: false,
|
|
1515
|
+
type: "simple",
|
|
1516
|
+
storageClassType: "string",
|
|
1517
|
+
},
|
|
1518
|
+
alert_grouping: {
|
|
1519
|
+
value: cdktn.stringToHclTerraform(this._alertGrouping),
|
|
1520
|
+
isBlock: false,
|
|
1521
|
+
type: "simple",
|
|
1522
|
+
storageClassType: "string",
|
|
1523
|
+
},
|
|
1524
|
+
alert_grouping_timeout: {
|
|
1525
|
+
value: cdktn.stringToHclTerraform(this._alertGroupingTimeout),
|
|
1526
|
+
isBlock: false,
|
|
1527
|
+
type: "simple",
|
|
1528
|
+
storageClassType: "string",
|
|
1529
|
+
},
|
|
1530
|
+
auto_resolve_timeout: {
|
|
1531
|
+
value: cdktn.stringToHclTerraform(this._autoResolveTimeout),
|
|
1532
|
+
isBlock: false,
|
|
1533
|
+
type: "simple",
|
|
1534
|
+
storageClassType: "string",
|
|
1535
|
+
},
|
|
1536
|
+
description: {
|
|
1537
|
+
value: cdktn.stringToHclTerraform(this._description),
|
|
1538
|
+
isBlock: false,
|
|
1539
|
+
type: "simple",
|
|
1540
|
+
storageClassType: "string",
|
|
1541
|
+
},
|
|
1542
|
+
escalation_policy: {
|
|
1543
|
+
value: cdktn.stringToHclTerraform(this._escalationPolicy),
|
|
1544
|
+
isBlock: false,
|
|
1545
|
+
type: "simple",
|
|
1546
|
+
storageClassType: "string",
|
|
1547
|
+
},
|
|
1548
|
+
id: {
|
|
1549
|
+
value: cdktn.stringToHclTerraform(this._id),
|
|
1550
|
+
isBlock: false,
|
|
1551
|
+
type: "simple",
|
|
1552
|
+
storageClassType: "string",
|
|
1553
|
+
},
|
|
1554
|
+
name: {
|
|
1555
|
+
value: cdktn.stringToHclTerraform(this._name),
|
|
1556
|
+
isBlock: false,
|
|
1557
|
+
type: "simple",
|
|
1558
|
+
storageClassType: "string",
|
|
1559
|
+
},
|
|
1560
|
+
response_play: {
|
|
1561
|
+
value: cdktn.stringToHclTerraform(this._responsePlay),
|
|
1562
|
+
isBlock: false,
|
|
1563
|
+
type: "simple",
|
|
1564
|
+
storageClassType: "string",
|
|
1565
|
+
},
|
|
1566
|
+
alert_grouping_parameters: {
|
|
1567
|
+
value: serviceAlertGroupingParametersToHclTerraform(this._alertGroupingParameters.internalValue),
|
|
1568
|
+
isBlock: true,
|
|
1569
|
+
type: "list",
|
|
1570
|
+
storageClassType: "ServiceAlertGroupingParametersList",
|
|
1571
|
+
},
|
|
1572
|
+
auto_pause_notifications_parameters: {
|
|
1573
|
+
value: serviceAutoPauseNotificationsParametersToHclTerraform(this._autoPauseNotificationsParameters.internalValue),
|
|
1574
|
+
isBlock: true,
|
|
1575
|
+
type: "list",
|
|
1576
|
+
storageClassType: "ServiceAutoPauseNotificationsParametersList",
|
|
1577
|
+
},
|
|
1578
|
+
incident_urgency_rule: {
|
|
1579
|
+
value: serviceIncidentUrgencyRuleToHclTerraform(this._incidentUrgencyRule.internalValue),
|
|
1580
|
+
isBlock: true,
|
|
1581
|
+
type: "list",
|
|
1582
|
+
storageClassType: "ServiceIncidentUrgencyRuleList",
|
|
1583
|
+
},
|
|
1584
|
+
scheduled_actions: {
|
|
1585
|
+
value: cdktn.listMapperHcl(serviceScheduledActionsToHclTerraform, true)(this._scheduledActions.internalValue),
|
|
1586
|
+
isBlock: true,
|
|
1587
|
+
type: "list",
|
|
1588
|
+
storageClassType: "ServiceScheduledActionsList",
|
|
1589
|
+
},
|
|
1590
|
+
support_hours: {
|
|
1591
|
+
value: serviceSupportHoursToHclTerraform(this._supportHours.internalValue),
|
|
1592
|
+
isBlock: true,
|
|
1593
|
+
type: "list",
|
|
1594
|
+
storageClassType: "ServiceSupportHoursList",
|
|
1595
|
+
},
|
|
1596
|
+
};
|
|
1597
|
+
// remove undefined attributes
|
|
1598
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
1599
|
+
}
|
|
1600
|
+
}
|
|
1601
|
+
exports.Service = Service;
|
|
1602
|
+
_m = JSII_RTTI_SYMBOL_1;
|
|
1603
|
+
Service[_m] = { fqn: "@cdktn/provider-pagerduty.service.Service", version: "15.0.0" };
|
|
1604
|
+
// =================
|
|
1605
|
+
// STATIC PROPERTIES
|
|
1606
|
+
// =================
|
|
1607
|
+
Service.tfResourceType = "pagerduty_service";
|
|
1608
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBMkdBLDBHQVdDO0FBR0QsZ0hBa0NDO0FBaUlELDhGQVNDO0FBR0Qsb0dBc0JDO0FBbUZELGdIQVNDO0FBR0Qsc0hBc0JDO0FBbUZELDBIQVNDO0FBR0QsZ0lBc0JDO0FBbUZELDRIQVNDO0FBR0Qsa0lBc0JDO0FBK0ZELHNGQVdDO0FBR0QsNEZBa0NDO0FBNEhELG9GQVNDO0FBR0QsMEZBc0JDO0FBeUhELGdGQVVDO0FBR0Qsc0ZBNEJDO0FBcUpELHdFQVlDO0FBR0QsOEVBd0NDOztBQS95Q0QsK0JBQStCO0FBa0cvQixTQUFnQiwrQ0FBK0MsQ0FBQyxNQUFtRztJQUNqSyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxNQUFNLENBQUM7SUFBQyxDQUFDO0lBQzVGLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvSEFBb0gsQ0FBQyxDQUFDO0lBQ3hJLENBQUM7SUFDRCxPQUFPO1FBQ0wsU0FBUyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3JELE1BQU0sRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3hFLFdBQVcsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLFVBQVUsQ0FBQztRQUN4RCxPQUFPLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU8sQ0FBQyxPQUFPLENBQUM7S0FDbEQsQ0FB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TyxFQUFFLElBQUk7Z0JBQ2IsSUFBSSxFQUFFLE1BQU07Z0JBQ1osZ0JBQWdCLEVBQUUsNkJBQTZCO2FBQ2hEO1lBQ0QsYUFBYSxFQUFFO2dCQUNiLEtBQUssRUFBRSxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztnQkFDMUUsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsSUFBSSxFQUFFLE1BQU07Z0JBQ1osZ0JBQWdCLEVBQUUseUJBQXlCO2FBQzVDO1NBQ0YsQ0FBQztRQUVGLDhCQUE4QjtRQUM5QixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBRSxDQUFDLENBQUE7SUFDNUgsQ0FBQzs7QUFoY0gsMEJBaWNDOzs7QUEvYkMsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDRyxzQkFBYyxHQUFHLG1CQUFtQixBQUF0QixDQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDIxLCAyMDI2XG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbi8vIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlXG4vLyBnZW5lcmF0ZWQgZnJvbSB0ZXJyYWZvcm0gcmVzb3VyY2Ugc2NoZW1hXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgY2RrdG4gZnJvbSAnY2RrdG4nO1xuXG4vLyBDb25maWd1cmF0aW9uXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbmZpZyBleHRlbmRzIGNka3RuLlRlcnJhZm9ybU1ldGFBcmd1bWVudHMge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlI2Fja25vd2xlZGdlbWVudF90aW1lb3V0IFNlcnZpY2UjYWNrbm93bGVkZ2VtZW50X3RpbWVvdXR9XG4gICovXG4gIHJlYWRvbmx5IGFja25vd2xlZGdlbWVudFRpbWVvdXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjYWxlcnRfY3JlYXRpb24gU2VydmljZSNhbGVydF9jcmVhdGlvbn1cbiAgKi9cbiAgcmVhZG9ubHkgYWxlcnRDcmVhdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvc2VydmljZSNhbGVydF9ncm91cGluZyBTZXJ2aWNlI2FsZXJ0X2dyb3VwaW5nfVxuICAqL1xuICByZWFkb25seSBhbGVydEdyb3VwaW5nPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlI2FsZXJ0X2dyb3VwaW5nX3RpbWVvdXQgU2VydmljZSNhbGVydF9ncm91cGluZ190aW1lb3V0fVxuICAqL1xuICByZWFkb25seSBhbGVydEdyb3VwaW5nVGltZW91dD86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvc2VydmljZSNhdXRvX3Jlc29sdmVfdGltZW91dCBTZXJ2aWNlI2F1dG9fcmVzb2x2ZV90aW1lb3V0fVxuICAqL1xuICByZWFkb25seSBhdXRvUmVzb2x2ZVRpbWVvdXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjZGVzY3JpcHRpb24gU2VydmljZSNkZXNjcmlwdGlvbn1cbiAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjZXNjYWxhdGlvbl9wb2xpY3kgU2VydmljZSNlc2NhbGF0aW9uX3BvbGljeX1cbiAgKi9cbiAgcmVhZG9ubHkgZXNjYWxhdGlvblBvbGljeTogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlI2lkIFNlcnZpY2UjaWR9XG4gICpcbiAgKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgaWQgZmllbGQgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byBhbGwgcmVzb3VyY2VzIGluIFRlcnJhZm9ybSBwcm92aWRlcnMgdXNpbmcgYSBUZXJyYWZvcm0gcHJvdmlkZXIgU0RLIHZlcnNpb24gYmVsb3cgMi5cbiAgKiBJZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcyBzZXR0aW5nIHRoaXMgdmFsdWUgaXQgbWlnaHQgbm90IGJlIHNldHRhYmxlLiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgdGhlIHByb3ZpZGVyIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIGl0IHNob3VsZCBiZSBzZXR0YWJsZS5cbiAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjbmFtZSBTZXJ2aWNlI25hbWV9XG4gICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvc2VydmljZSNyZXNwb25zZV9wbGF5IFNlcnZpY2UjcmVzcG9uc2VfcGxheX1cbiAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VQbGF5Pzogc3RyaW5nO1xuICAvKipcbiAgKiBhbGVydF9ncm91cGluZ19wYXJhbWV0ZXJzIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlI2FsZXJ0X2dyb3VwaW5nX3BhcmFtZXRlcnMgU2VydmljZSNhbGVydF9ncm91cGluZ19wYXJhbWV0ZXJzfVxuICAqL1xuICByZWFkb25seSBhbGVydEdyb3VwaW5nUGFyYW1ldGVycz86IFNlcnZpY2VBbGVydEdyb3VwaW5nUGFyYW1ldGVycztcbiAgLyoqXG4gICogYXV0b19wYXVzZV9ub3RpZmljYXRpb25zX3BhcmFtZXRlcnMgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjYXV0b19wYXVzZV9ub3RpZmljYXRpb25zX3BhcmFtZXRlcnMgU2VydmljZSNhdXRvX3BhdXNlX25vdGlmaWNhdGlvbnNfcGFyYW1ldGVyc31cbiAgKi9cbiAgcmVhZG9ubHkgYXV0b1BhdXNlTm90aWZpY2F0aW9uc1BhcmFtZXRlcnM/OiBTZXJ2aWNlQXV0b1BhdXNlTm90aWZpY2F0aW9uc1BhcmFtZXRlcnM7XG4gIC8qKlxuICAqIGluY2lkZW50X3VyZ2VuY3lfcnVsZSBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvc2VydmljZSNpbmNpZGVudF91cmdlbmN5X3J1bGUgU2VydmljZSNpbmNpZGVudF91cmdlbmN5X3J1bGV9XG4gICovXG4gIHJlYWRvbmx5IGluY2lkZW50VXJnZW5jeVJ1bGU/OiBTZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZTtcbiAgLyoqXG4gICogc2NoZWR1bGVkX2FjdGlvbnMgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2Ujc2NoZWR1bGVkX2FjdGlvbnMgU2VydmljZSNzY2hlZHVsZWRfYWN0aW9uc31cbiAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGVkQWN0aW9ucz86IFNlcnZpY2VTY2hlZHVsZWRBY3Rpb25zW10gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogc3VwcG9ydF9ob3VycyBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvc2VydmljZSNzdXBwb3J0X2hvdXJzIFNlcnZpY2Ujc3VwcG9ydF9ob3Vyc31cbiAgKi9cbiAgcmVhZG9ubHkgc3VwcG9ydEhvdXJzPzogU2VydmljZVN1cHBvcnRIb3Vycztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUFsZXJ0R3JvdXBpbmdQYXJhbWV0ZXJzQ29uZmlnIHtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvc2VydmljZSNhZ2dyZWdhdGUgU2VydmljZSNhZ2dyZWdhdGV9XG4gICovXG4gIHJlYWRvbmx5IGFnZ3JlZ2F0ZT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvc2VydmljZSNmaWVsZHMgU2VydmljZSNmaWVsZHN9XG4gICovXG4gIHJlYWRvbmx5IGZpZWxkcz86IHN0cmluZ1tdO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlI3RpbWVfd2luZG93IFNlcnZpY2UjdGltZV93aW5kb3d9XG4gICovXG4gIHJlYWRvbmx5IHRpbWVXaW5kb3c/OiBudW1iZXI7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjdGltZW91dCBTZXJ2aWNlI3RpbWVvdXR9XG4gICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnNDb25maWdUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBTZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnNDb25maWdPdXRwdXRSZWZlcmVuY2UgfCBTZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnNDb25maWcpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgYWdncmVnYXRlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLmFnZ3JlZ2F0ZSksXG4gICAgZmllbGRzOiBjZGt0bi5saXN0TWFwcGVyKGNka3RuLnN0cmluZ1RvVGVycmFmb3JtLCBmYWxzZSkoc3RydWN0IS5maWVsZHMpLFxuICAgIHRpbWVfd2luZG93OiBjZGt0bi5udW1iZXJUb1RlcnJhZm9ybShzdHJ1Y3QhLnRpbWVXaW5kb3cpLFxuICAgIHRpbWVvdXQ6IGNka3RuLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEudGltZW91dCksXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZUFsZXJ0R3JvdXBpbmdQYXJhbWV0ZXJzQ29uZmlnVG9IY2xUZXJyYWZvcm0oc3RydWN0PzogU2VydmljZUFsZXJ0R3JvdXBpbmdQYXJhbWV0ZXJzQ29uZmlnT3V0cHV0UmVmZXJlbmNlIHwgU2VydmljZUFsZXJ0R3JvdXBpbmdQYXJhbWV0ZXJzQ29uZmlnKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhdHRycyA9IHtcbiAgICBhZ2dyZWdhdGU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmFnZ3JlZ2F0ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgZmllbGRzOiB7XG4gICAgICB2YWx1ZTogY2RrdG4ubGlzdE1hcHBlckhjbChjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKHN0cnVjdCEuZmllbGRzKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ0xpc3RcIixcbiAgICB9LFxuICAgIHRpbWVfd2luZG93OiB7XG4gICAgICB2YWx1ZTogY2RrdG4ubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS50aW1lV2luZG93KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwibnVtYmVyXCIsXG4gICAgfSxcbiAgICB0aW1lb3V0OiB7XG4gICAgICB2YWx1ZTogY2RrdG4ubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS50aW1lb3V0KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwibnVtYmVyXCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZpY2VBbGVydEdyb3VwaW5nUGFyYW1ldGVyc0NvbmZpZ091dHB1dFJlZmVyZW5jZSBleHRlbmRzIGNka3RuLkNvbXBsZXhPYmplY3Qge1xuICBwcml2YXRlIGlzRW1wdHlPYmplY3QgPSBmYWxzZTtcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCBmYWxzZSwgMCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVybmFsVmFsdWUoKTogU2VydmljZUFsZXJ0R3JvdXBpbmdQYXJhbWV0ZXJzQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgaGFzQW55VmFsdWVzID0gdGhpcy5pc0VtcHR5T2JqZWN0O1xuICAgIGNvbnN0IGludGVybmFsVmFsdWVSZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLl9hZ2dyZWdhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuYWdncmVnYXRlID0gdGhpcy5fYWdncmVnYXRlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZmllbGRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LmZpZWxkcyA9IHRoaXMuX2ZpZWxkcztcbiAgICB9XG4gICAgaWYgKHRoaXMuX3RpbWVXaW5kb3cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQudGltZVdpbmRvdyA9IHRoaXMuX3RpbWVXaW5kb3c7XG4gICAgfVxuICAgIGlmICh0aGlzLl90aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnRpbWVvdXQgPSB0aGlzLl90aW1lb3V0O1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogU2VydmljZUFsZXJ0R3JvdXBpbmdQYXJhbWV0ZXJzQ29uZmlnIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5fYWdncmVnYXRlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZmllbGRzID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdGltZVdpbmRvdyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMuX2FnZ3JlZ2F0ZSA9IHZhbHVlLmFnZ3JlZ2F0ZTtcbiAgICAgIHRoaXMuX2ZpZWxkcyA9IHZhbHVlLmZpZWxkcztcbiAgICAgIHRoaXMuX3RpbWVXaW5kb3cgPSB2YWx1ZS50aW1lV2luZG93O1xuICAgICAgdGhpcy5fdGltZW91dCA9IHZhbHVlLnRpbWVvdXQ7XG4gICAgfVxuICB9XG5cbiAgLy8gYWdncmVnYXRlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2FnZ3JlZ2F0ZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgYWdncmVnYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnYWdncmVnYXRlJyk7XG4gIH1cbiAgcHVibGljIHNldCBhZ2dyZWdhdGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2FnZ3JlZ2F0ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEFnZ3JlZ2F0ZSgpIHtcbiAgICB0aGlzLl9hZ2dyZWdhdGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGFnZ3JlZ2F0ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9hZ2dyZWdhdGU7XG4gIH1cblxuICAvLyBmaWVsZHMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZmllbGRzPzogc3RyaW5nW107IFxuICBwdWJsaWMgZ2V0IGZpZWxkcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMaXN0QXR0cmlidXRlKCdmaWVsZHMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGZpZWxkcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9maWVsZHMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRGaWVsZHMoKSB7XG4gICAgdGhpcy5fZmllbGRzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBmaWVsZHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRzO1xuICB9XG5cbiAgLy8gdGltZV93aW5kb3cgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF90aW1lV2luZG93PzogbnVtYmVyOyBcbiAgcHVibGljIGdldCB0aW1lV2luZG93KCkge1xuICAgIHJldHVybiB0aGlzLmdldE51bWJlckF0dHJpYnV0ZSgndGltZV93aW5kb3cnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpbWVXaW5kb3codmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3RpbWVXaW5kb3cgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRUaW1lV2luZG93KCkge1xuICAgIHRoaXMuX3RpbWVXaW5kb3cgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHRpbWVXaW5kb3dJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZVdpbmRvdztcbiAgfVxuXG4gIC8vIHRpbWVvdXQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdGltZW91dD86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgdGltZW91dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ3RpbWVvdXQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpbWVvdXQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3RpbWVvdXQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRUaW1lb3V0KCkge1xuICAgIHRoaXMuX3RpbWVvdXQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHRpbWVvdXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZW91dDtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnMge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlI3R5cGUgU2VydmljZSN0eXBlfVxuICAqL1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuICAvKipcbiAgKiBjb25maWcgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjY29uZmlnIFNlcnZpY2UjY29uZmlnfVxuICAqL1xuICByZWFkb25seSBjb25maWc/OiBTZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnNDb25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnNUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBTZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnNPdXRwdXRSZWZlcmVuY2UgfCBTZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnMpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgdHlwZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS50eXBlKSxcbiAgICBjb25maWc6IHNlcnZpY2VBbGVydEdyb3VwaW5nUGFyYW1ldGVyc0NvbmZpZ1RvVGVycmFmb3JtKHN0cnVjdCEuY29uZmlnKSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnNUb0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiBTZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnNPdXRwdXRSZWZlcmVuY2UgfCBTZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnMpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIHR5cGU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnR5cGUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIGNvbmZpZzoge1xuICAgICAgdmFsdWU6IHNlcnZpY2VBbGVydEdyb3VwaW5nUGFyYW1ldGVyc0NvbmZpZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuY29uZmlnKSxcbiAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiU2VydmljZUFsZXJ0R3JvdXBpbmdQYXJhbWV0ZXJzQ29uZmlnTGlzdFwiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnNPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IFNlcnZpY2VBbGVydEdyb3VwaW5nUGFyYW1ldGVycyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC50eXBlID0gdGhpcy5fdHlwZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZz8uaW50ZXJuYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5jb25maWcgPSB0aGlzLl9jb25maWc/LmludGVybmFsVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBoYXNBbnlWYWx1ZXMgPyBpbnRlcm5hbFZhbHVlUmVzdWx0IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldCBpbnRlcm5hbFZhbHVlKHZhbHVlOiBTZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnMgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLl90eXBlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fY29uZmlnLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZS50eXBlO1xuICAgICAgdGhpcy5fY29uZmlnLmludGVybmFsVmFsdWUgPSB2YWx1ZS5jb25maWc7XG4gICAgfVxuICB9XG5cbiAgLy8gdHlwZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF90eXBlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgndHlwZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFR5cGUoKSB7XG4gICAgdGhpcy5fdHlwZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdHlwZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgLy8gY29uZmlnIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2NvbmZpZyA9IG5ldyBTZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnNDb25maWdPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJjb25maWdcIik7XG4gIHB1YmxpYyBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gIH1cbiAgcHVibGljIHB1dENvbmZpZyh2YWx1ZTogU2VydmljZUFsZXJ0R3JvdXBpbmdQYXJhbWV0ZXJzQ29uZmlnKSB7XG4gICAgdGhpcy5fY29uZmlnLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRDb25maWcoKSB7XG4gICAgdGhpcy5fY29uZmlnLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGNvbmZpZ0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuaW50ZXJuYWxWYWx1ZTtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQXV0b1BhdXNlTm90aWZpY2F0aW9uc1BhcmFtZXRlcnMge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlI2VuYWJsZWQgU2VydmljZSNlbmFibGVkfVxuICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlI3RpbWVvdXQgU2VydmljZSN0aW1lb3V0fVxuICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZUF1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzVG9UZXJyYWZvcm0oc3RydWN0PzogU2VydmljZUF1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzT3V0cHV0UmVmZXJlbmNlIHwgU2VydmljZUF1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGVuYWJsZWQ6IGNka3RuLmJvb2xlYW5Ub1RlcnJhZm9ybShzdHJ1Y3QhLmVuYWJsZWQpLFxuICAgIHRpbWVvdXQ6IGNka3RuLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEudGltZW91dCksXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZUF1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzVG9IY2xUZXJyYWZvcm0oc3RydWN0PzogU2VydmljZUF1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzT3V0cHV0UmVmZXJlbmNlIHwgU2VydmljZUF1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhdHRycyA9IHtcbiAgICBlbmFibGVkOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uYm9vbGVhblRvSGNsVGVycmFmb3JtKHN0cnVjdCEuZW5hYmxlZCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICB9LFxuICAgIHRpbWVvdXQ6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnRpbWVvdXQpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICB9LFxuICB9O1xuXG4gIC8vIHJlbW92ZSB1bmRlZmluZWQgYXR0cmlidXRlc1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkpO1xufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZUF1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzT3V0cHV0UmVmZXJlbmNlIGV4dGVuZHMgY2RrdG4uQ29tcGxleE9iamVjdCB7XG4gIHByaXZhdGUgaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuXG4gIC8qKlxuICAqIEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlXG4gICogQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ1xuICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodGVycmFmb3JtUmVzb3VyY2U6IGNka3RuLklJbnRlcnBvbGF0aW5nUGFyZW50LCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIGZhbHNlLCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW50ZXJuYWxWYWx1ZSgpOiBTZXJ2aWNlQXV0b1BhdXNlTm90aWZpY2F0aW9uc1BhcmFtZXRlcnMgfCB1bmRlZmluZWQge1xuICAgIGxldCBoYXNBbnlWYWx1ZXMgPSB0aGlzLmlzRW1wdHlPYmplY3Q7XG4gICAgY29uc3QgaW50ZXJuYWxWYWx1ZVJlc3VsdDogYW55ID0ge307XG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuZW5hYmxlZCA9IHRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl90aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnRpbWVvdXQgPSB0aGlzLl90aW1lb3V0O1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogU2VydmljZUF1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5fZW5hYmxlZCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMuX2VuYWJsZWQgPSB2YWx1ZS5lbmFibGVkO1xuICAgICAgdGhpcy5fdGltZW91dCA9IHZhbHVlLnRpbWVvdXQ7XG4gICAgfVxuICB9XG5cbiAgLy8gZW5hYmxlZCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2VuYWJsZWQ/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IGVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnZW5hYmxlZCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgZW5hYmxlZCh2YWx1ZTogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fZW5hYmxlZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEVuYWJsZWQoKSB7XG4gICAgdGhpcy5fZW5hYmxlZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZW5hYmxlZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICB9XG5cbiAgLy8gdGltZW91dCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3RpbWVvdXQ/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IHRpbWVvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCd0aW1lb3V0Jyk7XG4gIH1cbiAgcHVibGljIHNldCB0aW1lb3V0KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl90aW1lb3V0ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VGltZW91dCgpIHtcbiAgICB0aGlzLl90aW1lb3V0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0aW1lb3V0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RpbWVvdXQ7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUluY2lkZW50VXJnZW5jeVJ1bGVEdXJpbmdTdXBwb3J0SG91cnMge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlI3R5cGUgU2VydmljZSN0eXBlfVxuICAqL1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlI3VyZ2VuY3kgU2VydmljZSN1cmdlbmN5fVxuICAqL1xuICByZWFkb25seSB1cmdlbmN5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZUluY2lkZW50VXJnZW5jeVJ1bGVEdXJpbmdTdXBwb3J0SG91cnNUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBTZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZUR1cmluZ1N1cHBvcnRIb3Vyc091dHB1dFJlZmVyZW5jZSB8IFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlRHVyaW5nU3VwcG9ydEhvdXJzKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHR5cGU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEudHlwZSksXG4gICAgdXJnZW5jeTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS51cmdlbmN5KSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZUR1cmluZ1N1cHBvcnRIb3Vyc1RvSGNsVGVycmFmb3JtKHN0cnVjdD86IFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlRHVyaW5nU3VwcG9ydEhvdXJzT3V0cHV0UmVmZXJlbmNlIHwgU2VydmljZUluY2lkZW50VXJnZW5jeVJ1bGVEdXJpbmdTdXBwb3J0SG91cnMpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIHR5cGU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnR5cGUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHVyZ2VuY3k6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnVyZ2VuY3kpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICB9O1xuXG4gIC8vIHJlbW92ZSB1bmRlZmluZWQgYXR0cmlidXRlc1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkpO1xufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZUluY2lkZW50VXJnZW5jeVJ1bGVEdXJpbmdTdXBwb3J0SG91cnNPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlRHVyaW5nU3VwcG9ydEhvdXJzIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgaGFzQW55VmFsdWVzID0gdGhpcy5pc0VtcHR5T2JqZWN0O1xuICAgIGNvbnN0IGludGVybmFsVmFsdWVSZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLl90eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnR5cGUgPSB0aGlzLl90eXBlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdXJnZW5jeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC51cmdlbmN5ID0gdGhpcy5fdXJnZW5jeTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0FueVZhbHVlcyA/IGludGVybmFsVmFsdWVSZXN1bHQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGludGVybmFsVmFsdWUodmFsdWU6IFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlRHVyaW5nU3VwcG9ydEhvdXJzIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5fdHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3VyZ2VuY3kgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZS50eXBlO1xuICAgICAgdGhpcy5fdXJnZW5jeSA9IHZhbHVlLnVyZ2VuY3k7XG4gICAgfVxuICB9XG5cbiAgLy8gdHlwZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF90eXBlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgndHlwZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFR5cGUoKSB7XG4gICAgdGhpcy5fdHlwZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdHlwZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgLy8gdXJnZW5jeSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF91cmdlbmN5Pzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB1cmdlbmN5KCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgndXJnZW5jeScpO1xuICB9XG4gIHB1YmxpYyBzZXQgdXJnZW5jeSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdXJnZW5jeSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFVyZ2VuY3koKSB7XG4gICAgdGhpcy5fdXJnZW5jeSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdXJnZW5jeUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl91cmdlbmN5O1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlT3V0c2lkZVN1cHBvcnRIb3VycyB7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjdHlwZSBTZXJ2aWNlI3R5cGV9XG4gICovXG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjdXJnZW5jeSBTZXJ2aWNlI3VyZ2VuY3l9XG4gICovXG4gIHJlYWRvbmx5IHVyZ2VuY3k/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZU91dHNpZGVTdXBwb3J0SG91cnNUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBTZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZU91dHNpZGVTdXBwb3J0SG91cnNPdXRwdXRSZWZlcmVuY2UgfCBTZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZU91dHNpZGVTdXBwb3J0SG91cnMpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgdHlwZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS50eXBlKSxcbiAgICB1cmdlbmN5OiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnVyZ2VuY3kpLFxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlT3V0c2lkZVN1cHBvcnRIb3Vyc1RvSGNsVGVycmFmb3JtKHN0cnVjdD86IFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlT3V0c2lkZVN1cHBvcnRIb3Vyc091dHB1dFJlZmVyZW5jZSB8IFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlT3V0c2lkZVN1cHBvcnRIb3Vycyk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgYXR0cnMgPSB7XG4gICAgdHlwZToge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEudHlwZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgdXJnZW5jeToge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEudXJnZW5jeSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZU91dHNpZGVTdXBwb3J0SG91cnNPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlT3V0c2lkZVN1cHBvcnRIb3VycyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC50eXBlID0gdGhpcy5fdHlwZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3VyZ2VuY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQudXJnZW5jeSA9IHRoaXMuX3VyZ2VuY3k7XG4gICAgfVxuICAgIHJldHVybiBoYXNBbnlWYWx1ZXMgPyBpbnRlcm5hbFZhbHVlUmVzdWx0IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldCBpbnRlcm5hbFZhbHVlKHZhbHVlOiBTZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZU91dHNpZGVTdXBwb3J0SG91cnMgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLl90eXBlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdXJnZW5jeSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlLnR5cGU7XG4gICAgICB0aGlzLl91cmdlbmN5ID0gdmFsdWUudXJnZW5jeTtcbiAgICB9XG4gIH1cblxuICAvLyB0eXBlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3R5cGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd0eXBlJyk7XG4gIH1cbiAgcHVibGljIHNldCB0eXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VHlwZSgpIHtcbiAgICB0aGlzLl90eXBlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0eXBlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cblxuICAvLyB1cmdlbmN5IC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3VyZ2VuY3k/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHVyZ2VuY3koKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd1cmdlbmN5Jyk7XG4gIH1cbiAgcHVibGljIHNldCB1cmdlbmN5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl91cmdlbmN5ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VXJnZW5jeSgpIHtcbiAgICB0aGlzLl91cmdlbmN5ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB1cmdlbmN5SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VyZ2VuY3k7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUluY2lkZW50VXJnZW5jeVJ1bGUge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlI3R5cGUgU2VydmljZSN0eXBlfVxuICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjdXJnZW5jeSBTZXJ2aWNlI3VyZ2VuY3l9XG4gICovXG4gIHJlYWRvbmx5IHVyZ2VuY3k/OiBzdHJpbmc7XG4gIC8qKlxuICAqIGR1cmluZ19zdXBwb3J0X2hvdXJzIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlI2R1cmluZ19zdXBwb3J0X2hvdXJzIFNlcnZpY2UjZHVyaW5nX3N1cHBvcnRfaG91cnN9XG4gICovXG4gIHJlYWRvbmx5IGR1cmluZ1N1cHBvcnRIb3Vycz86IFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlRHVyaW5nU3VwcG9ydEhvdXJzO1xuICAvKipcbiAgKiBvdXRzaWRlX3N1cHBvcnRfaG91cnMgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2Ujb3V0c2lkZV9zdXBwb3J0X2hvdXJzIFNlcnZpY2Ujb3V0c2lkZV9zdXBwb3J0X2hvdXJzfVxuICAqL1xuICByZWFkb25seSBvdXRzaWRlU3VwcG9ydEhvdXJzPzogU2VydmljZUluY2lkZW50VXJnZW5jeVJ1bGVPdXRzaWRlU3VwcG9ydEhvdXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZUluY2lkZW50VXJnZW5jeVJ1bGVUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBTZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZU91dHB1dFJlZmVyZW5jZSB8IFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHR5cGU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEudHlwZSksXG4gICAgdXJnZW5jeTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS51cmdlbmN5KSxcbiAgICBkdXJpbmdfc3VwcG9ydF9ob3Vyczogc2VydmljZUluY2lkZW50VXJnZW5jeVJ1bGVEdXJpbmdTdXBwb3J0SG91cnNUb1RlcnJhZm9ybShzdHJ1Y3QhLmR1cmluZ1N1cHBvcnRIb3VycyksXG4gICAgb3V0c2lkZV9zdXBwb3J0X2hvdXJzOiBzZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZU91dHNpZGVTdXBwb3J0SG91cnNUb1RlcnJhZm9ybShzdHJ1Y3QhLm91dHNpZGVTdXBwb3J0SG91cnMpLFxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlVG9IY2xUZXJyYWZvcm0oc3RydWN0PzogU2VydmljZUluY2lkZW50VXJnZW5jeVJ1bGVPdXRwdXRSZWZlcmVuY2UgfCBTZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZSk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgYXR0cnMgPSB7XG4gICAgdHlwZToge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEudHlwZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgdXJnZW5jeToge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEudXJnZW5jeSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgZHVyaW5nX3N1cHBvcnRfaG91cnM6IHtcbiAgICAgIHZhbHVlOiBzZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZUR1cmluZ1N1cHBvcnRIb3Vyc1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuZHVyaW5nU3VwcG9ydEhvdXJzKSxcbiAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiU2VydmljZUluY2lkZW50VXJnZW5jeVJ1bGVEdXJpbmdTdXBwb3J0SG91cnNMaXN0XCIsXG4gICAgfSxcbiAgICBvdXRzaWRlX3N1cHBvcnRfaG91cnM6IHtcbiAgICAgIHZhbHVlOiBzZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZU91dHNpZGVTdXBwb3J0SG91cnNUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm91dHNpZGVTdXBwb3J0SG91cnMpLFxuICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJTZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZU91dHNpZGVTdXBwb3J0SG91cnNMaXN0XCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlT3V0cHV0UmVmZXJlbmNlIGV4dGVuZHMgY2RrdG4uQ29tcGxleE9iamVjdCB7XG4gIHByaXZhdGUgaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuXG4gIC8qKlxuICAqIEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlXG4gICogQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ1xuICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodGVycmFmb3JtUmVzb3VyY2U6IGNka3RuLklJbnRlcnBvbGF0aW5nUGFyZW50LCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIGZhbHNlLCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW50ZXJuYWxWYWx1ZSgpOiBTZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC50eXBlID0gdGhpcy5fdHlwZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3VyZ2VuY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQudXJnZW5jeSA9IHRoaXMuX3VyZ2VuY3k7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kdXJpbmdTdXBwb3J0SG91cnM/LmludGVybmFsVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuZHVyaW5nU3VwcG9ydEhvdXJzID0gdGhpcy5fZHVyaW5nU3VwcG9ydEhvdXJzPy5pbnRlcm5hbFZhbHVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fb3V0c2lkZVN1cHBvcnRIb3Vycz8uaW50ZXJuYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5vdXRzaWRlU3VwcG9ydEhvdXJzID0gdGhpcy5fb3V0c2lkZVN1cHBvcnRIb3Vycz8uaW50ZXJuYWxWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0FueVZhbHVlcyA/IGludGVybmFsVmFsdWVSZXN1bHQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGludGVybmFsVmFsdWUodmFsdWU6IFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5fdHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3VyZ2VuY3kgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9kdXJpbmdTdXBwb3J0SG91cnMuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX291dHNpZGVTdXBwb3J0SG91cnMuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlLnR5cGU7XG4gICAgICB0aGlzLl91cmdlbmN5ID0gdmFsdWUudXJnZW5jeTtcbiAgICAgIHRoaXMuX2R1cmluZ1N1cHBvcnRIb3Vycy5pbnRlcm5hbFZhbHVlID0gdmFsdWUuZHVyaW5nU3VwcG9ydEhvdXJzO1xuICAgICAgdGhpcy5fb3V0c2lkZVN1cHBvcnRIb3Vycy5pbnRlcm5hbFZhbHVlID0gdmFsdWUub3V0c2lkZVN1cHBvcnRIb3VycztcbiAgICB9XG4gIH1cblxuICAvLyB0eXBlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX3R5cGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd0eXBlJyk7XG4gIH1cbiAgcHVibGljIHNldCB0eXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHR5cGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIC8vIHVyZ2VuY3kgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdXJnZW5jeT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgdXJnZW5jeSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3VyZ2VuY3knKTtcbiAgfVxuICBwdWJsaWMgc2V0IHVyZ2VuY3kodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3VyZ2VuY3kgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRVcmdlbmN5KCkge1xuICAgIHRoaXMuX3VyZ2VuY3kgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHVyZ2VuY3lJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXJnZW5jeTtcbiAgfVxuXG4gIC8vIGR1cmluZ19zdXBwb3J0X2hvdXJzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2R1cmluZ1N1cHBvcnRIb3VycyA9IG5ldyBTZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZUR1cmluZ1N1cHBvcnRIb3Vyc091dHB1dFJlZmVyZW5jZSh0aGlzLCBcImR1cmluZ19zdXBwb3J0X2hvdXJzXCIpO1xuICBwdWJsaWMgZ2V0IGR1cmluZ1N1cHBvcnRIb3VycygpIHtcbiAgICByZXR1cm4gdGhpcy5fZHVyaW5nU3VwcG9ydEhvdXJzO1xuICB9XG4gIHB1YmxpYyBwdXREdXJpbmdTdXBwb3J0SG91cnModmFsdWU6IFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlRHVyaW5nU3VwcG9ydEhvdXJzKSB7XG4gICAgdGhpcy5fZHVyaW5nU3VwcG9ydEhvdXJzLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREdXJpbmdTdXBwb3J0SG91cnMoKSB7XG4gICAgdGhpcy5fZHVyaW5nU3VwcG9ydEhvdXJzLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGR1cmluZ1N1cHBvcnRIb3Vyc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9kdXJpbmdTdXBwb3J0SG91cnMuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIG91dHNpZGVfc3VwcG9ydF9ob3VycyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9vdXRzaWRlU3VwcG9ydEhvdXJzID0gbmV3IFNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlT3V0c2lkZVN1cHBvcnRIb3Vyc091dHB1dFJlZmVyZW5jZSh0aGlzLCBcIm91dHNpZGVfc3VwcG9ydF9ob3Vyc1wiKTtcbiAgcHVibGljIGdldCBvdXRzaWRlU3VwcG9ydEhvdXJzKCkge1xuICAgIHJldHVybiB0aGlzLl9vdXRzaWRlU3VwcG9ydEhvdXJzO1xuICB9XG4gIHB1YmxpYyBwdXRPdXRzaWRlU3VwcG9ydEhvdXJzKHZhbHVlOiBTZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZU91dHNpZGVTdXBwb3J0SG91cnMpIHtcbiAgICB0aGlzLl9vdXRzaWRlU3VwcG9ydEhvdXJzLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRPdXRzaWRlU3VwcG9ydEhvdXJzKCkge1xuICAgIHRoaXMuX291dHNpZGVTdXBwb3J0SG91cnMuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgb3V0c2lkZVN1cHBvcnRIb3Vyc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9vdXRzaWRlU3VwcG9ydEhvdXJzLmludGVybmFsVmFsdWU7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVNjaGVkdWxlZEFjdGlvbnNBdCB7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjbmFtZSBTZXJ2aWNlI25hbWV9XG4gICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjdHlwZSBTZXJ2aWNlI3R5cGV9XG4gICovXG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlU2NoZWR1bGVkQWN0aW9uc0F0VG9UZXJyYWZvcm0oc3RydWN0PzogU2VydmljZVNjaGVkdWxlZEFjdGlvbnNBdCB8IGNka3RuLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEubmFtZSksXG4gICAgdHlwZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS50eXBlKSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlU2NoZWR1bGVkQWN0aW9uc0F0VG9IY2xUZXJyYWZvcm0oc3RydWN0PzogU2VydmljZVNjaGVkdWxlZEFjdGlvbnNBdCB8IGNka3RuLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhdHRycyA9IHtcbiAgICBuYW1lOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5uYW1lKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICB0eXBlOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS50eXBlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZpY2VTY2hlZHVsZWRBY3Rpb25zQXRPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gIHByaXZhdGUgcmVzb2x2YWJsZVZhbHVlPzogY2RrdG4uSVJlc29sdmFibGU7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICogQHBhcmFtIGNvbXBsZXhPYmplY3RJbmRleCB0aGUgaW5kZXggb2YgdGhpcyBpdGVtIGluIHRoZSBsaXN0XG4gICogQHBhcmFtIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLCBjb21wbGV4T2JqZWN0SW5kZXg6IG51bWJlciwgY29tcGxleE9iamVjdElzRnJvbVNldDogYm9vbGVhbikge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQsIGNvbXBsZXhPYmplY3RJbmRleCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVybmFsVmFsdWUoKTogU2VydmljZVNjaGVkdWxlZEFjdGlvbnNBdCB8IGNka3RuLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5yZXNvbHZhYmxlVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmFibGVWYWx1ZTtcbiAgICB9XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5fbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5uYW1lID0gdGhpcy5fbmFtZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQudHlwZSA9IHRoaXMuX3R5cGU7XG4gICAgfVxuICAgIHJldHVybiBoYXNBbnlWYWx1ZXMgPyBpbnRlcm5hbFZhbHVlUmVzdWx0IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldCBpbnRlcm5hbFZhbHVlKHZhbHVlOiBTZXJ2aWNlU2NoZWR1bGVkQWN0aW9uc0F0IHwgY2RrdG4uSVJlc29sdmFibGUgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX25hbWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl90eXBlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX25hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlLnR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gbmFtZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9uYW1lPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbmFtZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE5hbWUoKSB7XG4gICAgdGhpcy5fbmFtZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbmFtZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgLy8gdHlwZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF90eXBlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgndHlwZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFR5cGUoKSB7XG4gICAgdGhpcy5fdHlwZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdHlwZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlU2NoZWR1bGVkQWN0aW9uc0F0TGlzdCBleHRlbmRzIGNka3RuLkNvbXBsZXhMaXN0IHtcbiAgcHVibGljIGludGVybmFsVmFsdWU/IDogU2VydmljZVNjaGVkdWxlZEFjdGlvbnNBdFtdIHwgY2RrdG4uSVJlc29sdmFibGVcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKiBAcGFyYW0gd3JhcHNTZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpXG4gICovXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZywgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpXG4gIH1cblxuICAvKipcbiAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHJldHVyblxuICAqL1xuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpOiBTZXJ2aWNlU2NoZWR1bGVkQWN0aW9uc0F0T3V0cHV0UmVmZXJlbmNlIHtcbiAgICByZXR1cm4gbmV3IFNlcnZpY2VTY2hlZHVsZWRBY3Rpb25zQXRPdXRwdXRSZWZlcmVuY2UodGhpcy50ZXJyYWZvcm1SZXNvdXJjZSwgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsIGluZGV4LCB0aGlzLndyYXBzU2V0KTtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlU2NoZWR1bGVkQWN0aW9ucyB7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjdG9fdXJnZW5jeSBTZXJ2aWNlI3RvX3VyZ2VuY3l9XG4gICovXG4gIHJlYWRvbmx5IHRvVXJnZW5jeT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvc2VydmljZSN0eXBlIFNlcnZpY2UjdHlwZX1cbiAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcbiAgLyoqXG4gICogYXQgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjYXQgU2VydmljZSNhdH1cbiAgKi9cbiAgcmVhZG9ubHkgYXQ/OiBTZXJ2aWNlU2NoZWR1bGVkQWN0aW9uc0F0W10gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VTY2hlZHVsZWRBY3Rpb25zVG9UZXJyYWZvcm0oc3RydWN0PzogU2VydmljZVNjaGVkdWxlZEFjdGlvbnMgfCBjZGt0bi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0b191cmdlbmN5OiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnRvVXJnZW5jeSksXG4gICAgdHlwZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS50eXBlKSxcbiAgICBhdDogY2RrdG4ubGlzdE1hcHBlcihzZXJ2aWNlU2NoZWR1bGVkQWN0aW9uc0F0VG9UZXJyYWZvcm0sIHRydWUpKHN0cnVjdCEuYXQpLFxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VTY2hlZHVsZWRBY3Rpb25zVG9IY2xUZXJyYWZvcm0oc3RydWN0PzogU2VydmljZVNjaGVkdWxlZEFjdGlvbnMgfCBjZGt0bi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgYXR0cnMgPSB7XG4gICAgdG9fdXJnZW5jeToge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEudG9VcmdlbmN5KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICB0eXBlOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS50eXBlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBhdDoge1xuICAgICAgdmFsdWU6IGNka3RuLmxpc3RNYXBwZXJIY2woc2VydmljZVNjaGVkdWxlZEFjdGlvbnNBdFRvSGNsVGVycmFmb3JtLCB0cnVlKShzdHJ1Y3QhLmF0KSxcbiAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiU2VydmljZVNjaGVkdWxlZEFjdGlvbnNBdExpc3RcIixcbiAgICB9LFxuICB9O1xuXG4gIC8vIHJlbW92ZSB1bmRlZmluZWQgYXR0cmlidXRlc1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkpO1xufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZVNjaGVkdWxlZEFjdGlvbnNPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gIHByaXZhdGUgcmVzb2x2YWJsZVZhbHVlPzogY2RrdG4uSVJlc29sdmFibGU7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICogQHBhcmFtIGNvbXBsZXhPYmplY3RJbmRleCB0aGUgaW5kZXggb2YgdGhpcyBpdGVtIGluIHRoZSBsaXN0XG4gICogQHBhcmFtIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLCBjb21wbGV4T2JqZWN0SW5kZXg6IG51bWJlciwgY29tcGxleE9iamVjdElzRnJvbVNldDogYm9vbGVhbikge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQsIGNvbXBsZXhPYmplY3RJbmRleCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVybmFsVmFsdWUoKTogU2VydmljZVNjaGVkdWxlZEFjdGlvbnMgfCBjZGt0bi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMucmVzb2x2YWJsZVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZhYmxlVmFsdWU7XG4gICAgfVxuICAgIGxldCBoYXNBbnlWYWx1ZXMgPSB0aGlzLmlzRW1wdHlPYmplY3Q7XG4gICAgY29uc3QgaW50ZXJuYWxWYWx1ZVJlc3VsdDogYW55ID0ge307XG4gICAgaWYgKHRoaXMuX3RvVXJnZW5jeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC50b1VyZ2VuY3kgPSB0aGlzLl90b1VyZ2VuY3k7XG4gICAgfVxuICAgIGlmICh0aGlzLl90eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnR5cGUgPSB0aGlzLl90eXBlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYXQ/LmludGVybmFsVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuYXQgPSB0aGlzLl9hdD8uaW50ZXJuYWxWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0FueVZhbHVlcyA/IGludGVybmFsVmFsdWVSZXN1bHQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGludGVybmFsVmFsdWUodmFsdWU6IFNlcnZpY2VTY2hlZHVsZWRBY3Rpb25zIHwgY2RrdG4uSVJlc29sdmFibGUgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3RvVXJnZW5jeSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9hdC5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3RvVXJnZW5jeSA9IHZhbHVlLnRvVXJnZW5jeTtcbiAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZS50eXBlO1xuICAgICAgdGhpcy5fYXQuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlLmF0O1xuICAgIH1cbiAgfVxuXG4gIC8vIHRvX3VyZ2VuY3kgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdG9VcmdlbmN5Pzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB0b1VyZ2VuY3koKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd0b191cmdlbmN5Jyk7XG4gIH1cbiAgcHVibGljIHNldCB0b1VyZ2VuY3kodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3RvVXJnZW5jeSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFRvVXJnZW5jeSgpIHtcbiAgICB0aGlzLl90b1VyZ2VuY3kgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHRvVXJnZW5jeUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl90b1VyZ2VuY3k7XG4gIH1cblxuICAvLyB0eXBlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3R5cGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd0eXBlJyk7XG4gIH1cbiAgcHVibGljIHNldCB0eXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VHlwZSgpIHtcbiAgICB0aGlzLl90eXBlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0eXBlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cblxuICAvLyBhdCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9hdCA9IG5ldyBTZXJ2aWNlU2NoZWR1bGVkQWN0aW9uc0F0TGlzdCh0aGlzLCBcImF0XCIsIGZhbHNlKTtcbiAgcHVibGljIGdldCBhdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXQ7XG4gIH1cbiAgcHVibGljIHB1dEF0KHZhbHVlOiBTZXJ2aWNlU2NoZWR1bGVkQWN0aW9uc0F0W10gfCBjZGt0bi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2F0LmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRBdCgpIHtcbiAgICB0aGlzLl9hdC5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhdElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9hdC5pbnRlcm5hbFZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlU2NoZWR1bGVkQWN0aW9uc0xpc3QgZXh0ZW5kcyBjZGt0bi5Db21wbGV4TGlzdCB7XG4gIHB1YmxpYyBpbnRlcm5hbFZhbHVlPyA6IFNlcnZpY2VTY2hlZHVsZWRBY3Rpb25zW10gfCBjZGt0bi5JUmVzb2x2YWJsZVxuXG4gIC8qKlxuICAqIEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlXG4gICogQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ1xuICAqIEBwYXJhbSB3cmFwc1NldCB3aGV0aGVyIHRoZSBsaXN0IGlzIHdyYXBwaW5nIGEgc2V0ICh3aWxsIGFkZCB0b2xpc3QoKSB0byBiZSBhYmxlIHRvIGFjY2VzcyBhbiBpdGVtIHZpYSBhbiBpbmRleClcbiAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLCBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4pIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldClcbiAgfVxuXG4gIC8qKlxuICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gcmV0dXJuXG4gICovXG4gIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcik6IFNlcnZpY2VTY2hlZHVsZWRBY3Rpb25zT3V0cHV0UmVmZXJlbmNlIHtcbiAgICByZXR1cm4gbmV3IFNlcnZpY2VTY2hlZHVsZWRBY3Rpb25zT3V0cHV0UmVmZXJlbmNlKHRoaXMudGVycmFmb3JtUmVzb3VyY2UsIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLCBpbmRleCwgdGhpcy53cmFwc1NldCk7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVN1cHBvcnRIb3VycyB7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjZGF5c19vZl93ZWVrIFNlcnZpY2UjZGF5c19vZl93ZWVrfVxuICAqL1xuICByZWFkb25seSBkYXlzT2ZXZWVrPzogbnVtYmVyW107XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjZW5kX3RpbWUgU2VydmljZSNlbmRfdGltZX1cbiAgKi9cbiAgcmVhZG9ubHkgZW5kVGltZT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvc2VydmljZSNzdGFydF90aW1lIFNlcnZpY2Ujc3RhcnRfdGltZX1cbiAgKi9cbiAgcmVhZG9ubHkgc3RhcnRUaW1lPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlI3RpbWVfem9uZSBTZXJ2aWNlI3RpbWVfem9uZX1cbiAgKi9cbiAgcmVhZG9ubHkgdGltZVpvbmU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjdHlwZSBTZXJ2aWNlI3R5cGV9XG4gICovXG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlU3VwcG9ydEhvdXJzVG9UZXJyYWZvcm0oc3RydWN0PzogU2VydmljZVN1cHBvcnRIb3Vyc091dHB1dFJlZmVyZW5jZSB8IFNlcnZpY2VTdXBwb3J0SG91cnMpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZGF5c19vZl93ZWVrOiBjZGt0bi5saXN0TWFwcGVyKGNka3RuLm51bWJlclRvVGVycmFmb3JtLCBmYWxzZSkoc3RydWN0IS5kYXlzT2ZXZWVrKSxcbiAgICBlbmRfdGltZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5lbmRUaW1lKSxcbiAgICBzdGFydF90aW1lOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnN0YXJ0VGltZSksXG4gICAgdGltZV96b25lOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnRpbWVab25lKSxcbiAgICB0eXBlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnR5cGUpLFxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VTdXBwb3J0SG91cnNUb0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiBTZXJ2aWNlU3VwcG9ydEhvdXJzT3V0cHV0UmVmZXJlbmNlIHwgU2VydmljZVN1cHBvcnRIb3Vycyk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgYXR0cnMgPSB7XG4gICAgZGF5c19vZl93ZWVrOiB7XG4gICAgICB2YWx1ZTogY2RrdG4ubGlzdE1hcHBlckhjbChjZGt0bi5udW1iZXJUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKHN0cnVjdCEuZGF5c09mV2VlayksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJMaXN0XCIsXG4gICAgfSxcbiAgICBlbmRfdGltZToge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuZW5kVGltZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgc3RhcnRfdGltZToge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuc3RhcnRUaW1lKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICB0aW1lX3pvbmU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnRpbWVab25lKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICB0eXBlOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS50eXBlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuZXhwb3J0IGNsYXNzIFNlcnZpY2VTdXBwb3J0SG91cnNPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IFNlcnZpY2VTdXBwb3J0SG91cnMgfCB1bmRlZmluZWQge1xuICAgIGxldCBoYXNBbnlWYWx1ZXMgPSB0aGlzLmlzRW1wdHlPYmplY3Q7XG4gICAgY29uc3QgaW50ZXJuYWxWYWx1ZVJlc3VsdDogYW55ID0ge307XG4gICAgaWYgKHRoaXMuX2RheXNPZldlZWsgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuZGF5c09mV2VlayA9IHRoaXMuX2RheXNPZldlZWs7XG4gICAgfVxuICAgIGlmICh0aGlzLl9lbmRUaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LmVuZFRpbWUgPSB0aGlzLl9lbmRUaW1lO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnN0YXJ0VGltZSA9IHRoaXMuX3N0YXJ0VGltZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3RpbWVab25lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnRpbWVab25lID0gdGhpcy5fdGltZVpvbmU7XG4gICAgfVxuICAgIGlmICh0aGlzLl90eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnR5cGUgPSB0aGlzLl90eXBlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogU2VydmljZVN1cHBvcnRIb3VycyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2RheXNPZldlZWsgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9lbmRUaW1lID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fc3RhcnRUaW1lID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdGltZVpvbmUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl90eXBlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLl9kYXlzT2ZXZWVrID0gdmFsdWUuZGF5c09mV2VlaztcbiAgICAgIHRoaXMuX2VuZFRpbWUgPSB2YWx1ZS5lbmRUaW1lO1xuICAgICAgdGhpcy5fc3RhcnRUaW1lID0gdmFsdWUuc3RhcnRUaW1lO1xuICAgICAgdGhpcy5fdGltZVpvbmUgPSB2YWx1ZS50aW1lWm9uZTtcbiAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZS50eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGRheXNfb2Zfd2VlayAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kYXlzT2ZXZWVrPzogbnVtYmVyW107IFxuICBwdWJsaWMgZ2V0IGRheXNPZldlZWsoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyTGlzdEF0dHJpYnV0ZSgnZGF5c19vZl93ZWVrJyk7XG4gIH1cbiAgcHVibGljIHNldCBkYXlzT2ZXZWVrKHZhbHVlOiBudW1iZXJbXSkge1xuICAgIHRoaXMuX2RheXNPZldlZWsgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREYXlzT2ZXZWVrKCkge1xuICAgIHRoaXMuX2RheXNPZldlZWsgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGRheXNPZldlZWtJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF5c09mV2VlaztcbiAgfVxuXG4gIC8vIGVuZF90aW1lIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2VuZFRpbWU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGVuZFRpbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdlbmRfdGltZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgZW5kVGltZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW5kVGltZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEVuZFRpbWUoKSB7XG4gICAgdGhpcy5fZW5kVGltZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZW5kVGltZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9lbmRUaW1lO1xuICB9XG5cbiAgLy8gc3RhcnRfdGltZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9zdGFydFRpbWU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHN0YXJ0VGltZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3N0YXJ0X3RpbWUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN0YXJ0VGltZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0U3RhcnRUaW1lKCkge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc3RhcnRUaW1lSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0VGltZTtcbiAgfVxuXG4gIC8vIHRpbWVfem9uZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF90aW1lWm9uZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgdGltZVpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd0aW1lX3pvbmUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpbWVab25lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90aW1lWm9uZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFRpbWVab25lKCkge1xuICAgIHRoaXMuX3RpbWVab25lID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0aW1lWm9uZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl90aW1lWm9uZTtcbiAgfVxuXG4gIC8vIHR5cGUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdHlwZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3R5cGUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHR5cGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3R5cGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRUeXBlKCkge1xuICAgIHRoaXMuX3R5cGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHR5cGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxufVxuXG4vKipcbiogUmVwcmVzZW50cyBhIHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvc2VydmljZSBwYWdlcmR1dHlfc2VydmljZX1cbiovXG5leHBvcnQgY2xhc3MgU2VydmljZSBleHRlbmRzIGNka3RuLlRlcnJhZm9ybVJlc291cmNlIHtcblxuICAvLyA9PT09PT09PT09PT09PT09PVxuICAvLyBTVEFUSUMgUFJPUEVSVElFU1xuICAvLyA9PT09PT09PT09PT09PT09PVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHRmUmVzb3VyY2VUeXBlID0gXCJwYWdlcmR1dHlfc2VydmljZVwiO1xuXG4gIC8vID09PT09PT09PT09PT09XG4gIC8vIFNUQVRJQyBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09XG4gIC8qKlxuICAqIEdlbmVyYXRlcyBDREtUTiBjb2RlIGZvciBpbXBvcnRpbmcgYSBTZXJ2aWNlIHJlc291cmNlIHVwb24gcnVubmluZyBcImNka3RuIHBsYW4gPHN0YWNrLW5hbWU+XCJcbiAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAqIEBwYXJhbSBpbXBvcnRUb0lkIFRoZSBjb25zdHJ1Y3QgaWQgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvbmZpZyBmb3IgdGhlIFNlcnZpY2UgdG8gaW1wb3J0XG4gICogQHBhcmFtIGltcG9ydEZyb21JZCBUaGUgaWQgb2YgdGhlIGV4aXN0aW5nIFNlcnZpY2UgdGhhdCBzaG91bGQgYmUgaW1wb3J0ZWQuIFJlZmVyIHRvIHRoZSB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL3NlcnZpY2UjaW1wb3J0IGltcG9ydCBzZWN0aW9ufSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIHJlc291cmNlIGZvciB0aGUgaWQgdG8gdXNlXG4gICogQHBhcmFtIHByb3ZpZGVyPyBPcHRpb25hbCBpbnN0YW5jZSBvZiB0aGUgcHJvdmlkZXIgd2hlcmUgdGhlIFNlcnZpY2UgdG8gaW1wb3J0IGlzIGZvdW5kXG4gICovXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVDb25maWdGb3JJbXBvcnQoc2NvcGU6IENvbnN0cnVjdCwgaW1wb3J0VG9JZDogc3RyaW5nLCBpbXBvcnRGcm9tSWQ6IHN0cmluZywgcHJvdmlkZXI/OiBjZGt0bi5UZXJyYWZvcm1Qcm92aWRlcikge1xuICAgICAgICByZXR1cm4gbmV3IGNka3RuLkltcG9ydGFibGVSZXNvdXJjZShzY29wZSwgaW1wb3J0VG9JZCwgeyB0ZXJyYWZvcm1SZXNvdXJjZVR5cGU6IFwicGFnZXJkdXR5X3NlcnZpY2VcIiwgaW1wb3J0SWQ6IGltcG9ydEZyb21JZCwgcHJvdmlkZXIgfSk7XG4gICAgICB9XG5cbiAgLy8gPT09PT09PT09PT1cbiAgLy8gSU5JVElBTElaRVJcbiAgLy8gPT09PT09PT09PT1cblxuICAvKipcbiAgKiBDcmVhdGUgYSBuZXcge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9zZXJ2aWNlIHBhZ2VyZHV0eV9zZXJ2aWNlfSBSZXNvdXJjZVxuICAqXG4gICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgKiBAcGFyYW0gaWQgVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuIE11c3QgYmUgdW5pcXVlIGFtb25nc3Qgc2libGluZ3MgaW4gdGhlIHNhbWUgc2NvcGVcbiAgKiBAcGFyYW0gb3B0aW9ucyBTZXJ2aWNlQ29uZmlnXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWc6IFNlcnZpY2VDb25maWcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHRlcnJhZm9ybVJlc291cmNlVHlwZTogJ3BhZ2VyZHV0eV9zZXJ2aWNlJyxcbiAgICAgIHRlcnJhZm9ybUdlbmVyYXRvck1ldGFkYXRhOiB7XG4gICAgICAgIHByb3ZpZGVyTmFtZTogJ3BhZ2VyZHV0eScsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbjogJzMuMzEuMCcsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbkNvbnN0cmFpbnQ6ICd+PiAzLjAnXG4gICAgICB9LFxuICAgICAgcHJvdmlkZXI6IGNvbmZpZy5wcm92aWRlcixcbiAgICAgIGRlcGVuZHNPbjogY29uZmlnLmRlcGVuZHNPbixcbiAgICAgIGNvdW50OiBjb25maWcuY291bnQsXG4gICAgICBsaWZlY3ljbGU6IGNvbmZpZy5saWZlY3ljbGUsXG4gICAgICBwcm92aXNpb25lcnM6IGNvbmZpZy5wcm92aXNpb25lcnMsXG4gICAgICBjb25uZWN0aW9uOiBjb25maWcuY29ubmVjdGlvbixcbiAgICAgIGZvckVhY2g6IGNvbmZpZy5mb3JFYWNoXG4gICAgfSk7XG4gICAgdGhpcy5fYWNrbm93bGVkZ2VtZW50VGltZW91dCA9IGNvbmZpZy5hY2tub3dsZWRnZW1lbnRUaW1lb3V0O1xuICAgIHRoaXMuX2FsZXJ0Q3JlYXRpb24gPSBjb25maWcuYWxlcnRDcmVhdGlvbjtcbiAgICB0aGlzLl9hbGVydEdyb3VwaW5nID0gY29uZmlnLmFsZXJ0R3JvdXBpbmc7XG4gICAgdGhpcy5fYWxlcnRHcm91cGluZ1RpbWVvdXQgPSBjb25maWcuYWxlcnRHcm91cGluZ1RpbWVvdXQ7XG4gICAgdGhpcy5fYXV0b1Jlc29sdmVUaW1lb3V0ID0gY29uZmlnLmF1dG9SZXNvbHZlVGltZW91dDtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IGNvbmZpZy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLl9lc2NhbGF0aW9uUG9saWN5ID0gY29uZmlnLmVzY2FsYXRpb25Qb2xpY3k7XG4gICAgdGhpcy5faWQgPSBjb25maWcuaWQ7XG4gICAgdGhpcy5fbmFtZSA9IGNvbmZpZy5uYW1lO1xuICAgIHRoaXMuX3Jlc3BvbnNlUGxheSA9IGNvbmZpZy5yZXNwb25zZVBsYXk7XG4gICAgdGhpcy5fYWxlcnRHcm91cGluZ1BhcmFtZXRlcnMuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5hbGVydEdyb3VwaW5nUGFyYW1ldGVycztcbiAgICB0aGlzLl9hdXRvUGF1c2VOb3RpZmljYXRpb25zUGFyYW1ldGVycy5pbnRlcm5hbFZhbHVlID0gY29uZmlnLmF1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzO1xuICAgIHRoaXMuX2luY2lkZW50VXJnZW5jeVJ1bGUuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5pbmNpZGVudFVyZ2VuY3lSdWxlO1xuICAgIHRoaXMuX3NjaGVkdWxlZEFjdGlvbnMuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5zY2hlZHVsZWRBY3Rpb25zO1xuICAgIHRoaXMuX3N1cHBvcnRIb3Vycy5pbnRlcm5hbFZhbHVlID0gY29uZmlnLnN1cHBvcnRIb3VycztcbiAgfVxuXG4gIC8vID09PT09PT09PT1cbiAgLy8gQVRUUklCVVRFU1xuICAvLyA9PT09PT09PT09XG5cbiAgLy8gYWNrbm93bGVkZ2VtZW50X3RpbWVvdXQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfYWNrbm93bGVkZ2VtZW50VGltZW91dD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgYWNrbm93bGVkZ2VtZW50VGltZW91dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2Fja25vd2xlZGdlbWVudF90aW1lb3V0Jyk7XG4gIH1cbiAgcHVibGljIHNldCBhY2tub3dsZWRnZW1lbnRUaW1lb3V0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hY2tub3dsZWRnZW1lbnRUaW1lb3V0ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0QWNrbm93bGVkZ2VtZW50VGltZW91dCgpIHtcbiAgICB0aGlzLl9hY2tub3dsZWRnZW1lbnRUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhY2tub3dsZWRnZW1lbnRUaW1lb3V0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fja25vd2xlZGdlbWVudFRpbWVvdXQ7XG4gIH1cblxuICAvLyBhbGVydF9jcmVhdGlvbiAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9hbGVydENyZWF0aW9uPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBhbGVydENyZWF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnYWxlcnRfY3JlYXRpb24nKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsZXJ0Q3JlYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2FsZXJ0Q3JlYXRpb24gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRBbGVydENyZWF0aW9uKCkge1xuICAgIHRoaXMuX2FsZXJ0Q3JlYXRpb24gPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGFsZXJ0Q3JlYXRpb25JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxlcnRDcmVhdGlvbjtcbiAgfVxuXG4gIC8vIGFsZXJ0X2dyb3VwaW5nIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfYWxlcnRHcm91cGluZz86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgYWxlcnRHcm91cGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2FsZXJ0X2dyb3VwaW5nJyk7XG4gIH1cbiAgcHVibGljIHNldCBhbGVydEdyb3VwaW5nKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hbGVydEdyb3VwaW5nID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0QWxlcnRHcm91cGluZygpIHtcbiAgICB0aGlzLl9hbGVydEdyb3VwaW5nID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhbGVydEdyb3VwaW5nSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsZXJ0R3JvdXBpbmc7XG4gIH1cblxuICAvLyBhbGVydF9ncm91cGluZ190aW1lb3V0IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfYWxlcnRHcm91cGluZ1RpbWVvdXQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGFsZXJ0R3JvdXBpbmdUaW1lb3V0KCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnYWxlcnRfZ3JvdXBpbmdfdGltZW91dCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxlcnRHcm91cGluZ1RpbWVvdXQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2FsZXJ0R3JvdXBpbmdUaW1lb3V0ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0QWxlcnRHcm91cGluZ1RpbWVvdXQoKSB7XG4gICAgdGhpcy5fYWxlcnRHcm91cGluZ1RpbWVvdXQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGFsZXJ0R3JvdXBpbmdUaW1lb3V0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsZXJ0R3JvdXBpbmdUaW1lb3V0O1xuICB9XG5cbiAgLy8gYXV0b19yZXNvbHZlX3RpbWVvdXQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfYXV0b1Jlc29sdmVUaW1lb3V0Pzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBhdXRvUmVzb2x2ZVRpbWVvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdhdXRvX3Jlc29sdmVfdGltZW91dCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgYXV0b1Jlc29sdmVUaW1lb3V0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hdXRvUmVzb2x2ZVRpbWVvdXQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRBdXRvUmVzb2x2ZVRpbWVvdXQoKSB7XG4gICAgdGhpcy5fYXV0b1Jlc29sdmVUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhdXRvUmVzb2x2ZVRpbWVvdXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b1Jlc29sdmVUaW1lb3V0O1xuICB9XG5cbiAgLy8gY3JlYXRlZF9hdCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiBmYWxzZVxuICBwdWJsaWMgZ2V0IGNyZWF0ZWRBdCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2NyZWF0ZWRfYXQnKTtcbiAgfVxuXG4gIC8vIGRlc2NyaXB0aW9uIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2Rlc2NyaXB0aW9uPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2Rlc2NyaXB0aW9uJyk7XG4gIH1cbiAgcHVibGljIHNldCBkZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGVzY3JpcHRpb24gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREZXNjcmlwdGlvbigpIHtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb25JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVzY3JpcHRpb247XG4gIH1cblxuICAvLyBlc2NhbGF0aW9uX3BvbGljeSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogdHJ1ZVxuICBwcml2YXRlIF9lc2NhbGF0aW9uUG9saWN5Pzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBlc2NhbGF0aW9uUG9saWN5KCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnZXNjYWxhdGlvbl9wb2xpY3knKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVzY2FsYXRpb25Qb2xpY3kodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2VzY2FsYXRpb25Qb2xpY3kgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZXNjYWxhdGlvblBvbGljeUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9lc2NhbGF0aW9uUG9saWN5O1xuICB9XG5cbiAgLy8gaHRtbF91cmwgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogZmFsc2VcbiAgcHVibGljIGdldCBodG1sVXJsKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnaHRtbF91cmwnKTtcbiAgfVxuXG4gIC8vIGlkIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaWQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGlkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnaWQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldElkKCkge1xuICAgIHRoaXMuX2lkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBpZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuXG4gIC8vIGxhc3RfaW5jaWRlbnRfdGltZXN0YW1wIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHB1YmxpYyBnZXQgbGFzdEluY2lkZW50VGltZXN0YW1wKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbGFzdF9pbmNpZGVudF90aW1lc3RhbXAnKTtcbiAgfVxuXG4gIC8vIG5hbWUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfbmFtZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ25hbWUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25hbWUgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbmFtZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgLy8gcmVzcG9uc2VfcGxheSAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3Jlc3BvbnNlUGxheT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgcmVzcG9uc2VQbGF5KCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgncmVzcG9uc2VfcGxheScpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVzcG9uc2VQbGF5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yZXNwb25zZVBsYXkgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRSZXNwb25zZVBsYXkoKSB7XG4gICAgdGhpcy5fcmVzcG9uc2VQbGF5ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCByZXNwb25zZVBsYXlJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VQbGF5O1xuICB9XG5cbiAgLy8gc3RhdHVzIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHB1YmxpYyBnZXQgc3RhdHVzKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnc3RhdHVzJyk7XG4gIH1cblxuICAvLyB0eXBlIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHB1YmxpYyBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3R5cGUnKTtcbiAgfVxuXG4gIC8vIGFsZXJ0X2dyb3VwaW5nX3BhcmFtZXRlcnMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfYWxlcnRHcm91cGluZ1BhcmFtZXRlcnMgPSBuZXcgU2VydmljZUFsZXJ0R3JvdXBpbmdQYXJhbWV0ZXJzT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwiYWxlcnRfZ3JvdXBpbmdfcGFyYW1ldGVyc1wiKTtcbiAgcHVibGljIGdldCBhbGVydEdyb3VwaW5nUGFyYW1ldGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxlcnRHcm91cGluZ1BhcmFtZXRlcnM7XG4gIH1cbiAgcHVibGljIHB1dEFsZXJ0R3JvdXBpbmdQYXJhbWV0ZXJzKHZhbHVlOiBTZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnMpIHtcbiAgICB0aGlzLl9hbGVydEdyb3VwaW5nUGFyYW1ldGVycy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0QWxlcnRHcm91cGluZ1BhcmFtZXRlcnMoKSB7XG4gICAgdGhpcy5fYWxlcnRHcm91cGluZ1BhcmFtZXRlcnMuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgYWxlcnRHcm91cGluZ1BhcmFtZXRlcnNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxlcnRHcm91cGluZ1BhcmFtZXRlcnMuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIGF1dG9fcGF1c2Vfbm90aWZpY2F0aW9uc19wYXJhbWV0ZXJzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2F1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzID0gbmV3IFNlcnZpY2VBdXRvUGF1c2VOb3RpZmljYXRpb25zUGFyYW1ldGVyc091dHB1dFJlZmVyZW5jZSh0aGlzLCBcImF1dG9fcGF1c2Vfbm90aWZpY2F0aW9uc19wYXJhbWV0ZXJzXCIpO1xuICBwdWJsaWMgZ2V0IGF1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLl9hdXRvUGF1c2VOb3RpZmljYXRpb25zUGFyYW1ldGVycztcbiAgfVxuICBwdWJsaWMgcHV0QXV0b1BhdXNlTm90aWZpY2F0aW9uc1BhcmFtZXRlcnModmFsdWU6IFNlcnZpY2VBdXRvUGF1c2VOb3RpZmljYXRpb25zUGFyYW1ldGVycykge1xuICAgIHRoaXMuX2F1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRBdXRvUGF1c2VOb3RpZmljYXRpb25zUGFyYW1ldGVycygpIHtcbiAgICB0aGlzLl9hdXRvUGF1c2VOb3RpZmljYXRpb25zUGFyYW1ldGVycy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhdXRvUGF1c2VOb3RpZmljYXRpb25zUGFyYW1ldGVyc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9hdXRvUGF1c2VOb3RpZmljYXRpb25zUGFyYW1ldGVycy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gaW5jaWRlbnRfdXJnZW5jeV9ydWxlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2luY2lkZW50VXJnZW5jeVJ1bGUgPSBuZXcgU2VydmljZUluY2lkZW50VXJnZW5jeVJ1bGVPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJpbmNpZGVudF91cmdlbmN5X3J1bGVcIik7XG4gIHB1YmxpYyBnZXQgaW5jaWRlbnRVcmdlbmN5UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5jaWRlbnRVcmdlbmN5UnVsZTtcbiAgfVxuICBwdWJsaWMgcHV0SW5jaWRlbnRVcmdlbmN5UnVsZSh2YWx1ZTogU2VydmljZUluY2lkZW50VXJnZW5jeVJ1bGUpIHtcbiAgICB0aGlzLl9pbmNpZGVudFVyZ2VuY3lSdWxlLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRJbmNpZGVudFVyZ2VuY3lSdWxlKCkge1xuICAgIHRoaXMuX2luY2lkZW50VXJnZW5jeVJ1bGUuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaW5jaWRlbnRVcmdlbmN5UnVsZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbmNpZGVudFVyZ2VuY3lSdWxlLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBzY2hlZHVsZWRfYWN0aW9ucyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9zY2hlZHVsZWRBY3Rpb25zID0gbmV3IFNlcnZpY2VTY2hlZHVsZWRBY3Rpb25zTGlzdCh0aGlzLCBcInNjaGVkdWxlZF9hY3Rpb25zXCIsIGZhbHNlKTtcbiAgcHVibGljIGdldCBzY2hlZHVsZWRBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9zY2hlZHVsZWRBY3Rpb25zO1xuICB9XG4gIHB1YmxpYyBwdXRTY2hlZHVsZWRBY3Rpb25zKHZhbHVlOiBTZXJ2aWNlU2NoZWR1bGVkQWN0aW9uc1tdIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9zY2hlZHVsZWRBY3Rpb25zLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRTY2hlZHVsZWRBY3Rpb25zKCkge1xuICAgIHRoaXMuX3NjaGVkdWxlZEFjdGlvbnMuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc2NoZWR1bGVkQWN0aW9uc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9zY2hlZHVsZWRBY3Rpb25zLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBzdXBwb3J0X2hvdXJzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3N1cHBvcnRIb3VycyA9IG5ldyBTZXJ2aWNlU3VwcG9ydEhvdXJzT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwic3VwcG9ydF9ob3Vyc1wiKTtcbiAgcHVibGljIGdldCBzdXBwb3J0SG91cnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1cHBvcnRIb3VycztcbiAgfVxuICBwdWJsaWMgcHV0U3VwcG9ydEhvdXJzKHZhbHVlOiBTZXJ2aWNlU3VwcG9ydEhvdXJzKSB7XG4gICAgdGhpcy5fc3VwcG9ydEhvdXJzLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRTdXBwb3J0SG91cnMoKSB7XG4gICAgdGhpcy5fc3VwcG9ydEhvdXJzLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHN1cHBvcnRIb3Vyc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9zdXBwb3J0SG91cnMuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PVxuICAvLyBTWU5USEVTSVNcbiAgLy8gPT09PT09PT09XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVBdHRyaWJ1dGVzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgYWNrbm93bGVkZ2VtZW50X3RpbWVvdXQ6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2Fja25vd2xlZGdlbWVudFRpbWVvdXQpLFxuICAgICAgYWxlcnRfY3JlYXRpb246IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2FsZXJ0Q3JlYXRpb24pLFxuICAgICAgYWxlcnRfZ3JvdXBpbmc6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2FsZXJ0R3JvdXBpbmcpLFxuICAgICAgYWxlcnRfZ3JvdXBpbmdfdGltZW91dDogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fYWxlcnRHcm91cGluZ1RpbWVvdXQpLFxuICAgICAgYXV0b19yZXNvbHZlX3RpbWVvdXQ6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2F1dG9SZXNvbHZlVGltZW91dCksXG4gICAgICBkZXNjcmlwdGlvbjogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fZGVzY3JpcHRpb24pLFxuICAgICAgZXNjYWxhdGlvbl9wb2xpY3k6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2VzY2FsYXRpb25Qb2xpY3kpLFxuICAgICAgaWQ6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2lkKSxcbiAgICAgIG5hbWU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX25hbWUpLFxuICAgICAgcmVzcG9uc2VfcGxheTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fcmVzcG9uc2VQbGF5KSxcbiAgICAgIGFsZXJ0X2dyb3VwaW5nX3BhcmFtZXRlcnM6IHNlcnZpY2VBbGVydEdyb3VwaW5nUGFyYW1ldGVyc1RvVGVycmFmb3JtKHRoaXMuX2FsZXJ0R3JvdXBpbmdQYXJhbWV0ZXJzLmludGVybmFsVmFsdWUpLFxuICAgICAgYXV0b19wYXVzZV9ub3RpZmljYXRpb25zX3BhcmFtZXRlcnM6IHNlcnZpY2VBdXRvUGF1c2VOb3RpZmljYXRpb25zUGFyYW1ldGVyc1RvVGVycmFmb3JtKHRoaXMuX2F1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzLmludGVybmFsVmFsdWUpLFxuICAgICAgaW5jaWRlbnRfdXJnZW5jeV9ydWxlOiBzZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZVRvVGVycmFmb3JtKHRoaXMuX2luY2lkZW50VXJnZW5jeVJ1bGUuaW50ZXJuYWxWYWx1ZSksXG4gICAgICBzY2hlZHVsZWRfYWN0aW9uczogY2RrdG4ubGlzdE1hcHBlcihzZXJ2aWNlU2NoZWR1bGVkQWN0aW9uc1RvVGVycmFmb3JtLCB0cnVlKSh0aGlzLl9zY2hlZHVsZWRBY3Rpb25zLmludGVybmFsVmFsdWUpLFxuICAgICAgc3VwcG9ydF9ob3Vyczogc2VydmljZVN1cHBvcnRIb3Vyc1RvVGVycmFmb3JtKHRoaXMuX3N1cHBvcnRIb3Vycy5pbnRlcm5hbFZhbHVlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCBhdHRycyA9IHtcbiAgICAgIGFja25vd2xlZGdlbWVudF90aW1lb3V0OiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9hY2tub3dsZWRnZW1lbnRUaW1lb3V0KSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgYWxlcnRfY3JlYXRpb246IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2FsZXJ0Q3JlYXRpb24pLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBhbGVydF9ncm91cGluZzoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fYWxlcnRHcm91cGluZyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGFsZXJ0X2dyb3VwaW5nX3RpbWVvdXQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2FsZXJ0R3JvdXBpbmdUaW1lb3V0KSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgYXV0b19yZXNvbHZlX3RpbWVvdXQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2F1dG9SZXNvbHZlVGltZW91dCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9kZXNjcmlwdGlvbiksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGVzY2FsYXRpb25fcG9saWN5OiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9lc2NhbGF0aW9uUG9saWN5KSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgaWQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2lkKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgbmFtZToge1xuICAgICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fbmFtZSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIHJlc3BvbnNlX3BsYXk6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX3Jlc3BvbnNlUGxheSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGFsZXJ0X2dyb3VwaW5nX3BhcmFtZXRlcnM6IHtcbiAgICAgICAgdmFsdWU6IHNlcnZpY2VBbGVydEdyb3VwaW5nUGFyYW1ldGVyc1RvSGNsVGVycmFmb3JtKHRoaXMuX2FsZXJ0R3JvdXBpbmdQYXJhbWV0ZXJzLmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJTZXJ2aWNlQWxlcnRHcm91cGluZ1BhcmFtZXRlcnNMaXN0XCIsXG4gICAgICB9LFxuICAgICAgYXV0b19wYXVzZV9ub3RpZmljYXRpb25zX3BhcmFtZXRlcnM6IHtcbiAgICAgICAgdmFsdWU6IHNlcnZpY2VBdXRvUGF1c2VOb3RpZmljYXRpb25zUGFyYW1ldGVyc1RvSGNsVGVycmFmb3JtKHRoaXMuX2F1dG9QYXVzZU5vdGlmaWNhdGlvbnNQYXJhbWV0ZXJzLmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJTZXJ2aWNlQXV0b1BhdXNlTm90aWZpY2F0aW9uc1BhcmFtZXRlcnNMaXN0XCIsXG4gICAgICB9LFxuICAgICAgaW5jaWRlbnRfdXJnZW5jeV9ydWxlOiB7XG4gICAgICAgIHZhbHVlOiBzZXJ2aWNlSW5jaWRlbnRVcmdlbmN5UnVsZVRvSGNsVGVycmFmb3JtKHRoaXMuX2luY2lkZW50VXJnZW5jeVJ1bGUuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIlNlcnZpY2VJbmNpZGVudFVyZ2VuY3lSdWxlTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIHNjaGVkdWxlZF9hY3Rpb25zOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5saXN0TWFwcGVySGNsKHNlcnZpY2VTY2hlZHVsZWRBY3Rpb25zVG9IY2xUZXJyYWZvcm0sIHRydWUpKHRoaXMuX3NjaGVkdWxlZEFjdGlvbnMuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIlNlcnZpY2VTY2hlZHVsZWRBY3Rpb25zTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIHN1cHBvcnRfaG91cnM6IHtcbiAgICAgICAgdmFsdWU6IHNlcnZpY2VTdXBwb3J0SG91cnNUb0hjbFRlcnJhZm9ybSh0aGlzLl9zdXBwb3J0SG91cnMuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIlNlcnZpY2VTdXBwb3J0SG91cnNMaXN0XCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCApKVxuICB9XG59XG4iXX0=
|