@hitsoft/abp.kadooglu 1.0.12 → 1.0.13

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.
@@ -9,13 +9,11 @@ import * as i5 from "../../../hit-proxy/hit-vehicle-type/hit-vehicle-type.servic
9
9
  import * as i6 from "../../../hit-proxy/hit-business-partner/hit-business-partner.service";
10
10
  import * as i7 from "../../../hit-proxy/hit-user-gate/hit-user-gate.service";
11
11
  import * as i8 from "@abp/ng.core";
12
- import * as i9 from "../../../hit-proxy/hit-stock-transfer/hit-stock-transfer.service";
13
- import * as i10 from "../../../hit-proxy/hit-purchase-delivery-note/hit-purchase-delivery-note.service";
14
- import * as i11 from "@angular/common";
15
- import * as i12 from "../../../shared/hit-modal/hit-modal.component";
16
- import * as i13 from "devextreme-angular";
12
+ import * as i9 from "@angular/common";
13
+ import * as i10 from "../../../shared/hit-modal/hit-modal.component";
14
+ import * as i11 from "devextreme-angular";
17
15
  export class HitFactoryEntryFormComponent {
18
- constructor(confirmation, service, carrierPersonService, plateService, vehicleTypeService, businessPartnerService, userGateService, localizationService, stockTransferService, purchaseDeliveryNoteService) {
16
+ constructor(confirmation, service, carrierPersonService, plateService, vehicleTypeService, businessPartnerService, userGateService, localizationService) {
19
17
  this.confirmation = confirmation;
20
18
  this.service = service;
21
19
  this.carrierPersonService = carrierPersonService;
@@ -24,8 +22,6 @@ export class HitFactoryEntryFormComponent {
24
22
  this.businessPartnerService = businessPartnerService;
25
23
  this.userGateService = userGateService;
26
24
  this.localizationService = localizationService;
27
- this.stockTransferService = stockTransferService;
28
- this.purchaseDeliveryNoteService = purchaseDeliveryNoteService;
29
25
  this.visible = false;
30
26
  this.visibleChange = new EventEmitter();
31
27
  this.record = null;
@@ -87,21 +83,6 @@ export class HitFactoryEntryFormComponent {
87
83
  this.newCarrierTel = '';
88
84
  this.isTcCitizen = true;
89
85
  this.isLoading = false;
90
- // Waybill (SSMG / Stok Nakli) — yalnızca Mal GÇ = Y olan hareket tiplerinde gösterilir
91
- this.waybillTabs = [];
92
- this.waybillNo = '';
93
- this.waybillDocEntry = null;
94
- // Waybill seçimi sonrası backend'den otomatik doldurulan gizli alanlar
95
- this.waybillIrsaliyeNo = ''; // u_EFATNO → u_DespatchAdviceNo
96
- this.waybillAutoPlate = ''; // u_AracPlakasi
97
- this.waybillAutoDorsePlate = ''; // u_DorsePlakalar
98
- this.waybillAutoTcNo = ''; // u_SoforKimlik
99
- this.waybillAutoDriverFirstname = ''; // u_SoforAd
100
- this.waybillAutoDriverLastname = ''; // u_SoforSoyadi
101
- this.waybillAutoDriverName = ''; // u_SoforAd + u_SoforSoyadi
102
- this.waybillAutoCardCode = ''; // cardCode
103
- this.waybillSourceType = null;
104
- this.isWaybillLoading = false;
105
86
  }
106
87
  ngOnInit() {
107
88
  this.vehicleTypeService.getList().subscribe(d => {
@@ -117,54 +98,6 @@ export class HitFactoryEntryFormComponent {
117
98
  this.businessPartnerService.getList().subscribe(d => (this.businessPartnerData = d));
118
99
  this.userGateService.getMyGates().subscribe(d => (this.gateData = d));
119
100
  this.userGateService.getMyDefaultGateCode().subscribe(d => (this.defaultGateCode = d ?? ''));
120
- const l = (key) => this.localizationService.instant('Kadooglu::' + key);
121
- const waybillDateFrom = (() => { const d = new Date(); d.setDate(d.getDate() - 3); return d; })();
122
- const waybillDateTo = new Date();
123
- this.waybillTabs = [
124
- {
125
- title: l('WaybillTab_StockTransfer'),
126
- loadFn: (params) => this.stockTransferService.getList(params),
127
- displayName: 'u_EFATNO',
128
- keyExpr: 'docEntry',
129
- showDateFilter: true,
130
- defaultDateFrom: waybillDateFrom,
131
- defaultDateTo: waybillDateTo,
132
- columns: [
133
- { dataField: 'docNum', caption: l('DocumentNo'), width: 100 },
134
- { dataField: 'u_EFATNO', caption: l('WaybillNo'), width: 120 },
135
- { dataField: 'cardCode', caption: l('CardCode'), width: 120 },
136
- { dataField: 'cardName', caption: l('CardName') },
137
- { dataField: 'fromWarehouse', caption: l('ExitWarehouse'), width: 140 },
138
- { dataField: 'u_AracPlakasi', caption: l('VehiclePlate'), width: 110 },
139
- { dataField: 'u_DorsePlakalar', caption: l('TrailerPlate'), width: 110 },
140
- { dataField: 'u_SoforAd', caption: l('DriverName') },
141
- { dataField: 'u_SoforSoyadi', caption: l('DriverSurname') },
142
- { dataField: 'u_SoforKimlik', caption: l('TcIdentityNo'), width: 130 },
143
- { dataField: 'comments', caption: l('Description') },
144
- ],
145
- },
146
- {
147
- title: l('WaybillTab_PurchaseDelivery'),
148
- loadFn: (params) => this.purchaseDeliveryNoteService.getList(params),
149
- displayName: 'u_EFATNO',
150
- keyExpr: 'docEntry',
151
- showDateFilter: true,
152
- defaultDateFrom: waybillDateFrom,
153
- defaultDateTo: waybillDateTo,
154
- columns: [
155
- { dataField: 'docNum', caption: l('DocumentNo'), width: 100 },
156
- { dataField: 'u_EFATNO', caption: l('WaybillNo'), width: 120 },
157
- { dataField: 'cardCode', caption: l('CardCode'), width: 120 },
158
- { dataField: 'cardName', caption: l('CardName') },
159
- { dataField: 'u_AracPlakasi', caption: l('VehiclePlate'), width: 110 },
160
- { dataField: 'u_DorsePlakalar', caption: l('TrailerPlate'), width: 110 },
161
- { dataField: 'u_SoforAd', caption: l('DriverName') },
162
- { dataField: 'u_SoforSoyadi', caption: l('DriverSurname') },
163
- { dataField: 'u_SoforKimlik', caption: l('TcIdentityNo'), width: 130 },
164
- { dataField: 'comments', caption: l('Description') },
165
- ],
166
- },
167
- ];
168
101
  }
169
102
  ngOnChanges(changes) {
170
103
  if (changes['visible']?.currentValue === true) {
@@ -184,15 +117,6 @@ export class HitFactoryEntryFormComponent {
184
117
  this.newCarrierFirstname = '';
185
118
  this.newCarrierLastname = '';
186
119
  this.newCarrierTel = '';
187
- this.waybillIrsaliyeNo = '';
188
- this.waybillAutoPlate = '';
189
- this.waybillAutoDorsePlate = '';
190
- this.waybillAutoTcNo = '';
191
- this.waybillAutoDriverFirstname = '';
192
- this.waybillAutoDriverLastname = '';
193
- this.waybillAutoDriverName = '';
194
- this.waybillAutoCardCode = '';
195
- this.waybillSourceType = null;
196
120
  if (this.record) {
197
121
  this.gateCode = this.record.u_GateCode ?? '';
198
122
  this.entryDateTime = this.buildDateTime(this.record.u_EntryDate, this.record.u_EntryTime);
@@ -206,17 +130,6 @@ export class HitFactoryEntryFormComponent {
206
130
  this.description = this.record.u_Description;
207
131
  this.selectedBusinessPartnerCode = this.record.u_CardCode ?? '';
208
132
  this.selectedBusinessPartnerName = this.businessPartnerData.find(p => p.cardCode === this.record.u_CardCode)?.cardName ?? this.record.u_CardCode ?? '';
209
- this.waybillNo = this.record.u_DespatchAdviceNo ?? '';
210
- this.waybillDocEntry = null;
211
- this.waybillIrsaliyeNo = '';
212
- this.waybillAutoPlate = '';
213
- this.waybillAutoDorsePlate = '';
214
- this.waybillAutoTcNo = '';
215
- this.waybillAutoDriverFirstname = '';
216
- this.waybillAutoDriverLastname = '';
217
- this.waybillAutoDriverName = '';
218
- this.waybillAutoCardCode = '';
219
- this.waybillSourceType = null;
220
133
  // Carrier'dan TC vatandaşı bilgisini oku
221
134
  const carrier = this.carrierData.find(c => c.code === this.record.u_TcNo);
222
135
  this.isTcCitizen = carrier ? carrier.u_TcVtndsiMi !== 'N' : true;
@@ -239,17 +152,6 @@ export class HitFactoryEntryFormComponent {
239
152
  this.description = '';
240
153
  this.selectedBusinessPartnerCode = '';
241
154
  this.selectedBusinessPartnerName = '';
242
- this.waybillNo = '';
243
- this.waybillDocEntry = null;
244
- this.waybillIrsaliyeNo = '';
245
- this.waybillAutoPlate = '';
246
- this.waybillAutoDorsePlate = '';
247
- this.waybillAutoTcNo = '';
248
- this.waybillAutoDriverFirstname = '';
249
- this.waybillAutoDriverLastname = '';
250
- this.waybillAutoDriverName = '';
251
- this.waybillAutoCardCode = '';
252
- this.waybillSourceType = null;
253
155
  }
254
156
  }
255
157
  buildDateTime(dateStr, timeNum) {
@@ -282,40 +184,14 @@ export class HitFactoryEntryFormComponent {
282
184
  this.tcLookupMode = false;
283
185
  this.selectedBusinessPartnerCode = '';
284
186
  this.selectedBusinessPartnerName = '';
285
- this.waybillNo = '';
286
- this.waybillDocEntry = null;
287
- this.waybillIrsaliyeNo = '';
288
- this.waybillAutoPlate = '';
289
- this.waybillAutoDorsePlate = '';
290
- this.waybillAutoTcNo = '';
291
- this.waybillAutoDriverFirstname = '';
292
- this.waybillAutoDriverLastname = '';
293
- this.waybillAutoDriverName = '';
294
- this.waybillAutoCardCode = '';
295
- this.waybillSourceType = null;
296
187
  return;
297
188
  }
298
189
  this.selectedTypeCode = e.code;
299
190
  this.selectedTypeName = e.name;
300
191
  this.selectedType = e;
301
- // Hareket tipi değişince waybill seçimini ve otomatik doldurulan alanları sıfırla
302
- this.waybillNo = '';
303
- this.waybillDocEntry = null;
304
- this.waybillIrsaliyeNo = '';
305
- this.waybillAutoPlate = '';
306
- this.waybillAutoDorsePlate = '';
307
- this.waybillAutoTcNo = '';
308
- this.waybillAutoDriverFirstname = '';
309
- this.waybillAutoDriverLastname = '';
310
- this.waybillAutoDriverName = '';
311
- this.waybillAutoCardCode = '';
312
- this.waybillSourceType = null;
313
- }
314
- get isGoodsType() {
315
- return this.selectedType?.u_MalGC === 'Y';
316
192
  }
317
193
  get showExtraFields() {
318
- return !!this.selectedTypeCode && !this.isGoodsType;
194
+ return !!this.selectedTypeCode;
319
195
  }
320
196
  onPlateSelected(e) {
321
197
  if (!e)
@@ -362,62 +238,6 @@ export class HitFactoryEntryFormComponent {
362
238
  this.selectedBusinessPartnerCode = e.cardCode;
363
239
  this.selectedBusinessPartnerName = e.cardName;
364
240
  }
365
- onWaybillSelected(e) {
366
- if (!e) {
367
- this.waybillNo = '';
368
- this.waybillDocEntry = null;
369
- this.waybillIrsaliyeNo = '';
370
- this.waybillAutoPlate = '';
371
- this.waybillAutoDorsePlate = '';
372
- this.waybillAutoTcNo = '';
373
- this.waybillAutoDriverFirstname = '';
374
- this.waybillAutoDriverLastname = '';
375
- this.waybillAutoDriverName = '';
376
- this.waybillAutoCardCode = '';
377
- this.waybillSourceType = null;
378
- return;
379
- }
380
- // Lookup'ta u_EFATNO gösterilir (displayName: 'u_EFATNO')
381
- this.waybillNo = e.u_EFATNO?.toString() ?? e.docNum?.toString() ?? '';
382
- this.waybillDocEntry = e.docEntry ?? null;
383
- // Kaynak tipi: StockTransfer'da 'fromWarehouse' alanı vardır, PurchaseDeliveryNote'da yoktur
384
- const isStockTransfer = 'fromWarehouse' in e;
385
- this.waybillSourceType = isStockTransfer ? 'stockTransfer' : 'purchaseDelivery';
386
- if (!e.docEntry)
387
- return;
388
- this.isWaybillLoading = true;
389
- const onNext = (doc) => this.applyWaybillAutoFill(doc);
390
- const onError = () => { this.isWaybillLoading = false; };
391
- if (isStockTransfer) {
392
- this.stockTransferService.get(e.docEntry).subscribe({ next: onNext, error: onError });
393
- }
394
- else {
395
- this.purchaseDeliveryNoteService.get(e.docEntry).subscribe({ next: onNext, error: onError });
396
- }
397
- }
398
- applyWaybillAutoFill(doc) {
399
- this.isWaybillLoading = false;
400
- if (!doc)
401
- return;
402
- // İrsaliye numarası (u_EFATNO) — DTO'da u_DespatchAdviceNo olarak gönderilecek
403
- this.waybillIrsaliyeNo = doc.u_EFATNO?.trim() ?? '';
404
- // Araç plakası
405
- this.waybillAutoPlate = doc.u_AracPlakasi?.trim() ?? '';
406
- // Dorse plaka
407
- this.waybillAutoDorsePlate = doc.u_DorsePlakalar?.trim() ?? '';
408
- // Sürücü TC kimlik no
409
- this.waybillAutoTcNo = doc.u_SoforKimlik?.trim() ?? '';
410
- // Cari kodu
411
- this.waybillAutoCardCode = doc.cardCode?.trim() ?? '';
412
- // Sürücü adı soyadı (ayrı ve birleşik)
413
- const ad = doc.u_SoforAd?.trim() ?? '';
414
- const soyad = doc.u_SoforSoyadi?.trim() ?? '';
415
- this.waybillAutoDriverFirstname = ad;
416
- this.waybillAutoDriverLastname = soyad;
417
- this.waybillAutoDriverName = [ad, soyad].filter(Boolean).join(' ');
418
- // TCKN algoritmasına göre TC vatandaşı mı belirle
419
- this.isTcCitizen = this.validateTCKN(this.waybillAutoTcNo);
420
- }
421
241
  queryCarrierByTcNo() {
422
242
  const tc = this.tcNo?.trim();
423
243
  if (!tc) {
@@ -461,7 +281,7 @@ export class HitFactoryEntryFormComponent {
461
281
  const effectiveTrailerPlateNo = this.formatPlate(this.trailerPlateInputMode === 'manual'
462
282
  ? this.manualTrailerPlateNo.trim().toUpperCase()
463
283
  : this.selectedTrailerPlateNo);
464
- if (!this.selectedTypeCode || (!this.isGoodsType && (!effectivePlateNo || !this.tcNo?.trim()))) {
284
+ if (!this.selectedTypeCode || !effectivePlateNo || !this.tcNo?.trim()) {
465
285
  this.confirmation.warn(this.localizationService.instant('Kadooglu::FillRequiredFields'), '', {
466
286
  hideYesBtn: true,
467
287
  cancelText: this.localizationService.instant('Kadooglu::Cancel'),
@@ -469,15 +289,7 @@ export class HitFactoryEntryFormComponent {
469
289
  });
470
290
  return;
471
291
  }
472
- if (this.isGoodsType && !this.waybillNo?.trim()) {
473
- this.confirmation.warn(this.localizationService.instant('Kadooglu::WaybillRequired'), '', {
474
- hideYesBtn: true,
475
- cancelText: this.localizationService.instant('Kadooglu::Cancel'),
476
- dismissible: false,
477
- });
478
- return;
479
- }
480
- if (!this.isGoodsType && this.isTcCitizen && !this.validateTCKN(this.tcNo)) {
292
+ if (this.isTcCitizen && !this.validateTCKN(this.tcNo)) {
481
293
  this.confirmation.warn('Geçersiz T.C. Kimlik No. Lütfen 11 haneli, geçerli bir TCKN giriniz.', '', {
482
294
  hideYesBtn: true,
483
295
  cancelText: this.localizationService.instant('Kadooglu::Cancel'),
@@ -485,7 +297,7 @@ export class HitFactoryEntryFormComponent {
485
297
  });
486
298
  return;
487
299
  }
488
- if (!this.isGoodsType && this.isNewCarrier && (!this.newCarrierFirstname?.trim() || !this.newCarrierLastname?.trim())) {
300
+ if (this.isNewCarrier && (!this.newCarrierFirstname?.trim() || !this.newCarrierLastname?.trim())) {
489
301
  this.confirmation.warn(this.localizationService.instant('Kadooglu::EnterNewDriverName'), '', {
490
302
  hideYesBtn: true,
491
303
  cancelText: this.localizationService.instant('Kadooglu::Cancel'),
@@ -510,25 +322,17 @@ export class HitFactoryEntryFormComponent {
510
322
  u_EntryType: this.selectedTypeCode,
511
323
  u_Description: this.description,
512
324
  u_TcVtndsiMi: this.isTcCitizen ? 'Y' : 'N',
513
- };
514
- if (this.isGoodsType) {
515
- // Mal GÇ = Y: Sadece irsaliye referansı gönder, backend SAP'tan doğrulayarak dolduracak
516
- dto.u_WaybillDocEntry = this.waybillDocEntry ?? undefined;
517
- dto.u_WaybillSourceType = this.waybillSourceType ?? undefined;
518
- }
519
- else {
520
- // Mal GÇ = N: Araç ve sürücü bilgilerini frontend'den gönder
521
- dto.u_Plate = effectivePlateNo;
522
- dto.u_DorsePlate = effectiveTrailerPlateNo || undefined;
523
- dto.u_TcNo = this.tcNo.trim();
524
- dto.u_Driver = this.isNewCarrier
325
+ u_Plate: effectivePlateNo,
326
+ u_DorsePlate: effectiveTrailerPlateNo || undefined,
327
+ u_TcNo: this.tcNo.trim(),
328
+ u_Driver: this.isNewCarrier
525
329
  ? `${this.newCarrierFirstname.trim()} ${this.newCarrierLastname.trim()}`
526
- : undefined;
527
- dto.u_DriverFirstname = this.isNewCarrier ? this.newCarrierFirstname.trim() : undefined;
528
- dto.u_DriverLastname = this.isNewCarrier ? this.newCarrierLastname.trim() : undefined;
529
- dto.u_DriverTel = this.isNewCarrier ? (this.newCarrierTel.trim() || undefined) : undefined;
530
- dto.u_CardCode = this.selectedBusinessPartnerCode;
531
- }
330
+ : undefined,
331
+ u_DriverFirstname: this.isNewCarrier ? this.newCarrierFirstname.trim() : undefined,
332
+ u_DriverLastname: this.isNewCarrier ? this.newCarrierLastname.trim() : undefined,
333
+ u_DriverTel: this.isNewCarrier ? (this.newCarrierTel.trim() || undefined) : undefined,
334
+ u_CardCode: this.selectedBusinessPartnerCode,
335
+ };
532
336
  const doSave = () => {
533
337
  const obs$ = this.record?.docEntry
534
338
  ? this.service.update(this.record.docEntry.toString(), dto)
@@ -603,12 +407,12 @@ export class HitFactoryEntryFormComponent {
603
407
  return d11 === d[10];
604
408
  }
605
409
  }
606
- HitFactoryEntryFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFactoryEntryFormComponent, deps: [{ token: i1.ConfirmationService }, { token: i2.HitFactoryEntryService }, { token: i3.HitCarrierPersonService }, { token: i4.HitPlateService }, { token: i5.HitVehicleTypeService }, { token: i6.HitBusinessPartnerService }, { token: i7.HitUserGateService }, { token: i8.LocalizationService }, { token: i9.HitStockTransferService }, { token: i10.HitPurchaseDeliveryNoteService }], target: i0.ɵɵFactoryTarget.Component });
607
- HitFactoryEntryFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitFactoryEntryFormComponent, selector: "lib-hit-factory-entry-form", inputs: { visible: "visible", record: "record" }, outputs: { visibleChange: "visibleChange", saved: "saved", cancelled: "cancelled" }, usesOnChanges: true, ngImport: i0, template: "<abp-modal [visible]=\"visible\" (visibleChange)=\"onModalVisibleChange($event)\" [options]=\"{ size: 'lg', backdrop: 'static' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ record?.docEntry ? ('AbpUi::Edit' | abpLocalization) : ('Kadooglu::NewRecord' | abpLocalization) }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n\r\n <!-- Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-clock me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDateTime' | 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 width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDateTime' | 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 [showClearButton]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Gate' | abpLocalization }}</label>\r\n <dx-select-box\r\n [(value)]=\"gateCode\"\r\n [dataSource]=\"gateData\"\r\n displayExpr=\"name\"\r\n valueExpr=\"code\"\r\n [placeholder]=\"'Kadooglu::SelectGate' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleInfo' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n Ara\u00E7 Hareket T\u00FCr\u00FC <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"typeData\"\r\n [columns]=\"typeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedTypeName\"\r\n (selected)=\"onTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Mal G\u00C7 = Y: SSMG / Stok Nakli se\u00E7imi -->\r\n <div class=\"mb-3\" *ngIf=\"selectedTypeCode && isGoodsType\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::WaybillNumber' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [tabs]=\"waybillTabs\"\r\n [editingData]=\"waybillNo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <div class=\"mb-3\" *ngIf=\"showExtraFields\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Plate' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-container *ngIf=\"plateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehiclePlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedPlateNo\"\r\n (selected)=\"onPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"plateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"mb-3\" *ngIf=\"showExtraFields\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DorsePlate' | abpLocalization }}\r\n </label>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedTrailerPlateNo\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualTrailerPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualTrailerPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00FCr\u00FCc\u00FC & Firma -->\r\n <div class=\"border rounded p-3 mb-2\" *ngIf=\"showExtraFields\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-id-card me-2\"></i>{{ 'Kadooglu::DriverAndCompany' | abpLocalization }}\r\n </div>\r\n\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 mb-0 small fw-semibold text-muted\">\r\n {{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [disabled]=\"!!record\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <ng-container *ngIf=\"!tcLookupMode\">\r\n <div class=\"d-flex gap-2\">\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm text-nowrap\"\r\n [disabled]=\"isTcQuerying\"\r\n (click)=\"queryCarrierByTcNo()\">\r\n <i class=\"fa fa-search me-1\"></i>\r\n {{ (isTcQuerying ? 'Kadooglu::Querying' : 'Kadooglu::Query') | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = true\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"tcLookupMode\">\r\n <hit-lookup-select\r\n [getFn]=\"carrierData\"\r\n [columns]=\"carrierColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedCarrierName\"\r\n (selected)=\"onCarrierLookupSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = false\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::QueryByTc' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Mevcut s\u00FCr\u00FCc\u00FC: sadece ad\u0131 g\u00F6ster (readonly) -->\r\n <ng-container *ngIf=\"!isNewCarrier\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DriverNameSurname' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"selectedCarrierName\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Yeni s\u00FCr\u00FCc\u00FC: Ad, Soyad, Telefon alanlar\u0131n\u0131 g\u00F6ster -->\r\n <ng-container *ngIf=\"isNewCarrier\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::FirstName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierFirstname\"\r\n [placeholder]=\"'Kadooglu::FirstName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::LastName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierLastname\"\r\n [placeholder]=\"'Kadooglu::LastName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Phone' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierTel\"\r\n [placeholder]=\"'Kadooglu::Phone' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"alert alert-info small py-1 mb-3\">\r\n <i class=\"fa fa-info-circle me-1\"></i>\r\n {{ 'Kadooglu::NewDriverAlert' | abpLocalization }}\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::BusinessPartner' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"businessPartnerData\"\r\n [columns]=\"businessPartnerColumns\"\r\n displayName=\"cardName\"\r\n keyExpr=\"cardCode\"\r\n [editingData]=\"selectedBusinessPartnerName\"\r\n (selected)=\"onBusinessPartnerSelected($event)\">\r\n </hit-lookup-select>\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 mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"80\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isLoading || isWaybillLoading\"\r\n (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i1.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "component", type: i12.HitModalComponent, selector: "hit-lookup-select", inputs: ["displayName", "keyExpr", "modalSize", "getFn", "loadFn", "columns", "isVisible", "disabled", "readOnly", "showDateFilter", "defaultDateFrom", "defaultDateTo", "tabs", "editingData"], outputs: ["selected"] }, { kind: "component", type: i13.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: i13.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i13.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: i13.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: i13.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: i8.LocalizationPipe, name: "abpLocalization" }] });
410
+ HitFactoryEntryFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFactoryEntryFormComponent, deps: [{ token: i1.ConfirmationService }, { token: i2.HitFactoryEntryService }, { token: i3.HitCarrierPersonService }, { token: i4.HitPlateService }, { token: i5.HitVehicleTypeService }, { token: i6.HitBusinessPartnerService }, { token: i7.HitUserGateService }, { token: i8.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
411
+ HitFactoryEntryFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitFactoryEntryFormComponent, selector: "lib-hit-factory-entry-form", inputs: { visible: "visible", record: "record" }, outputs: { visibleChange: "visibleChange", saved: "saved", cancelled: "cancelled" }, usesOnChanges: true, ngImport: i0, template: "<abp-modal [visible]=\"visible\" (visibleChange)=\"onModalVisibleChange($event)\" [options]=\"{ size: 'xl', backdrop: 'static' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ record?.docEntry ? ('AbpUi::Edit' | abpLocalization) : ('Kadooglu::NewRecord' | abpLocalization) }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n\r\n <!-- Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-clock me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDateTime' | 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 width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDateTime' | 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 [showClearButton]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Gate' | abpLocalization }}</label>\r\n <dx-select-box\r\n [(value)]=\"gateCode\"\r\n [dataSource]=\"gateData\"\r\n displayExpr=\"name\"\r\n valueExpr=\"code\"\r\n [placeholder]=\"'Kadooglu::SelectGate' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Bilgileri + S\u00FCr\u00FCc\u00FC & Firma Row -->\r\n <div class=\"row g-2\">\r\n\r\n <!-- Sol kolon: Ara\u00E7 Bilgileri -->\r\n <div class=\"col-6\">\r\n <div class=\"border rounded p-3 mb-2 h-100\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleInfo' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n Ara\u00E7 Hareket T\u00FCr\u00FC <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"typeData\"\r\n [columns]=\"typeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedTypeName\"\r\n (selected)=\"onTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Plate' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-container *ngIf=\"plateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehiclePlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedPlateNo\"\r\n (selected)=\"onPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"plateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DorsePlate' | abpLocalization }}\r\n </label>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedTrailerPlateNo\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualTrailerPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualTrailerPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sa\u011F kolon: S\u00FCr\u00FCc\u00FC & Firma -->\r\n <div class=\"col-6\">\r\n <div class=\"border rounded p-3 mb-2 h-100\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-id-card me-2\"></i>{{ 'Kadooglu::DriverAndCompany' | abpLocalization }}\r\n </div>\r\n\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 mb-0 small fw-semibold text-muted\">\r\n {{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [disabled]=\"!!record\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <ng-container *ngIf=\"!tcLookupMode\">\r\n <div class=\"d-flex gap-2\">\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm text-nowrap\"\r\n [disabled]=\"isTcQuerying\"\r\n (click)=\"queryCarrierByTcNo()\">\r\n <i class=\"fa fa-search me-1\"></i>\r\n {{ (isTcQuerying ? 'Kadooglu::Querying' : 'Kadooglu::Query') | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = true\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"tcLookupMode\">\r\n <hit-lookup-select\r\n [getFn]=\"carrierData\"\r\n [columns]=\"carrierColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedCarrierName\"\r\n (selected)=\"onCarrierLookupSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = false\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::QueryByTc' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Mevcut s\u00FCr\u00FCc\u00FC: sadece ad\u0131 g\u00F6ster (readonly) -->\r\n <ng-container *ngIf=\"!isNewCarrier\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DriverNameSurname' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"selectedCarrierName\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Yeni s\u00FCr\u00FCc\u00FC: Ad, Soyad, Telefon alanlar\u0131n\u0131 g\u00F6ster -->\r\n <ng-container *ngIf=\"isNewCarrier\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::FirstName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierFirstname\"\r\n [placeholder]=\"'Kadooglu::FirstName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::LastName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierLastname\"\r\n [placeholder]=\"'Kadooglu::LastName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Phone' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierTel\"\r\n [placeholder]=\"'Kadooglu::Phone' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"alert alert-info small py-1 mb-3\">\r\n <i class=\"fa fa-info-circle me-1\"></i>\r\n {{ 'Kadooglu::NewDriverAlert' | abpLocalization }}\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::BusinessPartner' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"businessPartnerData\"\r\n [columns]=\"businessPartnerColumns\"\r\n displayName=\"cardName\"\r\n keyExpr=\"cardCode\"\r\n [editingData]=\"selectedBusinessPartnerName\"\r\n (selected)=\"onBusinessPartnerSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n </div>\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 mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"80\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isLoading\"\r\n (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i1.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "component", type: i10.HitModalComponent, selector: "hit-lookup-select", inputs: ["displayName", "keyExpr", "modalSize", "getFn", "loadFn", "columns", "isVisible", "disabled", "readOnly", "showDateFilter", "defaultDateFrom", "defaultDateTo", "tabs", "editingData"], outputs: ["selected"] }, { kind: "component", type: i11.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: i11.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i11.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: i11.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: i11.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: i8.LocalizationPipe, name: "abpLocalization" }] });
608
412
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFactoryEntryFormComponent, decorators: [{
609
413
  type: Component,
610
- args: [{ selector: 'lib-hit-factory-entry-form', template: "<abp-modal [visible]=\"visible\" (visibleChange)=\"onModalVisibleChange($event)\" [options]=\"{ size: 'lg', backdrop: 'static' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ record?.docEntry ? ('AbpUi::Edit' | abpLocalization) : ('Kadooglu::NewRecord' | abpLocalization) }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n\r\n <!-- Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-clock me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDateTime' | 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 width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDateTime' | 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 [showClearButton]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Gate' | abpLocalization }}</label>\r\n <dx-select-box\r\n [(value)]=\"gateCode\"\r\n [dataSource]=\"gateData\"\r\n displayExpr=\"name\"\r\n valueExpr=\"code\"\r\n [placeholder]=\"'Kadooglu::SelectGate' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleInfo' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n Ara\u00E7 Hareket T\u00FCr\u00FC <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"typeData\"\r\n [columns]=\"typeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedTypeName\"\r\n (selected)=\"onTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Mal G\u00C7 = Y: SSMG / Stok Nakli se\u00E7imi -->\r\n <div class=\"mb-3\" *ngIf=\"selectedTypeCode && isGoodsType\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::WaybillNumber' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [tabs]=\"waybillTabs\"\r\n [editingData]=\"waybillNo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <div class=\"mb-3\" *ngIf=\"showExtraFields\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Plate' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-container *ngIf=\"plateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehiclePlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedPlateNo\"\r\n (selected)=\"onPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"plateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"mb-3\" *ngIf=\"showExtraFields\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DorsePlate' | abpLocalization }}\r\n </label>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedTrailerPlateNo\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualTrailerPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualTrailerPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00FCr\u00FCc\u00FC & Firma -->\r\n <div class=\"border rounded p-3 mb-2\" *ngIf=\"showExtraFields\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-id-card me-2\"></i>{{ 'Kadooglu::DriverAndCompany' | abpLocalization }}\r\n </div>\r\n\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 mb-0 small fw-semibold text-muted\">\r\n {{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [disabled]=\"!!record\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <ng-container *ngIf=\"!tcLookupMode\">\r\n <div class=\"d-flex gap-2\">\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm text-nowrap\"\r\n [disabled]=\"isTcQuerying\"\r\n (click)=\"queryCarrierByTcNo()\">\r\n <i class=\"fa fa-search me-1\"></i>\r\n {{ (isTcQuerying ? 'Kadooglu::Querying' : 'Kadooglu::Query') | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = true\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"tcLookupMode\">\r\n <hit-lookup-select\r\n [getFn]=\"carrierData\"\r\n [columns]=\"carrierColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedCarrierName\"\r\n (selected)=\"onCarrierLookupSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = false\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::QueryByTc' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Mevcut s\u00FCr\u00FCc\u00FC: sadece ad\u0131 g\u00F6ster (readonly) -->\r\n <ng-container *ngIf=\"!isNewCarrier\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DriverNameSurname' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"selectedCarrierName\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Yeni s\u00FCr\u00FCc\u00FC: Ad, Soyad, Telefon alanlar\u0131n\u0131 g\u00F6ster -->\r\n <ng-container *ngIf=\"isNewCarrier\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::FirstName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierFirstname\"\r\n [placeholder]=\"'Kadooglu::FirstName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::LastName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierLastname\"\r\n [placeholder]=\"'Kadooglu::LastName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Phone' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierTel\"\r\n [placeholder]=\"'Kadooglu::Phone' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"alert alert-info small py-1 mb-3\">\r\n <i class=\"fa fa-info-circle me-1\"></i>\r\n {{ 'Kadooglu::NewDriverAlert' | abpLocalization }}\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::BusinessPartner' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"businessPartnerData\"\r\n [columns]=\"businessPartnerColumns\"\r\n displayName=\"cardName\"\r\n keyExpr=\"cardCode\"\r\n [editingData]=\"selectedBusinessPartnerName\"\r\n (selected)=\"onBusinessPartnerSelected($event)\">\r\n </hit-lookup-select>\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 mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"80\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isLoading || isWaybillLoading\"\r\n (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
611
- }], ctorParameters: function () { return [{ type: i1.ConfirmationService }, { type: i2.HitFactoryEntryService }, { type: i3.HitCarrierPersonService }, { type: i4.HitPlateService }, { type: i5.HitVehicleTypeService }, { type: i6.HitBusinessPartnerService }, { type: i7.HitUserGateService }, { type: i8.LocalizationService }, { type: i9.HitStockTransferService }, { type: i10.HitPurchaseDeliveryNoteService }]; }, propDecorators: { visible: [{
414
+ args: [{ selector: 'lib-hit-factory-entry-form', template: "<abp-modal [visible]=\"visible\" (visibleChange)=\"onModalVisibleChange($event)\" [options]=\"{ size: 'xl', backdrop: 'static' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ record?.docEntry ? ('AbpUi::Edit' | abpLocalization) : ('Kadooglu::NewRecord' | abpLocalization) }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n\r\n <!-- Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-clock me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDateTime' | 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 width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDateTime' | 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 [showClearButton]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Gate' | abpLocalization }}</label>\r\n <dx-select-box\r\n [(value)]=\"gateCode\"\r\n [dataSource]=\"gateData\"\r\n displayExpr=\"name\"\r\n valueExpr=\"code\"\r\n [placeholder]=\"'Kadooglu::SelectGate' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Bilgileri + S\u00FCr\u00FCc\u00FC & Firma Row -->\r\n <div class=\"row g-2\">\r\n\r\n <!-- Sol kolon: Ara\u00E7 Bilgileri -->\r\n <div class=\"col-6\">\r\n <div class=\"border rounded p-3 mb-2 h-100\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleInfo' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n Ara\u00E7 Hareket T\u00FCr\u00FC <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"typeData\"\r\n [columns]=\"typeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedTypeName\"\r\n (selected)=\"onTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Plate' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-container *ngIf=\"plateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehiclePlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedPlateNo\"\r\n (selected)=\"onPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"plateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DorsePlate' | abpLocalization }}\r\n </label>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedTrailerPlateNo\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualTrailerPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualTrailerPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sa\u011F kolon: S\u00FCr\u00FCc\u00FC & Firma -->\r\n <div class=\"col-6\">\r\n <div class=\"border rounded p-3 mb-2 h-100\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-id-card me-2\"></i>{{ 'Kadooglu::DriverAndCompany' | abpLocalization }}\r\n </div>\r\n\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 mb-0 small fw-semibold text-muted\">\r\n {{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [disabled]=\"!!record\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <ng-container *ngIf=\"!tcLookupMode\">\r\n <div class=\"d-flex gap-2\">\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm text-nowrap\"\r\n [disabled]=\"isTcQuerying\"\r\n (click)=\"queryCarrierByTcNo()\">\r\n <i class=\"fa fa-search me-1\"></i>\r\n {{ (isTcQuerying ? 'Kadooglu::Querying' : 'Kadooglu::Query') | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = true\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"tcLookupMode\">\r\n <hit-lookup-select\r\n [getFn]=\"carrierData\"\r\n [columns]=\"carrierColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedCarrierName\"\r\n (selected)=\"onCarrierLookupSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = false\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::QueryByTc' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Mevcut s\u00FCr\u00FCc\u00FC: sadece ad\u0131 g\u00F6ster (readonly) -->\r\n <ng-container *ngIf=\"!isNewCarrier\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DriverNameSurname' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"selectedCarrierName\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Yeni s\u00FCr\u00FCc\u00FC: Ad, Soyad, Telefon alanlar\u0131n\u0131 g\u00F6ster -->\r\n <ng-container *ngIf=\"isNewCarrier\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::FirstName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierFirstname\"\r\n [placeholder]=\"'Kadooglu::FirstName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::LastName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierLastname\"\r\n [placeholder]=\"'Kadooglu::LastName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Phone' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierTel\"\r\n [placeholder]=\"'Kadooglu::Phone' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"alert alert-info small py-1 mb-3\">\r\n <i class=\"fa fa-info-circle me-1\"></i>\r\n {{ 'Kadooglu::NewDriverAlert' | abpLocalization }}\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::BusinessPartner' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"businessPartnerData\"\r\n [columns]=\"businessPartnerColumns\"\r\n displayName=\"cardName\"\r\n keyExpr=\"cardCode\"\r\n [editingData]=\"selectedBusinessPartnerName\"\r\n (selected)=\"onBusinessPartnerSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n </div>\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 mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"80\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isLoading\"\r\n (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
415
+ }], ctorParameters: function () { return [{ type: i1.ConfirmationService }, { type: i2.HitFactoryEntryService }, { type: i3.HitCarrierPersonService }, { type: i4.HitPlateService }, { type: i5.HitVehicleTypeService }, { type: i6.HitBusinessPartnerService }, { type: i7.HitUserGateService }, { type: i8.LocalizationService }]; }, propDecorators: { visible: [{
612
416
  type: Input
613
417
  }], visibleChange: [{
614
418
  type: Output
@@ -619,4 +423,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
619
423
  }], cancelled: [{
620
424
  type: Output
621
425
  }] } });
622
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFldkcsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFTbkMsTUFBTSxPQUFPLDRCQUE0QjtJQTZGckMsWUFDWSxZQUFpQyxFQUNqQyxPQUErQixFQUMvQixvQkFBNkMsRUFDN0MsWUFBNkIsRUFDN0Isa0JBQXlDLEVBQ3pDLHNCQUFpRCxFQUNqRCxlQUFtQyxFQUNuQyxtQkFBd0MsRUFDeEMsb0JBQTZDLEVBQzdDLDJCQUEyRDtRQVQzRCxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7UUFDL0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtRQUM3QyxpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFDN0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QjtRQUN6QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQTJCO1FBQ2pELG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQUNuQyx3QkFBbUIsR0FB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LDRCQUE0QjtzYkFJN0IsT0FBTztzQkFBZixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0UsTUFBTTtzQkFBZCxLQUFLO2dCQUNJLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcclxuaW1wb3J0IHtMb2NhbGl6YXRpb25TZXJ2aWNlfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQge0hpdEZhY3RvcnlFbnRyeVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtZmFjdG9yeS1lbnRyeS9oaXQtZmFjdG9yeS1lbnRyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHtIaXRWZWhpY2xlVHlwZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtdmVoaWNsZS10eXBlL2hpdC12ZWhpY2xlLXR5cGUuc2VydmljZSc7XHJcbmltcG9ydCB7VmVoaWNsZVR5cGV9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtdmVoaWNsZS10eXBlL21vZGVscyc7XHJcbmltcG9ydCB7UGxhdGV9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtcGxhdGUvbW9kZWxzJztcclxuaW1wb3J0IHtDYXJyaWVyUGVyc29ufSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWNhcnJpZXItcGVyc29uL21vZGVscyc7XHJcbmltcG9ydCB7SGl0Q2FycmllclBlcnNvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtY2Fycmllci1wZXJzb24vaGl0LWNhcnJpZXItcGVyc29uLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hpdFBsYXRlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1wbGF0ZS9oaXQtcGxhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7RmFjdG9yeUVudHJ5LCBTYXZlRmFjdG9yeUVudHJ5RHRvfSBmcm9tIFwiLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1mYWN0b3J5LWVudHJ5L21vZGVsc1wiO1xyXG5pbXBvcnQge0hpdEJ1c2luZXNzUGFydG5lclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtYnVzaW5lc3MtcGFydG5lci9oaXQtYnVzaW5lc3MtcGFydG5lci5zZXJ2aWNlJztcclxuaW1wb3J0IHtCdXNpbmVzc1BhcnRuZXJ9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtYnVzaW5lc3MtcGFydG5lci9tb2RlbHMnO1xyXG5pbXBvcnQge0hpdFVzZXJHYXRlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC11c2VyLWdhdGUvaGl0LXVzZXItZ2F0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtHYXRlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWdhdGUvbW9kZWxzJztcclxuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtIaXRTdG9ja1RyYW5zZmVyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1zdG9jay10cmFuc2Zlci9oaXQtc3RvY2stdHJhbnNmZXIuc2VydmljZSc7XHJcbmltcG9ydCB7SGl0UHVyY2hhc2VEZWxpdmVyeU5vdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXB1cmNoYXNlLWRlbGl2ZXJ5LW5vdGUvaGl0LXB1cmNoYXNlLWRlbGl2ZXJ5LW5vdGUuc2VydmljZSc7XHJcbmltcG9ydCB7TG9va3VwVGFifSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaGl0LW1vZGFsL2hpdC1tb2RhbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1oaXQtZmFjdG9yeS1lbnRyeS1mb3JtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9oaXQtZmFjdG9yeS1lbnRyeS1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhpdEZhY3RvcnlFbnRyeUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgICBASW5wdXQoKSB2aXNpYmxlID0gZmFsc2U7XHJcbiAgICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAgIEBJbnB1dCgpIHJlY29yZDogRmFjdG9yeUVudHJ5IHwgbnVsbCA9IG51bGw7XHJcbiAgICBAT3V0cHV0KCkgc2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8vIExvb2t1cCBkYXRhIGFycmF5cyBmb3IgbW9kYWxzXHJcbiAgICB0eXBlRGF0YTogVmVoaWNsZVR5cGVbXSA9IFtdO1xyXG4gICAgY2FycmllckRhdGE6IENhcnJpZXJQZXJzb25bXSA9IFtdO1xyXG5cclxuICAgIC8vIExhenkgbG9hZGVycyBmb3IgcGxhdGUgbG9va3VwcyDigJQgZmlsdGVyZWQgYnkgdV9Jc1RyYWlsZXJcclxuICAgIGxvYWRWZWhpY2xlUGxhdGVzID0gKCkgPT4gdGhpcy5wbGF0ZVNlcnZpY2UuZ2V0TGlzdCgpLnBpcGUoXHJcbiAgICAgICAgbWFwKHBsYXRlcyA9PiBwbGF0ZXMuZmlsdGVyKHAgPT4gcC51X0lzVHJhaWxlciAhPT0gJ1knKSlcclxuICAgICk7XHJcbiAgICBsb2FkVHJhaWxlclBsYXRlcyA9ICgpID0+IHRoaXMucGxhdGVTZXJ2aWNlLmdldExpc3QoKS5waXBlKFxyXG4gICAgICAgIG1hcChwbGF0ZXMgPT4gcGxhdGVzLmZpbHRlcihwID0+IHAudV9Jc1RyYWlsZXIgPT09ICdZJykpXHJcbiAgICApO1xyXG4gICAgZ2F0ZURhdGE6IEdhdGVbXSA9IFtdO1xyXG4gICAgZGVmYXVsdEdhdGVDb2RlID0gJyc7XHJcblxyXG4gICAgLy8gQ29sdW1uIGNvbmZpZ3MgZm9yIGxvb2t1cCBtb2RhbHNcclxuICAgIHR5cGVDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiAxMDB9LFxyXG4gICAgICAgIHtkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogJ0FkJ30sXHJcbiAgICBdO1xyXG4gICAgcGxhdGVDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ1BsYWthJywgd2lkdGg6IDEwMH0sXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnTmFtZSd9LFxyXG4gICAgXTtcclxuICAgIGNhcnJpZXJDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ1QuQy4gS2ltbGlrIE5vJywgd2lkdGg6IDE0MH0sXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnQWQgU295YWQnfSxcclxuICAgIF07XHJcbiAgICBidXNpbmVzc1BhcnRuZXJDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjYXJkQ29kZScsIGNhcHRpb246ICdDYXJpIEtvZCcsIHdpZHRoOiAxMjB9LFxyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjYXJkTmFtZScsIGNhcHRpb246ICdDYXJpIFVudmFuJ30sXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIEZvcm0gZmllbGRzXHJcbiAgICBnYXRlQ29kZSA9ICcnO1xyXG4gICAgZW50cnlEYXRlVGltZTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgZXhpdERhdGVUaW1lOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBzZWxlY3RlZFR5cGVDb2RlID0gJyc7XHJcbiAgICBzZWxlY3RlZFR5cGVOYW1lID0gJyc7XHJcbiAgICBzZWxlY3RlZFR5cGU6IFZlaGljbGVUeXBlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBzZWxlY3RlZFBsYXRlTm8gPSAnJztcclxuICAgIHRjTm8gPSAnJztcclxuICAgIHNlbGVjdGVkQ2Fycmllck5hbWUgPSAnJztcclxuICAgIGJ1c2luZXNzUGFydG5lckRhdGE6IEJ1c2luZXNzUGFydG5lcltdID0gW107XHJcbiAgICBzZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUgPSAnJztcclxuICAgIHNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZSA9ICcnO1xyXG4gICAgZGVzY3JpcHRpb24gPSAnJztcclxuXHJcbiAgICAvLyBQbGF0ZSBpbnB1dCBtb2RlXHJcbiAgICBwbGF0ZUlucHV0TW9kZTogJ2xvb2t1cCcgfCAnbWFudWFsJyA9ICdsb29rdXAnO1xyXG4gICAgbWFudWFsUGxhdGVObyA9ICcnO1xyXG5cclxuICAgIC8vIFRyYWlsZXIgcGxhdGVcclxuICAgIHRyYWlsZXJQbGF0ZUlucHV0TW9kZTogJ2xvb2t1cCcgfCAnbWFudWFsJyA9ICdsb29rdXAnO1xyXG4gICAgc2VsZWN0ZWRUcmFpbGVyUGxhdGVObyA9ICcnO1xyXG4gICAgbWFudWFsVHJhaWxlclBsYXRlTm8gPSAnJztcclxuXHJcbiAgICAvLyBDYXJyaWVyIFRDIG1vZGVcclxuICAgIHRjTG9va3VwTW9kZSA9IGZhbHNlO1xyXG4gICAgaXNUY1F1ZXJ5aW5nID0gZmFsc2U7XHJcbiAgICBpc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBOZXcgY2FycmllciBmaWVsZHNcclxuICAgIG5ld0NhcnJpZXJGaXJzdG5hbWUgPSAnJztcclxuICAgIG5ld0NhcnJpZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgbmV3Q2FycmllclRlbCA9ICcnO1xyXG5cclxuICAgIGlzVGNDaXRpemVuID0gdHJ1ZTtcclxuICAgIGlzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFdheWJpbGwgKFNTTUcgLyBTdG9rIE5ha2xpKSDigJQgeWFsbsSxemNhIE1hbCBHw4cgPSBZIG9sYW4gaGFyZWtldCB0aXBsZXJpbmRlIGfDtnN0ZXJpbGlyXHJcbiAgICB3YXliaWxsVGFiczogTG9va3VwVGFiW10gPSBbXTtcclxuICAgIHdheWJpbGxObyA9ICcnO1xyXG4gICAgd2F5YmlsbERvY0VudHJ5OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvLyBXYXliaWxsIHNlw6dpbWkgc29ucmFzxLEgYmFja2VuZCdkZW4gb3RvbWF0aWsgZG9sZHVydWxhbiBnaXpsaSBhbGFubGFyXHJcbiAgICB3YXliaWxsSXJzYWxpeWVObyA9ICcnOyAgICAgICAgICAgICAgLy8gdV9FRkFUTk8gIOKGkiB1X0Rlc3BhdGNoQWR2aWNlTm9cclxuICAgIHdheWJpbGxBdXRvUGxhdGUgPSAnJzsgICAgICAgICAgICAgICAvLyB1X0FyYWNQbGFrYXNpXHJcbiAgICB3YXliaWxsQXV0b0RvcnNlUGxhdGUgPSAnJzsgICAgICAgICAgLy8gdV9Eb3JzZVBsYWthbGFyXHJcbiAgICB3YXliaWxsQXV0b1RjTm8gPSAnJzsgICAgICAgICAgICAgICAgLy8gdV9Tb2ZvcktpbWxpa1xyXG4gICAgd2F5YmlsbEF1dG9Ecml2ZXJGaXJzdG5hbWUgPSAnJzsgICAgIC8vIHVfU29mb3JBZFxyXG4gICAgd2F5YmlsbEF1dG9Ecml2ZXJMYXN0bmFtZSA9ICcnOyAgICAgIC8vIHVfU29mb3JTb3lhZGlcclxuICAgIHdheWJpbGxBdXRvRHJpdmVyTmFtZSA9ICcnOyAgICAgICAgICAvLyB1X1NvZm9yQWQgKyB1X1NvZm9yU295YWRpXHJcbiAgICB3YXliaWxsQXV0b0NhcmRDb2RlID0gJyc7ICAgICAgICAgICAgLy8gY2FyZENvZGVcclxuICAgIHdheWJpbGxTb3VyY2VUeXBlOiAnc3RvY2tUcmFuc2ZlcicgfCAncHVyY2hhc2VEZWxpdmVyeScgfCBudWxsID0gbnVsbDtcclxuICAgIGlzV2F5YmlsbExvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHNlcnZpY2U6IEhpdEZhY3RvcnlFbnRyeVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjYXJyaWVyUGVyc29uU2VydmljZTogSGl0Q2FycmllclBlcnNvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwbGF0ZVNlcnZpY2U6IEhpdFBsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHZlaGljbGVUeXBlU2VydmljZTogSGl0VmVoaWNsZVR5cGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYnVzaW5lc3NQYXJ0bmVyU2VydmljZTogSGl0QnVzaW5lc3NQYXJ0bmVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHVzZXJHYXRlU2VydmljZTogSGl0VXNlckdhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHN0b2NrVHJhbnNmZXJTZXJ2aWNlOiBIaXRTdG9ja1RyYW5zZmVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHB1cmNoYXNlRGVsaXZlcnlOb3RlU2VydmljZTogSGl0UHVyY2hhc2VEZWxpdmVyeU5vdGVTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52ZWhpY2xlVHlwZVNlcnZpY2UuZ2V0TGlzdCgpLnN1YnNjcmliZShkID0+IHtcclxuICAgICAgICAgICAgdGhpcy50eXBlRGF0YSA9IGQ7XHJcbiAgICAgICAgICAgIC8vIEZvcm0gZMO8emVubGVtZSBtb2R1bmRhIGHDp8Sxa3NhIHR5cGVEYXRhIHnDvGtsZW5kaWt0ZW4gc29ucmEgc2VsZWN0ZWRUeXBlJ8SxIMOnw7Z6XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlY29yZD8udV9FbnRyeVR5cGUgJiYgIXRoaXMuc2VsZWN0ZWRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGQuZmluZCh0ID0+IHQuY29kZSA9PT0gdGhpcy5yZWNvcmQudV9FbnRyeVR5cGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB0aGlzLnNlbGVjdGVkVHlwZSA9IGZvdW5kO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jYXJyaWVyUGVyc29uU2VydmljZS5nZXRMaXN0KCkuc3Vic2NyaWJlKGQgPT4gKHRoaXMuY2FycmllckRhdGEgPSBkKSk7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1BhcnRuZXJTZXJ2aWNlLmdldExpc3QoKS5zdWJzY3JpYmUoZCA9PiAodGhpcy5idXNpbmVzc1BhcnRuZXJEYXRhID0gZCkpO1xyXG4gICAgICAgIHRoaXMudXNlckdhdGVTZXJ2aWNlLmdldE15R2F0ZXMoKS5zdWJzY3JpYmUoZCA9PiAodGhpcy5nYXRlRGF0YSA9IGQpKTtcclxuICAgICAgICB0aGlzLnVzZXJHYXRlU2VydmljZS5nZXRNeURlZmF1bHRHYXRlQ29kZSgpLnN1YnNjcmliZShkID0+ICh0aGlzLmRlZmF1bHRHYXRlQ29kZSA9IGQgPz8gJycpKTtcclxuXHJcbiAgICAgICAgY29uc3QgbCA9IChrZXk6IHN0cmluZykgPT4gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjonICsga2V5KTtcclxuICAgICAgICBjb25zdCB3YXliaWxsRGF0ZUZyb20gPSAoKCkgPT4geyBjb25zdCBkID0gbmV3IERhdGUoKTsgZC5zZXREYXRlKGQuZ2V0RGF0ZSgpIC0gMyk7IHJldHVybiBkOyB9KSgpO1xyXG4gICAgICAgIGNvbnN0IHdheWJpbGxEYXRlVG8gPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbFRhYnMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBsKCdXYXliaWxsVGFiX1N0b2NrVHJhbnNmZXInKSxcclxuICAgICAgICAgICAgICAgIGxvYWRGbjogKHBhcmFtcz86IGFueSkgPT4gdGhpcy5zdG9ja1RyYW5zZmVyU2VydmljZS5nZXRMaXN0KHBhcmFtcyksXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ3VfRUZBVE5PJyxcclxuICAgICAgICAgICAgICAgIGtleUV4cHI6ICdkb2NFbnRyeScsXHJcbiAgICAgICAgICAgICAgICBzaG93RGF0ZUZpbHRlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHREYXRlRnJvbTogd2F5YmlsbERhdGVGcm9tLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdERhdGVUbzogd2F5YmlsbERhdGVUbyxcclxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAnZG9jTnVtJywgICAgICAgIGNhcHRpb246IGwoJ0RvY3VtZW50Tm8nKSwgICAgd2lkdGg6IDEwMH0sXHJcbiAgICAgICAgICAgICAgICAgICAge2RhdGFGaWVsZDogJ3VfRUZBVE5PJywgICAgICBjYXB0aW9uOiBsKCdXYXliaWxsTm8nKSwgICAgIHdpZHRoOiAxMjB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICdjYXJkQ29kZScsICAgICAgY2FwdGlvbjogbCgnQ2FyZENvZGUnKSwgICAgICB3aWR0aDogMTIwfSxcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAnY2FyZE5hbWUnLCAgICAgIGNhcHRpb246IGwoJ0NhcmROYW1lJyl9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICdmcm9tV2FyZWhvdXNlJywgY2FwdGlvbjogbCgnRXhpdFdhcmVob3VzZScpLCB3aWR0aDogMTQwfSxcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAndV9BcmFjUGxha2FzaScsIGNhcHRpb246IGwoJ1ZlaGljbGVQbGF0ZScpLCAgd2lkdGg6IDExMH0sXHJcbiAgICAgICAgICAgICAgICAgICAge2RhdGFGaWVsZDogJ3VfRG9yc2VQbGFrYWxhcicsIGNhcHRpb246IGwoJ1RyYWlsZXJQbGF0ZScpLCB3aWR0aDogMTEwfSxcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAndV9Tb2ZvckFkJywgICAgIGNhcHRpb246IGwoJ0RyaXZlck5hbWUnKX0sXHJcbiAgICAgICAgICAgICAgICAgICAge2RhdGFGaWVsZDogJ3VfU29mb3JTb3lhZGknLCBjYXB0aW9uOiBsKCdEcml2ZXJTdXJuYW1lJyl9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICd1X1NvZm9yS2ltbGlrJywgY2FwdGlvbjogbCgnVGNJZGVudGl0eU5vJyksIHdpZHRoOiAxMzB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICdjb21tZW50cycsICAgICAgY2FwdGlvbjogbCgnRGVzY3JpcHRpb24nKX0sXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogbCgnV2F5YmlsbFRhYl9QdXJjaGFzZURlbGl2ZXJ5JyksXHJcbiAgICAgICAgICAgICAgICBsb2FkRm46IChwYXJhbXM/OiBhbnkpID0+IHRoaXMucHVyY2hhc2VEZWxpdmVyeU5vdGVTZXJ2aWNlLmdldExpc3QocGFyYW1zKSxcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAndV9FRkFUTk8nLFxyXG4gICAgICAgICAgICAgICAga2V5RXhwcjogJ2RvY0VudHJ5JyxcclxuICAgICAgICAgICAgICAgIHNob3dEYXRlRmlsdGVyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdERhdGVGcm9tOiB3YXliaWxsRGF0ZUZyb20sXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0RGF0ZVRvOiB3YXliaWxsRGF0ZVRvLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICdkb2NOdW0nLCAgICAgICAgY2FwdGlvbjogbCgnRG9jdW1lbnRObycpLCAgICB3aWR0aDogMTAwfSxcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAndV9FRkFUTk8nLCAgICAgIGNhcHRpb246IGwoJ1dheWJpbGxObycpLCAgICAgd2lkdGg6IDEyMH0sXHJcbiAgICAgICAgICAgICAgICAgICAge2RhdGFGaWVsZDogJ2NhcmRDb2RlJywgICAgICBjYXB0aW9uOiBsKCdDYXJkQ29kZScpLCAgICAgIHdpZHRoOiAxMjB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICdjYXJkTmFtZScsICAgICAgY2FwdGlvbjogbCgnQ2FyZE5hbWUnKX0sXHJcbiAgICAgICAgICAgICAgICAgICAge2RhdGFGaWVsZDogJ3VfQXJhY1BsYWthc2knLCBjYXB0aW9uOiBsKCdWZWhpY2xlUGxhdGUnKSwgIHdpZHRoOiAxMTB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICd1X0RvcnNlUGxha2FsYXInLCBjYXB0aW9uOiBsKCdUcmFpbGVyUGxhdGUnKSwgd2lkdGg6IDExMH0sXHJcbiAgICAgICAgICAgICAgICAgICAge2RhdGFGaWVsZDogJ3VfU29mb3JBZCcsICAgICBjYXB0aW9uOiBsKCdEcml2ZXJOYW1lJyl9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICd1X1NvZm9yU295YWRpJywgY2FwdGlvbjogbCgnRHJpdmVyU3VybmFtZScpfSxcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAndV9Tb2ZvcktpbWxpaycsIGNhcHRpb246IGwoJ1RjSWRlbnRpdHlObycpLCB3aWR0aDogMTMwfSxcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAnY29tbWVudHMnLCAgICAgIGNhcHRpb246IGwoJ0Rlc2NyaXB0aW9uJyl9LFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY2hhbmdlc1sndmlzaWJsZSddPy5jdXJyZW50VmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCc7XHJcbiAgICAgICAgdGhpcy5tYW51YWxQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgdGhpcy50cmFpbGVyUGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHJhaWxlclBsYXRlTm8gPSAnJztcclxuICAgICAgICB0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgdGhpcy50Y0xvb2t1cE1vZGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTmV3Q2FycmllciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmV3Q2FycmllckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMubmV3Q2Fycmllckxhc3RuYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy5uZXdDYXJyaWVyVGVsID0gJyc7XHJcblxyXG4gICAgICAgIHRoaXMud2F5YmlsbElyc2FsaXllTm8gPSAnJztcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvUGxhdGUgPSAnJztcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvRG9yc2VQbGF0ZSA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9UY05vID0gJyc7XHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b0NhcmRDb2RlID0gJyc7XHJcbiAgICAgICAgdGhpcy53YXliaWxsU291cmNlVHlwZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlY29yZCkge1xyXG4gICAgICAgICAgICB0aGlzLmdhdGVDb2RlID0gdGhpcy5yZWNvcmQudV9HYXRlQ29kZSA/PyAnJztcclxuICAgICAgICAgICAgdGhpcy5lbnRyeURhdGVUaW1lID0gdGhpcy5idWlsZERhdGVUaW1lKHRoaXMucmVjb3JkLnVfRW50cnlEYXRlLCB0aGlzLnJlY29yZC51X0VudHJ5VGltZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpdERhdGVUaW1lICA9IHRoaXMuYnVpbGREYXRlVGltZSh0aGlzLnJlY29yZC51X0V4aXREYXRlLCAgdGhpcy5yZWNvcmQudV9FeGl0VGltZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlQ29kZSA9IHRoaXMucmVjb3JkLnVfRW50cnlUeXBlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZU5hbWUgPSB0aGlzLnJlY29yZC51X0VudHJ5VHlwZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKHRoaXMucmVjb3JkLnVfUGxhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJhaWxlclBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKHRoaXMucmVjb3JkLnVfRG9yc2VQbGF0ZSA/PyAnJyk7XHJcbiAgICAgICAgICAgIHRoaXMudGNObyA9IHRoaXMucmVjb3JkLnVfVGNObztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENhcnJpZXJOYW1lID0gdGhpcy5yZWNvcmQudV9Ecml2ZXI7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0aGlzLnJlY29yZC51X0Rlc2NyaXB0aW9uO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyQ29kZSA9IHRoaXMucmVjb3JkLnVfQ2FyZENvZGUgPz8gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gdGhpcy5idXNpbmVzc1BhcnRuZXJEYXRhLmZpbmQocCA9PiBwLmNhcmRDb2RlID09PSB0aGlzLnJlY29yZC51X0NhcmRDb2RlKT8uY2FyZE5hbWUgPz8gdGhpcy5yZWNvcmQudV9DYXJkQ29kZSA/PyAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsTm8gPSB0aGlzLnJlY29yZC51X0Rlc3BhdGNoQWR2aWNlTm8gPz8gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbERvY0VudHJ5ID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsSXJzYWxpeWVObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvUGxhdGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RvcnNlUGxhdGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b1RjTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlck5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0NhcmRDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbFNvdXJjZVR5cGUgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgLy8gQ2FycmllcidkYW4gVEMgdmF0YW5kYcWfxLEgYmlsZ2lzaW5pIG9rdVxyXG4gICAgICAgICAgICBjb25zdCBjYXJyaWVyID0gdGhpcy5jYXJyaWVyRGF0YS5maW5kKGMgPT4gYy5jb2RlID09PSB0aGlzLnJlY29yZC51X1RjTm8pO1xyXG4gICAgICAgICAgICB0aGlzLmlzVGNDaXRpemVuID0gY2FycmllciA/IGNhcnJpZXIudV9UY1Z0bmRzaU1pICE9PSAnTicgOiB0cnVlO1xyXG5cclxuICAgICAgICAgICAgLy8gU2XDp2lsaSB0aXB0ZSBNYWwgR8OHIGJpbGdpc2luaSDDp8O2elxyXG4gICAgICAgICAgICBjb25zdCBmb3VuZFR5cGUgPSB0aGlzLnR5cGVEYXRhLmZpbmQodCA9PiB0LmNvZGUgPT09IHRoaXMucmVjb3JkLnVfRW50cnlUeXBlKTtcclxuICAgICAgICAgICAgaWYgKGZvdW5kVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGUgPSBmb3VuZFR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdhdGVDb2RlID0gdGhpcy5kZWZhdWx0R2F0ZUNvZGU7XHJcbiAgICAgICAgICAgIHRoaXMuZW50cnlEYXRlVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpdERhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMudGNObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2Fycmllck5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyQ29kZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxEb2NFbnRyeSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbElyc2FsaXllTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b1BsYXRlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9Eb3JzZVBsYXRlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9UY05vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJGaXJzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlckxhc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9DYXJkQ29kZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxTb3VyY2VUeXBlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZERhdGVUaW1lKGRhdGVTdHI/OiBzdHJpbmcsIHRpbWVOdW0/OiBudW1iZXIpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKCFkYXRlU3RyKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZVN0cik7XHJcbiAgICAgICAgaWYgKHRpbWVOdW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkLnNldEhvdXJzKE1hdGguZmxvb3IodGltZU51bSAvIDEwMCksIHRpbWVOdW0gJSAxMDAsIDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZDtcclxuICAgIH1cclxuXHJcbiAgICBvblR5cGVTZWxlY3RlZChlOiBWZWhpY2xlVHlwZSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghZSkge1xyXG4gICAgICAgICAgICAvLyBIYXJla2V0IHRpcGkgdGVtaXpsZW5kaSDigJQgaWxnaWxpIHTDvG0gYWxhbmxhcsSxIHPEsWbEsXJsYSB2ZSBnaXpsZVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZUNvZGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBsYXRlTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy5tYW51YWxQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMucGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubWFudWFsVHJhaWxlclBsYXRlTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy50cmFpbGVyUGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJztcclxuICAgICAgICAgICAgdGhpcy50Y05vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmlzTmV3Q2FycmllciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyVGVsID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMudGNMb29rdXBNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbE5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbERvY0VudHJ5ID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsSXJzYWxpeWVObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvUGxhdGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RvcnNlUGxhdGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b1RjTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlck5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0NhcmRDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbFNvdXJjZVR5cGUgPSBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlQ29kZSA9IGUuY29kZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZU5hbWUgPSBlLm5hbWU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGUgPSBlO1xyXG4gICAgICAgIC8vIEhhcmVrZXQgdGlwaSBkZcSfacWfaW5jZSB3YXliaWxsIHNlw6dpbWluaSB2ZSBvdG9tYXRpayBkb2xkdXJ1bGFuIGFsYW5sYXLEsSBzxLFmxLFybGFcclxuICAgICAgICB0aGlzLndheWJpbGxObyA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbERvY0VudHJ5ID0gbnVsbDtcclxuICAgICAgICB0aGlzLndheWJpbGxJcnNhbGl5ZU5vID0gJyc7XHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b1BsYXRlID0gJyc7XHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b0RvcnNlUGxhdGUgPSAnJztcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvVGNObyA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJGaXJzdG5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyTmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9DYXJkQ29kZSA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbFNvdXJjZVR5cGUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0dvb2RzVHlwZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFR5cGU/LnVfTWFsR0MgPT09ICdZJztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2hvd0V4dHJhRmllbGRzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRUeXBlQ29kZSAmJiAhdGhpcy5pc0dvb2RzVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBvblBsYXRlU2VsZWN0ZWQoZTogUGxhdGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUoZS5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBvblRyYWlsZXJQbGF0ZVNlbGVjdGVkKGU6IFBsYXRlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZShlLmNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTWFudWFsUGxhdGVGb2N1c091dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hbnVhbFBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKHRoaXMubWFudWFsUGxhdGVObyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25NYW51YWxUcmFpbGVyUGxhdGVGb2N1c091dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZSh0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVMO8cmsgcGxha2FzxLFuxLEgXCIzNCBITUEgMDAxXCIgZm9ybWF0xLFuYSBkw7Zuw7zFn3TDvHLDvHIgKi9cclxuICAgIGZvcm1hdFBsYXRlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiB2YWx1ZTtcclxuICAgICAgICBjb25zdCByYXcgPSB2YWx1ZS5yZXBsYWNlKC9bXkEtWmEtejAtOcOHxJ7EsMOWxZ7DnMOnxJ/EscO2xZ/DvF0vZywgJycpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSByYXcubWF0Y2goL14oXFxkezJ9KShbQS1aw4fEnsSww5bFnsOcXXsxLDN9KShcXGR7MSw0fSkkLyk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHttYXRjaFsxXX0gJHttYXRjaFsyXX0gJHttYXRjaFszXX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWUudHJpbSgpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYXJyaWVyTG9va3VwU2VsZWN0ZWQoZTogQ2FycmllclBlcnNvbik6IHZvaWQge1xyXG4gICAgICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9IGUubmFtZTtcclxuICAgICAgICB0aGlzLnRjTm8gPSBlLmNvZGU7XHJcbiAgICAgICAgdGhpcy5pc1RjQ2l0aXplbiA9IGUudV9UY1Z0bmRzaU1pICE9PSAnTic7XHJcbiAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRjTG9va3VwTW9kZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQnVzaW5lc3NQYXJ0bmVyU2VsZWN0ZWQoZTogQnVzaW5lc3NQYXJ0bmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUgPSBlLmNhcmRDb2RlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gZS5jYXJkTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBvbldheWJpbGxTZWxlY3RlZChlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWUpIHtcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsRG9jRW50cnkgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxJcnNhbGl5ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9QbGF0ZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvRG9yc2VQbGF0ZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvVGNObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyRmlyc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvQ2FyZENvZGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsU291cmNlVHlwZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIExvb2t1cCd0YSB1X0VGQVROTyBnw7ZzdGVyaWxpciAoZGlzcGxheU5hbWU6ICd1X0VGQVROTycpXHJcbiAgICAgICAgdGhpcy53YXliaWxsTm8gPSBlLnVfRUZBVE5PPy50b1N0cmluZygpID8/IGUuZG9jTnVtPy50b1N0cmluZygpID8/ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbERvY0VudHJ5ID0gZS5kb2NFbnRyeSA/PyBudWxsO1xyXG5cclxuICAgICAgICAvLyBLYXluYWsgdGlwaTogU3RvY2tUcmFuc2ZlcidkYSAnZnJvbVdhcmVob3VzZScgYWxhbsSxIHZhcmTEsXIsIFB1cmNoYXNlRGVsaXZlcnlOb3RlJ2RhIHlva3R1clxyXG4gICAgICAgIGNvbnN0IGlzU3RvY2tUcmFuc2ZlciA9ICdmcm9tV2FyZWhvdXNlJyBpbiBlO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbFNvdXJjZVR5cGUgPSBpc1N0b2NrVHJhbnNmZXIgPyAnc3RvY2tUcmFuc2ZlcicgOiAncHVyY2hhc2VEZWxpdmVyeSc7XHJcblxyXG4gICAgICAgIGlmICghZS5kb2NFbnRyeSkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmlzV2F5YmlsbExvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IG9uTmV4dCA9IChkb2M6IGFueSkgPT4gdGhpcy5hcHBseVdheWJpbGxBdXRvRmlsbChkb2MpO1xyXG4gICAgICAgIGNvbnN0IG9uRXJyb3IgPSAoKSA9PiB7IHRoaXMuaXNXYXliaWxsTG9hZGluZyA9IGZhbHNlOyB9O1xyXG5cclxuICAgICAgICBpZiAoaXNTdG9ja1RyYW5zZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvY2tUcmFuc2ZlclNlcnZpY2UuZ2V0KGUuZG9jRW50cnkpLnN1YnNjcmliZSh7IG5leHQ6IG9uTmV4dCwgZXJyb3I6IG9uRXJyb3IgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wdXJjaGFzZURlbGl2ZXJ5Tm90ZVNlcnZpY2UuZ2V0KGUuZG9jRW50cnkpLnN1YnNjcmliZSh7IG5leHQ6IG9uTmV4dCwgZXJyb3I6IG9uRXJyb3IgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXBwbHlXYXliaWxsQXV0b0ZpbGwoZG9jOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzV2F5YmlsbExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIWRvYykgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyDEsHJzYWxpeWUgbnVtYXJhc8SxICh1X0VGQVROTykg4oCUIERUTydkYSB1X0Rlc3BhdGNoQWR2aWNlTm8gb2xhcmFrIGfDtm5kZXJpbGVjZWtcclxuICAgICAgICB0aGlzLndheWJpbGxJcnNhbGl5ZU5vID0gZG9jLnVfRUZBVE5PPy50cmltKCkgPz8gJyc7XHJcblxyXG4gICAgICAgIC8vIEFyYcOnIHBsYWthc8SxXHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b1BsYXRlID0gZG9jLnVfQXJhY1BsYWthc2k/LnRyaW0oKSA/PyAnJztcclxuXHJcbiAgICAgICAgLy8gRG9yc2UgcGxha2FcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvRG9yc2VQbGF0ZSA9IGRvYy51X0RvcnNlUGxha2FsYXI/LnRyaW0oKSA/PyAnJztcclxuXHJcbiAgICAgICAgLy8gU8O8csO8Y8O8IFRDIGtpbWxpayBub1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9UY05vID0gZG9jLnVfU29mb3JLaW1saWs/LnRyaW0oKSA/PyAnJztcclxuXHJcbiAgICAgICAgLy8gQ2FyaSBrb2R1XHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b0NhcmRDb2RlID0gZG9jLmNhcmRDb2RlPy50cmltKCkgPz8gJyc7XHJcblxyXG4gICAgICAgIC8vIFPDvHLDvGPDvCBhZMSxIHNveWFkxLEgKGF5csSxIHZlIGJpcmxlxZ9paylcclxuICAgICAgICBjb25zdCBhZCAgICA9IGRvYy51X1NvZm9yQWQ/LnRyaW0oKSA/PyAnJztcclxuICAgICAgICBjb25zdCBzb3lhZCA9IGRvYy51X1NvZm9yU295YWRpPy50cmltKCkgPz8gJyc7XHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlckZpcnN0bmFtZSA9IGFkO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJMYXN0bmFtZSAgPSBzb3lhZDtcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyTmFtZSAgICAgID0gW2FkLCBzb3lhZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcclxuXHJcbiAgICAgICAgLy8gVENLTiBhbGdvcml0bWFzxLFuYSBnw7ZyZSBUQyB2YXRhbmRhxZ/EsSBtxLEgYmVsaXJsZVxyXG4gICAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSB0aGlzLnZhbGlkYXRlVENLTih0aGlzLndheWJpbGxBdXRvVGNObyk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVlcnlDYXJyaWVyQnlUY05vKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRjID0gdGhpcy50Y05vPy50cmltKCk7XHJcbiAgICAgICAgaWYgKCF0Yykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6UGxlYXNlRW50ZXJUY05vJyksICcnLCB7XHJcbiAgICAgICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1RjUXVlcnlpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2FycmllclBlcnNvblNlcnZpY2UuZ2V0KHRjKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoY2FycmllcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RjUXVlcnlpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChjYXJyaWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENhcnJpZXJOYW1lID0gY2Fycmllci5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSBjYXJyaWVyLnVfVGNWdG5kc2lNaSAhPT0gJ04nO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNOZXdDYXJyaWVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNOZXdDYXJyaWVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3Q2FycmllclRlbCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RjUXVlcnlpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNOZXdDYXJyaWVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3Q2FycmllckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3Q2FycmllclRlbCA9ICcnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUoXHJcbiAgICAgICAgICAgIHRoaXMucGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMubWFudWFsUGxhdGVOby50cmltKCkudG9VcHBlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkUGxhdGVOb1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZVRyYWlsZXJQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZShcclxuICAgICAgICAgICAgdGhpcy50cmFpbGVyUGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMubWFudWFsVHJhaWxlclBsYXRlTm8udHJpbSgpLnRvVXBwZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkVHlwZUNvZGUgfHwgKCF0aGlzLmlzR29vZHNUeXBlICYmICghZWZmZWN0aXZlUGxhdGVObyB8fCAhdGhpcy50Y05vPy50cmltKCkpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6RmlsbFJlcXVpcmVkRmllbGRzJyksICcnLCB7XHJcbiAgICAgICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzR29vZHNUeXBlICYmICF0aGlzLndheWJpbGxObz8udHJpbSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpXYXliaWxsUmVxdWlyZWQnKSwgJycsIHtcclxuICAgICAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzR29vZHNUeXBlICYmIHRoaXMuaXNUY0NpdGl6ZW4gJiYgIXRoaXMudmFsaWRhdGVUQ0tOKHRoaXMudGNObykpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybignR2XDp2Vyc2l6IFQuQy4gS2ltbGlrIE5vLiBMw7x0ZmVuIDExIGhhbmVsaSwgZ2XDp2VybGkgYmlyIFRDS04gZ2lyaW5pei4nLCAnJywge1xyXG4gICAgICAgICAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNHb29kc1R5cGUgJiYgdGhpcy5pc05ld0NhcnJpZXIgJiYgKCF0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWU/LnRyaW0oKSB8fCAhdGhpcy5uZXdDYXJyaWVyTGFzdG5hbWU/LnRyaW0oKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkVudGVyTmV3RHJpdmVyTmFtZScpLCAnJywge1xyXG4gICAgICAgICAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkdG86IFNhdmVGYWN0b3J5RW50cnlEdG8gPSB7XHJcbiAgICAgICAgICAgIHVfR2F0ZUNvZGU6IHRoaXMuZ2F0ZUNvZGUsXHJcbiAgICAgICAgICAgIHVfRW50cnlEYXRlOiB0aGlzLmVudHJ5RGF0ZVRpbWVcclxuICAgICAgICAgICAgICAgID8gdGhpcy5lbnRyeURhdGVUaW1lLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXVxyXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfRW50cnlUaW1lOiB0aGlzLmVudHJ5RGF0ZVRpbWVcclxuICAgICAgICAgICAgICAgID8gdGhpcy5lbnRyeURhdGVUaW1lLmdldEhvdXJzKCkgKiAxMDAgKyB0aGlzLmVudHJ5RGF0ZVRpbWUuZ2V0TWludXRlcygpXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9FeGl0RGF0ZTogdGhpcy5leGl0RGF0ZVRpbWVcclxuICAgICAgICAgICAgICAgID8gdGhpcy5leGl0RGF0ZVRpbWUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9FeGl0VGltZTogdGhpcy5leGl0RGF0ZVRpbWVcclxuICAgICAgICAgICAgICAgID8gdGhpcy5leGl0RGF0ZVRpbWUuZ2V0SG91cnMoKSAqIDEwMCArIHRoaXMuZXhpdERhdGVUaW1lLmdldE1pbnV0ZXMoKVxyXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfRW50cnlUeXBlOiB0aGlzLnNlbGVjdGVkVHlwZUNvZGUsXHJcbiAgICAgICAgICAgIHVfRGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgIHVfVGNWdG5kc2lNaTogdGhpcy5pc1RjQ2l0aXplbiA/ICdZJyA6ICdOJyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0dvb2RzVHlwZSkge1xyXG4gICAgICAgICAgICAvLyBNYWwgR8OHID0gWTogU2FkZWNlIGlyc2FsaXllIHJlZmVyYW5zxLEgZ8O2bmRlciwgYmFja2VuZCBTQVAndGFuIGRvxJ9ydWxheWFyYWsgZG9sZHVyYWNha1xyXG4gICAgICAgICAgICBkdG8udV9XYXliaWxsRG9jRW50cnkgPSB0aGlzLndheWJpbGxEb2NFbnRyeSA/PyB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGR0by51X1dheWJpbGxTb3VyY2VUeXBlID0gdGhpcy53YXliaWxsU291cmNlVHlwZSA/PyB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gTWFsIEfDhyA9IE46IEFyYcOnIHZlIHPDvHLDvGPDvCBiaWxnaWxlcmluaSBmcm9udGVuZCdkZW4gZ8O2bmRlclxyXG4gICAgICAgICAgICBkdG8udV9QbGF0ZSA9IGVmZmVjdGl2ZVBsYXRlTm87XHJcbiAgICAgICAgICAgIGR0by51X0RvcnNlUGxhdGUgPSBlZmZlY3RpdmVUcmFpbGVyUGxhdGVObyB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGR0by51X1RjTm8gPSB0aGlzLnRjTm8udHJpbSgpO1xyXG4gICAgICAgICAgICBkdG8udV9Ecml2ZXIgPSB0aGlzLmlzTmV3Q2FycmllclxyXG4gICAgICAgICAgICAgICAgPyBgJHt0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUudHJpbSgpfSAke3RoaXMubmV3Q2Fycmllckxhc3RuYW1lLnRyaW0oKX1gXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgZHRvLnVfRHJpdmVyRmlyc3RuYW1lID0gdGhpcy5pc05ld0NhcnJpZXIgPyB0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUudHJpbSgpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBkdG8udV9Ecml2ZXJMYXN0bmFtZSA9IHRoaXMuaXNOZXdDYXJyaWVyID8gdGhpcy5uZXdDYXJyaWVyTGFzdG5hbWUudHJpbSgpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBkdG8udV9Ecml2ZXJUZWwgPSB0aGlzLmlzTmV3Q2FycmllciA/ICh0aGlzLm5ld0NhcnJpZXJUZWwudHJpbSgpIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGR0by51X0NhcmRDb2RlID0gdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkb1NhdmUgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9icyQgPSB0aGlzLnJlY29yZD8uZG9jRW50cnlcclxuICAgICAgICAgICAgICAgID8gdGhpcy5zZXJ2aWNlLnVwZGF0ZSh0aGlzLnJlY29yZC5kb2NFbnRyeS50b1N0cmluZygpLCBkdG8pXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2VydmljZS5jcmVhdGUoZHRvKTtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBvYnMkLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVkLmVtaXQoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBpc01hbnVhbCA9IHRoaXMucGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy50cmFpbGVyUGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnICYmICEhZWZmZWN0aXZlVHJhaWxlclBsYXRlTm8pO1xyXG5cclxuICAgICAgICBpZiAoaXNNYW51YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXRlU2VydmljZS5nZXRMaXN0KCkuc3Vic2NyaWJlKHBsYXRlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIE1hbnVlbCBwbGFrYSBkdXBsaWNhdGUga29udHJvbMO8XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkdXBsaWNhdGUgPSBwbGF0ZXMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcCA9PiBwLmNvZGUudHJpbSgpLnRvVXBwZXJDYXNlKCkgPT09IGVmZmVjdGl2ZVBsYXRlTm9cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6UGxhdGVBbHJlYWR5RXhpc3RzJywgZWZmZWN0aXZlUGxhdGVObyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtoaWRlWWVzQnRuOiB0cnVlLCBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLCBkaXNtaXNzaWJsZTogZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBsYXRlTm8gPSBkdXBsaWNhdGUuY29kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBNYW51ZWwgZG9yc2UgcGxha2EgZHVwbGljYXRlIGtvbnRyb2zDvFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhaWxlclBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJyAmJiBlZmZlY3RpdmVUcmFpbGVyUGxhdGVObykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYWlsZXJEdXBsaWNhdGUgPSBwbGF0ZXMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcCA9PiBwLmNvZGUudHJpbSgpLnRvVXBwZXJDYXNlKCkgPT09IGVmZmVjdGl2ZVRyYWlsZXJQbGF0ZU5vXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHJhaWxlckR1cGxpY2F0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpQbGF0ZUFscmVhZHlFeGlzdHMnLCBlZmZlY3RpdmVUcmFpbGVyUGxhdGVObyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtoaWRlWWVzQnRuOiB0cnVlLCBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLCBkaXNtaXNzaWJsZTogZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhaWxlclBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUcmFpbGVyUGxhdGVObyA9IHRyYWlsZXJEdXBsaWNhdGUuY29kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBkb1NhdmUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9TYXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTW9kYWxWaXNpYmxlQ2hhbmdlKHZhbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHZhbDtcclxuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh2YWwpO1xyXG4gICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2FuY2VsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Nb2RhbFZpc2libGVDaGFuZ2UoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdmFsaWRhdGVUQ0tOKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB0YyA9IHZhbHVlPy50cmltKCk7XHJcbiAgICAgICAgaWYgKCF0YyB8fCB0Yy5sZW5ndGggIT09IDExKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKCEvXlxcZHsxMX0kLy50ZXN0KHRjKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0Y1swXSA9PT0gJzAnKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZCA9IHRjLnNwbGl0KCcnKS5tYXAoTnVtYmVyKTtcclxuICAgICAgICBjb25zdCBkMTAgPSAoKGRbMF0gKyBkWzJdICsgZFs0XSArIGRbNl0gKyBkWzhdKSAqIDcgLSAoZFsxXSArIGRbM10gKyBkWzVdICsgZFs3XSkpICUgMTA7XHJcbiAgICAgICAgaWYgKGQxMCAhPT0gZFs5XSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGQxMSA9IGQuc2xpY2UoMCwgMTApLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApICUgMTA7XHJcbiAgICAgICAgcmV0dXJuIGQxMSA9PT0gZFsxMF07XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4iLCI8YWJwLW1vZGFsIFt2aXNpYmxlXT1cInZpc2libGVcIiAodmlzaWJsZUNoYW5nZSk9XCJvbk1vZGFsVmlzaWJsZUNoYW5nZSgkZXZlbnQpXCIgW29wdGlvbnNdPVwieyBzaXplOiAnbGcnLCBiYWNrZHJvcDogJ3N0YXRpYycgfVwiPlxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgPGgzPnt7IHJlY29yZD8uZG9jRW50cnkgPyAoJ0FicFVpOjpFZGl0JyB8IGFicExvY2FsaXphdGlvbikgOiAoJ0thZG9vZ2x1OjpOZXdSZWNvcmQnIHwgYWJwTG9jYWxpemF0aW9uKSB9fTwvaDM+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG5cclxuICAgIDwhLS0gR2lyacWfIC8gw4fEsWvEscWfIEJpbGdpbGVyaSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItMlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2xvY2sgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OkVudHJ5RXhpdEluZm8nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpFbnRyeURhdGVUaW1lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiZW50cnlEYXRlVGltZVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZVwiXHJcbiAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCJkZC5NTS55eXl5IEhIOm1tXCJcclxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICA8L2R4LWRhdGUtYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkV4aXREYXRlVGltZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgPGR4LWRhdGUtYm94XHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImV4aXREYXRlVGltZVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZVwiXHJcbiAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCJkZC5NTS55eXl5IEhIOm1tXCJcclxuICAgICAgICAgICAgW3Nob3dDbGVhckJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICA8L2R4LWRhdGUtYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkdhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgIDxkeC1zZWxlY3QtYm94XHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImdhdGVDb2RlXCJcclxuICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZ2F0ZURhdGFcIlxyXG4gICAgICAgICAgICBkaXNwbGF5RXhwcj1cIm5hbWVcIlxyXG4gICAgICAgICAgICB2YWx1ZUV4cHI9XCJjb2RlXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6U2VsZWN0R2F0ZScgfCBhYnBMb2NhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgIDwvZHgtc2VsZWN0LWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEFyYcOnIEJpbGdpbGVyaSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItMlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJ1Y2sgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OlZlaGljbGVJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgIEFyYcOnIEhhcmVrZXQgVMO8csO8IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICBbZ2V0Rm5dPVwidHlwZURhdGFcIlxyXG4gICAgICAgICAgW2NvbHVtbnNdPVwidHlwZUNvbHVtbnNcIlxyXG4gICAgICAgICAgZGlzcGxheU5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZFR5cGVOYW1lXCJcclxuICAgICAgICAgIChzZWxlY3RlZCk9XCJvblR5cGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIE1hbCBHw4cgPSBZOiBTU01HIC8gU3RvayBOYWtsaSBzZcOnaW1pIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiICpuZ0lmPVwic2VsZWN0ZWRUeXBlQ29kZSAmJiBpc0dvb2RzVHlwZVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICB7eyAnS2Fkb29nbHU6OldheWJpbGxOdW1iZXInIHwgYWJwTG9jYWxpemF0aW9uIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICBbdGFic109XCJ3YXliaWxsVGFic1wiXHJcbiAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwid2F5YmlsbE5vXCJcclxuICAgICAgICAgIChzZWxlY3RlZCk9XCJvbldheWJpbGxTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiICpuZ0lmPVwic2hvd0V4dHJhRmllbGRzXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6UGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBsYXRlSW5wdXRNb2RlID09PSAnbG9va3VwJ1wiPlxyXG4gICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFZlaGljbGVQbGF0ZXNcIlxyXG4gICAgICAgICAgICBbY29sdW1uc109XCJwbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZT1cImNvZGVcIlxyXG4gICAgICAgICAgICBrZXlFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZFBsYXRlTm9cIlxyXG4gICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25QbGF0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwicGxhdGVJbnB1dE1vZGUgPSAnbWFudWFsJ1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEta2V5Ym9hcmQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpNYW51YWxFbnRyeScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJ1wiPlxyXG4gICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cIm1hbnVhbFBsYXRlTm9cIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlclBsYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgIChvbkZvY3VzT3V0KT1cIm9uTWFudWFsUGxhdGVGb2N1c091dCgpXCI+XHJcbiAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTFcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCdcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWxpc3QgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpTZWxlY3RGcm9tTGlzdCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIiAqbmdJZj1cInNob3dFeHRyYUZpZWxkc1wiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICB7eyAnS2Fkb29nbHU6OkRvcnNlUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHJhaWxlclBsYXRlSW5wdXRNb2RlID09PSAnbG9va3VwJ1wiPlxyXG4gICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFRyYWlsZXJQbGF0ZXNcIlxyXG4gICAgICAgICAgICBbY29sdW1uc109XCJwbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZT1cImNvZGVcIlxyXG4gICAgICAgICAgICBrZXlFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZFRyYWlsZXJQbGF0ZU5vXCJcclxuICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uVHJhaWxlclBsYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cInNtYWxsIHRleHQtcHJpbWFyeVwiIChjbGljayk9XCJ0cmFpbGVyUGxhdGVJbnB1dE1vZGUgPSAnbWFudWFsJ1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEta2V5Ym9hcmQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpNYW51YWxFbnRyeScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCdcIj5cclxuICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJtYW51YWxUcmFpbGVyUGxhdGVOb1wiXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2Fkb29nbHU6OkVudGVyUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcclxuICAgICAgICAgICAgKG9uRm9jdXNPdXQpPVwib25NYW51YWxUcmFpbGVyUGxhdGVGb2N1c091dCgpXCI+XHJcbiAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTFcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9ICdsb29rdXAnXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1saXN0IG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6U2VsZWN0RnJvbUxpc3QnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gU8O8csO8Y8O8ICYgRmlybWEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0zIG1iLTJcIiAqbmdJZj1cInNob3dFeHRyYUZpZWxkc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaWQtY2FyZCBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6RHJpdmVyQW5kQ29tcGFueScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG1iLTFcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMCBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgIHt7IGlzVGNDaXRpemVuID8gKCdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbikgOiAnS2ltbGlrIE5vJyB9fSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtY2hlY2stYm94IFsodmFsdWUpXT1cImlzVGNDaXRpemVuXCIgW2Rpc2FibGVkXT1cIiEhcmVjb3JkXCIgdGV4dD1cIlQuQy4gVmF0YW5kYcWfxLFcIj48L2R4LWNoZWNrLWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRjTG9va3VwTW9kZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJ0Y05vXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaXNUY0NpdGl6ZW4gPyAoJ0thZG9vZ2x1OjpUY0lkZW50aXR5Tm8nIHwgYWJwTG9jYWxpemF0aW9uKSA6ICdLaW1saWsgTm8nXCJcclxuICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tc20gdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1RjUXVlcnlpbmdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJxdWVyeUNhcnJpZXJCeVRjTm8oKVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgICAge3sgKGlzVGNRdWVyeWluZyA/ICdLYWRvb2dsdTo6UXVlcnlpbmcnIDogJ0thZG9vZ2x1OjpRdWVyeScpIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwidGNMb29rdXBNb2RlID0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlzdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OlNlbGVjdEZyb21MaXN0JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGNMb29rdXBNb2RlXCI+XHJcbiAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgW2dldEZuXT1cImNhcnJpZXJEYXRhXCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwiY2FycmllckNvbHVtbnNcIlxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwic2VsZWN0ZWRDYXJyaWVyTmFtZVwiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvbkNhcnJpZXJMb29rdXBTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTFcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInRjTG9va3VwTW9kZSA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1rZXlib2FyZCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OlF1ZXJ5QnlUYycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBNZXZjdXQgc8O8csO8Y8O8OiBzYWRlY2UgYWTEsSBnw7ZzdGVyIChyZWFkb25seSkgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNOZXdDYXJyaWVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6RHJpdmVyTmFtZVN1cm5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cInNlbGVjdGVkQ2Fycmllck5hbWVcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8IS0tIFllbmkgc8O8csO8Y8O8OiBBZCwgU295YWQsIFRlbGVmb24gYWxhbmxhcsSxbsSxIGfDtnN0ZXIgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc05ld0NhcnJpZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6Rmlyc3ROYW1lJyB8IGFicExvY2FsaXphdGlvbiB9fSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgWyh2YWx1ZSldPVwibmV3Q2FycmllckZpcnN0bmFtZVwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6Rmlyc3ROYW1lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TGFzdE5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJuZXdDYXJyaWVyTGFzdG5hbWVcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2Fkb29nbHU6Okxhc3ROYW1lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpQaG9uZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwibmV3Q2FycmllclRlbFwiXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2Fkb29nbHU6OlBob25lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBzbWFsbCBweS0xIG1iLTNcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGUgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TmV3RHJpdmVyQWxlcnQnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpCdXNpbmVzc1BhcnRuZXInIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgIFtnZXRGbl09XCJidXNpbmVzc1BhcnRuZXJEYXRhXCJcclxuICAgICAgICAgIFtjb2x1bW5zXT1cImJ1c2luZXNzUGFydG5lckNvbHVtbnNcIlxyXG4gICAgICAgICAgZGlzcGxheU5hbWU9XCJjYXJkTmFtZVwiXHJcbiAgICAgICAgICBrZXlFeHByPVwiY2FyZENvZGVcIlxyXG4gICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZVwiXHJcbiAgICAgICAgICAoc2VsZWN0ZWQpPVwib25CdXNpbmVzc1BhcnRuZXJTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEHDp8Sxa2xhbWEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RGVzY3JpcHRpb24nIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgPGR4LXRleHQtYXJlYVxyXG4gICAgICAgIFsodmFsdWUpXT1cImRlc2NyaXB0aW9uXCJcclxuICAgICAgICBbaGVpZ2h0XT1cIjgwXCJcclxuICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgPC9keC10ZXh0LWFyZWE+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XHJcbiAgICAgIHt7ICdBYnBVaTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YWJwLWJ1dHRvblxyXG4gICAgICBpY29uQ2xhc3M9XCJmYSBmYS1zYXZlXCJcclxuICAgICAgYnV0dG9uVHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZyB8fCBpc1dheWJpbGxMb2FkaW5nXCJcclxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiPlxyXG4gICAgICB7eyAnQWJwVWk6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2FicC1idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+XHJcbiJdfQ==
426
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFldkcsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBTW5DLE1BQU0sT0FBTyw0QkFBNEI7SUE0RXJDLFlBQ1ksWUFBaUMsRUFDakMsT0FBK0IsRUFDL0Isb0JBQTZDLEVBQzdDLFlBQTZCLEVBQzdCLGtCQUF5QyxFQUN6QyxzQkFBaUQsRUFDakQsZUFBbUMsRUFDbkMsbUJBQXdDO1FBUHhDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQUMvQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXlCO1FBQzdDLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUM3Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO1FBQ3pDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBMkI7UUFDakQsb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBQ25DLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFuRjNDLFlBQU8s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cnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29uZmlybWF0aW9uU2VydmljZX0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQge0xvY2FsaXphdGlvblNlcnZpY2V9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcbmltcG9ydCB7SGl0RmFjdG9yeUVudHJ5U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQge0hpdFZlaGljbGVUeXBlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC12ZWhpY2xlLXR5cGUvaGl0LXZlaGljbGUtdHlwZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtWZWhpY2xlVHlwZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC12ZWhpY2xlLXR5cGUvbW9kZWxzJztcclxuaW1wb3J0IHtQbGF0ZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1wbGF0ZS9tb2RlbHMnO1xyXG5pbXBvcnQge0NhcnJpZXJQZXJzb259IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtY2Fycmllci1wZXJzb24vbW9kZWxzJztcclxuaW1wb3J0IHtIaXRDYXJyaWVyUGVyc29uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1jYXJyaWVyLXBlcnNvbi9oaXQtY2Fycmllci1wZXJzb24uc2VydmljZSc7XHJcbmltcG9ydCB7SGl0UGxhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXBsYXRlL2hpdC1wbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtGYWN0b3J5RW50cnksIFNhdmVGYWN0b3J5RW50cnlEdG99IGZyb20gXCIuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWZhY3RvcnktZW50cnkvbW9kZWxzXCI7XHJcbmltcG9ydCB7SGl0QnVzaW5lc3NQYXJ0bmVyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1idXNpbmVzcy1wYXJ0bmVyL2hpdC1idXNpbmVzcy1wYXJ0bmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0J1c2luZXNzUGFydG5lcn0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1idXNpbmVzcy1wYXJ0bmVyL21vZGVscyc7XHJcbmltcG9ydCB7SGl0VXNlckdhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXVzZXItZ2F0ZS9oaXQtdXNlci1nYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0dhdGV9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtZ2F0ZS9tb2RlbHMnO1xyXG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1oaXQtZmFjdG9yeS1lbnRyeS1mb3JtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9oaXQtZmFjdG9yeS1lbnRyeS1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhpdEZhY3RvcnlFbnRyeUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgICBASW5wdXQoKSB2aXNpYmxlID0gZmFsc2U7XHJcbiAgICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAgIEBJbnB1dCgpIHJlY29yZDogRmFjdG9yeUVudHJ5IHwgbnVsbCA9IG51bGw7XHJcbiAgICBAT3V0cHV0KCkgc2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8vIExvb2t1cCBkYXRhIGFycmF5cyBmb3IgbW9kYWxzXHJcbiAgICB0eXBlRGF0YTogVmVoaWNsZVR5cGVbXSA9IFtdO1xyXG4gICAgY2FycmllckRhdGE6IENhcnJpZXJQZXJzb25bXSA9IFtdO1xyXG5cclxuICAgIC8vIExhenkgbG9hZGVycyBmb3IgcGxhdGUgbG9va3VwcyDigJQgZmlsdGVyZWQgYnkgdV9Jc1RyYWlsZXJcclxuICAgIGxvYWRWZWhpY2xlUGxhdGVzID0gKCkgPT4gdGhpcy5wbGF0ZVNlcnZpY2UuZ2V0TGlzdCgpLnBpcGUoXHJcbiAgICAgICAgbWFwKHBsYXRlcyA9PiBwbGF0ZXMuZmlsdGVyKHAgPT4gcC51X0lzVHJhaWxlciAhPT0gJ1knKSlcclxuICAgICk7XHJcbiAgICBsb2FkVHJhaWxlclBsYXRlcyA9ICgpID0+IHRoaXMucGxhdGVTZXJ2aWNlLmdldExpc3QoKS5waXBlKFxyXG4gICAgICAgIG1hcChwbGF0ZXMgPT4gcGxhdGVzLmZpbHRlcihwID0+IHAudV9Jc1RyYWlsZXIgPT09ICdZJykpXHJcbiAgICApO1xyXG4gICAgZ2F0ZURhdGE6IEdhdGVbXSA9IFtdO1xyXG4gICAgZGVmYXVsdEdhdGVDb2RlID0gJyc7XHJcblxyXG4gICAgLy8gQ29sdW1uIGNvbmZpZ3MgZm9yIGxvb2t1cCBtb2RhbHNcclxuICAgIHR5cGVDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiAxMDB9LFxyXG4gICAgICAgIHtkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogJ0FkJ30sXHJcbiAgICBdO1xyXG4gICAgcGxhdGVDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ1BsYWthJywgd2lkdGg6IDEwMH0sXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnTmFtZSd9LFxyXG4gICAgXTtcclxuICAgIGNhcnJpZXJDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ1QuQy4gS2ltbGlrIE5vJywgd2lkdGg6IDE0MH0sXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnQWQgU295YWQnfSxcclxuICAgIF07XHJcbiAgICBidXNpbmVzc1BhcnRuZXJDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjYXJkQ29kZScsIGNhcHRpb246ICdDYXJpIEtvZCcsIHdpZHRoOiAxMjB9LFxyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjYXJkTmFtZScsIGNhcHRpb246ICdDYXJpIFVudmFuJ30sXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIEZvcm0gZmllbGRzXHJcbiAgICBnYXRlQ29kZSA9ICcnO1xyXG4gICAgZW50cnlEYXRlVGltZTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgZXhpdERhdGVUaW1lOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBzZWxlY3RlZFR5cGVDb2RlID0gJyc7XHJcbiAgICBzZWxlY3RlZFR5cGVOYW1lID0gJyc7XHJcbiAgICBzZWxlY3RlZFR5cGU6IFZlaGljbGVUeXBlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBzZWxlY3RlZFBsYXRlTm8gPSAnJztcclxuICAgIHRjTm8gPSAnJztcclxuICAgIHNlbGVjdGVkQ2Fycmllck5hbWUgPSAnJztcclxuICAgIGJ1c2luZXNzUGFydG5lckRhdGE6IEJ1c2luZXNzUGFydG5lcltdID0gW107XHJcbiAgICBzZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUgPSAnJztcclxuICAgIHNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZSA9ICcnO1xyXG4gICAgZGVzY3JpcHRpb24gPSAnJztcclxuXHJcbiAgICAvLyBQbGF0ZSBpbnB1dCBtb2RlXHJcbiAgICBwbGF0ZUlucHV0TW9kZTogJ2xvb2t1cCcgfCAnbWFudWFsJyA9ICdsb29rdXAnO1xyXG4gICAgbWFudWFsUGxhdGVObyA9ICcnO1xyXG5cclxuICAgIC8vIFRyYWlsZXIgcGxhdGVcclxuICAgIHRyYWlsZXJQbGF0ZUlucHV0TW9kZTogJ2xvb2t1cCcgfCAnbWFudWFsJyA9ICdsb29rdXAnO1xyXG4gICAgc2VsZWN0ZWRUcmFpbGVyUGxhdGVObyA9ICcnO1xyXG4gICAgbWFudWFsVHJhaWxlclBsYXRlTm8gPSAnJztcclxuXHJcbiAgICAvLyBDYXJyaWVyIFRDIG1vZGVcclxuICAgIHRjTG9va3VwTW9kZSA9IGZhbHNlO1xyXG4gICAgaXNUY1F1ZXJ5aW5nID0gZmFsc2U7XHJcbiAgICBpc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBOZXcgY2FycmllciBmaWVsZHNcclxuICAgIG5ld0NhcnJpZXJGaXJzdG5hbWUgPSAnJztcclxuICAgIG5ld0NhcnJpZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgbmV3Q2FycmllclRlbCA9ICcnO1xyXG5cclxuICAgIGlzVGNDaXRpemVuID0gdHJ1ZTtcclxuICAgIGlzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc2VydmljZTogSGl0RmFjdG9yeUVudHJ5U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNhcnJpZXJQZXJzb25TZXJ2aWNlOiBIaXRDYXJyaWVyUGVyc29uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHBsYXRlU2VydmljZTogSGl0UGxhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdmVoaWNsZVR5cGVTZXJ2aWNlOiBIaXRWZWhpY2xlVHlwZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1BhcnRuZXJTZXJ2aWNlOiBIaXRCdXNpbmVzc1BhcnRuZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdXNlckdhdGVTZXJ2aWNlOiBIaXRVc2VyR2F0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52ZWhpY2xlVHlwZVNlcnZpY2UuZ2V0TGlzdCgpLnN1YnNjcmliZShkID0+IHtcclxuICAgICAgICAgICAgdGhpcy50eXBlRGF0YSA9IGQ7XHJcbiAgICAgICAgICAgIC8vIEZvcm0gZMO8emVubGVtZSBtb2R1bmRhIGHDp8Sxa3NhIHR5cGVEYXRhIHnDvGtsZW5kaWt0ZW4gc29ucmEgc2VsZWN0ZWRUeXBlJ8SxIMOnw7Z6XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlY29yZD8udV9FbnRyeVR5cGUgJiYgIXRoaXMuc2VsZWN0ZWRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGQuZmluZCh0ID0+IHQuY29kZSA9PT0gdGhpcy5yZWNvcmQudV9FbnRyeVR5cGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB0aGlzLnNlbGVjdGVkVHlwZSA9IGZvdW5kO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jYXJyaWVyUGVyc29uU2VydmljZS5nZXRMaXN0KCkuc3Vic2NyaWJlKGQgPT4gKHRoaXMuY2FycmllckRhdGEgPSBkKSk7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1BhcnRuZXJTZXJ2aWNlLmdldExpc3QoKS5zdWJzY3JpYmUoZCA9PiAodGhpcy5idXNpbmVzc1BhcnRuZXJEYXRhID0gZCkpO1xyXG4gICAgICAgIHRoaXMudXNlckdhdGVTZXJ2aWNlLmdldE15R2F0ZXMoKS5zdWJzY3JpYmUoZCA9PiAodGhpcy5nYXRlRGF0YSA9IGQpKTtcclxuICAgICAgICB0aGlzLnVzZXJHYXRlU2VydmljZS5nZXRNeURlZmF1bHRHYXRlQ29kZSgpLnN1YnNjcmliZShkID0+ICh0aGlzLmRlZmF1bHRHYXRlQ29kZSA9IGQgPz8gJycpKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3Zpc2libGUnXT8uY3VycmVudFZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0Rm9ybSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzVGNDaXRpemVuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wbGF0ZUlucHV0TW9kZSA9ICdsb29rdXAnO1xyXG4gICAgICAgIHRoaXMubWFudWFsUGxhdGVObyA9ICcnO1xyXG4gICAgICAgIHRoaXMudHJhaWxlclBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCc7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgdGhpcy5tYW51YWxUcmFpbGVyUGxhdGVObyA9ICcnO1xyXG4gICAgICAgIHRoaXMudGNMb29rdXBNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLm5ld0NhcnJpZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMubmV3Q2FycmllclRlbCA9ICcnO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZWNvcmQpIHtcclxuICAgICAgICAgICAgdGhpcy5nYXRlQ29kZSA9IHRoaXMucmVjb3JkLnVfR2F0ZUNvZGUgPz8gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW50cnlEYXRlVGltZSA9IHRoaXMuYnVpbGREYXRlVGltZSh0aGlzLnJlY29yZC51X0VudHJ5RGF0ZSwgdGhpcy5yZWNvcmQudV9FbnRyeVRpbWUpO1xyXG4gICAgICAgICAgICB0aGlzLmV4aXREYXRlVGltZSAgPSB0aGlzLmJ1aWxkRGF0ZVRpbWUodGhpcy5yZWNvcmQudV9FeGl0RGF0ZSwgIHRoaXMucmVjb3JkLnVfRXhpdFRpbWUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZUNvZGUgPSB0aGlzLnJlY29yZC51X0VudHJ5VHlwZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVOYW1lID0gdGhpcy5yZWNvcmQudV9FbnRyeVR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZSh0aGlzLnJlY29yZC51X1BsYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZSh0aGlzLnJlY29yZC51X0RvcnNlUGxhdGUgPz8gJycpO1xyXG4gICAgICAgICAgICB0aGlzLnRjTm8gPSB0aGlzLnJlY29yZC51X1RjTm87XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9IHRoaXMucmVjb3JkLnVfRHJpdmVyO1xyXG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGhpcy5yZWNvcmQudV9EZXNjcmlwdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUgPSB0aGlzLnJlY29yZC51X0NhcmRDb2RlID8/ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZSA9IHRoaXMuYnVzaW5lc3NQYXJ0bmVyRGF0YS5maW5kKHAgPT4gcC5jYXJkQ29kZSA9PT0gdGhpcy5yZWNvcmQudV9DYXJkQ29kZSk/LmNhcmROYW1lID8/IHRoaXMucmVjb3JkLnVfQ2FyZENvZGUgPz8gJyc7XHJcblxyXG4gICAgICAgICAgICAvLyBDYXJyaWVyJ2RhbiBUQyB2YXRhbmRhxZ/EsSBiaWxnaXNpbmkgb2t1XHJcbiAgICAgICAgICAgIGNvbnN0IGNhcnJpZXIgPSB0aGlzLmNhcnJpZXJEYXRhLmZpbmQoYyA9PiBjLmNvZGUgPT09IHRoaXMucmVjb3JkLnVfVGNObyk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSBjYXJyaWVyID8gY2Fycmllci51X1RjVnRuZHNpTWkgIT09ICdOJyA6IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyBTZcOnaWxpIHRpcHRlIE1hbCBHw4cgYmlsZ2lzaW5pIMOnw7Z6XHJcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kVHlwZSA9IHRoaXMudHlwZURhdGEuZmluZCh0ID0+IHQuY29kZSA9PT0gdGhpcy5yZWNvcmQudV9FbnRyeVR5cGUpO1xyXG4gICAgICAgICAgICBpZiAoZm91bmRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZSA9IGZvdW5kVHlwZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2F0ZUNvZGUgPSB0aGlzLmRlZmF1bHRHYXRlQ29kZTtcclxuICAgICAgICAgICAgdGhpcy5lbnRyeURhdGVUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5leGl0RGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZUNvZGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBsYXRlTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy50Y05vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGREYXRlVGltZShkYXRlU3RyPzogc3RyaW5nLCB0aW1lTnVtPzogbnVtYmVyKTogRGF0ZSB8IG51bGwge1xyXG4gICAgICAgIGlmICghZGF0ZVN0cikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGVTdHIpO1xyXG4gICAgICAgIGlmICh0aW1lTnVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZC5zZXRIb3VycyhNYXRoLmZsb29yKHRpbWVOdW0gLyAxMDApLCB0aW1lTnVtICUgMTAwLCAwLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGQ7XHJcbiAgICB9XHJcblxyXG4gICAgb25UeXBlU2VsZWN0ZWQoZTogVmVoaWNsZVR5cGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWUpIHtcclxuICAgICAgICAgICAgLy8gSGFyZWtldCB0aXBpIHRlbWl6bGVuZGkg4oCUIGlsZ2lsaSB0w7xtIGFsYW5sYXLEsSBzxLFmxLFybGEgdmUgZ2l6bGVcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubWFudWFsUGxhdGVObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUcmFpbGVyUGxhdGVObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMudHJhaWxlclBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCc7XHJcbiAgICAgICAgICAgIHRoaXMudGNObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2Fycmllck5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyRmlyc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubmV3Q2Fycmllckxhc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubmV3Q2FycmllclRlbCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnRjTG9va3VwTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyQ29kZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlQ29kZSA9IGUuY29kZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZU5hbWUgPSBlLm5hbWU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGUgPSBlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaG93RXh0cmFGaWVsZHMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zZWxlY3RlZFR5cGVDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUGxhdGVTZWxlY3RlZChlOiBQbGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZShlLmNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVHJhaWxlclBsYXRlU2VsZWN0ZWQoZTogUGxhdGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHJhaWxlclBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKGUuY29kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25NYW51YWxQbGF0ZUZvY3VzT3V0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubWFudWFsUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUodGhpcy5tYW51YWxQbGF0ZU5vKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk1hbnVhbFRyYWlsZXJQbGF0ZUZvY3VzT3V0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubWFudWFsVHJhaWxlclBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKHRoaXMubWFudWFsVHJhaWxlclBsYXRlTm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBUw7xyayBwbGFrYXPEsW7EsSBcIjM0IEhNQSAwMDFcIiBmb3JtYXTEsW5hIGTDtm7DvMWfdMO8csO8ciAqL1xyXG4gICAgZm9ybWF0UGxhdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHJhdyA9IHZhbHVlLnJlcGxhY2UoL1teQS1aYS16MC05w4fEnsSww5bFnsOcw6fEn8Sxw7bFn8O8XS9nLCAnJykudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBtYXRjaCA9IHJhdy5tYXRjaCgvXihcXGR7Mn0pKFtBLVrDh8SexLDDlsWew5xdezEsM30pKFxcZHsxLDR9KSQvKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke21hdGNoWzFdfSAke21hdGNoWzJdfSAke21hdGNoWzNdfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZS50cmltKCkudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhcnJpZXJMb29rdXBTZWxlY3RlZChlOiBDYXJyaWVyUGVyc29uKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENhcnJpZXJOYW1lID0gZS5uYW1lO1xyXG4gICAgICAgIHRoaXMudGNObyA9IGUuY29kZTtcclxuICAgICAgICB0aGlzLmlzVGNDaXRpemVuID0gZS51X1RjVnRuZHNpTWkgIT09ICdOJztcclxuICAgICAgICB0aGlzLmlzTmV3Q2FycmllciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudGNMb29rdXBNb2RlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25CdXNpbmVzc1BhcnRuZXJTZWxlY3RlZChlOiBCdXNpbmVzc1BhcnRuZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lck5hbWUgPSAnJztcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyQ29kZSA9IGUuY2FyZENvZGU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lck5hbWUgPSBlLmNhcmROYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHF1ZXJ5Q2FycmllckJ5VGNObygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0YyA9IHRoaXMudGNObz8udHJpbSgpO1xyXG4gICAgICAgIGlmICghdGMpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlBsZWFzZUVudGVyVGNObycpLCAnJywge1xyXG4gICAgICAgICAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNUY1F1ZXJ5aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhcnJpZXJQZXJzb25TZXJ2aWNlLmdldCh0Yykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKGNhcnJpZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUY1F1ZXJ5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2Fycmllcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9IGNhcnJpZXIubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVGNDaXRpemVuID0gY2Fycmllci51X1RjVnRuZHNpTWkgIT09ICdOJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmV3Q2FycmllciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2Fycmllck5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmV3Q2FycmllciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyRmlyc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJUZWwgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUY1F1ZXJ5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTmV3Q2FycmllciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3Q2Fycmllckxhc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJUZWwgPSAnJztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZVBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKFxyXG4gICAgICAgICAgICB0aGlzLnBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJ1xyXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1hbnVhbFBsYXRlTm8udHJpbSgpLnRvVXBwZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZFBsYXRlTm9cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBlZmZlY3RpdmVUcmFpbGVyUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUoXHJcbiAgICAgICAgICAgIHRoaXMudHJhaWxlclBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJ1xyXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vLnRyaW0oKS50b1VwcGVyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRUcmFpbGVyUGxhdGVOb1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFR5cGVDb2RlIHx8ICFlZmZlY3RpdmVQbGF0ZU5vIHx8ICF0aGlzLnRjTm8/LnRyaW0oKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6RmlsbFJlcXVpcmVkRmllbGRzJyksICcnLCB7XHJcbiAgICAgICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzVGNDaXRpemVuICYmICF0aGlzLnZhbGlkYXRlVENLTih0aGlzLnRjTm8pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4oJ0dlw6dlcnNpeiBULkMuIEtpbWxpayBOby4gTMO8dGZlbiAxMSBoYW5lbGksIGdlw6dlcmxpIGJpciBUQ0tOIGdpcmluaXouJywgJycsIHtcclxuICAgICAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNOZXdDYXJyaWVyICYmICghdGhpcy5uZXdDYXJyaWVyRmlyc3RuYW1lPy50cmltKCkgfHwgIXRoaXMubmV3Q2Fycmllckxhc3RuYW1lPy50cmltKCkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpFbnRlck5ld0RyaXZlck5hbWUnKSwgJycsIHtcclxuICAgICAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZHRvOiBTYXZlRmFjdG9yeUVudHJ5RHRvID0ge1xyXG4gICAgICAgICAgICB1X0dhdGVDb2RlOiB0aGlzLmdhdGVDb2RlLFxyXG4gICAgICAgICAgICB1X0VudHJ5RGF0ZTogdGhpcy5lbnRyeURhdGVUaW1lXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuZW50cnlEYXRlVGltZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF1cclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X0VudHJ5VGltZTogdGhpcy5lbnRyeURhdGVUaW1lXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuZW50cnlEYXRlVGltZS5nZXRIb3VycygpICogMTAwICsgdGhpcy5lbnRyeURhdGVUaW1lLmdldE1pbnV0ZXMoKVxyXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfRXhpdERhdGU6IHRoaXMuZXhpdERhdGVUaW1lXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuZXhpdERhdGVUaW1lLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXVxyXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfRXhpdFRpbWU6IHRoaXMuZXhpdERhdGVUaW1lXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuZXhpdERhdGVUaW1lLmdldEhvdXJzKCkgKiAxMDAgKyB0aGlzLmV4aXREYXRlVGltZS5nZXRNaW51dGVzKClcclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X0VudHJ5VHlwZTogdGhpcy5zZWxlY3RlZFR5cGVDb2RlLFxyXG4gICAgICAgICAgICB1X0Rlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICB1X1RjVnRuZHNpTWk6IHRoaXMuaXNUY0NpdGl6ZW4gPyAnWScgOiAnTicsXHJcbiAgICAgICAgICAgIHVfUGxhdGU6IGVmZmVjdGl2ZVBsYXRlTm8sXHJcbiAgICAgICAgICAgIHVfRG9yc2VQbGF0ZTogZWZmZWN0aXZlVHJhaWxlclBsYXRlTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X1RjTm86IHRoaXMudGNOby50cmltKCksXHJcbiAgICAgICAgICAgIHVfRHJpdmVyOiB0aGlzLmlzTmV3Q2FycmllclxyXG4gICAgICAgICAgICAgICAgPyBgJHt0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUudHJpbSgpfSAke3RoaXMubmV3Q2Fycmllckxhc3RuYW1lLnRyaW0oKX1gXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9Ecml2ZXJGaXJzdG5hbWU6IHRoaXMuaXNOZXdDYXJyaWVyID8gdGhpcy5uZXdDYXJyaWVyRmlyc3RuYW1lLnRyaW0oKSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9Ecml2ZXJMYXN0bmFtZTogdGhpcy5pc05ld0NhcnJpZXIgPyB0aGlzLm5ld0NhcnJpZXJMYXN0bmFtZS50cmltKCkgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfRHJpdmVyVGVsOiB0aGlzLmlzTmV3Q2FycmllciA/ICh0aGlzLm5ld0NhcnJpZXJUZWwudHJpbSgpIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfQ2FyZENvZGU6IHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJDb2RlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGRvU2F2ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgb2JzJCA9IHRoaXMucmVjb3JkPy5kb2NFbnRyeVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLnNlcnZpY2UudXBkYXRlKHRoaXMucmVjb3JkLmRvY0VudHJ5LnRvU3RyaW5nKCksIGR0bylcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXJ2aWNlLmNyZWF0ZShkdG8pO1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIG9icyQuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZWQuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGlzTWFudWFsID0gdGhpcy5wbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCcgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCcgJiYgISFlZmZlY3RpdmVUcmFpbGVyUGxhdGVObyk7XHJcblxyXG4gICAgICAgIGlmIChpc01hbnVhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucGxhdGVTZXJ2aWNlLmdldExpc3QoKS5zdWJzY3JpYmUocGxhdGVzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTWFudWVsIHBsYWthIGR1cGxpY2F0ZSBrb250cm9sw7xcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGR1cGxpY2F0ZSA9IHBsYXRlcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwID0+IHAuY29kZS50cmltKCkudG9VcHBlckNhc2UoKSA9PT0gZWZmZWN0aXZlUGxhdGVOb1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpQbGF0ZUFscmVhZHlFeGlzdHMnLCBlZmZlY3RpdmVQbGF0ZU5vKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2hpZGVZZXNCdG46IHRydWUsIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksIGRpc21pc3NpYmxlOiBmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF0ZUlucHV0TW9kZSA9ICdsb29rdXAnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGxhdGVObyA9IGR1cGxpY2F0ZS5jb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIE1hbnVlbCBkb3JzZSBwbGFrYSBkdXBsaWNhdGUga29udHJvbMO8XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFpbGVyUGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnICYmIGVmZmVjdGl2ZVRyYWlsZXJQbGF0ZU5vKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhaWxlckR1cGxpY2F0ZSA9IHBsYXRlcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwID0+IHAuY29kZS50cmltKCkudG9VcHBlckNhc2UoKSA9PT0gZWZmZWN0aXZlVHJhaWxlclBsYXRlTm9cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0cmFpbGVyRHVwbGljYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlBsYXRlQWxyZWFkeUV4aXN0cycsIGVmZmVjdGl2ZVRyYWlsZXJQbGF0ZU5vKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2hpZGVZZXNCdG46IHRydWUsIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksIGRpc21pc3NpYmxlOiBmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFpbGVyUGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gdHJhaWxlckR1cGxpY2F0ZS5jb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGRvU2F2ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkb1NhdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Nb2RhbFZpc2libGVDaGFuZ2UodmFsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdmFsO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHZhbCk7XHJcbiAgICAgICAgaWYgKCF2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbk1vZGFsVmlzaWJsZUNoYW5nZShmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVRDS04odmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHRjID0gdmFsdWU/LnRyaW0oKTtcclxuICAgICAgICBpZiAoIXRjIHx8IHRjLmxlbmd0aCAhPT0gMTEpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoIS9eXFxkezExfSQvLnRlc3QodGMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRjWzBdID09PSAnMCcpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjb25zdCBkID0gdGMuc3BsaXQoJycpLm1hcChOdW1iZXIpO1xyXG4gICAgICAgIGNvbnN0IGQxMCA9ICgoZFswXSArIGRbMl0gKyBkWzRdICsgZFs2XSArIGRbOF0pICogNyAtIChkWzFdICsgZFszXSArIGRbNV0gKyBkWzddKSkgJSAxMDtcclxuICAgICAgICBpZiAoZDEwICE9PSBkWzldKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZDExID0gZC5zbGljZSgwLCAxMCkucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgJSAxMDtcclxuICAgICAgICByZXR1cm4gZDExID09PSBkWzEwXTtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbiIsIjxhYnAtbW9kYWwgW3Zpc2libGVdPVwidmlzaWJsZVwiICh2aXNpYmxlQ2hhbmdlKT1cIm9uTW9kYWxWaXNpYmxlQ2hhbmdlKCRldmVudClcIiBbb3B0aW9uc109XCJ7IHNpemU6ICd4bCcsIGJhY2tkcm9wOiAnc3RhdGljJyB9XCI+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICA8aDM+e3sgcmVjb3JkPy5kb2NFbnRyeSA/ICgnQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9uKSA6ICgnS2Fkb29nbHU6Ok5ld1JlY29yZCcgfCBhYnBMb2NhbGl6YXRpb24pIH19PC9oMz5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XHJcblxyXG4gICAgPCEtLSBHaXJpxZ8gLyDDh8Sxa8SxxZ8gQmlsZ2lsZXJpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jbG9jayBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6RW50cnlFeGl0SW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkVudHJ5RGF0ZVRpbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgIDxkeC1kYXRlLWJveFxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJlbnRyeURhdGVUaW1lXCJcclxuICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RXhpdERhdGVUaW1lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiZXhpdERhdGVUaW1lXCJcclxuICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxyXG4gICAgICAgICAgICBbc2hvd0NsZWFyQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6R2F0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgPGR4LXNlbGVjdC1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiZ2F0ZUNvZGVcIlxyXG4gICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJnYXRlRGF0YVwiXHJcbiAgICAgICAgICAgIGRpc3BsYXlFeHByPVwibmFtZVwiXHJcbiAgICAgICAgICAgIHZhbHVlRXhwcj1cImNvZGVcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpTZWxlY3RHYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgPC9keC1zZWxlY3QtYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQXJhw6cgQmlsZ2lsZXJpICsgU8O8csO8Y8O8ICYgRmlybWEgUm93IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBnLTJcIj5cclxuXHJcbiAgICAgIDwhLS0gU29sIGtvbG9uOiBBcmHDpyBCaWxnaWxlcmkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItMiBoLTEwMFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cnVjayBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6VmVoaWNsZUluZm8nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgIEFyYcOnIEhhcmVrZXQgVMO8csO8IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICBbZ2V0Rm5dPVwidHlwZURhdGFcIlxyXG4gICAgICAgICAgICAgIFtjb2x1bW5zXT1cInR5cGVDb2x1bW5zXCJcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZFR5cGVOYW1lXCJcclxuICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25UeXBlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OlBsYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBsYXRlSW5wdXRNb2RlID09PSAnbG9va3VwJ1wiPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkVmVoaWNsZVBsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJwbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJjb2RlXCJcclxuICAgICAgICAgICAgICAgIGtleUV4cHI9XCJjb2RlXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZFBsYXRlTm9cIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uUGxhdGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInBsYXRlSW5wdXRNb2RlID0gJ21hbnVhbCdcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1rZXlib2FyZCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6Ok1hbnVhbEVudHJ5JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJ1wiPlxyXG4gICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwibWFudWFsUGxhdGVOb1wiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlclBsYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgKG9uRm9jdXNPdXQpPVwib25NYW51YWxQbGF0ZUZvY3VzT3V0KClcIj5cclxuICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwicGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWxpc3QgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpTZWxlY3RGcm9tTGlzdCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6RG9yc2VQbGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9PT0gJ2xvb2t1cCdcIj5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFRyYWlsZXJQbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwicGxhdGVDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICBrZXlFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwic2VsZWN0ZWRUcmFpbGVyUGxhdGVOb1wiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25UcmFpbGVyUGxhdGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9ICdtYW51YWwnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEta2V5Ym9hcmQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpNYW51YWxFbnRyeScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmFpbGVyUGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnXCI+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJtYW51YWxUcmFpbGVyUGxhdGVOb1wiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlclBsYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgKG9uRm9jdXNPdXQpPVwib25NYW51YWxUcmFpbGVyUGxhdGVGb2N1c091dCgpXCI+XHJcbiAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9ICdsb29rdXAnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlzdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OlNlbGVjdEZyb21MaXN0JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gU2HEnyBrb2xvbjogU8O8csO8Y8O8ICYgRmlybWEgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItMiBoLTEwMFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaWQtY2FyZCBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6RHJpdmVyQW5kQ29tcGFueScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG1iLTFcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMCBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgIHt7IGlzVGNDaXRpemVuID8gKCdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbikgOiAnS2ltbGlrIE5vJyB9fSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtY2hlY2stYm94IFsodmFsdWUpXT1cImlzVGNDaXRpemVuXCIgW2Rpc2FibGVkXT1cIiEhcmVjb3JkXCIgdGV4dD1cIlQuQy4gVmF0YW5kYcWfxLFcIj48L2R4LWNoZWNrLWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRjTG9va3VwTW9kZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJ0Y05vXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaXNUY0NpdGl6ZW4gPyAoJ0thZG9vZ2x1OjpUY0lkZW50aXR5Tm8nIHwgYWJwTG9jYWxpemF0aW9uKSA6ICdLaW1saWsgTm8nXCJcclxuICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tc20gdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1RjUXVlcnlpbmdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJxdWVyeUNhcnJpZXJCeVRjTm8oKVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgICAge3sgKGlzVGNRdWVyeWluZyA/ICdLYWRvb2dsdTo6UXVlcnlpbmcnIDogJ0thZG9vZ2x1OjpRdWVyeScpIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwidGNMb29rdXBNb2RlID0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlzdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OlNlbGVjdEZyb21MaXN0JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGNMb29rdXBNb2RlXCI+XHJcbiAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgW2dldEZuXT1cImNhcnJpZXJEYXRhXCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwiY2FycmllckNvbHVtbnNcIlxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwic2VsZWN0ZWRDYXJyaWVyTmFtZVwiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvbkNhcnJpZXJMb29rdXBTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTFcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInRjTG9va3VwTW9kZSA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1rZXlib2FyZCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OlF1ZXJ5QnlUYycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBNZXZjdXQgc8O8csO8Y8O8OiBzYWRlY2UgYWTEsSBnw7ZzdGVyIChyZWFkb25seSkgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNOZXdDYXJyaWVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6RHJpdmVyTmFtZVN1cm5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cInNlbGVjdGVkQ2Fycmllck5hbWVcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8IS0tIFllbmkgc8O8csO8Y8O8OiBBZCwgU295YWQsIFRlbGVmb24gYWxhbmxhcsSxbsSxIGfDtnN0ZXIgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc05ld0NhcnJpZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6Rmlyc3ROYW1lJyB8IGFicExvY2FsaXphdGlvbiB9fSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgWyh2YWx1ZSldPVwibmV3Q2FycmllckZpcnN0bmFtZVwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6Rmlyc3ROYW1lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TGFzdE5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJuZXdDYXJyaWVyTGFzdG5hbWVcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2Fkb29nbHU6Okxhc3ROYW1lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpQaG9uZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwibmV3Q2FycmllclRlbFwiXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2Fkb29nbHU6OlBob25lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBzbWFsbCBweS0xIG1iLTNcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGUgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TmV3RHJpdmVyQWxlcnQnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpCdXNpbmVzc1BhcnRuZXInIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgIFtnZXRGbl09XCJidXNpbmVzc1BhcnRuZXJEYXRhXCJcclxuICAgICAgICAgIFtjb2x1bW5zXT1cImJ1c2luZXNzUGFydG5lckNvbHVtbnNcIlxyXG4gICAgICAgICAgZGlzcGxheU5hbWU9XCJjYXJkTmFtZVwiXHJcbiAgICAgICAgICBrZXlFeHByPVwiY2FyZENvZGVcIlxyXG4gICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZVwiXHJcbiAgICAgICAgICAoc2VsZWN0ZWQpPVwib25CdXNpbmVzc1BhcnRuZXJTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBBw6fEsWtsYW1hIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgIDxkeC10ZXh0LWFyZWFcclxuICAgICAgICBbKHZhbHVlKV09XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgW2hlaWdodF09XCI4MFwiXHJcbiAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgIDwvZHgtdGV4dC1hcmVhPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJjYW5jZWwoKVwiPlxyXG4gICAgICB7eyAnQWJwVWk6OkNhbmNlbCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGFicC1idXR0b25cclxuICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtc2F2ZVwiXHJcbiAgICAgIGJ1dHRvblR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAoY2xpY2spPVwic2F2ZSgpXCI+XHJcbiAgICAgIHt7ICdBYnBVaTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvYWJwLWJ1dHRvbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2FicC1tb2RhbD5cclxuIl19