@cdktn/provider-newrelic 14.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.
Files changed (154) hide show
  1. package/.jsii +198156 -0
  2. package/LICENSE +355 -0
  3. package/README.md +94 -0
  4. package/lib/account-management/index.d.ts +122 -0
  5. package/lib/account-management/index.js +293 -0
  6. package/lib/alert-channel/index.d.ts +351 -0
  7. package/lib/alert-channel/index.js +769 -0
  8. package/lib/alert-compound-condition/index.d.ts +233 -0
  9. package/lib/alert-compound-condition/index.js +506 -0
  10. package/lib/alert-condition/index.d.ts +271 -0
  11. package/lib/alert-condition/index.js +558 -0
  12. package/lib/alert-muting-rule/index.d.ts +309 -0
  13. package/lib/alert-muting-rule/index.js +714 -0
  14. package/lib/alert-policy/index.d.ts +91 -0
  15. package/lib/alert-policy/index.js +174 -0
  16. package/lib/alert-policy-channel/index.d.ts +114 -0
  17. package/lib/alert-policy-channel/index.js +258 -0
  18. package/lib/api-access-key/index.d.ts +102 -0
  19. package/lib/api-access-key/index.js +220 -0
  20. package/lib/application-settings/index.d.ts +414 -0
  21. package/lib/application-settings/index.js +944 -0
  22. package/lib/browser-application/index.d.ts +149 -0
  23. package/lib/browser-application/index.js +341 -0
  24. package/lib/cloud-aws-eu-sovereign-integrations/index.d.ts +199 -0
  25. package/lib/cloud-aws-eu-sovereign-integrations/index.js +481 -0
  26. package/lib/cloud-aws-eu-sovereign-link-account/index.d.ts +90 -0
  27. package/lib/cloud-aws-eu-sovereign-link-account/index.js +171 -0
  28. package/lib/cloud-aws-govcloud-integrations/index.d.ts +1523 -0
  29. package/lib/cloud-aws-govcloud-integrations/index.js +3776 -0
  30. package/lib/cloud-aws-govcloud-link-account/index.d.ts +90 -0
  31. package/lib/cloud-aws-govcloud-link-account/index.js +171 -0
  32. package/lib/cloud-aws-integrations/index.d.ts +3345 -0
  33. package/lib/cloud-aws-integrations/index.js +8599 -0
  34. package/lib/cloud-aws-link-account/index.d.ts +90 -0
  35. package/lib/cloud-aws-link-account/index.js +171 -0
  36. package/lib/cloud-azure-integrations/index.d.ts +1666 -0
  37. package/lib/cloud-azure-integrations/index.js +4361 -0
  38. package/lib/cloud-azure-link-account/index.d.ts +109 -0
  39. package/lib/cloud-azure-link-account/index.js +204 -0
  40. package/lib/cloud-gcp-integrations/index.d.ts +1049 -0
  41. package/lib/cloud-gcp-integrations/index.js +2810 -0
  42. package/lib/cloud-gcp-link-account/index.d.ts +79 -0
  43. package/lib/cloud-gcp-link-account/index.js +150 -0
  44. package/lib/cloud-oci-link-account/index.d.ts +195 -0
  45. package/lib/cloud-oci-link-account/index.js +366 -0
  46. package/lib/data-newrelic-account/index.d.ts +82 -0
  47. package/lib/data-newrelic-account/index.js +160 -0
  48. package/lib/data-newrelic-alert-channel/index.d.ts +126 -0
  49. package/lib/data-newrelic-alert-channel/index.js +298 -0
  50. package/lib/data-newrelic-alert-policy/index.d.ts +82 -0
  51. package/lib/data-newrelic-alert-policy/index.js +161 -0
  52. package/lib/data-newrelic-application/index.d.ts +60 -0
  53. package/lib/data-newrelic-application/index.js +122 -0
  54. package/lib/data-newrelic-authentication-domain/index.d.ts +47 -0
  55. package/lib/data-newrelic-authentication-domain/index.js +97 -0
  56. package/lib/data-newrelic-cloud-account/index.d.ts +79 -0
  57. package/lib/data-newrelic-cloud-account/index.js +150 -0
  58. package/lib/data-newrelic-entity/index.d.ts +189 -0
  59. package/lib/data-newrelic-entity/index.js +401 -0
  60. package/lib/data-newrelic-group/index.d.ts +58 -0
  61. package/lib/data-newrelic-group/index.js +116 -0
  62. package/lib/data-newrelic-key-transaction/index.d.ts +82 -0
  63. package/lib/data-newrelic-key-transaction/index.js +161 -0
  64. package/lib/data-newrelic-notification-destination/index.d.ts +165 -0
  65. package/lib/data-newrelic-notification-destination/index.js +372 -0
  66. package/lib/data-newrelic-obfuscation-expression/index.d.ts +69 -0
  67. package/lib/data-newrelic-obfuscation-expression/index.js +132 -0
  68. package/lib/data-newrelic-service-level-alert-helper/index.d.ts +111 -0
  69. package/lib/data-newrelic-service-level-alert-helper/index.js +244 -0
  70. package/lib/data-newrelic-synthetics-private-location/index.d.ts +80 -0
  71. package/lib/data-newrelic-synthetics-private-location/index.js +153 -0
  72. package/lib/data-newrelic-synthetics-secure-credential/index.d.ts +71 -0
  73. package/lib/data-newrelic-synthetics-secure-credential/index.js +140 -0
  74. package/lib/data-newrelic-test-grok-pattern/index.d.ts +149 -0
  75. package/lib/data-newrelic-test-grok-pattern/index.js +318 -0
  76. package/lib/data-newrelic-user/index.d.ts +69 -0
  77. package/lib/data-newrelic-user/index.js +136 -0
  78. package/lib/data-partition-rule/index.d.ts +146 -0
  79. package/lib/data-partition-rule/index.js +319 -0
  80. package/lib/entity-tags/index.d.ts +156 -0
  81. package/lib/entity-tags/index.js +368 -0
  82. package/lib/events-to-metrics-rule/index.d.ts +102 -0
  83. package/lib/events-to-metrics-rule/index.js +196 -0
  84. package/lib/group/index.d.ts +79 -0
  85. package/lib/group/index.js +150 -0
  86. package/lib/index.d.ts +74 -0
  87. package/lib/index.js +80 -0
  88. package/lib/infra-alert-condition/index.d.ts +293 -0
  89. package/lib/infra-alert-condition/index.js +665 -0
  90. package/lib/insights-event/index.d.ts +186 -0
  91. package/lib/insights-event/index.js +425 -0
  92. package/lib/key-transaction/index.d.ts +100 -0
  93. package/lib/key-transaction/index.js +191 -0
  94. package/lib/lazy-index.d.ts +4 -0
  95. package/lib/lazy-index.js +77 -0
  96. package/lib/log-parsing-rule/index.d.ts +132 -0
  97. package/lib/log-parsing-rule/index.js +250 -0
  98. package/lib/monitor-downtime/index.d.ts +259 -0
  99. package/lib/monitor-downtime/index.js +594 -0
  100. package/lib/notification-channel/index.d.ts +240 -0
  101. package/lib/notification-channel/index.js +546 -0
  102. package/lib/notification-destination/index.d.ts +406 -0
  103. package/lib/notification-destination/index.js +1030 -0
  104. package/lib/nrql-alert-condition/index.d.ts +976 -0
  105. package/lib/nrql-alert-condition/index.js +2320 -0
  106. package/lib/nrql-drop-rule/index.d.ts +127 -0
  107. package/lib/nrql-drop-rule/index.js +287 -0
  108. package/lib/obfuscation-expression/index.d.ts +90 -0
  109. package/lib/obfuscation-expression/index.js +171 -0
  110. package/lib/obfuscation-rule/index.d.ts +173 -0
  111. package/lib/obfuscation-rule/index.js +361 -0
  112. package/lib/one-dashboard/index-structs/index.d.ts +6 -0
  113. package/lib/one-dashboard/index-structs/index.js +23 -0
  114. package/lib/one-dashboard/index-structs/structs0.d.ts +7000 -0
  115. package/lib/one-dashboard/index-structs/structs0.js +17966 -0
  116. package/lib/one-dashboard/index-structs/structs400.d.ts +3703 -0
  117. package/lib/one-dashboard/index-structs/structs400.js +9484 -0
  118. package/lib/one-dashboard/index.d.ts +116 -0
  119. package/lib/one-dashboard/index.js +246 -0
  120. package/lib/one-dashboard-json/index.d.ts +116 -0
  121. package/lib/one-dashboard-json/index.js +278 -0
  122. package/lib/one-dashboard-raw/index.d.ts +278 -0
  123. package/lib/one-dashboard-raw/index.js +646 -0
  124. package/lib/pipeline-cloud-rule/index.d.ts +90 -0
  125. package/lib/pipeline-cloud-rule/index.js +171 -0
  126. package/lib/provider/index.d.ts +164 -0
  127. package/lib/provider/index.js +354 -0
  128. package/lib/service-level/index.d.ts +505 -0
  129. package/lib/service-level/index.js +1429 -0
  130. package/lib/synthetics-alert-condition/index.d.ts +101 -0
  131. package/lib/synthetics-alert-condition/index.js +193 -0
  132. package/lib/synthetics-broken-links-monitor/index.d.ts +221 -0
  133. package/lib/synthetics-broken-links-monitor/index.js +455 -0
  134. package/lib/synthetics-cert-check-monitor/index.d.ts +226 -0
  135. package/lib/synthetics-cert-check-monitor/index.js +469 -0
  136. package/lib/synthetics-monitor/index.d.ts +408 -0
  137. package/lib/synthetics-monitor/index.js +843 -0
  138. package/lib/synthetics-multilocation-alert-condition/index.d.ts +181 -0
  139. package/lib/synthetics-multilocation-alert-condition/index.js +403 -0
  140. package/lib/synthetics-private-location/index.d.ts +94 -0
  141. package/lib/synthetics-private-location/index.js +187 -0
  142. package/lib/synthetics-script-monitor/index.d.ts +352 -0
  143. package/lib/synthetics-script-monitor/index.js +736 -0
  144. package/lib/synthetics-secure-credential/index.d.ts +136 -0
  145. package/lib/synthetics-secure-credential/index.js +300 -0
  146. package/lib/synthetics-step-monitor/index.d.ts +372 -0
  147. package/lib/synthetics-step-monitor/index.js +809 -0
  148. package/lib/user/index.d.ts +89 -0
  149. package/lib/user/index.js +168 -0
  150. package/lib/workflow/index.d.ts +445 -0
  151. package/lib/workflow/index.js +1058 -0
  152. package/lib/workload/index.d.ts +518 -0
  153. package/lib/workload/index.js +1279 -0
  154. package/package.json +155 -0
@@ -0,0 +1,89 @@
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 UserConfig extends cdktn.TerraformMetaArguments {
8
+ /**
9
+ * The ID of the authentication domain the user will belong to.
10
+ *
11
+ * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/user#authentication_domain_id User#authentication_domain_id}
12
+ */
13
+ readonly authenticationDomainId: string;
14
+ /**
15
+ * The email ID of the user.
16
+ *
17
+ * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/user#email_id User#email_id}
18
+ */
19
+ readonly emailId: string;
20
+ /**
21
+ * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/user#id User#id}
22
+ *
23
+ * Please be aware that the id field is automatically added to all resources in Terraform providers using a Terraform provider SDK version below 2.
24
+ * 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.
25
+ */
26
+ readonly id?: string;
27
+ /**
28
+ * The name of the user.
29
+ *
30
+ * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/user#name User#name}
31
+ */
32
+ readonly name: string;
33
+ /**
34
+ * The type of the user to be created.
35
+ *
36
+ * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/user#user_type User#user_type}
37
+ */
38
+ readonly userType?: string;
39
+ }
40
+ /**
41
+ * Represents a {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/user newrelic_user}
42
+ */
43
+ export declare class User extends cdktn.TerraformResource {
44
+ static readonly tfResourceType = "newrelic_user";
45
+ /**
46
+ * Generates CDKTN code for importing a User resource upon running "cdktn plan <stack-name>"
47
+ * @param scope The scope in which to define this construct
48
+ * @param importToId The construct id used in the generated config for the User to import
49
+ * @param importFromId The id of the existing User that should be imported. Refer to the {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/user#import import section} in the documentation of this resource for the id to use
50
+ * @param provider? Optional instance of the provider where the User to import is found
51
+ */
52
+ static generateConfigForImport(scope: Construct, importToId: string, importFromId: string, provider?: cdktn.TerraformProvider): cdktn.ImportableResource;
53
+ /**
54
+ * Create a new {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/user newrelic_user} Resource
55
+ *
56
+ * @param scope The scope in which to define this construct
57
+ * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
58
+ * @param options UserConfig
59
+ */
60
+ constructor(scope: Construct, id: string, config: UserConfig);
61
+ private _authenticationDomainId?;
62
+ get authenticationDomainId(): string;
63
+ set authenticationDomainId(value: string);
64
+ get authenticationDomainIdInput(): string | undefined;
65
+ private _emailId?;
66
+ get emailId(): string;
67
+ set emailId(value: string);
68
+ get emailIdInput(): string | undefined;
69
+ private _id?;
70
+ get id(): string;
71
+ set id(value: string);
72
+ resetId(): void;
73
+ get idInput(): string | undefined;
74
+ private _name?;
75
+ get name(): string;
76
+ set name(value: string);
77
+ get nameInput(): string | undefined;
78
+ private _userType?;
79
+ get userType(): string;
80
+ set userType(value: string);
81
+ resetUserType(): void;
82
+ get userTypeInput(): string | undefined;
83
+ protected synthesizeAttributes(): {
84
+ [name: string]: any;
85
+ };
86
+ protected synthesizeHclAttributes(): {
87
+ [name: string]: any;
88
+ };
89
+ }
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.User = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const cdktn = require("cdktn");
7
+ /**
8
+ * Represents a {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/user newrelic_user}
9
+ */
10
+ class User extends cdktn.TerraformResource {
11
+ // ==============
12
+ // STATIC Methods
13
+ // ==============
14
+ /**
15
+ * Generates CDKTN code for importing a User resource upon running "cdktn plan <stack-name>"
16
+ * @param scope The scope in which to define this construct
17
+ * @param importToId The construct id used in the generated config for the User to import
18
+ * @param importFromId The id of the existing User that should be imported. Refer to the {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/user#import import section} in the documentation of this resource for the id to use
19
+ * @param provider? Optional instance of the provider where the User to import is found
20
+ */
21
+ static generateConfigForImport(scope, importToId, importFromId, provider) {
22
+ return new cdktn.ImportableResource(scope, importToId, { terraformResourceType: "newrelic_user", importId: importFromId, provider });
23
+ }
24
+ // ===========
25
+ // INITIALIZER
26
+ // ===========
27
+ /**
28
+ * Create a new {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/user newrelic_user} Resource
29
+ *
30
+ * @param scope The scope in which to define this construct
31
+ * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
32
+ * @param options UserConfig
33
+ */
34
+ constructor(scope, id, config) {
35
+ super(scope, id, {
36
+ terraformResourceType: 'newrelic_user',
37
+ terraformGeneratorMetadata: {
38
+ providerName: 'newrelic',
39
+ providerVersion: '3.80.2',
40
+ providerVersionConstraint: '~> 3.7'
41
+ },
42
+ provider: config.provider,
43
+ dependsOn: config.dependsOn,
44
+ count: config.count,
45
+ lifecycle: config.lifecycle,
46
+ provisioners: config.provisioners,
47
+ connection: config.connection,
48
+ forEach: config.forEach
49
+ });
50
+ this._authenticationDomainId = config.authenticationDomainId;
51
+ this._emailId = config.emailId;
52
+ this._id = config.id;
53
+ this._name = config.name;
54
+ this._userType = config.userType;
55
+ }
56
+ get authenticationDomainId() {
57
+ return this.getStringAttribute('authentication_domain_id');
58
+ }
59
+ set authenticationDomainId(value) {
60
+ this._authenticationDomainId = value;
61
+ }
62
+ // Temporarily expose input value. Use with caution.
63
+ get authenticationDomainIdInput() {
64
+ return this._authenticationDomainId;
65
+ }
66
+ get emailId() {
67
+ return this.getStringAttribute('email_id');
68
+ }
69
+ set emailId(value) {
70
+ this._emailId = value;
71
+ }
72
+ // Temporarily expose input value. Use with caution.
73
+ get emailIdInput() {
74
+ return this._emailId;
75
+ }
76
+ get id() {
77
+ return this.getStringAttribute('id');
78
+ }
79
+ set id(value) {
80
+ this._id = value;
81
+ }
82
+ resetId() {
83
+ this._id = undefined;
84
+ }
85
+ // Temporarily expose input value. Use with caution.
86
+ get idInput() {
87
+ return this._id;
88
+ }
89
+ get name() {
90
+ return this.getStringAttribute('name');
91
+ }
92
+ set name(value) {
93
+ this._name = value;
94
+ }
95
+ // Temporarily expose input value. Use with caution.
96
+ get nameInput() {
97
+ return this._name;
98
+ }
99
+ get userType() {
100
+ return this.getStringAttribute('user_type');
101
+ }
102
+ set userType(value) {
103
+ this._userType = value;
104
+ }
105
+ resetUserType() {
106
+ this._userType = undefined;
107
+ }
108
+ // Temporarily expose input value. Use with caution.
109
+ get userTypeInput() {
110
+ return this._userType;
111
+ }
112
+ // =========
113
+ // SYNTHESIS
114
+ // =========
115
+ synthesizeAttributes() {
116
+ return {
117
+ authentication_domain_id: cdktn.stringToTerraform(this._authenticationDomainId),
118
+ email_id: cdktn.stringToTerraform(this._emailId),
119
+ id: cdktn.stringToTerraform(this._id),
120
+ name: cdktn.stringToTerraform(this._name),
121
+ user_type: cdktn.stringToTerraform(this._userType),
122
+ };
123
+ }
124
+ synthesizeHclAttributes() {
125
+ const attrs = {
126
+ authentication_domain_id: {
127
+ value: cdktn.stringToHclTerraform(this._authenticationDomainId),
128
+ isBlock: false,
129
+ type: "simple",
130
+ storageClassType: "string",
131
+ },
132
+ email_id: {
133
+ value: cdktn.stringToHclTerraform(this._emailId),
134
+ isBlock: false,
135
+ type: "simple",
136
+ storageClassType: "string",
137
+ },
138
+ id: {
139
+ value: cdktn.stringToHclTerraform(this._id),
140
+ isBlock: false,
141
+ type: "simple",
142
+ storageClassType: "string",
143
+ },
144
+ name: {
145
+ value: cdktn.stringToHclTerraform(this._name),
146
+ isBlock: false,
147
+ type: "simple",
148
+ storageClassType: "string",
149
+ },
150
+ user_type: {
151
+ value: cdktn.stringToHclTerraform(this._userType),
152
+ isBlock: false,
153
+ type: "simple",
154
+ storageClassType: "string",
155
+ },
156
+ };
157
+ // remove undefined attributes
158
+ return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
159
+ }
160
+ }
161
+ exports.User = User;
162
+ _a = JSII_RTTI_SYMBOL_1;
163
+ User[_a] = { fqn: "@cdktn/provider-newrelic.user.User", version: "14.0.0" };
164
+ // =================
165
+ // STATIC PROPERTIES
166
+ // =================
167
+ User.tfResourceType = "newrelic_user";
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXNlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVNBLCtCQUErQjtBQXNDL0I7O0VBRUU7QUFDRixNQUFhLElBQUssU0FBUSxLQUFLLENBQUMsaUJBQWlCO0lBTy9DLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCOzs7Ozs7TUFNRTtJQUNLLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxLQUFnQixFQUFFLFVBQWtCLEVBQUUsWUFBb0IsRUFBRSxRQUFrQztRQUM5SCxPQUFPLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZJLENBQUM7SUFFTCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFFZDs7Ozs7O01BTUU7SUFDRixZQUFtQixLQUFnQixFQUFFLEVBQVUsRUFBRSxNQUFrQjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLHFCQUFxQixFQUFFLGVBQWU7WUFDdEMsMEJBQTBCLEVBQUU7Z0JBQzFCLFlBQVksRUFBRSxVQUFVO2dCQUN4QixlQUFlLEVBQUUsUUFBUTtnQkFDekIseUJBQXlCLEVBQUUsUUFBUTthQUNwQztZQUNELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDM0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ25CLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztZQUMzQixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7WUFDakMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztTQUN4QixDQUFDLENBQUM7UUFD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QyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFFLENBQUMsQ0FBQTtJQUM1SCxDQUFDOztBQXBMSCxvQkFxTEM7OztBQW5MQyxvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNHLG1CQUFjLEdBQUcsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMjEsIDIwMjZcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuLy8gaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy91c2VyXG4vLyBnZW5lcmF0ZWQgZnJvbSB0ZXJyYWZvcm0gcmVzb3VyY2Ugc2NoZW1hXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgY2RrdG4gZnJvbSAnY2RrdG4nO1xuXG4vLyBDb25maWd1cmF0aW9uXG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbmZpZyBleHRlbmRzIGNka3RuLlRlcnJhZm9ybU1ldGFBcmd1bWVudHMge1xuICAvKipcbiAgKiBUaGUgSUQgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIGRvbWFpbiB0aGUgdXNlciB3aWxsIGJlbG9uZyB0by5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy91c2VyI2F1dGhlbnRpY2F0aW9uX2RvbWFpbl9pZCBVc2VyI2F1dGhlbnRpY2F0aW9uX2RvbWFpbl9pZH1cbiAgKi9cbiAgcmVhZG9ubHkgYXV0aGVudGljYXRpb25Eb21haW5JZDogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgZW1haWwgSUQgb2YgdGhlIHVzZXIuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9uZXdyZWxpYy9uZXdyZWxpYy8zLjgwLjIvZG9jcy9yZXNvdXJjZXMvdXNlciNlbWFpbF9pZCBVc2VyI2VtYWlsX2lkfVxuICAqL1xuICByZWFkb25seSBlbWFpbElkOiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy91c2VyI2lkIFVzZXIjaWR9XG4gICpcbiAgKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgaWQgZmllbGQgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byBhbGwgcmVzb3VyY2VzIGluIFRlcnJhZm9ybSBwcm92aWRlcnMgdXNpbmcgYSBUZXJyYWZvcm0gcHJvdmlkZXIgU0RLIHZlcnNpb24gYmVsb3cgMi5cbiAgKiBJZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcyBzZXR0aW5nIHRoaXMgdmFsdWUgaXQgbWlnaHQgbm90IGJlIHNldHRhYmxlLiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgdGhlIHByb3ZpZGVyIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIGl0IHNob3VsZCBiZSBzZXR0YWJsZS5cbiAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFRoZSBuYW1lIG9mIHRoZSB1c2VyLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvbmV3cmVsaWMvbmV3cmVsaWMvMy44MC4yL2RvY3MvcmVzb3VyY2VzL3VzZXIjbmFtZSBVc2VyI25hbWV9XG4gICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICogVGhlIHR5cGUgb2YgdGhlIHVzZXIgdG8gYmUgY3JlYXRlZC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy91c2VyI3VzZXJfdHlwZSBVc2VyI3VzZXJfdHlwZX1cbiAgKi9cbiAgcmVhZG9ubHkgdXNlclR5cGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuKiBSZXByZXNlbnRzIGEge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9uZXdyZWxpYy9uZXdyZWxpYy8zLjgwLjIvZG9jcy9yZXNvdXJjZXMvdXNlciBuZXdyZWxpY191c2VyfVxuKi9cbmV4cG9ydCBjbGFzcyBVc2VyIGV4dGVuZHMgY2RrdG4uVGVycmFmb3JtUmVzb3VyY2Uge1xuXG4gIC8vID09PT09PT09PT09PT09PT09XG4gIC8vIFNUQVRJQyBQUk9QRVJUSUVTXG4gIC8vID09PT09PT09PT09PT09PT09XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdGZSZXNvdXJjZVR5cGUgPSBcIm5ld3JlbGljX3VzZXJcIjtcblxuICAvLyA9PT09PT09PT09PT09PVxuICAvLyBTVEFUSUMgTWV0aG9kc1xuICAvLyA9PT09PT09PT09PT09PVxuICAvKipcbiAgKiBHZW5lcmF0ZXMgQ0RLVE4gY29kZSBmb3IgaW1wb3J0aW5nIGEgVXNlciByZXNvdXJjZSB1cG9uIHJ1bm5pbmcgXCJjZGt0biBwbGFuIDxzdGFjay1uYW1lPlwiXG4gICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgKiBAcGFyYW0gaW1wb3J0VG9JZCBUaGUgY29uc3RydWN0IGlkIHVzZWQgaW4gdGhlIGdlbmVyYXRlZCBjb25maWcgZm9yIHRoZSBVc2VyIHRvIGltcG9ydFxuICAqIEBwYXJhbSBpbXBvcnRGcm9tSWQgVGhlIGlkIG9mIHRoZSBleGlzdGluZyBVc2VyIHRoYXQgc2hvdWxkIGJlIGltcG9ydGVkLiBSZWZlciB0byB0aGUge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9uZXdyZWxpYy9uZXdyZWxpYy8zLjgwLjIvZG9jcy9yZXNvdXJjZXMvdXNlciNpbXBvcnQgaW1wb3J0IHNlY3Rpb259IGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoaXMgcmVzb3VyY2UgZm9yIHRoZSBpZCB0byB1c2VcbiAgKiBAcGFyYW0gcHJvdmlkZXI/IE9wdGlvbmFsIGluc3RhbmNlIG9mIHRoZSBwcm92aWRlciB3aGVyZSB0aGUgVXNlciB0byBpbXBvcnQgaXMgZm91bmRcbiAgKi9cbiAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZUNvbmZpZ0ZvckltcG9ydChzY29wZTogQ29uc3RydWN0LCBpbXBvcnRUb0lkOiBzdHJpbmcsIGltcG9ydEZyb21JZDogc3RyaW5nLCBwcm92aWRlcj86IGNka3RuLlRlcnJhZm9ybVByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgY2RrdG4uSW1wb3J0YWJsZVJlc291cmNlKHNjb3BlLCBpbXBvcnRUb0lkLCB7IHRlcnJhZm9ybVJlc291cmNlVHlwZTogXCJuZXdyZWxpY191c2VyXCIsIGltcG9ydElkOiBpbXBvcnRGcm9tSWQsIHByb3ZpZGVyIH0pO1xuICAgICAgfVxuXG4gIC8vID09PT09PT09PT09XG4gIC8vIElOSVRJQUxJWkVSXG4gIC8vID09PT09PT09PT09XG5cbiAgLyoqXG4gICogQ3JlYXRlIGEgbmV3IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvbmV3cmVsaWMvbmV3cmVsaWMvMy44MC4yL2RvY3MvcmVzb3VyY2VzL3VzZXIgbmV3cmVsaWNfdXNlcn0gUmVzb3VyY2VcbiAgKlxuICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICogQHBhcmFtIGlkIFRoZSBzY29wZWQgY29uc3RydWN0IElELiBNdXN0IGJlIHVuaXF1ZSBhbW9uZ3N0IHNpYmxpbmdzIGluIHRoZSBzYW1lIHNjb3BlXG4gICogQHBhcmFtIG9wdGlvbnMgVXNlckNvbmZpZ1xuICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29uZmlnOiBVc2VyQ29uZmlnKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICB0ZXJyYWZvcm1SZXNvdXJjZVR5cGU6ICduZXdyZWxpY191c2VyJyxcbiAgICAgIHRlcnJhZm9ybUdlbmVyYXRvck1ldGFkYXRhOiB7XG4gICAgICAgIHByb3ZpZGVyTmFtZTogJ25ld3JlbGljJyxcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uOiAnMy44MC4yJyxcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludDogJ34+IDMuNydcbiAgICAgIH0sXG4gICAgICBwcm92aWRlcjogY29uZmlnLnByb3ZpZGVyLFxuICAgICAgZGVwZW5kc09uOiBjb25maWcuZGVwZW5kc09uLFxuICAgICAgY291bnQ6IGNvbmZpZy5jb3VudCxcbiAgICAgIGxpZmVjeWNsZTogY29uZmlnLmxpZmVjeWNsZSxcbiAgICAgIHByb3Zpc2lvbmVyczogY29uZmlnLnByb3Zpc2lvbmVycyxcbiAgICAgIGNvbm5lY3Rpb246IGNvbmZpZy5jb25uZWN0aW9uLFxuICAgICAgZm9yRWFjaDogY29uZmlnLmZvckVhY2hcbiAgICB9KTtcbiAgICB0aGlzLl9hdXRoZW50aWNhdGlvbkRvbWFpbklkID0gY29uZmlnLmF1dGhlbnRpY2F0aW9uRG9tYWluSWQ7XG4gICAgdGhpcy5fZW1haWxJZCA9IGNvbmZpZy5lbWFpbElkO1xuICAgIHRoaXMuX2lkID0gY29uZmlnLmlkO1xuICAgIHRoaXMuX25hbWUgPSBjb25maWcubmFtZTtcbiAgICB0aGlzLl91c2VyVHlwZSA9IGNvbmZpZy51c2VyVHlwZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT1cbiAgLy8gQVRUUklCVVRFU1xuICAvLyA9PT09PT09PT09XG5cbiAgLy8gYXV0aGVudGljYXRpb25fZG9tYWluX2lkIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX2F1dGhlbnRpY2F0aW9uRG9tYWluSWQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGF1dGhlbnRpY2F0aW9uRG9tYWluSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdhdXRoZW50aWNhdGlvbl9kb21haW5faWQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGF1dGhlbnRpY2F0aW9uRG9tYWluSWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uRG9tYWluSWQgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgYXV0aGVudGljYXRpb25Eb21haW5JZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkRvbWFpbklkO1xuICB9XG5cbiAgLy8gZW1haWxfaWQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfZW1haWxJZD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgZW1haWxJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2VtYWlsX2lkJyk7XG4gIH1cbiAgcHVibGljIHNldCBlbWFpbElkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbWFpbElkID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGVtYWlsSWRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW1haWxJZDtcbiAgfVxuXG4gIC8vIGlkIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaWQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGlkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnaWQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldElkKCkge1xuICAgIHRoaXMuX2lkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBpZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuXG4gIC8vIG5hbWUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfbmFtZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ25hbWUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25hbWUgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbmFtZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgLy8gdXNlcl90eXBlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3VzZXJUeXBlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB1c2VyVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3VzZXJfdHlwZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgdXNlclR5cGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3VzZXJUeXBlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VXNlclR5cGUoKSB7XG4gICAgdGhpcy5fdXNlclR5cGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHVzZXJUeXBlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXJUeXBlO1xuICB9XG5cbiAgLy8gPT09PT09PT09XG4gIC8vIFNZTlRIRVNJU1xuICAvLyA9PT09PT09PT1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiB7XG4gICAgICBhdXRoZW50aWNhdGlvbl9kb21haW5faWQ6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2F1dGhlbnRpY2F0aW9uRG9tYWluSWQpLFxuICAgICAgZW1haWxfaWQ6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2VtYWlsSWQpLFxuICAgICAgaWQ6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2lkKSxcbiAgICAgIG5hbWU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX25hbWUpLFxuICAgICAgdXNlcl90eXBlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl91c2VyVHlwZSksXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW50aGVzaXplSGNsQXR0cmlidXRlcygpOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3QgYXR0cnMgPSB7XG4gICAgICBhdXRoZW50aWNhdGlvbl9kb21haW5faWQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2F1dGhlbnRpY2F0aW9uRG9tYWluSWQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBlbWFpbF9pZDoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fZW1haWxJZCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGlkOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9pZCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIG5hbWU6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX25hbWUpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICB1c2VyX3R5cGU6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX3VzZXJUeXBlKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCApKVxuICB9XG59XG4iXX0=