@carto/kepler.gl 0.0.48-alpha.custom-markers.1 → 0.0.48-alpha.custom-markers.2

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.
@@ -134,7 +134,7 @@ var KEPLER_GL_NAME = 'kepler.gl'; // __PACKAGE_VERSION__ is automatically inject
134
134
  // an empty string which will allow us to retrieve the latest umd version
135
135
 
136
136
  exports.KEPLER_GL_NAME = KEPLER_GL_NAME;
137
- var KEPLER_GL_VERSION = "0.0.48-alpha.custom-markers.1";
137
+ var KEPLER_GL_VERSION = "0.0.48-alpha.custom-markers.2";
138
138
  exports.KEPLER_GL_VERSION = KEPLER_GL_VERSION;
139
139
  var KEPLER_GL_WEBSITE = 'http://kepler.gl/';
140
140
  exports.KEPLER_GL_WEBSITE = KEPLER_GL_WEBSITE;
@@ -896,27 +896,47 @@ var Layer = /*#__PURE__*/function () {
896
896
 
897
897
  var mapping = new Map();
898
898
 
899
- var _iterator3 = _createForOfIteratorHelper(range),
900
- _step3;
899
+ if (Array.isArray(range)) {
900
+ var _iterator3 = _createForOfIteratorHelper(range),
901
+ _step3;
901
902
 
902
- try {
903
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
904
- var _step3$value = _step3.value,
905
- value = _step3$value.value,
906
- markerUrl = _step3$value.markerUrl;
907
-
908
- if (value === null) {
909
- unknownValue = markerUrl;
910
- } else if (markerUrl) {
911
- mapping.set(value, markerUrl);
903
+ try {
904
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
905
+ var _step3$value = _step3.value,
906
+ value = _step3$value.value,
907
+ markerUrl = _step3$value.markerUrl;
908
+
909
+ if (value === null) {
910
+ unknownValue = markerUrl;
911
+ } else if (markerUrl) {
912
+ mapping.set(value, markerUrl);
913
+ }
912
914
  }
913
- } // @ts-ignore d3 scale
915
+ } catch (err) {
916
+ _iterator3.e(err);
917
+ } finally {
918
+ _iterator3.f();
919
+ }
920
+ } else {
921
+ unknownValue = range.othersMarker;
922
+
923
+ var _iterator4 = _createForOfIteratorHelper(range.markerMap),
924
+ _step4;
925
+
926
+ try {
927
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
928
+ var _step4$value = _step4.value,
929
+ _value = _step4$value.value,
930
+ _markerUrl = _step4$value.markerUrl;
931
+ mapping.set(_value, _markerUrl);
932
+ }
933
+ } catch (err) {
934
+ _iterator4.e(err);
935
+ } finally {
936
+ _iterator4.f();
937
+ }
938
+ } // @ts-ignore d3 scale
914
939
 
915
- } catch (err) {
916
- _iterator3.e(err);
917
- } finally {
918
- _iterator3.f();
919
- }
920
940
 
921
941
  var scale = (0, _d3Scale.scaleOrdinal)().domain(Array.from(mapping.keys())).range(Array.from(mapping.values())).unknown(unknownValue);
922
942
  return scale;
@@ -1625,4 +1645,4 @@ var Layer = /*#__PURE__*/function () {
1625
1645
 
1626
1646
  var _default = Layer;
1627
1647
  exports["default"] = _default;
1628
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvYmFzZS1sYXllci5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZUNvbG9yIiwiTEFZRVJfSURfTEVOR1RIIiwiRkFMTEJBQ0tfSUNPTiIsIk1BWF9TQU1QTEVfU0laRSIsImRlZmF1bHREb21haW4iLCJkYXRhRmlsdGVyRXh0ZW5zaW9uIiwiRGF0YUZpbHRlckV4dGVuc2lvbiIsImZpbHRlclNpemUiLCJNQVhfR1BVX0ZJTFRFUlMiLCJkZWZhdWx0RGF0YUFjY2Vzc29yIiwiZGMiLCJkIiwiZGVmYXVsdEdldEZpZWxkVmFsdWUiLCJmaWVsZCIsInZhbHVlQWNjZXNzb3IiLCJPVkVSTEFZX1RZUEUiLCJkZWNrZ2wiLCJtYXBib3hnbCIsImxheWVyQ29sb3JzIiwiT2JqZWN0IiwidmFsdWVzIiwiRGF0YVZpekNvbG9ycyIsIm1hcCIsImhleFRvUmdiIiwiaW5kZXgiLCJsZW5ndGgiLCJjb2xvck1ha2VyIiwiTGF5ZXIiLCJwcm9wcyIsImlkIiwibWV0YSIsInZpc0NvbmZpZ1NldHRpbmdzIiwiY29uZmlnIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiY29sdW1ucyIsImdldExheWVyQ29sdW1ucyIsIkRlZmF1bHRMYXllckljb24iLCJ0eXBlIiwiY29sb3IiLCJwcm9wZXJ0eSIsInNjYWxlIiwiZG9tYWluIiwicmFuZ2UiLCJrZXkiLCJjaGFubmVsU2NhbGVUeXBlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJudWxsVmFsdWUiLCJOT19WQUxVRV9DT0xPUiIsImRlZmF1bHRWYWx1ZSIsInNpemUiLCJsYXQiLCJwYWlyIiwiZmllbGRQYWlyS2V5IiwibG5nIiwibGF0MCIsImxuZzAiLCJsYXQxIiwibG5nMSIsImRhdGFJZCIsInZpc2liaWxpdHlCeVpvb20iLCJtaW4iLCJaT09NX0xFVkVMX0xJTUlUUyIsIm1heCIsImxhYmVsIiwiREVGQVVMVF9MQVlFUl9MQUJFTCIsIm5leHQiLCJ2YWx1ZSIsImlzVmlzaWJsZSIsImlzQ29uZmlnQWN0aXZlIiwiaGlnaGxpZ2h0Q29sb3IiLCJERUZBVUxUX0hJR0hMSUdIVF9DT0xPUiIsImhpZGRlbiIsImNvbG9yRmllbGQiLCJjb2xvckRvbWFpbiIsImNvbG9yU2NhbGUiLCJTQ0FMRV9UWVBFUyIsInF1YW50aWxlIiwic2l6ZURvbWFpbiIsInNpemVTY2FsZSIsImxpbmVhciIsInNpemVGaWVsZCIsInZpc0NvbmZpZyIsInRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsImNvbG9yVUkiLCJERUZBVUxUX0NPTE9SX1VJIiwiY29sb3JSYW5nZSIsImFuaW1hdGlvbiIsImVuYWJsZWQiLCJ2aXN1YWxDaGFubmVscyIsIm1lYXN1cmUiLCJkaXNwbGF5TmFtZSIsIm5hbWUiLCJkZWZhdWx0TWVhc3VyZSIsInVwZGF0ZSIsImZpZWxkSWR4IiwiY29sdW1uUGFpcnMiLCJwYXJ0bmVyS2V5IiwicGFydG5lckZpZWxkUGFpcktleSIsInpvb20iLCJ6b29tT2Zmc2V0IiwiTWF0aCIsInBvdyIsImVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3IiLCJkYXRhc2V0cyIsImZpbHRlcmVkSW5kZXgiLCJvYmplY3QiLCJkYXRhQ29udGFpbmVyIiwicm93IiwiY29uZmlnVG9Db3B5Iiwic2hhbGxvd0NvcHkiLCJjb25jYXQiLCJ2Iiwibm90VG9Db3B5IiwiZm9yRWFjaCIsImdyb3VwIiwicHVzaCIsImN1cnJlbnRDb25maWciLCJjb3BpZWQiLCJjb3B5TGF5ZXJDb25maWciLCJ1cGRhdGVMYXllckNvbmZpZyIsImtleXMiLCJjaGFubmVsIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaW5jbHVkZXMiLCJsYXllclZpc0NvbmZpZ3MiLCJpdGVtIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJldmVyeSIsInAiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbHVtblZhbGlkYXRvcnMiLCJyZXF1aXJlZCIsInJlcXVpcmVkTGF5ZXJDb2x1bW5zIiwicmVkdWNlIiwiYWNjdSIsInZhbGlkYXRvciIsIm9wdGlvbmFsIiwib3B0aW9uYWxDb2x1bW5zIiwibmV3Q29uZmlnIiwibmV3VmlzQ29uZmlnIiwicHJvcCIsInByZXZpb3VzIiwiY29sb3JVSVByb3AiLCJlbnRyaWVzIiwiaXNDb2xvclJhbmdlIiwiY29sb3JzIiwidXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZSIsInVwZGF0ZUNvbG9yUmFuZ2VCeUNvbG9yVUkiLCJ1cGRhdGVDdXN0b21QYWxldHRlIiwiY29sb3JSYW5nZUNvbmZpZyIsImN1c3RvbSIsImN1c3RvbVBhbGV0dGUiLCJzaG93RHJvcGRvd24iLCJzdGVwcyIsInJldmVyc2VkIiwiQm9vbGVhbiIsInNob3VsZFVwZGF0ZSIsInNvbWUiLCJzYW1lR3JvdXAiLCJDT0xPUl9SQU5HRVMiLCJmaWx0ZXIiLCJjciIsImZpbmQiLCJjb2xvck1hcCIsInVwZGF0ZUNvbG9yTWFwIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVDYXRlZ29yeUNvbG9yTWFwIiwidXBkYXRlTnVtZXJpY0NvbG9yTWFwIiwiYXNzaWduZWRDYXRlZ29yaWVzIiwibmV3Q29sb3JNYXAiLCJzbGljZSIsImNNYXAiLCJ1bmFzc2lnbmVkQ29sb3JzIiwiY2F0ZWdvcnkiLCJjb2xvck1hcFZhbHVlcyIsImMiLCJtYXhWYWx1ZSIsInByZXZWYWx1ZSIsInN0ZXAiLCJpIiwibGF5ZXJEYXRhIiwiZGF0YSIsImhhc0FsbENvbHVtbnMiLCJoYXNMYXllckRhdGEiLCJyZW5kZXJMYXllciIsIkFycmF5IiwiaXNBcnJheSIsIk1hcCIsImsiLCJzZXQiLCJTQ0FMRV9GVU5DIiwiZnJvbSIsInVua25vd24iLCJVTktOT1dOX0NPTE9SIiwiZ2V0VmlzQ2hhbm5lbFNjYWxlIiwidW5rbm93blZhbHVlIiwibWFwcGluZyIsIm1hcmtlclVybCIsImRhdGFBY2Nlc3NvciIsImF0dHJpYnV0ZUFjY2Vzc29ycyIsImZpeGVkIiwiYWNjZXNzb3IiLCJnZXRBdHRyaWJ1dGVWYWx1ZSIsImFnZ3JlZ2F0aW9uIiwic2hvdWxkR2V0U2NhbGUiLCJhcmdzIiwiaXNGaXhlZCIsImZpZWxkQ29uZmlnIiwiYWdncmVnYXRpb25WYWx1ZSIsInNjYWxlRnVuY3Rpb24iLCJnZXRDb2xvclNjYWxlIiwiY3VzdG9tTWFya2VyIiwiZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlIiwiZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSIsIkNvbnNvbGUiLCJ3YXJuIiwib3JkaW5hbCIsImdldFBvc2l0aW9uIiwic2FtcGxlRGF0YSIsIm51bVJvd3MiLCJwb2ludHMiLCJtYXBJbmRleCIsImxhdEJvdW5kcyIsImxuZ0JvdW5kcyIsImRhdGFVcGRhdGVUcmlnZ2VycyIsInRyaWdnZXJDaGFuZ2VkIiwiX29sZERhdGFVcGRhdGVUcmlnZ2VycyIsIl9hZ2dyZWdhdGlvbiIsImdldFZhbHVlIiwiYXR0cmlidXRlVmFsdWUiLCJBTExfRklFTERfVFlQRVMiLCJ0aW1lc3RhbXAiLCJEYXRlIiwiYWxsRGF0YSIsImdldERhdGEiLCJkYXRhc2V0SWQiLCJnZXRNZXRhIiwidGwiLCJvbGRMYXllckRhdGEiLCJsYXllckRhdGFzZXQiLCJ1cGRhdGVWaXN1YWxDaGFubmVsRmllbGRzIiwiZ2V0UG9zaXRpb25BY2Nlc3NvciIsImdldERhdGFVcGRhdGVUcmlnZ2VycyIsImdldENoYW5nZWRUcmlnZ2VycyIsInVwZGF0ZUxheWVyTWV0YSIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJkYXRhc2V0Iiwib2xkRmllbGQiLCJuZXdEYXRhU2V0RmllbGQiLCJmaWVsZHMiLCJmZCIsIm5ld0ZpbHRlciIsInRhYmxlIiwiZ2V0RGF0YXNldCIsInNjYWxlVHlwZSIsInVwZGF0ZWREb21haW4iLCJjYWxjdWxhdGVMYXllckRvbWFpbiIsInZhbGlkYXRlRmllbGRUeXBlIiwidmFsaWRhdGVTY2FsZSIsInZpc3VhbENoYW5uZWwiLCJzdXBwb3J0ZWRGaWVsZFR5cGVzIiwiY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMiLCJDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMiLCJzY2FsZU9wdGlvbnMiLCJnZXRTY2FsZU9wdGlvbnMiLCJGSUVMRF9PUFRTIiwidXBkYXRlVHJpZ2dlcnMiLCJkYXRhU2V0RmllbGQiLCJmIiwiZ2V0Q29sdW1uTGF5ZXJEb21haW4iLCJvYmplY3RJbmZvIiwiaXNMYXllckhvdmVyZWQiLCJwaWNrZWQiLCJsYXllciIsIm1hcFN0YXRlIiwiZml4ZWRSYWRpdXMiLCJyYWRpdXNDaGFubmVsIiwidmMiLCJ1bmRlZmluZWQiLCJyYWRpdXMiLCJnZXRab29tRmFjdG9yIiwicmFkaXVzUmFuZ2UiLCJjZWlsIiwibm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzIiwiaW50ZXJhY3Rpb25Db25maWciLCJicnVzaGluZ1RhcmdldCIsImJydXNoIiwiYXV0b0hpZ2hsaWdodCIsImJydXNoaW5nUmFkaXVzIiwiYnJ1c2hpbmdFbmFibGVkIiwiaWR4IiwiZ3B1RmlsdGVyIiwidmlzaWJsZSIsIm1hc2tQb2x5Z29uIiwibWFza0V4dGVuc2lvblByb3BzIiwiY29vcmRpbmF0ZVN5c3RlbSIsIkNPT1JESU5BVEVfU1lTVEVNIiwiTE5HTEFUIiwicGlja2FibGUiLCJ3cmFwTG9uZ2l0dWRlIiwicGFyYW1ldGVycyIsImRlcHRoVGVzdCIsImRyYWdSb3RhdGUiLCJlbmFibGUzZCIsIm9wYWNpdHkiLCJleHRlbnNpb25zIiwiZmlsdGVyUmFuZ2UiLCJyZW5kZXJPcHRzIiwiZ2V0UGl4ZWxPZmZzZXQiLCJzaGFyZWRQcm9wcyIsInRleHRMYWJlbHMiLCJnZXRUZXh0IiwiVGV4dExheWVyIiwiY2hhcmFjdGVyU2V0IiwiZ2V0U2l6ZSIsImdldFRleHRBbmNob3IiLCJhbmNob3IiLCJnZXRBbGlnbm1lbnRCYXNlbGluZSIsImFsaWdubWVudCIsImdldENvbG9yIiwiZ2V0RmlsdGVyVmFsdWUiLCJnZXRSYWRpdXMiLCJjdXN0b21NYXJrZXJzU3RhdHVzIiwiaWNvblVybEFjY2Vzc29yIiwibWF4SWNvblNpemUiLCJnZXRNYXhNYXJrZXJTaXplIiwid2FudGVkVXJsIiwidXJsIiwid2lkdGgiLCJoZWlnaHQiLCJtYXNrIiwia2VwbGVyVGFibGUiLCJmb3VuZExheWVycyIsImRlZmF1bHRGaWVsZHMiLCJhbGxGaWVsZHMiLCJyZXF1aXJlZENvbHVtbnMiLCJwcmV2IiwicmVxdWlyZWRGaWVsZHMiLCJnZXRBbGxQb3NzaWJsZUNvbHVtblBhcmlzIiwiYWxsS2V5cyIsInBvaW50ZXJzIiwiY291bnRQZXJLZXkiLCJwYWlycyIsImluY3JlbWVudFBvaW50ZXJzIiwibmV3UGFpciIsImN1dXIiLCJwdHMiLCJjb3VudHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUVBOztBQVlBOztBQUNBOztBQUNBOztBQVFBOztBQUVBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7d0RBMkJVQSxhOztBQXpCVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGVBQWUsR0FBRyxDQUF4QixDLENBRVA7OztBQUNBLElBQU1DLGFBQWEsR0FDakIsMExBREY7QUFHQSxJQUFNQyxlQUFlLEdBQUcsSUFBeEI7QUFDQSxJQUFNQyxhQUFhLEdBQUcsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUF0QjtBQUNBLElBQU1DLG1CQUFtQixHQUFHLElBQUlDLCtCQUFKLENBQXdCO0FBQUNDLEVBQUFBLFVBQVUsRUFBRUM7QUFBYixDQUF4QixDQUE1Qjs7QUFFQSxJQUFNQyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQXNCLENBQUFDLEVBQUU7QUFBQSxTQUFJLFVBQUFDLENBQUM7QUFBQSxXQUFJQSxDQUFKO0FBQUEsR0FBTDtBQUFBLENBQTlCOztBQUNBLElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsQ0FBQ0MsS0FBRCxFQUFRRixDQUFSO0FBQUEsU0FBY0UsS0FBSyxDQUFDQyxhQUFOLENBQW9CSCxDQUFwQixDQUFkO0FBQUEsQ0FBN0I7O0FBRU8sSUFBTUksWUFBWSxHQUFHLDJCQUFVO0FBQ3BDQyxFQUFBQSxNQUFNLEVBQUUsSUFENEI7QUFFcENDLEVBQUFBLFFBQVEsRUFBRTtBQUYwQixDQUFWLENBQXJCOztBQUtBLElBQU1DLFdBQVcsR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWNDLGdDQUFkLEVBQTZCQyxHQUE3QixDQUFpQ0Msb0JBQWpDLENBQXBCOzs7QUFDUCxTQUFVdkIsYUFBVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDTXdCLFVBQUFBLEtBRE4sR0FDYyxDQURkOztBQUFBO0FBQUEsZ0JBRVNBLEtBQUssR0FBR04sV0FBVyxDQUFDTyxNQUFaLEdBQXFCLENBRnRDO0FBQUE7QUFBQTtBQUFBOztBQUdJLGNBQUlELEtBQUssS0FBS04sV0FBVyxDQUFDTyxNQUExQixFQUFrQztBQUNoQ0QsWUFBQUEsS0FBSyxHQUFHLENBQVI7QUFDRDs7QUFMTDtBQU1JLGlCQUFNTixXQUFXLENBQUNNLEtBQUssRUFBTixDQUFqQjs7QUFOSjtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBVU8sSUFBTUUsVUFBVSxHQUFHMUIsYUFBYSxFQUFoQztBQUVQOzs7O0lBQ00yQixLO0FBQ0osbUJBQXdCO0FBQUEsUUFBWkMsS0FBWSx1RUFBSixFQUFJO0FBQUE7QUFDdEIsU0FBS0MsRUFBTCxHQUFVRCxLQUFLLENBQUNDLEVBQU4sSUFBWSwyQkFBZTVCLGVBQWYsQ0FBdEIsQ0FEc0IsQ0FHdEI7O0FBQ0EsU0FBSzZCLElBQUwsR0FBWSxFQUFaLENBSnNCLENBTXRCOztBQUNBLFNBQUtDLGlCQUFMLEdBQXlCLEVBQXpCLENBUHNCLENBU3RCOztBQUNBLFNBQUtDLE1BQUwsR0FBYyxLQUFLQyxxQkFBTDtBQUNaQyxNQUFBQSxPQUFPLEVBQUUsS0FBS0MsZUFBTDtBQURHLE9BRVRQLEtBRlMsRUFBZDtBQUlEOzs7O1NBRUQsZUFBZ0I7QUFDZCxhQUFPUSw0QkFBUDtBQUNEOzs7U0FFRCxlQUFrQjtBQUNoQixhQUFPckIsWUFBWSxDQUFDQyxNQUFwQjtBQUNEOzs7U0FFRCxlQUFXO0FBQ1QsYUFBTyxJQUFQO0FBQ0Q7OztTQUVELGVBQVc7QUFDVCxhQUFPLEtBQUtxQixJQUFaO0FBQ0Q7OztTQUVELGVBQW1CO0FBQ2pCLGFBQU8sS0FBUDtBQUNEOzs7U0FFRCxlQUEyQjtBQUN6QixhQUFPLEVBQVA7QUFDRDs7O1NBRUQsZUFBc0I7QUFDcEIsYUFBTyxFQUFQO0FBQ0Q7OztTQUVELGVBQWtDO0FBQ2hDLGFBQU8sQ0FBQyxPQUFELEVBQVUsU0FBVixFQUFxQixXQUFyQixFQUFrQyxXQUFsQyxFQUErQyxRQUEvQyxDQUFQO0FBQ0Q7OztTQUVELGVBQXFCO0FBQ25CLGFBQU87QUFDTEMsUUFBQUEsS0FBSyxFQUFFO0FBQ0xDLFVBQUFBLFFBQVEsRUFBRSxPQURMO0FBRUwxQixVQUFBQSxLQUFLLEVBQUUsWUFGRjtBQUdMMkIsVUFBQUEsS0FBSyxFQUFFLFlBSEY7QUFJTEMsVUFBQUEsTUFBTSxFQUFFLGFBSkg7QUFLTEMsVUFBQUEsS0FBSyxFQUFFLFlBTEY7QUFNTEMsVUFBQUEsR0FBRyxFQUFFLE9BTkE7QUFPTEMsVUFBQUEsZ0JBQWdCLEVBQUVDLGdDQUFlUCxLQVA1QjtBQVFMUSxVQUFBQSxTQUFTLEVBQUVDLCtCQVJOO0FBU0xDLFVBQUFBLFlBQVksRUFBRSxzQkFBQWhCLE1BQU07QUFBQSxtQkFBSUEsTUFBTSxDQUFDTSxLQUFYO0FBQUE7QUFUZixTQURGO0FBWUxXLFFBQUFBLElBQUksRUFBRTtBQUNKVixVQUFBQSxRQUFRLEVBQUUsTUFETjtBQUVKMUIsVUFBQUEsS0FBSyxFQUFFLFdBRkg7QUFHSjJCLFVBQUFBLEtBQUssRUFBRSxXQUhIO0FBSUpDLFVBQUFBLE1BQU0sRUFBRSxZQUpKO0FBS0pDLFVBQUFBLEtBQUssRUFBRSxXQUxIO0FBTUpDLFVBQUFBLEdBQUcsRUFBRSxNQU5EO0FBT0pDLFVBQUFBLGdCQUFnQixFQUFFQyxnQ0FBZUksSUFQN0I7QUFRSkgsVUFBQUEsU0FBUyxFQUFFLENBUlA7QUFTSkUsVUFBQUEsWUFBWSxFQUFFO0FBVFY7QUFaRCxPQUFQO0FBd0JEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7Ozs7U0FDRSxlQUFrQjtBQUNoQixhQUFPLElBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTs7OztTQUNFLGVBQThCO0FBQzVCLGFBQU87QUFDTEUsUUFBQUEsR0FBRyxFQUFFO0FBQUNDLFVBQUFBLElBQUksRUFBRSxLQUFQO0FBQWNDLFVBQUFBLFlBQVksRUFBRTtBQUE1QixTQURBO0FBRUxDLFFBQUFBLEdBQUcsRUFBRTtBQUFDRixVQUFBQSxJQUFJLEVBQUUsS0FBUDtBQUFjQyxVQUFBQSxZQUFZLEVBQUU7QUFBNUI7QUFGQSxPQUFQO0FBSUQ7QUFFRDtBQUNGO0FBQ0E7Ozs7U0FDRSxlQUE2QjtBQUMzQixhQUFPO0FBQ0xFLFFBQUFBLElBQUksRUFBRTtBQUFDSCxVQUFBQSxJQUFJLEVBQUUsTUFBUDtBQUFlQyxVQUFBQSxZQUFZLEVBQUU7QUFBN0IsU0FERDtBQUVMRyxRQUFBQSxJQUFJLEVBQUU7QUFBQ0osVUFBQUEsSUFBSSxFQUFFLE1BQVA7QUFBZUMsVUFBQUEsWUFBWSxFQUFFO0FBQTdCLFNBRkQ7QUFHTEksUUFBQUEsSUFBSSxFQUFFO0FBQUNMLFVBQUFBLElBQUksRUFBRSxNQUFQO0FBQWVDLFVBQUFBLFlBQVksRUFBRTtBQUE3QixTQUhEO0FBSUxLLFFBQUFBLElBQUksRUFBRTtBQUFDTixVQUFBQSxJQUFJLEVBQUUsTUFBUDtBQUFlQyxVQUFBQSxZQUFZLEVBQUU7QUFBN0I7QUFKRCxPQUFQO0FBTUQ7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7U0FDRSxlQUFxQjtBQUNuQixhQUFPLElBQVA7QUFDRDtBQUNEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FnRkUsaUNBQWtDO0FBQUE7O0FBQUEsVUFBWnhCLEtBQVksdUVBQUosRUFBSTtBQUNoQyxhQUFPO0FBQ0w4QixRQUFBQSxNQUFNLEVBQUU5QixLQUFLLENBQUM4QixNQUFOLElBQWdCLElBRG5CO0FBRUxDLFFBQUFBLGdCQUFnQixFQUFFO0FBQ2hCQyxVQUFBQSxHQUFHLEVBQUUsMEJBQUFoQyxLQUFLLENBQUMrQixnQkFBTixnRkFBd0JDLEdBQXhCLEtBQStCQyxtQ0FBa0JELEdBRHRDO0FBRWhCRSxVQUFBQSxHQUFHLEVBQUUsMkJBQUFsQyxLQUFLLENBQUMrQixnQkFBTixrRkFBd0JHLEdBQXhCLEtBQStCRCxtQ0FBa0JDO0FBRnRDLFNBRmI7QUFNTEMsUUFBQUEsS0FBSyxFQUFFbkMsS0FBSyxDQUFDbUMsS0FBTixJQUFlQyxpQ0FOakI7QUFPTDFCLFFBQUFBLEtBQUssRUFBRVYsS0FBSyxDQUFDVSxLQUFOLElBQWVaLFVBQVUsQ0FBQ3VDLElBQVgsR0FBa0JDLEtBUG5DO0FBUUxoQyxRQUFBQSxPQUFPLEVBQUVOLEtBQUssQ0FBQ00sT0FBTixJQUFpQixJQVJyQjtBQVNMaUMsUUFBQUEsU0FBUyxFQUFFdkMsS0FBSyxDQUFDdUMsU0FBTixJQUFtQixLQVR6QjtBQVVMQyxRQUFBQSxjQUFjLEVBQUV4QyxLQUFLLENBQUN3QyxjQUFOLElBQXdCLEtBVm5DO0FBV0xDLFFBQUFBLGNBQWMsRUFBRXpDLEtBQUssQ0FBQ3lDLGNBQU4sSUFBd0JDLHFDQVhuQztBQVlMQyxRQUFBQSxNQUFNLEVBQUUzQyxLQUFLLENBQUMyQyxNQUFOLElBQWdCLEtBWm5CO0FBY0w7QUFDQTtBQUNBQyxRQUFBQSxVQUFVLEVBQUUsSUFoQlA7QUFpQkxDLFFBQUFBLFdBQVcsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFKLENBakJSO0FBa0JMQyxRQUFBQSxVQUFVLEVBQUVDLDZCQUFZQyxRQWxCbkI7QUFvQkw7QUFDQUMsUUFBQUEsVUFBVSxFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FyQlA7QUFzQkxDLFFBQUFBLFNBQVMsRUFBRUgsNkJBQVlJLE1BdEJsQjtBQXVCTEMsUUFBQUEsU0FBUyxFQUFFLElBdkJOO0FBeUJMQyxRQUFBQSxTQUFTLEVBQUUsRUF6Qk47QUEyQkxDLFFBQUFBLFNBQVMsRUFBRSxDQUFDQyxnQ0FBRCxDQTNCTjtBQTZCTEMsUUFBQUEsT0FBTyxFQUFFO0FBQ1A5QyxVQUFBQSxLQUFLLEVBQUUrQyw4QkFEQTtBQUVQQyxVQUFBQSxVQUFVLEVBQUVEO0FBRkwsU0E3Qko7QUFpQ0xFLFFBQUFBLFNBQVMsRUFBRTtBQUFDQyxVQUFBQSxPQUFPLEVBQUU7QUFBVjtBQWpDTixPQUFQO0FBbUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLHFDQUE0QjdDLEdBQTVCLEVBQWlDO0FBQy9CO0FBQ0EsYUFBTztBQUNMb0IsUUFBQUEsS0FBSyxFQUFFLEtBQUtoQyxpQkFBTCxDQUF1QixLQUFLMEQsY0FBTCxDQUFvQjlDLEdBQXBCLEVBQXlCRCxLQUFoRCxFQUF1RHFCLEtBRHpEO0FBRUwyQixRQUFBQSxPQUFPLEVBQUUsS0FBSzFELE1BQUwsQ0FBWSxLQUFLeUQsY0FBTCxDQUFvQjlDLEdBQXBCLEVBQXlCOUIsS0FBckMsSUFDSixLQUFLbUIsTUFBTCxDQUFZLEtBQUt5RCxjQUFMLENBQW9COUMsR0FBcEIsRUFBeUI5QixLQUFyQyxFQUE0QzhFLFdBQTVDLElBQ0QsS0FBSzNELE1BQUwsQ0FBWSxLQUFLeUQsY0FBTCxDQUFvQjlDLEdBQXBCLEVBQXlCOUIsS0FBckMsRUFBNEMrRSxJQUZ2QyxHQUdMLEtBQUtILGNBQUwsQ0FBb0I5QyxHQUFwQixFQUF5QmtEO0FBTHhCLE9BQVA7QUFPRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLHNCQUFhbEQsR0FBYixFQUFrQjlCLEtBQWxCLEVBQXlCO0FBQ3ZCO0FBQ0EsVUFBTWlGLE1BQU0sR0FBR2pGLEtBQUssR0FDaEI7QUFDRXFELFFBQUFBLEtBQUssRUFBRXJELEtBQUssQ0FBQytFLElBRGY7QUFFRUcsUUFBQUEsUUFBUSxFQUFFbEYsS0FBSyxDQUFDa0Y7QUFGbEIsT0FEZ0IsR0FLaEI7QUFBQzdCLFFBQUFBLEtBQUssRUFBRSxJQUFSO0FBQWM2QixRQUFBQSxRQUFRLEVBQUUsQ0FBQztBQUF6QixPQUxKO0FBT0EsNkNBQ0ssS0FBSy9ELE1BQUwsQ0FBWUUsT0FEakIsNENBRUdTLEdBRkgsa0NBR08sS0FBS1gsTUFBTCxDQUFZRSxPQUFaLENBQW9CUyxHQUFwQixDQUhQLEdBSU9tRCxNQUpQO0FBT0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSwyQkFBa0JuRCxHQUFsQixFQUF1QlEsSUFBdkIsRUFBNkI7QUFBQTs7QUFDM0IsVUFBSSxDQUFDLEtBQUs2QyxXQUFOLElBQXFCLHVCQUFDLEtBQUtBLFdBQU4sOENBQUMsa0JBQW1CckQsR0FBbkIsQ0FBRCxDQUF6QixFQUFtRDtBQUNqRDtBQUNBLGVBQU8sS0FBS1gsTUFBTCxDQUFZRSxPQUFuQjtBQUNEOztBQUowQix3REFNYyxLQUFLOEQsV0FObkIsdURBTWMsbUJBQW1CckQsR0FBbkIsQ0FOZDtBQUFBLFVBTWRzRCxVQU5jLHlCQU1wQjlDLElBTm9CO0FBQUEsVUFNRkMsWUFORSx5QkFNRkEsWUFORTs7QUFBQSx3REFPaUIsS0FBSzRDLFdBUHRCLHVEQU9pQixtQkFBbUJDLFVBQW5CLENBUGpCO0FBQUEsVUFPTkMsbUJBUE0seUJBT3BCOUMsWUFQb0I7O0FBUzNCLDZDQUNLLEtBQUtwQixNQUFMLENBQVlFLE9BRGpCLDhFQUVHUyxHQUZILEVBRVNRLElBQUksQ0FBQ0MsWUFBRCxDQUZiLG9EQUdHNkMsVUFISCxFQUdnQjlDLElBQUksQ0FBQytDLG1CQUFELENBSHBCO0FBS0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLDZCQUFzQztBQUFBLFVBQXZCQyxJQUF1QixRQUF2QkEsSUFBdUI7QUFBQSxpQ0FBakJDLFVBQWlCO0FBQUEsVUFBakJBLFVBQWlCLGdDQUFKLENBQUk7QUFDcEMsYUFBT0MsSUFBSSxDQUFDQyxHQUFMLENBQVMsQ0FBVCxFQUFZRCxJQUFJLENBQUN2QyxHQUFMLENBQVMsS0FBS3FDLElBQUwsR0FBWUMsVUFBckIsRUFBaUMsQ0FBakMsQ0FBWixDQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLHVDQUErQztBQUFBLFVBQXZCRCxJQUF1QixTQUF2QkEsSUFBdUI7QUFBQSxtQ0FBakJDLFVBQWlCO0FBQUEsVUFBakJBLFVBQWlCLGlDQUFKLENBQUk7QUFDN0MsYUFBTyxLQUFLcEUsTUFBTCxDQUFZaUQsU0FBWixDQUFzQnNCLHlCQUF0QixHQUNIRixJQUFJLENBQUNDLEdBQUwsQ0FBUyxDQUFULEVBQVlELElBQUksQ0FBQ3ZDLEdBQUwsQ0FBUyxJQUFJcUMsSUFBSixHQUFXQyxVQUFwQixFQUFnQyxDQUFoQyxDQUFaLENBREcsR0FFSCxDQUZKO0FBR0Q7OztXQUVELHlCQUFnQkksUUFBaEIsRUFBMEJDLGFBQTFCLEVBQXlDO0FBQ3ZDLGFBQU8sRUFBUDtBQUNEOzs7V0FFRCx1QkFBYztBQUNaLGFBQU8sRUFBUDtBQUNEOzs7V0FFRCxzQkFBYUMsTUFBYixFQUFxQkMsYUFBckIsRUFBb0M7QUFDbEMsVUFBSSxDQUFDRCxNQUFMLEVBQWE7QUFDWCxlQUFPLElBQVA7QUFDRCxPQUhpQyxDQUtsQztBQUNBOzs7QUFDQSxhQUFPQyxhQUFhLENBQUNDLEdBQWQsQ0FBa0JGLE1BQU0sQ0FBQ2xGLEtBQXpCLENBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSw2QkFBb0JxRixZQUFwQixFQUFrQzlFLGlCQUFsQyxFQUFxRDtBQUFBOztBQUNuRDtBQUNBO0FBQ0EsVUFBTStFLFdBQVcsR0FBRyxDQUFDLFlBQUQsRUFBZSxrQkFBZixFQUFtQ0MsTUFBbkMsQ0FDbEI1RixNQUFNLENBQUNDLE1BQVAsQ0FBYyxLQUFLcUUsY0FBbkIsRUFBbUNuRSxHQUFuQyxDQUF1QyxVQUFBMEYsQ0FBQztBQUFBLGVBQUlBLENBQUMsQ0FBQ25HLEtBQU47QUFBQSxPQUF4QyxDQURrQixDQUFwQixDQUhtRCxDQU9uRDs7QUFDQSxVQUFNb0csU0FBUyxHQUFHLENBQUMsV0FBRCxFQUFjRixNQUFkLENBQXFCNUYsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS3FFLGNBQW5CLEVBQW1DbkUsR0FBbkMsQ0FBdUMsVUFBQTBGLENBQUM7QUFBQSxlQUFJQSxDQUFDLENBQUN2RSxNQUFOO0FBQUEsT0FBeEMsQ0FBckIsQ0FBbEIsQ0FSbUQsQ0FTbkQ7O0FBQ0F0QixNQUFBQSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxLQUFLcUUsY0FBbkIsRUFBbUN5QixPQUFuQyxDQUEyQyxVQUFBRixDQUFDLEVBQUk7QUFDOUMsWUFDRUgsWUFBWSxDQUFDNUIsU0FBYixDQUF1QitCLENBQUMsQ0FBQ3RFLEtBQXpCLEtBQ0EsS0FBSSxDQUFDWCxpQkFBTCxDQUF1QmlGLENBQUMsQ0FBQ3RFLEtBQXpCLENBREEsSUFFQVgsaUJBQWlCLENBQUNpRixDQUFDLENBQUN0RSxLQUFILENBQWpCLENBQTJCeUUsS0FBM0IsS0FBcUMsS0FBSSxDQUFDcEYsaUJBQUwsQ0FBdUJpRixDQUFDLENBQUN0RSxLQUF6QixFQUFnQ3lFLEtBSHZFLEVBSUU7QUFDQUYsVUFBQUEsU0FBUyxDQUFDRyxJQUFWLENBQWVKLENBQUMsQ0FBQ3RFLEtBQWpCO0FBQ0Q7QUFDRixPQVJELEVBVm1ELENBb0JuRDs7QUFDQSxVQUFNMkUsYUFBYSxHQUFHLEtBQUtyRixNQUEzQjtBQUNBLFVBQU1zRixNQUFNLEdBQUcsS0FBS0MsZUFBTCxDQUFxQkYsYUFBckIsRUFBb0NSLFlBQXBDLEVBQWtEO0FBQy9EQyxRQUFBQSxXQUFXLEVBQVhBLFdBRCtEO0FBRS9ERyxRQUFBQSxTQUFTLEVBQVRBO0FBRitELE9BQWxELENBQWY7QUFJQSxXQUFLTyxpQkFBTCxDQUF1QkYsTUFBdkIsRUExQm1ELENBMkJuRDs7QUFDQW5HLE1BQUFBLE1BQU0sQ0FBQ3NHLElBQVAsQ0FBWSxLQUFLaEMsY0FBakIsRUFBaUN5QixPQUFqQyxDQUF5QyxVQUFBUSxPQUFPLEVBQUk7QUFDbEQsUUFBQSxLQUFJLENBQUNDLHFCQUFMLENBQTJCRCxPQUEzQjtBQUNELE9BRkQ7QUFHRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UseUJBQWdCTCxhQUFoQixFQUErQlIsWUFBL0IsRUFBc0Y7QUFBQTs7QUFBQSxzRkFBSixFQUFJO0FBQUEsb0NBQXhDQyxXQUF3QztBQUFBLFVBQXhDQSxXQUF3QyxrQ0FBMUIsRUFBMEI7QUFBQSxrQ0FBdEJHLFNBQXNCO0FBQUEsVUFBdEJBLFNBQXNCLGdDQUFWLEVBQVU7O0FBQ3BGLFVBQU1LLE1BQU0sR0FBRyxFQUFmO0FBQ0FuRyxNQUFBQSxNQUFNLENBQUNzRyxJQUFQLENBQVlKLGFBQVosRUFBMkJILE9BQTNCLENBQW1DLFVBQUF2RSxHQUFHLEVBQUk7QUFDeEMsWUFDRSwwQkFBYzBFLGFBQWEsQ0FBQzFFLEdBQUQsQ0FBM0IsS0FDQSwwQkFBY2tFLFlBQVksQ0FBQ2xFLEdBQUQsQ0FBMUIsQ0FEQSxJQUVBLENBQUNtRSxXQUFXLENBQUNjLFFBQVosQ0FBcUJqRixHQUFyQixDQUZELElBR0EsQ0FBQ3NFLFNBQVMsQ0FBQ1csUUFBVixDQUFtQmpGLEdBQW5CLENBSkgsRUFLRTtBQUNBO0FBQ0EyRSxVQUFBQSxNQUFNLENBQUMzRSxHQUFELENBQU4sR0FBYyxNQUFJLENBQUM0RSxlQUFMLENBQXFCRixhQUFhLENBQUMxRSxHQUFELENBQWxDLEVBQXlDa0UsWUFBWSxDQUFDbEUsR0FBRCxDQUFyRCxFQUE0RDtBQUN4RW1FLFlBQUFBLFdBQVcsRUFBWEEsV0FEd0U7QUFFeEVHLFlBQUFBLFNBQVMsRUFBVEE7QUFGd0UsV0FBNUQsQ0FBZDtBQUlELFNBWEQsTUFXTyxJQUFJLG1DQUFtQkosWUFBWSxDQUFDbEUsR0FBRCxDQUEvQixLQUF5QyxDQUFDc0UsU0FBUyxDQUFDVyxRQUFWLENBQW1CakYsR0FBbkIsQ0FBOUMsRUFBdUU7QUFDNUU7QUFDQTJFLFVBQUFBLE1BQU0sQ0FBQzNFLEdBQUQsQ0FBTixHQUFja0UsWUFBWSxDQUFDbEUsR0FBRCxDQUExQjtBQUNELFNBSE0sTUFHQTtBQUNMO0FBQ0EyRSxVQUFBQSxNQUFNLENBQUMzRSxHQUFELENBQU4sR0FBYzBFLGFBQWEsQ0FBQzFFLEdBQUQsQ0FBM0I7QUFDRDtBQUNGLE9BbkJEO0FBcUJBLGFBQU8yRSxNQUFQO0FBQ0Q7OztXQUVELDJCQUFrQk8sZUFBbEIsRUFBbUM7QUFBQTs7QUFDakMxRyxNQUFBQSxNQUFNLENBQUNzRyxJQUFQLENBQVlJLGVBQVosRUFBNkJYLE9BQTdCLENBQXFDLFVBQUFZLElBQUksRUFBSTtBQUMzQyxZQUFJLE9BQU9BLElBQVAsS0FBZ0IsUUFBaEIsSUFBNEJDLGdDQUFrQkYsZUFBZSxDQUFDQyxJQUFELENBQWpDLENBQWhDLEVBQTBFO0FBQ3hFO0FBQ0EsVUFBQSxNQUFJLENBQUM5RixNQUFMLENBQVlpRCxTQUFaLENBQXNCNkMsSUFBdEIsSUFBOEJDLGdDQUFrQkYsZUFBZSxDQUFDQyxJQUFELENBQWpDLEVBQXlDOUUsWUFBdkU7QUFDQSxVQUFBLE1BQUksQ0FBQ2pCLGlCQUFMLENBQXVCK0YsSUFBdkIsSUFBK0JDLGdDQUFrQkYsZUFBZSxDQUFDQyxJQUFELENBQWpDLENBQS9CO0FBQ0QsU0FKRCxNQUlPLElBQUksQ0FBQyxNQUFELEVBQVMsY0FBVCxFQUF5QkUsS0FBekIsQ0FBK0IsVUFBQUMsQ0FBQztBQUFBLGlCQUFJSixlQUFlLENBQUNDLElBQUQsQ0FBZixDQUFzQkksY0FBdEIsQ0FBcUNELENBQXJDLENBQUo7QUFBQSxTQUFoQyxDQUFKLEVBQWtGO0FBQ3ZGO0FBQ0E7QUFDQSxVQUFBLE1BQUksQ0FBQ2pHLE1BQUwsQ0FBWWlELFNBQVosQ0FBc0I2QyxJQUF0QixJQUE4QkQsZUFBZSxDQUFDQyxJQUFELENBQWYsQ0FBc0I5RSxZQUFwRDtBQUNBLFVBQUEsTUFBSSxDQUFDakIsaUJBQUwsQ0FBdUIrRixJQUF2QixJQUErQkQsZUFBZSxDQUFDQyxJQUFELENBQTlDO0FBQ0Q7QUFDRixPQVhEO0FBWUQ7OztXQUVELDJCQUFrQjtBQUNoQixVQUFNSyxnQkFBZ0IsR0FBRyxLQUFLQSxnQkFBTCxJQUF5QixFQUFsRDtBQUNBLFVBQU1DLFFBQVEsR0FBRyxLQUFLQyxvQkFBTCxDQUEwQkMsTUFBMUIsQ0FDZixVQUFDQyxJQUFELEVBQU81RixHQUFQO0FBQUEsK0NBQ0s0RixJQURMLDRDQUVHNUYsR0FGSCxFQUVTd0YsZ0JBQWdCLENBQUN4RixHQUFELENBQWhCLEdBQ0g7QUFBQ3VCLFVBQUFBLEtBQUssRUFBRSxJQUFSO0FBQWM2QixVQUFBQSxRQUFRLEVBQUUsQ0FBQyxDQUF6QjtBQUE0QnlDLFVBQUFBLFNBQVMsRUFBRUwsZ0JBQWdCLENBQUN4RixHQUFEO0FBQXZELFNBREcsR0FFSDtBQUFDdUIsVUFBQUEsS0FBSyxFQUFFLElBQVI7QUFBYzZCLFVBQUFBLFFBQVEsRUFBRSxDQUFDO0FBQXpCLFNBSk47QUFBQSxPQURlLEVBT2YsRUFQZSxDQUFqQjtBQVNBLFVBQU0wQyxRQUFRLEdBQUcsS0FBS0MsZUFBTCxDQUFxQkosTUFBckIsQ0FDZixVQUFDQyxJQUFELEVBQU81RixHQUFQO0FBQUEsK0NBQ0s0RixJQURMLDRDQUVHNUYsR0FGSCxFQUVTO0FBQUN1QixVQUFBQSxLQUFLLEVBQUUsSUFBUjtBQUFjNkIsVUFBQUEsUUFBUSxFQUFFLENBQUMsQ0FBekI7QUFBNEIwQyxVQUFBQSxRQUFRLEVBQUU7QUFBdEMsU0FGVDtBQUFBLE9BRGUsRUFLZixFQUxlLENBQWpCO0FBUUEsNkNBQVdMLFFBQVgsR0FBd0JLLFFBQXhCO0FBQ0Q7OztXQUVELDJCQUFrQkUsU0FBbEIsRUFBNkI7QUFDM0IsV0FBSzNHLE1BQUwsbUNBQWtCLEtBQUtBLE1BQXZCLEdBQWtDMkcsU0FBbEM7QUFDQSxhQUFPLElBQVA7QUFDRDs7O1dBRUQsOEJBQXFCQyxZQUFyQixFQUFtQztBQUNqQyxXQUFLNUcsTUFBTCxDQUFZaUQsU0FBWixtQ0FBNEIsS0FBS2pELE1BQUwsQ0FBWWlELFNBQXhDLEdBQXNEMkQsWUFBdEQ7QUFDQSxhQUFPLElBQVA7QUFDRDs7O1dBRUQsNEJBQW1CQyxJQUFuQixFQUF5QkYsU0FBekIsRUFBb0M7QUFBQSx5QkFDSyxLQUFLM0csTUFEVjtBQUFBLFVBQ2xCOEcsUUFEa0IsZ0JBQzNCMUQsT0FEMkI7QUFBQSxVQUNSSCxTQURRLGdCQUNSQSxTQURROztBQUdsQyxVQUFJLENBQUMsMEJBQWMwRCxTQUFkLENBQUQsSUFBNkIsT0FBT0UsSUFBUCxLQUFnQixRQUFqRCxFQUEyRDtBQUN6RCxlQUFPLElBQVA7QUFDRDs7QUFFRCxVQUFNRSxXQUFXLEdBQUc1SCxNQUFNLENBQUM2SCxPQUFQLENBQWVMLFNBQWYsRUFBMEJMLE1BQTFCLENBQWlDLFVBQUNDLElBQUQsU0FBd0I7QUFBQTtBQUFBLFlBQWhCNUYsR0FBZ0I7QUFBQSxZQUFYdUIsS0FBVzs7QUFDM0UsK0NBQ0txRSxJQURMLDRDQUVHNUYsR0FGSCxFQUVTLDBCQUFjNEYsSUFBSSxDQUFDNUYsR0FBRCxDQUFsQixLQUE0QiwwQkFBY3VCLEtBQWQsQ0FBNUIsbUNBQXVEcUUsSUFBSSxDQUFDNUYsR0FBRCxDQUEzRCxHQUFxRXVCLEtBQXJFLElBQThFQSxLQUZ2RjtBQUlELE9BTG1CLEVBS2pCNEUsUUFBUSxDQUFDRCxJQUFELENBQVIsSUFBa0J4RCw4QkFMRCxDQUFwQjs7QUFPQSxVQUFNRCxPQUFPLG1DQUNSMEQsUUFEUSw0Q0FFVkQsSUFGVSxFQUVIRSxXQUZHLEVBQWI7O0FBS0EsV0FBS3ZCLGlCQUFMLENBQXVCO0FBQUNwQyxRQUFBQSxPQUFPLEVBQVBBO0FBQUQsT0FBdkIsRUFuQmtDLENBb0JsQzs7QUFDQSxVQUFNNkQsWUFBWSxHQUFHaEUsU0FBUyxDQUFDNEQsSUFBRCxDQUFULElBQW1CNUQsU0FBUyxDQUFDNEQsSUFBRCxDQUFULENBQWdCSyxNQUF4RDs7QUFFQSxVQUFJRCxZQUFKLEVBQWtCO0FBQ2hCLGFBQUtFLHlCQUFMLENBQStCUixTQUEvQixFQUEwQ0UsSUFBMUM7QUFDQSxhQUFLTyx5QkFBTCxDQUErQlQsU0FBL0IsRUFBMENHLFFBQTFDLEVBQW9ERCxJQUFwRDtBQUNBLGFBQUtRLG1CQUFMLENBQXlCVixTQUF6QixFQUFvQ0csUUFBcEMsRUFBOENELElBQTlDO0FBQ0Q7O0FBRUQsYUFBTyxJQUFQO0FBQ0Q7OztXQUVELDZCQUFvQkYsU0FBcEIsRUFBK0JHLFFBQS9CLEVBQXlDRCxJQUF6QyxFQUErQztBQUM3QyxVQUFJLENBQUNGLFNBQVMsQ0FBQ1csZ0JBQVgsSUFBK0IsQ0FBQ1gsU0FBUyxDQUFDVyxnQkFBVixDQUEyQkMsTUFBL0QsRUFBdUU7QUFDckU7QUFDRDs7QUFINEMsMEJBS2hCLEtBQUt2SCxNQUxXO0FBQUEsVUFLdENvRCxPQUxzQyxpQkFLdENBLE9BTHNDO0FBQUEsVUFLN0JILFNBTDZCLGlCQUs3QkEsU0FMNkI7QUFPN0MsVUFBSSxDQUFDQSxTQUFTLENBQUM0RCxJQUFELENBQWQsRUFBc0I7QUFQdUIsVUFRdENLLE1BUnNDLEdBUTVCakUsU0FBUyxDQUFDNEQsSUFBRCxDQVJtQixDQVF0Q0ssTUFSc0M7O0FBUzdDLFVBQU1NLGFBQWEsbUNBQ2RwRSxPQUFPLENBQUN5RCxJQUFELENBQVAsQ0FBY1csYUFEQTtBQUVqQjVELFFBQUFBLElBQUksRUFBRSxnQkFGVztBQUdqQnNELFFBQUFBLE1BQU0sc0NBQU1BLE1BQU47QUFIVyxRQUFuQjs7QUFLQSxXQUFLMUIsaUJBQUwsQ0FBdUI7QUFDckJwQyxRQUFBQSxPQUFPLGtDQUNGQSxPQURFLDRDQUVKeUQsSUFGSSxrQ0FHQXpELE9BQU8sQ0FBQ3lELElBQUQsQ0FIUDtBQUlIVyxVQUFBQSxhQUFhLEVBQWJBO0FBSkc7QUFEYyxPQUF2QjtBQVNEO0FBQ0Q7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UsbUNBQTBCYixTQUExQixFQUFxQ0UsSUFBckMsRUFBMkM7QUFDekMsVUFBSSxPQUFPRixTQUFTLENBQUNjLFlBQWpCLEtBQWtDLFFBQXRDLEVBQWdEO0FBRFAsMEJBR1osS0FBS3pILE1BSE87QUFBQSxVQUdsQ29ELE9BSGtDLGlCQUdsQ0EsT0FIa0M7QUFBQSxVQUd6QkgsU0FIeUIsaUJBR3pCQSxTQUh5QjtBQUl6QyxXQUFLdUMsaUJBQUwsQ0FBdUI7QUFDckJwQyxRQUFBQSxPQUFPLGtDQUNGQSxPQURFLDRDQUVKeUQsSUFGSSxrQ0FHQXpELE9BQU8sQ0FBQ3lELElBQUQsQ0FIUDtBQUlIUyxVQUFBQSxnQkFBZ0Isa0NBQ1hsRSxPQUFPLENBQUN5RCxJQUFELENBQVAsQ0FBY1MsZ0JBREg7QUFFZGpILFlBQUFBLElBQUksRUFBRTRDLFNBQVMsQ0FBQzRELElBQUQsQ0FBVCxDQUFnQnhHLElBRlI7QUFHZHFILFlBQUFBLEtBQUssRUFBRXpFLFNBQVMsQ0FBQzRELElBQUQsQ0FBVCxDQUFnQkssTUFBaEIsQ0FBdUJ6SCxNQUhoQjtBQUlka0ksWUFBQUEsUUFBUSxFQUFFQyxPQUFPLENBQUMzRSxTQUFTLENBQUM0RCxJQUFELENBQVQsQ0FBZ0JjLFFBQWpCO0FBSkg7QUFKYjtBQURjLE9BQXZCO0FBY0QsSyxDQUVEOzs7O1dBQ0EsbUNBQTBCaEIsU0FBMUIsRUFBcUNHLFFBQXJDLEVBQStDRCxJQUEvQyxFQUFxRDtBQUNuRDtBQUNBLFVBQU1nQixZQUFZLEdBQ2hCbEIsU0FBUyxDQUFDVyxnQkFBVixJQUNBLENBQUMsVUFBRCxFQUFhLE9BQWIsRUFBc0JRLElBQXRCLENBQ0UsVUFBQW5ILEdBQUc7QUFBQSxlQUNEZ0csU0FBUyxDQUFDVyxnQkFBVixDQUEyQnBCLGNBQTNCLENBQTBDdkYsR0FBMUMsS0FDQWdHLFNBQVMsQ0FBQ1csZ0JBQVYsQ0FBMkIzRyxHQUEzQixNQUNFLENBQUNtRyxRQUFRLENBQUNELElBQUQsQ0FBUixJQUFrQnhELDhCQUFuQixFQUFxQ2lFLGdCQUFyQyxDQUFzRDNHLEdBQXRELENBSEQ7QUFBQSxPQURMLENBRkY7QUFRQSxVQUFJLENBQUNrSCxZQUFMLEVBQW1CO0FBVmdDLDBCQVl0QixLQUFLN0gsTUFaaUI7QUFBQSxVQVk1Q29ELE9BWjRDLGlCQVk1Q0EsT0FaNEM7QUFBQSxVQVluQ0gsU0FabUMsaUJBWW5DQSxTQVptQztBQUFBLGtDQWF6QkcsT0FBTyxDQUFDeUQsSUFBRCxDQUFQLENBQWNTLGdCQWJXO0FBQUEsVUFhNUNJLEtBYjRDLHlCQWE1Q0EsS0FiNEM7QUFBQSxVQWFyQ0MsUUFicUMseUJBYXJDQSxRQWJxQztBQWNuRCxVQUFNckUsVUFBVSxHQUFHTCxTQUFTLENBQUM0RCxJQUFELENBQTVCLENBZG1ELENBZW5EOztBQUNBLFVBQUkvQyxNQUFKOztBQUNBLFVBQUk2QyxTQUFTLENBQUNXLGdCQUFWLENBQTJCcEIsY0FBM0IsQ0FBMEMsT0FBMUMsQ0FBSixFQUF3RDtBQUN0RCxZQUFNZixLQUFLLEdBQUcscUNBQW9CN0IsVUFBcEIsQ0FBZDs7QUFFQSxZQUFJNkIsS0FBSixFQUFXO0FBQ1QsY0FBTTRDLFNBQVMsR0FBR0MsMEJBQWFDLE1BQWIsQ0FBb0IsVUFBQUMsRUFBRTtBQUFBLG1CQUFJLHFDQUFvQkEsRUFBcEIsTUFBNEIvQyxLQUFoQztBQUFBLFdBQXRCLENBQWxCOztBQUVBckIsVUFBQUEsTUFBTSxHQUFHaUUsU0FBUyxDQUFDSSxJQUFWLENBQWUsVUFBQUQsRUFBRTtBQUFBLG1CQUFJQSxFQUFFLENBQUNoQixNQUFILENBQVV6SCxNQUFWLEtBQXFCaUksS0FBekI7QUFBQSxXQUFqQixDQUFUOztBQUVBLGNBQUk1RCxNQUFNLElBQUlSLFVBQVUsQ0FBQ3FFLFFBQXpCLEVBQW1DO0FBQ2pDN0QsWUFBQUEsTUFBTSxHQUFHLG1DQUFrQixJQUFsQixFQUF3QkEsTUFBeEIsQ0FBVDtBQUNEOztBQUVELGNBQUlBLE1BQU0sSUFBSVIsVUFBVSxDQUFDOEUsUUFBekIsRUFBbUM7QUFDakN0RSxZQUFBQSxNQUFNLEdBQUcsS0FBS3VFLGNBQUwsQ0FBb0J4QixJQUFwQixFQUEwQnZELFVBQVUsQ0FBQzhFLFFBQXJDLEVBQStDdEUsTUFBL0MsQ0FBVDtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxVQUFJNkMsU0FBUyxDQUFDVyxnQkFBVixDQUEyQnBCLGNBQTNCLENBQTBDLFVBQTFDLENBQUosRUFBMkQ7QUFDekRwQyxRQUFBQSxNQUFNLEdBQUcsbUNBQWtCNkQsUUFBbEIsRUFBNEI3RCxNQUFNLElBQUlSLFVBQXRDLENBQVQ7QUFDRDs7QUFFRCxVQUFJUSxNQUFKLEVBQVk7QUFDVixhQUFLd0Usb0JBQUwsc0NBQTRCekIsSUFBNUIsRUFBbUMvQyxNQUFuQztBQUNEO0FBQ0Y7OztXQUVELHdCQUFlK0MsSUFBZixFQUFxQnVCLFFBQXJCLEVBQStCOUUsVUFBL0IsRUFBMkM7QUFBQTs7QUFDekM7QUFEeUMsZ0NBRWpCbkUsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS3FFLGNBQW5CLEVBQW1DMEUsSUFBbkMsQ0FBd0MsVUFBQWpHLEtBQUs7QUFBQSxlQUFJQSxLQUFLLENBQUN4QixLQUFOLEtBQWdCbUcsSUFBcEI7QUFBQSxPQUE3QyxDQUZpQjtBQUFBLFVBRWxDaEksS0FGa0MsdUJBRWxDQSxLQUZrQztBQUFBLFVBRTNCNEIsTUFGMkIsdUJBRTNCQSxNQUYyQjs7QUFHekMsVUFBTUosSUFBSSx5QkFBRyxLQUFLTCxNQUFMLENBQVluQixLQUFaLENBQUgsdURBQUcsbUJBQW9Cd0IsSUFBakM7O0FBRUEsVUFBSUEsSUFBSSxLQUFLLFFBQVQsSUFBcUJBLElBQUksS0FBSyxTQUE5QixJQUEyQ0EsSUFBSSxLQUFLLE1BQXhELEVBQWdFO0FBQzlELGVBQU8sS0FBS2tJLHNCQUFMLENBQTRCSCxRQUE1QixFQUFzQyxLQUFLcEksTUFBTCxDQUFZUyxNQUFaLENBQXRDLEVBQTJENkMsVUFBM0QsQ0FBUDtBQUNELE9BUHdDLENBU3pDOzs7QUFDQSxhQUFPLEtBQUtrRixxQkFBTCxDQUEyQkosUUFBM0IsRUFBcUMsS0FBS3BJLE1BQUwsQ0FBWVMsTUFBWixDQUFyQyxFQUEwRDZDLFVBQTFELENBQVA7QUFDRDs7O1dBRUQsZ0NBQXVCOEUsUUFBdkIsRUFBaUMzSCxNQUFqQyxFQUF5QzZDLFVBQXpDLEVBQXFEO0FBQ25ELFVBQU00RCxNQUFNLEdBQUc1RCxVQUFVLENBQUM0RCxNQUExQjtBQUNBLFVBQU11QixrQkFBa0IsR0FBRyxFQUEzQjtBQUNBLFVBQU1DLFdBQVcsR0FBR04sUUFBUSxDQUFDTyxLQUFULENBQWUsQ0FBZixFQUFrQnpCLE1BQU0sQ0FBQ3pILE1BQXpCLEVBQWlDSCxHQUFqQyxDQUFxQyxVQUFDc0osSUFBRCxFQUFPcEosS0FBUCxFQUFpQjtBQUN4RWlKLFFBQUFBLGtCQUFrQixDQUFDckQsSUFBbkIsQ0FBd0J3RCxJQUFJLENBQUMsQ0FBRCxDQUE1QjtBQUNBLGVBQU8sQ0FBQ0EsSUFBSSxDQUFDLENBQUQsQ0FBTCxFQUFVMUIsTUFBTSxDQUFDMUgsS0FBRCxDQUFoQixDQUFQO0FBQ0QsT0FIbUIsQ0FBcEI7QUFJQSxVQUFNcUosZ0JBQWdCLEdBQUczQixNQUFNLENBQUN5QixLQUFQLENBQWFELFdBQVcsQ0FBQ2pKLE1BQXpCLEVBQWlDeUgsTUFBTSxDQUFDekgsTUFBeEMsQ0FBekI7O0FBUG1ELGlEQVMvQm9KLGdCQVQrQjtBQUFBOztBQUFBO0FBU25ELDREQUFzQztBQUFBLGNBQTNCdkksS0FBMkI7QUFDcEMsY0FBTXdJLFFBQVEsR0FBR3JJLE1BQU0sQ0FBQzBILElBQVAsQ0FBWSxVQUFBeEosQ0FBQztBQUFBLG1CQUFJLENBQUM4SixrQkFBa0IsQ0FBQzdDLFFBQW5CLENBQTRCakgsQ0FBNUIsQ0FBTDtBQUFBLFdBQWIsQ0FBakI7O0FBQ0EsY0FBSSxDQUFDbUssUUFBTCxFQUFlO0FBQ2I7QUFDRDs7QUFDREwsVUFBQUEsa0JBQWtCLENBQUNyRCxJQUFuQixDQUF3QjBELFFBQXhCO0FBQ0FKLFVBQUFBLFdBQVcsQ0FBQ3RELElBQVosQ0FBaUIsQ0FBQzBELFFBQUQsRUFBV3hJLEtBQVgsQ0FBakI7QUFDRDtBQWhCa0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFpQm5ELDZDQUNLZ0QsVUFETDtBQUVFOEUsUUFBQUEsUUFBUSxFQUFFTTtBQUZaO0FBSUQ7OztXQUVELCtCQUFzQk4sUUFBdEIsRUFBZ0MzSCxNQUFoQyxFQUF3Q3FELE1BQXhDLEVBQWdEO0FBQzlDLFVBQU1vRCxNQUFNLEdBQUdwRCxNQUFNLENBQUNvRCxNQUF0QjtBQUNBLFVBQUl3QixXQUFXLEdBQUdOLFFBQVEsQ0FBQ08sS0FBVCxDQUFlLENBQWYsRUFBa0J6QixNQUFNLENBQUN6SCxNQUF6QixDQUFsQjtBQUVBaUosTUFBQUEsV0FBVyxHQUFHQSxXQUFXLENBQUNwSixHQUFaLENBQWdCLFVBQUNzSixJQUFELEVBQU9wSixLQUFQLEVBQWlCO0FBQzdDLFlBQU0wQyxLQUFLLEdBQUcxQyxLQUFLLEtBQUtrSixXQUFXLENBQUNqSixNQUFaLEdBQXFCLENBQS9CLEdBQW1DLElBQW5DLEdBQTBDbUosSUFBSSxDQUFDLENBQUQsQ0FBNUQ7QUFDQSxlQUFPLENBQUMxRyxLQUFELEVBQVFnRixNQUFNLENBQUMxSCxLQUFELENBQWQsQ0FBUDtBQUNELE9BSGEsQ0FBZDtBQUlBLFVBQU1xSixnQkFBZ0IsR0FBRzNCLE1BQU0sQ0FBQ3lCLEtBQVAsQ0FBYUQsV0FBVyxDQUFDakosTUFBekIsRUFBaUN5SCxNQUFNLENBQUN6SCxNQUF4QyxDQUF6Qjs7QUFFQSxVQUFJb0osZ0JBQWdCLENBQUNwSixNQUFqQixHQUEwQixDQUE5QixFQUFpQztBQUMvQixZQUFNc0osY0FBYyxHQUFHWCxRQUFRLENBQUM5SSxHQUFULENBQWEsVUFBQTBKLENBQUM7QUFBQSxpQkFBSUEsQ0FBQyxDQUFDLENBQUQsQ0FBTDtBQUFBLFNBQWQsRUFBd0JmLE1BQXhCLENBQStCLFVBQUFlLENBQUM7QUFBQSxpQkFBSSxPQUFPQSxDQUFQLEtBQWEsUUFBakI7QUFBQSxTQUFoQyxDQUF2QjtBQUNBLFlBQU1DLFFBQVEsR0FBRzVFLElBQUksQ0FBQ3ZDLEdBQUwsT0FBQXVDLElBQUksc0NBQVEwRSxjQUFSLFVBQXdCdEksTUFBTSxDQUFDQSxNQUFNLENBQUNoQixNQUFQLEdBQWdCLENBQWpCLENBQTlCLEdBQXJCO0FBQ0EsWUFBTXlKLFNBQVMsR0FBR1IsV0FBVyxDQUFDQSxXQUFXLENBQUNqSixNQUFaLEdBQXFCLENBQXRCLENBQVgsQ0FBb0MsQ0FBcEMsQ0FBbEI7QUFDQSxZQUFNMEosSUFBSSxHQUFHLENBQUNGLFFBQVEsR0FBR0MsU0FBWixLQUEwQkwsZ0JBQWdCLENBQUNwSixNQUFqQixHQUEwQixDQUFwRCxDQUFiO0FBQ0FpSixRQUFBQSxXQUFXLENBQUNBLFdBQVcsQ0FBQ2pKLE1BQVosR0FBcUIsQ0FBdEIsQ0FBWCxDQUFvQyxDQUFwQyxJQUF5Q3lKLFNBQVMsR0FBR0MsSUFBckQ7O0FBTCtCLG9EQU9OTixnQkFBZ0IsQ0FBQzdCLE9BQWpCLEVBUE07QUFBQTs7QUFBQTtBQU8vQixpRUFBcUQ7QUFBQTtBQUFBLGdCQUF6Q29DLENBQXlDO0FBQUEsZ0JBQXRDOUksS0FBc0M7O0FBQ25ELGdCQUFNNEIsS0FBSyxHQUFHa0gsQ0FBQyxLQUFLUCxnQkFBZ0IsQ0FBQ3BKLE1BQWpCLEdBQTBCLENBQWhDLEdBQW9DLElBQXBDLEdBQTJDeUosU0FBUyxHQUFJQyxJQUFJLElBQUlDLENBQUMsR0FBRyxDQUFSLENBQTFFO0FBQ0FWLFlBQUFBLFdBQVcsQ0FBQ3RELElBQVosQ0FBaUIsQ0FBQ2xELEtBQUQsRUFBUTVCLEtBQVIsQ0FBakI7QUFDRDtBQVY4QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV2hDOztBQUNELDZDQUNLd0QsTUFETDtBQUVFc0UsUUFBQUEsUUFBUSxFQUFFTTtBQUZaO0FBSUQ7QUFFRDtBQUNGO0FBQ0E7QUFDQTs7OztXQUNFLHlCQUFnQjtBQUFBLFVBQ1B4SSxPQURPLEdBQ0ksS0FBS0YsTUFEVCxDQUNQRSxPQURPO0FBRWQsYUFDR0EsT0FBTyxJQUNSZixNQUFNLENBQUNDLE1BQVAsQ0FBY2MsT0FBZCxFQUF1QjhGLEtBQXZCLENBQTZCLFVBQUFoQixDQUFDLEVBQUk7QUFDaEMsZUFBTzRDLE9BQU8sQ0FBQzVDLENBQUMsQ0FBQ3lCLFFBQUYsSUFBZXpCLENBQUMsQ0FBQzlDLEtBQUYsSUFBVzhDLENBQUMsQ0FBQ2pCLFFBQUYsR0FBYSxDQUFDLENBQXpDLENBQWQ7QUFDRCxPQUZELENBRkY7QUFNRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLHNCQUFhc0YsU0FBYixFQUF3QjtBQUN0QixVQUFJLENBQUNBLFNBQUwsRUFBZ0I7QUFDZCxlQUFPLEtBQVA7QUFDRDs7QUFDRCxhQUFPekIsT0FBTyxDQUFDeUIsU0FBUyxDQUFDQyxJQUFWLElBQWtCRCxTQUFTLENBQUNDLElBQVYsQ0FBZTdKLE1BQWxDLENBQWQ7QUFDRDs7O1dBRUQseUJBQWdCO0FBQ2QsYUFBTyxLQUFLWSxJQUFMLElBQWEsS0FBS2tKLGFBQUwsRUFBcEI7QUFDRDs7O1dBRUQsMkJBQWtCRCxJQUFsQixFQUF3QjtBQUN0QixhQUNHLEtBQUtqSixJQUFMLElBQ0QsS0FBS2tKLGFBQUwsRUFEQyxJQUVELEtBQUtDLFlBQUwsQ0FBa0JGLElBQWxCLENBRkMsSUFHRCxPQUFPLEtBQUtHLFdBQVosS0FBNEIsVUFKOUI7QUFNRDs7O1dBRUQsdUJBQWMvRyxVQUFkLEVBQTBCRCxXQUExQixFQUF1Q2EsVUFBdkMsRUFBbUQ7QUFDakQsVUFBSW9HLEtBQUssQ0FBQ0MsT0FBTixDQUFjckcsVUFBVSxDQUFDOEUsUUFBekIsQ0FBSixFQUF3QztBQUN0QyxZQUFNUSxJQUFJLEdBQUcsSUFBSWdCLEdBQUosRUFBYjtBQUNBdEcsUUFBQUEsVUFBVSxDQUFDOEUsUUFBWCxDQUFvQmxELE9BQXBCLENBQTRCLGlCQUFZO0FBQUE7QUFBQSxjQUFWMkUsQ0FBVTtBQUFBLGNBQVA3RSxDQUFPOztBQUN0QzRELFVBQUFBLElBQUksQ0FBQ2tCLEdBQUwsQ0FBU0QsQ0FBVCxFQUFZLE9BQU83RSxDQUFQLEtBQWEsUUFBYixHQUF3QiwwQkFBU0EsQ0FBVCxDQUF4QixHQUFzQ0EsQ0FBbEQ7QUFDRCxTQUZELEVBRnNDLENBTXRDOztBQUNBLFlBQU14RSxLQUFLLEdBQUd1Siw0QkFBV3JILFVBQVgsSUFDWGpDLE1BRFcsQ0FDSmlKLEtBQUssQ0FBQ00sSUFBTixDQUFXcEIsSUFBSSxDQUFDbkQsSUFBTCxFQUFYLENBREksRUFFWC9FLEtBRlcsQ0FFTGdKLEtBQUssQ0FBQ00sSUFBTixDQUFXcEIsSUFBSSxDQUFDeEosTUFBTCxFQUFYLENBRkssRUFHWDZLLE9BSFcsQ0FHSEMsOEJBSEcsQ0FBZDs7QUFJQSxlQUFPMUosS0FBUDtBQUNEOztBQUVELGFBQU8sS0FBSzJKLGtCQUFMLENBQXdCekgsVUFBeEIsRUFBb0NELFdBQXBDLEVBQWlEYSxVQUFVLENBQUM0RCxNQUFYLENBQWtCNUgsR0FBbEIsQ0FBc0JDLG9CQUF0QixDQUFqRCxDQUFQO0FBQ0Q7OztXQUVELCtCQUFzQm1CLEtBQXRCLEVBQTZCO0FBQzNCLFVBQUkwSixZQUFZLEdBQUdsTSxhQUFuQjs7QUFDQSxVQUFJLENBQUN3QyxLQUFMLEVBQVk7QUFDVixlQUFPO0FBQUEsaUJBQU0wSixZQUFOO0FBQUEsU0FBUDtBQUNEOztBQUVELFVBQU1DLE9BQU8sR0FBRyxJQUFJVCxHQUFKLEVBQWhCOztBQU4yQixrREFRTWxKLEtBUk47QUFBQTs7QUFBQTtBQVEzQiwrREFBd0M7QUFBQTtBQUFBLGNBQTVCd0IsS0FBNEIsZ0JBQTVCQSxLQUE0QjtBQUFBLGNBQXJCb0ksU0FBcUIsZ0JBQXJCQSxTQUFxQjs7QUFDdEMsY0FBSXBJLEtBQUssS0FBSyxJQUFkLEVBQW9CO0FBQ2xCa0ksWUFBQUEsWUFBWSxHQUFHRSxTQUFmO0FBQ0QsV0FGRCxNQUVPLElBQUlBLFNBQUosRUFBZTtBQUNwQkQsWUFBQUEsT0FBTyxDQUFDUCxHQUFSLENBQVk1SCxLQUFaLEVBQW1Cb0ksU0FBbkI7QUFDRDtBQUNGLFNBZDBCLENBZ0IzQjs7QUFoQjJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBaUIzQixVQUFNOUosS0FBSyxHQUFHLDZCQUNYQyxNQURXLENBQ0ppSixLQUFLLENBQUNNLElBQU4sQ0FBV0ssT0FBTyxDQUFDNUUsSUFBUixFQUFYLENBREksRUFFWC9FLEtBRlcsQ0FFTGdKLEtBQUssQ0FBQ00sSUFBTixDQUFXSyxPQUFPLENBQUNqTCxNQUFSLEVBQVgsQ0FGSyxFQUdYNkssT0FIVyxDQUdIRyxZQUhHLENBQWQ7QUFJQSxhQUFPNUosS0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSxzQ0FBMkU7QUFBQTs7QUFBQSxxQ0FBcEQrSixZQUFvRDtBQUFBLFVBQXBEQSxZQUFvRCxtQ0FBckM5TCxtQkFBcUM7QUFBQSxVQUFoQmtHLGFBQWdCLFNBQWhCQSxhQUFnQjtBQUN6RSxVQUFNNkYsa0JBQWtCLEdBQUcsRUFBM0I7QUFFQXJMLE1BQUFBLE1BQU0sQ0FBQ3NHLElBQVAsQ0FBWSxLQUFLaEMsY0FBakIsRUFBaUN5QixPQUFqQyxDQUF5QyxVQUFBUSxPQUFPLEVBQUk7QUFBQSxvQ0FhOUMsTUFBSSxDQUFDakMsY0FBTCxDQUFvQmlDLE9BQXBCLENBYjhDO0FBQUEsWUFFaEQ3RyxLQUZnRCx5QkFFaERBLEtBRmdEO0FBQUEsWUFHaEQ0TCxLQUhnRCx5QkFHaERBLEtBSGdEO0FBQUEsWUFJaERqSyxLQUpnRCx5QkFJaERBLEtBSmdEO0FBQUEsWUFLaERDLE1BTGdELHlCQUtoREEsTUFMZ0Q7QUFBQSxZQU1oREMsS0FOZ0QseUJBTWhEQSxLQU5nRDtBQUFBLFlBT2hEZ0ssUUFQZ0QseUJBT2hEQSxRQVBnRDtBQUFBLFlBUWhEMUosWUFSZ0QseUJBUWhEQSxZQVJnRDtBQUFBLFlBU2hEMkosaUJBVGdELHlCQVNoREEsaUJBVGdEO0FBQUEsWUFVaEQ3SixTQVZnRCx5QkFVaERBLFNBVmdEO0FBQUEsWUFXaERGLGdCQVhnRCx5QkFXaERBLGdCQVhnRDtBQUFBLFlBWWhEZ0ssV0FaZ0QseUJBWWhEQSxXQVpnRDtBQWVsRCxZQUFNQyxjQUFjLEdBQUdqRCxPQUFPLENBQUNwSCxLQUFLLElBQUksTUFBSSxDQUFDUixNQUFMLENBQVluQixLQUFaLENBQVYsQ0FBOUI7O0FBRUEsWUFBSWdNLGNBQUosRUFBb0I7QUFDbEIsY0FBTUMsSUFBSSxHQUFHLENBQUMsTUFBSSxDQUFDOUssTUFBTCxDQUFZUSxLQUFaLENBQUQsRUFBcUIsTUFBSSxDQUFDUixNQUFMLENBQVlTLE1BQVosQ0FBckIsRUFBMEMsTUFBSSxDQUFDVCxNQUFMLENBQVlpRCxTQUFaLENBQXNCdkMsS0FBdEIsQ0FBMUMsQ0FBYjtBQUNBLGNBQU1xSyxPQUFPLEdBQUdOLEtBQUssSUFBSSxNQUFJLENBQUN6SyxNQUFMLENBQVlpRCxTQUFaLENBQXNCd0gsS0FBdEIsQ0FBekIsQ0FGa0IsQ0FHbEI7QUFDQTs7QUFDQSxjQUFNTyxXQUFXLEdBQUcsTUFBSSxDQUFDaEwsTUFBTCxDQUFZbkIsS0FBWixDQUFwQjtBQUNBLGNBQU1vTSxnQkFBZ0IsR0FBRyxNQUFJLENBQUNqTCxNQUFMLENBQVlpRCxTQUFaLENBQXNCMkgsV0FBdEIsQ0FBekI7QUFFQSxjQUFNTSxhQUFhLEdBQ2pCdEssZ0JBQWdCLEtBQUtDLGdDQUFlUCxLQUFwQyxHQUNJLE1BQUksQ0FBQzZLLGFBQUwsT0FBQSxNQUFJLEVBQWtCTCxJQUFsQixDQURSLEdBRUlsSyxnQkFBZ0IsS0FBS0MsZ0NBQWV1SyxZQUFwQyxHQUNBLE1BQUksQ0FBQ0MscUJBQUwsQ0FBMkIsTUFBSSxDQUFDckwsTUFBTCxDQUFZaUQsU0FBWixDQUFzQnZDLEtBQXRCLENBQTNCLENBREEsR0FFQSxNQUFJLENBQUN5SixrQkFBTCxPQUFBLE1BQUksRUFBdUJXLElBQXZCLFNBQTZCQyxPQUE3QixHQUxWOztBQU9BUCxVQUFBQSxrQkFBa0IsQ0FBQ0UsUUFBRCxDQUFsQixHQUErQixVQUFBL0wsQ0FBQztBQUFBLG1CQUM5QixNQUFJLENBQUMyTSxzQkFBTCxDQUNFSixhQURGLEVBRUVYLFlBQVksQ0FBQzVGLGFBQUQsQ0FBWixDQUE0QmhHLENBQTVCLENBRkYsRUFHRXFNLFdBSEYsRUFJRUMsZ0JBSkYsRUFLRW5LLFNBTEYsQ0FEOEI7QUFBQSxXQUFoQztBQVFELFNBdkJELE1BdUJPLElBQUksT0FBTzZKLGlCQUFQLEtBQTZCLFVBQWpDLEVBQTZDO0FBQ2xESCxVQUFBQSxrQkFBa0IsQ0FBQ0UsUUFBRCxDQUFsQixHQUErQkMsaUJBQWlCLENBQUMsTUFBSSxDQUFDM0ssTUFBTixDQUFoRDtBQUNELFNBRk0sTUFFQTtBQUNMd0ssVUFBQUEsa0JBQWtCLENBQUNFLFFBQUQsQ0FBbEIsR0FDRSxPQUFPMUosWUFBUCxLQUF3QixVQUF4QixHQUFxQ0EsWUFBWSxDQUFDLE1BQUksQ0FBQ2hCLE1BQU4sQ0FBakQsR0FBaUVnQixZQURuRTtBQUVEOztBQUVELFlBQUksQ0FBQ3dKLGtCQUFrQixDQUFDRSxRQUFELENBQXZCLEVBQW1DO0FBQ2pDYSwwQkFBUUMsSUFBUixtREFBd0RkLFFBQVEsSUFBSWhGLE9BQXBFO0FBQ0Q7QUFDRixPQWxERDtBQW9EQSxhQUFPOEUsa0JBQVA7QUFDRDs7O1dBRUQsNEJBQW1CaEssS0FBbkIsRUFBMEJDLE1BQTFCLEVBQWtDQyxLQUFsQyxFQUF5QytKLEtBQXpDLEVBQWdEO0FBQzlDLFVBQUlqSyxLQUFLLEtBQUttQyw2QkFBWThJLE9BQTFCLEVBQW1DO0FBQ2pDO0FBQ0EsZUFBTzFCLDRCQUFXdkosS0FBWCxJQUNKQyxNQURJLENBQ0dBLE1BQU0sQ0FBQ2tJLEtBQVAsQ0FBYSxDQUFiLEVBQWdCakksS0FBSyxDQUFDakIsTUFBdEIsQ0FESCxFQUVKaUIsS0FGSSxDQUVFQSxLQUZGLEVBR0p1SixPQUhJLENBR0lDLDhCQUhKLENBQVA7QUFJRCxPQVA2QyxDQVM5Qzs7O0FBQ0EsYUFBT0gsNEJBQVdVLEtBQUssR0FBRyxRQUFILEdBQWNqSyxLQUE5QixJQUNKQyxNQURJLENBQ0dBLE1BREgsRUFFSkMsS0FGSSxDQUVFK0osS0FBSyxHQUFHaEssTUFBSCxHQUFZQyxLQUZuQixDQUFQO0FBR0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSx5QkFBZ0JpRSxhQUFoQixFQUErQitHLFdBQS9CLEVBQTRDO0FBQzFDO0FBQ0E7QUFDQSxVQUFNQyxVQUFVLEdBQ2RoSCxhQUFhLENBQUNpSCxPQUFkLEtBQTBCek4sZUFBMUIsR0FDSSx1Q0FBY3dHLGFBQWQsRUFBNkJ4RyxlQUE3QixDQURKLEdBRUl3RyxhQUhOO0FBS0EsVUFBTWtILE1BQU0sR0FBR0YsVUFBVSxDQUFDRyxRQUFYLENBQW9CSixXQUFwQixDQUFmO0FBRUEsVUFBTUssU0FBUyxHQUFHLGdDQUFnQkYsTUFBaEIsRUFBd0IsQ0FBeEIsRUFBMkIsQ0FBQyxDQUFDLEVBQUYsRUFBTSxFQUFOLENBQTNCLENBQWxCO0FBQ0EsVUFBTUcsU0FBUyxHQUFHLGdDQUFnQkgsTUFBaEIsRUFBd0IsQ0FBeEIsRUFBMkIsQ0FBQyxDQUFDLEdBQUYsRUFBTyxHQUFQLENBQTNCLENBQWxCOztBQUVBLFVBQUksQ0FBQ0UsU0FBRCxJQUFjLENBQUNDLFNBQW5CLEVBQThCO0FBQzVCLGVBQU8sSUFBUDtBQUNEOztBQUVELGFBQU8sQ0FBQ0EsU0FBUyxDQUFDLENBQUQsQ0FBVixFQUFlRCxTQUFTLENBQUMsQ0FBRCxDQUF4QixFQUE2QkMsU0FBUyxDQUFDLENBQUQsQ0FBdEMsRUFBMkNELFNBQVMsQ0FBQyxDQUFELENBQXBELENBQVA7QUFDRDs7O1dBRUQsNEJBQW1CRSxrQkFBbkIsRUFBdUM7QUFDckMsVUFBTUMsY0FBYyxHQUFHLHFDQUFtQkQsa0JBQW5CLEVBQXVDLEtBQUtFLHNCQUE1QyxDQUF2QjtBQUNBLFdBQUtBLHNCQUFMLEdBQThCRixrQkFBOUI7QUFFQSxhQUFPQyxjQUFQO0FBQ0Q7OztXQUVELGdDQUNFMUwsS0FERixFQUVFOEksSUFGRixFQUdFekssS0FIRixFQUlFO0FBQ0F1TixJQUFBQSxZQUxGLEVBUUU7QUFBQSxVQUZBdEwsU0FFQSx1RUFGWUMsK0JBRVo7QUFBQSxVQURBc0wsUUFDQSx1RUFEV3pOLG9CQUNYO0FBQUEsVUFDT3lCLElBRFAsR0FDZXhCLEtBRGYsQ0FDT3dCLElBRFA7QUFFQSxVQUFNNkIsS0FBSyxHQUFHbUssUUFBUSxDQUFDeE4sS0FBRCxFQUFReUssSUFBUixDQUF0Qjs7QUFFQSxVQUFJLENBQUMsbUNBQW1CcEgsS0FBbkIsQ0FBTCxFQUFnQztBQUM5QixlQUFPcEIsU0FBUDtBQUNEOztBQUVELFVBQUl3TCxjQUFKOztBQUNBLFVBQUlqTSxJQUFJLEtBQUtrTSxpQ0FBZ0JDLFNBQTdCLEVBQXdDO0FBQ3RDO0FBQ0E7QUFDQUYsUUFBQUEsY0FBYyxHQUFHOUwsS0FBSyxDQUFDLElBQUlpTSxJQUFKLENBQVN2SyxLQUFULENBQUQsQ0FBdEI7QUFDRCxPQUpELE1BSU87QUFDTG9LLFFBQUFBLGNBQWMsR0FBRzlMLEtBQUssQ0FBQzBCLEtBQUQsQ0FBdEI7QUFDRDs7QUFFRCxVQUFJLENBQUMsbUNBQW1Cb0ssY0FBbkIsQ0FBTCxFQUF5QztBQUN2Q0EsUUFBQUEsY0FBYyxHQUFHeEwsU0FBakI7QUFDRDs7QUFFRCxhQUFPd0wsY0FBUDtBQUNEOzs7V0FFRCxvQkFBV3hNLElBQVgsRUFBaUI7QUFDZixXQUFLQSxJQUFMLG1DQUFnQixLQUFLQSxJQUFyQixHQUE4QkEsSUFBOUI7QUFDRDs7O1dBRUQsc0NBQW9EO0FBQUEsVUFBN0IyRSxhQUE2QixTQUE3QkEsYUFBNkI7QUFBQSxVQUFkNUUsRUFBYyxTQUFkQSxFQUFjO0FBQUEsVUFBVjZNLE9BQVUsU0FBVkEsT0FBVTtBQUFBLFVBQzNDeE0sT0FEMkMsR0FDaEMsS0FBS0YsTUFEMkIsQ0FDM0NFLE9BRDJDO0FBR2xEO0FBQ0V5TSxRQUFBQSxPQUFPLEVBQUU7QUFBQ0MsVUFBQUEsU0FBUyxFQUFFL00sRUFBWjtBQUFnQjZNLFVBQUFBLE9BQU8sRUFBUEEsT0FBaEI7QUFBeUJ4TSxVQUFBQSxPQUFPLEVBQVBBLE9BQXpCO0FBQWtDdUUsVUFBQUEsYUFBYSxFQUFiQTtBQUFsQyxTQURYO0FBRUVvSSxRQUFBQSxPQUFPLEVBQUU7QUFBQ0QsVUFBQUEsU0FBUyxFQUFFL00sRUFBWjtBQUFnQjZNLFVBQUFBLE9BQU8sRUFBUEEsT0FBaEI7QUFBeUJ4TSxVQUFBQSxPQUFPLEVBQVBBO0FBQXpCO0FBRlgsU0FHSyxDQUFDLEtBQUtGLE1BQUwsQ0FBWWtELFNBQVosSUFBeUIsRUFBMUIsRUFBOEJvRCxNQUE5QixDQUNELFVBQUNDLElBQUQsRUFBT3VHLEVBQVAsRUFBVzFELENBQVg7QUFBQSwrQ0FDSzdDLElBREwsMkVBRTJCNkMsQ0FGM0IsR0FFaUMwRCxFQUFFLENBQUNqTyxLQUFILEdBQVdpTyxFQUFFLENBQUNqTyxLQUFILENBQVMrRSxJQUFwQixHQUEyQixJQUY1RDtBQUFBLE9BREMsRUFLRCxFQUxDLENBSEw7QUFXRDs7O1dBRUQsb0JBQVdZLFFBQVgsRUFBcUJ1SSxZQUFyQixFQUFtQztBQUNqQyxVQUFJLENBQUMsS0FBSy9NLE1BQUwsQ0FBWTBCLE1BQWpCLEVBQXlCO0FBQ3ZCLGVBQU8sRUFBUDtBQUNEOztBQUNELFVBQU1zTCxZQUFZLEdBQUd4SSxRQUFRLENBQUMsS0FBS3hFLE1BQUwsQ0FBWTBCLE1BQWIsQ0FBN0I7QUFKaUMsVUFLMUJpRCxhQUwwQixHQUtUcUksWUFMUyxDQUsxQnJJLGFBTDBCO0FBT2pDLFdBQUtzSSx5QkFBTCxDQUErQkQsWUFBL0I7QUFFQSxVQUFNdEIsV0FBVyxHQUFHLEtBQUt3QixtQkFBTCxDQUF5QnZJLGFBQXpCLENBQXBCO0FBQ0EsVUFBTXNILGtCQUFrQixHQUFHLEtBQUtrQixxQkFBTCxDQUEyQkgsWUFBM0IsQ0FBM0I7QUFDQSxVQUFNZCxjQUFjLEdBQUcsS0FBS2tCLGtCQUFMLENBQXdCbkIsa0JBQXhCLENBQXZCOztBQUVBLFVBQUlDLGNBQWMsQ0FBQ1csT0FBbkIsRUFBNEI7QUFDMUIsYUFBS1EsZUFBTCxDQUFxQjFJLGFBQXJCLEVBQW9DK0csV0FBcEM7QUFDRDs7QUFFRCxVQUFJcEMsSUFBSSxHQUFHLEVBQVg7O0FBRUEsVUFBSSxDQUFDNEMsY0FBYyxDQUFDUyxPQUFoQixJQUEyQkksWUFBM0IsSUFBMkNBLFlBQVksQ0FBQ3pELElBQTVELEVBQWtFO0FBQ2hFO0FBQ0FBLFFBQUFBLElBQUksR0FBR3lELFlBQVksQ0FBQ3pELElBQXBCO0FBQ0QsT0FIRCxNQUdPO0FBQ0xBLFFBQUFBLElBQUksR0FBRyxLQUFLZ0Usc0JBQUwsQ0FBNEJOLFlBQTVCLEVBQTBDdEIsV0FBMUMsQ0FBUDtBQUNEOztBQUVELGFBQU87QUFBQ3BDLFFBQUFBLElBQUksRUFBSkEsSUFBRDtBQUFPNEMsUUFBQUEsY0FBYyxFQUFkQTtBQUFQLE9BQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSxtQ0FBMEJxQixPQUExQixFQUFtQztBQUFBOztBQUFBO0FBQUEsWUFDckIxTyxLQURxQixzQkFDckJBLEtBRHFCO0FBRS9CLFlBQU0yTyxRQUFRLEdBQUcsTUFBSSxDQUFDeE4sTUFBTCxDQUFZbkIsS0FBWixDQUFqQjs7QUFDQSxZQUFJLENBQUMyTyxRQUFMLEVBQWU7QUFDYjtBQUFBO0FBQUE7QUFDRDs7QUFDRCxZQUFNQyxlQUFlLEdBQUdGLE9BQU8sQ0FBQ0csTUFBUixDQUFldkYsSUFBZixDQUFvQixVQUFBd0YsRUFBRTtBQUFBLGlCQUFJQSxFQUFFLENBQUMvSixJQUFILEtBQVk0SixRQUFRLENBQUM1SixJQUF6QjtBQUFBLFNBQXRCLEtBQXdELElBQWhGOztBQUNBLFFBQUEsTUFBSSxDQUFDNEIsaUJBQUwsc0NBQXlCM0csS0FBekIsRUFBaUM0TyxlQUFqQztBQVArQjs7QUFDakMsd0NBQXNCdE8sTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS3FFLGNBQW5CLENBQXRCLG9DQUEwRDtBQUFBOztBQUFBO0FBT3pEO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UsMkJBQWtCZSxRQUFsQixFQUE0Qm9KLFNBQTVCLEVBQXVDO0FBQUE7O0FBQ3JDLFVBQU1DLEtBQUssR0FBRyxLQUFLQyxVQUFMLENBQWdCdEosUUFBaEIsQ0FBZDs7QUFDQSxVQUFJLENBQUNxSixLQUFMLEVBQVk7QUFDVixlQUFPLElBQVA7QUFDRDs7QUFDRDFPLE1BQUFBLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEtBQUtxRSxjQUFuQixFQUFtQ3lCLE9BQW5DLENBQTJDLFVBQUFRLE9BQU8sRUFBSTtBQUFBLFlBQzdDbEYsS0FENkMsR0FDcENrRixPQURvQyxDQUM3Q2xGLEtBRDZDO0FBRXBELFlBQU11TixTQUFTLEdBQUcsTUFBSSxDQUFDL04sTUFBTCxDQUFZUSxLQUFaLENBQWxCLENBRm9ELENBR3BEO0FBQ0E7O0FBQ0EsWUFBSSxDQUFDb04sU0FBRCxJQUFjRyxTQUFTLEtBQUtwTCw2QkFBWThJLE9BQTVDLEVBQXFEO0FBQUEsY0FDNUNoTCxNQUQ0QyxHQUNsQ2lGLE9BRGtDLENBQzVDakYsTUFENEM7O0FBRW5ELGNBQU11TixhQUFhLEdBQUcsTUFBSSxDQUFDQyxvQkFBTCxDQUEwQkosS0FBMUIsRUFBaUNuSSxPQUFqQyxDQUF0Qjs7QUFDQSxVQUFBLE1BQUksQ0FBQ0YsaUJBQUwsc0NBQXlCL0UsTUFBekIsRUFBa0N1TixhQUFsQztBQUNEO0FBQ0YsT0FWRDtBQVlBLGFBQU8sSUFBUDtBQUNEOzs7V0FFRCxvQkFBV3hKLFFBQVgsRUFBcUI7QUFDbkIsYUFBTyxLQUFLeEUsTUFBTCxDQUFZMEIsTUFBWixHQUFxQjhDLFFBQVEsQ0FBQyxLQUFLeEUsTUFBTCxDQUFZMEIsTUFBYixDQUE3QixHQUFvRCxJQUEzRDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7Ozs7V0FDRSwrQkFBc0JnRSxPQUF0QixFQUErQjtBQUM3QixXQUFLd0ksaUJBQUwsQ0FBdUJ4SSxPQUF2QjtBQUNBLFdBQUt5SSxhQUFMLENBQW1CekksT0FBbkI7QUFDRDtBQUVEO0FBQ0Y7QUFDQTs7OztXQUNFLDJCQUFrQkEsT0FBbEIsRUFBMkI7QUFDekIsVUFBTTBJLGFBQWEsR0FBRyxLQUFLM0ssY0FBTCxDQUFvQmlDLE9BQXBCLENBQXRCO0FBRHlCLFVBRWxCN0csS0FGa0IsR0FFOEJ1UCxhQUY5QixDQUVsQnZQLEtBRmtCO0FBQUEsVUFFWCtCLGdCQUZXLEdBRThCd04sYUFGOUIsQ0FFWHhOLGdCQUZXO0FBQUEsVUFFT3lOLG1CQUZQLEdBRThCRCxhQUY5QixDQUVPQyxtQkFGUDs7QUFJekIsVUFBSSxLQUFLck8sTUFBTCxDQUFZbkIsS0FBWixDQUFKLEVBQXdCO0FBQ3RCO0FBQ0EsWUFBTXlQLDBCQUEwQixHQUM5QkQsbUJBQW1CLElBQUlFLGdEQUErQjNOLGdCQUEvQixDQUR6Qjs7QUFHQSxZQUFJLENBQUMwTiwwQkFBMEIsQ0FBQzFJLFFBQTNCLENBQW9DLEtBQUs1RixNQUFMLENBQVluQixLQUFaLEVBQW1Cd0IsSUFBdkQsQ0FBTCxFQUFtRTtBQUNqRTtBQUNBO0FBQ0EsZUFBS21GLGlCQUFMLHNDQUF5QjNHLEtBQXpCLEVBQWlDLElBQWpDO0FBQ0Q7QUFDRjtBQUNGO0FBRUQ7QUFDRjtBQUNBOzs7O1dBQ0UsdUJBQWM2RyxPQUFkLEVBQXVCO0FBQ3JCLFVBQU0wSSxhQUFhLEdBQUcsS0FBSzNLLGNBQUwsQ0FBb0JpQyxPQUFwQixDQUF0QjtBQURxQixVQUVkbEYsS0FGYyxHQUVMNE4sYUFGSyxDQUVkNU4sS0FGYzs7QUFHckIsVUFBSSxDQUFDQSxLQUFMLEVBQVk7QUFDVjtBQUNBO0FBQ0Q7O0FBQ0QsVUFBTWdPLFlBQVksR0FBRyxLQUFLQyxlQUFMLENBQXFCL0ksT0FBckIsQ0FBckIsQ0FQcUIsQ0FRckI7QUFDQTs7QUFDQSxVQUFJLENBQUM4SSxZQUFZLENBQUM1SSxRQUFiLENBQXNCLEtBQUs1RixNQUFMLENBQVlRLEtBQVosQ0FBdEIsQ0FBTCxFQUFnRDtBQUM5QyxhQUFLZ0YsaUJBQUwsc0NBQXlCaEYsS0FBekIsRUFBaUNnTyxZQUFZLENBQUMsQ0FBRCxDQUE3QztBQUNEO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UseUJBQWdCOUksT0FBaEIsRUFBeUI7QUFDdkIsVUFBTTBJLGFBQWEsR0FBRyxLQUFLM0ssY0FBTCxDQUFvQmlDLE9BQXBCLENBQXRCO0FBRHVCLFVBRWhCN0csS0FGZ0IsR0FFa0J1UCxhQUZsQixDQUVoQnZQLEtBRmdCO0FBQUEsVUFFVDJCLEtBRlMsR0FFa0I0TixhQUZsQixDQUVUNU4sS0FGUztBQUFBLFVBRUZJLGdCQUZFLEdBRWtCd04sYUFGbEIsQ0FFRnhOLGdCQUZFO0FBSXZCLGFBQU8sS0FBS1osTUFBTCxDQUFZbkIsS0FBWixJQUNINlAsNEJBQVcsS0FBSzFPLE1BQUwsQ0FBWW5CLEtBQVosRUFBbUJ3QixJQUE5QixFQUFvQ0csS0FBcEMsQ0FBMENJLGdCQUExQyxDQURHLEdBRUgsQ0FBQyxLQUFLWCxxQkFBTCxHQUE2Qk8sS0FBN0IsQ0FBRCxDQUZKO0FBR0Q7OztXQUVELGtDQUF5QitNLE9BQXpCLEVBQWtDN0gsT0FBbEMsRUFBMkM7QUFDekMsVUFBTTBJLGFBQWEsR0FBRyxLQUFLM0ssY0FBTCxDQUFvQmlDLE9BQXBCLENBQXRCO0FBQ0EsV0FBS0MscUJBQUwsQ0FBMkJELE9BQTNCLEVBRnlDLENBR3pDOztBQUNBLFVBQU1zSSxhQUFhLEdBQUcsS0FBS0Msb0JBQUwsQ0FBMEJWLE9BQTFCLEVBQW1DYSxhQUFuQyxDQUF0QjtBQUNBLFdBQUs1SSxpQkFBTCxzQ0FBeUI0SSxhQUFhLENBQUMzTixNQUF2QyxFQUFnRHVOLGFBQWhEO0FBQ0Q7OztXQUVELDBDQUFpQztBQUFBOztBQUMvQixVQUFNVyxjQUFjLEdBQUcsRUFBdkI7QUFDQXhQLE1BQUFBLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEtBQUtxRSxjQUFuQixFQUFtQ3lCLE9BQW5DLENBQTJDLFVBQUFrSixhQUFhLEVBQUk7QUFBQTs7QUFDMUQ7QUFEMEQsWUFFbkQxRCxRQUZtRCxHQUVXMEQsYUFGWCxDQUVuRDFELFFBRm1EO0FBQUEsWUFFekM3TCxLQUZ5QyxHQUVXdVAsYUFGWCxDQUV6Q3ZQLEtBRnlDO0FBQUEsWUFFbEMyQixLQUZrQyxHQUVXNE4sYUFGWCxDQUVsQzVOLEtBRmtDO0FBQUEsWUFFM0JDLE1BRjJCLEdBRVcyTixhQUZYLENBRTNCM04sTUFGMkI7QUFBQSxZQUVuQkMsS0FGbUIsR0FFVzBOLGFBRlgsQ0FFbkIxTixLQUZtQjtBQUFBLFlBRVpNLFlBRlksR0FFV29OLGFBRlgsQ0FFWnBOLFlBRlk7QUFBQSxZQUVFeUosS0FGRixHQUVXMkQsYUFGWCxDQUVFM0QsS0FGRjtBQUkxRGtFLFFBQUFBLGNBQWMsQ0FBQ2pFLFFBQUQsQ0FBZCwwRkFDRzdMLEtBREgsRUFDVyxNQUFJLENBQUNtQixNQUFMLENBQVluQixLQUFaLENBRFgscURBRUcyQixLQUZILEVBRVcsTUFBSSxDQUFDUixNQUFMLENBQVlRLEtBQVosQ0FGWCxxREFHR0MsTUFISCxFQUdZLE1BQUksQ0FBQ1QsTUFBTCxDQUFZUyxNQUFaLENBSFoscURBSUdDLEtBSkgsRUFJVyxNQUFJLENBQUNWLE1BQUwsQ0FBWWlELFNBQVosQ0FBc0J2QyxLQUF0QixDQUpYLHFFQUtnQixPQUFPTSxZQUFQLEtBQXdCLFVBQXhCLEdBQXFDQSxZQUFZLENBQUMsTUFBSSxDQUFDaEIsTUFBTixDQUFqRCxHQUFpRWdCLFlBTGpGLHFCQU1NeUosS0FBSyx3Q0FBS0EsS0FBTCxFQUFhLE1BQUksQ0FBQ3pLLE1BQUwsQ0FBWWlELFNBQVosQ0FBc0J3SCxLQUF0QixDQUFiLElBQTZDLEVBTnhEO0FBUUQsT0FaRDtBQWFBLGFBQU9rRSxjQUFQO0FBQ0Q7OztXQUVELDhCQUFxQnBCLE9BQXJCLEVBQThCYSxhQUE5QixFQUE2QztBQUFBLFVBQ3BDNU4sS0FEb0MsR0FDM0I0TixhQUQyQixDQUNwQzVOLEtBRG9DO0FBRTNDLFVBQU11TixTQUFTLEdBQUcsS0FBSy9OLE1BQUwsQ0FBWVEsS0FBWixDQUFsQjtBQUVBLFVBQU0zQixLQUFLLEdBQUcsS0FBS21CLE1BQUwsQ0FBWW9PLGFBQWEsQ0FBQ3ZQLEtBQTFCLENBQWQ7O0FBQ0EsVUFBSSxDQUFDQSxLQUFMLEVBQVk7QUFDVjtBQUNBLGVBQU9ULGFBQVA7QUFDRDs7QUFFRCxVQUFNd1EsWUFBWSxHQUFHckIsT0FBTyxDQUFDRyxNQUFSLENBQWV2RixJQUFmLENBQW9CLFVBQUEwRyxDQUFDO0FBQUEsZUFBSUEsQ0FBQyxDQUFDakwsSUFBRixLQUFXL0UsS0FBSyxDQUFDK0UsSUFBckI7QUFBQSxPQUFyQixDQUFyQjs7QUFDQSxVQUFJLENBQUNnTCxZQUFMLEVBQW1CO0FBQ2pCO0FBQ0EsZUFBT3hRLGFBQVA7QUFDRDs7QUFFRCxhQUFPbVAsT0FBTyxDQUFDdUIsb0JBQVIsQ0FBNkJGLFlBQTdCLEVBQTJDYixTQUEzQyxLQUF5RDNQLGFBQWhFO0FBQ0Q7OztXQUVELDBCQUFpQjJRLFVBQWpCLEVBQTZCO0FBQzNCLGFBQU8sS0FBS0MsY0FBTCxDQUFvQkQsVUFBcEIsS0FBbUNBLFVBQVUsQ0FBQ3JLLE1BQTlDLEdBQXVEcUssVUFBVSxDQUFDckssTUFBbEUsR0FBMkUsSUFBbEY7QUFDRDs7O1dBRUQsd0JBQWVxSyxVQUFmLEVBQTJCO0FBQUE7O0FBQ3pCLGFBQU8sQ0FBQUEsVUFBVSxTQUFWLElBQUFBLFVBQVUsV0FBVixZQUFBQSxVQUFVLENBQUVFLE1BQVosS0FBc0IsQ0FBQUYsVUFBVSxTQUFWLElBQUFBLFVBQVUsV0FBVixpQ0FBQUEsVUFBVSxDQUFFRyxLQUFaLGlHQUFtQnRQLEtBQW5CLGdGQUEwQkMsRUFBMUIsTUFBaUMsS0FBS0EsRUFBbkU7QUFDRDs7O1dBRUQsOEJBQXFCc1AsUUFBckIsRUFBK0JDLFdBQS9CLEVBQTRDO0FBQzFDLFVBQU1DLGFBQWEsR0FBR2xRLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEtBQUtxRSxjQUFuQixFQUFtQzBFLElBQW5DLENBQXdDLFVBQUFtSCxFQUFFO0FBQUEsZUFBSUEsRUFBRSxDQUFDL08sUUFBSCxLQUFnQixRQUFwQjtBQUFBLE9BQTFDLENBQXRCOztBQUVBLFVBQUksQ0FBQzhPLGFBQUwsRUFBb0I7QUFDbEIsZUFBTyxDQUFQO0FBQ0Q7O0FBRUQsVUFBTXhRLEtBQUssR0FBR3dRLGFBQWEsQ0FBQ3hRLEtBQTVCO0FBQ0EsVUFBTTRMLEtBQUssR0FBRzJFLFdBQVcsS0FBS0csU0FBaEIsR0FBNEIsS0FBS3ZQLE1BQUwsQ0FBWWlELFNBQVosQ0FBc0JtTSxXQUFsRCxHQUFnRUEsV0FBOUU7QUFSMEMsVUFTbkNJLE1BVG1DLEdBU3pCLEtBQUt4UCxNQUFMLENBQVlpRCxTQVRhLENBU25DdU0sTUFUbUMsRUFXMUM7O0FBQ0EsYUFBTy9FLEtBQUssR0FBRyxDQUFILEdBQU8sQ0FBQyxLQUFLekssTUFBTCxDQUFZbkIsS0FBWixJQUFxQixDQUFyQixHQUF5QjJRLE1BQTFCLElBQW9DLEtBQUtDLGFBQUwsQ0FBbUJOLFFBQW5CLENBQXZEO0FBQ0Q7OztXQUVELHdCQUFlQyxXQUFmLEVBQTRCO0FBQzFCLFVBQU1DLGFBQWEsR0FBR2xRLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEtBQUtxRSxjQUFuQixFQUFtQzBFLElBQW5DLENBQXdDLFVBQUFtSCxFQUFFO0FBQUEsZUFBSUEsRUFBRSxDQUFDL08sUUFBSCxLQUFnQixRQUFwQjtBQUFBLE9BQTFDLENBQXRCOztBQUVBLFVBQUksQ0FBQzhPLGFBQUwsRUFBb0I7QUFDbEIsZUFBTyxDQUFQO0FBQ0Q7O0FBRUQsVUFBTXhRLEtBQUssR0FBR3dRLGFBQWEsQ0FBQ3hRLEtBQTVCO0FBQ0EsVUFBTTRMLEtBQUssR0FBRzJFLFdBQVcsS0FBS0csU0FBaEIsR0FBNEIsS0FBS3ZQLE1BQUwsQ0FBWWlELFNBQVosQ0FBc0JtTSxXQUFsRCxHQUFnRUEsV0FBOUU7QUFSMEIsVUFTbkJJLE1BVG1CLEdBU1QsS0FBS3hQLE1BQUwsQ0FBWWlELFNBVEgsQ0FTbkJ1TSxNQVRtQjtBQVcxQixhQUFPL0UsS0FBSyxHQUFHLENBQUgsR0FBUSxLQUFLekssTUFBTCxDQUFZbkIsS0FBWixJQUFxQixDQUFyQixHQUF5QjJRLE1BQTdDO0FBQ0Q7OztXQUVELDRCQUFtQjtBQUFBLFVBQ1Z2TSxTQURVLEdBQ0csS0FBS2pELE1BRFIsQ0FDVmlELFNBRFU7QUFBQSxVQUVWRCxTQUZVLEdBRXdCQyxTQUZ4QixDQUVWRCxTQUZVO0FBQUEsVUFFQzBNLFdBRkQsR0FFd0J6TSxTQUZ4QixDQUVDeU0sV0FGRDtBQUFBLFVBRWNGLE1BRmQsR0FFd0J2TSxTQUZ4QixDQUVjdU0sTUFGZDtBQUdqQixhQUFPbkwsSUFBSSxDQUFDc0wsSUFBTCxDQUFXM00sU0FBUyxHQUFHME0sV0FBVyxDQUFDLENBQUQsQ0FBZCxHQUFvQkYsTUFBeEMsQ0FBUDtBQUNEOzs7V0FFRCx1QkFBY0osV0FBZCxFQUEyQjtBQUN6QixVQUFNQyxhQUFhLEdBQUdsUSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxLQUFLcUUsY0FBbkIsRUFBbUMwRSxJQUFuQyxDQUF3QyxVQUFBbUgsRUFBRTtBQUFBLGVBQUlBLEVBQUUsQ0FBQy9PLFFBQUgsS0FBZ0IsUUFBcEI7QUFBQSxPQUExQyxDQUF0Qjs7QUFFQSxVQUFJLENBQUM4TyxhQUFMLEVBQW9CO0FBQ2xCLGVBQU8sUUFBUDtBQUNEOztBQUVELFVBQU01RSxLQUFLLEdBQUcyRSxXQUFXLEtBQUtHLFNBQWhCLEdBQTRCLEtBQUt2UCxNQUFMLENBQVlpRCxTQUFaLENBQXNCbU0sV0FBbEQsR0FBZ0VBLFdBQTlFO0FBRUEsYUFBTzNFLEtBQUssR0FBRyxRQUFILEdBQWMsUUFBMUI7QUFDRDs7O1dBRUQsa0NBQXlCN0ssS0FBekIsRUFBZ0M7QUFBQTs7QUFDOUIsYUFBT0EsS0FBSyxDQUFDa0ksSUFBTixDQUFXLFVBQUE3QixDQUFDO0FBQUEsZUFBSSxDQUFDLE1BQUksQ0FBQzJKLDJCQUFMLENBQWlDaEssUUFBakMsQ0FBMENLLENBQTFDLENBQUw7QUFBQSxPQUFaLENBQVA7QUFDRDs7O1dBRUQsbUNBQTBCNEosaUJBQTFCLEVBQTZDQyxjQUE3QyxFQUE2RDtBQUFBLFVBQ3BEQyxLQURvRCxHQUMzQ0YsaUJBRDJDLENBQ3BERSxLQURvRDtBQUczRCxhQUFPO0FBQ0w7QUFDQUMsUUFBQUEsYUFBYSxFQUFFLENBQUNELEtBQUssQ0FBQ3ZNLE9BRmpCO0FBR0x5TSxRQUFBQSxjQUFjLEVBQUVGLEtBQUssQ0FBQy9QLE1BQU4sQ0FBYWlCLElBQWIsR0FBb0IsSUFIL0I7QUFJTDZPLFFBQUFBLGNBQWMsRUFBRUEsY0FBYyxJQUFJLFFBSjdCO0FBS0xJLFFBQUFBLGVBQWUsRUFBRUgsS0FBSyxDQUFDdk07QUFMbEIsT0FBUDtBQU9EOzs7V0FFRCwwQ0FBMkU7QUFBQSxVQUFqRDJNLEdBQWlELFVBQWpEQSxHQUFpRDtBQUFBLFVBQTVDQyxTQUE0QyxVQUE1Q0EsU0FBNEM7QUFBQSxVQUFqQ2pCLFFBQWlDLFVBQWpDQSxRQUFpQztBQUFBLFVBQXZCa0IsT0FBdUIsVUFBdkJBLE9BQXVCO0FBQUEsVUFBZEMsV0FBYyxVQUFkQSxXQUFjO0FBQ3pFLFVBQU1DLGtCQUFrQixHQUFHLHVDQUFzQkQsV0FBdEIsQ0FBM0I7QUFDQSw2Q0FDS0Msa0JBREw7QUFFRTFRLFFBQUFBLEVBQUUsRUFBRSxLQUFLQSxFQUZYO0FBR0VzUSxRQUFBQSxHQUFHLEVBQUhBLEdBSEY7QUFJRUssUUFBQUEsZ0JBQWdCLEVBQUVDLHdCQUFrQkMsTUFKdEM7QUFLRUMsUUFBQUEsUUFBUSxFQUFFLElBTFo7QUFNRUMsUUFBQUEsYUFBYSxFQUFFLElBTmpCO0FBT0VDLFFBQUFBLFVBQVUsRUFBRTtBQUFDQyxVQUFBQSxTQUFTLEVBQUVsSixPQUFPLENBQUN1SCxRQUFRLENBQUM0QixVQUFULElBQXVCLEtBQUsvUSxNQUFMLENBQVlpRCxTQUFaLENBQXNCK04sUUFBOUM7QUFBbkIsU0FQZDtBQVFFek8sUUFBQUEsTUFBTSxFQUFFLEtBQUt2QyxNQUFMLENBQVl1QyxNQVJ0QjtBQVNFWixRQUFBQSxnQkFBZ0IsRUFBRTtBQUNoQkMsVUFBQUEsR0FBRyxFQUFFLEtBQUs1QixNQUFMLENBQVkyQixnQkFBWixDQUE2QkMsR0FEbEI7QUFFaEJFLFVBQUFBLEdBQUcsRUFBRSxLQUFLOUIsTUFBTCxDQUFZMkIsZ0JBQVosQ0FBNkJHO0FBRmxCLFNBVHBCO0FBYUU7QUFDQW1QLFFBQUFBLE9BQU8sRUFBRSxLQUFLalIsTUFBTCxDQUFZaUQsU0FBWixDQUFzQmdPLE9BZGpDO0FBZUU1TyxRQUFBQSxjQUFjLEVBQUUsS0FBS3JDLE1BQUwsQ0FBWXFDLGNBZjlCO0FBZ0JFO0FBQ0E2TyxRQUFBQSxVQUFVLEdBQUc3UyxtQkFBSCw2Q0FBMkJrUyxrQkFBa0IsQ0FBQ1csVUFBOUMsRUFqQlo7QUFrQkVDLFFBQUFBLFdBQVcsRUFBRWYsU0FBUyxHQUFHQSxTQUFTLENBQUNlLFdBQWIsR0FBMkI1QixTQWxCbkQ7QUFtQkU7QUFDQWMsUUFBQUEsT0FBTyxFQUFFLEtBQUtyUSxNQUFMLENBQVltQyxTQUFaLElBQXlCa087QUFwQnBDO0FBc0JEOzs7V0FFRCxxQ0FBNEI7QUFDMUIsYUFBTztBQUNMeFEsUUFBQUEsRUFBRSxZQUFLLEtBQUtBLEVBQVYsYUFERztBQUVMOFEsUUFBQUEsUUFBUSxFQUFFLEtBRkw7QUFHTEMsUUFBQUEsYUFBYSxFQUFFLElBSFY7QUFJTEosUUFBQUEsZ0JBQWdCLEVBQUVDLHdCQUFrQkM7QUFKL0IsT0FBUDtBQU1EOzs7V0FFRCxzQ0FBaUZVLFVBQWpGLEVBQTZGO0FBQUE7O0FBQUEsVUFBdkUxRixXQUF1RSxVQUF2RUEsV0FBdUU7QUFBQSxVQUExRDJGLGNBQTBELFVBQTFEQSxjQUEwRDtBQUFBLFVBQTFDMUMsY0FBMEMsVUFBMUNBLGNBQTBDO0FBQUEsVUFBMUIyQyxXQUEwQixVQUExQkEsV0FBMEI7QUFBQSxVQUNwRmhJLElBRG9GLEdBQ2xFOEgsVUFEa0UsQ0FDcEY5SCxJQURvRjtBQUFBLFVBQzlFNkYsUUFEOEUsR0FDbEVpQyxVQURrRSxDQUM5RWpDLFFBRDhFO0FBQUEsVUFFcEZqTSxTQUZvRixHQUV2RSxLQUFLbEQsTUFGa0UsQ0FFcEZrRCxTQUZvRjtBQUkzRixhQUFPb0csSUFBSSxDQUFDaUksVUFBTCxDQUFnQmpMLE1BQWhCLENBQXVCLFVBQUNDLElBQUQsRUFBTzVILENBQVAsRUFBVXlLLENBQVYsRUFBZ0I7QUFDNUMsWUFBSXpLLENBQUMsQ0FBQzZTLE9BQU4sRUFBZTtBQUFBOztBQUNiakwsVUFBQUEsSUFBSSxDQUFDbkIsSUFBTCxDQUNFLElBQUlxTSxpQkFBSixpQ0FDS0gsV0FETDtBQUVFelIsWUFBQUEsRUFBRSxZQUFLLE1BQUksQ0FBQ0EsRUFBViwwQ0FBc0JxRCxTQUFTLENBQUNrRyxDQUFELENBQVQsQ0FBYXZLLEtBQW5DLHVEQUFzQixtQkFBb0IrRSxJQUExQyxDQUZKO0FBR0UwRixZQUFBQSxJQUFJLEVBQUVBLElBQUksQ0FBQ0EsSUFIYjtBQUlFa0ksWUFBQUEsT0FBTyxFQUFFN1MsQ0FBQyxDQUFDNlMsT0FKYjtBQUtFOUYsWUFBQUEsV0FBVyxFQUFYQSxXQUxGO0FBTUVnRyxZQUFBQSxZQUFZLEVBQUUvUyxDQUFDLENBQUMrUyxZQU5sQjtBQU9FTCxZQUFBQSxjQUFjLEVBQUVBLGNBQWMsQ0FBQ25PLFNBQVMsQ0FBQ2tHLENBQUQsQ0FBVixDQVBoQztBQVFFdUksWUFBQUEsT0FBTyxFQUFFLENBUlg7QUFTRTdPLFlBQUFBLFNBQVMsRUFBRUksU0FBUyxDQUFDa0csQ0FBRCxDQUFULENBQWFuSSxJQVQxQjtBQVVFMlEsWUFBQUEsYUFBYSxFQUFFMU8sU0FBUyxDQUFDa0csQ0FBRCxDQUFULENBQWF5SSxNQVY5QjtBQVdFQyxZQUFBQSxvQkFBb0IsRUFBRTVPLFNBQVMsQ0FBQ2tHLENBQUQsQ0FBVCxDQUFhMkksU0FYckM7QUFZRUMsWUFBQUEsUUFBUSxFQUFFOU8sU0FBUyxDQUFDa0csQ0FBRCxDQUFULENBQWE5SSxLQVp6QjtBQWFFdVEsWUFBQUEsVUFBVSxFQUFFO0FBQ1Y7QUFDQUMsY0FBQUEsU0FBUyxFQUFFO0FBRkQsYUFiZDtBQWtCRW1CLFlBQUFBLGNBQWMsRUFBRTNJLElBQUksQ0FBQzJJLGNBbEJ2QjtBQW1CRXRELFlBQUFBLGNBQWMsa0NBQ1RBLGNBRFM7QUFFWjZDLGNBQUFBLE9BQU8seUJBQUV0TyxTQUFTLENBQUNrRyxDQUFELENBQVQsQ0FBYXZLLEtBQWYsd0RBQUUsb0JBQW9CK0UsSUFGakI7QUFHWnlOLGNBQUFBLGNBQWMsa0NBQ1QxQyxjQUFjLENBQUN1RCxTQUROO0FBRVovQyxnQkFBQUEsUUFBUSxFQUFSQSxRQUZZO0FBR1owQyxnQkFBQUEsTUFBTSxFQUFFM08sU0FBUyxDQUFDa0csQ0FBRCxDQUFULENBQWF5SSxNQUhUO0FBSVpFLGdCQUFBQSxTQUFTLEVBQUU3TyxTQUFTLENBQUNrRyxDQUFELENBQVQsQ0FBYTJJO0FBSlosZ0JBSEY7QUFTWkgsY0FBQUEsYUFBYSxFQUFFMU8sU0FBUyxDQUFDa0csQ0FBRCxDQUFULENBQWF5SSxNQVRoQjtBQVVaQyxjQUFBQSxvQkFBb0IsRUFBRTVPLFNBQVMsQ0FBQ2tHLENBQUQsQ0FBVCxDQUFhMkksU0FWdkI7QUFXWkMsY0FBQUEsUUFBUSxFQUFFOU8sU0FBUyxDQUFDa0csQ0FBRCxDQUFULENBQWE5STtBQVhYO0FBbkJoQixhQURGO0FBbUNEOztBQUNELGVBQU9pRyxJQUFQO0FBQ0QsT0F2Q00sRUF1Q0osRUF2Q0ksQ0FBUDtBQXdDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UscUNBQTRCNEwsbUJBQTVCLEVBQWlEQyxlQUFqRCxFQUFrRTtBQUNoRSxVQUFNQyxXQUFXLEdBQUcsS0FBS0MsZ0JBQUwsRUFBcEI7QUFFQSxhQUFPLFVBQUEzVCxDQUFDLEVBQUk7QUFDVixZQUFNNFQsU0FBUyxHQUNaLE9BQU9ILGVBQVAsS0FBMkIsVUFBNUIsR0FBMENBLGVBQWUsQ0FBQ3pULENBQUQsQ0FBekQsR0FBK0R5VCxlQURqRTtBQUVBLFlBQU1JLEdBQUcsR0FBRyxDQUFBTCxtQkFBbUIsU0FBbkIsSUFBQUEsbUJBQW1CLFdBQW5CLFlBQUFBLG1CQUFtQixDQUFHSSxTQUFILENBQW5CLE1BQXFDLElBQXJDLEdBQTRDQSxTQUE1QyxHQUF3RHJVLGFBQXBFO0FBQ0EsZUFBTztBQUNMMkIsVUFBQUEsRUFBRSxZQUFLMlMsR0FBTCxlQUFhSCxXQUFiLENBREc7QUFFTEcsVUFBQUEsR0FBRyxFQUFIQSxHQUZLO0FBR0xDLFVBQUFBLEtBQUssRUFBRUosV0FIRjtBQUlMSyxVQUFBQSxNQUFNLEVBQUVMLFdBSkg7QUFLTE0sVUFBQUEsSUFBSSxFQUFFO0FBTEQsU0FBUDtBQU9ELE9BWEQ7QUFZRDs7O1dBRUQsZ0NBQXVCQyxXQUF2QixFQUFvQ2xILFdBQXBDLEVBQWlEO0FBQy9DO0FBQ0EsYUFBTyxFQUFQO0FBQ0Q7OztXQUVELHlCQUFnQi9HLGFBQWhCLEVBQStCK0csV0FBL0IsRUFBNEMsQ0FDMUM7QUFDRDs7O1dBRUQsNkJBQW9CL0csYUFBcEIsRUFBbUM7QUFDakM7QUFDQSxhQUFPO0FBQUEsZUFBTSxJQUFOO0FBQUEsT0FBUDtBQUNEOzs7V0EvbkNELCtCQUE2QjRJLE9BQTdCLEVBQXNDc0YsV0FBdEMsRUFBbUQ7QUFDakQsYUFBTztBQUFDalQsUUFBQUEsS0FBSyxFQUFFLEVBQVI7QUFBWWlULFFBQUFBLFdBQVcsRUFBWEE7QUFBWixPQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UsZ0NBQThCQyxhQUE5QixFQUE2Q0MsU0FBN0MsRUFBd0Q7QUFDdEQ7QUFDQSxVQUFNQyxlQUFlLEdBQUc3VCxNQUFNLENBQUNzRyxJQUFQLENBQVlxTixhQUFaLEVBQTJCeE0sTUFBM0IsQ0FBa0MsVUFBQzJNLElBQUQsRUFBT3RTLEdBQVAsRUFBZTtBQUN2RSxZQUFNdVMsY0FBYyxHQUFHSCxTQUFTLENBQUM5SyxNQUFWLENBQ3JCLFVBQUE0RyxDQUFDO0FBQUEsaUJBQUlBLENBQUMsQ0FBQ2pMLElBQUYsS0FBV2tQLGFBQWEsQ0FBQ25TLEdBQUQsQ0FBeEIsSUFBaUNtUyxhQUFhLENBQUNuUyxHQUFELENBQWIsQ0FBbUJpRixRQUFuQixDQUE0QmlKLENBQUMsQ0FBQ2pMLElBQTlCLENBQXJDO0FBQUEsU0FEb0IsQ0FBdkI7QUFJQXFQLFFBQUFBLElBQUksQ0FBQ3RTLEdBQUQsQ0FBSixHQUFZdVMsY0FBYyxDQUFDelQsTUFBZixHQUNSeVQsY0FBYyxDQUFDNVQsR0FBZixDQUFtQixVQUFBdVAsQ0FBQztBQUFBLGlCQUFLO0FBQ3ZCM00sWUFBQUEsS0FBSyxFQUFFMk0sQ0FBQyxDQUFDakwsSUFEYztBQUV2QkcsWUFBQUEsUUFBUSxFQUFFOEssQ0FBQyxDQUFDOUs7QUFGVyxXQUFMO0FBQUEsU0FBcEIsQ0FEUSxHQUtSLElBTEo7QUFNQSxlQUFPa1AsSUFBUDtBQUNELE9BWnVCLEVBWXJCLEVBWnFCLENBQXhCOztBQWNBLFVBQUksQ0FBQzlULE1BQU0sQ0FBQ0MsTUFBUCxDQUFjNFQsZUFBZCxFQUErQmhOLEtBQS9CLENBQXFDNEIsT0FBckMsQ0FBTCxFQUFvRDtBQUNsRDtBQUNBLGVBQU8sSUFBUDtBQUNEOztBQUVELGFBQU8sS0FBS3VMLHlCQUFMLENBQStCSCxlQUEvQixDQUFQO0FBQ0Q7OztXQUVELG1DQUFpQ0EsZUFBakMsRUFBa0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0EsVUFBTUksT0FBTyxHQUFHalUsTUFBTSxDQUFDc0csSUFBUCxDQUFZdU4sZUFBWixDQUFoQjtBQUNBLFVBQU1LLFFBQVEsR0FBR0QsT0FBTyxDQUFDOVQsR0FBUixDQUFZLFVBQUN1SyxDQUFELEVBQUlULENBQUo7QUFBQSxlQUFZQSxDQUFDLEtBQUtnSyxPQUFPLENBQUMzVCxNQUFSLEdBQWlCLENBQXZCLEdBQTJCLENBQUMsQ0FBNUIsR0FBZ0MsQ0FBNUM7QUFBQSxPQUFaLENBQWpCO0FBQ0EsVUFBTTZULFdBQVcsR0FBR0YsT0FBTyxDQUFDOVQsR0FBUixDQUFZLFVBQUF1SyxDQUFDO0FBQUEsZUFBSW1KLGVBQWUsQ0FBQ25KLENBQUQsQ0FBZixDQUFtQnBLLE1BQXZCO0FBQUEsT0FBYixDQUFwQjtBQUNBLFVBQU04VCxLQUFLLEdBQUcsRUFBZDtBQUVBOztBQUNBLGFBQU9DLGlCQUFpQixDQUFDSCxRQUFELEVBQVdDLFdBQVgsRUFBd0JELFFBQVEsQ0FBQzVULE1BQVQsR0FBa0IsQ0FBMUMsQ0FBeEIsRUFBc0U7QUFDcEUsWUFBTWdVLE9BQU8sR0FBR0osUUFBUSxDQUFDL00sTUFBVCxDQUFnQixVQUFDMk0sSUFBRCxFQUFPUyxJQUFQLEVBQWF0SyxDQUFiLEVBQW1CO0FBQ2pENkosVUFBQUEsSUFBSSxDQUFDRyxPQUFPLENBQUNoSyxDQUFELENBQVIsQ0FBSixHQUFtQjRKLGVBQWUsQ0FBQ0ksT0FBTyxDQUFDaEssQ0FBRCxDQUFSLENBQWYsQ0FBNEJzSyxJQUE1QixDQUFuQjtBQUNBLGlCQUFPVCxJQUFQO0FBQ0QsU0FIZSxFQUdiLEVBSGEsQ0FBaEI7QUFLQU0sUUFBQUEsS0FBSyxDQUFDbk8sSUFBTixDQUFXcU8sT0FBWDtBQUNEO0FBQ0Q7QUFFQTs7O0FBQ0EsZUFBU0QsaUJBQVQsQ0FBMkJHLEdBQTNCLEVBQWdDQyxNQUFoQyxFQUF3Q3BVLEtBQXhDLEVBQStDO0FBQzdDLFlBQUlBLEtBQUssS0FBSyxDQUFWLElBQWVtVSxHQUFHLENBQUMsQ0FBRCxDQUFILEtBQVdDLE1BQU0sQ0FBQyxDQUFELENBQU4sR0FBWSxDQUExQyxFQUE2QztBQUMzQztBQUNBLGlCQUFPLEtBQVA7QUFDRDs7QUFFRCxZQUFJRCxHQUFHLENBQUNuVSxLQUFELENBQUgsR0FBYSxDQUFiLEdBQWlCb1UsTUFBTSxDQUFDcFUsS0FBRCxDQUEzQixFQUFvQztBQUNsQ21VLFVBQUFBLEdBQUcsQ0FBQ25VLEtBQUQsQ0FBSCxHQUFhbVUsR0FBRyxDQUFDblUsS0FBRCxDQUFILEdBQWEsQ0FBMUI7QUFDQSxpQkFBTyxJQUFQO0FBQ0Q7O0FBRURtVSxRQUFBQSxHQUFHLENBQUNuVSxLQUFELENBQUgsR0FBYSxDQUFiO0FBQ0EsZUFBT2dVLGlCQUFpQixDQUFDRyxHQUFELEVBQU1DLE1BQU4sRUFBY3BVLEtBQUssR0FBRyxDQUF0QixDQUF4QjtBQUNEOztBQUVELGFBQU8rVCxLQUFQO0FBQ0Q7OztXQUVELGtCQUFnQnZLLENBQWhCLEVBQW1CO0FBQ2pCLGFBQU8sMEJBQVNBLENBQVQsQ0FBUDtBQUNEOzs7OztlQXFqQ1lySixLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGtleW1pcnJvciBmcm9tICdrZXltaXJyb3InO1xuaW1wb3J0IHtEYXRhRmlsdGVyRXh0ZW5zaW9ufSBmcm9tICdAZGVjay5nbC9leHRlbnNpb25zJztcbmltcG9ydCB7Q09PUkRJTkFURV9TWVNURU19IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtUZXh0TGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5cbmltcG9ydCBEZWZhdWx0TGF5ZXJJY29uIGZyb20gJy4vZGVmYXVsdC1sYXllci1pY29uJztcbmltcG9ydCB7ZGlmZlVwZGF0ZVRyaWdnZXJzfSBmcm9tICcuL2xheWVyLXVwZGF0ZSc7XG5cbmltcG9ydCB7XG4gIEFMTF9GSUVMRF9UWVBFUyxcbiAgTk9fVkFMVUVfQ09MT1IsXG4gIFNDQUxFX1RZUEVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgRklFTERfT1BUUyxcbiAgU0NBTEVfRlVOQyxcbiAgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTLFxuICBNQVhfR1BVX0ZJTFRFUlMsXG4gIFVOS05PV05fQ09MT1IsXG4gIFpPT01fTEVWRUxfTElNSVRTXG59IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7Q09MT1JfUkFOR0VTfSBmcm9tICdjb25zdGFudHMvY29sb3ItcmFuZ2VzJztcbmltcG9ydCB7RGF0YVZpekNvbG9yc30gZnJvbSAnY29uc3RhbnRzL2N1c3RvbS1jb2xvci1yYW5nZXMnO1xuaW1wb3J0IHtcbiAgTEFZRVJfVklTX0NPTkZJR1MsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgREVGQVVMVF9DT0xPUl9VSSxcbiAgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gIERFRkFVTFRfTEFZRVJfTEFCRUxcbn0gZnJvbSAnLi9sYXllci1mYWN0b3J5JztcblxuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgaXNQbGFpbk9iamVjdH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge2dldExhdExuZ0JvdW5kcywgbm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcbmltcG9ydCB7Z2V0U2FtcGxlRGF0YX0gZnJvbSAndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItdXRpbHMnO1xuXG5pbXBvcnQge2hleFRvUmdiLCBnZXRDb2xvckdyb3VwQnlOYW1lLCByZXZlcnNlQ29sb3JSYW5nZX0gZnJvbSAndXRpbHMvY29sb3ItdXRpbHMnO1xuaW1wb3J0IHtnZXRNYXNrRXh0ZW5zaW9uUHJvcHN9IGZyb20gJ3V0aWxzL2xheWVyLXV0aWxzJztcbmltcG9ydCB7c2NhbGVPcmRpbmFsfSBmcm9tICdkMy1zY2FsZSc7XG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2luZGV4JykuTGF5ZXJ9IExheWVyQ2xhc3N9ICovXG5cbi8qKlxuICogQXBwcm94LiBudW1iZXIgb2YgcG9pbnRzIHRvIHNhbXBsZSBpbiBhIGxhcmdlIGRhdGEgc2V0XG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTEFZRVJfSURfTEVOR1RIID0gNjtcblxuLy8gTm90ZSwgdGhpcyBpcyBpcyBTVkcgb2Ygc29saWQgY2lyY2xlIGVuY29kZWQgYXMgZGF0YS11cmlcbmNvbnN0IEZBTExCQUNLX0lDT04gPVxuICAnZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFBITjJaeUIyYVdWM1FtOTRQU0l3SURBZ01UQXdJREV3TUNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0TkNpQWdQR05wY21Oc1pTQmplRDBpTlRBaUlHTjVQU0kxTUNJZ2NqMGlOVEFpTHo0TkNqd3ZjM1puUGc9PSc7XG5cbmNvbnN0IE1BWF9TQU1QTEVfU0laRSA9IDUwMDA7XG5jb25zdCBkZWZhdWx0RG9tYWluID0gWzAsIDFdO1xuY29uc3QgZGF0YUZpbHRlckV4dGVuc2lvbiA9IG5ldyBEYXRhRmlsdGVyRXh0ZW5zaW9uKHtmaWx0ZXJTaXplOiBNQVhfR1BVX0ZJTFRFUlN9KTtcblxuY29uc3QgZGVmYXVsdERhdGFBY2Nlc3NvciA9IGRjID0+IGQgPT4gZDtcbmNvbnN0IGRlZmF1bHRHZXRGaWVsZFZhbHVlID0gKGZpZWxkLCBkKSA9PiBmaWVsZC52YWx1ZUFjY2Vzc29yKGQpO1xuXG5leHBvcnQgY29uc3QgT1ZFUkxBWV9UWVBFID0ga2V5bWlycm9yKHtcbiAgZGVja2dsOiBudWxsLFxuICBtYXBib3hnbDogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBsYXllckNvbG9ycyA9IE9iamVjdC52YWx1ZXMoRGF0YVZpekNvbG9ycykubWFwKGhleFRvUmdiKTtcbmZ1bmN0aW9uKiBnZW5lcmF0ZUNvbG9yKCkge1xuICBsZXQgaW5kZXggPSAwO1xuICB3aGlsZSAoaW5kZXggPCBsYXllckNvbG9ycy5sZW5ndGggKyAxKSB7XG4gICAgaWYgKGluZGV4ID09PSBsYXllckNvbG9ycy5sZW5ndGgpIHtcbiAgICAgIGluZGV4ID0gMDtcbiAgICB9XG4gICAgeWllbGQgbGF5ZXJDb2xvcnNbaW5kZXgrK107XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNvbG9yTWFrZXIgPSBnZW5lcmF0ZUNvbG9yKCk7XG5cbi8qKiBAdHlwZSB7TGF5ZXJDbGFzc30gKi9cbmNsYXNzIExheWVyIHtcbiAgY29uc3RydWN0b3IocHJvcHMgPSB7fSkge1xuICAgIHRoaXMuaWQgPSBwcm9wcy5pZCB8fCBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gICAgLy8gbWV0YVxuICAgIHRoaXMubWV0YSA9IHt9O1xuXG4gICAgLy8gdmlzQ29uZmlnU2V0dGluZ3NcbiAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzID0ge307XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmdldERlZmF1bHRMYXllckNvbmZpZyh7XG4gICAgICBjb2x1bW5zOiB0aGlzLmdldExheWVyQ29sdW1ucygpLFxuICAgICAgLi4ucHJvcHNcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBsYXllckljb24oKSB7XG4gICAgcmV0dXJuIERlZmF1bHRMYXllckljb247XG4gIH1cblxuICBnZXQgb3ZlcmxheVR5cGUoKSB7XG4gICAgcmV0dXJuIE9WRVJMQVlfVFlQRS5kZWNrZ2w7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXQgaXNBZ2dyZWdhdGVkKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldCByZXF1aXJlZExheWVyQ29sdW1ucygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgb3B0aW9uYWxDb2x1bW5zKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldCBub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMoKSB7XG4gICAgcmV0dXJuIFsnbGFiZWwnLCAnb3BhY2l0eScsICd0aGlja25lc3MnLCAnaXNWaXNpYmxlJywgJ2hpZGRlbiddO1xuICB9XG5cbiAgZ2V0IHZpc3VhbENoYW5uZWxzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjoge1xuICAgICAgICBwcm9wZXJ0eTogJ2NvbG9yJyxcbiAgICAgICAgZmllbGQ6ICdjb2xvckZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdjb2xvclNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnY29sb3JEb21haW4nLFxuICAgICAgICByYW5nZTogJ2NvbG9yUmFuZ2UnLFxuICAgICAgICBrZXk6ICdjb2xvcicsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLmNvbG9yLFxuICAgICAgICBudWxsVmFsdWU6IE5PX1ZBTFVFX0NPTE9SLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGNvbmZpZyA9PiBjb25maWcuY29sb3JcbiAgICAgIH0sXG4gICAgICBzaXplOiB7XG4gICAgICAgIHByb3BlcnR5OiAnc2l6ZScsXG4gICAgICAgIGZpZWxkOiAnc2l6ZUZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdzaXplU2NhbGUnLFxuICAgICAgICBkb21haW46ICdzaXplRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdzaXplUmFuZ2UnLFxuICAgICAgICBrZXk6ICdzaXplJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuc2l6ZSxcbiAgICAgICAgbnVsbFZhbHVlOiAwLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IDFcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLypcbiAgICogQ29sdW1uIHBhaXJzIG1hcHMgbGF5ZXIgY29sdW1uIHRvIGEgc3BlY2lmaWMgZmllbGQgcGFpcnMsXG4gICAqIEJ5IGRlZmF1bHQsIGl0IGlzIHNldCB0byBudWxsXG4gICAqL1xuICBnZXQgY29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKlxuICAgKiBEZWZhdWx0IHBvaW50IGNvbHVtbiBwYWlycywgY2FuIGJlIHVzZWQgZm9yIHBvaW50IGJhc2VkIGxheWVyczogcG9pbnQsIGljb24gZXRjLlxuICAgKi9cbiAgZ2V0IGRlZmF1bHRQb2ludENvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsYXQ6IHtwYWlyOiAnbG5nJywgZmllbGRQYWlyS2V5OiAnbGF0J30sXG4gICAgICBsbmc6IHtwYWlyOiAnbGF0JywgZmllbGRQYWlyS2V5OiAnbG5nJ31cbiAgICB9O1xuICB9XG5cbiAgLypcbiAgICogRGVmYXVsdCBsaW5rIGNvbHVtbiBwYWlycywgY2FuIGJlIHVzZWQgZm9yIGxpbmsgYmFzZWQgbGF5ZXJzOiBhcmMsIGxpbmUgZXRjXG4gICAqL1xuICBnZXQgZGVmYXVsdExpbmtDb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGF0MDoge3BhaXI6ICdsbmcwJywgZmllbGRQYWlyS2V5OiAnbGF0J30sXG4gICAgICBsbmcwOiB7cGFpcjogJ2xhdDAnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfSxcbiAgICAgIGxhdDE6IHtwYWlyOiAnbG5nMScsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nMToge3BhaXI6ICdsYXQxJywgZmllbGRQYWlyS2V5OiAnbG5nJ31cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIFJlYWN0IGNvbXBvbmVudCBmb3IgdG8gcmVuZGVyIGxheWVyIGluc3RydWN0aW9ucyBpbiBhIG1vZGFsXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IC0gYW4gb2JqZWN0XG4gICAqIEBleGFtcGxlXG4gICAqICByZXR1cm4ge1xuICAgKiAgICBpZDogJ2ljb25JbmZvJyxcbiAgICogICAgdGVtcGxhdGU6IEljb25JbmZvTW9kYWwsXG4gICAqICAgIG1vZGFsUHJvcHM6IHtcbiAgICogICAgICB0aXRsZTogJ0hvdyB0byBkcmF3IGljb25zJ1xuICAgKiAgIH07XG4gICAqIH1cbiAgICovXG4gIGdldCBsYXllckluZm9Nb2RhbCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKlxuICAgKiBHaXZlbiBhIGRhdGFzZXQsIGF1dG9tYXRpY2FsbHkgZmluZCBwcm9wcyB0byBjcmVhdGUgbGF5ZXIgYmFzZWQgb24gaXRcbiAgICogYW5kIHJldHVybiB0aGUgcHJvcHMgYW5kIHByZXZpb3VzIGZvdW5kIGxheWVycy5cbiAgICogQnkgZGVmYXVsdCwgbm8gbGF5ZXJzIHdpbGwgYmUgZm91bmRcbiAgICovXG4gIHN0YXRpYyBmaW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgZm91bmRMYXllcnMpIHtcbiAgICByZXR1cm4ge3Byb3BzOiBbXSwgZm91bmRMYXllcnN9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgYXJyYXkgb2YgcHJlc2V0IHJlcXVpcmVkIGNvbHVtbiBuYW1lc1xuICAgKiBmb3VuZCBmaWVsZCB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIHRvIHNldCBhcyBsYXllciBjb2x1bW5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRGaWVsZHNcbiAgICogQHBhcmFtIHtvYmplY3RbXX0gYWxsRmllbGRzXG4gICAqIEByZXR1cm5zIHtvYmplY3RbXSB8IG51bGx9IGFsbCBwb3NzaWJsZSByZXF1aXJlZCBsYXllciBjb2x1bW4gcGFpcnNcbiAgICovXG4gIHN0YXRpYyBmaW5kRGVmYXVsdENvbHVtbkZpZWxkKGRlZmF1bHRGaWVsZHMsIGFsbEZpZWxkcykge1xuICAgIC8vIGZpbmQgYWxsIG1hdGNoZWQgZmllbGRzIGZvciBlYWNoIHJlcXVpcmVkIGNvbFxuICAgIGNvbnN0IHJlcXVpcmVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZHMpLnJlZHVjZSgocHJldiwga2V5KSA9PiB7XG4gICAgICBjb25zdCByZXF1aXJlZEZpZWxkcyA9IGFsbEZpZWxkcy5maWx0ZXIoXG4gICAgICAgIGYgPT4gZi5uYW1lID09PSBkZWZhdWx0RmllbGRzW2tleV0gfHwgZGVmYXVsdEZpZWxkc1trZXldLmluY2x1ZGVzKGYubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIHByZXZba2V5XSA9IHJlcXVpcmVkRmllbGRzLmxlbmd0aFxuICAgICAgICA/IHJlcXVpcmVkRmllbGRzLm1hcChmID0+ICh7XG4gICAgICAgICAgICB2YWx1ZTogZi5uYW1lLFxuICAgICAgICAgICAgZmllbGRJZHg6IGYuZmllbGRJZHhcbiAgICAgICAgICB9KSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwge30pO1xuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKHJlcXVpcmVkQ29sdW1ucykuZXZlcnkoQm9vbGVhbikpIHtcbiAgICAgIC8vIGlmIGFueSBmaWVsZCBtaXNzaW5nLCByZXR1cm4gbnVsbFxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsUG9zc2libGVDb2x1bW5QYXJpcyhyZXF1aXJlZENvbHVtbnMpO1xuICB9XG5cbiAgc3RhdGljIGdldEFsbFBvc3NpYmxlQ29sdW1uUGFyaXMocmVxdWlyZWRDb2x1bW5zKSB7XG4gICAgLy8gZm9yIG11bHRpcGxlIG1hdGNoZWQgZmllbGQgZm9yIG9uZSByZXF1aXJlZCBjb2x1bW4sIHJldHVybiBtdWx0aXBsZVxuICAgIC8vIGNvbWJpbmF0aW9ucywgZS4gZy4gaWYgY29sdW1uIGEgaGFzIDIgbWF0Y2hlZCwgY29sdW1uIGIgaGFzIDMgbWF0Y2hlZFxuICAgIC8vIDYgcG9zc2libGUgY29sdW1uIHBhaXJzIHdpbGwgYmUgcmV0dXJuZWRcbiAgICBjb25zdCBhbGxLZXlzID0gT2JqZWN0LmtleXMocmVxdWlyZWRDb2x1bW5zKTtcbiAgICBjb25zdCBwb2ludGVycyA9IGFsbEtleXMubWFwKChrLCBpKSA9PiAoKGkgPT09IGFsbEtleXMubGVuZ3RoIC0gMSA/IC0xIDogMCkpKTtcbiAgICBjb25zdCBjb3VudFBlcktleSA9IGFsbEtleXMubWFwKGsgPT4gcmVxdWlyZWRDb2x1bW5zW2tdLmxlbmd0aCk7XG4gICAgY29uc3QgcGFpcnMgPSBbXTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuICAgIHdoaWxlIChpbmNyZW1lbnRQb2ludGVycyhwb2ludGVycywgY291bnRQZXJLZXksIHBvaW50ZXJzLmxlbmd0aCAtIDEpKSB7XG4gICAgICBjb25zdCBuZXdQYWlyID0gcG9pbnRlcnMucmVkdWNlKChwcmV2LCBjdXVyLCBpKSA9PiB7XG4gICAgICAgIHByZXZbYWxsS2V5c1tpXV0gPSByZXF1aXJlZENvbHVtbnNbYWxsS2V5c1tpXV1bY3V1cl07XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfSwge30pO1xuXG4gICAgICBwYWlycy5wdXNoKG5ld1BhaXIpO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG4gICAgLy8gcmVjdXJzaXZlbHkgaW5jcmVtZW50IHBvaW50ZXJzXG4gICAgZnVuY3Rpb24gaW5jcmVtZW50UG9pbnRlcnMocHRzLCBjb3VudHMsIGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPT09IDAgJiYgcHRzWzBdID09PSBjb3VudHNbMF0gLSAxKSB7XG4gICAgICAgIC8vIG5vdGhpbmcgdG8gaW5jcmVtZW50XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHB0c1tpbmRleF0gKyAxIDwgY291bnRzW2luZGV4XSkge1xuICAgICAgICBwdHNbaW5kZXhdID0gcHRzW2luZGV4XSArIDE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBwdHNbaW5kZXhdID0gMDtcbiAgICAgIHJldHVybiBpbmNyZW1lbnRQb2ludGVycyhwdHMsIGNvdW50cywgaW5kZXggLSAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFpcnM7XG4gIH1cblxuICBzdGF0aWMgaGV4VG9SZ2IoYykge1xuICAgIHJldHVybiBoZXhUb1JnYihjKTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyA9IHt9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFJZDogcHJvcHMuZGF0YUlkIHx8IG51bGwsXG4gICAgICB2aXNpYmlsaXR5Qnlab29tOiB7XG4gICAgICAgIG1pbjogcHJvcHMudmlzaWJpbGl0eUJ5Wm9vbT8ubWluIHx8IFpPT01fTEVWRUxfTElNSVRTLm1pbixcbiAgICAgICAgbWF4OiBwcm9wcy52aXNpYmlsaXR5Qnlab29tPy5tYXggfHwgWk9PTV9MRVZFTF9MSU1JVFMubWF4XG4gICAgICB9LFxuICAgICAgbGFiZWw6IHByb3BzLmxhYmVsIHx8IERFRkFVTFRfTEFZRVJfTEFCRUwsXG4gICAgICBjb2xvcjogcHJvcHMuY29sb3IgfHwgY29sb3JNYWtlci5uZXh0KCkudmFsdWUsXG4gICAgICBjb2x1bW5zOiBwcm9wcy5jb2x1bW5zIHx8IG51bGwsXG4gICAgICBpc1Zpc2libGU6IHByb3BzLmlzVmlzaWJsZSB8fCBmYWxzZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBwcm9wcy5pc0NvbmZpZ0FjdGl2ZSB8fCBmYWxzZSxcbiAgICAgIGhpZ2hsaWdodENvbG9yOiBwcm9wcy5oaWdobGlnaHRDb2xvciB8fCBERUZBVUxUX0hJR0hMSUdIVF9DT0xPUixcbiAgICAgIGhpZGRlbjogcHJvcHMuaGlkZGVuIHx8IGZhbHNlLFxuXG4gICAgICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGludG8gc2VwYXJhdGUgdmlzdWFsIENoYW5uZWwgY29uZmlnXG4gICAgICAvLyBjb2xvciBieSBmaWVsZCwgZG9tYWluIGlzIHNldCBieSBmaWx0ZXJzLCBmaWVsZCwgc2NhbGUgdHlwZVxuICAgICAgY29sb3JGaWVsZDogbnVsbCxcbiAgICAgIGNvbG9yRG9tYWluOiBbMCwgMV0sXG4gICAgICBjb2xvclNjYWxlOiBTQ0FMRV9UWVBFUy5xdWFudGlsZSxcblxuICAgICAgLy8gY29sb3IgYnkgc2l6ZSwgZG9tYWluIGlzIHNldCBieSBmaWx0ZXJzLCBmaWVsZCwgc2NhbGUgdHlwZVxuICAgICAgc2l6ZURvbWFpbjogWzAsIDFdLFxuICAgICAgc2l6ZVNjYWxlOiBTQ0FMRV9UWVBFUy5saW5lYXIsXG4gICAgICBzaXplRmllbGQ6IG51bGwsXG5cbiAgICAgIHZpc0NvbmZpZzoge30sXG5cbiAgICAgIHRleHRMYWJlbDogW0RFRkFVTFRfVEVYVF9MQUJFTF0sXG5cbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgY29sb3I6IERFRkFVTFRfQ09MT1JfVUksXG4gICAgICAgIGNvbG9yUmFuZ2U6IERFRkFVTFRfQ09MT1JfVUlcbiAgICAgIH0sXG4gICAgICBhbmltYXRpb246IHtlbmFibGVkOiBmYWxzZX1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgYSB2aXN1YWxDaGFubmVsIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm5zIHt7bGFiZWw6IHN0cmluZywgbWVhc3VyZTogKHN0cmluZ3xzdHJpbmcpfX1cbiAgICovXG4gIGdldFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbihrZXkpIHtcbiAgICAvLyBlLmcuIGxhYmVsOiBDb2xvciwgbWVhc3VyZTogVmVoaWNsZSBUeXBlXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5yYW5nZV0ubGFiZWwsXG4gICAgICBtZWFzdXJlOiB0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdXG4gICAgICAgID8gKHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF0uZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICB0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLm5hbWUpXG4gICAgICAgIDogdGhpcy52aXN1YWxDaGFubmVsc1trZXldLmRlZmF1bHRNZWFzdXJlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmaWVsZCB0byBsYXllciBjb2x1bW4sIHJldHVybiBjb2x1bW4gY29uZmlnXG4gICAqIEBwYXJhbSBrZXkgLSBDb2x1bW4gS2V5XG4gICAqIEBwYXJhbSBmaWVsZCAtIFNlbGVjdGVkIGZpZWxkXG4gICAqIEByZXR1cm5zIHt7fX0gLSBDb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW4oa2V5LCBmaWVsZCkge1xuICAgIC8vIGZpZWxkIHZhbHVlIGNvdWxkIGJlIG51bGwgZm9yIG9wdGlvbmFsIGNvbHVtbnNcbiAgICBjb25zdCB1cGRhdGUgPSBmaWVsZFxuICAgICAgPyB7XG4gICAgICAgICAgdmFsdWU6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgZmllbGRJZHg6IGZpZWxkLmZpZWxkSWR4XG4gICAgICAgIH1cbiAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XToge1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zW2tleV0sXG4gICAgICAgIC4uLnVwZGF0ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgZmllbGQgcGFpciB0byBjb2x1bW4gY29uZmlnLCByZXR1cm4gY29sdW1uIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5IC0gQ29sdW1uIEtleVxuICAgKiBAcGFyYW0gcGFpciAtIGZpZWxkIFBhaXJcbiAgICogQHJldHVybnMge29iamVjdH0gLSBDb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW5QYWlycyhrZXksIHBhaXIpIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uUGFpcnMgfHwgIXRoaXMuY29sdW1uUGFpcnM/LltrZXldKSB7XG4gICAgICAvLyBzaG91bGQgbm90IGVuZCBpbiB0aGlzIHN0YXRlXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuY29sdW1ucztcbiAgICB9XG5cbiAgICBjb25zdCB7cGFpcjogcGFydG5lcktleSwgZmllbGRQYWlyS2V5fSA9IHRoaXMuY29sdW1uUGFpcnM/LltrZXldO1xuICAgIGNvbnN0IHtmaWVsZFBhaXJLZXk6IHBhcnRuZXJGaWVsZFBhaXJLZXl9ID0gdGhpcy5jb2x1bW5QYWlycz8uW3BhcnRuZXJLZXldO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XTogcGFpcltmaWVsZFBhaXJLZXldLFxuICAgICAgW3BhcnRuZXJLZXldOiBwYWlyW3BhcnRuZXJGaWVsZFBhaXJLZXldXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSByYWRpdXMgem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXIgfCB2b2lkfSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Wm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KDIsIE1hdGgubWF4KDE0IC0gem9vbSArIHpvb21PZmZzZXQsIDApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSBlbGV2YXRpb24gem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXIgfCB2b2lkfSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0RWxldmF0aW9uWm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9KSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5lbmFibGVFbGV2YXRpb25ab29tRmFjdG9yXG4gICAgICA/IE1hdGgucG93KDIsIE1hdGgubWF4KDggLSB6b29tICsgem9vbU9mZnNldCwgMCkpXG4gICAgICA6IDE7XG4gIH1cblxuICBmb3JtYXRMYXllckRhdGEoZGF0YXNldHMsIGZpbHRlcmVkSW5kZXgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZW5kZXJMYXllcigpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRIb3ZlckRhdGEob2JqZWN0LCBkYXRhQ29udGFpbmVyKSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIGVhY2ggZW50cnkgb2YgbGF5ZXJEYXRhIHNob3VsZCBoYXZlIGFuIGluZGV4IG9mIGEgcm93IGluIHRoZSBvcmlnaW5hbCBkYXRhIGNvbnRhaW5lci5cbiAgICAvLyBFYWNoIGxheWVyIGNhbiBpbXBsZW1lbnQgaXRzIG93biBnZXRIb3ZlckRhdGEgbWV0aG9kXG4gICAgcmV0dXJuIGRhdGFDb250YWluZXIucm93KG9iamVjdC5pbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBjaGFuZ2UgbGF5ZXIgdHlwZSwgdHJ5IHRvIGNvcHkgb3ZlciBsYXllciBjb25maWdzIGFzIG11Y2ggYXMgcG9zc2libGVcbiAgICogQHBhcmFtIGNvbmZpZ1RvQ29weSAtIGNvbmZpZyB0byBjb3B5IG92ZXJcbiAgICogQHBhcmFtIHZpc0NvbmZpZ1NldHRpbmdzIC0gdmlzQ29uZmlnIHNldHRpbmdzIG9mIGNvbmZpZyB0byBjb3B5XG4gICAqL1xuICBhc3NpZ25Db25maWdUb0xheWVyKGNvbmZpZ1RvQ29weSwgdmlzQ29uZmlnU2V0dGluZ3MpIHtcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIHZpc3VhbENoYW5uZWwgZmllbGRcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIGNvbG9yIHJhbmdlLCByZXZlcnNlZDogaXMgbm90IGEga2V5IGJ5IGRlZmF1bHRcbiAgICBjb25zdCBzaGFsbG93Q29weSA9IFsnY29sb3JSYW5nZScsICdzdHJva2VDb2xvclJhbmdlJ10uY29uY2F0KFxuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5tYXAodiA9PiB2LmZpZWxkKVxuICAgICk7XG5cbiAgICAvLyBkb24ndCBjb3B5IG92ZXIgZG9tYWluIGFuZCBhbmltYXRpb25cbiAgICBjb25zdCBub3RUb0NvcHkgPSBbJ2FuaW1hdGlvbiddLmNvbmNhdChPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLm1hcCh2ID0+IHYuZG9tYWluKSk7XG4gICAgLy8gaWYgcmFuZ2UgaXMgZm9yIHRoZSBzYW1lIHByb3BlcnR5IGdyb3VwIGNvcHkgaXQsIG90aGVyd2lzZSwgbm90IHRvIGNvcHlcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2godiA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbmZpZ1RvQ29weS52aXNDb25maWdbdi5yYW5nZV0gJiZcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXSAmJlxuICAgICAgICB2aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cCAhPT0gdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cFxuICAgICAgKSB7XG4gICAgICAgIG5vdFRvQ29weS5wdXNoKHYucmFuZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZG9uJ3QgY29weSBvdmVyIHZpc3VhbENoYW5uZWwgcmFuZ2VcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgY29waWVkID0gdGhpcy5jb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZywgY29uZmlnVG9Db3B5LCB7XG4gICAgICBzaGFsbG93Q29weSxcbiAgICAgIG5vdFRvQ29weVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoY29waWVkKTtcbiAgICAvLyB2YWxpZGF0ZSB2aXN1YWxDaGFubmVsIGZpZWxkIHR5cGUgYW5kIHNjYWxlIHR5cGVzXG4gICAgT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgLypcbiAgICogUmVjdXJzaXZlbHkgY29weSBjb25maWcgb3ZlciB0byBhbiBlbXB0eSBsYXllclxuICAgKiB3aGVuIHJlY2VpdmVkIHNhdmVkIGNvbmZpZywgb3IgY29weSBjb25maWcgb3ZlciBmcm9tIGEgZGlmZmVyZW50IGxheWVyIHR5cGVcbiAgICogbWFrZSBzdXJlIHRvIG9ubHkgY29weSBvdmVyIHZhbHVlIHRvIGV4aXN0aW5nIGtleXNcbiAgICogQHBhcmFtIHtvYmplY3R9IGN1cnJlbnRDb25maWcgLSBleGlzdGluZyBjb25maWcgdG8gYmUgb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1RvQ29weSAtIG5ldyBDb25maWcgdG8gY29weSBvdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHNoYWxsb3dDb3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyB0byBub3QgdG8gYmUgZGVlcCBjb3BpZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gbm90VG9Db3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyBub3QgdG8gY29weVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGNvcGllZCBjb25maWdcbiAgICovXG4gIGNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnLCBjb25maWdUb0NvcHksIHtzaGFsbG93Q29weSA9IFtdLCBub3RUb0NvcHkgPSBbXX0gPSB7fSkge1xuICAgIGNvbnN0IGNvcGllZCA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaXNQbGFpbk9iamVjdChjdXJyZW50Q29uZmlnW2tleV0pICYmXG4gICAgICAgIGlzUGxhaW5PYmplY3QoY29uZmlnVG9Db3B5W2tleV0pICYmXG4gICAgICAgICFzaGFsbG93Q29weS5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KVxuICAgICAgKSB7XG4gICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGFzc2lnbiBvYmplY3QgdmFsdWVcbiAgICAgICAgY29waWVkW2tleV0gPSB0aGlzLmNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnW2tleV0sIGNvbmZpZ1RvQ29weVtrZXldLCB7XG4gICAgICAgICAgc2hhbGxvd0NvcHksXG4gICAgICAgICAgbm90VG9Db3B5XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChub3ROdWxsb3JVbmRlZmluZWQoY29uZmlnVG9Db3B5W2tleV0pICYmICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAvLyBjb3B5XG4gICAgICAgIGNvcGllZFtrZXldID0gY29uZmlnVG9Db3B5W2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBrZWVwIGV4aXN0aW5nXG4gICAgICAgIGNvcGllZFtrZXldID0gY3VycmVudENvbmZpZ1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvcGllZDtcbiAgfVxuXG4gIHJlZ2lzdGVyVmlzQ29uZmlnKGxheWVyVmlzQ29uZmlncykge1xuICAgIE9iamVjdC5rZXlzKGxheWVyVmlzQ29uZmlncykuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXSkge1xuICAgICAgICAvLyBpZiBhc3NpZ25lZCBvbmUgb2YgZGVmYXVsdCBMQVlFUl9DT05GSUdTXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IExBWUVSX1ZJU19DT05GSUdTW2xheWVyVmlzQ29uZmlnc1tpdGVtXV0uZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW2l0ZW1dID0gTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXTtcbiAgICAgIH0gZWxzZSBpZiAoWyd0eXBlJywgJ2RlZmF1bHRWYWx1ZSddLmV2ZXJ5KHAgPT4gbGF5ZXJWaXNDb25maWdzW2l0ZW1dLmhhc093blByb3BlcnR5KHApKSkge1xuICAgICAgICAvLyBpZiBwcm92aWRlZCBjdXN0b21pemVkIHZpc0NvbmZpZywgYW5kIGhhcyB0eXBlICYmIGRlZmF1bHRWYWx1ZVxuICAgICAgICAvLyBUT0RPOiBmdXJ0aGVyIGNoZWNrIGlmIGN1c3RvbWl6ZWQgdmlzQ29uZmlnIGlzIHZhbGlkXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IGxheWVyVmlzQ29uZmlnc1tpdGVtXS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbaXRlbV0gPSBsYXllclZpc0NvbmZpZ3NbaXRlbV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRMYXllckNvbHVtbnMoKSB7XG4gICAgY29uc3QgY29sdW1uVmFsaWRhdG9ycyA9IHRoaXMuY29sdW1uVmFsaWRhdG9ycyB8fCB7fTtcbiAgICBjb25zdCByZXF1aXJlZCA9IHRoaXMucmVxdWlyZWRMYXllckNvbHVtbnMucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGNvbHVtblZhbGlkYXRvcnNba2V5XVxuICAgICAgICAgID8ge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTEsIHZhbGlkYXRvcjogY29sdW1uVmFsaWRhdG9yc1trZXldfVxuICAgICAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICBjb25zdCBvcHRpb25hbCA9IHRoaXMub3B0aW9uYWxDb2x1bW5zLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMSwgb3B0aW9uYWw6IHRydWV9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIHJldHVybiB7Li4ucmVxdWlyZWQsIC4uLm9wdGlvbmFsfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gey4uLnRoaXMuY29uZmlnLCAuLi5uZXdDb25maWd9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcudmlzQ29uZmlnID0gey4uLnRoaXMuY29uZmlnLnZpc0NvbmZpZywgLi4ubmV3VmlzQ29uZmlnfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpIHtcbiAgICBjb25zdCB7Y29sb3JVSTogcHJldmlvdXMsIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghaXNQbGFpbk9iamVjdChuZXdDb25maWcpIHx8IHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgY29sb3JVSVByb3AgPSBPYmplY3QuZW50cmllcyhuZXdDb25maWcpLnJlZHVjZSgoYWNjdSwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogaXNQbGFpbk9iamVjdChhY2N1W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsdWUpID8gey4uLmFjY3Vba2V5XSwgLi4udmFsdWV9IDogdmFsdWVcbiAgICAgIH07XG4gICAgfSwgcHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSk7XG5cbiAgICBjb25zdCBjb2xvclVJID0ge1xuICAgICAgLi4ucHJldmlvdXMsXG4gICAgICBbcHJvcF06IGNvbG9yVUlQcm9wXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe2NvbG9yVUl9KTtcbiAgICAvLyBpZiBjb2xvclVJW3Byb3BdIGlzIGNvbG9yUmFuZ2VcbiAgICBjb25zdCBpc0NvbG9yUmFuZ2UgPSB2aXNDb25maWdbcHJvcF0gJiYgdmlzQ29uZmlnW3Byb3BdLmNvbG9ycztcblxuICAgIGlmIChpc0NvbG9yUmFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZShuZXdDb25maWcsIHByb3ApO1xuICAgICAgdGhpcy51cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgICAgdGhpcy51cGRhdGVDdXN0b21QYWxldHRlKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlQ3VzdG9tUGFsZXR0ZShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKSB7XG4gICAgaWYgKCFuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZyB8fCAhbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuY3VzdG9tKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghdmlzQ29uZmlnW3Byb3BdKSByZXR1cm47XG4gICAgY29uc3Qge2NvbG9yc30gPSB2aXNDb25maWdbcHJvcF07XG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IHtcbiAgICAgIC4uLmNvbG9yVUlbcHJvcF0uY3VzdG9tUGFsZXR0ZSxcbiAgICAgIG5hbWU6ICdDdXN0b20gUGFsZXR0ZScsXG4gICAgICBjb2xvcnM6IFsuLi5jb2xvcnNdXG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgLi4uY29sb3JVSSxcbiAgICAgICAgW3Byb3BdOiB7XG4gICAgICAgICAgLi4uY29sb3JVSVtwcm9wXSxcbiAgICAgICAgICBjdXN0b21QYWxldHRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogaWYgb3BlbiBkcm9wZG93biBhbmQgcHJvcCBpcyBjb2xvciByYW5nZVxuICAgKiBBdXRvbWF0aWNhbGx5IHNldCBjb2xvclJhbmdlQ29uZmlnJ3Mgc3RlcCwgcmV2ZXJzZWQgYW5kIHR5cGVcbiAgICogQHBhcmFtIHsqfSBuZXdDb25maWdcbiAgICogQHBhcmFtIHsqfSBwcm9wXG4gICAqL1xuICB1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlKG5ld0NvbmZpZywgcHJvcCkge1xuICAgIGlmICh0eXBlb2YgbmV3Q29uZmlnLnNob3dEcm9wZG93biAhPT0gJ251bWJlcicpIHJldHVybjtcblxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIC4uLmNvbG9yVUksXG4gICAgICAgIFtwcm9wXToge1xuICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0sXG4gICAgICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAgICAgLi4uY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICAgICAgdHlwZTogdmlzQ29uZmlnW3Byb3BdLnR5cGUsXG4gICAgICAgICAgICBzdGVwczogdmlzQ29uZmlnW3Byb3BdLmNvbG9ycy5sZW5ndGgsXG4gICAgICAgICAgICByZXZlcnNlZDogQm9vbGVhbih2aXNDb25maWdbcHJvcF0ucmV2ZXJzZWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICB1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApIHtcbiAgICAvLyBvbmx5IHVwZGF0ZSBjb2xvclJhbmdlIGlmIGNoYW5nZXMgaW4gVUkgaXMgbWFkZSB0byAncmV2ZXJzZWQnLCAnc3RlcHMnIG9yIHN0ZXBzXG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnICYmXG4gICAgICBbJ3JldmVyc2VkJywgJ3N0ZXBzJ10uc29tZShcbiAgICAgICAga2V5ID0+XG4gICAgICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnW2tleV0gIT09XG4gICAgICAgICAgICAocHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSkuY29sb3JSYW5nZUNvbmZpZ1trZXldXG4gICAgICApO1xuICAgIGlmICghc2hvdWxkVXBkYXRlKSByZXR1cm47XG5cbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHtzdGVwcywgcmV2ZXJzZWR9ID0gY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnO1xuICAgIGNvbnN0IGNvbG9yUmFuZ2UgPSB2aXNDb25maWdbcHJvcF07XG4gICAgLy8gZmluZCBiYXNlZCBvbiBzdGVwIG9yIHJldmVyc2VkXG4gICAgbGV0IHVwZGF0ZTtcbiAgICBpZiAobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoJ3N0ZXBzJykpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ2V0Q29sb3JHcm91cEJ5TmFtZShjb2xvclJhbmdlKTtcblxuICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgIGNvbnN0IHNhbWVHcm91cCA9IENPTE9SX1JBTkdFUy5maWx0ZXIoY3IgPT4gZ2V0Q29sb3JHcm91cEJ5TmFtZShjcikgPT09IGdyb3VwKTtcblxuICAgICAgICB1cGRhdGUgPSBzYW1lR3JvdXAuZmluZChjciA9PiBjci5jb2xvcnMubGVuZ3RoID09PSBzdGVwcyk7XG5cbiAgICAgICAgaWYgKHVwZGF0ZSAmJiBjb2xvclJhbmdlLnJldmVyc2VkKSB7XG4gICAgICAgICAgdXBkYXRlID0gcmV2ZXJzZUNvbG9yUmFuZ2UodHJ1ZSwgdXBkYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGRhdGUgJiYgY29sb3JSYW5nZS5jb2xvck1hcCkge1xuICAgICAgICAgIHVwZGF0ZSA9IHRoaXMudXBkYXRlQ29sb3JNYXAocHJvcCwgY29sb3JSYW5nZS5jb2xvck1hcCwgdXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgncmV2ZXJzZWQnKSkge1xuICAgICAgdXBkYXRlID0gcmV2ZXJzZUNvbG9yUmFuZ2UocmV2ZXJzZWQsIHVwZGF0ZSB8fCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtbcHJvcF06IHVwZGF0ZX0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbG9yTWFwKHByb3AsIGNvbG9yTWFwLCBjb2xvclJhbmdlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHtmaWVsZCwgZG9tYWlufSA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YWx1ZSA9PiB2YWx1ZS5yYW5nZSA9PT0gcHJvcCk7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuY29uZmlnW2ZpZWxkXT8udHlwZTtcblxuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDYXRlZ29yeUNvbG9yTWFwKGNvbG9yTWFwLCB0aGlzLmNvbmZpZ1tkb21haW5dLCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICAvLyBJZiBubyB0eXBlIG9yIHR5cGUgaXMgbm90IHN0cmluZywgYm9vbGVhbiBvciBkYXRlXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlTnVtZXJpY0NvbG9yTWFwKGNvbG9yTWFwLCB0aGlzLmNvbmZpZ1tkb21haW5dLCBjb2xvclJhbmdlKTtcbiAgfVxuXG4gIHVwZGF0ZUNhdGVnb3J5Q29sb3JNYXAoY29sb3JNYXAsIGRvbWFpbiwgY29sb3JSYW5nZSkge1xuICAgIGNvbnN0IGNvbG9ycyA9IGNvbG9yUmFuZ2UuY29sb3JzO1xuICAgIGNvbnN0IGFzc2lnbmVkQ2F0ZWdvcmllcyA9IFtdO1xuICAgIGNvbnN0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAuc2xpY2UoMCwgY29sb3JzLmxlbmd0aCkubWFwKChjTWFwLCBpbmRleCkgPT4ge1xuICAgICAgYXNzaWduZWRDYXRlZ29yaWVzLnB1c2goY01hcFswXSk7XG4gICAgICByZXR1cm4gW2NNYXBbMF0sIGNvbG9yc1tpbmRleF1dO1xuICAgIH0pO1xuICAgIGNvbnN0IHVuYXNzaWduZWRDb2xvcnMgPSBjb2xvcnMuc2xpY2UobmV3Q29sb3JNYXAubGVuZ3RoLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIGZvciAoY29uc3QgY29sb3Igb2YgdW5hc3NpZ25lZENvbG9ycykge1xuICAgICAgY29uc3QgY2F0ZWdvcnkgPSBkb21haW4uZmluZChkID0+ICFhc3NpZ25lZENhdGVnb3JpZXMuaW5jbHVkZXMoZCkpO1xuICAgICAgaWYgKCFjYXRlZ29yeSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGFzc2lnbmVkQ2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTtcbiAgICAgIG5ld0NvbG9yTWFwLnB1c2goW2NhdGVnb3J5LCBjb2xvcl0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29sb3JSYW5nZSxcbiAgICAgIGNvbG9yTWFwOiBuZXdDb2xvck1hcFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVOdW1lcmljQ29sb3JNYXAoY29sb3JNYXAsIGRvbWFpbiwgdXBkYXRlKSB7XG4gICAgY29uc3QgY29sb3JzID0gdXBkYXRlLmNvbG9ycztcbiAgICBsZXQgbmV3Q29sb3JNYXAgPSBjb2xvck1hcC5zbGljZSgwLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIG5ld0NvbG9yTWFwID0gbmV3Q29sb3JNYXAubWFwKChjTWFwLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCA9PT0gbmV3Q29sb3JNYXAubGVuZ3RoIC0gMSA/IG51bGwgOiBjTWFwWzBdO1xuICAgICAgcmV0dXJuIFt2YWx1ZSwgY29sb3JzW2luZGV4XV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5hc3NpZ25lZENvbG9ycyA9IGNvbG9ycy5zbGljZShuZXdDb2xvck1hcC5sZW5ndGgsIGNvbG9ycy5sZW5ndGgpO1xuXG4gICAgaWYgKHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29sb3JNYXBWYWx1ZXMgPSBjb2xvck1hcC5tYXAoYyA9PiBjWzBdKS5maWx0ZXIoYyA9PiB0eXBlb2YgYyA9PT0gJ251bWJlcicpO1xuICAgICAgY29uc3QgbWF4VmFsdWUgPSBNYXRoLm1heCguLi5jb2xvck1hcFZhbHVlcywgZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXSk7XG4gICAgICBjb25zdCBwcmV2VmFsdWUgPSBuZXdDb2xvck1hcFtuZXdDb2xvck1hcC5sZW5ndGggLSAyXVswXTtcbiAgICAgIGNvbnN0IHN0ZXAgPSAobWF4VmFsdWUgLSBwcmV2VmFsdWUpIC8gKHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoICsgMSk7XG4gICAgICBuZXdDb2xvck1hcFtuZXdDb2xvck1hcC5sZW5ndGggLSAxXVswXSA9IHByZXZWYWx1ZSArIHN0ZXA7XG5cbiAgICAgIGZvciAoY29uc3QgW2ksIGNvbG9yXSBvZiB1bmFzc2lnbmVkQ29sb3JzLmVudHJpZXMoKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGkgPT09IHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoIC0gMSA/IG51bGwgOiBwcmV2VmFsdWUgKyAoc3RlcCAqIChpICsgMikpO1xuICAgICAgICBuZXdDb2xvck1hcC5wdXNoKFt2YWx1ZSwgY29sb3JdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnVwZGF0ZSxcbiAgICAgIGNvbG9yTWFwOiBuZXdDb2xvck1hcFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBsYXllciBoYXMgYWxsIGNvbHVtbnNcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHllcyBvciBub1xuICAgKi9cbiAgaGFzQWxsQ29sdW1ucygpIHtcbiAgICBjb25zdCB7Y29sdW1uc30gPSB0aGlzLmNvbmZpZztcbiAgICByZXR1cm4gKFxuICAgICAgKGNvbHVtbnMgJiZcbiAgICAgIE9iamVjdC52YWx1ZXMoY29sdW1ucykuZXZlcnkodiA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHYub3B0aW9uYWwgfHwgKHYudmFsdWUgJiYgdi5maWVsZElkeCA+IC0xKSk7XG4gICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgbGF5ZXIgaGFzIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gbGF5ZXJEYXRhXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB5ZXMgb3Igbm9cbiAgICovXG4gIGhhc0xheWVyRGF0YShsYXllckRhdGEpIHtcbiAgICBpZiAoIWxheWVyRGF0YSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbihsYXllckRhdGEuZGF0YSAmJiBsYXllckRhdGEuZGF0YS5sZW5ndGgpO1xuICB9XG5cbiAgaXNWYWxpZFRvU2F2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlICYmIHRoaXMuaGFzQWxsQ29sdW1ucygpO1xuICB9XG5cbiAgc2hvdWxkUmVuZGVyTGF5ZXIoZGF0YSkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy50eXBlICYmXG4gICAgICB0aGlzLmhhc0FsbENvbHVtbnMoKSAmJlxuICAgICAgdGhpcy5oYXNMYXllckRhdGEoZGF0YSkgJiZcbiAgICAgIHR5cGVvZiB0aGlzLnJlbmRlckxheWVyID09PSAnZnVuY3Rpb24nKVxuICAgICk7XG4gIH1cblxuICBnZXRDb2xvclNjYWxlKGNvbG9yU2NhbGUsIGNvbG9yRG9tYWluLCBjb2xvclJhbmdlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JSYW5nZS5jb2xvck1hcCkpIHtcbiAgICAgIGNvbnN0IGNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICBjb2xvclJhbmdlLmNvbG9yTWFwLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgICBjTWFwLnNldChrLCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyBoZXhUb1JnYih2KSA6IHYpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEB0cy1pZ25vcmUgZDMgc2NhbGVcbiAgICAgIGNvbnN0IHNjYWxlID0gU0NBTEVfRlVOQ1tjb2xvclNjYWxlXSgpXG4gICAgICAgIC5kb21haW4oQXJyYXkuZnJvbShjTWFwLmtleXMoKSkpXG4gICAgICAgIC5yYW5nZShBcnJheS5mcm9tKGNNYXAudmFsdWVzKCkpKVxuICAgICAgICAudW5rbm93bihVTktOT1dOX0NPTE9SKTtcbiAgICAgIHJldHVybiBzY2FsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRWaXNDaGFubmVsU2NhbGUoY29sb3JTY2FsZSwgY29sb3JEb21haW4sIGNvbG9yUmFuZ2UuY29sb3JzLm1hcChoZXhUb1JnYikpO1xuICB9XG5cbiAgZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlKHJhbmdlKSB7XG4gICAgbGV0IHVua25vd25WYWx1ZSA9IEZBTExCQUNLX0lDT047XG4gICAgaWYgKCFyYW5nZSkge1xuICAgICAgcmV0dXJuICgpID0+IHVua25vd25WYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXBwaW5nID0gbmV3IE1hcCgpO1xuXG4gICAgZm9yIChjb25zdCB7dmFsdWUsIG1hcmtlclVybH0gb2YgcmFuZ2UpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB1bmtub3duVmFsdWUgPSBtYXJrZXJVcmw7XG4gICAgICB9IGVsc2UgaWYgKG1hcmtlclVybCkge1xuICAgICAgICBtYXBwaW5nLnNldCh2YWx1ZSwgbWFya2VyVXJsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlIGQzIHNjYWxlXG4gICAgY29uc3Qgc2NhbGUgPSBzY2FsZU9yZGluYWwoKVxuICAgICAgLmRvbWFpbihBcnJheS5mcm9tKG1hcHBpbmcua2V5cygpKSlcbiAgICAgIC5yYW5nZShBcnJheS5mcm9tKG1hcHBpbmcudmFsdWVzKCkpKVxuICAgICAgLnVua25vd24odW5rbm93blZhbHVlKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHZpc3VhbCBjaGFubmVscyB0byBkZWNrLmdsIGFjY2Vzb3JzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbSBQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtLmRhdGFBY2Nlc3NvciBBY2Nlc3Mga2VwbGVyLmdsIGxheWVyIGRhdGEgZnJvbSBkZWNrLmdsIGxheWVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnKS5EYXRhQ29udGFpbmVySW50ZXJmYWNlfSBwYXJhbS5kYXRhQ29udGFpbmVyIERhdGFDb250YWluZXIgdG8gdXNlIHVzZSB3aXRoIGRhdGFBY2Nlc3NvclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGF0dHJpYnV0ZUFjY2Vzc29ycyAtIGRlY2suZ2wgbGF5ZXIgYXR0cmlidXRlIGFjY2Vzc29yc1xuICAgKi9cbiAgZ2V0QXR0cmlidXRlQWNjZXNzb3JzKHtkYXRhQWNjZXNzb3IgPSBkZWZhdWx0RGF0YUFjY2Vzc29yLCBkYXRhQ29udGFpbmVyfSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZUFjY2Vzc29ycyA9IHt9O1xuXG4gICAgT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZmllbGQsXG4gICAgICAgIGZpeGVkLFxuICAgICAgICBzY2FsZSxcbiAgICAgICAgZG9tYWluLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgYWNjZXNzb3IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWUsXG4gICAgICAgIG51bGxWYWx1ZSxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZSxcbiAgICAgICAgYWdncmVnYXRpb25cbiAgICAgIH0gPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuXG4gICAgICBjb25zdCBzaG91bGRHZXRTY2FsZSA9IEJvb2xlYW4oc2NhbGUgJiYgdGhpcy5jb25maWdbZmllbGRdKTtcblxuICAgICAgaWYgKHNob3VsZEdldFNjYWxlKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBbdGhpcy5jb25maWdbc2NhbGVdLCB0aGlzLmNvbmZpZ1tkb21haW5dLCB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdXTtcbiAgICAgICAgY29uc3QgaXNGaXhlZCA9IGZpeGVkICYmIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tmaXhlZF07XG4gICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGRlY2xhcmUgYXMgY29uc3QgYWxsIHRoZSBwYXJhbWV0ZXJzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGJlIHVzZSBpbiB0aGUgZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSBjYWxsXG4gICAgICAgIC8vIG90aGVyd2lzZSwgdGhlIG9sZExheWVyRGF0YSBwYXJhbWV0ZXIgaW4gZm9ybWF0TGF5ZXJEYXRhIG1ldGhvZCB3aWxsIGJlIHdyb25nICh5b3UgY2FuIGNoZWNrIHRoZSBmb3JtYXRMYXllckRhdGEgVGlsZUxheWVyIG1ldGhvZCBpbiBCdWlsZGVyIGFzIGV4YW1wbGUpXG4gICAgICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy5jb25maWdbZmllbGRdO1xuICAgICAgICBjb25zdCBhZ2dyZWdhdGlvblZhbHVlID0gdGhpcy5jb25maWcudmlzQ29uZmlnW2FnZ3JlZ2F0aW9uXTtcblxuICAgICAgICBjb25zdCBzY2FsZUZ1bmN0aW9uID1cbiAgICAgICAgICBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvclxuICAgICAgICAgICAgPyB0aGlzLmdldENvbG9yU2NhbGUoLi4uYXJncylcbiAgICAgICAgICAgIDogY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY3VzdG9tTWFya2VyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlKHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0pXG4gICAgICAgICAgICA6IHRoaXMuZ2V0VmlzQ2hhbm5lbFNjYWxlKC4uLmFyZ3MsIGlzRml4ZWQpO1xuXG4gICAgICAgIGF0dHJpYnV0ZUFjY2Vzc29yc1thY2Nlc3Nvcl0gPSBkID0+XG4gICAgICAgICAgdGhpcy5nZXRFbmNvZGVkQ2hhbm5lbFZhbHVlKFxuICAgICAgICAgICAgc2NhbGVGdW5jdGlvbixcbiAgICAgICAgICAgIGRhdGFBY2Nlc3NvcihkYXRhQ29udGFpbmVyKShkKSxcbiAgICAgICAgICAgIGZpZWxkQ29uZmlnLFxuICAgICAgICAgICAgYWdncmVnYXRpb25WYWx1ZSxcbiAgICAgICAgICAgIG51bGxWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBnZXRBdHRyaWJ1dGVWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZ2V0QXR0cmlidXRlVmFsdWUodGhpcy5jb25maWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9XG4gICAgICAgICAgdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSkge1xuICAgICAgICBDb25zb2xlLndhcm4oYEZhaWxlZCB0byBwcm92aWRlIGFjY2Vzc29yIGZ1bmN0aW9uIGZvciAke2FjY2Vzc29yIHx8IGNoYW5uZWx9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXR0cmlidXRlQWNjZXNzb3JzO1xuICB9XG5cbiAgZ2V0VmlzQ2hhbm5lbFNjYWxlKHNjYWxlLCBkb21haW4sIHJhbmdlLCBmaXhlZCkge1xuICAgIGlmIChzY2FsZSA9PT0gU0NBTEVfVFlQRVMub3JkaW5hbCkge1xuICAgICAgLy8gQHRzLWlnbm9yZSBkMy1zY2FsZSB0eXBlXG4gICAgICByZXR1cm4gU0NBTEVfRlVOQ1tzY2FsZV0oKVxuICAgICAgICAuZG9tYWluKGRvbWFpbi5zbGljZSgwLCByYW5nZS5sZW5ndGgpKVxuICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgIC51bmtub3duKFVOS05PV05fQ09MT1IpO1xuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmUgZDMtc2NhbGUgdHlwZVxuICAgIHJldHVybiBTQ0FMRV9GVU5DW2ZpeGVkID8gJ2xpbmVhcicgOiBzY2FsZV0oKVxuICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAucmFuZ2UoZml4ZWQgPyBkb21haW4gOiByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgYm91bmRzIG9mIHRoZSBkYXRhLlxuICAgKiBAcGFyYW0ge2ltcG9ydCgndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItaW50ZXJmYWNlJykuRGF0YUNvbnRhaW5lckludGVyZmFjZX0gZGF0YUNvbnRhaW5lciBEYXRhQ29udGFpbmVyIHRvIGNhbGN1bGF0ZSBib3VuZHMgZm9yLlxuICAgKiBAcGFyYW0geyhkOiB7aW5kZXg6IG51bWJlcn0sIGRjOiBpbXBvcnQoJ3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLWludGVyZmFjZScpLkRhdGFDb250YWluZXJJbnRlcmZhY2UpID0+IG51bWJlcltdfSBnZXRQb3NpdGlvbiBBY2Nlc3Mga2VwbGVyLmdsIGxheWVyIGRhdGEgZnJvbSBkZWNrLmdsIGxheWVyXG4gICAqIEByZXR1cm4ge251bWJlcltdfG51bGx9IGJvdW5kcyBvZiB0aGUgZGF0YS5cbiAgICovXG4gIGdldFBvaW50c0JvdW5kcyhkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIG5vIG5lZWQgdG8gbG9vcCB0aHJvdWdoIHRoZSBlbnRpcmUgZGF0YXNldFxuICAgIC8vIGdldCBhIHNhbXBsZSBvZiBkYXRhIHRvIGNhbGN1bGF0ZSBib3VuZHNcbiAgICBjb25zdCBzYW1wbGVEYXRhID1cbiAgICAgIGRhdGFDb250YWluZXIubnVtUm93cygpID4gTUFYX1NBTVBMRV9TSVpFXG4gICAgICAgID8gZ2V0U2FtcGxlRGF0YShkYXRhQ29udGFpbmVyLCBNQVhfU0FNUExFX1NJWkUpXG4gICAgICAgIDogZGF0YUNvbnRhaW5lcjtcblxuICAgIGNvbnN0IHBvaW50cyA9IHNhbXBsZURhdGEubWFwSW5kZXgoZ2V0UG9zaXRpb24pO1xuXG4gICAgY29uc3QgbGF0Qm91bmRzID0gZ2V0TGF0TG5nQm91bmRzKHBvaW50cywgMSwgWy05MCwgOTBdKTtcbiAgICBjb25zdCBsbmdCb3VuZHMgPSBnZXRMYXRMbmdCb3VuZHMocG9pbnRzLCAwLCBbLTE4MCwgMTgwXSk7XG5cbiAgICBpZiAoIWxhdEJvdW5kcyB8fCAhbG5nQm91bmRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gW2xuZ0JvdW5kc1swXSwgbGF0Qm91bmRzWzBdLCBsbmdCb3VuZHNbMV0sIGxhdEJvdW5kc1sxXV07XG4gIH1cblxuICBnZXRDaGFuZ2VkVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzKSB7XG4gICAgY29uc3QgdHJpZ2dlckNoYW5nZWQgPSBkaWZmVXBkYXRlVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzLCB0aGlzLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMpO1xuICAgIHRoaXMuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IGRhdGFVcGRhdGVUcmlnZ2VycztcblxuICAgIHJldHVybiB0cmlnZ2VyQ2hhbmdlZDtcbiAgfVxuXG4gIGdldEVuY29kZWRDaGFubmVsVmFsdWUoXG4gICAgc2NhbGUsXG4gICAgZGF0YSxcbiAgICBmaWVsZCxcbiAgICAvLyBJbiBidWlsZGVyIHdlIG92ZXJ3cml0ZSB0aGUgZ2V0VmFsdWUgZnVuY3Rpb24gYW5kIHdlIHVzZSB0aGUgX2FnZ3JlZ2F0aW9uIHBhcmFtZXRlciBpbiBzcGF0aWFsIGluZGV4IGxheWVycyBhcyB0aGUgUXVhZGtleUxheWVyLlxuICAgIF9hZ2dyZWdhdGlvbixcbiAgICBudWxsVmFsdWUgPSBOT19WQUxVRV9DT0xPUixcbiAgICBnZXRWYWx1ZSA9IGRlZmF1bHRHZXRGaWVsZFZhbHVlXG4gICkge1xuICAgIGNvbnN0IHt0eXBlfSA9IGZpZWxkO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0VmFsdWUoZmllbGQsIGRhdGEpO1xuXG4gICAgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbFZhbHVlO1xuICAgIH1cblxuICAgIGxldCBhdHRyaWJ1dGVWYWx1ZTtcbiAgICBpZiAodHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcCkge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY29udmVydCBoZXJlXG4gICAgICAvLyBzY2FsZSBGdW5jdGlvbiBzaG91bGQgdGFrZSBjYXJlIG9mIGl0XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IHNjYWxlKG5ldyBEYXRlKHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gc2NhbGUodmFsdWUpO1xuICAgIH1cblxuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgYXR0cmlidXRlVmFsdWUgPSBudWxsVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlO1xuICB9XG5cbiAgdXBkYXRlTWV0YShtZXRhKSB7XG4gICAgdGhpcy5tZXRhID0gey4uLnRoaXMubWV0YSwgLi4ubWV0YX07XG4gIH1cblxuICBnZXREYXRhVXBkYXRlVHJpZ2dlcnMoe2ZpbHRlcmVkSW5kZXgsIGlkLCBhbGxEYXRhfSkge1xuICAgIGNvbnN0IHtjb2x1bW5zfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdldERhdGE6IHtkYXRhc2V0SWQ6IGlkLCBhbGxEYXRhLCBjb2x1bW5zLCBmaWx0ZXJlZEluZGV4fSxcbiAgICAgIGdldE1ldGE6IHtkYXRhc2V0SWQ6IGlkLCBhbGxEYXRhLCBjb2x1bW5zfSxcbiAgICAgIC4uLih0aGlzLmNvbmZpZy50ZXh0TGFiZWwgfHwgW10pLnJlZHVjZShcbiAgICAgICAgKGFjY3UsIHRsLCBpKSA9PiAoe1xuICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgW2BnZXRMYWJlbENoYXJhY3RlclNldC0ke2l9YF06IHRsLmZpZWxkID8gdGwuZmllbGQubmFtZSA6IG51bGxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZURhdGEoZGF0YXNldHMsIG9sZExheWVyRGF0YSkge1xuICAgIGlmICghdGhpcy5jb25maWcuZGF0YUlkKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGxheWVyRGF0YXNldCA9IGRhdGFzZXRzW3RoaXMuY29uZmlnLmRhdGFJZF07XG4gICAgY29uc3Qge2RhdGFDb250YWluZXJ9ID0gbGF5ZXJEYXRhc2V0O1xuXG4gICAgdGhpcy51cGRhdGVWaXN1YWxDaGFubmVsRmllbGRzKGxheWVyRGF0YXNldCk7XG5cbiAgICBjb25zdCBnZXRQb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKTtcbiAgICBjb25zdCBkYXRhVXBkYXRlVHJpZ2dlcnMgPSB0aGlzLmdldERhdGFVcGRhdGVUcmlnZ2VycyhsYXllckRhdGFzZXQpO1xuICAgIGNvbnN0IHRyaWdnZXJDaGFuZ2VkID0gdGhpcy5nZXRDaGFuZ2VkVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzKTtcblxuICAgIGlmICh0cmlnZ2VyQ2hhbmdlZC5nZXRNZXRhKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgbGV0IGRhdGEgPSBbXTtcblxuICAgIGlmICghdHJpZ2dlckNoYW5nZWQuZ2V0RGF0YSAmJiBvbGRMYXllckRhdGEgJiYgb2xkTGF5ZXJEYXRhLmRhdGEpIHtcbiAgICAgIC8vIHNhbWUgZGF0YVxuICAgICAgZGF0YSA9IG9sZExheWVyRGF0YS5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gdGhpcy5jYWxjdWxhdGVEYXRhQXR0cmlidXRlKGxheWVyRGF0YXNldCwgZ2V0UG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB7ZGF0YSwgdHJpZ2dlckNoYW5nZWR9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBzdHlsZWQgZmllbGRzIHRvIG1hdGNoIG9uZXMgZnJvbSBuZXcgZGF0YXNldC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAgICovXG4gIHVwZGF0ZVZpc3VhbENoYW5uZWxGaWVsZHMoZGF0YXNldCkge1xuICAgIGZvciAoY29uc3Qge2ZpZWxkfSBvZiBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpKSB7XG4gICAgICBjb25zdCBvbGRGaWVsZCA9IHRoaXMuY29uZmlnW2ZpZWxkXTtcbiAgICAgIGlmICghb2xkRmllbGQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3RGF0YVNldEZpZWxkID0gZGF0YXNldC5maWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBvbGRGaWVsZC5uYW1lKSB8fCBudWxsO1xuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2ZpZWxkXTogbmV3RGF0YVNldEZpZWxkfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgb25lIGxheWVyIGRvbWFpbiB3aGVuIHN0YXRlLmRhdGEgY2hhbmdlZFxuICAgKiBpZiBzdGF0ZS5kYXRhIGNoYW5nZSBpcyBkdWUgb3QgdXBkYXRlIGZpbHRlciwgbmV3RmlsZXIgd2lsbCBiZSBwYXNzZWRcbiAgICogY2FsbGVkIGJ5IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld0ZpbHRlclxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBsYXllclxuICAgKi9cbiAgdXBkYXRlTGF5ZXJEb21haW4oZGF0YXNldHMsIG5ld0ZpbHRlcikge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5nZXREYXRhc2V0KGRhdGFzZXRzKTtcbiAgICBpZiAoIXRhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3Qge3NjYWxlfSA9IGNoYW5uZWw7XG4gICAgICBjb25zdCBzY2FsZVR5cGUgPSB0aGlzLmNvbmZpZ1tzY2FsZV07XG4gICAgICAvLyBvcmRpbmFsIGRvbWFpbiBpcyBiYXNlZCBvbiBkYXRhQ29udGFpbmVyLCBpZiBvbmx5IGZpbHRlciBjaGFuZ2VkXG4gICAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBvcmRpbmFsIGRvbWFpblxuICAgICAgaWYgKCFuZXdGaWx0ZXIgfHwgc2NhbGVUeXBlICE9PSBTQ0FMRV9UWVBFUy5vcmRpbmFsKSB7XG4gICAgICAgIGNvbnN0IHtkb21haW59ID0gY2hhbm5lbDtcbiAgICAgICAgY29uc3QgdXBkYXRlZERvbWFpbiA9IHRoaXMuY2FsY3VsYXRlTGF5ZXJEb21haW4odGFibGUsIGNoYW5uZWwpO1xuICAgICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbZG9tYWluXTogdXBkYXRlZERvbWFpbn0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXREYXRhc2V0KGRhdGFzZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFJZCA/IGRhdGFzZXRzW3RoaXMuY29uZmlnLmRhdGFJZF0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHZpc3VhbCBjaGFubmVsIGZpZWxkIGFuZCBzY2FsZXMgYmFzZWQgb24gc3VwcG9ydGVkIGZpZWxkICYgc2NhbGUgdHlwZVxuICAgKiBAcGFyYW0gY2hhbm5lbFxuICAgKi9cbiAgdmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpIHtcbiAgICB0aGlzLnZhbGlkYXRlRmllbGRUeXBlKGNoYW5uZWwpO1xuICAgIHRoaXMudmFsaWRhdGVTY2FsZShjaGFubmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBmaWVsZCB0eXBlIGJhc2VkIG9uIGNoYW5uZWxTY2FsZVR5cGVcbiAgICovXG4gIHZhbGlkYXRlRmllbGRUeXBlKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIGNoYW5uZWxTY2FsZVR5cGUsIHN1cHBvcnRlZEZpZWxkVHlwZXN9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgIGlmICh0aGlzLmNvbmZpZ1tmaWVsZF0pIHtcbiAgICAgIC8vIGlmIGZpZWxkIGlzIHNlbGVjdGVkLCBjaGVjayBpZiBmaWVsZCB0eXBlIGlzIHN1cHBvcnRlZFxuICAgICAgY29uc3QgY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMgPVxuICAgICAgICBzdXBwb3J0ZWRGaWVsZFR5cGVzIHx8IENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEU1tjaGFubmVsU2NhbGVUeXBlXTtcblxuICAgICAgaWYgKCFjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1tmaWVsZF0udHlwZSkpIHtcbiAgICAgICAgLy8gZmllbGQgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLCBzZXQgaXQgYmFjayB0byBudWxsXG4gICAgICAgIC8vIHNldCBzY2FsZSBiYWNrIHRvIGRlZmF1bHRcbiAgICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2ZpZWxkXTogbnVsbH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBzY2FsZSB0eXBlIGJhc2VkIG9uIGFnZ3JlZ2F0aW9uXG4gICAqL1xuICB2YWxpZGF0ZVNjYWxlKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7c2NhbGV9ID0gdmlzdWFsQ2hhbm5lbDtcbiAgICBpZiAoIXNjYWxlKSB7XG4gICAgICAvLyB2aXN1YWxDaGFubmVsIGRvZXNuJ3QgaGF2ZSBzY2FsZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzY2FsZU9wdGlvbnMgPSB0aGlzLmdldFNjYWxlT3B0aW9ucyhjaGFubmVsKTtcbiAgICAvLyBjaGVjayBpZiBjdXJyZW50IHNlbGVjdGVkIHNjYWxlIGlzXG4gICAgLy8gc3VwcG9ydGVkLCBpZiBub3QsIGNoYW5nZSB0byBkZWZhdWx0XG4gICAgaWYgKCFzY2FsZU9wdGlvbnMuaW5jbHVkZXModGhpcy5jb25maWdbc2NhbGVdKSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W3NjYWxlXTogc2NhbGVPcHRpb25zWzBdfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzY2FsZSBvcHRpb25zIGJhc2VkIG9uIGN1cnJlbnQgZmllbGRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWxcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIHNjYWxlLCBjaGFubmVsU2NhbGVUeXBlfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWdbZmllbGRdXG4gICAgICA/IEZJRUxEX09QVFNbdGhpcy5jb25maWdbZmllbGRdLnR5cGVdLnNjYWxlW2NoYW5uZWxTY2FsZVR5cGVdXG4gICAgICA6IFt0aGlzLmdldERlZmF1bHRMYXllckNvbmZpZygpW3NjYWxlXV07XG4gIH1cblxuICB1cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIC8vIGNhbGN1bGF0ZSBsYXllciBjaGFubmVsIGRvbWFpblxuICAgIGNvbnN0IHVwZGF0ZWREb21haW4gPSB0aGlzLmNhbGN1bGF0ZUxheWVyRG9tYWluKGRhdGFzZXQsIHZpc3VhbENoYW5uZWwpO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1t2aXN1YWxDaGFubmVsLmRvbWFpbl06IHVwZGF0ZWREb21haW59KTtcbiAgfVxuXG4gIGdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycygpIHtcbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaCh2aXN1YWxDaGFubmVsID0+IHtcbiAgICAgIC8vIGZpZWxkIHJhbmdlIHNjYWxlIGRvbWFpblxuICAgICAgY29uc3Qge2FjY2Vzc29yLCBmaWVsZCwgc2NhbGUsIGRvbWFpbiwgcmFuZ2UsIGRlZmF1bHRWYWx1ZSwgZml4ZWR9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgICAgdXBkYXRlVHJpZ2dlcnNbYWNjZXNzb3JdID0ge1xuICAgICAgICBbZmllbGRdOiB0aGlzLmNvbmZpZ1tmaWVsZF0sXG4gICAgICAgIFtzY2FsZV06IHRoaXMuY29uZmlnW3NjYWxlXSxcbiAgICAgICAgW2RvbWFpbl06IHRoaXMuY29uZmlnW2RvbWFpbl0sXG4gICAgICAgIFtyYW5nZV06IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIC4uLihmaXhlZCA/IHtbZml4ZWRdOiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdfSA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gdXBkYXRlVHJpZ2dlcnM7XG4gIH1cblxuICBjYWxjdWxhdGVMYXllckRvbWFpbihkYXRhc2V0LCB2aXN1YWxDaGFubmVsKSB7XG4gICAgY29uc3Qge3NjYWxlfSA9IHZpc3VhbENoYW5uZWw7XG4gICAgY29uc3Qgc2NhbGVUeXBlID0gdGhpcy5jb25maWdbc2NhbGVdO1xuXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAvLyBpZiBjb2xvckZpZWxkIG9yIHNpemVGaWVsZCB3ZXJlIHNldCBiYWNrIHRvIG51bGxcbiAgICAgIHJldHVybiBkZWZhdWx0RG9tYWluO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGFTZXRGaWVsZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkLm5hbWUpO1xuICAgIGlmICghZGF0YVNldEZpZWxkKSB7XG4gICAgICAvLyBpZiBuZXcgZGF0YXNldCBkb2Vzbid0IGNvbnRhaW4gcHJldmlvdXNseSBzZXQgZmllbGRcbiAgICAgIHJldHVybiBkZWZhdWx0RG9tYWluO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhc2V0LmdldENvbHVtbkxheWVyRG9tYWluKGRhdGFTZXRGaWVsZCwgc2NhbGVUeXBlKSB8fCBkZWZhdWx0RG9tYWluO1xuICB9XG5cbiAgaGFzSG92ZXJlZE9iamVjdChvYmplY3RJbmZvKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNMYXllckhvdmVyZWQob2JqZWN0SW5mbykgJiYgb2JqZWN0SW5mby5vYmplY3QgPyBvYmplY3RJbmZvLm9iamVjdCA6IG51bGw7XG4gIH1cblxuICBpc0xheWVySG92ZXJlZChvYmplY3RJbmZvKSB7XG4gICAgcmV0dXJuIG9iamVjdEluZm8/LnBpY2tlZCAmJiBvYmplY3RJbmZvPy5sYXllcj8ucHJvcHM/LmlkID09PSB0aGlzLmlkO1xuICB9XG5cbiAgZ2V0UmFkaXVzU2NhbGVCeVpvb20obWFwU3RhdGUsIGZpeGVkUmFkaXVzKSB7XG4gICAgY29uc3QgcmFkaXVzQ2hhbm5lbCA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YyA9PiB2Yy5wcm9wZXJ0eSA9PT0gJ3JhZGl1cycpO1xuXG4gICAgaWYgKCFyYWRpdXNDaGFubmVsKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZCA9IHJhZGl1c0NoYW5uZWwuZmllbGQ7XG4gICAgY29uc3QgZml4ZWQgPSBmaXhlZFJhZGl1cyA9PT0gdW5kZWZpbmVkID8gdGhpcy5jb25maWcudmlzQ29uZmlnLmZpeGVkUmFkaXVzIDogZml4ZWRSYWRpdXM7XG4gICAgY29uc3Qge3JhZGl1c30gPSB0aGlzLmNvbmZpZy52aXNDb25maWc7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIGZpeGVkID8gMSA6ICh0aGlzLmNvbmZpZ1tmaWVsZF0gPyAxIDogcmFkaXVzKSAqIHRoaXMuZ2V0Wm9vbUZhY3RvcihtYXBTdGF0ZSk7XG4gIH1cblxuICBnZXRSYWRpdXNTY2FsZShmaXhlZFJhZGl1cykge1xuICAgIGNvbnN0IHJhZGl1c0NoYW5uZWwgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmMgPT4gdmMucHJvcGVydHkgPT09ICdyYWRpdXMnKTtcblxuICAgIGlmICghcmFkaXVzQ2hhbm5lbCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGQgPSByYWRpdXNDaGFubmVsLmZpZWxkO1xuICAgIGNvbnN0IGZpeGVkID0gZml4ZWRSYWRpdXMgPT09IHVuZGVmaW5lZCA/IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5maXhlZFJhZGl1cyA6IGZpeGVkUmFkaXVzO1xuICAgIGNvbnN0IHtyYWRpdXN9ID0gdGhpcy5jb25maWcudmlzQ29uZmlnO1xuXG4gICAgcmV0dXJuIGZpeGVkID8gMSA6ICh0aGlzLmNvbmZpZ1tmaWVsZF0gPyAxIDogcmFkaXVzKTtcbiAgfVxuXG4gIGdldE1heE1hcmtlclNpemUoKSB7XG4gICAgY29uc3Qge3Zpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCB7c2l6ZUZpZWxkLCByYWRpdXNSYW5nZSwgcmFkaXVzfSA9IHZpc0NvbmZpZztcbiAgICByZXR1cm4gTWF0aC5jZWlsKChzaXplRmllbGQgPyByYWRpdXNSYW5nZVsxXSA6IHJhZGl1cykpO1xuICB9XG5cbiAgZ2V0UmFkaXVzVW5pdChmaXhlZFJhZGl1cykge1xuICAgIGNvbnN0IHJhZGl1c0NoYW5uZWwgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmMgPT4gdmMucHJvcGVydHkgPT09ICdyYWRpdXMnKTtcblxuICAgIGlmICghcmFkaXVzQ2hhbm5lbCkge1xuICAgICAgcmV0dXJuICdwaXhlbHMnO1xuICAgIH1cblxuICAgIGNvbnN0IGZpeGVkID0gZml4ZWRSYWRpdXMgPT09IHVuZGVmaW5lZCA/IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5maXhlZFJhZGl1cyA6IGZpeGVkUmFkaXVzO1xuXG4gICAgcmV0dXJuIGZpeGVkID8gJ21ldGVycycgOiAncGl4ZWxzJztcbiAgfVxuXG4gIHNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykge1xuICAgIHJldHVybiBwcm9wcy5zb21lKHAgPT4gIXRoaXMubm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzLmluY2x1ZGVzKHApKTtcbiAgfVxuXG4gIGdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMoaW50ZXJhY3Rpb25Db25maWcsIGJydXNoaW5nVGFyZ2V0KSB7XG4gICAgY29uc3Qge2JydXNofSA9IGludGVyYWN0aW9uQ29uZmlnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIGJydXNoaW5nXG4gICAgICBhdXRvSGlnaGxpZ2h0OiAhYnJ1c2guZW5hYmxlZCxcbiAgICAgIGJydXNoaW5nUmFkaXVzOiBicnVzaC5jb25maWcuc2l6ZSAqIDEwMDAsXG4gICAgICBicnVzaGluZ1RhcmdldDogYnJ1c2hpbmdUYXJnZXQgfHwgJ3NvdXJjZScsXG4gICAgICBicnVzaGluZ0VuYWJsZWQ6IGJydXNoLmVuYWJsZWRcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKHtpZHgsIGdwdUZpbHRlciwgbWFwU3RhdGUsIHZpc2libGUsIG1hc2tQb2x5Z29ufSkge1xuICAgIGNvbnN0IG1hc2tFeHRlbnNpb25Qcm9wcyA9IGdldE1hc2tFeHRlbnNpb25Qcm9wcyhtYXNrUG9seWdvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1hc2tFeHRlbnNpb25Qcm9wcyxcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgaWR4LFxuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uTE5HTEFULFxuICAgICAgcGlja2FibGU6IHRydWUsXG4gICAgICB3cmFwTG9uZ2l0dWRlOiB0cnVlLFxuICAgICAgcGFyYW1ldGVyczoge2RlcHRoVGVzdDogQm9vbGVhbihtYXBTdGF0ZS5kcmFnUm90YXRlIHx8IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZCl9LFxuICAgICAgaGlkZGVuOiB0aGlzLmNvbmZpZy5oaWRkZW4sXG4gICAgICB2aXNpYmlsaXR5Qnlab29tOiB7XG4gICAgICAgIG1pbjogdGhpcy5jb25maWcudmlzaWJpbGl0eUJ5Wm9vbS5taW4sXG4gICAgICAgIG1heDogdGhpcy5jb25maWcudmlzaWJpbGl0eUJ5Wm9vbS5tYXhcbiAgICAgIH0sXG4gICAgICAvLyB2aXNjb25maWdcbiAgICAgIG9wYWNpdHk6IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5vcGFjaXR5LFxuICAgICAgaGlnaGxpZ2h0Q29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgLy8gZGF0YSBmaWx0ZXJpbmdcbiAgICAgIGV4dGVuc2lvbnM6IFtkYXRhRmlsdGVyRXh0ZW5zaW9uLCAuLi5tYXNrRXh0ZW5zaW9uUHJvcHMuZXh0ZW5zaW9uc10sXG4gICAgICBmaWx0ZXJSYW5nZTogZ3B1RmlsdGVyID8gZ3B1RmlsdGVyLmZpbHRlclJhbmdlIDogdW5kZWZpbmVkLFxuICAgICAgLy8gbGF5ZXIgc2hvdWxkIGJlIHZpc2libGUgYW5kIGlmIHNwbGl0TWFwLCBzaG93biBpbiB0byBvbmUgb2YgcGFuZWxcbiAgICAgIHZpc2libGU6IHRoaXMuY29uZmlnLmlzVmlzaWJsZSAmJiB2aXNpYmxlXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHt0aGlzLmlkfS1ob3ZlcmVkYCxcbiAgICAgIHBpY2thYmxlOiBmYWxzZSxcbiAgICAgIHdyYXBMb25naXR1ZGU6IHRydWUsXG4gICAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVRcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyVGV4dExhYmVsTGF5ZXIoe2dldFBvc2l0aW9uLCBnZXRQaXhlbE9mZnNldCwgdXBkYXRlVHJpZ2dlcnMsIHNoYXJlZFByb3BzfSwgcmVuZGVyT3B0cykge1xuICAgIGNvbnN0IHtkYXRhLCBtYXBTdGF0ZX0gPSByZW5kZXJPcHRzO1xuICAgIGNvbnN0IHt0ZXh0TGFiZWx9ID0gdGhpcy5jb25maWc7XG5cbiAgICByZXR1cm4gZGF0YS50ZXh0TGFiZWxzLnJlZHVjZSgoYWNjdSwgZCwgaSkgPT4ge1xuICAgICAgaWYgKGQuZ2V0VGV4dCkge1xuICAgICAgICBhY2N1LnB1c2goXG4gICAgICAgICAgbmV3IFRleHRMYXllcih7XG4gICAgICAgICAgICAuLi5zaGFyZWRQcm9wcyxcbiAgICAgICAgICAgIGlkOiBgJHt0aGlzLmlkfS1sYWJlbC0ke3RleHRMYWJlbFtpXS5maWVsZD8ubmFtZX1gLFxuICAgICAgICAgICAgZGF0YTogZGF0YS5kYXRhLFxuICAgICAgICAgICAgZ2V0VGV4dDogZC5nZXRUZXh0LFxuICAgICAgICAgICAgZ2V0UG9zaXRpb24sXG4gICAgICAgICAgICBjaGFyYWN0ZXJTZXQ6IGQuY2hhcmFjdGVyU2V0LFxuICAgICAgICAgICAgZ2V0UGl4ZWxPZmZzZXQ6IGdldFBpeGVsT2Zmc2V0KHRleHRMYWJlbFtpXSksXG4gICAgICAgICAgICBnZXRTaXplOiAxLFxuICAgICAgICAgICAgc2l6ZVNjYWxlOiB0ZXh0TGFiZWxbaV0uc2l6ZSxcbiAgICAgICAgICAgIGdldFRleHRBbmNob3I6IHRleHRMYWJlbFtpXS5hbmNob3IsXG4gICAgICAgICAgICBnZXRBbGlnbm1lbnRCYXNlbGluZTogdGV4dExhYmVsW2ldLmFsaWdubWVudCxcbiAgICAgICAgICAgIGdldENvbG9yOiB0ZXh0TGFiZWxbaV0uY29sb3IsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIC8vIHRleHQgd2lsbCBhbHdheXMgc2hvdyBvbiB0b3Agb2YgYWxsIGxheWVyc1xuICAgICAgICAgICAgICBkZXB0aFRlc3Q6IGZhbHNlXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXRGaWx0ZXJWYWx1ZTogZGF0YS5nZXRGaWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnVwZGF0ZVRyaWdnZXJzLFxuICAgICAgICAgICAgICBnZXRUZXh0OiB0ZXh0TGFiZWxbaV0uZmllbGQ/Lm5hbWUsXG4gICAgICAgICAgICAgIGdldFBpeGVsT2Zmc2V0OiB7XG4gICAgICAgICAgICAgICAgLi4udXBkYXRlVHJpZ2dlcnMuZ2V0UmFkaXVzLFxuICAgICAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgICAgIGFuY2hvcjogdGV4dExhYmVsW2ldLmFuY2hvcixcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IHRleHRMYWJlbFtpXS5hbGlnbm1lbnRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZ2V0VGV4dEFuY2hvcjogdGV4dExhYmVsW2ldLmFuY2hvcixcbiAgICAgICAgICAgICAgZ2V0QWxpZ25tZW50QmFzZWxpbmU6IHRleHRMYWJlbFtpXS5hbGlnbm1lbnQsXG4gICAgICAgICAgICAgIGdldENvbG9yOiB0ZXh0TGFiZWxbaV0uY29sb3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBkZWNrLmdsIGBJY29uTGF5ZXJgIFwiYXV0b1BhY2tcIiBtb2RlIGFjY2Vzc29yIGZvciBjdXN0b20gbWFya2Vycy5cbiAgICpcbiAgICogQHBhcmFtIHsqfSBjdXN0b21NYXJrZXJzU3RhdHVzIFJlY29yZDx1cmwsIFVybFN0YXR1cz4gcHJvdmlkZWQgYnkgYnVpbGRlciwgVXJsU3RhdHVzIGBva2AgbWVhbnMgVVJMIGlzIG9rIGFuZCByZWFkeSB0byByZW5kZXJcbiAgICogQHBhcmFtIHsqfSBpY29uVXJsQWNjZXNzb3IgZGVjay5nbCBhY2Nlc3NvciAob3IgdmFsdWUpIHRoYXQgcmVzb2x2ZXMgdG8gVVJMIG9mIGljb24gZm9yIGdpdmVuIHJvd1xuICAgKiBAcmV0dXJucyBkZWNrLmdsIGFjY2Vzc29yIHRoYXQgcmV0dXJucyBVbnBhY2tlZEljb24gcmVhZHkgdG8gY29uc3VtZSBieSBJY29uTGF5ZXJcbiAgICovXG4gIGdldEN1c3RvbU1hcmtlckljb25BY2Nlc3NvcihjdXN0b21NYXJrZXJzU3RhdHVzLCBpY29uVXJsQWNjZXNzb3IpIHtcbiAgICBjb25zdCBtYXhJY29uU2l6ZSA9IHRoaXMuZ2V0TWF4TWFya2VyU2l6ZSgpO1xuXG4gICAgcmV0dXJuIGQgPT4ge1xuICAgICAgY29uc3Qgd2FudGVkVXJsID1cbiAgICAgICAgKHR5cGVvZiBpY29uVXJsQWNjZXNzb3IgPT09ICdmdW5jdGlvbicpID8gaWNvblVybEFjY2Vzc29yKGQpIDogaWNvblVybEFjY2Vzc29yO1xuICAgICAgY29uc3QgdXJsID0gY3VzdG9tTWFya2Vyc1N0YXR1cz8uW3dhbnRlZFVybF0gPT09ICdvaycgPyB3YW50ZWRVcmwgOiBGQUxMQkFDS19JQ09OO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGAke3VybH1AQCR7bWF4SWNvblNpemV9YCxcbiAgICAgICAgdXJsLFxuICAgICAgICB3aWR0aDogbWF4SWNvblNpemUsXG4gICAgICAgIGhlaWdodDogbWF4SWNvblNpemUsXG4gICAgICAgIG1hc2s6IHRydWVcbiAgICAgIH07XG4gICAgfTtcbiAgfVxuXG4gIGNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUoa2VwbGVyVGFibGUsIGdldFBvc2l0aW9uKSB7XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgfVxuXG4gIGdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcikge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgICByZXR1cm4gKCkgPT4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYXllcjtcbiJdfQ==
1648
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvYmFzZS1sYXllci5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZUNvbG9yIiwiTEFZRVJfSURfTEVOR1RIIiwiRkFMTEJBQ0tfSUNPTiIsIk1BWF9TQU1QTEVfU0laRSIsImRlZmF1bHREb21haW4iLCJkYXRhRmlsdGVyRXh0ZW5zaW9uIiwiRGF0YUZpbHRlckV4dGVuc2lvbiIsImZpbHRlclNpemUiLCJNQVhfR1BVX0ZJTFRFUlMiLCJkZWZhdWx0RGF0YUFjY2Vzc29yIiwiZGMiLCJkIiwiZGVmYXVsdEdldEZpZWxkVmFsdWUiLCJmaWVsZCIsInZhbHVlQWNjZXNzb3IiLCJPVkVSTEFZX1RZUEUiLCJkZWNrZ2wiLCJtYXBib3hnbCIsImxheWVyQ29sb3JzIiwiT2JqZWN0IiwidmFsdWVzIiwiRGF0YVZpekNvbG9ycyIsIm1hcCIsImhleFRvUmdiIiwiaW5kZXgiLCJsZW5ndGgiLCJjb2xvck1ha2VyIiwiTGF5ZXIiLCJwcm9wcyIsImlkIiwibWV0YSIsInZpc0NvbmZpZ1NldHRpbmdzIiwiY29uZmlnIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiY29sdW1ucyIsImdldExheWVyQ29sdW1ucyIsIkRlZmF1bHRMYXllckljb24iLCJ0eXBlIiwiY29sb3IiLCJwcm9wZXJ0eSIsInNjYWxlIiwiZG9tYWluIiwicmFuZ2UiLCJrZXkiLCJjaGFubmVsU2NhbGVUeXBlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJudWxsVmFsdWUiLCJOT19WQUxVRV9DT0xPUiIsImRlZmF1bHRWYWx1ZSIsInNpemUiLCJsYXQiLCJwYWlyIiwiZmllbGRQYWlyS2V5IiwibG5nIiwibGF0MCIsImxuZzAiLCJsYXQxIiwibG5nMSIsImRhdGFJZCIsInZpc2liaWxpdHlCeVpvb20iLCJtaW4iLCJaT09NX0xFVkVMX0xJTUlUUyIsIm1heCIsImxhYmVsIiwiREVGQVVMVF9MQVlFUl9MQUJFTCIsIm5leHQiLCJ2YWx1ZSIsImlzVmlzaWJsZSIsImlzQ29uZmlnQWN0aXZlIiwiaGlnaGxpZ2h0Q29sb3IiLCJERUZBVUxUX0hJR0hMSUdIVF9DT0xPUiIsImhpZGRlbiIsImNvbG9yRmllbGQiLCJjb2xvckRvbWFpbiIsImNvbG9yU2NhbGUiLCJTQ0FMRV9UWVBFUyIsInF1YW50aWxlIiwic2l6ZURvbWFpbiIsInNpemVTY2FsZSIsImxpbmVhciIsInNpemVGaWVsZCIsInZpc0NvbmZpZyIsInRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsImNvbG9yVUkiLCJERUZBVUxUX0NPTE9SX1VJIiwiY29sb3JSYW5nZSIsImFuaW1hdGlvbiIsImVuYWJsZWQiLCJ2aXN1YWxDaGFubmVscyIsIm1lYXN1cmUiLCJkaXNwbGF5TmFtZSIsIm5hbWUiLCJkZWZhdWx0TWVhc3VyZSIsInVwZGF0ZSIsImZpZWxkSWR4IiwiY29sdW1uUGFpcnMiLCJwYXJ0bmVyS2V5IiwicGFydG5lckZpZWxkUGFpcktleSIsInpvb20iLCJ6b29tT2Zmc2V0IiwiTWF0aCIsInBvdyIsImVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3IiLCJkYXRhc2V0cyIsImZpbHRlcmVkSW5kZXgiLCJvYmplY3QiLCJkYXRhQ29udGFpbmVyIiwicm93IiwiY29uZmlnVG9Db3B5Iiwic2hhbGxvd0NvcHkiLCJjb25jYXQiLCJ2Iiwibm90VG9Db3B5IiwiZm9yRWFjaCIsImdyb3VwIiwicHVzaCIsImN1cnJlbnRDb25maWciLCJjb3BpZWQiLCJjb3B5TGF5ZXJDb25maWciLCJ1cGRhdGVMYXllckNvbmZpZyIsImtleXMiLCJjaGFubmVsIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaW5jbHVkZXMiLCJsYXllclZpc0NvbmZpZ3MiLCJpdGVtIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJldmVyeSIsInAiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbHVtblZhbGlkYXRvcnMiLCJyZXF1aXJlZCIsInJlcXVpcmVkTGF5ZXJDb2x1bW5zIiwicmVkdWNlIiwiYWNjdSIsInZhbGlkYXRvciIsIm9wdGlvbmFsIiwib3B0aW9uYWxDb2x1bW5zIiwibmV3Q29uZmlnIiwibmV3VmlzQ29uZmlnIiwicHJvcCIsInByZXZpb3VzIiwiY29sb3JVSVByb3AiLCJlbnRyaWVzIiwiaXNDb2xvclJhbmdlIiwiY29sb3JzIiwidXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZSIsInVwZGF0ZUNvbG9yUmFuZ2VCeUNvbG9yVUkiLCJ1cGRhdGVDdXN0b21QYWxldHRlIiwiY29sb3JSYW5nZUNvbmZpZyIsImN1c3RvbSIsImN1c3RvbVBhbGV0dGUiLCJzaG93RHJvcGRvd24iLCJzdGVwcyIsInJldmVyc2VkIiwiQm9vbGVhbiIsInNob3VsZFVwZGF0ZSIsInNvbWUiLCJzYW1lR3JvdXAiLCJDT0xPUl9SQU5HRVMiLCJmaWx0ZXIiLCJjciIsImZpbmQiLCJjb2xvck1hcCIsInVwZGF0ZUNvbG9yTWFwIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVDYXRlZ29yeUNvbG9yTWFwIiwidXBkYXRlTnVtZXJpY0NvbG9yTWFwIiwiYXNzaWduZWRDYXRlZ29yaWVzIiwibmV3Q29sb3JNYXAiLCJzbGljZSIsImNNYXAiLCJ1bmFzc2lnbmVkQ29sb3JzIiwiY2F0ZWdvcnkiLCJjb2xvck1hcFZhbHVlcyIsImMiLCJtYXhWYWx1ZSIsInByZXZWYWx1ZSIsInN0ZXAiLCJpIiwibGF5ZXJEYXRhIiwiZGF0YSIsImhhc0FsbENvbHVtbnMiLCJoYXNMYXllckRhdGEiLCJyZW5kZXJMYXllciIsIkFycmF5IiwiaXNBcnJheSIsIk1hcCIsImsiLCJzZXQiLCJTQ0FMRV9GVU5DIiwiZnJvbSIsInVua25vd24iLCJVTktOT1dOX0NPTE9SIiwiZ2V0VmlzQ2hhbm5lbFNjYWxlIiwidW5rbm93blZhbHVlIiwibWFwcGluZyIsIm1hcmtlclVybCIsIm90aGVyc01hcmtlciIsIm1hcmtlck1hcCIsImRhdGFBY2Nlc3NvciIsImF0dHJpYnV0ZUFjY2Vzc29ycyIsImZpeGVkIiwiYWNjZXNzb3IiLCJnZXRBdHRyaWJ1dGVWYWx1ZSIsImFnZ3JlZ2F0aW9uIiwic2hvdWxkR2V0U2NhbGUiLCJhcmdzIiwiaXNGaXhlZCIsImZpZWxkQ29uZmlnIiwiYWdncmVnYXRpb25WYWx1ZSIsInNjYWxlRnVuY3Rpb24iLCJnZXRDb2xvclNjYWxlIiwiY3VzdG9tTWFya2VyIiwiZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlIiwiZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSIsIkNvbnNvbGUiLCJ3YXJuIiwib3JkaW5hbCIsImdldFBvc2l0aW9uIiwic2FtcGxlRGF0YSIsIm51bVJvd3MiLCJwb2ludHMiLCJtYXBJbmRleCIsImxhdEJvdW5kcyIsImxuZ0JvdW5kcyIsImRhdGFVcGRhdGVUcmlnZ2VycyIsInRyaWdnZXJDaGFuZ2VkIiwiX29sZERhdGFVcGRhdGVUcmlnZ2VycyIsIl9hZ2dyZWdhdGlvbiIsImdldFZhbHVlIiwiYXR0cmlidXRlVmFsdWUiLCJBTExfRklFTERfVFlQRVMiLCJ0aW1lc3RhbXAiLCJEYXRlIiwiYWxsRGF0YSIsImdldERhdGEiLCJkYXRhc2V0SWQiLCJnZXRNZXRhIiwidGwiLCJvbGRMYXllckRhdGEiLCJsYXllckRhdGFzZXQiLCJ1cGRhdGVWaXN1YWxDaGFubmVsRmllbGRzIiwiZ2V0UG9zaXRpb25BY2Nlc3NvciIsImdldERhdGFVcGRhdGVUcmlnZ2VycyIsImdldENoYW5nZWRUcmlnZ2VycyIsInVwZGF0ZUxheWVyTWV0YSIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJkYXRhc2V0Iiwib2xkRmllbGQiLCJuZXdEYXRhU2V0RmllbGQiLCJmaWVsZHMiLCJmZCIsIm5ld0ZpbHRlciIsInRhYmxlIiwiZ2V0RGF0YXNldCIsInNjYWxlVHlwZSIsInVwZGF0ZWREb21haW4iLCJjYWxjdWxhdGVMYXllckRvbWFpbiIsInZhbGlkYXRlRmllbGRUeXBlIiwidmFsaWRhdGVTY2FsZSIsInZpc3VhbENoYW5uZWwiLCJzdXBwb3J0ZWRGaWVsZFR5cGVzIiwiY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMiLCJDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMiLCJzY2FsZU9wdGlvbnMiLCJnZXRTY2FsZU9wdGlvbnMiLCJGSUVMRF9PUFRTIiwidXBkYXRlVHJpZ2dlcnMiLCJkYXRhU2V0RmllbGQiLCJmIiwiZ2V0Q29sdW1uTGF5ZXJEb21haW4iLCJvYmplY3RJbmZvIiwiaXNMYXllckhvdmVyZWQiLCJwaWNrZWQiLCJsYXllciIsIm1hcFN0YXRlIiwiZml4ZWRSYWRpdXMiLCJyYWRpdXNDaGFubmVsIiwidmMiLCJ1bmRlZmluZWQiLCJyYWRpdXMiLCJnZXRab29tRmFjdG9yIiwicmFkaXVzUmFuZ2UiLCJjZWlsIiwibm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzIiwiaW50ZXJhY3Rpb25Db25maWciLCJicnVzaGluZ1RhcmdldCIsImJydXNoIiwiYXV0b0hpZ2hsaWdodCIsImJydXNoaW5nUmFkaXVzIiwiYnJ1c2hpbmdFbmFibGVkIiwiaWR4IiwiZ3B1RmlsdGVyIiwidmlzaWJsZSIsIm1hc2tQb2x5Z29uIiwibWFza0V4dGVuc2lvblByb3BzIiwiY29vcmRpbmF0ZVN5c3RlbSIsIkNPT1JESU5BVEVfU1lTVEVNIiwiTE5HTEFUIiwicGlja2FibGUiLCJ3cmFwTG9uZ2l0dWRlIiwicGFyYW1ldGVycyIsImRlcHRoVGVzdCIsImRyYWdSb3RhdGUiLCJlbmFibGUzZCIsIm9wYWNpdHkiLCJleHRlbnNpb25zIiwiZmlsdGVyUmFuZ2UiLCJyZW5kZXJPcHRzIiwiZ2V0UGl4ZWxPZmZzZXQiLCJzaGFyZWRQcm9wcyIsInRleHRMYWJlbHMiLCJnZXRUZXh0IiwiVGV4dExheWVyIiwiY2hhcmFjdGVyU2V0IiwiZ2V0U2l6ZSIsImdldFRleHRBbmNob3IiLCJhbmNob3IiLCJnZXRBbGlnbm1lbnRCYXNlbGluZSIsImFsaWdubWVudCIsImdldENvbG9yIiwiZ2V0RmlsdGVyVmFsdWUiLCJnZXRSYWRpdXMiLCJjdXN0b21NYXJrZXJzU3RhdHVzIiwiaWNvblVybEFjY2Vzc29yIiwibWF4SWNvblNpemUiLCJnZXRNYXhNYXJrZXJTaXplIiwid2FudGVkVXJsIiwidXJsIiwid2lkdGgiLCJoZWlnaHQiLCJtYXNrIiwia2VwbGVyVGFibGUiLCJmb3VuZExheWVycyIsImRlZmF1bHRGaWVsZHMiLCJhbGxGaWVsZHMiLCJyZXF1aXJlZENvbHVtbnMiLCJwcmV2IiwicmVxdWlyZWRGaWVsZHMiLCJnZXRBbGxQb3NzaWJsZUNvbHVtblBhcmlzIiwiYWxsS2V5cyIsInBvaW50ZXJzIiwiY291bnRQZXJLZXkiLCJwYWlycyIsImluY3JlbWVudFBvaW50ZXJzIiwibmV3UGFpciIsImN1dXIiLCJwdHMiLCJjb3VudHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUVBOztBQVlBOztBQUNBOztBQUNBOztBQVFBOztBQUVBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7d0RBMkJVQSxhOztBQXpCVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGVBQWUsR0FBRyxDQUF4QixDLENBRVA7OztBQUNBLElBQU1DLGFBQWEsR0FDakIsMExBREY7QUFHQSxJQUFNQyxlQUFlLEdBQUcsSUFBeEI7QUFDQSxJQUFNQyxhQUFhLEdBQUcsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUF0QjtBQUNBLElBQU1DLG1CQUFtQixHQUFHLElBQUlDLCtCQUFKLENBQXdCO0FBQUNDLEVBQUFBLFVBQVUsRUFBRUM7QUFBYixDQUF4QixDQUE1Qjs7QUFFQSxJQUFNQyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQXNCLENBQUFDLEVBQUU7QUFBQSxTQUFJLFVBQUFDLENBQUM7QUFBQSxXQUFJQSxDQUFKO0FBQUEsR0FBTDtBQUFBLENBQTlCOztBQUNBLElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsQ0FBQ0MsS0FBRCxFQUFRRixDQUFSO0FBQUEsU0FBY0UsS0FBSyxDQUFDQyxhQUFOLENBQW9CSCxDQUFwQixDQUFkO0FBQUEsQ0FBN0I7O0FBRU8sSUFBTUksWUFBWSxHQUFHLDJCQUFVO0FBQ3BDQyxF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QUFLLENBQUNyTyxJQUFOLENBQVd1TyxPQUFYO0FBQ0Q7QUFDRDtBQUVBOzs7QUFDQSxlQUFTRCxpQkFBVCxDQUEyQkcsR0FBM0IsRUFBZ0NDLE1BQWhDLEVBQXdDdFUsS0FBeEMsRUFBK0M7QUFDN0MsWUFBSUEsS0FBSyxLQUFLLENBQVYsSUFBZXFVLEdBQUcsQ0FBQyxDQUFELENBQUgsS0FBV0MsTUFBTSxDQUFDLENBQUQsQ0FBTixHQUFZLENBQTFDLEVBQTZDO0FBQzNDO0FBQ0EsaUJBQU8sS0FBUDtBQUNEOztBQUVELFlBQUlELEdBQUcsQ0FBQ3JVLEtBQUQsQ0FBSCxHQUFhLENBQWIsR0FBaUJzVSxNQUFNLENBQUN0VSxLQUFELENBQTNCLEVBQW9DO0FBQ2xDcVUsVUFBQUEsR0FBRyxDQUFDclUsS0FBRCxDQUFILEdBQWFxVSxHQUFHLENBQUNyVSxLQUFELENBQUgsR0FBYSxDQUExQjtBQUNBLGlCQUFPLElBQVA7QUFDRDs7QUFFRHFVLFFBQUFBLEdBQUcsQ0FBQ3JVLEtBQUQsQ0FBSCxHQUFhLENBQWI7QUFDQSxlQUFPa1UsaUJBQWlCLENBQUNHLEdBQUQsRUFBTUMsTUFBTixFQUFjdFUsS0FBSyxHQUFHLENBQXRCLENBQXhCO0FBQ0Q7O0FBRUQsYUFBT2lVLEtBQVA7QUFDRDs7O1dBRUQsa0JBQWdCekssQ0FBaEIsRUFBbUI7QUFDakIsYUFBTywwQkFBU0EsQ0FBVCxDQUFQO0FBQ0Q7Ozs7O2VBNGpDWXJKLEsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQga2V5bWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5pbXBvcnQge0RhdGFGaWx0ZXJFeHRlbnNpb259IGZyb20gJ0BkZWNrLmdsL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHtDT09SRElOQVRFX1NZU1RFTX0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1RleHRMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcblxuaW1wb3J0IERlZmF1bHRMYXllckljb24gZnJvbSAnLi9kZWZhdWx0LWxheWVyLWljb24nO1xuaW1wb3J0IHtkaWZmVXBkYXRlVHJpZ2dlcnN9IGZyb20gJy4vbGF5ZXItdXBkYXRlJztcblxuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBOT19WQUxVRV9DT0xPUixcbiAgU0NBTEVfVFlQRVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBGSUVMRF9PUFRTLFxuICBTQ0FMRV9GVU5DLFxuICBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsXG4gIE1BWF9HUFVfRklMVEVSUyxcbiAgVU5LTk9XTl9DT0xPUixcbiAgWk9PTV9MRVZFTF9MSU1JVFNcbn0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtDT0xPUl9SQU5HRVN9IGZyb20gJ2NvbnN0YW50cy9jb2xvci1yYW5nZXMnO1xuaW1wb3J0IHtEYXRhVml6Q29sb3JzfSBmcm9tICdjb25zdGFudHMvY3VzdG9tLWNvbG9yLXJhbmdlcyc7XG5pbXBvcnQge1xuICBMQVlFUl9WSVNfQ09ORklHUyxcbiAgREVGQVVMVF9URVhUX0xBQkVMLFxuICBERUZBVUxUX0NPTE9SX1VJLFxuICBERUZBVUxUX0hJR0hMSUdIVF9DT0xPUixcbiAgREVGQVVMVF9MQVlFUl9MQUJFTFxufSBmcm9tICcuL2xheWVyLWZhY3RvcnknO1xuXG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCBpc1BsYWluT2JqZWN0fSBmcm9tICd1dGlscy91dGlscyc7XG5cbmltcG9ydCB7Z2V0TGF0TG5nQm91bmRzLCBub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ3V0aWxzL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHtnZXRTYW1wbGVEYXRhfSBmcm9tICd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci11dGlscyc7XG5cbmltcG9ydCB7aGV4VG9SZ2IsIGdldENvbG9yR3JvdXBCeU5hbWUsIHJldmVyc2VDb2xvclJhbmdlfSBmcm9tICd1dGlscy9jb2xvci11dGlscyc7XG5pbXBvcnQge2dldE1hc2tFeHRlbnNpb25Qcm9wc30gZnJvbSAndXRpbHMvbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtzY2FsZU9yZGluYWx9IGZyb20gJ2QzLXNjYWxlJztcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4vaW5kZXgnKS5MYXllcn0gTGF5ZXJDbGFzc30gKi9cblxuLyoqXG4gKiBBcHByb3guIG51bWJlciBvZiBwb2ludHMgdG8gc2FtcGxlIGluIGEgbGFyZ2UgZGF0YSBzZXRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBMQVlFUl9JRF9MRU5HVEggPSA2O1xuXG4vLyBOb3RlLCB0aGlzIGlzIGlzIFNWRyBvZiBzb2xpZCBjaXJjbGUgZW5jb2RlZCBhcyBkYXRhLXVyaVxuY29uc3QgRkFMTEJBQ0tfSUNPTiA9XG4gICdkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtODtiYXNlNjQsUEhOMlp5QjJhV1YzUW05NFBTSXdJREFnTVRBd0lERXdNQ0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajROQ2lBZ1BHTnBjbU5zWlNCamVEMGlOVEFpSUdONVBTSTFNQ0lnY2owaU5UQWlMejROQ2p3dmMzWm5QZz09JztcblxuY29uc3QgTUFYX1NBTVBMRV9TSVpFID0gNTAwMDtcbmNvbnN0IGRlZmF1bHREb21haW4gPSBbMCwgMV07XG5jb25zdCBkYXRhRmlsdGVyRXh0ZW5zaW9uID0gbmV3IERhdGFGaWx0ZXJFeHRlbnNpb24oe2ZpbHRlclNpemU6IE1BWF9HUFVfRklMVEVSU30pO1xuXG5jb25zdCBkZWZhdWx0RGF0YUFjY2Vzc29yID0gZGMgPT4gZCA9PiBkO1xuY29uc3QgZGVmYXVsdEdldEZpZWxkVmFsdWUgPSAoZmllbGQsIGQpID0+IGZpZWxkLnZhbHVlQWNjZXNzb3IoZCk7XG5cbmV4cG9ydCBjb25zdCBPVkVSTEFZX1RZUEUgPSBrZXltaXJyb3Ioe1xuICBkZWNrZ2w6IG51bGwsXG4gIG1hcGJveGdsOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JzID0gT2JqZWN0LnZhbHVlcyhEYXRhVml6Q29sb3JzKS5tYXAoaGV4VG9SZ2IpO1xuZnVuY3Rpb24qIGdlbmVyYXRlQ29sb3IoKSB7XG4gIGxldCBpbmRleCA9IDA7XG4gIHdoaWxlIChpbmRleCA8IGxheWVyQ29sb3JzLmxlbmd0aCArIDEpIHtcbiAgICBpZiAoaW5kZXggPT09IGxheWVyQ29sb3JzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cbiAgICB5aWVsZCBsYXllckNvbG9yc1tpbmRleCsrXTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY29sb3JNYWtlciA9IGdlbmVyYXRlQ29sb3IoKTtcblxuLyoqIEB0eXBlIHtMYXllckNsYXNzfSAqL1xuY2xhc3MgTGF5ZXIge1xuICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5pZCA9IHByb3BzLmlkIHx8IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG5cbiAgICAvLyBtZXRhXG4gICAgdGhpcy5tZXRhID0ge307XG5cbiAgICAvLyB2aXNDb25maWdTZXR0aW5nc1xuICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3MgPSB7fTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuZ2V0TGF5ZXJDb2x1bW5zKCksXG4gICAgICAuLi5wcm9wc1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGxheWVySWNvbigpIHtcbiAgICByZXR1cm4gRGVmYXVsdExheWVySWNvbjtcbiAgfVxuXG4gIGdldCBvdmVybGF5VHlwZSgpIHtcbiAgICByZXR1cm4gT1ZFUkxBWV9UWVBFLmRlY2tnbDtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldCBpc0FnZ3JlZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IHJlcXVpcmVkTGF5ZXJDb2x1bW5zKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldCBvcHRpb25hbENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0IG5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcygpIHtcbiAgICByZXR1cm4gWydsYWJlbCcsICdvcGFjaXR5JywgJ3RoaWNrbmVzcycsICdpc1Zpc2libGUnLCAnaGlkZGVuJ107XG4gIH1cblxuICBnZXQgdmlzdWFsQ2hhbm5lbHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIHByb3BlcnR5OiAnY29sb3InLFxuICAgICAgICBmaWVsZDogJ2NvbG9yRmllbGQnLFxuICAgICAgICBzY2FsZTogJ2NvbG9yU2NhbGUnLFxuICAgICAgICBkb21haW46ICdjb2xvckRvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnY29sb3JSYW5nZScsXG4gICAgICAgIGtleTogJ2NvbG9yJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuY29sb3IsXG4gICAgICAgIG51bGxWYWx1ZTogTk9fVkFMVUVfQ09MT1IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzaXplJyxcbiAgICAgICAgZmllbGQ6ICdzaXplRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3NpemVTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3NpemVEb21haW4nLFxuICAgICAgICByYW5nZTogJ3NpemVSYW5nZScsXG4gICAgICAgIGtleTogJ3NpemUnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5zaXplLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKlxuICAgKiBDb2x1bW4gcGFpcnMgbWFwcyBsYXllciBjb2x1bW4gdG8gYSBzcGVjaWZpYyBmaWVsZCBwYWlycyxcbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG51bGxcbiAgICovXG4gIGdldCBjb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qXG4gICAqIERlZmF1bHQgcG9pbnQgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgcG9pbnQgYmFzZWQgbGF5ZXJzOiBwb2ludCwgaWNvbiBldGMuXG4gICAqL1xuICBnZXQgZGVmYXVsdFBvaW50Q29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdDoge3BhaXI6ICdsbmcnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzoge3BhaXI6ICdsYXQnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfVxuICAgIH07XG4gIH1cblxuICAvKlxuICAgKiBEZWZhdWx0IGxpbmsgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgbGluayBiYXNlZCBsYXllcnM6IGFyYywgbGluZSBldGNcbiAgICovXG4gIGdldCBkZWZhdWx0TGlua0NvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsYXQwOiB7cGFpcjogJ2xuZzAnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzA6IHtwYWlyOiAnbGF0MCcsIGZpZWxkUGFpcktleTogJ2xuZyd9LFxuICAgICAgbGF0MToge3BhaXI6ICdsbmcxJywgZmllbGRQYWlyS2V5OiAnbGF0J30sXG4gICAgICBsbmcxOiB7cGFpcjogJ2xhdDEnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgUmVhY3QgY29tcG9uZW50IGZvciB0byByZW5kZXIgbGF5ZXIgaW5zdHJ1Y3Rpb25zIGluIGEgbW9kYWxcbiAgICogQHJldHVybnMge29iamVjdH0gLSBhbiBvYmplY3RcbiAgICogQGV4YW1wbGVcbiAgICogIHJldHVybiB7XG4gICAqICAgIGlkOiAnaWNvbkluZm8nLFxuICAgKiAgICB0ZW1wbGF0ZTogSWNvbkluZm9Nb2RhbCxcbiAgICogICAgbW9kYWxQcm9wczoge1xuICAgKiAgICAgIHRpdGxlOiAnSG93IHRvIGRyYXcgaWNvbnMnXG4gICAqICAgfTtcbiAgICogfVxuICAgKi9cbiAgZ2V0IGxheWVySW5mb01vZGFsKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qXG4gICAqIEdpdmVuIGEgZGF0YXNldCwgYXV0b21hdGljYWxseSBmaW5kIHByb3BzIHRvIGNyZWF0ZSBsYXllciBiYXNlZCBvbiBpdFxuICAgKiBhbmQgcmV0dXJuIHRoZSBwcm9wcyBhbmQgcHJldmlvdXMgZm91bmQgbGF5ZXJzLlxuICAgKiBCeSBkZWZhdWx0LCBubyBsYXllcnMgd2lsbCBiZSBmb3VuZFxuICAgKi9cbiAgc3RhdGljIGZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBmb3VuZExheWVycykge1xuICAgIHJldHVybiB7cHJvcHM6IFtdLCBmb3VuZExheWVyc307XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBhcnJheSBvZiBwcmVzZXQgcmVxdWlyZWQgY29sdW1uIG5hbWVzXG4gICAqIGZvdW5kIGZpZWxkIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgdG8gc2V0IGFzIGxheWVyIGNvbHVtblxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdEZpZWxkc1xuICAgKiBAcGFyYW0ge29iamVjdFtdfSBhbGxGaWVsZHNcbiAgICogQHJldHVybnMge29iamVjdFtdIHwgbnVsbH0gYWxsIHBvc3NpYmxlIHJlcXVpcmVkIGxheWVyIGNvbHVtbiBwYWlyc1xuICAgKi9cbiAgc3RhdGljIGZpbmREZWZhdWx0Q29sdW1uRmllbGQoZGVmYXVsdEZpZWxkcywgYWxsRmllbGRzKSB7XG4gICAgLy8gZmluZCBhbGwgbWF0Y2hlZCBmaWVsZHMgZm9yIGVhY2ggcmVxdWlyZWQgY29sXG4gICAgY29uc3QgcmVxdWlyZWRDb2x1bW5zID0gT2JqZWN0LmtleXMoZGVmYXVsdEZpZWxkcykucmVkdWNlKChwcmV2LCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVpcmVkRmllbGRzID0gYWxsRmllbGRzLmZpbHRlcihcbiAgICAgICAgZiA9PiBmLm5hbWUgPT09IGRlZmF1bHRGaWVsZHNba2V5XSB8fCBkZWZhdWx0RmllbGRzW2tleV0uaW5jbHVkZXMoZi5uYW1lKVxuICAgICAgKTtcblxuICAgICAgcHJldltrZXldID0gcmVxdWlyZWRGaWVsZHMubGVuZ3RoXG4gICAgICAgID8gcmVxdWlyZWRGaWVsZHMubWFwKGYgPT4gKHtcbiAgICAgICAgICAgIHZhbHVlOiBmLm5hbWUsXG4gICAgICAgICAgICBmaWVsZElkeDogZi5maWVsZElkeFxuICAgICAgICAgIH0pKVxuICAgICAgICA6IG51bGw7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSk7XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMocmVxdWlyZWRDb2x1bW5zKS5ldmVyeShCb29sZWFuKSkge1xuICAgICAgLy8gaWYgYW55IGZpZWxkIG1pc3NpbmcsIHJldHVybiBudWxsXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRBbGxQb3NzaWJsZUNvbHVtblBhcmlzKHJlcXVpcmVkQ29sdW1ucyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0QWxsUG9zc2libGVDb2x1bW5QYXJpcyhyZXF1aXJlZENvbHVtbnMpIHtcbiAgICAvLyBmb3IgbXVsdGlwbGUgbWF0Y2hlZCBmaWVsZCBmb3Igb25lIHJlcXVpcmVkIGNvbHVtbiwgcmV0dXJuIG11bHRpcGxlXG4gICAgLy8gY29tYmluYXRpb25zLCBlLiBnLiBpZiBjb2x1bW4gYSBoYXMgMiBtYXRjaGVkLCBjb2x1bW4gYiBoYXMgMyBtYXRjaGVkXG4gICAgLy8gNiBwb3NzaWJsZSBjb2x1bW4gcGFpcnMgd2lsbCBiZSByZXR1cm5lZFxuICAgIGNvbnN0IGFsbEtleXMgPSBPYmplY3Qua2V5cyhyZXF1aXJlZENvbHVtbnMpO1xuICAgIGNvbnN0IHBvaW50ZXJzID0gYWxsS2V5cy5tYXAoKGssIGkpID0+ICgoaSA9PT0gYWxsS2V5cy5sZW5ndGggLSAxID8gLTEgOiAwKSkpO1xuICAgIGNvbnN0IGNvdW50UGVyS2V5ID0gYWxsS2V5cy5tYXAoayA9PiByZXF1aXJlZENvbHVtbnNba10ubGVuZ3RoKTtcbiAgICBjb25zdCBwYWlycyA9IFtdO1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG4gICAgd2hpbGUgKGluY3JlbWVudFBvaW50ZXJzKHBvaW50ZXJzLCBjb3VudFBlcktleSwgcG9pbnRlcnMubGVuZ3RoIC0gMSkpIHtcbiAgICAgIGNvbnN0IG5ld1BhaXIgPSBwb2ludGVycy5yZWR1Y2UoKHByZXYsIGN1dXIsIGkpID0+IHtcbiAgICAgICAgcHJldlthbGxLZXlzW2ldXSA9IHJlcXVpcmVkQ29sdW1uc1thbGxLZXlzW2ldXVtjdXVyXTtcbiAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIHBhaXJzLnB1c2gobmV3UGFpcik7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cbiAgICAvLyByZWN1cnNpdmVseSBpbmNyZW1lbnQgcG9pbnRlcnNcbiAgICBmdW5jdGlvbiBpbmNyZW1lbnRQb2ludGVycyhwdHMsIGNvdW50cywgaW5kZXgpIHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBwdHNbMF0gPT09IGNvdW50c1swXSAtIDEpIHtcbiAgICAgICAgLy8gbm90aGluZyB0byBpbmNyZW1lbnRcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHRzW2luZGV4XSArIDEgPCBjb3VudHNbaW5kZXhdKSB7XG4gICAgICAgIHB0c1tpbmRleF0gPSBwdHNbaW5kZXhdICsgMTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHB0c1tpbmRleF0gPSAwO1xuICAgICAgcmV0dXJuIGluY3JlbWVudFBvaW50ZXJzKHB0cywgY291bnRzLCBpbmRleCAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWlycztcbiAgfVxuXG4gIHN0YXRpYyBoZXhUb1JnYihjKSB7XG4gICAgcmV0dXJuIGhleFRvUmdiKGMpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdExheWVyQ29uZmlnKHByb3BzID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YUlkOiBwcm9wcy5kYXRhSWQgfHwgbnVsbCxcbiAgICAgIHZpc2liaWxpdHlCeVpvb206IHtcbiAgICAgICAgbWluOiBwcm9wcy52aXNpYmlsaXR5Qnlab29tPy5taW4gfHwgWk9PTV9MRVZFTF9MSU1JVFMubWluLFxuICAgICAgICBtYXg6IHByb3BzLnZpc2liaWxpdHlCeVpvb20/Lm1heCB8fCBaT09NX0xFVkVMX0xJTUlUUy5tYXhcbiAgICAgIH0sXG4gICAgICBsYWJlbDogcHJvcHMubGFiZWwgfHwgREVGQVVMVF9MQVlFUl9MQUJFTCxcbiAgICAgIGNvbG9yOiBwcm9wcy5jb2xvciB8fCBjb2xvck1ha2VyLm5leHQoKS52YWx1ZSxcbiAgICAgIGNvbHVtbnM6IHByb3BzLmNvbHVtbnMgfHwgbnVsbCxcbiAgICAgIGlzVmlzaWJsZTogcHJvcHMuaXNWaXNpYmxlIHx8IGZhbHNlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHByb3BzLmlzQ29uZmlnQWN0aXZlIHx8IGZhbHNlLFxuICAgICAgaGlnaGxpZ2h0Q29sb3I6IHByb3BzLmhpZ2hsaWdodENvbG9yIHx8IERFRkFVTFRfSElHSExJR0hUX0NPTE9SLFxuICAgICAgaGlkZGVuOiBwcm9wcy5oaWRkZW4gfHwgZmFsc2UsXG5cbiAgICAgIC8vIFRPRE86IHJlZmFjdG9yIHRoaXMgaW50byBzZXBhcmF0ZSB2aXN1YWwgQ2hhbm5lbCBjb25maWdcbiAgICAgIC8vIGNvbG9yIGJ5IGZpZWxkLCBkb21haW4gaXMgc2V0IGJ5IGZpbHRlcnMsIGZpZWxkLCBzY2FsZSB0eXBlXG4gICAgICBjb2xvckZpZWxkOiBudWxsLFxuICAgICAgY29sb3JEb21haW46IFswLCAxXSxcbiAgICAgIGNvbG9yU2NhbGU6IFNDQUxFX1RZUEVTLnF1YW50aWxlLFxuXG4gICAgICAvLyBjb2xvciBieSBzaXplLCBkb21haW4gaXMgc2V0IGJ5IGZpbHRlcnMsIGZpZWxkLCBzY2FsZSB0eXBlXG4gICAgICBzaXplRG9tYWluOiBbMCwgMV0sXG4gICAgICBzaXplU2NhbGU6IFNDQUxFX1RZUEVTLmxpbmVhcixcbiAgICAgIHNpemVGaWVsZDogbnVsbCxcblxuICAgICAgdmlzQ29uZmlnOiB7fSxcblxuICAgICAgdGV4dExhYmVsOiBbREVGQVVMVF9URVhUX0xBQkVMXSxcblxuICAgICAgY29sb3JVSToge1xuICAgICAgICBjb2xvcjogREVGQVVMVF9DT0xPUl9VSSxcbiAgICAgICAgY29sb3JSYW5nZTogREVGQVVMVF9DT0xPUl9VSVxuICAgICAgfSxcbiAgICAgIGFuaW1hdGlvbjoge2VuYWJsZWQ6IGZhbHNlfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiBhIHZpc3VhbENoYW5uZWwgY29uZmlnXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnMge3tsYWJlbDogc3RyaW5nLCBtZWFzdXJlOiAoc3RyaW5nfHN0cmluZyl9fVxuICAgKi9cbiAgZ2V0VmlzdWFsQ2hhbm5lbERlc2NyaXB0aW9uKGtleSkge1xuICAgIC8vIGUuZy4gbGFiZWw6IENvbG9yLCBtZWFzdXJlOiBWZWhpY2xlIFR5cGVcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbdGhpcy52aXN1YWxDaGFubmVsc1trZXldLnJhbmdlXS5sYWJlbCxcbiAgICAgIG1lYXN1cmU6IHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF1cbiAgICAgICAgPyAodGhpcy5jb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXS5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgIHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF0ubmFtZSlcbiAgICAgICAgOiB0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZGVmYXVsdE1lYXN1cmVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIGZpZWxkIHRvIGxheWVyIGNvbHVtbiwgcmV0dXJuIGNvbHVtbiBjb25maWdcbiAgICogQHBhcmFtIGtleSAtIENvbHVtbiBLZXlcbiAgICogQHBhcmFtIGZpZWxkIC0gU2VsZWN0ZWQgZmllbGRcbiAgICogQHJldHVybnMge3t9fSAtIENvbHVtbiBjb25maWdcbiAgICovXG4gIGFzc2lnbkNvbHVtbihrZXksIGZpZWxkKSB7XG4gICAgLy8gZmllbGQgdmFsdWUgY291bGQgYmUgbnVsbCBmb3Igb3B0aW9uYWwgY29sdW1uc1xuICAgIGNvbnN0IHVwZGF0ZSA9IGZpZWxkXG4gICAgICA/IHtcbiAgICAgICAgICB2YWx1ZTogZmllbGQubmFtZSxcbiAgICAgICAgICBmaWVsZElkeDogZmllbGQuZmllbGRJZHhcbiAgICAgICAgfVxuICAgICAgOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMX07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25maWcuY29sdW1ucyxcbiAgICAgIFtrZXldOiB7XG4gICAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnNba2V5XSxcbiAgICAgICAgLi4udXBkYXRlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmaWVsZCBwYWlyIHRvIGNvbHVtbiBjb25maWcsIHJldHVybiBjb2x1bW4gY29uZmlnXG4gICAqIEBwYXJhbSBrZXkgLSBDb2x1bW4gS2V5XG4gICAqIEBwYXJhbSBwYWlyIC0gZmllbGQgUGFpclxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIENvbHVtbiBjb25maWdcbiAgICovXG4gIGFzc2lnbkNvbHVtblBhaXJzKGtleSwgcGFpcikge1xuICAgIGlmICghdGhpcy5jb2x1bW5QYWlycyB8fCAhdGhpcy5jb2x1bW5QYWlycz8uW2tleV0pIHtcbiAgICAgIC8vIHNob3VsZCBub3QgZW5kIGluIHRoaXMgc3RhdGVcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zO1xuICAgIH1cblxuICAgIGNvbnN0IHtwYWlyOiBwYXJ0bmVyS2V5LCBmaWVsZFBhaXJLZXl9ID0gdGhpcy5jb2x1bW5QYWlycz8uW2tleV07XG4gICAgY29uc3Qge2ZpZWxkUGFpcktleTogcGFydG5lckZpZWxkUGFpcktleX0gPSB0aGlzLmNvbHVtblBhaXJzPy5bcGFydG5lcktleV07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25maWcuY29sdW1ucyxcbiAgICAgIFtrZXldOiBwYWlyW2ZpZWxkUGFpcktleV0sXG4gICAgICBbcGFydG5lcktleV06IHBhaXJbcGFydG5lckZpZWxkUGFpcktleV1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBhIHJhZGl1cyB6b29tIG11bHRpcGxpZXIgdG8gcmVuZGVyIHBvaW50cywgc28gdGhleSBhcmUgdmlzaWJsZSBpbiBhbGwgem9vbSBsZXZlbFxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwU3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1hcFN0YXRlLnpvb20gLSBhY3R1YWwgem9vbVxuICAgKiBAcGFyYW0ge251bWJlciB8IHZvaWR9IG1hcFN0YXRlLnpvb21PZmZzZXQgLSB6b29tT2Zmc2V0IHdoZW4gcmVuZGVyIGluIHRoZSBwbG90IGNvbnRhaW5lciBmb3IgZXhwb3J0IGltYWdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRab29tRmFjdG9yKHt6b29tLCB6b29tT2Zmc2V0ID0gMH0pIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgTWF0aC5tYXgoMTQgLSB6b29tICsgem9vbU9mZnNldCwgMCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBhIGVsZXZhdGlvbiB6b29tIG11bHRpcGxpZXIgdG8gcmVuZGVyIHBvaW50cywgc28gdGhleSBhcmUgdmlzaWJsZSBpbiBhbGwgem9vbSBsZXZlbFxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwU3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1hcFN0YXRlLnpvb20gLSBhY3R1YWwgem9vbVxuICAgKiBAcGFyYW0ge251bWJlciB8IHZvaWR9IG1hcFN0YXRlLnpvb21PZmZzZXQgLSB6b29tT2Zmc2V0IHdoZW4gcmVuZGVyIGluIHRoZSBwbG90IGNvbnRhaW5lciBmb3IgZXhwb3J0IGltYWdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRFbGV2YXRpb25ab29tRmFjdG9yKHt6b29tLCB6b29tT2Zmc2V0ID0gMH0pIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudmlzQ29uZmlnLmVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3JcbiAgICAgID8gTWF0aC5wb3coMiwgTWF0aC5tYXgoOCAtIHpvb20gKyB6b29tT2Zmc2V0LCAwKSlcbiAgICAgIDogMTtcbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShkYXRhc2V0cywgZmlsdGVyZWRJbmRleCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJlbmRlckxheWVyKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldEhvdmVyRGF0YShvYmplY3QsIGRhdGFDb250YWluZXIpIHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBlbnRyeSBvZiBsYXllckRhdGEgc2hvdWxkIGhhdmUgYW4gaW5kZXggb2YgYSByb3cgaW4gdGhlIG9yaWdpbmFsIGRhdGEgY29udGFpbmVyLlxuICAgIC8vIEVhY2ggbGF5ZXIgY2FuIGltcGxlbWVudCBpdHMgb3duIGdldEhvdmVyRGF0YSBtZXRob2RcbiAgICByZXR1cm4gZGF0YUNvbnRhaW5lci5yb3cob2JqZWN0LmluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGNoYW5nZSBsYXllciB0eXBlLCB0cnkgdG8gY29weSBvdmVyIGxheWVyIGNvbmZpZ3MgYXMgbXVjaCBhcyBwb3NzaWJsZVxuICAgKiBAcGFyYW0gY29uZmlnVG9Db3B5IC0gY29uZmlnIHRvIGNvcHkgb3ZlclxuICAgKiBAcGFyYW0gdmlzQ29uZmlnU2V0dGluZ3MgLSB2aXNDb25maWcgc2V0dGluZ3Mgb2YgY29uZmlnIHRvIGNvcHlcbiAgICovXG4gIGFzc2lnbkNvbmZpZ1RvTGF5ZXIoY29uZmlnVG9Db3B5LCB2aXNDb25maWdTZXR0aW5ncykge1xuICAgIC8vIGRvbid0IGRlZXAgbWVyZ2UgdmlzdWFsQ2hhbm5lbCBmaWVsZFxuICAgIC8vIGRvbid0IGRlZXAgbWVyZ2UgY29sb3IgcmFuZ2UsIHJldmVyc2VkOiBpcyBub3QgYSBrZXkgYnkgZGVmYXVsdFxuICAgIGNvbnN0IHNoYWxsb3dDb3B5ID0gWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXS5jb25jYXQoXG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLm1hcCh2ID0+IHYuZmllbGQpXG4gICAgKTtcblxuICAgIC8vIGRvbid0IGNvcHkgb3ZlciBkb21haW4gYW5kIGFuaW1hdGlvblxuICAgIGNvbnN0IG5vdFRvQ29weSA9IFsnYW5pbWF0aW9uJ10uY29uY2F0KE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykubWFwKHYgPT4gdi5kb21haW4pKTtcbiAgICAvLyBpZiByYW5nZSBpcyBmb3IgdGhlIHNhbWUgcHJvcGVydHkgZ3JvdXAgY29weSBpdCwgb3RoZXJ3aXNlLCBub3QgdG8gY29weVxuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaCh2ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29uZmlnVG9Db3B5LnZpc0NvbmZpZ1t2LnJhbmdlXSAmJlxuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdICYmXG4gICAgICAgIHZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdLmdyb3VwICE9PSB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdLmdyb3VwXG4gICAgICApIHtcbiAgICAgICAgbm90VG9Db3B5LnB1c2godi5yYW5nZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBkb24ndCBjb3B5IG92ZXIgdmlzdWFsQ2hhbm5lbCByYW5nZVxuICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBjb3BpZWQgPSB0aGlzLmNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnLCBjb25maWdUb0NvcHksIHtcbiAgICAgIHNoYWxsb3dDb3B5LFxuICAgICAgbm90VG9Db3B5XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyhjb3BpZWQpO1xuICAgIC8vIHZhbGlkYXRlIHZpc3VhbENoYW5uZWwgZmllbGQgdHlwZSBhbmQgc2NhbGUgdHlwZXNcbiAgICBPYmplY3Qua2V5cyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCk7XG4gICAgfSk7XG4gIH1cblxuICAvKlxuICAgKiBSZWN1cnNpdmVseSBjb3B5IGNvbmZpZyBvdmVyIHRvIGFuIGVtcHR5IGxheWVyXG4gICAqIHdoZW4gcmVjZWl2ZWQgc2F2ZWQgY29uZmlnLCBvciBjb3B5IGNvbmZpZyBvdmVyIGZyb20gYSBkaWZmZXJlbnQgbGF5ZXIgdHlwZVxuICAgKiBtYWtlIHN1cmUgdG8gb25seSBjb3B5IG92ZXIgdmFsdWUgdG8gZXhpc3Rpbmcga2V5c1xuICAgKiBAcGFyYW0ge29iamVjdH0gY3VycmVudENvbmZpZyAtIGV4aXN0aW5nIGNvbmZpZyB0byBiZSBvdmVycmlkZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlnVG9Db3B5IC0gbmV3IENvbmZpZyB0byBjb3B5IG92ZXJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gc2hhbGxvd0NvcHkgLSBhcnJheSBvZiBwcm9wZXJ0aWVzIHRvIG5vdCB0byBiZSBkZWVwIGNvcGllZFxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBub3RUb0NvcHkgLSBhcnJheSBvZiBwcm9wZXJ0aWVzIG5vdCB0byBjb3B5XG4gICAqIEByZXR1cm5zIHtvYmplY3R9IC0gY29waWVkIGNvbmZpZ1xuICAgKi9cbiAgY29weUxheWVyQ29uZmlnKGN1cnJlbnRDb25maWcsIGNvbmZpZ1RvQ29weSwge3NoYWxsb3dDb3B5ID0gW10sIG5vdFRvQ29weSA9IFtdfSA9IHt9KSB7XG4gICAgY29uc3QgY29waWVkID0ge307XG4gICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBpc1BsYWluT2JqZWN0KGN1cnJlbnRDb25maWdba2V5XSkgJiZcbiAgICAgICAgaXNQbGFpbk9iamVjdChjb25maWdUb0NvcHlba2V5XSkgJiZcbiAgICAgICAgIXNoYWxsb3dDb3B5LmluY2x1ZGVzKGtleSkgJiZcbiAgICAgICAgIW5vdFRvQ29weS5pbmNsdWRlcyhrZXkpXG4gICAgICApIHtcbiAgICAgICAgLy8gcmVjdXJzaXZlbHkgYXNzaWduIG9iamVjdCB2YWx1ZVxuICAgICAgICBjb3BpZWRba2V5XSA9IHRoaXMuY29weUxheWVyQ29uZmlnKGN1cnJlbnRDb25maWdba2V5XSwgY29uZmlnVG9Db3B5W2tleV0sIHtcbiAgICAgICAgICBzaGFsbG93Q29weSxcbiAgICAgICAgICBub3RUb0NvcHlcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKG5vdE51bGxvclVuZGVmaW5lZChjb25maWdUb0NvcHlba2V5XSkgJiYgIW5vdFRvQ29weS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIC8vIGNvcHlcbiAgICAgICAgY29waWVkW2tleV0gPSBjb25maWdUb0NvcHlba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGtlZXAgZXhpc3RpbmdcbiAgICAgICAgY29waWVkW2tleV0gPSBjdXJyZW50Q29uZmlnW2tleV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29waWVkO1xuICB9XG5cbiAgcmVnaXN0ZXJWaXNDb25maWcobGF5ZXJWaXNDb25maWdzKSB7XG4gICAgT2JqZWN0LmtleXMobGF5ZXJWaXNDb25maWdzKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyAmJiBMQVlFUl9WSVNfQ09ORklHU1tsYXllclZpc0NvbmZpZ3NbaXRlbV1dKSB7XG4gICAgICAgIC8vIGlmIGFzc2lnbmVkIG9uZSBvZiBkZWZhdWx0IExBWUVSX0NPTkZJR1NcbiAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW2l0ZW1dID0gTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbaXRlbV0gPSBMQVlFUl9WSVNfQ09ORklHU1tsYXllclZpc0NvbmZpZ3NbaXRlbV1dO1xuICAgICAgfSBlbHNlIGlmIChbJ3R5cGUnLCAnZGVmYXVsdFZhbHVlJ10uZXZlcnkocCA9PiBsYXllclZpc0NvbmZpZ3NbaXRlbV0uaGFzT3duUHJvcGVydHkocCkpKSB7XG4gICAgICAgIC8vIGlmIHByb3ZpZGVkIGN1c3RvbWl6ZWQgdmlzQ29uZmlnLCBhbmQgaGFzIHR5cGUgJiYgZGVmYXVsdFZhbHVlXG4gICAgICAgIC8vIFRPRE86IGZ1cnRoZXIgY2hlY2sgaWYgY3VzdG9taXplZCB2aXNDb25maWcgaXMgdmFsaWRcbiAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW2l0ZW1dID0gbGF5ZXJWaXNDb25maWdzW2l0ZW1dLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1tpdGVtXSA9IGxheWVyVmlzQ29uZmlnc1tpdGVtXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldExheWVyQ29sdW1ucygpIHtcbiAgICBjb25zdCBjb2x1bW5WYWxpZGF0b3JzID0gdGhpcy5jb2x1bW5WYWxpZGF0b3JzIHx8IHt9O1xuICAgIGNvbnN0IHJlcXVpcmVkID0gdGhpcy5yZXF1aXJlZExheWVyQ29sdW1ucy5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogY29sdW1uVmFsaWRhdG9yc1trZXldXG4gICAgICAgICAgPyB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMSwgdmFsaWRhdG9yOiBjb2x1bW5WYWxpZGF0b3JzW2tleV19XG4gICAgICAgICAgOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMX1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICAgIGNvbnN0IG9wdGlvbmFsID0gdGhpcy5vcHRpb25hbENvbHVtbnMucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IHt2YWx1ZTogbnVsbCwgZmllbGRJZHg6IC0xLCBvcHRpb25hbDogdHJ1ZX1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gICAgcmV0dXJuIHsuLi5yZXF1aXJlZCwgLi4ub3B0aW9uYWx9O1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSB7Li4udGhpcy5jb25maWcsIC4uLm5ld0NvbmZpZ307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZy52aXNDb25maWcgPSB7Li4udGhpcy5jb25maWcudmlzQ29uZmlnLCAuLi5uZXdWaXNDb25maWd9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZykge1xuICAgIGNvbnN0IHtjb2xvclVJOiBwcmV2aW91cywgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KG5ld0NvbmZpZykgfHwgdHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCBjb2xvclVJUHJvcCA9IE9iamVjdC5lbnRyaWVzKG5ld0NvbmZpZykucmVkdWNlKChhY2N1LCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBpc1BsYWluT2JqZWN0KGFjY3Vba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB7Li4uYWNjdVtrZXldLCAuLi52YWx1ZX0gOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9LCBwcmV2aW91c1twcm9wXSB8fCBERUZBVUxUX0NPTE9SX1VJKTtcblxuICAgIGNvbnN0IGNvbG9yVUkgPSB7XG4gICAgICAuLi5wcmV2aW91cyxcbiAgICAgIFtwcm9wXTogY29sb3JVSVByb3BcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7Y29sb3JVSX0pO1xuICAgIC8vIGlmIGNvbG9yVUlbcHJvcF0gaXMgY29sb3JSYW5nZVxuICAgIGNvbnN0IGlzQ29sb3JSYW5nZSA9IHZpc0NvbmZpZ1twcm9wXSAmJiB2aXNDb25maWdbcHJvcF0uY29sb3JzO1xuXG4gICAgaWYgKGlzQ29sb3JSYW5nZSkge1xuICAgICAgdGhpcy51cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlKG5ld0NvbmZpZywgcHJvcCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbG9yUmFuZ2VCeUNvbG9yVUkobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCk7XG4gICAgICB0aGlzLnVwZGF0ZUN1c3RvbVBhbGV0dGUobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVDdXN0b21QYWxldHRlKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApIHtcbiAgICBpZiAoIW5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnIHx8ICFuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5jdXN0b20pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKCF2aXNDb25maWdbcHJvcF0pIHJldHVybjtcbiAgICBjb25zdCB7Y29sb3JzfSA9IHZpc0NvbmZpZ1twcm9wXTtcbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0ge1xuICAgICAgLi4uY29sb3JVSVtwcm9wXS5jdXN0b21QYWxldHRlLFxuICAgICAgbmFtZTogJ0N1c3RvbSBQYWxldHRlJyxcbiAgICAgIGNvbG9yczogWy4uLmNvbG9yc11cbiAgICB9O1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgY29sb3JVSToge1xuICAgICAgICAuLi5jb2xvclVJLFxuICAgICAgICBbcHJvcF06IHtcbiAgICAgICAgICAuLi5jb2xvclVJW3Byb3BdLFxuICAgICAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBpZiBvcGVuIGRyb3Bkb3duIGFuZCBwcm9wIGlzIGNvbG9yIHJhbmdlXG4gICAqIEF1dG9tYXRpY2FsbHkgc2V0IGNvbG9yUmFuZ2VDb25maWcncyBzdGVwLCByZXZlcnNlZCBhbmQgdHlwZVxuICAgKiBAcGFyYW0geyp9IG5ld0NvbmZpZ1xuICAgKiBAcGFyYW0geyp9IHByb3BcbiAgICovXG4gIHVwZGF0ZUNvbG9yVUlCeUNvbG9yUmFuZ2UobmV3Q29uZmlnLCBwcm9wKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDb25maWcuc2hvd0Ryb3Bkb3duICE9PSAnbnVtYmVyJykgcmV0dXJuO1xuXG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgLi4uY29sb3JVSSxcbiAgICAgICAgW3Byb3BdOiB7XG4gICAgICAgICAgLi4uY29sb3JVSVtwcm9wXSxcbiAgICAgICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgICAgICAuLi5jb2xvclVJW3Byb3BdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgICAgICB0eXBlOiB2aXNDb25maWdbcHJvcF0udHlwZSxcbiAgICAgICAgICAgIHN0ZXBzOiB2aXNDb25maWdbcHJvcF0uY29sb3JzLmxlbmd0aCxcbiAgICAgICAgICAgIHJldmVyc2VkOiBCb29sZWFuKHZpc0NvbmZpZ1twcm9wXS5yZXZlcnNlZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIHVwZGF0ZUNvbG9yUmFuZ2VCeUNvbG9yVUkobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCkge1xuICAgIC8vIG9ubHkgdXBkYXRlIGNvbG9yUmFuZ2UgaWYgY2hhbmdlcyBpbiBVSSBpcyBtYWRlIHRvICdyZXZlcnNlZCcsICdzdGVwcycgb3Igc3RlcHNcbiAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcgJiZcbiAgICAgIFsncmV2ZXJzZWQnLCAnc3RlcHMnXS5zb21lKFxuICAgICAgICBrZXkgPT5cbiAgICAgICAgICBuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG4gICAgICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWdba2V5XSAhPT1cbiAgICAgICAgICAgIChwcmV2aW91c1twcm9wXSB8fCBERUZBVUxUX0NPTE9SX1VJKS5jb2xvclJhbmdlQ29uZmlnW2tleV1cbiAgICAgICk7XG4gICAgaWYgKCFzaG91bGRVcGRhdGUpIHJldHVybjtcblxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qge3N0ZXBzLCByZXZlcnNlZH0gPSBjb2xvclVJW3Byb3BdLmNvbG9yUmFuZ2VDb25maWc7XG4gICAgY29uc3QgY29sb3JSYW5nZSA9IHZpc0NvbmZpZ1twcm9wXTtcbiAgICAvLyBmaW5kIGJhc2VkIG9uIHN0ZXAgb3IgcmV2ZXJzZWRcbiAgICBsZXQgdXBkYXRlO1xuICAgIGlmIChuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgnc3RlcHMnKSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSBnZXRDb2xvckdyb3VwQnlOYW1lKGNvbG9yUmFuZ2UpO1xuXG4gICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgY29uc3Qgc2FtZUdyb3VwID0gQ09MT1JfUkFOR0VTLmZpbHRlcihjciA9PiBnZXRDb2xvckdyb3VwQnlOYW1lKGNyKSA9PT0gZ3JvdXApO1xuXG4gICAgICAgIHVwZGF0ZSA9IHNhbWVHcm91cC5maW5kKGNyID0+IGNyLmNvbG9ycy5sZW5ndGggPT09IHN0ZXBzKTtcblxuICAgICAgICBpZiAodXBkYXRlICYmIGNvbG9yUmFuZ2UucmV2ZXJzZWQpIHtcbiAgICAgICAgICB1cGRhdGUgPSByZXZlcnNlQ29sb3JSYW5nZSh0cnVlLCB1cGRhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVwZGF0ZSAmJiBjb2xvclJhbmdlLmNvbG9yTWFwKSB7XG4gICAgICAgICAgdXBkYXRlID0gdGhpcy51cGRhdGVDb2xvck1hcChwcm9wLCBjb2xvclJhbmdlLmNvbG9yTWFwLCB1cGRhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLmhhc093blByb3BlcnR5KCdyZXZlcnNlZCcpKSB7XG4gICAgICB1cGRhdGUgPSByZXZlcnNlQ29sb3JSYW5nZShyZXZlcnNlZCwgdXBkYXRlIHx8IGNvbG9yUmFuZ2UpO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGUpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJWaXNDb25maWcoe1twcm9wXTogdXBkYXRlfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29sb3JNYXAocHJvcCwgY29sb3JNYXAsIGNvbG9yUmFuZ2UpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3Qge2ZpZWxkLCBkb21haW59ID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5maW5kKHZhbHVlID0+IHZhbHVlLnJhbmdlID09PSBwcm9wKTtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5jb25maWdbZmllbGRdPy50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdib29sZWFuJyB8fCB0eXBlID09PSAnZGF0ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhdGVnb3J5Q29sb3JNYXAoY29sb3JNYXAsIHRoaXMuY29uZmlnW2RvbWFpbl0sIGNvbG9yUmFuZ2UpO1xuICAgIH1cblxuICAgIC8vIElmIG5vIHR5cGUgb3IgdHlwZSBpcyBub3Qgc3RyaW5nLCBib29sZWFuIG9yIGRhdGVcbiAgICByZXR1cm4gdGhpcy51cGRhdGVOdW1lcmljQ29sb3JNYXAoY29sb3JNYXAsIHRoaXMuY29uZmlnW2RvbWFpbl0sIGNvbG9yUmFuZ2UpO1xuICB9XG5cbiAgdXBkYXRlQ2F0ZWdvcnlDb2xvck1hcChjb2xvck1hcCwgZG9tYWluLCBjb2xvclJhbmdlKSB7XG4gICAgY29uc3QgY29sb3JzID0gY29sb3JSYW5nZS5jb2xvcnM7XG4gICAgY29uc3QgYXNzaWduZWRDYXRlZ29yaWVzID0gW107XG4gICAgY29uc3QgbmV3Q29sb3JNYXAgPSBjb2xvck1hcC5zbGljZSgwLCBjb2xvcnMubGVuZ3RoKS5tYXAoKGNNYXAsIGluZGV4KSA9PiB7XG4gICAgICBhc3NpZ25lZENhdGVnb3JpZXMucHVzaChjTWFwWzBdKTtcbiAgICAgIHJldHVybiBbY01hcFswXSwgY29sb3JzW2luZGV4XV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5hc3NpZ25lZENvbG9ycyA9IGNvbG9ycy5zbGljZShuZXdDb2xvck1hcC5sZW5ndGgsIGNvbG9ycy5sZW5ndGgpO1xuXG4gICAgZm9yIChjb25zdCBjb2xvciBvZiB1bmFzc2lnbmVkQ29sb3JzKSB7XG4gICAgICBjb25zdCBjYXRlZ29yeSA9IGRvbWFpbi5maW5kKGQgPT4gIWFzc2lnbmVkQ2F0ZWdvcmllcy5pbmNsdWRlcyhkKSk7XG4gICAgICBpZiAoIWNhdGVnb3J5KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgYXNzaWduZWRDYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkpO1xuICAgICAgbmV3Q29sb3JNYXAucHVzaChbY2F0ZWdvcnksIGNvbG9yXSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb2xvclJhbmdlLFxuICAgICAgY29sb3JNYXA6IG5ld0NvbG9yTWFwXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZU51bWVyaWNDb2xvck1hcChjb2xvck1hcCwgZG9tYWluLCB1cGRhdGUpIHtcbiAgICBjb25zdCBjb2xvcnMgPSB1cGRhdGUuY29sb3JzO1xuICAgIGxldCBuZXdDb2xvck1hcCA9IGNvbG9yTWFwLnNsaWNlKDAsIGNvbG9ycy5sZW5ndGgpO1xuXG4gICAgbmV3Q29sb3JNYXAgPSBuZXdDb2xvck1hcC5tYXAoKGNNYXAsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGluZGV4ID09PSBuZXdDb2xvck1hcC5sZW5ndGggLSAxID8gbnVsbCA6IGNNYXBbMF07XG4gICAgICByZXR1cm4gW3ZhbHVlLCBjb2xvcnNbaW5kZXhdXTtcbiAgICB9KTtcbiAgICBjb25zdCB1bmFzc2lnbmVkQ29sb3JzID0gY29sb3JzLnNsaWNlKG5ld0NvbG9yTWFwLmxlbmd0aCwgY29sb3JzLmxlbmd0aCk7XG5cbiAgICBpZiAodW5hc3NpZ25lZENvbG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjb2xvck1hcFZhbHVlcyA9IGNvbG9yTWFwLm1hcChjID0+IGNbMF0pLmZpbHRlcihjID0+IHR5cGVvZiBjID09PSAnbnVtYmVyJyk7XG4gICAgICBjb25zdCBtYXhWYWx1ZSA9IE1hdGgubWF4KC4uLmNvbG9yTWFwVmFsdWVzLCBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdKTtcbiAgICAgIGNvbnN0IHByZXZWYWx1ZSA9IG5ld0NvbG9yTWFwW25ld0NvbG9yTWFwLmxlbmd0aCAtIDJdWzBdO1xuICAgICAgY29uc3Qgc3RlcCA9IChtYXhWYWx1ZSAtIHByZXZWYWx1ZSkgLyAodW5hc3NpZ25lZENvbG9ycy5sZW5ndGggKyAxKTtcbiAgICAgIG5ld0NvbG9yTWFwW25ld0NvbG9yTWFwLmxlbmd0aCAtIDFdWzBdID0gcHJldlZhbHVlICsgc3RlcDtcblxuICAgICAgZm9yIChjb25zdCBbaSwgY29sb3JdIG9mIHVuYXNzaWduZWRDb2xvcnMuZW50cmllcygpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaSA9PT0gdW5hc3NpZ25lZENvbG9ycy5sZW5ndGggLSAxID8gbnVsbCA6IHByZXZWYWx1ZSArIChzdGVwICogKGkgKyAyKSk7XG4gICAgICAgIG5ld0NvbG9yTWFwLnB1c2goW3ZhbHVlLCBjb2xvcl0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4udXBkYXRlLFxuICAgICAgY29sb3JNYXA6IG5ld0NvbG9yTWFwXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGxheWVyIGhhcyBhbGwgY29sdW1uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0geWVzIG9yIG5vXG4gICAqL1xuICBoYXNBbGxDb2x1bW5zKCkge1xuICAgIGNvbnN0IHtjb2x1bW5zfSA9IHRoaXMuY29uZmlnO1xuICAgIHJldHVybiAoXG4gICAgICAoY29sdW1ucyAmJlxuICAgICAgT2JqZWN0LnZhbHVlcyhjb2x1bW5zKS5ldmVyeSh2ID0+IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odi5vcHRpb25hbCB8fCAodi52YWx1ZSAmJiB2LmZpZWxkSWR4ID4gLTEpKTtcbiAgICAgIH0pKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBsYXllciBoYXMgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgT2JqZWN0fSBsYXllckRhdGFcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHllcyBvciBub1xuICAgKi9cbiAgaGFzTGF5ZXJEYXRhKGxheWVyRGF0YSkge1xuICAgIGlmICghbGF5ZXJEYXRhKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKGxheWVyRGF0YS5kYXRhICYmIGxheWVyRGF0YS5kYXRhLmxlbmd0aCk7XG4gIH1cblxuICBpc1ZhbGlkVG9TYXZlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgJiYgdGhpcy5oYXNBbGxDb2x1bW5zKCk7XG4gIH1cblxuICBzaG91bGRSZW5kZXJMYXllcihkYXRhKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLnR5cGUgJiZcbiAgICAgIHRoaXMuaGFzQWxsQ29sdW1ucygpICYmXG4gICAgICB0aGlzLmhhc0xheWVyRGF0YShkYXRhKSAmJlxuICAgICAgdHlwZW9mIHRoaXMucmVuZGVyTGF5ZXIgPT09ICdmdW5jdGlvbicpXG4gICAgKTtcbiAgfVxuXG4gIGdldENvbG9yU2NhbGUoY29sb3JTY2FsZSwgY29sb3JEb21haW4sIGNvbG9yUmFuZ2UpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb2xvclJhbmdlLmNvbG9yTWFwKSkge1xuICAgICAgY29uc3QgY01hcCA9IG5ldyBNYXAoKTtcbiAgICAgIGNvbG9yUmFuZ2UuY29sb3JNYXAuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgIGNNYXAuc2V0KGssIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IGhleFRvUmdiKHYpIDogdik7XG4gICAgICB9KTtcblxuICAgICAgLy8gQHRzLWlnbm9yZSBkMyBzY2FsZVxuICAgICAgY29uc3Qgc2NhbGUgPSBTQ0FMRV9GVU5DW2NvbG9yU2NhbGVdKClcbiAgICAgICAgLmRvbWFpbihBcnJheS5mcm9tKGNNYXAua2V5cygpKSlcbiAgICAgICAgLnJhbmdlKEFycmF5LmZyb20oY01hcC52YWx1ZXMoKSkpXG4gICAgICAgIC51bmtub3duKFVOS05PV05fQ09MT1IpO1xuICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZShjb2xvclNjYWxlLCBjb2xvckRvbWFpbiwgY29sb3JSYW5nZS5jb2xvcnMubWFwKGhleFRvUmdiKSk7XG4gIH1cblxuICBnZXRDdXN0b21NYXJrZXJzU2NhbGUocmFuZ2UpIHtcbiAgICBsZXQgdW5rbm93blZhbHVlID0gRkFMTEJBQ0tfSUNPTjtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICByZXR1cm4gKCkgPT4gdW5rbm93blZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcHBpbmcgPSBuZXcgTWFwKCk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyYW5nZSkpIHtcbiAgICAgIGZvciAoY29uc3Qge3ZhbHVlLCBtYXJrZXJVcmx9IG9mIHJhbmdlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHVua25vd25WYWx1ZSA9IG1hcmtlclVybDtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJVcmwpIHtcbiAgICAgICAgICBtYXBwaW5nLnNldCh2YWx1ZSwgbWFya2VyVXJsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB1bmtub3duVmFsdWUgPSByYW5nZS5vdGhlcnNNYXJrZXI7XG4gICAgICBmb3IgKGNvbnN0IHt2YWx1ZSwgbWFya2VyVXJsfSBvZiByYW5nZS5tYXJrZXJNYXApIHtcbiAgICAgICAgbWFwcGluZy5zZXQodmFsdWUsIG1hcmtlclVybCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZSBkMyBzY2FsZVxuICAgIGNvbnN0IHNjYWxlID0gc2NhbGVPcmRpbmFsKClcbiAgICAgIC5kb21haW4oQXJyYXkuZnJvbShtYXBwaW5nLmtleXMoKSkpXG4gICAgICAucmFuZ2UoQXJyYXkuZnJvbShtYXBwaW5nLnZhbHVlcygpKSlcbiAgICAgIC51bmtub3duKHVua25vd25WYWx1ZSk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSB2aXN1YWwgY2hhbm5lbHMgdG8gZGVjay5nbCBhY2Nlc29yc1xuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW0gUGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbS5kYXRhQWNjZXNzb3IgQWNjZXNzIGtlcGxlci5nbCBsYXllciBkYXRhIGZyb20gZGVjay5nbCBsYXllclxuICAgKiBAcGFyYW0ge2ltcG9ydCgndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItaW50ZXJmYWNlJykuRGF0YUNvbnRhaW5lckludGVyZmFjZX0gcGFyYW0uZGF0YUNvbnRhaW5lciBEYXRhQ29udGFpbmVyIHRvIHVzZSB1c2Ugd2l0aCBkYXRhQWNjZXNzb3JcbiAgICogQHJldHVybiB7T2JqZWN0fSBhdHRyaWJ1dGVBY2Nlc3NvcnMgLSBkZWNrLmdsIGxheWVyIGF0dHJpYnV0ZSBhY2Nlc3NvcnNcbiAgICovXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc29ycyh7ZGF0YUFjY2Vzc29yID0gZGVmYXVsdERhdGFBY2Nlc3NvciwgZGF0YUNvbnRhaW5lcn0pIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVBY2Nlc3NvcnMgPSB7fTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGZpZWxkLFxuICAgICAgICBmaXhlZCxcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIGRvbWFpbixcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIGFjY2Vzc29yLFxuICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlLFxuICAgICAgICBudWxsVmFsdWUsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uXG4gICAgICB9ID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcblxuICAgICAgY29uc3Qgc2hvdWxkR2V0U2NhbGUgPSBCb29sZWFuKHNjYWxlICYmIHRoaXMuY29uZmlnW2ZpZWxkXSk7XG5cbiAgICAgIGlmIChzaG91bGRHZXRTY2FsZSkge1xuICAgICAgICBjb25zdCBhcmdzID0gW3RoaXMuY29uZmlnW3NjYWxlXSwgdGhpcy5jb25maWdbZG9tYWluXSwgdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXV07XG4gICAgICAgIGNvbnN0IGlzRml4ZWQgPSBmaXhlZCAmJiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdO1xuICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBkZWNsYXJlIGFzIGNvbnN0IGFsbCB0aGUgcGFyYW1ldGVycyB0aGF0IHdlIGFyZSBnb2luZyB0byBiZSB1c2UgaW4gdGhlIGdldEVuY29kZWRDaGFubmVsVmFsdWUgY2FsbFxuICAgICAgICAvLyBvdGhlcndpc2UsIHRoZSBvbGRMYXllckRhdGEgcGFyYW1ldGVyIGluIGZvcm1hdExheWVyRGF0YSBtZXRob2Qgd2lsbCBiZSB3cm9uZyAoeW91IGNhbiBjaGVjayB0aGUgZm9ybWF0TGF5ZXJEYXRhIFRpbGVMYXllciBtZXRob2QgaW4gQnVpbGRlciBhcyBleGFtcGxlKVxuICAgICAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuY29uZmlnW2ZpZWxkXTtcbiAgICAgICAgY29uc3QgYWdncmVnYXRpb25WYWx1ZSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1thZ2dyZWdhdGlvbl07XG5cbiAgICAgICAgY29uc3Qgc2NhbGVGdW5jdGlvbiA9XG4gICAgICAgICAgY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3JcbiAgICAgICAgICAgID8gdGhpcy5nZXRDb2xvclNjYWxlKC4uLmFyZ3MpXG4gICAgICAgICAgICA6IGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmN1c3RvbU1hcmtlclxuICAgICAgICAgICAgPyB0aGlzLmdldEN1c3RvbU1hcmtlcnNTY2FsZSh0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdKVxuICAgICAgICAgICAgOiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZSguLi5hcmdzLCBpc0ZpeGVkKTtcblxuICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZCA9PlxuICAgICAgICAgIHRoaXMuZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZShcbiAgICAgICAgICAgIHNjYWxlRnVuY3Rpb24sXG4gICAgICAgICAgICBkYXRhQWNjZXNzb3IoZGF0YUNvbnRhaW5lcikoZCksXG4gICAgICAgICAgICBmaWVsZENvbmZpZyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVmFsdWUsXG4gICAgICAgICAgICBudWxsVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZ2V0QXR0cmlidXRlVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9IGdldEF0dHJpYnV0ZVZhbHVlKHRoaXMuY29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF0dHJpYnV0ZUFjY2Vzc29yc1thY2Nlc3Nvcl0gPVxuICAgICAgICAgIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUodGhpcy5jb25maWcpIDogZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWF0dHJpYnV0ZUFjY2Vzc29yc1thY2Nlc3Nvcl0pIHtcbiAgICAgICAgQ29uc29sZS53YXJuKGBGYWlsZWQgdG8gcHJvdmlkZSBhY2Nlc3NvciBmdW5jdGlvbiBmb3IgJHthY2Nlc3NvciB8fCBjaGFubmVsfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZUFjY2Vzc29ycztcbiAgfVxuXG4gIGdldFZpc0NoYW5uZWxTY2FsZShzY2FsZSwgZG9tYWluLCByYW5nZSwgZml4ZWQpIHtcbiAgICBpZiAoc2NhbGUgPT09IFNDQUxFX1RZUEVTLm9yZGluYWwpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgZDMtc2NhbGUgdHlwZVxuICAgICAgcmV0dXJuIFNDQUxFX0ZVTkNbc2NhbGVdKClcbiAgICAgICAgLmRvbWFpbihkb21haW4uc2xpY2UoMCwgcmFuZ2UubGVuZ3RoKSlcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bihVTktOT1dOX0NPTE9SKTtcbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlIGQzLXNjYWxlIHR5cGVcbiAgICByZXR1cm4gU0NBTEVfRlVOQ1tmaXhlZCA/ICdsaW5lYXInIDogc2NhbGVdKClcbiAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgLnJhbmdlKGZpeGVkID8gZG9tYWluIDogcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGJvdW5kcyBvZiB0aGUgZGF0YS5cbiAgICogQHBhcmFtIHtpbXBvcnQoJ3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLWludGVyZmFjZScpLkRhdGFDb250YWluZXJJbnRlcmZhY2V9IGRhdGFDb250YWluZXIgRGF0YUNvbnRhaW5lciB0byBjYWxjdWxhdGUgYm91bmRzIGZvci5cbiAgICogQHBhcmFtIHsoZDoge2luZGV4OiBudW1iZXJ9LCBkYzogaW1wb3J0KCd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnKS5EYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiBudW1iZXJbXX0gZ2V0UG9zaXRpb24gQWNjZXNzIGtlcGxlci5nbCBsYXllciBkYXRhIGZyb20gZGVjay5nbCBsYXllclxuICAgKiBAcmV0dXJuIHtudW1iZXJbXXxudWxsfSBib3VuZHMgb2YgdGhlIGRhdGEuXG4gICAqL1xuICBnZXRQb2ludHNCb3VuZHMoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBubyBuZWVkIHRvIGxvb3AgdGhyb3VnaCB0aGUgZW50aXJlIGRhdGFzZXRcbiAgICAvLyBnZXQgYSBzYW1wbGUgb2YgZGF0YSB0byBjYWxjdWxhdGUgYm91bmRzXG4gICAgY29uc3Qgc2FtcGxlRGF0YSA9XG4gICAgICBkYXRhQ29udGFpbmVyLm51bVJvd3MoKSA+IE1BWF9TQU1QTEVfU0laRVxuICAgICAgICA/IGdldFNhbXBsZURhdGEoZGF0YUNvbnRhaW5lciwgTUFYX1NBTVBMRV9TSVpFKVxuICAgICAgICA6IGRhdGFDb250YWluZXI7XG5cbiAgICBjb25zdCBwb2ludHMgPSBzYW1wbGVEYXRhLm1hcEluZGV4KGdldFBvc2l0aW9uKTtcblxuICAgIGNvbnN0IGxhdEJvdW5kcyA9IGdldExhdExuZ0JvdW5kcyhwb2ludHMsIDEsIFstOTAsIDkwXSk7XG4gICAgY29uc3QgbG5nQm91bmRzID0gZ2V0TGF0TG5nQm91bmRzKHBvaW50cywgMCwgWy0xODAsIDE4MF0pO1xuXG4gICAgaWYgKCFsYXRCb3VuZHMgfHwgIWxuZ0JvdW5kcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsbmdCb3VuZHNbMF0sIGxhdEJvdW5kc1swXSwgbG5nQm91bmRzWzFdLCBsYXRCb3VuZHNbMV1dO1xuICB9XG5cbiAgZ2V0Q2hhbmdlZFRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2Vycykge1xuICAgIGNvbnN0IHRyaWdnZXJDaGFuZ2VkID0gZGlmZlVwZGF0ZVRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2VycywgdGhpcy5fb2xkRGF0YVVwZGF0ZVRyaWdnZXJzKTtcbiAgICB0aGlzLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMgPSBkYXRhVXBkYXRlVHJpZ2dlcnM7XG5cbiAgICByZXR1cm4gdHJpZ2dlckNoYW5nZWQ7XG4gIH1cblxuICBnZXRFbmNvZGVkQ2hhbm5lbFZhbHVlKFxuICAgIHNjYWxlLFxuICAgIGRhdGEsXG4gICAgZmllbGQsXG4gICAgLy8gSW4gYnVpbGRlciB3ZSBvdmVyd3JpdGUgdGhlIGdldFZhbHVlIGZ1bmN0aW9uIGFuZCB3ZSB1c2UgdGhlIF9hZ2dyZWdhdGlvbiBwYXJhbWV0ZXIgaW4gc3BhdGlhbCBpbmRleCBsYXllcnMgYXMgdGhlIFF1YWRrZXlMYXllci5cbiAgICBfYWdncmVnYXRpb24sXG4gICAgbnVsbFZhbHVlID0gTk9fVkFMVUVfQ09MT1IsXG4gICAgZ2V0VmFsdWUgPSBkZWZhdWx0R2V0RmllbGRWYWx1ZVxuICApIHtcbiAgICBjb25zdCB7dHlwZX0gPSBmaWVsZDtcbiAgICBjb25zdCB2YWx1ZSA9IGdldFZhbHVlKGZpZWxkLCBkYXRhKTtcblxuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGxWYWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgYXR0cmlidXRlVmFsdWU7XG4gICAgaWYgKHR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXApIHtcbiAgICAgIC8vIHNob3VsZG4ndCBuZWVkIHRvIGNvbnZlcnQgaGVyZVxuICAgICAgLy8gc2NhbGUgRnVuY3Rpb24gc2hvdWxkIHRha2UgY2FyZSBvZiBpdFxuICAgICAgYXR0cmlidXRlVmFsdWUgPSBzY2FsZShuZXcgRGF0ZSh2YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IHNjYWxlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gbnVsbFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTtcbiAgfVxuXG4gIHVwZGF0ZU1ldGEobWV0YSkge1xuICAgIHRoaXMubWV0YSA9IHsuLi50aGlzLm1ldGEsIC4uLm1ldGF9O1xuICB9XG5cbiAgZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzKHtmaWx0ZXJlZEluZGV4LCBpZCwgYWxsRGF0YX0pIHtcbiAgICBjb25zdCB7Y29sdW1uc30gPSB0aGlzLmNvbmZpZztcblxuICAgIHJldHVybiB7XG4gICAgICBnZXREYXRhOiB7ZGF0YXNldElkOiBpZCwgYWxsRGF0YSwgY29sdW1ucywgZmlsdGVyZWRJbmRleH0sXG4gICAgICBnZXRNZXRhOiB7ZGF0YXNldElkOiBpZCwgYWxsRGF0YSwgY29sdW1uc30sXG4gICAgICAuLi4odGhpcy5jb25maWcudGV4dExhYmVsIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCB0bCwgaSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFtgZ2V0TGFiZWxDaGFyYWN0ZXJTZXQtJHtpfWBdOiB0bC5maWVsZCA/IHRsLmZpZWxkLm5hbWUgOiBudWxsXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICB1cGRhdGVEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBsYXllckRhdGFzZXQgPSBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdO1xuICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyfSA9IGxheWVyRGF0YXNldDtcblxuICAgIHRoaXMudXBkYXRlVmlzdWFsQ2hhbm5lbEZpZWxkcyhsYXllckRhdGFzZXQpO1xuXG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG4gICAgY29uc3QgZGF0YVVwZGF0ZVRyaWdnZXJzID0gdGhpcy5nZXREYXRhVXBkYXRlVHJpZ2dlcnMobGF5ZXJEYXRhc2V0KTtcbiAgICBjb25zdCB0cmlnZ2VyQ2hhbmdlZCA9IHRoaXMuZ2V0Q2hhbmdlZFRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2Vycyk7XG5cbiAgICBpZiAodHJpZ2dlckNoYW5nZWQuZ2V0TWV0YSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllck1ldGEoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pO1xuICAgIH1cblxuICAgIGxldCBkYXRhID0gW107XG5cbiAgICBpZiAoIXRyaWdnZXJDaGFuZ2VkLmdldERhdGEgJiYgb2xkTGF5ZXJEYXRhICYmIG9sZExheWVyRGF0YS5kYXRhKSB7XG4gICAgICAvLyBzYW1lIGRhdGFcbiAgICAgIGRhdGEgPSBvbGRMYXllckRhdGEuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IHRoaXMuY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZShsYXllckRhdGFzZXQsIGdldFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge2RhdGEsIHRyaWdnZXJDaGFuZ2VkfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgc3R5bGVkIGZpZWxkcyB0byBtYXRjaCBvbmVzIGZyb20gbmV3IGRhdGFzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gICAqL1xuICB1cGRhdGVWaXN1YWxDaGFubmVsRmllbGRzKGRhdGFzZXQpIHtcbiAgICBmb3IgKGNvbnN0IHtmaWVsZH0gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKSkge1xuICAgICAgY29uc3Qgb2xkRmllbGQgPSB0aGlzLmNvbmZpZ1tmaWVsZF07XG4gICAgICBpZiAoIW9sZEZpZWxkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld0RhdGFTZXRGaWVsZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gb2xkRmllbGQubmFtZSkgfHwgbnVsbDtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tmaWVsZF06IG5ld0RhdGFTZXRGaWVsZH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIG9uZSBsYXllciBkb21haW4gd2hlbiBzdGF0ZS5kYXRhIGNoYW5nZWRcbiAgICogaWYgc3RhdGUuZGF0YSBjaGFuZ2UgaXMgZHVlIG90IHVwZGF0ZSBmaWx0ZXIsIG5ld0ZpbGVyIHdpbGwgYmUgcGFzc2VkXG4gICAqIGNhbGxlZCBieSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGFcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdGaWx0ZXJcbiAgICogQHJldHVybnMge29iamVjdH0gbGF5ZXJcbiAgICovXG4gIHVwZGF0ZUxheWVyRG9tYWluKGRhdGFzZXRzLCBuZXdGaWx0ZXIpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZ2V0RGF0YXNldChkYXRhc2V0cyk7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGNvbnN0IHtzY2FsZX0gPSBjaGFubmVsO1xuICAgICAgY29uc3Qgc2NhbGVUeXBlID0gdGhpcy5jb25maWdbc2NhbGVdO1xuICAgICAgLy8gb3JkaW5hbCBkb21haW4gaXMgYmFzZWQgb24gZGF0YUNvbnRhaW5lciwgaWYgb25seSBmaWx0ZXIgY2hhbmdlZFxuICAgICAgLy8gbm8gbmVlZCB0byB1cGRhdGUgb3JkaW5hbCBkb21haW5cbiAgICAgIGlmICghbmV3RmlsdGVyIHx8IHNjYWxlVHlwZSAhPT0gU0NBTEVfVFlQRVMub3JkaW5hbCkge1xuICAgICAgICBjb25zdCB7ZG9tYWlufSA9IGNoYW5uZWw7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREb21haW4gPSB0aGlzLmNhbGN1bGF0ZUxheWVyRG9tYWluKHRhYmxlLCBjaGFubmVsKTtcbiAgICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2RvbWFpbl06IHVwZGF0ZWREb21haW59KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0RGF0YXNldChkYXRhc2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhSWQgPyBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB2aXN1YWwgY2hhbm5lbCBmaWVsZCBhbmQgc2NhbGVzIGJhc2VkIG9uIHN1cHBvcnRlZCBmaWVsZCAmIHNjYWxlIHR5cGVcbiAgICogQHBhcmFtIGNoYW5uZWxcbiAgICovXG4gIHZhbGlkYXRlVmlzdWFsQ2hhbm5lbChjaGFubmVsKSB7XG4gICAgdGhpcy52YWxpZGF0ZUZpZWxkVHlwZShjaGFubmVsKTtcbiAgICB0aGlzLnZhbGlkYXRlU2NhbGUoY2hhbm5lbCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgZmllbGQgdHlwZSBiYXNlZCBvbiBjaGFubmVsU2NhbGVUeXBlXG4gICAqL1xuICB2YWxpZGF0ZUZpZWxkVHlwZShjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge2ZpZWxkLCBjaGFubmVsU2NhbGVUeXBlLCBzdXBwb3J0ZWRGaWVsZFR5cGVzfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICBpZiAodGhpcy5jb25maWdbZmllbGRdKSB7XG4gICAgICAvLyBpZiBmaWVsZCBpcyBzZWxlY3RlZCwgY2hlY2sgaWYgZmllbGQgdHlwZSBpcyBzdXBwb3J0ZWRcbiAgICAgIGNvbnN0IGNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzID1cbiAgICAgICAgc3VwcG9ydGVkRmllbGRUeXBlcyB8fCBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFNbY2hhbm5lbFNjYWxlVHlwZV07XG5cbiAgICAgIGlmICghY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMuaW5jbHVkZXModGhpcy5jb25maWdbZmllbGRdLnR5cGUpKSB7XG4gICAgICAgIC8vIGZpZWxkIHR5cGUgaXMgbm90IHN1cHBvcnRlZCwgc2V0IGl0IGJhY2sgdG8gbnVsbFxuICAgICAgICAvLyBzZXQgc2NhbGUgYmFjayB0byBkZWZhdWx0XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tmaWVsZF06IG51bGx9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgc2NhbGUgdHlwZSBiYXNlZCBvbiBhZ2dyZWdhdGlvblxuICAgKi9cbiAgdmFsaWRhdGVTY2FsZShjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge3NjYWxlfSA9IHZpc3VhbENoYW5uZWw7XG4gICAgaWYgKCFzY2FsZSkge1xuICAgICAgLy8gdmlzdWFsQ2hhbm5lbCBkb2Vzbid0IGhhdmUgc2NhbGVcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2NhbGVPcHRpb25zID0gdGhpcy5nZXRTY2FsZU9wdGlvbnMoY2hhbm5lbCk7XG4gICAgLy8gY2hlY2sgaWYgY3VycmVudCBzZWxlY3RlZCBzY2FsZSBpc1xuICAgIC8vIHN1cHBvcnRlZCwgaWYgbm90LCBjaGFuZ2UgdG8gZGVmYXVsdFxuICAgIGlmICghc2NhbGVPcHRpb25zLmluY2x1ZGVzKHRoaXMuY29uZmlnW3NjYWxlXSkpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tzY2FsZV06IHNjYWxlT3B0aW9uc1swXX0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2NhbGUgb3B0aW9ucyBiYXNlZCBvbiBjdXJyZW50IGZpZWxkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIGdldFNjYWxlT3B0aW9ucyhjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge2ZpZWxkLCBzY2FsZSwgY2hhbm5lbFNjYWxlVHlwZX0gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnW2ZpZWxkXVxuICAgICAgPyBGSUVMRF9PUFRTW3RoaXMuY29uZmlnW2ZpZWxkXS50eXBlXS5zY2FsZVtjaGFubmVsU2NhbGVUeXBlXVxuICAgICAgOiBbdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcoKVtzY2FsZV1dO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICB0aGlzLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChjaGFubmVsKTtcbiAgICAvLyBjYWxjdWxhdGUgbGF5ZXIgY2hhbm5lbCBkb21haW5cbiAgICBjb25zdCB1cGRhdGVkRG9tYWluID0gdGhpcy5jYWxjdWxhdGVMYXllckRvbWFpbihkYXRhc2V0LCB2aXN1YWxDaGFubmVsKTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbdmlzdWFsQ2hhbm5lbC5kb21haW5dOiB1cGRhdGVkRG9tYWlufSk7XG4gIH1cblxuICBnZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMoKSB7XG4gICAgY29uc3QgdXBkYXRlVHJpZ2dlcnMgPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2godmlzdWFsQ2hhbm5lbCA9PiB7XG4gICAgICAvLyBmaWVsZCByYW5nZSBzY2FsZSBkb21haW5cbiAgICAgIGNvbnN0IHthY2Nlc3NvciwgZmllbGQsIHNjYWxlLCBkb21haW4sIHJhbmdlLCBkZWZhdWx0VmFsdWUsIGZpeGVkfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICAgIHVwZGF0ZVRyaWdnZXJzW2FjY2Vzc29yXSA9IHtcbiAgICAgICAgW2ZpZWxkXTogdGhpcy5jb25maWdbZmllbGRdLFxuICAgICAgICBbc2NhbGVdOiB0aGlzLmNvbmZpZ1tzY2FsZV0sXG4gICAgICAgIFtkb21haW5dOiB0aGlzLmNvbmZpZ1tkb21haW5dLFxuICAgICAgICBbcmFuZ2VdOiB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUodGhpcy5jb25maWcpIDogZGVmYXVsdFZhbHVlLFxuICAgICAgICAuLi4oZml4ZWQgPyB7W2ZpeGVkXTogdGhpcy5jb25maWcudmlzQ29uZmlnW2ZpeGVkXX0gOiB7fSlcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHVwZGF0ZVRyaWdnZXJzO1xuICB9XG5cbiAgY2FsY3VsYXRlTGF5ZXJEb21haW4oZGF0YXNldCwgdmlzdWFsQ2hhbm5lbCkge1xuICAgIGNvbnN0IHtzY2FsZX0gPSB2aXN1YWxDaGFubmVsO1xuICAgIGNvbnN0IHNjYWxlVHlwZSA9IHRoaXMuY29uZmlnW3NjYWxlXTtcblxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gICAgaWYgKCFmaWVsZCkge1xuICAgICAgLy8gaWYgY29sb3JGaWVsZCBvciBzaXplRmllbGQgd2VyZSBzZXQgYmFjayB0byBudWxsXG4gICAgICByZXR1cm4gZGVmYXVsdERvbWFpbjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZC5uYW1lKTtcbiAgICBpZiAoIWRhdGFTZXRGaWVsZCkge1xuICAgICAgLy8gaWYgbmV3IGRhdGFzZXQgZG9lc24ndCBjb250YWluIHByZXZpb3VzbHkgc2V0IGZpZWxkXG4gICAgICByZXR1cm4gZGVmYXVsdERvbWFpbjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YXNldC5nZXRDb2x1bW5MYXllckRvbWFpbihkYXRhU2V0RmllbGQsIHNjYWxlVHlwZSkgfHwgZGVmYXVsdERvbWFpbjtcbiAgfVxuXG4gIGhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SW5mbykge1xuICAgIHJldHVybiB0aGlzLmlzTGF5ZXJIb3ZlcmVkKG9iamVjdEluZm8pICYmIG9iamVjdEluZm8ub2JqZWN0ID8gb2JqZWN0SW5mby5vYmplY3QgOiBudWxsO1xuICB9XG5cbiAgaXNMYXllckhvdmVyZWQob2JqZWN0SW5mbykge1xuICAgIHJldHVybiBvYmplY3RJbmZvPy5waWNrZWQgJiYgb2JqZWN0SW5mbz8ubGF5ZXI/LnByb3BzPy5pZCA9PT0gdGhpcy5pZDtcbiAgfVxuXG4gIGdldFJhZGl1c1NjYWxlQnlab29tKG1hcFN0YXRlLCBmaXhlZFJhZGl1cykge1xuICAgIGNvbnN0IHJhZGl1c0NoYW5uZWwgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmMgPT4gdmMucHJvcGVydHkgPT09ICdyYWRpdXMnKTtcblxuICAgIGlmICghcmFkaXVzQ2hhbm5lbCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGQgPSByYWRpdXNDaGFubmVsLmZpZWxkO1xuICAgIGNvbnN0IGZpeGVkID0gZml4ZWRSYWRpdXMgPT09IHVuZGVmaW5lZCA/IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5maXhlZFJhZGl1cyA6IGZpeGVkUmFkaXVzO1xuICAgIGNvbnN0IHtyYWRpdXN9ID0gdGhpcy5jb25maWcudmlzQ29uZmlnO1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBmaXhlZCA/IDEgOiAodGhpcy5jb25maWdbZmllbGRdID8gMSA6IHJhZGl1cykgKiB0aGlzLmdldFpvb21GYWN0b3IobWFwU3RhdGUpO1xuICB9XG5cbiAgZ2V0UmFkaXVzU2NhbGUoZml4ZWRSYWRpdXMpIHtcbiAgICBjb25zdCByYWRpdXNDaGFubmVsID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5maW5kKHZjID0+IHZjLnByb3BlcnR5ID09PSAncmFkaXVzJyk7XG5cbiAgICBpZiAoIXJhZGl1c0NoYW5uZWwpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkID0gcmFkaXVzQ2hhbm5lbC5maWVsZDtcbiAgICBjb25zdCBmaXhlZCA9IGZpeGVkUmFkaXVzID09PSB1bmRlZmluZWQgPyB0aGlzLmNvbmZpZy52aXNDb25maWcuZml4ZWRSYWRpdXMgOiBmaXhlZFJhZGl1cztcbiAgICBjb25zdCB7cmFkaXVzfSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZztcblxuICAgIHJldHVybiBmaXhlZCA/IDEgOiAodGhpcy5jb25maWdbZmllbGRdID8gMSA6IHJhZGl1cyk7XG4gIH1cblxuICBnZXRNYXhNYXJrZXJTaXplKCkge1xuICAgIGNvbnN0IHt2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qge3NpemVGaWVsZCwgcmFkaXVzUmFuZ2UsIHJhZGl1c30gPSB2aXNDb25maWc7XG4gICAgcmV0dXJuIE1hdGguY2VpbCgoc2l6ZUZpZWxkID8gcmFkaXVzUmFuZ2VbMV0gOiByYWRpdXMpKTtcbiAgfVxuXG4gIGdldFJhZGl1c1VuaXQoZml4ZWRSYWRpdXMpIHtcbiAgICBjb25zdCByYWRpdXNDaGFubmVsID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5maW5kKHZjID0+IHZjLnByb3BlcnR5ID09PSAncmFkaXVzJyk7XG5cbiAgICBpZiAoIXJhZGl1c0NoYW5uZWwpIHtcbiAgICAgIHJldHVybiAncGl4ZWxzJztcbiAgICB9XG5cbiAgICBjb25zdCBmaXhlZCA9IGZpeGVkUmFkaXVzID09PSB1bmRlZmluZWQgPyB0aGlzLmNvbmZpZy52aXNDb25maWcuZml4ZWRSYWRpdXMgOiBmaXhlZFJhZGl1cztcblxuICAgIHJldHVybiBmaXhlZCA/ICdtZXRlcnMnIDogJ3BpeGVscyc7XG4gIH1cblxuICBzaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpIHtcbiAgICByZXR1cm4gcHJvcHMuc29tZShwID0+ICF0aGlzLm5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcy5pbmNsdWRlcyhwKSk7XG4gIH1cblxuICBnZXRCcnVzaGluZ0V4dGVuc2lvblByb3BzKGludGVyYWN0aW9uQ29uZmlnLCBicnVzaGluZ1RhcmdldCkge1xuICAgIGNvbnN0IHticnVzaH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcblxuICAgIHJldHVybiB7XG4gICAgICAvLyBicnVzaGluZ1xuICAgICAgYXV0b0hpZ2hsaWdodDogIWJydXNoLmVuYWJsZWQsXG4gICAgICBicnVzaGluZ1JhZGl1czogYnJ1c2guY29uZmlnLnNpemUgKiAxMDAwLFxuICAgICAgYnJ1c2hpbmdUYXJnZXQ6IGJydXNoaW5nVGFyZ2V0IHx8ICdzb3VyY2UnLFxuICAgICAgYnJ1c2hpbmdFbmFibGVkOiBicnVzaC5lbmFibGVkXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyh7aWR4LCBncHVGaWx0ZXIsIG1hcFN0YXRlLCB2aXNpYmxlLCBtYXNrUG9seWdvbn0pIHtcbiAgICBjb25zdCBtYXNrRXh0ZW5zaW9uUHJvcHMgPSBnZXRNYXNrRXh0ZW5zaW9uUHJvcHMobWFza1BvbHlnb24pO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5tYXNrRXh0ZW5zaW9uUHJvcHMsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIGlkeCxcbiAgICAgIGNvb3JkaW5hdGVTeXN0ZW06IENPT1JESU5BVEVfU1lTVEVNLkxOR0xBVCxcbiAgICAgIHBpY2thYmxlOiB0cnVlLFxuICAgICAgd3JhcExvbmdpdHVkZTogdHJ1ZSxcbiAgICAgIHBhcmFtZXRlcnM6IHtkZXB0aFRlc3Q6IEJvb2xlYW4obWFwU3RhdGUuZHJhZ1JvdGF0ZSB8fCB0aGlzLmNvbmZpZy52aXNDb25maWcuZW5hYmxlM2QpfSxcbiAgICAgIGhpZGRlbjogdGhpcy5jb25maWcuaGlkZGVuLFxuICAgICAgdmlzaWJpbGl0eUJ5Wm9vbToge1xuICAgICAgICBtaW46IHRoaXMuY29uZmlnLnZpc2liaWxpdHlCeVpvb20ubWluLFxuICAgICAgICBtYXg6IHRoaXMuY29uZmlnLnZpc2liaWxpdHlCeVpvb20ubWF4XG4gICAgICB9LFxuICAgICAgLy8gdmlzY29uZmlnXG4gICAgICBvcGFjaXR5OiB0aGlzLmNvbmZpZy52aXNDb25maWcub3BhY2l0eSxcbiAgICAgIGhpZ2hsaWdodENvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgIC8vIGRhdGEgZmlsdGVyaW5nXG4gICAgICBleHRlbnNpb25zOiBbZGF0YUZpbHRlckV4dGVuc2lvbiwgLi4ubWFza0V4dGVuc2lvblByb3BzLmV4dGVuc2lvbnNdLFxuICAgICAgZmlsdGVyUmFuZ2U6IGdwdUZpbHRlciA/IGdwdUZpbHRlci5maWx0ZXJSYW5nZSA6IHVuZGVmaW5lZCxcbiAgICAgIC8vIGxheWVyIHNob3VsZCBiZSB2aXNpYmxlIGFuZCBpZiBzcGxpdE1hcCwgc2hvd24gaW4gdG8gb25lIG9mIHBhbmVsXG4gICAgICB2aXNpYmxlOiB0aGlzLmNvbmZpZy5pc1Zpc2libGUgJiYgdmlzaWJsZVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogYCR7dGhpcy5pZH0taG92ZXJlZGAsXG4gICAgICBwaWNrYWJsZTogZmFsc2UsXG4gICAgICB3cmFwTG9uZ2l0dWRlOiB0cnVlLFxuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uTE5HTEFUXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlclRleHRMYWJlbExheWVyKHtnZXRQb3NpdGlvbiwgZ2V0UGl4ZWxPZmZzZXQsIHVwZGF0ZVRyaWdnZXJzLCBzaGFyZWRQcm9wc30sIHJlbmRlck9wdHMpIHtcbiAgICBjb25zdCB7ZGF0YSwgbWFwU3RhdGV9ID0gcmVuZGVyT3B0cztcbiAgICBjb25zdCB7dGV4dExhYmVsfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgcmV0dXJuIGRhdGEudGV4dExhYmVscy5yZWR1Y2UoKGFjY3UsIGQsIGkpID0+IHtcbiAgICAgIGlmIChkLmdldFRleHQpIHtcbiAgICAgICAgYWNjdS5wdXNoKFxuICAgICAgICAgIG5ldyBUZXh0TGF5ZXIoe1xuICAgICAgICAgICAgLi4uc2hhcmVkUHJvcHMsXG4gICAgICAgICAgICBpZDogYCR7dGhpcy5pZH0tbGFiZWwtJHt0ZXh0TGFiZWxbaV0uZmllbGQ/Lm5hbWV9YCxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEuZGF0YSxcbiAgICAgICAgICAgIGdldFRleHQ6IGQuZ2V0VGV4dCxcbiAgICAgICAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgICAgICAgY2hhcmFjdGVyU2V0OiBkLmNoYXJhY3RlclNldCxcbiAgICAgICAgICAgIGdldFBpeGVsT2Zmc2V0OiBnZXRQaXhlbE9mZnNldCh0ZXh0TGFiZWxbaV0pLFxuICAgICAgICAgICAgZ2V0U2l6ZTogMSxcbiAgICAgICAgICAgIHNpemVTY2FsZTogdGV4dExhYmVsW2ldLnNpemUsXG4gICAgICAgICAgICBnZXRUZXh0QW5jaG9yOiB0ZXh0TGFiZWxbaV0uYW5jaG9yLFxuICAgICAgICAgICAgZ2V0QWxpZ25tZW50QmFzZWxpbmU6IHRleHRMYWJlbFtpXS5hbGlnbm1lbnQsXG4gICAgICAgICAgICBnZXRDb2xvcjogdGV4dExhYmVsW2ldLmNvbG9yLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAvLyB0ZXh0IHdpbGwgYWx3YXlzIHNob3cgb24gdG9wIG9mIGFsbCBsYXllcnNcbiAgICAgICAgICAgICAgZGVwdGhUZXN0OiBmYWxzZVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0RmlsdGVyVmFsdWU6IGRhdGEuZ2V0RmlsdGVyVmFsdWUsXG4gICAgICAgICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICAgICAgICAuLi51cGRhdGVUcmlnZ2VycyxcbiAgICAgICAgICAgICAgZ2V0VGV4dDogdGV4dExhYmVsW2ldLmZpZWxkPy5uYW1lLFxuICAgICAgICAgICAgICBnZXRQaXhlbE9mZnNldDoge1xuICAgICAgICAgICAgICAgIC4uLnVwZGF0ZVRyaWdnZXJzLmdldFJhZGl1cyxcbiAgICAgICAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICAgICAgICBhbmNob3I6IHRleHRMYWJlbFtpXS5hbmNob3IsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiB0ZXh0TGFiZWxbaV0uYWxpZ25tZW50XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGdldFRleHRBbmNob3I6IHRleHRMYWJlbFtpXS5hbmNob3IsXG4gICAgICAgICAgICAgIGdldEFsaWdubWVudEJhc2VsaW5lOiB0ZXh0TGFiZWxbaV0uYWxpZ25tZW50LFxuICAgICAgICAgICAgICBnZXRDb2xvcjogdGV4dExhYmVsW2ldLmNvbG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgZGVjay5nbCBgSWNvbkxheWVyYCBcImF1dG9QYWNrXCIgbW9kZSBhY2Nlc3NvciBmb3IgY3VzdG9tIG1hcmtlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gY3VzdG9tTWFya2Vyc1N0YXR1cyBSZWNvcmQ8dXJsLCBVcmxTdGF0dXM+IHByb3ZpZGVkIGJ5IGJ1aWxkZXIsIFVybFN0YXR1cyBgb2tgIG1lYW5zIFVSTCBpcyBvayBhbmQgcmVhZHkgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7Kn0gaWNvblVybEFjY2Vzc29yIGRlY2suZ2wgYWNjZXNzb3IgKG9yIHZhbHVlKSB0aGF0IHJlc29sdmVzIHRvIFVSTCBvZiBpY29uIGZvciBnaXZlbiByb3dcbiAgICogQHJldHVybnMgZGVjay5nbCBhY2Nlc3NvciB0aGF0IHJldHVybnMgVW5wYWNrZWRJY29uIHJlYWR5IHRvIGNvbnN1bWUgYnkgSWNvbkxheWVyXG4gICAqL1xuICBnZXRDdXN0b21NYXJrZXJJY29uQWNjZXNzb3IoY3VzdG9tTWFya2Vyc1N0YXR1cywgaWNvblVybEFjY2Vzc29yKSB7XG4gICAgY29uc3QgbWF4SWNvblNpemUgPSB0aGlzLmdldE1heE1hcmtlclNpemUoKTtcblxuICAgIHJldHVybiBkID0+IHtcbiAgICAgIGNvbnN0IHdhbnRlZFVybCA9XG4gICAgICAgICh0eXBlb2YgaWNvblVybEFjY2Vzc29yID09PSAnZnVuY3Rpb24nKSA/IGljb25VcmxBY2Nlc3NvcihkKSA6IGljb25VcmxBY2Nlc3NvcjtcbiAgICAgIGNvbnN0IHVybCA9IGN1c3RvbU1hcmtlcnNTdGF0dXM/Llt3YW50ZWRVcmxdID09PSAnb2snID8gd2FudGVkVXJsIDogRkFMTEJBQ0tfSUNPTjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBgJHt1cmx9QEAke21heEljb25TaXplfWAsXG4gICAgICAgIHVybCxcbiAgICAgICAgd2lkdGg6IG1heEljb25TaXplLFxuICAgICAgICBoZWlnaHQ6IG1heEljb25TaXplLFxuICAgICAgICBtYXNrOiB0cnVlXG4gICAgICB9O1xuICAgIH07XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKGtlcGxlclRhYmxlLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB1cGRhdGVMYXllck1ldGEoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gIH1cblxuICBnZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gICAgcmV0dXJuICgpID0+IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGF5ZXI7XG4iXX0=
@@ -185,11 +185,15 @@ var PointLayer = /*#__PURE__*/function (_Layer) {
185
185
  scale: 'customMarkersScale',
186
186
  domain: 'customMarkersDomain',
187
187
  range: 'customMarkersRange',
188
+ fixed: 'customMarkersUrl',
188
189
  channelScaleType: _defaultSettings.CHANNEL_SCALES.customMarker,
189
190
  accessor: 'getIconUrl',
190
191
  supportedFieldTypes: ['string'],
191
- getAttributeValue: function getAttributeValue(config) {
192
+ defaultValue: function defaultValue(config) {
192
193
  return config.visConfig.customMarkersUrl;
194
+ },
195
+ condition: function condition(config) {
196
+ return config.visConfig.customMarkers;
193
197
  }
194
198
  }
195
199
  };
@@ -292,7 +296,8 @@ var PointLayer = /*#__PURE__*/function (_Layer) {
292
296
  var _objectInfo$layer, _objectInfo$layer$pro, _objectInfo$layer2, _objectInfo$layer2$pr;
293
297
 
294
298
  return (objectInfo === null || objectInfo === void 0 ? void 0 : objectInfo.picked) && (objectInfo === null || objectInfo === void 0 ? void 0 : (_objectInfo$layer = objectInfo.layer) === null || _objectInfo$layer === void 0 ? void 0 : (_objectInfo$layer$pro = _objectInfo$layer.props) === null || _objectInfo$layer$pro === void 0 ? void 0 : _objectInfo$layer$pro.id) === this.id || (objectInfo === null || objectInfo === void 0 ? void 0 : (_objectInfo$layer2 = objectInfo.layer) === null || _objectInfo$layer2 === void 0 ? void 0 : (_objectInfo$layer2$pr = _objectInfo$layer2.props) === null || _objectInfo$layer2$pr === void 0 ? void 0 : _objectInfo$layer2$pr.id) === "".concat(this.id, "-icon");
295
- }
299
+ } // eslint-disable-next-line complexity
300
+
296
301
  }, {
297
302
  key: "renderLayer",
298
303
  value: function renderLayer(opts) {
@@ -372,12 +377,12 @@ var PointLayer = /*#__PURE__*/function (_Layer) {
372
377
  return [new _layers.IconLayer(_objectSpread(_objectSpread(_objectSpread({}, commonLayerProps), iconLayerProps), {}, {
373
378
  id: "".concat(defaultLayerProps.id, "-icon"),
374
379
  data: data.data,
375
- getColor: data.getFillColor,
380
+ getColor: this.config.visConfig.filled ? data.getFillColor : _defaultSettings.UNKNOWN_COLOR,
376
381
  getFilterValue: data.getFilterValue,
377
382
  updateTriggers: {
378
383
  getFilterValue: updateTriggers.getFilterValue,
379
- getColor: updateTriggers.getFillColor,
380
- getIcon: [customMarkersUrl, maxIconSize, customMarkersStatus, customMarkersField, customMarkersRange],
384
+ getColor: [updateTriggers.getFillColor, this.config.visConfig.filled],
385
+ getIcon: [updateTriggers.getIconUrl, maxIconSize, customMarkersStatus],
381
386
  getSize: updateTriggers.getRadius
382
387
  }
383
388
  }))].concat((0, _toConsumableArray2["default"])(hoveredObject ? [new _layers.IconLayer(_objectSpread(_objectSpread(_objectSpread({}, iconLayerProps), this.getDefaultHoverLayerProps()), {}, {
@@ -454,4 +459,4 @@ var PointLayer = /*#__PURE__*/function (_Layer) {
454
459
  }(_baseLayer["default"]);
455
460
 
456
461
  exports["default"] = PointLayer;
457
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYXllcnMvcG9pbnQtbGF5ZXIvcG9pbnQtbGF5ZXIuanMiXSwibmFtZXMiOlsicG9pbnRQb3NBY2Nlc3NvciIsImxhdCIsImxuZyIsImFsdGl0dWRlIiwiZGMiLCJkIiwidmFsdWVBdCIsImluZGV4IiwiZmllbGRJZHgiLCJwb2ludFJlcXVpcmVkQ29sdW1ucyIsInBvaW50T3B0aW9uYWxDb2x1bW5zIiwiYnJ1c2hpbmdFeHRlbnNpb24iLCJCcnVzaGluZ0V4dGVuc2lvbiIsInBvaW50VmlzQ29uZmlncyIsInJhZGl1cyIsImZpeGVkUmFkaXVzIiwiY3VzdG9tTWFya2VycyIsImN1c3RvbU1hcmtlcnNVcmwiLCJjdXN0b21NYXJrZXJzUmFuZ2UiLCJvcGFjaXR5Iiwib3V0bGluZSIsInRoaWNrbmVzcyIsInN0cm9rZUNvbG9yIiwiY29sb3JSYW5nZSIsInN0cm9rZUNvbG9yUmFuZ2UiLCJyYWRpdXNSYW5nZSIsImZpbGxlZCIsInR5cGUiLCJsYWJlbCIsImRlZmF1bHRWYWx1ZSIsInByb3BlcnR5IiwiUG9pbnRMYXllciIsInByb3BzIiwicmVnaXN0ZXJWaXNDb25maWciLCJnZXRQb3NpdGlvbkFjY2Vzc29yIiwiZGF0YUNvbnRhaW5lciIsImNvbmZpZyIsImNvbHVtbnMiLCJQb2ludExheWVySWNvbiIsImRlZmF1bHRQb2ludENvbHVtblBhaXJzIiwiY29sb3IiLCJhY2Nlc3NvciIsImNvbmRpdGlvbiIsInZpc0NvbmZpZyIsImtleSIsImZpZWxkIiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsInNpemUiLCJmaXhlZCIsImN1c3RvbU1hcmtlciIsInN1cHBvcnRlZEZpZWxkVHlwZXMiLCJnZXRBdHRyaWJ1dGVWYWx1ZSIsImRhdGFzZXQiLCJkZWZhdWx0Q29sb3JGaWVsZCIsInVwZGF0ZUxheWVyQ29uZmlnIiwiY29sb3JGaWVsZCIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInN0cm9rZUNvbG9yRmllbGQiLCJzdHJva2VDb2xvckRvbWFpbiIsInN0cm9rZUNvbG9yU2NhbGUiLCJjdXN0b21NYXJrZXJzRmllbGQiLCJjdXN0b21NYXJrZXJzU2NhbGUiLCJnZXRQb3NpdGlvbiIsImZpbHRlcmVkSW5kZXgiLCJkYXRhIiwiaSIsImxlbmd0aCIsInBvcyIsImV2ZXJ5IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJwdXNoIiwicG9zaXRpb24iLCJkYXRhc2V0cyIsIm9sZExheWVyRGF0YSIsInRleHRMYWJlbCIsImRhdGFJZCIsImdwdUZpbHRlciIsInVwZGF0ZURhdGEiLCJ0cmlnZ2VyQ2hhbmdlZCIsInRleHRMYWJlbHMiLCJhY2Nlc3NvcnMiLCJnZXRBdHRyaWJ1dGVBY2Nlc3NvcnMiLCJnZXRGaWx0ZXJWYWx1ZSIsImZpbHRlclZhbHVlQWNjZXNzb3IiLCJib3VuZHMiLCJnZXRQb2ludHNCb3VuZHMiLCJ1cGRhdGVNZXRhIiwib2JqZWN0SW5mbyIsInBpY2tlZCIsImxheWVyIiwiaWQiLCJvcHRzIiwib2JqZWN0SG92ZXJlZCIsIm1hcFN0YXRlIiwiaW50ZXJhY3Rpb25Db25maWciLCJjdXN0b21NYXJrZXJzU3RhdHVzIiwiQm9vbGVhbiIsInNpemVGaWVsZCIsInJhZGl1c1NjYWxlIiwiZ2V0UmFkaXVzU2NhbGUiLCJyYWRpdXNVbml0cyIsImdldFJhZGl1c1VuaXQiLCJ1cGRhdGVUcmlnZ2VycyIsImZpbHRlclZhbHVlVXBkYXRlVHJpZ2dlcnMiLCJnZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyIsImJydXNoaW5nUHJvcHMiLCJnZXRCcnVzaGluZ0V4dGVuc2lvblByb3BzIiwiZ2V0UGl4ZWxPZmZzZXQiLCJnZXRSYWRpdXMiLCJleHRlbnNpb25zIiwic2hhcmVkUHJvcHMiLCJmaWx0ZXJSYW5nZSIsInZpc2libGUiLCJob3ZlcmVkT2JqZWN0IiwiaGFzSG92ZXJlZE9iamVjdCIsInRleHRMYWJlbExheWVyIiwicmVuZGVyVGV4dExhYmVsTGF5ZXIiLCJjb21tb25MYXllclByb3BzIiwicGFyYW1ldGVycyIsImRlcHRoVGVzdCIsImN1c3RvbU1hcmtlcnNDb25maWd1cmVkIiwiY3VzdG9tTWFya2Vyc01pc0NvbmZpZ3VyZWQiLCJtYXhJY29uU2l6ZSIsImdldE1heE1hcmtlclNpemUiLCJnZXRJY29uIiwiZ2V0Q3VzdG9tTWFya2VySWNvbkFjY2Vzc29yIiwiZ2V0SWNvblVybCIsImljb25MYXllclByb3BzIiwiZ2V0U2l6ZSIsInNpemVTY2FsZSIsInNpemVVbml0cyIsImxvYWRPcHRpb25zIiwiaW1hZ2UiLCJpbWFnZWJpdG1hcCIsInJlc2l6ZVdpZHRoIiwicmVzaXplSGVpZ2h0IiwicmVzaXplUXVhbGl0eSIsIkljb25MYXllciIsImdldENvbG9yIiwiZ2V0RmlsbENvbG9yIiwiZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcyIsImhpZ2hsaWdodENvbG9yIiwic2NhdHRlclBsb3RMYXllclByb3BzIiwic3Ryb2tlZCIsImxpbmVXaWR0aFNjYWxlIiwicmFkaXVzTWF4UGl4ZWxzIiwiU2NhdHRlcnBsb3RMYXllciIsImxpbmVXaWR0aFVuaXRzIiwiZ2V0TGluZUNvbG9yIiwiZmllbGRQYWlycyIsImZvckVhY2giLCJwYWlyIiwibGF0RmllbGQiLCJsbmdGaWVsZCIsImxheWVyTmFtZSIsImRlZmF1bHROYW1lIiwicHJvcCIsInZhbHVlIiwiREVGQVVMVF9MQVlFUl9DT0xPUiIsImlzVmlzaWJsZSIsIm9wdGlvbmFsIiwiTGF5ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7QUFFTyxJQUFNQSxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQW1CO0FBQUEsTUFBRUMsR0FBRixRQUFFQSxHQUFGO0FBQUEsTUFBT0MsR0FBUCxRQUFPQSxHQUFQO0FB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YnBDLFVBQUFBLEdBQUcsRUFBRThKLFFBRFE7QUFFYjdKLFVBQUFBLEdBQUcsRUFBRThKLFFBRlE7QUFHYjdKLFVBQUFBLFFBQVEsRUFBRTtBQUFDaUssWUFBQUEsS0FBSyxFQUFFLElBQVI7QUFBYzVKLFlBQUFBLFFBQVEsRUFBRSxDQUFDLENBQXpCO0FBQTRCK0osWUFBQUEsUUFBUSxFQUFFO0FBQXRDO0FBSEcsU0FBZjtBQU1BdkksUUFBQUEsS0FBSyxDQUFDMkMsSUFBTixDQUFXd0YsSUFBWDtBQUNELE9BMUJEO0FBNEJBLGFBQU87QUFBQ25JLFFBQUFBLEtBQUssRUFBTEE7QUFBRCxPQUFQO0FBQ0Q7OztFQTlIcUN3SSxxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7QnJ1c2hpbmdFeHRlbnNpb259IGZyb20gJ0BkZWNrLmdsL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHtTY2F0dGVycGxvdExheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuaW1wb3J0IHtJY29uTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5cbmltcG9ydCBMYXllciBmcm9tICcuLi9iYXNlLWxheWVyJztcbmltcG9ydCB7aGV4VG9SZ2J9IGZyb20gJ3V0aWxzL2NvbG9yLXV0aWxzJztcbmltcG9ydCB7ZmluZERlZmF1bHRDb2xvckZpZWxkfSBmcm9tICd1dGlscy9kYXRhc2V0LXV0aWxzJztcbmltcG9ydCBQb2ludExheWVySWNvbiBmcm9tICcuL3BvaW50LWxheWVyLWljb24nO1xuaW1wb3J0IHtERUZBVUxUX0xBWUVSX0NPTE9SLCBDSEFOTkVMX1NDQUxFU30gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuXG5pbXBvcnQge2dldFRleHRPZmZzZXRCeVJhZGl1cywgZm9ybWF0VGV4dExhYmVsRGF0YX0gZnJvbSAnLi4vbGF5ZXItdGV4dC1sYWJlbCc7XG5cbmV4cG9ydCBjb25zdCBwb2ludFBvc0FjY2Vzc29yID0gKHtsYXQsIGxuZywgYWx0aXR1ZGV9KSA9PiBkYyA9PiBkID0+IFtcbiAgZGMudmFsdWVBdChkLmluZGV4LCBsbmcuZmllbGRJZHgpLFxuICBkYy52YWx1ZUF0KGQuaW5kZXgsIGxhdC5maWVsZElkeCksXG4gIGFsdGl0dWRlICYmIGFsdGl0dWRlLmZpZWxkSWR4ID4gLTEgPyBkYy52YWx1ZUF0KGQuaW5kZXgsIGFsdGl0dWRlLmZpZWxkSWR4KSA6IDBcbl07XG5cbmV4cG9ydCBjb25zdCBwb2ludFJlcXVpcmVkQ29sdW1ucyA9IFsnbGF0JywgJ2xuZyddO1xuZXhwb3J0IGNvbnN0IHBvaW50T3B0aW9uYWxDb2x1bW5zID0gWydhbHRpdHVkZSddO1xuXG5jb25zdCBicnVzaGluZ0V4dGVuc2lvbiA9IG5ldyBCcnVzaGluZ0V4dGVuc2lvbigpO1xuXG5leHBvcnQgY29uc3QgcG9pbnRWaXNDb25maWdzID0ge1xuICByYWRpdXM6ICdyYWRpdXMnLFxuICBmaXhlZFJhZGl1czogJ2ZpeGVkUmFkaXVzJyxcbiAgY3VzdG9tTWFya2VyczogJ2N1c3RvbU1hcmtlcnMnLFxuICBjdXN0b21NYXJrZXJzVXJsOiAnY3VzdG9tTWFya2Vyc1VybCcsXG4gIGN1c3RvbU1hcmtlcnNSYW5nZTogJ2N1c3RvbU1hcmtlcnNSYW5nZScsXG4gIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgb3V0bGluZTogJ291dGxpbmUnLFxuICB0aGlja25lc3M6ICd0aGlja25lc3MnLFxuICBzdHJva2VDb2xvcjogJ3N0cm9rZUNvbG9yJyxcbiAgY29sb3JSYW5nZTogJ2NvbG9yUmFuZ2UnLFxuICBzdHJva2VDb2xvclJhbmdlOiAnc3Ryb2tlQ29sb3JSYW5nZScsXG4gIHJhZGl1c1JhbmdlOiAncmFkaXVzUmFuZ2UnLFxuICBmaWxsZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgbGFiZWw6ICdsYXllci5maWxsQ29sb3InLFxuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICBwcm9wZXJ0eTogJ2ZpbGxlZCdcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9pbnRMYXllciBleHRlbmRzIExheWVyIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyVmlzQ29uZmlnKHBvaW50VmlzQ29uZmlncyk7XG4gICAgdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yID0gZGF0YUNvbnRhaW5lciA9PlxuICAgICAgcG9pbnRQb3NBY2Nlc3Nvcih0aGlzLmNvbmZpZy5jb2x1bW5zKShkYXRhQ29udGFpbmVyKTtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiAncG9pbnQnO1xuICB9XG5cbiAgZ2V0IGlzQWdncmVnYXRlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCkge1xuICAgIHJldHVybiBQb2ludExheWVySWNvbjtcbiAgfVxuICBnZXQgcmVxdWlyZWRMYXllckNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHBvaW50UmVxdWlyZWRDb2x1bW5zO1xuICB9XG5cbiAgZ2V0IG9wdGlvbmFsQ29sdW1ucygpIHtcbiAgICByZXR1cm4gcG9pbnRPcHRpb25hbENvbHVtbnM7XG4gIH1cblxuICBnZXQgY29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvaW50Q29sdW1uUGFpcnM7XG4gIH1cblxuICBnZXQgbm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzKCkge1xuICAgIHJldHVybiBbLi4uc3VwZXIubm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzLCAncmFkaXVzJ107XG4gIH1cblxuICBnZXQgdmlzdWFsQ2hhbm5lbHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIC4uLnN1cGVyLnZpc3VhbENoYW5uZWxzLmNvbG9yLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldEZpbGxDb2xvcicsXG4gICAgICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuZmlsbGVkLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGNvbmZpZyA9PiBjb25maWcuY29sb3JcbiAgICAgIH0sXG4gICAgICBzdHJva2VDb2xvcjoge1xuICAgICAgICBwcm9wZXJ0eTogJ3N0cm9rZUNvbG9yJyxcbiAgICAgICAga2V5OiAnc3Ryb2tlQ29sb3InLFxuICAgICAgICBmaWVsZDogJ3N0cm9rZUNvbG9yRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3N0cm9rZUNvbG9yU2NhbGUnLFxuICAgICAgICBkb21haW46ICdzdHJva2VDb2xvckRvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnc3Ryb2tlQ29sb3JSYW5nZScsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLmNvbG9yLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldExpbmVDb2xvcicsXG4gICAgICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcub3V0bGluZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvciB8fCBjb25maWcuY29sb3JcbiAgICAgIH0sXG4gICAgICBzaXplOiB7XG4gICAgICAgIC4uLnN1cGVyLnZpc3VhbENoYW5uZWxzLnNpemUsXG4gICAgICAgIHByb3BlcnR5OiAncmFkaXVzJyxcbiAgICAgICAgcmFuZ2U6ICdyYWRpdXNSYW5nZScsXG4gICAgICAgIGZpeGVkOiAnZml4ZWRSYWRpdXMnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiAncmFkaXVzJyxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRSYWRpdXMnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IDFcbiAgICAgIH0sXG4gICAgICBjdXN0b21NYXJrZXJzOiB7XG4gICAgICAgIHByb3BlcnR5OiAnY3VzdG9tTWFya2VycycsXG4gICAgICAgIGtleTogJ2N1c3RvbU1hcmtlcnMnLFxuICAgICAgICBmaWVsZDogJ2N1c3RvbU1hcmtlcnNGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnY3VzdG9tTWFya2Vyc1NjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnY3VzdG9tTWFya2Vyc0RvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnY3VzdG9tTWFya2Vyc1JhbmdlJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuY3VzdG9tTWFya2VyLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldEljb25VcmwnLFxuICAgICAgICBzdXBwb3J0ZWRGaWVsZFR5cGVzOiBbJ3N0cmluZyddLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuY3VzdG9tTWFya2Vyc1VybFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2xvckZpZWxkID0gZmluZERlZmF1bHRDb2xvckZpZWxkKGRhdGFzZXQpO1xuXG4gICAgaWYgKGRlZmF1bHRDb2xvckZpZWxkKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgY29sb3JGaWVsZDogZGVmYXVsdENvbG9yRmllbGRcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgJ2NvbG9yJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgZmluZERlZmF1bHRMYXllclByb3BzKHtmaWVsZFBhaXJzID0gW119KSB7XG4gICAgY29uc3QgcHJvcHMgPSBbXTtcblxuICAgIC8vIE1ha2UgbGF5ZXIgZm9yIGVhY2ggcGFpclxuICAgIGZpZWxkUGFpcnMuZm9yRWFjaChwYWlyID0+IHtcbiAgICAgIGNvbnN0IGxhdEZpZWxkID0gcGFpci5wYWlyLmxhdDtcbiAgICAgIGNvbnN0IGxuZ0ZpZWxkID0gcGFpci5wYWlyLmxuZztcbiAgICAgIGNvbnN0IGxheWVyTmFtZSA9IHBhaXIuZGVmYXVsdE5hbWU7XG5cbiAgICAgIGNvbnN0IHByb3AgPSB7XG4gICAgICAgIGxhYmVsOiBsYXllck5hbWUubGVuZ3RoID8gbGF5ZXJOYW1lIDogJ1BvaW50J1xuICAgICAgfTtcblxuICAgICAgLy8gZGVmYXVsdCBsYXllciBjb2xvciBmb3IgYmVnaW50cmlwIGFuZCBkcm9wb2ZmIHBvaW50XG4gICAgICBpZiAobGF0RmllbGQudmFsdWUgaW4gREVGQVVMVF9MQVlFUl9DT0xPUikge1xuICAgICAgICBwcm9wLmNvbG9yID0gaGV4VG9SZ2IoREVGQVVMVF9MQVlFUl9DT0xPUltsYXRGaWVsZC52YWx1ZV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXQgdGhlIGZpcnN0IGxheWVyIHRvIGJlIHZpc2libGVcbiAgICAgIGlmIChwcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcHJvcC5pc1Zpc2libGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBwcm9wLmNvbHVtbnMgPSB7XG4gICAgICAgIGxhdDogbGF0RmllbGQsXG4gICAgICAgIGxuZzogbG5nRmllbGQsXG4gICAgICAgIGFsdGl0dWRlOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMSwgb3B0aW9uYWw6IHRydWV9XG4gICAgICB9O1xuXG4gICAgICBwcm9wcy5wdXNoKHByb3ApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtwcm9wc307XG4gIH1cblxuICBnZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci5nZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMpLFxuXG4gICAgICAvLyBhZGQgc3Ryb2tlIGNvbG9yIHZpc3VhbCBjaGFubmVsXG4gICAgICBzdHJva2VDb2xvckZpZWxkOiBudWxsLFxuICAgICAgc3Ryb2tlQ29sb3JEb21haW46IFswLCAxXSxcbiAgICAgIHN0cm9rZUNvbG9yU2NhbGU6ICdxdWFudGlsZScsXG5cbiAgICAgIGN1c3RvbU1hcmtlcnNGaWVsZDogbnVsbCxcbiAgICAgIGN1c3RvbU1hcmtlcnNTY2FsZTogJ29yZGluYWwnXG4gICAgfTtcbiAgfVxuXG4gIGNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUoe2ZpbHRlcmVkSW5kZXh9LCBnZXRQb3NpdGlvbikge1xuICAgIGNvbnN0IGRhdGEgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVyZWRJbmRleC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaW5kZXggPSBmaWx0ZXJlZEluZGV4W2ldO1xuICAgICAgY29uc3QgcG9zID0gZ2V0UG9zaXRpb24oe2luZGV4fSk7XG5cbiAgICAgIC8vIGlmIGRvZXNuJ3QgaGF2ZSBwb2ludCBsYXQgb3IgbG5nLCBkbyBub3QgYWRkIHRoZSBwb2ludFxuICAgICAgLy8gZGVjay5nbCBjYW4ndCBoYW5kbGUgcG9zaXRpb24gPSBudWxsXG4gICAgICBpZiAocG9zLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkpIHtcbiAgICAgICAgZGF0YS5wdXNoKHtcbiAgICAgICAgICBwb3NpdGlvbjogcG9zLFxuICAgICAgICAgIGluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKSB7XG4gICAgY29uc3Qge3RleHRMYWJlbH0gPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCB7Z3B1RmlsdGVyLCBkYXRhQ29udGFpbmVyfSA9IGRhdGFzZXRzW3RoaXMuY29uZmlnLmRhdGFJZF07XG4gICAgY29uc3Qge2RhdGEsIHRyaWdnZXJDaGFuZ2VkfSA9IHRoaXMudXBkYXRlRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKTtcbiAgICBjb25zdCBnZXRQb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKTtcblxuICAgIC8vIGdldCBhbGwgZGlzdGluY3QgY2hhcmFjdGVycyBpbiB0aGUgdGV4dCBsYWJlbHNcbiAgICBjb25zdCB0ZXh0TGFiZWxzID0gZm9ybWF0VGV4dExhYmVsRGF0YSh7XG4gICAgICB0ZXh0TGFiZWwsXG4gICAgICB0cmlnZ2VyQ2hhbmdlZCxcbiAgICAgIG9sZExheWVyRGF0YSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhQ29udGFpbmVyXG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSB0aGlzLmdldEF0dHJpYnV0ZUFjY2Vzc29ycyh7ZGF0YUNvbnRhaW5lcn0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBnZXRQb3NpdGlvbixcbiAgICAgIGdldEZpbHRlclZhbHVlOiBncHVGaWx0ZXIuZmlsdGVyVmFsdWVBY2Nlc3NvcihkYXRhQ29udGFpbmVyKSgpLFxuICAgICAgdGV4dExhYmVscyxcbiAgICAgIC4uLmFjY2Vzc29yc1xuICAgIH07XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbiAgdXBkYXRlTGF5ZXJNZXRhKGRhdGFDb250YWluZXIpIHtcbiAgICBjb25zdCBnZXRQb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKTtcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldFBvaW50c0JvdW5kcyhkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbik7XG4gICAgdGhpcy51cGRhdGVNZXRhKHtib3VuZHN9KTtcbiAgfVxuXG4gIGlzTGF5ZXJIb3ZlcmVkKG9iamVjdEluZm8pIHtcbiAgICByZXR1cm4gKFxuICAgICAgKG9iamVjdEluZm8/LnBpY2tlZCAmJiBvYmplY3RJbmZvPy5sYXllcj8ucHJvcHM/LmlkID09PSB0aGlzLmlkKSB8fFxuICAgICAgb2JqZWN0SW5mbz8ubGF5ZXI/LnByb3BzPy5pZCA9PT0gYCR7dGhpcy5pZH0taWNvbmBcbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGF5ZXIob3B0cykge1xuICAgIGNvbnN0IHtkYXRhLCBncHVGaWx0ZXIsIG9iamVjdEhvdmVyZWQsIG1hcFN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZywgY3VzdG9tTWFya2Vyc1N0YXR1c30gPSBvcHRzO1xuXG4gICAgLy8gaWYgbm8gZmllbGQgc2l6ZSBpcyBkZWZpbmVkIHdlIG5lZWQgdG8gcGFzcyBmaXhlZCByYWRpdXMgPSBmYWxzZVxuICAgIGNvbnN0IGZpeGVkUmFkaXVzID0gdGhpcy5jb25maWcudmlzQ29uZmlnLmZpeGVkUmFkaXVzICYmIEJvb2xlYW4odGhpcy5jb25maWcuc2l6ZUZpZWxkKTtcbiAgICBjb25zdCByYWRpdXNTY2FsZSA9IHRoaXMuZ2V0UmFkaXVzU2NhbGUoZml4ZWRSYWRpdXMpO1xuICAgIGNvbnN0IHJhZGl1c1VuaXRzID0gdGhpcy5nZXRSYWRpdXNVbml0KGZpeGVkUmFkaXVzKTtcblxuICAgIGNvbnN0IHVwZGF0ZVRyaWdnZXJzID0ge1xuICAgICAgZ2V0UG9zaXRpb246IHRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBnZXRGaWx0ZXJWYWx1ZTogZ3B1RmlsdGVyLmZpbHRlclZhbHVlVXBkYXRlVHJpZ2dlcnMsXG4gICAgICAuLi50aGlzLmdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycygpXG4gICAgfTtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID0gdGhpcy5nZXREZWZhdWx0RGVja0xheWVyUHJvcHMob3B0cyk7XG4gICAgY29uc3QgYnJ1c2hpbmdQcm9wcyA9IHRoaXMuZ2V0QnJ1c2hpbmdFeHRlbnNpb25Qcm9wcyhpbnRlcmFjdGlvbkNvbmZpZyk7XG4gICAgY29uc3QgZ2V0UGl4ZWxPZmZzZXQgPSBnZXRUZXh0T2Zmc2V0QnlSYWRpdXMoXG4gICAgICByYWRpdXNTY2FsZSxcbiAgICAgIGRhdGEuZ2V0UmFkaXVzLFxuICAgICAgbWFwU3RhdGUsXG4gICAgICBmaXhlZFJhZGl1c1xuICAgICk7XG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IFsuLi5kZWZhdWx0TGF5ZXJQcm9wcy5leHRlbnNpb25zLCBicnVzaGluZ0V4dGVuc2lvbl07XG5cbiAgICBjb25zdCBzaGFyZWRQcm9wcyA9IHtcbiAgICAgIGdldEZpbHRlclZhbHVlOiBkYXRhLmdldEZpbHRlclZhbHVlLFxuICAgICAgZXh0ZW5zaW9ucyxcbiAgICAgIGZpbHRlclJhbmdlOiBkZWZhdWx0TGF5ZXJQcm9wcy5maWx0ZXJSYW5nZSxcbiAgICAgIHZpc2libGU6IGRlZmF1bHRMYXllclByb3BzLnZpc2libGUsXG4gICAgICAuLi5icnVzaGluZ1Byb3BzXG4gICAgfTtcbiAgICBjb25zdCBob3ZlcmVkT2JqZWN0ID0gdGhpcy5oYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEhvdmVyZWQpO1xuXG4gICAgY29uc3QgdGV4dExhYmVsTGF5ZXIgPSB0aGlzLnJlbmRlclRleHRMYWJlbExheWVyKFxuICAgICAge1xuICAgICAgICBnZXRQb3NpdGlvbjogZGF0YS5nZXRQb3NpdGlvbixcbiAgICAgICAgc2hhcmVkUHJvcHMsXG4gICAgICAgIGdldFBpeGVsT2Zmc2V0LFxuICAgICAgICB1cGRhdGVUcmlnZ2Vyc1xuICAgICAgfSxcbiAgICAgIG9wdHNcbiAgICApO1xuICAgIGNvbnN0IGNvbW1vbkxheWVyUHJvcHMgPSB7XG4gICAgICAuLi5kZWZhdWx0TGF5ZXJQcm9wcyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgLy8gY2lyY2xlcyB3aWxsIGJlIGZsYXQgb24gdGhlIG1hcCB3aGVuIHRoZSBhbHRpdHVkZSBjb2x1bW4gaXMgbm90IHVzZWRcbiAgICAgICAgZGVwdGhUZXN0OiB0aGlzLmNvbmZpZy5jb2x1bW5zLmFsdGl0dWRlPy5maWVsZElkeCA+IC0xXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGN1c3RvbU1hcmtlcnNGaWVsZCA9IHRoaXMuY29uZmlnLmN1c3RvbU1hcmtlcnNGaWVsZDtcbiAgICBjb25zdCB7Y3VzdG9tTWFya2VycywgY3VzdG9tTWFya2Vyc1VybCwgY3VzdG9tTWFya2Vyc1JhbmdlfSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZztcbiAgICBjb25zdCBjdXN0b21NYXJrZXJzQ29uZmlndXJlZCA9XG4gICAgICBjdXN0b21NYXJrZXJzICYmIEJvb2xlYW4oY3VzdG9tTWFya2Vyc1VybCB8fCAoY3VzdG9tTWFya2Vyc0ZpZWxkICYmIGN1c3RvbU1hcmtlcnNSYW5nZSkpO1xuICAgIGNvbnN0IGN1c3RvbU1hcmtlcnNNaXNDb25maWd1cmVkID0gY3VzdG9tTWFya2VycyAmJiAhY3VzdG9tTWFya2Vyc0NvbmZpZ3VyZWQ7XG5cbiAgICBpZiAoY3VzdG9tTWFya2Vyc0NvbmZpZ3VyZWQpIHtcbiAgICAgIGNvbnN0IG1heEljb25TaXplID0gdGhpcy5nZXRNYXhNYXJrZXJTaXplKCk7XG4gICAgICBjb25zdCBnZXRJY29uID0gdGhpcy5nZXRDdXN0b21NYXJrZXJJY29uQWNjZXNzb3IoY3VzdG9tTWFya2Vyc1N0YXR1cywgZGF0YS5nZXRJY29uVXJsKTtcbiAgICAgIGNvbnN0IGljb25MYXllclByb3BzID0ge1xuICAgICAgICBnZXRJY29uLFxuICAgICAgICBnZXRQb3NpdGlvbjogZGF0YS5nZXRQb3NpdGlvbixcbiAgICAgICAgZ2V0U2l6ZTogZGF0YS5nZXRSYWRpdXMsXG4gICAgICAgIHNpemVTY2FsZTogcmFkaXVzU2NhbGUsXG4gICAgICAgIHNpemVVbml0czogJ3BpeGVscycsXG4gICAgICAgIGxvYWRPcHRpb25zOiB7XG4gICAgICAgICAgaW1hZ2U6IHtcbiAgICAgICAgICAgIHR5cGU6ICdpbWFnZWJpdG1hcCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGltYWdlYml0bWFwOiB7XG4gICAgICAgICAgICByZXNpemVXaWR0aDogbWF4SWNvblNpemUsXG4gICAgICAgICAgICByZXNpemVIZWlnaHQ6IG1heEljb25TaXplLFxuICAgICAgICAgICAgcmVzaXplUXVhbGl0eTogJ2hpZ2gnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICBuZXcgSWNvbkxheWVyKHtcbiAgICAgICAgICAuLi5jb21tb25MYXllclByb3BzLFxuICAgICAgICAgIC4uLmljb25MYXllclByb3BzLFxuICAgICAgICAgIGlkOiBgJHtkZWZhdWx0TGF5ZXJQcm9wcy5pZH0taWNvbmAsXG4gICAgICAgICAgZGF0YTogZGF0YS5kYXRhLFxuICAgICAgICAgIGdldENvbG9yOiBkYXRhLmdldEZpbGxDb2xvcixcbiAgICAgICAgICBnZXRGaWx0ZXJWYWx1ZTogZGF0YS5nZXRGaWx0ZXJWYWx1ZSxcbiAgICAgICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICAgICAgZ2V0RmlsdGVyVmFsdWU6IHVwZGF0ZVRyaWdnZXJzLmdldEZpbHRlclZhbHVlLFxuICAgICAgICAgICAgZ2V0Q29sb3I6IHVwZGF0ZVRyaWdnZXJzLmdldEZpbGxDb2xvcixcbiAgICAgICAgICAgIGdldEljb246IFtcbiAgICAgICAgICAgICAgY3VzdG9tTWFya2Vyc1VybCxcbiAgICAgICAgICAgICAgbWF4SWNvblNpemUsXG4gICAgICAgICAgICAgIGN1c3RvbU1hcmtlcnNTdGF0dXMsXG4gICAgICAgICAgICAgIGN1c3RvbU1hcmtlcnNGaWVsZCxcbiAgICAgICAgICAgICAgY3VzdG9tTWFya2Vyc1JhbmdlXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZ2V0U2l6ZTogdXBkYXRlVHJpZ2dlcnMuZ2V0UmFkaXVzXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgLi4uKGhvdmVyZWRPYmplY3RcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgbmV3IEljb25MYXllcih7XG4gICAgICAgICAgICAgICAgLi4uaWNvbkxheWVyUHJvcHMsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCksXG4gICAgICAgICAgICAgICAgaWQ6IGAke2RlZmF1bHRMYXllclByb3BzLmlkfS1pY29uLWhvdmVyZWRgLFxuICAgICAgICAgICAgICAgIGRhdGE6IFtob3ZlcmVkT2JqZWN0XSxcbiAgICAgICAgICAgICAgICBnZXRDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3JcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdKSxcbiAgICAgICAgLi4udGV4dExhYmVsTGF5ZXJcbiAgICAgIF07XG4gICAgfVxuXG4gICAgY29uc3Qgc2NhdHRlclBsb3RMYXllclByb3BzID0ge1xuICAgICAgc3Ryb2tlZDogdGhpcy5jb25maWcudmlzQ29uZmlnLm91dGxpbmUsXG4gICAgICBmaWxsZWQ6IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5maWxsZWQsXG4gICAgICBsaW5lV2lkdGhTY2FsZTogdGhpcy5jb25maWcudmlzQ29uZmlnLnRoaWNrbmVzcyxcbiAgICAgIC8vIFRPRE86IGludmVudCBiZXR0ZXIgd2F5IHRvIHJlbmRlciBzb21ldGhpbmcgd2hlbiBjdXN0b21NYXJrZXJzIGFyZSBub3QgeWV0IGNvbmZpZ3VyZWRcbiAgICAgIHJhZGl1c1NjYWxlOiBjdXN0b21NYXJrZXJzTWlzQ29uZmlndXJlZCA/IHJhZGl1c1NjYWxlIC8gMiA6IHJhZGl1c1NjYWxlLFxuICAgICAgLi4uKHRoaXMuY29uZmlnLnZpc0NvbmZpZy5maXhlZFJhZGl1cyA/IHt9IDoge3JhZGl1c01heFBpeGVsczogNTAwfSlcbiAgICB9O1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBTY2F0dGVycGxvdExheWVyKHtcbiAgICAgICAgLi4uYnJ1c2hpbmdQcm9wcyxcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgLi4uY29tbW9uTGF5ZXJQcm9wcyxcbiAgICAgICAgLi4uc2NhdHRlclBsb3RMYXllclByb3BzLFxuICAgICAgICByYWRpdXNVbml0cyxcbiAgICAgICAgbGluZVdpZHRoVW5pdHM6ICdwaXhlbHMnLFxuICAgICAgICB1cGRhdGVUcmlnZ2VycyxcbiAgICAgICAgZXh0ZW5zaW9uc1xuICAgICAgfSksXG4gICAgICAvLyBob3ZlciBsYXllclxuICAgICAgLi4uKGhvdmVyZWRPYmplY3RcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgU2NhdHRlcnBsb3RMYXllcih7XG4gICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcygpLFxuICAgICAgICAgICAgICAuLi5zY2F0dGVyUGxvdExheWVyUHJvcHMsXG4gICAgICAgICAgICAgIGRhdGE6IFtob3ZlcmVkT2JqZWN0XSxcbiAgICAgICAgICAgICAgZ2V0TGluZUNvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgICAgICAgICAgZ2V0RmlsbENvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgICAgICAgICAgZ2V0UmFkaXVzOiBkYXRhLmdldFJhZGl1cyxcbiAgICAgICAgICAgICAgZ2V0UG9zaXRpb246IGRhdGEuZ2V0UG9zaXRpb25cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC8vIHRleHQgbGFiZWwgbGF5ZXJcbiAgICAgIC4uLnRleHRMYWJlbExheWVyXG4gICAgXTtcbiAgfVxufVxuIl19
462
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYXllcnMvcG9pbnQtbGF5ZXIvcG9pbnQtbGF5ZXIuanMiXSwibmFtZXMiOlsicG9pbnRQb3NBY2Nlc3NvciIsImxhdCIsImxuZyIsImFsdGl0dWRlIiwiZGMiLCJkIiwidmFsdWVBdCIsImluZGV4IiwiZmllbGRJZHgiLCJwb2ludFJlcXVpcmVkQ29sdW1ucyIsInBvaW50T3B0aW9uYWxDb2x1bW5zIiwiYnJ1c2hpbmdFeHRlbnNpb24iLCJCcnVzaGluZ0V4dGVuc2lvbiIsInBvaW50VmlzQ29uZmlncyIsInJhZGl1cyIsImZpeGVkUmFkaXVzIiwiY3VzdG9tTWFya2VycyIsImN1c3RvbU1hcmtlcnNVcmwiLCJjdXN0b21NYXJrZXJzUmFuZ2UiLCJvcGFjaXR5Iiwib3V0bGluZSIsInRoaWNrbmVzcyIsInN0cm9rZUNvbG9yIiwiY29sb3JSYW5nZSIsInN0cm9rZUNvbG9yUmFuZ2UiLCJyYWRpdXNSYW5nZSIsImZpbGxlZCIsInR5cGUiLCJsYWJlbCIsImRlZmF1bHRWYWx1ZSIsInByb3BlcnR5IiwiUG9pbnRMYXllciIsInByb3BzIiwicmVnaXN0ZXJWaXNDb25maWciLCJnZXRQb3NpdGlvbkFjY2Vzc29yIiwiZGF0YUNvbnRhaW5lciIsImNvbmZpZyIsImNvbHVtbnMiLCJQb2ludExheWVySWNvbiIsImRlZmF1bHRQb2ludENvbHVtblBhaXJzIiwiY29sb3IiLCJhY2Nlc3NvciIsImNvbmRpdGlvbiIsInZpc0NvbmZpZyIsImtleSIsImZpZWxkIiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsInNpemUiLCJmaXhlZCIsImN1c3RvbU1hcmtlciIsInN1cHBvcnRlZEZpZWxkVHlwZXMiLCJkYXRhc2V0IiwiZGVmYXVsdENvbG9yRmllbGQiLCJ1cGRhdGVMYXllckNvbmZpZyIsImNvbG9yRmllbGQiLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJzdHJva2VDb2xvckZpZWxkIiwic3Ryb2tlQ29sb3JEb21haW4iLCJzdHJva2VDb2xvclNjYWxlIiwiY3VzdG9tTWFya2Vyc0ZpZWxkIiwiY3VzdG9tTWFya2Vyc1NjYWxlIiwiZ2V0UG9zaXRpb24iLCJmaWx0ZXJlZEluZGV4IiwiZGF0YSIsImkiLCJsZW5ndGgiLCJwb3MiLCJldmVyeSIsIk51bWJlciIsImlzRmluaXRlIiwicHVzaCIsInBvc2l0aW9uIiwiZGF0YXNldHMiLCJvbGRMYXllckRhdGEiLCJ0ZXh0TGFiZWwiLCJkYXRhSWQiLCJncHVGaWx0ZXIiLCJ1cGRhdGVEYXRhIiwidHJpZ2dlckNoYW5nZWQiLCJ0ZXh0TGFiZWxzIiwiYWNjZXNzb3JzIiwiZ2V0QXR0cmlidXRlQWNjZXNzb3JzIiwiZ2V0RmlsdGVyVmFsdWUiLCJmaWx0ZXJWYWx1ZUFjY2Vzc29yIiwiYm91bmRzIiwiZ2V0UG9pbnRzQm91bmRzIiwidXBkYXRlTWV0YSIsIm9iamVjdEluZm8iLCJwaWNrZWQiLCJsYXllciIsImlkIiwib3B0cyIsIm9iamVjdEhvdmVyZWQiLCJtYXBTdGF0ZSIsImludGVyYWN0aW9uQ29uZmlnIiwiY3VzdG9tTWFya2Vyc1N0YXR1cyIsIkJvb2xlYW4iLCJzaXplRmllbGQiLCJyYWRpdXNTY2FsZSIsImdldFJhZGl1c1NjYWxlIiwicmFkaXVzVW5pdHMiLCJnZXRSYWRpdXNVbml0IiwidXBkYXRlVHJpZ2dlcnMiLCJmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzIiwiZ2V0VmlzdWFsQ2hhbm5lbFVwZGF0ZVRyaWdnZXJzIiwiZGVmYXVsdExheWVyUHJvcHMiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJicnVzaGluZ1Byb3BzIiwiZ2V0QnJ1c2hpbmdFeHRlbnNpb25Qcm9wcyIsImdldFBpeGVsT2Zmc2V0IiwiZ2V0UmFkaXVzIiwiZXh0ZW5zaW9ucyIsInNoYXJlZFByb3BzIiwiZmlsdGVyUmFuZ2UiLCJ2aXNpYmxlIiwiaG92ZXJlZE9iamVjdCIsImhhc0hvdmVyZWRPYmplY3QiLCJ0ZXh0TGFiZWxMYXllciIsInJlbmRlclRleHRMYWJlbExheWVyIiwiY29tbW9uTGF5ZXJQcm9wcyIsInBhcmFtZXRlcnMiLCJkZXB0aFRlc3QiLCJjdXN0b21NYXJrZXJzQ29uZmlndXJlZCIsImN1c3RvbU1hcmtlcnNNaXNDb25maWd1cmVkIiwibWF4SWNvblNpemUiLCJnZXRNYXhNYXJrZXJTaXplIiwiZ2V0SWNvbiIsImdldEN1c3RvbU1hcmtlckljb25BY2Nlc3NvciIsImdldEljb25VcmwiLCJpY29uTGF5ZXJQcm9wcyIsImdldFNpemUiLCJzaXplU2NhbGUiLCJzaXplVW5pdHMiLCJsb2FkT3B0aW9ucyIsImltYWdlIiwiaW1hZ2ViaXRtYXAiLCJyZXNpemVXaWR0aCIsInJlc2l6ZUhlaWdodCIsInJlc2l6ZVF1YWxpdHkiLCJJY29uTGF5ZXIiLCJnZXRDb2xvciIsImdldEZpbGxDb2xvciIsIlVOS05PV05fQ09MT1IiLCJnZXREZWZhdWx0SG92ZXJMYXllclByb3BzIiwiaGlnaGxpZ2h0Q29sb3IiLCJzY2F0dGVyUGxvdExheWVyUHJvcHMiLCJzdHJva2VkIiwibGluZVdpZHRoU2NhbGUiLCJyYWRpdXNNYXhQaXhlbHMiLCJTY2F0dGVycGxvdExheWVyIiwibGluZVdpZHRoVW5pdHMiLCJnZXRMaW5lQ29sb3IiLCJmaWVsZFBhaXJzIiwiZm9yRWFjaCIsInBhaXIiLCJsYXRGaWVsZCIsImxuZ0ZpZWxkIiwibGF5ZXJOYW1lIiwiZGVmYXVsdE5hbWUiLCJwcm9wIiwidmFsdWUiLCJERUZBVUxUX0xBWUVSX0NPTE9SIiwiaXNWaXNpYmxlIiwib3B0aW9uYWwiLCJMYXllciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7Ozs7Ozs7OztBQUVPLElBQU1BLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUI7QUFBQSxNQUFFQyxHQUFGLFFBQUVBLEdBQUY7QUFBQSxNQUFPQyxHQUFQLFFBQU9BLEdBQVA7QUFBQSxN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LElBQUksQ0FBQzNILEtBQUwsR0FBYSwwQkFBUzZILHFDQUFvQk4sUUFBUSxDQUFDSyxLQUE3QixDQUFULENBQWI7QUFDRCxTQVp3QixDQWN6Qjs7O0FBQ0EsWUFBSXBJLEtBQUssQ0FBQ3FDLE1BQU4sS0FBaUIsQ0FBckIsRUFBd0I7QUFDdEI4RixVQUFBQSxJQUFJLENBQUNHLFNBQUwsR0FBaUIsSUFBakI7QUFDRDs7QUFFREgsUUFBQUEsSUFBSSxDQUFDOUgsT0FBTCxHQUFlO0FBQ2JwQyxVQUFBQSxHQUFHLEVBQUU4SixRQURRO0FBRWI3SixVQUFBQSxHQUFHLEVBQUU4SixRQUZRO0FBR2I3SixVQUFBQSxRQUFRLEVBQUU7QUFBQ2lLLFlBQUFBLEtBQUssRUFBRSxJQUFSO0FBQWM1SixZQUFBQSxRQUFRLEVBQUUsQ0FBQyxDQUF6QjtBQUE0QitKLFlBQUFBLFFBQVEsRUFBRTtBQUF0QztBQUhHLFNBQWY7QUFNQXZJLFFBQUFBLEtBQUssQ0FBQzBDLElBQU4sQ0FBV3lGLElBQVg7QUFDRCxPQTFCRDtBQTRCQSxhQUFPO0FBQUNuSSxRQUFBQSxLQUFLLEVBQUxBO0FBQUQsT0FBUDtBQUNEOzs7RUFoSXFDd0kscUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge0JydXNoaW5nRXh0ZW5zaW9ufSBmcm9tICdAZGVjay5nbC9leHRlbnNpb25zJztcbmltcG9ydCB7U2NhdHRlcnBsb3RMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCB7SWNvbkxheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuXG5pbXBvcnQgTGF5ZXIgZnJvbSAnLi4vYmFzZS1sYXllcic7XG5pbXBvcnQge2hleFRvUmdifSBmcm9tICd1dGlscy9jb2xvci11dGlscyc7XG5pbXBvcnQge2ZpbmREZWZhdWx0Q29sb3JGaWVsZH0gZnJvbSAndXRpbHMvZGF0YXNldC11dGlscyc7XG5pbXBvcnQgUG9pbnRMYXllckljb24gZnJvbSAnLi9wb2ludC1sYXllci1pY29uJztcbmltcG9ydCB7REVGQVVMVF9MQVlFUl9DT0xPUiwgQ0hBTk5FTF9TQ0FMRVMsIFVOS05PV05fQ09MT1J9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcblxuaW1wb3J0IHtnZXRUZXh0T2Zmc2V0QnlSYWRpdXMsIGZvcm1hdFRleHRMYWJlbERhdGF9IGZyb20gJy4uL2xheWVyLXRleHQtbGFiZWwnO1xuXG5leHBvcnQgY29uc3QgcG9pbnRQb3NBY2Nlc3NvciA9ICh7bGF0LCBsbmcsIGFsdGl0dWRlfSkgPT4gZGMgPT4gZCA9PiBbXG4gIGRjLnZhbHVlQXQoZC5pbmRleCwgbG5nLmZpZWxkSWR4KSxcbiAgZGMudmFsdWVBdChkLmluZGV4LCBsYXQuZmllbGRJZHgpLFxuICBhbHRpdHVkZSAmJiBhbHRpdHVkZS5maWVsZElkeCA+IC0xID8gZGMudmFsdWVBdChkLmluZGV4LCBhbHRpdHVkZS5maWVsZElkeCkgOiAwXG5dO1xuXG5leHBvcnQgY29uc3QgcG9pbnRSZXF1aXJlZENvbHVtbnMgPSBbJ2xhdCcsICdsbmcnXTtcbmV4cG9ydCBjb25zdCBwb2ludE9wdGlvbmFsQ29sdW1ucyA9IFsnYWx0aXR1ZGUnXTtcblxuY29uc3QgYnJ1c2hpbmdFeHRlbnNpb24gPSBuZXcgQnJ1c2hpbmdFeHRlbnNpb24oKTtcblxuZXhwb3J0IGNvbnN0IHBvaW50VmlzQ29uZmlncyA9IHtcbiAgcmFkaXVzOiAncmFkaXVzJyxcbiAgZml4ZWRSYWRpdXM6ICdmaXhlZFJhZGl1cycsXG4gIGN1c3RvbU1hcmtlcnM6ICdjdXN0b21NYXJrZXJzJyxcbiAgY3VzdG9tTWFya2Vyc1VybDogJ2N1c3RvbU1hcmtlcnNVcmwnLFxuICBjdXN0b21NYXJrZXJzUmFuZ2U6ICdjdXN0b21NYXJrZXJzUmFuZ2UnLFxuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIG91dGxpbmU6ICdvdXRsaW5lJyxcbiAgdGhpY2tuZXNzOiAndGhpY2tuZXNzJyxcbiAgc3Ryb2tlQ29sb3I6ICdzdHJva2VDb2xvcicsXG4gIGNvbG9yUmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgc3Ryb2tlQ29sb3JSYW5nZTogJ3N0cm9rZUNvbG9yUmFuZ2UnLFxuICByYWRpdXNSYW5nZTogJ3JhZGl1c1JhbmdlJyxcbiAgZmlsbGVkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnbGF5ZXIuZmlsbENvbG9yJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgcHJvcGVydHk6ICdmaWxsZWQnXG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvaW50TGF5ZXIgZXh0ZW5kcyBMYXllciB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyhwb2ludFZpc0NvbmZpZ3MpO1xuICAgIHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvciA9IGRhdGFDb250YWluZXIgPT5cbiAgICAgIHBvaW50UG9zQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucykoZGF0YUNvbnRhaW5lcik7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gJ3BvaW50JztcbiAgfVxuXG4gIGdldCBpc0FnZ3JlZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IGxheWVySWNvbigpIHtcbiAgICByZXR1cm4gUG9pbnRMYXllckljb247XG4gIH1cbiAgZ2V0IHJlcXVpcmVkTGF5ZXJDb2x1bW5zKCkge1xuICAgIHJldHVybiBwb2ludFJlcXVpcmVkQ29sdW1ucztcbiAgfVxuXG4gIGdldCBvcHRpb25hbENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHBvaW50T3B0aW9uYWxDb2x1bW5zO1xuICB9XG5cbiAgZ2V0IGNvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb2ludENvbHVtblBhaXJzO1xuICB9XG5cbiAgZ2V0IG5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcygpIHtcbiAgICByZXR1cm4gWy4uLnN1cGVyLm5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcywgJ3JhZGl1cyddO1xuICB9XG5cbiAgZ2V0IHZpc3VhbENoYW5uZWxzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjoge1xuICAgICAgICAuLi5zdXBlci52aXN1YWxDaGFubmVscy5jb2xvcixcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRGaWxsQ29sb3InLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLmZpbGxlZCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc3Ryb2tlQ29sb3I6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzdHJva2VDb2xvcicsXG4gICAgICAgIGtleTogJ3N0cm9rZUNvbG9yJyxcbiAgICAgICAgZmllbGQ6ICdzdHJva2VDb2xvckZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdzdHJva2VDb2xvclNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnc3Ryb2tlQ29sb3JEb21haW4nLFxuICAgICAgICByYW5nZTogJ3N0cm9rZUNvbG9yUmFuZ2UnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5jb2xvcixcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRMaW5lQ29sb3InLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLm91dGxpbmUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3IgfHwgY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICAuLi5zdXBlci52aXN1YWxDaGFubmVscy5zaXplLFxuICAgICAgICBwcm9wZXJ0eTogJ3JhZGl1cycsXG4gICAgICAgIHJhbmdlOiAncmFkaXVzUmFuZ2UnLFxuICAgICAgICBmaXhlZDogJ2ZpeGVkUmFkaXVzJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogJ3JhZGl1cycsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0UmFkaXVzJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiAxXG4gICAgICB9LFxuICAgICAgY3VzdG9tTWFya2Vyczoge1xuICAgICAgICBwcm9wZXJ0eTogJ2N1c3RvbU1hcmtlcnMnLFxuICAgICAgICBrZXk6ICdjdXN0b21NYXJrZXJzJyxcbiAgICAgICAgZmllbGQ6ICdjdXN0b21NYXJrZXJzRmllbGQnLFxuICAgICAgICBzY2FsZTogJ2N1c3RvbU1hcmtlcnNTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ2N1c3RvbU1hcmtlcnNEb21haW4nLFxuICAgICAgICByYW5nZTogJ2N1c3RvbU1hcmtlcnNSYW5nZScsXG4gICAgICAgIGZpeGVkOiAnY3VzdG9tTWFya2Vyc1VybCcsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLmN1c3RvbU1hcmtlcixcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRJY29uVXJsJyxcbiAgICAgICAgc3VwcG9ydGVkRmllbGRUeXBlczogWydzdHJpbmcnXSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5jdXN0b21NYXJrZXJzVXJsLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLmN1c3RvbU1hcmtlcnNcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29sb3JGaWVsZCA9IGZpbmREZWZhdWx0Q29sb3JGaWVsZChkYXRhc2V0KTtcblxuICAgIGlmIChkZWZhdWx0Q29sb3JGaWVsZCkge1xuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGNvbG9yRmllbGQ6IGRlZmF1bHRDb2xvckZpZWxkXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsICdjb2xvcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIGZpbmREZWZhdWx0TGF5ZXJQcm9wcyh7ZmllbGRQYWlycyA9IFtdfSkge1xuICAgIGNvbnN0IHByb3BzID0gW107XG5cbiAgICAvLyBNYWtlIGxheWVyIGZvciBlYWNoIHBhaXJcbiAgICBmaWVsZFBhaXJzLmZvckVhY2gocGFpciA9PiB7XG4gICAgICBjb25zdCBsYXRGaWVsZCA9IHBhaXIucGFpci5sYXQ7XG4gICAgICBjb25zdCBsbmdGaWVsZCA9IHBhaXIucGFpci5sbmc7XG4gICAgICBjb25zdCBsYXllck5hbWUgPSBwYWlyLmRlZmF1bHROYW1lO1xuXG4gICAgICBjb25zdCBwcm9wID0ge1xuICAgICAgICBsYWJlbDogbGF5ZXJOYW1lLmxlbmd0aCA/IGxheWVyTmFtZSA6ICdQb2ludCdcbiAgICAgIH07XG5cbiAgICAgIC8vIGRlZmF1bHQgbGF5ZXIgY29sb3IgZm9yIGJlZ2ludHJpcCBhbmQgZHJvcG9mZiBwb2ludFxuICAgICAgaWYgKGxhdEZpZWxkLnZhbHVlIGluIERFRkFVTFRfTEFZRVJfQ09MT1IpIHtcbiAgICAgICAgcHJvcC5jb2xvciA9IGhleFRvUmdiKERFRkFVTFRfTEFZRVJfQ09MT1JbbGF0RmllbGQudmFsdWVdKTtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0IHRoZSBmaXJzdCBsYXllciB0byBiZSB2aXNpYmxlXG4gICAgICBpZiAocHJvcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHByb3AuaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcHJvcC5jb2x1bW5zID0ge1xuICAgICAgICBsYXQ6IGxhdEZpZWxkLFxuICAgICAgICBsbmc6IGxuZ0ZpZWxkLFxuICAgICAgICBhbHRpdHVkZToge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTEsIG9wdGlvbmFsOiB0cnVlfVxuICAgICAgfTtcblxuICAgICAgcHJvcHMucHVzaChwcm9wKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7cHJvcHN9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdExheWVyQ29uZmlnKHByb3BzID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHByb3BzKSxcblxuICAgICAgLy8gYWRkIHN0cm9rZSBjb2xvciB2aXN1YWwgY2hhbm5lbFxuICAgICAgc3Ryb2tlQ29sb3JGaWVsZDogbnVsbCxcbiAgICAgIHN0cm9rZUNvbG9yRG9tYWluOiBbMCwgMV0sXG4gICAgICBzdHJva2VDb2xvclNjYWxlOiAncXVhbnRpbGUnLFxuXG4gICAgICBjdXN0b21NYXJrZXJzRmllbGQ6IG51bGwsXG4gICAgICBjdXN0b21NYXJrZXJzU2NhbGU6ICdvcmRpbmFsJ1xuICAgIH07XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKHtmaWx0ZXJlZEluZGV4fSwgZ2V0UG9zaXRpb24pIHtcbiAgICBjb25zdCBkYXRhID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcmVkSW5kZXgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gZmlsdGVyZWRJbmRleFtpXTtcbiAgICAgIGNvbnN0IHBvcyA9IGdldFBvc2l0aW9uKHtpbmRleH0pO1xuXG4gICAgICAvLyBpZiBkb2Vzbid0IGhhdmUgcG9pbnQgbGF0IG9yIGxuZywgZG8gbm90IGFkZCB0aGUgcG9pbnRcbiAgICAgIC8vIGRlY2suZ2wgY2FuJ3QgaGFuZGxlIHBvc2l0aW9uID0gbnVsbFxuICAgICAgaWYgKHBvcy5ldmVyeShOdW1iZXIuaXNGaW5pdGUpKSB7XG4gICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgcG9zaXRpb246IHBvcyxcbiAgICAgICAgICBpbmRleFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBmb3JtYXRMYXllckRhdGEoZGF0YXNldHMsIG9sZExheWVyRGF0YSkge1xuICAgIGNvbnN0IHt0ZXh0TGFiZWx9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qge2dwdUZpbHRlciwgZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdO1xuICAgIGNvbnN0IHtkYXRhLCB0cmlnZ2VyQ2hhbmdlZH0gPSB0aGlzLnVwZGF0ZURhdGEoZGF0YXNldHMsIG9sZExheWVyRGF0YSk7XG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG5cbiAgICAvLyBnZXQgYWxsIGRpc3RpbmN0IGNoYXJhY3RlcnMgaW4gdGhlIHRleHQgbGFiZWxzXG4gICAgY29uc3QgdGV4dExhYmVscyA9IGZvcm1hdFRleHRMYWJlbERhdGEoe1xuICAgICAgdGV4dExhYmVsLFxuICAgICAgdHJpZ2dlckNoYW5nZWQsXG4gICAgICBvbGRMYXllckRhdGEsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YUNvbnRhaW5lclxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gdGhpcy5nZXRBdHRyaWJ1dGVBY2Nlc3NvcnMoe2RhdGFDb250YWluZXJ9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhLFxuICAgICAgZ2V0UG9zaXRpb24sXG4gICAgICBnZXRGaWx0ZXJWYWx1ZTogZ3B1RmlsdGVyLmZpbHRlclZhbHVlQWNjZXNzb3IoZGF0YUNvbnRhaW5lcikoKSxcbiAgICAgIHRleHRMYWJlbHMsXG4gICAgICAuLi5hY2Nlc3NvcnNcbiAgICB9O1xuICB9XG4gIC8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG4gIHVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyKSB7XG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRQb2ludHNCb3VuZHMoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pO1xuICAgIHRoaXMudXBkYXRlTWV0YSh7Ym91bmRzfSk7XG4gIH1cblxuICBpc0xheWVySG92ZXJlZChvYmplY3RJbmZvKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIChvYmplY3RJbmZvPy5waWNrZWQgJiYgb2JqZWN0SW5mbz8ubGF5ZXI/LnByb3BzPy5pZCA9PT0gdGhpcy5pZCkgfHxcbiAgICAgIG9iamVjdEluZm8/LmxheWVyPy5wcm9wcz8uaWQgPT09IGAke3RoaXMuaWR9LWljb25gXG4gICAgKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIHJlbmRlckxheWVyKG9wdHMpIHtcbiAgICBjb25zdCB7ZGF0YSwgZ3B1RmlsdGVyLCBvYmplY3RIb3ZlcmVkLCBtYXBTdGF0ZSwgaW50ZXJhY3Rpb25Db25maWcsIGN1c3RvbU1hcmtlcnNTdGF0dXN9ID0gb3B0cztcblxuICAgIC8vIGlmIG5vIGZpZWxkIHNpemUgaXMgZGVmaW5lZCB3ZSBuZWVkIHRvIHBhc3MgZml4ZWQgcmFkaXVzID0gZmFsc2VcbiAgICBjb25zdCBmaXhlZFJhZGl1cyA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5maXhlZFJhZGl1cyAmJiBCb29sZWFuKHRoaXMuY29uZmlnLnNpemVGaWVsZCk7XG4gICAgY29uc3QgcmFkaXVzU2NhbGUgPSB0aGlzLmdldFJhZGl1c1NjYWxlKGZpeGVkUmFkaXVzKTtcbiAgICBjb25zdCByYWRpdXNVbml0cyA9IHRoaXMuZ2V0UmFkaXVzVW5pdChmaXhlZFJhZGl1cyk7XG5cbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHtcbiAgICAgIGdldFBvc2l0aW9uOiB0aGlzLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGdwdUZpbHRlci5maWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzLFxuICAgICAgLi4udGhpcy5nZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMoKVxuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpO1xuICAgIGNvbnN0IGJydXNoaW5nUHJvcHMgPSB0aGlzLmdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMoaW50ZXJhY3Rpb25Db25maWcpO1xuICAgIGNvbnN0IGdldFBpeGVsT2Zmc2V0ID0gZ2V0VGV4dE9mZnNldEJ5UmFkaXVzKFxuICAgICAgcmFkaXVzU2NhbGUsXG4gICAgICBkYXRhLmdldFJhZGl1cyxcbiAgICAgIG1hcFN0YXRlLFxuICAgICAgZml4ZWRSYWRpdXNcbiAgICApO1xuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBbLi4uZGVmYXVsdExheWVyUHJvcHMuZXh0ZW5zaW9ucywgYnJ1c2hpbmdFeHRlbnNpb25dO1xuXG4gICAgY29uc3Qgc2hhcmVkUHJvcHMgPSB7XG4gICAgICBnZXRGaWx0ZXJWYWx1ZTogZGF0YS5nZXRGaWx0ZXJWYWx1ZSxcbiAgICAgIGV4dGVuc2lvbnMsXG4gICAgICBmaWx0ZXJSYW5nZTogZGVmYXVsdExheWVyUHJvcHMuZmlsdGVyUmFuZ2UsXG4gICAgICB2aXNpYmxlOiBkZWZhdWx0TGF5ZXJQcm9wcy52aXNpYmxlLFxuICAgICAgLi4uYnJ1c2hpbmdQcm9wc1xuICAgIH07XG4gICAgY29uc3QgaG92ZXJlZE9iamVjdCA9IHRoaXMuaGFzSG92ZXJlZE9iamVjdChvYmplY3RIb3ZlcmVkKTtcblxuICAgIGNvbnN0IHRleHRMYWJlbExheWVyID0gdGhpcy5yZW5kZXJUZXh0TGFiZWxMYXllcihcbiAgICAgIHtcbiAgICAgICAgZ2V0UG9zaXRpb246IGRhdGEuZ2V0UG9zaXRpb24sXG4gICAgICAgIHNoYXJlZFByb3BzLFxuICAgICAgICBnZXRQaXhlbE9mZnNldCxcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnNcbiAgICAgIH0sXG4gICAgICBvcHRzXG4gICAgKTtcbiAgICBjb25zdCBjb21tb25MYXllclByb3BzID0ge1xuICAgICAgLi4uZGVmYXVsdExheWVyUHJvcHMsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIC8vIGNpcmNsZXMgd2lsbCBiZSBmbGF0IG9uIHRoZSBtYXAgd2hlbiB0aGUgYWx0aXR1ZGUgY29sdW1uIGlzIG5vdCB1c2VkXG4gICAgICAgIGRlcHRoVGVzdDogdGhpcy5jb25maWcuY29sdW1ucy5hbHRpdHVkZT8uZmllbGRJZHggPiAtMVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjdXN0b21NYXJrZXJzRmllbGQgPSB0aGlzLmNvbmZpZy5jdXN0b21NYXJrZXJzRmllbGQ7XG4gICAgY29uc3Qge2N1c3RvbU1hcmtlcnMsIGN1c3RvbU1hcmtlcnNVcmwsIGN1c3RvbU1hcmtlcnNSYW5nZX0gPSB0aGlzLmNvbmZpZy52aXNDb25maWc7XG4gICAgY29uc3QgY3VzdG9tTWFya2Vyc0NvbmZpZ3VyZWQgPVxuICAgICAgY3VzdG9tTWFya2VycyAmJiBCb29sZWFuKGN1c3RvbU1hcmtlcnNVcmwgfHwgKGN1c3RvbU1hcmtlcnNGaWVsZCAmJiBjdXN0b21NYXJrZXJzUmFuZ2UpKTtcbiAgICBjb25zdCBjdXN0b21NYXJrZXJzTWlzQ29uZmlndXJlZCA9IGN1c3RvbU1hcmtlcnMgJiYgIWN1c3RvbU1hcmtlcnNDb25maWd1cmVkO1xuXG4gICAgaWYgKGN1c3RvbU1hcmtlcnNDb25maWd1cmVkKSB7XG4gICAgICBjb25zdCBtYXhJY29uU2l6ZSA9IHRoaXMuZ2V0TWF4TWFya2VyU2l6ZSgpO1xuICAgICAgY29uc3QgZ2V0SWNvbiA9IHRoaXMuZ2V0Q3VzdG9tTWFya2VySWNvbkFjY2Vzc29yKGN1c3RvbU1hcmtlcnNTdGF0dXMsIGRhdGEuZ2V0SWNvblVybCk7XG4gICAgICBjb25zdCBpY29uTGF5ZXJQcm9wcyA9IHtcbiAgICAgICAgZ2V0SWNvbixcbiAgICAgICAgZ2V0UG9zaXRpb246IGRhdGEuZ2V0UG9zaXRpb24sXG4gICAgICAgIGdldFNpemU6IGRhdGEuZ2V0UmFkaXVzLFxuICAgICAgICBzaXplU2NhbGU6IHJhZGl1c1NjYWxlLFxuICAgICAgICBzaXplVW5pdHM6ICdwaXhlbHMnLFxuICAgICAgICBsb2FkT3B0aW9uczoge1xuICAgICAgICAgIGltYWdlOiB7XG4gICAgICAgICAgICB0eXBlOiAnaW1hZ2ViaXRtYXAnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbWFnZWJpdG1hcDoge1xuICAgICAgICAgICAgcmVzaXplV2lkdGg6IG1heEljb25TaXplLFxuICAgICAgICAgICAgcmVzaXplSGVpZ2h0OiBtYXhJY29uU2l6ZSxcbiAgICAgICAgICAgIHJlc2l6ZVF1YWxpdHk6ICdoaWdoJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgbmV3IEljb25MYXllcih7XG4gICAgICAgICAgLi4uY29tbW9uTGF5ZXJQcm9wcyxcbiAgICAgICAgICAuLi5pY29uTGF5ZXJQcm9wcyxcbiAgICAgICAgICBpZDogYCR7ZGVmYXVsdExheWVyUHJvcHMuaWR9LWljb25gLFxuICAgICAgICAgIGRhdGE6IGRhdGEuZGF0YSxcbiAgICAgICAgICBnZXRDb2xvcjogdGhpcy5jb25maWcudmlzQ29uZmlnLmZpbGxlZCA/IGRhdGEuZ2V0RmlsbENvbG9yIDogVU5LTk9XTl9DT0xPUixcbiAgICAgICAgICBnZXRGaWx0ZXJWYWx1ZTogZGF0YS5nZXRGaWx0ZXJWYWx1ZSxcbiAgICAgICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICAgICAgZ2V0RmlsdGVyVmFsdWU6IHVwZGF0ZVRyaWdnZXJzLmdldEZpbHRlclZhbHVlLFxuICAgICAgICAgICAgZ2V0Q29sb3I6IFt1cGRhdGVUcmlnZ2Vycy5nZXRGaWxsQ29sb3IsIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5maWxsZWRdLFxuICAgICAgICAgICAgZ2V0SWNvbjogW3VwZGF0ZVRyaWdnZXJzLmdldEljb25VcmwsIG1heEljb25TaXplLCBjdXN0b21NYXJrZXJzU3RhdHVzXSxcbiAgICAgICAgICAgIGdldFNpemU6IHVwZGF0ZVRyaWdnZXJzLmdldFJhZGl1c1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIC4uLihob3ZlcmVkT2JqZWN0XG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIG5ldyBJY29uTGF5ZXIoe1xuICAgICAgICAgICAgICAgIC4uLmljb25MYXllclByb3BzLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcygpLFxuICAgICAgICAgICAgICAgIGlkOiBgJHtkZWZhdWx0TGF5ZXJQcm9wcy5pZH0taWNvbi1ob3ZlcmVkYCxcbiAgICAgICAgICAgICAgICBkYXRhOiBbaG92ZXJlZE9iamVjdF0sXG4gICAgICAgICAgICAgICAgZ2V0Q29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXSksXG4gICAgICAgIC4uLnRleHRMYWJlbExheWVyXG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IHNjYXR0ZXJQbG90TGF5ZXJQcm9wcyA9IHtcbiAgICAgIHN0cm9rZWQ6IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5vdXRsaW5lLFxuICAgICAgZmlsbGVkOiB0aGlzLmNvbmZpZy52aXNDb25maWcuZmlsbGVkLFxuICAgICAgbGluZVdpZHRoU2NhbGU6IHRoaXMuY29uZmlnLnZpc0NvbmZpZy50aGlja25lc3MsXG4gICAgICAvLyBUT0RPOiBpbnZlbnQgYmV0dGVyIHdheSB0byByZW5kZXIgc29tZXRoaW5nIHdoZW4gY3VzdG9tTWFya2VycyBhcmUgbm90IHlldCBjb25maWd1cmVkXG4gICAgICByYWRpdXNTY2FsZTogY3VzdG9tTWFya2Vyc01pc0NvbmZpZ3VyZWQgPyByYWRpdXNTY2FsZSAvIDIgOiByYWRpdXNTY2FsZSxcbiAgICAgIC4uLih0aGlzLmNvbmZpZy52aXNDb25maWcuZml4ZWRSYWRpdXMgPyB7fSA6IHtyYWRpdXNNYXhQaXhlbHM6IDUwMH0pXG4gICAgfTtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXcgU2NhdHRlcnBsb3RMYXllcih7XG4gICAgICAgIC4uLmJydXNoaW5nUHJvcHMsXG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIC4uLmNvbW1vbkxheWVyUHJvcHMsXG4gICAgICAgIC4uLnNjYXR0ZXJQbG90TGF5ZXJQcm9wcyxcbiAgICAgICAgcmFkaXVzVW5pdHMsXG4gICAgICAgIGxpbmVXaWR0aFVuaXRzOiAncGl4ZWxzJyxcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnMsXG4gICAgICAgIGV4dGVuc2lvbnNcbiAgICAgIH0pLFxuICAgICAgLy8gaG92ZXIgbGF5ZXJcbiAgICAgIC4uLihob3ZlcmVkT2JqZWN0XG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFNjYXR0ZXJwbG90TGF5ZXIoe1xuICAgICAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMoKSxcbiAgICAgICAgICAgICAgLi4uc2NhdHRlclBsb3RMYXllclByb3BzLFxuICAgICAgICAgICAgICBkYXRhOiBbaG92ZXJlZE9iamVjdF0sXG4gICAgICAgICAgICAgIGdldExpbmVDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAgICAgICAgIGdldEZpbGxDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAgICAgICAgIGdldFJhZGl1czogZGF0YS5nZXRSYWRpdXMsXG4gICAgICAgICAgICAgIGdldFBvc2l0aW9uOiBkYXRhLmdldFBvc2l0aW9uXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgICAvLyB0ZXh0IGxhYmVsIGxheWVyXG4gICAgICAuLi50ZXh0TGFiZWxMYXllclxuICAgIF07XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carto/kepler.gl",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "0.0.48-alpha.custom-markers.1",
4
+ "version": "0.0.48-alpha.custom-markers.2",
5
5
  "description": "kepler.gl is a webgl based application to visualize large scale location data in the browser",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -821,10 +821,17 @@ class Layer {
821
821
 
822
822
  const mapping = new Map();
823
823
 
824
- for (const {value, markerUrl} of range) {
825
- if (value === null) {
826
- unknownValue = markerUrl;
827
- } else if (markerUrl) {
824
+ if (Array.isArray(range)) {
825
+ for (const {value, markerUrl} of range) {
826
+ if (value === null) {
827
+ unknownValue = markerUrl;
828
+ } else if (markerUrl) {
829
+ mapping.set(value, markerUrl);
830
+ }
831
+ }
832
+ } else {
833
+ unknownValue = range.othersMarker;
834
+ for (const {value, markerUrl} of range.markerMap) {
828
835
  mapping.set(value, markerUrl);
829
836
  }
830
837
  }
@@ -26,7 +26,7 @@ import Layer from '../base-layer';
26
26
  import {hexToRgb} from 'utils/color-utils';
27
27
  import {findDefaultColorField} from 'utils/dataset-utils';
28
28
  import PointLayerIcon from './point-layer-icon';
29
- import {DEFAULT_LAYER_COLOR, CHANNEL_SCALES} from 'constants/default-settings';
29
+ import {DEFAULT_LAYER_COLOR, CHANNEL_SCALES, UNKNOWN_COLOR} from 'constants/default-settings';
30
30
 
31
31
  import {getTextOffsetByRadius, formatTextLabelData} from '../layer-text-label';
32
32
 
@@ -134,10 +134,12 @@ export default class PointLayer extends Layer {
134
134
  scale: 'customMarkersScale',
135
135
  domain: 'customMarkersDomain',
136
136
  range: 'customMarkersRange',
137
+ fixed: 'customMarkersUrl',
137
138
  channelScaleType: CHANNEL_SCALES.customMarker,
138
139
  accessor: 'getIconUrl',
139
140
  supportedFieldTypes: ['string'],
140
- getAttributeValue: config => config.visConfig.customMarkersUrl
141
+ defaultValue: config => config.visConfig.customMarkersUrl,
142
+ condition: config => config.visConfig.customMarkers
141
143
  }
142
144
  };
143
145
  }
@@ -263,6 +265,7 @@ export default class PointLayer extends Layer {
263
265
  );
264
266
  }
265
267
 
268
+ // eslint-disable-next-line complexity
266
269
  renderLayer(opts) {
267
270
  const {data, gpuFilter, objectHovered, mapState, interactionConfig, customMarkersStatus} = opts;
268
271
 
@@ -346,18 +349,12 @@ export default class PointLayer extends Layer {
346
349
  ...iconLayerProps,
347
350
  id: `${defaultLayerProps.id}-icon`,
348
351
  data: data.data,
349
- getColor: data.getFillColor,
352
+ getColor: this.config.visConfig.filled ? data.getFillColor : UNKNOWN_COLOR,
350
353
  getFilterValue: data.getFilterValue,
351
354
  updateTriggers: {
352
355
  getFilterValue: updateTriggers.getFilterValue,
353
- getColor: updateTriggers.getFillColor,
354
- getIcon: [
355
- customMarkersUrl,
356
- maxIconSize,
357
- customMarkersStatus,
358
- customMarkersField,
359
- customMarkersRange
360
- ],
356
+ getColor: [updateTriggers.getFillColor, this.config.visConfig.filled],
357
+ getIcon: [updateTriggers.getIconUrl, maxIconSize, customMarkersStatus],
361
358
  getSize: updateTriggers.getRadius
362
359
  }
363
360
  }),