angular-three-soba 2.0.0-beta.261 → 2.0.0-beta.263

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.
@@ -74,6 +74,7 @@ export function injectEnvironment(options = () => ({}), { injector } = {}) {
74
74
  }
75
75
  return { files, preset, encoding, path, extensions };
76
76
  });
77
+ const files = pick(adjustedOptions, 'files');
77
78
  const resultOptions = computed(() => {
78
79
  const { files } = adjustedOptions();
79
80
  const multiFile = Array.isArray(files);
@@ -117,6 +118,15 @@ export function injectEnvironment(options = () => ({}), { injector } = {}) {
117
118
  const gl = store.select('gl');
118
119
  const texture = signal(null);
119
120
  afterNextRender(() => {
121
+ autoEffect(() => {
122
+ const [{ extension, multiFile }, _files] = [untracked(resultOptions), files()];
123
+ if (extension !== 'webp' && extension !== 'jpg' && extension !== 'jpeg')
124
+ return;
125
+ gl().domElement.addEventListener('webglcontextlost', () => {
126
+ // @ts-expect-error - files is correctly passed
127
+ injectLoader.clear(multiFile ? [_files] : _files);
128
+ }, { once: true });
129
+ });
120
130
  const result = injectLoader(loader,
121
131
  // @ts-expect-error
122
132
  () => {
@@ -136,7 +146,6 @@ export function injectEnvironment(options = () => ({}), { injector } = {}) {
136
146
  extensions(loader);
137
147
  },
138
148
  });
139
- //
140
149
  autoEffect(() => {
141
150
  const loaderResult = result();
142
151
  if (!loaderResult)
@@ -151,9 +160,9 @@ export function injectEnvironment(options = () => ({}), { injector } = {}) {
151
160
  }
152
161
  textureResult.mapping = isCubeMap ? CubeReflectionMapping : EquirectangularReflectionMapping;
153
162
  if ('colorSpace' in textureResult)
154
- textureResult.colorSpace = encoding ?? isCubeMap ? 'srgb' : 'srgb-linear';
163
+ textureResult.colorSpace = encoding ?? (isCubeMap ? 'srgb' : 'srgb-linear');
155
164
  else
156
- textureResult.encoding = encoding ?? isCubeMap ? sRGBEncoding : LinearEncoding;
165
+ textureResult.encoding = encoding ?? (isCubeMap ? sRGBEncoding : LinearEncoding);
157
166
  texture.set(textureResult);
158
167
  });
159
168
  });
@@ -462,4 +471,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
462
471
  changeDetection: ChangeDetectionStrategy.OnPush,
463
472
  }]
464
473
  }] });
465
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxTQUFTLEVBR1QsUUFBUSxFQUNSLFdBQVcsRUFDWCxlQUFlLEVBQ2YsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFDTixPQUFPLEVBQ1AsU0FBUyxFQUNULGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsTUFBTSxFQUNOLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsV0FBVyxFQUNYLEVBQUUsRUFDRixJQUFJLEVBQ0osT0FBTyxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQW1CLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUNOLFVBQVUsRUFDVixxQkFBcUIsRUFFckIsaUJBQWlCLEVBQ2pCLGdDQUFnQyxFQUVoQyxhQUFhLEVBRWIsS0FBSyxFQUVMLHFCQUFxQixHQUNyQixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxTQUFTLEVB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ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHREaXJlY3RpdmUsXG5cdEVmZmVjdFJlZixcblx0RWxlbWVudFJlZixcblx0SW5qZWN0b3IsXG5cdFRlbXBsYXRlUmVmLFxuXHRhZnRlck5leHRSZW5kZXIsXG5cdGNvbXB1dGVkLFxuXHRjb250ZW50Q2hpbGQsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdG91dHB1dCxcblx0c2lnbmFsLFxuXHR1bnRyYWNrZWQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHYWluTWFwTG9hZGVyLCBIRFJKUEdMb2FkZXIgfSBmcm9tICdAbW9ub2dyaWQvZ2Fpbm1hcC1qcyc7XG5pbXBvcnQge1xuXHROZ3RBcmdzLFxuXHROZ3RQb3J0YWwsXG5cdE5ndFBvcnRhbENvbnRlbnQsXG5cdGFwcGx5UHJvcHMsXG5cdGV4dGVuZCxcblx0aW5qZWN0TG9hZGVyLFxuXHRpbmplY3ROZXh0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3RTdG9yZSxcblx0aXMsXG5cdHBpY2ssXG5cdHByZXBhcmUsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTGluZWFyRW5jb2RpbmcsIFRleHR1cmVFbmNvZGluZywgc1JHQkVuY29kaW5nIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL21pc2MnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQge1xuXHRDdWJlQ2FtZXJhLFxuXHRDdWJlUmVmbGVjdGlvbk1hcHBpbmcsXG5cdEN1YmVUZXh0dXJlLFxuXHRDdWJlVGV4dHVyZUxvYWRlcixcblx0RXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmcsXG5cdEV1bGVyLFxuXHRIYWxmRmxvYXRUeXBlLFxuXHRMb2FkZXIsXG5cdFNjZW5lLFxuXHRUZXh0dXJlLFxuXHRXZWJHTEN1YmVSZW5kZXJUYXJnZXQsXG59IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IEVYUkxvYWRlciwgR3JvdW5kUHJvamVjdGVkRW52LCBSR0JFTG9hZGVyIH0gZnJvbSAndGhyZWUtc3RkbGliJztcblxuY29uc3QgQ1VCRU1BUF9ST09UID0gJ2h0dHBzOi8vcmF3LmdpdGhhY2suY29tL3BtbmRycy9kcmVpLWFzc2V0cy80NTYwNjBhMjZiYmViOGZkZjc5MzI2ZjIyNGI2ZDk5YjhiY2NlNzM2L2hkcmkvJztcblxuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UX1BSRVNFVFMgPSB7XG5cdGFwYXJ0bWVudDogJ2xlYm9tYm9fMWsuaGRyJyxcblx0Y2l0eTogJ3BvdHNkYW1lcl9wbGF0el8xay5oZHInLFxuXHRkYXduOiAna2lhcmFfMV9kYXduXzFrLmhkcicsXG5cdGZvcmVzdDogJ2ZvcmVzdF9zbG9wZV8xay5oZHInLFxuXHRsb2JieTogJ3N0X2ZhZ2Fuc19pbnRlcmlvcl8xay5oZHInLFxuXHRuaWdodDogJ2Rpa2hvbG9sb19uaWdodF8xay5oZHInLFxuXHRwYXJrOiAncm9vaXRvdV9wYXJrXzFrLmhkcicsXG5cdHN0dWRpbzogJ3N0dWRpb19zbWFsbF8wM18xay5oZHInLFxuXHRzdW5zZXQ6ICd2ZW5pY2Vfc3Vuc2V0XzFrLmhkcicsXG5cdHdhcmVob3VzZTogJ2VtcHR5X3dhcmVob3VzZV8wMV8xay5oZHInLFxufTtcblxuZXhwb3J0IHR5cGUgTmd0c0Vudmlyb25tZW50UHJlc2V0cyA9IGtleW9mIHR5cGVvZiBFTlZJUk9OTUVOVF9QUkVTRVRTO1xuXG5mdW5jdGlvbiByZXNvbHZlU2NlbmUoc2NlbmU6IFNjZW5lIHwgRWxlbWVudFJlZjxTY2VuZT4pIHtcblx0cmV0dXJuIGlzLnJlZihzY2VuZSkgPyBzY2VuZS5uYXRpdmVFbGVtZW50IDogc2NlbmU7XG59XG5cbmZ1bmN0aW9uIHNldEVudlByb3BzKFxuXHRiYWNrZ3JvdW5kOiBib29sZWFuIHwgJ29ubHknLFxuXHRzY2VuZTogU2NlbmUgfCBFbGVtZW50UmVmPFNjZW5lPiB8IHVuZGVmaW5lZCxcblx0ZGVmYXVsdFNjZW5lOiBTY2VuZSxcblx0dGV4dHVyZTogVGV4dHVyZSxcblx0c2NlbmVQcm9wczogUGFydGlhbDxOZ3RzRW52aXJvbm1lbnRPcHRpb25zPiA9IHt9LFxuKSB7XG5cdHNjZW5lUHJvcHMuYmFja2dyb3VuZEJsdXJyaW5lc3MgPz89IHNjZW5lUHJvcHMuYmx1ciA/PyAwO1xuXHRzY2VuZVByb3BzLmJhY2tncm91bmRJbnRlbnNpdHkgPz89IDE7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpdCdzIG9rLCB3ZSdyZSBzZW5kaW5nIHRocm91Z2ggYXBwbHlQcm9wc1xuXHRzY2VuZVByb3BzLmJhY2tncm91bmRSb3RhdGlvbiA/Pz0gWzAsIDAsIDBdO1xuXHRzY2VuZVByb3BzLmVudmlyb25tZW50SW50ZW5zaXR5ID8/PSAxO1xuXHQvLyBAdHMtZXhwZWN0LWVycm9yIC0gaXQncyBvaywgd2UncmUgc2VuZGluZyB0aHJvdWdoIGFwcGx5UHJvcHNcblx0c2NlbmVQcm9wcy5lbnZpcm9ubWVudFJvdGF0aW9uID8/PSBbMCwgMCwgMF07XG5cblx0Y29uc3QgdGFyZ2V0ID0gcmVzb2x2ZVNjZW5lKHNjZW5lIHx8IGRlZmF1bHRTY2VuZSk7XG5cdGNvbnN0IG9sZGJnID0gdGFyZ2V0LmJhY2tncm91bmQ7XG5cdGNvbnN0IG9sZGVudiA9IHRhcmdldC5lbnZpcm9ubWVudDtcblx0Y29uc3Qgb2xkU2NlbmVQcm9wcyA9IHtcblx0XHRiYWNrZ3JvdW5kQmx1cnJpbmVzczogdGFyZ2V0LmJhY2tncm91bmRCbHVycmluZXNzLFxuXHRcdGJhY2tncm91bmRJbnRlbnNpdHk6IHRhcmdldC5iYWNrZ3JvdW5kSW50ZW5zaXR5LFxuXHRcdGJhY2tncm91bmRSb3RhdGlvbjogdGFyZ2V0LmJhY2tncm91bmRSb3RhdGlvbj8uY2xvbmU/LigpID8/IFswLCAwLCAwXSxcblx0XHRlbnZpcm9ubWVudEludGVuc2l0eTogdGFyZ2V0LmVudmlyb25tZW50SW50ZW5zaXR5LFxuXHRcdGVudmlyb25tZW50Um90YXRpb246IHRhcmdldC5lbnZpcm9ubWVudFJvdGF0aW9uPy5jbG9uZT8uKCkgPz8gWzAsIDAsIDBdLFxuXHR9O1xuXG5cdGlmIChiYWNrZ3JvdW5kICE9PSAnb25seScpIHRhcmdldC5lbnZpcm9ubWVudCA9IHRleHR1cmU7XG5cdGlmIChiYWNrZ3JvdW5kKSB0YXJnZXQuYmFja2dyb3VuZCA9IHRleHR1cmU7XG5cdGFwcGx5UHJvcHModGFyZ2V0LCBzY2VuZVByb3BzKTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmIChiYWNrZ3JvdW5kICE9PSAnb25seScpIHRhcmdldC5lbnZpcm9ubWVudCA9IG9sZGVudjtcblx0XHRpZiAoYmFja2dyb3VuZCkgdGFyZ2V0LmJhY2tncm91bmQgPSBvbGRiZztcblx0XHRhcHBseVByb3BzKHRhcmdldCwgb2xkU2NlbmVQcm9wcyk7XG5cdH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0luamVjdEVudmlyb25tZW50T3B0aW9ucyB7XG5cdGZpbGVzOiBzdHJpbmcgfCBzdHJpbmdbXTtcblx0cGF0aDogc3RyaW5nO1xuXHRwcmVzZXQ/OiBOZ3RzRW52aXJvbm1lbnRQcmVzZXRzO1xuXHRleHRlbnNpb25zPzogKGxvYWRlcjogTG9hZGVyKSA9PiB2b2lkO1xuXHRlbmNvZGluZz86IFRleHR1cmVFbmNvZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEVudmlyb25tZW50KFxuXHRvcHRpb25zOiAoKSA9PiBQYXJ0aWFsPE5ndHNJbmplY3RFbnZpcm9ubWVudE9wdGlvbnM+ID0gKCkgPT4gKHt9KSxcblx0eyBpbmplY3RvciB9OiB7IGluamVjdG9yPzogSW5qZWN0b3IgfSA9IHt9LFxuKSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RFbnZpcm9ubWVudCwgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBhZGp1c3RlZE9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRsZXQgeyBmaWxlcywgcGF0aCwgcHJlc2V0LCBleHRlbnNpb25zLCBlbmNvZGluZyB9ID0gb3B0aW9ucygpO1xuXG5cdFx0XHRpZiAoZmlsZXMgPT0gbnVsbCkge1xuXHRcdFx0XHRmaWxlcyA9IFsnL3B4LnBuZycsICcvbngucG5nJywgJy9weS5wbmcnLCAnL255LnBuZycsICcvcHoucG5nJywgJy9uei5wbmcnXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhdGggPT0gbnVsbCkge1xuXHRcdFx0XHRwYXRoID0gJyc7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwcmVzZXQpIHtcblx0XHRcdFx0aWYgKCEocHJlc2V0IGluIEVOVklST05NRU5UX1BSRVNFVFMpKVxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignUHJlc2V0IG11c3QgYmUgb25lIG9mOiAnICsgT2JqZWN0LmtleXMoRU5WSVJPTk1FTlRfUFJFU0VUUykuam9pbignLCAnKSk7XG5cdFx0XHRcdGZpbGVzID0gRU5WSVJPTk1FTlRfUFJFU0VUU1twcmVzZXRdO1xuXHRcdFx0XHRwYXRoID0gQ1VCRU1BUF9ST09UO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBmaWxlcywgcHJlc2V0LCBlbmNvZGluZywgcGF0aCwgZXh0ZW5zaW9ucyB9O1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgcmVzdWx0T3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHsgZmlsZXMgfSA9IGFkanVzdGVkT3B0aW9ucygpO1xuXHRcdFx0Y29uc3QgbXVsdGlGaWxlID0gQXJyYXkuaXNBcnJheShmaWxlcyk7XG5cblx0XHRcdGNvbnN0IGlzQ3ViZU1hcCA9IG11bHRpRmlsZSAmJiBmaWxlcy5sZW5ndGggPT09IDY7XG5cdFx0XHRjb25zdCBpc0dhaW5tYWluID0gbXVsdGlGaWxlICYmIGZpbGVzLmxlbmd0aCA9PT0gMyAmJiBmaWxlcy5zb21lKChmaWxlKSA9PiBmaWxlLmVuZHNXaXRoKCdqc29uJykpO1xuXHRcdFx0Y29uc3QgZmlyc3RFbnRyeSA9IG11bHRpRmlsZSA/IGZpbGVzWzBdIDogZmlsZXM7XG5cblx0XHRcdGNvbnN0IGV4dGVuc2lvbiA9IGlzQ3ViZU1hcFxuXHRcdFx0XHQ/ICdjdWJlJ1xuXHRcdFx0XHQ6IGlzR2Fpbm1haW5cblx0XHRcdFx0XHQ/ICd3ZWJwJ1xuXHRcdFx0XHRcdDogZmlyc3RFbnRyeS5zdGFydHNXaXRoKCdkYXRhOmFwcGxpY2F0aW9uL2V4cicpXG5cdFx0XHRcdFx0XHQ/ICdleHInXG5cdFx0XHRcdFx0XHQ6IGZpcnN0RW50cnkuc3RhcnRzV2l0aCgnZGF0YTphcHBsaWNhdGlvbi9oZHInKVxuXHRcdFx0XHRcdFx0XHQ/ICdoZHInXG5cdFx0XHRcdFx0XHRcdDogZmlyc3RFbnRyeS5zdGFydHNXaXRoKCdkYXRhOmltYWdlL2pwZWcnKVxuXHRcdFx0XHRcdFx0XHRcdD8gJ2pwZydcblx0XHRcdFx0XHRcdFx0XHQ6IGZpcnN0RW50cnkuc3BsaXQoJy4nKS5wb3AoKT8uc3BsaXQoJz8nKT8uc2hpZnQoKT8udG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiB7IG11bHRpRmlsZSwgZXh0ZW5zaW9uLCBpc0N1YmVNYXAgfTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IGxvYWRlciA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHsgZXh0ZW5zaW9uIH0gPSByZXN1bHRPcHRpb25zKCk7XG5cdFx0XHRjb25zdCBsb2FkZXIgPVxuXHRcdFx0XHRleHRlbnNpb24gPT09ICdjdWJlJ1xuXHRcdFx0XHRcdD8gQ3ViZVRleHR1cmVMb2FkZXJcblx0XHRcdFx0XHQ6IGV4dGVuc2lvbiA9PT0gJ2hkcidcblx0XHRcdFx0XHRcdD8gUkdCRUxvYWRlclxuXHRcdFx0XHRcdFx0OiBleHRlbnNpb24gPT09ICdleHInXG5cdFx0XHRcdFx0XHRcdD8gRVhSTG9hZGVyXG5cdFx0XHRcdFx0XHRcdDogZXh0ZW5zaW9uID09PSAnanBnJyB8fCBleHRlbnNpb24gPT09ICdqcGVnJ1xuXHRcdFx0XHRcdFx0XHRcdD8gKEhEUkpQR0xvYWRlciBhcyB1bmtub3duIGFzIHR5cGVvZiBMb2FkZXIpXG5cdFx0XHRcdFx0XHRcdFx0OiBleHRlbnNpb24gPT09ICd3ZWJwJ1xuXHRcdFx0XHRcdFx0XHRcdFx0PyAoR2Fpbk1hcExvYWRlciBhcyB1bmtub3duIGFzIHR5cGVvZiBMb2FkZXIpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IG51bGw7XG5cblx0XHRcdGlmICghbG9hZGVyKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignaW5qZWN0RW52aXJvbm1lbnQ6IFVucmVjb2duaXplZCBmaWxlIGV4dGVuc2lvbjogJyArIGV4dGVuc2lvbik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBsb2FkZXIgYXMgdHlwZW9mIExvYWRlcjtcblx0XHR9KTtcblxuXHRcdGNvbnN0IGFzc2VydGVkSW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXHRcdGNvbnN0IGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cdFx0Y29uc3Qgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRcdGNvbnN0IGdsID0gc3RvcmUuc2VsZWN0KCdnbCcpO1xuXG5cdFx0Y29uc3QgdGV4dHVyZSA9IHNpZ25hbDxUZXh0dXJlIHwgQ3ViZVRleHR1cmUgfCBudWxsPihudWxsKTtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gaW5qZWN0TG9hZGVyKFxuXHRcdFx0XHRsb2FkZXIsXG5cdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3Jcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgZmlsZXMgfSA9IGFkanVzdGVkT3B0aW9ucygpO1xuXHRcdFx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KGZpbGVzKSA/IFtmaWxlc10gOiBmaWxlcztcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGluamVjdG9yOiBhc3NlcnRlZEluamVjdG9yLFxuXHRcdFx0XHRcdGV4dGVuc2lvbnM6IChsb2FkZXIpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHsgZXh0ZW5zaW9ucywgcGF0aCB9ID0gYWRqdXN0ZWRPcHRpb25zKCk7XG5cdFx0XHRcdFx0XHRjb25zdCB7IGV4dGVuc2lvbiB9ID0gcmVzdWx0T3B0aW9ucygpO1xuXHRcdFx0XHRcdFx0aWYgKGV4dGVuc2lvbiA9PT0gJ3dlYnAnIHx8IGV4dGVuc2lvbiA9PT0gJ2pwZycgfHwgZXh0ZW5zaW9uID09PSAnanBlZycpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIEdhaW5tYXAgcmVxdWlyZXMgYSByZW5kZXJlclxuXHRcdFx0XHRcdFx0XHRsb2FkZXIuc2V0UmVuZGVyZXIoZ2woKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxvYWRlci5zZXRQYXRoPy4ocGF0aCk7XG5cdFx0XHRcdFx0XHRpZiAoZXh0ZW5zaW9ucykgZXh0ZW5zaW9ucyhsb2FkZXIpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXHRcdFx0Ly9cblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBsb2FkZXJSZXN1bHQgPSByZXN1bHQoKTtcblx0XHRcdFx0aWYgKCFsb2FkZXJSZXN1bHQpIHJldHVybjtcblxuXHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgbXVsdGlGaWxlLCBleHRlbnNpb24sIGlzQ3ViZU1hcCB9ID0gcmVzdWx0T3B0aW9ucygpO1xuXHRcdFx0XHRcdGNvbnN0IHsgZW5jb2RpbmcgfSA9IGFkanVzdGVkT3B0aW9ucygpO1xuXG5cdFx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvclxuXHRcdFx0XHRcdGxldCB0ZXh0dXJlUmVzdWx0ID0gKG11bHRpRmlsZSA/IGxvYWRlclJlc3VsdFswXSA6IGxvYWRlclJlc3VsdCkgYXMgVGV4dHVyZSB8IEN1YmVUZXh0dXJlO1xuXG5cdFx0XHRcdFx0aWYgKGV4dGVuc2lvbiA9PT0gJ2pwZycgfHwgZXh0ZW5zaW9uID09PSAnanBlZycgfHwgZXh0ZW5zaW9uID09PSAnd2VicCcpIHtcblx0XHRcdFx0XHRcdHRleHR1cmVSZXN1bHQgPSAodGV4dHVyZVJlc3VsdCBhcyBhbnkpLnJlbmRlclRhcmdldD8udGV4dHVyZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0ZXh0dXJlUmVzdWx0Lm1hcHBpbmcgPSBpc0N1YmVNYXAgPyBDdWJlUmVmbGVjdGlvbk1hcHBpbmcgOiBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZztcblxuXHRcdFx0XHRcdGlmICgnY29sb3JTcGFjZScgaW4gdGV4dHVyZVJlc3VsdClcblx0XHRcdFx0XHRcdCh0ZXh0dXJlUmVzdWx0IGFzIGFueSkuY29sb3JTcGFjZSA9IGVuY29kaW5nID8/IGlzQ3ViZU1hcCA/ICdzcmdiJyA6ICdzcmdiLWxpbmVhcic7XG5cdFx0XHRcdFx0ZWxzZSAodGV4dHVyZVJlc3VsdCBhcyBhbnkpLmVuY29kaW5nID0gZW5jb2RpbmcgPz8gaXNDdWJlTWFwID8gc1JHQkVuY29kaW5nIDogTGluZWFyRW5jb2Rpbmc7XG5cblx0XHRcdFx0XHR0ZXh0dXJlLnNldCh0ZXh0dXJlUmVzdWx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiB0ZXh0dXJlLmFzUmVhZG9ubHkoKTtcblx0fSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0Vudmlyb25tZW50T3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8Tmd0c0luamVjdEVudmlyb25tZW50T3B0aW9ucz4ge1xuXHRmcmFtZXM/OiBudW1iZXI7XG5cdG5lYXI/OiBudW1iZXI7XG5cdGZhcj86IG51bWJlcjtcblx0cmVzb2x1dGlvbj86IG51bWJlcjtcblx0YmFja2dyb3VuZD86IGJvb2xlYW4gfCAnb25seSc7XG5cblx0LyoqIGRlcHJlY2F0ZWQsIHVzZSBiYWNrZ3JvdW5kQmx1cnJpbmVzcyAqL1xuXHRibHVyPzogbnVtYmVyO1xuXHRiYWNrZ3JvdW5kQmx1cnJpbmVzcz86IG51bWJlcjtcblx0YmFja2dyb3VuZEludGVuc2l0eT86IG51bWJlcjtcblx0YmFja2dyb3VuZFJvdGF0aW9uPzogRXVsZXI7XG5cdGVudmlyb25tZW50SW50ZW5zaXR5PzogbnVtYmVyO1xuXHRlbnZpcm9ubWVudFJvdGF0aW9uPzogRXVsZXI7XG5cblx0bWFwPzogVGV4dHVyZTtcblx0cHJlc2V0PzogTmd0c0Vudmlyb25tZW50UHJlc2V0cztcblx0c2NlbmU/OiBTY2VuZSB8IEVsZW1lbnRSZWY8U2NlbmU+O1xuXHRncm91bmQ/OiBib29sZWFuIHwgeyByYWRpdXM/OiBudW1iZXI7IGhlaWdodD86IG51bWJlcjsgc2NhbGU/OiBudW1iZXIgfTtcbn1cblxuY29uc3QgZGVmYXVsdEJhY2tncm91bmQ6IE5ndHNFbnZpcm9ubWVudE9wdGlvbnMgPSB7XG5cdGJhY2tncm91bmQ6IGZhbHNlLFxufTtcblxuQERpcmVjdGl2ZSh7IHN0YW5kYWxvbmU6IHRydWUsIHNlbGVjdG9yOiAnbmd0cy1lbnZpcm9ubWVudC1tYXAnIH0pXG5leHBvcnQgY2xhc3MgTmd0c0Vudmlyb25tZW50TWFwIHtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRCYWNrZ3JvdW5kLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdEJhY2tncm91bmQpIH0pO1xuXHRlbnZTZXQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuXHRhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdGRlZmF1bHRTY2VuZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzY2VuZScpO1xuXG5cdGVudkNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB7XG5cdFx0XHRiYWNrZ3JvdW5kID0gZmFsc2UsXG5cdFx0XHRzY2VuZSxcblx0XHRcdGJsdXIsXG5cdFx0XHRiYWNrZ3JvdW5kQmx1cnJpbmVzcyxcblx0XHRcdGJhY2tncm91bmRJbnRlbnNpdHksXG5cdFx0XHRiYWNrZ3JvdW5kUm90YXRpb24sXG5cdFx0XHRlbnZpcm9ubWVudEludGVuc2l0eSxcblx0XHRcdGVudmlyb25tZW50Um90YXRpb24sXG5cdFx0fSA9IHRoaXMub3B0aW9ucygpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGJhY2tncm91bmQsXG5cdFx0XHRzY2VuZSxcblx0XHRcdGJsdXIsXG5cdFx0XHRiYWNrZ3JvdW5kQmx1cnJpbmVzcyxcblx0XHRcdGJhY2tncm91bmRJbnRlbnNpdHksXG5cdFx0XHRiYWNrZ3JvdW5kUm90YXRpb24sXG5cdFx0XHRlbnZpcm9ubWVudEludGVuc2l0eSxcblx0XHRcdGVudmlyb25tZW50Um90YXRpb24sXG5cdFx0fTtcblx0fSk7XG5cblx0bWFwID0gcGljayh0aGlzLm9wdGlvbnMsICdtYXAnKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0dGhpcy5hdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWFwID0gdGhpcy5tYXAoKTtcblx0XHRcdFx0aWYgKCFtYXApIHJldHVybjtcblx0XHRcdFx0Y29uc3QgeyBiYWNrZ3JvdW5kID0gZmFsc2UsIHNjZW5lLCAuLi5jb25maWcgfSA9IHRoaXMuZW52Q29uZmlnKCk7XG5cdFx0XHRcdGNvbnN0IGNsZWFudXAgPSBzZXRFbnZQcm9wcyhiYWNrZ3JvdW5kLCBzY2VuZSwgdGhpcy5kZWZhdWx0U2NlbmUoKSwgbWFwLCBjb25maWcpO1xuXHRcdFx0XHR0aGlzLmVudlNldC5lbWl0KCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiBjbGVhbnVwKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSwgc2VsZWN0b3I6ICduZ3RzLWVudmlyb25tZW50LWN1YmUnIH0pXG5leHBvcnQgY2xhc3MgTmd0c0Vudmlyb25tZW50Q3ViZSB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0QmFja2dyb3VuZCwgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRCYWNrZ3JvdW5kKSB9KTtcblx0ZW52U2V0ID0gb3V0cHV0PHZvaWQ+KCk7XG5cblx0YXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0c3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRkZWZhdWx0U2NlbmUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2NlbmUnKTtcblxuXHRlbnZDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0YmFja2dyb3VuZCA9IGZhbHNlLFxuXHRcdFx0c2NlbmUsXG5cdFx0XHRibHVyLFxuXHRcdFx0YmFja2dyb3VuZEJsdXJyaW5lc3MsXG5cdFx0XHRiYWNrZ3JvdW5kSW50ZW5zaXR5LFxuXHRcdFx0YmFja2dyb3VuZFJvdGF0aW9uLFxuXHRcdFx0ZW52aXJvbm1lbnRJbnRlbnNpdHksXG5cdFx0XHRlbnZpcm9ubWVudFJvdGF0aW9uLFxuXHRcdH0gPSB0aGlzLm9wdGlvbnMoKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRiYWNrZ3JvdW5kLFxuXHRcdFx0c2NlbmUsXG5cdFx0XHRibHVyLFxuXHRcdFx0YmFja2dyb3VuZEJsdXJyaW5lc3MsXG5cdFx0XHRiYWNrZ3JvdW5kSW50ZW5zaXR5LFxuXHRcdFx0YmFja2dyb3VuZFJvdGF0aW9uLFxuXHRcdFx0ZW52aXJvbm1lbnRJbnRlbnNpdHksXG5cdFx0XHRlbnZpcm9ubWVudFJvdGF0aW9uLFxuXHRcdH07XG5cdH0pO1xuXG5cdGVudmlyb25tZW50T3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB7IGVuY29kaW5nLCBwcmVzZXQsIGZpbGVzLCBwYXRoLCBleHRlbnNpb25zIH0gPSB0aGlzLm9wdGlvbnMoKTtcblx0XHRyZXR1cm4geyBlbmNvZGluZywgcHJlc2V0LCBmaWxlcywgcGF0aCwgZXh0ZW5zaW9ucyB9O1xuXHR9KTtcblx0dGV4dHVyZSA9IGluamVjdEVudmlyb25tZW50KHRoaXMuZW52aXJvbm1lbnRPcHRpb25zKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0dGhpcy5hdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgdGV4dHVyZSA9IHRoaXMudGV4dHVyZSgpO1xuXHRcdFx0XHRpZiAoIXRleHR1cmUpIHJldHVybjtcblx0XHRcdFx0Y29uc3QgeyBiYWNrZ3JvdW5kID0gZmFsc2UsIHNjZW5lLCAuLi5jb25maWcgfSA9IHRoaXMuZW52Q29uZmlnKCk7XG5cdFx0XHRcdGNvbnN0IGNsZWFudXAgPSBzZXRFbnZQcm9wcyhiYWNrZ3JvdW5kLCBzY2VuZSwgdGhpcy5kZWZhdWx0U2NlbmUoKSwgdGV4dHVyZSwgY29uZmlnKTtcblx0XHRcdFx0dGhpcy5lbnZTZXQuZW1pdCgpO1xuXHRcdFx0XHRyZXR1cm4gKCkgPT4gY2xlYW51cCgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1lbnZpcm9ubWVudC1wb3J0YWwnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtcG9ydGFsIFtjb250YWluZXJdPVwidmlydHVhbFNjZW5lXCI+XG5cdFx0XHQ8bmctdGVtcGxhdGUgcG9ydGFsQ29udGVudCBsZXQtaW5qZWN0b3I9XCJpbmplY3RvclwiIGxldC1jb250YWluZXI9XCJjb250YWluZXJcIj5cblx0XHRcdFx0PG5nLWNvbnRhaW5lclxuXHRcdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnQoKVwiXG5cdFx0XHRcdFx0W25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiXG5cdFx0XHRcdFx0W25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaW5qZWN0b3IsIGNvbnRhaW5lciB9XCJcblx0XHRcdFx0Lz5cblxuXHRcdFx0XHQ8bmd0LWN1YmUtY2FtZXJhICNjdWJlQ2FtZXJhICphcmdzPVwiY2FtZXJhQXJncygpXCIgLz5cblxuXHRcdFx0XHRAaWYgKGZpbGVzKCkgfHwgcHJlc2V0KCkpIHtcblx0XHRcdFx0XHQ8bmd0cy1lbnZpcm9ubWVudC1jdWJlIFtvcHRpb25zXT1cImVudkN1YmVPcHRpb25zKClcIiAoZW52U2V0KT1cIm9uRW52U2V0KClcIiAvPlxuXHRcdFx0XHR9IEBlbHNlIGlmIChtYXAoKSkge1xuXHRcdFx0XHRcdDxuZ3RzLWVudmlyb25tZW50LW1hcCBbb3B0aW9uc109XCJlbnZNYXBPcHRpb25zKClcIiAoZW52U2V0KT1cIm9uRW52U2V0KClcIiAvPlxuXHRcdFx0XHR9XG5cdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdDwvbmd0LXBvcnRhbD5cblx0YCxcblx0aW1wb3J0czogW05ndHNFbnZpcm9ubWVudEN1YmUsIE5ndHNFbnZpcm9ubWVudE1hcCwgTmd0QXJncywgTmd0UG9ydGFsLCBOZ3RQb3J0YWxDb250ZW50LCBOZ1RlbXBsYXRlT3V0bGV0XSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0Vudmlyb25tZW50UG9ydGFsIHtcblx0cHJpdmF0ZSBkZWZhdWx0T3B0aW9uczogTmd0c0Vudmlyb25tZW50T3B0aW9ucyA9IHtcblx0XHRuZWFyOiAxLFxuXHRcdGZhcjogMTAwMCxcblx0XHRyZXNvbHV0aW9uOiAyNTYsXG5cdFx0ZnJhbWVzOiAxLFxuXHRcdGJhY2tncm91bmQ6IGZhbHNlLFxuXHR9O1xuXHRvcHRpb25zID0gaW5wdXQodGhpcy5kZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKHRoaXMuZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRjb250ZW50ID0gaW5wdXQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG5cdGVudlNldCA9IG91dHB1dDx2b2lkPigpO1xuXG5cdHByaXZhdGUgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdHByaXZhdGUgZGVmYXVsdFNjZW5lID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cdHByaXZhdGUgZ2wgPSB0aGlzLnN0b3JlLnNlbGVjdCgnZ2wnKTtcblxuXHRjYW1lcmEgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxDdWJlQ2FtZXJhPj4oJ2N1YmVDYW1lcmEnKTtcblxuXHRtYXAgPSBwaWNrKHRoaXMub3B0aW9ucywgJ21hcCcpO1xuXHRmaWxlcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnZmlsZXMnKTtcblx0cHJlc2V0ID0gcGljayh0aGlzLm9wdGlvbnMsICdwcmVzZXQnKTtcblx0cHJpdmF0ZSBleHRlbnNpb25zID0gcGljayh0aGlzLm9wdGlvbnMsICdleHRlbnNpb25zJyk7XG5cdHByaXZhdGUgcGF0aCA9IHBpY2sodGhpcy5vcHRpb25zLCAncGF0aCcpO1xuXG5cdGVudk1hcE9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiAoeyBiYWNrZ3JvdW5kOiB0cnVlLCBtYXA6IHRoaXMubWFwKCksIGV4dGVuc2lvbnM6IHRoaXMuZXh0ZW5zaW9ucygpIH0pKTtcblx0ZW52Q3ViZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiAoe1xuXHRcdGJhY2tncm91bmQ6IHRydWUsXG5cdFx0ZmlsZXM6IHRoaXMuZmlsZXMoKSxcblx0XHRwcmVzZXQ6IHRoaXMucHJlc2V0KCksXG5cdFx0ZXh0ZW5zaW9uczogdGhpcy5leHRlbnNpb25zKCksXG5cdFx0cGF0aDogdGhpcy5wYXRoKCksXG5cdH0pKTtcblxuXHRwcml2YXRlIG5lYXIgPSBwaWNrKHRoaXMub3B0aW9ucywgJ25lYXInKTtcblx0cHJpdmF0ZSBmYXIgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2ZhcicpO1xuXHRwcml2YXRlIHJlc29sdXRpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ3Jlc29sdXRpb24nKTtcblx0cHJpdmF0ZSBmYm8gPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgZmJvID0gbmV3IFdlYkdMQ3ViZVJlbmRlclRhcmdldCh0aGlzLnJlc29sdXRpb24oKSk7XG5cdFx0ZmJvLnRleHR1cmUudHlwZSA9IEhhbGZGbG9hdFR5cGU7XG5cdFx0cmV0dXJuIGZibztcblx0fSk7XG5cblx0Y2FtZXJhQXJncyA9IGNvbXB1dGVkKCgpID0+IFt0aGlzLm5lYXIoKSwgdGhpcy5mYXIoKSwgdGhpcy5mYm8oKV0pO1xuXG5cdHZpcnR1YWxTY2VuZSA9IHByZXBhcmUobmV3IFNjZW5lKCkpO1xuXG5cdHByaXZhdGUgc2V0RW52RWZmZWN0UmVmPzogRWZmZWN0UmVmO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IEN1YmVDYW1lcmEgfSk7XG5cblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0dGhpcy5hdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgW2ZpbGVzLCBwcmVzZXQsIG1hcF0gPSBbdGhpcy5maWxlcygpLCB0aGlzLnByZXNldCgpLCB0aGlzLm1hcCgpXTtcblx0XHRcdFx0Ly8gTk9URTogd2hlbiB0aGVyZSdzIG5vbmUgb2YgdGhpcywgd2UgZG9uJ3QgcmVuZGVyIGN1YmUgb3IgbWFwIHNvIHdlIG5lZWQgdG8gc2V0RW52IGhlcmVcblx0XHRcdFx0aWYgKCEhZmlsZXMgfHwgISFwcmVzZXQgfHwgISFtYXApIHJldHVybjtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0UG9ydGFsRW52KCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGxldCBjb3VudCA9IDE7XG5cdFx0aW5qZWN0TmV4dEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBmcmFtZXMgPSB0aGlzLm9wdGlvbnMoKS5mcmFtZXM7XG5cdFx0XHRpZiAoZnJhbWVzID09PSBJbmZpbml0eSB8fCAoZnJhbWVzICE9IG51bGwgJiYgY291bnQgPCBmcmFtZXMpKSB7XG5cdFx0XHRcdGNvbnN0IGNhbWVyYSA9IHRoaXMuY2FtZXJhKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRcdGlmIChjYW1lcmEpIHtcblx0XHRcdFx0XHRjYW1lcmEudXBkYXRlKHRoaXMuZ2woKSwgdGhpcy52aXJ0dWFsU2NlbmUpO1xuXHRcdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8vIE5PVEU6IHdlIHVzZSBvbkVudlNldCBoZXJlIHRvIGVuc3VyZSB0aGF0IEVudmlyb25tZW50Q3ViZSBvciBFbnZpcm9ubWVudE1hcCBzZXRzIHRoZSBlbnYgYmVmb3JlIHRoZSBwb3J0YWxcblx0b25FbnZTZXQoKSB7XG5cdFx0aWYgKHRoaXMuc2V0RW52RWZmZWN0UmVmKSB0aGlzLnNldEVudkVmZmVjdFJlZi5kZXN0cm95KCk7XG5cdFx0dGhpcy5zZXRFbnZFZmZlY3RSZWYgPSB0aGlzLmF1dG9FZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFBvcnRhbEVudigpO1xuXHRcdFx0fSxcblx0XHRcdHsgbWFudWFsQ2xlYW51cDogdHJ1ZSB9LFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIHNldFBvcnRhbEVudigpIHtcblx0XHRjb25zdCBjYW1lcmEgPSB0aGlzLmNhbWVyYSgpO1xuXHRcdGlmICghY2FtZXJhPy5uYXRpdmVFbGVtZW50KSByZXR1cm47XG5cblx0XHRjb25zdCBbXG5cdFx0XHR7XG5cdFx0XHRcdGZyYW1lcyxcblx0XHRcdFx0YmFja2dyb3VuZCA9IGZhbHNlLFxuXHRcdFx0XHRzY2VuZSxcblx0XHRcdFx0Ymx1cixcblx0XHRcdFx0YmFja2dyb3VuZEJsdXJyaW5lc3MsXG5cdFx0XHRcdGJhY2tncm91bmRJbnRlbnNpdHksXG5cdFx0XHRcdGJhY2tncm91bmRSb3RhdGlvbixcblx0XHRcdFx0ZW52aXJvbm1lbnRJbnRlbnNpdHksXG5cdFx0XHRcdGVudmlyb25tZW50Um90YXRpb24sXG5cdFx0XHR9LFxuXHRcdFx0Z2wsXG5cdFx0XHRmYm8sXG5cdFx0XHRkZWZhdWx0U2NlbmUsXG5cdFx0XSA9IFt0aGlzLm9wdGlvbnMoKSwgdGhpcy5nbCgpLCB0aGlzLmZibygpLCB0aGlzLmRlZmF1bHRTY2VuZSgpXTtcblxuXHRcdGlmIChmcmFtZXMgPT09IDEpIGNhbWVyYS5uYXRpdmVFbGVtZW50LnVwZGF0ZShnbCwgdGhpcy52aXJ0dWFsU2NlbmUpO1xuXHRcdGNvbnN0IGNsZWFudXAgPSBzZXRFbnZQcm9wcyhiYWNrZ3JvdW5kLCBzY2VuZSwgZGVmYXVsdFNjZW5lLCBmYm8udGV4dHVyZSwge1xuXHRcdFx0Ymx1cixcblx0XHRcdGJhY2tncm91bmRCbHVycmluZXNzLFxuXHRcdFx0YmFja2dyb3VuZEludGVuc2l0eSxcblx0XHRcdGJhY2tncm91bmRSb3RhdGlvbixcblx0XHRcdGVudmlyb25tZW50SW50ZW5zaXR5LFxuXHRcdFx0ZW52aXJvbm1lbnRSb3RhdGlvbixcblx0XHR9KTtcblx0XHR0aGlzLmVudlNldC5lbWl0KCk7XG5cdFx0cmV0dXJuIGNsZWFudXA7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1lbnZpcm9ubWVudC1ncm91bmQnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3RzLWVudmlyb25tZW50LW1hcCBbb3B0aW9uc109XCJlbnZNYXBPcHRpb25zKClcIiAoZW52U2V0KT1cImVudlNldC5lbWl0KClcIiAvPlxuXHRcdDxuZ3QtZ3JvdW5kLXByb2plY3RlZC1lbnYgKmFyZ3M9XCJhcmdzKClcIiBbc2NhbGVdPVwic2NhbGUoKVwiIFtoZWlnaHRdPVwiaGVpZ2h0KClcIiBbcmFkaXVzXT1cInJhZGl1cygpXCIgLz5cblx0YCxcblx0aW1wb3J0czogW05ndHNFbnZpcm9ubWVudE1hcCwgTmd0QXJnc10sXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNFbnZpcm9ubWVudEdyb3VuZCB7XG5cdG9wdGlvbnMgPSBpbnB1dCh7fSBhcyBOZ3RzRW52aXJvbm1lbnRPcHRpb25zKTtcblx0ZW52U2V0ID0gb3V0cHV0PHZvaWQ+KCk7XG5cblx0cHJpdmF0ZSBkZWZhdWx0VGV4dHVyZSA9IGluamVjdEVudmlyb25tZW50KHRoaXMub3B0aW9ucyk7XG5cdHByaXZhdGUgdGV4dHVyZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpLm1hcCB8fCB0aGlzLmRlZmF1bHRUZXh0dXJlKCkpO1xuXG5cdGFyZ3MgPSBjb21wdXRlZCgoKSA9PiBbdGhpcy50ZXh0dXJlKCldKTtcblx0aGVpZ2h0ID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMub3B0aW9ucygpLmdyb3VuZCBhcyBhbnkpPy5oZWlnaHQpO1xuXHRyYWRpdXMgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5vcHRpb25zKCkuZ3JvdW5kIGFzIGFueSk/LnJhZGl1cyk7XG5cdHNjYWxlID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMub3B0aW9ucygpLmdyb3VuZCBhcyBhbnkpPy5zY2FsZSA/PyAxMDAwKTtcblxuXHRlbnZNYXBPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHsgbWFwOiBfLCAuLi5vcHRpb25zIH0gPSB0aGlzLm9wdGlvbnMoKTtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihvcHRpb25zLCB7IG1hcDogdGhpcy50ZXh0dXJlKCkgfSkgYXMgTmd0c0Vudmlyb25tZW50T3B0aW9ucztcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdW5kUHJvamVjdGVkRW52IH0pO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtZW52aXJvbm1lbnQnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdEBpZiAob3B0aW9ucygpLmdyb3VuZCkge1xuXHRcdFx0PG5ndHMtZW52aXJvbm1lbnQtZ3JvdW5kIFtvcHRpb25zXT1cIm9wdGlvbnMoKVwiIChlbnZTZXQpPVwiZW52U2V0LmVtaXQoKVwiIC8+XG5cdFx0fSBAZWxzZSBpZiAob3B0aW9ucygpLm1hcCkge1xuXHRcdFx0PG5ndHMtZW52aXJvbm1lbnQtbWFwIFtvcHRpb25zXT1cIm9wdGlvbnMoKVwiIChlbnZTZXQpPVwiZW52U2V0LmVtaXQoKVwiIC8+XG5cdFx0fSBAZWxzZSBpZiAoY29udGVudCgpKSB7XG5cdFx0XHQ8bmd0cy1lbnZpcm9ubWVudC1wb3J0YWwgW29wdGlvbnNdPVwib3B0aW9ucygpXCIgW2NvbnRlbnRdPVwiJGFueShjb250ZW50KCkpXCIgKGVudlNldCk9XCJlbnZTZXQuZW1pdCgpXCIgLz5cblx0XHR9IEBlbHNlIHtcblx0XHRcdDxuZ3RzLWVudmlyb25tZW50LWN1YmUgW29wdGlvbnNdPVwib3B0aW9ucygpXCIgKGVudlNldCk9XCJlbnZTZXQuZW1pdCgpXCIgLz5cblx0XHR9XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RzRW52aXJvbm1lbnRDdWJlLCBOZ3RzRW52aXJvbm1lbnRNYXAsIE5ndHNFbnZpcm9ubWVudFBvcnRhbCwgTmd0c0Vudmlyb25tZW50R3JvdW5kXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0Vudmlyb25tZW50IHtcblx0b3B0aW9ucyA9IGlucHV0KHt9IGFzIE5ndHNFbnZpcm9ubWVudE9wdGlvbnMpO1xuXHRjb250ZW50ID0gY29udGVudENoaWxkKFRlbXBsYXRlUmVmKTtcblx0ZW52U2V0ID0gb3V0cHV0PHZvaWQ+KCk7XG59XG4iXX0=
474
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxTQUFTLEVBR1QsUUFBUSxFQUNSLFdBQVcsRUFDWCxlQUFlLEVBQ2YsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFDTixPQUFPLEVBQ1AsU0FBUyxFQUNULGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsTUFBTSxFQUNOLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsV0FBVyxFQUNYLEVBQUUsRUFDRixJQUFJLEVBQ0osT0FBTyxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQW1CLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUNOLFVBQVUsRUFDVixxQkFBcUIsRUFFckIsaUJBQWlCLEVBQ2pCLGdDQUFnQyxFQUVoQyxhQUFhLEVBRWIsS0FBSyxFQUVMLHFCQUFxQixHQUNyQixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxTQUFTLEVB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UUFtQkMsWUFBTyxHQUFHLEtBQUssQ0FBQyxFQUE0QixDQUFDLENBQUM7UUFDOUMsWUFBTyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxXQUFNLEdBQUcsTUFBTSxFQUFRLENBQUM7S0FDeEI7OEdBSlksZUFBZTtrR0FBZixlQUFlLDBSQUVKLFdBQVcsZ0VBakJ4Qjs7Ozs7Ozs7OztFQVVULDREQXBQVyxtQkFBbUIsNEdBakRuQixrQkFBa0IsMkdBK0hsQixxQkFBcUIseUhBbUlyQixxQkFBcUI7OzJGQXdDckIsZUFBZTtrQkFsQjNCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7OztFQVVUO29CQUNELE9BQU8sRUFBRSxDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDO29CQUNoRyxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHREaXJlY3RpdmUsXG5cdEVmZmVjdFJlZixcblx0RWxlbWVudFJlZixcblx0SW5qZWN0b3IsXG5cdFRlbXBsYXRlUmVmLFxuXHRhZnRlck5leHRSZW5kZXIsXG5cdGNvbXB1dGVkLFxuXHRjb250ZW50Q2hpbGQsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdG91dHB1dCxcblx0c2lnbmFsLFxuXHR1bnRyYWNrZWQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHYWluTWFwTG9hZGVyLCBIRFJKUEdMb2FkZXIgfSBmcm9tICdAbW9ub2dyaWQvZ2Fpbm1hcC1qcyc7XG5pbXBvcnQge1xuXHROZ3RBcmdzLFxuXHROZ3RQb3J0YWwsXG5cdE5ndFBvcnRhbENvbnRlbnQsXG5cdGFwcGx5UHJvcHMsXG5cdGV4dGVuZCxcblx0aW5qZWN0TG9hZGVyLFxuXHRpbmplY3ROZXh0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3RTdG9yZSxcblx0aXMsXG5cdHBpY2ssXG5cdHByZXBhcmUsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTGluZWFyRW5jb2RpbmcsIFRleHR1cmVFbmNvZGluZywgc1JHQkVuY29kaW5nIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL21pc2MnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQge1xuXHRDdWJlQ2FtZXJhLFxuXHRDdWJlUmVmbGVjdGlvbk1hcHBpbmcsXG5cdEN1YmVUZXh0dXJlLFxuXHRDdWJlVGV4dHVyZUxvYWRlcixcblx0RXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmcsXG5cdEV1bGVyLFxuXHRIYWxmRmxvYXRUeXBlLFxuXHRMb2FkZXIsXG5cdFNjZW5lLFxuXHRUZXh0dXJlLFxuXHRXZWJHTEN1YmVSZW5kZXJUYXJnZXQsXG59IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IEVYUkxvYWRlciwgR3JvdW5kUHJvamVjdGVkRW52LCBSR0JFTG9hZGVyIH0gZnJvbSAndGhyZWUtc3RkbGliJztcblxuY29uc3QgQ1VCRU1BUF9ST09UID0gJ2h0dHBzOi8vcmF3LmdpdGhhY2suY29tL3BtbmRycy9kcmVpLWFzc2V0cy80NTYwNjBhMjZiYmViOGZkZjc5MzI2ZjIyNGI2ZDk5YjhiY2NlNzM2L2hkcmkvJztcblxuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UX1BSRVNFVFMgPSB7XG5cdGFwYXJ0bWVudDogJ2xlYm9tYm9fMWsuaGRyJyxcblx0Y2l0eTogJ3BvdHNkYW1lcl9wbGF0el8xay5oZHInLFxuXHRkYXduOiAna2lhcmFfMV9kYXduXzFrLmhkcicsXG5cdGZvcmVzdDogJ2ZvcmVzdF9zbG9wZV8xay5oZHInLFxuXHRsb2JieTogJ3N0X2ZhZ2Fuc19pbnRlcmlvcl8xay5oZHInLFxuXHRuaWdodDogJ2Rpa2hvbG9sb19uaWdodF8xay5oZHInLFxuXHRwYXJrOiAncm9vaXRvdV9wYXJrXzFrLmhkcicsXG5cdHN0dWRpbzogJ3N0dWRpb19zbWFsbF8wM18xay5oZHInLFxuXHRzdW5zZXQ6ICd2ZW5pY2Vfc3Vuc2V0XzFrLmhkcicsXG5cdHdhcmVob3VzZTogJ2VtcHR5X3dhcmVob3VzZV8wMV8xay5oZHInLFxufTtcblxuZXhwb3J0IHR5cGUgTmd0c0Vudmlyb25tZW50UHJlc2V0cyA9IGtleW9mIHR5cGVvZiBFTlZJUk9OTUVOVF9QUkVTRVRTO1xuXG5mdW5jdGlvbiByZXNvbHZlU2NlbmUoc2NlbmU6IFNjZW5lIHwgRWxlbWVudFJlZjxTY2VuZT4pIHtcblx0cmV0dXJuIGlzLnJlZihzY2VuZSkgPyBzY2VuZS5uYXRpdmVFbGVtZW50IDogc2NlbmU7XG59XG5cbmZ1bmN0aW9uIHNldEVudlByb3BzKFxuXHRiYWNrZ3JvdW5kOiBib29sZWFuIHwgJ29ubHknLFxuXHRzY2VuZTogU2NlbmUgfCBFbGVtZW50UmVmPFNjZW5lPiB8IHVuZGVmaW5lZCxcblx0ZGVmYXVsdFNjZW5lOiBTY2VuZSxcblx0dGV4dHVyZTogVGV4dHVyZSxcblx0c2NlbmVQcm9wczogUGFydGlhbDxOZ3RzRW52aXJvbm1lbnRPcHRpb25zPiA9IHt9LFxuKSB7XG5cdHNjZW5lUHJvcHMuYmFja2dyb3VuZEJsdXJyaW5lc3MgPz89IHNjZW5lUHJvcHMuYmx1ciA/PyAwO1xuXHRzY2VuZVByb3BzLmJhY2tncm91bmRJbnRlbnNpdHkgPz89IDE7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpdCdzIG9rLCB3ZSdyZSBzZW5kaW5nIHRocm91Z2ggYXBwbHlQcm9wc1xuXHRzY2VuZVByb3BzLmJhY2tncm91bmRSb3RhdGlvbiA/Pz0gWzAsIDAsIDBdO1xuXHRzY2VuZVByb3BzLmVudmlyb25tZW50SW50ZW5zaXR5ID8/PSAxO1xuXHQvLyBAdHMtZXhwZWN0LWVycm9yIC0gaXQncyBvaywgd2UncmUgc2VuZGluZyB0aHJvdWdoIGFwcGx5UHJvcHNcblx0c2NlbmVQcm9wcy5lbnZpcm9ubWVudFJvdGF0aW9uID8/PSBbMCwgMCwgMF07XG5cblx0Y29uc3QgdGFyZ2V0ID0gcmVzb2x2ZVNjZW5lKHNjZW5lIHx8IGRlZmF1bHRTY2VuZSk7XG5cdGNvbnN0IG9sZGJnID0gdGFyZ2V0LmJhY2tncm91bmQ7XG5cdGNvbnN0IG9sZGVudiA9IHRhcmdldC5lbnZpcm9ubWVudDtcblx0Y29uc3Qgb2xkU2NlbmVQcm9wcyA9IHtcblx0XHRiYWNrZ3JvdW5kQmx1cnJpbmVzczogdGFyZ2V0LmJhY2tncm91bmRCbHVycmluZXNzLFxuXHRcdGJhY2tncm91bmRJbnRlbnNpdHk6IHRhcmdldC5iYWNrZ3JvdW5kSW50ZW5zaXR5LFxuXHRcdGJhY2tncm91bmRSb3RhdGlvbjogdGFyZ2V0LmJhY2tncm91bmRSb3RhdGlvbj8uY2xvbmU/LigpID8/IFswLCAwLCAwXSxcblx0XHRlbnZpcm9ubWVudEludGVuc2l0eTogdGFyZ2V0LmVudmlyb25tZW50SW50ZW5zaXR5LFxuXHRcdGVudmlyb25tZW50Um90YXRpb246IHRhcmdldC5lbnZpcm9ubWVudFJvdGF0aW9uPy5jbG9uZT8uKCkgPz8gWzAsIDAsIDBdLFxuXHR9O1xuXG5cdGlmIChiYWNrZ3JvdW5kICE9PSAnb25seScpIHRhcmdldC5lbnZpcm9ubWVudCA9IHRleHR1cmU7XG5cdGlmIChiYWNrZ3JvdW5kKSB0YXJnZXQuYmFja2dyb3VuZCA9IHRleHR1cmU7XG5cdGFwcGx5UHJvcHModGFyZ2V0LCBzY2VuZVByb3BzKTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmIChiYWNrZ3JvdW5kICE9PSAnb25seScpIHRhcmdldC5lbnZpcm9ubWVudCA9IG9sZGVudjtcblx0XHRpZiAoYmFja2dyb3VuZCkgdGFyZ2V0LmJhY2tncm91bmQgPSBvbGRiZztcblx0XHRhcHBseVByb3BzKHRhcmdldCwgb2xkU2NlbmVQcm9wcyk7XG5cdH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0luamVjdEVudmlyb25tZW50T3B0aW9ucyB7XG5cdGZpbGVzOiBzdHJpbmcgfCBzdHJpbmdbXTtcblx0cGF0aDogc3RyaW5nO1xuXHRwcmVzZXQ/OiBOZ3RzRW52aXJvbm1lbnRQcmVzZXRzO1xuXHRleHRlbnNpb25zPzogKGxvYWRlcjogTG9hZGVyKSA9PiB2b2lkO1xuXHRlbmNvZGluZz86IFRleHR1cmVFbmNvZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEVudmlyb25tZW50KFxuXHRvcHRpb25zOiAoKSA9PiBQYXJ0aWFsPE5ndHNJbmplY3RFbnZpcm9ubWVudE9wdGlvbnM+ID0gKCkgPT4gKHt9KSxcblx0eyBpbmplY3RvciB9OiB7IGluamVjdG9yPzogSW5qZWN0b3IgfSA9IHt9LFxuKSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RFbnZpcm9ubWVudCwgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBhZGp1c3RlZE9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRsZXQgeyBmaWxlcywgcGF0aCwgcHJlc2V0LCBleHRlbnNpb25zLCBlbmNvZGluZyB9ID0gb3B0aW9ucygpO1xuXG5cdFx0XHRpZiAoZmlsZXMgPT0gbnVsbCkge1xuXHRcdFx0XHRmaWxlcyA9IFsnL3B4LnBuZycsICcvbngucG5nJywgJy9weS5wbmcnLCAnL255LnBuZycsICcvcHoucG5nJywgJy9uei5wbmcnXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhdGggPT0gbnVsbCkge1xuXHRcdFx0XHRwYXRoID0gJyc7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwcmVzZXQpIHtcblx0XHRcdFx0aWYgKCEocHJlc2V0IGluIEVOVklST05NRU5UX1BSRVNFVFMpKVxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignUHJlc2V0IG11c3QgYmUgb25lIG9mOiAnICsgT2JqZWN0LmtleXMoRU5WSVJPTk1FTlRfUFJFU0VUUykuam9pbignLCAnKSk7XG5cdFx0XHRcdGZpbGVzID0gRU5WSVJPTk1FTlRfUFJFU0VUU1twcmVzZXRdO1xuXHRcdFx0XHRwYXRoID0gQ1VCRU1BUF9ST09UO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBmaWxlcywgcHJlc2V0LCBlbmNvZGluZywgcGF0aCwgZXh0ZW5zaW9ucyB9O1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgZmlsZXMgPSBwaWNrKGFkanVzdGVkT3B0aW9ucywgJ2ZpbGVzJyk7XG5cblx0XHRjb25zdCByZXN1bHRPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgeyBmaWxlcyB9ID0gYWRqdXN0ZWRPcHRpb25zKCk7XG5cdFx0XHRjb25zdCBtdWx0aUZpbGUgPSBBcnJheS5pc0FycmF5KGZpbGVzKTtcblxuXHRcdFx0Y29uc3QgaXNDdWJlTWFwID0gbXVsdGlGaWxlICYmIGZpbGVzLmxlbmd0aCA9PT0gNjtcblx0XHRcdGNvbnN0IGlzR2Fpbm1haW4gPSBtdWx0aUZpbGUgJiYgZmlsZXMubGVuZ3RoID09PSAzICYmIGZpbGVzLnNvbWUoKGZpbGUpID0+IGZpbGUuZW5kc1dpdGgoJ2pzb24nKSk7XG5cdFx0XHRjb25zdCBmaXJzdEVudHJ5ID0gbXVsdGlGaWxlID8gZmlsZXNbMF0gOiBmaWxlcztcblxuXHRcdFx0Y29uc3QgZXh0ZW5zaW9uID0gaXNDdWJlTWFwXG5cdFx0XHRcdD8gJ2N1YmUnXG5cdFx0XHRcdDogaXNHYWlubWFpblxuXHRcdFx0XHRcdD8gJ3dlYnAnXG5cdFx0XHRcdFx0OiBmaXJzdEVudHJ5LnN0YXJ0c1dpdGgoJ2RhdGE6YXBwbGljYXRpb24vZXhyJylcblx0XHRcdFx0XHRcdD8gJ2V4cidcblx0XHRcdFx0XHRcdDogZmlyc3RFbnRyeS5zdGFydHNXaXRoKCdkYXRhOmFwcGxpY2F0aW9uL2hkcicpXG5cdFx0XHRcdFx0XHRcdD8gJ2hkcidcblx0XHRcdFx0XHRcdFx0OiBmaXJzdEVudHJ5LnN0YXJ0c1dpdGgoJ2RhdGE6aW1hZ2UvanBlZycpXG5cdFx0XHRcdFx0XHRcdFx0PyAnanBnJ1xuXHRcdFx0XHRcdFx0XHRcdDogZmlyc3RFbnRyeS5zcGxpdCgnLicpLnBvcCgpPy5zcGxpdCgnPycpPy5zaGlmdCgpPy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIHsgbXVsdGlGaWxlLCBleHRlbnNpb24sIGlzQ3ViZU1hcCB9O1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgbG9hZGVyID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgeyBleHRlbnNpb24gfSA9IHJlc3VsdE9wdGlvbnMoKTtcblx0XHRcdGNvbnN0IGxvYWRlciA9XG5cdFx0XHRcdGV4dGVuc2lvbiA9PT0gJ2N1YmUnXG5cdFx0XHRcdFx0PyBDdWJlVGV4dHVyZUxvYWRlclxuXHRcdFx0XHRcdDogZXh0ZW5zaW9uID09PSAnaGRyJ1xuXHRcdFx0XHRcdFx0PyBSR0JFTG9hZGVyXG5cdFx0XHRcdFx0XHQ6IGV4dGVuc2lvbiA9PT0gJ2V4cidcblx0XHRcdFx0XHRcdFx0PyBFWFJMb2FkZXJcblx0XHRcdFx0XHRcdFx0OiBleHRlbnNpb24gPT09ICdqcGcnIHx8IGV4dGVuc2lvbiA9PT0gJ2pwZWcnXG5cdFx0XHRcdFx0XHRcdFx0PyAoSERSSlBHTG9hZGVyIGFzIHVua25vd24gYXMgdHlwZW9mIExvYWRlcilcblx0XHRcdFx0XHRcdFx0XHQ6IGV4dGVuc2lvbiA9PT0gJ3dlYnAnXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IChHYWluTWFwTG9hZGVyIGFzIHVua25vd24gYXMgdHlwZW9mIExvYWRlcilcblx0XHRcdFx0XHRcdFx0XHRcdDogbnVsbDtcblxuXHRcdFx0aWYgKCFsb2FkZXIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpbmplY3RFbnZpcm9ubWVudDogVW5yZWNvZ25pemVkIGZpbGUgZXh0ZW5zaW9uOiAnICsgZXh0ZW5zaW9uKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGxvYWRlciBhcyB0eXBlb2YgTG9hZGVyO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgYXNzZXJ0ZWRJbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRjb25zdCBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdFx0Y29uc3QgZ2wgPSBzdG9yZS5zZWxlY3QoJ2dsJyk7XG5cblx0XHRjb25zdCB0ZXh0dXJlID0gc2lnbmFsPFRleHR1cmUgfCBDdWJlVGV4dHVyZSB8IG51bGw+KG51bGwpO1xuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgW3sgZXh0ZW5zaW9uLCBtdWx0aUZpbGUgfSwgX2ZpbGVzXSA9IFt1bnRyYWNrZWQocmVzdWx0T3B0aW9ucyksIGZpbGVzKCldO1xuXG5cdFx0XHRcdGlmIChleHRlbnNpb24gIT09ICd3ZWJwJyAmJiBleHRlbnNpb24gIT09ICdqcGcnICYmIGV4dGVuc2lvbiAhPT0gJ2pwZWcnKSByZXR1cm47XG5cblx0XHRcdFx0Z2woKS5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFx0J3dlYmdsY29udGV4dGxvc3QnLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgLSBmaWxlcyBpcyBjb3JyZWN0bHkgcGFzc2VkXG5cdFx0XHRcdFx0XHRpbmplY3RMb2FkZXIuY2xlYXIobXVsdGlGaWxlID8gW19maWxlc10gOiBfZmlsZXMpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0eyBvbmNlOiB0cnVlIH0sXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgcmVzdWx0ID0gaW5qZWN0TG9hZGVyKFxuXHRcdFx0XHRsb2FkZXIsXG5cdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3Jcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgZmlsZXMgfSA9IGFkanVzdGVkT3B0aW9ucygpO1xuXHRcdFx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KGZpbGVzKSA/IFtmaWxlc10gOiBmaWxlcztcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGluamVjdG9yOiBhc3NlcnRlZEluamVjdG9yLFxuXHRcdFx0XHRcdGV4dGVuc2lvbnM6IChsb2FkZXIpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHsgZXh0ZW5zaW9ucywgcGF0aCB9ID0gYWRqdXN0ZWRPcHRpb25zKCk7XG5cdFx0XHRcdFx0XHRjb25zdCB7IGV4dGVuc2lvbiB9ID0gcmVzdWx0T3B0aW9ucygpO1xuXHRcdFx0XHRcdFx0aWYgKGV4dGVuc2lvbiA9PT0gJ3dlYnAnIHx8IGV4dGVuc2lvbiA9PT0gJ2pwZycgfHwgZXh0ZW5zaW9uID09PSAnanBlZycpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIEdhaW5tYXAgcmVxdWlyZXMgYSByZW5kZXJlclxuXHRcdFx0XHRcdFx0XHRsb2FkZXIuc2V0UmVuZGVyZXIoZ2woKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxvYWRlci5zZXRQYXRoPy4ocGF0aCk7XG5cdFx0XHRcdFx0XHRpZiAoZXh0ZW5zaW9ucykgZXh0ZW5zaW9ucyhsb2FkZXIpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgbG9hZGVyUmVzdWx0ID0gcmVzdWx0KCk7XG5cdFx0XHRcdGlmICghbG9hZGVyUmVzdWx0KSByZXR1cm47XG5cblx0XHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0XHRjb25zdCB7IG11bHRpRmlsZSwgZXh0ZW5zaW9uLCBpc0N1YmVNYXAgfSA9IHJlc3VsdE9wdGlvbnMoKTtcblx0XHRcdFx0XHRjb25zdCB7IGVuY29kaW5nIH0gPSBhZGp1c3RlZE9wdGlvbnMoKTtcblxuXHRcdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3Jcblx0XHRcdFx0XHRsZXQgdGV4dHVyZVJlc3VsdCA9IChtdWx0aUZpbGUgPyBsb2FkZXJSZXN1bHRbMF0gOiBsb2FkZXJSZXN1bHQpIGFzIFRleHR1cmUgfCBDdWJlVGV4dHVyZTtcblxuXHRcdFx0XHRcdGlmIChleHRlbnNpb24gPT09ICdqcGcnIHx8IGV4dGVuc2lvbiA9PT0gJ2pwZWcnIHx8IGV4dGVuc2lvbiA9PT0gJ3dlYnAnKSB7XG5cdFx0XHRcdFx0XHR0ZXh0dXJlUmVzdWx0ID0gKHRleHR1cmVSZXN1bHQgYXMgYW55KS5yZW5kZXJUYXJnZXQ/LnRleHR1cmU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGV4dHVyZVJlc3VsdC5tYXBwaW5nID0gaXNDdWJlTWFwID8gQ3ViZVJlZmxlY3Rpb25NYXBwaW5nIDogRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc7XG5cblx0XHRcdFx0XHRpZiAoJ2NvbG9yU3BhY2UnIGluIHRleHR1cmVSZXN1bHQpXG5cdFx0XHRcdFx0XHQodGV4dHVyZVJlc3VsdCBhcyBhbnkpLmNvbG9yU3BhY2UgPSBlbmNvZGluZyA/PyAoaXNDdWJlTWFwID8gJ3NyZ2InIDogJ3NyZ2ItbGluZWFyJyk7XG5cdFx0XHRcdFx0ZWxzZSAodGV4dHVyZVJlc3VsdCBhcyBhbnkpLmVuY29kaW5nID0gZW5jb2RpbmcgPz8gKGlzQ3ViZU1hcCA/IHNSR0JFbmNvZGluZyA6IExpbmVhckVuY29kaW5nKTtcblxuXHRcdFx0XHRcdHRleHR1cmUuc2V0KHRleHR1cmVSZXN1bHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRleHR1cmUuYXNSZWFkb25seSgpO1xuXHR9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzRW52aXJvbm1lbnRPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RzSW5qZWN0RW52aXJvbm1lbnRPcHRpb25zPiB7XG5cdGZyYW1lcz86IG51bWJlcjtcblx0bmVhcj86IG51bWJlcjtcblx0ZmFyPzogbnVtYmVyO1xuXHRyZXNvbHV0aW9uPzogbnVtYmVyO1xuXHRiYWNrZ3JvdW5kPzogYm9vbGVhbiB8ICdvbmx5JztcblxuXHQvKiogZGVwcmVjYXRlZCwgdXNlIGJhY2tncm91bmRCbHVycmluZXNzICovXG5cdGJsdXI/OiBudW1iZXI7XG5cdGJhY2tncm91bmRCbHVycmluZXNzPzogbnVtYmVyO1xuXHRiYWNrZ3JvdW5kSW50ZW5zaXR5PzogbnVtYmVyO1xuXHRiYWNrZ3JvdW5kUm90YXRpb24/OiBFdWxlcjtcblx0ZW52aXJvbm1lbnRJbnRlbnNpdHk/OiBudW1iZXI7XG5cdGVudmlyb25tZW50Um90YXRpb24/OiBFdWxlcjtcblxuXHRtYXA/OiBUZXh0dXJlO1xuXHRwcmVzZXQ/OiBOZ3RzRW52aXJvbm1lbnRQcmVzZXRzO1xuXHRzY2VuZT86IFNjZW5lIHwgRWxlbWVudFJlZjxTY2VuZT47XG5cdGdyb3VuZD86IGJvb2xlYW4gfCB7IHJhZGl1cz86IG51bWJlcjsgaGVpZ2h0PzogbnVtYmVyOyBzY2FsZT86IG51bWJlciB9O1xufVxuXG5jb25zdCBkZWZhdWx0QmFja2dyb3VuZDogTmd0c0Vudmlyb25tZW50T3B0aW9ucyA9IHtcblx0YmFja2dyb3VuZDogZmFsc2UsXG59O1xuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSwgc2VsZWN0b3I6ICduZ3RzLWVudmlyb25tZW50LW1hcCcgfSlcbmV4cG9ydCBjbGFzcyBOZ3RzRW52aXJvbm1lbnRNYXAge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdEJhY2tncm91bmQsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0QmFja2dyb3VuZCkgfSk7XG5cdGVudlNldCA9IG91dHB1dDx2b2lkPigpO1xuXG5cdGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cdHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0ZGVmYXVsdFNjZW5lID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cblx0ZW52Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHtcblx0XHRcdGJhY2tncm91bmQgPSBmYWxzZSxcblx0XHRcdHNjZW5lLFxuXHRcdFx0Ymx1cixcblx0XHRcdGJhY2tncm91bmRCbHVycmluZXNzLFxuXHRcdFx0YmFja2dyb3VuZEludGVuc2l0eSxcblx0XHRcdGJhY2tncm91bmRSb3RhdGlvbixcblx0XHRcdGVudmlyb25tZW50SW50ZW5zaXR5LFxuXHRcdFx0ZW52aXJvbm1lbnRSb3RhdGlvbixcblx0XHR9ID0gdGhpcy5vcHRpb25zKCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YmFja2dyb3VuZCxcblx0XHRcdHNjZW5lLFxuXHRcdFx0Ymx1cixcblx0XHRcdGJhY2tncm91bmRCbHVycmluZXNzLFxuXHRcdFx0YmFja2dyb3VuZEludGVuc2l0eSxcblx0XHRcdGJhY2tncm91bmRSb3RhdGlvbixcblx0XHRcdGVudmlyb25tZW50SW50ZW5zaXR5LFxuXHRcdFx0ZW52aXJvbm1lbnRSb3RhdGlvbixcblx0XHR9O1xuXHR9KTtcblxuXHRtYXAgPSBwaWNrKHRoaXMub3B0aW9ucywgJ21hcCcpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHR0aGlzLmF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBtYXAgPSB0aGlzLm1hcCgpO1xuXHRcdFx0XHRpZiAoIW1hcCkgcmV0dXJuO1xuXHRcdFx0XHRjb25zdCB7IGJhY2tncm91bmQgPSBmYWxzZSwgc2NlbmUsIC4uLmNvbmZpZyB9ID0gdGhpcy5lbnZDb25maWcoKTtcblx0XHRcdFx0Y29uc3QgY2xlYW51cCA9IHNldEVudlByb3BzKGJhY2tncm91bmQsIHNjZW5lLCB0aGlzLmRlZmF1bHRTY2VuZSgpLCBtYXAsIGNvbmZpZyk7XG5cdFx0XHRcdHRoaXMuZW52U2V0LmVtaXQoKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IGNsZWFudXAoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG5cbkBEaXJlY3RpdmUoeyBzdGFuZGFsb25lOiB0cnVlLCBzZWxlY3RvcjogJ25ndHMtZW52aXJvbm1lbnQtY3ViZScgfSlcbmV4cG9ydCBjbGFzcyBOZ3RzRW52aXJvbm1lbnRDdWJlIHtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRCYWNrZ3JvdW5kLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdEJhY2tncm91bmQpIH0pO1xuXHRlbnZTZXQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuXHRhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdGRlZmF1bHRTY2VuZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzY2VuZScpO1xuXG5cdGVudkNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB7XG5cdFx0XHRiYWNrZ3JvdW5kID0gZmFsc2UsXG5cdFx0XHRzY2VuZSxcblx0XHRcdGJsdXIsXG5cdFx0XHRiYWNrZ3JvdW5kQmx1cnJpbmVzcyxcblx0XHRcdGJhY2tncm91bmRJbnRlbnNpdHksXG5cdFx0XHRiYWNrZ3JvdW5kUm90YXRpb24sXG5cdFx0XHRlbnZpcm9ubWVudEludGVuc2l0eSxcblx0XHRcdGVudmlyb25tZW50Um90YXRpb24sXG5cdFx0fSA9IHRoaXMub3B0aW9ucygpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGJhY2tncm91bmQsXG5cdFx0XHRzY2VuZSxcblx0XHRcdGJsdXIsXG5cdFx0XHRiYWNrZ3JvdW5kQmx1cnJpbmVzcyxcblx0XHRcdGJhY2tncm91bmRJbnRlbnNpdHksXG5cdFx0XHRiYWNrZ3JvdW5kUm90YXRpb24sXG5cdFx0XHRlbnZpcm9ubWVudEludGVuc2l0eSxcblx0XHRcdGVudmlyb25tZW50Um90YXRpb24sXG5cdFx0fTtcblx0fSk7XG5cblx0ZW52aXJvbm1lbnRPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHsgZW5jb2RpbmcsIHByZXNldCwgZmlsZXMsIHBhdGgsIGV4dGVuc2lvbnMgfSA9IHRoaXMub3B0aW9ucygpO1xuXHRcdHJldHVybiB7IGVuY29kaW5nLCBwcmVzZXQsIGZpbGVzLCBwYXRoLCBleHRlbnNpb25zIH07XG5cdH0pO1xuXHR0ZXh0dXJlID0gaW5qZWN0RW52aXJvbm1lbnQodGhpcy5lbnZpcm9ubWVudE9wdGlvbnMpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHR0aGlzLmF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlKCk7XG5cdFx0XHRcdGlmICghdGV4dHVyZSkgcmV0dXJuO1xuXHRcdFx0XHRjb25zdCB7IGJhY2tncm91bmQgPSBmYWxzZSwgc2NlbmUsIC4uLmNvbmZpZyB9ID0gdGhpcy5lbnZDb25maWcoKTtcblx0XHRcdFx0Y29uc3QgY2xlYW51cCA9IHNldEVudlByb3BzKGJhY2tncm91bmQsIHNjZW5lLCB0aGlzLmRlZmF1bHRTY2VuZSgpLCB0ZXh0dXJlLCBjb25maWcpO1xuXHRcdFx0XHR0aGlzLmVudlNldC5lbWl0KCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiBjbGVhbnVwKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWVudmlyb25tZW50LXBvcnRhbCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wb3J0YWwgW2NvbnRhaW5lcl09XCJ2aXJ0dWFsU2NlbmVcIj5cblx0XHRcdDxuZy10ZW1wbGF0ZSBwb3J0YWxDb250ZW50IGxldC1pbmplY3Rvcj1cImluamVjdG9yXCIgbGV0LWNvbnRhaW5lcj1cImNvbnRhaW5lclwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyXG5cdFx0XHRcdFx0W25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudCgpXCJcblx0XHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImluamVjdG9yXCJcblx0XHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpbmplY3RvciwgY29udGFpbmVyIH1cIlxuXHRcdFx0XHQvPlxuXG5cdFx0XHRcdDxuZ3QtY3ViZS1jYW1lcmEgI2N1YmVDYW1lcmEgKmFyZ3M9XCJjYW1lcmFBcmdzKClcIiAvPlxuXG5cdFx0XHRcdEBpZiAoZmlsZXMoKSB8fCBwcmVzZXQoKSkge1xuXHRcdFx0XHRcdDxuZ3RzLWVudmlyb25tZW50LWN1YmUgW29wdGlvbnNdPVwiZW52Q3ViZU9wdGlvbnMoKVwiIChlbnZTZXQpPVwib25FbnZTZXQoKVwiIC8+XG5cdFx0XHRcdH0gQGVsc2UgaWYgKG1hcCgpKSB7XG5cdFx0XHRcdFx0PG5ndHMtZW52aXJvbm1lbnQtbWFwIFtvcHRpb25zXT1cImVudk1hcE9wdGlvbnMoKVwiIChlbnZTZXQpPVwib25FbnZTZXQoKVwiIC8+XG5cdFx0XHRcdH1cblx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0PC9uZ3QtcG9ydGFsPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0c0Vudmlyb25tZW50Q3ViZSwgTmd0c0Vudmlyb25tZW50TWFwLCBOZ3RBcmdzLCBOZ3RQb3J0YWwsIE5ndFBvcnRhbENvbnRlbnQsIE5nVGVtcGxhdGVPdXRsZXRdLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzRW52aXJvbm1lbnRQb3J0YWwge1xuXHRwcml2YXRlIGRlZmF1bHRPcHRpb25zOiBOZ3RzRW52aXJvbm1lbnRPcHRpb25zID0ge1xuXHRcdG5lYXI6IDEsXG5cdFx0ZmFyOiAxMDAwLFxuXHRcdHJlc29sdXRpb246IDI1Nixcblx0XHRmcmFtZXM6IDEsXG5cdFx0YmFja2dyb3VuZDogZmFsc2UsXG5cdH07XG5cdG9wdGlvbnMgPSBpbnB1dCh0aGlzLmRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHModGhpcy5kZWZhdWx0T3B0aW9ucykgfSk7XG5cdGNvbnRlbnQgPSBpbnB1dC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcblx0ZW52U2V0ID0gb3V0cHV0PHZvaWQ+KCk7XG5cblx0cHJpdmF0ZSBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBkZWZhdWx0U2NlbmUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2NlbmUnKTtcblx0cHJpdmF0ZSBnbCA9IHRoaXMuc3RvcmUuc2VsZWN0KCdnbCcpO1xuXG5cdGNhbWVyYSA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEN1YmVDYW1lcmE+PignY3ViZUNhbWVyYScpO1xuXG5cdG1hcCA9IHBpY2sodGhpcy5vcHRpb25zLCAnbWFwJyk7XG5cdGZpbGVzID0gcGljayh0aGlzLm9wdGlvbnMsICdmaWxlcycpO1xuXHRwcmVzZXQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3ByZXNldCcpO1xuXHRwcml2YXRlIGV4dGVuc2lvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2V4dGVuc2lvbnMnKTtcblx0cHJpdmF0ZSBwYXRoID0gcGljayh0aGlzLm9wdGlvbnMsICdwYXRoJyk7XG5cblx0ZW52TWFwT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+ICh7IGJhY2tncm91bmQ6IHRydWUsIG1hcDogdGhpcy5tYXAoKSwgZXh0ZW5zaW9uczogdGhpcy5leHRlbnNpb25zKCkgfSkpO1xuXHRlbnZDdWJlT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+ICh7XG5cdFx0YmFja2dyb3VuZDogdHJ1ZSxcblx0XHRmaWxlczogdGhpcy5maWxlcygpLFxuXHRcdHByZXNldDogdGhpcy5wcmVzZXQoKSxcblx0XHRleHRlbnNpb25zOiB0aGlzLmV4dGVuc2lvbnMoKSxcblx0XHRwYXRoOiB0aGlzLnBhdGgoKSxcblx0fSkpO1xuXG5cdHByaXZhdGUgbmVhciA9IHBpY2sodGhpcy5vcHRpb25zLCAnbmVhcicpO1xuXHRwcml2YXRlIGZhciA9IHBpY2sodGhpcy5vcHRpb25zLCAnZmFyJyk7XG5cdHByaXZhdGUgcmVzb2x1dGlvbiA9IHBpY2sodGhpcy5vcHRpb25zLCAncmVzb2x1dGlvbicpO1xuXHRwcml2YXRlIGZibyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBmYm8gPSBuZXcgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KHRoaXMucmVzb2x1dGlvbigpKTtcblx0XHRmYm8udGV4dHVyZS50eXBlID0gSGFsZkZsb2F0VHlwZTtcblx0XHRyZXR1cm4gZmJvO1xuXHR9KTtcblxuXHRjYW1lcmFBcmdzID0gY29tcHV0ZWQoKCkgPT4gW3RoaXMubmVhcigpLCB0aGlzLmZhcigpLCB0aGlzLmZibygpXSk7XG5cblx0dmlydHVhbFNjZW5lID0gcHJlcGFyZShuZXcgU2NlbmUoKSk7XG5cblx0cHJpdmF0ZSBzZXRFbnZFZmZlY3RSZWY/OiBFZmZlY3RSZWY7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgQ3ViZUNhbWVyYSB9KTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHR0aGlzLmF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBbZmlsZXMsIHByZXNldCwgbWFwXSA9IFt0aGlzLmZpbGVzKCksIHRoaXMucHJlc2V0KCksIHRoaXMubWFwKCldO1xuXHRcdFx0XHQvLyBOT1RFOiB3aGVuIHRoZXJlJ3Mgbm9uZSBvZiB0aGlzLCB3ZSBkb24ndCByZW5kZXIgY3ViZSBvciBtYXAgc28gd2UgbmVlZCB0byBzZXRFbnYgaGVyZVxuXHRcdFx0XHRpZiAoISFmaWxlcyB8fCAhIXByZXNldCB8fCAhIW1hcCkgcmV0dXJuO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRQb3J0YWxFbnYoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0bGV0IGNvdW50ID0gMTtcblx0XHRpbmplY3ROZXh0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IGZyYW1lcyA9IHRoaXMub3B0aW9ucygpLmZyYW1lcztcblx0XHRcdGlmIChmcmFtZXMgPT09IEluZmluaXR5IHx8IChmcmFtZXMgIT0gbnVsbCAmJiBjb3VudCA8IGZyYW1lcykpIHtcblx0XHRcdFx0Y29uc3QgY2FtZXJhID0gdGhpcy5jYW1lcmEoKT8ubmF0aXZlRWxlbWVudDtcblx0XHRcdFx0aWYgKGNhbWVyYSkge1xuXHRcdFx0XHRcdGNhbWVyYS51cGRhdGUodGhpcy5nbCgpLCB0aGlzLnZpcnR1YWxTY2VuZSk7XG5cdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Ly8gTk9URTogd2UgdXNlIG9uRW52U2V0IGhlcmUgdG8gZW5zdXJlIHRoYXQgRW52aXJvbm1lbnRDdWJlIG9yIEVudmlyb25tZW50TWFwIHNldHMgdGhlIGVudiBiZWZvcmUgdGhlIHBvcnRhbFxuXHRvbkVudlNldCgpIHtcblx0XHRpZiAodGhpcy5zZXRFbnZFZmZlY3RSZWYpIHRoaXMuc2V0RW52RWZmZWN0UmVmLmRlc3Ryb3koKTtcblx0XHR0aGlzLnNldEVudkVmZmVjdFJlZiA9IHRoaXMuYXV0b0VmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0UG9ydGFsRW52KCk7XG5cdFx0XHR9LFxuXHRcdFx0eyBtYW51YWxDbGVhbnVwOiB0cnVlIH0sXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0UG9ydGFsRW52KCkge1xuXHRcdGNvbnN0IGNhbWVyYSA9IHRoaXMuY2FtZXJhKCk7XG5cdFx0aWYgKCFjYW1lcmE/Lm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcblxuXHRcdGNvbnN0IFtcblx0XHRcdHtcblx0XHRcdFx0ZnJhbWVzLFxuXHRcdFx0XHRiYWNrZ3JvdW5kID0gZmFsc2UsXG5cdFx0XHRcdHNjZW5lLFxuXHRcdFx0XHRibHVyLFxuXHRcdFx0XHRiYWNrZ3JvdW5kQmx1cnJpbmVzcyxcblx0XHRcdFx0YmFja2dyb3VuZEludGVuc2l0eSxcblx0XHRcdFx0YmFja2dyb3VuZFJvdGF0aW9uLFxuXHRcdFx0XHRlbnZpcm9ubWVudEludGVuc2l0eSxcblx0XHRcdFx0ZW52aXJvbm1lbnRSb3RhdGlvbixcblx0XHRcdH0sXG5cdFx0XHRnbCxcblx0XHRcdGZibyxcblx0XHRcdGRlZmF1bHRTY2VuZSxcblx0XHRdID0gW3RoaXMub3B0aW9ucygpLCB0aGlzLmdsKCksIHRoaXMuZmJvKCksIHRoaXMuZGVmYXVsdFNjZW5lKCldO1xuXG5cdFx0aWYgKGZyYW1lcyA9PT0gMSkgY2FtZXJhLm5hdGl2ZUVsZW1lbnQudXBkYXRlKGdsLCB0aGlzLnZpcnR1YWxTY2VuZSk7XG5cdFx0Y29uc3QgY2xlYW51cCA9IHNldEVudlByb3BzKGJhY2tncm91bmQsIHNjZW5lLCBkZWZhdWx0U2NlbmUsIGZiby50ZXh0dXJlLCB7XG5cdFx0XHRibHVyLFxuXHRcdFx0YmFja2dyb3VuZEJsdXJyaW5lc3MsXG5cdFx0XHRiYWNrZ3JvdW5kSW50ZW5zaXR5LFxuXHRcdFx0YmFja2dyb3VuZFJvdGF0aW9uLFxuXHRcdFx0ZW52aXJvbm1lbnRJbnRlbnNpdHksXG5cdFx0XHRlbnZpcm9ubWVudFJvdGF0aW9uLFxuXHRcdH0pO1xuXHRcdHRoaXMuZW52U2V0LmVtaXQoKTtcblx0XHRyZXR1cm4gY2xlYW51cDtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWVudmlyb25tZW50LWdyb3VuZCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndHMtZW52aXJvbm1lbnQtbWFwIFtvcHRpb25zXT1cImVudk1hcE9wdGlvbnMoKVwiIChlbnZTZXQpPVwiZW52U2V0LmVtaXQoKVwiIC8+XG5cdFx0PG5ndC1ncm91bmQtcHJvamVjdGVkLWVudiAqYXJncz1cImFyZ3MoKVwiIFtzY2FsZV09XCJzY2FsZSgpXCIgW2hlaWdodF09XCJoZWlnaHQoKVwiIFtyYWRpdXNdPVwicmFkaXVzKClcIiAvPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0c0Vudmlyb25tZW50TWFwLCBOZ3RBcmdzXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0Vudmlyb25tZW50R3JvdW5kIHtcblx0b3B0aW9ucyA9IGlucHV0KHt9IGFzIE5ndHNFbnZpcm9ubWVudE9wdGlvbnMpO1xuXHRlbnZTZXQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuXHRwcml2YXRlIGRlZmF1bHRUZXh0dXJlID0gaW5qZWN0RW52aXJvbm1lbnQodGhpcy5vcHRpb25zKTtcblx0cHJpdmF0ZSB0ZXh0dXJlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCkubWFwIHx8IHRoaXMuZGVmYXVsdFRleHR1cmUoKSk7XG5cblx0YXJncyA9IGNvbXB1dGVkKCgpID0+IFt0aGlzLnRleHR1cmUoKV0pO1xuXHRoZWlnaHQgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5vcHRpb25zKCkuZ3JvdW5kIGFzIGFueSk/LmhlaWdodCk7XG5cdHJhZGl1cyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLm9wdGlvbnMoKS5ncm91bmQgYXMgYW55KT8ucmFkaXVzKTtcblx0c2NhbGUgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5vcHRpb25zKCkuZ3JvdW5kIGFzIGFueSk/LnNjYWxlID8/IDEwMDApO1xuXG5cdGVudk1hcE9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgeyBtYXA6IF8sIC4uLm9wdGlvbnMgfSA9IHRoaXMub3B0aW9ucygpO1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHsgbWFwOiB0aGlzLnRleHR1cmUoKSB9KSBhcyBOZ3RzRW52aXJvbm1lbnRPcHRpb25zO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBHcm91bmRQcm9qZWN0ZWRFbnYgfSk7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1lbnZpcm9ubWVudCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0QGlmIChvcHRpb25zKCkuZ3JvdW5kKSB7XG5cdFx0XHQ8bmd0cy1lbnZpcm9ubWVudC1ncm91bmQgW29wdGlvbnNdPVwib3B0aW9ucygpXCIgKGVudlNldCk9XCJlbnZTZXQuZW1pdCgpXCIgLz5cblx0XHR9IEBlbHNlIGlmIChvcHRpb25zKCkubWFwKSB7XG5cdFx0XHQ8bmd0cy1lbnZpcm9ubWVudC1tYXAgW29wdGlvbnNdPVwib3B0aW9ucygpXCIgKGVudlNldCk9XCJlbnZTZXQuZW1pdCgpXCIgLz5cblx0XHR9IEBlbHNlIGlmIChjb250ZW50KCkpIHtcblx0XHRcdDxuZ3RzLWVudmlyb25tZW50LXBvcnRhbCBbb3B0aW9uc109XCJvcHRpb25zKClcIiBbY29udGVudF09XCIkYW55KGNvbnRlbnQoKSlcIiAoZW52U2V0KT1cImVudlNldC5lbWl0KClcIiAvPlxuXHRcdH0gQGVsc2Uge1xuXHRcdFx0PG5ndHMtZW52aXJvbm1lbnQtY3ViZSBbb3B0aW9uc109XCJvcHRpb25zKClcIiAoZW52U2V0KT1cImVudlNldC5lbWl0KClcIiAvPlxuXHRcdH1cblx0YCxcblx0aW1wb3J0czogW05ndHNFbnZpcm9ubWVudEN1YmUsIE5ndHNFbnZpcm9ubWVudE1hcCwgTmd0c0Vudmlyb25tZW50UG9ydGFsLCBOZ3RzRW52aXJvbm1lbnRHcm91bmRdLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzRW52aXJvbm1lbnQge1xuXHRvcHRpb25zID0gaW5wdXQoe30gYXMgTmd0c0Vudmlyb25tZW50T3B0aW9ucyk7XG5cdGNvbnRlbnQgPSBjb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpO1xuXHRlbnZTZXQgPSBvdXRwdXQ8dm9pZD4oKTtcbn1cbiJdfQ==
@@ -1,19 +1,22 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, output, computed, effect, Component, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy } from '@angular/core';
3
- import { omit, injectStore, pick, extend, injectBeforeRender, NgtArgs } from 'angular-three';
2
+ import { input, output, computed, effect, Component, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, model, inject, afterNextRender, untracked, ElementRef, Directive } from '@angular/core';
3
+ import { omit, injectStore, pick, extend, injectBeforeRender, NgtArgs, NgtHTML, provideHTMLDomElement } from 'angular-three';
4
4
  import CameraControls from 'camera-controls';
5
5
  import { mergeInputs } from 'ngxtension/inject-inputs';
6
6
  import { Box3, MathUtils, Matrix4, Quaternion, Raycaster, Sphere, Spherical, Vector2, Vector3, Vector4 } from 'three';
7
7
  import { OrbitControls } from 'three-stdlib';
8
+ import { DOCUMENT } from '@angular/common';
9
+ import { easing } from 'maath';
10
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
8
11
 
9
- const defaultOptions$1 = {
12
+ const defaultOptions$2 = {
10
13
  makeDefault: false,
11
14
  events: false,
12
15
  regress: false,
13
16
  };
14
17
  class NgtsCameraControls {
15
18
  constructor() {
16
- this.options = input(defaultOptions$1, { transform: mergeInputs(defaultOptions$1) });
19
+ this.options = input(defaultOptions$2, { transform: mergeInputs(defaultOptions$2) });
17
20
  this.parameters = omit(this.options, ['makeDefault', 'camera', 'regress', 'domElement']);
18
21
  this.changed = output();
19
22
  this.started = output();
@@ -127,7 +130,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
127
130
  }]
128
131
  }], ctorParameters: () => [] });
129
132
 
130
- const defaultOptions = {
133
+ const defaultOptions$1 = {
131
134
  enableDamping: true,
132
135
  regress: false,
133
136
  makeDefault: false,
@@ -135,7 +138,7 @@ const defaultOptions = {
135
138
  };
136
139
  class NgtsOrbitControls {
137
140
  constructor() {
138
- this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
141
+ this.options = input(defaultOptions$1, { transform: mergeInputs(defaultOptions$1) });
139
142
  this.parameters = omit(this.options, ['makeDefault', 'camera', 'regress', 'domElement', 'keyEvents', 'enableDamping']);
140
143
  this.changed = output();
141
144
  this.started = output();
@@ -248,9 +251,270 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
248
251
  }]
249
252
  }], ctorParameters: () => [] });
250
253
 
254
+ const defaultOptions = {
255
+ eps: 0.00001,
256
+ horizontal: false,
257
+ infinite: false,
258
+ pages: 1,
259
+ distance: 1,
260
+ damping: 0.25,
261
+ maxSpeed: Infinity,
262
+ prepend: false,
263
+ enabled: true,
264
+ style: {},
265
+ };
266
+ class NgtsScrollControls {
267
+ constructor() {
268
+ this.progress = model(0);
269
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
270
+ this.document = inject(DOCUMENT);
271
+ this.store = injectStore();
272
+ this.gl = this.store.select('gl');
273
+ this.events = this.store.select('events');
274
+ this.invalidate = this.store.select('invalidate');
275
+ this.size = this.store.select('size');
276
+ this.domElement = pick(this.gl, 'domElement');
277
+ this.target = pick(this.domElement, 'parentNode');
278
+ this._el = this.document.createElement('div');
279
+ this._fill = this.document.createElement('div');
280
+ this._fixed = this.document.createElement('div');
281
+ this.style = pick(this.options, 'style');
282
+ this.prepend = pick(this.options, 'prepend');
283
+ this.enabled = pick(this.options, 'enabled');
284
+ this.infinite = pick(this.options, 'infinite');
285
+ this.maxSpeed = pick(this.options, 'maxSpeed');
286
+ this.eps = pick(this.options, 'eps');
287
+ this.horizontal = pick(this.options, 'horizontal');
288
+ this.pages = pick(this.options, 'pages');
289
+ this.distance = pick(this.options, 'distance');
290
+ this.damping = pick(this.options, 'damping');
291
+ this.scroll = 0;
292
+ this.offset = 0;
293
+ this.delta = 0;
294
+ const autoEffect = injectAutoEffect();
295
+ afterNextRender(() => {
296
+ autoEffect(() => {
297
+ const target = this.target();
298
+ if (!target)
299
+ return;
300
+ const parent = target;
301
+ const [pages, distance, horizontal, el, fill, fixed, style, prepend, domElement, events] = [
302
+ this.pages(),
303
+ this.distance(),
304
+ this.horizontal(),
305
+ this.el,
306
+ this.fill,
307
+ this.fixed,
308
+ untracked(this.style),
309
+ untracked(this.prepend),
310
+ untracked(this.domElement),
311
+ untracked(this.events),
312
+ ];
313
+ el.style.position = 'absolute';
314
+ el.style.width = '100%';
315
+ el.style.height = '100%';
316
+ el.style[horizontal ? 'overflowX' : 'overflowY'] = 'auto';
317
+ el.style[horizontal ? 'overflowY' : 'overflowX'] = 'hidden';
318
+ el.style.top = '0px';
319
+ el.style.left = '0px';
320
+ for (const key in style) {
321
+ el.style[key] = style[key];
322
+ }
323
+ fixed.style.position = 'sticky';
324
+ fixed.style.top = '0px';
325
+ fixed.style.left = '0px';
326
+ fixed.style.width = '100%';
327
+ fixed.style.height = '100%';
328
+ fixed.style.overflow = 'hidden';
329
+ el.appendChild(fixed);
330
+ fill.style.height = horizontal ? '100%' : `${pages * distance * 100}%`;
331
+ fill.style.width = horizontal ? `${pages * distance * 100}%` : '100%';
332
+ fill.style.pointerEvents = 'none';
333
+ el.appendChild(fill);
334
+ if (prepend)
335
+ parent.prepend(el);
336
+ else
337
+ parent.appendChild(el);
338
+ // Init scroll one pixel in to allow upward/leftward scroll
339
+ el[horizontal ? 'scrollLeft' : 'scrollTop'] = 1;
340
+ const oldTarget = (events.connected || domElement);
341
+ requestAnimationFrame(() => events.connect?.(el));
342
+ const oldCompute = events.compute?.bind(events);
343
+ this.store.snapshot.setEvents({
344
+ compute(event, store) {
345
+ const state = store.snapshot;
346
+ // we are using boundingClientRect because we could not rely on target.offsetTop as canvas could be positioned anywhere in dom
347
+ const { left, top } = parent.getBoundingClientRect();
348
+ const offsetX = event.clientX - left;
349
+ const offsetY = event.clientY - top;
350
+ state.pointer.set((offsetX / state.size.width) * 2 - 1, -(offsetY / state.size.height) * 2 + 1);
351
+ state.raycaster.setFromCamera(state.pointer, state.camera);
352
+ },
353
+ });
354
+ return () => {
355
+ parent.removeChild(el);
356
+ this.store.snapshot.setEvents({ compute: oldCompute });
357
+ events.connect?.(oldTarget);
358
+ };
359
+ });
360
+ autoEffect(() => {
361
+ const [el, events, size, infinite, invalidate, horizontal, enabled] = [
362
+ this.el,
363
+ this.events(),
364
+ this.size(),
365
+ this.infinite(),
366
+ this.invalidate(),
367
+ this.horizontal(),
368
+ this.enabled(),
369
+ ];
370
+ if (events.connected !== el)
371
+ return;
372
+ const containerLength = size[horizontal ? 'width' : 'height'];
373
+ const scrollLength = el[horizontal ? 'scrollWidth' : 'scrollHeight'];
374
+ const scrollThreshold = scrollLength - containerLength;
375
+ let current = 0;
376
+ let disableScroll = true;
377
+ let firstRun = true;
378
+ const onScroll = () => {
379
+ // Prevent first scroll because it is indirectly caused by the one pixel offset
380
+ if (!enabled || firstRun)
381
+ return;
382
+ invalidate();
383
+ current = el[horizontal ? 'scrollLeft' : 'scrollTop'];
384
+ this.scroll = current / scrollThreshold;
385
+ if (infinite) {
386
+ if (!disableScroll) {
387
+ if (current >= scrollThreshold) {
388
+ const damp = 1 - this.offset;
389
+ el[horizontal ? 'scrollLeft' : 'scrollTop'] = 1;
390
+ this.scroll = this.offset = -damp;
391
+ disableScroll = true;
392
+ }
393
+ else if (current <= 0) {
394
+ const damp = 1 + this.offset;
395
+ el[horizontal ? 'scrollLeft' : 'scrollTop'] = scrollLength;
396
+ this.scroll = this.offset = damp;
397
+ disableScroll = true;
398
+ }
399
+ }
400
+ if (disableScroll)
401
+ setTimeout(() => (disableScroll = false), 40);
402
+ }
403
+ untracked(() => {
404
+ this.progress.set(this.scroll);
405
+ });
406
+ };
407
+ el.addEventListener('scroll', onScroll, { passive: true });
408
+ requestAnimationFrame(() => (firstRun = false));
409
+ const onWheel = (e) => (el[horizontal ? 'scrollLeft' : 'scrollTop'] += e.deltaY / 2);
410
+ if (horizontal)
411
+ el.addEventListener('wheel', onWheel, { passive: true });
412
+ return () => {
413
+ el.removeEventListener('scroll', onScroll);
414
+ if (horizontal)
415
+ el.removeEventListener('wheel', onWheel);
416
+ };
417
+ });
418
+ });
419
+ let last = 0;
420
+ injectBeforeRender(({ delta }) => {
421
+ last = this.offset;
422
+ easing.damp(this, 'offset', this.scroll, this.damping(), delta, this.maxSpeed(), undefined, this.eps());
423
+ easing.damp(this, 'delta', Math.abs(last - this.offset), this.damping(), delta, this.maxSpeed(), undefined, this.eps());
424
+ if (this.delta > this.eps())
425
+ this.invalidate()();
426
+ });
427
+ }
428
+ get el() {
429
+ return this._el;
430
+ }
431
+ get fill() {
432
+ return this._fill;
433
+ }
434
+ get fixed() {
435
+ return this._fixed;
436
+ }
437
+ range(from, distance, margin = 0) {
438
+ const start = from - margin;
439
+ const end = start + distance + margin * 2;
440
+ return this.offset < start ? 0 : this.offset > end ? 1 : (this.offset - start) / (end - start);
441
+ }
442
+ curve(from, distance, margin = 0) {
443
+ return Math.sin(this.range(from, distance, margin) * Math.PI);
444
+ }
445
+ visible(from, distance, margin = 0) {
446
+ const start = from - margin;
447
+ const end = start + distance + margin * 2;
448
+ return this.offset >= start && this.offset <= end;
449
+ }
450
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsScrollControls, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
451
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: NgtsScrollControls, isStandalone: true, selector: "ngts-scroll-controls", inputs: { progress: { classPropertyName: "progress", publicName: "progress", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { progress: "progressChange" }, ngImport: i0, template: `
452
+ <ng-content />
453
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
454
+ }
455
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsScrollControls, decorators: [{
456
+ type: Component,
457
+ args: [{
458
+ selector: 'ngts-scroll-controls',
459
+ standalone: true,
460
+ template: `
461
+ <ng-content />
462
+ `,
463
+ changeDetection: ChangeDetectionStrategy.OnPush,
464
+ }]
465
+ }], ctorParameters: () => [] });
466
+ class NgtsScrollCanvas {
467
+ constructor() {
468
+ this.host = inject(ElementRef);
469
+ this.scrollControls = inject(NgtsScrollControls);
470
+ this.store = injectStore();
471
+ this.viewport = this.store.select('viewport');
472
+ injectBeforeRender(() => {
473
+ const group = this.host.nativeElement;
474
+ group.position.x = this.scrollControls.horizontal()
475
+ ? -this.viewport().width * (this.scrollControls.pages() - 1) * this.scrollControls.offset
476
+ : 0;
477
+ group.position.y = this.scrollControls.horizontal()
478
+ ? 0
479
+ : this.viewport().height * (this.scrollControls.pages() - 1) * this.scrollControls.offset;
480
+ });
481
+ }
482
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsScrollCanvas, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
483
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: NgtsScrollCanvas, isStandalone: true, selector: "ngt-group[ngts-scroll-canvas]", ngImport: i0 }); }
484
+ }
485
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsScrollCanvas, decorators: [{
486
+ type: Directive,
487
+ args: [{ selector: 'ngt-group[ngts-scroll-canvas]', standalone: true }]
488
+ }], ctorParameters: () => [] });
489
+ class NgtsScrollHtml extends NgtHTML {
490
+ constructor() {
491
+ super();
492
+ this.scrollControls = inject(NgtsScrollControls);
493
+ this.size = this.store.select('size');
494
+ injectBeforeRender(() => {
495
+ if (this.scrollControls.delta > this.scrollControls.eps()) {
496
+ this.host.nativeElement.style.transform = `translate3d(${this.scrollControls.horizontal()
497
+ ? -this.size().width * (this.scrollControls.pages() - 1) * this.scrollControls.offset
498
+ : 0}px,${this.scrollControls.horizontal() ? 0 : this.size().height * (this.scrollControls.pages() - 1) * -this.scrollControls.offset}px,0)`;
499
+ }
500
+ });
501
+ }
502
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsScrollHtml, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
503
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: NgtsScrollHtml, isStandalone: true, selector: "div[ngts-scroll-html]", host: { styleAttribute: "position: absolute; top: 0; left: 0; will-change: transform;" }, providers: [provideHTMLDomElement([NgtsScrollControls], (scrollControls) => scrollControls.fixed)], usesInheritance: true, ngImport: i0 }); }
504
+ }
505
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsScrollHtml, decorators: [{
506
+ type: Directive,
507
+ args: [{
508
+ selector: 'div[ngts-scroll-html]',
509
+ standalone: true,
510
+ host: { style: 'position: absolute; top: 0; left: 0; will-change: transform;' },
511
+ providers: [provideHTMLDomElement([NgtsScrollControls], (scrollControls) => scrollControls.fixed)],
512
+ }]
513
+ }], ctorParameters: () => [] });
514
+
251
515
  /**
252
516
  * Generated bundle index. Do not edit.
253
517
  */
254
518
 
255
- export { NgtsCameraControls, NgtsOrbitControls };
519
+ export { NgtsCameraControls, NgtsOrbitControls, NgtsScrollCanvas, NgtsScrollControls, NgtsScrollHtml };
256
520
  //# sourceMappingURL=angular-three-soba-controls.mjs.map