@datagrok-libraries/statistics 1.3.6 → 1.4.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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # statistics changelog
2
2
 
3
+ ## 1.4.0 (2024-08-23)
4
+
5
+ ### Features
6
+
7
+ * Improved fitting algorithm - didn't fit properly because was stuck in the bounds
8
+
3
9
  ## 1.3.6 (2024-08-13)
4
10
 
5
11
  ### Features
package/package.json CHANGED
@@ -4,22 +4,24 @@
4
4
  "access": "public"
5
5
  },
6
6
  "friendlyName": "statistics",
7
- "version": "1.3.6",
7
+ "version": "1.4.0",
8
8
  "description": "Statistics utilities",
9
9
  "dependencies": {
10
- "datagrok-api": "^1.20.0",
11
10
  "@datagrok-libraries/utils": "^4.2.11",
12
11
  "cash-dom": "^8.0.0",
12
+ "datagrok-api": "^1.20.0",
13
+ "dayjs": "^1.11.7",
13
14
  "jstat": "^1.9.6",
14
- "dayjs": "^1.11.7"
15
+ "seedrandom": "^3.0.5",
16
+ "@types/seedrandom": "^3.0.8"
15
17
  },
16
18
  "devDependencies": {
17
- "ts-loader": "^9.2.6",
18
- "typescript": "^4.2.3",
19
+ "@typescript-eslint/eslint-plugin": "latest",
20
+ "@typescript-eslint/parser": "latest",
19
21
  "eslint": "latest",
20
22
  "eslint-config-google": "latest",
21
- "@typescript-eslint/eslint-plugin": "latest",
22
- "@typescript-eslint/parser": "latest"
23
+ "ts-loader": "^9.2.6",
24
+ "typescript": "^4.2.3"
23
25
  },
24
26
  "scripts": {
25
27
  "link": "npm link",
@@ -1 +1 @@
1
- {"version":3,"file":"fit-curve.d.ts","sourceRoot":"","sources":["fit-curve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fit-curve.d.ts","sourceRoot":"","sources":["fit-curve.ts"],"names":[],"mappings":"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"}
@@ -257,28 +257,84 @@ export function fitData(data, fitFunction, errorModel, parameterBounds) {
257
257
  const curveFunction = fitFunction.y;
258
258
  let paramValues = fitFunction.getInitialParameters(data.x, data.y);
259
259
  const of = objectiveFactory(curveFunction, data, errorModel);
260
- let bottomParamBounds = new Float32Array(fitFunction.parameterNames.length);
261
- let topParamBounds = new Float32Array(fitFunction.parameterNames.length);
260
+ const bottomParamBounds = new Float32Array(fitFunction.parameterNames.length);
261
+ const topParamBounds = new Float32Array(fitFunction.parameterNames.length);
262
262
  for (let i = 0; i < fitFunction.parameterNames.length; i++) {
263
263
  bottomParamBounds[i] = paramValues[i] === 0 ? -1 : paramValues[i] - Math.abs(paramValues[i] * 0.5);
264
264
  topParamBounds[i] = paramValues[i] === 0 ? 1 : paramValues[i] + Math.abs(paramValues[i] * 0.5);
265
265
  }
266
- if (parameterBounds && parameterBounds.length !== 0) {
267
- bottomParamBounds = new Float32Array(parameterBounds.length);
268
- bottomParamBounds.set(parameterBounds.map((pb) => pb.min));
269
- topParamBounds = new Float32Array(parameterBounds.length);
270
- topParamBounds.set(parameterBounds.map((pb) => pb.max));
271
- }
272
- const optimization = performNelderMeadOptimization(of, bottomParamBounds, topParamBounds, {
273
- tolerance: NELDER_MEAD_DEFAULTS.TOLERANCE,
274
- maxIter: NELDER_MEAD_DEFAULTS.MAX_ITER,
275
- nonZeroParam: NELDER_MEAD_DEFAULTS.NON_ZERO_PARAM,
276
- initialScale: NELDER_MEAD_DEFAULTS.INITIAL_SCALE,
277
- scaleReflection: NELDER_MEAD_DEFAULTS.SCALE_REFLECTION,
278
- scaleExpansion: NELDER_MEAD_DEFAULTS.SCALE_EXPANSION,
279
- scaleContraction: NELDER_MEAD_DEFAULTS.SCALE_CONTRACTION,
280
- }, 1, paramValues);
281
- paramValues = optimization.extremums[0].point;
266
+ const parameterBoundsBitset = DG.BitSet.create(fitFunction.parameterNames.length * 2);
267
+ if (parameterBounds && parameterBounds.length !== 0)
268
+ for (let i = 0; i < parameterBounds.length; i++) {
269
+ if (parameterBounds[i].min !== undefined && parameterBounds[i].min !== null) {
270
+ bottomParamBounds[i] = parameterBounds[i].min;
271
+ parameterBoundsBitset.set(i * 2, true);
272
+ }
273
+ if (parameterBounds[i].max !== undefined && parameterBounds[i].max !== null) {
274
+ topParamBounds[i] = parameterBounds[i].max;
275
+ parameterBoundsBitset.set(i * 2 + 1, true);
276
+ }
277
+ }
278
+ const getConsistency = (extremum) => {
279
+ const residuals = of(extremum.point).residuals;
280
+ let q1q4 = 0;
281
+ let q2q3 = 0;
282
+ // TODO: rewrite quartiles to a better condition
283
+ for (let i = 0; i < residuals.length; i++) {
284
+ if (residuals.length / 4 > i)
285
+ q1q4 += Math.pow(residuals[i], 2);
286
+ else if (3 * residuals.length / 4 > i)
287
+ q2q3 += Math.pow(residuals[i], 2);
288
+ else
289
+ q1q4 += Math.pow(residuals[i], 2);
290
+ }
291
+ return q1q4 / q2q3;
292
+ };
293
+ let iter = -1;
294
+ let continueOptimization = 0;
295
+ let statistics = null;
296
+ let optimization;
297
+ let minIdx = 0;
298
+ do {
299
+ optimization = performNelderMeadOptimization(of, bottomParamBounds, topParamBounds, {
300
+ tolerance: NELDER_MEAD_DEFAULTS.TOLERANCE,
301
+ maxIter: NELDER_MEAD_DEFAULTS.MAX_ITER,
302
+ nonZeroParam: NELDER_MEAD_DEFAULTS.NON_ZERO_PARAM,
303
+ initialScale: NELDER_MEAD_DEFAULTS.INITIAL_SCALE,
304
+ scaleReflection: NELDER_MEAD_DEFAULTS.SCALE_REFLECTION,
305
+ scaleExpansion: NELDER_MEAD_DEFAULTS.SCALE_EXPANSION,
306
+ scaleContraction: NELDER_MEAD_DEFAULTS.SCALE_CONTRACTION,
307
+ }, 10, paramValues);
308
+ minIdx = 0;
309
+ for (let i = 1; i < optimization.extremums.length; i++)
310
+ if (optimization.extremums[i].cost < optimization.extremums[minIdx].cost)
311
+ minIdx = i;
312
+ const newStatistics = getConsistency(optimization.extremums[minIdx]);
313
+ if (statistics === null)
314
+ statistics = newStatistics;
315
+ else if (newStatistics < statistics) {
316
+ statistics = newStatistics;
317
+ continueOptimization = 0;
318
+ }
319
+ else
320
+ continueOptimization++;
321
+ if (iter === -1) {
322
+ if (statistics <= 2)
323
+ break;
324
+ iter++;
325
+ }
326
+ if (iter > 40)
327
+ break;
328
+ if (continueOptimization === 3)
329
+ break;
330
+ for (let i = 0; i < fitFunction.parameterNames.length; i++) {
331
+ if (!parameterBoundsBitset.get(i * 2))
332
+ bottomParamBounds[i] = paramValues[i] - Math.abs(optimization.extremums[minIdx].point[i] * (continueOptimization + 1.5));
333
+ if (!parameterBoundsBitset.get(i * 2 + 1))
334
+ topParamBounds[i] = paramValues[i] + Math.abs(optimization.extremums[minIdx].point[i] * (continueOptimization + 1.5));
335
+ }
336
+ } while (true);
337
+ paramValues = optimization.extremums[minIdx].point;
282
338
  const fittedCurve = getFittedCurve(curveFunction, paramValues);
283
339
  return {
284
340
  fittedCurve: fittedCurve,
@@ -429,7 +485,7 @@ function objectiveFactory(targetFunc, data, errorModel) {
429
485
  sigmaSqI[i] = Math.pow(sigmaA + sigmaB * pred[i], 2);
430
486
  likelihood += residuesSquares[i] / sigmaSqI[i] + Math.log(2 * Math.PI * sigmaSqI[i]);
431
487
  }
432
- return likelihood;
488
+ return { likelihood, residuals };
433
489
  };
434
490
  }
435
491
  function getSigma(targetFunc, data, errorModel, params) {
@@ -473,4 +529,4 @@ function getSigmasForCombinedErrorModel(sigmaA, sigmaB, residuesSquares, pred) {
473
529
  sigmaA = sigmaA * finalProportion;
474
530
  return { sigmaA, sigmaB };
475
531
  }
476
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWN1cnZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZml0LWN1cnZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixvQ0FBb0M7QUFDcEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxzQkFBc0I7QUFDdEIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFHL0UsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFlBQVksRUFBRSxjQUFjO0lBQzVCLFFBQVEsRUFBRSxVQUFVO0NBQ3JCLENBQUM7QUEwQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBb0JFO0FBRUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQXFFM0IsNERBQTREO0FBQzVELE1BQU0sT0FBTyxZQUFZO0lBQXpCO1FBQ0UsaUJBQVksR0FBcUIsRUFBRSxDQUFDO1FBQ3BDLGtCQUFhLEdBQXNCLEVBQUUsQ0FBQyxDQUFFLDZEQUE2RDtRQUNyRyxXQUFNLEdBQWlCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQUE7QUF5QkQsK0VBQStFO0FBRS9FLDRFQUE0RTtBQUM1RSxrQ0FBa0M7QUFDbEMsTUFBTSxPQUFnQixXQUFXO0NBS2hDO0FBRUQsZ0RBQWdEO0FBQ2hELE1BQU0sT0FBTyxjQUFlLFNBQVEsV0FBVztJQUM3QyxJQUFJLElBQUk7UUFDTixPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsQ0FBQyxDQUFDLE1BQW9CLEVBQUUsQ0FBUztRQUMvQixPQUFPLE1B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OUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3ZELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN2RCxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDdkQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3ZELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN6RCxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxXQUFXLEVBQ3RELHVGQUF1RixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUMzRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxXQUFXLEVBQ3RELHVGQUF1RixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUMzRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsMENBQTBDLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQ3BILEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSwwQ0FBMEMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDcEgsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLHNEQUFzRCxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN2SSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsbURBQW1ELEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQ3BJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLHVEQUF1RCxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUM1SSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFDLFdBQVcsRUFBRSxnREFBZ0Q7UUFDbEgsT0FBTyxFQUFFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhO1FBQzlFLFlBQVk7UUFDWixZQUFZLEVBQUUsWUFBWSxFQUFDLENBQUM7Q0FDL0IsQ0FBQztBQUVGLG9IQUFvSDtBQUNwSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBa0I7SUFDaEQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUMxQyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxDQUFDO0lBQ3JGLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDekMsRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBQzlELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDM0MsRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBQzlELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDM0MsRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBQzlELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVU7UUFDekYsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDdEUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDdkYsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQzdFLGtEQUFrRCxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNGLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3RGLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxzQkFBc0I7SUFDakUsRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxxREFBcUQ7UUFDdEYsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxFQUFDLENBQUM7SUFDekUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQ3hELEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsaURBQWlELEVBQUUsWUFBWSxFQUFFLEtBQUs7UUFDdkcsWUFBWTtRQUNaLFlBQVksRUFBRSxxQkFBcUIsRUFBQyxDQUFDO0lBQ3pDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFFBQVE7UUFDekYsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNO1lBQ3pFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSztRQUN4RixZQUFZO1FBQ1osWUFBWSxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQzFCLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUztRQUNqRyxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNO1lBQ3BGLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSztRQUN4RixZQUFZO1FBQ1osWUFBWSxFQUFFLGdCQUFnQixFQUFDLENBQUM7SUFDbEMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsT0FBTztRQUN2RixPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDekUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUMsV0FBVyxFQUFFLCtDQUErQztRQUM1RyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUMsQ0FBQztJQUNoRCxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxXQUFXLEVBQUUsd0NBQXdDLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBQyxDQUFDO0NBQ3hILENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLENBQUM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxhQUFhLENBQUM7QUFFdEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFFbkMsTUFBTSxVQUFVLHNCQUFzQixDQUFDLGFBQStDO0lBQ3BGLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUTtRQUNuQyxPQUFPLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMxQyxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUM7UUFDaEQsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLE1BQU0sV0FBVyxHQUFHLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUMzRixHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQ3JHLFVBQVUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksRUFBRyxXQUEyRCxFQUM5RixpQkFBZ0UsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNqRixZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQzlCO0lBRUQsT0FBTyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQWdDLEVBQUUsV0FBd0IsRUFBRSxVQUE2QixFQUMvRyxlQUFrQztJQUNsQyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLElBQUksV0FBVyxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuRSxNQUFNLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzdELElBQUksaUJBQWlCLEdBQUcsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RSxJQUFJLGNBQWMsR0FBRyxJQUFJLFlBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxRCxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ25HLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztLQUNoRztJQUNELElBQUksZUFBZSxJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ25ELGlCQUFpQixHQUFHLElBQUksWUFBWSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUQsY0FBYyxHQUFHLElBQUksWUFBWSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRCxjQUFjLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFJLENBQUMsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsTUFBTSxZQUFZLEdBQUcsNkJBQTZCLENBQUMsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRTtRQUN4RixTQUFTLEVBQUUsb0JBQW9CLENBQUMsU0FBUztRQUN6QyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsUUFBUTtRQUN0QyxZQUFZLEVBQUUsb0JBQW9CLENBQUMsY0FBYztRQUNqRCxZQUFZLEVBQUUsb0JBQW9CLENBQUMsYUFBYTtRQUNoRCxlQUFlLEVBQUUsb0JBQW9CLENBQUMsZ0JBQWdCO1FBQ3RELGNBQWMsRUFBRSxvQkFBb0IsQ0FBQyxlQUFlO1FBQ3BELGdCQUFnQixFQUFFLG9CQUFvQixDQUFDLGlCQUFpQjtLQUN6RCxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVuQixXQUFXLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDOUMsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUUvRCxPQUFPO1FBQ0wsV0FBVyxFQUFFLFdBQVc7UUFDeEIsVUFBVSxFQUFFLFdBQVc7S0FDeEIsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLGFBQTBELEVBQUUsV0FBeUI7SUFFbEgsT0FBTyxDQUFDLENBQVMsRUFBRSxFQUFFO1FBQ25CLE9BQU8sYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLElBQWdDLEVBQUUsV0FBeUIsRUFDckcsYUFBMEQsRUFBRSxrQkFBMEIsSUFBSSxFQUFFLFVBQTZCO0lBRXpILE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsZUFBZSxHQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFL0QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtRQUN4QixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sS0FBSyxHQUFHLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUUsQ0FBQyxDQUFDO0lBRUYsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtRQUMzQixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sS0FBSyxHQUFHLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUUsQ0FBQyxDQUFDO0lBRUYsT0FBTyxFQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELCtDQUErQztBQUMvQyxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQWdDLEVBQUUsV0FBeUIsRUFDdkYsYUFBMEQsRUFBRSxhQUFzQixJQUFJO0lBQ3RGLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFL0QsT0FBTztRQUNMLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDakUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUN2RCxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUMxQixVQUFVLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNyQixHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNuQixNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztLQUN2QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxJQUFnQyxFQUFFLFdBQXFCLEVBQzFGLGtCQUEwQixJQUFJLEVBQUUsYUFBc0IsSUFBSTtJQUMxRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsZUFBZSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFakcsSUFBSSxHQUFHLEdBQTBCLENBQUMsQ0FBUyxFQUFFLEVBQUU7UUFDN0MsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFDRixJQUFJLE1BQU0sR0FBMEIsQ0FBQyxDQUFTLEVBQUUsRUFBRTtRQUNoRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUNGLElBQUksU0FBUyxHQUEwQixDQUFDLENBQVMsRUFBRSxFQUFFO1FBQ25ELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUYsSUFBSSxVQUFVLEVBQUU7UUFDZCxHQUFHLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtZQUNsQixvREFBb0Q7WUFDcEQsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEcsQ0FBQyxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVyQyxNQUFNLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtZQUNyQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsT0FBTyxLQUFLLEdBQUcsUUFBUSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDO1FBRUYsU0FBUyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7WUFDeEIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sS0FBSyxHQUFHLFFBQVEsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQztRQUVGLE9BQU87WUFDTCxRQUFRLEVBQUUsR0FBRztZQUNiLFdBQVcsRUFBRSxNQUFNO1lBQ25CLGNBQWMsRUFBRSxTQUFTO1NBQzFCLENBQUM7S0FDSDtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBb0IsRUFBRSxDQUFTO0lBQ3JELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxNQUFvQixFQUFFLENBQVM7SUFDcEQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQW9CLEVBQUUsQ0FBUztJQUN2RCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFvQixFQUFFLENBQVM7SUFDekQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxXQUFrQyxFQUFFLElBQWdDO0lBQ3pGLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNaLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUcsZUFBZTtRQUM1QyxHQUFHLElBQUksZUFBZSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUxQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLFdBQWtDLEVBQUUsSUFBZ0M7SUFDOUYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RCxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN6QztJQUVELE9BQU8sQ0FBQyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLFVBQWlDLEVBQUUsSUFBZ0M7SUFDdEYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLE1BQU0sZUFBZSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzlDO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO1FBQzdDLE9BQU8sSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFaEMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUM7SUFDbEMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFM0IsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxVQUF1RCxFQUMvRSxJQUFnQyxFQUFFLFVBQTZCO0lBQy9ELE9BQU8sQ0FBQyxNQUFvQixFQUFFLEVBQUU7UUFDOUIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVmLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7Z0JBQ3ZFLE1BQU0sSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFCLElBQUksVUFBVSxLQUFLLGFBQWEsQ0FBQyxZQUFZO2dCQUNoRCxNQUFNLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRCxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXBELElBQUksVUFBVSxLQUFLLGFBQWEsQ0FBQyxRQUFRO1lBQ3ZDLENBQUMsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLEdBQUcsOEJBQThCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU3RixNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckQsVUFBVSxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RjtRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxVQUF1RCxFQUN2RSxJQUFnQyxFQUFFLFVBQTZCLEVBQUUsTUFBb0I7SUFDckYsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRWYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUN2RSxNQUFNLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFCLElBQUksVUFBVSxLQUFLLGFBQWEsQ0FBQyxZQUFZO1lBQ2hELE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzNEO0lBQ0QsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXBELElBQUksVUFBVSxLQUFLLGFBQWEsQ0FBQyxRQUFRO1FBQ3ZDLENBQUMsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLEdBQUcsOEJBQThCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUU3RixPQUFPLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBQyxDQUFDO0FBQzFCLENBQUM7QUFFRCxTQUFTLDhCQUE4QixDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsZUFBeUIsRUFBRSxJQUFjO0lBRS9HLElBQUksa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUMxQyxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QixJQUFJLHVCQUF1QixHQUFHLENBQUMsQ0FBQztRQUNoQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE1BQU0sY0FBYyxHQUFHLE1BQU0sR0FBRyxVQUFVLENBQUM7UUFDM0MsTUFBTSxjQUFjLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO1FBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9DLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0UsdUJBQXVCLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuSDtRQUNELElBQUksdUJBQXVCLEdBQUcsa0JBQWtCLEVBQUU7WUFDaEQsa0JBQWtCLEdBQUcsdUJBQXVCLENBQUM7WUFDN0MsZUFBZSxHQUFHLFVBQVUsQ0FBQztTQUM5QjtLQUNGO0lBQ0QsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQztJQUN4QyxNQUFNLEdBQUcsTUFBTSxHQUFHLGVBQWUsQ0FBQztJQUVsQyxPQUFPLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBQyxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1tdWx0aS1zcGFjZXMgKi9cbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG4vL0B0cy1pZ25vcmU6IG5vIHR5cGVzXG5pbXBvcnQgKiBhcyBqU3RhdCBmcm9tICdqc3RhdCc7XG5pbXBvcnQge3BlcmZvcm1OZWxkZXJNZWFkT3B0aW1pemF0aW9ufSBmcm9tICcuL2ZpdHRpbmctYWxnb3JpdGhtL29wdGltaXplcic7XG5pbXBvcnQge05FTERFUl9NRUFEX0RFRkFVTFRTfSBmcm9tICcuL2ZpdHRpbmctYWxnb3JpdGhtL29wdGltaXplci1uZWxkZXItbWVhZCc7XG5cblxuZXhwb3J0IGNvbnN0IEZpdEVycm9yTW9kZWwgPSB7XG4gIENPTlNUQU5UOiAnY29uc3RhbnQnLFxuICBQUk9QT1JUSU9OQUw6ICdwcm9wb3J0aW9uYWwnLFxuICBDT01CSU5FRDogJ2NvbWJpbmVkJyxcbn07XG5cbmV4cG9ydCB0eXBlIEZpdFBhcmFtQm91bmRzID0ge1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbn07XG5cbi8qKiBGaXQgZnVuY3Rpb24gZGVzY3JpcHRpb24uIEFwcGxpZXMgdG8gY3VzdG9tIHVzZXIgZml0IGZ1bmN0aW9ucy5cbiAqIFJlcXVpcmVzIEpTIGFycm93IGZ1bmN0aW9ucyBmb3IgdGhlIGZpdCBmdW5jdGlvbnMgYW5kIGluaXRpYWwgcGFyYW1ldGVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdEZ1bmN0aW9uRGVzY3JpcHRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZ1bmN0aW9uOiBzdHJpbmc7XG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzOiBzdHJpbmc7XG4gIHBhcmFtZXRlck5hbWVzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IHR5cGUgRml0Q3VydmUgPSB7XG4gIGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIHBhcmFtZXRlcnM6IEZsb2F0MzJBcnJheTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMgPSB7XG4gIGNvbmZpZGVuY2VUb3A6ICh4OiBudW1iZXIpID0+IG51bWJlcjtcbiAgY29uZmlkZW5jZUJvdHRvbTogKHg6IG51bWJlcikgPT4gbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRml0U3RhdGlzdGljcyA9IHtcbiAgclNxdWFyZWQ/OiBudW1iZXIsXG4gIGF1Yz86IG51bWJlcixcbiAgaW50ZXJjZXB0WD86IG51bWJlciwgLy8gcGFyYW1ldGVyc1syXVxuICBpbnRlcmNlcHRZPzogbnVtYmVyLCAvLyBmaXR0ZWRDdXJ2ZVtwYXJhbWV0ZXJzWzJdXVxuICBzbG9wZT86IG51bWJlciwgLy8gcGFyYW1ldGVyc1sxXVxuICB0b3A/OiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbMF1cbiAgYm90dG9tPzogbnVtYmVyLCAvLyBwYXJhbWV0ZXJzWzNdXG59O1xuXG5leHBvcnQgdHlwZSBGaXRJbnZlcnRlZEZ1bmN0aW9ucyA9IHtcbiAgaW52ZXJ0ZWQ6ICh5OiBudW1iZXIpID0+IG51bWJlcixcbiAgaW52ZXJ0ZWRUb3A6ICh5OiBudW1iZXIpID0+IG51bWJlcixcbiAgaW52ZXJ0ZWRCb3R0b206ICh5OiBudW1iZXIpID0+IG51bWJlcixcbn07XG5cbi8qKlxuICogIERhdGFncm9rIGN1cnZlIGZpdHRpbmdcbiAqXG4gKiAtIEZpdHRpbmc6IGNvbXB1dGluZyBwYXJhbWV0ZXJzIG9mIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gdG8gYmVzdCBmaXQgdGhlIGRhdGFcbiAqICAgLSBVc2VzIEJGR1Mgb3B0aW1pemF0aW9uIGFsZ29yaXRobSAobXVsdGktdGhyZWFkaW5nIGZvciBwZXJmb3JtYW5jZSkuXG4gKiAgICAgRm9yIGRvc2UtcmVzcG9uc2UgY3VydmVzLCB3ZSBhcmUgdHlwaWNhbGx5IGZpdHRpbmcgdGhlIHNpZ21vaWQgZnVuY3Rpb25cbiAqICAgLSBBYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlZ2lzdGVyIGN1c3RvbSBmaXR0aW5nIGZ1bmN0aW9uc1xuICogICAgIC0gQXV0b21hdGljIGZpdCBmdW5jdGlvbiBkZXRlcm1pbmF0aW9uXG4gKiAgICAgLSBDYWNoaW5nIG9mIGN1c3RvbSBmaXR0aW5nIGZ1bmN0aW9uc1xuICogICAtIEFiaWxpdHkgdG8gZ2V0IGZpdHRpbmcgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIChyLXNxdWFyZWQsIGNsYXNzaWZpY2F0aW9uLCBldGMpXG4gKiAtIERlZXAgaW50ZWdyYXRpb24gd2l0aCB0aGUgRGF0YWdyb2sgZ3JpZFxuICogICAtIEVpdGhlciBmaXR0aW5nIG9uIHRoZSBmbHksIG9yIHVzaW5nIHRoZSBzdXBwbGllZCBmdW5jdGlvbiArIHBhcmFtZXRlcnNcbiAqICAgLSBNdWx0aXBsZSBzZXJpZXMgaW4gb25lIGNlbGxcbiAqICAgLSBDYW5kbGVzdGlja3MsIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLCBhbmQgZHJvcGxpbmVzIGRyYXdpbmdcbiAqICAgLSBBYmlsaXR5IHRvIGRlZmluZSBjaGFydCwgbWFya2VyLCBvciBmaXR0aW5nIG9wdGlvbnMgKHN1Y2ggYXMgZml0IGZ1bmN0aW9uIG9yIG1hcmtlciBjb2xvcilcbiAqICAgICBvbiB0aGUgY29sdW1uIGxldmVsLCB3aXRoIHRoZSBhYmlsaXR5IHRvIG92ZXJyaWRlIGl0IG9uIGEgZ3JpZCBjZWxsIG9yIHBvaW50IGxldmVsXG4gKiAgIC0gQ2xpY2tpbmcgYSBwb2ludCBpbiBhIGNoYXJ0IHdpdGhpbiBhIGdyaWQgbWFrZXMgaXQgYW4gb3V0bGllciAtPiBjdXJ2ZSBpcyByZS1maXR0ZWQgb24gdGhlIGZseVxuICogICAtIEFiaWxpdHkgdG8gc3BlY2lmeSBhIGNoYXJ0IGFzIFwicmVmZXJlbmNlXCIgc28gdGhhdCBpdCBpcyBzaG93biBvbiBldmVyeSBvdGhlciBjaGFydCBmb3IgY29tcGFyaXNvblxuICogLSBBYmlsaXR5IHRvIG92ZXJsYXkgY3VydmVzIGZyb20gbXVsdGlwbGUgZ3JpZCBjZWxscyAoc3BlY2lhbCB2aWV3ZXIpXG4gKiAtIFdvcmsgd2l0aCBzZXJpZXMgc3RvcmVkIGluIG11bHRpcGxlIGZvcm1hdHMgKGJpbmFyeSBmb3IgcGVyZm9ybWFuY2UsIGpzb24gZm9yIGZsZXhpYmlsaXR5LCBldGMpXG4qL1xuXG5jb25zdCBEUk9QTElORVMgPSBbJ0lDNTAnXTtcblxuZXhwb3J0IHR5cGUgRml0TWFya2VyVHlwZSA9ICdhc3RlcmlzaycgfCAnY2lyY2xlJyB8ICdjcm9zcyBib3JkZXInIHwgJ2RpYW1vbmQnIHwgJ3NxdWFyZScgfCAnc3RhcicgfCAndHJpYW5nbGUgYm90dG9tJyB8XG4gICd0cmlhbmdsZSBsZWZ0JyB8ICd0cmlhbmdsZSByaWdodCcgfCAndHJpYW5nbGUgdG9wJztcblxuZXhwb3J0IHR5cGUgRml0T3V0bGllck1hcmtlclR5cGUgPSAnYXN0ZXJpc2snIHwgJ2NpcmNsZScgfCAnY3Jvc3MgYm9yZGVyJyB8ICdkaWFtb25kJyB8ICdvdXRsaWVyJyB8ICdzcXVhcmUnIHwgJ3N0YXInIHxcbiAgJ3RyaWFuZ2xlIGJvdHRvbScgfCAndHJpYW5nbGUgbGVmdCcgfCAndHJpYW5nbGUgcmlnaHQnIHwgJ3RyaWFuZ2xlIHRvcCc7XG5cbmV4cG9ydCB0eXBlIEZpdExpbmVTdHlsZSA9ICdzb2xpZCcgfCAnZG90dGVkJyB8ICdkYXNoZWQnIHwgJ2Rhc2hkb3R0ZWQnO1xuXG5leHBvcnQgdHlwZSBGaXRFcnJvck1vZGVsVHlwZSA9ICdjb25zdGFudCcgfCAncHJvcG9ydGlvbmFsJyB8ICdjb21iaW5lZCc7XG5cbi8qKiBBIHBvaW50IGluIHRoZSBmaXQgc2VyaWVzLiBPbmx5IHggYW5kIHkgYXJlIHJlcXVpcmVkLiBDYW4gb3ZlcnJpZGUgc29tZSBmaWVsZHMgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFBvaW50IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIG91dGxpZXI/OiBib29sZWFuOyAgICAgICAvLyBpZiB0cnVlLCByZW5kZXJzIGFzICd4JyBhbmQgZ2V0cyBpZ25vcmVkIGZvciBjdXJ2ZSBmaXR0aW5nXG4gIGNvbG9yPzogc3RyaW5nOyAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIG1hcmtlciBjb2xvciBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zXG4gIG91dGxpZXJDb2xvcj86IHN0cmluZzsgICAvLyBvdmVycmlkZXMgdGhlIG91dGxpZXIgY29sb3IgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9uc1xuICBtYXJrZXI/OiBGaXRNYXJrZXJUeXBlOyAgLy8gb3ZlcnJpZGVzIHRoZSBtYXJrZXIgdHlwZSBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zXG4gIG91dGxpZXJNYXJrZXI/OiBGaXRPdXRsaWVyTWFya2VyVHlwZTsgLy8gb3ZlcnJpZGVzIHRoZSBvdXRsaWVyIG1hcmtlciB0eXBlIGRlZmluZWQgaW4gSUZpdFNlcmllc09wdGlvbnNcbiAgc2l6ZT86IG51bWJlcjsgICAgICAgICAgIC8vIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBtYXJrZXIgc2l6ZVxuICBzdGRldj86IG51bWJlcjsgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCByZW5kZXJzIGFuIGVycm9yIGJhciBjYW5kbGVzdGlja1xuICAvLyBtaW5ZPzogbnVtYmVyOyAgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCB0aGUgbWFya2VyIHJlbmRlcnMgYXMgYSBjYW5kbGVzdGljayB3aXRoIHdoaXNrZXJzIFttaW5ZLCBtYXhZXVxuICAvLyBtYXhZPzogbnVtYmVyOyAgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCB0aGUgbWFya2VyIHJlbmRlcnMgYXMgYSBjYW5kbGVzdGljayB3aXRoIHdoaXNrZXJzIFttaW5ZLCBtYXhZXVxufVxuXG4vKiogQSBzZXJpZXMgY29uc2lzdHMgb2YgcG9pbnRzLCBoYXMgYSBuYW1lLCBhbmQgb3B0aW9ucy5cbiAqIElmIGRlZmluZWQsIHNlcmllc09wdGlvbnMgYXJlIG1lcmdlZCB3aXRoIHtAbGluayBJRml0Q2hhcnREYXRhLnNlcmllc09wdGlvbnN9ICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRTZXJpZXMgZXh0ZW5kcyBJRml0U2VyaWVzT3B0aW9ucyB7XG4gIHBvaW50czogSUZpdFBvaW50W107XG59XG5cbi8qKiBDaGFydCBsYWJlbHMgb3B0aW9ucy4gQ29udHJvbHMgdGhlIGNoYXJ0IGxhYmVscy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdENoYXJ0TGFiZWxPcHRpb25zIHtcbiAgdmlzaWJsZTogYm9vbGVhbjsgICAgICAgICAvLyBpZiB0cnVlLCByZW5kZXJzIHRoZSBsYWJlbCBvbiB0aGUgcGxvdFxuICBjb2xvcjogc3RyaW5nOyAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGxhYmVsIGNvbG9yXG4gIG5hbWU6IHN0cmluZzsgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgbGFiZWwgbmFtZVxufVxuXG4vKiogQ2hhcnQgb3B0aW9ucy4gRm9yIGZpdHRlZCBjdXJ2ZXMsIHRoaXMgb2JqZWN0IGlzIHN0b3JlZCBpbiB0aGUgZ3JpZCBjb2x1bW4gdGFncyBhbmQgaXMgdXNlZCBieSB0aGUgcmVuZGVyZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRDaGFydE9wdGlvbnMge1xuICBtaW5YPzogbnVtYmVyO1xuICBtaW5ZPzogbnVtYmVyO1xuICBtYXhYPzogbnVtYmVyO1xuICBtYXhZPzogbnVtYmVyO1xuXG4gIHRpdGxlPzogc3RyaW5nOyAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIHBsb3QgdGl0bGUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cbiAgeEF4aXNOYW1lPzogc3RyaW5nOyAgICAgICAgLy8gZGVmaW5lcyB0aGUgeCBheGlzIG5hbWUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cbiAgeUF4aXNOYW1lPzogc3RyaW5nOyAgICAgICAgLy8gZGVmaW5lcyB0aGUgWSBheGlzIG5hbWUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cblxuICBsb2dYPzogYm9vbGVhbjsgICAgICAgICAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdGhlIHggZGF0YSBzaG91bGQgYmUgbG9nYXJpdGhtaWMgb3Igbm90XG4gIGxvZ1k/OiBib29sZWFuOyAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0aGUgeSBkYXRhIHNob3VsZCBiZSBsb2dhcml0aG1pYyBvciBub3RcblxuICBhbGxvd1haZXJvZXM/OiBib29sZWFuOyAgICAvLyBkZWZpbmVzIHdoZXRoZXIgeCB6ZXJvZXMgYWxsb3dlZCBmb3IgbG9nYXJpdGhtaWMgZGF0YSBvciBub3RcbiAgbWVyZ2VTZXJpZXM/OiBib29sZWFuOyAgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRvIG1lcmdlIHNlcmllcyBvciBub3RcblxuICBzaG93Q29sdW1uTGFiZWw/OiBib29sZWFuOyAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgY29sdW1uIGxhYmVsIGluIHRoZSBsZWdlbmQgb3Igbm90XG4gIHNob3dTdGF0aXN0aWNzPzogc3RyaW5nW107IC8vIGRlZmluZXMgdGhlIHN0YXRpc3RpY3MgdGhhdCB3b3VsZCBiZSBzaG93biBvbiB0aGUgcGxvdFxuICBsYWJlbE9wdGlvbnM/OiBJRml0Q2hhcnRMYWJlbE9wdGlvbnNbXTsgLy8gY29udHJvbHMgdGhlIHBsb3QgbGFiZWxzXG59XG5cbi8qKiBEYXRhIGZvciB0aGUgZml0IGNoYXJ0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0Q2hhcnREYXRhIHtcbiAgY2hhcnRPcHRpb25zPzogSUZpdENoYXJ0T3B0aW9ucztcbiAgc2VyaWVzT3B0aW9ucz86IElGaXRTZXJpZXNPcHRpb25zOyAgLy8gRGVmYXVsdCBzZXJpZXMgb3B0aW9ucy4gSW5kaXZpZHVhbCBzZXJpZXMgY2FuIG92ZXJyaWRlIGl0LlxuICBzZXJpZXM/OiBJRml0U2VyaWVzW107XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIElGaXRDaGFydERhdGF9IGludGVyZmFjZSAqL1xuZXhwb3J0IGNsYXNzIEZpdENoYXJ0RGF0YSBpbXBsZW1lbnRzIElGaXRDaGFydERhdGEge1xuICBjaGFydE9wdGlvbnM6IElGaXRDaGFydE9wdGlvbnMgPSB7fTtcbiAgc2VyaWVzT3B0aW9uczogSUZpdFNlcmllc09wdGlvbnMgPSB7fTsgIC8vIERlZmF1bHQgc2VyaWVzIG9wdGlvbnMuIEluZGl2aWR1YWwgc2VyaWVzIGNhbiBvdmVycmlkZSBpdC5cbiAgc2VyaWVzOiBJRml0U2VyaWVzW10gPSBbXTtcbn1cblxuLyoqIFNlcmllcyBvcHRpb25zIGNhbiBiZSBlaXRoZXIgYXBwbGllZCBnbG9iYWxseSBvbiBhIGNvbHVtbiBsZXZlbCwgb3IgcGFydGlhbGx5IG92ZXJyaWRkZW4gaW4gcGFydGljdWxhciBzZXJpZXMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFNlcmllc09wdGlvbnMge1xuICBuYW1lPzogc3RyaW5nOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgbmFtZVxuICBmaXRGdW5jdGlvbj86IHN0cmluZyB8IElGaXRGdW5jdGlvbkRlc2NyaXB0aW9uOyAvLyBjb250cm9scyB0aGUgc2VyaWVzIGZpdCBmdW5jdGlvblxuICBwYXJhbWV0ZXJzPzogbnVtYmVyW107ICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgcGFyYW1ldGVycywgYXV0by1maXR0aW5nIHdoZW4gbm90IGRlZmluZWRcbiAgcGFyYW1ldGVyQm91bmRzPzogRml0UGFyYW1Cb3VuZHNbXTsgICAvLyBkZWZpbmVzIHRoZSBhY2NlcHRhYmxlIHJhbmdlIG9mIGVhY2ggcGFyYW1ldGVyLCB3aGljaCBpcyB0YWtlbiBpbnRvIGFjY291bnQgZHVyaW5nIHRoZSBmaXR0aW5nLiBTZWUgYWxzbyBgcGFyYW1ldGVyc2AuXG4gIG1hcmtlclR5cGU/OiBGaXRNYXJrZXJUeXBlOyAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIG1hcmtlciB0eXBlXG4gIG91dGxpZXJNYXJrZXJUeXBlPzogRml0T3V0bGllck1hcmtlclR5cGU7ICAvLyBkZWZpbmVzIHRoZSBzZXJpZXMgb3V0bGllciBtYXJrZXIgdHlwZVxuICBsaW5lU3R5bGU/OiBGaXRMaW5lU3R5bGU7ICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIHNlcmllcyBsaW5lIHN0eWxlXG4gIHBvaW50Q29sb3I/OiBzdHJpbmc7ICAgICAgICAgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIHBvaW50IGNvbG9yXG4gIGZpdExpbmVDb2xvcj86IHN0cmluZzsgICAgICAgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIGZpdCBsaW5lIGNvbG9yXG4gIGNvbmZpZGVuY2VJbnRlcnZhbENvbG9yPzogc3RyaW5nOyAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIGNvbmZpZGVuY2UgaW50ZXJ2YWwgY29sb3JcbiAgb3V0bGllckNvbG9yPzogc3RyaW5nOyAgICAgICAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgb3V0bGllciBjb2xvclxuICBjb25uZWN0RG90cz86IGJvb2xlYW47ICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0byBjb25uZWN0IHRoZSBwb2ludHMgd2l0aCBsaW5lcyBvciBub3QuIElmIHRydWUgYW5kIHNob3dGaXRMaW5lIGlzIGZhbHNlIC0gZml0dGluZyBpcyBkaXNhYmxlZCAtIG90aGVyd2lzZSwgaXQgd2lsbCBiZSByZW5kZXJlZCBhY2NvcmRpbmdseSB0byB0aGUgcGFyYW1ldGVyIHZhbHVlLlxuICBzaG93Rml0TGluZT86IGJvb2xlYW47ICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0byBzaG93IHRoZSBmaXQgbGluZSBvciBub3RcbiAgc2hvd1BvaW50cz86IHN0cmluZzsgICAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBkYXRhIGRpc3BsYXkgbW9kZVxuICBzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWw/OiBib29sZWFuOyAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbHMgb3Igbm90XG4gIGVycm9yTW9kZWw/OiBGaXRFcnJvck1vZGVsVHlwZTsgICAgICAgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIGVycm9yIG1vZGVsXG4gIGNsaWNrVG9Ub2dnbGU/OiBib29sZWFuOyAgICAvLyBpZiB0cnVlLCBjbGlja2luZyBvbiB0aGUgcG9pbnQgdG9nZ2xlcyBpdHMgb3V0bGllciBzdGF0dXMgYW5kIGNhdXNlcyBjdXJ2ZSByZWZpdHRpbmdcbiAgbGFiZWxzPzoge1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW59OyAvLyBjb250cm9sbGVkIGJ5IElGaXRDaGFydERhdGEgbGFiZWxPcHRpb25zLCBzaG93cyBsYWJlbHNcbiAgZHJvcGxpbmVzPzogc3RyaW5nW107ICAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBkcm9wbGluZXMgdGhhdCB3b3VsZCBiZSBzaG93biBvbiB0aGUgcGxvdCAoSUM1MClcbiAgY29sdW1uTmFtZT86IHN0cmluZzsgICAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBjb2x1bW4gbmFtZSB3aGVyZSB0aGUgc2VyaWVzIGlzIHN0b3JlZFxufVxuLy8gVE9ETzogc2hvdyBsYWJlbHMgaW4gcHJvcGVydHkgcGFuZWwgaWYgcHJlc2VudCwgY29sb3IgYnkgZGVmYXVsdCBmcm9tIHNlcmllc1xuXG4vLyBUT0RPPzogYWRkIG1ldGhvZCB0byByZXR1cm4gcGFyYW1ldGVycyAtIGdldCBwYXJhbWV0ZXJzIGZyb20gZml0IGZ1bmN0aW9uXG4vKiogQ2xhc3MgZm9yIHRoZSBmaXQgZnVuY3Rpb25zICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRml0RnVuY3Rpb24ge1xuICBhYnN0cmFjdCBnZXQgbmFtZSgpOiBzdHJpbmc7XG4gIGFic3RyYWN0IGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXTtcbiAgYWJzdHJhY3QgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyO1xuICBhYnN0cmFjdCBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBGbG9hdDMyQXJyYXk7XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIGxpbmVhciBmdW5jdGlvbiAqL1xuZXhwb3J0IGNsYXNzIExpbmVhckZ1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb24ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fTElORUFSO1xuICB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydTbG9wZScsICdJbnRlcmNlcHQnXTtcbiAgfVxuXG4gIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGxpbmVhcihwYXJhbXMsIHgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICBsZXQgbWluSW5kZXggPSAwO1xuICAgIGxldCBtYXhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeFtpXSA8IHhbbWluSW5kZXhdKVxuICAgICAgICBtaW5JbmRleCA9IGk7XG4gICAgICBpZiAoeFtpXSA+IHhbbWF4SW5kZXhdKVxuICAgICAgICBtYXhJbmRleCA9IGk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFYID0geFttYXhJbmRleF0gLSB4W21pbkluZGV4XTtcbiAgICBjb25zdCBkZWx0YVkgPSB5W21heEluZGV4XSAtIHlbbWluSW5kZXhdO1xuICAgIGNvbnN0IEEgPSBkZWx0YVkgLyBkZWx0YVg7XG4gICAgY29uc3QgQiA9IHlbbWF4SW5kZXhdIC0gQSAqIHhbbWF4SW5kZXhdO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoMik7XG4gICAgcGFyYW1zLnNldChbQSwgQl0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgc2lnbW9pZCBmdW5jdGlvbiAqL1xuZXhwb3J0IGNsYXNzIFNpZ21vaWRGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OX1NJR01PSUQ7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1RvcCcsICdCb3R0b20nLCAnU2xvcGUnLCAnSUM1MCddO1xuICB9XG5cbiAgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc2lnbW9pZChwYXJhbXMsIHgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICBjb25zdCBkYXRhQm91bmRzID0gREcuUmVjdC5mcm9tWFlBcnJheXMoeCwgeSk7XG4gICAgY29uc3QgbWVkWSA9IChkYXRhQm91bmRzLmJvdHRvbSAtIGRhdGFCb3VuZHMudG9wKSAvIDIgKyBkYXRhQm91bmRzLnRvcDtcbiAgICBsZXQgbWF4WUludGVydmFsID0gZGF0YUJvdW5kcy5ib3R0b20gLSBkYXRhQm91bmRzLnRvcDtcbiAgICBsZXQgbmVhcmVzdFhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW50ZXJ2YWwgPSBNYXRoLmFicyh5W2ldIC0gbWVkWSk7XG4gICAgICBpZiAoY3VycmVudEludGVydmFsIDwgbWF4WUludGVydmFsKSB7XG4gICAgICAgIG1heFlJbnRlcnZhbCA9IGN1cnJlbnRJbnRlcnZhbDtcbiAgICAgICAgbmVhcmVzdFhJbmRleCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHhBdE1lZFkgPSB4W25lYXJlc3RYSW5kZXhdO1xuICAgIGNvbnN0IHNsb3BlID0geVswXSA+IHlbeS5sZW5ndGggLSAxXSA/IDEgOiAtMTtcblxuICAgIC8vIHBhcmFtcyBhcmU6IFttYXgsIHRhbiwgSUM1MCwgbWluXVxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoNCk7XG4gICAgcGFyYW1zLnNldChbZGF0YUJvdW5kcy5ib3R0b20sIHNsb3BlLCB4QXRNZWRZLCBkYXRhQm91bmRzLnRvcF0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgbGluZWFyIGxvZ2FyaXRobWljIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTG9nTGluZWFyRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9MT0dfTElORUFSO1xuICB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydTbG9wZScsICdJbnRlcmNlcHQnXTtcbiAgfVxuXG4gIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGxvZ0xpbmVhcihwYXJhbXMsIHgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgRmxvYXQzMkFycmF5KDIpO1xuICAgIHBhcmFtcy5zZXQoWy01LCAxMDBdKTtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIGV4cG9uZW50aWFsIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgRXhwb25lbnRpYWxGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OX0VYUE9ORU5USUFMO1xuICB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydNYW50aXNzYScsICdQb3dlciddO1xuICB9XG5cbiAgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZXhwb25lbnRpYWwocGFyYW1zLCB4KTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IEZsb2F0MzJBcnJheSB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEZsb2F0MzJBcnJheSgyKTtcbiAgICBwYXJhbXMuc2V0KFsxMDAsIC0yXSk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHVzZXIgSlMgZnVuY3Rpb25zICovXG5leHBvcnQgY2xhc3MgSnNGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9wYXJhbWV0ZXJOYW1lczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCB5RnVuYzogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgICBnZXRJbml0UGFyYW1zRnVuYzogKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSkgPT4gRmxvYXQzMkFycmF5LCBwYXJhbWV0ZXJOYW1lczogc3RyaW5nW10pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgdGhpcy5fcGFyYW1ldGVyTmFtZXMgPSBwYXJhbWV0ZXJOYW1lcztcblxuICAgIHRoaXMueSA9IHlGdW5jO1xuICAgIHRoaXMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMgPSBnZXRJbml0UGFyYW1zRnVuYztcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbWV0ZXJOYW1lcztcbiAgfVxuXG4gIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IEZsb2F0MzJBcnJheSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG4vLyBPYmplY3Qgd2l0aCBmaXQgZnVuY3Rpb25zXG5leHBvcnQgY29uc3QgZml0RnVuY3Rpb25zOiB7W2luZGV4OiBzdHJpbmddOiBGaXRGdW5jdGlvbn0gPSB7XG4gICdsaW5lYXInOiBuZXcgTGluZWFyRnVuY3Rpb24oKSxcbiAgJ3NpZ21vaWQnOiBuZXcgU2lnbW9pZEZ1bmN0aW9uKCksXG4gICdsb2ctbGluZWFyJzogbmV3IExvZ0xpbmVhckZ1bmN0aW9uKCksXG4gICdleHBvbmVudGlhbCc6IG5ldyBFeHBvbmVudGlhbEZ1bmN0aW9uKCksXG59O1xuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBGaXRTdGF0aXN0aWNzfS4gVXNlZnVsIGZvciBlZGl0aW5nLCBpbml0aWFsaXphdGlvbiwgdHJhbnNmb3JtYXRpb25zLCBldGMuICovXG5leHBvcnQgY29uc3Qgc3RhdGlzdGljc1Byb3BlcnRpZXM6IERHLlByb3BlcnR5W10gPSBbXG4gIERHLlByb3BlcnR5LmpzKCdyU3F1YXJlZCcsIERHLlRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdhdWMnLCBERy5UWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnaW50ZXJjZXB0WScsIERHLlRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdpbnRlcmNlcHRYJywgREcuVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nsb3BlJywgREcuVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ3RvcCcsIERHLlRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdib3R0b20nLCBERy5UWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuXTtcblxuLyoqIFByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSB7QGxpbmsgSUZpdENoYXJ0T3B0aW9uc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IGZpdENoYXJ0RGF0YVByb3BlcnRpZXM6IERHLlByb3BlcnR5W10gPSBbXG4gIC8vIFN0eWxlIGFuZCB6b29tXG4gIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSB0b29sdGlwc1xuICBERy5Qcm9wZXJ0eS5qcygnbWluWCcsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWluWScsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWF4WCcsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWF4WScsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygndGl0bGUnLCBERy5UWVBFLlNUUklORywge251bGxhYmxlOiB0cnVlfSksXG4gIERHLlByb3BlcnR5LmpzKCd4QXhpc05hbWUnLCBERy5UWVBFLlNUUklORywge2Rlc2NyaXB0aW9uOlxuICAgICdMYWJlbCB0byBzaG93IG9uIHRoZSBYIGF4aXMuIElmIG5vdCBzcGVjaWZpZWQsIGNvcnJlc3BvbmRpbmcgZGF0YSBjb2x1bW4gbmFtZSBpcyB1c2VkJywgbnVsbGFibGU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ3lBeGlzTmFtZScsIERHLlRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246XG4gICAgJ0xhYmVsIHRvIHNob3cgb24gdGhlIFkgYXhpcy4gSWYgbm90IHNwZWNpZmllZCwgY29ycmVzcG9uZGluZyBkYXRhIGNvbHVtbiBuYW1lIGlzIHVzZWQnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbG9nWCcsIERHLlRZUEUuQk9PTCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciB0aGUgWCBheGlzIHNob3VsZCBiZSBsb2dhcml0aG1pYycsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2xvZ1knLCBERy5UWVBFLkJPT0wsIHtkZXNjcmlwdGlvbjogJ1doZXRoZXIgdGhlIFkgYXhpcyBzaG91bGQgYmUgbG9nYXJpdGhtaWMnLCBkZWZhdWx0VmFsdWU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdhbGxvd1haZXJvZXMnLCBERy5UWVBFLkJPT0wsIHtkZXNjcmlwdGlvbjogJ1doZXRoZXIgeCB6ZXJvZXMgYWxsb3dlZCBmb3IgbG9nYXJpdGhtaWMgZGF0YSBvciBub3QnLCBkZWZhdWx0VmFsdWU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ21lcmdlU2VyaWVzJywgREcuVFlQRS5CT09MLCB7ZGVzY3JpcHRpb246ICdNZXJnZXMgYWxsIHNlcmllcyB3aXRoaW4gb25lIGNlbGwgaW50byBvbmUgc2VyaWVzJywgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnc2hvd0NvbHVtbkxhYmVsJywgREcuVFlQRS5CT09MLCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIHNob3cgdGhlIGNvbHVtbiBsYWJlbCBpbiB0aGUgbGVnZW5kIG9yIG5vdCcsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nob3dTdGF0aXN0aWNzJywgREcuVFlQRS5TVFJJTkdfTElTVCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciBzcGVjaWZpYyBzdGF0aXN0aWNzIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgY2hvaWNlczogc3RhdGlzdGljc1Byb3BlcnRpZXMubWFwKChmcnApID0+IGZycC5uYW1lKSwgaW5wdXRUeXBlOiAnTXVsdGlDaG9pY2UnLFxuICAgIC8vQHRzLWlnbm9yZVxuICAgIGZyaWVuZGx5TmFtZTogJ1N0YXRpc3RpY3MnfSksXG5dO1xuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBJRml0U2VyaWVzT3B0aW9uc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IGZpdFNlcmllc1Byb3BlcnRpZXM6IERHLlByb3BlcnR5W10gPSBbXG4gIERHLlByb3BlcnR5LmpzKCdmaXRGdW5jdGlvbicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBjaG9pY2VzOiBPYmplY3Qua2V5cyhmaXRGdW5jdGlvbnMpLCBkZWZhdWx0VmFsdWU6ICdzaWdtb2lkJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygncG9pbnRDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ2ZpdExpbmVDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ291dGxpZXJDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ2Vycm9yTW9kZWwnLCBERy5UWVBFLlNUUklORywge2NhdGVnb3J5OiAnRml0dGluZycsIGRlZmF1bHRWYWx1ZTogJ2NvbnN0YW50JyxcbiAgICBjaG9pY2VzOiBbJ2NvbnN0YW50JywgJ3Byb3BvcnRpb25hbCcsICdjb21iaW5lZCddLCBudWxsYWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2Nvbm5lY3REb3RzJywgREcuVFlQRS5CT09MLCB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnY2xpY2tUb1RvZ2dsZScsIERHLlRZUEUuQk9PTCwge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOlxuICAgICdDbGljayBvbiBhIHBvaW50IHRvIG1hcmsgaXQgYXMgb3V0bGllciBhbmQgcmVmaXQnLCBudWxsYWJsZTogdHJ1ZSwgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnc2hvd0ZpdExpbmUnLCBERy5UWVBFLkJPT0wsIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZWZhdWx0VmFsdWU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nob3dQb2ludHMnLCBERy5UWVBFLlNUUklORywgLy8gcmV3cml0ZSBkZXNjcmlwdGlvblxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZXNjcmlwdGlvbjogJ1doZXRoZXIgcG9pbnRzL2NhbmRsZXN0aWNrcy9ub25lIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgICBkZWZhdWx0VmFsdWU6ICdwb2ludHMnLCBjaG9pY2VzOiBbJ3BvaW50cycsICdjYW5kbGVzdGlja3MnLCAnYm90aCddfSksXG4gIERHLlByb3BlcnR5LmpzKCdzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWwnLCBERy5UWVBFLkJPT0wsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOiAnV2hldGhlciBjb25maWRlbmNlIGludGVydmFscyBzaG91bGQgYmUgcmVuZGVyZWQnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICBmcmllbmRseU5hbWU6ICdDb25maWRlbmNlIEludGVydmFsJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWFya2VyVHlwZScsIERHLlRZUEUuU1RSSU5HLCB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBkZWZhdWx0VmFsdWU6ICdjaXJjbGUnLFxuICAgIGNob2ljZXM6IFsnYXN0ZXJpc2snLCAnY2lyY2xlJywgJ2Nyb3NzIGJvcmRlcicsICdkaWFtb25kJywgJ3NxdWFyZScsICdzdGFyJyxcbiAgICAgICd0cmlhbmdsZSBib3R0b20nLCAndHJpYW5nbGUgbGVmdCcsICd0cmlhbmdsZSByaWdodCcsICd0cmlhbmdsZSB0b3AnXSwgbnVsbGFibGU6IGZhbHNlLFxuICAgIC8vQHRzLWlnbm9yZVxuICAgIGZyaWVuZGx5TmFtZTogJ01hcmtlcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ291dGxpZXJNYXJrZXJUeXBlJywgREcuVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIGRlZmF1bHRWYWx1ZTogJ291dGxpZXInLFxuICAgIGNob2ljZXM6IFsnYXN0ZXJpc2snLCAnY2lyY2xlJywgJ2Nyb3NzIGJvcmRlcicsICdkaWFtb25kJywgJ291dGxpZXInLCAnc3F1YXJlJywgJ3N0YXInLFxuICAgICAgJ3RyaWFuZ2xlIGJvdHRvbScsICd0cmlhbmdsZSBsZWZ0JywgJ3RyaWFuZ2xlIHJpZ2h0JywgJ3RyaWFuZ2xlIHRvcCddLCBudWxsYWJsZTogZmFsc2UsXG4gICAgLy9AdHMtaWdub3JlXG4gICAgZnJpZW5kbHlOYW1lOiAnT3V0bGllciBNYXJrZXInfSksXG4gIERHLlByb3BlcnR5LmpzKCdsaW5lU3R5bGUnLCBERy5UWVBFLlNUUklORywge2NhdGVnb3J5OiAnUmVuZGVyaW5nJywgZGVmYXVsdFZhbHVlOiAnc29saWQnLFxuICAgIGNob2ljZXM6IFsnc29saWQnLCAnZG90dGVkJywgJ2Rhc2hlZCcsICdkYXNoZG90dGVkJ10sIG51bGxhYmxlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnZHJvcGxpbmVzJywgREcuVFlQRS5TVFJJTkdfTElTVCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciBzcGVjaWZpYyBkcm9wbGluZXMgc2hvdWxkIGJlIHJlbmRlcmVkJyxcbiAgICBjaG9pY2VzOiBEUk9QTElORVMsIGlucHV0VHlwZTogJ011bHRpQ2hvaWNlJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygnY29sdW1uTmFtZScsIERHLlRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246ICdDb2x1bW4gbmFtZSB3aGVyZSB0aGUgc2VyaWVzIGlzIHN0b3JlZCcsIGRlZmF1bHRWYWx1ZTogJyd9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBGSVRfRlVOQ1RJT05fU0lHTU9JRCA9ICdzaWdtb2lkJztcbmV4cG9ydCBjb25zdCBGSVRfRlVOQ1RJT05fTElORUFSID0gJ2xpbmVhcic7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0xPR19MSU5FQVIgPSAnbG9nLWxpbmVhcic7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0VYUE9ORU5USUFMID0gJ2V4cG9uZW50aWFsJztcblxuZXhwb3J0IGNvbnN0IEZJVF9TVEFUU19SU1FVQVJFRCA9ICdyU3F1YXJlZCc7XG5leHBvcnQgY29uc3QgRklUX1NUQVRTX0FVQyA9ICdhdWMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbihzZXJpZXNGaXRGdW5jOiBzdHJpbmcgfCBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbik6IEZpdEZ1bmN0aW9uIHtcbiAgaWYgKHR5cGVvZiBzZXJpZXNGaXRGdW5jID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmNdO1xuICBlbHNlIGlmICghZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmMubmFtZV0pIHtcbiAgICBjb25zdCBuYW1lID0gc2VyaWVzRml0RnVuYy5uYW1lO1xuICAgIGNvbnN0IHBhcmFtTmFtZXMgPSBzZXJpZXNGaXRGdW5jLnBhcmFtZXRlck5hbWVzO1xuICAgIGNvbnN0IGZpdEZ1bmN0aW9uUGFydHMgPSBzZXJpZXNGaXRGdW5jLmZ1bmN0aW9uLnNwbGl0KCc9PicpLm1hcCgoZWxlbSkgPT4gZWxlbS50cmltKCkpO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNQYXJ0cyA9IHNlcmllc0ZpdEZ1bmMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMuc3BsaXQoJz0+JykubWFwKChlbGVtKSA9PiBlbGVtLnRyaW0oKSk7XG4gICAgY29uc3QgZml0RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oZml0RnVuY3Rpb25QYXJ0c1swXS5zbGljZSgxLCBmaXRGdW5jdGlvblBhcnRzWzBdLmxlbmd0aCAtIDEpLFxuICAgICAgYCR7Zml0RnVuY3Rpb25QYXJ0c1sxXS5pbmNsdWRlcygnOycpID8gJycgOiAncmV0dXJuICd9JHtmaXRGdW5jdGlvblBhcnRzWzFdfWApO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNGdW5jID0gbmV3IEZ1bmN0aW9uKGdldEluaXRQYXJhbXNQYXJ0c1swXS5zbGljZSgxLCBnZXRJbml0UGFyYW1zUGFydHNbMF0ubGVuZ3RoIC0gMSksXG4gICAgICBgcmV0dXJuICR7Z2V0SW5pdFBhcmFtc1BhcnRzWzFdfWApO1xuICAgIGNvbnN0IGZpdEZ1bmMgPSBuZXcgSnNGdW5jdGlvbihuYW1lLCAoZml0RnVuY3Rpb24gYXMgKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlciksXG4gICAgICAoZ2V0SW5pdFBhcmFtc0Z1bmMgYXMgKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSkgPT4gRmxvYXQzMkFycmF5KSwgcGFyYW1OYW1lcyk7XG4gICAgZml0RnVuY3Rpb25zW25hbWVdID0gZml0RnVuYztcbiAgfVxuXG4gIHJldHVybiBmaXRGdW5jdGlvbnNbc2VyaWVzRml0RnVuYy5uYW1lXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpdERhdGEoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIGZpdEZ1bmN0aW9uOiBGaXRGdW5jdGlvbiwgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbFR5cGUsXG4gIHBhcmFtZXRlckJvdW5kcz86IEZpdFBhcmFtQm91bmRzW10pOiBGaXRDdXJ2ZSB7XG4gIGNvbnN0IGN1cnZlRnVuY3Rpb24gPSBmaXRGdW5jdGlvbi55O1xuICBsZXQgcGFyYW1WYWx1ZXMgPSBmaXRGdW5jdGlvbi5nZXRJbml0aWFsUGFyYW1ldGVycyhkYXRhLngsIGRhdGEueSk7XG5cbiAgY29uc3Qgb2YgPSBvYmplY3RpdmVGYWN0b3J5KGN1cnZlRnVuY3Rpb24sIGRhdGEsIGVycm9yTW9kZWwpO1xuICBsZXQgYm90dG9tUGFyYW1Cb3VuZHMgPSBuZXcgRmxvYXQzMkFycmF5KGZpdEZ1bmN0aW9uLnBhcmFtZXRlck5hbWVzLmxlbmd0aCk7XG4gIGxldCB0b3BQYXJhbUJvdW5kcyA9IG5ldyBGbG9hdDMyQXJyYXkoZml0RnVuY3Rpb24ucGFyYW1ldGVyTmFtZXMubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXRGdW5jdGlvbi5wYXJhbWV0ZXJOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIGJvdHRvbVBhcmFtQm91bmRzW2ldID0gcGFyYW1WYWx1ZXNbaV0gPT09IDAgPyAtMSA6IHBhcmFtVmFsdWVzW2ldIC0gTWF0aC5hYnMocGFyYW1WYWx1ZXNbaV0gKiAwLjUpO1xuICAgIHRvcFBhcmFtQm91bmRzW2ldID0gcGFyYW1WYWx1ZXNbaV0gPT09IDAgPyAxIDogcGFyYW1WYWx1ZXNbaV0gKyBNYXRoLmFicyhwYXJhbVZhbHVlc1tpXSAqIDAuNSk7XG4gIH1cbiAgaWYgKHBhcmFtZXRlckJvdW5kcyAmJiBwYXJhbWV0ZXJCb3VuZHMubGVuZ3RoICE9PSAwKSB7XG4gICAgYm90dG9tUGFyYW1Cb3VuZHMgPSBuZXcgRmxvYXQzMkFycmF5KHBhcmFtZXRlckJvdW5kcy5sZW5ndGgpO1xuICAgIGJvdHRvbVBhcmFtQm91bmRzLnNldChwYXJhbWV0ZXJCb3VuZHMubWFwKChwYikgPT4gcGIubWluISkpO1xuICAgIHRvcFBhcmFtQm91bmRzID0gbmV3IEZsb2F0MzJBcnJheShwYXJhbWV0ZXJCb3VuZHMubGVuZ3RoKTtcbiAgICB0b3BQYXJhbUJvdW5kcy5zZXQocGFyYW1ldGVyQm91bmRzLm1hcCgocGIpID0+IHBiLm1heCEpKTtcbiAgfVxuXG4gIGNvbnN0IG9wdGltaXphdGlvbiA9IHBlcmZvcm1OZWxkZXJNZWFkT3B0aW1pemF0aW9uKG9mLCBib3R0b21QYXJhbUJvdW5kcywgdG9wUGFyYW1Cb3VuZHMsIHtcbiAgICB0b2xlcmFuY2U6IE5FTERFUl9NRUFEX0RFRkFVTFRTLlRPTEVSQU5DRSxcbiAgICBtYXhJdGVyOiBORUxERVJfTUVBRF9ERUZBVUxUUy5NQVhfSVRFUixcbiAgICBub25aZXJvUGFyYW06IE5FTERFUl9NRUFEX0RFRkFVTFRTLk5PTl9aRVJPX1BBUkFNLFxuICAgIGluaXRpYWxTY2FsZTogTkVMREVSX01FQURfREVGQVVMVFMuSU5JVElBTF9TQ0FMRSxcbiAgICBzY2FsZVJlZmxlY3Rpb246IE5FTERFUl9NRUFEX0RFRkFVTFRTLlNDQUxFX1JFRkxFQ1RJT04sXG4gICAgc2NhbGVFeHBhbnNpb246IE5FTERFUl9NRUFEX0RFRkFVTFRTLlNDQUxFX0VYUEFOU0lPTixcbiAgICBzY2FsZUNvbnRyYWN0aW9uOiBORUxERVJfTUVBRF9ERUZBVUxUUy5TQ0FMRV9DT05UUkFDVElPTixcbiAgfSwgMSwgcGFyYW1WYWx1ZXMpO1xuXG4gIHBhcmFtVmFsdWVzID0gb3B0aW1pemF0aW9uLmV4dHJlbXVtc1swXS5wb2ludDtcbiAgY29uc3QgZml0dGVkQ3VydmUgPSBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uLCBwYXJhbVZhbHVlcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBmaXR0ZWRDdXJ2ZTogZml0dGVkQ3VydmUsXG4gICAgcGFyYW1ldGVyczogcGFyYW1WYWx1ZXMsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcikgPT4gbnVtYmVyLCBwYXJhbVZhbHVlczogRmxvYXQzMkFycmF5KTpcbiAoeDogbnVtYmVyKSA9PiBudW1iZXIge1xuICByZXR1cm4gKHg6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyhkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgcGFyYW1WYWx1ZXM6IEZsb2F0MzJBcnJheSxcbiAgY3VydmVGdW5jdGlvbjogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlciwgY29uZmlkZW5jZUxldmVsOiBudW1iZXIgPSAwLjA1LCBlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsVHlwZSk6XG4gIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMge1xuICBjb25zdCBlcnJvciA9IGdldFNpZ21hKGN1cnZlRnVuY3Rpb24sIGRhdGEsIGVycm9yTW9kZWwsIHBhcmFtVmFsdWVzKTtcbiAgY29uc3QgcXVhbnRpbGUgPSBqU3RhdC5ub3JtYWwuaW52KDEgLSBjb25maWRlbmNlTGV2ZWwvMiwgMCwgMSk7XG5cbiAgY29uc3QgdG9wID0gKHg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gICAgcmV0dXJuIHZhbHVlICsgcXVhbnRpbGUgKiAoZXJyb3Iuc2lnbWFBICsgTWF0aC5hYnModmFsdWUpICogZXJyb3Iuc2lnbWFCKTtcbiAgfTtcblxuICBjb25zdCBib3R0b20gPSAoeDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgICByZXR1cm4gdmFsdWUgLSBxdWFudGlsZSAqIChlcnJvci5zaWdtYUEgKyBNYXRoLmFicyh2YWx1ZSkgKiBlcnJvci5zaWdtYUIpO1xuICB9O1xuXG4gIHJldHVybiB7Y29uZmlkZW5jZVRvcDogdG9wLCBjb25maWRlbmNlQm90dG9tOiBib3R0b219O1xufVxuXG4vLyBUT0RPOiBmb3IgbGluZWFyIC0gc2xvcGUgLSBBLCBpbnRlcmNlcHRZIC0gQlxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpc3RpY3MoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtVmFsdWVzOiBGbG9hdDMyQXJyYXksXG4gIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKSA9PiBudW1iZXIsIHN0YXRpc3RpY3M6IGJvb2xlYW4gPSB0cnVlKTogRml0U3RhdGlzdGljcyB7XG4gIGNvbnN0IGZpdHRlZEN1cnZlID0gZ2V0Rml0dGVkQ3VydmUoY3VydmVGdW5jdGlvbiwgcGFyYW1WYWx1ZXMpO1xuXG4gIHJldHVybiB7XG4gICAgclNxdWFyZWQ6IHN0YXRpc3RpY3MgPyBnZXREZXRDb2VmZihmaXR0ZWRDdXJ2ZSwgZGF0YSkgOiB1bmRlZmluZWQsXG4gICAgYXVjOiBzdGF0aXN0aWNzID8gZ2V0QXVjKGZpdHRlZEN1cnZlLCBkYXRhKSA6IHVuZGVmaW5lZCxcbiAgICBpbnRlcmNlcHRYOiBwYXJhbVZhbHVlc1syXSxcbiAgICBpbnRlcmNlcHRZOiBmaXR0ZWRDdXJ2ZShwYXJhbVZhbHVlc1syXSksXG4gICAgc2xvcGU6IHBhcmFtVmFsdWVzWzFdLFxuICAgIHRvcDogcGFyYW1WYWx1ZXNbMF0sXG4gICAgYm90dG9tOiBwYXJhbVZhbHVlc1szXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludmVydGVkRnVuY3Rpb25zKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbVZhbHVlczogbnVtYmVyW10sXG4gIGNvbmZpZGVuY2VMZXZlbDogbnVtYmVyID0gMC4wNSwgc3RhdGlzdGljczogYm9vbGVhbiA9IHRydWUpOiBGaXRJbnZlcnRlZEZ1bmN0aW9ucyB8IG51bGwge1xuICBjb25zdCBzdHVkZW50USA9IGpTdGF0LnN0dWRlbnR0LmludigxIC0gY29uZmlkZW5jZUxldmVsIC8gMiwgZGF0YS54Lmxlbmd0aCAtIHBhcmFtVmFsdWVzLmxlbmd0aCk7XG5cbiAgbGV0IGludjogKHk6IG51bWJlcikgPT4gbnVtYmVyID0gKHk6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiAwO1xuICB9O1xuICBsZXQgaW52VG9wOiAoeTogbnVtYmVyKSA9PiBudW1iZXIgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIDA7XG4gIH07XG4gIGxldCBpbnZCb3R0b206ICh5OiBudW1iZXIpID0+IG51bWJlciA9ICh5OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gMDtcbiAgfTtcblxuICBpZiAoc3RhdGlzdGljcykge1xuICAgIGludiA9ICh5OiBudW1iZXIpID0+IHtcbiAgICAgIC8vc2hvdWxkIGNoZWNrIGlmIG1vcmUgdGhhbiBib3R0b20gYW5kIGxlc3MgdGhhbiB0b3BcbiAgICAgIHJldHVybiBwYXJhbVZhbHVlc1syXSAvIE1hdGgucG93KChwYXJhbVZhbHVlc1swXSAtIHkpIC8gKHkgLSBwYXJhbVZhbHVlc1szXSksIDEgLyBwYXJhbVZhbHVlc1sxXSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9yID0gZ2V0SW52RXJyb3IoaW52LCBkYXRhKTtcblxuICAgIGludlRvcCA9ICh5OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaW52KHkpO1xuICAgICAgcmV0dXJuIHZhbHVlICsgc3R1ZGVudFEgKiBlcnJvciAvIE1hdGguc3FydChkYXRhLnkubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgaW52Qm90dG9tID0gKHk6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnYoeSk7XG4gICAgICByZXR1cm4gdmFsdWUgLSBzdHVkZW50USAqIGVycm9yIC8gTWF0aC5zcXJ0KGRhdGEueS5sZW5ndGgpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW52ZXJ0ZWQ6IGludixcbiAgICAgIGludmVydGVkVG9wOiBpbnZUb3AsXG4gICAgICBpbnZlcnRlZEJvdHRvbTogaW52Qm90dG9tLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ21vaWQocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IEEgPSBwYXJhbXNbMF07XG4gIGNvbnN0IEIgPSBwYXJhbXNbMV07XG4gIGNvbnN0IEMgPSBwYXJhbXNbMl07XG4gIGNvbnN0IEQgPSBwYXJhbXNbM107XG4gIHJldHVybiAoRCArIChBIC0gRCkgLyAoMSArIE1hdGgucG93KDEwLCAoeCAtIEMpICogQikpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVhcihwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgQSA9IHBhcmFtc1swXTtcbiAgY29uc3QgQiA9IHBhcmFtc1sxXTtcbiAgcmV0dXJuIEEgKiB4ICsgQjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0xpbmVhcihwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgQSA9IHBhcmFtc1swXTtcbiAgY29uc3QgQiA9IHBhcmFtc1sxXTtcbiAgcmV0dXJuIEEgKiBNYXRoLmxvZyh4ICsgMSkgKyBCO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb25lbnRpYWwocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IEEgPSBwYXJhbXNbMF07XG4gIGNvbnN0IEIgPSBwYXJhbXNbMV07XG4gIHJldHVybiBBICogTWF0aC5leHAoeCAqIEIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXVjKGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IGF1YyA9IDA7XG4gIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLmRhdGEueCk7XG4gIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmRhdGEueCk7XG4gIGNvbnN0IGludGVncmF0aW9uU3RlcCA9IChtYXggLSBtaW4pIC8gMTAwMDtcbiAgZm9yIChsZXQgeCA9IG1pbjsgeCA8IG1heDsgeCs9IGludGVncmF0aW9uU3RlcClcbiAgICBhdWMgKz0gaW50ZWdyYXRpb25TdGVwICogZml0dGVkQ3VydmUoeCk7XG5cbiAgcmV0dXJuIGF1Yztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERldENvZWZmKGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNzUmVzID0gMDtcbiAgbGV0IHNzVG90ID0gMDtcbiAgY29uc3QgeU1lYW4gPSBqU3RhdC5tZWFuKGRhdGEueSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgc3NSZXMgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0gZml0dGVkQ3VydmUoZGF0YS54W2ldKSwgMik7XG4gICAgc3NUb3QgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0geU1lYW4sIDIpO1xuICB9XG5cbiAgcmV0dXJuIDEgLSBzc1JlcyAvIHNzVG90O1xufVxuXG5mdW5jdGlvbiBnZXRJbnZFcnJvcih0YXJnZXRGdW5jOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuICBjb25zdCByZXNpZHVlc1NxdWFyZXMgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGEueS5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9icyA9IGRhdGEueFtpXTtcbiAgICBjb25zdCBwcmVkID0gdGFyZ2V0RnVuYyhkYXRhLnlbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgc2lnbWFTcSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG5cbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICByZXR1cm4gc2lnbWE7XG59XG5cbmZ1bmN0aW9uIG9iamVjdGl2ZUZhY3RvcnkodGFyZ2V0RnVuYzogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgZGF0YToge3k6IG51bWJlcltdLCB4OiBudW1iZXJbXX0sIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlKTogKHBhcmFtczogRmxvYXQzMkFycmF5KSA9PiBudW1iZXIge1xuICByZXR1cm4gKHBhcmFtczogRmxvYXQzMkFycmF5KSA9PiB7XG4gICAgbGV0IGxpa2VsaWhvb2QgPSAwO1xuICAgIGxldCBzaWdtYUEgPSAwO1xuICAgIGxldCBzaWdtYUIgPSAwO1xuXG4gICAgY29uc3Qgb2JzID0gZGF0YS55O1xuICAgIGNvbnN0IHByZWQgPSBkYXRhLngubWFwKCh4KSA9PiB0YXJnZXRGdW5jKHBhcmFtcywgeCkpO1xuICAgIGNvbnN0IHJlc2lkdWFscyA9IG9icy5tYXAoKG9icywgaSkgPT4gb2JzIC0gcHJlZFtpXSk7XG4gICAgY29uc3QgcmVzaWR1ZXNTcXVhcmVzID0gcmVzaWR1YWxzLm1hcCgocmVzKSA9PiBNYXRoLnBvdyhyZXMsIDIpKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoW0ZpdEVycm9yTW9kZWwuQ09OU1RBTlQsIEZpdEVycm9yTW9kZWwuQ09NQklORURdLmluY2x1ZGVzKGVycm9yTW9kZWwpKVxuICAgICAgICBzaWdtYUEgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldO1xuICAgICAgZWxzZSBpZiAoZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5QUk9QT1JUSU9OQUwpXG4gICAgICAgIHNpZ21hQiArPSByZXNpZHVlc1NxdWFyZXNbaV0gLyAocHJlZFtpXSAqIHByZWRbaV0pO1xuICAgIH1cbiAgICBzaWdtYUEgPSBNYXRoLnNxcnQoc2lnbWFBIC8gcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aCk7XG4gICAgc2lnbWFCID0gTWF0aC5zcXJ0KHNpZ21hQiAvIHJlc2lkdWVzU3F1YXJlcy5sZW5ndGgpO1xuXG4gICAgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuQ09NQklORUQpXG4gICAgICAoe3NpZ21hQSwgc2lnbWFCfSA9IGdldFNpZ21hc0ZvckNvbWJpbmVkRXJyb3JNb2RlbChzaWdtYUEsIHNpZ21hQiwgcmVzaWR1ZXNTcXVhcmVzLCBwcmVkKSk7XG5cbiAgICBjb25zdCBzaWdtYVNxSTogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgc2lnbWFTcUlbaV0gPSBNYXRoLnBvdyhzaWdtYUEgKyBzaWdtYUIgKiBwcmVkW2ldLCAyKTtcbiAgICAgIGxpa2VsaWhvb2QgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldIC8gc2lnbWFTcUlbaV0gKyBNYXRoLmxvZygyICogTWF0aC5QSSAqIHNpZ21hU3FJW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlrZWxpaG9vZDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2lnbWEodGFyZ2V0RnVuYzogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgZGF0YToge3k6IG51bWJlcltdLCB4OiBudW1iZXJbXX0sIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlLCBwYXJhbXM6IEZsb2F0MzJBcnJheSk6IHtzaWdtYUE6IG51bWJlciwgc2lnbWFCOiBudW1iZXJ9IHtcbiAgbGV0IHNpZ21hQSA9IDA7XG4gIGxldCBzaWdtYUIgPSAwO1xuXG4gIGNvbnN0IG9icyA9IGRhdGEueTtcbiAgY29uc3QgcHJlZCA9IGRhdGEueC5tYXAoKHgpID0+IHRhcmdldEZ1bmMocGFyYW1zLCB4KSk7XG4gIGNvbnN0IHJlc2lkdWFscyA9IG9icy5tYXAoKG9icywgaSkgPT4gb2JzIC0gcHJlZFtpXSk7XG4gIGNvbnN0IHJlc2lkdWVzU3F1YXJlcyA9IHJlc2lkdWFscy5tYXAoKHJlcykgPT4gTWF0aC5wb3cocmVzLCAyKSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoW0ZpdEVycm9yTW9kZWwuQ09OU1RBTlQsIEZpdEVycm9yTW9kZWwuQ09NQklORURdLmluY2x1ZGVzKGVycm9yTW9kZWwpKVxuICAgICAgc2lnbWFBICs9IHJlc2lkdWVzU3F1YXJlc1tpXTtcbiAgICBlbHNlIGlmIChlcnJvck1vZGVsID09PSBGaXRFcnJvck1vZGVsLlBST1BPUlRJT05BTClcbiAgICAgIHNpZ21hQiArPSBNYXRoLnBvdyhyZXNpZHVhbHNbaV0gLyBNYXRoLmFicyhwcmVkW2ldKSwgMik7XG4gIH1cbiAgc2lnbWFBID0gTWF0aC5zcXJ0KHNpZ21hQSAvIHJlc2lkdWVzU3F1YXJlcy5sZW5ndGgpO1xuICBzaWdtYUIgPSBNYXRoLnNxcnQoc2lnbWFCIC8gcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aCk7XG5cbiAgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuQ09NQklORUQpXG4gICAgKHtzaWdtYUEsIHNpZ21hQn0gPSBnZXRTaWdtYXNGb3JDb21iaW5lZEVycm9yTW9kZWwoc2lnbWFBLCBzaWdtYUIsIHJlc2lkdWVzU3F1YXJlcywgcHJlZCkpO1xuXG4gIHJldHVybiB7c2lnbWFBLCBzaWdtYUJ9O1xufVxuXG5mdW5jdGlvbiBnZXRTaWdtYXNGb3JDb21iaW5lZEVycm9yTW9kZWwoc2lnbWFBOiBudW1iZXIsIHNpZ21hQjogbnVtYmVyLCByZXNpZHVlc1NxdWFyZXM6IG51bWJlcltdLCBwcmVkOiBudW1iZXJbXSk6XG4gIHtzaWdtYUE6IG51bWJlciwgc2lnbWFCOiBudW1iZXJ9IHtcbiAgbGV0IGxpa2VsaWhvb2RDb21iaW5lZCA9IE51bWJlci5NQVhfVkFMVUU7XG4gIGxldCBmaW5hbFByb3BvcnRpb24gPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8PSAxMDsgaSsrKSB7XG4gICAgbGV0IGxpa2VsaWhvb2RDb21iaW5lZExvY2FsID0gMDtcbiAgICBjb25zdCBwcm9wb3J0aW9uID0gaSAvIDEwO1xuICAgIGNvbnN0IHNpZ21hQUNvbWJpbmVkID0gc2lnbWFBICogcHJvcG9ydGlvbjtcbiAgICBjb25zdCBzaWdtYUJDb21iaW5lZCA9IHNpZ21hQSAqICgxIC0gcHJvcG9ydGlvbik7XG4gICAgY29uc3Qgc2lnbWFTcUlDb21iaW5lZDogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgc2lnbWFTcUlDb21iaW5lZFtpXSA9IE1hdGgucG93KHNpZ21hQUNvbWJpbmVkICsgc2lnbWFCQ29tYmluZWQgKiBwcmVkW2ldLCAyKTtcbiAgICAgIGxpa2VsaWhvb2RDb21iaW5lZExvY2FsICs9IHJlc2lkdWVzU3F1YXJlc1tpXSAvIHNpZ21hU3FJQ29tYmluZWRbaV0gKyBNYXRoLmxvZygyICogTWF0aC5QSSAqIHNpZ21hU3FJQ29tYmluZWRbaV0pO1xuICAgIH1cbiAgICBpZiAobGlrZWxpaG9vZENvbWJpbmVkTG9jYWwgPCBsaWtlbGlob29kQ29tYmluZWQpIHtcbiAgICAgIGxpa2VsaWhvb2RDb21iaW5lZCA9IGxpa2VsaWhvb2RDb21iaW5lZExvY2FsO1xuICAgICAgZmluYWxQcm9wb3J0aW9uID0gcHJvcG9ydGlvbjtcbiAgICB9XG4gIH1cbiAgc2lnbWFCID0gc2lnbWFBICogKDEgLSBmaW5hbFByb3BvcnRpb24pO1xuICBzaWdtYUEgPSBzaWdtYUEgKiBmaW5hbFByb3BvcnRpb247XG5cbiAgcmV0dXJuIHtzaWdtYUEsIHNpZ21hQn07XG59XG4iXX0=
532
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWN1cnZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZml0LWN1cnZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixvQ0FBb0M7QUFDcEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxzQkFBc0I7QUFDdEIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFJL0UsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFlBQVksRUFBRSxjQUFjO0lBQzVCLFFBQVEsRUFBRSxVQUFVO0NBQ3JCLENBQUM7QUEwQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBb0JFO0FBRUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQXFFM0IsNERBQTREO0FBQzVELE1BQU0sT0FBTyxZQUFZO0lBQXpCO1FBQ0UsaUJBQVksR0FBcUIsRUFBRSxDQUFDO1FBQ3BDLGtCQUFhLEdBQXNCLEVBQUUsQ0FBQyxDQUFFLDZEQUE2RDtRQUNyRyxXQUFNLEdBQWlCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQUE7QUF5QkQsK0VBQStFO0FBRS9FLDRFQUE0RTtBQUM1RSxrQ0FBa0M7QUFDbEMsTUFBTSxPQUFnQixXQUFXO0NBS2hDO0FBRUQsZ0RBQWdEO0FBQ2hELE1BQU0sT0FBTyxjQUFlLFNBQVEsV0FBVztJQUM3QyxJQUFJLElBQUk7UUFDTixPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsQ0FBQyxDQUFDLE1BQW9CLEVBQUUsQ0FBUztRQUMvQixPQUFPLE1B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OUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3ZELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN2RCxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDdkQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3ZELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN6RCxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxXQUFXLEVBQ3RELHVGQUF1RixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUMzRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxXQUFXLEVBQ3RELHVGQUF1RixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUMzRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsMENBQTBDLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQ3BILEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSwwQ0FBMEMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDcEgsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLHNEQUFzRCxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN2SSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsbURBQW1ELEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQ3BJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLHVEQUF1RCxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUM1SSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFDLFdBQVcsRUFBRSxnREFBZ0Q7UUFDbEgsT0FBTyxFQUFFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhO1FBQzlFLFlBQVk7UUFDWixZQUFZLEVBQUUsWUFBWSxFQUFDLENBQUM7Q0FDL0IsQ0FBQztBQUVGLG9IQUFvSDtBQUNwSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBa0I7SUFDaEQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUMxQyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxDQUFDO0lBQ3JGLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDekMsRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBQzlELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDM0MsRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBQzlELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDM0MsRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBQzlELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVU7UUFDekYsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDdEUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDdkYsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMs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RSxDQUFDLENBQUMsQ0FBQztZQUM3RSx1QkFBdUIsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25IO1FBQ0QsSUFBSSx1QkFBdUIsR0FBRyxrQkFBa0IsRUFBRTtZQUNoRCxrQkFBa0IsR0FBRyx1QkFBdUIsQ0FBQztZQUM3QyxlQUFlLEdBQUcsVUFBVSxDQUFDO1NBQzlCO0tBQ0Y7SUFDRCxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sR0FBRyxNQUFNLEdBQUcsZUFBZSxDQUFDO0lBRWxDLE9BQU8sRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW11bHRpLXNwYWNlcyAqL1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vQHRzLWlnbm9yZTogbm8gdHlwZXNcbmltcG9ydCAqIGFzIGpTdGF0IGZyb20gJ2pzdGF0JztcbmltcG9ydCB7cGVyZm9ybU5lbGRlck1lYWRPcHRpbWl6YXRpb259IGZyb20gJy4vZml0dGluZy1hbGdvcml0aG0vb3B0aW1pemVyJztcbmltcG9ydCB7TkVMREVSX01FQURfREVGQVVMVFN9IGZyb20gJy4vZml0dGluZy1hbGdvcml0aG0vb3B0aW1pemVyLW5lbGRlci1tZWFkJztcbmltcG9ydCB7RXh0cmVtdW0sIE9wdGltaXphdGlvblJlc3VsdH0gZnJvbSAnLi9maXR0aW5nLWFsZ29yaXRobS9vcHRpbWl6ZXItbWlzYyc7XG5cblxuZXhwb3J0IGNvbnN0IEZpdEVycm9yTW9kZWwgPSB7XG4gIENPTlNUQU5UOiAnY29uc3RhbnQnLFxuICBQUk9QT1JUSU9OQUw6ICdwcm9wb3J0aW9uYWwnLFxuICBDT01CSU5FRDogJ2NvbWJpbmVkJyxcbn07XG5cbmV4cG9ydCB0eXBlIEZpdFBhcmFtQm91bmRzID0ge1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbn07XG5cbi8qKiBGaXQgZnVuY3Rpb24gZGVzY3JpcHRpb24uIEFwcGxpZXMgdG8gY3VzdG9tIHVzZXIgZml0IGZ1bmN0aW9ucy5cbiAqIFJlcXVpcmVzIEpTIGFycm93IGZ1bmN0aW9ucyBmb3IgdGhlIGZpdCBmdW5jdGlvbnMgYW5kIGluaXRpYWwgcGFyYW1ldGVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdEZ1bmN0aW9uRGVzY3JpcHRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZ1bmN0aW9uOiBzdHJpbmc7XG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzOiBzdHJpbmc7XG4gIHBhcmFtZXRlck5hbWVzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IHR5cGUgRml0Q3VydmUgPSB7XG4gIGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIHBhcmFtZXRlcnM6IEZsb2F0MzJBcnJheTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMgPSB7XG4gIGNvbmZpZGVuY2VUb3A6ICh4OiBudW1iZXIpID0+IG51bWJlcjtcbiAgY29uZmlkZW5jZUJvdHRvbTogKHg6IG51bWJlcikgPT4gbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRml0U3RhdGlzdGljcyA9IHtcbiAgclNxdWFyZWQ/OiBudW1iZXIsXG4gIGF1Yz86IG51bWJlcixcbiAgaW50ZXJjZXB0WD86IG51bWJlciwgLy8gcGFyYW1ldGVyc1syXVxuICBpbnRlcmNlcHRZPzogbnVtYmVyLCAvLyBmaXR0ZWRDdXJ2ZVtwYXJhbWV0ZXJzWzJdXVxuICBzbG9wZT86IG51bWJlciwgLy8gcGFyYW1ldGVyc1sxXVxuICB0b3A/OiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbMF1cbiAgYm90dG9tPzogbnVtYmVyLCAvLyBwYXJhbWV0ZXJzWzNdXG59O1xuXG5leHBvcnQgdHlwZSBGaXRJbnZlcnRlZEZ1bmN0aW9ucyA9IHtcbiAgaW52ZXJ0ZWQ6ICh5OiBudW1iZXIpID0+IG51bWJlcixcbiAgaW52ZXJ0ZWRUb3A6ICh5OiBudW1iZXIpID0+IG51bWJlcixcbiAgaW52ZXJ0ZWRCb3R0b206ICh5OiBudW1iZXIpID0+IG51bWJlcixcbn07XG5cbi8qKlxuICogIERhdGFncm9rIGN1cnZlIGZpdHRpbmdcbiAqXG4gKiAtIEZpdHRpbmc6IGNvbXB1dGluZyBwYXJhbWV0ZXJzIG9mIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gdG8gYmVzdCBmaXQgdGhlIGRhdGFcbiAqICAgLSBVc2VzIEJGR1Mgb3B0aW1pemF0aW9uIGFsZ29yaXRobSAobXVsdGktdGhyZWFkaW5nIGZvciBwZXJmb3JtYW5jZSkuXG4gKiAgICAgRm9yIGRvc2UtcmVzcG9uc2UgY3VydmVzLCB3ZSBhcmUgdHlwaWNhbGx5IGZpdHRpbmcgdGhlIHNpZ21vaWQgZnVuY3Rpb25cbiAqICAgLSBBYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlZ2lzdGVyIGN1c3RvbSBmaXR0aW5nIGZ1bmN0aW9uc1xuICogICAgIC0gQXV0b21hdGljIGZpdCBmdW5jdGlvbiBkZXRlcm1pbmF0aW9uXG4gKiAgICAgLSBDYWNoaW5nIG9mIGN1c3RvbSBmaXR0aW5nIGZ1bmN0aW9uc1xuICogICAtIEFiaWxpdHkgdG8gZ2V0IGZpdHRpbmcgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIChyLXNxdWFyZWQsIGNsYXNzaWZpY2F0aW9uLCBldGMpXG4gKiAtIERlZXAgaW50ZWdyYXRpb24gd2l0aCB0aGUgRGF0YWdyb2sgZ3JpZFxuICogICAtIEVpdGhlciBmaXR0aW5nIG9uIHRoZSBmbHksIG9yIHVzaW5nIHRoZSBzdXBwbGllZCBmdW5jdGlvbiArIHBhcmFtZXRlcnNcbiAqICAgLSBNdWx0aXBsZSBzZXJpZXMgaW4gb25lIGNlbGxcbiAqICAgLSBDYW5kbGVzdGlja3MsIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLCBhbmQgZHJvcGxpbmVzIGRyYXdpbmdcbiAqICAgLSBBYmlsaXR5IHRvIGRlZmluZSBjaGFydCwgbWFya2VyLCBvciBmaXR0aW5nIG9wdGlvbnMgKHN1Y2ggYXMgZml0IGZ1bmN0aW9uIG9yIG1hcmtlciBjb2xvcilcbiAqICAgICBvbiB0aGUgY29sdW1uIGxldmVsLCB3aXRoIHRoZSBhYmlsaXR5IHRvIG92ZXJyaWRlIGl0IG9uIGEgZ3JpZCBjZWxsIG9yIHBvaW50IGxldmVsXG4gKiAgIC0gQ2xpY2tpbmcgYSBwb2ludCBpbiBhIGNoYXJ0IHdpdGhpbiBhIGdyaWQgbWFrZXMgaXQgYW4gb3V0bGllciAtPiBjdXJ2ZSBpcyByZS1maXR0ZWQgb24gdGhlIGZseVxuICogICAtIEFiaWxpdHkgdG8gc3BlY2lmeSBhIGNoYXJ0IGFzIFwicmVmZXJlbmNlXCIgc28gdGhhdCBpdCBpcyBzaG93biBvbiBldmVyeSBvdGhlciBjaGFydCBmb3IgY29tcGFyaXNvblxuICogLSBBYmlsaXR5IHRvIG92ZXJsYXkgY3VydmVzIGZyb20gbXVsdGlwbGUgZ3JpZCBjZWxscyAoc3BlY2lhbCB2aWV3ZXIpXG4gKiAtIFdvcmsgd2l0aCBzZXJpZXMgc3RvcmVkIGluIG11bHRpcGxlIGZvcm1hdHMgKGJpbmFyeSBmb3IgcGVyZm9ybWFuY2UsIGpzb24gZm9yIGZsZXhpYmlsaXR5LCBldGMpXG4qL1xuXG5jb25zdCBEUk9QTElORVMgPSBbJ0lDNTAnXTtcblxuZXhwb3J0IHR5cGUgRml0TWFya2VyVHlwZSA9ICdhc3RlcmlzaycgfCAnY2lyY2xlJyB8ICdjcm9zcyBib3JkZXInIHwgJ2RpYW1vbmQnIHwgJ3NxdWFyZScgfCAnc3RhcicgfCAndHJpYW5nbGUgYm90dG9tJyB8XG4gICd0cmlhbmdsZSBsZWZ0JyB8ICd0cmlhbmdsZSByaWdodCcgfCAndHJpYW5nbGUgdG9wJztcblxuZXhwb3J0IHR5cGUgRml0T3V0bGllck1hcmtlclR5cGUgPSAnYXN0ZXJpc2snIHwgJ2NpcmNsZScgfCAnY3Jvc3MgYm9yZGVyJyB8ICdkaWFtb25kJyB8ICdvdXRsaWVyJyB8ICdzcXVhcmUnIHwgJ3N0YXInIHxcbiAgJ3RyaWFuZ2xlIGJvdHRvbScgfCAndHJpYW5nbGUgbGVmdCcgfCAndHJpYW5nbGUgcmlnaHQnIHwgJ3RyaWFuZ2xlIHRvcCc7XG5cbmV4cG9ydCB0eXBlIEZpdExpbmVTdHlsZSA9ICdzb2xpZCcgfCAnZG90dGVkJyB8ICdkYXNoZWQnIHwgJ2Rhc2hkb3R0ZWQnO1xuXG5leHBvcnQgdHlwZSBGaXRFcnJvck1vZGVsVHlwZSA9ICdjb25zdGFudCcgfCAncHJvcG9ydGlvbmFsJyB8ICdjb21iaW5lZCc7XG5cbi8qKiBBIHBvaW50IGluIHRoZSBmaXQgc2VyaWVzLiBPbmx5IHggYW5kIHkgYXJlIHJlcXVpcmVkLiBDYW4gb3ZlcnJpZGUgc29tZSBmaWVsZHMgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFBvaW50IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIG91dGxpZXI/OiBib29sZWFuOyAgICAgICAvLyBpZiB0cnVlLCByZW5kZXJzIGFzICd4JyBhbmQgZ2V0cyBpZ25vcmVkIGZvciBjdXJ2ZSBmaXR0aW5nXG4gIGNvbG9yPzogc3RyaW5nOyAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIG1hcmtlciBjb2xvciBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zXG4gIG91dGxpZXJDb2xvcj86IHN0cmluZzsgICAvLyBvdmVycmlkZXMgdGhlIG91dGxpZXIgY29sb3IgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9uc1xuICBtYXJrZXI/OiBGaXRNYXJrZXJUeXBlOyAgLy8gb3ZlcnJpZGVzIHRoZSBtYXJrZXIgdHlwZSBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zXG4gIG91dGxpZXJNYXJrZXI/OiBGaXRPdXRsaWVyTWFya2VyVHlwZTsgLy8gb3ZlcnJpZGVzIHRoZSBvdXRsaWVyIG1hcmtlciB0eXBlIGRlZmluZWQgaW4gSUZpdFNlcmllc09wdGlvbnNcbiAgc2l6ZT86IG51bWJlcjsgICAgICAgICAgIC8vIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBtYXJrZXIgc2l6ZVxuICBzdGRldj86IG51bWJlcjsgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCByZW5kZXJzIGFuIGVycm9yIGJhciBjYW5kbGVzdGlja1xuICAvLyBtaW5ZPzogbnVtYmVyOyAgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCB0aGUgbWFya2VyIHJlbmRlcnMgYXMgYSBjYW5kbGVzdGljayB3aXRoIHdoaXNrZXJzIFttaW5ZLCBtYXhZXVxuICAvLyBtYXhZPzogbnVtYmVyOyAgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCB0aGUgbWFya2VyIHJlbmRlcnMgYXMgYSBjYW5kbGVzdGljayB3aXRoIHdoaXNrZXJzIFttaW5ZLCBtYXhZXVxufVxuXG4vKiogQSBzZXJpZXMgY29uc2lzdHMgb2YgcG9pbnRzLCBoYXMgYSBuYW1lLCBhbmQgb3B0aW9ucy5cbiAqIElmIGRlZmluZWQsIHNlcmllc09wdGlvbnMgYXJlIG1lcmdlZCB3aXRoIHtAbGluayBJRml0Q2hhcnREYXRhLnNlcmllc09wdGlvbnN9ICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRTZXJpZXMgZXh0ZW5kcyBJRml0U2VyaWVzT3B0aW9ucyB7XG4gIHBvaW50czogSUZpdFBvaW50W107XG59XG5cbi8qKiBDaGFydCBsYWJlbHMgb3B0aW9ucy4gQ29udHJvbHMgdGhlIGNoYXJ0IGxhYmVscy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdENoYXJ0TGFiZWxPcHRpb25zIHtcbiAgdmlzaWJsZTogYm9vbGVhbjsgICAgICAgICAvLyBpZiB0cnVlLCByZW5kZXJzIHRoZSBsYWJlbCBvbiB0aGUgcGxvdFxuICBjb2xvcjogc3RyaW5nOyAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGxhYmVsIGNvbG9yXG4gIG5hbWU6IHN0cmluZzsgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgbGFiZWwgbmFtZVxufVxuXG4vKiogQ2hhcnQgb3B0aW9ucy4gRm9yIGZpdHRlZCBjdXJ2ZXMsIHRoaXMgb2JqZWN0IGlzIHN0b3JlZCBpbiB0aGUgZ3JpZCBjb2x1bW4gdGFncyBhbmQgaXMgdXNlZCBieSB0aGUgcmVuZGVyZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRDaGFydE9wdGlvbnMge1xuICBtaW5YPzogbnVtYmVyO1xuICBtaW5ZPzogbnVtYmVyO1xuICBtYXhYPzogbnVtYmVyO1xuICBtYXhZPzogbnVtYmVyO1xuXG4gIHRpdGxlPzogc3RyaW5nOyAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIHBsb3QgdGl0bGUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cbiAgeEF4aXNOYW1lPzogc3RyaW5nOyAgICAgICAgLy8gZGVmaW5lcyB0aGUgeCBheGlzIG5hbWUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cbiAgeUF4aXNOYW1lPzogc3RyaW5nOyAgICAgICAgLy8gZGVmaW5lcyB0aGUgWSBheGlzIG5hbWUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cblxuICBsb2dYPzogYm9vbGVhbjsgICAgICAgICAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdGhlIHggZGF0YSBzaG91bGQgYmUgbG9nYXJpdGhtaWMgb3Igbm90XG4gIGxvZ1k/OiBib29sZWFuOyAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0aGUgeSBkYXRhIHNob3VsZCBiZSBsb2dhcml0aG1pYyBvciBub3RcblxuICBhbGxvd1haZXJvZXM/OiBib29sZWFuOyAgICAvLyBkZWZpbmVzIHdoZXRoZXIgeCB6ZXJvZXMgYWxsb3dlZCBmb3IgbG9nYXJpdGhtaWMgZGF0YSBvciBub3RcbiAgbWVyZ2VTZXJpZXM/OiBib29sZWFuOyAgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRvIG1lcmdlIHNlcmllcyBvciBub3RcblxuICBzaG93Q29sdW1uTGFiZWw/OiBib29sZWFuOyAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgY29sdW1uIGxhYmVsIGluIHRoZSBsZWdlbmQgb3Igbm90XG4gIHNob3dTdGF0aXN0aWNzPzogc3RyaW5nW107IC8vIGRlZmluZXMgdGhlIHN0YXRpc3RpY3MgdGhhdCB3b3VsZCBiZSBzaG93biBvbiB0aGUgcGxvdFxuICBsYWJlbE9wdGlvbnM/OiBJRml0Q2hhcnRMYWJlbE9wdGlvbnNbXTsgLy8gY29udHJvbHMgdGhlIHBsb3QgbGFiZWxzXG59XG5cbi8qKiBEYXRhIGZvciB0aGUgZml0IGNoYXJ0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0Q2hhcnREYXRhIHtcbiAgY2hhcnRPcHRpb25zPzogSUZpdENoYXJ0T3B0aW9ucztcbiAgc2VyaWVzT3B0aW9ucz86IElGaXRTZXJpZXNPcHRpb25zOyAgLy8gRGVmYXVsdCBzZXJpZXMgb3B0aW9ucy4gSW5kaXZpZHVhbCBzZXJpZXMgY2FuIG92ZXJyaWRlIGl0LlxuICBzZXJpZXM/OiBJRml0U2VyaWVzW107XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIElGaXRDaGFydERhdGF9IGludGVyZmFjZSAqL1xuZXhwb3J0IGNsYXNzIEZpdENoYXJ0RGF0YSBpbXBsZW1lbnRzIElGaXRDaGFydERhdGEge1xuICBjaGFydE9wdGlvbnM6IElGaXRDaGFydE9wdGlvbnMgPSB7fTtcbiAgc2VyaWVzT3B0aW9uczogSUZpdFNlcmllc09wdGlvbnMgPSB7fTsgIC8vIERlZmF1bHQgc2VyaWVzIG9wdGlvbnMuIEluZGl2aWR1YWwgc2VyaWVzIGNhbiBvdmVycmlkZSBpdC5cbiAgc2VyaWVzOiBJRml0U2VyaWVzW10gPSBbXTtcbn1cblxuLyoqIFNlcmllcyBvcHRpb25zIGNhbiBiZSBlaXRoZXIgYXBwbGllZCBnbG9iYWxseSBvbiBhIGNvbHVtbiBsZXZlbCwgb3IgcGFydGlhbGx5IG92ZXJyaWRkZW4gaW4gcGFydGljdWxhciBzZXJpZXMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFNlcmllc09wdGlvbnMge1xuICBuYW1lPzogc3RyaW5nOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgbmFtZVxuICBmaXRGdW5jdGlvbj86IHN0cmluZyB8IElGaXRGdW5jdGlvbkRlc2NyaXB0aW9uOyAvLyBjb250cm9scyB0aGUgc2VyaWVzIGZpdCBmdW5jdGlvblxuICBwYXJhbWV0ZXJzPzogbnVtYmVyW107ICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgcGFyYW1ldGVycywgYXV0by1maXR0aW5nIHdoZW4gbm90IGRlZmluZWRcbiAgcGFyYW1ldGVyQm91bmRzPzogRml0UGFyYW1Cb3VuZHNbXTsgICAvLyBkZWZpbmVzIHRoZSBhY2NlcHRhYmxlIHJhbmdlIG9mIGVhY2ggcGFyYW1ldGVyLCB3aGljaCBpcyB0YWtlbiBpbnRvIGFjY291bnQgZHVyaW5nIHRoZSBmaXR0aW5nLiBTZWUgYWxzbyBgcGFyYW1ldGVyc2AuXG4gIG1hcmtlclR5cGU/OiBGaXRNYXJrZXJUeXBlOyAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIG1hcmtlciB0eXBlXG4gIG91dGxpZXJNYXJrZXJUeXBlPzogRml0T3V0bGllck1hcmtlclR5cGU7ICAvLyBkZWZpbmVzIHRoZSBzZXJpZXMgb3V0bGllciBtYXJrZXIgdHlwZVxuICBsaW5lU3R5bGU/OiBGaXRMaW5lU3R5bGU7ICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIHNlcmllcyBsaW5lIHN0eWxlXG4gIHBvaW50Q29sb3I/OiBzdHJpbmc7ICAgICAgICAgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIHBvaW50IGNvbG9yXG4gIGZpdExpbmVDb2xvcj86IHN0cmluZzsgICAgICAgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIGZpdCBsaW5lIGNvbG9yXG4gIGNvbmZpZGVuY2VJbnRlcnZhbENvbG9yPzogc3RyaW5nOyAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIGNvbmZpZGVuY2UgaW50ZXJ2YWwgY29sb3JcbiAgb3V0bGllckNvbG9yPzogc3RyaW5nOyAgICAgICAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgb3V0bGllciBjb2xvclxuICBjb25uZWN0RG90cz86IGJvb2xlYW47ICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0byBjb25uZWN0IHRoZSBwb2ludHMgd2l0aCBsaW5lcyBvciBub3QuIElmIHRydWUgYW5kIHNob3dGaXRMaW5lIGlzIGZhbHNlIC0gZml0dGluZyBpcyBkaXNhYmxlZCAtIG90aGVyd2lzZSwgaXQgd2lsbCBiZSByZW5kZXJlZCBhY2NvcmRpbmdseSB0byB0aGUgcGFyYW1ldGVyIHZhbHVlLlxuICBzaG93Rml0TGluZT86IGJvb2xlYW47ICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0byBzaG93IHRoZSBmaXQgbGluZSBvciBub3RcbiAgc2hvd1BvaW50cz86IHN0cmluZzsgICAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBkYXRhIGRpc3BsYXkgbW9kZVxuICBzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWw/OiBib29sZWFuOyAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbHMgb3Igbm90XG4gIGVycm9yTW9kZWw/OiBGaXRFcnJvck1vZGVsVHlwZTsgICAgICAgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIGVycm9yIG1vZGVsXG4gIGNsaWNrVG9Ub2dnbGU/OiBib29sZWFuOyAgICAvLyBpZiB0cnVlLCBjbGlja2luZyBvbiB0aGUgcG9pbnQgdG9nZ2xlcyBpdHMgb3V0bGllciBzdGF0dXMgYW5kIGNhdXNlcyBjdXJ2ZSByZWZpdHRpbmdcbiAgbGFiZWxzPzoge1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW59OyAvLyBjb250cm9sbGVkIGJ5IElGaXRDaGFydERhdGEgbGFiZWxPcHRpb25zLCBzaG93cyBsYWJlbHNcbiAgZHJvcGxpbmVzPzogc3RyaW5nW107ICAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBkcm9wbGluZXMgdGhhdCB3b3VsZCBiZSBzaG93biBvbiB0aGUgcGxvdCAoSUM1MClcbiAgY29sdW1uTmFtZT86IHN0cmluZzsgICAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBjb2x1bW4gbmFtZSB3aGVyZSB0aGUgc2VyaWVzIGlzIHN0b3JlZFxufVxuLy8gVE9ETzogc2hvdyBsYWJlbHMgaW4gcHJvcGVydHkgcGFuZWwgaWYgcHJlc2VudCwgY29sb3IgYnkgZGVmYXVsdCBmcm9tIHNlcmllc1xuXG4vLyBUT0RPPzogYWRkIG1ldGhvZCB0byByZXR1cm4gcGFyYW1ldGVycyAtIGdldCBwYXJhbWV0ZXJzIGZyb20gZml0IGZ1bmN0aW9uXG4vKiogQ2xhc3MgZm9yIHRoZSBmaXQgZnVuY3Rpb25zICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRml0RnVuY3Rpb24ge1xuICBhYnN0cmFjdCBnZXQgbmFtZSgpOiBzdHJpbmc7XG4gIGFic3RyYWN0IGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXTtcbiAgYWJzdHJhY3QgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyO1xuICBhYnN0cmFjdCBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBGbG9hdDMyQXJyYXk7XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIGxpbmVhciBmdW5jdGlvbiAqL1xuZXhwb3J0IGNsYXNzIExpbmVhckZ1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb24ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fTElORUFSO1xuICB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydTbG9wZScsICdJbnRlcmNlcHQnXTtcbiAgfVxuXG4gIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGxpbmVhcihwYXJhbXMsIHgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICBsZXQgbWluSW5kZXggPSAwO1xuICAgIGxldCBtYXhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeFtpXSA8IHhbbWluSW5kZXhdKVxuICAgICAgICBtaW5JbmRleCA9IGk7XG4gICAgICBpZiAoeFtpXSA+IHhbbWF4SW5kZXhdKVxuICAgICAgICBtYXhJbmRleCA9IGk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFYID0geFttYXhJbmRleF0gLSB4W21pbkluZGV4XTtcbiAgICBjb25zdCBkZWx0YVkgPSB5W21heEluZGV4XSAtIHlbbWluSW5kZXhdO1xuICAgIGNvbnN0IEEgPSBkZWx0YVkgLyBkZWx0YVg7XG4gICAgY29uc3QgQiA9IHlbbWF4SW5kZXhdIC0gQSAqIHhbbWF4SW5kZXhdO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoMik7XG4gICAgcGFyYW1zLnNldChbQSwgQl0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgc2lnbW9pZCBmdW5jdGlvbiAqL1xuZXhwb3J0IGNsYXNzIFNpZ21vaWRGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OX1NJR01PSUQ7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1RvcCcsICdCb3R0b20nLCAnU2xvcGUnLCAnSUM1MCddO1xuICB9XG5cbiAgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc2lnbW9pZChwYXJhbXMsIHgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICBjb25zdCBkYXRhQm91bmRzID0gREcuUmVjdC5mcm9tWFlBcnJheXMoeCwgeSk7XG4gICAgY29uc3QgbWVkWSA9IChkYXRhQm91bmRzLmJvdHRvbSAtIGRhdGFCb3VuZHMudG9wKSAvIDIgKyBkYXRhQm91bmRzLnRvcDtcbiAgICBsZXQgbWF4WUludGVydmFsID0gZGF0YUJvdW5kcy5ib3R0b20gLSBkYXRhQm91bmRzLnRvcDtcbiAgICBsZXQgbmVhcmVzdFhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW50ZXJ2YWwgPSBNYXRoLmFicyh5W2ldIC0gbWVkWSk7XG4gICAgICBpZiAoY3VycmVudEludGVydmFsIDwgbWF4WUludGVydmFsKSB7XG4gICAgICAgIG1heFlJbnRlcnZhbCA9IGN1cnJlbnRJbnRlcnZhbDtcbiAgICAgICAgbmVhcmVzdFhJbmRleCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHhBdE1lZFkgPSB4W25lYXJlc3RYSW5kZXhdO1xuICAgIGNvbnN0IHNsb3BlID0geVswXSA+IHlbeS5sZW5ndGggLSAxXSA/IDEgOiAtMTtcblxuICAgIC8vIHBhcmFtcyBhcmU6IFttYXgsIHRhbiwgSUM1MCwgbWluXVxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoNCk7XG4gICAgcGFyYW1zLnNldChbZGF0YUJvdW5kcy5ib3R0b20sIHNsb3BlLCB4QXRNZWRZLCBkYXRhQm91bmRzLnRvcF0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgbGluZWFyIGxvZ2FyaXRobWljIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTG9nTGluZWFyRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9MT0dfTElORUFSO1xuICB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydTbG9wZScsICdJbnRlcmNlcHQnXTtcbiAgfVxuXG4gIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGxvZ0xpbmVhcihwYXJhbXMsIHgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgRmxvYXQzMkFycmF5KDIpO1xuICAgIHBhcmFtcy5zZXQoWy01LCAxMDBdKTtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIGV4cG9uZW50aWFsIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgRXhwb25lbnRpYWxGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OX0VYUE9ORU5USUFMO1xuICB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydNYW50aXNzYScsICdQb3dlciddO1xuICB9XG5cbiAgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZXhwb25lbnRpYWwocGFyYW1zLCB4KTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IEZsb2F0MzJBcnJheSB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEZsb2F0MzJBcnJheSgyKTtcbiAgICBwYXJhbXMuc2V0KFsxMDAsIC0yXSk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHVzZXIgSlMgZnVuY3Rpb25zICovXG5leHBvcnQgY2xhc3MgSnNGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9wYXJhbWV0ZXJOYW1lczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCB5RnVuYzogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgICBnZXRJbml0UGFyYW1zRnVuYzogKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSkgPT4gRmxvYXQzMkFycmF5LCBwYXJhbWV0ZXJOYW1lczogc3RyaW5nW10pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgdGhpcy5fcGFyYW1ldGVyTmFtZXMgPSBwYXJhbWV0ZXJOYW1lcztcblxuICAgIHRoaXMueSA9IHlGdW5jO1xuICAgIHRoaXMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMgPSBnZXRJbml0UGFyYW1zRnVuYztcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbWV0ZXJOYW1lcztcbiAgfVxuXG4gIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IEZsb2F0MzJBcnJheSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG4vLyBPYmplY3Qgd2l0aCBmaXQgZnVuY3Rpb25zXG5leHBvcnQgY29uc3QgZml0RnVuY3Rpb25zOiB7W2luZGV4OiBzdHJpbmddOiBGaXRGdW5jdGlvbn0gPSB7XG4gICdsaW5lYXInOiBuZXcgTGluZWFyRnVuY3Rpb24oKSxcbiAgJ3NpZ21vaWQnOiBuZXcgU2lnbW9pZEZ1bmN0aW9uKCksXG4gICdsb2ctbGluZWFyJzogbmV3IExvZ0xpbmVhckZ1bmN0aW9uKCksXG4gICdleHBvbmVudGlhbCc6IG5ldyBFeHBvbmVudGlhbEZ1bmN0aW9uKCksXG59O1xuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBGaXRTdGF0aXN0aWNzfS4gVXNlZnVsIGZvciBlZGl0aW5nLCBpbml0aWFsaXphdGlvbiwgdHJhbnNmb3JtYXRpb25zLCBldGMuICovXG5leHBvcnQgY29uc3Qgc3RhdGlzdGljc1Byb3BlcnRpZXM6IERHLlByb3BlcnR5W10gPSBbXG4gIERHLlByb3BlcnR5LmpzKCdyU3F1YXJlZCcsIERHLlRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdhdWMnLCBERy5UWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnaW50ZXJjZXB0WScsIERHLlRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdpbnRlcmNlcHRYJywgREcuVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nsb3BlJywgREcuVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ3RvcCcsIERHLlRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdib3R0b20nLCBERy5UWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuXTtcblxuLyoqIFByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSB7QGxpbmsgSUZpdENoYXJ0T3B0aW9uc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IGZpdENoYXJ0RGF0YVByb3BlcnRpZXM6IERHLlByb3BlcnR5W10gPSBbXG4gIC8vIFN0eWxlIGFuZCB6b29tXG4gIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSB0b29sdGlwc1xuICBERy5Qcm9wZXJ0eS5qcygnbWluWCcsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWluWScsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWF4WCcsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWF4WScsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygndGl0bGUnLCBERy5UWVBFLlNUUklORywge251bGxhYmxlOiB0cnVlfSksXG4gIERHLlByb3BlcnR5LmpzKCd4QXhpc05hbWUnLCBERy5UWVBFLlNUUklORywge2Rlc2NyaXB0aW9uOlxuICAgICdMYWJlbCB0byBzaG93IG9uIHRoZSBYIGF4aXMuIElmIG5vdCBzcGVjaWZpZWQsIGNvcnJlc3BvbmRpbmcgZGF0YSBjb2x1bW4gbmFtZSBpcyB1c2VkJywgbnVsbGFibGU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ3lBeGlzTmFtZScsIERHLlRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246XG4gICAgJ0xhYmVsIHRvIHNob3cgb24gdGhlIFkgYXhpcy4gSWYgbm90IHNwZWNpZmllZCwgY29ycmVzcG9uZGluZyBkYXRhIGNvbHVtbiBuYW1lIGlzIHVzZWQnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbG9nWCcsIERHLlRZUEUuQk9PTCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciB0aGUgWCBheGlzIHNob3VsZCBiZSBsb2dhcml0aG1pYycsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2xvZ1knLCBERy5UWVBFLkJPT0wsIHtkZXNjcmlwdGlvbjogJ1doZXRoZXIgdGhlIFkgYXhpcyBzaG91bGQgYmUgbG9nYXJpdGhtaWMnLCBkZWZhdWx0VmFsdWU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdhbGxvd1haZXJvZXMnLCBERy5UWVBFLkJPT0wsIHtkZXNjcmlwdGlvbjogJ1doZXRoZXIgeCB6ZXJvZXMgYWxsb3dlZCBmb3IgbG9nYXJpdGhtaWMgZGF0YSBvciBub3QnLCBkZWZhdWx0VmFsdWU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ21lcmdlU2VyaWVzJywgREcuVFlQRS5CT09MLCB7ZGVzY3JpcHRpb246ICdNZXJnZXMgYWxsIHNlcmllcyB3aXRoaW4gb25lIGNlbGwgaW50byBvbmUgc2VyaWVzJywgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnc2hvd0NvbHVtbkxhYmVsJywgREcuVFlQRS5CT09MLCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIHNob3cgdGhlIGNvbHVtbiBsYWJlbCBpbiB0aGUgbGVnZW5kIG9yIG5vdCcsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nob3dTdGF0aXN0aWNzJywgREcuVFlQRS5TVFJJTkdfTElTVCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciBzcGVjaWZpYyBzdGF0aXN0aWNzIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgY2hvaWNlczogc3RhdGlzdGljc1Byb3BlcnRpZXMubWFwKChmcnApID0+IGZycC5uYW1lKSwgaW5wdXRUeXBlOiAnTXVsdGlDaG9pY2UnLFxuICAgIC8vQHRzLWlnbm9yZVxuICAgIGZyaWVuZGx5TmFtZTogJ1N0YXRpc3RpY3MnfSksXG5dO1xuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBJRml0U2VyaWVzT3B0aW9uc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IGZpdFNlcmllc1Byb3BlcnRpZXM6IERHLlByb3BlcnR5W10gPSBbXG4gIERHLlByb3BlcnR5LmpzKCdmaXRGdW5jdGlvbicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBjaG9pY2VzOiBPYmplY3Qua2V5cyhmaXRGdW5jdGlvbnMpLCBkZWZhdWx0VmFsdWU6ICdzaWdtb2lkJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygncG9pbnRDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ2ZpdExpbmVDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ291dGxpZXJDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ2Vycm9yTW9kZWwnLCBERy5UWVBFLlNUUklORywge2NhdGVnb3J5OiAnRml0dGluZycsIGRlZmF1bHRWYWx1ZTogJ2NvbnN0YW50JyxcbiAgICBjaG9pY2VzOiBbJ2NvbnN0YW50JywgJ3Byb3BvcnRpb25hbCcsICdjb21iaW5lZCddLCBudWxsYWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2Nvbm5lY3REb3RzJywgREcuVFlQRS5CT09MLCB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnY2xpY2tUb1RvZ2dsZScsIERHLlRZUEUuQk9PTCwge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOlxuICAgICdDbGljayBvbiBhIHBvaW50IHRvIG1hcmsgaXQgYXMgb3V0bGllciBhbmQgcmVmaXQnLCBudWxsYWJsZTogdHJ1ZSwgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnc2hvd0ZpdExpbmUnLCBERy5UWVBFLkJPT0wsIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZWZhdWx0VmFsdWU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nob3dQb2ludHMnLCBERy5UWVBFLlNUUklORywgLy8gcmV3cml0ZSBkZXNjcmlwdGlvblxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZXNjcmlwdGlvbjogJ1doZXRoZXIgcG9pbnRzL2NhbmRsZXN0aWNrcy9ub25lIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgICBkZWZhdWx0VmFsdWU6ICdwb2ludHMnLCBjaG9pY2VzOiBbJ3BvaW50cycsICdjYW5kbGVzdGlja3MnLCAnYm90aCddfSksXG4gIERHLlByb3BlcnR5LmpzKCdzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWwnLCBERy5UWVBFLkJPT0wsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOiAnV2hldGhlciBjb25maWRlbmNlIGludGVydmFscyBzaG91bGQgYmUgcmVuZGVyZWQnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICBmcmllbmRseU5hbWU6ICdDb25maWRlbmNlIEludGVydmFsJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWFya2VyVHlwZScsIERHLlRZUEUuU1RSSU5HLCB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBkZWZhdWx0VmFsdWU6ICdjaXJjbGUnLFxuICAgIGNob2ljZXM6IFsnYXN0ZXJpc2snLCAnY2lyY2xlJywgJ2Nyb3NzIGJvcmRlcicsICdkaWFtb25kJywgJ3NxdWFyZScsICdzdGFyJyxcbiAgICAgICd0cmlhbmdsZSBib3R0b20nLCAndHJpYW5nbGUgbGVmdCcsICd0cmlhbmdsZSByaWdodCcsICd0cmlhbmdsZSB0b3AnXSwgbnVsbGFibGU6IGZhbHNlLFxuICAgIC8vQHRzLWlnbm9yZVxuICAgIGZyaWVuZGx5TmFtZTogJ01hcmtlcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ291dGxpZXJNYXJrZXJUeXBlJywgREcuVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIGRlZmF1bHRWYWx1ZTogJ291dGxpZXInLFxuICAgIGNob2ljZXM6IFsnYXN0ZXJpc2snLCAnY2lyY2xlJywgJ2Nyb3NzIGJvcmRlcicsICdkaWFtb25kJywgJ291dGxpZXInLCAnc3F1YXJlJywgJ3N0YXInLFxuICAgICAgJ3RyaWFuZ2xlIGJvdHRvbScsICd0cmlhbmdsZSBsZWZ0JywgJ3RyaWFuZ2xlIHJpZ2h0JywgJ3RyaWFuZ2xlIHRvcCddLCBudWxsYWJsZTogZmFsc2UsXG4gICAgLy9AdHMtaWdub3JlXG4gICAgZnJpZW5kbHlOYW1lOiAnT3V0bGllciBNYXJrZXInfSksXG4gIERHLlByb3BlcnR5LmpzKCdsaW5lU3R5bGUnLCBERy5UWVBFLlNUUklORywge2NhdGVnb3J5OiAnUmVuZGVyaW5nJywgZGVmYXVsdFZhbHVlOiAnc29saWQnLFxuICAgIGNob2ljZXM6IFsnc29saWQnLCAnZG90dGVkJywgJ2Rhc2hlZCcsICdkYXNoZG90dGVkJ10sIG51bGxhYmxlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnZHJvcGxpbmVzJywgREcuVFlQRS5TVFJJTkdfTElTVCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciBzcGVjaWZpYyBkcm9wbGluZXMgc2hvdWxkIGJlIHJlbmRlcmVkJyxcbiAgICBjaG9pY2VzOiBEUk9QTElORVMsIGlucHV0VHlwZTogJ011bHRpQ2hvaWNlJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygnY29sdW1uTmFtZScsIERHLlRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246ICdDb2x1bW4gbmFtZSB3aGVyZSB0aGUgc2VyaWVzIGlzIHN0b3JlZCcsIGRlZmF1bHRWYWx1ZTogJyd9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBGSVRfRlVOQ1RJT05fU0lHTU9JRCA9ICdzaWdtb2lkJztcbmV4cG9ydCBjb25zdCBGSVRfRlVOQ1RJT05fTElORUFSID0gJ2xpbmVhcic7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0xPR19MSU5FQVIgPSAnbG9nLWxpbmVhcic7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0VYUE9ORU5USUFMID0gJ2V4cG9uZW50aWFsJztcblxuZXhwb3J0IGNvbnN0IEZJVF9TVEFUU19SU1FVQVJFRCA9ICdyU3F1YXJlZCc7XG5leHBvcnQgY29uc3QgRklUX1NUQVRTX0FVQyA9ICdhdWMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbihzZXJpZXNGaXRGdW5jOiBzdHJpbmcgfCBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbik6IEZpdEZ1bmN0aW9uIHtcbiAgaWYgKHR5cGVvZiBzZXJpZXNGaXRGdW5jID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmNdO1xuICBlbHNlIGlmICghZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmMubmFtZV0pIHtcbiAgICBjb25zdCBuYW1lID0gc2VyaWVzRml0RnVuYy5uYW1lO1xuICAgIGNvbnN0IHBhcmFtTmFtZXMgPSBzZXJpZXNGaXRGdW5jLnBhcmFtZXRlck5hbWVzO1xuICAgIGNvbnN0IGZpdEZ1bmN0aW9uUGFydHMgPSBzZXJpZXNGaXRGdW5jLmZ1bmN0aW9uLnNwbGl0KCc9PicpLm1hcCgoZWxlbSkgPT4gZWxlbS50cmltKCkpO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNQYXJ0cyA9IHNlcmllc0ZpdEZ1bmMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMuc3BsaXQoJz0+JykubWFwKChlbGVtKSA9PiBlbGVtLnRyaW0oKSk7XG4gICAgY29uc3QgZml0RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oZml0RnVuY3Rpb25QYXJ0c1swXS5zbGljZSgxLCBmaXRGdW5jdGlvblBhcnRzWzBdLmxlbmd0aCAtIDEpLFxuICAgICAgYCR7Zml0RnVuY3Rpb25QYXJ0c1sxXS5pbmNsdWRlcygnOycpID8gJycgOiAncmV0dXJuICd9JHtmaXRGdW5jdGlvblBhcnRzWzFdfWApO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNGdW5jID0gbmV3IEZ1bmN0aW9uKGdldEluaXRQYXJhbXNQYXJ0c1swXS5zbGljZSgxLCBnZXRJbml0UGFyYW1zUGFydHNbMF0ubGVuZ3RoIC0gMSksXG4gICAgICBgcmV0dXJuICR7Z2V0SW5pdFBhcmFtc1BhcnRzWzFdfWApO1xuICAgIGNvbnN0IGZpdEZ1bmMgPSBuZXcgSnNGdW5jdGlvbihuYW1lLCAoZml0RnVuY3Rpb24gYXMgKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlciksXG4gICAgICAoZ2V0SW5pdFBhcmFtc0Z1bmMgYXMgKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSkgPT4gRmxvYXQzMkFycmF5KSwgcGFyYW1OYW1lcyk7XG4gICAgZml0RnVuY3Rpb25zW25hbWVdID0gZml0RnVuYztcbiAgfVxuXG4gIHJldHVybiBmaXRGdW5jdGlvbnNbc2VyaWVzRml0RnVuYy5uYW1lXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpdERhdGEoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIGZpdEZ1bmN0aW9uOiBGaXRGdW5jdGlvbiwgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbFR5cGUsXG4gIHBhcmFtZXRlckJvdW5kcz86IEZpdFBhcmFtQm91bmRzW10pOiBGaXRDdXJ2ZSB7XG4gIGNvbnN0IGN1cnZlRnVuY3Rpb24gPSBmaXRGdW5jdGlvbi55O1xuICBsZXQgcGFyYW1WYWx1ZXMgPSBmaXRGdW5jdGlvbi5nZXRJbml0aWFsUGFyYW1ldGVycyhkYXRhLngsIGRhdGEueSk7XG5cbiAgY29uc3Qgb2YgPSBvYmplY3RpdmVGYWN0b3J5KGN1cnZlRnVuY3Rpb24sIGRhdGEsIGVycm9yTW9kZWwpO1xuICBjb25zdCBib3R0b21QYXJhbUJvdW5kcyA9IG5ldyBGbG9hdDMyQXJyYXkoZml0RnVuY3Rpb24ucGFyYW1ldGVyTmFtZXMubGVuZ3RoKTtcbiAgY29uc3QgdG9wUGFyYW1Cb3VuZHMgPSBuZXcgRmxvYXQzMkFycmF5KGZpdEZ1bmN0aW9uLnBhcmFtZXRlck5hbWVzLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZml0RnVuY3Rpb24ucGFyYW1ldGVyTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICBib3R0b21QYXJhbUJvdW5kc1tpXSA9IHBhcmFtVmFsdWVzW2ldID09PSAwID8gLTEgOiBwYXJhbVZhbHVlc1tpXSAtIE1hdGguYWJzKHBhcmFtVmFsdWVzW2ldICogMC41KTtcbiAgICB0b3BQYXJhbUJvdW5kc1tpXSA9IHBhcmFtVmFsdWVzW2ldID09PSAwID8gMSA6IHBhcmFtVmFsdWVzW2ldICsgTWF0aC5hYnMocGFyYW1WYWx1ZXNbaV0gKiAwLjUpO1xuICB9XG4gIGNvbnN0IHBhcmFtZXRlckJvdW5kc0JpdHNldDogREcuQml0U2V0ID0gREcuQml0U2V0LmNyZWF0ZShmaXRGdW5jdGlvbi5wYXJhbWV0ZXJOYW1lcy5sZW5ndGggKiAyKTtcbiAgaWYgKHBhcmFtZXRlckJvdW5kcyAmJiBwYXJhbWV0ZXJCb3VuZHMubGVuZ3RoICE9PSAwKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVyQm91bmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGFyYW1ldGVyQm91bmRzW2ldLm1pbiAhPT0gdW5kZWZpbmVkICYmIHBhcmFtZXRlckJvdW5kc1tpXS5taW4gIT09IG51bGwpIHtcbiAgICAgICAgYm90dG9tUGFyYW1Cb3VuZHNbaV0gPSBwYXJhbWV0ZXJCb3VuZHNbaV0ubWluITtcbiAgICAgICAgcGFyYW1ldGVyQm91bmRzQml0c2V0LnNldChpICogMiwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1ldGVyQm91bmRzW2ldLm1heCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtZXRlckJvdW5kc1tpXS5tYXggIT09IG51bGwpIHtcbiAgICAgICAgdG9wUGFyYW1Cb3VuZHNbaV0gPSBwYXJhbWV0ZXJCb3VuZHNbaV0ubWF4ITtcbiAgICAgICAgcGFyYW1ldGVyQm91bmRzQml0c2V0LnNldChpICogMiArIDEsIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICBjb25zdCBnZXRDb25zaXN0ZW5jeSA9IChleHRyZW11bTogRXh0cmVtdW0pID0+IHtcbiAgICBjb25zdCByZXNpZHVhbHMgPSBvZihleHRyZW11bS5wb2ludCkucmVzaWR1YWxzO1xuICAgIGxldCBxMXE0ID0gMDtcbiAgICBsZXQgcTJxMyA9IDA7XG4gICAgLy8gVE9ETzogcmV3cml0ZSBxdWFydGlsZXMgdG8gYSBiZXR0ZXIgY29uZGl0aW9uXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZXNpZHVhbHMubGVuZ3RoIC8gNCA+IGkpXG4gICAgICAgIHExcTQgKz0gTWF0aC5wb3cocmVzaWR1YWxzW2ldLCAyKTtcbiAgICAgIGVsc2UgaWYgKDMgKiByZXNpZHVhbHMubGVuZ3RoIC8gNCA+IGkpXG4gICAgICAgIHEycTMgKz0gTWF0aC5wb3cocmVzaWR1YWxzW2ldLCAyKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcTFxNCArPSBNYXRoLnBvdyhyZXNpZHVhbHNbaV0sIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcTFxNCAvIHEycTM7XG4gIH07XG5cbiAgbGV0IGl0ZXIgPSAtMTtcbiAgbGV0IGNvbnRpbnVlT3B0aW1pemF0aW9uID0gMDtcbiAgbGV0IHN0YXRpc3RpY3M6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBsZXQgb3B0aW1pemF0aW9uOiBPcHRpbWl6YXRpb25SZXN1bHQ7XG4gIGxldCBtaW5JZHggPSAwO1xuICBkbyB7XG4gICAgb3B0aW1pemF0aW9uID0gcGVyZm9ybU5lbGRlck1lYWRPcHRpbWl6YXRpb24ob2YsIGJvdHRvbVBhcmFtQm91bmRzLCB0b3BQYXJhbUJvdW5kcywge1xuICAgICAgdG9sZXJhbmNlOiBORUxERVJfTUVBRF9ERUZBVUxUUy5UT0xFUkFOQ0UsXG4gICAgICBtYXhJdGVyOiBORUxERVJfTUVBRF9ERUZBVUxUUy5NQVhfSVRFUixcbiAgICAgIG5vblplcm9QYXJhbTogTkVMREVSX01FQURfREVGQVVMVFMuTk9OX1pFUk9fUEFSQU0sXG4gICAgICBpbml0aWFsU2NhbGU6IE5FTERFUl9NRUFEX0RFRkFVTFRTLklOSVRJQUxfU0NBTEUsXG4gICAgICBzY2FsZVJlZmxlY3Rpb246IE5FTERFUl9NRUFEX0RFRkFVTFRTLlNDQUxFX1JFRkxFQ1RJT04sXG4gICAgICBzY2FsZUV4cGFuc2lvbjogTkVMREVSX01FQURfREVGQVVMVFMuU0NBTEVfRVhQQU5TSU9OLFxuICAgICAgc2NhbGVDb250cmFjdGlvbjogTkVMREVSX01FQURfREVGQVVMVFMuU0NBTEVfQ09OVFJBQ1RJT04sXG4gICAgfSwgMTAsIHBhcmFtVmFsdWVzKTtcblxuICAgIG1pbklkeCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvcHRpbWl6YXRpb24uZXh0cmVtdW1zLmxlbmd0aDsgaSsrKVxuICAgICAgaWYgKG9wdGltaXphdGlvbi5leHRyZW11bXNbaV0uY29zdCA8IG9wdGltaXphdGlvbi5leHRyZW11bXNbbWluSWR4XS5jb3N0KVxuICAgICAgICBtaW5JZHggPSBpO1xuXG4gICAgY29uc3QgbmV3U3RhdGlzdGljcyA9IGdldENvbnNpc3RlbmN5KG9wdGltaXphdGlvbi5leHRyZW11bXNbbWluSWR4XSk7XG4gICAgaWYgKHN0YXRpc3RpY3MgPT09IG51bGwpXG4gICAgICBzdGF0aXN0aWNzID0gbmV3U3RhdGlzdGljcztcbiAgICBlbHNlIGlmIChuZXdTdGF0aXN0aWNzIDwgc3RhdGlzdGljcykge1xuICAgICAgc3RhdGlzdGljcyA9IG5ld1N0YXRpc3RpY3M7XG4gICAgICBjb250aW51ZU9wdGltaXphdGlvbiA9IDA7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgIGNvbnRpbnVlT3B0aW1pemF0aW9uKys7XG5cbiAgICBpZiAoaXRlciA9PT0gLTEpIHtcbiAgICAgIGlmIChzdGF0aXN0aWNzIDw9IDIpXG4gICAgICAgIGJyZWFrO1xuICAgICAgaXRlcisrO1xuICAgIH1cblxuICAgIGlmIChpdGVyID4gNDApXG4gICAgICBicmVhaztcbiAgICBpZiAoY29udGludWVPcHRpbWl6YXRpb24gPT09IDMpXG4gICAgICBicmVhaztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml0RnVuY3Rpb24ucGFyYW1ldGVyTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghcGFyYW1ldGVyQm91bmRzQml0c2V0LmdldChpICogMikpXG4gICAgICAgIGJvdHRvbVBhcmFtQm91bmRzW2ldID0gcGFyYW1WYWx1ZXNbaV0gLSBNYXRoLmFicyhvcHRpbWl6YXRpb24uZXh0cmVtdW1zW21pbklkeF0ucG9pbnRbaV0gKiAoY29udGludWVPcHRpbWl6YXRpb24gKyAxLjUpKTtcbiAgICAgIGlmICghcGFyYW1ldGVyQm91bmRzQml0c2V0LmdldChpICogMiArIDEpKVxuICAgICAgICB0b3BQYXJhbUJvdW5kc1tpXSA9IHBhcmFtVmFsdWVzW2ldICsgTWF0aC5hYnMob3B0aW1pemF0aW9uLmV4dHJlbXVtc1ttaW5JZHhdLnBvaW50W2ldICogKGNvbnRpbnVlT3B0aW1pemF0aW9uICsgMS41KSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICBwYXJhbVZhbHVlcyA9IG9wdGltaXphdGlvbi5leHRyZW11bXNbbWluSWR4XS5wb2ludDtcbiAgY29uc3QgZml0dGVkQ3VydmUgPSBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uLCBwYXJhbVZhbHVlcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBmaXR0ZWRDdXJ2ZTogZml0dGVkQ3VydmUsXG4gICAgcGFyYW1ldGVyczogcGFyYW1WYWx1ZXMsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcikgPT4gbnVtYmVyLCBwYXJhbVZhbHVlczogRmxvYXQzMkFycmF5KTpcbiAoeDogbnVtYmVyKSA9PiBudW1iZXIge1xuICByZXR1cm4gKHg6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyhkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgcGFyYW1WYWx1ZXM6IEZsb2F0MzJBcnJheSxcbiAgY3VydmVGdW5jdGlvbjogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlciwgY29uZmlkZW5jZUxldmVsOiBudW1iZXIgPSAwLjA1LCBlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsVHlwZSk6XG4gIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMge1xuICBjb25zdCBlcnJvciA9IGdldFNpZ21hKGN1cnZlRnVuY3Rpb24sIGRhdGEsIGVycm9yTW9kZWwsIHBhcmFtVmFsdWVzKTtcbiAgY29uc3QgcXVhbnRpbGUgPSBqU3RhdC5ub3JtYWwuaW52KDEgLSBjb25maWRlbmNlTGV2ZWwvMiwgMCwgMSk7XG5cbiAgY29uc3QgdG9wID0gKHg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gICAgcmV0dXJuIHZhbHVlICsgcXVhbnRpbGUgKiAoZXJyb3Iuc2lnbWFBICsgTWF0aC5hYnModmFsdWUpICogZXJyb3Iuc2lnbWFCKTtcbiAgfTtcblxuICBjb25zdCBib3R0b20gPSAoeDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgICByZXR1cm4gdmFsdWUgLSBxdWFudGlsZSAqIChlcnJvci5zaWdtYUEgKyBNYXRoLmFicyh2YWx1ZSkgKiBlcnJvci5zaWdtYUIpO1xuICB9O1xuXG4gIHJldHVybiB7Y29uZmlkZW5jZVRvcDogdG9wLCBjb25maWRlbmNlQm90dG9tOiBib3R0b219O1xufVxuXG4vLyBUT0RPOiBmb3IgbGluZWFyIC0gc2xvcGUgLSBBLCBpbnRlcmNlcHRZIC0gQlxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpc3RpY3MoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtVmFsdWVzOiBGbG9hdDMyQXJyYXksXG4gIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKSA9PiBudW1iZXIsIHN0YXRpc3RpY3M6IGJvb2xlYW4gPSB0cnVlKTogRml0U3RhdGlzdGljcyB7XG4gIGNvbnN0IGZpdHRlZEN1cnZlID0gZ2V0Rml0dGVkQ3VydmUoY3VydmVGdW5jdGlvbiwgcGFyYW1WYWx1ZXMpO1xuXG4gIHJldHVybiB7XG4gICAgclNxdWFyZWQ6IHN0YXRpc3RpY3MgPyBnZXREZXRDb2VmZihmaXR0ZWRDdXJ2ZSwgZGF0YSkgOiB1bmRlZmluZWQsXG4gICAgYXVjOiBzdGF0aXN0aWNzID8gZ2V0QXVjKGZpdHRlZEN1cnZlLCBkYXRhKSA6IHVuZGVmaW5lZCxcbiAgICBpbnRlcmNlcHRYOiBwYXJhbVZhbHVlc1syXSxcbiAgICBpbnRlcmNlcHRZOiBmaXR0ZWRDdXJ2ZShwYXJhbVZhbHVlc1syXSksXG4gICAgc2xvcGU6IHBhcmFtVmFsdWVzWzFdLFxuICAgIHRvcDogcGFyYW1WYWx1ZXNbMF0sXG4gICAgYm90dG9tOiBwYXJhbVZhbHVlc1szXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludmVydGVkRnVuY3Rpb25zKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbVZhbHVlczogbnVtYmVyW10sXG4gIGNvbmZpZGVuY2VMZXZlbDogbnVtYmVyID0gMC4wNSwgc3RhdGlzdGljczogYm9vbGVhbiA9IHRydWUpOiBGaXRJbnZlcnRlZEZ1bmN0aW9ucyB8IG51bGwge1xuICBjb25zdCBzdHVkZW50USA9IGpTdGF0LnN0dWRlbnR0LmludigxIC0gY29uZmlkZW5jZUxldmVsIC8gMiwgZGF0YS54Lmxlbmd0aCAtIHBhcmFtVmFsdWVzLmxlbmd0aCk7XG5cbiAgbGV0IGludjogKHk6IG51bWJlcikgPT4gbnVtYmVyID0gKHk6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiAwO1xuICB9O1xuICBsZXQgaW52VG9wOiAoeTogbnVtYmVyKSA9PiBudW1iZXIgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIDA7XG4gIH07XG4gIGxldCBpbnZCb3R0b206ICh5OiBudW1iZXIpID0+IG51bWJlciA9ICh5OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gMDtcbiAgfTtcblxuICBpZiAoc3RhdGlzdGljcykge1xuICAgIGludiA9ICh5OiBudW1iZXIpID0+IHtcbiAgICAgIC8vc2hvdWxkIGNoZWNrIGlmIG1vcmUgdGhhbiBib3R0b20gYW5kIGxlc3MgdGhhbiB0b3BcbiAgICAgIHJldHVybiBwYXJhbVZhbHVlc1syXSAvIE1hdGgucG93KChwYXJhbVZhbHVlc1swXSAtIHkpIC8gKHkgLSBwYXJhbVZhbHVlc1szXSksIDEgLyBwYXJhbVZhbHVlc1sxXSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9yID0gZ2V0SW52RXJyb3IoaW52LCBkYXRhKTtcblxuICAgIGludlRvcCA9ICh5OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaW52KHkpO1xuICAgICAgcmV0dXJuIHZhbHVlICsgc3R1ZGVudFEgKiBlcnJvciAvIE1hdGguc3FydChkYXRhLnkubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgaW52Qm90dG9tID0gKHk6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnYoeSk7XG4gICAgICByZXR1cm4gdmFsdWUgLSBzdHVkZW50USAqIGVycm9yIC8gTWF0aC5zcXJ0KGRhdGEueS5sZW5ndGgpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW52ZXJ0ZWQ6IGludixcbiAgICAgIGludmVydGVkVG9wOiBpbnZUb3AsXG4gICAgICBpbnZlcnRlZEJvdHRvbTogaW52Qm90dG9tLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ21vaWQocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IEEgPSBwYXJhbXNbMF07XG4gIGNvbnN0IEIgPSBwYXJhbXNbMV07XG4gIGNvbnN0IEMgPSBwYXJhbXNbMl07XG4gIGNvbnN0IEQgPSBwYXJhbXNbM107XG4gIHJldHVybiAoRCArIChBIC0gRCkgLyAoMSArIE1hdGgucG93KDEwLCAoeCAtIEMpICogQikpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVhcihwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgQSA9IHBhcmFtc1swXTtcbiAgY29uc3QgQiA9IHBhcmFtc1sxXTtcbiAgcmV0dXJuIEEgKiB4ICsgQjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0xpbmVhcihwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgQSA9IHBhcmFtc1swXTtcbiAgY29uc3QgQiA9IHBhcmFtc1sxXTtcbiAgcmV0dXJuIEEgKiBNYXRoLmxvZyh4ICsgMSkgKyBCO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb25lbnRpYWwocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IEEgPSBwYXJhbXNbMF07XG4gIGNvbnN0IEIgPSBwYXJhbXNbMV07XG4gIHJldHVybiBBICogTWF0aC5leHAoeCAqIEIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXVjKGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IGF1YyA9IDA7XG4gIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLmRhdGEueCk7XG4gIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmRhdGEueCk7XG4gIGNvbnN0IGludGVncmF0aW9uU3RlcCA9IChtYXggLSBtaW4pIC8gMTAwMDtcbiAgZm9yIChsZXQgeCA9IG1pbjsgeCA8IG1heDsgeCs9IGludGVncmF0aW9uU3RlcClcbiAgICBhdWMgKz0gaW50ZWdyYXRpb25TdGVwICogZml0dGVkQ3VydmUoeCk7XG5cbiAgcmV0dXJuIGF1Yztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERldENvZWZmKGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNzUmVzID0gMDtcbiAgbGV0IHNzVG90ID0gMDtcbiAgY29uc3QgeU1lYW4gPSBqU3RhdC5tZWFuKGRhdGEueSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgc3NSZXMgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0gZml0dGVkQ3VydmUoZGF0YS54W2ldKSwgMik7XG4gICAgc3NUb3QgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0geU1lYW4sIDIpO1xuICB9XG5cbiAgcmV0dXJuIDEgLSBzc1JlcyAvIHNzVG90O1xufVxuXG5mdW5jdGlvbiBnZXRJbnZFcnJvcih0YXJnZXRGdW5jOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuICBjb25zdCByZXNpZHVlc1NxdWFyZXMgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGEueS5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9icyA9IGRhdGEueFtpXTtcbiAgICBjb25zdCBwcmVkID0gdGFyZ2V0RnVuYyhkYXRhLnlbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgc2lnbWFTcSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG5cbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICByZXR1cm4gc2lnbWE7XG59XG5cbmZ1bmN0aW9uIG9iamVjdGl2ZUZhY3RvcnkodGFyZ2V0RnVuYzogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgZGF0YToge3k6IG51bWJlcltdLCB4OiBudW1iZXJbXX0sIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlKTpcbiAgICAocGFyYW1zOiBGbG9hdDMyQXJyYXkpID0+IHtsaWtlbGlob29kOiBudW1iZXIsIHJlc2lkdWFsczogbnVtYmVyW119IHtcbiAgcmV0dXJuIChwYXJhbXM6IEZsb2F0MzJBcnJheSkgPT4ge1xuICAgIGxldCBsaWtlbGlob29kID0gMDtcbiAgICBsZXQgc2lnbWFBID0gMDtcbiAgICBsZXQgc2lnbWFCID0gMDtcblxuICAgIGNvbnN0IG9icyA9IGRhdGEueTtcbiAgICBjb25zdCBwcmVkID0gZGF0YS54Lm1hcCgoeCkgPT4gdGFyZ2V0RnVuYyhwYXJhbXMsIHgpKTtcbiAgICBjb25zdCByZXNpZHVhbHMgPSBvYnMubWFwKChvYnMsIGkpID0+IG9icyAtIHByZWRbaV0pO1xuICAgIGNvbnN0IHJlc2lkdWVzU3F1YXJlcyA9IHJlc2lkdWFscy5tYXAoKHJlcykgPT4gTWF0aC5wb3cocmVzLCAyKSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFtGaXRFcnJvck1vZGVsLkNPTlNUQU5ULCBGaXRFcnJvck1vZGVsLkNPTUJJTkVEXS5pbmNsdWRlcyhlcnJvck1vZGVsKSlcbiAgICAgICAgc2lnbWFBICs9IHJlc2lkdWVzU3F1YXJlc1tpXTtcbiAgICAgIGVsc2UgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuUFJPUE9SVElPTkFMKVxuICAgICAgICBzaWdtYUIgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldIC8gKHByZWRbaV0gKiBwcmVkW2ldKTtcbiAgICB9XG4gICAgc2lnbWFBID0gTWF0aC5zcXJ0KHNpZ21hQSAvIHJlc2lkdWVzU3F1YXJlcy5sZW5ndGgpO1xuICAgIHNpZ21hQiA9IE1hdGguc3FydChzaWdtYUIgLyByZXNpZHVlc1NxdWFyZXMubGVuZ3RoKTtcblxuICAgIGlmIChlcnJvck1vZGVsID09PSBGaXRFcnJvck1vZGVsLkNPTUJJTkVEKVxuICAgICAgKHtzaWdtYUEsIHNpZ21hQn0gPSBnZXRTaWdtYXNGb3JDb21iaW5lZEVycm9yTW9kZWwoc2lnbWFBLCBzaWdtYUIsIHJlc2lkdWVzU3F1YXJlcywgcHJlZCkpO1xuXG4gICAgY29uc3Qgc2lnbWFTcUk6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNpZ21hU3FJW2ldID0gTWF0aC5wb3coc2lnbWFBICsgc2lnbWFCICogcHJlZFtpXSwgMik7XG4gICAgICBsaWtlbGlob29kICs9IHJlc2lkdWVzU3F1YXJlc1tpXSAvIHNpZ21hU3FJW2ldICsgTWF0aC5sb2coMiAqIE1hdGguUEkgKiBzaWdtYVNxSVtpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtsaWtlbGlob29kLCByZXNpZHVhbHN9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRTaWdtYSh0YXJnZXRGdW5jOiAocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkYXRhOiB7eTogbnVtYmVyW10sIHg6IG51bWJlcltdfSwgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbFR5cGUsIHBhcmFtczogRmxvYXQzMkFycmF5KToge3NpZ21hQTogbnVtYmVyLCBzaWdtYUI6IG51bWJlcn0ge1xuICBsZXQgc2lnbWFBID0gMDtcbiAgbGV0IHNpZ21hQiA9IDA7XG5cbiAgY29uc3Qgb2JzID0gZGF0YS55O1xuICBjb25zdCBwcmVkID0gZGF0YS54Lm1hcCgoeCkgPT4gdGFyZ2V0RnVuYyhwYXJhbXMsIHgpKTtcbiAgY29uc3QgcmVzaWR1YWxzID0gb2JzLm1hcCgob2JzLCBpKSA9PiBvYnMgLSBwcmVkW2ldKTtcbiAgY29uc3QgcmVzaWR1ZXNTcXVhcmVzID0gcmVzaWR1YWxzLm1hcCgocmVzKSA9PiBNYXRoLnBvdyhyZXMsIDIpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChbRml0RXJyb3JNb2RlbC5DT05TVEFOVCwgRml0RXJyb3JNb2RlbC5DT01CSU5FRF0uaW5jbHVkZXMoZXJyb3JNb2RlbCkpXG4gICAgICBzaWdtYUEgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldO1xuICAgIGVsc2UgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuUFJPUE9SVElPTkFMKVxuICAgICAgc2lnbWFCICs9IE1hdGgucG93KHJlc2lkdWFsc1tpXSAvIE1hdGguYWJzKHByZWRbaV0pLCAyKTtcbiAgfVxuICBzaWdtYUEgPSBNYXRoLnNxcnQoc2lnbWFBIC8gcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aCk7XG4gIHNpZ21hQiA9IE1hdGguc3FydChzaWdtYUIgLyByZXNpZHVlc1NxdWFyZXMubGVuZ3RoKTtcblxuICBpZiAoZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5DT01CSU5FRClcbiAgICAoe3NpZ21hQSwgc2lnbWFCfSA9IGdldFNpZ21hc0ZvckNvbWJpbmVkRXJyb3JNb2RlbChzaWdtYUEsIHNpZ21hQiwgcmVzaWR1ZXNTcXVhcmVzLCBwcmVkKSk7XG5cbiAgcmV0dXJuIHtzaWdtYUEsIHNpZ21hQn07XG59XG5cbmZ1bmN0aW9uIGdldFNpZ21hc0ZvckNvbWJpbmVkRXJyb3JNb2RlbChzaWdtYUE6IG51bWJlciwgc2lnbWFCOiBudW1iZXIsIHJlc2lkdWVzU3F1YXJlczogbnVtYmVyW10sIHByZWQ6IG51bWJlcltdKTpcbiAge3NpZ21hQTogbnVtYmVyLCBzaWdtYUI6IG51bWJlcn0ge1xuICBsZXQgbGlrZWxpaG9vZENvbWJpbmVkID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgbGV0IGZpbmFsUHJvcG9ydGlvbiA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IDEwOyBpKyspIHtcbiAgICBsZXQgbGlrZWxpaG9vZENvbWJpbmVkTG9jYWwgPSAwO1xuICAgIGNvbnN0IHByb3BvcnRpb24gPSBpIC8gMTA7XG4gICAgY29uc3Qgc2lnbWFBQ29tYmluZWQgPSBzaWdtYUEgKiBwcm9wb3J0aW9uO1xuICAgIGNvbnN0IHNpZ21hQkNvbWJpbmVkID0gc2lnbWFBICogKDEgLSBwcm9wb3J0aW9uKTtcbiAgICBjb25zdCBzaWdtYVNxSUNvbWJpbmVkOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzaWdtYVNxSUNvbWJpbmVkW2ldID0gTWF0aC5wb3coc2lnbWFBQ29tYmluZWQgKyBzaWdtYUJDb21iaW5lZCAqIHByZWRbaV0sIDIpO1xuICAgICAgbGlrZWxpaG9vZENvbWJpbmVkTG9jYWwgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldIC8gc2lnbWFTcUlDb21iaW5lZFtpXSArIE1hdGgubG9nKDIgKiBNYXRoLlBJICogc2lnbWFTcUlDb21iaW5lZFtpXSk7XG4gICAgfVxuICAgIGlmIChsaWtlbGlob29kQ29tYmluZWRMb2NhbCA8IGxpa2VsaWhvb2RDb21iaW5lZCkge1xuICAgICAgbGlrZWxpaG9vZENvbWJpbmVkID0gbGlrZWxpaG9vZENvbWJpbmVkTG9jYWw7XG4gICAgICBmaW5hbFByb3BvcnRpb24gPSBwcm9wb3J0aW9uO1xuICAgIH1cbiAgfVxuICBzaWdtYUIgPSBzaWdtYUEgKiAoMSAtIGZpbmFsUHJvcG9ydGlvbik7XG4gIHNpZ21hQSA9IHNpZ21hQSAqIGZpbmFsUHJvcG9ydGlvbjtcblxuICByZXR1cm4ge3NpZ21hQSwgc2lnbWFCfTtcbn1cbiJdfQ==
@@ -10,7 +10,10 @@ export declare type OptimizationResult = {
10
10
  fails: DG.DataFrame | null;
11
11
  };
12
12
  export interface IOptimizer {
13
- (objectiveFunc: (x: Float32Array) => number, paramsInitial: Float32Array, settings: any, restrictionsBottom: Float32Array, restrictionsTop: Float32Array): Extremum;
13
+ (objectiveFunc: (x: Float32Array) => {
14
+ likelihood: number;
15
+ residuals: number[];
16
+ }, paramsInitial: Float32Array, settings: any, restrictionsBottom: Float32Array, restrictionsTop: Float32Array): Extremum;
14
17
  }
15
18
  /** Inconsistent tables error */
16
19
  export declare class InconsistentTables extends Error {
@@ -1 +1 @@
1
- {"version":3,"file":"optimizer-misc.d.ts","sourceRoot":"","sources":["optimizer-misc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,oBAAY,QAAQ,GAAG;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAA;AAED,oBAAY,kBAAkB,GAAG;IAC/B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,MAAM,EAC3C,aAAa,EAAE,YAAY,EAC3B,QAAQ,EAAE,GAAG,EACb,kBAAkB,EAAE,YAAY,EAChC,eAAe,EAAE,YAAY,GAAG,QAAQ,CAAC;CAC1C;AAED,gCAAgC;AAChC,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,GAAG,EAAE,MAAM;CAGxB"}
1
+ {"version":3,"file":"optimizer-misc.d.ts","sourceRoot":"","sources":["optimizer-misc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,oBAAY,QAAQ,GAAG;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAA;AAED,oBAAY,kBAAkB,GAAG;IAC/B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAC,EAC9E,aAAa,EAAE,YAAY,EAC3B,QAAQ,EAAE,GAAG,EACb,kBAAkB,EAAE,YAAY,EAChC,eAAe,EAAE,YAAY,GAAG,QAAQ,CAAC;CAC1C;AAED,gCAAgC;AAChC,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,GAAG,EAAE,MAAM;CAGxB"}
@@ -4,4 +4,4 @@ export class InconsistentTables extends Error {
4
4
  super(msg);
5
5
  }
6
6
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLW1pc2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvcHRpbWl6ZXItbWlzYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3QkEsZ0NBQWdDO0FBQ2hDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxLQUFLO0lBQzNDLFlBQVksR0FBVztRQUNyQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBPcHRpbWl6ZXIgcm91dGluZVxuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuXG5leHBvcnQgdHlwZSBFeHRyZW11bSA9IHtcbiAgcG9pbnQ6IEZsb2F0MzJBcnJheSxcbiAgY29zdDogbnVtYmVyLFxuICBpdGVyQ29zdHM6IG51bWJlcltdLFxuICBpdGVyQ291bnQ6IG51bWJlcixcbn1cblxuZXhwb3J0IHR5cGUgT3B0aW1pemF0aW9uUmVzdWx0ID0ge1xuICBleHRyZW11bXM6IEV4dHJlbXVtW10sXG4gIGZhaWxzOiBERy5EYXRhRnJhbWUgfCBudWxsLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJT3B0aW1pemVyIHtcbiAgKG9iamVjdGl2ZUZ1bmM6ICh4OiBGbG9hdDMyQXJyYXkpID0+IG51bWJlcixcbiAgcGFyYW1zSW5pdGlhbDogRmxvYXQzMkFycmF5LFxuICBzZXR0aW5nczogYW55LFxuICByZXN0cmljdGlvbnNCb3R0b206IEZsb2F0MzJBcnJheSxcbiAgcmVzdHJpY3Rpb25zVG9wOiBGbG9hdDMyQXJyYXkpOiBFeHRyZW11bTtcbn1cblxuLyoqIEluY29uc2lzdGVudCB0YWJsZXMgZXJyb3IgKi9cbmV4cG9ydCBjbGFzcyBJbmNvbnNpc3RlbnRUYWJsZXMgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nKSB7XG4gICAgc3VwZXIobXNnKTtcbiAgfVxufVxuIl19
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLW1pc2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvcHRpbWl6ZXItbWlzYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3QkEsZ0NBQWdDO0FBQ2hDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxLQUFLO0lBQzNDLFlBQVksR0FBVztRQUNyQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBPcHRpbWl6ZXIgcm91dGluZVxuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuXG5leHBvcnQgdHlwZSBFeHRyZW11bSA9IHtcbiAgcG9pbnQ6IEZsb2F0MzJBcnJheSxcbiAgY29zdDogbnVtYmVyLFxuICBpdGVyQ29zdHM6IG51bWJlcltdLFxuICBpdGVyQ291bnQ6IG51bWJlcixcbn1cblxuZXhwb3J0IHR5cGUgT3B0aW1pemF0aW9uUmVzdWx0ID0ge1xuICBleHRyZW11bXM6IEV4dHJlbXVtW10sXG4gIGZhaWxzOiBERy5EYXRhRnJhbWUgfCBudWxsLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJT3B0aW1pemVyIHtcbiAgKG9iamVjdGl2ZUZ1bmM6ICh4OiBGbG9hdDMyQXJyYXkpID0+IHtsaWtlbGlob29kOiBudW1iZXIsIHJlc2lkdWFsczogbnVtYmVyW119LFxuICBwYXJhbXNJbml0aWFsOiBGbG9hdDMyQXJyYXksXG4gIHNldHRpbmdzOiBhbnksXG4gIHJlc3RyaWN0aW9uc0JvdHRvbTogRmxvYXQzMkFycmF5LFxuICByZXN0cmljdGlvbnNUb3A6IEZsb2F0MzJBcnJheSk6IEV4dHJlbXVtO1xufVxuXG4vKiogSW5jb25zaXN0ZW50IHRhYmxlcyBlcnJvciAqL1xuZXhwb3J0IGNsYXNzIEluY29uc2lzdGVudFRhYmxlcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtc2cpO1xuICB9XG59XG4iXX0=
@@ -41,7 +41,7 @@ function getInitialParams(objectiveFunc, settings, paramsInitial, restrictionsBo
41
41
  optParams[i][j] = restrictionsTop[j];
42
42
  }
43
43
  }
44
- pointObjectives[i] = objectiveFunc(optParams[i]);
44
+ pointObjectives[i] = objectiveFunc(optParams[i]).likelihood;
45
45
  }
46
46
  return [optParams, pointObjectives];
47
47
  }
@@ -114,11 +114,11 @@ export const optimizeNM = function (objectiveFunc, paramsInitial, settings, rest
114
114
  fillCentroid(centroid, dimParams, indexes[lastIndex], optParams);
115
115
  // reflection
116
116
  fillPoint(centroid, reflectionPoint, indexes[lastIndex], optParams, scaleReflection, dimParams, restrictionsBottom, restrictionsTop);
117
- const reflectionScore = objectiveFunc(reflectionPoint);
117
+ const reflectionScore = objectiveFunc(reflectionPoint).likelihood;
118
118
  // expansion
119
119
  if (reflectionScore < pointObjectives[indexes[lastIndex]]) {
120
120
  fillPoint(centroid, expansionPoint, indexes[lastIndex], optParams, scaleExpansion, dimParams, restrictionsBottom, restrictionsTop);
121
- const expansionScore = objectiveFunc(expansionPoint);
121
+ const expansionScore = objectiveFunc(expansionPoint).likelihood;
122
122
  if (expansionScore < reflectionScore) {
123
123
  pointObjectives[indexes[lastIndex]] = expansionScore;
124
124
  for (let i = 0; i < dimParams; i++)
@@ -134,7 +134,7 @@ export const optimizeNM = function (objectiveFunc, paramsInitial, settings, rest
134
134
  }
135
135
  // Contraction
136
136
  fillPoint(centroid, contractionPoint, indexes[lastIndex], optParams, scaleContraction, dimParams, restrictionsBottom, restrictionsTop);
137
- const contractionScore = objectiveFunc(contractionPoint);
137
+ const contractionScore = objectiveFunc(contractionPoint).likelihood;
138
138
  if (contractionScore < pointObjectives[indexes[lastIndex]]) {
139
139
  pointObjectives[indexes[lastIndex]] = contractionScore;
140
140
  for (let i = 0; i < dimParams; i++)
@@ -153,4 +153,4 @@ export const optimizeNM = function (objectiveFunc, paramsInitial, settings, rest
153
153
  iterCount: iteration - 1,
154
154
  };
155
155
  };
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLW5lbGRlci1tZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsib3B0aW1pemVyLW5lbGRlci1tZWFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNBLGdEQUFnRDtBQUNoRCxNQUFNLENBQU4sSUFBWSxvQkFRWDtBQVJELFdBQVksb0JBQW9CO0lBQzlCLDRFQUFnQixDQUFBO0lBQ2hCLHdFQUFhLENBQUE7SUFDYix3RkFBdUIsQ0FBQTtJQUN2QixvRkFBb0IsQ0FBQTtJQUNwQix1RkFBb0IsQ0FBQTtJQUNwQixxRkFBbUIsQ0FBQTtJQUNuQiw0RkFBd0IsQ0FBQTtBQUMxQixDQUFDLEVBUlcsb0JBQW9CLEtBQXBCLG9CQUFvQixRQVEvQjtBQUVELG1EQUFtRDtBQUNuRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN4QyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUM7SUFDMUIsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUM7SUFDN0IsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUM7SUFDbEMsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDO0lBQ2pDLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUM7SUFDdkMsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQztJQUNyQyxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDO0NBQzFDLENBQUMsQ0FBQztBQUVILFNBQVMsZ0JBQWdCLENBQ3ZCLGFBQTBDLEVBQzFDLFFBQTRCLEVBQzVCLGFBQTJCLEVBQzNCLGtCQUFnQyxFQUNoQyxlQUE2QjtJQUM3QixNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNyQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDM0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFlB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LEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzFDO0lBRUQsT0FBTztRQUNMLEtBQUssRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFNBQVMsRUFBRSxTQUFTLEdBQUcsQ0FBQztLQUN6QixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFeHRyZW11bSwgSU9wdGltaXplcn0gZnJvbSAnLi9vcHRpbWl6ZXItbWlzYyc7XG5cblxuLyoqIFRoZSBOZWxkZXItTWVhZCBtZXRob2Qgc2V0dGluZ3MgKi9cbmV4cG9ydCB0eXBlIE5lbGRlck1lYWRTZXR0aW5ncyA9IHtcbiAgdG9sZXJhbmNlOiBudW1iZXIsXG4gIG1heEl0ZXI6IG51bWJlcixcbiAgbm9uWmVyb1BhcmFtOiBudW1iZXIsXG4gIGluaXRpYWxTY2FsZTogbnVtYmVyLFxuICBzY2FsZVJlZmxlY3Rpb246IG51bWJlcixcbiAgc2NhbGVFeHBhbnNpb246IG51bWJlcixcbiAgc2NhbGVDb250cmFjdGlvbjogbnVtYmVyLFxufTtcblxuLyoqIERlZmF1bHQgdmFsdWVzIGZvciB0aGUgTmVsZGVyLU1lYWQgbWV0aG9kICovXG5leHBvcnQgZW51bSBORUxERVJfTUVBRF9ERUZBVUxUUyB7XG4gIFRPTEVSQU5DRSA9IDAuMDEsXG4gIE1BWF9JVEVSID0gMjAsXG4gIE5PTl9aRVJPX1BBUkFNID0gMC4wMDAxLFxuICBJTklUSUFMX1NDQUxFID0gMC4wMixcbiAgU0NBTEVfUkVGTEVDVElPTiA9IDEsXG4gIFNDQUxFX0VYUEFOU0lPTiA9IDIsXG4gIFNDQUxFX0NPTlRSQUNUSU9OID0gLTAuNSxcbn1cblxuLyoqIENhcHRpb25zIGZvciB0aGUgTmVsZGVyLU1lYWQgbWV0aG9kIHNldHRpbmdzICovXG5leHBvcnQgY29uc3QgbmVsZGVyTWVhZENhcHRpb25zID0gbmV3IE1hcChbXG4gIFsndG9sZXJhbmNlJywgJ1RvbGVyYW5jZSddLFxuICBbJ21heEl0ZXInLCAnTWF4IGl0ZXJhdGlvbnMnXSxcbiAgWydub25aZXJvUGFyYW0nLCAnTm9uLXplcm8gcGFyYW0nXSxcbiAgWydpbml0aWFsU2NhbGUnLCAnSW5pdGlhbCBzY2FsZSddLFxuICBbJ3NjYWxlUmVmbGVjdGlvbicsICdTY2FsZSByZWZsZWN0aW9uJ10sXG4gIFsnc2NhbGVFeHBhbnNpb24nLCAnU2NhbGUgZXhwYW5zaW9uJ10sXG4gIFsnc2NhbGVDb250cmFjdGlvbicsICdTY2FsZSBjb250cmFjdGlvbiddLFxuXSk7XG5cbmZ1bmN0aW9uIGdldEluaXRpYWxQYXJhbXMoXG4gIG9iamVjdGl2ZUZ1bmM6ICh4OiBGbG9hdDMyQXJyYXkpID0+IG51bWJlcixcbiAgc2V0dGluZ3M6IE5lbGRlck1lYWRTZXR0aW5ncyxcbiAgcGFyYW1zSW5pdGlhbDogRmxvYXQzMkFycmF5LFxuICByZXN0cmljdGlvbnNCb3R0b206IEZsb2F0MzJBcnJheSxcbiAgcmVzdHJpY3Rpb25zVG9wOiBGbG9hdDMyQXJyYXkpOiBbRmxvYXQzMkFycmF5W10sIG51bWJlcltdXSB7XG4gIGNvbnN0IGRpbSA9IHBhcmFtc0luaXRpYWwubGVuZ3RoICsgMTtcbiAgY29uc3QgZGltUGFyYW1zID0gcGFyYW1zSW5pdGlhbC5sZW5ndGg7XG4gIGNvbnN0IG5vblplcm9QYXJhbSA9IHNldHRpbmdzLm5vblplcm9QYXJhbTtcbiAgY29uc3QgaW5pdFNjYWxlID0gc2V0dGluZ3MuaW5pdGlhbFNjYWxlO1xuXG4gIGNvbnN0IG9wdFBhcmFtcyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGRpbSk7XG4gIGNvbnN0IHBvaW50T2JqZWN0aXZlcyA9IG5ldyBBcnJheTxudW1iZXI+KGRpbSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW07IGkrKykge1xuICAgIG9wdFBhcmFtc1tpXSA9IG5ldyBGbG9hdDMyQXJyYXkoZGltUGFyYW1zKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpbVBhcmFtczsgaisrKSB7XG4gICAgICBvcHRQYXJhbXNbaV1bal0gPSBwYXJhbXNJbml0aWFsW2pdO1xuICAgICAgaWYgKGkgIT09IDAgJiYgaSAtIDEgPT09IGopIHtcbiAgICAgICAgaWYgKHBhcmFtc0luaXRpYWxbal0gPT09IDApXG4gICAgICAgICAgb3B0UGFyYW1zW2ldW2pdID0gbm9uWmVyb1BhcmFtO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgb3B0UGFyYW1zW2ldW2pdICs9IGluaXRTY2FsZSAqIHBhcmFtc0luaXRpYWxbaSAtIDFdO1xuXG4gICAgICAgIGlmIChvcHRQYXJhbXNbaV1bal0gPCByZXN0cmljdGlvbnNCb3R0b21bal0pXG4gICAgICAgICAgb3B0UGFyYW1zW2ldW2pdID0gcmVzdHJpY3Rpb25zQm90dG9tW2pdO1xuICAgICAgICBlbHNlIGlmIChvcHRQYXJhbXNbaV1bal0gPiByZXN0cmljdGlvbnNUb3Bbal0pXG4gICAgICAgICAgb3B0UGFyYW1zW2ldW2pdID0gcmVzdHJpY3Rpb25zVG9wW2pdO1xuICAgICAgfVxuICAgIH1cbiAgICBwb2ludE9iamVjdGl2ZXNbaV0gPSBvYmplY3RpdmVGdW5jKG9wdFBhcmFtc1tpXSk7XG4gIH1cblxuICByZXR1cm4gW29wdFBhcmFtcywgcG9pbnRPYmplY3RpdmVzXTtcbn1cblxuZnVuY3Rpb24gZmlsbENlbnRyb2lkKGNlbnRyb2lkOiBGbG9hdDMyQXJyYXksIGRpbVBhcmFtczogbnVtYmVyLCBsYXN0SW5kZXg6IG51bWJlciwgb3B0UGFyYW1zOiBGbG9hdDMyQXJyYXlbXSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbVBhcmFtczsgaSsrKSB7XG4gICAgbGV0IHZhbCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBkaW1QYXJhbXMgKyAxOyBqKyspIHtcbiAgICAgIGlmIChqICE9PSBsYXN0SW5kZXgpXG4gICAgICAgIHZhbCArPSBvcHRQYXJhbXNbal1baV07XG4gICAgfVxuICAgIGNlbnRyb2lkW2ldID0gdmFsIC8gZGltUGFyYW1zO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbGxQb2ludChcbiAgY2VudHJvaWQ6IEZsb2F0MzJBcnJheSwgcG9pbnQ6IEZsb2F0MzJBcnJheSxcbiAgbGFzdEluZGV4OiBudW1iZXIsIG9wdFBhcmFtczogRmxvYXQzMkFycmF5W10sXG4gIHNjYWxlOiBudW1iZXIsIGRpbVBhcmFtczogbnVtYmVyLFxuICByZXN0cmljdGlvbnNCb3R0b206IEZsb2F0MzJBcnJheSxcbiAgcmVzdHJpY3Rpb25zVG9wOiBGbG9hdDMyQXJyYXkpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1QYXJhbXM7IGkrKykge1xuICAgIHBvaW50W2ldID0gY2VudHJvaWRbaV07XG4gICAgcG9pbnRbaV0gKz0gc2NhbGUgKiAoY2VudHJvaWRbaV0gLSBvcHRQYXJhbXNbbGFzdEluZGV4XVtpXSk7XG5cbiAgICBpZiAocG9pbnRbaV0gPCByZXN0cmljdGlvbnNCb3R0b21baV0pXG4gICAgICBwb2ludFtpXSA9IHJlc3RyaWN0aW9uc0JvdHRvbVtpXTtcbiAgICBlbHNlIGlmIChwb2ludFtpXSA+IHJlc3RyaWN0aW9uc1RvcFtpXSlcbiAgICAgIHBvaW50W2ldID0gcmVzdHJpY3Rpb25zVG9wW2ldO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBvcHRpbWl6ZU5NOiBJT3B0aW1pemVyID0gZnVuY3Rpb24oXG4gIG9iamVjdGl2ZUZ1bmM6ICh4OiBGbG9hdDMyQXJyYXkpID0+IG51bWJlcixcbiAgcGFyYW1zSW5pdGlhbDogRmxvYXQzMkFycmF5LFxuICBzZXR0aW5nczogTmVsZGVyTWVhZFNldHRpbmdzLFxuICByZXN0cmljdGlvbnNCb3R0b206IEZsb2F0MzJBcnJheSxcbiAgcmVzdHJpY3Rpb25zVG9wOiBGbG9hdDMyQXJyYXkpOiBFeHRyZW11bSB7XG4gIC8vIFNldHRpbmdzIGluaXRpYWxpemF0aW9uXG4gIGNvbnN0IHRvbGVyYW5jZSA9IHNldHRpbmdzLnRvbGVyYW5jZTtcbiAgY29uc3QgbWF4SXRlciA9IHNldHRpbmdzLm1heEl0ZXI7XG5cbiAgY29uc3Qgc2NhbGVSZWZsZWN0aW9uID0gc2V0dGluZ3Muc2NhbGVSZWZsZWN0aW9uO1xuICBjb25zdCBzY2FsZUV4cGFuc2lvbiA9IHNldHRpbmdzLnNjYWxlRXhwYW5zaW9uO1xuICBjb25zdCBzY2FsZUNvbnRyYWN0aW9uID0gc2V0dGluZ3Muc2NhbGVDb250cmFjdGlvbjtcbiAgY29uc3QgZGltID0gcGFyYW1zSW5pdGlhbC5sZW5ndGggKyAxO1xuICBjb25zdCBkaW1QYXJhbXMgPSBwYXJhbXNJbml0aWFsLmxlbmd0aDtcblxuICBjb25zdCBbb3B0UGFyYW1zLCBwb2ludE9iamVjdGl2ZXNdID1cbiAgICBnZXRJbml0aWFsUGFyYW1zKG9iamVjdGl2ZUZ1bmMsIHNldHRpbmdzLCBwYXJhbXNJbml0aWFsLCByZXN0cmljdGlvbnNCb3R0b20sIHJlc3RyaWN0aW9uc1RvcCk7XG5cbiAgY29uc3QgaW5kZXhlcyA9IG5ldyBBcnJheTxudW1iZXI+KGRpbSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGltOyBpKyspXG4gICAgaW5kZXhlc1tpXSA9IGk7XG5cbiAgY29uc3QgbGFzdEluZGV4ID0gaW5kZXhlcy5sZW5ndGggLSAxO1xuICBsZXQgaXRlcmF0aW9uID0gMDtcbiAgbGV0IGJlc3QgPSAwO1xuICBsZXQgcHJldmlvdXNCZXN0ID0gMDtcbiAgbGV0IG5vSW1wcm92ZW1lbnQgPSAwO1xuXG4gIGNvbnN0IGNlbnRyb2lkID0gbmV3IEZsb2F0MzJBcnJheShkaW1QYXJhbXMpO1xuICBjb25zdCByZWZsZWN0aW9uUG9pbnQgPSBuZXcgRmxvYXQzMkFycmF5KGRpbVBhcmFtcyk7XG4gIGNvbnN0IGV4cGFuc2lvblBvaW50ID0gbmV3IEZsb2F0MzJBcnJheShkaW1QYXJhbXMpO1xuICBjb25zdCBjb250cmFjdGlvblBvaW50ID0gbmV3IEZsb2F0MzJBcnJheShkaW1QYXJhbXMpO1xuICBjb25zdCBjb3N0cyA9IG5ldyBBcnJheTxudW1iZXI+KG1heEl0ZXIpO1xuXG4gIGlmIChkaW0gPiAxKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGluZGV4ZXMuc29ydCgoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHBvaW50T2JqZWN0aXZlc1thXSAtIHBvaW50T2JqZWN0aXZlc1tiXTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGl0ZXJhdGlvbiA+IG1heEl0ZXIpXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBpZiAoaXRlcmF0aW9uID09PSAwKSB7XG4gICAgICAgIGJlc3QgPSBwb2ludE9iamVjdGl2ZXNbMF07XG4gICAgICAgIHByZXZpb3VzQmVzdCA9IDIgKiBwb2ludE9iamVjdGl2ZXNbaW5kZXhlc1swXV07XG4gICAgICB9XG4gICAgICBjb3N0c1tpdGVyYXRpb25dID0gYmVzdDtcblxuICAgICAgKytpdGVyYXRpb247XG5cbiAgICAgIGJlc3QgPSBwb2ludE9iamVjdGl2ZXNbaW5kZXhlc1swXV07XG4gICAgICBpZiAocHJldmlvdXNCZXN0IC0gYmVzdCA+IHRvbGVyYW5jZSlcbiAgICAgICAgbm9JbXByb3ZlbWVudCA9IDA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgKytub0ltcHJvdmVtZW50O1xuICAgICAgICBpZiAobm9JbXByb3ZlbWVudCA+IDIgKiBkaW0pXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzQmVzdCA9IGJlc3Q7XG5cbiAgICAgIC8vIGNlbnRyb2lkXG4gICAgICBmaWxsQ2VudHJvaWQoY2VudHJvaWQsIGRpbVBhcmFtcywgaW5kZXhlc1tsYXN0SW5kZXhdLCBvcHRQYXJhbXMpO1xuXG4gICAgICAvLyByZWZsZWN0aW9uXG4gICAgICBmaWxsUG9pbnQoY2VudHJvaWQsIHJlZmxlY3Rpb25Qb2ludCwgaW5kZXhlc1tsYXN0SW5kZXhdLFxuICAgICAgICBvcHRQYXJhbXMsIHNjYWxlUmVmbGVjdGlvbiwgZGltUGFyYW1zLCByZXN0cmljdGlvbnNCb3R0b20sIHJlc3RyaWN0aW9uc1RvcCk7XG4gICAgICBjb25zdCByZWZsZWN0aW9uU2NvcmUgPSBvYmplY3RpdmVGdW5jKHJlZmxlY3Rpb25Qb2ludCk7XG5cbiAgICAgIC8vIGV4cGFuc2lvblxuICAgICAgaWYgKHJlZmxlY3Rpb25TY29yZSA8IHBvaW50T2JqZWN0aXZlc1tpbmRleGVzW2xhc3RJbmRleF1dKSB7XG4gICAgICAgIGZpbGxQb2ludChjZW50cm9pZCwgZXhwYW5zaW9uUG9pbnQsIGluZGV4ZXNbbGFzdEluZGV4XSxcbiAgICAgICAgICBvcHRQYXJhbXMsIHNjYWxlRXhwYW5zaW9uLCBkaW1QYXJhbXMsIHJlc3RyaWN0aW9uc0JvdHRvbSwgcmVzdHJpY3Rpb25zVG9wKTtcblxuICAgICAgICBjb25zdCBleHBhbnNpb25TY29yZSA9IG9iamVjdGl2ZUZ1bmMoZXhwYW5zaW9uUG9pbnQpO1xuXG4gICAgICAgIGlmIChleHBhbnNpb25TY29yZSA8IHJlZmxlY3Rpb25TY29yZSkge1xuICAgICAgICAgIHBvaW50T2JqZWN0aXZlc1tpbmRleGVzW2xhc3RJbmRleF1dID0gZXhwYW5zaW9uU2NvcmU7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbVBhcmFtczsgaSsrKVxuICAgICAgICAgICAgb3B0UGFyYW1zW2luZGV4ZXNbbGFzdEluZGV4XV1baV0gPSBleHBhbnNpb25Qb2ludFtpXTtcblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHBvaW50T2JqZWN0aXZlc1tpbmRleGVzW2xhc3RJbmRleF1dID0gcmVmbGVjdGlvblNjb3JlO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1QYXJhbXM7IGkrKylcbiAgICAgICAgICAgIG9wdFBhcmFtc1tpbmRleGVzW2xhc3RJbmRleF1dW2ldID0gcmVmbGVjdGlvblBvaW50W2ldO1xuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ29udHJhY3Rpb25cbiAgICAgIGZpbGxQb2ludChjZW50cm9pZCwgY29udHJhY3Rpb25Qb2ludCwgaW5kZXhlc1tsYXN0SW5kZXhdLFxuICAgICAgICBvcHRQYXJhbXMsIHNjYWxlQ29udHJhY3Rpb24sIGRpbVBhcmFtcywgcmVzdHJpY3Rpb25zQm90dG9tLCByZXN0cmljdGlvbnNUb3ApO1xuXG4gICAgICBjb25zdCBjb250cmFjdGlvblNjb3JlID0gb2JqZWN0aXZlRnVuYyhjb250cmFjdGlvblBvaW50KTtcblxuICAgICAgaWYgKGNvbnRyYWN0aW9uU2NvcmUgPCBwb2ludE9iamVjdGl2ZXNbaW5kZXhlc1tsYXN0SW5kZXhdXSkge1xuICAgICAgICBwb2ludE9iamVjdGl2ZXNbaW5kZXhlc1tsYXN0SW5kZXhdXSA9IGNvbnRyYWN0aW9uU2NvcmU7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1QYXJhbXM7IGkrKylcbiAgICAgICAgICBvcHRQYXJhbXNbaW5kZXhlc1tsYXN0SW5kZXhdXVtpXSA9IGNvbnRyYWN0aW9uUG9pbnRbaV07XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBpdGVyYXRpb247IGkgPCBtYXhJdGVyOyBpKyspXG4gICAgICBjb3N0c1tpXSA9IHBvaW50T2JqZWN0aXZlc1tpbmRleGVzWzBdXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcG9pbnQ6IG9wdFBhcmFtc1tpbmRleGVzWzBdXSxcbiAgICBjb3N0OiBwb2ludE9iamVjdGl2ZXNbaW5kZXhlc1swXV0sXG4gICAgaXRlckNvc3RzOiBjb3N0cyxcbiAgICBpdGVyQ291bnQ6IGl0ZXJhdGlvbiAtIDEsXG4gIH07XG59O1xuIl19
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLW5lbGRlci1tZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsib3B0aW1pemVyLW5lbGRlci1tZWFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNBLGdEQUFnRDtBQUNoRCxNQUFNLENBQU4sSUFBWSxvQkFRWDtBQVJELFdBQVksb0JBQW9CO0lBQzlCLDRFQUFnQixDQUFBO0lBQ2hCLHdFQUFhLENBQUE7SUFDYix3RkFBdUIsQ0FBQTtJQUN2QixvRkFBb0IsQ0FBQTtJQUNwQix1RkFBb0IsQ0FBQTtJQUNwQixxRkFBbUIsQ0FBQTtJQUNuQiw0RkFBd0IsQ0FBQTtBQUMxQixDQUFDLEVBUlcsb0JBQW9CLEtBQXBCLG9CQUFvQixRQVEvQjtBQUVELG1EQUFtRDtBQUNuRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN4QyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUM7SUFDMUIsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUM7SUFDN0IsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUM7SUFDbEMsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDO0lBQ2pDLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUM7SUFDdkMsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQztJQUNyQyxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDO0NBQzFDLENBQUMsQ0FBQztBQUVILFNBQVMsZ0JBQWdCLENBQ3ZCLGFBQTZFLEVBQzdFLFFBQTRCLEVBQzVCLGFBQTJCLEVBQzNCLGtCQUFnQyxFQUNoQyxlQUE2QjtJQUM3QixNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNyQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDM0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFlB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RUFBRSxDQUFDLEVBQUU7WUFDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMxQztJQUVELE9BQU87UUFDTCxLQUFLLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixJQUFJLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxTQUFTLEVBQUUsS0FBSztRQUNoQixTQUFTLEVBQUUsU0FBUyxHQUFHLENBQUM7S0FDekIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXh0cmVtdW0sIElPcHRpbWl6ZXJ9IGZyb20gJy4vb3B0aW1pemVyLW1pc2MnO1xuXG5cbi8qKiBUaGUgTmVsZGVyLU1lYWQgbWV0aG9kIHNldHRpbmdzICovXG5leHBvcnQgdHlwZSBOZWxkZXJNZWFkU2V0dGluZ3MgPSB7XG4gIHRvbGVyYW5jZTogbnVtYmVyLFxuICBtYXhJdGVyOiBudW1iZXIsXG4gIG5vblplcm9QYXJhbTogbnVtYmVyLFxuICBpbml0aWFsU2NhbGU6IG51bWJlcixcbiAgc2NhbGVSZWZsZWN0aW9uOiBudW1iZXIsXG4gIHNjYWxlRXhwYW5zaW9uOiBudW1iZXIsXG4gIHNjYWxlQ29udHJhY3Rpb246IG51bWJlcixcbn07XG5cbi8qKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIE5lbGRlci1NZWFkIG1ldGhvZCAqL1xuZXhwb3J0IGVudW0gTkVMREVSX01FQURfREVGQVVMVFMge1xuICBUT0xFUkFOQ0UgPSAwLjAxLFxuICBNQVhfSVRFUiA9IDIwLFxuICBOT05fWkVST19QQVJBTSA9IDAuMDAwMSxcbiAgSU5JVElBTF9TQ0FMRSA9IDAuMDIsXG4gIFNDQUxFX1JFRkxFQ1RJT04gPSAxLFxuICBTQ0FMRV9FWFBBTlNJT04gPSAyLFxuICBTQ0FMRV9DT05UUkFDVElPTiA9IC0wLjUsXG59XG5cbi8qKiBDYXB0aW9ucyBmb3IgdGhlIE5lbGRlci1NZWFkIG1ldGhvZCBzZXR0aW5ncyAqL1xuZXhwb3J0IGNvbnN0IG5lbGRlck1lYWRDYXB0aW9ucyA9IG5ldyBNYXAoW1xuICBbJ3RvbGVyYW5jZScsICdUb2xlcmFuY2UnXSxcbiAgWydtYXhJdGVyJywgJ01heCBpdGVyYXRpb25zJ10sXG4gIFsnbm9uWmVyb1BhcmFtJywgJ05vbi16ZXJvIHBhcmFtJ10sXG4gIFsnaW5pdGlhbFNjYWxlJywgJ0luaXRpYWwgc2NhbGUnXSxcbiAgWydzY2FsZVJlZmxlY3Rpb24nLCAnU2NhbGUgcmVmbGVjdGlvbiddLFxuICBbJ3NjYWxlRXhwYW5zaW9uJywgJ1NjYWxlIGV4cGFuc2lvbiddLFxuICBbJ3NjYWxlQ29udHJhY3Rpb24nLCAnU2NhbGUgY29udHJhY3Rpb24nXSxcbl0pO1xuXG5mdW5jdGlvbiBnZXRJbml0aWFsUGFyYW1zKFxuICBvYmplY3RpdmVGdW5jOiAoeDogRmxvYXQzMkFycmF5KSA9PiB7bGlrZWxpaG9vZDogbnVtYmVyLCByZXNpZHVhbHM6IG51bWJlcltdfSxcbiAgc2V0dGluZ3M6IE5lbGRlck1lYWRTZXR0aW5ncyxcbiAgcGFyYW1zSW5pdGlhbDogRmxvYXQzMkFycmF5LFxuICByZXN0cmljdGlvbnNCb3R0b206IEZsb2F0MzJBcnJheSxcbiAgcmVzdHJpY3Rpb25zVG9wOiBGbG9hdDMyQXJyYXkpOiBbRmxvYXQzMkFycmF5W10sIG51bWJlcltdXSB7XG4gIGNvbnN0IGRpbSA9IHBhcmFtc0luaXRpYWwubGVuZ3RoICsgMTtcbiAgY29uc3QgZGltUGFyYW1zID0gcGFyYW1zSW5pdGlhbC5sZW5ndGg7XG4gIGNvbnN0IG5vblplcm9QYXJhbSA9IHNldHRpbmdzLm5vblplcm9QYXJhbTtcbiAgY29uc3QgaW5pdFNjYWxlID0gc2V0dGluZ3MuaW5pdGlhbFNjYWxlO1xuXG4gIGNvbnN0IG9wdFBhcmFtcyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGRpbSk7XG4gIGNvbnN0IHBvaW50T2JqZWN0aXZlcyA9IG5ldyBBcnJheTxudW1iZXI+KGRpbSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW07IGkrKykge1xuICAgIG9wdFBhcmFtc1tpXSA9IG5ldyBGbG9hdDMyQXJyYXkoZGltUGFyYW1zKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpbVBhcmFtczsgaisrKSB7XG4gICAgICBvcHRQYXJhbXNbaV1bal0gPSBwYXJhbXNJbml0aWFsW2pdO1xuICAgICAgaWYgKGkgIT09IDAgJiYgaSAtIDEgPT09IGopIHtcbiAgICAgICAgaWYgKHBhcmFtc0luaXRpYWxbal0gPT09IDApXG4gICAgICAgICAgb3B0UGFyYW1zW2ldW2pdID0gbm9uWmVyb1BhcmFtO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgb3B0UGFyYW1zW2ldW2pdICs9IGluaXRTY2FsZSAqIHBhcmFtc0luaXRpYWxbaSAtIDFdO1xuXG4gICAgICAgIGlmIChvcHRQYXJhbXNbaV1bal0gPCByZXN0cmljdGlvbnNCb3R0b21bal0pXG4gICAgICAgICAgb3B0UGFyYW1zW2ldW2pdID0gcmVzdHJpY3Rpb25zQm90dG9tW2pdO1xuICAgICAgICBlbHNlIGlmIChvcHRQYXJhbXNbaV1bal0gPiByZXN0cmljdGlvbnNUb3Bbal0pXG4gICAgICAgICAgb3B0UGFyYW1zW2ldW2pdID0gcmVzdHJpY3Rpb25zVG9wW2pdO1xuICAgICAgfVxuICAgIH1cbiAgICBwb2ludE9iamVjdGl2ZXNbaV0gPSBvYmplY3RpdmVGdW5jKG9wdFBhcmFtc1tpXSkubGlrZWxpaG9vZDtcbiAgfVxuXG4gIHJldHVybiBbb3B0UGFyYW1zLCBwb2ludE9iamVjdGl2ZXNdO1xufVxuXG5mdW5jdGlvbiBmaWxsQ2VudHJvaWQoY2VudHJvaWQ6IEZsb2F0MzJBcnJheSwgZGltUGFyYW1zOiBudW1iZXIsIGxhc3RJbmRleDogbnVtYmVyLCBvcHRQYXJhbXM6IEZsb2F0MzJBcnJheVtdKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGltUGFyYW1zOyBpKyspIHtcbiAgICBsZXQgdmFsID0gMDtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpbVBhcmFtcyArIDE7IGorKykge1xuICAgICAgaWYgKGogIT09IGxhc3RJbmRleClcbiAgICAgICAgdmFsICs9IG9wdFBhcmFtc1tqXVtpXTtcbiAgICB9XG4gICAgY2VudHJvaWRbaV0gPSB2YWwgLyBkaW1QYXJhbXM7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmlsbFBvaW50KFxuICBjZW50cm9pZDogRmxvYXQzMkFycmF5LCBwb2ludDogRmxvYXQzMkFycmF5LFxuICBsYXN0SW5kZXg6IG51bWJlciwgb3B0UGFyYW1zOiBGbG9hdDMyQXJyYXlbXSxcbiAgc2NhbGU6IG51bWJlciwgZGltUGFyYW1zOiBudW1iZXIsXG4gIHJlc3RyaWN0aW9uc0JvdHRvbTogRmxvYXQzMkFycmF5LFxuICByZXN0cmljdGlvbnNUb3A6IEZsb2F0MzJBcnJheSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbVBhcmFtczsgaSsrKSB7XG4gICAgcG9pbnRbaV0gPSBjZW50cm9pZFtpXTtcbiAgICBwb2ludFtpXSArPSBzY2FsZSAqIChjZW50cm9pZFtpXSAtIG9wdFBhcmFtc1tsYXN0SW5kZXhdW2ldKTtcblxuICAgIGlmIChwb2ludFtpXSA8IHJlc3RyaWN0aW9uc0JvdHRvbVtpXSlcbiAgICAgIHBvaW50W2ldID0gcmVzdHJpY3Rpb25zQm90dG9tW2ldO1xuICAgIGVsc2UgaWYgKHBvaW50W2ldID4gcmVzdHJpY3Rpb25zVG9wW2ldKVxuICAgICAgcG9pbnRbaV0gPSByZXN0cmljdGlvbnNUb3BbaV07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IG9wdGltaXplTk06IElPcHRpbWl6ZXIgPSBmdW5jdGlvbihcbiAgb2JqZWN0aXZlRnVuYzogKHg6IEZsb2F0MzJBcnJheSkgPT4ge2xpa2VsaWhvb2Q6IG51bWJlciwgcmVzaWR1YWxzOiBudW1iZXJbXX0sXG4gIHBhcmFtc0luaXRpYWw6IEZsb2F0MzJBcnJheSxcbiAgc2V0dGluZ3M6IE5lbGRlck1lYWRTZXR0aW5ncyxcbiAgcmVzdHJpY3Rpb25zQm90dG9tOiBGbG9hdDMyQXJyYXksXG4gIHJlc3RyaWN0aW9uc1RvcDogRmxvYXQzMkFycmF5KTogRXh0cmVtdW0ge1xuICAvLyBTZXR0aW5ncyBpbml0aWFsaXphdGlvblxuICBjb25zdCB0b2xlcmFuY2UgPSBzZXR0aW5ncy50b2xlcmFuY2U7XG4gIGNvbnN0IG1heEl0ZXIgPSBzZXR0aW5ncy5tYXhJdGVyO1xuXG4gIGNvbnN0IHNjYWxlUmVmbGVjdGlvbiA9IHNldHRpbmdzLnNjYWxlUmVmbGVjdGlvbjtcbiAgY29uc3Qgc2NhbGVFeHBhbnNpb24gPSBzZXR0aW5ncy5zY2FsZUV4cGFuc2lvbjtcbiAgY29uc3Qgc2NhbGVDb250cmFjdGlvbiA9IHNldHRpbmdzLnNjYWxlQ29udHJhY3Rpb247XG4gIGNvbnN0IGRpbSA9IHBhcmFtc0luaXRpYWwubGVuZ3RoICsgMTtcbiAgY29uc3QgZGltUGFyYW1zID0gcGFyYW1zSW5pdGlhbC5sZW5ndGg7XG5cbiAgY29uc3QgW29wdFBhcmFtcywgcG9pbnRPYmplY3RpdmVzXSA9XG4gICAgZ2V0SW5pdGlhbFBhcmFtcyhvYmplY3RpdmVGdW5jLCBzZXR0aW5ncywgcGFyYW1zSW5pdGlhbCwgcmVzdHJpY3Rpb25zQm90dG9tLCByZXN0cmljdGlvbnNUb3ApO1xuXG4gIGNvbnN0IGluZGV4ZXMgPSBuZXcgQXJyYXk8bnVtYmVyPihkaW0pO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbTsgaSsrKVxuICAgIGluZGV4ZXNbaV0gPSBpO1xuXG4gIGNvbnN0IGxhc3RJbmRleCA9IGluZGV4ZXMubGVuZ3RoIC0gMTtcbiAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gIGxldCBiZXN0ID0gMDtcbiAgbGV0IHByZXZpb3VzQmVzdCA9IDA7XG4gIGxldCBub0ltcHJvdmVtZW50ID0gMDtcblxuICBjb25zdCBjZW50cm9pZCA9IG5ldyBGbG9hdDMyQXJyYXkoZGltUGFyYW1zKTtcbiAgY29uc3QgcmVmbGVjdGlvblBvaW50ID0gbmV3IEZsb2F0MzJBcnJheShkaW1QYXJhbXMpO1xuICBjb25zdCBleHBhbnNpb25Qb2ludCA9IG5ldyBGbG9hdDMyQXJyYXkoZGltUGFyYW1zKTtcbiAgY29uc3QgY29udHJhY3Rpb25Qb2ludCA9IG5ldyBGbG9hdDMyQXJyYXkoZGltUGFyYW1zKTtcbiAgY29uc3QgY29zdHMgPSBuZXcgQXJyYXk8bnVtYmVyPihtYXhJdGVyKTtcblxuICBpZiAoZGltID4gMSkge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpbmRleGVzLnNvcnQoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBwb2ludE9iamVjdGl2ZXNbYV0gLSBwb2ludE9iamVjdGl2ZXNbYl07XG4gICAgICB9KTtcbiAgICAgIGlmIChpdGVyYXRpb24gPiBtYXhJdGVyKVxuICAgICAgICBicmVhaztcblxuICAgICAgaWYgKGl0ZXJhdGlvbiA9PT0gMCkge1xuICAgICAgICBiZXN0ID0gcG9pbnRPYmplY3RpdmVzWzBdO1xuICAgICAgICBwcmV2aW91c0Jlc3QgPSAyICogcG9pbnRPYmplY3RpdmVzW2luZGV4ZXNbMF1dO1xuICAgICAgfVxuICAgICAgY29zdHNbaXRlcmF0aW9uXSA9IGJlc3Q7XG5cbiAgICAgICsraXRlcmF0aW9uO1xuXG4gICAgICBiZXN0ID0gcG9pbnRPYmplY3RpdmVzW2luZGV4ZXNbMF1dO1xuICAgICAgaWYgKHByZXZpb3VzQmVzdCAtIGJlc3QgPiB0b2xlcmFuY2UpXG4gICAgICAgIG5vSW1wcm92ZW1lbnQgPSAwO1xuICAgICAgZWxzZSB7XG4gICAgICAgICsrbm9JbXByb3ZlbWVudDtcbiAgICAgICAgaWYgKG5vSW1wcm92ZW1lbnQgPiAyICogZGltKVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwcmV2aW91c0Jlc3QgPSBiZXN0O1xuXG4gICAgICAvLyBjZW50cm9pZFxuICAgICAgZmlsbENlbnRyb2lkKGNlbnRyb2lkLCBkaW1QYXJhbXMsIGluZGV4ZXNbbGFzdEluZGV4XSwgb3B0UGFyYW1zKTtcblxuICAgICAgLy8gcmVmbGVjdGlvblxuICAgICAgZmlsbFBvaW50KGNlbnRyb2lkLCByZWZsZWN0aW9uUG9pbnQsIGluZGV4ZXNbbGFzdEluZGV4XSxcbiAgICAgICAgb3B0UGFyYW1zLCBzY2FsZVJlZmxlY3Rpb24sIGRpbVBhcmFtcywgcmVzdHJpY3Rpb25zQm90dG9tLCByZXN0cmljdGlvbnNUb3ApO1xuICAgICAgY29uc3QgcmVmbGVjdGlvblNjb3JlID0gb2JqZWN0aXZlRnVuYyhyZWZsZWN0aW9uUG9pbnQpLmxpa2VsaWhvb2Q7XG5cbiAgICAgIC8vIGV4cGFuc2lvblxuICAgICAgaWYgKHJlZmxlY3Rpb25TY29yZSA8IHBvaW50T2JqZWN0aXZlc1tpbmRleGVzW2xhc3RJbmRleF1dKSB7XG4gICAgICAgIGZpbGxQb2ludChjZW50cm9pZCwgZXhwYW5zaW9uUG9pbnQsIGluZGV4ZXNbbGFzdEluZGV4XSxcbiAgICAgICAgICBvcHRQYXJhbXMsIHNjYWxlRXhwYW5zaW9uLCBkaW1QYXJhbXMsIHJlc3RyaWN0aW9uc0JvdHRvbSwgcmVzdHJpY3Rpb25zVG9wKTtcblxuICAgICAgICBjb25zdCBleHBhbnNpb25TY29yZSA9IG9iamVjdGl2ZUZ1bmMoZXhwYW5zaW9uUG9pbnQpLmxpa2VsaWhvb2Q7XG5cbiAgICAgICAgaWYgKGV4cGFuc2lvblNjb3JlIDwgcmVmbGVjdGlvblNjb3JlKSB7XG4gICAgICAgICAgcG9pbnRPYmplY3RpdmVzW2luZGV4ZXNbbGFzdEluZGV4XV0gPSBleHBhbnNpb25TY29yZTtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGltUGFyYW1zOyBpKyspXG4gICAgICAgICAgICBvcHRQYXJhbXNbaW5kZXhlc1tsYXN0SW5kZXhdXVtpXSA9IGV4cGFuc2lvblBvaW50W2ldO1xuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcG9pbnRPYmplY3RpdmVzW2luZGV4ZXNbbGFzdEluZGV4XV0gPSByZWZsZWN0aW9uU2NvcmU7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbVBhcmFtczsgaSsrKVxuICAgICAgICAgICAgb3B0UGFyYW1zW2luZGV4ZXNbbGFzdEluZGV4XV1baV0gPSByZWZsZWN0aW9uUG9pbnRbaV07XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDb250cmFjdGlvblxuICAgICAgZmlsbFBvaW50KGNlbnRyb2lkLCBjb250cmFjdGlvblBvaW50LCBpbmRleGVzW2xhc3RJbmRleF0sXG4gICAgICAgIG9wdFBhcmFtcywgc2NhbGVDb250cmFjdGlvbiwgZGltUGFyYW1zLCByZXN0cmljdGlvbnNCb3R0b20sIHJlc3RyaWN0aW9uc1RvcCk7XG5cbiAgICAgIGNvbnN0IGNvbnRyYWN0aW9uU2NvcmUgPSBvYmplY3RpdmVGdW5jKGNvbnRyYWN0aW9uUG9pbnQpLmxpa2VsaWhvb2Q7XG5cbiAgICAgIGlmIChjb250cmFjdGlvblNjb3JlIDwgcG9pbnRPYmplY3RpdmVzW2luZGV4ZXNbbGFzdEluZGV4XV0pIHtcbiAgICAgICAgcG9pbnRPYmplY3RpdmVzW2luZGV4ZXNbbGFzdEluZGV4XV0gPSBjb250cmFjdGlvblNjb3JlO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGltUGFyYW1zOyBpKyspXG4gICAgICAgICAgb3B0UGFyYW1zW2luZGV4ZXNbbGFzdEluZGV4XV1baV0gPSBjb250cmFjdGlvblBvaW50W2ldO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gaXRlcmF0aW9uOyBpIDwgbWF4SXRlcjsgaSsrKVxuICAgICAgY29zdHNbaV0gPSBwb2ludE9iamVjdGl2ZXNbaW5kZXhlc1swXV07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBvaW50OiBvcHRQYXJhbXNbaW5kZXhlc1swXV0sXG4gICAgY29zdDogcG9pbnRPYmplY3RpdmVzW2luZGV4ZXNbMF1dLFxuICAgIGl0ZXJDb3N0czogY29zdHMsXG4gICAgaXRlckNvdW50OiBpdGVyYXRpb24gLSAxLFxuICB9O1xufTtcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"optimizer-sampler.d.ts","sourceRoot":"","sources":["optimizer-sampler.ts"],"names":[],"mappings":"AAYA,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,YAAY,EAAE,CAmB1G"}
1
+ {"version":3,"file":"optimizer-sampler.d.ts","sourceRoot":"","sources":["optimizer-sampler.ts"],"names":[],"mappings":"AAcA,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,YAAY,EAAE,CAoB1G"}
@@ -1,13 +1,15 @@
1
- function sampleUniform(samplesCount, top, bottom) {
1
+ import seedRandom from 'seedrandom';
2
+ function sampleUniform(samplesCount, top, bottom, randomFn) {
2
3
  const scale = top - bottom;
3
4
  const sample = new Array(samplesCount);
4
5
  for (let i = 0; i < samplesCount; i++) {
5
- const r = Math.random();
6
+ const r = randomFn();
6
7
  sample[i] = bottom + r * scale;
7
8
  }
8
9
  return sample;
9
10
  }
10
11
  export function sampleParams(samplesCount, top, bottom) {
12
+ const randomFn = seedRandom('12345');
11
13
  const dim = top.length;
12
14
  const params = new Array(samplesCount);
13
15
  for (let i = 0; i < samplesCount; i++)
@@ -18,11 +20,11 @@ export function sampleParams(samplesCount, top, bottom) {
18
20
  params[j][i] = top[i];
19
21
  }
20
22
  else {
21
- const paramVariations = sampleUniform(samplesCount, top[i], bottom[i]);
23
+ const paramVariations = sampleUniform(samplesCount, top[i], bottom[i], randomFn);
22
24
  for (let j = 0; j < samplesCount; j++)
23
25
  params[j][i] = paramVariations[j];
24
26
  }
25
27
  }
26
28
  return params;
27
29
  }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLXNhbXBsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvcHRpbWl6ZXItc2FtcGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLGFBQWEsQ0FBQyxZQUFvQixFQUFFLEdBQVcsRUFBRSxNQUFjO0lBQ3RFLE1BQU0sS0FBSyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7SUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQVMsWUFBWSxDQUFDLENBQUM7SUFFL0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUcsRUFBRTtRQUN0QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQ2hDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsWUFBb0IsRUFBRSxHQUFpQixFQUFFLE1BQW9CO0lBQ3hGLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQWUsWUFBWSxDQUFDLENBQUM7SUFDckQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUc7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXBDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUU7UUFDN0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFHO2dCQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pCO2FBQ0k7WUFDSCxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRztnQkFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyQztLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHNhbXBsZVVuaWZvcm0oc2FtcGxlc0NvdW50OiBudW1iZXIsIHRvcDogbnVtYmVyLCBib3R0b206IG51bWJlcik6IG51bWJlcltdIHtcbiAgY29uc3Qgc2NhbGUgPSB0b3AgLSBib3R0b207XG4gIGNvbnN0IHNhbXBsZSA9IG5ldyBBcnJheTxudW1iZXI+KHNhbXBsZXNDb3VudCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1wbGVzQ291bnQ7IGkgKyspIHtcbiAgICBjb25zdCByID0gTWF0aC5yYW5kb20oKTtcbiAgICBzYW1wbGVbaV0gPSBib3R0b20gKyByICogc2NhbGU7XG4gIH1cblxuICByZXR1cm4gc2FtcGxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FtcGxlUGFyYW1zKHNhbXBsZXNDb3VudDogbnVtYmVyLCB0b3A6IEZsb2F0MzJBcnJheSwgYm90dG9tOiBGbG9hdDMyQXJyYXkpOiBGbG9hdDMyQXJyYXlbXSB7XG4gIGNvbnN0IGRpbSA9IHRvcC5sZW5ndGg7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KHNhbXBsZXNDb3VudCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtcGxlc0NvdW50OyBpICsrKVxuICAgIHBhcmFtc1tpXSA9IG5ldyBGbG9hdDMyQXJyYXkoZGltKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbTsgaSArKykge1xuICAgIGlmICh0b3BbaV0gPT09IGJvdHRvbVtpXSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzYW1wbGVzQ291bnQ7IGogKyspXG4gICAgICAgIHBhcmFtc1tqXVtpXSA9IHRvcFtpXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBwYXJhbVZhcmlhdGlvbnMgPSBzYW1wbGVVbmlmb3JtKHNhbXBsZXNDb3VudCwgdG9wW2ldLCBib3R0b21baV0pO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzYW1wbGVzQ291bnQ7IGogKyspXG4gICAgICAgIHBhcmFtc1tqXVtpXSA9IHBhcmFtVmFyaWF0aW9uc1tqXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyYW1zO1xufVxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLXNhbXBsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvcHRpbWl6ZXItc2FtcGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFFcEMsU0FBUyxhQUFhLENBQUMsWUFBb0IsRUFBRSxHQUFXLEVBQUUsTUFBYyxFQUFFLFFBQXlCO0lBQ2pHLE1BQU0sS0FBSyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7SUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQVMsWUFBWSxDQUFDLENBQUM7SUFFL0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUcsRUFBRTtRQUN0QyxNQUFNLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUNyQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDaEM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxZQUFvQixFQUFFLEdBQWlCLEVBQUUsTUFBb0I7SUFDeEYsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQWUsWUFBWSxDQUFDLENBQUM7SUFDckQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUc7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXBDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUU7UUFDN0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFHO2dCQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pCO2FBQ0k7WUFDSCxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDakYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUc7Z0JBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckM7S0FDRjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2VlZFJhbmRvbSBmcm9tICdzZWVkcmFuZG9tJztcblxuZnVuY3Rpb24gc2FtcGxlVW5pZm9ybShzYW1wbGVzQ291bnQ6IG51bWJlciwgdG9wOiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCByYW5kb21Gbjogc2VlZFJhbmRvbS5QUk5HKTogbnVtYmVyW10ge1xuICBjb25zdCBzY2FsZSA9IHRvcCAtIGJvdHRvbTtcbiAgY29uc3Qgc2FtcGxlID0gbmV3IEFycmF5PG51bWJlcj4oc2FtcGxlc0NvdW50KTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbXBsZXNDb3VudDsgaSArKykge1xuICAgIGNvbnN0IHIgPSByYW5kb21GbigpO1xuICAgIHNhbXBsZVtpXSA9IGJvdHRvbSArIHIgKiBzY2FsZTtcbiAgfVxuXG4gIHJldHVybiBzYW1wbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW1wbGVQYXJhbXMoc2FtcGxlc0NvdW50OiBudW1iZXIsIHRvcDogRmxvYXQzMkFycmF5LCBib3R0b206IEZsb2F0MzJBcnJheSk6IEZsb2F0MzJBcnJheVtdIHtcbiAgY29uc3QgcmFuZG9tRm4gPSBzZWVkUmFuZG9tKCcxMjM0NScpO1xuICBjb25zdCBkaW0gPSB0b3AubGVuZ3RoO1xuICBjb25zdCBwYXJhbXMgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihzYW1wbGVzQ291bnQpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbXBsZXNDb3VudDsgaSArKylcbiAgICBwYXJhbXNbaV0gPSBuZXcgRmxvYXQzMkFycmF5KGRpbSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW07IGkgKyspIHtcbiAgICBpZiAodG9wW2ldID09PSBib3R0b21baV0pIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2FtcGxlc0NvdW50OyBqICsrKVxuICAgICAgICBwYXJhbXNbal1baV0gPSB0b3BbaV07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgcGFyYW1WYXJpYXRpb25zID0gc2FtcGxlVW5pZm9ybShzYW1wbGVzQ291bnQsIHRvcFtpXSwgYm90dG9tW2ldLCByYW5kb21Gbik7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNhbXBsZXNDb3VudDsgaiArKylcbiAgICAgICAgcGFyYW1zW2pdW2ldID0gcGFyYW1WYXJpYXRpb25zW2pdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJhbXM7XG59XG4iXX0=
@@ -1,4 +1,7 @@
1
1
  import { OptimizationResult } from './optimizer-misc';
2
2
  import { NelderMeadSettings } from './optimizer-nelder-mead';
3
- export declare function performNelderMeadOptimization(objectiveFunc: (x: Float32Array) => number, paramsBottom: Float32Array, paramsTop: Float32Array, settings: NelderMeadSettings, samplesCount?: number, initialValues?: Float32Array | null, infiniteFirst?: boolean): OptimizationResult;
3
+ export declare function performNelderMeadOptimization(objectiveFunc: (x: Float32Array) => {
4
+ likelihood: number;
5
+ residuals: number[];
6
+ }, paramsBottom: Float32Array, paramsTop: Float32Array, settings: NelderMeadSettings, samplesCount?: number, initialValues?: Float32Array | null, infiniteFirst?: boolean): OptimizationResult;
4
7
  //# sourceMappingURL=optimizer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"optimizer.d.ts","sourceRoot":"","sources":["optimizer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,kBAAkB,EAAqB,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAa,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAIvE,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,MAAM,EAC1C,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,GAAE,MAAU,EACxB,aAAa,GAAE,YAAY,GAAG,IAAW,EACzC,aAAa,GAAE,OAAc,GAC5B,kBAAkB,CA8CpB"}
1
+ {"version":3,"file":"optimizer.d.ts","sourceRoot":"","sources":["optimizer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,kBAAkB,EAAqB,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAa,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAIvE,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAC,EAC7E,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,GAAE,MAAU,EACxB,aAAa,GAAE,YAAY,GAAG,IAAW,EACzC,aAAa,GAAE,OAAc,GAC5B,kBAAkB,CA4CpB"}
@@ -5,8 +5,6 @@ import { optimizeNM } from './optimizer-nelder-mead';
5
5
  import { sampleParams } from './optimizer-sampler';
6
6
  export function performNelderMeadOptimization(objectiveFunc, paramsBottom, paramsTop, settings, samplesCount = 1, initialValues = null, infiniteFirst = true) {
7
7
  const params = sampleParams(samplesCount, paramsTop, paramsBottom);
8
- if (initialValues !== null)
9
- params[0] = initialValues;
10
8
  const extremums = [];
11
9
  const warnings = [];
12
10
  const failedInitPoint = [];
@@ -45,4 +43,4 @@ export function performNelderMeadOptimization(objectiveFunc, paramsBottom, param
45
43
  fails: failsDF,
46
44
  };
47
45
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsib3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdDQUFnQztBQUNoQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBK0Isa0JBQWtCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRixPQUFPLEVBQUMsVUFBVSxFQUFxQixNQUFNLHlCQUF5QixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUdqRCxNQUFNLFVBQVUsNkJBQTZCLENBQzNDLGFBQTBDLEVBQzFDLFlBQTBCLEVBQzFCLFNBQXVCLEVBQ3ZCLFFBQTRCLEVBQzVCLGVBQXVCLENBQUMsRUFDeEIsZ0JBQXFDLElBQUksRUFDekMsZ0JBQXlCLElBQUk7SUFFN0IsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDbkUsSUFBSSxhQUFhLEtBQUssSUFBSTtRQUN4QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDO0lBRTVCLE1BQU0sU0FBUyxHQUFlLEVBQUUsQ0FBQztJQUNqQyxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFDOUIsTUFBTSxlQUFlLEdBQW1CLEVBQUUsQ0FBQztJQUMzQyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDbkIsSUFBSSxPQUFPLEdBQXdCLElBQUksQ0FBQztJQUN4QyxJQUFJLENBQVMsQ0FBQztJQUVkLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2pDLElBQUk7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksYUFBYSxFQUFFO2dCQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxhQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5RSxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxhQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5RSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUNsRjs7Z0JBQ0MsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDM0Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxZQUFZLGtCQUFrQjtnQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFM0QsRUFBRSxVQUFVLENBQUM7WUFDYixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ25FLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakM7S0FDRjtJQUVELElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtRQUNsQixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFlLEdBQUcsQ0FBQyxDQUFDO1FBRXpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV4QyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUMvRDtJQUVELE9BQU87UUFDTCxTQUFTLEVBQUUsU0FBUztRQUNwQixLQUFLLEVBQUUsT0FBTztLQUNmLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIHRoZSBOZWxkZXItTWVhZCBvcHRpbWl6ZXIgKi9cbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge0V4dHJlbXVtLCBPcHRpbWl6YXRpb25SZXN1bHQsIEluY29uc2lzdGVudFRhYmxlc30gZnJvbSAnLi9vcHRpbWl6ZXItbWlzYyc7XG5pbXBvcnQge29wdGltaXplTk0sIE5lbGRlck1lYWRTZXR0aW5nc30gZnJvbSAnLi9vcHRpbWl6ZXItbmVsZGVyLW1lYWQnO1xuaW1wb3J0IHtzYW1wbGVQYXJhbXN9IGZyb20gJy4vb3B0aW1pemVyLXNhbXBsZXInO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJmb3JtTmVsZGVyTWVhZE9wdGltaXphdGlvbihcbiAgb2JqZWN0aXZlRnVuYzogKHg6IEZsb2F0MzJBcnJheSkgPT4gbnVtYmVyLFxuICBwYXJhbXNCb3R0b206IEZsb2F0MzJBcnJheSxcbiAgcGFyYW1zVG9wOiBGbG9hdDMyQXJyYXksXG4gIHNldHRpbmdzOiBOZWxkZXJNZWFkU2V0dGluZ3MsXG4gIHNhbXBsZXNDb3VudDogbnVtYmVyID0gMSxcbiAgaW5pdGlhbFZhbHVlczogRmxvYXQzMkFycmF5IHwgbnVsbCA9IG51bGwsXG4gIGluZmluaXRlRmlyc3Q6IGJvb2xlYW4gPSB0cnVlLFxuKTogT3B0aW1pemF0aW9uUmVzdWx0IHtcbiAgY29uc3QgcGFyYW1zID0gc2FtcGxlUGFyYW1zKHNhbXBsZXNDb3VudCwgcGFyYW1zVG9wLCBwYXJhbXNCb3R0b20pO1xuICBpZiAoaW5pdGlhbFZhbHVlcyAhPT0gbnVsbClcbiAgICBwYXJhbXNbMF0gPSBpbml0aWFsVmFsdWVzO1xuXG4gIGNvbnN0IGV4dHJlbXVtczogRXh0cmVtdW1bXSA9IFtdO1xuICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmFpbGVkSW5pdFBvaW50OiBGbG9hdDMyQXJyYXlbXSA9IFtdO1xuICBsZXQgZmFpbHNDb3VudCA9IDA7XG4gIGxldCBmYWlsc0RGOiBERy5EYXRhRnJhbWUgfCBudWxsID0gbnVsbDtcbiAgbGV0IGk6IG51bWJlcjtcblxuICBmb3IgKGkgPSAwOyBpIDwgc2FtcGxlc0NvdW50OyArK2kpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPT09IDAgJiYgaW5maW5pdGVGaXJzdCkge1xuICAgICAgICBjb25zdCBwYXJhbXNCID0gbmV3IEZsb2F0MzJBcnJheShpbml0aWFsVmFsdWVzIS5sZW5ndGgpLm1hcCgoXykgPT4gLUluZmluaXR5KTtcbiAgICAgICAgY29uc3QgcGFyYW1zVCA9IG5ldyBGbG9hdDMyQXJyYXkoaW5pdGlhbFZhbHVlcyEubGVuZ3RoKS5tYXAoKF8pID0+ICtJbmZpbml0eSk7XG4gICAgICAgIGV4dHJlbXVtcy5wdXNoKG9wdGltaXplTk0ob2JqZWN0aXZlRnVuYywgcGFyYW1zW2ldLCBzZXR0aW5ncywgcGFyYW1zQiwgcGFyYW1zVCkpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGV4dHJlbXVtcy5wdXNoKG9wdGltaXplTk0ob2JqZWN0aXZlRnVuYywgcGFyYW1zW2ldLCBzZXR0aW5ncywgcGFyYW1zQm90dG9tLCBwYXJhbXNUb3ApKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEluY29uc2lzdGVudFRhYmxlcylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbmNvbnNpc3RlbnQgZGF0YWZyYW1lczogJHtlLm1lc3NhZ2V9YCk7XG5cbiAgICAgICsrZmFpbHNDb3VudDtcbiAgICAgIHdhcm5pbmdzLnB1c2goKGUgaW5zdGFuY2VvZiBFcnJvcikgPyBlLm1lc3NhZ2UgOiAnUGxhdGZvcm0gaXNzdWUnKTtcbiAgICAgIGZhaWxlZEluaXRQb2ludC5wdXNoKHBhcmFtc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZhaWxzQ291bnQgPiAwKSB7XG4gICAgY29uc3QgZGltID0gcGFyYW1zVG9wLmxlbmd0aDtcbiAgICBjb25zdCByYXcgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihkaW0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW07ICsraSlcbiAgICAgIHJhd1tpXSA9IG5ldyBGbG9hdDMyQXJyYXkoZmFpbHNDb3VudCk7XG5cbiAgICBmYWlsZWRJbml0UG9pbnQuZm9yRWFjaCgocG9pbnQsIGlkeCkgPT4gcG9pbnQuZm9yRWFjaCgodmFsLCBqZHgpID0+IHJhd1tqZHhdW2lkeF0gPSB2YWwpKTtcbiAgICBmYWlsc0RGID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKHJhdy5tYXAoKGFyciwgaWR4KSA9PiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShgYXJnJHtpZHh9YCwgYXJyKSkpO1xuICAgIGZhaWxzREYuY29sdW1ucy5hZGQoREcuQ29sdW1uLmZyb21TdHJpbmdzKCdJc3N1ZScsIHdhcm5pbmdzKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4dHJlbXVtczogZXh0cmVtdW1zLFxuICAgIGZhaWxzOiBmYWlsc0RGLFxuICB9O1xufVxuIl19
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsib3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdDQUFnQztBQUNoQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBK0Isa0JBQWtCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRixPQUFPLEVBQUMsVUFBVSxFQUFxQixNQUFNLHlCQUF5QixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUdqRCxNQUFNLFVBQVUsNkJBQTZCLENBQzNDLGFBQTZFLEVBQzdFLFlBQTBCLEVBQzFCLFNBQXVCLEVBQ3ZCLFFBQTRCLEVBQzVCLGVBQXVCLENBQUMsRUFDeEIsZ0JBQXFDLElBQUksRUFDekMsZ0JBQXlCLElBQUk7SUFFN0IsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFbkUsTUFBTSxTQUFTLEdBQWUsRUFBRSxDQUFDO0lBQ2pDLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztJQUM5QixNQUFNLGVBQWUsR0FBbUIsRUFBRSxDQUFDO0lBQzNDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLE9BQU8sR0FBd0IsSUFBSSxDQUFDO0lBQ3hDLElBQUksQ0FBUyxDQUFDO0lBRWQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDakMsSUFBSTtZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxhQUFhLEVBQUU7Z0JBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLGFBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlFLE1BQU0sT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLGFBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ2xGOztnQkFDQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUMzRjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLFlBQVksa0JBQWtCO2dCQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUUzRCxFQUFFLFVBQVUsQ0FBQztZQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDbkUsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQztLQUNGO0lBRUQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFO1FBQ2xCLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQWUsR0FBRyxDQUFDLENBQUM7UUFFekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXhDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUYsT0FBTyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBRUQsT0FBTztRQUNMLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLEtBQUssRUFBRSxPQUFPO0tBQ2YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogdGhlIE5lbGRlci1NZWFkIG9wdGltaXplciAqL1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7RXh0cmVtdW0sIE9wdGltaXphdGlvblJlc3VsdCwgSW5jb25zaXN0ZW50VGFibGVzfSBmcm9tICcuL29wdGltaXplci1taXNjJztcbmltcG9ydCB7b3B0aW1pemVOTSwgTmVsZGVyTWVhZFNldHRpbmdzfSBmcm9tICcuL29wdGltaXplci1uZWxkZXItbWVhZCc7XG5pbXBvcnQge3NhbXBsZVBhcmFtc30gZnJvbSAnLi9vcHRpbWl6ZXItc2FtcGxlcic7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmZvcm1OZWxkZXJNZWFkT3B0aW1pemF0aW9uKFxuICBvYmplY3RpdmVGdW5jOiAoeDogRmxvYXQzMkFycmF5KSA9PiB7bGlrZWxpaG9vZDogbnVtYmVyLCByZXNpZHVhbHM6IG51bWJlcltdfSxcbiAgcGFyYW1zQm90dG9tOiBGbG9hdDMyQXJyYXksXG4gIHBhcmFtc1RvcDogRmxvYXQzMkFycmF5LFxuICBzZXR0aW5nczogTmVsZGVyTWVhZFNldHRpbmdzLFxuICBzYW1wbGVzQ291bnQ6IG51bWJlciA9IDEsXG4gIGluaXRpYWxWYWx1ZXM6IEZsb2F0MzJBcnJheSB8IG51bGwgPSBudWxsLFxuICBpbmZpbml0ZUZpcnN0OiBib29sZWFuID0gdHJ1ZSxcbik6IE9wdGltaXphdGlvblJlc3VsdCB7XG4gIGNvbnN0IHBhcmFtcyA9IHNhbXBsZVBhcmFtcyhzYW1wbGVzQ291bnQsIHBhcmFtc1RvcCwgcGFyYW1zQm90dG9tKTtcblxuICBjb25zdCBleHRyZW11bXM6IEV4dHJlbXVtW10gPSBbXTtcbiAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGZhaWxlZEluaXRQb2ludDogRmxvYXQzMkFycmF5W10gPSBbXTtcbiAgbGV0IGZhaWxzQ291bnQgPSAwO1xuICBsZXQgZmFpbHNERjogREcuRGF0YUZyYW1lIHwgbnVsbCA9IG51bGw7XG4gIGxldCBpOiBudW1iZXI7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNhbXBsZXNDb3VudDsgKytpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpID09PSAwICYmIGluZmluaXRlRmlyc3QpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zQiA9IG5ldyBGbG9hdDMyQXJyYXkoaW5pdGlhbFZhbHVlcyEubGVuZ3RoKS5tYXAoKF8pID0+IC1JbmZpbml0eSk7XG4gICAgICAgIGNvbnN0IHBhcmFtc1QgPSBuZXcgRmxvYXQzMkFycmF5KGluaXRpYWxWYWx1ZXMhLmxlbmd0aCkubWFwKChfKSA9PiArSW5maW5pdHkpO1xuICAgICAgICBleHRyZW11bXMucHVzaChvcHRpbWl6ZU5NKG9iamVjdGl2ZUZ1bmMsIHBhcmFtc1tpXSwgc2V0dGluZ3MsIHBhcmFtc0IsIHBhcmFtc1QpKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICBleHRyZW11bXMucHVzaChvcHRpbWl6ZU5NKG9iamVjdGl2ZUZ1bmMsIHBhcmFtc1tpXSwgc2V0dGluZ3MsIHBhcmFtc0JvdHRvbSwgcGFyYW1zVG9wKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBJbmNvbnNpc3RlbnRUYWJsZXMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5jb25zaXN0ZW50IGRhdGFmcmFtZXM6ICR7ZS5tZXNzYWdlfWApO1xuXG4gICAgICArK2ZhaWxzQ291bnQ7XG4gICAgICB3YXJuaW5ncy5wdXNoKChlIGluc3RhbmNlb2YgRXJyb3IpID8gZS5tZXNzYWdlIDogJ1BsYXRmb3JtIGlzc3VlJyk7XG4gICAgICBmYWlsZWRJbml0UG9pbnQucHVzaChwYXJhbXNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmYWlsc0NvdW50ID4gMCkge1xuICAgIGNvbnN0IGRpbSA9IHBhcmFtc1RvcC5sZW5ndGg7XG4gICAgY29uc3QgcmF3ID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oZGltKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGltOyArK2kpXG4gICAgICByYXdbaV0gPSBuZXcgRmxvYXQzMkFycmF5KGZhaWxzQ291bnQpO1xuXG4gICAgZmFpbGVkSW5pdFBvaW50LmZvckVhY2goKHBvaW50LCBpZHgpID0+IHBvaW50LmZvckVhY2goKHZhbCwgamR4KSA9PiByYXdbamR4XVtpZHhdID0gdmFsKSk7XG4gICAgZmFpbHNERiA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhyYXcubWFwKChhcnIsIGlkeCkgPT4gREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoYGFyZyR7aWR4fWAsIGFycikpKTtcbiAgICBmYWlsc0RGLmNvbHVtbnMuYWRkKERHLkNvbHVtbi5mcm9tU3RyaW5ncygnSXNzdWUnLCB3YXJuaW5ncykpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHRyZW11bXM6IGV4dHJlbXVtcyxcbiAgICBmYWlsczogZmFpbHNERixcbiAgfTtcbn1cbiJdfQ==