@colijnit/configurator 12.0.16 → 255.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/builder.d.ts +8 -8
- package/app/services/configurator.service.d.ts +5 -5
- package/bundles/colijnit-configurator.umd.js +212 -154
- package/bundles/colijnit-configurator.umd.js.map +1 -1
- package/esm2015/app/builder.js +45 -44
- package/esm2015/app/services/configurator.service.js +1 -1
- package/esm2015/app/services/image-cache.service.js +1 -1
- package/esm2015/helper/variation-helper.js +56 -37
- package/esm2015/model/material.js +3 -3
- package/esm2015/model/variation-settings.js +4 -2
- package/esm2015/utils/asset.utils.js +19 -14
- package/esm2015/utils/variation-utils.js +25 -15
- package/fesm2015/colijnit-configurator.js +127 -89
- package/fesm2015/colijnit-configurator.js.map +1 -1
- package/helper/variation-helper.d.ts +3 -3
- package/model/material.d.ts +20 -17
- package/model/variation-settings.d.ts +12 -2
- package/package.json +6 -3
- package/utils/asset.utils.d.ts +1 -0
- package/utils/variation-utils.d.ts +1 -1
- package/app/services/locator.service.d.ts +0 -4
- package/esm2015/app/services/locator.service.js +0 -8
|
@@ -3,9 +3,9 @@ import { DecoNodeType } from "@colijnit/configuratorapi/build/enum/deco-node-typ
|
|
|
3
3
|
import { VariationSettings } from "../model/variation-settings";
|
|
4
4
|
import { AssetUtils } from "../utils/asset.utils";
|
|
5
5
|
import { Variation } from "../model/variation";
|
|
6
|
-
import * as THREE from "three";
|
|
7
6
|
import { VariationUtils } from "../utils/variation-utils";
|
|
8
7
|
import { ImageUtils } from '../utils/image.utils';
|
|
8
|
+
import { EquirectangularReflectionMapping, Material, Mesh, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, NearestFilter } from 'three';
|
|
9
9
|
export class VariationHelper {
|
|
10
10
|
constructor() {
|
|
11
11
|
this._variations = [];
|
|
@@ -181,7 +181,7 @@ export class VariationHelper {
|
|
|
181
181
|
const child = children[i];
|
|
182
182
|
if (child !== null && child !== undefined) {
|
|
183
183
|
child.traverse((mesh) => {
|
|
184
|
-
if (mesh instanceof
|
|
184
|
+
if (mesh instanceof Mesh && partMaterial) {
|
|
185
185
|
if (Array.isArray(mesh.material)) { // multimaterial support
|
|
186
186
|
for (let j = 0, jlen = mesh.material.length; j < jlen; j++) {
|
|
187
187
|
if (mesh.material[j].name.toLowerCase().indexOf('fixed_frame') !== -1) {
|
|
@@ -206,7 +206,7 @@ export class VariationHelper {
|
|
|
206
206
|
const child = children[i];
|
|
207
207
|
if (child !== null && child !== undefined) {
|
|
208
208
|
child.traverse((mesh) => {
|
|
209
|
-
if (mesh instanceof
|
|
209
|
+
if (mesh instanceof Mesh && part.variations && part.variations.length > 0 && mesh.name.toLowerCase().indexOf('c_')) {
|
|
210
210
|
for (let j = 0; j < part.variations.length; j++) {
|
|
211
211
|
const variation = part.variations[j];
|
|
212
212
|
if (variation.material) {
|
|
@@ -214,22 +214,34 @@ export class VariationHelper {
|
|
|
214
214
|
if (Array.isArray(mesh.material)) { // multimaterial support
|
|
215
215
|
for (let m = 0, mlen = mesh.material.length; m < mlen; m++) {
|
|
216
216
|
if (mesh.material[m].name.toLowerCase().indexOf(materialToSearch) !== -1) {
|
|
217
|
-
if (variation.material instanceof
|
|
217
|
+
if (variation.material instanceof Material) {
|
|
218
218
|
mesh.material[m] = variation.material;
|
|
219
|
+
if (mesh.material[m].name && (mesh.material[m].name === 'Fixed_Glass' || mesh.material[m].name === 'Default_Glass')) {
|
|
220
|
+
mesh.castShadow = false;
|
|
221
|
+
}
|
|
219
222
|
}
|
|
220
223
|
else {
|
|
221
224
|
mesh.material[m] = this._setMeshMaterialFromVariation(mesh.material[m].name, variation, usePbr);
|
|
225
|
+
if (mesh.material[m].name && (mesh.material[m].name === 'Fixed_Glass' || mesh.material[m].name === 'Default_Glass')) {
|
|
226
|
+
mesh.castShadow = false;
|
|
227
|
+
}
|
|
222
228
|
}
|
|
223
229
|
}
|
|
224
230
|
}
|
|
225
231
|
}
|
|
226
232
|
else {
|
|
227
233
|
if (mesh.material.name.toLowerCase().indexOf(materialToSearch) !== -1) {
|
|
228
|
-
if (variation.material instanceof
|
|
234
|
+
if (variation.material instanceof Material) {
|
|
229
235
|
mesh.material = variation.material;
|
|
236
|
+
if (mesh.material.name && (mesh.material.name === 'Fixed_Glass' || mesh.material.name === 'Default_Glass')) {
|
|
237
|
+
mesh.castShadow = false;
|
|
238
|
+
}
|
|
230
239
|
}
|
|
231
240
|
else {
|
|
232
241
|
mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, variation, usePbr);
|
|
242
|
+
if (mesh.material.name && (mesh.material.name === 'Fixed_Glass' || mesh.material.name === 'Default_Glass')) {
|
|
243
|
+
mesh.castShadow = false;
|
|
244
|
+
}
|
|
233
245
|
}
|
|
234
246
|
}
|
|
235
247
|
}
|
|
@@ -244,26 +256,25 @@ export class VariationHelper {
|
|
|
244
256
|
const material = variation.material;
|
|
245
257
|
if (material.texture) {
|
|
246
258
|
material.texture.needsUpdate = true;
|
|
247
|
-
material.texture.mapping =
|
|
259
|
+
material.texture.mapping = EquirectangularReflectionMapping;
|
|
248
260
|
}
|
|
249
261
|
if (!usePbr) {
|
|
250
|
-
const newMaterial = new
|
|
251
|
-
name: name,
|
|
262
|
+
const newMaterial = new MeshPhongMaterial({
|
|
252
263
|
shininess: material.shininess,
|
|
253
264
|
specular: material.specular,
|
|
254
265
|
map: material.texture,
|
|
255
266
|
normalMap: material.normal
|
|
256
267
|
});
|
|
268
|
+
newMaterial.name = name;
|
|
257
269
|
newMaterial.color.setRGB(0.8, 0.8, 0.8);
|
|
258
270
|
newMaterial.needsUpdate = true;
|
|
259
271
|
return newMaterial;
|
|
260
272
|
}
|
|
261
|
-
if (material.sheen || material.sheenColor || material.reflectivity) { // TODO: Proper check for all unique physical material properties
|
|
273
|
+
if (material.sheen || material.sheenColor || material.reflectivity || material.transmission) { // TODO: Proper check for all unique physical material properties
|
|
262
274
|
const params = {
|
|
263
275
|
// side: material.side ? material.side : FrontSide,
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
metalness: material.metalnessValue ? material.metalnessValue : 0,
|
|
276
|
+
roughness: material.roughnessValue !== undefined && material.roughnessValue !== null ? material.roughnessValue : 1,
|
|
277
|
+
metalness: material.metalnessValue !== undefined && material.metalnessValue !== null ? material.metalnessValue : 0,
|
|
267
278
|
envMapIntensity: material.envMapIntensity ? material.envMapIntensity : 0.01,
|
|
268
279
|
clearcoatMap: material.clearcoatMap ? material.clearcoatMap : null,
|
|
269
280
|
clearcoatRoughnessMap: material.clearcoatRoughnessMap ? material.clearcoatRoughnessMap : null,
|
|
@@ -277,12 +288,6 @@ export class VariationHelper {
|
|
|
277
288
|
if (material.opacity) {
|
|
278
289
|
params.opacity = material.opacity;
|
|
279
290
|
}
|
|
280
|
-
if (material.transparency) {
|
|
281
|
-
params.transmission = material.transparency;
|
|
282
|
-
}
|
|
283
|
-
if (material.transmission) {
|
|
284
|
-
params.transmission = material.transmission;
|
|
285
|
-
}
|
|
286
291
|
if (material.transparent) {
|
|
287
292
|
params.transparent = material.transparent;
|
|
288
293
|
}
|
|
@@ -325,18 +330,19 @@ export class VariationHelper {
|
|
|
325
330
|
if (material.envMapIntensity != null || 0) {
|
|
326
331
|
params.envMap = material.envMap;
|
|
327
332
|
params.envMap.needsUpdate = true;
|
|
328
|
-
material.envMap.mapping =
|
|
329
|
-
material.envMap.minFilter =
|
|
330
|
-
material.envMap.magFilter =
|
|
333
|
+
material.envMap.mapping = EquirectangularReflectionMapping;
|
|
334
|
+
material.envMap.minFilter = NearestFilter;
|
|
335
|
+
material.envMap.magFilter = NearestFilter;
|
|
331
336
|
}
|
|
332
337
|
}
|
|
333
|
-
if (material.reflectivity) {
|
|
338
|
+
if (material.reflectivity !== undefined && material.reflectivity !== null) {
|
|
334
339
|
params.reflectivity = material.reflectivity;
|
|
335
340
|
}
|
|
336
341
|
if (material.side) {
|
|
337
342
|
params.side = material.side;
|
|
338
343
|
}
|
|
339
|
-
const newMaterial = new
|
|
344
|
+
const newMaterial = new MeshPhysicalMaterial(params);
|
|
345
|
+
newMaterial.name = name;
|
|
340
346
|
newMaterial.color.setRGB(1, 1, 1);
|
|
341
347
|
if (material.sheen) {
|
|
342
348
|
newMaterial.sheen = material.sheen;
|
|
@@ -358,15 +364,30 @@ export class VariationHelper {
|
|
|
358
364
|
if (material.transmission) {
|
|
359
365
|
newMaterial.transmission = material.transmission;
|
|
360
366
|
}
|
|
367
|
+
if (material.ior !== undefined && material.ior !== null) {
|
|
368
|
+
newMaterial.ior = material.ior;
|
|
369
|
+
}
|
|
370
|
+
if (material.thickness !== undefined && material.thickness !== null) {
|
|
371
|
+
newMaterial.thickness = material.thickness;
|
|
372
|
+
}
|
|
373
|
+
if (material.specularIntensity !== undefined && material.specularIntensity !== null) {
|
|
374
|
+
newMaterial.specularIntensity = material.specularIntensity;
|
|
375
|
+
}
|
|
376
|
+
if (material.transmissionMap) {
|
|
377
|
+
newMaterial.transmissionMap = material.transmissionMap;
|
|
378
|
+
newMaterial.transmissionMap.needsUpdate = true;
|
|
379
|
+
}
|
|
380
|
+
if (newMaterial.name && (newMaterial.name === 'Fixed_Glass' || newMaterial.name === 'Default_Glass')) {
|
|
381
|
+
// newMaterial.format = RGBAFormat;
|
|
382
|
+
}
|
|
361
383
|
newMaterial.needsUpdate = true;
|
|
362
384
|
return newMaterial;
|
|
363
385
|
}
|
|
364
386
|
else {
|
|
365
387
|
const params = {
|
|
366
388
|
// side: material.side ? material.side : FrontSide,
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
metalness: material.metalnessValue ? material.metalnessValue : 0,
|
|
389
|
+
roughness: material.roughnessValue !== undefined && material.roughnessValue !== null ? material.roughnessValue : 1,
|
|
390
|
+
metalness: material.metalnessValue !== undefined && material.metalnessValue !== null ? material.metalnessValue : 0,
|
|
370
391
|
envMapIntensity: material.envMapIntensity ? material.envMapIntensity : 0.01
|
|
371
392
|
// wireframe: true,
|
|
372
393
|
// opacity: 0.3,
|
|
@@ -378,12 +399,6 @@ export class VariationHelper {
|
|
|
378
399
|
if (material.opacity) {
|
|
379
400
|
params.opacity = material.opacity;
|
|
380
401
|
}
|
|
381
|
-
if (material.transparency) {
|
|
382
|
-
params.opacity = material.transparency;
|
|
383
|
-
}
|
|
384
|
-
if (material.transmission) {
|
|
385
|
-
params.opacity = material.transmission;
|
|
386
|
-
}
|
|
387
402
|
if (material.transparent) {
|
|
388
403
|
params.transparent = material.transparent;
|
|
389
404
|
}
|
|
@@ -426,16 +441,20 @@ export class VariationHelper {
|
|
|
426
441
|
if (material.envMapIntensity != null || 0) {
|
|
427
442
|
params.envMap = material.envMap;
|
|
428
443
|
params.envMap.needsUpdate = true;
|
|
429
|
-
material.envMap.mapping =
|
|
430
|
-
material.envMap.minFilter =
|
|
431
|
-
material.envMap.magFilter =
|
|
444
|
+
material.envMap.mapping = EquirectangularReflectionMapping;
|
|
445
|
+
material.envMap.minFilter = NearestFilter;
|
|
446
|
+
material.envMap.magFilter = NearestFilter;
|
|
432
447
|
}
|
|
433
448
|
}
|
|
434
449
|
if (material.side) {
|
|
435
450
|
params.side = material.side;
|
|
436
451
|
}
|
|
437
|
-
const newMaterial = new
|
|
452
|
+
const newMaterial = new MeshStandardMaterial(params);
|
|
453
|
+
newMaterial.name = name;
|
|
438
454
|
newMaterial.color.setRGB(1, 1, 1);
|
|
455
|
+
if (newMaterial.name && (newMaterial.name === 'Fixed_Glass' || newMaterial.name === 'Default_Glass')) {
|
|
456
|
+
// newMaterial.format = RGBAFormat;
|
|
457
|
+
}
|
|
439
458
|
newMaterial.needsUpdate = true;
|
|
440
459
|
return newMaterial;
|
|
441
460
|
}
|
|
@@ -450,4 +469,4 @@ export class VariationHelper {
|
|
|
450
469
|
return null;
|
|
451
470
|
}
|
|
452
471
|
}
|
|
453
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oZWxwZXIvdmFyaWF0aW9uLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQ3RGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxNQUFNLE9BQU8sZUFBZTtJQUE1QjtRQUdZLGdCQUFXLEdBQXdCLEVBQUUsQ0FBQztRQUV0Qyx5QkFBb0IsR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQThidkUsQ0FBQztJQTViVSxVQUFVO1FBQ2IsTUFBTSxZQUFZLEdBQWtCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbkYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2hDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDN0IsSUFBSTtvQkFDQSxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7d0JBQ3BCLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7NEJBQzVCLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO3lCQUN4Qzt3QkFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFB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RyxJQUFJLENBQUM7WUFFL0IsT0FBTyxXQUFXLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsRUFBVSxFQUFFLFNBQXNCO1FBQzlELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxFQUFVO1FBQ3RDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RlY29Ob2RlVHlwZX0gZnJvbSBcIkBjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUtdHlwZS5lbnVtXCI7XHJcbmltcG9ydCB7VmFyaWF0aW9uU2V0dGluZ3N9IGZyb20gXCIuLi9tb2RlbC92YXJpYXRpb24tc2V0dGluZ3NcIjtcclxuaW1wb3J0IHtBc3NldFV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvYXNzZXQudXRpbHNcIjtcclxuaW1wb3J0IHtEZWNvTm9kZX0gZnJvbSBcIkBjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZGVjby1ub2RlXCI7XHJcbmltcG9ydCB7VmFyaWF0aW9ufSBmcm9tIFwiLi4vbW9kZWwvdmFyaWF0aW9uXCI7XHJcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gXCJ0aHJlZVwiO1xyXG5pbXBvcnQge1ZhcmlhdGlvblV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvdmFyaWF0aW9uLXV0aWxzXCI7XHJcbmltcG9ydCB7SW1hZ2VVdGlsc30gZnJvbSAnLi4vdXRpbHMvaW1hZ2UudXRpbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFZhcmlhdGlvbkhlbHBlciB7XHJcblxyXG4gICAgcHVibGljIGFzc2V0UGF0aDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfdmFyaWF0aW9uczogVmFyaWF0aW9uU2V0dGluZ3NbXSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgX2xhc3RLbm93blZhcmlhdGlvbnM6IE1hcDxzdHJpbmcsIFZhcmlhdGlvbltdPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBwdWJsaWMgY2xlYXJDYWNoZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YXJpYXRpb25NYXA6IFZhcmlhdGlvbltdW10gPSBBcnJheS5mcm9tKHRoaXMuX2xhc3RLbm93blZhcmlhdGlvbnMudmFsdWVzKCkpO1xyXG4gICAgICAgIHZhcmlhdGlvbk1hcC5mb3JFYWNoKCh2YXJpYXRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvbnMuZm9yRWFjaCgodmFyaWF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC50ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWwuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwubWV0YWxuZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwubWV0YWxuZXNzLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzcy5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5hbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLmFvLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgVmFyaWF0aW9uVXRpbHMuQ2xlYXJDYWNoZSgpO1xyXG4gICAgICAgIEltYWdlVXRpbHMuQ2xlYXJDYWNoZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBsb2FkUGFydChvYmo6IFRIUkVFLk9iamVjdDNELCBwYXJ0czogYW55W10sIHVzZVBicjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBwYXJ0cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJ0c1tpXS5kZWNvTm9kZSAmJiBwYXJ0c1tpXS5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSAmJiBwYXJ0c1tpXS5kZWNvTm9kZS50eXBlID09PSBEZWNvTm9kZVR5cGUuUGFydCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRTZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBWYXJpYXRpb25VdGlscy5Mb2FkVmFyaWF0aW9uKHRoaXMuYXNzZXRQYXRoLCBwYXJ0c1tpXS5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSB8fCBwYXJ0c1tpXS5kZWNvSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0U2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydFZhcmlhdGlvbjogVmFyaWF0aW9uID0gbmV3IFZhcmlhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0VmFyaWF0aW9uLmRlY29JZCA9IHBhcnNlRmxvYXQocGFydHNbaV0uZGVjb05vZGUuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0VmFyaWF0aW9uLmJyYW5kSWQgPSBwYXJ0c1tpXS5kZWNvTm9kZS5icmFuZElkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0VmFyaWF0aW9uLmdhbWVPYmplY3ROYW1lID0gcGFydHNbaV0uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRWYXJpYXRpb24ubWF0ZXJpYWwgPSBhd2FpdCBBc3NldFV0aWxzLkNyZWF0ZU1hdGVyaWFsRnJvbUFzc2V0KHBhcnRTZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcnRzW2ldLnZhcmlhdGlvbiA9IHBhcnRWYXJpYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5TWF0ZXJpYWxQYXJ0KG9iaiwgcGFydFZhcmlhdGlvbiwgcGFydHNbaV0ubm9kZSwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBsb2FkVmFyaWF0aW9uKG9iajogVEhSRUUuT2JqZWN0M0QsIHBhcnRzOiBhbnlbXSwgdXNlUGJyOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHBhcnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uczogRGVjb05vZGVbXSA9IHBhcnRzW2ldLnZhcmlhdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXZhcmlhdGlvbnMgfHwgdmFyaWF0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZ2V0TGFzdEtub3duVmFyaWF0aW9ucyhwYXJ0c1tpXS5ub2RlSWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzW2ldLnZhcmlhdGlvbnMgPSB0aGlzLl9nZXRMYXN0S25vd25WYXJpYXRpb25zKHBhcnRzW2ldLm5vZGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5VmFyaWF0aW9ucyhvYmosIHBhcnRzW2ldLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0S25vd25WYXJpYXRpb25zOiBWYXJpYXRpb25bXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uUHJvbWlzZTogUHJvbWlzZTxhbnk+W10gPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFyaWF0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvblByb21pc2UucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVGhlVmFyaWF0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uc1tqXS5nYW1lT2JqZWN0TmFtZSB8fCBwYXJ0c1tpXS5kZWNvSWQpLnRoZW4oYXN5bmMgKHZhcmlhdGlvblNldHRpbmdzOiBWYXJpYXRpb25TZXR0aW5ncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFyaWF0aW9uOiBWYXJpYXRpb24gPSBuZXcgVmFyaWF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYXJpYXRpb24uZGVjb0lkID0gcGFyc2VGbG9hdCh2YXJpYXRpb25zW2pdLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5icmFuZElkID0gdmFyaWF0aW9uc1tqXS5icmFuZElkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLm9wdGlvblRleHQgPSAodmFyaWF0aW9uc1tqXSBhcyBhbnkpLm9wdGlvblRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYXJpYXRpb24uZ2FtZU9iamVjdE5hbWUgPSB2YXJpYXRpb25zW2pdLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLnN1cHBsaWVyQXJ0aWNsZU5yID0gKHZhcmlhdGlvbnNbal0gYXMgYW55KS5zdXBwbGllckFydGljbGVOcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5tYXRlcmlhbElkID0gKHZhcmlhdGlvbnNbal0gYXMgYW55KS5tYXRlcmlhbElkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLm1hdGVyaWFsID0gdmFyaWF0aW9uU2V0dGluZ3MubWF0ZXJpYWwgPyB2YXJpYXRpb25TZXR0aW5ncy5tYXRlcmlhbCA6IGF3YWl0IEFzc2V0VXRpbHMuQ3JlYXRlTWF0ZXJpYWxGcm9tQXNzZXQodmFyaWF0aW9uU2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEtub3duVmFyaWF0aW9ucy5wdXNoKG5ld1ZhcmlhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHZhcmlhdGlvblByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0TGFzdEtub3duVmFyaWF0aW9ucyhgJHtwYXJ0c1tpXS5ub2RlSWR9XyR7cGFydHNbaV0ubm9kZX1gLCBsYXN0S25vd25WYXJpYXRpb25zKTtcclxuICAgICAgICAgICAgICAgIHBhcnRzW2ldLnZhcmlhdGlvbnMgPSBsYXN0S25vd25WYXJpYXRpb25zO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlWYXJpYXRpb25zKG9iaiwgcGFydHNbaV0sIHVzZVBicik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQoaWQ6IHN0cmluZyk6IFZhcmlhdGlvblNldHRpbmdzIHtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuX3ZhcmlhdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhcmlhdGlvbnNbaV0uaWQgJiYgdGhpcy5fdmFyaWF0aW9uc1tpXS5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YXJpYXRpb25zW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQodmFyaWF0aW9uczogVmFyaWF0aW9uU2V0dGluZ3MpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpZHg6IG51bWJlciA9IHRoaXMuX3ZhcmlhdGlvbnMuZmluZEluZGV4KHYgPT4gdi5pZCA9PT0gdmFyaWF0aW9ucy5pZCk7XHJcbiAgICAgICAgaWYgKGlkeCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbnNbaWR4XSA9IHZhcmlhdGlvbnM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9ucy5wdXNoKHZhcmlhdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJlbG9hZFZhcmlhdGlvbnMoZmlsZU5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgICAgIGZpbGVOYW1lcy5mb3JFYWNoKChmaWxlTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZSAmJiAhdGhpcy5nZXQoZmlsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IG5ldyBWYXJpYXRpb25TZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuaWQgPSBmaWxlTmFtZTtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9ucy5wdXNoKHNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgIGxldCBhc3NldFBhdGg6IHN0cmluZyA9IHRoaXMuYXNzZXRQYXRoO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhc3NldFBhdGguZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFzc2V0UGF0aCArPSAnLyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBWYXJpYXRpb25VdGlscy5Mb2FkVmFyaWF0aW9uKGFzc2V0UGF0aCwgZmlsZU5hbWUpLnRoZW4oKHZhcmlhdGlvblNldHRpbmdzOiBWYXJpYXRpb25TZXR0aW5ncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5sb2FkZWQubmV4dCh2YXJpYXRpb25TZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvblNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHZhcmlhdGlvblNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBsb2FkVGhlVmFyaWF0aW9uKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFZhcmlhdGlvblNldHRpbmdzPiB7XHJcbiAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGZpbGVOYW1lKSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0KGZpbGVOYW1lKTtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmxvYWRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVmFyaWF0aW9uVG9Mb2FkKHNldHRpbmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3dhaXRGb3JWYXJpYXRpb25Ub0xvYWQoc2V0dGluZ3M6IFZhcmlhdGlvblNldHRpbmdzKTogUHJvbWlzZTxWYXJpYXRpb25TZXR0aW5ncz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgc2V0dGluZ3MubG9hZGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRDaGlsZHJlbkZpbHRlckJ5UHJvcChvYmo6IFRIUkVFLk9iamVjdDNELCB1c2VyRGF0YU9iamVjdFByb3A6IHN0cmluZywgcHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KTogVEhSRUUuT2JqZWN0M0RbXSB7XHJcbiAgICAgICAgcmV0dXJuIG9iai5jaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZC51c2VyRGF0YSAmJlxyXG4gICAgICAgICAgICAgICAgY2hpbGQudXNlckRhdGEuaGFzT3duUHJvcGVydHkodXNlckRhdGFPYmplY3RQcm9wKSAmJlxyXG4gICAgICAgICAgICAgICAgY2hpbGQudXNlckRhdGFbdXNlckRhdGFPYmplY3RQcm9wXS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJlxyXG4gICAgICAgICAgICAgICAgY2hpbGQudXNlckRhdGFbdXNlckRhdGFPYmplY3RQcm9wXVtwcm9wXSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfYXBwbHlNYXRlcmlhbFBhcnQob2JqOiBUSFJFRS5PYmplY3QzRCwgcGFydE1hdGVyaWFsOiBhbnksIG5vZGVJZDogYW55LCB1c2VQYnI6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5fZ2V0Q2hpbGRyZW5GaWx0ZXJCeVByb3Aob2JqLCAnc2VsZWN0aW9uJywgJ25vZGUnLCBub2RlSWQpO1xyXG4gICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgY2hpbGQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGQudHJhdmVyc2UoKG1lc2gpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWVzaCBpbnN0YW5jZW9mIFRIUkVFLk1lc2ggJiYgcGFydE1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lc2gubWF0ZXJpYWwpKSB7IC8vIG11bHRpbWF0ZXJpYWwgc3VwcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDAsIGpsZW46IG51bWJlciA9IG1lc2gubWF0ZXJpYWwubGVuZ3RoOyBqIDwgamxlbjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWxbal0ubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpeGVkX2ZyYW1lJykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWxbal0gPSB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKG1lc2gubWF0ZXJpYWxbal0ubmFtZSwgcGFydE1hdGVyaWFsLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFsLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXhlZF9mcmFtZScpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwgPSB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKG1lc2gubWF0ZXJpYWwubmFtZSwgcGFydE1hdGVyaWFsLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfYXBwbHlWYXJpYXRpb25zKG9iajogVEhSRUUuT2JqZWN0M0QsIHBhcnQ6IGFueSwgdXNlUGJyOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldENoaWxkcmVuRmlsdGVyQnlQcm9wKG9iaiwgJ3NlbGVjdGlvbicsICdub2RlJywgcGFydC5ub2RlKTtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsICYmIGNoaWxkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnRyYXZlcnNlKChtZXNoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2ggaW5zdGFuY2VvZiBUSFJFRS5NZXNoICYmIHBhcnQudmFyaWF0aW9ucyAmJiBwYXJ0LnZhcmlhdGlvbnMubGVuZ3RoID4gMCAmJiBtZXNoLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjXycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFydC52YXJpYXRpb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYXRpb246IFZhcmlhdGlvbiA9IHBhcnQudmFyaWF0aW9uc1tqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRlcmlhbFRvU2VhcmNoOiBzdHJpbmcgPSAhIXZhcmlhdGlvbi5tYXRlcmlhbElkID8gdmFyaWF0aW9uLm1hdGVyaWFsSWQudG9Mb3dlckNhc2UoKSA6ICdkZWZhdWx0JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtZXNoLm1hdGVyaWFsKSkgeyAvLyBtdWx0aW1hdGVyaWFsIHN1cHBvcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IDAsIG1sZW46IG51bWJlciA9IG1lc2gubWF0ZXJpYWwubGVuZ3RoOyBtIDwgbWxlbjsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbFttXS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihtYXRlcmlhbFRvU2VhcmNoKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsIGluc3RhbmNlb2YgVEhSRUUuTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbFttXSA9IHZhcmlhdGlvbi5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsW21dID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsW21dLm5hbWUsIHZhcmlhdGlvbiwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihtYXRlcmlhbFRvU2VhcmNoKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwgaW5zdGFuY2VvZiBUSFJFRS5NYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwgPSB2YXJpYXRpb24ubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwgPSB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKG1lc2gubWF0ZXJpYWwubmFtZSwgdmFyaWF0aW9uLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihuYW1lOiBzdHJpbmcsIHZhcmlhdGlvbjogVmFyaWF0aW9uLCB1c2VQYnI6IGJvb2xlYW4gPSBmYWxzZSk6IFRIUkVFLk1hdGVyaWFsIHtcclxuICAgICAgICBjb25zdCBtYXRlcmlhbCA9IHZhcmlhdGlvbi5tYXRlcmlhbDtcclxuICAgICAgICBpZiAobWF0ZXJpYWwudGV4dHVyZSkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC50ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudGV4dHVyZS5tYXBwaW5nID0gVEhSRUUuRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdXNlUGJyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld01hdGVyaWFsOiBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgc2hpbmluZXNzOiBtYXRlcmlhbC5zaGluaW5lc3MsXHJcbiAgICAgICAgICAgICAgICBzcGVjdWxhcjogbWF0ZXJpYWwuc3BlY3VsYXIsXHJcbiAgICAgICAgICAgICAgICBtYXA6IG1hdGVyaWFsLnRleHR1cmUsXHJcbiAgICAgICAgICAgICAgICBub3JtYWxNYXA6IG1hdGVyaWFsLm5vcm1hbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3TWF0ZXJpYWwuY29sb3Iuc2V0UkdCKDAuOCwgMC44LCAwLjgpO1xyXG4gICAgICAgICAgICBuZXdNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdNYXRlcmlhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsLnNoZWVuIHx8IG1hdGVyaWFsLnNoZWVuQ29sb3IgfHwgbWF0ZXJpYWwucmVmbGVjdGl2aXR5KSB7IC8vIFRPRE86IFByb3BlciBjaGVjayBmb3IgYWxsIHVuaXF1ZSBwaHlzaWNhbCBtYXRlcmlhbCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWxQYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgLy8gc2lkZTogbWF0ZXJpYWwuc2lkZSA/IG1hdGVyaWFsLnNpZGUgOiBGcm9udFNpZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgcm91Z2huZXNzOiBtYXRlcmlhbC5yb3VnaG5lc3NWYWx1ZSA/IG1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlIDogMSxcclxuICAgICAgICAgICAgICAgIG1ldGFsbmVzczogbWF0ZXJpYWwubWV0YWxuZXNzVmFsdWUgPyBtYXRlcmlhbC5tZXRhbG5lc3NWYWx1ZSA6IDAsXHJcbiAgICAgICAgICAgICAgICBlbnZNYXBJbnRlbnNpdHk6IG1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA/IG1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA6IDAuMDEsXHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXRNYXA6IG1hdGVyaWFsLmNsZWFyY29hdE1hcCA/IG1hdGVyaWFsLmNsZWFyY29hdE1hcCA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXRSb3VnaG5lc3NNYXA6IG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCA/IG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAvLyB3aXJlZnJhbWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAvLyBvcGFjaXR5OiAwLjMsXHJcbiAgICAgICAgICAgICAgICAvLyB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRpc3BsYWNlbWVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZGlzcGxhY2VtZW50U2NhbGUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwub3BhY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wYWNpdHkgPSBtYXRlcmlhbC5vcGFjaXR5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc3BhcmVuY3kpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy50cmFuc21pc3Npb24gPSBtYXRlcmlhbC50cmFuc3BhcmVuY3k7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnRyYW5zbWlzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnRyYW5zbWlzc2lvbiA9IG1hdGVyaWFsLnRyYW5zbWlzc2lvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwudHJhbnNwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy50cmFuc3BhcmVudCA9IG1hdGVyaWFsLnRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmUgPSBtYXRlcmlhbC5lbWlzc2l2ZVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVJbnRlbnNpdHkgPSBtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC50ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWFwID0gbWF0ZXJpYWwudGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5hbykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwID0gbWF0ZXJpYWwuYW87XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuYW9NYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5yb3VnaG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yb3VnaG5lc3NNYXAgPSBtYXRlcmlhbC5yb3VnaG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucm91Z2huZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIG1hdGVyaWFsLnJvdWdobmVzcy5tYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5tZXRhbG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tZXRhbG5lc3NNYXAgPSBtYXRlcmlhbC5tZXRhbG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWV0YWxuZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwubm9ybWFsKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubm9ybWFsTWFwID0gbWF0ZXJpYWwubm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm5vcm1hbE1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRpc3BsYWNlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudE1hcCA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudDtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlTWFwID0gbWF0ZXJpYWwuZW1pc3NpdmU7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbnZNYXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgIT0gbnVsbCB8fCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVudk1hcCA9IG1hdGVyaWFsLmVudk1hcDtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW52TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5lbnZNYXAubWFwcGluZyA9IFRIUkVFLkVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmVudk1hcC5taW5GaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmVudk1hcC5tYWdGaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5yZWZsZWN0aXZpdHkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yZWZsZWN0aXZpdHkgPSBtYXRlcmlhbC5yZWZsZWN0aXZpdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnNpZGUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5zaWRlID0gbWF0ZXJpYWwuc2lkZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbmV3TWF0ZXJpYWw6IFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLmNvbG9yLnNldFJHQigxLCAxLCAxKTtcclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnNoZWVuKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNYXRlcmlhbC5zaGVlbiA9IG1hdGVyaWFsLnNoZWVuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5zaGVlbkNvbG9yKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNYXRlcmlhbC5zaGVlbkNvbG9yID0gbWF0ZXJpYWwuc2hlZW5Db2xvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIG5ld01hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnNoZWVuQ29sb3JNYXApIHtcclxuICAgICAgICAgICAgICAgIG5ld01hdGVyaWFsLnNoZWVuQ29sb3JNYXAgPSBtYXRlcmlhbC5zaGVlbkNvbG9yTWFwO1xyXG4gICAgICAgICAgICAgICAgbmV3TWF0ZXJpYWwuc2hlZW5Db2xvck1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcCA9IG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwO1xyXG4gICAgICAgICAgICAgICAgbmV3TWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc21pc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIG5ld01hdGVyaWFsLnRyYW5zbWlzc2lvbiA9IG1hdGVyaWFsLnRyYW5zbWlzc2lvbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbmV3TWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3TWF0ZXJpYWw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbFBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzaWRlOiBtYXRlcmlhbC5zaWRlID8gbWF0ZXJpYWwuc2lkZSA6IEZyb250U2lkZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgICAgICByb3VnaG5lc3M6IG1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlID8gbWF0ZXJpYWwucm91Z2huZXNzVmFsdWUgOiAxLFxyXG4gICAgICAgICAgICAgICAgbWV0YWxuZXNzOiBtYXRlcmlhbC5tZXRhbG5lc3NWYWx1ZSA/IG1hdGVyaWFsLm1ldGFsbmVzc1ZhbHVlIDogMCxcclxuICAgICAgICAgICAgICAgIGVudk1hcEludGVuc2l0eTogbWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5ID8gbWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5IDogMC4wMVxyXG4gICAgICAgICAgICAgICAgLy8gd2lyZWZyYW1lOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgLy8gb3BhY2l0eTogMC4zLFxyXG4gICAgICAgICAgICAgICAgLy8gdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5kaXNwbGFjZW1lbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudFNjYWxlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLm9wYWNpdHkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGFjaXR5ID0gbWF0ZXJpYWwub3BhY2l0eTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwudHJhbnNwYXJlbmN5KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BhY2l0eSA9IG1hdGVyaWFsLnRyYW5zcGFyZW5jeTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwudHJhbnNtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BhY2l0eSA9IG1hdGVyaWFsLnRyYW5zbWlzc2lvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwudHJhbnNwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy50cmFuc3BhcmVudCA9IG1hdGVyaWFsLnRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmUgPSBtYXRlcmlhbC5lbWlzc2l2ZVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVJbnRlbnNpdHkgPSBtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC50ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWFwID0gbWF0ZXJpYWwudGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5hbykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwID0gbWF0ZXJpYWwuYW87XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuYW9NYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5yb3VnaG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yb3VnaG5lc3NNYXAgPSBtYXRlcmlhbC5yb3VnaG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucm91Z2huZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIG1hdGVyaWFsLnJvdWdobmVzcy5tYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5tZXRhbG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tZXRhbG5lc3NNYXAgPSBtYXRlcmlhbC5tZXRhbG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWV0YWxuZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwubm9ybWFsKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubm9ybWFsTWFwID0gbWF0ZXJpYWwubm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm5vcm1hbE1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRpc3BsYWNlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudE1hcCA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudDtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlTWFwID0gbWF0ZXJpYWwuZW1pc3NpdmU7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbnZNYXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgIT0gbnVsbCB8fCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVudk1hcCA9IG1hdGVyaWFsLmVudk1hcDtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW52TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5lbnZNYXAubWFwcGluZyA9IFRIUkVFLkVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmVudk1hcC5taW5GaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmVudk1hcC5tYWdGaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5zaWRlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuc2lkZSA9IG1hdGVyaWFsLnNpZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5ld01hdGVyaWFsOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbChwYXJhbXMpO1xyXG4gICAgICAgICAgICBuZXdNYXRlcmlhbC5jb2xvci5zZXRSR0IoMSwgMSwgMSk7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBuZXdNYXRlcmlhbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0TGFzdEtub3duVmFyaWF0aW9ucyhpZDogc3RyaW5nLCB2YXJpYXRpb246IFZhcmlhdGlvbltdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbGFzdEtub3duVmFyaWF0aW9ucy5zZXQoaWQsIHZhcmlhdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0TGFzdEtub3duVmFyaWF0aW9ucyhpZDogc3RyaW5nKTogVmFyaWF0aW9uW10ge1xyXG4gICAgICAgIGlmICh0aGlzLl9sYXN0S25vd25WYXJpYXRpb25zLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RLbm93blZhcmlhdGlvbnMuZ2V0KGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
472
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oZWxwZXIvdmFyaWF0aW9uLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQ3RGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQ0gsZ0NBQWdDLEVBQ2hDLFFBQVEsRUFDUixJQUFJLEVBQ0osaUJBQWlCLEVBQUUsb0JBQW9CLEVBQ1Asb0JBQW9CLEVBQ3BELGFBQWEsRUFFaEIsTUFBTSxPQUFPLENBQUM7QUFFZixNQUFNLE9BQU8sZUFBZTtJQUE1QjtRQUdZLGdCQUFXLEdBQXdCLEVBQUUsQ0FBQztRQUV0Qyx5QkFBb0IsR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQWlkdkUsQ0FBQztJQS9jVSxVQUFVO1FBQ2IsTUFBTSxZQUFZLEdBQWtCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbkYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2hDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDN0IsSUFBSTtvQkFDQSxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7d0JBQ3BCLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7NEJBQzVCLFNBQVMsQ0FBQyxR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Z3VyYXRvcmFwaS9idWlsZC9lbnVtL2RlY28tbm9kZS10eXBlLmVudW1cIjtcclxuaW1wb3J0IHtWYXJpYXRpb25TZXR0aW5nc30gZnJvbSBcIi4uL21vZGVsL3ZhcmlhdGlvbi1zZXR0aW5nc1wiO1xyXG5pbXBvcnQge0Fzc2V0VXRpbHN9IGZyb20gXCIuLi91dGlscy9hc3NldC51dGlsc1wiO1xyXG5pbXBvcnQge0RlY29Ob2RlfSBmcm9tIFwiQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9kZWNvLW5vZGVcIjtcclxuaW1wb3J0IHtWYXJpYXRpb259IGZyb20gXCIuLi9tb2RlbC92YXJpYXRpb25cIjtcclxuaW1wb3J0IHtWYXJpYXRpb25VdGlsc30gZnJvbSBcIi4uL3V0aWxzL3ZhcmlhdGlvbi11dGlsc1wiO1xyXG5pbXBvcnQge0ltYWdlVXRpbHN9IGZyb20gJy4uL3V0aWxzL2ltYWdlLnV0aWxzJztcclxuaW1wb3J0IHtcclxuICAgIEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nLFxyXG4gICAgTWF0ZXJpYWwsXHJcbiAgICBNZXNoLFxyXG4gICAgTWVzaFBob25nTWF0ZXJpYWwsIE1lc2hQaHlzaWNhbE1hdGVyaWFsLFxyXG4gICAgTWVzaFBoeXNpY2FsTWF0ZXJpYWxQYXJhbWV0ZXJzLCBNZXNoU3RhbmRhcmRNYXRlcmlhbCwgTWVzaFN0YW5kYXJkTWF0ZXJpYWxQYXJhbWV0ZXJzLFxyXG4gICAgTmVhcmVzdEZpbHRlcixcclxuICAgIE9iamVjdDNELCBSR0JBRm9ybWF0XHJcbn0gZnJvbSAndGhyZWUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFZhcmlhdGlvbkhlbHBlciB7XHJcblxyXG4gICAgcHVibGljIGFzc2V0UGF0aDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfdmFyaWF0aW9uczogVmFyaWF0aW9uU2V0dGluZ3NbXSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgX2xhc3RLbm93blZhcmlhdGlvbnM6IE1hcDxzdHJpbmcsIFZhcmlhdGlvbltdPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBwdWJsaWMgY2xlYXJDYWNoZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YXJpYXRpb25NYXA6IFZhcmlhdGlvbltdW10gPSBBcnJheS5mcm9tKHRoaXMuX2xhc3RLbm93blZhcmlhdGlvbnMudmFsdWVzKCkpO1xyXG4gICAgICAgIHZhcmlhdGlvbk1hcC5mb3JFYWNoKCh2YXJpYXRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvbnMuZm9yRWFjaCgodmFyaWF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC50ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWwuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwubWV0YWxuZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwubWV0YWxuZXNzLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLnJvdWdobmVzcy5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5hbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLmFvLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgVmFyaWF0aW9uVXRpbHMuQ2xlYXJDYWNoZSgpO1xyXG4gICAgICAgIEltYWdlVXRpbHMuQ2xlYXJDYWNoZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBsb2FkUGFydChvYmo6IE9iamVjdDNELCBwYXJ0czogYW55W10sIHVzZVBicjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBwYXJ0cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJ0c1tpXS5kZWNvTm9kZSAmJiBwYXJ0c1tpXS5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSAmJiBwYXJ0c1tpXS5kZWNvTm9kZS50eXBlID09PSBEZWNvTm9kZVR5cGUuUGFydCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRTZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBWYXJpYXRpb25VdGlscy5Mb2FkVmFyaWF0aW9uKHRoaXMuYXNzZXRQYXRoLCBwYXJ0c1tpXS5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSB8fCBwYXJ0c1tpXS5kZWNvSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0U2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydFZhcmlhdGlvbjogVmFyaWF0aW9uID0gbmV3IFZhcmlhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0VmFyaWF0aW9uLmRlY29JZCA9IHBhcnNlRmxvYXQocGFydHNbaV0uZGVjb05vZGUuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0VmFyaWF0aW9uLmJyYW5kSWQgPSBwYXJ0c1tpXS5kZWNvTm9kZS5icmFuZElkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0VmFyaWF0aW9uLmdhbWVPYmplY3ROYW1lID0gcGFydHNbaV0uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRWYXJpYXRpb24ubWF0ZXJpYWwgPSBhd2FpdCBBc3NldFV0aWxzLkNyZWF0ZU1hdGVyaWFsRnJvbUFzc2V0KHBhcnRTZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcnRzW2ldLnZhcmlhdGlvbiA9IHBhcnRWYXJpYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5TWF0ZXJpYWxQYXJ0KG9iaiwgcGFydFZhcmlhdGlvbiwgcGFydHNbaV0ubm9kZSwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBsb2FkVmFyaWF0aW9uKG9iajogT2JqZWN0M0QsIHBhcnRzOiBhbnlbXSwgdXNlUGJyOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHBhcnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uczogRGVjb05vZGVbXSA9IHBhcnRzW2ldLnZhcmlhdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXZhcmlhdGlvbnMgfHwgdmFyaWF0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZ2V0TGFzdEtub3duVmFyaWF0aW9ucyhwYXJ0c1tpXS5ub2RlSWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzW2ldLnZhcmlhdGlvbnMgPSB0aGlzLl9nZXRMYXN0S25vd25WYXJpYXRpb25zKHBhcnRzW2ldLm5vZGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5VmFyaWF0aW9ucyhvYmosIHBhcnRzW2ldLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0S25vd25WYXJpYXRpb25zOiBWYXJpYXRpb25bXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uUHJvbWlzZTogUHJvbWlzZTxhbnk+W10gPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFyaWF0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvblByb21pc2UucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVGhlVmFyaWF0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uc1tqXS5nYW1lT2JqZWN0TmFtZSB8fCBwYXJ0c1tpXS5kZWNvSWQpLnRoZW4oYXN5bmMgKHZhcmlhdGlvblNldHRpbmdzOiBWYXJpYXRpb25TZXR0aW5ncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFyaWF0aW9uOiBWYXJpYXRpb24gPSBuZXcgVmFyaWF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYXJpYXRpb24uZGVjb0lkID0gcGFyc2VGbG9hdCh2YXJpYXRpb25zW2pdLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5icmFuZElkID0gdmFyaWF0aW9uc1tqXS5icmFuZElkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLm9wdGlvblRleHQgPSAodmFyaWF0aW9uc1tqXSBhcyBhbnkpLm9wdGlvblRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYXJpYXRpb24uZ2FtZU9iamVjdE5hbWUgPSB2YXJpYXRpb25zW2pdLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLnN1cHBsaWVyQXJ0aWNsZU5yID0gKHZhcmlhdGlvbnNbal0gYXMgYW55KS5zdXBwbGllckFydGljbGVOcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhcmlhdGlvbi5tYXRlcmlhbElkID0gKHZhcmlhdGlvbnNbal0gYXMgYW55KS5tYXRlcmlhbElkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFyaWF0aW9uLm1hdGVyaWFsID0gdmFyaWF0aW9uU2V0dGluZ3MubWF0ZXJpYWwgPyB2YXJpYXRpb25TZXR0aW5ncy5tYXRlcmlhbCA6IGF3YWl0IEFzc2V0VXRpbHMuQ3JlYXRlTWF0ZXJpYWxGcm9tQXNzZXQodmFyaWF0aW9uU2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEtub3duVmFyaWF0aW9ucy5wdXNoKG5ld1ZhcmlhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHZhcmlhdGlvblByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0TGFzdEtub3duVmFyaWF0aW9ucyhgJHtwYXJ0c1tpXS5ub2RlSWR9XyR7cGFydHNbaV0ubm9kZX1gLCBsYXN0S25vd25WYXJpYXRpb25zKTtcclxuICAgICAgICAgICAgICAgIHBhcnRzW2ldLnZhcmlhdGlvbnMgPSBsYXN0S25vd25WYXJpYXRpb25zO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlWYXJpYXRpb25zKG9iaiwgcGFydHNbaV0sIHVzZVBicik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQoaWQ6IHN0cmluZyk6IFZhcmlhdGlvblNldHRpbmdzIHtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuX3ZhcmlhdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhcmlhdGlvbnNbaV0uaWQgJiYgdGhpcy5fdmFyaWF0aW9uc1tpXS5pZCA9PT0gaWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YXJpYXRpb25zW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQodmFyaWF0aW9uczogVmFyaWF0aW9uU2V0dGluZ3MpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpZHg6IG51bWJlciA9IHRoaXMuX3ZhcmlhdGlvbnMuZmluZEluZGV4KHYgPT4gdi5pZCA9PT0gdmFyaWF0aW9ucy5pZCk7XHJcbiAgICAgICAgaWYgKGlkeCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbnNbaWR4XSA9IHZhcmlhdGlvbnM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9ucy5wdXNoKHZhcmlhdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJlbG9hZFZhcmlhdGlvbnMoZmlsZU5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgICAgIGZpbGVOYW1lcy5mb3JFYWNoKChmaWxlTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZSAmJiAhdGhpcy5nZXQoZmlsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IG5ldyBWYXJpYXRpb25TZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuaWQgPSBmaWxlTmFtZTtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9ucy5wdXNoKHNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgIGxldCBhc3NldFBhdGg6IHN0cmluZyA9IHRoaXMuYXNzZXRQYXRoO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhc3NldFBhdGguZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFzc2V0UGF0aCArPSAnLyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBWYXJpYXRpb25VdGlscy5Mb2FkVmFyaWF0aW9uKGFzc2V0UGF0aCwgZmlsZU5hbWUpLnRoZW4oKHZhcmlhdGlvblNldHRpbmdzOiBWYXJpYXRpb25TZXR0aW5ncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5sb2FkZWQubmV4dCh2YXJpYXRpb25TZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvblNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHZhcmlhdGlvblNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBsb2FkVGhlVmFyaWF0aW9uKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFZhcmlhdGlvblNldHRpbmdzPiB7XHJcbiAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGZpbGVOYW1lKSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0KGZpbGVOYW1lKTtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmxvYWRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVmFyaWF0aW9uVG9Mb2FkKHNldHRpbmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3dhaXRGb3JWYXJpYXRpb25Ub0xvYWQoc2V0dGluZ3M6IFZhcmlhdGlvblNldHRpbmdzKTogUHJvbWlzZTxWYXJpYXRpb25TZXR0aW5ncz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgc2V0dGluZ3MubG9hZGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRDaGlsZHJlbkZpbHRlckJ5UHJvcChvYmo6IE9iamVjdDNELCB1c2VyRGF0YU9iamVjdFByb3A6IHN0cmluZywgcHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KTogT2JqZWN0M0RbXSB7XHJcbiAgICAgICAgcmV0dXJuIG9iai5jaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZC51c2VyRGF0YSAmJlxyXG4gICAgICAgICAgICAgICAgY2hpbGQudXNlckRhdGEuaGFzT3duUHJvcGVydHkodXNlckRhdGFPYmplY3RQcm9wKSAmJlxyXG4gICAgICAgICAgICAgICAgY2hpbGQudXNlckRhdGFbdXNlckRhdGFPYmplY3RQcm9wXS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJlxyXG4gICAgICAgICAgICAgICAgY2hpbGQudXNlckRhdGFbdXNlckRhdGFPYmplY3RQcm9wXVtwcm9wXSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfYXBwbHlNYXRlcmlhbFBhcnQob2JqOiBPYmplY3QzRCwgcGFydE1hdGVyaWFsOiBhbnksIG5vZGVJZDogYW55LCB1c2VQYnI6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5fZ2V0Q2hpbGRyZW5GaWx0ZXJCeVByb3Aob2JqLCAnc2VsZWN0aW9uJywgJ25vZGUnLCBub2RlSWQpO1xyXG4gICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgY2hpbGQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGQudHJhdmVyc2UoKG1lc2gpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWVzaCBpbnN0YW5jZW9mIE1lc2ggJiYgcGFydE1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lc2gubWF0ZXJpYWwpKSB7IC8vIG11bHRpbWF0ZXJpYWwgc3VwcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDAsIGpsZW46IG51bWJlciA9IG1lc2gubWF0ZXJpYWwubGVuZ3RoOyBqIDwgamxlbjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWxbal0ubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpeGVkX2ZyYW1lJykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWxbal0gPSB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKG1lc2gubWF0ZXJpYWxbal0ubmFtZSwgcGFydE1hdGVyaWFsLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFsLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXhlZF9mcmFtZScpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwgPSB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKG1lc2gubWF0ZXJpYWwubmFtZSwgcGFydE1hdGVyaWFsLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfYXBwbHlWYXJpYXRpb25zKG9iajogT2JqZWN0M0QsIHBhcnQ6IGFueSwgdXNlUGJyOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldENoaWxkcmVuRmlsdGVyQnlQcm9wKG9iaiwgJ3NlbGVjdGlvbicsICdub2RlJywgcGFydC5ub2RlKTtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsICYmIGNoaWxkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnRyYXZlcnNlKChtZXNoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2ggaW5zdGFuY2VvZiBNZXNoICYmIHBhcnQudmFyaWF0aW9ucyAmJiBwYXJ0LnZhcmlhdGlvbnMubGVuZ3RoID4gMCAmJiBtZXNoLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjXycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFydC52YXJpYXRpb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYXRpb246IFZhcmlhdGlvbiA9IHBhcnQudmFyaWF0aW9uc1tqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRlcmlhbFRvU2VhcmNoOiBzdHJpbmcgPSAhIXZhcmlhdGlvbi5tYXRlcmlhbElkID8gdmFyaWF0aW9uLm1hdGVyaWFsSWQudG9Mb3dlckNhc2UoKSA6ICdkZWZhdWx0JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtZXNoLm1hdGVyaWFsKSkgeyAvLyBtdWx0aW1hdGVyaWFsIHN1cHBvcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IDAsIG1sZW46IG51bWJlciA9IG1lc2gubWF0ZXJpYWwubGVuZ3RoOyBtIDwgbWxlbjsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbFttXS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihtYXRlcmlhbFRvU2VhcmNoKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsIGluc3RhbmNlb2YgTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbFttXSA9IHZhcmlhdGlvbi5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWxbbV0ubmFtZSAmJiAobWVzaC5tYXRlcmlhbFttXS5uYW1lID09PSAnRml4ZWRfR2xhc3MnIHx8IG1lc2gubWF0ZXJpYWxbbV0ubmFtZSA9PT0gJ0RlZmF1bHRfR2xhc3MnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5jYXN0U2hhZG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsW21dID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsW21dLm5hbWUsIHZhcmlhdGlvbiwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWxbbV0ubmFtZSAmJiAobWVzaC5tYXRlcmlhbFttXS5uYW1lID09PSAnRml4ZWRfR2xhc3MnIHx8IG1lc2gubWF0ZXJpYWxbbV0ubmFtZSA9PT0gJ0RlZmF1bHRfR2xhc3MnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5jYXN0U2hhZG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihtYXRlcmlhbFRvU2VhcmNoKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwgaW5zdGFuY2VvZiBNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwgPSB2YXJpYXRpb24ubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWwubmFtZSAmJiAobWVzaC5tYXRlcmlhbC5uYW1lID09PSAnRml4ZWRfR2xhc3MnIHx8IG1lc2gubWF0ZXJpYWwubmFtZSA9PT0gJ0RlZmF1bHRfR2xhc3MnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoLmNhc3RTaGFkb3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwgPSB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKG1lc2gubWF0ZXJpYWwubmFtZSwgdmFyaWF0aW9uLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFsLm5hbWUgJiYgKG1lc2gubWF0ZXJpYWwubmFtZSA9PT0gJ0ZpeGVkX0dsYXNzJyB8fCBtZXNoLm1hdGVyaWFsLm5hbWUgPT09ICdEZWZhdWx0X0dsYXNzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5jYXN0U2hhZG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihuYW1lOiBzdHJpbmcsIHZhcmlhdGlvbjogVmFyaWF0aW9uLCB1c2VQYnI6IGJvb2xlYW4gPSBmYWxzZSk6IE1hdGVyaWFsIHtcclxuICAgICAgICBjb25zdCBtYXRlcmlhbCA9IHZhcmlhdGlvbi5tYXRlcmlhbDtcclxuICAgICAgICBpZiAobWF0ZXJpYWwudGV4dHVyZSkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC50ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudGV4dHVyZS5tYXBwaW5nID0gRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdXNlUGJyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld01hdGVyaWFsOiBNZXNoUGhvbmdNYXRlcmlhbCA9IG5ldyBNZXNoUGhvbmdNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBzaGluaW5lc3M6IG1hdGVyaWFsLnNoaW5pbmVzcyxcclxuICAgICAgICAgICAgICAgIHNwZWN1bGFyOiBtYXRlcmlhbC5zcGVjdWxhcixcclxuICAgICAgICAgICAgICAgIG1hcDogbWF0ZXJpYWwudGV4dHVyZSxcclxuICAgICAgICAgICAgICAgIG5vcm1hbE1hcDogbWF0ZXJpYWwubm9ybWFsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXdNYXRlcmlhbC5uYW1lID0gbmFtZTtcclxuICAgICAgICAgICAgbmV3TWF0ZXJpYWwuY29sb3Iuc2V0UkdCKDAuOCwgMC44LCAwLjgpO1xyXG4gICAgICAgICAgICBuZXdNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdNYXRlcmlhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsLnNoZWVuIHx8IG1hdGVyaWFsLnNoZWVuQ29sb3IgfHwgbWF0ZXJpYWwucmVmbGVjdGl2aXR5IHx8IG1hdGVyaWFsLnRyYW5zbWlzc2lvbikgeyAvLyBUT0RPOiBQcm9wZXIgY2hlY2sgZm9yIGFsbCB1bmlxdWUgcGh5c2ljYWwgbWF0ZXJpYWwgcHJvcGVydGllc1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IE1lc2hQaHlzaWNhbE1hdGVyaWFsUGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgIC8vIHNpZGU6IG1hdGVyaWFsLnNpZGUgPyBtYXRlcmlhbC5zaWRlIDogRnJvbnRTaWRlLFxyXG4gICAgICAgICAgICAgICAgcm91Z2huZXNzOiBtYXRlcmlhbC5yb3VnaG5lc3NWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIG1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlICE9PSBudWxsID8gbWF0ZXJpYWwucm91Z2huZXNzVmFsdWUgOiAxLFxyXG4gICAgICAgICAgICAgICAgbWV0YWxuZXNzOiBtYXRlcmlhbC5tZXRhbG5lc3NWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIG1hdGVyaWFsLm1ldGFsbmVzc1ZhbHVlICE9PSBudWxsID8gbWF0ZXJpYWwubWV0YWxuZXNzVmFsdWUgOiAwLFxyXG4gICAgICAgICAgICAgICAgZW52TWFwSW50ZW5zaXR5OiBtYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgPyBtYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgOiAwLjAxLFxyXG4gICAgICAgICAgICAgICAgY2xlYXJjb2F0TWFwOiBtYXRlcmlhbC5jbGVhcmNvYXRNYXAgPyBtYXRlcmlhbC5jbGVhcmNvYXRNYXAgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgY2xlYXJjb2F0Um91Z2huZXNzTWFwOiBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgPyBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgLy8gd2lyZWZyYW1lOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgLy8gb3BhY2l0eTogMC4zLFxyXG4gICAgICAgICAgICAgICAgLy8gdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5kaXNwbGFjZW1lbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudFNjYWxlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLm9wYWNpdHkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGFjaXR5ID0gbWF0ZXJpYWwub3BhY2l0eTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwudHJhbnNwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy50cmFuc3BhcmVudCA9IG1hdGVyaWFsLnRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmUgPSBtYXRlcmlhbC5lbWlzc2l2ZVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVJbnRlbnNpdHkgPSBtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC50ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWFwID0gbWF0ZXJpYWwudGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5hbykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwID0gbWF0ZXJpYWwuYW87XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuYW9NYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5yb3VnaG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yb3VnaG5lc3NNYXAgPSBtYXRlcmlhbC5yb3VnaG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucm91Z2huZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIG1hdGVyaWFsLnJvdWdobmVzcy5tYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5tZXRhbG5lc3MpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5tZXRhbG5lc3NNYXAgPSBtYXRlcmlhbC5tZXRhbG5lc3M7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWV0YWxuZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwubm9ybWFsKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubm9ybWFsTWFwID0gbWF0ZXJpYWwubm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm5vcm1hbE1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRpc3BsYWNlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudE1hcCA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudDtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlTWFwID0gbWF0ZXJpYWwuZW1pc3NpdmU7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbnZNYXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgIT0gbnVsbCB8fCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVudk1hcCA9IG1hdGVyaWFsLmVudk1hcDtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW52TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5lbnZNYXAubWFwcGluZyA9IEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmVudk1hcC5taW5GaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmVudk1hcC5tYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5yZWZsZWN0aXZpdHkgIT09IHVuZGVmaW5lZCAmJiBtYXRlcmlhbC5yZWZsZWN0aXZpdHkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yZWZsZWN0aXZpdHkgPSBtYXRlcmlhbC5yZWZsZWN0aXZpdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnNpZGUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5zaWRlID0gbWF0ZXJpYWwuc2lkZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbmV3TWF0ZXJpYWw6IE1lc2hQaHlzaWNhbE1hdGVyaWFsID0gbmV3IE1lc2hQaHlzaWNhbE1hdGVyaWFsKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgICAgICBuZXdNYXRlcmlhbC5jb2xvci5zZXRSR0IoMSwgMSwgMSk7XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5zaGVlbikge1xyXG4gICAgICAgICAgICAgICAgbmV3TWF0ZXJpYWwuc2hlZW4gPSBtYXRlcmlhbC5zaGVlbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuc2hlZW5Db2xvcikge1xyXG4gICAgICAgICAgICAgICAgbmV3TWF0ZXJpYWwuc2hlZW5Db2xvciA9IG1hdGVyaWFsLnNoZWVuQ29sb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNYXRlcmlhbC5zaGVlblJvdWdobmVzcyA9IG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5zaGVlbkNvbG9yTWFwKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNYXRlcmlhbC5zaGVlbkNvbG9yTWFwID0gbWF0ZXJpYWwuc2hlZW5Db2xvck1hcDtcclxuICAgICAgICAgICAgICAgIG5ld01hdGVyaWFsLnNoZWVuQ29sb3JNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcCkge1xyXG4gICAgICAgICAgICAgICAgbmV3TWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXAgPSBtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcDtcclxuICAgICAgICAgICAgICAgIG5ld01hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwudHJhbnNtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNYXRlcmlhbC50cmFuc21pc3Npb24gPSBtYXRlcmlhbC50cmFuc21pc3Npb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmlvciAhPT0gdW5kZWZpbmVkICYmIG1hdGVyaWFsLmlvciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbmV3TWF0ZXJpYWwuaW9yID0gbWF0ZXJpYWwuaW9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC50aGlja25lc3MgIT09IHVuZGVmaW5lZCAmJiBtYXRlcmlhbC50aGlja25lc3MgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIG5ld01hdGVyaWFsLnRoaWNrbmVzcyA9IG1hdGVyaWFsLnRoaWNrbmVzcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCAmJiBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbmV3TWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHkgPSBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdNYXRlcmlhbC50cmFuc21pc3Npb25NYXAgPSBtYXRlcmlhbC50cmFuc21pc3Npb25NYXA7XHJcbiAgICAgICAgICAgICAgICBuZXdNYXRlcmlhbC50cmFuc21pc3Npb25NYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuZXdNYXRlcmlhbC5uYW1lICYmIChuZXdNYXRlcmlhbC5uYW1lID09PSAnRml4ZWRfR2xhc3MnIHx8IG5ld01hdGVyaWFsLm5hbWUgPT09ICdEZWZhdWx0X0dsYXNzJykpIHtcclxuICAgICAgICAgICAgICAgIC8vIG5ld01hdGVyaWFsLmZvcm1hdCA9IFJHQkFGb3JtYXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld01hdGVyaWFsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogTWVzaFN0YW5kYXJkTWF0ZXJpYWxQYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgLy8gc2lkZTogbWF0ZXJpYWwuc2lkZSA/IG1hdGVyaWFsLnNpZGUgOiBGcm9udFNpZGUsXHJcbiAgICAgICAgICAgICAgICByb3VnaG5lc3M6IG1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwucm91Z2huZXNzVmFsdWUgIT09IG51bGwgPyBtYXRlcmlhbC5yb3VnaG5lc3NWYWx1ZSA6IDEsXHJcbiAgICAgICAgICAgICAgICBtZXRhbG5lc3M6IG1hdGVyaWFsLm1ldGFsbmVzc1ZhbHVlICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwubWV0YWxuZXNzVmFsdWUgIT09IG51bGwgPyBtYXRlcmlhbC5tZXRhbG5lc3NWYWx1ZSA6IDAsXHJcbiAgICAgICAgICAgICAgICBlbnZNYXBJbnRlbnNpdHk6IG1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA/IG1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA6IDAuMDFcclxuICAgICAgICAgICAgICAgIC8vIHdpcmVmcmFtZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIC8vIG9wYWNpdHk6IDAuMyxcclxuICAgICAgICAgICAgICAgIC8vIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuZGlzcGxhY2VtZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRTY2FsZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5vcGFjaXR5KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BhY2l0eSA9IG1hdGVyaWFsLm9wYWNpdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMudHJhbnNwYXJlbnQgPSBtYXRlcmlhbC50cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuZW1pc3NpdmVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlID0gbWF0ZXJpYWwuZW1pc3NpdmVWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuZW1pc3NpdmVJbnRlbnNpdHlWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlSW50ZW5zaXR5ID0gbWF0ZXJpYWwuZW1pc3NpdmVJbnRlbnNpdHlWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwudGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1hcCA9IG1hdGVyaWFsLnRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuYW8pIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5hb01hcCA9IG1hdGVyaWFsLmFvO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFvTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwucm91Z2huZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucm91Z2huZXNzTWFwID0gbWF0ZXJpYWwucm91Z2huZXNzO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnJvdWdobmVzc01hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyBtYXRlcmlhbC5yb3VnaG5lc3MubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwubWV0YWxuZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMubWV0YWxuZXNzTWFwID0gbWF0ZXJpYWwubWV0YWxuZXNzO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm1ldGFsbmVzc01hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsLm5vcm1hbCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm5vcm1hbE1hcCA9IG1hdGVyaWFsLm5vcm1hbDtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5ub3JtYWxNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbC5kaXNwbGFjZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRNYXAgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZGlzcGxhY2VtZW50TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuZW1pc3NpdmUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5lbWlzc2l2ZU1hcCA9IG1hdGVyaWFsLmVtaXNzaXZlO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVtaXNzaXZlTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuZW52TWFwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5ICE9IG51bGwgfHwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5lbnZNYXAgPSBtYXRlcmlhbC5lbnZNYXA7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVudk1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuZW52TWFwLm1hcHBpbmcgPSBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZztcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5lbnZNYXAubWluRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5lbnZNYXAubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuc2lkZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnNpZGUgPSBtYXRlcmlhbC5zaWRlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBuZXdNYXRlcmlhbDogTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPSBuZXcgTWVzaFN0YW5kYXJkTWF0ZXJpYWwocGFyYW1zKTtcclxuICAgICAgICAgICAgbmV3TWF0ZXJpYWwubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgIG5ld01hdGVyaWFsLmNvbG9yLnNldFJHQigxLCAxLCAxKTtcclxuICAgICAgICAgICAgaWYgKG5ld01hdGVyaWFsLm5hbWUgJiYgKG5ld01hdGVyaWFsLm5hbWUgPT09ICdGaXhlZF9HbGFzcycgfHwgbmV3TWF0ZXJpYWwubmFtZSA9PT0gJ0RlZmF1bHRfR2xhc3MnKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gbmV3TWF0ZXJpYWwuZm9ybWF0ID0gUkdCQUZvcm1hdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXdNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbmV3TWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldExhc3RLbm93blZhcmlhdGlvbnMoaWQ6IHN0cmluZywgdmFyaWF0aW9uOiBWYXJpYXRpb25bXSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2xhc3RLbm93blZhcmlhdGlvbnMuc2V0KGlkLCB2YXJpYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dldExhc3RLbm93blZhcmlhdGlvbnMoaWQ6IHN0cmluZyk6IFZhcmlhdGlvbltdIHtcclxuICAgICAgICBpZiAodGhpcy5fbGFzdEtub3duVmFyaWF0aW9ucy5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sYXN0S25vd25WYXJpYXRpb25zLmdldChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Color } from 'three';
|
|
2
2
|
export class Material {
|
|
3
3
|
constructor() {
|
|
4
|
-
this.specular = new
|
|
4
|
+
this.specular = new Color(0.3, 0.3, 0.3);
|
|
5
5
|
this.shininess = 0;
|
|
6
6
|
this.repeatX = 4;
|
|
7
7
|
this.repeatY = 4;
|
|
8
8
|
this.loaded = false;
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEtBQUssRUFBVSxNQUFNLE9BQU8sQ0FBQztBQUVyQyxNQUFNLE9BQU8sUUFBUTtJQUFyQjtRQUdTLGFBQVEsR0FBVSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFRZCxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNaLFdBQU0sR0FBRyxLQUFLLENBQUM7SUEyQnhCLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29sb3IsIFRleHR1cmV9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsIHtcbiAgcHVibGljIG5hbWU6IHN0cmluZztcbiAgcHVibGljIHNjaGVtYTogc3RyaW5nO1xuICBwdWJsaWMgc3BlY3VsYXI6IENvbG9yID0gbmV3IENvbG9yKDAuMywgMC4zLCAwLjMpO1xuICBwdWJsaWMgc2hpbmluZXNzID0gMDtcbiAgLy8gcHVibGljIHJvdWdobmVzcyA9IDE7XG4gIC8vIHB1YmxpYyBtZXRhbG5lc3MgPSAwLjU7XG4gIHB1YmxpYyBub3JtYWw6IFRleHR1cmU7XG4gIHB1YmxpYyB0ZXh0dXJlOiBUZXh0dXJlO1xuICBwdWJsaWMgYW86IFRleHR1cmU7XG4gIHB1YmxpYyBtZXRhbG5lc3M6IFRleHR1cmU7XG4gIHB1YmxpYyByb3VnaG5lc3M6IFRleHR1cmU7XG4gIHB1YmxpYyByZXBlYXRYID0gNDtcbiAgcHVibGljIHJlcGVhdFkgPSA0O1xuICBwdWJsaWMgbG9hZGVkID0gZmFsc2U7XG4gIHB1YmxpYyBtZXRhbG5lc3NWYWx1ZTogbnVtYmVyO1xuICBwdWJsaWMgcm91Z2huZXNzVmFsdWU6IG51bWJlcjtcbiAgcHVibGljIGRpc3BsYWNlbWVudDogVGV4dHVyZTtcbiAgcHVibGljIGRpc3BsYWNlbWVudFZhbHVlOiBudW1iZXI7XG4gIHB1YmxpYyBzaGVlbjogbnVtYmVyO1xuICBwdWJsaWMgc2hlZW5Db2xvcjogQ29sb3IgfCBzdHJpbmcgfCBudW1iZXI7XG4gIHB1YmxpYyBzaGVlbkNvbG9yTWFwOiBUZXh0dXJlIHwgbnVsbDtcbiAgcHVibGljIHNoZWVuUm91Z2huZXNzOiBudW1iZXI7XG4gIHB1YmxpYyBzaGVlblJvdWdobmVzc01hcDogVGV4dHVyZSB8IG51bGw7XG4gIHB1YmxpYyBlbWlzc2l2ZTogVGV4dHVyZTtcbiAgcHVibGljIGVtaXNzaXZlVmFsdWU6IENvbG9yIHwgc3RyaW5nIHwgbnVtYmVyO1xuICBwdWJsaWMgZW1pc3NpdmVJbnRlbnNpdHlWYWx1ZTogbnVtYmVyO1xuICBwdWJsaWMgZW52TWFwOiBUZXh0dXJlO1xuICBwdWJsaWMgZW52TWFwSW50ZW5zaXR5OiBudW1iZXI7XG4gIHB1YmxpYyBvcGFjaXR5OiBudW1iZXI7XG4gIHB1YmxpYyB0cmFuc3BhcmVudDogYm9vbGVhbjtcbiAgcHVibGljIHJlZmxlY3Rpdml0eTogbnVtYmVyO1xuICBwdWJsaWMgc2lkZTogbnVtYmVyO1xuICBwdWJsaWMgaW9yOiBudW1iZXI7XG4gIHB1YmxpYyB0cmFuc21pc3Npb246IG51bWJlcjtcbiAgcHVibGljIHRoaWNrbmVzczogbnVtYmVyO1xuICBwdWJsaWMgc3BlY3VsYXJJbnRlbnNpdHk6IG51bWJlcjtcbiAgcHVibGljIHRyYW5zbWlzc2lvbk1hcDogVGV4dHVyZSB8IG51bGw7XG5cbiAgcHVibGljIGNsZWFyY29hdE1hcDogVGV4dHVyZSB8IG51bGw7XG4gIHB1YmxpYyBjbGVhcmNvYXRSb3VnaG5lc3NNYXA6IFRleHR1cmUgfCBudWxsO1xufVxuIl19
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Subject } from "rxjs";
|
|
2
|
+
export class VariationSettingsSettings {
|
|
3
|
+
}
|
|
2
4
|
export class VariationSettings {
|
|
3
5
|
constructor() {
|
|
4
|
-
this.settings =
|
|
6
|
+
this.settings = new VariationSettingsSettings();
|
|
5
7
|
this.loading = false;
|
|
6
8
|
this.loaded = new Subject();
|
|
7
9
|
}
|
|
8
10
|
}
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLXNldHRpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL3ZhcmlhdGlvbi1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE1BQU0sT0FBTyx5QkFBeUI7Q0FLckM7QUFFRCxNQUFNLE9BQU8saUJBQWlCO0lBQTlCO1FBRVMsYUFBUSxHQUE4QixJQUFJLHlCQUF5QixFQUFFLENBQUM7UUE0Q3RFLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsV0FBTSxHQUErQixJQUFJLE9BQU8sRUFBcUIsQ0FBQztJQUMvRSxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N1YmplY3R9IGZyb20gXCJyeGpzXCI7XG5cbmV4cG9ydCBjbGFzcyBWYXJpYXRpb25TZXR0aW5nc1NldHRpbmdzIHtcbiAgcmVwZWF0eDogbnVtYmVyO1xuICByZXBlYXR5OiBudW1iZXI7XG4gIHJvdWdobmVzczogbnVtYmVyO1xuICBtZXRhbG5lc3M6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZhcmlhdGlvblNldHRpbmdzIHtcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIHB1YmxpYyBzZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3NTZXR0aW5ncyA9IG5ldyBWYXJpYXRpb25TZXR0aW5nc1NldHRpbmdzKCk7XG4gIHB1YmxpYyB0ZXh0dXJlOiBzdHJpbmc7XG4gIHB1YmxpYyB0ZXh0dXJlRmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIG5vcm1hbDogc3RyaW5nO1xuICBwdWJsaWMgbm9ybWFsRmlsZW5hbWU6IHN0cmluZztcbiAgcHVibGljIGFvOiBzdHJpbmc7XG4gIHB1YmxpYyBhb0ZpbGVuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBtZXRhbG5lc3M6IHN0cmluZztcbiAgcHVibGljIG1ldGFsbmVzc0ZpbGVuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByb3VnaG5lc3M6IHN0cmluZztcbiAgcHVibGljIHJvdWdobmVzc0ZpbGVuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBvcm06IHN0cmluZztcbiAgcHVibGljIG9ybUZpbGVuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBkaXNwbGFjZW1lbnQ6IHN0cmluZztcbiAgcHVibGljIGRpc3BsYWNlbWVudFZhbHVlOiBudW1iZXI7XG4gIHB1YmxpYyBkaXNwbGFjZW1lbnRGaWxlbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgc2hlZW46IG51bWJlcjtcbiAgcHVibGljIHNoZWVuQ29sb3I6IHN0cmluZztcbiAgcHVibGljIHNoZWVuQ29sb3JNYXA6IHN0cmluZztcbiAgcHVibGljIHNoZWVuQ29sb3JNYXBGaWxlbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgdHJhbnNtaXNzaW9uTWFwOiBzdHJpbmc7XG4gIHB1YmxpYyB0cmFuc21pc3Npb25NYXBGaWxlbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgc2hlZW5Sb3VnaG5lc3M6IG51bWJlcjtcbiAgcHVibGljIHNoZWVuUm91Z2huZXNzTWFwOiBzdHJpbmc7XG4gIHB1YmxpYyBzaGVlblJvdWdobmVzc01hcEZpbGVuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBlbWlzc2l2ZTogc3RyaW5nO1xuICBwdWJsaWMgZW1pc3NpdmVGaWxlbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZW1pc3NpdmVJbnRlbnNpdHk6IG51bWJlcjtcbiAgcHVibGljIGVtaXNzaXZlVmFsdWU6IHN0cmluZztcbiAgcHVibGljIG9wYWNpdHk6IG51bWJlcjtcbiAgcHVibGljIHRyYW5zcGFyZW50OiBib29sZWFuO1xuICBwdWJsaWMgZW52TWFwOiBzdHJpbmc7XG4gIHB1YmxpYyBlbnZNYXBGaWxlbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZW52TWFwSW50ZW5zaXR5OiBudW1iZXI7XG4gIHB1YmxpYyByZWZsZWN0aXZpdHk6IG51bWJlcjtcbiAgcHVibGljIHNpZGU6IG51bWJlcjtcbiAgcHVibGljIHRyYW5zbWlzc2lvbjogbnVtYmVyO1xuICBwdWJsaWMgaW9yOiBudW1iZXI7XG4gIHB1YmxpYyB0aGlja25lc3M6IG51bWJlcjtcbiAgcHVibGljIHNwZWN1bGFySW50ZW5zaXR5OiBudW1iZXI7XG5cbiAgLy8gZm9yIHByZS1zYXZlZCBtYXRlcmlhbHMgZG93bmxvYWRlZCBhcyB6aXBcbiAgcHVibGljIG1hdGVyaWFsOiBhbnk7XG5cbiAgcHVibGljIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxvYWRlZDogU3ViamVjdDxWYXJpYXRpb25TZXR0aW5ncz4gPSBuZXcgU3ViamVjdDxWYXJpYXRpb25TZXR0aW5ncz4oKTtcbn1cbiJdfQ==
|