@hitsoft/fbdocumentflow 0.0.1
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.
- package/README.md +24 -0
- package/config/enums/index.d.ts +1 -0
- package/config/enums/route-names.d.ts +3 -0
- package/config/fbdocumentflow-config.module.d.ts +8 -0
- package/config/index.d.ts +5 -0
- package/config/providers/document-scenario-route.provider.d.ts +9 -0
- package/config/providers/document-transfer-route.provider.d.ts +9 -0
- package/config/providers/index.d.ts +6 -0
- package/config/providers/partner-mapping-route.provider.d.ts +9 -0
- package/config/providers/project-parameter-route.provider.d.ts +9 -0
- package/config/providers/route.provider.d.ts +8 -0
- package/config/providers/sap-company-profile-route.provider.d.ts +9 -0
- package/config/public-api.d.ts +3 -0
- package/esm2020/config/enums/index.mjs +2 -0
- package/esm2020/config/enums/route-names.mjs +2 -0
- package/esm2020/config/fbdocumentflow-config.module.mjs +30 -0
- package/esm2020/config/hitsoft-fbdocumentflow-config.mjs +5 -0
- package/esm2020/config/providers/document-scenario-route.provider.mjs +20 -0
- package/esm2020/config/providers/document-transfer-route.provider.mjs +20 -0
- package/esm2020/config/providers/index.mjs +7 -0
- package/esm2020/config/providers/partner-mapping-route.provider.mjs +20 -0
- package/esm2020/config/providers/project-parameter-route.provider.mjs +20 -0
- package/esm2020/config/providers/route.provider.mjs +24 -0
- package/esm2020/config/providers/sap-company-profile-route.provider.mjs +20 -0
- package/esm2020/config/public-api.mjs +4 -0
- package/esm2020/hitsoft-fbdocumentflow.mjs +5 -0
- package/esm2020/lib/components/fbdocumentflow.component.mjs +42 -0
- package/esm2020/lib/components/hit-document-scenarios/components/hit-document-scenario.component.mjs +151 -0
- package/esm2020/lib/components/hit-document-scenarios/hit-document-scenario-routing.module.mjs +26 -0
- package/esm2020/lib/components/hit-document-scenarios/hit-document-scenario.module.mjs +24 -0
- package/esm2020/lib/components/hit-document-transfers/components/hit-document-transfer-detail.component.mjs +474 -0
- package/esm2020/lib/components/hit-document-transfers/components/hit-document-transfer.component.mjs +241 -0
- package/esm2020/lib/components/hit-document-transfers/hit-document-transfer-routing.module.mjs +33 -0
- package/esm2020/lib/components/hit-document-transfers/hit-document-transfer.module.mjs +25 -0
- package/esm2020/lib/components/hit-partner-mappings/components/hit-partner-mapping.component.mjs +115 -0
- package/esm2020/lib/components/hit-partner-mappings/hit-partner-mapping-routing.module.mjs +26 -0
- package/esm2020/lib/components/hit-partner-mappings/hit-partner-mapping.module.mjs +24 -0
- package/esm2020/lib/components/hit-project-parameters/components/hit-project-parameter.component.mjs +125 -0
- package/esm2020/lib/components/hit-project-parameters/hit-project-parameter-routing.module.mjs +26 -0
- package/esm2020/lib/components/hit-project-parameters/hit-project-parameter.module.mjs +24 -0
- package/esm2020/lib/components/hit-sap-company-profiles/components/hit-sap-company-profile.component.mjs +88 -0
- package/esm2020/lib/components/hit-sap-company-profiles/hit-sap-company-profile-routing.module.mjs +26 -0
- package/esm2020/lib/components/hit-sap-company-profiles/hit-sap-company-profile.module.mjs +24 -0
- package/esm2020/lib/fbdocumentflow-routing.module.mjs +35 -0
- package/esm2020/lib/fbdocumentflow.module.mjs +29 -0
- package/esm2020/lib/proxy/document-scenarios/document-scenario.service.mjs +27 -0
- package/esm2020/lib/proxy/document-scenarios/index.mjs +3 -0
- package/esm2020/lib/proxy/document-scenarios/models.mjs +6 -0
- package/esm2020/lib/proxy/document-transfers/document-transfer.service.mjs +54 -0
- package/esm2020/lib/proxy/document-transfers/index.mjs +3 -0
- package/esm2020/lib/proxy/document-transfers/models.mjs +32 -0
- package/esm2020/lib/proxy/partner-mappings/index.mjs +3 -0
- package/esm2020/lib/proxy/partner-mappings/models.mjs +2 -0
- package/esm2020/lib/proxy/partner-mappings/partner-mapping.service.mjs +27 -0
- package/esm2020/lib/proxy/project-parameters/index.mjs +3 -0
- package/esm2020/lib/proxy/project-parameters/models.mjs +2 -0
- package/esm2020/lib/proxy/project-parameters/sap-project-parameter.service.mjs +25 -0
- package/esm2020/lib/proxy/sap-company-profiles/index.mjs +3 -0
- package/esm2020/lib/proxy/sap-company-profiles/models.mjs +7 -0
- package/esm2020/lib/proxy/sap-company-profiles/sap-company-profile.service.mjs +27 -0
- package/esm2020/lib/services/fbdocumentflow.service.mjs +21 -0
- package/esm2020/public-api.mjs +7 -0
- package/fesm2015/hitsoft-fbdocumentflow-config.mjs +144 -0
- package/fesm2015/hitsoft-fbdocumentflow-config.mjs.map +1 -0
- package/fesm2015/hitsoft-fbdocumentflow.mjs +1647 -0
- package/fesm2015/hitsoft-fbdocumentflow.mjs.map +1 -0
- package/fesm2020/hitsoft-fbdocumentflow-config.mjs +144 -0
- package/fesm2020/hitsoft-fbdocumentflow-config.mjs.map +1 -0
- package/fesm2020/hitsoft-fbdocumentflow.mjs +1621 -0
- package/fesm2020/hitsoft-fbdocumentflow.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/fbdocumentflow.component.d.ts +13 -0
- package/lib/components/hit-document-scenarios/components/hit-document-scenario.component.d.ts +41 -0
- package/lib/components/hit-document-scenarios/hit-document-scenario-routing.module.d.ts +7 -0
- package/lib/components/hit-document-scenarios/hit-document-scenario.module.d.ts +13 -0
- package/lib/components/hit-document-transfers/components/hit-document-transfer-detail.component.d.ts +88 -0
- package/lib/components/hit-document-transfers/components/hit-document-transfer.component.d.ts +61 -0
- package/lib/components/hit-document-transfers/hit-document-transfer-routing.module.d.ts +7 -0
- package/lib/components/hit-document-transfers/hit-document-transfer.module.d.ts +14 -0
- package/lib/components/hit-partner-mappings/components/hit-partner-mapping.component.d.ts +29 -0
- package/lib/components/hit-partner-mappings/hit-partner-mapping-routing.module.d.ts +7 -0
- package/lib/components/hit-partner-mappings/hit-partner-mapping.module.d.ts +13 -0
- package/lib/components/hit-project-parameters/components/hit-project-parameter.component.d.ts +36 -0
- package/lib/components/hit-project-parameters/hit-project-parameter-routing.module.d.ts +7 -0
- package/lib/components/hit-project-parameters/hit-project-parameter.module.d.ts +13 -0
- package/lib/components/hit-sap-company-profiles/components/hit-sap-company-profile.component.d.ts +28 -0
- package/lib/components/hit-sap-company-profiles/hit-sap-company-profile-routing.module.d.ts +7 -0
- package/lib/components/hit-sap-company-profiles/hit-sap-company-profile.module.d.ts +13 -0
- package/lib/fbdocumentflow-routing.module.d.ts +7 -0
- package/lib/fbdocumentflow.module.d.ts +13 -0
- package/lib/proxy/document-scenarios/document-scenario.service.d.ts +16 -0
- package/lib/proxy/document-scenarios/index.d.ts +2 -0
- package/lib/proxy/document-scenarios/models.d.ts +38 -0
- package/lib/proxy/document-transfers/document-transfer.service.d.ts +26 -0
- package/lib/proxy/document-transfers/index.d.ts +2 -0
- package/lib/proxy/document-transfers/models.d.ts +119 -0
- package/lib/proxy/partner-mappings/index.d.ts +2 -0
- package/lib/proxy/partner-mappings/models.d.ts +23 -0
- package/lib/proxy/partner-mappings/partner-mapping.service.d.ts +16 -0
- package/lib/proxy/project-parameters/index.d.ts +2 -0
- package/lib/proxy/project-parameters/models.d.ts +25 -0
- package/lib/proxy/project-parameters/sap-project-parameter.service.d.ts +14 -0
- package/lib/proxy/sap-company-profiles/index.d.ts +2 -0
- package/lib/proxy/sap-company-profiles/models.d.ts +26 -0
- package/lib/proxy/sap-company-profiles/sap-company-profile.service.d.ts +16 -0
- package/lib/services/fbdocumentflow.service.d.ts +10 -0
- package/package.json +41 -0
- package/public-api.d.ts +3 -0
package/esm2020/lib/components/hit-document-transfers/components/hit-document-transfer.component.mjs
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { Component, HostListener } from '@angular/core';
|
|
2
|
+
import { Confirmation } from '@abp/ng.theme.shared';
|
|
3
|
+
import { finalize } from 'rxjs/operators';
|
|
4
|
+
import { SapDocumentLifecycle, } from '../../../proxy/document-transfers';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../../proxy/document-transfers";
|
|
7
|
+
import * as i2 from "../../../proxy/sap-company-profiles";
|
|
8
|
+
import * as i3 from "@angular/router";
|
|
9
|
+
import * as i4 from "@abp/ng.theme.shared";
|
|
10
|
+
import * as i5 from "@angular/common";
|
|
11
|
+
import * as i6 from "@angular/forms";
|
|
12
|
+
import * as i7 from "devextreme-angular";
|
|
13
|
+
import * as i8 from "devextreme-angular/ui/nested";
|
|
14
|
+
import * as i9 from "devextreme-angular/core";
|
|
15
|
+
import * as i10 from "@abp/ng.core";
|
|
16
|
+
export class HitDocumentTransferComponent {
|
|
17
|
+
constructor(service, companyService, router, confirmation) {
|
|
18
|
+
this.service = service;
|
|
19
|
+
this.companyService = companyService;
|
|
20
|
+
this.router = router;
|
|
21
|
+
this.confirmation = confirmation;
|
|
22
|
+
this.companies = [];
|
|
23
|
+
// Aktarıma uygun müşteri faturaları - Proje/NumAtCard/Belge No vb. daraltma tablonun kendi sütun
|
|
24
|
+
// filtreleriyle yapılır.
|
|
25
|
+
this.filterSourceCompanyId = '';
|
|
26
|
+
this.isListLoading = false;
|
|
27
|
+
this.eligibleInvoices = [];
|
|
28
|
+
// Spec §14 (18.09.2026 kararı) - süreç parametrik: Taslak seçilirse taslak faturalar, Kayıtlı
|
|
29
|
+
// seçilirse (varsayılan, mevcut/eski davranışla uyumlu) kayıtlı faturalar listelenir. Bu yalnızca
|
|
30
|
+
// KAYNAK faturanın modudur - hedefte oluşacak belgelerin modu (targetDocumentLifecycle) bundan
|
|
31
|
+
// BAĞIMSIZDIR ve aktarım oluşturma ekranında ayrıca seçilir (kullanıcı geri bildirimiyle netleştirildi).
|
|
32
|
+
this.sourceDocumentLifecycle = SapDocumentLifecycle.Posted;
|
|
33
|
+
// Kaynak HER ZAMAN bir Müşteri Faturasıdır (OINV) - etiket bunu netleştirir (kullanıcı geri
|
|
34
|
+
// bildirimiyle netleştirildi). İşlem Geçmişi tablosundaki "Hedef Belge Durumu" sütununda da (kullanıcı
|
|
35
|
+
// isteğiyle) AYNI etiketler kullanılır.
|
|
36
|
+
this.sourceDocumentLifecycleOptions = [
|
|
37
|
+
{ value: SapDocumentLifecycle.Posted, label: 'Kayıtlı Müşteri Faturası' },
|
|
38
|
+
{ value: SapDocumentLifecycle.Draft, label: 'Taslak Müşteri Faturası' },
|
|
39
|
+
];
|
|
40
|
+
// İşlem Geçmişi - daha önce başlatılmış (işlem bekliyor/devam eden/tamamlanan/hatalı/iptal edilen) aktarımlar.
|
|
41
|
+
// "Kapat"/"Listeye Dön" sonrası kullanıcının bir zincire tekrar dönüp bakabilmesi için.
|
|
42
|
+
this.isTransfersLoading = false;
|
|
43
|
+
this.transfers = [];
|
|
44
|
+
this.isHistoryExpanded = true;
|
|
45
|
+
// Durum sütununun header-filter/filter-row açılır listesinde okunabilir Türkçe etiketler gösterebilmesi
|
|
46
|
+
// için (aksi halde DevExtreme ham sayısal enum değerlerini - 0/1/2/3/4 - listeler).
|
|
47
|
+
this.transferStatusLookup = [
|
|
48
|
+
{ value: 0, text: 'İşlem Bekliyor' },
|
|
49
|
+
{ value: 1, text: 'Devam Ediyor' },
|
|
50
|
+
{ value: 2, text: 'Tamamlandı' },
|
|
51
|
+
{ value: 3, text: 'Hatalı' },
|
|
52
|
+
{ value: 4, text: 'İptal Edildi' },
|
|
53
|
+
];
|
|
54
|
+
this.eligibleInvoicesRequestId = 0;
|
|
55
|
+
this.transfersRequestId = 0;
|
|
56
|
+
// Bu menü için üç farklı yaklaşım denendi ve hepsi DevExtreme grid hücresi içinde başarısız oldu:
|
|
57
|
+
// (1) Bootstrap'ın data-bs-toggle="dropdown"'ı - Bootstrap JS bundle'ı yüklü değil, hiç tepki vermedi.
|
|
58
|
+
// (2) Saf Angular *ngIf dropdown'ı - DOM'da doğru açılıp kapanıyordu ama hücrenin/rowsview'ın
|
|
59
|
+
// overflow:hidden'ı yüzünden görünmüyordu (z-index bunu aşamaz, gerçek ortamda doğrulandı).
|
|
60
|
+
// (3) dx-drop-down-button - görsel olarak grid'in dışına taşıp doğru görünüyordu, ama onItemClick
|
|
61
|
+
// olayı bu ortamda güvenilir tetiklenmedi (gerçek ortamda doğrulandı: hiçbir tıklama handler'ı
|
|
62
|
+
// çağırmadı).
|
|
63
|
+
// Çözüm: menüyü grid'in TAMAMEN DIŞINA, component şablonunun en üst seviyesine taşımak - böylece ne
|
|
64
|
+
// overflow:hidden kırpması ne de *dxTemplate içi olay bağlama sorunları yaşanır. Zaten çalıştığı
|
|
65
|
+
// kanıtlanmış tekli "İşlemler" butonuyla (actionsTemplate) birebir aynı, basit (click) mekanizması.
|
|
66
|
+
this.openActionsRow = null;
|
|
67
|
+
this.actionsMenuPosition = { top: 0, left: 0 };
|
|
68
|
+
}
|
|
69
|
+
ngOnInit() {
|
|
70
|
+
this.companyService.getList({ maxResultCount: 1000, skipCount: 0, isActive: true }).subscribe(result => {
|
|
71
|
+
this.companies = result.items;
|
|
72
|
+
// Detay sayfasından "Listeye Dön"/"Kapat" ile geri gelindiğinde, kullanıcının o an üzerinde
|
|
73
|
+
// çalıştığı şirket kaybolmasın diye router state'teki şirket önceliklidir.
|
|
74
|
+
const returnedCompanyId = history.state?.sourceCompanyId;
|
|
75
|
+
const preferredCompanyId = returnedCompanyId && this.companies.some(c => c.id === returnedCompanyId) ? returnedCompanyId : undefined;
|
|
76
|
+
if (this.companies.length > 0 && !this.filterSourceCompanyId) {
|
|
77
|
+
this.filterSourceCompanyId = preferredCompanyId ?? this.companies[0].id;
|
|
78
|
+
this.search();
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
companyName(id) {
|
|
83
|
+
return this.companies.find(c => c.id === id)?.companyName ?? id;
|
|
84
|
+
}
|
|
85
|
+
search() {
|
|
86
|
+
if (!this.filterSourceCompanyId) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
this.loadEligibleInvoices();
|
|
90
|
+
this.loadTransfers();
|
|
91
|
+
}
|
|
92
|
+
loadEligibleInvoices() {
|
|
93
|
+
this.eligibleInvoicesSubscription?.unsubscribe();
|
|
94
|
+
this.eligibleInvoices = [];
|
|
95
|
+
const requestId = ++this.eligibleInvoicesRequestId;
|
|
96
|
+
this.isListLoading = true;
|
|
97
|
+
this.eligibleInvoicesSubscription = this.service
|
|
98
|
+
.getEligibleSourceInvoices({ sourceCompanyId: this.filterSourceCompanyId, sourceDocumentLifecycle: this.sourceDocumentLifecycle })
|
|
99
|
+
.pipe(finalize(() => (this.isListLoading = false)))
|
|
100
|
+
.subscribe(result => {
|
|
101
|
+
if (requestId !== this.eligibleInvoicesRequestId) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this.eligibleInvoices = result.items.map(item => ({ ...item, statusLabel: this.invoiceStatusLabel(item) }));
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
loadTransfers() {
|
|
108
|
+
this.transfersSubscription?.unsubscribe();
|
|
109
|
+
this.transfers = [];
|
|
110
|
+
const requestId = ++this.transfersRequestId;
|
|
111
|
+
this.isTransfersLoading = true;
|
|
112
|
+
this.transfersSubscription = this.service
|
|
113
|
+
.getList({ sourceCompanyId: this.filterSourceCompanyId, maxResultCount: 50, skipCount: 0, sorting: 'creationTime desc' })
|
|
114
|
+
.pipe(finalize(() => (this.isTransfersLoading = false)))
|
|
115
|
+
.subscribe(result => {
|
|
116
|
+
if (requestId !== this.transfersRequestId) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this.transfers = result.items;
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
invoiceStatusLabel(row) {
|
|
123
|
+
if (row.targetHasDuplicateNumAtCard) {
|
|
124
|
+
return 'Hedefte mevcut';
|
|
125
|
+
}
|
|
126
|
+
return row.isResolved ? 'Aktarılabilir' : 'Eşleştirme yok';
|
|
127
|
+
}
|
|
128
|
+
transferStatusLabel(status) {
|
|
129
|
+
return this.transferStatusLookup.find(s => s.value === status)?.text ?? String(status);
|
|
130
|
+
}
|
|
131
|
+
// Aynı kaynak belge için daha önce başlatılmış ama henüz çalıştırılmamış bir taslak varsa, "İşlemler"
|
|
132
|
+
// her seferinde CreateAsync çağırıp mükerrer bir taslak daha oluşturmasın diye önce kontrol edilir.
|
|
133
|
+
openTransferPage(row) {
|
|
134
|
+
this.service.findExistingDraft(this.filterSourceCompanyId, row.docEntry, this.sourceDocumentLifecycle).subscribe(existing => {
|
|
135
|
+
if (existing) {
|
|
136
|
+
const creationDate = existing.creationTime ? new Date(existing.creationTime).toLocaleString('tr-TR') : '';
|
|
137
|
+
this.confirmation
|
|
138
|
+
.warn(`Bu belge (${row.docNum}) için zaten bir taslak aktarım var (oluşturulma: ${creationDate}).`, 'FBDocumentFlow::AreYouSure', {
|
|
139
|
+
yesText: 'Evet, Aç',
|
|
140
|
+
cancelText: 'Hayır, Yeni Oluştur',
|
|
141
|
+
})
|
|
142
|
+
.subscribe(status => {
|
|
143
|
+
if (status === Confirmation.Status.confirm) {
|
|
144
|
+
this.router.navigate(['/fbdocumentflow/document-transfers', existing.id]);
|
|
145
|
+
}
|
|
146
|
+
else if (status === Confirmation.Status.reject) {
|
|
147
|
+
// Kullanıcı "Hayır, Yeni Taslak Oluştur" butonuna bastı: önceki taslak hiç çalıştırılmadığından
|
|
148
|
+
// (henüz hiçbir SAP belgesi yok) sessizce siliniyor - aksi halde her "Hayır" bir taslak daha
|
|
149
|
+
// biriktirir ve kullanıcı zaten yalnızca en son oluşturduğu taslakla ilgileniyor.
|
|
150
|
+
this.service.deleteDraft(existing.id).subscribe(() => this.navigateToNewTransfer(row));
|
|
151
|
+
}
|
|
152
|
+
// status === dismiss: kullanıcı diyaloğu kapattı (ör. dışarı tıkladı) - hiçbir şey yapılmaz,
|
|
153
|
+
// ne mevcut taslak açılır ne de silinir; önceki davranışta bu durum yanlışlıkla silme
|
|
154
|
+
// dalına düşüyordu.
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
this.navigateToNewTransfer(row);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
navigateToNewTransfer(row) {
|
|
163
|
+
this.router.navigate(['/fbdocumentflow/document-transfers', 'new'], {
|
|
164
|
+
state: {
|
|
165
|
+
sourceCompanyId: this.filterSourceCompanyId,
|
|
166
|
+
sourceCompanyName: this.companyName(this.filterSourceCompanyId),
|
|
167
|
+
docEntry: row.docEntry,
|
|
168
|
+
docNum: row.docNum,
|
|
169
|
+
numAtCard: row.numAtCard,
|
|
170
|
+
projectCode: row.projectCode,
|
|
171
|
+
targetCompanyId: row.targetCompanyId,
|
|
172
|
+
targetCompanyName: row.targetCompanyName,
|
|
173
|
+
currency: row.currency,
|
|
174
|
+
sourceDocumentLifecycle: this.sourceDocumentLifecycle,
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
openTransferDetail(row) {
|
|
179
|
+
this.router.navigate(['/fbdocumentflow/document-transfers', row.id]);
|
|
180
|
+
}
|
|
181
|
+
// Tamamlanmış/Devam Eden kayıtlar silinemez (backend zaten TransferNotEditable ile reddeder); "Sil"
|
|
182
|
+
// seçeneği yalnızca Taslak/Hatalı/İptal Edildi kayıtlarda görünür.
|
|
183
|
+
canDeleteTransfer(row) {
|
|
184
|
+
return row.status !== 1 && row.status !== 2; // 1=Devam Ediyor, 2=Tamamlandı
|
|
185
|
+
}
|
|
186
|
+
deleteTransfer(row) {
|
|
187
|
+
this.confirmation
|
|
188
|
+
.warn('FBDocumentFlow::DeleteConfirmationMessage', 'FBDocumentFlow::AreYouSure')
|
|
189
|
+
.subscribe(status => {
|
|
190
|
+
if (status === Confirmation.Status.confirm) {
|
|
191
|
+
this.service.delete(row.id).subscribe(() => this.loadTransfers());
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
toggleActions(row, event) {
|
|
196
|
+
event.stopPropagation();
|
|
197
|
+
if (this.openActionsRow === row) {
|
|
198
|
+
this.openActionsRow = null;
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
202
|
+
this.actionsMenuPosition = { top: rect.bottom + window.scrollY, left: rect.left + window.scrollX };
|
|
203
|
+
this.openActionsRow = row;
|
|
204
|
+
}
|
|
205
|
+
closeActionsMenu() {
|
|
206
|
+
this.openActionsRow = null;
|
|
207
|
+
}
|
|
208
|
+
selectAction(action, row) {
|
|
209
|
+
this.openActionsRow = null;
|
|
210
|
+
if (action === 'view') {
|
|
211
|
+
this.openTransferDetail(row);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
this.deleteTransfer(row);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Spec §5 - muhatap eşleştirmesi bulunamayan durumda kullanıcıdan hedef SAP şirketindeki doğru
|
|
218
|
+
// Müşteri/Satıcı CardCode seçimi istenecektir; bu seçimin Muhatap Eşleştirmeleri ekranına
|
|
219
|
+
// yönlendirilerek yaptırılması spec tarafından açıkça izin verilen bir arayüz seçeneğidir.
|
|
220
|
+
// Müşteri CardCode burada tahmin değildir: ResolveFirstTargetAsync tam olarak
|
|
221
|
+
// "SourceCompanyId + CustomerCardCode == OINV.CardCode" eşleşmesini aradığından, eksik olan
|
|
222
|
+
// eşleştirmenin CustomerCardCode değeri zaten bu faturanın kendi CardCode'udur.
|
|
223
|
+
goToPartnerMapping(customerCardCode, customerCardName) {
|
|
224
|
+
this.router.navigate(['/fbdocumentflow/partner-mappings'], {
|
|
225
|
+
state: { sourceCompanyId: this.filterSourceCompanyId, customerCardCode, customerCardName },
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
toggleHistory() {
|
|
229
|
+
this.isHistoryExpanded = !this.isHistoryExpanded;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
HitDocumentTransferComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentTransferComponent, deps: [{ token: i1.DocumentTransferService }, { token: i2.SapCompanyProfileService }, { token: i3.Router }, { token: i4.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
233
|
+
HitDocumentTransferComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitDocumentTransferComponent, selector: "hit-document-transfer", host: { listeners: { "document:click": "closeActionsMenu()" } }, ngImport: i0, template: "<div class=\"card mb-3\">\n <div class=\"card-header py-3\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::Menu:DocumentTransfers' | abpLocalization }}</h5>\n </div>\n <div class=\"card-body pt-3\">\n <div class=\"row g-3 align-items-end mb-3\">\n <div class=\"col-md-4\">\n <label class=\"form-label\">Kaynak \u015Eirket</label>\n <select class=\"form-select\" [(ngModel)]=\"filterSourceCompanyId\" (ngModelChange)=\"search()\">\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n </div>\n <div class=\"col-md-3\">\n <label class=\"form-label\">Kaynak Belge Durumu</label>\n <select class=\"form-select\" [(ngModel)]=\"sourceDocumentLifecycle\" (ngModelChange)=\"search()\">\n <option *ngFor=\"let o of sourceDocumentLifecycleOptions\" [ngValue]=\"o.value\">{{ o.label }}</option>\n </select>\n </div>\n <div class=\"col-auto\">\n <button class=\"btn btn-outline-primary\" (click)=\"search()\" [disabled]=\"isListLoading || isTransfersLoading\" title=\"Listeyi yenile\">\n <i class=\"fa fa-refresh me-1\"></i>Yenile\n </button>\n </div>\n </div>\n\n <h6 class=\"mb-2\">Aktar\u0131ma Uygun M\u00FC\u015Fteri Faturalar\u0131</h6>\n <small class=\"text-muted d-block mb-2\">Belge No, NumAtCard, Proje vb. ile daraltmak i\u00E7in tablo ba\u015Fl\u0131klar\u0131ndaki arama kutular\u0131n\u0131 kullan\u0131n.</small>\n\n <div *ngIf=\"isListLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">Faturalar SAP'tan y\u00FCkleniyor...</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isListLoading\"\n [dataSource]=\"eligibleInvoices\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [height]=\"'45vh'\"\n [keyboardNavigation]=\"{ enabled: false }\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n\n <dxi-column caption=\"\u0130\u015Flemler\" cellTemplate=\"actionsTemplate\" [width]=\"100\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n <dxi-column dataField=\"docNum\" caption=\"Belge No\" dataType=\"number\" sortOrder=\"desc\" [width]=\"100\"></dxi-column>\n <dxi-column dataField=\"numAtCard\" caption=\"NumAtCard\" [width]=\"140\"></dxi-column>\n <dxi-column dataField=\"projectCode\" caption=\"Proje\" [width]=\"90\"></dxi-column>\n <dxi-column dataField=\"cardCode\" caption=\"OINV.CardCode\" [width]=\"140\"></dxi-column>\n <dxi-column dataField=\"targetCompanyName\" caption=\"Hedef \u015Eirket\"></dxi-column>\n <dxi-column dataField=\"currency\" caption=\"D\u00F6viz\" [width]=\"80\"></dxi-column>\n <dxi-column dataField=\"statusLabel\" caption=\"Durum\" cellTemplate=\"statusTemplate\" [width]=\"130\"></dxi-column>\n\n <div *dxTemplate=\"let cell of 'actionsTemplate'\">\n <button\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"openTransferPage(cell.data); $event.target.blur()\"\n [disabled]=\"!cell.data.isResolved || cell.data.targetHasDuplicateNumAtCard\"\n >\n \u0130\u015Flemler\n </button>\n </div>\n\n <div *dxTemplate=\"let cell of 'statusTemplate'\" class=\"d-flex flex-column align-items-start py-2\">\n <span\n class=\"badge\"\n [class.bg-success]=\"invoiceStatusLabel(cell.data) === 'Aktar\u0131labilir'\"\n [class.bg-secondary]=\"invoiceStatusLabel(cell.data) === 'Hedefte mevcut'\"\n [class.bg-warning]=\"invoiceStatusLabel(cell.data) === 'E\u015Fle\u015Ftirme yok'\"\n >\n {{ invoiceStatusLabel(cell.data) }}\n </span>\n <button\n *ngIf=\"!cell.data.isResolved\"\n type=\"button\"\n class=\"btn btn-outline-warning btn-sm mt-2 py-0 px-2\"\n style=\"font-size: 0.72rem\"\n (click)=\"goToPartnerMapping(cell.data.cardCode, cell.data.cardName)\"\n title=\"Muhatap E\u015Fle\u015Ftirmeleri ekran\u0131na git\"\n >\n <i class=\"fa fa-link me-1\"></i>E\u015Fle\u015Ftir\n </button>\n </div>\n </dx-data-grid>\n\n <small class=\"text-muted d-block mt-2\">\n \"Hedefte mevcut\" bilgisi, kaynak OINV.NumAtCard de\u011Ferinin hedef \u015Firkette OPCH.NumAtCard alan\u0131nda bulunmas\u0131 halinde g\u00F6sterilir.\n </small>\n </div>\n</div>\n\n<div class=\"card\">\n <div class=\"card-header py-3\" role=\"button\" (click)=\"toggleHistory()\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <h5 class=\"card-title mb-0\">\u0130\u015Flem Ge\u00E7mi\u015Fi</h5>\n <i class=\"fa\" [class.fa-chevron-up]=\"isHistoryExpanded\" [class.fa-chevron-down]=\"!isHistoryExpanded\"></i>\n </div>\n </div>\n <div class=\"card-body pt-3\" [hidden]=\"!isHistoryExpanded\">\n <small class=\"text-muted d-block mb-2\">Se\u00E7ili kaynak \u015Firket i\u00E7in daha \u00F6nce ba\u015Flat\u0131lm\u0131\u015F aktar\u0131mlar (i\u015Flem bekliyor, devam eden, tamamlanan, hatal\u0131, iptal edilen).</small>\n\n <div *ngIf=\"isTransfersLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">Y\u00FCkleniyor...</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isTransfersLoading\"\n [dataSource]=\"transfers\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [height]=\"'40vh'\"\n [keyboardNavigation]=\"{ enabled: false }\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n\n <dxi-column caption=\"\u0130\u015Flemler\" cellTemplate=\"viewTemplate\" [width]=\"120\" [allowFiltering]=\"false\" [allowSorting]=\"false\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"sourceOinvDocNum\" caption=\"Kaynak Belge\" [width]=\"110\"></dxi-column>\n <dxi-column dataField=\"projectCode\" caption=\"Proje\" [width]=\"90\"></dxi-column>\n <dxi-column dataField=\"intercompanyId\" caption=\"Intercompany Id\"></dxi-column>\n <!-- Kullan\u0131c\u0131 geri bildirimiyle tespit edildi: \u0130\u015Flem Ge\u00E7mi\u015Fi'nde bir kayd\u0131n normal (Kay\u0131tl\u0131) mi\n yoksa Taslak m\u0131 oldu\u011Fu hi\u00E7 g\u00F6r\u00FCnm\u00FCyordu - Aktar\u0131m Durumu (Durum s\u00FCtunu) ile kar\u0131\u015Ft\u0131r\u0131lmas\u0131n diye\n Kaynak/Hedef Belge Durumu ayr\u0131 s\u00FCtunlar olarak eklendi (bkz. spec \u00A714). -->\n <dxi-column dataField=\"sourceDocumentLifecycle\" caption=\"Kaynak Belge Durumu\" [width]=\"140\">\n <dxo-lookup [dataSource]=\"sourceDocumentLifecycleOptions\" valueExpr=\"value\" displayExpr=\"label\"></dxo-lookup>\n </dxi-column>\n <dxi-column dataField=\"targetDocumentLifecycle\" caption=\"Hedef Belge Durumu\" [width]=\"140\">\n <dxo-lookup [dataSource]=\"sourceDocumentLifecycleOptions\" valueExpr=\"value\" displayExpr=\"label\"></dxo-lookup>\n </dxi-column>\n <dxi-column dataField=\"status\" caption=\"Durum\" cellTemplate=\"transferStatusTemplate\" [width]=\"130\">\n <dxo-lookup [dataSource]=\"transferStatusLookup\" valueExpr=\"value\" displayExpr=\"text\"></dxo-lookup>\n </dxi-column>\n <dxi-column\n dataField=\"creationTime\"\n caption=\"Olu\u015Fturma Tarihi\"\n dataType=\"datetime\"\n format=\"dd.MM.yyyy HH:mm\"\n [width]=\"150\"\n sortOrder=\"desc\"\n ></dxi-column>\n\n <div *dxTemplate=\"let cell of 'viewTemplate'\">\n <button class=\"btn btn-sm btn-outline-secondary\" type=\"button\" (click)=\"toggleActions(cell.data, $event)\">\n \u0130\u015Flemler <i class=\"fa fa-caret-down ms-1\"></i>\n </button>\n </div>\n\n <div *dxTemplate=\"let cell of 'transferStatusTemplate'\">\n <span\n class=\"badge\"\n [class.bg-secondary]=\"cell.value === 0\"\n [class.bg-primary]=\"cell.value === 1\"\n [class.bg-success]=\"cell.value === 2\"\n [class.bg-danger]=\"cell.value === 3\"\n [class.bg-warning]=\"cell.value === 4\"\n >\n {{ transferStatusLabel(cell.value) }}\n </span>\n </div>\n </dx-data-grid>\n </div>\n</div>\n\n<!-- Grid'in DI\u015EINDA: dx-data-grid h\u00FCcrelerinin overflow:hidden k\u0131rpmas\u0131 ve *dxTemplate i\u00E7i olay ba\u011Flama\n sorunlar\u0131 ya\u015Fanmas\u0131n diye \"\u0130\u015Flemler\" men\u00FCs\u00FC buraya, component \u015Fablonunun en \u00FCst seviyesine ta\u015F\u0131nd\u0131. -->\n<ul\n *ngIf=\"openActionsRow as row\"\n class=\"list-unstyled m-0 bg-white border rounded shadow-sm\"\n [style.position]=\"'absolute'\"\n [style.top.px]=\"actionsMenuPosition.top\"\n [style.left.px]=\"actionsMenuPosition.left\"\n style=\"z-index: 1050; min-width: 140px; padding: 4px 0\"\n (click)=\"$event.stopPropagation()\"\n>\n <li>\n <button type=\"button\" class=\"d-block w-100 text-start border-0 bg-white px-3 py-1\" (click)=\"selectAction('view', row)\">\n <i class=\"fa fa-eye me-2\"></i>G\u00F6r\u00FCnt\u00FCle\n </button>\n </li>\n <li *ngIf=\"canDeleteTransfer(row)\">\n <button type=\"button\" class=\"d-block w-100 text-start border-0 bg-white px-3 py-1 text-danger\" (click)=\"selectAction('delete', row)\">\n <i class=\"fa fa-trash me-2\"></i>Sil\n </button>\n </li>\n</ul>\n", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i8.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i8.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "dataSource", "groupInterval", "height", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i8.DxoLookupComponent, selector: "dxo-lookup", inputs: ["allowClearing", "calculateCellValue", "dataSource", "displayExpr", "valueExpr"] }, { kind: "component", type: i8.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i8.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i8.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "directive", type: i9.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "pipe", type: i10.LocalizationPipe, name: "abpLocalization" }] });
|
|
234
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentTransferComponent, decorators: [{
|
|
235
|
+
type: Component,
|
|
236
|
+
args: [{ selector: 'hit-document-transfer', template: "<div class=\"card mb-3\">\n <div class=\"card-header py-3\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::Menu:DocumentTransfers' | abpLocalization }}</h5>\n </div>\n <div class=\"card-body pt-3\">\n <div class=\"row g-3 align-items-end mb-3\">\n <div class=\"col-md-4\">\n <label class=\"form-label\">Kaynak \u015Eirket</label>\n <select class=\"form-select\" [(ngModel)]=\"filterSourceCompanyId\" (ngModelChange)=\"search()\">\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n </div>\n <div class=\"col-md-3\">\n <label class=\"form-label\">Kaynak Belge Durumu</label>\n <select class=\"form-select\" [(ngModel)]=\"sourceDocumentLifecycle\" (ngModelChange)=\"search()\">\n <option *ngFor=\"let o of sourceDocumentLifecycleOptions\" [ngValue]=\"o.value\">{{ o.label }}</option>\n </select>\n </div>\n <div class=\"col-auto\">\n <button class=\"btn btn-outline-primary\" (click)=\"search()\" [disabled]=\"isListLoading || isTransfersLoading\" title=\"Listeyi yenile\">\n <i class=\"fa fa-refresh me-1\"></i>Yenile\n </button>\n </div>\n </div>\n\n <h6 class=\"mb-2\">Aktar\u0131ma Uygun M\u00FC\u015Fteri Faturalar\u0131</h6>\n <small class=\"text-muted d-block mb-2\">Belge No, NumAtCard, Proje vb. ile daraltmak i\u00E7in tablo ba\u015Fl\u0131klar\u0131ndaki arama kutular\u0131n\u0131 kullan\u0131n.</small>\n\n <div *ngIf=\"isListLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">Faturalar SAP'tan y\u00FCkleniyor...</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isListLoading\"\n [dataSource]=\"eligibleInvoices\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [height]=\"'45vh'\"\n [keyboardNavigation]=\"{ enabled: false }\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n\n <dxi-column caption=\"\u0130\u015Flemler\" cellTemplate=\"actionsTemplate\" [width]=\"100\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n <dxi-column dataField=\"docNum\" caption=\"Belge No\" dataType=\"number\" sortOrder=\"desc\" [width]=\"100\"></dxi-column>\n <dxi-column dataField=\"numAtCard\" caption=\"NumAtCard\" [width]=\"140\"></dxi-column>\n <dxi-column dataField=\"projectCode\" caption=\"Proje\" [width]=\"90\"></dxi-column>\n <dxi-column dataField=\"cardCode\" caption=\"OINV.CardCode\" [width]=\"140\"></dxi-column>\n <dxi-column dataField=\"targetCompanyName\" caption=\"Hedef \u015Eirket\"></dxi-column>\n <dxi-column dataField=\"currency\" caption=\"D\u00F6viz\" [width]=\"80\"></dxi-column>\n <dxi-column dataField=\"statusLabel\" caption=\"Durum\" cellTemplate=\"statusTemplate\" [width]=\"130\"></dxi-column>\n\n <div *dxTemplate=\"let cell of 'actionsTemplate'\">\n <button\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"openTransferPage(cell.data); $event.target.blur()\"\n [disabled]=\"!cell.data.isResolved || cell.data.targetHasDuplicateNumAtCard\"\n >\n \u0130\u015Flemler\n </button>\n </div>\n\n <div *dxTemplate=\"let cell of 'statusTemplate'\" class=\"d-flex flex-column align-items-start py-2\">\n <span\n class=\"badge\"\n [class.bg-success]=\"invoiceStatusLabel(cell.data) === 'Aktar\u0131labilir'\"\n [class.bg-secondary]=\"invoiceStatusLabel(cell.data) === 'Hedefte mevcut'\"\n [class.bg-warning]=\"invoiceStatusLabel(cell.data) === 'E\u015Fle\u015Ftirme yok'\"\n >\n {{ invoiceStatusLabel(cell.data) }}\n </span>\n <button\n *ngIf=\"!cell.data.isResolved\"\n type=\"button\"\n class=\"btn btn-outline-warning btn-sm mt-2 py-0 px-2\"\n style=\"font-size: 0.72rem\"\n (click)=\"goToPartnerMapping(cell.data.cardCode, cell.data.cardName)\"\n title=\"Muhatap E\u015Fle\u015Ftirmeleri ekran\u0131na git\"\n >\n <i class=\"fa fa-link me-1\"></i>E\u015Fle\u015Ftir\n </button>\n </div>\n </dx-data-grid>\n\n <small class=\"text-muted d-block mt-2\">\n \"Hedefte mevcut\" bilgisi, kaynak OINV.NumAtCard de\u011Ferinin hedef \u015Firkette OPCH.NumAtCard alan\u0131nda bulunmas\u0131 halinde g\u00F6sterilir.\n </small>\n </div>\n</div>\n\n<div class=\"card\">\n <div class=\"card-header py-3\" role=\"button\" (click)=\"toggleHistory()\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <h5 class=\"card-title mb-0\">\u0130\u015Flem Ge\u00E7mi\u015Fi</h5>\n <i class=\"fa\" [class.fa-chevron-up]=\"isHistoryExpanded\" [class.fa-chevron-down]=\"!isHistoryExpanded\"></i>\n </div>\n </div>\n <div class=\"card-body pt-3\" [hidden]=\"!isHistoryExpanded\">\n <small class=\"text-muted d-block mb-2\">Se\u00E7ili kaynak \u015Firket i\u00E7in daha \u00F6nce ba\u015Flat\u0131lm\u0131\u015F aktar\u0131mlar (i\u015Flem bekliyor, devam eden, tamamlanan, hatal\u0131, iptal edilen).</small>\n\n <div *ngIf=\"isTransfersLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">Y\u00FCkleniyor...</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isTransfersLoading\"\n [dataSource]=\"transfers\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [height]=\"'40vh'\"\n [keyboardNavigation]=\"{ enabled: false }\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n\n <dxi-column caption=\"\u0130\u015Flemler\" cellTemplate=\"viewTemplate\" [width]=\"120\" [allowFiltering]=\"false\" [allowSorting]=\"false\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"sourceOinvDocNum\" caption=\"Kaynak Belge\" [width]=\"110\"></dxi-column>\n <dxi-column dataField=\"projectCode\" caption=\"Proje\" [width]=\"90\"></dxi-column>\n <dxi-column dataField=\"intercompanyId\" caption=\"Intercompany Id\"></dxi-column>\n <!-- Kullan\u0131c\u0131 geri bildirimiyle tespit edildi: \u0130\u015Flem Ge\u00E7mi\u015Fi'nde bir kayd\u0131n normal (Kay\u0131tl\u0131) mi\n yoksa Taslak m\u0131 oldu\u011Fu hi\u00E7 g\u00F6r\u00FCnm\u00FCyordu - Aktar\u0131m Durumu (Durum s\u00FCtunu) ile kar\u0131\u015Ft\u0131r\u0131lmas\u0131n diye\n Kaynak/Hedef Belge Durumu ayr\u0131 s\u00FCtunlar olarak eklendi (bkz. spec \u00A714). -->\n <dxi-column dataField=\"sourceDocumentLifecycle\" caption=\"Kaynak Belge Durumu\" [width]=\"140\">\n <dxo-lookup [dataSource]=\"sourceDocumentLifecycleOptions\" valueExpr=\"value\" displayExpr=\"label\"></dxo-lookup>\n </dxi-column>\n <dxi-column dataField=\"targetDocumentLifecycle\" caption=\"Hedef Belge Durumu\" [width]=\"140\">\n <dxo-lookup [dataSource]=\"sourceDocumentLifecycleOptions\" valueExpr=\"value\" displayExpr=\"label\"></dxo-lookup>\n </dxi-column>\n <dxi-column dataField=\"status\" caption=\"Durum\" cellTemplate=\"transferStatusTemplate\" [width]=\"130\">\n <dxo-lookup [dataSource]=\"transferStatusLookup\" valueExpr=\"value\" displayExpr=\"text\"></dxo-lookup>\n </dxi-column>\n <dxi-column\n dataField=\"creationTime\"\n caption=\"Olu\u015Fturma Tarihi\"\n dataType=\"datetime\"\n format=\"dd.MM.yyyy HH:mm\"\n [width]=\"150\"\n sortOrder=\"desc\"\n ></dxi-column>\n\n <div *dxTemplate=\"let cell of 'viewTemplate'\">\n <button class=\"btn btn-sm btn-outline-secondary\" type=\"button\" (click)=\"toggleActions(cell.data, $event)\">\n \u0130\u015Flemler <i class=\"fa fa-caret-down ms-1\"></i>\n </button>\n </div>\n\n <div *dxTemplate=\"let cell of 'transferStatusTemplate'\">\n <span\n class=\"badge\"\n [class.bg-secondary]=\"cell.value === 0\"\n [class.bg-primary]=\"cell.value === 1\"\n [class.bg-success]=\"cell.value === 2\"\n [class.bg-danger]=\"cell.value === 3\"\n [class.bg-warning]=\"cell.value === 4\"\n >\n {{ transferStatusLabel(cell.value) }}\n </span>\n </div>\n </dx-data-grid>\n </div>\n</div>\n\n<!-- Grid'in DI\u015EINDA: dx-data-grid h\u00FCcrelerinin overflow:hidden k\u0131rpmas\u0131 ve *dxTemplate i\u00E7i olay ba\u011Flama\n sorunlar\u0131 ya\u015Fanmas\u0131n diye \"\u0130\u015Flemler\" men\u00FCs\u00FC buraya, component \u015Fablonunun en \u00FCst seviyesine ta\u015F\u0131nd\u0131. -->\n<ul\n *ngIf=\"openActionsRow as row\"\n class=\"list-unstyled m-0 bg-white border rounded shadow-sm\"\n [style.position]=\"'absolute'\"\n [style.top.px]=\"actionsMenuPosition.top\"\n [style.left.px]=\"actionsMenuPosition.left\"\n style=\"z-index: 1050; min-width: 140px; padding: 4px 0\"\n (click)=\"$event.stopPropagation()\"\n>\n <li>\n <button type=\"button\" class=\"d-block w-100 text-start border-0 bg-white px-3 py-1\" (click)=\"selectAction('view', row)\">\n <i class=\"fa fa-eye me-2\"></i>G\u00F6r\u00FCnt\u00FCle\n </button>\n </li>\n <li *ngIf=\"canDeleteTransfer(row)\">\n <button type=\"button\" class=\"d-block w-100 text-start border-0 bg-white px-3 py-1 text-danger\" (click)=\"selectAction('delete', row)\">\n <i class=\"fa fa-trash me-2\"></i>Sil\n </button>\n </li>\n</ul>\n" }]
|
|
237
|
+
}], ctorParameters: function () { return [{ type: i1.DocumentTransferService }, { type: i2.SapCompanyProfileService }, { type: i3.Router }, { type: i4.ConfirmationService }]; }, propDecorators: { closeActionsMenu: [{
|
|
238
|
+
type: HostListener,
|
|
239
|
+
args: ['document:click']
|
|
240
|
+
}] } });
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWRvY3VtZW50LXRyYW5zZmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtdHJhbnNmZXJzL2NvbXBvbmVudHMvaGl0LWRvY3VtZW50LXRyYW5zZmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtdHJhbnNmZXJzL2NvbXBvbmVudHMvaGl0LWRvY3VtZW50LXRyYW5zZmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQXVCLE1BQU0sc0JBQXNCLENBQUM7QUFFekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFJTCxvQkFBb0IsR0FDckIsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBYTNDLE1BQU0sT0FBTyw0QkFBNEI7SUFzQ3ZDLFlBQ1UsT0FBZ0MsRUFDaEMsY0FBd0MsRUFDeEMsTUFBYyxFQUNkLFlBQWlDO1FBSGpDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUEwQjtRQUN4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBekMzQyxjQUFTLEdBQTJCLEVBQUUsQ0FBQztRQUV2QyxpR0FBaUc7UUFDakcseUJBQXlCO1FBQ3pCLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUMzQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixxQkFBZ0IsR0FBK0IsRUFBRSxDQUFDO1FBRWxE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LENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELCtGQUErRjtJQUMvRiwwRkFBMEY7SUFDMUYsMkZBQTJGO0lBQzNGLDhFQUE4RTtJQUM5RSw0RkFBNEY7SUFDNUYsZ0ZBQWdGO0lBQ2hGLGtCQUFrQixDQUFDLGdCQUF5QixFQUFFLGdCQUF5QjtRQUNyRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLEVBQUU7WUFDekQsS0FBSyxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRTtTQUMzRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNuRCxDQUFDOzt5SEFoUVUsNEJBQTRCOzZHQUE1Qiw0QkFBNEIsOEhDdkJ6QyxtelRBZ01BOzJGRHpLYSw0QkFBNEI7a0JBSnhDLFNBQVM7K0JBQ0UsdUJBQXVCOzRNQXdPakMsZ0JBQWdCO3NCQURmLFlBQVk7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBEb2N1bWVudFRyYW5zZmVyRHRvLFxuICBEb2N1bWVudFRyYW5zZmVyU2VydmljZSxcbiAgRWxpZ2libGVTb3VyY2VJbnZvaWNlRHRvLFxuICBTYXBEb2N1bWVudExpZmVjeWNsZSxcbn0gZnJvbSAnLi4vLi4vLi4vcHJveHkvZG9jdW1lbnQtdHJhbnNmZXJzJztcbmltcG9ydCB7IFNhcENvbXBhbnlQcm9maWxlRHRvLCBTYXBDb21wYW55UHJvZmlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9wcm94eS9zYXAtY29tcGFueS1wcm9maWxlcyc7XG5cbi8vIFwiRHVydW1cIiBzw7x0dW51IEFrdGFyxLFtYSBVeWd1biBGYXR1cmFsYXIgdGFibG9zdW5kYSB0ZWsgYmlyIFNBUCBhbGFuxLEgZGXEn2lsLCBiaXJkZW4gZmF6bGEgYWxhbmRhblxuLy8gKGlzUmVzb2x2ZWQsIHRhcmdldEhhc0R1cGxpY2F0ZU51bUF0Q2FyZCkgaGVzYXBsYW5hbiBiaXIgZXRpa2V0LiBEZXZFeHRyZW1lIGZpbHRyZS9iYcWfbMSxay1maWx0cmVzaVxuLy8geWFsbsSxemNhIGdlcsOnZWsgYmlyIGRhdGFGaWVsZCDDvHplcmluZGVuIMOnYWzEscWfYWJpbGRpxJ9pbmRlbiwgYnUgaGVzYXBsYW5hbiBldGlrZXQgc2F0xLFyIHZlcmlzaW5lIGF5csSxXG4vLyBiaXIgYWxhbiBvbGFyYWsgZWtsZW5peW9yIC0gYWtzaSBoYWxkZSBcIkR1cnVtXCIgc8O8dHVudW5kYSBoacOnIGZpbHRyZWxlbWUgeWFwxLFsYW3EsXlvcmR1LlxudHlwZSBFbGlnaWJsZVNvdXJjZUludm9pY2VSb3cgPSBFbGlnaWJsZVNvdXJjZUludm9pY2VEdG8gJiB7IHN0YXR1c0xhYmVsOiBzdHJpbmcgfTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGl0LWRvY3VtZW50LXRyYW5zZmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hpdC1kb2N1bWVudC10cmFuc2Zlci5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEhpdERvY3VtZW50VHJhbnNmZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb21wYW5pZXM6IFNhcENvbXBhbnlQcm9maWxlRHRvW10gPSBbXTtcblxuICAvLyBBa3RhcsSxbWEgdXlndW4gbcO8xZ90ZXJpIGZhdHVyYWxhcsSxIC0gUHJvamUvTnVtQXRDYXJkL0JlbGdlIE5vIHZiLiBkYXJhbHRtYSB0YWJsb251biBrZW5kaSBzw7x0dW5cbiAgLy8gZmlsdHJlbGVyaXlsZSB5YXDEsWzEsXIuXG4gIGZpbHRlclNvdXJjZUNvbXBhbnlJZCA9ICcnO1xuICBpc0xpc3RMb2FkaW5nID0gZmFsc2U7XG4gIGVsaWdpYmxlSW52b2ljZXM6IEVsaWdpYmxlU291cmNlSW52b2ljZVJvd1tdID0gW107XG5cbiAgLy8gU3BlYyDCpzE0ICgxOC4wOS4yMDI2IGthcmFyxLEpIC0gc8O8cmXDpyBwYXJhbWV0cmlrOiBUYXNsYWsgc2XDp2lsaXJzZSB0YXNsYWsgZmF0dXJhbGFyLCBLYXnEsXRsxLFcbiAgLy8gc2XDp2lsaXJzZSAodmFyc2F5xLFsYW4sIG1ldmN1dC9lc2tpIGRhdnJhbsSxxZ9sYSB1eXVtbHUpIGthecSxdGzEsSBmYXR1cmFsYXIgbGlzdGVsZW5pci4gQnUgeWFsbsSxemNhXG4gIC8vIEtBWU5BSyBmYXR1cmFuxLFuIG1vZHVkdXIgLSBoZWRlZnRlIG9sdcWfYWNhayBiZWxnZWxlcmluIG1vZHUgKHRhcmdldERvY3VtZW50TGlmZWN5Y2xlKSBidW5kYW5cbiAgLy8gQkHEnklNU0laRElSIHZlIGFrdGFyxLFtIG9sdcWfdHVybWEgZWtyYW7EsW5kYSBheXLEsWNhIHNlw6dpbGlyIChrdWxsYW7EsWPEsSBnZXJpIGJpbGRpcmltaXlsZSBuZXRsZcWfdGlyaWxkaSkuXG4gIHNvdXJjZURvY3VtZW50TGlmZWN5Y2xlID0gU2FwRG9jdW1lbnRMaWZlY3ljbGUuUG9zdGVkO1xuICAvLyBLYXluYWsgSEVSIFpBTUFOIGJpciBNw7zFn3RlcmkgRmF0dXJhc8SxZMSxciAoT0lOVikgLSBldGlrZXQgYnVudSBuZXRsZcWfdGlyaXIgKGt1bGxhbsSxY8SxIGdlcmlcbiAgLy8gYmlsZGlyaW1peWxlIG5ldGxlxZ90aXJpbGRpKS4gxLDFn2xlbSBHZcOnbWnFn2kgdGFibG9zdW5kYWtpIFwiSGVkZWYgQmVsZ2UgRHVydW11XCIgc8O8dHVudW5kYSBkYSAoa3VsbGFuxLFjxLFcbiAgLy8gaXN0ZcSfaXlsZSkgQVlOSSBldGlrZXRsZXIga3VsbGFuxLFsxLFyLlxuICBzb3VyY2VEb2N1bWVudExpZmVjeWNsZU9wdGlvbnMgPSBbXG4gICAgeyB2YWx1ZTogU2FwRG9jdW1lbnRMaWZlY3ljbGUuUG9zdGVkLCBsYWJlbDogJ0thecSxdGzEsSBNw7zFn3RlcmkgRmF0dXJhc8SxJyB9LFxuICAgIHsgdmFsdWU6IFNhcERvY3VtZW50TGlmZWN5Y2xlLkRyYWZ0LCBsYWJlbDogJ1Rhc2xhayBNw7zFn3RlcmkgRmF0dXJhc8SxJyB9LFxuICBdO1xuXG4gIC8vIMSwxZ9sZW0gR2XDp21pxZ9pIC0gZGFoYSDDtm5jZSBiYcWfbGF0xLFsbcSxxZ8gKGnFn2xlbSBiZWtsaXlvci9kZXZhbSBlZGVuL3RhbWFtbGFuYW4vaGF0YWzEsS9pcHRhbCBlZGlsZW4pIGFrdGFyxLFtbGFyLlxuICAvLyBcIkthcGF0XCIvXCJMaXN0ZXllIETDtm5cIiBzb25yYXPEsSBrdWxsYW7EsWPEsW7EsW4gYmlyIHppbmNpcmUgdGVrcmFyIGTDtm7DvHAgYmFrYWJpbG1lc2kgacOnaW4uXG4gIGlzVHJhbnNmZXJzTG9hZGluZyA9IGZhbHNlO1xuICB0cmFuc2ZlcnM6IERvY3VtZW50VHJhbnNmZXJEdG9bXSA9IFtdO1xuICBpc0hpc3RvcnlFeHBhbmRlZCA9IHRydWU7XG5cbiAgLy8gRHVydW0gc8O8dHVudW51biBoZWFkZXItZmlsdGVyL2ZpbHRlci1yb3cgYcOnxLFsxLFyIGxpc3Rlc2luZGUgb2t1bmFiaWxpciBUw7xya8OnZSBldGlrZXRsZXIgZ8O2c3RlcmViaWxtZXNpXG4gIC8vIGnDp2luIChha3NpIGhhbGRlIERldkV4dHJlbWUgaGFtIHNhecSxc2FsIGVudW0gZGXEn2VybGVyaW5pIC0gMC8xLzIvMy80IC0gbGlzdGVsZXIpLlxuICB0cmFuc2ZlclN0YXR1c0xvb2t1cCA9IFtcbiAgICB7IHZhbHVlOiAwLCB0ZXh0OiAnxLDFn2xlbSBCZWtsaXlvcicgfSxcbiAgICB7IHZhbHVlOiAxLCB0ZXh0OiAnRGV2YW0gRWRpeW9yJyB9LFxuICAgIHsgdmFsdWU6IDIsIHRleHQ6ICdUYW1hbWxhbmTEsScgfSxcbiAgICB7IHZhbHVlOiAzLCB0ZXh0OiAnSGF0YWzEsScgfSxcbiAgICB7IHZhbHVlOiA0LCB0ZXh0OiAnxLBwdGFsIEVkaWxkaScgfSxcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlcnZpY2U6IERvY3VtZW50VHJhbnNmZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tcGFueVNlcnZpY2U6IFNhcENvbXBhbnlQcm9maWxlU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb25TZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbXBhbnlTZXJ2aWNlLmdldExpc3QoeyBtYXhSZXN1bHRDb3VudDogMTAwMCwgc2tpcENvdW50OiAwLCBpc0FjdGl2ZTogdHJ1ZSB9KS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIHRoaXMuY29tcGFuaWVzID0gcmVzdWx0Lml0ZW1zO1xuXG4gICAgICAvLyBEZXRheSBzYXlmYXPEsW5kYW4gXCJMaXN0ZXllIETDtm5cIi9cIkthcGF0XCIgaWxlIGdlcmkgZ2VsaW5kacSfaW5kZSwga3VsbGFuxLFjxLFuxLFuIG8gYW4gw7x6ZXJpbmRlXG4gICAgICAvLyDDp2FsxLHFn3TEscSfxLEgxZ9pcmtldCBrYXlib2xtYXPEsW4gZGl5ZSByb3V0ZXIgc3RhdGUndGVraSDFn2lya2V0IMO2bmNlbGlrbGlkaXIuXG4gICAgICBjb25zdCByZXR1cm5lZENvbXBhbnlJZCA9IChoaXN0b3J5LnN0YXRlIGFzIHsgc291cmNlQ29tcGFueUlkPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpPy5zb3VyY2VDb21wYW55SWQ7XG4gICAgICBjb25zdCBwcmVmZXJyZWRDb21wYW55SWQgPVxuICAgICAgICByZXR1cm5lZENvbXBhbnlJZCAmJiB0aGlzLmNvbXBhbmllcy5zb21lKGMgPT4gYy5pZCA9PT0gcmV0dXJuZWRDb21wYW55SWQpID8gcmV0dXJuZWRDb21wYW55SWQgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0aGlzLmNvbXBhbmllcy5sZW5ndGggPiAwICYmICF0aGlzLmZpbHRlclNvdXJjZUNvbXBhbnlJZCkge1xuICAgICAgICB0aGlzLmZpbHRlclNvdXJjZUNvbXBhbnlJZCA9IHByZWZlcnJlZENvbXBhbnlJZCA/PyB0aGlzLmNvbXBhbmllc1swXS5pZDtcbiAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbXBhbnlOYW1lKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbXBhbmllcy5maW5kKGMgPT4gYy5pZCA9PT0gaWQpPy5jb21wYW55TmFtZSA/PyBpZDtcbiAgfVxuXG4gIHNlYXJjaCgpIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVyU291cmNlQ29tcGFueUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkRWxpZ2libGVJbnZvaWNlcygpO1xuICAgIHRoaXMubG9hZFRyYW5zZmVycygpO1xuICB9XG5cbiAgLy8gXCJCZWxnZSBEdXJ1bXVcIiAoVGFzbGFrL0thecSxdGzEsSkgdmV5YSBrYXluYWsgxZ9pcmtldCBkZcSfacWfdGlyaWxkacSfaW5kZSDDtm5jZWtpIGlzdGVrIHVuc3Vic2NyaWJlIGlsZVxuICAvLyBpcHRhbCBlZGlsaXlvciAtIGFuY2FrIGJ1IFRFSyBCQcWeSU5BIHlldGVybGkgb2xtYWTEscSfxLEgZ2Vyw6dlayBvcnRhbWRhIGfDtnpsZW1sZW5kaSAoa3VsbGFuxLFjxLEgZ2VyaVxuICAvLyBiaWxkaXJpbWl5bGUgdGVzcGl0IGVkaWxkaTogXCJUYXNsYWtcIiBzZcOnaWxpeWtlbiBla3JhbmRhIGjDomzDoiBLYXnEsXRsxLEgbW9kdW5kYW4ga2FsbWEgdmVyaVxuICAvLyBnw7Zyw7xuZWJpbGl5b3JkdSAtIHVuc3Vic2NyaWJlIGhlciBrb8WfdWxkYSB0YXJhecSxY8SxIGlzdGXEn2luaSBhbsSxbmRhIGlwdGFsIGV0bWV5ZWJpbGl5b3IveWFuxLF0IHphdGVuXG4gIC8vIHlvbGEgw6fEsWttxLHFnyBvbGFiaWxpeW9yKS4gQnUgecO8emRlbiBBWVJJQ0EgaGVyIGlzdGXEn2UgYXJ0YW4gYmlyIHPEsXJhIG51bWFyYXPEsSAocmVxdWVzdElkKSB2ZXJpbGl5b3I7XG4gIC8vIHlhbsSxdCBnZWxkacSfaW5kZSBidSBudW1hcmEgaMOibMOiIFwic29udW5jdXN1XCIgZGXEn2lsc2UgKGFyYWRhbiB5ZW5pIGJpciBpc3RlayBiYcWfbGFkxLF5c2EpIHNvbnXDpyBzZXNzaXpjZVxuICAvLyBhdMSxbMSxeW9yIC0gZXNraSB5YW7EsXQgaGFuZ2kgc2ViZXBsZSBnZWxpcnNlIGdlbHNpbiBla3JhbmEgYXNsYSB5YW5zxLFtYXouXG4gIHByaXZhdGUgZWxpZ2libGVJbnZvaWNlc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB0cmFuc2ZlcnNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZWxpZ2libGVJbnZvaWNlc1JlcXVlc3RJZCA9IDA7XG4gIHByaXZhdGUgdHJhbnNmZXJzUmVxdWVzdElkID0gMDtcblxuICBwcml2YXRlIGxvYWRFbGlnaWJsZUludm9pY2VzKCkge1xuICAgIHRoaXMuZWxpZ2libGVJbnZvaWNlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmVsaWdpYmxlSW52b2ljZXMgPSBbXTtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSArK3RoaXMuZWxpZ2libGVJbnZvaWNlc1JlcXVlc3RJZDtcblxuICAgIHRoaXMuaXNMaXN0TG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5lbGlnaWJsZUludm9pY2VzU3Vic2NyaXB0aW9uID0gdGhpcy5zZXJ2aWNlXG4gICAgICAuZ2V0RWxpZ2libGVTb3VyY2VJbnZvaWNlcyh7IHNvdXJjZUNvbXBhbnlJZDogdGhpcy5maWx0ZXJTb3VyY2VDb21wYW55SWQsIHNvdXJjZURvY3VtZW50TGlmZWN5Y2xlOiB0aGlzLnNvdXJjZURvY3VtZW50TGlmZWN5Y2xlIH0pXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc0xpc3RMb2FkaW5nID0gZmFsc2UpKSlcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlcXVlc3RJZCAhPT0gdGhpcy5lbGlnaWJsZUludm9pY2VzUmVxdWVzdElkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWxpZ2libGVJbnZvaWNlcyA9IHJlc3VsdC5pdGVtcy5tYXAoaXRlbSA9PiAoeyAuLi5pdGVtLCBzdGF0dXNMYWJlbDogdGhpcy5pbnZvaWNlU3RhdHVzTGFiZWwoaXRlbSkgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRUcmFuc2ZlcnMoKSB7XG4gICAgdGhpcy50cmFuc2ZlcnNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy50cmFuc2ZlcnMgPSBbXTtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSArK3RoaXMudHJhbnNmZXJzUmVxdWVzdElkO1xuXG4gICAgdGhpcy5pc1RyYW5zZmVyc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMudHJhbnNmZXJzU3Vic2NyaXB0aW9uID0gdGhpcy5zZXJ2aWNlXG4gICAgICAuZ2V0TGlzdCh7IHNvdXJjZUNvbXBhbnlJZDogdGhpcy5maWx0ZXJTb3VyY2VDb21wYW55SWQsIG1heFJlc3VsdENvdW50OiA1MCwgc2tpcENvdW50OiAwLCBzb3J0aW5nOiAnY3JlYXRpb25UaW1lIGRlc2MnIH0pXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc1RyYW5zZmVyc0xvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVxdWVzdElkICE9PSB0aGlzLnRyYW5zZmVyc1JlcXVlc3RJZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyYW5zZmVycyA9IHJlc3VsdC5pdGVtcztcbiAgICAgIH0pO1xuICB9XG5cbiAgaW52b2ljZVN0YXR1c0xhYmVsKHJvdzogRWxpZ2libGVTb3VyY2VJbnZvaWNlRHRvKTogc3RyaW5nIHtcbiAgICBpZiAocm93LnRhcmdldEhhc0R1cGxpY2F0ZU51bUF0Q2FyZCkge1xuICAgICAgcmV0dXJuICdIZWRlZnRlIG1ldmN1dCc7XG4gICAgfVxuICAgIHJldHVybiByb3cuaXNSZXNvbHZlZCA/ICdBa3RhcsSxbGFiaWxpcicgOiAnRcWfbGXFn3Rpcm1lIHlvayc7XG4gIH1cblxuICB0cmFuc2ZlclN0YXR1c0xhYmVsKHN0YXR1czogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2ZlclN0YXR1c0xvb2t1cC5maW5kKHMgPT4gcy52YWx1ZSA9PT0gc3RhdHVzKT8udGV4dCA/PyBTdHJpbmcoc3RhdHVzKTtcbiAgfVxuXG4gIC8vIEF5bsSxIGtheW5hayBiZWxnZSBpw6dpbiBkYWhhIMO2bmNlIGJhxZ9sYXTEsWxtxLHFnyBhbWEgaGVuw7x6IMOnYWzEscWfdMSxcsSxbG1hbcSxxZ8gYmlyIHRhc2xhayB2YXJzYSwgXCLEsMWfbGVtbGVyXCJcbiAgLy8gaGVyIHNlZmVyaW5kZSBDcmVhdGVBc3luYyDDp2HEn8SxcsSxcCBtw7xrZXJyZXIgYmlyIHRhc2xhayBkYWhhIG9sdcWfdHVybWFzxLFuIGRpeWUgw7ZuY2Uga29udHJvbCBlZGlsaXIuXG4gIG9wZW5UcmFuc2ZlclBhZ2Uocm93OiBFbGlnaWJsZVNvdXJjZUludm9pY2VEdG8pIHtcbiAgICB0aGlzLnNlcnZpY2UuZmluZEV4aXN0aW5nRHJhZnQodGhpcy5maWx0ZXJTb3VyY2VDb21wYW55SWQsIHJvdy5kb2NFbnRyeSwgdGhpcy5zb3VyY2VEb2N1bWVudExpZmVjeWNsZSkuc3Vic2NyaWJlKGV4aXN0aW5nID0+IHtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBjb25zdCBjcmVhdGlvbkRhdGUgPSBleGlzdGluZy5jcmVhdGlvblRpbWUgPyBuZXcgRGF0ZShleGlzdGluZy5jcmVhdGlvblRpbWUpLnRvTG9jYWxlU3RyaW5nKCd0ci1UUicpIDogJyc7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uXG4gICAgICAgICAgLndhcm4oXG4gICAgICAgICAgICBgQnUgYmVsZ2UgKCR7cm93LmRvY051bX0pIGnDp2luIHphdGVuIGJpciB0YXNsYWsgYWt0YXLEsW0gdmFyIChvbHXFn3R1cnVsbWE6ICR7Y3JlYXRpb25EYXRlfSkuYCxcbiAgICAgICAgICAgICdGQkRvY3VtZW50Rmxvdzo6QXJlWW91U3VyZScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHllc1RleHQ6ICdFdmV0LCBBw6cnLFxuICAgICAgICAgICAgICBjYW5jZWxUZXh0OiAnSGF5xLFyLCBZZW5pIE9sdcWfdHVyJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZShzdGF0dXMgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gQ29uZmlybWF0aW9uLlN0YXR1cy5jb25maXJtKSB7XG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2ZiZG9jdW1lbnRmbG93L2RvY3VtZW50LXRyYW5zZmVycycsIGV4aXN0aW5nLmlkXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gQ29uZmlybWF0aW9uLlN0YXR1cy5yZWplY3QpIHtcbiAgICAgICAgICAgICAgLy8gS3VsbGFuxLFjxLEgXCJIYXnEsXIsIFllbmkgVGFzbGFrIE9sdcWfdHVyXCIgYnV0b251bmEgYmFzdMSxOiDDtm5jZWtpIHRhc2xhayBoacOnIMOnYWzEscWfdMSxcsSxbG1hZMSxxJ/EsW5kYW5cbiAgICAgICAgICAgICAgLy8gKGhlbsO8eiBoacOnYmlyIFNBUCBiZWxnZXNpIHlvaykgc2Vzc2l6Y2Ugc2lsaW5peW9yIC0gYWtzaSBoYWxkZSBoZXIgXCJIYXnEsXJcIiBiaXIgdGFzbGFrIGRhaGFcbiAgICAgICAgICAgICAgLy8gYmlyaWt0aXJpciB2ZSBrdWxsYW7EsWPEsSB6YXRlbiB5YWxuxLF6Y2EgZW4gc29uIG9sdcWfdHVyZHXEn3UgdGFzbGFrbGEgaWxnaWxlbml5b3IuXG4gICAgICAgICAgICAgIHRoaXMuc2VydmljZS5kZWxldGVEcmFmdChleGlzdGluZy5pZCkuc3Vic2NyaWJlKCgpID0+IHRoaXMubmF2aWdhdGVUb05ld1RyYW5zZmVyKHJvdykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc3RhdHVzID09PSBkaXNtaXNzOiBrdWxsYW7EsWPEsSBkaXlhbG/En3Uga2FwYXR0xLEgKMO2ci4gZMSxxZ9hcsSxIHTEsWtsYWTEsSkgLSBoacOnYmlyIMWfZXkgeWFwxLFsbWF6LFxuICAgICAgICAgICAgLy8gbmUgbWV2Y3V0IHRhc2xhayBhw6fEsWzEsXIgbmUgZGUgc2lsaW5pcjsgw7ZuY2VraSBkYXZyYW7EscWfdGEgYnUgZHVydW0geWFubMSxxZ9sxLFrbGEgc2lsbWVcbiAgICAgICAgICAgIC8vIGRhbMSxbmEgZMO8xZ/DvHlvcmR1LlxuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTmV3VHJhbnNmZXIocm93KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbmF2aWdhdGVUb05ld1RyYW5zZmVyKHJvdzogRWxpZ2libGVTb3VyY2VJbnZvaWNlRHRvKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvZmJkb2N1bWVudGZsb3cvZG9jdW1lbnQtdHJhbnNmZXJzJywgJ25ldyddLCB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICBzb3VyY2VDb21wYW55SWQ6IHRoaXMuZmlsdGVyU291cmNlQ29tcGFueUlkLFxuICAgICAgICBzb3VyY2VDb21wYW55TmFtZTogdGhpcy5jb21wYW55TmFtZSh0aGlzLmZpbHRlclNvdXJjZUNvbXBhbnlJZCksXG4gICAgICAgIGRvY0VudHJ5OiByb3cuZG9jRW50cnksXG4gICAgICAgIGRvY051bTogcm93LmRvY051bSxcbiAgICAgICAgbnVtQXRDYXJkOiByb3cubnVtQXRDYXJkLFxuICAgICAgICBwcm9qZWN0Q29kZTogcm93LnByb2plY3RDb2RlLFxuICAgICAgICB0YXJnZXRDb21wYW55SWQ6IHJvdy50YXJnZXRDb21wYW55SWQsXG4gICAgICAgIHRhcmdldENvbXBhbnlOYW1lOiByb3cudGFyZ2V0Q29tcGFueU5hbWUsXG4gICAgICAgIGN1cnJlbmN5OiByb3cuY3VycmVuY3ksXG4gICAgICAgIHNvdXJjZURvY3VtZW50TGlmZWN5Y2xlOiB0aGlzLnNvdXJjZURvY3VtZW50TGlmZWN5Y2xlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5UcmFuc2ZlckRldGFpbChyb3c6IERvY3VtZW50VHJhbnNmZXJEdG8pIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9mYmRvY3VtZW50Zmxvdy9kb2N1bWVudC10cmFuc2ZlcnMnLCByb3cuaWRdKTtcbiAgfVxuXG4gIC8vIFRhbWFtbGFubcSxxZ8vRGV2YW0gRWRlbiBrYXnEsXRsYXIgc2lsaW5lbWV6IChiYWNrZW5kIHphdGVuIFRyYW5zZmVyTm90RWRpdGFibGUgaWxlIHJlZGRlZGVyKTsgXCJTaWxcIlxuICAvLyBzZcOnZW5lxJ9pIHlhbG7EsXpjYSBUYXNsYWsvSGF0YWzEsS/EsHB0YWwgRWRpbGRpIGthecSxdGxhcmRhIGfDtnLDvG7DvHIuXG4gIGNhbkRlbGV0ZVRyYW5zZmVyKHJvdzogRG9jdW1lbnRUcmFuc2ZlckR0byk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByb3cuc3RhdHVzICE9PSAxICYmIHJvdy5zdGF0dXMgIT09IDI7IC8vIDE9RGV2YW0gRWRpeW9yLCAyPVRhbWFtbGFuZMSxXG4gIH1cblxuICBkZWxldGVUcmFuc2Zlcihyb3c6IERvY3VtZW50VHJhbnNmZXJEdG8pIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblxuICAgICAgLndhcm4oJ0ZCRG9jdW1lbnRGbG93OjpEZWxldGVDb25maXJtYXRpb25NZXNzYWdlJywgJ0ZCRG9jdW1lbnRGbG93OjpBcmVZb3VTdXJlJylcbiAgICAgIC5zdWJzY3JpYmUoc3RhdHVzID0+IHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gQ29uZmlybWF0aW9uLlN0YXR1cy5jb25maXJtKSB7XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmRlbGV0ZShyb3cuaWQpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvYWRUcmFuc2ZlcnMoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gQnUgbWVuw7wgacOnaW4gw7zDpyBmYXJrbMSxIHlha2xhxZ/EsW0gZGVuZW5kaSB2ZSBoZXBzaSBEZXZFeHRyZW1lIGdyaWQgaMO8Y3Jlc2kgacOnaW5kZSBiYcWfYXLEsXPEsXogb2xkdTpcbiAgLy8gKDEpIEJvb3RzdHJhcCfEsW4gZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiJ8SxIC0gQm9vdHN0cmFwIEpTIGJ1bmRsZSfEsSB5w7xrbMO8IGRlxJ9pbCwgaGnDpyB0ZXBraSB2ZXJtZWRpLlxuICAvLyAoMikgU2FmIEFuZ3VsYXIgKm5nSWYgZHJvcGRvd24nxLEgLSBET00nZGEgZG/En3J1IGHDp8SxbMSxcCBrYXBhbsSxeW9yZHUgYW1hIGjDvGNyZW5pbi9yb3dzdmlldyfEsW5cbiAgLy8gICAgIG92ZXJmbG93OmhpZGRlbifEsSB5w7x6w7xuZGVuIGfDtnLDvG5tw7x5b3JkdSAoei1pbmRleCBidW51IGHFn2FtYXosIGdlcsOnZWsgb3J0YW1kYSBkb8SfcnVsYW5kxLEpLlxuICAvLyAoMykgZHgtZHJvcC1kb3duLWJ1dHRvbiAtIGfDtnJzZWwgb2xhcmFrIGdyaWQnaW4gZMSxxZ/EsW5hIHRhxZ/EsXAgZG/En3J1IGfDtnLDvG7DvHlvcmR1LCBhbWEgb25JdGVtQ2xpY2tcbiAgLy8gICAgIG9sYXnEsSBidSBvcnRhbWRhIGfDvHZlbmlsaXIgdGV0aWtsZW5tZWRpIChnZXLDp2VrIG9ydGFtZGEgZG/En3J1bGFuZMSxOiBoacOnYmlyIHTEsWtsYW1hIGhhbmRsZXInxLFcbiAgLy8gICAgIMOnYcSfxLFybWFkxLEpLlxuICAvLyDDh8O2esO8bTogbWVuw7x5w7wgZ3JpZCdpbiBUQU1BTUVOIERJxZ5JTkEsIGNvbXBvbmVudCDFn2FibG9udW51biBlbiDDvHN0IHNldml5ZXNpbmUgdGHFn8SxbWFrIC0gYsO2eWxlY2UgbmVcbiAgLy8gb3ZlcmZsb3c6aGlkZGVuIGvEsXJwbWFzxLEgbmUgZGUgKmR4VGVtcGxhdGUgacOnaSBvbGF5IGJhxJ9sYW1hIHNvcnVubGFyxLEgeWHFn2FuxLFyLiBaYXRlbiDDp2FsxLHFn3TEscSfxLFcbiAgLy8ga2FuxLF0bGFubcSxxZ8gdGVrbGkgXCLEsMWfbGVtbGVyXCIgYnV0b251eWxhIChhY3Rpb25zVGVtcGxhdGUpIGJpcmViaXIgYXluxLEsIGJhc2l0IChjbGljaykgbWVrYW5pem1hc8SxLlxuICBvcGVuQWN0aW9uc1JvdzogRG9jdW1lbnRUcmFuc2ZlckR0byB8IG51bGwgPSBudWxsO1xuICBhY3Rpb25zTWVudVBvc2l0aW9uID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblxuICB0b2dnbGVBY3Rpb25zKHJvdzogRG9jdW1lbnRUcmFuc2ZlckR0bywgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5vcGVuQWN0aW9uc1JvdyA9PT0gcm93KSB7XG4gICAgICB0aGlzLm9wZW5BY3Rpb25zUm93ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWN0ID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMuYWN0aW9uc01lbnVQb3NpdGlvbiA9IHsgdG9wOiByZWN0LmJvdHRvbSArIHdpbmRvdy5zY3JvbGxZLCBsZWZ0OiByZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWCB9O1xuICAgIHRoaXMub3BlbkFjdGlvbnNSb3cgPSByb3c7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycpXG4gIGNsb3NlQWN0aW9uc01lbnUoKSB7XG4gICAgdGhpcy5vcGVuQWN0aW9uc1JvdyA9IG51bGw7XG4gIH1cblxuICBzZWxlY3RBY3Rpb24oYWN0aW9uOiAndmlldycgfCAnZGVsZXRlJywgcm93OiBEb2N1bWVudFRyYW5zZmVyRHRvKSB7XG4gICAgdGhpcy5vcGVuQWN0aW9uc1JvdyA9IG51bGw7XG4gICAgaWYgKGFjdGlvbiA9PT0gJ3ZpZXcnKSB7XG4gICAgICB0aGlzLm9wZW5UcmFuc2ZlckRldGFpbChyb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlbGV0ZVRyYW5zZmVyKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3BlYyDCpzUgLSBtdWhhdGFwIGXFn2xlxZ90aXJtZXNpIGJ1bHVuYW1heWFuIGR1cnVtZGEga3VsbGFuxLFjxLFkYW4gaGVkZWYgU0FQIMWfaXJrZXRpbmRla2kgZG/En3J1XG4gIC8vIE3DvMWfdGVyaS9TYXTEsWPEsSBDYXJkQ29kZSBzZcOnaW1pIGlzdGVuZWNla3RpcjsgYnUgc2XDp2ltaW4gTXVoYXRhcCBFxZ9sZcWfdGlybWVsZXJpIGVrcmFuxLFuYVxuICAvLyB5w7ZubGVuZGlyaWxlcmVrIHlhcHTEsXLEsWxtYXPEsSBzcGVjIHRhcmFmxLFuZGFuIGHDp8Sxa8OnYSBpemluIHZlcmlsZW4gYmlyIGFyYXnDvHogc2XDp2VuZcSfaWRpci5cbiAgLy8gTcO8xZ90ZXJpIENhcmRDb2RlIGJ1cmFkYSB0YWhtaW4gZGXEn2lsZGlyOiBSZXNvbHZlRmlyc3RUYXJnZXRBc3luYyB0YW0gb2xhcmFrXG4gIC8vIFwiU291cmNlQ29tcGFueUlkICsgQ3VzdG9tZXJDYXJkQ29kZSA9PSBPSU5WLkNhcmRDb2RlXCIgZcWfbGXFn21lc2luaSBhcmFkxLHEn8SxbmRhbiwgZWtzaWsgb2xhblxuICAvLyBlxZ9sZcWfdGlybWVuaW4gQ3VzdG9tZXJDYXJkQ29kZSBkZcSfZXJpIHphdGVuIGJ1IGZhdHVyYW7EsW4ga2VuZGkgQ2FyZENvZGUndWR1ci5cbiAgZ29Ub1BhcnRuZXJNYXBwaW5nKGN1c3RvbWVyQ2FyZENvZGU/OiBzdHJpbmcsIGN1c3RvbWVyQ2FyZE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9mYmRvY3VtZW50Zmxvdy9wYXJ0bmVyLW1hcHBpbmdzJ10sIHtcbiAgICAgIHN0YXRlOiB7IHNvdXJjZUNvbXBhbnlJZDogdGhpcy5maWx0ZXJTb3VyY2VDb21wYW55SWQsIGN1c3RvbWVyQ2FyZENvZGUsIGN1c3RvbWVyQ2FyZE5hbWUgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZUhpc3RvcnkoKSB7XG4gICAgdGhpcy5pc0hpc3RvcnlFeHBhbmRlZCA9ICF0aGlzLmlzSGlzdG9yeUV4cGFuZGVkO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZCBtYi0zXCI+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBweS0zXCI+XG4gICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZSBtYi0wXCI+e3sgJ0ZCRG9jdW1lbnRGbG93OjpNZW51OkRvY3VtZW50VHJhbnNmZXJzJyB8IGFicExvY2FsaXphdGlvbiB9fTwvaDU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB0LTNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IGctMyBhbGlnbi1pdGVtcy1lbmQgbWItM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5LYXluYWsgxZ5pcmtldDwvbGFiZWw+XG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIFsobmdNb2RlbCldPVwiZmlsdGVyU291cmNlQ29tcGFueUlkXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoKClcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvbXBhbmllc1wiIFtuZ1ZhbHVlXT1cImMuaWRcIj57eyBjLmNvbXBhbnlOYW1lIH19PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPktheW5hayBCZWxnZSBEdXJ1bXU8L2xhYmVsPlxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInNvdXJjZURvY3VtZW50TGlmZWN5Y2xlXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoKClcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvIG9mIHNvdXJjZURvY3VtZW50TGlmZWN5Y2xlT3B0aW9uc1wiIFtuZ1ZhbHVlXT1cIm8udmFsdWVcIj57eyBvLmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgKGNsaWNrKT1cInNlYXJjaCgpXCIgW2Rpc2FibGVkXT1cImlzTGlzdExvYWRpbmcgfHwgaXNUcmFuc2ZlcnNMb2FkaW5nXCIgdGl0bGU9XCJMaXN0ZXlpIHllbmlsZVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcmVmcmVzaCBtZS0xXCI+PC9pPlllbmlsZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGg2IGNsYXNzPVwibWItMlwiPkFrdGFyxLFtYSBVeWd1biBNw7zFn3RlcmkgRmF0dXJhbGFyxLE8L2g2PlxuICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9jayBtYi0yXCI+QmVsZ2UgTm8sIE51bUF0Q2FyZCwgUHJvamUgdmIuIGlsZSBkYXJhbHRtYWsgacOnaW4gdGFibG8gYmHFn2zEsWtsYXLEsW5kYWtpIGFyYW1hIGt1dHVsYXLEsW7EsSBrdWxsYW7EsW4uPC9zbWFsbD5cblxuICAgIDxkaXYgKm5nSWY9XCJpc0xpc3RMb2FkaW5nXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS01XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1tdXRlZFwiPkZhdHVyYWxhciBTQVAndGFuIHnDvGtsZW5peW9yLi4uPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZHgtZGF0YS1ncmlkXG4gICAgICAqbmdJZj1cIiFpc0xpc3RMb2FkaW5nXCJcbiAgICAgIFtkYXRhU291cmNlXT1cImVsaWdpYmxlSW52b2ljZXNcIlxuICAgICAgW3Nob3dCb3JkZXJzXT1cInRydWVcIlxuICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcbiAgICAgIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiXG4gICAgICBbaGVpZ2h0XT1cIic0NXZoJ1wiXG4gICAgICBba2V5Ym9hcmROYXZpZ2F0aW9uXT1cInsgZW5hYmxlZDogZmFsc2UgfVwiXG4gICAgPlxuICAgICAgPGR4by1wYWdpbmcgW3BhZ2VTaXplXT1cIjUwXCI+PC9keG8tcGFnaW5nPlxuICAgICAgPGR4by1wYWdlciBbdmlzaWJsZV09XCJ0cnVlXCIgW3Nob3dJbmZvXT1cInRydWVcIiBbc2hvd05hdmlnYXRpb25CdXR0b25zXT1cInRydWVcIj48L2R4by1wYWdlcj5cbiAgICAgIDxkeG8tZmlsdGVyLXJvdyBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXJvdz5cbiAgICAgIDxkeG8taGVhZGVyLWZpbHRlciBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8taGVhZGVyLWZpbHRlcj5cblxuICAgICAgPGR4aS1jb2x1bW4gY2FwdGlvbj1cIsSwxZ9sZW1sZXJcIiBjZWxsVGVtcGxhdGU9XCJhY3Rpb25zVGVtcGxhdGVcIiBbd2lkdGhdPVwiMTAwXCIgW2FsbG93RmlsdGVyaW5nXT1cImZhbHNlXCIgW2FsbG93U29ydGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY051bVwiIGNhcHRpb249XCJCZWxnZSBOb1wiIGRhdGFUeXBlPVwibnVtYmVyXCIgc29ydE9yZGVyPVwiZGVzY1wiIFt3aWR0aF09XCIxMDBcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJudW1BdENhcmRcIiBjYXB0aW9uPVwiTnVtQXRDYXJkXCIgW3dpZHRoXT1cIjE0MFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInByb2plY3RDb2RlXCIgY2FwdGlvbj1cIlByb2plXCIgW3dpZHRoXT1cIjkwXCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY2FyZENvZGVcIiBjYXB0aW9uPVwiT0lOVi5DYXJkQ29kZVwiIFt3aWR0aF09XCIxNDBcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJ0YXJnZXRDb21wYW55TmFtZVwiIGNhcHRpb249XCJIZWRlZiDFnmlya2V0XCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY3VycmVuY3lcIiBjYXB0aW9uPVwiRMO2dml6XCIgW3dpZHRoXT1cIjgwXCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwic3RhdHVzTGFiZWxcIiBjYXB0aW9uPVwiRHVydW1cIiBjZWxsVGVtcGxhdGU9XCJzdGF0dXNUZW1wbGF0ZVwiIFt3aWR0aF09XCIxMzBcIj48L2R4aS1jb2x1bW4+XG5cbiAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbCBvZiAnYWN0aW9uc1RlbXBsYXRlJ1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnlcIlxuICAgICAgICAgIChjbGljayk9XCJvcGVuVHJhbnNmZXJQYWdlKGNlbGwuZGF0YSk7ICRldmVudC50YXJnZXQuYmx1cigpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNlbGwuZGF0YS5pc1Jlc29sdmVkIHx8IGNlbGwuZGF0YS50YXJnZXRIYXNEdXBsaWNhdGVOdW1BdENhcmRcIlxuICAgICAgICA+XG4gICAgICAgICAgxLDFn2xlbWxlclxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGwgb2YgJ3N0YXR1c1RlbXBsYXRlJ1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLXN0YXJ0IHB5LTJcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImJhZGdlXCJcbiAgICAgICAgICBbY2xhc3MuYmctc3VjY2Vzc109XCJpbnZvaWNlU3RhdHVzTGFiZWwoY2VsbC5kYXRhKSA9PT0gJ0FrdGFyxLFsYWJpbGlyJ1wiXG4gICAgICAgICAgW2NsYXNzLmJnLXNlY29uZGFyeV09XCJpbnZvaWNlU3RhdHVzTGFiZWwoY2VsbC5kYXRhKSA9PT0gJ0hlZGVmdGUgbWV2Y3V0J1wiXG4gICAgICAgICAgW2NsYXNzLmJnLXdhcm5pbmddPVwiaW52b2ljZVN0YXR1c0xhYmVsKGNlbGwuZGF0YSkgPT09ICdFxZ9sZcWfdGlybWUgeW9rJ1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpbnZvaWNlU3RhdHVzTGFiZWwoY2VsbC5kYXRhKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cIiFjZWxsLmRhdGEuaXNSZXNvbHZlZFwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtd2FybmluZyBidG4tc20gbXQtMiBweS0wIHB4LTJcIlxuICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAwLjcycmVtXCJcbiAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhcnRuZXJNYXBwaW5nKGNlbGwuZGF0YS5jYXJkQ29kZSwgY2VsbC5kYXRhLmNhcmROYW1lKVwiXG4gICAgICAgICAgdGl0bGU9XCJNdWhhdGFwIEXFn2xlxZ90aXJtZWxlcmkgZWtyYW7EsW5hIGdpdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWxpbmsgbWUtMVwiPjwvaT5FxZ9sZcWfdGlyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9keC1kYXRhLWdyaWQ+XG5cbiAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2sgbXQtMlwiPlxuICAgICAgXCJIZWRlZnRlIG1ldmN1dFwiIGJpbGdpc2ksIGtheW5hayBPSU5WLk51bUF0Q2FyZCBkZcSfZXJpbmluIGhlZGVmIMWfaXJrZXR0ZSBPUENILk51bUF0Q2FyZCBhbGFuxLFuZGEgYnVsdW5tYXPEsSBoYWxpbmRlIGfDtnN0ZXJpbGlyLlxuICAgIDwvc21hbGw+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBweS0zXCIgcm9sZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVIaXN0b3J5KClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZSBtYi0wXCI+xLDFn2xlbSBHZcOnbWnFn2k8L2g1PlxuICAgICAgPGkgY2xhc3M9XCJmYVwiIFtjbGFzcy5mYS1jaGV2cm9uLXVwXT1cImlzSGlzdG9yeUV4cGFuZGVkXCIgW2NsYXNzLmZhLWNoZXZyb24tZG93bl09XCIhaXNIaXN0b3J5RXhwYW5kZWRcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB0LTNcIiBbaGlkZGVuXT1cIiFpc0hpc3RvcnlFeHBhbmRlZFwiPlxuICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9jayBtYi0yXCI+U2XDp2lsaSBrYXluYWsgxZ9pcmtldCBpw6dpbiBkYWhhIMO2bmNlIGJhxZ9sYXTEsWxtxLHFnyBha3RhcsSxbWxhciAoacWfbGVtIGJla2xpeW9yLCBkZXZhbSBlZGVuLCB0YW1hbWxhbmFuLCBoYXRhbMSxLCBpcHRhbCBlZGlsZW4pLjwvc21hbGw+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNUcmFuc2ZlcnNMb2FkaW5nXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS01XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1tdXRlZFwiPlnDvGtsZW5peW9yLi4uPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZHgtZGF0YS1ncmlkXG4gICAgICAqbmdJZj1cIiFpc1RyYW5zZmVyc0xvYWRpbmdcIlxuICAgICAgW2RhdGFTb3VyY2VdPVwidHJhbnNmZXJzXCJcbiAgICAgIFtzaG93Qm9yZGVyc109XCJ0cnVlXCJcbiAgICAgIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiXG4gICAgICBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIlxuICAgICAgW2hlaWdodF09XCInNDB2aCdcIlxuICAgICAgW2tleWJvYXJkTmF2aWdhdGlvbl09XCJ7IGVuYWJsZWQ6IGZhbHNlIH1cIlxuICAgID5cbiAgICAgIDxkeG8tcGFnaW5nIFtwYWdlU2l6ZV09XCI1MFwiPjwvZHhvLXBhZ2luZz5cbiAgICAgIDxkeG8tcGFnZXIgW3Zpc2libGVdPVwidHJ1ZVwiIFtzaG93SW5mb109XCJ0cnVlXCIgW3Nob3dOYXZpZ2F0aW9uQnV0dG9uc109XCJ0cnVlXCI+PC9keG8tcGFnZXI+XG4gICAgICA8ZHhvLWZpbHRlci1yb3cgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWZpbHRlci1yb3c+XG4gICAgICA8ZHhvLWhlYWRlci1maWx0ZXIgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWhlYWRlci1maWx0ZXI+XG5cbiAgICAgIDxkeGktY29sdW1uIGNhcHRpb249XCLEsMWfbGVtbGVyXCIgY2VsbFRlbXBsYXRlPVwidmlld1RlbXBsYXRlXCIgW3dpZHRoXT1cIjEyMFwiIFthbGxvd0ZpbHRlcmluZ109XCJmYWxzZVwiIFthbGxvd1NvcnRpbmddPVwiZmFsc2VcIiBhbGlnbm1lbnQ9XCJjZW50ZXJcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJzb3VyY2VPaW52RG9jTnVtXCIgY2FwdGlvbj1cIktheW5hayBCZWxnZVwiIFt3aWR0aF09XCIxMTBcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJwcm9qZWN0Q29kZVwiIGNhcHRpb249XCJQcm9qZVwiIFt3aWR0aF09XCI5MFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImludGVyY29tcGFueUlkXCIgY2FwdGlvbj1cIkludGVyY29tcGFueSBJZFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDwhLS0gS3VsbGFuxLFjxLEgZ2VyaSBiaWxkaXJpbWl5bGUgdGVzcGl0IGVkaWxkaTogxLDFn2xlbSBHZcOnbWnFn2knbmRlIGJpciBrYXlkxLFuIG5vcm1hbCAoS2F5xLF0bMSxKSBtaVxuICAgICAgICAgICB5b2tzYSBUYXNsYWsgbcSxIG9sZHXEn3UgaGnDpyBnw7Zyw7xubcO8eW9yZHUgLSBBa3RhcsSxbSBEdXJ1bXUgKER1cnVtIHPDvHR1bnUpIGlsZSBrYXLEscWfdMSxcsSxbG1hc8SxbiBkaXllXG4gICAgICAgICAgIEtheW5hay9IZWRlZiBCZWxnZSBEdXJ1bXUgYXlyxLEgc8O8dHVubGFyIG9sYXJhayBla2xlbmRpIChia3ouIHNwZWMgwqcxNCkuIC0tPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwic291cmNlRG9jdW1lbnRMaWZlY3ljbGVcIiBjYXB0aW9uPVwiS2F5bmFrIEJlbGdlIER1cnVtdVwiIFt3aWR0aF09XCIxNDBcIj5cbiAgICAgICAgPGR4by1sb29rdXAgW2RhdGFTb3VyY2VdPVwic291cmNlRG9jdW1lbnRMaWZlY3ljbGVPcHRpb25zXCIgdmFsdWVFeHByPVwidmFsdWVcIiBkaXNwbGF5RXhwcj1cImxhYmVsXCI+PC9keG8tbG9va3VwPlxuICAgICAgPC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidGFyZ2V0RG9jdW1lbnRMaWZlY3ljbGVcIiBjYXB0aW9uPVwiSGVkZWYgQmVsZ2UgRHVydW11XCIgW3dpZHRoXT1cIjE0MFwiPlxuICAgICAgICA8ZHhvLWxvb2t1cCBbZGF0YVNvdXJjZV09XCJzb3VyY2VEb2N1bWVudExpZmVjeWNsZU9wdGlvbnNcIiB2YWx1ZUV4cHI9XCJ2YWx1ZVwiIGRpc3BsYXlFeHByPVwibGFiZWxcIj48L2R4by1sb29rdXA+XG4gICAgICA8L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJzdGF0dXNcIiBjYXB0aW9uPVwiRHVydW1cIiBjZWxsVGVtcGxhdGU9XCJ0cmFuc2ZlclN0YXR1c1RlbXBsYXRlXCIgW3dpZHRoXT1cIjEzMFwiPlxuICAgICAgICA8ZHhvLWxvb2t1cCBbZGF0YVNvdXJjZV09XCJ0cmFuc2ZlclN0YXR1c0xvb2t1cFwiIHZhbHVlRXhwcj1cInZhbHVlXCIgZGlzcGxheUV4cHI9XCJ0ZXh0XCI+PC9keG8tbG9va3VwPlxuICAgICAgPC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW5cbiAgICAgICAgZGF0YUZpZWxkPVwiY3JlYXRpb25UaW1lXCJcbiAgICAgICAgY2FwdGlvbj1cIk9sdcWfdHVybWEgVGFyaWhpXCJcbiAgICAgICAgZGF0YVR5cGU9XCJkYXRldGltZVwiXG4gICAgICAgIGZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxuICAgICAgICBbd2lkdGhdPVwiMTUwXCJcbiAgICAgICAgc29ydE9yZGVyPVwiZGVzY1wiXG4gICAgICA+PC9keGktY29sdW1uPlxuXG4gICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGwgb2YgJ3ZpZXdUZW1wbGF0ZSdcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKGNlbGwuZGF0YSwgJGV2ZW50KVwiPlxuICAgICAgICAgIMSwxZ9sZW1sZXIgPGkgY2xhc3M9XCJmYSBmYS1jYXJldC1kb3duIG1zLTFcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbCBvZiAndHJhbnNmZXJTdGF0dXNUZW1wbGF0ZSdcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImJhZGdlXCJcbiAgICAgICAgICBbY2xhc3MuYmctc2Vjb25kYXJ5XT1cImNlbGwudmFsdWUgPT09IDBcIlxuICAgICAgICAgIFtjbGFzcy5iZy1wcmltYXJ5XT1cImNlbGwudmFsdWUgPT09IDFcIlxuICAgICAgICAgIFtjbGFzcy5iZy1zdWNjZXNzXT1cImNlbGwudmFsdWUgPT09IDJcIlxuICAgICAgICAgIFtjbGFzcy5iZy1kYW5nZXJdPVwiY2VsbC52YWx1ZSA9PT0gM1wiXG4gICAgICAgICAgW2NsYXNzLmJnLXdhcm5pbmddPVwiY2VsbC52YWx1ZSA9PT0gNFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyB0cmFuc2ZlclN0YXR1c0xhYmVsKGNlbGwudmFsdWUpIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZHgtZGF0YS1ncmlkPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEdyaWQnaW4gREnFnklOREE6IGR4LWRhdGEtZ3JpZCBow7xjcmVsZXJpbmluIG92ZXJmbG93OmhpZGRlbiBrxLFycG1hc8SxIHZlICpkeFRlbXBsYXRlIGnDp2kgb2xheSBiYcSfbGFtYVxuICAgICBzb3J1bmxhcsSxIHlhxZ9hbm1hc8SxbiBkaXllIFwixLDFn2xlbWxlclwiIG1lbsO8c8O8IGJ1cmF5YSwgY29tcG9uZW50IMWfYWJsb251bnVuIGVuIMO8c3Qgc2V2aXllc2luZSB0YcWfxLFuZMSxLiAtLT5cbjx1bFxuICAqbmdJZj1cIm9wZW5BY3Rpb25zUm93IGFzIHJvd1wiXG4gIGNsYXNzPVwibGlzdC11bnN0eWxlZCBtLTAgYmctd2hpdGUgYm9yZGVyIHJvdW5kZWQgc2hhZG93LXNtXCJcbiAgW3N0eWxlLnBvc2l0aW9uXT1cIidhYnNvbHV0ZSdcIlxuICBbc3R5bGUudG9wLnB4XT1cImFjdGlvbnNNZW51UG9zaXRpb24udG9wXCJcbiAgW3N0eWxlLmxlZnQucHhdPVwiYWN0aW9uc01lbnVQb3NpdGlvbi5sZWZ0XCJcbiAgc3R5bGU9XCJ6LWluZGV4OiAxMDUwOyBtaW4td2lkdGg6IDE0MHB4OyBwYWRkaW5nOiA0cHggMFwiXG4gIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuPlxuICA8bGk+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJkLWJsb2NrIHctMTAwIHRleHQtc3RhcnQgYm9yZGVyLTAgYmctd2hpdGUgcHgtMyBweS0xXCIgKGNsaWNrKT1cInNlbGVjdEFjdGlvbigndmlldycsIHJvdylcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXllIG1lLTJcIj48L2k+R8O2csO8bnTDvGxlXG4gICAgPC9idXR0b24+XG4gIDwvbGk+XG4gIDxsaSAqbmdJZj1cImNhbkRlbGV0ZVRyYW5zZmVyKHJvdylcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImQtYmxvY2sgdy0xMDAgdGV4dC1zdGFydCBib3JkZXItMCBiZy13aGl0ZSBweC0zIHB5LTEgdGV4dC1kYW5nZXJcIiAoY2xpY2spPVwic2VsZWN0QWN0aW9uKCdkZWxldGUnLCByb3cpXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIG1lLTJcIj48L2k+U2lsXG4gICAgPC9idXR0b24+XG4gIDwvbGk+XG48L3VsPlxuIl19
|
package/esm2020/lib/components/hit-document-transfers/hit-document-transfer-routing.module.mjs
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { AuthGuard, PermissionGuard } from '@abp/ng.core';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { RouterModule } from '@angular/router';
|
|
4
|
+
import { HitDocumentTransferComponent } from './components/hit-document-transfer.component';
|
|
5
|
+
import { HitDocumentTransferDetailComponent } from './components/hit-document-transfer-detail.component';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/router";
|
|
8
|
+
const routes = [
|
|
9
|
+
{
|
|
10
|
+
path: '',
|
|
11
|
+
component: HitDocumentTransferComponent,
|
|
12
|
+
canActivate: [AuthGuard, PermissionGuard],
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
// ":id" - yeni aktarım için "new" (router state ile), mevcut bir kayıt için gerçek DocumentTransfer Id'si.
|
|
16
|
+
path: ':id',
|
|
17
|
+
component: HitDocumentTransferDetailComponent,
|
|
18
|
+
canActivate: [AuthGuard, PermissionGuard],
|
|
19
|
+
},
|
|
20
|
+
];
|
|
21
|
+
export class HitDocumentTransferRoutingModule {
|
|
22
|
+
}
|
|
23
|
+
HitDocumentTransferRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentTransferRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
24
|
+
HitDocumentTransferRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentTransferRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] });
|
|
25
|
+
HitDocumentTransferRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentTransferRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] });
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentTransferRoutingModule, decorators: [{
|
|
27
|
+
type: NgModule,
|
|
28
|
+
args: [{
|
|
29
|
+
imports: [RouterModule.forChild(routes)],
|
|
30
|
+
exports: [RouterModule],
|
|
31
|
+
}]
|
|
32
|
+
}] });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWRvY3VtZW50LXRyYW5zZmVyLXJvdXRpbmcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmJkb2N1bWVudGZsb3cvc3JjL2xpYi9jb21wb25lbnRzL2hpdC1kb2N1bWVudC10cmFuc2ZlcnMvaGl0LWRvY3VtZW50LXRyYW5zZmVyLXJvdXRpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHFEQUFxRCxDQUFDOzs7QUFFekcsTUFBTSxNQUFNLEdBQVc7SUFDckI7UUFDRSxJQUFJLEVBQUUsRUFBRTtRQUNSLFNBQVMsRUFBRSw0QkFBNEI7UUFDdkMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQztLQUMxQztJQUNEO1FBQ0UsMkdBQTJHO1FBQzNHLElBQUksRUFBRSxLQUFLO1FBQ1gsU0FBUyxFQUFFLGtDQUFrQztRQUM3QyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDO0tBQzFDO0NBQ0YsQ0FBQztBQU1GLE1BQU0sT0FBTyxnQ0FBZ0M7OzZIQUFoQyxnQ0FBZ0M7OEhBQWhDLGdDQUFnQyx3Q0FGakMsWUFBWTs4SEFFWCxnQ0FBZ0MsWUFIakMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFDN0IsWUFBWTsyRkFFWCxnQ0FBZ0M7a0JBSjVDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDeEMsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhHdWFyZCwgUGVybWlzc2lvbkd1YXJkIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUsIFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBIaXREb2N1bWVudFRyYW5zZmVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2hpdC1kb2N1bWVudC10cmFuc2Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGl0RG9jdW1lbnRUcmFuc2ZlckRldGFpbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtdHJhbnNmZXItZGV0YWlsLmNvbXBvbmVudCc7XG5cbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICB7XG4gICAgcGF0aDogJycsXG4gICAgY29tcG9uZW50OiBIaXREb2N1bWVudFRyYW5zZmVyQ29tcG9uZW50LFxuICAgIGNhbkFjdGl2YXRlOiBbQXV0aEd1YXJkLCBQZXJtaXNzaW9uR3VhcmRdLFxuICB9LFxuICB7XG4gICAgLy8gXCI6aWRcIiAtIHllbmkgYWt0YXLEsW0gacOnaW4gXCJuZXdcIiAocm91dGVyIHN0YXRlIGlsZSksIG1ldmN1dCBiaXIga2F5xLF0IGnDp2luIGdlcsOnZWsgRG9jdW1lbnRUcmFuc2ZlciBJZCdzaS5cbiAgICBwYXRoOiAnOmlkJyxcbiAgICBjb21wb25lbnQ6IEhpdERvY3VtZW50VHJhbnNmZXJEZXRhaWxDb21wb25lbnQsXG4gICAgY2FuQWN0aXZhdGU6IFtBdXRoR3VhcmQsIFBlcm1pc3Npb25HdWFyZF0sXG4gIH0sXG5dO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbUm91dGVyTW9kdWxlLmZvckNoaWxkKHJvdXRlcyldLFxuICBleHBvcnRzOiBbUm91dGVyTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgSGl0RG9jdW1lbnRUcmFuc2ZlclJvdXRpbmdNb2R1bGUge31cbiJdfQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CoreModule } from '@abp/ng.core';
|
|
2
|
+
import { ThemeSharedModule } from '@abp/ng.theme.shared';
|
|
3
|
+
import { NgModule } from '@angular/core';
|
|
4
|
+
import { FormsModule } from '@angular/forms';
|
|
5
|
+
import { DxDataGridModule } from 'devextreme-angular';
|
|
6
|
+
import { HitDocumentTransferComponent } from './components/hit-document-transfer.component';
|
|
7
|
+
import { HitDocumentTransferDetailComponent } from './components/hit-document-transfer-detail.component';
|
|
8
|
+
import { HitDocumentTransferRoutingModule } from './hit-document-transfer-routing.module';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class HitDocumentTransferModule {
|
|
11
|
+
}
|
|
12
|
+
HitDocumentTransferModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentTransferModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
13
|
+
HitDocumentTransferModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentTransferModule, declarations: [HitDocumentTransferComponent, HitDocumentTransferDetailComponent], imports: [HitDocumentTransferRoutingModule, CoreModule, ThemeSharedModule, FormsModule, DxDataGridModule] });
|
|
14
|
+
HitDocumentTransferModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentTransferModule, imports: [HitDocumentTransferRoutingModule, CoreModule, ThemeSharedModule, FormsModule, DxDataGridModule] });
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentTransferModule, decorators: [{
|
|
16
|
+
type: NgModule,
|
|
17
|
+
args: [{
|
|
18
|
+
declarations: [HitDocumentTransferComponent, HitDocumentTransferDetailComponent],
|
|
19
|
+
imports: [HitDocumentTransferRoutingModule, CoreModule, ThemeSharedModule, FormsModule, DxDataGridModule],
|
|
20
|
+
}]
|
|
21
|
+
}] });
|
|
22
|
+
export function loadHitDocumentTransferModuleAsChild() {
|
|
23
|
+
return Promise.resolve(HitDocumentTransferModule);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWRvY3VtZW50LXRyYW5zZmVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtdHJhbnNmZXJzL2hpdC1kb2N1bWVudC10cmFuc2Zlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUM1RixPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7QUFNMUYsTUFBTSxPQUFPLHlCQUF5Qjs7c0hBQXpCLHlCQUF5Qjt1SEFBekIseUJBQXlCLGlCQUhyQiw0QkFBNEIsRUFBRSxrQ0FBa0MsYUFDckUsZ0NBQWdDLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxnQkFBZ0I7dUhBRTdGLHlCQUF5QixZQUYxQixnQ0FBZ0MsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGdCQUFnQjsyRkFFN0YseUJBQXlCO2tCQUpyQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLDRCQUE0QixFQUFFLGtDQUFrQyxDQUFDO29CQUNoRixPQUFPLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixDQUFDO2lCQUMxRzs7QUFHRCxNQUFNLFVBQVUsb0NBQW9DO0lBQ2xELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IFRoZW1lU2hhcmVkTW9kdWxlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRHhEYXRhR3JpZE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XG5pbXBvcnQgeyBIaXREb2N1bWVudFRyYW5zZmVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2hpdC1kb2N1bWVudC10cmFuc2Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGl0RG9jdW1lbnRUcmFuc2ZlckRldGFpbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtdHJhbnNmZXItZGV0YWlsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIaXREb2N1bWVudFRyYW5zZmVyUm91dGluZ01vZHVsZSB9IGZyb20gJy4vaGl0LWRvY3VtZW50LXRyYW5zZmVyLXJvdXRpbmcubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbSGl0RG9jdW1lbnRUcmFuc2ZlckNvbXBvbmVudCwgSGl0RG9jdW1lbnRUcmFuc2ZlckRldGFpbENvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtIaXREb2N1bWVudFRyYW5zZmVyUm91dGluZ01vZHVsZSwgQ29yZU1vZHVsZSwgVGhlbWVTaGFyZWRNb2R1bGUsIEZvcm1zTW9kdWxlLCBEeERhdGFHcmlkTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgSGl0RG9jdW1lbnRUcmFuc2Zlck1vZHVsZSB7fVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEhpdERvY3VtZW50VHJhbnNmZXJNb2R1bGVBc0NoaWxkKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEhpdERvY3VtZW50VHJhbnNmZXJNb2R1bGUpO1xufVxuIl19
|