@sachin9822/reports-lib 0.0.212 → 0.0.214

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 (211) hide show
  1. package/esm2020/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.mjs +240 -0
  2. package/esm2020/lib/components/accounting-report/accounting-report.component.mjs +596 -0
  3. package/esm2020/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.mjs +218 -0
  4. package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +243 -0
  5. package/esm2020/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.mjs +700 -0
  6. package/esm2020/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.mjs +255 -0
  7. package/esm2020/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.mjs +192 -0
  8. package/esm2020/lib/components/funding-report/funding-report.component.mjs +198 -0
  9. package/esm2020/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.mjs +244 -0
  10. package/esm2020/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.mjs +776 -0
  11. package/esm2020/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.mjs +266 -0
  12. package/esm2020/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.mjs +311 -0
  13. package/esm2020/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.mjs +658 -0
  14. package/esm2020/lib/models/acc-gl-details-enquiry-report/accgl-details-enquiry-reportmodel.mjs +2 -0
  15. package/esm2020/lib/models/acc-gl-details-enquiry-report/journal-voucher-entry-model.mjs +2 -0
  16. package/esm2020/lib/models/accounting-report/accounting-report-branch-group.mjs +2 -0
  17. package/esm2020/lib/models/accounting-report/accounting-report-entry-model.mjs +2 -0
  18. package/esm2020/lib/models/accounting-report/accounting-report-model.mjs +2 -0
  19. package/esm2020/lib/models/accounting-report/accounting-report-sub-group.mjs +2 -0
  20. package/esm2020/lib/models/app-config.model.mjs +2 -0
  21. package/esm2020/lib/models/branch-activity-receive-report/branch-activity-receive.model.mjs +2 -0
  22. package/esm2020/lib/models/branch-activity-report/branch-activity-send-report-request-domain-model.mjs +6 -0
  23. package/esm2020/lib/models/branch-activity-report/branch-activity-send-report.mjs +3 -0
  24. package/esm2020/lib/models/cancellation-transaction-report/cancellation-transaction.model.mjs +10 -0
  25. package/esm2020/lib/models/component-loading-states.mjs +7 -0
  26. package/esm2020/lib/models/credit-limit-status-enquiry-report/credit-limit-status-enquiry.model.mjs +5 -0
  27. package/esm2020/lib/models/revenue-per-transaction-report/revenue-per-transaction.model.mjs +2 -0
  28. package/esm2020/lib/models/statement-of-account-report/statement-of-accounts.model.mjs +2 -0
  29. package/esm2020/lib/models/transaction-enquiry-report/transaction-enquiry.model.mjs +8 -0
  30. package/esm2020/lib/models/transaction-monitoring-report/transaction-monitoring-report-request-domain-model.mjs +6 -0
  31. package/esm2020/lib/models/transaction-monitoring-report/transaction-monitoring-report.mjs +5 -0
  32. package/esm2020/lib/models/trial-balance-accounts-report/trial-balance-accounts.models.mjs +3 -0
  33. package/esm2020/lib/reports-lib-routing.module.mjs +24 -0
  34. package/esm2020/lib/reports-lib.component.mjs +22 -0
  35. package/esm2020/lib/reports-lib.module.mjs +172 -0
  36. package/esm2020/lib/reports-lib.service.mjs +14 -0
  37. package/esm2020/lib/services/config.service.mjs +39 -0
  38. package/esm2020/lib/services/report.service.mjs +374 -0
  39. package/esm2020/lib/shared/export-generic.service.mjs +443 -0
  40. package/esm2020/lib/shared/export.service.mjs +379 -0
  41. package/esm2020/lib/shared/loader/loader.component.mjs +11 -0
  42. package/esm2020/lib/shared/metadata/metadata.component.mjs +51 -0
  43. package/esm2020/lib/shared/page-size-selector/page-size-selector.component.mjs +44 -0
  44. package/esm2020/lib/shared/search-filter/search-filter.component.mjs +2134 -0
  45. package/esm2020/lib/shared/shared.module.mjs +21 -0
  46. package/esm2020/public-api.mjs +41 -0
  47. package/esm2020/sachin9822-reports-lib.mjs +5 -0
  48. package/fesm2015/sachin9822-reports-lib.mjs +8429 -0
  49. package/fesm2015/sachin9822-reports-lib.mjs.map +1 -0
  50. package/fesm2020/sachin9822-reports-lib.mjs +8411 -0
  51. package/fesm2020/sachin9822-reports-lib.mjs.map +1 -0
  52. package/index.d.ts +5 -0
  53. package/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.d.ts +70 -0
  54. package/lib/components/accounting-report/accounting-report.component.d.ts +76 -0
  55. package/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.d.ts +58 -0
  56. package/lib/components/branch-activity-send-report/branch-activity-send-report.component.d.ts +69 -0
  57. package/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.d.ts +78 -0
  58. package/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.d.ts +95 -0
  59. package/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.d.ts +55 -0
  60. package/lib/components/funding-report/funding-report.component.d.ts +55 -0
  61. package/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.d.ts +57 -0
  62. package/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.d.ts +109 -0
  63. package/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.d.ts +76 -0
  64. package/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.d.ts +68 -0
  65. package/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.d.ts +72 -0
  66. package/lib/models/acc-gl-details-enquiry-report/accgl-details-enquiry-reportmodel.d.ts +8 -0
  67. package/lib/models/acc-gl-details-enquiry-report/journal-voucher-entry-model.d.ts +18 -0
  68. package/lib/models/accounting-report/accounting-report-branch-group.d.ts +6 -0
  69. package/lib/models/accounting-report/accounting-report-entry-model.d.ts +24 -0
  70. package/lib/models/accounting-report/accounting-report-model.d.ts +6 -0
  71. package/{src/lib/models/accounting-report/accounting-report-sub-group.ts → lib/models/accounting-report/accounting-report-sub-group.d.ts} +2 -3
  72. package/{src/lib/models/app-config.model.ts → lib/models/app-config.model.d.ts} +7 -8
  73. package/lib/models/branch-activity-receive-report/branch-activity-receive.model.d.ts +18 -0
  74. package/lib/models/branch-activity-report/branch-activity-send-report-request-domain-model.d.ts +13 -0
  75. package/lib/models/branch-activity-report/branch-activity-send-report.d.ts +24 -0
  76. package/lib/models/cancellation-transaction-report/cancellation-transaction.model.d.ts +44 -0
  77. package/lib/models/component-loading-states.d.ts +5 -0
  78. package/lib/models/credit-limit-status-enquiry-report/credit-limit-status-enquiry.model.d.ts +26 -0
  79. package/{src/lib/models/revenue-per-transaction-report/revenue-per-transaction.model.ts → lib/models/revenue-per-transaction-report/revenue-per-transaction.model.d.ts} +1 -1
  80. package/lib/models/statement-of-account-report/statement-of-accounts.model.d.ts +18 -0
  81. package/lib/models/transaction-enquiry-report/transaction-enquiry.model.d.ts +113 -0
  82. package/lib/models/transaction-monitoring-report/transaction-monitoring-report-request-domain-model.d.ts +13 -0
  83. package/lib/models/transaction-monitoring-report/transaction-monitoring-report.d.ts +23 -0
  84. package/lib/models/trial-balance-accounts-report/trial-balance-accounts.models.d.ts +39 -0
  85. package/lib/reports-lib-routing.module.d.ts +7 -0
  86. package/lib/reports-lib.component.d.ts +8 -0
  87. package/lib/reports-lib.module.d.ts +33 -0
  88. package/lib/reports-lib.service.d.ts +6 -0
  89. package/lib/services/config.service.d.ts +20 -0
  90. package/lib/services/report.service.d.ts +80 -0
  91. package/lib/shared/export-generic.service.d.ts +50 -0
  92. package/lib/shared/export.service.d.ts +32 -0
  93. package/lib/shared/loader/loader.component.d.ts +5 -0
  94. package/lib/shared/metadata/metadata.component.d.ts +24 -0
  95. package/lib/shared/page-size-selector/page-size-selector.component.d.ts +15 -0
  96. package/lib/shared/search-filter/search-filter.component.d.ts +127 -0
  97. package/lib/shared/shared.module.d.ts +11 -0
  98. package/package.json +31 -16
  99. package/{src/public-api.ts → public-api.d.ts} +7 -17
  100. package/karma.conf.js +0 -44
  101. package/ng-package.json +0 -17
  102. package/src/assets/images/BreadcrumbArrow.png +0 -0
  103. package/src/assets/images/XMCoral.png +0 -0
  104. package/src/lib/assets/images/Search.svg +0 -10
  105. package/src/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.html +0 -27
  106. package/src/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.scss +0 -46
  107. package/src/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.spec.ts +0 -23
  108. package/src/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.ts +0 -292
  109. package/src/lib/components/accounting-report/accounting-report.component.html +0 -64
  110. package/src/lib/components/accounting-report/accounting-report.component.scss +0 -24
  111. package/src/lib/components/accounting-report/accounting-report.component.spec.ts +0 -23
  112. package/src/lib/components/accounting-report/accounting-report.component.ts +0 -738
  113. package/src/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.html +0 -46
  114. package/src/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.scss +0 -2
  115. package/src/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.spec.ts +0 -23
  116. package/src/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.ts +0 -247
  117. package/src/lib/components/branch-activity-send-report/branch-activity-send-report.component.html +0 -46
  118. package/src/lib/components/branch-activity-send-report/branch-activity-send-report.component.scss +0 -3
  119. package/src/lib/components/branch-activity-send-report/branch-activity-send-report.component.spec.ts +0 -23
  120. package/src/lib/components/branch-activity-send-report/branch-activity-send-report.component.ts +0 -276
  121. package/src/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.html +0 -51
  122. package/src/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.scss +0 -7
  123. package/src/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.spec.ts +0 -23
  124. package/src/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.ts +0 -840
  125. package/src/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.html +0 -68
  126. package/src/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.scss +0 -65
  127. package/src/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.spec.ts +0 -23
  128. package/src/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.ts +0 -290
  129. package/src/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.html +0 -25
  130. package/src/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.scss +0 -1
  131. package/src/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.spec.ts +0 -23
  132. package/src/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.ts +0 -213
  133. package/src/lib/components/funding-report/funding-report.component.html +0 -49
  134. package/src/lib/components/funding-report/funding-report.component.scss +0 -1
  135. package/src/lib/components/funding-report/funding-report.component.spec.ts +0 -23
  136. package/src/lib/components/funding-report/funding-report.component.ts +0 -221
  137. package/src/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.html +0 -26
  138. package/src/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.scss +0 -1
  139. package/src/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.spec.ts +0 -23
  140. package/src/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.ts +0 -267
  141. package/src/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.html +0 -95
  142. package/src/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.scss +0 -54
  143. package/src/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.spec.ts +0 -23
  144. package/src/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.ts +0 -904
  145. package/src/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.html +0 -49
  146. package/src/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.scss +0 -2
  147. package/src/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.spec.ts +0 -32
  148. package/src/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.ts +0 -304
  149. package/src/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.html +0 -46
  150. package/src/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.scss +0 -7
  151. package/src/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.ts +0 -343
  152. package/src/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.html +0 -25
  153. package/src/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.scss +0 -23
  154. package/src/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.spec.ts +0 -23
  155. package/src/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.ts +0 -745
  156. package/src/lib/models/acc-gl-details-enquiry-report/accgl-details-enquiry-reportmodel.ts +0 -10
  157. package/src/lib/models/acc-gl-details-enquiry-report/journal-voucher-entry-model.ts +0 -20
  158. package/src/lib/models/accounting-report/accounting-report-branch-group.ts +0 -7
  159. package/src/lib/models/accounting-report/accounting-report-entry-model.ts +0 -25
  160. package/src/lib/models/accounting-report/accounting-report-model.ts +0 -7
  161. package/src/lib/models/branch-activity-receive-report/branch-activity-receive.model.ts +0 -18
  162. package/src/lib/models/branch-activity-report/branch-activity-send-report-request-domain-model.ts +0 -16
  163. package/src/lib/models/branch-activity-report/branch-activity-send-report.ts +0 -26
  164. package/src/lib/models/cancellation-transaction-report/cancellation-transaction.model.ts +0 -65
  165. package/src/lib/models/component-loading-states.ts +0 -5
  166. package/src/lib/models/credit-limit-status-enquiry-report/credit-limit-status-enquiry.model.ts +0 -28
  167. package/src/lib/models/statement-of-account-report/statement-of-accounts.model.ts +0 -21
  168. package/src/lib/models/transaction-enquiry-report/transaction-enquiry.model.ts +0 -127
  169. package/src/lib/models/transaction-monitoring-report/transaction-monitoring-report-request-domain-model.ts +0 -16
  170. package/src/lib/models/transaction-monitoring-report/transaction-monitoring-report.ts +0 -29
  171. package/src/lib/models/trial-balance-accounts-report/trial-balance-accounts.models.ts +0 -46
  172. package/src/lib/reports-lib-routing.module.ts +0 -20
  173. package/src/lib/reports-lib.component.spec.ts +0 -23
  174. package/src/lib/reports-lib.component.ts +0 -20
  175. package/src/lib/reports-lib.module.ts +0 -102
  176. package/src/lib/reports-lib.service.spec.ts +0 -16
  177. package/src/lib/reports-lib.service.ts +0 -9
  178. package/src/lib/services/config.service.ts +0 -43
  179. package/src/lib/services/report.service.spec.ts +0 -16
  180. package/src/lib/services/report.service.ts +0 -463
  181. package/src/lib/shared/export-generic.service.ts +0 -557
  182. package/src/lib/shared/export.service.spec.ts +0 -16
  183. package/src/lib/shared/export.service.ts +0 -457
  184. package/src/lib/shared/loader/loader.component.html +0 -8
  185. package/src/lib/shared/loader/loader.component.scss +0 -52
  186. package/src/lib/shared/loader/loader.component.ts +0 -10
  187. package/src/lib/shared/metadata/metadata.component.html +0 -42
  188. package/src/lib/shared/metadata/metadata.component.scss +0 -95
  189. package/src/lib/shared/metadata/metadata.component.spec.ts +0 -23
  190. package/src/lib/shared/metadata/metadata.component.ts +0 -38
  191. package/src/lib/shared/page-size-selector/page-size-selector.component.html +0 -7
  192. package/src/lib/shared/page-size-selector/page-size-selector.component.scss +0 -42
  193. package/src/lib/shared/page-size-selector/page-size-selector.component.spec.ts +0 -23
  194. package/src/lib/shared/page-size-selector/page-size-selector.component.ts +0 -38
  195. package/src/lib/shared/search-filter/search-filter.component.html +0 -601
  196. package/src/lib/shared/search-filter/search-filter.component.scss +0 -203
  197. package/src/lib/shared/search-filter/search-filter.component.spec.ts +0 -23
  198. package/src/lib/shared/search-filter/search-filter.component.ts +0 -2387
  199. package/src/lib/shared/shared.module.ts +0 -13
  200. package/src/styles/ag-grid-report-style.scss +0 -71
  201. package/src/styles/common-ag-grid-style.scss +0 -146
  202. package/src/styles/common-report-style.scss +0 -395
  203. package/src/styles/common-style.scss +0 -615
  204. package/src/test.ts +0 -27
  205. package/tsconfig.lib.json +0 -15
  206. package/tsconfig.lib.prod.json +0 -10
  207. package/tsconfig.spec.json +0 -17
  208. /package/{src/lib → lib}/assets/config/app-config.json +0 -0
  209. /package/{src → lib}/assets/images/Search.svg +0 -0
  210. /package/{src/lib → lib}/assets/images/XMLogo.png +0 -0
  211. /package/{src/lib → lib}/assets/svg-loaders/blue-tail-spin.svg +0 -0
@@ -0,0 +1,374 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { map, retry } from 'rxjs/operators';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common/http";
5
+ import * as i2 from "./config.service";
6
+ export class ReportService {
7
+ // private reportUrl = '/api/v1/Report';
8
+ // private systemReportUrl = '/api/v1/CompanyConfiguration/SystemReports';
9
+ constructor(http, config) {
10
+ this.http = http;
11
+ this.config = config;
12
+ if (!this.config.get) {
13
+ throw new Error('ConfigService is not initialized. Ensure APP_INITIALIZER ran before using ReportService.');
14
+ }
15
+ this.reportServiceUrl = this.config.get.reportServiceUrl;
16
+ }
17
+ getAccGLDetailsReport(formattedDate, dateType) {
18
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccGlDetailsEnquiryReport/GetAccGLDetailsEnquiryReport/${formattedDate}/${dateType}`;
19
+ return this.http.get(apiPath);
20
+ }
21
+ getPayInAgents() {
22
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/GetAllPayInAgents`;
23
+ return this.http.get(apiPath).pipe(map(response => {
24
+ return response;
25
+ }));
26
+ }
27
+ getBranchByAgent(code) {
28
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/GetBranchByAgent/${code}/BH`;
29
+ return this.http.get(apiPath).pipe(map(response => {
30
+ retry(2),
31
+ map(response => response);
32
+ return response;
33
+ }));
34
+ }
35
+ getParams() {
36
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/GetBranchActivitySendReportParams`;
37
+ return this.http.get(apiPath).pipe(map(response => {
38
+ retry(2),
39
+ map(response => response);
40
+ return response;
41
+ }));
42
+ }
43
+ getBranchActivityReport(data) {
44
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/GetBranchActivitySendReport`;
45
+ return this.http.post(apiPath, data).pipe(map(response => {
46
+ return response;
47
+ }));
48
+ }
49
+ getUserNameFromSessionStorage() {
50
+ let fossilUserName = sessionStorage.getItem('fossilusername');
51
+ let ezremitusername = sessionStorage.getItem('ezremitusername');
52
+ if (fossilUserName) {
53
+ return fossilUserName.replace(/^"(.*)"$/, '$1');
54
+ }
55
+ else {
56
+ return ezremitusername.replace(/^"(.*)"$/, '$1');
57
+ }
58
+ }
59
+ //Trasaction Enquiry Report Apis
60
+ // API 1: Get initial page load data
61
+ getPageLoadData() {
62
+ const url = `${this.reportServiceUrl}/api/v1/Report/TransactionEnquiry/pageLoadData`;
63
+ return this.http.get(url).pipe(map(response => response));
64
+ }
65
+ // API 2: Get branches by agent
66
+ getBranchesByAgent(agentCode) {
67
+ const url = `${this.reportServiceUrl}/api/v1/Report/TransactionEnquiry/branches/${agentCode}`;
68
+ return this.http.get(url).pipe(map(response => response));
69
+ }
70
+ // API 4: Get users by branch
71
+ getUsersByBranch(businessPartnerCode, branchCode) {
72
+ const url = `${this.reportServiceUrl}/api/v1/Report/TransactionEnquiry/users/${businessPartnerCode}/${branchCode}`;
73
+ return this.http.get(url).pipe(map(response => response));
74
+ }
75
+ // API 5: Search transactions
76
+ searchTransactions(data) {
77
+ const url = `${this.reportServiceUrl}/api/v1/Report/TransactionEnquiry/viewReport`;
78
+ return this.http.post(url, data).pipe(map(response => response));
79
+ }
80
+ // Branch Activity Receive Report API
81
+ getAllPayOutAgents() {
82
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/BranchActivityReceive/GetAllPayoutAgents/`;
83
+ return this.http.get(apiPath).pipe(map(response => {
84
+ return response;
85
+ }));
86
+ }
87
+ getBranchActivityReceiveParams() {
88
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/BranchActivityReceive/GetBranchActivityReceiveReportParams`;
89
+ return this.http.get(apiPath).pipe(map(response => {
90
+ return response;
91
+ }));
92
+ }
93
+ getBranchActivityReceivePayoutAgentBranch(code) {
94
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/BranchActivityReceive/GetBranchByPayoutAgent/${code}/BH`;
95
+ return this.http.get(apiPath).pipe(map(response => {
96
+ retry(2),
97
+ map(response => response);
98
+ return response;
99
+ }));
100
+ }
101
+ getBranchActivityReceiveReport(data) {
102
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/BranchActivityReceive/GetBranchActivityReceiveReport`;
103
+ return this.http.post(apiPath, data).pipe(map(response => {
104
+ return response;
105
+ }));
106
+ }
107
+ //Cancellation Transaction Report apis
108
+ //Api 1
109
+ loadDataforCancallation() {
110
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/CancellationTransactionReport/pageLoadData`;
111
+ return this.http.get(apiPath);
112
+ }
113
+ /** Api 2 - Get list of branches for an agent */
114
+ getBranches(agentCode) {
115
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/CancellationTransactionReport/branches/${agentCode}`;
116
+ return this.http.get(apiPath).pipe(map(response => response || []));
117
+ }
118
+ //Api 3
119
+ getCancellationReport(criteria) {
120
+ const url = `${this.reportServiceUrl}/api/v1/Report/CancellationTransactionReport/viewReport`;
121
+ return this.http.post(url, criteria).pipe(map(response => {
122
+ return response;
123
+ }));
124
+ }
125
+ // Revenue Per Transaction Report API
126
+ getAgentsForRevenuePerTransaction() {
127
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/RevenuePerTransaction/GetAgentsForRevenuePerTransaction`;
128
+ return this.http.get(apiPath).pipe(map(response => {
129
+ return response;
130
+ }));
131
+ }
132
+ getRevenuePerTransactionReportParams() {
133
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/RevenuePerTransaction/GetRevenuePerTransactionParams`;
134
+ return this.http.get(apiPath);
135
+ }
136
+ getRevenuePerTransactionReport(data) {
137
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/RevenuePerTransaction/GetRevenuePerTransactionReport`;
138
+ return this.http.post(apiPath, data).pipe(map(response => {
139
+ return response;
140
+ }));
141
+ }
142
+ //Statement of Accounts Report
143
+ loadClientsForStatementOfAccounts() {
144
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/StatementofAccounts/Clients`;
145
+ return this.http.get(apiPath);
146
+ }
147
+ checkClientForStatementOfAccounts(clientId) {
148
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/StatementofAccounts/checkClient/${clientId}`;
149
+ return this.http.get(apiPath);
150
+ }
151
+ getStatementOfAccount(criteria) {
152
+ const url = `${this.reportServiceUrl}/api/v1/Report/StatementofAccounts/statementOfAccount`;
153
+ return this.http.post(url, criteria).pipe(map(response => response || {
154
+ openingBalAndFunding: [],
155
+ sendDetails: [],
156
+ receiveDetails: []
157
+ }));
158
+ }
159
+ // Accounting Report
160
+ // Api 1 - get accounting report
161
+ getAccountingReport(object) {
162
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/GetAccountingReport`;
163
+ return this.http.post(apiPath, object).pipe(map(response => response || undefined));
164
+ }
165
+ // Api 2 - get All clients
166
+ getClientsForAccountingReport(sysUserID) {
167
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/GetAllPayInAgents/${sysUserID}`;
168
+ return this.http.get(apiPath).pipe(map(response => {
169
+ return response;
170
+ }));
171
+ }
172
+ // Api 3 - get branch by agent or client
173
+ getBranchByAgentForAccountingReport(sysUserId, code) {
174
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/GetBranchByAgent/${code}/${sysUserId}/BH`;
175
+ return this.http.get(apiPath).pipe(map(response => {
176
+ retry(2),
177
+ map(response => response);
178
+ return response;
179
+ }));
180
+ }
181
+ // Api 4 - get All transaction types ( products )
182
+ getTransactionTypesForAccountingReport() {
183
+ const url = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/getTransactionTypes`;
184
+ return this.http.get(url).pipe(map(response => response));
185
+ }
186
+ // Api 5 - get All currencies
187
+ getAllCurrenciesForAccountingReport() {
188
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/getAllCurrencies`;
189
+ return this.http.get(apiPath).pipe(map(response => {
190
+ return response;
191
+ }));
192
+ }
193
+ // Api 6 - get All Transaction Status
194
+ getAllTransactionStatusForAccountingReport() {
195
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/GetAllTransactionStatus`;
196
+ return this.http.get(apiPath).pipe(map(response => {
197
+ return response;
198
+ }));
199
+ }
200
+ // Api 7 - get All Countries
201
+ getAllCountriesForAccountingReport() {
202
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/AccountingReport/GetAllCountries`;
203
+ return this.http.get(apiPath).pipe(map(response => {
204
+ return response;
205
+ }));
206
+ }
207
+ // Trial Balance - Accounts Report
208
+ // Api 1 - Get Trial Balance - Accounts report
209
+ getTrialBalanceAccountsReport(object) {
210
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetTrialBalanceAccountsReport`;
211
+ return this.http.post(apiPath, object).pipe(map(response => response || undefined));
212
+ }
213
+ // Api 2 - Get Business Unit
214
+ GetBusinessUnitForTrialBalanceAccountsReport() {
215
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetBusinessUnit`;
216
+ return this.http.get(apiPath).pipe(map(response => {
217
+ return response;
218
+ }));
219
+ }
220
+ // Api 3 - Get Account Status
221
+ GetAccountStatusForTrialBalanceAccountsReport() {
222
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetAccountStatus`;
223
+ return this.http.get(apiPath).pipe(map(response => {
224
+ return response;
225
+ }));
226
+ }
227
+ // Api 4 - Get Date Type
228
+ GetDateTypeForTrialBalanceAccountsReport() {
229
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetDateType`;
230
+ return this.http.get(apiPath).pipe(map(response => {
231
+ return response;
232
+ }));
233
+ }
234
+ // Api 5 - Get Year
235
+ GetYearForTrialBalanceAccountsReport() {
236
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetFinancialYear`;
237
+ return this.http.get(apiPath).pipe(map(response => {
238
+ return response;
239
+ }));
240
+ }
241
+ // Api 6 - Get From Months
242
+ GetFromMonthsForTrialBalanceAccountsReport() {
243
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetFromMonths`;
244
+ return this.http.get(apiPath).pipe(map(response => {
245
+ return response;
246
+ }));
247
+ }
248
+ // Api 7 - Get To Months
249
+ GetToMonthsForTrialBalanceAccountsReport(year, month) {
250
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetToMonths/${year}/${month}`;
251
+ return this.http.get(apiPath).pipe(map(response => {
252
+ return response;
253
+ }));
254
+ }
255
+ // Api 8 - Get From Dates
256
+ GetFromDatesForTrialBalanceAccountsReport(year, fromMonthLabel) {
257
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetFromDates/${year}/${fromMonthLabel}`;
258
+ return this.http.get(apiPath).pipe(map(response => {
259
+ return response;
260
+ }));
261
+ }
262
+ // Api 9 - Get To Dates
263
+ GetToDatesForTrialBalanceAccountsReport(object) {
264
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetToDates`;
265
+ return this.http.post(apiPath, object).pipe(map(response => {
266
+ return response;
267
+ }));
268
+ }
269
+ // Api 10 - Get Currencies
270
+ GetCurrenciesForTrialBalanceAccountsReport() {
271
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetCurrencies`;
272
+ return this.http.get(apiPath).pipe(map(response => {
273
+ return response;
274
+ }));
275
+ }
276
+ // Api 11 - Get default month,year
277
+ GetParamDateDefaultForTrialBalanceAccountsReport() {
278
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TrialBalanceAccountsReport/GetParamDateDefault`;
279
+ return this.http.get(apiPath).pipe(map(response => {
280
+ return response;
281
+ }));
282
+ }
283
+ //Credit Limit Status Enquiry Report APIs
284
+ getClientsForCreditLimitStatusEnquiryReport() {
285
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/CreditLimitStatusEnquiry/GetBusinessPartners`;
286
+ return this.http.get(apiPath).pipe(map(response => {
287
+ return response;
288
+ }));
289
+ }
290
+ getTransactionTypesForCreditLimitStatusEnquiryReport() {
291
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/CreditLimitStatusEnquiry/GetTransactionStatus`;
292
+ return this.http.get(apiPath).pipe(map(response => {
293
+ return response;
294
+ }));
295
+ }
296
+ getCreditLimitStatusEnquiryReport(model) {
297
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/CreditLimitStatusEnquiry/GetCreditLimitStatusEnquiryReport`;
298
+ return this.http.post(apiPath, model).pipe(map(response => {
299
+ return response;
300
+ }));
301
+ }
302
+ //Funding Report
303
+ getFundingReport(criteria) {
304
+ const url = `${this.reportServiceUrl}/api/v1/Report/Funding/viewReport`;
305
+ return this.http.post(url, criteria).pipe(map(response => response || {}));
306
+ }
307
+ //Branch Activity Send Summary Report
308
+ getPayInAgentforSendSummaryReport() {
309
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/SendSummaryReport/GetAllPayInAgents`;
310
+ return this.http.get(apiPath).pipe(map(response => {
311
+ return response;
312
+ }));
313
+ }
314
+ getBranchByAgentForSendSummaryReport(code) {
315
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/SendSummaryReport/GetBranchByAgent/${code}/BH`;
316
+ return this.http.get(apiPath).pipe(map(response => {
317
+ retry(2),
318
+ map(response => response);
319
+ return response;
320
+ }));
321
+ }
322
+ getParamsForSendSummaryReport() {
323
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/SendSummaryReport/GetBranchActivitySendSummaryReportParams`;
324
+ return this.http.get(apiPath).pipe(map(response => {
325
+ retry(2),
326
+ map(response => response);
327
+ return response;
328
+ }));
329
+ }
330
+ getBranchActivitySendSummaryReport(data) {
331
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/SendSummaryReport/GetBranchActivitySendSummaryReport`;
332
+ return this.http.post(apiPath, data).pipe(map(response => {
333
+ return response;
334
+ }));
335
+ }
336
+ //Transaction monitoring Report.
337
+ getParamsForTransactionMonitoringReport() {
338
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TransactionMonitoringReport/TransactionMonitoringReportParams`;
339
+ return this.http.get(apiPath).pipe(map(response => {
340
+ retry(2),
341
+ map(response => response);
342
+ return response;
343
+ }));
344
+ }
345
+ getBranchByAgentForTransactionMonitoringReport(code) {
346
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TransactionMonitoringReport/GetBranchByAgent/${code}/BH`;
347
+ return this.http.get(apiPath).pipe(map(response => {
348
+ retry(2),
349
+ map(response => response);
350
+ return response;
351
+ }));
352
+ }
353
+ getPayInAgentforTransactionMonitoringReport() {
354
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TransactionMonitoringReport/GetAllPayInAgents`;
355
+ return this.http.get(apiPath).pipe(map(response => {
356
+ return response;
357
+ }));
358
+ }
359
+ getTransactionMonitoringReport(data) {
360
+ const apiPath = `${this.reportServiceUrl}/api/v1/Report/TransactionMonitoringReport/GetTransactionMonitoringReport`;
361
+ return this.http.post(apiPath, data).pipe(map(response => {
362
+ return response;
363
+ }));
364
+ }
365
+ }
366
+ ReportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReportService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
367
+ ReportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReportService, providedIn: 'root' });
368
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReportService, decorators: [{
369
+ type: Injectable,
370
+ args: [{
371
+ providedIn: 'root'
372
+ }]
373
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ConfigService }]; } });
374
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRzLWxpYi9zcmMvbGliL3NlcnZpY2VzL3JlcG9ydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQWtCNUMsTUFBTSxPQUFPLGFBQWE7SUFHeEIsd0NBQXdDO0lBQ3hDLDBFQUEwRTtJQUUxRSxZQUFvQixJQUFnQixFQUFVLE1BQXFCO1FBQS9DLFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDBGQUEwRixDQUFDLENBQUM7U0FDN0c7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7SUFDM0QsQ0FBQztJQUVNLHFCQUFxQixDQUFDLGFBQWlDLEVBQUUsUUFBZ0I7UUFDOUUsTUFBTSxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLHlFQUF5RSxhQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFDN0ksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBaUMsT0FBTyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0Isa0NBQWtDLENBQUM7UUFDM0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hE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SUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hELEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ04sR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDM0IsT0FBYyxRQUFRLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCwyQ0FBMkM7UUFDekMsTUFBTSxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLDhEQUE4RCxDQUFDO1FBQ3ZHLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoRCxPQUFjLFFBQVEsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUdELDhCQUE4QixDQUFDLElBQW1EO1FBQ2hGLE1BQU0sT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQiwyRUFBMkUsQ0FBQztRQUNwSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZELE9BQXNELFFBQVEsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQzs7MEdBdmJVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9hY2MtZ2wtZGV0YWlscy1lbnF1aXJ5LXJlcG9ydC9hY2NnbC1kZXRhaWxzLWVucXVpcnktcmVwb3J0bW9kZWwnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgcmV0cnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJyYW5jaEFjdGl2aXR5U2VuZFJlcG9ydFJlcXVlc3REb21haW5Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9icmFuY2gtYWN0aXZpdHktcmVwb3J0L2JyYW5jaC1hY3Rpdml0eS1zZW5kLXJlcG9ydC1yZXF1ZXN0LWRvbWFpbi1tb2RlbCc7XHJcbmltcG9ydCB7IEJyYW5jaEFjdGl2aXR5UmVwb3J0IH0gZnJvbSAnLi4vbW9kZWxzL2JyYW5jaC1hY3Rpdml0eS1yZXBvcnQvYnJhbmNoLWFjdGl2aXR5LXNlbmQtcmVwb3J0JztcclxuaW1wb3J0IHsgUHJvZHVjdCwgVXNlciwgQnJhbmNoLCBUcmFuc2FjdGlvbkRhdGEsIFBhZ2VMb2FkRGF0YVJlc3BvbnNlLCBTZWFyY2hDcml0ZXJpYSB9IGZyb20gJy4uL21vZGVscy90cmFuc2FjdGlvbi1lbnF1aXJ5LXJlcG9ydC90cmFuc2FjdGlvbi1lbnF1aXJ5Lm1vZGVsJztcclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4vY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCcmFuY2hBY3Rpdml0eVJlY2VpdmVSZXBvcnRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9icmFuY2gtYWN0aXZpdHktcmVjZWl2ZS1yZXBvcnQvYnJhbmNoLWFjdGl2aXR5LXJlY2VpdmUubW9kZWwnO1xyXG5pbXBvcnQgeyBDYW5jZWxsYXRpb25UcmFuc2FjdGlvbiB9IGZyb20gJy4uL21vZGVscy9jYW5jZWxsYXRpb24tdHJhbnNhY3Rpb24tcmVwb3J0L2NhbmNlbGxhdGlvbi10cmFuc2FjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFJldmVudWVQZXJUcmFuc2FjdGlvblJlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvcmV2ZW51ZS1wZXItdHJhbnNhY3Rpb24tcmVwb3J0L3JldmVudWUtcGVyLXRyYW5zYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgU3RhdGVtZW50T2ZBY2NvdW50UmVxdWVzdCwgU3RhdGVtZW50T2ZBY2NvdW50UmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbHMvc3RhdGVtZW50LW9mLWFjY291bnQtcmVwb3J0L3N0YXRlbWVudC1vZi1hY2NvdW50cy5tb2RlbCc7XHJcbmltcG9ydCB7IEFjY291bnRpbmdSZXBvcnRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC1tb2RlbCc7XHJcbmltcG9ydCB7IFRyaWFsQmFsYW5jZVJlcG9ydCB9IGZyb20gJy4uL21vZGVscy90cmlhbC1iYWxhbmNlLWFjY291bnRzLXJlcG9ydC90cmlhbC1iYWxhbmNlLWFjY291bnRzLm1vZGVscyc7XHJcbmltcG9ydCB7IFRyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcXVlc3REb21haW5Nb2RlbCB9IGZyb20gJy4uL21vZGVscy90cmFuc2FjdGlvbi1tb25pdG9yaW5nLXJlcG9ydC90cmFuc2FjdGlvbi1tb25pdG9yaW5nLXJlcG9ydC1yZXF1ZXN0LWRvbWFpbi1tb2RlbCc7XHJcbmltcG9ydCB7IFRyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcG9ydCB9IGZyb20gJy4uL21vZGVscy90cmFuc2FjdGlvbi1tb25pdG9yaW5nLXJlcG9ydC90cmFuc2FjdGlvbi1tb25pdG9yaW5nLXJlcG9ydCc7XHJcblxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVwb3J0U2VydmljZSB7XHJcblxyXG4gIHByaXZhdGUgcmVwb3J0U2VydmljZVVybDogc3RyaW5nO1xyXG4gIC8vIHByaXZhdGUgcmVwb3J0VXJsID0gJy9hcGkvdjEvUmVwb3J0JztcclxuICAvLyBwcml2YXRlIHN5c3RlbVJlcG9ydFVybCA9ICcvYXBpL3YxL0NvbXBhbnlDb25maWd1cmF0aW9uL1N5c3RlbVJlcG9ydHMnO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlKSB7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmdldCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmZpZ1NlcnZpY2UgaXMgbm90IGluaXRpYWxpemVkLiBFbnN1cmUgQVBQX0lOSVRJQUxJWkVSIHJhbiBiZWZvcmUgdXNpbmcgUmVwb3J0U2VydmljZS4nKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVwb3J0U2VydmljZVVybCA9IHRoaXMuY29uZmlnLmdldC5yZXBvcnRTZXJ2aWNlVXJsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFjY0dMRGV0YWlsc1JlcG9ydChmb3JtYXR0ZWREYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGRhdGVUeXBlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbD4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9BY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0L0dldEFjY0dMRGV0YWlsc0VucXVpcnlSZXBvcnQvJHtmb3JtYXR0ZWREYXRlfS8ke2RhdGVUeXBlfWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWw+KGFwaVBhdGgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGF5SW5BZ2VudHMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9HZXRBbGxQYXlJbkFnZW50c2A7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8YW55W10+cmVzcG9uc2U7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBnZXRCcmFuY2hCeUFnZW50KGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvR2V0QnJhbmNoQnlBZ2VudC8ke2NvZGV9L0JIYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0cnkoMiksXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFyYW1zKCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvR2V0QnJhbmNoQWN0aXZpdHlTZW5kUmVwb3J0UGFyYW1zYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0cnkoMiksXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnJhbmNoQWN0aXZpdHlSZXBvcnQoZGF0YTogQnJhbmNoQWN0aXZpdHlTZW5kUmVwb3J0UmVxdWVzdERvbWFpbk1vZGVsIHwgYW55KTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBCcmFuY2hBY3Rpdml0eVJlcG9ydFtdPj4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9HZXRCcmFuY2hBY3Rpdml0eVNlbmRSZXBvcnRgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGFwaVBhdGgsIGRhdGEpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxSZWNvcmQ8c3RyaW5nLCBCcmFuY2hBY3Rpdml0eVJlcG9ydFtdPj5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRVc2VyTmFtZUZyb21TZXNzaW9uU3RvcmFnZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZvc3NpbFVzZXJOYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZm9zc2lsdXNlcm5hbWUnKTtcclxuICAgIGxldCBlenJlbWl0dXNlcm5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdlenJlbWl0dXNlcm5hbWUnKTtcclxuICAgIGlmIChmb3NzaWxVc2VyTmFtZSkge1xyXG4gICAgICByZXR1cm4gZm9zc2lsVXNlck5hbWUucmVwbGFjZSgvXlwiKC4qKVwiJC8sICckMScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGV6cmVtaXR1c2VybmFtZS5yZXBsYWNlKC9eXCIoLiopXCIkLywgJyQxJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1RyYXNhY3Rpb24gRW5xdWlyeSBSZXBvcnQgQXBpc1xyXG4gIC8vIEFQSSAxOiBHZXQgaW5pdGlhbCBwYWdlIGxvYWQgZGF0YVxyXG4gIGdldFBhZ2VMb2FkRGF0YSgpOiBPYnNlcnZhYmxlPFBhZ2VMb2FkRGF0YVJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJhbnNhY3Rpb25FbnF1aXJ5L3BhZ2VMb2FkRGF0YWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwpLnBpcGUoXHJcbiAgICAgIG1hcChyZXNwb25zZSA9PiA8UGFnZUxvYWREYXRhUmVzcG9uc2U+cmVzcG9uc2UpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gQVBJIDI6IEdldCBicmFuY2hlcyBieSBhZ2VudFxyXG4gIGdldEJyYW5jaGVzQnlBZ2VudChhZ2VudENvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8QnJhbmNoW10+IHtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9UcmFuc2FjdGlvbkVucXVpcnkvYnJhbmNoZXMvJHthZ2VudENvZGV9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCkucGlwZShcclxuICAgICAgbWFwKHJlc3BvbnNlID0+IDxCcmFuY2hbXT5yZXNwb25zZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBBUEkgNDogR2V0IHVzZXJzIGJ5IGJyYW5jaFxyXG4gIGdldFVzZXJzQnlCcmFuY2goYnVzaW5lc3NQYXJ0bmVyQ29kZTogc3RyaW5nLCBicmFuY2hDb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFVzZXJbXT4ge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyYW5zYWN0aW9uRW5xdWlyeS91c2Vycy8ke2J1c2luZXNzUGFydG5lckNvZGV9LyR7YnJhbmNoQ29kZX1gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsKS5waXBlKFxyXG4gICAgICBtYXAocmVzcG9uc2UgPT4gPFVzZXJbXT5yZXNwb25zZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBBUEkgNTogU2VhcmNoIHRyYW5zYWN0aW9uc1xyXG4gIHNlYXJjaFRyYW5zYWN0aW9ucyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uRGF0YVtdPiB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJhbnNhY3Rpb25FbnF1aXJ5L3ZpZXdSZXBvcnRgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwgZGF0YSkucGlwZShcclxuICAgICAgbWFwKHJlc3BvbnNlID0+IDxUcmFuc2FjdGlvbkRhdGFbXT5yZXNwb25zZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBCcmFuY2ggQWN0aXZpdHkgUmVjZWl2ZSBSZXBvcnQgQVBJXHJcbiAgZ2V0QWxsUGF5T3V0QWdlbnRzKCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvQnJhbmNoQWN0aXZpdHlSZWNlaXZlL0dldEFsbFBheW91dEFnZW50cy9gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXBpUGF0aCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICBnZXRCcmFuY2hBY3Rpdml0eVJlY2VpdmVQYXJhbXMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9CcmFuY2hBY3Rpdml0eVJlY2VpdmUvR2V0QnJhbmNoQWN0aXZpdHlSZWNlaXZlUmVwb3J0UGFyYW1zYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGdldEJyYW5jaEFjdGl2aXR5UmVjZWl2ZVBheW91dEFnZW50QnJhbmNoKGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvQnJhbmNoQWN0aXZpdHlSZWNlaXZlL0dldEJyYW5jaEJ5UGF5b3V0QWdlbnQvJHtjb2RlfS9CSGA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHJ5KDIpLFxyXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZSlcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGdldEJyYW5jaEFjdGl2aXR5UmVjZWl2ZVJlcG9ydChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIEJyYW5jaEFjdGl2aXR5UmVjZWl2ZVJlcG9ydE1vZGVsW10+PiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0JyYW5jaEFjdGl2aXR5UmVjZWl2ZS9HZXRCcmFuY2hBY3Rpdml0eVJlY2VpdmVSZXBvcnRgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGFwaVBhdGgsIGRhdGEpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxSZWNvcmQ8c3RyaW5nLCBCcmFuY2hBY3Rpdml0eVJlY2VpdmVSZXBvcnRNb2RlbFtdPj5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8vQ2FuY2VsbGF0aW9uIFRyYW5zYWN0aW9uIFJlcG9ydCBhcGlzXHJcbiAgLy9BcGkgMVxyXG4gIGxvYWREYXRhZm9yQ2FuY2FsbGF0aW9uKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0NhbmNlbGxhdGlvblRyYW5zYWN0aW9uUmVwb3J0L3BhZ2VMb2FkRGF0YWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGFwaVBhdGgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEFwaSAyIC0gR2V0IGxpc3Qgb2YgYnJhbmNoZXMgZm9yIGFuIGFnZW50ICovXHJcbiAgZ2V0QnJhbmNoZXMoYWdlbnRDb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEJyYW5jaFtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0NhbmNlbGxhdGlvblRyYW5zYWN0aW9uUmVwb3J0L2JyYW5jaGVzLyR7YWdlbnRDb2RlfWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxCcmFuY2hbXT4oYXBpUGF0aCkucGlwZShcclxuICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlIHx8IFtdKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vQXBpIDNcclxuICBnZXRDYW5jZWxsYXRpb25SZXBvcnQoY3JpdGVyaWE6IGFueSk6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgQ2FuY2VsbGF0aW9uVHJhbnNhY3Rpb25bXT4+IHtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9DYW5jZWxsYXRpb25UcmFuc2FjdGlvblJlcG9ydC92aWV3UmVwb3J0YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIGNyaXRlcmlhKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8UmVjb3JkPHN0cmluZywgQ2FuY2VsbGF0aW9uVHJhbnNhY3Rpb25bXT4+cmVzcG9uc2U7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvLyBSZXZlbnVlIFBlciBUcmFuc2FjdGlvbiBSZXBvcnQgQVBJXHJcbiAgZ2V0QWdlbnRzRm9yUmV2ZW51ZVBlclRyYW5zYWN0aW9uKCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvUmV2ZW51ZVBlclRyYW5zYWN0aW9uL0dldEFnZW50c0ZvclJldmVudWVQZXJUcmFuc2FjdGlvbmA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8YW55W10+cmVzcG9uc2U7XHJcbiAgICB9KSlcclxuICB9XHJcblxyXG4gIGdldFJldmVudWVQZXJUcmFuc2FjdGlvblJlcG9ydFBhcmFtcygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9SZXZlbnVlUGVyVHJhbnNhY3Rpb24vR2V0UmV2ZW51ZVBlclRyYW5zYWN0aW9uUGFyYW1zYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmV2ZW51ZVBlclRyYW5zYWN0aW9uUmVwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8UmV2ZW51ZVBlclRyYW5zYWN0aW9uUmVzcG9uc2VNb2RlbFtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1JldmVudWVQZXJUcmFuc2FjdGlvbi9HZXRSZXZlbnVlUGVyVHJhbnNhY3Rpb25SZXBvcnRgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGFwaVBhdGgsIGRhdGEpLnBpcGUoXHJcbiAgICAgIG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIDxSZXZlbnVlUGVyVHJhbnNhY3Rpb25SZXNwb25zZU1vZGVsW10+cmVzcG9uc2U7XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvL1N0YXRlbWVudCBvZiBBY2NvdW50cyBSZXBvcnRcclxuICBsb2FkQ2xpZW50c0ZvclN0YXRlbWVudE9mQWNjb3VudHMoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9TdGF0ZW1lbnRvZkFjY291bnRzL0NsaWVudHNgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KGFwaVBhdGgpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tDbGllbnRGb3JTdGF0ZW1lbnRPZkFjY291bnRzKGNsaWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHsgcmVzdWx0OiBzdHJpbmcgfT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9TdGF0ZW1lbnRvZkFjY291bnRzL2NoZWNrQ2xpZW50LyR7Y2xpZW50SWR9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHsgcmVzdWx0OiBzdHJpbmcgfT4oYXBpUGF0aCk7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0ZW1lbnRPZkFjY291bnQoY3JpdGVyaWE6IFN0YXRlbWVudE9mQWNjb3VudFJlcXVlc3QpOiBPYnNlcnZhYmxlPFN0YXRlbWVudE9mQWNjb3VudFJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvU3RhdGVtZW50b2ZBY2NvdW50cy9zdGF0ZW1lbnRPZkFjY291bnRgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFN0YXRlbWVudE9mQWNjb3VudFJlc3BvbnNlPih1cmwsIGNyaXRlcmlhKS5waXBlKFxyXG4gICAgICBtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UgfHwge1xyXG4gICAgICAgIG9wZW5pbmdCYWxBbmRGdW5kaW5nOiBbXSxcclxuICAgICAgICBzZW5kRGV0YWlsczogW10sXHJcbiAgICAgICAgcmVjZWl2ZURldGFpbHM6IFtdXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLyBBY2NvdW50aW5nIFJlcG9ydFxyXG5cclxuICAvLyBBcGkgMSAtIGdldCBhY2NvdW50aW5nIHJlcG9ydFxyXG4gIGdldEFjY291bnRpbmdSZXBvcnQob2JqZWN0OiBhbnkpOiBPYnNlcnZhYmxlPEFjY291bnRpbmdSZXBvcnRNb2RlbD4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9BY2NvdW50aW5nUmVwb3J0L0dldEFjY291bnRpbmdSZXBvcnRgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFjY291bnRpbmdSZXBvcnRNb2RlbD4oYXBpUGF0aCwgb2JqZWN0KS5waXBlKFxyXG4gICAgICBtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UgfHwgdW5kZWZpbmVkKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIEFwaSAyIC0gZ2V0IEFsbCBjbGllbnRzXHJcbiAgZ2V0Q2xpZW50c0ZvckFjY291bnRpbmdSZXBvcnQoc3lzVXNlcklEOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0FjY291bnRpbmdSZXBvcnQvR2V0QWxsUGF5SW5BZ2VudHMvJHtzeXNVc2VySUR9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLy8gQXBpIDMgLSBnZXQgYnJhbmNoIGJ5IGFnZW50IG9yIGNsaWVudFxyXG4gIGdldEJyYW5jaEJ5QWdlbnRGb3JBY2NvdW50aW5nUmVwb3J0KHN5c1VzZXJJZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0FjY291bnRpbmdSZXBvcnQvR2V0QnJhbmNoQnlBZ2VudC8ke2NvZGV9LyR7c3lzVXNlcklkfS9CSGA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHJ5KDIpLFxyXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZSlcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8vIEFwaSA0IC0gZ2V0IEFsbCB0cmFuc2FjdGlvbiB0eXBlcyAoIHByb2R1Y3RzIClcclxuICBnZXRUcmFuc2FjdGlvblR5cGVzRm9yQWNjb3VudGluZ1JlcG9ydCgpOiBPYnNlcnZhYmxlPFByb2R1Y3RbXT4ge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0FjY291bnRpbmdSZXBvcnQvZ2V0VHJhbnNhY3Rpb25UeXBlc2A7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwpLnBpcGUoXHJcbiAgICAgIG1hcChyZXNwb25zZSA9PiA8UHJvZHVjdFtdPnJlc3BvbnNlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIEFwaSA1IC0gZ2V0IEFsbCBjdXJyZW5jaWVzXHJcbiAgZ2V0QWxsQ3VycmVuY2llc0ZvckFjY291bnRpbmdSZXBvcnQoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9BY2NvdW50aW5nUmVwb3J0L2dldEFsbEN1cnJlbmNpZXNgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXBpUGF0aCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICAvLyBBcGkgNiAtIGdldCBBbGwgVHJhbnNhY3Rpb24gU3RhdHVzXHJcbiAgZ2V0QWxsVHJhbnNhY3Rpb25TdGF0dXNGb3JBY2NvdW50aW5nUmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvQWNjb3VudGluZ1JlcG9ydC9HZXRBbGxUcmFuc2FjdGlvblN0YXR1c2A7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8YW55W10+cmVzcG9uc2U7XHJcbiAgICB9KSlcclxuICB9XHJcblxyXG4gIC8vIEFwaSA3IC0gZ2V0IEFsbCBDb3VudHJpZXNcclxuICBnZXRBbGxDb3VudHJpZXNGb3JBY2NvdW50aW5nUmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvQWNjb3VudGluZ1JlcG9ydC9HZXRBbGxDb3VudHJpZXNgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXBpUGF0aCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gVHJpYWwgQmFsYW5jZSAtIEFjY291bnRzIFJlcG9ydFxyXG5cclxuICAvLyBBcGkgMSAtIEdldCBUcmlhbCBCYWxhbmNlIC0gQWNjb3VudHMgcmVwb3J0XHJcbiAgZ2V0VHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQob2JqZWN0OiBhbnkpOiBPYnNlcnZhYmxlPFRyaWFsQmFsYW5jZVJlcG9ydD4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9UcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydC9HZXRUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydGA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VHJpYWxCYWxhbmNlUmVwb3J0PihhcGlQYXRoLCBvYmplY3QpLnBpcGUoXHJcbiAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZSB8fCB1bmRlZmluZWQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gQXBpIDIgLSBHZXQgQnVzaW5lc3MgVW5pdFxyXG4gIEdldEJ1c2luZXNzVW5pdEZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQvR2V0QnVzaW5lc3NVbml0YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLy8gQXBpIDMgLSBHZXQgQWNjb3VudCBTdGF0dXNcclxuICBHZXRBY2NvdW50U3RhdHVzRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9UcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydC9HZXRBY2NvdW50U3RhdHVzYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLy8gQXBpIDQgLSBHZXQgRGF0ZSBUeXBlXHJcbiAgR2V0RGF0ZVR5cGVGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0L0dldERhdGVUeXBlYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLy8gQXBpIDUgLSBHZXQgWWVhclxyXG4gIEdldFllYXJGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0L0dldEZpbmFuY2lhbFllYXJgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXBpUGF0aCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICAvLyBBcGkgNiAtIEdldCBGcm9tIE1vbnRoc1xyXG4gIEdldEZyb21Nb250aHNGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0L0dldEZyb21Nb250aHNgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXBpUGF0aCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICAvLyBBcGkgNyAtIEdldCBUbyBNb250aHNcclxuICBHZXRUb01vbnRoc0ZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlcik6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQvR2V0VG9Nb250aHMvJHt5ZWFyfS8ke21vbnRofWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8YW55W10+cmVzcG9uc2U7XHJcbiAgICB9KSlcclxuICB9XHJcblxyXG4gIC8vIEFwaSA4IC0gR2V0IEZyb20gRGF0ZXNcclxuICBHZXRGcm9tRGF0ZXNGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCh5ZWFyOiBudW1iZXIsIGZyb21Nb250aExhYmVsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0L0dldEZyb21EYXRlcy8ke3llYXJ9LyR7ZnJvbU1vbnRoTGFiZWx9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLy8gQXBpIDkgLSBHZXQgVG8gRGF0ZXNcclxuICBHZXRUb0RhdGVzRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQob2JqZWN0OiBhbnkpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0L0dldFRvRGF0ZXNgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGFwaVBhdGgsIG9iamVjdCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICAvLyBBcGkgMTAgLSBHZXQgQ3VycmVuY2llc1xyXG4gIEdldEN1cnJlbmNpZXNGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1RyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0L0dldEN1cnJlbmNpZXNgO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYXBpUGF0aCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICAvLyBBcGkgMTEgLSBHZXQgZGVmYXVsdCBtb250aCx5ZWFyXHJcbiAgR2V0UGFyYW1EYXRlRGVmYXVsdEZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQvR2V0UGFyYW1EYXRlRGVmYXVsdGA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8YW55W10+cmVzcG9uc2U7XHJcbiAgICB9KSlcclxuICB9XHJcblxyXG5cclxuICAgIC8vQ3JlZGl0IExpbWl0IFN0YXR1cyBFbnF1aXJ5IFJlcG9ydCBBUElzXHJcbiAgZ2V0Q2xpZW50c0ZvckNyZWRpdExpbWl0U3RhdHVzRW5xdWlyeVJlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0NyZWRpdExpbWl0U3RhdHVzRW5xdWlyeS9HZXRCdXNpbmVzc1BhcnRuZXJzYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcbiAgXHJcbiAgZ2V0VHJhbnNhY3Rpb25UeXBlc0ZvckNyZWRpdExpbWl0U3RhdHVzRW5xdWlyeVJlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0NyZWRpdExpbWl0U3RhdHVzRW5xdWlyeS9HZXRUcmFuc2FjdGlvblN0YXR1c2A7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHVybiA8YW55W10+cmVzcG9uc2U7XHJcbiAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gIGdldENyZWRpdExpbWl0U3RhdHVzRW5xdWlyeVJlcG9ydChtb2RlbDogYW55KTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9DcmVkaXRMaW1pdFN0YXR1c0VucXVpcnkvR2V0Q3JlZGl0TGltaXRTdGF0dXNFbnF1aXJ5UmVwb3J0YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChhcGlQYXRoLCBtb2RlbCkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpXHJcbiAgfVxyXG4gIC8vRnVuZGluZyBSZXBvcnRcclxuICBnZXRGdW5kaW5nUmVwb3J0KGNyaXRlcmlhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L0Z1bmRpbmcvdmlld1JlcG9ydGA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCBjcml0ZXJpYSkucGlwZShcclxuICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlIHx8IHt9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vQnJhbmNoIEFjdGl2aXR5IFNlbmQgU3VtbWFyeSBSZXBvcnRcclxuICAgZ2V0UGF5SW5BZ2VudGZvclNlbmRTdW1tYXJ5UmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9TZW5kU3VtbWFyeVJlcG9ydC9HZXRBbGxQYXlJbkFnZW50c2A7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBnZXRCcmFuY2hCeUFnZW50Rm9yU2VuZFN1bW1hcnlSZXBvcnQoY29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgICBjb25zdCBhcGlQYXRoID0gYCR7dGhpcy5yZXBvcnRTZXJ2aWNlVXJsfS9hcGkvdjEvUmVwb3J0L1NlbmRTdW1tYXJ5UmVwb3J0L0dldEJyYW5jaEJ5QWdlbnQvJHtjb2RlfS9CSGA7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICByZXRyeSgyKSxcclxuICAgICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZSlcclxuICAgICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBnZXRQYXJhbXNGb3JTZW5kU3VtbWFyeVJlcG9ydCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvU2VuZFN1bW1hcnlSZXBvcnQvR2V0QnJhbmNoQWN0aXZpdHlTZW5kU3VtbWFyeVJlcG9ydFBhcmFtc2A7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICByZXRyeSgyKSxcclxuICAgICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZSlcclxuICAgICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBnZXRCcmFuY2hBY3Rpdml0eVNlbmRTdW1tYXJ5UmVwb3J0KGRhdGE6IEJyYW5jaEFjdGl2aXR5U2VuZFJlcG9ydFJlcXVlc3REb21haW5Nb2RlbCB8IGFueSk6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgQnJhbmNoQWN0aXZpdHlSZXBvcnRbXT4+IHtcclxuICAgICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9TZW5kU3VtbWFyeVJlcG9ydC9HZXRCcmFuY2hBY3Rpdml0eVNlbmRTdW1tYXJ5UmVwb3J0YDtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGFwaVBhdGgsIGRhdGEpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICByZXR1cm4gPFJlY29yZDxzdHJpbmcsIEJyYW5jaEFjdGl2aXR5UmVwb3J0W10+PnJlc3BvbnNlO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbi8vVHJhbnNhY3Rpb24gbW9uaXRvcmluZyBSZXBvcnQuXHJcbiAgXHJcbiAgZ2V0UGFyYW1zRm9yVHJhbnNhY3Rpb25Nb25pdG9yaW5nUmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJhbnNhY3Rpb25Nb25pdG9yaW5nUmVwb3J0L1RyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcG9ydFBhcmFtc2A7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChhcGlQYXRoKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgIHJldHJ5KDIpLFxyXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZSlcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGdldEJyYW5jaEJ5QWdlbnRGb3JUcmFuc2FjdGlvbk1vbml0b3JpbmdSZXBvcnQoY29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgY29uc3QgYXBpUGF0aCA9IGAke3RoaXMucmVwb3J0U2VydmljZVVybH0vYXBpL3YxL1JlcG9ydC9UcmFuc2FjdGlvbk1vbml0b3JpbmdSZXBvcnQvR2V0QnJhbmNoQnlBZ2VudC8ke2NvZGV9L0JIYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0cnkoMiksXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxyXG4gICAgICByZXR1cm4gPGFueVtdPnJlc3BvbnNlO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuICBcclxuICBnZXRQYXlJbkFnZW50Zm9yVHJhbnNhY3Rpb25Nb25pdG9yaW5nUmVwb3J0KCk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJhbnNhY3Rpb25Nb25pdG9yaW5nUmVwb3J0L0dldEFsbFBheUluQWdlbnRzYDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVBhdGgpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgcmV0dXJuIDxhbnlbXT5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRUcmFuc2FjdGlvbk1vbml0b3JpbmdSZXBvcnQoZGF0YTogVHJhbnNhY3Rpb25Nb25pdG9yaW5nUmVxdWVzdERvbWFpbk1vZGVsIHwgYW55KTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBUcmFuc2FjdGlvbk1vbml0b3JpbmdSZXBvcnRbXT4+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBgJHt0aGlzLnJlcG9ydFNlcnZpY2VVcmx9L2FwaS92MS9SZXBvcnQvVHJhbnNhY3Rpb25Nb25pdG9yaW5nUmVwb3J0L0dldFRyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcG9ydGA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYXBpUGF0aCwgZGF0YSkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICByZXR1cm4gPFJlY29yZDxzdHJpbmcsIFRyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcG9ydFtdPj5yZXNwb25zZTtcclxuICAgIH0pKTtcclxuICB9XHJcbn1cclxuIl19