@sapui5/sap.fe.base 1.130.0 → 1.131.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/package.json +1 -1
- package/src/sap/fe/base/.library +1 -1
- package/src/sap/fe/base/BindingToolkit.js +4 -3
- package/src/sap/fe/base/BindingToolkit.ts +7 -12
- package/src/sap/fe/base/BuildingBlockBase.js +191 -0
- package/src/sap/fe/base/BuildingBlockBase.ts +166 -0
- package/src/sap/fe/base/ClassSupport.js +76 -20
- package/src/sap/fe/base/ClassSupport.ts +94 -13
- package/src/sap/fe/base/jsx-runtime/jsx-control.js +3 -1
- package/src/sap/fe/base/jsx-runtime/jsx-control.ts +3 -0
- package/src/sap/fe/base/jsx-runtime/jsx-xml.js +12 -14
- package/src/sap/fe/base/jsx-runtime/jsx-xml.ts +7 -9
- package/src/sap/fe/base/library.js +3 -2
- package/src/sap/fe/base/library.ts +1 -0
|
@@ -87,6 +87,9 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
87
87
|
return function (target, propertyKey, propertyDescriptor) {
|
|
88
88
|
var _initializer, _ref;
|
|
89
89
|
const metadata = ensureMetadata(target);
|
|
90
|
+
if (metadata.stateProperty !== undefined) {
|
|
91
|
+
throw new Error("Only one state property per control is allowed");
|
|
92
|
+
}
|
|
90
93
|
metadata.stateProperty = propertyKey;
|
|
91
94
|
delete propertyDescriptor.writable;
|
|
92
95
|
metadata.statePropertyDefaultValue ??= (_initializer = (_ref = propertyDescriptor).initializer) === null || _initializer === void 0 ? void 0 : _initializer.call(_ref);
|
|
@@ -361,6 +364,33 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
361
364
|
};
|
|
362
365
|
}
|
|
363
366
|
_exports.defineUI5Class = defineUI5Class;
|
|
367
|
+
/**
|
|
368
|
+
* Mixin a specific interface including all its methods and properties into the control.
|
|
369
|
+
* @param interfaceClass Implementation class of the control
|
|
370
|
+
* @returns The decorated class
|
|
371
|
+
*/
|
|
372
|
+
function mixin(interfaceClass) {
|
|
373
|
+
return function (baseCtor) {
|
|
374
|
+
var _interfaceClass$proto, _interfaceClass$proto2, _interfaceClass$proto3, _interfaceClass$proto4;
|
|
375
|
+
if (baseCtor.prototype.extend) {
|
|
376
|
+
throw new Error("The mixinInterface decorator must be placed after `defineUi5Class`");
|
|
377
|
+
}
|
|
378
|
+
const metadata = ensureMetadata(baseCtor.prototype);
|
|
379
|
+
const interfaceName = (_interfaceClass$proto = (_interfaceClass$proto2 = interfaceClass.prototype).getInterfaceName) === null || _interfaceClass$proto === void 0 ? void 0 : _interfaceClass$proto.call(_interfaceClass$proto2);
|
|
380
|
+
if (interfaceName) {
|
|
381
|
+
metadata.interfaces.push(interfaceName);
|
|
382
|
+
}
|
|
383
|
+
Object.getOwnPropertyNames(interfaceClass.prototype).forEach(name => {
|
|
384
|
+
if (name !== "constructor" && name !== "setupMixin") {
|
|
385
|
+
Object.defineProperty(baseCtor.prototype, name, Object.getOwnPropertyDescriptor(interfaceClass.prototype, name) || Object.create(null));
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
// Hook to add potentially more logic to the mixin
|
|
389
|
+
(_interfaceClass$proto3 = (_interfaceClass$proto4 = interfaceClass.prototype).setupMixin) === null || _interfaceClass$proto3 === void 0 ? void 0 : _interfaceClass$proto3.call(_interfaceClass$proto4, baseCtor);
|
|
390
|
+
return baseCtor;
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
_exports.mixin = mixin;
|
|
364
394
|
function createReference() {
|
|
365
395
|
return {
|
|
366
396
|
current: undefined,
|
|
@@ -394,22 +424,17 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
394
424
|
const pathInModel = `/${prop.toString()}`;
|
|
395
425
|
const oObj = deepClone(jsonModel.getObject(pathInModel));
|
|
396
426
|
let oTarget;
|
|
397
|
-
if (
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
};
|
|
401
|
-
oTarget.toString = function () {
|
|
402
|
-
return this.value;
|
|
427
|
+
if (prop === "__bindingInfo") {
|
|
428
|
+
return {
|
|
429
|
+
model: "$componentState"
|
|
403
430
|
};
|
|
431
|
+
}
|
|
432
|
+
if (typeof oObj === "string") {
|
|
433
|
+
oTarget = oObj;
|
|
404
434
|
} else if (typeof oObj === "number") {
|
|
405
|
-
oTarget =
|
|
406
|
-
value: oObj
|
|
407
|
-
};
|
|
408
|
-
oTarget.toString = function () {
|
|
409
|
-
return this.value.toString();
|
|
410
|
-
};
|
|
435
|
+
oTarget = oObj;
|
|
411
436
|
} else if (typeof oObj === "boolean") {
|
|
412
|
-
oTarget =
|
|
437
|
+
oTarget = oObj;
|
|
413
438
|
} else if (Array.isArray(oObj)) {
|
|
414
439
|
oTarget = new Proxy(oObj, {
|
|
415
440
|
get(target, p, receiver) {
|
|
@@ -432,10 +457,12 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
432
457
|
...oObj
|
|
433
458
|
};
|
|
434
459
|
}
|
|
435
|
-
oTarget
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
460
|
+
if (typeof oTarget === "object") {
|
|
461
|
+
oTarget.__bindingInfo = {
|
|
462
|
+
model: "$componentState",
|
|
463
|
+
path: pathInModel
|
|
464
|
+
};
|
|
465
|
+
}
|
|
439
466
|
return oTarget;
|
|
440
467
|
}
|
|
441
468
|
function _createStateProperty(obj, targetControl) {
|
|
@@ -444,6 +471,20 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
444
471
|
const stateModel = new JSONModel({});
|
|
445
472
|
targetControl.setModel(stateModel, "$componentState");
|
|
446
473
|
let updatingState = false;
|
|
474
|
+
const boundToStateProps = [];
|
|
475
|
+
for (const propertyName in obj.metadata.properties) {
|
|
476
|
+
const propertyDef = obj.metadata.properties[propertyName];
|
|
477
|
+
if (propertyDef.bindToState) {
|
|
478
|
+
boundToStateProps.push(propertyName);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
stateModel.attachPropertyChange(evt => {
|
|
482
|
+
var _evt$getParameter;
|
|
483
|
+
const path = (_evt$getParameter = evt.getParameter("path")) === null || _evt$getParameter === void 0 ? void 0 : _evt$getParameter.substring(1); // to remove the first /
|
|
484
|
+
if (path && boundToStateProps.includes(path)) {
|
|
485
|
+
targetControl.setProperty(path, evt.getParameter("value"));
|
|
486
|
+
}
|
|
487
|
+
});
|
|
447
488
|
// This method can be used to force the state to be applied and wait for it to be applied in tests
|
|
448
489
|
targetControl._updateState = async function () {
|
|
449
490
|
delete this._updateStateTimer;
|
|
@@ -474,6 +515,11 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
474
515
|
return _getHandlerForStateProperty(target, prop);
|
|
475
516
|
},
|
|
476
517
|
set: (setStateModel, prop, value) => {
|
|
518
|
+
if (boundToStateProps.includes(prop.toString())) {
|
|
519
|
+
targetControl._ignoreStatePropertyUpdate = true;
|
|
520
|
+
targetControl.setProperty(prop.toString(), value);
|
|
521
|
+
targetControl._ignoreStatePropertyUpdate = false;
|
|
522
|
+
}
|
|
477
523
|
const setResult = setStateModel.setProperty(`/${prop.toString()}`, value);
|
|
478
524
|
targetControl._updateStateDebounced(prop.toString());
|
|
479
525
|
return setResult;
|
|
@@ -490,6 +536,16 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
490
536
|
...obj.metadata.statePropertyDefaultValue
|
|
491
537
|
};
|
|
492
538
|
}
|
|
539
|
+
const fnSetProperty = targetControl.setProperty;
|
|
540
|
+
if (boundToStateProps.length > 0) {
|
|
541
|
+
targetControl.setProperty = function (sPropertyName, oValue, bSuppressInvalidate) {
|
|
542
|
+
if (boundToStateProps.includes(sPropertyName) && !this._ignoreStatePropertyUpdate) {
|
|
543
|
+
var _obj$metadata2;
|
|
544
|
+
this[(_obj$metadata2 = obj.metadata) === null || _obj$metadata2 === void 0 ? void 0 : _obj$metadata2.stateProperty][sPropertyName] = oValue;
|
|
545
|
+
}
|
|
546
|
+
return fnSetProperty.call(this, sPropertyName, oValue, bSuppressInvalidate);
|
|
547
|
+
};
|
|
548
|
+
}
|
|
493
549
|
}
|
|
494
550
|
}
|
|
495
551
|
|
|
@@ -501,7 +557,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
501
557
|
* @returns The metadata class
|
|
502
558
|
*/
|
|
503
559
|
function registerUI5Metadata(clazz, name, inObj) {
|
|
504
|
-
var _clazz$getMetadata, _clazz$getMetadata2, _inObj$metadata, _clazz$metadata, _obj$
|
|
560
|
+
var _clazz$getMetadata, _clazz$getMetadata2, _inObj$metadata, _clazz$metadata, _obj$metadata3;
|
|
505
561
|
if ((_clazz$getMetadata = clazz.getMetadata) !== null && _clazz$getMetadata !== void 0 && _clazz$getMetadata.call(clazz).isA("sap.ui.core.mvc.ControllerExtension")) {
|
|
506
562
|
Object.getOwnPropertyNames(inObj).forEach(objName => {
|
|
507
563
|
const descriptor = Object.getOwnPropertyDescriptor(inObj, objName);
|
|
@@ -537,7 +593,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
537
593
|
}
|
|
538
594
|
}
|
|
539
595
|
});
|
|
540
|
-
if ((_obj$
|
|
596
|
+
if ((_obj$metadata3 = obj.metadata) !== null && _obj$metadata3 !== void 0 && _obj$metadata3.controllerExtensions && Object.keys(obj.metadata.controllerExtensions).length > 0) {
|
|
541
597
|
for (const cExtName in obj.metadata.controllerExtensions) {
|
|
542
598
|
obj[cExtName] = obj.metadata.controllerExtensions[cExtName];
|
|
543
599
|
}
|
|
@@ -715,4 +771,4 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
715
771
|
}
|
|
716
772
|
return _exports;
|
|
717
773
|
}, false);
|
|
718
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJyZWZlcmVuY2VzIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJwcmVwYXJlR2V0QVBJRnVuY3Rpb24iLCJvRXZlbnQiLCJhcGlGUU4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvU291cmNlIiwiZ2V0U291cmNlIiwiX2dldEFQSUV4dGVuc2lvbiIsImlzQSIsImdldFBhcmVudCIsImlzRGVwZW5kZW50Qm91bmQiLCJvRGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJoYXNDb3JyZWN0RGVwZW5kZW50IiwiZmluZCIsIm9EZXBlbmRlbnQiLCJvU291cmNlTWFwIiwiaW5zdGFuY2VNYXAiLCJnZXQiLCJ0YXJnZXRDb250cm9sIiwiZW5zdXJlR2V0QVBJIiwiX19hcGlSZWdpc3RlcmVkIiwiV2Vha01hcCIsInJlZ2lzdGVySW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjb25zdHJ1Y3RvciIsInNldCIsInB1c2giLCJnZXRBUEkiLCJkZWZpbmVTdGF0ZSIsInByb3BlcnR5S2V5IiwicHJvcGVydHlEZXNjcmlwdG9yIiwiX2luaXRpYWxpemVyIiwiX3JlZiIsInN0YXRlUHJvcGVydHkiLCJ3cml0YWJsZSIsInN0YXRlUHJvcGVydHlEZWZhdWx0VmFsdWUiLCJpbml0aWFsaXplciIsImNhbGwiLCJfZXhwb3J0cyIsIm1ldGhvZE92ZXJyaWRlIiwiZXh0ZW5zaW9uTmFtZSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiZGVzY3JpcHRvciIsImhvb2thYmxlIiwicHVibGljRXh0ZW5zaW9uIiwiZW51bWVyYWJsZSIsInB1YmxpYyIsInByaXZhdGVFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImZpbmFsIiwidXNpbmdFeHRlbnNpb24iLCJleHRlbnNpb25DbGFzcyIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJfaW5pdGlhbGl6ZXIyIiwiX3JlZjIiLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJncm91cCIsImRlZmF1bHRWYWx1ZSIsImFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25EZWZpbml0aW9uIiwiX2luaXRpYWxpemVyMyIsIl9yZWYzIiwibXVsdGlwbGUiLCJpc0RlZmF1bHQiLCJkZWZhdWx0QWdncmVnYXRpb24iLCJhc3NvY2lhdGlvbiIsInVpNUFzc29jaWF0aW9uTWV0YWRhdGEiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJpbnRlcmZhY2VOYW1lIiwieG1sRXZlbnRIYW5kbGVyIiwicHJvcGVydHlrZXkiLCJjdXJyZW50Q29uc3RydWN0b3IiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImRlZmluZVVJNUNsYXNzIiwic1RhcmdldCIsIm1ldGFkYXRhRGVmaW5pdGlvbiIsInByb3RvdHlwZSIsImtleSIsImlzQXJyYXkiLCJjb25jYXQiLCJyZWdpc3RlclVJNU1ldGFkYXRhIiwiY3JlYXRlUmVmZXJlbmNlIiwiY3VycmVudCIsInNldEN1cnJlbnQiLCJvQ29udHJvbEluc3RhbmNlIiwiZGVmaW5lUmVmZXJlbmNlIiwiQmFzZU9iamVjdCIsImlzT2JqZWN0QSIsIl9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eSIsImpzb25Nb2RlbCIsInByb3AiLCJwYXRoSW5Nb2RlbCIsIm9PYmoiLCJkZWVwQ2xvbmUiLCJnZXRPYmplY3QiLCJvVGFyZ2V0IiwidmFsdWUiLCJCb29sZWFuIiwiUHJveHkiLCJwIiwicmVjZWl2ZXIiLCJyZWYiLCJSZWZsZWN0IiwiYmluZCIsImlzTmFOIiwiTnVtYmVyIiwiX19iaW5kaW5nSW5mbyIsIm1vZGVsIiwicGF0aCIsIl9jcmVhdGVTdGF0ZVByb3BlcnR5Iiwib2JqIiwiX29iaiRtZXRhZGF0YSIsInN0YXRlTW9kZWwiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsInVwZGF0aW5nU3RhdGUiLCJfdXBkYXRlU3RhdGUiLCJfdXBkYXRlU3RhdGVUaW1lciIsIl9vblN0YXRlQ2hhbmdlIiwiX3JlZjQiLCJvblN0YXRlQ2hhbmdlIiwiX2NoYW5nZWRQcm9wcyIsIl91cGRhdGVTdGF0ZURlYm91bmNlZCIsImNoYW5nZWRQcm9wIiwiaW5jbHVkZXMiLCJzZXRUaW1lb3V0IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJzZXRTdGF0ZU1vZGVsIiwic2V0UmVzdWx0Iiwic2V0UHJvcGVydHkiLCJjbGF6eiIsIm5hbWUiLCJpbk9iaiIsIl9jbGF6eiRnZXRNZXRhZGF0YSIsIl9jbGF6eiRnZXRNZXRhZGF0YTIiLCJfaW5PYmokbWV0YWRhdGEiLCJfY2xhenokbWV0YWRhdGEiLCJfb2JqJG1ldGFkYXRhMiIsImdldE93blByb3BlcnR5TmFtZXMiLCJmb3JFYWNoIiwib2JqTmFtZSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImJhc2VUeXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJnZXRTdGVyZW90eXBlIiwicmVuZGVyZXJEZWZpbml0aW9uIiwicmVuZGVyZXIiLCJyZW5kZXIiLCJhcGlWZXJzaW9uIiwia2V5cyIsImUiLCJjRXh0TmFtZSIsIm91dHB1dCIsImV4dGVuZCIsImZuSW5pdCIsImluaXQiLCJmbkFmdGVySW5pdCIsImFmdGVySW5pdCIsIl90aGlzIiwiX2xlbjIiLCJfa2V5MiIsImFwcGx5IiwiYVByb3BlcnR5S2V5cyIsInByb3BlcnR5RGVmIiwicHJvcGVydHlEZWZhdWx0IiwiX2JpbmRpbmdQcm9wZXJ0aWVzIiwidiIsIm1Qcm9wZXJ0aWVzIiwicHJvcGVydHlWYWx1ZSIsImdldFByb3BlcnR5IiwiYmluZGluZ1Byb3BlcnR5VmFsdWUiLCJwcm9wVmFsdWUiLCJfYXBwbHlpbmdTZXR0aW5ncyIsImFBZ2dyZWdhdGlvbktleXMiLCJhZ2dyZWdhdGlvbktleSIsImFnZ3JlZ2F0aW9uRGVmIiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImFBc3NvY2lhdGlvbktleXMiLCJhc3NvY2lhdGlvbktleSIsInNldEFzc29jaWF0aW9uIiwiZ2V0QXNzb2NpYXRpb24iLCJyZWZlcmVuY2VQcm9wZXJ0aWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZERlZmluaXRpb24iLCJtZXRob2RIb2xkZXIiLCJtZXRob2RBcnJheXMiLCJyZXZlcnNlIiwiX2xlbjMiLCJtZXRob2RBcmdzIiwiX2tleTMiLCJhcmciLCJvRXh0ZW5zaW9uIiwicG9sIiwiX2xlbjQiLCJfa2V5NCIsIm9DbGFzcyIsIk1ldGFkYXRhIiwiY3JlYXRlQ2xhc3MiLCJ1aWQiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJfc3RhdGljT3ZlcnJpZGUiLCJfb3ZlcnJpZGUiLCJPYmplY3RQYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDbGFzc1N1cHBvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB7IGhvb2thYmxlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NZXRhZGF0YVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgQ29udHJvbGxlck1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlck1ldGFkYXRhXCI7XG5pbXBvcnQgdHlwZSBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5cbnR5cGUgT3ZlcnJpZGVEZWZpbml0aW9uID0gUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+O1xudHlwZSBVSTVDb250cm9sbGVyTWV0aG9kRGVmaW5pdGlvbiA9IHtcblx0b3ZlcnJpZGVFeGVjdXRpb24/OiBPdmVycmlkZUV4ZWN1dGlvbjtcblx0cHVibGljPzogYm9vbGVhbjtcblx0ZmluYWw/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIE5vbkFic3RyYWN0Q2xhc3M8VD4gPSBQaWNrPFQsIGtleW9mIFQ+ICYgKG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBUKTtcblxudHlwZSBVSTVQcm9wZXJ0eU1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGJpbmRhYmxlPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRncm91cD86IHN0cmluZztcblx0ZGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblx0YnlWYWx1ZT86IGJvb2xlYW47XG5cdGlzQmluZGluZ0luZm8/OiBib29sZWFuO1xuXHRleHBlY3RlZEFubm90YXRpb25zPzogc3RyaW5nW107XG5cdGV4cGVjdGVkVHlwZXM/OiBzdHJpbmdbXTtcblx0YWxsb3dlZFZhbHVlcz86IHN0cmluZ1tdO1xuXHR2aXNpYmlsaXR5Pzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0YWx0VHlwZXM/OiBzdHJpbmdbXTtcblx0bXVsdGlwbGU/OiBib29sZWFuO1xuXHRpc0RlZmF1bHQ/OiBib29sZWFuO1xuXHRkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuXHRkZWZhdWx0Q2xhc3M/OiB1bmtub3duO1xuXHRzaW5ndWxhck5hbWU/OiBzdHJpbmc7XG5cdHZpc2liaWxpdHk/OiBzdHJpbmc7XG5cdGZvcndhcmRpbmc/OiBvYmplY3Q7XG59O1xuZXhwb3J0IHR5cGUgVUk1QXNzb2NpYXRpb25NZXRhZGF0YSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRtdWx0aXBsZT86IGJvb2xlYW47XG5cdHNpbmd1bGFyTmFtZT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uID0ge1xuXHRkZWZhdWx0QWdncmVnYXRpb24/OiBzdHJpbmc7XG5cdGNvbnRyb2xsZXJFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uPjtcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgVUk1UHJvcGVydHlNZXRhZGF0YT47XG5cdGFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgVUk1QWdncmVnYXRpb25NZXRhZGF0YT47XG5cdHJlZmVyZW5jZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuXHRhc3NvY2lhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFVJNUFzc29jaWF0aW9uTWV0YWRhdGE+O1xuXHRtZXRob2RzOiBSZWNvcmQ8c3RyaW5nLCBVSTVDb250cm9sbGVyTWV0aG9kRGVmaW5pdGlvbj47XG5cdGV2ZW50czogUmVjb3JkPHN0cmluZywge30+O1xuXHRpbnRlcmZhY2VzOiBzdHJpbmdbXTtcblx0bGlicmFyeT86IHN0cmluZztcblx0ZGVzaWdudGltZT86IHN0cmluZztcblx0Y29uZmlnPzoge1xuXHRcdGZ1bGxXaWR0aD86IGJvb2xlYW47XG5cdH07XG5cdHN0YXRlUHJvcGVydHk/OiBzdHJpbmc7XG5cdHN0YXRlUHJvcGVydHlEZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuXHRtYW5pZmVzdD86IHN0cmluZyB8IHVua25vd247XG5cdHJldHVyblR5cGVzPzogc3RyaW5nW107XG5cdGJ1aWxkaW5nQmxvY2tNZXRhZGF0YT86IHVua25vd247XG59O1xuZXhwb3J0IHR5cGUgQWNjZXNzb3JEZXNjcmlwdG9yPFQ+ID0gVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8VD4gJiB7IGluaXRpYWxpemVyPzogKCkgPT4gVCB9O1xudHlwZSBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiA9IHtcblx0b3ZlcnJpZGU/OiB7IGV4dGVuc2lvbj86IFJlY29yZDxzdHJpbmcsIE92ZXJyaWRlRGVmaW5pdGlvbj4gfSAmIHtcblx0XHRbazogc3RyaW5nXTogRnVuY3Rpb247XG5cdH07XG5cdG92ZXJyaWRlcz86IHsgZXh0ZW5zaW9uPzogUmVjb3JkPHN0cmluZywgT3ZlcnJpZGVEZWZpbml0aW9uPiB9ICYge1xuXHRcdFtrOiBzdHJpbmddOiBGdW5jdGlvbjtcblx0fTtcblx0bWV0YWRhdGE/OiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHRyZW5kZXJlcj86IEZ1bmN0aW9uO1xufTtcblxudHlwZSBVSTVDb250cm9sRGVmaW5pdGlvbiA9IHtcblx0bWV0YWRhdGE/OiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHRvdmVycmlkZT86IHVua25vd247XG5cdHJlbmRlcmVyPzogRnVuY3Rpb247XG59O1xuXG50eXBlIFVJNUFQSUNvbnRyb2wgPSBDb250cm9sICYge1xuXHRnZXRBUEkoZXZlbnQ6IFVJNUV2ZW50LCBmcWRuPzogc3RyaW5nKTogVUk1QVBJQ29udHJvbCB8IHVuZGVmaW5lZDtcblx0aW5zdGFuY2VNYXA6IFdlYWtNYXA8b2JqZWN0LCBvYmplY3RbXT47XG5cdF9fYXBpUmVnaXN0ZXJlZDogYm9vbGVhbjtcbn0gJiB7XG5cdFtrOiBzdHJpbmddOiBGdW5jdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFhNTEV2ZW50SG9sZGVyID0ge1xuXHRnZXRBUEkoZXZlbnQ6IFVJNUV2ZW50LCBmcWRuPzogc3RyaW5nKTogVUk1QVBJQ29udHJvbCB8IHVuZGVmaW5lZDtcblx0aW5zdGFuY2VNYXA6IFdlYWtNYXA8b2JqZWN0LCBvYmplY3RbXT47XG59O1xuXG50eXBlIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+ID0ge1xuXHQvLyBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgVFMgY29tcGlsZXJcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0W0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBGdW5jdGlvbiA/IG5ldmVyIDogSztcbn1ba2V5b2YgVF07XG5leHBvcnQgdHlwZSBQcm9wZXJ0aWVzT2Y8VCwgSyBleHRlbmRzIGtleW9mIFQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+ID0gUGFydGlhbDxQaWNrPFQsIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+Pj4gJlxuXHQoSyBleHRlbmRzIGtleW9mIFQgPyBQYXJ0aWFsPFBpY2s8VCwgSz4+IDoge30pICZcblx0JENvbnRyb2xTZXR0aW5ncztcbmV4cG9ydCB0eXBlIENvbnZlcnRDb250ZXh0VG9TdHJpbmc8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBLIGV4dGVuZHMgXCJtZXRhUGF0aFwiIHwgXCJjb250ZXh0UGF0aFwiID8gc3RyaW5nIDogVFtLXTtcbn07XG50eXBlIENvbnRleHRUb1N0cmluZzxUPiA9IHtcblx0W0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBDb250ZXh0IHwgdW5kZWZpbmVkID8gc3RyaW5nIHwgdW5kZWZpbmVkIDogVFtLXTtcbn07XG5cbmV4cG9ydCB0eXBlIFByb3BlcnRpZXNPZkJ1aWxkaW5nQmxvY2s8VD4gPSBDb250ZXh0VG9TdHJpbmc8UHJvcGVydGllc09mPFQ+PjtcbmV4cG9ydCB0eXBlIFN0cmljdFByb3BlcnRpZXNPZjxUPiA9IFBpY2s8VCwgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4+O1xuZXhwb3J0IHR5cGUgVUk1QWNjZXNzb3JzPFQ+ID0ge1xuXHQvLyBBZGQgYWxsIHRoZSBnZXRYWFggbWV0aG9kLCBtaWdodCBhZGQgdG9vIG11Y2ggYXMgSSdtIG5vdCBmaWx0ZXJpbmcgb24gYWN0dWFsIHByb3BlcnRpZXMuLi5cblx0W1AgaW4ga2V5b2YgUmVxdWlyZWQ8VD4gYXMgYGdldCR7Q2FwaXRhbGl6ZTxzdHJpbmcgJiBQPn1gXTogKCkgPT4gVFtQXTtcbn07XG5leHBvcnQgdHlwZSBVSTVTZXR0ZXJzPFQ+ID0ge1xuXHQvLyBBZGQgYWxsIHRoZSBzZXRYWFggbWV0aG9kLCBtaWdodCBhZGQgdG9vIG11Y2ggYXMgSSdtIG5vdCBmaWx0ZXJpbmcgb24gYWN0dWFsIHByb3BlcnRpZXMuLi5cblx0W1AgaW4ga2V5b2YgUmVxdWlyZWQ8VD4gYXMgYHNldCR7Q2FwaXRhbGl6ZTxzdHJpbmcgJiBQPn1gXTogKHZhbHVlOiBUW1BdKSA9PiBUO1xufTtcbmV4cG9ydCB0eXBlIEVuaGFuY2VXaXRoVUk1PFQ+ID0ge1xuXHRuZXcgKHByb3BzOiBQcm9wZXJ0aWVzT2Y8VD4pOiBFbmhhbmNlV2l0aFVJNTxUPjtcblx0bmV3IChzSWQ6IHN0cmluZywgcHJvcHM6IFByb3BlcnRpZXNPZjxUPik6IEVuaGFuY2VXaXRoVUk1PFQ+O1xufSAmIFQgJlxuXHRVSTVBY2Nlc3NvcnM8VD4gJlxuXHRVSTVTZXR0ZXJzPFQ+O1xuXG5leHBvcnQgdHlwZSBFeHRlbnNpb25PdmVycmlkZUV4ZWN1dGlvbiA9IFwiSW5zdGVhZFwiIHwgXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiQWZ0ZXJBc3luY1wiIHwgXCJCZWZvcmVBc3luY1wiO1xuXG5jb25zdCBlbnN1cmVNZXRhZGF0YSA9IGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uIHwgVUk1Q29udHJvbERlZmluaXRpb24pOiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uIHtcblx0dGFyZ2V0Lm1ldGFkYXRhID0gbWVyZ2UoXG5cdFx0e1xuXHRcdFx0Y29udHJvbGxlckV4dGVuc2lvbnM6IHt9LFxuXHRcdFx0cHJvcGVydGllczoge30sXG5cdFx0XHRhZ2dyZWdhdGlvbnM6IHt9LFxuXHRcdFx0cmVmZXJlbmNlczoge30sXG5cdFx0XHRhc3NvY2lhdGlvbnM6IHt9LFxuXHRcdFx0bWV0aG9kczoge30sXG5cdFx0XHRldmVudHM6IHt9LFxuXHRcdFx0aW50ZXJmYWNlczogW11cblx0XHR9LFxuXHRcdHRhcmdldC5tZXRhZGF0YSA/PyB7fVxuXHQpIGFzIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdHJldHVybiB0YXJnZXQubWV0YWRhdGE7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0aGF0IHdpbGwgZmluZCB0aGUgY29ycmVjdCBBUEkgb2JqZWN0IGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRyb2wgaGllcmFyY2h5LlxuICogQHBhcmFtIHRhcmdldFxuICogQHJldHVybnMgVGhlIHByb3BlciBnZXRBUEkgZnVuY3Rpb24gZm9yIHRoaXMgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gcHJlcGFyZUdldEFQSUZ1bmN0aW9uKHRhcmdldDogVUk1QVBJQ29udHJvbCkge1xuXHRyZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBVSTVBUElDb250cm9sPihcblx0XHR0aGlzOiBVSTVBUElDb250cm9sLFxuXHRcdG9FdmVudDogVUk1RXZlbnQsXG5cdFx0YXBpRlFOOiBzdHJpbmcgPSB0YXJnZXQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKClcblx0KTogVCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgTWFuYWdlZE9iamVjdCB8IG51bGw7XG5cdFx0aWYgKHRhcmdldC5fZ2V0QVBJRXh0ZW5zaW9uKSB7XG5cdFx0XHRvU291cmNlID0gdGFyZ2V0Ll9nZXRBUElFeHRlbnNpb24ob1NvdXJjZSkgPz8gb1NvdXJjZTtcblx0XHR9XG5cdFx0d2hpbGUgKG9Tb3VyY2UgJiYgIW9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikgJiYgb1NvdXJjZS5nZXRQYXJlbnQpIHtcblx0XHRcdGlmICh0aGlzLmlzRGVwZW5kZW50Qm91bmQpIHtcblx0XHRcdFx0Y29uc3Qgb0RlcGVuZGVudHMgPSAob1NvdXJjZSBhcyBDb250cm9sKS5nZXREZXBlbmRlbnRzKCk7XG5cdFx0XHRcdGNvbnN0IGhhc0NvcnJlY3REZXBlbmRlbnQgPSBvRGVwZW5kZW50cy5maW5kKChvRGVwZW5kZW50OiBVSTVFbGVtZW50KSA9PiBvRGVwZW5kZW50LmlzQShhcGlGUU4pKTtcblx0XHRcdFx0aWYgKGhhc0NvcnJlY3REZXBlbmRlbnQpIHtcblx0XHRcdFx0XHRvU291cmNlID0gaGFzQ29ycmVjdERlcGVuZGVudCBhcyB1bmtub3duIGFzIFQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBUO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvU291cmNlID0gb1NvdXJjZS5nZXRQYXJlbnQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIW9Tb3VyY2UgfHwgIW9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikpIHtcblx0XHRcdGNvbnN0IG9Tb3VyY2VNYXAgPSB0aGlzLmluc3RhbmNlTWFwLmdldCh0aGlzKSBhcyBUW107XG5cdFx0XHRvU291cmNlID0gb1NvdXJjZU1hcD8uW29Tb3VyY2VNYXAubGVuZ3RoIC0gMV07XG5cdFx0fVxuXHRcdGxldCB0YXJnZXRDb250cm9sO1xuXHRcdGlmIChvU291cmNlICYmIG9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikpIHtcblx0XHRcdHRhcmdldENvbnRyb2wgPSBvU291cmNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0Q29udHJvbDtcblx0fTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgd2hlbiBhbiB4bWxFdmVudEhhbmRsZXIgaXMgZGVmaW5lZCwgdGhlIGBnZXRBUElgIGZ1bmN0aW9uIGlzIHByb3Blcmx5IGFzc2lnbmVkLlxuICogQHBhcmFtIHRhcmdldCBUaGUgY2xhc3MgY29uc3RydWN0b3IgdGhhdCBzaG91bGQgaG9sZCB0aGUgc3RhdGljIGZ1bmN0aW9uc1xuICovXG5jb25zdCBlbnN1cmVHZXRBUEkgPSBmdW5jdGlvbiAodGFyZ2V0OiBVSTVBUElDb250cm9sKTogdm9pZCB7XG5cdGlmICghdGFyZ2V0Ll9fYXBpUmVnaXN0ZXJlZCkge1xuXHRcdHRhcmdldC5fX2FwaVJlZ2lzdGVyZWQgPSB0cnVlO1xuXHRcdHRhcmdldC5pbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgb2JqZWN0W10+KCk7XG5cdFx0dGFyZ2V0LnJlZ2lzdGVySW5zdGFuY2UgPSBmdW5jdGlvbiAoX2luc3RhbmNlOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdFx0aWYgKCF0aGlzLmluc3RhbmNlTWFwLmdldChfaW5zdGFuY2UuY29uc3RydWN0b3IpKSB7XG5cdFx0XHRcdHRoaXMuaW5zdGFuY2VNYXAuc2V0KF9pbnN0YW5jZS5jb25zdHJ1Y3RvciwgW10pO1xuXHRcdFx0fVxuXHRcdFx0KHRoaXMuaW5zdGFuY2VNYXAuZ2V0KF9pbnN0YW5jZS5jb25zdHJ1Y3RvcikgYXMgb2JqZWN0W10pLnB1c2goX2luc3RhbmNlKTtcblx0XHR9O1xuXHRcdHRhcmdldC5nZXRBUEkgPSBwcmVwYXJlR2V0QVBJRnVuY3Rpb24odGFyZ2V0KTtcblx0fVxufTtcblxudHlwZSBFeHRlbmRXaXRoT2JqZWN0PFQsIEs+ID0gVCBleHRlbmRzIG9iamVjdCA/IEsgJiB7IFtUS2V5IGluIGtleW9mIFRdPzogQmluZGluZ0luZm9Ib2xkZXI8VFtUS2V5XT4gfSA6IEs7XG5cbmV4cG9ydCB0eXBlIFN0YXRlT2Y8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT4gfCBSZWFkb25seUFycmF5PGluZmVyIFU+ID8gRXh0ZW5kV2l0aE9iamVjdDxVLCBSZWFkb25seUFycmF5PFU+PiA6IFRbS107XG59O1xuZXhwb3J0IHR5cGUgQmluZGluZ0luZm9Ib2xkZXI8VD4gPSBUICYge1xuXHRfX2JpbmRpbmdJbmZvOiB7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdG1vZGVsOiBzdHJpbmc7XG5cdFx0dHlwZTogVDtcblx0fTtcbn07XG5cbi8qKlxuICogQWxsb3dzIHRvIGRlZmluZSBhIHByb3BlcnR5IHRoYXQgd2lsbCBob2xkIHRoZSBjb250cm9sIHN0YXRlLlxuICpcbiAqIFByb3BlcnRpZXMgZGVmaW5lZCB3aXRoIHRoaXMgZGVjb3JhdG9yIHdpbGwgYmUgYXV0b21hdGljYWxseSBib3VuZCB0byB0aGUgY29udHJvbCBzdGF0ZSB3aGVuIHVzZWQgaW4gSlNYLlxuICogQXJyYXlzIG5lZWQgdG8gYmUgYm91bmQgdXNpbmcgdGhlIGBiaW5kU3RhdGVgIGZ1bmN0aW9uLlxuICogQGV4cGVyaW1lbnRhbFxuICogQHJldHVybnMgQSBwcm9wZXJ0eSBkZWNvcmF0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVN0YXRlKCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdG1ldGFkYXRhLnN0YXRlUHJvcGVydHkgPSBwcm9wZXJ0eUtleTtcblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdG1ldGFkYXRhLnN0YXRlUHJvcGVydHlEZWZhdWx0VmFsdWUgPz89IChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyPy4oKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogRnVuY3Rpb24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLjtcbn1cblxuLyogI3JlZ2lvbiBDT05UUk9MTEVSIEVYVEVOU0lPTlMgKi9cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIGZvbGxvd2luZyBtZXRob2QgaXMgYW4gb3ZlcnJpZGUgZm9yIHRoZSBtZXRob2QgbmFtZSB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gdGhlIHNwZWNpZmljIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9yIGJhc2UgaW1wbGVtZW50YXRpb24uXG4gKiBAcGFyYW0gZXh0ZW5zaW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHRoYXQgd2lsbCBiZSBvdmVycmlkZGVuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWV0aG9kT3ZlcnJpZGUoZXh0ZW5zaW9uTmFtZT86IHN0cmluZyk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXkpIHtcblx0XHRpZiAoIXRhcmdldC5vdmVycmlkZSkge1xuXHRcdFx0dGFyZ2V0Lm92ZXJyaWRlID0ge307XG5cdFx0fVxuXHRcdGlmICghdGFyZ2V0Lm92ZXJyaWRlcykge1xuXHRcdFx0dGFyZ2V0Lm92ZXJyaWRlcyA9IHt9O1xuXHRcdH1cblx0XHRsZXQgY3VycmVudFRhcmdldCA9IHRhcmdldC5vdmVycmlkZXM7XG5cdFx0aWYgKGV4dGVuc2lvbk5hbWUpIHtcblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb24pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb24gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV0pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltleHRlbnNpb25OYW1lXTtcblx0XHR9XG5cdFx0Y3VycmVudFRhcmdldFtwcm9wZXJ0eUtleS50b1N0cmluZygpXSA9ICh0YXJnZXQgYXMgUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+KVtwcm9wZXJ0eUtleS50b1N0cmluZygpXTtcblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCBjYW4gYmUgZXh0ZW5kZWQgYnkgb3RoZXIgY29udHJvbGxlciBleHRlbnNpb24gYmFzZWQgb24gdGhlIGRlZmluZWQgb3ZlcnJpZGVFeGVjdXRpb25UeXBlLlxuICogQHBhcmFtIG92ZXJyaWRlRXhlY3V0aW9uIFRoZSBPdmVycmlkZUV4ZWN1dGlvbiBkZWZpbmluZyB3aGVuIHRoZSBvdmVycmlkZSBzaG91bGQgcnVuIChCZWZvcmUgLyBBZnRlciAvIEluc3RlYWQpXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5zaWJsZShvdmVycmlkZUV4ZWN1dGlvbjogRXh0ZW5zaW9uT3ZlcnJpZGVFeGVjdXRpb24pOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ub3ZlcnJpZGVFeGVjdXRpb24gPSBvdmVycmlkZUV4ZWN1dGlvbiBhcyB1bmtub3duIGFzIE92ZXJyaWRlRXhlY3V0aW9uO1xuXG5cdFx0Ly8gYnkgZGVmYXVsdCwgZXZlcnkgZXh0ZW5zaWJsZSBtZXRob2QgaXMgYWxzbyBob29rYWJsZSAoZXhjZXB0IHRob3NlIGRlZmluZWQgYXMgSW5zdGVhZClcblx0XHRpZiAob3ZlcnJpZGVFeGVjdXRpb24gIT09IFwiSW5zdGVhZFwiKSB7XG5cdFx0XHRob29rYWJsZShvdmVycmlkZUV4ZWN1dGlvbikodGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcik7XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIHdpbGwgYmUgcHVibGljbHkgYXZhaWxhYmxlIGZvciBjb250cm9sbGVyIGV4dGVuc2lvbiB1c2FnZS5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaWNFeHRlbnNpb24oKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcik6IHZvaWQge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLnB1YmxpYyA9IHRydWU7XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIHdpbGwgYmUgb25seSBhdmFpbGFibGUgZm9yIGludGVybmFsIHVzYWdlIG9mIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcml2YXRlRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSBmYWxzZTtcblx0fTtcbn1cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2Fubm90IGJlIGZ1cnRoZXIgZXh0ZW5kZWQgYnkgb3RoZXIgY29udHJvbGxlciBleHRlbnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluYWxFeHRlbnNpb24oKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLmZpbmFsID0gdHJ1ZTtcblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIHVzZSBpbnN0YW50aWF0ZSBhIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHVuZGVyIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgbmFtZS5cbiAqIEBwYXJhbSBleHRlbnNpb25DbGFzcyBUaGUgY29udHJvbGxlciBleHRlbnNpb24gdGhhdCB3aWxsIGJlIGluc3RhbnRpYXRlZFxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNpbmdFeHRlbnNpb24oZXh0ZW5zaW9uQ2xhc3M6IHR5cGVvZiBDb250cm9sbGVyRXh0ZW5zaW9uIHwgRnVuY3Rpb24pOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblx0XHRtZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9uc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IGV4dGVuc2lvbkNsYXNzO1xuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgSSBkZWNsYXJlIGl0IGFzIHN1Y2guXG59XG5cbi8qICNlbmRyZWdpb24gKi9cblxuLyogI3JlZ2lvbiBDT05UUk9MICovXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBwcm9wZXJ0eSBzaGFsbCBiZSBkZWNsYXJlZCBhcyBhbiBldmVudCBvbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50KCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBldmVudEtleTogc3RyaW5nIHwgU3ltYm9sKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5ldmVudHNbZXZlbnRLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgZm9sbG93aW5nIHByb3BlcnR5IGluIHRoZSBjb250cm9sIG1ldGFkYXRhLlxuICogQHBhcmFtIGF0dHJpYnV0ZURlZmluaXRpb24gVGhlIHByb3BlcnR5IGRlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eShhdHRyaWJ1dGVEZWZpbml0aW9uOiBVSTVQcm9wZXJ0eU1ldGFkYXRhKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YXR0cmlidXRlRGVmaW5pdGlvbi5iaW5kYWJsZSA9IHRydWU7XG5cdFx0fVxuXHRcdGlmIChhdHRyaWJ1dGVEZWZpbml0aW9uLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPSBmYWxzZTtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uZ3JvdXAgPSBcIkRhdGFcIjtcblx0XHR9XG5cdFx0aWYgKCFtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBhdHRyaWJ1dGVEZWZpbml0aW9uO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGF0dHJpYnV0ZURlZmluaXRpb24uZGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGZvbGxvd2luZyBhZ2dyZWdhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSBhZ2dyZWdhdGlvbkRlZmluaXRpb24gVGhlIGFnZ3JlZ2F0aW9uIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkRlZmluaXRpb246IFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uLm11bHRpcGxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFVJNSBkZWZhdWx0cyB0aGlzIHRvIHRydWUgYnV0IHRoaXMgaXMganVzdCB3ZWlyZC4uLlxuXHRcdFx0YWdncmVnYXRpb25EZWZpbml0aW9uLm11bHRpcGxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSA9IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbjtcblx0XHR9XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5pc0RlZmF1bHQpIHtcblx0XHRcdG1ldGFkYXRhLmRlZmF1bHRBZ2dyZWdhdGlvbiA9IHByb3BlcnR5S2V5O1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUgPz89IChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyPy4oKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgSSBkZWNsYXJlIGl0IGFzIHN1Y2guXG59XG5cbi8qKlxuICogRGVmaW5lcyBhbmQgY29uZmlndXJlcyB0aGUgZm9sbG93aW5nIGFzc29jaWF0aW9uIGluIHRoZSBjb250cm9sIG1ldGFkYXRhLlxuICogQHBhcmFtIHVpNUFzc29jaWF0aW9uTWV0YWRhdGEgVGhlIGRlZmluaXRpb24gb2YgdGhlIGFzc29jaWF0aW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzb2NpYXRpb24odWk1QXNzb2NpYXRpb25NZXRhZGF0YTogVUk1QXNzb2NpYXRpb25NZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSA9IHVpNUFzc29jaWF0aW9uTWV0YWRhdGE7XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgaW4gdGhlIG1ldGFkYXRhIHRoYXQgdGhpcyBjb250cm9sIGltcGxlbWVudHMgYSBzcGVjaWZpYyBpbnRlcmZhY2UuXG4gKiBAcGFyYW0gaW50ZXJmYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgaW1wbGVtZW50ZWQgaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW1wbGVtZW50SW50ZXJmYWNlKGludGVyZmFjZU5hbWU6IHN0cmluZyk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXG5cdFx0bWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHR9O1xufVxuXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIHNob3VsZCBhbHNvIGJlIGV4cG9zZWQgc3RhdGljYWxseSBzbyB3ZSBjYW4gY2FsbCBpdCBmcm9tIFhNTC5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4bWxFdmVudEhhbmRsZXIoKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eWtleSkge1xuXHRcdGNvbnN0IGN1cnJlbnRDb25zdHJ1Y3RvcjogVUk1QVBJQ29udHJvbCA9IHRhcmdldC5jb25zdHJ1Y3RvciBhcyB1bmtub3duIGFzIFVJNUFQSUNvbnRyb2w7XG5cdFx0ZW5zdXJlR2V0QVBJKGN1cnJlbnRDb25zdHJ1Y3Rvcik7XG5cdFx0Y3VycmVudENvbnN0cnVjdG9yW3Byb3BlcnR5a2V5LnRvU3RyaW5nKCldID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuXHRcdFx0aWYgKGFyZ3M/Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VGFyZ2V0ID0gY3VycmVudENvbnN0cnVjdG9yLmdldEFQSShhcmdzWzBdIGFzIFVJNUV2ZW50KTtcblx0XHRcdFx0Y3VycmVudFRhcmdldD8uW3Byb3BlcnR5a2V5LnRvU3RyaW5nKCldKC4uLmFyZ3MpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH07XG59XG5cbnR5cGUgVUk1Q29udHJvbEFuZE1vcmUgPSB0eXBlb2YgQ29udHJvbCAmXG5cdEZ1bmN0aW9uICYge1xuXHRcdHJlZ2lzdGVySW5zdGFuY2U/OiBGdW5jdGlvbjtcblx0XHRvdmVycmlkZT86IEZ1bmN0aW9uO1xuXHRcdHJlbmRlcmVyPzogdW5rbm93bjtcblx0XHRyZW5kZXI6IEZ1bmN0aW9uO1xuXHRcdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0fTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIGNsYXNzIHNob3VsZCBkZWZpbmUgYSBVSTUgY29udHJvbCBvZiB0aGUgc3BlY2lmaWVkIG5hbWUuXG4gKiBAcGFyYW0gc1RhcmdldCBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIFVJNSBjbGFzc1xuICogQHBhcmFtIG1ldGFkYXRhRGVmaW5pdGlvbiBJbmxpbmUgbWV0YWRhdGEgZGVmaW5pdGlvblxuICogQHJldHVybnMgQSBjbGFzcyBkZWNvcmF0b3IgdGhhdCB3aWxsIGNyZWF0ZSBhIHVpNSBjbGFzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lVUk1Q2xhc3Moc1RhcmdldDogc3RyaW5nLCBtZXRhZGF0YURlZmluaXRpb24/OiBQYXJ0aWFsPFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb24+KTogQ2xhc3NEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKGNvbnN0cnVjdG9yOiBVSTVDb250cm9sQW5kTW9yZSkge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gbWV0YWRhdGFEZWZpbml0aW9uKSB7XG5cdFx0XHRcdGlmIChjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSkge1xuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldKSkge1xuXHRcdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XS5jb25jYXQoXG5cdFx0XHRcdFx0XHRcdG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5jb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSxcblx0XHRcdFx0XHRcdFx0Li4uKG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl0gYXMgb2JqZWN0KVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZWdpc3RlclVJNU1ldGFkYXRhKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpO1xuXHR9IGFzIENsYXNzRGVjb3JhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlPFQgZXh0ZW5kcyBVSTVFbGVtZW50PigpOiBSZWY8VD4ge1xuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnQ6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFQsXG5cdFx0c2V0Q3VycmVudDogZnVuY3Rpb24gKG9Db250cm9sSW5zdGFuY2U6IFQpOiB2b2lkIHtcblx0XHRcdHRoaXMuY3VycmVudCA9IG9Db250cm9sSW5zdGFuY2U7XG5cdFx0fVxuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIGZvbGxvd2luZyBvYmplY3Qgd2lsbCBob2xkIGEgcmVmZXJlbmNlIHRvIGEgY29udHJvbCB0aHJvdWdoIGpzeCB0ZW1wbGF0aW5nLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVJlZmVyZW5jZSgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXHRcdGlmIChCYXNlT2JqZWN0LmlzT2JqZWN0QSh0YXJnZXQsIFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSkge1xuXHRcdFx0aWYgKCFtZXRhZGF0YS5yZWZlcmVuY2VzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0XHRtZXRhZGF0YS5yZWZlcmVuY2VzW3Byb3BlcnR5S2V5XSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXIgPSBjcmVhdGVSZWZlcmVuY2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbmZ1bmN0aW9uIF9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eShqc29uTW9kZWw6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biB7XG5cdGNvbnN0IHBhdGhJbk1vZGVsID0gYC8ke3Byb3AudG9TdHJpbmcoKX1gO1xuXHRjb25zdCBvT2JqID0gZGVlcENsb25lKGpzb25Nb2RlbC5nZXRPYmplY3QocGF0aEluTW9kZWwpKTtcblx0bGV0IG9UYXJnZXQ7XG5cdGlmICh0eXBlb2Ygb09iaiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdG9UYXJnZXQgPSB7IHZhbHVlOiBvT2JqIH07XG5cdFx0b1RhcmdldC50b1N0cmluZyA9IGZ1bmN0aW9uICgpOiBzdHJpbmcge1xuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWU7XG5cdFx0fTtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb09iaiA9PT0gXCJudW1iZXJcIikge1xuXHRcdG9UYXJnZXQgPSB7IHZhbHVlOiBvT2JqIH07XG5cdFx0b1RhcmdldC50b1N0cmluZyA9IGZ1bmN0aW9uICgpOiBzdHJpbmcge1xuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWUudG9TdHJpbmcoKTtcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvT2JqID09PSBcImJvb2xlYW5cIikge1xuXHRcdG9UYXJnZXQgPSBuZXcgQm9vbGVhbihvT2JqKTtcblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9PYmopKSB7XG5cdFx0b1RhcmdldCA9IG5ldyBQcm94eShvT2JqLCB7XG5cdFx0XHRnZXQodGFyZ2V0OiB1bmtub3duW10sIHA6IHN0cmluZyB8IHN5bWJvbCwgcmVjZWl2ZXI6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRcdFx0XHRjb25zdCByZWYgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHAsIHJlY2VpdmVyKTtcblx0XHRcdFx0aWYgKHR5cGVvZiByZWYgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHJldHVybiByZWYuYmluZCh0YXJnZXQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlZiA9PT0gdW5kZWZpbmVkICYmIGlzTmFOKE51bWJlcihwLnRvU3RyaW5nKCkpKSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRfX2JpbmRpbmdJbmZvOiB7XG5cdFx0XHRcdFx0XHRcdG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiLFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBwXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVmO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9UYXJnZXQgPSB7IC4uLm9PYmogfTtcblx0fVxuXHRvVGFyZ2V0Ll9fYmluZGluZ0luZm8gPSB7XG5cdFx0bW9kZWw6IFwiJGNvbXBvbmVudFN0YXRlXCIsXG5cdFx0cGF0aDogcGF0aEluTW9kZWxcblx0fTtcblx0cmV0dXJuIG9UYXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdGF0ZVByb3BlcnR5KFxuXHRvYmo6IFVJNUNvbnRyb2xEZWZpbml0aW9uLFxuXHR0YXJnZXRDb250cm9sOiBDb250cm9sICYge1xuXHRcdF91cGRhdGVTdGF0ZTogRnVuY3Rpb247XG5cdFx0X3VwZGF0ZVN0YXRlRGVib3VuY2VkOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVUaW1lcjogdW5rbm93bjtcblx0XHRfY2hhbmdlZFByb3BzPzogc3RyaW5nW107XG5cdH1cbik6IHZvaWQge1xuXHRpZiAob2JqLm1ldGFkYXRhPy5zdGF0ZVByb3BlcnR5KSB7XG5cdFx0Y29uc3Qgc3RhdGVNb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pO1xuXHRcdHRhcmdldENvbnRyb2wuc2V0TW9kZWwoc3RhdGVNb2RlbCwgXCIkY29tcG9uZW50U3RhdGVcIik7XG5cdFx0bGV0IHVwZGF0aW5nU3RhdGUgPSBmYWxzZTtcblx0XHQvLyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBmb3JjZSB0aGUgc3RhdGUgdG8gYmUgYXBwbGllZCBhbmQgd2FpdCBmb3IgaXQgdG8gYmUgYXBwbGllZCBpbiB0ZXN0c1xuXHRcdHRhcmdldENvbnRyb2wuX3VwZGF0ZVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0ZGVsZXRlIHRoaXMuX3VwZGF0ZVN0YXRlVGltZXI7XG5cdFx0XHRpZiAoIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0dXBkYXRpbmdTdGF0ZSA9IHRydWU7XG5cdFx0XHRcdGF3YWl0ICh0aGlzIGFzIHsgb25TdGF0ZUNoYW5nZT86IEZ1bmN0aW9uIH0pLm9uU3RhdGVDaGFuZ2U/Lih0aGlzLl9jaGFuZ2VkUHJvcHMpO1xuXHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPSBbXTtcblx0XHRcdFx0dXBkYXRpbmdTdGF0ZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGVEZWJvdW5jZWQgPSBmdW5jdGlvbiAoY2hhbmdlZFByb3A6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0dGhpcy5fY2hhbmdlZFByb3BzID8/PSBbXTtcblx0XHRcdGlmICghdGhpcy5fY2hhbmdlZFByb3BzLmluY2x1ZGVzKGNoYW5nZWRQcm9wKSkge1xuXHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMucHVzaChjaGFuZ2VkUHJvcCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXRoaXMuX3VwZGF0ZVN0YXRlVGltZXIgJiYgIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlU3RhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVN0YXRlKCk7XG5cdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29udHJvbCwgb2JqLm1ldGFkYXRhLnN0YXRlUHJvcGVydHksIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb3h5KHN0YXRlTW9kZWwsIHtcblx0XHRcdFx0XHRnZXQ6ICh0YXJnZXQ6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZXQ6IChzZXRTdGF0ZU1vZGVsOiBKU09OTW9kZWwsIHByb3AsIHZhbHVlKTogYm9vbGVhbiA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBzZXRSZXN1bHQgPSBzZXRTdGF0ZU1vZGVsLnNldFByb3BlcnR5KGAvJHtwcm9wLnRvU3RyaW5nKCl9YCwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGVEZWJvdW5jZWQocHJvcC50b1N0cmluZygpKTtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRSZXN1bHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHQvLyBSZXBsYWNpbmcgdGhlIGNvbXBsZXRlIHN0YXRlXG5cdFx0XHRcdHN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC9gLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sW29iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5IGFzIGtleW9mIENvbnRyb2xdID0geyAuLi5vYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZSB9IGFzIG5ldmVyO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEludGVybmFsIGhlYXZ5IGxpZnRpbmcgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBjcmVhdGluZyB0aGUgY2xhc3MgcHJvcGVydHkgZm9yIHVpNSB0byB1c2UuXG4gKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIHByb3RvdHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZVxuICogQHBhcmFtIGluT2JqIFRoZSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBjbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlclVJNU1ldGFkYXRhKGNsYXp6OiBVSTVDb250cm9sQW5kTW9yZSwgbmFtZTogc3RyaW5nLCBpbk9iajogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbik6IEZ1bmN0aW9uIHtcblx0aWYgKGNsYXp6LmdldE1ldGFkYXRhPy4oKS5pc0EoXCJzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvblwiKSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKChvYmpOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbk9iaiwgb2JqTmFtZSk7XG5cdFx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSkuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cblx0aWYgKChjbGF6ej8uZ2V0TWV0YWRhdGEoKSBhcyB1bmtub3duIGFzIHsgZ2V0U3RlcmVvdHlwZTogRnVuY3Rpb24gfSk/LmdldFN0ZXJlb3R5cGUoKSA9PT0gXCJjb250cm9sXCIpIHtcblx0XHRjb25zdCByZW5kZXJlckRlZmluaXRpb24gPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXI7XG5cdFx0b2JqLnJlbmRlcmVyID0geyBhcGlWZXJzaW9uOiAyIH07XG5cdFx0aWYgKHR5cGVvZiByZW5kZXJlckRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9IGVsc2UgaWYgKHJlbmRlcmVyRGVmaW5pdGlvbiAhPSB1bmRlZmluZWQpIHtcblx0XHRcdG9iai5yZW5kZXJlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9XG5cdH1cblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0T2JqZWN0LmtleXMoY2xhenoucHJvdG90eXBlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5ICE9PSBcIm1ldGFkYXRhXCIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvYmoubWV0YWRhdGE/LmNvbnRyb2xsZXJFeHRlbnNpb25zICYmIE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgY0V4dE5hbWUgaW4gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKSB7XG5cdFx0XHRvYmpbY0V4dE5hbWVdID0gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW2NFeHROYW1lXTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0cHV0ID0gY2xhenouZXh0ZW5kKG5hbWUsIG9iaikgYXMgdHlwZW9mIENvbnRyb2wgJiBGdW5jdGlvbjtcblx0Y29uc3QgZm5Jbml0ID0gb3V0cHV0LnByb3RvdHlwZS5pbml0O1xuXHRjb25zdCBmbkFmdGVySW5pdCA9IG91dHB1dC5wcm90b3R5cGUuYWZ0ZXJJbml0O1xuXHRvdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0aWYgKGZuSW5pdCkge1xuXHRcdFx0Zm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0XHRpZiAoY2xhenoucmVnaXN0ZXJJbnN0YW5jZSkge1xuXHRcdFx0Y2xhenoucmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdC8vIElmIGEgdmFsdWUgd2FzIHNldCBpbiBgaW5pdGAgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgc2V0IGluIHRoZSB2YWx1ZSBpbiB0aGUgZW5kXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5RGVmYXVsdCA9IHRoaXNbcHJvcGVydHlLZXldID8/IHByb3BlcnR5RGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllcyA/Pz0ge307XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gdjtcblx0XHRcdFx0XHRcdFx0dGhpcy5tUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgY2FzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcm9wZXJ0eSBmaXJzdCBhbmQgbm90IGp1c3QgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHQvLyBEdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uLCBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHdpdGggYSBub24gYmluZGluZyB2YWx1ZSwgc2V0UHJvcGVydHkgaXMgY2FsbGVkIGFuZCBub3QgYmluZFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ1Byb3BlcnR5VmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgd2UgdXBkYXRlIHRoZSBfYmluZGluZ1Byb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgJiYgcHJvcGVydHlWYWx1ZSAhPT0gYmluZGluZ1Byb3BlcnR5VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BWYWx1ZSA9IHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XTtcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyAuLi5wcm9wVmFsdWUgfTsgLy8gQ3JlYXRlIHNoYWxsb3cgY29weVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm9wVmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpc1twcm9wZXJ0eUtleV0gPSBwcm9wZXJ0eURlZmF1bHQ7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9hcHBseWluZ1NldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBZ2dyZWdhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zKTtcblx0XHRcdGFBZ2dyZWdhdGlvbktleXMuZm9yRWFjaCgoYWdncmVnYXRpb25LZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25EZWYgPSBvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zW2FnZ3JlZ2F0aW9uS2V5XTtcblx0XHRcdFx0Y29uc3QgZGVmYXVsdFZhbHVlID0gdGhpc1thZ2dyZWdhdGlvbktleV0gPz8gYWdncmVnYXRpb25EZWYuZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgYWdncmVnYXRpb25LZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5KTtcblx0XHRcdFx0XHRcdGlmIChvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zW2FnZ3JlZ2F0aW9uS2V5XS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50IHx8IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoZGVmYXVsdFZhbHVlICYmIChkZWZhdWx0VmFsdWUgYXMgVUk1RWxlbWVudCk/LmlzQSkge1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXNbYWdncmVnYXRpb25LZXldID0gZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSBmYWxzZTtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5fYXBwbHlpbmdTZXR0aW5ncztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBhQXNzb2NpYXRpb25LZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmFzc29jaWF0aW9ucyk7XG5cdFx0XHRhQXNzb2NpYXRpb25LZXlzLmZvckVhY2goKGFzc29jaWF0aW9uS2V5KSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBhc3NvY2lhdGlvbktleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QXNzb2NpYXRpb24oYXNzb2NpYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hc3NvY2lhdGlvbnNbYXNzb2NpYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5yZWZlcmVuY2VzKSB7XG5cdFx0XHRjb25zdCByZWZlcmVuY2VQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLnJlZmVyZW5jZXMpO1xuXHRcdFx0cmVmZXJlbmNlUHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IGNyZWF0ZVJlZmVyZW5jZSgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChvYmoubWV0YWRhdGEubWV0aG9kcykge1xuXHRcdFx0Zm9yIChjb25zdCBtZXRob2ROYW1lIGluIG9iai5tZXRhZGF0YS5tZXRob2RzKSB7XG5cdFx0XHRcdGNvbnN0IG1ldGhvZERlZmluaXRpb24gPSBvYmoubWV0YWRhdGEubWV0aG9kc1ttZXRob2ROYW1lXTtcblx0XHRcdFx0aWYgKG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQWZ0ZXJBc3luY1wiIHx8IG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQmVmb3JlQXN5bmNcIikge1xuXHRcdFx0XHRcdGlmICghdGhpcy5tZXRob2RIb2xkZXIpIHtcblx0XHRcdFx0XHRcdHRoaXMubWV0aG9kSG9sZGVyID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdID0gW3RoaXNbbWV0aG9kTmFtZV1dO1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBtZXRob2ROYW1lLCB7XG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRzZXQ6ICh2OiBGdW5jdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV0ucHVzaCh2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFzeW5jICguLi5tZXRob2RBcmdzOiB1bmtub3duW10pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtZXRob2RBcnJheXMgPSB0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAobWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtZXRob2RBcnJheXMucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGFyZyBvZiBtZXRob2RBcnJheXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGF3YWl0IGFyZy5hcHBseSh0aGlzLCBtZXRob2RBcmdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0X2NyZWF0ZVN0YXRlUHJvcGVydHkob2JqLCB0aGlzKTtcblx0XHRpZiAoZm5BZnRlckluaXQpIHtcblx0XHRcdGZuQWZ0ZXJJbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0fTtcblxuXHRjbGF6ei5vdmVycmlkZSA9IGZ1bmN0aW9uIChvRXh0ZW5zaW9uOiB1bmtub3duKTogRnVuY3Rpb24ge1xuXHRcdGNvbnN0IHBvbCA9IHt9O1xuXHRcdChwb2wgYXMgRnVuY3Rpb24pLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IEZ1bmN0aW9uIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9O1xuXHRcdGNvbnN0IG9DbGFzcyA9IChNZXRhZGF0YSBhcyB1bmtub3duIGFzIHsgY3JlYXRlQ2xhc3M6IEZ1bmN0aW9uIH0pLmNyZWF0ZUNsYXNzKFxuXHRcdFx0Y2xhenosXG5cdFx0XHRgYW5vbnltb3VzRXh0ZW5zaW9ufiR7dWlkKCl9YCxcblx0XHRcdHBvbCxcblx0XHRcdENvbnRyb2xsZXJNZXRhZGF0YVxuXHRcdCk7XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX3N0YXRpY092ZXJyaWRlID0gb0V4dGVuc2lvbjtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fb3ZlcnJpZGUgPSAoY2xhenouZ2V0TWV0YWRhdGEoKSBhcyB7IF9vdmVycmlkZT86IHVua25vd24gfSkuX292ZXJyaWRlO1xuXHRcdHJldHVybiBvQ2xhc3M7XG5cdH07XG5cblx0T2JqZWN0UGF0aC5zZXQobmFtZSwgb3V0cHV0KTtcblxuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUE4SUEsTUFBTUEsY0FBYyxHQUFHLFNBQUFBLENBQVVDLE1BQXNELEVBQWdDO0lBQ3RIQSxNQUFNLENBQUNDLFFBQVEsR0FBR0Ms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
|
|
774
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJyZWZlcmVuY2VzIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJwcmVwYXJlR2V0QVBJRnVuY3Rpb24iLCJvRXZlbnQiLCJhcGlGUU4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvU291cmNlIiwiZ2V0U291cmNlIiwiX2dldEFQSUV4dGVuc2lvbiIsImlzQSIsImdldFBhcmVudCIsImlzRGVwZW5kZW50Qm91bmQiLCJvRGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJoYXNDb3JyZWN0RGVwZW5kZW50IiwiZmluZCIsIm9EZXBlbmRlbnQiLCJvU291cmNlTWFwIiwiaW5zdGFuY2VNYXAiLCJnZXQiLCJ0YXJnZXRDb250cm9sIiwiZW5zdXJlR2V0QVBJIiwiX19hcGlSZWdpc3RlcmVkIiwiV2Vha01hcCIsInJlZ2lzdGVySW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjb25zdHJ1Y3RvciIsInNldCIsInB1c2giLCJnZXRBUEkiLCJkZWZpbmVTdGF0ZSIsInByb3BlcnR5S2V5IiwicHJvcGVydHlEZXNjcmlwdG9yIiwiX2luaXRpYWxpemVyIiwiX3JlZiIsInN0YXRlUHJvcGVydHkiLCJFcnJvciIsIndyaXRhYmxlIiwic3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZSIsImluaXRpYWxpemVyIiwiY2FsbCIsIl9leHBvcnRzIiwibWV0aG9kT3ZlcnJpZGUiLCJleHRlbnNpb25OYW1lIiwib3ZlcnJpZGUiLCJvdmVycmlkZXMiLCJjdXJyZW50VGFyZ2V0IiwiZXh0ZW5zaW9uIiwidG9TdHJpbmciLCJleHRlbnNpYmxlIiwib3ZlcnJpZGVFeGVjdXRpb24iLCJkZXNjcmlwdG9yIiwiaG9va2FibGUiLCJwdWJsaWNFeHRlbnNpb24iLCJlbnVtZXJhYmxlIiwicHVibGljIiwicHJpdmF0ZUV4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZmluYWwiLCJ1c2luZ0V4dGVuc2lvbiIsImV4dGVuc2lvbkNsYXNzIiwiZXZlbnQiLCJldmVudEtleSIsInByb3BlcnR5IiwiYXR0cmlidXRlRGVmaW5pdGlvbiIsIl9pbml0aWFsaXplcjIiLCJfcmVmMiIsImJpbmRhYmxlIiwiaXNCaW5kaW5nSW5mbyIsImdyb3VwIiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJfaW5pdGlhbGl6ZXIzIiwiX3JlZjMiLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImRlZmF1bHRBZ2dyZWdhdGlvbiIsImFzc29jaWF0aW9uIiwidWk1QXNzb2NpYXRpb25NZXRhZGF0YSIsImltcGxlbWVudEludGVyZmFjZSIsImludGVyZmFjZU5hbWUiLCJ4bWxFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImN1cnJlbnRDb25zdHJ1Y3RvciIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiZGVmaW5lVUk1Q2xhc3MiLCJzVGFyZ2V0IiwibWV0YWRhdGFEZWZpbml0aW9uIiwicHJvdG90eXBlIiwia2V5IiwiaXNBcnJheSIsImNvbmNhdCIsInJlZ2lzdGVyVUk1TWV0YWRhdGEiLCJtaXhpbiIsImludGVyZmFjZUNsYXNzIiwiYmFzZUN0b3IiLCJfaW50ZXJmYWNlQ2xhc3MkcHJvdG8iLCJfaW50ZXJmYWNlQ2xhc3MkcHJvdG8yIiwiX2ludGVyZmFjZUNsYXNzJHByb3RvMyIsIl9pbnRlcmZhY2VDbGFzcyRwcm90bzQiLCJleHRlbmQiLCJnZXRJbnRlcmZhY2VOYW1lIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJuYW1lIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcmVhdGUiLCJzZXR1cE1peGluIiwiY3JlYXRlUmVmZXJlbmNlIiwiY3VycmVudCIsInNldEN1cnJlbnQiLCJvQ29udHJvbEluc3RhbmNlIiwiZGVmaW5lUmVmZXJlbmNlIiwiQmFzZU9iamVjdCIsImlzT2JqZWN0QSIsIl9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eSIsImpzb25Nb2RlbCIsInByb3AiLCJwYXRoSW5Nb2RlbCIsIm9PYmoiLCJkZWVwQ2xvbmUiLCJnZXRPYmplY3QiLCJvVGFyZ2V0IiwibW9kZWwiLCJQcm94eSIsInAiLCJyZWNlaXZlciIsInJlZiIsIlJlZmxlY3QiLCJiaW5kIiwiaXNOYU4iLCJOdW1iZXIiLCJfX2JpbmRpbmdJbmZvIiwicGF0aCIsIl9jcmVhdGVTdGF0ZVByb3BlcnR5Iiwib2JqIiwiX29iaiRtZXRhZGF0YSIsInN0YXRlTW9kZWwiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsInVwZGF0aW5nU3RhdGUiLCJib3VuZFRvU3RhdGVQcm9wcyIsInByb3BlcnR5TmFtZSIsInByb3BlcnR5RGVmIiwiYmluZFRvU3RhdGUiLCJhdHRhY2hQcm9wZXJ0eUNoYW5nZSIsImV2dCIsIl9ldnQkZ2V0UGFyYW1ldGVyIiwiZ2V0UGFyYW1ldGVyIiwic3Vic3RyaW5nIiwiaW5jbHVkZXMiLCJzZXRQcm9wZXJ0eSIsIl91cGRhdGVTdGF0ZSIsIl91cGRhdGVTdGF0ZVRpbWVyIiwiX29uU3RhdGVDaGFuZ2UiLCJfcmVmNCIsIm9uU3RhdGVDaGFuZ2UiLCJfY2hhbmdlZFByb3BzIiwiX3VwZGF0ZVN0YXRlRGVib3VuY2VkIiwiY2hhbmdlZFByb3AiLCJzZXRUaW1lb3V0IiwiY29uZmlndXJhYmxlIiwic2V0U3RhdGVNb2RlbCIsInZhbHVlIiwiX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUiLCJzZXRSZXN1bHQiLCJmblNldFByb3BlcnR5Iiwic1Byb3BlcnR5TmFtZSIsIm9WYWx1ZSIsImJTdXBwcmVzc0ludmFsaWRhdGUiLCJfb2JqJG1ldGFkYXRhMiIsImNsYXp6IiwiaW5PYmoiLCJfY2xhenokZ2V0TWV0YWRhdGEiLCJfY2xhenokZ2V0TWV0YWRhdGEyIiwiX2luT2JqJG1ldGFkYXRhIiwiX2NsYXp6JG1ldGFkYXRhIiwiX29iaiRtZXRhZGF0YTMiLCJvYmpOYW1lIiwiYmFzZVR5cGUiLCJnZXRQcm90b3R5cGVPZiIsImdldFN0ZXJlb3R5cGUiLCJyZW5kZXJlckRlZmluaXRpb24iLCJyZW5kZXJlciIsInJlbmRlciIsImFwaVZlcnNpb24iLCJrZXlzIiwiZSIsImNFeHROYW1lIiwib3V0cHV0IiwiZm5Jbml0IiwiaW5pdCIsImZuQWZ0ZXJJbml0IiwiYWZ0ZXJJbml0IiwiX3RoaXMiLCJfbGVuMiIsIl9rZXkyIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwicHJvcGVydHlEZWZhdWx0IiwiX2JpbmRpbmdQcm9wZXJ0aWVzIiwidiIsIm1Qcm9wZXJ0aWVzIiwicHJvcGVydHlWYWx1ZSIsImdldFByb3BlcnR5IiwiYmluZGluZ1Byb3BlcnR5VmFsdWUiLCJwcm9wVmFsdWUiLCJfYXBwbHlpbmdTZXR0aW5ncyIsImFBZ2dyZWdhdGlvbktleXMiLCJhZ2dyZWdhdGlvbktleSIsImFnZ3JlZ2F0aW9uRGVmIiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImFBc3NvY2lhdGlvbktleXMiLCJhc3NvY2lhdGlvbktleSIsInNldEFzc29jaWF0aW9uIiwiZ2V0QXNzb2NpYXRpb24iLCJyZWZlcmVuY2VQcm9wZXJ0aWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZERlZmluaXRpb24iLCJtZXRob2RIb2xkZXIiLCJtZXRob2RBcnJheXMiLCJyZXZlcnNlIiwiX2xlbjMiLCJtZXRob2RBcmdzIiwiX2tleTMiLCJhcmciLCJvRXh0ZW5zaW9uIiwicG9sIiwiX2xlbjQiLCJfa2V5NCIsIm9DbGFzcyIsIk1ldGFkYXRhIiwiY3JlYXRlQ2xhc3MiLCJ1aWQiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJfc3RhdGljT3ZlcnJpZGUiLCJfb3ZlcnJpZGUiLCJPYmplY3RQYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDbGFzc1N1cHBvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB7IGhvb2thYmxlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NZXRhZGF0YVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgQ29udHJvbGxlck1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlck1ldGFkYXRhXCI7XG5pbXBvcnQgdHlwZSBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5cbnR5cGUgT3ZlcnJpZGVEZWZpbml0aW9uID0gUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+O1xudHlwZSBVSTVDb250cm9sbGVyTWV0aG9kRGVmaW5pdGlvbiA9IHtcblx0b3ZlcnJpZGVFeGVjdXRpb24/OiBPdmVycmlkZUV4ZWN1dGlvbjtcblx0cHVibGljPzogYm9vbGVhbjtcblx0ZmluYWw/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIE5vbkFic3RyYWN0Q2xhc3M8VD4gPSBQaWNrPFQsIGtleW9mIFQ+ICYgKG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBUKTtcblxudHlwZSBVSTVQcm9wZXJ0eU1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGJpbmRhYmxlPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRncm91cD86IHN0cmluZztcblx0ZGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblx0YnlWYWx1ZT86IGJvb2xlYW47XG5cdGlzQmluZGluZ0luZm8/OiBib29sZWFuO1xuXHRiaW5kVG9TdGF0ZT86IHN0cmluZztcblx0ZXhwZWN0ZWRBbm5vdGF0aW9ucz86IHN0cmluZ1tdO1xuXHRleHBlY3RlZFR5cGVzPzogc3RyaW5nW107XG5cdGFsbG93ZWRWYWx1ZXM/OiBzdHJpbmdbXTtcblx0dmlzaWJpbGl0eT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGFsdFR5cGVzPzogc3RyaW5nW107XG5cdG11bHRpcGxlPzogYm9vbGVhbjtcblx0aXNEZWZhdWx0PzogYm9vbGVhbjtcblx0ZGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblx0ZGVmYXVsdENsYXNzPzogdW5rbm93bjtcblx0c2luZ3VsYXJOYW1lPzogc3RyaW5nO1xuXHR2aXNpYmlsaXR5Pzogc3RyaW5nO1xuXHRmb3J3YXJkaW5nPzogb2JqZWN0O1xufTtcbmV4cG9ydCB0eXBlIFVJNUFzc29jaWF0aW9uTWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0bXVsdGlwbGU/OiBib29sZWFuO1xuXHRzaW5ndWxhck5hbWU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbiA9IHtcblx0ZGVmYXVsdEFnZ3JlZ2F0aW9uPzogc3RyaW5nO1xuXHRjb250cm9sbGVyRXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgdHlwZW9mIENvbnRyb2xsZXJFeHRlbnNpb24gfCBGdW5jdGlvbj47XG5cdHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFVJNVByb3BlcnR5TWV0YWRhdGE+O1xuXHRhZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGE+O1xuXHRyZWZlcmVuY2VzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcblx0YXNzb2NpYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhPjtcblx0bWV0aG9kczogUmVjb3JkPHN0cmluZywgVUk1Q29udHJvbGxlck1ldGhvZERlZmluaXRpb24+O1xuXHRldmVudHM6IFJlY29yZDxzdHJpbmcsIHt9Pjtcblx0aW50ZXJmYWNlczogc3RyaW5nW107XG5cdGxpYnJhcnk/OiBzdHJpbmc7XG5cdGRlc2lnbnRpbWU/OiBzdHJpbmc7XG5cdGNvbmZpZz86IHtcblx0XHRmdWxsV2lkdGg/OiBib29sZWFuO1xuXHR9O1xuXHRzdGF0ZVByb3BlcnR5Pzogc3RyaW5nO1xuXHRzdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblx0bWFuaWZlc3Q/OiBzdHJpbmcgfCB1bmtub3duO1xuXHRyZXR1cm5UeXBlcz86IHN0cmluZ1tdO1xuXHRidWlsZGluZ0Jsb2NrTWV0YWRhdGE/OiB1bmtub3duO1xufTtcbmV4cG9ydCB0eXBlIEFjY2Vzc29yRGVzY3JpcHRvcjxUPiA9IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+ICYgeyBpbml0aWFsaXplcj86ICgpID0+IFQgfTtcbnR5cGUgVUk1Q29udHJvbGxlckRlZmluaXRpb24gPSB7XG5cdG92ZXJyaWRlPzogeyBleHRlbnNpb24/OiBSZWNvcmQ8c3RyaW5nLCBPdmVycmlkZURlZmluaXRpb24+IH0gJiB7XG5cdFx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xuXHR9O1xuXHRvdmVycmlkZXM/OiB7IGV4dGVuc2lvbj86IFJlY29yZDxzdHJpbmcsIE92ZXJyaWRlRGVmaW5pdGlvbj4gfSAmIHtcblx0XHRbazogc3RyaW5nXTogRnVuY3Rpb247XG5cdH07XG5cdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0cmVuZGVyZXI/OiBGdW5jdGlvbjtcbn07XG5cbnR5cGUgVUk1Q29udHJvbERlZmluaXRpb24gPSB7XG5cdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0b3ZlcnJpZGU/OiB1bmtub3duO1xuXHRyZW5kZXJlcj86IEZ1bmN0aW9uO1xufTtcblxudHlwZSBVSTVBUElDb250cm9sID0gQ29udHJvbCAmIHtcblx0Z2V0QVBJKGV2ZW50OiBVSTVFdmVudCwgZnFkbj86IHN0cmluZyk6IFVJNUFQSUNvbnRyb2wgfCB1bmRlZmluZWQ7XG5cdGluc3RhbmNlTWFwOiBXZWFrTWFwPG9iamVjdCwgb2JqZWN0W10+O1xuXHRfX2FwaVJlZ2lzdGVyZWQ6IGJvb2xlYW47XG59ICYge1xuXHRbazogc3RyaW5nXTogRnVuY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBYTUxFdmVudEhvbGRlciA9IHtcblx0Z2V0QVBJKGV2ZW50OiBVSTVFdmVudCwgZnFkbj86IHN0cmluZyk6IFVJNUFQSUNvbnRyb2wgfCB1bmRlZmluZWQ7XG5cdGluc3RhbmNlTWFwOiBXZWFrTWFwPG9iamVjdCwgb2JqZWN0W10+O1xufTtcblxudHlwZSBDb250cm9sUHJvcGVydHlOYW1lczxUPiA9IHtcblx0Ly8gbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIFRTIGNvbXBpbGVyXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IEs7XG59W2tleW9mIFRdO1xuZXhwb3J0IHR5cGUgUHJvcGVydGllc09mPFQsIEsgZXh0ZW5kcyBrZXlvZiBUIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+ICZcblx0KEsgZXh0ZW5kcyBrZXlvZiBUID8gUGFydGlhbDxQaWNrPFQsIEs+PiA6IHt9KSAmXG5cdCRDb250cm9sU2V0dGluZ3M7XG5leHBvcnQgdHlwZSBDb252ZXJ0Q29udGV4dFRvU3RyaW5nPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogSyBleHRlbmRzIFwibWV0YVBhdGhcIiB8IFwiY29udGV4dFBhdGhcIiA/IHN0cmluZyA6IFRbS107XG59O1xudHlwZSBDb250ZXh0VG9TdHJpbmc8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgQ29udGV4dCB8IHVuZGVmaW5lZCA/IHN0cmluZyB8IHVuZGVmaW5lZCA6IFRbS107XG59O1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0aWVzT2ZCdWlsZGluZ0Jsb2NrPFQ+ID0gQ29udGV4dFRvU3RyaW5nPFByb3BlcnRpZXNPZjxUPj47XG5leHBvcnQgdHlwZSBTdHJpY3RQcm9wZXJ0aWVzT2Y8VD4gPSBQaWNrPFQsIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+PjtcbmV4cG9ydCB0eXBlIFVJNUFjY2Vzc29yczxUPiA9IHtcblx0Ly8gQWRkIGFsbCB0aGUgZ2V0WFhYIG1ldGhvZCwgbWlnaHQgYWRkIHRvbyBtdWNoIGFzIEknbSBub3QgZmlsdGVyaW5nIG9uIGFjdHVhbCBwcm9wZXJ0aWVzLi4uXG5cdFtQIGluIGtleW9mIFJlcXVpcmVkPFQ+IGFzIGBnZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICgpID0+IFRbUF07XG59O1xuZXhwb3J0IHR5cGUgVUk1U2V0dGVyczxUPiA9IHtcblx0Ly8gQWRkIGFsbCB0aGUgc2V0WFhYIG1ldGhvZCwgbWlnaHQgYWRkIHRvbyBtdWNoIGFzIEknbSBub3QgZmlsdGVyaW5nIG9uIGFjdHVhbCBwcm9wZXJ0aWVzLi4uXG5cdFtQIGluIGtleW9mIFJlcXVpcmVkPFQ+IGFzIGBzZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICh2YWx1ZTogVFtQXSkgPT4gVDtcbn07XG5leHBvcnQgdHlwZSBFbmhhbmNlV2l0aFVJNTxUPiA9IHtcblx0bmV3IChwcm9wczogUHJvcGVydGllc09mPFQ+KTogRW5oYW5jZVdpdGhVSTU8VD47XG5cdG5ldyAoc0lkOiBzdHJpbmcsIHByb3BzOiBQcm9wZXJ0aWVzT2Y8VD4pOiBFbmhhbmNlV2l0aFVJNTxUPjtcbn0gJiBUICZcblx0VUk1QWNjZXNzb3JzPFQ+ICZcblx0VUk1U2V0dGVyczxUPjtcblxuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uT3ZlcnJpZGVFeGVjdXRpb24gPSBcIkluc3RlYWRcIiB8IFwiQmVmb3JlXCIgfCBcIkFmdGVyXCIgfCBcIkFmdGVyQXN5bmNcIiB8IFwiQmVmb3JlQXN5bmNcIjtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiB8IFVJNUNvbnRyb2xEZWZpbml0aW9uKTogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbiB7XG5cdHRhcmdldC5tZXRhZGF0YSA9IG1lcmdlKFxuXHRcdHtcblx0XHRcdGNvbnRyb2xsZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdHJlZmVyZW5jZXM6IHt9LFxuXHRcdFx0YXNzb2NpYXRpb25zOiB7fSxcblx0XHRcdG1ldGhvZHM6IHt9LFxuXHRcdFx0ZXZlbnRzOiB7fSxcblx0XHRcdGludGVyZmFjZXM6IFtdXG5cdFx0fSxcblx0XHR0YXJnZXQubWV0YWRhdGEgPz8ge31cblx0KSBhcyBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdGhhdCB3aWxsIGZpbmQgdGhlIGNvcnJlY3QgQVBJIG9iamVjdCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250cm9sIGhpZXJhcmNoeS5cbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXIgZ2V0QVBJIGZ1bmN0aW9uIGZvciB0aGlzIGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVHZXRBUElGdW5jdGlvbih0YXJnZXQ6IFVJNUFQSUNvbnRyb2wpIHtcblx0cmV0dXJuIGZ1bmN0aW9uIDxUIGV4dGVuZHMgVUk1QVBJQ29udHJvbD4oXG5cdFx0dGhpczogVUk1QVBJQ29udHJvbCxcblx0XHRvRXZlbnQ6IFVJNUV2ZW50LFxuXHRcdGFwaUZRTjogc3RyaW5nID0gdGFyZ2V0LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpXG5cdCk6IFQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIE1hbmFnZWRPYmplY3QgfCBudWxsO1xuXHRcdGlmICh0YXJnZXQuX2dldEFQSUV4dGVuc2lvbikge1xuXHRcdFx0b1NvdXJjZSA9IHRhcmdldC5fZ2V0QVBJRXh0ZW5zaW9uKG9Tb3VyY2UpID8/IG9Tb3VyY2U7XG5cdFx0fVxuXHRcdHdoaWxlIChvU291cmNlICYmICFvU291cmNlLmlzQTxUPihhcGlGUU4pICYmIG9Tb3VyY2UuZ2V0UGFyZW50KSB7XG5cdFx0XHRpZiAodGhpcy5pc0RlcGVuZGVudEJvdW5kKSB7XG5cdFx0XHRcdGNvbnN0IG9EZXBlbmRlbnRzID0gKG9Tb3VyY2UgYXMgQ29udHJvbCkuZ2V0RGVwZW5kZW50cygpO1xuXHRcdFx0XHRjb25zdCBoYXNDb3JyZWN0RGVwZW5kZW50ID0gb0RlcGVuZGVudHMuZmluZCgob0RlcGVuZGVudDogVUk1RWxlbWVudCkgPT4gb0RlcGVuZGVudC5pc0EoYXBpRlFOKSk7XG5cdFx0XHRcdGlmIChoYXNDb3JyZWN0RGVwZW5kZW50KSB7XG5cdFx0XHRcdFx0b1NvdXJjZSA9IGhhc0NvcnJlY3REZXBlbmRlbnQgYXMgdW5rbm93biBhcyBUO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9Tb3VyY2UgPSBvU291cmNlLmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgVDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFvU291cmNlIHx8ICFvU291cmNlLmlzQTxUPihhcGlGUU4pKSB7XG5cdFx0XHRjb25zdCBvU291cmNlTWFwID0gdGhpcy5pbnN0YW5jZU1hcC5nZXQodGhpcykgYXMgVFtdO1xuXHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2VNYXA/LltvU291cmNlTWFwLmxlbmd0aCAtIDFdO1xuXHRcdH1cblx0XHRsZXQgdGFyZ2V0Q29udHJvbDtcblx0XHRpZiAob1NvdXJjZSAmJiBvU291cmNlLmlzQTxUPihhcGlGUU4pKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sID0gb1NvdXJjZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldENvbnRyb2w7XG5cdH07XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IHdoZW4gYW4geG1sRXZlbnRIYW5kbGVyIGlzIGRlZmluZWQsIHRoZSBgZ2V0QVBJYCBmdW5jdGlvbiBpcyBwcm9wZXJseSBhc3NpZ25lZC5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIGNsYXNzIGNvbnN0cnVjdG9yIHRoYXQgc2hvdWxkIGhvbGQgdGhlIHN0YXRpYyBmdW5jdGlvbnNcbiAqL1xuY29uc3QgZW5zdXJlR2V0QVBJID0gZnVuY3Rpb24gKHRhcmdldDogVUk1QVBJQ29udHJvbCk6IHZvaWQge1xuXHRpZiAoIXRhcmdldC5fX2FwaVJlZ2lzdGVyZWQpIHtcblx0XHR0YXJnZXQuX19hcGlSZWdpc3RlcmVkID0gdHJ1ZTtcblx0XHR0YXJnZXQuaW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPigpO1xuXHRcdHRhcmdldC5yZWdpc3Rlckluc3RhbmNlID0gZnVuY3Rpb24gKF9pbnN0YW5jZTogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHRcdGlmICghdGhpcy5pbnN0YW5jZU1hcC5nZXQoX2luc3RhbmNlLmNvbnN0cnVjdG9yKSkge1xuXHRcdFx0XHR0aGlzLmluc3RhbmNlTWFwLnNldChfaW5zdGFuY2UuY29uc3RydWN0b3IsIFtdKTtcblx0XHRcdH1cblx0XHRcdCh0aGlzLmluc3RhbmNlTWFwLmdldChfaW5zdGFuY2UuY29uc3RydWN0b3IpIGFzIG9iamVjdFtdKS5wdXNoKF9pbnN0YW5jZSk7XG5cdFx0fTtcblx0XHR0YXJnZXQuZ2V0QVBJID0gcHJlcGFyZUdldEFQSUZ1bmN0aW9uKHRhcmdldCk7XG5cdH1cbn07XG5cbnR5cGUgRXh0ZW5kV2l0aE9iamVjdDxULCBLPiA9IFQgZXh0ZW5kcyBvYmplY3QgPyBLICYgeyBbVEtleSBpbiBrZXlvZiBUXT86IEJpbmRpbmdJbmZvSG9sZGVyPFRbVEtleV0+IH0gOiBLO1xuXG5leHBvcnQgdHlwZSBTdGF0ZU9mPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEFycmF5PGluZmVyIFU+IHwgUmVhZG9ubHlBcnJheTxpbmZlciBVPiA/IEV4dGVuZFdpdGhPYmplY3Q8VSwgUmVhZG9ubHlBcnJheTxVPj4gOiBUW0tdO1xufTtcbmV4cG9ydCB0eXBlIEJpbmRpbmdJbmZvSG9sZGVyPFQ+ID0gVCAmIHtcblx0X19iaW5kaW5nSW5mbzoge1xuXHRcdHBhdGg6IHN0cmluZztcblx0XHRtb2RlbDogc3RyaW5nO1xuXHRcdHR5cGU6IFQ7XG5cdH07XG59O1xuXG4vKipcbiAqIEFsbG93cyB0byBkZWZpbmUgYSBwcm9wZXJ0eSB0aGF0IHdpbGwgaG9sZCB0aGUgY29udHJvbCBzdGF0ZS5cbiAqXG4gKiBQcm9wZXJ0aWVzIGRlZmluZWQgd2l0aCB0aGlzIGRlY29yYXRvciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYm91bmQgdG8gdGhlIGNvbnRyb2wgc3RhdGUgd2hlbiB1c2VkIGluIEpTWC5cbiAqIEFycmF5cyBuZWVkIHRvIGJlIGJvdW5kIHVzaW5nIHRoZSBgYmluZFN0YXRlYCBmdW5jdGlvbi5cbiAqIEBleHBlcmltZW50YWxcbiAqIEByZXR1cm5zIEEgcHJvcGVydHkgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTdGF0ZSgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAobWV0YWRhdGEuc3RhdGVQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IG9uZSBzdGF0ZSBwcm9wZXJ0eSBwZXIgY29udHJvbCBpcyBhbGxvd2VkXCIpO1xuXHRcdH1cblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5ID0gcHJvcGVydHlLZXk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbi8qICNyZWdpb24gQ09OVFJPTExFUiBFWFRFTlNJT05TICovXG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIGlzIGFuIG92ZXJyaWRlIGZvciB0aGUgbWV0aG9kIG5hbWUgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoZSBzcGVjaWZpYyBjb250cm9sbGVyIGV4dGVuc2lvbiBvciBiYXNlIGltcGxlbWVudGF0aW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgb3ZlcnJpZGRlblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ldGhvZE92ZXJyaWRlKGV4dGVuc2lvbk5hbWU/OiBzdHJpbmcpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5KSB7XG5cdFx0aWYgKCF0YXJnZXQub3ZlcnJpZGUpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZSA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIXRhcmdldC5vdmVycmlkZXMpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZXMgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGVzO1xuXHRcdGlmIChleHRlbnNpb25OYW1lKSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdID0ge307XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV07XG5cdFx0fVxuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSAodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPilbcHJvcGVydHlLZXkudG9TdHJpbmcoKV07XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2FuIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGJhc2VkIG9uIHRoZSBkZWZpbmVkIG92ZXJyaWRlRXhlY3V0aW9uVHlwZS5cbiAqIEBwYXJhbSBvdmVycmlkZUV4ZWN1dGlvbiBUaGUgT3ZlcnJpZGVFeGVjdXRpb24gZGVmaW5pbmcgd2hlbiB0aGUgb3ZlcnJpZGUgc2hvdWxkIHJ1biAoQmVmb3JlIC8gQWZ0ZXIgLyBJbnN0ZWFkKVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuc2libGUob3ZlcnJpZGVFeGVjdXRpb246IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLm92ZXJyaWRlRXhlY3V0aW9uID0gb3ZlcnJpZGVFeGVjdXRpb24gYXMgdW5rbm93biBhcyBPdmVycmlkZUV4ZWN1dGlvbjtcblxuXHRcdC8vIGJ5IGRlZmF1bHQsIGV2ZXJ5IGV4dGVuc2libGUgbWV0aG9kIGlzIGFsc28gaG9va2FibGUgKGV4Y2VwdCB0aG9zZSBkZWZpbmVkIGFzIEluc3RlYWQpXG5cdFx0aWYgKG92ZXJyaWRlRXhlY3V0aW9uICE9PSBcIkluc3RlYWRcIikge1xuXHRcdFx0aG9va2FibGUob3ZlcnJpZGVFeGVjdXRpb24pKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIHB1YmxpY2x5IGF2YWlsYWJsZSBmb3IgY29udHJvbGxlciBleHRlbnNpb24gdXNhZ2UuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpOiB2b2lkIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSB0cnVlO1xuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIG9ubHkgYXZhaWxhYmxlIGZvciBpbnRlcm5hbCB1c2FnZSBvZiB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUV4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ucHVibGljID0gZmFsc2U7XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIGNhbm5vdCBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5maW5hbCA9IHRydWU7XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHdlIGFyZSBnb2luZyB0byB1c2UgaW5zdGFudGlhdGUgYSBjb250cm9sbGVyIGV4dGVuc2lvbiB1bmRlciB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG5hbWUuXG4gKiBAcGFyYW0gZXh0ZW5zaW9uQ2xhc3MgVGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWRcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzaW5nRXh0ZW5zaW9uKGV4dGVuc2lvbkNsYXNzOiB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSBleHRlbnNpb25DbGFzcztcblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKiAjZW5kcmVnaW9uICovXG5cbi8qICNyZWdpb24gQ09OVFJPTCAqL1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgc2hhbGwgYmUgZGVjbGFyZWQgYXMgYW4gZXZlbnQgb24gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudCgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgZXZlbnRLZXk6IHN0cmluZyB8IFN5bWJvbCkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSBhdHRyaWJ1dGVEZWZpbml0aW9uIFRoZSBwcm9wZXJ0eSBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHkoYXR0cmlidXRlRGVmaW5pdGlvbjogVUk1UHJvcGVydHlNZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmIChhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAoYXR0cmlidXRlRGVmaW5pdGlvbi5pc0JpbmRpbmdJbmZvID09PSB0cnVlKSB7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID0gZmFsc2U7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmdyb3VwID0gXCJEYXRhXCI7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gYXR0cmlidXRlRGVmaW5pdGlvbjtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSA/Pz0gKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogRnVuY3Rpb24gfSkuaW5pdGlhbGl6ZXI/LigpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuZCBjb25maWd1cmVzIHRoZSBmb2xsb3dpbmcgYWdncmVnYXRpb24gaW4gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcGFyYW0gYWdncmVnYXRpb25EZWZpbml0aW9uIFRoZSBhZ2dyZWdhdGlvbiBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWdncmVnYXRpb24oYWdncmVnYXRpb25EZWZpbml0aW9uOiBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5tdWx0aXBsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBVSTUgZGVmYXVsdHMgdGhpcyB0byB0cnVlIGJ1dCB0aGlzIGlzIGp1c3Qgd2VpcmQuLi5cblx0XHRcdGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5tdWx0aXBsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoIW1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0gPSBhZ2dyZWdhdGlvbkRlZmluaXRpb247XG5cdFx0fVxuXHRcdGlmIChhZ2dyZWdhdGlvbkRlZmluaXRpb24uaXNEZWZhdWx0KSB7XG5cdFx0XHRtZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gPSBwcm9wZXJ0eUtleTtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRhZ2dyZWdhdGlvbkRlZmluaXRpb24uZGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGZvbGxvd2luZyBhc3NvY2lhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBhc3NvY2lhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc29jaWF0aW9uKHVpNUFzc29jaWF0aW9uTWV0YWRhdGE6IFVJNUFzc29jaWF0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0gPSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGluIHRoZSBtZXRhZGF0YSB0aGF0IHRoaXMgY29udHJvbCBpbXBsZW1lbnRzIGEgc3BlY2lmaWMgaW50ZXJmYWNlLlxuICogQHBhcmFtIGludGVyZmFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGltcGxlbWVudGVkIGludGVyZmFjZVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcGxlbWVudEludGVyZmFjZShpbnRlcmZhY2VOYW1lOiBzdHJpbmcpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblxuXHRcdG1ldGFkYXRhLmludGVyZmFjZXMucHVzaChpbnRlcmZhY2VOYW1lKTtcblx0fTtcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIG1ldGhvZCBzaG91bGQgYWxzbyBiZSBleHBvc2VkIHN0YXRpY2FsbHkgc28gd2UgY2FuIGNhbGwgaXQgZnJvbSBYTUwuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sRXZlbnRIYW5kbGVyKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlrZXkpIHtcblx0XHRjb25zdCBjdXJyZW50Q29uc3RydWN0b3I6IFVJNUFQSUNvbnRyb2wgPSB0YXJnZXQuY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBVSTVBUElDb250cm9sO1xuXHRcdGVuc3VyZUdldEFQSShjdXJyZW50Q29uc3RydWN0b3IpO1xuXHRcdGN1cnJlbnRDb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleS50b1N0cmluZygpXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcblx0XHRcdGlmIChhcmdzPy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFRhcmdldCA9IGN1cnJlbnRDb25zdHJ1Y3Rvci5nZXRBUEkoYXJnc1swXSBhcyBVSTVFdmVudCk7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQ/Lltwcm9wZXJ0eWtleS50b1N0cmluZygpXSguLi5hcmdzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xufVxuXG50eXBlIFVJNUNvbnRyb2xBbmRNb3JlID0gdHlwZW9mIENvbnRyb2wgJlxuXHRGdW5jdGlvbiAmIHtcblx0XHRyZWdpc3Rlckluc3RhbmNlPzogRnVuY3Rpb247XG5cdFx0b3ZlcnJpZGU/OiBGdW5jdGlvbjtcblx0XHRyZW5kZXJlcj86IHVua25vd247XG5cdFx0cmVuZGVyOiBGdW5jdGlvbjtcblx0XHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdH07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyBjbGFzcyBzaG91bGQgZGVmaW5lIGEgVUk1IGNvbnRyb2wgb2YgdGhlIHNwZWNpZmllZCBuYW1lLlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBVSTUgY2xhc3NcbiAqIEBwYXJhbSBtZXRhZGF0YURlZmluaXRpb24gSW5saW5lIG1ldGFkYXRhIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIEEgY2xhc3MgZGVjb3JhdG9yIHRoYXQgd2lsbCBjcmVhdGUgYSB1aTUgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVJNUNsYXNzKHNUYXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogUGFydGlhbDxVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0XHRpZiAoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0pIHtcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0uY29uY2F0KFxuXHRcdFx0XHRcdFx0XHRtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSA9IHtcblx0XHRcdFx0XHRcdFx0Li4uY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0sXG5cdFx0XHRcdFx0XHRcdC4uLihtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dIGFzIG9iamVjdClcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleSBhcyBrZXlvZiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVnaXN0ZXJVSTVNZXRhZGF0YShjb25zdHJ1Y3Rvciwgc1RhcmdldCwgY29uc3RydWN0b3IucHJvdG90eXBlKTtcblx0fSBhcyBDbGFzc0RlY29yYXRvcjtcbn1cbnR5cGUgQ29uc3RydWN0b3I8VCA9IHt9PiA9IG5ldyAoLi4uYTogdW5rbm93bltdKSA9PiBUO1xuLyoqXG4gKiBNaXhpbiBhIHNwZWNpZmljIGludGVyZmFjZSBpbmNsdWRpbmcgYWxsIGl0cyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGludG8gdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gaW50ZXJmYWNlQ2xhc3MgSW1wbGVtZW50YXRpb24gY2xhc3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluPFQgZXh0ZW5kcyBJSW50ZXJmYWNlV2l0aE1peGluPihpbnRlcmZhY2VDbGFzczogQ29uc3RydWN0b3I8VD4pOiBDbGFzc0RlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAoYmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlKSB7XG5cdFx0aWYgKGJhc2VDdG9yLnByb3RvdHlwZS5leHRlbmQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBtaXhpbkludGVyZmFjZSBkZWNvcmF0b3IgbXVzdCBiZSBwbGFjZWQgYWZ0ZXIgYGRlZmluZVVpNUNsYXNzYFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YShiYXNlQ3Rvci5wcm90b3R5cGUpO1xuXHRcdGNvbnN0IGludGVyZmFjZU5hbWUgPSBpbnRlcmZhY2VDbGFzcy5wcm90b3R5cGUuZ2V0SW50ZXJmYWNlTmFtZT8uKCk7XG5cdFx0aWYgKGludGVyZmFjZU5hbWUpIHtcblx0XHRcdG1ldGFkYXRhLmludGVyZmFjZXMucHVzaChpbnRlcmZhY2VOYW1lKTtcblx0XHR9XG5cblx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbnRlcmZhY2VDbGFzcy5wcm90b3R5cGUpLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRcdGlmIChuYW1lICE9PSBcImNvbnN0cnVjdG9yXCIgJiYgbmFtZSAhPT0gXCJzZXR1cE1peGluXCIpIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRcdGJhc2VDdG9yLnByb3RvdHlwZSxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW50ZXJmYWNlQ2xhc3MucHJvdG90eXBlLCBuYW1lKSB8fCBPYmplY3QuY3JlYXRlKG51bGwpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gSG9vayB0byBhZGQgcG90ZW50aWFsbHkgbW9yZSBsb2dpYyB0byB0aGUgbWl4aW5cblx0XHRpbnRlcmZhY2VDbGFzcy5wcm90b3R5cGUuc2V0dXBNaXhpbj8uKGJhc2VDdG9yKTtcblx0XHRyZXR1cm4gYmFzZUN0b3I7XG5cdH0gYXMgQ2xhc3NEZWNvcmF0b3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2UgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHJlY2VpdmluZyBjb250cm9sLlxuXHQgKiBJZiBub3QgZGVmaW5lZCwgdGhlIGludGVyZmFjZSB3aWxsIG5vdCBiZSBhZGRlZC5cblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZVxuXHQgKi9cblx0Z2V0SW50ZXJmYWNlTmFtZT8oKTogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBIb29rIHRvIGFkZCBtb3JlIGxvZ2ljIHRvIHRoZSBtaXhpbi5cblx0ICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHRoZSBjb250cm9scyBhcmUgY3JlYXRlZCBhbmQgY2FuIGJlIHVzZWQgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBsb2dpYyB0byB0aGUgYmFzZSBjbGFzcy5cblx0ICogQHBhcmFtIGJhc2VDbGFzcyBUaGUgYmFzZSBjbGFzcyB0aGF0IHdpbGwgYmUgZXh0ZW5kZWRcblx0ICovXG5cdHNldHVwTWl4aW4/KGJhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlPFQgZXh0ZW5kcyBVSTVFbGVtZW50PigpOiBSZWY8VD4ge1xuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnQ6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFQsXG5cdFx0c2V0Q3VycmVudDogZnVuY3Rpb24gKG9Db250cm9sSW5zdGFuY2U6IFQpOiB2b2lkIHtcblx0XHRcdHRoaXMuY3VycmVudCA9IG9Db250cm9sSW5zdGFuY2U7XG5cdFx0fVxuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIGZvbGxvd2luZyBvYmplY3Qgd2lsbCBob2xkIGEgcmVmZXJlbmNlIHRvIGEgY29udHJvbCB0aHJvdWdoIGpzeCB0ZW1wbGF0aW5nLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVJlZmVyZW5jZSgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXHRcdGlmIChCYXNlT2JqZWN0LmlzT2JqZWN0QSh0YXJnZXQsIFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSkge1xuXHRcdFx0aWYgKCFtZXRhZGF0YS5yZWZlcmVuY2VzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0XHRtZXRhZGF0YS5yZWZlcmVuY2VzW3Byb3BlcnR5S2V5XSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXIgPSBjcmVhdGVSZWZlcmVuY2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbmZ1bmN0aW9uIF9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eShqc29uTW9kZWw6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biB7XG5cdGNvbnN0IHBhdGhJbk1vZGVsID0gYC8ke3Byb3AudG9TdHJpbmcoKX1gO1xuXHRjb25zdCBvT2JqID0gZGVlcENsb25lKGpzb25Nb2RlbC5nZXRPYmplY3QocGF0aEluTW9kZWwpKTtcblx0bGV0IG9UYXJnZXQ7XG5cdGlmIChwcm9wID09PSBcIl9fYmluZGluZ0luZm9cIikge1xuXHRcdHJldHVybiB7IG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiIH07XG5cdH1cblx0aWYgKHR5cGVvZiBvT2JqID09PSBcInN0cmluZ1wiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9PYmogPT09IFwibnVtYmVyXCIpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb09iaiA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9PYmopKSB7XG5cdFx0b1RhcmdldCA9IG5ldyBQcm94eShvT2JqLCB7XG5cdFx0XHRnZXQodGFyZ2V0OiB1bmtub3duW10sIHA6IHN0cmluZyB8IHN5bWJvbCwgcmVjZWl2ZXI6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRcdFx0XHRjb25zdCByZWYgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHAsIHJlY2VpdmVyKTtcblx0XHRcdFx0aWYgKHR5cGVvZiByZWYgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHJldHVybiByZWYuYmluZCh0YXJnZXQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlZiA9PT0gdW5kZWZpbmVkICYmIGlzTmFOKE51bWJlcihwLnRvU3RyaW5nKCkpKSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRfX2JpbmRpbmdJbmZvOiB7XG5cdFx0XHRcdFx0XHRcdG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiLFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBwXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVmO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9UYXJnZXQgPSB7IC4uLm9PYmogfTtcblx0fVxuXHRpZiAodHlwZW9mIG9UYXJnZXQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRvVGFyZ2V0Ll9fYmluZGluZ0luZm8gPSB7XG5cdFx0XHRtb2RlbDogXCIkY29tcG9uZW50U3RhdGVcIixcblx0XHRcdHBhdGg6IHBhdGhJbk1vZGVsXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gb1RhcmdldDtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVN0YXRlUHJvcGVydHkoXG5cdG9iajogVUk1Q29udHJvbERlZmluaXRpb24sXG5cdHRhcmdldENvbnRyb2w6IENvbnRyb2wgJiB7XG5cdFx0X3VwZGF0ZVN0YXRlOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVEZWJvdW5jZWQ6IEZ1bmN0aW9uO1xuXHRcdF9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZVRpbWVyOiB1bmtub3duO1xuXHRcdF9jaGFuZ2VkUHJvcHM/OiBzdHJpbmdbXTtcblx0fVxuKTogdm9pZCB7XG5cdGlmIChvYmoubWV0YWRhdGE/LnN0YXRlUHJvcGVydHkpIHtcblx0XHRjb25zdCBzdGF0ZU1vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cblx0XHR0YXJnZXRDb250cm9sLnNldE1vZGVsKHN0YXRlTW9kZWwsIFwiJGNvbXBvbmVudFN0YXRlXCIpO1xuXHRcdGxldCB1cGRhdGluZ1N0YXRlID0gZmFsc2U7XG5cdFx0Y29uc3QgYm91bmRUb1N0YXRlUHJvcHM6IHN0cmluZ1tdID0gW107XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gb2JqLm1ldGFkYXRhLnByb3BlcnRpZXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5RGVmID0gb2JqLm1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdGlmIChwcm9wZXJ0eURlZi5iaW5kVG9TdGF0ZSkge1xuXHRcdFx0XHRib3VuZFRvU3RhdGVQcm9wcy5wdXNoKHByb3BlcnR5TmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHN0YXRlTW9kZWwuYXR0YWNoUHJvcGVydHlDaGFuZ2UoKGV2dDogTW9kZWwkUHJvcGVydHlDaGFuZ2VFdmVudCkgPT4ge1xuXHRcdFx0Y29uc3QgcGF0aCA9IGV2dC5nZXRQYXJhbWV0ZXIoXCJwYXRoXCIpPy5zdWJzdHJpbmcoMSk7IC8vIHRvIHJlbW92ZSB0aGUgZmlyc3QgL1xuXHRcdFx0aWYgKHBhdGggJiYgYm91bmRUb1N0YXRlUHJvcHMuaW5jbHVkZXMocGF0aCkpIHtcblx0XHRcdFx0dGFyZ2V0Q29udHJvbC5zZXRQcm9wZXJ0eShwYXRoLCBldnQuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIikpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGZvcmNlIHRoZSBzdGF0ZSB0byBiZSBhcHBsaWVkIGFuZCB3YWl0IGZvciBpdCB0byBiZSBhcHBsaWVkIGluIHRlc3RzXG5cdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGUgPSBhc3luYyBmdW5jdGlvbiAoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRkZWxldGUgdGhpcy5fdXBkYXRlU3RhdGVUaW1lcjtcblx0XHRcdGlmICghdXBkYXRpbmdTdGF0ZSkge1xuXHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gdHJ1ZTtcblx0XHRcdFx0YXdhaXQgKHRoaXMgYXMgeyBvblN0YXRlQ2hhbmdlPzogRnVuY3Rpb24gfSkub25TdGF0ZUNoYW5nZT8uKHRoaXMuX2NoYW5nZWRQcm9wcyk7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcyA9IFtdO1xuXHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZCA9IGZ1bmN0aW9uIChjaGFuZ2VkUHJvcDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPz89IFtdO1xuXHRcdFx0aWYgKCF0aGlzLl9jaGFuZ2VkUHJvcHMuaW5jbHVkZXMoY2hhbmdlZFByb3ApKSB7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcy5wdXNoKGNoYW5nZWRQcm9wKTtcblx0XHRcdH1cblx0XHRcdGlmICghdGhpcy5fdXBkYXRlU3RhdGVUaW1lciAmJiAhdXBkYXRpbmdTdGF0ZSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlU3RhdGUoKTtcblx0XHRcdFx0fSwgMjAwKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb250cm9sLCBvYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBuZXcgUHJveHkoc3RhdGVNb2RlbCwge1xuXHRcdFx0XHRcdGdldDogKHRhcmdldDogSlNPTk1vZGVsLCBwcm9wOiBzdHJpbmcpOiB1bmtub3duID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBfZ2V0SGFuZGxlckZvclN0YXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNldDogKHNldFN0YXRlTW9kZWw6IEpTT05Nb2RlbCwgcHJvcCwgdmFsdWUpOiBib29sZWFuID0+IHtcblx0XHRcdFx0XHRcdGlmIChib3VuZFRvU3RhdGVQcm9wcy5pbmNsdWRlcyhwcm9wLnRvU3RyaW5nKCkpKSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldENvbnRyb2wuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5KHByb3AudG9TdHJpbmcoKSwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRDb250cm9sLl9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBzZXRSZXN1bHQgPSBzZXRTdGF0ZU1vZGVsLnNldFByb3BlcnR5KGAvJHtwcm9wLnRvU3RyaW5nKCl9YCwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGVEZWJvdW5jZWQocHJvcC50b1N0cmluZygpKTtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRSZXN1bHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHQvLyBSZXBsYWNpbmcgdGhlIGNvbXBsZXRlIHN0YXRlXG5cdFx0XHRcdHN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC9gLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sW29iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5IGFzIGtleW9mIENvbnRyb2xdID0geyAuLi5vYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZSB9IGFzIG5ldmVyO1xuXHRcdH1cblx0XHRjb25zdCBmblNldFByb3BlcnR5ID0gdGFyZ2V0Q29udHJvbC5zZXRQcm9wZXJ0eTtcblxuXHRcdGlmIChib3VuZFRvU3RhdGVQcm9wcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKHNQcm9wZXJ0eU5hbWU6IHN0cmluZywgb1ZhbHVlOiB1bmtub3duLCBiU3VwcHJlc3NJbnZhbGlkYXRlKTogdHlwZW9mIHRhcmdldENvbnRyb2wge1xuXHRcdFx0XHRpZiAoYm91bmRUb1N0YXRlUHJvcHMuaW5jbHVkZXMoc1Byb3BlcnR5TmFtZSkgJiYgIXRoaXMuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUpIHtcblx0XHRcdFx0XHQodGhpc1tvYmoubWV0YWRhdGE/LnN0YXRlUHJvcGVydHkgYXMga2V5b2YgdHlwZW9mIHRhcmdldENvbnRyb2xdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtzUHJvcGVydHlOYW1lXSA9IG9WYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZm5TZXRQcm9wZXJ0eS5jYWxsKHRoaXMsIHNQcm9wZXJ0eU5hbWUsIG9WYWx1ZSwgYlN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEludGVybmFsIGhlYXZ5IGxpZnRpbmcgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBjcmVhdGluZyB0aGUgY2xhc3MgcHJvcGVydHkgZm9yIHVpNSB0byB1c2UuXG4gKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIHByb3RvdHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZVxuICogQHBhcmFtIGluT2JqIFRoZSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBjbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlclVJNU1ldGFkYXRhKGNsYXp6OiBVSTVDb250cm9sQW5kTW9yZSwgbmFtZTogc3RyaW5nLCBpbk9iajogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbik6IEZ1bmN0aW9uIHtcblx0aWYgKGNsYXp6LmdldE1ldGFkYXRhPy4oKS5pc0EoXCJzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvblwiKSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKChvYmpOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbk9iaiwgb2JqTmFtZSk7XG5cdFx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSkuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cblx0aWYgKChjbGF6ej8uZ2V0TWV0YWRhdGEoKSBhcyB1bmtub3duIGFzIHsgZ2V0U3RlcmVvdHlwZTogRnVuY3Rpb24gfSk/LmdldFN0ZXJlb3R5cGUoKSA9PT0gXCJjb250cm9sXCIpIHtcblx0XHRjb25zdCByZW5kZXJlckRlZmluaXRpb24gPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXI7XG5cdFx0b2JqLnJlbmRlcmVyID0geyBhcGlWZXJzaW9uOiAyIH07XG5cdFx0aWYgKHR5cGVvZiByZW5kZXJlckRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9IGVsc2UgaWYgKHJlbmRlcmVyRGVmaW5pdGlvbiAhPSB1bmRlZmluZWQpIHtcblx0XHRcdG9iai5yZW5kZXJlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9XG5cdH1cblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0T2JqZWN0LmtleXMoY2xhenoucHJvdG90eXBlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5ICE9PSBcIm1ldGFkYXRhXCIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvYmoubWV0YWRhdGE/LmNvbnRyb2xsZXJFeHRlbnNpb25zICYmIE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgY0V4dE5hbWUgaW4gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKSB7XG5cdFx0XHRvYmpbY0V4dE5hbWVdID0gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW2NFeHROYW1lXTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0cHV0ID0gY2xhenouZXh0ZW5kKG5hbWUsIG9iaikgYXMgdHlwZW9mIENvbnRyb2wgJiBGdW5jdGlvbjtcblx0Y29uc3QgZm5Jbml0ID0gb3V0cHV0LnByb3RvdHlwZS5pbml0O1xuXHRjb25zdCBmbkFmdGVySW5pdCA9IG91dHB1dC5wcm90b3R5cGUuYWZ0ZXJJbml0O1xuXHRvdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0aWYgKGZuSW5pdCkge1xuXHRcdFx0Zm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0XHRpZiAoY2xhenoucmVnaXN0ZXJJbnN0YW5jZSkge1xuXHRcdFx0Y2xhenoucmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdC8vIElmIGEgdmFsdWUgd2FzIHNldCBpbiBgaW5pdGAgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgc2V0IGluIHRoZSB2YWx1ZSBpbiB0aGUgZW5kXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5RGVmYXVsdCA9IHRoaXNbcHJvcGVydHlLZXldID8/IHByb3BlcnR5RGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllcyA/Pz0ge307XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gdjtcblx0XHRcdFx0XHRcdFx0dGhpcy5tUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgY2FzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcm9wZXJ0eSBmaXJzdCBhbmQgbm90IGp1c3QgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHQvLyBEdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uLCBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHdpdGggYSBub24gYmluZGluZyB2YWx1ZSwgc2V0UHJvcGVydHkgaXMgY2FsbGVkIGFuZCBub3QgYmluZFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ1Byb3BlcnR5VmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgd2UgdXBkYXRlIHRoZSBfYmluZGluZ1Byb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgJiYgcHJvcGVydHlWYWx1ZSAhPT0gYmluZGluZ1Byb3BlcnR5VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BWYWx1ZSA9IHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XTtcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyAuLi5wcm9wVmFsdWUgfTsgLy8gQ3JlYXRlIHNoYWxsb3cgY29weVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm9wVmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpc1twcm9wZXJ0eUtleV0gPSBwcm9wZXJ0eURlZmF1bHQ7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9hcHBseWluZ1NldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBZ2dyZWdhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zKTtcblx0XHRcdGFBZ2dyZWdhdGlvbktleXMuZm9yRWFjaCgoYWdncmVnYXRpb25LZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25EZWYgPSBvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zW2FnZ3JlZ2F0aW9uS2V5XTtcblx0XHRcdFx0Y29uc3QgZGVmYXVsdFZhbHVlID0gdGhpc1thZ2dyZWdhdGlvbktleV0gPz8gYWdncmVnYXRpb25EZWYuZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgYWdncmVnYXRpb25LZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5KTtcblx0XHRcdFx0XHRcdGlmIChvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zW2FnZ3JlZ2F0aW9uS2V5XS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50IHx8IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoZGVmYXVsdFZhbHVlICYmIChkZWZhdWx0VmFsdWUgYXMgVUk1RWxlbWVudCk/LmlzQSkge1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXNbYWdncmVnYXRpb25LZXldID0gZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSBmYWxzZTtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5fYXBwbHlpbmdTZXR0aW5ncztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBhQXNzb2NpYXRpb25LZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmFzc29jaWF0aW9ucyk7XG5cdFx0XHRhQXNzb2NpYXRpb25LZXlzLmZvckVhY2goKGFzc29jaWF0aW9uS2V5KSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBhc3NvY2lhdGlvbktleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QXNzb2NpYXRpb24oYXNzb2NpYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hc3NvY2lhdGlvbnNbYXNzb2NpYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5yZWZlcmVuY2VzKSB7XG5cdFx0XHRjb25zdCByZWZlcmVuY2VQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLnJlZmVyZW5jZXMpO1xuXHRcdFx0cmVmZXJlbmNlUHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IGNyZWF0ZVJlZmVyZW5jZSgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChvYmoubWV0YWRhdGEubWV0aG9kcykge1xuXHRcdFx0Zm9yIChjb25zdCBtZXRob2ROYW1lIGluIG9iai5tZXRhZGF0YS5tZXRob2RzKSB7XG5cdFx0XHRcdGNvbnN0IG1ldGhvZERlZmluaXRpb24gPSBvYmoubWV0YWRhdGEubWV0aG9kc1ttZXRob2ROYW1lXTtcblx0XHRcdFx0aWYgKG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQWZ0ZXJBc3luY1wiIHx8IG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQmVmb3JlQXN5bmNcIikge1xuXHRcdFx0XHRcdGlmICghdGhpcy5tZXRob2RIb2xkZXIpIHtcblx0XHRcdFx0XHRcdHRoaXMubWV0aG9kSG9sZGVyID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdID0gW3RoaXNbbWV0aG9kTmFtZV1dO1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBtZXRob2ROYW1lLCB7XG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRzZXQ6ICh2OiBGdW5jdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV0ucHVzaCh2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFzeW5jICguLi5tZXRob2RBcmdzOiB1bmtub3duW10pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtZXRob2RBcnJheXMgPSB0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAobWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtZXRob2RBcnJheXMucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGFyZyBvZiBtZXRob2RBcnJheXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGF3YWl0IGFyZy5hcHBseSh0aGlzLCBtZXRob2RBcmdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0X2NyZWF0ZVN0YXRlUHJvcGVydHkob2JqLCB0aGlzKTtcblx0XHRpZiAoZm5BZnRlckluaXQpIHtcblx0XHRcdGZuQWZ0ZXJJbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0fTtcblxuXHRjbGF6ei5vdmVycmlkZSA9IGZ1bmN0aW9uIChvRXh0ZW5zaW9uOiB1bmtub3duKTogRnVuY3Rpb24ge1xuXHRcdGNvbnN0IHBvbCA9IHt9O1xuXHRcdChwb2wgYXMgRnVuY3Rpb24pLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IEZ1bmN0aW9uIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9O1xuXHRcdGNvbnN0IG9DbGFzcyA9IChNZXRhZGF0YSBhcyB1bmtub3duIGFzIHsgY3JlYXRlQ2xhc3M6IEZ1bmN0aW9uIH0pLmNyZWF0ZUNsYXNzKFxuXHRcdFx0Y2xhenosXG5cdFx0XHRgYW5vbnltb3VzRXh0ZW5zaW9ufiR7dWlkKCl9YCxcblx0XHRcdHBvbCxcblx0XHRcdENvbnRyb2xsZXJNZXRhZGF0YVxuXHRcdCk7XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX3N0YXRpY092ZXJyaWRlID0gb0V4dGVuc2lvbjtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fb3ZlcnJpZGUgPSAoY2xhenouZ2V0TWV0YWRhdGEoKSBhcyB7IF9vdmVycmlkZT86IHVua25vd24gfSkuX292ZXJyaWRlO1xuXHRcdHJldHVybiBvQ2xhc3M7XG5cdH07XG5cblx0T2JqZWN0UGF0aC5zZXQobmFtZSwgb3V0cHV0KTtcblxuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUFnSkEsTUFBTUEsY0FBYyxHQUFHLFNBQUFBLENBQVVDLE1BQXNELEVBQWdDO0lBQ3RIQSxNQUFNLENBQUNDLFFBQVEsR0FBR0MsS0FBSyxDQUN0QjtNQUNDQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7TUFDeEJDLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDZEMsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUNoQkMsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUNkQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO01BQ2hCQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ1hDLE1BQU0sRUFBRSxDQUFDLENBQUM7TUFDVkMsVUFBVSxFQUFFO0lBQ2IsQ0FBQyxFQUNEVixNQUFNLENBQUNDLFFBQVEsSUFBSSxDQUFDLENBQ3JCLENBQWlDO0lBQ2pDLE9BQU9ELE1BQU0sQ0FBQ0MsUUFBUTtFQUN2QixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTVSxxQkFBcUJBLENBQUNYLE1BQXFCLEVBQUU7SUFDckQsT0FBTyxVQUVOWSxNQUFnQixFQUVBO01BQUEsSUFEaEJDLE1BQWMsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUdkLE1BQU0sQ0FBQ2lCLFdBQVcsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDO01BRS9DLElBQUlDLE9BQU8sR0FBR1AsTUFBTSxDQUFDUSxTQUFTLENBQUMsQ0FBeUI7TUFDeEQsSUFBSXBCLE1BQU0sQ0FBQ3FCLGdCQUFnQixFQUFFO1FBQzVCRixPQUFPLEdBQUduQixNQUFNLENBQUNxQixnQkFB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VUFBVSxDQUFBQyxLQUFBLElBQUF2TyxTQUFBLENBQUF1TyxLQUFBO2tCQUFBO2tCQUsxQixLQUFLLE1BQU1DLEdBQUcsSUFBSUwsWUFBWSxFQUFFO29CQUMvQixNQUFNSyxHQUFHLENBQUM5QixLQUFLLENBQUNILEtBQUksRUFBRStCLFVBQVUsQ0FBQztrQkFDbEM7Z0JBQ0QsQ0FBQztjQUNGO1lBQ0QsQ0FBQyxDQUFDO1VBQ0g7UUFDRDtNQUNEO01BQ0EzRixvQkFBb0IsQ0FBQ0MsR0FBRyxFQUFFLElBQUksQ0FBQztNQUMvQixJQUFJeUQsV0FBVyxFQUFFO1FBQ2hCQSxXQUFXLENBQUNLLEtBQUssQ0FBQyxJQUFJLEVBQUVySCxJQUFJLENBQUM7TUFDOUI7SUFDRCxDQUFDO0lBRUQyRixLQUFLLENBQUNySSxRQUFRLEdBQUcsVUFBVThMLFVBQW1CLEVBQVk7TUFDekQsTUFBTUMsR0FBRyxHQUFHLENBQUMsQ0FBQztNQUNiQSxHQUFHLENBQWNqTixXQUFXLEdBQUcsWUFBd0M7UUFBQSxTQUFBa04sS0FBQSxHQUFBM08sU0FBQSxDQUFBQyxNQUFBLEVBQTNCb0YsSUFBSSxPQUFBQyxLQUFBLENBQUFxSixLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7VUFBSnZKLElBQUksQ0FBQXVKLEtBQUEsSUFBQTVPLFNBQUEsQ0FBQTRPLEtBQUE7UUFBQTtRQUNoRCxPQUFPNUQsS0FBSyxDQUFDMEIsS0FBSyxDQUFDLElBQUksRUFBRXJILElBQUksQ0FBQztNQUMvQixDQUFDO01BQ0QsTUFBTXdKLE1BQU0sR0FBSUMsUUFBUSxDQUEwQ0MsV0FBVyxDQUM1RS9ELEtBQUssRUFDTCxzQkFBc0JnRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQzdCTixHQUFHLEVBQ0hPLGtCQUNELENBQUM7TUFDREosTUFBTSxDQUFDMU8sV0FBVyxDQUFDLENBQUMsQ0FBQytPLGVBQWUsR0FBR1QsVUFBVTtNQUNqREksTUFBTSxDQUFDMU8sV0FBVyxDQUFDLENBQUMsQ0FBQ2dQLFNBQVMsR0FBSW5FLEtBQUssQ0FBQzdLLFdBQVcsQ0FBQyxDQUFDLENBQTZCZ1AsU0FBUztNQUMzRixPQUFPTixNQUFNO0lBQ2QsQ0FBQztJQUVETyxVQUFVLENBQUMxTixHQUFHLENBQUNrRixJQUFJLEVBQUVzRixNQUFNLENBQUM7SUFFNUIsT0FBT0EsTUFBTTtFQUNkO0VBQUMsT0FBQTFKLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|