@hitsoft/abp.kadooglu 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/README.md +24 -0
  2. package/config/enums/index.d.ts +1 -0
  3. package/config/enums/route-names.d.ts +12 -0
  4. package/config/index.d.ts +5 -0
  5. package/config/kadooglu-config.module.d.ts +8 -0
  6. package/config/providers/hit-providers/hit-carrier-person-route.provider.d.ts +9 -0
  7. package/config/providers/hit-providers/hit-entry-weighing-route.provider.d.ts +9 -0
  8. package/config/providers/hit-providers/hit-factory-entry-route.provider.d.ts +9 -0
  9. package/config/providers/hit-providers/hit-gate-route.provider.d.ts +9 -0
  10. package/config/providers/hit-providers/hit-knt-item-esl-route.provider.d.ts +9 -0
  11. package/config/providers/hit-providers/hit-plate-route.provider.d.ts +9 -0
  12. package/config/providers/hit-providers/hit-route.provider.d.ts +8 -0
  13. package/config/providers/hit-providers/hit-scale-route.provider.d.ts +9 -0
  14. package/config/providers/hit-providers/hit-tanimlamalar-route.provider.d.ts +9 -0
  15. package/config/providers/hit-providers/hit-vehicle-type-route.provider.d.ts +9 -0
  16. package/config/providers/index.d.ts +1 -0
  17. package/config/providers/route.provider.d.ts +8 -0
  18. package/config/public-api.d.ts +3 -0
  19. package/esm2020/config/enums/index.mjs +2 -0
  20. package/esm2020/config/enums/route-names.mjs +2 -0
  21. package/esm2020/config/hitsoft-abp.kadooglu-config.mjs +5 -0
  22. package/esm2020/config/kadooglu-config.module.mjs +40 -0
  23. package/esm2020/config/providers/hit-providers/hit-carrier-person-route.provider.mjs +20 -0
  24. package/esm2020/config/providers/hit-providers/hit-entry-weighing-route.provider.mjs +20 -0
  25. package/esm2020/config/providers/hit-providers/hit-factory-entry-route.provider.mjs +20 -0
  26. package/esm2020/config/providers/hit-providers/hit-gate-route.provider.mjs +20 -0
  27. package/esm2020/config/providers/hit-providers/hit-knt-item-esl-route.provider.mjs +20 -0
  28. package/esm2020/config/providers/hit-providers/hit-plate-route.provider.mjs +20 -0
  29. package/esm2020/config/providers/hit-providers/hit-route.provider.mjs +24 -0
  30. package/esm2020/config/providers/hit-providers/hit-scale-route.provider.mjs +20 -0
  31. package/esm2020/config/providers/hit-providers/hit-tanimlamalar-route.provider.mjs +20 -0
  32. package/esm2020/config/providers/hit-providers/hit-vehicle-type-route.provider.mjs +20 -0
  33. package/esm2020/config/providers/index.mjs +2 -0
  34. package/esm2020/config/providers/route.provider.mjs +24 -0
  35. package/esm2020/config/public-api.mjs +4 -0
  36. package/esm2020/hitsoft-abp.kadooglu.mjs +5 -0
  37. package/esm2020/lib/components/kadooglu.component.mjs +18 -0
  38. package/esm2020/lib/hit-components/hit-carrier-person/hit-carrier-person-form/hit-carrier-person-form.component.mjs +160 -0
  39. package/esm2020/lib/hit-components/hit-carrier-person/hit-carrier-person-list/hit-carrier-person-list.component.mjs +101 -0
  40. package/esm2020/lib/hit-components/hit-carrier-person/hit-carrier-person-routing.module.mjs +21 -0
  41. package/esm2020/lib/hit-components/hit-carrier-person/hit-carrier-person.module.mjs +68 -0
  42. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-form/hit-entry-weighing-form.component.mjs +544 -0
  43. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-list/hit-entry-weighing-list.component.mjs +202 -0
  44. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-routing.module.mjs +24 -0
  45. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing.module.mjs +77 -0
  46. package/esm2020/lib/hit-components/hit-factory-entry/hit-factory-entry-form/hit-factory-entry-form.component.mjs +380 -0
  47. package/esm2020/lib/hit-components/hit-factory-entry/hit-factory-entry-list/hit-factory-entry-list.component.mjs +115 -0
  48. package/esm2020/lib/hit-components/hit-factory-entry/hit-factory-entry-routing.module.mjs +21 -0
  49. package/esm2020/lib/hit-components/hit-factory-entry/hit-factory-entry.module.mjs +83 -0
  50. package/esm2020/lib/hit-components/hit-gate/hit-gate-form/hit-gate-form.component.mjs +148 -0
  51. package/esm2020/lib/hit-components/hit-gate/hit-gate-list/hit-gate-list.component.mjs +93 -0
  52. package/esm2020/lib/hit-components/hit-gate/hit-gate-routing.module.mjs +21 -0
  53. package/esm2020/lib/hit-components/hit-gate/hit-gate.module.mjs +71 -0
  54. package/esm2020/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-form/hit-knt-item-esl-form.component.mjs +140 -0
  55. package/esm2020/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-list/hit-knt-item-esl-list.component.mjs +78 -0
  56. package/esm2020/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-routing.module.mjs +21 -0
  57. package/esm2020/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl.module.mjs +68 -0
  58. package/esm2020/lib/hit-components/hit-plate/hit-plate-form/hit-plate-form.component.mjs +102 -0
  59. package/esm2020/lib/hit-components/hit-plate/hit-plate-list/hit-plate-list.component.mjs +101 -0
  60. package/esm2020/lib/hit-components/hit-plate/hit-plate-routing.module.mjs +21 -0
  61. package/esm2020/lib/hit-components/hit-plate/hit-plate.module.mjs +68 -0
  62. package/esm2020/lib/hit-components/hit-scale/hit-scale-form/hit-scale-form.component.mjs +127 -0
  63. package/esm2020/lib/hit-components/hit-scale/hit-scale-list/hit-scale-list.component.mjs +106 -0
  64. package/esm2020/lib/hit-components/hit-scale/hit-scale-routing.module.mjs +21 -0
  65. package/esm2020/lib/hit-components/hit-scale/hit-scale.module.mjs +71 -0
  66. package/esm2020/lib/hit-components/hit-vehicle-type/hit-vehicle-type-form/hit-vehicle-type-form.component.mjs +143 -0
  67. package/esm2020/lib/hit-components/hit-vehicle-type/hit-vehicle-type-list/hit-vehicle-type-list.component.mjs +96 -0
  68. package/esm2020/lib/hit-components/hit-vehicle-type/hit-vehicle-type-routing.module.mjs +21 -0
  69. package/esm2020/lib/hit-components/hit-vehicle-type/hit-vehicle-type.module.mjs +68 -0
  70. package/esm2020/lib/hit-proxy/hit-business-partner/hit-business-partner.service.mjs +22 -0
  71. package/esm2020/lib/hit-proxy/hit-business-partner/models.mjs +2 -0
  72. package/esm2020/lib/hit-proxy/hit-carrier-person/hit-carrier-person.service.mjs +33 -0
  73. package/esm2020/lib/hit-proxy/hit-carrier-person/models.mjs +2 -0
  74. package/esm2020/lib/hit-proxy/hit-entry-weighing/hit-entry-weighing.service.mjs +95 -0
  75. package/esm2020/lib/hit-proxy/hit-entry-weighing/models.mjs +2 -0
  76. package/esm2020/lib/hit-proxy/hit-factory-entry/hit-factory-entry.service.mjs +34 -0
  77. package/esm2020/lib/hit-proxy/hit-factory-entry/models.mjs +2 -0
  78. package/esm2020/lib/hit-proxy/hit-gate/hit-gate.service.mjs +33 -0
  79. package/esm2020/lib/hit-proxy/hit-gate/models.mjs +2 -0
  80. package/esm2020/lib/hit-proxy/hit-item/hit-item.service.mjs +22 -0
  81. package/esm2020/lib/hit-proxy/hit-item/models.mjs +2 -0
  82. package/esm2020/lib/hit-proxy/hit-knt-item-esl/hit-knt-item-esl.service.mjs +33 -0
  83. package/esm2020/lib/hit-proxy/hit-knt-item-esl/models.mjs +2 -0
  84. package/esm2020/lib/hit-proxy/hit-plate/hit-plate.service.mjs +33 -0
  85. package/esm2020/lib/hit-proxy/hit-plate/models.mjs +2 -0
  86. package/esm2020/lib/hit-proxy/hit-purchase-delivery-note/hit-purchase-delivery-note.service.mjs +22 -0
  87. package/esm2020/lib/hit-proxy/hit-purchase-delivery-note/models.mjs +2 -0
  88. package/esm2020/lib/hit-proxy/hit-scale/hit-scale.service.mjs +33 -0
  89. package/esm2020/lib/hit-proxy/hit-scale/models.mjs +2 -0
  90. package/esm2020/lib/hit-proxy/hit-stock-transfer/hit-stock-transfer.service.mjs +22 -0
  91. package/esm2020/lib/hit-proxy/hit-stock-transfer/models.mjs +2 -0
  92. package/esm2020/lib/hit-proxy/hit-user-gate/hit-user-gate.service.mjs +31 -0
  93. package/esm2020/lib/hit-proxy/hit-user-gate/models.mjs +2 -0
  94. package/esm2020/lib/hit-proxy/hit-vehicle-type/hit-vehicle-type.service.mjs +33 -0
  95. package/esm2020/lib/hit-proxy/hit-vehicle-type/models.mjs +2 -0
  96. package/esm2020/lib/hit-proxy/hit-warehouse/hit-warehouse.service.mjs +21 -0
  97. package/esm2020/lib/hit-proxy/hit-warehouse/models.mjs +2 -0
  98. package/esm2020/lib/hit-proxy/models.mjs +2 -0
  99. package/esm2020/lib/kadooglu-routing.module.mjs +41 -0
  100. package/esm2020/lib/kadooglu.module.mjs +49 -0
  101. package/esm2020/lib/services/kadooglu.service.mjs +21 -0
  102. package/esm2020/lib/shared/hit-modal/hit-modal.component.mjs +110 -0
  103. package/esm2020/lib/shared/hit-modal/hit-ui.module.mjs +35 -0
  104. package/esm2020/public-api.mjs +9 -0
  105. package/fesm2015/hitsoft-abp.kadooglu-config.mjs +243 -0
  106. package/fesm2015/hitsoft-abp.kadooglu-config.mjs.map +1 -0
  107. package/fesm2015/hitsoft-abp.kadooglu.mjs +3774 -0
  108. package/fesm2015/hitsoft-abp.kadooglu.mjs.map +1 -0
  109. package/fesm2020/hitsoft-abp.kadooglu-config.mjs +243 -0
  110. package/fesm2020/hitsoft-abp.kadooglu-config.mjs.map +1 -0
  111. package/fesm2020/hitsoft-abp.kadooglu.mjs +3728 -0
  112. package/fesm2020/hitsoft-abp.kadooglu.mjs.map +1 -0
  113. package/index.d.ts +5 -0
  114. package/lib/components/kadooglu.component.d.ts +10 -0
  115. package/lib/hit-components/hit-carrier-person/hit-carrier-person-form/hit-carrier-person-form.component.d.ts +49 -0
  116. package/lib/hit-components/hit-carrier-person/hit-carrier-person-list/hit-carrier-person-list.component.d.ts +30 -0
  117. package/lib/hit-components/hit-carrier-person/hit-carrier-person-routing.module.d.ts +7 -0
  118. package/lib/hit-components/hit-carrier-person/hit-carrier-person.module.d.ts +19 -0
  119. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-form/hit-entry-weighing-form.component.d.ts +200 -0
  120. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-list/hit-entry-weighing-list.component.d.ts +46 -0
  121. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-routing.module.d.ts +7 -0
  122. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing.module.d.ts +19 -0
  123. package/lib/hit-components/hit-factory-entry/hit-factory-entry-form/hit-factory-entry-form.component.d.ts +119 -0
  124. package/lib/hit-components/hit-factory-entry/hit-factory-entry-list/hit-factory-entry-list.component.d.ts +32 -0
  125. package/lib/hit-components/hit-factory-entry/hit-factory-entry-routing.module.d.ts +7 -0
  126. package/lib/hit-components/hit-factory-entry/hit-factory-entry.module.d.ts +19 -0
  127. package/lib/hit-components/hit-gate/hit-gate-form/hit-gate-form.component.d.ts +42 -0
  128. package/lib/hit-components/hit-gate/hit-gate-list/hit-gate-list.component.d.ts +29 -0
  129. package/lib/hit-components/hit-gate/hit-gate-routing.module.d.ts +7 -0
  130. package/lib/hit-components/hit-gate/hit-gate.module.d.ts +19 -0
  131. package/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-form/hit-knt-item-esl-form.component.d.ts +46 -0
  132. package/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-list/hit-knt-item-esl-list.component.d.ts +27 -0
  133. package/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-routing.module.d.ts +7 -0
  134. package/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl.module.d.ts +19 -0
  135. package/lib/hit-components/hit-plate/hit-plate-form/hit-plate-form.component.d.ts +29 -0
  136. package/lib/hit-components/hit-plate/hit-plate-list/hit-plate-list.component.d.ts +30 -0
  137. package/lib/hit-components/hit-plate/hit-plate-routing.module.d.ts +7 -0
  138. package/lib/hit-components/hit-plate/hit-plate.module.d.ts +19 -0
  139. package/lib/hit-components/hit-scale/hit-scale-form/hit-scale-form.component.d.ts +44 -0
  140. package/lib/hit-components/hit-scale/hit-scale-list/hit-scale-list.component.d.ts +41 -0
  141. package/lib/hit-components/hit-scale/hit-scale-routing.module.d.ts +7 -0
  142. package/lib/hit-components/hit-scale/hit-scale.module.d.ts +19 -0
  143. package/lib/hit-components/hit-vehicle-type/hit-vehicle-type-form/hit-vehicle-type-form.component.d.ts +46 -0
  144. package/lib/hit-components/hit-vehicle-type/hit-vehicle-type-list/hit-vehicle-type-list.component.d.ts +29 -0
  145. package/lib/hit-components/hit-vehicle-type/hit-vehicle-type-routing.module.d.ts +7 -0
  146. package/lib/hit-components/hit-vehicle-type/hit-vehicle-type.module.d.ts +19 -0
  147. package/lib/hit-proxy/hit-business-partner/hit-business-partner.service.d.ts +13 -0
  148. package/lib/hit-proxy/hit-business-partner/models.d.ts +5 -0
  149. package/lib/hit-proxy/hit-carrier-person/hit-carrier-person.service.d.ts +17 -0
  150. package/lib/hit-proxy/hit-carrier-person/models.d.ts +22 -0
  151. package/lib/hit-proxy/hit-entry-weighing/hit-entry-weighing.service.d.ts +49 -0
  152. package/lib/hit-proxy/hit-entry-weighing/models.d.ts +107 -0
  153. package/lib/hit-proxy/hit-factory-entry/hit-factory-entry.service.d.ts +17 -0
  154. package/lib/hit-proxy/hit-factory-entry/models.d.ts +40 -0
  155. package/lib/hit-proxy/hit-gate/hit-gate.service.d.ts +17 -0
  156. package/lib/hit-proxy/hit-gate/models.d.ts +10 -0
  157. package/lib/hit-proxy/hit-item/hit-item.service.d.ts +13 -0
  158. package/lib/hit-proxy/hit-item/models.d.ts +4 -0
  159. package/lib/hit-proxy/hit-knt-item-esl/hit-knt-item-esl.service.d.ts +21 -0
  160. package/lib/hit-proxy/hit-knt-item-esl/models.d.ts +16 -0
  161. package/lib/hit-proxy/hit-plate/hit-plate.service.d.ts +17 -0
  162. package/lib/hit-proxy/hit-plate/models.d.ts +14 -0
  163. package/lib/hit-proxy/hit-purchase-delivery-note/hit-purchase-delivery-note.service.d.ts +13 -0
  164. package/lib/hit-proxy/hit-purchase-delivery-note/models.d.ts +9 -0
  165. package/lib/hit-proxy/hit-scale/hit-scale.service.d.ts +17 -0
  166. package/lib/hit-proxy/hit-scale/models.d.ts +20 -0
  167. package/lib/hit-proxy/hit-stock-transfer/hit-stock-transfer.service.d.ts +13 -0
  168. package/lib/hit-proxy/hit-stock-transfer/models.d.ts +15 -0
  169. package/lib/hit-proxy/hit-user-gate/hit-user-gate.service.d.ts +18 -0
  170. package/lib/hit-proxy/hit-user-gate/models.d.ts +7 -0
  171. package/lib/hit-proxy/hit-vehicle-type/hit-vehicle-type.service.d.ts +17 -0
  172. package/lib/hit-proxy/hit-vehicle-type/models.d.ts +18 -0
  173. package/lib/hit-proxy/hit-warehouse/hit-warehouse.service.d.ts +13 -0
  174. package/lib/hit-proxy/hit-warehouse/models.d.ts +4 -0
  175. package/lib/hit-proxy/models.d.ts +8 -0
  176. package/lib/kadooglu-routing.module.d.ts +7 -0
  177. package/lib/kadooglu.module.d.ts +17 -0
  178. package/lib/services/kadooglu.service.d.ts +10 -0
  179. package/lib/shared/hit-modal/hit-modal.component.d.ts +30 -0
  180. package/lib/shared/hit-modal/hit-ui.module.d.ts +11 -0
  181. package/package.json +41 -0
  182. package/public-api.d.ts +4 -0
@@ -0,0 +1,544 @@
1
+ import { Component } from '@angular/core';
2
+ import { forkJoin } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../../hit-proxy/hit-entry-weighing/hit-entry-weighing.service";
5
+ import * as i2 from "../../../hit-proxy/hit-stock-transfer/hit-stock-transfer.service";
6
+ import * as i3 from "@abp/ng.theme.shared";
7
+ import * as i4 from "@angular/router";
8
+ import * as i5 from "@abp/ng.core";
9
+ import * as i6 from "@angular/common";
10
+ import * as i7 from "@abp/ng.components/page";
11
+ import * as i8 from "../../../shared/hit-modal/hit-modal.component";
12
+ import * as i9 from "devextreme-angular";
13
+ export class HitEntryWeighingFormComponent {
14
+ constructor(service, stockTransferService, confirmation, toaster, route, router, localizationService) {
15
+ this.service = service;
16
+ this.stockTransferService = stockTransferService;
17
+ this.confirmation = confirmation;
18
+ this.toaster = toaster;
19
+ this.route = route;
20
+ this.router = router;
21
+ this.localizationService = localizationService;
22
+ this.record = null;
23
+ // Wizard phase: 1 = Araç & Belge, 2 = Tartım Paneli
24
+ this.formPhase = 1;
25
+ // Weighing mode from query param: 'first' | 'last' | null (null = normal new/edit)
26
+ this.weighingMode = null;
27
+ // Lookup loader functions (called lazily when modal opens)
28
+ this.loadDocuments = () => this.service.getDocuments();
29
+ this.loadScales = () => this.service.getScales();
30
+ this.loadTruckPlates = () => this.service.getTruckPlates();
31
+ this.loadTrailerPlates = () => this.service.getTrailerPlates();
32
+ this.loadDrivers = () => this.service.getDrivers();
33
+ this.loadAccounts = () => this.service.getAccounts();
34
+ this.loadStockItems = () => this.service.getStockItems();
35
+ this.loadWaybills = () => this.stockTransferService.getList();
36
+ this.loadGates = () => this.service.getGates();
37
+ this.loadVehicleTypes = () => this.service.getVehicleTypes();
38
+ // Column configs
39
+ this.documentColumns = [
40
+ { dataField: 'code', caption: 'Belge No', width: 120 },
41
+ { dataField: 'name', caption: 'Cari Adı' },
42
+ ];
43
+ this.scaleColumns = [
44
+ { dataField: 'code', caption: 'Kod', width: 80 },
45
+ { dataField: 'name', caption: 'Kantar Adı' },
46
+ ];
47
+ this.truckPlateColumns = [
48
+ { dataField: 'code', caption: 'Kod', width: 100 },
49
+ { dataField: 'plateNo', caption: 'Plaka' },
50
+ ];
51
+ this.trailerPlateColumns = [
52
+ { dataField: 'code', caption: 'Kod', width: 100 },
53
+ { dataField: 'plateNo', caption: 'Plaka' },
54
+ ];
55
+ this.driverColumns = [
56
+ { dataField: 'code', caption: 'Kod', width: 100 },
57
+ { dataField: 'name', caption: 'Ad Soyad' },
58
+ ];
59
+ this.accountColumns = [
60
+ { dataField: 'code', caption: 'Kod', width: 100 },
61
+ { dataField: 'title', caption: 'Unvan' },
62
+ ];
63
+ this.stockItemColumns = [
64
+ { dataField: 'code', caption: 'Kod', width: 100 },
65
+ { dataField: 'name', caption: 'Stok Adı' },
66
+ ];
67
+ this.waybillColumns = [
68
+ { dataField: 'docNum', caption: 'Belge No', width: 120 },
69
+ { dataField: 'cardName', caption: 'Cari Adı' },
70
+ { dataField: 'fromWarehouse', caption: 'Çıkış Deposu', width: 140 },
71
+ { dataField: 'comments', caption: 'Açıklama' },
72
+ ];
73
+ this.gateColumns = [
74
+ { dataField: 'code', caption: 'Kod', width: 80 },
75
+ { dataField: 'name', caption: 'Kapı Adı' },
76
+ ];
77
+ this.vehicleTypeColumns = [
78
+ { dataField: 'code', caption: 'Kod', width: 80 },
79
+ { dataField: 'name', caption: 'Giriş Tipi' },
80
+ ];
81
+ // Form fields
82
+ this.documentCode = '';
83
+ this.documentName = '';
84
+ this.scaleCode = '1';
85
+ this.scaleName = 'Kantar 1';
86
+ this.accountCode = '';
87
+ this.accountTitle = '';
88
+ this.truckPlateCode = '';
89
+ this.truckPlateNo = '';
90
+ this.trailerPlateCode = '';
91
+ this.trailerPlateNo = '';
92
+ this.driverCode = '';
93
+ this.driverName = '';
94
+ this.stockCode = '';
95
+ this.stockName = '';
96
+ this.containerNo = '';
97
+ this.description = '';
98
+ this.waybillNo = '';
99
+ this.departureLocation = '';
100
+ this.arrivalLocation = 'Fabrika';
101
+ // ZZZ_TEST2 yeni alanlar
102
+ this.gateCode = '';
103
+ this.gateName = '';
104
+ this.entryDate = null;
105
+ this.entryTime = '';
106
+ this.exitDate = null;
107
+ this.exitTime = '';
108
+ this.entryTypeCode = '';
109
+ this.entryTypeName = '';
110
+ this.driverFullName = '';
111
+ this.tcNo = '';
112
+ this.isTcCitizen = true;
113
+ // Tartım bilgileri (readonly)
114
+ this.firstOperatorCode = '';
115
+ this.firstWeighingValue = null;
116
+ this.lastOperatorCode = '';
117
+ this.lastWeighingValue = null;
118
+ this.currentScaleValue = null;
119
+ this.isSaving = false;
120
+ this.isWeighing = false;
121
+ this.entryTypeTrtmYpilck = false;
122
+ this.entryTypeMalGC = false;
123
+ this.isDoingGoodsMovement = false;
124
+ }
125
+ /** SAP response camelCase/PascalCase farkını handle eder */
126
+ getDocEntry(rec) {
127
+ if (!rec)
128
+ return undefined;
129
+ return rec.docEntry ?? rec.docEntry;
130
+ }
131
+ ngOnInit() {
132
+ // Read weighing mode from query params
133
+ const mode = this.route.snapshot.queryParamMap.get('mode');
134
+ if (mode === 'first' || mode === 'last') {
135
+ this.weighingMode = mode;
136
+ }
137
+ // Önce router state'den satır verisini oku (liste ekranından aktarılan)
138
+ const stateData = history.state?.rowData;
139
+ const id = this.route.snapshot.paramMap.get('id');
140
+ if (stateData) {
141
+ // State'den gelen veriyi kullan (API çağrısı olmadan)
142
+ this.record = stateData;
143
+ this.initForm();
144
+ // Son tartım modundaysa direkt tartım panelini aç
145
+ if (this.weighingMode === 'last') {
146
+ this.formPhase = 2;
147
+ }
148
+ }
149
+ else if (id) {
150
+ // Fallback: state yoksa API'den yükle
151
+ this.service.get(+id).subscribe(record => {
152
+ this.record = record;
153
+ this.initForm();
154
+ // Son tartım modundaysa direkt tartım panelini aç
155
+ if (this.weighingMode === 'last') {
156
+ this.formPhase = 2;
157
+ }
158
+ });
159
+ }
160
+ }
161
+ get weighingStep() {
162
+ const status = this.record?.u_Status;
163
+ if (this.lastWeighingValue !== null || status === '2')
164
+ return 3;
165
+ if (this.firstWeighingValue !== null || status === '1')
166
+ return 2;
167
+ return 1;
168
+ }
169
+ /** İlk tartım yapıldıysa (step >= 2) detay alanlarını kilitle */
170
+ get isFormLocked() {
171
+ return this.weighingStep >= 2;
172
+ }
173
+ /** Her iki tartım da tamamlandıysa (step === 3) tüm ekranı kilitle */
174
+ get isFullyCompleted() {
175
+ return this.weighingStep === 3;
176
+ }
177
+ get entryDateTime() {
178
+ return this.buildDateTime(this.entryDate, this.entryTime);
179
+ }
180
+ get exitDateTime() {
181
+ return this.buildDateTime(this.exitDate, this.exitTime);
182
+ }
183
+ /** Tarih string + sayısal saat (ör. 830 = 08:30) değerinden Date oluşturur */
184
+ buildDateTime(dateStr, timeVal) {
185
+ if (!dateStr)
186
+ return null;
187
+ const d = new Date(dateStr);
188
+ if (isNaN(d.getTime()))
189
+ return null;
190
+ const t = Number(timeVal);
191
+ if (!isNaN(t)) {
192
+ d.setHours(Math.floor(t / 100), t % 100, 0, 0);
193
+ }
194
+ return d;
195
+ }
196
+ get netWeight() {
197
+ if (this.firstWeighingValue !== null && this.lastWeighingValue !== null) {
198
+ return Math.abs(this.firstWeighingValue - this.lastWeighingValue);
199
+ }
200
+ return null;
201
+ }
202
+ get weighingModeLabel() {
203
+ return this.weighingMode === 'first'
204
+ ? this.localizationService.instant('Kadooglu::FirstWeighing')
205
+ : this.localizationService.instant('Kadooglu::LastWeighing');
206
+ }
207
+ initForm() {
208
+ if (this.record) {
209
+ const r = this.record; // SAP camelCase fallback
210
+ this.scaleCode = r.u_ScaleCode ?? r.u_ScaleCode ?? '';
211
+ this.accountCode = r.u_CardCode ?? r.u_CardCode ?? '';
212
+ this.truckPlateCode = r.u_Plate ?? r.u_Plate ?? '';
213
+ this.truckPlateNo = r.u_Plate ?? r.u_Plate ?? '';
214
+ this.trailerPlateCode = r.u_DorsePlate ?? '';
215
+ this.trailerPlateNo = r.u_DorsePlate ?? '';
216
+ this.driverCode = r.u_DriverCode ?? r.u_DriverCode ?? '';
217
+ this.stockCode = r.u_ItemCode ?? r.u_ItemCode ?? '';
218
+ this.containerNo = r.u_ContainerNo ?? r.u_ContainerNo ?? '';
219
+ this.waybillNo = r.u_DespatchAdviceNo ?? r.u_DespatchAdviceNo ?? '';
220
+ this.departureLocation = r.u_ShipPlace ?? r.u_ShipPlace ?? '';
221
+ this.arrivalLocation = r.u_ShipTo ?? r.u_ShipTo ?? 'Fabrika';
222
+ this.firstOperatorCode = r.u_FirstOpt ?? r.u_FirstOpt ?? '';
223
+ this.lastOperatorCode = r.u_LastOpt ?? r.u_LastOpt ?? '';
224
+ const rawFirst = r.u_FirstWeighing ?? r.u_FirstWeighing ?? null;
225
+ this.firstWeighingValue = (rawFirst != null && rawFirst !== 0) ? rawFirst : null;
226
+ const rawLast = r.u_LastWeighing ?? r.u_LastWeighing ?? null;
227
+ this.lastWeighingValue = (rawLast != null && rawLast !== 0) ? rawLast : null;
228
+ this.description = r.u_Description ?? r.u_Description ?? '';
229
+ // ZZZ_TEST2 yeni alanlar
230
+ this.gateCode = r.u_GateCode ?? r.u_GateCode ?? '';
231
+ this.entryDate = r.u_EntryDate ?? r.u_EntryDate ?? null;
232
+ this.entryTime = r.u_EntryTime ?? r.u_EntryTime ?? '';
233
+ this.exitDate = r.u_ExitDate ?? r.u_ExitDate ?? null;
234
+ this.exitTime = r.u_ExitTime ?? r.u_ExitTime ?? '';
235
+ this.entryTypeCode = r.u_EntryType ?? r.u_EntryType ?? '';
236
+ this.driverFullName = r.u_Driver ?? r.u_Driver ?? '';
237
+ this.tcNo = r.u_TcNo ?? r.u_TcNo ?? '';
238
+ this.isTcCitizen = true;
239
+ // Lookup alanlarının görünen isimlerini çözümle
240
+ this.resolveDisplayNames();
241
+ }
242
+ }
243
+ /** Kayıttaki kod alanlarına karşılık gelen görünen isimleri lookup servislerinden çözümler */
244
+ resolveDisplayNames() {
245
+ const lookups = {};
246
+ if (this.gateCode) {
247
+ lookups['gates'] = this.loadGates();
248
+ }
249
+ if (this.entryTypeCode) {
250
+ lookups['vehicleTypes'] = this.loadVehicleTypes();
251
+ }
252
+ if (this.scaleCode) {
253
+ lookups['scales'] = this.loadScales();
254
+ }
255
+ if (this.accountCode) {
256
+ lookups['accounts'] = this.loadAccounts();
257
+ }
258
+ if (this.driverCode) {
259
+ lookups['drivers'] = this.loadDrivers();
260
+ }
261
+ if (this.stockCode) {
262
+ lookups['stockItems'] = this.loadStockItems();
263
+ }
264
+ const keys = Object.keys(lookups);
265
+ if (keys.length === 0)
266
+ return;
267
+ forkJoin(lookups).subscribe((results) => {
268
+ if (results.gates) {
269
+ const gate = results.gates.find((g) => g.code === this.gateCode);
270
+ if (gate)
271
+ this.gateName = gate.name;
272
+ }
273
+ if (results.vehicleTypes) {
274
+ const vt = results.vehicleTypes.find((t) => t.code === this.entryTypeCode);
275
+ if (vt) {
276
+ this.entryTypeName = vt.name;
277
+ this.entryTypeTrtmYpilck = vt.u_TrtmYpilck === 'Y';
278
+ this.entryTypeMalGC = vt.u_MalGC === 'Y';
279
+ }
280
+ }
281
+ if (results.scales) {
282
+ const scale = results.scales.find((s) => s.code === this.scaleCode);
283
+ if (scale)
284
+ this.scaleName = scale.name;
285
+ }
286
+ if (results.accounts) {
287
+ const account = results.accounts.find((a) => a.code === this.accountCode);
288
+ if (account)
289
+ this.accountTitle = account.title;
290
+ }
291
+ if (results.drivers) {
292
+ const driver = results.drivers.find((d) => d.code === this.driverCode);
293
+ if (driver)
294
+ this.driverName = driver.name;
295
+ }
296
+ if (results.stockItems) {
297
+ const item = results.stockItems.find((i) => i.code === this.stockCode);
298
+ if (item)
299
+ this.stockName = item.name;
300
+ }
301
+ });
302
+ }
303
+ onDocumentSelected(e) {
304
+ if (!e)
305
+ return;
306
+ this.documentCode = e.code;
307
+ this.documentName = e.name;
308
+ }
309
+ onScaleSelected(e) {
310
+ if (!e)
311
+ return;
312
+ this.scaleCode = e.code;
313
+ this.scaleName = e.name;
314
+ }
315
+ onAccountSelected(e) {
316
+ if (!e)
317
+ return;
318
+ this.accountCode = e.code;
319
+ this.accountTitle = e.title;
320
+ }
321
+ onTruckPlateSelected(e) {
322
+ if (!e)
323
+ return;
324
+ this.truckPlateCode = e.code;
325
+ this.truckPlateNo = e.plateNo;
326
+ }
327
+ onTrailerPlateSelected(e) {
328
+ if (!e)
329
+ return;
330
+ this.trailerPlateCode = e.code;
331
+ this.trailerPlateNo = e.plateNo;
332
+ }
333
+ onDriverSelected(e) {
334
+ if (!e)
335
+ return;
336
+ this.driverCode = e.code;
337
+ this.driverName = e.name;
338
+ }
339
+ onStockItemSelected(e) {
340
+ if (!e)
341
+ return;
342
+ this.stockCode = e.code;
343
+ this.stockName = e.name;
344
+ }
345
+ onGateSelected(e) {
346
+ if (!e)
347
+ return;
348
+ this.gateCode = e.code;
349
+ this.gateName = e.name;
350
+ }
351
+ onVehicleTypeSelected(e) {
352
+ if (!e)
353
+ return;
354
+ this.entryTypeCode = e.code;
355
+ this.entryTypeName = e.name;
356
+ this.entryTypeTrtmYpilck = e.u_TrtmYpilck === 'Y';
357
+ this.entryTypeMalGC = e.u_MalGC === 'Y';
358
+ }
359
+ onWaybillSelected(e) {
360
+ if (!e)
361
+ return;
362
+ this.waybillNo = e.docNum.toString();
363
+ if (e.cardCode) {
364
+ this.accountCode = e.cardCode;
365
+ this.accountTitle = e.cardName;
366
+ }
367
+ if (e.fromWarehouse) {
368
+ this.departureLocation = e.fromWarehouse;
369
+ }
370
+ if (e.comments) {
371
+ this.description = e.comments;
372
+ }
373
+ const lines = e.stockTransferLines ?? [];
374
+ const uniqueCodes = [...new Set(lines.map(l => l.itemCode).filter(c => !!c))];
375
+ if (uniqueCodes.length === 1) {
376
+ this.stockCode = uniqueCodes[0];
377
+ this.stockName = lines.find(l => l.itemCode === uniqueCodes[0])?.itemDescription ?? '';
378
+ }
379
+ else {
380
+ this.stockCode = '';
381
+ this.stockName = '';
382
+ }
383
+ }
384
+ /** Phase 1 → Phase 2 geçişi */
385
+ ileriGit() {
386
+ if (!this.truckPlateCode) {
387
+ this.confirmation.warn(this.localizationService.instant('Kadooglu::SelectTruckPlate'), '', {
388
+ hideYesBtn: true,
389
+ cancelText: this.localizationService.instant('Kadooglu::Cancel'),
390
+ dismissible: false,
391
+ });
392
+ return;
393
+ }
394
+ if (this.entryTypeTrtmYpilck && !this.stockCode) {
395
+ this.confirmation.warn(this.localizationService.instant('Kadooglu::StockCodeRequired'), '', {
396
+ hideYesBtn: true,
397
+ cancelText: this.localizationService.instant('Kadooglu::Cancel'),
398
+ dismissible: false,
399
+ });
400
+ return;
401
+ }
402
+ this.formPhase = 2;
403
+ }
404
+ /** Phase 2 → Phase 1 geri dön */
405
+ geriGitPhase() {
406
+ this.formPhase = 1;
407
+ }
408
+ save() {
409
+ // Tartım modundaysa doWeighing API çağır
410
+ const docEntry = this.getDocEntry(this.record);
411
+ if (this.weighingMode && docEntry) {
412
+ if (this.currentScaleValue == null) {
413
+ this.confirmation.warn(this.localizationService.instant('Kadooglu::DoWeighingFirst'), '', {
414
+ hideYesBtn: true,
415
+ cancelText: this.localizationService.instant('Kadooglu::Cancel'),
416
+ dismissible: false,
417
+ });
418
+ return;
419
+ }
420
+ this.isSaving = true;
421
+ this.service.doWeighing(docEntry, {
422
+ weighingValue: this.currentScaleValue,
423
+ operatorCode: ''
424
+ }).subscribe({
425
+ next: () => {
426
+ // Tartım değerlerini weighingMode'a göre güncelle
427
+ if (this.weighingMode === 'first') {
428
+ this.firstWeighingValue = this.currentScaleValue;
429
+ }
430
+ else {
431
+ this.lastWeighingValue = this.currentScaleValue;
432
+ }
433
+ this.isSaving = false;
434
+ this.toaster.success(this.weighingMode === 'first'
435
+ ? this.localizationService.instant('Kadooglu::FirstWeighingSaved')
436
+ : this.localizationService.instant('Kadooglu::LastWeighingSaved'));
437
+ // Kısa bir gecikme ile listeye dön (kullanıcı progress bar değişimini görsün)
438
+ setTimeout(() => {
439
+ this.router.navigate(['/kadooglu/entry-weighing']);
440
+ }, 1500);
441
+ },
442
+ error: () => {
443
+ this.isSaving = false;
444
+ this.toaster.error(this.localizationService.instant('Kadooglu::WeighingRecordError'));
445
+ },
446
+ });
447
+ return;
448
+ }
449
+ // Normal kayıt modu (yeni kayıt veya düzenleme)
450
+ if (!this.truckPlateCode) {
451
+ this.confirmation.warn(this.localizationService.instant('Kadooglu::SelectTruckPlate'), '', {
452
+ hideYesBtn: true,
453
+ cancelText: this.localizationService.instant('Kadooglu::Cancel'),
454
+ dismissible: false,
455
+ });
456
+ return;
457
+ }
458
+ const now = new Date();
459
+ const currentDate = now.toISOString().split('T')[0];
460
+ const currentTime = now.toTimeString().split(' ')[0]; // HH:mm:ss
461
+ const dto = {
462
+ u_GateCode: this.gateCode || undefined,
463
+ u_EntryDate: this.entryDate || currentDate,
464
+ u_EntryTime: this.entryTime || currentTime,
465
+ u_ExitDate: this.exitDate || null,
466
+ u_ExitTime: this.exitTime || undefined,
467
+ u_Plate: this.truckPlateCode,
468
+ u_DorsePlate: this.trailerPlateCode || undefined,
469
+ u_EntryType: this.entryTypeCode || undefined,
470
+ u_Description: this.description || undefined,
471
+ u_Driver: this.driverFullName || undefined,
472
+ u_DriverCode: this.driverCode || undefined,
473
+ u_TcNo: this.tcNo || undefined,
474
+ u_CardCode: this.accountCode || undefined,
475
+ u_ScaleCode: this.scaleCode || undefined,
476
+ u_ItemCode: this.stockCode || undefined,
477
+ u_DespatchAdviceNo: this.waybillNo || undefined,
478
+ u_DespatchExist: 'N',
479
+ u_ShipTo: this.arrivalLocation || undefined,
480
+ u_ContainerNo: this.containerNo || undefined,
481
+ u_ShipPlace: this.departureLocation || undefined,
482
+ };
483
+ const obs$ = docEntry
484
+ ? this.service.update(docEntry, dto)
485
+ : this.service.create(dto);
486
+ this.isSaving = true;
487
+ obs$.subscribe({
488
+ next: () => {
489
+ this.isSaving = false;
490
+ this.toaster.success(this.localizationService.instant('Kadooglu::RecordSavedSuccess'));
491
+ this.router.navigate(['/kadooglu/entry-weighing']);
492
+ },
493
+ error: () => {
494
+ this.isSaving = false;
495
+ this.toaster.error(this.localizationService.instant('Kadooglu::RecordSaveError'));
496
+ },
497
+ });
498
+ }
499
+ doGoodsMovement() {
500
+ const docEntry = this.getDocEntry(this.record);
501
+ if (!docEntry)
502
+ return;
503
+ this.isDoingGoodsMovement = true;
504
+ this.service.doGoodsMovement(docEntry).subscribe({
505
+ next: updated => {
506
+ this.record = updated;
507
+ this.isDoingGoodsMovement = false;
508
+ this.toaster.success(this.localizationService.instant('Kadooglu::GoodsMovementSuccess'));
509
+ },
510
+ error: () => {
511
+ this.isDoingGoodsMovement = false;
512
+ },
513
+ });
514
+ }
515
+ doWeighing() {
516
+ // Random değer üret 30000-40000 arası
517
+ this.currentScaleValue = Math.floor(Math.random() * 10001) + 30000;
518
+ }
519
+ goBack() {
520
+ this.router.navigate(['/kadooglu/entry-weighing']);
521
+ }
522
+ validateTCKN(value) {
523
+ const tc = value?.trim();
524
+ if (!tc || tc.length !== 11)
525
+ return false;
526
+ if (!/^\d{11}$/.test(tc))
527
+ return false;
528
+ if (tc[0] === '0')
529
+ return false;
530
+ const d = tc.split('').map(Number);
531
+ const d10 = ((d[0] + d[2] + d[4] + d[6] + d[8]) * 7 - (d[1] + d[3] + d[5] + d[7])) % 10;
532
+ if (d10 !== d[9])
533
+ return false;
534
+ const d11 = d.slice(0, 10).reduce((a, b) => a + b, 0) % 10;
535
+ return d11 === d[10];
536
+ }
537
+ }
538
+ HitEntryWeighingFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitEntryWeighingFormComponent, deps: [{ token: i1.HitEntryWeighingService }, { token: i2.HitStockTransferService }, { token: i3.ConfirmationService }, { token: i3.ToasterService }, { token: i4.ActivatedRoute }, { token: i4.Router }, { token: i5.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
539
+ HitEntryWeighingFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitEntryWeighingFormComponent, selector: "lib-hit-entry-weighing-form", ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Kap\u0131 Se\u00E7imi -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Giri\u015F Tipi -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Giri\u015F Tarihi / Saati -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n\r\n <!-- Ara\u00E7 \u00C7\u0131k\u0131\u015F Tarihi / Saati -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n\r\n <!-- Kamyon / Ara\u00E7 Plakas\u0131 -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Dorse Plakas\u0131 -->\r\n <div class=\"mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- S\u00FCr\u00FCc\u00FC Ad\u0131 -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n\r\n <!-- TC Kimlik No -->\r\n <div class=\"mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label fw-semibold mb-0\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-6\">\r\n\r\n <!-- \u015Eof\u00F6r Kodu -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadDrivers\"\r\n [columns]=\"driverColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"driverName\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onDriverSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Cari -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Stok Nakli -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">\r\n {{ 'Kadooglu::WaybillNumber' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadWaybills\"\r\n [columns]=\"waybillColumns\"\r\n displayName=\"docNum\"\r\n keyExpr=\"docEntry\"\r\n [editingData]=\"waybillNo\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Kantar Kodu -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadScales\"\r\n [columns]=\"scaleColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"scaleName\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onScaleSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Stok Kodu -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Konteyner Numaras\u0131 -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n\r\n <!-- Kalk\u0131\u015F / Var\u0131\u015F Yeri -->\r\n <div class=\"row mb-3\">\r\n <div class=\"col-6\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-6\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <!-- A\u00E7\u0131klama -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n <div class=\"card-body\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mx-auto\">\r\n\r\n <!-- Kantardaki De\u011Fer -->\r\n <div class=\"card bg-light mb-3\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1\">{{ 'Kadooglu::ScaleValue' | abpLocalization }}</div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tart\u0131m Yap butonu -->\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-primary btn-lg w-100 mb-4\"\r\n (click)=\"doWeighing()\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>\r\n {{ 'Kadooglu::PerformWeighing' | abpLocalization }}\r\n </button>\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ firstWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ lastWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece step=3'te g\u00F6ster) -->\r\n <div *ngIf=\"weighingStep === 3 && netWeight != null\" class=\"card border-success mb-3\">\r\n <div class=\"card-body text-center py-3\" style=\"background-color: rgba(25,135,84,0.08);\">\r\n <div class=\"text-success small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"text-success fw-bold\" style=\"font-size: 2rem;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n\r\n <!-- \u00DCst B\u00F6l\u00FCm \u2014 Tart\u0131m Sonu\u00E7 Kartlar\u0131 -->\r\n <div class=\"row mb-4\">\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt B\u00F6l\u00FCm \u2014 Detay Bilgileri -->\r\n <div class=\"card shadow-sm\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-file-text me-2\"></i>{{ 'Kadooglu::RecordDetails' | abpLocalization }}\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <!-- Sol S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Sa\u011F S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n", dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i7.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i7.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i8.HitModalComponent, selector: "hit-lookup-select", inputs: ["displayName", "keyExpr", "modalSize", "getFn", "loadFn", "columns", "isVisible", "disabled", "editingData"], outputs: ["selected"] }, { kind: "component", type: i9.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i9.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i9.DxTextAreaComponent, selector: "dx-text-area", inputs: ["accessKey", "activeStateEnabled", "autoResizeEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "maxHeight", "maxLength", "minHeight", "name", "placeholder", "readOnly", "rtlEnabled", "spellcheck", "stylingMode", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "autoResizeEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maxHeightChange", "maxLengthChange", "minHeightChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i9.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "enableThreeStateBehavior", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "enableThreeStateBehaviorChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "pipe", type: i6.DecimalPipe, name: "number" }, { kind: "pipe", type: i6.DatePipe, name: "date" }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }] });
540
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitEntryWeighingFormComponent, decorators: [{
541
+ type: Component,
542
+ args: [{ selector: 'lib-hit-entry-weighing-form', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Kap\u0131 Se\u00E7imi -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Giri\u015F Tipi -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Giri\u015F Tarihi / Saati -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n\r\n <!-- Ara\u00E7 \u00C7\u0131k\u0131\u015F Tarihi / Saati -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n\r\n <!-- Kamyon / Ara\u00E7 Plakas\u0131 -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Dorse Plakas\u0131 -->\r\n <div class=\"mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- S\u00FCr\u00FCc\u00FC Ad\u0131 -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n\r\n <!-- TC Kimlik No -->\r\n <div class=\"mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label fw-semibold mb-0\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-6\">\r\n\r\n <!-- \u015Eof\u00F6r Kodu -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadDrivers\"\r\n [columns]=\"driverColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"driverName\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onDriverSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Cari -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Stok Nakli -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">\r\n {{ 'Kadooglu::WaybillNumber' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadWaybills\"\r\n [columns]=\"waybillColumns\"\r\n displayName=\"docNum\"\r\n keyExpr=\"docEntry\"\r\n [editingData]=\"waybillNo\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Kantar Kodu -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadScales\"\r\n [columns]=\"scaleColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"scaleName\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onScaleSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Stok Kodu -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n [disabled]=\"isFormLocked\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Konteyner Numaras\u0131 -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n\r\n <!-- Kalk\u0131\u015F / Var\u0131\u015F Yeri -->\r\n <div class=\"row mb-3\">\r\n <div class=\"col-6\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-6\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <!-- A\u00E7\u0131klama -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n <div class=\"card-body\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mx-auto\">\r\n\r\n <!-- Kantardaki De\u011Fer -->\r\n <div class=\"card bg-light mb-3\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1\">{{ 'Kadooglu::ScaleValue' | abpLocalization }}</div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tart\u0131m Yap butonu -->\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-primary btn-lg w-100 mb-4\"\r\n (click)=\"doWeighing()\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>\r\n {{ 'Kadooglu::PerformWeighing' | abpLocalization }}\r\n </button>\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ firstWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ lastWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece step=3'te g\u00F6ster) -->\r\n <div *ngIf=\"weighingStep === 3 && netWeight != null\" class=\"card border-success mb-3\">\r\n <div class=\"card-body text-center py-3\" style=\"background-color: rgba(25,135,84,0.08);\">\r\n <div class=\"text-success small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"text-success fw-bold\" style=\"font-size: 2rem;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n\r\n <!-- \u00DCst B\u00F6l\u00FCm \u2014 Tart\u0131m Sonu\u00E7 Kartlar\u0131 -->\r\n <div class=\"row mb-4\">\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt B\u00F6l\u00FCm \u2014 Detay Bilgileri -->\r\n <div class=\"card shadow-sm\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-file-text me-2\"></i>{{ 'Kadooglu::RecordDetails' | abpLocalization }}\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <!-- Sol S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Sa\u011F S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n" }]
543
+ }], ctorParameters: function () { return [{ type: i1.HitEntryWeighingService }, { type: i2.HitStockTransferService }, { type: i3.ConfirmationService }, { type: i3.ToasterService }, { type: i4.ActivatedRoute }, { type: i4.Router }, { type: i5.LocalizationService }]; } });
544
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUlsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7OztBQXNCaEMsTUFBTSxPQUFPLDZCQUE2QjtJQXFIeEMsWUFDVSxPQUFnQyxFQUNoQyxvQkFBNkMsRUFDN0MsWUFBaUMsRUFDakMsT0FBdUIsRUFDdkIsS0FBcUIsRUFDckIsTUFBYyxFQUNkLG1CQUF3QztRQU54QyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQUNoQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXlCO1FBQzdDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQTNIbEQsV0FBTSxHQUF5QixJQUFJLENBQUM7UUFFcEMsb0RBQW9EO1FBQ3BELGNBQVMsR0FBVSxDQUFDLENBQUM7UUFDckIsbUZBQW1GO1FBQ25GLGlCQUFZLEdBQTRC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QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hGLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzRCxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7MEhBaGlCVSw2QkFBNkI7OEdBQTdCLDZCQUE2QixtRUMxQjFDLHF3NkJBcWpCQTsyRkQzaEJhLDZCQUE2QjtrQkFKekMsU0FBUzsrQkFDRSw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBIaXRFbnRyeVdlaWdoaW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIaXRTdG9ja1RyYW5zZmVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtc3RvY2stdHJhbnNmZXIvaGl0LXN0b2NrLXRyYW5zZmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9ja1RyYW5zZmVyIH0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1zdG9jay10cmFuc2Zlci9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIEVudHJ5V2VpZ2hpbmcsXHJcbiAgRW50cnlXZWlnaGluZ0FjY291bnQsXHJcbiAgRW50cnlXZWlnaGluZ0RvY3VtZW50LFxyXG4gIEVudHJ5V2VpZ2hpbmdEcml2ZXIsXHJcbiAgRW50cnlXZWlnaGluZ0dhdGUsXHJcbiAgRW50cnlXZWlnaGluZ1NjYWxlLFxyXG4gIEVudHJ5V2VpZ2hpbmdTdG9ja0l0ZW0sXHJcbiAgRW50cnlXZWlnaGluZ1RyYWlsZXJQbGF0ZSxcclxuICBFbnRyeVdlaWdoaW5nVHJ1Y2tQbGF0ZSxcclxuICBFbnRyeVdlaWdoaW5nVmVoaWNsZVR5cGUsXHJcbiAgU2F2ZUVudHJ5V2VpZ2hpbmdEdG8sXHJcbn0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1lbnRyeS13ZWlnaGluZy9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oaXQtZW50cnktd2VpZ2hpbmctZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIaXRFbnRyeVdlaWdoaW5nRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcmVjb3JkOiBFbnRyeVdlaWdoaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8vIFdpemFyZCBwaGFzZTogMSA9IEFyYcOnICYgQmVsZ2UsIDIgPSBUYXJ0xLFtIFBhbmVsaVxyXG4gIGZvcm1QaGFzZTogMSB8IDIgPSAxO1xyXG4gIC8vIFdlaWdoaW5nIG1vZGUgZnJvbSBxdWVyeSBwYXJhbTogJ2ZpcnN0JyB8ICdsYXN0JyB8IG51bGwgKG51bGwgPSBub3JtYWwgbmV3L2VkaXQpXHJcbiAgd2VpZ2hpbmdNb2RlOiAnZmlyc3QnIHwgJ2xhc3QnIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8vIExvb2t1cCBsb2FkZXIgZnVuY3Rpb25zIChjYWxsZWQgbGF6aWx5IHdoZW4gbW9kYWwgb3BlbnMpXHJcbiAgbG9hZERvY3VtZW50cyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXREb2N1bWVudHMoKTtcclxuICBsb2FkU2NhbGVzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldFNjYWxlcygpO1xyXG4gIGxvYWRUcnVja1BsYXRlcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRUcnVja1BsYXRlcygpO1xyXG4gIGxvYWRUcmFpbGVyUGxhdGVzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldFRyYWlsZXJQbGF0ZXMoKTtcclxuICBsb2FkRHJpdmVycyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXREcml2ZXJzKCk7XHJcbiAgbG9hZEFjY291bnRzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldEFjY291bnRzKCk7XHJcbiAgbG9hZFN0b2NrSXRlbXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0U3RvY2tJdGVtcygpO1xyXG4gIGxvYWRXYXliaWxscyA9ICgpID0+IHRoaXMuc3RvY2tUcmFuc2ZlclNlcnZpY2UuZ2V0TGlzdCgpO1xyXG4gIGxvYWRHYXRlcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRHYXRlcygpO1xyXG4gIGxvYWRWZWhpY2xlVHlwZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0VmVoaWNsZVR5cGVzKCk7XHJcblxyXG4gIC8vIENvbHVtbiBjb25maWdzXHJcbiAgZG9jdW1lbnRDb2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0JlbGdlIE5vJywgd2lkdGg6IDEyMCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogJ0NhcmkgQWTEsScgfSxcclxuICBdO1xyXG4gIHNjYWxlQ29sdW1ucyA9IFtcclxuICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246ICdLb2QnLCB3aWR0aDogODAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246ICdLYW50YXIgQWTEsScgfSxcclxuICBdO1xyXG4gIHRydWNrUGxhdGVDb2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiAxMDAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAncGxhdGVObycsIGNhcHRpb246ICdQbGFrYScgfSxcclxuICBdO1xyXG4gIHRyYWlsZXJQbGF0ZUNvbHVtbnMgPSBbXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnS29kJywgd2lkdGg6IDEwMCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICdwbGF0ZU5vJywgY2FwdGlvbjogJ1BsYWthJyB9LFxyXG4gIF07XHJcbiAgZHJpdmVyQ29sdW1ucyA9IFtcclxuICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246ICdLb2QnLCB3aWR0aDogMTAwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnQWQgU295YWQnIH0sXHJcbiAgXTtcclxuICBhY2NvdW50Q29sdW1ucyA9IFtcclxuICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246ICdLb2QnLCB3aWR0aDogMTAwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ3RpdGxlJywgY2FwdGlvbjogJ1VudmFuJyB9LFxyXG4gIF07XHJcbiAgc3RvY2tJdGVtQ29sdW1ucyA9IFtcclxuICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246ICdLb2QnLCB3aWR0aDogMTAwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnU3RvayBBZMSxJyB9LFxyXG4gIF07XHJcbiAgd2F5YmlsbENvbHVtbnMgPSBbXHJcbiAgICB7IGRhdGFGaWVsZDogJ2RvY051bScsIGNhcHRpb246ICdCZWxnZSBObycsIHdpZHRoOiAxMjAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAnY2FyZE5hbWUnLCBjYXB0aW9uOiAnQ2FyaSBBZMSxJyB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICdmcm9tV2FyZWhvdXNlJywgY2FwdGlvbjogJ8OHxLFrxLHFnyBEZXBvc3UnLCB3aWR0aDogMTQwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NvbW1lbnRzJywgY2FwdGlvbjogJ0HDp8Sxa2xhbWEnIH0sXHJcbiAgXTtcclxuICBnYXRlQ29sdW1ucyA9IFtcclxuICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246ICdLb2QnLCB3aWR0aDogODAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246ICdLYXDEsSBBZMSxJyB9LFxyXG4gIF07XHJcbiAgdmVoaWNsZVR5cGVDb2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiA4MCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogJ0dpcmnFnyBUaXBpJyB9LFxyXG4gIF07XHJcblxyXG4gIC8vIEZvcm0gZmllbGRzXHJcbiAgZG9jdW1lbnRDb2RlID0gJyc7XHJcbiAgZG9jdW1lbnROYW1lID0gJyc7XHJcbiAgc2NhbGVDb2RlID0gJzEnO1xyXG4gIHNjYWxlTmFtZSA9ICdLYW50YXIgMSc7XHJcbiAgYWNjb3VudENvZGUgPSAnJztcclxuICBhY2NvdW50VGl0bGUgPSAnJztcclxuICB0cnVja1BsYXRlQ29kZSA9ICcnO1xyXG4gIHRydWNrUGxhdGVObyA9ICcnO1xyXG4gIHRyYWlsZXJQbGF0ZUNvZGUgPSAnJztcclxuICB0cmFpbGVyUGxhdGVObyA9ICcnO1xyXG4gIGRyaXZlckNvZGUgPSAnJztcclxuICBkcml2ZXJOYW1lID0gJyc7XHJcbiAgc3RvY2tDb2RlID0gJyc7XHJcbiAgc3RvY2tOYW1lID0gJyc7XHJcbiAgY29udGFpbmVyTm8gPSAnJztcclxuICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gIHdheWJpbGxObyA9ICcnO1xyXG4gIGRlcGFydHVyZUxvY2F0aW9uID0gJyc7XHJcbiAgYXJyaXZhbExvY2F0aW9uID0gJ0ZhYnJpa2EnO1xyXG5cclxuICAvLyBaWlpfVEVTVDIgeWVuaSBhbGFubGFyXHJcbiAgZ2F0ZUNvZGUgPSAnJztcclxuICBnYXRlTmFtZSA9ICcnO1xyXG4gIGVudHJ5RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgZW50cnlUaW1lID0gJyc7XHJcbiAgZXhpdERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIGV4aXRUaW1lID0gJyc7XHJcbiAgZW50cnlUeXBlQ29kZSA9ICcnO1xyXG4gIGVudHJ5VHlwZU5hbWUgPSAnJztcclxuICBkcml2ZXJGdWxsTmFtZSA9ICcnO1xyXG4gIHRjTm8gPSAnJztcclxuICBpc1RjQ2l0aXplbiA9IHRydWU7XHJcblxyXG4gIC8vIFRhcnTEsW0gYmlsZ2lsZXJpIChyZWFkb25seSlcclxuICBmaXJzdE9wZXJhdG9yQ29kZSA9ICcnO1xyXG4gIGZpcnN0V2VpZ2hpbmdWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgbGFzdE9wZXJhdG9yQ29kZSA9ICcnO1xyXG4gIGxhc3RXZWlnaGluZ1ZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBjdXJyZW50U2NhbGVWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGlzU2F2aW5nID0gZmFsc2U7XHJcbiAgaXNXZWlnaGluZyA9IGZhbHNlO1xyXG4gIGVudHJ5VHlwZVRydG1ZcGlsY2sgPSBmYWxzZTtcclxuICBlbnRyeVR5cGVNYWxHQyA9IGZhbHNlO1xyXG4gIGlzRG9pbmdHb29kc01vdmVtZW50ID0gZmFsc2U7XHJcblxyXG4gIC8qKiBTQVAgcmVzcG9uc2UgY2FtZWxDYXNlL1Bhc2NhbENhc2UgZmFya8SxbsSxIGhhbmRsZSBlZGVyICovXHJcbiAgcHJpdmF0ZSBnZXREb2NFbnRyeShyZWM6IEVudHJ5V2VpZ2hpbmcgfCBudWxsKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghcmVjKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIHJlYy5kb2NFbnRyeSA/PyAocmVjIGFzIGFueSkuZG9jRW50cnk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2VydmljZTogSGl0RW50cnlXZWlnaGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b2NrVHJhbnNmZXJTZXJ2aWNlOiBIaXRTdG9ja1RyYW5zZmVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdGVyOiBUb2FzdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgbG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBSZWFkIHdlaWdoaW5nIG1vZGUgZnJvbSBxdWVyeSBwYXJhbXNcclxuICAgIGNvbnN0IG1vZGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KCdtb2RlJyk7XHJcbiAgICBpZiAobW9kZSA9PT0gJ2ZpcnN0JyB8fCBtb2RlID09PSAnbGFzdCcpIHtcclxuICAgICAgdGhpcy53ZWlnaGluZ01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIMOWbmNlIHJvdXRlciBzdGF0ZSdkZW4gc2F0xLFyIHZlcmlzaW5pIG9rdSAobGlzdGUgZWtyYW7EsW5kYW4gYWt0YXLEsWxhbilcclxuICAgIGNvbnN0IHN0YXRlRGF0YSA9IGhpc3Rvcnkuc3RhdGU/LnJvd0RhdGE7XHJcbiAgICBjb25zdCBpZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpO1xyXG5cclxuICAgIGlmIChzdGF0ZURhdGEpIHtcclxuICAgICAgLy8gU3RhdGUnZGVuIGdlbGVuIHZlcml5aSBrdWxsYW4gKEFQSSDDp2HEn3LEsXPEsSBvbG1hZGFuKVxyXG4gICAgICB0aGlzLnJlY29yZCA9IHN0YXRlRGF0YTtcclxuICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgICAvLyBTb24gdGFydMSxbSBtb2R1bmRheXNhIGRpcmVrdCB0YXJ0xLFtIHBhbmVsaW5pIGHDp1xyXG4gICAgICBpZiAodGhpcy53ZWlnaGluZ01vZGUgPT09ICdsYXN0Jykge1xyXG4gICAgICAgIHRoaXMuZm9ybVBoYXNlID0gMjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpZCkge1xyXG4gICAgICAvLyBGYWxsYmFjazogc3RhdGUgeW9rc2EgQVBJJ2RlbiB5w7xrbGVcclxuICAgICAgdGhpcy5zZXJ2aWNlLmdldCgraWQpLnN1YnNjcmliZShyZWNvcmQgPT4ge1xyXG4gICAgICAgIHRoaXMucmVjb3JkID0gcmVjb3JkO1xyXG4gICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgICAgICAvLyBTb24gdGFydMSxbSBtb2R1bmRheXNhIGRpcmVrdCB0YXJ0xLFtIHBhbmVsaW5pIGHDp1xyXG4gICAgICAgIGlmICh0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2xhc3QnKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1QaGFzZSA9IDI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB3ZWlnaGluZ1N0ZXAoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHN0YXR1cyA9ICh0aGlzLnJlY29yZCBhcyBhbnkpPy51X1N0YXR1cztcclxuICAgIGlmICh0aGlzLmxhc3RXZWlnaGluZ1ZhbHVlICE9PSBudWxsIHx8IHN0YXR1cyA9PT0gJzInKSByZXR1cm4gMztcclxuICAgIGlmICh0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSAhPT0gbnVsbCB8fCBzdGF0dXMgPT09ICcxJykgcmV0dXJuIDI7XHJcbiAgICByZXR1cm4gMTtcclxuICB9XHJcblxyXG4gIC8qKiDEsGxrIHRhcnTEsW0geWFwxLFsZMSxeXNhIChzdGVwID49IDIpIGRldGF5IGFsYW5sYXLEsW7EsSBraWxpdGxlICovXHJcbiAgZ2V0IGlzRm9ybUxvY2tlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLndlaWdoaW5nU3RlcCA+PSAyO1xyXG4gIH1cclxuXHJcbiAgLyoqIEhlciBpa2kgdGFydMSxbSBkYSB0YW1hbWxhbmTEsXlzYSAoc3RlcCA9PT0gMykgdMO8bSBla3JhbsSxIGtpbGl0bGUgKi9cclxuICBnZXQgaXNGdWxseUNvbXBsZXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLndlaWdoaW5nU3RlcCA9PT0gMztcclxuICB9XHJcblxyXG4gIGdldCBlbnRyeURhdGVUaW1lKCk6IERhdGUgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmJ1aWxkRGF0ZVRpbWUodGhpcy5lbnRyeURhdGUsIHRoaXMuZW50cnlUaW1lKTtcclxuICB9XHJcblxyXG4gIGdldCBleGl0RGF0ZVRpbWUoKTogRGF0ZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuYnVpbGREYXRlVGltZSh0aGlzLmV4aXREYXRlLCB0aGlzLmV4aXRUaW1lKTtcclxuICB9XHJcblxyXG4gIC8qKiBUYXJpaCBzdHJpbmcgKyBzYXnEsXNhbCBzYWF0ICjDtnIuIDgzMCA9IDA4OjMwKSBkZcSfZXJpbmRlbiBEYXRlIG9sdcWfdHVydXIgKi9cclxuICBwcml2YXRlIGJ1aWxkRGF0ZVRpbWUoZGF0ZVN0cjogc3RyaW5nIHwgbnVsbCwgdGltZVZhbDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCk6IERhdGUgfCBudWxsIHtcclxuICAgIGlmICghZGF0ZVN0cikgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZVN0cik7XHJcbiAgICBpZiAoaXNOYU4oZC5nZXRUaW1lKCkpKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IHQgPSBOdW1iZXIodGltZVZhbCk7XHJcbiAgICBpZiAoIWlzTmFOKHQpKSB7XHJcbiAgICAgIGQuc2V0SG91cnMoTWF0aC5mbG9vcih0IC8gMTAwKSwgdCAlIDEwMCwgMCwgMCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZDtcclxuICB9XHJcblxyXG4gIGdldCBuZXRXZWlnaHQoKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgIT09IG51bGwgJiYgdGhpcy5sYXN0V2VpZ2hpbmdWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gTWF0aC5hYnModGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgLSB0aGlzLmxhc3RXZWlnaGluZ1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdlaWdoaW5nTW9kZUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWlnaGluZ01vZGUgPT09ICdmaXJzdCdcclxuICAgICAgPyB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkZpcnN0V2VpZ2hpbmcnKVxyXG4gICAgICA6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6TGFzdFdlaWdoaW5nJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkKSB7XHJcbiAgICAgIGNvbnN0IHIgPSB0aGlzLnJlY29yZCBhcyBhbnk7IC8vIFNBUCBjYW1lbENhc2UgZmFsbGJhY2tcclxuICAgICAgdGhpcy5zY2FsZUNvZGUgPSByLnVfU2NhbGVDb2RlID8/IHIudV9TY2FsZUNvZGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuYWNjb3VudENvZGUgPSByLnVfQ2FyZENvZGUgPz8gci51X0NhcmRDb2RlID8/ICcnO1xyXG4gICAgICB0aGlzLnRydWNrUGxhdGVDb2RlID0gci51X1BsYXRlID8/IHIudV9QbGF0ZSA/PyAnJztcclxuICAgICAgdGhpcy50cnVja1BsYXRlTm8gPSByLnVfUGxhdGUgPz8gci51X1BsYXRlID8/ICcnO1xyXG4gICAgICB0aGlzLnRyYWlsZXJQbGF0ZUNvZGUgPSByLnVfRG9yc2VQbGF0ZSA/PyAnJztcclxuICAgICAgdGhpcy50cmFpbGVyUGxhdGVObyA9IHIudV9Eb3JzZVBsYXRlID8/ICcnO1xyXG4gICAgICB0aGlzLmRyaXZlckNvZGUgPSByLnVfRHJpdmVyQ29kZSA/PyByLnVfRHJpdmVyQ29kZSA/PyAnJztcclxuICAgICAgdGhpcy5zdG9ja0NvZGUgPSByLnVfSXRlbUNvZGUgPz8gci51X0l0ZW1Db2RlID8/ICcnO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lck5vID0gci51X0NvbnRhaW5lck5vID8/IHIudV9Db250YWluZXJObyA/PyAnJztcclxuICAgICAgdGhpcy53YXliaWxsTm8gPSByLnVfRGVzcGF0Y2hBZHZpY2VObyA/PyByLnVfRGVzcGF0Y2hBZHZpY2VObyA/PyAnJztcclxuICAgICAgdGhpcy5kZXBhcnR1cmVMb2NhdGlvbiA9IHIudV9TaGlwUGxhY2UgPz8gci51X1NoaXBQbGFjZSA/PyAnJztcclxuICAgICAgdGhpcy5hcnJpdmFsTG9jYXRpb24gPSByLnVfU2hpcFRvID8/IHIudV9TaGlwVG8gPz8gJ0ZhYnJpa2EnO1xyXG4gICAgICB0aGlzLmZpcnN0T3BlcmF0b3JDb2RlID0gci51X0ZpcnN0T3B0ID8/IHIudV9GaXJzdE9wdCA/PyAnJztcclxuICAgICAgdGhpcy5sYXN0T3BlcmF0b3JDb2RlID0gci51X0xhc3RPcHQgPz8gci51X0xhc3RPcHQgPz8gJyc7XHJcbiAgICAgIGNvbnN0IHJhd0ZpcnN0ID0gci51X0ZpcnN0V2VpZ2hpbmcgPz8gci51X0ZpcnN0V2VpZ2hpbmcgPz8gbnVsbDtcclxuICAgICAgdGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgPSAocmF3Rmlyc3QgIT0gbnVsbCAmJiByYXdGaXJzdCAhPT0gMCkgPyByYXdGaXJzdCA6IG51bGw7XHJcbiAgICAgIGNvbnN0IHJhd0xhc3QgPSByLnVfTGFzdFdlaWdoaW5nID8/IHIudV9MYXN0V2VpZ2hpbmcgPz8gbnVsbDtcclxuICAgICAgdGhpcy5sYXN0V2VpZ2hpbmdWYWx1ZSA9IChyYXdMYXN0ICE9IG51bGwgJiYgcmF3TGFzdCAhPT0gMCkgPyByYXdMYXN0IDogbnVsbDtcclxuICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHIudV9EZXNjcmlwdGlvbiA/PyByLnVfRGVzY3JpcHRpb24gPz8gJyc7XHJcblxyXG4gICAgICAvLyBaWlpfVEVTVDIgeWVuaSBhbGFubGFyXHJcbiAgICAgIHRoaXMuZ2F0ZUNvZGUgPSByLnVfR2F0ZUNvZGUgPz8gci51X0dhdGVDb2RlID8/ICcnO1xyXG4gICAgICB0aGlzLmVudHJ5RGF0ZSA9IHIudV9FbnRyeURhdGUgPz8gci51X0VudHJ5RGF0ZSA/PyBudWxsO1xyXG4gICAgICB0aGlzLmVudHJ5VGltZSA9IHIudV9FbnRyeVRpbWUgPz8gci51X0VudHJ5VGltZSA/PyAnJztcclxuICAgICAgdGhpcy5leGl0RGF0ZSA9IHIudV9FeGl0RGF0ZSA/PyByLnVfRXhpdERhdGUgPz8gbnVsbDtcclxuICAgICAgdGhpcy5leGl0VGltZSA9IHIudV9FeGl0VGltZSA/PyByLnVfRXhpdFRpbWUgPz8gJyc7XHJcbiAgICAgIHRoaXMuZW50cnlUeXBlQ29kZSA9IHIudV9FbnRyeVR5cGUgPz8gci51X0VudHJ5VHlwZSA/PyAnJztcclxuICAgICAgdGhpcy5kcml2ZXJGdWxsTmFtZSA9IHIudV9Ecml2ZXIgPz8gci51X0RyaXZlciA/PyAnJztcclxuICAgICAgdGhpcy50Y05vID0gci51X1RjTm8gPz8gci51X1RjTm8gPz8gJyc7XHJcbiAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSB0cnVlO1xyXG5cclxuICAgICAgLy8gTG9va3VwIGFsYW5sYXLEsW7EsW4gZ8O2csO8bmVuIGlzaW1sZXJpbmkgw6fDtnrDvG1sZVxyXG4gICAgICB0aGlzLnJlc29sdmVEaXNwbGF5TmFtZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBLYXnEsXR0YWtpIGtvZCBhbGFubGFyxLFuYSBrYXLFn8SxbMSxayBnZWxlbiBnw7Zyw7xuZW4gaXNpbWxlcmkgbG9va3VwIHNlcnZpc2xlcmluZGVuIMOnw7Z6w7xtbGVyICovXHJcbiAgcHJpdmF0ZSByZXNvbHZlRGlzcGxheU5hbWVzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbG9va3VwczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG5cclxuICAgIGlmICh0aGlzLmdhdGVDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ2dhdGVzJ10gPSB0aGlzLmxvYWRHYXRlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW50cnlUeXBlQ29kZSkge1xyXG4gICAgICBsb29rdXBzWyd2ZWhpY2xlVHlwZXMnXSA9IHRoaXMubG9hZFZlaGljbGVUeXBlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2NhbGVDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ3NjYWxlcyddID0gdGhpcy5sb2FkU2NhbGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hY2NvdW50Q29kZSkge1xyXG4gICAgICBsb29rdXBzWydhY2NvdW50cyddID0gdGhpcy5sb2FkQWNjb3VudHMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRyaXZlckNvZGUpIHtcclxuICAgICAgbG9va3Vwc1snZHJpdmVycyddID0gdGhpcy5sb2FkRHJpdmVycygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3RvY2tDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ3N0b2NrSXRlbXMnXSA9IHRoaXMubG9hZFN0b2NrSXRlbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobG9va3Vwcyk7XHJcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBmb3JrSm9pbihsb29rdXBzKS5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0cy5nYXRlcykge1xyXG4gICAgICAgIGNvbnN0IGdhdGUgPSByZXN1bHRzLmdhdGVzLmZpbmQoKGc6IGFueSkgPT4gZy5jb2RlID09PSB0aGlzLmdhdGVDb2RlKTtcclxuICAgICAgICBpZiAoZ2F0ZSkgdGhpcy5nYXRlTmFtZSA9IGdhdGUubmFtZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0cy52ZWhpY2xlVHlwZXMpIHtcclxuICAgICAgICBjb25zdCB2dCA9IHJlc3VsdHMudmVoaWNsZVR5cGVzLmZpbmQoKHQ6IGFueSkgPT4gdC5jb2RlID09PSB0aGlzLmVudHJ5VHlwZUNvZGUpO1xyXG4gICAgICAgIGlmICh2dCkge1xyXG4gICAgICAgICAgdGhpcy5lbnRyeVR5cGVOYW1lID0gdnQubmFtZTtcclxuICAgICAgICAgIHRoaXMuZW50cnlUeXBlVHJ0bVlwaWxjayA9IHZ0LnVfVHJ0bVlwaWxjayA9PT0gJ1knO1xyXG4gICAgICAgICAgdGhpcy5lbnRyeVR5cGVNYWxHQyA9IHZ0LnVfTWFsR0MgPT09ICdZJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdHMuc2NhbGVzKSB7XHJcbiAgICAgICAgY29uc3Qgc2NhbGUgPSByZXN1bHRzLnNjYWxlcy5maW5kKChzOiBhbnkpID0+IHMuY29kZSA9PT0gdGhpcy5zY2FsZUNvZGUpO1xyXG4gICAgICAgIGlmIChzY2FsZSkgdGhpcy5zY2FsZU5hbWUgPSBzY2FsZS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXN1bHRzLmFjY291bnRzKSB7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IHJlc3VsdHMuYWNjb3VudHMuZmluZCgoYTogYW55KSA9PiBhLmNvZGUgPT09IHRoaXMuYWNjb3VudENvZGUpO1xyXG4gICAgICAgIGlmIChhY2NvdW50KSB0aGlzLmFjY291bnRUaXRsZSA9IGFjY291bnQudGl0bGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdHMuZHJpdmVycykge1xyXG4gICAgICAgIGNvbnN0IGRyaXZlciA9IHJlc3VsdHMuZHJpdmVycy5maW5kKChkOiBhbnkpID0+IGQuY29kZSA9PT0gdGhpcy5kcml2ZXJDb2RlKTtcclxuICAgICAgICBpZiAoZHJpdmVyKSB0aGlzLmRyaXZlck5hbWUgPSBkcml2ZXIubmFtZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0cy5zdG9ja0l0ZW1zKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHJlc3VsdHMuc3RvY2tJdGVtcy5maW5kKChpOiBhbnkpID0+IGkuY29kZSA9PT0gdGhpcy5zdG9ja0NvZGUpO1xyXG4gICAgICAgIGlmIChpdGVtKSB0aGlzLnN0b2NrTmFtZSA9IGl0ZW0ubmFtZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkRvY3VtZW50U2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ0RvY3VtZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuZG9jdW1lbnRDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5kb2N1bWVudE5hbWUgPSBlLm5hbWU7XHJcbiAgfVxyXG5cclxuICBvblNjYWxlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1NjYWxlKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuc2NhbGVDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5zY2FsZU5hbWUgPSBlLm5hbWU7XHJcbiAgfVxyXG5cclxuICBvbkFjY291bnRTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nQWNjb3VudCk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLmFjY291bnRDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5hY2NvdW50VGl0bGUgPSBlLnRpdGxlO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uVHJ1Y2tQbGF0ZVNlbGVjdGVkKGU6IEVudHJ5V2VpZ2hpbmdUcnVja1BsYXRlKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMudHJ1Y2tQbGF0ZUNvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLnRydWNrUGxhdGVObyA9IGUucGxhdGVObztcclxuICB9XHJcblxyXG4gIG9uVHJhaWxlclBsYXRlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1RyYWlsZXJQbGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLnRyYWlsZXJQbGF0ZUNvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLnRyYWlsZXJQbGF0ZU5vID0gZS5wbGF0ZU5vO1xyXG4gIH1cclxuXHJcbiAgb25Ecml2ZXJTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nRHJpdmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuZHJpdmVyQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuZHJpdmVyTmFtZSA9IGUubmFtZTtcclxuICB9XHJcblxyXG4gIG9uU3RvY2tJdGVtU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1N0b2NrSXRlbSk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLnN0b2NrQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuc3RvY2tOYW1lID0gZS5uYW1lO1xyXG4gIH1cclxuXHJcbiAgb25HYXRlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ0dhdGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5nYXRlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuZ2F0ZU5hbWUgPSBlLm5hbWU7XHJcbiAgfVxyXG5cclxuICBvblZlaGljbGVUeXBlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1ZlaGljbGVUeXBlKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuZW50cnlUeXBlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuZW50cnlUeXBlTmFtZSA9IGUubmFtZTtcclxuICAgIHRoaXMuZW50cnlUeXBlVHJ0bVlwaWxjayA9IGUudV9UcnRtWXBpbGNrID09PSAnWSc7XHJcbiAgICB0aGlzLmVudHJ5VHlwZU1hbEdDID0gZS51X01hbEdDID09PSAnWSc7XHJcbiAgfVxyXG5cclxuICBvbldheWJpbGxTZWxlY3RlZChlOiBTdG9ja1RyYW5zZmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMud2F5YmlsbE5vID0gZS5kb2NOdW0udG9TdHJpbmcoKTtcclxuICAgIGlmIChlLmNhcmRDb2RlKSB7IHRoaXMuYWNjb3VudENvZGUgPSBlLmNhcmRDb2RlOyB0aGlzLmFjY291bnRUaXRsZSA9IGUuY2FyZE5hbWU7IH1cclxuICAgIGlmIChlLmZyb21XYXJlaG91c2UpIHsgdGhpcy5kZXBhcnR1cmVMb2NhdGlvbiA9IGUuZnJvbVdhcmVob3VzZTsgfVxyXG4gICAgaWYgKGUuY29tbWVudHMpIHsgdGhpcy5kZXNjcmlwdGlvbiA9IGUuY29tbWVudHM7IH1cclxuXHJcbiAgICBjb25zdCBsaW5lcyA9IGUuc3RvY2tUcmFuc2ZlckxpbmVzID8/IFtdO1xyXG4gICAgY29uc3QgdW5pcXVlQ29kZXMgPSBbLi4ubmV3IFNldChsaW5lcy5tYXAobCA9PiBsLml0ZW1Db2RlKS5maWx0ZXIoYyA9PiAhIWMpKV07XHJcbiAgICBpZiAodW5pcXVlQ29kZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMuc3RvY2tDb2RlID0gdW5pcXVlQ29kZXNbMF07XHJcbiAgICAgIHRoaXMuc3RvY2tOYW1lID0gbGluZXMuZmluZChsID0+IGwuaXRlbUNvZGUgPT09IHVuaXF1ZUNvZGVzWzBdKT8uaXRlbURlc2NyaXB0aW9uID8/ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdG9ja0NvZGUgPSAnJztcclxuICAgICAgdGhpcy5zdG9ja05hbWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBQaGFzZSAxIOKGkiBQaGFzZSAyIGdlw6dpxZ9pICovXHJcbiAgaWxlcmlHaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJ1Y2tQbGF0ZUNvZGUpIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlNlbGVjdFRydWNrUGxhdGUnKSwgJycsIHtcclxuICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW50cnlUeXBlVHJ0bVlwaWxjayAmJiAhdGhpcy5zdG9ja0NvZGUpIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlN0b2NrQ29kZVJlcXVpcmVkJyksICcnLCB7XHJcbiAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybVBoYXNlID0gMjtcclxuICB9XHJcblxyXG4gIC8qKiBQaGFzZSAyIOKGkiBQaGFzZSAxIGdlcmkgZMO2biAqL1xyXG4gIGdlcmlHaXRQaGFzZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybVBoYXNlID0gMTtcclxuICB9XHJcblxyXG4gIHNhdmUoKTogdm9pZCB7XHJcbiAgICAvLyBUYXJ0xLFtIG1vZHVuZGF5c2EgZG9XZWlnaGluZyBBUEkgw6dhxJ/EsXJcclxuICAgIGNvbnN0IGRvY0VudHJ5ID0gdGhpcy5nZXREb2NFbnRyeSh0aGlzLnJlY29yZCk7XHJcbiAgICBpZiAodGhpcy53ZWlnaGluZ01vZGUgJiYgZG9jRW50cnkpIHtcclxuICAgICAgaWYgKHRoaXMuY3VycmVudFNjYWxlVmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpEb1dlaWdoaW5nRmlyc3QnKSwgJycsIHtcclxuICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VydmljZS5kb1dlaWdoaW5nKGRvY0VudHJ5LCB7XHJcbiAgICAgICAgd2VpZ2hpbmdWYWx1ZTogdGhpcy5jdXJyZW50U2NhbGVWYWx1ZSxcclxuICAgICAgICBvcGVyYXRvckNvZGU6ICcnXHJcbiAgICAgIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgLy8gVGFydMSxbSBkZcSfZXJsZXJpbmkgd2VpZ2hpbmdNb2RlJ2EgZ8O2cmUgZ8O8bmNlbGxlXHJcbiAgICAgICAgICBpZiAodGhpcy53ZWlnaGluZ01vZGUgPT09ICdmaXJzdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgPSB0aGlzLmN1cnJlbnRTY2FsZVZhbHVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sYXN0V2VpZ2hpbmdWYWx1ZSA9IHRoaXMuY3VycmVudFNjYWxlVmFsdWU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgIHRoaXMud2VpZ2hpbmdNb2RlID09PSAnZmlyc3QnXHJcbiAgICAgICAgICAgICAgPyB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkZpcnN0V2VpZ2hpbmdTYXZlZCcpXHJcbiAgICAgICAgICAgICAgOiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6Okxhc3RXZWlnaGluZ1NhdmVkJylcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgLy8gS8Sxc2EgYmlyIGdlY2lrbWUgaWxlIGxpc3RleWUgZMO2biAoa3VsbGFuxLFjxLEgcHJvZ3Jlc3MgYmFyIGRlxJ9pxZ9pbWluaSBnw7Zyc8O8bilcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9rYWRvb2dsdS9lbnRyeS13ZWlnaGluZyddKTtcclxuICAgICAgICAgIH0sIDE1MDApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3Rlci5lcnJvcih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OldlaWdoaW5nUmVjb3JkRXJyb3InKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3JtYWwga2F5xLF0IG1vZHUgKHllbmkga2F5xLF0IHZleWEgZMO8emVubGVtZSlcclxuICAgIGlmICghdGhpcy50cnVja1BsYXRlQ29kZSkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6U2VsZWN0VHJ1Y2tQbGF0ZScpLCAnJywge1xyXG4gICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbm93LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbm93LnRvVGltZVN0cmluZygpLnNwbGl0KCcgJylbMF07IC8vIEhIOm1tOnNzXHJcblxyXG4gICAgY29uc3QgZHRvOiBTYXZlRW50cnlXZWlnaGluZ0R0byA9IHtcclxuICAgICAgdV9HYXRlQ29kZTogdGhpcy5nYXRlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRW50cnlEYXRlOiB0aGlzLmVudHJ5RGF0ZSB8fCBjdXJyZW50RGF0ZSxcclxuICAgICAgdV9FbnRyeVRpbWU6IHRoaXMuZW50cnlUaW1lIHx8IGN1cnJlbnRUaW1lLFxyXG4gICAgICB1X0V4aXREYXRlOiB0aGlzLmV4aXREYXRlIHx8IG51bGwsXHJcbiAgICAgIHVfRXhpdFRpbWU6IHRoaXMuZXhpdFRpbWUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X1BsYXRlOiB0aGlzLnRydWNrUGxhdGVDb2RlLFxyXG4gICAgICB1X0RvcnNlUGxhdGU6IHRoaXMudHJhaWxlclBsYXRlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRW50cnlUeXBlOiB0aGlzLmVudHJ5VHlwZUNvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0Rlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9Ecml2ZXI6IHRoaXMuZHJpdmVyRnVsbE5hbWUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0RyaXZlckNvZGU6IHRoaXMuZHJpdmVyQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfVGNObzogdGhpcy50Y05vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9DYXJkQ29kZTogdGhpcy5hY2NvdW50Q29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfU2NhbGVDb2RlOiB0aGlzLnNjYWxlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfSXRlbUNvZGU6IHRoaXMuc3RvY2tDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9EZXNwYXRjaEFkdmljZU5vOiB0aGlzLndheWJpbGxObyB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRGVzcGF0Y2hFeGlzdDogJ04nLFxyXG4gICAgICB1X1NoaXBUbzogdGhpcy5hcnJpdmFsTG9jYXRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0NvbnRhaW5lck5vOiB0aGlzLmNvbnRhaW5lck5vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9TaGlwUGxhY2U6IHRoaXMuZGVwYXJ0dXJlTG9jYXRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvYnMkID0gZG9jRW50cnlcclxuICAgICAgPyB0aGlzLnNlcnZpY2UudXBkYXRlKGRvY0VudHJ5LCBkdG8pXHJcbiAgICAgIDogdGhpcy5zZXJ2aWNlLmNyZWF0ZShkdG8pO1xyXG5cclxuICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG4gICAgb2JzJC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6UmVjb3JkU2F2ZWRTdWNjZXNzJykpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2thZG9vZ2x1L2VudHJ5LXdlaWdoaW5nJ10pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIuZXJyb3IodGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpSZWNvcmRTYXZlRXJyb3InKSk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRvR29vZHNNb3ZlbWVudCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRvY0VudHJ5ID0gdGhpcy5nZXREb2NFbnRyeSh0aGlzLnJlY29yZCk7XHJcbiAgICBpZiAoIWRvY0VudHJ5KSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pc0RvaW5nR29vZHNNb3ZlbWVudCA9IHRydWU7XHJcbiAgICB0aGlzLnNlcnZpY2UuZG9Hb29kc01vdmVtZW50KGRvY0VudHJ5KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiB1cGRhdGVkID0+IHtcclxuICAgICAgICB0aGlzLnJlY29yZCA9IHVwZGF0ZWQ7XHJcbiAgICAgICAgdGhpcy5pc0RvaW5nR29vZHNNb3ZlbWVudCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6R29vZHNNb3ZlbWVudFN1Y2Nlc3MnKSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0RvaW5nR29vZHNNb3ZlbWVudCA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkb1dlaWdoaW5nKCk6IHZvaWQge1xyXG4gICAgLy8gUmFuZG9tIGRlxJ9lciDDvHJldCAzMDAwMC00MDAwMCBhcmFzxLFcclxuICAgIHRoaXMuY3VycmVudFNjYWxlVmFsdWUgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMSkgKyAzMDAwMDtcclxuICB9XHJcblxyXG4gIGdvQmFjaygpOiB2b2lkIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2thZG9vZ2x1L2VudHJ5LXdlaWdoaW5nJ10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVRDS04odmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdGMgPSB2YWx1ZT8udHJpbSgpO1xyXG4gICAgaWYgKCF0YyB8fCB0Yy5sZW5ndGggIT09IDExKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoIS9eXFxkezExfSQvLnRlc3QodGMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGNbMF0gPT09ICcwJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgZCA9IHRjLnNwbGl0KCcnKS5tYXAoTnVtYmVyKTtcclxuICAgIGNvbnN0IGQxMCA9ICgoZFswXSArIGRbMl0gKyBkWzRdICsgZFs2XSArIGRbOF0pICogNyAtIChkWzFdICsgZFszXSArIGRbNV0gKyBkWzddKSkgJSAxMDtcclxuICAgIGlmIChkMTAgIT09IGRbOV0pIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IGQxMSA9IGQuc2xpY2UoMCwgMTApLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApICUgMTA7XHJcbiAgICByZXR1cm4gZDExID09PSBkWzEwXTtcclxuICB9XHJcbn1cclxuIiwiPGFicC1wYWdlIFticmVhZGNydW1iXT1cImZhbHNlXCI+XHJcbiAgPGFicC1wYWdlLXRvb2xiYXItY29udGFpbmVyIGNsYXNzPVwiY29sXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGgzIGNsYXNzPVwicGFnZS10aXRsZVwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpFbnRyeVdlaWdoaW5nVGl0bGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIndlaWdoaW5nTW9kZVwiIGNsYXNzPVwiYmFkZ2UgbXMtMiBmcy02XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdiZy13YXJuaW5nIHRleHQtZGFyayc6IHdlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0JyxcclxuICAgICAgICAgICAgICAnYmctcHJpbWFyeSc6IHdlaWdoaW5nTW9kZSA9PT0gJ2xhc3QnXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAge3sgd2VpZ2hpbmdNb2RlTGFiZWwgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXdlaWdoaW5nTW9kZVwiIGNsYXNzPVwiYmFkZ2UgbXMtMiBmcy02XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdiZy1zZWNvbmRhcnknOiB3ZWlnaGluZ1N0ZXAgPT09IDEsXHJcbiAgICAgICAgICAgICAgJ2JnLWluZm8nOiB3ZWlnaGluZ1N0ZXAgPT09IDIsXHJcbiAgICAgICAgICAgICAgJ2JnLXN1Y2Nlc3MnOiB3ZWlnaGluZ1N0ZXAgPT09IDNcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICB7eyAod2VpZ2hpbmdTdGVwID09PSAxID8gJ0thZG9vZ2x1OjpSZWNvcmRTdGVwJyA6IHdlaWdoaW5nU3RlcCA9PT0gMiA/ICdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZycgOiAnS2Fkb29nbHU6OkNvbXBsZXRlZCcpIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2FicC1wYWdlLXRvb2xiYXItY29udGFpbmVyPlxyXG5cclxuICA8IS0tIFN0ZXAgSW5kaWNhdG9yIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcblxyXG4gICAgICAgIDwhLS0gU3RlcCAxOiBBcmHDpyAmIEJlbGdlIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZ3LWJvbGQgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NDBweDsgaGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZToxcmVtO1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImZvcm1QaGFzZSA+IDEgfHwgaXNGdWxseUNvbXBsZXRlZCA/ICcjMTk4NzU0JyA6IChmb3JtUGhhc2UgPT09IDEgPyAnIzBkNmVmZCcgOiAnIzZjNzU3ZCcpXCI+XHJcbiAgICAgICAgICAgIDxpICpuZ0lmPVwiZm9ybVBoYXNlID4gMSB8fCBpc0Z1bGx5Q29tcGxldGVkXCIgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtUGhhc2UgPD0gMSAmJiAhaXNGdWxseUNvbXBsZXRlZFwiPjE8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm10LTEgZnctc2VtaWJvbGRcIiBbY2xhc3MudGV4dC1zdWNjZXNzXT1cImZvcm1QaGFzZSA+IDEgfHwgaXNGdWxseUNvbXBsZXRlZFwiIFtjbGFzcy50ZXh0LXByaW1hcnldPVwiZm9ybVBoYXNlID09PSAxICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+e3sgJ0thZG9vZ2x1OjpWZWhpY2xlQW5kRG9jdW1lbnQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9zbWFsbD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG14LTJcIiBzdHlsZT1cImhlaWdodDozcHg7IG1heC13aWR0aDoxMjBweDtcIlxyXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZm9ybVBoYXNlID4gMSA/ICcjMTk4NzU0JyA6ICcjZGVlMmU2J1wiPjwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFN0ZXAgMjogVGFydMSxbSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmdy1ib2xkIHRleHQtd2hpdGVcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjQwcHg7IGhlaWdodDo0MHB4OyBmb250LXNpemU6MXJlbTtcIlxyXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ3ZWlnaGluZ1N0ZXAgPT09IDMgPyAnIzE5ODc1NCcgOiAoZm9ybVBoYXNlID09PSAyID8gJyMwZDZlZmQnIDogJyM2Yzc1N2QnKVwiPlxyXG4gICAgICAgICAgICA8aSAqbmdJZj1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdTdGVwIDwgM1wiPjI8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm10LTEgZnctc2VtaWJvbGRcIiBbY2xhc3MudGV4dC1zdWNjZXNzXT1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIFtjbGFzcy50ZXh0LXByaW1hcnldPVwiZm9ybVBoYXNlID09PSAyICYmIHdlaWdoaW5nU3RlcCA8IDNcIiBbY2xhc3MudGV4dC1tdXRlZF09XCJmb3JtUGhhc2UgPCAyICYmIHdlaWdoaW5nU3RlcCA8IDNcIj57eyAnS2Fkb29nbHU6OldlaWdoaW5nU3RlcCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbXgtMlwiIHN0eWxlPVwiaGVpZ2h0OjNweDsgbWF4LXdpZHRoOjEyMHB4O1wiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ3ZWlnaGluZ1N0ZXAgPT09IDMgPyAnIzE5ODc1NCcgOiAnI2RlZTJlNidcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBTdGVwIDM6IFRhbWFtbGFuZMSxIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZ3LWJvbGQgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NDBweDsgaGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZToxcmVtO1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIndlaWdoaW5nU3RlcCA9PT0gMyA/ICcjMTk4NzU0JyA6ICcjNmM3NTdkJ1wiPlxyXG4gICAgICAgICAgICA8aSAqbmdJZj1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdTdGVwIDwgM1wiPjM8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm10LTEgZnctc2VtaWJvbGRcIiBbY2xhc3MudGV4dC1zdWNjZXNzXT1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIFtjbGFzcy50ZXh0LW11dGVkXT1cIndlaWdoaW5nU3RlcCA8IDNcIj57eyAnS2Fkb29nbHU6OkNvbXBsZXRlZCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSA9PT09PT09PT09IFBIQVNFIDE6IEFyYcOnICYgQmVsZ2UgPT09PT09PT09PSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZm9ybVBoYXNlID09PSAxICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGZ3LWJvbGRcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cnVjayBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6VmVoaWNsZUFuZERvY3VtZW50JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEthcMSxIFNlw6dpbWkgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpHYXRlU2VsZWN0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZEdhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJnYXRlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwiZ2F0ZU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvbkdhdGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEdpcmnFnyBUaXBpIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBmdy1zZW1pYm9sZFwiPkFyYcOnIEhhcmVrZXQgVMO8csO8PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkVmVoaWNsZVR5cGVzXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJ2ZWhpY2xlVHlwZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cImVudHJ5VHlwZU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvblZlaGljbGVUeXBlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBBcmHDpyBHaXJpxZ8gVGFyaWhpIC8gU2FhdGkgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpFbnRyeURhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGR4LWRhdGUtYm94XHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImVudHJ5RGF0ZVRpbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgICAgPC9keC1kYXRlLWJveD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQXJhw6cgw4fEsWvEscWfIFRhcmloaSAvIFNhYXRpIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RXhpdERhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGR4LWRhdGUtYm94XHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImV4aXREYXRlVGltZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0PVwiZGQuTU0ueXl5eSBISDptbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2R4LWRhdGUtYm94PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBLYW15b24gLyBBcmHDpyBQbGFrYXPEsSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgZnctc2VtaWJvbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OlRydWNrUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFRydWNrUGxhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJ0cnVja1BsYXRlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJwbGF0ZU5vXCJcclxuICAgICAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwidHJ1Y2tQbGF0ZU5vXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25UcnVja1BsYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBEb3JzZSBQbGFrYXPEsSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCJ0cmFpbGVyUGxhdGVOb1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpUcmFpbGVyUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkVHJhaWxlclBsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwidHJhaWxlclBsYXRlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJwbGF0ZU5vXCJcclxuICAgICAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwidHJhaWxlclBsYXRlTm9cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvblRyYWlsZXJQbGF0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gU8O8csO8Y8O8IEFkxLEgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpEcml2ZXJOYW1lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cImRyaXZlckZ1bGxOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlckRyaXZlck5hbWUnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVEMgS2ltbGlrIE5vIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbWItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgZnctc2VtaWJvbGQgbWItMFwiPnt7IGlzVGNDaXRpemVuID8gKCdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbikgOiAnS2ltbGlrIE5vJyB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbKHZhbHVlKV09XCJpc1RjQ2l0aXplblwiIHRleHQ9XCJULkMuIFZhdGFuZGHFn8SxXCI+PC9keC1jaGVjay1ib3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJ0Y05vXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaXNUY0NpdGl6ZW4gPyAoJ0thZG9vZ2x1OjpUY0lkZW50aXR5Tm8nIHwgYWJwTG9jYWxpemF0aW9uKSA6ICdLaW1saWsgTm8nXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIMWeb2bDtnIgS29kdSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkRyaXZlckNvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkRHJpdmVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiZHJpdmVyQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwiZHJpdmVyTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uRHJpdmVyU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBDYXJpIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6QnVzaW5lc3NQYXJ0bmVyJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZEFjY291bnRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJhY2NvdW50Q29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJ0aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cImFjY291bnRUaXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uQWNjb3VudFNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gU3RvayBOYWtsaSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgZnctc2VtaWJvbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OldheWJpbGxOdW1iZXInIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFdheWJpbGxzXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJ3YXliaWxsQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJkb2NOdW1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGtleUV4cHI9XCJkb2NFbnRyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cIndheWJpbGxOb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uV2F5YmlsbFNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gS2FudGFyIEtvZHUgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpTY2FsZUNvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkU2NhbGVzXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJzY2FsZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInNjYWxlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uU2NhbGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFN0b2sgS29kdSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6Okl0ZW1Db2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFN0b2NrSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInN0b2NrSXRlbUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInN0b2NrTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uU3RvY2tJdGVtU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBLb250ZXluZXIgTnVtYXJhc8SxIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6Q29udGFpbmVyTm8nIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiY29udGFpbmVyTm9cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2Fkb29nbHU6Ok1hbnVhbEVudHJ5JyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEthbGvEscWfIC8gVmFyxLHFnyBZZXJpIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkRlcGFydHVyZVBsYWNlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJkZXBhcnR1cmVMb2NhdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpBdXRvRmlsbGVkRnJvbVdheWJpbGwnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpBcnJpdmFsUGxhY2UnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cImFycml2YWxMb2NhdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQcOnxLFrbGFtYSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWFyZWFcclxuICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCI3MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZHgtdGV4dC1hcmVhPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gUGhhc2UgMSBBbHQgQnV0b25sYXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTMgbWItM1wiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpCYWNrJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxyXG4gICAgICAgIDxhYnAtYnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cIiF3ZWlnaGluZ01vZGUgJiYgIWlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICBpY29uQ2xhc3M9XCJmYSBmYS1zYXZlXCJcclxuICAgICAgICAgIGJ1dHRvblR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgW2xvYWRpbmddPVwiaXNTYXZpbmdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvYWJwLWJ1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImlsZXJpR2l0KClcIj5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TmV4dCcgfCBhYnBMb2NhbGl6YXRpb24gfX0gPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1yaWdodCBtcy0xXCI+PC9pPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tID09PT09PT09PT0gUEhBU0UgMjogVGFydMSxbSBQYW5lbGkgPT09PT09PT09PSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZm9ybVBoYXNlID09PSAyICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGZ3LWJvbGRcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYWxhbmNlLXNjYWxlIG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpXZWlnaGluZ1BhbmVsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIndlaWdoaW5nTW9kZVwiIGNsYXNzPVwiYmFkZ2UgbXMtMlwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2VpZ2hpbmdNb2RlID09PSAnZmlyc3QnID8gJ2JnLXdhcm5pbmcgdGV4dC1kYXJrJyA6ICdiZy1wcmltYXJ5J1wiPlxyXG4gICAgICAgICAgICAgIHt7IHdlaWdoaW5nTW9kZUxhYmVsIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBteC1hdXRvXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBLYW50YXJkYWtpIERlxJ9lciAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJnLWxpZ2h0IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSB0ZXh0LWNlbnRlciBweS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbWItMVwiPnt7ICdLYWRvb2dsdTo6U2NhbGVWYWx1ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAyLjVyZW07IGZvbnQtd2VpZ2h0OiBib2xkOyBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVudFNjYWxlVmFsdWUgIT0gbnVsbCA/IChjdXJyZW50U2NhbGVWYWx1ZSB8IG51bWJlcjonMS4wLTAnKSArICcga2cnIDogJ+KAlCBrZycgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRhcnTEsW0gWWFwIGJ1dG9udSAtLT5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNGdWxseUNvbXBsZXRlZFwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyB3LTEwMCBtYi00XCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvV2VpZ2hpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJhbGFuY2Utc2NhbGUgbWUtMlwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpQZXJmb3JtV2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIMSwbGsgVGFydMSxbSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtdXBwZXJjYXNlIG1iLTFcIj57eyAnS2Fkb29nbHU6OkZpcnN0V2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaXJzdFdlaWdoaW5nVmFsdWUgIT0gbnVsbDsgZWxzZSBub0ZpcnN0V2VpZ2hpbmdcIiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5IHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LWJvbGQgZnMtNVwiPnt7IGZpcnN0V2VpZ2hpbmdWYWx1ZSB8IG51bWJlcjonMS4wLTAnIH19IGtnPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+e3sgJ0thZG9vZ2x1OjpPcGVyYXRvcicgfCBhYnBMb2NhbGl6YXRpb24gfX06IHt7IGZpcnN0T3BlcmF0b3JDb2RlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ZpcnN0V2VpZ2hpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5IHAtMiB0ZXh0LW11dGVkIHRleHQtY2VudGVyIGZzdC1pdGFsaWNcIj57eyAnS2Fkb29nbHU6Ok5vdFlldERvbmUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFNvbiBUYXJ0xLFtIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGQgdGV4dC11cHBlcmNhc2UgbWItMVwiPnt7ICdLYWRvb2dsdTo6TGFzdFdlaWdoaW5nJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGFzdFdlaWdoaW5nVmFsdWUgIT0gbnVsbDsgZWxzZSBub0xhc3RXZWlnaGluZ1wiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHkgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctYm9sZCBmcy01XCI+e3sgbGFzdFdlaWdoaW5nVmFsdWUgfCBudW1iZXI6JzEuMC0wJyB9fSBrZzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPnt7ICdLYWRvb2dsdTo6T3BlcmF0b3InIHwgYWJwTG9jYWxpemF0aW9uIH19OiB7eyBsYXN0T3BlcmF0b3JDb2RlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0xhc3RXZWlnaGluZz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHkgcC0yIHRleHQtbXV0ZWQgdGV4dC1jZW50ZXIgZnN0LWl0YWxpY1wiPnt7ICdLYWRvb2dsdTo6Tm90WWV0RG9uZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gTmV0IFnDvGsgKHNhZGVjZSBzdGVwPTMndGUgZ8O2c3RlcikgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwid2VpZ2hpbmdTdGVwID09PSAzICYmIG5ldFdlaWdodCAhPSBudWxsXCIgY2xhc3M9XCJjYXJkIGJvcmRlci1zdWNjZXNzIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSB0ZXh0LWNlbnRlciBweS0zXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1LDEzNSw4NCwwLjA4KTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWNjZXNzIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtdXBwZXJjYXNlIG1iLTFcIj57eyAnS2Fkb29nbHU6Ok5ldFdlaWdodCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWNjZXNzIGZ3LWJvbGRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMnJlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IG5ldFdlaWdodCB8IG51bWJlcjonMS4wLTAnIH19IGtnXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFBoYXNlIDIgQWx0IEJ1dG9ubGFyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0zIG1iLTNcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImdlcmlHaXRQaGFzZSgpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1sZWZ0IG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6QmFjaycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxhYnAtYnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCIhaXNGdWxseUNvbXBsZXRlZFwiXHJcbiAgICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtc2F2ZVwiXHJcbiAgICAgICAgYnV0dG9uVHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgW2xvYWRpbmddPVwiaXNTYXZpbmdcIlxyXG4gICAgICAgIChjbGljayk9XCJzYXZlKClcIj5cclxuICAgICAgICB7eyAnS2Fkb29nbHU6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYWJwLWJ1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tID09PT09PT09PT0gU1VNTUFSWTogVGFtYW1sYW5kxLEgR8O2csO8bsO8bcO8ID09PT09PT09PT0gLS0+XHJcbiAgPGRpdiAqbmdJZj1cImlzRnVsbHlDb21wbGV0ZWRcIj5cclxuXHJcbiAgICA8IS0tIMOcc3QgQsO2bMO8bSDigJQgVGFydMSxbSBTb251w6cgS2FydGxhcsSxIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi00XCI+XHJcbiAgICAgIDwhLS0gxLBsayBUYXJ0xLFtIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgbWItMyBtYi1tZC0wXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIHNoYWRvdy1zbSByb3VuZGVkIHB5LTMgcHgtNCBoLTEwMFwiIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMGQ2ZWZkO1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtdXBwZXJjYXNlIHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGQgbWItMVwiPnt7ICdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDEuNzVyZW07IGxldHRlci1zcGFjaW5nOiAwLjAyZW07XCI+XHJcbiAgICAgICAgICAgIHt7IGZpcnN0V2VpZ2hpbmdWYWx1ZSAhPSBudWxsID8gKGZpcnN0V2VpZ2hpbmdWYWx1ZSB8IG51bWJlcjonMS4wLTAnKSArICcga2cnIDogJ+KAlCBrZycgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbXQtMVwiPnt7ICdLYWRvb2dsdTo6T3BlcmF0b3InIHwgYWJwTG9jYWxpemF0aW9uIH19OiB7eyBmaXJzdE9wZXJhdG9yQ29kZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBTb24gVGFydMSxbSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IG1iLTMgbWItbWQtMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBzaGFkb3ctc20gcm91bmRlZCBweS0zIHB4LTQgaC0xMDBcIiBzdHlsZT1cImJvcmRlci1sZWZ0OiA0cHggc29saWQgIzZmNDJjMTtcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIG1iLTFcIj57eyAnS2Fkb29nbHU6Okxhc3RXZWlnaGluZycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDEuNzVyZW07IGxldHRlci1zcGFjaW5nOiAwLjAyZW07XCI+XHJcbiAgICAgICAgICAgIHt7IGxhc3RXZWlnaGluZ1ZhbHVlICE9IG51bGwgPyAobGFzdFdlaWdoaW5nVmFsdWUgfCBudW1iZXI6JzEuMC0wJykgKyAnIGtnJyA6ICfigJQga2cnIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG10LTFcIj57eyAnS2Fkb29nbHU6Ok9wZXJhdG9yJyB8IGFicExvY2FsaXphdGlvbiB9fToge3sgbGFzdE9wZXJhdG9yQ29kZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBOZXQgWcO8ayAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoYWRvdy1zbSByb3VuZGVkIHB5LTMgcHgtNCBoLTEwMFwiIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMTk4NzU0OyBiYWNrZ3JvdW5kOiByZ2JhKDI1LDEzNSw4NCwwLjA2KTtcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIG1iLTFcIj57eyAnS2Fkb29nbHU6Ok5ldFdlaWdodCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDEuNzVyZW07IGxldHRlci1zcGFjaW5nOiAwLjAyZW07IGNvbG9yOiAjMTk4NzU0O1wiPlxyXG4gICAgICAgICAgICB7eyBuZXRXZWlnaHQgIT0gbnVsbCA/IChuZXRXZWlnaHQgfCBudW1iZXI6JzEuMC0wJykgKyAnIGtnJyA6ICfigJQga2cnIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEFsdCBCw7Zsw7xtIOKAlCBEZXRheSBCaWxnaWxlcmkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCBzaGFkb3ctc21cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGZ3LWJvbGRcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGUtdGV4dCBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6UmVjb3JkRGV0YWlscycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8IS0tIFNvbCBTw7x0dW4gLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpHYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBnYXRlTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+QXJhw6cgSGFyZWtldCBUw7xyw7w8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZW50cnlUeXBlTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpFbnRyeURhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGVudHJ5RGF0ZSA/IChlbnRyeURhdGUgfCBkYXRlOidkZC5NTS55eXl5JykgOiAn4oCUJyB9fSB7eyBlbnRyeVRpbWUgfHwgJycgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RXhpdERhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGV4aXREYXRlID8gKGV4aXREYXRlIHwgZGF0ZTonZGQuTU0ueXl5eScpIDogJ+KAlCcgfX0ge3sgZXhpdFRpbWUgfHwgJycgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6VHJ1Y2tQbGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgdHJ1Y2tQbGF0ZU5vIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OlRyYWlsZXJQbGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgdHJhaWxlclBsYXRlTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RHJpdmVyTmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZHJpdmVyRnVsbE5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyB0Y05vIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIFNhxJ8gU8O8dHVuIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RHJpdmVyQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZHJpdmVyTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpCdXNpbmVzc1BhcnRuZXInIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGFjY291bnRUaXRsZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpXYXliaWxsTnVtYmVyJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyB3YXliaWxsTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6U2NhbGVDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBzY2FsZU5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6SXRlbUNvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHN0b2NrTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpDb250YWluZXJObycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgY29udGFpbmVyTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RGVwYXJ0dXJlVG9BcnJpdmFsJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyAoZGVwYXJ0dXJlTG9jYXRpb24gfHwgJ+KAlCcpICsgJyDihpIgJyArIChhcnJpdmFsTG9jYXRpb24gfHwgJ+KAlCcpIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBkZXNjcmlwdGlvbiB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQWx0IEJ1dG9ubGFyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0zIG1iLTNcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1sZWZ0IG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6QmFja1RvTGlzdCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICAqbmdJZj1cImVudHJ5VHlwZU1hbEdDICYmIHJlY29yZD8udV9TdGF0dXMgPT09ICcyJ1wiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXdhcm5pbmdcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0RvaW5nR29vZHNNb3ZlbWVudFwiXHJcbiAgICAgICAgKGNsaWNrKT1cImRvR29vZHNNb3ZlbWVudCgpXCI+XHJcbiAgICAgICAgPGkgW2NsYXNzXT1cImlzRG9pbmdHb29kc01vdmVtZW50ID8gJ2ZhIGZhLXNwaW5uZXIgZmEtc3BpbiBtZS0xJyA6ICdmYSBmYS1leGNoYW5nZSBtZS0xJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICB7eyAnS2Fkb29nbHU6Ok1hbEdjWWFwJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuPC9hYnAtcGFnZT5cclxuIl19