@ethlete/core 4.9.0 → 4.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ethlete/core
2
2
 
3
+ ## 4.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`689ecc1`](https://github.com/ethlete-io/ethdk/commit/689ecc1d7480e56a871ba46cd75a0c26c200d198) Thanks [@TomTomB](https://github.com/TomTomB)! - Remove style bindings that would result in null or undefined
8
+
3
9
  ## 4.9.0
4
10
 
5
11
  ### Minor Changes
@@ -148,8 +148,13 @@ export const signalStyles = (el, styleMap) => {
148
148
  return buildSignalEffects({
149
149
  map: styleMap,
150
150
  eachItemFn: ({ key, value }) => {
151
- const valueString = `${value}`;
152
- elements().currentElement?.style.setProperty(key, valueString);
151
+ if (value === null || value === undefined) {
152
+ elements().currentElement?.style.removeProperty(key);
153
+ }
154
+ else {
155
+ const valueString = `${value}`;
156
+ elements().currentElement?.style.setProperty(key, valueString);
157
+ }
153
158
  },
154
159
  cleanupFn: ({ key }) => elements().currentElement?.style.removeProperty(key),
155
160
  });
@@ -380,4 +385,4 @@ export const controlValueSignalWithPrevious = (control, options) => {
380
385
  * @deprecated Use `controlValueSignal` instead with `debounceTime` set to `300` and `debounceFirst` set to `true`.
381
386
  */
382
387
  export const debouncedControlValueSignal = (control, options) => controlValueSignal(control, options ?? { debounceTime: 300, debounceFirst: true });
383
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2lnbmFsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsVUFBVSxFQUVWLFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFHVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFFBQVEsRUFDUixxQkFBcUIsRUFDckIsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXBFLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUF5QnJDLFNBQVMsZUFBZSxDQUFDLEVBQVc7SUFDbEMsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqQixNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNqQixPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLGdCQUFnQixJQUFJLEdBQUcsSUFBSSxpQkFBaUIsSUFBSSxHQUFHLENBQUM7SUFDeEcsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0scUJBQXFCLEdBQUcsR0FBa0IsRUFBRSxDQUNoRCxNQUFNLENBQUM7SUFDTCxjQUFjLEVBQUUsUUFBUSxDQUFD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RUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUN6QyxDQUFDO0lBRUYsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUMsQ0FBQyxDQUFDO0FBWUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUN6QyxPQUFVLEVBQ1YsT0FBNEMsRUFDNUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBEZXN0cm95UmVmLFxuICBFZmZlY3RSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdG9yLFxuICBOZ1pvbmUsXG4gIFF1ZXJ5TGlzdCxcbiAgU2lnbmFsLFxuICBXcml0YWJsZVNpZ25hbCxcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbiAgaXNTaWduYWwsXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbiAgc2lnbmFsLFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgbWVyZ2UsIG9mLCBwYWlyd2lzZSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGVxdWFsIH0gZnJvbSAnLi9lcXVhbC51dGlsJztcblxudHlwZSBTaWduYWxFbGVtZW50QmluZGluZ0NvbXBsZXhUeXBlID1cbiAgfCBIVE1MRWxlbWVudFxuICB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gIHwgUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQ+XG4gIHwgQXJyYXk8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD5cbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkO1xuXG50eXBlIFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSA9XG4gIHwgSFRNTEVsZW1lbnRcbiAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICB8IE9ic2VydmFibGU8U2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZT5cbiAgfCBTaWduYWw8U2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZT5cbiAgfCBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD5cbiAgfCBFbGVtZW50U2lnbmFsO1xuXG50eXBlIEVsZW1lbnRTaWduYWwgPSBTaWduYWw8e1xuICBjdXJyZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuICBwcmV2aW91c0VsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgY3VycmVudEVsZW1lbnRzOiBIVE1MRWxlbWVudFtdO1xuICBwcmV2aW91c0VsZW1lbnRzOiBIVE1MRWxlbWVudFtdO1xufT47XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNpZ25hbChlbDogdW5rbm93bik6IGVsIGlzIEVsZW1lbnRTaWduYWwge1xuICBpZiAoaXNTaWduYWwoZWwpKSB7XG4gICAgY29uc3QgdmFsID0gZWwoKTtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmICdjdXJyZW50RWxlbWVudCcgaW4gdmFsICYmICdwcmV2aW91c0VsZW1lbnQnIGluIHZhbDtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuY29uc3QgZG9jdW1lbnRFbGVtZW50U2lnbmFsID0gKCk6IEVsZW1lbnRTaWduYWwgPT5cbiAgc2lnbmFsKHtcbiAgICBjdXJyZW50RWxlbWVudDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgIHByZXZpb3VzRWxlbWVudDogbnVsbCxcbiAgICBjdXJyZW50RWxlbWVudHM6IFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdLFxuICAgIHByZXZpb3VzRWxlbWVudHM6IFtdLFxuICB9KTtcblxuY29uc3QgYnVpbGRFbGVtZW50U2lnbmFsID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUgfCBudWxsIHwgdW5kZWZpbmVkKTogRWxlbWVudFNpZ25hbCA9PiB7XG4gIGlmIChlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHNpZ25hbCh7IGN1cnJlbnRFbGVtZW50OiBudWxsLCBwcmV2aW91c0VsZW1lbnQ6IG51bGwsIGN1cnJlbnRFbGVtZW50czogW10sIHByZXZpb3VzRWxlbWVudHM6IFtdIH0pO1xuICB9XG5cbiAgaWYgKGlzRWxlbWVudFNpZ25hbChlbCkpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cblxuICBsZXQgbUVsU2lnbmFsOiBTaWduYWw8SFRNTEVsZW1lbnRbXSB8IG51bGw+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3Qgc3dpdGNoRWxlbWVudCA9ICgpID0+XG4gICAgc3dpdGNoTWFwKChlbE9yUmVmOiBTaWduYWxFbGVtZW50QmluZGluZ0NvbXBsZXhUeXBlKSA9PiB7XG4gICAgICBpZiAoZWxPclJlZiBpbnN0YW5jZW9mIFF1ZXJ5TGlzdCkge1xuICAgICAgICByZXR1cm4gZWxPclJlZi5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKGVsT3JSZWYpLFxuICAgICAgICAgIG1hcCgoKSA9PiBlbE9yUmVmLnRvQXJyYXkoKS5tYXAoKHIpID0+IGNvZXJjZUVsZW1lbnQocikpKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlbE9yUmVmKSkge1xuICAgICAgICByZXR1cm4gb2YoZWxPclJlZi5tYXAoKHIpID0+IGNvZXJjZUVsZW1lbnQocikpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvZXJjZWRFbCA9IGNvZXJjZUVsZW1lbnQoZWxPclJlZik7XG4gICAgICAgIHJldHVybiBvZihjb2VyY2VkRWwgPyBbY29lcmNlZEVsXSA6IG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGlmIChlbCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICBtRWxTaWduYWwgPSB0b1NpZ25hbChlbC5waXBlKHN3aXRjaEVsZW1lbnQoKSksIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICB9IGVsc2UgaWYgKGlzU2lnbmFsKGVsKSkge1xuICAgIG1FbFNpZ25hbCA9IHRvU2lnbmFsKHRvT2JzZXJ2YWJsZShlbCkucGlwZShzd2l0Y2hFbGVtZW50KCkpLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcbiAgfSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIFF1ZXJ5TGlzdCkge1xuICAgIG1FbFNpZ25hbCA9IHRvU2lnbmFsKFxuICAgICAgZWwuY2hhbmdlcy5waXBlKFxuICAgICAgICBzdGFydFdpdGgoZWwpLFxuICAgICAgICBtYXAoKCkgPT4gZWwudG9BcnJheSgpLm1hcCgocikgPT4gY29lcmNlRWxlbWVudChyKSkpLFxuICAgICAgKSxcbiAgICAgIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0sXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBtRWxTaWduYWwgPSBzaWduYWwoW2NvZXJjZUVsZW1lbnQoZWwpXSk7XG4gIH1cblxuICByZXR1cm4gdG9TaWduYWwoXG4gICAgdG9PYnNlcnZhYmxlKG1FbFNpZ25hbCkucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBtYXAoKFtwcmV2aW91c0VsZW1lbnRzLCBjdXJyZW50RWxlbWVudHNdKSA9PiAoe1xuICAgICAgICBwcmV2aW91c0VsZW1lbnRzOiBwcmV2aW91c0VsZW1lbnRzID8/IFtdLFxuICAgICAgICBjdXJyZW50RWxlbWVudHM6IGN1cnJlbnRFbGVtZW50cyA/PyBbXSxcbiAgICAgICAgY3VycmVudEVsZW1lbnQ6IGN1cnJlbnRFbGVtZW50cz8uWzBdID8/IG51bGwsXG4gICAgICAgIHByZXZpb3VzRWxlbWVudDogcHJldmlvdXNFbGVtZW50cz8uWzBdID8/IG51bGwsXG4gICAgICB9KSksXG4gICAgKSxcbiAgICB7IGluaXRpYWxWYWx1ZTogeyBjdXJyZW50RWxlbWVudDogbnVsbCwgcHJldmlvdXNFbGVtZW50OiBudWxsLCBwcmV2aW91c0VsZW1lbnRzOiBbXSwgY3VycmVudEVsZW1lbnRzOiBbXSB9IH0sXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRTaWduYWxFZmZlY3RzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+Pihjb25maWc6IHtcbiAgbWFwOiBUO1xuICBlYWNoSXRlbUZuOiAocGFpcjogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkgPT4gdm9pZDtcbiAgY2xlYW51cEZuOiAocGFpcjogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCB7IG1hcCwgZWFjaEl0ZW1GbiwgY2xlYW51cEZuIH0gPSBjb25maWc7XG5cbiAgY29uc3QgZWZmZWN0UmVmTWFwOiBSZWNvcmQ8c3RyaW5nLCBFZmZlY3RSZWY+ID0ge307XG5cbiAgY29uc3QgaGFzID0gKHRva2VuOiBzdHJpbmcpID0+IHRva2VuIGluIGVmZmVjdFJlZk1hcDtcblxuICBjb25zdCBwdXNoID0gKHRva2VuU3RyaW5nOiBzdHJpbmcsIHNpZ25hbDogU2lnbmFsPHVua25vd24+KSA9PiB7XG4gICAgaWYgKGhhcyh0b2tlblN0cmluZykpIHJldHVybjtcblxuICAgIGNvbnN0IHRva2VuQXJyYXkgPSB0b2tlblN0cmluZy5zcGxpdCgnICcpLmZpbHRlcigodG9rZW4pID0+ICEhdG9rZW4pO1xuXG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbkFycmF5KSB7XG4gICAgICBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVmID0gZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNpZ25hbCgpO1xuICAgICAgICAgIGVhY2hJdGVtRm4oeyBrZXk6IHRva2VuLCB2YWx1ZSB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0UmVmTWFwW3Rva2VuXSA9IHJlZjtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBwdXNoTWFueSA9IChtYXA6IFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4pID0+IHtcbiAgICBmb3IgKGNvbnN0IFt0b2tlblN0cmluZywgc2lnbmFsXSBvZiBPYmplY3QuZW50cmllcyhtYXApKSB7XG4gICAgICBwdXNoKHRva2VuU3RyaW5nLCBzaWduYWwpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZW1vdmUgPSAoLi4udG9rZW5zOiBzdHJpbmdbXSkgPT4ge1xuICAgIGZvciAoY29uc3QgdG9rZW5TdHJpbmcgb2YgdG9rZW5zKSB7XG4gICAgICBlZmZlY3RSZWZNYXBbdG9rZW5TdHJpbmddPy5kZXN0cm95KCk7XG5cbiAgICAgIGNsZWFudXBGbih7IGtleTogdG9rZW5TdHJpbmcsIHZhbHVlOiBtYXBbdG9rZW5TdHJpbmddPy4oKSB9KTtcblxuICAgICAgZGVsZXRlIGVmZmVjdFJlZk1hcFt0b2tlblN0cmluZ107XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlbW92ZU1hbnkgPSAodG9rZW5zOiBzdHJpbmdbXSkgPT4ge1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgICByZW1vdmUodG9rZW4pO1xuICAgIH1cbiAgfTtcblxuICBwdXNoTWFueShtYXApO1xuXG4gIHJldHVybiB7IHJlbW92ZSwgcmVtb3ZlTWFueSwgaGFzLCBwdXNoLCBwdXNoTWFueSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbElzUmVuZGVyZWQgPSAoKSA9PiB7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIGFmdGVyTmV4dFJlbmRlcigoKSA9PiBpc1JlbmRlcmVkLnNldCh0cnVlKSk7XG5cbiAgcmV0dXJuIGlzUmVuZGVyZWQuYXNSZWFkb25seSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbENsYXNzZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIGNsYXNzTWFwOiBUKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcblxuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKHtcbiAgICBtYXA6IGNsYXNzTWFwLFxuICAgIGVhY2hJdGVtRm46ICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoa2V5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsZWFudXBGbjogKHsga2V5IH0pID0+IGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoa2V5KSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdENsYXNzZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGNsYXNzTWFwOiBUKSA9PlxuICBzaWduYWxDbGFzc2VzKGluamVjdChFbGVtZW50UmVmKSwgY2xhc3NNYXApO1xuXG5jb25zdCBBTFdBWVNfVFJVRV9BVFRSSUJVVEVfS0VZUyA9IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAncmVxdWlyZWQnLCAnY2hlY2tlZCcsICdzZWxlY3RlZCcsICdoaWRkZW4nLCAnaW5lcnQnXTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KFxuICBlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLFxuICBhdHRyaWJ1dGVNYXA6IFQsXG4pID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuXG4gIHJldHVybiBidWlsZFNpZ25hbEVmZmVjdHMoe1xuICAgIG1hcDogYXR0cmlidXRlTWFwLFxuICAgIGVhY2hJdGVtRm46ICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSBgJHt2YWx1ZX1gO1xuXG4gICAgICBpZiAoQUxXQVlTX1RSVUVfQVRUUklCVVRFX0tFWVMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoa2V5LCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uc2V0QXR0cmlidXRlKGtleSwgdmFsdWVTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGVhbnVwRm46ICh7IGtleSB9KSA9PiBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoa2V5KSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGF0dHJpYnV0ZU1hcDogVCkgPT5cbiAgc2lnbmFsQXR0cmlidXRlcyhpbmplY3QoRWxlbWVudFJlZiksIGF0dHJpYnV0ZU1hcCk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIHN0eWxlTWFwOiBUKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcblxuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKHtcbiAgICBtYXA6IHN0eWxlTWFwLFxuICAgIGVhY2hJdGVtRm46ICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSBgJHt2YWx1ZX1gO1xuXG4gICAgICBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlU3RyaW5nKTtcbiAgICB9LFxuICAgIGNsZWFudXBGbjogKHsga2V5IH0pID0+IGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSksXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KHN0eWxlTWFwOiBUKSA9PlxuICBzaWduYWxTdHlsZXMoaW5qZWN0KEVsZW1lbnRSZWYpLCBzdHlsZU1hcCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naWNhbFNpemUge1xuICBpbmxpbmVTaXplOiBudW1iZXI7XG4gIGJsb2NrU2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnREaW1lbnNpb25zIHtcbiAgcmVjdDogRE9NUmVjdFJlYWRPbmx5IHwgbnVsbDtcbiAgYm9yZGVyQm94U2l6ZTogTG9naWNhbFNpemUgfCBudWxsO1xuICBjb250ZW50Qm94U2l6ZTogTG9naWNhbFNpemUgfCBudWxsO1xuICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBMb2dpY2FsU2l6ZSB8IG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50RGltZW5zaW9ucyA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlKSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuXG4gIGNvbnN0IGluaXRpYWxWYWx1ZSA9ICgpID0+ICh7XG4gICAgcmVjdDogZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8gbnVsbCxcbiAgICBib3JkZXJCb3hTaXplOiBudWxsLFxuICAgIGNvbnRlbnRCb3hTaXplOiBudWxsLFxuICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IG51bGwsXG4gIH0pO1xuXG4gIGNvbnN0IGVsZW1lbnREaW1lbnNpb25zU2lnbmFsID0gc2lnbmFsPEVsZW1lbnREaW1lbnNpb25zPihpbml0aWFsVmFsdWUoKSk7XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGUpID0+IHtcbiAgICBpZiAoIWlzUmVuZGVyZWQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZW50cnkgPSBlWzBdO1xuXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBjb25zdCBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplID0gZW50cnkuZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZT8uWzBdID8/IG51bGw7XG4gICAgICBjb25zdCBib3JkZXJCb3hTaXplID0gZW50cnkuYm9yZGVyQm94U2l6ZT8uWzBdID8/IG51bGw7XG4gICAgICBjb25zdCBjb250ZW50Qm94U2l6ZSA9IGVudHJ5LmNvbnRlbnRCb3hTaXplPy5bMF0gPz8gbnVsbDtcblxuICAgICAgem9uZS5ydW4oKCkgPT5cbiAgICAgICAgZWxlbWVudERpbWVuc2lvbnNTaWduYWwuc2V0KHtcbiAgICAgICAgICByZWN0OiBlbnRyeS5jb250ZW50UmVjdCxcbiAgICAgICAgICBib3JkZXJCb3hTaXplOiBib3JkZXJCb3hTaXplXG4gICAgICAgICAgICA/IHsgaW5saW5lU2l6ZTogYm9yZGVyQm94U2l6ZS5pbmxpbmVTaXplLCBibG9ja1NpemU6IGJvcmRlckJveFNpemUuYmxvY2tTaXplIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBjb250ZW50Qm94U2l6ZTogY29udGVudEJveFNpemVcbiAgICAgICAgICAgID8geyBpbmxpbmVTaXplOiBjb250ZW50Qm94U2l6ZS5pbmxpbmVTaXplLCBibG9ja1NpemU6IGNvbnRlbnRCb3hTaXplLmJsb2NrU2l6ZSB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZVxuICAgICAgICAgICAgPyB7IGlubGluZVNpemU6IGRldmljZVBpeGVsQ29udGVudEJveFNpemUuaW5saW5lU2l6ZSwgYmxvY2tTaXplOiBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplLmJsb2NrU2l6ZSB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgICBlbGVtZW50RGltZW5zaW9uc1NpZ25hbC5zZXQoaW5pdGlhbFZhbHVlKCkpO1xuXG4gICAgICBpZiAoZWxzLnByZXZpb3VzRWxlbWVudCkge1xuICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbHMuY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWREaXNwbGF5ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbHMuY3VycmVudEVsZW1lbnQpLmRpc3BsYXk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbElzQW5ndWxhckNvbXBvbmVudCA9IGVscy5jdXJyZW50RWxlbWVudD8udGFnTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCctJyk7XG5cbiAgICAgICAgaWYgKGNvbXB1dGVkRGlzcGxheSA9PT0gJ2lubGluZScgJiYgaXNEZXZNb2RlKCkgJiYgY3VycmVudEVsSXNBbmd1bGFyQ29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBFbGVtZW50IDwke2Vscy5jdXJyZW50RWxlbWVudD8udGFnTmFtZS50b0xvd2VyQ2FzZSgpfT4gaXMgYW4gQW5ndWxhciBjb21wb25lbnQgYW5kIGhhcyBhIGRpc3BsYXkgb2YgJ2lubGluZScuIElubGluZSBlbGVtZW50cyBjYW5ub3QgYmUgb2JzZXJ2ZWQgZm9yIGRpbWVuc2lvbnMuIFBsZWFzZSBjaGFuZ2UgaXQgdG8gJ2Jsb2NrJyBvciBzb21ldGhpbmcgZWxzZS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVscy5jdXJyZW50RWxlbWVudCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcblxuICByZXR1cm4gZWxlbWVudERpbWVuc2lvbnNTaWduYWwuYXNSZWFkb25seSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RFbGVtZW50RGltZW5zaW9ucyA9ICgpID0+IHNpZ25hbEVsZW1lbnREaW1lbnNpb25zKGluamVjdChFbGVtZW50UmVmKSk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50TXV0YXRpb25zID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIG9wdGlvbnM/OiBNdXRhdGlvbk9ic2VydmVySW5pdCkgPT4ge1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgY29uc3QgaXNSZW5kZXJlZCA9IHNpZ25hbElzUmVuZGVyZWQoKTtcblxuICBjb25zdCBlbGVtZW50TXV0YXRpb25zU2lnbmFsID0gc2lnbmFsPE11dGF0aW9uUmVjb3JkIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoZSkgPT4ge1xuICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBlbnRyeSA9IGVbMF07XG5cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHpvbmUucnVuKCgpID0+IGVsZW1lbnRNdXRhdGlvbnNTaWduYWwuc2V0KGVudHJ5KSk7XG4gICAgfVxuICB9KTtcblxuICBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZWxzID0gZWxlbWVudHMoKTtcblxuICAgICAgZWxlbWVudE11dGF0aW9uc1NpZ25hbC5zZXQobnVsbCk7XG5cbiAgICAgIGlmIChlbHMucHJldmlvdXNFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVscy5jdXJyZW50RWxlbWVudCkge1xuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVscy5jdXJyZW50RWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcblxuICByZXR1cm4gZWxlbWVudE11dGF0aW9uc1NpZ25hbC5hc1JlYWRvbmx5KCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRNdXRhdGlvbnMgPSAob3B0aW9ucz86IE11dGF0aW9uT2JzZXJ2ZXJJbml0KSA9PlxuICBzaWduYWxFbGVtZW50TXV0YXRpb25zKGluamVjdChFbGVtZW50UmVmKSwgb3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50U2Nyb2xsU3RhdGUgPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSkgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IGVsZW1lbnREaW1lbnNpb25zID0gc2lnbmFsRWxlbWVudERpbWVuc2lvbnMoZWxlbWVudHMpO1xuICBjb25zdCBlbGVtZW50TXV0YXRpb25zID0gc2lnbmFsRWxlbWVudE11dGF0aW9ucyhlbGVtZW50cywgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudDtcbiAgICBjb25zdCBkaW1lbnNpb25zID0gZWxlbWVudERpbWVuc2lvbnMoKTtcblxuICAgIGNvbnN0IG5vdFNjcm9sbGFibGUgPSAoKSA9PiAoe1xuICAgICAgY2FuU2Nyb2xsOiBmYWxzZSxcbiAgICAgIGNhblNjcm9sbEhvcml6b250YWxseTogZmFsc2UsXG4gICAgICBjYW5TY3JvbGxWZXJ0aWNhbGx5OiBmYWxzZSxcbiAgICAgIHNjcm9sbFdpZHRoOiBlbGVtZW50Py5zY3JvbGxXaWR0aCA/PyBudWxsLFxuICAgICAgc2Nyb2xsSGVpZ2h0OiBlbGVtZW50Py5zY3JvbGxIZWlnaHQgPz8gbnVsbCxcbiAgICAgIGVsZW1lbnREaW1lbnNpb25zOiBkaW1lbnNpb25zLFxuICAgIH0pO1xuXG4gICAgLy8gV2UgYXJlIG5vdCBpbnRlcmVzdGVkIHdoYXQgdGhlIG11dGF0aW9uIGlzLCBqdXN0IHRoYXQgdGhlcmUgaXMgb25lLlxuICAgIC8vIENoYW5nZXMgdG8gdGhlIERPTSBjYW4gYWZmZWN0IHRoZSBzY3JvbGwgc3RhdGUgb2YgdGhlIGVsZW1lbnQuXG4gICAgZWxlbWVudE11dGF0aW9ucygpO1xuXG4gICAgaWYgKCFlbGVtZW50IHx8ICFkaW1lbnNpb25zLnJlY3QgfHwgIWlzUmVuZGVyZWQoKSkgcmV0dXJuIG5vdFNjcm9sbGFibGUoKTtcblxuICAgIGNvbnN0IHsgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCB9ID0gZWxlbWVudDtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGRpbWVuc2lvbnMucmVjdDtcblxuICAgIGNvbnN0IGNhblNjcm9sbEhvcml6b250YWxseSA9IHNjcm9sbFdpZHRoID4gd2lkdGg7XG4gICAgY29uc3QgY2FuU2Nyb2xsVmVydGljYWxseSA9IHNjcm9sbEhlaWdodCA+IGhlaWdodDtcblxuICAgIHJldHVybiB7XG4gICAgICBjYW5TY3JvbGw6IGNhblNjcm9sbEhvcml6b250YWxseSB8fCBjYW5TY3JvbGxWZXJ0aWNhbGx5LFxuICAgICAgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5LFxuICAgICAgY2FuU2Nyb2xsVmVydGljYWxseSxcbiAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgZWxlbWVudERpbWVuc2lvbnM6IGRpbWVuc2lvbnMsXG4gICAgfTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRTY3JvbGxTdGF0ZSA9ICgpID0+IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZShpbmplY3QoRWxlbWVudFJlZikpO1xuXG5leHBvcnQgdHlwZSBTaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uT3B0aW9ucyA9IE9taXQ8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0LCAncm9vdCc+ICYge1xuICByb290PzogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlO1xuICBlbmFibGVkPzogU2lnbmFsPHVua25vd24+O1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24gPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSwgb3B0aW9ucz86IFNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb25PcHRpb25zKSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgcm9vdCA9IG9wdGlvbnM/LnJvb3QgPyBidWlsZEVsZW1lbnRTaWduYWwob3B0aW9ucz8ucm9vdCkgOiBkb2N1bWVudEVsZW1lbnRTaWduYWwoKTtcbiAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuICBjb25zdCBpc0VuYWJsZWQgPSBvcHRpb25zPy5lbmFibGVkID8/IHNpZ25hbCh0cnVlKTtcblxuICBjb25zdCBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsID0gc2lnbmFsPEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXT4oW10pO1xuXG4gIGNvbnN0IG9ic2VydmVyID0gc2lnbmFsPEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbCA9IHJvb3QoKS5jdXJyZW50RWxlbWVudDtcblxuICAgICAgdW50cmFja2VkKCgpID0+IG9ic2VydmVyKCk/LmRpc2Nvbm5lY3QoKSk7XG5cbiAgICAgIGNvbnN0IG5ld09ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICAgICAgICBsZXQgY3VycmVudFZhbHVlcyA9IHVudHJhY2tlZCgoKSA9PiBbLi4uZWxlbWVudEludGVyc2VjdGlvblNpZ25hbCgpXSk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nRW50cnlJbmRleCA9IGN1cnJlbnRWYWx1ZXMuZmluZEluZGV4KCh2KSA9PiB2LnRhcmdldCA9PT0gZW50cnkudGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nRW50cnlJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY3VycmVudFZhbHVlcyA9IFtcbiAgICAgICAgICAgICAgICAuLi5jdXJyZW50VmFsdWVzLnNsaWNlKDAsIGV4aXN0aW5nRW50cnlJbmRleCksXG4gICAgICAgICAgICAgICAgZW50cnksXG4gICAgICAgICAgICAgICAgLi4uY3VycmVudFZhbHVlcy5zbGljZShleGlzdGluZ0VudHJ5SW5kZXggKyAxKSxcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZXMgPSBbLi4uY3VycmVudFZhbHVlcywgZW50cnldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHpvbmUucnVuKCgpID0+IGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWwuc2V0KGN1cnJlbnRWYWx1ZXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyAuLi5vcHRpb25zLCByb290OiByb290RWwgfSxcbiAgICAgICk7XG5cbiAgICAgIG9ic2VydmVyLnNldChuZXdPYnNlcnZlcik7XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGVscyA9IGVsZW1lbnRzKCk7XG4gICAgICBjb25zdCBvYnMgPSBvYnNlcnZlcigpO1xuICAgICAgY29uc3QgZW5hYmxlZCA9IGlzRW5hYmxlZCgpO1xuXG4gICAgICBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsLnNldChbXSk7XG5cbiAgICAgIGlmIChlbHMucHJldmlvdXNFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgb2JzPy5kaXNjb25uZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbHMuY3VycmVudEVsZW1lbnRzLmxlbmd0aCAmJiAhIWVuYWJsZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbCBvZiBlbHMuY3VycmVudEVsZW1lbnRzKSB7XG4gICAgICAgICAgb2JzPy5vYnNlcnZlKGVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApO1xuXG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IG9ic2VydmVyKCk/LmRpc2Nvbm5lY3QoKSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWw7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRJbnRlcnNlY3Rpb24gPSAob3B0aW9ucz86IFNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb25PcHRpb25zKSA9PlxuICBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uKGluamVjdChFbGVtZW50UmVmKSwgb3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50Q2hpbGRyZW4gPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSkgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG4gIGNvbnN0IGVsZW1lbnRNdXRhdGlvbnMgPSBzaWduYWxFbGVtZW50TXV0YXRpb25zKGVsZW1lbnRzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSwgYXR0cmlidXRlczogdHJ1ZSB9KTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgLy8gV2UgYXJlIG5vdCBpbnRlcmVzdGVkIHdoYXQgdGhlIG11dGF0aW9uIGlzLCBqdXN0IHRoYXQgdGhlcmUgaXMgb25lLlxuICAgIC8vIENoYW5nZXMgdG8gdGhlIERPTSBtYXkgYWZmZWN0IHRoZSBjaGlsZHJlbiBvZiB0aGUgZWxlbWVudC5cbiAgICBlbGVtZW50TXV0YXRpb25zKCk7XG5cbiAgICBpZiAoIWVscy5jdXJyZW50RWxlbWVudCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgY2hpbGRyZW46IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbHMuY3VycmVudEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxzLmN1cnJlbnRFbGVtZW50LmNoaWxkcmVuW2luZGV4XTtcblxuICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJldmlvdXNTaWduYWxWYWx1ZSA9IDxUPihzaWduYWw6IFNpZ25hbDxUPikgPT4ge1xuICBjb25zdCBvYnMgPSB0b09ic2VydmFibGUoc2lnbmFsKS5waXBlKFxuICAgIHBhaXJ3aXNlKCksXG4gICAgbWFwKChbcHJldl0pID0+IHByZXYpLFxuICApO1xuXG4gIHJldHVybiB0b1NpZ25hbChvYnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHN5bmNTaWduYWwgPSA8VD4oZnJvbTogU2lnbmFsPFQ+LCB0bzogV3JpdGFibGVTaWduYWw8VD4pID0+IHtcbiAgZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBmb3JtVmFsID0gZnJvbSgpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIHRvLnNldChmb3JtVmFsKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgMzAwXG4gICAqL1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWJvdW5jZUZpcnN0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnRyb2xWYWx1ZVNpZ25hbCA9IDxUIGV4dGVuZHMgRm9ybUNvbnRyb2wgfCBGb3JtR3JvdXAgfCBGb3JtQXJyYXk+KFxuICBjb250cm9sOiBULFxuICBvcHRpb25zPzogQ29udHJvbFZhbHVlU2lnbmFsT3B0aW9ucyxcbikgPT4ge1xuICBjb25zdCB2Y3NPYnMgPSBvcHRpb25zPy5kZWJvdW5jZVRpbWVcbiAgICA/IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKG9wdGlvbnM/LmRlYm91bmNlVGltZSA/PyAzMDApKVxuICAgIDogY29udHJvbC52YWx1ZUNoYW5nZXM7XG5cbiAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPFJldHVyblR5cGU8VFsnZ2V0UmF3VmFsdWUnXT4+ID0gb3B0aW9ucz8uZGVib3VuY2VGaXJzdFxuICAgID8gbWVyZ2Uob2YoY29udHJvbC52YWx1ZSksIHZjc09icylcbiAgICA6IHZjc09icy5waXBlKHN0YXJ0V2l0aChjb250cm9sLmdldFJhd1ZhbHVlKCkpKTtcblxuICByZXR1cm4gdG9TaWduYWwob2JzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGVxdWFsKGEsIGIpKSksIHtcbiAgICByZXF1aXJlU3luYzogdHJ1ZSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRoZSBmaXJzdCBpdGVtIGluIHRoZSBwYWlyIGlzIHRoZSBwcmV2aW91cyB2YWx1ZSBhbmQgdGhlIHNlY29uZCBpdGVtIGlzIHRoZSBjdXJyZW50IHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgY29udHJvbFZhbHVlU2lnbmFsV2l0aFByZXZpb3VzID0gPFQgZXh0ZW5kcyBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cCB8IEZvcm1BcnJheT4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiB7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShjb250cm9sVmFsdWVTaWduYWwoY29udHJvbCwgb3B0aW9ucykpLnBpcGUoXG4gICAgcGFpcndpc2UoKSxcbiAgICBzdGFydFdpdGgoW251bGwsIGNvbnRyb2wuZ2V0UmF3VmFsdWUoKV0pLFxuICApO1xuXG4gIHJldHVybiB0b1NpZ25hbChvYnMsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgY29udHJvbFZhbHVlU2lnbmFsYCBpbnN0ZWFkIHdpdGggYGRlYm91bmNlVGltZWAgb3B0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYm91bmNlZENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgMzAwXG4gICAqL1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBjb250cm9sVmFsdWVTaWduYWxgIGluc3RlYWQgd2l0aCBgZGVib3VuY2VUaW1lYCBzZXQgdG8gYDMwMGAgYW5kIGBkZWJvdW5jZUZpcnN0YCBzZXQgdG8gYHRydWVgLlxuICovXG5leHBvcnQgY29uc3QgZGVib3VuY2VkQ29udHJvbFZhbHVlU2lnbmFsID0gPFQgZXh0ZW5kcyBGb3JtQ29udHJvbD4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBEZWJvdW5jZWRDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiBjb250cm9sVmFsdWVTaWduYWwoY29udHJvbCwgb3B0aW9ucyA/PyB7IGRlYm91bmNlVGltZTogMzAwLCBkZWJvdW5jZUZpcnN0OiB0cnVlIH0pO1xuIl19
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2lnbmFsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsVUFBVSxFQUVWLFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFHVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFFBQVEsRUFDUixxQkFBcUIsRUFDckIsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXBFLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUF5QnJDLFNBQVMsZUFBZSxDQUFDLEVBQVc7SUFDbEMsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqQixNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNqQixPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLGdCQUFnQixJQUFJLEdBQUcsSUFBSSxpQkFBaUIsSUFBSSxHQUFHLENBQUM7SUFDeEcsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0scUJBQXFCLEdBQUcsR0FBa0IsRUFBRSxDQUNoRCxNQUFNLENBQUM7SUFDTCxjQUFjLEVBQUUsUUFBUSxDQUFD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R0FBRyxDQUM1QyxPQUFVLEVBQ1YsT0FBbUMsRUFDbkMsRUFBRTtJQUNGLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2pFLFFBQVEsRUFBRSxFQUNWLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUN6QyxDQUFDO0lBRUYsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUMsQ0FBQyxDQUFDO0FBWUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUN6QyxPQUFVLEVBQ1YsT0FBNEMsRUFDNUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBEZXN0cm95UmVmLFxuICBFZmZlY3RSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdG9yLFxuICBOZ1pvbmUsXG4gIFF1ZXJ5TGlzdCxcbiAgU2lnbmFsLFxuICBXcml0YWJsZVNpZ25hbCxcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbiAgaXNTaWduYWwsXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbiAgc2lnbmFsLFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgbWVyZ2UsIG9mLCBwYWlyd2lzZSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGVxdWFsIH0gZnJvbSAnLi9lcXVhbC51dGlsJztcblxudHlwZSBTaWduYWxFbGVtZW50QmluZGluZ0NvbXBsZXhUeXBlID1cbiAgfCBIVE1MRWxlbWVudFxuICB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gIHwgUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQ+XG4gIHwgQXJyYXk8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD5cbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkO1xuXG50eXBlIFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSA9XG4gIHwgSFRNTEVsZW1lbnRcbiAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICB8IE9ic2VydmFibGU8U2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZT5cbiAgfCBTaWduYWw8U2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZT5cbiAgfCBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD5cbiAgfCBFbGVtZW50U2lnbmFsO1xuXG50eXBlIEVsZW1lbnRTaWduYWwgPSBTaWduYWw8e1xuICBjdXJyZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuICBwcmV2aW91c0VsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgY3VycmVudEVsZW1lbnRzOiBIVE1MRWxlbWVudFtdO1xuICBwcmV2aW91c0VsZW1lbnRzOiBIVE1MRWxlbWVudFtdO1xufT47XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNpZ25hbChlbDogdW5rbm93bik6IGVsIGlzIEVsZW1lbnRTaWduYWwge1xuICBpZiAoaXNTaWduYWwoZWwpKSB7XG4gICAgY29uc3QgdmFsID0gZWwoKTtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmICdjdXJyZW50RWxlbWVudCcgaW4gdmFsICYmICdwcmV2aW91c0VsZW1lbnQnIGluIHZhbDtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuY29uc3QgZG9jdW1lbnRFbGVtZW50U2lnbmFsID0gKCk6IEVsZW1lbnRTaWduYWwgPT5cbiAgc2lnbmFsKHtcbiAgICBjdXJyZW50RWxlbWVudDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgIHByZXZpb3VzRWxlbWVudDogbnVsbCxcbiAgICBjdXJyZW50RWxlbWVudHM6IFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdLFxuICAgIHByZXZpb3VzRWxlbWVudHM6IFtdLFxuICB9KTtcblxuY29uc3QgYnVpbGRFbGVtZW50U2lnbmFsID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUgfCBudWxsIHwgdW5kZWZpbmVkKTogRWxlbWVudFNpZ25hbCA9PiB7XG4gIGlmIChlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHNpZ25hbCh7IGN1cnJlbnRFbGVtZW50OiBudWxsLCBwcmV2aW91c0VsZW1lbnQ6IG51bGwsIGN1cnJlbnRFbGVtZW50czogW10sIHByZXZpb3VzRWxlbWVudHM6IFtdIH0pO1xuICB9XG5cbiAgaWYgKGlzRWxlbWVudFNpZ25hbChlbCkpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cblxuICBsZXQgbUVsU2lnbmFsOiBTaWduYWw8SFRNTEVsZW1lbnRbXSB8IG51bGw+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3Qgc3dpdGNoRWxlbWVudCA9ICgpID0+XG4gICAgc3dpdGNoTWFwKChlbE9yUmVmOiBTaWduYWxFbGVtZW50QmluZGluZ0NvbXBsZXhUeXBlKSA9PiB7XG4gICAgICBpZiAoZWxPclJlZiBpbnN0YW5jZW9mIFF1ZXJ5TGlzdCkge1xuICAgICAgICByZXR1cm4gZWxPclJlZi5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKGVsT3JSZWYpLFxuICAgICAgICAgIG1hcCgoKSA9PiBlbE9yUmVmLnRvQXJyYXkoKS5tYXAoKHIpID0+IGNvZXJjZUVsZW1lbnQocikpKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlbE9yUmVmKSkge1xuICAgICAgICByZXR1cm4gb2YoZWxPclJlZi5tYXAoKHIpID0+IGNvZXJjZUVsZW1lbnQocikpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvZXJjZWRFbCA9IGNvZXJjZUVsZW1lbnQoZWxPclJlZik7XG4gICAgICAgIHJldHVybiBvZihjb2VyY2VkRWwgPyBbY29lcmNlZEVsXSA6IG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGlmIChlbCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICBtRWxTaWduYWwgPSB0b1NpZ25hbChlbC5waXBlKHN3aXRjaEVsZW1lbnQoKSksIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICB9IGVsc2UgaWYgKGlzU2lnbmFsKGVsKSkge1xuICAgIG1FbFNpZ25hbCA9IHRvU2lnbmFsKHRvT2JzZXJ2YWJsZShlbCkucGlwZShzd2l0Y2hFbGVtZW50KCkpLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcbiAgfSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIFF1ZXJ5TGlzdCkge1xuICAgIG1FbFNpZ25hbCA9IHRvU2lnbmFsKFxuICAgICAgZWwuY2hhbmdlcy5waXBlKFxuICAgICAgICBzdGFydFdpdGgoZWwpLFxuICAgICAgICBtYXAoKCkgPT4gZWwudG9BcnJheSgpLm1hcCgocikgPT4gY29lcmNlRWxlbWVudChyKSkpLFxuICAgICAgKSxcbiAgICAgIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0sXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBtRWxTaWduYWwgPSBzaWduYWwoW2NvZXJjZUVsZW1lbnQoZWwpXSk7XG4gIH1cblxuICByZXR1cm4gdG9TaWduYWwoXG4gICAgdG9PYnNlcnZhYmxlKG1FbFNpZ25hbCkucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBtYXAoKFtwcmV2aW91c0VsZW1lbnRzLCBjdXJyZW50RWxlbWVudHNdKSA9PiAoe1xuICAgICAgICBwcmV2aW91c0VsZW1lbnRzOiBwcmV2aW91c0VsZW1lbnRzID8/IFtdLFxuICAgICAgICBjdXJyZW50RWxlbWVudHM6IGN1cnJlbnRFbGVtZW50cyA/PyBbXSxcbiAgICAgICAgY3VycmVudEVsZW1lbnQ6IGN1cnJlbnRFbGVtZW50cz8uWzBdID8/IG51bGwsXG4gICAgICAgIHByZXZpb3VzRWxlbWVudDogcHJldmlvdXNFbGVtZW50cz8uWzBdID8/IG51bGwsXG4gICAgICB9KSksXG4gICAgKSxcbiAgICB7IGluaXRpYWxWYWx1ZTogeyBjdXJyZW50RWxlbWVudDogbnVsbCwgcHJldmlvdXNFbGVtZW50OiBudWxsLCBwcmV2aW91c0VsZW1lbnRzOiBbXSwgY3VycmVudEVsZW1lbnRzOiBbXSB9IH0sXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRTaWduYWxFZmZlY3RzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+Pihjb25maWc6IHtcbiAgbWFwOiBUO1xuICBlYWNoSXRlbUZuOiAocGFpcjogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkgPT4gdm9pZDtcbiAgY2xlYW51cEZuOiAocGFpcjogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCB7IG1hcCwgZWFjaEl0ZW1GbiwgY2xlYW51cEZuIH0gPSBjb25maWc7XG5cbiAgY29uc3QgZWZmZWN0UmVmTWFwOiBSZWNvcmQ8c3RyaW5nLCBFZmZlY3RSZWY+ID0ge307XG5cbiAgY29uc3QgaGFzID0gKHRva2VuOiBzdHJpbmcpID0+IHRva2VuIGluIGVmZmVjdFJlZk1hcDtcblxuICBjb25zdCBwdXNoID0gKHRva2VuU3RyaW5nOiBzdHJpbmcsIHNpZ25hbDogU2lnbmFsPHVua25vd24+KSA9PiB7XG4gICAgaWYgKGhhcyh0b2tlblN0cmluZykpIHJldHVybjtcblxuICAgIGNvbnN0IHRva2VuQXJyYXkgPSB0b2tlblN0cmluZy5zcGxpdCgnICcpLmZpbHRlcigodG9rZW4pID0+ICEhdG9rZW4pO1xuXG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbkFycmF5KSB7XG4gICAgICBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVmID0gZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNpZ25hbCgpO1xuICAgICAgICAgIGVhY2hJdGVtRm4oeyBrZXk6IHRva2VuLCB2YWx1ZSB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0UmVmTWFwW3Rva2VuXSA9IHJlZjtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBwdXNoTWFueSA9IChtYXA6IFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4pID0+IHtcbiAgICBmb3IgKGNvbnN0IFt0b2tlblN0cmluZywgc2lnbmFsXSBvZiBPYmplY3QuZW50cmllcyhtYXApKSB7XG4gICAgICBwdXNoKHRva2VuU3RyaW5nLCBzaWduYWwpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZW1vdmUgPSAoLi4udG9rZW5zOiBzdHJpbmdbXSkgPT4ge1xuICAgIGZvciAoY29uc3QgdG9rZW5TdHJpbmcgb2YgdG9rZW5zKSB7XG4gICAgICBlZmZlY3RSZWZNYXBbdG9rZW5TdHJpbmddPy5kZXN0cm95KCk7XG5cbiAgICAgIGNsZWFudXBGbih7IGtleTogdG9rZW5TdHJpbmcsIHZhbHVlOiBtYXBbdG9rZW5TdHJpbmddPy4oKSB9KTtcblxuICAgICAgZGVsZXRlIGVmZmVjdFJlZk1hcFt0b2tlblN0cmluZ107XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlbW92ZU1hbnkgPSAodG9rZW5zOiBzdHJpbmdbXSkgPT4ge1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgICByZW1vdmUodG9rZW4pO1xuICAgIH1cbiAgfTtcblxuICBwdXNoTWFueShtYXApO1xuXG4gIHJldHVybiB7IHJlbW92ZSwgcmVtb3ZlTWFueSwgaGFzLCBwdXNoLCBwdXNoTWFueSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbElzUmVuZGVyZWQgPSAoKSA9PiB7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIGFmdGVyTmV4dFJlbmRlcigoKSA9PiBpc1JlbmRlcmVkLnNldCh0cnVlKSk7XG5cbiAgcmV0dXJuIGlzUmVuZGVyZWQuYXNSZWFkb25seSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbENsYXNzZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIGNsYXNzTWFwOiBUKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcblxuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKHtcbiAgICBtYXA6IGNsYXNzTWFwLFxuICAgIGVhY2hJdGVtRm46ICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoa2V5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsZWFudXBGbjogKHsga2V5IH0pID0+IGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoa2V5KSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdENsYXNzZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGNsYXNzTWFwOiBUKSA9PlxuICBzaWduYWxDbGFzc2VzKGluamVjdChFbGVtZW50UmVmKSwgY2xhc3NNYXApO1xuXG5jb25zdCBBTFdBWVNfVFJVRV9BVFRSSUJVVEVfS0VZUyA9IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAncmVxdWlyZWQnLCAnY2hlY2tlZCcsICdzZWxlY3RlZCcsICdoaWRkZW4nLCAnaW5lcnQnXTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KFxuICBlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLFxuICBhdHRyaWJ1dGVNYXA6IFQsXG4pID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuXG4gIHJldHVybiBidWlsZFNpZ25hbEVmZmVjdHMoe1xuICAgIG1hcDogYXR0cmlidXRlTWFwLFxuICAgIGVhY2hJdGVtRm46ICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSBgJHt2YWx1ZX1gO1xuXG4gICAgICBpZiAoQUxXQVlTX1RSVUVfQVRUUklCVVRFX0tFWVMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoa2V5LCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uc2V0QXR0cmlidXRlKGtleSwgdmFsdWVTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGVhbnVwRm46ICh7IGtleSB9KSA9PiBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoa2V5KSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGF0dHJpYnV0ZU1hcDogVCkgPT5cbiAgc2lnbmFsQXR0cmlidXRlcyhpbmplY3QoRWxlbWVudFJlZiksIGF0dHJpYnV0ZU1hcCk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIHN0eWxlTWFwOiBUKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcblxuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKHtcbiAgICBtYXA6IHN0eWxlTWFwLFxuICAgIGVhY2hJdGVtRm46ICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gYCR7dmFsdWV9YDtcblxuICAgICAgICBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsZWFudXBGbjogKHsga2V5IH0pID0+IGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSksXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KHN0eWxlTWFwOiBUKSA9PlxuICBzaWduYWxTdHlsZXMoaW5qZWN0KEVsZW1lbnRSZWYpLCBzdHlsZU1hcCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naWNhbFNpemUge1xuICBpbmxpbmVTaXplOiBudW1iZXI7XG4gIGJsb2NrU2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnREaW1lbnNpb25zIHtcbiAgcmVjdDogRE9NUmVjdFJlYWRPbmx5IHwgbnVsbDtcbiAgYm9yZGVyQm94U2l6ZTogTG9naWNhbFNpemUgfCBudWxsO1xuICBjb250ZW50Qm94U2l6ZTogTG9naWNhbFNpemUgfCBudWxsO1xuICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBMb2dpY2FsU2l6ZSB8IG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50RGltZW5zaW9ucyA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlKSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuXG4gIGNvbnN0IGluaXRpYWxWYWx1ZSA9ICgpID0+ICh7XG4gICAgcmVjdDogZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8gbnVsbCxcbiAgICBib3JkZXJCb3hTaXplOiBudWxsLFxuICAgIGNvbnRlbnRCb3hTaXplOiBudWxsLFxuICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IG51bGwsXG4gIH0pO1xuXG4gIGNvbnN0IGVsZW1lbnREaW1lbnNpb25zU2lnbmFsID0gc2lnbmFsPEVsZW1lbnREaW1lbnNpb25zPihpbml0aWFsVmFsdWUoKSk7XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGUpID0+IHtcbiAgICBpZiAoIWlzUmVuZGVyZWQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZW50cnkgPSBlWzBdO1xuXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBjb25zdCBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplID0gZW50cnkuZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZT8uWzBdID8/IG51bGw7XG4gICAgICBjb25zdCBib3JkZXJCb3hTaXplID0gZW50cnkuYm9yZGVyQm94U2l6ZT8uWzBdID8/IG51bGw7XG4gICAgICBjb25zdCBjb250ZW50Qm94U2l6ZSA9IGVudHJ5LmNvbnRlbnRCb3hTaXplPy5bMF0gPz8gbnVsbDtcblxuICAgICAgem9uZS5ydW4oKCkgPT5cbiAgICAgICAgZWxlbWVudERpbWVuc2lvbnNTaWduYWwuc2V0KHtcbiAgICAgICAgICByZWN0OiBlbnRyeS5jb250ZW50UmVjdCxcbiAgICAgICAgICBib3JkZXJCb3hTaXplOiBib3JkZXJCb3hTaXplXG4gICAgICAgICAgICA/IHsgaW5saW5lU2l6ZTogYm9yZGVyQm94U2l6ZS5pbmxpbmVTaXplLCBibG9ja1NpemU6IGJvcmRlckJveFNpemUuYmxvY2tTaXplIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBjb250ZW50Qm94U2l6ZTogY29udGVudEJveFNpemVcbiAgICAgICAgICAgID8geyBpbmxpbmVTaXplOiBjb250ZW50Qm94U2l6ZS5pbmxpbmVTaXplLCBibG9ja1NpemU6IGNvbnRlbnRCb3hTaXplLmJsb2NrU2l6ZSB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZVxuICAgICAgICAgICAgPyB7IGlubGluZVNpemU6IGRldmljZVBpeGVsQ29udGVudEJveFNpemUuaW5saW5lU2l6ZSwgYmxvY2tTaXplOiBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplLmJsb2NrU2l6ZSB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgICBlbGVtZW50RGltZW5zaW9uc1NpZ25hbC5zZXQoaW5pdGlhbFZhbHVlKCkpO1xuXG4gICAgICBpZiAoZWxzLnByZXZpb3VzRWxlbWVudCkge1xuICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbHMuY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWREaXNwbGF5ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbHMuY3VycmVudEVsZW1lbnQpLmRpc3BsYXk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbElzQW5ndWxhckNvbXBvbmVudCA9IGVscy5jdXJyZW50RWxlbWVudD8udGFnTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCctJyk7XG5cbiAgICAgICAgaWYgKGNvbXB1dGVkRGlzcGxheSA9PT0gJ2lubGluZScgJiYgaXNEZXZNb2RlKCkgJiYgY3VycmVudEVsSXNBbmd1bGFyQ29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBFbGVtZW50IDwke2Vscy5jdXJyZW50RWxlbWVudD8udGFnTmFtZS50b0xvd2VyQ2FzZSgpfT4gaXMgYW4gQW5ndWxhciBjb21wb25lbnQgYW5kIGhhcyBhIGRpc3BsYXkgb2YgJ2lubGluZScuIElubGluZSBlbGVtZW50cyBjYW5ub3QgYmUgb2JzZXJ2ZWQgZm9yIGRpbWVuc2lvbnMuIFBsZWFzZSBjaGFuZ2UgaXQgdG8gJ2Jsb2NrJyBvciBzb21ldGhpbmcgZWxzZS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVscy5jdXJyZW50RWxlbWVudCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcblxuICByZXR1cm4gZWxlbWVudERpbWVuc2lvbnNTaWduYWwuYXNSZWFkb25seSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RFbGVtZW50RGltZW5zaW9ucyA9ICgpID0+IHNpZ25hbEVsZW1lbnREaW1lbnNpb25zKGluamVjdChFbGVtZW50UmVmKSk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50TXV0YXRpb25zID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIG9wdGlvbnM/OiBNdXRhdGlvbk9ic2VydmVySW5pdCkgPT4ge1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgY29uc3QgaXNSZW5kZXJlZCA9IHNpZ25hbElzUmVuZGVyZWQoKTtcblxuICBjb25zdCBlbGVtZW50TXV0YXRpb25zU2lnbmFsID0gc2lnbmFsPE11dGF0aW9uUmVjb3JkIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoZSkgPT4ge1xuICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBlbnRyeSA9IGVbMF07XG5cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHpvbmUucnVuKCgpID0+IGVsZW1lbnRNdXRhdGlvbnNTaWduYWwuc2V0KGVudHJ5KSk7XG4gICAgfVxuICB9KTtcblxuICBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZWxzID0gZWxlbWVudHMoKTtcblxuICAgICAgZWxlbWVudE11dGF0aW9uc1NpZ25hbC5zZXQobnVsbCk7XG5cbiAgICAgIGlmIChlbHMucHJldmlvdXNFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVscy5jdXJyZW50RWxlbWVudCkge1xuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVscy5jdXJyZW50RWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcblxuICByZXR1cm4gZWxlbWVudE11dGF0aW9uc1NpZ25hbC5hc1JlYWRvbmx5KCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRNdXRhdGlvbnMgPSAob3B0aW9ucz86IE11dGF0aW9uT2JzZXJ2ZXJJbml0KSA9PlxuICBzaWduYWxFbGVtZW50TXV0YXRpb25zKGluamVjdChFbGVtZW50UmVmKSwgb3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50U2Nyb2xsU3RhdGUgPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSkgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IGVsZW1lbnREaW1lbnNpb25zID0gc2lnbmFsRWxlbWVudERpbWVuc2lvbnMoZWxlbWVudHMpO1xuICBjb25zdCBlbGVtZW50TXV0YXRpb25zID0gc2lnbmFsRWxlbWVudE11dGF0aW9ucyhlbGVtZW50cywgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudDtcbiAgICBjb25zdCBkaW1lbnNpb25zID0gZWxlbWVudERpbWVuc2lvbnMoKTtcblxuICAgIGNvbnN0IG5vdFNjcm9sbGFibGUgPSAoKSA9PiAoe1xuICAgICAgY2FuU2Nyb2xsOiBmYWxzZSxcbiAgICAgIGNhblNjcm9sbEhvcml6b250YWxseTogZmFsc2UsXG4gICAgICBjYW5TY3JvbGxWZXJ0aWNhbGx5OiBmYWxzZSxcbiAgICAgIHNjcm9sbFdpZHRoOiBlbGVtZW50Py5zY3JvbGxXaWR0aCA/PyBudWxsLFxuICAgICAgc2Nyb2xsSGVpZ2h0OiBlbGVtZW50Py5zY3JvbGxIZWlnaHQgPz8gbnVsbCxcbiAgICAgIGVsZW1lbnREaW1lbnNpb25zOiBkaW1lbnNpb25zLFxuICAgIH0pO1xuXG4gICAgLy8gV2UgYXJlIG5vdCBpbnRlcmVzdGVkIHdoYXQgdGhlIG11dGF0aW9uIGlzLCBqdXN0IHRoYXQgdGhlcmUgaXMgb25lLlxuICAgIC8vIENoYW5nZXMgdG8gdGhlIERPTSBjYW4gYWZmZWN0IHRoZSBzY3JvbGwgc3RhdGUgb2YgdGhlIGVsZW1lbnQuXG4gICAgZWxlbWVudE11dGF0aW9ucygpO1xuXG4gICAgaWYgKCFlbGVtZW50IHx8ICFkaW1lbnNpb25zLnJlY3QgfHwgIWlzUmVuZGVyZWQoKSkgcmV0dXJuIG5vdFNjcm9sbGFibGUoKTtcblxuICAgIGNvbnN0IHsgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCB9ID0gZWxlbWVudDtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGRpbWVuc2lvbnMucmVjdDtcblxuICAgIGNvbnN0IGNhblNjcm9sbEhvcml6b250YWxseSA9IHNjcm9sbFdpZHRoID4gd2lkdGg7XG4gICAgY29uc3QgY2FuU2Nyb2xsVmVydGljYWxseSA9IHNjcm9sbEhlaWdodCA+IGhlaWdodDtcblxuICAgIHJldHVybiB7XG4gICAgICBjYW5TY3JvbGw6IGNhblNjcm9sbEhvcml6b250YWxseSB8fCBjYW5TY3JvbGxWZXJ0aWNhbGx5LFxuICAgICAgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5LFxuICAgICAgY2FuU2Nyb2xsVmVydGljYWxseSxcbiAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgZWxlbWVudERpbWVuc2lvbnM6IGRpbWVuc2lvbnMsXG4gICAgfTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRTY3JvbGxTdGF0ZSA9ICgpID0+IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZShpbmplY3QoRWxlbWVudFJlZikpO1xuXG5leHBvcnQgdHlwZSBTaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uT3B0aW9ucyA9IE9taXQ8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0LCAncm9vdCc+ICYge1xuICByb290PzogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlO1xuICBlbmFibGVkPzogU2lnbmFsPHVua25vd24+O1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24gPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSwgb3B0aW9ucz86IFNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb25PcHRpb25zKSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgcm9vdCA9IG9wdGlvbnM/LnJvb3QgPyBidWlsZEVsZW1lbnRTaWduYWwob3B0aW9ucz8ucm9vdCkgOiBkb2N1bWVudEVsZW1lbnRTaWduYWwoKTtcbiAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuICBjb25zdCBpc0VuYWJsZWQgPSBvcHRpb25zPy5lbmFibGVkID8/IHNpZ25hbCh0cnVlKTtcblxuICBjb25zdCBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsID0gc2lnbmFsPEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXT4oW10pO1xuXG4gIGNvbnN0IG9ic2VydmVyID0gc2lnbmFsPEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbCA9IHJvb3QoKS5jdXJyZW50RWxlbWVudDtcblxuICAgICAgdW50cmFja2VkKCgpID0+IG9ic2VydmVyKCk/LmRpc2Nvbm5lY3QoKSk7XG5cbiAgICAgIGNvbnN0IG5ld09ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICAgICAgICBsZXQgY3VycmVudFZhbHVlcyA9IHVudHJhY2tlZCgoKSA9PiBbLi4uZWxlbWVudEludGVyc2VjdGlvblNpZ25hbCgpXSk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nRW50cnlJbmRleCA9IGN1cnJlbnRWYWx1ZXMuZmluZEluZGV4KCh2KSA9PiB2LnRhcmdldCA9PT0gZW50cnkudGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nRW50cnlJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY3VycmVudFZhbHVlcyA9IFtcbiAgICAgICAgICAgICAgICAuLi5jdXJyZW50VmFsdWVzLnNsaWNlKDAsIGV4aXN0aW5nRW50cnlJbmRleCksXG4gICAgICAgICAgICAgICAgZW50cnksXG4gICAgICAgICAgICAgICAgLi4uY3VycmVudFZhbHVlcy5zbGljZShleGlzdGluZ0VudHJ5SW5kZXggKyAxKSxcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZXMgPSBbLi4uY3VycmVudFZhbHVlcywgZW50cnldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHpvbmUucnVuKCgpID0+IGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWwuc2V0KGN1cnJlbnRWYWx1ZXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyAuLi5vcHRpb25zLCByb290OiByb290RWwgfSxcbiAgICAgICk7XG5cbiAgICAgIG9ic2VydmVyLnNldChuZXdPYnNlcnZlcik7XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGVscyA9IGVsZW1lbnRzKCk7XG4gICAgICBjb25zdCBvYnMgPSBvYnNlcnZlcigpO1xuICAgICAgY29uc3QgZW5hYmxlZCA9IGlzRW5hYmxlZCgpO1xuXG4gICAgICBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsLnNldChbXSk7XG5cbiAgICAgIGlmIChlbHMucHJldmlvdXNFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgb2JzPy5kaXNjb25uZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbHMuY3VycmVudEVsZW1lbnRzLmxlbmd0aCAmJiAhIWVuYWJsZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbCBvZiBlbHMuY3VycmVudEVsZW1lbnRzKSB7XG4gICAgICAgICAgb2JzPy5vYnNlcnZlKGVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApO1xuXG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IG9ic2VydmVyKCk/LmRpc2Nvbm5lY3QoKSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWw7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRJbnRlcnNlY3Rpb24gPSAob3B0aW9ucz86IFNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb25PcHRpb25zKSA9PlxuICBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uKGluamVjdChFbGVtZW50UmVmKSwgb3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50Q2hpbGRyZW4gPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSkgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG4gIGNvbnN0IGVsZW1lbnRNdXRhdGlvbnMgPSBzaWduYWxFbGVtZW50TXV0YXRpb25zKGVsZW1lbnRzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSwgYXR0cmlidXRlczogdHJ1ZSB9KTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgLy8gV2UgYXJlIG5vdCBpbnRlcmVzdGVkIHdoYXQgdGhlIG11dGF0aW9uIGlzLCBqdXN0IHRoYXQgdGhlcmUgaXMgb25lLlxuICAgIC8vIENoYW5nZXMgdG8gdGhlIERPTSBtYXkgYWZmZWN0IHRoZSBjaGlsZHJlbiBvZiB0aGUgZWxlbWVudC5cbiAgICBlbGVtZW50TXV0YXRpb25zKCk7XG5cbiAgICBpZiAoIWVscy5jdXJyZW50RWxlbWVudCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgY2hpbGRyZW46IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbHMuY3VycmVudEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxzLmN1cnJlbnRFbGVtZW50LmNoaWxkcmVuW2luZGV4XTtcblxuICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJldmlvdXNTaWduYWxWYWx1ZSA9IDxUPihzaWduYWw6IFNpZ25hbDxUPikgPT4ge1xuICBjb25zdCBvYnMgPSB0b09ic2VydmFibGUoc2lnbmFsKS5waXBlKFxuICAgIHBhaXJ3aXNlKCksXG4gICAgbWFwKChbcHJldl0pID0+IHByZXYpLFxuICApO1xuXG4gIHJldHVybiB0b1NpZ25hbChvYnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHN5bmNTaWduYWwgPSA8VD4oZnJvbTogU2lnbmFsPFQ+LCB0bzogV3JpdGFibGVTaWduYWw8VD4pID0+IHtcbiAgZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBmb3JtVmFsID0gZnJvbSgpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIHRvLnNldChmb3JtVmFsKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgMzAwXG4gICAqL1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWJvdW5jZUZpcnN0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnRyb2xWYWx1ZVNpZ25hbCA9IDxUIGV4dGVuZHMgRm9ybUNvbnRyb2wgfCBGb3JtR3JvdXAgfCBGb3JtQXJyYXk+KFxuICBjb250cm9sOiBULFxuICBvcHRpb25zPzogQ29udHJvbFZhbHVlU2lnbmFsT3B0aW9ucyxcbikgPT4ge1xuICBjb25zdCB2Y3NPYnMgPSBvcHRpb25zPy5kZWJvdW5jZVRpbWVcbiAgICA/IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKG9wdGlvbnM/LmRlYm91bmNlVGltZSA/PyAzMDApKVxuICAgIDogY29udHJvbC52YWx1ZUNoYW5nZXM7XG5cbiAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPFJldHVyblR5cGU8VFsnZ2V0UmF3VmFsdWUnXT4+ID0gb3B0aW9ucz8uZGVib3VuY2VGaXJzdFxuICAgID8gbWVyZ2Uob2YoY29udHJvbC52YWx1ZSksIHZjc09icylcbiAgICA6IHZjc09icy5waXBlKHN0YXJ0V2l0aChjb250cm9sLmdldFJhd1ZhbHVlKCkpKTtcblxuICByZXR1cm4gdG9TaWduYWwob2JzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGVxdWFsKGEsIGIpKSksIHtcbiAgICByZXF1aXJlU3luYzogdHJ1ZSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRoZSBmaXJzdCBpdGVtIGluIHRoZSBwYWlyIGlzIHRoZSBwcmV2aW91cyB2YWx1ZSBhbmQgdGhlIHNlY29uZCBpdGVtIGlzIHRoZSBjdXJyZW50IHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgY29udHJvbFZhbHVlU2lnbmFsV2l0aFByZXZpb3VzID0gPFQgZXh0ZW5kcyBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cCB8IEZvcm1BcnJheT4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiB7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShjb250cm9sVmFsdWVTaWduYWwoY29udHJvbCwgb3B0aW9ucykpLnBpcGUoXG4gICAgcGFpcndpc2UoKSxcbiAgICBzdGFydFdpdGgoW251bGwsIGNvbnRyb2wuZ2V0UmF3VmFsdWUoKV0pLFxuICApO1xuXG4gIHJldHVybiB0b1NpZ25hbChvYnMsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgY29udHJvbFZhbHVlU2lnbmFsYCBpbnN0ZWFkIHdpdGggYGRlYm91bmNlVGltZWAgb3B0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYm91bmNlZENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgMzAwXG4gICAqL1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBjb250cm9sVmFsdWVTaWduYWxgIGluc3RlYWQgd2l0aCBgZGVib3VuY2VUaW1lYCBzZXQgdG8gYDMwMGAgYW5kIGBkZWJvdW5jZUZpcnN0YCBzZXQgdG8gYHRydWVgLlxuICovXG5leHBvcnQgY29uc3QgZGVib3VuY2VkQ29udHJvbFZhbHVlU2lnbmFsID0gPFQgZXh0ZW5kcyBGb3JtQ29udHJvbD4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBEZWJvdW5jZWRDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiBjb250cm9sVmFsdWVTaWduYWwoY29udHJvbCwgb3B0aW9ucyA/PyB7IGRlYm91bmNlVGltZTogMzAwLCBkZWJvdW5jZUZpcnN0OiB0cnVlIH0pO1xuIl19
@@ -1604,8 +1604,13 @@ const signalStyles = (el, styleMap) => {
1604
1604
  return buildSignalEffects({
1605
1605
  map: styleMap,
1606
1606
  eachItemFn: ({ key, value }) => {
1607
- const valueString = `${value}`;
1608
- elements().currentElement?.style.setProperty(key, valueString);
1607
+ if (value === null || value === undefined) {
1608
+ elements().currentElement?.style.removeProperty(key);
1609
+ }
1610
+ else {
1611
+ const valueString = `${value}`;
1612
+ elements().currentElement?.style.setProperty(key, valueString);
1613
+ }
1609
1614
  },
1610
1615
  cleanupFn: ({ key }) => elements().currentElement?.style.removeProperty(key),
1611
1616
  });