@dcl/asset-packs 2.2.1 → 2.2.2-20250331213421.commit-fd9f596

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/dist/actions.js CHANGED
@@ -256,6 +256,11 @@ export function createActionsSystem(engine, pointerEventsSystem, sdkHelpers, pla
256
256
  Animator.stopAllAnimations(entity);
257
257
  }
258
258
  }
259
+ function normalizeAnimationWeight(rawWeight) {
260
+ if (rawWeight < 0 || rawWeight > 1)
261
+ return 1;
262
+ return rawWeight;
263
+ }
259
264
  function handlePlayAnimation(entity, payload) {
260
265
  const { animation, loop } = payload;
261
266
  const animator = Animator.getMutable(entity);
@@ -272,6 +277,7 @@ export function createActionsSystem(engine, pointerEventsSystem, sdkHelpers, pla
272
277
  const clip = Animator.getClip(entity, animation);
273
278
  clip.playing = true;
274
279
  clip.loop = loop ?? false;
280
+ clip.weight = normalizeAnimationWeight(clip.weight ?? 1);
275
281
  }
276
282
  catch (e) {
277
283
  console.error('Error playing animation', e);
@@ -934,4 +940,4 @@ export function createActionsSystem(engine, pointerEventsSystem, sdkHelpers, pla
934
940
  });
935
941
  }
936
942
  }
937
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxRQUFRLEVBQ1IsV0FBVyxFQU9YLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsS0FBSyxHQU1OLE1BQU0sVUFBVSxDQUFBO0FBQ2pCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ25ELE9BQU8sRUFDTCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUNqQixNQUFNLGdCQUFnQixDQUFBO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUMxRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFDWixpQkFBaUIsRUFDakIsZUFBZSxHQUNoQixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3hELE9BQU8sRUFBaUIsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFFTCxVQUFVLEVBR1YsY0FBYyxFQUVkLFdBQVcsRUFDWCxTQUFTLEVBQ1QsS0FBSyxFQUNMLGFBQWEsRUFDYixnQ0FBZ0MsR0FDakMsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUM1RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEdBQ1osTUFBTSxTQUFTLENBQUE7QUFDaEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzNDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsaUJBQWlCLEdBQ2xCLE1BQU0sTUFBTSxDQUFBO0FBQ2IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUVqRSxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFBO0FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFBO0FBQzFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUE7QUFFckQsSUFBSSxtQkFBbUIsR0FBc0MsSUFBSSxDQUFBO0FBRWpFLE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBYztJQUN4QyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDeEIsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNwQyxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYixrRUFBa0UsQ0FDbkUsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLE1BQWUsRUFDZixtQkFBd0MsRUFDeEMsVUFBd0IsRUFDeEIsYUFBOEI7SUFFOUIsTUFBTSxFQUNKLFFBQVEsRUFDUixTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLFdBQVcsRUFDWCxNQUFNLEVBQ04sWUFBWSxFQUNaLE9BQU8sRUFDUCxhQUFhLEVBQ2IsSUFBSSxFQUNKLEtBQUssRUFBRSxjQUFjLEVBQ3JCLGFBQWEsRUFDYixXQUFXLEdBQ1osR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNqQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUc3RSxtQkFBbUIsR0FBRyxXQUFXLENBQUE7SUFFakMsT0FBTyxTQUFTLGFBQWEsQ0FBQyxHQUFXO1FBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUUzRCxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBQzNDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNyQixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsU0FBUyxXQUFXLENBQUMsTUFBYztRQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkQsT0FBTTtRQUNSLENBQUM7UUFHRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBR25DLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUNoQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUN6QyxJQUFJLEdBQUcsRUFBVSxDQUNsQixDQUFBO1FBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNiLEtBQUssVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFBO29CQUN6QixNQUFLO2dCQUNQLENBQUM7Z0JBQ0Q7b0JBQ0UsTUFBSztZQUNULENBQUM7UUFDSCxDQUFDO1FBR0QsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzVDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ2hDLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNwQixLQUFLLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO3dCQUMvQixtQkFBbUIsQ0FDakIsTUFBTSxFQUNOLFVBQVUsQ0FBNEIsTUFBTSxDQUFDLENBQzlDLENBQUE7d0JBQ0QsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7d0JBQy9CLG1CQUFtQixDQUNqQixNQUFNLEVBQ04sVUFBVSxDQUE0QixNQUFNLENBQUMsQ0FDOUMsQ0FBQTt3QkFDRCxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQXVCLE1BQU0sQ0FBQyxDQUFDLENBQUE7d0JBQ2hFLE1BQUs7b0JBQ1AsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUF5QixNQUFNLENBQUMsQ0FBQyxDQUFBO3dCQUNwRSxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBeUIsTUFBTSxDQUFDLENBQUMsQ0FBQTt3QkFDcEUsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQzt3QkFDbEMsc0JBQXNCLENBQ3BCLE1BQU0sRUFDTixVQUFVLENBQStCLE1BQU0sQ0FBQyxDQUNqRCxDQUFBO3dCQUNELE1BQUs7b0JBQ1AsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLHFCQUFxQixDQUNuQixNQUFNLEVBQ04sVUFBVSxDQUE4QixNQUFNLENBQUMsQ0FDaEQsQ0FBQTt3QkFDRCxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQXdCLE1BQU0sQ0FBQyxDQUFDLENBQUE7d0JBQ2xFLE1BQUs7b0JBQ1AsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixlQUFlLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBd0IsTUFBTSxDQUFDLENBQUMsQ0FBQTt3QkFDbEUsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7d0JBQy9CLG1CQUFtQixDQUNqQixNQUFNLEVBQ04sVUFBVSxDQUE0QixNQUFNLENBQUMsQ0FDOUMsQ0FBQTt3QkFDRCxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO3dCQUNqQyxvQkFBb0IsQ0FDbEIsTUFBTSxFQUNOLFVBQVUsQ0FBOEIsTUFBTSxDQUFDLENBQ2hELENBQUE7d0JBQ0QsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQzt3QkFDbkMsc0JBQXNCLENBQ3BCLE1BQU0sRUFDTixVQUFVLENBQWdDLE1BQU0sQ0FBQyxDQUNsRCxDQUFBO3dCQUNELE1BQUs7b0JBQ1AsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7d0JBQ2xDLGVBQWUsQ0FDYixNQUFNLEVBQ04sVUFBVSxDQUErQixNQUFNLENBQUMsQ0FDakQsQ0FBQTt3QkFDRCxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO3dCQUNsQyxlQUFlLENBQ2IsTUFBTSxFQUNOLFVBQVUsQ0FBK0IsTUFBTSxDQUFDLENBQ2pELENBQUE7d0JBQ0QsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQzt3QkFDbEMscUJBQXFCLENBQ25CLE1BQU0sRUFDTixVQUFVLENBQStCLE1BQU0sQ0FBQyxDQUNqRCxDQUFBO3dCQUNELE1BQUs7b0JBQ1AsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7d0JBQ2xDLHFCQUFxQixDQUNuQixNQUFNLEVBQ04sVUFBVSxDQUErQixNQUFNLENBQUMsQ0FDakQsQ0FBQTt3QkFDRCxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzt3QkFDaEMsb0JBQW9CLENBQ2xCLE1BQU0sRUFDTixVQUFVLENBQTZCLE1BQU0sQ0FBQyxDQUMvQyxDQUFBO3dCQUNELE1BQUs7b0JBQ1AsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUF5QixNQUFNLENBQUMsQ0FBQyxDQUFBO3dCQUNwRSxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO3dCQUNuQyxzQkFBc0IsQ0FDcEIsTUFBTSxFQUNOLFVBQVUsQ0FBZ0MsTUFBTSxDQUFDLENBQ2xELENBQUE7d0JBQ0QsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQzt3QkFDbEMscUJBQXFCLENBQ25CLE1BQU0sRUFDTixVQUFVLENBQStCLE1BQU0sQ0FBQyxDQUNqRCxDQUFBO3dCQUNELE1BQUs7b0JBQ1AsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO3dCQUMxQixjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBdUIsTUFBTSxDQUFDLENBQUMsQ0FBQTt3QkFDaEUsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQzFCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUF1QixNQUFNLENBQUMsQ0FBQyxDQUFBO3dCQUNoRSxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQXVCLE1BQU0sQ0FBQyxDQUFDLENBQUE7d0JBQ2hFLE1BQUs7b0JBQ1AsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUF5QixNQUFNLENBQUMsQ0FBQyxDQUFBO3dCQUNwRSxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQXdCLE1BQU0sQ0FBQyxDQUFDLENBQUE7d0JBQ2xFLE1BQUs7b0JBQ1AsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixlQUFlLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBd0IsTUFBTSxDQUFDLENBQUMsQ0FBQTt3QkFDbEUsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQzFCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUF1QixNQUFNLENBQUMsQ0FBQyxDQUFBO3dCQUNoRSxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsaUJBQWlCLENBQ2YsTUFBTSxFQUNOLFVBQVUsQ0FBMEIsTUFBTSxDQUFDLENBQzVDLENBQUE7d0JBQ0QsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7d0JBQzlCLGtCQUFrQixDQUNoQixNQUFNLEVBQ04sVUFBVSxDQUEyQixNQUFNLENBQUMsQ0FDN0MsQ0FBQTt3QkFDRCxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQXdCLE1BQU0sQ0FBQyxDQUFDLENBQUE7d0JBQ2xFLE1BQUs7b0JBQ1AsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixlQUFlLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBd0IsTUFBTSxDQUFDLENBQUMsQ0FBQTt3QkFDbEUsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3ZCLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFvQixNQUFNLENBQUMsQ0FBQyxDQUFBO3dCQUMzRCxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO3dCQUNqQyxvQkFBb0IsQ0FDbEIsTUFBTSxFQUNOLFVBQVUsQ0FBOEIsTUFBTSxDQUFDLENBQ2hELENBQUE7d0JBQ0QsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7d0JBQzlCLGtCQUFrQixDQUNoQixNQUFNLEVBQ04sVUFBVSxDQUEyQixNQUFNLENBQUMsQ0FDN0MsQ0FBQTt3QkFDRCxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO3dCQUN0Qyx5QkFBeUIsQ0FDdkIsTUFBTSxFQUNOLFVBQVUsQ0FBbUMsTUFBTSxDQUFDLENBQ3JELENBQUE7d0JBQ0QsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7d0JBQ2hDLG1CQUFtQixDQUNqQixNQUFNLEVBQ04sVUFBVSxDQUE2QixNQUFNLENBQUMsQ0FDL0MsQ0FBQTt3QkFDRCxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO3dCQUNqQyxvQkFBb0IsQ0FDbEIsTUFBTSxFQUNOLFVBQVUsQ0FBOEIsTUFBTSxDQUFDLENBQ2hELENBQUE7d0JBQ0QsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7d0JBQ2hDLG1CQUFtQixDQUNqQixNQUFNLEVBQ04sVUFBVSxDQUE2QixNQUFNLENBQUMsQ0FDL0MsQ0FBQTt3QkFDRCxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO3dCQUNqQyxvQkFBb0IsQ0FDbEIsTUFBTSxFQUNOLFVBQVUsQ0FBOEIsTUFBTSxDQUFDLENBQ2hELENBQUE7d0JBQ0QsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7d0JBQzdCLGlCQUFpQixDQUNmLE1BQU0sRUFDTixVQUFVLENBQTBCLE1BQU0sQ0FBQyxDQUM1QyxDQUFBO3dCQUNELE1BQUs7b0JBQ1AsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO3dCQUM3QixpQkFBaUIsQ0FDZixNQUFNLEVBQ04sVUFBVSxDQUEwQixNQUFNLENBQUMsQ0FDNUMsQ0FBQTt3QkFDRCxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQXVCLE1BQU0sQ0FBQyxDQUFDLENBQUE7d0JBQ2hFLE1BQUs7b0JBQ1AsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN2QixZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBb0IsTUFBTSxDQUFDLENBQUMsQ0FBQTt3QkFDM0QsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3RCLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFtQixNQUFNLENBQUMsQ0FBQyxDQUFBO3dCQUN6RCxNQUFLO29CQUNQLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBeUIsTUFBTSxDQUFDLENBQUMsQ0FBQTt3QkFDcEUsTUFBSztvQkFDUCxDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7d0JBQzlCLGtCQUFrQixDQUNoQixNQUFNLEVBQ04sVUFBVSxDQUEyQixNQUFNLENBQUMsQ0FDN0MsQ0FBQTt3QkFDRCxNQUFLO29CQUNQLENBQUM7b0JBQ0Q7d0JBQ0UsTUFBSztnQkFDVCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBR0QsU0FBUyxpQkFBaUIsQ0FBQyxNQUFjO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLE1BQU0sRUFBRSxFQUFFO2FBQ1gsQ0FBQyxDQUFBO1lBQ0YsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxtQkFBbUIsQ0FDMUIsTUFBYyxFQUNkLE9BQWlEO1FBRWpELE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBRW5DLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkQsUUFBUSxDQUFDLE1BQU0sR0FBRztnQkFDaEIsR0FBRyxRQUFRLENBQUMsTUFBTTtnQkFDbEI7b0JBQ0UsSUFBSSxFQUFFLFNBQVM7aUJBQ2hCO2FBQ0YsQ0FBQTtRQUNILENBQUM7UUFFRCxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFbEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUE7WUFDaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7WUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksS0FBSyxDQUFBO1FBQzNCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsbUJBQW1CLENBQzFCLE1BQWMsRUFDZCxRQUFrRDtRQUVsRCxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN6QixRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGNBQWMsQ0FDckIsTUFBYyxFQUNkLE9BQTRDO1FBRTVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUU5QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzVDLElBQUksU0FBUyxHQUF1QixPQUFPLENBQUMsS0FBSyxDQUFBO1lBQ2pELFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQTtZQUN0RSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLFlBQVksSUFBSSxTQUFTLENBQUE7WUFDdEUsTUFBTSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7WUFDcEMsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUE7WUFFL0IsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDOUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDakQsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGdCQUFnQixDQUN2QixNQUFjLEVBQ2QsT0FBOEM7UUFFOUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUVaLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUM1RCxJQUFJLEtBQUssQ0FBQTtZQUVULFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyQixLQUFLLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUN6QixLQUFLLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtvQkFDdkMsTUFBSztnQkFDUCxDQUFDO2dCQUNELEtBQUssU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQzNCLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7b0JBQ3pDLE1BQUs7Z0JBQ1AsQ0FBQztnQkFDRCxLQUFLLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUMxQixLQUFLLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtvQkFDeEMsTUFBSztnQkFDUCxDQUFDO2dCQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7Z0JBQ3hELENBQUM7WUFDSCxDQUFDO1lBRUQsV0FBVyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLFdBQVcsQ0FDbEIsTUFBYyxFQUNkLFlBQTRCLEVBQzVCLEtBQWM7UUFFZCxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDNUQsSUFBSSxZQUFZLEdBQUc7WUFDakIsR0FBRyxLQUFLO1NBQ1QsQ0FBQTtRQUVELElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSTtZQUFFLE9BQU07UUFFbEUsUUFBUSxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2pDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDWixZQUFZLEdBQUc7b0JBQ2IsR0FBRyxZQUFZO29CQUNmLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDcEIsS0FBSyxFQUFHLEtBQUssQ0FBQyxJQUFzQyxDQUFDLElBQUksQ0FBQyxHQUFHO3dCQUM3RCxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztxQkFDbEMsQ0FBQztpQkFDSCxDQUFBO2dCQUNELE1BQUs7WUFDUCxDQUFDO1lBQ0QsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNkLFlBQVksR0FBRztvQkFDYixHQUFHLFlBQVk7b0JBQ2YsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO3dCQUN0QixLQUFLLEVBQUcsS0FBSyxDQUFDLElBQTRDLENBQUMsTUFBTTs2QkFDOUQsR0FBRzt3QkFDTixHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztxQkFDcEMsQ0FBQztpQkFDSCxDQUFBO2dCQUNELE1BQUs7WUFDUCxDQUFDO1lBQ0QsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNiLFlBQVksR0FBRztvQkFDYixHQUFHLFlBQVk7b0JBQ2YsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNyQixLQUFLLEVBQUcsS0FBSyxDQUFDLElBQXlDLENBQUMsS0FBSyxDQUFDLEdBQUc7d0JBQ2pFLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO3FCQUNuQyxDQUFDO2lCQUNILENBQUE7Z0JBQ0QsTUFBSztZQUNQLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQzdELENBQUM7UUFDSCxDQUFDO1FBR0QsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7UUFDM0IsYUFBYSxDQUFDLFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBR0QsU0FBUyxjQUFjLENBQ3JCLE1BQWMsRUFDZCxLQUE0QztRQUU1QyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3ZDLE1BQU0sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFBO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqRSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO1FBRXpFLE9BQU8sY0FBYyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDNUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNwQixLQUFLLEVBQUUsU0FBUyxDQUFDLFFBQVE7Z0JBQ3pCLEdBQUcsRUFBRSxXQUFXO2FBQ2pCLENBQUM7WUFDRixRQUFRLEVBQUUsUUFBUSxHQUFHLElBQUk7WUFDekIsY0FBYyxFQUFFLGtDQUFrQyxDQUFDLGlCQUFpQixDQUFDO1NBQ3RFLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFHRCxTQUFTLGdCQUFnQixDQUN2QixNQUFjLEVBQ2QsS0FBNEM7UUFFNUMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN2QyxNQUFNLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQTtRQUN2RCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQ3JDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNYLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNYLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNaLENBQUE7UUFDRCxNQUFNLFdBQVcsR0FBRyxRQUFRO1lBQzFCLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO1lBQzlDLENBQUMsQ0FBQyxHQUFHLENBQUE7UUFFUCxPQUFPLGNBQWMsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQzVDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDdEIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxRQUFRO2dCQUN6QixHQUFHLEVBQUUsV0FBVzthQUNqQixDQUFDO1lBQ0YsUUFBUSxFQUFFLFFBQVEsR0FBRyxJQUFJO1lBQ3pCLGNBQWMsRUFBRSxrQ0FBa0MsQ0FBQyxpQkFBaUIsQ0FBQztTQUN0RSxDQUFDLENBQUE7SUFDSixDQUFDO0lBR0QsU0FBUyxlQUFlLENBQ3RCLE1BQWMsRUFDZCxLQUE0QztRQUU1QyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3ZDLE1BQU0sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFBO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqRSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO1FBRW5FLE9BQU8sY0FBYyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDNUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNyQixLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUs7Z0JBQ3RCLEdBQUcsRUFBRSxRQUFRO2FBQ2QsQ0FBQztZQUNGLFFBQVEsRUFBRSxRQUFRLEdBQUcsSUFBSTtZQUN6QixjQUFjLEVBQUUsa0NBQWtDLENBQUMsaUJBQWlCLENBQUM7U0FDdEUsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUdELFNBQVMsZ0JBQWdCLENBQ3ZCLE1BQWMsRUFDZCxPQUE4QztRQUU5QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFaEQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQTtZQUUvQixNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUM5QyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxzQkFBc0IsQ0FDN0IsTUFBYyxFQUNkLE9BQW9EO1FBRXBELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNoRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQTtRQUVsQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUE7WUFFdkIsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDOUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMscUJBQXFCLENBQzVCLE1BQWMsRUFDZCxPQUFvRDtRQUVwRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDaEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUE7UUFFbEMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFBO1lBRXZCLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzlDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGVBQWUsQ0FDdEIsTUFBYyxFQUNkLE9BQTZDO1FBRTdDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUNyQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM1QixXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUNsQyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2xELFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1lBQ3ZCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQTtRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNOLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUN6QixZQUFZLEVBQUUsR0FBRztnQkFDakIsSUFBSTtnQkFDSixPQUFPLEVBQUUsSUFBSTtnQkFDYixNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7YUFDcEIsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGVBQWUsQ0FDdEIsTUFBYyxFQUNkLFFBQThDO1FBRTlDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4RCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLFdBQVcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxtQkFBbUIsQ0FDMUIsTUFBYyxFQUNkLE9BQWlEO1FBRWpELE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBQ3JDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQ3hELE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuRCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFMUQsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDM0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsNEJBQTRCLEdBQUcsUUFBUSxDQUFBO1lBQzlDLENBQUM7aUJBQU0sSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDeEIsWUFBWSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUE7WUFDdkMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxvQkFBb0IsQ0FDM0IsTUFBYyxFQUNkLE9BQW1EO1FBRW5ELE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFDakMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFBO0lBQ3pELENBQUM7SUFHRCxTQUFTLHNCQUFzQixDQUM3QixNQUFjLEVBQ2QsUUFBc0Q7UUFFdEQsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDN0IsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsb0JBQW9CLENBQzNCLE9BQWUsRUFDZixPQUFrRDtRQUVsRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUN4QixlQUFlLENBQUM7WUFDZCxXQUFXLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1NBQ3pCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFHRCxTQUFTLGdCQUFnQixDQUN2QixPQUFlLEVBQ2YsT0FBOEM7UUFFOUMsTUFBTSxPQUFPLEdBQUc7WUFDZCxtQkFBbUIsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUNyQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7U0FDbkMsQ0FBQTtRQUNELEtBQUssWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFHRCxTQUFTLHNCQUFzQixDQUM3QixPQUFlLEVBQ2YsT0FBcUQ7UUFFckQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUN6QixLQUFLLFlBQVksQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFHRCxTQUFTLHFCQUFxQixDQUM1QixPQUFlLEVBQ2YsT0FBb0Q7UUFFcEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFDN0IsS0FBSyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFHRCxTQUFTLGNBQWMsQ0FDckIsT0FBZSxFQUNmLE9BQTRDO1FBRTVDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFDdkIsS0FBSyxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxLQUFLLFVBQVUsV0FBVyxDQUFDLEVBQ3pCLEdBQUcsRUFDSCxPQUFPLEdBQ3FDO1FBQzVDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNuRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDdEQsQ0FBQztRQUNELE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQTtJQUNsQixDQUFDO0lBR0QsU0FBUyxlQUFlLENBQ3RCLE1BQWMsRUFDZCxPQUFvRDtRQUVwRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFeEQsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ25DLFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBRU4sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsR0FBRztvQkFBRSxPQUFNO2dCQUVoQixXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtvQkFDbEMsR0FBRztvQkFDSCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDO29CQUMzQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxLQUFLO29CQUMzQixPQUFPLEVBQUUsSUFBSTtpQkFDZCxDQUFDLENBQUE7Z0JBR0YsZ0NBQWdDLENBQzlCLE1BQU0sRUFDTixFQUFFLFFBQVEsRUFBRSxFQUNaLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQzNCLENBQUE7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxlQUFlLENBQ3RCLE1BQWMsRUFDZCxRQUFxRDtRQUVyRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDeEQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixXQUFXLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMscUJBQXFCLENBQzVCLE1BQWMsRUFDZCxPQUFvRDtRQUVwRCxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUMvQixXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUNsQyxHQUFHO1lBQ0gsT0FBTyxFQUFFLElBQUk7WUFDYixNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7U0FDcEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUdELFNBQVMscUJBQXFCLENBQzVCLE1BQWMsRUFDZCxRQUFxRDtRQUVyRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDeEQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixXQUFXLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsY0FBYyxDQUNyQixNQUFjLEVBQ2QsT0FBNEM7UUFFNUMsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUNyRSxNQUFNLG9CQUFvQixHQUFHLGNBQWMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDaEUsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO2dCQUM3QixLQUFLLEVBQUUsSUFBSTtnQkFDWCxJQUFJLEVBQUUsSUFBdUI7Z0JBQzdCLFFBQVE7Z0JBQ1IsU0FBUyxFQUFFLFNBQXFDO2FBQ2pELENBQUMsQ0FBQTtZQUNGLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FDaEUsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FDM0IsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxjQUFjLENBQ3JCLE1BQWMsRUFDZCxRQUE2QztRQUU3QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2hELElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDcEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN6QyxPQUFPLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFHRCxTQUFTLGdCQUFnQixDQUN2QixNQUFjLEVBQ2QsT0FBOEM7UUFFOUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFDcEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUE7WUFDbkQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUM3QyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUE7b0JBQzVDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtnQkFDcEQsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGVBQWUsQ0FDdEIsTUFBYyxFQUNkLE9BQTZDO1FBRTdDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFDMUIsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUM3QixDQUFDO0lBR0QsU0FBUyxlQUFlLENBQ3RCLE1BQWMsRUFDZCxPQUE2QztRQUU3QyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUNyQyxLQUFLLE1BQU0sVUFBVSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQTtZQUNuRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLGFBQWEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBQy9DLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtvQkFDNUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO2dCQUNwRCxDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsY0FBYyxDQUNyQixNQUFjLEVBQ2QsT0FBNEM7UUFFNUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUMxQixZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFHRCxTQUFTLGlCQUFpQixDQUN4QixNQUFjLEVBQ2QsT0FBK0M7UUFFL0MsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUc1QixNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FDaEMsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsQ0FDWCxDQUFBO1FBQ0QsS0FBSyxNQUFNLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUV2QyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDbkIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBRXBCLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzlDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzFDLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDdEQsU0FBUyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDL0IsQ0FBQztJQUdELFNBQVMsa0JBQWtCLENBQ3pCLE1BQWMsRUFDZCxRQUFpRDtRQUdqRCxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDdkIsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFeEIsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUM5RCxLQUFLLE1BQU0sY0FBYyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFzQjtRQUN4QyxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBRXpELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDdkMsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQTtJQUMzQixDQUFDO0lBR0QsU0FBUyxlQUFlLENBQ3RCLE1BQWMsRUFDZCxPQUE2QztRQUU3QyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FDbkUsT0FBTyxDQUFBO1FBR1QsY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7UUFHOUMsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDaEQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBSXZDLE1BQU0seUJBQXlCLEdBQUcsY0FBYyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN0RSx5QkFBeUIsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQTtRQUM3RCx5QkFBeUIsQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQTtRQUNyRSx5QkFBeUIsQ0FBQyxZQUFZLElBQStCLENBQUE7UUFHckUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBQ3RDLE1BQU0sdUJBQXVCLEdBQUcsY0FBYyxDQUM1QyxXQUFXLEVBQ1gsV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLElBRVAsQ0FBQTtRQUNELHVCQUF1QixDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUE7UUFDeEMsdUJBQXVCLENBQUMsYUFBYSxJQUE4QixDQUFBO1FBR25FLGVBQWUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBRS9DLElBQUksSUFBSSxFQUFFLENBQUM7WUFHVCxTQUFTLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ3ZELENBQUM7UUFFRCxtQkFBbUIsQ0FBQyxhQUFhLENBQy9CO1lBQ0UsTUFBTSxFQUFFLFdBQVc7WUFDbkIsSUFBSSxFQUFFO2dCQUNKLE1BQU0sR0FBd0I7Z0JBQzlCLFNBQVMsRUFBRSxPQUFPO2FBQ25CO1NBQ0YsRUFDRCxHQUFHLEVBQUU7WUFDSCxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1lBQzVDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzlDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ2hELENBQUMsQ0FDRixDQUFBO1FBRUQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FDakUsZUFBZSxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUN0RCxDQUFBO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGVBQWUsQ0FDdEIsTUFBYyxFQUNkLE9BQTZDO1FBRTdDLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFFL0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsWUFBWSxDQUFDLFdBQXFCLENBQUMsQ0FBQTtRQUM1QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNwRCxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNqQixNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFBO2dCQUNqQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDcEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxZQUFZLENBQ25CLE1BQWMsRUFDZCxPQUF5QztRQUV6QyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFDdkMsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDN0MsQ0FBQyxDQUFDLGlCQUFpQixFQUFFO1lBQ3JCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUU1QixNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQWMsRUFBVSxFQUFFO1lBQ3pDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUN0QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMzQyxDQUFDLENBQUE7UUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ25DLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQy9DLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFBO1lBR2pFLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQzNCLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQ2xELENBQUE7WUFDRCxNQUFNLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQTtZQUMvRCxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3ZCLFNBQVE7WUFDVixDQUFDO1lBRUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixJQUFJLEtBQUssS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3BDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtvQkFDNUIsSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLFlBQVksSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUNqRSxTQUFRO29CQUNWLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxJQUFJLEtBQUssS0FBSyxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQy9DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtvQkFDNUIsSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLFlBQVksSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUNqRSxTQUFRO29CQUNWLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtnQkFDeEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUMvQixNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtvQkFDOUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQzNDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLG9CQUFvQixDQUMzQixNQUFjLEVBQ2QsUUFBb0Q7UUFFcEQsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDckMsS0FBSyxZQUFZLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ2hELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzlDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQ2pELENBQUM7SUFHRCxTQUFTLG1CQUFtQixDQUMxQixNQUFjLEVBQ2QsUUFBbUQ7UUFFbkQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3BELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3ZELElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLFNBQVMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQTtRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsb0JBQW9CLENBQzNCLE1BQWMsRUFDZCxRQUFvRDtRQUVwRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDcEQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDdkQsSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFLENBQUM7WUFDeEIsU0FBUyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxtQkFBbUIsQ0FDMUIsTUFBYyxFQUNkLFFBQW1EO1FBRW5ELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNwRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUN2RCxJQUFJLFNBQVMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN4QixTQUFTLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUE7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLG9CQUFvQixDQUMzQixNQUFjLEVBQ2QsUUFBb0Q7UUFFcEQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3BELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3ZELElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLFNBQVMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQTtRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsaUJBQWlCLENBQ3hCLE1BQWMsRUFDZCxPQUErQztRQUUvQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDcEQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNyQixTQUFTLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQzlCLFNBQVMsQ0FBQyxRQUFRLEVBQ2xCLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDaEQsQ0FBQTtZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixTQUFTLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN0RSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGlCQUFpQixDQUN4QixNQUFjLEVBQ2QsT0FBK0M7UUFFL0MsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3BELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckIsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUN0QyxTQUFTLENBQUMsUUFBUSxFQUNsQixVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDN0QsQ0FBQTtZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FDOUMsT0FBTyxDQUFDLENBQUMsRUFDVCxPQUFPLENBQUMsQ0FBQyxFQUNULE9BQU8sQ0FBQyxDQUFDLENBQ1YsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsY0FBYyxDQUNyQixNQUFjLEVBQ2QsT0FBNEM7UUFFNUMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3BELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckIsU0FBUyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUMzQixTQUFTLENBQUMsS0FBSyxFQUNmLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDaEQsQ0FBQTtZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixTQUFTLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNuRSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGtCQUFrQixDQUN6QixNQUFjLEVBQ2QsT0FBZ0Q7UUFFaEQsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFDL0MsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDcEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1lBQzNCLEtBQUs7WUFDTCxXQUFXO1lBQ1gsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7U0FDbEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUdELFNBQVMseUJBQXlCLENBQ2hDLE1BQWMsRUFDZCxRQUF5RDtRQUV6RCxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzFCLENBQUM7SUFFRCxTQUFTLFlBQVksQ0FDbkIsTUFBYyxFQUNkLE9BQXlDO1FBRXpDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFDM0IsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzVDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUN0RSxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDbkQsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsV0FBVyxDQUNsQixNQUFjLEVBQ2QsT0FBd0M7UUFFeEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUMzQixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDNUMsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUE7WUFDbkQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFDcEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxnQkFBZ0IsQ0FDdkIsTUFBYyxFQUNkLE9BQThDO1FBRTlDLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFFOUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFjLEVBQVUsRUFBRTtZQUN6QyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDM0MsQ0FBQyxDQUFBO1FBRUQsS0FBSyxNQUFNLE1BQU0sSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDNUIsSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNqQyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO2dCQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQy9CLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFBO2dCQUNoRCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxVQUFVLE9BQU8sQ0FBQyxHQUFXLEVBQUUsSUFBb0I7UUFDdEQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxXQUFXLENBQUM7Z0JBQ2pDLEdBQUcsRUFBRSxHQUFHO2dCQUNSLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUMxQixDQUFDLENBQUE7WUFDRixJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUdoQyxPQUFPLElBQUksQ0FBQTtZQUNiLENBQUM7WUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRTVDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBR2IsT0FBTyxJQUFJLENBQUE7WUFDYixDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQ2xCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBR2YsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssVUFBVSw0QkFBNEIsQ0FBQyxZQUFvQjtRQUM5RCxNQUFNLEdBQUcsR0FBRyxHQUFHLGtCQUFrQixvQ0FBb0Msa0JBQWtCLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQTtRQUN2RyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNuQyxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBRUQsS0FBSyxVQUFVLFlBQVk7UUFDekIsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxrQkFBa0IsY0FBYyxFQUFFO1lBQ2xFLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7U0FDRixDQUFDLENBQUE7UUFDRixPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBRUQsS0FBSyxVQUFVLFlBQVksQ0FDekIsWUFBb0IsRUFDcEIsT0FHQztRQUVELE1BQU0sR0FBRyxHQUFHLEdBQUcsa0JBQWtCLGNBQWMsQ0FBQTtRQUMvQyxNQUFNLEtBQUssR0FBRyxNQUFNLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNoQyxNQUFNLE1BQU0sR0FBRyxhQUFhLEVBQUUsU0FBUyxFQUFFLENBQUE7UUFFekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ2xDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsWUFBWSxFQUFFLFlBQVk7Z0JBQzFCLFdBQVcsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25ELFFBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDeEQsR0FBRyxDQUFDLE9BQU87b0JBQ1QsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUU7b0JBQzFELENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDUixDQUFDO1NBQ0gsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUVELFNBQVMsa0JBQWtCLENBQ3pCLE1BQWMsRUFDZCxRQUFpRDtRQUVqRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBRXRELElBQUksUUFBUSxFQUFFLENBQUM7WUFHYixPQUFNO1FBQ1IsQ0FBQztRQUVELDRCQUE0QixDQUFDLFlBQVksQ0FBQzthQUN2QyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNsQixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUM3QixDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxVQUFVLENBQ3pDLENBQUE7WUFDRCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQzlCLFlBQVksRUFBRTt5QkFDWCxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTt3QkFDaEIsSUFBSSxPQUFPLEVBQUUsQ0FBQzs0QkFDWixrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7Z0NBQ3pCLFVBQVU7Z0NBQ1YsWUFBWTtnQ0FDWixPQUFPOzZCQUNSLENBQUMsQ0FBQTt3QkFDSixDQUFDO29CQUNILENBQUMsQ0FBQzt5QkFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFHakIsQ0FBQyxDQUFDLENBQUE7Z0JBQ04sQ0FBQztxQkFBTSxDQUFDO29CQUNOLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQTtnQkFDNUIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUdqQixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxTQUFTLGtCQUFrQixDQUN6QixPQUFlLEVBQ2YsSUFBZ0U7UUFFaEUsaUJBQWlCLENBQ2YsTUFBTSxFQUNOLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLE9BQU8sRUFDUCxhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLElBQUksRUFDSixDQUFDLFNBQVMsRUFBRSxFQUFFO1lBRVosWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQzlCLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ25CLEtBQUssRUFBRSxTQUFTO2FBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDckIsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFFWixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQ0YsQ0FBQTtJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSUVuZ2luZSxcbiAgRW50aXR5LFxuICBNYXRlcmlhbCxcbiAgQXVkaW9TdHJlYW0sXG4gIFlHVW5pdCxcbiAgVGV4dEFsaWduTW9kZSxcbiAgRm9udCxcbiAgWUdQb3NpdGlvblR5cGUsXG4gIFBvaW50ZXJGaWx0ZXJNb2RlLFxuICBJbnB1dEFjdGlvbixcbiAgTWVzaENvbGxpZGVyLFxuICBnZXRDb21wb25lbnRFbnRpdHlUcmVlLFxuICBUd2VlbixcbiAgTW92ZSxcbiAgUEJUd2VlbixcbiAgUm90YXRlLFxuICBTY2FsZSxcbiAgUG9pbnRlckV2ZW50c1N5c3RlbSxcbn0gZnJvbSAnQGRjbC9lY3MnXG5pbXBvcnQgeyBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAnQGRjbC9zZGsvbWF0aCdcbmltcG9ydCB7XG4gIGdldEVudGl0eVBhcmVudCxcbiAgZ2V0UGxheWVyUG9zaXRpb24sXG4gIGdldFdvcmxkUG9zaXRpb24sXG59IGZyb20gJ0BkY2wtc2RrL3V0aWxzJ1xuaW1wb3J0IHsgcmVxdWVzdFRlbGVwb3J0IH0gZnJvbSAnfnN5c3RlbS9Vc2VyQWN0aW9uTW9kdWxlJ1xuaW1wb3J0IHtcbiAgbW92ZVBsYXllclRvLFxuICB0cmlnZ2VyRW1vdGUsXG4gIHRyaWdnZXJTY2VuZUVtb3RlLFxuICBvcGVuRXh0ZXJuYWxVcmwsXG59IGZyb20gJ35zeXN0ZW0vUmVzdHJpY3RlZEFjdGlvbnMnXG5pbXBvcnQgeyBnZXRBY3RpdmVWaWRlb1N0cmVhbXMgfSBmcm9tICd+c3lzdGVtL0NvbW1zQXBpJ1xuaW1wb3J0IHsgRmxhdEZldGNoSW5pdCwgc2lnbmVkRmV0Y2ggfSBmcm9tICd+c3lzdGVtL1NpZ25lZEZldGNoJ1xuaW1wb3J0IHsgZ2V0UmVhbG0gfSBmcm9tICd+c3lzdGVtL1J1bnRpbWUnXG5pbXBvcnQge1xuICBBY3Rpb25QYXlsb2FkLFxuICBBY3Rpb25UeXBlLFxuICBJU0RLSGVscGVycyxcbiAgSVBsYXllcnNIZWxwZXIsXG4gIFByb3hpbWl0eUxheWVyLFxuICBTY3JlZW5BbGlnbk1vZGUsXG4gIFRyaWdnZXJUeXBlLFxuICBUd2VlblR5cGUsXG4gIGNsb25lLFxuICBnZXRDb21wb25lbnRzLFxuICBpbml0VmlkZW9QbGF5ZXJDb21wb25lbnRNYXRlcmlhbCxcbn0gZnJvbSAnLi9kZWZpbml0aW9ucydcbmltcG9ydCB7IGdldERlZmF1bHRWYWx1ZSwgaXNWYWxpZFN0YXRlIH0gZnJvbSAnLi9zdGF0ZXMnXG5pbXBvcnQgeyBnZXRBY3Rpb25FdmVudHMsIGdldFRyaWdnZXJFdmVudHMgfSBmcm9tICcuL2V2ZW50cydcbmltcG9ydCB7XG4gIHN0YXJ0SW50ZXJ2YWwsXG4gIHN0YXJ0VGltZW91dCxcbiAgc3RvcEFsbEludGVydmFscyxcbiAgc3RvcEFsbFRpbWVvdXRzLFxuICBzdG9wSW50ZXJ2YWwsXG4gIHN0b3BUaW1lb3V0LFxufSBmcm9tICcuL3RpbWVyJ1xuaW1wb3J0IHsgZ2V0UGF5bG9hZCB9IGZyb20gJy4vYWN0aW9uLXR5cGVzJ1xuaW1wb3J0IHtcbiAgZ2V0VUlCYWNrZ3JvdW5kLFxuICBnZXRVSVRleHQsXG4gIGdldFVJVHJhbnNmb3JtLFxuICBtYXBBbGlnblRvU2NyZWVuQWxpZ24sXG4gIHNob3dDYXB0Y2hhUHJvbXB0LFxufSBmcm9tICcuL3VpJ1xuaW1wb3J0IHsgZ2V0RXhwbG9yZXJDb21wb25lbnRzIH0gZnJvbSAnLi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgaW5pdFRyaWdnZXJzLCBkYW1hZ2VUYXJnZXRzLCBoZWFsVGFyZ2V0cyB9IGZyb20gJy4vdHJpZ2dlcnMnXG5pbXBvcnQgeyBmb2xsb3dNYXAgfSBmcm9tICcuL3RyYW5zZm9ybSdcbmltcG9ydCB7IGdldEVhc2luZ0Z1bmN0aW9uRnJvbUludGVycG9sYXRpb24gfSBmcm9tICcuL3R3ZWVucydcbmltcG9ydCB7IFJFV0FSRFNfU0VSVkVSX1VSTCB9IGZyb20gJy4vYWRtaW4tdG9vbGtpdC11aS9jb25zdGFudHMnXG5cbmNvbnN0IGluaXRlZEVudGl0aWVzID0gbmV3IFNldDxFbnRpdHk+KClcbmNvbnN0IHVpU3RhY2tzID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eT4oKVxuY29uc3QgbGFzdFVpRW50aXR5Q2xpY2tlZCA9IG5ldyBNYXA8RW50aXR5LCBFbnRpdHk+KClcblxubGV0IGludGVybmFsSW5pdEFjdGlvbnM6ICgoZW50aXR5OiBFbnRpdHkpID0+IHZvaWQpIHwgbnVsbCA9IG51bGxcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRBY3Rpb25zKGVudGl0eTogRW50aXR5KSB7XG4gIGlmIChpbnRlcm5hbEluaXRBY3Rpb25zKSB7XG4gICAgcmV0dXJuIGludGVybmFsSW5pdEFjdGlvbnMoZW50aXR5KVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgQ2Fubm90IGNhbGwgaW5pdEFjdGlvbnMgd2hpbGUgYWN0aW9uc1N5c3RlbSBoYXMgbm90IGJlZW4gY3JlYXRlZGAsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbnNTeXN0ZW0oXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgcG9pbnRlckV2ZW50c1N5c3RlbTogUG9pbnRlckV2ZW50c1N5c3RlbSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuICBwbGF5ZXJzSGVscGVyPzogSVBsYXllcnNIZWxwZXIsXG4pIHtcbiAgY29uc3Qge1xuICAgIEFuaW1hdG9yLFxuICAgIFRyYW5zZm9ybSxcbiAgICBBdWRpb1NvdXJjZSxcbiAgICBBdmF0YXJBdHRhY2gsXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudCxcbiAgICBHbHRmQ29udGFpbmVyLFxuICAgIFVpVHJhbnNmb3JtLFxuICAgIFVpVGV4dCxcbiAgICBVaUJhY2tncm91bmQsXG4gICAgVWlJbnB1dCxcbiAgICBVaUlucHV0UmVzdWx0LFxuICAgIE5hbWUsXG4gICAgVHdlZW46IFR3ZWVuQ29tcG9uZW50LFxuICAgIFR3ZWVuU2VxdWVuY2UsXG4gICAgVmlkZW9QbGF5ZXIsXG4gIH0gPSBnZXRFeHBsb3JlckNvbXBvbmVudHMoZW5naW5lKVxuICBjb25zdCB7IEFjdGlvbnMsIFN0YXRlcywgQ291bnRlciwgVHJpZ2dlcnMsIFJld2FyZHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKVxuXG4gIC8vIHNhdmUgaW50ZXJuYWwgcmVmZXJlbmNlIHRvIGluaXQgZnVuY2lvblxuICBpbnRlcm5hbEluaXRBY3Rpb25zID0gaW5pdEFjdGlvbnNcblxuICByZXR1cm4gZnVuY3Rpb24gYWN0aW9uc1N5c3RlbShfZHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGVudGl0aWVzV2l0aEFjdGlvbnMgPSBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKEFjdGlvbnMpXG5cbiAgICBmb3IgKGNvbnN0IFtlbnRpdHldIG9mIGVudGl0aWVzV2l0aEFjdGlvbnMpIHtcbiAgICAgIGluaXRBY3Rpb25zKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0QWN0aW9ucyhlbnRpdHk6IEVudGl0eSkge1xuICAgIGlmICghQWN0aW9ucy5oYXMoZW50aXR5KSB8fCBpbml0ZWRFbnRpdGllcy5oYXMoZW50aXR5KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gZ2V0IGFjdGlvbnMgZGF0YVxuICAgIGNvbnN0IGFjdGlvbnMgPSBBY3Rpb25zLmdldChlbnRpdHkpXG5cbiAgICAvLyBpbml0aWFsaXplIGFjdGlvbnMgZm9yIGdpdmVuIGVudGl0eVxuICAgIGNvbnN0IHR5cGVzID0gYWN0aW9ucy52YWx1ZS5yZWR1Y2UoXG4gICAgICAodHlwZXMsIGFjdGlvbikgPT4gdHlwZXMuYWRkKGFjdGlvbi50eXBlKSxcbiAgICAgIG5ldyBTZXQ8U3RyaW5nPigpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTjoge1xuICAgICAgICAgIGluaXRQbGF5QW5pbWF0aW9uKGVudGl0eSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBiaW5kIGFjdGlvbnNcbiAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KVxuICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMudmFsdWUpIHtcbiAgICAgIGFjdGlvbkV2ZW50cy5vbihhY3Rpb24ubmFtZSwgKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5QW5pbWF0aW9uKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTj4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTjoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcEFuaW1hdGlvbihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT04+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1NUQVRFOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRTdGF0ZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfU1RBVEU+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RBUlRfVFdFRU46IHtcbiAgICAgICAgICAgIGhhbmRsZVN0YXJ0VHdlZW4oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX0NPVU5URVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVNldENvdW50ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX0NPVU5URVI+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUluY3JlbWVudENvdW50ZXIoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkRFQ1JFQVNFX0NPVU5URVI6IHtcbiAgICAgICAgICAgIGhhbmRsZURlY3JlYXNlQ291bnRlcihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuREVDUkVBU0VfQ09VTlRFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX1NPVU5EOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5U291bmQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9TT1VORD4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX1NPVU5EOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wU291bmQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9TT1VORD4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfVklTSUJJTElUWToge1xuICAgICAgICAgICAgaGFuZGxlU2V0VmlzaWJpbGl0eShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQVRUQUNIX1RPX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlQXR0YWNoVG9QbGF5ZXIoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVEZXRhY2hGcm9tUGxheWVyKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ERVRBQ0hfRlJPTV9QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlWaWRlbyhcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BWaWRlbyhcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlBdWRpb1N0cmVhbShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BBdWRpb1N0cmVhbShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuVEVMRVBPUlRfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVUZWxlcG9ydFBsYXllcihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuVEVMRVBPUlRfUExBWUVSPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLk1PVkVfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVNb3ZlUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLk1PVkVfUExBWUVSPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfREVGQVVMVF9FTU9URToge1xuICAgICAgICAgICAgaGFuZGxlUGxheURlZmF1bHRFbW90ZShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9ERUZBVUxUX0VNT1RFPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5Q3VzdG9tRW1vdGUoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLk9QRU5fTElOSzoge1xuICAgICAgICAgICAgaGFuZGxlT3BlbkxpbmsoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuT1BFTl9MSU5LPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNIT1dfVEVYVDoge1xuICAgICAgICAgICAgaGFuZGxlU2hvd1RleHQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0hPV19URVhUPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkhJREVfVEVYVDoge1xuICAgICAgICAgICAgaGFuZGxlSGlkZVRleHQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSElERV9URVhUPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUQVJUX0RFTEFZOiB7XG4gICAgICAgICAgICBoYW5kbGVTdGFydERlbGF5KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0RFTEFZPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfREVMQVk6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BEZWxheShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0RFTEFZPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUQVJUX0xPT1A6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0YXJ0TG9vcChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9MT09QPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfTE9PUDoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcExvb3AoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9MT09QPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNMT05FX0VOVElUWToge1xuICAgICAgICAgICAgaGFuZGxlQ2xvbmVFbnRpdHkoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNMT05FX0VOVElUWT4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5SRU1PVkVfRU5USVRZOiB7XG4gICAgICAgICAgICBoYW5kbGVSZW1vdmVFbnRpdHkoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0hPV19JTUFHRToge1xuICAgICAgICAgICAgaGFuZGxlU2hvd0ltYWdlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfSU1BR0U+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSElERV9JTUFHRToge1xuICAgICAgICAgICAgaGFuZGxlSGlkZUltYWdlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfSU1BR0U+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREFNQUdFOiB7XG4gICAgICAgICAgICBoYW5kbGVEYW1hZ2UoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuREFNQUdFPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLk1PVkVfUExBWUVSX0hFUkU6IHtcbiAgICAgICAgICAgIGhhbmRsZU1vdmVQbGF5ZXJIZXJlKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5NT1ZFX1BMQVlFUl9IRVJFPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkZPTExPV19QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUZvbGxvd1BsYXllcihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuRk9MTE9XX1BMQVlFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0ZPTExPV0lOR19QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BGb2xsb3dpbmdQbGF5ZXIoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfRk9MTE9XSU5HX1BMQVlFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFDRV9PTl9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYWNlT25QbGF5ZXIoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQUNFX09OX1BMQVlFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ST1RBVEVfQVNfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVSb3RhdGVBc1BsYXllcihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUk9UQVRFX0FTX1BMQVlFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFDRV9PTl9DQU1FUkE6IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYWNlT25DYW1lcmEoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQUNFX09OX0NBTUVSQT4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ST1RBVEVfQVNfQ0FNRVJBOiB7XG4gICAgICAgICAgICBoYW5kbGVSb3RhdGVBc0NhbWVyYShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUk9UQVRFX0FTX0NBTUVSQT4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfUE9TSVRJT046IHtcbiAgICAgICAgICAgIGhhbmRsZVNldFBvc2l0aW9uKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfUE9TSVRJT04+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1JPVEFUSU9OOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRSb3RhdGlvbihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1JPVEFUSU9OPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9TQ0FMRToge1xuICAgICAgICAgICAgaGFuZGxlU2V0U2NhbGUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NDQUxFPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlJBTkRPTToge1xuICAgICAgICAgICAgaGFuZGxlUmFuZG9tKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlJBTkRPTT4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5CQVRDSDoge1xuICAgICAgICAgICAgaGFuZGxlQmF0Y2goZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQkFUQ0g+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSEVBTF9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUhlYWxQbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSEVBTF9QTEFZRVI+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQ0xBSU1fQUlSRFJPUDoge1xuICAgICAgICAgICAgaGFuZGxlQ2xhaW1BaXJkcm9wKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5DTEFJTV9BSVJEUk9QPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaW5pdGVkRW50aXRpZXMuYWRkKGVudGl0eSlcbiAgfVxuXG4gIC8vIFBMQVlfQU5JTUFUSU9OXG4gIGZ1bmN0aW9uIGluaXRQbGF5QW5pbWF0aW9uKGVudGl0eTogRW50aXR5KSB7XG4gICAgaWYgKCFBbmltYXRvci5oYXMoZW50aXR5KSkge1xuICAgICAgQW5pbWF0b3IuY3JlYXRlKGVudGl0eSwge1xuICAgICAgICBzdGF0ZXM6IFtdLFxuICAgICAgfSlcbiAgICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVQbGF5QW5pbWF0aW9uKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTj4sXG4gICkge1xuICAgIGNvbnN0IHsgYW5pbWF0aW9uLCBsb29wIH0gPSBwYXlsb2FkXG5cbiAgICBjb25zdCBhbmltYXRvciA9IEFuaW1hdG9yLmdldE11dGFibGUoZW50aXR5KVxuICAgIGlmICghYW5pbWF0b3Iuc3RhdGVzLnNvbWUoKCQpID0+ICQuY2xpcCA9PT0gYW5pbWF0aW9uKSkge1xuICAgICAgYW5pbWF0b3Iuc3RhdGVzID0gW1xuICAgICAgICAuLi5hbmltYXRvci5zdGF0ZXMsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGlwOiBhbmltYXRpb24sXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfVxuXG4gICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMoZW50aXR5KVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaXAgPSBBbmltYXRvci5nZXRDbGlwKGVudGl0eSwgYW5pbWF0aW9uKVxuICAgICAgY2xpcC5wbGF5aW5nID0gdHJ1ZVxuICAgICAgY2xpcC5sb29wID0gbG9vcCA/PyBmYWxzZVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBsYXlpbmcgYW5pbWF0aW9uJywgZSlcbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0FOSU1BVElPTlxuICBmdW5jdGlvbiBoYW5kbGVTdG9wQW5pbWF0aW9uKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT04+LFxuICApIHtcbiAgICBpZiAoQW5pbWF0b3IuaGFzKGVudGl0eSkpIHtcbiAgICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICAvLyBTRVRfU1RBVEVcbiAgZnVuY3Rpb24gaGFuZGxlU2V0U3RhdGUoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9TVEFURT4sXG4gICkge1xuICAgIGNvbnN0IHN0YXRlcyA9IFN0YXRlcy5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChzdGF0ZXMpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShzdGF0ZXMpXG4gICAgICBsZXQgbmV4dFN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwYXlsb2FkLnN0YXRlXG4gICAgICBuZXh0U3RhdGUgPSBpc1ZhbGlkU3RhdGUoc3RhdGVzLCBuZXh0U3RhdGUpID8gbmV4dFN0YXRlIDogZGVmYXVsdFZhbHVlXG4gICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gc3RhdGVzLmN1cnJlbnRWYWx1ZSA/PyBkZWZhdWx0VmFsdWUgPz8gdW5kZWZpbmVkXG4gICAgICBzdGF0ZXMucHJldmlvdXNWYWx1ZSA9IHByZXZpb3VzVmFsdWVcbiAgICAgIHN0YXRlcy5jdXJyZW50VmFsdWUgPSBuZXh0U3RhdGVcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX1NUQVRFX0NIQU5HRSlcbiAgICB9XG4gIH1cblxuICAvLyBTVEFSVF9UV0VFTlxuICBmdW5jdGlvbiBoYW5kbGVTdGFydFR3ZWVuKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICkge1xuICAgIGlmIChwYXlsb2FkKSB7XG4gICAgICAvLyBHZXQgdGhlIGluaXRpYWwgdHdlZW4gaWYgZXhpc3RzIHRvIHJldmVydCB0aGUgb2JqZWN0IG1vdmVtZW50IHRvIHRoYXQgc2VxdWVuY2Ugd2hlbiBleGVjdXRpbmcgYSB0d2VlbiBmcm9tIGFjdGlvbnNcbiAgICAgIGNvbnN0IGluaXRpYWxUd2VlbiA9IFR3ZWVuQ29tcG9uZW50LmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgICAgbGV0IHR3ZWVuXG5cbiAgICAgIHN3aXRjaCAocGF5bG9hZC50eXBlKSB7XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLk1PVkVfSVRFTToge1xuICAgICAgICAgIHR3ZWVuID0gaGFuZGxlTW92ZUl0ZW0oZW50aXR5LCBwYXlsb2FkKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUd2VlblR5cGUuUk9UQVRFX0lURU06IHtcbiAgICAgICAgICB0d2VlbiA9IGhhbmRsZVJvdGF0ZUl0ZW0oZW50aXR5LCBwYXlsb2FkKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUd2VlblR5cGUuU0NBTEVfSVRFTToge1xuICAgICAgICAgIHR3ZWVuID0gaGFuZGxlU2NhbGVJdGVtKGVudGl0eSwgcGF5bG9hZClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHdlZW4gdHlwZTogJHtwYXlsb2FkLnR5cGV9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXZlcnRUd2VlbihlbnRpdHksIGluaXRpYWxUd2VlbiwgdHdlZW4pXG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdGFydCB0byB0aGUgaW5pdGlhbCBtb3ZlbWVudCBzZXF1ZW5jZSB3aGVuIGV4ZWN1dGluZyBhbiBhZGl0aW9uYWwgdHdlZW5cbiAgZnVuY3Rpb24gcmV2ZXJ0VHdlZW4oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgaW5pdGlhbFR3ZWVuOiBQQlR3ZWVuIHwgbnVsbCxcbiAgICB0d2VlbjogUEJUd2VlbixcbiAgKSB7XG4gICAgY29uc3QgdHdlZW5TZXF1ZW5jZSA9IFR3ZWVuU2VxdWVuY2UuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgbGV0IF9yZXZlcnRUd2VlbiA9IHtcbiAgICAgIC4uLnR3ZWVuLFxuICAgIH1cblxuICAgIGlmICghaW5pdGlhbFR3ZWVuIHx8ICF0d2VlblNlcXVlbmNlIHx8ICF0d2VlblNlcXVlbmNlLmxvb3ApIHJldHVyblxuXG4gICAgc3dpdGNoIChpbml0aWFsVHdlZW4ubW9kZT8uJGNhc2UpIHtcbiAgICAgIGNhc2UgJ21vdmUnOiB7XG4gICAgICAgIF9yZXZlcnRUd2VlbiA9IHtcbiAgICAgICAgICAuLi5fcmV2ZXJ0VHdlZW4sXG4gICAgICAgICAgbW9kZTogVHdlZW4uTW9kZS5Nb3ZlKHtcbiAgICAgICAgICAgIHN0YXJ0OiAodHdlZW4ubW9kZSBhcyB7ICRjYXNlOiAnbW92ZSc7IG1vdmU6IE1vdmUgfSkubW92ZS5lbmQsXG4gICAgICAgICAgICBlbmQ6IGluaXRpYWxUd2Vlbi5tb2RlLm1vdmUuc3RhcnQsXG4gICAgICAgICAgfSksXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3JvdGF0ZSc6IHtcbiAgICAgICAgX3JldmVydFR3ZWVuID0ge1xuICAgICAgICAgIC4uLl9yZXZlcnRUd2VlbixcbiAgICAgICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlJvdGF0ZSh7XG4gICAgICAgICAgICBzdGFydDogKHR3ZWVuLm1vZGUgYXMgeyAkY2FzZTogJ3JvdGF0ZSc7IHJvdGF0ZTogUm90YXRlIH0pLnJvdGF0ZVxuICAgICAgICAgICAgICAuZW5kLFxuICAgICAgICAgICAgZW5kOiBpbml0aWFsVHdlZW4ubW9kZS5yb3RhdGUuc3RhcnQsXG4gICAgICAgICAgfSksXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3NjYWxlJzoge1xuICAgICAgICBfcmV2ZXJ0VHdlZW4gPSB7XG4gICAgICAgICAgLi4uX3JldmVydFR3ZWVuLFxuICAgICAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuU2NhbGUoe1xuICAgICAgICAgICAgc3RhcnQ6ICh0d2Vlbi5tb2RlIGFzIHsgJGNhc2U6ICdzY2FsZSc7IHNjYWxlOiBTY2FsZSB9KS5zY2FsZS5lbmQsXG4gICAgICAgICAgICBlbmQ6IGluaXRpYWxUd2Vlbi5tb2RlLnNjYWxlLnN0YXJ0LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0d2VlbiBtb2RlOiAke2luaXRpYWxUd2Vlbi5tb2RlfWApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGluaXRpYWwgdHdlZW4gaXMgbm90IHBsYXlpbmcgYnV0IHRoZSBsb29wIHByb3BlcnR5IGlzIGFjdGl2ZSwgc3RhcnQgaXRcbiAgICBpbml0aWFsVHdlZW4ucGxheWluZyA9IHRydWVcbiAgICB0d2VlblNlcXVlbmNlLnNlcXVlbmNlID0gW19yZXZlcnRUd2VlbiwgaW5pdGlhbFR3ZWVuXVxuICB9XG5cbiAgLy8gTU9WRV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmVJdGVtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KGVudGl0eSlcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSwgcmVsYXRpdmUgfSA9IHR3ZWVuXG4gICAgY29uc3QgZW5kID0gVmVjdG9yMy5jcmVhdGUodHdlZW4uZW5kLngsIHR3ZWVuLmVuZC55LCB0d2Vlbi5lbmQueilcbiAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHJlbGF0aXZlID8gVmVjdG9yMy5hZGQodHJhbnNmb3JtLnBvc2l0aW9uLCBlbmQpIDogZW5kXG5cbiAgICByZXR1cm4gVHdlZW5Db21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgbW9kZTogVHdlZW4uTW9kZS5Nb3ZlKHtcbiAgICAgICAgc3RhcnQ6IHRyYW5zZm9ybS5wb3NpdGlvbixcbiAgICAgICAgZW5kOiBlbmRQb3NpdGlvbixcbiAgICAgIH0pLFxuICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMTAwMCwgLy8gZnJvbSBzZWNzIHRvIG1zXG4gICAgICBlYXNpbmdGdW5jdGlvbjogZ2V0RWFzaW5nRnVuY3Rpb25Gcm9tSW50ZXJwb2xhdGlvbihpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgfSlcbiAgfVxuXG4gIC8vIFJPVEFURV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZVJvdGF0ZUl0ZW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KVxuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW5cbiAgICBjb25zdCBlbmQgPSBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMoXG4gICAgICB0d2Vlbi5lbmQueCxcbiAgICAgIHR3ZWVuLmVuZC55LFxuICAgICAgdHdlZW4uZW5kLnosXG4gICAgKVxuICAgIGNvbnN0IGVuZFJvdGF0aW9uID0gcmVsYXRpdmVcbiAgICAgID8gUXVhdGVybmlvbi5tdWx0aXBseSh0cmFuc2Zvcm0ucm90YXRpb24sIGVuZClcbiAgICAgIDogZW5kXG5cbiAgICByZXR1cm4gVHdlZW5Db21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgbW9kZTogVHdlZW4uTW9kZS5Sb3RhdGUoe1xuICAgICAgICBzdGFydDogdHJhbnNmb3JtLnJvdGF0aW9uLFxuICAgICAgICBlbmQ6IGVuZFJvdGF0aW9uLFxuICAgICAgfSksXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLCAvLyBmcm9tIHNlY3MgdG8gbXNcbiAgICAgIGVhc2luZ0Z1bmN0aW9uOiBnZXRFYXNpbmdGdW5jdGlvbkZyb21JbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb25UeXBlKSxcbiAgICB9KVxuICB9XG5cbiAgLy8gU0NBTEVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVTY2FsZUl0ZW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KVxuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW5cbiAgICBjb25zdCBlbmQgPSBWZWN0b3IzLmNyZWF0ZSh0d2Vlbi5lbmQueCwgdHdlZW4uZW5kLnksIHR3ZWVuLmVuZC56KVxuICAgIGNvbnN0IGVuZFNjYWxlID0gcmVsYXRpdmUgPyBWZWN0b3IzLmFkZCh0cmFuc2Zvcm0uc2NhbGUsIGVuZCkgOiBlbmRcblxuICAgIHJldHVybiBUd2VlbkNvbXBvbmVudC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlNjYWxlKHtcbiAgICAgICAgc3RhcnQ6IHRyYW5zZm9ybS5zY2FsZSxcbiAgICAgICAgZW5kOiBlbmRTY2FsZSxcbiAgICAgIH0pLFxuICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMTAwMCwgLy8gZnJvbSBzZWNzIHRvIG1zXG4gICAgICBlYXNpbmdGdW5jdGlvbjogZ2V0RWFzaW5nRnVuY3Rpb25Gcm9tSW50ZXJwb2xhdGlvbihpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgfSlcbiAgfVxuXG4gIC8vIFNFVF9DT1VOVEVSXG4gIGZ1bmN0aW9uIGhhbmRsZVNldENvdW50ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9DT1VOVEVSPixcbiAgKSB7XG4gICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSA9IHBheWxvYWQuY291bnRlclxuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ09VTlRFUl9DSEFOR0UpXG4gICAgfVxuICB9XG5cbiAgLy8gSU5DUkVNRU5UX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlSW5jcmVtZW50Q291bnRlcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICBjb25zdCBhbW91bnQgPSBwYXlsb2FkLmFtb3VudCA/PyAxXG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSArPSBhbW91bnRcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKVxuICAgIH1cbiAgfVxuXG4gIC8vIERFQ1JFQVNFX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlRGVjcmVhc2VDb3VudGVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUj4sXG4gICkge1xuICAgIGNvbnN0IGNvdW50ZXIgPSBDb3VudGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGNvbnN0IGFtb3VudCA9IHBheWxvYWQuYW1vdW50ID8/IDFcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlIC09IGFtb3VudFxuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ09VTlRFUl9DSEFOR0UpXG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9TT1VORFxuICBmdW5jdGlvbiBoYW5kbGVQbGF5U291bmQoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfU09VTkQ+LFxuICApIHtcbiAgICBjb25zdCB7IHNyYywgbG9vcCwgdm9sdW1lIH0gPSBwYXlsb2FkXG4gICAgaWYgKEF1ZGlvU291cmNlLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBdWRpb1NvdXJjZS5wbGF5U291bmQoZW50aXR5LCBzcmMpXG4gICAgICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU291cmNlLmdldE11dGFibGUoZW50aXR5KVxuICAgICAgYXVkaW9Tb3VyY2UubG9vcCA9IGxvb3BcbiAgICAgIGF1ZGlvU291cmNlLnZvbHVtZSA9IHZvbHVtZSA/PyAxXG4gICAgfSBlbHNlIHtcbiAgICAgIEF1ZGlvU291cmNlLmNyZWF0ZShlbnRpdHksIHtcbiAgICAgICAgYXVkaW9DbGlwVXJsOiBzcmMsXG4gICAgICAgIGxvb3AsXG4gICAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICAgIHZvbHVtZTogdm9sdW1lID8/IDEsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfU09VTkRcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcFNvdW5kKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9TT1VORD4sXG4gICkge1xuICAgIGNvbnN0IGF1ZGlvU291cmNlID0gQXVkaW9Tb3VyY2UuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgaWYgKGF1ZGlvU291cmNlKSB7XG4gICAgICBhdWRpb1NvdXJjZS5wbGF5aW5nID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBTRVRfVklTSUJJTElUWVxuICBmdW5jdGlvbiBoYW5kbGVTZXRWaXNpYmlsaXR5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfVklTSUJJTElUWT4sXG4gICkge1xuICAgIGNvbnN0IHsgdmlzaWJsZSwgY29sbGlkZXIgfSA9IHBheWxvYWRcbiAgICBWaXNpYmlsaXR5Q29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHsgdmlzaWJsZSB9KVxuICAgIGNvbnN0IGdsdGYgPSBHbHRmQ29udGFpbmVyLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGNvbnN0IG1lc2hDb2xsaWRlciA9IE1lc2hDb2xsaWRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChjb2xsaWRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZ2x0Zikge1xuICAgICAgICBnbHRmLmludmlzaWJsZU1lc2hlc0NvbGxpc2lvbk1hc2sgPSBjb2xsaWRlclxuICAgICAgfSBlbHNlIGlmIChtZXNoQ29sbGlkZXIpIHtcbiAgICAgICAgbWVzaENvbGxpZGVyLmNvbGxpc2lvbk1hc2sgPSBjb2xsaWRlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFUVEFDSF9UT19QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlQXR0YWNoVG9QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IGFuY2hvclBvaW50SWQgfSA9IHBheWxvYWRcbiAgICBBdmF0YXJBdHRhY2guY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwgeyBhbmNob3JQb2ludElkIH0pXG4gIH1cblxuICAvLyBERVRBQ0hfRlJPTV9QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlRGV0YWNoRnJvbVBsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkRFVEFDSF9GUk9NX1BMQVlFUj4sXG4gICkge1xuICAgIGlmIChBdmF0YXJBdHRhY2guaGFzKGVudGl0eSkpIHtcbiAgICAgIEF2YXRhckF0dGFjaC5kZWxldGVGcm9tKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICAvLyBURUxFUE9SVCBQTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlVGVsZXBvcnRQbGF5ZXIoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5URUxFUE9SVF9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IHgsIHkgfSA9IHBheWxvYWRcbiAgICByZXF1ZXN0VGVsZXBvcnQoe1xuICAgICAgZGVzdGluYXRpb246IGAke3h9LCR7eX1gLFxuICAgIH0pXG4gIH1cblxuICAvLyBNT1ZFIFBMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVNb3ZlUGxheWVyKFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuTU9WRV9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgbmV3UmVsYXRpdmVQb3NpdGlvbjogcGF5bG9hZC5wb3NpdGlvbixcbiAgICAgIGNhbWVyYVRhcmdldDogcGF5bG9hZC5jYW1lcmFUYXJnZXQsXG4gICAgfVxuICAgIHZvaWQgbW92ZVBsYXllclRvKG9wdGlvbnMpXG4gIH1cblxuICAvLyBQTEFZIERFRkFVTFQgRU1PVEVcbiAgZnVuY3Rpb24gaGFuZGxlUGxheURlZmF1bHRFbW90ZShcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfREVGQVVMVF9FTU9URT4sXG4gICkge1xuICAgIGNvbnN0IHsgZW1vdGUgfSA9IHBheWxvYWRcbiAgICB2b2lkIHRyaWdnZXJFbW90ZSh7IHByZWRlZmluZWRFbW90ZTogZW1vdGUgfSlcbiAgfVxuXG4gIC8vIFBMQVkgQ1VTVE9NIEVNT1RFXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlDdXN0b21FbW90ZShcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFPixcbiAgKSB7XG4gICAgY29uc3QgeyBzcmMsIGxvb3AgfSA9IHBheWxvYWRcbiAgICB2b2lkIHRyaWdnZXJTY2VuZUVtb3RlKHsgc3JjLCBsb29wIH0pXG4gIH1cblxuICAvLyBPUEVOIExJTktcbiAgZnVuY3Rpb24gaGFuZGxlT3BlbkxpbmsoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5PUEVOX0xJTks+LFxuICApIHtcbiAgICBjb25zdCB7IHVybCB9ID0gcGF5bG9hZFxuICAgIHZvaWQgb3BlbkV4dGVybmFsVXJsKHsgdXJsIH0pXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXRWaWRlb1NyYyh7XG4gICAgc3JjLFxuICAgIGRjbENhc3QsXG4gIH06IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1ZJREVPX1NUUkVBTT4pIHtcbiAgICBpZiAoZGNsQ2FzdCkge1xuICAgICAgY29uc3QgeyBzdHJlYW1zIH0gPSBhd2FpdCBnZXRBY3RpdmVWaWRlb1N0cmVhbXMoe30pXG4gICAgICByZXR1cm4gc3RyZWFtcy5sZW5ndGggPiAwID8gc3RyZWFtc1swXS50cmFja1NpZCA6ICcnXG4gICAgfVxuICAgIHJldHVybiBzcmMgPz8gJydcbiAgfVxuXG4gIC8vIFBMQVlfVklERU9cbiAgZnVuY3Rpb24gaGFuZGxlUGxheVZpZGVvKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1ZJREVPX1NUUkVBTT4sXG4gICkge1xuICAgIGNvbnN0IHZpZGVvU291cmNlID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAodmlkZW9Tb3VyY2UgJiYgdmlkZW9Tb3VyY2Uuc3JjKSB7XG4gICAgICB2aWRlb1NvdXJjZS5wbGF5aW5nID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBHZXQgdGhlIHZpZGVvIHNyYyBmcm9tIGEgcHJvbWlzZSAoVmlkZW8gRmlsZS9WaWRlbyBTdHJlYW0vRENMIENhc3QpXG4gICAgICBnZXRWaWRlb1NyYyhwYXlsb2FkKS50aGVuKChzcmMpID0+IHtcbiAgICAgICAgaWYgKCFzcmMpIHJldHVyblxuXG4gICAgICAgIFZpZGVvUGxheWVyLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgICAgICBzcmMsXG4gICAgICAgICAgdm9sdW1lOiBwYXlsb2FkLnZvbHVtZSA/PyAxLFxuICAgICAgICAgIGxvb3A6IHBheWxvYWQubG9vcCA/PyBmYWxzZSxcbiAgICAgICAgICBwbGF5aW5nOiB0cnVlLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIEluaXQgdmlkZW8gcGxheWVyIG1hdGVyaWFsIHdoZW4gdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgYSBWaWRlb1BsYXllciBjb21wb25lbnQgZGVmaW5lZFxuICAgICAgICBpbml0VmlkZW9QbGF5ZXJDb21wb25lbnRNYXRlcmlhbChcbiAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgeyBNYXRlcmlhbCB9LFxuICAgICAgICAgIE1hdGVyaWFsLmdldE9yTnVsbChlbnRpdHkpLFxuICAgICAgICApXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfVklERU9cbiAgZnVuY3Rpb24gaGFuZGxlU3RvcFZpZGVvKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU0+LFxuICApIHtcbiAgICBjb25zdCB2aWRlb1NvdXJjZSA9IFZpZGVvUGxheWVyLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGlmICh2aWRlb1NvdXJjZSkge1xuICAgICAgdmlkZW9Tb3VyY2UucGxheWluZyA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9BVURJT19TVFJFQU1cbiAgZnVuY3Rpb24gaGFuZGxlUGxheUF1ZGlvU3RyZWFtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FVRElPX1NUUkVBTT4sXG4gICkge1xuICAgIGNvbnN0IHsgdXJsLCB2b2x1bWUgfSA9IHBheWxvYWRcbiAgICBBdWRpb1N0cmVhbS5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICB1cmwsXG4gICAgICBwbGF5aW5nOiB0cnVlLFxuICAgICAgdm9sdW1lOiB2b2x1bWUgPz8gMSxcbiAgICB9KVxuICB9XG5cbiAgLy8gU1RPUF9BVURJT19TVFJFQU1cbiAgZnVuY3Rpb24gaGFuZGxlU3RvcEF1ZGlvU3RyZWFtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU0+LFxuICApIHtcbiAgICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU3RyZWFtLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGlmIChhdWRpb1NvdXJjZSkge1xuICAgICAgYXVkaW9Tb3VyY2UucGxheWluZyA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gU0hPV19URVhUXG4gIGZ1bmN0aW9uIGhhbmRsZVNob3dUZXh0KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TSE9XX1RFWFQ+LFxuICApIHtcbiAgICBjb25zdCB7IHRleHQsIGhpZGVBZnRlclNlY29uZHMsIGZvbnQsIGZvbnRTaXplLCB0ZXh0QWxpZ24gfSA9IHBheWxvYWRcbiAgICBjb25zdCB1aVRyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCBlbnRpdHkpXG4gICAgaWYgKHVpVHJhbnNmb3JtQ29tcG9uZW50KSB7XG4gICAgICBVaVRleHQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgICB2YWx1ZTogdGV4dCxcbiAgICAgICAgZm9udDogZm9udCBhcyB1bmtub3duIGFzIEZvbnQsXG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICB0ZXh0QWxpZ246IHRleHRBbGlnbiBhcyB1bmtub3duIGFzIFRleHRBbGlnbk1vZGUsXG4gICAgICB9KVxuICAgICAgc3RhcnRUaW1lb3V0KGVudGl0eSwgQWN0aW9uVHlwZS5ISURFX1RFWFQsIGhpZGVBZnRlclNlY29uZHMsICgpID0+XG4gICAgICAgIGhhbmRsZUhpZGVUZXh0KGVudGl0eSwge30pLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhJREVfVEVYVFxuICBmdW5jdGlvbiBoYW5kbGVIaWRlVGV4dChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfVEVYVD4sXG4gICkge1xuICAgIGNvbnN0IHVpVGV4dENvbXBvbmVudCA9IFVpVGV4dC5nZXRPck51bGwoZW50aXR5KVxuICAgIGlmICh1aVRleHRDb21wb25lbnQpIHtcbiAgICAgIFVpVGV4dC5kZWxldGVGcm9tKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eTogRW50aXR5LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY3Rpb25zID0gQWN0aW9ucy5nZXRPck51bGwoZW50aXR5KVxuICAgIHJldHVybiBhY3Rpb25zPy52YWx1ZS5maW5kKCgkKSA9PiAkLm5hbWUgPT09IG5hbWUpXG4gIH1cblxuICAvLyBTVEFSVF9ERUxBWVxuICBmdW5jdGlvbiBoYW5kbGVTdGFydERlbGF5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9ERUxBWT4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9ucywgdGltZW91dCB9ID0gcGF5bG9hZFxuICAgIGZvciAoY29uc3QgYWN0aW9uTmFtZSBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSlcbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgc3RhcnRUaW1lb3V0KGVudGl0eSwgYWN0aW9uTmFtZSwgdGltZW91dCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpXG4gICAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0RFTEFZXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BEZWxheShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9ERUxBWT4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9uIH0gPSBwYXlsb2FkXG4gICAgc3RvcFRpbWVvdXQoZW50aXR5LCBhY3Rpb24pXG4gIH1cblxuICAvLyBTVEFSVF9MT09QXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0TG9vcChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfTE9PUD4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9ucywgaW50ZXJ2YWwgfSA9IHBheWxvYWRcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpXG4gICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIHN0YXJ0SW50ZXJ2YWwoZW50aXR5LCBhY3Rpb25OYW1lLCBpbnRlcnZhbCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpXG4gICAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0xPT1BcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcExvb3AoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfTE9PUD4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9uIH0gPSBwYXlsb2FkXG4gICAgc3RvcEludGVydmFsKGVudGl0eSwgYWN0aW9uKVxuICB9XG5cbiAgLy8gQ0xPTkVfRU5USVRZXG4gIGZ1bmN0aW9uIGhhbmRsZUNsb25lRW50aXR5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DTE9ORV9FTlRJVFk+LFxuICApIHtcbiAgICBjb25zdCB7IHBvc2l0aW9uIH0gPSBwYXlsb2FkXG5cbiAgICAvLyBjbG9uZSBlbnRpdHlcbiAgICBjb25zdCB7IGNsb25lZCwgZW50aXRpZXMgfSA9IGNsb25lKFxuICAgICAgZW50aXR5LFxuICAgICAgZW5naW5lLFxuICAgICAgVHJhbnNmb3JtLFxuICAgICAgVHJpZ2dlcnMsXG4gICAgICBzZGtIZWxwZXJzLFxuICAgIClcbiAgICBmb3IgKGNvbnN0IGNsb25lZCBvZiBlbnRpdGllcy52YWx1ZXMoKSkge1xuICAgICAgLy8gaW5pdGlhbGl6ZVxuICAgICAgaW5pdEFjdGlvbnMoY2xvbmVkKVxuICAgICAgaW5pdFRyaWdnZXJzKGNsb25lZClcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoY2xvbmVkKVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NMT05FKVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRPckNyZWF0ZU11dGFibGUoY2xvbmVkKVxuICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IHBvc2l0aW9uXG4gIH1cblxuICAvLyBSRU1PVkVfRU5USVRZXG4gIGZ1bmN0aW9uIGhhbmRsZVJlbW92ZUVudGl0eShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk+LFxuICApIHtcbiAgICAvLyBSZW1vdmUgYWxsIHRpbWVycyBiZWZvcmUgcmVtb3ZlIHRoZSBlbnRpdHlcbiAgICBzdG9wQWxsVGltZW91dHMoZW50aXR5KVxuICAgIHN0b3BBbGxJbnRlcnZhbHMoZW50aXR5KVxuXG4gICAgY29uc3QgdHJlZSA9IGdldENvbXBvbmVudEVudGl0eVRyZWUoZW5naW5lLCBlbnRpdHksIFRyYW5zZm9ybSlcbiAgICBmb3IgKGNvbnN0IGVudGl0eVRvUmVtb3ZlIG9mIHRyZWUpIHtcbiAgICAgIGVuZ2luZS5yZW1vdmVFbnRpdHkoZW50aXR5VG9SZW1vdmUpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VWlTdGFjayhhbGlnbjogU2NyZWVuQWxpZ25Nb2RlKSB7XG4gICAgY29uc3Qga2V5ID0gYCR7YWxpZ24uYWxpZ25JdGVtc30sJHthbGlnbi5qdXN0aWZ5Q29udGVudH1gXG5cbiAgICBpZiAoIXVpU3RhY2tzLmhhcyhrZXkpKSB7XG4gICAgICB1aVN0YWNrcy5zZXQoa2V5LCBlbmdpbmUuYWRkRW50aXR5KCkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHVpU3RhY2tzLmdldChrZXkpIVxuICB9XG5cbiAgLy8gU0hPV19JTUFHRVxuICBmdW5jdGlvbiBoYW5kbGVTaG93SW1hZ2UoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfSU1BR0U+LFxuICApIHtcbiAgICBjb25zdCB7IHNyYywgdGV4dCwgaGlkZUFmdGVyU2Vjb25kcywgZm9udFNpemUsIGFsaWduLCBoZWlnaHQsIHdpZHRoIH0gPVxuICAgICAgcGF5bG9hZFxuXG4gICAgLy8gR2V0L0NyZWF0ZSBhIFVJIHRyYW5zZm9ybSBmb3IgdGhlIHJvb3QgZW50aXR5XG4gICAgZ2V0VUlUcmFuc2Zvcm0oVWlUcmFuc2Zvcm0sIGVuZ2luZS5Sb290RW50aXR5KVxuXG4gICAgLy8gR2V0IGEgVUkgU3RhY2sgZW50aXR5XG4gICAgY29uc3Qgc2NyZWVuQWxpZ24gPSBtYXBBbGlnblRvU2NyZWVuQWxpZ24oYWxpZ24pXG4gICAgY29uc3QgdWlTdGFjayA9IGdldFVpU3RhY2soc2NyZWVuQWxpZ24pXG5cbiAgICAvLyBUT0RPOiBGaXggaXRlbXMgd3JhcHBpbmdcbiAgICAvLyBHZXQvQ3JlYXRlIGEgVUkgVHJhbnNmb3JtIGZvciB0aGUgVUkgc3RhY2tcbiAgICBjb25zdCB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50ID0gZ2V0VUlUcmFuc2Zvcm0oVWlUcmFuc2Zvcm0sIHVpU3RhY2spXG4gICAgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudC5hbGlnbkl0ZW1zID0gc2NyZWVuQWxpZ24uYWxpZ25JdGVtc1xuICAgIHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQuanVzdGlmeUNvbnRlbnQgPSBzY3JlZW5BbGlnbi5qdXN0aWZ5Q29udGVudFxuICAgIHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQucG9zaXRpb25UeXBlID0gWUdQb3NpdGlvblR5cGUuWUdQVF9BQlNPTFVURVxuXG4gICAgLy8gQ3JlYXRlIGEgVUkgZW50aXR5IGFuZCBhIFRyYW5zZm9ybSBjb21wb25lbnQgZm9yIHRoZSBpbWFnZVxuICAgIGNvbnN0IGltYWdlRW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAgY29uc3QgaW1hZ2VUcmFuc2Zvcm1Db21wb25lbnQgPSBnZXRVSVRyYW5zZm9ybShcbiAgICAgIFVpVHJhbnNmb3JtLFxuICAgICAgaW1hZ2VFbnRpdHksXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIFlHVW5pdC5ZR1VfUE9JTlQsXG4gICAgKVxuICAgIGltYWdlVHJhbnNmb3JtQ29tcG9uZW50LnBhcmVudCA9IHVpU3RhY2tcbiAgICBpbWFnZVRyYW5zZm9ybUNvbXBvbmVudC5wb2ludGVyRmlsdGVyID0gUG9pbnRlckZpbHRlck1vZGUuUEZNX0JMT0NLXG5cbiAgICAvLyBDcmVhdGUgQmFja2dyb3VuZCBDb21wb25lbnRcbiAgICBnZXRVSUJhY2tncm91bmQoVWlCYWNrZ3JvdW5kLCBpbWFnZUVudGl0eSwgc3JjKVxuXG4gICAgaWYgKHRleHQpIHtcbiAgICAgIC8vIENyZWF0ZSBUZXh0IENvbXBvbmVudFxuICAgICAgLy8gVE9ETzogRml4IHRleHQgd3JhcHBpbmcgYW5kIHNjcm9sbGluZ1xuICAgICAgZ2V0VUlUZXh0KFVpVGV4dCwgaW1hZ2VFbnRpdHksIHRleHQsIGZvbnRTaXplLCB3aWR0aClcbiAgICB9XG5cbiAgICBwb2ludGVyRXZlbnRzU3lzdGVtLm9uUG9pbnRlckRvd24oXG4gICAgICB7XG4gICAgICAgIGVudGl0eTogaW1hZ2VFbnRpdHksXG4gICAgICAgIG9wdHM6IHtcbiAgICAgICAgICBidXR0b246IElucHV0QWN0aW9uLklBX1BPSU5URVIsXG4gICAgICAgICAgaG92ZXJUZXh0OiAnQ2xpY2snLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgbGFzdFVpRW50aXR5Q2xpY2tlZC5zZXQoZW50aXR5LCBpbWFnZUVudGl0eSlcbiAgICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ0xJQ0tfSU1BR0UpXG4gICAgICB9LFxuICAgIClcblxuICAgIGlmIChoaWRlQWZ0ZXJTZWNvbmRzKSB7XG4gICAgICBzdGFydFRpbWVvdXQoZW50aXR5LCBBY3Rpb25UeXBlLkhJREVfSU1BR0UsIGhpZGVBZnRlclNlY29uZHMsICgpID0+XG4gICAgICAgIGhhbmRsZUhpZGVJbWFnZShlbnRpdHksIHsgaW1hZ2VFbnRpdHk6IGltYWdlRW50aXR5IH0pLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhJREVfSU1BR0VcbiAgZnVuY3Rpb24gaGFuZGxlSGlkZUltYWdlKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5ISURFX0lNQUdFPixcbiAgKSB7XG4gICAgY29uc3QgeyBpbWFnZUVudGl0eSB9ID0gcGF5bG9hZFxuXG4gICAgaWYgKGltYWdlRW50aXR5KSB7XG4gICAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGltYWdlRW50aXR5IGFzIEVudGl0eSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2xpY2tlZEltYWdlID0gbGFzdFVpRW50aXR5Q2xpY2tlZC5nZXQoZW50aXR5KVxuICAgICAgaWYgKGNsaWNrZWRJbWFnZSkge1xuICAgICAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGNsaWNrZWRJbWFnZSlcbiAgICAgICAgbGFzdFVpRW50aXR5Q2xpY2tlZC5kZWxldGUoZW50aXR5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERBTUFHRVxuICBmdW5jdGlvbiBoYW5kbGVEYW1hZ2UoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkRBTUFHRT4sXG4gICkge1xuICAgIGNvbnN0IHsgcmFkaXVzLCBsYXllciwgaGl0cyB9ID0gcGF5bG9hZFxuICAgIGNvbnN0IGVudGl0eVBvc2l0aW9uID0gQXZhdGFyQXR0YWNoLmhhcyhlbnRpdHkpXG4gICAgICA/IGdldFBsYXllclBvc2l0aW9uKClcbiAgICAgIDogZ2V0V29ybGRQb3NpdGlvbihlbnRpdHkpXG5cbiAgICBjb25zdCBnZXRSb290ID0gKGVudGl0eTogRW50aXR5KTogRW50aXR5ID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGdldEVudGl0eVBhcmVudChlbnRpdHkpXG4gICAgICByZXR1cm4gIXBhcmVudCA/IGVudGl0eSA6IGdldFJvb3QocGFyZW50KVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIGRhbWFnZVRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID0gZ2V0V29ybGRQb3NpdGlvbih0YXJnZXQpXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IFZlY3RvcjMuZGlzdGFuY2UoZW50aXR5UG9zaXRpb24sIHRhcmdldFBvc2l0aW9uKVxuXG4gICAgICAvLyBhdm9pZCBjYXVzaW5nIGRhbWFnZSB0byB0aGUgZW50aXR5IGl0c2VsZiBvciBpdHMgY2hpbGRyZW5cbiAgICAgIGNvbnN0IGVudGl0eVRyZWUgPSBBcnJheS5mcm9tKFxuICAgICAgICBnZXRDb21wb25lbnRFbnRpdHlUcmVlKGVuZ2luZSwgZW50aXR5LCBUcmFuc2Zvcm0pLFxuICAgICAgKVxuICAgICAgY29uc3QgaXNQYXJ0T2ZFbnRpdHlUcmVlID0gZW50aXR5VHJlZS5zb21lKCgkKSA9PiAkID09PSB0YXJnZXQpXG4gICAgICBpZiAoaXNQYXJ0T2ZFbnRpdHlUcmVlKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChsYXllcikge1xuICAgICAgICBpZiAobGF5ZXIgPT09IFByb3hpbWl0eUxheWVyLlBMQVlFUikge1xuICAgICAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KHRhcmdldClcbiAgICAgICAgICBpZiAocm9vdCAhPT0gZW5naW5lLlBsYXllckVudGl0eSAmJiByb290ICE9PSBlbmdpbmUuQ2FtZXJhRW50aXR5KSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChsYXllciA9PT0gUHJveGltaXR5TGF5ZXIuTk9OX1BMQVlFUikge1xuICAgICAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KHRhcmdldClcbiAgICAgICAgICBpZiAocm9vdCA9PT0gZW5naW5lLlBsYXllckVudGl0eSB8fCByb290ID09PSBlbmdpbmUuQ2FtZXJhRW50aXR5KSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRpc3RhbmNlIDw9IHJhZGl1cykge1xuICAgICAgICBjb25zdCB0b3RhbCA9IGhpdHMgPT09IHVuZGVmaW5lZCA/IDEgOiBNYXRoLm1heChoaXRzLCAxKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyh0YXJnZXQpXG4gICAgICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0RBTUFHRSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1PVkVfUExBWUVSX0hFUkVcbiAgZnVuY3Rpb24gaGFuZGxlTW92ZVBsYXllckhlcmUoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5NT1ZFX1BMQVlFUl9IRVJFPixcbiAgKSB7XG4gICAgY29uc3QgaGVyZSA9IGdldFdvcmxkUG9zaXRpb24oZW50aXR5KVxuICAgIHZvaWQgbW92ZVBsYXllclRvKHsgbmV3UmVsYXRpdmVQb3NpdGlvbjogaGVyZSB9KVxuICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSlcbiAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fUExBWUVSX1NQQVdOKVxuICB9XG5cbiAgLy8gUExBQ0VfT05fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYWNlT25QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFDRV9PTl9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgY29uc3QgcGxheWVyID0gVHJhbnNmb3JtLmdldE9yTnVsbChlbmdpbmUuUGxheWVyRW50aXR5KVxuICAgIGlmICh0cmFuc2Zvcm0gJiYgcGxheWVyKSB7XG4gICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBwbGF5ZXIucG9zaXRpb25cbiAgICB9XG4gIH1cblxuICAvLyBST1RBVEVfQVNfUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZVJvdGF0ZUFzUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUk9UQVRFX0FTX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICBjb25zdCBwbGF5ZXIgPSBUcmFuc2Zvcm0uZ2V0T3JOdWxsKGVuZ2luZS5QbGF5ZXJFbnRpdHkpXG4gICAgaWYgKHRyYW5zZm9ybSAmJiBwbGF5ZXIpIHtcbiAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbiA9IHBsYXllci5yb3RhdGlvblxuICAgIH1cbiAgfVxuXG4gIC8vIFBMQUNFX09OX0NBTUVSQVxuICBmdW5jdGlvbiBoYW5kbGVQbGFjZU9uQ2FtZXJhKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBQ0VfT05fQ0FNRVJBPixcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGNvbnN0IGNhbWVyYSA9IFRyYW5zZm9ybS5nZXRPck51bGwoZW5naW5lLkNhbWVyYUVudGl0eSlcbiAgICBpZiAodHJhbnNmb3JtICYmIGNhbWVyYSkge1xuICAgICAgdHJhbnNmb3JtLnBvc2l0aW9uID0gY2FtZXJhLnBvc2l0aW9uXG4gICAgfVxuICB9XG5cbiAgLy8gUk9UQVRFX0FTX0NBTUVSQVxuICBmdW5jdGlvbiBoYW5kbGVSb3RhdGVBc0NhbWVyYShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJPVEFURV9BU19DQU1FUkE+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgY29uc3QgY2FtZXJhID0gVHJhbnNmb3JtLmdldE9yTnVsbChlbmdpbmUuQ2FtZXJhRW50aXR5KVxuICAgIGlmICh0cmFuc2Zvcm0gJiYgY2FtZXJhKSB7XG4gICAgICB0cmFuc2Zvcm0ucm90YXRpb24gPSBjYW1lcmEucm90YXRpb25cbiAgICB9XG4gIH1cblxuICAvLyBTRVRfUE9TSVRJT05cbiAgZnVuY3Rpb24gaGFuZGxlU2V0UG9zaXRpb24oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9QT1NJVElPTj4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWxhdGl2ZSkge1xuICAgICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBWZWN0b3IzLmFkZChcbiAgICAgICAgICB0cmFuc2Zvcm0ucG9zaXRpb24sXG4gICAgICAgICAgVmVjdG9yMy5jcmVhdGUocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueiksXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IFZlY3RvcjMuY3JlYXRlKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1JPVEFUSU9OXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFJvdGF0aW9uKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfUk9UQVRJT04+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgaWYgKHBheWxvYWQucmVsYXRpdmUpIHtcbiAgICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uID0gUXVhdGVybmlvbi5tdWx0aXBseShcbiAgICAgICAgICB0cmFuc2Zvcm0ucm90YXRpb24sXG4gICAgICAgICAgUXVhdGVybmlvbi5mcm9tRXVsZXJEZWdyZWVzKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopLFxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm0ucm90YXRpb24gPSBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMoXG4gICAgICAgICAgcGF5bG9hZC54LFxuICAgICAgICAgIHBheWxvYWQueSxcbiAgICAgICAgICBwYXlsb2FkLnosXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTRVRfU0NBTEVcbiAgZnVuY3Rpb24gaGFuZGxlU2V0U2NhbGUoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9TQ0FMRT4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWxhdGl2ZSkge1xuICAgICAgICB0cmFuc2Zvcm0uc2NhbGUgPSBWZWN0b3IzLmFkZChcbiAgICAgICAgICB0cmFuc2Zvcm0uc2NhbGUsXG4gICAgICAgICAgVmVjdG9yMy5jcmVhdGUocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueiksXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybS5zY2FsZSA9IFZlY3RvcjMuY3JlYXRlKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRk9MTE9XX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVGb2xsb3dQbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkZPTExPV19QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IHNwZWVkLCB4LCB5LCB6LCBtaW5EaXN0YW5jZSB9ID0gcGF5bG9hZFxuICAgIGZvbGxvd01hcC5zZXQoZW50aXR5LCB7XG4gICAgICB0YXJnZXQ6IGVuZ2luZS5QbGF5ZXJFbnRpdHksXG4gICAgICBzcGVlZCxcbiAgICAgIG1pbkRpc3RhbmNlLFxuICAgICAgYXhlczogeyB4LCB5LCB6IH0sXG4gICAgfSlcbiAgfVxuXG4gIC8vIFNUT1BfRk9MTE9XSU5HX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVTdG9wRm9sbG93aW5nUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9GT0xMT1dJTkdfUExBWUVSPixcbiAgKSB7XG4gICAgZm9sbG93TWFwLmRlbGV0ZShlbnRpdHkpXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVSYW5kb20oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJBTkRPTT4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9ucyB9ID0gcGF5bG9hZFxuICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpXG4gICAgY29uc3QgYWN0aW9uTmFtZSA9IGFjdGlvbnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWN0aW9ucy5sZW5ndGgpXVxuICAgIGNvbnN0IGFjdGlvbiA9IGZpbmRBY3Rpb25CeU5hbWUoZW50aXR5LCBhY3Rpb25OYW1lKVxuICAgIGlmIChhY3Rpb24pIHtcbiAgICAgIGFjdGlvbkV2ZW50cy5lbWl0KGFjdGlvbi5uYW1lLCBnZXRQYXlsb2FkKGFjdGlvbikpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQmF0Y2goXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkJBVENIPixcbiAgKSB7XG4gICAgY29uc3QgeyBhY3Rpb25zIH0gPSBwYXlsb2FkXG4gICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSlcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpXG4gICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIGFjdGlvbkV2ZW50cy5lbWl0KGFjdGlvbi5uYW1lLCBnZXRQYXlsb2FkKGFjdGlvbikpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSGVhbFBsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSEVBTF9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IG11bHRpcGxpZXIgfSA9IHBheWxvYWRcblxuICAgIGNvbnN0IGdldFJvb3QgPSAoZW50aXR5OiBFbnRpdHkpOiBFbnRpdHkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50ID0gZ2V0RW50aXR5UGFyZW50KGVudGl0eSlcbiAgICAgIHJldHVybiAhcGFyZW50ID8gZW50aXR5IDogZ2V0Um9vdChwYXJlbnQpXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgaGVhbFRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KHRhcmdldClcbiAgICAgIGlmIChyb290ID09PSBlbmdpbmUuUGxheWVyRW50aXR5KSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKHRhcmdldClcbiAgICAgICAgY29uc3QgdG90YWwgPSBNYXRoLm1heChtdWx0aXBsaWVyID8/IDEsIDEpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9IRUFMX1BMQVlFUilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QodXJsOiBzdHJpbmcsIGluaXQ/OiBGbGF0RmV0Y2hJbml0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2lnbmVkRmV0Y2goe1xuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgLi4uKGluaXQgPyB7IGluaXQgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5ib2R5KSB7XG4gICAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJ1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBqc29uID0gYXdhaXQgSlNPTi5wYXJzZShyZXNwb25zZS5ib2R5KVxuXG4gICAgICBpZiAoIWpzb24ub2spIHtcbiAgICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhbXBhaWduIGRhdGEnXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBqc29uLmRhdGFcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJ1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaENhbXBhaWduc0J5RGlzcGVuc2VyS2V5KGRpc3BlbnNlcktleTogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsID0gYCR7UkVXQVJEU19TRVJWRVJfVVJMfS9hcGkvY2FtcGFpZ25zL2tleXM/Y2FtcGFpZ25fa2V5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc3BlbnNlcktleSl9YFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdCh1cmwpXG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaENhcHRjaGEoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KGAke1JFV0FSRFNfU0VSVkVSX1VSTH0vYXBpL2NhcHRjaGFgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgfSlcbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RUb2tlbihcbiAgICBkaXNwZW5zZXJLZXk6IHN0cmluZyxcbiAgICBjYXB0Y2hhPzoge1xuICAgICAgaWQ6IHN0cmluZ1xuICAgICAgdmFsdWU6IHN0cmluZ1xuICAgIH0sXG4gICkge1xuICAgIGNvbnN0IHVybCA9IGAke1JFV0FSRFNfU0VSVkVSX1VSTH0vYXBpL3Jld2FyZHNgXG4gICAgY29uc3QgcmVhbG0gPSBhd2FpdCBnZXRSZWFsbSh7fSlcbiAgICBjb25zdCBwbGF5ZXIgPSBwbGF5ZXJzSGVscGVyPy5nZXRQbGF5ZXIoKVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjYW1wYWlnbl9rZXk6IGRpc3BlbnNlcktleSxcbiAgICAgICAgYmVuZWZpY2lhcnk6ICFwbGF5ZXI/LmlzR3Vlc3QgPyBwbGF5ZXI/LnVzZXJJZCA6ICcnLFxuICAgICAgICBjYXRhbHlzdDogcmVhbG0ucmVhbG1JbmZvID8gcmVhbG0ucmVhbG1JbmZvLmJhc2VVcmwgOiAnJyxcbiAgICAgICAgLi4uKGNhcHRjaGFcbiAgICAgICAgICA/IHsgY2FwdGNoYV9pZDogY2FwdGNoYS5pZCwgY2FwdGNoYV92YWx1ZTogY2FwdGNoYS52YWx1ZSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KSxcbiAgICB9KVxuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2xhaW1BaXJkcm9wKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQ0xBSU1fQUlSRFJPUD4sXG4gICkge1xuICAgIGNvbnN0IHJld2FyZHMgPSBSZXdhcmRzLmdldE9yTnVsbChlbnRpdHkpXG4gICAgaWYgKCFyZXdhcmRzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB7IHRlc3RNb2RlLCBjYW1wYWlnbklkLCBkaXNwZW5zZXJLZXkgfSA9IHJld2FyZHNcblxuICAgIGlmICh0ZXN0TW9kZSkge1xuICAgICAgLy8gVE9ETzogU2hvdyBhbiBVSSBpbmRpY2F0aW5nIHRlc3RpbmcgbW9kZVxuICAgICAgLy8gJ0hhbmRsZSBDbGFpbSBBaXJkcm9wIGluIFRlc3QgTW9kZSA6KSdcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZldGNoQ2FtcGFpZ25zQnlEaXNwZW5zZXJLZXkoZGlzcGVuc2VyS2V5KVxuICAgICAgLnRoZW4oKGNhbXBhaWducykgPT4ge1xuICAgICAgICBjb25zdCBjYW1wYWlnbiA9IGNhbXBhaWducy5maW5kKFxuICAgICAgICAgIChjOiBhbnkpID0+IGMuY2FtcGFpZ25faWQgPT09IGNhbXBhaWduSWQsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGNhbXBhaWduICYmIGNhbXBhaWduLmVuYWJsZWQpIHtcbiAgICAgICAgICBpZiAoY2FtcGFpZ24ucmVxdWlyZXNfY2FwdGNoYSkge1xuICAgICAgICAgICAgZmV0Y2hDYXB0Y2hhKClcbiAgICAgICAgICAgICAgLnRoZW4oKGNhcHRjaGEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FwdGNoYSkge1xuICAgICAgICAgICAgICAgICAgX3Nob3dDYXB0Y2hhUHJvbXB0KGVudGl0eSwge1xuICAgICAgICAgICAgICAgICAgICBjYW1wYWlnbklkLFxuICAgICAgICAgICAgICAgICAgICBkaXNwZW5zZXJLZXksXG4gICAgICAgICAgICAgICAgICAgIGNhcHRjaGEsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAgICAgICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhcHRjaGEnXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3RUb2tlbihkaXNwZW5zZXJLZXkpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAvLyBUT0RPOiBTaG93IGFuIGVycm9yIFByb21wdFxuICAgICAgICAvLyAnRXJyb3IgZmV0Y2hpbmcgY2FtcGFpZ24gZGF0YScsIGVycm9yXG4gICAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gX3Nob3dDYXB0Y2hhUHJvbXB0KFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBkYXRhOiB7IGNhbXBhaWduSWQ6IHN0cmluZzsgZGlzcGVuc2VyS2V5OiBzdHJpbmc7IGNhcHRjaGE6IGFueSB9LFxuICApIHtcbiAgICBzaG93Q2FwdGNoYVByb21wdChcbiAgICAgIGVuZ2luZSxcbiAgICAgIFVpVHJhbnNmb3JtLFxuICAgICAgVWlCYWNrZ3JvdW5kLFxuICAgICAgVWlUZXh0LFxuICAgICAgVWlJbnB1dCxcbiAgICAgIFVpSW5wdXRSZXN1bHQsXG4gICAgICBwb2ludGVyRXZlbnRzU3lzdGVtLFxuICAgICAgZGF0YSxcbiAgICAgIChpbnB1dFRleHQpID0+IHtcbiAgICAgICAgLy8gUmVxdWVzdCB0b2tlbiB3aXRoIGNhcHRjaGEgdmFsaWRhdGlvblxuICAgICAgICByZXF1ZXN0VG9rZW4oZGF0YS5kaXNwZW5zZXJLZXksIHtcbiAgICAgICAgICBpZDogZGF0YS5jYXB0Y2hhLmlkLFxuICAgICAgICAgIHZhbHVlOiBpbnB1dFRleHQsXG4gICAgICAgIH0pLnRoZW4oKHRva2VuOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIC8vICdUb2tlbiByZXF1ZXN0ZWQgc3VjY2Vzc2Z1bGx5JywgeyB0b2tlbiB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICApXG4gIH1cbn1cbiJdfQ==
943
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxRQUFRLEVBQ1IsV0FBVyxFQU9YLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsS0FBSyxHQU1OLE1BQU0sVUFBVSxDQUFBO0FBQ2pCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ25ELE9BQU8sRUFDTCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUNqQixNQUFNLGdCQUFnQixDQUFBO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUMxRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFDWixpQkFBaUIsRUFDakIsZUFBZSxHQUNoQixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3hELE9BQU8sRUFBaUIsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFFTCxVQUFVLEVBR1YsY0FBYyxFQUVkLFdBQVcsRUFDWCxTQUFTLEVBQ1QsS0FBSyxFQUNMLGFBQWEsRUFDYixnQ0FBZ0MsR0FDakMsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUM1RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEdBQ1osTUFBTSxTQUFTLENBQUE7QUFDaEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixD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Q0osQ0FBQztvQkFDSCxDQUFDLENBQUM7eUJBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBR2pCLENBQUMsQ0FBQyxDQUFBO2dCQUNOLENBQUM7cUJBQU0sQ0FBQztvQkFDTixZQUFZLENBQUMsWUFBWSxDQUFDLENBQUE7Z0JBQzVCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFHakIsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsU0FBUyxrQkFBa0IsQ0FDekIsT0FBZSxFQUNmLElBQWdFO1FBRWhFLGlCQUFpQixDQUNmLE1BQU0sRUFDTixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixPQUFPLEVBQ1AsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixJQUFJLEVBQ0osQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUVaLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUM5QixFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNuQixLQUFLLEVBQUUsU0FBUzthQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBRVosQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUNGLENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIElFbmdpbmUsXG4gIEVudGl0eSxcbiAgTWF0ZXJpYWwsXG4gIEF1ZGlvU3RyZWFtLFxuICBZR1VuaXQsXG4gIFRleHRBbGlnbk1vZGUsXG4gIEZvbnQsXG4gIFlHUG9zaXRpb25UeXBlLFxuICBQb2ludGVyRmlsdGVyTW9kZSxcbiAgSW5wdXRBY3Rpb24sXG4gIE1lc2hDb2xsaWRlcixcbiAgZ2V0Q29tcG9uZW50RW50aXR5VHJlZSxcbiAgVHdlZW4sXG4gIE1vdmUsXG4gIFBCVHdlZW4sXG4gIFJvdGF0ZSxcbiAgU2NhbGUsXG4gIFBvaW50ZXJFdmVudHNTeXN0ZW0sXG59IGZyb20gJ0BkY2wvZWNzJ1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gJ0BkY2wvc2RrL21hdGgnXG5pbXBvcnQge1xuICBnZXRFbnRpdHlQYXJlbnQsXG4gIGdldFBsYXllclBvc2l0aW9uLFxuICBnZXRXb3JsZFBvc2l0aW9uLFxufSBmcm9tICdAZGNsLXNkay91dGlscydcbmltcG9ydCB7IHJlcXVlc3RUZWxlcG9ydCB9IGZyb20gJ35zeXN0ZW0vVXNlckFjdGlvbk1vZHVsZSdcbmltcG9ydCB7XG4gIG1vdmVQbGF5ZXJUbyxcbiAgdHJpZ2dlckVtb3RlLFxuICB0cmlnZ2VyU2NlbmVFbW90ZSxcbiAgb3BlbkV4dGVybmFsVXJsLFxufSBmcm9tICd+c3lzdGVtL1Jlc3RyaWN0ZWRBY3Rpb25zJ1xuaW1wb3J0IHsgZ2V0QWN0aXZlVmlkZW9TdHJlYW1zIH0gZnJvbSAnfnN5c3RlbS9Db21tc0FwaSdcbmltcG9ydCB7IEZsYXRGZXRjaEluaXQsIHNpZ25lZEZldGNoIH0gZnJvbSAnfnN5c3RlbS9TaWduZWRGZXRjaCdcbmltcG9ydCB7IGdldFJlYWxtIH0gZnJvbSAnfnN5c3RlbS9SdW50aW1lJ1xuaW1wb3J0IHtcbiAgQWN0aW9uUGF5bG9hZCxcbiAgQWN0aW9uVHlwZSxcbiAgSVNES0hlbHBlcnMsXG4gIElQbGF5ZXJzSGVscGVyLFxuICBQcm94aW1pdHlMYXllcixcbiAgU2NyZWVuQWxpZ25Nb2RlLFxuICBUcmlnZ2VyVHlwZSxcbiAgVHdlZW5UeXBlLFxuICBjbG9uZSxcbiAgZ2V0Q29tcG9uZW50cyxcbiAgaW5pdFZpZGVvUGxheWVyQ29tcG9uZW50TWF0ZXJpYWwsXG59IGZyb20gJy4vZGVmaW5pdGlvbnMnXG5pbXBvcnQgeyBnZXREZWZhdWx0VmFsdWUsIGlzVmFsaWRTdGF0ZSB9IGZyb20gJy4vc3RhdGVzJ1xuaW1wb3J0IHsgZ2V0QWN0aW9uRXZlbnRzLCBnZXRUcmlnZ2VyRXZlbnRzIH0gZnJvbSAnLi9ldmVudHMnXG5pbXBvcnQge1xuICBzdGFydEludGVydmFsLFxuICBzdGFydFRpbWVvdXQsXG4gIHN0b3BBbGxJbnRlcnZhbHMsXG4gIHN0b3BBbGxUaW1lb3V0cyxcbiAgc3RvcEludGVydmFsLFxuICBzdG9wVGltZW91dCxcbn0gZnJvbSAnLi90aW1lcidcbmltcG9ydCB7IGdldFBheWxvYWQgfSBmcm9tICcuL2FjdGlvbi10eXBlcydcbmltcG9ydCB7XG4gIGdldFVJQmFja2dyb3VuZCxcbiAgZ2V0VUlUZXh0LFxuICBnZXRVSVRyYW5zZm9ybSxcbiAgbWFwQWxpZ25Ub1NjcmVlbkFsaWduLFxuICBzaG93Q2FwdGNoYVByb21wdCxcbn0gZnJvbSAnLi91aSdcbmltcG9ydCB7IGdldEV4cGxvcmVyQ29tcG9uZW50cyB9IGZyb20gJy4vY29tcG9uZW50cydcbmltcG9ydCB7IGluaXRUcmlnZ2VycywgZGFtYWdlVGFyZ2V0cywgaGVhbFRhcmdldHMgfSBmcm9tICcuL3RyaWdnZXJzJ1xuaW1wb3J0IHsgZm9sbG93TWFwIH0gZnJvbSAnLi90cmFuc2Zvcm0nXG5pbXBvcnQgeyBnZXRFYXNpbmdGdW5jdGlvbkZyb21JbnRlcnBvbGF0aW9uIH0gZnJvbSAnLi90d2VlbnMnXG5pbXBvcnQgeyBSRVdBUkRTX1NFUlZFUl9VUkwgfSBmcm9tICcuL2FkbWluLXRvb2xraXQtdWkvY29uc3RhbnRzJ1xuXG5jb25zdCBpbml0ZWRFbnRpdGllcyA9IG5ldyBTZXQ8RW50aXR5PigpXG5jb25zdCB1aVN0YWNrcyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHk+KClcbmNvbnN0IGxhc3RVaUVudGl0eUNsaWNrZWQgPSBuZXcgTWFwPEVudGl0eSwgRW50aXR5PigpXG5cbmxldCBpbnRlcm5hbEluaXRBY3Rpb25zOiAoKGVudGl0eTogRW50aXR5KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsXG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0QWN0aW9ucyhlbnRpdHk6IEVudGl0eSkge1xuICBpZiAoaW50ZXJuYWxJbml0QWN0aW9ucykge1xuICAgIHJldHVybiBpbnRlcm5hbEluaXRBY3Rpb25zKGVudGl0eSlcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYENhbm5vdCBjYWxsIGluaXRBY3Rpb25zIHdoaWxlIGFjdGlvbnNTeXN0ZW0gaGFzIG5vdCBiZWVuIGNyZWF0ZWRgLFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBY3Rpb25zU3lzdGVtKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIHNka0hlbHBlcnM/OiBJU0RLSGVscGVycyxcbiAgcGxheWVyc0hlbHBlcj86IElQbGF5ZXJzSGVscGVyLFxuKSB7XG4gIGNvbnN0IHtcbiAgICBBbmltYXRvcixcbiAgICBUcmFuc2Zvcm0sXG4gICAgQXVkaW9Tb3VyY2UsXG4gICAgQXZhdGFyQXR0YWNoLFxuICAgIFZpc2liaWxpdHlDb21wb25lbnQsXG4gICAgR2x0ZkNvbnRhaW5lcixcbiAgICBVaVRyYW5zZm9ybSxcbiAgICBVaVRleHQsXG4gICAgVWlCYWNrZ3JvdW5kLFxuICAgIFVpSW5wdXQsXG4gICAgVWlJbnB1dFJlc3VsdCxcbiAgICBOYW1lLFxuICAgIFR3ZWVuOiBUd2VlbkNvbXBvbmVudCxcbiAgICBUd2VlblNlcXVlbmNlLFxuICAgIFZpZGVvUGxheWVyLFxuICB9ID0gZ2V0RXhwbG9yZXJDb21wb25lbnRzKGVuZ2luZSlcbiAgY29uc3QgeyBBY3Rpb25zLCBTdGF0ZXMsIENvdW50ZXIsIFRyaWdnZXJzLCBSZXdhcmRzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSlcblxuICAvLyBzYXZlIGludGVybmFsIHJlZmVyZW5jZSB0byBpbml0IGZ1bmNpb25cbiAgaW50ZXJuYWxJbml0QWN0aW9ucyA9IGluaXRBY3Rpb25zXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGFjdGlvbnNTeXN0ZW0oX2R0OiBudW1iZXIpIHtcbiAgICBjb25zdCBlbnRpdGllc1dpdGhBY3Rpb25zID0gZW5naW5lLmdldEVudGl0aWVzV2l0aChBY3Rpb25zKVxuXG4gICAgZm9yIChjb25zdCBbZW50aXR5XSBvZiBlbnRpdGllc1dpdGhBY3Rpb25zKSB7XG4gICAgICBpbml0QWN0aW9ucyhlbnRpdHkpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdEFjdGlvbnMoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBpZiAoIUFjdGlvbnMuaGFzKGVudGl0eSkgfHwgaW5pdGVkRW50aXRpZXMuaGFzKGVudGl0eSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGdldCBhY3Rpb25zIGRhdGFcbiAgICBjb25zdCBhY3Rpb25zID0gQWN0aW9ucy5nZXQoZW50aXR5KVxuXG4gICAgLy8gaW5pdGlhbGl6ZSBhY3Rpb25zIGZvciBnaXZlbiBlbnRpdHlcbiAgICBjb25zdCB0eXBlcyA9IGFjdGlvbnMudmFsdWUucmVkdWNlKFxuICAgICAgKHR5cGVzLCBhY3Rpb24pID0+IHR5cGVzLmFkZChhY3Rpb24udHlwZSksXG4gICAgICBuZXcgU2V0PFN0cmluZz4oKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BTklNQVRJT046IHtcbiAgICAgICAgICBpbml0UGxheUFuaW1hdGlvbihlbnRpdHkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYmluZCBhY3Rpb25zXG4gICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSlcbiAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zLnZhbHVlKSB7XG4gICAgICBhY3Rpb25FdmVudHMub24oYWN0aW9uLm5hbWUsICgpID0+IHtcbiAgICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTjoge1xuICAgICAgICAgICAgaGFuZGxlUGxheUFuaW1hdGlvbihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BTklNQVRJT04+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT046IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BBbmltYXRpb24oXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQU5JTUFUSU9OPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9TVEFURToge1xuICAgICAgICAgICAgaGFuZGxlU2V0U3RhdGUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NUQVRFPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUQVJUX1RXRUVOOiB7XG4gICAgICAgICAgICBoYW5kbGVTdGFydFR3ZWVuKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9DT1VOVEVSOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRDb3VudGVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9DT1VOVEVSPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSOiB7XG4gICAgICAgICAgICBoYW5kbGVJbmNyZW1lbnRDb3VudGVyKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ERUNSRUFTRV9DT1VOVEVSOiB7XG4gICAgICAgICAgICBoYW5kbGVEZWNyZWFzZUNvdW50ZXIoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkRFQ1JFQVNFX0NPVU5URVI+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9TT1VORDoge1xuICAgICAgICAgICAgaGFuZGxlUGxheVNvdW5kKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfU09VTkQ+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9TT1VORDoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcFNvdW5kKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfU09VTkQ+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk6IHtcbiAgICAgICAgICAgIGhhbmRsZVNldFZpc2liaWxpdHkoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9WSVNJQklMSVRZPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUF0dGFjaFRvUGxheWVyKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5BVFRBQ0hfVE9fUExBWUVSPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkRFVEFDSF9GUk9NX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlRGV0YWNoRnJvbVBsYXllcihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5VmlkZW8oXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfVklERU9fU1RSRUFNOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wVmlkZW8oXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfVklERU9fU1RSRUFNPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQVVESU9fU1RSRUFNOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5QXVkaW9TdHJlYW0oXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQVVESU9fU1RSRUFNPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfQVVESU9fU1RSRUFNOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wQXVkaW9TdHJlYW0oXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQVVESU9fU1RSRUFNPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlRFTEVQT1JUX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlVGVsZXBvcnRQbGF5ZXIoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlRFTEVQT1JUX1BMQVlFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5NT1ZFX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlTW92ZVBsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5NT1ZFX1BMQVlFUj4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0RFRkFVTFRfRU1PVEU6IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlEZWZhdWx0RW1vdGUoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfREVGQVVMVF9FTU9URT4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0NVU1RPTV9FTU9URToge1xuICAgICAgICAgICAgaGFuZGxlUGxheUN1c3RvbUVtb3RlKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0NVU1RPTV9FTU9URT4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5PUEVOX0xJTks6IHtcbiAgICAgICAgICAgIGhhbmRsZU9wZW5MaW5rKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLk9QRU5fTElOSz4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TSE9XX1RFWFQ6IHtcbiAgICAgICAgICAgIGhhbmRsZVNob3dUZXh0KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfVEVYVD4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ISURFX1RFWFQ6IHtcbiAgICAgICAgICAgIGhhbmRsZUhpZGVUZXh0KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfVEVYVD4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVEFSVF9ERUxBWToge1xuICAgICAgICAgICAgaGFuZGxlU3RhcnREZWxheShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9ERUxBWT4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0RFTEFZOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wRGVsYXkoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9ERUxBWT4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVEFSVF9MT09QOiB7XG4gICAgICAgICAgICBoYW5kbGVTdGFydExvb3AoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfTE9PUD4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0xPT1A6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BMb29wKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfTE9PUD4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DTE9ORV9FTlRJVFk6IHtcbiAgICAgICAgICAgIGhhbmRsZUNsb25lRW50aXR5KFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5DTE9ORV9FTlRJVFk+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUkVNT1ZFX0VOVElUWToge1xuICAgICAgICAgICAgaGFuZGxlUmVtb3ZlRW50aXR5KFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5SRU1PVkVfRU5USVRZPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNIT1dfSU1BR0U6IHtcbiAgICAgICAgICAgIGhhbmRsZVNob3dJbWFnZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TSE9XX0lNQUdFPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkhJREVfSU1BR0U6IHtcbiAgICAgICAgICAgIGhhbmRsZUhpZGVJbWFnZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ISURFX0lNQUdFPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkRBTUFHRToge1xuICAgICAgICAgICAgaGFuZGxlRGFtYWdlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkRBTUFHRT4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5NT1ZFX1BMQVlFUl9IRVJFOiB7XG4gICAgICAgICAgICBoYW5kbGVNb3ZlUGxheWVySGVyZShcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuTU9WRV9QTEFZRVJfSEVSRT4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5GT0xMT1dfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVGb2xsb3dQbGF5ZXIoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkZPTExPV19QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9GT0xMT1dJTkdfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wRm9sbG93aW5nUGxheWVyKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0ZPTExPV0lOR19QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBQ0VfT05fUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGFjZU9uUGxheWVyKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFDRV9PTl9QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUk9UQVRFX0FTX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlUm90YXRlQXNQbGF5ZXIoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlJPVEFURV9BU19QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBQ0VfT05fQ0FNRVJBOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGFjZU9uQ2FtZXJhKFxuICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFDRV9PTl9DQU1FUkE+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUk9UQVRFX0FTX0NBTUVSQToge1xuICAgICAgICAgICAgaGFuZGxlUm90YXRlQXNDYW1lcmEoXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlJPVEFURV9BU19DQU1FUkE+KGFjdGlvbiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1BPU0lUSU9OOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRQb3NpdGlvbihcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1BPU0lUSU9OPihhY3Rpb24pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9ST1RBVElPTjoge1xuICAgICAgICAgICAgaGFuZGxlU2V0Um90YXRpb24oXG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9ST1RBVElPTj4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfU0NBTEU6IHtcbiAgICAgICAgICAgIGhhbmRsZVNldFNjYWxlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9TQ0FMRT4oYWN0aW9uKSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5SQU5ET006IHtcbiAgICAgICAgICAgIGhhbmRsZVJhbmRvbShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5SQU5ET00+KGFjdGlvbikpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQkFUQ0g6IHtcbiAgICAgICAgICAgIGhhbmRsZUJhdGNoKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkJBVENIPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkhFQUxfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVIZWFsUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkhFQUxfUExBWUVSPihhY3Rpb24pKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNMQUlNX0FJUkRST1A6IHtcbiAgICAgICAgICAgIGhhbmRsZUNsYWltQWlyZHJvcChcbiAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0xBSU1fQUlSRFJPUD4oYWN0aW9uKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGluaXRlZEVudGl0aWVzLmFkZChlbnRpdHkpXG4gIH1cblxuICAvLyBQTEFZX0FOSU1BVElPTlxuICBmdW5jdGlvbiBpbml0UGxheUFuaW1hdGlvbihlbnRpdHk6IEVudGl0eSkge1xuICAgIGlmICghQW5pbWF0b3IuaGFzKGVudGl0eSkpIHtcbiAgICAgIEFuaW1hdG9yLmNyZWF0ZShlbnRpdHksIHtcbiAgICAgICAgc3RhdGVzOiBbXSxcbiAgICAgIH0pXG4gICAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhlbnRpdHkpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplQW5pbWF0aW9uV2VpZ2h0KHJhd1dlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAocmF3V2VpZ2h0IDwgMCB8fCByYXdXZWlnaHQgPiAxKSByZXR1cm4gMVxuICAgIHJldHVybiByYXdXZWlnaHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlBbmltYXRpb24oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OPixcbiAgKSB7XG4gICAgY29uc3QgeyBhbmltYXRpb24sIGxvb3AgfSA9IHBheWxvYWRcblxuICAgIGNvbnN0IGFuaW1hdG9yID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShlbnRpdHkpXG4gICAgaWYgKCFhbmltYXRvci5zdGF0ZXMuc29tZSgoJCkgPT4gJC5jbGlwID09PSBhbmltYXRpb24pKSB7XG4gICAgICBhbmltYXRvci5zdGF0ZXMgPSBbXG4gICAgICAgIC4uLmFuaW1hdG9yLnN0YXRlcyxcbiAgICAgICAge1xuICAgICAgICAgIGNsaXA6IGFuaW1hdGlvbixcbiAgICAgICAgfSxcbiAgICAgIF1cbiAgICB9XG5cbiAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhlbnRpdHkpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xpcCA9IEFuaW1hdG9yLmdldENsaXAoZW50aXR5LCBhbmltYXRpb24pXG4gICAgICBjbGlwLnBsYXlpbmcgPSB0cnVlXG4gICAgICBjbGlwLmxvb3AgPSBsb29wID8/IGZhbHNlXG4gICAgICBjbGlwLndlaWdodCA9IG5vcm1hbGl6ZUFuaW1hdGlvbldlaWdodChjbGlwLndlaWdodCA/PyAxKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBsYXlpbmcgYW5pbWF0aW9uJywgZSlcbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0FOSU1BVElPTlxuICBmdW5jdGlvbiBoYW5kbGVTdG9wQW5pbWF0aW9uKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT04+LFxuICApIHtcbiAgICBpZiAoQW5pbWF0b3IuaGFzKGVudGl0eSkpIHtcbiAgICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICAvLyBTRVRfU1RBVEVcbiAgZnVuY3Rpb24gaGFuZGxlU2V0U3RhdGUoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9TVEFURT4sXG4gICkge1xuICAgIGNvbnN0IHN0YXRlcyA9IFN0YXRlcy5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChzdGF0ZXMpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShzdGF0ZXMpXG4gICAgICBsZXQgbmV4dFN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwYXlsb2FkLnN0YXRlXG4gICAgICBuZXh0U3RhdGUgPSBpc1ZhbGlkU3RhdGUoc3RhdGVzLCBuZXh0U3RhdGUpID8gbmV4dFN0YXRlIDogZGVmYXVsdFZhbHVlXG4gICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gc3RhdGVzLmN1cnJlbnRWYWx1ZSA/PyBkZWZhdWx0VmFsdWUgPz8gdW5kZWZpbmVkXG4gICAgICBzdGF0ZXMucHJldmlvdXNWYWx1ZSA9IHByZXZpb3VzVmFsdWVcbiAgICAgIHN0YXRlcy5jdXJyZW50VmFsdWUgPSBuZXh0U3RhdGVcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX1NUQVRFX0NIQU5HRSlcbiAgICB9XG4gIH1cblxuICAvLyBTVEFSVF9UV0VFTlxuICBmdW5jdGlvbiBoYW5kbGVTdGFydFR3ZWVuKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICkge1xuICAgIGlmIChwYXlsb2FkKSB7XG4gICAgICAvLyBHZXQgdGhlIGluaXRpYWwgdHdlZW4gaWYgZXhpc3RzIHRvIHJldmVydCB0aGUgb2JqZWN0IG1vdmVtZW50IHRvIHRoYXQgc2VxdWVuY2Ugd2hlbiBleGVjdXRpbmcgYSB0d2VlbiBmcm9tIGFjdGlvbnNcbiAgICAgIGNvbnN0IGluaXRpYWxUd2VlbiA9IFR3ZWVuQ29tcG9uZW50LmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgICAgbGV0IHR3ZWVuXG5cbiAgICAgIHN3aXRjaCAocGF5bG9hZC50eXBlKSB7XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLk1PVkVfSVRFTToge1xuICAgICAgICAgIHR3ZWVuID0gaGFuZGxlTW92ZUl0ZW0oZW50aXR5LCBwYXlsb2FkKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUd2VlblR5cGUuUk9UQVRFX0lURU06IHtcbiAgICAgICAgICB0d2VlbiA9IGhhbmRsZVJvdGF0ZUl0ZW0oZW50aXR5LCBwYXlsb2FkKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUd2VlblR5cGUuU0NBTEVfSVRFTToge1xuICAgICAgICAgIHR3ZWVuID0gaGFuZGxlU2NhbGVJdGVtKGVudGl0eSwgcGF5bG9hZClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHdlZW4gdHlwZTogJHtwYXlsb2FkLnR5cGV9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXZlcnRUd2VlbihlbnRpdHksIGluaXRpYWxUd2VlbiwgdHdlZW4pXG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdGFydCB0byB0aGUgaW5pdGlhbCBtb3ZlbWVudCBzZXF1ZW5jZSB3aGVuIGV4ZWN1dGluZyBhbiBhZGl0aW9uYWwgdHdlZW5cbiAgZnVuY3Rpb24gcmV2ZXJ0VHdlZW4oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgaW5pdGlhbFR3ZWVuOiBQQlR3ZWVuIHwgbnVsbCxcbiAgICB0d2VlbjogUEJUd2VlbixcbiAgKSB7XG4gICAgY29uc3QgdHdlZW5TZXF1ZW5jZSA9IFR3ZWVuU2VxdWVuY2UuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgbGV0IF9yZXZlcnRUd2VlbiA9IHtcbiAgICAgIC4uLnR3ZWVuLFxuICAgIH1cblxuICAgIGlmICghaW5pdGlhbFR3ZWVuIHx8ICF0d2VlblNlcXVlbmNlIHx8ICF0d2VlblNlcXVlbmNlLmxvb3ApIHJldHVyblxuXG4gICAgc3dpdGNoIChpbml0aWFsVHdlZW4ubW9kZT8uJGNhc2UpIHtcbiAgICAgIGNhc2UgJ21vdmUnOiB7XG4gICAgICAgIF9yZXZlcnRUd2VlbiA9IHtcbiAgICAgICAgICAuLi5fcmV2ZXJ0VHdlZW4sXG4gICAgICAgICAgbW9kZTogVHdlZW4uTW9kZS5Nb3ZlKHtcbiAgICAgICAgICAgIHN0YXJ0OiAodHdlZW4ubW9kZSBhcyB7ICRjYXNlOiAnbW92ZSc7IG1vdmU6IE1vdmUgfSkubW92ZS5lbmQsXG4gICAgICAgICAgICBlbmQ6IGluaXRpYWxUd2Vlbi5tb2RlLm1vdmUuc3RhcnQsXG4gICAgICAgICAgfSksXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3JvdGF0ZSc6IHtcbiAgICAgICAgX3JldmVydFR3ZWVuID0ge1xuICAgICAgICAgIC4uLl9yZXZlcnRUd2VlbixcbiAgICAgICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlJvdGF0ZSh7XG4gICAgICAgICAgICBzdGFydDogKHR3ZWVuLm1vZGUgYXMgeyAkY2FzZTogJ3JvdGF0ZSc7IHJvdGF0ZTogUm90YXRlIH0pLnJvdGF0ZVxuICAgICAgICAgICAgICAuZW5kLFxuICAgICAgICAgICAgZW5kOiBpbml0aWFsVHdlZW4ubW9kZS5yb3RhdGUuc3RhcnQsXG4gICAgICAgICAgfSksXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3NjYWxlJzoge1xuICAgICAgICBfcmV2ZXJ0VHdlZW4gPSB7XG4gICAgICAgICAgLi4uX3JldmVydFR3ZWVuLFxuICAgICAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuU2NhbGUoe1xuICAgICAgICAgICAgc3RhcnQ6ICh0d2Vlbi5tb2RlIGFzIHsgJGNhc2U6ICdzY2FsZSc7IHNjYWxlOiBTY2FsZSB9KS5zY2FsZS5lbmQsXG4gICAgICAgICAgICBlbmQ6IGluaXRpYWxUd2Vlbi5tb2RlLnNjYWxlLnN0YXJ0LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0d2VlbiBtb2RlOiAke2luaXRpYWxUd2Vlbi5tb2RlfWApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGluaXRpYWwgdHdlZW4gaXMgbm90IHBsYXlpbmcgYnV0IHRoZSBsb29wIHByb3BlcnR5IGlzIGFjdGl2ZSwgc3RhcnQgaXRcbiAgICBpbml0aWFsVHdlZW4ucGxheWluZyA9IHRydWVcbiAgICB0d2VlblNlcXVlbmNlLnNlcXVlbmNlID0gW19yZXZlcnRUd2VlbiwgaW5pdGlhbFR3ZWVuXVxuICB9XG5cbiAgLy8gTU9WRV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmVJdGVtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KGVudGl0eSlcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSwgcmVsYXRpdmUgfSA9IHR3ZWVuXG4gICAgY29uc3QgZW5kID0gVmVjdG9yMy5jcmVhdGUodHdlZW4uZW5kLngsIHR3ZWVuLmVuZC55LCB0d2Vlbi5lbmQueilcbiAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHJlbGF0aXZlID8gVmVjdG9yMy5hZGQodHJhbnNmb3JtLnBvc2l0aW9uLCBlbmQpIDogZW5kXG5cbiAgICByZXR1cm4gVHdlZW5Db21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgbW9kZTogVHdlZW4uTW9kZS5Nb3ZlKHtcbiAgICAgICAgc3RhcnQ6IHRyYW5zZm9ybS5wb3NpdGlvbixcbiAgICAgICAgZW5kOiBlbmRQb3NpdGlvbixcbiAgICAgIH0pLFxuICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMTAwMCwgLy8gZnJvbSBzZWNzIHRvIG1zXG4gICAgICBlYXNpbmdGdW5jdGlvbjogZ2V0RWFzaW5nRnVuY3Rpb25Gcm9tSW50ZXJwb2xhdGlvbihpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgfSlcbiAgfVxuXG4gIC8vIFJPVEFURV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZVJvdGF0ZUl0ZW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KVxuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW5cbiAgICBjb25zdCBlbmQgPSBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMoXG4gICAgICB0d2Vlbi5lbmQueCxcbiAgICAgIHR3ZWVuLmVuZC55LFxuICAgICAgdHdlZW4uZW5kLnosXG4gICAgKVxuICAgIGNvbnN0IGVuZFJvdGF0aW9uID0gcmVsYXRpdmVcbiAgICAgID8gUXVhdGVybmlvbi5tdWx0aXBseSh0cmFuc2Zvcm0ucm90YXRpb24sIGVuZClcbiAgICAgIDogZW5kXG5cbiAgICByZXR1cm4gVHdlZW5Db21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgbW9kZTogVHdlZW4uTW9kZS5Sb3RhdGUoe1xuICAgICAgICBzdGFydDogdHJhbnNmb3JtLnJvdGF0aW9uLFxuICAgICAgICBlbmQ6IGVuZFJvdGF0aW9uLFxuICAgICAgfSksXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLCAvLyBmcm9tIHNlY3MgdG8gbXNcbiAgICAgIGVhc2luZ0Z1bmN0aW9uOiBnZXRFYXNpbmdGdW5jdGlvbkZyb21JbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb25UeXBlKSxcbiAgICB9KVxuICB9XG5cbiAgLy8gU0NBTEVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVTY2FsZUl0ZW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KVxuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW5cbiAgICBjb25zdCBlbmQgPSBWZWN0b3IzLmNyZWF0ZSh0d2Vlbi5lbmQueCwgdHdlZW4uZW5kLnksIHR3ZWVuLmVuZC56KVxuICAgIGNvbnN0IGVuZFNjYWxlID0gcmVsYXRpdmUgPyBWZWN0b3IzLmFkZCh0cmFuc2Zvcm0uc2NhbGUsIGVuZCkgOiBlbmRcblxuICAgIHJldHVybiBUd2VlbkNvbXBvbmVudC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlNjYWxlKHtcbiAgICAgICAgc3RhcnQ6IHRyYW5zZm9ybS5zY2FsZSxcbiAgICAgICAgZW5kOiBlbmRTY2FsZSxcbiAgICAgIH0pLFxuICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMTAwMCwgLy8gZnJvbSBzZWNzIHRvIG1zXG4gICAgICBlYXNpbmdGdW5jdGlvbjogZ2V0RWFzaW5nRnVuY3Rpb25Gcm9tSW50ZXJwb2xhdGlvbihpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgfSlcbiAgfVxuXG4gIC8vIFNFVF9DT1VOVEVSXG4gIGZ1bmN0aW9uIGhhbmRsZVNldENvdW50ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9DT1VOVEVSPixcbiAgKSB7XG4gICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSA9IHBheWxvYWQuY291bnRlclxuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ09VTlRFUl9DSEFOR0UpXG4gICAgfVxuICB9XG5cbiAgLy8gSU5DUkVNRU5UX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlSW5jcmVtZW50Q291bnRlcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICBjb25zdCBhbW91bnQgPSBwYXlsb2FkLmFtb3VudCA/PyAxXG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSArPSBhbW91bnRcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKVxuICAgIH1cbiAgfVxuXG4gIC8vIERFQ1JFQVNFX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlRGVjcmVhc2VDb3VudGVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUj4sXG4gICkge1xuICAgIGNvbnN0IGNvdW50ZXIgPSBDb3VudGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGNvbnN0IGFtb3VudCA9IHBheWxvYWQuYW1vdW50ID8/IDFcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlIC09IGFtb3VudFxuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ09VTlRFUl9DSEFOR0UpXG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9TT1VORFxuICBmdW5jdGlvbiBoYW5kbGVQbGF5U291bmQoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfU09VTkQ+LFxuICApIHtcbiAgICBjb25zdCB7IHNyYywgbG9vcCwgdm9sdW1lIH0gPSBwYXlsb2FkXG4gICAgaWYgKEF1ZGlvU291cmNlLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBdWRpb1NvdXJjZS5wbGF5U291bmQoZW50aXR5LCBzcmMpXG4gICAgICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU291cmNlLmdldE11dGFibGUoZW50aXR5KVxuICAgICAgYXVkaW9Tb3VyY2UubG9vcCA9IGxvb3BcbiAgICAgIGF1ZGlvU291cmNlLnZvbHVtZSA9IHZvbHVtZSA/PyAxXG4gICAgfSBlbHNlIHtcbiAgICAgIEF1ZGlvU291cmNlLmNyZWF0ZShlbnRpdHksIHtcbiAgICAgICAgYXVkaW9DbGlwVXJsOiBzcmMsXG4gICAgICAgIGxvb3AsXG4gICAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICAgIHZvbHVtZTogdm9sdW1lID8/IDEsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfU09VTkRcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcFNvdW5kKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9TT1VORD4sXG4gICkge1xuICAgIGNvbnN0IGF1ZGlvU291cmNlID0gQXVkaW9Tb3VyY2UuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgaWYgKGF1ZGlvU291cmNlKSB7XG4gICAgICBhdWRpb1NvdXJjZS5wbGF5aW5nID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBTRVRfVklTSUJJTElUWVxuICBmdW5jdGlvbiBoYW5kbGVTZXRWaXNpYmlsaXR5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfVklTSUJJTElUWT4sXG4gICkge1xuICAgIGNvbnN0IHsgdmlzaWJsZSwgY29sbGlkZXIgfSA9IHBheWxvYWRcbiAgICBWaXNpYmlsaXR5Q29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHsgdmlzaWJsZSB9KVxuICAgIGNvbnN0IGdsdGYgPSBHbHRmQ29udGFpbmVyLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGNvbnN0IG1lc2hDb2xsaWRlciA9IE1lc2hDb2xsaWRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChjb2xsaWRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZ2x0Zikge1xuICAgICAgICBnbHRmLmludmlzaWJsZU1lc2hlc0NvbGxpc2lvbk1hc2sgPSBjb2xsaWRlclxuICAgICAgfSBlbHNlIGlmIChtZXNoQ29sbGlkZXIpIHtcbiAgICAgICAgbWVzaENvbGxpZGVyLmNvbGxpc2lvbk1hc2sgPSBjb2xsaWRlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFUVEFDSF9UT19QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlQXR0YWNoVG9QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IGFuY2hvclBvaW50SWQgfSA9IHBheWxvYWRcbiAgICBBdmF0YXJBdHRhY2guY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwgeyBhbmNob3JQb2ludElkIH0pXG4gIH1cblxuICAvLyBERVRBQ0hfRlJPTV9QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlRGV0YWNoRnJvbVBsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkRFVEFDSF9GUk9NX1BMQVlFUj4sXG4gICkge1xuICAgIGlmIChBdmF0YXJBdHRhY2guaGFzKGVudGl0eSkpIHtcbiAgICAgIEF2YXRhckF0dGFjaC5kZWxldGVGcm9tKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICAvLyBURUxFUE9SVCBQTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlVGVsZXBvcnRQbGF5ZXIoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5URUxFUE9SVF9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IHgsIHkgfSA9IHBheWxvYWRcbiAgICByZXF1ZXN0VGVsZXBvcnQoe1xuICAgICAgZGVzdGluYXRpb246IGAke3h9LCR7eX1gLFxuICAgIH0pXG4gIH1cblxuICAvLyBNT1ZFIFBMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVNb3ZlUGxheWVyKFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuTU9WRV9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgbmV3UmVsYXRpdmVQb3NpdGlvbjogcGF5bG9hZC5wb3NpdGlvbixcbiAgICAgIGNhbWVyYVRhcmdldDogcGF5bG9hZC5jYW1lcmFUYXJnZXQsXG4gICAgfVxuICAgIHZvaWQgbW92ZVBsYXllclRvKG9wdGlvbnMpXG4gIH1cblxuICAvLyBQTEFZIERFRkFVTFQgRU1PVEVcbiAgZnVuY3Rpb24gaGFuZGxlUGxheURlZmF1bHRFbW90ZShcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfREVGQVVMVF9FTU9URT4sXG4gICkge1xuICAgIGNvbnN0IHsgZW1vdGUgfSA9IHBheWxvYWRcbiAgICB2b2lkIHRyaWdnZXJFbW90ZSh7IHByZWRlZmluZWRFbW90ZTogZW1vdGUgfSlcbiAgfVxuXG4gIC8vIFBMQVkgQ1VTVE9NIEVNT1RFXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlDdXN0b21FbW90ZShcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFPixcbiAgKSB7XG4gICAgY29uc3QgeyBzcmMsIGxvb3AgfSA9IHBheWxvYWRcbiAgICB2b2lkIHRyaWdnZXJTY2VuZUVtb3RlKHsgc3JjLCBsb29wIH0pXG4gIH1cblxuICAvLyBPUEVOIExJTktcbiAgZnVuY3Rpb24gaGFuZGxlT3BlbkxpbmsoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5PUEVOX0xJTks+LFxuICApIHtcbiAgICBjb25zdCB7IHVybCB9ID0gcGF5bG9hZFxuICAgIHZvaWQgb3BlbkV4dGVybmFsVXJsKHsgdXJsIH0pXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXRWaWRlb1NyYyh7XG4gICAgc3JjLFxuICAgIGRjbENhc3QsXG4gIH06IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1ZJREVPX1NUUkVBTT4pIHtcbiAgICBpZiAoZGNsQ2FzdCkge1xuICAgICAgY29uc3QgeyBzdHJlYW1zIH0gPSBhd2FpdCBnZXRBY3RpdmVWaWRlb1N0cmVhbXMoe30pXG4gICAgICByZXR1cm4gc3RyZWFtcy5sZW5ndGggPiAwID8gc3RyZWFtc1swXS50cmFja1NpZCA6ICcnXG4gICAgfVxuICAgIHJldHVybiBzcmMgPz8gJydcbiAgfVxuXG4gIC8vIFBMQVlfVklERU9cbiAgZnVuY3Rpb24gaGFuZGxlUGxheVZpZGVvKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1ZJREVPX1NUUkVBTT4sXG4gICkge1xuICAgIGNvbnN0IHZpZGVvU291cmNlID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAodmlkZW9Tb3VyY2UgJiYgdmlkZW9Tb3VyY2Uuc3JjKSB7XG4gICAgICB2aWRlb1NvdXJjZS5wbGF5aW5nID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBHZXQgdGhlIHZpZGVvIHNyYyBmcm9tIGEgcHJvbWlzZSAoVmlkZW8gRmlsZS9WaWRlbyBTdHJlYW0vRENMIENhc3QpXG4gICAgICBnZXRWaWRlb1NyYyhwYXlsb2FkKS50aGVuKChzcmMpID0+IHtcbiAgICAgICAgaWYgKCFzcmMpIHJldHVyblxuXG4gICAgICAgIFZpZGVvUGxheWVyLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgICAgICBzcmMsXG4gICAgICAgICAgdm9sdW1lOiBwYXlsb2FkLnZvbHVtZSA/PyAxLFxuICAgICAgICAgIGxvb3A6IHBheWxvYWQubG9vcCA/PyBmYWxzZSxcbiAgICAgICAgICBwbGF5aW5nOiB0cnVlLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIEluaXQgdmlkZW8gcGxheWVyIG1hdGVyaWFsIHdoZW4gdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgYSBWaWRlb1BsYXllciBjb21wb25lbnQgZGVmaW5lZFxuICAgICAgICBpbml0VmlkZW9QbGF5ZXJDb21wb25lbnRNYXRlcmlhbChcbiAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgeyBNYXRlcmlhbCB9LFxuICAgICAgICAgIE1hdGVyaWFsLmdldE9yTnVsbChlbnRpdHkpLFxuICAgICAgICApXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfVklERU9cbiAgZnVuY3Rpb24gaGFuZGxlU3RvcFZpZGVvKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU0+LFxuICApIHtcbiAgICBjb25zdCB2aWRlb1NvdXJjZSA9IFZpZGVvUGxheWVyLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGlmICh2aWRlb1NvdXJjZSkge1xuICAgICAgdmlkZW9Tb3VyY2UucGxheWluZyA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9BVURJT19TVFJFQU1cbiAgZnVuY3Rpb24gaGFuZGxlUGxheUF1ZGlvU3RyZWFtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FVRElPX1NUUkVBTT4sXG4gICkge1xuICAgIGNvbnN0IHsgdXJsLCB2b2x1bWUgfSA9IHBheWxvYWRcbiAgICBBdWRpb1N0cmVhbS5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICB1cmwsXG4gICAgICBwbGF5aW5nOiB0cnVlLFxuICAgICAgdm9sdW1lOiB2b2x1bWUgPz8gMSxcbiAgICB9KVxuICB9XG5cbiAgLy8gU1RPUF9BVURJT19TVFJFQU1cbiAgZnVuY3Rpb24gaGFuZGxlU3RvcEF1ZGlvU3RyZWFtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU0+LFxuICApIHtcbiAgICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU3RyZWFtLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGlmIChhdWRpb1NvdXJjZSkge1xuICAgICAgYXVkaW9Tb3VyY2UucGxheWluZyA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gU0hPV19URVhUXG4gIGZ1bmN0aW9uIGhhbmRsZVNob3dUZXh0KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TSE9XX1RFWFQ+LFxuICApIHtcbiAgICBjb25zdCB7IHRleHQsIGhpZGVBZnRlclNlY29uZHMsIGZvbnQsIGZvbnRTaXplLCB0ZXh0QWxpZ24gfSA9IHBheWxvYWRcbiAgICBjb25zdCB1aVRyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCBlbnRpdHkpXG4gICAgaWYgKHVpVHJhbnNmb3JtQ29tcG9uZW50KSB7XG4gICAgICBVaVRleHQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgICB2YWx1ZTogdGV4dCxcbiAgICAgICAgZm9udDogZm9udCBhcyB1bmtub3duIGFzIEZvbnQsXG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICB0ZXh0QWxpZ246IHRleHRBbGlnbiBhcyB1bmtub3duIGFzIFRleHRBbGlnbk1vZGUsXG4gICAgICB9KVxuICAgICAgc3RhcnRUaW1lb3V0KGVudGl0eSwgQWN0aW9uVHlwZS5ISURFX1RFWFQsIGhpZGVBZnRlclNlY29uZHMsICgpID0+XG4gICAgICAgIGhhbmRsZUhpZGVUZXh0KGVudGl0eSwge30pLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhJREVfVEVYVFxuICBmdW5jdGlvbiBoYW5kbGVIaWRlVGV4dChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfVEVYVD4sXG4gICkge1xuICAgIGNvbnN0IHVpVGV4dENvbXBvbmVudCA9IFVpVGV4dC5nZXRPck51bGwoZW50aXR5KVxuICAgIGlmICh1aVRleHRDb21wb25lbnQpIHtcbiAgICAgIFVpVGV4dC5kZWxldGVGcm9tKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eTogRW50aXR5LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY3Rpb25zID0gQWN0aW9ucy5nZXRPck51bGwoZW50aXR5KVxuICAgIHJldHVybiBhY3Rpb25zPy52YWx1ZS5maW5kKCgkKSA9PiAkLm5hbWUgPT09IG5hbWUpXG4gIH1cblxuICAvLyBTVEFSVF9ERUxBWVxuICBmdW5jdGlvbiBoYW5kbGVTdGFydERlbGF5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9ERUxBWT4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9ucywgdGltZW91dCB9ID0gcGF5bG9hZFxuICAgIGZvciAoY29uc3QgYWN0aW9uTmFtZSBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSlcbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgc3RhcnRUaW1lb3V0KGVudGl0eSwgYWN0aW9uTmFtZSwgdGltZW91dCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpXG4gICAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0RFTEFZXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BEZWxheShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9ERUxBWT4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9uIH0gPSBwYXlsb2FkXG4gICAgc3RvcFRpbWVvdXQoZW50aXR5LCBhY3Rpb24pXG4gIH1cblxuICAvLyBTVEFSVF9MT09QXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0TG9vcChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfTE9PUD4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9ucywgaW50ZXJ2YWwgfSA9IHBheWxvYWRcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpXG4gICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIHN0YXJ0SW50ZXJ2YWwoZW50aXR5LCBhY3Rpb25OYW1lLCBpbnRlcnZhbCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpXG4gICAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0xPT1BcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcExvb3AoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfTE9PUD4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9uIH0gPSBwYXlsb2FkXG4gICAgc3RvcEludGVydmFsKGVudGl0eSwgYWN0aW9uKVxuICB9XG5cbiAgLy8gQ0xPTkVfRU5USVRZXG4gIGZ1bmN0aW9uIGhhbmRsZUNsb25lRW50aXR5KFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DTE9ORV9FTlRJVFk+LFxuICApIHtcbiAgICBjb25zdCB7IHBvc2l0aW9uIH0gPSBwYXlsb2FkXG5cbiAgICAvLyBjbG9uZSBlbnRpdHlcbiAgICBjb25zdCB7IGNsb25lZCwgZW50aXRpZXMgfSA9IGNsb25lKFxuICAgICAgZW50aXR5LFxuICAgICAgZW5naW5lLFxuICAgICAgVHJhbnNmb3JtLFxuICAgICAgVHJpZ2dlcnMsXG4gICAgICBzZGtIZWxwZXJzLFxuICAgIClcbiAgICBmb3IgKGNvbnN0IGNsb25lZCBvZiBlbnRpdGllcy52YWx1ZXMoKSkge1xuICAgICAgLy8gaW5pdGlhbGl6ZVxuICAgICAgaW5pdEFjdGlvbnMoY2xvbmVkKVxuICAgICAgaW5pdFRyaWdnZXJzKGNsb25lZClcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoY2xvbmVkKVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NMT05FKVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRPckNyZWF0ZU11dGFibGUoY2xvbmVkKVxuICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IHBvc2l0aW9uXG4gIH1cblxuICAvLyBSRU1PVkVfRU5USVRZXG4gIGZ1bmN0aW9uIGhhbmRsZVJlbW92ZUVudGl0eShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk+LFxuICApIHtcbiAgICAvLyBSZW1vdmUgYWxsIHRpbWVycyBiZWZvcmUgcmVtb3ZlIHRoZSBlbnRpdHlcbiAgICBzdG9wQWxsVGltZW91dHMoZW50aXR5KVxuICAgIHN0b3BBbGxJbnRlcnZhbHMoZW50aXR5KVxuXG4gICAgY29uc3QgdHJlZSA9IGdldENvbXBvbmVudEVudGl0eVRyZWUoZW5naW5lLCBlbnRpdHksIFRyYW5zZm9ybSlcbiAgICBmb3IgKGNvbnN0IGVudGl0eVRvUmVtb3ZlIG9mIHRyZWUpIHtcbiAgICAgIGVuZ2luZS5yZW1vdmVFbnRpdHkoZW50aXR5VG9SZW1vdmUpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VWlTdGFjayhhbGlnbjogU2NyZWVuQWxpZ25Nb2RlKSB7XG4gICAgY29uc3Qga2V5ID0gYCR7YWxpZ24uYWxpZ25JdGVtc30sJHthbGlnbi5qdXN0aWZ5Q29udGVudH1gXG5cbiAgICBpZiAoIXVpU3RhY2tzLmhhcyhrZXkpKSB7XG4gICAgICB1aVN0YWNrcy5zZXQoa2V5LCBlbmdpbmUuYWRkRW50aXR5KCkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHVpU3RhY2tzLmdldChrZXkpIVxuICB9XG5cbiAgLy8gU0hPV19JTUFHRVxuICBmdW5jdGlvbiBoYW5kbGVTaG93SW1hZ2UoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfSU1BR0U+LFxuICApIHtcbiAgICBjb25zdCB7IHNyYywgdGV4dCwgaGlkZUFmdGVyU2Vjb25kcywgZm9udFNpemUsIGFsaWduLCBoZWlnaHQsIHdpZHRoIH0gPVxuICAgICAgcGF5bG9hZFxuXG4gICAgLy8gR2V0L0NyZWF0ZSBhIFVJIHRyYW5zZm9ybSBmb3IgdGhlIHJvb3QgZW50aXR5XG4gICAgZ2V0VUlUcmFuc2Zvcm0oVWlUcmFuc2Zvcm0sIGVuZ2luZS5Sb290RW50aXR5KVxuXG4gICAgLy8gR2V0IGEgVUkgU3RhY2sgZW50aXR5XG4gICAgY29uc3Qgc2NyZWVuQWxpZ24gPSBtYXBBbGlnblRvU2NyZWVuQWxpZ24oYWxpZ24pXG4gICAgY29uc3QgdWlTdGFjayA9IGdldFVpU3RhY2soc2NyZWVuQWxpZ24pXG5cbiAgICAvLyBUT0RPOiBGaXggaXRlbXMgd3JhcHBpbmdcbiAgICAvLyBHZXQvQ3JlYXRlIGEgVUkgVHJhbnNmb3JtIGZvciB0aGUgVUkgc3RhY2tcbiAgICBjb25zdCB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50ID0gZ2V0VUlUcmFuc2Zvcm0oVWlUcmFuc2Zvcm0sIHVpU3RhY2spXG4gICAgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudC5hbGlnbkl0ZW1zID0gc2NyZWVuQWxpZ24uYWxpZ25JdGVtc1xuICAgIHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQuanVzdGlmeUNvbnRlbnQgPSBzY3JlZW5BbGlnbi5qdXN0aWZ5Q29udGVudFxuICAgIHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQucG9zaXRpb25UeXBlID0gWUdQb3NpdGlvblR5cGUuWUdQVF9BQlNPTFVURVxuXG4gICAgLy8gQ3JlYXRlIGEgVUkgZW50aXR5IGFuZCBhIFRyYW5zZm9ybSBjb21wb25lbnQgZm9yIHRoZSBpbWFnZVxuICAgIGNvbnN0IGltYWdlRW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAgY29uc3QgaW1hZ2VUcmFuc2Zvcm1Db21wb25lbnQgPSBnZXRVSVRyYW5zZm9ybShcbiAgICAgIFVpVHJhbnNmb3JtLFxuICAgICAgaW1hZ2VFbnRpdHksXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIFlHVW5pdC5ZR1VfUE9JTlQsXG4gICAgKVxuICAgIGltYWdlVHJhbnNmb3JtQ29tcG9uZW50LnBhcmVudCA9IHVpU3RhY2tcbiAgICBpbWFnZVRyYW5zZm9ybUNvbXBvbmVudC5wb2ludGVyRmlsdGVyID0gUG9pbnRlckZpbHRlck1vZGUuUEZNX0JMT0NLXG5cbiAgICAvLyBDcmVhdGUgQmFja2dyb3VuZCBDb21wb25lbnRcbiAgICBnZXRVSUJhY2tncm91bmQoVWlCYWNrZ3JvdW5kLCBpbWFnZUVudGl0eSwgc3JjKVxuXG4gICAgaWYgKHRleHQpIHtcbiAgICAgIC8vIENyZWF0ZSBUZXh0IENvbXBvbmVudFxuICAgICAgLy8gVE9ETzogRml4IHRleHQgd3JhcHBpbmcgYW5kIHNjcm9sbGluZ1xuICAgICAgZ2V0VUlUZXh0KFVpVGV4dCwgaW1hZ2VFbnRpdHksIHRleHQsIGZvbnRTaXplLCB3aWR0aClcbiAgICB9XG5cbiAgICBwb2ludGVyRXZlbnRzU3lzdGVtLm9uUG9pbnRlckRvd24oXG4gICAgICB7XG4gICAgICAgIGVudGl0eTogaW1hZ2VFbnRpdHksXG4gICAgICAgIG9wdHM6IHtcbiAgICAgICAgICBidXR0b246IElucHV0QWN0aW9uLklBX1BPSU5URVIsXG4gICAgICAgICAgaG92ZXJUZXh0OiAnQ2xpY2snLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgbGFzdFVpRW50aXR5Q2xpY2tlZC5zZXQoZW50aXR5LCBpbWFnZUVudGl0eSlcbiAgICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ0xJQ0tfSU1BR0UpXG4gICAgICB9LFxuICAgIClcblxuICAgIGlmIChoaWRlQWZ0ZXJTZWNvbmRzKSB7XG4gICAgICBzdGFydFRpbWVvdXQoZW50aXR5LCBBY3Rpb25UeXBlLkhJREVfSU1BR0UsIGhpZGVBZnRlclNlY29uZHMsICgpID0+XG4gICAgICAgIGhhbmRsZUhpZGVJbWFnZShlbnRpdHksIHsgaW1hZ2VFbnRpdHk6IGltYWdlRW50aXR5IH0pLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhJREVfSU1BR0VcbiAgZnVuY3Rpb24gaGFuZGxlSGlkZUltYWdlKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5ISURFX0lNQUdFPixcbiAgKSB7XG4gICAgY29uc3QgeyBpbWFnZUVudGl0eSB9ID0gcGF5bG9hZFxuXG4gICAgaWYgKGltYWdlRW50aXR5KSB7XG4gICAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGltYWdlRW50aXR5IGFzIEVudGl0eSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2xpY2tlZEltYWdlID0gbGFzdFVpRW50aXR5Q2xpY2tlZC5nZXQoZW50aXR5KVxuICAgICAgaWYgKGNsaWNrZWRJbWFnZSkge1xuICAgICAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGNsaWNrZWRJbWFnZSlcbiAgICAgICAgbGFzdFVpRW50aXR5Q2xpY2tlZC5kZWxldGUoZW50aXR5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERBTUFHRVxuICBmdW5jdGlvbiBoYW5kbGVEYW1hZ2UoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkRBTUFHRT4sXG4gICkge1xuICAgIGNvbnN0IHsgcmFkaXVzLCBsYXllciwgaGl0cyB9ID0gcGF5bG9hZFxuICAgIGNvbnN0IGVudGl0eVBvc2l0aW9uID0gQXZhdGFyQXR0YWNoLmhhcyhlbnRpdHkpXG4gICAgICA/IGdldFBsYXllclBvc2l0aW9uKClcbiAgICAgIDogZ2V0V29ybGRQb3NpdGlvbihlbnRpdHkpXG5cbiAgICBjb25zdCBnZXRSb290ID0gKGVudGl0eTogRW50aXR5KTogRW50aXR5ID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGdldEVudGl0eVBhcmVudChlbnRpdHkpXG4gICAgICByZXR1cm4gIXBhcmVudCA/IGVudGl0eSA6IGdldFJvb3QocGFyZW50KVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIGRhbWFnZVRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID0gZ2V0V29ybGRQb3NpdGlvbih0YXJnZXQpXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IFZlY3RvcjMuZGlzdGFuY2UoZW50aXR5UG9zaXRpb24sIHRhcmdldFBvc2l0aW9uKVxuXG4gICAgICAvLyBhdm9pZCBjYXVzaW5nIGRhbWFnZSB0byB0aGUgZW50aXR5IGl0c2VsZiBvciBpdHMgY2hpbGRyZW5cbiAgICAgIGNvbnN0IGVudGl0eVRyZWUgPSBBcnJheS5mcm9tKFxuICAgICAgICBnZXRDb21wb25lbnRFbnRpdHlUcmVlKGVuZ2luZSwgZW50aXR5LCBUcmFuc2Zvcm0pLFxuICAgICAgKVxuICAgICAgY29uc3QgaXNQYXJ0T2ZFbnRpdHlUcmVlID0gZW50aXR5VHJlZS5zb21lKCgkKSA9PiAkID09PSB0YXJnZXQpXG4gICAgICBpZiAoaXNQYXJ0T2ZFbnRpdHlUcmVlKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChsYXllcikge1xuICAgICAgICBpZiAobGF5ZXIgPT09IFByb3hpbWl0eUxheWVyLlBMQVlFUikge1xuICAgICAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KHRhcmdldClcbiAgICAgICAgICBpZiAocm9vdCAhPT0gZW5naW5lLlBsYXllckVudGl0eSAmJiByb290ICE9PSBlbmdpbmUuQ2FtZXJhRW50aXR5KSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChsYXllciA9PT0gUHJveGltaXR5TGF5ZXIuTk9OX1BMQVlFUikge1xuICAgICAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KHRhcmdldClcbiAgICAgICAgICBpZiAocm9vdCA9PT0gZW5naW5lLlBsYXllckVudGl0eSB8fCByb290ID09PSBlbmdpbmUuQ2FtZXJhRW50aXR5KSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRpc3RhbmNlIDw9IHJhZGl1cykge1xuICAgICAgICBjb25zdCB0b3RhbCA9IGhpdHMgPT09IHVuZGVmaW5lZCA/IDEgOiBNYXRoLm1heChoaXRzLCAxKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyh0YXJnZXQpXG4gICAgICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0RBTUFHRSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1PVkVfUExBWUVSX0hFUkVcbiAgZnVuY3Rpb24gaGFuZGxlTW92ZVBsYXllckhlcmUoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5NT1ZFX1BMQVlFUl9IRVJFPixcbiAgKSB7XG4gICAgY29uc3QgaGVyZSA9IGdldFdvcmxkUG9zaXRpb24oZW50aXR5KVxuICAgIHZvaWQgbW92ZVBsYXllclRvKHsgbmV3UmVsYXRpdmVQb3NpdGlvbjogaGVyZSB9KVxuICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSlcbiAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fUExBWUVSX1NQQVdOKVxuICB9XG5cbiAgLy8gUExBQ0VfT05fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYWNlT25QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFDRV9PTl9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgY29uc3QgcGxheWVyID0gVHJhbnNmb3JtLmdldE9yTnVsbChlbmdpbmUuUGxheWVyRW50aXR5KVxuICAgIGlmICh0cmFuc2Zvcm0gJiYgcGxheWVyKSB7XG4gICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBwbGF5ZXIucG9zaXRpb25cbiAgICB9XG4gIH1cblxuICAvLyBST1RBVEVfQVNfUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZVJvdGF0ZUFzUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUk9UQVRFX0FTX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICBjb25zdCBwbGF5ZXIgPSBUcmFuc2Zvcm0uZ2V0T3JOdWxsKGVuZ2luZS5QbGF5ZXJFbnRpdHkpXG4gICAgaWYgKHRyYW5zZm9ybSAmJiBwbGF5ZXIpIHtcbiAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbiA9IHBsYXllci5yb3RhdGlvblxuICAgIH1cbiAgfVxuXG4gIC8vIFBMQUNFX09OX0NBTUVSQVxuICBmdW5jdGlvbiBoYW5kbGVQbGFjZU9uQ2FtZXJhKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBQ0VfT05fQ0FNRVJBPixcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGNvbnN0IGNhbWVyYSA9IFRyYW5zZm9ybS5nZXRPck51bGwoZW5naW5lLkNhbWVyYUVudGl0eSlcbiAgICBpZiAodHJhbnNmb3JtICYmIGNhbWVyYSkge1xuICAgICAgdHJhbnNmb3JtLnBvc2l0aW9uID0gY2FtZXJhLnBvc2l0aW9uXG4gICAgfVxuICB9XG5cbiAgLy8gUk9UQVRFX0FTX0NBTUVSQVxuICBmdW5jdGlvbiBoYW5kbGVSb3RhdGVBc0NhbWVyYShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJPVEFURV9BU19DQU1FUkE+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgY29uc3QgY2FtZXJhID0gVHJhbnNmb3JtLmdldE9yTnVsbChlbmdpbmUuQ2FtZXJhRW50aXR5KVxuICAgIGlmICh0cmFuc2Zvcm0gJiYgY2FtZXJhKSB7XG4gICAgICB0cmFuc2Zvcm0ucm90YXRpb24gPSBjYW1lcmEucm90YXRpb25cbiAgICB9XG4gIH1cblxuICAvLyBTRVRfUE9TSVRJT05cbiAgZnVuY3Rpb24gaGFuZGxlU2V0UG9zaXRpb24oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9QT1NJVElPTj4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWxhdGl2ZSkge1xuICAgICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBWZWN0b3IzLmFkZChcbiAgICAgICAgICB0cmFuc2Zvcm0ucG9zaXRpb24sXG4gICAgICAgICAgVmVjdG9yMy5jcmVhdGUocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueiksXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IFZlY3RvcjMuY3JlYXRlKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1JPVEFUSU9OXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFJvdGF0aW9uKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfUk9UQVRJT04+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgaWYgKHBheWxvYWQucmVsYXRpdmUpIHtcbiAgICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uID0gUXVhdGVybmlvbi5tdWx0aXBseShcbiAgICAgICAgICB0cmFuc2Zvcm0ucm90YXRpb24sXG4gICAgICAgICAgUXVhdGVybmlvbi5mcm9tRXVsZXJEZWdyZWVzKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopLFxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm0ucm90YXRpb24gPSBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMoXG4gICAgICAgICAgcGF5bG9hZC54LFxuICAgICAgICAgIHBheWxvYWQueSxcbiAgICAgICAgICBwYXlsb2FkLnosXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTRVRfU0NBTEVcbiAgZnVuY3Rpb24gaGFuZGxlU2V0U2NhbGUoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9TQ0FMRT4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWxhdGl2ZSkge1xuICAgICAgICB0cmFuc2Zvcm0uc2NhbGUgPSBWZWN0b3IzLmFkZChcbiAgICAgICAgICB0cmFuc2Zvcm0uc2NhbGUsXG4gICAgICAgICAgVmVjdG9yMy5jcmVhdGUocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueiksXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybS5zY2FsZSA9IFZlY3RvcjMuY3JlYXRlKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRk9MTE9XX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVGb2xsb3dQbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkZPTExPV19QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IHNwZWVkLCB4LCB5LCB6LCBtaW5EaXN0YW5jZSB9ID0gcGF5bG9hZFxuICAgIGZvbGxvd01hcC5zZXQoZW50aXR5LCB7XG4gICAgICB0YXJnZXQ6IGVuZ2luZS5QbGF5ZXJFbnRpdHksXG4gICAgICBzcGVlZCxcbiAgICAgIG1pbkRpc3RhbmNlLFxuICAgICAgYXhlczogeyB4LCB5LCB6IH0sXG4gICAgfSlcbiAgfVxuXG4gIC8vIFNUT1BfRk9MTE9XSU5HX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVTdG9wRm9sbG93aW5nUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9GT0xMT1dJTkdfUExBWUVSPixcbiAgKSB7XG4gICAgZm9sbG93TWFwLmRlbGV0ZShlbnRpdHkpXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVSYW5kb20oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJBTkRPTT4sXG4gICkge1xuICAgIGNvbnN0IHsgYWN0aW9ucyB9ID0gcGF5bG9hZFxuICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpXG4gICAgY29uc3QgYWN0aW9uTmFtZSA9IGFjdGlvbnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWN0aW9ucy5sZW5ndGgpXVxuICAgIGNvbnN0IGFjdGlvbiA9IGZpbmRBY3Rpb25CeU5hbWUoZW50aXR5LCBhY3Rpb25OYW1lKVxuICAgIGlmIChhY3Rpb24pIHtcbiAgICAgIGFjdGlvbkV2ZW50cy5lbWl0KGFjdGlvbi5uYW1lLCBnZXRQYXlsb2FkKGFjdGlvbikpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQmF0Y2goXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkJBVENIPixcbiAgKSB7XG4gICAgY29uc3QgeyBhY3Rpb25zIH0gPSBwYXlsb2FkXG4gICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSlcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpXG4gICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIGFjdGlvbkV2ZW50cy5lbWl0KGFjdGlvbi5uYW1lLCBnZXRQYXlsb2FkKGFjdGlvbikpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSGVhbFBsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSEVBTF9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IG11bHRpcGxpZXIgfSA9IHBheWxvYWRcblxuICAgIGNvbnN0IGdldFJvb3QgPSAoZW50aXR5OiBFbnRpdHkpOiBFbnRpdHkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50ID0gZ2V0RW50aXR5UGFyZW50KGVudGl0eSlcbiAgICAgIHJldHVybiAhcGFyZW50ID8gZW50aXR5IDogZ2V0Um9vdChwYXJlbnQpXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgaGVhbFRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KHRhcmdldClcbiAgICAgIGlmIChyb290ID09PSBlbmdpbmUuUGxheWVyRW50aXR5KSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKHRhcmdldClcbiAgICAgICAgY29uc3QgdG90YWwgPSBNYXRoLm1heChtdWx0aXBsaWVyID8/IDEsIDEpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9IRUFMX1BMQVlFUilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QodXJsOiBzdHJpbmcsIGluaXQ/OiBGbGF0RmV0Y2hJbml0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2lnbmVkRmV0Y2goe1xuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgLi4uKGluaXQgPyB7IGluaXQgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5ib2R5KSB7XG4gICAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJ1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBqc29uID0gYXdhaXQgSlNPTi5wYXJzZShyZXNwb25zZS5ib2R5KVxuXG4gICAgICBpZiAoIWpzb24ub2spIHtcbiAgICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhbXBhaWduIGRhdGEnXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBqc29uLmRhdGFcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJ1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaENhbXBhaWduc0J5RGlzcGVuc2VyS2V5KGRpc3BlbnNlcktleTogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsID0gYCR7UkVXQVJEU19TRVJWRVJfVVJMfS9hcGkvY2FtcGFpZ25zL2tleXM/Y2FtcGFpZ25fa2V5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc3BlbnNlcktleSl9YFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdCh1cmwpXG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaENhcHRjaGEoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KGAke1JFV0FSRFNfU0VSVkVSX1VSTH0vYXBpL2NhcHRjaGFgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgfSlcbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RUb2tlbihcbiAgICBkaXNwZW5zZXJLZXk6IHN0cmluZyxcbiAgICBjYXB0Y2hhPzoge1xuICAgICAgaWQ6IHN0cmluZ1xuICAgICAgdmFsdWU6IHN0cmluZ1xuICAgIH0sXG4gICkge1xuICAgIGNvbnN0IHVybCA9IGAke1JFV0FSRFNfU0VSVkVSX1VSTH0vYXBpL3Jld2FyZHNgXG4gICAgY29uc3QgcmVhbG0gPSBhd2FpdCBnZXRSZWFsbSh7fSlcbiAgICBjb25zdCBwbGF5ZXIgPSBwbGF5ZXJzSGVscGVyPy5nZXRQbGF5ZXIoKVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjYW1wYWlnbl9rZXk6IGRpc3BlbnNlcktleSxcbiAgICAgICAgYmVuZWZpY2lhcnk6ICFwbGF5ZXI/LmlzR3Vlc3QgPyBwbGF5ZXI/LnVzZXJJZCA6ICcnLFxuICAgICAgICBjYXRhbHlzdDogcmVhbG0ucmVhbG1JbmZvID8gcmVhbG0ucmVhbG1JbmZvLmJhc2VVcmwgOiAnJyxcbiAgICAgICAgLi4uKGNhcHRjaGFcbiAgICAgICAgICA/IHsgY2FwdGNoYV9pZDogY2FwdGNoYS5pZCwgY2FwdGNoYV92YWx1ZTogY2FwdGNoYS52YWx1ZSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KSxcbiAgICB9KVxuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2xhaW1BaXJkcm9wKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQ0xBSU1fQUlSRFJPUD4sXG4gICkge1xuICAgIGNvbnN0IHJld2FyZHMgPSBSZXdhcmRzLmdldE9yTnVsbChlbnRpdHkpXG4gICAgaWYgKCFyZXdhcmRzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB7IHRlc3RNb2RlLCBjYW1wYWlnbklkLCBkaXNwZW5zZXJLZXkgfSA9IHJld2FyZHNcblxuICAgIGlmICh0ZXN0TW9kZSkge1xuICAgICAgLy8gVE9ETzogU2hvdyBhbiBVSSBpbmRpY2F0aW5nIHRlc3RpbmcgbW9kZVxuICAgICAgLy8gJ0hhbmRsZSBDbGFpbSBBaXJkcm9wIGluIFRlc3QgTW9kZSA6KSdcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZldGNoQ2FtcGFpZ25zQnlEaXNwZW5zZXJLZXkoZGlzcGVuc2VyS2V5KVxuICAgICAgLnRoZW4oKGNhbXBhaWducykgPT4ge1xuICAgICAgICBjb25zdCBjYW1wYWlnbiA9IGNhbXBhaWducy5maW5kKFxuICAgICAgICAgIChjOiBhbnkpID0+IGMuY2FtcGFpZ25faWQgPT09IGNhbXBhaWduSWQsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGNhbXBhaWduICYmIGNhbXBhaWduLmVuYWJsZWQpIHtcbiAgICAgICAgICBpZiAoY2FtcGFpZ24ucmVxdWlyZXNfY2FwdGNoYSkge1xuICAgICAgICAgICAgZmV0Y2hDYXB0Y2hhKClcbiAgICAgICAgICAgICAgLnRoZW4oKGNhcHRjaGEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FwdGNoYSkge1xuICAgICAgICAgICAgICAgICAgX3Nob3dDYXB0Y2hhUHJvbXB0KGVudGl0eSwge1xuICAgICAgICAgICAgICAgICAgICBjYW1wYWlnbklkLFxuICAgICAgICAgICAgICAgICAgICBkaXNwZW5zZXJLZXksXG4gICAgICAgICAgICAgICAgICAgIGNhcHRjaGEsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAgICAgICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhcHRjaGEnXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3RUb2tlbihkaXNwZW5zZXJLZXkpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAvLyBUT0RPOiBTaG93IGFuIGVycm9yIFByb21wdFxuICAgICAgICAvLyAnRXJyb3IgZmV0Y2hpbmcgY2FtcGFpZ24gZGF0YScsIGVycm9yXG4gICAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gX3Nob3dDYXB0Y2hhUHJvbXB0KFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBkYXRhOiB7IGNhbXBhaWduSWQ6IHN0cmluZzsgZGlzcGVuc2VyS2V5OiBzdHJpbmc7IGNhcHRjaGE6IGFueSB9LFxuICApIHtcbiAgICBzaG93Q2FwdGNoYVByb21wdChcbiAgICAgIGVuZ2luZSxcbiAgICAgIFVpVHJhbnNmb3JtLFxuICAgICAgVWlCYWNrZ3JvdW5kLFxuICAgICAgVWlUZXh0LFxuICAgICAgVWlJbnB1dCxcbiAgICAgIFVpSW5wdXRSZXN1bHQsXG4gICAgICBwb2ludGVyRXZlbnRzU3lzdGVtLFxuICAgICAgZGF0YSxcbiAgICAgIChpbnB1dFRleHQpID0+IHtcbiAgICAgICAgLy8gUmVxdWVzdCB0b2tlbiB3aXRoIGNhcHRjaGEgdmFsaWRhdGlvblxuICAgICAgICByZXF1ZXN0VG9rZW4oZGF0YS5kaXNwZW5zZXJLZXksIHtcbiAgICAgICAgICBpZDogZGF0YS5jYXB0Y2hhLmlkLFxuICAgICAgICAgIHZhbHVlOiBpbnB1dFRleHQsXG4gICAgICAgIH0pLnRoZW4oKHRva2VuOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIC8vICdUb2tlbiByZXF1ZXN0ZWQgc3VjY2Vzc2Z1bGx5JywgeyB0b2tlbiB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICApXG4gIH1cbn1cbiJdfQ==