@sapui5/sap.fe.base 1.133.0 → 1.134.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/BuildingBlockBase.js +4 -4
- package/src/sap/fe/base/BuildingBlockBase.ts +3 -3
- package/src/sap/fe/base/ClassSupport.js +2 -2
- package/src/sap/fe/base/ClassSupport.ts +1 -1
- package/src/sap/fe/base/jsx-runtime/jsx-control.js +1 -4
- package/src/sap/fe/base/jsx-runtime/jsx-control.ts +0 -5
- package/src/sap/fe/base/library.js +1 -1
package/package.json
CHANGED
package/src/sap/fe/base/.library
CHANGED
|
@@ -86,10 +86,10 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/ui
|
|
|
86
86
|
}
|
|
87
87
|
_Control.prototype.onAfterRendering.call(this, event);
|
|
88
88
|
};
|
|
89
|
-
_proto.getDomRef = function getDomRef() {
|
|
89
|
+
_proto.getDomRef = function getDomRef(suffix) {
|
|
90
90
|
const oContent = this.content;
|
|
91
|
-
let domRef = oContent?.getDomRef() ?? _Control.prototype.getDomRef.call(this);
|
|
92
|
-
if (!domRef) {
|
|
91
|
+
let domRef = oContent?.getDomRef(suffix) ?? _Control.prototype.getDomRef.call(this, suffix);
|
|
92
|
+
if (!domRef && !suffix) {
|
|
93
93
|
domRef = this._oldDomRef?.deref() ?? null;
|
|
94
94
|
if (domRef) {
|
|
95
95
|
return document.getElementById(domRef.id);
|
|
@@ -179,4 +179,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/ui
|
|
|
179
179
|
}), _class2)) || _class);
|
|
180
180
|
return BuildingBlockBase;
|
|
181
181
|
}, false);
|
|
182
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWlsZGluZ0Jsb2NrQmFzZSIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiYWdncmVnYXRpb24iLCJ0eXBlIiwibXVsdGlwbGUiLCJpc0RlZmF1bHQiLCJfZGVjMyIsImFzc29jaWF0aW9uIiwic2luZ3VsYXJOYW1lIiwiX2RlYzQiLCJkZWZpbmVTdGF0ZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsInNldHRpbmdzIiwib3RoZXJzIiwiX3RoaXMiLCJpZCIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX29sZERvbVJlZiIsIl9pbmhlcml0c0xvb3NlIiwicmVuZGVyIiwib1JtIiwib0NvbnRyb2wiLCJjb250ZW50IiwiZ2V0VmlzaWJsZSIsIkludmlzaWJsZVJlbmRlcmVyIiwicmVuZGVyQ29udHJvbCIsIl9wcm90byIsInByb3RvdHlwZSIsImJpbmRQcm9wZXJ0eSIsIm5hbWUiLCJiaW5kaW5nSW5mbyIsInByb3BlcnR5TWV0YWRhdGEiLCJnZXRNZXRhZGF0YSIsImdldFByb3BlcnR5IiwiYmluZGFibGUiLCJncm91cCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJldmVudCIsImRvbVJlZiIsImdldERvbVJlZiIsIldlYWtSZWYiLCJvQ29udGVudCIsImRlcmVmIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldEZvY3VzRG9tUmVmIiwiZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZSIsIl9vRWxlbWVudCIsIm1BcmlhUHJvcHMiLCJvUGFyZW50IiwiZ2V0UGFyZW50IiwiZ2V0QWNjZXNzaWJpbGl0eUluZm8iLCJhY2Nlc3NpYmlsaXR5SW5mbyIsImlzQSIsImdldElkRm9yTGFiZWwiLCJhZGRTdHlsZUNsYXNzIiwic3R5bGVDbGFzcyIsInJlbW92ZVN0eWxlQ2xhc3MiLCJiaW5kU3RhdGUiLCJwYXRoIiwiQmluZGluZ1Rvb2xraXQiLCJzdGF0ZSIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2tCYXNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RhbnRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24sIFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCAqIGFzIEJpbmRpbmdUb29sa2l0IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YsIFN0YXRlT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgYXNzb2NpYXRpb24sIGRlZmluZVN0YXRlLCBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEludmlzaWJsZVJlbmRlcmVyIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVSZW5kZXJlclwiO1xuaW1wb3J0IHR5cGUgUmVuZGVyTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVuZGVyTWFuYWdlclwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5pbnRlcmZhY2UgQnVpbGRpbmdCbG9ja0Jhc2U8VCBleHRlbmRzIFVJNUVsZW1lbnQgPSBDb250cm9sLCBLIGV4dGVuZHMgb2JqZWN0ID0ge30+IHtcblx0Ly8gRm9yY2UgYSBzdGF0ZSB1cGRhdGVcblx0X3VwZGF0ZVN0YXRlKCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYnVpbGRpbmcgYmxvY2tzLlxuICogVGhpcyBjb250YWlucyB0aGUgbG93IGxldmVsIGZ1bmN0aW9uYWxpdHkgb2YgaGF2aW5nIGEgY29udGVudCBhZ2dyZWdhdGlvbiBhbmQgaGFuZGxpbmcgdGhlIHJlbmRlcmluZyBvZiB0aGUgY29udGVudCB3aXRob3V0IGFuIGFjdHVhbCBET00gZWxlbWVudC5cbiAqIFRoZSBidWlsZGluZyBibG9jayBhbHNvIGRlZmluZXMgYSBzdGF0ZSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIGJ1aWxkaW5nIGJsb2NrLlxuICogQWNjZXNzaWJpbGl0eSBhbmQgY2xhc3NlcyBpbmZvcm1hdGlvbiBhcmUgZm9yd2FyZGVkIHRvIHRoZSBjb250ZW50IGNvbnRyb2wuXG4gKiBAZXhwZXJpbWVudGFsXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5iYXNlLkJ1aWxkaW5nQmxvY2tCYXNlXCIpXG5jbGFzcyBCdWlsZGluZ0Jsb2NrQmFzZTxUIGV4dGVuZHMgVUk1RWxlbWVudCA9IENvbnRyb2wsIEsgZXh0ZW5kcyBvYmplY3QgPSB7fT4gZXh0ZW5kcyBDb250cm9sIHtcblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5FbGVtZW50XCIsIG11bHRpcGxlOiBmYWxzZSwgaXNEZWZhdWx0OiB0cnVlIH0pXG5cdGNvbnRlbnQ/OiBUO1xuXG5cdC8qKlxuXHQgKiBBc3NvY2lhdGlvbiB0byBjb250cm9scyAvIElEcyB0aGF0IGxhYmVsIHRoaXMgY29udHJvbCAoc2VlIFdBSS1BUklBIGF0dHJpYnV0ZSBhcmlhLWxhYmVsbGVkYnkpLlxuXHQgKi9cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIsIG11bHRpcGxlOiB0cnVlLCBzaW5ndWxhck5hbWU6IFwiYXJpYUxhYmVsbGVkQnlcIiB9KVxuXHRhcmlhTGFiZWxsZWRCeSE6IHN0cmluZ1tdO1xuXG5cdEBkZWZpbmVTdGF0ZSgpXG5cdHByb3RlY3RlZCBzdGF0ZSE6IFN0YXRlT2Y8Sz47XG5cblx0Y29uc3RydWN0b3Ioc2V0dGluZ3M/OiBzdHJpbmcgfCBQcm9wZXJ0aWVzT2Y8QnVpbGRpbmdCbG9ja0Jhc2U8VD4+LCBvdGhlcnM/OiBQcm9wZXJ0aWVzT2Y8QnVpbGRpbmdCbG9ja0Jhc2U8VD4+KSB7XG5cdFx0aWYgKHR5cGVvZiBzZXR0aW5ncyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0b3RoZXJzID8/PSB7fTtcblx0XHRcdG90aGVycy5pZCA9IHNldHRpbmdzO1xuXHRcdH1cblx0XHRzdXBlcihzZXR0aW5ncyBhcyB1bmtub3duIGFzIHN0cmluZywgb3RoZXJzKTtcblx0fVxuXG5cdHByaXZhdGUgX29sZERvbVJlZjogV2Vha1JlZjxFbGVtZW50PiB8IG51bGwgPSBudWxsO1xuXG5cdHN0YXRpYyByZW5kZXI8VCBleHRlbmRzIENvbnRyb2w+KG9SbTogUmVuZGVyTWFuYWdlciwgb0NvbnRyb2w6IEJ1aWxkaW5nQmxvY2tCYXNlPFQ+KTogdm9pZCB7XG5cdFx0aWYgKCFvQ29udHJvbC5jb250ZW50IHx8IG9Db250cm9sLmdldFZpc2libGUoKSA9PT0gZmFsc2UpIHtcblx0XHRcdEludmlzaWJsZVJlbmRlcmVyLnJlbmRlcihvUm0sIG9Db250cm9sKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1JtLnJlbmRlckNvbnRyb2wob0NvbnRyb2wuY29udGVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE92ZXJyaWRlIHRoZSBiaW5kUHJvcGVydHkgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBwcm9wZXJ0eSBpcyBhIGJpbmRpbmcgaW5mby5cblx0ICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGUgcHJvcGVydHlcblx0ICogQHBhcmFtIGJpbmRpbmdJbmZvIFRoZSBiaW5kaW5nIGluZm9cblx0ICogQHJldHVybnMgVGhlIGluc3RhbmNlIG9mIHRoZSBidWlsZGluZyBibG9jayBmb3IgY2hhaW5pbmdcblx0ICovXG5cdG92ZXJyaWRlIGJpbmRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIGJpbmRpbmdJbmZvOiBQcm9wZXJ0eUJpbmRpbmdJbmZvKTogdGhpcyB7XG5cdFx0Y29uc3QgcHJvcGVydHlNZXRhZGF0YSA9IHRoaXMuZ2V0TWV0YWRhdGEoKS5nZXRQcm9wZXJ0eShuYW1lKTtcblx0XHRpZiAocHJvcGVydHlNZXRhZGF0YT8uYmluZGFibGUgPT09IGZhbHNlICYmIHByb3BlcnR5TWV0YWRhdGEuZ3JvdXAgPT09IFwiRGF0YVwiKSB7XG5cdFx0XHQodGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbmFtZV0gPSBiaW5kaW5nSW5mbztcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3VwZXIuYmluZFByb3BlcnR5KG5hbWUsIGJpbmRpbmdJbmZvKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvL3NldCB0aGUgb2xkIGRvbSByZWZcblx0b3ZlcnJpZGUgb25BZnRlclJlbmRlcmluZyhldmVudDogSlF1ZXJ5LkV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgZG9tUmVmID0gdGhpcy5nZXREb21SZWYoKTtcblx0XHRpZiAoZG9tUmVmKSB7XG5cdFx0XHR0aGlzLl9vbGREb21SZWYgPSBuZXcgV2Vha1JlZihkb21SZWYpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9vbGREb21SZWYgPSBudWxsO1xuXHRcdH1cblx0XHRzdXBlci5vbkFmdGVyUmVuZGVyaW5nKGV2ZW50KTtcblx0fVxuXG5cdG92ZXJyaWRlIGdldERvbVJlZigpOiBFbGVtZW50IHwgbnVsbCB7XG5cdFx0Y29uc3Qgb0NvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0bGV0IGRvbVJlZjogRWxlbWVudCB8IG51bGwgPSBvQ29udGVudD8uZ2V0RG9tUmVmKCkgPz8gc3VwZXIuZ2V0RG9tUmVmKCk7XG5cdFx0aWYgKCFkb21SZWYpIHtcblx0XHRcdGRvbVJlZiA9IHRoaXMuX29sZERvbVJlZj8uZGVyZWYoKSA/PyBudWxsO1xuXHRcdFx0aWYgKGRvbVJlZikge1xuXHRcdFx0XHRyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZG9tUmVmLmlkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGRvbVJlZjtcblx0fVxuXG5cdG92ZXJyaWRlIGdldEZvY3VzRG9tUmVmKCk6IEVsZW1lbnQgfCBudWxsIHtcblx0XHRjb25zdCBvQ29udGVudCA9IHRoaXMuY29udGVudDtcblx0XHRyZXR1cm4gb0NvbnRlbnQgPyBvQ29udGVudC5nZXRGb2N1c0RvbVJlZigpIDogc3VwZXIuZ2V0Rm9jdXNEb21SZWYoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGFza3MgdXAgdGhlIGNvbnRyb2wgdHJlZSB0byBlbmhhbmNlIHRoZSBhY2Nlc3NpYmlsaXR5IHN0YXRlIG9mIHRoZSBjb250cm9sLlxuXHQgKiBAcGFyYW0gX29FbGVtZW50IFRoZSBlbGVtZW50IHRvIGVuaGFuY2Vcblx0ICogQHBhcmFtIG1BcmlhUHJvcHMgVGhlIGN1cnJlbnQgYXJpYSBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIFRoZSBlbmhhbmNlZCBhcmlhIHByb3BlcnRpZXNcblx0ICovXG5cdG92ZXJyaWRlIGVuaGFuY2VBY2Nlc3NpYmlsaXR5U3RhdGUoX29FbGVtZW50OiBvYmplY3QsIG1BcmlhUHJvcHM6IG9iamVjdCk6IG9iamVjdCB7XG5cdFx0Y29uc3Qgb1BhcmVudCA9IHRoaXMuZ2V0UGFyZW50KCk7XG5cblx0XHRpZiAob1BhcmVudCAmJiAob1BhcmVudCBhcyBNYW5hZ2VkT2JqZWN0ICYgeyBlbmhhbmNlQWNjZXNzaWJpbGl0eVN0YXRlPzogRnVuY3Rpb24gfSkuZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZSkge1xuXHRcdFx0Ly8gZm9yd2FyZCAgZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZSBjYWxsIHRvIHRoZSBwYXJlbnRcblx0XHRcdChvUGFyZW50IGFzIE1hbmFnZWRPYmplY3QgJiB7IGVuaGFuY2VBY2Nlc3NpYmlsaXR5U3RhdGU6IEZ1bmN0aW9uIH0pLmVuaGFuY2VBY2Nlc3NpYmlsaXR5U3RhdGUoX29FbGVtZW50LCBtQXJpYVByb3BzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbUFyaWFQcm9wcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIChpZiBhdmFpbGFibGUgb24gdGhlIGNvbmNyZXRlIGNvbnRyb2wpIHByb3ZpZGVzIHRoZSBjdXJyZW50IGFjY2Vzc2liaWxpdHkgc3RhdGUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqIEByZXR1cm5zIFRoZSBhY2Nlc3NpYmlsaXR5IGluZm9ybWF0aW9uIGZvciB0aGUgY29udHJvbC5cblx0ICovXG5cdG92ZXJyaWRlIGdldEFjY2Vzc2liaWxpdHlJbmZvKCk6IE9iamVjdCB7XG5cdFx0bGV0IGFjY2Vzc2liaWxpdHlJbmZvID0ge307XG5cdFx0aWYgKHRoaXMuY29udGVudD8uaXNBPENvbnRyb2w+KFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSkge1xuXHRcdFx0YWNjZXNzaWJpbGl0eUluZm8gPSB0aGlzLmNvbnRlbnQuZ2V0QWNjZXNzaWJpbGl0eUluZm8oKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFjY2Vzc2liaWxpdHlJbmZvO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIERPTU5vZGUgSUQgdG8gYmUgdXNlZCBmb3IgdGhlIFwibGFiZWxGb3JcIiBhdHRyaWJ1dGUuXG5cdCAqXG5cdCAqIFdlIGZvcndhcmQgdGhlIGNhbGwgb2YgdGhpcyBtZXRob2QgdG8gdGhlIGNvbnRlbnQgY29udHJvbC5cblx0ICogQHJldHVybnMgSUQgdG8gYmUgdXNlZCBmb3IgdGhlIDxjb2RlPmxhYmVsRm9yPC9jb2RlPlxuXHQgKi9cblx0b3ZlcnJpZGUgZ2V0SWRGb3JMYWJlbCgpOiBzdHJpbmcge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxDb250cm9sPihcInNhcC51aS5jb3JlLkNvbnRyb2xcIikpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0SWRGb3JMYWJlbCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdG92ZXJyaWRlIGFkZFN0eWxlQ2xhc3Moc3R5bGVDbGFzczogc3RyaW5nKTogdGhpcyB7XG5cdFx0KHRoaXMuY29udGVudCBhcyB1bmtub3duIGFzIENvbnRyb2wpPy5hZGRTdHlsZUNsYXNzKHN0eWxlQ2xhc3MpO1xuXHRcdHN1cGVyLmFkZFN0eWxlQ2xhc3Moc3R5bGVDbGFzcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRvdmVycmlkZSByZW1vdmVTdHlsZUNsYXNzKHN0eWxlQ2xhc3M6IHN0cmluZyk6IHRoaXMge1xuXHRcdCh0aGlzLmNvbnRlbnQgYXMgdW5rbm93biBhcyBDb250cm9sKT8ucmVtb3ZlU3R5bGVDbGFzcyhzdHlsZUNsYXNzKTtcblx0XHRzdXBlci5yZW1vdmVTdHlsZUNsYXNzKHN0eWxlQ2xhc3MpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3J0aGFuZCBmb3IgdGhlIEJpbmRpbmdUb29sa2l0LmJpbmRTdGF0ZSBmdW5jdGlvbiB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9iamVjdC5cblx0ICogQHBhcmFtIHBhdGggQSBwcm9wZXJ0eSBpbiB0aGUgc3RhdGUgb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiBmb3IgdGhlIHN0YXRlXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYmluZFN0YXRlKHBhdGg6IGtleW9mIEspOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4gfCBDb25zdGFudEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4ge1xuXHRcdHJldHVybiBCaW5kaW5nVG9vbGtpdC5iaW5kU3RhdGUodGhpcy5zdGF0ZSBhcyBLLCBwYXRoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBCdWlsZGluZ0Jsb2NrQmFzZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFXQTtFQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQSxJQVNNQSxpQkFBaUIsSUFBQUMsSUFBQSxHQUR0QkMsY0FBYyxDQUFDLCtCQUErQixDQUFDLEVBQUFDLEtBQUEsR0FFOUNDLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUUscUJBQXFCO0lBQUVDLFFBQVEsRUFBRSxLQUFLO0lBQUVDLFNBQVMsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBTTlFQyxXQUFXLENBQUM7SUFBRUosSUFBSSxFQUFFLHFCQUFxQjtJQUFFQyxRQUFRLEVBQUUsSUFBSTtJQUFFSSxZQUFZLEVBQUU7RUFBaUIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHNUZDLFdBQVcsQ0FBQyxDQUFDLEVBQUFYLElBQUEsQ0FBQVksTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxRQUFBO0lBR2QsU0FBQWYsa0JBQVlnQixRQUFzRCxFQUFFQyxNQUEyQyxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUNoSCxJQUFJLE9BQU9GLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDakNDLE1BQU0sS0FBSyxDQUFDLENBQUM7UUFDYkEsTUFBTSxDQUFDRSxFQUFFLEdBQUdILFFBQVE7TUFDckI7TUFDQUUsS0FBQSxHQUFBSCxRQUFBLENBQUFLLElBQUEsT0FBTUosUUFBUSxFQUF1QkMsTUFBTSxDQUFDO01BQUNJLDBCQUFBLENBQUFILEtBQUEsYUFBQUksV0FBQSxFQUFBSixLQUFBO01BZDlD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
|
|
182
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWlsZGluZ0Jsb2NrQmFzZSIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiYWdncmVnYXRpb24iLCJ0eXBlIiwibXVsdGlwbGUiLCJpc0RlZmF1bHQiLCJfZGVjMyIsImFzc29jaWF0aW9uIiwic2luZ3VsYXJOYW1lIiwiX2RlYzQiLCJkZWZpbmVTdGF0ZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsInNldHRpbmdzIiwib3RoZXJzIiwiX3RoaXMiLCJpZCIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX29sZERvbVJlZiIsIl9pbmhlcml0c0xvb3NlIiwicmVuZGVyIiwib1JtIiwib0NvbnRyb2wiLCJjb250ZW50IiwiZ2V0VmlzaWJsZSIsIkludmlzaWJsZVJlbmRlcmVyIiwicmVuZGVyQ29udHJvbCIsIl9wcm90byIsInByb3RvdHlwZSIsImJpbmRQcm9wZXJ0eSIsIm5hbWUiLCJiaW5kaW5nSW5mbyIsInByb3BlcnR5TWV0YWRhdGEiLCJnZXRNZXRhZGF0YSIsImdldFByb3BlcnR5IiwiYmluZGFibGUiLCJncm91cCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJldmVudCIsImRvbVJlZiIsImdldERvbVJlZiIsIldlYWtSZWYiLCJzdWZmaXgiLCJvQ29udGVudCIsImRlcmVmIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldEZvY3VzRG9tUmVmIiwiZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZSIsIl9vRWxlbWVudCIsIm1BcmlhUHJvcHMiLCJvUGFyZW50IiwiZ2V0UGFyZW50IiwiZ2V0QWNjZXNzaWJpbGl0eUluZm8iLCJhY2Nlc3NpYmlsaXR5SW5mbyIsImlzQSIsImdldElkRm9yTGFiZWwiLCJhZGRTdHlsZUNsYXNzIiwic3R5bGVDbGFzcyIsInJlbW92ZVN0eWxlQ2xhc3MiLCJiaW5kU3RhdGUiLCJwYXRoIiwiQmluZGluZ1Rvb2xraXQiLCJzdGF0ZSIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2tCYXNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RhbnRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24sIFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCAqIGFzIEJpbmRpbmdUb29sa2l0IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YsIFN0YXRlT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgYXNzb2NpYXRpb24sIGRlZmluZVN0YXRlLCBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEludmlzaWJsZVJlbmRlcmVyIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVSZW5kZXJlclwiO1xuaW1wb3J0IHR5cGUgUmVuZGVyTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVuZGVyTWFuYWdlclwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5pbnRlcmZhY2UgQnVpbGRpbmdCbG9ja0Jhc2U8VCBleHRlbmRzIFVJNUVsZW1lbnQgPSBDb250cm9sLCBLIGV4dGVuZHMgb2JqZWN0ID0ge30+IHtcblx0Ly8gRm9yY2UgYSBzdGF0ZSB1cGRhdGVcblx0X3VwZGF0ZVN0YXRlKCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYnVpbGRpbmcgYmxvY2tzLlxuICogVGhpcyBjb250YWlucyB0aGUgbG93IGxldmVsIGZ1bmN0aW9uYWxpdHkgb2YgaGF2aW5nIGEgY29udGVudCBhZ2dyZWdhdGlvbiBhbmQgaGFuZGxpbmcgdGhlIHJlbmRlcmluZyBvZiB0aGUgY29udGVudCB3aXRob3V0IGFuIGFjdHVhbCBET00gZWxlbWVudC5cbiAqIFRoZSBidWlsZGluZyBibG9jayBhbHNvIGRlZmluZXMgYSBzdGF0ZSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIGJ1aWxkaW5nIGJsb2NrLlxuICogQWNjZXNzaWJpbGl0eSBhbmQgY2xhc3NlcyBpbmZvcm1hdGlvbiBhcmUgZm9yd2FyZGVkIHRvIHRoZSBjb250ZW50IGNvbnRyb2wuXG4gKiBAZXhwZXJpbWVudGFsXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5iYXNlLkJ1aWxkaW5nQmxvY2tCYXNlXCIpXG5jbGFzcyBCdWlsZGluZ0Jsb2NrQmFzZTxUIGV4dGVuZHMgVUk1RWxlbWVudCA9IENvbnRyb2wsIEsgZXh0ZW5kcyBvYmplY3QgPSB7fT4gZXh0ZW5kcyBDb250cm9sIHtcblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5FbGVtZW50XCIsIG11bHRpcGxlOiBmYWxzZSwgaXNEZWZhdWx0OiB0cnVlIH0pXG5cdGNvbnRlbnQ/OiBUO1xuXG5cdC8qKlxuXHQgKiBBc3NvY2lhdGlvbiB0byBjb250cm9scyAvIElEcyB0aGF0IGxhYmVsIHRoaXMgY29udHJvbCAoc2VlIFdBSS1BUklBIGF0dHJpYnV0ZSBhcmlhLWxhYmVsbGVkYnkpLlxuXHQgKi9cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIsIG11bHRpcGxlOiB0cnVlLCBzaW5ndWxhck5hbWU6IFwiYXJpYUxhYmVsbGVkQnlcIiB9KVxuXHRhcmlhTGFiZWxsZWRCeSE6IHN0cmluZ1tdO1xuXG5cdEBkZWZpbmVTdGF0ZSgpXG5cdHByb3RlY3RlZCBzdGF0ZSE6IFN0YXRlT2Y8Sz47XG5cblx0Y29uc3RydWN0b3Ioc2V0dGluZ3M/OiBzdHJpbmcgfCBQcm9wZXJ0aWVzT2Y8QnVpbGRpbmdCbG9ja0Jhc2U8VD4+LCBvdGhlcnM/OiBQcm9wZXJ0aWVzT2Y8QnVpbGRpbmdCbG9ja0Jhc2U8VD4+KSB7XG5cdFx0aWYgKHR5cGVvZiBzZXR0aW5ncyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0b3RoZXJzID8/PSB7fTtcblx0XHRcdG90aGVycy5pZCA9IHNldHRpbmdzO1xuXHRcdH1cblx0XHRzdXBlcihzZXR0aW5ncyBhcyB1bmtub3duIGFzIHN0cmluZywgb3RoZXJzKTtcblx0fVxuXG5cdHByaXZhdGUgX29sZERvbVJlZjogV2Vha1JlZjxFbGVtZW50PiB8IG51bGwgPSBudWxsO1xuXG5cdHN0YXRpYyByZW5kZXI8VCBleHRlbmRzIENvbnRyb2w+KG9SbTogUmVuZGVyTWFuYWdlciwgb0NvbnRyb2w6IEJ1aWxkaW5nQmxvY2tCYXNlPFQ+KTogdm9pZCB7XG5cdFx0aWYgKCFvQ29udHJvbC5jb250ZW50IHx8IG9Db250cm9sLmdldFZpc2libGUoKSA9PT0gZmFsc2UpIHtcblx0XHRcdEludmlzaWJsZVJlbmRlcmVyLnJlbmRlcihvUm0sIG9Db250cm9sKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1JtLnJlbmRlckNvbnRyb2wob0NvbnRyb2wuY29udGVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE92ZXJyaWRlIHRoZSBiaW5kUHJvcGVydHkgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBwcm9wZXJ0eSBpcyBhIGJpbmRpbmcgaW5mby5cblx0ICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGUgcHJvcGVydHlcblx0ICogQHBhcmFtIGJpbmRpbmdJbmZvIFRoZSBiaW5kaW5nIGluZm9cblx0ICogQHJldHVybnMgVGhlIGluc3RhbmNlIG9mIHRoZSBidWlsZGluZyBibG9jayBmb3IgY2hhaW5pbmdcblx0ICovXG5cdG92ZXJyaWRlIGJpbmRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIGJpbmRpbmdJbmZvOiBQcm9wZXJ0eUJpbmRpbmdJbmZvKTogdGhpcyB7XG5cdFx0Y29uc3QgcHJvcGVydHlNZXRhZGF0YSA9IHRoaXMuZ2V0TWV0YWRhdGEoKS5nZXRQcm9wZXJ0eShuYW1lKTtcblx0XHRpZiAocHJvcGVydHlNZXRhZGF0YT8uYmluZGFibGUgPT09IGZhbHNlICYmIHByb3BlcnR5TWV0YWRhdGEuZ3JvdXAgPT09IFwiRGF0YVwiKSB7XG5cdFx0XHQodGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbmFtZV0gPSBiaW5kaW5nSW5mbztcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3VwZXIuYmluZFByb3BlcnR5KG5hbWUsIGJpbmRpbmdJbmZvKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvL3NldCB0aGUgb2xkIGRvbSByZWZcblx0b3ZlcnJpZGUgb25BZnRlclJlbmRlcmluZyhldmVudDogSlF1ZXJ5LkV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgZG9tUmVmID0gdGhpcy5nZXREb21SZWYoKTtcblx0XHRpZiAoZG9tUmVmKSB7XG5cdFx0XHR0aGlzLl9vbGREb21SZWYgPSBuZXcgV2Vha1JlZihkb21SZWYpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9vbGREb21SZWYgPSBudWxsO1xuXHRcdH1cblx0XHRzdXBlci5vbkFmdGVyUmVuZGVyaW5nKGV2ZW50KTtcblx0fVxuXG5cdG92ZXJyaWRlIGdldERvbVJlZihzdWZmaXg/OiBzdHJpbmcpOiBFbGVtZW50IHwgbnVsbCB7XG5cdFx0Y29uc3Qgb0NvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0bGV0IGRvbVJlZjogRWxlbWVudCB8IG51bGwgPSBvQ29udGVudD8uZ2V0RG9tUmVmKHN1ZmZpeCkgPz8gc3VwZXIuZ2V0RG9tUmVmKHN1ZmZpeCk7XG5cdFx0aWYgKCFkb21SZWYgJiYgIXN1ZmZpeCkge1xuXHRcdFx0ZG9tUmVmID0gdGhpcy5fb2xkRG9tUmVmPy5kZXJlZigpID8/IG51bGw7XG5cdFx0XHRpZiAoZG9tUmVmKSB7XG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkb21SZWYuaWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZG9tUmVmO1xuXHR9XG5cblx0b3ZlcnJpZGUgZ2V0Rm9jdXNEb21SZWYoKTogRWxlbWVudCB8IG51bGwge1xuXHRcdGNvbnN0IG9Db250ZW50ID0gdGhpcy5jb250ZW50O1xuXHRcdHJldHVybiBvQ29udGVudCA/IG9Db250ZW50LmdldEZvY3VzRG9tUmVmKCkgOiBzdXBlci5nZXRGb2N1c0RvbVJlZigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNrcyB1cCB0aGUgY29udHJvbCB0cmVlIHRvIGVuaGFuY2UgdGhlIGFjY2Vzc2liaWxpdHkgc3RhdGUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBfb0VsZW1lbnQgVGhlIGVsZW1lbnQgdG8gZW5oYW5jZVxuXHQgKiBAcGFyYW0gbUFyaWFQcm9wcyBUaGUgY3VycmVudCBhcmlhIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMgVGhlIGVuaGFuY2VkIGFyaWEgcHJvcGVydGllc1xuXHQgKi9cblx0b3ZlcnJpZGUgZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZShfb0VsZW1lbnQ6IG9iamVjdCwgbUFyaWFQcm9wczogb2JqZWN0KTogb2JqZWN0IHtcblx0XHRjb25zdCBvUGFyZW50ID0gdGhpcy5nZXRQYXJlbnQoKTtcblxuXHRcdGlmIChvUGFyZW50ICYmIChvUGFyZW50IGFzIE1hbmFnZWRPYmplY3QgJiB7IGVuaGFuY2VBY2Nlc3NpYmlsaXR5U3RhdGU/OiBGdW5jdGlvbiB9KS5lbmhhbmNlQWNjZXNzaWJpbGl0eVN0YXRlKSB7XG5cdFx0XHQvLyBmb3J3YXJkICBlbmhhbmNlQWNjZXNzaWJpbGl0eVN0YXRlIGNhbGwgdG8gdGhlIHBhcmVudFxuXHRcdFx0KG9QYXJlbnQgYXMgTWFuYWdlZE9iamVjdCAmIHsgZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZTogRnVuY3Rpb24gfSkuZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZShfb0VsZW1lbnQsIG1BcmlhUHJvcHMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBtQXJpYVByb3BzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gKGlmIGF2YWlsYWJsZSBvbiB0aGUgY29uY3JldGUgY29udHJvbCkgcHJvdmlkZXMgdGhlIGN1cnJlbnQgYWNjZXNzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgY29udHJvbC5cblx0ICogQHJldHVybnMgVGhlIGFjY2Vzc2liaWxpdHkgaW5mb3JtYXRpb24gZm9yIHRoZSBjb250cm9sLlxuXHQgKi9cblx0b3ZlcnJpZGUgZ2V0QWNjZXNzaWJpbGl0eUluZm8oKTogT2JqZWN0IHtcblx0XHRsZXQgYWNjZXNzaWJpbGl0eUluZm8gPSB7fTtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8Q29udHJvbD4oXCJzYXAudWkuY29yZS5Db250cm9sXCIpKSB7XG5cdFx0XHRhY2Nlc3NpYmlsaXR5SW5mbyA9IHRoaXMuY29udGVudC5nZXRBY2Nlc3NpYmlsaXR5SW5mbygpO1xuXHRcdH1cblx0XHRyZXR1cm4gYWNjZXNzaWJpbGl0eUluZm87XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgRE9NTm9kZSBJRCB0byBiZSB1c2VkIGZvciB0aGUgXCJsYWJlbEZvclwiIGF0dHJpYnV0ZS5cblx0ICpcblx0ICogV2UgZm9yd2FyZCB0aGUgY2FsbCBvZiB0aGlzIG1ldGhvZCB0byB0aGUgY29udGVudCBjb250cm9sLlxuXHQgKiBAcmV0dXJucyBJRCB0byBiZSB1c2VkIGZvciB0aGUgPGNvZGU+bGFiZWxGb3I8L2NvZGU+XG5cdCAqL1xuXHRvdmVycmlkZSBnZXRJZEZvckxhYmVsKCk6IHN0cmluZyB7XG5cdFx0aWYgKHRoaXMuY29udGVudD8uaXNBPENvbnRyb2w+KFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXRJZEZvckxhYmVsKCk7XG5cdFx0fVxuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0b3ZlcnJpZGUgYWRkU3R5bGVDbGFzcyhzdHlsZUNsYXNzOiBzdHJpbmcpOiB0aGlzIHtcblx0XHQodGhpcy5jb250ZW50IGFzIHVua25vd24gYXMgQ29udHJvbCk/LmFkZFN0eWxlQ2xhc3Moc3R5bGVDbGFzcyk7XG5cdFx0c3VwZXIuYWRkU3R5bGVDbGFzcyhzdHlsZUNsYXNzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG92ZXJyaWRlIHJlbW92ZVN0eWxlQ2xhc3Moc3R5bGVDbGFzczogc3RyaW5nKTogdGhpcyB7XG5cdFx0KHRoaXMuY29udGVudCBhcyB1bmtub3duIGFzIENvbnRyb2wpPy5yZW1vdmVTdHlsZUNsYXNzKHN0eWxlQ2xhc3MpO1xuXHRcdHN1cGVyLnJlbW92ZVN0eWxlQ2xhc3Moc3R5bGVDbGFzcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2hvcnRoYW5kIGZvciB0aGUgQmluZGluZ1Rvb2xraXQuYmluZFN0YXRlIGZ1bmN0aW9uIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2JqZWN0LlxuXHQgKiBAcGFyYW0gcGF0aCBBIHByb3BlcnR5IGluIHRoZSBzdGF0ZSBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uIGZvciB0aGUgc3RhdGVcblx0ICovXG5cdHByb3RlY3RlZCBiaW5kU3RhdGUocGF0aDoga2V5b2YgSyk6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiB8IENvbnN0YW50RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiB7XG5cdFx0cmV0dXJuIEJpbmRpbmdUb29sa2l0LmJpbmRTdGF0ZSh0aGlzLnN0YXRlIGFzIEssIHBhdGgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1aWxkaW5nQmxvY2tCYXNlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztFQVdBO0VBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVBBLElBU01BLGlCQUFpQixJQUFBQyxJQUFBLEdBRHRCQyxjQUFjLENBQUMsK0JBQStCLENBQUMsRUFBQUMsS0FBQSxHQUU5Q0MsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRSxxQkFBcUI7SUFBRUMsUUFBUSxFQUFFLEtBQUs7SUFBRUMsU0FBUyxFQUFFO0VBQUssQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FNOUVDLFdBQVcsQ0FBQztJQUFFSixJQUFJLEVBQUUscUJBQXFCO0lBQUVDLFFBQVEsRUFBRSxJQUFJO0lBQUVJLFlBQVksRUFBRTtFQUFpQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc1RkMsV0FBVyxDQUFDLENBQUMsRUFBQVgsSUFBQSxDQUFBWSxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLFFBQUE7SUFHZCxTQUFBZixrQkFBWWdCLFFBQXNELEVBQUVDLE1BQTJDLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQ2hILElBQUksT0FBT0YsUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUNqQ0MsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUNiQSxNQUFNLENBQUNFLEVBQUUsR0FBR0gsUUFBUTtNQUNyQjtNQUNBRSxLQUFBLEdBQUFILFFBQUEsQ0FBQUssSUFBQSxPQUFNSixRQUFRLEVBQXVCQyxNQUFNLENBQUM7TUFB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
|
|
@@ -82,10 +82,10 @@ class BuildingBlockBase<T extends UI5Element = Control, K extends object = {}> e
|
|
|
82
82
|
super.onAfterRendering(event);
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
override getDomRef(): Element | null {
|
|
85
|
+
override getDomRef(suffix?: string): Element | null {
|
|
86
86
|
const oContent = this.content;
|
|
87
|
-
let domRef: Element | null = oContent?.getDomRef() ?? super.getDomRef();
|
|
88
|
-
if (!domRef) {
|
|
87
|
+
let domRef: Element | null = oContent?.getDomRef(suffix) ?? super.getDomRef(suffix);
|
|
88
|
+
if (!domRef && !suffix) {
|
|
89
89
|
domRef = this._oldDomRef?.deref() ?? null;
|
|
90
90
|
if (domRef) {
|
|
91
91
|
return document.getElementById(domRef.id);
|
|
@@ -677,7 +677,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
677
677
|
const propertyValue = this.getProperty(propertyKey);
|
|
678
678
|
const bindingPropertyValue = this._bindingProperties[propertyKey];
|
|
679
679
|
// If the property is set to a different value we update the _bindingProperties
|
|
680
|
-
if (propertyValue && propertyValue !== bindingPropertyValue) {
|
|
680
|
+
if (propertyValue !== undefined && propertyValue !== bindingPropertyValue) {
|
|
681
681
|
this._bindingProperties[propertyKey] = propertyValue;
|
|
682
682
|
}
|
|
683
683
|
const propValue = this._bindingProperties[propertyKey];
|
|
@@ -815,4 +815,4 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
|
|
|
815
815
|
}
|
|
816
816
|
return _exports;
|
|
817
817
|
}, false);
|
|
818
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJyZWZlcmVuY2VzIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJwcmVwYXJlR2V0QVBJRnVuY3Rpb24iLCJvRXZlbnQiLCJhcGlGUU4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvU291cmNlIiwiZ2V0U291cmNlIiwiX2dldEFQSUV4dGVuc2lvbiIsImlzQSIsImdldFBhcmVudCIsImlzRGVwZW5kZW50Qm91bmQiLCJvRGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJoYXNDb3JyZWN0RGVwZW5kZW50IiwiZmluZCIsIm9EZXBlbmRlbnQiLCJvU291cmNlTWFwIiwiaW5zdGFuY2VNYXAiLCJnZXQiLCJ0YXJnZXRDb250cm9sIiwiZW5zdXJlR2V0QVBJIiwiX19hcGlSZWdpc3RlcmVkIiwiV2Vha01hcCIsInJlZ2lzdGVySW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjb25zdHJ1Y3RvciIsInNldCIsInB1c2giLCJnZXRBUEkiLCJkZWZpbmVTdGF0ZSIsInByb3BlcnR5S2V5IiwicHJvcGVydHlEZXNjcmlwdG9yIiwic3RhdGVQcm9wZXJ0eSIsIkVycm9yIiwid3JpdGFibGUiLCJzdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIiwiaW5pdGlhbGl6ZXIiLCJfZXhwb3J0cyIsIm1ldGhvZE92ZXJyaWRlIiwiZXh0ZW5zaW9uTmFtZSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiZGVzY3JpcHRvciIsImhvb2thYmxlIiwicHVibGljRXh0ZW5zaW9uIiwiZW51bWVyYWJsZSIsInB1YmxpYyIsInByaXZhdGVFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImZpbmFsIiwidXNpbmdFeHRlbnNpb24iLCJleHRlbnNpb25DbGFzcyIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJncm91cCIsImRlZmF1bHRWYWx1ZSIsImFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25EZWZpbml0aW9uIiwibXVsdGlwbGUiLCJpc0RlZmF1bHQiLCJkZWZhdWx0QWdncmVnYXRpb24iLCJhc3NvY2lhdGlvbiIsInVpNUFzc29jaWF0aW9uTWV0YWRhdGEiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJpbnRlcmZhY2VOYW1lIiwieG1sRXZlbnRIYW5kbGVyIiwicHJvcGVydHlrZXkiLCJjdXJyZW50Q29uc3RydWN0b3IiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImRlZmluZVVJNUNsYXNzIiwic1RhcmdldCIsIm1ldGFkYXRhRGVmaW5pdGlvbiIsInByb3RvdHlwZSIsImtleSIsImlzQXJyYXkiLCJjb25jYXQiLCJyZWdpc3RlclVJNU1ldGFkYXRhIiwibWl4aW4iLCJpbnRlcmZhY2VDbGFzcyIsImJhc2VDdG9yIiwiZXh0ZW5kIiwiaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgiLCJfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzIiwiT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJwcm9wYWdhdGVIb29rRnJvbU1peGluIiwic2V0dXBNaXhpbiIsImNyZWF0ZVJlZmVyZW5jZSIsImN1cnJlbnQiLCJzZXRDdXJyZW50Iiwib0NvbnRyb2xJbnN0YW5jZSIsImRlZmluZVJlZmVyZW5jZSIsIkJhc2VPYmplY3QiLCJpc09iamVjdEEiLCJiYXNlQ2xhc3NNZXRhZGF0YSIsImludGVyZmFjZUNsYXNzUHJvdG90eXBlIiwiZ2V0SW50ZXJmYWNlTmFtZSIsImdldE93blByb3BlcnR5TmFtZXMiLCJmb3JFYWNoIiwibmFtZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiY3JlYXRlIiwiX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5IiwianNvbk1vZGVsIiwicHJvcCIsInBhdGhJbk1vZGVsIiwib09iaiIsImRlZXBDbG9uZSIsImdldE9iamVjdCIsIm9UYXJnZXQiLCJtb2RlbCIsIlByb3h5IiwicCIsInJlY2VpdmVyIiwicmVmIiwiUmVmbGVjdCIsImJpbmQiLCJpc05hTiIsIk51bWJlciIsIl9fYmluZGluZ0luZm8iLCJwYXRoIiwiYm91bmRQcm9wZXJ0aWVzIiwiU3ltYm9sIiwiY3JlYXRlU3RhdGVQcm94eSIsInN0YXRlUHJvcGVydHlOYW1lIiwiYm91bmRUb1N0YXRlUHJvcHMiLCJpbml0aWFsRGF0YSIsInNldE1vZGVsIiwiSlNPTk1vZGVsIiwic3RhdGVNb2RlbCIsImdldE1vZGVsIiwiYXR0YWNoUHJvcGVydHlDaGFuZ2UiLCJldnQiLCJnZXRQYXJhbWV0ZXIiLCJzdWJzdHJpbmciLCJpbmNsdWRlcyIsInNldFByb3BlcnR5IiwiX19zdGF0ZUNyZWF0ZWQiLCJwcm94eSIsInNldFN0YXRlTW9kZWwiLCJ2YWx1ZSIsImtub3duQm91bmRQcm9wZXJ0aWVzIiwiX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUiLCJzZXRSZXN1bHQiLCJfdXBkYXRlU3RhdGVEZWJvdW5jZWQiLCJjb25maWd1cmFibGUiLCJfY3JlYXRlU3RhdGVQcm9wZXJ0eSIsIm9iaiIsInVwZGF0aW5nU3RhdGUiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eURlZiIsImJpbmRUb1N0YXRlIiwiX3VwZGF0ZVN0YXRlIiwiX3VwZGF0ZVN0YXRlVGltZXIiLCJvblN0YXRlQ2hhbmdlIiwiX2NoYW5nZWRQcm9wcyIsImNoYW5nZWRQcm9wIiwic2V0VGltZW91dCIsIl9fc3RhdGVOYW1lIiwiZm5BcHBseVNldHRpbmdzIiwiYXBwbHlTZXR0aW5ncyIsIm1TZXR0aW5ncyIsIm1vZGVscyIsIiRjb21wb25lbnRTdGF0ZSIsImNhbGwiLCJmblNldFByb3BlcnR5Iiwic1Byb3BlcnR5TmFtZSIsIm9WYWx1ZSIsImJTdXBwcmVzc0ludmFsaWRhdGUiLCJjbGF6eiIsImluT2JqIiwib2JqTmFtZSIsImJhc2VUeXBlIiwiZ2V0U3RlcmVvdHlwZSIsInJlbmRlcmVyRGVmaW5pdGlvbiIsInJlbmRlcmVyIiwicmVuZGVyIiwiYXBpVmVyc2lvbiIsImtleXMiLCJlIiwiY0V4dE5hbWUiLCJvdXRwdXQiLCJmbkluaXQiLCJpbml0IiwiZm5BZnRlckluaXQiLCJhZnRlckluaXQiLCJfdGhpcyIsIl9sZW4yIiwiX2tleTIiLCJhcHBseSIsImFQcm9wZXJ0eUtleXMiLCJwcm9wZXJ0eURlZmF1bHQiLCJfYmluZGluZ1Byb3BlcnRpZXMiLCJ2IiwibVByb3BlcnRpZXMiLCJwcm9wZXJ0eVZhbHVlIiwiZ2V0UHJvcGVydHkiLCJiaW5kaW5nUHJvcGVydHlWYWx1ZSIsInByb3BWYWx1ZSIsIl9hcHBseWluZ1NldHRpbmdzIiwiYUFnZ3JlZ2F0aW9uS2V5cyIsImFnZ3JlZ2F0aW9uS2V5IiwiYWdncmVnYXRpb25EZWYiLCJzZXRBZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0aW9uQ29udGVudCIsImdldEFnZ3JlZ2F0aW9uIiwiYUFzc29jaWF0aW9uS2V5cyIsImFzc29jaWF0aW9uS2V5Iiwic2V0QXNzb2NpYXRpb24iLCJnZXRBc3NvY2lhdGlvbiIsInJlZmVyZW5jZVByb3BlcnRpZXMiLCJtZXRob2ROYW1lIiwibWV0aG9kRGVmaW5pdGlvbiIsIm1ldGhvZEhvbGRlciIsIm1ldGhvZEFycmF5cyIsInJldmVyc2UiLCJfbGVuMyIsIm1ldGhvZEFyZ3MiLCJfa2V5MyIsImFyZyIsIm9FeHRlbnNpb24iLCJwb2wiLCJfbGVuNCIsIl9rZXk0Iiwib0NsYXNzIiwiTWV0YWRhdGEiLCJjcmVhdGVDbGFzcyIsInVpZCIsIkNvbnRyb2xsZXJNZXRhZGF0YSIsIl9zdGF0aWNPdmVycmlkZSIsIl9vdmVycmlkZSIsIk9iamVjdFBhdGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IHsgaG9va2FibGUsIHByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01ldGFkYXRhXCI7XG5pbXBvcnQgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBDb250cm9sbGVyTWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyTWV0YWRhdGFcIjtcbmltcG9ydCB0eXBlIE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1vZGVsJFByb3BlcnR5Q2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcblxudHlwZSBPdmVycmlkZURlZmluaXRpb24gPSBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj47XG50eXBlIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uID0ge1xuXHRvdmVycmlkZUV4ZWN1dGlvbj86IE92ZXJyaWRlRXhlY3V0aW9uO1xuXHRwdWJsaWM/OiBib29sZWFuO1xuXHRmaW5hbD86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgTm9uQWJzdHJhY3RDbGFzczxUPiA9IFBpY2s8VCwga2V5b2YgVD4gJiAobmV3ICguLi5hcmdzOiB1bmtub3duW10pID0+IFQpO1xuXG50eXBlIFVJNVByb3BlcnR5TWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0YmluZGFibGU/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuXHRieVZhbHVlPzogYm9vbGVhbjtcblx0aXNCaW5kaW5nSW5mbz86IGJvb2xlYW47XG5cdGJpbmRUb1N0YXRlPzogYm9vbGVhbjtcblx0ZXhwZWN0ZWRBbm5vdGF0aW9ucz86IHN0cmluZ1tdO1xuXHRleHBlY3RlZFR5cGVzPzogc3RyaW5nW107XG5cdGFsbG93ZWRWYWx1ZXM/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/OiBGdW5jdGlvbjtcblx0XHRyZW5kZXJlcj86IHVua25vd247XG5cdFx0cmVuZGVyOiBGdW5jdGlvbjtcblx0XHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdH07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyBjbGFzcyBzaG91bGQgZGVmaW5lIGEgVUk1IGNvbnRyb2wgb2YgdGhlIHNwZWNpZmllZCBuYW1lLlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBVSTUgY2xhc3NcbiAqIEBwYXJhbSBtZXRhZGF0YURlZmluaXRpb24gSW5saW5lIG1ldGFkYXRhIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIEEgY2xhc3MgZGVjb3JhdG9yIHRoYXQgd2lsbCBjcmVhdGUgYSB1aTUgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVJNUNsYXNzKHNUYXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogUGFydGlhbDxVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0XHRpZiAoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0pIHtcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0uY29uY2F0KFxuXHRcdFx0XHRcdFx0XHRtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSA9IHtcblx0XHRcdFx0XHRcdFx0Li4uY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0sXG5cdFx0XHRcdFx0XHRcdC4uLihtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dIGFzIG9iamVjdClcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleSBhcyBrZXlvZiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVnaXN0ZXJVSTVNZXRhZGF0YShjb25zdHJ1Y3Rvciwgc1RhcmdldCwgY29uc3RydWN0b3IucHJvdG90eXBlKTtcblx0fSBhcyBDbGFzc0RlY29yYXRvcjtcbn1cbnR5cGUgQ29uc3RydWN0b3I8VCA9IHt9PiA9IG5ldyAoLi4uYTogdW5rbm93bltdKSA9PiBUO1xuLyoqXG4gKiBNaXhpbiBhIHNwZWNpZmljIGludGVyZmFjZSBpbmNsdWRpbmcgYWxsIGl0cyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGludG8gdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gaW50ZXJmYWNlQ2xhc3MgSW1wbGVtZW50YXRpb24gY2xhc3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluPFQgZXh0ZW5kcyBJSW50ZXJmYWNlV2l0aE1peGluPihpbnRlcmZhY2VDbGFzczogQ29uc3RydWN0b3I8VD4pOiBDbGFzc0RlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAoYmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlKSB7XG5cdFx0aWYgKGJhc2VDdG9yLnByb3RvdHlwZS5leHRlbmQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBtaXhpbkludGVyZmFjZSBkZWNvcmF0b3IgbXVzdCBiZSBwbGFjZWQgYWZ0ZXIgYGRlZmluZVVpNUNsYXNzYFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YShiYXNlQ3Rvci5wcm90b3R5cGUpO1xuXG5cdFx0bGV0IGludGVyZmFjZVByb3RvVHlwZVRvTWl4ID0gaW50ZXJmYWNlQ2xhc3MucHJvdG90eXBlO1xuXHRcdHdoaWxlIChpbnRlcmZhY2VQcm90b1R5cGVUb01peCkge1xuXHRcdFx0YmFzZUN0b3IgPSBfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzKGJhc2VDdG9yLCBtZXRhZGF0YSwgaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgpO1xuXHRcdFx0aW50ZXJmYWNlUHJvdG9UeXBlVG9NaXggPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgpO1xuXHRcdH1cblx0XHRwcm9wYWdhdGVIb29rRnJvbU1peGluKGJhc2VDdG9yLCBpbnRlcmZhY2VDbGFzcyk7XG5cblx0XHQvLyBIb29rIHRvIGFkZCBwb3RlbnRpYWxseSBtb3JlIGxvZ2ljIHRvIHRoZSBtaXhpblxuXHRcdGludGVyZmFjZUNsYXNzLnByb3RvdHlwZS5zZXR1cE1peGluPy4oYmFzZUN0b3IpO1xuXHRcdHJldHVybiBiYXNlQ3Rvcjtcblx0fSBhcyBDbGFzc0RlY29yYXRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluIHtcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVjZWl2aW5nIGNvbnRyb2wuXG5cdCAqIElmIG5vdCBkZWZpbmVkLCB0aGUgaW50ZXJmYWNlIHdpbGwgbm90IGJlIGFkZGVkLlxuXHQgKiBAcmV0dXJucyBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlXG5cdCAqL1xuXHRnZXRJbnRlcmZhY2VOYW1lPygpOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gYWRkIG1vcmUgbG9naWMgdG8gdGhlIG1peGluLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRyb2xzIGFyZSBjcmVhdGVkIGFuZCBjYW4gYmUgdXNlZCB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGxvZ2ljIHRvIHRoZSBiYXNlIGNsYXNzLlxuXHQgKiBAcGFyYW0gYmFzZUNsYXNzIFRoZSBiYXNlIGNsYXNzIHRoYXQgd2lsbCBiZSBleHRlbmRlZFxuXHQgKi9cblx0c2V0dXBNaXhpbj8oYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWZlcmVuY2U8VCBleHRlbmRzIFVJNUVsZW1lbnQ+KCk6IFJlZjxUPiB7XG5cdHJldHVybiB7XG5cdFx0Y3VycmVudDogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVCxcblx0XHRzZXRDdXJyZW50OiBmdW5jdGlvbiAob0NvbnRyb2xJbnN0YW5jZTogVCk6IHZvaWQge1xuXHRcdFx0dGhpcy5jdXJyZW50ID0gb0NvbnRyb2xJbnN0YW5jZTtcblx0XHR9XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgZm9sbG93aW5nIG9iamVjdCB3aWxsIGhvbGQgYSByZWZlcmVuY2UgdG8gYSBjb250cm9sIHRocm91Z2gganN4IHRlbXBsYXRpbmcuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVmZXJlbmNlKCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKEJhc2VPYmplY3QuaXNPYmplY3RBKHRhcmdldCwgXCJzYXAudWkuY29yZS5Db250cm9sXCIpKSB7XG5cdFx0XHRpZiAoIW1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRcdG1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0KHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplciA9IGNyZWF0ZVJlZmVyZW5jZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLjtcbn1cblxuZnVuY3Rpb24gX2FkZEludGVyZmFjZVByb3RvVHlwZXNUb0Jhc2VDbGFzcyhcblx0YmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlLFxuXHRiYXNlQ2xhc3NNZXRhZGF0YTogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbixcblx0aW50ZXJmYWNlQ2xhc3NQcm90b3R5cGU6IEZ1bmN0aW9uW1wicHJvdG90eXBlXCJdXG4pOiBVSTVDb250cm9sQW5kTW9yZSB7XG5cdGNvbnN0IGludGVyZmFjZU5hbWUgPSBpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZT8uZ2V0SW50ZXJmYWNlTmFtZT8uKCk7XG5cdGlmIChpbnRlcmZhY2VOYW1lKSB7XG5cdFx0YmFzZUNsYXNzTWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHR9XG5cblx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUpLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRpZiAobmFtZSAhPT0gXCJjb25zdHJ1Y3RvclwiICYmIG5hbWUgIT09IFwic2V0dXBNaXhpblwiICYmIG5hbWUgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0aWYgKCFiYXNlQ3Rvci5wcm90b3R5cGVbbmFtZV0pIHtcblx0XHRcdFx0Ly8gVGhlIGJhc2UgY2xhc3MgXCJ3aW5zXCIgb3ZlciB0aGUgbWl4aW5cblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRcdGJhc2VDdG9yLnByb3RvdHlwZSxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUsIG5hbWUpIHx8IE9iamVjdC5jcmVhdGUobnVsbClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0YmFzZUN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0gbWVyZ2UoYmFzZUN0b3IucHJvdG90eXBlLm1ldGFkYXRhLCBpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZS5tZXRhZGF0YSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJhc2VDdG9yO1xufVxuXG5mdW5jdGlvbiBfZ2V0SGFuZGxlckZvclN0YXRlUHJvcGVydHkoanNvbk1vZGVsOiBKU09OTW9kZWwsIHByb3A6IHN0cmluZyk6IHVua25vd24ge1xuXHRjb25zdCBwYXRoSW5Nb2RlbCA9IGAvJHtwcm9wLnRvU3RyaW5nKCl9YDtcblx0Y29uc3Qgb09iaiA9IGRlZXBDbG9uZShqc29uTW9kZWwuZ2V0T2JqZWN0KHBhdGhJbk1vZGVsKSk7XG5cdGxldCBvVGFyZ2V0O1xuXHRpZiAocHJvcCA9PT0gXCJfX2JpbmRpbmdJbmZvXCIpIHtcblx0XHRyZXR1cm4geyBtb2RlbDogXCIkY29tcG9uZW50U3RhdGVcIiB9O1xuXHR9XG5cdGlmICh0eXBlb2Ygb09iaiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdG9UYXJnZXQgPSBvT2JqO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvT2JqID09PSBcIm51bWJlclwiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9PYmogPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvT2JqKSkge1xuXHRcdG9UYXJnZXQgPSBuZXcgUHJveHkob09iaiwge1xuXHRcdFx0Z2V0KHRhcmdldDogdW5rbm93bltdLCBwOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiB1bmtub3duW10pOiB1bmtub3duIHtcblx0XHRcdFx0Y29uc3QgcmVmID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwLCByZWNlaXZlcik7XG5cdFx0XHRcdGlmICh0eXBlb2YgcmVmID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVmLmJpbmQodGFyZ2V0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWYgPT09IHVuZGVmaW5lZCAmJiBpc05hTihOdW1iZXIocC50b1N0cmluZygpKSkpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0X19iaW5kaW5nSW5mbzoge1xuXHRcdFx0XHRcdFx0XHRtb2RlbDogXCIkY29tcG9uZW50U3RhdGVcIixcblx0XHRcdFx0XHRcdFx0cGF0aDogcFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlZjtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvVGFyZ2V0ID0geyAuLi5vT2JqIH07XG5cdH1cblx0aWYgKHR5cGVvZiBvVGFyZ2V0ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0b1RhcmdldC5fX2JpbmRpbmdJbmZvID0ge1xuXHRcdFx0bW9kZWw6IFwiJGNvbXBvbmVudFN0YXRlXCIsXG5cdFx0XHRwYXRoOiBwYXRoSW5Nb2RlbFxuXHRcdH07XG5cdH1cblx0cmV0dXJuIG9UYXJnZXQ7XG59XG5jb25zdCBib3VuZFByb3BlcnRpZXMgPSBTeW1ib2woXCJib3VuZFByb3BlcnRpZXNcIik7XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlUHJveHkoXG5cdHRhcmdldENvbnRyb2w6IENvbnRyb2wgJiB7XG5cdFx0W2JvdW5kUHJvcGVydGllc106IHN0cmluZ1tdO1xuXHRcdF9fc3RhdGVDcmVhdGVkOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZTogRnVuY3Rpb247XG5cdFx0X3VwZGF0ZVN0YXRlRGVib3VuY2VkOiBGdW5jdGlvbjtcblx0XHRfaWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZTogYm9vbGVhbjtcblx0XHRfdXBkYXRlU3RhdGVUaW1lcjogdW5rbm93bjtcblx0XHRfY2hhbmdlZFByb3BzPzogc3RyaW5nW107XG5cdH0sXG5cdHN0YXRlUHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdGJvdW5kVG9TdGF0ZVByb3BzOiBzdHJpbmdbXSxcblx0aW5pdGlhbERhdGE/OiBvYmplY3Rcbik6IEpTT05Nb2RlbCB7XG5cdC8vIExhenkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0YXRlIHByb3BlcnR5XG5cdHRhcmdldENvbnRyb2wuc2V0TW9kZWwobmV3IEpTT05Nb2RlbChpbml0aWFsRGF0YSksIFwiJGNvbXBvbmVudFN0YXRlXCIpO1xuXHRjb25zdCBzdGF0ZU1vZGVsID0gdGFyZ2V0Q29udHJvbC5nZXRNb2RlbChcIiRjb21wb25lbnRTdGF0ZVwiKSBhcyBKU09OTW9kZWw7XG5cdHN0YXRlTW9kZWwuYXR0YWNoUHJvcGVydHlDaGFuZ2UoKGV2dDogTW9kZWwkUHJvcGVydHlDaGFuZ2VFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldnQuZ2V0UGFyYW1ldGVyKFwicGF0aFwiKT8uc3Vic3RyaW5nKDEpOyAvLyB0byByZW1vdmUgdGhlIGZpcnN0IC9cblx0XHRpZiAocGF0aCAmJiBib3VuZFRvU3RhdGVQcm9wcy5pbmNsdWRlcyhwYXRoKSkge1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5zZXRQcm9wZXJ0eShwYXRoLCBldnQuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIikpO1xuXHRcdH1cblx0fSk7XG5cdHRhcmdldENvbnRyb2wuX19zdGF0ZUNyZWF0ZWQgPSB0cnVlO1xuXHRjb25zdCBwcm94eSA9IG5ldyBQcm94eShzdGF0ZU1vZGVsLCB7XG5cdFx0Z2V0OiAodGFyZ2V0OiBKU09OTW9kZWwsIHByb3A6IHN0cmluZyk6IHVua25vd24gPT4ge1xuXHRcdFx0cmV0dXJuIF9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eSh0YXJnZXQsIHByb3ApO1xuXHRcdH0sXG5cdFx0c2V0OiAoc2V0U3RhdGVNb2RlbDogSlNPTk1vZGVsLCBwcm9wLCB2YWx1ZSk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0Ly8gd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIGtub3duIGJvdW5kIHByb3BlcnR5IGluIGFueSBvZiB0aGUgcmVsYXRlZCBjbGFzc2VzXG5cdFx0XHRjb25zdCBrbm93bkJvdW5kUHJvcGVydGllcyA9IHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXTtcblx0XHRcdGlmIChrbm93bkJvdW5kUHJvcGVydGllcy5pbmNsdWRlcyhwcm9wLnRvU3RyaW5nKCkpKSB7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5KHByb3AudG9TdHJpbmcoKSwgdmFsdWUpO1xuXHRcdFx0XHR0YXJnZXRDb250cm9sLl9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzZXRSZXN1bHQgPSBzZXRTdGF0ZU1vZGVsLnNldFByb3BlcnR5KGAvJHtwcm9wLnRvU3RyaW5nKCl9YCwgdmFsdWUpO1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGVEZWJvdW5jZWQocHJvcC50b1N0cmluZygpKTtcblx0XHRcdHJldHVybiBzZXRSZXN1bHQ7XG5cdFx0fVxuXHR9KTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldENvbnRyb2wsIHN0YXRlUHJvcGVydHlOYW1lLCB7XG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHByb3h5O1xuXHRcdH0sXG5cdFx0c2V0KHZhbHVlKSB7XG5cdFx0XHQvLyBSZXBsYWNpbmcgdGhlIGNvbXBsZXRlIHN0YXRlXG5cdFx0XHRzdGF0ZU1vZGVsLnNldFByb3BlcnR5KGAvYCwgdmFsdWUpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBwcm94eTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVN0YXRlUHJvcGVydHkoXG5cdG9iajogVUk1Q29udHJvbERlZmluaXRpb24sXG5cdHRhcmdldENvbnRyb2w6IENvbnRyb2wgJiB7XG5cdFx0W2JvdW5kUHJvcGVydGllc106IHN0cmluZ1tdO1xuXHRcdF9fc3RhdGVDcmVhdGVkOiBib29sZWFuO1xuXHRcdF9fc3RhdGVOYW1lOiBzdHJpbmc7XG5cdFx0X3VwZGF0ZVN0YXRlOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVEZWJvdW5jZWQ6IEZ1bmN0aW9uO1xuXHRcdF9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZVRpbWVyOiB1bmtub3duO1xuXHRcdF9jaGFuZ2VkUHJvcHM/OiBzdHJpbmdbXTtcblx0fVxuKTogdm9pZCB7XG5cdGlmIChvYmoubWV0YWRhdGE/LnN0YXRlUHJvcGVydHkgfHwgdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdKSB7XG5cdFx0bGV0IHVwZGF0aW5nU3RhdGUgPSBmYWxzZTtcblx0XHRjb25zdCBib3VuZFRvU3RhdGVQcm9wczogc3RyaW5nW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBvYmoubWV0YWRhdGE/LnByb3BlcnRpZXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5RGVmID0gb2JqLm1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdGlmIChwcm9wZXJ0eURlZi5iaW5kVG9TdGF0ZSkge1xuXHRcdFx0XHRib3VuZFRvU3RhdGVQcm9wcy5wdXNoKHByb3BlcnR5TmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGFzIHdlIG1heSBoYXZlIGJvdW5kIHByb3BlcnRpZXMgaW4gcGFyZW50IGNsYXNzZXMgYW5kIHN1YmNsYXNzZXMsIHdlIGtlZXAgdHJhY2sgb2YgdGhvc2UgaW4gdGhlIG1vZGVsIGl0c2VsZlxuXHRcdHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSA/Pz0gW107XG5cdFx0dGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdID0gWy4uLnRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSwgLi4uYm91bmRUb1N0YXRlUHJvcHNdO1xuXG5cdFx0aWYgKG9iai5tZXRhZGF0YT8uc3RhdGVQcm9wZXJ0eSkge1xuXHRcdFx0Ly8gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gZm9yY2UgdGhlIHN0YXRlIHRvIGJlIGFwcGxpZWQgYW5kIHdhaXQgZm9yIGl0IHRvIGJlIGFwcGxpZWQgaW4gdGVzdHNcblx0XHRcdHRhcmdldENvbnRyb2wuX3VwZGF0ZVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5fdXBkYXRlU3RhdGVUaW1lcjtcblx0XHRcdFx0aWYgKCF1cGRhdGluZ1N0YXRlKSB7XG5cdFx0XHRcdFx0dXBkYXRpbmdTdGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0YXdhaXQgKHRoaXMgYXMgeyBvblN0YXRlQ2hhbmdlPzogRnVuY3Rpb24gfSkub25TdGF0ZUNoYW5nZT8uKHRoaXMuX2NoYW5nZWRQcm9wcyk7XG5cdFx0XHRcdFx0dGhpcy5fY2hhbmdlZFByb3BzID0gW107XG5cdFx0XHRcdFx0dXBkYXRpbmdTdGF0ZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGVEZWJvdW5jZWQgPSBmdW5jdGlvbiAoY2hhbmdlZFByb3A6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPz89IFtdO1xuXHRcdFx0XHRpZiAoIXRoaXMuX2NoYW5nZWRQcm9wcy5pbmNsdWRlcyhjaGFuZ2VkUHJvcCkpIHtcblx0XHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMucHVzaChjaGFuZ2VkUHJvcCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCF0aGlzLl91cGRhdGVTdGF0ZVRpbWVyICYmICF1cGRhdGluZ1N0YXRlKSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlU3RhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlU3RhdGUoKTtcblx0XHRcdFx0XHR9LCAyMDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3RhdGVQcm9wZXJ0eU5hbWUgPSBvYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eTtcblx0XHRcdHRhcmdldENvbnRyb2wuX19zdGF0ZUNyZWF0ZWQgPSBmYWxzZTtcblx0XHRcdHRhcmdldENvbnRyb2wuX19zdGF0ZU5hbWUgPSBzdGF0ZVByb3BlcnR5TmFtZTtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb250cm9sLCBzdGF0ZVByb3BlcnR5TmFtZSwge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBjcmVhdGVTdGF0ZVByb3h5KHRhcmdldENvbnRyb2wsIHN0YXRlUHJvcGVydHlOYW1lLCB0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10pO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQ6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGNyZWF0ZVN0YXRlUHJveHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSwgdmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZSkge1xuXHRcdFx0XHR0YXJnZXRDb250cm9sW29iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5IGFzIGtleW9mIENvbnRyb2xdID0geyAuLi5vYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZSB9IGFzIG5ldmVyO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZm5BcHBseVNldHRpbmdzID0gdGFyZ2V0Q29udHJvbC5hcHBseVNldHRpbmdzO1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5hcHBseVNldHRpbmdzID0gZnVuY3Rpb24gKG1TZXR0aW5nczogeyBtb2RlbHM/OiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gfSk6IHR5cGVvZiB0YXJnZXRDb250cm9sIHtcblx0XHRcdFx0ZGVsZXRlIG1TZXR0aW5ncz8ubW9kZWxzPy4kY29tcG9uZW50U3RhdGU7XG5cdFx0XHRcdHJldHVybiBmbkFwcGx5U2V0dGluZ3MuY2FsbCh0aGlzLCBtU2V0dGluZ3MpO1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgZm5TZXRQcm9wZXJ0eSA9IHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHk7XG5cdFx0aWYgKHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKHNQcm9wZXJ0eU5hbWU6IHN0cmluZywgb1ZhbHVlOiB1bmtub3duLCBiU3VwcHJlc3NJbnZhbGlkYXRlKTogdHlwZW9mIHRhcmdldENvbnRyb2wge1xuXHRcdFx0XHRpZiAodGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLmluY2x1ZGVzKHNQcm9wZXJ0eU5hbWUpICYmICF0aGlzLl9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLl9fc3RhdGVDcmVhdGVkKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGVTdGF0ZVByb3h5KHRhcmdldENvbnRyb2wsIHRhcmdldENvbnRyb2wuX19zdGF0ZU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCh0aGlzLmdldE1vZGVsKFwiJGNvbXBvbmVudFN0YXRlXCIpIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoYC8ke3NQcm9wZXJ0eU5hbWV9YCwgb1ZhbHVlKTtcblx0XHRcdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChzUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZm5TZXRQcm9wZXJ0eS5jYWxsKHRoaXMsIHNQcm9wZXJ0eU5hbWUsIG9WYWx1ZSwgYlN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEludGVybmFsIGhlYXZ5IGxpZnRpbmcgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBjcmVhdGluZyB0aGUgY2xhc3MgcHJvcGVydHkgZm9yIHVpNSB0byB1c2UuXG4gKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIHByb3RvdHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZVxuICogQHBhcmFtIGluT2JqIFRoZSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBjbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlclVJNU1ldGFkYXRhKGNsYXp6OiBVSTVDb250cm9sQW5kTW9yZSwgbmFtZTogc3RyaW5nLCBpbk9iajogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbik6IEZ1bmN0aW9uIHtcblx0aWYgKGNsYXp6LmdldE1ldGFkYXRhPy4oKS5pc0EoXCJzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvblwiKSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKChvYmpOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbk9iaiwgb2JqTmFtZSk7XG5cdFx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSkuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cblx0aWYgKChjbGF6ej8uZ2V0TWV0YWRhdGEoKSBhcyB1bmtub3duIGFzIHsgZ2V0U3RlcmVvdHlwZTogRnVuY3Rpb24gfSk/LmdldFN0ZXJlb3R5cGUoKSA9PT0gXCJjb250cm9sXCIpIHtcblx0XHRjb25zdCByZW5kZXJlckRlZmluaXRpb24gPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXI7XG5cdFx0b2JqLnJlbmRlcmVyID0geyBhcGlWZXJzaW9uOiAyIH07XG5cdFx0aWYgKHR5cGVvZiByZW5kZXJlckRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9IGVsc2UgaWYgKHJlbmRlcmVyRGVmaW5pdGlvbiAhPSB1bmRlZmluZWQpIHtcblx0XHRcdG9iai5yZW5kZXJlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9XG5cdH1cblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0T2JqZWN0LmtleXMoY2xhenoucHJvdG90eXBlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5ICE9PSBcIm1ldGFkYXRhXCIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvYmoubWV0YWRhdGE/LmNvbnRyb2xsZXJFeHRlbnNpb25zICYmIE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgY0V4dE5hbWUgaW4gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKSB7XG5cdFx0XHRvYmpbY0V4dE5hbWVdID0gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW2NFeHROYW1lXTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0cHV0ID0gY2xhenouZXh0ZW5kKG5hbWUsIG9iaikgYXMgdHlwZW9mIENvbnRyb2wgJiBGdW5jdGlvbjtcblx0Y29uc3QgZm5Jbml0ID0gb3V0cHV0LnByb3RvdHlwZS5pbml0O1xuXHRjb25zdCBmbkFmdGVySW5pdCA9IG91dHB1dC5wcm90b3R5cGUuYWZ0ZXJJbml0O1xuXHRvdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0aWYgKGZuSW5pdCkge1xuXHRcdFx0Zm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0XHRpZiAoY2xhenoucmVnaXN0ZXJJbnN0YW5jZSkge1xuXHRcdFx0Y2xhenoucmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdC8vIElmIGEgdmFsdWUgd2FzIHNldCBpbiBgaW5pdGAgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgc2V0IGluIHRoZSB2YWx1ZSBpbiB0aGUgZW5kXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5RGVmYXVsdCA9IHRoaXNbcHJvcGVydHlLZXldID8/IHByb3BlcnR5RGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllcyA/Pz0ge307XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gdjtcblx0XHRcdFx0XHRcdFx0dGhpcy5tUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgY2FzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcm9wZXJ0eSBmaXJzdCBhbmQgbm90IGp1c3QgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHQvLyBEdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uLCBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHdpdGggYSBub24gYmluZGluZyB2YWx1ZSwgc2V0UHJvcGVydHkgaXMgY2FsbGVkIGFuZCBub3QgYmluZFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ1Byb3BlcnR5VmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgd2UgdXBkYXRlIHRoZSBfYmluZGluZ1Byb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgJiYgcHJvcGVydHlWYWx1ZSAhPT0gYmluZGluZ1Byb3BlcnR5VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BWYWx1ZSA9IHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XTtcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyAuLi5wcm9wVmFsdWUgfTsgLy8gQ3JlYXRlIHNoYWxsb3cgY29weVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm9wVmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmYXVsdCAhPT0gdW5kZWZpbmVkICYmIHRoaXNbcHJvcGVydHlLZXldICE9PSBwcm9wZXJ0eURlZmF1bHQpIHtcblx0XHRcdFx0XHQvLyBkb24ndCBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgdmFsdWUgaWYgaXQncyBhbHJlYWR5IHRoZXJlXG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpc1twcm9wZXJ0eUtleV0gPSBwcm9wZXJ0eURlZmF1bHQ7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9hcHBseWluZ1NldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBZ2dyZWdhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zKTtcblx0XHRcdGFBZ2dyZWdhdGlvbktleXMuZm9yRWFjaCgoYWdncmVnYXRpb25LZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25EZWYgPSBvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zW2FnZ3JlZ2F0aW9uS2V5XTtcblx0XHRcdFx0Y29uc3QgZGVmYXVsdFZhbHVlID0gdGhpc1thZ2dyZWdhdGlvbktleV0gPz8gYWdncmVnYXRpb25EZWYuZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgYWdncmVnYXRpb25LZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5KTtcblx0XHRcdFx0XHRcdGlmIChvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zW2FnZ3JlZ2F0aW9uS2V5XS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50IHx8IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoZGVmYXVsdFZhbHVlICYmIChkZWZhdWx0VmFsdWUgYXMgVUk1RWxlbWVudCk/LmlzQSkge1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXNbYWdncmVnYXRpb25LZXldID0gZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSBmYWxzZTtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5fYXBwbHlpbmdTZXR0aW5ncztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBhQXNzb2NpYXRpb25LZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmFzc29jaWF0aW9ucyk7XG5cdFx0XHRhQXNzb2NpYXRpb25LZXlzLmZvckVhY2goKGFzc29jaWF0aW9uS2V5KSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBhc3NvY2lhdGlvbktleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QXNzb2NpYXRpb24oYXNzb2NpYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hc3NvY2lhdGlvbnNbYXNzb2NpYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5yZWZlcmVuY2VzKSB7XG5cdFx0XHRjb25zdCByZWZlcmVuY2VQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLnJlZmVyZW5jZXMpO1xuXHRcdFx0cmVmZXJlbmNlUHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IGNyZWF0ZVJlZmVyZW5jZSgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChvYmoubWV0YWRhdGEubWV0aG9kcykge1xuXHRcdFx0Zm9yIChjb25zdCBtZXRob2ROYW1lIGluIG9iai5tZXRhZGF0YS5tZXRob2RzKSB7XG5cdFx0XHRcdGNvbnN0IG1ldGhvZERlZmluaXRpb24gPSBvYmoubWV0YWRhdGEubWV0aG9kc1ttZXRob2ROYW1lXTtcblx0XHRcdFx0aWYgKG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQWZ0ZXJBc3luY1wiIHx8IG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQmVmb3JlQXN5bmNcIikge1xuXHRcdFx0XHRcdGlmICghdGhpcy5tZXRob2RIb2xkZXIpIHtcblx0XHRcdFx0XHRcdHRoaXMubWV0aG9kSG9sZGVyID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdID0gW3RoaXNbbWV0aG9kTmFtZV1dO1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBtZXRob2ROYW1lLCB7XG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRzZXQ6ICh2OiBGdW5jdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV0ucHVzaCh2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFzeW5jICguLi5tZXRob2RBcmdzOiB1bmtub3duW10pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtZXRob2RBcnJheXMgPSB0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAobWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtZXRob2RBcnJheXMucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGFyZyBvZiBtZXRob2RBcnJheXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGF3YWl0IGFyZy5hcHBseSh0aGlzLCBtZXRob2RBcmdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0X2NyZWF0ZVN0YXRlUHJvcGVydHkob2JqLCB0aGlzKTtcblx0XHRpZiAoZm5BZnRlckluaXQpIHtcblx0XHRcdGZuQWZ0ZXJJbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0fTtcblxuXHRjbGF6ei5vdmVycmlkZSA9IGZ1bmN0aW9uIChvRXh0ZW5zaW9uOiB1bmtub3duKTogRnVuY3Rpb24ge1xuXHRcdGNvbnN0IHBvbCA9IHt9O1xuXHRcdChwb2wgYXMgRnVuY3Rpb24pLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IEZ1bmN0aW9uIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9O1xuXHRcdGNvbnN0IG9DbGFzcyA9IChNZXRhZGF0YSBhcyB1bmtub3duIGFzIHsgY3JlYXRlQ2xhc3M6IEZ1bmN0aW9uIH0pLmNyZWF0ZUNsYXNzKFxuXHRcdFx0Y2xhenosXG5cdFx0XHRgYW5vbnltb3VzRXh0ZW5zaW9ufiR7dWlkKCl9YCxcblx0XHRcdHBvbCxcblx0XHRcdENvbnRyb2xsZXJNZXRhZGF0YVxuXHRcdCk7XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX3N0YXRpY092ZXJyaWRlID0gb0V4dGVuc2lvbjtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fb3ZlcnJpZGUgPSAoY2xhenouZ2V0TWV0YWRhdGEoKSBhcyB7IF9vdmVycmlkZT86IHVua25vd24gfSkuX292ZXJyaWRlO1xuXHRcdHJldHVybiBvQ2xhc3M7XG5cdH07XG5cblx0T2JqZWN0UGF0aC5zZXQobmFtZSwgb3V0cHV0KTtcblxuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBZ0pBLE1BQU1BLGNBQWMsR0FBRyxTQUFBQSxDQUFVQyxNQUFzRCxFQUFnQztJQUN0SEEsTUFBTSxDQUFDQyxRQUFRLEdBQUdDLEtBQUssQ0FDdEI7TUFDQ0Msb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO01BQ3hCQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQ2RDLFlBQVksRUFBRSxDQUFDLENBQUM7TUFDaEJDLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDZEMsWUFBWSxFQUFFLENB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
|
|
818
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJyZWZlcmVuY2VzIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJwcmVwYXJlR2V0QVBJRnVuY3Rpb24iLCJvRXZlbnQiLCJhcGlGUU4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvU291cmNlIiwiZ2V0U291cmNlIiwiX2dldEFQSUV4dGVuc2lvbiIsImlzQSIsImdldFBhcmVudCIsImlzRGVwZW5kZW50Qm91bmQiLCJvRGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJoYXNDb3JyZWN0RGVwZW5kZW50IiwiZmluZCIsIm9EZXBlbmRlbnQiLCJvU291cmNlTWFwIiwiaW5zdGFuY2VNYXAiLCJnZXQiLCJ0YXJnZXRDb250cm9sIiwiZW5zdXJlR2V0QVBJIiwiX19hcGlSZWdpc3RlcmVkIiwiV2Vha01hcCIsInJlZ2lzdGVySW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjb25zdHJ1Y3RvciIsInNldCIsInB1c2giLCJnZXRBUEkiLCJkZWZpbmVTdGF0ZSIsInByb3BlcnR5S2V5IiwicHJvcGVydHlEZXNjcmlwdG9yIiwic3RhdGVQcm9wZXJ0eSIsIkVycm9yIiwid3JpdGFibGUiLCJzdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIiwiaW5pdGlhbGl6ZXIiLCJfZXhwb3J0cyIsIm1ldGhvZE92ZXJyaWRlIiwiZXh0ZW5zaW9uTmFtZSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiZGVzY3JpcHRvciIsImhvb2thYmxlIiwicHVibGljRXh0ZW5zaW9uIiwiZW51bWVyYWJsZSIsInB1YmxpYyIsInByaXZhdGVFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImZpbmFsIiwidXNpbmdFeHRlbnNpb24iLCJleHRlbnNpb25DbGFzcyIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJncm91cCIsImRlZmF1bHRWYWx1ZSIsImFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25EZWZpbml0aW9uIiwibXVsdGlwbGUiLCJpc0RlZmF1bHQiLCJkZWZhdWx0QWdncmVnYXRpb24iLCJhc3NvY2lhdGlvbiIsInVpNUFzc29jaWF0aW9uTWV0YWRhdGEiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJpbnRlcmZhY2VOYW1lIiwieG1sRXZlbnRIYW5kbGVyIiwicHJvcGVydHlrZXkiLCJjdXJyZW50Q29uc3RydWN0b3IiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImRlZmluZVVJNUNsYXNzIiwic1RhcmdldCIsIm1ldGFkYXRhRGVmaW5pdGlvbiIsInByb3RvdHlwZSIsImtleSIsImlzQXJyYXkiLCJjb25jYXQiLCJyZWdpc3RlclVJNU1ldGFkYXRhIiwibWl4aW4iLCJpbnRlcmZhY2VDbGFzcyIsImJhc2VDdG9yIiwiZXh0ZW5kIiwiaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgiLCJfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzIiwiT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJwcm9wYWdhdGVIb29rRnJvbU1peGluIiwic2V0dXBNaXhpbiIsImNyZWF0ZVJlZmVyZW5jZSIsImN1cnJlbnQiLCJzZXRDdXJyZW50Iiwib0NvbnRyb2xJbnN0YW5jZSIsImRlZmluZVJlZmVyZW5jZSIsIkJhc2VPYmplY3QiLCJpc09iamVjdEEiLCJiYXNlQ2xhc3NNZXRhZGF0YSIsImludGVyZmFjZUNsYXNzUHJvdG90eXBlIiwiZ2V0SW50ZXJmYWNlTmFtZSIsImdldE93blByb3BlcnR5TmFtZXMiLCJmb3JFYWNoIiwibmFtZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiY3JlYXRlIiwiX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5IiwianNvbk1vZGVsIiwicHJvcCIsInBhdGhJbk1vZGVsIiwib09iaiIsImRlZXBDbG9uZSIsImdldE9iamVjdCIsIm9UYXJnZXQiLCJtb2RlbCIsIlByb3h5IiwicCIsInJlY2VpdmVyIiwicmVmIiwiUmVmbGVjdCIsImJpbmQiLCJpc05hTiIsIk51bWJlciIsIl9fYmluZGluZ0luZm8iLCJwYXRoIiwiYm91bmRQcm9wZXJ0aWVzIiwiU3ltYm9sIiwiY3JlYXRlU3RhdGVQcm94eSIsInN0YXRlUHJvcGVydHlOYW1lIiwiYm91bmRUb1N0YXRlUHJvcHMiLCJpbml0aWFsRGF0YSIsInNldE1vZGVsIiwiSlNPTk1vZGVsIiwic3RhdGVNb2RlbCIsImdldE1vZGVsIiwiYXR0YWNoUHJvcGVydHlDaGFuZ2UiLCJldnQiLCJnZXRQYXJhbWV0ZXIiLCJzdWJzdHJpbmciLCJpbmNsdWRlcyIsInNldFByb3BlcnR5IiwiX19zdGF0ZUNyZWF0ZWQiLCJwcm94eSIsInNldFN0YXRlTW9kZWwiLCJ2YWx1ZSIsImtub3duQm91bmRQcm9wZXJ0aWVzIiwiX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUiLCJzZXRSZXN1bHQiLCJfdXBkYXRlU3RhdGVEZWJvdW5jZWQiLCJjb25maWd1cmFibGUiLCJfY3JlYXRlU3RhdGVQcm9wZXJ0eSIsIm9iaiIsInVwZGF0aW5nU3RhdGUiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eURlZiIsImJpbmRUb1N0YXRlIiwiX3VwZGF0ZVN0YXRlIiwiX3VwZGF0ZVN0YXRlVGltZXIiLCJvblN0YXRlQ2hhbmdlIiwiX2NoYW5nZWRQcm9wcyIsImNoYW5nZWRQcm9wIiwic2V0VGltZW91dCIsIl9fc3RhdGVOYW1lIiwiZm5BcHBseVNldHRpbmdzIiwiYXBwbHlTZXR0aW5ncyIsIm1TZXR0aW5ncyIsIm1vZGVscyIsIiRjb21wb25lbnRTdGF0ZSIsImNhbGwiLCJmblNldFByb3BlcnR5Iiwic1Byb3BlcnR5TmFtZSIsIm9WYWx1ZSIsImJTdXBwcmVzc0ludmFsaWRhdGUiLCJjbGF6eiIsImluT2JqIiwib2JqTmFtZSIsImJhc2VUeXBlIiwiZ2V0U3RlcmVvdHlwZSIsInJlbmRlcmVyRGVmaW5pdGlvbiIsInJlbmRlcmVyIiwicmVuZGVyIiwiYXBpVmVyc2lvbiIsImtleXMiLCJlIiwiY0V4dE5hbWUiLCJvdXRwdXQiLCJmbkluaXQiLCJpbml0IiwiZm5BZnRlckluaXQiLCJhZnRlckluaXQiLCJfdGhpcyIsIl9sZW4yIiwiX2tleTIiLCJhcHBseSIsImFQcm9wZXJ0eUtleXMiLCJwcm9wZXJ0eURlZmF1bHQiLCJfYmluZGluZ1Byb3BlcnRpZXMiLCJ2IiwibVByb3BlcnRpZXMiLCJwcm9wZXJ0eVZhbHVlIiwiZ2V0UHJvcGVydHkiLCJiaW5kaW5nUHJvcGVydHlWYWx1ZSIsInByb3BWYWx1ZSIsIl9hcHBseWluZ1NldHRpbmdzIiwiYUFnZ3JlZ2F0aW9uS2V5cyIsImFnZ3JlZ2F0aW9uS2V5IiwiYWdncmVnYXRpb25EZWYiLCJzZXRBZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0aW9uQ29udGVudCIsImdldEFnZ3JlZ2F0aW9uIiwiYUFzc29jaWF0aW9uS2V5cyIsImFzc29jaWF0aW9uS2V5Iiwic2V0QXNzb2NpYXRpb24iLCJnZXRBc3NvY2lhdGlvbiIsInJlZmVyZW5jZVByb3BlcnRpZXMiLCJtZXRob2ROYW1lIiwibWV0aG9kRGVmaW5pdGlvbiIsIm1ldGhvZEhvbGRlciIsIm1ldGhvZEFycmF5cyIsInJldmVyc2UiLCJfbGVuMyIsIm1ldGhvZEFyZ3MiLCJfa2V5MyIsImFyZyIsIm9FeHRlbnNpb24iLCJwb2wiLCJfbGVuNCIsIl9rZXk0Iiwib0NsYXNzIiwiTWV0YWRhdGEiLCJjcmVhdGVDbGFzcyIsInVpZCIsIkNvbnRyb2xsZXJNZXRhZGF0YSIsIl9zdGF0aWNPdmVycmlkZSIsIl9vdmVycmlkZSIsIk9iamVjdFBhdGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IHsgaG9va2FibGUsIHByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01ldGFkYXRhXCI7XG5pbXBvcnQgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBDb250cm9sbGVyTWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyTWV0YWRhdGFcIjtcbmltcG9ydCB0eXBlIE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1vZGVsJFByb3BlcnR5Q2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcblxudHlwZSBPdmVycmlkZURlZmluaXRpb24gPSBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj47XG50eXBlIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uID0ge1xuXHRvdmVycmlkZUV4ZWN1dGlvbj86IE92ZXJyaWRlRXhlY3V0aW9uO1xuXHRwdWJsaWM/OiBib29sZWFuO1xuXHRmaW5hbD86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgTm9uQWJzdHJhY3RDbGFzczxUPiA9IFBpY2s8VCwga2V5b2YgVD4gJiAobmV3ICguLi5hcmdzOiB1bmtub3duW10pID0+IFQpO1xuXG50eXBlIFVJNVByb3BlcnR5TWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0YmluZGFibGU/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuXHRieVZhbHVlPzogYm9vbGVhbjtcblx0aXNCaW5kaW5nSW5mbz86IGJvb2xlYW47XG5cdGJpbmRUb1N0YXRlPzogYm9vbGVhbjtcblx0ZXhwZWN0ZWRBbm5vdGF0aW9ucz86IHN0cmluZ1tdO1xuXHRleHBlY3RlZFR5cGVzPzogc3RyaW5nW107XG5cdGFsbG93ZWRWYWx1ZXM/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/OiBGdW5jdGlvbjtcblx0XHRyZW5kZXJlcj86IHVua25vd247XG5cdFx0cmVuZGVyOiBGdW5jdGlvbjtcblx0XHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdH07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyBjbGFzcyBzaG91bGQgZGVmaW5lIGEgVUk1IGNvbnRyb2wgb2YgdGhlIHNwZWNpZmllZCBuYW1lLlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBVSTUgY2xhc3NcbiAqIEBwYXJhbSBtZXRhZGF0YURlZmluaXRpb24gSW5saW5lIG1ldGFkYXRhIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIEEgY2xhc3MgZGVjb3JhdG9yIHRoYXQgd2lsbCBjcmVhdGUgYSB1aTUgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVJNUNsYXNzKHNUYXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogUGFydGlhbDxVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0XHRpZiAoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0pIHtcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0uY29uY2F0KFxuXHRcdFx0XHRcdFx0XHRtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSA9IHtcblx0XHRcdFx0XHRcdFx0Li4uY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0sXG5cdFx0XHRcdFx0XHRcdC4uLihtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dIGFzIG9iamVjdClcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleSBhcyBrZXlvZiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVnaXN0ZXJVSTVNZXRhZGF0YShjb25zdHJ1Y3Rvciwgc1RhcmdldCwgY29uc3RydWN0b3IucHJvdG90eXBlKTtcblx0fSBhcyBDbGFzc0RlY29yYXRvcjtcbn1cbnR5cGUgQ29uc3RydWN0b3I8VCA9IHt9PiA9IG5ldyAoLi4uYTogdW5rbm93bltdKSA9PiBUO1xuLyoqXG4gKiBNaXhpbiBhIHNwZWNpZmljIGludGVyZmFjZSBpbmNsdWRpbmcgYWxsIGl0cyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGludG8gdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gaW50ZXJmYWNlQ2xhc3MgSW1wbGVtZW50YXRpb24gY2xhc3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluPFQgZXh0ZW5kcyBJSW50ZXJmYWNlV2l0aE1peGluPihpbnRlcmZhY2VDbGFzczogQ29uc3RydWN0b3I8VD4pOiBDbGFzc0RlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAoYmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlKSB7XG5cdFx0aWYgKGJhc2VDdG9yLnByb3RvdHlwZS5leHRlbmQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBtaXhpbkludGVyZmFjZSBkZWNvcmF0b3IgbXVzdCBiZSBwbGFjZWQgYWZ0ZXIgYGRlZmluZVVpNUNsYXNzYFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YShiYXNlQ3Rvci5wcm90b3R5cGUpO1xuXG5cdFx0bGV0IGludGVyZmFjZVByb3RvVHlwZVRvTWl4ID0gaW50ZXJmYWNlQ2xhc3MucHJvdG90eXBlO1xuXHRcdHdoaWxlIChpbnRlcmZhY2VQcm90b1R5cGVUb01peCkge1xuXHRcdFx0YmFzZUN0b3IgPSBfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzKGJhc2VDdG9yLCBtZXRhZGF0YSwgaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgpO1xuXHRcdFx0aW50ZXJmYWNlUHJvdG9UeXBlVG9NaXggPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgpO1xuXHRcdH1cblx0XHRwcm9wYWdhdGVIb29rRnJvbU1peGluKGJhc2VDdG9yLCBpbnRlcmZhY2VDbGFzcyk7XG5cblx0XHQvLyBIb29rIHRvIGFkZCBwb3RlbnRpYWxseSBtb3JlIGxvZ2ljIHRvIHRoZSBtaXhpblxuXHRcdGludGVyZmFjZUNsYXNzLnByb3RvdHlwZS5zZXR1cE1peGluPy4oYmFzZUN0b3IpO1xuXHRcdHJldHVybiBiYXNlQ3Rvcjtcblx0fSBhcyBDbGFzc0RlY29yYXRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluIHtcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVjZWl2aW5nIGNvbnRyb2wuXG5cdCAqIElmIG5vdCBkZWZpbmVkLCB0aGUgaW50ZXJmYWNlIHdpbGwgbm90IGJlIGFkZGVkLlxuXHQgKiBAcmV0dXJucyBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlXG5cdCAqL1xuXHRnZXRJbnRlcmZhY2VOYW1lPygpOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gYWRkIG1vcmUgbG9naWMgdG8gdGhlIG1peGluLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRyb2xzIGFyZSBjcmVhdGVkIGFuZCBjYW4gYmUgdXNlZCB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGxvZ2ljIHRvIHRoZSBiYXNlIGNsYXNzLlxuXHQgKiBAcGFyYW0gYmFzZUNsYXNzIFRoZSBiYXNlIGNsYXNzIHRoYXQgd2lsbCBiZSBleHRlbmRlZFxuXHQgKi9cblx0c2V0dXBNaXhpbj8oYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWZlcmVuY2U8VCBleHRlbmRzIFVJNUVsZW1lbnQ+KCk6IFJlZjxUPiB7XG5cdHJldHVybiB7XG5cdFx0Y3VycmVudDogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVCxcblx0XHRzZXRDdXJyZW50OiBmdW5jdGlvbiAob0NvbnRyb2xJbnN0YW5jZTogVCk6IHZvaWQge1xuXHRcdFx0dGhpcy5jdXJyZW50ID0gb0NvbnRyb2xJbnN0YW5jZTtcblx0XHR9XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgZm9sbG93aW5nIG9iamVjdCB3aWxsIGhvbGQgYSByZWZlcmVuY2UgdG8gYSBjb250cm9sIHRocm91Z2gganN4IHRlbXBsYXRpbmcuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVmZXJlbmNlKCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKEJhc2VPYmplY3QuaXNPYmplY3RBKHRhcmdldCwgXCJzYXAudWkuY29yZS5Db250cm9sXCIpKSB7XG5cdFx0XHRpZiAoIW1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRcdG1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0KHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplciA9IGNyZWF0ZVJlZmVyZW5jZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLjtcbn1cblxuZnVuY3Rpb24gX2FkZEludGVyZmFjZVByb3RvVHlwZXNUb0Jhc2VDbGFzcyhcblx0YmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlLFxuXHRiYXNlQ2xhc3NNZXRhZGF0YTogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbixcblx0aW50ZXJmYWNlQ2xhc3NQcm90b3R5cGU6IEZ1bmN0aW9uW1wicHJvdG90eXBlXCJdXG4pOiBVSTVDb250cm9sQW5kTW9yZSB7XG5cdGNvbnN0IGludGVyZmFjZU5hbWUgPSBpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZT8uZ2V0SW50ZXJmYWNlTmFtZT8uKCk7XG5cdGlmIChpbnRlcmZhY2VOYW1lKSB7XG5cdFx0YmFzZUNsYXNzTWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHR9XG5cblx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUpLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRpZiAobmFtZSAhPT0gXCJjb25zdHJ1Y3RvclwiICYmIG5hbWUgIT09IFwic2V0dXBNaXhpblwiICYmIG5hbWUgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0aWYgKCFiYXNlQ3Rvci5wcm90b3R5cGVbbmFtZV0pIHtcblx0XHRcdFx0Ly8gVGhlIGJhc2UgY2xhc3MgXCJ3aW5zXCIgb3ZlciB0aGUgbWl4aW5cblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRcdGJhc2VDdG9yLnByb3RvdHlwZSxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUsIG5hbWUpIHx8IE9iamVjdC5jcmVhdGUobnVsbClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0YmFzZUN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0gbWVyZ2UoYmFzZUN0b3IucHJvdG90eXBlLm1ldGFkYXRhLCBpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZS5tZXRhZGF0YSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJhc2VDdG9yO1xufVxuXG5mdW5jdGlvbiBfZ2V0SGFuZGxlckZvclN0YXRlUHJvcGVydHkoanNvbk1vZGVsOiBKU09OTW9kZWwsIHByb3A6IHN0cmluZyk6IHVua25vd24ge1xuXHRjb25zdCBwYXRoSW5Nb2RlbCA9IGAvJHtwcm9wLnRvU3RyaW5nKCl9YDtcblx0Y29uc3Qgb09iaiA9IGRlZXBDbG9uZShqc29uTW9kZWwuZ2V0T2JqZWN0KHBhdGhJbk1vZGVsKSk7XG5cdGxldCBvVGFyZ2V0O1xuXHRpZiAocHJvcCA9PT0gXCJfX2JpbmRpbmdJbmZvXCIpIHtcblx0XHRyZXR1cm4geyBtb2RlbDogXCIkY29tcG9uZW50U3RhdGVcIiB9O1xuXHR9XG5cdGlmICh0eXBlb2Ygb09iaiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdG9UYXJnZXQgPSBvT2JqO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvT2JqID09PSBcIm51bWJlclwiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9PYmogPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvT2JqKSkge1xuXHRcdG9UYXJnZXQgPSBuZXcgUHJveHkob09iaiwge1xuXHRcdFx0Z2V0KHRhcmdldDogdW5rbm93bltdLCBwOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiB1bmtub3duW10pOiB1bmtub3duIHtcblx0XHRcdFx0Y29uc3QgcmVmID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwLCByZWNlaXZlcik7XG5cdFx0XHRcdGlmICh0eXBlb2YgcmVmID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVmLmJpbmQodGFyZ2V0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWYgPT09IHVuZGVmaW5lZCAmJiBpc05hTihOdW1iZXIocC50b1N0cmluZygpKSkpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0X19iaW5kaW5nSW5mbzoge1xuXHRcdFx0XHRcdFx0XHRtb2RlbDogXCIkY29tcG9uZW50U3RhdGVcIixcblx0XHRcdFx0XHRcdFx0cGF0aDogcFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlZjtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvVGFyZ2V0ID0geyAuLi5vT2JqIH07XG5cdH1cblx0aWYgKHR5cGVvZiBvVGFyZ2V0ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0b1RhcmdldC5fX2JpbmRpbmdJbmZvID0ge1xuXHRcdFx0bW9kZWw6IFwiJGNvbXBvbmVudFN0YXRlXCIsXG5cdFx0XHRwYXRoOiBwYXRoSW5Nb2RlbFxuXHRcdH07XG5cdH1cblx0cmV0dXJuIG9UYXJnZXQ7XG59XG5jb25zdCBib3VuZFByb3BlcnRpZXMgPSBTeW1ib2woXCJib3VuZFByb3BlcnRpZXNcIik7XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlUHJveHkoXG5cdHRhcmdldENvbnRyb2w6IENvbnRyb2wgJiB7XG5cdFx0W2JvdW5kUHJvcGVydGllc106IHN0cmluZ1tdO1xuXHRcdF9fc3RhdGVDcmVhdGVkOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZTogRnVuY3Rpb247XG5cdFx0X3VwZGF0ZVN0YXRlRGVib3VuY2VkOiBGdW5jdGlvbjtcblx0XHRfaWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZTogYm9vbGVhbjtcblx0XHRfdXBkYXRlU3RhdGVUaW1lcjogdW5rbm93bjtcblx0XHRfY2hhbmdlZFByb3BzPzogc3RyaW5nW107XG5cdH0sXG5cdHN0YXRlUHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdGJvdW5kVG9TdGF0ZVByb3BzOiBzdHJpbmdbXSxcblx0aW5pdGlhbERhdGE/OiBvYmplY3Rcbik6IEpTT05Nb2RlbCB7XG5cdC8vIExhenkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0YXRlIHByb3BlcnR5XG5cdHRhcmdldENvbnRyb2wuc2V0TW9kZWwobmV3IEpTT05Nb2RlbChpbml0aWFsRGF0YSksIFwiJGNvbXBvbmVudFN0YXRlXCIpO1xuXHRjb25zdCBzdGF0ZU1vZGVsID0gdGFyZ2V0Q29udHJvbC5nZXRNb2RlbChcIiRjb21wb25lbnRTdGF0ZVwiKSBhcyBKU09OTW9kZWw7XG5cdHN0YXRlTW9kZWwuYXR0YWNoUHJvcGVydHlDaGFuZ2UoKGV2dDogTW9kZWwkUHJvcGVydHlDaGFuZ2VFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldnQuZ2V0UGFyYW1ldGVyKFwicGF0aFwiKT8uc3Vic3RyaW5nKDEpOyAvLyB0byByZW1vdmUgdGhlIGZpcnN0IC9cblx0XHRpZiAocGF0aCAmJiBib3VuZFRvU3RhdGVQcm9wcy5pbmNsdWRlcyhwYXRoKSkge1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5zZXRQcm9wZXJ0eShwYXRoLCBldnQuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIikpO1xuXHRcdH1cblx0fSk7XG5cdHRhcmdldENvbnRyb2wuX19zdGF0ZUNyZWF0ZWQgPSB0cnVlO1xuXHRjb25zdCBwcm94eSA9IG5ldyBQcm94eShzdGF0ZU1vZGVsLCB7XG5cdFx0Z2V0OiAodGFyZ2V0OiBKU09OTW9kZWwsIHByb3A6IHN0cmluZyk6IHVua25vd24gPT4ge1xuXHRcdFx0cmV0dXJuIF9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eSh0YXJnZXQsIHByb3ApO1xuXHRcdH0sXG5cdFx0c2V0OiAoc2V0U3RhdGVNb2RlbDogSlNPTk1vZGVsLCBwcm9wLCB2YWx1ZSk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0Ly8gd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIGtub3duIGJvdW5kIHByb3BlcnR5IGluIGFueSBvZiB0aGUgcmVsYXRlZCBjbGFzc2VzXG5cdFx0XHRjb25zdCBrbm93bkJvdW5kUHJvcGVydGllcyA9IHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXTtcblx0XHRcdGlmIChrbm93bkJvdW5kUHJvcGVydGllcy5pbmNsdWRlcyhwcm9wLnRvU3RyaW5nKCkpKSB7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5KHByb3AudG9TdHJpbmcoKSwgdmFsdWUpO1xuXHRcdFx0XHR0YXJnZXRDb250cm9sLl9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzZXRSZXN1bHQgPSBzZXRTdGF0ZU1vZGVsLnNldFByb3BlcnR5KGAvJHtwcm9wLnRvU3RyaW5nKCl9YCwgdmFsdWUpO1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGVEZWJvdW5jZWQocHJvcC50b1N0cmluZygpKTtcblx0XHRcdHJldHVybiBzZXRSZXN1bHQ7XG5cdFx0fVxuXHR9KTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldENvbnRyb2wsIHN0YXRlUHJvcGVydHlOYW1lLCB7XG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHByb3h5O1xuXHRcdH0sXG5cdFx0c2V0KHZhbHVlKSB7XG5cdFx0XHQvLyBSZXBsYWNpbmcgdGhlIGNvbXBsZXRlIHN0YXRlXG5cdFx0XHRzdGF0ZU1vZGVsLnNldFByb3BlcnR5KGAvYCwgdmFsdWUpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBwcm94eTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVN0YXRlUHJvcGVydHkoXG5cdG9iajogVUk1Q29udHJvbERlZmluaXRpb24sXG5cdHRhcmdldENvbnRyb2w6IENvbnRyb2wgJiB7XG5cdFx0W2JvdW5kUHJvcGVydGllc106IHN0cmluZ1tdO1xuXHRcdF9fc3RhdGVDcmVhdGVkOiBib29sZWFuO1xuXHRcdF9fc3RhdGVOYW1lOiBzdHJpbmc7XG5cdFx0X3VwZGF0ZVN0YXRlOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVEZWJvdW5jZWQ6IEZ1bmN0aW9uO1xuXHRcdF9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZVRpbWVyOiB1bmtub3duO1xuXHRcdF9jaGFuZ2VkUHJvcHM/OiBzdHJpbmdbXTtcblx0fVxuKTogdm9pZCB7XG5cdGlmIChvYmoubWV0YWRhdGE/LnN0YXRlUHJvcGVydHkgfHwgdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdKSB7XG5cdFx0bGV0IHVwZGF0aW5nU3RhdGUgPSBmYWxzZTtcblx0XHRjb25zdCBib3VuZFRvU3RhdGVQcm9wczogc3RyaW5nW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBvYmoubWV0YWRhdGE/LnByb3BlcnRpZXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5RGVmID0gb2JqLm1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdGlmIChwcm9wZXJ0eURlZi5iaW5kVG9TdGF0ZSkge1xuXHRcdFx0XHRib3VuZFRvU3RhdGVQcm9wcy5wdXNoKHByb3BlcnR5TmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGFzIHdlIG1heSBoYXZlIGJvdW5kIHByb3BlcnRpZXMgaW4gcGFyZW50IGNsYXNzZXMgYW5kIHN1YmNsYXNzZXMsIHdlIGtlZXAgdHJhY2sgb2YgdGhvc2UgaW4gdGhlIG1vZGVsIGl0c2VsZlxuXHRcdHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSA/Pz0gW107XG5cdFx0dGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdID0gWy4uLnRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSwgLi4uYm91bmRUb1N0YXRlUHJvcHNdO1xuXG5cdFx0aWYgKG9iai5tZXRhZGF0YT8uc3RhdGVQcm9wZXJ0eSkge1xuXHRcdFx0Ly8gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gZm9yY2UgdGhlIHN0YXRlIHRvIGJlIGFwcGxpZWQgYW5kIHdhaXQgZm9yIGl0IHRvIGJlIGFwcGxpZWQgaW4gdGVzdHNcblx0XHRcdHRhcmdldENvbnRyb2wuX3VwZGF0ZVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5fdXBkYXRlU3RhdGVUaW1lcjtcblx0XHRcdFx0aWYgKCF1cGRhdGluZ1N0YXRlKSB7XG5cdFx0XHRcdFx0dXBkYXRpbmdTdGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0YXdhaXQgKHRoaXMgYXMgeyBvblN0YXRlQ2hhbmdlPzogRnVuY3Rpb24gfSkub25TdGF0ZUNoYW5nZT8uKHRoaXMuX2NoYW5nZWRQcm9wcyk7XG5cdFx0XHRcdFx0dGhpcy5fY2hhbmdlZFByb3BzID0gW107XG5cdFx0XHRcdFx0dXBkYXRpbmdTdGF0ZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGVEZWJvdW5jZWQgPSBmdW5jdGlvbiAoY2hhbmdlZFByb3A6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPz89IFtdO1xuXHRcdFx0XHRpZiAoIXRoaXMuX2NoYW5nZWRQcm9wcy5pbmNsdWRlcyhjaGFuZ2VkUHJvcCkpIHtcblx0XHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMucHVzaChjaGFuZ2VkUHJvcCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCF0aGlzLl91cGRhdGVTdGF0ZVRpbWVyICYmICF1cGRhdGluZ1N0YXRlKSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlU3RhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlU3RhdGUoKTtcblx0XHRcdFx0XHR9LCAyMDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3RhdGVQcm9wZXJ0eU5hbWUgPSBvYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eTtcblx0XHRcdHRhcmdldENvbnRyb2wuX19zdGF0ZUNyZWF0ZWQgPSBmYWxzZTtcblx0XHRcdHRhcmdldENvbnRyb2wuX19zdGF0ZU5hbWUgPSBzdGF0ZVByb3BlcnR5TmFtZTtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb250cm9sLCBzdGF0ZVByb3BlcnR5TmFtZSwge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBjcmVhdGVTdGF0ZVByb3h5KHRhcmdldENvbnRyb2wsIHN0YXRlUHJvcGVydHlOYW1lLCB0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10pO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQ6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGNyZWF0ZVN0YXRlUHJveHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSwgdmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZSkge1xuXHRcdFx0XHR0YXJnZXRDb250cm9sW29iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5IGFzIGtleW9mIENvbnRyb2xdID0geyAuLi5vYmoubWV0YWRhdGEuc3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZSB9IGFzIG5ldmVyO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZm5BcHBseVNldHRpbmdzID0gdGFyZ2V0Q29udHJvbC5hcHBseVNldHRpbmdzO1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5hcHBseVNldHRpbmdzID0gZnVuY3Rpb24gKG1TZXR0aW5nczogeyBtb2RlbHM/OiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gfSk6IHR5cGVvZiB0YXJnZXRDb250cm9sIHtcblx0XHRcdFx0ZGVsZXRlIG1TZXR0aW5ncz8ubW9kZWxzPy4kY29tcG9uZW50U3RhdGU7XG5cdFx0XHRcdHJldHVybiBmbkFwcGx5U2V0dGluZ3MuY2FsbCh0aGlzLCBtU2V0dGluZ3MpO1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgZm5TZXRQcm9wZXJ0eSA9IHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHk7XG5cdFx0aWYgKHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKHNQcm9wZXJ0eU5hbWU6IHN0cmluZywgb1ZhbHVlOiB1bmtub3duLCBiU3VwcHJlc3NJbnZhbGlkYXRlKTogdHlwZW9mIHRhcmdldENvbnRyb2wge1xuXHRcdFx0XHRpZiAodGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLmluY2x1ZGVzKHNQcm9wZXJ0eU5hbWUpICYmICF0aGlzLl9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLl9fc3RhdGVDcmVhdGVkKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGVTdGF0ZVByb3h5KHRhcmdldENvbnRyb2wsIHRhcmdldENvbnRyb2wuX19zdGF0ZU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCh0aGlzLmdldE1vZGVsKFwiJGNvbXBvbmVudFN0YXRlXCIpIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoYC8ke3NQcm9wZXJ0eU5hbWV9YCwgb1ZhbHVlKTtcblx0XHRcdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChzUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZm5TZXRQcm9wZXJ0eS5jYWxsKHRoaXMsIHNQcm9wZXJ0eU5hbWUsIG9WYWx1ZSwgYlN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEludGVybmFsIGhlYXZ5IGxpZnRpbmcgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBjcmVhdGluZyB0aGUgY2xhc3MgcHJvcGVydHkgZm9yIHVpNSB0byB1c2UuXG4gKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIHByb3RvdHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZVxuICogQHBhcmFtIGluT2JqIFRoZSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBjbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlclVJNU1ldGFkYXRhKGNsYXp6OiBVSTVDb250cm9sQW5kTW9yZSwgbmFtZTogc3RyaW5nLCBpbk9iajogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbik6IEZ1bmN0aW9uIHtcblx0aWYgKGNsYXp6LmdldE1ldGFkYXRhPy4oKS5pc0EoXCJzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvblwiKSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKChvYmpOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbk9iaiwgb2JqTmFtZSk7XG5cdFx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSkuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cblx0aWYgKChjbGF6ej8uZ2V0TWV0YWRhdGEoKSBhcyB1bmtub3duIGFzIHsgZ2V0U3RlcmVvdHlwZTogRnVuY3Rpb24gfSk/LmdldFN0ZXJlb3R5cGUoKSA9PT0gXCJjb250cm9sXCIpIHtcblx0XHRjb25zdCByZW5kZXJlckRlZmluaXRpb24gPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXI7XG5cdFx0b2JqLnJlbmRlcmVyID0geyBhcGlWZXJzaW9uOiAyIH07XG5cdFx0aWYgKHR5cGVvZiByZW5kZXJlckRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9IGVsc2UgaWYgKHJlbmRlcmVyRGVmaW5pdGlvbiAhPSB1bmRlZmluZWQpIHtcblx0XHRcdG9iai5yZW5kZXJlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9XG5cdH1cblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0T2JqZWN0LmtleXMoY2xhenoucHJvdG90eXBlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5ICE9PSBcIm1ldGFkYXRhXCIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvYmoubWV0YWRhdGE/LmNvbnRyb2xsZXJFeHRlbnNpb25zICYmIE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgY0V4dE5hbWUgaW4gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKSB7XG5cdFx0XHRvYmpbY0V4dE5hbWVdID0gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW2NFeHROYW1lXTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0cHV0ID0gY2xhenouZXh0ZW5kKG5hbWUsIG9iaikgYXMgdHlwZW9mIENvbnRyb2wgJiBGdW5jdGlvbjtcblx0Y29uc3QgZm5Jbml0ID0gb3V0cHV0LnByb3RvdHlwZS5pbml0O1xuXHRjb25zdCBmbkFmdGVySW5pdCA9IG91dHB1dC5wcm90b3R5cGUuYWZ0ZXJJbml0O1xuXHRvdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0aWYgKGZuSW5pdCkge1xuXHRcdFx0Zm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0XHRpZiAoY2xhenoucmVnaXN0ZXJJbnN0YW5jZSkge1xuXHRcdFx0Y2xhenoucmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdC8vIElmIGEgdmFsdWUgd2FzIHNldCBpbiBgaW5pdGAgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgc2V0IGluIHRoZSB2YWx1ZSBpbiB0aGUgZW5kXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5RGVmYXVsdCA9IHRoaXNbcHJvcGVydHlLZXldID8/IHByb3BlcnR5RGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllcyA/Pz0ge307XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gdjtcblx0XHRcdFx0XHRcdFx0dGhpcy5tUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgY2FzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcm9wZXJ0eSBmaXJzdCBhbmQgbm90IGp1c3QgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHQvLyBEdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uLCBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHdpdGggYSBub24gYmluZGluZyB2YWx1ZSwgc2V0UHJvcGVydHkgaXMgY2FsbGVkIGFuZCBub3QgYmluZFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ1Byb3BlcnR5VmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgd2UgdXBkYXRlIHRoZSBfYmluZGluZ1Byb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wZXJ0eVZhbHVlICE9PSBiaW5kaW5nUHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcFZhbHVlID0gdGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldO1xuXHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BWYWx1ZSB9OyAvLyBDcmVhdGUgc2hhbGxvdyBjb3B5XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3BWYWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSwgdik7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocHJvcGVydHlEZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgdGhpc1twcm9wZXJ0eUtleV0gIT09IHByb3BlcnR5RGVmYXVsdCkge1xuXHRcdFx0XHRcdC8vIGRvbid0IG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBpdCdzIGFscmVhZHkgdGhlcmVcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzW3Byb3BlcnR5S2V5XSA9IHByb3BlcnR5RGVmYXVsdDtcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gZmFsc2U7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX2FwcGx5aW5nU2V0dGluZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYUFnZ3JlZ2F0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMpO1xuXHRcdFx0YUFnZ3JlZ2F0aW9uS2V5cy5mb3JFYWNoKChhZ2dyZWdhdGlvbktleSkgPT4ge1xuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkRlZiA9IG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldO1xuXHRcdFx0XHRjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzW2FnZ3JlZ2F0aW9uS2V5XSA/PyBhZ2dyZWdhdGlvbkRlZi5kZWZhdWx0VmFsdWU7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBhZ2dyZWdhdGlvbktleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChkZWZhdWx0VmFsdWUgJiYgKGRlZmF1bHRWYWx1ZSBhcyBVSTVFbGVtZW50KT8uaXNBKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpc1thZ2dyZWdhdGlvbktleV0gPSBkZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9hcHBseWluZ1NldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBc3NvY2lhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zKTtcblx0XHRcdGFBc3NvY2lhdGlvbktleXMuZm9yRWFjaCgoYXNzb2NpYXRpb25LZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFzc29jaWF0aW9uS2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldEFzc29jaWF0aW9uKGFzc29jaWF0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gdGhpcy5nZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSk7XG5cdFx0XHRcdFx0XHRpZiAob2JqLm1ldGFkYXRhLmFzc29jaWF0aW9uc1thc3NvY2lhdGlvbktleV0ubXVsdGlwbGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudCB8fCBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob2JqLm1ldGFkYXRhLnJlZmVyZW5jZXMpIHtcblx0XHRcdGNvbnN0IHJlZmVyZW5jZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEucmVmZXJlbmNlcyk7XG5cdFx0XHRyZWZlcmVuY2VQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5S2V5KSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogY3JlYXRlUmVmZXJlbmNlKClcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5tZXRob2RzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG1ldGhvZE5hbWUgaW4gb2JqLm1ldGFkYXRhLm1ldGhvZHMpIHtcblx0XHRcdFx0Y29uc3QgbWV0aG9kRGVmaW5pdGlvbiA9IG9iai5tZXRhZGF0YS5tZXRob2RzW21ldGhvZE5hbWVdO1xuXHRcdFx0XHRpZiAobWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJBZnRlckFzeW5jXCIgfHwgbWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLm1ldGhvZEhvbGRlcikge1xuXHRcdFx0XHRcdFx0dGhpcy5tZXRob2RIb2xkZXIgPSBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV0gPSBbdGhpc1ttZXRob2ROYW1lXV07XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG1ldGhvZE5hbWUsIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IEZ1bmN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXS5wdXNoKHYpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYXN5bmMgKC4uLm1ldGhvZEFyZ3M6IHVua25vd25bXSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1ldGhvZEFycmF5cyA9IHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGhvZEFycmF5cy5yZXZlcnNlKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgYXJnIG9mIG1ldGhvZEFycmF5cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0YXdhaXQgYXJnLmFwcGx5KHRoaXMsIG1ldGhvZEFyZ3MpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRfY3JlYXRlU3RhdGVQcm9wZXJ0eShvYmosIHRoaXMpO1xuXHRcdGlmIChmbkFmdGVySW5pdCkge1xuXHRcdFx0Zm5BZnRlckluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fVxuXHR9O1xuXG5cdGNsYXp6Lm92ZXJyaWRlID0gZnVuY3Rpb24gKG9FeHRlbnNpb246IHVua25vd24pOiBGdW5jdGlvbiB7XG5cdFx0Y29uc3QgcG9sID0ge307XG5cdFx0KHBvbCBhcyBGdW5jdGlvbikuY29uc3RydWN0b3IgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogRnVuY3Rpb24ge1xuXHRcdFx0cmV0dXJuIGNsYXp6LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH07XG5cdFx0Y29uc3Qgb0NsYXNzID0gKE1ldGFkYXRhIGFzIHVua25vd24gYXMgeyBjcmVhdGVDbGFzczogRnVuY3Rpb24gfSkuY3JlYXRlQ2xhc3MoXG5cdFx0XHRjbGF6eixcblx0XHRcdGBhbm9ueW1vdXNFeHRlbnNpb25+JHt1aWQoKX1gLFxuXHRcdFx0cG9sLFxuXHRcdFx0Q29udHJvbGxlck1ldGFkYXRhXG5cdFx0KTtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fc3RhdGljT3ZlcnJpZGUgPSBvRXh0ZW5zaW9uO1xuXHRcdG9DbGFzcy5nZXRNZXRhZGF0YSgpLl9vdmVycmlkZSA9IChjbGF6ei5nZXRNZXRhZGF0YSgpIGFzIHsgX292ZXJyaWRlPzogdW5rbm93biB9KS5fb3ZlcnJpZGU7XG5cdFx0cmV0dXJuIG9DbGFzcztcblx0fTtcblxuXHRPYmplY3RQYXRoLnNldChuYW1lLCBvdXRwdXQpO1xuXG5cdHJldHVybiBvdXRwdXQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7RUFnSkEsTUFBTUEsY0FBYyxHQUFHLFNBQUFBLENBQVVDLE1BQXNELEVBQWdDO0lBQ3RIQSxNQUFNLENBQUNDLFFBQVEsR0FBR0MsS0FBSyxDQUN0QjtNQUNDQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7TUFDeEJDLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDZEMsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUNoQkMsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUNkQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO01BQ2hCQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ1hDLE1BQU0sRUFBRSxDQUFDLENBQUM7TUFDVkMsVUFBVSxFQUFFO0lBQ2IsQ0FBQyxFQUNEVixNQUFNLENBQUNDLFFBQVEsSUFBSSxDQUFDLENBQ3JCLENBQWlDO0lBQ2pDLE9BQU9ELE1BQU0sQ0FBQ0MsUUFBUTtFQUN2QixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTVSxxQkFBcUJBLENBQUNYLE1BQXFCLEVBQUU7SUFDckQsT0FBTyxVQUVOWSxNQUFnQixFQUVBO01BQUEsSUFEaEJDLE1BQWMsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUdkLE1BQU0sQ0FBQ2lCLFdBQVcsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDO01BRS9DLElBQUlDLE9BQU8sR0FBR1AsTUFBTSxDQUFDUSxTQUFTLENBQUMsQ0FBeUI7TUFDeEQsSUFBSXBCLE1BQU0sQ0FBQ3FCLGdCQUFnQixFQUFFO1FBQzVCRixPQUFPLEdBQUduQixNQUFNLENBQUNxQixnQkFBZ0IsQ0FBQ0YsT0FBTyxDQUFDLElBQUlBLE9BQU87TUFDdEQ7TUFDQSxPQUFPQSxPQUFPLElBQUksQ0FBQ0EsT0FBTyxDQUFDRyxHQUFHLENBQUlULE1BQU0sQ0FBQyxJQUFJTSxPQUFPLENBQUNJLFNBQVMsRUFBRTtRQUMvRCxJQUFJLElBQUksQ0FBQ0MsZ0JBQWdCLEVBQUU7VUFDMUIsTUFBTUMsV0FBVyxHQUFJTixPQUFPLENBQWFPLGFBQWEsQ0FBQyxDQUFDO1VBQ3hELE1BQU1DLG1CQUFtQixHQUFHRixXQUFXLENBQUNHLElBQUksQ0FBRUMsVUFBc0IsSUFBS0EsVUFBVSxDQUFDUCxHQUFHLENBQUNULE1BQU0sQ0FBQyxDQUFDO1VBQ2hHLElBQUljLG1CQUFtQixFQUFFO1lBQ3hCUixPQUFPLEdBQUdRLG1CQUFtQztVQUM5QyxDQUFDLE1BQU07WUFDTlIsT0FBTyxHQUFHQSxPQUFPLENBQUNJLFNBQVMsQ0FBQyxDQUFpQjtVQUM5QztRQUNELENBQUMsTUFBTTtVQUNOSixPQUFPLEdBQUdBLE9BQU8sQ0FBQ0ksU0FBUyxDQUFDLENBQUM7UUFDOUI7TUFDRDtNQUVBLElBQUksQ0FBQ0osT0FBTyxJQUFJLENBQUNBLE9BQU8sQ0FBQ0csR0FBRyxDQUFJVCxNQUFNLENBQUMsRUFBRTtRQUN4QyxNQUFNaUIsVUFBVSxHQUFHLElBQUksQ0FBQ0MsV0FBVyxDQUFDQyxHQUFHLENBQUMsSUFBSSxDQUFRO1FBQ3BEYixPQUFPLEdBQUdXLFVBQVUsR0FBR0EsVUFBVSxDQUFDZixNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQzlDO01BQ0EsSUFBSWtCLGFBQWE7TUFDakIsSUFBSWQsT0FBTyxJQUFJQSxPQUFPLENBQUNHLEdBQUcsQ0FBSVQsTUFBTSxDQUFDLEVBQUU7UUFDdENvQixhQUFhLEdBQUdkLE9BQU87TUFDeEI7TUFDQSxPQUFPYyxhQUFhO0lBQ3JCLENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1DLFlBQVksR0FBRyxTQUFBQSxDQUFVbEMsTUFBcUIsRUFBUTtJQUMzRCxJQUFJLENBQUNBLE1BQU0sQ0FBQ21DLGVBQWUsRUFBRTtNQUM1Qm5DLE1BQU0sQ0FBQ21DLGVBQWUsR0FBRyxJQUFJO01BQzdCbkMsTUFBTSxDQUFDK0IsV0FBVyxHQUFHLElBQUlLLE9BQU8sQ0FBbUIsQ0FBQztNQUNwRHBDLE1BQU0sQ0FBQ3FDLGdCQUFnQixHQUFHLFVBQVVDLFNBQW1CLEVBQVE7UUFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQ1AsV0FBVyxDQUFDQyxHQUFHLENBQUNNLFNBQVMsQ0FBQ0MsV0FBVyxDQUFDLEVBQUU7VUFDakQsSUFBSSxDQUFDUixXQUFXLENBQUNTLEdBQUcsQ0FBQ0YsU0FBUyxDQUFDQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQ2hEO1FBQ0MsSUFBSSxDQUFDUixXQUFXLENBQUNDLEdBQUcsQ0FBQ00sU0FBUyxDQUFDQyxXQUFXLENBQUMsQ0FBY0UsSUFBSSxDQUFDSCxTQUFTLENBQUM7TUFDMUUsQ0FBQztNQUNEdEMsTUFBTSxDQUFDMEMsTUFBTSxHQUFHL0IscUJBQXFCLENBQUNYLE1BQU0sQ0FBQztJQUM5QztFQUNELENBQUM7RUFlRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBUzJDLFdBQVdBLENBQUEsRUFBc0I7SUFDaEQsT0FBTyxVQUFVM0MsTUFBNEIsRUFBRTRDLFdBQW1CLEVBQUVDLGtCQUFvRCxFQUFFO01BQ3pILE1BQU01QyxRQUFRLEdBQUdGLGNBQWMsQ0FBQ0MsTUFBTSxDQUFDO01BQ3ZDLElBQUlDLFFBQVEsQ0FBQzZDLGFBQWEsS0FBSzlCLFNBQVMsRUFBRTtRQUN6QyxNQUFNLElBQUkrQixLQUFLLENBQUMsZ0RBQWdELENBQUM7TUFDbEU7TUFDQTlDLFFBQVEsQ0FBQzZDLGFBQWEsR0FBR0YsV0FBVztNQUNwQyxPQUFPQyxrQkFBa0IsQ0FBQ0csUUFBUTtNQUNsQy9DLFFBQVEsQ0FBQ2dELHlCQUF5QixLQUFNSixrQkFBa0IsQ0FBZ0NLLFdBQVcsR0FBRyxDQUFDO01BQ3pHLE9BQVFMLGtCQUFrQixDQUFnQ0ssV0FBVztNQUVyRSxPQUFPTCxrQkFBa0I7SUFDMUIsQ0FBQyxDQUFpQyxDQUFDO0VBQ3BDOztFQUVBOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQU0sUUFBQSxDQUFBUixXQUFBLEdBQUFBLFdBQUE7RUFLTyxTQUFTUyxjQUFjQSxDQUFDQyxhQUFzQixFQUFtQjtJQUN2RSxPQUFPLFVBQVVyRCxNQUErQixFQUFFNEMsV0FBVyxFQUFFO01BQzlELElBQUksQ0FBQzVDLE1BQU0sQ0FBQ3NELFFBQVEsRUFBRTtRQUNyQnRELE1BQU0sQ0FBQ3NELFFBQVEsR0FBRyxDQUFDLENBQUM7TUFDckI7TUFDQSxJQUFJLENBQUN0RCxNQUFNLENBQUN1RCxTQUFTLEVBQUU7UUFDdEJ2RCxNQUFNLENBQUN1RCxTQUFTLEdBQUcsQ0FBQyxDQUFDO01BQ3RCO01BQ0EsSUFBSUMsYUFBYSxHQUFHeEQsTUFBTSxDQUFDdUQsU0FBUztNQUNwQyxJQUFJRixhQUFhLEVBQUU7UUFDbEIsSUFBSSxDQUFDRyxhQUFhLENBQUNDLFNBQVMsRUFBRTtVQUM3QkQsYUFBYSxDQUFDQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQzdCO1FBQ0EsSUFBSSxDQUFDRCxhQUFhLENBQUNDLFNBQVMsQ0FBQ0osYUFBYSxDQUFDLEVBQUU7VUFDNUNHLGFBQWEsQ0FBQ0MsU0FBUyxDQUFDSixhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUM7UUFDQUcsYUFBYSxHQUFHQSxhQUFhLENBQUNDLFNBQVMsQ0FBQ0osYUFBYSxDQUFDO01BQ3ZEO01BQ0FHLGFBQWEsQ0FBQ1osV0FBVyxDQUFDYyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUkxRCxNQUFNLENBQThCNEMsV0FBVyxDQUFDYyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFQLFFBQUEsQ0FBQUMsY0FBQSxHQUFBQSxjQUFBO0VBS08sU0FBU08sVUFBVUEsQ0FBQ0MsaUJBQTZDLEVBQW1CO0lBQzFGLE9BQU8sVUFBVTVELE1BQStCLEVBQUU0QyxXQUFXLEVBQUVpQixVQUE4QixFQUFFO01BQzlGLE1BQU01RCxRQUFRLEdBQUdGLGNBQWMsQ0FBQ0MsTUFBTSxDQUFDO01BQ3ZDLElBQUksQ0FBQ0MsUUFBUSxDQUFDTyxPQUFPLENBQUNvQyxXQUFXLENBQUNjLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM5Q3pELFFBQVEsQ0FBQ08sT0FBTyxDQUFDb0MsV0FBVyxDQUFDYyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzlDO01BQ0F6RCxRQUFRLENBQUNPLE9BQU8sQ0FBQ29DLFdBQVcsQ0FBQ2MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDRSxpQkFBaUIsR0FBR0EsaUJBQWlEOztNQUU5RztNQUNBLElBQUlBLGlCQUFpQixLQUFLLFNBQVMsRUFBRTtRQUNwQ0UsUUFBUSxDQUFDRixpQkFBaUIsQ0FBQyxDQUFDNUQsTUFBTSxFQUFFNEMsV0FBVyxFQUFFaUIsVUFBVSxDQUFDO01BQzdEO0lBQ0QsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0VBSEFWLFFBQUEsQ0FBQVEsVUFBQSxHQUFBQSxVQUFBO0VBSU8sU0FBU0ksZUFBZUEsQ0FBQSxFQUFvQjtJQUNsRCxPQUFPLFVBQVUvRCxNQUErQixFQUFFNEMsV0FBVyxFQUFFaUIsVUFBVSxFQUFRO01BQ2hGLE1BQU01RCxRQUFRLEdBQUdGLGNBQWMsQ0FBQ0MsTUFBTSxDQUFDO01BQ3ZDNkQsVUFBVSxDQUFDRyxVQUFVLEdBQUcsSUFBSTtNQUM1QixJQUFJLENBQUMvRCxRQUFRLENBQUNPLE9BQU8sQ0FBQ29DLFdBQVcsQ0FBQ2MsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzlDekQsUUFBUSxDQUFDTyxPQUFPLENBQUNvQyxXQUFXLENBQUNjLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDOUM7TUFDQXpELFFBQVEsQ0FBQ08sT0FBTyxDQUFDb0MsV0FBVyxDQUFDYyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNPLE1BQU0sR0FBRyxJQUFJO0lBQ3ZELENBQUM7RUFDRjtFQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSEFkLFFBQUEsQ0FBQVksZUFBQSxHQUFBQSxlQUFBO0VBSU8sU0FBU0csZ0JBQWdCQSxDQUFBLEVBQW9CO0lBQ25ELE9BQU8sVUFBVWxFLE1BQStCLEVBQUU0QyxXQUFXLEVBQUVpQixVQUFVLEVBQUU7TUFDMUUsTUFBTTVELFFBQVEsR0FBR0YsY0FBYyxDQUFDQyxNQUFNLENBQUM7TUFDdkM2RCxVQUFVLENBQUNHLFVBQVUsR0FBRyxJQUFJO01BQzVCLElBQUksQ0FBQy9ELFFBQVEsQ0FBQ08sT0FBTyxDQUFDb0MsV0FBVyxDQUFDYyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDOUN6RCxRQUFRLENBQUNPLE9BQU8sQ0FBQ29DLFdBQVcsQ0FBQ2MsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUM5QztNQUNBekQsUUFBUSxDQUFDTyxPQUFPLENBQUNvQyxXQUFXLENBQUNjLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ08sTUFBTSxHQUFHLEtBQUs7SUFDeEQsQ0FBQztFQUNGO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFIQWQsUUFBQSxDQUFBZSxnQkFBQSxHQUFBQSxnQkFBQTtFQUlPLFNBQVNDLGNBQWNBLENBQUEsRUFBb0I7SUFDakQsT0FBTyxVQUFVbkUsTUFBK0IsRUFBRTRDLFdBQVcsRUFBRWlCLFVBQVUsRUFBRTtNQUMxRSxNQUFNNUQsUUFBUSxHQUFHRixjQUFjLENBQUNDLE1BQU0sQ0FBQztNQUN2QzZELFVBQVUsQ0FBQ0csVUFBVSxHQUFHLElBQUk7TUFDNUIsSUFBSSxDQUFDL0QsUUFBUSxDQUFDTyxPQUFPLENBQUNvQyxXQUFXLENBQUNjLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM5Q3pELFFBQVEsQ0FBQ08sT0FBTyxDQUFDb0MsV0FBVyxDQUFDYyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzlDO01BQ0F6RCxRQUFRLENBQUNPLE9BQU8sQ0FBQ29DLFdBQVcsQ0FBQ2MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDVSxLQUFLLEdBQUcsSUFBSTtJQUN0RCxDQUFDO0VBQ0Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBakIsUUFBQSxDQUFBZ0IsY0FBQSxHQUFBQSxjQUFBO0VBS08sU0FBU0UsY0FBY0EsQ0FBQ0MsY0FBcUQsRUFBcUI7SUFDeEcsT0FBTyxVQUFVdEUsTUFBK0IsRUFBRTRDLFdBQW1CLEVBQUVDLGtCQUFvRCxFQUFFO01BQzVILE1BQU01QyxRQUFRLEdBQUdGLGNBQWMsQ0FBQ0MsTUFBTSxDQUFDO01BQ3ZDLE9BQVE2QyxrQkFBa0IsQ0FBK0JLLFdBQVc7TUFDcEVqRCxRQUFRLENBQUNFLG9CQUFvQixDQUFDeUMsV0FBVyxDQUFDYyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUdZLGNBQWM7TUFDdEUsT0FBT3pCLGtCQUFrQjtJQUMxQixDQUFDLENBQWlDLENBQUM7RUFDcEM7O0VBRUE7O0VBRUE7RUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUhBTSxRQUFBLENBQUFrQixjQUFBLEdBQUFBLGNBQUE7RUFJTyxTQUFTRSxLQUFLQSxDQUFBLEVBQXNCO0lBQzFDLE9BQU8sVUFBVXZFLE1BQTRCLEVBQUV3RSxRQUF5QixFQUFFO01BQ3pFLE1BQU12RSxRQUFRLEdBQUdGLGNBQWMsQ0FBQ0MsTUFBTSxDQUFDO01BQ3ZDLElBQUksQ0FBQ0MsUUFBUSxDQUFDUSxNQUFNLENBQUMrRCxRQUFRLENBQUNkLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUMxQ3pELFFBQVEsQ0FBQ1EsTUFBTSxDQUFDK0QsUUFBUSxDQUFDZCxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQzFDO0lBQ0QsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQVAsUUFBQSxDQUFBb0IsS0FBQSxHQUFBQSxLQUFBO0VBS08sU0FBU0UsUUFBUUEsQ0FBQ0MsbUJBQXdDLEVBQXFCO0lBQ3JGLE9BQU8sVUFBVTFFLE1BQTRCLEVBQUU0QyxXQUFtQixFQUFFQyxrQkFBb0QsRUFBRTtNQUN6SCxNQUFNNUMsUUFBUSxHQUFHRixjQUFjLENBQUNDLE1BQU0sQ0FBQztNQUN2QyxJQUFJMEUsbUJBQW1CLENBQUNDLFFBQVEsS0FBSzNELFNBQVMsRUFBRTtRQUMvQzBELG1CQUFtQixDQUFDQyxRQUFRLEdBQUcsSUFBSTtNQUNwQztNQUNBLElBQUlELG1CQUFtQixDQUFDRSxhQUFhLEtBQUssSUFBSSxFQUFFO1FBQy9DRixtQkFBbUIsQ0FBQ0MsUUFBUSxHQUFHLEtBQUs7UUFDcENELG1CQUFtQixDQUFDRyxLQUFLLEdBQUcsTUFBTTtNQUNuQztNQUNBLElBQUksQ0FBQzVFLFFBQVEsQ0FBQ0csVUFBVSxDQUFDd0MsV0FBVyxDQUFDLEVBQUU7UUFDdEMzQyxRQUFRLENBQUNHLFVBQVUsQ0FBQ3dDLFdBQVcsQ0FBQyxHQUFHOEIsbUJBQW1CO01BQ3ZEO01BQ0EsT0FBTzdCLGtCQUFrQixDQUFDRyxRQUFRO01BQ2xDMEIsbUJBQW1CLENBQUNJLFlBQVksS0FBTWpDLGtCQUFrQixDQUFnQ0ssV0FBVyxHQUFHLENBQUM7TUFDdkcsT0FBUUwsa0JBQWtCLENBQStCSyxXQUFXO01BRXBFLE9BQU9MLGtCQUFrQjtJQUMxQixDQUFDLENBQWlDLENBQUM7RUFDcEM7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBTSxRQUFBLENBQUFzQixRQUFBLEdBQUFBLFFBQUE7RUFLTyxTQUFTTSxXQUFXQSxDQUFDQyxxQkFBNkMsRUFBcUI7SUFDN0YsT0FBTyxVQUFVaEYsTUFBNEIsRUFBRTRDLFdBQW1CLEVBQUVDLGtCQUFvRCxFQUFFO01BQ3pILE1BQU01QyxRQUFRLEdBQUdGLGNBQWMsQ0FBQ0MsTUFBTSxDQUFDO01BQ3ZDLElBQUlnRixxQkFBcUIsQ0FBQ0MsUUFBUSxLQUFLakUsU0FBUyxFQUFFO1FBQ2pEO1FBQ0FnRSxxQkFBcUIsQ0FBQ0MsUUFBUSxHQUFHLEtBQUs7TUFDdkM7TUFDQSxJQUFJLENBQUNoRixRQUFRLENBQUNJLFlBQVksQ0FBQ3VDLFdBQVcsQ0FBQyxFQUFFO1FBQ3hDM0MsUUFBUSxDQUFDSSxZQUFZLENBQUN1QyxXQUFXLENBQUMsR0FBR29DLHFCQUFxQjtNQUMzRDtNQUNBLElBQUlBLHFCQUFxQixDQUFDRSxTQUFTLEVBQUU7UUFDcENqRixRQUFRLENBQUNrRixrQkFBa0IsR0FBR3ZDLFdBQVc7TUFDMUM7TUFDQSxPQUFPQyxrQkFBa0IsQ0FBQ0csUUFBUTtNQUNsQ2dDLHFCQUFxQixDQUFDRixZQUFZLEtBQU1qQyxrQkFBa0IsQ0FBZ0NLLFdBQVcsR0FBRyxDQUFDO01BQ3pHLE9BQVFMLGtCQUFrQixDQUErQkssV0FBVztNQUVwRSxPQUFPTCxrQkFBa0I7SUFDMUIsQ0FBQyxDQUFpQyxDQUFDO0VBQ3BDOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQU0sUUFBQSxDQUFBNEIsV0FBQSxHQUFBQSxXQUFBO0VBS08sU0FBU0ssV0FBV0EsQ0FBQ0Msc0JBQThDLEVBQXFCO0lBQzlGLE9BQU8sVUFBVXJGLE1BQTRCLEVBQUU0QyxXQUFtQixFQUFFQyxrQkFBb0QsRUFBRTtNQUN6SCxNQUFNNUMsUUFBUSxHQUFHRixjQUFjLENBQUNDLE1BQU0sQ0FBQztNQUN2QyxJQUFJLENBQUNDLFFBQVEsQ0FBQ00sWUFBWSxDQUFDcUMsV0FBVyxDQUFDLEVBQUU7UUFDeEMzQyxRQUFRLENBQUNNLFlBQVksQ0FBQ3FDLFdBQVcsQ0FBQyxHQUFHeUMsc0JBQXNCO01BQzVEO01BQ0EsT0FBT3hDLGtCQUFrQixDQUFDRyxRQUFRO01BQ2xDLE9BQVFILGtCQUFrQixDQUErQkssV0FBVztNQUVwRSxPQUFPTCxrQkFBa0I7SUFDMUIsQ0FBQyxDQUFpQyxDQUFDO0VBQ3BDOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQU0sUUFBQSxDQUFBaUMsV0FBQSxHQUFBQSxXQUFBO0VBS08sU0FBU0Usa0JBQWtCQSxDQUFDQyxhQUFxQixFQUFxQjtJQUM1RSxPQUFPLFVBQVV2RixNQUE0QixFQUFFO01BQzlDLE1BQU1DLFFBQVEsR0FBR0YsY0FBYyxDQUFDQyxNQUFNLENBQUM7TUFFdkNDLFFBQVEsQ0FBQ1MsVUFBVSxDQUFDK0IsSUFBSSxDQUFDOEMsYUFBYSxDQUFDO0lBQ3hDLENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtFQUhBcEMsUUFBQSxDQUFBbUMsa0JBQUEsR0FBQUEsa0JBQUE7RUFJTyxTQUFTRSxlQUFlQSxDQUFBLEVBQW9CO0lBQ2xELE9BQU8sVUFBVXhGLE1BQTRCLEVBQUV5RixXQUFXLEVBQUU7TUFDM0QsTUFBTUMsa0JBQWlDLEdBQUcxRixNQUFNLENBQUN1QyxXQUF1QztNQUN4RkwsWUFBWSxDQUFDd0Qsa0JBQWtCLENBQUM7TUFDaENBLGtCQUFrQixDQUFDRCxXQUFXLENBQUMvQixRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBb0M7UUFBQSxTQUFBaUMsSUFBQSxHQUFBN0UsU0FBQSxDQUFBQyxNQUFBLEVBQXZCNkUsSUFBSSxPQUFBQyxLQUFBLENBQUFGLElBQUEsR0FBQUcsSUFBQSxNQUFBQSxJQUFBLEdBQUFILElBQUEsRUFBQUcsSUFBQTtVQUFKRixJQUFJLENBQUFFLElBQUEsSUFBQWhGLFNBQUEsQ0FBQWdGLElBQUE7UUFBQTtRQUM3RCxJQUFJRixJQUFJLEVBQUU3RSxNQUFNLEVBQUU7VUFDakIsTUFBTXlDLGFBQWEsR0FBR2tDLGtCQUFrQixDQUFDaEQsTUFBTSxDQUFDa0QsSUFBSSxDQUFDLENBQUMsQ0FBYSxDQUFDO1VBQ3BFcEMsYUFBYSxHQUFHaUMsV0FBVyxDQUFDL0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdrQyxJQUFJLENBQUM7UUFDakQ7TUFDRCxDQUFDO0lBQ0YsQ0FBQztFQUNGO0VBQUN6QyxRQUFBLENBQUFxQyxlQUFBLEdBQUFBLGVBQUE7RUFXRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTTyxjQUFjQSxDQUFDQyxPQUFlLEVBQUVDLGtCQUEwRCxFQUFrQjtJQUMzSCxPQUFPLFVBQVUxRCxXQUE4QixFQUFFO01BQ2hELElBQUksQ0FBQ0EsV0FBVyxDQUFDMkQsU0FBUyxDQUFDakcsUUFBUSxFQUFFO1FBQ3BDc0MsV0FBVyxDQUFDMkQsU0FBUyxDQUFDakcsUUFBUSxHQUFHLENBQUMsQ0FBQztNQUNwQztNQUNBLElBQUlnRyxrQkFBa0IsRUFBRTtRQUN2QixLQUFLLE1BQU1FLEdBQUcsSUFBSUYsa0JBQWtCLEVBQUU7VUFDckMsSUFBSTFELFdBQVcsQ0FBQzJELFNBQVMsQ0FBQ2pHLFFBQVEsQ0FBQ2tHLEdBQUcsQ0FBQyxFQUFFO1lBQ3hDLElBQUlOLEtBQUssQ0FBQ08sT0FBTyxDQUFDN0QsV0FBVyxDQUFDMkQsU0FBUyxDQUFDakcsUUFBUSxDQUFDa0csR0FBRyxDQUFDLENBQUMsRUFBRTtjQUN2RDVELFdBQVcsQ0FBQzJELFNBQVMsQ0FBQ2pHLFFBQVEsQ0FBQ2tHLEdBQUcsQ0FBQyxHQUFHNUQsV0FBVyxDQUFDMkQsU0FBUyxDQUFDakcsUUFBUSxDQUFDa0csR0FBRyxDQUFDLENBQUNFLE1BQU0sQ0FDL0VKLGtCQUFrQixDQUFDRSxHQUFHLENBQ3ZCLENBQUM7WUFDRixDQUFDLE1BQU07Y0FDTjVELFdBQVcsQ0FBQzJELFNBQVMsQ0FBQ2pHLFFBQVEsQ0FBQ2tHLEdBQUcsQ0FBQyxHQUFHO2dCQUNyQyxHQUFHNUQsV0FBVyxDQUFDMkQsU0FBUyxDQUFDakcsUUFBUSxDQUFDa0csR0FBRyxDQUFDO2dCQUN0QyxHQUFJRixrQkFBa0IsQ0FBQ0UsR0FBRztjQUMzQixDQUFDO1lBQ0Y7VUFDRCxDQUFDLE1BQU07WUFDTjVELFdBQVcsQ0FBQzJELFNBQVMsQ0FBQ2pHLFFBQVEsQ0FBQ2tHLEdBQUcsQ0FBQyxHQUFHRixrQkFBa0IsQ0FBQ0UsR0FBRyxDQUF1QztVQUNwRztRQUNEO01BQ0Q7TUFDQSxPQUFPRyxtQkFBbUIsQ0FBQy9ELFdBQVcsRUFBRXlELE9BQU8sRUFBRXpELFdBQVcsQ0FBQzJELFNBQVMsQ0FBQztJQUN4RSxDQUFDO0VBQ0Y7RUFBQy9DLFFBQUEsQ0FBQTRDLGNBQUEsR0FBQUEsY0FBQTtFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTUSxLQUFLQSxDQUFnQ0MsY0FBOEIsRUFBa0I7SUFDcEcsT0FBTyxVQUFVQyxRQUEyQixFQUFFO01BQzdDLElBQUlBLFFBQVEsQ0FBQ1AsU0FBUyxDQUFDUSxNQUFNLEVBQUU7UUFDOUIsTUFBTSxJQUFJM0QsS0FBSyxDQUFDLG9FQUFvRSxDQUFDO01BQ3RGO01BQ0EsTUFBTTlDLFFBQVEsR0FBR0YsY0FBYyxDQUFDMEcsUUFBUSxDQUFDUCxTQUFTLENBQUM7TUFFbkQsSUFBSVMsdUJBQXVCLEdBQUdILGNBQWMsQ0FBQ04sU0FBUztNQUN0RCxPQUFPUyx1QkFBdUIsRUFBRTtRQUMvQkYsUUFBUSxHQUFHRyxrQ0FBa0MsQ0FBQ0gsUUFBUSxFQUFFeEcsUUFBUSxFQUFFMEcsdUJBQXVCLENBQUM7UUFDMUZBLHVCQUF1QixHQUFHRSxNQUFNLENBQUNDLGNBQWMsQ0FBQ0gsdUJBQXVCLENBQUM7TUFDekU7TUFDQUksc0JBQXNCLENBQUNOLFFBQVEsRUFBRUQsY0FBYyxDQUFDOztNQUVoRDtNQUNBQSxjQUFjLENBQUNOLFNBQVMsQ0FBQ2MsVUFBVSxHQUFHUCxRQUFRLENBQUM7TUFDL0MsT0FBT0EsUUFBUTtJQUNoQixDQUFDO0VBQ0Y7RUFBQ3RELFFBQUEsQ0FBQW9ELEtBQUEsR0FBQUEsS0FBQTtFQWtCTSxTQUFTVSxlQUFlQSxDQUFBLEVBQWlDO0lBQy9ELE9BQU87TUFDTkMsT0FBTyxFQUFFbEcsU0FBeUI7TUFDbENtRyxVQUFVLEVBQUUsU0FBQUEsQ0FBVUMsZ0JBQW1CLEVBQVE7UUFDaEQsSUFBSSxDQUFDRixPQUFPLEdBQUdFLGdCQUFnQjtNQUNoQztJQUNELENBQUM7RUFDRjtFQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSEFqRSxRQUFBLENBQUE4RCxlQUFBLEdBQUFBLGVBQUE7RUFJTyxTQUFTSSxlQUFlQSxDQUFBLEVBQXNCO0lBQ3BELE9BQU8sVUFBVXJILE1BQTRCLEVBQUU0QyxXQUFtQixFQUFFQyxrQkFBb0QsRUFBRTtNQUN6SCxNQUFNNUMsUUFBUSxHQUFHRixjQUFjLENBQUNDLE1BQU0sQ0FBQztNQUN2QyxPQUFPNkMsa0JBQWtCLENBQUNHLFFBQVE7TUFDbEMsT0FBUUgsa0JBQWtCLENBQStCSyxXQUFXO01BQ3BFLElBQUlvRSxVQUFVLENBQUNDLFNBQVMsQ0FBQ3ZILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxFQUFFO1FBQ3hELElBQUksQ0FBQ0MsUUFBUSxDQUFDSyxVQUFVLENBQUNzQyxXQUFXLENBQUMsRUFBRTtVQUN0QzNDLFFBQVEsQ0FBQ0ssVUFBVSxDQUFDc0MsV0FBVyxDQUFDLEdBQUcsSUFBSTtRQUN4QztNQUNELENBQUMsTUFBTTtRQUNMQyxrQkFBa0IsQ0FBK0JLLFdBQVcsR0FBRytELGVBQWU7TUFDaEY7TUFFQSxPQUFPcEUsa0JBQWtCO0lBQzFCLENBQUMsQ0FBaUMsQ0FBQztFQUNwQztFQUFDTSxRQUFBLENBQUFrRSxlQUFBLEdBQUFBLGVBQUE7RUFFRCxTQUFTVCxrQ0FBa0NBLENBQzFDSCxRQUEyQixFQUMzQmUsaUJBQStDLEVBQy9DQyx1QkFBOEMsRUFDMUI7SUFDcEIsTUFBTWxDLGFBQWEsR0FBR2tDLHVCQUF1QixFQUFFQyxnQkFBZ0IsR0FBRyxDQUFDO0lBQ25FLElBQUluQyxhQUFhLEVBQUU7TUFDbEJpQyxpQkFBaUIsQ0FBQzlHLFVBQVUsQ0FBQytCLElBQUksQ0FBQzhDLGFBQWEsQ0FBQztJQUNqRDtJQUVBc0IsTUFBTSxDQUFDYyxtQkFBbUIsQ0FBQ0YsdUJBQXVCLENBQUMsQ0FBQ0csT0FBTyxDQUFFQyxJQUFJLElBQUs7TUFDckUsSUFBSUEsSUFBSSxLQUFLLGFBQWEsSUFBSUEsSUFBSSxLQUFLLFlBQVksSUFBSUEsSUFBSSxLQUFLLFVBQVUsRUFBRTtRQUMzRSxJQUFJLENBQUNwQixRQUFRLENBQUNQLFNBQVMsQ0FBQzJCLElBQUksQ0FBQyxFQUFFO1VBQzlCO1VBQ0FoQixNQUFNLENBQUNpQixjQUFjLENBQ3BCckIsUUFBUSxDQUFDUCxTQUFTLEVBQ2xCMkIsSUFBSSxFQUNKaEIsTUFBTSxDQUFDa0Isd0JBQXdCLENBQUNOLHVCQUF1QixFQUFFSSxJQUFJLENBQUMsSUFBSWhCLE1BQU0sQ0FBQ21CLE1BQU0sQ0FBQyxJQUFJLENBQ3JGLENBQUM7UUFDRjtNQUNEO01BQ0EsSUFBSUgsSUFBSSxLQUFLLFVBQVUsRUFBRTtRQUN4QnBCLFFBQVEsQ0FBQ1AsU0FBUyxDQUFDakcsUUFBUSxHQUFHQyxLQUFLLENBQUN1RyxRQUFRLENBQUNQLFNBQVMsQ0FBQ2pHLFFBQVEsRUFBRXdILHVCQUF1QixDQUFDeEgsUUFBUSxDQUFDO01BQ25HO0lBQ0QsQ0FBQyxDQUFDO0lBQ0YsT0FBT3dHLFFBQVE7RUFDaEI7RUFFQSxTQUFTd0IsMkJBQTJCQSxDQUFDQyxTQUFvQixFQUFFQyxJQUFZLEVBQVc7SUFDakYsTUFBTUMsV0FBVyxHQUFHLElBQUlELElBQUksQ0FBQ3pFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7SUFDekMsTUFBTTJFLElBQUksR0FBR0MsU0FBUyxDQUFDSixTQUFTLENBQUNLLFNBQVMsQ0FBQ0gsV0FBVyxDQUFDLENBQUM7SUFDeEQsSUFBSUksT0FBTztJQUNYLElBQUlMLElBQUksS0FBSyxlQUFlLEVBQUU7TUFDN0IsT0FBTztRQUFFTSxLQUFLLEVBQUU7TUFBa0IsQ0FBQztJQUNwQztJQUNBLElBQUksT0FBT0osSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUM3QkcsT0FBTyxHQUFHSCxJQUFJO0lBQ2YsQ0FBQyxNQUFNLElBQUksT0FBT0EsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUNwQ0csT0FBTyxHQUFHSCxJQUFJO0lBQ2YsQ0FBQyxNQUFNLElBQUksT0FBT0EsSUFBSSxLQUFLLFNBQVMsRUFBRTtNQUNyQ0csT0FBTyxHQUFHSCxJQUFJO0lBQ2YsQ0FBQyxNQUFNLElBQUl4QyxLQUFLLENBQUNPLE9BQU8sQ0FBQ2lDLElBQUksQ0FBQyxFQUFFO01BQy9CRyxPQUFPLEdBQUcsSUFBSUUsS0FBSyxDQUFDTCxJQUFJLEVBQUU7UUFDekJyRyxHQUFHQSxDQUFDaEMsTUFBaUIsRUFBRTJJLENBQWtCLEVBQUVDLFFBQW1CLEVBQVc7VUFDeEUsTUFBTUMsR0FBRyxHQUFHQyxPQUFPLENBQUM5RyxHQUFHLENBQUNoQyxNQUFNLEVBQUUySSxDQUFDLEVBQUVDLFFBQVEsQ0FBQztVQUM1QyxJQUFJLE9BQU9DLEdBQUcsS0FBSyxVQUFVLEVBQUU7WUFDOUIsT0FBT0EsR0FBRyxDQUFDRSxJQUFJLENBQUMvSSxNQUFNLENBQUM7VUFDeEIsQ0FBQyxNQUFNLElBQUk2SSxHQUFHLEtBQUs3SCxTQUFTLElBQUlnSSxLQUFLLENBQUNDLE1BQU0sQ0FBQ04sQ0FBQyxDQUFDakYsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUQsT0FBTztjQUNOd0YsYUFBYSxFQUFFO2dCQUNkVCxLQUFLLEVBQUUsaUJBQWlCO2dCQUN4QlUsSUFBSSxFQUFFUjtjQUNQO1lBQ0QsQ0FBQztVQUNGO1VBQ0EsT0FBT0UsR0FBRztRQUNYO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNO01BQ05MLE9BQU8sR0FBRztRQUFFLEdBQUdIO01BQUssQ0FBQztJQUN0QjtJQUNBLElBQUksT0FBT0csT0FBTyxLQUFLLFFBQVEsRUFBRTtNQUNoQ0EsT0FBTyxDQUFDVSxhQUFhLEdBQUc7UUFDdkJULEtBQUssRUFBRSxpQkFBaUI7UUFDeEJVLElBQUksRUFBRWY7TUFDUCxDQUFDO0lBQ0Y7SUFDQSxPQUFPSSxPQUFPO0VBQ2Y7RUFDQSxNQUFNWSxlQUFlLEdBQUdDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztFQUVqRCxTQUFTQyxnQkFBZ0JBLENBQ3hCckgsYUFRQyxFQUNEc0gsaUJBQXlCLEVBQ3pCQyxpQkFBMkIsRUFDM0JDLFdBQW9CLEVBQ1I7SUFDWjtJQUNBeEgsYUFBYSxDQUFDeUgsUUFBUSxDQUFDLElBQUlDLFNBQVMsQ0FBQ0YsV0FBVyxDQUFDLEVBQUUsaUJBQWlCLENBQUM7SUFDckUsTUFBTUcsVUFBVSxHQUFHM0gsYUFBYSxDQUFDNEgsUUFBUSxDQUFDLGlCQUFpQixDQUFjO0lBQ3pFRCxVQUFVLENBQUNFLG9CQUFvQixDQUFFQyxHQUE4QixJQUFLO01BQ25FLE1BQU1aLElBQUksR0FBR1ksR0FBRyxDQUFDQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUVDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JELElBQUlkLElBQUksSUFBSUssaUJBQWlCLENBQUNVLFFBQVEsQ0FBQ2YsSUFBSSxDQUFDLEVBQUU7UUFDN0NsSCxhQUFhLENBQUNrSSxXQUFXLENBQUNoQixJQUFJLEVBQUVZLEdBQUcsQ0FBQ0MsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQzNEO0lBQ0QsQ0FBQyxDQUFDO0lBQ0YvSCxhQUFhLENBQUNtSSxjQUFjLEdBQUcsSUFBSTtJQUNuQyxNQUFNQyxLQUFLLEdBQUcsSUFBSTNCLEtBQUssQ0FBQ2tCLFVBQVUsRUFBRTtNQUNuQzVILEdBQUcsRUFBRUEsQ0FBQ2hDLE1BQWlCLEVBQUVtSSxJQUFZLEtBQWM7UUFDbEQsT0FBT0YsMkJBQTJCLENBQUNqSSxNQUFNLEVBQUVtSSxJQUFJLENBQUM7TUFDakQsQ0FBQztNQUNEM0YsR0FBRyxFQUFFQSxDQUFDOEgsYUFBd0IsRUFBRW5DLElBQUksRUFBRW9DLEtBQUssS0FBYztRQUN4RDtRQUNBLE1BQU1DLG9CQUFvQixHQUFHdkksYUFBYSxDQUFDbUgsZUFBZSxDQUFDO1FBQzNELElBQUlvQixvQkFBb0IsQ0FBQ04sUUFBUSxDQUFDL0IsSUFBSSxDQUFDekUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ25EekIsYUFBYSxDQUFDd0ksMEJBQTBCLEdBQUcsSUFBSTtVQUMvQ3hJLGFBQWEsQ0FBQ2tJLFdBQVcsQ0FBQ2hDLElBQUksQ0FBQ3pFLFFBQVEsQ0FBQyxDQUFDLEVBQUU2RyxLQUFLLENBQUM7VUFDakR0SSxhQUFhLENBQUN3SSwwQkFBMEIsR0FBRyxLQUFLO1FBQ2pEO1FBQ0EsTUFBTUMsU0FBUyxHQUFHSixhQUFhLENBQUNILFdBQVcsQ0FBQyxJQUFJaEMsSUFBSSxDQUFDekUsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFNkcsS0FBSyxDQUFDO1FBQ3pFdEksYUFBYSxDQUFDMEkscUJBQXFCLENBQUN4QyxJQUFJLENBQUN6RSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE9BQU9nSCxTQUFTO01BQ2pCO0lBQ0QsQ0FBQyxDQUFDO0lBQ0Y3RCxNQUFNLENBQUNpQixjQUFjLENBQUM3RixhQUFhLEVBQUVzSCxpQkFBaUIsRUFBRTtNQUN2RHFCLFlBQVksRUFBRSxJQUFJO01BQ2xCNUksR0FBRyxFQUFFQSxDQUFBLEtBQU07UUFDVixPQUFPcUksS0FBSztNQUNiLENBQUM7TUFDRDdILEdBQUdBLENBQUMrSCxLQUFLLEVBQUU7UUFDVjtRQUNBWCxVQUFVLENBQUNPLFdBQVcsQ0FBQyxHQUFHLEVBQUVJLEtBQUssQ0FBQztNQUNuQztJQUNELENBQUMsQ0FBQztJQUNGLE9BQU9GLEtBQUs7RUFDYjtFQUVBLFNBQVNRLG9CQUFvQkEsQ0FDNUJDLEdBQXlCLEVBQ3pCN0ksYUFTQyxFQUNNO0lBQ1AsSUFBSTZJLEdBQUcsQ0FBQzdLLFFBQVEsRUFBRTZDLGFBQWEsSUFBSWIsYUFBYSxDQUFDbUgsZUFBZSxDQUFDLEVBQUU7TUFDbEUsSUFBSTJCLGFBQWEsR0FBRyxLQUFLO01BQ3pCLE1BQU12QixpQkFBMkIsR0FBRyxFQUFFO01BQ3RDLEtBQUssTUFBTXdCLFlBQVksSUFBSUYsR0FBRyxDQUFDN0ssUUFBUSxFQUFFRyxVQUFVLEVBQUU7UUFDcEQsTUFBTTZLLFdBQVcsR0FBR0gsR0FBRyxDQUFDN0ssUUFBUSxDQUFDRyxVQUFVLENBQUM0SyxZQUFZLENBQUM7UUFDekQsSUFBSUMsV0FBVyxDQUFDQyxXQUFXLEVBQUU7VUFDNUIxQixpQkFBaUIsQ0FBQy9HLElBQUksQ0FBQ3VJLFlBQVksQ0FBQztRQUNyQztNQUNEO01BQ0E7TUFDQS9JLGFBQWEsQ0FBQ21ILGVBQWUsQ0FBQyxLQUFLLEVBQUU7TUFDckNuSCxhQUFhLENBQUNtSCxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUduSCxhQUFhLENBQUNtSCxlQUFlLENBQUMsRUFBRSxHQUFHSSxpQkFBaUIsQ0FBQztNQUUxRixJQUFJc0IsR0FBRyxDQUFDN0ssUUFBUSxFQUFFNkMsYUFBYSxFQUFFO1FBQ2hDO1FBQ0FiLGFBQWEsQ0FBQ2tKLFlBQVksR0FBRyxrQkFBaUM7VUFDN0QsT0FBTyxJQUFJLENBQUNDLGlCQUFpQjtVQUM3QixJQUFJLENBQUNMLGFBQWEsRUFBRTtZQUNuQkEsYUFBYSxHQUFHLElBQUk7WUFDcEIsTUFBTyxJQUFJLENBQWtDTSxhQUFhLEdBQUcsSUFBSSxDQUFDQyxhQUFhLENBQUM7WUFDaEYsSUFBSSxDQUFDQSxhQUFhLEdBQUcsRUFBRTtZQUN2QlAsYUFBYSxHQUFHLEtBQUs7VUFDdEI7UUFDRCxDQUFDO1FBQ0Q5SSxhQUFhLENBQUMwSSxxQkFBcUIsR0FBRyxVQUFVWSxXQUFtQixFQUFRO1VBQzFFLElBQUksQ0FBQ0QsYUFBYSxLQUFLLEVBQUU7VUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQ0EsYUFBYSxDQUFDcEIsUUFBUSxDQUFDcUIsV0FBVyxDQUFDLEVBQUU7WUFDOUMsSUFBSSxDQUFDRCxhQUFhLENBQUM3SSxJQUFJLENBQUM4SSxXQUFXLENBQUM7VUFDckM7VUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDSCxpQkFBaUIsSUFBSSxDQUFDTCxhQUFhLEVBQUU7WUFDOUMsSUFBSSxDQUFDSyxpQkFBaUIsR0FBR0ksVUFBVSxDQUFDLE1BQU07Y0FDekMsSUFBSSxDQUFDTCxZQUFZLENBQUMsQ0FBQztZQUNwQixDQUFDLEVBQUUsR0FBRyxDQUFDO1VBQ1I7UUFDRCxDQUFDO1FBQ0QsTUFBTTVCLGlCQUFpQixHQUFHdUIsR0FBRyxDQUFDN0ssUUFBUSxDQUFDNkMsYUFBYTtRQUNwRGIsYUFBYSxDQUFDbUksY0FBYyxHQUFHLEtBQUs7UUFDcENuSSxhQUFhLENBQUN3SixXQUFXLEdBQUdsQyxpQkFBaUI7UUFDN0MxQyxNQUFNLENBQUNpQixjQUFjLENBQUM3RixhQUFhLEVBQUVzSCxpQkFBaUIsRUFBRTtVQUN2RHFCLFlBQVksRUFBRSxJQUFJO1VBQ2xCNUksR0FBRyxFQUFFQSxDQUFBLEtBQU07WUFDVixPQUFPc0gsZ0JBQWdCLENBQUNySCxhQUFhLEVBQUVzSCxpQkFBaUIsRUFBRXRILGFBQWEsQ0FBQ21ILGVBQWUsQ0FBQyxDQUFDO1VBQzFGLENBQUM7VUFDRDVHLEdBQUcsRUFBRytILEtBQUssSUFBSztZQUNmakIsZ0JBQWdCLENBQUNySCxhQUFhLEVBQUVzSCxpQkFBaUIsRUFBRXRILGFBQWEsQ0FBQ21ILGVBQWUsQ0FBQyxFQUFFbUIsS0FBSyxDQUFDO1VBQzFGO1FBQ0QsQ0FBQyxDQUFDO1FBQ0YsSUFBSU8sR0FBRyxDQUFDN0ssUUFBUSxDQUFDZ0QseUJBQXlCLEVBQUU7VUFDM0NoQixhQUFhLENBQUM2SSxHQUFHLENBQUM3SyxRQUFRLENBQUM2QyxhQUFhLENBQWtCLEdBQUc7WUFBRSxHQUFHZ0ksR0FBRyxDQUFDN0ssUUFBUSxDQUFDZ0Q7VUFBMEIsQ0FBVTtRQUNwSDtRQUNBLE1BQU15SSxlQUFlLEdBQUd6SixhQUFhLENBQUMwSixhQUFhO1FBQ25EMUosYUFBYSxDQUFDMEosYUFBYSxHQUFHLFVBQVVDLFNBQTZDLEVBQXdCO1VBQzVHLE9BQU9BLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxlQUFlO1VBQ3pDLE9BQU9KLGVBQWUsQ0FBQ0ssSUFBSSxDQUFDLElBQUksRUFBRUgsU0FBUyxDQUFDO1FBQzdDLENBQUM7TUFDRjtNQUNBLE1BQU1JLGFBQWEsR0FBRy9KLGFBQWEsQ0FBQ2tJLFdBQVc7TUFDL0MsSUFBSWxJLGFBQWEsQ0FBQ21ILGVBQWUsQ0FBQyxDQUFDckksTUFBTSxHQUFHLENBQUMsRUFBRTtRQUM5Q2tCLGFBQWEsQ0FBQ2tJLFdBQVcsR0FBRyxVQUFVOEIsYUFBcUIsRUFBRUMsTUFBZSxFQUFFQyxtQkFBbUIsRUFBd0I7VUFDeEgsSUFBSWxLLGFBQWEsQ0FBQ21ILGVBQWUsQ0FBQyxDQUFDYyxRQUFRLENBQUMrQixhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ3hCLDBCQUEwQixFQUFFO1lBQy9GLElBQUksQ0FBQyxJQUFJLENBQUNMLGNBQWMsRUFBRTtjQUN6QmQsZ0JBQWdCLENBQUNySCxhQUFhLEVBQUVBLGFBQWEsQ0FBQ3dKLFdBQVcsRUFBRXhKLGFBQWEsQ0FBQ21ILGVBQWUsQ0FBQyxDQUFDO1lBQzNGO1lBQ0MsSUFBSSxDQUFDUyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBZU0sV0FBVyxDQUFDLElBQUk4QixhQUFhLEVBQUUsRUFBRUMsTUFBTSxDQUFDO1lBQ3hGakssYUFBYSxDQUFDMEkscUJBQXFCLENBQUNzQixhQUFhLENBQUM7VUFDbkQ7VUFDQSxPQUFPRCxhQUFhLENBQUNELElBQUksQ0FBQyxJQUFJLEVBQUVFLGFBQWEsRUFBRUMsTUFBTSxFQUFFQyxtQkFBbUIsQ0FBQztRQUM1RSxDQUFDO01BQ0Y7SUFDRDtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUzdGLG1CQUFtQkEsQ0FBQzhGLEtBQXdCLEVBQUV2RSxJQUFZLEVBQUV3RSxLQUFxRCxFQUFZO0lBQ3JJLElBQUlELEtBQUssQ0FBQ25MLFdBQVcsR0FBRyxDQUFDLENBQUNLLEdBQUcsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFO01BQ3JFdUYsTUFBTSxDQUFDYyxtQkFBbUIsQ0FBQzBFLEtBQUssQ0FBQyxDQUFDekUsT0FBTyxDQUFFMEUsT0FBTyxJQUFLO1FBQ3RELE1BQU16SSxVQUFVLEdBQUdnRCxNQUFNLENBQUNrQix3QkFBd0IsQ0FBQ3NFLEtBQUssRUFBRUMsT0FBTyxDQUFDO1FBQ2xFLElBQUl6SSxVQUFVLElBQUksQ0FBQ0EsVUFBVSxDQUFDRyxVQUFVLEVBQUU7VUFDekNILFVBQVUsQ0FBQ0csVUFBVSxHQUFHLElBQUk7UUFDN0I7TUFDRCxDQUFDLENBQUM7SUFDSDtJQUNBO0lBQ0EsTUFBTThHLEdBQVEsR0FBRyxDQUFDLENBQUM7SUFDbkJBLEdBQUcsQ0FBQzdLLFFBQVEsR0FBR29NLEtBQUssQ0FBQ3BNLFFBQVEsSUFBSSxDQUFDLENBQUM7SUFDbkM2SyxHQUFHLENBQUN4SCxRQUFRLEdBQUcrSSxLQUFLLENBQUMvSSxRQUFRO0lBQzdCd0gsR0FBRyxDQUFDdkksV0FBVyxHQUFHNkosS0FBSztJQUN2QnRCLEdBQUcsQ0FBQzdLLFFBQVEsQ0FBQ3NNLFFBQVEsR0FBRzFGLE1BQU0sQ0FBQ0MsY0FBYyxDQUFDc0YsS0FBSyxDQUFDbEcsU0FBUyxDQUFDLENBQUNqRixXQUFXLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQztJQUV0RixJQUFLa0wsS0FBSyxFQUFFbkwsV0FBVyxDQUFDLENBQUMsRUFBNkN1TCxhQUFhLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtNQUNwRyxNQUFNQyxrQkFBa0IsR0FBR0osS0FBSyxDQUFDSyxRQUFRLElBQUlOLEtBQUssQ0FBQ00sUUFBUSxJQUFJTixLQUFLLENBQUNPLE1BQU07TUFDM0U3QixHQUFHLENBQUM0QixRQUFRLEdBQUc7UUFBRUUsVUFBVSxFQUFFO01BQUUsQ0FBQztNQUNoQyxJQUFJLE9BQU9ILGtCQUFrQixLQUFLLFVBQVUsRUFBRTtRQUM3QzNCLEdBQUcsQ0FBQzRCLFFBQVEsQ0FBQ0MsTUFBTSxHQUFHRixrQkFBa0I7TUFDekMsQ0FBQyxNQUFNLElBQUlBLGtCQUFrQixJQUFJekwsU0FBUyxFQUFFO1FBQzNDOEosR0FBRyxDQUFDNEIsUUFBUSxHQUFHRCxrQkFBa0I7TUFDbEM7SUFDRDtJQUNBM0IsR0FBRyxDQUFDN0ssUUFBUSxDQUFDUyxVQUFVLEdBQUcyTCxLQUFLLENBQUNwTSxRQUFRLEVBQUVTLFVBQVUsSUFBSTBMLEtBQUssQ0FBQ25NLFFBQVEsRUFBRVMsVUFBVTtJQUNsRm1HLE1BQU0sQ0FBQ2dHLElBQUksQ0FBQ1QsS0FBSyxDQUFDbEcsU0FBUyxDQUFDLENBQUMwQixPQUFPLENBQUV6QixHQUFHLElBQUs7TUFDN0MsSUFBSUEsR0FBRyxLQUFLLFVBQVUsRUFBRTtRQUN2QixJQUFJO1VBQ0gyRSxHQUFHLENBQUMzRSxHQUFHLENBQUMsR0FBR2lHLEtBQUssQ0FBQ2xHLFNBQVMsQ0FBQ0MsR0FBRyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxPQUFPMkcsQ0FBQyxFQUFFO1VBQ1g7UUFBQTtNQUVGO0lBQ0QsQ0FBQyxDQUFDO0lBRUYsSUFBSWhDLEdBQUcsQ0FBQzdLLFFBQVEsRUFBRUUsb0JBQW9CLElBQUkwRyxNQUFNLENBQUNnRyxJQUFJLENBQUMvQixHQUFHLENBQUM3SyxRQUFRLENBQUNFLG9CQUFvQixDQUFDLENBQUNZLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDcEcsS0FBSyxNQUFNZ00sUUFBUSxJQUFJakMsR0FBRyxDQUFDN0ssUUFBUSxDQUFDRSxvQkFBb0IsRUFBRTtRQUN6RDJLLEdBQUcsQ0FBQ2lDLFFBQVEsQ0FBQyxHQUFHakMsR0FBRyxDQUFDN0ssUUFBUSxDQUFDRSxvQkFBb0IsQ0FBQzRNLFFBQVEsQ0FBQztNQUM1RDtJQUNEO0lBQ0EsTUFBTUMsTUFBTSxHQUFHWixLQUFLLENBQUMxRixNQUFNLENBQUNtQixJQUFJLEVBQUVpRCxHQUFHLENBQThCO0lBQ25FLE1BQU1tQyxNQUFNLEdBQUdELE1BQU0sQ0FBQzlHLFNBQVMsQ0FBQ2dILElBQUk7SUFDcEMsTUFBTUMsV0FBVyxHQUFHSCxNQUFNLENBQUM5RyxTQUFTLENBQUNrSCxTQUFTO0lBQzlDSixNQUFNLENBQUM5RyxTQUFTLENBQUNnSCxJQUFJLEdBQUcsWUFBb0M7TUFBQSxJQUFBRyxLQUFBO01BQUEsU0FBQUMsS0FBQSxHQUFBeE0sU0FBQSxDQUFBQyxNQUFBLEVBQXZCNkUsSUFBSSxPQUFBQyxLQUFBLENBQUF5SCxLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7UUFBSjNILElBQUksQ0FBQTJILEtBQUEsSUFBQXpNLFNBQUEsQ0FBQXlNLEtBQUE7TUFBQTtNQUN4QyxJQUFJTixNQUFNLEVBQUU7UUFDWEEsTUFBTSxDQUFDTyxLQUFLLENBQUMsSUFBSSxFQUFFNUgsSUFBSSxDQUFDO01BQ3pCO01BQ0EsSUFBSXdHLEtBQUssQ0FBQy9KLGdCQUFnQixFQUFFO1FBQzNCK0osS0FBSyxDQUFDL0osZ0JBQWdCLENBQUMsSUFBSSxDQUFDO01BQzdCO01BQ0EsSUFBSSxDQUFDcEMsUUFBUSxHQUFHNkssR0FBRyxDQUFDN0ssUUFBUTtNQUU1QixJQUFJNkssR0FBRyxDQUFDN0ssUUFBUSxDQUFDRyxVQUFVLEVBQUU7UUFDNUIsTUFBTXFOLGFBQWEsR0FBRzVHLE1BQU0sQ0FBQ2dHLElBQUksQ0FBQy9CLEdBQUcsQ0FBQzdLLFFBQVEsQ0FBQ0csVUFBVSxDQUFDO1FBQzFEcU4sYUFBYSxDQUFDN0YsT0FBTyxDQUFFaEYsV0FBVyxJQUFLO1VBQ3RDLE1BQU1xSSxXQUFXLEdBQUdILEdBQUcsQ0FBQzdLLFFBQVEsQ0FBQ0csVUFBVSxDQUFDd0MsV0FBVyxDQUFDO1VBQ3hEO1VBQ0EsTUFBTThLLGVBQWUsR0FBRyxJQUFJLENBQUM5SyxXQUFXLENBQUMsSUFBSXFJLFdBQVcsQ0FBQ25HLFlBQVk7VUFDckUsSUFBSW1HLFdBQVcsQ0FBQ3JHLGFBQWEsS0FBSyxJQUFJLEVBQUU7WUFDdkMsSUFBSSxDQUFDK0ksa0JBQWtCLEtBQUssQ0FBQyxDQUFDO1lBRTlCOUcsTUFBTSxDQUFDaUIsY0FBYyxDQUFDLElBQUksRUFBRWxGLFdBQVcsRUFBRTtjQUN4Q2dJLFlBQVksRUFBRSxJQUFJO2NBQ2xCcEksR0FBRyxFQUFHb0wsQ0FBVSxJQUFLO2dCQUNwQixJQUFJLENBQUNELGtCQUFrQixDQUFDL0ssV0FBVyxDQUFDLEdBQUdnTCxDQUFDO2dCQUN4QyxJQUFJLENBQUNDLFdBQVcsQ0FBQ2pMLFdBQVcsQ0FBQyxHQUFHZ0wsQ0FBQztnQkFDakMsT0FBTyxJQUFJO2NBQ1osQ0FBQztjQUNENUwsR0FBR0EsQ0FBQSxFQUFZO2dCQUNkO2dCQUNBO2dCQUNBLE1BQU04TCxhQUFhLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUNuTCxXQUFXLENBQUM7Z0JBQ25ELE1BQU1vTCxvQkFBb0IsR0FBRyxJQUFJLENBQUNMLGtCQUFrQixDQUFDL0ssV0FBVyxDQUFDO2dCQUNqRTtnQkFDQSxJQUFJa0wsYUFBYSxLQUFLOU0sU0FBUyxJQUFJOE0sYUFBYSxLQUFLRSxvQkFBb0IsRUFBRTtrQkFDMUUsSUFBSSxDQUFDTCxrQkFBa0IsQ0FBQy9LLFdBQVcsQ0FBQyxHQUFHa0wsYUFBYTtnQkFDckQ7Z0JBQ0EsTUFBTUcsU0FBUyxHQUFHLElBQUksQ0FBQ04sa0JBQWtCLENBQUMvSyxXQUFXLENBQUM7Z0JBQ3RELElBQUksT0FBT3FMLFNBQVMsS0FBSyxRQUFRLEVBQUU7a0JBQ2xDLE9BQU87b0JBQUUsR0FBR0E7a0JBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLENBQUMsTUFBTTtrQkFDTixPQUFPQSxTQUFTO2dCQUNqQjtjQUNEO1lBQ0QsQ0FBQyxDQUFDO1VBQ0gsQ0FBQyxNQUFNO1lBQ05wSCxNQUFNLENBQUNpQixjQUFjLENBQUMsSUFBSSxFQUFFbEYsV0FBVyxFQUFFO2NBQ3hDZ0ksWUFBWSxFQUFFLElBQUk7Y0FDbEJwSSxHQUFHLEVBQUdvTCxDQUFVLElBQUs7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDekQsV0FBVyxDQUFDdkgsV0FBVyxFQUFFZ0wsQ0FBQyxDQUFDO2NBQ3hDLENBQUM7Y0FDRDVMLEdBQUcsRUFBRUEsQ0FBQSxLQUFNO2dCQUNWLE9BQU8sSUFBSSxDQUFDK0wsV0FBVyxDQUFDbkwsV0FBVyxDQUFDO2NBQ3JDO1lBQ0QsQ0FBQyxDQUFDO1VBQ0g7VUFDQSxJQUFJOEssZUFBZSxLQUFLMU0sU0FBUyxJQUFJLElBQUksQ0FBQzRCLFdBQVcsQ0FBQyxLQUFLOEssZUFBZSxFQUFFO1lBQzNFO1lBQ0EsSUFBSSxDQUFDUSxpQkFBaUIsR0FBRyxJQUFJO1lBQzdCLElBQUksQ0FBQ3RMLFdBQVcsQ0FBQyxHQUFHOEssZUFBZTtZQUNuQyxJQUFJLENBQUNRLGlCQUFpQixHQUFHLEtBQUs7WUFDOUIsT0FBTyxJQUFJLENBQUNBLGlCQUFpQjtVQUM5QjtRQUNELENBQUMsQ0FBQztRQUNGLE1BQU1DLGdCQUFnQixHQUFHdEgsTUFBTSxDQUFDZ0csSUFBSSxDQUFDL0IsR0FBRyxDQUFDN0ssUUFBUSxDQUFDSSxZQUFZLENBQUM7UUFDL0Q4TixnQkFBZ0IsQ0FBQ3ZHLE9BQU8sQ0FBRXdHLGNBQWMsSUFBSztVQUM1QyxNQUFNQyxjQUFjLEdBQUd2RCxHQUFHLENBQUM3SyxRQUFRLENBQUNJLFlBQVksQ0FBQytOLGNBQWMsQ0FBQztVQUNoRSxNQUFNdEosWUFBWSxHQUFHLElBQUksQ0FBQ3NKLGNBQWMsQ0FBQyxJQUFJQyxjQUFjLENBQUN2SixZQUFZO1VBQ3hFK0IsTUFBTSxDQUFDaUIsY0FBYyxDQUFDLElBQUksRUFBRXNHLGNBQWMsRUFBRTtZQUMzQ3hELFlBQVksRUFBRSxJQUFJO1lBQ2xCcEksR0FBRyxFQUFHb0wsQ0FBVSxJQUFLO2NBQ3BCLE9BQU8sSUFBSSxDQUFDVSxjQUFjLENBQUNGLGNBQWMsRUFBRVIsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFDRDVMLEdBQUcsRUFBRUEsQ0FBQSxLQUFNO2NBQ1YsTUFBTXVNLGtCQUFrQixHQUFHLElBQUksQ0FBQ0MsY0FBYyxDQUFDSixjQUFjLENBQUM7Y0FDOUQsSUFBSXRELEdBQUcsQ0FBQzdLLFFBQVEsQ0FBQ0ksWUFBWSxDQUFDK04sY0FBYyxDQUFDLENBQUNuSixRQUFRLEVBQUU7Z0JBQ3ZELE9BQU9zSixrQkFBa0IsSUFBSSxFQUFFO2NBQ2hDLENBQUMsTUFBTTtnQkFDTixPQUFPQSxrQkFBa0I7Y0FDMUI7WUFDRDtVQUNELENBQUMsQ0FBQztVQUNGLElBQUl6SixZQUFZLElBQUtBLFlBQVksRUFBaUJ4RCxHQUFHLEVBQUU7WUFDdEQsSUFBSSxDQUFDNE0saUJBQWlCLEdBQUcsSUFBSTtZQUM3QixJQUFJLENBQUNFLGNBQWMsQ0FBQyxHQUFHdEosWUFBWTtZQUNuQyxJQUFJLENBQUNvSixpQkFBaUIsR0FBRyxLQUFLO1lBQzlCLE9BQU8sSUFBSSxDQUFDQSxpQkFBaUI7VUFDOUI7UUFDRCxDQUFDLENBQUM7UUFDRixNQUFNTyxnQkFBZ0IsR0FBRzVILE1BQU0sQ0FBQ2dHLElBQUksQ0FBQy9CLEdBQUcsQ0FBQzdLLFFBQVEsQ0FBQ00sWUFBWSxDQUFDO1FBQy9Ea08sZ0JBQWdCLENBQUM3RyxPQUFPLENBQUU4RyxjQUFjLElBQUs7VUFDNUM3SCxNQUFNLENBQUNpQixjQUFjLENBQUMsSUFBSSxFQUFFNEcsY0FBYyxFQUFFO1lBQzNDOUQsWUFBWSxFQUFFLElBQUk7WUFDbEJwSSxHQUFHLEVBQUdvTCxDQUFVLElBQUs7Y0FDcEIsT0FBTyxJQUFJLENBQUNlLGNBQWMsQ0FBQ0QsY0FBYyxFQUFFZCxDQUFDLENBQUM7WUFDOUMsQ0FBQztZQUNENUwsR0FBRyxFQUFFQSxDQUFBLEtBQU07Y0FDVixNQUFNdU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDSyxjQUFjLENBQUNGLGNBQWMsQ0FBQztjQUM5RCxJQUFJNUQsR0FBRyxDQUFDN0ssUUFBUSxDQUFDTSxZQUFZLENBQUNtTyxjQUFjLENBQUMsQ0FBQ3pKLFFBQVEsRUFBRTtnQkFDdkQsT0FBT3NKLGtCQUFrQixJQUFJLEVBQUU7Y0FDaEMsQ0FBQyxNQUFNO2dCQUNOLE9BQU9BLGtCQUFrQjtjQUMxQjtZQUNEO1VBQ0QsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO01BQ0g7TUFDQSxJQUFJekQsR0FBRyxDQUFDN0ssUUFBUSxDQUFDSyxVQUFVLEVBQUU7UUFDNUIsTUFBTXVPLG1CQUFtQixHQUFHaEksTUFBTSxDQUFDZ0csSUFBSSxDQUFDL0IsR0FBRyxDQUFDN0ssUUFBUSxDQUFDSyxVQUFVLENBQUM7UUFDaEV1TyxtQkFBbUIsQ0FBQ2pILE9BQU8sQ0FBRWhGLFdBQVcsSUFBSztVQUM1Q2lFLE1BQU0sQ0FBQ2lCLGNBQWMsQ0FBQyxJQUFJLEVBQUVsRixXQUFXLEVBQUU7WUFDeENnSSxZQUFZLEVBQUUsSUFBSTtZQUNsQkwsS0FBSyxFQUFFdEQsZUFBZSxDQUFDO1VBQ3hCLENBQUMsQ0FBQztRQUNILENBQUMsQ0FBQztNQUNIO01BQ0EsSUFBSTZELEdBQUcsQ0FBQzdLLFFBQVEsQ0FBQ08sT0FBTyxFQUFFO1FBQ3pCLEtBQUssTUFBTXNPLFVBQVUsSUFBSWhFLEdBQUcsQ0FBQzdLLFFBQVEsQ0FBQ08sT0FBTyxFQUFFO1VBQzlDLE1BQU11TyxnQkFBZ0IsR0FBR2pFLEdBQUcsQ0FBQzdLLFFBQVEsQ0FBQ08sT0FBTyxDQUFDc08sVUFBVSxDQUFDO1VBQ3pELElBQUlDLGdCQUFnQixDQUFDbkwsaUJBQWlCLEtBQUssWUFBWSxJQUFJbUwsZ0JBQWdCLENBQUNuTCxpQkFBaUIsS0FBSyxhQUFhLEVBQUU7WUFDaEgsSUFBSSxDQUFDLElBQUksQ0FBQ29MLFlBQVksRUFBRTtjQUN2QixJQUFJLENBQUNBLFlBQVksR0FBRyxFQUFFO1lBQ3ZCO1lBQ0EsSUFBSSxDQUFDQSxZQUFZLENBQUNGLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDQSxVQUFVLENBQUMsQ0FBQztZQUNsRGpJLE1BQU0sQ0FBQ2lCLGNBQWMsQ0FBQyxJQUFJLEVBQUVnSCxVQUFVLEVBQUU7Y0FDdkNsRSxZQUFZLEVBQUUsSUFBSTtjQUNsQnBJLEdBQUcsRUFBR29MLENBQVcsSUFBSztnQkFDckIsT0FBTyxJQUFJLENBQUNvQixZQUFZLENBQUNGLFVBQVUsQ0FBQyxDQUFDck0sSUFBSSxDQUFDbUwsQ0FBQyxDQUFDO2NBQzdDLENBQUM7Y0FDRDVMLEdBQUcsRUFBRUEsQ0FBQSxLQUFNO2dCQUNWLE9BQU8sa0JBQW9DO2tCQUMxQyxNQUFNaU4sWUFBWSxHQUFHNUIsS0FBSSxDQUFDMkIsWUFBWSxDQUFDRixVQUFVLENBQUM7a0JBQ2xELElBQUlDLGdCQUFnQixDQUFDbkwsaUJBQWlCLEtBQUssYUFBYSxFQUFFO29CQUN6RHFMLFlBQVksQ0FBQ0MsT0FBTyxDQUFDLENBQUM7a0JBQ3ZCO2tCQUFDLFNBQUFDLEtBQUEsR0FBQXJPLFNBQUEsQ0FBQUMsTUFBQSxFQUplcU8sVUFBVSxPQUFBdkosS0FBQSxDQUFBc0osS0FBQSxHQUFBRSxLQUFBLE1BQUFBLEtBQUEsR0FBQUYsS0FBQSxFQUFBRSxLQUFBO29CQUFWRCxVQUFVLENBQUFDLEtBQUEsSUFBQXZPLFNBQUEsQ0FBQXVPLEtBQUE7a0JBQUE7a0JBSzFCLEtBQUssTUFBTUMsR0FBRyxJQUFJTCxZQUFZLEVBQUU7b0JBQy9CLE1BQU1LLEdBQUcsQ0FBQzlCLEtBQUssQ0FBQ0gsS0FBSSxFQUFFK0IsVUFBVSxDQUFDO2tCQUNsQztnQkFDRCxDQUFDO2NBQ0Y7WUFDRCxDQUFDLENBQUM7VUFDSDtRQUNEO01BQ0Q7TUFDQXZFLG9CQUFvQixDQUFDQyxHQUFHLEVBQUUsSUFBSSxDQUFDO01BQy9CLElBQUlxQyxXQUFXLEVBQUU7UUFDaEJBLFdBQVcsQ0FBQ0ssS0FBSyxDQUFDLElBQUksRUFBRTVILElBQUksQ0FBQztNQUM5QjtJQUNELENBQUM7SUFFRHdHLEtBQUssQ0FBQzlJLFFBQVEsR0FBRyxVQUFVaU0sVUFBbUIsRUFBWTtNQUN6RCxNQUFNQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO01BQ2JBLEdBQUcsQ0FBY2pOLFdBQVcsR0FBRyxZQUF3QztRQUFBLFNBQUFrTixLQUFBLEdBQUEzTyxTQUFBLENBQUFDLE1BQUEsRUFBM0I2RSxJQUFJLE9BQUFDLEtBQUEsQ0FBQTRKLEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtVQUFKOUosSUFBSSxDQUFBOEosS0FBQSxJQUFBNU8sU0FBQSxDQUFBNE8sS0FBQTtRQUFBO1FBQ2hELE9BQU90RCxLQUFLLENBQUNvQixLQUFLLENBQUMsSUFBSSxFQUFFNUgsSUFBSSxDQUFDO01BQy9CLENBQUM7TUFDRCxNQUFNK0osTUFBTSxHQUFJQyxRQUFRLENBQTBDQyxXQUFXLENBQzVFekQsS0FBSyxFQUNMLHNCQUFzQjBELEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFDN0JOLEdBQUcsRUFDSE8sa0JBQ0QsQ0FBQztNQUNESixNQUFNLENBQUMxTyxXQUFXLENBQUMsQ0FBQyxDQUFDK08sZUFBZSxHQUFHVCxVQUFVO01BQ2pESSxNQUFNLENBQUMxTyxXQUFXLENBQUMsQ0FBQyxDQUFDZ1AsU0FBUyxHQUFJN0QsS0FBSyxDQUFDbkwsV0FBVyxDQUFDLENBQUMsQ0FBNkJnUCxTQUFTO01BQzNGLE9BQU9OLE1BQU07SUFDZCxDQUFDO0lBRURPLFVBQVUsQ0FBQzFOLEdBQUcsQ0FBQ3FGLElBQUksRUFBRW1GLE1BQU0sQ0FBQztJQUU1QixPQUFPQSxNQUFNO0VBQ2Q7RUFBQyxPQUFBN0osUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -880,7 +880,7 @@ function registerUI5Metadata(clazz: UI5ControlAndMore, name: string, inObj: UI5C
|
|
|
880
880
|
const propertyValue = this.getProperty(propertyKey);
|
|
881
881
|
const bindingPropertyValue = this._bindingProperties[propertyKey];
|
|
882
882
|
// If the property is set to a different value we update the _bindingProperties
|
|
883
|
-
if (propertyValue && propertyValue !== bindingPropertyValue) {
|
|
883
|
+
if (propertyValue !== undefined && propertyValue !== bindingPropertyValue) {
|
|
884
884
|
this._bindingProperties[propertyKey] = propertyValue;
|
|
885
885
|
}
|
|
886
886
|
const propValue = this._bindingProperties[propertyKey];
|
|
@@ -201,9 +201,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
201
201
|
let targetControl;
|
|
202
202
|
if (ControlType?.isFragment) {
|
|
203
203
|
targetControl = settings.children;
|
|
204
|
-
} else if (ControlType?.isRuntime) {
|
|
205
|
-
const runtimeBuildingBlock = new ControlType(settings);
|
|
206
|
-
targetControl = runtimeBuildingBlock.getContent?.(jsxContext.view, jsxContext.appComponent);
|
|
207
204
|
} else if (isAControl(ControlType)) {
|
|
208
205
|
const metadata = ControlType.getMetadata();
|
|
209
206
|
if (key !== undefined) {
|
|
@@ -284,4 +281,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
|
|
|
284
281
|
};
|
|
285
282
|
return jsxControl;
|
|
286
283
|
}, false);
|
|
287
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGTF9ERUxFR0FURSIsIkNPUkVfUkVRVUlSRSIsIkRUX0RFU0lHTlRJTUUiLCJhZGRDaGlsZEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25DaGlsZHJlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNoaWxkIiwidW5kZWZpbmVkIiwiaXNDaGlsZEFuRWxlbWVudCIsInB1c2giLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwic3ViQ2hpbGQiLCJPYmplY3QiLCJrZXlzIiwiY2hpbGRLZXkiLCJjaGlsZHJlbiIsImlzQSIsImlzQUNvbnRyb2wiLCJnZXRNZXRhZGF0YSIsInByb2Nlc3NBZ2dyZWdhdGlvbnMiLCJtZXRhZGF0YSIsIm1TZXR0aW5ncyIsIm1ldGFkYXRhQWdncmVnYXRpb25zIiwiZ2V0QWxsQWdncmVnYXRpb25zIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSIsImdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInJlc3VsdGluZ1BhcnNlIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJwYXRoIiwibW9kZWwiLCJmYWN0b3J5IiwidGVtcGxhdGUiLCJwcm9jZXNzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIiwic2V0dGluZ3MiLCJzZXR0aW5nc0tleSIsImJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImFsbFByb3BlcnRpZXMiLCJpc0NvbnN0YW50IiwiY29tcGlsZUNvbnN0YW50IiwiY2FsbCIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwcm9jZXNzU3RyaW5nUHJvcGVydHkiLCJ2YWx1ZSIsImFsbEV2ZW50cyIsInN0YXJ0c1dpdGgiLCJMb2ciLCJlcnJvciIsImdldE5hbWUiLCJwcm9wZXJ0eVR5cGUiLCJnZXRUeXBlIiwiRGF0YVR5cGUiLCJpbmNsdWRlcyIsInBhcnNlVmFsdWUiLCJwcm9jZXNzT2JqZWN0UHJvcGVydHkiLCJsYXRlUHJvcGVydGllcyIsInRoZW4iLCJfX2JpbmRpbmdJbmZvIiwicHJvY2Vzc1Byb3BlcnRpZXMiLCJnZXRBbGxFdmVudHMiLCJnZXRBbGxQcm9wZXJ0aWVzIiwiaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24iLCJwcm9jZXNzQ29tbWFuZCIsImNvbW1hbmRQcm9wZXJ0eSIsImNvbW1hbmQiLCJldmVudE5hbWUiLCJzcGxpdCIsImV2ZW50IiwibmFtZSIsIkV2ZW50SGFuZGxlclJlc29sdmVyIiwicmVzb2x2ZUV2ZW50SGFuZGxlciIsImpzeENvbnRyb2wiLCJDb250cm9sVHlwZSIsImtleSIsImpzeENvbnRleHQiLCJ0YXJnZXRDb250cm9sIiwiaXNGcmFnbWVudCIsImlzUnVudGltZSIsInJ1bnRpbWVCdWlsZGluZ0Jsb2NrIiwiZ2V0Q29udGVudCIsInZpZXciLCJhcHBDb21wb25lbnQiLCJjbGFzc0RlZiIsImNsYXNzIiwicmVmRGVmIiwicmVmIiwiYmluZGluZ0RlZiIsImJpbmRpbmciLCJmbERlbGVnYXRlIiwiZHREZXNpZ250aW1lIiwidGFyZ2V0Q29udHJvbEluc3RhbmNlIiwiYWRkU3R5bGVDbGFzcyIsInNldEN1cnJlbnQiLCJjdXN0b21TZXR0aW5ncyIsImRhdGEiLCJkZWxlZ2F0ZSIsImRlc2lnbnRpbWUiLCJsZW5ndGgiLCJiaW5kaW5nSW5mbyIsImJpbmRpbmdQYXJzZXIiLCJiaW5kRWxlbWVudCIsInBhcmFtZXRlcnMiLCJiaW5kaW5nRGVmS2V5IiwibGF0ZVByb3BlcnRpZXNLZXkiLCJzZXRQcm9wZXJ0eSIsImNhdGNoIiwiY29udHJvbFR5cGVGbiIsIlRleHQiLCJ0ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJqc3gtY29udHJvbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlQ29uc3RhbnQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0aXNDb25zdGFudCxcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdJbmZvSG9sZGVyLCBOb25BYnN0cmFjdENsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sUHJvcGVydGllcywgSlNYQ29udGV4dCwgTm9uQ29udHJvbFByb3BlcnRpZXMsIFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2VcIjtcbmltcG9ydCB0eXBlIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL1J1bnRpbWVCdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCBEYXRhVHlwZSBmcm9tIFwic2FwL3VpL2Jhc2UvRGF0YVR5cGVcIjtcbmltcG9ydCB7IGJpbmRpbmdQYXJzZXIgfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0TWV0YWRhdGFcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgRWxlbWVudCwgZGVmYXVsdCBhcyBVSTVFbGVtZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBFdmVudEhhbmRsZXJSZXNvbHZlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0V2ZW50SGFuZGxlclJlc29sdmVyXCI7XG5cbmNvbnN0IEZMX0RFTEVHQVRFID0gXCJmbDpkZWxlZ2F0ZVwiO1xuY29uc3QgQ09SRV9SRVFVSVJFID0gXCJjb3JlOnJlcXVpcmVcIjtcbmNvbnN0IERUX0RFU0lHTlRJTUUgPSBcImR0OmRlc2lnbnRpbWVcIjtcbmNvbnN0IGFkZENoaWxkQWdncmVnYXRpb24gPSBmdW5jdGlvbiAoXG5cdGFnZ3JlZ2F0aW9uQ2hpbGRyZW46IFJlY29yZDxzdHJpbmcsIChzdHJpbmcgfCBVSTVFbGVtZW50KVtdPixcblx0YWdncmVnYXRpb25OYW1lOiBzdHJpbmcsXG5cdGNoaWxkPzogc3RyaW5nIHwgVUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXVxuKTogdm9pZCB7XG5cdGlmIChjaGlsZCA9PT0gbnVsbCB8fCBjaGlsZCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjaGlsZCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoIWFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSkge1xuXHRcdGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSA9IFtdO1xuXHR9XG5cdGlmIChpc0NoaWxkQW5FbGVtZW50KGNoaWxkKSkge1xuXHRcdGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXS5wdXNoKGNoaWxkKTtcblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuXHRcdGNoaWxkLmZvckVhY2goKHN1YkNoaWxkKSA9PiB7XG5cdFx0XHRhZGRDaGlsZEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uQ2hpbGRyZW4sIGFnZ3JlZ2F0aW9uTmFtZSwgc3ViQ2hpbGQpO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBjaGlsZCA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID0gY2hpbGQ7XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0LmtleXMoY2hpbGQpLmZvckVhY2goKGNoaWxkS2V5KSA9PiB7XG5cdFx0XHRhZGRDaGlsZEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uQ2hpbGRyZW4sIGNoaWxkS2V5LCBjaGlsZFtjaGlsZEtleV0pO1xuXHRcdH0pO1xuXHR9XG59O1xuY29uc3QgaXNDaGlsZEFuRWxlbWVudCA9IGZ1bmN0aW9uIChjaGlsZHJlbj86IHVua25vd24pOiBjaGlsZHJlbiBpcyBFbGVtZW50IHtcblx0cmV0dXJuIChjaGlsZHJlbiBhcyBFbGVtZW50KT8uaXNBPy4oXCJzYXAudWkuY29yZS5FbGVtZW50XCIpO1xufTtcbmNvbnN0IGlzQUNvbnRyb2wgPSBmdW5jdGlvbiAoY2hpbGRyZW4/OiB0eXBlb2YgQ29udHJvbCB8IEZ1bmN0aW9uKTogY2hpbGRyZW4gaXMgTm9uQWJzdHJhY3RDbGFzczxDb250cm9sPiB7XG5cdHJldHVybiAhIShjaGlsZHJlbiBhcyB0eXBlb2YgQ29udHJvbCk/LmdldE1ldGFkYXRhO1xufTtcblxuZnVuY3Rpb24gcHJvY2Vzc0FnZ3JlZ2F0aW9ucyhtZXRhZGF0YTogTWFuYWdlZE9iamVjdE1ldGFkYXRhLCBtU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG5cdGNvbnN0IG1ldGFkYXRhQWdncmVnYXRpb25zID0gbWV0YWRhdGEuZ2V0QWxsQWdncmVnYXRpb25zKCk7XG5cdGNvbnN0IGRlZmF1bHRBZ2dyZWdhdGlvbk5hbWUgPSBtZXRhZGF0YS5nZXREZWZhdWx0QWdncmVnYXRpb25OYW1lKCk7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uQ2hpbGRyZW46IFJlY29yZDxzdHJpbmcsIChzdHJpbmcgfCBVSTVFbGVtZW50KVtdPiA9IHt9O1xuXHRhZGRDaGlsZEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uQ2hpbGRyZW4sIGRlZmF1bHRBZ2dyZWdhdGlvbk5hbWUsIG1TZXR0aW5ncy5jaGlsZHJlbiBhcyBzdHJpbmcgfCBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdKTtcblx0ZGVsZXRlIG1TZXR0aW5ncy5jaGlsZHJlbjtcblx0Ly8gZmluZCBvdXQgd2hpY2ggYWdncmVnYXRpb24gYXJlIGJvdW5kIChib3RoIGluIGNoaWxkcmVuIGFuZCBkaXJlY3RseSB1bmRlciBpdClcblx0T2JqZWN0LmtleXMobWV0YWRhdGFBZ2dyZWdhdGlvbnMpLmZvckVhY2goKGFnZ3JlZ2F0aW9uTmFtZSkgPT4ge1xuXHRcdGlmIChhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKG1TZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShhZ2dyZWdhdGlvbk5hbWUpKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgbVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHRpbmdQYXJzZSA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSk7XG5cdFx0XHRcdFx0aWYgKHJlc3VsdGluZ1BhcnNlKSB7XG5cdFx0XHRcdFx0XHRtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSA9IHtcblx0XHRcdFx0XHRcdFx0cGF0aDogcmVzdWx0aW5nUGFyc2UucGF0aCxcblx0XHRcdFx0XHRcdFx0bW9kZWw6IHJlc3VsdGluZ1BhcnNlLm1vZGVsXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSA9IHtcblx0XHRcdFx0XHRcdFx0cGF0aDogbVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0eXBlb2YgYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHQobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gYXMgeyBmYWN0b3J5OiBGdW5jdGlvbiB9KS5mYWN0b3J5ID0gYWdncmVnYXRpb25DaGlsZHJlbltcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uTmFtZVxuXHRcdFx0XHRcdF0gYXMgdW5rbm93biBhcyBGdW5jdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gYXMgeyB0ZW1wbGF0ZTogc3RyaW5nIHwgVUk1RWxlbWVudCB9KS50ZW1wbGF0ZSA9IGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXVswXTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPSBhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgYSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiBwcm9wZXJ0eSBmb3IgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnRpZXNcbiAqXG4gKiBJZiB0aGUgcHJvcGVydHkgaXMgYSBjb25zdGFudCwgaXQgY29tcGlsZXMgaXQgYXMgYSBjb25zdGFudC4gSWYgdGhlIHByb3BlcnR5IGlzIGFuIGFnZ3JlZ2F0aW9uLFxuICogaXQgY29tcGlsZXMgdGhlIGV4cHJlc3Npb24gYXMgYW4gb2JqZWN0LiBPdGhlcndpc2UsIGl0IGNvbXBpbGVzIHRoZSBleHByZXNzaW9uIG5vcm1hbGx5LlxuICogQHBhcmFtIHNldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzS2V5IFRoZSBrZXkgb2YgdGhlIHNldHRpbmcgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIFRoZSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiB0byBwcm9jZXNzXG4gKiBAcGFyYW0gYWxsUHJvcGVydGllcyBBbGwgcHJvcGVydGllcyBvZiB0aGUgY29udHJvbFxuICovXG5mdW5jdGlvbiBwcm9jZXNzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKFxuXHRzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdHNldHRpbmdzS2V5OiBrZXlvZiB0eXBlb2Ygc2V0dGluZ3MsXG5cdGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+LFxuXHRhbGxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogdm9pZCB7XG5cdGlmIChpc0NvbnN0YW50KGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbikpIHtcblx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBjb21waWxlQ29uc3RhbnQoYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7XG5cdH0gZWxzZSBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFsbFByb3BlcnRpZXMsIHNldHRpbmdzS2V5KSkge1xuXHRcdC8vIEFnZ3JlZ2F0aW9uIGNhc2UgLSB3ZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGV4cHJlc3Npb24gYnV0IGFzIGFuIG9iamVjdFxuXHRcdGlmIChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pKSB7XG5cdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSB7IHBhdGg6IGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbi5wYXRoLCBtb2RlbDogYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLm1vZGVsTmFtZSB9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBjb21waWxlRXhwcmVzc2lvbihiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pO1xuXHR9XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGEgc3RyaW5nIHByb3BlcnR5IGZvciBmdW5jdGlvbiBwcm9jZXNzUHJvcGVydGllc1xuICpcbiAqIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgYSBiaW5kaW5nIGV4cHJlc3Npb24gYW5kIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQsXG4gKiBpdCBwYXJzZXMgdGhlIHZhbHVlIHRvIHByb3ZpZGUgdGhlIGV4cGVjdGVkIGZvcm1hdC4gSWYgdGhlIHByb3BlcnR5IGlzIGFuIGV2ZW50IGhhbmRsZXIsXG4gKiBpdCBsb2dzIGFuIGVycm9yLlxuICogQHBhcmFtIHNldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzS2V5IFRoZSBrZXkgb2YgdGhlIHNldHRpbmcgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHN0cmluZyB2YWx1ZSB0byBwcm9jZXNzXG4gKiBAcGFyYW0gYWxsRXZlbnRzIEFsbCBldmVudHMgb2YgdGhlIGNvbnRyb2xcbiAqIEBwYXJhbSBhbGxQcm9wZXJ0aWVzIEFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gbWV0YWRhdGEgTWV0YWRhdGEgb2YgdGhlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc1N0cmluZ1Byb3BlcnR5KFxuXHRzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdHNldHRpbmdzS2V5OiBrZXlvZiB0eXBlb2Ygc2V0dGluZ3MsXG5cdHZhbHVlOiBzdHJpbmcsXG5cdGFsbEV2ZW50czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGFsbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRtZXRhZGF0YTogTWFuYWdlZE9iamVjdE1ldGFkYXRhXG4pOiB2b2lkIHtcblx0aWYgKCF2YWx1ZS5zdGFydHNXaXRoKFwie1wiKSkge1xuXHRcdGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChhbGxFdmVudHMsIHNldHRpbmdzS2V5KSkge1xuXHRcdFx0TG9nLmVycm9yKGBFdmVudCBoYW5kbGVycyBjYW5ub3QgYmUgc2V0IGFzIHN0cmluZyBpbiBKU1gsICR7c2V0dGluZ3NLZXl9IGluICR7bWV0YWRhdGEuZ2V0TmFtZSgpfWApO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eVR5cGUgPSAoYWxsUHJvcGVydGllc1tzZXR0aW5nc0tleV0gYXMgeyBnZXRUeXBlPzogRnVuY3Rpb24gfSk/LmdldFR5cGU/LigpO1xuXHRcdGlmIChwcm9wZXJ0eVR5cGUgJiYgcHJvcGVydHlUeXBlIGluc3RhbmNlb2YgRGF0YVR5cGUgJiYgW1wiYm9vbGVhblwiLCBcImludFwiLCBcImZsb2F0XCJdLmluY2x1ZGVzKHByb3BlcnR5VHlwZS5nZXROYW1lKCkpKSB7XG5cdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBwcm9wZXJ0eVR5cGUucGFyc2VWYWx1ZSh2YWx1ZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNldHRpbmdzW3NldHRpbmdzS2V5XSA9IHZhbHVlO1xuXHR9XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGFuIG9iamVjdCBwcm9wZXJ0eSBmb3IgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnRpZXMuXG4gKlxuICogSWYgdGhlIHByb3BlcnR5IGlzIGEgcHJvbWlzZSwgaXQgYWRkcyBpdCB0byB0aGUgbGF0ZSBwcm9wZXJ0aWVzIG1hcC4gSWYgdGhlIHByb3BlcnR5IGlzIGEgYmluZGluZyBpbmZvIGhvbGRlcixcbiAqIGl0IHNldHMgdGhlIGJpbmRpbmcgaW5mbyB0byB0aGUgc2V0dGluZ3MuXG4gKiBAcGFyYW0gc2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gc2V0dGluZ3NLZXkgVGhlIGtleSBvZiB0aGUgc2V0dGluZyBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgb2JqZWN0IHZhbHVlIHRvIHByb2Nlc3NcbiAqIEBwYXJhbSBsYXRlUHJvcGVydGllcyBBIG1hcCBvZiB0aGUgY29udHJvbCdzIGxhdGUgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBwcm9jZXNzT2JqZWN0UHJvcGVydHkoXG5cdHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0c2V0dGluZ3NLZXk6IGtleW9mIHR5cGVvZiBzZXR0aW5ncyxcblx0dmFsdWU6IHVua25vd24sXG5cdGxhdGVQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PlxuKTogdm9pZCB7XG5cdGlmICgodmFsdWUgYXMgUHJvbWlzZTx1bmtub3duPikudGhlbikge1xuXHRcdGxhdGVQcm9wZXJ0aWVzW3NldHRpbmdzS2V5XSA9IHZhbHVlIGFzIFByb21pc2U8dW5rbm93bj47XG5cdFx0ZGVsZXRlIHNldHRpbmdzW3NldHRpbmdzS2V5XTtcblx0fSBlbHNlIGlmICgodmFsdWUgYXMgQmluZGluZ0luZm9Ib2xkZXI8dW5rbm93bj4pLl9fYmluZGluZ0luZm8pIHtcblx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSAodmFsdWUgYXMgQmluZGluZ0luZm9Ib2xkZXI8dW5rbm93bj4pLl9fYmluZGluZ0luZm87XG5cdH1cbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHByb3BlcnRpZXMuXG4gKlxuICogSWYgdGhlIHByb3BlcnR5IGlzIGEgYmluZGluZ1Rvb2xraXQgZXhwcmVzc2lvbiB3ZSBuZWVkIHRvIGNvbXBpbGUgaXQuXG4gKiBFbHNlIGlmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgYXMgc3RyaW5nIChjb21waWxlZCBiaW5kaW5nIGV4cHJlc3Npb24gcmV0dXJucyBzdHJpbmcgYnkgZGVmYXVsdCBldmVuIGlmIGl0J3MgYSBib29sZWFuLCBpbnQsIGV0Yy4pIGFuZCBpdCBkb2Vzbid0IG1hdGNoIHdpdGggZXhwZWN0ZWRcbiAqIGZvcm1hdCB0aGUgdmFsdWUgaXMgcGFyc2VkIHRvIHByb3ZpZGUgZXhwZWN0ZWQgZm9ybWF0LlxuICogQHBhcmFtIG1ldGFkYXRhIE1ldGFkYXRhIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gc2V0dGluZ3MgU2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIEEgbWFwIG9mIGxhdGUgcHJvcGVydGllcyB0aGF0IG5lZWQgdG8gYmUgYXdhaXRlZCBhZnRlciB0aGUgY29udHJvbCBpcyBjcmVhdGVkXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+IHtcblx0bGV0IHNldHRpbmdzS2V5OiBrZXlvZiB0eXBlb2Ygc2V0dGluZ3M7XG5cdGNvbnN0IGxhdGVQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PiA9IHt9O1xuXHRjb25zdCBhbGxFdmVudHMgPSBtZXRhZGF0YS5nZXRBbGxFdmVudHMoKTtcblx0Y29uc3QgYWxsUHJvcGVydGllcyA9IG1ldGFkYXRhLmdldEFsbFByb3BlcnRpZXMoKTtcblxuXHRmb3IgKHNldHRpbmdzS2V5IGluIHNldHRpbmdzKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBzZXR0aW5nc1tzZXR0aW5nc0tleV07XG5cdFx0aWYgKGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKHZhbHVlKSkge1xuXHRcdFx0cHJvY2Vzc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihzZXR0aW5ncywgc2V0dGluZ3NLZXksIHZhbHVlLCBhbGxQcm9wZXJ0aWVzKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0cHJvY2Vzc09iamVjdFByb3BlcnR5KHNldHRpbmdzLCBzZXR0aW5nc0tleSwgdmFsdWUsIGxhdGVQcm9wZXJ0aWVzKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cHJvY2Vzc1N0cmluZ1Byb3BlcnR5KHNldHRpbmdzLCBzZXR0aW5nc0tleSwgdmFsdWUsIGFsbEV2ZW50cywgYWxsUHJvcGVydGllcywgbWV0YWRhdGEpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGVsZXRlIHNldHRpbmdzW3NldHRpbmdzS2V5XTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGxhdGVQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgY29tbWFuZC5cbiAqXG4gKiBSZXNvbHZlcyB0aGUgY29tbWFuZCBzZXQgb24gdGhlIGNvbnRyb2wgdmlhIHRoZSBpbnRyaW5zaWMgY2xhc3MgYXR0cmlidXRlIFwianN4OmNvbW1hbmRcIi5cbiAqIElmIG5vIGNvbW1hbmQgaGFzIGJlZW4gc2V0IG9yIHRoZSB0YXJnZXRlZCBldmVudCBkb2Vzbid0IGV4aXN0LCBubyBjb25maWd1cmF0aW9uIGlzIHNldC5cbiAqIEBwYXJhbSBtZXRhZGF0YSBNZXRhZGF0YSBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzIFNldHRpbmdzIG9mIHRoZSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NDb21tYW5kKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuXHRjb25zdCBjb21tYW5kUHJvcGVydHkgPSBzZXR0aW5nc1tcImpzeDpjb21tYW5kXCJdO1xuXHRpZiAoY29tbWFuZFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgW2NvbW1hbmQsIGV2ZW50TmFtZV0gPSAoY29tbWFuZFByb3BlcnR5IGFzIHN0cmluZykuc3BsaXQoXCJ8XCIpO1xuXHRcdGNvbnN0IGV2ZW50ID0gbWV0YWRhdGEuZ2V0QWxsRXZlbnRzKClbZXZlbnROYW1lXTtcblx0XHRpZiAoZXZlbnQgJiYgY29tbWFuZC5zdGFydHNXaXRoKFwiY21kOlwiKSkge1xuXHRcdFx0c2V0dGluZ3NbZXZlbnQubmFtZV0gPSBFdmVudEhhbmRsZXJSZXNvbHZlci5yZXNvbHZlRXZlbnRIYW5kbGVyKGNvbW1hbmQpO1xuXHRcdH1cblx0fVxuXHRkZWxldGUgc2V0dGluZ3NbXCJqc3g6Y29tbWFuZFwiXTtcbn1cblxuY29uc3QganN4Q29udHJvbCA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdENvbnRyb2xUeXBlOiBOb25BYnN0cmFjdENsYXNzPENvbnRyb2w+IHwgRnVuY3Rpb24sXG5cdHNldHRpbmdzOiBOb25Db250cm9sUHJvcGVydGllczxUPiAmIHtcblx0XHRrZXk6IHN0cmluZztcblx0XHRjaGlsZHJlbj86IEVsZW1lbnQgfCBDb250cm9sUHJvcGVydGllczxUPjtcblx0XHRyZWY/OiBSZWY8VD47XG5cdFx0YmluZGluZz86IHN0cmluZztcblx0XHRjbGFzcz86IHN0cmluZztcblx0XHRbRkxfREVMRUdBVEVdPzogc3RyaW5nO1xuXHRcdFtEVF9ERVNJR05USU1FXT86IHN0cmluZztcblx0XHRbQ09SRV9SRVFVSVJFXT86IHN0cmluZztcblx0fSxcblx0a2V5OiBzdHJpbmcsXG5cdGpzeENvbnRleHQ6IEpTWENvbnRleHRcbik6IENvbnRyb2wgfCBDb250cm9sW10gfCB1bmRlZmluZWQge1xuXHRsZXQgdGFyZ2V0Q29udHJvbDogQ29udHJvbCB8IENvbnRyb2xbXSB8IHVuZGVmaW5lZDtcblxuXHRpZiAoKENvbnRyb2xUeXBlIGFzIHsgaXNGcmFnbWVudD86IGJvb2xlYW4gfSk/LmlzRnJhZ21lbnQpIHtcblx0XHR0YXJnZXRDb250cm9sID0gc2V0dGluZ3MuY2hpbGRyZW4gYXMgQ29udHJvbCB8IENvbnRyb2xbXTtcblx0fSBlbHNlIGlmICgoQ29udHJvbFR5cGUgYXMgdHlwZW9mIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSk/LmlzUnVudGltZSkge1xuXHRcdGNvbnN0IHJ1bnRpbWVCdWlsZGluZ0Jsb2NrID0gbmV3IChDb250cm9sVHlwZSBhcyB0eXBlb2YgUnVudGltZUJ1aWxkaW5nQmxvY2spKHNldHRpbmdzIGFzIHVua25vd24gYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IHJ1bnRpbWVCdWlsZGluZ0Jsb2NrLmdldENvbnRlbnQ/Lihqc3hDb250ZXh0LnZpZXchLCBqc3hDb250ZXh0LmFwcENvbXBvbmVudCEpO1xuXHR9IGVsc2UgaWYgKGlzQUNvbnRyb2woQ29udHJvbFR5cGUpKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBDb250cm9sVHlwZS5nZXRNZXRhZGF0YSgpO1xuXHRcdGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2V0dGluZ3NbXCJrZXlcIl0gPSBrZXk7XG5cdFx0fVxuXHRcdGNvbnN0IGxhdGVQcm9wZXJ0aWVzID0gcHJvY2Vzc1Byb3BlcnRpZXMobWV0YWRhdGEsIHNldHRpbmdzKTtcblx0XHRwcm9jZXNzQ29tbWFuZChtZXRhZGF0YSwgc2V0dGluZ3MpO1xuXHRcdHByb2Nlc3NBZ2dyZWdhdGlvbnMobWV0YWRhdGEsIHNldHRpbmdzKTtcblx0XHRjb25zdCBjbGFzc0RlZiA9IHNldHRpbmdzLmNsYXNzO1xuXHRcdGNvbnN0IHJlZkRlZiA9IHNldHRpbmdzLnJlZjtcblx0XHRjb25zdCBiaW5kaW5nRGVmID0gc2V0dGluZ3MuYmluZGluZztcblx0XHRjb25zdCBmbERlbGVnYXRlID0gc2V0dGluZ3NbRkxfREVMRUdBVEVdO1xuXHRcdGNvbnN0IGR0RGVzaWdudGltZSA9IHNldHRpbmdzW0RUX0RFU0lHTlRJTUVdO1xuXHRcdGRlbGV0ZSBzZXR0aW5ncy5yZWY7XG5cdFx0ZGVsZXRlIHNldHRpbmdzLmNsYXNzO1xuXHRcdGRlbGV0ZSBzZXR0aW5ncy5iaW5kaW5nO1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tGTF9ERUxFR0FURV07XG5cdFx0ZGVsZXRlIHNldHRpbmdzW0RUX0RFU0lHTlRJTUVdO1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tDT1JFX1JFUVVJUkVdOyAvLyBDb3JlIHJlcXVpcmUgaXMgbm90IHVzZWZ1bCBpbiBjb250cm9sIG1vZGVcblx0XHRjb25zdCB0YXJnZXRDb250cm9sSW5zdGFuY2UgPSBuZXcgQ29udHJvbFR5cGUoc2V0dGluZ3MgYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdFx0aWYgKGNsYXNzRGVmKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sSW5zdGFuY2UuYWRkU3R5bGVDbGFzcyhjbGFzc0RlZik7XG5cdFx0fVxuXHRcdGlmIChyZWZEZWYpIHtcblx0XHRcdHJlZkRlZi5zZXRDdXJyZW50KHRhcmdldENvbnRyb2xJbnN0YW5jZSBhcyB1bmtub3duIGFzIFQpO1xuXHRcdH1cblx0XHRjb25zdCBjdXN0b21TZXR0aW5ncyA9IHRhcmdldENvbnRyb2xJbnN0YW5jZS5kYXRhKFwic2FwLXVpLWN1c3RvbS1zZXR0aW5nc1wiKSA/PyB7fTtcblx0XHRpZiAoZmxEZWxlZ2F0ZSkge1xuXHRcdFx0Y3VzdG9tU2V0dGluZ3NbXCJzYXAudWkuZmxcIl0gPz89IHt9O1xuXHRcdFx0Y3VzdG9tU2V0dGluZ3NbXCJzYXAudWkuZmxcIl0uZGVsZWdhdGUgPSBmbERlbGVnYXRlO1xuXHRcdH1cblx0XHRpZiAoZHREZXNpZ250aW1lKSB7XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5kdFwiXSA/Pz0ge307XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5kdFwiXS5kZXNpZ250aW1lID0gZHREZXNpZ250aW1lO1xuXHRcdH1cblx0XHRpZiAoT2JqZWN0LmtleXMoY3VzdG9tU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5kYXRhKFwic2FwLXVpLWN1c3RvbS1zZXR0aW5nc1wiLCBjdXN0b21TZXR0aW5ncyk7XG5cdFx0fVxuXG5cdFx0aWYgKGJpbmRpbmdEZWYpIHtcblx0XHRcdGlmICh0eXBlb2YgYmluZGluZ0RlZiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nSW5mbyA9IGJpbmRpbmdQYXJzZXIoYmluZGluZ0RlZik7XG5cdFx0XHRcdGlmIChiaW5kaW5nSW5mbykge1xuXHRcdFx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5iaW5kRWxlbWVudCh7XG5cdFx0XHRcdFx0XHRtb2RlbDogYmluZGluZ0luZm8ubW9kZWwgPz8gdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0cGF0aDogYmluZGluZ0luZm8ucGF0aCxcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnM6IGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMgPz8gdW5kZWZpbmVkXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmJpbmRFbGVtZW50KGJpbmRpbmdEZWYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBXZSBjb25zaWRlciBpdCdzIGFuIG9iamVjdFxuXHRcdFx0XHRPYmplY3Qua2V5cyhiaW5kaW5nRGVmKS5mb3JFYWNoKChiaW5kaW5nRGVmS2V5KSA9PiB7XG5cdFx0XHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmJpbmRFbGVtZW50KHsgbW9kZWw6IGJpbmRpbmdEZWZLZXksIHBhdGg6IGJpbmRpbmdEZWZbYmluZGluZ0RlZktleV0gfSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGxhdGVQcm9wZXJ0aWVzS2V5IGluIGxhdGVQcm9wZXJ0aWVzKSB7XG5cdFx0XHRsYXRlUHJvcGVydGllc1tsYXRlUHJvcGVydGllc0tleV1cblx0XHRcdFx0LnRoZW4oKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRhcmdldENvbnRyb2xJbnN0YW5jZS5zZXRQcm9wZXJ0eShsYXRlUHJvcGVydGllc0tleSwgdmFsdWUpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBDb3VsZG4ndCBzZXQgcHJvcGVydHkgJHtsYXRlUHJvcGVydGllc0tleX0gb24gJHtDb250cm9sVHlwZS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1gLCBlcnJvciwgXCJqc3hDb250cm9sXCIpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0dGFyZ2V0Q29udHJvbCA9IHRhcmdldENvbnRyb2xJbnN0YW5jZTtcblx0fSBlbHNlIGlmICh0eXBlb2YgQ29udHJvbFR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGNvbnN0IGNvbnRyb2xUeXBlRm4gPSBDb250cm9sVHlwZTtcblx0XHR0YXJnZXRDb250cm9sID0gY29udHJvbFR5cGVGbihzZXR0aW5ncyBhcyAkQ29udHJvbFNldHRpbmdzKTtcblx0fSBlbHNlIHtcblx0XHR0YXJnZXRDb250cm9sID0gbmV3IFRleHQoeyB0ZXh0OiBcIk1pc3NpbmcgY29tcG9uZW50IFwiICsgKENvbnRyb2xUeXBlIGFzIHN0cmluZykgfSk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0Q29udHJvbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGpzeENvbnRyb2w7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7RUF1QkEsTUFBTUEsV0FBVyxHQUFHLGFBQWE7RUFDakMsTUFBTUMsWUFBWSxHQUFHLGNBQWM7RUFDbkMsTUFBTUMsYUFBYSxHQUFHLGVBQWU7RUFDckMsTUFBTUMsbUJBQW1CLEdBQUcsU0FBQUEsQ0FDM0JDLG1CQUE0RCxFQUM1REMsZUFBdUIsRUFDdkJDLEtBQTBDLEVBQ25DO0lBQ1AsSUFBSUEsS0FBSyxLQUFLLElBQUksSUFBSUEsS0FBSyxLQUFLQyxTQUFTLElBQUksT0FBT0QsS0FBSyxLQUFL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
|
|
284
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGTF9ERUxFR0FURSIsIkNPUkVfUkVRVUlSRSIsIkRUX0RFU0lHTlRJTUUiLCJhZGRDaGlsZEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25DaGlsZHJlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNoaWxkIiwidW5kZWZpbmVkIiwiaXNDaGlsZEFuRWxlbWVudCIsInB1c2giLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwic3ViQ2hpbGQiLCJPYmplY3QiLCJrZXlzIiwiY2hpbGRLZXkiLCJjaGlsZHJlbiIsImlzQSIsImlzQUNvbnRyb2wiLCJnZXRNZXRhZGF0YSIsInByb2Nlc3NBZ2dyZWdhdGlvbnMiLCJtZXRhZGF0YSIsIm1TZXR0aW5ncyIsIm1ldGFkYXRhQWdncmVnYXRpb25zIiwiZ2V0QWxsQWdncmVnYXRpb25zIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSIsImdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInJlc3VsdGluZ1BhcnNlIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJwYXRoIiwibW9kZWwiLCJmYWN0b3J5IiwidGVtcGxhdGUiLCJwcm9jZXNzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIiwic2V0dGluZ3MiLCJzZXR0aW5nc0tleSIsImJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImFsbFByb3BlcnRpZXMiLCJpc0NvbnN0YW50IiwiY29tcGlsZUNvbnN0YW50IiwiY2FsbCIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwcm9jZXNzU3RyaW5nUHJvcGVydHkiLCJ2YWx1ZSIsImFsbEV2ZW50cyIsInN0YXJ0c1dpdGgiLCJMb2ciLCJlcnJvciIsImdldE5hbWUiLCJwcm9wZXJ0eVR5cGUiLCJnZXRUeXBlIiwiRGF0YVR5cGUiLCJpbmNsdWRlcyIsInBhcnNlVmFsdWUiLCJwcm9jZXNzT2JqZWN0UHJvcGVydHkiLCJsYXRlUHJvcGVydGllcyIsInRoZW4iLCJfX2JpbmRpbmdJbmZvIiwicHJvY2Vzc1Byb3BlcnRpZXMiLCJnZXRBbGxFdmVudHMiLCJnZXRBbGxQcm9wZXJ0aWVzIiwiaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24iLCJwcm9jZXNzQ29tbWFuZCIsImNvbW1hbmRQcm9wZXJ0eSIsImNvbW1hbmQiLCJldmVudE5hbWUiLCJzcGxpdCIsImV2ZW50IiwibmFtZSIsIkV2ZW50SGFuZGxlclJlc29sdmVyIiwicmVzb2x2ZUV2ZW50SGFuZGxlciIsImpzeENvbnRyb2wiLCJDb250cm9sVHlwZSIsImtleSIsImpzeENvbnRleHQiLCJ0YXJnZXRDb250cm9sIiwiaXNGcmFnbWVudCIsImNsYXNzRGVmIiwiY2xhc3MiLCJyZWZEZWYiLCJyZWYiLCJiaW5kaW5nRGVmIiwiYmluZGluZyIsImZsRGVsZWdhdGUiLCJkdERlc2lnbnRpbWUiLCJ0YXJnZXRDb250cm9sSW5zdGFuY2UiLCJhZGRTdHlsZUNsYXNzIiwic2V0Q3VycmVudCIsImN1c3RvbVNldHRpbmdzIiwiZGF0YSIsImRlbGVnYXRlIiwiZGVzaWdudGltZSIsImxlbmd0aCIsImJpbmRpbmdJbmZvIiwiYmluZGluZ1BhcnNlciIsImJpbmRFbGVtZW50IiwicGFyYW1ldGVycyIsImJpbmRpbmdEZWZLZXkiLCJsYXRlUHJvcGVydGllc0tleSIsInNldFByb3BlcnR5IiwiY2F0Y2giLCJjb250cm9sVHlwZUZuIiwiVGV4dCIsInRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbImpzeC1jb250cm9sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGNvbXBpbGVDb25zdGFudCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRpc0NvbnN0YW50LFxuXHRpc1BhdGhJbk1vZGVsRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ0luZm9Ib2xkZXIsIE5vbkFic3RyYWN0Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xQcm9wZXJ0aWVzLCBKU1hDb250ZXh0LCBOb25Db250cm9sUHJvcGVydGllcywgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgRGF0YVR5cGUgZnJvbSBcInNhcC91aS9iYXNlL0RhdGFUeXBlXCI7XG5pbXBvcnQgeyBiaW5kaW5nUGFyc2VyIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3RNZXRhZGF0YSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdE1ldGFkYXRhXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIEVsZW1lbnQsIGRlZmF1bHQgYXMgVUk1RWxlbWVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRXZlbnRIYW5kbGVyUmVzb2x2ZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9FdmVudEhhbmRsZXJSZXNvbHZlclwiO1xuXG5jb25zdCBGTF9ERUxFR0FURSA9IFwiZmw6ZGVsZWdhdGVcIjtcbmNvbnN0IENPUkVfUkVRVUlSRSA9IFwiY29yZTpyZXF1aXJlXCI7XG5jb25zdCBEVF9ERVNJR05USU1FID0gXCJkdDpkZXNpZ250aW1lXCI7XG5jb25zdCBhZGRDaGlsZEFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24gKFxuXHRhZ2dyZWdhdGlvbkNoaWxkcmVuOiBSZWNvcmQ8c3RyaW5nLCAoc3RyaW5nIHwgVUk1RWxlbWVudClbXT4sXG5cdGFnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nLFxuXHRjaGlsZD86IHN0cmluZyB8IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W11cbik6IHZvaWQge1xuXHRpZiAoY2hpbGQgPT09IG51bGwgfHwgY2hpbGQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgY2hpbGQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKCFhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0pIHtcblx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0gPSBbXTtcblx0fVxuXHRpZiAoaXNDaGlsZEFuRWxlbWVudChjaGlsZCkpIHtcblx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0ucHVzaChjaGlsZCk7XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGlsZCkpIHtcblx0XHRjaGlsZC5mb3JFYWNoKChzdWJDaGlsZCkgPT4ge1xuXHRcdFx0YWRkQ2hpbGRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkNoaWxkcmVuLCBhZ2dyZWdhdGlvbk5hbWUsIHN1YkNoaWxkKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgY2hpbGQgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSA9IGNoaWxkO1xuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5rZXlzKGNoaWxkKS5mb3JFYWNoKChjaGlsZEtleSkgPT4ge1xuXHRcdFx0YWRkQ2hpbGRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkNoaWxkcmVuLCBjaGlsZEtleSwgY2hpbGRbY2hpbGRLZXldKTtcblx0XHR9KTtcblx0fVxufTtcbmNvbnN0IGlzQ2hpbGRBbkVsZW1lbnQgPSBmdW5jdGlvbiAoY2hpbGRyZW4/OiB1bmtub3duKTogY2hpbGRyZW4gaXMgRWxlbWVudCB7XG5cdHJldHVybiAoY2hpbGRyZW4gYXMgRWxlbWVudCk/LmlzQT8uKFwic2FwLnVpLmNvcmUuRWxlbWVudFwiKTtcbn07XG5jb25zdCBpc0FDb250cm9sID0gZnVuY3Rpb24gKGNoaWxkcmVuPzogdHlwZW9mIENvbnRyb2wgfCBGdW5jdGlvbik6IGNoaWxkcmVuIGlzIE5vbkFic3RyYWN0Q2xhc3M8Q29udHJvbD4ge1xuXHRyZXR1cm4gISEoY2hpbGRyZW4gYXMgdHlwZW9mIENvbnRyb2wpPy5nZXRNZXRhZGF0YTtcbn07XG5cbmZ1bmN0aW9uIHByb2Nlc3NBZ2dyZWdhdGlvbnMobWV0YWRhdGE6IE1hbmFnZWRPYmplY3RNZXRhZGF0YSwgbVNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuXHRjb25zdCBtZXRhZGF0YUFnZ3JlZ2F0aW9ucyA9IG1ldGFkYXRhLmdldEFsbEFnZ3JlZ2F0aW9ucygpO1xuXHRjb25zdCBkZWZhdWx0QWdncmVnYXRpb25OYW1lID0gbWV0YWRhdGEuZ2V0RGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSgpO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkNoaWxkcmVuOiBSZWNvcmQ8c3RyaW5nLCAoc3RyaW5nIHwgVUk1RWxlbWVudClbXT4gPSB7fTtcblx0YWRkQ2hpbGRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkNoaWxkcmVuLCBkZWZhdWx0QWdncmVnYXRpb25OYW1lLCBtU2V0dGluZ3MuY2hpbGRyZW4gYXMgc3RyaW5nIHwgVUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXSk7XG5cdGRlbGV0ZSBtU2V0dGluZ3MuY2hpbGRyZW47XG5cdC8vIGZpbmQgb3V0IHdoaWNoIGFnZ3JlZ2F0aW9uIGFyZSBib3VuZCAoYm90aCBpbiBjaGlsZHJlbiBhbmQgZGlyZWN0bHkgdW5kZXIgaXQpXG5cdE9iamVjdC5rZXlzKG1ldGFkYXRhQWdncmVnYXRpb25zKS5mb3JFYWNoKChhZ2dyZWdhdGlvbk5hbWUpID0+IHtcblx0XHRpZiAoYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChtU2V0dGluZ3MuaGFzT3duUHJvcGVydHkoYWdncmVnYXRpb25OYW1lKSkge1xuXHRcdFx0XHRpZiAodHlwZW9mIG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0aW5nUGFyc2UgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0pO1xuXHRcdFx0XHRcdGlmIChyZXN1bHRpbmdQYXJzZSkge1xuXHRcdFx0XHRcdFx0bVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRcdHBhdGg6IHJlc3VsdGluZ1BhcnNlLnBhdGgsXG5cdFx0XHRcdFx0XHRcdG1vZGVsOiByZXN1bHRpbmdQYXJzZS5tb2RlbFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRcdHBhdGg6IG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodHlwZW9mIGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0KG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdIGFzIHsgZmFjdG9yeTogRnVuY3Rpb24gfSkuZmFjdG9yeSA9IGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bXG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbk5hbWVcblx0XHRcdFx0XHRdIGFzIHVua25vd24gYXMgRnVuY3Rpb247XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdIGFzIHsgdGVtcGxhdGU6IHN0cmluZyB8IFVJNUVsZW1lbnQgfSkudGVtcGxhdGUgPSBhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV1bMF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdID0gYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGEgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24gcHJvcGVydHkgZm9yIGZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzXG4gKlxuICogSWYgdGhlIHByb3BlcnR5IGlzIGEgY29uc3RhbnQsIGl0IGNvbXBpbGVzIGl0IGFzIGEgY29uc3RhbnQuIElmIHRoZSBwcm9wZXJ0eSBpcyBhbiBhZ2dyZWdhdGlvbixcbiAqIGl0IGNvbXBpbGVzIHRoZSBleHByZXNzaW9uIGFzIGFuIG9iamVjdC4gT3RoZXJ3aXNlLCBpdCBjb21waWxlcyB0aGUgZXhwcmVzc2lvbiBub3JtYWxseS5cbiAqIEBwYXJhbSBzZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEBwYXJhbSBzZXR0aW5nc0tleSBUaGUga2V5IG9mIHRoZSBzZXR0aW5nIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiBUaGUgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24gdG8gcHJvY2Vzc1xuICogQHBhcmFtIGFsbFByb3BlcnRpZXMgQWxsIHByb3BlcnRpZXMgb2YgdGhlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihcblx0c2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRzZXR0aW5nc0tleToga2V5b2YgdHlwZW9mIHNldHRpbmdzLFxuXHRiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPixcblx0YWxsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHZvaWQge1xuXHRpZiAoaXNDb25zdGFudChiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pKSB7XG5cdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0gY29tcGlsZUNvbnN0YW50KGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgZmFsc2UsIHRydWUsIHRydWUpO1xuXHR9IGVsc2UgaWYgKCFPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChhbGxQcm9wZXJ0aWVzLCBzZXR0aW5nc0tleSkpIHtcblx0XHQvLyBBZ2dyZWdhdGlvbiBjYXNlIC0gd2UgbmVlZCB0byBjb21waWxlIHRoZSBleHByZXNzaW9uIGJ1dCBhcyBhbiBvYmplY3Rcblx0XHRpZiAoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKSkge1xuXHRcdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0geyBwYXRoOiBiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ucGF0aCwgbW9kZWw6IGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbi5tb2RlbE5hbWUgfTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0gY29tcGlsZUV4cHJlc3Npb24oYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKTtcblx0fVxufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBhIHN0cmluZyBwcm9wZXJ0eSBmb3IgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnRpZXNcbiAqXG4gKiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGEgYmluZGluZyBleHByZXNzaW9uIGFuZCBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LFxuICogaXQgcGFyc2VzIHRoZSB2YWx1ZSB0byBwcm92aWRlIHRoZSBleHBlY3RlZCBmb3JtYXQuIElmIHRoZSBwcm9wZXJ0eSBpcyBhbiBldmVudCBoYW5kbGVyLFxuICogaXQgbG9ncyBhbiBlcnJvci5cbiAqIEBwYXJhbSBzZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEBwYXJhbSBzZXR0aW5nc0tleSBUaGUga2V5IG9mIHRoZSBzZXR0aW5nIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHZhbHVlIFRoZSBzdHJpbmcgdmFsdWUgdG8gcHJvY2Vzc1xuICogQHBhcmFtIGFsbEV2ZW50cyBBbGwgZXZlbnRzIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gYWxsUHJvcGVydGllcyBBbGwgcHJvcGVydGllcyBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIG1ldGFkYXRhIE1ldGFkYXRhIG9mIHRoZSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NTdHJpbmdQcm9wZXJ0eShcblx0c2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRzZXR0aW5nc0tleToga2V5b2YgdHlwZW9mIHNldHRpbmdzLFxuXHR2YWx1ZTogc3RyaW5nLFxuXHRhbGxFdmVudHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRhbGxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0bWV0YWRhdGE6IE1hbmFnZWRPYmplY3RNZXRhZGF0YVxuKTogdm9pZCB7XG5cdGlmICghdmFsdWUuc3RhcnRzV2l0aChcIntcIikpIHtcblx0XHRpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoYWxsRXZlbnRzLCBzZXR0aW5nc0tleSkpIHtcblx0XHRcdExvZy5lcnJvcihgRXZlbnQgaGFuZGxlcnMgY2Fubm90IGJlIHNldCBhcyBzdHJpbmcgaW4gSlNYLCAke3NldHRpbmdzS2V5fSBpbiAke21ldGFkYXRhLmdldE5hbWUoKX1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlUeXBlID0gKGFsbFByb3BlcnRpZXNbc2V0dGluZ3NLZXldIGFzIHsgZ2V0VHlwZT86IEZ1bmN0aW9uIH0pPy5nZXRUeXBlPy4oKTtcblx0XHRpZiAocHJvcGVydHlUeXBlICYmIHByb3BlcnR5VHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlICYmIFtcImJvb2xlYW5cIiwgXCJpbnRcIiwgXCJmbG9hdFwiXS5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUuZ2V0TmFtZSgpKSkge1xuXHRcdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0gcHJvcGVydHlUeXBlLnBhcnNlVmFsdWUodmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSB2YWx1ZTtcblx0fVxufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBhbiBvYmplY3QgcHJvcGVydHkgZm9yIGZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzLlxuICpcbiAqIElmIHRoZSBwcm9wZXJ0eSBpcyBhIHByb21pc2UsIGl0IGFkZHMgaXQgdG8gdGhlIGxhdGUgcHJvcGVydGllcyBtYXAuIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGJpbmRpbmcgaW5mbyBob2xkZXIsXG4gKiBpdCBzZXRzIHRoZSBiaW5kaW5nIGluZm8gdG8gdGhlIHNldHRpbmdzLlxuICogQHBhcmFtIHNldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzS2V5IFRoZSBrZXkgb2YgdGhlIHNldHRpbmcgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gdmFsdWUgVGhlIG9iamVjdCB2YWx1ZSB0byBwcm9jZXNzXG4gKiBAcGFyYW0gbGF0ZVByb3BlcnRpZXMgQSBtYXAgb2YgdGhlIGNvbnRyb2wncyBsYXRlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc09iamVjdFByb3BlcnR5KFxuXHRzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdHNldHRpbmdzS2V5OiBrZXlvZiB0eXBlb2Ygc2V0dGluZ3MsXG5cdHZhbHVlOiB1bmtub3duLFxuXHRsYXRlUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvbWlzZTx1bmtub3duPj5cbik6IHZvaWQge1xuXHRpZiAoKHZhbHVlIGFzIFByb21pc2U8dW5rbm93bj4pLnRoZW4pIHtcblx0XHRsYXRlUHJvcGVydGllc1tzZXR0aW5nc0tleV0gPSB2YWx1ZSBhcyBQcm9taXNlPHVua25vd24+O1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tzZXR0aW5nc0tleV07XG5cdH0gZWxzZSBpZiAoKHZhbHVlIGFzIEJpbmRpbmdJbmZvSG9sZGVyPHVua25vd24+KS5fX2JpbmRpbmdJbmZvKSB7XG5cdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0gKHZhbHVlIGFzIEJpbmRpbmdJbmZvSG9sZGVyPHVua25vd24+KS5fX2JpbmRpbmdJbmZvO1xuXHR9XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSBwcm9wZXJ0aWVzLlxuICpcbiAqIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGJpbmRpbmdUb29sa2l0IGV4cHJlc3Npb24gd2UgbmVlZCB0byBjb21waWxlIGl0LlxuICogRWxzZSBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IGFzIHN0cmluZyAoY29tcGlsZWQgYmluZGluZyBleHByZXNzaW9uIHJldHVybnMgc3RyaW5nIGJ5IGRlZmF1bHQgZXZlbiBpZiBpdCdzIGEgYm9vbGVhbiwgaW50LCBldGMuKSBhbmQgaXQgZG9lc24ndCBtYXRjaCB3aXRoIGV4cGVjdGVkXG4gKiBmb3JtYXQgdGhlIHZhbHVlIGlzIHBhcnNlZCB0byBwcm92aWRlIGV4cGVjdGVkIGZvcm1hdC5cbiAqIEBwYXJhbSBtZXRhZGF0YSBNZXRhZGF0YSBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzIFNldHRpbmdzIG9mIHRoZSBjb250cm9sXG4gKiBAcmV0dXJucyBBIG1hcCBvZiBsYXRlIHByb3BlcnRpZXMgdGhhdCBuZWVkIHRvIGJlIGF3YWl0ZWQgYWZ0ZXIgdGhlIGNvbnRyb2wgaXMgY3JlYXRlZFxuICovXG5mdW5jdGlvbiBwcm9jZXNzUHJvcGVydGllcyhtZXRhZGF0YTogTWFuYWdlZE9iamVjdE1ldGFkYXRhLCBzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PiB7XG5cdGxldCBzZXR0aW5nc0tleToga2V5b2YgdHlwZW9mIHNldHRpbmdzO1xuXHRjb25zdCBsYXRlUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvbWlzZTx1bmtub3duPj4gPSB7fTtcblx0Y29uc3QgYWxsRXZlbnRzID0gbWV0YWRhdGEuZ2V0QWxsRXZlbnRzKCk7XG5cdGNvbnN0IGFsbFByb3BlcnRpZXMgPSBtZXRhZGF0YS5nZXRBbGxQcm9wZXJ0aWVzKCk7XG5cblx0Zm9yIChzZXR0aW5nc0tleSBpbiBzZXR0aW5ncykge1xuXHRcdGNvbnN0IHZhbHVlID0gc2V0dGluZ3Nbc2V0dGluZ3NLZXldO1xuXHRcdGlmIChpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbih2YWx1ZSkpIHtcblx0XHRcdHByb2Nlc3NCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24oc2V0dGluZ3MsIHNldHRpbmdzS2V5LCB2YWx1ZSwgYWxsUHJvcGVydGllcyk7XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdHByb2Nlc3NPYmplY3RQcm9wZXJ0eShzZXR0aW5ncywgc2V0dGluZ3NLZXksIHZhbHVlLCBsYXRlUHJvcGVydGllcyk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHByb2Nlc3NTdHJpbmdQcm9wZXJ0eShzZXR0aW5ncywgc2V0dGluZ3NLZXksIHZhbHVlLCBhbGxFdmVudHMsIGFsbFByb3BlcnRpZXMsIG1ldGFkYXRhKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRlbGV0ZSBzZXR0aW5nc1tzZXR0aW5nc0tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBsYXRlUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIGNvbW1hbmQuXG4gKlxuICogUmVzb2x2ZXMgdGhlIGNvbW1hbmQgc2V0IG9uIHRoZSBjb250cm9sIHZpYSB0aGUgaW50cmluc2ljIGNsYXNzIGF0dHJpYnV0ZSBcImpzeDpjb21tYW5kXCIuXG4gKiBJZiBubyBjb21tYW5kIGhhcyBiZWVuIHNldCBvciB0aGUgdGFyZ2V0ZWQgZXZlbnQgZG9lc24ndCBleGlzdCwgbm8gY29uZmlndXJhdGlvbiBpcyBzZXQuXG4gKiBAcGFyYW0gbWV0YWRhdGEgTWV0YWRhdGEgb2YgdGhlIGNvbnRyb2xcbiAqIEBwYXJhbSBzZXR0aW5ncyBTZXR0aW5ncyBvZiB0aGUgY29udHJvbFxuICovXG5mdW5jdGlvbiBwcm9jZXNzQ29tbWFuZChtZXRhZGF0YTogTWFuYWdlZE9iamVjdE1ldGFkYXRhLCBzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcblx0Y29uc3QgY29tbWFuZFByb3BlcnR5ID0gc2V0dGluZ3NbXCJqc3g6Y29tbWFuZFwiXTtcblx0aWYgKGNvbW1hbmRQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IFtjb21tYW5kLCBldmVudE5hbWVdID0gKGNvbW1hbmRQcm9wZXJ0eSBhcyBzdHJpbmcpLnNwbGl0KFwifFwiKTtcblx0XHRjb25zdCBldmVudCA9IG1ldGFkYXRhLmdldEFsbEV2ZW50cygpW2V2ZW50TmFtZV07XG5cdFx0aWYgKGV2ZW50ICYmIGNvbW1hbmQuc3RhcnRzV2l0aChcImNtZDpcIikpIHtcblx0XHRcdHNldHRpbmdzW2V2ZW50Lm5hbWVdID0gRXZlbnRIYW5kbGVyUmVzb2x2ZXIucmVzb2x2ZUV2ZW50SGFuZGxlcihjb21tYW5kKTtcblx0XHR9XG5cdH1cblx0ZGVsZXRlIHNldHRpbmdzW1wianN4OmNvbW1hbmRcIl07XG59XG5cbmNvbnN0IGpzeENvbnRyb2wgPSBmdW5jdGlvbiA8VCBleHRlbmRzIEVsZW1lbnQ+KFxuXHRDb250cm9sVHlwZTogTm9uQWJzdHJhY3RDbGFzczxDb250cm9sPiB8IEZ1bmN0aW9uLFxuXHRzZXR0aW5nczogTm9uQ29udHJvbFByb3BlcnRpZXM8VD4gJiB7XG5cdFx0a2V5OiBzdHJpbmc7XG5cdFx0Y2hpbGRyZW4/OiBFbGVtZW50IHwgQ29udHJvbFByb3BlcnRpZXM8VD47XG5cdFx0cmVmPzogUmVmPFQ+O1xuXHRcdGJpbmRpbmc/OiBzdHJpbmc7XG5cdFx0Y2xhc3M/OiBzdHJpbmc7XG5cdFx0W0ZMX0RFTEVHQVRFXT86IHN0cmluZztcblx0XHRbRFRfREVTSUdOVElNRV0/OiBzdHJpbmc7XG5cdFx0W0NPUkVfUkVRVUlSRV0/OiBzdHJpbmc7XG5cdH0sXG5cdGtleTogc3RyaW5nLFxuXHRqc3hDb250ZXh0OiBKU1hDb250ZXh0XG4pOiBDb250cm9sIHwgQ29udHJvbFtdIHwgdW5kZWZpbmVkIHtcblx0bGV0IHRhcmdldENvbnRyb2w6IENvbnRyb2wgfCBDb250cm9sW10gfCB1bmRlZmluZWQ7XG5cblx0aWYgKChDb250cm9sVHlwZSBhcyB7IGlzRnJhZ21lbnQ/OiBib29sZWFuIH0pPy5pc0ZyYWdtZW50KSB7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IHNldHRpbmdzLmNoaWxkcmVuIGFzIENvbnRyb2wgfCBDb250cm9sW107XG5cdH0gZWxzZSBpZiAoaXNBQ29udHJvbChDb250cm9sVHlwZSkpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IENvbnRyb2xUeXBlLmdldE1ldGFkYXRhKCk7XG5cdFx0aWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzZXR0aW5nc1tcImtleVwiXSA9IGtleTtcblx0XHR9XG5cdFx0Y29uc3QgbGF0ZVByb3BlcnRpZXMgPSBwcm9jZXNzUHJvcGVydGllcyhtZXRhZGF0YSwgc2V0dGluZ3MpO1xuXHRcdHByb2Nlc3NDb21tYW5kKG1ldGFkYXRhLCBzZXR0aW5ncyk7XG5cdFx0cHJvY2Vzc0FnZ3JlZ2F0aW9ucyhtZXRhZGF0YSwgc2V0dGluZ3MpO1xuXHRcdGNvbnN0IGNsYXNzRGVmID0gc2V0dGluZ3MuY2xhc3M7XG5cdFx0Y29uc3QgcmVmRGVmID0gc2V0dGluZ3MucmVmO1xuXHRcdGNvbnN0IGJpbmRpbmdEZWYgPSBzZXR0aW5ncy5iaW5kaW5nO1xuXHRcdGNvbnN0IGZsRGVsZWdhdGUgPSBzZXR0aW5nc1tGTF9ERUxFR0FURV07XG5cdFx0Y29uc3QgZHREZXNpZ250aW1lID0gc2V0dGluZ3NbRFRfREVTSUdOVElNRV07XG5cdFx0ZGVsZXRlIHNldHRpbmdzLnJlZjtcblx0XHRkZWxldGUgc2V0dGluZ3MuY2xhc3M7XG5cdFx0ZGVsZXRlIHNldHRpbmdzLmJpbmRpbmc7XG5cdFx0ZGVsZXRlIHNldHRpbmdzW0ZMX0RFTEVHQVRFXTtcblx0XHRkZWxldGUgc2V0dGluZ3NbRFRfREVTSUdOVElNRV07XG5cdFx0ZGVsZXRlIHNldHRpbmdzW0NPUkVfUkVRVUlSRV07IC8vIENvcmUgcmVxdWlyZSBpcyBub3QgdXNlZnVsIGluIGNvbnRyb2wgbW9kZVxuXHRcdGNvbnN0IHRhcmdldENvbnRyb2xJbnN0YW5jZSA9IG5ldyBDb250cm9sVHlwZShzZXR0aW5ncyBhcyAkQ29udHJvbFNldHRpbmdzKTtcblx0XHRpZiAoY2xhc3NEZWYpIHtcblx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5hZGRTdHlsZUNsYXNzKGNsYXNzRGVmKTtcblx0XHR9XG5cdFx0aWYgKHJlZkRlZikge1xuXHRcdFx0cmVmRGVmLnNldEN1cnJlbnQodGFyZ2V0Q29udHJvbEluc3RhbmNlIGFzIHVua25vd24gYXMgVCk7XG5cdFx0fVxuXHRcdGNvbnN0IGN1c3RvbVNldHRpbmdzID0gdGFyZ2V0Q29udHJvbEluc3RhbmNlLmRhdGEoXCJzYXAtdWktY3VzdG9tLXNldHRpbmdzXCIpID8/IHt9O1xuXHRcdGlmIChmbERlbGVnYXRlKSB7XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5mbFwiXSA/Pz0ge307XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5mbFwiXS5kZWxlZ2F0ZSA9IGZsRGVsZWdhdGU7XG5cdFx0fVxuXHRcdGlmIChkdERlc2lnbnRpbWUpIHtcblx0XHRcdGN1c3RvbVNldHRpbmdzW1wic2FwLnVpLmR0XCJdID8/PSB7fTtcblx0XHRcdGN1c3RvbVNldHRpbmdzW1wic2FwLnVpLmR0XCJdLmRlc2lnbnRpbWUgPSBkdERlc2lnbnRpbWU7XG5cdFx0fVxuXHRcdGlmIChPYmplY3Qua2V5cyhjdXN0b21TZXR0aW5ncykubGVuZ3RoID4gMCkge1xuXHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmRhdGEoXCJzYXAtdWktY3VzdG9tLXNldHRpbmdzXCIsIGN1c3RvbVNldHRpbmdzKTtcblx0XHR9XG5cblx0XHRpZiAoYmluZGluZ0RlZikge1xuXHRcdFx0aWYgKHR5cGVvZiBiaW5kaW5nRGVmID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdJbmZvID0gYmluZGluZ1BhcnNlcihiaW5kaW5nRGVmKTtcblx0XHRcdFx0aWYgKGJpbmRpbmdJbmZvKSB7XG5cdFx0XHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmJpbmRFbGVtZW50KHtcblx0XHRcdFx0XHRcdG1vZGVsOiBiaW5kaW5nSW5mby5tb2RlbCA/PyB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRwYXRoOiBiaW5kaW5nSW5mby5wYXRoLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyczogYmluZGluZ0luZm8ucGFyYW1ldGVycyA/PyB1bmRlZmluZWRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YXJnZXRDb250cm9sSW5zdGFuY2UuYmluZEVsZW1lbnQoYmluZGluZ0RlZik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFdlIGNvbnNpZGVyIGl0J3MgYW4gb2JqZWN0XG5cdFx0XHRcdE9iamVjdC5rZXlzKGJpbmRpbmdEZWYpLmZvckVhY2goKGJpbmRpbmdEZWZLZXkpID0+IHtcblx0XHRcdFx0XHR0YXJnZXRDb250cm9sSW5zdGFuY2UuYmluZEVsZW1lbnQoeyBtb2RlbDogYmluZGluZ0RlZktleSwgcGF0aDogYmluZGluZ0RlZltiaW5kaW5nRGVmS2V5XSB9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgbGF0ZVByb3BlcnRpZXNLZXkgaW4gbGF0ZVByb3BlcnRpZXMpIHtcblx0XHRcdGxhdGVQcm9wZXJ0aWVzW2xhdGVQcm9wZXJ0aWVzS2V5XVxuXHRcdFx0XHQudGhlbigodmFsdWUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGFyZ2V0Q29udHJvbEluc3RhbmNlLnNldFByb3BlcnR5KGxhdGVQcm9wZXJ0aWVzS2V5LCB2YWx1ZSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYENvdWxkbid0IHNldCBwcm9wZXJ0eSAke2xhdGVQcm9wZXJ0aWVzS2V5fSBvbiAke0NvbnRyb2xUeXBlLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWAsIGVycm9yLCBcImpzeENvbnRyb2xcIik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHR0YXJnZXRDb250cm9sID0gdGFyZ2V0Q29udHJvbEluc3RhbmNlO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBDb250cm9sVHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Y29uc3QgY29udHJvbFR5cGVGbiA9IENvbnRyb2xUeXBlO1xuXHRcdHRhcmdldENvbnRyb2wgPSBjb250cm9sVHlwZUZuKHNldHRpbmdzIGFzICRDb250cm9sU2V0dGluZ3MpO1xuXHR9IGVsc2Uge1xuXHRcdHRhcmdldENvbnRyb2wgPSBuZXcgVGV4dCh7IHRleHQ6IFwiTWlzc2luZyBjb21wb25lbnQgXCIgKyAoQ29udHJvbFR5cGUgYXMgc3RyaW5nKSB9KTtcblx0fVxuXG5cdHJldHVy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
|
|
@@ -9,8 +9,6 @@ import {
|
|
|
9
9
|
} from "sap/fe/base/BindingToolkit";
|
|
10
10
|
import type { BindingInfoHolder, NonAbstractClass } from "sap/fe/base/ClassSupport";
|
|
11
11
|
import type { ControlProperties, JSXContext, NonControlProperties, Ref } from "sap/fe/base/jsx-runtime/jsx";
|
|
12
|
-
import type BuildingBlockTemplatingBase from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase";
|
|
13
|
-
import type RuntimeBuildingBlock from "sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock";
|
|
14
12
|
import Text from "sap/m/Text";
|
|
15
13
|
import BindingParser from "sap/ui/base/BindingParser";
|
|
16
14
|
import DataType from "sap/ui/base/DataType";
|
|
@@ -249,9 +247,6 @@ const jsxControl = function <T extends Element>(
|
|
|
249
247
|
|
|
250
248
|
if ((ControlType as { isFragment?: boolean })?.isFragment) {
|
|
251
249
|
targetControl = settings.children as Control | Control[];
|
|
252
|
-
} else if ((ControlType as typeof BuildingBlockTemplatingBase)?.isRuntime) {
|
|
253
|
-
const runtimeBuildingBlock = new (ControlType as typeof RuntimeBuildingBlock)(settings as unknown as $ControlSettings);
|
|
254
|
-
targetControl = runtimeBuildingBlock.getContent?.(jsxContext.view!, jsxContext.appComponent!);
|
|
255
250
|
} else if (isAControl(ControlType)) {
|
|
256
251
|
const metadata = ControlType.getMetadata();
|
|
257
252
|
if (key !== undefined) {
|
|
@@ -22,7 +22,7 @@ sap.ui.define(["sap/ui/core/Lib"], function (Library) {
|
|
|
22
22
|
controls: [],
|
|
23
23
|
elements: [],
|
|
24
24
|
// eslint-disable-next-line no-template-curly-in-string
|
|
25
|
-
version: "1.
|
|
25
|
+
version: "1.134.0",
|
|
26
26
|
noLibraryCSS: true
|
|
27
27
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
28
|
});
|