@sapui5/sap.fe.base 1.139.0 → 1.140.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.base",
3
- "version": "1.139.0",
3
+ "version": "1.140.0",
4
4
  "description": "SAPUI5 Library sap.fe.base",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.139.0</version>
9
+ <version>1.140.0</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.base</documentation>
12
12
 
@@ -21,7 +21,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/ui
21
21
  * This contains the low level functionality of having a content aggregation and handling the rendering of the content without an actual DOM element.
22
22
  * The building block also defines a state object that can be used to store the state of the building block.
23
23
  * Accessibility and classes information are forwarded to the content control.
24
- * @experimental
25
24
  * @public
26
25
  */
27
26
  let BuildingBlockBase = (_dec = defineUI5Class("sap.fe.base.BuildingBlockBase"), _dec2 = aggregation({
@@ -179,4 +178,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/ui
179
178
  }), _class2)) || _class);
180
179
  return BuildingBlockBase;
181
180
  }, false);
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/LmFkZFN0eWxlQ2xhc3Moc3R5bGVDbGFzcyk7XG5cdFx0c3VwZXIuYWRkU3R5bGVDbGFzcyhzdHlsZUNsYXNzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG92ZXJyaWRlIHJlbW92ZVN0eWxlQ2xhc3Moc3R5bGVDbGFzczogc3RyaW5nKTogdGhpcyB7XG5cdFx0KHRoaXMuY29udGVudCBhcyB1bmtub3duIGFzIENvbnRyb2wpPy5yZW1vdmVTdHlsZUNsYXNzKHN0eWxlQ2xhc3MpO1xuXHRcdHN1cGVyLnJlbW92ZVN0eWxlQ2xhc3Moc3R5bGVDbGFzcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2hvcnRoYW5kIGZvciB0aGUgQmluZGluZ1Rvb2xraXQuYmluZFN0YXRlIGZ1bmN0aW9uIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2JqZWN0LlxuXHQgKiBAcGFyYW0gcGF0aCBBIHByb3BlcnR5IGluIHRoZSBzdGF0ZSBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uIGZvciB0aGUgc3RhdGVcblx0ICovXG5cdHByb3RlY3RlZCBiaW5kU3RhdGU8U1QgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihwYXRoOiBrZXlvZiBLKTogUGF0aEluTW9kZWxFeHByZXNzaW9uPFNUPiB8IENvbnN0YW50RXhwcmVzc2lvbjxTVD4ge1xuXHRcdHJldHVybiBCaW5kaW5nVG9vbGtpdC5iaW5kU3RhdGUodGhpcy5zdGF0ZSBhcyBLLCBwYXRoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBCdWlsZGluZ0Jsb2NrQmFzZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFXQTtFQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQSxJQVNNQSxpQkFBaUIsSUFBQUMsSUFBQSxHQUR0QkMsY0FBYyxDQUFDLCtCQUErQixDQUFDLEVBQUFDLEtBQUEsR0FFOUNDLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUUscUJBQXFCO0lBQUVDLFFBQVEsRUFBRSxLQUFLO0lBQUVDLFNBQVMsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBTTlFQyxXQUFXLENBQUM7SUFBRUosSUFBSSxFQUFFLHFCQUFxQjtJQUFFQyxRQUFRLEVBQUUsSUFBSTtJQUFFSSxZQUFZLEVBQUU7RUFBaUIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHNUZDLFdBQVcsQ0FBQyxDQUFDLEVBQUFYLElBQUEsQ0FBQVksTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxRQUFBO0lBR2QsU0FBQWYsa0JBQVlnQixRQUFzRCxFQUFFQyxNQUEyQyxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUNoSCxJQUFJLE9BQU9GLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDakNDLE1BQU0sS0FBSyxDQUFDLENBQUM7UUFDYkEsTUFBTSxDQUFDRSxFQUFFLEdBQUdILFFBQVE7TUFDckI7TUFDQUUsS0FBQSxHQUFBSCxRQUFBLENBQUFLLElBQUEsT0FBTUosUUFBUSxFQUF1QkMsTUFBTSxDQUFD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
181
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWlsZGluZ0Jsb2NrQmFzZSIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiYWdncmVnYXRpb24iLCJ0eXBlIiwibXVsdGlwbGUiLCJpc0RlZmF1bHQiLCJfZGVjMyIsImFzc29jaWF0aW9uIiwic2luZ3VsYXJOYW1lIiwiX2RlYzQiLCJkZWZpbmVTdGF0ZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsInNldHRpbmdzIiwib3RoZXJzIiwiX3RoaXMiLCJpZCIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX29sZERvbVJlZiIsIl9pbmhlcml0c0xvb3NlIiwicmVuZGVyIiwib1JtIiwib0NvbnRyb2wiLCJjb250ZW50IiwiZ2V0VmlzaWJsZSIsIkludmlzaWJsZVJlbmRlcmVyIiwicmVuZGVyQ29udHJvbCIsIl9wcm90byIsInByb3RvdHlwZSIsImJpbmRQcm9wZXJ0eSIsIm5hbWUiLCJiaW5kaW5nSW5mbyIsInByb3BlcnR5TWV0YWRhdGEiLCJnZXRNZXRhZGF0YSIsImdldFByb3BlcnR5IiwiYmluZGFibGUiLCJncm91cCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJldmVudCIsImRvbVJlZiIsImdldERvbVJlZiIsIldlYWtSZWYiLCJzdWZmaXgiLCJvQ29udGVudCIsImRlcmVmIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldEZvY3VzRG9tUmVmIiwiZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZSIsIl9vRWxlbWVudCIsIm1BcmlhUHJvcHMiLCJvUGFyZW50IiwiZ2V0UGFyZW50IiwiZ2V0QWNjZXNzaWJpbGl0eUluZm8iLCJhY2Nlc3NpYmlsaXR5SW5mbyIsImlzQSIsImdldElkRm9yTGFiZWwiLCJhZGRTdHlsZUNsYXNzIiwic3R5bGVDbGFzcyIsInJlbW92ZVN0eWxlQ2xhc3MiLCJiaW5kU3RhdGUiLCJwYXRoIiwiQmluZGluZ1Rvb2xraXQiLCJzdGF0ZSIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2tCYXNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RhbnRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24sIFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCAqIGFzIEJpbmRpbmdUb29sa2l0IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YsIFN0YXRlT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgYXNzb2NpYXRpb24sIGRlZmluZVN0YXRlLCBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEludmlzaWJsZVJlbmRlcmVyIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVSZW5kZXJlclwiO1xuaW1wb3J0IHR5cGUgUmVuZGVyTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVuZGVyTWFuYWdlclwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5pbnRlcmZhY2UgQnVpbGRpbmdCbG9ja0Jhc2U8VCBleHRlbmRzIFVJNUVsZW1lbnQgPSBDb250cm9sLCBLIGV4dGVuZHMgb2JqZWN0ID0ge30+IHtcblx0Ly8gRm9yY2UgYSBzdGF0ZSB1cGRhdGVcblx0X3VwZGF0ZVN0YXRlKCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYnVpbGRpbmcgYmxvY2tzLlxuICogVGhpcyBjb250YWlucyB0aGUgbG93IGxldmVsIGZ1bmN0aW9uYWxpdHkgb2YgaGF2aW5nIGEgY29udGVudCBhZ2dyZWdhdGlvbiBhbmQgaGFuZGxpbmcgdGhlIHJlbmRlcmluZyBvZiB0aGUgY29udGVudCB3aXRob3V0IGFuIGFjdHVhbCBET00gZWxlbWVudC5cbiAqIFRoZSBidWlsZGluZyBibG9jayBhbHNvIGRlZmluZXMgYSBzdGF0ZSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIGJ1aWxkaW5nIGJsb2NrLlxuICogQWNjZXNzaWJpbGl0eSBhbmQgY2xhc3NlcyBpbmZvcm1hdGlvbiBhcmUgZm9yd2FyZGVkIHRvIHRoZSBjb250ZW50IGNvbnRyb2wuXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5iYXNlLkJ1aWxkaW5nQmxvY2tCYXNlXCIpXG5jbGFzcyBCdWlsZGluZ0Jsb2NrQmFzZTxUIGV4dGVuZHMgVUk1RWxlbWVudCA9IENvbnRyb2wsIEsgZXh0ZW5kcyBvYmplY3QgPSB7fT4gZXh0ZW5kcyBDb250cm9sIHtcblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5FbGVtZW50XCIsIG11bHRpcGxlOiBmYWxzZSwgaXNEZWZhdWx0OiB0cnVlIH0pXG5cdGNvbnRlbnQ/OiBUO1xuXG5cdC8qKlxuXHQgKiBBc3NvY2lhdGlvbiB0byBjb250cm9scyAvIElEcyB0aGF0IGxhYmVsIHRoaXMgY29udHJvbCAoc2VlIFdBSS1BUklBIGF0dHJpYnV0ZSBhcmlhLWxhYmVsbGVkYnkpLlxuXHQgKi9cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIsIG11bHRpcGxlOiB0cnVlLCBzaW5ndWxhck5hbWU6IFwiYXJpYUxhYmVsbGVkQnlcIiB9KVxuXHRhcmlhTGFiZWxsZWRCeSE6IHN0cmluZ1tdO1xuXG5cdEBkZWZpbmVTdGF0ZSgpXG5cdHByb3RlY3RlZCBzdGF0ZSE6IFN0YXRlT2Y8Sz47XG5cblx0Y29uc3RydWN0b3Ioc2V0dGluZ3M/OiBzdHJpbmcgfCBQcm9wZXJ0aWVzT2Y8QnVpbGRpbmdCbG9ja0Jhc2U8VD4+LCBvdGhlcnM/OiBQcm9wZXJ0aWVzT2Y8QnVpbGRpbmdCbG9ja0Jhc2U8VD4+KSB7XG5cdFx0aWYgKHR5cGVvZiBzZXR0aW5ncyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0b3RoZXJzID8/PSB7fTtcblx0XHRcdG90aGVycy5pZCA9IHNldHRpbmdzO1xuXHRcdH1cblx0XHRzdXBlcihzZXR0aW5ncyBhcyB1bmtub3duIGFzIHN0cmluZywgb3RoZXJzKTtcblx0fVxuXG5cdHByaXZhdGUgX29sZERvbVJlZjogV2Vha1JlZjxFbGVtZW50PiB8IG51bGwgPSBudWxsO1xuXG5cdHN0YXRpYyByZW5kZXI8VCBleHRlbmRzIENvbnRyb2w+KG9SbTogUmVuZGVyTWFuYWdlciwgb0NvbnRyb2w6IEJ1aWxkaW5nQmxvY2tCYXNlPFQ+KTogdm9pZCB7XG5cdFx0aWYgKCFvQ29udHJvbC5jb250ZW50IHx8IG9Db250cm9sLmdldFZpc2libGUoKSA9PT0gZmFsc2UpIHtcblx0XHRcdEludmlzaWJsZVJlbmRlcmVyLnJlbmRlcihvUm0sIG9Db250cm9sKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1JtLnJlbmRlckNvbnRyb2wob0NvbnRyb2wuY29udGVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE92ZXJyaWRlIHRoZSBiaW5kUHJvcGVydHkgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBwcm9wZXJ0eSBpcyBhIGJpbmRpbmcgaW5mby5cblx0ICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGUgcHJvcGVydHlcblx0ICogQHBhcmFtIGJpbmRpbmdJbmZvIFRoZSBiaW5kaW5nIGluZm9cblx0ICogQHJldHVybnMgVGhlIGluc3RhbmNlIG9mIHRoZSBidWlsZGluZyBibG9jayBmb3IgY2hhaW5pbmdcblx0ICovXG5cdG92ZXJyaWRlIGJpbmRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIGJpbmRpbmdJbmZvOiBQcm9wZXJ0eUJpbmRpbmdJbmZvKTogdGhpcyB7XG5cdFx0Y29uc3QgcHJvcGVydHlNZXRhZGF0YSA9IHRoaXMuZ2V0TWV0YWRhdGEoKS5nZXRQcm9wZXJ0eShuYW1lKTtcblx0XHRpZiAocHJvcGVydHlNZXRhZGF0YT8uYmluZGFibGUgPT09IGZhbHNlICYmIHByb3BlcnR5TWV0YWRhdGEuZ3JvdXAgPT09IFwiRGF0YVwiKSB7XG5cdFx0XHQodGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbmFtZV0gPSBiaW5kaW5nSW5mbztcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3VwZXIuYmluZFByb3BlcnR5KG5hbWUsIGJpbmRpbmdJbmZvKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvL3NldCB0aGUgb2xkIGRvbSByZWZcblx0b3ZlcnJpZGUgb25BZnRlclJlbmRlcmluZyhldmVudDogSlF1ZXJ5LkV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgZG9tUmVmID0gdGhpcy5nZXREb21SZWYoKTtcblx0XHRpZiAoZG9tUmVmKSB7XG5cdFx0XHR0aGlzLl9vbGREb21SZWYgPSBuZXcgV2Vha1JlZihkb21SZWYpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9vbGREb21SZWYgPSBudWxsO1xuXHRcdH1cblx0XHRzdXBlci5vbkFmdGVyUmVuZGVyaW5nKGV2ZW50KTtcblx0fVxuXG5cdG92ZXJyaWRlIGdldERvbVJlZihzdWZmaXg/OiBzdHJpbmcpOiBFbGVtZW50IHwgbnVsbCB7XG5cdFx0Y29uc3Qgb0NvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0bGV0IGRvbVJlZjogRWxlbWVudCB8IG51bGwgPSBvQ29udGVudD8uZ2V0RG9tUmVmKHN1ZmZpeCkgPz8gc3VwZXIuZ2V0RG9tUmVmKHN1ZmZpeCk7XG5cdFx0aWYgKCFkb21SZWYgJiYgIXN1ZmZpeCkge1xuXHRcdFx0ZG9tUmVmID0gdGhpcy5fb2xkRG9tUmVmPy5kZXJlZigpID8/IG51bGw7XG5cdFx0XHRpZiAoZG9tUmVmKSB7XG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkb21SZWYuaWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZG9tUmVmO1xuXHR9XG5cblx0b3ZlcnJpZGUgZ2V0Rm9jdXNEb21SZWYoKTogRWxlbWVudCB8IG51bGwge1xuXHRcdGNvbnN0IG9Db250ZW50ID0gdGhpcy5jb250ZW50O1xuXHRcdHJldHVybiBvQ29udGVudCA/IG9Db250ZW50LmdldEZvY3VzRG9tUmVmKCkgOiBzdXBlci5nZXRGb2N1c0RvbVJlZigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNrcyB1cCB0aGUgY29udHJvbCB0cmVlIHRvIGVuaGFuY2UgdGhlIGFjY2Vzc2liaWxpdHkgc3RhdGUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBfb0VsZW1lbnQgVGhlIGVsZW1lbnQgdG8gZW5oYW5jZVxuXHQgKiBAcGFyYW0gbUFyaWFQcm9wcyBUaGUgY3VycmVudCBhcmlhIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMgVGhlIGVuaGFuY2VkIGFyaWEgcHJvcGVydGllc1xuXHQgKi9cblx0b3ZlcnJpZGUgZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZShfb0VsZW1lbnQ6IG9iamVjdCwgbUFyaWFQcm9wczogb2JqZWN0KTogb2JqZWN0IHtcblx0XHRjb25zdCBvUGFyZW50ID0gdGhpcy5nZXRQYXJlbnQoKTtcblxuXHRcdGlmIChvUGFyZW50ICYmIChvUGFyZW50IGFzIE1hbmFnZWRPYmplY3QgJiB7IGVuaGFuY2VBY2Nlc3NpYmlsaXR5U3RhdGU/OiBGdW5jdGlvbiB9KS5lbmhhbmNlQWNjZXNzaWJpbGl0eVN0YXRlKSB7XG5cdFx0XHQvLyBmb3J3YXJkICBlbmhhbmNlQWNjZXNzaWJpbGl0eVN0YXRlIGNhbGwgdG8gdGhlIHBhcmVudFxuXHRcdFx0KG9QYXJlbnQgYXMgTWFuYWdlZE9iamVjdCAmIHsgZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZTogRnVuY3Rpb24gfSkuZW5oYW5jZUFjY2Vzc2liaWxpdHlTdGF0ZShfb0VsZW1lbnQsIG1BcmlhUHJvcHMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBtQXJpYVByb3BzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gKGlmIGF2YWlsYWJsZSBvbiB0aGUgY29uY3JldGUgY29udHJvbCkgcHJvdmlkZXMgdGhlIGN1cnJlbnQgYWNjZXNzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgY29udHJvbC5cblx0ICogQHJldHVybnMgVGhlIGFjY2Vzc2liaWxpdHkgaW5mb3JtYXRpb24gZm9yIHRoZSBjb250cm9sLlxuXHQgKi9cblx0b3ZlcnJpZGUgZ2V0QWNjZXNzaWJpbGl0eUluZm8oKTogT2JqZWN0IHtcblx0XHRsZXQgYWNjZXNzaWJpbGl0eUluZm8gPSB7fTtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8Q29udHJvbD4oXCJzYXAudWkuY29yZS5Db250cm9sXCIpKSB7XG5cdFx0XHRhY2Nlc3NpYmlsaXR5SW5mbyA9IHRoaXMuY29udGVudC5nZXRBY2Nlc3NpYmlsaXR5SW5mbygpO1xuXHRcdH1cblx0XHRyZXR1cm4gYWNjZXNzaWJpbGl0eUluZm87XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgRE9NTm9kZSBJRCB0byBiZSB1c2VkIGZvciB0aGUgXCJsYWJlbEZvclwiIGF0dHJpYnV0ZS5cblx0ICpcblx0ICogV2UgZm9yd2FyZCB0aGUgY2FsbCBvZiB0aGlzIG1ldGhvZCB0byB0aGUgY29udGVudCBjb250cm9sLlxuXHQgKiBAcmV0dXJucyBJRCB0byBiZSB1c2VkIGZvciB0aGUgPGNvZGU+bGFiZWxGb3I8L2NvZGU+XG5cdCAqL1xuXHRvdmVycmlkZSBnZXRJZEZvckxhYmVsKCk6IHN0cmluZyB7XG5cdFx0aWYgKHRoaXMuY29udGVudD8uaXNBPENvbnRyb2w+KFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXRJZEZvckxhYmVsKCk7XG5cdFx0fVxuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0b3ZlcnJpZGUgYWRkU3R5bGVDbGFzcyhzdHlsZUNsYXNzOiBzdHJpbmcpOiB0aGlzIHtcblx0XHQodGhpcy5jb250ZW50IGFzIHVua25vd24gYXMgQ29udHJvbCk/LmFkZFN0eWxlQ2xhc3Moc3R5bGVDbGFzcyk7XG5cdFx0c3VwZXIuYWRkU3R5bGVDbGFzcyhzdHlsZUNsYXNzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG92ZXJyaWRlIHJlbW92ZVN0eWxlQ2xhc3Moc3R5bGVDbGFzczogc3RyaW5nKTogdGhpcyB7XG5cdFx0KHRoaXMuY29udGVudCBhcyB1bmtub3duIGFzIENvbnRyb2wpPy5yZW1vdmVTdHlsZUNsYXNzKHN0eWxlQ2xhc3MpO1xuXHRcdHN1cGVyLnJlbW92ZVN0eWxlQ2xhc3Moc3R5bGVDbGFzcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2hvcnRoYW5kIGZvciB0aGUgQmluZGluZ1Rvb2xraXQuYmluZFN0YXRlIGZ1bmN0aW9uIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2JqZWN0LlxuXHQgKiBAcGFyYW0gcGF0aCBBIHByb3BlcnR5IGluIHRoZSBzdGF0ZSBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uIGZvciB0aGUgc3RhdGVcblx0ICovXG5cdHByb3RlY3RlZCBiaW5kU3RhdGU8U1QgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihwYXRoOiBrZXlvZiBLKTogUGF0aEluTW9kZWxFeHByZXNzaW9uPFNUPiB8IENvbnN0YW50RXhwcmVzc2lvbjxTVD4ge1xuXHRcdHJldHVybiBCaW5kaW5nVG9vbGtpdC5iaW5kU3RhdGUodGhpcy5zdGF0ZSBhcyBLLCBwYXRoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBCdWlsZGluZ0Jsb2NrQmFzZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFXQTtFQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkEsSUFRTUEsaUJBQWlCLElBQUFDLElBQUEsR0FEdEJDLGNBQWMsQ0FBQywrQkFBK0IsQ0FBQyxFQUFBQyxLQUFBLEdBRTlDQyxXQUFXLENBQUM7SUFBRUMsSUFBSSxFQUFFLHFCQUFxQjtJQUFFQyxRQUFRLEVBQUUsS0FBSztJQUFFQyxTQUFTLEVBQUU7RUFBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU05RUMsV0FBVyxDQUFDO0lBQUVKLElBQUksRUFBRSxxQkFBcUI7SUFBRUMsUUFBUSxFQUFFLElBQUk7SUFBRUksWUFBWSxFQUFFO0VBQWlCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzVGQyxXQUFXLENBQUMsQ0FBQyxFQUFBWCxJQUFBLENBQUFZLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsUUFBQTtJQUdkLFNBQUFmLGtCQUFZZ0IsUUFBc0QsRUFBRUMsTUFBMkMsRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFDaEgsSUFBSSxPQUFPRixRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ2pDQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBQ2JBLE1BQU0sQ0FBQ0UsRUFBRSxHQUFHSCxRQUFRO01BQ3JCO01BQ0FFLEtBQUEsR0FBQUgsUUFBQSxDQUFBSyxJQUFBLE9BQU1KLFFBQVEsRUFBdUJDLE1BQU0sQ0FBQztNQUFDSSwwQkFBQSxDQUFBSCxLQUFB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
@@ -20,7 +20,6 @@ interface BuildingBlockBase<T extends UI5Element = Control, K extends object = {
20
20
  * This contains the low level functionality of having a content aggregation and handling the rendering of the content without an actual DOM element.
21
21
  * The building block also defines a state object that can be used to store the state of the building block.
22
22
  * Accessibility and classes information are forwarded to the content control.
23
- * @experimental
24
23
  * @public
25
24
  */
26
25
  @defineUI5Class("sap.fe.base.BuildingBlockBase")
@@ -81,7 +81,6 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
81
81
  *
82
82
  * Properties defined with this decorator will be automatically bound to the control state when used in JSX.
83
83
  * Arrays need to be bound using the `bindState` function.
84
- * @experimental
85
84
  * @returns A property decorator
86
85
  */
87
86
  function defineState() {
@@ -817,4 +816,4 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
817
816
  }
818
817
  return _exports;
819
818
  }, false);
820
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJyZWZlcmVuY2VzIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJwcmVwYXJlR2V0QVBJRnVuY3Rpb24iLCJvRXZlbnQiLCJhcGlGUU4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvU291cmNlIiwiZ2V0U291cmNlIiwiX2dldEFQSUV4dGVuc2lvbiIsImlzQSIsImdldFBhcmVudCIsImlzRGVwZW5kZW50Qm91bmQiLCJvRGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJoYXNDb3JyZWN0RGVwZW5kZW50IiwiZmluZCIsIm9EZXBlbmRlbnQiLCJvU291cmNlTWFwIiwiaW5zdGFuY2VNYXAiLCJnZXQiLCJ0YXJnZXRDb250cm9sIiwiZW5zdXJlR2V0QVBJIiwiX19hcGlSZWdpc3RlcmVkIiwiV2Vha01hcCIsInJlZ2lzdGVySW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjb25zdHJ1Y3RvciIsInNldCIsInB1c2giLCJnZXRBUEkiLCJkZWZpbmVTdGF0ZSIsInByb3BlcnR5S2V5IiwicHJvcGVydHlEZXNjcmlwdG9yIiwic3RhdGVQcm9wZXJ0eSIsIkVycm9yIiwid3JpdGFibGUiLCJzdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIiwiaW5pdGlhbGl6ZXIiLCJfZXhwb3J0cyIsIm1ldGhvZE92ZXJyaWRlIiwiZXh0ZW5zaW9uTmFtZSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiZGVzY3JpcHRvciIsImhvb2thYmxlIiwicHVibGljRXh0ZW5zaW9uIiwiZW51bWVyYWJsZSIsInB1YmxpYyIsInByaXZhdGVFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImZpbmFsIiwidXNpbmdFeHRlbnNpb24iLCJleHRlbnNpb25DbGFzcyIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJncm91cCIsImRlZmF1bHRWYWx1ZSIsImFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25EZWZpbml0aW9uIiwibXVsdGlwbGUiLCJpc0RlZmF1bHQiLCJkZWZhdWx0QWdncmVnYXRpb24iLCJhc3NvY2lhdGlvbiIsInVpNUFzc29jaWF0aW9uTWV0YWRhdGEiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJpbnRlcmZhY2VOYW1lIiwieG1sRXZlbnRIYW5kbGVyIiwicHJvcGVydHlrZXkiLCJjdXJyZW50Q29uc3RydWN0b3IiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImRlZmluZVVJNUNsYXNzIiwic1RhcmdldCIsIm1ldGFkYXRhRGVmaW5pdGlvbiIsInByb3RvdHlwZSIsImtleSIsImlzQXJyYXkiLCJjb25jYXQiLCJyZWdpc3RlclVJNU1ldGFkYXRhIiwibWl4aW4iLCJpbnRlcmZhY2VDbGFzcyIsImJhc2VDdG9yIiwiZXh0ZW5kIiwiaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgiLCJfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzIiwiT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJwcm9wYWdhdGVIb29rRnJvbU1peGluIiwic2V0dXBNaXhpbiIsImNyZWF0ZVJlZmVyZW5jZSIsImN1cnJlbnQiLCJzZXRDdXJyZW50Iiwib0NvbnRyb2xJbnN0YW5jZSIsImRlZmluZVJlZmVyZW5jZSIsIkJhc2VPYmplY3QiLCJpc09iamVjdEEiLCJiYXNlQ2xhc3NNZXRhZGF0YSIsImludGVyZmFjZUNsYXNzUHJvdG90eXBlIiwiZ2V0SW50ZXJmYWNlTmFtZSIsImdldE93blByb3BlcnR5TmFtZXMiLCJmb3JFYWNoIiwibmFtZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiY3JlYXRlIiwiX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5IiwianNvbk1vZGVsIiwicHJvcCIsInBhdGhJbk1vZGVsIiwib09iaiIsImRlZXBDbG9uZSIsImdldE9iamVjdCIsIm9UYXJnZXQiLCJtb2RlbCIsIlByb3h5IiwicCIsInJlY2VpdmVyIiwicmVmIiwiUmVmbGVjdCIsImJpbmQiLCJpc05hTiIsIk51bWJlciIsIl9fYmluZGluZ0luZm8iLCJwYXRoIiwiYm91bmRQcm9wZXJ0aWVzIiwiU3ltYm9sIiwiY3JlYXRlU3RhdGVQcm94eSIsInN0YXRlUHJvcGVydHlOYW1lIiwiYm91bmRUb1N0YXRlUHJvcHMiLCJpbml0aWFsRGF0YSIsInNldE1vZGVsIiwiSlNPTk1vZGVsIiwic3RhdGVNb2RlbCIsImdldE1vZGVsIiwiYXR0YWNoUHJvcGVydHlDaGFuZ2UiLCJldnQiLCJnZXRQYXJhbWV0ZXIiLCJzdWJzdHJpbmciLCJpbmNsdWRlcyIsInNldFByb3BlcnR5IiwiX19zdGF0ZUNyZWF0ZWQiLCJwcm94eSIsInNldFN0YXRlTW9kZWwiLCJ2YWx1ZSIsImtub3duQm91bmRQcm9wZXJ0aWVzIiwiX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUiLCJzZXRSZXN1bHQiLCJfdXBkYXRlU3RhdGVEZWJvdW5jZWQiLCJjb25maWd1cmFibGUiLCJfY3JlYXRlU3RhdGVQcm9wZXJ0eSIsIm9iaiIsInVwZGF0aW5nU3RhdGUiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eURlZiIsImJpbmRUb1N0YXRlIiwiX3VwZGF0ZVN0YXRlIiwiX3VwZGF0ZVN0YXRlVGltZXIiLCJvblN0YXRlQ2hhbmdlIiwiX2NoYW5nZWRQcm9wcyIsImNoYW5nZWRQcm9wIiwic2V0VGltZW91dCIsIl9fc3RhdGVOYW1lIiwiZm5BcHBseVNldHRpbmdzIiwiYXBwbHlTZXR0aW5ncyIsIm1TZXR0aW5ncyIsIm1vZGVscyIsIiRjb21wb25lbnRTdGF0ZSIsImNhbGwiLCJmblNldFByb3BlcnR5Iiwic1Byb3BlcnR5TmFtZSIsIm9WYWx1ZSIsImJTdXBwcmVzc0ludmFsaWRhdGUiLCJjbGF6eiIsImluT2JqIiwib2JqTmFtZSIsImJhc2VUeXBlIiwiZ2V0U3RlcmVvdHlwZSIsInJlbmRlcmVyRGVmaW5pdGlvbiIsInJlbmRlcmVyIiwicmVuZGVyIiwiYXBpVmVyc2lvbiIsImtleXMiLCJlIiwiY0V4dE5hbWUiLCJvdXRwdXQiLCJmbkluaXQiLCJpbml0IiwiZm5BZnRlckluaXQiLCJhZnRlckluaXQiLCJfdGhpcyIsIl9sZW4yIiwiX2tleTIiLCJhcHBseSIsImFQcm9wZXJ0eUtleXMiLCJwcm9wZXJ0eURlZmF1bHQiLCJfYmluZGluZ1Byb3BlcnRpZXMiLCJ2IiwibVByb3BlcnRpZXMiLCJwcm9wZXJ0eVZhbHVlIiwiZ2V0UHJvcGVydHkiLCJiaW5kaW5nUHJvcGVydHlWYWx1ZSIsInByb3BWYWx1ZSIsIl9hcHBseWluZ1NldHRpbmdzIiwiYUFnZ3JlZ2F0aW9uS2V5cyIsImFnZ3JlZ2F0aW9uS2V5IiwiYWdncmVnYXRpb25EZWYiLCJzZXRBZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0aW9uQ29udGVudCIsImdldEFnZ3JlZ2F0aW9uIiwiYUFzc29jaWF0aW9uS2V5cyIsImFzc29jaWF0aW9uS2V5Iiwic2V0QXNzb2NpYXRpb24iLCJnZXRBc3NvY2lhdGlvbiIsInJlZmVyZW5jZVByb3BlcnRpZXMiLCJtZXRob2ROYW1lIiwibWV0aG9kRGVmaW5pdGlvbiIsIm1ldGhvZEhvbGRlciIsIm1ldGhvZEFycmF5cyIsInJldmVyc2UiLCJyZXN1bHQiLCJfbGVuMyIsIm1ldGhvZEFyZ3MiLCJfa2V5MyIsImFyZyIsIm9FeHRlbnNpb24iLCJwb2wiLCJfbGVuNCIsIl9rZXk0Iiwib0NsYXNzIiwiTWV0YWRhdGEiLCJjcmVhdGVDbGFzcyIsInVpZCIsIkNvbnRyb2xsZXJNZXRhZGF0YSIsIl9zdGF0aWNPdmVycmlkZSIsIl9vdmVycmlkZSIsIk9iamVjdFBhdGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IHsgaG9va2FibGUsIHByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01ldGFkYXRhXCI7XG5pbXBvcnQgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBDb250cm9sbGVyTWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyTWV0YWRhdGFcIjtcbmltcG9ydCB0eXBlIE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1vZGVsJFByb3BlcnR5Q2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcblxudHlwZSBPdmVycmlkZURlZmluaXRpb24gPSBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj47XG50eXBlIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uID0ge1xuXHRvdmVycmlkZUV4ZWN1dGlvbj86IE92ZXJyaWRlRXhlY3V0aW9uO1xuXHRwdWJsaWM/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/OiBGdW5jdGlvbjtcblx0XHRyZW5kZXJlcj86IHVua25vd247XG5cdFx0cmVuZGVyOiBGdW5jdGlvbjtcblx0XHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdH07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyBjbGFzcyBzaG91bGQgZGVmaW5lIGEgVUk1IGNvbnRyb2wgb2YgdGhlIHNwZWNpZmllZCBuYW1lLlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBVSTUgY2xhc3NcbiAqIEBwYXJhbSBtZXRhZGF0YURlZmluaXRpb24gSW5saW5lIG1ldGFkYXRhIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIEEgY2xhc3MgZGVjb3JhdG9yIHRoYXQgd2lsbCBjcmVhdGUgYSB1aTUgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVJNUNsYXNzKHNUYXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogUGFydGlhbDxVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0XHRpZiAoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldKSkge1xuXHRcdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XS5jb25jYXQoXG5cdFx0XHRcdFx0XHRcdG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5jb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSxcblx0XHRcdFx0XHRcdFx0Li4uKG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl0gYXMgb2JqZWN0KVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZWdpc3RlclVJNU1ldGFkYXRhKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpO1xuXHR9IGFzIENsYXNzRGVjb3JhdG9yO1xufVxudHlwZSBDb25zdHJ1Y3RvcjxUID0ge30+ID0gbmV3ICguLi5hOiB1bmtub3duW10pID0+IFQ7XG4vKipcbiAqIE1peGluIGEgc3BlY2lmaWMgaW50ZXJmYWNlIGluY2x1ZGluZyBhbGwgaXRzIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgaW50byB0aGUgY29udHJvbC5cbiAqIEBwYXJhbSBpbnRlcmZhY2VDbGFzcyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBvZiB0aGUgY29udHJvbFxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBjbGFzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWl4aW48VCBleHRlbmRzIElJbnRlcmZhY2VXaXRoTWl4aW4+KGludGVyZmFjZUNsYXNzOiBDb25zdHJ1Y3RvcjxUPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChiYXNlQ3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoYmFzZUN0b3IucHJvdG90eXBlLmV4dGVuZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIG1peGluSW50ZXJmYWNlIGRlY29yYXRvciBtdXN0IGJlIHBsYWNlZCBhZnRlciBgZGVmaW5lVWk1Q2xhc3NgXCIpO1xuXHRcdH1cblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKGJhc2VDdG9yLnByb3RvdHlwZSk7XG5cblx0XHRsZXQgaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXggPSBpbnRlcmZhY2VDbGFzcy5wcm90b3R5cGU7XG5cdFx0d2hpbGUgKGludGVyZmFjZVByb3RvVHlwZVRvTWl4KSB7XG5cdFx0XHRiYXNlQ3RvciA9IF9hZGRJbnRlcmZhY2VQcm90b1R5cGVzVG9CYXNlQ2xhc3MoYmFzZUN0b3IsIG1ldGFkYXRhLCBpbnRlcmZhY2VQcm90b1R5cGVUb01peCk7XG5cdFx0XHRpbnRlcmZhY2VQcm90b1R5cGVUb01peCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnRlcmZhY2VQcm90b1R5cGVUb01peCk7XG5cdFx0fVxuXHRcdHByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4oYmFzZUN0b3IsIGludGVyZmFjZUNsYXNzKTtcblxuXHRcdC8vIEhvb2sgdG8gYWRkIHBvdGVudGlhbGx5IG1vcmUgbG9naWMgdG8gdGhlIG1peGluXG5cdFx0aW50ZXJmYWNlQ2xhc3MucHJvdG90eXBlLnNldHVwTWl4aW4/LihiYXNlQ3Rvcik7XG5cdFx0cmV0dXJuIGJhc2VDdG9yO1xuXHR9IGFzIENsYXNzRGVjb3JhdG9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZWNlaXZpbmcgY29udHJvbC5cblx0ICogSWYgbm90IGRlZmluZWQsIHRoZSBpbnRlcmZhY2Ugd2lsbCBub3QgYmUgYWRkZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2Vcblx0ICovXG5cdGdldEludGVyZmFjZU5hbWU/KCk6IHN0cmluZztcblxuXHQvKipcblx0ICogSG9vayB0byBhZGQgbW9yZSBsb2dpYyB0byB0aGUgbWl4aW4uXG5cdCAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgY29udHJvbHMgYXJlIGNyZWF0ZWQgYW5kIGNhbiBiZSB1c2VkIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgbG9naWMgdG8gdGhlIGJhc2UgY2xhc3MuXG5cdCAqIEBwYXJhbSBiYXNlQ2xhc3MgVGhlIGJhc2UgY2xhc3MgdGhhdCB3aWxsIGJlIGV4dGVuZGVkXG5cdCAqL1xuXHRzZXR1cE1peGluPyhiYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZmVyZW5jZTxUIGV4dGVuZHMgVUk1RWxlbWVudD4oKTogUmVmPFQ+IHtcblx0cmV0dXJuIHtcblx0XHRjdXJyZW50OiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBULFxuXHRcdHNldEN1cnJlbnQ6IGZ1bmN0aW9uIChvQ29udHJvbEluc3RhbmNlOiBUKTogdm9pZCB7XG5cdFx0XHR0aGlzLmN1cnJlbnQgPSBvQ29udHJvbEluc3RhbmNlO1xuXHRcdH1cblx0fTtcbn1cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgb2JqZWN0IHdpbGwgaG9sZCBhIHJlZmVyZW5jZSB0byBhIGNvbnRyb2wgdGhyb3VnaCBqc3ggdGVtcGxhdGluZy5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVSZWZlcmVuY2UoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblx0XHRpZiAoQmFzZU9iamVjdC5pc09iamVjdEEodGFyZ2V0LCBcInNhcC51aS5jb3JlLkNvbnRyb2xcIikpIHtcblx0XHRcdGlmICghbWV0YWRhdGEucmVmZXJlbmNlc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdFx0bWV0YWRhdGEucmVmZXJlbmNlc1twcm9wZXJ0eUtleV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyID0gY3JlYXRlUmVmZXJlbmNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuXG5mdW5jdGlvbiBfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzKFxuXHRiYXNlQ3RvcjogVUk1Q29udHJvbEFuZE1vcmUsXG5cdGJhc2VDbGFzc01ldGFkYXRhOiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uLFxuXHRpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZTogRnVuY3Rpb25bXCJwcm90b3R5cGVcIl1cbik6IFVJNUNvbnRyb2xBbmRNb3JlIHtcblx0Y29uc3QgaW50ZXJmYWNlTmFtZSA9IGludGVyZmFjZUNsYXNzUHJvdG90eXBlPy5nZXRJbnRlcmZhY2VOYW1lPy4oKTtcblx0aWYgKGludGVyZmFjZU5hbWUpIHtcblx0XHRiYXNlQ2xhc3NNZXRhZGF0YS5pbnRlcmZhY2VzLnB1c2goaW50ZXJmYWNlTmFtZSk7XG5cdH1cblxuXHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZSkuZm9yRWFjaCgobmFtZSkgPT4ge1xuXHRcdGlmIChuYW1lICE9PSBcImNvbnN0cnVjdG9yXCIgJiYgbmFtZSAhPT0gXCJzZXR1cE1peGluXCIgJiYgbmFtZSAhPT0gXCJtZXRhZGF0YVwiKSB7XG5cdFx0XHRpZiAoIWJhc2VDdG9yLnByb3RvdHlwZVtuYW1lXSkge1xuXHRcdFx0XHQvLyBUaGUgYmFzZSBjbGFzcyBcIndpbnNcIiBvdmVyIHRoZSBtaXhpblxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoXG5cdFx0XHRcdFx0YmFzZUN0b3IucHJvdG90eXBlLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZSwgbmFtZSkgfHwgT2JqZWN0LmNyZWF0ZShudWxsKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAobmFtZSA9PT0gXCJtZXRhZGF0YVwiKSB7XG5cdFx0XHRiYXNlQ3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSBtZXJnZShiYXNlQ3Rvci5wcm90b3R5cGUubWV0YWRhdGEsIGludGVyZmFjZUNsYXNzUHJvdG90eXBlLm1ldGFkYXRhKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYmFzZUN0b3I7XG59XG5cbmZ1bmN0aW9uIF9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eShqc29uTW9kZWw6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biB7XG5cdGNvbnN0IHBhdGhJbk1vZGVsID0gYC8ke3Byb3AudG9TdHJpbmcoKX1gO1xuXHRjb25zdCBvT2JqID0gZGVlcENsb25lKGpzb25Nb2RlbC5nZXRPYmplY3QocGF0aEluTW9kZWwpKTtcblx0bGV0IG9UYXJnZXQ7XG5cdGlmIChwcm9wID09PSBcIl9fYmluZGluZ0luZm9cIikge1xuXHRcdHJldHVybiB7IG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiIH07XG5cdH1cblx0aWYgKHR5cGVvZiBvT2JqID09PSBcInN0cmluZ1wiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9PYmogPT09IFwibnVtYmVyXCIpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb09iaiA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9PYmopKSB7XG5cdFx0b1RhcmdldCA9IG5ldyBQcm94eShvT2JqLCB7XG5cdFx0XHRnZXQodGFyZ2V0OiB1bmtub3duW10sIHA6IHN0cmluZyB8IHN5bWJvbCwgcmVjZWl2ZXI6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRcdFx0XHRjb25zdCByZWYgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHAsIHJlY2VpdmVyKTtcblx0XHRcdFx0aWYgKHR5cGVvZiByZWYgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHJldHVybiByZWYuYmluZCh0YXJnZXQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlZiA9PT0gdW5kZWZpbmVkICYmIGlzTmFOKE51bWJlcihwLnRvU3RyaW5nKCkpKSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRfX2JpbmRpbmdJbmZvOiB7XG5cdFx0XHRcdFx0XHRcdG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiLFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBwXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVmO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9UYXJnZXQgPSB7IC4uLm9PYmogfTtcblx0fVxuXHRpZiAodHlwZW9mIG9UYXJnZXQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRvVGFyZ2V0Ll9fYmluZGluZ0luZm8gPSB7XG5cdFx0XHRtb2RlbDogXCIkY29tcG9uZW50U3RhdGVcIixcblx0XHRcdHBhdGg6IHBhdGhJbk1vZGVsXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gb1RhcmdldDtcbn1cbmNvbnN0IGJvdW5kUHJvcGVydGllcyA9IFN5bWJvbChcImJvdW5kUHJvcGVydGllc1wiKTtcblxuZnVuY3Rpb24gY3JlYXRlU3RhdGVQcm94eShcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVEZWJvdW5jZWQ6IEZ1bmN0aW9uO1xuXHRcdF9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZVRpbWVyOiB1bmtub3duO1xuXHRcdF9jaGFuZ2VkUHJvcHM/OiBzdHJpbmdbXTtcblx0fSxcblx0c3RhdGVQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0Ym91bmRUb1N0YXRlUHJvcHM6IHN0cmluZ1tdLFxuXHRpbml0aWFsRGF0YT86IG9iamVjdFxuKTogSlNPTk1vZGVsIHtcblx0Ly8gTGF6eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3RhdGUgcHJvcGVydHlcblx0dGFyZ2V0Q29udHJvbC5zZXRNb2RlbChuZXcgSlNPTk1vZGVsKGluaXRpYWxEYXRhKSwgXCIkY29tcG9uZW50U3RhdGVcIik7XG5cdGNvbnN0IHN0YXRlTW9kZWwgPSB0YXJnZXRDb250cm9sLmdldE1vZGVsKFwiJGNvbXBvbmVudFN0YXRlXCIpIGFzIEpTT05Nb2RlbDtcblx0c3RhdGVNb2RlbC5hdHRhY2hQcm9wZXJ0eUNoYW5nZSgoZXZ0OiBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2dC5nZXRQYXJhbWV0ZXIoXCJwYXRoXCIpPy5zdWJzdHJpbmcoMSk7IC8vIHRvIHJlbW92ZSB0aGUgZmlyc3QgL1xuXHRcdGlmIChwYXRoICYmIGJvdW5kVG9TdGF0ZVByb3BzLmluY2x1ZGVzKHBhdGgpKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5KHBhdGgsIGV2dC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSk7XG5cdFx0fVxuXHR9KTtcblx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IHRydWU7XG5cdGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHN0YXRlTW9kZWwsIHtcblx0XHRnZXQ6ICh0YXJnZXQ6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biA9PiB7XG5cdFx0XHRyZXR1cm4gX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCk7XG5cdFx0fSxcblx0XHRzZXQ6IChzZXRTdGF0ZU1vZGVsOiBKU09OTW9kZWwsIHByb3AsIHZhbHVlKTogYm9vbGVhbiA9PiB7XG5cdFx0XHQvLyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEga25vd24gYm91bmQgcHJvcGVydHkgaW4gYW55IG9mIHRoZSByZWxhdGVkIGNsYXNzZXNcblx0XHRcdGNvbnN0IGtub3duQm91bmRQcm9wZXJ0aWVzID0gdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdO1xuXHRcdFx0aWYgKGtub3duQm91bmRQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3AudG9TdHJpbmcoKSkpIHtcblx0XHRcdFx0dGFyZ2V0Q29udHJvbC5faWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHkocHJvcC50b1N0cmluZygpLCB2YWx1ZSk7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNldFJlc3VsdCA9IHNldFN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC8ke3Byb3AudG9TdHJpbmcoKX1gLCB2YWx1ZSk7XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChwcm9wLnRvU3RyaW5nKCkpO1xuXHRcdFx0cmV0dXJuIHNldFJlc3VsdDtcblx0XHR9XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHtcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJveHk7XG5cdFx0fSxcblx0XHRzZXQodmFsdWUpIHtcblx0XHRcdC8vIFJlcGxhY2luZyB0aGUgY29tcGxldGUgc3RhdGVcblx0XHRcdHN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC9gLCB2YWx1ZSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHByb3h5O1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlU3RhdGVQcm9wZXJ0eShcblx0b2JqOiBVSTVDb250cm9sRGVmaW5pdGlvbixcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X19zdGF0ZU5hbWU6IHN0cmluZztcblx0XHRfdXBkYXRlU3RhdGU6IEZ1bmN0aW9uO1xuXHRcdF91cGRhdGVTdGF0ZURlYm91bmNlZDogRnVuY3Rpb247XG5cdFx0X2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGU6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlVGltZXI6IHVua25vd247XG5cdFx0X2NoYW5nZWRQcm9wcz86IHN0cmluZ1tdO1xuXHR9XG4pOiB2b2lkIHtcblx0aWYgKG9iai5tZXRhZGF0YT8uc3RhdGVQcm9wZXJ0eSB8fCB0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10pIHtcblx0XHRsZXQgdXBkYXRpbmdTdGF0ZSA9IGZhbHNlO1xuXHRcdGNvbnN0IGJvdW5kVG9TdGF0ZVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIG9iai5tZXRhZGF0YT8ucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKHByb3BlcnR5RGVmLmJpbmRUb1N0YXRlKSB7XG5cdFx0XHRcdGJvdW5kVG9TdGF0ZVByb3BzLnB1c2gocHJvcGVydHlOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gYXMgd2UgbWF5IGhhdmUgYm91bmQgcHJvcGVydGllcyBpbiBwYXJlbnQgY2xhc3NlcyBhbmQgc3ViY2xhc3Nlcywgd2Uga2VlcCB0cmFjayBvZiB0aG9zZSBpbiB0aGUgbW9kZWwgaXRzZWxmXG5cdFx0dGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdID8/PSBbXTtcblx0XHR0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10gPSBbLi4udGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCAuLi5ib3VuZFRvU3RhdGVQcm9wc107XG5cblx0XHRpZiAob2JqLm1ldGFkYXRhPy5zdGF0ZVByb3BlcnR5KSB7XG5cdFx0XHQvLyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBmb3JjZSB0aGUgc3RhdGUgdG8gYmUgYXBwbGllZCBhbmQgd2FpdCBmb3IgaXQgdG8gYmUgYXBwbGllZCBpbiB0ZXN0c1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGUgPSBhc3luYyBmdW5jdGlvbiAoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl91cGRhdGVTdGF0ZVRpbWVyO1xuXHRcdFx0XHRpZiAoIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRhd2FpdCAodGhpcyBhcyB7IG9uU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9KS5vblN0YXRlQ2hhbmdlPy4odGhpcy5fY2hhbmdlZFByb3BzKTtcblx0XHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPSBbXTtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZCA9IGZ1bmN0aW9uIChjaGFuZ2VkUHJvcDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcyA/Pz0gW107XG5cdFx0XHRcdGlmICghdGhpcy5fY2hhbmdlZFByb3BzLmluY2x1ZGVzKGNoYW5nZWRQcm9wKSkge1xuXHRcdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcy5wdXNoKGNoYW5nZWRQcm9wKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXRoaXMuX3VwZGF0ZVN0YXRlVGltZXIgJiYgIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZSgpO1xuXHRcdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBzdGF0ZVByb3BlcnR5TmFtZSA9IG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5O1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IGZhbHNlO1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlTmFtZSA9IHN0YXRlUHJvcGVydHlOYW1lO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldENvbnRyb2wsIHN0YXRlUHJvcGVydHlOYW1lLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGNyZWF0ZVN0YXRlUHJveHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldDogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Y3JlYXRlU3RhdGVQcm94eSh0YXJnZXRDb250cm9sLCBzdGF0ZVByb3BlcnR5TmFtZSwgdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlKSB7XG5cdFx0XHRcdHRhcmdldENvbnRyb2xbb2JqLm1ldGFkYXRhLnN0YXRlUHJvcGVydHkgYXMga2V5b2YgQ29udHJvbF0gPSB7IC4uLm9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIH0gYXMgbmV2ZXI7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmbkFwcGx5U2V0dGluZ3MgPSB0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3M7XG5cdFx0XHR0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3MgPSBmdW5jdGlvbiAobVNldHRpbmdzOiB7IG1vZGVscz86IFJlY29yZDxzdHJpbmcsIG5ldmVyPiB9KTogdHlwZW9mIHRhcmdldENvbnRyb2wge1xuXHRcdFx0XHRkZWxldGUgbVNldHRpbmdzPy5tb2RlbHM/LiRjb21wb25lbnRTdGF0ZTtcblx0XHRcdFx0cmV0dXJuIGZuQXBwbHlTZXR0aW5ncy5jYWxsKHRoaXMsIG1TZXR0aW5ncyk7XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCBmblNldFByb3BlcnR5ID0gdGFyZ2V0Q29udHJvbC5zZXRQcm9wZXJ0eTtcblx0XHRpZiAodGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLmxlbmd0aCA+IDApIHtcblx0XHRcdHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHkgPSBmdW5jdGlvbiAoc1Byb3BlcnR5TmFtZTogc3RyaW5nLCBvVmFsdWU6IHVua25vd24sIGJTdXBwcmVzc0ludmFsaWRhdGUpOiB0eXBlb2YgdGFyZ2V0Q29udHJvbCB7XG5cdFx0XHRcdGlmICh0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10uaW5jbHVkZXMoc1Byb3BlcnR5TmFtZSkgJiYgIXRoaXMuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUpIHtcblx0XHRcdFx0XHRpZiAoIXRoaXMuX19zdGF0ZUNyZWF0ZWQpIHtcblx0XHRcdFx0XHRcdGNyZWF0ZVN0YXRlUHJveHkodGFyZ2V0Q29udHJvbCwgdGFyZ2V0Q29udHJvbC5fX3N0YXRlTmFtZSwgdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KHRoaXMuZ2V0TW9kZWwoXCIkY29tcG9uZW50U3RhdGVcIikgYXMgSlNPTk1vZGVsKS5zZXRQcm9wZXJ0eShgLyR7c1Byb3BlcnR5TmFtZX1gLCBvVmFsdWUpO1xuXHRcdFx0XHRcdHRhcmdldENvbnRyb2wuX3VwZGF0ZVN0YXRlRGVib3VuY2VkKHNQcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmblNldFByb3BlcnR5LmNhbGwodGhpcywgc1Byb3BlcnR5TmFtZSwgb1ZhbHVlLCBiU3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgaGVhdnkgbGlmdGluZyB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGNyZWF0aW5nIHRoZSBjbGFzcyBwcm9wZXJ0eSBmb3IgdWk1IHRvIHVzZS5cbiAqIEBwYXJhbSBjbGF6eiBUaGUgY2xhc3MgcHJvdG90eXBlXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY2xhc3MgdG8gY3JlYXRlXG4gKiBAcGFyYW0gaW5PYmogVGhlIG1ldGFkYXRhIG9iamVjdFxuICogQHJldHVybnMgVGhlIG1ldGFkYXRhIGNsYXNzXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyVUk1TWV0YWRhdGEoY2xheno6IFVJNUNvbnRyb2xBbmRNb3JlLCBuYW1lOiBzdHJpbmcsIGluT2JqOiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiB8IFVJNUNvbnRyb2xEZWZpbml0aW9uKTogRnVuY3Rpb24ge1xuXHRpZiAoY2xhenouZ2V0TWV0YWRhdGE/LigpLmlzQShcInNhcC51aS5jb3JlLm12Yy5Db250cm9sbGVyRXh0ZW5zaW9uXCIpKSB7XG5cdFx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5PYmopLmZvckVhY2goKG9iak5hbWUpID0+IHtcblx0XHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGluT2JqLCBvYmpOYW1lKTtcblx0XHRcdGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmVudW1lcmFibGUpIHtcblx0XHRcdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRjb25zdCBvYmo6IGFueSA9IHt9O1xuXHRvYmoubWV0YWRhdGEgPSBpbk9iai5tZXRhZGF0YSB8fCB7fTtcblx0b2JqLm92ZXJyaWRlID0gaW5PYmoub3ZlcnJpZGU7XG5cdG9iai5jb25zdHJ1Y3RvciA9IGNsYXp6O1xuXHRvYmoubWV0YWRhdGEuYmFzZVR5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY2xhenoucHJvdG90eXBlKS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKTtcblxuXHRpZiAoKGNsYXp6Py5nZXRNZXRhZGF0YSgpIGFzIHVua25vd24gYXMgeyBnZXRTdGVyZW90eXBlOiBGdW5jdGlvbiB9KT8uZ2V0U3RlcmVvdHlwZSgpID09PSBcImNvbnRyb2xcIikge1xuXHRcdGNvbnN0IHJlbmRlcmVyRGVmaW5pdGlvbiA9IGluT2JqLnJlbmRlcmVyIHx8IGNsYXp6LnJlbmRlcmVyIHx8IGNsYXp6LnJlbmRlcjtcblx0XHRvYmoucmVuZGVyZXIgPSB7IGFwaVZlcnNpb246IDIgfTtcblx0XHRpZiAodHlwZW9mIHJlbmRlcmVyRGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRvYmoucmVuZGVyZXIucmVuZGVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHRcdH0gZWxzZSBpZiAocmVuZGVyZXJEZWZpbml0aW9uICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0b2JqLnJlbmRlcmVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHRcdH1cblx0fVxuXHRvYmoubWV0YWRhdGEuaW50ZXJmYWNlcyA9IGluT2JqLm1ldGFkYXRhPy5pbnRlcmZhY2VzIHx8IGNsYXp6Lm1ldGFkYXRhPy5pbnRlcmZhY2VzO1xuXHRPYmplY3Qua2V5cyhjbGF6ei5wcm90b3R5cGUpLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdGlmIChrZXkgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0b2JqW2tleV0gPSBjbGF6ei5wcm90b3R5cGVba2V5XTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0Ly8gRG8gbm90aGluZ1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0aWYgKG9iai5tZXRhZGF0YT8uY29udHJvbGxlckV4dGVuc2lvbnMgJiYgT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBjRXh0TmFtZSBpbiBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnMpIHtcblx0XHRcdG9ialtjRXh0TmFtZV0gPSBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbY0V4dE5hbWVdO1xuXHRcdH1cblx0fVxuXHRjb25zdCBvdXRwdXQgPSBjbGF6ei5leHRlbmQobmFtZSwgb2JqKSBhcyB0eXBlb2YgQ29udHJvbCAmIEZ1bmN0aW9uO1xuXHRjb25zdCBmbkluaXQgPSBvdXRwdXQucHJvdG90eXBlLmluaXQ7XG5cdGNvbnN0IGZuQWZ0ZXJJbml0ID0gb3V0cHV0LnByb3RvdHlwZS5hZnRlckluaXQ7XG5cdG91dHB1dC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcblx0XHRpZiAoZm5Jbml0KSB7XG5cdFx0XHRmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fVxuXHRcdGlmIChjbGF6ei5yZWdpc3Rlckluc3RhbmNlKSB7XG5cdFx0XHRjbGF6ei5yZWdpc3Rlckluc3RhbmNlKHRoaXMpO1xuXHRcdH1cblx0XHR0aGlzLm1ldGFkYXRhID0gb2JqLm1ldGFkYXRhO1xuXG5cdFx0aWYgKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBhUHJvcGVydHlLZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLnByb3BlcnRpZXMpO1xuXHRcdFx0YVByb3BlcnR5S2V5cy5mb3JFYWNoKChwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eURlZiA9IG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XTtcblx0XHRcdFx0Ly8gSWYgYSB2YWx1ZSB3YXMgc2V0IGluIGBpbml0YCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCBpcyBzZXQgaW4gdGhlIHZhbHVlIGluIHRoZSBlbmRcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWZhdWx0ID0gdGhpc1twcm9wZXJ0eUtleV0gPz8gcHJvcGVydHlEZWYuZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRpZiAocHJvcGVydHlEZWYuaXNCaW5kaW5nSW5mbyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzID8/PSB7fTtcblxuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHR0aGlzLm1Qcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IHY7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldCgpOiB1bmtub3duIHtcblx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIHByb3BlcnR5IGZpcnN0IGFuZCBub3QganVzdCB0aGUgX2JpbmRpbmdQcm9wZXJ0aWVzXG5cdFx0XHRcdFx0XHRcdC8vIER1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24sIGlmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgd2l0aCBhIG5vbiBiaW5kaW5nIHZhbHVlLCBzZXRQcm9wZXJ0eSBpcyBjYWxsZWQgYW5kIG5vdCBiaW5kUHJvcGVydHlcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBiaW5kaW5nUHJvcGVydHlWYWx1ZSA9IHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XTtcblx0XHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIHNldCB0byBhIGRpZmZlcmVudCB2YWx1ZSB3ZSB1cGRhdGUgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5VmFsdWUgIT09IGJpbmRpbmdQcm9wZXJ0eVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zdCBwcm9wVmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgLi4ucHJvcFZhbHVlIH07IC8vIENyZWF0ZSBzaGFsbG93IGNvcHlcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJvcFZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KHByb3BlcnR5S2V5LCB2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwcm9wZXJ0eURlZmF1bHQgIT09IHVuZGVmaW5lZCAmJiB0aGlzW3Byb3BlcnR5S2V5XSAhPT0gcHJvcGVydHlEZWZhdWx0KSB7XG5cdFx0XHRcdFx0Ly8gZG9uJ3Qgb3ZlcndyaXRlIHRoZSBkZWZhdWx0IHZhbHVlIGlmIGl0J3MgYWxyZWFkeSB0aGVyZVxuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXNbcHJvcGVydHlLZXldID0gcHJvcGVydHlEZWZhdWx0O1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSBmYWxzZTtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5fYXBwbHlpbmdTZXR0aW5ncztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBhQWdncmVnYXRpb25LZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmFnZ3JlZ2F0aW9ucyk7XG5cdFx0XHRhQWdncmVnYXRpb25LZXlzLmZvckVhY2goKGFnZ3JlZ2F0aW9uS2V5KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uRGVmID0gb2JqLm1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1thZ2dyZWdhdGlvbktleV07XG5cdFx0XHRcdGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXNbYWdncmVnYXRpb25LZXldID8/IGFnZ3JlZ2F0aW9uRGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFnZ3JlZ2F0aW9uS2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gdGhpcy5nZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbktleSk7XG5cdFx0XHRcdFx0XHRpZiAob2JqLm1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1thZ2dyZWdhdGlvbktleV0ubXVsdGlwbGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudCB8fCBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGRlZmF1bHRWYWx1ZSAmJiAoZGVmYXVsdFZhbHVlIGFzIFVJNUVsZW1lbnQpPy5pc0EpIHtcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzW2FnZ3JlZ2F0aW9uS2V5XSA9IGRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gZmFsc2U7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX2FwcGx5aW5nU2V0dGluZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYUFzc29jaWF0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hc3NvY2lhdGlvbnMpO1xuXHRcdFx0YUFzc29jaWF0aW9uS2V5cy5mb3JFYWNoKChhc3NvY2lhdGlvbktleSkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgYXNzb2NpYXRpb25LZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0QXNzb2NpYXRpb24oYXNzb2NpYXRpb25LZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFzc29jaWF0aW9uKGFzc29jaWF0aW9uS2V5KTtcblx0XHRcdFx0XHRcdGlmIChvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zW2Fzc29jaWF0aW9uS2V5XS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50IHx8IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChvYmoubWV0YWRhdGEucmVmZXJlbmNlcykge1xuXHRcdFx0Y29uc3QgcmVmZXJlbmNlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5yZWZlcmVuY2VzKTtcblx0XHRcdHJlZmVyZW5jZVByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiBjcmVhdGVSZWZlcmVuY2UoKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob2JqLm1ldGFkYXRhLm1ldGhvZHMpIHtcblx0XHRcdGZvciAoY29uc3QgbWV0aG9kTmFtZSBpbiBvYmoubWV0YWRhdGEubWV0aG9kcykge1xuXHRcdFx0XHRjb25zdCBtZXRob2REZWZpbml0aW9uID0gb2JqLm1ldGFkYXRhLm1ldGhvZHNbbWV0aG9kTmFtZV07XG5cdFx0XHRcdGlmIChtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkFmdGVyQXN5bmNcIiB8fCBtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRpZiAoIXRoaXMubWV0aG9kSG9sZGVyKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm1ldGhvZEhvbGRlciA9IFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXSA9IFt0aGlzW21ldGhvZE5hbWVdXTtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbWV0aG9kTmFtZSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogRnVuY3Rpb24pID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdLnB1c2godik7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhc3luYyAoLi4ubWV0aG9kQXJnczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbWV0aG9kQXJyYXlzID0gdGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQmVmb3JlQXN5bmNcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0bWV0aG9kQXJyYXlzLnJldmVyc2UoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGFyZyBvZiBtZXRob2RBcnJheXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGF3YWl0IGFyZy5hcHBseSh0aGlzLCBtZXRob2RBcmdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRfY3JlYXRlU3RhdGVQcm9wZXJ0eShvYmosIHRoaXMpO1xuXHRcdGlmIChmbkFmdGVySW5pdCkge1xuXHRcdFx0Zm5BZnRlckluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fVxuXHR9O1xuXG5cdGNsYXp6Lm92ZXJyaWRlID0gZnVuY3Rpb24gKG9FeHRlbnNpb246IHVua25vd24pOiBGdW5jdGlvbiB7XG5cdFx0Y29uc3QgcG9sID0ge307XG5cdFx0KHBvbCBhcyBGdW5jdGlvbikuY29uc3RydWN0b3IgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogRnVuY3Rpb24ge1xuXHRcdFx0cmV0dXJuIGNsYXp6LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH07XG5cdFx0Y29uc3Qgb0NsYXNzID0gKE1ldGFkYXRhIGFzIHVua25vd24gYXMgeyBjcmVhdGVDbGFzczogRnVuY3Rpb24gfSkuY3JlYXRlQ2xhc3MoXG5cdFx0XHRjbGF6eixcblx0XHRcdGBhbm9ueW1vdXNFeHRlbnNpb25+JHt1aWQoKX1gLFxuXHRcdFx0cG9sLFxuXHRcdFx0Q29udHJvbGxlck1ldGFkYXRhXG5cdFx0KTtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fc3RhdGljT3ZlcnJpZGUgPSBvRXh0ZW5zaW9uO1xuXHRcdG9DbGFzcy5nZXRNZXRhZGF0YSgpLl9vdmVycmlkZSA9IChjbGF6ei5nZXRNZXRhZGF0YSgpIGFzIHsgX292ZXJyaWRlPzogdW5rbm93biB9KS5fb3ZlcnJpZGU7XG5cdFx0cmV0dXJuIG9DbGFzcztcblx0fTtcblxuXHRPYmplY3RQYXRoLnNldChuYW1lLCBvdXRwdXQpO1xuXG5cdHJldHVybiBvdXRwdXQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7RUFnSkEsTUFBTUEsY0FBYyxHQUFHLFNBQUFBLENBQVVDLE1BQXNELEVBQWdDO0lBQ3RIQSxNQUFNLENBQUNDLFFBQVEsR0FBR0MsS0FBSyxDQUN0QjtNQUNDQyxvQkFBb0IsRUFBRSxD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
819
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJyZWZlcmVuY2VzIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJwcmVwYXJlR2V0QVBJRnVuY3Rpb24iLCJvRXZlbnQiLCJhcGlGUU4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvU291cmNlIiwiZ2V0U291cmNlIiwiX2dldEFQSUV4dGVuc2lvbiIsImlzQSIsImdldFBhcmVudCIsImlzRGVwZW5kZW50Qm91bmQiLCJvRGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJoYXNDb3JyZWN0RGVwZW5kZW50IiwiZmluZCIsIm9EZXBlbmRlbnQiLCJvU291cmNlTWFwIiwiaW5zdGFuY2VNYXAiLCJnZXQiLCJ0YXJnZXRDb250cm9sIiwiZW5zdXJlR2V0QVBJIiwiX19hcGlSZWdpc3RlcmVkIiwiV2Vha01hcCIsInJlZ2lzdGVySW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjb25zdHJ1Y3RvciIsInNldCIsInB1c2giLCJnZXRBUEkiLCJkZWZpbmVTdGF0ZSIsInByb3BlcnR5S2V5IiwicHJvcGVydHlEZXNjcmlwdG9yIiwic3RhdGVQcm9wZXJ0eSIsIkVycm9yIiwid3JpdGFibGUiLCJzdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIiwiaW5pdGlhbGl6ZXIiLCJfZXhwb3J0cyIsIm1ldGhvZE92ZXJyaWRlIiwiZXh0ZW5zaW9uTmFtZSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiZGVzY3JpcHRvciIsImhvb2thYmxlIiwicHVibGljRXh0ZW5zaW9uIiwiZW51bWVyYWJsZSIsInB1YmxpYyIsInByaXZhdGVFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImZpbmFsIiwidXNpbmdFeHRlbnNpb24iLCJleHRlbnNpb25DbGFzcyIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJncm91cCIsImRlZmF1bHRWYWx1ZSIsImFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25EZWZpbml0aW9uIiwibXVsdGlwbGUiLCJpc0RlZmF1bHQiLCJkZWZhdWx0QWdncmVnYXRpb24iLCJhc3NvY2lhdGlvbiIsInVpNUFzc29jaWF0aW9uTWV0YWRhdGEiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJpbnRlcmZhY2VOYW1lIiwieG1sRXZlbnRIYW5kbGVyIiwicHJvcGVydHlrZXkiLCJjdXJyZW50Q29uc3RydWN0b3IiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImRlZmluZVVJNUNsYXNzIiwic1RhcmdldCIsIm1ldGFkYXRhRGVmaW5pdGlvbiIsInByb3RvdHlwZSIsImtleSIsImlzQXJyYXkiLCJjb25jYXQiLCJyZWdpc3RlclVJNU1ldGFkYXRhIiwibWl4aW4iLCJpbnRlcmZhY2VDbGFzcyIsImJhc2VDdG9yIiwiZXh0ZW5kIiwiaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgiLCJfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzIiwiT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJwcm9wYWdhdGVIb29rRnJvbU1peGluIiwic2V0dXBNaXhpbiIsImNyZWF0ZVJlZmVyZW5jZSIsImN1cnJlbnQiLCJzZXRDdXJyZW50Iiwib0NvbnRyb2xJbnN0YW5jZSIsImRlZmluZVJlZmVyZW5jZSIsIkJhc2VPYmplY3QiLCJpc09iamVjdEEiLCJiYXNlQ2xhc3NNZXRhZGF0YSIsImludGVyZmFjZUNsYXNzUHJvdG90eXBlIiwiZ2V0SW50ZXJmYWNlTmFtZSIsImdldE93blByb3BlcnR5TmFtZXMiLCJmb3JFYWNoIiwibmFtZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiY3JlYXRlIiwiX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5IiwianNvbk1vZGVsIiwicHJvcCIsInBhdGhJbk1vZGVsIiwib09iaiIsImRlZXBDbG9uZSIsImdldE9iamVjdCIsIm9UYXJnZXQiLCJtb2RlbCIsIlByb3h5IiwicCIsInJlY2VpdmVyIiwicmVmIiwiUmVmbGVjdCIsImJpbmQiLCJpc05hTiIsIk51bWJlciIsIl9fYmluZGluZ0luZm8iLCJwYXRoIiwiYm91bmRQcm9wZXJ0aWVzIiwiU3ltYm9sIiwiY3JlYXRlU3RhdGVQcm94eSIsInN0YXRlUHJvcGVydHlOYW1lIiwiYm91bmRUb1N0YXRlUHJvcHMiLCJpbml0aWFsRGF0YSIsInNldE1vZGVsIiwiSlNPTk1vZGVsIiwic3RhdGVNb2RlbCIsImdldE1vZGVsIiwiYXR0YWNoUHJvcGVydHlDaGFuZ2UiLCJldnQiLCJnZXRQYXJhbWV0ZXIiLCJzdWJzdHJpbmciLCJpbmNsdWRlcyIsInNldFByb3BlcnR5IiwiX19zdGF0ZUNyZWF0ZWQiLCJwcm94eSIsInNldFN0YXRlTW9kZWwiLCJ2YWx1ZSIsImtub3duQm91bmRQcm9wZXJ0aWVzIiwiX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUiLCJzZXRSZXN1bHQiLCJfdXBkYXRlU3RhdGVEZWJvdW5jZWQiLCJjb25maWd1cmFibGUiLCJfY3JlYXRlU3RhdGVQcm9wZXJ0eSIsIm9iaiIsInVwZGF0aW5nU3RhdGUiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eURlZiIsImJpbmRUb1N0YXRlIiwiX3VwZGF0ZVN0YXRlIiwiX3VwZGF0ZVN0YXRlVGltZXIiLCJvblN0YXRlQ2hhbmdlIiwiX2NoYW5nZWRQcm9wcyIsImNoYW5nZWRQcm9wIiwic2V0VGltZW91dCIsIl9fc3RhdGVOYW1lIiwiZm5BcHBseVNldHRpbmdzIiwiYXBwbHlTZXR0aW5ncyIsIm1TZXR0aW5ncyIsIm1vZGVscyIsIiRjb21wb25lbnRTdGF0ZSIsImNhbGwiLCJmblNldFByb3BlcnR5Iiwic1Byb3BlcnR5TmFtZSIsIm9WYWx1ZSIsImJTdXBwcmVzc0ludmFsaWRhdGUiLCJjbGF6eiIsImluT2JqIiwib2JqTmFtZSIsImJhc2VUeXBlIiwiZ2V0U3RlcmVvdHlwZSIsInJlbmRlcmVyRGVmaW5pdGlvbiIsInJlbmRlcmVyIiwicmVuZGVyIiwiYXBpVmVyc2lvbiIsImtleXMiLCJlIiwiY0V4dE5hbWUiLCJvdXRwdXQiLCJmbkluaXQiLCJpbml0IiwiZm5BZnRlckluaXQiLCJhZnRlckluaXQiLCJfdGhpcyIsIl9sZW4yIiwiX2tleTIiLCJhcHBseSIsImFQcm9wZXJ0eUtleXMiLCJwcm9wZXJ0eURlZmF1bHQiLCJfYmluZGluZ1Byb3BlcnRpZXMiLCJ2IiwibVByb3BlcnRpZXMiLCJwcm9wZXJ0eVZhbHVlIiwiZ2V0UHJvcGVydHkiLCJiaW5kaW5nUHJvcGVydHlWYWx1ZSIsInByb3BWYWx1ZSIsIl9hcHBseWluZ1NldHRpbmdzIiwiYUFnZ3JlZ2F0aW9uS2V5cyIsImFnZ3JlZ2F0aW9uS2V5IiwiYWdncmVnYXRpb25EZWYiLCJzZXRBZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0aW9uQ29udGVudCIsImdldEFnZ3JlZ2F0aW9uIiwiYUFzc29jaWF0aW9uS2V5cyIsImFzc29jaWF0aW9uS2V5Iiwic2V0QXNzb2NpYXRpb24iLCJnZXRBc3NvY2lhdGlvbiIsInJlZmVyZW5jZVByb3BlcnRpZXMiLCJtZXRob2ROYW1lIiwibWV0aG9kRGVmaW5pdGlvbiIsIm1ldGhvZEhvbGRlciIsIm1ldGhvZEFycmF5cyIsInJldmVyc2UiLCJyZXN1bHQiLCJfbGVuMyIsIm1ldGhvZEFyZ3MiLCJfa2V5MyIsImFyZyIsIm9FeHRlbnNpb24iLCJwb2wiLCJfbGVuNCIsIl9rZXk0Iiwib0NsYXNzIiwiTWV0YWRhdGEiLCJjcmVhdGVDbGFzcyIsInVpZCIsIkNvbnRyb2xsZXJNZXRhZGF0YSIsIl9zdGF0aWNPdmVycmlkZSIsIl9vdmVycmlkZSIsIk9iamVjdFBhdGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IHsgaG9va2FibGUsIHByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01ldGFkYXRhXCI7XG5pbXBvcnQgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBDb250cm9sbGVyTWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyTWV0YWRhdGFcIjtcbmltcG9ydCB0eXBlIE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1vZGVsJFByb3BlcnR5Q2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcblxudHlwZSBPdmVycmlkZURlZmluaXRpb24gPSBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj47XG50eXBlIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uID0ge1xuXHRvdmVycmlkZUV4ZWN1dGlvbj86IE92ZXJyaWRlRXhlY3V0aW9uO1xuXHRwdWJsaWM/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+ID0gVCAmIHtcblx0X19iaW5kaW5nSW5mbzoge1xuXHRcdHBhdGg6IHN0cmluZztcblx0XHRtb2RlbDogc3RyaW5nO1xuXHRcdHR5cGU6IFQ7XG5cdH07XG59O1xuXG4vKipcbiAqIEFsbG93cyB0byBkZWZpbmUgYSBwcm9wZXJ0eSB0aGF0IHdpbGwgaG9sZCB0aGUgY29udHJvbCBzdGF0ZS5cbiAqXG4gKiBQcm9wZXJ0aWVzIGRlZmluZWQgd2l0aCB0aGlzIGRlY29yYXRvciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYm91bmQgdG8gdGhlIGNvbnRyb2wgc3RhdGUgd2hlbiB1c2VkIGluIEpTWC5cbiAqIEFycmF5cyBuZWVkIHRvIGJlIGJvdW5kIHVzaW5nIHRoZSBgYmluZFN0YXRlYCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEgcHJvcGVydHkgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTdGF0ZSgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAobWV0YWRhdGEuc3RhdGVQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IG9uZSBzdGF0ZSBwcm9wZXJ0eSBwZXIgY29udHJvbCBpcyBhbGxvd2VkXCIpO1xuXHRcdH1cblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5ID0gcHJvcGVydHlLZXk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbi8qICNyZWdpb24gQ09OVFJPTExFUiBFWFRFTlNJT05TICovXG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIGlzIGFuIG92ZXJyaWRlIGZvciB0aGUgbWV0aG9kIG5hbWUgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoZSBzcGVjaWZpYyBjb250cm9sbGVyIGV4dGVuc2lvbiBvciBiYXNlIGltcGxlbWVudGF0aW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgb3ZlcnJpZGRlblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ldGhvZE92ZXJyaWRlKGV4dGVuc2lvbk5hbWU/OiBzdHJpbmcpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5KSB7XG5cdFx0aWYgKCF0YXJnZXQub3ZlcnJpZGUpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZSA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIXRhcmdldC5vdmVycmlkZXMpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZXMgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGVzO1xuXHRcdGlmIChleHRlbnNpb25OYW1lKSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdID0ge307XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV07XG5cdFx0fVxuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSAodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPilbcHJvcGVydHlLZXkudG9TdHJpbmcoKV07XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2FuIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGJhc2VkIG9uIHRoZSBkZWZpbmVkIG92ZXJyaWRlRXhlY3V0aW9uVHlwZS5cbiAqIEBwYXJhbSBvdmVycmlkZUV4ZWN1dGlvbiBUaGUgT3ZlcnJpZGVFeGVjdXRpb24gZGVmaW5pbmcgd2hlbiB0aGUgb3ZlcnJpZGUgc2hvdWxkIHJ1biAoQmVmb3JlIC8gQWZ0ZXIgLyBJbnN0ZWFkKVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuc2libGUob3ZlcnJpZGVFeGVjdXRpb246IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLm92ZXJyaWRlRXhlY3V0aW9uID0gb3ZlcnJpZGVFeGVjdXRpb24gYXMgdW5rbm93biBhcyBPdmVycmlkZUV4ZWN1dGlvbjtcblxuXHRcdC8vIGJ5IGRlZmF1bHQsIGV2ZXJ5IGV4dGVuc2libGUgbWV0aG9kIGlzIGFsc28gaG9va2FibGUgKGV4Y2VwdCB0aG9zZSBkZWZpbmVkIGFzIEluc3RlYWQpXG5cdFx0aWYgKG92ZXJyaWRlRXhlY3V0aW9uICE9PSBcIkluc3RlYWRcIikge1xuXHRcdFx0aG9va2FibGUob3ZlcnJpZGVFeGVjdXRpb24pKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIHB1YmxpY2x5IGF2YWlsYWJsZSBmb3IgY29udHJvbGxlciBleHRlbnNpb24gdXNhZ2UuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpOiB2b2lkIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSB0cnVlO1xuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIG9ubHkgYXZhaWxhYmxlIGZvciBpbnRlcm5hbCB1c2FnZSBvZiB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUV4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ucHVibGljID0gZmFsc2U7XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIGNhbm5vdCBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5maW5hbCA9IHRydWU7XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHdlIGFyZSBnb2luZyB0byB1c2UgaW5zdGFudGlhdGUgYSBjb250cm9sbGVyIGV4dGVuc2lvbiB1bmRlciB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG5hbWUuXG4gKiBAcGFyYW0gZXh0ZW5zaW9uQ2xhc3MgVGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWRcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzaW5nRXh0ZW5zaW9uKGV4dGVuc2lvbkNsYXNzOiB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSBleHRlbnNpb25DbGFzcztcblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKiAjZW5kcmVnaW9uICovXG5cbi8qICNyZWdpb24gQ09OVFJPTCAqL1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgc2hhbGwgYmUgZGVjbGFyZWQgYXMgYW4gZXZlbnQgb24gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudCgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgZXZlbnRLZXk6IHN0cmluZyB8IFN5bWJvbCkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSBhdHRyaWJ1dGVEZWZpbml0aW9uIFRoZSBwcm9wZXJ0eSBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHkoYXR0cmlidXRlRGVmaW5pdGlvbjogVUk1UHJvcGVydHlNZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmIChhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAoYXR0cmlidXRlRGVmaW5pdGlvbi5pc0JpbmRpbmdJbmZvID09PSB0cnVlKSB7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID0gZmFsc2U7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmdyb3VwID0gXCJEYXRhXCI7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gYXR0cmlidXRlRGVmaW5pdGlvbjtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSA/Pz0gKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogRnVuY3Rpb24gfSkuaW5pdGlhbGl6ZXI/LigpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuZCBjb25maWd1cmVzIHRoZSBmb2xsb3dpbmcgYWdncmVnYXRpb24gaW4gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcGFyYW0gYWdncmVnYXRpb25EZWZpbml0aW9uIFRoZSBhZ2dyZWdhdGlvbiBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWdncmVnYXRpb24oYWdncmVnYXRpb25EZWZpbml0aW9uOiBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5tdWx0aXBsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBVSTUgZGVmYXVsdHMgdGhpcyB0byB0cnVlIGJ1dCB0aGlzIGlzIGp1c3Qgd2VpcmQuLi5cblx0XHRcdGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5tdWx0aXBsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoIW1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0gPSBhZ2dyZWdhdGlvbkRlZmluaXRpb247XG5cdFx0fVxuXHRcdGlmIChhZ2dyZWdhdGlvbkRlZmluaXRpb24uaXNEZWZhdWx0KSB7XG5cdFx0XHRtZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gPSBwcm9wZXJ0eUtleTtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRhZ2dyZWdhdGlvbkRlZmluaXRpb24uZGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGZvbGxvd2luZyBhc3NvY2lhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBhc3NvY2lhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc29jaWF0aW9uKHVpNUFzc29jaWF0aW9uTWV0YWRhdGE6IFVJNUFzc29jaWF0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0gPSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGluIHRoZSBtZXRhZGF0YSB0aGF0IHRoaXMgY29udHJvbCBpbXBsZW1lbnRzIGEgc3BlY2lmaWMgaW50ZXJmYWNlLlxuICogQHBhcmFtIGludGVyZmFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGltcGxlbWVudGVkIGludGVyZmFjZVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcGxlbWVudEludGVyZmFjZShpbnRlcmZhY2VOYW1lOiBzdHJpbmcpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblxuXHRcdG1ldGFkYXRhLmludGVyZmFjZXMucHVzaChpbnRlcmZhY2VOYW1lKTtcblx0fTtcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIG1ldGhvZCBzaG91bGQgYWxzbyBiZSBleHBvc2VkIHN0YXRpY2FsbHkgc28gd2UgY2FuIGNhbGwgaXQgZnJvbSBYTUwuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sRXZlbnRIYW5kbGVyKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlrZXkpIHtcblx0XHRjb25zdCBjdXJyZW50Q29uc3RydWN0b3I6IFVJNUFQSUNvbnRyb2wgPSB0YXJnZXQuY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBVSTVBUElDb250cm9sO1xuXHRcdGVuc3VyZUdldEFQSShjdXJyZW50Q29uc3RydWN0b3IpO1xuXHRcdGN1cnJlbnRDb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleS50b1N0cmluZygpXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcblx0XHRcdGlmIChhcmdzPy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFRhcmdldCA9IGN1cnJlbnRDb25zdHJ1Y3Rvci5nZXRBUEkoYXJnc1swXSBhcyBVSTVFdmVudCk7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQ/Lltwcm9wZXJ0eWtleS50b1N0cmluZygpXSguLi5hcmdzKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xufVxuXG50eXBlIFVJNUNvbnRyb2xBbmRNb3JlID0gdHlwZW9mIENvbnRyb2wgJlxuXHRGdW5jdGlvbiAmIHtcblx0XHRyZWdpc3Rlckluc3RhbmNlPzogRnVuY3Rpb247XG5cdFx0b3ZlcnJpZGU/OiBGdW5jdGlvbjtcblx0XHRyZW5kZXJlcj86IHVua25vd247XG5cdFx0cmVuZGVyOiBGdW5jdGlvbjtcblx0XHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdH07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyBjbGFzcyBzaG91bGQgZGVmaW5lIGEgVUk1IGNvbnRyb2wgb2YgdGhlIHNwZWNpZmllZCBuYW1lLlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBVSTUgY2xhc3NcbiAqIEBwYXJhbSBtZXRhZGF0YURlZmluaXRpb24gSW5saW5lIG1ldGFkYXRhIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIEEgY2xhc3MgZGVjb3JhdG9yIHRoYXQgd2lsbCBjcmVhdGUgYSB1aTUgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVJNUNsYXNzKHNUYXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogUGFydGlhbDxVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0XHRpZiAoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldKSkge1xuXHRcdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XS5jb25jYXQoXG5cdFx0XHRcdFx0XHRcdG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5jb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSxcblx0XHRcdFx0XHRcdFx0Li4uKG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl0gYXMgb2JqZWN0KVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZWdpc3RlclVJNU1ldGFkYXRhKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpO1xuXHR9IGFzIENsYXNzRGVjb3JhdG9yO1xufVxudHlwZSBDb25zdHJ1Y3RvcjxUID0ge30+ID0gbmV3ICguLi5hOiB1bmtub3duW10pID0+IFQ7XG4vKipcbiAqIE1peGluIGEgc3BlY2lmaWMgaW50ZXJmYWNlIGluY2x1ZGluZyBhbGwgaXRzIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgaW50byB0aGUgY29udHJvbC5cbiAqIEBwYXJhbSBpbnRlcmZhY2VDbGFzcyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBvZiB0aGUgY29udHJvbFxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBjbGFzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWl4aW48VCBleHRlbmRzIElJbnRlcmZhY2VXaXRoTWl4aW4+KGludGVyZmFjZUNsYXNzOiBDb25zdHJ1Y3RvcjxUPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChiYXNlQ3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoYmFzZUN0b3IucHJvdG90eXBlLmV4dGVuZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIG1peGluSW50ZXJmYWNlIGRlY29yYXRvciBtdXN0IGJlIHBsYWNlZCBhZnRlciBgZGVmaW5lVWk1Q2xhc3NgXCIpO1xuXHRcdH1cblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKGJhc2VDdG9yLnByb3RvdHlwZSk7XG5cblx0XHRsZXQgaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXggPSBpbnRlcmZhY2VDbGFzcy5wcm90b3R5cGU7XG5cdFx0d2hpbGUgKGludGVyZmFjZVByb3RvVHlwZVRvTWl4KSB7XG5cdFx0XHRiYXNlQ3RvciA9IF9hZGRJbnRlcmZhY2VQcm90b1R5cGVzVG9CYXNlQ2xhc3MoYmFzZUN0b3IsIG1ldGFkYXRhLCBpbnRlcmZhY2VQcm90b1R5cGVUb01peCk7XG5cdFx0XHRpbnRlcmZhY2VQcm90b1R5cGVUb01peCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnRlcmZhY2VQcm90b1R5cGVUb01peCk7XG5cdFx0fVxuXHRcdHByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4oYmFzZUN0b3IsIGludGVyZmFjZUNsYXNzKTtcblxuXHRcdC8vIEhvb2sgdG8gYWRkIHBvdGVudGlhbGx5IG1vcmUgbG9naWMgdG8gdGhlIG1peGluXG5cdFx0aW50ZXJmYWNlQ2xhc3MucHJvdG90eXBlLnNldHVwTWl4aW4/LihiYXNlQ3Rvcik7XG5cdFx0cmV0dXJuIGJhc2VDdG9yO1xuXHR9IGFzIENsYXNzRGVjb3JhdG9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZWNlaXZpbmcgY29udHJvbC5cblx0ICogSWYgbm90IGRlZmluZWQsIHRoZSBpbnRlcmZhY2Ugd2lsbCBub3QgYmUgYWRkZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2Vcblx0ICovXG5cdGdldEludGVyZmFjZU5hbWU/KCk6IHN0cmluZztcblxuXHQvKipcblx0ICogSG9vayB0byBhZGQgbW9yZSBsb2dpYyB0byB0aGUgbWl4aW4uXG5cdCAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgY29udHJvbHMgYXJlIGNyZWF0ZWQgYW5kIGNhbiBiZSB1c2VkIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgbG9naWMgdG8gdGhlIGJhc2UgY2xhc3MuXG5cdCAqIEBwYXJhbSBiYXNlQ2xhc3MgVGhlIGJhc2UgY2xhc3MgdGhhdCB3aWxsIGJlIGV4dGVuZGVkXG5cdCAqL1xuXHRzZXR1cE1peGluPyhiYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZmVyZW5jZTxUIGV4dGVuZHMgVUk1RWxlbWVudD4oKTogUmVmPFQ+IHtcblx0cmV0dXJuIHtcblx0XHRjdXJyZW50OiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBULFxuXHRcdHNldEN1cnJlbnQ6IGZ1bmN0aW9uIChvQ29udHJvbEluc3RhbmNlOiBUKTogdm9pZCB7XG5cdFx0XHR0aGlzLmN1cnJlbnQgPSBvQ29udHJvbEluc3RhbmNlO1xuXHRcdH1cblx0fTtcbn1cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgb2JqZWN0IHdpbGwgaG9sZCBhIHJlZmVyZW5jZSB0byBhIGNvbnRyb2wgdGhyb3VnaCBqc3ggdGVtcGxhdGluZy5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVSZWZlcmVuY2UoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblx0XHRpZiAoQmFzZU9iamVjdC5pc09iamVjdEEodGFyZ2V0LCBcInNhcC51aS5jb3JlLkNvbnRyb2xcIikpIHtcblx0XHRcdGlmICghbWV0YWRhdGEucmVmZXJlbmNlc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdFx0bWV0YWRhdGEucmVmZXJlbmNlc1twcm9wZXJ0eUtleV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyID0gY3JlYXRlUmVmZXJlbmNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuXG5mdW5jdGlvbiBfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzKFxuXHRiYXNlQ3RvcjogVUk1Q29udHJvbEFuZE1vcmUsXG5cdGJhc2VDbGFzc01ldGFkYXRhOiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uLFxuXHRpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZTogRnVuY3Rpb25bXCJwcm90b3R5cGVcIl1cbik6IFVJNUNvbnRyb2xBbmRNb3JlIHtcblx0Y29uc3QgaW50ZXJmYWNlTmFtZSA9IGludGVyZmFjZUNsYXNzUHJvdG90eXBlPy5nZXRJbnRlcmZhY2VOYW1lPy4oKTtcblx0aWYgKGludGVyZmFjZU5hbWUpIHtcblx0XHRiYXNlQ2xhc3NNZXRhZGF0YS5pbnRlcmZhY2VzLnB1c2goaW50ZXJmYWNlTmFtZSk7XG5cdH1cblxuXHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZSkuZm9yRWFjaCgobmFtZSkgPT4ge1xuXHRcdGlmIChuYW1lICE9PSBcImNvbnN0cnVjdG9yXCIgJiYgbmFtZSAhPT0gXCJzZXR1cE1peGluXCIgJiYgbmFtZSAhPT0gXCJtZXRhZGF0YVwiKSB7XG5cdFx0XHRpZiAoIWJhc2VDdG9yLnByb3RvdHlwZVtuYW1lXSkge1xuXHRcdFx0XHQvLyBUaGUgYmFzZSBjbGFzcyBcIndpbnNcIiBvdmVyIHRoZSBtaXhpblxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoXG5cdFx0XHRcdFx0YmFzZUN0b3IucHJvdG90eXBlLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZSwgbmFtZSkgfHwgT2JqZWN0LmNyZWF0ZShudWxsKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAobmFtZSA9PT0gXCJtZXRhZGF0YVwiKSB7XG5cdFx0XHRiYXNlQ3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSBtZXJnZShiYXNlQ3Rvci5wcm90b3R5cGUubWV0YWRhdGEsIGludGVyZmFjZUNsYXNzUHJvdG90eXBlLm1ldGFkYXRhKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYmFzZUN0b3I7XG59XG5cbmZ1bmN0aW9uIF9nZXRIYW5kbGVyRm9yU3RhdGVQcm9wZXJ0eShqc29uTW9kZWw6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biB7XG5cdGNvbnN0IHBhdGhJbk1vZGVsID0gYC8ke3Byb3AudG9TdHJpbmcoKX1gO1xuXHRjb25zdCBvT2JqID0gZGVlcENsb25lKGpzb25Nb2RlbC5nZXRPYmplY3QocGF0aEluTW9kZWwpKTtcblx0bGV0IG9UYXJnZXQ7XG5cdGlmIChwcm9wID09PSBcIl9fYmluZGluZ0luZm9cIikge1xuXHRcdHJldHVybiB7IG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiIH07XG5cdH1cblx0aWYgKHR5cGVvZiBvT2JqID09PSBcInN0cmluZ1wiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9PYmogPT09IFwibnVtYmVyXCIpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb09iaiA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9PYmopKSB7XG5cdFx0b1RhcmdldCA9IG5ldyBQcm94eShvT2JqLCB7XG5cdFx0XHRnZXQodGFyZ2V0OiB1bmtub3duW10sIHA6IHN0cmluZyB8IHN5bWJvbCwgcmVjZWl2ZXI6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRcdFx0XHRjb25zdCByZWYgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHAsIHJlY2VpdmVyKTtcblx0XHRcdFx0aWYgKHR5cGVvZiByZWYgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHJldHVybiByZWYuYmluZCh0YXJnZXQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlZiA9PT0gdW5kZWZpbmVkICYmIGlzTmFOKE51bWJlcihwLnRvU3RyaW5nKCkpKSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRfX2JpbmRpbmdJbmZvOiB7XG5cdFx0XHRcdFx0XHRcdG1vZGVsOiBcIiRjb21wb25lbnRTdGF0ZVwiLFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBwXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVmO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9UYXJnZXQgPSB7IC4uLm9PYmogfTtcblx0fVxuXHRpZiAodHlwZW9mIG9UYXJnZXQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRvVGFyZ2V0Ll9fYmluZGluZ0luZm8gPSB7XG5cdFx0XHRtb2RlbDogXCIkY29tcG9uZW50U3RhdGVcIixcblx0XHRcdHBhdGg6IHBhdGhJbk1vZGVsXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gb1RhcmdldDtcbn1cbmNvbnN0IGJvdW5kUHJvcGVydGllcyA9IFN5bWJvbChcImJvdW5kUHJvcGVydGllc1wiKTtcblxuZnVuY3Rpb24gY3JlYXRlU3RhdGVQcm94eShcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVEZWJvdW5jZWQ6IEZ1bmN0aW9uO1xuXHRcdF9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZVRpbWVyOiB1bmtub3duO1xuXHRcdF9jaGFuZ2VkUHJvcHM/OiBzdHJpbmdbXTtcblx0fSxcblx0c3RhdGVQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0Ym91bmRUb1N0YXRlUHJvcHM6IHN0cmluZ1tdLFxuXHRpbml0aWFsRGF0YT86IG9iamVjdFxuKTogSlNPTk1vZGVsIHtcblx0Ly8gTGF6eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3RhdGUgcHJvcGVydHlcblx0dGFyZ2V0Q29udHJvbC5zZXRNb2RlbChuZXcgSlNPTk1vZGVsKGluaXRpYWxEYXRhKSwgXCIkY29tcG9uZW50U3RhdGVcIik7XG5cdGNvbnN0IHN0YXRlTW9kZWwgPSB0YXJnZXRDb250cm9sLmdldE1vZGVsKFwiJGNvbXBvbmVudFN0YXRlXCIpIGFzIEpTT05Nb2RlbDtcblx0c3RhdGVNb2RlbC5hdHRhY2hQcm9wZXJ0eUNoYW5nZSgoZXZ0OiBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2dC5nZXRQYXJhbWV0ZXIoXCJwYXRoXCIpPy5zdWJzdHJpbmcoMSk7IC8vIHRvIHJlbW92ZSB0aGUgZmlyc3QgL1xuXHRcdGlmIChwYXRoICYmIGJvdW5kVG9TdGF0ZVByb3BzLmluY2x1ZGVzKHBhdGgpKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5KHBhdGgsIGV2dC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSk7XG5cdFx0fVxuXHR9KTtcblx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IHRydWU7XG5cdGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHN0YXRlTW9kZWwsIHtcblx0XHRnZXQ6ICh0YXJnZXQ6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biA9PiB7XG5cdFx0XHRyZXR1cm4gX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCk7XG5cdFx0fSxcblx0XHRzZXQ6IChzZXRTdGF0ZU1vZGVsOiBKU09OTW9kZWwsIHByb3AsIHZhbHVlKTogYm9vbGVhbiA9PiB7XG5cdFx0XHQvLyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEga25vd24gYm91bmQgcHJvcGVydHkgaW4gYW55IG9mIHRoZSByZWxhdGVkIGNsYXNzZXNcblx0XHRcdGNvbnN0IGtub3duQm91bmRQcm9wZXJ0aWVzID0gdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdO1xuXHRcdFx0aWYgKGtub3duQm91bmRQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3AudG9TdHJpbmcoKSkpIHtcblx0XHRcdFx0dGFyZ2V0Q29udHJvbC5faWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHkocHJvcC50b1N0cmluZygpLCB2YWx1ZSk7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNldFJlc3VsdCA9IHNldFN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC8ke3Byb3AudG9TdHJpbmcoKX1gLCB2YWx1ZSk7XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChwcm9wLnRvU3RyaW5nKCkpO1xuXHRcdFx0cmV0dXJuIHNldFJlc3VsdDtcblx0XHR9XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHtcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJveHk7XG5cdFx0fSxcblx0XHRzZXQodmFsdWUpIHtcblx0XHRcdC8vIFJlcGxhY2luZyB0aGUgY29tcGxldGUgc3RhdGVcblx0XHRcdHN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC9gLCB2YWx1ZSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHByb3h5O1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlU3RhdGVQcm9wZXJ0eShcblx0b2JqOiBVSTVDb250cm9sRGVmaW5pdGlvbixcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X19zdGF0ZU5hbWU6IHN0cmluZztcblx0XHRfdXBkYXRlU3RhdGU6IEZ1bmN0aW9uO1xuXHRcdF91cGRhdGVTdGF0ZURlYm91bmNlZDogRnVuY3Rpb247XG5cdFx0X2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGU6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlVGltZXI6IHVua25vd247XG5cdFx0X2NoYW5nZWRQcm9wcz86IHN0cmluZ1tdO1xuXHR9XG4pOiB2b2lkIHtcblx0aWYgKG9iai5tZXRhZGF0YT8uc3RhdGVQcm9wZXJ0eSB8fCB0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10pIHtcblx0XHRsZXQgdXBkYXRpbmdTdGF0ZSA9IGZhbHNlO1xuXHRcdGNvbnN0IGJvdW5kVG9TdGF0ZVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIG9iai5tZXRhZGF0YT8ucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKHByb3BlcnR5RGVmLmJpbmRUb1N0YXRlKSB7XG5cdFx0XHRcdGJvdW5kVG9TdGF0ZVByb3BzLnB1c2gocHJvcGVydHlOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gYXMgd2UgbWF5IGhhdmUgYm91bmQgcHJvcGVydGllcyBpbiBwYXJlbnQgY2xhc3NlcyBhbmQgc3ViY2xhc3Nlcywgd2Uga2VlcCB0cmFjayBvZiB0aG9zZSBpbiB0aGUgbW9kZWwgaXRzZWxmXG5cdFx0dGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdID8/PSBbXTtcblx0XHR0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10gPSBbLi4udGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCAuLi5ib3VuZFRvU3RhdGVQcm9wc107XG5cblx0XHRpZiAob2JqLm1ldGFkYXRhPy5zdGF0ZVByb3BlcnR5KSB7XG5cdFx0XHQvLyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBmb3JjZSB0aGUgc3RhdGUgdG8gYmUgYXBwbGllZCBhbmQgd2FpdCBmb3IgaXQgdG8gYmUgYXBwbGllZCBpbiB0ZXN0c1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGUgPSBhc3luYyBmdW5jdGlvbiAoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl91cGRhdGVTdGF0ZVRpbWVyO1xuXHRcdFx0XHRpZiAoIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRhd2FpdCAodGhpcyBhcyB7IG9uU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9KS5vblN0YXRlQ2hhbmdlPy4odGhpcy5fY2hhbmdlZFByb3BzKTtcblx0XHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPSBbXTtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZCA9IGZ1bmN0aW9uIChjaGFuZ2VkUHJvcDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcyA/Pz0gW107XG5cdFx0XHRcdGlmICghdGhpcy5fY2hhbmdlZFByb3BzLmluY2x1ZGVzKGNoYW5nZWRQcm9wKSkge1xuXHRcdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcy5wdXNoKGNoYW5nZWRQcm9wKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXRoaXMuX3VwZGF0ZVN0YXRlVGltZXIgJiYgIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZSgpO1xuXHRcdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBzdGF0ZVByb3BlcnR5TmFtZSA9IG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5O1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IGZhbHNlO1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlTmFtZSA9IHN0YXRlUHJvcGVydHlOYW1lO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldENvbnRyb2wsIHN0YXRlUHJvcGVydHlOYW1lLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGNyZWF0ZVN0YXRlUHJveHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldDogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Y3JlYXRlU3RhdGVQcm94eSh0YXJnZXRDb250cm9sLCBzdGF0ZVByb3BlcnR5TmFtZSwgdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlKSB7XG5cdFx0XHRcdHRhcmdldENvbnRyb2xbb2JqLm1ldGFkYXRhLnN0YXRlUHJvcGVydHkgYXMga2V5b2YgQ29udHJvbF0gPSB7IC4uLm9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIH0gYXMgbmV2ZXI7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmbkFwcGx5U2V0dGluZ3MgPSB0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3M7XG5cdFx0XHR0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3MgPSBmdW5jdGlvbiAobVNldHRpbmdzOiB7IG1vZGVscz86IFJlY29yZDxzdHJpbmcsIG5ldmVyPiB9KTogdHlwZW9mIHRhcmdldENvbnRyb2wge1xuXHRcdFx0XHRkZWxldGUgbVNldHRpbmdzPy5tb2RlbHM/LiRjb21wb25lbnRTdGF0ZTtcblx0XHRcdFx0cmV0dXJuIGZuQXBwbHlTZXR0aW5ncy5jYWxsKHRoaXMsIG1TZXR0aW5ncyk7XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCBmblNldFByb3BlcnR5ID0gdGFyZ2V0Q29udHJvbC5zZXRQcm9wZXJ0eTtcblx0XHRpZiAodGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLmxlbmd0aCA+IDApIHtcblx0XHRcdHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHkgPSBmdW5jdGlvbiAoc1Byb3BlcnR5TmFtZTogc3RyaW5nLCBvVmFsdWU6IHVua25vd24sIGJTdXBwcmVzc0ludmFsaWRhdGUpOiB0eXBlb2YgdGFyZ2V0Q29udHJvbCB7XG5cdFx0XHRcdGlmICh0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10uaW5jbHVkZXMoc1Byb3BlcnR5TmFtZSkgJiYgIXRoaXMuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUpIHtcblx0XHRcdFx0XHRpZiAoIXRoaXMuX19zdGF0ZUNyZWF0ZWQpIHtcblx0XHRcdFx0XHRcdGNyZWF0ZVN0YXRlUHJveHkodGFyZ2V0Q29udHJvbCwgdGFyZ2V0Q29udHJvbC5fX3N0YXRlTmFtZSwgdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KHRoaXMuZ2V0TW9kZWwoXCIkY29tcG9uZW50U3RhdGVcIikgYXMgSlNPTk1vZGVsKS5zZXRQcm9wZXJ0eShgLyR7c1Byb3BlcnR5TmFtZX1gLCBvVmFsdWUpO1xuXHRcdFx0XHRcdHRhcmdldENvbnRyb2wuX3VwZGF0ZVN0YXRlRGVib3VuY2VkKHNQcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmblNldFByb3BlcnR5LmNhbGwodGhpcywgc1Byb3BlcnR5TmFtZSwgb1ZhbHVlLCBiU3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogSW50ZXJuYWwgaGVhdnkgbGlmdGluZyB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGNyZWF0aW5nIHRoZSBjbGFzcyBwcm9wZXJ0eSBmb3IgdWk1IHRvIHVzZS5cbiAqIEBwYXJhbSBjbGF6eiBUaGUgY2xhc3MgcHJvdG90eXBlXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY2xhc3MgdG8gY3JlYXRlXG4gKiBAcGFyYW0gaW5PYmogVGhlIG1ldGFkYXRhIG9iamVjdFxuICogQHJldHVybnMgVGhlIG1ldGFkYXRhIGNsYXNzXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyVUk1TWV0YWRhdGEoY2xheno6IFVJNUNvbnRyb2xBbmRNb3JlLCBuYW1lOiBzdHJpbmcsIGluT2JqOiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiB8IFVJNUNvbnRyb2xEZWZpbml0aW9uKTogRnVuY3Rpb24ge1xuXHRpZiAoY2xhenouZ2V0TWV0YWRhdGE/LigpLmlzQShcInNhcC51aS5jb3JlLm12Yy5Db250cm9sbGVyRXh0ZW5zaW9uXCIpKSB7XG5cdFx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5PYmopLmZvckVhY2goKG9iak5hbWUpID0+IHtcblx0XHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGluT2JqLCBvYmpOYW1lKTtcblx0XHRcdGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmVudW1lcmFibGUpIHtcblx0XHRcdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRjb25zdCBvYmo6IGFueSA9IHt9O1xuXHRvYmoubWV0YWRhdGEgPSBpbk9iai5tZXRhZGF0YSB8fCB7fTtcblx0b2JqLm92ZXJyaWRlID0gaW5PYmoub3ZlcnJpZGU7XG5cdG9iai5jb25zdHJ1Y3RvciA9IGNsYXp6O1xuXHRvYmoubWV0YWRhdGEuYmFzZVR5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY2xhenoucHJvdG90eXBlKS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKTtcblxuXHRpZiAoKGNsYXp6Py5nZXRNZXRhZGF0YSgpIGFzIHVua25vd24gYXMgeyBnZXRTdGVyZW90eXBlOiBGdW5jdGlvbiB9KT8uZ2V0U3RlcmVvdHlwZSgpID09PSBcImNvbnRyb2xcIikge1xuXHRcdGNvbnN0IHJlbmRlcmVyRGVmaW5pdGlvbiA9IGluT2JqLnJlbmRlcmVyIHx8IGNsYXp6LnJlbmRlcmVyIHx8IGNsYXp6LnJlbmRlcjtcblx0XHRvYmoucmVuZGVyZXIgPSB7IGFwaVZlcnNpb246IDIgfTtcblx0XHRpZiAodHlwZW9mIHJlbmRlcmVyRGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRvYmoucmVuZGVyZXIucmVuZGVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHRcdH0gZWxzZSBpZiAocmVuZGVyZXJEZWZpbml0aW9uICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0b2JqLnJlbmRlcmVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHRcdH1cblx0fVxuXHRvYmoubWV0YWRhdGEuaW50ZXJmYWNlcyA9IGluT2JqLm1ldGFkYXRhPy5pbnRlcmZhY2VzIHx8IGNsYXp6Lm1ldGFkYXRhPy5pbnRlcmZhY2VzO1xuXHRPYmplY3Qua2V5cyhjbGF6ei5wcm90b3R5cGUpLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdGlmIChrZXkgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0b2JqW2tleV0gPSBjbGF6ei5wcm90b3R5cGVba2V5XTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0Ly8gRG8gbm90aGluZ1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0aWYgKG9iai5tZXRhZGF0YT8uY29udHJvbGxlckV4dGVuc2lvbnMgJiYgT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBjRXh0TmFtZSBpbiBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnMpIHtcblx0XHRcdG9ialtjRXh0TmFtZV0gPSBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbY0V4dE5hbWVdO1xuXHRcdH1cblx0fVxuXHRjb25zdCBvdXRwdXQgPSBjbGF6ei5leHRlbmQobmFtZSwgb2JqKSBhcyB0eXBlb2YgQ29udHJvbCAmIEZ1bmN0aW9uO1xuXHRjb25zdCBmbkluaXQgPSBvdXRwdXQucHJvdG90eXBlLmluaXQ7XG5cdGNvbnN0IGZuQWZ0ZXJJbml0ID0gb3V0cHV0LnByb3RvdHlwZS5hZnRlckluaXQ7XG5cdG91dHB1dC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcblx0XHRpZiAoZm5Jbml0KSB7XG5cdFx0XHRmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fVxuXHRcdGlmIChjbGF6ei5yZWdpc3Rlckluc3RhbmNlKSB7XG5cdFx0XHRjbGF6ei5yZWdpc3Rlckluc3RhbmNlKHRoaXMpO1xuXHRcdH1cblx0XHR0aGlzLm1ldGFkYXRhID0gb2JqLm1ldGFkYXRhO1xuXG5cdFx0aWYgKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBhUHJvcGVydHlLZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLnByb3BlcnRpZXMpO1xuXHRcdFx0YVByb3BlcnR5S2V5cy5mb3JFYWNoKChwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eURlZiA9IG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XTtcblx0XHRcdFx0Ly8gSWYgYSB2YWx1ZSB3YXMgc2V0IGluIGBpbml0YCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCBpcyBzZXQgaW4gdGhlIHZhbHVlIGluIHRoZSBlbmRcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWZhdWx0ID0gdGhpc1twcm9wZXJ0eUtleV0gPz8gcHJvcGVydHlEZWYuZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRpZiAocHJvcGVydHlEZWYuaXNCaW5kaW5nSW5mbyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzID8/PSB7fTtcblxuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHR0aGlzLm1Qcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IHY7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldCgpOiB1bmtub3duIHtcblx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIHByb3BlcnR5IGZpcnN0IGFuZCBub3QganVzdCB0aGUgX2JpbmRpbmdQcm9wZXJ0aWVzXG5cdFx0XHRcdFx0XHRcdC8vIER1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24sIGlmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgd2l0aCBhIG5vbiBiaW5kaW5nIHZhbHVlLCBzZXRQcm9wZXJ0eSBpcyBjYWxsZWQgYW5kIG5vdCBiaW5kUHJvcGVydHlcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBiaW5kaW5nUHJvcGVydHlWYWx1ZSA9IHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XTtcblx0XHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIHNldCB0byBhIGRpZmZlcmVudCB2YWx1ZSB3ZSB1cGRhdGUgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5VmFsdWUgIT09IGJpbmRpbmdQcm9wZXJ0eVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zdCBwcm9wVmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgLi4ucHJvcFZhbHVlIH07IC8vIENyZWF0ZSBzaGFsbG93IGNvcHlcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJvcFZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KHByb3BlcnR5S2V5LCB2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwcm9wZXJ0eURlZmF1bHQgIT09IHVuZGVmaW5lZCAmJiB0aGlzW3Byb3BlcnR5S2V5XSAhPT0gcHJvcGVydHlEZWZhdWx0KSB7XG5cdFx0XHRcdFx0Ly8gZG9uJ3Qgb3ZlcndyaXRlIHRoZSBkZWZhdWx0IHZhbHVlIGlmIGl0J3MgYWxyZWFkeSB0aGVyZVxuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXNbcHJvcGVydHlLZXldID0gcHJvcGVydHlEZWZhdWx0O1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSBmYWxzZTtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5fYXBwbHlpbmdTZXR0aW5ncztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBhQWdncmVnYXRpb25LZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmFnZ3JlZ2F0aW9ucyk7XG5cdFx0XHRhQWdncmVnYXRpb25LZXlzLmZvckVhY2goKGFnZ3JlZ2F0aW9uS2V5KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uRGVmID0gb2JqLm1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1thZ2dyZWdhdGlvbktleV07XG5cdFx0XHRcdGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXNbYWdncmVnYXRpb25LZXldID8/IGFnZ3JlZ2F0aW9uRGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFnZ3JlZ2F0aW9uS2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gdGhpcy5nZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbktleSk7XG5cdFx0XHRcdFx0XHRpZiAob2JqLm1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1thZ2dyZWdhdGlvbktleV0ubXVsdGlwbGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudCB8fCBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGRlZmF1bHRWYWx1ZSAmJiAoZGVmYXVsdFZhbHVlIGFzIFVJNUVsZW1lbnQpPy5pc0EpIHtcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzW2FnZ3JlZ2F0aW9uS2V5XSA9IGRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gZmFsc2U7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX2FwcGx5aW5nU2V0dGluZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYUFzc29jaWF0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hc3NvY2lhdGlvbnMpO1xuXHRcdFx0YUFzc29jaWF0aW9uS2V5cy5mb3JFYWNoKChhc3NvY2lhdGlvbktleSkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgYXNzb2NpYXRpb25LZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0QXNzb2NpYXRpb24oYXNzb2NpYXRpb25LZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFzc29jaWF0aW9uKGFzc29jaWF0aW9uS2V5KTtcblx0XHRcdFx0XHRcdGlmIChvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zW2Fzc29jaWF0aW9uS2V5XS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50IHx8IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChvYmoubWV0YWRhdGEucmVmZXJlbmNlcykge1xuXHRcdFx0Y29uc3QgcmVmZXJlbmNlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5yZWZlcmVuY2VzKTtcblx0XHRcdHJlZmVyZW5jZVByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiBjcmVhdGVSZWZlcmVuY2UoKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob2JqLm1ldGFkYXRhLm1ldGhvZHMpIHtcblx0XHRcdGZvciAoY29uc3QgbWV0aG9kTmFtZSBpbiBvYmoubWV0YWRhdGEubWV0aG9kcykge1xuXHRcdFx0XHRjb25zdCBtZXRob2REZWZpbml0aW9uID0gb2JqLm1ldGFkYXRhLm1ldGhvZHNbbWV0aG9kTmFtZV07XG5cdFx0XHRcdGlmIChtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkFmdGVyQXN5bmNcIiB8fCBtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRpZiAoIXRoaXMubWV0aG9kSG9sZGVyKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm1ldGhvZEhvbGRlciA9IFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXSA9IFt0aGlzW21ldGhvZE5hbWVdXTtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbWV0aG9kTmFtZSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogRnVuY3Rpb24pID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdLnB1c2godik7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhc3luYyAoLi4ubWV0aG9kQXJnczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbWV0aG9kQXJyYXlzID0gdGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQmVmb3JlQXN5bmNcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0bWV0aG9kQXJyYXlzLnJldmVyc2UoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGFyZyBvZiBtZXRob2RBcnJheXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGF3YWl0IGFyZy5hcHBseSh0aGlzLCBtZXRob2RBcmdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRfY3JlYXRlU3RhdGVQcm9wZXJ0eShvYmosIHRoaXMpO1xuXHRcdGlmIChmbkFmdGVySW5pdCkge1xuXHRcdFx0Zm5BZnRlckluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fVxuXHR9O1xuXG5cdGNsYXp6Lm92ZXJyaWRlID0gZnVuY3Rpb24gKG9FeHRlbnNpb246IHVua25vd24pOiBGdW5jdGlvbiB7XG5cdFx0Y29uc3QgcG9sID0ge307XG5cdFx0KHBvbCBhcyBGdW5jdGlvbikuY29uc3RydWN0b3IgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogRnVuY3Rpb24ge1xuXHRcdFx0cmV0dXJuIGNsYXp6LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH07XG5cdFx0Y29uc3Qgb0NsYXNzID0gKE1ldGFkYXRhIGFzIHVua25vd24gYXMgeyBjcmVhdGVDbGFzczogRnVuY3Rpb24gfSkuY3JlYXRlQ2xhc3MoXG5cdFx0XHRjbGF6eixcblx0XHRcdGBhbm9ueW1vdXNFeHRlbnNpb25+JHt1aWQoKX1gLFxuXHRcdFx0cG9sLFxuXHRcdFx0Q29udHJvbGxlck1ldGFkYXRhXG5cdFx0KTtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fc3RhdGljT3ZlcnJpZGUgPSBvRXh0ZW5zaW9uO1xuXHRcdG9DbGFzcy5nZXRNZXRhZGF0YSgpLl9vdmVycmlkZSA9IChjbGF6ei5nZXRNZXRhZGF0YSgpIGFzIHsgX292ZXJyaWRlPzogdW5rbm93biB9KS5fb3ZlcnJpZGU7XG5cdFx0cmV0dXJuIG9DbGFzcztcblx0fTtcblxuXHRPYmplY3RQYXRoLnNldChuYW1lLCBvdXRwdXQpO1xuXG5cdHJldHVybiBvdXRwdXQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7RUFnSkEsTUFBTUEsY0FBYyxHQUFHLFNBQUFBLENBQVVDLE1BQXNELEVBQWdDO0lBQ3RIQSxNQUFNLENBQUNDLFFBQVEsR0FBR0MsS0FBSyxDQUN0QjtNQUNDQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7TUFDeEJDLFVB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
@@ -236,7 +236,6 @@ export type BindingInfoHolder<T> = T & {
236
236
  *
237
237
  * Properties defined with this decorator will be automatically bound to the control state when used in JSX.
238
238
  * Arrays need to be bound using the `bindState` function.
239
- * @experimental
240
239
  * @returns A property decorator
241
240
  */
242
241
  export function defineState(): PropertyDecorator {
@@ -168,17 +168,6 @@ sap.ui.define(["sap/base/util/deepClone"], function (deepClone) {
168
168
  }
169
169
  }
170
170
  _exports.propagateHookFromMixin = propagateHookFromMixin;
171
- function xmlViewPreprocessor(source, _caller, _settings) {
172
- const sourceView = source;
173
- const controller = sourceView.getController();
174
- if (controller) {
175
- const macroAPIChild = sourceView.findAggregatedObjects(true, s => s.isA("sap.fe.macros.MacroAPI"));
176
- for (const managedObject of macroAPIChild) {
177
- initControllerExtensionHookHandlers(managedObject, controller);
178
- }
179
- }
180
- }
181
- _exports.xmlViewPreprocessor = xmlViewPreprocessor;
182
171
  return _exports;
183
172
  }, false);
184
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWdpc3RlcmVkSW5zdGFuY2VzIiwicmVnaXN0ZXJlZEhhbmRsZXJzIiwiaG9va2FibGUiLCJleGVjdXRpb24iLCJ0YXJnZXQiLCJwcm9wZXJ0eUtleSIsImRlc2NyaXB0b3IiLCJpbmRleGFibGVUYXJnZXQiLCJ0b1N0cmluZyIsImZuIiwiY0V4VEluc3RhbmNlSG9va01hcCIsImhvb2tlZEhhbmRsZXJzIiwicHVzaCIsImhhbmRsZXJzIiwiaW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIiwib2xkVmFsdWUiLCJ2YWx1ZSIsInJldHVyblZhbHVlIiwiYmluZCIsImFyZ3VtZW50cyIsImhhbmRsZXIiLCJfZXhwb3J0cyIsImlzQWxyZWFkeVJlZ2lzdGVyZWQiLCJleGlzdGluZ1JlZ2lzdHJhdGlvbnMiLCJuZXdSZWdpc3RyYXRpb24iLCJmaW5kIiwiciIsIm5hbWUiLCJtZXRob2QiLCJ0YXJnZXRNZXRob2QiLCJob29rcyIsIlN5bWJvbCIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiU3RyaW5nIiwiY29uc3RydWN0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzIiwiY29udHJvbGxlciIsInJlZ2lzdGVyZWRIb29rcyIsImRlZXBDbG9uZSIsImluZGV4YWJsZUNvbnRyb2xsZXIiLCJyZWdpc3RlcmVkSG9vayIsImhhbmRsZXJGdW5jdGlvbiIsImdldFZpZXciLCJhdHRhY2hCZWZvcmVFeGl0IiwicmVtb3ZlQ29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyIsInByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4iLCJzb3VyY2UiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcmVhdGUiLCJ4bWxWaWV3UHJlcHJvY2Vzc29yIiwiX2NhbGxlciIsIl9zZXR0aW5ncyIsInNvdXJjZVZpZXciLCJnZXRDb250cm9sbGVyIiwibWFjcm9BUElDaGlsZCIsImZpbmRBZ2dyZWdhdGVkT2JqZWN0cyIsInMiLCJpc0EiLCJtYW5hZ2VkT2JqZWN0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJIb29rU3VwcG9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IHR5cGUgeyBFeHRlbnNpb25PdmVycmlkZUV4ZWN1dGlvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBYTUxWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvWE1MVmlld1wiO1xuLyoqXG4gKiBUaGlzIHR5cGUgaXMgdG8gYmUgZXh0ZW5kZWQgd2l0aCBhbGwgY29udHJvbGxlciBleHRlbnNpb25zIGFuZCBtZXRob2RzIHRoYXQgYXJlIGhvb2thYmxlLlxuICovXG50eXBlIEhvb2thYmxlQ29udHJvbGxlckV4dGVuc2lvbnMgPSB7XG5cdGVkaXRGbG93OiB7XG5cdFx0b25BZnRlclNhdmU6IHRydWU7XG5cdFx0b25CZWZvcmVTYXZlOiB0cnVlO1xuXHR9O1xuXHRpbmxpbmVFZGl0Rmxvdzoge1xuXHRcdGlubGluZUVkaXRFbmQ6IHRydWU7XG5cdFx0aW5saW5lRWRpdFN0YXJ0OiB0cnVlO1xuXHR9O1xuXHRjb2xsYWJvcmF0aW9uTWFuYWdlcjoge1xuXHRcdGNvbGxlY3RBdmFpbGFibGVDYXJkczogdHJ1ZTtcblx0fTtcblx0cGFnaW5hdG9yOiB7XG5cdFx0aW5pdGlhbGl6ZTogdHJ1ZTtcblx0fTtcblx0cm91dGluZzoge1xuXHRcdG9uQWZ0ZXJCaW5kaW5nOiB0cnVlO1xuXHR9O1xufTtcblxudHlwZSBIYW5kbGVyQ29uZmlndXJhdGlvbjxDRXh0TmFtZSBleHRlbmRzIGtleW9mIEhvb2thYmxlQ29udHJvbGxlckV4dGVuc2lvbnM+ID0ge1xuXHRuYW1lOiBDRXh0TmFtZTtcblx0bWV0aG9kOiBrZXlvZiBIb29rYWJsZUNvbnRyb2xsZXJFeHRlbnNpb25zW0NFeHROYW1lXTtcbn07XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxudHlwZSBIYW5kbGVyUmVnaXN0cmF0aW9uID0gSGFuZGxlckNvbmZpZ3VyYXRpb248YW55PiAmIHsgdGFyZ2V0TWV0aG9kOiBzdHJpbmc7IGhhbmRsZXJGdW5jdGlvbj86IEZ1bmN0aW9uIH07XG5cbnR5cGUgRnVuY3Rpb25NYXAgPSB7XG5cdFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uO1xufTtcbnR5cGUgRGVlcEZ1bmN0aW9uTWFwID0ge1xuXHRba2V5OiBzdHJpbmddOiBGdW5jdGlvbk1hcDtcbn07XG50eXBlIEhvb2tNYXAgPSB7XG5cdGhvb2tlZEhhbmRsZXJzOiB7XG5cdFx0W2tleTogc3RyaW5nXTogRnVuY3Rpb25bXTtcblx0fTtcbn07XG5cbi8vIFVzZSB0d28gYXJyYXlzIGFzIHdlIGNhbm5vdCBpbmRleCBhIG1hcCB0aHJvdWdoIGFuIGFyYml0cmFyeSBvYmplY3QgaW5zdGFuY2VcbmNvbnN0IHJlZ2lzdGVyZWRJbnN0YW5jZXM6IEZ1bmN0aW9uW10gPSBbXTtcbmNvbnN0IHJlZ2lzdGVyZWRIYW5kbGVyczogSGFuZGxlclJlZ2lzdHJhdGlvbltdW10gPSBbXTtcblxuLyoqXG4gKiBNYXJrcyBhIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG1ldGhvZCB0byBiZSBob29rYWJsZSBieSBnZW5lcmF0aW5nIGFkZGl0aW9uYWwgbWV0aG9kcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGF0dGFjaCBhbmQgZGV0YWNoIGhhbmRsZXJzIGF0IHJ1bnRpbWUuXG4gKiBAcGFyYW0gZXhlY3V0aW9uXG4gKiBAcmV0dXJucyBBIG1ldGhvZCBkZWNvcmF0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhvb2thYmxlKGV4ZWN1dGlvbjogRXh0ZW5zaW9uT3ZlcnJpZGVFeGVjdXRpb24pOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogdW5rbm93biwgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgaW5kZXhhYmxlVGFyZ2V0ID0gdGFyZ2V0IGFzIEZ1bmN0aW9uTWFwO1xuXG5cdFx0aW5kZXhhYmxlVGFyZ2V0W2BhdHRhY2gke3Byb3BlcnR5S2V5LnRvU3RyaW5nKCl9YF0gPSBmdW5jdGlvbiAoZm46IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0XHRjb25zdCBjRXhUSW5zdGFuY2VIb29rTWFwID0gdGhpcyBhcyB1bmtub3duIGFzIEhvb2tNYXA7XG5cdFx0XHRpZiAoIWNFeFRJbnN0YW5jZUhvb2tNYXAuaG9va2VkSGFuZGxlcnMpIHtcblx0XHRcdFx0Y0V4VEluc3RhbmNlSG9va01hcC5ob29rZWRIYW5kbGVycyA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRcdGNFeFRJbnN0YW5jZUhvb2tNYXAuaG9va2VkSGFuZGxlcnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSBbXTtcblx0XHRcdH1cblx0XHRcdGNFeFRJbnN0YW5jZUhvb2tNYXAuaG9va2VkSGFuZGxlcnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ucHVzaChmbik7XG5cdFx0fTtcblx0XHRpbmRleGFibGVUYXJnZXRbYGRldGFjaCR7cHJvcGVydHlLZXkudG9TdHJpbmcoKX1gXSA9IGZ1bmN0aW9uIChmbjogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHRcdGNvbnN0IGNFeFRJbnN0YW5jZUhvb2tNYXAgPSB0aGlzIGFzIHVua25vd24gYXMgSG9va01hcDtcblx0XHRcdGNvbnN0IGhhbmRsZXJzID0gY0V4VEluc3RhbmNlSG9va01hcC5ob29rZWRIYW5kbGVyc1twcm9wZXJ0eUtleS50b1N0cmluZygpXTtcblx0XHRcdGNvbnN0IGluZGV4ID0gaGFuZGxlcnMuaW5kZXhPZihmbik7XG5cdFx0XHRpZiAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IG9sZFZhbHVlID0gZGVzY3JpcHRvci52YWx1ZTtcblx0XHRpZiAoZXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIgfHwgZXhlY3V0aW9uID09PSBcIkFmdGVyQXN5bmNcIikge1xuXHRcdFx0ZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRcdFx0Y29uc3QgY0V4VEluc3RhbmNlSG9va01hcCA9IHRoaXMgYXMgdW5rbm93biBhcyBIb29rTWFwO1xuXHRcdFx0XHRjb25zdCBoYW5kbGVycyA9IChjRXhUSW5zdGFuY2VIb29rTWFwPy5ob29rZWRIYW5kbGVycyAmJiBjRXhUSW5zdGFuY2VIb29rTWFwPy5ob29rZWRIYW5kbGVyc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkgfHwgW107XG5cdFx0XHRcdGxldCByZXR1cm5WYWx1ZTogdW5rbm93bjtcblx0XHRcdFx0aWYgKGV4ZWN1dGlvbiA9PT0gXCJBZnRlckFzeW5jXCIpIHtcblx0XHRcdFx0XHRyZXR1cm5WYWx1ZSA9IGF3YWl0IG9sZFZhbHVlLmJpbmQodGhpcykoLi4uYXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChjb25zdCBoYW5kbGVyIG9mIGhhbmRsZXJzKSB7XG5cdFx0XHRcdFx0YXdhaXQgaGFuZGxlci5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChleGVjdXRpb24gPT09IFwiQmVmb3JlQXN5bmNcIikge1xuXHRcdFx0XHRcdHJldHVyblZhbHVlID0gYXdhaXQgb2xkVmFsdWUuYmluZCh0aGlzKSguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmV0dXJuVmFsdWU7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IHVua25vd24ge1xuXHRcdFx0XHRjb25zdCBjRXhUSW5zdGFuY2VIb29rTWFwID0gdGhpcyBhcyB1bmtub3duIGFzIEhvb2tNYXA7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJzID0gKGNFeFRJbnN0YW5jZUhvb2tNYXA/Lmhvb2tlZEhhbmRsZXJzICYmIGNFeFRJbnN0YW5jZUhvb2tNYXA/Lmhvb2tlZEhhbmRsZXJzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB8fCBbXTtcblx0XHRcdFx0bGV0IHJldHVyblZhbHVlOiB1bmtub3duO1xuXHRcdFx0XHRpZiAoZXhlY3V0aW9uID09PSBcIkFmdGVyXCIpIHtcblx0XHRcdFx0XHRyZXR1cm5WYWx1ZSA9IG9sZFZhbHVlLmJpbmQodGhpcykoLi4uYXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChjb25zdCBoYW5kbGVyIG9mIGhhbmRsZXJzKSB7XG5cdFx0XHRcdFx0aGFuZGxlci5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChleGVjdXRpb24gPT09IFwiQmVmb3JlXCIpIHtcblx0XHRcdFx0XHRyZXR1cm5WYWx1ZSA9IG9sZFZhbHVlLmJpbmQodGhpcykoLi4uYXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJldHVyblZhbHVlO1xuXHRcdFx0fTtcblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBuZXdSZWdpc3RyYXRpb24gaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBzb21lIGV4aXN0aW5nUmVnaXN0cmF0aW9ucyBieSBjb21wYXJpbmcgYWxsIHJlbGV2YW50IGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0gZXhpc3RpbmdSZWdpc3RyYXRpb25zXG4gKiBAcGFyYW0gbmV3UmVnaXN0cmF0aW9uXG4gKiBAcmV0dXJucyBSZXN1bHQgb2YgdGhlIGNoZWNrXG4gKi9cbmZ1bmN0aW9uIGlzQWxyZWFkeVJlZ2lzdGVyZWQoZXhpc3RpbmdSZWdpc3RyYXRpb25zOiBIYW5kbGVyUmVnaXN0cmF0aW9uW10sIG5ld1JlZ2lzdHJhdGlvbjogSGFuZGxlclJlZ2lzdHJhdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFleGlzdGluZ1JlZ2lzdHJhdGlvbnMuZmluZChcblx0XHQocikgPT4gci5uYW1lID09PSBuZXdSZWdpc3RyYXRpb24ubmFtZSAmJiByLm1ldGhvZCA9PT0gbmV3UmVnaXN0cmF0aW9uLm1ldGhvZCAmJiByLnRhcmdldE1ldGhvZCA9PT0gbmV3UmVnaXN0cmF0aW9uLnRhcmdldE1ldGhvZFxuXHQpO1xufVxuXG5leHBvcnQgY29uc3QgaG9va3MgPSBTeW1ib2woXCJob29rc1wiKTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBtZXRob2QgYXMgY29udHJvbGxlciBleHRlbnNpb24gaG9vayBoYW5kbGVyLlxuICpcbiAqIEN1cnJlbnRseSwgb25seSBtZXRob2RzIG9mIHJ1bnRpbWUgYnVpbGRpbmcgYmxvY2tzIGFyZSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0gbmFtZSBDb250cm9sbGVyIGV4dGVuc2lvbiB0byBob29rIGludG9cbiAqIEBwYXJhbSBtZXRob2QgTWV0aG9kIHRvIGhvb2sgaW50b1xuICogQHJldHVybnMgQSBtZXRob2QgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlcjxDRXh0TmFtZSBleHRlbmRzIGtleW9mIEhvb2thYmxlQ29udHJvbGxlckV4dGVuc2lvbnM+KFxuXHRuYW1lOiBDRXh0TmFtZSxcblx0bWV0aG9kOiBrZXlvZiBIb29rYWJsZUNvbnRyb2xsZXJFeHRlbnNpb25zW0NFeHROYW1lXVxuKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IHsgY29uc3RydWN0b3I6IEZ1bmN0aW9uICYgeyBbaG9va3NdPzogSGFuZGxlclJlZ2lzdHJhdGlvbltdIH0gfSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRcdGNvbnN0IG5ld1JlZ2lzdHJhdGlvbiA9IHsgbmFtZSwgbWV0aG9kOiBTdHJpbmcobWV0aG9kKSwgdGFyZ2V0TWV0aG9kOiBwcm9wZXJ0eUtleSB9O1xuXHRcdGNvbnN0IGluZGV4ID0gcmVnaXN0ZXJlZEluc3RhbmNlcy5pbmRleE9mKHRhcmdldC5jb25zdHJ1Y3Rvcik7XG5cdFx0aWYgKCF0YXJnZXQuY29uc3RydWN0b3JbaG9va3NdKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LmNvbnN0cnVjdG9yLCBob29rcywge1xuXHRcdFx0XHR2YWx1ZTogW11cblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0YXJnZXQuY29uc3RydWN0b3JbaG9va3NdPy5wdXNoKG5ld1JlZ2lzdHJhdGlvbik7XG5cdFx0Ly8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGlzIGV4YWN0IGhhbmRsZXIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGFzIGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkIHN0YXRpY2FsbHkgKG9uIHRoZSBjb25zdHJ1Y3Rvcilcblx0XHRpZiAoaW5kZXggIT09IC0xICYmICFpc0FscmVhZHlSZWdpc3RlcmVkKHJlZ2lzdGVyZWRIYW5kbGVyc1tpbmRleF0sIG5ld1JlZ2lzdHJhdGlvbikpIHtcblx0XHRcdHJlZ2lzdGVyZWRIYW5kbGVyc1tpbmRleF0ucHVzaChuZXdSZWdpc3RyYXRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWdpc3RlcmVkSW5zdGFuY2VzLnB1c2godGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRcdHJlZ2lzdGVyZWRIYW5kbGVycy5wdXNoKFtuZXdSZWdpc3RyYXRpb25dKTtcblx0XHR9XG5cdH0gYXMgTWV0aG9kRGVjb3JhdG9yO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIGFsbCBjb250cm9sbGVyIGV4dGVuc2lvbiBoYW5kbGVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIHRhcmdldC5cbiAqIEBwYXJhbSB0YXJnZXQgVGFyZ2V0IGNsYXNzIHRvIGluaXRpYWxpemUgdGhlIGhhbmRsZXJzIGZvclxuICogQHBhcmFtIHRhcmdldC5jb25zdHJ1Y3RvclxuICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZUNvbnRyb2xsZXIgaW5zdGFuY2UgdG8gZ2V0IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbnMgaW5zdGFuY2VzIGZyb21cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzKFxuXHR0YXJnZXQ6IHsgY29uc3RydWN0b3I6IEZ1bmN0aW9uICYgeyBbaG9va3NdPzogSGFuZGxlclJlZ2lzdHJhdGlvbltdIH0gfSAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9LFxuXHRjb250cm9sbGVyOiBDb250cm9sbGVyXG4pOiB2b2lkIHtcblx0aWYgKHRhcmdldC5jb25zdHJ1Y3Rvcltob29rc10pIHtcblx0XHRsZXQgcmVnaXN0ZXJlZEhvb2tzID0gdGFyZ2V0LmNvbnN0cnVjdG9yW2hvb2tzXTtcblx0XHR0YXJnZXRbaG9va3NdID0gZGVlcENsb25lKHJlZ2lzdGVyZWRIb29rcyk7XG5cdFx0cmVnaXN0ZXJlZEhvb2tzID0gdGFyZ2V0W2hvb2tzXSE7XG5cdFx0Y29uc3QgaW5kZXhhYmxlVGFyZ2V0ID0gdGFyZ2V0IGFzIHVua25vd24gYXMgRnVuY3Rpb25NYXA7XG5cdFx0Y29uc3QgaW5kZXhhYmxlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIgYXMgdW5rbm93biBhcyBEZWVwRnVuY3Rpb25NYXA7XG5cdFx0Zm9yIChjb25zdCByZWdpc3RlcmVkSG9vayBvZiByZWdpc3RlcmVkSG9va3MpIHtcblx0XHRcdHJlZ2lzdGVyZWRIb29rLmhhbmRsZXJGdW5jdGlvbiA9IGluZGV4YWJsZVRhcmdldFtyZWdpc3RlcmVkSG9vay50YXJnZXRNZXRob2RdLmJpbmQodGFyZ2V0KTtcblx0XHRcdGluZGV4YWJsZUNvbnRyb2xsZXJbcmVnaXN0ZXJlZEhvb2submFtZV1bYGF0dGFjaCR7U3RyaW5nKHJlZ2lzdGVyZWRIb29rLm1ldGhvZCl9YF0ocmVnaXN0ZXJlZEhvb2suaGFuZGxlckZ1bmN0aW9uKTtcblx0XHRcdGNvbnRyb2xsZXIuZ2V0VmlldygpPy5hdHRhY2hCZWZvcmVFeGl0KCgpID0+IHtcblx0XHRcdFx0aW5kZXhhYmxlQ29udHJvbGxlcltyZWdpc3RlcmVkSG9vay5uYW1lXVtgZGV0YWNoJHtTdHJpbmcocmVnaXN0ZXJlZEhvb2subWV0aG9kKX1gXShyZWdpc3RlcmVkSG9vay5oYW5kbGVyRnVuY3Rpb24pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzKFxuXHR0YXJnZXQ6IHsgY29uc3RydWN0b3I6IEZ1bmN0aW9uICYgeyBbaG9va3NdPzogSGFuZGxlclJlZ2lzdHJhdGlvbltdIH0gfSAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9LFxuXHRjb250cm9sbGVyOiBDb250cm9sbGVyXG4pOiB2b2lkIHtcblx0aWYgKHRhcmdldFtob29rc10pIHtcblx0XHRjb25zdCByZWdpc3RlcmVkSG9va3MgPSB0YXJnZXRbaG9va3NdO1xuXHRcdGNvbnN0IGluZGV4YWJsZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyIGFzIHVua25vd24gYXMgRGVlcEZ1bmN0aW9uTWFwO1xuXHRcdGZvciAoY29uc3QgcmVnaXN0ZXJlZEhvb2sgb2YgcmVnaXN0ZXJlZEhvb2tzKSB7XG5cdFx0XHRpbmRleGFibGVDb250cm9sbGVyW3JlZ2lzdGVyZWRIb29rLm5hbWVdPy5bYGRldGFjaCR7U3RyaW5nKHJlZ2lzdGVyZWRIb29rLm1ldGhvZCl9YF0/LihyZWdpc3RlcmVkSG9vay5oYW5kbGVyRnVuY3Rpb24pO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGFnYXRlSG9va0Zyb21NaXhpbihcblx0dGFyZ2V0OiBGdW5jdGlvbiAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9LFxuXHRzb3VyY2U6IEZ1bmN0aW9uICYgeyBbaG9va3NdPzogSGFuZGxlclJlZ2lzdHJhdGlvbltdIH1cbik6IHZvaWQge1xuXHRpZiAoc291cmNlW2hvb2tzXSkge1xuXHRcdGlmICh0YXJnZXRbaG9va3NdKSB7XG5cdFx0XHR0YXJnZXRbaG9va3NdIS5zcGxpY2UoMCwgMCwgLi4uc291cmNlW2hvb2tzXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGhvb2tzLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgaG9va3MpIHx8IE9iamVjdC5jcmVhdGUoW10pKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHhtbFZpZXdQcmVwcm9jZXNzb3Ioc291cmNlOiBvYmplY3QsIF9jYWxsZXI/OiB1bmtub3duLCBfc2V0dGluZ3M/OiBvYmplY3QpOiB2b2lkIHtcblx0Y29uc3Qgc291cmNlVmlldyA9IHNvdXJjZSBhcyBYTUxWaWV3O1xuXHRjb25zdCBjb250cm9sbGVyID0gc291cmNlVmlldy5nZXRDb250cm9sbGVyKCkgYXMgQ29udHJvbGxlciB8IHVuZGVmaW5lZDtcblx0aWYgKGNvbnRyb2xsZXIpIHtcblx0XHRjb25zdCBtYWNyb0FQSUNoaWxkID0gc291cmNlVmlldy5maW5kQWdncmVnYXRlZE9iamVjdHModHJ1ZSwgKHMpID0+IHMuaXNBKFwic2FwLmZlLm1hY3Jvcy5NYWNyb0FQSVwiKSk7XG5cdFx0Zm9yIChjb25zdCBtYW5hZ2VkT2JqZWN0IG9mIG1hY3JvQVBJQ2hpbGQpIHtcblx0XHRcdGluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzKG1hbmFnZWRPYmplY3QsIGNvbnRyb2xsZXIpO1xuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdz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LG1CQUFtQixHQUFHSCxVQUF3QztNQUNwRSxLQUFLLE1BQU1JLGNBQWMsSUFBSUgsZUFBZSxFQUFFO1FBQzdDRSxtQkFBbUIsQ0FBQ0MsY0FBYyxDQUFDZixJQUFJLENBQUMsR0FBRyxTQUFTTSxNQUFNLENBQUNTLGNBQWMsQ0FBQ2QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHYyxjQUFjLENBQUNDLGVBQWUsQ0FBQztNQUN2SDtJQUNEO0VBQ0Q7RUFBQ3RCLFFBQUEsQ0FBQXlCLHFDQUFBLEdBQUFBLHFDQUFBO0VBRU0sU0FBU0Msc0JBQXNCQSxDQUNyQzdDLE1BQXNELEVBQ3REOEMsTUFBc0QsRUFDL0M7SUFDUCxJQUFJQSxNQUFNLENBQUNsQixLQUFLLENBQUMsRUFBRTtNQUNsQixJQUFJNUIsTUFBTSxDQUFDNEIsS0FBSyxDQUFDLEVBQUU7UUFDbEI1QixNQUFNLENBQUM0QixLQUFLLENBQUMsQ0FBRWhCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUdrQyxNQUFNLENBQUNsQixLQUFLLENBQUMsQ0FBQztNQUM5QyxDQUFDLE1BQU07UUFDTkssTUFBTSxDQUFDQyxjQUFjLENBQUNsQyxNQUFNLEVBQUU0QixLQUFLLEVBQUVLLE1BQU0sQ0FBQ2Msd0JBQXdCLENBQUNELE1BQU0sRUFBRWxCLEtBQUssQ0FBQyxJQUFJSyxNQUFNLENBQUNlLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUMxRztJQUNEO0VBQ0Q7RUFBQzdCLFFBQUEsQ0FBQTBCLHNCQUFBLEdBQUFBLHNCQUFBO0VBRU0sU0FBU0ksbUJBQW1CQSxDQUFDSCxNQUFjLEVBQUVJLE9BQWlCLEVBQUVDLFNBQWtCLEVBQVE7SUFDaEcsTUFBTUMsVUFBVSxHQUFHTixNQUFpQjtJQUNwQyxNQUFNVixVQUFVLEdBQUdnQixVQUFVLENBQUNDLGFBQWEsQ0FBQyxDQUEyQjtJQUN2RSxJQUFJakIsVUFBVSxFQUFFO01BQ2YsTUFBTWtCLGFBQWEsR0FBR0YsVUFBVSxDQUFDRyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUdDLENBQUMsSUFBS0EsQ0FBQyxDQUFDQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztNQUNwRyxLQUFLLE1BQU1DLGFBQWEsSUFBSUosYUFBYSxFQUFFO1FBQzFDbkIsbUNBQW1DLENBQUN1QixhQUFhLEVBQUV0QixVQUFVLENBQUM7TUFDL0Q7SUFDRDtFQUNEO0VBQUNqQixRQUFBLENBQUE4QixtQkFBQSxHQUFBQSxtQkFBQTtFQUFBLE9BQUE5QixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
173
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWdpc3RlcmVkSW5zdGFuY2VzIiwicmVnaXN0ZXJlZEhhbmRsZXJzIiwiaG9va2FibGUiLCJleGVjdXRpb24iLCJ0YXJnZXQiLCJwcm9wZXJ0eUtleSIsImRlc2NyaXB0b3IiLCJpbmRleGFibGVUYXJnZXQiLCJ0b1N0cmluZyIsImZuIiwiY0V4VEluc3RhbmNlSG9va01hcCIsImhvb2tlZEhhbmRsZXJzIiwicHVzaCIsImhhbmRsZXJzIiwiaW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIiwib2xkVmFsdWUiLCJ2YWx1ZSIsInJldHVyblZhbHVlIiwiYmluZCIsImFyZ3VtZW50cyIsImhhbmRsZXIiLCJfZXhwb3J0cyIsImlzQWxyZWFkeVJlZ2lzdGVyZWQiLCJleGlzdGluZ1JlZ2lzdHJhdGlvbnMiLCJuZXdSZWdpc3RyYXRpb24iLCJmaW5kIiwiciIsIm5hbWUiLCJtZXRob2QiLCJ0YXJnZXRNZXRob2QiLCJob29rcyIsIlN5bWJvbCIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiU3RyaW5nIiwiY29uc3RydWN0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzIiwiY29udHJvbGxlciIsInJlZ2lzdGVyZWRIb29rcyIsImRlZXBDbG9uZSIsImluZGV4YWJsZUNvbnRyb2xsZXIiLCJyZWdpc3RlcmVkSG9vayIsImhhbmRsZXJGdW5jdGlvbiIsImdldFZpZXciLCJhdHRhY2hCZWZvcmVFeGl0IiwicmVtb3ZlQ29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyIsInByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4iLCJzb3VyY2UiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcmVhdGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkhvb2tTdXBwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbi8qKlxuICogVGhpcyB0eXBlIGlzIHRvIGJlIGV4dGVuZGVkIHdpdGggYWxsIGNvbnRyb2xsZXIgZXh0ZW5zaW9ucyBhbmQgbWV0aG9kcyB0aGF0IGFyZSBob29rYWJsZS5cbiAqL1xudHlwZSBIb29rYWJsZUNvbnRyb2xsZXJFeHRlbnNpb25zID0ge1xuXHRlZGl0Rmxvdzoge1xuXHRcdG9uQWZ0ZXJTYXZlOiB0cnVlO1xuXHRcdG9uQmVmb3JlU2F2ZTogdHJ1ZTtcblx0fTtcblx0aW5saW5lRWRpdEZsb3c6IHtcblx0XHRpbmxpbmVFZGl0RW5kOiB0cnVlO1xuXHRcdGlubGluZUVkaXRTdGFydDogdHJ1ZTtcblx0fTtcblx0Y29sbGFib3JhdGlvbk1hbmFnZXI6IHtcblx0XHRjb2xsZWN0QXZhaWxhYmxlQ2FyZHM6IHRydWU7XG5cdH07XG5cdHBhZ2luYXRvcjoge1xuXHRcdGluaXRpYWxpemU6IHRydWU7XG5cdH07XG5cdHJvdXRpbmc6IHtcblx0XHRvbkFmdGVyQmluZGluZzogdHJ1ZTtcblx0fTtcbn07XG5cbnR5cGUgSGFuZGxlckNvbmZpZ3VyYXRpb248Q0V4dE5hbWUgZXh0ZW5kcyBrZXlvZiBIb29rYWJsZUNvbnRyb2xsZXJFeHRlbnNpb25zPiA9IHtcblx0bmFtZTogQ0V4dE5hbWU7XG5cdG1ldGhvZDoga2V5b2YgSG9va2FibGVDb250cm9sbGVyRXh0ZW5zaW9uc1tDRXh0TmFtZV07XG59O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbnR5cGUgSGFuZGxlclJlZ2lzdHJhdGlvbiA9IEhhbmRsZXJDb25maWd1cmF0aW9uPGFueT4gJiB7IHRhcmdldE1ldGhvZDogc3RyaW5nOyBoYW5kbGVyRnVuY3Rpb24/OiBGdW5jdGlvbiB9O1xuXG50eXBlIEZ1bmN0aW9uTWFwID0ge1xuXHRba2V5OiBzdHJpbmddOiBGdW5jdGlvbjtcbn07XG50eXBlIERlZXBGdW5jdGlvbk1hcCA9IHtcblx0W2tleTogc3RyaW5nXTogRnVuY3Rpb25NYXA7XG59O1xudHlwZSBIb29rTWFwID0ge1xuXHRob29rZWRIYW5kbGVyczoge1xuXHRcdFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uW107XG5cdH07XG59O1xuXG4vLyBVc2UgdHdvIGFycmF5cyBhcyB3ZSBjYW5ub3QgaW5kZXggYSBtYXAgdGhyb3VnaCBhbiBhcmJpdHJhcnkgb2JqZWN0IGluc3RhbmNlXG5jb25zdCByZWdpc3RlcmVkSW5zdGFuY2VzOiBGdW5jdGlvbltdID0gW107XG5jb25zdCByZWdpc3RlcmVkSGFuZGxlcnM6IEhhbmRsZXJSZWdpc3RyYXRpb25bXVtdID0gW107XG5cbi8qKlxuICogTWFya3MgYSBjb250cm9sbGVyIGV4dGVuc2lvbiBtZXRob2QgdG8gYmUgaG9va2FibGUgYnkgZ2VuZXJhdGluZyBhZGRpdGlvbmFsIG1ldGhvZHMgdGhhdCBjYW4gYmUgdXNlZCB0byBhdHRhY2ggYW5kIGRldGFjaCBoYW5kbGVycyBhdCBydW50aW1lLlxuICogQHBhcmFtIGV4ZWN1dGlvblxuICogQHJldHVybnMgQSBtZXRob2QgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob29rYWJsZShleGVjdXRpb246IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IHVua25vd24sIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikge1xuXHRcdGNvbnN0IGluZGV4YWJsZVRhcmdldCA9IHRhcmdldCBhcyBGdW5jdGlvbk1hcDtcblxuXHRcdGluZGV4YWJsZVRhcmdldFtgYXR0YWNoJHtwcm9wZXJ0eUtleS50b1N0cmluZygpfWBdID0gZnVuY3Rpb24gKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdFx0Y29uc3QgY0V4VEluc3RhbmNlSG9va01hcCA9IHRoaXMgYXMgdW5rbm93biBhcyBIb29rTWFwO1xuXHRcdFx0aWYgKCFjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzKSB7XG5cdFx0XHRcdGNFeFRJbnN0YW5jZUhvb2tNYXAuaG9va2VkSGFuZGxlcnMgPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY0V4VEluc3RhbmNlSG9va01hcC5ob29rZWRIYW5kbGVyc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0XHRjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0gW107XG5cdFx0XHR9XG5cdFx0XHRjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLnB1c2goZm4pO1xuXHRcdH07XG5cdFx0aW5kZXhhYmxlVGFyZ2V0W2BkZXRhY2gke3Byb3BlcnR5S2V5LnRvU3RyaW5nKCl9YF0gPSBmdW5jdGlvbiAoZm46IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0XHRjb25zdCBjRXhUSW5zdGFuY2VIb29rTWFwID0gdGhpcyBhcyB1bmtub3duIGFzIEhvb2tNYXA7XG5cdFx0XHRjb25zdCBoYW5kbGVycyA9IGNFeFRJbnN0YW5jZUhvb2tNYXAuaG9va2VkSGFuZGxlcnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV07XG5cdFx0XHRjb25zdCBpbmRleCA9IGhhbmRsZXJzLmluZGV4T2YoZm4pO1xuXHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBvbGRWYWx1ZSA9IGRlc2NyaXB0b3IudmFsdWU7XG5cdFx0aWYgKGV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiIHx8IGV4ZWN1dGlvbiA9PT0gXCJBZnRlckFzeW5jXCIpIHtcblx0XHRcdGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRcdGNvbnN0IGNFeFRJbnN0YW5jZUhvb2tNYXAgPSB0aGlzIGFzIHVua25vd24gYXMgSG9va01hcDtcblx0XHRcdFx0Y29uc3QgaGFuZGxlcnMgPSAoY0V4VEluc3RhbmNlSG9va01hcD8uaG9va2VkSGFuZGxlcnMgJiYgY0V4VEluc3RhbmNlSG9va01hcD8uaG9va2VkSGFuZGxlcnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHx8IFtdO1xuXHRcdFx0XHRsZXQgcmV0dXJuVmFsdWU6IHVua25vd247XG5cdFx0XHRcdGlmIChleGVjdXRpb24gPT09IFwiQWZ0ZXJBc3luY1wiKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBhd2FpdCBvbGRWYWx1ZS5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuXHRcdFx0XHRcdGF3YWl0IGhhbmRsZXIuYmluZCh0aGlzKSguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRyZXR1cm5WYWx1ZSA9IGF3YWl0IG9sZFZhbHVlLmJpbmQodGhpcykoLi4uYXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJldHVyblZhbHVlO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB1bmtub3duIHtcblx0XHRcdFx0Y29uc3QgY0V4VEluc3RhbmNlSG9va01hcCA9IHRoaXMgYXMgdW5rbm93biBhcyBIb29rTWFwO1xuXHRcdFx0XHRjb25zdCBoYW5kbGVycyA9IChjRXhUSW5zdGFuY2VIb29rTWFwPy5ob29rZWRIYW5kbGVycyAmJiBjRXhUSW5zdGFuY2VIb29rTWFwPy5ob29rZWRIYW5kbGVyc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkgfHwgW107XG5cdFx0XHRcdGxldCByZXR1cm5WYWx1ZTogdW5rbm93bjtcblx0XHRcdFx0aWYgKGV4ZWN1dGlvbiA9PT0gXCJBZnRlclwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBvbGRWYWx1ZS5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuXHRcdFx0XHRcdGhhbmRsZXIuYmluZCh0aGlzKSguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXhlY3V0aW9uID09PSBcIkJlZm9yZVwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBvbGRWYWx1ZS5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZXR1cm5WYWx1ZTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbmV3UmVnaXN0cmF0aW9uIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gc29tZSBleGlzdGluZ1JlZ2lzdHJhdGlvbnMgYnkgY29tcGFyaW5nIGFsbCByZWxldmFudCBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIGV4aXN0aW5nUmVnaXN0cmF0aW9uc1xuICogQHBhcmFtIG5ld1JlZ2lzdHJhdGlvblxuICogQHJldHVybnMgUmVzdWx0IG9mIHRoZSBjaGVja1xuICovXG5mdW5jdGlvbiBpc0FscmVhZHlSZWdpc3RlcmVkKGV4aXN0aW5nUmVnaXN0cmF0aW9uczogSGFuZGxlclJlZ2lzdHJhdGlvbltdLCBuZXdSZWdpc3RyYXRpb246IEhhbmRsZXJSZWdpc3RyYXRpb24pOiBib29sZWFuIHtcblx0cmV0dXJuICEhZXhpc3RpbmdSZWdpc3RyYXRpb25zLmZpbmQoXG5cdFx0KHIpID0+IHIubmFtZSA9PT0gbmV3UmVnaXN0cmF0aW9uLm5hbWUgJiYgci5tZXRob2QgPT09IG5ld1JlZ2lzdHJhdGlvbi5tZXRob2QgJiYgci50YXJnZXRNZXRob2QgPT09IG5ld1JlZ2lzdHJhdGlvbi50YXJnZXRNZXRob2Rcblx0KTtcbn1cblxuZXhwb3J0IGNvbnN0IGhvb2tzID0gU3ltYm9sKFwiaG9va3NcIik7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbWV0aG9kIGFzIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGhvb2sgaGFuZGxlci5cbiAqXG4gKiBDdXJyZW50bHksIG9ubHkgbWV0aG9kcyBvZiBydW50aW1lIGJ1aWxkaW5nIGJsb2NrcyBhcmUgc3VwcG9ydGVkLlxuICogQHBhcmFtIG5hbWUgQ29udHJvbGxlciBleHRlbnNpb24gdG8gaG9vayBpbnRvXG4gKiBAcGFyYW0gbWV0aG9kIE1ldGhvZCB0byBob29rIGludG9cbiAqIEByZXR1cm5zIEEgbWV0aG9kIGRlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXI8Q0V4dE5hbWUgZXh0ZW5kcyBrZXlvZiBIb29rYWJsZUNvbnRyb2xsZXJFeHRlbnNpb25zPihcblx0bmFtZTogQ0V4dE5hbWUsXG5cdG1ldGhvZDoga2V5b2YgSG9va2FibGVDb250cm9sbGVyRXh0ZW5zaW9uc1tDRXh0TmFtZV1cbik6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiB7IGNvbnN0cnVjdG9yOiBGdW5jdGlvbiAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9IH0sIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcblx0XHRjb25zdCBuZXdSZWdpc3RyYXRpb24gPSB7IG5hbWUsIG1ldGhvZDogU3RyaW5nKG1ldGhvZCksIHRhcmdldE1ldGhvZDogcHJvcGVydHlLZXkgfTtcblx0XHRjb25zdCBpbmRleCA9IHJlZ2lzdGVyZWRJbnN0YW5jZXMuaW5kZXhPZih0YXJnZXQuY29uc3RydWN0b3IpO1xuXHRcdGlmICghdGFyZ2V0LmNvbnN0cnVjdG9yW2hvb2tzXSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5jb25zdHJ1Y3RvciwgaG9va3MsIHtcblx0XHRcdFx0dmFsdWU6IFtdXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGFyZ2V0LmNvbnN0cnVjdG9yW2hvb2tzXT8ucHVzaChuZXdSZWdpc3RyYXRpb24pO1xuXHRcdC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhpcyBleGFjdCBoYW5kbGVyIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBhcyBoYW5kbGVycyBhcmUgcmVnaXN0ZXJlZCBzdGF0aWNhbGx5IChvbiB0aGUgY29uc3RydWN0b3IpXG5cdFx0aWYgKGluZGV4ICE9PSAtMSAmJiAhaXNBbHJlYWR5UmVnaXN0ZXJlZChyZWdpc3RlcmVkSGFuZGxlcnNbaW5kZXhdLCBuZXdSZWdpc3RyYXRpb24pKSB7XG5cdFx0XHRyZWdpc3RlcmVkSGFuZGxlcnNbaW5kZXhdLnB1c2gobmV3UmVnaXN0cmF0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVnaXN0ZXJlZEluc3RhbmNlcy5wdXNoKHRhcmdldC5jb25zdHJ1Y3Rvcik7XG5cdFx0XHRyZWdpc3RlcmVkSGFuZGxlcnMucHVzaChbbmV3UmVnaXN0cmF0aW9uXSk7XG5cdFx0fVxuXHR9IGFzIE1ldGhvZERlY29yYXRvcjtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbGwgY29udHJvbGxlciBleHRlbnNpb24gaGFuZGxlcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiB0YXJnZXQuXG4gKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBjbGFzcyB0byBpbml0aWFsaXplIHRoZSBoYW5kbGVycyBmb3JcbiAqIEBwYXJhbSB0YXJnZXQuY29uc3RydWN0b3JcbiAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2VDb250cm9sbGVyIGluc3RhbmNlIHRvIGdldCB0aGUgY29udHJvbGxlciBleHRlbnNpb25zIGluc3RhbmNlcyBmcm9tXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyhcblx0dGFyZ2V0OiB7IGNvbnN0cnVjdG9yOiBGdW5jdGlvbiAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9IH0gJiB7IFtob29rc10/OiBIYW5kbGVyUmVnaXN0cmF0aW9uW10gfSxcblx0Y29udHJvbGxlcjogQ29udHJvbGxlclxuKTogdm9pZCB7XG5cdGlmICh0YXJnZXQuY29uc3RydWN0b3JbaG9va3NdKSB7XG5cdFx0bGV0IHJlZ2lzdGVyZWRIb29rcyA9IHRhcmdldC5jb25zdHJ1Y3Rvcltob29rc107XG5cdFx0dGFyZ2V0W2hvb2tzXSA9IGRlZXBDbG9uZShyZWdpc3RlcmVkSG9va3MpO1xuXHRcdHJlZ2lzdGVyZWRIb29rcyA9IHRhcmdldFtob29rc10hO1xuXHRcdGNvbnN0IGluZGV4YWJsZVRhcmdldCA9IHRhcmdldCBhcyB1bmtub3duIGFzIEZ1bmN0aW9uTWFwO1xuXHRcdGNvbnN0IGluZGV4YWJsZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyIGFzIHVua25vd24gYXMgRGVlcEZ1bmN0aW9uTWFwO1xuXHRcdGZvciAoY29uc3QgcmVnaXN0ZXJlZEhvb2sgb2YgcmVnaXN0ZXJlZEhvb2tzKSB7XG5cdFx0XHRyZWdpc3RlcmVkSG9vay5oYW5kbGVyRnVuY3Rpb24gPSBpbmRleGFibGVUYXJnZXRbcmVnaXN0ZXJlZEhvb2sudGFyZ2V0TWV0aG9kXS5iaW5kKHRhcmdldCk7XG5cdFx0XHRpbmRleGFibGVDb250cm9sbGVyW3JlZ2lzdGVyZWRIb29rLm5hbWVdW2BhdHRhY2gke1N0cmluZyhyZWdpc3RlcmVkSG9vay5tZXRob2QpfWBdKHJlZ2lzdGVyZWRIb29rLmhhbmRsZXJGdW5jdGlvbik7XG5cdFx0XHRjb250cm9sbGVyLmdldFZpZXcoKT8uYXR0YWNoQmVmb3JlRXhpdCgoKSA9PiB7XG5cdFx0XHRcdGluZGV4YWJsZUNvbnRyb2xsZXJbcmVnaXN0ZXJlZEhvb2submFtZV1bYGRldGFjaCR7U3RyaW5nKHJlZ2lzdGVyZWRIb29rLm1ldGhvZCl9YF0ocmVnaXN0ZXJlZEhvb2suaGFuZGxlckZ1bmN0aW9uKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyhcblx0dGFyZ2V0OiB7IGNvbnN0cnVjdG9yOiBGdW5jdGlvbiAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9IH0gJiB7IFtob29rc10/OiBIYW5kbGVyUmVnaXN0cmF0aW9uW10gfSxcblx0Y29udHJvbGxlcjogQ29udHJvbGxlclxuKTogdm9pZCB7XG5cdGlmICh0YXJnZXRbaG9va3NdKSB7XG5cdFx0Y29uc3QgcmVnaXN0ZXJlZEhvb2tzID0gdGFyZ2V0W2hvb2tzXTtcblx0XHRjb25zdCBpbmRleGFibGVDb250cm9sbGVyID0gY29udHJvbGxlciBhcyB1bmtub3duIGFzIERlZXBGdW5jdGlvbk1hcDtcblx0XHRmb3IgKGNvbnN0IHJlZ2lzdGVyZWRIb29rIG9mIHJlZ2lzdGVyZWRIb29rcykge1xuXHRcdFx0aW5kZXhhYmxlQ29udHJvbGxlcltyZWdpc3RlcmVkSG9vay5uYW1lXT8uW2BkZXRhY2gke1N0cmluZyhyZWdpc3RlcmVkSG9vay5tZXRob2QpfWBdPy4ocmVnaXN0ZXJlZEhvb2suaGFuZGxlckZ1bmN0aW9uKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4oXG5cdHRhcmdldDogRnVuY3Rpb24gJiB7IFtob29rc10/OiBIYW5kbGVyUmVnaXN0cmF0aW9uW10gfSxcblx0c291cmNlOiBGdW5jdGlvbiAmIHsgW2hvb2tzXT86IEhhbmRsZXJSZWdpc3RyYXRpb25bXSB9XG4pOiB2b2lkIHtcblx0aWYgKHNvdXJjZVtob29rc10pIHtcblx0XHRpZiAodGFyZ2V0W2hvb2tzXSkge1xuXHRcdFx0dGFyZ2V0W2hvb2tzXSEuc3BsaWNlKDAsIDAsIC4uLnNvdXJjZVtob29rc10pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBob29rcywgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGhvb2tzKSB8fCBPYmplY3QuY3JlYXRlKFtdKSk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBR0E7QUFDQTtBQUNBOztFQXlCQTs7RUFlQTtFQUNBLE1BQU1BLG1CQUErQixHQUFHLEVBQUU7RUFDMUMsTUFBTUMsa0JBQTJDLEdBQUcsRUFBRTs7RUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNDLFFBQVFBLENBQUNDLFNBQXFDLEVBQW1CO0lBQ2hGLE9BQU8sVUFBVUMsTUFBZSxFQUFFQyxXQUE0QixFQUFFQyxVQUE4QixFQUFFO01BQy9GLE1BQU1DLGVBQWUsR0FBR0gsTUFBcUI7TUFFN0NHLGVBQWUsQ0FBQyxTQUFTRixXQUFXLENBQUNHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVVDLEVBQVksRUFBUTtRQUNsRixNQUFNQyxtQkFBbUIsR0FBRyxJQUEwQjtRQUN0RCxJQUFJLENBQUNBLG1CQUFtQixDQUFDQyxjQUFjLEVBQUU7VUFDeENELG1CQUFtQixDQUFDQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDO1FBQ0EsSUFBSSxDQUFDRCxtQkFBbUIsQ0FBQ0MsY0FBYyxDQUFDTixXQUFXLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUNoRUUsbUJBQW1CLENBQUNDLGNBQWMsQ0FBQ04sV0FBVyxDQUFDRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtRQUNoRTtRQUNBRSxtQkFBbUIsQ0FBQ0MsY0FBYyxDQUFDTixXQUFXLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxDQUFDSCxFQUFFLENBQUM7TUFD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
@@ -1,7 +1,6 @@
1
1
  import deepClone from "sap/base/util/deepClone";
2
2
  import type { ExtensionOverrideExecution } from "sap/fe/base/ClassSupport";
3
3
  import type Controller from "sap/ui/core/mvc/Controller";
4
- import type XMLView from "sap/ui/core/mvc/XMLView";
5
4
  /**
6
5
  * This type is to be extended with all controller extensions and methods that are hookable.
7
6
  */
@@ -209,14 +208,3 @@ export function propagateHookFromMixin(
209
208
  }
210
209
  }
211
210
  }
212
-
213
- export function xmlViewPreprocessor(source: object, _caller?: unknown, _settings?: object): void {
214
- const sourceView = source as XMLView;
215
- const controller = sourceView.getController() as Controller | undefined;
216
- if (controller) {
217
- const macroAPIChild = sourceView.findAggregatedObjects(true, (s) => s.isA("sap.fe.macros.MacroAPI"));
218
- for (const managedObject of macroAPIChild) {
219
- initControllerExtensionHookHandlers(managedObject, controller);
220
- }
221
- }
222
- }
@@ -0,0 +1,68 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/base/util/deepClone"], function (deepClone) {
6
+ "use strict";
7
+
8
+ var _exports = {};
9
+ const fullCache = {};
10
+ let currentCacheEntry = {
11
+ values: {}
12
+ };
13
+
14
+ /**
15
+ * Returns the current cache entry, which is a PageLevelCache object.
16
+ * @returns The current cache entry
17
+ */
18
+ function getCurrentCacheEntry() {
19
+ return currentCacheEntry;
20
+ }
21
+
22
+ /**
23
+ *Returns the full cache object, which contains all application level caches.
24
+ * @param targetName
25
+ * @param appComponent
26
+ * @returns The full cache object for the app component.
27
+ */
28
+ function getCacheEntryByTargetName(targetName, appComponent) {
29
+ return fullCache[appComponent.getId()]?.[targetName];
30
+ }
31
+
32
+ /**
33
+ * Adds or replace a page level cache entry to the full cache.
34
+ * If the isCurrent parameter is true, it will also set the current cache entry.
35
+ * @param cacheEntry
36
+ * @param targetName
37
+ * @param appComponent
38
+ * @param isCurrent If true, the cache entry will be set as the current cache entry.
39
+ */
40
+ function addEntryToCache(cacheEntry, targetName, appComponent) {
41
+ let isCurrent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
42
+ if (!fullCache[appComponent.getId()]) {
43
+ fullCache[appComponent.getId()] = {};
44
+ }
45
+ fullCache[appComponent.getId()][targetName] = cacheEntry;
46
+ if (isCurrent) {
47
+ currentCacheEntry = cacheEntry;
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Returns a deep clone of the full cache object.
53
+ * This function is used only for testing purposes.
54
+ * @returns The full cache object.
55
+ */
56
+ function _getFullCache() {
57
+ return deepClone(fullCache);
58
+ }
59
+ const viewPreloaderCache = {
60
+ getCurrentCacheEntry,
61
+ getCacheEntryByTargetName,
62
+ addEntryToCache,
63
+ _getFullCache
64
+ };
65
+ _exports.viewPreloaderCache = viewPreloaderCache;
66
+ return _exports;
67
+ }, false);
68
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmdWxsQ2FjaGUiLCJjdXJyZW50Q2FjaGVFbnRyeSIsInZhbHVlcyIsImdldEN1cnJlbnRDYWNoZUVudHJ5IiwiZ2V0Q2FjaGVFbnRyeUJ5VGFyZ2V0TmFtZSIsInRhcmdldE5hbWUiLCJhcHBDb21wb25lbnQiLCJnZXRJZCIsImFkZEVudHJ5VG9DYWNoZSIsImNhY2hlRW50cnkiLCJpc0N1cnJlbnQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJfZ2V0RnVsbENhY2hlIiwiZGVlcENsb25lIiwidmlld1ByZWxvYWRlckNhY2hlIiwiX2V4cG9ydHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZpZXdQcmVsb2FkZXJDYWNoZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcblxuZXhwb3J0IHR5cGUgUGFnZUxldmVsQ2FjaGUgPSB7XG5cdHZpc2l0ZWRDb250ZXh0UGF0aD86IHN0cmluZztcblx0dmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0dmlld1Nob3VsZGJlUmVmcmVzaGVkPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBBcHBsaWNhdGlvbkxldmVsQ2FjaGUgPSBSZWNvcmQ8c3RyaW5nLCBQYWdlTGV2ZWxDYWNoZT47XG5jb25zdCBmdWxsQ2FjaGU6IFJlY29yZDxzdHJpbmcsIEFwcGxpY2F0aW9uTGV2ZWxDYWNoZT4gPSB7fTtcblxubGV0IGN1cnJlbnRDYWNoZUVudHJ5OiBQYWdlTGV2ZWxDYWNoZSA9IHtcblx0dmFsdWVzOiB7fVxufTtcblxuLyoqXG4gKiAgUmV0dXJucyB0aGUgY3VycmVudCBjYWNoZSBlbnRyeSwgd2hpY2ggaXMgYSBQYWdlTGV2ZWxDYWNoZSBvYmplY3QuXG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBjYWNoZSBlbnRyeVxuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50Q2FjaGVFbnRyeSgpOiBQYWdlTGV2ZWxDYWNoZSB7XG5cdHJldHVybiBjdXJyZW50Q2FjaGVFbnRyeTtcbn1cblxuLyoqXG4gKlJldHVybnMgdGhlIGZ1bGwgY2FjaGUgb2JqZWN0LCB3aGljaCBjb250YWlucyBhbGwgYXBwbGljYXRpb24gbGV2ZWwgY2FjaGVzLlxuICogQHBhcmFtIHRhcmdldE5hbWVcbiAqIEBwYXJhbSBhcHBDb21wb25lbnRcbiAqIEByZXR1cm5zIFRoZSBmdWxsIGNhY2hlIG9iamVjdCBmb3IgdGhlIGFwcCBjb21wb25lbnQuXG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlRW50cnlCeVRhcmdldE5hbWUodGFyZ2V0TmFtZTogc3RyaW5nLCBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IFBhZ2VMZXZlbENhY2hlIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGZ1bGxDYWNoZVthcHBDb21wb25lbnQuZ2V0SWQoKV0/Llt0YXJnZXROYW1lXTtcbn1cblxuLyoqXG4gKiBBZGRzIG9yIHJlcGxhY2UgYSBwYWdlIGxldmVsIGNhY2hlIGVudHJ5IHRvIHRoZSBmdWxsIGNhY2hlLlxuICogIElmIHRoZSBpc0N1cnJlbnQgcGFyYW1ldGVyIGlzIHRydWUsIGl0IHdpbGwgYWxzbyBzZXQgdGhlIGN1cnJlbnQgY2FjaGUgZW50cnkuXG4gKiBAcGFyYW0gY2FjaGVFbnRyeVxuICogQHBhcmFtIHRhcmdldE5hbWVcbiAqIEBwYXJhbSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBpc0N1cnJlbnQgSWYgdHJ1ZSwgdGhlIGNhY2hlIGVudHJ5IHdpbGwgYmUgc2V0IGFzIHRoZSBjdXJyZW50IGNhY2hlIGVudHJ5LlxuICovXG5mdW5jdGlvbiBhZGRFbnRyeVRvQ2FjaGUoY2FjaGVFbnRyeTogUGFnZUxldmVsQ2FjaGUsIHRhcmdldE5hbWU6IHN0cmluZywgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIGlzQ3VycmVudCA9IHRydWUpOiB2b2lkIHtcblx0aWYgKCFmdWxsQ2FjaGVbYXBwQ29tcG9uZW50LmdldElkKCldKSB7XG5cdFx0ZnVsbENhY2hlW2FwcENvbXBvbmVudC5nZXRJZCgpXSA9IHt9O1xuXHR9XG5cdGZ1bGxDYWNoZVthcHBDb21wb25lbnQuZ2V0SWQoKV1bdGFyZ2V0TmFtZV0gPSBjYWNoZUVudHJ5O1xuXHRpZiAoaXNDdXJyZW50KSB7XG5cdFx0Y3VycmVudENhY2hlRW50cnkgPSBjYWNoZUVudHJ5O1xuXHR9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRlZXAgY2xvbmUgb2YgdGhlIGZ1bGwgY2FjaGUgb2JqZWN0LlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKiBAcmV0dXJucyBUaGUgZnVsbCBjYWNoZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIF9nZXRGdWxsQ2FjaGUoKTogUmVjb3JkPHN0cmluZywgQXBwbGljYXRpb25MZXZlbENhY2hlPiB7XG5cdHJldHVybiBkZWVwQ2xvbmUoZnVsbENhY2hlKTtcbn1cblxuZXhwb3J0IGNvbnN0IHZpZXdQcmVsb2FkZXJDYWNoZSA9IHtcblx0Z2V0Q3VycmVudENhY2hlRW50cnksXG5cdGdldENhY2hlRW50cnlCeVRhcmdldE5hbWUsXG5cdGFkZEVudHJ5VG9DYWNoZSxcblx0X2dldEZ1bGxDYWNoZVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7RUFTQSxNQUFNQSxTQUFnRCxHQUFHLENBQUMsQ0FBQztFQUUzRCxJQUFJQyxpQkFBaUMsR0FBRztJQUN2Q0MsTUFBTSxFQUFFLENBQUM7RUFDVixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0Msb0JBQW9CQSxDQUFBLEVBQW1CO0lBQy9DLE9BQU9GLGlCQUFpQjtFQUN6Qjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTRyx5QkFBeUJBLENBQUNDLFVBQWtCLEVBQUVDLFlBQTBCLEVBQThCO0lBQzlHLE9BQU9OLFNBQVMsQ0FBQ00sWUFBWSxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUdGLFVBQVUsQ0FBQztFQUNyRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0csZUFBZUEsQ0FBQ0MsVUFBMEIsRUFBRUosVUFBa0IsRUFBRUMsWUFBMEIsRUFBMEI7SUFBQSxJQUF4QkksU0FBUyxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxJQUFJO0lBQ3BILElBQUksQ0FBQ1gsU0FBUyxDQUFDTSxZQUFZLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtNQUNyQ1AsU0FBUyxDQUFDTSxZQUFZLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckM7SUFDQVAsU0FBUyxDQUFDTSxZQUFZLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ0YsVUFBVSxDQUFDLEdBQUdJLFVBQVU7SUFDeEQsSUFBSUMsU0FBUyxFQUFFO01BQ2RULGlCQUFpQixHQUFHUSxVQUFVO0lBQy9CO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNLLGFBQWFBLENBQUEsRUFBMEM7SUFDL0QsT0FBT0MsU0FBUyxDQUFDZixTQUFTLENBQUM7RUFDNUI7RUFFTyxNQUFNZ0Isa0JBQWtCLEdBQUc7SUFDakNiLG9CQUFvQjtJQUNwQkMseUJBQXlCO0lBQ3pCSSxlQUFlO0lBQ2ZNO0VBQ0QsQ0FBQztFQUFDRyxRQUFBLENBQUFELGtCQUFBLEdBQUFBLGtCQUFBO0VBQUEsT0FBQUMsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,66 @@
1
+ import deepClone from "sap/base/util/deepClone";
2
+ import type AppComponent from "sap/fe/core/AppComponent";
3
+
4
+ export type PageLevelCache = {
5
+ visitedContextPath?: string;
6
+ values: Record<string, unknown>;
7
+ viewShouldbeRefreshed?: boolean;
8
+ };
9
+ export type ApplicationLevelCache = Record<string, PageLevelCache>;
10
+ const fullCache: Record<string, ApplicationLevelCache> = {};
11
+
12
+ let currentCacheEntry: PageLevelCache = {
13
+ values: {}
14
+ };
15
+
16
+ /**
17
+ * Returns the current cache entry, which is a PageLevelCache object.
18
+ * @returns The current cache entry
19
+ */
20
+ function getCurrentCacheEntry(): PageLevelCache {
21
+ return currentCacheEntry;
22
+ }
23
+
24
+ /**
25
+ *Returns the full cache object, which contains all application level caches.
26
+ * @param targetName
27
+ * @param appComponent
28
+ * @returns The full cache object for the app component.
29
+ */
30
+ function getCacheEntryByTargetName(targetName: string, appComponent: AppComponent): PageLevelCache | undefined {
31
+ return fullCache[appComponent.getId()]?.[targetName];
32
+ }
33
+
34
+ /**
35
+ * Adds or replace a page level cache entry to the full cache.
36
+ * If the isCurrent parameter is true, it will also set the current cache entry.
37
+ * @param cacheEntry
38
+ * @param targetName
39
+ * @param appComponent
40
+ * @param isCurrent If true, the cache entry will be set as the current cache entry.
41
+ */
42
+ function addEntryToCache(cacheEntry: PageLevelCache, targetName: string, appComponent: AppComponent, isCurrent = true): void {
43
+ if (!fullCache[appComponent.getId()]) {
44
+ fullCache[appComponent.getId()] = {};
45
+ }
46
+ fullCache[appComponent.getId()][targetName] = cacheEntry;
47
+ if (isCurrent) {
48
+ currentCacheEntry = cacheEntry;
49
+ }
50
+ }
51
+
52
+ /**
53
+ * Returns a deep clone of the full cache object.
54
+ * This function is used only for testing purposes.
55
+ * @returns The full cache object.
56
+ */
57
+ function _getFullCache(): Record<string, ApplicationLevelCache> {
58
+ return deepClone(fullCache);
59
+ }
60
+
61
+ export const viewPreloaderCache = {
62
+ getCurrentCacheEntry,
63
+ getCacheEntryByTargetName,
64
+ addEntryToCache,
65
+ _getFullCache
66
+ };
@@ -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.139.0",
25
+ version: "1.140.0",
26
26
  noLibraryCSS: true
27
27
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
28
  });