@cdktn/provider-azuread 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 +112042 -0
- package/LICENSE +355 -0
- package/README.md +94 -0
- package/lib/access-package/index.d.ts +151 -0
- package/lib/access-package/index.js +354 -0
- package/lib/access-package-assignment-policy/index.d.ts +1098 -0
- package/lib/access-package-assignment-policy/index.js +2711 -0
- package/lib/access-package-catalog/index.d.ts +152 -0
- package/lib/access-package-catalog/index.js +357 -0
- package/lib/access-package-catalog-role-assignment/index.d.ts +140 -0
- package/lib/access-package-catalog-role-assignment/index.js +333 -0
- package/lib/access-package-resource-catalog-association/index.d.ts +131 -0
- package/lib/access-package-resource-catalog-association/index.js +307 -0
- package/lib/access-package-resource-package-association/index.d.ts +132 -0
- package/lib/access-package-resource-package-association/index.js +310 -0
- package/lib/administrative-unit/index.d.ts +165 -0
- package/lib/administrative-unit/index.js +385 -0
- package/lib/administrative-unit-member/index.d.ts +123 -0
- package/lib/administrative-unit-member/index.js +295 -0
- package/lib/administrative-unit-role-member/index.d.ts +131 -0
- package/lib/administrative-unit-role-member/index.js +307 -0
- package/lib/app-role-assignment/index.d.ts +134 -0
- package/lib/app-role-assignment/index.js +319 -0
- package/lib/application/index.d.ts +1352 -0
- package/lib/application/index.js +3262 -0
- package/lib/application-api-access/index.d.ts +152 -0
- package/lib/application-api-access/index.js +357 -0
- package/lib/application-app-role/index.d.ts +171 -0
- package/lib/application-app-role/index.js +390 -0
- package/lib/application-certificate/index.d.ts +196 -0
- package/lib/application-certificate/index.js +441 -0
- package/lib/application-fallback-public-client/index.d.ts +122 -0
- package/lib/application-fallback-public-client/index.js +292 -0
- package/lib/application-federated-identity-credential/index.d.ts +172 -0
- package/lib/application-federated-identity-credential/index.js +394 -0
- package/lib/application-flexible-federated-identity-credential/index.d.ts +172 -0
- package/lib/application-flexible-federated-identity-credential/index.js +394 -0
- package/lib/application-from-template/index.d.ts +134 -0
- package/lib/application-from-template/index.js +334 -0
- package/lib/application-identifier-uri/index.d.ts +121 -0
- package/lib/application-identifier-uri/index.js +289 -0
- package/lib/application-known-clients/index.d.ts +130 -0
- package/lib/application-known-clients/index.js +315 -0
- package/lib/application-optional-claims/index.d.ts +381 -0
- package/lib/application-optional-claims/index.js +918 -0
- package/lib/application-owner/index.d.ts +121 -0
- package/lib/application-owner/index.js +289 -0
- package/lib/application-password/index.d.ts +185 -0
- package/lib/application-password/index.js +410 -0
- package/lib/application-permission-scope/index.d.ts +193 -0
- package/lib/application-permission-scope/index.js +432 -0
- package/lib/application-pre-authorized/index.d.ts +140 -0
- package/lib/application-pre-authorized/index.js +333 -0
- package/lib/application-redirect-uris/index.d.ts +140 -0
- package/lib/application-redirect-uris/index.js +333 -0
- package/lib/application-registration/index.d.ts +278 -0
- package/lib/application-registration/index.js +610 -0
- package/lib/authentication-strength-policy/index.d.ts +141 -0
- package/lib/authentication-strength-policy/index.js +336 -0
- package/lib/claims-mapping-policy/index.d.ts +130 -0
- package/lib/claims-mapping-policy/index.js +315 -0
- package/lib/conditional-access-policy/index.d.ts +959 -0
- package/lib/conditional-access-policy/index.js +2705 -0
- package/lib/custom-directory-role/index.d.ts +216 -0
- package/lib/custom-directory-role/index.js +505 -0
- package/lib/data-azuread-access-package/index.d.ts +118 -0
- package/lib/data-azuread-access-package/index.js +272 -0
- package/lib/data-azuread-access-package-catalog/index.d.ts +108 -0
- package/lib/data-azuread-access-package-catalog/index.js +258 -0
- package/lib/data-azuread-access-package-catalog-role/index.d.ts +107 -0
- package/lib/data-azuread-access-package-catalog-role/index.js +254 -0
- package/lib/data-azuread-administrative-unit/index.d.ts +135 -0
- package/lib/data-azuread-administrative-unit/index.js +336 -0
- package/lib/data-azuread-application/index.d.ts +654 -0
- package/lib/data-azuread-application/index.js +1606 -0
- package/lib/data-azuread-application-published-app-ids/index.d.ts +85 -0
- package/lib/data-azuread-application-published-app-ids/index.js +206 -0
- package/lib/data-azuread-application-template/index.d.ts +111 -0
- package/lib/data-azuread-application-template/index.js +270 -0
- package/lib/data-azuread-client-config/index.d.ts +86 -0
- package/lib/data-azuread-client-config/index.js +216 -0
- package/lib/data-azuread-directory-object/index.d.ts +94 -0
- package/lib/data-azuread-directory-object/index.js +223 -0
- package/lib/data-azuread-directory-role-templates/index.d.ts +120 -0
- package/lib/data-azuread-directory-role-templates/index.js +293 -0
- package/lib/data-azuread-directory-roles/index.d.ts +122 -0
- package/lib/data-azuread-directory-roles/index.js +301 -0
- package/lib/data-azuread-domains/index.d.ts +190 -0
- package/lib/data-azuread-domains/index.js +435 -0
- package/lib/data-azuread-group/index.d.ts +207 -0
- package/lib/data-azuread-group/index.js +506 -0
- package/lib/data-azuread-group-role-management-policy/index.d.ts +105 -0
- package/lib/data-azuread-group-role-management-policy/index.js +248 -0
- package/lib/data-azuread-groups/index.d.ts +160 -0
- package/lib/data-azuread-groups/index.js +348 -0
- package/lib/data-azuread-named-location/index.d.ts +163 -0
- package/lib/data-azuread-named-location/index.js +398 -0
- package/lib/data-azuread-service-principal/index.d.ts +325 -0
- package/lib/data-azuread-service-principal/index.js +817 -0
- package/lib/data-azuread-service-principals/index.d.ts +183 -0
- package/lib/data-azuread-service-principals/index.js +430 -0
- package/lib/data-azuread-user/index.d.ts +177 -0
- package/lib/data-azuread-user/index.js +465 -0
- package/lib/data-azuread-users/index.d.ts +204 -0
- package/lib/data-azuread-users/index.js +468 -0
- package/lib/directory-role/index.d.ts +125 -0
- package/lib/directory-role/index.js +306 -0
- package/lib/directory-role-assignment/index.d.ts +143 -0
- package/lib/directory-role-assignment/index.js +331 -0
- package/lib/directory-role-eligibility-schedule-request/index.d.ts +141 -0
- package/lib/directory-role-eligibility-schedule-request/index.js +325 -0
- package/lib/directory-role-member/index.d.ts +123 -0
- package/lib/directory-role-member/index.js +295 -0
- package/lib/group/index.d.ts +392 -0
- package/lib/group/index.js +872 -0
- package/lib/group-member/index.d.ts +121 -0
- package/lib/group-member/index.js +289 -0
- package/lib/group-role-management-policy/index.d.ts +1043 -0
- package/lib/group-role-management-policy/index.js +2775 -0
- package/lib/group-without-members/index.d.ts +381 -0
- package/lib/group-without-members/index.js +851 -0
- package/lib/index.d.ts +79 -0
- package/lib/index.js +85 -0
- package/lib/invitation/index.d.ts +203 -0
- package/lib/invitation/index.js +490 -0
- package/lib/lazy-index.d.ts +4 -0
- package/lib/lazy-index.js +82 -0
- package/lib/named-location/index.d.ts +212 -0
- package/lib/named-location/index.js +571 -0
- package/lib/privileged-access-group-assignment-schedule/index.d.ts +218 -0
- package/lib/privileged-access-group-assignment-schedule/index.js +484 -0
- package/lib/privileged-access-group-eligibility-schedule/index.d.ts +218 -0
- package/lib/privileged-access-group-eligibility-schedule/index.js +484 -0
- package/lib/provider/index.d.ts +289 -0
- package/lib/provider/index.js +549 -0
- package/lib/service-principal/index.d.ts +547 -0
- package/lib/service-principal/index.js +1305 -0
- package/lib/service-principal-certificate/index.d.ts +187 -0
- package/lib/service-principal-certificate/index.js +415 -0
- package/lib/service-principal-claims-mapping-policy-assignment/index.d.ts +121 -0
- package/lib/service-principal-claims-mapping-policy-assignment/index.js +289 -0
- package/lib/service-principal-delegated-permission-grant/index.d.ts +151 -0
- package/lib/service-principal-delegated-permission-grant/index.js +354 -0
- package/lib/service-principal-password/index.d.ts +176 -0
- package/lib/service-principal-password/index.js +384 -0
- package/lib/service-principal-token-signing-certificate/index.d.ts +137 -0
- package/lib/service-principal-token-signing-certificate/index.js +329 -0
- package/lib/synchronization-job/index.d.ts +177 -0
- package/lib/synchronization-job/index.js +424 -0
- package/lib/synchronization-job-provision-on-demand/index.d.ts +254 -0
- package/lib/synchronization-job-provision-on-demand/index.js +590 -0
- package/lib/synchronization-secret/index.d.ts +184 -0
- package/lib/synchronization-secret/index.js +449 -0
- package/lib/user/index.d.ts +517 -0
- package/lib/user/index.js +1084 -0
- package/lib/user-flow-attribute/index.d.ts +141 -0
- package/lib/user-flow-attribute/index.js +340 -0
- package/package.json +155 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2021, 2026
|
|
3
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { Construct } from 'constructs';
|
|
6
|
+
import * as cdktn from 'cdktn';
|
|
7
|
+
export interface ApplicationAppRoleAConfig extends cdktn.TerraformMetaArguments {
|
|
8
|
+
/**
|
|
9
|
+
* Specifies whether this app role definition can be assigned to users and groups by setting to `User`, or to other applications (that are accessing this application in a standalone scenario) by setting to `Application`, or to both
|
|
10
|
+
*
|
|
11
|
+
* Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#allowed_member_types ApplicationAppRoleA#allowed_member_types}
|
|
12
|
+
*/
|
|
13
|
+
readonly allowedMemberTypes: string[];
|
|
14
|
+
/**
|
|
15
|
+
* The resource ID of the application to which this app role should be applied
|
|
16
|
+
*
|
|
17
|
+
* Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#application_id ApplicationAppRoleA#application_id}
|
|
18
|
+
*/
|
|
19
|
+
readonly applicationId: string;
|
|
20
|
+
/**
|
|
21
|
+
* Description of the app role that appears when the role is being assigned and, if the role functions as an application permissions, during the consent experiences
|
|
22
|
+
*
|
|
23
|
+
* Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#description ApplicationAppRoleA#description}
|
|
24
|
+
*/
|
|
25
|
+
readonly description: string;
|
|
26
|
+
/**
|
|
27
|
+
* Display name for the app role that appears during app role assignment and in consent experiences
|
|
28
|
+
*
|
|
29
|
+
* Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#display_name ApplicationAppRoleA#display_name}
|
|
30
|
+
*/
|
|
31
|
+
readonly displayName: string;
|
|
32
|
+
/**
|
|
33
|
+
* Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#id ApplicationAppRoleA#id}
|
|
34
|
+
*
|
|
35
|
+
* Please be aware that the id field is automatically added to all resources in Terraform providers using a Terraform provider SDK version below 2.
|
|
36
|
+
* If you experience problems setting this value it might not be settable. Please take a look at the provider documentation to ensure it should be settable.
|
|
37
|
+
*/
|
|
38
|
+
readonly id?: string;
|
|
39
|
+
/**
|
|
40
|
+
* The unique identifier of the app role
|
|
41
|
+
*
|
|
42
|
+
* Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#role_id ApplicationAppRoleA#role_id}
|
|
43
|
+
*/
|
|
44
|
+
readonly roleId: string;
|
|
45
|
+
/**
|
|
46
|
+
* The value that is used for the `roles` claim in ID tokens and OAuth access tokens that are authenticating an assigned service or user principal
|
|
47
|
+
*
|
|
48
|
+
* Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#value ApplicationAppRoleA#value}
|
|
49
|
+
*/
|
|
50
|
+
readonly value?: string;
|
|
51
|
+
/**
|
|
52
|
+
* timeouts block
|
|
53
|
+
*
|
|
54
|
+
* Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#timeouts ApplicationAppRoleA#timeouts}
|
|
55
|
+
*/
|
|
56
|
+
readonly timeouts?: ApplicationAppRoleTimeouts;
|
|
57
|
+
}
|
|
58
|
+
export interface ApplicationAppRoleTimeouts {
|
|
59
|
+
/**
|
|
60
|
+
* Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#create ApplicationAppRoleA#create}
|
|
61
|
+
*/
|
|
62
|
+
readonly create?: string;
|
|
63
|
+
/**
|
|
64
|
+
* Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#delete ApplicationAppRoleA#delete}
|
|
65
|
+
*/
|
|
66
|
+
readonly delete?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#read ApplicationAppRoleA#read}
|
|
69
|
+
*/
|
|
70
|
+
readonly read?: string;
|
|
71
|
+
/**
|
|
72
|
+
* Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#update ApplicationAppRoleA#update}
|
|
73
|
+
*/
|
|
74
|
+
readonly update?: string;
|
|
75
|
+
}
|
|
76
|
+
export declare function applicationAppRoleTimeoutsToTerraform(struct?: ApplicationAppRoleTimeouts | cdktn.IResolvable): any;
|
|
77
|
+
export declare function applicationAppRoleTimeoutsToHclTerraform(struct?: ApplicationAppRoleTimeouts | cdktn.IResolvable): any;
|
|
78
|
+
export declare class ApplicationAppRoleTimeoutsOutputReference extends cdktn.ComplexObject {
|
|
79
|
+
private isEmptyObject;
|
|
80
|
+
private resolvableValue?;
|
|
81
|
+
/**
|
|
82
|
+
* @param terraformResource The parent resource
|
|
83
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
84
|
+
*/
|
|
85
|
+
constructor(terraformResource: cdktn.IInterpolatingParent, terraformAttribute: string);
|
|
86
|
+
get internalValue(): ApplicationAppRoleTimeouts | cdktn.IResolvable | undefined;
|
|
87
|
+
set internalValue(value: ApplicationAppRoleTimeouts | cdktn.IResolvable | undefined);
|
|
88
|
+
private _create?;
|
|
89
|
+
get create(): string;
|
|
90
|
+
set create(value: string);
|
|
91
|
+
resetCreate(): void;
|
|
92
|
+
get createInput(): string | undefined;
|
|
93
|
+
private _delete?;
|
|
94
|
+
get delete(): string;
|
|
95
|
+
set delete(value: string);
|
|
96
|
+
resetDelete(): void;
|
|
97
|
+
get deleteInput(): string | undefined;
|
|
98
|
+
private _read?;
|
|
99
|
+
get read(): string;
|
|
100
|
+
set read(value: string);
|
|
101
|
+
resetRead(): void;
|
|
102
|
+
get readInput(): string | undefined;
|
|
103
|
+
private _update?;
|
|
104
|
+
get update(): string;
|
|
105
|
+
set update(value: string);
|
|
106
|
+
resetUpdate(): void;
|
|
107
|
+
get updateInput(): string | undefined;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Represents a {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role azuread_application_app_role}
|
|
111
|
+
*/
|
|
112
|
+
export declare class ApplicationAppRoleA extends cdktn.TerraformResource {
|
|
113
|
+
static readonly tfResourceType = "azuread_application_app_role";
|
|
114
|
+
/**
|
|
115
|
+
* Generates CDKTN code for importing a ApplicationAppRoleA resource upon running "cdktn plan <stack-name>"
|
|
116
|
+
* @param scope The scope in which to define this construct
|
|
117
|
+
* @param importToId The construct id used in the generated config for the ApplicationAppRoleA to import
|
|
118
|
+
* @param importFromId The id of the existing ApplicationAppRoleA that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#import import section} in the documentation of this resource for the id to use
|
|
119
|
+
* @param provider? Optional instance of the provider where the ApplicationAppRoleA to import is found
|
|
120
|
+
*/
|
|
121
|
+
static generateConfigForImport(scope: Construct, importToId: string, importFromId: string, provider?: cdktn.TerraformProvider): cdktn.ImportableResource;
|
|
122
|
+
/**
|
|
123
|
+
* Create a new {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role azuread_application_app_role} Resource
|
|
124
|
+
*
|
|
125
|
+
* @param scope The scope in which to define this construct
|
|
126
|
+
* @param id The scoped construct ID. Must be unique amongst siblings in the same scope
|
|
127
|
+
* @param options ApplicationAppRoleAConfig
|
|
128
|
+
*/
|
|
129
|
+
constructor(scope: Construct, id: string, config: ApplicationAppRoleAConfig);
|
|
130
|
+
private _allowedMemberTypes?;
|
|
131
|
+
get allowedMemberTypes(): string[];
|
|
132
|
+
set allowedMemberTypes(value: string[]);
|
|
133
|
+
get allowedMemberTypesInput(): string[] | undefined;
|
|
134
|
+
private _applicationId?;
|
|
135
|
+
get applicationId(): string;
|
|
136
|
+
set applicationId(value: string);
|
|
137
|
+
get applicationIdInput(): string | undefined;
|
|
138
|
+
private _description?;
|
|
139
|
+
get description(): string;
|
|
140
|
+
set description(value: string);
|
|
141
|
+
get descriptionInput(): string | undefined;
|
|
142
|
+
private _displayName?;
|
|
143
|
+
get displayName(): string;
|
|
144
|
+
set displayName(value: string);
|
|
145
|
+
get displayNameInput(): string | undefined;
|
|
146
|
+
private _id?;
|
|
147
|
+
get id(): string;
|
|
148
|
+
set id(value: string);
|
|
149
|
+
resetId(): void;
|
|
150
|
+
get idInput(): string | undefined;
|
|
151
|
+
private _roleId?;
|
|
152
|
+
get roleId(): string;
|
|
153
|
+
set roleId(value: string);
|
|
154
|
+
get roleIdInput(): string | undefined;
|
|
155
|
+
private _value?;
|
|
156
|
+
get value(): string;
|
|
157
|
+
set value(value: string);
|
|
158
|
+
resetValue(): void;
|
|
159
|
+
get valueInput(): string | undefined;
|
|
160
|
+
private _timeouts;
|
|
161
|
+
get timeouts(): ApplicationAppRoleTimeoutsOutputReference;
|
|
162
|
+
putTimeouts(value: ApplicationAppRoleTimeouts): void;
|
|
163
|
+
resetTimeouts(): void;
|
|
164
|
+
get timeoutsInput(): cdktn.IResolvable | ApplicationAppRoleTimeouts | undefined;
|
|
165
|
+
protected synthesizeAttributes(): {
|
|
166
|
+
[name: string]: any;
|
|
167
|
+
};
|
|
168
|
+
protected synthesizeHclAttributes(): {
|
|
169
|
+
[name: string]: any;
|
|
170
|
+
};
|
|
171
|
+
}
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ApplicationAppRoleA = exports.ApplicationAppRoleTimeoutsOutputReference = void 0;
|
|
5
|
+
exports.applicationAppRoleTimeoutsToTerraform = applicationAppRoleTimeoutsToTerraform;
|
|
6
|
+
exports.applicationAppRoleTimeoutsToHclTerraform = applicationAppRoleTimeoutsToHclTerraform;
|
|
7
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
8
|
+
const cdktn = require("cdktn");
|
|
9
|
+
function applicationAppRoleTimeoutsToTerraform(struct) {
|
|
10
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
11
|
+
return struct;
|
|
12
|
+
}
|
|
13
|
+
if (cdktn.isComplexElement(struct)) {
|
|
14
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
create: cdktn.stringToTerraform(struct.create),
|
|
18
|
+
delete: cdktn.stringToTerraform(struct.delete),
|
|
19
|
+
read: cdktn.stringToTerraform(struct.read),
|
|
20
|
+
update: cdktn.stringToTerraform(struct.update),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function applicationAppRoleTimeoutsToHclTerraform(struct) {
|
|
24
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
25
|
+
return struct;
|
|
26
|
+
}
|
|
27
|
+
if (cdktn.isComplexElement(struct)) {
|
|
28
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
29
|
+
}
|
|
30
|
+
const attrs = {
|
|
31
|
+
create: {
|
|
32
|
+
value: cdktn.stringToHclTerraform(struct.create),
|
|
33
|
+
isBlock: false,
|
|
34
|
+
type: "simple",
|
|
35
|
+
storageClassType: "string",
|
|
36
|
+
},
|
|
37
|
+
delete: {
|
|
38
|
+
value: cdktn.stringToHclTerraform(struct.delete),
|
|
39
|
+
isBlock: false,
|
|
40
|
+
type: "simple",
|
|
41
|
+
storageClassType: "string",
|
|
42
|
+
},
|
|
43
|
+
read: {
|
|
44
|
+
value: cdktn.stringToHclTerraform(struct.read),
|
|
45
|
+
isBlock: false,
|
|
46
|
+
type: "simple",
|
|
47
|
+
storageClassType: "string",
|
|
48
|
+
},
|
|
49
|
+
update: {
|
|
50
|
+
value: cdktn.stringToHclTerraform(struct.update),
|
|
51
|
+
isBlock: false,
|
|
52
|
+
type: "simple",
|
|
53
|
+
storageClassType: "string",
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
// remove undefined attributes
|
|
57
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
58
|
+
}
|
|
59
|
+
class ApplicationAppRoleTimeoutsOutputReference extends cdktn.ComplexObject {
|
|
60
|
+
/**
|
|
61
|
+
* @param terraformResource The parent resource
|
|
62
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
63
|
+
*/
|
|
64
|
+
constructor(terraformResource, terraformAttribute) {
|
|
65
|
+
super(terraformResource, terraformAttribute, false);
|
|
66
|
+
this.isEmptyObject = false;
|
|
67
|
+
}
|
|
68
|
+
get internalValue() {
|
|
69
|
+
if (this.resolvableValue) {
|
|
70
|
+
return this.resolvableValue;
|
|
71
|
+
}
|
|
72
|
+
let hasAnyValues = this.isEmptyObject;
|
|
73
|
+
const internalValueResult = {};
|
|
74
|
+
if (this._create !== undefined) {
|
|
75
|
+
hasAnyValues = true;
|
|
76
|
+
internalValueResult.create = this._create;
|
|
77
|
+
}
|
|
78
|
+
if (this._delete !== undefined) {
|
|
79
|
+
hasAnyValues = true;
|
|
80
|
+
internalValueResult.delete = this._delete;
|
|
81
|
+
}
|
|
82
|
+
if (this._read !== undefined) {
|
|
83
|
+
hasAnyValues = true;
|
|
84
|
+
internalValueResult.read = this._read;
|
|
85
|
+
}
|
|
86
|
+
if (this._update !== undefined) {
|
|
87
|
+
hasAnyValues = true;
|
|
88
|
+
internalValueResult.update = this._update;
|
|
89
|
+
}
|
|
90
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
91
|
+
}
|
|
92
|
+
set internalValue(value) {
|
|
93
|
+
if (value === undefined) {
|
|
94
|
+
this.isEmptyObject = false;
|
|
95
|
+
this.resolvableValue = undefined;
|
|
96
|
+
this._create = undefined;
|
|
97
|
+
this._delete = undefined;
|
|
98
|
+
this._read = undefined;
|
|
99
|
+
this._update = undefined;
|
|
100
|
+
}
|
|
101
|
+
else if (cdktn.Tokenization.isResolvable(value)) {
|
|
102
|
+
this.isEmptyObject = false;
|
|
103
|
+
this.resolvableValue = value;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
107
|
+
this.resolvableValue = undefined;
|
|
108
|
+
this._create = value.create;
|
|
109
|
+
this._delete = value.delete;
|
|
110
|
+
this._read = value.read;
|
|
111
|
+
this._update = value.update;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
get create() {
|
|
115
|
+
return this.getStringAttribute('create');
|
|
116
|
+
}
|
|
117
|
+
set create(value) {
|
|
118
|
+
this._create = value;
|
|
119
|
+
}
|
|
120
|
+
resetCreate() {
|
|
121
|
+
this._create = undefined;
|
|
122
|
+
}
|
|
123
|
+
// Temporarily expose input value. Use with caution.
|
|
124
|
+
get createInput() {
|
|
125
|
+
return this._create;
|
|
126
|
+
}
|
|
127
|
+
get delete() {
|
|
128
|
+
return this.getStringAttribute('delete');
|
|
129
|
+
}
|
|
130
|
+
set delete(value) {
|
|
131
|
+
this._delete = value;
|
|
132
|
+
}
|
|
133
|
+
resetDelete() {
|
|
134
|
+
this._delete = undefined;
|
|
135
|
+
}
|
|
136
|
+
// Temporarily expose input value. Use with caution.
|
|
137
|
+
get deleteInput() {
|
|
138
|
+
return this._delete;
|
|
139
|
+
}
|
|
140
|
+
get read() {
|
|
141
|
+
return this.getStringAttribute('read');
|
|
142
|
+
}
|
|
143
|
+
set read(value) {
|
|
144
|
+
this._read = value;
|
|
145
|
+
}
|
|
146
|
+
resetRead() {
|
|
147
|
+
this._read = undefined;
|
|
148
|
+
}
|
|
149
|
+
// Temporarily expose input value. Use with caution.
|
|
150
|
+
get readInput() {
|
|
151
|
+
return this._read;
|
|
152
|
+
}
|
|
153
|
+
get update() {
|
|
154
|
+
return this.getStringAttribute('update');
|
|
155
|
+
}
|
|
156
|
+
set update(value) {
|
|
157
|
+
this._update = value;
|
|
158
|
+
}
|
|
159
|
+
resetUpdate() {
|
|
160
|
+
this._update = undefined;
|
|
161
|
+
}
|
|
162
|
+
// Temporarily expose input value. Use with caution.
|
|
163
|
+
get updateInput() {
|
|
164
|
+
return this._update;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
exports.ApplicationAppRoleTimeoutsOutputReference = ApplicationAppRoleTimeoutsOutputReference;
|
|
168
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
169
|
+
ApplicationAppRoleTimeoutsOutputReference[_a] = { fqn: "@cdktn/provider-azuread.applicationAppRole.ApplicationAppRoleTimeoutsOutputReference", version: "15.0.0" };
|
|
170
|
+
/**
|
|
171
|
+
* Represents a {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role azuread_application_app_role}
|
|
172
|
+
*/
|
|
173
|
+
class ApplicationAppRoleA extends cdktn.TerraformResource {
|
|
174
|
+
// ==============
|
|
175
|
+
// STATIC Methods
|
|
176
|
+
// ==============
|
|
177
|
+
/**
|
|
178
|
+
* Generates CDKTN code for importing a ApplicationAppRoleA resource upon running "cdktn plan <stack-name>"
|
|
179
|
+
* @param scope The scope in which to define this construct
|
|
180
|
+
* @param importToId The construct id used in the generated config for the ApplicationAppRoleA to import
|
|
181
|
+
* @param importFromId The id of the existing ApplicationAppRoleA that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role#import import section} in the documentation of this resource for the id to use
|
|
182
|
+
* @param provider? Optional instance of the provider where the ApplicationAppRoleA to import is found
|
|
183
|
+
*/
|
|
184
|
+
static generateConfigForImport(scope, importToId, importFromId, provider) {
|
|
185
|
+
return new cdktn.ImportableResource(scope, importToId, { terraformResourceType: "azuread_application_app_role", importId: importFromId, provider });
|
|
186
|
+
}
|
|
187
|
+
// ===========
|
|
188
|
+
// INITIALIZER
|
|
189
|
+
// ===========
|
|
190
|
+
/**
|
|
191
|
+
* Create a new {@link https://registry.terraform.io/providers/hashicorp/azuread/3.7.0/docs/resources/application_app_role azuread_application_app_role} Resource
|
|
192
|
+
*
|
|
193
|
+
* @param scope The scope in which to define this construct
|
|
194
|
+
* @param id The scoped construct ID. Must be unique amongst siblings in the same scope
|
|
195
|
+
* @param options ApplicationAppRoleAConfig
|
|
196
|
+
*/
|
|
197
|
+
constructor(scope, id, config) {
|
|
198
|
+
super(scope, id, {
|
|
199
|
+
terraformResourceType: 'azuread_application_app_role',
|
|
200
|
+
terraformGeneratorMetadata: {
|
|
201
|
+
providerName: 'azuread',
|
|
202
|
+
providerVersion: '3.7.0',
|
|
203
|
+
providerVersionConstraint: '~> 3.0'
|
|
204
|
+
},
|
|
205
|
+
provider: config.provider,
|
|
206
|
+
dependsOn: config.dependsOn,
|
|
207
|
+
count: config.count,
|
|
208
|
+
lifecycle: config.lifecycle,
|
|
209
|
+
provisioners: config.provisioners,
|
|
210
|
+
connection: config.connection,
|
|
211
|
+
forEach: config.forEach
|
|
212
|
+
});
|
|
213
|
+
// timeouts - computed: false, optional: true, required: false
|
|
214
|
+
this._timeouts = new ApplicationAppRoleTimeoutsOutputReference(this, "timeouts");
|
|
215
|
+
this._allowedMemberTypes = config.allowedMemberTypes;
|
|
216
|
+
this._applicationId = config.applicationId;
|
|
217
|
+
this._description = config.description;
|
|
218
|
+
this._displayName = config.displayName;
|
|
219
|
+
this._id = config.id;
|
|
220
|
+
this._roleId = config.roleId;
|
|
221
|
+
this._value = config.value;
|
|
222
|
+
this._timeouts.internalValue = config.timeouts;
|
|
223
|
+
}
|
|
224
|
+
get allowedMemberTypes() {
|
|
225
|
+
return cdktn.Fn.tolist(this.getListAttribute('allowed_member_types'));
|
|
226
|
+
}
|
|
227
|
+
set allowedMemberTypes(value) {
|
|
228
|
+
this._allowedMemberTypes = value;
|
|
229
|
+
}
|
|
230
|
+
// Temporarily expose input value. Use with caution.
|
|
231
|
+
get allowedMemberTypesInput() {
|
|
232
|
+
return this._allowedMemberTypes;
|
|
233
|
+
}
|
|
234
|
+
get applicationId() {
|
|
235
|
+
return this.getStringAttribute('application_id');
|
|
236
|
+
}
|
|
237
|
+
set applicationId(value) {
|
|
238
|
+
this._applicationId = value;
|
|
239
|
+
}
|
|
240
|
+
// Temporarily expose input value. Use with caution.
|
|
241
|
+
get applicationIdInput() {
|
|
242
|
+
return this._applicationId;
|
|
243
|
+
}
|
|
244
|
+
get description() {
|
|
245
|
+
return this.getStringAttribute('description');
|
|
246
|
+
}
|
|
247
|
+
set description(value) {
|
|
248
|
+
this._description = value;
|
|
249
|
+
}
|
|
250
|
+
// Temporarily expose input value. Use with caution.
|
|
251
|
+
get descriptionInput() {
|
|
252
|
+
return this._description;
|
|
253
|
+
}
|
|
254
|
+
get displayName() {
|
|
255
|
+
return this.getStringAttribute('display_name');
|
|
256
|
+
}
|
|
257
|
+
set displayName(value) {
|
|
258
|
+
this._displayName = value;
|
|
259
|
+
}
|
|
260
|
+
// Temporarily expose input value. Use with caution.
|
|
261
|
+
get displayNameInput() {
|
|
262
|
+
return this._displayName;
|
|
263
|
+
}
|
|
264
|
+
get id() {
|
|
265
|
+
return this.getStringAttribute('id');
|
|
266
|
+
}
|
|
267
|
+
set id(value) {
|
|
268
|
+
this._id = value;
|
|
269
|
+
}
|
|
270
|
+
resetId() {
|
|
271
|
+
this._id = undefined;
|
|
272
|
+
}
|
|
273
|
+
// Temporarily expose input value. Use with caution.
|
|
274
|
+
get idInput() {
|
|
275
|
+
return this._id;
|
|
276
|
+
}
|
|
277
|
+
get roleId() {
|
|
278
|
+
return this.getStringAttribute('role_id');
|
|
279
|
+
}
|
|
280
|
+
set roleId(value) {
|
|
281
|
+
this._roleId = value;
|
|
282
|
+
}
|
|
283
|
+
// Temporarily expose input value. Use with caution.
|
|
284
|
+
get roleIdInput() {
|
|
285
|
+
return this._roleId;
|
|
286
|
+
}
|
|
287
|
+
get value() {
|
|
288
|
+
return this.getStringAttribute('value');
|
|
289
|
+
}
|
|
290
|
+
set value(value) {
|
|
291
|
+
this._value = value;
|
|
292
|
+
}
|
|
293
|
+
resetValue() {
|
|
294
|
+
this._value = undefined;
|
|
295
|
+
}
|
|
296
|
+
// Temporarily expose input value. Use with caution.
|
|
297
|
+
get valueInput() {
|
|
298
|
+
return this._value;
|
|
299
|
+
}
|
|
300
|
+
get timeouts() {
|
|
301
|
+
return this._timeouts;
|
|
302
|
+
}
|
|
303
|
+
putTimeouts(value) {
|
|
304
|
+
this._timeouts.internalValue = value;
|
|
305
|
+
}
|
|
306
|
+
resetTimeouts() {
|
|
307
|
+
this._timeouts.internalValue = undefined;
|
|
308
|
+
}
|
|
309
|
+
// Temporarily expose input value. Use with caution.
|
|
310
|
+
get timeoutsInput() {
|
|
311
|
+
return this._timeouts.internalValue;
|
|
312
|
+
}
|
|
313
|
+
// =========
|
|
314
|
+
// SYNTHESIS
|
|
315
|
+
// =========
|
|
316
|
+
synthesizeAttributes() {
|
|
317
|
+
return {
|
|
318
|
+
allowed_member_types: cdktn.listMapper(cdktn.stringToTerraform, false)(this._allowedMemberTypes),
|
|
319
|
+
application_id: cdktn.stringToTerraform(this._applicationId),
|
|
320
|
+
description: cdktn.stringToTerraform(this._description),
|
|
321
|
+
display_name: cdktn.stringToTerraform(this._displayName),
|
|
322
|
+
id: cdktn.stringToTerraform(this._id),
|
|
323
|
+
role_id: cdktn.stringToTerraform(this._roleId),
|
|
324
|
+
value: cdktn.stringToTerraform(this._value),
|
|
325
|
+
timeouts: applicationAppRoleTimeoutsToTerraform(this._timeouts.internalValue),
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
synthesizeHclAttributes() {
|
|
329
|
+
const attrs = {
|
|
330
|
+
allowed_member_types: {
|
|
331
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(this._allowedMemberTypes),
|
|
332
|
+
isBlock: false,
|
|
333
|
+
type: "set",
|
|
334
|
+
storageClassType: "stringList",
|
|
335
|
+
},
|
|
336
|
+
application_id: {
|
|
337
|
+
value: cdktn.stringToHclTerraform(this._applicationId),
|
|
338
|
+
isBlock: false,
|
|
339
|
+
type: "simple",
|
|
340
|
+
storageClassType: "string",
|
|
341
|
+
},
|
|
342
|
+
description: {
|
|
343
|
+
value: cdktn.stringToHclTerraform(this._description),
|
|
344
|
+
isBlock: false,
|
|
345
|
+
type: "simple",
|
|
346
|
+
storageClassType: "string",
|
|
347
|
+
},
|
|
348
|
+
display_name: {
|
|
349
|
+
value: cdktn.stringToHclTerraform(this._displayName),
|
|
350
|
+
isBlock: false,
|
|
351
|
+
type: "simple",
|
|
352
|
+
storageClassType: "string",
|
|
353
|
+
},
|
|
354
|
+
id: {
|
|
355
|
+
value: cdktn.stringToHclTerraform(this._id),
|
|
356
|
+
isBlock: false,
|
|
357
|
+
type: "simple",
|
|
358
|
+
storageClassType: "string",
|
|
359
|
+
},
|
|
360
|
+
role_id: {
|
|
361
|
+
value: cdktn.stringToHclTerraform(this._roleId),
|
|
362
|
+
isBlock: false,
|
|
363
|
+
type: "simple",
|
|
364
|
+
storageClassType: "string",
|
|
365
|
+
},
|
|
366
|
+
value: {
|
|
367
|
+
value: cdktn.stringToHclTerraform(this._value),
|
|
368
|
+
isBlock: false,
|
|
369
|
+
type: "simple",
|
|
370
|
+
storageClassType: "string",
|
|
371
|
+
},
|
|
372
|
+
timeouts: {
|
|
373
|
+
value: applicationAppRoleTimeoutsToHclTerraform(this._timeouts.internalValue),
|
|
374
|
+
isBlock: true,
|
|
375
|
+
type: "struct",
|
|
376
|
+
storageClassType: "ApplicationAppRoleTimeouts",
|
|
377
|
+
},
|
|
378
|
+
};
|
|
379
|
+
// remove undefined attributes
|
|
380
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
exports.ApplicationAppRoleA = ApplicationAppRoleA;
|
|
384
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
385
|
+
ApplicationAppRoleA[_b] = { fqn: "@cdktn/provider-azuread.applicationAppRole.ApplicationAppRoleA", version: "15.0.0" };
|
|
386
|
+
// =================
|
|
387
|
+
// STATIC PROPERTIES
|
|
388
|
+
// =================
|
|
389
|
+
ApplicationAppRoleA.tfResourceType = "azuread_application_app_role";
|
|
390
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwbGljYXRpb24tYXBwLXJvbGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQW1GQSxzRkFXQztBQUdELDRGQWtDQzs7QUExSEQsK0JBQStCO0FBMEUvQixTQUFnQixxQ0FBcUMsQ0FBQyxNQUF1RDtJQUMzRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxNQUFNLENBQUM7SUFBQyxDQUFDO0lBQzVGLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvSEFBb0gsQ0FBQyxDQUFDO0lBQ3hJLENBQUM7SUFDRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFPLENBQUMsTUFBTSxDQUFDO1FBQy9DLE1BQU0sRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLE1BQU0sQ0FBQztRQUMvQyxJQUFJLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU8sQ0FBQyxJQUFJLENBQUM7UUFDM0MsTUFBTSxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFPLENBQUMsTUFBTSxDQUFDO0tBQ2hELENBQUE7QUFDSCxDQUFDO0FBR0QsU0FBZ0Isd0NBQXdDLENBQUMsTUFBdUQ7SUFDOUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sTUFBTSxDQUFDO0lBQUMsQ0FBQztJQUM1RixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMs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ICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDIxLCAyMDI2XG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbi8vIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9hcHBfcm9sZVxuLy8gZ2VuZXJhdGVkIGZyb20gdGVycmFmb3JtIHJlc291cmNlIHNjaGVtYVxuXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGNka3RuIGZyb20gJ2Nka3RuJztcblxuLy8gQ29uZmlndXJhdGlvblxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uQXBwUm9sZUFDb25maWcgZXh0ZW5kcyBjZGt0bi5UZXJyYWZvcm1NZXRhQXJndW1lbnRzIHtcbiAgLyoqXG4gICogU3BlY2lmaWVzIHdoZXRoZXIgdGhpcyBhcHAgcm9sZSBkZWZpbml0aW9uIGNhbiBiZSBhc3NpZ25lZCB0byB1c2VycyBhbmQgZ3JvdXBzIGJ5IHNldHRpbmcgdG8gYFVzZXJgLCBvciB0byBvdGhlciBhcHBsaWNhdGlvbnMgKHRoYXQgYXJlIGFjY2Vzc2luZyB0aGlzIGFwcGxpY2F0aW9uIGluIGEgc3RhbmRhbG9uZSBzY2VuYXJpbykgYnkgc2V0dGluZyB0byBgQXBwbGljYXRpb25gLCBvciB0byBib3RoXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9hcHBfcm9sZSNhbGxvd2VkX21lbWJlcl90eXBlcyBBcHBsaWNhdGlvbkFwcFJvbGVBI2FsbG93ZWRfbWVtYmVyX3R5cGVzfVxuICAqL1xuICByZWFkb25seSBhbGxvd2VkTWVtYmVyVHlwZXM6IHN0cmluZ1tdO1xuICAvKipcbiAgKiBUaGUgcmVzb3VyY2UgSUQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHdoaWNoIHRoaXMgYXBwIHJvbGUgc2hvdWxkIGJlIGFwcGxpZWRcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2FwcGxpY2F0aW9uX2FwcF9yb2xlI2FwcGxpY2F0aW9uX2lkIEFwcGxpY2F0aW9uQXBwUm9sZUEjYXBwbGljYXRpb25faWR9XG4gICovXG4gIHJlYWRvbmx5IGFwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgLyoqXG4gICogRGVzY3JpcHRpb24gb2YgdGhlIGFwcCByb2xlIHRoYXQgYXBwZWFycyB3aGVuIHRoZSByb2xlIGlzIGJlaW5nIGFzc2lnbmVkIGFuZCwgaWYgdGhlIHJvbGUgZnVuY3Rpb25zIGFzIGFuIGFwcGxpY2F0aW9uIHBlcm1pc3Npb25zLCBkdXJpbmcgdGhlIGNvbnNlbnQgZXhwZXJpZW5jZXNcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2FwcGxpY2F0aW9uX2FwcF9yb2xlI2Rlc2NyaXB0aW9uIEFwcGxpY2F0aW9uQXBwUm9sZUEjZGVzY3JpcHRpb259XG4gICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKlxuICAqIERpc3BsYXkgbmFtZSBmb3IgdGhlIGFwcCByb2xlIHRoYXQgYXBwZWFycyBkdXJpbmcgYXBwIHJvbGUgYXNzaWdubWVudCBhbmQgaW4gY29uc2VudCBleHBlcmllbmNlc1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvYXBwbGljYXRpb25fYXBwX3JvbGUjZGlzcGxheV9uYW1lIEFwcGxpY2F0aW9uQXBwUm9sZUEjZGlzcGxheV9uYW1lfVxuICAqL1xuICByZWFkb25seSBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9hcHBfcm9sZSNpZCBBcHBsaWNhdGlvbkFwcFJvbGVBI2lkfVxuICAqXG4gICogUGxlYXNlIGJlIGF3YXJlIHRoYXQgdGhlIGlkIGZpZWxkIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gYWxsIHJlc291cmNlcyBpbiBUZXJyYWZvcm0gcHJvdmlkZXJzIHVzaW5nIGEgVGVycmFmb3JtIHByb3ZpZGVyIFNESyB2ZXJzaW9uIGJlbG93IDIuXG4gICogSWYgeW91IGV4cGVyaWVuY2UgcHJvYmxlbXMgc2V0dGluZyB0aGlzIHZhbHVlIGl0IG1pZ2h0IG5vdCBiZSBzZXR0YWJsZS4gUGxlYXNlIHRha2UgYSBsb29rIGF0IHRoZSBwcm92aWRlciBkb2N1bWVudGF0aW9uIHRvIGVuc3VyZSBpdCBzaG91bGQgYmUgc2V0dGFibGUuXG4gICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGFwcCByb2xlXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9hcHBfcm9sZSNyb2xlX2lkIEFwcGxpY2F0aW9uQXBwUm9sZUEjcm9sZV9pZH1cbiAgKi9cbiAgcmVhZG9ubHkgcm9sZUlkOiBzdHJpbmc7XG4gIC8qKlxuICAqIFRoZSB2YWx1ZSB0aGF0IGlzIHVzZWQgZm9yIHRoZSBgcm9sZXNgIGNsYWltIGluIElEIHRva2VucyBhbmQgT0F1dGggYWNjZXNzIHRva2VucyB0aGF0IGFyZSBhdXRoZW50aWNhdGluZyBhbiBhc3NpZ25lZCBzZXJ2aWNlIG9yIHVzZXIgcHJpbmNpcGFsXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9hcHBfcm9sZSN2YWx1ZSBBcHBsaWNhdGlvbkFwcFJvbGVBI3ZhbHVlfVxuICAqL1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcbiAgLyoqXG4gICogdGltZW91dHMgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2FwcGxpY2F0aW9uX2FwcF9yb2xlI3RpbWVvdXRzIEFwcGxpY2F0aW9uQXBwUm9sZUEjdGltZW91dHN9XG4gICovXG4gIHJlYWRvbmx5IHRpbWVvdXRzPzogQXBwbGljYXRpb25BcHBSb2xlVGltZW91dHM7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uQXBwUm9sZVRpbWVvdXRzIHtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvYXBwbGljYXRpb25fYXBwX3JvbGUjY3JlYXRlIEFwcGxpY2F0aW9uQXBwUm9sZUEjY3JlYXRlfVxuICAqL1xuICByZWFkb25seSBjcmVhdGU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2FwcGxpY2F0aW9uX2FwcF9yb2xlI2RlbGV0ZSBBcHBsaWNhdGlvbkFwcFJvbGVBI2RlbGV0ZX1cbiAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9hcHBfcm9sZSNyZWFkIEFwcGxpY2F0aW9uQXBwUm9sZUEjcmVhZH1cbiAgKi9cbiAgcmVhZG9ubHkgcmVhZD86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F6dXJlYWQvMy43LjAvZG9jcy9yZXNvdXJjZXMvYXBwbGljYXRpb25fYXBwX3JvbGUjdXBkYXRlIEFwcGxpY2F0aW9uQXBwUm9sZUEjdXBkYXRlfVxuICAqL1xuICByZWFkb25seSB1cGRhdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBsaWNhdGlvbkFwcFJvbGVUaW1lb3V0c1RvVGVycmFmb3JtKHN0cnVjdD86IEFwcGxpY2F0aW9uQXBwUm9sZVRpbWVvdXRzIHwgY2RrdG4uSVJlc29sdmFibGUpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLmNyZWF0ZSksXG4gICAgZGVsZXRlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLmRlbGV0ZSksXG4gICAgcmVhZDogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5yZWFkKSxcbiAgICB1cGRhdGU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEudXBkYXRlKSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBsaWNhdGlvbkFwcFJvbGVUaW1lb3V0c1RvSGNsVGVycmFmb3JtKHN0cnVjdD86IEFwcGxpY2F0aW9uQXBwUm9sZVRpbWVvdXRzIHwgY2RrdG4uSVJlc29sdmFibGUpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIGNyZWF0ZToge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuY3JlYXRlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBkZWxldGU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmRlbGV0ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgcmVhZDoge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEucmVhZCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgdXBkYXRlOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS51cGRhdGUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICB9O1xuXG4gIC8vIHJlbW92ZSB1bmRlZmluZWQgYXR0cmlidXRlc1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkpO1xufVxuXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25BcHBSb2xlVGltZW91dHNPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gIHByaXZhdGUgcmVzb2x2YWJsZVZhbHVlPzogY2RrdG4uSVJlc29sdmFibGU7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IEFwcGxpY2F0aW9uQXBwUm9sZVRpbWVvdXRzIHwgY2RrdG4uSVJlc29sdmFibGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnJlc29sdmFibGVWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2YWJsZVZhbHVlO1xuICAgIH1cbiAgICBsZXQgaGFzQW55VmFsdWVzID0gdGhpcy5pc0VtcHR5T2JqZWN0O1xuICAgIGNvbnN0IGludGVybmFsVmFsdWVSZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLl9jcmVhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuY3JlYXRlID0gdGhpcy5fY3JlYXRlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVsZXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LmRlbGV0ZSA9IHRoaXMuX2RlbGV0ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3JlYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQucmVhZCA9IHRoaXMuX3JlYWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl91cGRhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQudXBkYXRlID0gdGhpcy5fdXBkYXRlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogQXBwbGljYXRpb25BcHBSb2xlVGltZW91dHMgfCBjZGt0bi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fY3JlYXRlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZGVsZXRlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fcmVhZCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3VwZGF0ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jcmVhdGUgPSB2YWx1ZS5jcmVhdGU7XG4gICAgICB0aGlzLl9kZWxldGUgPSB2YWx1ZS5kZWxldGU7XG4gICAgICB0aGlzLl9yZWFkID0gdmFsdWUucmVhZDtcbiAgICAgIHRoaXMuX3VwZGF0ZSA9IHZhbHVlLnVwZGF0ZTtcbiAgICB9XG4gIH1cblxuICAvLyBjcmVhdGUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfY3JlYXRlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdjcmVhdGUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNyZWF0ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3JlYXRlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Q3JlYXRlKCkge1xuICAgIHRoaXMuX2NyZWF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY3JlYXRlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZTtcbiAgfVxuXG4gIC8vIGRlbGV0ZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kZWxldGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGRlbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2RlbGV0ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVsZXRlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kZWxldGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREZWxldGUoKSB7XG4gICAgdGhpcy5fZGVsZXRlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkZWxldGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVsZXRlO1xuICB9XG5cbiAgLy8gcmVhZCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9yZWFkPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCByZWFkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgncmVhZCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVhZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcmVhZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJlYWQoKSB7XG4gICAgdGhpcy5fcmVhZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcmVhZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkO1xuICB9XG5cbiAgLy8gdXBkYXRlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3VwZGF0ZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgdXBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgndXBkYXRlJyk7XG4gIH1cbiAgcHVibGljIHNldCB1cGRhdGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3VwZGF0ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFVwZGF0ZSgpIHtcbiAgICB0aGlzLl91cGRhdGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHVwZGF0ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl91cGRhdGU7XG4gIH1cbn1cblxuLyoqXG4qIFJlcHJlc2VudHMgYSB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2FwcGxpY2F0aW9uX2FwcF9yb2xlIGF6dXJlYWRfYXBwbGljYXRpb25fYXBwX3JvbGV9XG4qL1xuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uQXBwUm9sZUEgZXh0ZW5kcyBjZGt0bi5UZXJyYWZvcm1SZXNvdXJjZSB7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT1cbiAgLy8gU1RBVElDIFBST1BFUlRJRVNcbiAgLy8gPT09PT09PT09PT09PT09PT1cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0ZlJlc291cmNlVHlwZSA9IFwiYXp1cmVhZF9hcHBsaWNhdGlvbl9hcHBfcm9sZVwiO1xuXG4gIC8vID09PT09PT09PT09PT09XG4gIC8vIFNUQVRJQyBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09XG4gIC8qKlxuICAqIEdlbmVyYXRlcyBDREtUTiBjb2RlIGZvciBpbXBvcnRpbmcgYSBBcHBsaWNhdGlvbkFwcFJvbGVBIHJlc291cmNlIHVwb24gcnVubmluZyBcImNka3RuIHBsYW4gPHN0YWNrLW5hbWU+XCJcbiAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAqIEBwYXJhbSBpbXBvcnRUb0lkIFRoZSBjb25zdHJ1Y3QgaWQgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvbmZpZyBmb3IgdGhlIEFwcGxpY2F0aW9uQXBwUm9sZUEgdG8gaW1wb3J0XG4gICogQHBhcmFtIGltcG9ydEZyb21JZCBUaGUgaWQgb2YgdGhlIGV4aXN0aW5nIEFwcGxpY2F0aW9uQXBwUm9sZUEgdGhhdCBzaG91bGQgYmUgaW1wb3J0ZWQuIFJlZmVyIHRvIHRoZSB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9henVyZWFkLzMuNy4wL2RvY3MvcmVzb3VyY2VzL2FwcGxpY2F0aW9uX2FwcF9yb2xlI2ltcG9ydCBpbXBvcnQgc2VjdGlvbn0gaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyByZXNvdXJjZSBmb3IgdGhlIGlkIHRvIHVzZVxuICAqIEBwYXJhbSBwcm92aWRlcj8gT3B0aW9uYWwgaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVyIHdoZXJlIHRoZSBBcHBsaWNhdGlvbkFwcFJvbGVBIHRvIGltcG9ydCBpcyBmb3VuZFxuICAqL1xuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlQ29uZmlnRm9ySW1wb3J0KHNjb3BlOiBDb25zdHJ1Y3QsIGltcG9ydFRvSWQ6IHN0cmluZywgaW1wb3J0RnJvbUlkOiBzdHJpbmcsIHByb3ZpZGVyPzogY2RrdG4uVGVycmFmb3JtUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBjZGt0bi5JbXBvcnRhYmxlUmVzb3VyY2Uoc2NvcGUsIGltcG9ydFRvSWQsIHsgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiBcImF6dXJlYWRfYXBwbGljYXRpb25fYXBwX3JvbGVcIiwgaW1wb3J0SWQ6IGltcG9ydEZyb21JZCwgcHJvdmlkZXIgfSk7XG4gICAgICB9XG5cbiAgLy8gPT09PT09PT09PT1cbiAgLy8gSU5JVElBTElaRVJcbiAgLy8gPT09PT09PT09PT1cblxuICAvKipcbiAgKiBDcmVhdGUgYSBuZXcge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXp1cmVhZC8zLjcuMC9kb2NzL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9hcHBfcm9sZSBhenVyZWFkX2FwcGxpY2F0aW9uX2FwcF9yb2xlfSBSZXNvdXJjZVxuICAqXG4gICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgKiBAcGFyYW0gaWQgVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuIE11c3QgYmUgdW5pcXVlIGFtb25nc3Qgc2libGluZ3MgaW4gdGhlIHNhbWUgc2NvcGVcbiAgKiBAcGFyYW0gb3B0aW9ucyBBcHBsaWNhdGlvbkFwcFJvbGVBQ29uZmlnXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWc6IEFwcGxpY2F0aW9uQXBwUm9sZUFDb25maWcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHRlcnJhZm9ybVJlc291cmNlVHlwZTogJ2F6dXJlYWRfYXBwbGljYXRpb25fYXBwX3JvbGUnLFxuICAgICAgdGVycmFmb3JtR2VuZXJhdG9yTWV0YWRhdGE6IHtcbiAgICAgICAgcHJvdmlkZXJOYW1lOiAnYXp1cmVhZCcsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbjogJzMuNy4wJyxcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludDogJ34+IDMuMCdcbiAgICAgIH0sXG4gICAgICBwcm92aWRlcjogY29uZmlnLnByb3ZpZGVyLFxuICAgICAgZGVwZW5kc09uOiBjb25maWcuZGVwZW5kc09uLFxuICAgICAgY291bnQ6IGNvbmZpZy5jb3VudCxcbiAgICAgIGxpZmVjeWNsZTogY29uZmlnLmxpZmVjeWNsZSxcbiAgICAgIHByb3Zpc2lvbmVyczogY29uZmlnLnByb3Zpc2lvbmVycyxcbiAgICAgIGNvbm5lY3Rpb246IGNvbmZpZy5jb25uZWN0aW9uLFxuICAgICAgZm9yRWFjaDogY29uZmlnLmZvckVhY2hcbiAgICB9KTtcbiAgICB0aGlzLl9hbGxvd2VkTWVtYmVyVHlwZXMgPSBjb25maWcuYWxsb3dlZE1lbWJlclR5cGVzO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uSWQgPSBjb25maWcuYXBwbGljYXRpb25JZDtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IGNvbmZpZy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLl9kaXNwbGF5TmFtZSA9IGNvbmZpZy5kaXNwbGF5TmFtZTtcbiAgICB0aGlzLl9pZCA9IGNvbmZpZy5pZDtcbiAgICB0aGlzLl9yb2xlSWQgPSBjb25maWcucm9sZUlkO1xuICAgIHRoaXMuX3ZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgIHRoaXMuX3RpbWVvdXRzLmludGVybmFsVmFsdWUgPSBjb25maWcudGltZW91dHM7XG4gIH1cblxuICAvLyA9PT09PT09PT09XG4gIC8vIEFUVFJJQlVURVNcbiAgLy8gPT09PT09PT09PVxuXG4gIC8vIGFsbG93ZWRfbWVtYmVyX3R5cGVzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX2FsbG93ZWRNZW1iZXJUeXBlcz86IHN0cmluZ1tdOyBcbiAgcHVibGljIGdldCBhbGxvd2VkTWVtYmVyVHlwZXMoKSB7XG4gICAgcmV0dXJuIGNka3RuLkZuLnRvbGlzdCh0aGlzLmdldExpc3RBdHRyaWJ1dGUoJ2FsbG93ZWRfbWVtYmVyX3R5cGVzJykpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dlZE1lbWJlclR5cGVzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX2FsbG93ZWRNZW1iZXJUeXBlcyA9IHZhbHVlO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhbGxvd2VkTWVtYmVyVHlwZXNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dlZE1lbWJlclR5cGVzO1xuICB9XG5cbiAgLy8gYXBwbGljYXRpb25faWQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfYXBwbGljYXRpb25JZD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgYXBwbGljYXRpb25JZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2FwcGxpY2F0aW9uX2lkJyk7XG4gIH1cbiAgcHVibGljIHNldCBhcHBsaWNhdGlvbklkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGFwcGxpY2F0aW9uSWRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25JZDtcbiAgfVxuXG4gIC8vIGRlc2NyaXB0aW9uIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX2Rlc2NyaXB0aW9uPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2Rlc2NyaXB0aW9uJyk7XG4gIH1cbiAgcHVibGljIHNldCBkZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGVzY3JpcHRpb24gPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb25JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVzY3JpcHRpb247XG4gIH1cblxuICAvLyBkaXNwbGF5X25hbWUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfZGlzcGxheU5hbWU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGRpc3BsYXlOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnZGlzcGxheV9uYW1lJyk7XG4gIH1cbiAgcHVibGljIHNldCBkaXNwbGF5TmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGlzcGxheU5hbWUgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGlzcGxheU5hbWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheU5hbWU7XG4gIH1cblxuICAvLyBpZCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2lkPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2lkJyk7XG4gIH1cbiAgcHVibGljIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faWQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRJZCgpIHtcbiAgICB0aGlzLl9pZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaWRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICAvLyByb2xlX2lkIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX3JvbGVJZD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgcm9sZUlkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgncm9sZV9pZCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgcm9sZUlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yb2xlSWQgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcm9sZUlkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JvbGVJZDtcbiAgfVxuXG4gIC8vIHZhbHVlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3ZhbHVlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRWYWx1ZSgpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdmFsdWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICAvLyB0aW1lb3V0cyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF90aW1lb3V0cyA9IG5ldyBBcHBsaWNhdGlvbkFwcFJvbGVUaW1lb3V0c091dHB1dFJlZmVyZW5jZSh0aGlzLCBcInRpbWVvdXRzXCIpO1xuICBwdWJsaWMgZ2V0IHRpbWVvdXRzKCkge1xuICAgIHJldHVybiB0aGlzLl90aW1lb3V0cztcbiAgfVxuICBwdWJsaWMgcHV0VGltZW91dHModmFsdWU6IEFwcGxpY2F0aW9uQXBwUm9sZVRpbWVvdXRzKSB7XG4gICAgdGhpcy5fdGltZW91dHMuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFRpbWVvdXRzKCkge1xuICAgIHRoaXMuX3RpbWVvdXRzLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHRpbWVvdXRzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RpbWVvdXRzLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyA9PT09PT09PT1cbiAgLy8gU1lOVEhFU0lTXG4gIC8vID09PT09PT09PVxuXG4gIHByb3RlY3RlZCBzeW50aGVzaXplQXR0cmlidXRlcygpOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFsbG93ZWRfbWVtYmVyX3R5cGVzOiBjZGt0bi5saXN0TWFwcGVyKGNka3RuLnN0cmluZ1RvVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fYWxsb3dlZE1lbWJlclR5cGVzKSxcbiAgICAgIGFwcGxpY2F0aW9uX2lkOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9hcHBsaWNhdGlvbklkKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9kZXNjcmlwdGlvbiksXG4gICAgICBkaXNwbGF5X25hbWU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2Rpc3BsYXlOYW1lKSxcbiAgICAgIGlkOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9pZCksXG4gICAgICByb2xlX2lkOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9yb2xlSWQpLFxuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX3ZhbHVlKSxcbiAgICAgIHRpbWVvdXRzOiBhcHBsaWNhdGlvbkFwcFJvbGVUaW1lb3V0c1RvVGVycmFmb3JtKHRoaXMuX3RpbWVvdXRzLmludGVybmFsVmFsdWUpLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUhjbEF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IGF0dHJzID0ge1xuICAgICAgYWxsb3dlZF9tZW1iZXJfdHlwZXM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmxpc3RNYXBwZXJIY2woY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl9hbGxvd2VkTWVtYmVyVHlwZXMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzZXRcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdMaXN0XCIsXG4gICAgICB9LFxuICAgICAgYXBwbGljYXRpb25faWQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2FwcGxpY2F0aW9uSWQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fZGVzY3JpcHRpb24pLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBkaXNwbGF5X25hbWU6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2Rpc3BsYXlOYW1lKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgaWQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2lkKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgcm9sZV9pZDoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fcm9sZUlkKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX3ZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgdGltZW91dHM6IHtcbiAgICAgICAgdmFsdWU6IGFwcGxpY2F0aW9uQXBwUm9sZVRpbWVvdXRzVG9IY2xUZXJyYWZvcm0odGhpcy5fdGltZW91dHMuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwic3RydWN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQXBwbGljYXRpb25BcHBSb2xlVGltZW91dHNcIixcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIHJlbW92ZSB1bmRlZmluZWQgYXR0cmlidXRlc1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkICkpXG4gIH1cbn1cbiJdfQ==
|