@wavemaker/app-ng-runtime 12.0.0-next.1417180 → 12.0.0-next.1417186

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.
@@ -193,10 +193,12 @@
193
193
  }
194
194
  // If no value is provided for picturesource assign pictureplaceholder or default-image
195
195
  if (!urlString) {
196
- urlString = defaultUrl || './resources/images/imagelists/default-image.png';
197
- }
198
- if (urlString.startsWith('./resources')) {
199
- urlString = './ng-bundle/' + urlString.replace('./', '');
196
+ if (i1.isValidWebURL(defaultUrl)) {
197
+ urlString = defaultUrl;
198
+ }
199
+ else {
200
+ urlString = i1._WM_APP_PROJECT.cdnUrl + (defaultUrl || 'resources/images/imagelists/default-image.png');
201
+ }
200
202
  }
201
203
  urlString = shouldEncode ? i1.encodeUrl(urlString) : urlString;
202
204
  // if the resource to be loaded is inside a prefab
@@ -810,7 +812,7 @@
810
812
  ref._parentPrefab_ = component.$element.parent().closest('[prefabname][prefabname!="__self__"]').attr('prefabname') || '';
811
813
  }
812
814
  if (ref._parentPrefab_) {
813
- nv = `./ng-bundle/resources/${ref._parentPrefab_}/${nv}`;
815
+ nv = `./resources/${ref._parentPrefab_}/${nv}`;
814
816
  }
815
817
  else if (propInfo && nv != propInfo.value) {
816
818
  nv = './' + nv;
@@ -1,5 +1,5 @@
1
1
  import { forwardRef } from '@angular/core';
2
- import { $parseExpr, checkIsCustomPipeExpression, deHyphenate, encodeUrl, FormWidgetType, getClonedObject, initCaps, isValidWebURL, prettifyLabel, stringStartsWith } from '@wm/core';
2
+ import { $parseExpr, _WM_APP_PROJECT, checkIsCustomPipeExpression, deHyphenate, encodeUrl, FormWidgetType, getClonedObject, initCaps, isValidWebURL, prettifyLabel, stringStartsWith } from '@wm/core';
3
3
  import { DialogRef, WidgetRef } from '../widgets/framework/types';
4
4
  import { createFocusTrap } from '@wavemaker/focus-trap';
5
5
  import { assignWith, forEach, get, includes, isArray, isNull, isObject, isString, join, split, union } from "lodash-es";
@@ -163,10 +163,12 @@ export const getImageUrl = (urlString, shouldEncode, defaultUrl) => {
163
163
  }
164
164
  // If no value is provided for picturesource assign pictureplaceholder or default-image
165
165
  if (!urlString) {
166
- urlString = defaultUrl || './resources/images/imagelists/default-image.png';
167
- }
168
- if (urlString.startsWith('./resources')) {
169
- urlString = './ng-bundle/' + urlString.replace('./', '');
166
+ if (isValidWebURL(defaultUrl)) {
167
+ urlString = defaultUrl;
168
+ }
169
+ else {
170
+ urlString = _WM_APP_PROJECT.cdnUrl + (defaultUrl || 'resources/images/imagelists/default-image.png');
171
+ }
170
172
  }
171
173
  urlString = shouldEncode ? encodeUrl(urlString) : urlString;
172
174
  // if the resource to be loaded is inside a prefab
@@ -480,4 +482,4 @@ export const getKeyboardFocusableElements = (element) => {
480
482
  && (!el.hasAttribute('tabindex') || (el.hasAttribute('tabindex') && !el.getAttribute("tabindex").startsWith('-'))));
481
483
  });
482
484
  };
483
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9iYXNlL3NyYy91dGlscy93aWRnZXQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQ0gsVUFBVSxFQUNWLDJCQUEyQixFQUMzQixXQUFXLEVBQ1gsU0FBUyxFQUNULGNBQWMsRUFDZCxlQUFlLEVBQ2YsUUFBUSxFQUNSLGFBQWEsRUFDYixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ25CLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRXRILE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxRQUFRO0lBQ3ZHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDaEk7Ozs7R0FJRztBQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUU7SUFDcEMsSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENB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RSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDM0QsaUJBQWlCLEVBQUUsaUJBQWlCO1FBQ3BDLGNBQWMsRUFBRSxxQkFBcUI7S0FDeEMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFBO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsT0FBb0IsRUFBRSxFQUFFO0lBQ2pFLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyx5SUFBeUksQ0FBQyxDQUFDO0lBQzVMLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0MsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztlQUMzRCxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1SCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Zm9yd2FyZFJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgJHBhcnNlRXhwcixcbiAgICBjaGVja0lzQ3VzdG9tUGlwZUV4cHJlc3Npb24sXG4gICAgZGVIeXBoZW5hdGUsXG4gICAgZW5jb2RlVXJsLFxuICAgIEZvcm1XaWRnZXRUeXBlLFxuICAgIGdldENsb25lZE9iamVjdCxcbiAgICBpbml0Q2FwcyxcbiAgICBpc1ZhbGlkV2ViVVJMLFxuICAgIHByZXR0aWZ5TGFiZWwsXG4gICAgc3RyaW5nU3RhcnRzV2l0aFxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge0RpYWxvZ1JlZiwgV2lkZ2V0UmVmfSBmcm9tICcuLi93aWRnZXRzL2ZyYW1ld29yay90eXBlcyc7XG5pbXBvcnQge2NyZWF0ZUZvY3VzVHJhcH0gZnJvbSAnQHdhdmVtYWtlci9mb2N1cy10cmFwJztcbmltcG9ydCB7TmF2Tm9kZX0gZnJvbSBcIi4uL3dpZGdldHMvY29tbW9uL2Jhc2UvZGF0YXNldC1hd2FyZS1uYXYuY29tcG9uZW50XCI7XG5pbXBvcnQge2Fzc2lnbldpdGgsIGZvckVhY2gsIGdldCwgaW5jbHVkZXMsIGlzQXJyYXksIGlzTnVsbCwgaXNPYmplY3QsIGlzU3RyaW5nLCBqb2luLCBzcGxpdCwgdW5pb259IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgREFUQVNFVF9XSURHRVRTID0gbmV3IFNldChbRm9ybVdpZGdldFR5cGUuU0VMRUNULCBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWFNFVCwgRm9ybVdpZGdldFR5cGUuUkFESU9TRVQsXG4gICAgRm9ybVdpZGdldFR5cGUuU1dJVENILCBGb3JtV2lkZ2V0VHlwZS5BVVRPQ09NUExFVEUsIEZvcm1XaWRnZXRUeXBlLkNISVBTLCBGb3JtV2lkZ2V0VHlwZS5UWVBFQUhFQUQsIEZvcm1XaWRnZXRUeXBlLlJBVElOR10pO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXJzZWQsIHVwZGF0ZWQgYm91bmQgZXhwcmVzc2lvblxuICogaWYgdGhlIGV4cHJlc3Npb24gaXMgJFtkYXRhWyRpXVtmaXJzdE5hbWVdXSArICctLScgKyAkW2xhc3ROYW1lXSArICctLScgKyAkWydASURAJ11cbiAqIHJldHVybnMgX18xLmZpcnN0TmFtZSArICctLScgKyBsYXN0TmFtZSArICctLScgKyBfXzFbJ0BJREAnXVxuICovXG5jb25zdCBnZXRVcGRhdGVkRXhwciA9IChleHByOiBzdHJpbmcpID0+IHtcbiAgICBsZXQgdXBkYXRlZCA9ICcnLCBjaCwgbmV4dCwgaSwgaiwgbWF0Y2hDaCwgbWF0Y2hDb3VudCwgaXNRdW90ZWRTdHIsIHN1YlN0ciwgaXNRdW90ZWRTdHJFdmFsdWF0ZWQ7XG5cbiAgICBleHByID0gZXhwci5yZXBsYWNlKC9cXCRcXFtkYXRhXFxbXFwkaVxcXS9nLCAnJFtfXzEnKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBleHByLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNoID0gZXhwcltpXTtcbiAgICAgICAgbmV4dCA9IGV4cHJbaSArIDFdO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBpZiB0aGUgZXhwcmVzc2lvbiBzdGFydHMgd2l0aCAkWywgY2hlY2sgdGhlIG5leHQoY2gpIGNoYXJhY3RlcixcbiAgICAgICAgICogICAgaWYgY2ggaXMgYSBxdW90ZSgnLCBcIikgY2hhbmdlIHRoZSBleHByIHRvIF9fW1xuICAgICAgICAgKiAgICBpZiBjaCBpcyBhIHdoaXRlU3BhY2UsIHJlbW92ZSBpdFxuICAgICAgICAgKiAgICBlbHNlIHJlbW92ZSAkW1xuICAgICAgICAgKi9cbiAgICAgICAgaWYgKGNoID09PSAnJCcgJiYgbmV4dCA9PT0gJ1snKSB7XG4gICAgICAgICAgICBtYXRjaENvdW50ID0gMTtcbiAgICAgICAgICAgIGlzUXVvdGVkU3RyRXZhbHVhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpc1F1b3RlZFN0ciA9IGZhbHNlO1xuXG4gICAgICAgICAgICBmb3IgKGogPSBpICsgMjsgaiA8IGV4cHIubGVuZ3RoOyBqKyspIHtcblxuICAgICAgICAgICAgICAgIG1hdGNoQ2ggPSBleHByW2pdO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoQ2ggPT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWlzUXVvdGVkU3RyRXZhbHVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzUXVvdGVkU3RyID0gZXhwcltqXSA9PT0gJ1wiJyB8fCBleHByW2pdID09PSAnXFwnJztcbiAgICAgICAgICAgICAgICAgICAgaXNRdW90ZWRTdHJFdmFsdWF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaENoID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hDb3VudCsrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hDaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoQ291bnQtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViU3RyID0gZXhwci5zdWJzdHJpbmcoaSArIDIsIGopO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNRdW90ZWRTdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgKz0gJ19fMVsnICsgc3ViU3RyICsgJ10nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCArPSBzdWJTdHI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpID0gajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVwZGF0ZWQgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoZSBwcm92aWRlZCBrZXkgaW4gdGhlIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0T2JqVmFsdWVCeUtleSA9IChvYmo6IGFueSwgc3RyS2V5OiBzdHJpbmcpID0+IHtcbiAgICAvKiBjaGVjayBmb3IgdGhlIGtleS1zdHJpbmcgKi9cbiAgICBpZiAoc3RyS2V5KSB7XG4gICAgICAgIGxldCB2YWw7XG4gICAgICAgIC8qIGNvbnZlcnQgaW5kZXhlcyB0byBwcm9wZXJ0aWVzLCBzbyBhcyB0byB3b3JrIGZvciBldmVuICdrZXkxWzBdLmNoaWxkMScqL1xuICAgICAgICBzdHJLZXkucmVwbGFjZSgvXFxbKFxcdyspXFxdL2csICcuJDEnKS5zcGxpdCgnLicpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIC8vIElmIG9iaiBpcyBudWxsLCB0aGVuIGFzc2lnbiB2YWwgdG8gbnVsbC5cbiAgICAgICAgICAgIHZhbCA9ICh2YWwgJiYgdmFsW2tleV0pIHx8IChpc051bGwob2JqKSA/IG9iaiA6IG9ialtrZXldKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59O1xuXG4vKipcbiAqIHJldHVybnMgdGhlIGRpc3BsYXkgZmllbGQgZGF0YSBmb3IgYW55IGRhdGFzZXQgd2lkZ2V0c1xuICogQmFzZWQgb24gdGhlIGJpbmQgZGlzcGxheSBleHByZXNzaW9uIG9yIGRpc3BsYXkgZXhwcmVzc2lvbiBvciBkaXNwbGF5IG5hbWUsXG4gKiBkYXRhIGlzIGV4dHJhY3RlZCBhbmQgZm9ybWF0dGVkIGZyb20gdGhlIHBhc3NlZCBvcHRpb24gb2JqZWN0XG4gKiBJZiB0aGVyZSBpcyBmaWVsZCBpcyBzcGVjaWZpZWQsIGZpZWxkIHZhbHVlIGlzIG9idGFpbmVkIGZyb20gdGhlIGRhdGFPYmouXG4gKiBJZiBleHByZXNzaW9uIGlzIGdpdmVuLCBldmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24gdmFsdWUuXG4gKiBlbHNlIGNoZWNrIGZvciBiaW5kRXhwcmVzc2lvbiwgZXh0cmFjdCB0aGUgdmFsdWUgZnJvbSB0aGUgZGF0YU9ialxuICovXG5leHBvcnQgY29uc3QgZ2V0RXZhbHVhdGVkRGF0YSA9IChkYXRhT2JqOiBhbnksIG9wdGlvbnM6IGFueSwgY29udGV4dD86IGFueSkgPT4ge1xuICAgIGxldCBleHByZXNzaW9uVmFsdWU7XG4gICAgY29uc3QgZmllbGQgPSBvcHRpb25zLmZpZWxkLFxuICAgICAgICBleHByID0gb3B0aW9ucy5leHByZXNzaW9uLFxuICAgICAgICBiaW5kRXhwciA9IG9wdGlvbnMuYmluZEV4cHJlc3Npb247XG5cbiAgICAvLyBpZiBrZXkgaXMgYm91bmQgZXhwcmVzc2lvblxuICAgIGlmIChiaW5kRXhwcikge1xuICAgICAgICAvLyByZW1vdmUgJ2JpbmQ6JyBwcmVmaXggZnJvbSB0aGUgYm91bmRFeHByZXNzaW9uTmFtZVxuICAgICAgICBleHByZXNzaW9uVmFsdWUgPSBiaW5kRXhwci5yZXBsYWNlKCdiaW5kOicsICcnKTtcblxuICAgICAgICAvLyBGb3IgYmluZCBleHByZXNzaW9uIHBhc3NpbmcgdGhlIGxhc3QgYXJndW1lbnQgdGhhdCB0aGUgb2JqZWN0IG9mIGRhdGFzZXQgaXRlbS5cbiAgICAgICAgLy8gTm90ZTogRm9yIHBhcnNlIGV4cHJlc3Npb24gd2UgYXJlIHNlbmRpbmcgZGF0YU9iaiB3aXRoIHRoZSBwcm9wZXJ5IG5hbWUgXCJfXzFcIiwgd2UgdXNlZCB0aGUgc2FtZSBwcm9wZXJ5IHRvIHNlbmQgdGhlIGxhc3QgYXJndW1lbnQgYXMgZGF0YXNldCBpdGVtXG4gICAgICAgIGlmKGNoZWNrSXNDdXN0b21QaXBlRXhwcmVzc2lvbihleHByZXNzaW9uVmFsdWUpKXtcbiAgICAgICAgICAgIGV4cHJlc3Npb25WYWx1ZSA9IGV4cHJlc3Npb25WYWx1ZSsnOiBfXzEnO1xuICAgICAgICB9XG4gICAgICAgIC8vIHBhcnNlIHRoZSBleHByZXNzaW9uVmFsdWUgZm9yIHJlcGxhY2luZyBhbGwgdGhlIGV4cHJlc3Npb25zIHdpdGggdmFsdWVzIGluIHRoZSBvYmplY3RcbiAgICAgICAgZXhwcmVzc2lvblZhbHVlID0gZ2V0VXBkYXRlZEV4cHIoZXhwcmVzc2lvblZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBleHByZXNzaW9uVmFsdWUgPSBleHByID8gZXhwciA6IGZpZWxkO1xuICAgIH1cblxuICAgIC8vIEhhbmRsaW5nIGZpZWxkIG5hbWUgd2l0aCBzcGVjaWFsIGNoYXJlY3RlcnNcbiAgICAvLyBFeDogZmllbGQgPSBcImYgbmFtZVwiXG4gICAgaWYgKCFiaW5kRXhwciAmJiAhZXhwcikge1xuICAgICAgICByZXR1cm4gZ2V0KGRhdGFPYmosIGZpZWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJHBhcnNlRXhwcihleHByZXNzaW9uVmFsdWUpKGNvbnRleHQsIE9iamVjdC5hc3NpZ24oe30sIGRhdGFPYmosIHtfXzE6IGRhdGFPYmp9KSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBY3RpdmVOYXZJdGVtID0gKGxpbmssIHJvdXRlTmFtZSkgPT4ge1xuICAgIGlmICghbGluayB8fCAhcm91dGVOYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcm91dGVOYW1lID0gcm91dGVOYW1lLmluZGV4T2YoJz8nKSA9PT0gLTEgPyByb3V0ZU5hbWUgOiByb3V0ZU5hbWUuc3Vic3RyaW5nKDAsIHJvdXRlTmFtZS5pbmRleE9mKCc/JykpO1xuICAgIGxpbmsgPSBsaW5rLmluZGV4T2YoJz8nKSA9PT0gLTEgPyBsaW5rIDogbGluay5zdWJzdHJpbmcoMCwgbGluay5pbmRleE9mKCc/JykpO1xuICAgIGNvbnN0IHJvdXRlUmVnZXggPSBuZXcgUmVnRXhwKCdeKCNcXC98IyknICsgcm91dGVOYW1lICsgJyQnKTtcbiAgICByZXR1cm4gcm91dGVSZWdleC50ZXN0KGxpbmspO1xufTtcblxuLyoqXG4qIHJldHVybnMgdHJ1ZSBpZiB0aGUgbWVudSBoYXMgbGluayB0byB0aGUgY3VycmVudCBwYWdlLlxuKiBAcGFyYW0gbm9kZXNcbiogQHBhcmFtIHJvdXRlVXJsXG4qL1xuZXhwb3J0IGNvbnN0IGhhc0xpbmtUb0N1cnJlbnRQYWdlID0gKG5vZGVzOiBBcnJheTxOYXZOb2RlPiwgcm91dGVVcmwpID0+IHtcbiAgICByZXR1cm4gbm9kZXMuc29tZShub2RlID0+IHtcbiAgICAgICAgaWYgKGlzQWN0aXZlTmF2SXRlbShub2RlLmxpbmssIHJvdXRlVXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBoYXNMaW5rVG9DdXJyZW50UGFnZShub2RlLmNoaWxkcmVuLCByb3V0ZVVybCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmRlckJ5IEV4cHJlc3Npb24gYmFzZWQgb24gdGhlICdzb3J0ICdvcHRpb24gaW4gcGFnZWFibGUgb2JqZWN0XG4gKiByZXR1cm5lZCBieSBiYWNrZW5kXG4gKiBAcGFyYW0gcGFnZWFibGVPYmpcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRPcmRlckJ5RXhwciA9IHBhZ2VhYmxlT2JqID0+IHtcbiAgICBwYWdlYWJsZU9iaiA9IHBhZ2VhYmxlT2JqIHx8IFtdO1xuICAgIGNvbnN0IGV4cHJlc3Npb25zICAgICAgID0gW10sXG4gICAgICAgIEtFWV9WQUxfU0VQQVJBVE9SID0gJyAnLFxuICAgICAgICBGSUVMRF9TRVBBUkFUT1IgICA9ICcsJztcbiAgICBmb3JFYWNoKHBhZ2VhYmxlT2JqLCBvYmogPT4ge1xuICAgICAgICBpZiAob2JqLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChvYmoucHJvcGVydHkgKyBLRVlfVkFMX1NFUEFSQVRPUiArIG9iai5kaXJlY3Rpb24udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBqb2luKGV4cHJlc3Npb25zLCBGSUVMRF9TRVBBUkFUT1IpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRGF0YVNldFdpZGdldCA9IHdpZGdldCA9PiB7XG4gICAgcmV0dXJuIERBVEFTRVRfV0lER0VUUy5oYXMod2lkZ2V0KTtcbn07XG5cbi8qVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB1cmwgdG8gdGhlIGltYWdlIGFmdGVyIGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiB1cmwqL1xuZXhwb3J0IGNvbnN0IGdldEltYWdlVXJsID0gKHVybFN0cmluZywgc2hvdWxkRW5jb2RlPywgZGVmYXVsdFVybD8pID0+IHtcbiAgICAvKkluIHN0dWRpbyBtb2RlIGJlZm9yZSBzZXR0aW5nIHBpY3R1cmVzb3VyY2UsIGNoZWNrIGlmIHRoZSBzdHVkaW9Db250cm9sbGVyIGlzIGxvYWRlZCBhbmQgbmV3IHBpY3R1cmVzb3VyY2UgaXMgaW4gJ3N0eWxlcy9pbWFnZXMvJyBwYXRoIG9yIG5vdC5cbiAgICAgKiBXaGVuIHBhZ2UgaXMgcmVmcmVzaGVkLCBsb2FkZXIuZ2lmIHdpbGwgYmUgbG9hZGVkIGZpcnN0IGFuZCBpdCB3aWxsIGJlIGluICdzdHlsZS9pbWFnZXMvJy5cbiAgICAgKiBQcmVwZW5kICdzZXJ2aWNlcy9wcm9qZWN0cy8nICsgJHJvb3RTY29wZS5wcm9qZWN0LmlkICsgJy93ZWIvcmVzb3VyY2VzL2ltYWdlcy9pbWFnZWxpc3RzLycgIGlmIHRoZSBpbWFnZSB1cmwgaXMganVzdCBpbWFnZSBuYW1lIGluIHRoZSBwcm9qZWN0IHJvb3QsXG4gICAgICogYW5kIGlmIHRoZSB1cmwgcG9pbnRpbmcgdG8gcmVzb3VyY2VzL2ltYWdlcy8gdGhlbiAnc2VydmljZXMvcHJvamVjdHMvJyArICRyb290U2NvcGUucHJvamVjdC5pZCArICcvd2ViLycqL1xuICAgIGlmIChpc1ZhbGlkV2ViVVJMKHVybFN0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIHVybFN0cmluZztcbiAgICB9XG5cbiAgICAvLyBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCBmb3IgcGljdHVyZXNvdXJjZSBhc3NpZ24gcGljdHVyZXBsYWNlaG9sZGVyIG9yIGRlZmF1bHQtaW1hZ2VcbiAgICBpZiAoIXVybFN0cmluZykge1xuICAgICAgICB1cmxTdHJpbmcgPSBkZWZhdWx0VXJsIHx8ICcuL3Jlc291cmNlcy9pbWFnZXMvaW1hZ2VsaXN0cy9kZWZhdWx0LWltYWdlLnBuZyc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmKHVybFN0cmluZy5zdGFydHNXaXRoKCcuL3Jlc291cmNlcycpKXtcbiAgICAgICAgdXJsU3RyaW5nID0gJy4vbmctYnVuZGxlLycrdXJsU3RyaW5nLnJlcGxhY2UoJy4vJywgJycpO1xuICAgICAgfVxuICAgIHVybFN0cmluZyA9IHNob3VsZEVuY29kZSA/IGVuY29kZVVybCh1cmxTdHJpbmcpIDogdXJsU3RyaW5nO1xuXG4gICAgLy8gaWYgdGhlIHJlc291cmNlIHRvIGJlIGxvYWRlZCBpcyBpbnNpZGUgYSBwcmVmYWJcbiAgICBpZiAoc3RyaW5nU3RhcnRzV2l0aCh1cmxTdHJpbmcsICdzZXJ2aWNlcy9wcmVmYWJzJykpIHtcbiAgICAgICAgcmV0dXJuIHVybFN0cmluZztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsU3RyaW5nO1xufTtcblxuLypUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB1cmwgdG8gdGhlIGJhY2tncm91bmRJbWFnZSovXG5leHBvcnQgY29uc3QgZ2V0QmFja0dyb3VuZEltYWdlVXJsID0gKHVybFN0cmluZykgPT4ge1xuICAgIGlmICh1cmxTdHJpbmcgPT09ICcnIHx8IHVybFN0cmluZyA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHJldHVybiB1cmxTdHJpbmc7XG4gICAgfVxuICAgIHJldHVybiAndXJsKCcgKyBnZXRJbWFnZVVybCh1cmxTdHJpbmcpICsgJyknO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBcyhyZWZlcmVuY2U6IGFueSwga2V5OiBhbnksIG11bHRpPzogYm9vbGVhbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHByb3ZpZGU6IGtleSxcbiAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gcmVmZXJlbmNlKSxcbiAgICAgICAgbXVsdGk6IG11bHRpXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBc1dpZGdldFJlZihyZWZlcmVuY2U6IGFueSkge1xuICAgIHJldHVybiBwcm92aWRlQXMocmVmZXJlbmNlLCBXaWRnZXRSZWYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUFzRGlhbG9nUmVmKHJlZmVyZW5jZTogYW55KSB7XG4gICAgcmV0dXJuIHByb3ZpZGVBcyhyZWZlcmVuY2UsIERpYWxvZ1JlZik7XG59XG5cbmV4cG9ydCBjb25zdCBOQVZJR0FUSU9OX1RZUEUgPSB7XG4gICAgQURWQU5DRUQ6ICdBZHZhbmNlZCcsXG4gICAgQkFTSUM6ICdCYXNpYycsXG4gICAgQ0xBU1NJQzogJ0NsYXNzaWMnLFxuICAgIElOTElORTogJ0lubGluZScsXG4gICAgTk9ORTogJ05vbmUnLFxuICAgIE9OREVNQU5EOiAnT24tRGVtYW5kJyxcbiAgICBQQUdFUjogJ1BhZ2VyJyxcbiAgICBTQ1JPTEw6ICdTY3JvbGwnXG59O1xuXG5leHBvcnQgY29uc3QgSU5QVVRNT0RFID0ge1xuICAgIEZJTkFOQ0lBTDogJ2ZpbmFuY2lhbCcsXG4gICAgTkFUVVJBTDogJ25hdHVyYWwnXG59O1xuXG5leHBvcnQgY29uc3QgQVVUT0NMT1NFX1RZUEUgPSB7XG4gICAgT1VUU0lERUNMSUNLOiAnb3V0c2lkZUNsaWNrJyxcbiAgICBBTFdBWVM6ICdhbHdheXMnLFxuICAgIERJU0FCTEVEOiAnZGlzYWJsZWQnXG59XG5cbmV4cG9ydCBjb25zdCB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcyA9IFsnT24tRGVtYW5kJywgJ1Njcm9sbCddO1xuXG5leHBvcnQgY29uc3QgZ2V0V2F0Y2hJZGVudGlmaWVyID0gKC4uLmFyZ3MpID0+IGFyZ3Muam9pbignXycpO1xuXG5jb25zdCB0eXBlc01hcCA9IHtcbiAgICBudW1iZXI6IFsnbnVtYmVyJywgJ2ludGVnZXInLCAnYmlnX2ludGVnZXInLCAnc2hvcnQnLCAnZmxvYXQnLCAnYmlnX2RlY2ltYWwnLCAnZG91YmxlJywgJ2xvbmcnLCAnYnl0ZSddLFxuICAgIHN0cmluZzogWydzdHJpbmcnLCAndGV4dCddLFxuICAgIGNoYXJhY3RlcjogWydjaGFyYWN0ZXInXSxcbiAgICBkYXRlOiBbJ2RhdGUnLCAndGltZScsICAndGltZXN0YW1wJywgJ2RhdGV0aW1lJ11cbn07XG5jb25zdCBtb2RlcyA9IHtcbiAgICBudW1iZXI6IFsnZXhhY3QnLCAnbm90ZXF1YWxzJywgJ2xlc3N0aGFuJywgJ2xlc3N0aGFuZXF1YWwnLCAnZ3JlYXRlcnRoYW4nLCAnZ3JlYXRlcnRoYW5lcXVhbCcsICdudWxsJywgJ2lzbm90bnVsbCddLFxuICAgIHN0cmluZzogWydhbnl3aGVyZWlnbm9yZWNhc2UnLCAnYW55d2hlcmUnLCAnc3RhcnRpZ25vcmVjYXNlJywgJ3N0YXJ0JywgJ2VuZGlnbm9yZWNhc2UnLCAnZW5kJywgJ2V4YWN0aWdub3JlY2FzZScsICdleGFjdCcsICdub3RlcXVhbHNpZ25vcmVjYXNlJywgJ25vdGVxdWFscycsICdudWxsJywgJ2lzbm90bnVsbCcsICdlbXB0eScsICdpc25vdGVtcHR5JywgJ251bGxvcmVtcHR5J10sXG4gICAgY2hhcmFjdGVyOiBbJ2V4YWN0aWdub3JlY2FzZScsICdleGFjdCcsICdub3RlcXVhbHNpZ25vcmVjYXNlJywgJ25vdGVxdWFscycsICdudWxsJywgJ2lzbm90bnVsbCcsICdlbXB0eScsICdpc25vdGVtcHR5JywgJ251bGxvcmVtcHR5J10sXG4gICAgZGF0ZTogWydleGFjdCcsICdsZXNzdGhhbicsICdsZXNzdGhhbmVxdWFsJywgJ2dyZWF0ZXJ0aGFuJywgJ2dyZWF0ZXJ0aGFuZXF1YWwnLCAnbnVsbCcsICdub3RlcXVhbHMnLCAnaXNub3RudWxsJ11cbn07XG5jb25zdCBtYXRjaE1vZGVUeXBlc01hcCA9IHtcbiAgICBib29sZWFuOiBbJ2V4YWN0JywgJ251bGwnLCAnaXNub3RudWxsJ10sXG4gICAgY2xvYjogW10sXG4gICAgYmxvYjogW11cbn07XG5leHBvcnQgY29uc3QgZ2V0TWF0Y2hNb2RlVHlwZXNNYXAgPSAobXVsdGlNb2RlPykgPT4ge1xuICAgIGlmIChtdWx0aU1vZGUpIHtcbiAgICAgICAgbW9kZXMubnVtYmVyLnB1c2goJ2luJywgJ25vdGluJywgJ2JldHdlZW4nKTtcbiAgICAgICAgbW9kZXMuZGF0ZS5wdXNoKCdiZXR3ZWVuJyk7XG4gICAgICAgIG1vZGVzLnN0cmluZy5wdXNoKCdpbicsICdub3RpbicpO1xuICAgICAgICBtb2Rlcy5jaGFyYWN0ZXIucHVzaCgnaW4nLCAnbm90aW4nKTtcbiAgICB9XG5cbiAgICBmb3JFYWNoKHR5cGVzTWFwLCAodHlwZXMsIHByaW1UeXBlKSA9PiB7XG4gICAgICAgIGZvckVhY2godHlwZXMsIHR5cGUgPT4ge1xuICAgICAgICAgICAgbWF0Y2hNb2RlVHlwZXNNYXBbdHlwZV0gPSBtb2Rlc1twcmltVHlwZV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIHRoaXMgaXMgdXNlZCBpbiBmaWx0ZXIgY3JpdGVyaWEgd2hlbiB0aGUgdXNlciB0eXBlcyB0aGUgY29sdW1uIG5hbWUgbWFudWFsbHkgYW5kIHdoZXJlIHdlIGRvbnQga25vdyB0aGUgdHlwZSBvZiB0aGUgY29sdW1uXG4gICAgbWF0Y2hNb2RlVHlwZXNNYXBbJ2RlZmF1bHQnXSA9IHVuaW9uKG1vZGVzWydudW1iZXInXSwgbW9kZXNbJ3N0cmluZyddLCBtb2Rlc1snY2hhcmFjdGVyJ10sIG1vZGVzWydkYXRlJ10sIG1vZGVzWydkYXRlJ10pO1xuICAgIHJldHVybiBtYXRjaE1vZGVUeXBlc01hcDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNYXRjaE1vZGVNc2dzID0gKGFwcExvY2FsZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0ICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfU1RBUlRTX1dJVEgsXG4gICAgICAgIHN0YXJ0aWdub3JlY2FzZSAgOiBhcHBMb2NhbGUuTEFCRUxfU1RBUlRTX1dJVEhfSUdOT1JFQ0FTRSxcbiAgICAgICAgZW5kICAgICAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9FTkRTX1dJVEgsXG4gICAgICAgIGVuZGlnbm9yZWNhc2UgICAgOiBhcHBMb2NhbGUuTEFCRUxfRU5EU19XSVRIX0lHTk9SRUNBU0UsXG4gICAgICAgIGFueXdoZXJlICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfQ09OVEFJTlMsXG4gICAgICAgIGFueXdoZXJlaWdub3JlY2FzZTogYXBwTG9jYWxlLkxBQkVMX0NPTlRBSU5TX0lHTk9SRUNBU0UsXG4gICAgICAgIGV4YWN0ICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfRVFVQUxfVE8sXG4gICAgICAgIGV4YWN0aWdub3JlY2FzZSAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfRVFVQUxfVE9fSUdOT1JFQ0FTRSxcbiAgICAgICAgbm90ZXF1YWxzICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19OT1RfRVFVQUxfVE8sXG4gICAgICAgIG5vdGVxdWFsc2lnbm9yZWNhc2U6IGFwcExvY2FsZS5MQUJFTF9JU19OT1RfRVFVQUxfVE9fSUdOT1JFQ0FTRSxcbiAgICAgICAgbGVzc3RoYW4gICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9MRVNTX1RIQU4sXG4gICAgICAgIGxlc3N0aGFuZXF1YWwgICAgOiBhcHBMb2NhbGUuTEFCRUxfTEVTU19USEFOX09SX0VRVUFMU19UTyxcbiAgICAgICAgZ3JlYXRlcnRoYW4gICAgICA6IGFwcExvY2FsZS5MQUJFTF9HUkVBVEVSX1RIQU4sXG4gICAgICAgIGdyZWF0ZXJ0aGFuZXF1YWwgOiBhcHBMb2NhbGUuTEFCRUxfR1JFQVRFUl9USEFOX09SX0VRVUFMU19UTyxcbiAgICAgICAgbnVsbCAgICAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19OVUxMLFxuICAgICAgICBpc25vdG51bGwgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX05PVF9OVUxMLFxuICAgICAgICBlbXB0eSAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX0VNUFRZLFxuICAgICAgICBpc25vdGVtcHR5ICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX05PVF9FTVBUWSxcbiAgICAgICAgbnVsbG9yZW1wdHkgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19OVUxMX09SX0VNUFRZLFxuICAgICAgICBpbiAgICAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lOLFxuICAgICAgICBub3RpbiAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX05PVF9JTixcbiAgICAgICAgYmV0d2VlbiAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9CRVRXRUVOXG4gICAgfTtcbn07XG5cbi8vIFJldHVybnMgYXJyYXkgb2YgY2xhc3NlcyB0aGF0IGFyZSBldmFsdWF0ZWQgdHJ1ZSBmb3IgZ2l2ZW4gb2JqZWN0IG9yIGFycmF5XG5jb25zdCBnZXRDbGFzc2VzQXJyYXkgPSBjbGFzc1ZhbCA9PiB7XG4gICAgbGV0IGNsYXNzZXMgPSBbXTtcblxuICAgIGlmIChpc0FycmF5KGNsYXNzVmFsKSkge1xuICAgICAgICBjbGFzc1ZhbC5mb3JFYWNoKHYgPT4ge1xuICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuY29uY2F0KGdldENsYXNzZXNBcnJheSh2KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGNsYXNzVmFsKSkge1xuICAgICAgICBmb3JFYWNoKGNsYXNzVmFsLCAodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQoa2V5LnNwbGl0KCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsYXNzZXM7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbmRpdGlvbmFsQ2xhc3NlcyA9IChudiwgb3Y/KSA9PiB7XG4gICAgbGV0IHRvQWRkO1xuICAgIGxldCB0b1JlbW92ZTtcbiAgICAvLyBpZiB0aGUgY29uZGl0aW9uYWwgY2xhc3MgcHJvcGVydHkgaGFzIGFscmVhZHkgdG9BZGQgYW5kIHRvUmVtb3ZlIGFycmF5cyB0aGVuIHRha2UgdGhhdCBvdGhlcndpc2UgYnVpbGQgdGhvc2UgYXJyYXlzXG4gICAgY29uc3QgY2xhc3NUb0FkZCA9IG52LnRvQWRkIHx8IG52O1xuICAgIGNvbnN0IGNsYXNzVG9SZW1vdmUgPSBudi50b1JlbW92ZSB8fCBvdjtcbiAgICBpZiAoaXNPYmplY3QobnYpKSB7XG4gICAgICAgIHRvQWRkID0gaXNBcnJheShjbGFzc1RvQWRkKSA/IGNsYXNzVG9BZGQgOiBnZXRDbGFzc2VzQXJyYXkoY2xhc3NUb0FkZCB8fCBbXSk7XG4gICAgICAgIHRvUmVtb3ZlID0gY2xhc3NUb1JlbW92ZSA/IChpc0FycmF5KGNsYXNzVG9SZW1vdmUpID8gY2xhc3NUb1JlbW92ZSA6IGdldENsYXNzZXNBcnJheShjbGFzc1RvUmVtb3ZlKSkgOiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b0FkZCA9IGNsYXNzVG9BZGQgPyBbY2xhc3NUb0FkZF0gOiBbXTtcbiAgICAgICAgdG9SZW1vdmUgPSBjbGFzc1RvUmVtb3ZlID8gW2NsYXNzVG9SZW1vdmVdIDogW107XG4gICAgfVxuICAgIHJldHVybiB7dG9BZGQsIHRvUmVtb3ZlfTtcbn07XG5cbi8qaGVscGVyIGZ1bmN0aW9uIGZvciBwcmVwYXJlRmllbGREZWZzKi9cbmNvbnN0IHB1c2hGaWVsZERlZiA9IChkYXRhT2JqZWN0LCBjb2x1bW5EZWZPYmosIG5hbWVQcmVmaXgsIG9wdGlvbnMpID0+IHtcbiAgICAvKmxvb3Agb3ZlciB0aGUgZmllbGRzIGluIHRoZSBkYXRhT2JqZWN0IHRvIHByb2Nlc3MgdGhlbSovXG4gICAgbGV0IG1vZGlmaWVkVGl0bGUsXG4gICAgICAgIHJlbGF0ZWRUYWJsZSxcbiAgICAgICAgcmVsYXRlZEZpZWxkLFxuICAgICAgICByZWxhdGVkSW5mbyxcbiAgICAgICAgZmllbGROYW1lLFxuICAgICAgICBpc1JlbGF0ZWQ7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgZm9yRWFjaChkYXRhT2JqZWN0LCAodmFsdWUsIHRpdGxlKSA9PiB7XG4gICAgICAgIGlmIChpbmNsdWRlcyh0aXRsZSwgJy4nKSkge1xuICAgICAgICAgICAgcmVsYXRlZEluZm8gPSBzcGxpdCh0aXRsZSwgJy4nKTtcbiAgICAgICAgICAgIHJlbGF0ZWRUYWJsZSA9IHJlbGF0ZWRJbmZvWzBdO1xuICAgICAgICAgICAgcmVsYXRlZEZpZWxkID0gcmVsYXRlZEluZm9bMV07XG4gICAgICAgICAgICBpc1JlbGF0ZWQgICAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm5vTW9kaWZ5VGl0bGUpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1N0cmluZyh0aXRsZSkpIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllZFRpdGxlID0gcHJldHRpZnlMYWJlbCh0aXRsZSk7XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRUaXRsZSA9IGRlSHlwaGVuYXRlKG1vZGlmaWVkVGl0bGUpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVkVGl0bGUgPSBuYW1lUHJlZml4ID8gaW5pdENhcHMobmFtZVByZWZpeCkgKyAnICcgKyBtb2RpZmllZFRpdGxlIDogbW9kaWZpZWRUaXRsZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRUaXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRpdGxlID0gbmFtZVByZWZpeCA/IG5hbWVQcmVmaXggKyAnLicgKyB0aXRsZSA6IHRpdGxlO1xuICAgICAgICBpZiAoaXNSZWxhdGVkKSB7XG4gICAgICAgICAgICAvLyBGb3IgcmVsYXRlZCBjb2x1bW5zLCBzaG9ydGVuIHRoZSB0aXRsZSB0byBsYXN0IHR3byB3b3Jkc1xuICAgICAgICAgICAgZmllbGROYW1lID0gc3BsaXQobW9kaWZpZWRUaXRsZSwgJyAnKTtcbiAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5sZW5ndGggPiAxID8gZmllbGROYW1lW2ZpZWxkTmFtZS5sZW5ndGggLSAyXSArICcgJyArIGZpZWxkTmFtZVtmaWVsZE5hbWUubGVuZ3RoIC0gMV0gOiBmaWVsZE5hbWVbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZE5hbWUgPSBtb2RpZmllZFRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlZk9iaiA9IG9wdGlvbnMuc2V0QmluZGluZ0ZpZWxkID8geydkaXNwbGF5TmFtZSc6IGZpZWxkTmFtZSwgJ2ZpZWxkJzogdGl0bGUsICdyZWxhdGVkVGFibGUnOiByZWxhdGVkVGFibGUsICdyZWxhdGVkRmllbGQnOiByZWxhdGVkRmllbGQgfHwgbW9kaWZpZWRUaXRsZX1cbiAgICAgICAgOiB7J2Rpc3BsYXlOYW1lJzogZmllbGROYW1lLCAncmVsYXRlZFRhYmxlJzogcmVsYXRlZFRhYmxlLCAncmVsYXRlZEZpZWxkJzogcmVsYXRlZEZpZWxkIHx8IG1vZGlmaWVkVGl0bGV9O1xuICAgICAgICAvKmlmIGZpZWxkIGlzIGEgbGVhZiBub2RlLCBwdXNoIGl0IGluIHRoZSBjb2x1bW5EZWZzKi9cbiAgICAgICAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgKGlzQXJyYXkodmFsdWUpICYmICF2YWx1ZVswXSkpIHtcbiAgICAgICAgICAgIC8qaWYgdGhlIGNvbHVtbiBjb3VudGVyIGhhcyByZWFjaGVkIHVwcGVyQm91bmQgcmV0dXJuKi9cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnVwcGVyQm91bmQgJiYgb3B0aW9ucy5jb2x1bW5Db3VudCA9PT0gb3B0aW9ucy51cHBlckJvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uRGVmT2JqLnRlcm1pbmFscy5wdXNoKGRlZk9iaik7XG4gICAgICAgICAgICAvKmluY3JlbWVudCB0aGUgY29sdW1uIGNvdW50ZXIqL1xuICAgICAgICAgICAgb3B0aW9ucy5jb2x1bW5Db3VudCArPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyplbHNlIGZpZWxkIGlzIGFuIG9iamVjdCwgcHJvY2VzcyBpdCByZWN1cnNpdmVseSovXG4gICAgICAgICAgICAvKiBpZiBwYXJlbnQgbm9kZSB0byBiZSBpbmNsdWRlZCwgaW5jbHVkZSBpdCAqL1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29sdW1uQ291bnQgIT09IG9wdGlvbnMudXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgICAgIGNvbHVtbkRlZk9iai5vYmplY3RzLnB1c2goZGVmT2JqKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyogaWYgZmllbGQgaXMgYW4gYXJyYXkgbm9kZSwgcHJvY2VzcyBpdHMgZmlyc3QgY2hpbGQgKi9cbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZVswXSkge1xuICAgICAgICAgICAgICAgIHB1c2hGaWVsZERlZih2YWx1ZVswXSwgY29sdW1uRGVmT2JqLCB0aXRsZSArICdbMF0nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHVzaEZpZWxkRGVmKHZhbHVlLCBjb2x1bW5EZWZPYmosIHRpdGxlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuY29uc3QgZ2V0TWV0YURhdGFGcm9tRGF0YSA9IChkYXRhKSA9PiB7XG4gICAgbGV0IGRhdGFPYmplY3Q7XG4gICAgaWYgKGlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGFbMF0pKSB7XG4gICAgICAgICAgICBkYXRhT2JqZWN0ID0gZ2V0Q2xvbmVkT2JqZWN0KGRhdGFbMF0pO1xuICAgICAgICAgICAgLypMb29wIG92ZXIgdGhlIG9iamVjdCB0byBmaW5kIG91dCBhbnkgbnVsbCB2YWx1ZXMuIElmIGFueSBudWxsIHZhbHVlcyBhcmUgcHJlc2VudCBpbiB0aGUgZmlyc3Qgcm93LCBjaGVjayBhbmQgYXNzaWduIHRoZSB2YWx1ZXMgZnJvbSBvdGhlciByb3cuXG4gICAgICAgICAgICAgKiBBcyBjb2x1bW4gZ2VuZXJhdGlvbiBpcyBkZXBlbmRlbnQgb24gZGF0YSwgZm9yIHJlbGF0ZWQgZmllbGRzIGlmIGZpcnN0IHJvdyB2YWx1ZSBpcyBudWxsLCBjb2x1bW5zIGFyZSBub3QgZ2VuZXJhdGVkLlxuICAgICAgICAgICAgICogVG8gcHJldmVudCB0aGlzLCBjaGVjayB0aGUgZGF0YSBpbiBvdGhlciByb3dzIGFuZCBnZW5lcmF0ZSB0aGUgY29sdW1ucy4gTmV3IGtleXMgZnJvbSBvdGhlcnMgcm93cyBhcmUgYWxzbyBhZGRlZCovXG4gICAgICAgICAgICBmb3JFYWNoKGRhdGEsIChyb3csIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKChpbmRleCArIDEpID49IDEwKSB7IC8vIExpbWl0IHRoZSBkYXRhIHNlYXJjaCB0byBmaXJzdCAxMCByZWNvcmRzXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNzaWduV2l0aChkYXRhT2JqZWN0LCByb3csIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gbnVsbCB8fCBvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFPYmplY3QgPSBkYXRhWzBdO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YU9iamVjdCA9IGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhT2JqZWN0O1xufTtcblxuZXhwb3J0IGNvbnN0IHByZXBhcmVGaWVsZERlZnMgPSAoZGF0YSwgb3B0aW9ucz8pID0+IHtcbiAgICBsZXQgZGF0YU9iamVjdDtcbiAgICBjb25zdCBjb2x1bW5EZWYgPSB7XG4gICAgICAgICAgICAnb2JqZWN0cycgOiBbXSxcbiAgICAgICAgICAgICd0ZXJtaW5hbHMnIDogW11cbiAgICAgICAgfTtcbiAgICAvKmlmIG5vIGRhdGEgcHJvdmlkZWQsIGluaXRpYWxpemUgZGVmYXVsdCBjb2x1bW4gZGVmaW5pdGlvbnMqL1xuICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gW107XG4gICAgfVxuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIG9wdGlvbnMuc2V0QmluZGluZ0ZpZWxkID0gdHJ1ZTtcbiAgICBvcHRpb25zLmNvbHVtbkNvdW50ID0gMDtcbiAgICBkYXRhT2JqZWN0ID0gZ2V0TWV0YURhdGFGcm9tRGF0YShkYXRhKTtcbiAgICAvKmZpcnN0IG9mIHRoZSBtYW55IGRhdGEgb2JqZWN0cyBmcm9tIGdyaWQgZGF0YSovXG4gICAgcHVzaEZpZWxkRGVmKGRhdGFPYmplY3QsIGNvbHVtbkRlZiwgJycsIG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucyB8fCAob3B0aW9ucyAmJiAhb3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5EZWYudGVybWluYWxzO1xuICAgIH1cbiAgICBzd2l0Y2ggKG9wdGlvbnMuZmlsdGVyKSB7XG4gICAgICAgIGNhc2UgJ2FsbCc6XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uRGVmO1xuICAgICAgICBjYXNlICdvYmplY3RzJzpcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5EZWYub2JqZWN0cztcbiAgICAgICAgY2FzZSAndGVybWluYWxzJzpcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5EZWYudGVybWluYWxzO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRGVmO1xufTtcblxuXG4vKipcbiAqIFRvIGdldCBjb250YWluZXIgdGFyZ2V0IGVsZW1lbnQgdG8gYXBwZW5kIHRoZSBsaXN0IGZvciBzZWFyY2ggYW5kIGRhdGVwaWNrZXIgcGFuZWwgd2hlbiBmaWVsZCBwcmVzZW50IGluIGRpYWxvZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3MgPSAoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiAnLndtLWFwcCc7XG5cbiAgICAvLyBCZWxvdyBjb2RlIGlzIG5vdCB3b3JraW5nIHdoZW4gd2UgaGF2ZSBuZXN0ZWQgZGlhbG9ncy5cbiAgICAvLyBOZXN0ZWQgZGlhbG9ncyBjYXNlIHdlIHdpbGwgaGF2ZSAgbXVsdGlwbGUgJy5tb2RhbC1jb250ZW50JyBjbGFzc2VzIG9uIERPTSBkdWUgdG8gdGhhdCBjb250YWluZXIgcG9zaXRpb25zIGlzIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkLlxuICAgIC8vIEJlbG93IGNvZGUgdG8gZml4IHRoZSBpc3N1ZSA9PT4gV01TLTE4NzUxXG4gICAgLy8gQXMgcmVncmVzc2lvbiB3ZSBnb3QgPT0+IFdNUy0xOTgzNVxuXG4gICAgLy8gaWYgKGVsZW1lbnQuY2xvc2VzdCgnLm1vZGFsLWRpYWxvZycpKSB7XG4gICAgLy8gICAgIHJldHVybiAnLm1vZGFsLWNvbnRlbnQnO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICAgIHJldHVybiAnYm9keSc7XG4gICAgLy8gfVxuXG59XG5cbi8qKlxuICogVG8gZXh0cmFjdCB0aGUgVmFyaWFibGUgTmFtZSBmcm9tIGEgV2lkZ2V0J3MgYmluZGRhdGFzb3VyY2UgYXR0cmlidXRlXG4gKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0RGF0YVNvdXJjZU5hbWUgPSAoYmluZERhdGFTb3VyY2UpID0+IHtcbiAgICBpZiAoIWJpbmREYXRhU291cmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGRhdGFTb3VyY2VOYW1lO1xuICAgIGNvbnN0IHBhcnRzID0gYmluZERhdGFTb3VyY2Uuc3BsaXQoJy4nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1swXSA9PT0gJ1ZhcmlhYmxlcycpIHtcbiAgICAgICAgZGF0YVNvdXJjZU5hbWUgPSBwYXJ0c1sxXTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFTb3VyY2VOYW1lO1xufVxuXG5leHBvcnQgY29uc3Qgc2V0Rm9jdXNUcmFwID0gKGNvbnRhaW5lciwgYWxsb3dPdXRzaWRlQ2xpY2ssIHNldFJldHVybkZvY3VzRWxlbWVudD8pID0+IHtcbiAgICByZXR1cm4gY3JlYXRlRm9jdXNUcmFwKGNvbnRhaW5lciwge1xuICAgICAgICBvbkFjdGl2YXRlOiAoKSA9PiBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyksXG4gICAgICAgIG9uRGVhY3RpdmF0ZTogKCkgPT4gY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpLFxuICAgICAgICBhbGxvd091dHNpZGVDbGljazogYWxsb3dPdXRzaWRlQ2xpY2ssXG4gICAgICAgIHNldFJldHVybkZvY3VzOiBzZXRSZXR1cm5Gb2N1c0VsZW1lbnQsXG4gICAgfSk7XG59XG5cbi8qKlxuICogR2V0cyBrZXlib2FyZCBmb2N1c2FibGUgZWxlbWVudHMgd2l0aGluIGEgc3BlY2lmaWVkIGVsZW1lbnRcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH1cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEtleWJvYXJkRm9jdXNhYmxlRWxlbWVudHMgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBlbGVtZW50Tm9kZUxpc3QgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2EsIGJ1dHRvbiwgaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGRldGFpbHMsIGlmcmFtZSwgZW1iZWQsIG9iamVjdCwgc3VtbWFyeSBkaWFsb2csIGF1ZGlvW2NvbnRyb2xzXSwgdmlkZW9bY29udHJvbHNdLCBbY29udGVudGVkaXRhYmxlXScpO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gQXJyYXkuZnJvbShlbGVtZW50Tm9kZUxpc3QpO1xuICAgIHJldHVybiBlbGVtZW50cy5maWx0ZXIoZWwgPT4ge1xuICAgICAgICByZXR1cm4gKCFlbC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiYgIWVsLmhhc0F0dHJpYnV0ZSgnaGlkZGVuJylcbiAgICAgICAgICAgICYmICghZWwuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpIHx8IChlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgJiYgIWVsLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpLnN0YXJ0c1dpdGgoJy0nKSkpKTtcbiAgICB9KTtcbn1cbiJdfQ==
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9iYXNlL3NyYy91dGlscy93aWRnZXQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQ0gsVUFBVSxFQUNWLGVBQWUsRUFDZiwyQkFBMkIsRUFDM0IsV0FBVyxFQUNYLFNBQVMsRUFDVCxjQUFjLEVBQ2QsZUFBZSxFQUNmLFFBQVEsRUFDUixhQUFhLEVBQ2IsYUFBYSxFQUNiLGdCQUFnQixFQUNuQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUV0SCxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsUUFBUTtJQUN2RyxjQUFjLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hJOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQ3BDLElBQUksT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENB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WSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUMzRCxpQkFBaUIsRUFBRSxpQkFBaUI7UUFDcEMsY0FBYyxFQUFFLHFCQUFxQjtLQUN4QyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUE7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxPQUFvQixFQUFFLEVBQUU7SUFDakUsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHlJQUF5SSxDQUFDLENBQUM7SUFDNUwsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM3QyxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDeEIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO2VBQzNELENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtmb3J3YXJkUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgICAkcGFyc2VFeHByLFxuICAgIF9XTV9BUFBfUFJPSkVDVCxcbiAgICBjaGVja0lzQ3VzdG9tUGlwZUV4cHJlc3Npb24sXG4gICAgZGVIeXBoZW5hdGUsXG4gICAgZW5jb2RlVXJsLFxuICAgIEZvcm1XaWRnZXRUeXBlLFxuICAgIGdldENsb25lZE9iamVjdCxcbiAgICBpbml0Q2FwcyxcbiAgICBpc1ZhbGlkV2ViVVJMLFxuICAgIHByZXR0aWZ5TGFiZWwsXG4gICAgc3RyaW5nU3RhcnRzV2l0aFxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge0RpYWxvZ1JlZiwgV2lkZ2V0UmVmfSBmcm9tICcuLi93aWRnZXRzL2ZyYW1ld29yay90eXBlcyc7XG5pbXBvcnQge2NyZWF0ZUZvY3VzVHJhcH0gZnJvbSAnQHdhdmVtYWtlci9mb2N1cy10cmFwJztcbmltcG9ydCB7TmF2Tm9kZX0gZnJvbSBcIi4uL3dpZGdldHMvY29tbW9uL2Jhc2UvZGF0YXNldC1hd2FyZS1uYXYuY29tcG9uZW50XCI7XG5pbXBvcnQge2Fzc2lnbldpdGgsIGZvckVhY2gsIGdldCwgaW5jbHVkZXMsIGlzQXJyYXksIGlzTnVsbCwgaXNPYmplY3QsIGlzU3RyaW5nLCBqb2luLCBzcGxpdCwgdW5pb259IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgREFUQVNFVF9XSURHRVRTID0gbmV3IFNldChbRm9ybVdpZGdldFR5cGUuU0VMRUNULCBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWFNFVCwgRm9ybVdpZGdldFR5cGUuUkFESU9TRVQsXG4gICAgRm9ybVdpZGdldFR5cGUuU1dJVENILCBGb3JtV2lkZ2V0VHlwZS5BVVRPQ09NUExFVEUsIEZvcm1XaWRnZXRUeXBlLkNISVBTLCBGb3JtV2lkZ2V0VHlwZS5UWVBFQUhFQUQsIEZvcm1XaWRnZXRUeXBlLlJBVElOR10pO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXJzZWQsIHVwZGF0ZWQgYm91bmQgZXhwcmVzc2lvblxuICogaWYgdGhlIGV4cHJlc3Npb24gaXMgJFtkYXRhWyRpXVtmaXJzdE5hbWVdXSArICctLScgKyAkW2xhc3ROYW1lXSArICctLScgKyAkWydASURAJ11cbiAqIHJldHVybnMgX18xLmZpcnN0TmFtZSArICctLScgKyBsYXN0TmFtZSArICctLScgKyBfXzFbJ0BJREAnXVxuICovXG5jb25zdCBnZXRVcGRhdGVkRXhwciA9IChleHByOiBzdHJpbmcpID0+IHtcbiAgICBsZXQgdXBkYXRlZCA9ICcnLCBjaCwgbmV4dCwgaSwgaiwgbWF0Y2hDaCwgbWF0Y2hDb3VudCwgaXNRdW90ZWRTdHIsIHN1YlN0ciwgaXNRdW90ZWRTdHJFdmFsdWF0ZWQ7XG5cbiAgICBleHByID0gZXhwci5yZXBsYWNlKC9cXCRcXFtkYXRhXFxbXFwkaVxcXS9nLCAnJFtfXzEnKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBleHByLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNoID0gZXhwcltpXTtcbiAgICAgICAgbmV4dCA9IGV4cHJbaSArIDFdO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBpZiB0aGUgZXhwcmVzc2lvbiBzdGFydHMgd2l0aCAkWywgY2hlY2sgdGhlIG5leHQoY2gpIGNoYXJhY3RlcixcbiAgICAgICAgICogICAgaWYgY2ggaXMgYSBxdW90ZSgnLCBcIikgY2hhbmdlIHRoZSBleHByIHRvIF9fW1xuICAgICAgICAgKiAgICBpZiBjaCBpcyBhIHdoaXRlU3BhY2UsIHJlbW92ZSBpdFxuICAgICAgICAgKiAgICBlbHNlIHJlbW92ZSAkW1xuICAgICAgICAgKi9cbiAgICAgICAgaWYgKGNoID09PSAnJCcgJiYgbmV4dCA9PT0gJ1snKSB7XG4gICAgICAgICAgICBtYXRjaENvdW50ID0gMTtcbiAgICAgICAgICAgIGlzUXVvdGVkU3RyRXZhbHVhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpc1F1b3RlZFN0ciA9IGZhbHNlO1xuXG4gICAgICAgICAgICBmb3IgKGogPSBpICsgMjsgaiA8IGV4cHIubGVuZ3RoOyBqKyspIHtcblxuICAgICAgICAgICAgICAgIG1hdGNoQ2ggPSBleHByW2pdO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoQ2ggPT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWlzUXVvdGVkU3RyRXZhbHVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzUXVvdGVkU3RyID0gZXhwcltqXSA9PT0gJ1wiJyB8fCBleHByW2pdID09PSAnXFwnJztcbiAgICAgICAgICAgICAgICAgICAgaXNRdW90ZWRTdHJFdmFsdWF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaENoID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hDb3VudCsrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hDaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoQ291bnQtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViU3RyID0gZXhwci5zdWJzdHJpbmcoaSArIDIsIGopO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNRdW90ZWRTdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgKz0gJ19fMVsnICsgc3ViU3RyICsgJ10nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCArPSBzdWJTdHI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpID0gajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVwZGF0ZWQgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoZSBwcm92aWRlZCBrZXkgaW4gdGhlIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0T2JqVmFsdWVCeUtleSA9IChvYmo6IGFueSwgc3RyS2V5OiBzdHJpbmcpID0+IHtcbiAgICAvKiBjaGVjayBmb3IgdGhlIGtleS1zdHJpbmcgKi9cbiAgICBpZiAoc3RyS2V5KSB7XG4gICAgICAgIGxldCB2YWw7XG4gICAgICAgIC8qIGNvbnZlcnQgaW5kZXhlcyB0byBwcm9wZXJ0aWVzLCBzbyBhcyB0byB3b3JrIGZvciBldmVuICdrZXkxWzBdLmNoaWxkMScqL1xuICAgICAgICBzdHJLZXkucmVwbGFjZSgvXFxbKFxcdyspXFxdL2csICcuJDEnKS5zcGxpdCgnLicpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIC8vIElmIG9iaiBpcyBudWxsLCB0aGVuIGFzc2lnbiB2YWwgdG8gbnVsbC5cbiAgICAgICAgICAgIHZhbCA9ICh2YWwgJiYgdmFsW2tleV0pIHx8IChpc051bGwob2JqKSA/IG9iaiA6IG9ialtrZXldKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59O1xuXG4vKipcbiAqIHJldHVybnMgdGhlIGRpc3BsYXkgZmllbGQgZGF0YSBmb3IgYW55IGRhdGFzZXQgd2lkZ2V0c1xuICogQmFzZWQgb24gdGhlIGJpbmQgZGlzcGxheSBleHByZXNzaW9uIG9yIGRpc3BsYXkgZXhwcmVzc2lvbiBvciBkaXNwbGF5IG5hbWUsXG4gKiBkYXRhIGlzIGV4dHJhY3RlZCBhbmQgZm9ybWF0dGVkIGZyb20gdGhlIHBhc3NlZCBvcHRpb24gb2JqZWN0XG4gKiBJZiB0aGVyZSBpcyBmaWVsZCBpcyBzcGVjaWZpZWQsIGZpZWxkIHZhbHVlIGlzIG9idGFpbmVkIGZyb20gdGhlIGRhdGFPYmouXG4gKiBJZiBleHByZXNzaW9uIGlzIGdpdmVuLCBldmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24gdmFsdWUuXG4gKiBlbHNlIGNoZWNrIGZvciBiaW5kRXhwcmVzc2lvbiwgZXh0cmFjdCB0aGUgdmFsdWUgZnJvbSB0aGUgZGF0YU9ialxuICovXG5leHBvcnQgY29uc3QgZ2V0RXZhbHVhdGVkRGF0YSA9IChkYXRhT2JqOiBhbnksIG9wdGlvbnM6IGFueSwgY29udGV4dD86IGFueSkgPT4ge1xuICAgIGxldCBleHByZXNzaW9uVmFsdWU7XG4gICAgY29uc3QgZmllbGQgPSBvcHRpb25zLmZpZWxkLFxuICAgICAgICBleHByID0gb3B0aW9ucy5leHByZXNzaW9uLFxuICAgICAgICBiaW5kRXhwciA9IG9wdGlvbnMuYmluZEV4cHJlc3Npb247XG5cbiAgICAvLyBpZiBrZXkgaXMgYm91bmQgZXhwcmVzc2lvblxuICAgIGlmIChiaW5kRXhwcikge1xuICAgICAgICAvLyByZW1vdmUgJ2JpbmQ6JyBwcmVmaXggZnJvbSB0aGUgYm91bmRFeHByZXNzaW9uTmFtZVxuICAgICAgICBleHByZXNzaW9uVmFsdWUgPSBiaW5kRXhwci5yZXBsYWNlKCdiaW5kOicsICcnKTtcblxuICAgICAgICAvLyBGb3IgYmluZCBleHByZXNzaW9uIHBhc3NpbmcgdGhlIGxhc3QgYXJndW1lbnQgdGhhdCB0aGUgb2JqZWN0IG9mIGRhdGFzZXQgaXRlbS5cbiAgICAgICAgLy8gTm90ZTogRm9yIHBhcnNlIGV4cHJlc3Npb24gd2UgYXJlIHNlbmRpbmcgZGF0YU9iaiB3aXRoIHRoZSBwcm9wZXJ5IG5hbWUgXCJfXzFcIiwgd2UgdXNlZCB0aGUgc2FtZSBwcm9wZXJ5IHRvIHNlbmQgdGhlIGxhc3QgYXJndW1lbnQgYXMgZGF0YXNldCBpdGVtXG4gICAgICAgIGlmKGNoZWNrSXNDdXN0b21QaXBlRXhwcmVzc2lvbihleHByZXNzaW9uVmFsdWUpKXtcbiAgICAgICAgICAgIGV4cHJlc3Npb25WYWx1ZSA9IGV4cHJlc3Npb25WYWx1ZSsnOiBfXzEnO1xuICAgICAgICB9XG4gICAgICAgIC8vIHBhcnNlIHRoZSBleHByZXNzaW9uVmFsdWUgZm9yIHJlcGxhY2luZyBhbGwgdGhlIGV4cHJlc3Npb25zIHdpdGggdmFsdWVzIGluIHRoZSBvYmplY3RcbiAgICAgICAgZXhwcmVzc2lvblZhbHVlID0gZ2V0VXBkYXRlZEV4cHIoZXhwcmVzc2lvblZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBleHByZXNzaW9uVmFsdWUgPSBleHByID8gZXhwciA6IGZpZWxkO1xuICAgIH1cblxuICAgIC8vIEhhbmRsaW5nIGZpZWxkIG5hbWUgd2l0aCBzcGVjaWFsIGNoYXJlY3RlcnNcbiAgICAvLyBFeDogZmllbGQgPSBcImYgbmFtZVwiXG4gICAgaWYgKCFiaW5kRXhwciAmJiAhZXhwcikge1xuICAgICAgICByZXR1cm4gZ2V0KGRhdGFPYmosIGZpZWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJHBhcnNlRXhwcihleHByZXNzaW9uVmFsdWUpKGNvbnRleHQsIE9iamVjdC5hc3NpZ24oe30sIGRhdGFPYmosIHtfXzE6IGRhdGFPYmp9KSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBY3RpdmVOYXZJdGVtID0gKGxpbmssIHJvdXRlTmFtZSkgPT4ge1xuICAgIGlmICghbGluayB8fCAhcm91dGVOYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcm91dGVOYW1lID0gcm91dGVOYW1lLmluZGV4T2YoJz8nKSA9PT0gLTEgPyByb3V0ZU5hbWUgOiByb3V0ZU5hbWUuc3Vic3RyaW5nKDAsIHJvdXRlTmFtZS5pbmRleE9mKCc/JykpO1xuICAgIGxpbmsgPSBsaW5rLmluZGV4T2YoJz8nKSA9PT0gLTEgPyBsaW5rIDogbGluay5zdWJzdHJpbmcoMCwgbGluay5pbmRleE9mKCc/JykpO1xuICAgIGNvbnN0IHJvdXRlUmVnZXggPSBuZXcgUmVnRXhwKCdeKCNcXC98IyknICsgcm91dGVOYW1lICsgJyQnKTtcbiAgICByZXR1cm4gcm91dGVSZWdleC50ZXN0KGxpbmspO1xufTtcblxuLyoqXG4qIHJldHVybnMgdHJ1ZSBpZiB0aGUgbWVudSBoYXMgbGluayB0byB0aGUgY3VycmVudCBwYWdlLlxuKiBAcGFyYW0gbm9kZXNcbiogQHBhcmFtIHJvdXRlVXJsXG4qL1xuZXhwb3J0IGNvbnN0IGhhc0xpbmtUb0N1cnJlbnRQYWdlID0gKG5vZGVzOiBBcnJheTxOYXZOb2RlPiwgcm91dGVVcmwpID0+IHtcbiAgICByZXR1cm4gbm9kZXMuc29tZShub2RlID0+IHtcbiAgICAgICAgaWYgKGlzQWN0aXZlTmF2SXRlbShub2RlLmxpbmssIHJvdXRlVXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBoYXNMaW5rVG9DdXJyZW50UGFnZShub2RlLmNoaWxkcmVuLCByb3V0ZVVybCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmRlckJ5IEV4cHJlc3Npb24gYmFzZWQgb24gdGhlICdzb3J0ICdvcHRpb24gaW4gcGFnZWFibGUgb2JqZWN0XG4gKiByZXR1cm5lZCBieSBiYWNrZW5kXG4gKiBAcGFyYW0gcGFnZWFibGVPYmpcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRPcmRlckJ5RXhwciA9IHBhZ2VhYmxlT2JqID0+IHtcbiAgICBwYWdlYWJsZU9iaiA9IHBhZ2VhYmxlT2JqIHx8IFtdO1xuICAgIGNvbnN0IGV4cHJlc3Npb25zICAgICAgID0gW10sXG4gICAgICAgIEtFWV9WQUxfU0VQQVJBVE9SID0gJyAnLFxuICAgICAgICBGSUVMRF9TRVBBUkFUT1IgICA9ICcsJztcbiAgICBmb3JFYWNoKHBhZ2VhYmxlT2JqLCBvYmogPT4ge1xuICAgICAgICBpZiAob2JqLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChvYmoucHJvcGVydHkgKyBLRVlfVkFMX1NFUEFSQVRPUiArIG9iai5kaXJlY3Rpb24udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBqb2luKGV4cHJlc3Npb25zLCBGSUVMRF9TRVBBUkFUT1IpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRGF0YVNldFdpZGdldCA9IHdpZGdldCA9PiB7XG4gICAgcmV0dXJuIERBVEFTRVRfV0lER0VUUy5oYXMod2lkZ2V0KTtcbn07XG5cbi8qVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB1cmwgdG8gdGhlIGltYWdlIGFmdGVyIGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiB1cmwqL1xuZXhwb3J0IGNvbnN0IGdldEltYWdlVXJsID0gKHVybFN0cmluZywgc2hvdWxkRW5jb2RlPywgZGVmYXVsdFVybD8pID0+IHtcbiAgICAvKkluIHN0dWRpbyBtb2RlIGJlZm9yZSBzZXR0aW5nIHBpY3R1cmVzb3VyY2UsIGNoZWNrIGlmIHRoZSBzdHVkaW9Db250cm9sbGVyIGlzIGxvYWRlZCBhbmQgbmV3IHBpY3R1cmVzb3VyY2UgaXMgaW4gJ3N0eWxlcy9pbWFnZXMvJyBwYXRoIG9yIG5vdC5cbiAgICAgKiBXaGVuIHBhZ2UgaXMgcmVmcmVzaGVkLCBsb2FkZXIuZ2lmIHdpbGwgYmUgbG9hZGVkIGZpcnN0IGFuZCBpdCB3aWxsIGJlIGluICdzdHlsZS9pbWFnZXMvJy5cbiAgICAgKiBQcmVwZW5kICdzZXJ2aWNlcy9wcm9qZWN0cy8nICsgJHJvb3RTY29wZS5wcm9qZWN0LmlkICsgJy93ZWIvcmVzb3VyY2VzL2ltYWdlcy9pbWFnZWxpc3RzLycgIGlmIHRoZSBpbWFnZSB1cmwgaXMganVzdCBpbWFnZSBuYW1lIGluIHRoZSBwcm9qZWN0IHJvb3QsXG4gICAgICogYW5kIGlmIHRoZSB1cmwgcG9pbnRpbmcgdG8gcmVzb3VyY2VzL2ltYWdlcy8gdGhlbiAnc2VydmljZXMvcHJvamVjdHMvJyArICRyb290U2NvcGUucHJvamVjdC5pZCArICcvd2ViLycqL1xuICAgIGlmIChpc1ZhbGlkV2ViVVJMKHVybFN0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIHVybFN0cmluZztcbiAgICB9XG5cbiAgICAvLyBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCBmb3IgcGljdHVyZXNvdXJjZSBhc3NpZ24gcGljdHVyZXBsYWNlaG9sZGVyIG9yIGRlZmF1bHQtaW1hZ2VcbiAgICBpZiAoIXVybFN0cmluZykge1xuICAgICAgICBpZiAoaXNWYWxpZFdlYlVSTChkZWZhdWx0VXJsKSkge1xuICAgICAgICAgICAgdXJsU3RyaW5nID0gZGVmYXVsdFVybDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybFN0cmluZyA9ICBfV01fQVBQX1BST0pFQ1QuY2RuVXJsICsgKCBkZWZhdWx0VXJsIHx8ICdyZXNvdXJjZXMvaW1hZ2VzL2ltYWdlbGlzdHMvZGVmYXVsdC1pbWFnZS5wbmcnICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cmxTdHJpbmcgPSBzaG91bGRFbmNvZGUgPyBlbmNvZGVVcmwodXJsU3RyaW5nKSA6IHVybFN0cmluZztcblxuICAgIC8vIGlmIHRoZSByZXNvdXJjZSB0byBiZSBsb2FkZWQgaXMgaW5zaWRlIGEgcHJlZmFiXG4gICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgodXJsU3RyaW5nLCAnc2VydmljZXMvcHJlZmFicycpKSB7XG4gICAgICAgIHJldHVybiB1cmxTdHJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybFN0cmluZztcbn07XG5cbi8qVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdXJsIHRvIHRoZSBiYWNrZ3JvdW5kSW1hZ2UqL1xuZXhwb3J0IGNvbnN0IGdldEJhY2tHcm91bmRJbWFnZVVybCA9ICh1cmxTdHJpbmcpID0+IHtcbiAgICBpZiAodXJsU3RyaW5nID09PSAnJyB8fCB1cmxTdHJpbmcgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4gdXJsU3RyaW5nO1xuICAgIH1cbiAgICByZXR1cm4gJ3VybCgnICsgZ2V0SW1hZ2VVcmwodXJsU3RyaW5nKSArICcpJztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQXMocmVmZXJlbmNlOiBhbnksIGtleTogYW55LCBtdWx0aT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcm92aWRlOiBrZXksXG4gICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IHJlZmVyZW5jZSksXG4gICAgICAgIG11bHRpOiBtdWx0aVxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQXNXaWRnZXRSZWYocmVmZXJlbmNlOiBhbnkpIHtcbiAgICByZXR1cm4gcHJvdmlkZUFzKHJlZmVyZW5jZSwgV2lkZ2V0UmVmKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBc0RpYWxvZ1JlZihyZWZlcmVuY2U6IGFueSkge1xuICAgIHJldHVybiBwcm92aWRlQXMocmVmZXJlbmNlLCBEaWFsb2dSZWYpO1xufVxuXG5leHBvcnQgY29uc3QgTkFWSUdBVElPTl9UWVBFID0ge1xuICAgIEFEVkFOQ0VEOiAnQWR2YW5jZWQnLFxuICAgIEJBU0lDOiAnQmFzaWMnLFxuICAgIENMQVNTSUM6ICdDbGFzc2ljJyxcbiAgICBJTkxJTkU6ICdJbmxpbmUnLFxuICAgIE5PTkU6ICdOb25lJyxcbiAgICBPTkRFTUFORDogJ09uLURlbWFuZCcsXG4gICAgUEFHRVI6ICdQYWdlcicsXG4gICAgU0NST0xMOiAnU2Nyb2xsJ1xufTtcblxuZXhwb3J0IGNvbnN0IElOUFVUTU9ERSA9IHtcbiAgICBGSU5BTkNJQUw6ICdmaW5hbmNpYWwnLFxuICAgIE5BVFVSQUw6ICduYXR1cmFsJ1xufTtcblxuZXhwb3J0IGNvbnN0IEFVVE9DTE9TRV9UWVBFID0ge1xuICAgIE9VVFNJREVDTElDSzogJ291dHNpZGVDbGljaycsXG4gICAgQUxXQVlTOiAnYWx3YXlzJyxcbiAgICBESVNBQkxFRDogJ2Rpc2FibGVkJ1xufVxuXG5leHBvcnQgY29uc3QgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMgPSBbJ09uLURlbWFuZCcsICdTY3JvbGwnXTtcblxuZXhwb3J0IGNvbnN0IGdldFdhdGNoSWRlbnRpZmllciA9ICguLi5hcmdzKSA9PiBhcmdzLmpvaW4oJ18nKTtcblxuY29uc3QgdHlwZXNNYXAgPSB7XG4gICAgbnVtYmVyOiBbJ251bWJlcicsICdpbnRlZ2VyJywgJ2JpZ19pbnRlZ2VyJywgJ3Nob3J0JywgJ2Zsb2F0JywgJ2JpZ19kZWNpbWFsJywgJ2RvdWJsZScsICdsb25nJywgJ2J5dGUnXSxcbiAgICBzdHJpbmc6IFsnc3RyaW5nJywgJ3RleHQnXSxcbiAgICBjaGFyYWN0ZXI6IFsnY2hhcmFjdGVyJ10sXG4gICAgZGF0ZTogWydkYXRlJywgJ3RpbWUnLCAgJ3RpbWVzdGFtcCcsICdkYXRldGltZSddXG59O1xuY29uc3QgbW9kZXMgPSB7XG4gICAgbnVtYmVyOiBbJ2V4YWN0JywgJ25vdGVxdWFscycsICdsZXNzdGhhbicsICdsZXNzdGhhbmVxdWFsJywgJ2dyZWF0ZXJ0aGFuJywgJ2dyZWF0ZXJ0aGFuZXF1YWwnLCAnbnVsbCcsICdpc25vdG51bGwnXSxcbiAgICBzdHJpbmc6IFsnYW55d2hlcmVpZ25vcmVjYXNlJywgJ2FueXdoZXJlJywgJ3N0YXJ0aWdub3JlY2FzZScsICdzdGFydCcsICdlbmRpZ25vcmVjYXNlJywgJ2VuZCcsICdleGFjdGlnbm9yZWNhc2UnLCAnZXhhY3QnLCAnbm90ZXF1YWxzaWdub3JlY2FzZScsICdub3RlcXVhbHMnLCAnbnVsbCcsICdpc25vdG51bGwnLCAnZW1wdHknLCAnaXNub3RlbXB0eScsICdudWxsb3JlbXB0eSddLFxuICAgIGNoYXJhY3RlcjogWydleGFjdGlnbm9yZWNhc2UnLCAnZXhhY3QnLCAnbm90ZXF1YWxzaWdub3JlY2FzZScsICdub3RlcXVhbHMnLCAnbnVsbCcsICdpc25vdG51bGwnLCAnZW1wdHknLCAnaXNub3RlbXB0eScsICdudWxsb3JlbXB0eSddLFxuICAgIGRhdGU6IFsnZXhhY3QnLCAnbGVzc3RoYW4nLCAnbGVzc3RoYW5lcXVhbCcsICdncmVhdGVydGhhbicsICdncmVhdGVydGhhbmVxdWFsJywgJ251bGwnLCAnbm90ZXF1YWxzJywgJ2lzbm90bnVsbCddXG59O1xuY29uc3QgbWF0Y2hNb2RlVHlwZXNNYXAgPSB7XG4gICAgYm9vbGVhbjogWydleGFjdCcsICdudWxsJywgJ2lzbm90bnVsbCddLFxuICAgIGNsb2I6IFtdLFxuICAgIGJsb2I6IFtdXG59O1xuZXhwb3J0IGNvbnN0IGdldE1hdGNoTW9kZVR5cGVzTWFwID0gKG11bHRpTW9kZT8pID0+IHtcbiAgICBpZiAobXVsdGlNb2RlKSB7XG4gICAgICAgIG1vZGVzLm51bWJlci5wdXNoKCdpbicsICdub3RpbicsICdiZXR3ZWVuJyk7XG4gICAgICAgIG1vZGVzLmRhdGUucHVzaCgnYmV0d2VlbicpO1xuICAgICAgICBtb2Rlcy5zdHJpbmcucHVzaCgnaW4nLCAnbm90aW4nKTtcbiAgICAgICAgbW9kZXMuY2hhcmFjdGVyLnB1c2goJ2luJywgJ25vdGluJyk7XG4gICAgfVxuXG4gICAgZm9yRWFjaCh0eXBlc01hcCwgKHR5cGVzLCBwcmltVHlwZSkgPT4ge1xuICAgICAgICBmb3JFYWNoKHR5cGVzLCB0eXBlID0+IHtcbiAgICAgICAgICAgIG1hdGNoTW9kZVR5cGVzTWFwW3R5cGVdID0gbW9kZXNbcHJpbVR5cGVdO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyB0aGlzIGlzIHVzZWQgaW4gZmlsdGVyIGNyaXRlcmlhIHdoZW4gdGhlIHVzZXIgdHlwZXMgdGhlIGNvbHVtbiBuYW1lIG1hbnVhbGx5IGFuZCB3aGVyZSB3ZSBkb250IGtub3cgdGhlIHR5cGUgb2YgdGhlIGNvbHVtblxuICAgIG1hdGNoTW9kZVR5cGVzTWFwWydkZWZhdWx0J10gPSB1bmlvbihtb2Rlc1snbnVtYmVyJ10sIG1vZGVzWydzdHJpbmcnXSwgbW9kZXNbJ2NoYXJhY3RlciddLCBtb2Rlc1snZGF0ZSddLCBtb2Rlc1snZGF0ZSddKTtcbiAgICByZXR1cm4gbWF0Y2hNb2RlVHlwZXNNYXA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWF0Y2hNb2RlTXNncyA9IChhcHBMb2NhbGUpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydCAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX1NUQVJUU19XSVRILFxuICAgICAgICBzdGFydGlnbm9yZWNhc2UgIDogYXBwTG9jYWxlLkxBQkVMX1NUQVJUU19XSVRIX0lHTk9SRUNBU0UsXG4gICAgICAgIGVuZCAgICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfRU5EU19XSVRILFxuICAgICAgICBlbmRpZ25vcmVjYXNlICAgIDogYXBwTG9jYWxlLkxBQkVMX0VORFNfV0lUSF9JR05PUkVDQVNFLFxuICAgICAgICBhbnl3aGVyZSAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0NPTlRBSU5TLFxuICAgICAgICBhbnl3aGVyZWlnbm9yZWNhc2U6IGFwcExvY2FsZS5MQUJFTF9DT05UQUlOU19JR05PUkVDQVNFLFxuICAgICAgICBleGFjdCAgICAgICAgICAgIDogYXBwTG9jYWxlLkxBQkVMX0lTX0VRVUFMX1RPLFxuICAgICAgICBleGFjdGlnbm9yZWNhc2UgIDogYXBwTG9jYWxlLkxBQkVMX0lTX0VRVUFMX1RPX0lHTk9SRUNBU0UsXG4gICAgICAgIG5vdGVxdWFscyAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfTk9UX0VRVUFMX1RPLFxuICAgICAgICBub3RlcXVhbHNpZ25vcmVjYXNlOiBhcHBMb2NhbGUuTEFCRUxfSVNfTk9UX0VRVUFMX1RPX0lHTk9SRUNBU0UsXG4gICAgICAgIGxlc3N0aGFuICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfTEVTU19USEFOLFxuICAgICAgICBsZXNzdGhhbmVxdWFsICAgIDogYXBwTG9jYWxlLkxBQkVMX0xFU1NfVEhBTl9PUl9FUVVBTFNfVE8sXG4gICAgICAgIGdyZWF0ZXJ0aGFuICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfR1JFQVRFUl9USEFOLFxuICAgICAgICBncmVhdGVydGhhbmVxdWFsIDogYXBwTG9jYWxlLkxBQkVMX0dSRUFURVJfVEhBTl9PUl9FUVVBTFNfVE8sXG4gICAgICAgIG51bGwgICAgICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfTlVMTCxcbiAgICAgICAgaXNub3RudWxsICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19OT1RfTlVMTCxcbiAgICAgICAgZW1wdHkgICAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19FTVBUWSxcbiAgICAgICAgaXNub3RlbXB0eSAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JU19OT1RfRU1QVFksXG4gICAgICAgIG51bGxvcmVtcHR5ICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfSVNfTlVMTF9PUl9FTVBUWSxcbiAgICAgICAgaW4gICAgICAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9JTixcbiAgICAgICAgbm90aW4gICAgICAgICAgICA6IGFwcExvY2FsZS5MQUJFTF9OT1RfSU4sXG4gICAgICAgIGJldHdlZW4gICAgICAgICAgOiBhcHBMb2NhbGUuTEFCRUxfQkVUV0VFTlxuICAgIH07XG59O1xuXG4vLyBSZXR1cm5zIGFycmF5IG9mIGNsYXNzZXMgdGhhdCBhcmUgZXZhbHVhdGVkIHRydWUgZm9yIGdpdmVuIG9iamVjdCBvciBhcnJheVxuY29uc3QgZ2V0Q2xhc3Nlc0FycmF5ID0gY2xhc3NWYWwgPT4ge1xuICAgIGxldCBjbGFzc2VzID0gW107XG5cbiAgICBpZiAoaXNBcnJheShjbGFzc1ZhbCkpIHtcbiAgICAgICAgY2xhc3NWYWwuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmNvbmNhdChnZXRDbGFzc2VzQXJyYXkodikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsYXNzZXM7XG4gICAgfVxuICAgIGlmIChpc09iamVjdChjbGFzc1ZhbCkpIHtcbiAgICAgICAgZm9yRWFjaChjbGFzc1ZhbCwgKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuY29uY2F0KGtleS5zcGxpdCgnICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjbGFzc2VzO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb25kaXRpb25hbENsYXNzZXMgPSAobnYsIG92PykgPT4ge1xuICAgIGxldCB0b0FkZDtcbiAgICBsZXQgdG9SZW1vdmU7XG4gICAgLy8gaWYgdGhlIGNvbmRpdGlvbmFsIGNsYXNzIHByb3BlcnR5IGhhcyBhbHJlYWR5IHRvQWRkIGFuZCB0b1JlbW92ZSBhcnJheXMgdGhlbiB0YWtlIHRoYXQgb3RoZXJ3aXNlIGJ1aWxkIHRob3NlIGFycmF5c1xuICAgIGNvbnN0IGNsYXNzVG9BZGQgPSBudi50b0FkZCB8fCBudjtcbiAgICBjb25zdCBjbGFzc1RvUmVtb3ZlID0gbnYudG9SZW1vdmUgfHwgb3Y7XG4gICAgaWYgKGlzT2JqZWN0KG52KSkge1xuICAgICAgICB0b0FkZCA9IGlzQXJyYXkoY2xhc3NUb0FkZCkgPyBjbGFzc1RvQWRkIDogZ2V0Q2xhc3Nlc0FycmF5KGNsYXNzVG9BZGQgfHwgW10pO1xuICAgICAgICB0b1JlbW92ZSA9IGNsYXNzVG9SZW1vdmUgPyAoaXNBcnJheShjbGFzc1RvUmVtb3ZlKSA/IGNsYXNzVG9SZW1vdmUgOiBnZXRDbGFzc2VzQXJyYXkoY2xhc3NUb1JlbW92ZSkpIDogW107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9BZGQgPSBjbGFzc1RvQWRkID8gW2NsYXNzVG9BZGRdIDogW107XG4gICAgICAgIHRvUmVtb3ZlID0gY2xhc3NUb1JlbW92ZSA/IFtjbGFzc1RvUmVtb3ZlXSA6IFtdO1xuICAgIH1cbiAgICByZXR1cm4ge3RvQWRkLCB0b1JlbW92ZX07XG59O1xuXG4vKmhlbHBlciBmdW5jdGlvbiBmb3IgcHJlcGFyZUZpZWxkRGVmcyovXG5jb25zdCBwdXNoRmllbGREZWYgPSAoZGF0YU9iamVjdCwgY29sdW1uRGVmT2JqLCBuYW1lUHJlZml4LCBvcHRpb25zKSA9PiB7XG4gICAgLypsb29wIG92ZXIgdGhlIGZpZWxkcyBpbiB0aGUgZGF0YU9iamVjdCB0byBwcm9jZXNzIHRoZW0qL1xuICAgIGxldCBtb2RpZmllZFRpdGxlLFxuICAgICAgICByZWxhdGVkVGFibGUsXG4gICAgICAgIHJlbGF0ZWRGaWVsZCxcbiAgICAgICAgcmVsYXRlZEluZm8sXG4gICAgICAgIGZpZWxkTmFtZSxcbiAgICAgICAgaXNSZWxhdGVkO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIGZvckVhY2goZGF0YU9iamVjdCwgKHZhbHVlLCB0aXRsZSkgPT4ge1xuICAgICAgICBpZiAoaW5jbHVkZXModGl0bGUsICcuJykpIHtcbiAgICAgICAgICAgIHJlbGF0ZWRJbmZvID0gc3BsaXQodGl0bGUsICcuJyk7XG4gICAgICAgICAgICByZWxhdGVkVGFibGUgPSByZWxhdGVkSW5mb1swXTtcbiAgICAgICAgICAgIHJlbGF0ZWRGaWVsZCA9IHJlbGF0ZWRJbmZvWzFdO1xuICAgICAgICAgICAgaXNSZWxhdGVkICAgID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5ub01vZGlmeVRpdGxlKSB7XG4gICAgICAgICAgICBtb2RpZmllZFRpdGxlID0gdGl0bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcodGl0bGUpKSB7XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRUaXRsZSA9IHByZXR0aWZ5TGFiZWwodGl0bGUpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVkVGl0bGUgPSBkZUh5cGhlbmF0ZShtb2RpZmllZFRpdGxlKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllZFRpdGxlID0gbmFtZVByZWZpeCA/IGluaXRDYXBzKG5hbWVQcmVmaXgpICsgJyAnICsgbW9kaWZpZWRUaXRsZSA6IG1vZGlmaWVkVGl0bGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vZGlmaWVkVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aXRsZSA9IG5hbWVQcmVmaXggPyBuYW1lUHJlZml4ICsgJy4nICsgdGl0bGUgOiB0aXRsZTtcbiAgICAgICAgaWYgKGlzUmVsYXRlZCkge1xuICAgICAgICAgICAgLy8gRm9yIHJlbGF0ZWQgY29sdW1ucywgc2hvcnRlbiB0aGUgdGl0bGUgdG8gbGFzdCB0d28gd29yZHNcbiAgICAgICAgICAgIGZpZWxkTmFtZSA9IHNwbGl0KG1vZGlmaWVkVGl0bGUsICcgJyk7XG4gICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZE5hbWUubGVuZ3RoID4gMSA/IGZpZWxkTmFtZVtmaWVsZE5hbWUubGVuZ3RoIC0gMl0gKyAnICcgKyBmaWVsZE5hbWVbZmllbGROYW1lLmxlbmd0aCAtIDFdIDogZmllbGROYW1lWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGROYW1lID0gbW9kaWZpZWRUaXRsZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZPYmogPSBvcHRpb25zLnNldEJpbmRpbmdGaWVsZCA/IHsnZGlzcGxheU5hbWUnOiBmaWVsZE5hbWUsICdmaWVsZCc6IHRpdGxlLCAncmVsYXRlZFRhYmxlJzogcmVsYXRlZFRhYmxlLCAncmVsYXRlZEZpZWxkJzogcmVsYXRlZEZpZWxkIHx8IG1vZGlmaWVkVGl0bGV9XG4gICAgICAgIDogeydkaXNwbGF5TmFtZSc6IGZpZWxkTmFtZSwgJ3JlbGF0ZWRUYWJsZSc6IHJlbGF0ZWRUYWJsZSwgJ3JlbGF0ZWRGaWVsZCc6IHJlbGF0ZWRGaWVsZCB8fCBtb2RpZmllZFRpdGxlfTtcbiAgICAgICAgLyppZiBmaWVsZCBpcyBhIGxlYWYgbm9kZSwgcHVzaCBpdCBpbiB0aGUgY29sdW1uRGVmcyovXG4gICAgICAgIGlmICghaXNPYmplY3QodmFsdWUpIHx8IChpc0FycmF5KHZhbHVlKSAmJiAhdmFsdWVbMF0pKSB7XG4gICAgICAgICAgICAvKmlmIHRoZSBjb2x1bW4gY291bnRlciBoYXMgcmVhY2hlZCB1cHBlckJvdW5kIHJldHVybiovXG4gICAgICAgICAgICBpZiAob3B0aW9ucy51cHBlckJvdW5kICYmIG9wdGlvbnMuY29sdW1uQ291bnQgPT09IG9wdGlvbnMudXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbHVtbkRlZk9iai50ZXJtaW5hbHMucHVzaChkZWZPYmopO1xuICAgICAgICAgICAgLyppbmNyZW1lbnQgdGhlIGNvbHVtbiBjb3VudGVyKi9cbiAgICAgICAgICAgIG9wdGlvbnMuY29sdW1uQ291bnQgKz0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8qZWxzZSBmaWVsZCBpcyBhbiBvYmplY3QsIHByb2Nlc3MgaXQgcmVjdXJzaXZlbHkqL1xuICAgICAgICAgICAgLyogaWYgcGFyZW50IG5vZGUgdG8gYmUgaW5jbHVkZWQsIGluY2x1ZGUgaXQgKi9cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbHVtbkNvdW50ICE9PSBvcHRpb25zLnVwcGVyQm91bmQpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5EZWZPYmoub2JqZWN0cy5wdXNoKGRlZk9iaik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qIGlmIGZpZWxkIGlzIGFuIGFycmF5IG5vZGUsIHByb2Nlc3MgaXRzIGZpcnN0IGNoaWxkICovXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWVbMF0pIHtcbiAgICAgICAgICAgICAgICBwdXNoRmllbGREZWYodmFsdWVbMF0sIGNvbHVtbkRlZk9iaiwgdGl0bGUgKyAnWzBdJywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hGaWVsZERlZih2YWx1ZSwgY29sdW1uRGVmT2JqLCB0aXRsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbmNvbnN0IGdldE1ldGFEYXRhRnJvbURhdGEgPSAoZGF0YSkgPT4ge1xuICAgIGxldCBkYXRhT2JqZWN0O1xuICAgIGlmIChpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIGlmIChpc09iamVjdChkYXRhWzBdKSkge1xuICAgICAgICAgICAgZGF0YU9iamVjdCA9IGdldENsb25lZE9iamVjdChkYXRhWzBdKTtcbiAgICAgICAgICAgIC8qTG9vcCBvdmVyIHRoZSBvYmplY3QgdG8gZmluZCBvdXQgYW55IG51bGwgdmFsdWVzLiBJZiBhbnkgbnVsbCB2YWx1ZXMgYXJlIHByZXNlbnQgaW4gdGhlIGZpcnN0IHJvdywgY2hlY2sgYW5kIGFzc2lnbiB0aGUgdmFsdWVzIGZyb20gb3RoZXIgcm93LlxuICAgICAgICAgICAgICogQXMgY29sdW1uIGdlbmVyYXRpb24gaXMgZGVwZW5kZW50IG9uIGRhdGEsIGZvciByZWxhdGVkIGZpZWxkcyBpZiBmaXJzdCByb3cgdmFsdWUgaXMgbnVsbCwgY29sdW1ucyBhcmUgbm90IGdlbmVyYXRlZC5cbiAgICAgICAgICAgICAqIFRvIHByZXZlbnQgdGhpcywgY2hlY2sgdGhlIGRhdGEgaW4gb3RoZXIgcm93cyBhbmQgZ2VuZXJhdGUgdGhlIGNvbHVtbnMuIE5ldyBrZXlzIGZyb20gb3RoZXJzIHJvd3MgYXJlIGFsc28gYWRkZWQqL1xuICAgICAgICAgICAgZm9yRWFjaChkYXRhLCAocm93LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoaW5kZXggKyAxKSA+PSAxMCkgeyAvLyBMaW1pdCB0aGUgZGF0YSBzZWFyY2ggdG8gZmlyc3QgMTAgcmVjb3Jkc1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzc2lnbldpdGgoZGF0YU9iamVjdCwgcm93LCAob2JqVmFsdWUsIHNyY1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAob2JqVmFsdWUgPT09IG51bGwgfHwgb2JqVmFsdWUgPT09IHVuZGVmaW5lZCkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhT2JqZWN0ID0gZGF0YVswXTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGFPYmplY3QgPSBkYXRhO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YU9iamVjdDtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmVwYXJlRmllbGREZWZzID0gKGRhdGEsIG9wdGlvbnM/KSA9PiB7XG4gICAgbGV0IGRhdGFPYmplY3Q7XG4gICAgY29uc3QgY29sdW1uRGVmID0ge1xuICAgICAgICAgICAgJ29iamVjdHMnIDogW10sXG4gICAgICAgICAgICAndGVybWluYWxzJyA6IFtdXG4gICAgICAgIH07XG4gICAgLyppZiBubyBkYXRhIHByb3ZpZGVkLCBpbml0aWFsaXplIGRlZmF1bHQgY29sdW1uIGRlZmluaXRpb25zKi9cbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgZGF0YSA9IFtdO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBvcHRpb25zLnNldEJpbmRpbmdGaWVsZCA9IHRydWU7XG4gICAgb3B0aW9ucy5jb2x1bW5Db3VudCA9IDA7XG4gICAgZGF0YU9iamVjdCA9IGdldE1ldGFEYXRhRnJvbURhdGEoZGF0YSk7XG4gICAgLypmaXJzdCBvZiB0aGUgbWFueSBkYXRhIG9iamVjdHMgZnJvbSBncmlkIGRhdGEqL1xuICAgIHB1c2hGaWVsZERlZihkYXRhT2JqZWN0LCBjb2x1bW5EZWYsICcnLCBvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMgfHwgKG9wdGlvbnMgJiYgIW9wdGlvbnMuZmlsdGVyKSkge1xuICAgICAgICByZXR1cm4gY29sdW1uRGVmLnRlcm1pbmFscztcbiAgICB9XG4gICAgc3dpdGNoIChvcHRpb25zLmZpbHRlcikge1xuICAgICAgICBjYXNlICdhbGwnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbkRlZjtcbiAgICAgICAgY2FzZSAnb2JqZWN0cyc6XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uRGVmLm9iamVjdHM7XG4gICAgICAgIGNhc2UgJ3Rlcm1pbmFscyc6XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uRGVmLnRlcm1pbmFscztcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbkRlZjtcbn07XG5cblxuLyoqXG4gKiBUbyBnZXQgY29udGFpbmVyIHRhcmdldCBlbGVtZW50IHRvIGFwcGVuZCB0aGUgbGlzdCBmb3Igc2VhcmNoIGFuZCBkYXRlcGlja2VyIHBhbmVsIHdoZW4gZmllbGQgcHJlc2VudCBpbiBkaWFsb2dcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbnRhaW5lclRhcmdldENsYXNzID0gKGVsZW1lbnQpID0+IHtcbiAgICByZXR1cm4gJy53bS1hcHAnO1xuXG4gICAgLy8gQmVsb3cgY29kZSBpcyBub3Qgd29ya2luZyB3aGVuIHdlIGhhdmUgbmVzdGVkIGRpYWxvZ3MuXG4gICAgLy8gTmVzdGVkIGRpYWxvZ3MgY2FzZSB3ZSB3aWxsIGhhdmUgIG11bHRpcGxlICcubW9kYWwtY29udGVudCcgY2xhc3NlcyBvbiBET00gZHVlIHRvIHRoYXQgY29udGFpbmVyIHBvc2l0aW9ucyBpcyBub3Qgd29ya2luZyBhcyBleHBlY3RlZC5cbiAgICAvLyBCZWxvdyBjb2RlIHRvIGZpeCB0aGUgaXNzdWUgPT0+IFdNUy0xODc1MVxuICAgIC8vIEFzIHJlZ3Jlc3Npb24gd2UgZ290ID09PiBXTVMtMTk4MzVcblxuICAgIC8vIGlmIChlbGVtZW50LmNsb3Nlc3QoJy5tb2RhbC1kaWFsb2cnKSkge1xuICAgIC8vICAgICByZXR1cm4gJy5tb2RhbC1jb250ZW50JztcbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgICByZXR1cm4gJ2JvZHknO1xuICAgIC8vIH1cblxufVxuXG4vKipcbiAqIFRvIGV4dHJhY3QgdGhlIFZhcmlhYmxlIE5hbWUgZnJvbSBhIFdpZGdldCdzIGJpbmRkYXRhc291cmNlIGF0dHJpYnV0ZVxuICovXG5leHBvcnQgY29uc3QgZXh0cmFjdERhdGFTb3VyY2VOYW1lID0gKGJpbmREYXRhU291cmNlKSA9PiB7XG4gICAgaWYgKCFiaW5kRGF0YVNvdXJjZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBkYXRhU291cmNlTmFtZTtcbiAgICBjb25zdCBwYXJ0cyA9IGJpbmREYXRhU291cmNlLnNwbGl0KCcuJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEgJiYgcGFydHNbMF0gPT09ICdWYXJpYWJsZXMnKSB7XG4gICAgICAgIGRhdGFTb3VyY2VOYW1lID0gcGFydHNbMV07XG4gICAgfVxuICAgIHJldHVybiBkYXRhU291cmNlTmFtZTtcbn1cblxuZXhwb3J0IGNvbnN0IHNldEZvY3VzVHJhcCA9IChjb250YWluZXIsIGFsbG93T3V0c2lkZUNsaWNrLCBzZXRSZXR1cm5Gb2N1c0VsZW1lbnQ/KSA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUZvY3VzVHJhcChjb250YWluZXIsIHtcbiAgICAgICAgb25BY3RpdmF0ZTogKCkgPT4gY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScpLFxuICAgICAgICBvbkRlYWN0aXZhdGU6ICgpID0+IGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKSxcbiAgICAgICAgYWxsb3dPdXRzaWRlQ2xpY2s6IGFsbG93T3V0c2lkZUNsaWNrLFxuICAgICAgICBzZXRSZXR1cm5Gb2N1czogc2V0UmV0dXJuRm9jdXNFbGVtZW50LFxuICAgIH0pO1xufVxuXG4vKipcbiAqIEdldHMga2V5Ym9hcmQgZm9jdXNhYmxlIGVsZW1lbnRzIHdpdGhpbiBhIHNwZWNpZmllZCBlbGVtZW50XG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9XG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRLZXlib2FyZEZvY3VzYWJsZUVsZW1lbnRzID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudE5vZGVMaXN0ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhLCBidXR0b24sIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBkZXRhaWxzLCBpZnJhbWUsIGVtYmVkLCBvYmplY3QsIHN1bW1hcnkgZGlhbG9nLCBhdWRpb1tjb250cm9sc10sIHZpZGVvW2NvbnRyb2xzXSwgW2NvbnRlbnRlZGl0YWJsZV0nKTtcbiAgICBjb25zdCBlbGVtZW50cyA9IEFycmF5LmZyb20oZWxlbWVudE5vZGVMaXN0KTtcbiAgICByZXR1cm4gZWxlbWVudHMuZmlsdGVyKGVsID0+IHtcbiAgICAgICAgcmV0dXJuICghZWwuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpICYmICFlbC5oYXNBdHRyaWJ1dGUoJ2hpZGRlbicpXG4gICAgICAgICAgICAmJiAoIWVsLmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSB8fCAoZWwuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpICYmICFlbC5nZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKS5zdGFydHNXaXRoKCctJykpKSk7XG4gICAgfSk7XG59XG4iXX0=
@@ -57,7 +57,7 @@ export const globalPropertyChangeHandler = (component, key, nv) => {
57
57
  ref._parentPrefab_ = component.$element.parent().closest('[prefabname][prefabname!="__self__"]').attr('prefabname') || '';
58
58
  }
59
59
  if (ref._parentPrefab_) {
60
- nv = `./ng-bundle/resources/${ref._parentPrefab_}/${nv}`;
60
+ nv = `./resources/${ref._parentPrefab_}/${nv}`;
61
61
  }
62
62
  else if (propInfo && nv != propInfo.value) {
63
63
  nv = './' + nv;
@@ -78,4 +78,4 @@ export const globalPropertyChangeHandler = (component, key, nv) => {
78
78
  $appDigest();
79
79
  }
80
80
  };
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktY2hhbmdlLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL2Jhc2Uvc3JjL3dpZGdldHMvZnJhbWV3b3JrL3Byb3BlcnR5LWNoYW5nZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRzNILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFckM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLEtBQVUsRUFBRSxJQUFlLEVBQU8sRUFBRTtJQUNqRSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDN0IsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDbEIsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUdGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxTQUF3QixFQUFFLEdBQVcsRUFBRSxFQUFPLEVBQUUsRUFBRTtJQUMxRixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQ3BDLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUxQix1RUFBdUU7SUFDdkUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztRQUN2QixRQUFRLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELG9CQUFvQixFQUFFLENBQUM7SUFFdkIsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUN2RSxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLElBQUksUUFBUSxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzNCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxFQUFFLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNMLENBQUM7SUFFRCwyRkFBMkY7SUFDM0YsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUU1QyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLEVBQUUsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsQ0FBQzthQUFNLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sR0FBRyxHQUFRLFNBQVMsQ0FBQztZQUMzQixJQUFJLEdBQUcsQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ25DLEdBQUcsQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlILENBQUM7WUFDRCxJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDckIsRUFBRSxHQUFHLHlCQUF5QixHQUFHLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzdELENBQUM7aUJBQU0sSUFBRyxRQUFRLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDekMsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7WUFDbkIsQ0FBQztRQUNMLENBQUM7UUFFRCxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZixTQUFTLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO2FBQU0sQ0FBQztZQUVKLElBQUksR0FBRyxLQUFLLGtCQUFrQixFQUFFLENBQUM7Z0JBQzdCLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUVELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ1gsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNMLENBQUM7UUFFRCxVQUFVLEVBQUUsQ0FBQztJQUNqQixDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgJGFwcERpZ2VzdCwgJHVud2F0Y2gsIGlzQ2hhbmdlRnJvbVdhdGNoLCBpc09iamVjdCwgcmVzZXRDaGFuZ2VGcm9tV2F0Y2gsIHRvQm9vbGVhbiwgdG9EaW1lbnNpb24gfSBmcm9tICdAd20vY29yZSc7XG5cbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21tb24vYmFzZS9iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXRXaWRnZXRQcm9wc0J5VHlwZSwgUFJPUF9UWVBFIH0gZnJvbSAnLi93aWRnZXQtcHJvcHMnO1xuaW1wb3J0IHsgaXNTdHlsZSB9IGZyb20gJy4vc3R5bGVyJztcbmltcG9ydCB7IGdldENvbmRpdGlvbmFsQ2xhc3NlcywgZ2V0V2F0Y2hJZGVudGlmaWVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvd2lkZ2V0LXV0aWxzJztcbmltcG9ydCB7IGlzQm9vbGVhbkF0dHIsIGlzRGltZW5zaW9uUHJvcCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7c3RhcnRzV2l0aH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcnNlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdHlwZVxuICogaWYgdGhlIHR5cGUgaXMgUFJPUF9UWVBFLk5VTUJFUiByZXR1cm5zIGEgbnVtYmVyL05hTlxuICogaWYgdGhlIHR5cGUgaXMgUFJPUF9CT09MRUFOIHJldHVybnMgdHJ1ZS9mYWxzZVxuICogZWxzZSByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIHdpdGhvdXQgYW55IHR5cGUgY29udmVyc2lvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHBhcmFtIHtQUk9QX1RZUEV9IHR5cGVcbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmNvbnN0IHBhcnNlVmFsdWUgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHR5cGU6IFBST1BfVFlQRSk6IGFueSA9PiB7XG4gICAgaWYgKHR5cGUgPT09IFBST1BfVFlQRS5CT09MRUFOKSB7XG4gICAgICAgIHJldHVybiB0b0Jvb2xlYW4odmFsdWUsIGlzQm9vbGVhbkF0dHIoa2V5KSAmJiBrZXkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBQUk9QX1RZUEUuTlVNQkVSKSB7XG4gICAgICAgIHJldHVybiArdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxuXG4vKipcbiAqIFdoZW5ldmVyIGEgcHJvcGVydHkgb24gYSBjb21wb25lbnQgY2hhbmdlcyB0aHJvdWdoIGEgcHJveHkgdGhpcyBtZXRob2Qgd2lsbCBiZSB0cmlnZ2VyZWRcbiAqIElmIHRoZSBuZXcgdmFsdWUgaXMgbm90IGZyb20gYSB3YXRjaCwgdGhlIGV4aXN0aW5nIHdhdGNoIG9uIHRoYXQgcGFydGljdWxhciBwcm9wZXJ0eSB3aWxsIGJlIHJlbW92ZWRcbiAqIFRoaXMgbWV0aG9kIGludm9rZXMgdGhlIGRlZmF1bHRQcm9wZXJ0eUNoYW5nZSBoYW5kbGVyIHdoZXJlIHRoZSBjb21tb24gd2lkZ2V0IHByb3BlcnRpZXMgbGlrZSBuYW1lLCBjbGFzcyBhcmUgaGFuZGxlZFxuICogTm90aWZpZXMgdGhlIGNvbXBvbmVudCBhYm91dCB0aGUgc3R5bGUvcHJvcGVydHkgY2hhbmdlXG4gKi9cbmV4cG9ydCBjb25zdCBnbG9iYWxQcm9wZXJ0eUNoYW5nZUhhbmRsZXIgPSAoY29tcG9uZW50OiBCYXNlQ29tcG9uZW50LCBrZXk6IHN0cmluZywgbnY6IGFueSkgPT4ge1xuICAgIGNvbnN0IHdpZGdldElkID0gY29tcG9uZW50LndpZGdldElkO1xuICAgIGNvbnN0IG92ID0gY29tcG9uZW50W2tleV07XG5cbiAgICAvLyBpZiB0aGUgY2hhbmdlIGlzIG5vdCBmcm9tIHRoZSBib3VuZCB3YXRjaCwgcmVtb3ZlIHRoZSBleGlzdGluZyB3YXRjaFxuICAgIGlmICghaXNDaGFuZ2VGcm9tV2F0Y2goKSkge1xuICAgICAgICAkdW53YXRjaChnZXRXYXRjaElkZW50aWZpZXIod2lkZ2V0SWQsIGtleSkpO1xuICAgIH1cblxuICAgIHJlc2V0Q2hhbmdlRnJvbVdhdGNoKCk7XG5cbiAgICBjb25zdCB3aWRnZXRQcm9wcyA9IGdldFdpZGdldFByb3BzQnlUeXBlKGNvbXBvbmVudC5nZXRXaWRnZXRTdWJUeXBlKCkpO1xuICAgIGNvbnN0IHByb3BJbmZvID0gd2lkZ2V0UHJvcHMuZ2V0KGtleSk7XG4gICAgaWYgKHByb3BJbmZvKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBwcm9wSW5mby50eXBlO1xuICAgICAgICBpZiAodHlwZSkge1xuICAgICAgICAgICAgbnYgPSBwYXJzZVZhbHVlKGtleSwgbnYsIHR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSB2YWx1ZSBpbiB0aGUgY29tcG9uZW50IGFuZCB0cmlnZ2VyIGFwcERpZ2VzdCB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlIGluIHRoZSB2YWx1ZVxuICAgIGlmIChudiAhPT0gb3YgfHwgaXNPYmplY3QobnYpIHx8IGlzT2JqZWN0KG92KSkge1xuXG4gICAgICAgIGlmIChpc0RpbWVuc2lvblByb3Aoa2V5KSkge1xuICAgICAgICAgICAgbnYgPSB0b0RpbWVuc2lvbihudik7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhcnRzV2l0aChudiwgJ3Jlc291cmNlcy8nKSkge1xuICAgICAgICAgICAgY29uc3QgcmVmOiBhbnkgPSBjb21wb25lbnQ7XG4gICAgICAgICAgICBpZiAocmVmLl9wYXJlbnRQcmVmYWJfID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZWYuX3BhcmVudFByZWZhYl8gPSBjb21wb25lbnQuJGVsZW1lbnQucGFyZW50KCkuY2xvc2VzdCgnW3ByZWZhYm5hbWVdW3ByZWZhYm5hbWUhPVwiX19zZWxmX19cIl0nKS5hdHRyKCdwcmVmYWJuYW1lJykgfHwgJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmLl9wYXJlbnRQcmVmYWJfKSB7XG4gICAgICAgICAgICAgICAgbnYgPSBgLi9uZy1idW5kbGUvcmVzb3VyY2VzLyR7cmVmLl9wYXJlbnRQcmVmYWJffS8ke252fWA7XG4gICAgICAgICAgICB9IGVsc2UgaWYocHJvcEluZm8gJiYgbnYgIT0gcHJvcEluZm8udmFsdWUpIHtcbiAgICAgICAgICAgICAgICBudiA9ICcuLycgKyBudjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBvbmVudFtrZXldID0gbnY7XG5cbiAgICAgICAgaWYgKGlzU3R5bGUoa2V5KSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm5vdGlmeVN0eWxlQ2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NvbmRpdGlvbmFsY2xhc3MnKSB7XG4gICAgICAgICAgICAgICAgbnYgPSBnZXRDb25kaXRpb25hbENsYXNzZXMobnYsIG92KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHByb3BJbmZvKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50Lm5vdGlmeVByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICB9XG59O1xuIl19
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktY2hhbmdlLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL2Jhc2Uvc3JjL3dpZGdldHMvZnJhbWV3b3JrL3Byb3BlcnR5LWNoYW5nZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBQ1YsUUFBUSxFQUVSLGlCQUFpQixFQUNqQixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxXQUFXLEVBQ2QsTUFBTSxVQUFVLENBQUM7QUFHbEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0QsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVyQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBVSxFQUFFLElBQWUsRUFBTyxFQUFFO0lBQ2pFLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QixPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNsQixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBR0Y7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLFNBQXdCLEVBQUUsR0FBVyxFQUFFLEVBQU8sRUFBRSxFQUFFO0lBQzFGLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFDcEMsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTFCLHVFQUF1RTtJQUN2RSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsb0JBQW9CLEVBQUUsQ0FBQztJQUV2QixNQUFNLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLEVBQUUsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJGQUEyRjtJQUMzRixJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBRTVDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsRUFBRSxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixDQUFDO2FBQU0sSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxHQUFHLEdBQVEsU0FBUyxDQUFDO1lBQzNCLElBQUksR0FBRyxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDbkMsR0FBRyxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUgsQ0FBQztZQUNELElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQixFQUFFLEdBQUcsZUFBZSxHQUFHLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ25ELENBQUM7aUJBQU0sSUFBRyxRQUFRLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDekMsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7WUFDbkIsQ0FBQztRQUNMLENBQUM7UUFFRCxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZixTQUFTLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO2FBQU0sQ0FBQztZQUVKLElBQUksR0FBRyxLQUFLLGtCQUFrQixFQUFFLENBQUM7Z0JBQzdCLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUVELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ1gsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNMLENBQUM7UUFFRCxVQUFVLEVBQUUsQ0FBQztJQUNqQixDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICAkYXBwRGlnZXN0LFxuICAgICR1bndhdGNoLFxuICAgIF9XTV9BUFBfUFJPSkVDVCxcbiAgICBpc0NoYW5nZUZyb21XYXRjaCxcbiAgICBpc09iamVjdCxcbiAgICByZXNldENoYW5nZUZyb21XYXRjaCxcbiAgICB0b0Jvb2xlYW4sXG4gICAgdG9EaW1lbnNpb25cbn0gZnJvbSAnQHdtL2NvcmUnO1xuXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL2Jhc2UvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0V2lkZ2V0UHJvcHNCeVR5cGUsIFBST1BfVFlQRSB9IGZyb20gJy4vd2lkZ2V0LXByb3BzJztcbmltcG9ydCB7IGlzU3R5bGUgfSBmcm9tICcuL3N0eWxlcic7XG5pbXBvcnQgeyBnZXRDb25kaXRpb25hbENsYXNzZXMsIGdldFdhdGNoSWRlbnRpZmllciB9IGZyb20gJy4uLy4uL3V0aWxzL3dpZGdldC11dGlscyc7XG5pbXBvcnQgeyBpc0Jvb2xlYW5BdHRyLCBpc0RpbWVuc2lvblByb3AgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge3N0YXJ0c1dpdGh9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXJzZWQgdmFsdWUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHR5cGVcbiAqIGlmIHRoZSB0eXBlIGlzIFBST1BfVFlQRS5OVU1CRVIgcmV0dXJucyBhIG51bWJlci9OYU5cbiAqIGlmIHRoZSB0eXBlIGlzIFBST1BfQk9PTEVBTiByZXR1cm5zIHRydWUvZmFsc2VcbiAqIGVsc2UgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSB3aXRob3V0IGFueSB0eXBlIGNvbnZlcnNpb25cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSB7UFJPUF9UWVBFfSB0eXBlXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5jb25zdCBwYXJzZVZhbHVlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCB0eXBlOiBQUk9QX1RZUEUpOiBhbnkgPT4ge1xuICAgIGlmICh0eXBlID09PSBQUk9QX1RZUEUuQk9PTEVBTikge1xuICAgICAgICByZXR1cm4gdG9Cb29sZWFuKHZhbHVlLCBpc0Jvb2xlYW5BdHRyKGtleSkgJiYga2V5KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gUFJPUF9UWVBFLk5VTUJFUikge1xuICAgICAgICByZXR1cm4gK3ZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cblxuLyoqXG4gKiBXaGVuZXZlciBhIHByb3BlcnR5IG9uIGEgY29tcG9uZW50IGNoYW5nZXMgdGhyb3VnaCBhIHByb3h5IHRoaXMgbWV0aG9kIHdpbGwgYmUgdHJpZ2dlcmVkXG4gKiBJZiB0aGUgbmV3IHZhbHVlIGlzIG5vdCBmcm9tIGEgd2F0Y2gsIHRoZSBleGlzdGluZyB3YXRjaCBvbiB0aGF0IHBhcnRpY3VsYXIgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkXG4gKiBUaGlzIG1ldGhvZCBpbnZva2VzIHRoZSBkZWZhdWx0UHJvcGVydHlDaGFuZ2UgaGFuZGxlciB3aGVyZSB0aGUgY29tbW9uIHdpZGdldCBwcm9wZXJ0aWVzIGxpa2UgbmFtZSwgY2xhc3MgYXJlIGhhbmRsZWRcbiAqIE5vdGlmaWVzIHRoZSBjb21wb25lbnQgYWJvdXQgdGhlIHN0eWxlL3Byb3BlcnR5IGNoYW5nZVxuICovXG5leHBvcnQgY29uc3QgZ2xvYmFsUHJvcGVydHlDaGFuZ2VIYW5kbGVyID0gKGNvbXBvbmVudDogQmFzZUNvbXBvbmVudCwga2V5OiBzdHJpbmcsIG52OiBhbnkpID0+IHtcbiAgICBjb25zdCB3aWRnZXRJZCA9IGNvbXBvbmVudC53aWRnZXRJZDtcbiAgICBjb25zdCBvdiA9IGNvbXBvbmVudFtrZXldO1xuXG4gICAgLy8gaWYgdGhlIGNoYW5nZSBpcyBub3QgZnJvbSB0aGUgYm91bmQgd2F0Y2gsIHJlbW92ZSB0aGUgZXhpc3Rpbmcgd2F0Y2hcbiAgICBpZiAoIWlzQ2hhbmdlRnJvbVdhdGNoKCkpIHtcbiAgICAgICAgJHVud2F0Y2goZ2V0V2F0Y2hJZGVudGlmaWVyKHdpZGdldElkLCBrZXkpKTtcbiAgICB9XG5cbiAgICByZXNldENoYW5nZUZyb21XYXRjaCgpO1xuXG4gICAgY29uc3Qgd2lkZ2V0UHJvcHMgPSBnZXRXaWRnZXRQcm9wc0J5VHlwZShjb21wb25lbnQuZ2V0V2lkZ2V0U3ViVHlwZSgpKTtcbiAgICBjb25zdCBwcm9wSW5mbyA9IHdpZGdldFByb3BzLmdldChrZXkpO1xuICAgIGlmIChwcm9wSW5mbykge1xuICAgICAgICBjb25zdCB0eXBlID0gcHJvcEluZm8udHlwZTtcbiAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIG52ID0gcGFyc2VWYWx1ZShrZXksIG52LCB0eXBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgdmFsdWUgaW4gdGhlIGNvbXBvbmVudCBhbmQgdHJpZ2dlciBhcHBEaWdlc3Qgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiB0aGUgdmFsdWVcbiAgICBpZiAobnYgIT09IG92IHx8IGlzT2JqZWN0KG52KSB8fCBpc09iamVjdChvdikpIHtcblxuICAgICAgICBpZiAoaXNEaW1lbnNpb25Qcm9wKGtleSkpIHtcbiAgICAgICAgICAgIG52ID0gdG9EaW1lbnNpb24obnYpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0c1dpdGgobnYsICdyZXNvdXJjZXMvJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZjogYW55ID0gY29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKHJlZi5fcGFyZW50UHJlZmFiXyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVmLl9wYXJlbnRQcmVmYWJfID0gY29tcG9uZW50LiRlbGVtZW50LnBhcmVudCgpLmNsb3Nlc3QoJ1twcmVmYWJuYW1lXVtwcmVmYWJuYW1lIT1cIl9fc2VsZl9fXCJdJykuYXR0cigncHJlZmFibmFtZScpIHx8ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlZi5fcGFyZW50UHJlZmFiXykge1xuICAgICAgICAgICAgICAgIG52ID0gYC4vcmVzb3VyY2VzLyR7cmVmLl9wYXJlbnRQcmVmYWJffS8ke252fWA7XG4gICAgICAgICAgICB9IGVsc2UgaWYocHJvcEluZm8gJiYgbnYgIT0gcHJvcEluZm8udmFsdWUpIHtcbiAgICAgICAgICAgICAgICBudiA9ICcuLycgKyBudjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBvbmVudFtrZXldID0gbnY7XG5cbiAgICAgICAgaWYgKGlzU3R5bGUoa2V5KSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm5vdGlmeVN0eWxlQ2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NvbmRpdGlvbmFsY2xhc3MnKSB7XG4gICAgICAgICAgICAgICAgbnYgPSBnZXRDb25kaXRpb25hbENsYXNzZXMobnYsIG92KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHByb3BJbmZvKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50Lm5vdGlmeVByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICB9XG59O1xuIl19
@@ -3,7 +3,7 @@ import { InjectionToken, forwardRef, ElementRef, inject, ViewContainerRef, Injec
3
3
  import * as i1$1 from '@angular/common';
4
4
  import { Location, CommonModule } from '@angular/common';
5
5
  import * as i1 from '@wm/core';
6
- import { FormWidgetType, checkIsCustomPipeExpression, $parseExpr, isValidWebURL, encodeUrl, stringStartsWith, prettifyLabel, deHyphenate, initCaps, getClonedObject, setCSS, isDefined, IDGenerator, toBoolean, isChangeFromWatch, $unwatch, resetChangeFromWatch, isObject as isObject$1, toDimension, $appDigest, removeClass, addClass, setCSSFromObj, App, findParent, setAttr, isMobileApp, switchClass, removeAttr, $parseEvent, $invokeWatchers, $watch, transformFileURI, ComponentType, noop as noop$1, isLargeTabletLandscape, isLargeTabletPortrait, isKitkatDevice, debounce as debounce$1, hasOffsetStr, AbstractI18nService, CURRENCY_INFO, isMobile, AbstractDialogService, DataSource, processFilterExpBindNode, MatchMode, isEqualWithFields, getFormattedDate, isAndroid, isNumberType, DataType, findValueOf, validateAccessRoles, VALIDATOR, isIos } from '@wm/core';
6
+ import { FormWidgetType, checkIsCustomPipeExpression, $parseExpr, isValidWebURL, _WM_APP_PROJECT, encodeUrl, stringStartsWith, prettifyLabel, deHyphenate, initCaps, getClonedObject, setCSS, isDefined, IDGenerator, toBoolean, isChangeFromWatch, $unwatch, resetChangeFromWatch, isObject as isObject$1, toDimension, $appDigest, removeClass, addClass, setCSSFromObj, App, findParent, setAttr, isMobileApp, switchClass, removeAttr, $parseEvent, $invokeWatchers, $watch, transformFileURI, ComponentType, noop as noop$1, isLargeTabletLandscape, isLargeTabletPortrait, isKitkatDevice, debounce as debounce$1, hasOffsetStr, AbstractI18nService, CURRENCY_INFO, isMobile, AbstractDialogService, DataSource, processFilterExpBindNode, MatchMode, isEqualWithFields, getFormattedDate, isAndroid, isNumberType, DataType, findValueOf, validateAccessRoles, VALIDATOR, isIos } from '@wm/core';
7
7
  import { SecurityModule, SecurityService } from '@wm/security';
8
8
  import { createFocusTrap } from '@wavemaker/focus-trap';
9
9
  import { isNull, get, forEach, join, union, isArray, isObject, includes, split, isString, assignWith, startsWith, isFunction, extend, camelCase, map, pickBy, assign, debounce, isDate, isUndefined, filter as filter$1, isEmpty, keys, head, replace, each, intersection, cloneDeep, orderBy, trim, isEqual, uniqWith, uniqBy, sortBy, groupBy, toLower, values, first, omitBy, toUpper, find, concat } from 'lodash-es';
@@ -182,10 +182,12 @@ const getImageUrl = (urlString, shouldEncode, defaultUrl) => {
182
182
  }
183
183
  // If no value is provided for picturesource assign pictureplaceholder or default-image
184
184
  if (!urlString) {
185
- urlString = defaultUrl || './resources/images/imagelists/default-image.png';
186
- }
187
- if (urlString.startsWith('./resources')) {
188
- urlString = './ng-bundle/' + urlString.replace('./', '');
185
+ if (isValidWebURL(defaultUrl)) {
186
+ urlString = defaultUrl;
187
+ }
188
+ else {
189
+ urlString = _WM_APP_PROJECT.cdnUrl + (defaultUrl || 'resources/images/imagelists/default-image.png');
190
+ }
189
191
  }
190
192
  urlString = shouldEncode ? encodeUrl(urlString) : urlString;
191
193
  // if the resource to be loaded is inside a prefab
@@ -803,7 +805,7 @@ const globalPropertyChangeHandler = (component, key, nv) => {
803
805
  ref._parentPrefab_ = component.$element.parent().closest('[prefabname][prefabname!="__self__"]').attr('prefabname') || '';
804
806
  }
805
807
  if (ref._parentPrefab_) {
806
- nv = `./ng-bundle/resources/${ref._parentPrefab_}/${nv}`;
808
+ nv = `./resources/${ref._parentPrefab_}/${nv}`;
807
809
  }
808
810
  else if (propInfo && nv != propInfo.value) {
809
811
  nv = './' + nv;