myrtex-mf-competition 1.0.77 → 1.0.79
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 +14 -14
- package/esm2020/lib/modules/competition-header/competition-header.module.mjs +79 -0
- package/esm2020/lib/modules/competition-header/components/competition-header.component.mjs +495 -0
- package/esm2020/lib/modules/competition-header/constants.mjs +2 -0
- package/esm2020/lib/modules/competition-header/directives/competition-header-custom-buttons.directive.mjs +16 -0
- package/esm2020/lib/modules/competition-header/directives/index.mjs +2 -0
- package/esm2020/lib/modules/competition-header/index.mjs +5 -0
- package/esm2020/lib/modules/competition-header/models/competition-header-version.model.mjs +2 -0
- package/esm2020/lib/modules/competition-header/models/competition-rejection.model.mjs +2 -0
- package/esm2020/lib/modules/competition-header/models/competition-status.model.mjs +2 -0
- package/esm2020/lib/modules/competition-header/models/competition-version.model.mjs +2 -0
- package/esm2020/lib/modules/competition-header/models/eb-links.model.mjs +2 -0
- package/esm2020/lib/modules/competition-header/models/index.mjs +2 -0
- package/esm2020/lib/modules/competition-header/services/competition-header.service.mjs +40 -0
- package/esm2020/lib/modules/competition-header/services/settings.service.mjs +20 -0
- package/esm2020/lib/modules/competition-header/store/competition-header.actions.mjs +37 -0
- package/esm2020/lib/modules/competition-header/store/competition-header.effects.mjs +96 -0
- package/esm2020/lib/modules/competition-header/store/competition-header.reducers.mjs +31 -0
- package/esm2020/lib/modules/competition-header/store/competition-header.selector.mjs +14 -0
- package/esm2020/lib/modules/competition-header/store/competition-header.state.mjs +9 -0
- package/esm2020/myrtex-mf-competition.mjs +5 -0
- package/esm2020/public-api.mjs +6 -0
- package/fesm2015/myrtex-mf-competition.mjs +814 -0
- package/fesm2015/myrtex-mf-competition.mjs.map +1 -0
- package/fesm2020/myrtex-mf-competition.mjs +807 -0
- package/fesm2020/myrtex-mf-competition.mjs.map +1 -0
- package/lib/modules/competition-header/competition-header.module.d.ts +16 -0
- package/lib/modules/competition-header/components/competition-header.component.d.ts +89 -0
- package/lib/modules/competition-header/constants.d.ts +1 -0
- package/lib/modules/competition-header/directives/competition-header-custom-buttons.directive.d.ts +8 -0
- package/lib/modules/competition-header/directives/index.d.ts +1 -0
- package/{src/lib/modules/competition-header/index.ts → lib/modules/competition-header/index.d.ts} +1 -1
- package/lib/modules/competition-header/models/competition-header-version.model.d.ts +11 -0
- package/lib/modules/competition-header/models/competition-rejection.model.d.ts +5 -0
- package/{src/lib/modules/competition-header/models/competition-status.model.ts → lib/modules/competition-header/models/competition-status.model.d.ts} +3 -4
- package/lib/modules/competition-header/models/competition-version.model.d.ts +11 -0
- package/{src/lib/modules/competition-header/models/eb-links.model.ts → lib/modules/competition-header/models/eb-links.model.d.ts} +1 -1
- package/lib/modules/competition-header/services/competition-header.service.d.ts +20 -0
- package/lib/modules/competition-header/services/settings.service.d.ts +14 -0
- package/lib/modules/competition-header/store/competition-header.actions.d.ts +78 -0
- package/lib/modules/competition-header/store/competition-header.effects.d.ts +42 -0
- package/lib/modules/competition-header/store/competition-header.reducers.d.ts +3 -0
- package/lib/modules/competition-header/store/competition-header.selector.d.ts +7 -0
- package/lib/modules/competition-header/store/competition-header.state.d.ts +12 -0
- package/myrtex-mf-competition.d.ts +5 -0
- package/package.json +33 -13
- package/{src/public-api.ts → public-api.d.ts} +0 -4
- package/.browserslistrc +0 -16
- package/karma.conf.js +0 -44
- package/ng-package.json +0 -7
- package/src/lib/modules/competition-header/competition-header.module.ts +0 -45
- package/src/lib/modules/competition-header/components/competition-header.component.html +0 -164
- package/src/lib/modules/competition-header/components/competition-header.component.ts +0 -584
- package/src/lib/modules/competition-header/constants.ts +0 -1
- package/src/lib/modules/competition-header/directives/competition-header-custom-buttons.directive.ts +0 -10
- package/src/lib/modules/competition-header/directives/index.ts +0 -1
- package/src/lib/modules/competition-header/models/competition-header-version.model.ts +0 -13
- package/src/lib/modules/competition-header/models/competition-rejection.model.ts +0 -5
- package/src/lib/modules/competition-header/models/competition-version.model.ts +0 -12
- package/src/lib/modules/competition-header/services/competition-header.service.ts +0 -47
- package/src/lib/modules/competition-header/services/settings.service.ts +0 -17
- package/src/lib/modules/competition-header/store/competition-header.actions.ts +0 -102
- package/src/lib/modules/competition-header/store/competition-header.effects.ts +0 -193
- package/src/lib/modules/competition-header/store/competition-header.reducers.ts +0 -39
- package/src/lib/modules/competition-header/store/competition-header.selector.ts +0 -45
- package/src/lib/modules/competition-header/store/competition-header.state.ts +0 -21
- package/src/test.ts +0 -27
- package/tsconfig.lib.json +0 -15
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -17
- /package/{src/lib/modules/competition-header/models/index.ts → lib/modules/competition-header/models/index.d.ts} +0 -0
|
@@ -0,0 +1,495 @@
|
|
|
1
|
+
import { Component, ContentChild, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { select } from '@ngrx/store';
|
|
3
|
+
import { CompetitionModeEnum, CompetitionStatusEnum, CompetitionStatusEnumLabel, DialogColor, DialogType, UnSubscriber, selectCompetitionConfig, selectCompetitionLabel, CancelCompetitionTypeEnum, CompetitionVersionStatusEnum, CompetitionVersionStatusEnumLabel, CompetitionVersionStatusGrouppingLabel, CompetitionTypeEnum } from 'myrtex-mf-ui-composite';
|
|
4
|
+
import { activateCompetition, cancelCompetition, cancelCompetitionWithValidation, competitionVersionChangeStatus, completeCompetition, createCompetitionVersion, deleteCompetitionVersion, loadCompetitionHeader, pauseCompetition, selectCompetitionVersion } from '../store/competition-header.actions';
|
|
5
|
+
import { selectActivityId, selectCompetitionSelectedVersionId, selectCompetitionStatus, selectCompetitionType, selectCompetitionVersions, selectManualVersionStatusChanged } from '../store/competition-header.selector';
|
|
6
|
+
import { CompetitionHeaderCustomButtonsDirective } from '../directives/competition-header-custom-buttons.directive';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "myrtex-mf-signer";
|
|
9
|
+
import * as i2 from "@ngrx/store";
|
|
10
|
+
import * as i3 from "myrtex-mf-ui-composite";
|
|
11
|
+
import * as i4 from "../services/settings.service";
|
|
12
|
+
import * as i5 from "@ng-select/ng-select";
|
|
13
|
+
import * as i6 from "myrtex-mf-ui";
|
|
14
|
+
import * as i7 from "@angular/common";
|
|
15
|
+
import * as i8 from "@angular/forms";
|
|
16
|
+
export class CompetitionHeaderComponent extends UnSubscriber {
|
|
17
|
+
constructor(signService, store, alertService, settingsService) {
|
|
18
|
+
super();
|
|
19
|
+
this.signService = signService;
|
|
20
|
+
this.store = store;
|
|
21
|
+
this.alertService = alertService;
|
|
22
|
+
this.settingsService = settingsService;
|
|
23
|
+
this.canChangeStatus = true;
|
|
24
|
+
this.canCreateVersionOnActivityPeriod = true;
|
|
25
|
+
this.canValidateVersionOnActivityPeriod = true;
|
|
26
|
+
this.canActivateVersionOnActivityPeriod = true;
|
|
27
|
+
this.validateVersionAction = undefined;
|
|
28
|
+
this.validateManagementAccess = undefined;
|
|
29
|
+
this.validatePiblicationAccess = undefined;
|
|
30
|
+
this.selectedCompetitionVersionInfo = new EventEmitter();
|
|
31
|
+
this.versions = [];
|
|
32
|
+
this.selectedVersion = '';
|
|
33
|
+
this.competitionStatusEnum = CompetitionStatusEnum;
|
|
34
|
+
this.cancelCompetitionTypeEnum = CancelCompetitionTypeEnum;
|
|
35
|
+
this.competitionVersionStatusEnum = CompetitionVersionStatusEnum;
|
|
36
|
+
this.competitionLabel = '';
|
|
37
|
+
this.showCancelCompetitionButton = false;
|
|
38
|
+
this.cancelCompetitionButtonLabel = 'Отменить отбор';
|
|
39
|
+
this.showCompleteCompetitionButton = false;
|
|
40
|
+
this.restoreButtonName = 'Возобновить';
|
|
41
|
+
}
|
|
42
|
+
get competitionAggregateStatusEnumLabel() {
|
|
43
|
+
if (this.versions && this.versions.length == 1 && this.selected
|
|
44
|
+
&& this.selected.status !== CompetitionVersionStatusEnum.Active) {
|
|
45
|
+
return CompetitionVersionStatusEnumLabel[this.selected.status];
|
|
46
|
+
}
|
|
47
|
+
return this.competition ? CompetitionStatusEnumLabel[this.competition.status] : '';
|
|
48
|
+
}
|
|
49
|
+
get competitionAggregateStatusCssClass() {
|
|
50
|
+
if (this.versions && this.versions.length == 1 && this.selected
|
|
51
|
+
&& (this.competition?.status || CompetitionStatusEnum.New) <= CompetitionStatusEnum.Active) {
|
|
52
|
+
return {
|
|
53
|
+
'': this.selected?.status !== CompetitionVersionStatusEnum.Active,
|
|
54
|
+
'color-green': this.selected?.status === CompetitionVersionStatusEnum.Active,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
'': this.competition?.status === CompetitionStatusEnum.New
|
|
59
|
+
|| this.competition?.status !== CompetitionStatusEnum.Completed,
|
|
60
|
+
'color-green': this.competition?.status === CompetitionStatusEnum.Active,
|
|
61
|
+
'color-orange': this.competition?.status === CompetitionStatusEnum.Staying,
|
|
62
|
+
'color-red': this.competition?.status === CompetitionStatusEnum.Canceled
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
get canCreateVersion() {
|
|
66
|
+
if (!this.canCreateVersionOnActivityPeriod) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
if (this.validateManagementAccess === undefined) {
|
|
70
|
+
return this.isLastVersion && this.selected?.status === CompetitionVersionStatusEnum.Active &&
|
|
71
|
+
this.competition !== undefined && this.competition.mode > CompetitionModeEnum.Base
|
|
72
|
+
&& (this.competition.status === CompetitionStatusEnum.Active ||
|
|
73
|
+
this.competition.status === CompetitionStatusEnum.Staying);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
return this.isLastVersion && this.selected?.status === CompetitionVersionStatusEnum.Active &&
|
|
77
|
+
this.competition !== undefined && this.competition.mode > CompetitionModeEnum.Base
|
|
78
|
+
&& (this.competition.status === CompetitionStatusEnum.Active ||
|
|
79
|
+
this.competition.status === CompetitionStatusEnum.Staying) &&
|
|
80
|
+
this.validateManagementAccess();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
get canDeleteVersion() {
|
|
84
|
+
if (this.validateManagementAccess === undefined) {
|
|
85
|
+
return this.selected?.status === this.competitionVersionStatusEnum.Draft
|
|
86
|
+
&& this.versions
|
|
87
|
+
&& this.versions.length > 1;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
return this.selected?.status === this.competitionVersionStatusEnum.Draft
|
|
91
|
+
&& this.versions
|
|
92
|
+
&& this.versions.length > 1
|
|
93
|
+
&& this.validateManagementAccess();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
get canActivateVersion() {
|
|
97
|
+
if (!this.canActivateVersionOnActivityPeriod) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
if (this.validatePiblicationAccess === undefined) {
|
|
101
|
+
return (this.selected?.status === CompetitionVersionStatusEnum.Draft &&
|
|
102
|
+
this.competition?.mode !== CompetitionModeEnum.VersionedExtended) ||
|
|
103
|
+
((this.selected?.status === CompetitionVersionStatusEnum.Confirmed ||
|
|
104
|
+
this.selected?.status === CompetitionVersionStatusEnum.Validation) &&
|
|
105
|
+
this.competition?.mode === CompetitionModeEnum.VersionedExtended);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
return (this.selected?.status === CompetitionVersionStatusEnum.Draft &&
|
|
109
|
+
this.competition?.mode !== CompetitionModeEnum.VersionedExtended) ||
|
|
110
|
+
((this.selected?.status === CompetitionVersionStatusEnum.Confirmed ||
|
|
111
|
+
this.selected?.status === CompetitionVersionStatusEnum.Validation) &&
|
|
112
|
+
this.competition?.mode === CompetitionModeEnum.VersionedExtended) &&
|
|
113
|
+
this.validatePiblicationAccess();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
get activateVersionDisabled() {
|
|
117
|
+
if (this.validatePiblicationAccess === undefined) {
|
|
118
|
+
return (!this.canChangeStatus ||
|
|
119
|
+
((this.selected?.status !== CompetitionVersionStatusEnum.Draft &&
|
|
120
|
+
this.competition?.mode !== CompetitionModeEnum.VersionedExtended) ||
|
|
121
|
+
(this.selected?.status !== CompetitionVersionStatusEnum.Confirmed &&
|
|
122
|
+
this.competition?.mode === CompetitionModeEnum.VersionedExtended)));
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
return (!this.canChangeStatus ||
|
|
126
|
+
((this.selected?.status !== CompetitionVersionStatusEnum.Draft &&
|
|
127
|
+
this.competition?.mode !== CompetitionModeEnum.VersionedExtended) ||
|
|
128
|
+
(this.selected?.status !== CompetitionVersionStatusEnum.Confirmed &&
|
|
129
|
+
this.competition?.mode === CompetitionModeEnum.VersionedExtended))) &&
|
|
130
|
+
this.validatePiblicationAccess();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
get validateVersionDisabled() {
|
|
134
|
+
if (this.validatePiblicationAccess === undefined) {
|
|
135
|
+
return !this.canChangeStatus;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
return !this.canChangeStatus && !!this.validatePiblicationAccess();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
get createVersionDisabled() {
|
|
142
|
+
if (this.validateManagementAccess === undefined) {
|
|
143
|
+
return !this.canChangeStatus;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
const validationRes = this.validateManagementAccess();
|
|
147
|
+
return !this.canChangeStatus && validationRes;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
get backToEditDisabled() {
|
|
151
|
+
if (this.validateManagementAccess === undefined) {
|
|
152
|
+
return !this.canChangeStatus;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
const validationRes = this.validateManagementAccess();
|
|
156
|
+
return !this.canChangeStatus && validationRes;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
get canValidateVersion() {
|
|
160
|
+
if (!this.canValidateVersionOnActivityPeriod) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
if (this.validatePiblicationAccess === undefined) {
|
|
164
|
+
return this.selected?.status === CompetitionVersionStatusEnum.Draft &&
|
|
165
|
+
this.competition?.mode === CompetitionModeEnum.VersionedExtended &&
|
|
166
|
+
this.competition?.status !== CompetitionStatusEnum.Canceled;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
return this.selected?.status === CompetitionVersionStatusEnum.Draft &&
|
|
170
|
+
this.competition?.mode === CompetitionModeEnum.VersionedExtended &&
|
|
171
|
+
this.validatePiblicationAccess() &&
|
|
172
|
+
this.competition?.status !== CompetitionStatusEnum.Canceled;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
get isLastVersion() {
|
|
176
|
+
if (this.versions?.length > 0) {
|
|
177
|
+
const m = Math.max(...this.versions.map(x => x.num));
|
|
178
|
+
return m === this.selected?.num;
|
|
179
|
+
}
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
get showRejectionReason() {
|
|
183
|
+
return !!this.selected?.rejectionReason &&
|
|
184
|
+
(this.selected?.status === CompetitionVersionStatusEnum.Draft
|
|
185
|
+
|| this.selected?.status === CompetitionVersionStatusEnum.Rejected);
|
|
186
|
+
}
|
|
187
|
+
get versionStatusClass() {
|
|
188
|
+
return {
|
|
189
|
+
'': this.selected?.status !== CompetitionVersionStatusEnum.Active,
|
|
190
|
+
'color-green': this.selected?.status === CompetitionVersionStatusEnum.Active
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/** Контекст для кастомных кнопок, может расширяться */
|
|
194
|
+
get customButtonsTemplateContext() {
|
|
195
|
+
return {
|
|
196
|
+
activityId: this._activityId,
|
|
197
|
+
competitionId: this.competition?.id,
|
|
198
|
+
competitionVersionId: this.selected?.id
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
get canReturnToEdit() {
|
|
202
|
+
if (this.validateManagementAccess === undefined) {
|
|
203
|
+
return this.selected?.status === CompetitionVersionStatusEnum.Rejected;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
return this.selected?.status === CompetitionVersionStatusEnum.Rejected && this.validateManagementAccess();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
get canManageCompetition() {
|
|
210
|
+
if (this.validateManagementAccess === undefined) {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
return this.validateManagementAccess() &&
|
|
215
|
+
this.competition?.status != this.competitionStatusEnum.New &&
|
|
216
|
+
this.competition?.status != this.competitionStatusEnum.Completed &&
|
|
217
|
+
this.competition?.status != this.competitionStatusEnum.NotPlace;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
get showEbLink() {
|
|
221
|
+
return this.competition != undefined &&
|
|
222
|
+
this.versions.some(x => x.status != CompetitionVersionStatusEnum.Draft);
|
|
223
|
+
}
|
|
224
|
+
get canCompleteCompetition() {
|
|
225
|
+
return this.competition != undefined &&
|
|
226
|
+
(this.competition.status == CompetitionStatusEnum.Active ||
|
|
227
|
+
this.competition.status == CompetitionStatusEnum.Staying)
|
|
228
|
+
&& this.showCompleteCompetitionButton;
|
|
229
|
+
}
|
|
230
|
+
get canCancelCompetition() {
|
|
231
|
+
return this.competition != undefined &&
|
|
232
|
+
(this.competition.status == CompetitionStatusEnum.Active ||
|
|
233
|
+
this.competition.status == CompetitionStatusEnum.Staying ||
|
|
234
|
+
this.competition.status == CompetitionStatusEnum.Canceled)
|
|
235
|
+
&& this.showCancelCompetitionButton;
|
|
236
|
+
}
|
|
237
|
+
ngOnInit() {
|
|
238
|
+
this.store.dispatch(loadCompetitionHeader());
|
|
239
|
+
this.appendSubscription(this.store.pipe(select(selectCompetitionVersions)).subscribe(result => {
|
|
240
|
+
if (result) {
|
|
241
|
+
this.versions = result;
|
|
242
|
+
this.select();
|
|
243
|
+
}
|
|
244
|
+
}));
|
|
245
|
+
this.appendSubscription(this.store.pipe(select(selectCompetitionSelectedVersionId)).subscribe(result => {
|
|
246
|
+
if (result) {
|
|
247
|
+
this.selectedVersion = result;
|
|
248
|
+
this.select();
|
|
249
|
+
}
|
|
250
|
+
}));
|
|
251
|
+
this.appendSubscription(this.store.pipe(select(selectCompetitionStatus)).subscribe(result => {
|
|
252
|
+
if (result) {
|
|
253
|
+
this.competition = result;
|
|
254
|
+
}
|
|
255
|
+
}));
|
|
256
|
+
this.appendSubscription(this.store.pipe(select(selectCompetitionType)).subscribe(result => {
|
|
257
|
+
if (result !== null && result !== undefined) {
|
|
258
|
+
this._competitionType = result;
|
|
259
|
+
}
|
|
260
|
+
}));
|
|
261
|
+
this.appendSubscription(this.store.pipe(select(selectCompetitionLabel)).subscribe(result => {
|
|
262
|
+
this.competitionLabel = result;
|
|
263
|
+
}));
|
|
264
|
+
this.appendSubscription(this.store.pipe(select(selectActivityId)).subscribe(result => {
|
|
265
|
+
this._activityId = result;
|
|
266
|
+
}));
|
|
267
|
+
this.appendSubscription(this.store.pipe(select(selectCompetitionConfig)).subscribe(result => {
|
|
268
|
+
if (result) {
|
|
269
|
+
this.competitionConfig = result;
|
|
270
|
+
if (this.competitionConfig.cancelCompetitionLabel) {
|
|
271
|
+
this.cancelCompetitionButtonLabel = this.competitionConfig.cancelCompetitionLabel;
|
|
272
|
+
}
|
|
273
|
+
if (this.competitionConfig.cancelCompetitionType
|
|
274
|
+
&& this.competitionConfig.cancelCompetitionType > this.cancelCompetitionTypeEnum.Disabled) {
|
|
275
|
+
this.showCancelCompetitionButton = true;
|
|
276
|
+
}
|
|
277
|
+
this.showCompleteCompetitionButton = this.competitionConfig.showCompleteCompetitionButton;
|
|
278
|
+
if (this.competitionConfig.restoreButtonName) {
|
|
279
|
+
this.restoreButtonName = this.competitionConfig.restoreButtonName;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}));
|
|
283
|
+
this.appendSubscription(this.store.pipe(select(selectManualVersionStatusChanged)).subscribe(result => {
|
|
284
|
+
// произошло ручное изменение статуса, толкаем дальше по таймауту
|
|
285
|
+
if (result) {
|
|
286
|
+
setTimeout(() => {
|
|
287
|
+
const selectedItem = this.selected;
|
|
288
|
+
if (selectedItem) {
|
|
289
|
+
this.store.dispatch(competitionVersionChangeStatus({
|
|
290
|
+
versionId: selectedItem.id,
|
|
291
|
+
status: CompetitionVersionStatusEnum.Confirmed
|
|
292
|
+
}));
|
|
293
|
+
}
|
|
294
|
+
}, 10000);
|
|
295
|
+
}
|
|
296
|
+
}));
|
|
297
|
+
this.settingsService.getSelelectionEditEbLinks().subscribe(res => {
|
|
298
|
+
this._ebLinksModel = res;
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
ngOnDestroy() {
|
|
302
|
+
super.ngOnDestroy();
|
|
303
|
+
}
|
|
304
|
+
getCompetitionVersionStatusEnumLabel(value) {
|
|
305
|
+
return CompetitionVersionStatusEnumLabel[value];
|
|
306
|
+
}
|
|
307
|
+
getCompetitionVersionStatusGrouppingLabel(value) {
|
|
308
|
+
return CompetitionVersionStatusGrouppingLabel[value];
|
|
309
|
+
}
|
|
310
|
+
createVersion() {
|
|
311
|
+
this.alertService.showDialog({
|
|
312
|
+
title: `Формирование изменений`,
|
|
313
|
+
message: `${this.getWarningMessageHtml('Внимание! Формирование изменений приведет к созданию новой версии отбора')}
|
|
314
|
+
<p>
|
|
315
|
+
Вы действительно хотите сформировать изменения?
|
|
316
|
+
</p>`,
|
|
317
|
+
color: DialogColor.yellow,
|
|
318
|
+
type: DialogType.confirm,
|
|
319
|
+
okLabel: 'Подтвердить',
|
|
320
|
+
cancelLabel: 'Отменить',
|
|
321
|
+
okCallback: () => {
|
|
322
|
+
this.store.dispatch(createCompetitionVersion());
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
activateVersion() {
|
|
327
|
+
if (this.selected) {
|
|
328
|
+
const selectedItem = this.selected;
|
|
329
|
+
this.alertService.showDialog({
|
|
330
|
+
title: `Публикация ${this.competitionLabel}а`,
|
|
331
|
+
message: `${this.getWarningMessageHtml()}
|
|
332
|
+
<p>
|
|
333
|
+
Вы действительно хотите опубликовать ${this.competitionLabel}?
|
|
334
|
+
</p>`,
|
|
335
|
+
color: DialogColor.yellow,
|
|
336
|
+
type: DialogType.confirm,
|
|
337
|
+
okLabel: 'Подтвердить',
|
|
338
|
+
cancelLabel: 'Отменить',
|
|
339
|
+
okCallback: () => {
|
|
340
|
+
this.store.dispatch(competitionVersionChangeStatus({
|
|
341
|
+
versionId: selectedItem.id,
|
|
342
|
+
status: CompetitionVersionStatusEnum.Active
|
|
343
|
+
}));
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
validateVersion() {
|
|
349
|
+
if (this.selected) {
|
|
350
|
+
const selectedItem = this.selected;
|
|
351
|
+
if (this.validateVersionAction) {
|
|
352
|
+
this.validateVersionAction(selectedItem.id, () => {
|
|
353
|
+
this.signService.sign({
|
|
354
|
+
title: 'Направление документа на согласование',
|
|
355
|
+
okLabel: 'Отправить',
|
|
356
|
+
cancelLabel: 'Отменить',
|
|
357
|
+
pdfUrl: `/m-data/minfin/pdf-competition/${selectedItem.id}`,
|
|
358
|
+
xmlUrl: `/m-data/minfin/xml-competition/${selectedItem.id}`,
|
|
359
|
+
provider: 'empty'
|
|
360
|
+
}, () => {
|
|
361
|
+
this.store.dispatch(competitionVersionChangeStatus({
|
|
362
|
+
versionId: selectedItem.id,
|
|
363
|
+
status: CompetitionVersionStatusEnum.Validation
|
|
364
|
+
}));
|
|
365
|
+
}, () => {
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
removeVersion() {
|
|
372
|
+
if (this.selected) {
|
|
373
|
+
const selectedItem = this.selected;
|
|
374
|
+
this.alertService.showDialog(`Удалить версию ${this.competitionLabel}а?`, `${this.getWarningMessageHtml()}
|
|
375
|
+
<p>
|
|
376
|
+
Вы действительно хотите удалить версию ${this.competitionLabel?.toLowerCase()}а?
|
|
377
|
+
</p>`, DialogType.confirm, (ok) => {
|
|
378
|
+
this.store.dispatch(deleteCompetitionVersion({ versionId: selectedItem.id }));
|
|
379
|
+
}, undefined, null, undefined, undefined, DialogColor.red);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
restore() {
|
|
383
|
+
this.alertService.showDialog(`Возобновить ${this.competitionLabel}?`, null, DialogType.confirm, (ok) => {
|
|
384
|
+
this.store.dispatch(activateCompetition());
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
pause() {
|
|
388
|
+
this.alertService.showDialog(`Приостановить ${this.competitionLabel}?`, null, DialogType.confirm, (ok) => {
|
|
389
|
+
this.store.dispatch(pauseCompetition());
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
cancel() {
|
|
393
|
+
if (this.competitionConfig && this.competitionConfig.cancelCompetitionType == this.cancelCompetitionTypeEnum.WithValidation) {
|
|
394
|
+
if (this.selected) {
|
|
395
|
+
const selectedItem = this.selected;
|
|
396
|
+
this.store.dispatch(cancelCompetitionWithValidation({ versionId: selectedItem.id }));
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
this.alertService.showDialog(`Отменить ${this.competitionLabel}?`, null, DialogType.confirm, (ok) => {
|
|
401
|
+
this.store.dispatch(cancelCompetition());
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
complete() {
|
|
406
|
+
this.alertService.showDialog(`Завершить ${this.competitionLabel}?`, null, DialogType.confirm, (ok) => {
|
|
407
|
+
this.store.dispatch(completeCompetition());
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
selectVersion(id) {
|
|
411
|
+
this.store.dispatch(selectCompetitionVersion({ versionId: id }));
|
|
412
|
+
}
|
|
413
|
+
backToEdit() {
|
|
414
|
+
this.alertService.showDialog(`редактирование текущей версии`, `Вы действительно хотите редактировать текущую версию ${this.competitionLabel.toLowerCase()}a`, DialogType.confirm, (ok) => {
|
|
415
|
+
if (!!this.selected) {
|
|
416
|
+
this.store.dispatch(competitionVersionChangeStatus({
|
|
417
|
+
versionId: this.selected.id,
|
|
418
|
+
status: CompetitionVersionStatusEnum.Draft
|
|
419
|
+
}));
|
|
420
|
+
}
|
|
421
|
+
}, undefined, null, 'Подтвердить', undefined, DialogColor.yellow);
|
|
422
|
+
}
|
|
423
|
+
showRejection(model) {
|
|
424
|
+
this.alertService.showDialog(`Причина отклонения`, ` <div class="modal-body__author">
|
|
425
|
+
<span>${model.author}</span>
|
|
426
|
+
<span>${model.createdDate}</span>
|
|
427
|
+
</div>
|
|
428
|
+
<p class="modal-body__text">${model.reason}</p>
|
|
429
|
+
`, DialogType.confirm, undefined, undefined, null, undefined, '', DialogColor.yellow);
|
|
430
|
+
}
|
|
431
|
+
redirectToEb() {
|
|
432
|
+
if (this.competition != undefined && this._competitionType != undefined && this._ebLinksModel != undefined) {
|
|
433
|
+
let link = '';
|
|
434
|
+
if (this._competitionType == CompetitionTypeEnum.SocialOrder) {
|
|
435
|
+
link = `${this._ebLinksModel.socialOrder}/#SocialOrderAgreement`;
|
|
436
|
+
}
|
|
437
|
+
else if (this._competitionType == CompetitionTypeEnum.Region) {
|
|
438
|
+
link = `${this._ebLinksModel.subsidy}/#AgreementSubsidyNonFederal`;
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
link = `${this._ebLinksModel.subsidy}/#AgreementSubsidyRegistry`;
|
|
442
|
+
}
|
|
443
|
+
window.open(link, '_blank');
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
select() {
|
|
447
|
+
if (this.versions && this.selectedVersion) {
|
|
448
|
+
this.selected = this.versions.find(s => s.id === this.selectedVersion);
|
|
449
|
+
this.selectedCompetitionVersionInfo.emit(this.selected);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
getWarningMessageHtml(customText = undefined) {
|
|
453
|
+
if (!customText) {
|
|
454
|
+
customText = 'Внимание! Данное действие нельзя отменить';
|
|
455
|
+
}
|
|
456
|
+
return `<div class="bg-news px-3 py-2 radius-4 my-3 d-flex">
|
|
457
|
+
<div class="mr-3">
|
|
458
|
+
<svg width="16" height="16" fill="none">
|
|
459
|
+
<use href="#alert"></use>
|
|
460
|
+
</svg>
|
|
461
|
+
</div>
|
|
462
|
+
<div class="small m-0 bold">
|
|
463
|
+
<span class="color-orange">
|
|
464
|
+
${customText}
|
|
465
|
+
</span>
|
|
466
|
+
</div>
|
|
467
|
+
</div>`;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
CompetitionHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CompetitionHeaderComponent, deps: [{ token: i1.SignService }, { token: i2.Store }, { token: i3.AlertService }, { token: i4.SettingsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
471
|
+
CompetitionHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: CompetitionHeaderComponent, selector: "mrx-competition-header", inputs: { canChangeStatus: "canChangeStatus", canCreateVersionOnActivityPeriod: "canCreateVersionOnActivityPeriod", canValidateVersionOnActivityPeriod: "canValidateVersionOnActivityPeriod", canActivateVersionOnActivityPeriod: "canActivateVersionOnActivityPeriod", validateVersionAction: "validateVersionAction", validateManagementAccess: "validateManagementAccess", validatePiblicationAccess: "validatePiblicationAccess" }, outputs: { selectedCompetitionVersionInfo: "selectedCompetitionVersionInfo" }, queries: [{ propertyName: "customButtonsTemplate", first: true, predicate: CompetitionHeaderCustomButtonsDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" [mrxCdkTooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{ getCompetitionVersionStatusGrouppingLabel(item.status) }}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{ item.num }} \u043E\u0442 {{ item.createdDate }}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{ item.num }} \u043E\u0442 {{ item.createdDate }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n [mrxCdkTooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\"\r\n stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" [mrxCdkTooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path\r\n d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\"\r\n stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" [mrxCdkTooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\"\r\n stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && showEbLink\">\r\n <mrx-dropdown [mainPlacement]=\"'bottom-end'\" [fallbackPlacements]=\"['top-end']\">\r\n <ng-template #dropdownToggle>\r\n <span class=\"mrx-icon icon-more-vertical icon-font-24\"></span>\r\n </ng-template>\r\n <ng-template #dropdownMenu>\r\n <button mrxHideAfterClick (click)=\"redirectToEb()\">\r\n <span class=\"mrx-icon icon-link icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0443 \u0431\u044E\u0434\u0436\u0435\u0442\u043D\u043E\u0433\u043E \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0413\u0418\u0418\u0421 \u00AB\u042D\u0411\u00BB</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick (click)=\"pause()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active && canManageCompetition\">\r\n <span class=\"mrx-icon icon-pause-filled icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick (click)=\"restore()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying && canManageCompetition\">\r\n <span class=\"mrx-icon icon-play-filled icon-font-24 mr-2\"></span>\r\n <span>{{ restoreButtonName }}</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick\r\n *ngIf=\"canCompleteCompetition && canManageCompetition\"\r\n (click)=\"complete()\">\r\n <span class=\"mrx-icon icon-stop-filled icon-font-24 mr-2\"></span>\r\n <span>\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick\r\n *ngIf=\"canCancelCompetition && canManageCompetition\"\r\n (click)=\"cancel()\">\r\n <span class=\"mrx-icon icon-close icon-font-24 mr-2\"></span>\r\n <span>{{ cancelCompetitionButtonLabel }}</span>\r\n </button>\r\n </ng-template>\r\n </mrx-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", components: [{ type: i5.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i6.DropdownComponent, selector: "mrx-dropdown", inputs: ["mainPlacement", "fallbackPlacements", "closeOnClick", "customClasses"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CompetitionLabelDirective, selector: "[myCompetitionLabel]" }, { type: i6.CdkTooltipDirective, selector: "[mrxCdkTooltip]", inputs: ["mrxCdkTooltip", "tooltipActive", "autoCloseByScroll", "tooltipPosition", "tooltipMaxWidth"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgOptgroupTemplateDirective, selector: "[ng-optgroup-tmp]" }, { type: i5.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i5.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.HideAfterClickDirective, selector: "[mrxHideAfterClick]" }] });
|
|
472
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CompetitionHeaderComponent, decorators: [{
|
|
473
|
+
type: Component,
|
|
474
|
+
args: [{ selector: 'mrx-competition-header', template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" [mrxCdkTooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{ getCompetitionVersionStatusGrouppingLabel(item.status) }}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{ item.num }} \u043E\u0442 {{ item.createdDate }}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{ item.num }} \u043E\u0442 {{ item.createdDate }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n [mrxCdkTooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\"\r\n stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" [mrxCdkTooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path\r\n d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\"\r\n stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" [mrxCdkTooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\"\r\n stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && showEbLink\">\r\n <mrx-dropdown [mainPlacement]=\"'bottom-end'\" [fallbackPlacements]=\"['top-end']\">\r\n <ng-template #dropdownToggle>\r\n <span class=\"mrx-icon icon-more-vertical icon-font-24\"></span>\r\n </ng-template>\r\n <ng-template #dropdownMenu>\r\n <button mrxHideAfterClick (click)=\"redirectToEb()\">\r\n <span class=\"mrx-icon icon-link icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0443 \u0431\u044E\u0434\u0436\u0435\u0442\u043D\u043E\u0433\u043E \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0413\u0418\u0418\u0421 \u00AB\u042D\u0411\u00BB</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick (click)=\"pause()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active && canManageCompetition\">\r\n <span class=\"mrx-icon icon-pause-filled icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick (click)=\"restore()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying && canManageCompetition\">\r\n <span class=\"mrx-icon icon-play-filled icon-font-24 mr-2\"></span>\r\n <span>{{ restoreButtonName }}</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick\r\n *ngIf=\"canCompleteCompetition && canManageCompetition\"\r\n (click)=\"complete()\">\r\n <span class=\"mrx-icon icon-stop-filled icon-font-24 mr-2\"></span>\r\n <span>\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick\r\n *ngIf=\"canCancelCompetition && canManageCompetition\"\r\n (click)=\"cancel()\">\r\n <span class=\"mrx-icon icon-close icon-font-24 mr-2\"></span>\r\n <span>{{ cancelCompetitionButtonLabel }}</span>\r\n </button>\r\n </ng-template>\r\n </mrx-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
|
|
475
|
+
}], ctorParameters: function () { return [{ type: i1.SignService }, { type: i2.Store }, { type: i3.AlertService }, { type: i4.SettingsService }]; }, propDecorators: { customButtonsTemplate: [{
|
|
476
|
+
type: ContentChild,
|
|
477
|
+
args: [CompetitionHeaderCustomButtonsDirective]
|
|
478
|
+
}], canChangeStatus: [{
|
|
479
|
+
type: Input
|
|
480
|
+
}], canCreateVersionOnActivityPeriod: [{
|
|
481
|
+
type: Input
|
|
482
|
+
}], canValidateVersionOnActivityPeriod: [{
|
|
483
|
+
type: Input
|
|
484
|
+
}], canActivateVersionOnActivityPeriod: [{
|
|
485
|
+
type: Input
|
|
486
|
+
}], validateVersionAction: [{
|
|
487
|
+
type: Input
|
|
488
|
+
}], validateManagementAccess: [{
|
|
489
|
+
type: Input
|
|
490
|
+
}], validatePiblicationAccess: [{
|
|
491
|
+
type: Input
|
|
492
|
+
}], selectedCompetitionVersionInfo: [{
|
|
493
|
+
type: Output
|
|
494
|
+
}] } });
|
|
495
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsTUFBTSxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixXQUFXLEVBQ1gsVUFBVSxFQUVWLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsc0JBQXNCLEVBRXRCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsaUNBQWlDLEVBQ2pDLHNDQUFzQyxFQUN0QyxtQkFBbUIsRUFDcEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQiwrQkFBK0IsRUFDL0IsOEJBQThCLEVBQzlCLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3pCLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQ0FBa0MsRUFDbEMsdUJBQXVCLEVB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QUMxRDtRQUNELE9BQU87Ozs7Ozs7O29CQVFTLFVBQVU7OzttQkFHWCxDQUFDO0lBQ2xCLENBQUM7O3dIQTNnQlUsMEJBQTBCOzRHQUExQiwwQkFBMEIsd21CQUV2Qix1Q0FBdUMsdUVDN0R2RCwramFBeUtBOzRGRDlHYSwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0Usd0JBQXdCOytLQU0zQixxQkFBcUI7c0JBRDNCLFlBQVk7dUJBQUMsdUNBQXVDO2dCQUk5QyxlQUFlO3NCQURyQixLQUFLO2dCQUlDLGdDQUFnQztzQkFEdEMsS0FBSztnQkFJQyxrQ0FBa0M7c0JBRHhDLEtBQUs7Z0JBSUMsa0NBQWtDO3NCQUR4QyxLQUFLO2dCQUlDLHFCQUFxQjtzQkFEM0IsS0FBSztnQkFJQyx3QkFBd0I7c0JBRDlCLEtBQUs7Z0JBSUMseUJBQXlCO3NCQUQvQixLQUFLO2dCQUlDLDhCQUE4QjtzQkFEcEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcbmltcG9ydCB7IENvbXBldGl0aW9uVmVyc2lvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBldGl0aW9uLXZlcnNpb24ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBldGl0aW9uTW9kZUVudW0sXHJcbiAgQ29tcGV0aXRpb25TdGF0dXNFbnVtLFxyXG4gIENvbXBldGl0aW9uU3RhdHVzRW51bUxhYmVsLFxyXG4gIERpYWxvZ0NvbG9yLFxyXG4gIERpYWxvZ1R5cGUsXHJcbiAgQWxlcnRTZXJ2aWNlLFxyXG4gIFVuU3Vic2NyaWJlcixcclxuICBzZWxlY3RDb21wZXRpdGlvbkNvbmZpZyxcclxuICBzZWxlY3RDb21wZXRpdGlvbkxhYmVsLFxyXG4gIENvbXBldGl0aW9uQ29uZmlnTW9kZWwsXHJcbiAgQ2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bSxcclxuICBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLFxyXG4gIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1MYWJlbCxcclxuICBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNHcm91cHBpbmdMYWJlbCxcclxuICBDb21wZXRpdGlvblR5cGVFbnVtXHJcbn0gZnJvbSAnbXlydGV4LW1mLXVpLWNvbXBvc2l0ZSc7XHJcbmltcG9ydCB7XHJcbiAgYWN0aXZhdGVDb21wZXRpdGlvbixcclxuICBjYW5jZWxDb21wZXRpdGlvbixcclxuICBjYW5jZWxDb21wZXRpdGlvbldpdGhWYWxpZGF0aW9uLFxyXG4gIGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyxcclxuICBjb21wbGV0ZUNvbXBldGl0aW9uLFxyXG4gIGNyZWF0ZUNvbXBldGl0aW9uVmVyc2lvbixcclxuICBkZWxldGVDb21wZXRpdGlvblZlcnNpb24sXHJcbiAgbG9hZENvbXBldGl0aW9uSGVhZGVyLFxyXG4gIHBhdXNlQ29tcGV0aXRpb24sXHJcbiAgc2VsZWN0Q29tcGV0aXRpb25WZXJzaW9uXHJcbn0gZnJvbSAnLi4vc3RvcmUvY29tcGV0aXRpb24taGVhZGVyLmFjdGlvbnMnO1xyXG5pbXBvcnQgeyBDb21wZXRpdGlvblN0YXR1c01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBldGl0aW9uLXN0YXR1cy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgc2VsZWN0QWN0aXZpdHlJZCxcclxuICBzZWxlY3RDb21wZXRpdGlvblNlbGVjdGVkVmVyc2lvbklkLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uU3RhdHVzLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uVHlwZSxcclxuICBzZWxlY3RDb21wZXRpdGlvblZlcnNpb25zLFxyXG4gIHNlbGVjdE1hbnVhbFZlcnNpb25TdGF0dXNDaGFuZ2VkXHJcbn0gZnJvbSAnLi4vc3RvcmUvY29tcGV0aXRpb24taGVhZGVyLnNlbGVjdG9yJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jb21wZXRpdGlvbi1oZWFkZXItY3VzdG9tLWJ1dHRvbnMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25SZWplY3Rpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IFNpZ25TZXJ2aWNlIH0gZnJvbSAnbXlydGV4LW1mLXNpZ25lcic7XHJcbmltcG9ydCB7IFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFQkxpbmtzTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZWItbGlua3MubW9kZWwnO1xyXG5cclxuZXhwb3J0IGRlY2xhcmUgdHlwZSB2YWxpZGF0ZVZlcnNpb25GbiA9ICgocGFyYW06IHN0cmluZywgb25WYWxpZGF0ZWQ6ICgpID0+IHZvaWQpID0+IHZvaWQpO1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIGludGVyZmFjZSBXaW5kb3cge1xyXG4gICAgQ3J5cHRvSW50ZXJjZXB0b3I6IGFueTtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbXJ4LWNvbXBldGl0aW9uLWhlYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXBldGl0aW9uLWhlYWRlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbXBldGl0aW9uSGVhZGVyQ29tcG9uZW50IGV4dGVuZHMgVW5TdWJzY3JpYmVyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBAQ29udGVudENoaWxkKENvbXBldGl0aW9uSGVhZGVyQ3VzdG9tQnV0dG9uc0RpcmVjdGl2ZSlcclxuICBwdWJsaWMgY3VzdG9tQnV0dG9uc1RlbXBsYXRlITogQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5DaGFuZ2VTdGF0dXMgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5DcmVhdGVWZXJzaW9uT25BY3Rpdml0eVBlcmlvZCA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhblZhbGlkYXRlVmVyc2lvbk9uQWN0aXZpdHlQZXJpb2QgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5BY3RpdmF0ZVZlcnNpb25PbkFjdGl2aXR5UGVyaW9kID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdmFsaWRhdGVWZXJzaW9uQWN0aW9uOiB1bmRlZmluZWQgfCB2YWxpZGF0ZVZlcnNpb25GbiA9IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzOiAoKCgpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkKSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzczogKCgoKSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZCkgPSB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBzZWxlY3RlZENvbXBldGl0aW9uVmVyc2lvbkluZm8gPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBldGl0aW9uVmVyc2lvbk1vZGVsPigpO1xyXG5cclxuICBwdWJsaWMgY29tcGV0aXRpb246IENvbXBldGl0aW9uU3RhdHVzTW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIHZlcnNpb25zOiBDb21wZXRpdGlvblZlcnNpb25Nb2RlbFtdID0gW107XHJcbiAgcHVibGljIHNlbGVjdGVkOiBDb21wZXRpdGlvblZlcnNpb25Nb2RlbCB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgc2VsZWN0ZWRWZXJzaW9uID0gJyc7XHJcbiAgcHVibGljIGNvbXBldGl0aW9uU3RhdHVzRW51bSA9IENvbXBldGl0aW9uU3RhdHVzRW51bTtcclxuICBwdWJsaWMgY2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bSA9IENhbmNlbENvbXBldGl0aW9uVHlwZUVudW07XHJcbiAgcHVibGljIGNvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0gPSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtO1xyXG4gIHB1YmxpYyBjb21wZXRpdGlvbkxhYmVsID0gJyc7XHJcbiAgcHVibGljIHNob3dDYW5jZWxDb21wZXRpdGlvbkJ1dHRvbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjYW5jZWxDb21wZXRpdGlvbkJ1dHRvbkxhYmVsID0gJ9Ce0YLQvNC10L3QuNGC0Ywg0L7RgtCx0L7RgCc7XHJcbiAgcHVibGljIGNvbXBldGl0aW9uQ29uZmlnOiBDb21wZXRpdGlvbkNvbmZpZ01vZGVsIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBzaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyByZXN0b3JlQnV0dG9uTmFtZSA9ICfQktC+0LfQvtCx0L3QvtCy0LjRgtGMJztcclxuICBwcml2YXRlIF9zaWduQ2FsbGJhY2s6IGFueTtcclxuICBwcml2YXRlIF9hY3Rpdml0eUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZWJMaW5rc01vZGVsOiBFQkxpbmtzTW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfY29tcGV0aXRpb25UeXBlOiBDb21wZXRpdGlvblR5cGVFbnVtIHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNpZ25TZXJ2aWNlOiBTaWduU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNvbXBldGl0aW9uQWdncmVnYXRlU3RhdHVzRW51bUxhYmVsKCkge1xyXG4gICAgaWYgKHRoaXMudmVyc2lvbnMgJiYgdGhpcy52ZXJzaW9ucy5sZW5ndGggPT0gMSAmJiB0aGlzLnNlbGVjdGVkXHJcbiAgICAgICYmIHRoaXMuc2VsZWN0ZWQuc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSkge1xyXG4gICAgICByZXR1cm4gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bUxhYmVsW3RoaXMuc2VsZWN0ZWQuc3RhdHVzXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNvbXBldGl0aW9uID8gQ29tcGV0aXRpb25TdGF0dXNFbnVtTGFiZWxbdGhpcy5jb21wZXRpdGlvbi5zdGF0dXNdIDogJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNvbXBldGl0aW9uQWdncmVnYXRlU3RhdHVzQ3NzQ2xhc3MoKTogYW55IHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zICYmIHRoaXMudmVyc2lvbnMubGVuZ3RoID09IDEgJiYgdGhpcy5zZWxlY3RlZFxyXG4gICAgICAmJiAodGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzIHx8IENvbXBldGl0aW9uU3RhdHVzRW51bS5OZXcpIDw9IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAnJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSxcclxuICAgICAgICAnY29sb3ItZ3JlZW4nOiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlLFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnJzogdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uTmV3XHJcbiAgICAgICAgfHwgdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzICE9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ29tcGxldGVkLFxyXG4gICAgICAnY29sb3ItZ3JlZW4nOiB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUsXHJcbiAgICAgICdjb2xvci1vcmFuZ2UnOiB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5TdGF5aW5nLFxyXG4gICAgICAnY29sb3ItcmVkJzogdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ2FuY2VsZWRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuQ3JlYXRlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5jYW5DcmVhdGVWZXJzaW9uT25BY3Rpdml0eVBlcmlvZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RWZXJzaW9uICYmIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb21wZXRpdGlvbi5tb2RlID4gQ29tcGV0aXRpb25Nb2RlRW51bS5CYXNlXHJcbiAgICAgICAgJiYgKFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUgfHxcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RWZXJzaW9uICYmIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb21wZXRpdGlvbi5tb2RlID4gQ29tcGV0aXRpb25Nb2RlRW51bS5CYXNlXHJcbiAgICAgICAgJiYgKFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUgfHxcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZykgJiZcclxuICAgICAgICB0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5EZWxldGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gdGhpcy5jb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0XHJcbiAgICAgICAgJiYgdGhpcy52ZXJzaW9uc1xyXG4gICAgICAgICYmIHRoaXMudmVyc2lvbnMubGVuZ3RoID4gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IHRoaXMuY29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAgICYmIHRoaXMudmVyc2lvbnNcclxuICAgICAgICAmJiB0aGlzLnZlcnNpb25zLmxlbmd0aCA+IDFcclxuICAgICAgICAmJiB0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5BY3RpdmF0ZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuY2FuQWN0aXZhdGVWZXJzaW9uT25BY3Rpdml0eVBlcmlvZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQgJiZcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgIT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpIHx8XHJcbiAgICAgICAgKCh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQ29uZmlybWVkIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5WYWxpZGF0aW9uKSAmJlxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSA9PT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdCAmJlxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSAhPT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkgfHxcclxuICAgICAgICAoKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWQgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLlZhbGlkYXRpb24pICYmXHJcbiAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSAmJlxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhY3RpdmF0ZVZlcnNpb25EaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gKCF0aGlzLmNhbkNoYW5nZVN0YXR1cyB8fFxyXG4gICAgICAgICgodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0ICYmXHJcbiAgICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgIT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpIHx8XHJcbiAgICAgICAgICAodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkNvbmZpcm1lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICghdGhpcy5jYW5DaGFuZ2VTdGF0dXMgfHxcclxuICAgICAgICAgICgodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0ICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSAhPT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkgfHxcclxuICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWQgJiZcclxuICAgICAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSkpICYmXHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZhbGlkYXRlVmVyc2lvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gIXRoaXMuY2FuQ2hhbmdlU3RhdHVzICYmICEhdGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNyZWF0ZVZlcnNpb25EaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzID0gdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKTtcclxuICAgICAgcmV0dXJuICF0aGlzLmNhbkNoYW5nZVN0YXR1cyAmJiB2YWxpZGF0aW9uUmVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBiYWNrVG9FZGl0RGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gIXRoaXMuY2FuQ2hhbmdlU3RhdHVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdmFsaWRhdGlvblJlcyA9IHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzKCk7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXMgJiYgdmFsaWRhdGlvblJlcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuVmFsaWRhdGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmNhblZhbGlkYXRlVmVyc2lvbk9uQWN0aXZpdHlQZXJpb2QpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkICYmXHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzICE9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ2FuY2VsZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0ICYmXHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSA9PT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCAmJlxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcygpICYmXHJcbiAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgIT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5DYW5jZWxlZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNMYXN0VmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG0gPSBNYXRoLm1heCguLi50aGlzLnZlcnNpb25zLm1hcCh4ID0+IHgubnVtKSk7XHJcbiAgICAgIHJldHVybiBtID09PSB0aGlzLnNlbGVjdGVkPy5udW07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNob3dSZWplY3Rpb25SZWFzb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkPy5yZWplY3Rpb25SZWFzb24gJiZcclxuICAgICAgKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAgIHx8IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5SZWplY3RlZClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmVyc2lvblN0YXR1c0NsYXNzKCk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSxcclxuICAgICAgJ2NvbG9yLWdyZWVuJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqINCa0L7QvdGC0LXQutGB0YIg0LTQu9GPINC60LDRgdGC0L7QvNC90YvRhSDQutC90L7Qv9C+0LosINC80L7QttC10YIg0YDQsNGB0YjQuNGA0Y/RgtGM0YHRjyAqL1xyXG4gIHB1YmxpYyBnZXQgY3VzdG9tQnV0dG9uc1RlbXBsYXRlQ29udGV4dCgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYWN0aXZpdHlJZDogdGhpcy5fYWN0aXZpdHlJZCxcclxuICAgICAgY29tcGV0aXRpb25JZDogdGhpcy5jb21wZXRpdGlvbj8uaWQsXHJcbiAgICAgIGNvbXBldGl0aW9uVmVyc2lvbklkOiB0aGlzLnNlbGVjdGVkPy5pZFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuUmV0dXJuVG9FZGl0KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5SZWplY3RlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uUmVqZWN0ZWQgJiYgdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuTWFuYWdlQ29tcGV0aXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKSAmJlxyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyAhPSB0aGlzLmNvbXBldGl0aW9uU3RhdHVzRW51bS5OZXcgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgIT0gdGhpcy5jb21wZXRpdGlvblN0YXR1c0VudW0uQ29tcGxldGVkICYmXHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzICE9IHRoaXMuY29tcGV0aXRpb25TdGF0dXNFbnVtLk5vdFBsYWNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG93RWJMaW5rKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcGV0aXRpb24gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMudmVyc2lvbnMuc29tZSh4ID0+IHguc3RhdHVzICE9IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5Db21wbGV0ZUNvbXBldGl0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcGV0aXRpb24gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICh0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlIHx8XHJcbiAgICAgIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09IENvbXBldGl0aW9uU3RhdHVzRW51bS5TdGF5aW5nKVxyXG4gICAgICAgICAgJiYgdGhpcy5zaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuQ2FuY2VsQ29tcGV0aXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wZXRpdGlvbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAodGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSB8fFxyXG4gICAgICB0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyB8fFxyXG4gICAgICB0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ2FuY2VsZWQpXHJcbiAgICAgICAgICAmJiB0aGlzLnNob3dDYW5jZWxDb21wZXRpdGlvbkJ1dHRvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobG9hZENvbXBldGl0aW9uSGVhZGVyKCkpO1xyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvblZlcnNpb25zKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLnZlcnNpb25zID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25TZWxlY3RlZFZlcnNpb25JZCkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZlcnNpb24gPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3QoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25TdGF0dXMpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24gPSByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uVHlwZSkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fY29tcGV0aXRpb25UeXBlID0gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvbkxhYmVsKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuY29tcGV0aXRpb25MYWJlbCA9IHJlc3VsdDtcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdEFjdGl2aXR5SWQpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgdGhpcy5fYWN0aXZpdHlJZCA9IHJlc3VsdDtcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uQ29uZmlnKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uQ29uZmlnID0gcmVzdWx0O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb21wZXRpdGlvbkNvbmZpZy5jYW5jZWxDb21wZXRpdGlvbkxhYmVsKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbmNlbENvbXBldGl0aW9uQnV0dG9uTGFiZWwgPSB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uTGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uVHlwZVxyXG4gICAgICAgICAgJiYgdGhpcy5jb21wZXRpdGlvbkNvbmZpZy5jYW5jZWxDb21wZXRpdGlvblR5cGUgPiB0aGlzLmNhbmNlbENvbXBldGl0aW9uVHlwZUVudW0uRGlzYWJsZWQpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0NhbmNlbENvbXBldGl0aW9uQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbiA9IHRoaXMuY29tcGV0aXRpb25Db25maWcuc2hvd0NvbXBsZXRlQ29tcGV0aXRpb25CdXR0b247XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGV0aXRpb25Db25maWcucmVzdG9yZUJ1dHRvbk5hbWUpIHtcclxuICAgICAgICAgIHRoaXMucmVzdG9yZUJ1dHRvbk5hbWUgPSB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLnJlc3RvcmVCdXR0b25OYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0TWFudWFsVmVyc2lvblN0YXR1c0NoYW5nZWQpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgLy8g0L/RgNC+0LjQt9C+0YjQu9C+INGA0YPRh9C90L7QtSDQuNC30LzQtdC90LXQvdC40LUg0YHRgtCw0YLRg9GB0LAsINGC0L7Qu9C60LDQtdC8INC00LDQu9GM0YjQtSDQv9C+INGC0LDQudC80LDRg9GC0YNcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWRcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0U2VsZWxlY3Rpb25FZGl0RWJMaW5rcygpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLl9lYkxpbmtzTW9kZWwgPSByZXM7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bUxhYmVsKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWxbdmFsdWUgYXMgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzR3JvdXBwaW5nTGFiZWwodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0dyb3VwcGluZ0xhYmVsW3ZhbHVlIGFzIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1dO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgdGl0bGU6IGDQpNC+0YDQvNC40YDQvtCy0LDQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5YCxcclxuICAgICAgbWVzc2FnZTpcclxuICAgICAgICBgJHt0aGlzLmdldFdhcm5pbmdNZXNzYWdlSHRtbCgn0JLQvdC40LzQsNC90LjQtSEg0KTQvtGA0LzQuNGA0L7QstCw0L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQv9GA0LjQstC10LTQtdGCINC6INGB0L7Qt9C00LDQvdC40Y4g0L3QvtCy0L7QuSDQstC10YDRgdC40Lgg0L7RgtCx0L7RgNCwJyl9XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgINCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGB0YTQvtGA0LzQuNGA0L7QstCw0YLRjCDQuNC30LzQtdC90LXQvdC40Y8/XHJcbiAgICAgICAgICAgIDwvcD5gLFxyXG4gICAgICBjb2xvcjogRGlhbG9nQ29sb3IueWVsbG93LFxyXG4gICAgICB0eXBlOiBEaWFsb2dUeXBlLmNvbmZpcm0sXHJcbiAgICAgIG9rTGFiZWw6ICfQn9C+0LTRgtCy0LXRgNC00LjRgtGMJyxcclxuICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgb2tDYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY3JlYXRlQ29tcGV0aXRpb25WZXJzaW9uKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3RpdmF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgICB0aXRsZTogYNCf0YPQsdC70LjQutCw0YbQuNGPICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfdCwYCxcclxuICAgICAgICBtZXNzYWdlOiBgJHt0aGlzLmdldFdhcm5pbmdNZXNzYWdlSHRtbCgpfVxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICDQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQvtC/0YPQsdC70LjQutC+0LLQsNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P1xyXG4gICAgICAgICAgICA8L3A+YCxcclxuICAgICAgICBjb2xvcjogRGlhbG9nQ29sb3IueWVsbG93LFxyXG4gICAgICAgIHR5cGU6IERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgICBva0xhYmVsOiAn0J/QvtC00YLQstC10YDQtNC40YLRjCcsXHJcbiAgICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgICBva0NhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICBzdGF0dXM6IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG5cclxuICAgICAgaWYgKHRoaXMudmFsaWRhdGVWZXJzaW9uQWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVZlcnNpb25BY3Rpb24oc2VsZWN0ZWRJdGVtLmlkLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNpZ25TZXJ2aWNlLnNpZ24oe1xyXG4gICAgICAgICAgICB0aXRsZTogJ9Cd0LDQv9GA0LDQstC70LXQvdC40LUg0LTQvtC60YPQvNC10L3RgtCwINC90LAg0YHQvtCz0LvQsNGB0L7QstCw0L3QuNC1JyxcclxuICAgICAgICAgICAgb2tMYWJlbDogJ9Ce0YLQv9GA0LDQstC40YLRjCcsXHJcbiAgICAgICAgICAgIGNhbmNlbExhYmVsOiAn0J7RgtC80LXQvdC40YLRjCcsXHJcbiAgICAgICAgICAgIHBkZlVybDogYC9tLWRhdGEvbWluZmluL3BkZi1jb21wZXRpdGlvbi8ke3NlbGVjdGVkSXRlbS5pZH1gLFxyXG4gICAgICAgICAgICB4bWxVcmw6IGAvbS1kYXRhL21pbmZpbi94bWwtY29tcGV0aXRpb24vJHtzZWxlY3RlZEl0ZW0uaWR9YCxcclxuICAgICAgICAgICAgcHJvdmlkZXI6ICdlbXB0eSdcclxuICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5WYWxpZGF0aW9uXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVWZXJzaW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0KPQtNCw0LvQuNGC0Ywg0LLQtdGA0YHQuNGOICAke3RoaXMuY29tcGV0aXRpb25MYWJlbH3QsD9gLFxyXG4gICAgICAgIGAke3RoaXMuZ2V0V2FybmluZ01lc3NhZ2VIdG1sKCl9XHJcbiAgICAgIDxwPlxyXG4gICAgICAgINCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINCy0LXRgNGB0LjRjiAke3RoaXMuY29tcGV0aXRpb25MYWJlbD8udG9Mb3dlckNhc2UoKX3QsD9cclxuICAgICAgPC9wPmAsXHJcbiAgICAgICAgRGlhbG9nVHlwZS5jb25maXJtLCAob2spID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goZGVsZXRlQ29tcGV0aXRpb25WZXJzaW9uKHt2ZXJzaW9uSWQ6IHNlbGVjdGVkSXRlbS5pZH0pKTtcclxuICAgICAgICB9LCB1bmRlZmluZWQsIG51bGwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBEaWFsb2dDb2xvci5yZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc3RvcmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQktC+0LfQvtCx0L3QvtCy0LjRgtGMICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfT9gLCBudWxsLCBEaWFsb2dUeXBlLmNvbmZpcm0sIChvaykgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGFjdGl2YXRlQ29tcGV0aXRpb24oKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYXVzZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNCf0YDQuNC+0YHRgtCw0L3QvtCy0LjRgtGMICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfT9gLCBudWxsLCBEaWFsb2dUeXBlLmNvbmZpcm0sIChvaykgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHBhdXNlQ29tcGV0aXRpb24oKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb21wZXRpdGlvbkNvbmZpZyAmJiB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uVHlwZSA9PSB0aGlzLmNhbmNlbENvbXBldGl0aW9uVHlwZUVudW0uV2l0aFZhbGlkYXRpb24pIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY2FuY2VsQ29tcGV0aXRpb25XaXRoVmFsaWRhdGlvbih7dmVyc2lvbklkOiBzZWxlY3RlZEl0ZW0uaWR9KSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNCe0YLQvNC10L3QuNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P2AsIG51bGwsIERpYWxvZ1R5cGUuY29uZmlybSwgKG9rKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjYW5jZWxDb21wZXRpdGlvbigpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29tcGxldGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQl9Cw0LLQtdGA0YjQuNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P2AsIG51bGwsIERpYWxvZ1R5cGUuY29uZmlybSwgKG9rKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY29tcGxldGVDb21wZXRpdGlvbigpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFZlcnNpb24oaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzZWxlY3RDb21wZXRpdGlvblZlcnNpb24oe3ZlcnNpb25JZDogaWR9KSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYmFja1RvRWRpdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUg0YLQtdC60YPRidC10Lkg0LLQtdGA0YHQuNC4YCxcclxuICAgICAgYNCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGC0LXQutGD0YnRg9GOINCy0LXRgNGB0LjRjiAke3RoaXMuY29tcGV0aXRpb25MYWJlbC50b0xvd2VyQ2FzZSgpfWFgLFxyXG4gICAgICBEaWFsb2dUeXBlLmNvbmZpcm0sXHJcbiAgICAgIChvaykgPT4ge1xyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY29tcGV0aXRpb25WZXJzaW9uQ2hhbmdlU3RhdHVzKHtcclxuICAgICAgICAgICAgdmVyc2lvbklkOiB0aGlzLnNlbGVjdGVkLmlkLFxyXG4gICAgICAgICAgICBzdGF0dXM6IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnRcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIHVuZGVmaW5lZCwgbnVsbCwgJ9Cf0L7QtNGC0LLQtdGA0LTQuNGC0YwnLCB1bmRlZmluZWQsIERpYWxvZ0NvbG9yLnllbGxvdyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1JlamVjdGlvbihtb2RlbDogQ29tcGV0aXRpb25SZWplY3Rpb25Nb2RlbCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0J/RgNC40YfQuNC90LAg0L7RgtC60LvQvtC90LXQvdC40Y9gLFxyXG4gICAgICBgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5X19hdXRob3JcIj5cclxuICAgICAgICAgIDxzcGFuPiR7bW9kZWwuYXV0aG9yfTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuPiR7bW9kZWwuY3JlYXRlZERhdGV9PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxwIGNsYXNzPVwibW9kYWwtYm9keV9fdGV4dFwiPiR7bW9kZWwucmVhc29ufTwvcD5cclxuICAgICAgYCwgRGlhbG9nVHlwZS5jb25maXJtLFxyXG4gICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbnVsbCwgdW5kZWZpbmVkLCAnJywgRGlhbG9nQ29sb3IueWVsbG93KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWRpcmVjdFRvRWIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb21wZXRpdGlvbiAhPSB1bmRlZmluZWQgJiYgdGhpcy5fY29tcGV0aXRpb25UeXBlICE9IHVuZGVmaW5lZCAmJiB0aGlzLl9lYkxpbmtzTW9kZWwgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCBsaW5rID0gJyc7XHJcblxyXG4gICAgICBpZiAodGhpcy5fY29tcGV0aXRpb25UeXBlID09IENvbXBldGl0aW9uVHlwZUVudW0uU29jaWFsT3JkZXIpIHtcclxuICAgICAgICBsaW5rID0gYCR7dGhpcy5fZWJMaW5rc01vZGVsLnNvY2lhbE9yZGVyfS8jU29jaWFsT3JkZXJBZ3JlZW1lbnRgO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2NvbXBldGl0aW9uVHlwZSA9PSBDb21wZXRpdGlvblR5cGVFbnVtLlJlZ2lvbikge1xyXG4gICAgICAgIGxpbmsgPSBgJHt0aGlzLl9lYkxpbmtzTW9kZWwuc3Vic2lkeX0vI0FncmVlbWVudFN1YnNpZHlOb25GZWRlcmFsYDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsaW5rID0gYCR7dGhpcy5fZWJMaW5rc01vZGVsLnN1YnNpZHl9LyNBZ3JlZW1lbnRTdWJzaWR5UmVnaXN0cnlgO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB3aW5kb3cub3BlbihsaW5rLCAnX2JsYW5rJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zICYmIHRoaXMuc2VsZWN0ZWRWZXJzaW9uKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnZlcnNpb25zLmZpbmQocyA9PiBzLmlkID09PSB0aGlzLnNlbGVjdGVkVmVyc2lvbik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb21wZXRpdGlvblZlcnNpb25JbmZvLmVtaXQodGhpcy5zZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdhcm5pbmdNZXNzYWdlSHRtbChjdXN0b21UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFjdXN0b21UZXh0KSB7XHJcbiAgICAgIGN1c3RvbVRleHQgPSAn0JLQvdC40LzQsNC90LjQtSEg0JTQsNC90L3QvtC1INC00LXQudGB0YLQstC40LUg0L3QtdC70YzQt9GPINC+0YLQvNC10L3QuNGC0YwnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiYmctbmV3cyBweC0zIHB5LTIgcmFkaXVzLTQgbXktMyBkLWZsZXhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItM1wiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8dXNlIGhyZWY9XCIjYWxlcnRcIj48L3VzZT5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbCBtLTAgYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1vcmFuZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgJHtjdXN0b21UZXh0fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5gO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXJcIiAqbmdJZj1cInNlbGVjdGVkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWJvZHlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1ibG9ja1wiPlxyXG4gICAgICA8IS0tINCd0LDQt9Cy0LDQvdC40LUg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIHdweC0xNjAgbXItM1wiPlxyXG4gICAgICAgIDwhLS0g0LLRgdGC0LDQstC40YLRjCDQvdCw0LfQstCw0L3QuNC1INGB0YPRidC90L7RgdGC0LgsINC70LjQsdC+IFwi0KHRg9Cx0YHQuNC00LjRj1wiINC70LjQsdC+IFwi0J7RgtCx0L7RgFwiIC0tPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGl0bGVcIiBteUNvbXBldGl0aW9uTGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwhLS0g0L3QsNC30LLQsNC90LjQtSDRgdGD0LHRgdC40LTQuNC4L9C+0YLQsdC+0YDQsCAtLT5cclxuICAgICAgICA8IS0tINC+0LPRgNCw0L3QuNGH0LjRgtGMINC00LvQuNC90YMg0L3QsNC30LLQsNC90LjRjyDQsiA0NCDRgdC40LzQstC+0LvQvtCyIC0tPlxyXG4gICAgICAgIDwhLS0g0LLRgdGC0LDQstC40YLRjCDQsiDRgtGD0LvRgtC40L8g0L/QvtC70L3QvtC1INC90LDQt9Cy0LDQvdC40LUg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX190ZXh0IHRleHQtbm9ybWFsXCIgW21yeENka1Rvb2x0aXBdPVwic2VsZWN0ZWQubmFtZVwiIFt0b29sdGlwTWF4V2lkdGhdPVwiMzIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgc2VsZWN0ZWQuc2hvcnROYW1lID8gc2VsZWN0ZWQuc2hvcnROYW1lIDogJ9Cd0LUg0YPQutCw0LfQsNC9JyB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSDRgdGC0LDRgtGD0YEg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIHdweC0xMTBcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICDQodGC0LDRgtGD0YFcclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8IS0tINGB0YLQsNGC0YPRgSDRgdGD0LHRgdC40LTQuNC4L9C+0YLQsdC+0YDQsCAtLT5cclxuICAgICAgICA8IS0tINC00LvRjyDQt9Cw0LTQsNC90LjRjyDRhtCy0LXRgtCwINC00L7QsdCw0LLQu9GP0YLRjCDQutC70LDRgdGB0Ys6INC+0YDQsNC90LbQtdCy0YvQuSAtIFwiY29sb3Itb3JhbmdlXCIsINC30LXQu9C10L3Ri9C5IC0gXCJjb2xvci1ncmVlblwiIC0tPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGV4dFwiIFtuZ0NsYXNzXT1cImNvbXBldGl0aW9uQWdncmVnYXRlU3RhdHVzQ3NzQ2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb21wZXRpdGlvbkFnZ3JlZ2F0ZVN0YXR1c0VudW1MYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSDRgdC10LvQtdC60YIg0YEg0LLRi9Cx0L7RgNC+0Lwg0LLQtdGA0YHQuNC4IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW0gaW5mby1iYW5uZXItaXRlbV9pbnB1dCB3cHgtMjYwIG1yLTNcIiAqbmdJZj1cInZlcnNpb25zICYmIHZlcnNpb25zLmxlbmd0aCA+IDFcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0Ym94IGlucHV0Ym94LW1kIG1iLTBcIj5cclxuICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJ2ZXJzaW9uc1wiIFtuZ01vZGVsXT1cInNlbGVjdGVkLmlkXCJcclxuICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdFZlcnNpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcclxuICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgZ3JvdXBCeT1cInN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICBub3RGb3VuZFRleHQ9XCLQndC1INC90LDQudC00LXQvdC+XCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0Z3JvdXAtdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgICAgICAgICAgIHt7IGdldENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0dyb3VwcGluZ0xhYmVsKGl0ZW0uc3RhdHVzKSB9fVxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LXNlYXJjaD1cInNlYXJjaFRlcm1cIj5cclxuICAgICAgICAgICAg0JLQtdGA0YHQuNGPIHt7IGl0ZW0ubnVtIH19INC+0YIge3sgaXRlbS5jcmVhdGVkRGF0ZSB9fVxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1sYWJlbC10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgINCS0LXRgNGB0LjRjyB7eyBpdGVtLm51bSB9fSDQvtGCIHt7IGl0ZW0uY3JlYXRlZERhdGUgfX1cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tINGB0YLQsNGC0LDRg9GBINCy0LXRgNGB0LjQuCAtLT5cclxuICAgIDwhLS0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwg0LXRgdC70Lgg0L3QtdGCINCy0LXRgNGB0LjQuSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIHdweC0xMTBcIiAqbmdJZj1cInZlcnNpb25zICYmIHZlcnNpb25zLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX190aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAg0KHRgtCw0YLRg9GBINCy0LXRgNGB0LjQuFxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS0g0YHRgtCw0YLRg9GBINCy0LXRgNGB0LjQuCAtLT5cclxuICAgICAgPCEtLSDQtNC70Y8g0LfQsNC00LDQvdC40Y8g0YbQstC10YLQsCDQtNC+0LHQsNCy0LvRj9GC0Ywg0LrQu9Cw0YHRgdGLOiDQvtGA0LDQvdC20LXQstGL0LkgLSBcImNvbG9yLW9yYW5nZVwiLCDQt9C10LvQtdC90YvQuSAtIFwiY29sb3ItZ3JlZW5cIiAtLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX190ZXh0XCIgKm5nSWY9XCJzZWxlY3RlZFwiIFtuZ0NsYXNzXT1cInZlcnNpb25TdGF0dXNDbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bUxhYmVsKHNlbGVjdGVkLnN0YXR1cykgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tINGD0LTQsNC70LXQvdC40LUsINCy0YvQt9C+0LIg0LzQvtC00LDQu9C60LgsINC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUg0L7QsSDQstC90LXRgdC10L3QuNC4INC40LfQvNC10L3QtdC90LjQuSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtXCI+XHJcbiAgICAgIDwhLS0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwg0LXRgdC70Lgg0L3QtSDRgtGA0LXQsdGD0LXRgtGB0Y8gLS0+XHJcbiAgICAgIDwhLS0gXCLQutC+0L3QstC10YDRglwiIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9faWNvblwiICpuZ0lmPVwic2hvd1JlamVjdGlvblJlYXNvblwiXHJcbiAgICAgICAgICAgW21yeENka1Rvb2x0aXBdPVwiJ9Cf0L7RgdC80L7RgtGA0LXRgtGMINC/0YDQuNGH0LjQvdGDINC+0YLQutC70L7QvdC10L3QuNGPJ1wiXHJcbiAgICAgICAgICAgKGNsaWNrKT1cInNob3dSZWplY3Rpb24oc2VsZWN0ZWQucmVqZWN0aW9uUmVhc29uKVwiPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiNlwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxMlwiIHJ4PVwiMVwiIHN0cm9rZT1cIiMyODI4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTMgNi4yNUwxMS4zMzU2IDEzLjY1OTVDMTEuNzE0NSAxMy45OTYyIDEyLjI4NTUgMTMuOTk2MiAxMi42NjQ0IDEzLjY1OTVMMjEgNi4yNVwiIHN0cm9rZT1cIiMyODI4MjhcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0zIDE4TDcuNSAxNEw5Ljc1IDEyTTIxIDE4TDE2LjUgMTRMMTQuMjUgMTJcIiBzdHJva2U9XCIjMjgyODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSDRg9C00LDQu9C10L3QuNC1INCy0LXRgNGB0LjQuCAtLT5cclxuICAgICAgPGRpdiAqbmdJZj1cImNhbkRlbGV0ZVZlcnNpb25cIiAoY2xpY2spPVwicmVtb3ZlVmVyc2lvbigpXCIgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX19pY29uXCIgW21yeENka1Rvb2x0aXBdPVwiJ9Cj0LTQsNC70LjRgtGMINCy0LXRgNGB0LjRjidcIj5cclxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNMyA2SDVIMjFcIiBzdHJva2U9XCIjRDE0MTE0XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgZD1cIk04IDZWNEM4IDMuNDY5NTcgOC4yMTA3MSAyLjk2MDg2IDguNTg1NzkgMi41ODU3OUM4Ljk2MDg2IDIuMjEwNzEgOS40Njk1NyAyIDEwIDJIMTRDMTQuNTMwNCAyIDE1LjAzOTEgMi4yMTA3MSAxNS40MTQyIDIuNTg1NzlDMTUuNzg5MyAyLjk2MDg2IDE2IDMuNDY5NTcgMTYgNFY2TTE5IDZWMjBDMTkgMjAuNTMwNCAxOC43ODkzIDIxLjAzOTEgMTguNDE0MiAyMS40MTQyQzE4LjAzOTEgMjEuNzg5MyAxNy41MzA0IDIyIDE3IDIySDdDNi40Njk1NyAyMiA1Ljk2MDg2IDIxLjc4OTMgNS41ODU3OSAyMS40MTQyQzUuMjEwNzEgMjEuMDM5MSA1IDIwLjUzMDQgNSAyMFY2SDE5WlwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cIiNEMTQxMTRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTEwIDExVjE3XCIgc3Ryb2tlPVwiI0QxNDExNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgMTFWMTdcIiBzdHJva2U9XCIjRDE0MTE0XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSDQstC+0YHQutC70LjRhtCw0YLQtdC70YzQvdGL0Lkg0LfQvdCw0LogLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhaXNMYXN0VmVyc2lvblwiIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9faWNvblwiIFttcnhDZGtUb29sdGlwXT1cIifQktC90LXRgdC10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQtNC+0YHRgtGD0L/QvdC+INC90LAg0L/QvtGB0LvQtdC00L3QtdC5INCy0LXRgNGB0LjQuCdcIj5cclxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMTIuMjMwMiAxOFYxN00xMi4yMzAyIDE0VjEwTTQuMDAyOTggMjEuMjVIMjAuNDU3NUMyMS45OTcxIDIxLjI1IDIyLjk1OTMgMTkuNTgzMyAyMi4xODk1IDE4LjI1TDEzLjk2MjMgNEMxMy4xOTI1IDIuNjY2NjcgMTEuMjY4IDIuNjY2NjcgMTAuNDk4MiA0TDIuMjcwOTMgMTguMjVDMS41MDExMyAxOS41ODMzIDIuNDYzMzggMjEuMjUgNC4wMDI5OCAyMS4yNVpcIlxyXG4gICAgICAgICAgICBzdHJva2U9XCIjRDU3QjFDXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cIiEhY3VzdG9tQnV0dG9uc1RlbXBsYXRlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21CdXR0b25zVGVtcGxhdGUudGVtcGxhdGVSZWY7Y29udGV4dDpjdXN0b21CdXR0b25zVGVtcGxhdGVDb250ZXh0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1tZCBncmVlblwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZVZlcnNpb24oKVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYW5DcmVhdGVWZXJzaW9uXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3JlYXRlVmVyc2lvbkRpc2FibGVkXCI+XHJcbiAgICAgICAg0KHRhNC+0YDQvNC40YDQvtCy0LDRgtGMINC40LfQvNC10L3QtdC90LjRj1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbWQgZ3JlZW5cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVZlcnNpb24oKVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYW5BY3RpdmF0ZVZlcnNpb25cIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3RpdmF0ZVZlcnNpb25EaXNhYmxlZFwiPlxyXG4gICAgICAgINCe0L/Rg9Cx0LvQuNC60L7QstCw0YLRjFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbWRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJ2YWxpZGF0ZVZlcnNpb24oKVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYW5WYWxpZGF0ZVZlcnNpb25cIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ2YWxpZGF0ZVZlcnNpb25EaXNhYmxlZFwiPlxyXG4gICAgICAgINCh0L7Qs9C70LDRgdC+0LLQsNC90LjQtVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhblJldHVyblRvRWRpdFwiIGNsYXNzPVwiYnRuIGJ0bi1tZFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2tUb0VkaXQoKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJhY2tUb0VkaXREaXNhYmxlZFwiPlxyXG4gICAgICAgINCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8IS0tINGD0L/RgNCw0LLQu9C10L3QuNC1INGB0YLQsNGC0YPRgdC+0Lwv0L7RgtCx0L7RgNC+0LwgLS0+XHJcbiAgICAgIDwhLS0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCDQtdGB0LvQuCDQvdC1INGC0YDQtdCx0YPQtdGC0YHRjyAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xfX2FjdGlvblwiXHJcbiAgICAgICAgICAgKm5nSWY9XCJjb21wZXRpdGlvbiAmJiBzaG93RWJMaW5rXCI+XHJcbiAgICAgICAgPG1yeC1kcm9wZG93biBbbWFpblBsYWNlbWVudF09XCInYm90dG9tLWVuZCdcIiBbZmFsbGJhY2tQbGFjZW1lbnRzXT1cIlsndG9wLWVuZCddXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tbW9yZS12ZXJ0aWNhbCBpY29uLWZvbnQtMjRcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkcm9wZG93bk1lbnU+XHJcbiAgICAgICAgICAgIDxidXR0b24gbXJ4SGlkZUFmdGVyQ2xpY2sgKGNsaWNrKT1cInJlZGlyZWN0VG9FYigpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLWxpbmsgaWNvbi1mb250LTI0IG1yLTJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4+0J/QtdGA0LXQudGC0Lgg0LIg0L/QvtC00YHQuNGB0YLQtdC80YMg0LHRjtC00LbQtdGC0L3QvtCz0L4g0L/Qu9Cw0L3QuNGA0L7QstCw0L3QuNGPINCT0JjQmNChIMKr0K3QkcK7PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gbXJ4SGlkZUFmdGVyQ2xpY2sgKGNsaWNrKT1cInBhdXNlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcGV0aXRpb24uc3RhdHVzID09IGNvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUgJiYgY2FuTWFuYWdlQ29tcGV0aXRpb25cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tcGF1c2UtZmlsbGVkIGljb24tZm9udC0yNCBtci0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuPtCf0YDQuNC+0YHRgtCw0L3QvtCy0LjRgtGMPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gbXJ4SGlkZUFmdGVyQ2xpY2sgKGNsaWNrKT1cInJlc3RvcmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb21wZXRpdGlvbi5zdGF0dXMgPT0gY29tcGV0aXRpb25TdGF0dXNFbnVtLlN0YXlpbmcgJiYgY2FuTWFuYWdlQ29tcGV0aXRpb25cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tcGxheS1maWxsZWQgaWNvbi1mb250LTI0IG1yLTJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgcmVzdG9yZUJ1dHRvbk5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtcnhIaWRlQWZ0ZXJDbGlja1xyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuQ29tcGxldGVDb21wZXRpdGlvbiAmJiBjYW5NYW5hZ2VDb21wZXRpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbXBsZXRlKClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tc3RvcC1maWxsZWQgaWNvbi1mb250LTI0IG1yLTJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4+0JfQsNCy0LXRgNGI0LjRgtGMPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gbXJ4SGlkZUFmdGVyQ2xpY2tcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNhbkNhbmNlbENvbXBldGl0aW9uICYmIGNhbk1hbmFnZUNvbXBldGl0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsKClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tY2xvc2UgaWNvbi1mb250LTI0IG1yLTJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgY2FuY2VsQ29tcGV0aXRpb25CdXR0b25MYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbXJ4LWRyb3Bkb3duPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|