@ng-select/ng-select 2.20.2 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/bundles/ng-select-ng-select.umd.js +4525 -0
- package/bundles/ng-select-ng-select.umd.js.map +1 -0
- package/bundles/ng-select-ng-select.umd.min.js +2 -0
- package/bundles/ng-select-ng-select.umd.min.js.map +1 -0
- package/esm2015/lib/config.service.js +40 -0
- package/esm2015/lib/console.service.js +20 -0
- package/esm2015/lib/id.js +21 -0
- package/esm2015/lib/items-list.js +661 -0
- package/esm2015/lib/ng-dropdown-panel.component.js +661 -0
- package/esm2015/lib/ng-dropdown-panel.service.js +127 -0
- package/esm2015/lib/ng-option.component.js +74 -0
- package/esm2015/lib/ng-select.component.js +1384 -0
- package/esm2015/lib/ng-select.module.js +57 -0
- package/esm2015/lib/ng-select.types.js +48 -0
- package/esm2015/{ng-select → lib}/ng-templates.directive.js +2 -3
- package/esm2015/lib/search-helper.js +862 -0
- package/esm2015/lib/selection-model.js +166 -0
- package/esm2015/lib/value-utils.js +33 -0
- package/esm2015/ng-select-ng-select.js +15 -0
- package/esm2015/public-api.js +11 -0
- package/esm5/lib/config.service.js +42 -0
- package/esm5/lib/console.service.js +28 -0
- package/esm5/lib/id.js +21 -0
- package/esm5/lib/items-list.js +888 -0
- package/esm5/lib/ng-dropdown-panel.component.js +770 -0
- package/esm5/lib/ng-dropdown-panel.service.js +150 -0
- package/esm5/lib/ng-option.component.js +86 -0
- package/esm5/lib/ng-select.component.js +1637 -0
- package/esm5/lib/ng-select.module.js +61 -0
- package/esm5/lib/ng-select.types.js +48 -0
- package/esm5/{ng-select → lib}/ng-templates.directive.js +2 -3
- package/esm5/lib/search-helper.js +862 -0
- package/esm5/{ng-select → lib}/selection-model.js +69 -22
- package/esm5/lib/value-utils.js +33 -0
- package/esm5/ng-select-ng-select.js +15 -0
- package/esm5/public-api.js +11 -0
- package/fesm2015/ng-select-ng-select.js +3804 -0
- package/fesm2015/ng-select-ng-select.js.map +1 -0
- package/fesm5/ng-select-ng-select.js +4442 -0
- package/fesm5/ng-select-ng-select.js.map +1 -0
- package/{ng-select → lib}/config.service.d.ts +0 -0
- package/{ng-select → lib}/console.service.d.ts +0 -0
- package/{ng-select → lib}/id.d.ts +0 -0
- package/{ng-select → lib}/items-list.d.ts +1 -1
- package/{ng-select → lib}/ng-dropdown-panel.component.d.ts +0 -0
- package/{ng-select → lib}/ng-dropdown-panel.service.d.ts +0 -0
- package/{ng-select → lib}/ng-option.component.d.ts +0 -0
- package/{ng-select → lib}/ng-select.component.d.ts +9 -9
- package/{ng-select → lib}/ng-select.module.d.ts +0 -0
- package/{ng-select → lib}/ng-select.types.d.ts +0 -0
- package/{ng-select → lib}/ng-templates.directive.d.ts +0 -0
- package/{ng-select → lib}/search-helper.d.ts +0 -0
- package/{ng-select → lib}/selection-model.d.ts +0 -0
- package/{ng-select → lib}/value-utils.d.ts +0 -0
- package/ng-select-ng-select.d.ts +10 -0
- package/ng-select-ng-select.metadata.json +1 -0
- package/package.json +13 -14
- package/public-api.d.ts +5 -0
- package/scss/material.theme.scss +1 -1
- package/themes/material.theme.css +1 -1
- package/bundles/ng-select.umd.js +0 -4283
- package/bundles/ng-select.umd.js.map +0 -1
- package/bundles/ng-select.umd.min.js +0 -2
- package/bundles/ng-select.umd.min.js.map +0 -1
- package/esm2015/index.js +0 -9
- package/esm2015/ng-select/config.service.js +0 -41
- package/esm2015/ng-select/console.service.js +0 -21
- package/esm2015/ng-select/id.js +0 -17
- package/esm2015/ng-select/items-list.js +0 -542
- package/esm2015/ng-select/ng-dropdown-panel.component.js +0 -562
- package/esm2015/ng-select/ng-dropdown-panel.service.js +0 -121
- package/esm2015/ng-select/ng-option-highlight.directive.js +0 -98
- package/esm2015/ng-select/ng-option.component.js +0 -71
- package/esm2015/ng-select/ng-select.component.js +0 -1214
- package/esm2015/ng-select/ng-select.module.js +0 -61
- package/esm2015/ng-select/ng-select.types.js +0 -49
- package/esm2015/ng-select/search-helper.js +0 -859
- package/esm2015/ng-select/selection-model.js +0 -122
- package/esm2015/ng-select/value-utils.js +0 -34
- package/esm2015/ng-select.js +0 -17
- package/esm5/index.js +0 -9
- package/esm5/ng-select/config.service.js +0 -43
- package/esm5/ng-select/console.service.js +0 -29
- package/esm5/ng-select/id.js +0 -17
- package/esm5/ng-select/items-list.js +0 -761
- package/esm5/ng-select/ng-dropdown-panel.component.js +0 -654
- package/esm5/ng-select/ng-dropdown-panel.service.js +0 -144
- package/esm5/ng-select/ng-option-highlight.directive.js +0 -113
- package/esm5/ng-select/ng-option.component.js +0 -82
- package/esm5/ng-select/ng-select.component.js +0 -1430
- package/esm5/ng-select/ng-select.module.js +0 -65
- package/esm5/ng-select/ng-select.types.js +0 -49
- package/esm5/ng-select/search-helper.js +0 -859
- package/esm5/ng-select/value-utils.js +0 -34
- package/esm5/ng-select.js +0 -17
- package/fesm2015/ng-select.js +0 -3559
- package/fesm2015/ng-select.js.map +0 -1
- package/fesm5/ng-select.js +0 -4145
- package/fesm5/ng-select.js.map +0 -1
- package/index.d.ts +0 -5
- package/ng-select/ng-option-highlight.directive.d.ts +0 -14
- package/ng-select.d.ts +0 -11
- package/ng-select.metadata.json +0 -1
package/bundles/ng-select.umd.js
DELETED
|
@@ -1,4283 +0,0 @@
|
|
|
1
|
-
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('rxjs'), require('rxjs/operators'), require('@angular/forms')) :
|
|
3
|
-
typeof define === 'function' && define.amd ? define('@ng-select/ng-select', ['exports', '@angular/core', '@angular/common', 'rxjs', 'rxjs/operators', '@angular/forms'], factory) :
|
|
4
|
-
(factory((global['ng-select'] = global['ng-select'] || {}, global['ng-select']['ng-select'] = {}),global.ng.core,global.ng.common,global.rxjs,global.rxjs.operators,global.ng.forms));
|
|
5
|
-
}(this, (function (exports,i0,common,rxjs,operators,forms) { 'use strict';
|
|
6
|
-
|
|
7
|
-
/*! *****************************************************************************
|
|
8
|
-
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
9
|
-
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
|
10
|
-
this file except in compliance with the License. You may obtain a copy of the
|
|
11
|
-
License at http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
|
|
13
|
-
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
-
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
|
15
|
-
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
|
16
|
-
MERCHANTABLITY OR NON-INFRINGEMENT.
|
|
17
|
-
|
|
18
|
-
See the Apache Version 2.0 License for specific language governing permissions
|
|
19
|
-
and limitations under the License.
|
|
20
|
-
***************************************************************************** */
|
|
21
|
-
function __values(o) {
|
|
22
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
|
|
23
|
-
if (m)
|
|
24
|
-
return m.call(o);
|
|
25
|
-
return {
|
|
26
|
-
next: function () {
|
|
27
|
-
if (o && i >= o.length)
|
|
28
|
-
o = void 0;
|
|
29
|
-
return { value: o && o[i++], done: !o };
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
function __read(o, n) {
|
|
34
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
35
|
-
if (!m)
|
|
36
|
-
return o;
|
|
37
|
-
var i = m.call(o), r, ar = [], e;
|
|
38
|
-
try {
|
|
39
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
|
|
40
|
-
ar.push(r.value);
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
e = { error: error };
|
|
44
|
-
}
|
|
45
|
-
finally {
|
|
46
|
-
try {
|
|
47
|
-
if (r && !r.done && (m = i["return"]))
|
|
48
|
-
m.call(i);
|
|
49
|
-
}
|
|
50
|
-
finally {
|
|
51
|
-
if (e)
|
|
52
|
-
throw e.error;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return ar;
|
|
56
|
-
}
|
|
57
|
-
function __spread() {
|
|
58
|
-
for (var ar = [], i = 0; i < arguments.length; i++)
|
|
59
|
-
ar = ar.concat(__read(arguments[i]));
|
|
60
|
-
return ar;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* @fileoverview added by tsickle
|
|
65
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
66
|
-
*/
|
|
67
|
-
var NgOptionTemplateDirective = /** @class */ (function () {
|
|
68
|
-
function NgOptionTemplateDirective(template) {
|
|
69
|
-
this.template = template;
|
|
70
|
-
}
|
|
71
|
-
NgOptionTemplateDirective.decorators = [
|
|
72
|
-
{ type: i0.Directive, args: [{ selector: '[ng-option-tmp]' },] }
|
|
73
|
-
];
|
|
74
|
-
/** @nocollapse */
|
|
75
|
-
NgOptionTemplateDirective.ctorParameters = function () {
|
|
76
|
-
return [
|
|
77
|
-
{ type: i0.TemplateRef }
|
|
78
|
-
];
|
|
79
|
-
};
|
|
80
|
-
return NgOptionTemplateDirective;
|
|
81
|
-
}());
|
|
82
|
-
var NgOptgroupTemplateDirective = /** @class */ (function () {
|
|
83
|
-
function NgOptgroupTemplateDirective(template) {
|
|
84
|
-
this.template = template;
|
|
85
|
-
}
|
|
86
|
-
NgOptgroupTemplateDirective.decorators = [
|
|
87
|
-
{ type: i0.Directive, args: [{ selector: '[ng-optgroup-tmp]' },] }
|
|
88
|
-
];
|
|
89
|
-
/** @nocollapse */
|
|
90
|
-
NgOptgroupTemplateDirective.ctorParameters = function () {
|
|
91
|
-
return [
|
|
92
|
-
{ type: i0.TemplateRef }
|
|
93
|
-
];
|
|
94
|
-
};
|
|
95
|
-
return NgOptgroupTemplateDirective;
|
|
96
|
-
}());
|
|
97
|
-
var NgLabelTemplateDirective = /** @class */ (function () {
|
|
98
|
-
function NgLabelTemplateDirective(template) {
|
|
99
|
-
this.template = template;
|
|
100
|
-
}
|
|
101
|
-
NgLabelTemplateDirective.decorators = [
|
|
102
|
-
{ type: i0.Directive, args: [{ selector: '[ng-label-tmp]' },] }
|
|
103
|
-
];
|
|
104
|
-
/** @nocollapse */
|
|
105
|
-
NgLabelTemplateDirective.ctorParameters = function () {
|
|
106
|
-
return [
|
|
107
|
-
{ type: i0.TemplateRef }
|
|
108
|
-
];
|
|
109
|
-
};
|
|
110
|
-
return NgLabelTemplateDirective;
|
|
111
|
-
}());
|
|
112
|
-
var NgMultiLabelTemplateDirective = /** @class */ (function () {
|
|
113
|
-
function NgMultiLabelTemplateDirective(template) {
|
|
114
|
-
this.template = template;
|
|
115
|
-
}
|
|
116
|
-
NgMultiLabelTemplateDirective.decorators = [
|
|
117
|
-
{ type: i0.Directive, args: [{ selector: '[ng-multi-label-tmp]' },] }
|
|
118
|
-
];
|
|
119
|
-
/** @nocollapse */
|
|
120
|
-
NgMultiLabelTemplateDirective.ctorParameters = function () {
|
|
121
|
-
return [
|
|
122
|
-
{ type: i0.TemplateRef }
|
|
123
|
-
];
|
|
124
|
-
};
|
|
125
|
-
return NgMultiLabelTemplateDirective;
|
|
126
|
-
}());
|
|
127
|
-
var NgHeaderTemplateDirective = /** @class */ (function () {
|
|
128
|
-
function NgHeaderTemplateDirective(template) {
|
|
129
|
-
this.template = template;
|
|
130
|
-
}
|
|
131
|
-
NgHeaderTemplateDirective.decorators = [
|
|
132
|
-
{ type: i0.Directive, args: [{ selector: '[ng-header-tmp]' },] }
|
|
133
|
-
];
|
|
134
|
-
/** @nocollapse */
|
|
135
|
-
NgHeaderTemplateDirective.ctorParameters = function () {
|
|
136
|
-
return [
|
|
137
|
-
{ type: i0.TemplateRef }
|
|
138
|
-
];
|
|
139
|
-
};
|
|
140
|
-
return NgHeaderTemplateDirective;
|
|
141
|
-
}());
|
|
142
|
-
var NgFooterTemplateDirective = /** @class */ (function () {
|
|
143
|
-
function NgFooterTemplateDirective(template) {
|
|
144
|
-
this.template = template;
|
|
145
|
-
}
|
|
146
|
-
NgFooterTemplateDirective.decorators = [
|
|
147
|
-
{ type: i0.Directive, args: [{ selector: '[ng-footer-tmp]' },] }
|
|
148
|
-
];
|
|
149
|
-
/** @nocollapse */
|
|
150
|
-
NgFooterTemplateDirective.ctorParameters = function () {
|
|
151
|
-
return [
|
|
152
|
-
{ type: i0.TemplateRef }
|
|
153
|
-
];
|
|
154
|
-
};
|
|
155
|
-
return NgFooterTemplateDirective;
|
|
156
|
-
}());
|
|
157
|
-
var NgNotFoundTemplateDirective = /** @class */ (function () {
|
|
158
|
-
function NgNotFoundTemplateDirective(template) {
|
|
159
|
-
this.template = template;
|
|
160
|
-
}
|
|
161
|
-
NgNotFoundTemplateDirective.decorators = [
|
|
162
|
-
{ type: i0.Directive, args: [{ selector: '[ng-notfound-tmp]' },] }
|
|
163
|
-
];
|
|
164
|
-
/** @nocollapse */
|
|
165
|
-
NgNotFoundTemplateDirective.ctorParameters = function () {
|
|
166
|
-
return [
|
|
167
|
-
{ type: i0.TemplateRef }
|
|
168
|
-
];
|
|
169
|
-
};
|
|
170
|
-
return NgNotFoundTemplateDirective;
|
|
171
|
-
}());
|
|
172
|
-
var NgTypeToSearchTemplateDirective = /** @class */ (function () {
|
|
173
|
-
function NgTypeToSearchTemplateDirective(template) {
|
|
174
|
-
this.template = template;
|
|
175
|
-
}
|
|
176
|
-
NgTypeToSearchTemplateDirective.decorators = [
|
|
177
|
-
{ type: i0.Directive, args: [{ selector: '[ng-typetosearch-tmp]' },] }
|
|
178
|
-
];
|
|
179
|
-
/** @nocollapse */
|
|
180
|
-
NgTypeToSearchTemplateDirective.ctorParameters = function () {
|
|
181
|
-
return [
|
|
182
|
-
{ type: i0.TemplateRef }
|
|
183
|
-
];
|
|
184
|
-
};
|
|
185
|
-
return NgTypeToSearchTemplateDirective;
|
|
186
|
-
}());
|
|
187
|
-
var NgLoadingTextTemplateDirective = /** @class */ (function () {
|
|
188
|
-
function NgLoadingTextTemplateDirective(template) {
|
|
189
|
-
this.template = template;
|
|
190
|
-
}
|
|
191
|
-
NgLoadingTextTemplateDirective.decorators = [
|
|
192
|
-
{ type: i0.Directive, args: [{ selector: '[ng-loadingtext-tmp]' },] }
|
|
193
|
-
];
|
|
194
|
-
/** @nocollapse */
|
|
195
|
-
NgLoadingTextTemplateDirective.ctorParameters = function () {
|
|
196
|
-
return [
|
|
197
|
-
{ type: i0.TemplateRef }
|
|
198
|
-
];
|
|
199
|
-
};
|
|
200
|
-
return NgLoadingTextTemplateDirective;
|
|
201
|
-
}());
|
|
202
|
-
var NgTagTemplateDirective = /** @class */ (function () {
|
|
203
|
-
function NgTagTemplateDirective(template) {
|
|
204
|
-
this.template = template;
|
|
205
|
-
}
|
|
206
|
-
NgTagTemplateDirective.decorators = [
|
|
207
|
-
{ type: i0.Directive, args: [{ selector: '[ng-tag-tmp]' },] }
|
|
208
|
-
];
|
|
209
|
-
/** @nocollapse */
|
|
210
|
-
NgTagTemplateDirective.ctorParameters = function () {
|
|
211
|
-
return [
|
|
212
|
-
{ type: i0.TemplateRef }
|
|
213
|
-
];
|
|
214
|
-
};
|
|
215
|
-
return NgTagTemplateDirective;
|
|
216
|
-
}());
|
|
217
|
-
var NgLoadingSpinnerTemplateDirective = /** @class */ (function () {
|
|
218
|
-
function NgLoadingSpinnerTemplateDirective(template) {
|
|
219
|
-
this.template = template;
|
|
220
|
-
}
|
|
221
|
-
NgLoadingSpinnerTemplateDirective.decorators = [
|
|
222
|
-
{ type: i0.Directive, args: [{ selector: '[ng-loadingspinner-tmp]' },] }
|
|
223
|
-
];
|
|
224
|
-
/** @nocollapse */
|
|
225
|
-
NgLoadingSpinnerTemplateDirective.ctorParameters = function () {
|
|
226
|
-
return [
|
|
227
|
-
{ type: i0.TemplateRef }
|
|
228
|
-
];
|
|
229
|
-
};
|
|
230
|
-
return NgLoadingSpinnerTemplateDirective;
|
|
231
|
-
}());
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* @fileoverview added by tsickle
|
|
235
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
236
|
-
*/
|
|
237
|
-
var ConsoleService = /** @class */ (function () {
|
|
238
|
-
function ConsoleService() {
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* @param {?} message
|
|
242
|
-
* @return {?}
|
|
243
|
-
*/
|
|
244
|
-
ConsoleService.prototype.warn = /**
|
|
245
|
-
* @param {?} message
|
|
246
|
-
* @return {?}
|
|
247
|
-
*/
|
|
248
|
-
function (message) {
|
|
249
|
-
console.warn(message);
|
|
250
|
-
};
|
|
251
|
-
ConsoleService.decorators = [
|
|
252
|
-
{ type: i0.Injectable, args: [{ providedIn: 'root' },] }
|
|
253
|
-
];
|
|
254
|
-
/** @nocollapse */ ConsoleService.ngInjectableDef = i0.defineInjectable({ factory: function ConsoleService_Factory() { return new ConsoleService(); }, token: ConsoleService, providedIn: "root" });
|
|
255
|
-
return ConsoleService;
|
|
256
|
-
}());
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* @fileoverview added by tsickle
|
|
260
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
261
|
-
*/
|
|
262
|
-
/**
|
|
263
|
-
* @param {?} value
|
|
264
|
-
* @return {?}
|
|
265
|
-
*/
|
|
266
|
-
function isDefined(value) {
|
|
267
|
-
return value !== undefined && value !== null;
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* @param {?} value
|
|
271
|
-
* @return {?}
|
|
272
|
-
*/
|
|
273
|
-
function isObject(value) {
|
|
274
|
-
return typeof value === 'object' && isDefined(value);
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* @param {?} value
|
|
278
|
-
* @return {?}
|
|
279
|
-
*/
|
|
280
|
-
function isPromise(value) {
|
|
281
|
-
return value instanceof Promise;
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* @param {?} value
|
|
285
|
-
* @return {?}
|
|
286
|
-
*/
|
|
287
|
-
function isFunction(value) {
|
|
288
|
-
return value instanceof Function;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* @fileoverview added by tsickle
|
|
293
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
294
|
-
*/
|
|
295
|
-
/** @type {?} */
|
|
296
|
-
var diacritics = {
|
|
297
|
-
'\u24B6': 'A',
|
|
298
|
-
'\uFF21': 'A',
|
|
299
|
-
'\u00C0': 'A',
|
|
300
|
-
'\u00C1': 'A',
|
|
301
|
-
'\u00C2': 'A',
|
|
302
|
-
'\u1EA6': 'A',
|
|
303
|
-
'\u1EA4': 'A',
|
|
304
|
-
'\u1EAA': 'A',
|
|
305
|
-
'\u1EA8': 'A',
|
|
306
|
-
'\u00C3': 'A',
|
|
307
|
-
'\u0100': 'A',
|
|
308
|
-
'\u0102': 'A',
|
|
309
|
-
'\u1EB0': 'A',
|
|
310
|
-
'\u1EAE': 'A',
|
|
311
|
-
'\u1EB4': 'A',
|
|
312
|
-
'\u1EB2': 'A',
|
|
313
|
-
'\u0226': 'A',
|
|
314
|
-
'\u01E0': 'A',
|
|
315
|
-
'\u00C4': 'A',
|
|
316
|
-
'\u01DE': 'A',
|
|
317
|
-
'\u1EA2': 'A',
|
|
318
|
-
'\u00C5': 'A',
|
|
319
|
-
'\u01FA': 'A',
|
|
320
|
-
'\u01CD': 'A',
|
|
321
|
-
'\u0200': 'A',
|
|
322
|
-
'\u0202': 'A',
|
|
323
|
-
'\u1EA0': 'A',
|
|
324
|
-
'\u1EAC': 'A',
|
|
325
|
-
'\u1EB6': 'A',
|
|
326
|
-
'\u1E00': 'A',
|
|
327
|
-
'\u0104': 'A',
|
|
328
|
-
'\u023A': 'A',
|
|
329
|
-
'\u2C6F': 'A',
|
|
330
|
-
'\uA732': 'AA',
|
|
331
|
-
'\u00C6': 'AE',
|
|
332
|
-
'\u01FC': 'AE',
|
|
333
|
-
'\u01E2': 'AE',
|
|
334
|
-
'\uA734': 'AO',
|
|
335
|
-
'\uA736': 'AU',
|
|
336
|
-
'\uA738': 'AV',
|
|
337
|
-
'\uA73A': 'AV',
|
|
338
|
-
'\uA73C': 'AY',
|
|
339
|
-
'\u24B7': 'B',
|
|
340
|
-
'\uFF22': 'B',
|
|
341
|
-
'\u1E02': 'B',
|
|
342
|
-
'\u1E04': 'B',
|
|
343
|
-
'\u1E06': 'B',
|
|
344
|
-
'\u0243': 'B',
|
|
345
|
-
'\u0182': 'B',
|
|
346
|
-
'\u0181': 'B',
|
|
347
|
-
'\u24B8': 'C',
|
|
348
|
-
'\uFF23': 'C',
|
|
349
|
-
'\u0106': 'C',
|
|
350
|
-
'\u0108': 'C',
|
|
351
|
-
'\u010A': 'C',
|
|
352
|
-
'\u010C': 'C',
|
|
353
|
-
'\u00C7': 'C',
|
|
354
|
-
'\u1E08': 'C',
|
|
355
|
-
'\u0187': 'C',
|
|
356
|
-
'\u023B': 'C',
|
|
357
|
-
'\uA73E': 'C',
|
|
358
|
-
'\u24B9': 'D',
|
|
359
|
-
'\uFF24': 'D',
|
|
360
|
-
'\u1E0A': 'D',
|
|
361
|
-
'\u010E': 'D',
|
|
362
|
-
'\u1E0C': 'D',
|
|
363
|
-
'\u1E10': 'D',
|
|
364
|
-
'\u1E12': 'D',
|
|
365
|
-
'\u1E0E': 'D',
|
|
366
|
-
'\u0110': 'D',
|
|
367
|
-
'\u018B': 'D',
|
|
368
|
-
'\u018A': 'D',
|
|
369
|
-
'\u0189': 'D',
|
|
370
|
-
'\uA779': 'D',
|
|
371
|
-
'\u01F1': 'DZ',
|
|
372
|
-
'\u01C4': 'DZ',
|
|
373
|
-
'\u01F2': 'Dz',
|
|
374
|
-
'\u01C5': 'Dz',
|
|
375
|
-
'\u24BA': 'E',
|
|
376
|
-
'\uFF25': 'E',
|
|
377
|
-
'\u00C8': 'E',
|
|
378
|
-
'\u00C9': 'E',
|
|
379
|
-
'\u00CA': 'E',
|
|
380
|
-
'\u1EC0': 'E',
|
|
381
|
-
'\u1EBE': 'E',
|
|
382
|
-
'\u1EC4': 'E',
|
|
383
|
-
'\u1EC2': 'E',
|
|
384
|
-
'\u1EBC': 'E',
|
|
385
|
-
'\u0112': 'E',
|
|
386
|
-
'\u1E14': 'E',
|
|
387
|
-
'\u1E16': 'E',
|
|
388
|
-
'\u0114': 'E',
|
|
389
|
-
'\u0116': 'E',
|
|
390
|
-
'\u00CB': 'E',
|
|
391
|
-
'\u1EBA': 'E',
|
|
392
|
-
'\u011A': 'E',
|
|
393
|
-
'\u0204': 'E',
|
|
394
|
-
'\u0206': 'E',
|
|
395
|
-
'\u1EB8': 'E',
|
|
396
|
-
'\u1EC6': 'E',
|
|
397
|
-
'\u0228': 'E',
|
|
398
|
-
'\u1E1C': 'E',
|
|
399
|
-
'\u0118': 'E',
|
|
400
|
-
'\u1E18': 'E',
|
|
401
|
-
'\u1E1A': 'E',
|
|
402
|
-
'\u0190': 'E',
|
|
403
|
-
'\u018E': 'E',
|
|
404
|
-
'\u24BB': 'F',
|
|
405
|
-
'\uFF26': 'F',
|
|
406
|
-
'\u1E1E': 'F',
|
|
407
|
-
'\u0191': 'F',
|
|
408
|
-
'\uA77B': 'F',
|
|
409
|
-
'\u24BC': 'G',
|
|
410
|
-
'\uFF27': 'G',
|
|
411
|
-
'\u01F4': 'G',
|
|
412
|
-
'\u011C': 'G',
|
|
413
|
-
'\u1E20': 'G',
|
|
414
|
-
'\u011E': 'G',
|
|
415
|
-
'\u0120': 'G',
|
|
416
|
-
'\u01E6': 'G',
|
|
417
|
-
'\u0122': 'G',
|
|
418
|
-
'\u01E4': 'G',
|
|
419
|
-
'\u0193': 'G',
|
|
420
|
-
'\uA7A0': 'G',
|
|
421
|
-
'\uA77D': 'G',
|
|
422
|
-
'\uA77E': 'G',
|
|
423
|
-
'\u24BD': 'H',
|
|
424
|
-
'\uFF28': 'H',
|
|
425
|
-
'\u0124': 'H',
|
|
426
|
-
'\u1E22': 'H',
|
|
427
|
-
'\u1E26': 'H',
|
|
428
|
-
'\u021E': 'H',
|
|
429
|
-
'\u1E24': 'H',
|
|
430
|
-
'\u1E28': 'H',
|
|
431
|
-
'\u1E2A': 'H',
|
|
432
|
-
'\u0126': 'H',
|
|
433
|
-
'\u2C67': 'H',
|
|
434
|
-
'\u2C75': 'H',
|
|
435
|
-
'\uA78D': 'H',
|
|
436
|
-
'\u24BE': 'I',
|
|
437
|
-
'\uFF29': 'I',
|
|
438
|
-
'\u00CC': 'I',
|
|
439
|
-
'\u00CD': 'I',
|
|
440
|
-
'\u00CE': 'I',
|
|
441
|
-
'\u0128': 'I',
|
|
442
|
-
'\u012A': 'I',
|
|
443
|
-
'\u012C': 'I',
|
|
444
|
-
'\u0130': 'I',
|
|
445
|
-
'\u00CF': 'I',
|
|
446
|
-
'\u1E2E': 'I',
|
|
447
|
-
'\u1EC8': 'I',
|
|
448
|
-
'\u01CF': 'I',
|
|
449
|
-
'\u0208': 'I',
|
|
450
|
-
'\u020A': 'I',
|
|
451
|
-
'\u1ECA': 'I',
|
|
452
|
-
'\u012E': 'I',
|
|
453
|
-
'\u1E2C': 'I',
|
|
454
|
-
'\u0197': 'I',
|
|
455
|
-
'\u24BF': 'J',
|
|
456
|
-
'\uFF2A': 'J',
|
|
457
|
-
'\u0134': 'J',
|
|
458
|
-
'\u0248': 'J',
|
|
459
|
-
'\u24C0': 'K',
|
|
460
|
-
'\uFF2B': 'K',
|
|
461
|
-
'\u1E30': 'K',
|
|
462
|
-
'\u01E8': 'K',
|
|
463
|
-
'\u1E32': 'K',
|
|
464
|
-
'\u0136': 'K',
|
|
465
|
-
'\u1E34': 'K',
|
|
466
|
-
'\u0198': 'K',
|
|
467
|
-
'\u2C69': 'K',
|
|
468
|
-
'\uA740': 'K',
|
|
469
|
-
'\uA742': 'K',
|
|
470
|
-
'\uA744': 'K',
|
|
471
|
-
'\uA7A2': 'K',
|
|
472
|
-
'\u24C1': 'L',
|
|
473
|
-
'\uFF2C': 'L',
|
|
474
|
-
'\u013F': 'L',
|
|
475
|
-
'\u0139': 'L',
|
|
476
|
-
'\u013D': 'L',
|
|
477
|
-
'\u1E36': 'L',
|
|
478
|
-
'\u1E38': 'L',
|
|
479
|
-
'\u013B': 'L',
|
|
480
|
-
'\u1E3C': 'L',
|
|
481
|
-
'\u1E3A': 'L',
|
|
482
|
-
'\u0141': 'L',
|
|
483
|
-
'\u023D': 'L',
|
|
484
|
-
'\u2C62': 'L',
|
|
485
|
-
'\u2C60': 'L',
|
|
486
|
-
'\uA748': 'L',
|
|
487
|
-
'\uA746': 'L',
|
|
488
|
-
'\uA780': 'L',
|
|
489
|
-
'\u01C7': 'LJ',
|
|
490
|
-
'\u01C8': 'Lj',
|
|
491
|
-
'\u24C2': 'M',
|
|
492
|
-
'\uFF2D': 'M',
|
|
493
|
-
'\u1E3E': 'M',
|
|
494
|
-
'\u1E40': 'M',
|
|
495
|
-
'\u1E42': 'M',
|
|
496
|
-
'\u2C6E': 'M',
|
|
497
|
-
'\u019C': 'M',
|
|
498
|
-
'\u24C3': 'N',
|
|
499
|
-
'\uFF2E': 'N',
|
|
500
|
-
'\u01F8': 'N',
|
|
501
|
-
'\u0143': 'N',
|
|
502
|
-
'\u00D1': 'N',
|
|
503
|
-
'\u1E44': 'N',
|
|
504
|
-
'\u0147': 'N',
|
|
505
|
-
'\u1E46': 'N',
|
|
506
|
-
'\u0145': 'N',
|
|
507
|
-
'\u1E4A': 'N',
|
|
508
|
-
'\u1E48': 'N',
|
|
509
|
-
'\u0220': 'N',
|
|
510
|
-
'\u019D': 'N',
|
|
511
|
-
'\uA790': 'N',
|
|
512
|
-
'\uA7A4': 'N',
|
|
513
|
-
'\u01CA': 'NJ',
|
|
514
|
-
'\u01CB': 'Nj',
|
|
515
|
-
'\u24C4': 'O',
|
|
516
|
-
'\uFF2F': 'O',
|
|
517
|
-
'\u00D2': 'O',
|
|
518
|
-
'\u00D3': 'O',
|
|
519
|
-
'\u00D4': 'O',
|
|
520
|
-
'\u1ED2': 'O',
|
|
521
|
-
'\u1ED0': 'O',
|
|
522
|
-
'\u1ED6': 'O',
|
|
523
|
-
'\u1ED4': 'O',
|
|
524
|
-
'\u00D5': 'O',
|
|
525
|
-
'\u1E4C': 'O',
|
|
526
|
-
'\u022C': 'O',
|
|
527
|
-
'\u1E4E': 'O',
|
|
528
|
-
'\u014C': 'O',
|
|
529
|
-
'\u1E50': 'O',
|
|
530
|
-
'\u1E52': 'O',
|
|
531
|
-
'\u014E': 'O',
|
|
532
|
-
'\u022E': 'O',
|
|
533
|
-
'\u0230': 'O',
|
|
534
|
-
'\u00D6': 'O',
|
|
535
|
-
'\u022A': 'O',
|
|
536
|
-
'\u1ECE': 'O',
|
|
537
|
-
'\u0150': 'O',
|
|
538
|
-
'\u01D1': 'O',
|
|
539
|
-
'\u020C': 'O',
|
|
540
|
-
'\u020E': 'O',
|
|
541
|
-
'\u01A0': 'O',
|
|
542
|
-
'\u1EDC': 'O',
|
|
543
|
-
'\u1EDA': 'O',
|
|
544
|
-
'\u1EE0': 'O',
|
|
545
|
-
'\u1EDE': 'O',
|
|
546
|
-
'\u1EE2': 'O',
|
|
547
|
-
'\u1ECC': 'O',
|
|
548
|
-
'\u1ED8': 'O',
|
|
549
|
-
'\u01EA': 'O',
|
|
550
|
-
'\u01EC': 'O',
|
|
551
|
-
'\u00D8': 'O',
|
|
552
|
-
'\u01FE': 'O',
|
|
553
|
-
'\u0186': 'O',
|
|
554
|
-
'\u019F': 'O',
|
|
555
|
-
'\uA74A': 'O',
|
|
556
|
-
'\uA74C': 'O',
|
|
557
|
-
'\u01A2': 'OI',
|
|
558
|
-
'\uA74E': 'OO',
|
|
559
|
-
'\u0222': 'OU',
|
|
560
|
-
'\u24C5': 'P',
|
|
561
|
-
'\uFF30': 'P',
|
|
562
|
-
'\u1E54': 'P',
|
|
563
|
-
'\u1E56': 'P',
|
|
564
|
-
'\u01A4': 'P',
|
|
565
|
-
'\u2C63': 'P',
|
|
566
|
-
'\uA750': 'P',
|
|
567
|
-
'\uA752': 'P',
|
|
568
|
-
'\uA754': 'P',
|
|
569
|
-
'\u24C6': 'Q',
|
|
570
|
-
'\uFF31': 'Q',
|
|
571
|
-
'\uA756': 'Q',
|
|
572
|
-
'\uA758': 'Q',
|
|
573
|
-
'\u024A': 'Q',
|
|
574
|
-
'\u24C7': 'R',
|
|
575
|
-
'\uFF32': 'R',
|
|
576
|
-
'\u0154': 'R',
|
|
577
|
-
'\u1E58': 'R',
|
|
578
|
-
'\u0158': 'R',
|
|
579
|
-
'\u0210': 'R',
|
|
580
|
-
'\u0212': 'R',
|
|
581
|
-
'\u1E5A': 'R',
|
|
582
|
-
'\u1E5C': 'R',
|
|
583
|
-
'\u0156': 'R',
|
|
584
|
-
'\u1E5E': 'R',
|
|
585
|
-
'\u024C': 'R',
|
|
586
|
-
'\u2C64': 'R',
|
|
587
|
-
'\uA75A': 'R',
|
|
588
|
-
'\uA7A6': 'R',
|
|
589
|
-
'\uA782': 'R',
|
|
590
|
-
'\u24C8': 'S',
|
|
591
|
-
'\uFF33': 'S',
|
|
592
|
-
'\u1E9E': 'S',
|
|
593
|
-
'\u015A': 'S',
|
|
594
|
-
'\u1E64': 'S',
|
|
595
|
-
'\u015C': 'S',
|
|
596
|
-
'\u1E60': 'S',
|
|
597
|
-
'\u0160': 'S',
|
|
598
|
-
'\u1E66': 'S',
|
|
599
|
-
'\u1E62': 'S',
|
|
600
|
-
'\u1E68': 'S',
|
|
601
|
-
'\u0218': 'S',
|
|
602
|
-
'\u015E': 'S',
|
|
603
|
-
'\u2C7E': 'S',
|
|
604
|
-
'\uA7A8': 'S',
|
|
605
|
-
'\uA784': 'S',
|
|
606
|
-
'\u24C9': 'T',
|
|
607
|
-
'\uFF34': 'T',
|
|
608
|
-
'\u1E6A': 'T',
|
|
609
|
-
'\u0164': 'T',
|
|
610
|
-
'\u1E6C': 'T',
|
|
611
|
-
'\u021A': 'T',
|
|
612
|
-
'\u0162': 'T',
|
|
613
|
-
'\u1E70': 'T',
|
|
614
|
-
'\u1E6E': 'T',
|
|
615
|
-
'\u0166': 'T',
|
|
616
|
-
'\u01AC': 'T',
|
|
617
|
-
'\u01AE': 'T',
|
|
618
|
-
'\u023E': 'T',
|
|
619
|
-
'\uA786': 'T',
|
|
620
|
-
'\uA728': 'TZ',
|
|
621
|
-
'\u24CA': 'U',
|
|
622
|
-
'\uFF35': 'U',
|
|
623
|
-
'\u00D9': 'U',
|
|
624
|
-
'\u00DA': 'U',
|
|
625
|
-
'\u00DB': 'U',
|
|
626
|
-
'\u0168': 'U',
|
|
627
|
-
'\u1E78': 'U',
|
|
628
|
-
'\u016A': 'U',
|
|
629
|
-
'\u1E7A': 'U',
|
|
630
|
-
'\u016C': 'U',
|
|
631
|
-
'\u00DC': 'U',
|
|
632
|
-
'\u01DB': 'U',
|
|
633
|
-
'\u01D7': 'U',
|
|
634
|
-
'\u01D5': 'U',
|
|
635
|
-
'\u01D9': 'U',
|
|
636
|
-
'\u1EE6': 'U',
|
|
637
|
-
'\u016E': 'U',
|
|
638
|
-
'\u0170': 'U',
|
|
639
|
-
'\u01D3': 'U',
|
|
640
|
-
'\u0214': 'U',
|
|
641
|
-
'\u0216': 'U',
|
|
642
|
-
'\u01AF': 'U',
|
|
643
|
-
'\u1EEA': 'U',
|
|
644
|
-
'\u1EE8': 'U',
|
|
645
|
-
'\u1EEE': 'U',
|
|
646
|
-
'\u1EEC': 'U',
|
|
647
|
-
'\u1EF0': 'U',
|
|
648
|
-
'\u1EE4': 'U',
|
|
649
|
-
'\u1E72': 'U',
|
|
650
|
-
'\u0172': 'U',
|
|
651
|
-
'\u1E76': 'U',
|
|
652
|
-
'\u1E74': 'U',
|
|
653
|
-
'\u0244': 'U',
|
|
654
|
-
'\u24CB': 'V',
|
|
655
|
-
'\uFF36': 'V',
|
|
656
|
-
'\u1E7C': 'V',
|
|
657
|
-
'\u1E7E': 'V',
|
|
658
|
-
'\u01B2': 'V',
|
|
659
|
-
'\uA75E': 'V',
|
|
660
|
-
'\u0245': 'V',
|
|
661
|
-
'\uA760': 'VY',
|
|
662
|
-
'\u24CC': 'W',
|
|
663
|
-
'\uFF37': 'W',
|
|
664
|
-
'\u1E80': 'W',
|
|
665
|
-
'\u1E82': 'W',
|
|
666
|
-
'\u0174': 'W',
|
|
667
|
-
'\u1E86': 'W',
|
|
668
|
-
'\u1E84': 'W',
|
|
669
|
-
'\u1E88': 'W',
|
|
670
|
-
'\u2C72': 'W',
|
|
671
|
-
'\u24CD': 'X',
|
|
672
|
-
'\uFF38': 'X',
|
|
673
|
-
'\u1E8A': 'X',
|
|
674
|
-
'\u1E8C': 'X',
|
|
675
|
-
'\u24CE': 'Y',
|
|
676
|
-
'\uFF39': 'Y',
|
|
677
|
-
'\u1EF2': 'Y',
|
|
678
|
-
'\u00DD': 'Y',
|
|
679
|
-
'\u0176': 'Y',
|
|
680
|
-
'\u1EF8': 'Y',
|
|
681
|
-
'\u0232': 'Y',
|
|
682
|
-
'\u1E8E': 'Y',
|
|
683
|
-
'\u0178': 'Y',
|
|
684
|
-
'\u1EF6': 'Y',
|
|
685
|
-
'\u1EF4': 'Y',
|
|
686
|
-
'\u01B3': 'Y',
|
|
687
|
-
'\u024E': 'Y',
|
|
688
|
-
'\u1EFE': 'Y',
|
|
689
|
-
'\u24CF': 'Z',
|
|
690
|
-
'\uFF3A': 'Z',
|
|
691
|
-
'\u0179': 'Z',
|
|
692
|
-
'\u1E90': 'Z',
|
|
693
|
-
'\u017B': 'Z',
|
|
694
|
-
'\u017D': 'Z',
|
|
695
|
-
'\u1E92': 'Z',
|
|
696
|
-
'\u1E94': 'Z',
|
|
697
|
-
'\u01B5': 'Z',
|
|
698
|
-
'\u0224': 'Z',
|
|
699
|
-
'\u2C7F': 'Z',
|
|
700
|
-
'\u2C6B': 'Z',
|
|
701
|
-
'\uA762': 'Z',
|
|
702
|
-
'\u24D0': 'a',
|
|
703
|
-
'\uFF41': 'a',
|
|
704
|
-
'\u1E9A': 'a',
|
|
705
|
-
'\u00E0': 'a',
|
|
706
|
-
'\u00E1': 'a',
|
|
707
|
-
'\u00E2': 'a',
|
|
708
|
-
'\u1EA7': 'a',
|
|
709
|
-
'\u1EA5': 'a',
|
|
710
|
-
'\u1EAB': 'a',
|
|
711
|
-
'\u1EA9': 'a',
|
|
712
|
-
'\u00E3': 'a',
|
|
713
|
-
'\u0101': 'a',
|
|
714
|
-
'\u0103': 'a',
|
|
715
|
-
'\u1EB1': 'a',
|
|
716
|
-
'\u1EAF': 'a',
|
|
717
|
-
'\u1EB5': 'a',
|
|
718
|
-
'\u1EB3': 'a',
|
|
719
|
-
'\u0227': 'a',
|
|
720
|
-
'\u01E1': 'a',
|
|
721
|
-
'\u00E4': 'a',
|
|
722
|
-
'\u01DF': 'a',
|
|
723
|
-
'\u1EA3': 'a',
|
|
724
|
-
'\u00E5': 'a',
|
|
725
|
-
'\u01FB': 'a',
|
|
726
|
-
'\u01CE': 'a',
|
|
727
|
-
'\u0201': 'a',
|
|
728
|
-
'\u0203': 'a',
|
|
729
|
-
'\u1EA1': 'a',
|
|
730
|
-
'\u1EAD': 'a',
|
|
731
|
-
'\u1EB7': 'a',
|
|
732
|
-
'\u1E01': 'a',
|
|
733
|
-
'\u0105': 'a',
|
|
734
|
-
'\u2C65': 'a',
|
|
735
|
-
'\u0250': 'a',
|
|
736
|
-
'\uA733': 'aa',
|
|
737
|
-
'\u00E6': 'ae',
|
|
738
|
-
'\u01FD': 'ae',
|
|
739
|
-
'\u01E3': 'ae',
|
|
740
|
-
'\uA735': 'ao',
|
|
741
|
-
'\uA737': 'au',
|
|
742
|
-
'\uA739': 'av',
|
|
743
|
-
'\uA73B': 'av',
|
|
744
|
-
'\uA73D': 'ay',
|
|
745
|
-
'\u24D1': 'b',
|
|
746
|
-
'\uFF42': 'b',
|
|
747
|
-
'\u1E03': 'b',
|
|
748
|
-
'\u1E05': 'b',
|
|
749
|
-
'\u1E07': 'b',
|
|
750
|
-
'\u0180': 'b',
|
|
751
|
-
'\u0183': 'b',
|
|
752
|
-
'\u0253': 'b',
|
|
753
|
-
'\u24D2': 'c',
|
|
754
|
-
'\uFF43': 'c',
|
|
755
|
-
'\u0107': 'c',
|
|
756
|
-
'\u0109': 'c',
|
|
757
|
-
'\u010B': 'c',
|
|
758
|
-
'\u010D': 'c',
|
|
759
|
-
'\u00E7': 'c',
|
|
760
|
-
'\u1E09': 'c',
|
|
761
|
-
'\u0188': 'c',
|
|
762
|
-
'\u023C': 'c',
|
|
763
|
-
'\uA73F': 'c',
|
|
764
|
-
'\u2184': 'c',
|
|
765
|
-
'\u24D3': 'd',
|
|
766
|
-
'\uFF44': 'd',
|
|
767
|
-
'\u1E0B': 'd',
|
|
768
|
-
'\u010F': 'd',
|
|
769
|
-
'\u1E0D': 'd',
|
|
770
|
-
'\u1E11': 'd',
|
|
771
|
-
'\u1E13': 'd',
|
|
772
|
-
'\u1E0F': 'd',
|
|
773
|
-
'\u0111': 'd',
|
|
774
|
-
'\u018C': 'd',
|
|
775
|
-
'\u0256': 'd',
|
|
776
|
-
'\u0257': 'd',
|
|
777
|
-
'\uA77A': 'd',
|
|
778
|
-
'\u01F3': 'dz',
|
|
779
|
-
'\u01C6': 'dz',
|
|
780
|
-
'\u24D4': 'e',
|
|
781
|
-
'\uFF45': 'e',
|
|
782
|
-
'\u00E8': 'e',
|
|
783
|
-
'\u00E9': 'e',
|
|
784
|
-
'\u00EA': 'e',
|
|
785
|
-
'\u1EC1': 'e',
|
|
786
|
-
'\u1EBF': 'e',
|
|
787
|
-
'\u1EC5': 'e',
|
|
788
|
-
'\u1EC3': 'e',
|
|
789
|
-
'\u1EBD': 'e',
|
|
790
|
-
'\u0113': 'e',
|
|
791
|
-
'\u1E15': 'e',
|
|
792
|
-
'\u1E17': 'e',
|
|
793
|
-
'\u0115': 'e',
|
|
794
|
-
'\u0117': 'e',
|
|
795
|
-
'\u00EB': 'e',
|
|
796
|
-
'\u1EBB': 'e',
|
|
797
|
-
'\u011B': 'e',
|
|
798
|
-
'\u0205': 'e',
|
|
799
|
-
'\u0207': 'e',
|
|
800
|
-
'\u1EB9': 'e',
|
|
801
|
-
'\u1EC7': 'e',
|
|
802
|
-
'\u0229': 'e',
|
|
803
|
-
'\u1E1D': 'e',
|
|
804
|
-
'\u0119': 'e',
|
|
805
|
-
'\u1E19': 'e',
|
|
806
|
-
'\u1E1B': 'e',
|
|
807
|
-
'\u0247': 'e',
|
|
808
|
-
'\u025B': 'e',
|
|
809
|
-
'\u01DD': 'e',
|
|
810
|
-
'\u24D5': 'f',
|
|
811
|
-
'\uFF46': 'f',
|
|
812
|
-
'\u1E1F': 'f',
|
|
813
|
-
'\u0192': 'f',
|
|
814
|
-
'\uA77C': 'f',
|
|
815
|
-
'\u24D6': 'g',
|
|
816
|
-
'\uFF47': 'g',
|
|
817
|
-
'\u01F5': 'g',
|
|
818
|
-
'\u011D': 'g',
|
|
819
|
-
'\u1E21': 'g',
|
|
820
|
-
'\u011F': 'g',
|
|
821
|
-
'\u0121': 'g',
|
|
822
|
-
'\u01E7': 'g',
|
|
823
|
-
'\u0123': 'g',
|
|
824
|
-
'\u01E5': 'g',
|
|
825
|
-
'\u0260': 'g',
|
|
826
|
-
'\uA7A1': 'g',
|
|
827
|
-
'\u1D79': 'g',
|
|
828
|
-
'\uA77F': 'g',
|
|
829
|
-
'\u24D7': 'h',
|
|
830
|
-
'\uFF48': 'h',
|
|
831
|
-
'\u0125': 'h',
|
|
832
|
-
'\u1E23': 'h',
|
|
833
|
-
'\u1E27': 'h',
|
|
834
|
-
'\u021F': 'h',
|
|
835
|
-
'\u1E25': 'h',
|
|
836
|
-
'\u1E29': 'h',
|
|
837
|
-
'\u1E2B': 'h',
|
|
838
|
-
'\u1E96': 'h',
|
|
839
|
-
'\u0127': 'h',
|
|
840
|
-
'\u2C68': 'h',
|
|
841
|
-
'\u2C76': 'h',
|
|
842
|
-
'\u0265': 'h',
|
|
843
|
-
'\u0195': 'hv',
|
|
844
|
-
'\u24D8': 'i',
|
|
845
|
-
'\uFF49': 'i',
|
|
846
|
-
'\u00EC': 'i',
|
|
847
|
-
'\u00ED': 'i',
|
|
848
|
-
'\u00EE': 'i',
|
|
849
|
-
'\u0129': 'i',
|
|
850
|
-
'\u012B': 'i',
|
|
851
|
-
'\u012D': 'i',
|
|
852
|
-
'\u00EF': 'i',
|
|
853
|
-
'\u1E2F': 'i',
|
|
854
|
-
'\u1EC9': 'i',
|
|
855
|
-
'\u01D0': 'i',
|
|
856
|
-
'\u0209': 'i',
|
|
857
|
-
'\u020B': 'i',
|
|
858
|
-
'\u1ECB': 'i',
|
|
859
|
-
'\u012F': 'i',
|
|
860
|
-
'\u1E2D': 'i',
|
|
861
|
-
'\u0268': 'i',
|
|
862
|
-
'\u0131': 'i',
|
|
863
|
-
'\u24D9': 'j',
|
|
864
|
-
'\uFF4A': 'j',
|
|
865
|
-
'\u0135': 'j',
|
|
866
|
-
'\u01F0': 'j',
|
|
867
|
-
'\u0249': 'j',
|
|
868
|
-
'\u24DA': 'k',
|
|
869
|
-
'\uFF4B': 'k',
|
|
870
|
-
'\u1E31': 'k',
|
|
871
|
-
'\u01E9': 'k',
|
|
872
|
-
'\u1E33': 'k',
|
|
873
|
-
'\u0137': 'k',
|
|
874
|
-
'\u1E35': 'k',
|
|
875
|
-
'\u0199': 'k',
|
|
876
|
-
'\u2C6A': 'k',
|
|
877
|
-
'\uA741': 'k',
|
|
878
|
-
'\uA743': 'k',
|
|
879
|
-
'\uA745': 'k',
|
|
880
|
-
'\uA7A3': 'k',
|
|
881
|
-
'\u24DB': 'l',
|
|
882
|
-
'\uFF4C': 'l',
|
|
883
|
-
'\u0140': 'l',
|
|
884
|
-
'\u013A': 'l',
|
|
885
|
-
'\u013E': 'l',
|
|
886
|
-
'\u1E37': 'l',
|
|
887
|
-
'\u1E39': 'l',
|
|
888
|
-
'\u013C': 'l',
|
|
889
|
-
'\u1E3D': 'l',
|
|
890
|
-
'\u1E3B': 'l',
|
|
891
|
-
'\u017F': 'l',
|
|
892
|
-
'\u0142': 'l',
|
|
893
|
-
'\u019A': 'l',
|
|
894
|
-
'\u026B': 'l',
|
|
895
|
-
'\u2C61': 'l',
|
|
896
|
-
'\uA749': 'l',
|
|
897
|
-
'\uA781': 'l',
|
|
898
|
-
'\uA747': 'l',
|
|
899
|
-
'\u01C9': 'lj',
|
|
900
|
-
'\u24DC': 'm',
|
|
901
|
-
'\uFF4D': 'm',
|
|
902
|
-
'\u1E3F': 'm',
|
|
903
|
-
'\u1E41': 'm',
|
|
904
|
-
'\u1E43': 'm',
|
|
905
|
-
'\u0271': 'm',
|
|
906
|
-
'\u026F': 'm',
|
|
907
|
-
'\u24DD': 'n',
|
|
908
|
-
'\uFF4E': 'n',
|
|
909
|
-
'\u01F9': 'n',
|
|
910
|
-
'\u0144': 'n',
|
|
911
|
-
'\u00F1': 'n',
|
|
912
|
-
'\u1E45': 'n',
|
|
913
|
-
'\u0148': 'n',
|
|
914
|
-
'\u1E47': 'n',
|
|
915
|
-
'\u0146': 'n',
|
|
916
|
-
'\u1E4B': 'n',
|
|
917
|
-
'\u1E49': 'n',
|
|
918
|
-
'\u019E': 'n',
|
|
919
|
-
'\u0272': 'n',
|
|
920
|
-
'\u0149': 'n',
|
|
921
|
-
'\uA791': 'n',
|
|
922
|
-
'\uA7A5': 'n',
|
|
923
|
-
'\u01CC': 'nj',
|
|
924
|
-
'\u24DE': 'o',
|
|
925
|
-
'\uFF4F': 'o',
|
|
926
|
-
'\u00F2': 'o',
|
|
927
|
-
'\u00F3': 'o',
|
|
928
|
-
'\u00F4': 'o',
|
|
929
|
-
'\u1ED3': 'o',
|
|
930
|
-
'\u1ED1': 'o',
|
|
931
|
-
'\u1ED7': 'o',
|
|
932
|
-
'\u1ED5': 'o',
|
|
933
|
-
'\u00F5': 'o',
|
|
934
|
-
'\u1E4D': 'o',
|
|
935
|
-
'\u022D': 'o',
|
|
936
|
-
'\u1E4F': 'o',
|
|
937
|
-
'\u014D': 'o',
|
|
938
|
-
'\u1E51': 'o',
|
|
939
|
-
'\u1E53': 'o',
|
|
940
|
-
'\u014F': 'o',
|
|
941
|
-
'\u022F': 'o',
|
|
942
|
-
'\u0231': 'o',
|
|
943
|
-
'\u00F6': 'o',
|
|
944
|
-
'\u022B': 'o',
|
|
945
|
-
'\u1ECF': 'o',
|
|
946
|
-
'\u0151': 'o',
|
|
947
|
-
'\u01D2': 'o',
|
|
948
|
-
'\u020D': 'o',
|
|
949
|
-
'\u020F': 'o',
|
|
950
|
-
'\u01A1': 'o',
|
|
951
|
-
'\u1EDD': 'o',
|
|
952
|
-
'\u1EDB': 'o',
|
|
953
|
-
'\u1EE1': 'o',
|
|
954
|
-
'\u1EDF': 'o',
|
|
955
|
-
'\u1EE3': 'o',
|
|
956
|
-
'\u1ECD': 'o',
|
|
957
|
-
'\u1ED9': 'o',
|
|
958
|
-
'\u01EB': 'o',
|
|
959
|
-
'\u01ED': 'o',
|
|
960
|
-
'\u00F8': 'o',
|
|
961
|
-
'\u01FF': 'o',
|
|
962
|
-
'\u0254': 'o',
|
|
963
|
-
'\uA74B': 'o',
|
|
964
|
-
'\uA74D': 'o',
|
|
965
|
-
'\u0275': 'o',
|
|
966
|
-
'\u01A3': 'oi',
|
|
967
|
-
'\u0223': 'ou',
|
|
968
|
-
'\uA74F': 'oo',
|
|
969
|
-
'\u24DF': 'p',
|
|
970
|
-
'\uFF50': 'p',
|
|
971
|
-
'\u1E55': 'p',
|
|
972
|
-
'\u1E57': 'p',
|
|
973
|
-
'\u01A5': 'p',
|
|
974
|
-
'\u1D7D': 'p',
|
|
975
|
-
'\uA751': 'p',
|
|
976
|
-
'\uA753': 'p',
|
|
977
|
-
'\uA755': 'p',
|
|
978
|
-
'\u24E0': 'q',
|
|
979
|
-
'\uFF51': 'q',
|
|
980
|
-
'\u024B': 'q',
|
|
981
|
-
'\uA757': 'q',
|
|
982
|
-
'\uA759': 'q',
|
|
983
|
-
'\u24E1': 'r',
|
|
984
|
-
'\uFF52': 'r',
|
|
985
|
-
'\u0155': 'r',
|
|
986
|
-
'\u1E59': 'r',
|
|
987
|
-
'\u0159': 'r',
|
|
988
|
-
'\u0211': 'r',
|
|
989
|
-
'\u0213': 'r',
|
|
990
|
-
'\u1E5B': 'r',
|
|
991
|
-
'\u1E5D': 'r',
|
|
992
|
-
'\u0157': 'r',
|
|
993
|
-
'\u1E5F': 'r',
|
|
994
|
-
'\u024D': 'r',
|
|
995
|
-
'\u027D': 'r',
|
|
996
|
-
'\uA75B': 'r',
|
|
997
|
-
'\uA7A7': 'r',
|
|
998
|
-
'\uA783': 'r',
|
|
999
|
-
'\u24E2': 's',
|
|
1000
|
-
'\uFF53': 's',
|
|
1001
|
-
'\u00DF': 's',
|
|
1002
|
-
'\u015B': 's',
|
|
1003
|
-
'\u1E65': 's',
|
|
1004
|
-
'\u015D': 's',
|
|
1005
|
-
'\u1E61': 's',
|
|
1006
|
-
'\u0161': 's',
|
|
1007
|
-
'\u1E67': 's',
|
|
1008
|
-
'\u1E63': 's',
|
|
1009
|
-
'\u1E69': 's',
|
|
1010
|
-
'\u0219': 's',
|
|
1011
|
-
'\u015F': 's',
|
|
1012
|
-
'\u023F': 's',
|
|
1013
|
-
'\uA7A9': 's',
|
|
1014
|
-
'\uA785': 's',
|
|
1015
|
-
'\u1E9B': 's',
|
|
1016
|
-
'\u24E3': 't',
|
|
1017
|
-
'\uFF54': 't',
|
|
1018
|
-
'\u1E6B': 't',
|
|
1019
|
-
'\u1E97': 't',
|
|
1020
|
-
'\u0165': 't',
|
|
1021
|
-
'\u1E6D': 't',
|
|
1022
|
-
'\u021B': 't',
|
|
1023
|
-
'\u0163': 't',
|
|
1024
|
-
'\u1E71': 't',
|
|
1025
|
-
'\u1E6F': 't',
|
|
1026
|
-
'\u0167': 't',
|
|
1027
|
-
'\u01AD': 't',
|
|
1028
|
-
'\u0288': 't',
|
|
1029
|
-
'\u2C66': 't',
|
|
1030
|
-
'\uA787': 't',
|
|
1031
|
-
'\uA729': 'tz',
|
|
1032
|
-
'\u24E4': 'u',
|
|
1033
|
-
'\uFF55': 'u',
|
|
1034
|
-
'\u00F9': 'u',
|
|
1035
|
-
'\u00FA': 'u',
|
|
1036
|
-
'\u00FB': 'u',
|
|
1037
|
-
'\u0169': 'u',
|
|
1038
|
-
'\u1E79': 'u',
|
|
1039
|
-
'\u016B': 'u',
|
|
1040
|
-
'\u1E7B': 'u',
|
|
1041
|
-
'\u016D': 'u',
|
|
1042
|
-
'\u00FC': 'u',
|
|
1043
|
-
'\u01DC': 'u',
|
|
1044
|
-
'\u01D8': 'u',
|
|
1045
|
-
'\u01D6': 'u',
|
|
1046
|
-
'\u01DA': 'u',
|
|
1047
|
-
'\u1EE7': 'u',
|
|
1048
|
-
'\u016F': 'u',
|
|
1049
|
-
'\u0171': 'u',
|
|
1050
|
-
'\u01D4': 'u',
|
|
1051
|
-
'\u0215': 'u',
|
|
1052
|
-
'\u0217': 'u',
|
|
1053
|
-
'\u01B0': 'u',
|
|
1054
|
-
'\u1EEB': 'u',
|
|
1055
|
-
'\u1EE9': 'u',
|
|
1056
|
-
'\u1EEF': 'u',
|
|
1057
|
-
'\u1EED': 'u',
|
|
1058
|
-
'\u1EF1': 'u',
|
|
1059
|
-
'\u1EE5': 'u',
|
|
1060
|
-
'\u1E73': 'u',
|
|
1061
|
-
'\u0173': 'u',
|
|
1062
|
-
'\u1E77': 'u',
|
|
1063
|
-
'\u1E75': 'u',
|
|
1064
|
-
'\u0289': 'u',
|
|
1065
|
-
'\u24E5': 'v',
|
|
1066
|
-
'\uFF56': 'v',
|
|
1067
|
-
'\u1E7D': 'v',
|
|
1068
|
-
'\u1E7F': 'v',
|
|
1069
|
-
'\u028B': 'v',
|
|
1070
|
-
'\uA75F': 'v',
|
|
1071
|
-
'\u028C': 'v',
|
|
1072
|
-
'\uA761': 'vy',
|
|
1073
|
-
'\u24E6': 'w',
|
|
1074
|
-
'\uFF57': 'w',
|
|
1075
|
-
'\u1E81': 'w',
|
|
1076
|
-
'\u1E83': 'w',
|
|
1077
|
-
'\u0175': 'w',
|
|
1078
|
-
'\u1E87': 'w',
|
|
1079
|
-
'\u1E85': 'w',
|
|
1080
|
-
'\u1E98': 'w',
|
|
1081
|
-
'\u1E89': 'w',
|
|
1082
|
-
'\u2C73': 'w',
|
|
1083
|
-
'\u24E7': 'x',
|
|
1084
|
-
'\uFF58': 'x',
|
|
1085
|
-
'\u1E8B': 'x',
|
|
1086
|
-
'\u1E8D': 'x',
|
|
1087
|
-
'\u24E8': 'y',
|
|
1088
|
-
'\uFF59': 'y',
|
|
1089
|
-
'\u1EF3': 'y',
|
|
1090
|
-
'\u00FD': 'y',
|
|
1091
|
-
'\u0177': 'y',
|
|
1092
|
-
'\u1EF9': 'y',
|
|
1093
|
-
'\u0233': 'y',
|
|
1094
|
-
'\u1E8F': 'y',
|
|
1095
|
-
'\u00FF': 'y',
|
|
1096
|
-
'\u1EF7': 'y',
|
|
1097
|
-
'\u1E99': 'y',
|
|
1098
|
-
'\u1EF5': 'y',
|
|
1099
|
-
'\u01B4': 'y',
|
|
1100
|
-
'\u024F': 'y',
|
|
1101
|
-
'\u1EFF': 'y',
|
|
1102
|
-
'\u24E9': 'z',
|
|
1103
|
-
'\uFF5A': 'z',
|
|
1104
|
-
'\u017A': 'z',
|
|
1105
|
-
'\u1E91': 'z',
|
|
1106
|
-
'\u017C': 'z',
|
|
1107
|
-
'\u017E': 'z',
|
|
1108
|
-
'\u1E93': 'z',
|
|
1109
|
-
'\u1E95': 'z',
|
|
1110
|
-
'\u01B6': 'z',
|
|
1111
|
-
'\u0225': 'z',
|
|
1112
|
-
'\u0240': 'z',
|
|
1113
|
-
'\u2C6C': 'z',
|
|
1114
|
-
'\uA763': 'z',
|
|
1115
|
-
'\u0386': '\u0391',
|
|
1116
|
-
'\u0388': '\u0395',
|
|
1117
|
-
'\u0389': '\u0397',
|
|
1118
|
-
'\u038A': '\u0399',
|
|
1119
|
-
'\u03AA': '\u0399',
|
|
1120
|
-
'\u038C': '\u039F',
|
|
1121
|
-
'\u038E': '\u03A5',
|
|
1122
|
-
'\u03AB': '\u03A5',
|
|
1123
|
-
'\u038F': '\u03A9',
|
|
1124
|
-
'\u03AC': '\u03B1',
|
|
1125
|
-
'\u03AD': '\u03B5',
|
|
1126
|
-
'\u03AE': '\u03B7',
|
|
1127
|
-
'\u03AF': '\u03B9',
|
|
1128
|
-
'\u03CA': '\u03B9',
|
|
1129
|
-
'\u0390': '\u03B9',
|
|
1130
|
-
'\u03CC': '\u03BF',
|
|
1131
|
-
'\u03CD': '\u03C5',
|
|
1132
|
-
'\u03CB': '\u03C5',
|
|
1133
|
-
'\u03B0': '\u03C5',
|
|
1134
|
-
'\u03C9': '\u03C9',
|
|
1135
|
-
'\u03C2': '\u03C3'
|
|
1136
|
-
};
|
|
1137
|
-
/**
|
|
1138
|
-
* @param {?} text
|
|
1139
|
-
* @return {?}
|
|
1140
|
-
*/
|
|
1141
|
-
function stripSpecialChars(text) {
|
|
1142
|
-
/** @type {?} */
|
|
1143
|
-
var match = function (a) {
|
|
1144
|
-
return diacritics[a] || a;
|
|
1145
|
-
};
|
|
1146
|
-
return text.replace(/[^\u0000-\u007E]/g, match);
|
|
1147
|
-
}
|
|
1148
|
-
|
|
1149
|
-
/**
|
|
1150
|
-
* @fileoverview added by tsickle
|
|
1151
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
1152
|
-
*/
|
|
1153
|
-
/**
|
|
1154
|
-
* @return {?}
|
|
1155
|
-
*/
|
|
1156
|
-
function newId() {
|
|
1157
|
-
// First character is an 'a', it's good practice to tag id to begin with a letter
|
|
1158
|
-
return 'axxxxxxxxxxx'.replace(/[x]/g, function (_) {
|
|
1159
|
-
/** @type {?} */
|
|
1160
|
-
var val = Math.random() * 16 | 0;
|
|
1161
|
-
return val.toString(16);
|
|
1162
|
-
});
|
|
1163
|
-
}
|
|
1164
|
-
|
|
1165
|
-
/**
|
|
1166
|
-
* @fileoverview added by tsickle
|
|
1167
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
1168
|
-
*/
|
|
1169
|
-
var ItemsList = /** @class */ (function () {
|
|
1170
|
-
function ItemsList(_ngSelect, _selectionModel) {
|
|
1171
|
-
this._ngSelect = _ngSelect;
|
|
1172
|
-
this._selectionModel = _selectionModel;
|
|
1173
|
-
this._items = [];
|
|
1174
|
-
this._filteredItems = [];
|
|
1175
|
-
this._markedIndex = -1;
|
|
1176
|
-
}
|
|
1177
|
-
Object.defineProperty(ItemsList.prototype, "items", {
|
|
1178
|
-
get: /**
|
|
1179
|
-
* @return {?}
|
|
1180
|
-
*/ function () {
|
|
1181
|
-
return this._items;
|
|
1182
|
-
},
|
|
1183
|
-
enumerable: true,
|
|
1184
|
-
configurable: true
|
|
1185
|
-
});
|
|
1186
|
-
Object.defineProperty(ItemsList.prototype, "filteredItems", {
|
|
1187
|
-
get: /**
|
|
1188
|
-
* @return {?}
|
|
1189
|
-
*/ function () {
|
|
1190
|
-
return this._filteredItems;
|
|
1191
|
-
},
|
|
1192
|
-
enumerable: true,
|
|
1193
|
-
configurable: true
|
|
1194
|
-
});
|
|
1195
|
-
Object.defineProperty(ItemsList.prototype, "markedIndex", {
|
|
1196
|
-
get: /**
|
|
1197
|
-
* @return {?}
|
|
1198
|
-
*/ function () {
|
|
1199
|
-
return this._markedIndex;
|
|
1200
|
-
},
|
|
1201
|
-
enumerable: true,
|
|
1202
|
-
configurable: true
|
|
1203
|
-
});
|
|
1204
|
-
Object.defineProperty(ItemsList.prototype, "selectedItems", {
|
|
1205
|
-
get: /**
|
|
1206
|
-
* @return {?}
|
|
1207
|
-
*/ function () {
|
|
1208
|
-
return this._selectionModel.value;
|
|
1209
|
-
},
|
|
1210
|
-
enumerable: true,
|
|
1211
|
-
configurable: true
|
|
1212
|
-
});
|
|
1213
|
-
Object.defineProperty(ItemsList.prototype, "markedItem", {
|
|
1214
|
-
get: /**
|
|
1215
|
-
* @return {?}
|
|
1216
|
-
*/ function () {
|
|
1217
|
-
return this._filteredItems[this._markedIndex];
|
|
1218
|
-
},
|
|
1219
|
-
enumerable: true,
|
|
1220
|
-
configurable: true
|
|
1221
|
-
});
|
|
1222
|
-
Object.defineProperty(ItemsList.prototype, "noItemsToSelect", {
|
|
1223
|
-
get: /**
|
|
1224
|
-
* @return {?}
|
|
1225
|
-
*/ function () {
|
|
1226
|
-
return this._ngSelect.hideSelected && this._items.length === this.selectedItems.length;
|
|
1227
|
-
},
|
|
1228
|
-
enumerable: true,
|
|
1229
|
-
configurable: true
|
|
1230
|
-
});
|
|
1231
|
-
Object.defineProperty(ItemsList.prototype, "maxItemsSelected", {
|
|
1232
|
-
get: /**
|
|
1233
|
-
* @return {?}
|
|
1234
|
-
*/ function () {
|
|
1235
|
-
return this._ngSelect.multiple && this._ngSelect.maxSelectedItems <= this.selectedItems.length;
|
|
1236
|
-
},
|
|
1237
|
-
enumerable: true,
|
|
1238
|
-
configurable: true
|
|
1239
|
-
});
|
|
1240
|
-
Object.defineProperty(ItemsList.prototype, "lastSelectedItem", {
|
|
1241
|
-
get: /**
|
|
1242
|
-
* @return {?}
|
|
1243
|
-
*/ function () {
|
|
1244
|
-
/** @type {?} */
|
|
1245
|
-
var i = this.selectedItems.length - 1;
|
|
1246
|
-
for (; i >= 0; i--) {
|
|
1247
|
-
/** @type {?} */
|
|
1248
|
-
var item = this.selectedItems[i];
|
|
1249
|
-
if (!item.disabled) {
|
|
1250
|
-
return item;
|
|
1251
|
-
}
|
|
1252
|
-
}
|
|
1253
|
-
return null;
|
|
1254
|
-
},
|
|
1255
|
-
enumerable: true,
|
|
1256
|
-
configurable: true
|
|
1257
|
-
});
|
|
1258
|
-
/**
|
|
1259
|
-
* @param {?} items
|
|
1260
|
-
* @return {?}
|
|
1261
|
-
*/
|
|
1262
|
-
ItemsList.prototype.setItems = /**
|
|
1263
|
-
* @param {?} items
|
|
1264
|
-
* @return {?}
|
|
1265
|
-
*/
|
|
1266
|
-
function (items) {
|
|
1267
|
-
var _this = this;
|
|
1268
|
-
this._items = items.map(function (item, index) { return _this.mapItem(item, index); });
|
|
1269
|
-
if (this._ngSelect.groupBy) {
|
|
1270
|
-
this._groups = this._groupBy(this._items, this._ngSelect.groupBy);
|
|
1271
|
-
this._items = this._flatten(this._groups);
|
|
1272
|
-
}
|
|
1273
|
-
else {
|
|
1274
|
-
this._groups = new Map();
|
|
1275
|
-
this._groups.set(undefined, this._items);
|
|
1276
|
-
}
|
|
1277
|
-
this._filteredItems = __spread(this._items);
|
|
1278
|
-
};
|
|
1279
|
-
/**
|
|
1280
|
-
* @param {?} item
|
|
1281
|
-
* @return {?}
|
|
1282
|
-
*/
|
|
1283
|
-
ItemsList.prototype.select = /**
|
|
1284
|
-
* @param {?} item
|
|
1285
|
-
* @return {?}
|
|
1286
|
-
*/
|
|
1287
|
-
function (item) {
|
|
1288
|
-
if (item.selected || this.maxItemsSelected) {
|
|
1289
|
-
return;
|
|
1290
|
-
}
|
|
1291
|
-
/** @type {?} */
|
|
1292
|
-
var multiple = this._ngSelect.multiple;
|
|
1293
|
-
if (!multiple) {
|
|
1294
|
-
this.clearSelected();
|
|
1295
|
-
}
|
|
1296
|
-
this._selectionModel.select(item, multiple, this._ngSelect.selectableGroupAsModel);
|
|
1297
|
-
if (this._ngSelect.hideSelected) {
|
|
1298
|
-
this._hideSelected(item);
|
|
1299
|
-
}
|
|
1300
|
-
};
|
|
1301
|
-
/**
|
|
1302
|
-
* @param {?} item
|
|
1303
|
-
* @return {?}
|
|
1304
|
-
*/
|
|
1305
|
-
ItemsList.prototype.unselect = /**
|
|
1306
|
-
* @param {?} item
|
|
1307
|
-
* @return {?}
|
|
1308
|
-
*/
|
|
1309
|
-
function (item) {
|
|
1310
|
-
if (!item.selected) {
|
|
1311
|
-
return;
|
|
1312
|
-
}
|
|
1313
|
-
this._selectionModel.unselect(item, this._ngSelect.multiple);
|
|
1314
|
-
if (this._ngSelect.hideSelected && isDefined(item.index) && this._ngSelect.multiple) {
|
|
1315
|
-
this._showSelected(item);
|
|
1316
|
-
}
|
|
1317
|
-
};
|
|
1318
|
-
/**
|
|
1319
|
-
* @param {?} value
|
|
1320
|
-
* @return {?}
|
|
1321
|
-
*/
|
|
1322
|
-
ItemsList.prototype.findItem = /**
|
|
1323
|
-
* @param {?} value
|
|
1324
|
-
* @return {?}
|
|
1325
|
-
*/
|
|
1326
|
-
function (value) {
|
|
1327
|
-
var _this = this;
|
|
1328
|
-
/** @type {?} */
|
|
1329
|
-
var findBy;
|
|
1330
|
-
if (this._ngSelect.compareWith) {
|
|
1331
|
-
findBy = function (item) { return _this._ngSelect.compareWith(item.value, value); };
|
|
1332
|
-
}
|
|
1333
|
-
else if (this._ngSelect.bindValue) {
|
|
1334
|
-
findBy = function (item) { return !item.children && _this.resolveNested(item.value, _this._ngSelect.bindValue) === value; };
|
|
1335
|
-
}
|
|
1336
|
-
else {
|
|
1337
|
-
findBy = function (item) {
|
|
1338
|
-
return item.value === value ||
|
|
1339
|
-
!item.children && item.label && item.label === _this.resolveNested(value, _this._ngSelect.bindLabel);
|
|
1340
|
-
};
|
|
1341
|
-
}
|
|
1342
|
-
return this._items.find(function (item) { return findBy(item); });
|
|
1343
|
-
};
|
|
1344
|
-
/**
|
|
1345
|
-
* @param {?} item
|
|
1346
|
-
* @return {?}
|
|
1347
|
-
*/
|
|
1348
|
-
ItemsList.prototype.addItem = /**
|
|
1349
|
-
* @param {?} item
|
|
1350
|
-
* @return {?}
|
|
1351
|
-
*/
|
|
1352
|
-
function (item) {
|
|
1353
|
-
/** @type {?} */
|
|
1354
|
-
var option = this.mapItem(item, this._items.length);
|
|
1355
|
-
this._items.push(option);
|
|
1356
|
-
this._filteredItems.push(option);
|
|
1357
|
-
return option;
|
|
1358
|
-
};
|
|
1359
|
-
/**
|
|
1360
|
-
* @param {?=} keepDisabled
|
|
1361
|
-
* @return {?}
|
|
1362
|
-
*/
|
|
1363
|
-
ItemsList.prototype.clearSelected = /**
|
|
1364
|
-
* @param {?=} keepDisabled
|
|
1365
|
-
* @return {?}
|
|
1366
|
-
*/
|
|
1367
|
-
function (keepDisabled) {
|
|
1368
|
-
if (keepDisabled === void 0) {
|
|
1369
|
-
keepDisabled = false;
|
|
1370
|
-
}
|
|
1371
|
-
this._selectionModel.clear(keepDisabled);
|
|
1372
|
-
this._items.forEach(function (item) {
|
|
1373
|
-
item.selected = keepDisabled && item.selected && item.disabled;
|
|
1374
|
-
item.marked = false;
|
|
1375
|
-
});
|
|
1376
|
-
if (this._ngSelect.hideSelected) {
|
|
1377
|
-
this.resetFilteredItems();
|
|
1378
|
-
}
|
|
1379
|
-
};
|
|
1380
|
-
/**
|
|
1381
|
-
* @param {?} term
|
|
1382
|
-
* @return {?}
|
|
1383
|
-
*/
|
|
1384
|
-
ItemsList.prototype.findByLabel = /**
|
|
1385
|
-
* @param {?} term
|
|
1386
|
-
* @return {?}
|
|
1387
|
-
*/
|
|
1388
|
-
function (term) {
|
|
1389
|
-
term = stripSpecialChars(term).toLocaleLowerCase();
|
|
1390
|
-
return this.filteredItems.find(function (item) {
|
|
1391
|
-
/** @type {?} */
|
|
1392
|
-
var label = stripSpecialChars(item.label).toLocaleLowerCase();
|
|
1393
|
-
return label.substr(0, term.length) === term;
|
|
1394
|
-
});
|
|
1395
|
-
};
|
|
1396
|
-
/**
|
|
1397
|
-
* @param {?} term
|
|
1398
|
-
* @return {?}
|
|
1399
|
-
*/
|
|
1400
|
-
ItemsList.prototype.filter = /**
|
|
1401
|
-
* @param {?} term
|
|
1402
|
-
* @return {?}
|
|
1403
|
-
*/
|
|
1404
|
-
function (term) {
|
|
1405
|
-
var e_1, _a;
|
|
1406
|
-
if (!term) {
|
|
1407
|
-
this.resetFilteredItems();
|
|
1408
|
-
return;
|
|
1409
|
-
}
|
|
1410
|
-
this._filteredItems = [];
|
|
1411
|
-
term = this._ngSelect.searchFn ? term : stripSpecialChars(term).toLocaleLowerCase();
|
|
1412
|
-
/** @type {?} */
|
|
1413
|
-
var match = this._ngSelect.searchFn || this._defaultSearchFn;
|
|
1414
|
-
/** @type {?} */
|
|
1415
|
-
var hideSelected = this._ngSelect.hideSelected;
|
|
1416
|
-
var _loop_1 = function (key) {
|
|
1417
|
-
var e_2, _a, _b;
|
|
1418
|
-
/** @type {?} */
|
|
1419
|
-
var matchedItems = [];
|
|
1420
|
-
try {
|
|
1421
|
-
for (var _c = __values(this_1._groups.get(key)), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
1422
|
-
var item = _d.value;
|
|
1423
|
-
if (hideSelected && (item.parent && item.parent.selected || item.selected)) {
|
|
1424
|
-
continue;
|
|
1425
|
-
}
|
|
1426
|
-
/** @type {?} */
|
|
1427
|
-
var searchItem = this_1._ngSelect.searchFn ? item.value : item;
|
|
1428
|
-
if (match(term, searchItem)) {
|
|
1429
|
-
matchedItems.push(item);
|
|
1430
|
-
}
|
|
1431
|
-
}
|
|
1432
|
-
}
|
|
1433
|
-
catch (e_2_1) {
|
|
1434
|
-
e_2 = { error: e_2_1 };
|
|
1435
|
-
}
|
|
1436
|
-
finally {
|
|
1437
|
-
try {
|
|
1438
|
-
if (_d && !_d.done && (_a = _c.return))
|
|
1439
|
-
_a.call(_c);
|
|
1440
|
-
}
|
|
1441
|
-
finally {
|
|
1442
|
-
if (e_2)
|
|
1443
|
-
throw e_2.error;
|
|
1444
|
-
}
|
|
1445
|
-
}
|
|
1446
|
-
if (matchedItems.length > 0) {
|
|
1447
|
-
var _e = __read(matchedItems.slice(-1), 1), last_1 = _e[0];
|
|
1448
|
-
if (last_1.parent) {
|
|
1449
|
-
/** @type {?} */
|
|
1450
|
-
var head = this_1._items.find(function (x) { return x === last_1.parent; });
|
|
1451
|
-
this_1._filteredItems.push(head);
|
|
1452
|
-
}
|
|
1453
|
-
(_b = this_1._filteredItems).push.apply(_b, __spread(matchedItems));
|
|
1454
|
-
}
|
|
1455
|
-
};
|
|
1456
|
-
var this_1 = this;
|
|
1457
|
-
try {
|
|
1458
|
-
for (var _b = __values(Array.from(this._groups.keys())), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
1459
|
-
var key = _c.value;
|
|
1460
|
-
_loop_1(key);
|
|
1461
|
-
}
|
|
1462
|
-
}
|
|
1463
|
-
catch (e_1_1) {
|
|
1464
|
-
e_1 = { error: e_1_1 };
|
|
1465
|
-
}
|
|
1466
|
-
finally {
|
|
1467
|
-
try {
|
|
1468
|
-
if (_c && !_c.done && (_a = _b.return))
|
|
1469
|
-
_a.call(_b);
|
|
1470
|
-
}
|
|
1471
|
-
finally {
|
|
1472
|
-
if (e_1)
|
|
1473
|
-
throw e_1.error;
|
|
1474
|
-
}
|
|
1475
|
-
}
|
|
1476
|
-
};
|
|
1477
|
-
/**
|
|
1478
|
-
* @return {?}
|
|
1479
|
-
*/
|
|
1480
|
-
ItemsList.prototype.resetFilteredItems = /**
|
|
1481
|
-
* @return {?}
|
|
1482
|
-
*/
|
|
1483
|
-
function () {
|
|
1484
|
-
if (this._filteredItems.length === this._items.length) {
|
|
1485
|
-
return;
|
|
1486
|
-
}
|
|
1487
|
-
if (this._ngSelect.hideSelected && this.selectedItems.length > 0) {
|
|
1488
|
-
this._filteredItems = this._items.filter(function (x) { return !x.selected; });
|
|
1489
|
-
}
|
|
1490
|
-
else {
|
|
1491
|
-
this._filteredItems = this._items;
|
|
1492
|
-
}
|
|
1493
|
-
};
|
|
1494
|
-
/**
|
|
1495
|
-
* @return {?}
|
|
1496
|
-
*/
|
|
1497
|
-
ItemsList.prototype.unmarkItem = /**
|
|
1498
|
-
* @return {?}
|
|
1499
|
-
*/
|
|
1500
|
-
function () {
|
|
1501
|
-
this._markedIndex = -1;
|
|
1502
|
-
};
|
|
1503
|
-
/**
|
|
1504
|
-
* @return {?}
|
|
1505
|
-
*/
|
|
1506
|
-
ItemsList.prototype.markNextItem = /**
|
|
1507
|
-
* @return {?}
|
|
1508
|
-
*/
|
|
1509
|
-
function () {
|
|
1510
|
-
this._stepToItem(+1);
|
|
1511
|
-
};
|
|
1512
|
-
/**
|
|
1513
|
-
* @return {?}
|
|
1514
|
-
*/
|
|
1515
|
-
ItemsList.prototype.markPreviousItem = /**
|
|
1516
|
-
* @return {?}
|
|
1517
|
-
*/
|
|
1518
|
-
function () {
|
|
1519
|
-
this._stepToItem(-1);
|
|
1520
|
-
};
|
|
1521
|
-
/**
|
|
1522
|
-
* @param {?} item
|
|
1523
|
-
* @return {?}
|
|
1524
|
-
*/
|
|
1525
|
-
ItemsList.prototype.markItem = /**
|
|
1526
|
-
* @param {?} item
|
|
1527
|
-
* @return {?}
|
|
1528
|
-
*/
|
|
1529
|
-
function (item) {
|
|
1530
|
-
this._markedIndex = this._filteredItems.indexOf(item);
|
|
1531
|
-
};
|
|
1532
|
-
/**
|
|
1533
|
-
* @param {?=} markDefault
|
|
1534
|
-
* @return {?}
|
|
1535
|
-
*/
|
|
1536
|
-
ItemsList.prototype.markSelectedOrDefault = /**
|
|
1537
|
-
* @param {?=} markDefault
|
|
1538
|
-
* @return {?}
|
|
1539
|
-
*/
|
|
1540
|
-
function (markDefault) {
|
|
1541
|
-
if (this._filteredItems.length === 0) {
|
|
1542
|
-
return;
|
|
1543
|
-
}
|
|
1544
|
-
/** @type {?} */
|
|
1545
|
-
var lastMarkedIndex = this._getLastMarkedIndex();
|
|
1546
|
-
if (lastMarkedIndex > -1) {
|
|
1547
|
-
this._markedIndex = lastMarkedIndex;
|
|
1548
|
-
}
|
|
1549
|
-
else {
|
|
1550
|
-
if (this._ngSelect.excludeGroupsFromDefaultSelection) {
|
|
1551
|
-
this._markedIndex = markDefault ? this.filteredItems.findIndex(function (x) { return !x.disabled && !x.children; }) : -1;
|
|
1552
|
-
}
|
|
1553
|
-
else {
|
|
1554
|
-
this._markedIndex = markDefault ? this.filteredItems.findIndex(function (x) { return !x.disabled; }) : -1;
|
|
1555
|
-
}
|
|
1556
|
-
}
|
|
1557
|
-
};
|
|
1558
|
-
/**
|
|
1559
|
-
* @param {?} option
|
|
1560
|
-
* @param {?} key
|
|
1561
|
-
* @return {?}
|
|
1562
|
-
*/
|
|
1563
|
-
ItemsList.prototype.resolveNested = /**
|
|
1564
|
-
* @param {?} option
|
|
1565
|
-
* @param {?} key
|
|
1566
|
-
* @return {?}
|
|
1567
|
-
*/
|
|
1568
|
-
function (option, key) {
|
|
1569
|
-
if (!isObject(option)) {
|
|
1570
|
-
return option;
|
|
1571
|
-
}
|
|
1572
|
-
if (key.indexOf('.') === -1) {
|
|
1573
|
-
return option[key];
|
|
1574
|
-
}
|
|
1575
|
-
else {
|
|
1576
|
-
/** @type {?} */
|
|
1577
|
-
var keys = key.split('.');
|
|
1578
|
-
/** @type {?} */
|
|
1579
|
-
var value = option;
|
|
1580
|
-
for (var i = 0, len = keys.length; i < len; ++i) {
|
|
1581
|
-
if (value == null) {
|
|
1582
|
-
return null;
|
|
1583
|
-
}
|
|
1584
|
-
value = value[keys[i]];
|
|
1585
|
-
}
|
|
1586
|
-
return value;
|
|
1587
|
-
}
|
|
1588
|
-
};
|
|
1589
|
-
/**
|
|
1590
|
-
* @param {?} item
|
|
1591
|
-
* @param {?} index
|
|
1592
|
-
* @return {?}
|
|
1593
|
-
*/
|
|
1594
|
-
ItemsList.prototype.mapItem = /**
|
|
1595
|
-
* @param {?} item
|
|
1596
|
-
* @param {?} index
|
|
1597
|
-
* @return {?}
|
|
1598
|
-
*/
|
|
1599
|
-
function (item, index) {
|
|
1600
|
-
/** @type {?} */
|
|
1601
|
-
var label = isDefined(item.$ngOptionLabel) ? item.$ngOptionLabel : this.resolveNested(item, this._ngSelect.bindLabel);
|
|
1602
|
-
/** @type {?} */
|
|
1603
|
-
var value = isDefined(item.$ngOptionValue) ? item.$ngOptionValue : item;
|
|
1604
|
-
return {
|
|
1605
|
-
index: index,
|
|
1606
|
-
label: isDefined(label) ? label.toString() : '',
|
|
1607
|
-
value: value,
|
|
1608
|
-
disabled: item.disabled,
|
|
1609
|
-
htmlId: newId(),
|
|
1610
|
-
};
|
|
1611
|
-
};
|
|
1612
|
-
/**
|
|
1613
|
-
* @return {?}
|
|
1614
|
-
*/
|
|
1615
|
-
ItemsList.prototype.mapSelectedItems = /**
|
|
1616
|
-
* @return {?}
|
|
1617
|
-
*/
|
|
1618
|
-
function () {
|
|
1619
|
-
var _this = this;
|
|
1620
|
-
var e_3, _a;
|
|
1621
|
-
/** @type {?} */
|
|
1622
|
-
var multiple = this._ngSelect.multiple;
|
|
1623
|
-
try {
|
|
1624
|
-
for (var _b = __values(this.selectedItems), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
1625
|
-
var selected = _c.value;
|
|
1626
|
-
/** @type {?} */
|
|
1627
|
-
var value = this._ngSelect.bindValue ? this.resolveNested(selected.value, this._ngSelect.bindValue) : selected.value;
|
|
1628
|
-
/** @type {?} */
|
|
1629
|
-
var item = isDefined(value) ? this.findItem(value) : null;
|
|
1630
|
-
this._selectionModel.unselect(selected, multiple);
|
|
1631
|
-
this._selectionModel.select(item || selected, multiple, this._ngSelect.selectableGroupAsModel);
|
|
1632
|
-
}
|
|
1633
|
-
}
|
|
1634
|
-
catch (e_3_1) {
|
|
1635
|
-
e_3 = { error: e_3_1 };
|
|
1636
|
-
}
|
|
1637
|
-
finally {
|
|
1638
|
-
try {
|
|
1639
|
-
if (_c && !_c.done && (_a = _b.return))
|
|
1640
|
-
_a.call(_b);
|
|
1641
|
-
}
|
|
1642
|
-
finally {
|
|
1643
|
-
if (e_3)
|
|
1644
|
-
throw e_3.error;
|
|
1645
|
-
}
|
|
1646
|
-
}
|
|
1647
|
-
if (this._ngSelect.hideSelected) {
|
|
1648
|
-
this._filteredItems = this.filteredItems.filter(function (x) { return _this.selectedItems.indexOf(x) === -1; });
|
|
1649
|
-
}
|
|
1650
|
-
};
|
|
1651
|
-
/**
|
|
1652
|
-
* @param {?} item
|
|
1653
|
-
* @return {?}
|
|
1654
|
-
*/
|
|
1655
|
-
ItemsList.prototype._showSelected = /**
|
|
1656
|
-
* @param {?} item
|
|
1657
|
-
* @return {?}
|
|
1658
|
-
*/
|
|
1659
|
-
function (item) {
|
|
1660
|
-
var e_4, _a;
|
|
1661
|
-
this._filteredItems.push(item);
|
|
1662
|
-
if (item.parent) {
|
|
1663
|
-
/** @type {?} */
|
|
1664
|
-
var parent_1 = item.parent;
|
|
1665
|
-
/** @type {?} */
|
|
1666
|
-
var parentExists = this._filteredItems.find(function (x) { return x === parent_1; });
|
|
1667
|
-
if (!parentExists) {
|
|
1668
|
-
this._filteredItems.push(parent_1);
|
|
1669
|
-
}
|
|
1670
|
-
}
|
|
1671
|
-
else if (item.children) {
|
|
1672
|
-
try {
|
|
1673
|
-
for (var _b = __values(item.children), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
1674
|
-
var child = _c.value;
|
|
1675
|
-
child.selected = false;
|
|
1676
|
-
this._filteredItems.push(child);
|
|
1677
|
-
}
|
|
1678
|
-
}
|
|
1679
|
-
catch (e_4_1) {
|
|
1680
|
-
e_4 = { error: e_4_1 };
|
|
1681
|
-
}
|
|
1682
|
-
finally {
|
|
1683
|
-
try {
|
|
1684
|
-
if (_c && !_c.done && (_a = _b.return))
|
|
1685
|
-
_a.call(_b);
|
|
1686
|
-
}
|
|
1687
|
-
finally {
|
|
1688
|
-
if (e_4)
|
|
1689
|
-
throw e_4.error;
|
|
1690
|
-
}
|
|
1691
|
-
}
|
|
1692
|
-
}
|
|
1693
|
-
this._filteredItems = __spread(this._filteredItems.sort(function (a, b) { return (a.index - b.index); }));
|
|
1694
|
-
};
|
|
1695
|
-
/**
|
|
1696
|
-
* @param {?} item
|
|
1697
|
-
* @return {?}
|
|
1698
|
-
*/
|
|
1699
|
-
ItemsList.prototype._hideSelected = /**
|
|
1700
|
-
* @param {?} item
|
|
1701
|
-
* @return {?}
|
|
1702
|
-
*/
|
|
1703
|
-
function (item) {
|
|
1704
|
-
this._filteredItems = this._filteredItems.filter(function (x) { return x !== item; });
|
|
1705
|
-
if (item.parent) {
|
|
1706
|
-
/** @type {?} */
|
|
1707
|
-
var children = item.parent.children;
|
|
1708
|
-
if (children.every(function (x) { return x.selected; })) {
|
|
1709
|
-
this._filteredItems = this._filteredItems.filter(function (x) { return x !== item.parent; });
|
|
1710
|
-
}
|
|
1711
|
-
}
|
|
1712
|
-
else if (item.children) {
|
|
1713
|
-
this._filteredItems = this.filteredItems.filter(function (x) { return x.parent !== item; });
|
|
1714
|
-
}
|
|
1715
|
-
};
|
|
1716
|
-
/**
|
|
1717
|
-
* @param {?} search
|
|
1718
|
-
* @param {?} opt
|
|
1719
|
-
* @return {?}
|
|
1720
|
-
*/
|
|
1721
|
-
ItemsList.prototype._defaultSearchFn = /**
|
|
1722
|
-
* @param {?} search
|
|
1723
|
-
* @param {?} opt
|
|
1724
|
-
* @return {?}
|
|
1725
|
-
*/
|
|
1726
|
-
function (search, opt) {
|
|
1727
|
-
/** @type {?} */
|
|
1728
|
-
var label = stripSpecialChars(opt.label).toLocaleLowerCase();
|
|
1729
|
-
return label.indexOf(search) > -1;
|
|
1730
|
-
};
|
|
1731
|
-
/**
|
|
1732
|
-
* @param {?} steps
|
|
1733
|
-
* @return {?}
|
|
1734
|
-
*/
|
|
1735
|
-
ItemsList.prototype._getNextItemIndex = /**
|
|
1736
|
-
* @param {?} steps
|
|
1737
|
-
* @return {?}
|
|
1738
|
-
*/
|
|
1739
|
-
function (steps) {
|
|
1740
|
-
if (steps > 0) {
|
|
1741
|
-
return (this._markedIndex === this._filteredItems.length - 1) ? 0 : (this._markedIndex + 1);
|
|
1742
|
-
}
|
|
1743
|
-
return (this._markedIndex <= 0) ? (this._filteredItems.length - 1) : (this._markedIndex - 1);
|
|
1744
|
-
};
|
|
1745
|
-
/**
|
|
1746
|
-
* @param {?} steps
|
|
1747
|
-
* @return {?}
|
|
1748
|
-
*/
|
|
1749
|
-
ItemsList.prototype._stepToItem = /**
|
|
1750
|
-
* @param {?} steps
|
|
1751
|
-
* @return {?}
|
|
1752
|
-
*/
|
|
1753
|
-
function (steps) {
|
|
1754
|
-
if (this._filteredItems.length === 0 || this._filteredItems.every(function (x) { return x.disabled; })) {
|
|
1755
|
-
return;
|
|
1756
|
-
}
|
|
1757
|
-
this._markedIndex = this._getNextItemIndex(steps);
|
|
1758
|
-
if (this.markedItem.disabled) {
|
|
1759
|
-
this._stepToItem(steps);
|
|
1760
|
-
}
|
|
1761
|
-
};
|
|
1762
|
-
/**
|
|
1763
|
-
* @return {?}
|
|
1764
|
-
*/
|
|
1765
|
-
ItemsList.prototype._getLastMarkedIndex = /**
|
|
1766
|
-
* @return {?}
|
|
1767
|
-
*/
|
|
1768
|
-
function () {
|
|
1769
|
-
if (this._ngSelect.hideSelected) {
|
|
1770
|
-
return -1;
|
|
1771
|
-
}
|
|
1772
|
-
/** @type {?} */
|
|
1773
|
-
var selectedIndex = this._filteredItems.indexOf(this.lastSelectedItem);
|
|
1774
|
-
if (this.lastSelectedItem && selectedIndex < 0) {
|
|
1775
|
-
return -1;
|
|
1776
|
-
}
|
|
1777
|
-
return Math.max(this.markedIndex, selectedIndex);
|
|
1778
|
-
};
|
|
1779
|
-
/**
|
|
1780
|
-
* @param {?} items
|
|
1781
|
-
* @param {?} prop
|
|
1782
|
-
* @return {?}
|
|
1783
|
-
*/
|
|
1784
|
-
ItemsList.prototype._groupBy = /**
|
|
1785
|
-
* @param {?} items
|
|
1786
|
-
* @param {?} prop
|
|
1787
|
-
* @return {?}
|
|
1788
|
-
*/
|
|
1789
|
-
function (items, prop) {
|
|
1790
|
-
var _this = this;
|
|
1791
|
-
var e_5, _a, e_6, _b;
|
|
1792
|
-
/** @type {?} */
|
|
1793
|
-
var groups = new Map();
|
|
1794
|
-
if (items.length === 0) {
|
|
1795
|
-
return groups;
|
|
1796
|
-
}
|
|
1797
|
-
// Check if items are already grouped by given key.
|
|
1798
|
-
if (Array.isArray(items[0].value[ /** @type {?} */(prop)])) {
|
|
1799
|
-
try {
|
|
1800
|
-
for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {
|
|
1801
|
-
var item = items_1_1.value;
|
|
1802
|
-
/** @type {?} */
|
|
1803
|
-
var children = (item.value[ /** @type {?} */(prop)] || []).map(function (x, index) { return _this.mapItem(x, index); });
|
|
1804
|
-
groups.set(item, children);
|
|
1805
|
-
}
|
|
1806
|
-
}
|
|
1807
|
-
catch (e_5_1) {
|
|
1808
|
-
e_5 = { error: e_5_1 };
|
|
1809
|
-
}
|
|
1810
|
-
finally {
|
|
1811
|
-
try {
|
|
1812
|
-
if (items_1_1 && !items_1_1.done && (_a = items_1.return))
|
|
1813
|
-
_a.call(items_1);
|
|
1814
|
-
}
|
|
1815
|
-
finally {
|
|
1816
|
-
if (e_5)
|
|
1817
|
-
throw e_5.error;
|
|
1818
|
-
}
|
|
1819
|
-
}
|
|
1820
|
-
return groups;
|
|
1821
|
-
}
|
|
1822
|
-
/** @type {?} */
|
|
1823
|
-
var isFnKey = isFunction(this._ngSelect.groupBy);
|
|
1824
|
-
/** @type {?} */
|
|
1825
|
-
var keyFn = function (item) {
|
|
1826
|
-
/** @type {?} */
|
|
1827
|
-
var key = isFnKey ? ( /** @type {?} */(prop))(item.value) : item.value[ /** @type {?} */(prop)];
|
|
1828
|
-
return isDefined(key) ? key : undefined;
|
|
1829
|
-
};
|
|
1830
|
-
try {
|
|
1831
|
-
// Group items by key.
|
|
1832
|
-
for (var items_2 = __values(items), items_2_1 = items_2.next(); !items_2_1.done; items_2_1 = items_2.next()) {
|
|
1833
|
-
var item = items_2_1.value;
|
|
1834
|
-
/** @type {?} */
|
|
1835
|
-
var key = keyFn(item);
|
|
1836
|
-
/** @type {?} */
|
|
1837
|
-
var group = groups.get(key);
|
|
1838
|
-
if (group) {
|
|
1839
|
-
group.push(item);
|
|
1840
|
-
}
|
|
1841
|
-
else {
|
|
1842
|
-
groups.set(key, [item]);
|
|
1843
|
-
}
|
|
1844
|
-
}
|
|
1845
|
-
}
|
|
1846
|
-
catch (e_6_1) {
|
|
1847
|
-
e_6 = { error: e_6_1 };
|
|
1848
|
-
}
|
|
1849
|
-
finally {
|
|
1850
|
-
try {
|
|
1851
|
-
if (items_2_1 && !items_2_1.done && (_b = items_2.return))
|
|
1852
|
-
_b.call(items_2);
|
|
1853
|
-
}
|
|
1854
|
-
finally {
|
|
1855
|
-
if (e_6)
|
|
1856
|
-
throw e_6.error;
|
|
1857
|
-
}
|
|
1858
|
-
}
|
|
1859
|
-
return groups;
|
|
1860
|
-
};
|
|
1861
|
-
/**
|
|
1862
|
-
* @param {?} groups
|
|
1863
|
-
* @return {?}
|
|
1864
|
-
*/
|
|
1865
|
-
ItemsList.prototype._flatten = /**
|
|
1866
|
-
* @param {?} groups
|
|
1867
|
-
* @return {?}
|
|
1868
|
-
*/
|
|
1869
|
-
function (groups) {
|
|
1870
|
-
var e_7, _a;
|
|
1871
|
-
/** @type {?} */
|
|
1872
|
-
var isGroupByFn = isFunction(this._ngSelect.groupBy);
|
|
1873
|
-
/** @type {?} */
|
|
1874
|
-
var items = [];
|
|
1875
|
-
/** @type {?} */
|
|
1876
|
-
var withoutGroup = groups.get(undefined) || [];
|
|
1877
|
-
items.push.apply(items, __spread(withoutGroup));
|
|
1878
|
-
/** @type {?} */
|
|
1879
|
-
var i = withoutGroup.length;
|
|
1880
|
-
var _loop_2 = function (key) {
|
|
1881
|
-
if (!isDefined(key)) {
|
|
1882
|
-
return "continue";
|
|
1883
|
-
}
|
|
1884
|
-
/** @type {?} */
|
|
1885
|
-
var isObjectKey = isObject(key);
|
|
1886
|
-
/** @type {?} */
|
|
1887
|
-
var parent_2 = {
|
|
1888
|
-
label: isObjectKey ? '' : /** @type {?} */ (key),
|
|
1889
|
-
children: undefined,
|
|
1890
|
-
parent: null,
|
|
1891
|
-
index: i++,
|
|
1892
|
-
disabled: !this_2._ngSelect.selectableGroup,
|
|
1893
|
-
htmlId: newId(),
|
|
1894
|
-
};
|
|
1895
|
-
/** @type {?} */
|
|
1896
|
-
var groupKey = isGroupByFn ? this_2._ngSelect.bindLabel : /** @type {?} */ (this_2._ngSelect.groupBy);
|
|
1897
|
-
/** @type {?} */
|
|
1898
|
-
var groupValue = this_2._ngSelect.groupValue || (function () {
|
|
1899
|
-
var _a;
|
|
1900
|
-
if (isObjectKey) {
|
|
1901
|
-
return ( /** @type {?} */(key)).value;
|
|
1902
|
-
}
|
|
1903
|
-
return _a = {}, _a[groupKey] = key, _a;
|
|
1904
|
-
});
|
|
1905
|
-
/** @type {?} */
|
|
1906
|
-
var children = groups.get(key).map(function (x) {
|
|
1907
|
-
x.parent = parent_2;
|
|
1908
|
-
x.children = undefined;
|
|
1909
|
-
x.index = i++;
|
|
1910
|
-
return x;
|
|
1911
|
-
});
|
|
1912
|
-
parent_2.children = children;
|
|
1913
|
-
parent_2.value = groupValue(key, children.map(function (x) { return x.value; }));
|
|
1914
|
-
items.push(parent_2);
|
|
1915
|
-
items.push.apply(items, __spread(children));
|
|
1916
|
-
};
|
|
1917
|
-
var this_2 = this;
|
|
1918
|
-
try {
|
|
1919
|
-
for (var _b = __values(Array.from(groups.keys())), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
1920
|
-
var key = _c.value;
|
|
1921
|
-
_loop_2(key);
|
|
1922
|
-
}
|
|
1923
|
-
}
|
|
1924
|
-
catch (e_7_1) {
|
|
1925
|
-
e_7 = { error: e_7_1 };
|
|
1926
|
-
}
|
|
1927
|
-
finally {
|
|
1928
|
-
try {
|
|
1929
|
-
if (_c && !_c.done && (_a = _b.return))
|
|
1930
|
-
_a.call(_b);
|
|
1931
|
-
}
|
|
1932
|
-
finally {
|
|
1933
|
-
if (e_7)
|
|
1934
|
-
throw e_7.error;
|
|
1935
|
-
}
|
|
1936
|
-
}
|
|
1937
|
-
return items;
|
|
1938
|
-
};
|
|
1939
|
-
return ItemsList;
|
|
1940
|
-
}());
|
|
1941
|
-
|
|
1942
|
-
/**
|
|
1943
|
-
* @fileoverview added by tsickle
|
|
1944
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
1945
|
-
*/
|
|
1946
|
-
/** @enum {number} */
|
|
1947
|
-
var KeyCode = {
|
|
1948
|
-
Tab: 9,
|
|
1949
|
-
Enter: 13,
|
|
1950
|
-
Esc: 27,
|
|
1951
|
-
Space: 32,
|
|
1952
|
-
ArrowUp: 38,
|
|
1953
|
-
ArrowDown: 40,
|
|
1954
|
-
Backspace: 8,
|
|
1955
|
-
};
|
|
1956
|
-
KeyCode[KeyCode.Tab] = 'Tab';
|
|
1957
|
-
KeyCode[KeyCode.Enter] = 'Enter';
|
|
1958
|
-
KeyCode[KeyCode.Esc] = 'Esc';
|
|
1959
|
-
KeyCode[KeyCode.Space] = 'Space';
|
|
1960
|
-
KeyCode[KeyCode.ArrowUp] = 'ArrowUp';
|
|
1961
|
-
KeyCode[KeyCode.ArrowDown] = 'ArrowDown';
|
|
1962
|
-
KeyCode[KeyCode.Backspace] = 'Backspace';
|
|
1963
|
-
|
|
1964
|
-
/**
|
|
1965
|
-
* @fileoverview added by tsickle
|
|
1966
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
1967
|
-
*/
|
|
1968
|
-
var NgDropdownPanelService = /** @class */ (function () {
|
|
1969
|
-
function NgDropdownPanelService() {
|
|
1970
|
-
this._dimensions = {
|
|
1971
|
-
itemHeight: 0,
|
|
1972
|
-
panelHeight: 0,
|
|
1973
|
-
itemsPerViewport: 0
|
|
1974
|
-
};
|
|
1975
|
-
}
|
|
1976
|
-
Object.defineProperty(NgDropdownPanelService.prototype, "dimensions", {
|
|
1977
|
-
get: /**
|
|
1978
|
-
* @return {?}
|
|
1979
|
-
*/ function () {
|
|
1980
|
-
return this._dimensions;
|
|
1981
|
-
},
|
|
1982
|
-
enumerable: true,
|
|
1983
|
-
configurable: true
|
|
1984
|
-
});
|
|
1985
|
-
/**
|
|
1986
|
-
* @param {?} scrollPos
|
|
1987
|
-
* @param {?} itemsLength
|
|
1988
|
-
* @param {?} buffer
|
|
1989
|
-
* @return {?}
|
|
1990
|
-
*/
|
|
1991
|
-
NgDropdownPanelService.prototype.calculateItems = /**
|
|
1992
|
-
* @param {?} scrollPos
|
|
1993
|
-
* @param {?} itemsLength
|
|
1994
|
-
* @param {?} buffer
|
|
1995
|
-
* @return {?}
|
|
1996
|
-
*/
|
|
1997
|
-
function (scrollPos, itemsLength, buffer) {
|
|
1998
|
-
/** @type {?} */
|
|
1999
|
-
var d = this._dimensions;
|
|
2000
|
-
/** @type {?} */
|
|
2001
|
-
var scrollHeight = d.itemHeight * itemsLength;
|
|
2002
|
-
/** @type {?} */
|
|
2003
|
-
var scrollTop = Math.max(0, scrollPos);
|
|
2004
|
-
/** @type {?} */
|
|
2005
|
-
var indexByScrollTop = scrollTop / scrollHeight * itemsLength;
|
|
2006
|
-
/** @type {?} */
|
|
2007
|
-
var end = Math.min(itemsLength, Math.ceil(indexByScrollTop) + (d.itemsPerViewport + 1));
|
|
2008
|
-
/** @type {?} */
|
|
2009
|
-
var maxStartEnd = end;
|
|
2010
|
-
/** @type {?} */
|
|
2011
|
-
var maxStart = Math.max(0, maxStartEnd - d.itemsPerViewport);
|
|
2012
|
-
/** @type {?} */
|
|
2013
|
-
var start = Math.min(maxStart, Math.floor(indexByScrollTop));
|
|
2014
|
-
/** @type {?} */
|
|
2015
|
-
var topPadding = d.itemHeight * Math.ceil(start) - (d.itemHeight * Math.min(start, buffer));
|
|
2016
|
-
topPadding = !isNaN(topPadding) ? topPadding : 0;
|
|
2017
|
-
start = !isNaN(start) ? start : -1;
|
|
2018
|
-
end = !isNaN(end) ? end : -1;
|
|
2019
|
-
start -= buffer;
|
|
2020
|
-
start = Math.max(0, start);
|
|
2021
|
-
end += buffer;
|
|
2022
|
-
end = Math.min(itemsLength, end);
|
|
2023
|
-
return {
|
|
2024
|
-
topPadding: topPadding,
|
|
2025
|
-
scrollHeight: scrollHeight,
|
|
2026
|
-
start: start,
|
|
2027
|
-
end: end
|
|
2028
|
-
};
|
|
2029
|
-
};
|
|
2030
|
-
/**
|
|
2031
|
-
* @param {?} itemHeight
|
|
2032
|
-
* @param {?} panelHeight
|
|
2033
|
-
* @return {?}
|
|
2034
|
-
*/
|
|
2035
|
-
NgDropdownPanelService.prototype.setDimensions = /**
|
|
2036
|
-
* @param {?} itemHeight
|
|
2037
|
-
* @param {?} panelHeight
|
|
2038
|
-
* @return {?}
|
|
2039
|
-
*/
|
|
2040
|
-
function (itemHeight, panelHeight) {
|
|
2041
|
-
/** @type {?} */
|
|
2042
|
-
var itemsPerViewport = Math.max(1, Math.floor(panelHeight / itemHeight));
|
|
2043
|
-
this._dimensions = {
|
|
2044
|
-
itemHeight: itemHeight,
|
|
2045
|
-
panelHeight: panelHeight,
|
|
2046
|
-
itemsPerViewport: itemsPerViewport
|
|
2047
|
-
};
|
|
2048
|
-
};
|
|
2049
|
-
/**
|
|
2050
|
-
* @param {?} itemTop
|
|
2051
|
-
* @param {?} itemHeight
|
|
2052
|
-
* @param {?} lastScroll
|
|
2053
|
-
* @return {?}
|
|
2054
|
-
*/
|
|
2055
|
-
NgDropdownPanelService.prototype.getScrollTo = /**
|
|
2056
|
-
* @param {?} itemTop
|
|
2057
|
-
* @param {?} itemHeight
|
|
2058
|
-
* @param {?} lastScroll
|
|
2059
|
-
* @return {?}
|
|
2060
|
-
*/
|
|
2061
|
-
function (itemTop, itemHeight, lastScroll) {
|
|
2062
|
-
/** @type {?} */
|
|
2063
|
-
var itemBottom = itemTop + itemHeight;
|
|
2064
|
-
/** @type {?} */
|
|
2065
|
-
var top = lastScroll;
|
|
2066
|
-
/** @type {?} */
|
|
2067
|
-
var bottom = top + this.dimensions.panelHeight;
|
|
2068
|
-
if (itemBottom > bottom) {
|
|
2069
|
-
return top + itemBottom - bottom;
|
|
2070
|
-
}
|
|
2071
|
-
else if (itemTop <= top) {
|
|
2072
|
-
return itemTop;
|
|
2073
|
-
}
|
|
2074
|
-
return null;
|
|
2075
|
-
};
|
|
2076
|
-
return NgDropdownPanelService;
|
|
2077
|
-
}());
|
|
2078
|
-
|
|
2079
|
-
/**
|
|
2080
|
-
* @fileoverview added by tsickle
|
|
2081
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
2082
|
-
*/
|
|
2083
|
-
/** @type {?} */
|
|
2084
|
-
var TOP_CSS_CLASS = 'ng-select-top';
|
|
2085
|
-
/** @type {?} */
|
|
2086
|
-
var BOTTOM_CSS_CLASS = 'ng-select-bottom';
|
|
2087
|
-
/** @type {?} */
|
|
2088
|
-
var SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? rxjs.animationFrameScheduler : rxjs.asapScheduler;
|
|
2089
|
-
var NgDropdownPanelComponent = /** @class */ (function () {
|
|
2090
|
-
function NgDropdownPanelComponent(_renderer, _zone, _panelService, _elementRef, _document) {
|
|
2091
|
-
this._renderer = _renderer;
|
|
2092
|
-
this._zone = _zone;
|
|
2093
|
-
this._panelService = _panelService;
|
|
2094
|
-
this._document = _document;
|
|
2095
|
-
this.items = [];
|
|
2096
|
-
this.position = 'auto';
|
|
2097
|
-
this.virtualScroll = false;
|
|
2098
|
-
this.filterValue = null;
|
|
2099
|
-
this.update = new i0.EventEmitter();
|
|
2100
|
-
this.scroll = new i0.EventEmitter();
|
|
2101
|
-
this.scrollToEnd = new i0.EventEmitter();
|
|
2102
|
-
this.outsideClick = new i0.EventEmitter();
|
|
2103
|
-
this._destroy$ = new rxjs.Subject();
|
|
2104
|
-
this._scrollToEndFired = false;
|
|
2105
|
-
this._updateScrollHeight = false;
|
|
2106
|
-
this._lastScrollPosition = 0;
|
|
2107
|
-
this._dropdown = _elementRef.nativeElement;
|
|
2108
|
-
}
|
|
2109
|
-
Object.defineProperty(NgDropdownPanelComponent.prototype, "currentPosition", {
|
|
2110
|
-
get: /**
|
|
2111
|
-
* @return {?}
|
|
2112
|
-
*/ function () {
|
|
2113
|
-
return this._currentPosition;
|
|
2114
|
-
},
|
|
2115
|
-
enumerable: true,
|
|
2116
|
-
configurable: true
|
|
2117
|
-
});
|
|
2118
|
-
Object.defineProperty(NgDropdownPanelComponent.prototype, "itemsLength", {
|
|
2119
|
-
get: /**
|
|
2120
|
-
* @return {?}
|
|
2121
|
-
*/ function () {
|
|
2122
|
-
return this._itemsLength;
|
|
2123
|
-
},
|
|
2124
|
-
set: /**
|
|
2125
|
-
* @param {?} value
|
|
2126
|
-
* @return {?}
|
|
2127
|
-
*/ function (value) {
|
|
2128
|
-
if (value !== this._itemsLength) {
|
|
2129
|
-
this._itemsLength = value;
|
|
2130
|
-
this._onItemsLengthChanged();
|
|
2131
|
-
}
|
|
2132
|
-
},
|
|
2133
|
-
enumerable: true,
|
|
2134
|
-
configurable: true
|
|
2135
|
-
});
|
|
2136
|
-
/**
|
|
2137
|
-
* @param {?} $event
|
|
2138
|
-
* @return {?}
|
|
2139
|
-
*/
|
|
2140
|
-
NgDropdownPanelComponent.prototype.handleMousedown = /**
|
|
2141
|
-
* @param {?} $event
|
|
2142
|
-
* @return {?}
|
|
2143
|
-
*/
|
|
2144
|
-
function ($event) {
|
|
2145
|
-
/** @type {?} */
|
|
2146
|
-
var target = /** @type {?} */ ($event.target);
|
|
2147
|
-
if (target.tagName === 'INPUT') {
|
|
2148
|
-
return;
|
|
2149
|
-
}
|
|
2150
|
-
$event.preventDefault();
|
|
2151
|
-
};
|
|
2152
|
-
/**
|
|
2153
|
-
* @return {?}
|
|
2154
|
-
*/
|
|
2155
|
-
NgDropdownPanelComponent.prototype.ngOnInit = /**
|
|
2156
|
-
* @return {?}
|
|
2157
|
-
*/
|
|
2158
|
-
function () {
|
|
2159
|
-
this._select = this._dropdown.parentElement;
|
|
2160
|
-
this._virtualPadding = this.paddingElementRef.nativeElement;
|
|
2161
|
-
this._scrollablePanel = this.scrollElementRef.nativeElement;
|
|
2162
|
-
this._contentPanel = this.contentElementRef.nativeElement;
|
|
2163
|
-
this._handleScroll();
|
|
2164
|
-
this._handleOutsideClick();
|
|
2165
|
-
this._appendDropdown();
|
|
2166
|
-
};
|
|
2167
|
-
/**
|
|
2168
|
-
* @param {?} changes
|
|
2169
|
-
* @return {?}
|
|
2170
|
-
*/
|
|
2171
|
-
NgDropdownPanelComponent.prototype.ngOnChanges = /**
|
|
2172
|
-
* @param {?} changes
|
|
2173
|
-
* @return {?}
|
|
2174
|
-
*/
|
|
2175
|
-
function (changes) {
|
|
2176
|
-
if (changes["items"]) {
|
|
2177
|
-
/** @type {?} */
|
|
2178
|
-
var change = changes["items"];
|
|
2179
|
-
this._onItemsChange(change.currentValue, change.firstChange);
|
|
2180
|
-
}
|
|
2181
|
-
};
|
|
2182
|
-
/**
|
|
2183
|
-
* @return {?}
|
|
2184
|
-
*/
|
|
2185
|
-
NgDropdownPanelComponent.prototype.ngOnDestroy = /**
|
|
2186
|
-
* @return {?}
|
|
2187
|
-
*/
|
|
2188
|
-
function () {
|
|
2189
|
-
this._destroy$.next();
|
|
2190
|
-
this._destroy$.complete();
|
|
2191
|
-
this._destroy$.unsubscribe();
|
|
2192
|
-
if (this.appendTo) {
|
|
2193
|
-
this._renderer.removeChild(this._dropdown.parentNode, this._dropdown);
|
|
2194
|
-
}
|
|
2195
|
-
};
|
|
2196
|
-
/**
|
|
2197
|
-
* @param {?} option
|
|
2198
|
-
* @param {?=} startFromOption
|
|
2199
|
-
* @return {?}
|
|
2200
|
-
*/
|
|
2201
|
-
NgDropdownPanelComponent.prototype.scrollTo = /**
|
|
2202
|
-
* @param {?} option
|
|
2203
|
-
* @param {?=} startFromOption
|
|
2204
|
-
* @return {?}
|
|
2205
|
-
*/
|
|
2206
|
-
function (option, startFromOption) {
|
|
2207
|
-
if (startFromOption === void 0) {
|
|
2208
|
-
startFromOption = false;
|
|
2209
|
-
}
|
|
2210
|
-
if (!option) {
|
|
2211
|
-
return;
|
|
2212
|
-
}
|
|
2213
|
-
/** @type {?} */
|
|
2214
|
-
var index = this.items.indexOf(option);
|
|
2215
|
-
if (index < 0 || index >= this.itemsLength) {
|
|
2216
|
-
return;
|
|
2217
|
-
}
|
|
2218
|
-
/** @type {?} */
|
|
2219
|
-
var scrollTo;
|
|
2220
|
-
if (this.virtualScroll) {
|
|
2221
|
-
/** @type {?} */
|
|
2222
|
-
var itemHeight = this._panelService.dimensions.itemHeight;
|
|
2223
|
-
scrollTo = this._panelService.getScrollTo(index * itemHeight, itemHeight, this._lastScrollPosition);
|
|
2224
|
-
}
|
|
2225
|
-
else {
|
|
2226
|
-
/** @type {?} */
|
|
2227
|
-
var item = this._dropdown.querySelector("#" + option.htmlId);
|
|
2228
|
-
/** @type {?} */
|
|
2229
|
-
var lastScroll = startFromOption ? item.offsetTop : this._lastScrollPosition;
|
|
2230
|
-
scrollTo = this._panelService.getScrollTo(item.offsetTop, item.clientHeight, lastScroll);
|
|
2231
|
-
}
|
|
2232
|
-
if (isDefined(scrollTo)) {
|
|
2233
|
-
this._scrollablePanel.scrollTop = scrollTo;
|
|
2234
|
-
}
|
|
2235
|
-
};
|
|
2236
|
-
/**
|
|
2237
|
-
* @return {?}
|
|
2238
|
-
*/
|
|
2239
|
-
NgDropdownPanelComponent.prototype.scrollToTag = /**
|
|
2240
|
-
* @return {?}
|
|
2241
|
-
*/
|
|
2242
|
-
function () {
|
|
2243
|
-
/** @type {?} */
|
|
2244
|
-
var panel = this._scrollablePanel;
|
|
2245
|
-
panel.scrollTop = panel.scrollHeight - panel.clientHeight;
|
|
2246
|
-
};
|
|
2247
|
-
/**
|
|
2248
|
-
* @return {?}
|
|
2249
|
-
*/
|
|
2250
|
-
NgDropdownPanelComponent.prototype.adjustPosition = /**
|
|
2251
|
-
* @return {?}
|
|
2252
|
-
*/
|
|
2253
|
-
function () {
|
|
2254
|
-
if (this._currentPosition === 'top') {
|
|
2255
|
-
return;
|
|
2256
|
-
}
|
|
2257
|
-
/** @type {?} */
|
|
2258
|
-
var parent = this._parent.getBoundingClientRect();
|
|
2259
|
-
/** @type {?} */
|
|
2260
|
-
var select = this._select.getBoundingClientRect();
|
|
2261
|
-
this._setOffset(parent, select);
|
|
2262
|
-
};
|
|
2263
|
-
/**
|
|
2264
|
-
* @return {?}
|
|
2265
|
-
*/
|
|
2266
|
-
NgDropdownPanelComponent.prototype._handleDropdownPosition = /**
|
|
2267
|
-
* @return {?}
|
|
2268
|
-
*/
|
|
2269
|
-
function () {
|
|
2270
|
-
this._currentPosition = this._calculateCurrentPosition(this._dropdown);
|
|
2271
|
-
if (this._currentPosition === 'top') {
|
|
2272
|
-
this._renderer.addClass(this._dropdown, TOP_CSS_CLASS);
|
|
2273
|
-
this._renderer.removeClass(this._dropdown, BOTTOM_CSS_CLASS);
|
|
2274
|
-
this._renderer.addClass(this._select, TOP_CSS_CLASS);
|
|
2275
|
-
this._renderer.removeClass(this._select, BOTTOM_CSS_CLASS);
|
|
2276
|
-
}
|
|
2277
|
-
else {
|
|
2278
|
-
this._renderer.addClass(this._dropdown, BOTTOM_CSS_CLASS);
|
|
2279
|
-
this._renderer.removeClass(this._dropdown, TOP_CSS_CLASS);
|
|
2280
|
-
this._renderer.addClass(this._select, BOTTOM_CSS_CLASS);
|
|
2281
|
-
this._renderer.removeClass(this._select, TOP_CSS_CLASS);
|
|
2282
|
-
}
|
|
2283
|
-
if (this.appendTo) {
|
|
2284
|
-
this._updatePosition();
|
|
2285
|
-
}
|
|
2286
|
-
this._dropdown.style.opacity = '1';
|
|
2287
|
-
};
|
|
2288
|
-
/**
|
|
2289
|
-
* @return {?}
|
|
2290
|
-
*/
|
|
2291
|
-
NgDropdownPanelComponent.prototype._handleScroll = /**
|
|
2292
|
-
* @return {?}
|
|
2293
|
-
*/
|
|
2294
|
-
function () {
|
|
2295
|
-
var _this = this;
|
|
2296
|
-
this._zone.runOutsideAngular(function () {
|
|
2297
|
-
rxjs.fromEvent(_this.scrollElementRef.nativeElement, 'scroll')
|
|
2298
|
-
.pipe(operators.takeUntil(_this._destroy$), operators.auditTime(0, SCROLL_SCHEDULER))
|
|
2299
|
-
.subscribe(function (e) { return _this._onContentScrolled(e.srcElement.scrollTop); });
|
|
2300
|
-
});
|
|
2301
|
-
};
|
|
2302
|
-
/**
|
|
2303
|
-
* @return {?}
|
|
2304
|
-
*/
|
|
2305
|
-
NgDropdownPanelComponent.prototype._handleOutsideClick = /**
|
|
2306
|
-
* @return {?}
|
|
2307
|
-
*/
|
|
2308
|
-
function () {
|
|
2309
|
-
var _this = this;
|
|
2310
|
-
if (!this._document) {
|
|
2311
|
-
return;
|
|
2312
|
-
}
|
|
2313
|
-
this._zone.runOutsideAngular(function () {
|
|
2314
|
-
rxjs.merge(rxjs.fromEvent(_this._document, 'touchstart', { capture: true }), rxjs.fromEvent(_this._document, 'mousedown', { capture: true })).pipe(operators.takeUntil(_this._destroy$))
|
|
2315
|
-
.subscribe(function ($event) { return _this._checkToClose($event); });
|
|
2316
|
-
});
|
|
2317
|
-
};
|
|
2318
|
-
/**
|
|
2319
|
-
* @param {?} $event
|
|
2320
|
-
* @return {?}
|
|
2321
|
-
*/
|
|
2322
|
-
NgDropdownPanelComponent.prototype._checkToClose = /**
|
|
2323
|
-
* @param {?} $event
|
|
2324
|
-
* @return {?}
|
|
2325
|
-
*/
|
|
2326
|
-
function ($event) {
|
|
2327
|
-
if (this._select.contains($event.target) || this._dropdown.contains($event.target)) {
|
|
2328
|
-
return;
|
|
2329
|
-
}
|
|
2330
|
-
/** @type {?} */
|
|
2331
|
-
var path = $event.path || ($event.composedPath && $event.composedPath());
|
|
2332
|
-
if ($event.target && $event.target.shadowRoot && path && path[0] && this._select.contains(path[0])) {
|
|
2333
|
-
return;
|
|
2334
|
-
}
|
|
2335
|
-
this.outsideClick.emit();
|
|
2336
|
-
};
|
|
2337
|
-
/**
|
|
2338
|
-
* @param {?} items
|
|
2339
|
-
* @param {?} firstChange
|
|
2340
|
-
* @return {?}
|
|
2341
|
-
*/
|
|
2342
|
-
NgDropdownPanelComponent.prototype._onItemsChange = /**
|
|
2343
|
-
* @param {?} items
|
|
2344
|
-
* @param {?} firstChange
|
|
2345
|
-
* @return {?}
|
|
2346
|
-
*/
|
|
2347
|
-
function (items, firstChange) {
|
|
2348
|
-
this.items = items || [];
|
|
2349
|
-
this._scrollToEndFired = false;
|
|
2350
|
-
this.itemsLength = items.length;
|
|
2351
|
-
if (this.virtualScroll) {
|
|
2352
|
-
this._updateItemsRange(firstChange);
|
|
2353
|
-
}
|
|
2354
|
-
else {
|
|
2355
|
-
this._updateItems(firstChange);
|
|
2356
|
-
}
|
|
2357
|
-
};
|
|
2358
|
-
/**
|
|
2359
|
-
* @param {?} firstChange
|
|
2360
|
-
* @return {?}
|
|
2361
|
-
*/
|
|
2362
|
-
NgDropdownPanelComponent.prototype._updateItems = /**
|
|
2363
|
-
* @param {?} firstChange
|
|
2364
|
-
* @return {?}
|
|
2365
|
-
*/
|
|
2366
|
-
function (firstChange) {
|
|
2367
|
-
var _this = this;
|
|
2368
|
-
this.update.emit(this.items);
|
|
2369
|
-
if (firstChange === false) {
|
|
2370
|
-
return;
|
|
2371
|
-
}
|
|
2372
|
-
this._zone.runOutsideAngular(function () {
|
|
2373
|
-
Promise.resolve().then(function () {
|
|
2374
|
-
/** @type {?} */
|
|
2375
|
-
var panelHeight = _this._scrollablePanel.clientHeight;
|
|
2376
|
-
_this._panelService.setDimensions(0, panelHeight);
|
|
2377
|
-
_this._handleDropdownPosition();
|
|
2378
|
-
_this.scrollTo(_this.markedItem, firstChange);
|
|
2379
|
-
});
|
|
2380
|
-
});
|
|
2381
|
-
};
|
|
2382
|
-
/**
|
|
2383
|
-
* @param {?} firstChange
|
|
2384
|
-
* @return {?}
|
|
2385
|
-
*/
|
|
2386
|
-
NgDropdownPanelComponent.prototype._updateItemsRange = /**
|
|
2387
|
-
* @param {?} firstChange
|
|
2388
|
-
* @return {?}
|
|
2389
|
-
*/
|
|
2390
|
-
function (firstChange) {
|
|
2391
|
-
var _this = this;
|
|
2392
|
-
this._zone.runOutsideAngular(function () {
|
|
2393
|
-
_this._measureDimensions().then(function () {
|
|
2394
|
-
if (firstChange) {
|
|
2395
|
-
_this._renderItemsRange(_this._startOffset);
|
|
2396
|
-
_this._handleDropdownPosition();
|
|
2397
|
-
}
|
|
2398
|
-
else {
|
|
2399
|
-
_this._renderItemsRange();
|
|
2400
|
-
}
|
|
2401
|
-
});
|
|
2402
|
-
});
|
|
2403
|
-
};
|
|
2404
|
-
/**
|
|
2405
|
-
* @param {?} scrollTop
|
|
2406
|
-
* @return {?}
|
|
2407
|
-
*/
|
|
2408
|
-
NgDropdownPanelComponent.prototype._onContentScrolled = /**
|
|
2409
|
-
* @param {?} scrollTop
|
|
2410
|
-
* @return {?}
|
|
2411
|
-
*/
|
|
2412
|
-
function (scrollTop) {
|
|
2413
|
-
if (this.virtualScroll) {
|
|
2414
|
-
this._renderItemsRange(scrollTop);
|
|
2415
|
-
}
|
|
2416
|
-
this._lastScrollPosition = scrollTop;
|
|
2417
|
-
this._fireScrollToEnd(scrollTop);
|
|
2418
|
-
};
|
|
2419
|
-
/**
|
|
2420
|
-
* @param {?} height
|
|
2421
|
-
* @return {?}
|
|
2422
|
-
*/
|
|
2423
|
-
NgDropdownPanelComponent.prototype._updateVirtualHeight = /**
|
|
2424
|
-
* @param {?} height
|
|
2425
|
-
* @return {?}
|
|
2426
|
-
*/
|
|
2427
|
-
function (height) {
|
|
2428
|
-
if (this._updateScrollHeight) {
|
|
2429
|
-
this._virtualPadding.style.height = height + "px";
|
|
2430
|
-
this._updateScrollHeight = false;
|
|
2431
|
-
}
|
|
2432
|
-
};
|
|
2433
|
-
/**
|
|
2434
|
-
* @return {?}
|
|
2435
|
-
*/
|
|
2436
|
-
NgDropdownPanelComponent.prototype._onItemsLengthChanged = /**
|
|
2437
|
-
* @return {?}
|
|
2438
|
-
*/
|
|
2439
|
-
function () {
|
|
2440
|
-
this._updateScrollHeight = true;
|
|
2441
|
-
};
|
|
2442
|
-
Object.defineProperty(NgDropdownPanelComponent.prototype, "_startOffset", {
|
|
2443
|
-
get: /**
|
|
2444
|
-
* @return {?}
|
|
2445
|
-
*/ function () {
|
|
2446
|
-
if (this.markedItem) {
|
|
2447
|
-
return this.markedItem.index * this._panelService.dimensions.itemHeight;
|
|
2448
|
-
}
|
|
2449
|
-
return 0;
|
|
2450
|
-
},
|
|
2451
|
-
enumerable: true,
|
|
2452
|
-
configurable: true
|
|
2453
|
-
});
|
|
2454
|
-
/**
|
|
2455
|
-
* @param {?=} scrollTop
|
|
2456
|
-
* @return {?}
|
|
2457
|
-
*/
|
|
2458
|
-
NgDropdownPanelComponent.prototype._renderItemsRange = /**
|
|
2459
|
-
* @param {?=} scrollTop
|
|
2460
|
-
* @return {?}
|
|
2461
|
-
*/
|
|
2462
|
-
function (scrollTop) {
|
|
2463
|
-
var _this = this;
|
|
2464
|
-
if (scrollTop === void 0) {
|
|
2465
|
-
scrollTop = null;
|
|
2466
|
-
}
|
|
2467
|
-
if (scrollTop && this._lastScrollPosition === scrollTop) {
|
|
2468
|
-
return;
|
|
2469
|
-
}
|
|
2470
|
-
scrollTop = scrollTop || this._scrollablePanel.scrollTop;
|
|
2471
|
-
/** @type {?} */
|
|
2472
|
-
var range = this._panelService.calculateItems(scrollTop, this.itemsLength, this.bufferAmount);
|
|
2473
|
-
this._updateVirtualHeight(range.scrollHeight);
|
|
2474
|
-
this._contentPanel.style.transform = "translateY(" + range.topPadding + "px)";
|
|
2475
|
-
this._zone.run(function () {
|
|
2476
|
-
_this.update.emit(_this.items.slice(range.start, range.end));
|
|
2477
|
-
_this.scroll.emit({ start: range.start, end: range.end });
|
|
2478
|
-
});
|
|
2479
|
-
if (isDefined(scrollTop) && this._lastScrollPosition === 0) {
|
|
2480
|
-
this._scrollablePanel.scrollTop = scrollTop;
|
|
2481
|
-
this._lastScrollPosition = scrollTop;
|
|
2482
|
-
}
|
|
2483
|
-
};
|
|
2484
|
-
/**
|
|
2485
|
-
* @return {?}
|
|
2486
|
-
*/
|
|
2487
|
-
NgDropdownPanelComponent.prototype._measureDimensions = /**
|
|
2488
|
-
* @return {?}
|
|
2489
|
-
*/
|
|
2490
|
-
function () {
|
|
2491
|
-
var _this = this;
|
|
2492
|
-
if (this._panelService.dimensions.itemHeight > 0 || this.itemsLength === 0) {
|
|
2493
|
-
return Promise.resolve(this._panelService.dimensions);
|
|
2494
|
-
}
|
|
2495
|
-
var _a = __read(this.items, 1), first = _a[0];
|
|
2496
|
-
this.update.emit([first]);
|
|
2497
|
-
return Promise.resolve().then(function () {
|
|
2498
|
-
/** @type {?} */
|
|
2499
|
-
var option = _this._dropdown.querySelector("#" + first.htmlId);
|
|
2500
|
-
/** @type {?} */
|
|
2501
|
-
var optionHeight = option.clientHeight;
|
|
2502
|
-
_this._virtualPadding.style.height = optionHeight * _this.itemsLength + "px";
|
|
2503
|
-
/** @type {?} */
|
|
2504
|
-
var panelHeight = _this._scrollablePanel.clientHeight;
|
|
2505
|
-
_this._panelService.setDimensions(optionHeight, panelHeight);
|
|
2506
|
-
return _this._panelService.dimensions;
|
|
2507
|
-
});
|
|
2508
|
-
};
|
|
2509
|
-
/**
|
|
2510
|
-
* @param {?} scrollTop
|
|
2511
|
-
* @return {?}
|
|
2512
|
-
*/
|
|
2513
|
-
NgDropdownPanelComponent.prototype._fireScrollToEnd = /**
|
|
2514
|
-
* @param {?} scrollTop
|
|
2515
|
-
* @return {?}
|
|
2516
|
-
*/
|
|
2517
|
-
function (scrollTop) {
|
|
2518
|
-
var _this = this;
|
|
2519
|
-
if (this._scrollToEndFired || scrollTop === 0) {
|
|
2520
|
-
return;
|
|
2521
|
-
}
|
|
2522
|
-
/** @type {?} */
|
|
2523
|
-
var padding = this.virtualScroll ?
|
|
2524
|
-
this._virtualPadding :
|
|
2525
|
-
this._contentPanel;
|
|
2526
|
-
if (scrollTop + this._dropdown.clientHeight >= padding.clientHeight) {
|
|
2527
|
-
this._zone.run(function () { return _this.scrollToEnd.emit(); });
|
|
2528
|
-
this._scrollToEndFired = true;
|
|
2529
|
-
}
|
|
2530
|
-
};
|
|
2531
|
-
/**
|
|
2532
|
-
* @param {?} dropdownEl
|
|
2533
|
-
* @return {?}
|
|
2534
|
-
*/
|
|
2535
|
-
NgDropdownPanelComponent.prototype._calculateCurrentPosition = /**
|
|
2536
|
-
* @param {?} dropdownEl
|
|
2537
|
-
* @return {?}
|
|
2538
|
-
*/
|
|
2539
|
-
function (dropdownEl) {
|
|
2540
|
-
if (this.position !== 'auto') {
|
|
2541
|
-
return this.position;
|
|
2542
|
-
}
|
|
2543
|
-
/** @type {?} */
|
|
2544
|
-
var selectRect = this._select.getBoundingClientRect();
|
|
2545
|
-
/** @type {?} */
|
|
2546
|
-
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
|
|
2547
|
-
/** @type {?} */
|
|
2548
|
-
var offsetTop = selectRect.top + window.pageYOffset;
|
|
2549
|
-
/** @type {?} */
|
|
2550
|
-
var height = selectRect.height;
|
|
2551
|
-
/** @type {?} */
|
|
2552
|
-
var dropdownHeight = dropdownEl.getBoundingClientRect().height;
|
|
2553
|
-
if (offsetTop + height + dropdownHeight > scrollTop + document.documentElement.clientHeight) {
|
|
2554
|
-
return 'top';
|
|
2555
|
-
}
|
|
2556
|
-
else {
|
|
2557
|
-
return 'bottom';
|
|
2558
|
-
}
|
|
2559
|
-
};
|
|
2560
|
-
/**
|
|
2561
|
-
* @return {?}
|
|
2562
|
-
*/
|
|
2563
|
-
NgDropdownPanelComponent.prototype._appendDropdown = /**
|
|
2564
|
-
* @return {?}
|
|
2565
|
-
*/
|
|
2566
|
-
function () {
|
|
2567
|
-
if (!this.appendTo) {
|
|
2568
|
-
return;
|
|
2569
|
-
}
|
|
2570
|
-
this._parent = document.querySelector(this.appendTo);
|
|
2571
|
-
if (!parent) {
|
|
2572
|
-
throw new Error("appendTo selector " + this.appendTo + " did not found any parent element");
|
|
2573
|
-
}
|
|
2574
|
-
this._parent.appendChild(this._dropdown);
|
|
2575
|
-
};
|
|
2576
|
-
/**
|
|
2577
|
-
* @return {?}
|
|
2578
|
-
*/
|
|
2579
|
-
NgDropdownPanelComponent.prototype._updatePosition = /**
|
|
2580
|
-
* @return {?}
|
|
2581
|
-
*/
|
|
2582
|
-
function () {
|
|
2583
|
-
/** @type {?} */
|
|
2584
|
-
var select = this._select.getBoundingClientRect();
|
|
2585
|
-
/** @type {?} */
|
|
2586
|
-
var parent = this._parent.getBoundingClientRect();
|
|
2587
|
-
/** @type {?} */
|
|
2588
|
-
var offsetLeft = select.left - parent.left;
|
|
2589
|
-
this._setOffset(parent, select);
|
|
2590
|
-
this._dropdown.style.left = offsetLeft + 'px';
|
|
2591
|
-
this._dropdown.style.width = select.width + 'px';
|
|
2592
|
-
this._dropdown.style.minWidth = select.width + 'px';
|
|
2593
|
-
};
|
|
2594
|
-
/**
|
|
2595
|
-
* @param {?} parent
|
|
2596
|
-
* @param {?} select
|
|
2597
|
-
* @return {?}
|
|
2598
|
-
*/
|
|
2599
|
-
NgDropdownPanelComponent.prototype._setOffset = /**
|
|
2600
|
-
* @param {?} parent
|
|
2601
|
-
* @param {?} select
|
|
2602
|
-
* @return {?}
|
|
2603
|
-
*/
|
|
2604
|
-
function (parent, select) {
|
|
2605
|
-
/** @type {?} */
|
|
2606
|
-
var delta = select.height;
|
|
2607
|
-
if (this._currentPosition === 'top') {
|
|
2608
|
-
/** @type {?} */
|
|
2609
|
-
var offsetBottom = parent.bottom - select.bottom;
|
|
2610
|
-
this._dropdown.style.bottom = offsetBottom + delta + 'px';
|
|
2611
|
-
this._dropdown.style.top = 'auto';
|
|
2612
|
-
}
|
|
2613
|
-
else if (this._currentPosition === 'bottom') {
|
|
2614
|
-
/** @type {?} */
|
|
2615
|
-
var offsetTop = select.top - parent.top;
|
|
2616
|
-
this._dropdown.style.top = offsetTop + delta + 'px';
|
|
2617
|
-
this._dropdown.style.bottom = 'auto';
|
|
2618
|
-
}
|
|
2619
|
-
};
|
|
2620
|
-
NgDropdownPanelComponent.decorators = [
|
|
2621
|
-
{ type: i0.Component, args: [{
|
|
2622
|
-
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
2623
|
-
encapsulation: i0.ViewEncapsulation.None,
|
|
2624
|
-
selector: 'ng-dropdown-panel',
|
|
2625
|
-
template: "\n <div *ngIf=\"headerTemplate\" class=\"ng-dropdown-header\">\n <ng-container [ngTemplateOutlet]=\"headerTemplate\" [ngTemplateOutletContext]=\"{ searchTerm: filterValue }\"></ng-container>\n </div>\n <div #scroll class=\"ng-dropdown-panel-items scroll-host\">\n <div #padding [class.total-padding]=\"virtualScroll\"></div>\n <div #content [class.scrollable-content]=\"virtualScroll && items.length\">\n <ng-content></ng-content>\n </div>\n </div>\n <div *ngIf=\"footerTemplate\" class=\"ng-dropdown-footer\">\n <ng-container [ngTemplateOutlet]=\"footerTemplate\" [ngTemplateOutletContext]=\"{ searchTerm: filterValue }\"></ng-container>\n </div>\n "
|
|
2626
|
-
}] }
|
|
2627
|
-
];
|
|
2628
|
-
/** @nocollapse */
|
|
2629
|
-
NgDropdownPanelComponent.ctorParameters = function () {
|
|
2630
|
-
return [
|
|
2631
|
-
{ type: i0.Renderer2 },
|
|
2632
|
-
{ type: i0.NgZone },
|
|
2633
|
-
{ type: NgDropdownPanelService },
|
|
2634
|
-
{ type: i0.ElementRef },
|
|
2635
|
-
{ type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [common.DOCUMENT,] }] }
|
|
2636
|
-
];
|
|
2637
|
-
};
|
|
2638
|
-
NgDropdownPanelComponent.propDecorators = {
|
|
2639
|
-
items: [{ type: i0.Input }],
|
|
2640
|
-
markedItem: [{ type: i0.Input }],
|
|
2641
|
-
position: [{ type: i0.Input }],
|
|
2642
|
-
appendTo: [{ type: i0.Input }],
|
|
2643
|
-
bufferAmount: [{ type: i0.Input }],
|
|
2644
|
-
virtualScroll: [{ type: i0.Input }],
|
|
2645
|
-
headerTemplate: [{ type: i0.Input }],
|
|
2646
|
-
footerTemplate: [{ type: i0.Input }],
|
|
2647
|
-
filterValue: [{ type: i0.Input }],
|
|
2648
|
-
update: [{ type: i0.Output }],
|
|
2649
|
-
scroll: [{ type: i0.Output }],
|
|
2650
|
-
scrollToEnd: [{ type: i0.Output }],
|
|
2651
|
-
outsideClick: [{ type: i0.Output }],
|
|
2652
|
-
contentElementRef: [{ type: i0.ViewChild, args: ['content', { read: i0.ElementRef },] }],
|
|
2653
|
-
scrollElementRef: [{ type: i0.ViewChild, args: ['scroll', { read: i0.ElementRef },] }],
|
|
2654
|
-
paddingElementRef: [{ type: i0.ViewChild, args: ['padding', { read: i0.ElementRef },] }],
|
|
2655
|
-
handleMousedown: [{ type: i0.HostListener, args: ['mousedown', ['$event'],] }]
|
|
2656
|
-
};
|
|
2657
|
-
return NgDropdownPanelComponent;
|
|
2658
|
-
}());
|
|
2659
|
-
|
|
2660
|
-
/**
|
|
2661
|
-
* @fileoverview added by tsickle
|
|
2662
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
2663
|
-
*/
|
|
2664
|
-
var NgOptionComponent = /** @class */ (function () {
|
|
2665
|
-
function NgOptionComponent(elementRef) {
|
|
2666
|
-
this.elementRef = elementRef;
|
|
2667
|
-
this.stateChange$ = new rxjs.Subject();
|
|
2668
|
-
this._disabled = false;
|
|
2669
|
-
}
|
|
2670
|
-
Object.defineProperty(NgOptionComponent.prototype, "disabled", {
|
|
2671
|
-
get: /**
|
|
2672
|
-
* @return {?}
|
|
2673
|
-
*/ function () { return this._disabled; },
|
|
2674
|
-
set: /**
|
|
2675
|
-
* @param {?} value
|
|
2676
|
-
* @return {?}
|
|
2677
|
-
*/ function (value) { this._disabled = this._isDisabled(value); },
|
|
2678
|
-
enumerable: true,
|
|
2679
|
-
configurable: true
|
|
2680
|
-
});
|
|
2681
|
-
/**
|
|
2682
|
-
* @param {?} changes
|
|
2683
|
-
* @return {?}
|
|
2684
|
-
*/
|
|
2685
|
-
NgOptionComponent.prototype.ngOnChanges = /**
|
|
2686
|
-
* @param {?} changes
|
|
2687
|
-
* @return {?}
|
|
2688
|
-
*/
|
|
2689
|
-
function (changes) {
|
|
2690
|
-
if (changes["disabled"]) {
|
|
2691
|
-
this.stateChange$.next({
|
|
2692
|
-
value: this.value,
|
|
2693
|
-
disabled: this._disabled
|
|
2694
|
-
});
|
|
2695
|
-
}
|
|
2696
|
-
};
|
|
2697
|
-
/**
|
|
2698
|
-
* @param {?} value
|
|
2699
|
-
* @return {?}
|
|
2700
|
-
*/
|
|
2701
|
-
NgOptionComponent.prototype._isDisabled = /**
|
|
2702
|
-
* @param {?} value
|
|
2703
|
-
* @return {?}
|
|
2704
|
-
*/
|
|
2705
|
-
function (value) {
|
|
2706
|
-
return value != null && "" + value !== 'false';
|
|
2707
|
-
};
|
|
2708
|
-
NgOptionComponent.decorators = [
|
|
2709
|
-
{ type: i0.Component, args: [{
|
|
2710
|
-
selector: 'ng-option',
|
|
2711
|
-
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
2712
|
-
template: "<ng-content></ng-content>"
|
|
2713
|
-
}] }
|
|
2714
|
-
];
|
|
2715
|
-
/** @nocollapse */
|
|
2716
|
-
NgOptionComponent.ctorParameters = function () {
|
|
2717
|
-
return [
|
|
2718
|
-
{ type: i0.ElementRef }
|
|
2719
|
-
];
|
|
2720
|
-
};
|
|
2721
|
-
NgOptionComponent.propDecorators = {
|
|
2722
|
-
value: [{ type: i0.Input }],
|
|
2723
|
-
disabled: [{ type: i0.Input }]
|
|
2724
|
-
};
|
|
2725
|
-
return NgOptionComponent;
|
|
2726
|
-
}());
|
|
2727
|
-
|
|
2728
|
-
/**
|
|
2729
|
-
* @fileoverview added by tsickle
|
|
2730
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
2731
|
-
*/
|
|
2732
|
-
var NgSelectConfig = /** @class */ (function () {
|
|
2733
|
-
function NgSelectConfig() {
|
|
2734
|
-
this.notFoundText = 'No items found';
|
|
2735
|
-
this.typeToSearchText = 'Type to search';
|
|
2736
|
-
this.addTagText = 'Add item';
|
|
2737
|
-
this.loadingText = 'Loading...';
|
|
2738
|
-
this.clearAllText = 'Clear all';
|
|
2739
|
-
this.disableVirtualScroll = true;
|
|
2740
|
-
this.openOnEnter = true;
|
|
2741
|
-
}
|
|
2742
|
-
NgSelectConfig.decorators = [
|
|
2743
|
-
{ type: i0.Injectable, args: [{ providedIn: 'root' },] }
|
|
2744
|
-
];
|
|
2745
|
-
/** @nocollapse */ NgSelectConfig.ngInjectableDef = i0.defineInjectable({ factory: function NgSelectConfig_Factory() { return new NgSelectConfig(); }, token: NgSelectConfig, providedIn: "root" });
|
|
2746
|
-
return NgSelectConfig;
|
|
2747
|
-
}());
|
|
2748
|
-
|
|
2749
|
-
/**
|
|
2750
|
-
* @fileoverview added by tsickle
|
|
2751
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
2752
|
-
*/
|
|
2753
|
-
/** @type {?} */
|
|
2754
|
-
var SELECTION_MODEL_FACTORY = new i0.InjectionToken('ng-select-selection-model');
|
|
2755
|
-
var NgSelectComponent = /** @class */ (function () {
|
|
2756
|
-
function NgSelectComponent(classes, tabIndex, autoFocus, config, newSelectionModel, _elementRef, _cd, _console) {
|
|
2757
|
-
var _this = this;
|
|
2758
|
-
this.classes = classes;
|
|
2759
|
-
this.tabIndex = tabIndex;
|
|
2760
|
-
this.autoFocus = autoFocus;
|
|
2761
|
-
this._cd = _cd;
|
|
2762
|
-
this._console = _console;
|
|
2763
|
-
this.markFirst = true;
|
|
2764
|
-
this.dropdownPosition = 'auto';
|
|
2765
|
-
this.loading = false;
|
|
2766
|
-
this.closeOnSelect = true;
|
|
2767
|
-
this.hideSelected = false;
|
|
2768
|
-
this.selectOnTab = false;
|
|
2769
|
-
this.bufferAmount = 4;
|
|
2770
|
-
this.selectableGroup = false;
|
|
2771
|
-
this.selectableGroupAsModel = true;
|
|
2772
|
-
this.searchFn = null;
|
|
2773
|
-
this.trackByFn = null;
|
|
2774
|
-
this.excludeGroupsFromDefaultSelection = false;
|
|
2775
|
-
this.clearOnBackspace = true;
|
|
2776
|
-
this.labelForId = null;
|
|
2777
|
-
this.autoCorrect = 'off';
|
|
2778
|
-
this.autoCapitalize = 'off';
|
|
2779
|
-
this.multiple = false;
|
|
2780
|
-
this.addTag = false;
|
|
2781
|
-
this.searchable = true;
|
|
2782
|
-
this.clearable = true;
|
|
2783
|
-
this.isOpen = false;
|
|
2784
|
-
// output events
|
|
2785
|
-
this.blurEvent = new i0.EventEmitter();
|
|
2786
|
-
this.focusEvent = new i0.EventEmitter();
|
|
2787
|
-
this.changeEvent = new i0.EventEmitter();
|
|
2788
|
-
this.openEvent = new i0.EventEmitter();
|
|
2789
|
-
this.closeEvent = new i0.EventEmitter();
|
|
2790
|
-
this.searchEvent = new i0.EventEmitter();
|
|
2791
|
-
this.clearEvent = new i0.EventEmitter();
|
|
2792
|
-
this.addEvent = new i0.EventEmitter();
|
|
2793
|
-
this.removeEvent = new i0.EventEmitter();
|
|
2794
|
-
this.scroll = new i0.EventEmitter();
|
|
2795
|
-
this.scrollToEnd = new i0.EventEmitter();
|
|
2796
|
-
this.disabled = false;
|
|
2797
|
-
this.viewPortItems = [];
|
|
2798
|
-
this.filterValue = null;
|
|
2799
|
-
this.dropdownId = newId();
|
|
2800
|
-
this._items = [];
|
|
2801
|
-
this._defaultLabel = 'label';
|
|
2802
|
-
this._pressedKeys = [];
|
|
2803
|
-
this._destroy$ = new rxjs.Subject();
|
|
2804
|
-
this._keyPress$ = new rxjs.Subject();
|
|
2805
|
-
this._onChange = function (_) { };
|
|
2806
|
-
this._onTouched = function () { };
|
|
2807
|
-
this.clearItem = function (item) {
|
|
2808
|
-
/** @type {?} */
|
|
2809
|
-
var option = _this.selectedItems.find(function (x) { return x.value === item; });
|
|
2810
|
-
_this.unselect(option);
|
|
2811
|
-
};
|
|
2812
|
-
this.trackByOption = function (_, item) {
|
|
2813
|
-
if (_this.trackByFn) {
|
|
2814
|
-
return _this.trackByFn(item.value);
|
|
2815
|
-
}
|
|
2816
|
-
return null;
|
|
2817
|
-
};
|
|
2818
|
-
this._mergeGlobalConfig(config);
|
|
2819
|
-
this.itemsList = new ItemsList(this, newSelectionModel());
|
|
2820
|
-
this.element = _elementRef.nativeElement;
|
|
2821
|
-
}
|
|
2822
|
-
Object.defineProperty(NgSelectComponent.prototype, "items", {
|
|
2823
|
-
get: /**
|
|
2824
|
-
* @return {?}
|
|
2825
|
-
*/ function () { return this._items; },
|
|
2826
|
-
set: /**
|
|
2827
|
-
* @param {?} value
|
|
2828
|
-
* @return {?}
|
|
2829
|
-
*/ function (value) {
|
|
2830
|
-
this._itemsAreUsed = true;
|
|
2831
|
-
this._items = value;
|
|
2832
|
-
},
|
|
2833
|
-
enumerable: true,
|
|
2834
|
-
configurable: true
|
|
2835
|
-
});
|
|
2836
|
-
Object.defineProperty(NgSelectComponent.prototype, "compareWith", {
|
|
2837
|
-
get: /**
|
|
2838
|
-
* @return {?}
|
|
2839
|
-
*/ function () { return this._compareWith; },
|
|
2840
|
-
set: /**
|
|
2841
|
-
* @param {?} fn
|
|
2842
|
-
* @return {?}
|
|
2843
|
-
*/ function (fn) {
|
|
2844
|
-
if (!isFunction(fn)) {
|
|
2845
|
-
throw Error('`compareWith` must be a function.');
|
|
2846
|
-
}
|
|
2847
|
-
this._compareWith = fn;
|
|
2848
|
-
},
|
|
2849
|
-
enumerable: true,
|
|
2850
|
-
configurable: true
|
|
2851
|
-
});
|
|
2852
|
-
Object.defineProperty(NgSelectComponent.prototype, "clearSearchOnAdd", {
|
|
2853
|
-
get: /**
|
|
2854
|
-
* @return {?}
|
|
2855
|
-
*/ function () { return isDefined(this._clearSearchOnAdd) ? this._clearSearchOnAdd : this.closeOnSelect; },
|
|
2856
|
-
set: /**
|
|
2857
|
-
* @param {?} value
|
|
2858
|
-
* @return {?}
|
|
2859
|
-
*/ function (value) {
|
|
2860
|
-
this._clearSearchOnAdd = value;
|
|
2861
|
-
},
|
|
2862
|
-
enumerable: true,
|
|
2863
|
-
configurable: true
|
|
2864
|
-
});
|
|
2865
|
-
Object.defineProperty(NgSelectComponent.prototype, "filtered", {
|
|
2866
|
-
get: /**
|
|
2867
|
-
* @return {?}
|
|
2868
|
-
*/ function () { return !!this.filterValue && this.searchable; },
|
|
2869
|
-
enumerable: true,
|
|
2870
|
-
configurable: true
|
|
2871
|
-
});
|
|
2872
|
-
Object.defineProperty(NgSelectComponent.prototype, "selectedItems", {
|
|
2873
|
-
get: /**
|
|
2874
|
-
* @return {?}
|
|
2875
|
-
*/ function () {
|
|
2876
|
-
return this.itemsList.selectedItems;
|
|
2877
|
-
},
|
|
2878
|
-
enumerable: true,
|
|
2879
|
-
configurable: true
|
|
2880
|
-
});
|
|
2881
|
-
Object.defineProperty(NgSelectComponent.prototype, "selectedValues", {
|
|
2882
|
-
get: /**
|
|
2883
|
-
* @return {?}
|
|
2884
|
-
*/ function () {
|
|
2885
|
-
return this.selectedItems.map(function (x) { return x.value; });
|
|
2886
|
-
},
|
|
2887
|
-
enumerable: true,
|
|
2888
|
-
configurable: true
|
|
2889
|
-
});
|
|
2890
|
-
Object.defineProperty(NgSelectComponent.prototype, "hasValue", {
|
|
2891
|
-
get: /**
|
|
2892
|
-
* @return {?}
|
|
2893
|
-
*/ function () {
|
|
2894
|
-
return this.selectedItems.length > 0;
|
|
2895
|
-
},
|
|
2896
|
-
enumerable: true,
|
|
2897
|
-
configurable: true
|
|
2898
|
-
});
|
|
2899
|
-
Object.defineProperty(NgSelectComponent.prototype, "currentPanelPosition", {
|
|
2900
|
-
get: /**
|
|
2901
|
-
* @return {?}
|
|
2902
|
-
*/ function () {
|
|
2903
|
-
if (this.dropdownPanel) {
|
|
2904
|
-
return this.dropdownPanel.currentPosition;
|
|
2905
|
-
}
|
|
2906
|
-
return undefined;
|
|
2907
|
-
},
|
|
2908
|
-
enumerable: true,
|
|
2909
|
-
configurable: true
|
|
2910
|
-
});
|
|
2911
|
-
/**
|
|
2912
|
-
* @return {?}
|
|
2913
|
-
*/
|
|
2914
|
-
NgSelectComponent.prototype.ngOnInit = /**
|
|
2915
|
-
* @return {?}
|
|
2916
|
-
*/
|
|
2917
|
-
function () {
|
|
2918
|
-
this._handleKeyPresses();
|
|
2919
|
-
};
|
|
2920
|
-
/**
|
|
2921
|
-
* @param {?} changes
|
|
2922
|
-
* @return {?}
|
|
2923
|
-
*/
|
|
2924
|
-
NgSelectComponent.prototype.ngOnChanges = /**
|
|
2925
|
-
* @param {?} changes
|
|
2926
|
-
* @return {?}
|
|
2927
|
-
*/
|
|
2928
|
-
function (changes) {
|
|
2929
|
-
if (changes["multiple"]) {
|
|
2930
|
-
this.itemsList.clearSelected();
|
|
2931
|
-
}
|
|
2932
|
-
if (changes["items"]) {
|
|
2933
|
-
this._setItems(changes["items"].currentValue || []);
|
|
2934
|
-
}
|
|
2935
|
-
if (changes["isOpen"]) {
|
|
2936
|
-
this._manualOpen = isDefined(changes["isOpen"].currentValue);
|
|
2937
|
-
}
|
|
2938
|
-
};
|
|
2939
|
-
/**
|
|
2940
|
-
* @return {?}
|
|
2941
|
-
*/
|
|
2942
|
-
NgSelectComponent.prototype.ngAfterViewInit = /**
|
|
2943
|
-
* @return {?}
|
|
2944
|
-
*/
|
|
2945
|
-
function () {
|
|
2946
|
-
if (!this._itemsAreUsed) {
|
|
2947
|
-
this._setItemsFromNgOptions();
|
|
2948
|
-
}
|
|
2949
|
-
if (isDefined(this.autoFocus)) {
|
|
2950
|
-
this.focus();
|
|
2951
|
-
}
|
|
2952
|
-
};
|
|
2953
|
-
/**
|
|
2954
|
-
* @return {?}
|
|
2955
|
-
*/
|
|
2956
|
-
NgSelectComponent.prototype.ngOnDestroy = /**
|
|
2957
|
-
* @return {?}
|
|
2958
|
-
*/
|
|
2959
|
-
function () {
|
|
2960
|
-
this._destroy$.next();
|
|
2961
|
-
this._destroy$.complete();
|
|
2962
|
-
};
|
|
2963
|
-
/**
|
|
2964
|
-
* @param {?} $event
|
|
2965
|
-
* @return {?}
|
|
2966
|
-
*/
|
|
2967
|
-
NgSelectComponent.prototype.handleKeyDown = /**
|
|
2968
|
-
* @param {?} $event
|
|
2969
|
-
* @return {?}
|
|
2970
|
-
*/
|
|
2971
|
-
function ($event) {
|
|
2972
|
-
if (KeyCode[$event.which]) {
|
|
2973
|
-
switch ($event.which) {
|
|
2974
|
-
case KeyCode.ArrowDown:
|
|
2975
|
-
this._handleArrowDown($event);
|
|
2976
|
-
break;
|
|
2977
|
-
case KeyCode.ArrowUp:
|
|
2978
|
-
this._handleArrowUp($event);
|
|
2979
|
-
break;
|
|
2980
|
-
case KeyCode.Space:
|
|
2981
|
-
this._handleSpace($event);
|
|
2982
|
-
break;
|
|
2983
|
-
case KeyCode.Enter:
|
|
2984
|
-
this._handleEnter($event);
|
|
2985
|
-
break;
|
|
2986
|
-
case KeyCode.Tab:
|
|
2987
|
-
this._handleTab($event);
|
|
2988
|
-
break;
|
|
2989
|
-
case KeyCode.Esc:
|
|
2990
|
-
this.close();
|
|
2991
|
-
$event.preventDefault();
|
|
2992
|
-
break;
|
|
2993
|
-
case KeyCode.Backspace:
|
|
2994
|
-
this._handleBackspace();
|
|
2995
|
-
break;
|
|
2996
|
-
}
|
|
2997
|
-
}
|
|
2998
|
-
else if ($event.key && $event.key.length === 1) {
|
|
2999
|
-
this._keyPress$.next($event.key.toLocaleLowerCase());
|
|
3000
|
-
}
|
|
3001
|
-
};
|
|
3002
|
-
/**
|
|
3003
|
-
* @param {?} $event
|
|
3004
|
-
* @return {?}
|
|
3005
|
-
*/
|
|
3006
|
-
NgSelectComponent.prototype.handleMousedown = /**
|
|
3007
|
-
* @param {?} $event
|
|
3008
|
-
* @return {?}
|
|
3009
|
-
*/
|
|
3010
|
-
function ($event) {
|
|
3011
|
-
/** @type {?} */
|
|
3012
|
-
var target = /** @type {?} */ ($event.target);
|
|
3013
|
-
if (target.tagName !== 'INPUT') {
|
|
3014
|
-
$event.preventDefault();
|
|
3015
|
-
}
|
|
3016
|
-
if (target.classList.contains('ng-clear-wrapper')) {
|
|
3017
|
-
this.handleClearClick();
|
|
3018
|
-
return;
|
|
3019
|
-
}
|
|
3020
|
-
if (target.classList.contains('ng-arrow-wrapper')) {
|
|
3021
|
-
this.handleArrowClick();
|
|
3022
|
-
return;
|
|
3023
|
-
}
|
|
3024
|
-
if (target.classList.contains('ng-value-icon')) {
|
|
3025
|
-
return;
|
|
3026
|
-
}
|
|
3027
|
-
if (!this.focused) {
|
|
3028
|
-
this.focus();
|
|
3029
|
-
}
|
|
3030
|
-
if (this.searchable) {
|
|
3031
|
-
this.open();
|
|
3032
|
-
}
|
|
3033
|
-
else {
|
|
3034
|
-
this.toggle();
|
|
3035
|
-
}
|
|
3036
|
-
};
|
|
3037
|
-
/**
|
|
3038
|
-
* @return {?}
|
|
3039
|
-
*/
|
|
3040
|
-
NgSelectComponent.prototype.handleArrowClick = /**
|
|
3041
|
-
* @return {?}
|
|
3042
|
-
*/
|
|
3043
|
-
function () {
|
|
3044
|
-
if (this.isOpen) {
|
|
3045
|
-
this.close();
|
|
3046
|
-
}
|
|
3047
|
-
else {
|
|
3048
|
-
this.open();
|
|
3049
|
-
}
|
|
3050
|
-
};
|
|
3051
|
-
/**
|
|
3052
|
-
* @return {?}
|
|
3053
|
-
*/
|
|
3054
|
-
NgSelectComponent.prototype.handleClearClick = /**
|
|
3055
|
-
* @return {?}
|
|
3056
|
-
*/
|
|
3057
|
-
function () {
|
|
3058
|
-
if (this.hasValue) {
|
|
3059
|
-
this.itemsList.clearSelected(true);
|
|
3060
|
-
this._updateNgModel();
|
|
3061
|
-
}
|
|
3062
|
-
this._clearSearch();
|
|
3063
|
-
this.focus();
|
|
3064
|
-
if (this._isTypeahead) {
|
|
3065
|
-
this.typeahead.next(null);
|
|
3066
|
-
}
|
|
3067
|
-
this.clearEvent.emit();
|
|
3068
|
-
this._onSelectionChanged();
|
|
3069
|
-
};
|
|
3070
|
-
/**
|
|
3071
|
-
* @return {?}
|
|
3072
|
-
*/
|
|
3073
|
-
NgSelectComponent.prototype.clearModel = /**
|
|
3074
|
-
* @return {?}
|
|
3075
|
-
*/
|
|
3076
|
-
function () {
|
|
3077
|
-
if (!this.clearable) {
|
|
3078
|
-
return;
|
|
3079
|
-
}
|
|
3080
|
-
this.itemsList.clearSelected();
|
|
3081
|
-
this._updateNgModel();
|
|
3082
|
-
};
|
|
3083
|
-
/**
|
|
3084
|
-
* @param {?} value
|
|
3085
|
-
* @return {?}
|
|
3086
|
-
*/
|
|
3087
|
-
NgSelectComponent.prototype.writeValue = /**
|
|
3088
|
-
* @param {?} value
|
|
3089
|
-
* @return {?}
|
|
3090
|
-
*/
|
|
3091
|
-
function (value) {
|
|
3092
|
-
this.itemsList.clearSelected();
|
|
3093
|
-
this._handleWriteValue(value);
|
|
3094
|
-
this._cd.markForCheck();
|
|
3095
|
-
};
|
|
3096
|
-
/**
|
|
3097
|
-
* @param {?} fn
|
|
3098
|
-
* @return {?}
|
|
3099
|
-
*/
|
|
3100
|
-
NgSelectComponent.prototype.registerOnChange = /**
|
|
3101
|
-
* @param {?} fn
|
|
3102
|
-
* @return {?}
|
|
3103
|
-
*/
|
|
3104
|
-
function (fn) {
|
|
3105
|
-
this._onChange = fn;
|
|
3106
|
-
};
|
|
3107
|
-
/**
|
|
3108
|
-
* @param {?} fn
|
|
3109
|
-
* @return {?}
|
|
3110
|
-
*/
|
|
3111
|
-
NgSelectComponent.prototype.registerOnTouched = /**
|
|
3112
|
-
* @param {?} fn
|
|
3113
|
-
* @return {?}
|
|
3114
|
-
*/
|
|
3115
|
-
function (fn) {
|
|
3116
|
-
this._onTouched = fn;
|
|
3117
|
-
};
|
|
3118
|
-
/**
|
|
3119
|
-
* @param {?} isDisabled
|
|
3120
|
-
* @return {?}
|
|
3121
|
-
*/
|
|
3122
|
-
NgSelectComponent.prototype.setDisabledState = /**
|
|
3123
|
-
* @param {?} isDisabled
|
|
3124
|
-
* @return {?}
|
|
3125
|
-
*/
|
|
3126
|
-
function (isDisabled) {
|
|
3127
|
-
this.disabled = isDisabled;
|
|
3128
|
-
this._cd.markForCheck();
|
|
3129
|
-
};
|
|
3130
|
-
/**
|
|
3131
|
-
* @return {?}
|
|
3132
|
-
*/
|
|
3133
|
-
NgSelectComponent.prototype.toggle = /**
|
|
3134
|
-
* @return {?}
|
|
3135
|
-
*/
|
|
3136
|
-
function () {
|
|
3137
|
-
if (!this.isOpen) {
|
|
3138
|
-
this.open();
|
|
3139
|
-
}
|
|
3140
|
-
else {
|
|
3141
|
-
this.close();
|
|
3142
|
-
}
|
|
3143
|
-
};
|
|
3144
|
-
/**
|
|
3145
|
-
* @return {?}
|
|
3146
|
-
*/
|
|
3147
|
-
NgSelectComponent.prototype.open = /**
|
|
3148
|
-
* @return {?}
|
|
3149
|
-
*/
|
|
3150
|
-
function () {
|
|
3151
|
-
if (this.disabled || this.isOpen || this.itemsList.maxItemsSelected || this._manualOpen) {
|
|
3152
|
-
return;
|
|
3153
|
-
}
|
|
3154
|
-
if (!this._isTypeahead && !this.addTag && this.itemsList.noItemsToSelect) {
|
|
3155
|
-
return;
|
|
3156
|
-
}
|
|
3157
|
-
this.isOpen = true;
|
|
3158
|
-
this.itemsList.markSelectedOrDefault(this.markFirst);
|
|
3159
|
-
this.openEvent.emit();
|
|
3160
|
-
if (!this.filterValue) {
|
|
3161
|
-
this.focus();
|
|
3162
|
-
}
|
|
3163
|
-
this.detectChanges();
|
|
3164
|
-
};
|
|
3165
|
-
/**
|
|
3166
|
-
* @return {?}
|
|
3167
|
-
*/
|
|
3168
|
-
NgSelectComponent.prototype.close = /**
|
|
3169
|
-
* @return {?}
|
|
3170
|
-
*/
|
|
3171
|
-
function () {
|
|
3172
|
-
if (!this.isOpen || this._manualOpen) {
|
|
3173
|
-
return;
|
|
3174
|
-
}
|
|
3175
|
-
this.isOpen = false;
|
|
3176
|
-
this._clearSearch();
|
|
3177
|
-
this.itemsList.unmarkItem();
|
|
3178
|
-
this._onTouched();
|
|
3179
|
-
this.closeEvent.emit();
|
|
3180
|
-
this._cd.markForCheck();
|
|
3181
|
-
};
|
|
3182
|
-
/**
|
|
3183
|
-
* @param {?} item
|
|
3184
|
-
* @return {?}
|
|
3185
|
-
*/
|
|
3186
|
-
NgSelectComponent.prototype.toggleItem = /**
|
|
3187
|
-
* @param {?} item
|
|
3188
|
-
* @return {?}
|
|
3189
|
-
*/
|
|
3190
|
-
function (item) {
|
|
3191
|
-
if (!item || item.disabled || this.disabled) {
|
|
3192
|
-
return;
|
|
3193
|
-
}
|
|
3194
|
-
if (this.multiple && item.selected) {
|
|
3195
|
-
this.unselect(item);
|
|
3196
|
-
}
|
|
3197
|
-
else {
|
|
3198
|
-
this.select(item);
|
|
3199
|
-
}
|
|
3200
|
-
this._onSelectionChanged();
|
|
3201
|
-
};
|
|
3202
|
-
/**
|
|
3203
|
-
* @param {?} item
|
|
3204
|
-
* @return {?}
|
|
3205
|
-
*/
|
|
3206
|
-
NgSelectComponent.prototype.select = /**
|
|
3207
|
-
* @param {?} item
|
|
3208
|
-
* @return {?}
|
|
3209
|
-
*/
|
|
3210
|
-
function (item) {
|
|
3211
|
-
if (!item.selected) {
|
|
3212
|
-
this.itemsList.select(item);
|
|
3213
|
-
if (this.clearSearchOnAdd) {
|
|
3214
|
-
this._clearSearch();
|
|
3215
|
-
}
|
|
3216
|
-
if (this.multiple) {
|
|
3217
|
-
this.addEvent.emit(item.value);
|
|
3218
|
-
}
|
|
3219
|
-
this._updateNgModel();
|
|
3220
|
-
}
|
|
3221
|
-
if (this.closeOnSelect || this.itemsList.noItemsToSelect) {
|
|
3222
|
-
this.close();
|
|
3223
|
-
}
|
|
3224
|
-
};
|
|
3225
|
-
/**
|
|
3226
|
-
* @return {?}
|
|
3227
|
-
*/
|
|
3228
|
-
NgSelectComponent.prototype.focus = /**
|
|
3229
|
-
* @return {?}
|
|
3230
|
-
*/
|
|
3231
|
-
function () {
|
|
3232
|
-
this.filterInput.nativeElement.focus();
|
|
3233
|
-
};
|
|
3234
|
-
/**
|
|
3235
|
-
* @param {?} item
|
|
3236
|
-
* @return {?}
|
|
3237
|
-
*/
|
|
3238
|
-
NgSelectComponent.prototype.unselect = /**
|
|
3239
|
-
* @param {?} item
|
|
3240
|
-
* @return {?}
|
|
3241
|
-
*/
|
|
3242
|
-
function (item) {
|
|
3243
|
-
if (!item) {
|
|
3244
|
-
return;
|
|
3245
|
-
}
|
|
3246
|
-
this.itemsList.unselect(item);
|
|
3247
|
-
this.focus();
|
|
3248
|
-
this._updateNgModel();
|
|
3249
|
-
this.removeEvent.emit(item);
|
|
3250
|
-
};
|
|
3251
|
-
/**
|
|
3252
|
-
* @return {?}
|
|
3253
|
-
*/
|
|
3254
|
-
NgSelectComponent.prototype.selectTag = /**
|
|
3255
|
-
* @return {?}
|
|
3256
|
-
*/
|
|
3257
|
-
function () {
|
|
3258
|
-
var _this = this;
|
|
3259
|
-
var _a;
|
|
3260
|
-
/** @type {?} */
|
|
3261
|
-
var tag;
|
|
3262
|
-
if (isFunction(this.addTag)) {
|
|
3263
|
-
tag = ( /** @type {?} */(this.addTag))(this.filterValue);
|
|
3264
|
-
}
|
|
3265
|
-
else {
|
|
3266
|
-
tag = this._primitive ? this.filterValue : (_a = {}, _a[this.bindLabel] = this.filterValue, _a);
|
|
3267
|
-
}
|
|
3268
|
-
/** @type {?} */
|
|
3269
|
-
var handleTag = function (item) { return _this._isTypeahead || !_this.isOpen ? _this.itemsList.mapItem(item, null) : _this.itemsList.addItem(item); };
|
|
3270
|
-
if (isPromise(tag)) {
|
|
3271
|
-
tag.then(function (item) { return _this.select(handleTag(item)); }).catch(function () { });
|
|
3272
|
-
}
|
|
3273
|
-
else if (tag) {
|
|
3274
|
-
this.select(handleTag(tag));
|
|
3275
|
-
}
|
|
3276
|
-
};
|
|
3277
|
-
/**
|
|
3278
|
-
* @return {?}
|
|
3279
|
-
*/
|
|
3280
|
-
NgSelectComponent.prototype.showClear = /**
|
|
3281
|
-
* @return {?}
|
|
3282
|
-
*/
|
|
3283
|
-
function () {
|
|
3284
|
-
return this.clearable && (this.hasValue || this.filterValue) && !this.disabled;
|
|
3285
|
-
};
|
|
3286
|
-
Object.defineProperty(NgSelectComponent.prototype, "showAddTag", {
|
|
3287
|
-
get: /**
|
|
3288
|
-
* @return {?}
|
|
3289
|
-
*/ function () {
|
|
3290
|
-
if (!this.filterValue) {
|
|
3291
|
-
return false;
|
|
3292
|
-
}
|
|
3293
|
-
/** @type {?} */
|
|
3294
|
-
var term = this.filterValue.toLowerCase();
|
|
3295
|
-
return this.addTag &&
|
|
3296
|
-
(!this.itemsList.filteredItems.some(function (x) { return x.label.toLowerCase() === term; }) &&
|
|
3297
|
-
(!this.hideSelected && this.isOpen || !this.selectedItems.some(function (x) { return x.label.toLowerCase() === term; }))) &&
|
|
3298
|
-
!this.loading;
|
|
3299
|
-
},
|
|
3300
|
-
enumerable: true,
|
|
3301
|
-
configurable: true
|
|
3302
|
-
});
|
|
3303
|
-
/**
|
|
3304
|
-
* @return {?}
|
|
3305
|
-
*/
|
|
3306
|
-
NgSelectComponent.prototype.showNoItemsFound = /**
|
|
3307
|
-
* @return {?}
|
|
3308
|
-
*/
|
|
3309
|
-
function () {
|
|
3310
|
-
/** @type {?} */
|
|
3311
|
-
var empty = this.itemsList.filteredItems.length === 0;
|
|
3312
|
-
return ((empty && !this._isTypeahead && !this.loading) ||
|
|
3313
|
-
(empty && this._isTypeahead && this.filterValue && !this.loading)) &&
|
|
3314
|
-
!this.showAddTag;
|
|
3315
|
-
};
|
|
3316
|
-
/**
|
|
3317
|
-
* @return {?}
|
|
3318
|
-
*/
|
|
3319
|
-
NgSelectComponent.prototype.showTypeToSearch = /**
|
|
3320
|
-
* @return {?}
|
|
3321
|
-
*/
|
|
3322
|
-
function () {
|
|
3323
|
-
/** @type {?} */
|
|
3324
|
-
var empty = this.itemsList.filteredItems.length === 0;
|
|
3325
|
-
return empty && this._isTypeahead && !this.filterValue && !this.loading;
|
|
3326
|
-
};
|
|
3327
|
-
/**
|
|
3328
|
-
* @param {?} term
|
|
3329
|
-
* @return {?}
|
|
3330
|
-
*/
|
|
3331
|
-
NgSelectComponent.prototype.filter = /**
|
|
3332
|
-
* @param {?} term
|
|
3333
|
-
* @return {?}
|
|
3334
|
-
*/
|
|
3335
|
-
function (term) {
|
|
3336
|
-
this.filterValue = term;
|
|
3337
|
-
if (this._isTypeahead) {
|
|
3338
|
-
this.typeahead.next(this.filterValue);
|
|
3339
|
-
}
|
|
3340
|
-
else {
|
|
3341
|
-
this.itemsList.filter(this.filterValue);
|
|
3342
|
-
if (this.isOpen) {
|
|
3343
|
-
this.itemsList.markSelectedOrDefault(this.markFirst);
|
|
3344
|
-
}
|
|
3345
|
-
}
|
|
3346
|
-
this.searchEvent.emit({ term: term, items: this.itemsList.filteredItems.map(function (x) { return x.value; }) });
|
|
3347
|
-
this.open();
|
|
3348
|
-
};
|
|
3349
|
-
/**
|
|
3350
|
-
* @param {?} $event
|
|
3351
|
-
* @return {?}
|
|
3352
|
-
*/
|
|
3353
|
-
NgSelectComponent.prototype.onInputFocus = /**
|
|
3354
|
-
* @param {?} $event
|
|
3355
|
-
* @return {?}
|
|
3356
|
-
*/
|
|
3357
|
-
function ($event) {
|
|
3358
|
-
if (this.focused) {
|
|
3359
|
-
return;
|
|
3360
|
-
}
|
|
3361
|
-
this.element.classList.add('ng-select-focused');
|
|
3362
|
-
this.focusEvent.emit($event);
|
|
3363
|
-
this.focused = true;
|
|
3364
|
-
};
|
|
3365
|
-
/**
|
|
3366
|
-
* @param {?} $event
|
|
3367
|
-
* @return {?}
|
|
3368
|
-
*/
|
|
3369
|
-
NgSelectComponent.prototype.onInputBlur = /**
|
|
3370
|
-
* @param {?} $event
|
|
3371
|
-
* @return {?}
|
|
3372
|
-
*/
|
|
3373
|
-
function ($event) {
|
|
3374
|
-
this.element.classList.remove('ng-select-focused');
|
|
3375
|
-
this.blurEvent.emit($event);
|
|
3376
|
-
if (!this.isOpen && !this.disabled) {
|
|
3377
|
-
this._onTouched();
|
|
3378
|
-
}
|
|
3379
|
-
this.focused = false;
|
|
3380
|
-
};
|
|
3381
|
-
/**
|
|
3382
|
-
* @param {?} item
|
|
3383
|
-
* @return {?}
|
|
3384
|
-
*/
|
|
3385
|
-
NgSelectComponent.prototype.onItemHover = /**
|
|
3386
|
-
* @param {?} item
|
|
3387
|
-
* @return {?}
|
|
3388
|
-
*/
|
|
3389
|
-
function (item) {
|
|
3390
|
-
if (item.disabled) {
|
|
3391
|
-
return;
|
|
3392
|
-
}
|
|
3393
|
-
this.itemsList.markItem(item);
|
|
3394
|
-
};
|
|
3395
|
-
/**
|
|
3396
|
-
* @return {?}
|
|
3397
|
-
*/
|
|
3398
|
-
NgSelectComponent.prototype.detectChanges = /**
|
|
3399
|
-
* @return {?}
|
|
3400
|
-
*/
|
|
3401
|
-
function () {
|
|
3402
|
-
if (!( /** @type {?} */(this._cd)).destroyed) {
|
|
3403
|
-
this._cd.detectChanges();
|
|
3404
|
-
}
|
|
3405
|
-
};
|
|
3406
|
-
/**
|
|
3407
|
-
* @param {?} items
|
|
3408
|
-
* @return {?}
|
|
3409
|
-
*/
|
|
3410
|
-
NgSelectComponent.prototype._setItems = /**
|
|
3411
|
-
* @param {?} items
|
|
3412
|
-
* @return {?}
|
|
3413
|
-
*/
|
|
3414
|
-
function (items) {
|
|
3415
|
-
/** @type {?} */
|
|
3416
|
-
var firstItem = items[0];
|
|
3417
|
-
this.bindLabel = this.bindLabel || this._defaultLabel;
|
|
3418
|
-
this._primitive = isDefined(firstItem) ? !isObject(firstItem) : this._primitive || this.bindLabel === this._defaultLabel;
|
|
3419
|
-
this.itemsList.setItems(items);
|
|
3420
|
-
if (items.length > 0 && this.hasValue) {
|
|
3421
|
-
this.itemsList.mapSelectedItems();
|
|
3422
|
-
}
|
|
3423
|
-
if (this.isOpen && isDefined(this.filterValue) && !this._isTypeahead) {
|
|
3424
|
-
this.itemsList.filter(this.filterValue);
|
|
3425
|
-
}
|
|
3426
|
-
if (this._isTypeahead || this.isOpen) {
|
|
3427
|
-
this.itemsList.markSelectedOrDefault(this.markFirst);
|
|
3428
|
-
}
|
|
3429
|
-
};
|
|
3430
|
-
/**
|
|
3431
|
-
* @return {?}
|
|
3432
|
-
*/
|
|
3433
|
-
NgSelectComponent.prototype._setItemsFromNgOptions = /**
|
|
3434
|
-
* @return {?}
|
|
3435
|
-
*/
|
|
3436
|
-
function () {
|
|
3437
|
-
var _this = this;
|
|
3438
|
-
/** @type {?} */
|
|
3439
|
-
var handleNgOptions = function (options) {
|
|
3440
|
-
_this.items = options.map(function (option) {
|
|
3441
|
-
return ({
|
|
3442
|
-
$ngOptionValue: option.value,
|
|
3443
|
-
$ngOptionLabel: option.elementRef.nativeElement.innerHTML,
|
|
3444
|
-
disabled: option.disabled
|
|
3445
|
-
});
|
|
3446
|
-
});
|
|
3447
|
-
_this.itemsList.setItems(_this.items);
|
|
3448
|
-
if (_this.hasValue) {
|
|
3449
|
-
_this.itemsList.mapSelectedItems();
|
|
3450
|
-
}
|
|
3451
|
-
_this.detectChanges();
|
|
3452
|
-
};
|
|
3453
|
-
/** @type {?} */
|
|
3454
|
-
var handleOptionChange = function () {
|
|
3455
|
-
/** @type {?} */
|
|
3456
|
-
var changedOrDestroyed = rxjs.merge(_this.ngOptions.changes, _this._destroy$);
|
|
3457
|
-
rxjs.merge.apply(void 0, __spread(_this.ngOptions.map(function (option) { return option.stateChange$; }))).pipe(operators.takeUntil(changedOrDestroyed))
|
|
3458
|
-
.subscribe(function (option) {
|
|
3459
|
-
/** @type {?} */
|
|
3460
|
-
var item = _this.itemsList.findItem(option.value);
|
|
3461
|
-
item.disabled = option.disabled;
|
|
3462
|
-
_this._cd.markForCheck();
|
|
3463
|
-
});
|
|
3464
|
-
};
|
|
3465
|
-
this.ngOptions.changes
|
|
3466
|
-
.pipe(operators.startWith(this.ngOptions), operators.takeUntil(this._destroy$))
|
|
3467
|
-
.subscribe(function (options) {
|
|
3468
|
-
_this.bindLabel = _this._defaultLabel;
|
|
3469
|
-
handleNgOptions(options);
|
|
3470
|
-
handleOptionChange();
|
|
3471
|
-
});
|
|
3472
|
-
};
|
|
3473
|
-
/**
|
|
3474
|
-
* @param {?} value
|
|
3475
|
-
* @return {?}
|
|
3476
|
-
*/
|
|
3477
|
-
NgSelectComponent.prototype._isValidWriteValue = /**
|
|
3478
|
-
* @param {?} value
|
|
3479
|
-
* @return {?}
|
|
3480
|
-
*/
|
|
3481
|
-
function (value) {
|
|
3482
|
-
var _this = this;
|
|
3483
|
-
if (!isDefined(value) || (this.multiple && value === '') || Array.isArray(value) && value.length === 0) {
|
|
3484
|
-
return false;
|
|
3485
|
-
}
|
|
3486
|
-
/** @type {?} */
|
|
3487
|
-
var validateBinding = function (item) {
|
|
3488
|
-
if (!isDefined(_this.compareWith) && isObject(item) && _this.bindValue) {
|
|
3489
|
-
_this._console.warn("Binding object(" + JSON.stringify(item) + ") with bindValue is not allowed.");
|
|
3490
|
-
return false;
|
|
3491
|
-
}
|
|
3492
|
-
return true;
|
|
3493
|
-
};
|
|
3494
|
-
if (this.multiple) {
|
|
3495
|
-
if (!Array.isArray(value)) {
|
|
3496
|
-
this._console.warn('Multiple select ngModel should be array.');
|
|
3497
|
-
return false;
|
|
3498
|
-
}
|
|
3499
|
-
return value.every(function (item) { return validateBinding(item); });
|
|
3500
|
-
}
|
|
3501
|
-
else {
|
|
3502
|
-
return validateBinding(value);
|
|
3503
|
-
}
|
|
3504
|
-
};
|
|
3505
|
-
/**
|
|
3506
|
-
* @param {?} ngModel
|
|
3507
|
-
* @return {?}
|
|
3508
|
-
*/
|
|
3509
|
-
NgSelectComponent.prototype._handleWriteValue = /**
|
|
3510
|
-
* @param {?} ngModel
|
|
3511
|
-
* @return {?}
|
|
3512
|
-
*/
|
|
3513
|
-
function (ngModel) {
|
|
3514
|
-
var _this = this;
|
|
3515
|
-
if (!this._isValidWriteValue(ngModel)) {
|
|
3516
|
-
return;
|
|
3517
|
-
}
|
|
3518
|
-
/** @type {?} */
|
|
3519
|
-
var select = function (val) {
|
|
3520
|
-
var _a;
|
|
3521
|
-
/** @type {?} */
|
|
3522
|
-
var item = _this.itemsList.findItem(val);
|
|
3523
|
-
if (item) {
|
|
3524
|
-
_this.itemsList.select(item);
|
|
3525
|
-
}
|
|
3526
|
-
else {
|
|
3527
|
-
/** @type {?} */
|
|
3528
|
-
var isValObject = isObject(val);
|
|
3529
|
-
/** @type {?} */
|
|
3530
|
-
var isPrimitive = !isValObject && !_this.bindValue;
|
|
3531
|
-
if ((isValObject || isPrimitive)) {
|
|
3532
|
-
_this.itemsList.select(_this.itemsList.mapItem(val, null));
|
|
3533
|
-
}
|
|
3534
|
-
else if (_this.bindValue) {
|
|
3535
|
-
item = (_a = {},
|
|
3536
|
-
_a[_this.bindLabel] = null,
|
|
3537
|
-
_a[_this.bindValue] = val,
|
|
3538
|
-
_a);
|
|
3539
|
-
_this.itemsList.select(_this.itemsList.mapItem(item, null));
|
|
3540
|
-
}
|
|
3541
|
-
}
|
|
3542
|
-
};
|
|
3543
|
-
if (this.multiple) {
|
|
3544
|
-
( /** @type {?} */(ngModel)).forEach(function (item) { return select(item); });
|
|
3545
|
-
}
|
|
3546
|
-
else {
|
|
3547
|
-
select(ngModel);
|
|
3548
|
-
}
|
|
3549
|
-
};
|
|
3550
|
-
/**
|
|
3551
|
-
* @return {?}
|
|
3552
|
-
*/
|
|
3553
|
-
NgSelectComponent.prototype._handleKeyPresses = /**
|
|
3554
|
-
* @return {?}
|
|
3555
|
-
*/
|
|
3556
|
-
function () {
|
|
3557
|
-
var _this = this;
|
|
3558
|
-
if (this.searchable) {
|
|
3559
|
-
return;
|
|
3560
|
-
}
|
|
3561
|
-
this._keyPress$
|
|
3562
|
-
.pipe(operators.takeUntil(this._destroy$), operators.tap(function (letter) { return _this._pressedKeys.push(letter); }), operators.debounceTime(200), operators.filter(function () { return _this._pressedKeys.length > 0; }), operators.map(function () { return _this._pressedKeys.join(''); }))
|
|
3563
|
-
.subscribe(function (term) {
|
|
3564
|
-
/** @type {?} */
|
|
3565
|
-
var item = _this.itemsList.findByLabel(term);
|
|
3566
|
-
if (item) {
|
|
3567
|
-
if (_this.isOpen) {
|
|
3568
|
-
_this.itemsList.markItem(item);
|
|
3569
|
-
_this._cd.markForCheck();
|
|
3570
|
-
}
|
|
3571
|
-
else {
|
|
3572
|
-
_this.select(item);
|
|
3573
|
-
}
|
|
3574
|
-
}
|
|
3575
|
-
_this._pressedKeys = [];
|
|
3576
|
-
});
|
|
3577
|
-
};
|
|
3578
|
-
/**
|
|
3579
|
-
* @return {?}
|
|
3580
|
-
*/
|
|
3581
|
-
NgSelectComponent.prototype._updateNgModel = /**
|
|
3582
|
-
* @return {?}
|
|
3583
|
-
*/
|
|
3584
|
-
function () {
|
|
3585
|
-
var e_1, _a;
|
|
3586
|
-
/** @type {?} */
|
|
3587
|
-
var model = [];
|
|
3588
|
-
try {
|
|
3589
|
-
for (var _b = __values(this.selectedItems), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
3590
|
-
var item = _c.value;
|
|
3591
|
-
if (this.bindValue) {
|
|
3592
|
-
/** @type {?} */
|
|
3593
|
-
var value = null;
|
|
3594
|
-
if (item.children) {
|
|
3595
|
-
/** @type {?} */
|
|
3596
|
-
var groupKey = this.groupValue ? this.bindValue : /** @type {?} */ (this.groupBy);
|
|
3597
|
-
value = item.value[groupKey || /** @type {?} */ (this.groupBy)];
|
|
3598
|
-
}
|
|
3599
|
-
else {
|
|
3600
|
-
value = this.itemsList.resolveNested(item.value, this.bindValue);
|
|
3601
|
-
}
|
|
3602
|
-
model.push(value);
|
|
3603
|
-
}
|
|
3604
|
-
else {
|
|
3605
|
-
model.push(item.value);
|
|
3606
|
-
}
|
|
3607
|
-
}
|
|
3608
|
-
}
|
|
3609
|
-
catch (e_1_1) {
|
|
3610
|
-
e_1 = { error: e_1_1 };
|
|
3611
|
-
}
|
|
3612
|
-
finally {
|
|
3613
|
-
try {
|
|
3614
|
-
if (_c && !_c.done && (_a = _b.return))
|
|
3615
|
-
_a.call(_b);
|
|
3616
|
-
}
|
|
3617
|
-
finally {
|
|
3618
|
-
if (e_1)
|
|
3619
|
-
throw e_1.error;
|
|
3620
|
-
}
|
|
3621
|
-
}
|
|
3622
|
-
/** @type {?} */
|
|
3623
|
-
var selected = this.selectedItems.map(function (x) { return x.value; });
|
|
3624
|
-
if (this.multiple) {
|
|
3625
|
-
this._onChange(model);
|
|
3626
|
-
this.changeEvent.emit(selected);
|
|
3627
|
-
}
|
|
3628
|
-
else {
|
|
3629
|
-
this._onChange(isDefined(model[0]) ? model[0] : null);
|
|
3630
|
-
this.changeEvent.emit(selected[0]);
|
|
3631
|
-
}
|
|
3632
|
-
this._cd.markForCheck();
|
|
3633
|
-
};
|
|
3634
|
-
/**
|
|
3635
|
-
* @return {?}
|
|
3636
|
-
*/
|
|
3637
|
-
NgSelectComponent.prototype._clearSearch = /**
|
|
3638
|
-
* @return {?}
|
|
3639
|
-
*/
|
|
3640
|
-
function () {
|
|
3641
|
-
if (!this.filterValue) {
|
|
3642
|
-
return;
|
|
3643
|
-
}
|
|
3644
|
-
this.filterValue = null;
|
|
3645
|
-
this.itemsList.resetFilteredItems();
|
|
3646
|
-
};
|
|
3647
|
-
/**
|
|
3648
|
-
* @return {?}
|
|
3649
|
-
*/
|
|
3650
|
-
NgSelectComponent.prototype._scrollToMarked = /**
|
|
3651
|
-
* @return {?}
|
|
3652
|
-
*/
|
|
3653
|
-
function () {
|
|
3654
|
-
if (!this.isOpen || !this.dropdownPanel) {
|
|
3655
|
-
return;
|
|
3656
|
-
}
|
|
3657
|
-
this.dropdownPanel.scrollTo(this.itemsList.markedItem);
|
|
3658
|
-
};
|
|
3659
|
-
/**
|
|
3660
|
-
* @return {?}
|
|
3661
|
-
*/
|
|
3662
|
-
NgSelectComponent.prototype._scrollToTag = /**
|
|
3663
|
-
* @return {?}
|
|
3664
|
-
*/
|
|
3665
|
-
function () {
|
|
3666
|
-
if (!this.isOpen || !this.dropdownPanel) {
|
|
3667
|
-
return;
|
|
3668
|
-
}
|
|
3669
|
-
this.dropdownPanel.scrollToTag();
|
|
3670
|
-
};
|
|
3671
|
-
/**
|
|
3672
|
-
* @return {?}
|
|
3673
|
-
*/
|
|
3674
|
-
NgSelectComponent.prototype._onSelectionChanged = /**
|
|
3675
|
-
* @return {?}
|
|
3676
|
-
*/
|
|
3677
|
-
function () {
|
|
3678
|
-
if (this.isOpen && this.multiple && this.appendTo) {
|
|
3679
|
-
// Make sure items are rendered.
|
|
3680
|
-
this._cd.detectChanges();
|
|
3681
|
-
this.dropdownPanel.adjustPosition();
|
|
3682
|
-
}
|
|
3683
|
-
};
|
|
3684
|
-
/**
|
|
3685
|
-
* @param {?} $event
|
|
3686
|
-
* @return {?}
|
|
3687
|
-
*/
|
|
3688
|
-
NgSelectComponent.prototype._handleTab = /**
|
|
3689
|
-
* @param {?} $event
|
|
3690
|
-
* @return {?}
|
|
3691
|
-
*/
|
|
3692
|
-
function ($event) {
|
|
3693
|
-
if (this.isOpen === false && !this.addTag) {
|
|
3694
|
-
return;
|
|
3695
|
-
}
|
|
3696
|
-
if (this.selectOnTab) {
|
|
3697
|
-
if (this.itemsList.markedItem) {
|
|
3698
|
-
this.toggleItem(this.itemsList.markedItem);
|
|
3699
|
-
$event.preventDefault();
|
|
3700
|
-
}
|
|
3701
|
-
else if (this.showAddTag) {
|
|
3702
|
-
this.selectTag();
|
|
3703
|
-
$event.preventDefault();
|
|
3704
|
-
}
|
|
3705
|
-
else {
|
|
3706
|
-
this.close();
|
|
3707
|
-
}
|
|
3708
|
-
}
|
|
3709
|
-
else {
|
|
3710
|
-
this.close();
|
|
3711
|
-
}
|
|
3712
|
-
};
|
|
3713
|
-
/**
|
|
3714
|
-
* @param {?} $event
|
|
3715
|
-
* @return {?}
|
|
3716
|
-
*/
|
|
3717
|
-
NgSelectComponent.prototype._handleEnter = /**
|
|
3718
|
-
* @param {?} $event
|
|
3719
|
-
* @return {?}
|
|
3720
|
-
*/
|
|
3721
|
-
function ($event) {
|
|
3722
|
-
if (this.isOpen || this._manualOpen) {
|
|
3723
|
-
if (this.itemsList.markedItem) {
|
|
3724
|
-
this.toggleItem(this.itemsList.markedItem);
|
|
3725
|
-
}
|
|
3726
|
-
else if (this.showAddTag) {
|
|
3727
|
-
this.selectTag();
|
|
3728
|
-
}
|
|
3729
|
-
}
|
|
3730
|
-
else if (this.openOnEnter) {
|
|
3731
|
-
this.open();
|
|
3732
|
-
}
|
|
3733
|
-
else {
|
|
3734
|
-
return;
|
|
3735
|
-
}
|
|
3736
|
-
$event.preventDefault();
|
|
3737
|
-
};
|
|
3738
|
-
/**
|
|
3739
|
-
* @param {?} $event
|
|
3740
|
-
* @return {?}
|
|
3741
|
-
*/
|
|
3742
|
-
NgSelectComponent.prototype._handleSpace = /**
|
|
3743
|
-
* @param {?} $event
|
|
3744
|
-
* @return {?}
|
|
3745
|
-
*/
|
|
3746
|
-
function ($event) {
|
|
3747
|
-
if (this.isOpen || this._manualOpen) {
|
|
3748
|
-
return;
|
|
3749
|
-
}
|
|
3750
|
-
this.open();
|
|
3751
|
-
$event.preventDefault();
|
|
3752
|
-
};
|
|
3753
|
-
/**
|
|
3754
|
-
* @param {?} $event
|
|
3755
|
-
* @return {?}
|
|
3756
|
-
*/
|
|
3757
|
-
NgSelectComponent.prototype._handleArrowDown = /**
|
|
3758
|
-
* @param {?} $event
|
|
3759
|
-
* @return {?}
|
|
3760
|
-
*/
|
|
3761
|
-
function ($event) {
|
|
3762
|
-
if (this._nextItemIsTag(+1)) {
|
|
3763
|
-
this.itemsList.unmarkItem();
|
|
3764
|
-
this._scrollToTag();
|
|
3765
|
-
}
|
|
3766
|
-
else {
|
|
3767
|
-
this.itemsList.markNextItem();
|
|
3768
|
-
this._scrollToMarked();
|
|
3769
|
-
}
|
|
3770
|
-
this.open();
|
|
3771
|
-
$event.preventDefault();
|
|
3772
|
-
};
|
|
3773
|
-
/**
|
|
3774
|
-
* @param {?} $event
|
|
3775
|
-
* @return {?}
|
|
3776
|
-
*/
|
|
3777
|
-
NgSelectComponent.prototype._handleArrowUp = /**
|
|
3778
|
-
* @param {?} $event
|
|
3779
|
-
* @return {?}
|
|
3780
|
-
*/
|
|
3781
|
-
function ($event) {
|
|
3782
|
-
if (!this.isOpen) {
|
|
3783
|
-
return;
|
|
3784
|
-
}
|
|
3785
|
-
if (this._nextItemIsTag(-1)) {
|
|
3786
|
-
this.itemsList.unmarkItem();
|
|
3787
|
-
this._scrollToTag();
|
|
3788
|
-
}
|
|
3789
|
-
else {
|
|
3790
|
-
this.itemsList.markPreviousItem();
|
|
3791
|
-
this._scrollToMarked();
|
|
3792
|
-
}
|
|
3793
|
-
$event.preventDefault();
|
|
3794
|
-
};
|
|
3795
|
-
/**
|
|
3796
|
-
* @param {?} nextStep
|
|
3797
|
-
* @return {?}
|
|
3798
|
-
*/
|
|
3799
|
-
NgSelectComponent.prototype._nextItemIsTag = /**
|
|
3800
|
-
* @param {?} nextStep
|
|
3801
|
-
* @return {?}
|
|
3802
|
-
*/
|
|
3803
|
-
function (nextStep) {
|
|
3804
|
-
/** @type {?} */
|
|
3805
|
-
var nextIndex = this.itemsList.markedIndex + nextStep;
|
|
3806
|
-
return this.addTag && this.filterValue
|
|
3807
|
-
&& this.itemsList.markedItem
|
|
3808
|
-
&& (nextIndex < 0 || nextIndex === this.itemsList.filteredItems.length);
|
|
3809
|
-
};
|
|
3810
|
-
/**
|
|
3811
|
-
* @return {?}
|
|
3812
|
-
*/
|
|
3813
|
-
NgSelectComponent.prototype._handleBackspace = /**
|
|
3814
|
-
* @return {?}
|
|
3815
|
-
*/
|
|
3816
|
-
function () {
|
|
3817
|
-
if (this.filterValue || !this.clearable || !this.clearOnBackspace || !this.hasValue) {
|
|
3818
|
-
return;
|
|
3819
|
-
}
|
|
3820
|
-
if (this.multiple) {
|
|
3821
|
-
this.unselect(this.itemsList.lastSelectedItem);
|
|
3822
|
-
}
|
|
3823
|
-
else {
|
|
3824
|
-
this.clearModel();
|
|
3825
|
-
}
|
|
3826
|
-
};
|
|
3827
|
-
Object.defineProperty(NgSelectComponent.prototype, "_isTypeahead", {
|
|
3828
|
-
get: /**
|
|
3829
|
-
* @return {?}
|
|
3830
|
-
*/ function () {
|
|
3831
|
-
return this.typeahead && this.typeahead.observers.length > 0;
|
|
3832
|
-
},
|
|
3833
|
-
enumerable: true,
|
|
3834
|
-
configurable: true
|
|
3835
|
-
});
|
|
3836
|
-
/**
|
|
3837
|
-
* @param {?} config
|
|
3838
|
-
* @return {?}
|
|
3839
|
-
*/
|
|
3840
|
-
NgSelectComponent.prototype._mergeGlobalConfig = /**
|
|
3841
|
-
* @param {?} config
|
|
3842
|
-
* @return {?}
|
|
3843
|
-
*/
|
|
3844
|
-
function (config) {
|
|
3845
|
-
this.placeholder = this.placeholder || config.placeholder;
|
|
3846
|
-
this.notFoundText = this.notFoundText || config.notFoundText;
|
|
3847
|
-
this.typeToSearchText = this.typeToSearchText || config.typeToSearchText;
|
|
3848
|
-
this.addTagText = this.addTagText || config.addTagText;
|
|
3849
|
-
this.loadingText = this.loadingText || config.loadingText;
|
|
3850
|
-
this.clearAllText = this.clearAllText || config.clearAllText;
|
|
3851
|
-
this.virtualScroll = isDefined(this.virtualScroll)
|
|
3852
|
-
? this.virtualScroll
|
|
3853
|
-
: isDefined(config.disableVirtualScroll) ? !config.disableVirtualScroll : false;
|
|
3854
|
-
this.openOnEnter = isDefined(this.openOnEnter) ? this.openOnEnter : config.openOnEnter;
|
|
3855
|
-
};
|
|
3856
|
-
NgSelectComponent.decorators = [
|
|
3857
|
-
{ type: i0.Component, args: [{
|
|
3858
|
-
selector: 'ng-select',
|
|
3859
|
-
template: "<div (mousedown)=\"handleMousedown($event)\" [class.ng-has-value]=\"hasValue\" class=\"ng-select-container\">\n <div class=\"ng-value-container\">\n <div class=\"ng-placeholder\">{{placeholder}}</div>\n\n <ng-container *ngIf=\"!multiLabelTemplate && selectedItems.length > 0\">\n <div [class.ng-value-disabled]=\"item.disabled\" class=\"ng-value\" *ngFor=\"let item of selectedItems; trackBy: trackByOption\">\n <ng-template #defaultLabelTemplate>\n <span class=\"ng-value-icon left\" (click)=\"unselect(item);\" aria-hidden=\"true\">\u00D7</span>\n <span class=\"ng-value-label\">{{item.label}}</span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"labelTemplate || defaultLabelTemplate\"\n [ngTemplateOutletContext]=\"{ item: item.value, clear: clearItem, label: item.label }\">\n </ng-template>\n </div>\n </ng-container>\n\n <ng-template *ngIf=\"multiLabelTemplate && selectedValues.length > 0\"\n [ngTemplateOutlet]=\"multiLabelTemplate\"\n [ngTemplateOutletContext]=\"{ items: selectedValues, clear: clearItem }\">\n </ng-template>\n\n <div class=\"ng-input\">\n <input #filterInput\n type=\"text\"\n [attr.autocomplete]=\"labelForId ? 'off' : dropdownId\"\n [attr.id]=\"labelForId\"\n [attr.tabindex]=\"tabIndex\"\n [attr.autocorrect]=\"autoCorrect\"\n [attr.autocapitalize]=\"autoCapitalize\"\n [readOnly]=\"!searchable || itemsList.maxItemsSelected\"\n [disabled]=\"disabled\"\n [value]=\"filterValue ? filterValue : ''\"\n (input)=\"filter(filterInput.value)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (change)=\"$event.stopPropagation()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-owns]=\"isOpen ? dropdownId : null\"\n [attr.aria-activedescendant]=\"isOpen ? itemsList?.markedItem?.htmlId : null\">\n </div>\n </div>\n\n <ng-container *ngIf=\"loading\">\n <ng-template #defautlLoadingSpinnerTemplate>\n <div class=\"ng-spinner-loader\"></div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"loadingSpinnerTemplate || defautlLoadingSpinnerTemplate\">\n </ng-template>\n </ng-container>\n\n <span *ngIf=\"showClear()\" class=\"ng-clear-wrapper\" title=\"{{clearAllText}}\">\n <span class=\"ng-clear\" aria-hidden=\"true\">\u00D7</span>\n </span>\n\n <span class=\"ng-arrow-wrapper\">\n <span class=\"ng-arrow\"></span>\n </span>\n</div>\n\n<ng-dropdown-panel *ngIf=\"isOpen\"\n class=\"ng-dropdown-panel\"\n [virtualScroll]=\"virtualScroll\"\n [bufferAmount]=\"bufferAmount\"\n [appendTo]=\"appendTo\"\n [position]=\"dropdownPosition\"\n [headerTemplate]=\"headerTemplate\"\n [footerTemplate]=\"footerTemplate\"\n [filterValue]=\"filterValue\"\n [items]=\"itemsList.filteredItems\"\n [markedItem]=\"itemsList.markedItem\"\n (update)=\"viewPortItems = $event\"\n (scroll)=\"scroll.emit($event)\"\n (scrollToEnd)=\"scrollToEnd.emit($event)\"\n (outsideClick)=\"close()\"\n [class.ng-select-multiple]=\"multiple\"\n [ngClass]=\"appendTo ? classes : null\"\n [id]=\"dropdownId\">\n\n <ng-container>\n <div class=\"ng-option\" [attr.role]=\"item.children ? 'group' : 'option'\" (click)=\"toggleItem(item)\" (mouseover)=\"onItemHover(item)\"\n *ngFor=\"let item of viewPortItems; trackBy: trackByOption\"\n [class.ng-option-disabled]=\"item.disabled\"\n [class.ng-option-selected]=\"item.selected\"\n [class.ng-optgroup]=\"item.children\"\n [class.ng-option]=\"!item.children\"\n [class.ng-option-child]=\"!!item.parent\"\n [class.ng-option-marked]=\"item === itemsList.markedItem\"\n [attr.aria-selected]=\"item.selected\"\n [attr.id]=\"item?.htmlId\">\n\n <ng-template #defaultOptionTemplate>\n <span class=\"ng-option-label\">{{item.label}}</span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"item.children ? (optgroupTemplate || defaultOptionTemplate) : (optionTemplate || defaultOptionTemplate)\"\n [ngTemplateOutletContext]=\"{ item: item.value, item$:item, index: item.index, searchTerm: filterValue }\">\n </ng-template>\n </div>\n\n <div class=\"ng-option\" [class.ng-option-marked]=\"!itemsList.markedItem\" (mouseover)=\"itemsList.unmarkItem()\" role=\"option\" (click)=\"selectTag()\" *ngIf=\"showAddTag\">\n <ng-template #defaultTagTemplate>\n <span><span class=\"ng-tag-label\">{{addTagText}}</span>\"{{filterValue}}\"</span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"tagTemplate || defaultTagTemplate\"\n [ngTemplateOutletContext]=\"{ searchTerm: filterValue }\">\n </ng-template>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"showNoItemsFound()\">\n <ng-template #defaultNotFoundTemplate>\n <div class=\"ng-option ng-option-disabled\">{{notFoundText}}</div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"notFoundTemplate || defaultNotFoundTemplate\"\n [ngTemplateOutletContext]=\"{ searchTerm: filterValue }\">\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"showTypeToSearch()\">\n <ng-template #defaultTypeToSearchTemplate>\n <div class=\"ng-option ng-option-disabled\">{{typeToSearchText}}</div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"typeToSearchTemplate || defaultTypeToSearchTemplate\">\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"loading && itemsList.filteredItems.length === 0\">\n <ng-template #defaultLoadingTextTemplate>\n <div class=\"ng-option ng-option-disabled\">{{loadingText}}</div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"loadingTextTemplate || defaultLoadingTextTemplate\"\n [ngTemplateOutletContext]=\"{ searchTerm: filterValue }\">\n </ng-template>\n </ng-container>\n\n</ng-dropdown-panel>\n",
|
|
3860
|
-
providers: [{
|
|
3861
|
-
provide: forms.NG_VALUE_ACCESSOR,
|
|
3862
|
-
useExisting: i0.forwardRef(function () { return NgSelectComponent; }),
|
|
3863
|
-
multi: true
|
|
3864
|
-
}, NgDropdownPanelService],
|
|
3865
|
-
encapsulation: i0.ViewEncapsulation.None,
|
|
3866
|
-
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
3867
|
-
host: {
|
|
3868
|
-
'role': 'listbox',
|
|
3869
|
-
'class': 'ng-select',
|
|
3870
|
-
'[class.ng-select-single]': '!multiple',
|
|
3871
|
-
},
|
|
3872
|
-
styles: [".ng-select{position:relative;display:block;box-sizing:border-box}.ng-select div,.ng-select input,.ng-select span{box-sizing:border-box}.ng-select [hidden]{display:none}.ng-select.ng-select-searchable .ng-select-container .ng-value-container .ng-input{opacity:1}.ng-select.ng-select-opened .ng-select-container{z-index:1001}.ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-placeholder,.ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-value{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.ng-select.ng-select-disabled .ng-arrow-wrapper{cursor:default}.ng-select.ng-select-filtered .ng-placeholder{display:none}.ng-select .ng-select-container{color:#333;cursor:default;display:flex;outline:0;overflow:hidden;position:relative;width:100%}.ng-select .ng-select-container .ng-value-container{display:flex;flex:1}.ng-select .ng-select-container .ng-value-container .ng-input{opacity:0}.ng-select .ng-select-container .ng-value-container .ng-input>input{box-sizing:content-box;background:none;border:0;box-shadow:none;outline:0;cursor:default;width:100%}.ng-select .ng-select-container .ng-value-container .ng-input>input::-ms-clear{display:none}.ng-select .ng-select-container .ng-value-container .ng-input>input[readonly]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:0;padding:0}.ng-select.ng-select-single.ng-select-filtered .ng-select-container .ng-value-container .ng-value{visibility:hidden}.ng-select.ng-select-single .ng-select-container .ng-value-container,.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:none}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{position:absolute;left:0;width:100%}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-icon{display:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{flex-wrap:wrap}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{white-space:nowrap}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-icon{display:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{cursor:pointer}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{flex:1;z-index:2}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{position:absolute;z-index:1}.ng-select .ng-clear-wrapper{cursor:pointer;position:relative;width:17px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ng-select .ng-clear-wrapper .ng-clear{display:inline-block;font-size:18px;line-height:1;pointer-events:none}.ng-select .ng-spinner-loader{border-radius:50%;width:17px;height:17px;margin-right:5px;font-size:10px;position:relative;text-indent:-9999em;border-top:2px solid rgba(66,66,66,.2);border-right:2px solid rgba(66,66,66,.2);border-bottom:2px solid rgba(66,66,66,.2);border-left:2px solid #424242;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-animation:.8s linear infinite load8;animation:.8s linear infinite load8}.ng-select .ng-spinner-loader:after{border-radius:50%;width:17px;height:17px}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.ng-select .ng-arrow-wrapper{cursor:pointer;position:relative;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ng-select .ng-arrow-wrapper .ng-arrow{pointer-events:none;display:inline-block;height:0;width:0;position:relative}.ng-dropdown-panel{box-sizing:border-box;position:absolute;opacity:0;width:100%;z-index:1050;-webkit-overflow-scrolling:touch}.ng-dropdown-panel .ng-dropdown-panel-items{display:block;height:auto;box-sizing:border-box;max-height:240px;overflow-y:auto}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .highlighted{font-weight:700;text-decoration:underline}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.disabled{cursor:default}.ng-dropdown-panel .scroll-host{overflow:hidden;overflow-y:auto;position:relative;display:block;-webkit-overflow-scrolling:touch}.ng-dropdown-panel .scrollable-content{top:0;left:0;width:100%;height:100%;position:absolute}.ng-dropdown-panel .total-padding{width:1px;opacity:0}"]
|
|
3873
|
-
}] }
|
|
3874
|
-
];
|
|
3875
|
-
/** @nocollapse */
|
|
3876
|
-
NgSelectComponent.ctorParameters = function () {
|
|
3877
|
-
return [
|
|
3878
|
-
{ type: String, decorators: [{ type: i0.Attribute, args: ['class',] }] },
|
|
3879
|
-
{ type: String, decorators: [{ type: i0.Attribute, args: ['tabindex',] }] },
|
|
3880
|
-
{ type: undefined, decorators: [{ type: i0.Attribute, args: ['autofocus',] }] },
|
|
3881
|
-
{ type: NgSelectConfig },
|
|
3882
|
-
{ type: undefined, decorators: [{ type: i0.Inject, args: [SELECTION_MODEL_FACTORY,] }] },
|
|
3883
|
-
{ type: i0.ElementRef },
|
|
3884
|
-
{ type: i0.ChangeDetectorRef },
|
|
3885
|
-
{ type: ConsoleService }
|
|
3886
|
-
];
|
|
3887
|
-
};
|
|
3888
|
-
NgSelectComponent.propDecorators = {
|
|
3889
|
-
bindLabel: [{ type: i0.Input }],
|
|
3890
|
-
bindValue: [{ type: i0.Input }],
|
|
3891
|
-
markFirst: [{ type: i0.Input }],
|
|
3892
|
-
placeholder: [{ type: i0.Input }],
|
|
3893
|
-
notFoundText: [{ type: i0.Input }],
|
|
3894
|
-
typeToSearchText: [{ type: i0.Input }],
|
|
3895
|
-
addTagText: [{ type: i0.Input }],
|
|
3896
|
-
loadingText: [{ type: i0.Input }],
|
|
3897
|
-
clearAllText: [{ type: i0.Input }],
|
|
3898
|
-
dropdownPosition: [{ type: i0.Input }],
|
|
3899
|
-
appendTo: [{ type: i0.Input }],
|
|
3900
|
-
loading: [{ type: i0.Input }],
|
|
3901
|
-
closeOnSelect: [{ type: i0.Input }],
|
|
3902
|
-
hideSelected: [{ type: i0.Input }],
|
|
3903
|
-
selectOnTab: [{ type: i0.Input }],
|
|
3904
|
-
openOnEnter: [{ type: i0.Input }],
|
|
3905
|
-
maxSelectedItems: [{ type: i0.Input }],
|
|
3906
|
-
groupBy: [{ type: i0.Input }],
|
|
3907
|
-
groupValue: [{ type: i0.Input }],
|
|
3908
|
-
bufferAmount: [{ type: i0.Input }],
|
|
3909
|
-
virtualScroll: [{ type: i0.Input }],
|
|
3910
|
-
selectableGroup: [{ type: i0.Input }],
|
|
3911
|
-
selectableGroupAsModel: [{ type: i0.Input }],
|
|
3912
|
-
searchFn: [{ type: i0.Input }],
|
|
3913
|
-
trackByFn: [{ type: i0.Input }],
|
|
3914
|
-
excludeGroupsFromDefaultSelection: [{ type: i0.Input }],
|
|
3915
|
-
clearOnBackspace: [{ type: i0.Input }],
|
|
3916
|
-
labelForId: [{ type: i0.Input }],
|
|
3917
|
-
autoCorrect: [{ type: i0.Input }],
|
|
3918
|
-
autoCapitalize: [{ type: i0.Input }],
|
|
3919
|
-
typeahead: [{ type: i0.Input }, { type: i0.HostBinding, args: ['class.ng-select-typeahead',] }],
|
|
3920
|
-
multiple: [{ type: i0.Input }, { type: i0.HostBinding, args: ['class.ng-select-multiple',] }],
|
|
3921
|
-
addTag: [{ type: i0.Input }, { type: i0.HostBinding, args: ['class.ng-select-taggable',] }],
|
|
3922
|
-
searchable: [{ type: i0.Input }, { type: i0.HostBinding, args: ['class.ng-select-searchable',] }],
|
|
3923
|
-
clearable: [{ type: i0.Input }, { type: i0.HostBinding, args: ['class.ng-select-clearable',] }],
|
|
3924
|
-
isOpen: [{ type: i0.Input }, { type: i0.HostBinding, args: ['class.ng-select-opened',] }],
|
|
3925
|
-
items: [{ type: i0.Input }],
|
|
3926
|
-
compareWith: [{ type: i0.Input }],
|
|
3927
|
-
clearSearchOnAdd: [{ type: i0.Input }],
|
|
3928
|
-
blurEvent: [{ type: i0.Output, args: ['blur',] }],
|
|
3929
|
-
focusEvent: [{ type: i0.Output, args: ['focus',] }],
|
|
3930
|
-
changeEvent: [{ type: i0.Output, args: ['change',] }],
|
|
3931
|
-
openEvent: [{ type: i0.Output, args: ['open',] }],
|
|
3932
|
-
closeEvent: [{ type: i0.Output, args: ['close',] }],
|
|
3933
|
-
searchEvent: [{ type: i0.Output, args: ['search',] }],
|
|
3934
|
-
clearEvent: [{ type: i0.Output, args: ['clear',] }],
|
|
3935
|
-
addEvent: [{ type: i0.Output, args: ['add',] }],
|
|
3936
|
-
removeEvent: [{ type: i0.Output, args: ['remove',] }],
|
|
3937
|
-
scroll: [{ type: i0.Output, args: ['scroll',] }],
|
|
3938
|
-
scrollToEnd: [{ type: i0.Output, args: ['scrollToEnd',] }],
|
|
3939
|
-
optionTemplate: [{ type: i0.ContentChild, args: [NgOptionTemplateDirective, { read: i0.TemplateRef },] }],
|
|
3940
|
-
optgroupTemplate: [{ type: i0.ContentChild, args: [NgOptgroupTemplateDirective, { read: i0.TemplateRef },] }],
|
|
3941
|
-
labelTemplate: [{ type: i0.ContentChild, args: [NgLabelTemplateDirective, { read: i0.TemplateRef },] }],
|
|
3942
|
-
multiLabelTemplate: [{ type: i0.ContentChild, args: [NgMultiLabelTemplateDirective, { read: i0.TemplateRef },] }],
|
|
3943
|
-
headerTemplate: [{ type: i0.ContentChild, args: [NgHeaderTemplateDirective, { read: i0.TemplateRef },] }],
|
|
3944
|
-
footerTemplate: [{ type: i0.ContentChild, args: [NgFooterTemplateDirective, { read: i0.TemplateRef },] }],
|
|
3945
|
-
notFoundTemplate: [{ type: i0.ContentChild, args: [NgNotFoundTemplateDirective, { read: i0.TemplateRef },] }],
|
|
3946
|
-
typeToSearchTemplate: [{ type: i0.ContentChild, args: [NgTypeToSearchTemplateDirective, { read: i0.TemplateRef },] }],
|
|
3947
|
-
loadingTextTemplate: [{ type: i0.ContentChild, args: [NgLoadingTextTemplateDirective, { read: i0.TemplateRef },] }],
|
|
3948
|
-
tagTemplate: [{ type: i0.ContentChild, args: [NgTagTemplateDirective, { read: i0.TemplateRef },] }],
|
|
3949
|
-
loadingSpinnerTemplate: [{ type: i0.ContentChild, args: [NgLoadingSpinnerTemplateDirective, { read: i0.TemplateRef },] }],
|
|
3950
|
-
dropdownPanel: [{ type: i0.ViewChild, args: [i0.forwardRef(function () { return NgDropdownPanelComponent; }),] }],
|
|
3951
|
-
ngOptions: [{ type: i0.ContentChildren, args: [NgOptionComponent, { descendants: true },] }],
|
|
3952
|
-
filterInput: [{ type: i0.ViewChild, args: ['filterInput',] }],
|
|
3953
|
-
disabled: [{ type: i0.HostBinding, args: ['class.ng-select-disabled',] }],
|
|
3954
|
-
filtered: [{ type: i0.HostBinding, args: ['class.ng-select-filtered',] }],
|
|
3955
|
-
handleKeyDown: [{ type: i0.HostListener, args: ['keydown', ['$event'],] }]
|
|
3956
|
-
};
|
|
3957
|
-
return NgSelectComponent;
|
|
3958
|
-
}());
|
|
3959
|
-
|
|
3960
|
-
/**
|
|
3961
|
-
* @fileoverview added by tsickle
|
|
3962
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
3963
|
-
*/
|
|
3964
|
-
var NgOptionHighlightDirective = /** @class */ (function () {
|
|
3965
|
-
function NgOptionHighlightDirective(elementRef, renderer) {
|
|
3966
|
-
this.elementRef = elementRef;
|
|
3967
|
-
this.renderer = renderer;
|
|
3968
|
-
this.element = this.elementRef.nativeElement;
|
|
3969
|
-
}
|
|
3970
|
-
/**
|
|
3971
|
-
* @return {?}
|
|
3972
|
-
*/
|
|
3973
|
-
NgOptionHighlightDirective.prototype.ngOnChanges = /**
|
|
3974
|
-
* @return {?}
|
|
3975
|
-
*/
|
|
3976
|
-
function () {
|
|
3977
|
-
if (this._canHighlight) {
|
|
3978
|
-
this._highlightLabel();
|
|
3979
|
-
}
|
|
3980
|
-
};
|
|
3981
|
-
/**
|
|
3982
|
-
* @return {?}
|
|
3983
|
-
*/
|
|
3984
|
-
NgOptionHighlightDirective.prototype.ngAfterViewInit = /**
|
|
3985
|
-
* @return {?}
|
|
3986
|
-
*/
|
|
3987
|
-
function () {
|
|
3988
|
-
this.label = this.element.innerHTML;
|
|
3989
|
-
if (this._canHighlight) {
|
|
3990
|
-
this._highlightLabel();
|
|
3991
|
-
}
|
|
3992
|
-
};
|
|
3993
|
-
/**
|
|
3994
|
-
* @return {?}
|
|
3995
|
-
*/
|
|
3996
|
-
NgOptionHighlightDirective.prototype._highlightLabel = /**
|
|
3997
|
-
* @return {?}
|
|
3998
|
-
*/
|
|
3999
|
-
function () {
|
|
4000
|
-
/** @type {?} */
|
|
4001
|
-
var label = this.label;
|
|
4002
|
-
if (!this.term) {
|
|
4003
|
-
this._setInnerHtml(label);
|
|
4004
|
-
return;
|
|
4005
|
-
}
|
|
4006
|
-
/** @type {?} */
|
|
4007
|
-
var indexOfTerm = stripSpecialChars(label)
|
|
4008
|
-
.toLowerCase()
|
|
4009
|
-
.indexOf(stripSpecialChars(this.term).toLowerCase());
|
|
4010
|
-
if (indexOfTerm > -1) {
|
|
4011
|
-
this._setInnerHtml(label.substring(0, indexOfTerm)
|
|
4012
|
-
+ ("<span class=\"highlighted\">" + label.substr(indexOfTerm, this.term.length) + "</span>")
|
|
4013
|
-
+ label.substring(indexOfTerm + this.term.length, label.length));
|
|
4014
|
-
}
|
|
4015
|
-
else {
|
|
4016
|
-
this._setInnerHtml(label);
|
|
4017
|
-
}
|
|
4018
|
-
};
|
|
4019
|
-
Object.defineProperty(NgOptionHighlightDirective.prototype, "_canHighlight", {
|
|
4020
|
-
get: /**
|
|
4021
|
-
* @return {?}
|
|
4022
|
-
*/ function () {
|
|
4023
|
-
return isDefined(this.term) && isDefined(this.label);
|
|
4024
|
-
},
|
|
4025
|
-
enumerable: true,
|
|
4026
|
-
configurable: true
|
|
4027
|
-
});
|
|
4028
|
-
/**
|
|
4029
|
-
* @param {?} html
|
|
4030
|
-
* @return {?}
|
|
4031
|
-
*/
|
|
4032
|
-
NgOptionHighlightDirective.prototype._setInnerHtml = /**
|
|
4033
|
-
* @param {?} html
|
|
4034
|
-
* @return {?}
|
|
4035
|
-
*/
|
|
4036
|
-
function (html) {
|
|
4037
|
-
this.renderer.setProperty(this.elementRef.nativeElement, 'innerHTML', html);
|
|
4038
|
-
};
|
|
4039
|
-
NgOptionHighlightDirective.decorators = [
|
|
4040
|
-
{ type: i0.Directive, args: [{
|
|
4041
|
-
selector: '[ngOptionHighlight]'
|
|
4042
|
-
},] }
|
|
4043
|
-
];
|
|
4044
|
-
/** @nocollapse */
|
|
4045
|
-
NgOptionHighlightDirective.ctorParameters = function () {
|
|
4046
|
-
return [
|
|
4047
|
-
{ type: i0.ElementRef },
|
|
4048
|
-
{ type: i0.Renderer2 }
|
|
4049
|
-
];
|
|
4050
|
-
};
|
|
4051
|
-
NgOptionHighlightDirective.propDecorators = {
|
|
4052
|
-
term: [{ type: i0.Input, args: ['ngOptionHighlight',] }]
|
|
4053
|
-
};
|
|
4054
|
-
return NgOptionHighlightDirective;
|
|
4055
|
-
}());
|
|
4056
|
-
|
|
4057
|
-
/**
|
|
4058
|
-
* @fileoverview added by tsickle
|
|
4059
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
4060
|
-
*/
|
|
4061
|
-
/**
|
|
4062
|
-
* @return {?}
|
|
4063
|
-
*/
|
|
4064
|
-
function DefaultSelectionModelFactory() {
|
|
4065
|
-
return new DefaultSelectionModel();
|
|
4066
|
-
}
|
|
4067
|
-
var DefaultSelectionModel = /** @class */ (function () {
|
|
4068
|
-
function DefaultSelectionModel() {
|
|
4069
|
-
this._selected = [];
|
|
4070
|
-
}
|
|
4071
|
-
Object.defineProperty(DefaultSelectionModel.prototype, "value", {
|
|
4072
|
-
get: /**
|
|
4073
|
-
* @return {?}
|
|
4074
|
-
*/ function () {
|
|
4075
|
-
return this._selected;
|
|
4076
|
-
},
|
|
4077
|
-
enumerable: true,
|
|
4078
|
-
configurable: true
|
|
4079
|
-
});
|
|
4080
|
-
/**
|
|
4081
|
-
* @param {?} item
|
|
4082
|
-
* @param {?} multiple
|
|
4083
|
-
* @param {?} groupAsModel
|
|
4084
|
-
* @return {?}
|
|
4085
|
-
*/
|
|
4086
|
-
DefaultSelectionModel.prototype.select = /**
|
|
4087
|
-
* @param {?} item
|
|
4088
|
-
* @param {?} multiple
|
|
4089
|
-
* @param {?} groupAsModel
|
|
4090
|
-
* @return {?}
|
|
4091
|
-
*/
|
|
4092
|
-
function (item, multiple, groupAsModel) {
|
|
4093
|
-
item.selected = true;
|
|
4094
|
-
if (groupAsModel || !item.children) {
|
|
4095
|
-
this._selected.push(item);
|
|
4096
|
-
}
|
|
4097
|
-
if (multiple) {
|
|
4098
|
-
if (item.parent) {
|
|
4099
|
-
/** @type {?} */
|
|
4100
|
-
var childrenCount = item.parent.children.length;
|
|
4101
|
-
/** @type {?} */
|
|
4102
|
-
var selectedCount = item.parent.children.filter(function (x) { return x.selected; }).length;
|
|
4103
|
-
item.parent.selected = childrenCount === selectedCount;
|
|
4104
|
-
}
|
|
4105
|
-
else if (item.children) {
|
|
4106
|
-
this._setChildrenSelectedState(item.children, true);
|
|
4107
|
-
this._removeChildren(item);
|
|
4108
|
-
if (!groupAsModel) {
|
|
4109
|
-
this._selected = __spread(this._selected, item.children);
|
|
4110
|
-
}
|
|
4111
|
-
}
|
|
4112
|
-
}
|
|
4113
|
-
};
|
|
4114
|
-
/**
|
|
4115
|
-
* @param {?} item
|
|
4116
|
-
* @param {?} multiple
|
|
4117
|
-
* @return {?}
|
|
4118
|
-
*/
|
|
4119
|
-
DefaultSelectionModel.prototype.unselect = /**
|
|
4120
|
-
* @param {?} item
|
|
4121
|
-
* @param {?} multiple
|
|
4122
|
-
* @return {?}
|
|
4123
|
-
*/
|
|
4124
|
-
function (item, multiple) {
|
|
4125
|
-
var _a;
|
|
4126
|
-
this._selected = this._selected.filter(function (x) { return x !== item; });
|
|
4127
|
-
item.selected = false;
|
|
4128
|
-
if (multiple) {
|
|
4129
|
-
if (item.parent && item.parent.selected) {
|
|
4130
|
-
/** @type {?} */
|
|
4131
|
-
var children = item.parent.children;
|
|
4132
|
-
this._removeParent(item.parent);
|
|
4133
|
-
this._removeChildren(item.parent);
|
|
4134
|
-
(_a = this._selected).push.apply(_a, __spread(children.filter(function (x) { return x !== item; })));
|
|
4135
|
-
item.parent.selected = false;
|
|
4136
|
-
}
|
|
4137
|
-
else if (item.children) {
|
|
4138
|
-
this._setChildrenSelectedState(item.children, false);
|
|
4139
|
-
this._removeChildren(item);
|
|
4140
|
-
}
|
|
4141
|
-
}
|
|
4142
|
-
};
|
|
4143
|
-
/**
|
|
4144
|
-
* @param {?} keepDisabled
|
|
4145
|
-
* @return {?}
|
|
4146
|
-
*/
|
|
4147
|
-
DefaultSelectionModel.prototype.clear = /**
|
|
4148
|
-
* @param {?} keepDisabled
|
|
4149
|
-
* @return {?}
|
|
4150
|
-
*/
|
|
4151
|
-
function (keepDisabled) {
|
|
4152
|
-
this._selected = keepDisabled ? this._selected.filter(function (x) { return x.disabled; }) : [];
|
|
4153
|
-
};
|
|
4154
|
-
/**
|
|
4155
|
-
* @param {?} children
|
|
4156
|
-
* @param {?} selected
|
|
4157
|
-
* @return {?}
|
|
4158
|
-
*/
|
|
4159
|
-
DefaultSelectionModel.prototype._setChildrenSelectedState = /**
|
|
4160
|
-
* @param {?} children
|
|
4161
|
-
* @param {?} selected
|
|
4162
|
-
* @return {?}
|
|
4163
|
-
*/
|
|
4164
|
-
function (children, selected) {
|
|
4165
|
-
children.forEach(function (x) { return x.selected = selected; });
|
|
4166
|
-
};
|
|
4167
|
-
/**
|
|
4168
|
-
* @param {?} parent
|
|
4169
|
-
* @return {?}
|
|
4170
|
-
*/
|
|
4171
|
-
DefaultSelectionModel.prototype._removeChildren = /**
|
|
4172
|
-
* @param {?} parent
|
|
4173
|
-
* @return {?}
|
|
4174
|
-
*/
|
|
4175
|
-
function (parent) {
|
|
4176
|
-
this._selected = this._selected.filter(function (x) { return x.parent !== parent; });
|
|
4177
|
-
};
|
|
4178
|
-
/**
|
|
4179
|
-
* @param {?} parent
|
|
4180
|
-
* @return {?}
|
|
4181
|
-
*/
|
|
4182
|
-
DefaultSelectionModel.prototype._removeParent = /**
|
|
4183
|
-
* @param {?} parent
|
|
4184
|
-
* @return {?}
|
|
4185
|
-
*/
|
|
4186
|
-
function (parent) {
|
|
4187
|
-
this._selected = this._selected.filter(function (x) { return x !== parent; });
|
|
4188
|
-
};
|
|
4189
|
-
return DefaultSelectionModel;
|
|
4190
|
-
}());
|
|
4191
|
-
|
|
4192
|
-
/**
|
|
4193
|
-
* @fileoverview added by tsickle
|
|
4194
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
4195
|
-
*/
|
|
4196
|
-
var ɵ0 = DefaultSelectionModelFactory;
|
|
4197
|
-
var NgSelectModule = /** @class */ (function () {
|
|
4198
|
-
function NgSelectModule() {
|
|
4199
|
-
}
|
|
4200
|
-
NgSelectModule.decorators = [
|
|
4201
|
-
{ type: i0.NgModule, args: [{
|
|
4202
|
-
declarations: [
|
|
4203
|
-
NgDropdownPanelComponent,
|
|
4204
|
-
NgOptionComponent,
|
|
4205
|
-
NgSelectComponent,
|
|
4206
|
-
NgOptionHighlightDirective,
|
|
4207
|
-
NgOptgroupTemplateDirective,
|
|
4208
|
-
NgOptionTemplateDirective,
|
|
4209
|
-
NgLabelTemplateDirective,
|
|
4210
|
-
NgMultiLabelTemplateDirective,
|
|
4211
|
-
NgHeaderTemplateDirective,
|
|
4212
|
-
NgFooterTemplateDirective,
|
|
4213
|
-
NgNotFoundTemplateDirective,
|
|
4214
|
-
NgTypeToSearchTemplateDirective,
|
|
4215
|
-
NgLoadingTextTemplateDirective,
|
|
4216
|
-
NgTagTemplateDirective,
|
|
4217
|
-
NgLoadingSpinnerTemplateDirective
|
|
4218
|
-
],
|
|
4219
|
-
imports: [
|
|
4220
|
-
common.CommonModule
|
|
4221
|
-
],
|
|
4222
|
-
exports: [
|
|
4223
|
-
NgSelectComponent,
|
|
4224
|
-
NgOptionComponent,
|
|
4225
|
-
NgOptionHighlightDirective,
|
|
4226
|
-
NgOptgroupTemplateDirective,
|
|
4227
|
-
NgOptionTemplateDirective,
|
|
4228
|
-
NgLabelTemplateDirective,
|
|
4229
|
-
NgMultiLabelTemplateDirective,
|
|
4230
|
-
NgHeaderTemplateDirective,
|
|
4231
|
-
NgFooterTemplateDirective,
|
|
4232
|
-
NgNotFoundTemplateDirective,
|
|
4233
|
-
NgTypeToSearchTemplateDirective,
|
|
4234
|
-
NgLoadingTextTemplateDirective,
|
|
4235
|
-
NgTagTemplateDirective,
|
|
4236
|
-
NgLoadingSpinnerTemplateDirective
|
|
4237
|
-
],
|
|
4238
|
-
providers: [
|
|
4239
|
-
{ provide: SELECTION_MODEL_FACTORY, useValue: ɵ0 }
|
|
4240
|
-
]
|
|
4241
|
-
},] }
|
|
4242
|
-
];
|
|
4243
|
-
return NgSelectModule;
|
|
4244
|
-
}());
|
|
4245
|
-
|
|
4246
|
-
/**
|
|
4247
|
-
* @fileoverview added by tsickle
|
|
4248
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
4249
|
-
*/
|
|
4250
|
-
|
|
4251
|
-
/**
|
|
4252
|
-
* @fileoverview added by tsickle
|
|
4253
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
4254
|
-
*/
|
|
4255
|
-
|
|
4256
|
-
exports.NgSelectComponent = NgSelectComponent;
|
|
4257
|
-
exports.SELECTION_MODEL_FACTORY = SELECTION_MODEL_FACTORY;
|
|
4258
|
-
exports.NgSelectModule = NgSelectModule;
|
|
4259
|
-
exports.NgSelectConfig = NgSelectConfig;
|
|
4260
|
-
exports.ɵr = ConsoleService;
|
|
4261
|
-
exports.ɵp = NgDropdownPanelComponent;
|
|
4262
|
-
exports.ɵd = NgDropdownPanelService;
|
|
4263
|
-
exports.ɵs = NgOptionHighlightDirective;
|
|
4264
|
-
exports.ɵq = NgOptionComponent;
|
|
4265
|
-
exports.ɵj = NgFooterTemplateDirective;
|
|
4266
|
-
exports.ɵi = NgHeaderTemplateDirective;
|
|
4267
|
-
exports.ɵg = NgLabelTemplateDirective;
|
|
4268
|
-
exports.ɵo = NgLoadingSpinnerTemplateDirective;
|
|
4269
|
-
exports.ɵm = NgLoadingTextTemplateDirective;
|
|
4270
|
-
exports.ɵh = NgMultiLabelTemplateDirective;
|
|
4271
|
-
exports.ɵk = NgNotFoundTemplateDirective;
|
|
4272
|
-
exports.ɵf = NgOptgroupTemplateDirective;
|
|
4273
|
-
exports.ɵe = NgOptionTemplateDirective;
|
|
4274
|
-
exports.ɵn = NgTagTemplateDirective;
|
|
4275
|
-
exports.ɵl = NgTypeToSearchTemplateDirective;
|
|
4276
|
-
exports.ɵc = DefaultSelectionModel;
|
|
4277
|
-
exports.ɵb = DefaultSelectionModelFactory;
|
|
4278
|
-
|
|
4279
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4280
|
-
|
|
4281
|
-
})));
|
|
4282
|
-
|
|
4283
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2VsZWN0LnVtZC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJuZzovL0BuZy1zZWxlY3Qvbmctc2VsZWN0L25nLXNlbGVjdC9uZy10ZW1wbGF0ZXMuZGlyZWN0aXZlLnRzIiwibmc6Ly9Abmctc2VsZWN0L25nLXNlbGVjdC9uZy1zZWxlY3QvY29uc29sZS5zZXJ2aWNlLnRzIiwibmc6Ly9Abmctc2VsZWN0L25nLXNlbGVjdC9uZy1zZWxlY3QvdmFsdWUtdXRpbHMudHMiLCJuZzovL0BuZy1zZWxlY3Qvbmctc2VsZWN0L25nLXNlbGVjdC9zZWFyY2gtaGVscGVyLnRzIiwibmc6Ly9Abmctc2VsZWN0L25nLXNlbGVjdC9uZy1zZWxlY3QvaWQudHMiLCJuZzovL0BuZy1zZWxlY3Qvbmctc2VsZWN0L25nLXNlbGVjdC9pdGVtcy1saXN0LnRzIiwibmc6Ly9Abmctc2VsZWN0L25nLXNlbGVjdC9uZy1zZWxlY3Qvbmctc2VsZWN0LnR5cGVzLnRzIiwibmc6Ly9Abmctc2VsZWN0L25nLXNlbGVjdC9uZy1zZWxlY3QvbmctZHJvcGRvd24tcGFuZWwuc2VydmljZS50cyIsIm5nOi8vQG5nLXNlbGVjdC9uZy1zZWxlY3Qvbmctc2VsZWN0L25nLWRyb3Bkb3duLXBhbmVsLmNvbXBvbmVudC50cyIsIm5nOi8vQG5nLXNlbGVjdC9uZy1zZWxlY3Qvbmctc2VsZWN0L25nLW9wdGlvbi5jb21wb25lbnQudHMiLCJuZzovL0BuZy1zZWxlY3Qvbmctc2VsZWN0L25nLXNlbGVjdC9jb25maWcuc2VydmljZS50cyIsIm5nOi8vQG5nLXNlbGVjdC9uZy1zZWxlY3Qvbmctc2VsZWN0L25nLXNlbGVjdC5jb21wb25lbnQudHMiLCJuZzovL0BuZy1zZWxlY3Qvbmctc2VsZWN0L25nLXNlbGVjdC9uZy1vcHRpb24taGlnaGxpZ2h0LmRpcmVjdGl2ZS50cyIsIm5nOi8vQG5nLXNlbGVjdC9uZy1zZWxlY3Qvbmctc2VsZWN0L3NlbGVjdGlvbi1tb2RlbC50cyIsIm5nOi8vQG5nLXNlbGVjdC9uZy1zZWxlY3Qvbmctc2VsZWN0L25nLXNlbGVjdC5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xyXG4gICAgcmVzdWx0LmRlZmF1bHQgPSBtb2Q7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG4iLCJpbXBvcnQgeyBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tuZy1vcHRpb24tdG1wXScgfSlcbmV4cG9ydCBjbGFzcyBOZ09wdGlvblRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbbmctb3B0Z3JvdXAtdG1wXScgfSlcbmV4cG9ydCBjbGFzcyBOZ09wdGdyb3VwVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgeyB9XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tuZy1sYWJlbC10bXBdJyB9KVxuZXhwb3J0IGNsYXNzIE5nTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7IH1cbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW25nLW11bHRpLWxhYmVsLXRtcF0nIH0pXG5leHBvcnQgY2xhc3MgTmdNdWx0aUxhYmVsVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgeyB9XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tuZy1oZWFkZXItdG1wXScgfSlcbmV4cG9ydCBjbGFzcyBOZ0hlYWRlclRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbbmctZm9vdGVyLXRtcF0nIH0pXG5leHBvcnQgY2xhc3MgTmdGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7IH1cbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW25nLW5vdGZvdW5kLXRtcF0nIH0pXG5leHBvcnQgY2xhc3MgTmdOb3RGb3VuZFRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbbmctdHlwZXRvc2VhcmNoLXRtcF0nIH0pXG5leHBvcnQgY2xhc3MgTmdUeXBlVG9TZWFyY2hUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7IH1cbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW25nLWxvYWRpbmd0ZXh0LXRtcF0nIH0pXG5leHBvcnQgY2xhc3MgTmdMb2FkaW5nVGV4dFRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbbmctdGFnLXRtcF0nIH0pXG5leHBvcnQgY2xhc3MgTmdUYWdUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7IH1cbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW25nLWxvYWRpbmdzcGlubmVyLXRtcF0nIH0pXG5leHBvcnQgY2xhc3MgTmdMb2FkaW5nU3Bpbm5lclRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIENvbnNvbGVTZXJ2aWNlIHtcbiAgICB3YXJuKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSlcbiAgICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBpc0RlZmluZWQodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb247XG59XG4iLCJjb25zdCBkaWFjcml0aWNzID0ge1xuICAgICdcXHUyNEI2JzogJ0EnLFxuICAgICdcXHVGRjIxJzogJ0EnLFxuICAgICdcXHUwMEMwJzogJ0EnLFxuICAgICdcXHUwMEMxJzogJ0EnLFxuICAgICdcXHUwMEMyJzogJ0EnLFxuICAgICdcXHUxRUE2JzogJ0EnLFxuICAgICdcXHUxRUE0JzogJ0EnLFxuICAgICdcXHUxRUFBJzogJ0EnLFxuICAgICdcXHUxRUE4JzogJ0EnLFxuICAgICdcXHUwMEMzJzogJ0EnLFxuICAgICdcXHUwMTAwJzogJ0EnLFxuICAgICdcXHUwMTAyJzogJ0EnLFxuICAgICdcXHUxRUIwJzogJ0EnLFxuICAgICdcXHUxRUFFJzogJ0EnLFxuICAgICdcXHUxRUI0JzogJ0EnLFxuICAgICdcXHUxRUIyJzogJ0EnLFxuICAgICdcXHUwMjI2JzogJ0EnLFxuICAgICdcXHUwMUUwJzogJ0EnLFxuICAgICdcXHUwMEM0JzogJ0EnLFxuICAgICdcXHUwMURFJzogJ0EnLFxuICAgICdcXHUxRUEyJzogJ0EnLFxuICAgICdcXHUwMEM1JzogJ0EnLFxuICAgICdcXHUwMUZBJzogJ0EnLFxuICAgICdcXHUwMUNEJzogJ0EnLFxuICAgICdcXHUwMjAwJzogJ0EnLFxuICAgICdcXHUwMjAyJzogJ0EnLFxuICAgICdcXHUxRUEwJzogJ0EnLFxuICAgICdcXHUxRUFDJzogJ0EnLFxuICAgICdcXHUxRUI2JzogJ0EnLFxuICAgICdcXHUxRTAwJzogJ0EnLFxuICAgICdcXHUwMTA0JzogJ0EnLFxuICAgICdcXHUwMjNBJzogJ0EnLFxuICAgICdcXHUyQzZGJzogJ0EnLFxuICAgICdcXHVBNzMyJzogJ0FBJyxcbiAgICAnXFx1MDBDNic6ICdBRScsXG4gICAgJ1xcdTAxRkMnOiAnQUUnLFxuICAgICdcXHUwMUUyJzogJ0FFJyxcbiAgICAnXFx1QTczNCc6ICdBTycsXG4gICAgJ1xcdUE3MzYnOiAnQVUnLFxuICAgICdcXHVBNzM4JzogJ0FWJyxcbiAgICAnXFx1QTczQSc6ICdBVicsXG4gICAgJ1xcdUE3M0MnOiAnQVknLFxuICAgICdcXHUyNEI3JzogJ0InLFxuICAgICdcXHVGRjIyJzogJ0InLFxuICAgICdcXHUxRTAyJzogJ0InLFxuICAgICdcXHUxRTA0JzogJ0InLFxuICAgICdcXHUxRTA2JzogJ0InLFxuICAgICdcXHUwMjQzJzogJ0InLFxuICAgICdcXHUwMTgyJzogJ0InLFxuICAgICdcXHUwMTgxJzogJ0InLFxuICAgICdcXHUyNEI4JzogJ0MnLFxuICAgICdcXHVGRjIzJzogJ0MnLFxuICAgICdcXHUwMTA2JzogJ0MnLFxuICAgICdcXHUwMTA4JzogJ0MnLFxuICAgICdcXHUwMTBBJzogJ0MnLFxuICAgICdcXHUwMTBDJzogJ0MnLFxuICAgICdcXHUwMEM3JzogJ0MnLFxuICAgICdcXHUxRTA4JzogJ0MnLFxuICAgICdcXHUwMTg3JzogJ0MnLFxuICAgICdcXHUwMjNCJzogJ0MnLFxuICAgICdcXHVBNzNFJzogJ0MnLFxuICAgICdcXHUyNEI5JzogJ0QnLFxuICAgICdcXHVGRjI0JzogJ0QnLFxuICAgICdcXHUxRTBBJzogJ0QnLFxuICAgICdcXHUwMTBFJzogJ0QnLFxuICAgICdcXHUxRTBDJzogJ0QnLFxuICAgICdcXHUxRTEwJzogJ0QnLFxuICAgICdcXHUxRTEyJzogJ0QnLFxuICAgICdcXHUxRTBFJzogJ0QnLFxuICAgICdcXHUwMTEwJzogJ0QnLFxuICAgICdcXHUwMThCJzogJ0QnLFxuICAgICdcXHUwMThBJzogJ0QnLFxuICAgICdcXHUwMTg5JzogJ0QnLFxuICAgICdcXHVBNzc5JzogJ0QnLFxuICAgICdcXHUwMUYxJzogJ0RaJyxcbiAgICAnXFx1MDFDNCc6ICdEWicsXG4gICAgJ1xcdTAxRjInOiAnRHonLFxuICAgICdcXHUwMUM1JzogJ0R6JyxcbiAgICAnXFx1MjRCQSc6ICdFJyxcbiAgICAnXFx1RkYyNSc6ICdFJyxcbiAgICAnXFx1MDBDOCc6ICdFJyxcbiAgICAnXFx1MDBDOSc6ICdFJyxcbiAgICAnXFx1MDBDQSc6ICdFJyxcbiAgICAnXFx1MUVDMCc6ICdFJyxcbiAgICAnXFx1MUVCRSc6ICdFJyxcbiAgICAnXFx1MUVDNCc6ICdFJyxcbiAgICAnXFx1MUVDMic6ICdFJyxcbiAgICAnXFx1MUVCQyc6ICdFJyxcbiAgICAnXFx1MDExMic6ICdFJyxcbiAgICAnXFx1MUUxNCc6ICdFJyxcbiAgICAnXFx1MUUxNic6ICdFJyxcbiAgICAnXFx1MDExNCc6ICdFJyxcbiAgICAnXFx1MDExNic6ICdFJyxcbiAgICAnXFx1MDBDQic6ICdFJyxcbiAgICAnXFx1MUVCQSc6ICdFJyxcbiAgICAnXFx1MDExQSc6ICdFJyxcbiAgICAnXFx1MDIwNCc6ICdFJyxcbiAgICAnXFx1MDIwNic6ICdFJyxcbiAgICAnXFx1MUVCOCc6ICdFJyxcbiAgICAnXFx1MUVDNic6ICdFJyxcbiAgICAnXFx1MDIyOCc6ICdFJyxcbiAgICAnXFx1MUUxQyc6ICdFJyxcbiAgICAnXFx1MDExOCc6ICdFJyxcbiAgICAnXFx1MUUxOCc6ICdFJyxcbiAgICAnXFx1MUUxQSc6ICdFJyxcbiAgICAnXFx1MDE5MCc6ICdFJyxcbiAgICAnXFx1MDE4RSc6ICdFJyxcbiAgICAnXFx1MjRCQic6ICdGJyxcbiAgICAnXFx1RkYyNic6ICdGJyxcbiAgICAnXFx1MUUxRSc6ICdGJyxcbiAgICAnXFx1MDE5MSc6ICdGJyxcbiAgICAnXFx1QTc3Qic6ICdGJyxcbiAgICAnXFx1MjRCQyc6ICdHJyxcbiAgICAnXFx1RkYyNyc6ICdHJyxcbiAgICAnXFx1MDFGNCc6ICdHJyxcbiAgICAnXFx1MDExQyc6ICdHJyxcbiAgICAnXFx1MUUyMCc6ICdHJyxcbiAgICAnXFx1MDExRSc6ICdHJyxcbiAgICAnXFx1MDEyMCc6ICdHJyxcbiAgICAnXFx1MDFFNic6ICdHJyxcbiAgICAnXFx1MDEyMic6ICdHJyxcbiAgICAnXFx1MDFFNCc6ICdHJyxcbiAgICAnXFx1MDE5Myc6ICdHJyxcbiAgICAnXFx1QTdBMCc6ICdHJyxcbiAgICAnXFx1QTc3RCc6ICdHJyxcbiAgICAnXFx1QTc3RSc6ICdHJyxcbiAgICAnXFx1MjRCRCc6ICdIJyxcbiAgICAnXFx1RkYyOCc6ICdIJyxcbiAgICAnXFx1MDEyNCc6ICdIJyxcbiAgICAnXFx1MUUyMic6ICdIJyxcbiAgICAnXFx1MUUyNic6ICdIJyxcbiAgICAnXFx1MDIxRSc6ICdIJyxcbiAgICAnXFx1MUUyNCc6ICdIJyxcbiAgICAnXFx1MUUyOCc6ICdIJyxcbiAgICAnXFx1MUUyQSc6ICdIJyxcbiAgICAnXFx1MDEyNic6ICdIJyxcbiAgICAnXFx1MkM2Nyc6ICdIJyxcbiAgICAnXFx1MkM3NSc6ICdIJyxcbiAgICAnXFx1QTc4RCc6ICdIJyxcbiAgICAnXFx1MjRCRSc6ICdJJyxcbiAgICAnXFx1RkYyOSc6ICdJJyxcbiAgICAnXFx1MDBDQyc6ICdJJyxcbiAgICAnXFx1MDBDRCc6ICdJJyxcbiAgICAnXFx1MDBDRSc6ICdJJyxcbiAgICAnXFx1MDEyOCc6ICdJJyxcbiAgICAnXFx1MDEyQSc6ICdJJyxcbiAgICAnXFx1MDEyQyc6ICdJJyxcbiAgICAnXFx1MDEzMCc6ICdJJyxcbiAgICAnXFx1MDBDRic6ICdJJyxcbiAgICAnXFx1MUUyRSc6ICdJJyxcbiAgICAnXFx1MUVDOCc6ICdJJyxcbiAgICAnXFx1MDFDRic6ICdJJyxcbiAgICAnXFx1MDIwOCc6ICdJJyxcbiAgICAnXFx1MDIwQSc6ICdJJyxcbiAgICAnXFx1MUVDQSc6ICdJJyxcbiAgICAnXFx1MDEyRSc6ICdJJyxcbiAgICAnXFx1MUUyQyc6ICdJJyxcbiAgICAnXFx1MDE5Nyc6ICdJJyxcbiAgICAnXFx1MjRCRic6ICdKJyxcbiAgICAnXFx1RkYyQSc6ICdKJyxcbiAgICAnXFx1MDEzNCc6ICdKJyxcbiAgICAnXFx1MDI0OCc6ICdKJyxcbiAgICAnXFx1MjRDMCc6ICdLJyxcbiAgICAnXFx1RkYyQic6ICdLJyxcbiAgICAnXFx1MUUzMCc6ICdLJyxcbiAgICAnXFx1MDFFOCc6ICdLJyxcbiAgICAnXFx1MUUzMic6ICdLJyxcbiAgICAnXFx1MDEzNic6ICdLJyxcbiAgICAnXFx1MUUzNCc6ICdLJyxcbiAgICAnXFx1MDE5OCc6ICdLJyxcbiAgICAnXFx1MkM2OSc6ICdLJyxcbiAgICAnXFx1QTc0MCc6ICdLJyxcbiAgICAnXFx1QTc0Mic6ICdLJyxcbiAgICAnXFx1QTc0NCc6ICdLJyxcbiAgICAnXFx1QTdBMic6ICdLJyxcbiAgICAnXFx1MjRDMSc6ICdMJyxcbiAgICAnXFx1RkYyQyc6ICdMJyxcbiAgICAnXFx1MDEzRic6ICdMJyxcbiAgICAnXFx1MDEzOSc6ICdMJyxcbiAgICAnXFx1MDEzRCc6ICdMJyxcbiAgICAnXFx1MUUzNic6ICdMJyxcbiAgICAnXFx1MUUzOCc6ICdMJyxcbiAgICAnXFx1MDEzQic6ICdMJyxcbiAgICAnXFx1MUUzQyc6ICdMJyxcbiAgICAnXFx1MUUzQSc6ICdMJyxcbiAgICAnXFx1MDE0MSc6ICdMJyxcbiAgICAnXFx1MDIzRCc6ICdMJyxcbiAgICAnXFx1MkM2Mic6ICdMJyxcbiAgICAnXFx1MkM2MCc6ICdMJyxcbiAgICAnXFx1QTc0OCc6ICdMJyxcbiAgICAnXFx1QTc0Nic6ICdMJyxcbiAgICAnXFx1QTc4MCc6ICdMJyxcbiAgICAnXFx1MDFDNyc6ICdMSicsXG4gICAgJ1xcdTAxQzgnOiAnTGonLFxuICAgICdcXHUyNEMyJzogJ00nLFxuICAgICdcXHVGRjJEJzogJ00nLFxuICAgICdcXHUxRTNFJzogJ00nLFxuICAgICdcXHUxRTQwJzogJ00nLFxuICAgICdcXHUxRTQyJzogJ00nLFxuICAgICdcXHUyQzZFJzogJ00nLFxuICAgICdcXHUwMTlDJzogJ00nLFxuICAgICdcXHUyNEMzJzogJ04nLFxuICAgICdcXHVGRjJFJzogJ04nLFxuICAgICdcXHUwMUY4JzogJ04nLFxuICAgICdcXHUwMTQzJzogJ04nLFxuICAgICdcXHUwMEQxJzogJ04nLFxuICAgICdcXHUxRTQ0JzogJ04nLFxuICAgICdcXHUwMTQ3JzogJ04nLFxuICAgICdcXHUxRTQ2JzogJ04nLFxuICAgICdcXHUwMTQ1JzogJ04nLFxuICAgICdcXHUxRTRBJzogJ04nLFxuICAgICdcXHUxRTQ4JzogJ04nLFxuICAgICdcXHUwMjIwJzogJ04nLFxuICAgICdcXHUwMTlEJzogJ04nLFxuICAgICdcXHVBNzkwJzogJ04nLFxuICAgICdcXHVBN0E0JzogJ04nLFxuICAgICdcXHUwMUNBJzogJ05KJyxcbiAgICAnXFx1MDFDQic6ICdOaicsXG4gICAgJ1xcdTI0QzQnOiAnTycsXG4gICAgJ1xcdUZGMkYnOiAnTycsXG4gICAgJ1xcdTAwRDInOiAnTycsXG4gICAgJ1xcdTAwRDMnOiAnTycsXG4gICAgJ1xcdTAwRDQnOiAnTycsXG4gICAgJ1xcdTFFRDInOiAnTycsXG4gICAgJ1xcdTFFRDAnOiAnTycsXG4gICAgJ1xcdTFFRDYnOiAnTycsXG4gICAgJ1xcdTFFRDQnOiAnTycsXG4gICAgJ1xcdTAwRDUnOiAnTycsXG4gICAgJ1xcdTFFNEMnOiAnTycsXG4gICAgJ1xcdTAyMkMnOiAnTycsXG4gICAgJ1xcdTFFNEUnOiAnTycsXG4gICAgJ1xcdTAxNEMnOiAnTycsXG4gICAgJ1xcdTFFNTAnOiAnTycsXG4gICAgJ1xcdTFFNTInOiAnTycsXG4gICAgJ1xcdTAxNEUnOiAnTycsXG4gICAgJ1xcdTAyMkUnOiAnTycsXG4gICAgJ1xcdTAyMzAnOiAnTycsXG4gICAgJ1xcdTAwRDYnOiAnTycsXG4gICAgJ1xcdTAyMkEnOiAnTycsXG4gICAgJ1xcdTFFQ0UnOiAnTycsXG4gICAgJ1xcdTAxNTAnOiAnTycsXG4gICAgJ1xcdTAxRDEnOiAnTycsXG4gICAgJ1xcdTAyMEMnOiAnTycsXG4gICAgJ1xcdTAyMEUnOiAnTycsXG4gICAgJ1xcdTAxQTAnOiAnTycsXG4gICAgJ1xcdTFFREMnOiAnTycsXG4gICAgJ1xcdTFFREEnOiAnTycsXG4gICAgJ1xcdTFFRTAnOiAnTycsXG4gICAgJ1xcdTFFREUnOiAnTycsXG4gICAgJ1xcdTFFRTInOiAnTycsXG4gICAgJ1xcdTFFQ0MnOiAnTycsXG4gICAgJ1xcdTFFRDgnOiAnTycsXG4gICAgJ1xcdTAxRUEnOiAnTycsXG4gICAgJ1xcdTAxRUMnOiAnTycsXG4gICAgJ1xcdTAwRDgnOiAnTycsXG4gICAgJ1xcdTAxRkUnOiAnTycsXG4gICAgJ1xcdTAxODYnOiAnTycsXG4gICAgJ1xcdTAxOUYnOiAnTycsXG4gICAgJ1xcdUE3NEEnOiAnTycsXG4gICAgJ1xcdUE3NEMnOiAnTycsXG4gICAgJ1xcdTAxQTInOiAnT0knLFxuICAgICdcXHVBNzRFJzogJ09PJyxcbiAgICAnXFx1MDIyMic6ICdPVScsXG4gICAgJ1xcdTI0QzUnOiAnUCcsXG4gICAgJ1xcdUZGMzAnOiAnUCcsXG4gICAgJ1xcdTFFNTQnOiAnUCcsXG4gICAgJ1xcdTFFNTYnOiAnUCcsXG4gICAgJ1xcdTAxQTQnOiAnUCcsXG4gICAgJ1xcdTJDNjMnOiAnUCcsXG4gICAgJ1xcdUE3NTAnOiAnUCcsXG4gICAgJ1xcdUE3NTInOiAnUCcsXG4gICAgJ1xcdUE3NTQnOiAnUCcsXG4gICAgJ1xcdTI0QzYnOiAnUScsXG4gICAgJ1xcdUZGMzEnOiAnUScsXG4gICAgJ1xcdUE3NTYnOiAnUScsXG4gICAgJ1xcdUE3NTgnOiAnUScsXG4gICAgJ1xcdTAyNEEnOiAnUScsXG4gICAgJ1xcdTI0QzcnOiAnUicsXG4gICAgJ1xcdUZGMzInOiAnUicsXG4gICAgJ1xcdTAxNTQnOiAnUicsXG4gICAgJ1xcdTFFNTgnOiAnUicsXG4gICAgJ1xcdTAxNTgnOiAnUicsXG4gICAgJ1xcdTAyMTAnOiAnUicsXG4gICAgJ1xcdTAyMTInOiAnUicsXG4gICAgJ1xcdTFFNUEnOiAnUicsXG4gICAgJ1xcdTFFNUMnOiAnUicsXG4gICAgJ1xcdTAxNTYnOiAnUicsXG4gICAgJ1xcdTFFNUUnOiAnUicsXG4gICAgJ1xcdTAyNEMnOiAnUicsXG4gICAgJ1xcdTJDNjQnOiAnUicsXG4gICAgJ1xcdUE3NUEnOiAnUicsXG4gICAgJ1xcdUE3QTYnOiAnUicsXG4gICAgJ1xcdUE3ODInOiAnUicsXG4gICAgJ1xcdTI0QzgnOiAnUycsXG4gICAgJ1xcdUZGMzMnOiAnUycsXG4gICAgJ1xcdTFFOUUnOiAnUycsXG4gICAgJ1xcdTAxNUEnOiAnUycsXG4gICAgJ1xcdTFFNjQnOiAnUycsXG4gICAgJ1xcdTAxNUMnOiAnUycsXG4gICAgJ1xcdTFFNjAnOiAnUycsXG4gICAgJ1xcdTAxNjAnOiAnUycsXG4gICAgJ1xcdTFFNjYnOiAnUycsXG4gICAgJ1xcdTFFNjInOiAnUycsXG4gICAgJ1xcdTFFNjgnOiAnUycsXG4gICAgJ1xcdTAyMTgnOiAnUycsXG4gICAgJ1xcdTAxNUUnOiAnUycsXG4gICAgJ1xcdTJDN0UnOiAnUycsXG4gICAgJ1xcdUE3QTgnOiAnUycsXG4gICAgJ1xcdUE3ODQnOiAnUycsXG4gICAgJ1xcdTI0QzknOiAnVCcsXG4gICAgJ1xcdUZGMzQnOiAnVCcsXG4gICAgJ1xcdTFFNkEnOiAnVCcsXG4gICAgJ1xcdTAxNjQnOiAnVCcsXG4gICAgJ1xcdTFFNkMnOiAnVCcsXG4gICAgJ1xcdTAyMUEnOiAnVCcsXG4gICAgJ1xcdTAxNjInOiAnVCcsXG4gICAgJ1xcdTFFNzAnOiAnVCcsXG4gICAgJ1xcdTFFNkUnOiAnVCcsXG4gICAgJ1xcdTAxNjYnOiAnVCcsXG4gICAgJ1xcdTAxQUMnOiAnVCcsXG4gICAgJ1xcdTAxQUUnOiAnVCcsXG4gICAgJ1xcdTAyM0UnOiAnVCcsXG4gICAgJ1xcdUE3ODYnOiAnVCcsXG4gICAgJ1xcdUE3MjgnOiAnVFonLFxuICAgICdcXHUyNENBJzogJ1UnLFxuICAgICdcXHVGRjM1JzogJ1UnLFxuICAgICdcXHUwMEQ5JzogJ1UnLFxuICAgICdcXHUwMERBJzogJ1UnLFxuICAgICdcXHUwMERCJzogJ1UnLFxuICAgICdcXHUwMTY4JzogJ1UnLFxuICAgICdcXHUxRTc4JzogJ1UnLFxuICAgICdcXHUwMTZBJzogJ1UnLFxuICAgICdcXHUxRTdBJzogJ1UnLFxuICAgICdcXHUwMTZDJzogJ1UnLFxuICAgICdcXHUwMERDJzogJ1UnLFxuICAgICdcXHUwMURCJzogJ1UnLFxuICAgICdcXHUwMUQ3JzogJ1UnLFxuICAgICdcXHUwMUQ1JzogJ1UnLFxuICAgICdcXHUwMUQ5JzogJ1UnLFxuICAgICdcXHUxRUU2JzogJ1UnLFxuICAgICdcXHUwMTZFJzogJ1UnLFxuICAgICdcXHUwMTcwJzogJ1UnLFxuICAgICdcXHUwMUQzJzogJ1UnLFxuICAgICdcXHUwMjE0JzogJ1UnLFxuICAgICdcXHUwMjE2JzogJ1UnLFxuICAgICdcXHUwMUFGJzogJ1UnLFxuICAgICdcXHUxRUVBJzogJ1UnLFxuICAgICdcXHUxRUU4JzogJ1UnLFxuICAgICdcXHUxRUVFJzogJ1UnLFxuICAgICdcXHUxRUVDJzogJ1UnLFxuICAgICdcXHUxRUYwJzogJ1UnLFxuICAgICdcXHUxRUU0JzogJ1UnLFxuICAgICdcXHUxRTcyJzogJ1UnLFxuICAgICdcXHUwMTcyJzogJ1UnLFxuICAgICdcXHUxRTc2JzogJ1UnLFxuICAgICdcXHUxRTc0JzogJ1UnLFxuICAgICdcXHUwMjQ0JzogJ1UnLFxuICAgICdcXHUyNENCJzogJ1YnLFxuICAgICdcXHVGRjM2JzogJ1YnLFxuICAgICdcXHUxRTdDJzogJ1YnLFxuICAgICdcXHUxRTdFJzogJ1YnLFxuICAgICdcXHUwMUIyJzogJ1YnLFxuICAgICdcXHVBNzVFJzogJ1YnLFxuICAgICdcXHUwMjQ1JzogJ1YnLFxuICAgICdcXHVBNzYwJzogJ1ZZJyxcbiAgICAnXFx1MjRDQyc6ICdXJyxcbiAgICAnXFx1RkYzNyc6ICdXJyxcbiAgICAnXFx1MUU4MCc6ICdXJyxcbiAgICAnXFx1MUU4Mic6ICdXJyxcbiAgICAnXFx1MDE3NCc6ICdXJyxcbiAgICAnXFx1MUU4Nic6ICdXJyxcbiAgICAnXFx1MUU4NCc6ICdXJyxcbiAgICAnXFx1MUU4OCc6ICdXJyxcbiAgICAnXFx1MkM3Mic6ICdXJyxcbiAgICAnXFx1MjRDRCc6ICdYJyxcbiAgICAnXFx1RkYzOCc6ICdYJyxcbiAgICAnXFx1MUU4QSc6ICdYJyxcbiAgICAnXFx1MUU4Qyc6ICdYJyxcbiAgICAnXFx1MjRDRSc6ICdZJyxcbiAgICAnXFx1RkYzOSc6ICdZJyxcbiAgICAnXFx1MUVGMic6ICdZJyxcbiAgICAnXFx1MDBERCc6ICdZJyxcbiAgICAnXFx1MDE3Nic6ICdZJyxcbiAgICAnXFx1MUVGOCc6ICdZJyxcbiAgICAnXFx1MDIzMic6ICdZJyxcbiAgICAnXFx1MUU4RSc6ICdZJyxcbiAgICAnXFx1MDE3OCc6ICdZJyxcbiAgICAnXFx1MUVGNic6ICdZJyxcbiAgICAnXFx1MUVGNCc6ICdZJyxcbiAgICAnXFx1MDFCMyc6ICdZJyxcbiAgICAnXFx1MDI0RSc6ICdZJyxcbiAgICAnXFx1MUVGRSc6ICdZJyxcbiAgICAnXFx1MjRDRic6ICdaJyxcbiAgICAnXFx1RkYzQSc6ICdaJyxcbiAgICAnXFx1MDE3OSc6ICdaJyxcbiAgICAnXFx1MUU5MCc6ICdaJyxcbiAgICAnXFx1MDE3Qic6ICdaJyxcbiAgICAnXFx1MDE3RCc6ICdaJyxcbiAgICAnXFx1MUU5Mic6ICdaJyxcbiAgICAnXFx1MUU5NCc6ICdaJyxcbiAgICAnXFx1MDFCNSc6ICdaJyxcbiAgICAnXFx1MDIyNCc6ICdaJyxcbiAgICAnXFx1MkM3Ric6ICdaJyxcbiAgICAnXFx1MkM2Qic6ICdaJyxcbiAgICAnXFx1QTc2Mic6ICdaJyxcbiAgICAnXFx1MjREMCc6ICdhJyxcbiAgICAnXFx1RkY0MSc6ICdhJyxcbiAgICAnXFx1MUU5QSc6ICdhJyxcbiAgICAnXFx1MDBFMCc6ICdhJyxcbiAgICAnXFx1MDBFMSc6ICdhJyxcbiAgICAnXFx1MDBFMic6ICdhJyxcbiAgICAnXFx1MUVBNyc6ICdhJyxcbiAgICAnXFx1MUVBNSc6ICdhJyxcbiAgICAnXFx1MUVBQic6ICdhJyxcbiAgICAnXFx1MUVBOSc6ICdhJyxcbiAgICAnXFx1MDBFMyc6ICdhJyxcbiAgICAnXFx1MDEwMSc6ICdhJyxcbiAgICAnXFx1MDEwMyc6ICdhJyxcbiAgICAnXFx1MUVCMSc6ICdhJyxcbiAgICAnXFx1MUVBRic6ICdhJyxcbiAgICAnXFx1MUVCNSc6ICdhJyxcbiAgICAnXFx1MUVCMyc6ICdhJyxcbiAgICAnXFx1MDIyNyc6ICdhJyxcbiAgICAnXFx1MDFFMSc6ICdhJyxcbiAgICAnXFx1MDBFNCc6ICdhJyxcbiAgICAnXFx1MDFERic6ICdhJyxcbiAgICAnXFx1MUVBMyc6ICdhJyxcbiAgICAnXFx1MDBFNSc6ICdhJyxcbiAgICAnXFx1MDFGQic6ICdhJyxcbiAgICAnXFx1MDFDRSc6ICdhJyxcbiAgICAnXFx1MDIwMSc6ICdhJyxcbiAgICAnXFx1MDIwMyc6ICdhJyxcbiAgICAnXFx1MUVBMSc6ICdhJyxcbiAgICAnXFx1MUVBRCc6ICdhJyxcbiAgICAnXFx1MUVCNyc6ICdhJyxcbiAgICAnXFx1MUUwMSc6ICdhJyxcbiAgICAnXFx1MDEwNSc6ICdhJyxcbiAgICAnXFx1MkM2NSc6ICdhJyxcbiAgICAnXFx1MDI1MCc6ICdhJyxcbiAgICAnXFx1QTczMyc6ICdhYScsXG4gICAgJ1xcdTAwRTYnOiAnYWUnLFxuICAgICdcXHUwMUZEJzogJ2FlJyxcbiAgICAnXFx1MDFFMyc6ICdhZScsXG4gICAgJ1xcdUE3MzUnOiAnYW8nLFxuICAgICdcXHVBNzM3JzogJ2F1JyxcbiAgICAnXFx1QTczOSc6ICdhdicsXG4gICAgJ1xcdUE3M0InOiAnYXYnLFxuICAgICdcXHVBNzNEJzogJ2F5JyxcbiAgICAnXFx1MjREMSc6ICdiJyxcbiAgICAnXFx1RkY0Mic6ICdiJyxcbiAgICAnXFx1MUUwMyc6ICdiJyxcbiAgICAnXFx1MUUwNSc6ICdiJyxcbiAgICAnXFx1MUUwNyc6ICdiJyxcbiAgICAnXFx1MDE4MCc6ICdiJyxcbiAgICAnXFx1MDE4Myc6ICdiJyxcbiAgICAnXFx1MDI1Myc6ICdiJyxcbiAgICAnXFx1MjREMic6ICdjJyxcbiAgICAnXFx1RkY0Myc6ICdjJyxcbiAgICAnXFx1MDEwNyc6ICdjJyxcbiAgICAnXFx1MDEwOSc6ICdjJyxcbiAgICAnXFx1MDEwQic6ICdjJyxcbiAgICAnXFx1MDEwRCc6ICdjJyxcbiAgICAnXFx1MDBFNyc6ICdjJyxcbiAgICAnXFx1MUUwOSc6ICdjJyxcbiAgICAnXFx1MDE4OCc6ICdjJyxcbiAgICAnXFx1MDIzQyc6ICdjJyxcbiAgICAnXFx1QTczRic6ICdjJyxcbiAgICAnXFx1MjE4NCc6ICdjJyxcbiAgICAnXFx1MjREMyc6ICdkJyxcbiAgICAnXFx1RkY0NCc6ICdkJyxcbiAgICAnXFx1MUUwQic6ICdkJyxcbiAgICAnXFx1MDEwRic6ICdkJyxcbiAgICAnXFx1MUUwRCc6ICdkJyxcbiAgICAnXFx1MUUxMSc6ICdkJyxcbiAgICAnXFx1MUUxMyc6ICdkJyxcbiAgICAnXFx1MUUwRic6ICdkJyxcbiAgICAnXFx1MDExMSc6ICdkJyxcbiAgICAnXFx1MDE4Qyc6ICdkJyxcbiAgICAnXFx1MDI1Nic6ICdkJyxcbiAgICAnXFx1MDI1Nyc6ICdkJyxcbiAgICAnXFx1QTc3QSc6ICdkJyxcbiAgICAnXFx1MDFGMyc6ICdkeicsXG4gICAgJ1xcdTAxQzYnOiAnZHonLFxuICAgICdcXHUyNEQ0JzogJ2UnLFxuICAgICdcXHVGRjQ1JzogJ2UnLFxuICAgICdcXHUwMEU4JzogJ2UnLFxuICAgICdcXHUwMEU5JzogJ2UnLFxuICAgICdcXHUwMEVBJzogJ2UnLFxuICAgICdcXHUxRUMxJzogJ2UnLFxuICAgICdcXHUxRUJGJzogJ2UnLFxuICAgICdcXHUxRUM1JzogJ2UnLFxuICAgICdcXHUxRUMzJzogJ2UnLFxuICAgICdcXHUxRUJEJzogJ2UnLFxuICAgICdcXHUwMTEzJzogJ2UnLFxuICAgICdcXHUxRTE1JzogJ2UnLFxuICAgICdcXHUxRTE3JzogJ2UnLFxuICAgICdcXHUwMTE1JzogJ2UnLFxuICAgICdcXHUwMTE3JzogJ2UnLFxuICAgICdcXHUwMEVCJzogJ2UnLFxuICAgICdcXHUxRUJCJzogJ2UnLFxuICAgICdcXHUwMTFCJzogJ2UnLFxuICAgICdcXHUwMjA1JzogJ2UnLFxuICAgICdcXHUwMjA3JzogJ2UnLFxuICAgICdcXHUxRUI5JzogJ2UnLFxuICAgICdcXHUxRUM3JzogJ2UnLFxuICAgICdcXHUwMjI5JzogJ2UnLFxuICAgICdcXHUxRTFEJzogJ2UnLFxuICAgICdcXHUwMTE5JzogJ2UnLFxuICAgICdcXHUxRTE5JzogJ2UnLFxuICAgICdcXHUxRTFCJzogJ2UnLFxuICAgICdcXHUwMjQ3JzogJ2UnLFxuICAgICdcXHUwMjVCJzogJ2UnLFxuICAgICdcXHUwMUREJzogJ2UnLFxuICAgICdcXHUyNEQ1JzogJ2YnLFxuICAgICdcXHVGRjQ2JzogJ2YnLFxuICAgICdcXHUxRTFGJzogJ2YnLFxuICAgICdcXHUwMTkyJzogJ2YnLFxuICAgICdcXHVBNzdDJzogJ2YnLFxuICAgICdcXHUyNEQ2JzogJ2cnLFxuICAgICdcXHVGRjQ3JzogJ2cnLFxuICAgICdcXHUwMUY1JzogJ2cnLFxuICAgICdcXHUwMTFEJzogJ2cnLFxuICAgICdcXHUxRTIxJzogJ2cnLFxuICAgICdcXHUwMTFGJzogJ2cnLFxuICAgICdcXHUwMTIxJzogJ2cnLFxuICAgICdcXHUwMUU3JzogJ2cnLFxuICAgICdcXHUwMTIzJzogJ2cnLFxuICAgICdcXHUwMUU1JzogJ2cnLFxuICAgICdcXHUwMjYwJzogJ2cnLFxuICAgICdcXHVBN0ExJzogJ2cnLFxuICAgICdcXHUxRDc5JzogJ2cnLFxuICAgICdcXHVBNzdGJzogJ2cnLFxuICAgICdcXHUyNEQ3JzogJ2gnLFxuICAgICdcXHVGRjQ4JzogJ2gnLFxuICAgICdcXHUwMTI1JzogJ2gnLFxuICAgICdcXHUxRTIzJzogJ2gnLFxuICAgICdcXHUxRTI3JzogJ2gnLFxuICAgICdcXHUwMjFGJzogJ2gnLFxuICAgICdcXHUxRTI1JzogJ2gnLFxuICAgICdcXHUxRTI5JzogJ2gnLFxuICAgICdcXHUxRTJCJzogJ2gnLFxuICAgICdcXHUxRTk2JzogJ2gnLFxuICAgICdcXHUwMTI3JzogJ2gnLFxuICAgICdcXHUyQzY4JzogJ2gnLFxuICAgICdcXHUyQzc2JzogJ2gnLFxuICAgICdcXHUwMjY1JzogJ2gnLFxuICAgICdcXHUwMTk1JzogJ2h2JyxcbiAgICAnXFx1MjREOCc6ICdpJyxcbiAgICAnXFx1RkY0OSc6ICdpJyxcbiAgICAnXFx1MDBFQyc6ICdpJyxcbiAgICAnXFx1MDBFRCc6ICdpJyxcbiAgICAnXFx1MDBFRSc6ICdpJyxcbiAgICAnXFx1MDEyOSc6ICdpJyxcbiAgICAnXFx1MDEyQic6ICdpJyxcbiAgICAnXFx1MDEyRCc6ICdpJyxcbiAgICAnXFx1MDBFRic6ICdpJyxcbiAgICAnXFx1MUUyRic6ICdpJyxcbiAgICAnXFx1MUVDOSc6ICdpJyxcbiAgICAnXFx1MDFEMCc6ICdpJyxcbiAgICAnXFx1MDIwOSc6ICdpJyxcbiAgICAnXFx1MDIwQic6ICdpJyxcbiAgICAnXFx1MUVDQic6ICdpJyxcbiAgICAnXFx1MDEyRic6ICdpJyxcbiAgICAnXFx1MUUyRCc6ICdpJyxcbiAgICAnXFx1MDI2OCc6ICdpJyxcbiAgICAnXFx1MDEzMSc6ICdpJyxcbiAgICAnXFx1MjREOSc6ICdqJyxcbiAgICAnXFx1RkY0QSc6ICdqJyxcbiAgICAnXFx1MDEzNSc6ICdqJyxcbiAgICAnXFx1MDFGMCc6ICdqJyxcbiAgICAnXFx1MDI0OSc6ICdqJyxcbiAgICAnXFx1MjREQSc6ICdrJyxcbiAgICAnXFx1RkY0Qic6ICdrJyxcbiAgICAnXFx1MUUzMSc6ICdrJyxcbiAgICAnXFx1MDFFOSc6ICdrJyxcbiAgICAnXFx1MUUzMyc6ICdrJyxcbiAgICAnXFx1MDEzNyc6ICdrJyxcbiAgICAnXFx1MUUzNSc6ICdrJyxcbiAgICAnXFx1MDE5OSc6ICdrJyxcbiAgICAnXFx1MkM2QSc6ICdrJyxcbiAgICAnXFx1QTc0MSc6ICdrJyxcbiAgICAnXFx1QTc0Myc6ICdrJyxcbiAgICAnXFx1QTc0NSc6ICdrJyxcbiAgICAnXFx1QTdBMyc6ICdrJyxcbiAgICAnXFx1MjREQic6ICdsJyxcbiAgICAnXFx1RkY0Qyc6ICdsJyxcbiAgICAnXFx1MDE0MCc6ICdsJyxcbiAgICAnXFx1MDEzQSc6ICdsJyxcbiAgICAnXFx1MDEzRSc6ICdsJyxcbiAgICAnXFx1MUUzNyc6ICdsJyxcbiAgICAnXFx1MUUzOSc6ICdsJyxcbiAgICAnXFx1MDEzQyc6ICdsJyxcbiAgICAnXFx1MUUzRCc6ICdsJyxcbiAgICAnXFx1MUUzQic6ICdsJyxcbiAgICAnXFx1MDE3Ric6ICdsJyxcbiAgICAnXFx1MDE0Mic6ICdsJyxcbiAgICAnXFx1MDE5QSc6ICdsJyxcbiAgICAnXFx1MDI2Qic6ICdsJyxcbiAgICAnXFx1MkM2MSc6ICdsJyxcbiAgICAnXFx1QTc0OSc6ICdsJyxcbiAgICAnXFx1QTc4MSc6ICdsJyxcbiAgICAnXFx1QTc0Nyc6ICdsJyxcbiAgICAnXFx1MDFDOSc6ICdsaicsXG4gICAgJ1xcdTI0REMnOiAnbScsXG4gICAgJ1xcdUZGNEQnOiAnbScsXG4gICAgJ1xcdTFFM0YnOiAnbScsXG4gICAgJ1xcdTFFNDEnOiAnbScsXG4gICAgJ1xcdTFFNDMnOiAnbScsXG4gICAgJ1xcdTAyNzEnOiAnbScsXG4gICAgJ1xcdTAyNkYnOiAnbScsXG4gICAgJ1xcdTI0REQnOiAnbicsXG4gICAgJ1xcdUZGNEUnOiAnbicsXG4gICAgJ1xcdTAxRjknOiAnbicsXG4gICAgJ1xcdTAxNDQnOiAnbicsXG4gICAgJ1xcdTAwRjEnOiAnbicsXG4gICAgJ1xcdTFFNDUnOiAnbicsXG4gICAgJ1xcdTAxNDgnOiAnbicsXG4gICAgJ1xcdTFFNDcnOiAnbicsXG4gICAgJ1xcdTAxNDYnOiAnbicsXG4gICAgJ1xcdTFFNEInOiAnbicsXG4gICAgJ1xcdTFFNDknOiAnbicsXG4gICAgJ1xcdTAxOUUnOiAnbicsXG4gICAgJ1xcdTAyNzInOiAnbicsXG4gICAgJ1xcdTAxNDknOiAnbicsXG4gICAgJ1xcdUE3OTEnOiAnbicsXG4gICAgJ1xcdUE3QTUnOiAnbicsXG4gICAgJ1xcdTAxQ0MnOiAnbmonLFxuICAgICdcXHUyNERFJzogJ28nLFxuICAgICdcXHVGRjRGJzogJ28nLFxuICAgICdcXHUwMEYyJzogJ28nLFxuICAgICdcXHUwMEYzJzogJ28nLFxuICAgICdcXHUwMEY0JzogJ28nLFxuICAgICdcXHUxRUQzJzogJ28nLFxuICAgICdcXHUxRUQxJzogJ28nLFxuICAgICdcXHUxRUQ3JzogJ28nLFxuICAgICdcXHUxRUQ1JzogJ28nLFxuICAgICdcXHUwMEY1JzogJ28nLFxuICAgICdcXHUxRTREJzogJ28nLFxuICAgICdcXHUwMjJEJzogJ28nLFxuICAgICdcXHUxRTRGJzogJ28nLFxuICAgICdcXHUwMTREJzogJ28nLFxuICAgICdcXHUxRTUxJzogJ28nLFxuICAgICdcXHUxRTUzJzogJ28nLFxuICAgICdcXHUwMTRGJzogJ28nLFxuICAgICdcXHUwMjJGJzogJ28nLFxuICAgICdcXHUwMjMxJzogJ28nLFxuICAgICdcXHUwMEY2JzogJ28nLFxuICAgICdcXHUwMjJCJzogJ28nLFxuICAgICdcXHUxRUNGJzogJ28nLFxuICAgICdcXHUwMTUxJzogJ28nLFxuICAgICdcXHUwMUQyJzogJ28nLFxuICAgICdcXHUwMjBEJzogJ28nLFxuICAgICdcXHUwMjBGJzogJ28nLFxuICAgICdcXHUwMUExJzogJ28nLFxuICAgICdcXHUxRUREJzogJ28nLFxuICAgICdcXHUxRURCJzogJ28nLFxuICAgICdcXHUxRUUxJzogJ28nLFxuICAgICdcXHUxRURGJzogJ28nLFxuICAgICdcXHUxRUUzJzogJ28nLFxuICAgICdcXHUxRUNEJzogJ28nLFxuICAgICdcXHUxRUQ5JzogJ28nLFxuICAgICdcXHUwMUVCJzogJ28nLFxuICAgICdcXHUwMUVEJzogJ28nLFxuICAgICdcXHUwMEY4JzogJ28nLFxuICAgICdcXHUwMUZGJzogJ28nLFxuICAgICdcXHUwMjU0JzogJ28nLFxuICAgICdcXHVBNzRCJzogJ28nLFxuICAgICdcXHVBNzREJzogJ28nLFxuICAgICdcXHUwMjc1JzogJ28nLFxuICAgICdcXHUwMUEzJzogJ29pJyxcbiAgICAnXFx1MDIyMyc6ICdvdScsXG4gICAgJ1xcdUE3NEYnOiAnb28nLFxuICAgICdcXHUyNERGJzogJ3AnLFxuICAgICdcXHVGRjUwJzogJ3AnLFxuICAgICdcXHUxRTU1JzogJ3AnLFxuICAgICdcXHUxRTU3JzogJ3AnLFxuICAgICdcXHUwMUE1JzogJ3AnLFxuICAgICdcXHUxRDdEJzogJ3AnLFxuICAgICdcXHVBNzUxJzogJ3AnLFxuICAgICdcXHVBNzUzJzogJ3AnLFxuICAgICdcXHVBNzU1JzogJ3AnLFxuICAgICdcXHUyNEUwJzogJ3EnLFxuICAgICdcXHVGRjUxJzogJ3EnLFxuICAgICdcXHUwMjRCJzogJ3EnLFxuICAgICdcXHVBNzU3JzogJ3EnLFxuICAgICdcXHVBNzU5JzogJ3EnLFxuICAgICdcXHUyNEUxJzogJ3InLFxuICAgICdcXHVGRjUyJzogJ3InLFxuICAgICdcXHUwMTU1JzogJ3InLFxuICAgICdcXHUxRTU5JzogJ3InLFxuICAgICdcXHUwMTU5JzogJ3InLFxuICAgICdcXHUwMjExJzogJ3InLFxuICAgICdcXHUwMjEzJzogJ3InLFxuICAgICdcXHUxRTVCJzogJ3InLFxuICAgICdcXHUxRTVEJzogJ3InLFxuICAgICdcXHUwMTU3JzogJ3InLFxuICAgICdcXHUxRTVGJzogJ3InLFxuICAgICdcXHUwMjREJzogJ3InLFxuICAgICdcXHUwMjdEJzogJ3InLFxuICAgICdcXHVBNzVCJzogJ3InLFxuICAgICdcXHVBN0E3JzogJ3InLFxuICAgICdcXHVBNzgzJzogJ3InLFxuICAgICdcXHUyNEUyJzogJ3MnLFxuICAgICdcXHVGRjUzJzogJ3MnLFxuICAgICdcXHUwMERGJzogJ3MnLFxuICAgICdcXHUwMTVCJzogJ3MnLFxuICAgICdcXHUxRTY1JzogJ3MnLFxuICAgICdcXHUwMTVEJzogJ3MnLFxuICAgICdcXHUxRTYxJzogJ3MnLFxuICAgICdcXHUwMTYxJzogJ3MnLFxuICAgICdcXHUxRTY3JzogJ3MnLFxuICAgICdcXHUxRTYzJzogJ3MnLFxuICAgICdcXHUxRTY5JzogJ3MnLFxuICAgICdcXHUwMjE5JzogJ3MnLFxuICAgICdcXHUwMTVGJzogJ3MnLFxuICAgICdcXHUwMjNGJzogJ3MnLFxuICAgICdcXHVBN0E5JzogJ3MnLFxuICAgICdcXHVBNzg1JzogJ3MnLFxuICAgICdcXHUxRTlCJzogJ3MnLFxuICAgICdcXHUyNEUzJzogJ3QnLFxuICAgICdcXHVGRjU0JzogJ3QnLFxuICAgICdcXHUxRTZCJzogJ3QnLFxuICAgICdcXHUxRTk3JzogJ3QnLFxuICAgICdcXHUwMTY1JzogJ3QnLFxuICAgICdcXHUxRTZEJzogJ3QnLFxuICAgICdcXHUwMjFCJzogJ3QnLFxuICAgICdcXHUwMTYzJzogJ3QnLFxuICAgICdcXHUxRTcxJzogJ3QnLFxuICAgICdcXHUxRTZGJzogJ3QnLFxuICAgICdcXHUwMTY3JzogJ3QnLFxuICAgICdcXHUwMUFEJzogJ3QnLFxuICAgICdcXHUwMjg4JzogJ3QnLFxuICAgICdcXHUyQzY2JzogJ3QnLFxuICAgICdcXHVBNzg3JzogJ3QnLFxuICAgICdcXHVBNzI5JzogJ3R6JyxcbiAgICAnXFx1MjRFNCc6ICd1JyxcbiAgICAnXFx1RkY1NSc6ICd1JyxcbiAgICAnXFx1MDBGOSc6ICd1JyxcbiAgICAnXFx1MDBGQSc6ICd1JyxcbiAgICAnXFx1MDBGQic6ICd1JyxcbiAgICAnXFx1MDE2OSc6ICd1JyxcbiAgICAnXFx1MUU3OSc6ICd1JyxcbiAgICAnXFx1MDE2Qic6ICd1JyxcbiAgICAnXFx1MUU3Qic6ICd1JyxcbiAgICAnXFx1MDE2RCc6ICd1JyxcbiAgICAnXFx1MDBGQyc6ICd1JyxcbiAgICAnXFx1MDFEQyc6ICd1JyxcbiAgICAnXFx1MDFEOCc6ICd1JyxcbiAgICAnXFx1MDFENic6ICd1JyxcbiAgICAnXFx1MDFEQSc6ICd1JyxcbiAgICAnXFx1MUVFNyc6ICd1JyxcbiAgICAnXFx1MDE2Ric6ICd1JyxcbiAgICAnXFx1MDE3MSc6ICd1JyxcbiAgICAnXFx1MDFENCc6ICd1JyxcbiAgICAnXFx1MDIxNSc6ICd1JyxcbiAgICAnXFx1MDIxNyc6ICd1JyxcbiAgICAnXFx1MDFCMCc6ICd1JyxcbiAgICAnXFx1MUVFQic6ICd1JyxcbiAgICAnXFx1MUVFOSc6ICd1JyxcbiAgICAnXFx1MUVFRic6ICd1JyxcbiAgICAnXFx1MUVFRCc6ICd1JyxcbiAgICAnXFx1MUVGMSc6ICd1JyxcbiAgICAnXFx1MUVFNSc6ICd1JyxcbiAgICAnXFx1MUU3Myc6ICd1JyxcbiAgICAnXFx1MDE3Myc6ICd1JyxcbiAgICAnXFx1MUU3Nyc6ICd1JyxcbiAgICAnXFx1MUU3NSc6ICd1JyxcbiAgICAnXFx1MDI4OSc6ICd1JyxcbiAgICAnXFx1MjRFNSc6ICd2JyxcbiAgICAnXFx1RkY1Nic6ICd2JyxcbiAgICAnXFx1MUU3RCc6ICd2JyxcbiAgICAnXFx1MUU3Ric6ICd2JyxcbiAgICAnXFx1MDI4Qic6ICd2JyxcbiAgICAnXFx1QTc1Ric6ICd2JyxcbiAgICAnXFx1MDI4Qyc6ICd2JyxcbiAgICAnXFx1QTc2MSc6ICd2eScsXG4gICAgJ1xcdTI0RTYnOiAndycsXG4gICAgJ1xcdUZGNTcnOiAndycsXG4gICAgJ1xcdTFFODEnOiAndycsXG4gICAgJ1xcdTFFODMnOiAndycsXG4gICAgJ1xcdTAxNzUnOiAndycsXG4gICAgJ1xcdTFFODcnOiAndycsXG4gICAgJ1xcdTFFODUnOiAndycsXG4gICAgJ1xcdTFFOTgnOiAndycsXG4gICAgJ1xcdTFFODknOiAndycsXG4gICAgJ1xcdTJDNzMnOiAndycsXG4gICAgJ1xcdTI0RTcnOiAneCcsXG4gICAgJ1xcdUZGNTgnOiAneCcsXG4gICAgJ1xcdTFFOEInOiAneCcsXG4gICAgJ1xcdTFFOEQnOiAneCcsXG4gICAgJ1xcdTI0RTgnOiAneScsXG4gICAgJ1xcdUZGNTknOiAneScsXG4gICAgJ1xcdTFFRjMnOiAneScsXG4gICAgJ1xcdTAwRkQnOiAneScsXG4gICAgJ1xcdTAxNzcnOiAneScsXG4gICAgJ1xcdTFFRjknOiAneScsXG4gICAgJ1xcdTAyMzMnOiAneScsXG4gICAgJ1xcdTFFOEYnOiAneScsXG4gICAgJ1xcdTAwRkYnOiAneScsXG4gICAgJ1xcdTFFRjcnOiAneScsXG4gICAgJ1xcdTFFOTknOiAneScsXG4gICAgJ1xcdTFFRjUnOiAneScsXG4gICAgJ1xcdTAxQjQnOiAneScsXG4gICAgJ1xcdTAyNEYnOiAneScsXG4gICAgJ1xcdTFFRkYnOiAneScsXG4gICAgJ1xcdTI0RTknOiAneicsXG4gICAgJ1xcdUZGNUEnOiAneicsXG4gICAgJ1xcdTAxN0EnOiAneicsXG4gICAgJ1xcdTFFOTEnOiAneicsXG4gICAgJ1xcdTAxN0MnOiAneicsXG4gICAgJ1xcdTAxN0UnOiAneicsXG4gICAgJ1xcdTFFOTMnOiAneicsXG4gICAgJ1xcdTFFOTUnOiAneicsXG4gICAgJ1xcdTAxQjYnOiAneicsXG4gICAgJ1xcdTAyMjUnOiAneicsXG4gICAgJ1xcdTAyNDAnOiAneicsXG4gICAgJ1xcdTJDNkMnOiAneicsXG4gICAgJ1xcdUE3NjMnOiAneicsXG4gICAgJ1xcdTAzODYnOiAnXFx1MDM5MScsXG4gICAgJ1xcdTAzODgnOiAnXFx1MDM5NScsXG4gICAgJ1xcdTAzODknOiAnXFx1MDM5NycsXG4gICAgJ1xcdTAzOEEnOiAnXFx1MDM5OScsXG4gICAgJ1xcdTAzQUEnOiAnXFx1MDM5OScsXG4gICAgJ1xcdTAzOEMnOiAnXFx1MDM5RicsXG4gICAgJ1xcdTAzOEUnOiAnXFx1MDNBNScsXG4gICAgJ1xcdTAzQUInOiAnXFx1MDNBNScsXG4gICAgJ1xcdTAzOEYnOiAnXFx1MDNBOScsXG4gICAgJ1xcdTAzQUMnOiAnXFx1MDNCMScsXG4gICAgJ1xcdTAzQUQnOiAnXFx1MDNCNScsXG4gICAgJ1xcdTAzQUUnOiAnXFx1MDNCNycsXG4gICAgJ1xcdTAzQUYnOiAnXFx1MDNCOScsXG4gICAgJ1xcdTAzQ0EnOiAnXFx1MDNCOScsXG4gICAgJ1xcdTAzOTAnOiAnXFx1MDNCOScsXG4gICAgJ1xcdTAzQ0MnOiAnXFx1MDNCRicsXG4gICAgJ1xcdTAzQ0QnOiAnXFx1MDNDNScsXG4gICAgJ1xcdTAzQ0InOiAnXFx1MDNDNScsXG4gICAgJ1xcdTAzQjAnOiAnXFx1MDNDNScsXG4gICAgJ1xcdTAzQzknOiAnXFx1MDNDOScsXG4gICAgJ1xcdTAzQzInOiAnXFx1MDNDMydcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcFNwZWNpYWxDaGFycyh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hdGNoID0gKGE6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICAgIHJldHVybiBkaWFjcml0aWNzW2FdIHx8IGE7XG4gICAgfTtcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bXlxcdTAwMDAtXFx1MDA3RV0vZywgbWF0Y2gpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIG5ld0lkKCkge1xuICAgIC8vIEZpcnN0IGNoYXJhY3RlciBpcyBhbiAnYScsIGl0J3MgZ29vZCBwcmFjdGljZSB0byB0YWcgaWQgdG8gYmVnaW4gd2l0aCBhIGxldHRlclxuICAgIHJldHVybiAnYXh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgY29uc3QgdmFsID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMDtcbiAgICAgICAgcmV0dXJuIHZhbC50b1N0cmluZygxNik7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBOZ09wdGlvbiB9IGZyb20gJy4vbmctc2VsZWN0LnR5cGVzJztcbmltcG9ydCAqIGFzIHNlYXJjaEhlbHBlciBmcm9tICcuL3NlYXJjaC1oZWxwZXInO1xuaW1wb3J0IHsgTmdTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL25nLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNEZWZpbmVkLCBpc0Z1bmN0aW9uLCBpc09iamVjdCB9IGZyb20gJy4vdmFsdWUtdXRpbHMnO1xuaW1wb3J0IHsgbmV3SWQgfSBmcm9tICcuL2lkJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnLi9zZWxlY3Rpb24tbW9kZWwnO1xuXG50eXBlIE9wdGlvbkdyb3VwcyA9IE1hcDxzdHJpbmcgfCBOZ09wdGlvbiwgTmdPcHRpb25bXT47XG5cbmV4cG9ydCBjbGFzcyBJdGVtc0xpc3Qge1xuICAgIHByaXZhdGUgX2dyb3VwczogT3B0aW9uR3JvdXBzO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX25nU2VsZWN0OiBOZ1NlbGVjdENvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSBfc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsKSB7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXRlbXM6IE5nT3B0aW9uW10gPSBbXTtcblxuICAgIGdldCBpdGVtcygpOiBOZ09wdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ZpbHRlcmVkSXRlbXM6IE5nT3B0aW9uW10gPSBbXTtcblxuICAgIGdldCBmaWx0ZXJlZEl0ZW1zKCk6IE5nT3B0aW9uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyZWRJdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYXJrZWRJbmRleCA9IC0xO1xuXG4gICAgZ2V0IG1hcmtlZEluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXJrZWRJbmRleDtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRJdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnZhbHVlO1xuICAgIH1cblxuICAgIGdldCBtYXJrZWRJdGVtKCk6IE5nT3B0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcmVkSXRlbXNbdGhpcy5fbWFya2VkSW5kZXhdO1xuICAgIH1cblxuICAgIGdldCBub0l0ZW1zVG9TZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uZ1NlbGVjdC5oaWRlU2VsZWN0ZWQgJiYgdGhpcy5faXRlbXMubGVuZ3RoID09PSB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIGdldCBtYXhJdGVtc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmdTZWxlY3QubXVsdGlwbGUgJiYgdGhpcy5fbmdTZWxlY3QubWF4U2VsZWN0ZWRJdGVtcyA8PSB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIGdldCBsYXN0U2VsZWN0ZWRJdGVtKCkge1xuICAgICAgICBsZXQgaSA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCBpdGVtID0gdGhpcy5zZWxlY3RlZEl0ZW1zW2ldO1xuICAgICAgICAgICAgaWYgKCFpdGVtLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2V0SXRlbXMoaXRlbXM6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4gdGhpcy5tYXBJdGVtKGl0ZW0sIGluZGV4KSk7XG4gICAgICAgIGlmICh0aGlzLl9uZ1NlbGVjdC5ncm91cEJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9ncm91cHMgPSB0aGlzLl9ncm91cEJ5KHRoaXMuX2l0ZW1zLCB0aGlzLl9uZ1NlbGVjdC5ncm91cEJ5KTtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fZmxhdHRlbih0aGlzLl9ncm91cHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZ3JvdXBzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgdGhpcy5fZ3JvdXBzLnNldCh1bmRlZmluZWQsIHRoaXMuX2l0ZW1zKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMgPSBbLi4udGhpcy5faXRlbXNdO1xuICAgIH1cblxuICAgIHNlbGVjdChpdGVtOiBOZ09wdGlvbikge1xuICAgICAgICBpZiAoaXRlbS5zZWxlY3RlZCB8fCB0aGlzLm1heEl0ZW1zU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtdWx0aXBsZSA9IHRoaXMuX25nU2VsZWN0Lm11bHRpcGxlO1xuICAgICAgICBpZiAoIW11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0ZWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpdGVtLCBtdWx0aXBsZSwgdGhpcy5fbmdTZWxlY3Quc2VsZWN0YWJsZUdyb3VwQXNNb2RlbCk7XG4gICAgICAgIGlmICh0aGlzLl9uZ1NlbGVjdC5oaWRlU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2hpZGVTZWxlY3RlZChpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuc2VsZWN0KGl0ZW06IE5nT3B0aW9uKSB7XG4gICAgICAgIGlmICghaXRlbS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KGl0ZW0sIHRoaXMuX25nU2VsZWN0Lm11bHRpcGxlKTtcbiAgICAgICAgaWYgKHRoaXMuX25nU2VsZWN0LmhpZGVTZWxlY3RlZCAmJiBpc0RlZmluZWQoaXRlbS5pbmRleCkgJiYgdGhpcy5fbmdTZWxlY3QubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Nob3dTZWxlY3RlZChpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbmRJdGVtKHZhbHVlOiBhbnkpOiBOZ09wdGlvbiB7XG4gICAgICAgIGxldCBmaW5kQnk6IChpdGVtOiBOZ09wdGlvbikgPT4gYm9vbGVhbjtcbiAgICAgICAgaWYgKHRoaXMuX25nU2VsZWN0LmNvbXBhcmVXaXRoKSB7XG4gICAgICAgICAgICBmaW5kQnkgPSBpdGVtID0+IHRoaXMuX25nU2VsZWN0LmNvbXBhcmVXaXRoKGl0ZW0udmFsdWUsIHZhbHVlKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX25nU2VsZWN0LmJpbmRWYWx1ZSkge1xuICAgICAgICAgICAgZmluZEJ5ID0gaXRlbSA9PiAhaXRlbS5jaGlsZHJlbiAmJiB0aGlzLnJlc29sdmVOZXN0ZWQoaXRlbS52YWx1ZSwgdGhpcy5fbmdTZWxlY3QuYmluZFZhbHVlKSA9PT0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbmRCeSA9IGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gdmFsdWUgfHxcbiAgICAgICAgICAgICAgICAhaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmxhYmVsICYmIGl0ZW0ubGFiZWwgPT09IHRoaXMucmVzb2x2ZU5lc3RlZCh2YWx1ZSwgdGhpcy5fbmdTZWxlY3QuYmluZExhYmVsKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gZmluZEJ5KGl0ZW0pKTtcbiAgICB9XG5cbiAgICBhZGRJdGVtKGl0ZW06IGFueSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLm1hcEl0ZW0oaXRlbSwgdGhpcy5faXRlbXMubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5faXRlbXMucHVzaChvcHRpb24pO1xuICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9XG5cbiAgICBjbGVhclNlbGVjdGVkKGtlZXBEaXNhYmxlZCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKGtlZXBEaXNhYmxlZCk7XG4gICAgICAgIHRoaXMuX2l0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGVkID0ga2VlcERpc2FibGVkICYmIGl0ZW0uc2VsZWN0ZWQgJiYgaXRlbS5kaXNhYmxlZDtcbiAgICAgICAgICAgIGl0ZW0ubWFya2VkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5fbmdTZWxlY3QuaGlkZVNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0RmlsdGVyZWRJdGVtcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmluZEJ5TGFiZWwodGVybTogc3RyaW5nKSB7XG4gICAgICAgIHRlcm0gPSBzZWFyY2hIZWxwZXIuc3RyaXBTcGVjaWFsQ2hhcnModGVybSkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRJdGVtcy5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBzZWFyY2hIZWxwZXIuc3RyaXBTcGVjaWFsQ2hhcnMoaXRlbS5sYWJlbCkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHJldHVybiBsYWJlbC5zdWJzdHIoMCwgdGVybS5sZW5ndGgpID09PSB0ZXJtO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmaWx0ZXIodGVybTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGVybSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldEZpbHRlcmVkSXRlbXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMgPSBbXTtcbiAgICAgICAgdGVybSA9IHRoaXMuX25nU2VsZWN0LnNlYXJjaEZuID8gdGVybSA6IHNlYXJjaEhlbHBlci5zdHJpcFNwZWNpYWxDaGFycyh0ZXJtKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBtYXRjaCA9IHRoaXMuX25nU2VsZWN0LnNlYXJjaEZuIHx8IHRoaXMuX2RlZmF1bHRTZWFyY2hGbjtcbiAgICAgICAgY29uc3QgaGlkZVNlbGVjdGVkID0gdGhpcy5fbmdTZWxlY3QuaGlkZVNlbGVjdGVkO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIEFycmF5LmZyb20odGhpcy5fZ3JvdXBzLmtleXMoKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuX2dyb3Vwcy5nZXQoa2V5KSkge1xuICAgICAgICAgICAgICAgIGlmIChoaWRlU2VsZWN0ZWQgJiYgKGl0ZW0ucGFyZW50ICYmIGl0ZW0ucGFyZW50LnNlbGVjdGVkIHx8IGl0ZW0uc2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hJdGVtID0gdGhpcy5fbmdTZWxlY3Quc2VhcmNoRm4gPyBpdGVtLnZhbHVlIDogaXRlbTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2godGVybSwgc2VhcmNoSXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2xhc3RdID0gbWF0Y2hlZEl0ZW1zLnNsaWNlKC0xKTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZCA9IHRoaXMuX2l0ZW1zLmZpbmQoeCA9PiB4ID09PSBsYXN0LnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMucHVzaChoZWFkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcy5wdXNoKC4uLm1hdGNoZWRJdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEZpbHRlcmVkSXRlbXMoKSB7XG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gdGhpcy5faXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbmdTZWxlY3QuaGlkZVNlbGVjdGVkICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zID0gdGhpcy5faXRlbXMuZmlsdGVyKHggPT4gIXguc2VsZWN0ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyA9IHRoaXMuX2l0ZW1zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5tYXJrSXRlbSgpIHtcbiAgICAgICAgdGhpcy5fbWFya2VkSW5kZXggPSAtMTtcbiAgICB9XG5cbiAgICBtYXJrTmV4dEl0ZW0oKSB7XG4gICAgICAgIHRoaXMuX3N0ZXBUb0l0ZW0oKzEpO1xuICAgIH1cblxuICAgIG1hcmtQcmV2aW91c0l0ZW0oKSB7XG4gICAgICAgIHRoaXMuX3N0ZXBUb0l0ZW0oLTEpO1xuICAgIH1cblxuICAgIG1hcmtJdGVtKGl0ZW06IE5nT3B0aW9uKSB7XG4gICAgICAgIHRoaXMuX21hcmtlZEluZGV4ID0gdGhpcy5fZmlsdGVyZWRJdGVtcy5pbmRleE9mKGl0ZW0pO1xuICAgIH1cblxuICAgIG1hcmtTZWxlY3RlZE9yRGVmYXVsdChtYXJrRGVmYXVsdD86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbHRlcmVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0TWFya2VkSW5kZXggPSB0aGlzLl9nZXRMYXN0TWFya2VkSW5kZXgoKTtcbiAgICAgICAgaWYgKGxhc3RNYXJrZWRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXJrZWRJbmRleCA9IGxhc3RNYXJrZWRJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9uZ1NlbGVjdC5leGNsdWRlR3JvdXBzRnJvbURlZmF1bHRTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZWRJbmRleCA9IG1hcmtEZWZhdWx0ID8gdGhpcy5maWx0ZXJlZEl0ZW1zLmZpbmRJbmRleCh4ID0+ICF4LmRpc2FibGVkICYmICF4LmNoaWxkcmVuKSA6IC0xO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZWRJbmRleCA9IG1hcmtEZWZhdWx0ID8gdGhpcy5maWx0ZXJlZEl0ZW1zLmZpbmRJbmRleCh4ID0+ICF4LmRpc2FibGVkKSA6IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzb2x2ZU5lc3RlZChvcHRpb246IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleS5pbmRleE9mKCcuJykgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQga2V5czogc3RyaW5nW10gPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IG9wdGlvbjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVba2V5c1tpXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXBJdGVtKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcik6IE5nT3B0aW9uIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpc0RlZmluZWQoaXRlbS4kbmdPcHRpb25MYWJlbCkgPyBpdGVtLiRuZ09wdGlvbkxhYmVsIDogdGhpcy5yZXNvbHZlTmVzdGVkKGl0ZW0sIHRoaXMuX25nU2VsZWN0LmJpbmRMYWJlbCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNEZWZpbmVkKGl0ZW0uJG5nT3B0aW9uVmFsdWUpID8gaXRlbS4kbmdPcHRpb25WYWx1ZSA6IGl0ZW07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICBsYWJlbDogaXNEZWZpbmVkKGxhYmVsKSA/IGxhYmVsLnRvU3RyaW5nKCkgOiAnJyxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkLFxuICAgICAgICAgICAgaHRtbElkOiBuZXdJZCgpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIG1hcFNlbGVjdGVkSXRlbXMoKSB7XG4gICAgICAgIGNvbnN0IG11bHRpcGxlID0gdGhpcy5fbmdTZWxlY3QubXVsdGlwbGU7XG4gICAgICAgIGZvciAoY29uc3Qgc2VsZWN0ZWQgb2YgdGhpcy5zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX25nU2VsZWN0LmJpbmRWYWx1ZSA/IHRoaXMucmVzb2x2ZU5lc3RlZChzZWxlY3RlZC52YWx1ZSwgdGhpcy5fbmdTZWxlY3QuYmluZFZhbHVlKSA6IHNlbGVjdGVkLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGlzRGVmaW5lZCh2YWx1ZSkgPyB0aGlzLmZpbmRJdGVtKHZhbHVlKSA6IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChzZWxlY3RlZCwgbXVsdGlwbGUpO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGl0ZW0gfHwgc2VsZWN0ZWQsIG11bHRpcGxlLCB0aGlzLl9uZ1NlbGVjdC5zZWxlY3RhYmxlR3JvdXBBc01vZGVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9uZ1NlbGVjdC5oaWRlU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMgPSB0aGlzLmZpbHRlcmVkSXRlbXMuZmlsdGVyKHggPT4gdGhpcy5zZWxlY3RlZEl0ZW1zLmluZGV4T2YoeCkgPT09IC0xKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3dTZWxlY3RlZChpdGVtOiBOZ09wdGlvbikge1xuICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIGlmIChpdGVtLnBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRFeGlzdHMgPSB0aGlzLl9maWx0ZXJlZEl0ZW1zLmZpbmQoeCA9PiB4ID09PSBwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKCFwYXJlbnRFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zLnB1c2gocGFyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjaGlsZC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyA9IFsuLi50aGlzLl9maWx0ZXJlZEl0ZW1zLnNvcnQoKGEsIGIpID0+IChhLmluZGV4IC0gYi5pbmRleCkpXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oaWRlU2VsZWN0ZWQoaXRlbTogTmdPcHRpb24pIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyA9IHRoaXMuX2ZpbHRlcmVkSXRlbXMuZmlsdGVyKHggPT4geCAhPT0gaXRlbSk7XG4gICAgICAgIGlmIChpdGVtLnBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBpdGVtLnBhcmVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbi5ldmVyeSh4ID0+IHguc2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyA9IHRoaXMuX2ZpbHRlcmVkSXRlbXMuZmlsdGVyKHggPT4geCAhPT0gaXRlbS5wYXJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMgPSB0aGlzLmZpbHRlcmVkSXRlbXMuZmlsdGVyKHggPT4geC5wYXJlbnQgIT09IGl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNlYXJjaEZuKHNlYXJjaDogc3RyaW5nLCBvcHQ6IE5nT3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2VhcmNoSGVscGVyLnN0cmlwU3BlY2lhbENoYXJzKG9wdC5sYWJlbCkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGxhYmVsLmluZGV4T2Yoc2VhcmNoKSA+IC0xXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0TmV4dEl0ZW1JbmRleChzdGVwczogbnVtYmVyKSB7XG4gICAgICAgIGlmIChzdGVwcyA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5fbWFya2VkSW5kZXggPT09IHRoaXMuX2ZpbHRlcmVkSXRlbXMubGVuZ3RoIC0gMSkgPyAwIDogKHRoaXMuX21hcmtlZEluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0aGlzLl9tYXJrZWRJbmRleCA8PSAwKSA/ICh0aGlzLl9maWx0ZXJlZEl0ZW1zLmxlbmd0aCAtIDEpIDogKHRoaXMuX21hcmtlZEluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RlcFRvSXRlbShzdGVwczogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9maWx0ZXJlZEl0ZW1zLmV2ZXJ5KHggPT4geC5kaXNhYmxlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21hcmtlZEluZGV4ID0gdGhpcy5fZ2V0TmV4dEl0ZW1JbmRleChzdGVwcyk7XG4gICAgICAgIGlmICh0aGlzLm1hcmtlZEl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0ZXBUb0l0ZW0oc3RlcHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0TGFzdE1hcmtlZEluZGV4KCkge1xuICAgICAgICBpZiAodGhpcy5fbmdTZWxlY3QuaGlkZVNlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5fZmlsdGVyZWRJdGVtcy5pbmRleE9mKHRoaXMubGFzdFNlbGVjdGVkSXRlbSk7XG4gICAgICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gJiYgc2VsZWN0ZWRJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLm1hcmtlZEluZGV4LCBzZWxlY3RlZEluZGV4KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9ncm91cEJ5KGl0ZW1zOiBOZ09wdGlvbltdLCBwcm9wOiBzdHJpbmcgfCBGdW5jdGlvbik6IE9wdGlvbkdyb3VwcyB7XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nIHwgTmdPcHRpb24sIE5nT3B0aW9uW10+KCk7XG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBncm91cHM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpZiBpdGVtcyBhcmUgYWxyZWFkeSBncm91cGVkIGJ5IGdpdmVuIGtleS5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXNbMF0udmFsdWVbPHN0cmluZz5wcm9wXSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gKGl0ZW0udmFsdWVbPHN0cmluZz5wcm9wXSB8fCBbXSkubWFwKCh4LCBpbmRleCkgPT4gdGhpcy5tYXBJdGVtKHgsIGluZGV4KSk7XG4gICAgICAgICAgICAgICAgZ3JvdXBzLnNldChpdGVtLCBjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNGbktleSA9IGlzRnVuY3Rpb24odGhpcy5fbmdTZWxlY3QuZ3JvdXBCeSk7XG4gICAgICAgIGNvbnN0IGtleUZuID0gKGl0ZW06IE5nT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBsZXQga2V5ID0gaXNGbktleSA/ICg8RnVuY3Rpb24+cHJvcCkoaXRlbS52YWx1ZSkgOiBpdGVtLnZhbHVlWzxzdHJpbmc+cHJvcF07XG4gICAgICAgICAgICByZXR1cm4gaXNEZWZpbmVkKGtleSkgPyBrZXkgOiB1bmRlZmluZWQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gR3JvdXAgaXRlbXMgYnkga2V5LlxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlGbihpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBzLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBzLnNldChrZXksIFtpdGVtXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9mbGF0dGVuKGdyb3VwczogT3B0aW9uR3JvdXBzKSB7XG4gICAgICAgIGNvbnN0IGlzR3JvdXBCeUZuID0gaXNGdW5jdGlvbih0aGlzLl9uZ1NlbGVjdC5ncm91cEJ5KTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgY29uc3Qgd2l0aG91dEdyb3VwID0gZ3JvdXBzLmdldCh1bmRlZmluZWQpIHx8IFtdO1xuICAgICAgICBpdGVtcy5wdXNoKC4uLndpdGhvdXRHcm91cCk7XG4gICAgICAgIGxldCBpID0gd2l0aG91dEdyb3VwLmxlbmd0aDtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgQXJyYXkuZnJvbShncm91cHMua2V5cygpKSkge1xuICAgICAgICAgICAgaWYgKCFpc0RlZmluZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXNPYmplY3RLZXkgPSBpc09iamVjdChrZXkpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50OiBOZ09wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogaXNPYmplY3RLZXkgPyAnJyA6IDxzdHJpbmc+a2V5LFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgICAgIGluZGV4OiBpKyssXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLl9uZ1NlbGVjdC5zZWxlY3RhYmxlR3JvdXAsXG4gICAgICAgICAgICAgICAgaHRtbElkOiBuZXdJZCgpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwS2V5ID0gaXNHcm91cEJ5Rm4gPyB0aGlzLl9uZ1NlbGVjdC5iaW5kTGFiZWwgOiA8c3RyaW5nPnRoaXMuX25nU2VsZWN0Lmdyb3VwQnk7XG4gICAgICAgICAgICBjb25zdCBncm91cFZhbHVlID0gdGhpcy5fbmdTZWxlY3QuZ3JvdXBWYWx1ZSB8fCAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdEtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxOZ09wdGlvbj5rZXkpLnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBbZ3JvdXBLZXldOiBrZXkgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBncm91cHMuZ2V0KGtleSkubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIHgucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgICAgIHguY2hpbGRyZW4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgeC5pbmRleCA9IGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgICAgICBwYXJlbnQudmFsdWUgPSBncm91cFZhbHVlKGtleSwgY2hpbGRyZW4ubWFwKHggPT4geC52YWx1ZSkpO1xuICAgICAgICAgICAgaXRlbXMucHVzaChwYXJlbnQpO1xuICAgICAgICAgICAgaXRlbXMucHVzaCguLi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgTmdPcHRpb24ge1xuICAgIFtuYW1lOiBzdHJpbmddOiBhbnk7XG4gICAgaW5kZXg/OiBudW1iZXI7XG4gICAgaHRtbElkPzogc3RyaW5nO1xuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgbWFya2VkPzogYm9vbGVhbjtcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZyB8IE9iamVjdDtcbiAgICBwYXJlbnQ/OiBOZ09wdGlvbjtcbiAgICBjaGlsZHJlbj86IE5nT3B0aW9uW107XG59XG5cbmV4cG9ydCBlbnVtIEtleUNvZGUge1xuICAgIFRhYiA9IDksXG4gICAgRW50ZXIgPSAxMyxcbiAgICBFc2MgPSAyNyxcbiAgICBTcGFjZSA9IDMyLFxuICAgIEFycm93VXAgPSAzOCxcbiAgICBBcnJvd0Rvd24gPSA0MCxcbiAgICBCYWNrc3BhY2UgPSA4XG59XG4iLCJleHBvcnQgaW50ZXJmYWNlIEl0ZW1zUmFuZ2VSZXN1bHQge1xuICAgIHNjcm9sbEhlaWdodDogbnVtYmVyO1xuICAgIHRvcFBhZGRpbmc6IG51bWJlcjtcbiAgICBzdGFydDogbnVtYmVyO1xuICAgIGVuZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhbmVsRGltZW5zaW9ucyB7XG4gICAgaXRlbUhlaWdodDogbnVtYmVyO1xuICAgIHBhbmVsSGVpZ2h0OiBudW1iZXI7XG4gICAgaXRlbXNQZXJWaWV3cG9ydDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgTmdEcm9wZG93blBhbmVsU2VydmljZSB7XG5cbiAgICBwcml2YXRlIF9kaW1lbnNpb25zOiBQYW5lbERpbWVuc2lvbnMgPSB7XG4gICAgICAgIGl0ZW1IZWlnaHQ6IDAsXG4gICAgICAgIHBhbmVsSGVpZ2h0OiAwLFxuICAgICAgICBpdGVtc1BlclZpZXdwb3J0OiAwXG4gICAgfTtcblxuICAgIGdldCBkaW1lbnNpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGltZW5zaW9ucztcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVJdGVtcyhzY3JvbGxQb3M6IG51bWJlciwgaXRlbXNMZW5ndGg6IG51bWJlciwgYnVmZmVyOiBudW1iZXIpOiBJdGVtc1JhbmdlUmVzdWx0IHtcbiAgICAgICAgY29uc3QgZCA9IHRoaXMuX2RpbWVuc2lvbnM7XG4gICAgICAgIGNvbnN0IHNjcm9sbEhlaWdodCA9IGQuaXRlbUhlaWdodCAqIGl0ZW1zTGVuZ3RoO1xuXG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFBvcyk7XG4gICAgICAgIGNvbnN0IGluZGV4QnlTY3JvbGxUb3AgPSBzY3JvbGxUb3AgLyBzY3JvbGxIZWlnaHQgKiBpdGVtc0xlbmd0aDtcbiAgICAgICAgbGV0IGVuZCA9IE1hdGgubWluKGl0ZW1zTGVuZ3RoLCBNYXRoLmNlaWwoaW5kZXhCeVNjcm9sbFRvcCkgKyAoZC5pdGVtc1BlclZpZXdwb3J0ICsgMSkpO1xuXG4gICAgICAgIGNvbnN0IG1heFN0YXJ0RW5kID0gZW5kO1xuICAgICAgICBjb25zdCBtYXhTdGFydCA9IE1hdGgubWF4KDAsIG1heFN0YXJ0RW5kIC0gZC5pdGVtc1BlclZpZXdwb3J0KTtcbiAgICAgICAgbGV0IHN0YXJ0ID0gTWF0aC5taW4obWF4U3RhcnQsIE1hdGguZmxvb3IoaW5kZXhCeVNjcm9sbFRvcCkpO1xuXG4gICAgICAgIGxldCB0b3BQYWRkaW5nID0gZC5pdGVtSGVpZ2h0ICogTWF0aC5jZWlsKHN0YXJ0KSAtIChkLml0ZW1IZWlnaHQgKiBNYXRoLm1pbihzdGFydCwgYnVmZmVyKSk7XG4gICAgICAgIHRvcFBhZGRpbmcgPSAhaXNOYU4odG9wUGFkZGluZykgPyB0b3BQYWRkaW5nIDogMDtcbiAgICAgICAgc3RhcnQgPSAhaXNOYU4oc3RhcnQpID8gc3RhcnQgOiAtMTtcbiAgICAgICAgZW5kID0gIWlzTmFOKGVuZCkgPyBlbmQgOiAtMTtcbiAgICAgICAgc3RhcnQgLT0gYnVmZmVyO1xuICAgICAgICBzdGFydCA9IE1hdGgubWF4KDAsIHN0YXJ0KTtcbiAgICAgICAgZW5kICs9IGJ1ZmZlcjtcbiAgICAgICAgZW5kID0gTWF0aC5taW4oaXRlbXNMZW5ndGgsIGVuZCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcFBhZGRpbmcsXG4gICAgICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgIGVuZFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGltZW5zaW9ucyhpdGVtSGVpZ2h0OiBudW1iZXIsIHBhbmVsSGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaXRlbXNQZXJWaWV3cG9ydCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IocGFuZWxIZWlnaHQgLyBpdGVtSGVpZ2h0KSk7XG4gICAgICAgIHRoaXMuX2RpbWVuc2lvbnMgPSB7XG4gICAgICAgICAgICBpdGVtSGVpZ2h0LFxuICAgICAgICAgICAgcGFuZWxIZWlnaHQsXG4gICAgICAgICAgICBpdGVtc1BlclZpZXdwb3J0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0U2Nyb2xsVG8oaXRlbVRvcDogbnVtYmVyLCBpdGVtSGVpZ2h0OiBudW1iZXIsIGxhc3RTY3JvbGw6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpdGVtQm90dG9tID0gaXRlbVRvcCArIGl0ZW1IZWlnaHQ7XG4gICAgICAgIGNvbnN0IHRvcCA9IGxhc3RTY3JvbGw7XG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHRvcCArIHRoaXMuZGltZW5zaW9ucy5wYW5lbEhlaWdodDtcblxuICAgICAgICBpZiAoaXRlbUJvdHRvbSA+IGJvdHRvbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRvcCArIGl0ZW1Cb3R0b20gLSBib3R0b207XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVRvcCA8PSB0b3ApIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtVG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBhc2FwU2NoZWR1bGVyLCBmcm9tRXZlbnQsIG1lcmdlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBhdWRpdFRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5nRHJvcGRvd25QYW5lbFNlcnZpY2UsIFBhbmVsRGltZW5zaW9ucyB9IGZyb20gJy4vbmctZHJvcGRvd24tcGFuZWwuc2VydmljZSc7XG5cbmltcG9ydCB7IERyb3Bkb3duUG9zaXRpb24gfSBmcm9tICcuL25nLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdPcHRpb24gfSBmcm9tICcuL25nLXNlbGVjdC50eXBlcyc7XG5pbXBvcnQgeyBpc0RlZmluZWQgfSBmcm9tICcuL3ZhbHVlLXV0aWxzJztcblxuY29uc3QgVE9QX0NTU19DTEFTUyA9ICduZy1zZWxlY3QtdG9wJztcbmNvbnN0IEJPVFRPTV9DU1NfQ0xBU1MgPSAnbmctc2VsZWN0LWJvdHRvbSc7XG5jb25zdCBTQ1JPTExfU0NIRURVTEVSID0gdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ3VuZGVmaW5lZCcgPyBhbmltYXRpb25GcmFtZVNjaGVkdWxlciA6IGFzYXBTY2hlZHVsZXI7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc2VsZWN0b3I6ICduZy1kcm9wZG93bi1wYW5lbCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCIgY2xhc3M9XCJuZy1kcm9wZG93bi1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzZWFyY2hUZXJtOiBmaWx0ZXJWYWx1ZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICNzY3JvbGwgY2xhc3M9XCJuZy1kcm9wZG93bi1wYW5lbC1pdGVtcyBzY3JvbGwtaG9zdFwiPlxuICAgICAgICAgICAgPGRpdiAjcGFkZGluZyBbY2xhc3MudG90YWwtcGFkZGluZ109XCJ2aXJ0dWFsU2Nyb2xsXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICNjb250ZW50IFtjbGFzcy5zY3JvbGxhYmxlLWNvbnRlbnRdPVwidmlydHVhbFNjcm9sbCAmJiBpdGVtcy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJmb290ZXJUZW1wbGF0ZVwiIGNsYXNzPVwibmctZHJvcGRvd24tZm9vdGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvb3RlclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgc2VhcmNoVGVybTogZmlsdGVyVmFsdWUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIE5nRHJvcGRvd25QYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgaXRlbXM6IE5nT3B0aW9uW10gPSBbXTtcbiAgICBASW5wdXQoKSBtYXJrZWRJdGVtOiBOZ09wdGlvbjtcbiAgICBASW5wdXQoKSBwb3NpdGlvbjogRHJvcGRvd25Qb3NpdGlvbiA9ICdhdXRvJztcbiAgICBASW5wdXQoKSBhcHBlbmRUbzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGJ1ZmZlckFtb3VudDtcbiAgICBASW5wdXQoKSB2aXJ0dWFsU2Nyb2xsID0gZmFsc2U7XG4gICAgQElucHV0KCkgaGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgZm9vdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgZmlsdGVyVmFsdWU6IHN0cmluZyA9IG51bGw7XG5cbiAgICBAT3V0cHV0KCkgdXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgICBAT3V0cHV0KCkgc2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0+KCk7XG4gICAgQE91dHB1dCgpIHNjcm9sbFRvRW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBvdXRzaWRlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdjb250ZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNvbnRlbnRFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBzY3JvbGxFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3BhZGRpbmcnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgcGFkZGluZ0VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZHJvcGRvd246IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgX3ZpcnR1YWxQYWRkaW5nOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIF9zY3JvbGxhYmxlUGFuZWw6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgX2NvbnRlbnRQYW5lbDogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBfc2VsZWN0OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIF9wYXJlbnQ6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgX3Njcm9sbFRvRW5kRmlyZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF91cGRhdGVTY3JvbGxIZWlnaHQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9sYXN0U2Nyb2xsUG9zaXRpb24gPSAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBfcGFuZWxTZXJ2aWNlOiBOZ0Ryb3Bkb3duUGFuZWxTZXJ2aWNlLFxuICAgICAgICBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueVxuICAgICkge1xuICAgICAgICB0aGlzLl9kcm9wZG93biA9IF9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3VycmVudFBvc2l0aW9uOiBEcm9wZG93blBvc2l0aW9uO1xuXG4gICAgZ2V0IGN1cnJlbnRQb3NpdGlvbigpOiBEcm9wZG93blBvc2l0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRQb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pdGVtc0xlbmd0aDogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBnZXQgaXRlbXNMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0xlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldCBpdGVtc0xlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5faXRlbXNMZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zTGVuZ3RoID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9vbkl0ZW1zTGVuZ3RoQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVNb3VzZWRvd24oJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9ICRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLl9zZWxlY3QgPSB0aGlzLl9kcm9wZG93bi5wYXJlbnRFbGVtZW50O1xuICAgICAgICB0aGlzLl92aXJ0dWFsUGFkZGluZyA9IHRoaXMucGFkZGluZ0VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5fc2Nyb2xsYWJsZVBhbmVsID0gdGhpcy5zY3JvbGxFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX2NvbnRlbnRQYW5lbCA9IHRoaXMuY29udGVudEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5faGFuZGxlU2Nyb2xsKCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZU91dHNpZGVDbGljaygpO1xuICAgICAgICB0aGlzLl9hcHBlbmREcm9wZG93bigpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZSA9IGNoYW5nZXMuaXRlbXM7XG4gICAgICAgICAgICB0aGlzLl9vbkl0ZW1zQ2hhbmdlKGNoYW5nZS5jdXJyZW50VmFsdWUsIGNoYW5nZS5maXJzdENoYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5hcHBlbmRUbykge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5fZHJvcGRvd24ucGFyZW50Tm9kZSwgdGhpcy5fZHJvcGRvd24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2Nyb2xsVG8ob3B0aW9uOiBOZ09wdGlvbiwgc3RhcnRGcm9tT3B0aW9uID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFvcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtcy5pbmRleE9mKG9wdGlvbik7XG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5pdGVtc0xlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNjcm9sbFRvO1xuICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtSGVpZ2h0ID0gdGhpcy5fcGFuZWxTZXJ2aWNlLmRpbWVuc2lvbnMuaXRlbUhlaWdodDtcbiAgICAgICAgICAgIHNjcm9sbFRvID0gdGhpcy5fcGFuZWxTZXJ2aWNlLmdldFNjcm9sbFRvKGluZGV4ICogaXRlbUhlaWdodCwgaXRlbUhlaWdodCwgdGhpcy5fbGFzdFNjcm9sbFBvc2l0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW06IEhUTUxFbGVtZW50ID0gdGhpcy5fZHJvcGRvd24ucXVlcnlTZWxlY3RvcihgIyR7b3B0aW9uLmh0bWxJZH1gKTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTY3JvbGwgPSBzdGFydEZyb21PcHRpb24gPyBpdGVtLm9mZnNldFRvcCA6IHRoaXMuX2xhc3RTY3JvbGxQb3NpdGlvbjtcbiAgICAgICAgICAgIHNjcm9sbFRvID0gdGhpcy5fcGFuZWxTZXJ2aWNlLmdldFNjcm9sbFRvKGl0ZW0ub2Zmc2V0VG9wLCBpdGVtLmNsaWVudEhlaWdodCwgbGFzdFNjcm9sbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWZpbmVkKHNjcm9sbFRvKSkge1xuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsYWJsZVBhbmVsLnNjcm9sbFRvcCA9IHNjcm9sbFRvO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9UYWcoKSB7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5fc2Nyb2xsYWJsZVBhbmVsO1xuICAgICAgICBwYW5lbC5zY3JvbGxUb3AgPSBwYW5lbC5zY3JvbGxIZWlnaHQgLSBwYW5lbC5jbGllbnRIZWlnaHQ7XG4gICAgfVxuXG4gICAgYWRqdXN0UG9zaXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50UG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9wYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMuX3NlbGVjdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy5fc2V0T2Zmc2V0KHBhcmVudCwgc2VsZWN0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVEcm9wZG93blBvc2l0aW9uKCkge1xuICAgICAgICB0aGlzLl9jdXJyZW50UG9zaXRpb24gPSB0aGlzLl9jYWxjdWxhdGVDdXJyZW50UG9zaXRpb24odGhpcy5fZHJvcGRvd24pO1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFBvc2l0aW9uID09PSAndG9wJykge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fZHJvcGRvd24sIFRPUF9DU1NfQ0xBU1MpO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fZHJvcGRvd24sIEJPVFRPTV9DU1NfQ0xBU1MpO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fc2VsZWN0LCBUT1BfQ1NTX0NMQVNTKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX3NlbGVjdCwgQk9UVE9NX0NTU19DTEFTUylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2Ryb3Bkb3duLCBCT1RUT01fQ1NTX0NMQVNTKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX2Ryb3Bkb3duLCBUT1BfQ1NTX0NMQVNTKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX3NlbGVjdCwgQk9UVE9NX0NTU19DTEFTUyk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9zZWxlY3QsIFRPUF9DU1NfQ0xBU1MpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXBwZW5kVG8pIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kcm9wZG93bi5zdHlsZS5vcGFjaXR5ID0gJzEnO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hhbmRsZVNjcm9sbCgpIHtcbiAgICAgICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5zY3JvbGxFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdzY3JvbGwnKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksIGF1ZGl0VGltZSgwLCBTQ1JPTExfU0NIRURVTEVSKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5fb25Db250ZW50U2Nyb2xsZWQoZS5zcmNFbGVtZW50LnNjcm9sbFRvcCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVPdXRzaWRlQ2xpY2soKSB7XG4gICAgICAgIGlmICghdGhpcy5fZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuX2RvY3VtZW50LCAndG91Y2hzdGFydCcsIHsgY2FwdHVyZTogdHJ1ZSB9KSxcbiAgICAgICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5fZG9jdW1lbnQsICdtb3VzZWRvd24nLCB7IGNhcHR1cmU6IHRydWUgfSlcbiAgICAgICAgICAgICkucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgIC5zdWJzY3JpYmUoJGV2ZW50ID0+IHRoaXMuX2NoZWNrVG9DbG9zZSgkZXZlbnQpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tUb0Nsb3NlKCRldmVudDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3QuY29udGFpbnMoJGV2ZW50LnRhcmdldCkgfHwgdGhpcy5fZHJvcGRvd24uY29udGFpbnMoJGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhdGggPSAkZXZlbnQucGF0aCB8fCAoJGV2ZW50LmNvbXBvc2VkUGF0aCAmJiAkZXZlbnQuY29tcG9zZWRQYXRoKCkpO1xuICAgICAgICBpZiAoJGV2ZW50LnRhcmdldCAmJiAkZXZlbnQudGFyZ2V0LnNoYWRvd1Jvb3QgJiYgcGF0aCAmJiBwYXRoWzBdICYmIHRoaXMuX3NlbGVjdC5jb250YWlucyhwYXRoWzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRzaWRlQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX29uSXRlbXNDaGFuZ2UoaXRlbXM6IE5nT3B0aW9uW10sIGZpcnN0Q2hhbmdlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBpdGVtcyB8fCBbXTtcbiAgICAgICAgdGhpcy5fc2Nyb2xsVG9FbmRGaXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLml0ZW1zTGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUl0ZW1zUmFuZ2UoZmlyc3RDaGFuZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSXRlbXMoZmlyc3RDaGFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlSXRlbXMoZmlyc3RDaGFuZ2U6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy51cGRhdGUuZW1pdCh0aGlzLml0ZW1zKTtcbiAgICAgICAgaWYgKGZpcnN0Q2hhbmdlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYW5lbEhlaWdodCA9IHRoaXMuX3Njcm9sbGFibGVQYW5lbC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFuZWxTZXJ2aWNlLnNldERpbWVuc2lvbnMoMCwgcGFuZWxIZWlnaHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKHRoaXMubWFya2VkSXRlbSwgZmlyc3RDaGFuZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZUl0ZW1zUmFuZ2UoZmlyc3RDaGFuZ2U6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9tZWFzdXJlRGltZW5zaW9ucygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdENoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJJdGVtc1JhbmdlKHRoaXMuX3N0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRHJvcGRvd25Qb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlckl0ZW1zUmFuZ2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfb25Db250ZW50U2Nyb2xsZWQoc2Nyb2xsVG9wOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVySXRlbXNSYW5nZShzY3JvbGxUb3ApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhc3RTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFRvcDtcbiAgICAgICAgdGhpcy5fZmlyZVNjcm9sbFRvRW5kKHNjcm9sbFRvcCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlVmlydHVhbEhlaWdodChoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5fdXBkYXRlU2Nyb2xsSGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLl92aXJ0dWFsUGFkZGluZy5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlU2Nyb2xsSGVpZ2h0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9vbkl0ZW1zTGVuZ3RoQ2hhbmdlZCgpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlU2Nyb2xsSGVpZ2h0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBfc3RhcnRPZmZzZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLm1hcmtlZEl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcmtlZEl0ZW0uaW5kZXggKiB0aGlzLl9wYW5lbFNlcnZpY2UuZGltZW5zaW9ucy5pdGVtSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlbmRlckl0ZW1zUmFuZ2Uoc2Nyb2xsVG9wID0gbnVsbCkge1xuICAgICAgICBpZiAoc2Nyb2xsVG9wICYmIHRoaXMuX2xhc3RTY3JvbGxQb3NpdGlvbiA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzY3JvbGxUb3AgPSBzY3JvbGxUb3AgfHwgdGhpcy5fc2Nyb2xsYWJsZVBhbmVsLnNjcm9sbFRvcDtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLl9wYW5lbFNlcnZpY2UuY2FsY3VsYXRlSXRlbXMoc2Nyb2xsVG9wLCB0aGlzLml0ZW1zTGVuZ3RoLCB0aGlzLmJ1ZmZlckFtb3VudCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpcnR1YWxIZWlnaHQocmFuZ2Uuc2Nyb2xsSGVpZ2h0KTtcbiAgICAgICAgdGhpcy5fY29udGVudFBhbmVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7cmFuZ2UudG9wUGFkZGluZ31weClgO1xuXG4gICAgICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlLmVtaXQodGhpcy5pdGVtcy5zbGljZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKSk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbC5lbWl0KHsgc3RhcnQ6IHJhbmdlLnN0YXJ0LCBlbmQ6IHJhbmdlLmVuZCB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzRGVmaW5lZChzY3JvbGxUb3ApICYmIHRoaXMuX2xhc3RTY3JvbGxQb3NpdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsYWJsZVBhbmVsLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFRvcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX21lYXN1cmVEaW1lbnNpb25zKCk6IFByb21pc2U8UGFuZWxEaW1lbnNpb25zPiB7XG4gICAgICAgIGlmICh0aGlzLl9wYW5lbFNlcnZpY2UuZGltZW5zaW9ucy5pdGVtSGVpZ2h0ID4gMCB8fCB0aGlzLml0ZW1zTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3BhbmVsU2VydmljZS5kaW1lbnNpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtmaXJzdF0gPSB0aGlzLml0ZW1zO1xuICAgICAgICB0aGlzLnVwZGF0ZS5lbWl0KFtmaXJzdF0pO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2Ryb3Bkb3duLnF1ZXJ5U2VsZWN0b3IoYCMke2ZpcnN0Lmh0bWxJZH1gKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbkhlaWdodCA9IG9wdGlvbi5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl92aXJ0dWFsUGFkZGluZy5zdHlsZS5oZWlnaHQgPSBgJHtvcHRpb25IZWlnaHQgKiB0aGlzLml0ZW1zTGVuZ3RofXB4YDtcbiAgICAgICAgICAgIGNvbnN0IHBhbmVsSGVpZ2h0ID0gdGhpcy5fc2Nyb2xsYWJsZVBhbmVsLmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX3BhbmVsU2VydmljZS5zZXREaW1lbnNpb25zKG9wdGlvbkhlaWdodCwgcGFuZWxIZWlnaHQpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFuZWxTZXJ2aWNlLmRpbWVuc2lvbnM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ZpcmVTY3JvbGxUb0VuZChzY3JvbGxUb3A6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsVG9FbmRGaXJlZCB8fCBzY3JvbGxUb3AgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSB0aGlzLnZpcnR1YWxTY3JvbGwgP1xuICAgICAgICAgICAgdGhpcy5fdmlydHVhbFBhZGRpbmcgOlxuICAgICAgICAgICAgdGhpcy5fY29udGVudFBhbmVsO1xuXG4gICAgICAgIGlmIChzY3JvbGxUb3AgKyB0aGlzLl9kcm9wZG93bi5jbGllbnRIZWlnaHQgPj0gcGFkZGluZy5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHRoaXMuc2Nyb2xsVG9FbmQuZW1pdCgpKTtcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvRW5kRmlyZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlQ3VycmVudFBvc2l0aW9uKGRyb3Bkb3duRWw6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uICE9PSAnYXV0bycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdFJlY3Q6IENsaWVudFJlY3QgPSB0aGlzLl9zZWxlY3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7XG4gICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IHNlbGVjdFJlY3QudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBzZWxlY3RSZWN0LmhlaWdodDtcbiAgICAgICAgY29uc3QgZHJvcGRvd25IZWlnaHQgPSBkcm9wZG93bkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgaWYgKG9mZnNldFRvcCArIGhlaWdodCArIGRyb3Bkb3duSGVpZ2h0ID4gc2Nyb2xsVG9wICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuICd0b3AnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICdib3R0b20nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXBwZW5kRHJvcGRvd24oKSB7XG4gICAgICAgIGlmICghdGhpcy5hcHBlbmRUbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGFyZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmFwcGVuZFRvKTtcbiAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgYXBwZW5kVG8gc2VsZWN0b3IgJHt0aGlzLmFwcGVuZFRvfSBkaWQgbm90IGZvdW5kIGFueSBwYXJlbnQgZWxlbWVudGApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BhcmVudC5hcHBlbmRDaGlsZCh0aGlzLl9kcm9wZG93bik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMuX3NlbGVjdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBvZmZzZXRMZWZ0ID0gc2VsZWN0LmxlZnQgLSBwYXJlbnQubGVmdDtcblxuICAgICAgICB0aGlzLl9zZXRPZmZzZXQocGFyZW50LCBzZWxlY3QpO1xuXG4gICAgICAgIHRoaXMuX2Ryb3Bkb3duLnN0eWxlLmxlZnQgPSBvZmZzZXRMZWZ0ICsgJ3B4JztcbiAgICAgICAgdGhpcy5fZHJvcGRvd24uc3R5bGUud2lkdGggPSBzZWxlY3Qud2lkdGggKyAncHgnO1xuICAgICAgICB0aGlzLl9kcm9wZG93bi5zdHlsZS5taW5XaWR0aCA9IHNlbGVjdC53aWR0aCArICdweCc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0T2Zmc2V0KHBhcmVudDogQ2xpZW50UmVjdCwgc2VsZWN0OiBDbGllbnRSZWN0KSB7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gc2VsZWN0LmhlaWdodDtcblxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFBvc2l0aW9uID09PSAndG9wJykge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0Qm90dG9tID0gcGFyZW50LmJvdHRvbSAtIHNlbGVjdC5ib3R0b207XG4gICAgICAgICAgICB0aGlzLl9kcm9wZG93bi5zdHlsZS5ib3R0b20gPSBvZmZzZXRCb3R0b20gKyBkZWx0YSArICdweCc7XG4gICAgICAgICAgICB0aGlzLl9kcm9wZG93bi5zdHlsZS50b3AgPSAnYXV0byc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY3VycmVudFBvc2l0aW9uID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0VG9wID0gc2VsZWN0LnRvcCAtIHBhcmVudC50b3A7XG4gICAgICAgICAgICB0aGlzLl9kcm9wZG93bi5zdHlsZS50b3AgPSBvZmZzZXRUb3AgKyBkZWx0YSArICdweCc7XG4gICAgICAgICAgICB0aGlzLl9kcm9wZG93bi5zdHlsZS5ib3R0b20gPSAnYXV0byc7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25nLW9wdGlvbicsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgdGVtcGxhdGU6IGA8bmctY29udGVudD48L25nLWNvbnRlbnQ+YFxufSlcbmV4cG9ydCBjbGFzcyBOZ09wdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cbiAgICBASW5wdXQoKSB2YWx1ZTogYW55O1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGRpc2FibGVkKCkgeyByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7IH1cbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGFueSkgeyB0aGlzLl9kaXNhYmxlZCA9IHRoaXMuX2lzRGlzYWJsZWQodmFsdWUpIH1cblxuICAgIHJlYWRvbmx5IHN0YXRlQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PHsgdmFsdWU6IGFueSwgZGlzYWJsZWQ6IGJvb2xlYW4gfT4oKTtcbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHsgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZSQubmV4dCh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuX2Rpc2FibGVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2lzRGlzYWJsZWQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgYCR7dmFsdWV9YCAhPT0gJ2ZhbHNlJztcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmdTZWxlY3RDb25maWcge1xuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgbm90Rm91bmRUZXh0ID0gJ05vIGl0ZW1zIGZvdW5kJztcbiAgICB0eXBlVG9TZWFyY2hUZXh0ID0gJ1R5cGUgdG8gc2VhcmNoJztcbiAgICBhZGRUYWdUZXh0ID0gJ0FkZCBpdGVtJztcbiAgICBsb2FkaW5nVGV4dCA9ICdMb2FkaW5nLi4uJztcbiAgICBjbGVhckFsbFRleHQgPSAnQ2xlYXIgYWxsJztcbiAgICBkaXNhYmxlVmlydHVhbFNjcm9sbCA9IHRydWU7XG4gICAgb3Blbk9uRW50ZXIgPSB0cnVlO1xufVxuIiwiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGZvcndhcmRSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIEluamVjdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgQXR0cmlidXRlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCBzdGFydFdpdGgsIHRhcCwgZGVib3VuY2VUaW1lLCBtYXAsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgTmdPcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBOZ0xhYmVsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTmdIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBOZ0Zvb3RlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIE5nT3B0Z3JvdXBUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBOZ05vdEZvdW5kVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTmdUeXBlVG9TZWFyY2hUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBOZ0xvYWRpbmdUZXh0VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTmdNdWx0aUxhYmVsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTmdUYWdUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBOZ0xvYWRpbmdTcGlubmVyVGVtcGxhdGVEaXJlY3RpdmVcbn0gZnJvbSAnLi9uZy10ZW1wbGF0ZXMuZGlyZWN0aXZlJztcblxuaW1wb3J0IHsgQ29uc29sZVNlcnZpY2UgfSBmcm9tICcuL2NvbnNvbGUuc2VydmljZSc7XG5pbXBvcnQgeyBpc0RlZmluZWQsIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgaXNPYmplY3QgfSBmcm9tICcuL3ZhbHVlLXV0aWxzJztcbmltcG9ydCB7IEl0ZW1zTGlzdCB9IGZyb20gJy4vaXRlbXMtbGlzdCc7XG5pbXBvcnQgeyBOZ09wdGlvbiwgS2V5Q29kZSB9IGZyb20gJy4vbmctc2VsZWN0LnR5cGVzJztcbmltcG9ydCB7IG5ld0lkIH0gZnJvbSAnLi9pZCc7XG5pbXBvcnQgeyBOZ0Ryb3Bkb3duUGFuZWxDb21wb25lbnQgfSBmcm9tICcuL25nLWRyb3Bkb3duLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ09wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vbmctb3B0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbEZhY3RvcnkgfSBmcm9tICcuL3NlbGVjdGlvbi1tb2RlbCc7XG5pbXBvcnQgeyBOZ1NlbGVjdENvbmZpZyB9IGZyb20gJy4vY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmdEcm9wZG93blBhbmVsU2VydmljZSB9IGZyb20gJy4vbmctZHJvcGRvd24tcGFuZWwuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBTRUxFQ1RJT05fTU9ERUxfRkFDVE9SWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTZWxlY3Rpb25Nb2RlbEZhY3Rvcnk+KCduZy1zZWxlY3Qtc2VsZWN0aW9uLW1vZGVsJyk7XG5leHBvcnQgdHlwZSBEcm9wZG93blBvc2l0aW9uID0gJ2JvdHRvbScgfCAndG9wJyB8ICdhdXRvJztcbmV4cG9ydCB0eXBlIEF1dG9Db3JyZWN0ID0gJ29mZicgfCAnb24nO1xuZXhwb3J0IHR5cGUgQXV0b0NhcGl0YWxpemUgPSAnb2ZmJyB8ICdvbic7XG5leHBvcnQgdHlwZSBBZGRUYWdGbiA9ICgodGVybTogc3RyaW5nKSA9PiBhbnkgfCBQcm9taXNlPGFueT4pO1xuZXhwb3J0IHR5cGUgQ29tcGFyZVdpdGhGbiA9IChhOiBhbnksIGI6IGFueSkgPT4gYm9vbGVhbjtcbmV4cG9ydCB0eXBlIEdyb3VwVmFsdWVGbiA9IChrZXk6IHN0cmluZyB8IG9iamVjdCwgY2hpbGRyZW46IGFueVtdKSA9PiBzdHJpbmcgfCBvYmplY3Q7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmctc2VsZWN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmctc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9uZy1zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFt7XG4gICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ1NlbGVjdENvbXBvbmVudCksXG4gICAgICAgIG11bHRpOiB0cnVlXG4gICAgfSwgTmdEcm9wZG93blBhbmVsU2VydmljZV0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgICdyb2xlJzogJ2xpc3Rib3gnLFxuICAgICAgICAnY2xhc3MnOiAnbmctc2VsZWN0JyxcbiAgICAgICAgJ1tjbGFzcy5uZy1zZWxlY3Qtc2luZ2xlXSc6ICchbXVsdGlwbGUnLFxuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgTmdTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gICAgQElucHV0KCkgYmluZExhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYmluZFZhbHVlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgbWFya0ZpcnN0ID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG5vdEZvdW5kVGV4dDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHR5cGVUb1NlYXJjaFRleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBhZGRUYWdUZXh0OiBzdHJpbmc7XG4gICAgQElucHV0KCkgbG9hZGluZ1RleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBjbGVhckFsbFRleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBkcm9wZG93blBvc2l0aW9uOiBEcm9wZG93blBvc2l0aW9uID0gJ2F1dG8nO1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvOiBzdHJpbmc7XG4gICAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGNsb3NlT25TZWxlY3QgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGhpZGVTZWxlY3RlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNlbGVjdE9uVGFiID0gZmFsc2U7XG4gICAgQElucHV0KCkgb3Blbk9uRW50ZXI6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbWF4U2VsZWN0ZWRJdGVtczogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGdyb3VwQnk6IHN0cmluZyB8IEZ1bmN0aW9uO1xuICAgIEBJbnB1dCgpIGdyb3VwVmFsdWU6IEdyb3VwVmFsdWVGbjtcbiAgICBASW5wdXQoKSBidWZmZXJBbW91bnQgPSA0O1xuICAgIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGw6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2VsZWN0YWJsZUdyb3VwID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2VsZWN0YWJsZUdyb3VwQXNNb2RlbCA9IHRydWU7XG4gICAgQElucHV0KCkgc2VhcmNoRm4gPSBudWxsO1xuICAgIEBJbnB1dCgpIHRyYWNrQnlGbiA9IG51bGw7XG4gICAgQElucHV0KCkgZXhjbHVkZUdyb3Vwc0Zyb21EZWZhdWx0U2VsZWN0aW9uID0gZmFsc2U7XG4gICAgQElucHV0KCkgY2xlYXJPbkJhY2tzcGFjZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBsYWJlbEZvcklkID0gbnVsbDtcbiAgICBASW5wdXQoKSBhdXRvQ29ycmVjdDogQXV0b0NvcnJlY3QgPSAnb2ZmJztcbiAgICBASW5wdXQoKSBhdXRvQ2FwaXRhbGl6ZTogQXV0b0NhcGl0YWxpemUgPSAnb2ZmJztcbiAgICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzLm5nLXNlbGVjdC10eXBlYWhlYWQnKSB0eXBlYWhlYWQ6IFN1YmplY3Q8c3RyaW5nPjtcbiAgICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzLm5nLXNlbGVjdC1tdWx0aXBsZScpIG11bHRpcGxlID0gZmFsc2U7XG4gICAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdjbGFzcy5uZy1zZWxlY3QtdGFnZ2FibGUnKSBhZGRUYWc6IGJvb2xlYW4gfCBBZGRUYWdGbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3Mubmctc2VsZWN0LXNlYXJjaGFibGUnKSBzZWFyY2hhYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzLm5nLXNlbGVjdC1jbGVhcmFibGUnKSBjbGVhcmFibGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3Mubmctc2VsZWN0LW9wZW5lZCcpIGlzT3BlbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXRlbXMoKSB7IHJldHVybiB0aGlzLl9pdGVtcyB9O1xuICAgIHNldCBpdGVtcyh2YWx1ZTogYW55W10pIHtcbiAgICAgICAgdGhpcy5faXRlbXNBcmVVc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5faXRlbXMgPSB2YWx1ZTtcbiAgICB9O1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgY29tcGFyZVdpdGgoKSB7IHJldHVybiB0aGlzLl9jb21wYXJlV2l0aDsgfVxuICAgIHNldCBjb21wYXJlV2l0aChmbjogQ29tcGFyZVdpdGhGbikge1xuICAgICAgICBpZiAoIWlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignYGNvbXBhcmVXaXRoYCBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29tcGFyZVdpdGggPSBmbjtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBjbGVhclNlYXJjaE9uQWRkKCkgeyByZXR1cm4gaXNEZWZpbmVkKHRoaXMuX2NsZWFyU2VhcmNoT25BZGQpID8gdGhpcy5fY2xlYXJTZWFyY2hPbkFkZCA6IHRoaXMuY2xvc2VPblNlbGVjdDsgfTtcbiAgICBzZXQgY2xlYXJTZWFyY2hPbkFkZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9jbGVhclNlYXJjaE9uQWRkID0gdmFsdWU7XG4gICAgfTtcblxuICAgIC8vIG91dHB1dCBldmVudHNcbiAgICBAT3V0cHV0KCdibHVyJykgYmx1ckV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoJ2ZvY3VzJykgZm9jdXNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCdjaGFuZ2UnKSBjaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCdvcGVuJykgb3BlbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoJ2Nsb3NlJykgY2xvc2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCdzZWFyY2gnKSBzZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e3Rlcm06IHN0cmluZywgaXRlbXM6IGFueVtdfT4oKTtcbiAgICBAT3V0cHV0KCdjbGVhcicpIGNsZWFyRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgnYWRkJykgYWRkRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgncmVtb3ZlJykgcmVtb3ZlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgnc2Nyb2xsJykgc2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0+KCk7XG4gICAgQE91dHB1dCgnc2Nyb2xsVG9FbmQnKSBzY3JvbGxUb0VuZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8vIGN1c3RvbSB0ZW1wbGF0ZXNcbiAgICBAQ29udGVudENoaWxkKE5nT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgb3B0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZChOZ09wdGdyb3VwVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgb3B0Z3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKE5nTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBsYWJlbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoTmdNdWx0aUxhYmVsVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgbXVsdGlMYWJlbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoTmdIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBoZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKE5nRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgZm9vdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZChOZ05vdEZvdW5kVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgbm90Rm91bmRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKE5nVHlwZVRvU2VhcmNoVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgdHlwZVRvU2VhcmNoVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZChOZ0xvYWRpbmdUZXh0VGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgbG9hZGluZ1RleHRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKE5nVGFnVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgdGFnVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZChOZ0xvYWRpbmdTcGlubmVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgbG9hZGluZ1NwaW5uZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBOZ0Ryb3Bkb3duUGFuZWxDb21wb25lbnQpKSBkcm9wZG93blBhbmVsOiBOZ0Ryb3Bkb3duUGFuZWxDb21wb25lbnQ7XG4gICAgQENvbnRlbnRDaGlsZHJlbihOZ09wdGlvbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBuZ09wdGlvbnM6IFF1ZXJ5TGlzdDxOZ09wdGlvbkNvbXBvbmVudD47XG4gICAgQFZpZXdDaGlsZCgnZmlsdGVySW5wdXQnKSBmaWx0ZXJJbnB1dDogRWxlbWVudFJlZjtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mubmctc2VsZWN0LWRpc2FibGVkJykgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5nLXNlbGVjdC1maWx0ZXJlZCcpIGdldCBmaWx0ZXJlZCgpIHsgcmV0dXJuICEhdGhpcy5maWx0ZXJWYWx1ZSAmJiB0aGlzLnNlYXJjaGFibGUgfTtcblxuICAgIGl0ZW1zTGlzdDogSXRlbXNMaXN0O1xuICAgIHZpZXdQb3J0SXRlbXM6IE5nT3B0aW9uW10gPSBbXTtcbiAgICBmaWx0ZXJWYWx1ZTogc3RyaW5nID0gbnVsbDtcbiAgICBkcm9wZG93bklkID0gbmV3SWQoKTtcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBmb2N1c2VkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBfaXRlbXMgPSBbXTtcbiAgICBwcml2YXRlIF9pdGVtc0FyZVVzZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZGVmYXVsdExhYmVsID0gJ2xhYmVsJztcbiAgICBwcml2YXRlIF9wcmltaXRpdmU7XG4gICAgcHJpdmF0ZSBfbWFudWFsT3BlbjogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9wcmVzc2VkS2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9jb21wYXJlV2l0aDogQ29tcGFyZVdpdGhGbjtcbiAgICBwcml2YXRlIF9jbGVhclNlYXJjaE9uQWRkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2tleVByZXNzJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIF9vbkNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcbiAgICBwcml2YXRlIF9vblRvdWNoZWQgPSAoKSA9PiB7IH07XG5cbiAgICBjbGVhckl0ZW0gPSAoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maW5kKHggPT4geC52YWx1ZSA9PT0gaXRlbSk7XG4gICAgICAgIHRoaXMudW5zZWxlY3Qob3B0aW9uKTtcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2NsYXNzJykgcHVibGljIGNsYXNzZXM6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgndGFiaW5kZXgnKSBwdWJsaWMgdGFiSW5kZXg6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnYXV0b2ZvY3VzJykgcHJpdmF0ZSBhdXRvRm9jdXM6IGFueSxcbiAgICAgICAgY29uZmlnOiBOZ1NlbGVjdENvbmZpZyxcbiAgICAgICAgQEluamVjdChTRUxFQ1RJT05fTU9ERUxfRkFDVE9SWSkgbmV3U2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsRmFjdG9yeSxcbiAgICAgICAgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfY29uc29sZTogQ29uc29sZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5fbWVyZ2VHbG9iYWxDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5pdGVtc0xpc3QgPSBuZXcgSXRlbXNMaXN0KHRoaXMsIG5ld1NlbGVjdGlvbk1vZGVsKCkpO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBfZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZEl0ZW1zKCk6IE5nT3B0aW9uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtc0xpc3Quc2VsZWN0ZWRJdGVtcztcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRWYWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubWFwKHggPT4geC52YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc1ZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgZ2V0IGN1cnJlbnRQYW5lbFBvc2l0aW9uKCk6IERyb3Bkb3duUG9zaXRpb24ge1xuICAgICAgICBpZiAodGhpcy5kcm9wZG93blBhbmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kcm9wZG93blBhbmVsLmN1cnJlbnRQb3NpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLl9oYW5kbGVLZXlQcmVzc2VzKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5pdGVtc0xpc3QuY2xlYXJTZWxlY3RlZCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLml0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRJdGVtcyhjaGFuZ2VzLml0ZW1zLmN1cnJlbnRWYWx1ZSB8fCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9tYW51YWxPcGVuID0gaXNEZWZpbmVkKGNoYW5nZXMuaXNPcGVuLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5faXRlbXNBcmVVc2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRJdGVtc0Zyb21OZ09wdGlvbnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5hdXRvRm9jdXMpKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIGhhbmRsZUtleURvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChLZXlDb2RlWyRldmVudC53aGljaF0pIHtcbiAgICAgICAgICAgIHN3aXRjaCAoJGV2ZW50LndoaWNoKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkFycm93RG93bjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQXJyb3dEb3duKCRldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5BcnJvd1VwOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJvd1VwKCRldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5TcGFjZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlU3BhY2UoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVudGVyOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVFbnRlcigkZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGUuVGFiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVUYWIoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVzYzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkJhY2tzcGFjZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQmFja3NwYWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCRldmVudC5rZXkgJiYgJGV2ZW50LmtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2tleVByZXNzJC5uZXh0KCRldmVudC5rZXkudG9Mb2NhbGVMb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVNb3VzZWRvd24oJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9ICRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXQudGFnTmFtZSAhPT0gJ0lOUFVUJykge1xuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbmctY2xlYXItd3JhcHBlcicpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNsZWFyQ2xpY2soKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1hcnJvdy13cmFwcGVyJykpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXJyb3dDbGljaygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLXZhbHVlLWljb24nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUFycm93Q2xpY2soKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDbGVhckNsaWNrKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5pdGVtc0xpc3QuY2xlYXJTZWxlY3RlZCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU5nTW9kZWwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jbGVhclNlYXJjaCgpO1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIGlmICh0aGlzLl9pc1R5cGVhaGVhZCkge1xuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQubmV4dChudWxsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyRXZlbnQuZW1pdCgpO1xuXG4gICAgICAgIHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIGNsZWFyTW9kZWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbGVhcmFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1zTGlzdC5jbGVhclNlbGVjdGVkKCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZU5nTW9kZWwoKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkgfCBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1zTGlzdC5jbGVhclNlbGVjdGVkKCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZVdyaXRlVmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9wZW4oKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuaXNPcGVuIHx8IHRoaXMuaXRlbXNMaXN0Lm1heEl0ZW1zU2VsZWN0ZWQgfHwgdGhpcy5fbWFudWFsT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9pc1R5cGVhaGVhZCAmJiAhdGhpcy5hZGRUYWcgJiYgdGhpcy5pdGVtc0xpc3Qubm9JdGVtc1RvU2VsZWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLml0ZW1zTGlzdC5tYXJrU2VsZWN0ZWRPckRlZmF1bHQodGhpcy5tYXJrRmlyc3QpO1xuICAgICAgICB0aGlzLm9wZW5FdmVudC5lbWl0KCk7XG4gICAgICAgIGlmICghdGhpcy5maWx0ZXJWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuIHx8IHRoaXMuX21hbnVhbE9wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jbGVhclNlYXJjaCgpO1xuICAgICAgICB0aGlzLml0ZW1zTGlzdC51bm1hcmtJdGVtKCk7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmNsb3NlRXZlbnQuZW1pdCgpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICB0b2dnbGVJdGVtKGl0ZW06IE5nT3B0aW9uKSB7XG4gICAgICAgIGlmICghaXRlbSB8fCBpdGVtLmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlICYmIGl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3QoaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdChpdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIHNlbGVjdChpdGVtOiBOZ09wdGlvbikge1xuICAgICAgICBpZiAoIWl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNMaXN0LnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWFyU2VhcmNoT25BZGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGVhclNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRXZlbnQuZW1pdChpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU5nTW9kZWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNsb3NlT25TZWxlY3QgfHwgdGhpcy5pdGVtc0xpc3Qubm9JdGVtc1RvU2VsZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb2N1cygpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgdW5zZWxlY3QoaXRlbTogTmdPcHRpb24pIHtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLml0ZW1zTGlzdC51bnNlbGVjdChpdGVtKTtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB0aGlzLl91cGRhdGVOZ01vZGVsKCk7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnQuZW1pdChpdGVtKTtcbiAgICB9XG5cbiAgICBzZWxlY3RUYWcoKSB7XG4gICAgICAgIGxldCB0YWc7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXMuYWRkVGFnKSkge1xuICAgICAgICAgICAgdGFnID0gKDxBZGRUYWdGbj50aGlzLmFkZFRhZykodGhpcy5maWx0ZXJWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YWcgPSB0aGlzLl9wcmltaXRpdmUgPyB0aGlzLmZpbHRlclZhbHVlIDogeyBbdGhpcy5iaW5kTGFiZWxdOiB0aGlzLmZpbHRlclZhbHVlIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYW5kbGVUYWcgPSAoaXRlbSkgPT4gdGhpcy5faXNUeXBlYWhlYWQgfHwgIXRoaXMuaXNPcGVuID8gdGhpcy5pdGVtc0xpc3QubWFwSXRlbShpdGVtLCBudWxsKSA6IHRoaXMuaXRlbXNMaXN0LmFkZEl0ZW0oaXRlbSk7XG4gICAgICAgIGlmIChpc1Byb21pc2UodGFnKSkge1xuICAgICAgICAgICAgdGFnLnRoZW4oaXRlbSA9PiB0aGlzLnNlbGVjdChoYW5kbGVUYWcoaXRlbSkpKS5jYXRjaCgoKSA9PiB7IH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QoaGFuZGxlVGFnKHRhZykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvd0NsZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGUgJiYgKHRoaXMuaGFzVmFsdWUgfHwgdGhpcy5maWx0ZXJWYWx1ZSkgJiYgIXRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgdHJhY2tCeU9wdGlvbiA9IChfOiBudW1iZXIsIGl0ZW06IE5nT3B0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnRyYWNrQnlGbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhY2tCeUZuKGl0ZW0udmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGdldCBzaG93QWRkVGFnKCkge1xuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRlcm0gPSB0aGlzLmZpbHRlclZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFRhZyAmJlxuICAgICAgICAgICAgKCF0aGlzLml0ZW1zTGlzdC5maWx0ZXJlZEl0ZW1zLnNvbWUoeCA9PiB4LmxhYmVsLnRvTG93ZXJDYXNlKCkgPT09IHRlcm0pICYmXG4gICAgICAgICAgICAgICAgKCF0aGlzLmhpZGVTZWxlY3RlZCAmJiB0aGlzLmlzT3BlbiB8fCAhdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoeCA9PiB4LmxhYmVsLnRvTG93ZXJDYXNlKCkgPT09IHRlcm0pKSkgJiZcbiAgICAgICAgICAgICF0aGlzLmxvYWRpbmc7XG4gICAgfVxuXG4gICAgc2hvd05vSXRlbXNGb3VuZCgpIHtcbiAgICAgICAgY29uc3QgZW1wdHkgPSB0aGlzLml0ZW1zTGlzdC5maWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgcmV0dXJuICgoZW1wdHkgJiYgIXRoaXMuX2lzVHlwZWFoZWFkICYmICF0aGlzLmxvYWRpbmcpIHx8XG4gICAgICAgICAgICAoZW1wdHkgJiYgdGhpcy5faXNUeXBlYWhlYWQgJiYgdGhpcy5maWx0ZXJWYWx1ZSAmJiAhdGhpcy5sb2FkaW5nKSkgJiZcbiAgICAgICAgICAgICF0aGlzLnNob3dBZGRUYWc7XG4gICAgfVxuXG4gICAgc2hvd1R5cGVUb1NlYXJjaCgpIHtcbiAgICAgICAgY29uc3QgZW1wdHkgPSB0aGlzLml0ZW1zTGlzdC5maWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgcmV0dXJuIGVtcHR5ICYmIHRoaXMuX2lzVHlwZWFoZWFkICYmICF0aGlzLmZpbHRlclZhbHVlICYmICF0aGlzLmxvYWRpbmc7XG4gICAgfVxuXG4gICAgZmlsdGVyKHRlcm06IHN0cmluZykge1xuICAgICAgICB0aGlzLmZpbHRlclZhbHVlID0gdGVybTtcblxuICAgICAgICBpZiAodGhpcy5faXNUeXBlYWhlYWQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLm5leHQodGhpcy5maWx0ZXJWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zTGlzdC5maWx0ZXIodGhpcy5maWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zTGlzdC5tYXJrU2VsZWN0ZWRPckRlZmF1bHQodGhpcy5tYXJrRmlyc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHsgdGVybSwgaXRlbXM6IHRoaXMuaXRlbXNMaXN0LmZpbHRlcmVkSXRlbXMubWFwKHggPT4geC52YWx1ZSkgfSk7XG5cbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuXG4gICAgb25JbnB1dEZvY3VzKCRldmVudCkge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbmctc2VsZWN0LWZvY3VzZWQnKTtcbiAgICAgICAgdGhpcy5mb2N1c0V2ZW50LmVtaXQoJGV2ZW50KTtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbklucHV0Qmx1cigkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ25nLXNlbGVjdC1mb2N1c2VkJyk7XG4gICAgICAgIHRoaXMuYmx1ckV2ZW50LmVtaXQoJGV2ZW50KTtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbiAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25JdGVtSG92ZXIoaXRlbTogTmdPcHRpb24pIHtcbiAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1zTGlzdC5tYXJrSXRlbShpdGVtKTtcbiAgICB9XG5cbiAgICBkZXRlY3RDaGFuZ2VzKCkge1xuICAgICAgICBpZiAoISg8YW55PnRoaXMuX2NkKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NldEl0ZW1zKGl0ZW1zOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBmaXJzdEl0ZW0gPSBpdGVtc1swXTtcbiAgICAgICAgdGhpcy5iaW5kTGFiZWwgPSB0aGlzLmJpbmRMYWJlbCB8fCB0aGlzLl9kZWZhdWx0TGFiZWw7XG4gICAgICAgIHRoaXMuX3ByaW1pdGl2ZSA9IGlzRGVmaW5lZChmaXJzdEl0ZW0pID8gIWlzT2JqZWN0KGZpcnN0SXRlbSkgOiB0aGlzLl9wcmltaXRpdmUgfHwgdGhpcy5iaW5kTGFiZWwgPT09IHRoaXMuX2RlZmF1bHRMYWJlbDtcbiAgICAgICAgdGhpcy5pdGVtc0xpc3Quc2V0SXRlbXMoaXRlbXMpO1xuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCAmJiB0aGlzLmhhc1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zTGlzdC5tYXBTZWxlY3RlZEl0ZW1zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIGlzRGVmaW5lZCh0aGlzLmZpbHRlclZhbHVlKSAmJiAhdGhpcy5faXNUeXBlYWhlYWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNMaXN0LmZpbHRlcih0aGlzLmZpbHRlclZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faXNUeXBlYWhlYWQgfHwgdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNMaXN0Lm1hcmtTZWxlY3RlZE9yRGVmYXVsdCh0aGlzLm1hcmtGaXJzdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRJdGVtc0Zyb21OZ09wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZU5nT3B0aW9ucyA9IChvcHRpb25zOiBRdWVyeUxpc3Q8TmdPcHRpb25Db21wb25lbnQ+KSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zID0gb3B0aW9ucy5tYXAob3B0aW9uID0+ICh7XG4gICAgICAgICAgICAgICAgJG5nT3B0aW9uVmFsdWU6IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAkbmdPcHRpb25MYWJlbDogb3B0aW9uLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lckhUTUwsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IG9wdGlvbi5kaXNhYmxlZFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdGhpcy5pdGVtc0xpc3Quc2V0SXRlbXModGhpcy5pdGVtcyk7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNMaXN0Lm1hcFNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZU9wdGlvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRPckRlc3Ryb3llZCA9IG1lcmdlKHRoaXMubmdPcHRpb25zLmNoYW5nZXMsIHRoaXMuX2Rlc3Ryb3kkKTtcbiAgICAgICAgICAgIG1lcmdlKC4uLnRoaXMubmdPcHRpb25zLm1hcChvcHRpb24gPT4gb3B0aW9uLnN0YXRlQ2hhbmdlJCkpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKGNoYW5nZWRPckRlc3Ryb3llZCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShvcHRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtc0xpc3QuZmluZEl0ZW0ob3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlZCA9IG9wdGlvbi5kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5uZ09wdGlvbnMuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKHRoaXMubmdPcHRpb25zKSwgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUob3B0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kTGFiZWwgPSB0aGlzLl9kZWZhdWx0TGFiZWw7XG4gICAgICAgICAgICAgICAgaGFuZGxlTmdPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGhhbmRsZU9wdGlvbkNoYW5nZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXNWYWxpZFdyaXRlVmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWlzRGVmaW5lZCh2YWx1ZSkgfHwgKHRoaXMubXVsdGlwbGUgJiYgdmFsdWUgPT09ICcnKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlQmluZGluZyA9IChpdGVtOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIGlmICghaXNEZWZpbmVkKHRoaXMuY29tcGFyZVdpdGgpICYmIGlzT2JqZWN0KGl0ZW0pICYmIHRoaXMuYmluZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29uc29sZS53YXJuKGBCaW5kaW5nIG9iamVjdCgke0pTT04uc3RyaW5naWZ5KGl0ZW0pfSkgd2l0aCBiaW5kVmFsdWUgaXMgbm90IGFsbG93ZWQuYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb25zb2xlLndhcm4oJ011bHRpcGxlIHNlbGVjdCBuZ01vZGVsIHNob3VsZCBiZSBhcnJheS4nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuZXZlcnkoaXRlbSA9PiB2YWxpZGF0ZUJpbmRpbmcoaXRlbSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlQmluZGluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVXcml0ZVZhbHVlKG5nTW9kZWw6IGFueSB8IGFueVtdKSB7XG4gICAgICAgIGlmICghdGhpcy5faXNWYWxpZFdyaXRlVmFsdWUobmdNb2RlbCkpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ID0gKHZhbDogYW55KSA9PiB7XG4gICAgICAgICAgICBsZXQgaXRlbSA9IHRoaXMuaXRlbXNMaXN0LmZpbmRJdGVtKHZhbCk7XG4gICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNMaXN0LnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNWYWxPYmplY3QgPSBpc09iamVjdCh2YWwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUHJpbWl0aXZlID0gIWlzVmFsT2JqZWN0ICYmICF0aGlzLmJpbmRWYWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoKGlzVmFsT2JqZWN0IHx8IGlzUHJpbWl0aXZlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zTGlzdC5zZWxlY3QodGhpcy5pdGVtc0xpc3QubWFwSXRlbSh2YWwsIG51bGwpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYmluZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy5iaW5kTGFiZWxdOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMuYmluZFZhbHVlXTogdmFsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNMaXN0LnNlbGVjdCh0aGlzLml0ZW1zTGlzdC5tYXBJdGVtKGl0ZW0sIG51bGwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICg8YW55W10+bmdNb2RlbCkuZm9yRWFjaChpdGVtID0+IHNlbGVjdChpdGVtKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3QobmdNb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVLZXlQcmVzc2VzKCkge1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9rZXlQcmVzcyRcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgdGFwKGxldHRlciA9PiB0aGlzLl9wcmVzc2VkS2V5cy5wdXNoKGxldHRlcikpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9wcmVzc2VkS2V5cy5sZW5ndGggPiAwKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5fcHJlc3NlZEtleXMuam9pbignJykpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0ZXJtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtc0xpc3QuZmluZEJ5TGFiZWwodGVybSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zTGlzdC5tYXJrSXRlbShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJlc3NlZEtleXMgPSBbXTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZU5nTW9kZWwoKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnNlbGVjdGVkSXRlbXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmJpbmRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBLZXkgPSB0aGlzLmdyb3VwVmFsdWUgPyB0aGlzLmJpbmRWYWx1ZSA6IDxzdHJpbmc+dGhpcy5ncm91cEJ5O1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW0udmFsdWVbZ3JvdXBLZXkgfHwgPHN0cmluZz50aGlzLmdyb3VwQnldO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5pdGVtc0xpc3QucmVzb2x2ZU5lc3RlZChpdGVtLnZhbHVlLCB0aGlzLmJpbmRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1vZGVsLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbC5wdXNoKGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSXRlbXMubWFwKHggPT4geC52YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZShtb2RlbCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUV2ZW50LmVtaXQoc2VsZWN0ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UoaXNEZWZpbmVkKG1vZGVsWzBdKSA/IG1vZGVsWzBdIDogbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUV2ZW50LmVtaXQoc2VsZWN0ZWRbMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xlYXJTZWFyY2goKSB7XG4gICAgICAgIGlmICghdGhpcy5maWx0ZXJWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuaXRlbXNMaXN0LnJlc2V0RmlsdGVyZWRJdGVtcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Njcm9sbFRvTWFya2VkKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuIHx8ICF0aGlzLmRyb3Bkb3duUGFuZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRyb3Bkb3duUGFuZWwuc2Nyb2xsVG8odGhpcy5pdGVtc0xpc3QubWFya2VkSXRlbSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2Nyb2xsVG9UYWcoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4gfHwgIXRoaXMuZHJvcGRvd25QYW5lbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZHJvcGRvd25QYW5lbC5zY3JvbGxUb1RhZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX29uU2VsZWN0aW9uQ2hhbmdlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHRoaXMubXVsdGlwbGUgJiYgdGhpcy5hcHBlbmRUbykge1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGl0ZW1zIGFyZSByZW5kZXJlZC5cbiAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25QYW5lbC5hZGp1c3RQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGFuZGxlVGFiKCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4gPT09IGZhbHNlICYmICF0aGlzLmFkZFRhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0T25UYWIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zTGlzdC5tYXJrZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVJdGVtKHRoaXMuaXRlbXNMaXN0Lm1hcmtlZEl0ZW0pO1xuICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dBZGRUYWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRhZygpO1xuICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVFbnRlcigkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuIHx8IHRoaXMuX21hbnVhbE9wZW4pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zTGlzdC5tYXJrZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVJdGVtKHRoaXMuaXRlbXNMaXN0Lm1hcmtlZEl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dBZGRUYWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRhZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3Blbk9uRW50ZXIpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGFuZGxlU3BhY2UoJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3BlbiB8fCB0aGlzLl9tYW51YWxPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hhbmRsZUFycm93RG93bigkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX25leHRJdGVtSXNUYWcoKzEpKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zTGlzdC51bm1hcmtJdGVtKCk7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxUb1RhZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pdGVtc0xpc3QubWFya05leHRJdGVtKCk7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxUb01hcmtlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVBcnJvd1VwKCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbmV4dEl0ZW1Jc1RhZygtMSkpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNMaXN0LnVubWFya0l0ZW0oKTtcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvVGFnKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zTGlzdC5tYXJrUHJldmlvdXNJdGVtKCk7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxUb01hcmtlZCgpO1xuICAgICAgICB9XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX25leHRJdGVtSXNUYWcobmV4dFN0ZXA6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSB0aGlzLml0ZW1zTGlzdC5tYXJrZWRJbmRleCArIG5leHRTdGVwO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRUYWcgJiYgdGhpcy5maWx0ZXJWYWx1ZVxuICAgICAgICAgICAgJiYgdGhpcy5pdGVtc0xpc3QubWFya2VkSXRlbVxuICAgICAgICAgICAgJiYgKG5leHRJbmRleCA8IDAgfHwgbmV4dEluZGV4ID09PSB0aGlzLml0ZW1zTGlzdC5maWx0ZXJlZEl0ZW1zLmxlbmd0aClcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVCYWNrc3BhY2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclZhbHVlIHx8ICF0aGlzLmNsZWFyYWJsZSB8fCAhdGhpcy5jbGVhck9uQmFja3NwYWNlIHx8ICF0aGlzLmhhc1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy51bnNlbGVjdCh0aGlzLml0ZW1zTGlzdC5sYXN0U2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJNb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgX2lzVHlwZWFoZWFkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlYWhlYWQgJiYgdGhpcy50eXBlYWhlYWQub2JzZXJ2ZXJzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWVyZ2VHbG9iYWxDb25maWcoY29uZmlnOiBOZ1NlbGVjdENvbmZpZykge1xuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlciB8fCBjb25maWcucGxhY2Vob2xkZXI7XG4gICAgICAgIHRoaXMubm90Rm91bmRUZXh0ID0gdGhpcy5ub3RGb3VuZFRleHQgfHwgY29uZmlnLm5vdEZvdW5kVGV4dDtcbiAgICAgICAgdGhpcy50eXBlVG9TZWFyY2hUZXh0ID0gdGhpcy50eXBlVG9TZWFyY2hUZXh0IHx8IGNvbmZpZy50eXBlVG9TZWFyY2hUZXh0O1xuICAgICAgICB0aGlzLmFkZFRhZ1RleHQgPSB0aGlzLmFkZFRhZ1RleHQgfHwgY29uZmlnLmFkZFRhZ1RleHQ7XG4gICAgICAgIHRoaXMubG9hZGluZ1RleHQgPSB0aGlzLmxvYWRpbmdUZXh0IHx8IGNvbmZpZy5sb2FkaW5nVGV4dDtcbiAgICAgICAgdGhpcy5jbGVhckFsbFRleHQgPSB0aGlzLmNsZWFyQWxsVGV4dCB8fCBjb25maWcuY2xlYXJBbGxUZXh0O1xuICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwgPSBpc0RlZmluZWQodGhpcy52aXJ0dWFsU2Nyb2xsKVxuICAgICAgICAgICAgPyB0aGlzLnZpcnR1YWxTY3JvbGxcbiAgICAgICAgICAgIDogaXNEZWZpbmVkKGNvbmZpZy5kaXNhYmxlVmlydHVhbFNjcm9sbCkgPyAhY29uZmlnLmRpc2FibGVWaXJ0dWFsU2Nyb2xsIDogZmFsc2U7XG4gICAgICAgIHRoaXMub3Blbk9uRW50ZXIgPSBpc0RlZmluZWQodGhpcy5vcGVuT25FbnRlcikgPyB0aGlzLm9wZW5PbkVudGVyIDogY29uZmlnLm9wZW5PbkVudGVyO1xuICAgIH1cbn1cbiIsImltcG9ydCAqIGFzIHNlYXJjaEhlbHBlciBmcm9tICcuL3NlYXJjaC1oZWxwZXInO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBSZW5kZXJlcjJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0RlZmluZWQgfSBmcm9tICcuL3ZhbHVlLXV0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbmdPcHRpb25IaWdobGlnaHRdJ1xufSlcbmV4cG9ydCBjbGFzcyBOZ09wdGlvbkhpZ2hsaWdodERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICBASW5wdXQoJ25nT3B0aW9uSGlnaGxpZ2h0JykgdGVybTogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIGxhYmVsOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jYW5IaWdobGlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodExhYmVsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMubGFiZWwgPSB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICBpZiAodGhpcy5fY2FuSGlnaGxpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRMYWJlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGlnaGxpZ2h0TGFiZWwoKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5sYWJlbDtcbiAgICAgICAgaWYgKCF0aGlzLnRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMuX3NldElubmVySHRtbChsYWJlbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleE9mVGVybSA9IHNlYXJjaEhlbHBlci5zdHJpcFNwZWNpYWxDaGFycyhsYWJlbClcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAuaW5kZXhPZihzZWFyY2hIZWxwZXIuc3RyaXBTcGVjaWFsQ2hhcnModGhpcy50ZXJtKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKGluZGV4T2ZUZXJtID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldElubmVySHRtbChcbiAgICAgICAgICAgICAgICBsYWJlbC5zdWJzdHJpbmcoMCwgaW5kZXhPZlRlcm0pXG4gICAgICAgICAgICAgICAgKyBgPHNwYW4gY2xhc3M9XCJoaWdobGlnaHRlZFwiPiR7bGFiZWwuc3Vic3RyKGluZGV4T2ZUZXJtLCB0aGlzLnRlcm0ubGVuZ3RoKX08L3NwYW4+YFxuICAgICAgICAgICAgICAgICsgbGFiZWwuc3Vic3RyaW5nKGluZGV4T2ZUZXJtICsgdGhpcy50ZXJtLmxlbmd0aCwgbGFiZWwubGVuZ3RoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRJbm5lckh0bWwobGFiZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgX2NhbkhpZ2hsaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIGlzRGVmaW5lZCh0aGlzLnRlcm0pICYmIGlzRGVmaW5lZCh0aGlzLmxhYmVsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRJbm5lckh0bWwoaHRtbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnaW5uZXJIVE1MJywgaHRtbCk7XG4gICAgfVxufSAgIFxuIiwiaW1wb3J0IHsgTmdPcHRpb24gfSBmcm9tICcuL25nLXNlbGVjdC50eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdGlvbk1vZGVsRmFjdG9yeSA9ICgpID0+IFNlbGVjdGlvbk1vZGVsO1xuXG5leHBvcnQgZnVuY3Rpb24gRGVmYXVsdFNlbGVjdGlvbk1vZGVsRmFjdG9yeSgpIHtcbiAgICByZXR1cm4gbmV3IERlZmF1bHRTZWxlY3Rpb25Nb2RlbCgpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbk1vZGVsIHtcbiAgICB2YWx1ZTogTmdPcHRpb25bXTtcbiAgICBzZWxlY3QoaXRlbTogTmdPcHRpb24sIG11bHRpcGxlOiBib29sZWFuLCBzZWxlY3RhYmxlR3JvdXBBc01vZGVsOiBib29sZWFuKTtcbiAgICB1bnNlbGVjdChpdGVtOiBOZ09wdGlvbiwgbXVsdGlwbGU6IGJvb2xlYW4pO1xuICAgIGNsZWFyKGtlZXBEaXNhYmxlZDogYm9vbGVhbik7XG59XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0U2VsZWN0aW9uTW9kZWwgaW1wbGVtZW50cyBTZWxlY3Rpb25Nb2RlbCB7XG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQ6IE5nT3B0aW9uW10gPSBbXTtcblxuICAgIGdldCB2YWx1ZSgpOiBOZ09wdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cblxuICAgIHNlbGVjdChpdGVtOiBOZ09wdGlvbiwgbXVsdGlwbGU6IGJvb2xlYW4sIGdyb3VwQXNNb2RlbDogYm9vbGVhbikge1xuICAgICAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKGdyb3VwQXNNb2RlbCB8fCAhaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuQ291bnQgPSBpdGVtLnBhcmVudC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IGl0ZW0ucGFyZW50LmNoaWxkcmVuLmZpbHRlcih4ID0+IHguc2VsZWN0ZWQpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpdGVtLnBhcmVudC5zZWxlY3RlZCA9IGNoaWxkcmVuQ291bnQgPT09IHNlbGVjdGVkQ291bnQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRDaGlsZHJlblNlbGVjdGVkU3RhdGUoaXRlbS5jaGlsZHJlbiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQ2hpbGRyZW4oaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKCFncm91cEFzTW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBbLi4udGhpcy5fc2VsZWN0ZWQsIC4uLml0ZW0uY2hpbGRyZW5dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuc2VsZWN0KGl0ZW06IE5nT3B0aW9uLCBtdWx0aXBsZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuX3NlbGVjdGVkLmZpbHRlcih4ID0+IHggIT09IGl0ZW0pO1xuICAgICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKGl0ZW0ucGFyZW50ICYmIGl0ZW0ucGFyZW50LnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBpdGVtLnBhcmVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVQYXJlbnQoaXRlbS5wYXJlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUNoaWxkcmVuKGl0ZW0ucGFyZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZC5wdXNoKC4uLmNoaWxkcmVuLmZpbHRlcih4ID0+IHggIT09IGl0ZW0pKTtcbiAgICAgICAgICAgICAgICBpdGVtLnBhcmVudC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q2hpbGRyZW5TZWxlY3RlZFN0YXRlKGl0ZW0uY2hpbGRyZW4sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVDaGlsZHJlbihpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyKGtlZXBEaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGtlZXBEaXNhYmxlZCA/IHRoaXMuX3NlbGVjdGVkLmZpbHRlcih4ID0+IHguZGlzYWJsZWQpIDogW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0Q2hpbGRyZW5TZWxlY3RlZFN0YXRlKGNoaWxkcmVuOiBOZ09wdGlvbltdLCBzZWxlY3RlZDogYm9vbGVhbikge1xuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKHggPT4geC5zZWxlY3RlZCA9IHNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW1vdmVDaGlsZHJlbihwYXJlbnQ6IE5nT3B0aW9uKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQuZmlsdGVyKHggPT4geC5wYXJlbnQgIT09IHBhcmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVtb3ZlUGFyZW50KHBhcmVudDogTmdPcHRpb24pIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZC5maWx0ZXIoeCA9PiB4ICE9PSBwYXJlbnQpXG4gICAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ1NlbGVjdENvbXBvbmVudCwgU0VMRUNUSU9OX01PREVMX0ZBQ1RPUlkgfSBmcm9tICcuL25nLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBOZ0Zvb3RlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIE5nSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTmdMYWJlbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIE5nTG9hZGluZ1RleHRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBOZ011bHRpTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBOZ05vdEZvdW5kVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTmdPcHRncm91cFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIE5nT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTmdUYWdUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBOZ1R5cGVUb1NlYXJjaFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIE5nTG9hZGluZ1NwaW5uZXJUZW1wbGF0ZURpcmVjdGl2ZVxufSBmcm9tICcuL25nLXRlbXBsYXRlcy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmdPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL25nLW9wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdPcHRpb25IaWdobGlnaHREaXJlY3RpdmUgfSBmcm9tICcuL25nLW9wdGlvbi1oaWdobGlnaHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nRHJvcGRvd25QYW5lbENvbXBvbmVudCB9IGZyb20gJy4vbmctZHJvcGRvd24tcGFuZWwuY29tcG9uZW50JztcbmltcG9ydCB7IERlZmF1bHRTZWxlY3Rpb25Nb2RlbEZhY3RvcnkgfSBmcm9tICcuL3NlbGVjdGlvbi1tb2RlbCc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIE5nRHJvcGRvd25QYW5lbENvbXBvbmVudCxcbiAgICAgICAgTmdPcHRpb25Db21wb25lbnQsXG4gICAgICAgIE5nU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBOZ09wdGlvbkhpZ2hsaWdodERpcmVjdGl2ZSxcbiAgICAgICAgTmdPcHRncm91cFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBOZ09wdGlvblRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBOZ0xhYmVsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE5nTXVsdGlMYWJlbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBOZ0hlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBOZ0Zvb3RlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBOZ05vdEZvdW5kVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE5nVHlwZVRvU2VhcmNoVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE5nTG9hZGluZ1RleHRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgTmdUYWdUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgTmdMb2FkaW5nU3Bpbm5lclRlbXBsYXRlRGlyZWN0aXZlXG4gICAgXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZVxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBOZ1NlbGVjdENvbXBvbmVudCxcbiAgICAgICAgTmdPcHRpb25Db21wb25lbnQsXG4gICAgICAgIE5nT3B0aW9uSGlnaGxpZ2h0RGlyZWN0aXZlLFxuICAgICAgICBOZ09wdGdyb3VwVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE5nT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE5nTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgTmdNdWx0aUxhYmVsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE5nSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE5nRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE5nTm90Rm91bmRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgTmdUeXBlVG9TZWFyY2hUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgTmdMb2FkaW5nVGV4dFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBOZ1RhZ1RlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBOZ0xvYWRpbmdTcGlubmVyVGVtcGxhdGVEaXJlY3RpdmVcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IFNFTEVDVElPTl9NT0RFTF9GQUNUT1JZLCB1c2VWYWx1ZTogRGVmYXVsdFNlbGVjdGlvbk1vZGVsRmFjdG9yeSB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ1NlbGVjdE1vZHVsZSB7IH1cbiJdLCJuYW1lcyI6WyJEaXJlY3RpdmUiLCJUZW1wbGF0ZVJlZiIsIkluamVjdGFibGUiLCJzZWFyY2hIZWxwZXIuc3RyaXBTcGVjaWFsQ2hhcnMiLCJ0c2xpYl8xLl9fdmFsdWVzIiwiYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIiLCJhc2FwU2NoZWR1bGVyIiwiRXZlbnRFbWl0dGVyIiwiU3ViamVjdCIsImZyb21FdmVudCIsInRha2VVbnRpbCIsImF1ZGl0VGltZSIsIm1lcmdlIiwiQ29tcG9uZW50IiwiQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kiLCJWaWV3RW5jYXBzdWxhdGlvbiIsIlJlbmRlcmVyMiIsIk5nWm9uZSIsIkVsZW1lbnRSZWYiLCJPcHRpb25hbCIsIkluamVjdCIsIkRPQ1VNRU5UIiwiSW5wdXQiLCJPdXRwdXQiLCJWaWV3Q2hpbGQiLCJIb3N0TGlzdGVuZXIiLCJJbmplY3Rpb25Ub2tlbiIsInN0YXJ0V2l0aCIsInRhcCIsImRlYm91bmNlVGltZSIsImZpbHRlciIsIm1hcCIsIk5HX1ZBTFVFX0FDQ0VTU09SIiwiZm9yd2FyZFJlZiIsIkF0dHJpYnV0ZSIsIkNoYW5nZURldGVjdG9yUmVmIiwiSG9zdEJpbmRpbmciLCJDb250ZW50Q2hpbGQiLCJDb250ZW50Q2hpbGRyZW4iLCJOZ01vZHVsZSIsIkNvbW1vbk1vZHVsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0lBQUE7Ozs7Ozs7Ozs7Ozs7O0FBY0Esc0JBNEZ5QixDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE9BQU87WUFDSCxJQUFJLEVBQUU7Z0JBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO29CQUFFLENBQUMsR0FBRyxLQUFLLENB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RSxJQUFJO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7UUFDYixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsUUFBUTtLQUNyQixDQUFDOzs7OztBQUVGLCtCQUFrQyxJQUFZOztRQUMxQyxJQUFNLEtBQUssR0FBRyxVQUFDLENBQVM7WUFDcEIsT0FB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
|