@indigina/dcm-api 0.0.42 → 0.0.44

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 (179) hide show
  1. package/README.md +35 -27
  2. package/fesm2022/indigina-dcm-api.mjs +37 -93
  3. package/fesm2022/indigina-dcm-api.mjs.map +1 -1
  4. package/model/approvalShipmentTimelineItem.d.ts +0 -1
  5. package/model/approvalTypes.d.ts +0 -1
  6. package/model/auditLog.d.ts +0 -1
  7. package/model/auditLogs.d.ts +0 -1
  8. package/model/bookingsCount.d.ts +0 -1
  9. package/model/column.d.ts +0 -1
  10. package/model/commandStatusResult.d.ts +0 -1
  11. package/model/company.d.ts +0 -1
  12. package/model/consignee.d.ts +0 -1
  13. package/model/containerTypes.d.ts +0 -1
  14. package/model/containersCount.d.ts +0 -1
  15. package/model/containersToDeliverCount.d.ts +0 -1
  16. package/model/country.d.ts +0 -1
  17. package/model/currentUser.d.ts +0 -1
  18. package/model/dashboardReportGroup.d.ts +0 -1
  19. package/model/dashboardReports.d.ts +0 -1
  20. package/model/deliveryShipmentTimelineItem.d.ts +0 -1
  21. package/model/departmentShipment.d.ts +0 -1
  22. package/model/document.d.ts +0 -1
  23. package/model/documentType.d.ts +0 -1
  24. package/model/documents.d.ts +0 -1
  25. package/model/embedReport.d.ts +0 -1
  26. package/model/embedReportInfoModel.d.ts +0 -1
  27. package/model/embedTokenDto.d.ts +0 -1
  28. package/model/entityList.d.ts +0 -1
  29. package/model/entityState.d.ts +0 -1
  30. package/model/failures.d.ts +0 -1
  31. package/model/journeySegmentTypes.d.ts +0 -1
  32. package/model/modelError.d.ts +0 -1
  33. package/model/note.d.ts +0 -1
  34. package/model/noteSourceTypes.d.ts +0 -1
  35. package/model/noteView.d.ts +1 -2
  36. package/model/notes.d.ts +0 -1
  37. package/model/pendingMessagesCount.d.ts +0 -1
  38. package/model/port.d.ts +0 -1
  39. package/model/powerBiTenant.d.ts +0 -1
  40. package/model/recordTypes.d.ts +0 -1
  41. package/model/setNewFeaturesVisibilityCommand.d.ts +0 -1
  42. package/model/settingValue.d.ts +0 -1
  43. package/model/settingView.d.ts +0 -1
  44. package/model/shipment.d.ts +0 -1
  45. package/model/shipmentAirRouting.d.ts +0 -1
  46. package/model/shipmentApproval.d.ts +0 -1
  47. package/model/shipmentApprovalType.d.ts +0 -1
  48. package/model/shipmentApprovals.d.ts +0 -1
  49. package/model/shipmentContainer.d.ts +0 -1
  50. package/model/shipmentContainers.d.ts +0 -1
  51. package/model/shipmentItem.d.ts +0 -1
  52. package/model/shipmentItems.d.ts +0 -1
  53. package/model/shipmentProduct.d.ts +0 -1
  54. package/model/shipmentProductTotals.d.ts +0 -1
  55. package/model/shipmentProducts.d.ts +0 -1
  56. package/model/shipmentRoadRouting.d.ts +0 -1
  57. package/model/shipmentRouting.d.ts +0 -1
  58. package/model/shipmentRoutingsInner.d.ts +0 -1
  59. package/model/shipmentSeaRouting.d.ts +0 -1
  60. package/model/shipmentState.d.ts +0 -1
  61. package/model/shipmentSummary.d.ts +0 -1
  62. package/model/shipmentTerm.d.ts +0 -1
  63. package/model/shipmentTimelineItem.d.ts +0 -1
  64. package/model/shipmentType.d.ts +0 -1
  65. package/model/shipments.d.ts +0 -1
  66. package/model/shipmentsApprovalCount.d.ts +0 -1
  67. package/model/shipmentsCount.d.ts +0 -1
  68. package/model/shipmentsInTransitCount.d.ts +0 -1
  69. package/model/summaryDashboardReports.d.ts +0 -1
  70. package/model/supplier.d.ts +0 -1
  71. package/model/timelineEventStates.d.ts +0 -1
  72. package/model/timelineEventTypes.d.ts +0 -1
  73. package/model/transportCarrier.d.ts +0 -1
  74. package/model/transportLocation.d.ts +0 -1
  75. package/model/transportationShipmentTimelineItem.d.ts +0 -1
  76. package/model/user.d.ts +0 -1
  77. package/model/userApplication.d.ts +0 -1
  78. package/model/userApplications.d.ts +0 -1
  79. package/model/userPermissions.d.ts +0 -1
  80. package/model/workflowArtifacts.d.ts +0 -1
  81. package/package.json +2 -4
  82. package/esm2022/api/api.mjs +0 -24
  83. package/esm2022/api/auditLogs.service.mjs +0 -165
  84. package/esm2022/api/bookings.service.mjs +0 -142
  85. package/esm2022/api/containers.service.mjs +0 -470
  86. package/esm2022/api/documents.service.mjs +0 -165
  87. package/esm2022/api/health.service.mjs +0 -143
  88. package/esm2022/api/notes.service.mjs +0 -218
  89. package/esm2022/api/permissions.service.mjs +0 -142
  90. package/esm2022/api/reports.service.mjs +0 -186
  91. package/esm2022/api/settings.service.mjs +0 -394
  92. package/esm2022/api/shipments.service.mjs +0 -917
  93. package/esm2022/api/user.service.mjs +0 -327
  94. package/esm2022/api.module.mjs +0 -40
  95. package/esm2022/configuration.mjs +0 -121
  96. package/esm2022/encoder.mjs +0 -19
  97. package/esm2022/index.mjs +0 -7
  98. package/esm2022/indigina-dcm-api.mjs +0 -5
  99. package/esm2022/model/approvalShipmentTimelineItem.mjs +0 -2
  100. package/esm2022/model/approvalTypes.mjs +0 -17
  101. package/esm2022/model/auditLog.mjs +0 -2
  102. package/esm2022/model/auditLogs.mjs +0 -2
  103. package/esm2022/model/bookingsCount.mjs +0 -12
  104. package/esm2022/model/column.mjs +0 -2
  105. package/esm2022/model/commandStatusResult.mjs +0 -12
  106. package/esm2022/model/company.mjs +0 -12
  107. package/esm2022/model/consignee.mjs +0 -12
  108. package/esm2022/model/containerTypes.mjs +0 -16
  109. package/esm2022/model/containersCount.mjs +0 -12
  110. package/esm2022/model/containersToDeliverCount.mjs +0 -12
  111. package/esm2022/model/country.mjs +0 -12
  112. package/esm2022/model/currentUser.mjs +0 -12
  113. package/esm2022/model/dashboardReportGroup.mjs +0 -2
  114. package/esm2022/model/dashboardReports.mjs +0 -2
  115. package/esm2022/model/deliveryShipmentTimelineItem.mjs +0 -2
  116. package/esm2022/model/departmentShipment.mjs +0 -12
  117. package/esm2022/model/document.mjs +0 -2
  118. package/esm2022/model/documentType.mjs +0 -26
  119. package/esm2022/model/documents.mjs +0 -2
  120. package/esm2022/model/embedReport.mjs +0 -2
  121. package/esm2022/model/embedReportInfoModel.mjs +0 -2
  122. package/esm2022/model/embedTokenDto.mjs +0 -12
  123. package/esm2022/model/entityList.mjs +0 -12
  124. package/esm2022/model/entityState.mjs +0 -18
  125. package/esm2022/model/failures.mjs +0 -12
  126. package/esm2022/model/journeySegmentTypes.mjs +0 -15
  127. package/esm2022/model/modelError.mjs +0 -2
  128. package/esm2022/model/models.mjs +0 -79
  129. package/esm2022/model/note.mjs +0 -12
  130. package/esm2022/model/noteSourceTypes.mjs +0 -14
  131. package/esm2022/model/noteView.mjs +0 -12
  132. package/esm2022/model/notes.mjs +0 -2
  133. package/esm2022/model/pendingMessagesCount.mjs +0 -12
  134. package/esm2022/model/port.mjs +0 -2
  135. package/esm2022/model/powerBiTenant.mjs +0 -15
  136. package/esm2022/model/recordTypes.mjs +0 -14
  137. package/esm2022/model/setNewFeaturesVisibilityCommand.mjs +0 -12
  138. package/esm2022/model/settingValue.mjs +0 -12
  139. package/esm2022/model/settingView.mjs +0 -12
  140. package/esm2022/model/shipment.mjs +0 -2
  141. package/esm2022/model/shipmentAirRouting.mjs +0 -2
  142. package/esm2022/model/shipmentApproval.mjs +0 -2
  143. package/esm2022/model/shipmentApprovalType.mjs +0 -15
  144. package/esm2022/model/shipmentApprovals.mjs +0 -2
  145. package/esm2022/model/shipmentContainer.mjs +0 -2
  146. package/esm2022/model/shipmentContainers.mjs +0 -2
  147. package/esm2022/model/shipmentItem.mjs +0 -12
  148. package/esm2022/model/shipmentItems.mjs +0 -2
  149. package/esm2022/model/shipmentProduct.mjs +0 -12
  150. package/esm2022/model/shipmentProductTotals.mjs +0 -12
  151. package/esm2022/model/shipmentProducts.mjs +0 -2
  152. package/esm2022/model/shipmentRoadRouting.mjs +0 -2
  153. package/esm2022/model/shipmentRouting.mjs +0 -2
  154. package/esm2022/model/shipmentRoutingsInner.mjs +0 -2
  155. package/esm2022/model/shipmentSeaRouting.mjs +0 -2
  156. package/esm2022/model/shipmentState.mjs +0 -22
  157. package/esm2022/model/shipmentSummary.mjs +0 -2
  158. package/esm2022/model/shipmentTerm.mjs +0 -27
  159. package/esm2022/model/shipmentTimelineInner.mjs +0 -2
  160. package/esm2022/model/shipmentTimelineItem.mjs +0 -2
  161. package/esm2022/model/shipmentType.mjs +0 -16
  162. package/esm2022/model/shipments.mjs +0 -2
  163. package/esm2022/model/shipmentsApprovalCount.mjs +0 -12
  164. package/esm2022/model/shipmentsCount.mjs +0 -12
  165. package/esm2022/model/shipmentsInTransitCount.mjs +0 -12
  166. package/esm2022/model/summaryDashboardReports.mjs +0 -2
  167. package/esm2022/model/supplier.mjs +0 -12
  168. package/esm2022/model/timelineEventStates.mjs +0 -17
  169. package/esm2022/model/timelineEventTypes.mjs +0 -22
  170. package/esm2022/model/transportCarrier.mjs +0 -12
  171. package/esm2022/model/transportLocation.mjs +0 -12
  172. package/esm2022/model/transportationShipmentTimelineItem.mjs +0 -2
  173. package/esm2022/model/user.mjs +0 -12
  174. package/esm2022/model/userApplication.mjs +0 -12
  175. package/esm2022/model/userApplications.mjs +0 -2
  176. package/esm2022/model/userPermissions.mjs +0 -12
  177. package/esm2022/model/workflowArtifacts.mjs +0 -19
  178. package/esm2022/param.mjs +0 -2
  179. package/esm2022/variables.mjs +0 -9
@@ -1,186 +0,0 @@
1
- /**
2
- * Dcm.API.Client
3
- * DCM API Client for Angular applications
4
- *
5
- *
6
- *
7
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
8
- * https://openapi-generator.tech
9
- * Do not edit the class manually.
10
- */
11
- /* tslint:disable:no-unused-variable member-ordering */
12
- import { Inject, Injectable, Optional } from '@angular/core';
13
- import { HttpHeaders, HttpContext } from '@angular/common/http';
14
- import { CustomHttpParameterCodec } from '../encoder';
15
- // @ts-ignore
16
- import { BASE_PATH } from '../variables';
17
- import { Configuration } from '../configuration';
18
- import * as i0 from "@angular/core";
19
- import * as i1 from "@angular/common/http";
20
- import * as i2 from "../configuration";
21
- export class ReportsService {
22
- httpClient;
23
- basePath = 'http://localhost';
24
- defaultHeaders = new HttpHeaders();
25
- configuration = new Configuration();
26
- encoder;
27
- constructor(httpClient, basePath, configuration) {
28
- this.httpClient = httpClient;
29
- if (configuration) {
30
- this.configuration = configuration;
31
- }
32
- if (typeof this.configuration.basePath !== 'string') {
33
- const firstBasePath = Array.isArray(basePath) ? basePath[0] : undefined;
34
- if (firstBasePath != undefined) {
35
- basePath = firstBasePath;
36
- }
37
- if (typeof basePath !== 'string') {
38
- basePath = this.basePath;
39
- }
40
- this.configuration.basePath = basePath;
41
- }
42
- this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
43
- }
44
- // @ts-ignore
45
- addToHttpParams(httpParams, value, key) {
46
- if (typeof value === "object" && value instanceof Date === false) {
47
- httpParams = this.addToHttpParamsRecursive(httpParams, value);
48
- }
49
- else {
50
- httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
51
- }
52
- return httpParams;
53
- }
54
- addToHttpParamsRecursive(httpParams, value, key) {
55
- if (value == null) {
56
- return httpParams;
57
- }
58
- if (typeof value === "object") {
59
- if (Array.isArray(value)) {
60
- value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
61
- }
62
- else if (value instanceof Date) {
63
- if (key != null) {
64
- httpParams = httpParams.append(key, value.toISOString().substring(0, 10));
65
- }
66
- else {
67
- throw Error("key may not be null if value is Date");
68
- }
69
- }
70
- else {
71
- Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
72
- }
73
- }
74
- else if (key != null) {
75
- httpParams = httpParams.append(key, value);
76
- }
77
- else {
78
- throw Error("key may not be null if value is not object or array");
79
- }
80
- return httpParams;
81
- }
82
- getDcmReports(observe = 'body', reportProgress = false, options) {
83
- let localVarHeaders = this.defaultHeaders;
84
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
85
- if (localVarHttpHeaderAcceptSelected === undefined) {
86
- // to determine the Accept header
87
- const httpHeaderAccepts = [
88
- 'application/json'
89
- ];
90
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
91
- }
92
- if (localVarHttpHeaderAcceptSelected !== undefined) {
93
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
94
- }
95
- let localVarHttpContext = options && options.context;
96
- if (localVarHttpContext === undefined) {
97
- localVarHttpContext = new HttpContext();
98
- }
99
- let localVarTransferCache = options && options.transferCache;
100
- if (localVarTransferCache === undefined) {
101
- localVarTransferCache = true;
102
- }
103
- let responseType_ = 'json';
104
- if (localVarHttpHeaderAcceptSelected) {
105
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
106
- responseType_ = 'text';
107
- }
108
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
109
- responseType_ = 'json';
110
- }
111
- else {
112
- responseType_ = 'blob';
113
- }
114
- }
115
- let localVarPath = `/reports/dashboard-dcm`;
116
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
117
- context: localVarHttpContext,
118
- responseType: responseType_,
119
- withCredentials: this.configuration.withCredentials,
120
- headers: localVarHeaders,
121
- observe: observe,
122
- transferCache: localVarTransferCache,
123
- reportProgress: reportProgress
124
- });
125
- }
126
- getSummaryDashboardReports(observe = 'body', reportProgress = false, options) {
127
- let localVarHeaders = this.defaultHeaders;
128
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
129
- if (localVarHttpHeaderAcceptSelected === undefined) {
130
- // to determine the Accept header
131
- const httpHeaderAccepts = [
132
- 'application/json'
133
- ];
134
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
135
- }
136
- if (localVarHttpHeaderAcceptSelected !== undefined) {
137
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
138
- }
139
- let localVarHttpContext = options && options.context;
140
- if (localVarHttpContext === undefined) {
141
- localVarHttpContext = new HttpContext();
142
- }
143
- let localVarTransferCache = options && options.transferCache;
144
- if (localVarTransferCache === undefined) {
145
- localVarTransferCache = true;
146
- }
147
- let responseType_ = 'json';
148
- if (localVarHttpHeaderAcceptSelected) {
149
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
150
- responseType_ = 'text';
151
- }
152
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
153
- responseType_ = 'json';
154
- }
155
- else {
156
- responseType_ = 'blob';
157
- }
158
- }
159
- let localVarPath = `/reports/summary-dashboard`;
160
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
161
- context: localVarHttpContext,
162
- responseType: responseType_,
163
- withCredentials: this.configuration.withCredentials,
164
- headers: localVarHeaders,
165
- observe: observe,
166
- transferCache: localVarTransferCache,
167
- reportProgress: reportProgress
168
- });
169
- }
170
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ReportsService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
171
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ReportsService, providedIn: 'root' });
172
- }
173
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ReportsService, decorators: [{
174
- type: Injectable,
175
- args: [{
176
- providedIn: 'root'
177
- }]
178
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
179
- type: Optional
180
- }, {
181
- type: Inject,
182
- args: [BASE_PATH]
183
- }] }, { type: i2.Configuration, decorators: [{
184
- type: Optional
185
- }] }] });
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBpL3JlcG9ydHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsV0FBVyxFQUNzQixXQUFXLEVBQ3hELE1BQVksc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQStCLFlBQVksQ0FBQztBQVEvRSxhQUFhO0FBQ2IsT0FBTyxFQUFFLFNBQVMsRUFBc0IsTUFBMEIsY0FBYyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBMEMsa0JBQWtCLENBQUM7Ozs7QUFPckYsTUFBTSxPQUFPLGNBQWM7SUFPRDtJQUxaLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQztJQUNqQyxjQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNuQyxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUNwQyxPQUFPLENBQXFCO0lBRW5DLFlBQXNCLFVBQXNCLEVBQWdDLFFBQXlCLEVBQWMsYUFBNEI7UUFBekgsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN4QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDeEUsSUFBSSxhQUFhLElBQUksU0FBUyxFQUFF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Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEY20uQVBJLkNsaWVudFxuICogRENNIEFQSSBDbGllbnQgZm9yIEFuZ3VsYXIgYXBwbGljYXRpb25zXG4gKlxuICogXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby11bnVzZWQtdmFyaWFibGUgbWVtYmVyLW9yZGVyaW5nICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSAgICAgICAgICAgICAgICAgICAgICBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLFxuICAgICAgICAgSHR0cFJlc3BvbnNlLCBIdHRwRXZlbnQsIEh0dHBQYXJhbWV0ZXJDb2RlYywgSHR0cENvbnRleHQgXG4gICAgICAgIH0gICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjIH0gICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2VuY29kZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBEYXNoYm9hcmRSZXBvcnRzIH0gZnJvbSAnLi4vbW9kZWwvZGFzaGJvYXJkUmVwb3J0cyc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBTdW1tYXJ5RGFzaGJvYXJkUmVwb3J0cyB9IGZyb20gJy4uL21vZGVsL3N1bW1hcnlEYXNoYm9hcmRSZXBvcnRzJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQkFTRV9QQVRILCBDT0xMRUNUSU9OX0ZPUk1BVFMgfSAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XG5cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRzU2VydmljZSB7XG5cbiAgICBwcm90ZWN0ZWQgYmFzZVBhdGggPSAnaHR0cDovL2xvY2FsaG9zdCc7XG4gICAgcHVibGljIGRlZmF1bHRIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgcHVibGljIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIHB1YmxpYyBlbmNvZGVyOiBIdHRwUGFyYW1ldGVyQ29kZWM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZ3xzdHJpbmdbXSwgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QmFzZVBhdGggPSBBcnJheS5pc0FycmF5KGJhc2VQYXRoKSA/IGJhc2VQYXRoWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGZpcnN0QmFzZVBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSBmaXJzdEJhc2VQYXRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGJhc2VQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5jb2RlciA9IHRoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVyIHx8IG5ldyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMoKTtcbiAgICB9XG5cblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBwcml2YXRlIGFkZFRvSHR0cFBhcmFtcyhodHRwUGFyYW1zOiBIdHRwUGFyYW1zLCB2YWx1ZTogYW55LCBrZXk/OiBzdHJpbmcpOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsIHZhbHVlPzogYW55LCBrZXk/OiBzdHJpbmcpOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgKHZhbHVlIGFzIGFueVtdKS5mb3JFYWNoKCBlbGVtID0+IGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCBlbGVtLCBrZXkpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChrZXksICh2YWx1ZSBhcyBEYXRlKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIERhdGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaCggayA9PiBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoXG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbXMsIHZhbHVlW2tdLCBrZXkgIT0gbnVsbCA/IGAke2tleX0uJHtrfWAgOiBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBub3Qgb2JqZWN0IG9yIGFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcXVlc3QgRENNIGRhc2hib2FyZCByZXBvcnRzIGxpc3RcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGNtUmVwb3J0cyhvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPERhc2hib2FyZFJlcG9ydHM+O1xuICAgIHB1YmxpYyBnZXREY21SZXBvcnRzKG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxEYXNoYm9hcmRSZXBvcnRzPj47XG4gICAgcHVibGljIGdldERjbVJlcG9ydHMob2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxEYXNoYm9hcmRSZXBvcnRzPj47XG4gICAgcHVibGljIGdldERjbVJlcG9ydHMob2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvcmVwb3J0cy9kYXNoYm9hcmQtZGNtYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PERhc2hib2FyZFJlcG9ydHM+KCdnZXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVxdWVzdCBEQ00gc3VtbWFyeSBkYXNoYm9hcmQgcmVwb3J0IGVtYmVkZGluZyBsaW5rc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdW1tYXJ5RGFzaGJvYXJkUmVwb3J0cyhvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFN1bW1hcnlEYXNoYm9hcmRSZXBvcnRzPjtcbiAgICBwdWJsaWMgZ2V0U3VtbWFyeURhc2hib2FyZFJlcG9ydHMob2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFN1bW1hcnlEYXNoYm9hcmRSZXBvcnRzPj47XG4gICAgcHVibGljIGdldFN1bW1hcnlEYXNoYm9hcmRSZXBvcnRzKG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8U3VtbWFyeURhc2hib2FyZFJlcG9ydHM+PjtcbiAgICBwdWJsaWMgZ2V0U3VtbWFyeURhc2hib2FyZFJlcG9ydHMob2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvcmVwb3J0cy9zdW1tYXJ5LWRhc2hib2FyZGA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxTdW1tYXJ5RGFzaGJvYXJkUmVwb3J0cz4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbn1cbiJdfQ==