@regle/core 0.1.5 → 0.1.7

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/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { unref, isRef, toRef, computed, ref, toRaw, reactive, shallowRef, onScopeDispose, triggerRef, watch, effectScope } from 'vue';
1
+ import { unref, version, isRef, toRef, computed, ref, toRaw, reactive, shallowRef, onScopeDispose, triggerRef, watch, effectScope } from 'vue';
2
2
 
3
3
  // src/core/createRule/unwrapRuleParameters.ts
4
4
  function unwrapRuleParameters(params) {
@@ -222,6 +222,33 @@ function debounce(func, wait, immediate) {
222
222
  });
223
223
  return debouncedFn;
224
224
  }
225
+ function versionCompare(current, other) {
226
+ const cp = String(current).split(".");
227
+ const op = String(other).split(".");
228
+ for (let depth = 0; depth < Math.min(cp.length, op.length); depth++) {
229
+ const cn = Number(cp[depth]);
230
+ const on = Number(op[depth]);
231
+ if (cn > on) return 1 /* GreaterThan */;
232
+ if (on > cn) return -1 /* LessThan */;
233
+ if (!isNaN(cn) && isNaN(on)) return 1 /* GreaterThan */;
234
+ if (isNaN(cn) && !isNaN(on)) return -1 /* LessThan */;
235
+ }
236
+ return 0 /* EqualTo */;
237
+ }
238
+ var isVueSuperiorOrEqualTo3dotFive = versionCompare(version, "3.5.0") === -1 ? false : true;
239
+
240
+ // src/utils/randomId.ts
241
+ function uniqueIDNuxt() {
242
+ return Math.floor(Math.random() * Date.now()).toString();
243
+ }
244
+ function randomId() {
245
+ if (typeof window === "undefined") {
246
+ return uniqueIDNuxt();
247
+ } else {
248
+ const uint32 = window.crypto.getRandomValues(new Uint32Array(1))[0];
249
+ return uint32.toString(10);
250
+ }
251
+ }
225
252
  function useStorage() {
226
253
  const ruleDeclStorage = shallowRef(/* @__PURE__ */ new Map());
227
254
  const fieldsStorage = shallowRef(
@@ -478,19 +505,6 @@ function mergeArrayGroupProperties(entries, property) {
478
505
  }, []);
479
506
  });
480
507
  }
481
-
482
- // src/utils/randomId.ts
483
- function uniqueIDNuxt() {
484
- return Math.floor(Math.random() * Date.now()).toString();
485
- }
486
- function randomId() {
487
- if (typeof window === "undefined") {
488
- return uniqueIDNuxt();
489
- } else {
490
- const uint32 = window.crypto.getRandomValues(new Uint32Array(1))[0];
491
- return uint32.toString(10);
492
- }
493
- }
494
508
  function createReactiveRuleStatus({
495
509
  $dirty,
496
510
  customMessages,
@@ -853,7 +867,7 @@ function createReactiveFieldStatus({
853
867
  $commit();
854
868
  if (!scopeState.$rewardEarly.value !== false) ;
855
869
  },
856
- { deep: true }
870
+ { deep: isVueSuperiorOrEqualTo3dotFive ? 1 : true }
857
871
  );
858
872
  $unwatchDirty = watch($dirty, () => {
859
873
  storage.setDirtyEntry(path, $dirty.value);
@@ -1142,7 +1156,7 @@ function createReactiveCollectionStatus({
1142
1156
  updateStatus();
1143
1157
  }
1144
1158
  },
1145
- { deep: true, flush: "pre" }
1159
+ { deep: isVueSuperiorOrEqualTo3dotFive ? 1 : true, flush: "pre" }
1146
1160
  );
1147
1161
  scopeState = scope.run(() => {
1148
1162
  const $dirty = computed(() => {
@@ -1405,7 +1419,7 @@ function createReactiveNestedStatus({
1405
1419
  $unwatch();
1406
1420
  createReactiveFieldsStatus();
1407
1421
  },
1408
- { deep: true, flush: "post" }
1422
+ { deep: isVueSuperiorOrEqualTo3dotFive ? 1 : true, flush: "post" }
1409
1423
  );
1410
1424
  }
1411
1425
  scope = effectScope();
@@ -1617,6 +1631,7 @@ function createUseRegleComposable(customRules, options) {
1617
1631
  }
1618
1632
  return {
1619
1633
  regle,
1634
+ r$: regle,
1620
1635
  errors,
1621
1636
  resetAll,
1622
1637
  validateState,
@@ -1639,4 +1654,4 @@ function defineRegleConfig({
1639
1654
 
1640
1655
  export { InternalRuleType, createRule, defineRegleConfig, unwrapRuleParameters, useRegle };
1641
1656
  //# sourceMappingURL=index.js.map
1642
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL2NyZWF0ZVJ1bGUvdW53cmFwUnVsZVBhcmFtZXRlcnMudHMiLCIuLi9zcmMvY29yZS9jcmVhdGVSdWxlL2RlZmluZVJ1bGVQcm9jZXNzb3JzLnRzIiwiLi4vc3JjL2NvcmUvY3JlYXRlUnVsZS9jcmVhdGVSdWxlLnRzIiwiLi4vc3JjL3V0aWxzL29iamVjdC51dGlscy50cyIsIi4uL3NyYy91dGlscy9pc0VtcHR5LnRzIiwiLi4vc3JjL3V0aWxzL2RlYm91bmNlLnRzIiwiLi4vc3JjL2NvcmUvdXNlU3RvcmFnZS91c2VTdG9yYWdlLnRzIiwiLi4vc3JjL2NvcmUvdXNlUmVnbGUvZ3VhcmRzL3J1bGVEZWYuZ3VhcmRzLnRzIiwiLi4vc3JjL2NvcmUvdXNlUmVnbGUvZ3VhcmRzL3J1bGUuc3RhdHVzLmd1YXJkcy50cyIsIi4uL3NyYy9jb3JlL3VzZVJlZ2xlL2d1YXJkcy9ydWxlLmVycm9ycy5ndWFyZHMudHMiLCIuLi9zcmMvY29yZS91c2VSZWdsZS91c2VFcnJvcnMudHMiLCIuLi9zcmMvdHlwZXMvcnVsZXMvcnVsZS5pbnRlcm5hbC50eXBlcy50cyIsIi4uL3NyYy90eXBlcy91dGlscy9ncm91cHMudHMiLCIuLi9zcmMvdXRpbHMvcmFuZG9tSWQudHMiLCIuLi9zcmMvY29yZS91c2VSZWdsZS91c2VTdGF0ZVByb3BlcnRpZXMvY3JlYXRlUmVhY3RpdmVSdWxlU3RhdHVzLnRzIiwiLi4vc3JjL2NvcmUvdXNlUmVnbGUvdXNlU3RhdGVQcm9wZXJ0aWVzL2NyZWF0ZVJlYWN0aXZlRmllbGRTdGF0dXMudHMiLCIuLi9zcmMvY29yZS91c2VSZWdsZS91c2VTdGF0ZVByb3BlcnRpZXMvY3JlYXRlUmVhY3RpdmVDb2xsZWN0aW9uU3RhdHVzLnRzIiwiLi4vc3JjL2NvcmUvdXNlUmVnbGUvdXNlU3RhdGVQcm9wZXJ0aWVzL2NyZWF0ZVJlYWN0aXZlTmVzdGVkU3RhdHVzLnRzIiwiLi4vc3JjL2NvcmUvdXNlUmVnbGUvdXNlU3RhdGVQcm9wZXJ0aWVzL3VzZVN0YXRlUHJvcGVydGllcy50cyIsIi4uL3NyYy9jb3JlL3VzZVJlZ2xlL3VzZVJlZ2xlLnRzIiwiLi4vc3JjL2NvcmUvZGVmaW5lUmVnbGVDb25maWcudHMiXSwibmFtZXMiOlsidmFsaWRhdG9yIiwiSW50ZXJuYWxSdWxlVHlwZSIsImNvbXB1dGVkIiwiJHZhbGlkIiwiZWZmZWN0U2NvcGUiLCJyZWYiLCJ0b1JlZiIsInVucmVmIiwid2F0Y2giLCJyZWFjdGl2ZSIsInVzZVJlZ2xlIiwib3B0aW9ucyIsImlzUmVmIiwidG9SYXciXSwibWFwcGluZ3MiOiI7OztBQU9PLFNBQVMscUJBQTRDLE1BQThCLEVBQUE7QUFDeEYsRUFBTyxPQUFBLE1BQUEsQ0FBTyxHQUFJLENBQUEsQ0FBQyxLQUFVLEtBQUE7QUFDM0IsSUFBQSxJQUFJLGlCQUFpQixRQUFVLEVBQUE7QUFDN0IsTUFBQSxPQUFPLEtBQU0sRUFBQTtBQUFBO0FBRWYsSUFBQSxPQUFPLE1BQU0sS0FBSyxDQUFBO0FBQUEsR0FDbkIsQ0FBQTtBQUNIO0FBTU8sU0FBUyxxQkFBNEMsTUFBOEIsRUFBQTtBQUN4RixFQUFPLE9BQUEsTUFBQSxDQUFPLEdBQUksQ0FBQSxDQUFDLEtBQVUsS0FBQTtBQUMzQixJQUFBLElBQUksaUJBQWlCLFFBQVUsRUFBQTtBQUM3QixNQUFPLE9BQUEsS0FBQTtBQUFBLEtBQ1QsTUFBQSxJQUFXLEtBQU0sQ0FBQSxLQUFLLENBQUcsRUFBQTtBQUN2QixNQUFPLE9BQUEsS0FBQTtBQUFBO0FBRVQsSUFBTyxPQUFBLEtBQUEsQ0FBTSxNQUFNLEtBQUssQ0FBQTtBQUFBLEdBQ3pCLENBQUE7QUFDSDtBQUtPLFNBQVMsNEJBQTRCLElBQXdCLEVBQUE7QUFDbEUsRUFBTSxNQUFBLE9BQUEsR0FBVSxLQUFLLFFBQVMsRUFBQTtBQUM5QixFQUFNLE1BQUEsZUFBQSxHQUFrQixPQUFRLENBQUEsUUFBQSxDQUFTLElBQUksQ0FBQTtBQUM3QyxFQUFBLE1BQU0sTUFBVSxHQUFBLENBQUEsZUFBQSxHQUFrQixPQUFRLENB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QUUsS0FBTSxDQUFBLFFBQUEsSUFBWSxLQUFNLENBQUEsUUFBQSxDQUFBO0FBQUEsS0FDbEMsQ0FBQTtBQUVELElBQUEsZUFBZSxhQUFvRSxHQUFBO0FBQ2pGLE1BQUEsS0FBQSxDQUFNLE1BQU8sRUFBQTtBQUNiLE1BQU0sTUFBQSxNQUFBLEdBQVMsTUFBTSxLQUFBLENBQU0sU0FBVSxFQUFBO0FBQ3JDLE1BQUEsSUFBSSxNQUFRLEVBQUE7QUFDVixRQUFBLE9BQU8sY0FBZSxDQUFBLEtBQUE7QUFBQTtBQUV4QixNQUFPLE9BQUEsS0FBQTtBQUFBO0FBR1QsSUFBTyxPQUFBO0FBQUEsTUFDTCxLQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxRQUFBO0FBQUEsTUFDQSxhQUFBO0FBQUEsTUFDQSxLQUFBO0FBQUEsTUFDQSxLQUFPLEVBQUE7QUFBQSxLQUNUO0FBQUE7QUFHRixFQUFPUSxPQUFBQSxTQUFBQTtBQUNUO0FBRU8sSUFBTSxXQUFXLHdCQUF5Qjs7O0FDaEkxQyxTQUFTLGlCQUFzRSxDQUFBO0FBQUEsRUFDcEYsS0FBQTtBQUFBLEVBQ0E7QUFDRixDQUdHLEVBQUE7QUFDRCxFQUFNQSxNQUFBQSxTQUFBQSxHQUFXLHdCQUF1QyxDQUFBLEtBQUEsRUFBTyxTQUFTLENBQUE7QUFFeEUsRUFBT0EsT0FBQUEsU0FBQUE7QUFDVCIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUmVmLCB0b1JlZiwgdW5yZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHR5cGUgeyBQYXJhbURlY2wgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8qKlxuICogUmV0dXJucyBhIGNsZWFuIGxpc3Qgb2YgcGFyYW1ldGVyc1xuICogUmVtb3ZpbmcgUmVmIGFuZCBleGVjdXRpbmcgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSB1bndyYXBlZCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwUnVsZVBhcmFtZXRlcnM8VFBhcmFtcyBleHRlbmRzIGFueVtdPihwYXJhbXM6IFBhcmFtRGVjbFtdKTogVFBhcmFtcyB7XG4gIHJldHVybiBwYXJhbXMubWFwKChwYXJhbSkgPT4ge1xuICAgIGlmIChwYXJhbSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gcGFyYW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHVucmVmKHBhcmFtKTtcbiAgfSkgYXMgVFBhcmFtcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY2xlYW4gbGlzdCBvZiBwYXJhbWV0ZXJzXG4gKiBSZW1vdmluZyBSZWYgYW5kIGV4ZWN1dGluZyBmdW5jdGlvbiB0byByZXR1cm4gdGhlIHVud3JhcGVkIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWFjdGl2ZVBhcmFtczxUUGFyYW1zIGV4dGVuZHMgYW55W10+KHBhcmFtczogUGFyYW1EZWNsW10pOiBUUGFyYW1zIHtcbiAgcmV0dXJuIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgaWYgKHBhcmFtIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiBwYXJhbTtcbiAgICB9IGVsc2UgaWYgKGlzUmVmKHBhcmFtKSkge1xuICAgICAgcmV0dXJuIHBhcmFtO1xuICAgIH1cbiAgICByZXR1cm4gdG9SZWYoKCkgPT4gcGFyYW0pO1xuICB9KSBhcyBUUGFyYW1zO1xufVxuXG4vKipcbiAqIER1ZSB0byBgZnVuY3Rpb24ubGVuZ3RoYCBub3QgcmV0dXJuaW5nIGRlZmF1bHQgcGFyYW1ldGVycywgaXQgbmVlZCB0byBwYXJzZSB0aGUgZnVuYy50b1N0cmluZygpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jdGlvblBhcmFtZXRlcnNMZW5ndGgoZnVuYzogRnVuY3Rpb24pOiBudW1iZXIge1xuICBjb25zdCBmdW5jU3RyID0gZnVuYy50b1N0cmluZygpO1xuICBjb25zdCBpc0Fycm93RnVuY3Rpb24gPSBmdW5jU3RyLmluY2x1ZGVzKCc9PicpO1xuICBjb25zdCBwYXJhbXMgPSAoaXNBcnJvd0Z1bmN0aW9uID8gZnVuY1N0ci5zcGxpdCgnPT4nKVswXSA6IGZ1bmNTdHIpXG4gICAgLnNsaWNlKGZ1bmNTdHIuaW5kZXhPZignKCcpICsgMSwgZnVuY1N0ci5pbmRleE9mKCcpJykpXG4gICAgLnNwbGl0KCcsJylcbiAgICAubWFwKChwYXJhbSkgPT4gcGFyYW0udHJpbSgpKTtcbiAgY29uc3QgZGVmYXVsdHMgPSBwYXJhbXMuZmlsdGVyKChwYXJhbSkgPT4gcGFyYW0uaW5jbHVkZXMoJz0nKSk7XG4gIHJldHVybiBkZWZhdWx0cy5sZW5ndGggKyBmdW5jLmxlbmd0aDtcbn1cbiIsImltcG9ydCB0eXBlIHtcbiAgJEludGVybmFsUmVnbGVSdWxlRGVmaW5pdGlvbixcbiAgJEludGVybmFsUmVnbGVSdWxlSW5pdCxcbiAgJEludGVybmFsUmVnbGVSdWxlTWV0YWRhdGFDb25zdW1lcixcbiAgUmVnbGVSdWxlTWV0YWRhdGFEZWZpbml0aW9uLFxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVSZWFjdGl2ZVBhcmFtcywgdW53cmFwUnVsZVBhcmFtZXRlcnMgfSBmcm9tICcuL3Vud3JhcFJ1bGVQYXJhbWV0ZXJzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVJ1bGVQcm9jZXNzb3JzKFxuICBkZWZpbml0aW9uOiAkSW50ZXJuYWxSZWdsZVJ1bGVJbml0LFxuICAuLi5wYXJhbXM6IGFueVtdXG4pOiAkSW50ZXJuYWxSZWdsZVJ1bGVEZWZpbml0aW9uIHtcbiAgY29uc3QgeyBtZXNzYWdlLCB2YWxpZGF0b3IsIGFjdGl2ZSwgLi4ucHJvcGVydGllcyB9ID0gZGVmaW5pdGlvbjtcblxuICBjb25zdCBpc0FzeW5jID0gdmFsaWRhdG9yLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBc3luY0Z1bmN0aW9uJztcblxuICBjb25zdCBkZWZhdWx0UHJvY2Vzc29ycyA9IHtcbiAgICB2YWxpZGF0b3IodmFsdWU6IGFueSwgLi4uYXJnczogYW55W10pIHtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uLnZhbGlkYXRvcih2YWx1ZSwgLi4udW53cmFwUnVsZVBhcmFtZXRlcnMoYXJncy5sZW5ndGggPyBhcmdzIDogcGFyYW1zKSk7XG4gICAgfSxcbiAgICBtZXNzYWdlKHZhbHVlOiBhbnksIG1ldGFkYXRhOiAkSW50ZXJuYWxSZWdsZVJ1bGVNZXRhZGF0YUNvbnN1bWVyKSB7XG4gICAgICBpZiAodHlwZW9mIGRlZmluaXRpb24ubWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gZGVmaW5pdGlvbi5tZXNzYWdlKHZhbHVlLCB7XG4gICAgICAgICAgLi4ubWV0YWRhdGEsXG4gICAgICAgICAgJHBhcmFtczogdW53cmFwUnVsZVBhcmFtZXRlcnMobWV0YWRhdGEuJHBhcmFtcz8ubGVuZ3RoID8gbWV0YWRhdGEuJHBhcmFtcyA6IHBhcmFtcyksXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb24ubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWN0aXZlKHZhbHVlOiBhbnksIG1ldGFkYXRhOiAkSW50ZXJuYWxSZWdsZVJ1bGVNZXRhZGF0YUNvbnN1bWVyKSB7XG4gICAgICBpZiAodHlwZW9mIGRlZmluaXRpb24uYWN0aXZlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uLmFjdGl2ZSh2YWx1ZSwge1xuICAgICAgICAgIC4uLm1ldGFkYXRhLFxuICAgICAgICAgICRwYXJhbXM6IHVud3JhcFJ1bGVQYXJhbWV0ZXJzKG1ldGFkYXRhLiRwYXJhbXM/Lmxlbmd0aCA/IG1ldGFkYXRhLiRwYXJhbXMgOiBwYXJhbXMpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uLmFjdGl2ZSA/PyB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgZXhlYyh2YWx1ZTogYW55KSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3IgPSBkZWZpbml0aW9uLnZhbGlkYXRvcih2YWx1ZSwgLi4udW53cmFwUnVsZVBhcmFtZXRlcnMocGFyYW1zKSk7XG4gICAgICBsZXQgcmF3UmVzdWx0OiBSZWdsZVJ1bGVNZXRhZGF0YURlZmluaXRpb247XG4gICAgICBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdG9yLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJhd1Jlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICBpZiAodHlwZW9mIHJhd1Jlc3VsdCA9PT0gJ29iamVjdCcgJiYgJyR2YWxpZCcgaW4gcmF3UmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gcmF3UmVzdWx0LiR2YWxpZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByYXdSZXN1bHQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIHJhd1Jlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhd1Jlc3VsdCA9IHZhbGlkYXRvcjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByYXdSZXN1bHQgPT09ICdvYmplY3QnICYmICckdmFsaWQnIGluIHJhd1Jlc3VsdCkge1xuICAgICAgICByZXR1cm4gcmF3UmVzdWx0LiR2YWxpZDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJhd1Jlc3VsdCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiByYXdSZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBwcm9jZXNzb3JzID0ge1xuICAgIC4uLmRlZmF1bHRQcm9jZXNzb3JzLFxuICAgIC4uLnByb3BlcnRpZXMsXG4gICAgLi4ue1xuICAgICAgX3ZhbGlkYXRvcjogZGVmaW5pdGlvbi52YWxpZGF0b3IgYXMgYW55LFxuICAgICAgX21lc3NhZ2U6IGRlZmluaXRpb24ubWVzc2FnZSxcbiAgICAgIF9hY3RpdmU6IGRlZmluaXRpb24uYWN0aXZlLFxuICAgICAgX3R5cGU6IGRlZmluaXRpb24udHlwZSxcbiAgICAgIF9wYXRjaGVkOiBmYWxzZSxcbiAgICAgIF9hc3luYzogaXNBc3luYyxcbiAgICAgIF9wYXJhbXM6IGNyZWF0ZVJlYWN0aXZlUGFyYW1zPG5ldmVyPihwYXJhbXMpLFxuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIHByb2Nlc3NvcnM7XG59XG4iLCJpbXBvcnQgdHlwZSB7XG4gIEluZmVyUmVnbGVSdWxlLFxuICBSZWdsZVJ1bGVJbml0LFxuICBSZWdsZVJ1bGVNZXRhZGF0YURlZmluaXRpb24sXG4gIFJlZ2xlUnVsZVR5cGVSZXR1cm4sXG4gIFJlZ2xlVW5pdmVyc2FsUGFyYW1zLFxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBkZWZpbmVSdWxlUHJvY2Vzc29ycyB9IGZyb20gJy4vZGVmaW5lUnVsZVByb2Nlc3NvcnMnO1xuaW1wb3J0IHsgZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzTGVuZ3RoIH0gZnJvbSAnLi91bndyYXBSdWxlUGFyYW1ldGVycyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGUgYSB0eXBlZCBjdXN0b20gcnVsZSB0aGF0IGNhbiBiZSB1c2VkIGxpa2UgZGVmYXVsdCBydWxlcy5cbiAqIEl0IGNhbiBhbHNvIGJlIGRlY2xhcmVkIGluIHRoZSBnbG9iYWwgb3B0aW9uc1xuICpcbiAqIEl0IHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3QgaWYgdGhlIHJ1bGUgaXMgYXN5bmNcbiAqXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZSAtIFRoZSBpbnB1dCB2YWx1ZSB0aGUgcnVsZSBzaG91bGQgcmVjZWl2ZVxuICogQHR5cGVQYXJhbSBUUGFyYW1zIC0gVHVwbGUgZGVjbGFyYXRpb24gb2YgdGhlIHJ1bGUgcGFyYW1ldGVycyAoaWYgYW55KVxuICpcbiAqIEBwYXJhbSBkZWZpbml0aW9uIC0gVGhlIHJ1bGUgcHJvY2Vzc29ycyBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyBBIHJ1bGUgZGVmaW5pdGlvbiB0aGF0IGNhbiBiZSBjYWxsYWJsZSBkZXBlbmRpbmcgb24gcGFyYW1zIHByZXNlbmNlXG4gKlxuICogQGV4ZW1wbGVcbiAqXG4gKiBgYGB0c1xuICogLy8gQ3JlYXRlIGEgc2ltcGxlIHJ1bGUgd2l0aCBubyBwYXJhbXNcbiAqIGltcG9ydCB7cnVsZUhlbHBlcnN9IGZyb20gJ0ByZWdsZS9ydWxlcyc7XG4gKlxuICogZXhwb3J0IGNvbnN0IGlzRm9vID0gY3JlYXRlUnVsZSh7XG4gKiAgIHZhbGlkYXRvcih2YWx1ZTogc3RyaW5nKSB7XG4gKiAgICAgICBpZiAocnVsZUhlbHBlcnMuaXNGaWxsZWQodmFsdWUpKSB7XG4gKiAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSAnZm9vJztcbiAqICAgICAgIH1cbiAqICAgICAgIHJldHVybiB0cnVlXG4gKiAgIH0sXG4gKiAgIG1lc3NhZ2U6IFwiVGhlIHZhbHVlIHNob3VsZCBiZSAnZm9vJ1wiXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSdWxlPFxuICBUVmFsdWUgZXh0ZW5kcyBhbnksXG4gIFRQYXJhbXMgZXh0ZW5kcyBhbnlbXSxcbiAgVFJldHVybiBleHRlbmRzIFJlZ2xlUnVsZU1ldGFkYXRhRGVmaW5pdGlvbiB8IFByb21pc2U8UmVnbGVSdWxlTWV0YWRhdGFEZWZpbml0aW9uPixcbiAgVE1ldGFkYXRhIGV4dGVuZHMgUmVnbGVSdWxlTWV0YWRhdGFEZWZpbml0aW9uID0gVFJldHVybiBleHRlbmRzIFByb21pc2U8aW5mZXIgTT4gPyBNIDogVFJldHVybixcbiAgVEFzeW5jIGV4dGVuZHMgYm9vbGVhbiA9IFRSZXR1cm4gZXh0ZW5kcyBQcm9taXNlPGFueT4gPyB0cnVlIDogZmFsc2UsXG4+KFxuICBkZWZpbml0aW9uOiBSZWdsZVJ1bGVJbml0PFRWYWx1ZSwgVFBhcmFtcywgVFJldHVybiwgVE1ldGFkYXRhLCBUQXN5bmM+XG4pOiBJbmZlclJlZ2xlUnVsZTxUVmFsdWUsIFRQYXJhbXMsIFRBc3luYywgVE1ldGFkYXRhPiB7XG4gIGlmICh0eXBlb2YgZGVmaW5pdGlvbi52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICBsZXQgZmFrZVBhcmFtczogYW55W10gPSBbXTtcbiAgICBjb25zdCBzdGF0aWNQcm9jZXNzb3JzID0gZGVmaW5lUnVsZVByb2Nlc3NvcnMoZGVmaW5pdGlvbiBhcyBhbnksIC4uLmZha2VQYXJhbXMpO1xuXG4gICAgY29uc3QgaXNBc3luYyA9IGRlZmluaXRpb24udmFsaWRhdG9yLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBc3luY0Z1bmN0aW9uJztcbiAgICAvLyBGb3IgdmFsaWRhdG9ycyBuZWVkaW5nIGEgcGFyYW1zIGxpa2UgbWF4TGVuZ3RoIG9yIHJlcXVpcmVkSWZcbiAgICBpZiAoZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzTGVuZ3RoKGRlZmluaXRpb24udmFsaWRhdG9yKSA+IDEpIHtcbiAgICAgIC8vIEZvciB2YWxpZGF0b3JzIHdpdGggcGFyYW0sIHJldHVybiBhIGZ1bmN0aW9uIHByb3ZpZGluZyBwYXJhbXMgZm9yIGFsbCB0aGUgcnVsZSBwcm9jZXNzb3JzXG4gICAgICBjb25zdCBydWxlRmFjdG9yeSA9IGZ1bmN0aW9uICguLi5wYXJhbXM6IFJlZ2xlVW5pdmVyc2FsUGFyYW1zPFRQYXJhbXM+KSB7XG4gICAgICAgIHJldHVybiBkZWZpbmVSdWxlUHJvY2Vzc29ycyhkZWZpbml0aW9uIGFzIGFueSwgLi4ucGFyYW1zKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEFzc2lnbiBhbGwgdGhlIGludGVybmFscyB0byB0aGUgcnVsZSByYXcgZnVuY3Rpb24gc28gdGhleSBhcmUgYWNjZXNzaWJsZSB3aXRob3V0IGNhbGxpbmcgaXRcbiAgICAgIHJ1bGVGYWN0b3J5LnZhbGlkYXRvciA9IHN0YXRpY1Byb2Nlc3NvcnMudmFsaWRhdG9yO1xuICAgICAgcnVsZUZhY3RvcnkubWVzc2FnZSA9IHN0YXRpY1Byb2Nlc3NvcnMubWVzc2FnZTtcbiAgICAgIHJ1bGVGYWN0b3J5LmFjdGl2ZSA9IHN0YXRpY1Byb2Nlc3NvcnMuYWN0aXZlO1xuICAgICAgcnVsZUZhY3RvcnkudHlwZSA9IHN0YXRpY1Byb2Nlc3NvcnMudHlwZTtcbiAgICAgIHJ1bGVGYWN0b3J5LmV4ZWMgPSBzdGF0aWNQcm9jZXNzb3JzLmV4ZWM7XG5cbiAgICAgIHJ1bGVGYWN0b3J5Ll92YWxpZGF0b3IgPSBzdGF0aWNQcm9jZXNzb3JzLnZhbGlkYXRvcjtcbiAgICAgIHJ1bGVGYWN0b3J5Ll9tZXNzYWdlID0gc3RhdGljUHJvY2Vzc29ycy5tZXNzYWdlO1xuICAgICAgcnVsZUZhY3RvcnkuX2FjdGl2ZSA9IHN0YXRpY1Byb2Nlc3NvcnMuYWN0aXZlO1xuICAgICAgcnVsZUZhY3RvcnkuX3R5cGUgPSBkZWZpbml0aW9uLnR5cGU7XG4gICAgICBydWxlRmFjdG9yeS5fcGF0Y2hlZCA9IGZhbHNlO1xuICAgICAgcnVsZUZhY3RvcnkuX2FzeW5jID0gaXNBc3luYyBhcyBUQXN5bmM7XG4gICAgICByZXR1cm4gcnVsZUZhY3RvcnkgYXMgYW55O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RhdGljUHJvY2Vzc29ycyBhcyBhbnk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcignVmFsaWRhdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xufVxuIiwiaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHR5cGUgeyBNYXliZUdldHRlciB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KG9iajogdW5rbm93bik6IG9iaiBpcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShvYmopO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZPYmplY3Qob2JqOiBSZWY8dW5rbm93bj4pOiBvYmogaXMgUmVmPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgcmV0dXJuIGlzT2JqZWN0KG9iai52YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZURlZXA8VD4ob2JqOiBUKTogVCB7XG4gIGxldCByZXN1bHQgPSBvYmogYXMgYW55O1xuICBsZXQgdHlwZSA9IHt9LnRvU3RyaW5nLmNhbGwob2JqKS5zbGljZSg4LCAtMSk7XG4gIGlmICh0eXBlID09ICdTZXQnKSB7XG4gICAgcmVzdWx0ID0gbmV3IFNldChbLi4uKG9iaiBhcyBhbnkpXS5tYXAoKHZhbHVlKSA9PiBjbG9uZURlZXAodmFsdWUpKSk7XG4gIH1cbiAgaWYgKHR5cGUgPT0gJ01hcCcpIHtcbiAgICByZXN1bHQgPSBuZXcgTWFwKFsuLi4ob2JqIGFzIGFueSldLm1hcCgoa3YpID0+IFtjbG9uZURlZXAoa3ZbMF0pLCBjbG9uZURlZXAoa3ZbMV0pXSkpO1xuICB9XG4gIGlmICh0eXBlID09ICdEYXRlJykge1xuICAgIHJlc3VsdCA9IG5ldyBEYXRlKChvYmogYXMgYW55KS5nZXRUaW1lKCkpO1xuICB9XG4gIGlmICh0eXBlID09ICdSZWdFeHAnKSB7XG4gICAgcmVzdWx0ID0gUmVnRXhwKChvYmogYXMgYW55KS5zb3VyY2UsIGdldFJlZ0V4cEZsYWdzKG9iaikpO1xuICB9XG4gIGlmICh0eXBlID09ICdBcnJheScgfHwgdHlwZSA9PSAnT2JqZWN0Jykge1xuICAgIHJlc3VsdCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IFtdIDoge307XG4gICAgZm9yIChsZXQga2V5IGluIG9iaikge1xuICAgICAgLy8gaW5jbHVkZSBwcm90b3R5cGUgcHJvcGVydGllc1xuICAgICAgcmVzdWx0W2tleV0gPSBjbG9uZURlZXAob2JqW2tleV0pO1xuICAgIH1cbiAgfVxuICAvLyBwcmltaXRpdmVzIGFuZCBub24tc3VwcG9ydGVkIG9iamVjdHMgKGUuZy4gZnVuY3Rpb25zKSBsYW5kIGhlcmVcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0UmVnRXhwRmxhZ3MocmVnRXhwOiBhbnkpIHtcbiAgaWYgKHR5cGVvZiByZWdFeHAuc291cmNlLmZsYWdzID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHJlZ0V4cC5zb3VyY2UuZmxhZ3M7XG4gIH0gZWxzZSB7XG4gICAgbGV0IGZsYWdzID0gW107XG4gICAgcmVnRXhwLmdsb2JhbCAmJiBmbGFncy5wdXNoKCdnJyk7XG4gICAgcmVnRXhwLmlnbm9yZUNhc2UgJiYgZmxhZ3MucHVzaCgnaScpO1xuICAgIHJlZ0V4cC5tdWx0aWxpbmUgJiYgZmxhZ3MucHVzaCgnbScpO1xuICAgIHJlZ0V4cC5zdGlja3kgJiYgZmxhZ3MucHVzaCgneScpO1xuICAgIHJlZ0V4cC51bmljb2RlICYmIGZsYWdzLnB1c2goJ3UnKTtcbiAgICByZXR1cm4gZmxhZ3Muam9pbignJyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcEdldHRlcjxUIGV4dGVuZHMgYW55PihcbiAgZ2V0dGVyOiBNYXliZUdldHRlcjxULCBhbnk+LFxuICB2YWx1ZTogUmVmPGFueT4sXG4gIGluZGV4PzogbnVtYmVyXG4pOiBUIHtcbiAgaWYgKGdldHRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGdldHRlcih2YWx1ZSwgaW5kZXggPz8gMCk7XG4gIH1cbiAgcmV0dXJuIGdldHRlcjtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIC8vIGludmFsaWQgZGF0ZSB3b24ndCBwYXNzXG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlLmdldFRpbWUoKSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gIVN0cmluZyh2YWx1ZS50cmltKCkpLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbnRlcmZhY2UgRGVib3VuY2VkRnVuY3Rpb24ge1xuICAoLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgY2FuY2VsKCk6IHZvaWQ7XG4gIGRvSW1tZWRpYXRlbHkoLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx1bmtub3duPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueSB8IFByb21pc2U8YW55Pj4oXG4gIHRoaXM6IGFueSxcbiAgZnVuYzogVCxcbiAgd2FpdDogbnVtYmVyLFxuICBpbW1lZGlhdGU/OiBib29sZWFuXG4pOiBUIHtcbiAgbGV0IHRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICBjb25zdCBkZWJvdW5jZWRGbjogRGVib3VuY2VkRnVuY3Rpb24gPSAoLi4uYXJncykgPT5cbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICAgIFByb21pc2UucmVzb2x2ZShmdW5jLmFwcGx5KHRoaXMsIFsuLi5hcmdzXSBhcyBhbnkpKS50aGVuKHJlc29sdmUpO1xuICAgICAgICB9XG4gICAgICB9LCB3YWl0KTtcbiAgICAgIGlmIChpbW1lZGlhdGUgJiYgIXRpbWVvdXQpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGZ1bmMuYXBwbHkodGhpcywgWy4uLmFyZ3NdIGFzIGFueSkpLnRoZW4ocmVzb2x2ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgZGVib3VuY2VkRm4uY2FuY2VsID0gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB0aW1lb3V0ID0gdW5kZWZpbmVkO1xuICB9O1xuXG4gIGRlYm91bmNlZEZuLmRvSW1tZWRpYXRlbHkgPSAoLi4uYXJncykgPT5cbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoZnVuYy5hcHBseSh0aGlzLCBbLi4uYXJnc10gYXMgYW55KSkudGhlbihyZXNvbHZlKTtcbiAgICAgIH0sIDApO1xuICAgIH0pO1xuXG4gIHJldHVybiBkZWJvdW5jZWRGbiBhcyB1bmtub3duIGFzIFQ7XG59XG4iLCJpbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyBvblNjb3BlRGlzcG9zZSwgcmVmLCBzaGFsbG93UmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHsgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlLCBSZWdsZVJ1bGVEZWNsIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgdW53cmFwUnVsZVBhcmFtZXRlcnMgfSBmcm9tICcuLi9jcmVhdGVSdWxlL3Vud3JhcFJ1bGVQYXJhbWV0ZXJzJztcblxuZXhwb3J0IHR5cGUgU3RvcmVkUnVsZVN0YXR1cyA9IHtcbiAgJHZhbGlkOiBSZWY8Ym9vbGVhbj47XG4gICRwZW5kaW5nOiBSZWY8Ym9vbGVhbj47XG4gICRtZXRhZGF0YTogUmVmPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuICAkdmFsaWRhdGluZzogUmVmPGJvb2xlYW4+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVnbGVTdG9yYWdlID0gUmV0dXJuVHlwZTx0eXBlb2YgdXNlU3RvcmFnZT47XG5cbi8qKlxuICogSW5zcGlyZWQgYnkgVnVlbGlkYXRlIHN0b3JhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0b3JhZ2UoKSB7XG4gIGNvbnN0IHJ1bGVEZWNsU3RvcmFnZSA9IHNoYWxsb3dSZWYobmV3IE1hcDxzdHJpbmcsIFJlZ2xlUnVsZURlY2w8YW55LCBhbnk+PigpKTtcbiAgY29uc3QgZmllbGRzU3RvcmFnZSA9IHNoYWxsb3dSZWYoXG4gICAgbmV3IE1hcDxzdHJpbmcsIFJlZjxSZWNvcmQ8c3RyaW5nLCAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGU+Pj4oKVxuICApO1xuICBjb25zdCBjb2xsZWN0aW9uc1N0b3JhZ2UgPSBzaGFsbG93UmVmKG5ldyBNYXA8c3RyaW5nLCBSZWY8QXJyYXk8JEludGVybmFsUmVnbGVTdGF0dXNUeXBlPj4+KCkpO1xuICBjb25zdCBkaXJ0eVN0b3JhZ2UgPSBzaGFsbG93UmVmKG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpKTtcbiAgY29uc3QgcnVsZVN0YXR1c1N0b3JhZ2UgPSBzaGFsbG93UmVmKG5ldyBNYXA8c3RyaW5nLCBTdG9yZWRSdWxlU3RhdHVzPigpKTtcblxuICBjb25zdCBhcnJheVN0YXR1c1N0b3JhZ2UgPSBzaGFsbG93UmVmKG5ldyBNYXA8c3RyaW5nLCAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGU+KCkpO1xuXG4gIGZ1bmN0aW9uIGdldEZpZWxkc0VudHJ5KCRwYXRoOiBzdHJpbmcpOiBSZWY8UmVjb3JkPHN0cmluZywgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlPj4ge1xuICAgIGNvbnN0IGV4aXN0aW5nRmllbGRzID0gZmllbGRzU3RvcmFnZS52YWx1ZS5nZXQoJHBhdGgpO1xuICAgIGlmIChleGlzdGluZ0ZpZWxkcykge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nRmllbGRzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCAkZmllbGRzID0gcmVmKHt9KSBhcyBSZWY8UmVjb3JkPHN0cmluZywgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlPj47XG4gICAgICBmaWVsZHNTdG9yYWdlLnZhbHVlLnNldCgkcGF0aCwgJGZpZWxkcyk7XG4gICAgICByZXR1cm4gJGZpZWxkcztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb2xsZWN0aW9uc0VudHJ5KCRwYXRoOiBzdHJpbmcpOiBSZWY8QXJyYXk8JEludGVybmFsUmVnbGVTdGF0dXNUeXBlPj4ge1xuICAgIGNvbnN0IGV4aXN0aW5nRWFjaCA9IGNvbGxlY3Rpb25zU3RvcmFnZS52YWx1ZS5nZXQoJHBhdGgpO1xuICAgIGlmIChleGlzdGluZ0VhY2gpIHtcbiAgICAgIHJldHVybiBleGlzdGluZ0VhY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0ICRlYWNoID0gcmVmPEFycmF5PCRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZT4+KFtdKTtcbiAgICAgIGNvbGxlY3Rpb25zU3RvcmFnZS52YWx1ZS5zZXQoJHBhdGgsICRlYWNoKTtcbiAgICAgIHJldHVybiAkZWFjaDtcbiAgICB9XG4gIH1cblxuICAvLyBDb2xsZWN0aW9uc1xuXG4gIGZ1bmN0aW9uIGFkZEFycmF5U3RhdHVzKCRhcnJheUlkOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nLCB2YWx1ZTogJEludGVybmFsUmVnbGVTdGF0dXNUeXBlKSB7XG4gICAgYXJyYXlTdGF0dXNTdG9yYWdlLnZhbHVlLnNldChgJHskYXJyYXlJZH0tJHtpdGVtSWR9YCwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QXJyYXlTdGF0dXMoJGFycmF5SWQ6IHN0cmluZywgaXRlbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXJyYXlTdGF0dXNTdG9yYWdlLnZhbHVlLmdldChgJHskYXJyYXlJZH0tJHtpdGVtSWR9YCk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWxldGVBcnJheVN0YXR1cygkYXJyYXlJZDogc3RyaW5nLCBpdGVtSWQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoJGFycmF5SWQgJiYgaXRlbUlkICE9IG51bGwpIHtcbiAgICAgIGFycmF5U3RhdHVzU3RvcmFnZS52YWx1ZS5kZWxldGUoYCR7JGFycmF5SWR9LSR7aXRlbUlkfWApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldERpcnR5RW50cnkoJHBhdGg6IHN0cmluZywgZGlydHk6IGJvb2xlYW4pIHtcbiAgICBkaXJ0eVN0b3JhZ2UudmFsdWUuc2V0KCRwYXRoLCBkaXJ0eSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXJ0eVN0YXRlKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBkaXJ0eVN0b3JhZ2UudmFsdWUuZ2V0KHBhdGgpID8/IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkUnVsZURlY2xFbnRyeSgkcGF0aDogc3RyaW5nLCBvcHRpb25zOiBSZWdsZVJ1bGVEZWNsPGFueSwgYW55Pikge1xuICAgIHJ1bGVEZWNsU3RvcmFnZS52YWx1ZS5zZXQoJHBhdGgsIG9wdGlvbnMpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tSdWxlRGVjbEVudHJ5KFxuICAgICRwYXRoOiBzdHJpbmcsXG4gICAgbmV3UnVsZXM6IFJlZ2xlUnVsZURlY2xcbiAgKTogeyB2YWxpZDogYm9vbGVhbiB9IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdG9yZWRSdWxlc0RlZnMgPSBydWxlRGVjbFN0b3JhZ2UudmFsdWUuZ2V0KCRwYXRoKTtcblxuICAgIGlmICghc3RvcmVkUnVsZXNEZWZzKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgc3RvcmVkUnVsZXMgPSBzdG9yZWRSdWxlc0RlZnM7XG5cbiAgICBjb25zdCBpc1ZhbGlkQ2FjaGUgPSBhcmVSdWxlc0NoYW5nZWQobmV3UnVsZXMsIHN0b3JlZFJ1bGVzKTtcblxuICAgIGlmICghaXNWYWxpZENhY2hlKSByZXR1cm4geyB2YWxpZDogZmFsc2UgfTtcbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlUnVsZXNDaGFuZ2VkKG5ld1J1bGVzOiBSZWdsZVJ1bGVEZWNsLCBzdG9yZWRSdWxlczogUmVnbGVSdWxlRGVjbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0b3JlZFJ1bGVzS2V5cyA9IE9iamVjdC5rZXlzKHN0b3JlZFJ1bGVzKTtcbiAgICBjb25zdCBuZXdSdWxlc0tleXMgPSBPYmplY3Qua2V5cyhuZXdSdWxlcyk7XG5cbiAgICBpZiAobmV3UnVsZXNLZXlzLmxlbmd0aCAhPT0gc3RvcmVkUnVsZXNLZXlzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgaGFzQWxsVmFsaWRhdG9ycyA9IG5ld1J1bGVzS2V5cy5ldmVyeSgocnVsZUtleSkgPT4gc3RvcmVkUnVsZXNLZXlzLmluY2x1ZGVzKHJ1bGVLZXkpKTtcbiAgICBpZiAoIWhhc0FsbFZhbGlkYXRvcnMpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBuZXdSdWxlc0tleXMuZXZlcnkoKHJ1bGVLZXkpID0+IHtcbiAgICAgIGNvbnN0IG5ld1J1bGVFbGVtZW50ID0gbmV3UnVsZXNbcnVsZUtleV07XG4gICAgICBjb25zdCBzdG9yZWRSdWxlRWxlbWVudCA9IHN0b3JlZFJ1bGVzW3J1bGVLZXldO1xuICAgICAgaWYgKFxuICAgICAgICAhc3RvcmVkUnVsZUVsZW1lbnQgfHxcbiAgICAgICAgIW5ld1J1bGVFbGVtZW50IHx8XG4gICAgICAgIHR5cGVvZiBuZXdSdWxlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2Ygc3RvcmVkUnVsZUVsZW1lbnQgPT09ICdmdW5jdGlvbidcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gJGRlYm91bmNlXG4gICAgICBpZiAodHlwZW9mIG5ld1J1bGVFbGVtZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vICRsYXp5LCAkYXV0b0RpcnR5IGV0Yy4uXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXdSdWxlRWxlbWVudCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoIW5ld1J1bGVFbGVtZW50Ll9wYXJhbXMpIHJldHVybiB0cnVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXdSdWxlRWxlbWVudC5fcGFyYW1zPy5ldmVyeSgocGFyYW1LZXksIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzdG9yZWRSdWxlRWxlbWVudCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHN0b3JlZFJ1bGVFbGVtZW50ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdG9yZWRQYXJhbXMgPSB1bndyYXBSdWxlUGFyYW1ldGVycyhzdG9yZWRSdWxlRWxlbWVudC5fcGFyYW1zIGFzIGFueVtdKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IHVud3JhcFJ1bGVQYXJhbWV0ZXJzKG5ld1J1bGVFbGVtZW50Ll9wYXJhbXMgYXMgYW55W10pO1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlZFBhcmFtcz8uW2luZGV4XSA9PT0gbmV3UGFyYW1zPy5baW5kZXhdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cnlTZXRSdWxlU3RhdHVzUmVmKHBhdGg6IHN0cmluZyk6IFN0b3JlZFJ1bGVTdGF0dXMge1xuICAgIGNvbnN0IHJ1bGVTdGF0dXMgPSBydWxlU3RhdHVzU3RvcmFnZS52YWx1ZS5nZXQocGF0aCk7XG4gICAgaWYgKHJ1bGVTdGF0dXMpIHtcbiAgICAgIHJldHVybiBydWxlU3RhdHVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCAkcGVuZGluZyA9IHJlZihmYWxzZSk7XG4gICAgICBjb25zdCAkdmFsaWQgPSByZWYodHJ1ZSk7XG4gICAgICBjb25zdCAkbWV0YWRhdGEgPSByZWYoe30pO1xuICAgICAgY29uc3QgJHZhbGlkYXRpbmcgPSByZWYoZmFsc2UpO1xuICAgICAgcnVsZVN0YXR1c1N0b3JhZ2UudmFsdWUuc2V0KHBhdGgsIHsgJHBlbmRpbmcsICR2YWxpZCwgJG1ldGFkYXRhLCAkdmFsaWRhdGluZyB9KTtcbiAgICAgIHJldHVybiB7ICRwZW5kaW5nLCAkdmFsaWQsICRtZXRhZGF0YSwgJHZhbGlkYXRpbmcgfTtcbiAgICB9XG4gIH1cblxuICBvblNjb3BlRGlzcG9zZSgoKSA9PiB7XG4gICAgcnVsZURlY2xTdG9yYWdlLnZhbHVlLmNsZWFyKCk7XG4gICAgZmllbGRzU3RvcmFnZS52YWx1ZS5jbGVhcigpO1xuICAgIGNvbGxlY3Rpb25zU3RvcmFnZS52YWx1ZS5jbGVhcigpO1xuICAgIGRpcnR5U3RvcmFnZS52YWx1ZS5jbGVhcigpO1xuICAgIHJ1bGVTdGF0dXNTdG9yYWdlLnZhbHVlLmNsZWFyKCk7XG4gICAgYXJyYXlTdGF0dXNTdG9yYWdlLnZhbHVlLmNsZWFyKCk7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYWRkUnVsZURlY2xFbnRyeSxcbiAgICBzZXREaXJ0eUVudHJ5LFxuICAgIGNoZWNrUnVsZURlY2xFbnRyeSxcbiAgICBnZXREaXJ0eVN0YXRlLFxuICAgIHRyeVNldFJ1bGVTdGF0dXNSZWYsXG4gICAgZ2V0RmllbGRzRW50cnksXG4gICAgZ2V0Q29sbGVjdGlvbnNFbnRyeSxcbiAgICBnZXRBcnJheVN0YXR1cyxcbiAgICBhZGRBcnJheVN0YXR1cyxcbiAgICBkZWxldGVBcnJheVN0YXR1cyxcbiAgICBhcnJheVN0YXR1c1N0b3JhZ2UsXG4gIH07XG59XG4iLCJpbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7XG4gICRJbnRlcm5hbEZvcm1Qcm9wZXJ0eVR5cGVzLFxuICAkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25SdWxlRGVjbCxcbiAgJEludGVybmFsUmVnbGVQYXJ0aWFsVmFsaWRhdGlvblRyZWUsXG4gICRJbnRlcm5hbFJlZ2xlUnVsZURlY2wsXG4gIElubGluZVJ1bGVEZWNsYXJhdGlvbixcbiAgTWF5YmVHZXR0ZXIsXG4gIFJlZ2xlUnVsZURlZmluaXRpb24sXG59IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzT2JqZWN0LCB1bndyYXBHZXR0ZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZFJ1bGVzRGVmKFxuICBzdGF0ZTogUmVmPHVua25vd24+LFxuICBydWxlczogUmVmPCRJbnRlcm5hbEZvcm1Qcm9wZXJ0eVR5cGVzPlxuKTogcnVsZXMgaXMgUmVmPCRJbnRlcm5hbFJlZ2xlUGFydGlhbFZhbGlkYXRpb25UcmVlPiB7XG4gIHJldHVybiAoXG4gICAgaXNPYmplY3Qoc3RhdGUudmFsdWUpICYmXG4gICAgaXNPYmplY3QocnVsZXMudmFsdWUpICYmXG4gICAgIU9iamVjdC5lbnRyaWVzKHJ1bGVzLnZhbHVlKS5zb21lKChydWxlKSA9PiBpc1J1bGVEZWYocnVsZSkpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbGxlY3Rpb25SdWxlc0RlZihcbiAgcnVsZXM6IFJlZjwkSW50ZXJuYWxGb3JtUHJvcGVydHlUeXBlcywgYW55PlxuKTogcnVsZXMgaXMgUmVmPCRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvblJ1bGVEZWNsPiB7XG4gIHJldHVybiAhIXJ1bGVzLnZhbHVlICYmICckZWFjaCcgaW4gcnVsZXMudmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkYXRvclJ1bGVzRGVmKFxuICBydWxlczogUmVmPCRJbnRlcm5hbEZvcm1Qcm9wZXJ0eVR5cGVzPlxuKTogcnVsZXMgaXMgUmVmPCRJbnRlcm5hbFJlZ2xlUnVsZURlY2w+IHtcbiAgcmV0dXJuICEhcnVsZXMudmFsdWUgJiYgaXNPYmplY3QocnVsZXMudmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSdWxlRGVmKHJ1bGU6IHVua25vd24pOiBydWxlIGlzIFJlZ2xlUnVsZURlZmluaXRpb248YW55LCBhbnk+IHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJ1bGUpICYmICdfdmFsaWRhdG9yJyBpbiBydWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGb3JtUnVsZURlZmluaXRpb24oXG4gIHJ1bGU6IFJlZjx1bmtub3duPlxuKTogcnVsZSBpcyBSZWY8UmVnbGVSdWxlRGVmaW5pdGlvbjxhbnksIGFueT4+IHtcbiAgcmV0dXJuICEodHlwZW9mIHJ1bGUudmFsdWUgPT09ICdmdW5jdGlvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGb3JtSW5saW5lKFxuICBydWxlOiBSZWY8dW5rbm93bj5cbik6IHJ1bGUgaXMgUmVmPElubGluZVJ1bGVEZWNsYXJhdGlvbjxhbnksIGFueVtdLCBhbnk+PiB7XG4gIHJldHVybiB0eXBlb2YgcnVsZS52YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RhdGVBcnJheShzdGF0ZTogUmVmPHVua25vd24+KTogc3RhdGUgaXMgUmVmPCh1bmtub3duICYgeyAkaWQ/OiBzdHJpbmcgfSlbXT4ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShzdGF0ZS52YWx1ZSk7XG59XG4iLCJpbXBvcnQgdHlwZSB7XG4gICRJbnRlcm5hbEV4dGVybmFsUmVnbGVFcnJvcnMsXG4gICRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvblN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVGaWVsZFN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVSdWxlU3RhdHVzLFxuICAkSW50ZXJuYWxSZWdsZVN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlLFxuICBSZWdsZUV4dGVybmFsQ29sbGVjdGlvbkVycm9ycyxcbiAgUmVnbGVFeHRlcm5hbEVycm9yVHJlZSxcbn0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZFJ1bGVzU3RhdHVzKHJ1bGU6ICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZSk6IHJ1bGUgaXMgJEludGVybmFsUmVnbGVTdGF0dXMge1xuICByZXR1cm4gaXNPYmplY3QocnVsZSkgJiYgJyRmaWVsZHMnIGluIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbGxlY3Rpb25SdWxlc1N0YXR1cyhcbiAgcnVsZTogJEludGVybmFsUmVnbGVTdGF0dXNUeXBlXG4pOiBydWxlIGlzICRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvblN0YXR1cyB7XG4gIHJldHVybiAhIXJ1bGUgJiYgJyRlYWNoJyBpbiBydWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWVsZFN0YXR1cyhydWxlOiAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGUpOiBydWxlIGlzICRJbnRlcm5hbFJlZ2xlRmllbGRTdGF0dXMge1xuICByZXR1cm4gISFydWxlICYmICckcnVsZXMnIGluIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1J1bGVTdGF0dXMocnVsZTogdW5rbm93bik6IHJ1bGUgaXMgJEludGVybmFsUmVnbGVSdWxlU3RhdHVzIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJ1bGUpICYmICckdHlwZScgaW4gcnVsZSAmJiAnJG1lc3NhZ2UnIGluIHJ1bGU7XG59XG5cbi8vICAtLSBFeHRlcm5hbEVycm9yc1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWRFeHRlcm5hbEVycm9yU3RhdHVzKFxuICBydWxlOiAkSW50ZXJuYWxFeHRlcm5hbFJlZ2xlRXJyb3JzXG4pOiBydWxlIGlzIFJlZ2xlRXh0ZXJuYWxFcnJvclRyZWU8YW55PiB7XG4gIHJldHVybiAhIXJ1bGUgJiYgJyRlYWNoJyBpbiBydWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xsZWN0aW9uRXh0ZXJuYWxFcnJvclN0YXR1cyhcbiAgcnVsZTogJEludGVybmFsRXh0ZXJuYWxSZWdsZUVycm9yc1xuKTogcnVsZSBpcyBSZWdsZUV4dGVybmFsQ29sbGVjdGlvbkVycm9yczxhbnk+IHtcbiAgcmV0dXJuICEhcnVsZSAmJiAnJGVhY2gnIGluIHJ1bGU7XG59XG4iLCJpbXBvcnQgdHlwZSB7ICRJbnRlcm5hbEV4dGVybmFsUmVnbGVFcnJvcnMsIFJlZ2xlRXh0ZXJuYWxDb2xsZWN0aW9uRXJyb3JzIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHRlcm5hbEVycm9yQ29sbGVjdGlvbihcbiAgdmFsdWU6ICRJbnRlcm5hbEV4dGVybmFsUmVnbGVFcnJvcnNcbik6IHZhbHVlIGlzIFJlZ2xlRXh0ZXJuYWxDb2xsZWN0aW9uRXJyb3JzIHtcbiAgcmV0dXJuICckZWFjaCcgaW4gdmFsdWUgfHwgJyRlcnJvcnMnIGluIHZhbHVlO1xufVxuIiwiaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHR5cGUge1xuICAkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25TdGF0dXMsXG4gICRJbnRlcm5hbFJlZ2xlRXJyb3JzLFxuICAkSW50ZXJuYWxSZWdsZUZpZWxkU3RhdHVzLFxuICAkSW50ZXJuYWxSZWdsZVJ1bGVTdGF0dXMsXG4gICRJbnRlcm5hbFJlZ2xlU3RhdHVzLFxuICAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGUsXG59IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzQ29sbGVjdGlvblJ1bGVzU3RhdHVzLCBpc0ZpZWxkU3RhdHVzLCBpc05lc3RlZFJ1bGVzU3RhdHVzIH0gZnJvbSAnLi9ndWFyZHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFJ1bGVzRXJyb3JzKHtcbiAgZmllbGQsXG4gIHNpbGVudCA9IGZhbHNlLFxufToge1xuICBmaWVsZDogUGljazwkSW50ZXJuYWxSZWdsZUZpZWxkU3RhdHVzLCAnJHJ1bGVzJyB8ICckZGlydHknIHwgJyRleHRlcm5hbEVycm9ycyc+O1xuICBzaWxlbnQ/OiBib29sZWFuO1xufSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGZpZWxkLiRydWxlcyA/PyB7fSlcbiAgICAubWFwKChbcnVsZUtleSwgcnVsZV0pID0+IHtcbiAgICAgIGlmIChzaWxlbnQpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUuJG1lc3NhZ2U7XG4gICAgICB9IGVsc2UgaWYgKCFydWxlLiR2YWxpZCAmJiBmaWVsZC4kZGlydHkpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUuJG1lc3NhZ2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pXG4gICAgLmZpbHRlcigobXNnKTogbXNnIGlzIHN0cmluZyB8IHN0cmluZ1tdID0+ICEhbXNnKVxuICAgIC5yZWR1Y2U8c3RyaW5nW10+KChhY2MsIHZhbHVlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWNjPy5jb25jYXQoW3ZhbHVlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYWNjPy5jb25jYXQodmFsdWUpO1xuICAgICAgfVxuICAgIH0sIFtdKVxuICAgIC5jb25jYXQoZmllbGQuJGV4dGVybmFsRXJyb3JzID8/IFtdKTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0ZpZWxkRXJyb3JzKFxuICBmaWVsZFN0YXR1czogJEludGVybmFsUmVnbGVTdGF0dXNUeXBlLFxuICBzaWxlbnQgPSBmYWxzZVxuKTogJEludGVybmFsUmVnbGVFcnJvcnMge1xuICBpZiAoaXNOZXN0ZWRSdWxlc1N0YXR1cyhmaWVsZFN0YXR1cykpIHtcbiAgICByZXR1cm4gZXh0cmFjdE5lc3RlZEVycm9ycyhmaWVsZFN0YXR1cy4kZmllbGRzKTtcbiAgfSBlbHNlIGlmIChpc0NvbGxlY3Rpb25SdWxlc1N0YXR1cyhmaWVsZFN0YXR1cykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGVycm9yczogZmllbGRTdGF0dXMuJGZpZWxkLiRydWxlc1xuICAgICAgICA/IGV4dHJhY3RSdWxlc0Vycm9ycyh7IGZpZWxkOiBmaWVsZFN0YXR1cy4kZmllbGQsIHNpbGVudCB9KVxuICAgICAgICA6IFtdLFxuICAgICAgJGVhY2g6IGZpZWxkU3RhdHVzLiRlYWNoLm1hcCgoZmllbGQpID0+IHByb2Nlc3NGaWVsZEVycm9ycyhmaWVsZCwgc2lsZW50KSksXG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc0ZpZWxkU3RhdHVzKGZpZWxkU3RhdHVzKSkge1xuICAgIGlmIChmaWVsZFN0YXR1cy4kZXJyb3IpIHtcbiAgICAgIHJldHVybiBleHRyYWN0UnVsZXNFcnJvcnMoe1xuICAgICAgICBmaWVsZDogZmllbGRTdGF0dXMsXG4gICAgICAgIHNpbGVudCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmllbGRTdGF0dXMuJGV4dGVybmFsRXJyb3JzID8/IFtdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Q29sbGVjdGlvbkVycm9yKFxuICBlYWNoOiAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGVbXSxcbiAgc2lsZW50ID0gZmFsc2Vcbik6ICRJbnRlcm5hbFJlZ2xlRXJyb3JzW10ge1xuICByZXR1cm4gZWFjaC5tYXAoKGZpZWxkKSA9PiBwcm9jZXNzRmllbGRFcnJvcnMoZmllbGQsIHNpbGVudCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE5lc3RlZEVycm9ycyhcbiAgZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGU+IHwgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlW10sXG4gIHNpbGVudCA9IGZhbHNlXG4pOiBSZWNvcmQ8c3RyaW5nLCAkSW50ZXJuYWxSZWdsZUVycm9ycz4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkcykubWFwKChbZmllbGRLZXksIGZpZWxkU3RhdHVzXSkgPT4ge1xuICAgICAgaWYgKGlzTmVzdGVkUnVsZXNTdGF0dXMoZmllbGRTdGF0dXMpKSB7XG4gICAgICAgIHJldHVybiBbZmllbGRLZXksIGV4dHJhY3ROZXN0ZWRFcnJvcnMoZmllbGRTdGF0dXMuJGZpZWxkcywgc2lsZW50KV07XG4gICAgICB9IGVsc2UgaWYgKGlzQ29sbGVjdGlvblJ1bGVzU3RhdHVzKGZpZWxkU3RhdHVzKSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGZpZWxkS2V5LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICRlcnJvcnM6IGV4dHJhY3RSdWxlc0Vycm9ycyh7IGZpZWxkOiBmaWVsZFN0YXR1cy4kZmllbGQsIHNpbGVudCB9KSxcbiAgICAgICAgICAgICRlYWNoOiBleHRyYWN0Q29sbGVjdGlvbkVycm9yKGZpZWxkU3RhdHVzLiRlYWNoLCBzaWxlbnQpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9IGVsc2UgaWYgKGlzRmllbGRTdGF0dXMoZmllbGRTdGF0dXMpKSB7XG4gICAgICAgIGlmIChmaWVsZFN0YXR1cy4kZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgZmllbGRLZXksXG4gICAgICAgICAgICBleHRyYWN0UnVsZXNFcnJvcnMoe1xuICAgICAgICAgICAgICBmaWVsZDogZmllbGRTdGF0dXMsXG4gICAgICAgICAgICAgIHNpbGVudCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtmaWVsZEtleSwgZmllbGRTdGF0dXMuJGV4dGVybmFsRXJyb3JzID8/IFtdXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFtmaWVsZEtleSwgW11dO1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VFcnJvcnMoJHJlZ2xlOiAkSW50ZXJuYWxSZWdsZVN0YXR1cykge1xuICBjb25zdCBlcnJvcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGV4dHJhY3ROZXN0ZWRFcnJvcnMoJHJlZ2xlLiRmaWVsZHMpO1xuICB9KTtcblxuICByZXR1cm4gZXJyb3JzO1xufVxuIiwiaW1wb3J0IHR5cGUgeyBNYXliZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHtcbiAgUG9zc2libGVSZWdsZVJ1bGVNZXRhZGF0YUNvbnN1bWVyLFxuICBSZWdsZVJ1bGVNZXRhZGF0YURlZmluaXRpb24sXG59IGZyb20gJy4vcnVsZS5kZWZpbml0aW9uLnR5cGUnO1xuaW1wb3J0IHR5cGUgeyBSZWdsZVVuaXZlcnNhbFBhcmFtcyB9IGZyb20gJy4vcnVsZS5wYXJhbXMudHlwZXMnO1xuXG4vKipcbiAqIEludGVybmFsIGRlZmluaXRpb24gb2YgdGhlIHJ1bGUsIGNhbiBiZSB1c2VkIHRvIHJlc2V0IG9yIHBhdGNoIHRoZSBydWxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnbGVJbnRlcm5hbFJ1bGVEZWZzPFxuICBUVmFsdWUgZXh0ZW5kcyBhbnkgPSBhbnksXG4gIFRQYXJhbXMgZXh0ZW5kcyBhbnlbXSA9IFtdLFxuICBUQXN5bmMgZXh0ZW5kcyBib29sZWFuID0gZmFsc2UsXG4gIFRNZXRhZGF0YSBleHRlbmRzIFJlZ2xlUnVsZU1ldGFkYXRhRGVmaW5pdGlvbiA9IGJvb2xlYW4sXG4+IHtcbiAgX3ZhbGlkYXRvcjogKFxuICAgIHZhbHVlOiBNYXliZTxUVmFsdWU+LFxuICAgIC4uLmFyZ3M6IFRQYXJhbXNcbiAgKSA9PiBUQXN5bmMgZXh0ZW5kcyBmYWxzZSA/IFRNZXRhZGF0YSA6IFByb21pc2U8VE1ldGFkYXRhPjtcbiAgX21lc3NhZ2U6XG4gICAgfCBzdHJpbmdcbiAgICB8IHN0cmluZ1tdXG4gICAgfCAoKHZhbHVlOiBNYXliZTxUVmFsdWU+LCBtZXRhZGF0YTogUG9zc2libGVSZWdsZVJ1bGVNZXRhZGF0YUNvbnN1bWVyKSA9PiBzdHJpbmcgfCBzdHJpbmdbXSk7XG4gIF9hY3RpdmU/OlxuICAgIHwgYm9vbGVhblxuICAgIHwgKCh2YWx1ZTogTWF5YmU8VFZhbHVlPiwgbWV0YWRhdGE6IFBvc3NpYmxlUmVnbGVSdWxlTWV0YWRhdGFDb25zdW1lcikgPT4gYm9vbGVhbik7XG4gIF90eXBlPzogc3RyaW5nO1xuICBfcGF0Y2hlZDogYm9vbGVhbjtcbiAgX3BhcmFtcz86IFJlZ2xlVW5pdmVyc2FsUGFyYW1zPFRQYXJhbXM+O1xuICBfYXN5bmM6IFRBc3luYztcbn1cblxuZXhwb3J0IGVudW0gSW50ZXJuYWxSdWxlVHlwZSB7XG4gIElubGluZSA9ICdfX2lubGluZScsXG4gIEFzeW5jID0gJ19fYXN5bmMnLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgY29tcHV0ZWQsIHRvUmVmcyB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7IFJlZ2xlVmFsaWRhdGlvbkdyb3VwRW50cnkgfSBmcm9tICcuLi9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQm9vbGVhbkdyb3VwUHJvcGVydGllcyhcbiAgZW50cmllczogUmVmPFJlZ2xlVmFsaWRhdGlvbkdyb3VwRW50cnlbXT4sXG4gIHByb3BlcnR5OiBFeHRyYWN0PFxuICAgIGtleW9mIFJlZ2xlVmFsaWRhdGlvbkdyb3VwRW50cnksXG4gICAgJyRpbnZhbGlkJyB8ICckZXJyb3InIHwgJyRwZW5kaW5nJyB8ICckZGlydHknIHwgJyR2YWxpZCdcbiAgPlxuKSB7XG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGVudHJpZXMudmFsdWUuc29tZSgoZW50cnkpID0+IHtcbiAgICAgIHJldHVybiBlbnRyeVtwcm9wZXJ0eV07XG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQXJyYXlHcm91cFByb3BlcnRpZXMoXG4gIGVudHJpZXM6IFJlZjxSZWdsZVZhbGlkYXRpb25Hcm91cEVudHJ5W10+LFxuICBwcm9wZXJ0eTogRXh0cmFjdDxrZXlvZiBSZWdsZVZhbGlkYXRpb25Hcm91cEVudHJ5LCAnJGVycm9ycycgfCAnJHNpbGVudEVycm9ycyc+XG4pIHtcbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gZW50cmllcy52YWx1ZS5yZWR1Y2UoKGFsbCwgZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IGZldGNoZWRQcm9wZXJ0eSA9IGVudHJ5W3Byb3BlcnR5XSB8fCBbXTtcbiAgICAgIHJldHVybiBhbGwuY29uY2F0KGZldGNoZWRQcm9wZXJ0eSk7XG4gICAgfSwgW10gYXMgc3RyaW5nW10pO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHVuaXF1ZUlETnV4dCgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIERhdGUubm93KCkpLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21JZCgpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdW5pcXVlSUROdXh0KCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdWludDMyID0gd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTtcbiAgICByZXR1cm4gdWludDMyLnRvU3RyaW5nKDEwKTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBDb21wdXRlZFJlZiwgUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3RTY29wZSwgcmVhY3RpdmUsIHRvUmF3LCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7XG4gICRJbnRlcm5hbFJlZ2xlUnVsZU1ldGFkYXRhQ29uc3VtZXIsXG4gICRJbnRlcm5hbFJlZ2xlUnVsZVN0YXR1cyxcbiAgQ3VzdG9tUnVsZXNEZWNsYXJhdGlvblRyZWUsXG4gIElubGluZVJ1bGVEZWNsYXJhdGlvbixcbiAgUmVnbGVSdWxlRGVmaW5pdGlvbixcbiAgUmVnbGVSdWxlRGVmaW5pdGlvblByb2Nlc3NvcixcbiAgUmVnbGVSdWxlTWV0YWRhdGFEZWZpbml0aW9uLFxufSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBJbnRlcm5hbFJ1bGVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgZGVib3VuY2UsIGlzRW1wdHkgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyB1bndyYXBSdWxlUGFyYW1ldGVycyB9IGZyb20gJy4uLy4uL2NyZWF0ZVJ1bGUvdW53cmFwUnVsZVBhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUgeyBSZWdsZVN0b3JhZ2UgfSBmcm9tICcuLi8uLi91c2VTdG9yYWdlJztcbmltcG9ydCB7IGlzRm9ybVJ1bGVEZWZpbml0aW9uIH0gZnJvbSAnLi4vZ3VhcmRzJztcblxuaW50ZXJmYWNlIENyZWF0ZVJlYWN0aXZlUnVsZVN0YXR1c09wdGlvbnMge1xuICBzdGF0ZTogUmVmPHVua25vd24+O1xuICBydWxlS2V5OiBzdHJpbmc7XG4gIHJ1bGU6IFJlZjxJbmxpbmVSdWxlRGVjbGFyYXRpb248YW55LCBhbnlbXSwgYW55PiB8IFJlZ2xlUnVsZURlZmluaXRpb248YW55LCBhbnksIGFueT4+O1xuICAkZGlydHk6IFJlZjxib29sZWFuPjtcbiAgY3VzdG9tTWVzc2FnZXM/OiBQYXJ0aWFsPEN1c3RvbVJ1bGVzRGVjbGFyYXRpb25UcmVlPjtcbiAgcGF0aDogc3RyaW5nO1xuICBzdG9yYWdlOiBSZWdsZVN0b3JhZ2U7XG4gICRkZWJvdW5jZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlYWN0aXZlUnVsZVN0YXR1cyh7XG4gICRkaXJ0eSxcbiAgY3VzdG9tTWVzc2FnZXMsXG4gIHJ1bGUsXG4gIHJ1bGVLZXksXG4gIHN0YXRlLFxuICBwYXRoLFxuICBzdG9yYWdlLFxuICAkZGVib3VuY2UsXG59OiBDcmVhdGVSZWFjdGl2ZVJ1bGVTdGF0dXNPcHRpb25zKTogJEludGVybmFsUmVnbGVSdWxlU3RhdHVzIHtcbiAgdHlwZSBTY29wZVN0YXRlID0ge1xuICAgICRhY3RpdmU6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAgICRtZXNzYWdlOiBDb21wdXRlZFJlZjxzdHJpbmcgfCBzdHJpbmdbXT47XG4gICAgJHR5cGU6IENvbXB1dGVkUmVmPHN0cmluZz47XG4gICAgJHZhbGlkYXRvcjogQ29tcHV0ZWRSZWY8XG4gICAgICBSZWdsZVJ1bGVEZWZpbml0aW9uUHJvY2Vzc29yPFxuICAgICAgICBhbnksXG4gICAgICAgIGFueSxcbiAgICAgICAgUmVnbGVSdWxlTWV0YWRhdGFEZWZpbml0aW9uIHwgUHJvbWlzZTxSZWdsZVJ1bGVNZXRhZGF0YURlZmluaXRpb24+XG4gICAgICA+XG4gICAgPjtcbiAgICAkcGFyYW1zOiBDb21wdXRlZFJlZjxhbnlbXT47XG4gICAgJHBhdGg6IENvbXB1dGVkUmVmPHN0cmluZz47XG4gIH07XG4gIGxldCBzY29wZSA9IGVmZmVjdFNjb3BlKCk7XG4gIGxldCBzY29wZVN0YXRlITogU2NvcGVTdGF0ZTtcblxuICBsZXQgJHVud2F0Y2hTdGF0ZTogKCkgPT4gdm9pZDtcblxuICBjb25zdCB7ICRwZW5kaW5nLCAkdmFsaWQsICRtZXRhZGF0YSwgJHZhbGlkYXRpbmcgfSA9IHN0b3JhZ2UudHJ5U2V0UnVsZVN0YXR1c1JlZihcbiAgICBgJHtwYXRofS4ke3J1bGVLZXl9YFxuICApO1xuXG4gIGZ1bmN0aW9uICR3YXRjaCgpIHtcbiAgICBzY29wZVN0YXRlID0gc2NvcGUucnVuKCgpID0+IHtcbiAgICAgIGNvbnN0ICRkZWZhdWx0TWV0YWRhdGEgPSBjb21wdXRlZDwkSW50ZXJuYWxSZWdsZVJ1bGVNZXRhZGF0YUNvbnN1bWVyPigoKSA9PiAoe1xuICAgICAgICAkaW52YWxpZDogISR2YWxpZC52YWx1ZSxcbiAgICAgICAgJHBhcmFtczogJHBhcmFtcy52YWx1ZSxcbiAgICAgICAgLi4uJG1ldGFkYXRhLnZhbHVlLFxuICAgICAgfSkpO1xuXG4gICAgICBjb25zdCAkYWN0aXZlID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICBpZiAoaXNGb3JtUnVsZURlZmluaXRpb24ocnVsZSkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUudmFsdWUuYWN0aXZlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS52YWx1ZS5hY3RpdmUoc3RhdGUudmFsdWUsICRkZWZhdWx0TWV0YWRhdGEudmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS52YWx1ZS5hY3RpdmU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJG1lc3NhZ2UgPSBjb21wdXRlZDxzdHJpbmcgfCBzdHJpbmdbXT4oKCkgPT4ge1xuICAgICAgICBsZXQgbWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10gPSAnJztcbiAgICAgICAgY29uc3QgY3VzdG9tTWVzc2FnZVJ1bGUgPSBjdXN0b21NZXNzYWdlcyA/IGN1c3RvbU1lc3NhZ2VzW3J1bGVLZXldPy5tZXNzYWdlIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChjdXN0b21NZXNzYWdlUnVsZSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgY3VzdG9tTWVzc2FnZVJ1bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBjdXN0b21NZXNzYWdlUnVsZShzdGF0ZS52YWx1ZSwgJGRlZmF1bHRNZXRhZGF0YS52YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBjdXN0b21NZXNzYWdlUnVsZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRm9ybVJ1bGVEZWZpbml0aW9uKHJ1bGUpKSB7XG4gICAgICAgICAgaWYgKCEoY3VzdG9tTWVzc2FnZVJ1bGUgJiYgIXJ1bGUudmFsdWUuX3BhdGNoZWQpKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUudmFsdWUubWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBtZXNzYWdlID0gcnVsZS52YWx1ZS5tZXNzYWdlKHN0YXRlLnZhbHVlLCAkZGVmYXVsdE1ldGFkYXRhLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSBydWxlLnZhbHVlLm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRW1wdHkobWVzc2FnZSkpIHtcbiAgICAgICAgICBtZXNzYWdlID0gJ0Vycm9yJztcbiAgICAgICAgICBjb25zb2xlLndhcm4oYE5vIGVycm9yIG1lc3NhZ2UgZGVmaW5lZCBmb3IgJHtwYXRofS4ke3J1bGVLZXl9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkdHlwZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRm9ybVJ1bGVEZWZpbml0aW9uKHJ1bGUpICYmIHJ1bGUudmFsdWUudHlwZSkge1xuICAgICAgICAgIHJldHVybiBydWxlLnZhbHVlLnR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJ1bGVLZXk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkdmFsaWRhdG9yID0gY29tcHV0ZWQ8XG4gICAgICAgIFJlZ2xlUnVsZURlZmluaXRpb25Qcm9jZXNzb3I8YW55LCBhbnksIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+PlxuICAgICAgPigoKSA9PiB7XG4gICAgICAgIGlmIChpc0Zvcm1SdWxlRGVmaW5pdGlvbihydWxlKSkge1xuICAgICAgICAgIHJldHVybiBydWxlLnZhbHVlLnZhbGlkYXRvcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcnVsZS52YWx1ZSBhcyBJbmxpbmVSdWxlRGVjbGFyYXRpb248YW55LCBhbnlbXSwgYW55PjtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRwYXJhbXMgPSBjb21wdXRlZDxhbnlbXT4oKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHJ1bGUudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVud3JhcFJ1bGVQYXJhbWV0ZXJzKHJ1bGUudmFsdWUuX3BhcmFtcyA/PyBbXSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJHBhdGggPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IGAke3BhdGh9LiR7JHR5cGUudmFsdWV9YCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgICRhY3RpdmUsXG4gICAgICAgICRtZXNzYWdlLFxuICAgICAgICAkdHlwZSxcbiAgICAgICAgJHZhbGlkYXRvcixcbiAgICAgICAgJHBhcmFtcyxcbiAgICAgICAgJHBhdGgsXG4gICAgICB9IHNhdGlzZmllcyBTY29wZVN0YXRlO1xuICAgIH0pITtcblxuICAgICR1bndhdGNoU3RhdGUgPSB3YXRjaChzY29wZVN0YXRlLiRwYXJhbXMsICR2YWxpZGF0ZSwge1xuICAgICAgZGVlcDogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gICR3YXRjaCgpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVBc3luY1Jlc3VsdChwcm9taXNlOiBQcm9taXNlPFJlZ2xlUnVsZU1ldGFkYXRhRGVmaW5pdGlvbj4pIHtcbiAgICBsZXQgcnVsZVJlc3VsdCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAkdmFsaWQudmFsdWUgPSB0cnVlO1xuICAgICAgaWYgKCRkaXJ0eS52YWx1ZSkge1xuICAgICAgICAkcGVuZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm9taXNlUmVzdWx0ID0gYXdhaXQgcHJvbWlzZTtcbiAgICAgIGlmICh0eXBlb2YgcHJvbWlzZVJlc3VsdCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJ1bGVSZXN1bHQgPSBwcm9taXNlUmVzdWx0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyAkdmFsaWQsIC4uLnJlc3QgfSA9IHByb21pc2VSZXN1bHQ7XG4gICAgICAgIHJ1bGVSZXN1bHQgPSAkdmFsaWQ7XG4gICAgICAgICRtZXRhZGF0YS52YWx1ZSA9IHJlc3Q7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcnVsZVJlc3VsdCA9IGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAkcGVuZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlUmVzdWx0O1xuICB9XG5cbiAgY29uc3QgJGNvbXB1dGVBc3luY0RlYm91bmNlID0gZGVib3VuY2UoY29tcHV0ZUFzeW5jUmVzdWx0LCAkZGVib3VuY2UgPz8gMTAwKTtcblxuICBhc3luYyBmdW5jdGlvbiAkdmFsaWRhdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgJHZhbGlkYXRpbmcudmFsdWUgPSB0cnVlO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHNjb3BlU3RhdGUuJHZhbGlkYXRvci52YWx1ZTtcbiAgICBsZXQgcnVsZVJlc3VsdCA9IGZhbHNlO1xuICAgIGNvbnN0IHJlc3VsdE9yUHJvbWlzZSA9IHZhbGlkYXRvcihzdGF0ZS52YWx1ZSwgLi4uc2NvcGVTdGF0ZS4kcGFyYW1zLnZhbHVlKTtcblxuICAgIGlmIChyZXN1bHRPclByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICBjb25zdCBwcm9taXNlRGVib3VuY2UgPSAkY29tcHV0ZUFzeW5jRGVib3VuY2UocmVzdWx0T3JQcm9taXNlKTtcbiAgICAgIHJ1bGVSZXN1bHQgPSBhd2FpdCBwcm9taXNlRGVib3VuY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyZXN1bHRPclByb21pc2UgIT0gbnVsbCkge1xuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdE9yUHJvbWlzZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgcnVsZVJlc3VsdCA9IHJlc3VsdE9yUHJvbWlzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB7ICR2YWxpZCwgLi4ucmVzdCB9ID0gcmVzdWx0T3JQcm9taXNlO1xuICAgICAgICAgIHJ1bGVSZXN1bHQgPSAkdmFsaWQ7XG4gICAgICAgICAgJG1ldGFkYXRhLnZhbHVlID0gcmVzdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAkdmFsaWQudmFsdWUgPSBydWxlUmVzdWx0O1xuXG4gICAgJHZhbGlkYXRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIHJldHVybiBydWxlUmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gJHJlc2V0KCkge1xuICAgICR2YWxpZC52YWx1ZSA9IHRydWU7XG4gICAgJG1ldGFkYXRhLnZhbHVlID0ge307XG4gICAgJHBlbmRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAkdmFsaWRhdGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgJHdhdGNoKCk7XG4gIH1cblxuICBmdW5jdGlvbiAkdW53YXRjaCgpIHtcbiAgICAkdW53YXRjaFN0YXRlKCk7XG4gICAgc2NvcGUuc3RvcCgpO1xuICAgIHNjb3BlID0gZWZmZWN0U2NvcGUoKTtcbiAgfVxuXG4gIHJldHVybiByZWFjdGl2ZSh7XG4gICAgLi4uc2NvcGVTdGF0ZSxcbiAgICAkcGVuZGluZyxcbiAgICAkdmFsaWQsXG4gICAgJG1ldGFkYXRhLFxuICAgICR2YWxpZGF0ZSxcbiAgICAkdW53YXRjaCxcbiAgICAkd2F0Y2gsXG4gICAgJHJlc2V0LFxuICB9KSBzYXRpc2ZpZXMgJEludGVybmFsUmVnbGVSdWxlU3RhdHVzO1xufVxuIiwiaW1wb3J0IHR5cGUgeyBDb21wdXRlZFJlZiwgUmVmLCBXYXRjaFN0b3BIYW5kbGUgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdFNjb3BlLCByZWFjdGl2ZSwgcmVmLCB0b1JlZiwgdW5yZWYsIHdhdGNoIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHtcbiAgJEludGVybmFsUmVnbGVGaWVsZFN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVSdWxlRGVjbCxcbiAgJEludGVybmFsUmVnbGVSdWxlU3RhdHVzLFxuICBDdXN0b21SdWxlc0RlY2xhcmF0aW9uVHJlZSxcbiAgRmllbGRSZWdsZUJlaGF2aW91ck9wdGlvbnMsXG4gIFJlZ2xlUnVsZURlY2wsXG4gIFJlc29sdmVkUmVnbGVCZWhhdmlvdXJPcHRpb25zLFxufSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBkZWJvdW5jZSwgaXNFbXB0eSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUmVnbGVTdG9yYWdlIH0gZnJvbSAnLi4vLi4vdXNlU3RvcmFnZSc7XG5pbXBvcnQgeyBleHRyYWN0UnVsZXNFcnJvcnMgfSBmcm9tICcuLi91c2VFcnJvcnMnO1xuaW1wb3J0IHsgY3JlYXRlUmVhY3RpdmVSdWxlU3RhdHVzIH0gZnJvbSAnLi9jcmVhdGVSZWFjdGl2ZVJ1bGVTdGF0dXMnO1xuXG5pbnRlcmZhY2UgQ3JlYXRlUmVhY3RpdmVGaWVsZFN0YXR1c0FyZ3Mge1xuICBzdGF0ZTogUmVmPHVua25vd24+O1xuICBydWxlc0RlZjogUmVmPCRJbnRlcm5hbFJlZ2xlUnVsZURlY2w+O1xuICBjdXN0b21NZXNzYWdlcz86IEN1c3RvbVJ1bGVzRGVjbGFyYXRpb25UcmVlO1xuICBwYXRoOiBzdHJpbmc7XG4gIGluZGV4PzogbnVtYmVyO1xuICBzdG9yYWdlOiBSZWdsZVN0b3JhZ2U7XG4gIG9wdGlvbnM6IFJlc29sdmVkUmVnbGVCZWhhdmlvdXJPcHRpb25zO1xuICBleHRlcm5hbEVycm9yczogUmVhZG9ubHk8UmVmPHN0cmluZ1tdIHwgdW5kZWZpbmVkPj47XG4gIG9uVW53YXRjaD86ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgU2NvcGVSZXR1cm5TdGF0ZSA9IHtcbiAgJGVycm9yOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgJGVycm9yczogQ29tcHV0ZWRSZWY8c3RyaW5nW10+O1xuICAkc2lsZW50RXJyb3JzOiBDb21wdXRlZFJlZjxzdHJpbmdbXT47XG4gICRwZW5kaW5nOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgJGludmFsaWQ6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAkdmFsaWQ6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAkZGVib3VuY2U6IENvbXB1dGVkUmVmPG51bWJlciB8IHVuZGVmaW5lZD47XG4gICRsYXp5OiBDb21wdXRlZFJlZjxib29sZWFuIHwgdW5kZWZpbmVkPjtcbiAgJHJld2FyZEVhcmx5OiBDb21wdXRlZFJlZjxib29sZWFuIHwgdW5kZWZpbmVkPjtcbiAgJGF1dG9EaXJ0eTogQ29tcHV0ZWRSZWY8Ym9vbGVhbiB8IHVuZGVmaW5lZD47XG4gICRhbnlEaXJ0eTogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVhY3RpdmVGaWVsZFN0YXR1cyh7XG4gIHN0YXRlLFxuICBydWxlc0RlZixcbiAgY3VzdG9tTWVzc2FnZXMsXG4gIHBhdGgsXG4gIHN0b3JhZ2UsXG4gIG9wdGlvbnMsXG4gIGV4dGVybmFsRXJyb3JzLFxuICBpbmRleCxcbiAgb25VbndhdGNoLFxufTogQ3JlYXRlUmVhY3RpdmVGaWVsZFN0YXR1c0FyZ3MpOiAkSW50ZXJuYWxSZWdsZUZpZWxkU3RhdHVzIHtcbiAgbGV0IHNjb3BlID0gZWZmZWN0U2NvcGUoKTtcbiAgbGV0IHNjb3BlU3RhdGUhOiBTY29wZVJldHVyblN0YXRlO1xuXG4gIGNvbnN0ICRkaXJ0eSA9IHJlZihmYWxzZSk7XG5cbiAgY29uc3QgdHJpZ2dlclB1bmlzaG1lbnQgPSByZWYoZmFsc2UpO1xuXG4gIGNvbnN0ICRleHRlcm5hbEVycm9ycyA9IHJlZjxzdHJpbmdbXSB8IHVuZGVmaW5lZD4oW10pO1xuXG4gIGxldCAkdW53YXRjaFN0YXRlOiBXYXRjaFN0b3BIYW5kbGU7XG4gIGxldCAkdW53YXRjaFZhbGlkOiBXYXRjaFN0b3BIYW5kbGU7XG4gIGxldCAkdW53YXRjaEV4dGVybmFsRXJyb3JzOiBXYXRjaFN0b3BIYW5kbGU7XG4gIGxldCAkdW53YXRjaERpcnR5OiBXYXRjaFN0b3BIYW5kbGU7XG5cbiAgbGV0ICRjb21taXQgPSAoKSA9PiB7fTtcblxuICBmdW5jdGlvbiBjb2xsZWN0RXh0ZXJuYWxFcnJvcnMoKSB7XG4gICAgJGV4dGVybmFsRXJyb3JzLnZhbHVlID0gZXh0ZXJuYWxFcnJvcnMudmFsdWUgPz8gW107XG4gIH1cbiAgY29sbGVjdEV4dGVybmFsRXJyb3JzKCk7XG5cbiAgZnVuY3Rpb24gY3JlYXRlUmVhY3RpdmVSdWxlc1Jlc3VsdCgpIHtcbiAgICBjb25zdCBkZWNsYXJlZFJ1bGVzID0gcnVsZXNEZWYudmFsdWUgYXMgUmVnbGVSdWxlRGVjbDxhbnksIGFueT47XG4gICAgY29uc3Qgc3RvcmVSZXN1bHQgPSBzdG9yYWdlLmNoZWNrUnVsZURlY2xFbnRyeShwYXRoLCBkZWNsYXJlZFJ1bGVzKTtcblxuICAgICRsb2NhbE9wdGlvbnMudmFsdWUgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhkZWNsYXJlZFJ1bGVzKS5maWx0ZXIoKFtydWxlS2V5XSkgPT4gcnVsZUtleS5zdGFydHNXaXRoKCckJykpXG4gICAgKTtcblxuICAgICRydWxlcy52YWx1ZSA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJ1bGVzRGVmLnZhbHVlKVxuICAgICAgICAuZmlsdGVyKChbcnVsZUtleV0pID0+ICFydWxlS2V5LnN0YXJ0c1dpdGgoJyQnKSlcbiAgICAgICAgLm1hcCgoW3J1bGVLZXksIHJ1bGVdKSA9PiB7XG4gICAgICAgICAgaWYgKHJ1bGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVSZWYgPSB0b1JlZigoKSA9PiBydWxlKTtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIHJ1bGVLZXksXG4gICAgICAgICAgICAgIGNyZWF0ZVJlYWN0aXZlUnVsZVN0YXR1cyh7XG4gICAgICAgICAgICAgICAgJGRpcnR5LFxuICAgICAgICAgICAgICAgIGN1c3RvbU1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgIHJ1bGU6IHJ1bGVSZWYgYXMgYW55LFxuICAgICAgICAgICAgICAgIHJ1bGVLZXksXG4gICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgICAgICAgICRkZWJvdW5jZTogJGxvY2FsT3B0aW9ucy52YWx1ZS4kZGVib3VuY2UsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChydWxlRGVmKTogcnVsZURlZiBpcyBbc3RyaW5nLCAkSW50ZXJuYWxSZWdsZVJ1bGVTdGF0dXNdID0+ICEhcnVsZURlZi5sZW5ndGgpXG4gICAgKTtcblxuICAgICR3YXRjaCgpO1xuXG4gICAgJGNvbW1pdCA9IHNjb3BlU3RhdGUuJGRlYm91bmNlLnZhbHVlXG4gICAgICA/IGRlYm91bmNlKCRjb21taXRIYW5kbGVyLCBzY29wZVN0YXRlLiRkZWJvdW5jZS52YWx1ZSA/PyAwKVxuICAgICAgOiAkY29tbWl0SGFuZGxlcjtcblxuICAgIGlmIChzdG9yZVJlc3VsdD8udmFsaWQgIT0gbnVsbCkge1xuICAgICAgJGRpcnR5LnZhbHVlID0gc3RvcmFnZS5nZXREaXJ0eVN0YXRlKHBhdGgpO1xuICAgICAgaWYgKCRkaXJ0eS52YWx1ZSkge1xuICAgICAgICAkY29tbWl0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RvcmFnZS5hZGRSdWxlRGVjbEVudHJ5KHBhdGgsIGRlY2xhcmVkUnVsZXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gJHVud2F0Y2goKSB7XG4gICAgaWYgKCRydWxlcy52YWx1ZSkge1xuICAgICAgT2JqZWN0LmVudHJpZXMoJHJ1bGVzLnZhbHVlKS5mb3JFYWNoKChbXywgcnVsZV0pID0+IHtcbiAgICAgICAgcnVsZS4kdW53YXRjaCgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgICR1bndhdGNoRGlydHkoKTtcbiAgICBpZiAoJGRpcnR5LnZhbHVlKSB7XG4gICAgICBzdG9yYWdlLnNldERpcnR5RW50cnkocGF0aCwgJGRpcnR5LnZhbHVlKTtcbiAgICB9XG4gICAgJHVud2F0Y2hTdGF0ZSgpO1xuICAgICR1bndhdGNoVmFsaWQoKTtcbiAgICAkdW53YXRjaEV4dGVybmFsRXJyb3JzKCk7XG4gICAgc2NvcGUuc3RvcCgpO1xuICAgIHNjb3BlID0gZWZmZWN0U2NvcGUoKTtcbiAgICBvblVud2F0Y2g/LigpO1xuICB9XG5cbiAgZnVuY3Rpb24gJHdhdGNoKCkge1xuICAgIGlmICgkcnVsZXMudmFsdWUpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKCRydWxlcy52YWx1ZSkuZm9yRWFjaCgoW18sIHJ1bGVdKSA9PiB7XG4gICAgICAgIHJ1bGUuJHdhdGNoKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgc2NvcGVTdGF0ZSA9IHNjb3BlLnJ1bigoKSA9PiB7XG4gICAgICBjb25zdCAkYW55RGlydHkgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiAkZGlydHkudmFsdWUpO1xuICAgICAgY29uc3QgJGRlYm91bmNlID0gY29tcHV0ZWQ8bnVtYmVyIHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgICAgIHJldHVybiAkbG9jYWxPcHRpb25zLnZhbHVlLiRkZWJvdW5jZTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkbGF6eSA9IGNvbXB1dGVkPGJvb2xlYW4gfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICAgICAgaWYgKCRsb2NhbE9wdGlvbnMudmFsdWUuJGxhenkgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAkbG9jYWxPcHRpb25zLnZhbHVlLiRsYXp5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bnJlZihvcHRpb25zLmxhenkpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRyZXdhcmRFYXJseSA9IGNvbXB1dGVkPGJvb2xlYW4gfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICAgICAgaWYgKCRsb2NhbE9wdGlvbnMudmFsdWUuJHJld2FyZEVhcmx5ICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gJGxvY2FsT3B0aW9ucy52YWx1ZS4kcmV3YXJkRWFybHk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVucmVmKG9wdGlvbnMucmV3YXJkRWFybHkpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRhdXRvRGlydHkgPSBjb21wdXRlZDxib29sZWFuIHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgICAgIGlmICgkbG9jYWxPcHRpb25zLnZhbHVlLiRhdXRvRGlydHkgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAkbG9jYWxPcHRpb25zLnZhbHVlLiRhdXRvRGlydHk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVucmVmKG9wdGlvbnMuYXV0b0RpcnR5KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkZXJyb3IgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIHJldHVybiAkaW52YWxpZC52YWx1ZSAmJiAhJHBlbmRpbmcudmFsdWUgJiYgJGRpcnR5LnZhbHVlO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRlcnJvcnMgPSBjb21wdXRlZDxzdHJpbmdbXT4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gZXh0cmFjdFJ1bGVzRXJyb3JzKHtcbiAgICAgICAgICBmaWVsZDoge1xuICAgICAgICAgICAgJGRpcnR5OiAkZGlydHkudmFsdWUsXG4gICAgICAgICAgICAkZXh0ZXJuYWxFcnJvcnM6ICRleHRlcm5hbEVycm9ycy52YWx1ZSxcbiAgICAgICAgICAgICRydWxlczogJHJ1bGVzLnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRzaWxlbnRFcnJvcnMgPSBjb21wdXRlZDxzdHJpbmdbXT4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gZXh0cmFjdFJ1bGVzRXJyb3JzKHtcbiAgICAgICAgICBmaWVsZDoge1xuICAgICAgICAgICAgJGRpcnR5OiAkZGlydHkudmFsdWUsXG4gICAgICAgICAgICAkZXh0ZXJuYWxFcnJvcnM6ICRleHRlcm5hbEVycm9ycy52YWx1ZSxcbiAgICAgICAgICAgICRydWxlczogJHJ1bGVzLnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2lsZW50OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkcGVuZGluZyA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgaWYgKHRyaWdnZXJQdW5pc2htZW50LnZhbHVlIHx8ICEkcmV3YXJkRWFybHkudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoJHJ1bGVzLnZhbHVlKS5zb21lKChba2V5LCBydWxlUmVzdWx0XSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGVSZXN1bHQuJHBlbmRpbmc7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRpbnZhbGlkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICBpZiAoJGV4dGVybmFsRXJyb3JzLnZhbHVlPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICghJHJld2FyZEVhcmx5LnZhbHVlIHx8ICgkcmV3YXJkRWFybHkudmFsdWUgJiYgdHJpZ2dlclB1bmlzaG1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKCRydWxlcy52YWx1ZSkuc29tZSgoW2tleSwgcnVsZVJlc3VsdF0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhcnVsZVJlc3VsdC4kdmFsaWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICR2YWxpZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgaWYgKCRkaXJ0eS52YWx1ZSAmJiAhaXNFbXB0eShzdGF0ZS52YWx1ZSkpIHtcbiAgICAgICAgICBpZiAoJGV4dGVybmFsRXJyb3JzLnZhbHVlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCRyZXdhcmRFYXJseS52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKCRydWxlcy52YWx1ZSkuZXZlcnkoKFtrZXksIHJ1bGVSZXN1bHRdKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBydWxlUmVzdWx0LiR2YWxpZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gISRpbnZhbGlkLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgd2F0Y2goJHZhbGlkLCAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdHJpZ2dlclB1bmlzaG1lbnQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgICRlcnJvcixcbiAgICAgICAgJHBlbmRpbmcsXG4gICAgICAgICRpbnZhbGlkLFxuICAgICAgICAkdmFsaWQsXG4gICAgICAgICRkZWJvdW5jZSxcbiAgICAgICAgJGxhenksXG4gICAgICAgICRlcnJvcnMsXG4gICAgICAgICRzaWxlbnRFcnJvcnMsXG4gICAgICAgICRyZXdhcmRFYXJseSxcbiAgICAgICAgJGF1dG9EaXJ0eSxcbiAgICAgICAgJGFueURpcnR5LFxuICAgICAgfSBzYXRpc2ZpZXMgU2NvcGVSZXR1cm5TdGF0ZTtcbiAgICB9KSBhcyBTY29wZVJldHVyblN0YXRlO1xuXG4gICAgJHVud2F0Y2hFeHRlcm5hbEVycm9ycyA9IHdhdGNoKGV4dGVybmFsRXJyb3JzLCBjb2xsZWN0RXh0ZXJuYWxFcnJvcnMpO1xuICAgICR1bndhdGNoU3RhdGUgPSB3YXRjaChcbiAgICAgIHN0YXRlLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAoc2NvcGVTdGF0ZS4kYXV0b0RpcnR5LnZhbHVlKSB7XG4gICAgICAgICAgaWYgKCEkZGlydHkudmFsdWUpIHtcbiAgICAgICAgICAgICRkaXJ0eS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChydWxlc0RlZi52YWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgY3JlYXRlUmVhY3RpdmVSdWxlc1Jlc3VsdCgpO1xuICAgICAgICB9XG4gICAgICAgICRjb21taXQoKTtcbiAgICAgICAgaWYgKCFzY29wZVN0YXRlLiRyZXdhcmRFYXJseS52YWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAvLyAkY2xlYXJFeHRlcm5hbEVycm9ycygpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBkZWVwOiB0cnVlIH1cbiAgICApO1xuXG4gICAgJHVud2F0Y2hEaXJ0eSA9IHdhdGNoKCRkaXJ0eSwgKCkgPT4ge1xuICAgICAgc3RvcmFnZS5zZXREaXJ0eUVudHJ5KHBhdGgsICRkaXJ0eS52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICAkdW53YXRjaFZhbGlkID0gd2F0Y2goc2NvcGVTdGF0ZS4kdmFsaWQsICh2YWxpZCkgPT4ge1xuICAgICAgaWYgKHNjb3BlU3RhdGUuJHJld2FyZEVhcmx5LnZhbHVlICYmIHZhbGlkKSB7XG4gICAgICAgIHRyaWdnZXJQdW5pc2htZW50LnZhbHVlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiAkY29tbWl0SGFuZGxlcigpIHtcbiAgICBPYmplY3QuZW50cmllcygkcnVsZXMudmFsdWUpLmZvckVhY2goKFtrZXksIHJ1bGVdKSA9PiB7XG4gICAgICBydWxlLiR2YWxpZGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgJHJ1bGVzID0gcmVmKCkgYXMgUmVmPFJlY29yZDxzdHJpbmcsICRJbnRlcm5hbFJlZ2xlUnVsZVN0YXR1cz4+O1xuICBjb25zdCAkbG9jYWxPcHRpb25zID0gcmVmKCkgYXMgUmVmPEZpZWxkUmVnbGVCZWhhdmlvdXJPcHRpb25zPjtcblxuICBjcmVhdGVSZWFjdGl2ZVJ1bGVzUmVzdWx0KCk7XG5cbiAgZnVuY3Rpb24gJHJlc2V0KCk6IHZvaWQge1xuICAgICRkaXJ0eS52YWx1ZSA9IGZhbHNlO1xuICAgICRleHRlcm5hbEVycm9ycy52YWx1ZSA9IFtdO1xuICAgIE9iamVjdC5lbnRyaWVzKCRydWxlcy52YWx1ZSkuZm9yRWFjaCgoW2tleSwgcnVsZV0pID0+IHtcbiAgICAgIHJ1bGUuJHJlc2V0KCk7XG4gICAgfSk7XG4gICAgaWYgKCFzY29wZVN0YXRlLiRsYXp5LnZhbHVlKSB7XG4gICAgICBPYmplY3QuZW50cmllcygkcnVsZXMudmFsdWUpLm1hcCgoW2tleSwgcnVsZV0pID0+IHtcbiAgICAgICAgcmV0dXJuIHJ1bGUuJHZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiAkdG91Y2goKTogdm9pZCB7XG4gICAgaWYgKCEkZGlydHkudmFsdWUpIHtcbiAgICAgICRkaXJ0eS52YWx1ZSA9IHRydWU7XG4gICAgICBpZiAoIXNjb3BlU3RhdGUuJHJld2FyZEVhcmx5LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgICAvLyAkY2xlYXJFeHRlcm5hbEVycm9ycygpO1xuICAgICAgfVxuICAgICAgJGNvbW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0ICR2YWxpZGF0ZSA9IHNjb3BlU3RhdGUuJGRlYm91bmNlLnZhbHVlXG4gICAgPyBkZWJvdW5jZSgkdmFsaWRhdGVIYW5kbGVyLCBzY29wZVN0YXRlLiRkZWJvdW5jZS52YWx1ZSA/PyAwKVxuICAgIDogJHZhbGlkYXRlSGFuZGxlcjtcblxuICBhc3luYyBmdW5jdGlvbiAkdmFsaWRhdGVIYW5kbGVyKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICB0cmlnZ2VyUHVuaXNobWVudC52YWx1ZSA9IHRydWU7XG4gICAgICBpZiAoc2NvcGVTdGF0ZS4kYXV0b0RpcnR5LnZhbHVlICYmICRkaXJ0eS52YWx1ZSAmJiAhc2NvcGVTdGF0ZS4kcGVuZGluZy52YWx1ZSkge1xuICAgICAgICByZXR1cm4gIXNjb3BlU3RhdGUuJGVycm9yLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBPYmplY3QuZW50cmllcygkcnVsZXMudmFsdWUpLm1hcCgoW2tleSwgcnVsZV0pID0+IHtcbiAgICAgICAgICByZXR1cm4gcnVsZS4kdmFsaWRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHRzLmV2ZXJ5KCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh2YWx1ZS5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiAkY2xlYXJFeHRlcm5hbEVycm9ycygpIHtcbiAgICAkZXh0ZXJuYWxFcnJvcnMudmFsdWUgPSBbXTtcbiAgfVxuXG4gIGlmICghc2NvcGVTdGF0ZS4kbGF6eS52YWx1ZSkge1xuICAgICR2YWxpZGF0ZUhhbmRsZXIoKTtcbiAgfVxuXG4gIHJldHVybiByZWFjdGl2ZSh7XG4gICAgJGRpcnR5LFxuICAgIC4uLnNjb3BlU3RhdGUsXG4gICAgJGV4dGVybmFsRXJyb3JzLFxuICAgICR2YWx1ZTogc3RhdGUsXG4gICAgJHJ1bGVzOiAkcnVsZXMsXG4gICAgJHJlc2V0LFxuICAgICR0b3VjaCxcbiAgICAkdmFsaWRhdGUsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgICRjbGVhckV4dGVybmFsRXJyb3JzLFxuICB9KSBzYXRpc2ZpZXMgJEludGVybmFsUmVnbGVGaWVsZFN0YXR1cztcbn1cbiIsImltcG9ydCB0eXBlIHsgUmVxdWlyZWREZWVwIH0gZnJvbSAndHlwZS1mZXN0JztcbmltcG9ydCB0eXBlIHsgQ29tcHV0ZWRSZWYsIFJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0U2NvcGUsIHJlYWN0aXZlLCByZWYsIHRvUmVmLCB0b1JlZnMsIHdhdGNoIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHtcbiAgJEludGVybmFsRXh0ZXJuYWxSZWdsZUVycm9ycyxcbiAgJEludGVybmFsRm9ybVByb3BlcnR5VHlwZXMsXG4gICRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvbkVycm9ycyxcbiAgJEludGVybmFsUmVnbGVDb2xsZWN0aW9uUnVsZURlY2wsXG4gICRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvblN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVGaWVsZFN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlLFxuICBDdXN0b21SdWxlc0RlY2xhcmF0aW9uVHJlZSxcbiAgRGVlcE1heWJlUmVmLFxuICBSZWdsZUJlaGF2aW91ck9wdGlvbnMsXG4gIFJlZ2xlQ29sbGVjdGlvblJ1bGVEZWNsS2V5UHJvcGVydHksXG4gIFJlc29sdmVkUmVnbGVCZWhhdmlvdXJPcHRpb25zLFxufSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIHVud3JhcEdldHRlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IHJhbmRvbUlkIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmFuZG9tSWQnO1xuaW1wb3J0IHR5cGUgeyBSZWdsZVN0b3JhZ2UgfSBmcm9tICcuLi8uLi91c2VTdG9yYWdlJztcbmltcG9ydCB7IGlzRXh0ZXJuYWxFcnJvckNvbGxlY3Rpb24sIGlzUnVsZURlZiB9IGZyb20gJy4uL2d1YXJkcyc7XG5pbXBvcnQgeyBleHRyYWN0Q29sbGVjdGlvbkVycm9yLCBleHRyYWN0UnVsZXNFcnJvcnMgfSBmcm9tICcuLi91c2VFcnJvcnMnO1xuaW1wb3J0IHsgY3JlYXRlUmVhY3RpdmVGaWVsZFN0YXR1cyB9IGZyb20gJy4vY3JlYXRlUmVhY3RpdmVGaWVsZFN0YXR1cyc7XG5pbXBvcnQgeyBjcmVhdGVSZWFjdGl2ZUNoaWxkcmVuU3RhdHVzIH0gZnJvbSAnLi9jcmVhdGVSZWFjdGl2ZU5lc3RlZFN0YXR1cyc7XG5cbnR5cGUgU3RhdGVXaXRoSWQgPSB1bmtub3duICYgeyAkaWQ/OiBzdHJpbmcgfTtcblxuZnVuY3Rpb24gY3JlYXRlQ29sbGVjdGlvbkVsZW1lbnQoe1xuICAkaWQsXG4gIHBhdGgsXG4gIGluZGV4LFxuICBvcHRpb25zLFxuICBzdG9yYWdlLFxuICBzdGF0ZVZhbHVlLFxuICBjdXN0b21NZXNzYWdlcyxcbiAgcnVsZXMsXG4gIGV4dGVybmFsRXJyb3JzLFxufToge1xuICAkaWQ6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBpbmRleDogbnVtYmVyO1xuICBzdGF0ZVZhbHVlOiBSZWY8U3RhdGVXaXRoSWQ+O1xuICBjdXN0b21NZXNzYWdlcz86IEN1c3RvbVJ1bGVzRGVjbGFyYXRpb25UcmVlO1xuICBzdG9yYWdlOiBSZWdsZVN0b3JhZ2U7XG4gIG9wdGlvbnM6IERlZXBNYXliZVJlZjxSZXF1aXJlZERlZXA8UmVnbGVCZWhhdmlvdXJPcHRpb25zPj47XG4gIHJ1bGVzOiAkSW50ZXJuYWxGb3JtUHJvcGVydHlUeXBlcyAmIFJlZ2xlQ29sbGVjdGlvblJ1bGVEZWNsS2V5UHJvcGVydHk7XG4gIGV4dGVybmFsRXJyb3JzOiBDb21wdXRlZFJlZjwkSW50ZXJuYWxFeHRlcm5hbFJlZ2xlRXJyb3JzW10gfCB1bmRlZmluZWQ+O1xufSk6ICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZSB8IG51bGwge1xuICBjb25zdCAkZmllbGRJZCA9IHJ1bGVzLiRrZXkgPyBydWxlcy4ka2V5IDogcmFuZG9tSWQoKTtcbiAgbGV0ICRwYXRoID0gYCR7cGF0aH0uJHtTdHJpbmcoJGZpZWxkSWQpfWA7XG5cbiAgaWYgKHR5cGVvZiBzdGF0ZVZhbHVlLnZhbHVlID09PSAnb2JqZWN0JyAmJiBzdGF0ZVZhbHVlLnZhbHVlICE9IG51bGwpIHtcbiAgICBpZiAoIXN0YXRlVmFsdWUudmFsdWUuJGlkKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdGF0ZVZhbHVlLnZhbHVlLCB7XG4gICAgICAgICRpZDoge1xuICAgICAgICAgIHZhbHVlOiAkZmllbGRJZCxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAkcGF0aCA9IGAke3BhdGh9LiR7c3RhdGVWYWx1ZS52YWx1ZS4kaWR9YDtcbiAgICB9XG4gIH1cblxuICBjb25zdCAkZXh0ZXJuYWxFcnJvcnMgPSB0b1JlZigoKSA9PiBleHRlcm5hbEVycm9ycy52YWx1ZT8uW2luZGV4XSk7XG5cbiAgY29uc3QgJHN0YXR1cyA9IGNyZWF0ZVJlYWN0aXZlQ2hpbGRyZW5TdGF0dXMoe1xuICAgIHN0YXRlOiBzdGF0ZVZhbHVlLFxuICAgIHJ1bGVzRGVmOiB0b1JlZigoKSA9PiBydWxlcyksXG4gICAgY3VzdG9tTWVzc2FnZXMsXG4gICAgcGF0aDogJHBhdGgsXG4gICAgc3RvcmFnZSxcbiAgICBvcHRpb25zLFxuICAgIGV4dGVybmFsRXJyb3JzOiAkZXh0ZXJuYWxFcnJvcnMsXG4gIH0pO1xuXG4gIGlmICgkc3RhdHVzKSB7XG4gICAgY29uc3QgdmFsdWVJZCA9IHN0YXRlVmFsdWUudmFsdWU/LiRpZDtcbiAgICAkc3RhdHVzLiRpZCA9IHZhbHVlSWQgPz8gU3RyaW5nKCRmaWVsZElkKTtcbiAgICBzdG9yYWdlLmFkZEFycmF5U3RhdHVzKCRpZCwgJHN0YXR1cy4kaWQsICRzdGF0dXMpO1xuICB9XG5cbiAgcmV0dXJuICRzdGF0dXM7XG59XG5cbmludGVyZmFjZSBDcmVhdGVSZWFjdGl2ZUNvbGxlY3Rpb25TdGF0dXNBcmdzIHtcbiAgc3RhdGU6IFJlZjxTdGF0ZVdpdGhJZFtdICYgU3RhdGVXaXRoSWQ+O1xuICBydWxlc0RlZjogUmVmPCRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvblJ1bGVEZWNsPjtcbiAgY3VzdG9tTWVzc2FnZXM/OiBDdXN0b21SdWxlc0RlY2xhcmF0aW9uVHJlZTtcbiAgcGF0aDogc3RyaW5nO1xuICBpbmRleD86IG51bWJlcjtcbiAgc3RvcmFnZTogUmVnbGVTdG9yYWdlO1xuICBvcHRpb25zOiBSZXNvbHZlZFJlZ2xlQmVoYXZpb3VyT3B0aW9ucztcbiAgZXh0ZXJuYWxFcnJvcnM6IFJlYWRvbmx5PFJlZjwkSW50ZXJuYWxFeHRlcm5hbFJlZ2xlRXJyb3JzIHwgdW5kZWZpbmVkPj47XG59XG5cbmludGVyZmFjZSBTY29wZVJldHVyblN0YXRlIHtcbiAgJGRpcnR5OiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgJGFueURpcnR5OiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgJGludmFsaWQ6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAkdmFsaWQ6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAkZXJyb3I6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAkcGVuZGluZzogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICRlcnJvcnM6IENvbXB1dGVkUmVmPCRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvbkVycm9ycz47XG4gICRzaWxlbnRFcnJvcnM6IENvbXB1dGVkUmVmPCRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvbkVycm9ycz47XG59XG5cbmludGVyZmFjZSBJbW1lZGlhdGVTY29wZVJldHVyblN0YXRlIHtcbiAgaXNQcmltaXRpdmVBcnJheTogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICRleHRlcm5hbEVycm9yc0ZpZWxkOiBDb21wdXRlZFJlZjxzdHJpbmdbXT47XG4gICRleHRlcm5hbEVycm9yc0VhY2g6IENvbXB1dGVkUmVmPCRJbnRlcm5hbEV4dGVybmFsUmVnbGVFcnJvcnNbXT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWFjdGl2ZUNvbGxlY3Rpb25TdGF0dXMoe1xuICBzdGF0ZSxcbiAgcnVsZXNEZWYsXG4gIGN1c3RvbU1lc3NhZ2VzLFxuICBwYXRoLFxuICBzdG9yYWdlLFxuICBvcHRpb25zLFxuICBleHRlcm5hbEVycm9ycyxcbn06IENyZWF0ZVJlYWN0aXZlQ29sbGVjdGlvblN0YXR1c0FyZ3MpOiAkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25TdGF0dXMgfCBudWxsIHtcbiAgbGV0IHNjb3BlID0gZWZmZWN0U2NvcGUoKTtcbiAgbGV0IHNjb3BlU3RhdGUhOiBTY29wZVJldHVyblN0YXRlO1xuXG4gIGxldCBpbW1lZGlhdGVTY29wZSA9IGVmZmVjdFNjb3BlKCk7XG4gIGxldCBpbW1lZGlhdGVTY29wZVN0YXRlITogSW1tZWRpYXRlU2NvcGVSZXR1cm5TdGF0ZTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS52YWx1ZSkgJiYgIXJ1bGVzRGVmLnZhbHVlLiRlYWNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgJGlkID0gcmVmPHN0cmluZz4oKSBhcyBSZWY8c3RyaW5nPjtcbiAgY29uc3QgJHZhbHVlID0gcmVmKHN0YXRlLnZhbHVlKTtcblxuICBsZXQgJHVud2F0Y2hTdGF0ZTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3QgJGZpZWxkU3RhdHVzID0gcmVmKHt9KSBhcyBSZWY8JEludGVybmFsUmVnbGVGaWVsZFN0YXR1cz47XG4gIGNvbnN0ICRlYWNoU3RhdHVzID0gc3RvcmFnZS5nZXRDb2xsZWN0aW9uc0VudHJ5KHBhdGgpO1xuXG4gIGltbWVkaWF0ZVNjb3BlU3RhdGUgPSBpbW1lZGlhdGVTY29wZS5ydW4oKCkgPT4ge1xuICAgIGNvbnN0IGlzUHJpbWl0aXZlQXJyYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS52YWx1ZSkgJiYgc3RhdGUudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS52YWx1ZS5zb21lKChzKSA9PiB0eXBlb2YgcyAhPT0gJ29iamVjdCcpO1xuICAgICAgfSBlbHNlIGlmIChydWxlc0RlZi52YWx1ZS4kZWFjaCAmJiAhKHJ1bGVzRGVmLnZhbHVlLiRlYWNoIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJ1bGVzRGVmLnZhbHVlLiRlYWNoKS5ldmVyeSgocnVsZSkgPT4gaXNSdWxlRGVmKHJ1bGUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIGNvbnN0ICRleHRlcm5hbEVycm9yc0ZpZWxkID0gY29tcHV0ZWQ8c3RyaW5nW10+KCgpID0+IHtcbiAgICAgIGlmIChleHRlcm5hbEVycm9ycy52YWx1ZSkge1xuICAgICAgICBpZiAoaXNFeHRlcm5hbEVycm9yQ29sbGVjdGlvbihleHRlcm5hbEVycm9ycy52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gZXh0ZXJuYWxFcnJvcnMudmFsdWUuJGVycm9ycyA/PyBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG5cbiAgICBjb25zdCAkZXh0ZXJuYWxFcnJvcnNFYWNoID0gY29tcHV0ZWQ8JEludGVybmFsRXh0ZXJuYWxSZWdsZUVycm9yc1tdPigoKSA9PiB7XG4gICAgICBpZiAoZXh0ZXJuYWxFcnJvcnMudmFsdWUpIHtcbiAgICAgICAgaWYgKGlzRXh0ZXJuYWxFcnJvckNvbGxlY3Rpb24oZXh0ZXJuYWxFcnJvcnMudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGV4dGVybmFsRXJyb3JzLnZhbHVlLiRlYWNoID8/IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNQcmltaXRpdmVBcnJheSxcbiAgICAgICRleHRlcm5hbEVycm9yc0ZpZWxkLFxuICAgICAgJGV4dGVybmFsRXJyb3JzRWFjaCxcbiAgICB9IHNhdGlzZmllcyBJbW1lZGlhdGVTY29wZVJldHVyblN0YXRlO1xuICB9KSE7XG5cbiAgY3JlYXRlU3RhdHVzKCk7XG4gICR3YXRjaCgpO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0YXR1cygpIHtcbiAgICBpZiAodHlwZW9mIHN0YXRlLnZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHN0YXRlLnZhbHVlICE9IG51bGwgJiYgIXN0YXRlLnZhbHVlPy4kaWQgJiYgc3RhdGUudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgJGlkLnZhbHVlID0gcmFuZG9tSWQoKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RhdGUudmFsdWUsIHtcbiAgICAgICAgICAkaWQ6IHtcbiAgICAgICAgICAgIHZhbHVlOiAkaWQudmFsdWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLnZhbHVlPy4kaWQpIHtcbiAgICAgICAgJGlkLnZhbHVlID0gc3RhdGUudmFsdWUuJGlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbW1lZGlhdGVTY29wZVN0YXRlLmlzUHJpbWl0aXZlQXJyYXkudmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAkdmFsdWUudmFsdWUgPSAkZmllbGRTdGF0dXMudmFsdWUuJHZhbHVlO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUudmFsdWUpICYmIHJ1bGVzRGVmLnZhbHVlLiRlYWNoKSB7XG4gICAgICAkZWFjaFN0YXR1cy52YWx1ZSA9IHN0YXRlLnZhbHVlXG4gICAgICAgIC5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVud3JhcHBlZCRFYWNoID0gdW53cmFwR2V0dGVyKFxuICAgICAgICAgICAgcnVsZXNEZWYudmFsdWUuJGVhY2gsXG4gICAgICAgICAgICB0b1JlZigoKSA9PiB2YWx1ZSksXG4gICAgICAgICAgICBpbmRleFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHVud3JhcHBlZCRFYWNoKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY3JlYXRlQ29sbGVjdGlvbkVsZW1lbnQoe1xuICAgICAgICAgICAgICAkaWQ6ICRpZC52YWx1ZSxcbiAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgcnVsZXM6IHVud3JhcHBlZCRFYWNoLFxuICAgICAgICAgICAgICBzdGF0ZVZhbHVlOiB0b1JlZigoKSA9PiB2YWx1ZSksXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgICAgICBleHRlcm5hbEVycm9yczogaW1tZWRpYXRlU2NvcGVTdGF0ZS4kZXh0ZXJuYWxFcnJvcnNFYWNoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoZWFjaCkgPT4gISFlYWNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGVhY2hTdGF0dXMudmFsdWUgPSBbXTtcbiAgICB9XG5cbiAgICAkZmllbGRTdGF0dXMudmFsdWUgPSBjcmVhdGVSZWFjdGl2ZUZpZWxkU3RhdHVzKHtcbiAgICAgIHN0YXRlLFxuICAgICAgcnVsZXNEZWYsXG4gICAgICBjdXN0b21NZXNzYWdlcyxcbiAgICAgIHBhdGgsXG4gICAgICBzdG9yYWdlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGV4dGVybmFsRXJyb3JzOiBpbW1lZGlhdGVTY29wZVN0YXRlLiRleHRlcm5hbEVycm9yc0ZpZWxkLFxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU3RhdHVzKCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHN0YXRlLnZhbHVlKSkge1xuICAgICAgY29uc3QgcHJldmlvdXNTdGF0dXMgPSBjbG9uZURlZXAoJGVhY2hTdGF0dXMudmFsdWUpO1xuXG4gICAgICAkZWFjaFN0YXR1cy52YWx1ZSA9IHN0YXRlLnZhbHVlXG4gICAgICAgIC5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRvUmVmKCgpID0+IHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUuJGlkICYmICRlYWNoU3RhdHVzLnZhbHVlLmZpbmQoKGVhY2gpID0+IGVhY2guJGlkID09PSB2YWx1ZS4kaWQpKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1N0YXR1cyA9IHN0b3JhZ2UuZ2V0QXJyYXlTdGF0dXMoJGlkLnZhbHVlLCB2YWx1ZS4kaWQpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nU3RhdHVzKSB7XG4gICAgICAgICAgICAgIGV4aXN0aW5nU3RhdHVzLiR2YWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nU3RhdHVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHVud3JhcHBlZCRFYWNoID0gdW53cmFwR2V0dGVyKHJ1bGVzRGVmLnZhbHVlLiRlYWNoLCBjdXJyZW50VmFsdWUsIGluZGV4KTtcbiAgICAgICAgICAgIGlmICh1bndyYXBwZWQkRWFjaCkge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY3JlYXRlQ29sbGVjdGlvbkVsZW1lbnQoe1xuICAgICAgICAgICAgICAgICRpZDogJGlkLnZhbHVlLFxuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgcnVsZXM6IHVud3JhcHBlZCRFYWNoLFxuICAgICAgICAgICAgICAgIHN0YXRlVmFsdWU6IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgZXh0ZXJuYWxFcnJvcnM6IGltbWVkaWF0ZVNjb3BlU3RhdGUuJGV4dGVybmFsRXJyb3JzRWFjaCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChlYWNoKSA9PiAhIWVhY2gpO1xuXG4gICAgICBwcmV2aW91c1N0YXR1c1xuICAgICAgICAuZmlsdGVyKCgkZWFjaCkgPT4gIXN0YXRlLnZhbHVlLmZpbmQoKGYpID0+ICRlYWNoLiRpZCA9PT0gZi4kaWQpKVxuICAgICAgICAuZm9yRWFjaCgoJGVhY2gsIGluZGV4KSA9PiB7XG4gICAgICAgICAgc3RvcmFnZS5kZWxldGVBcnJheVN0YXR1cygkaWQudmFsdWUsIGluZGV4LnRvU3RyaW5nKCkpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGVhY2hTdGF0dXMudmFsdWUgPSBbXTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiAkd2F0Y2goKSB7XG4gICAgJHVud2F0Y2hTdGF0ZSA9IHdhdGNoKFxuICAgICAgc3RhdGUsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZS52YWx1ZSAhPSBudWxsICYmICFPYmplY3QuaGFzT3duKHN0YXRlLnZhbHVlIGFzIGFueSwgJyRpZCcpKSB7XG4gICAgICAgICAgY3JlYXRlU3RhdHVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlU3RhdHVzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGRlZXA6IHRydWUsIGZsdXNoOiAncHJlJyB9XG4gICAgKTtcbiAgICBzY29wZVN0YXRlID0gc2NvcGUucnVuKCgpID0+IHtcbiAgICAgIGNvbnN0ICRkaXJ0eSA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAkZmllbGRTdGF0dXMudmFsdWUuJGRpcnR5ICYmXG4gICAgICAgICAgJGVhY2hTdGF0dXMudmFsdWUuZXZlcnkoKHN0YXR1c09yRmllbGQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXNPckZpZWxkLiRkaXJ0eTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRhbnlEaXJ0eSA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAkZmllbGRTdGF0dXMudmFsdWUuJGFueURpcnR5IHx8XG4gICAgICAgICAgJGVhY2hTdGF0dXMudmFsdWUuc29tZSgoc3RhdHVzT3JGaWVsZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1c09yRmllbGQuJGRpcnR5O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJGludmFsaWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgJGZpZWxkU3RhdHVzLnZhbHVlLiRpbnZhbGlkIHx8XG4gICAgICAgICAgJGVhY2hTdGF0dXMudmFsdWUuc29tZSgoc3RhdHVzT3JGaWVsZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1c09yRmllbGQuJGludmFsaWQ7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkdmFsaWQgPSBjb21wdXRlZDxib29sZWFuPihcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAkZmllbGRTdGF0dXMudmFsdWUuJHZhbGlkICYmXG4gICAgICAgICAgJGVhY2hTdGF0dXMudmFsdWUuZXZlcnkoKHN0YXR1c09yRmllbGQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXNPckZpZWxkLiR2YWxpZDtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgY29uc3QgJGVycm9yID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICRmaWVsZFN0YXR1cy52YWx1ZS4kZXJyb3IgfHxcbiAgICAgICAgICAkZWFjaFN0YXR1cy52YWx1ZS5zb21lKChzdGF0dXNPckZpZWxkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kZXJyb3I7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkcGVuZGluZyA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAkZmllbGRTdGF0dXMudmFsdWUuJHBlbmRpbmcgfHxcbiAgICAgICAgICAkZWFjaFN0YXR1cy52YWx1ZS5zb21lKChzdGF0dXNPckZpZWxkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kcGVuZGluZztcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRlcnJvcnMgPSBjb21wdXRlZDwkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25FcnJvcnM+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAkZXJyb3JzOiBleHRyYWN0UnVsZXNFcnJvcnMoeyBmaWVsZDogJGZpZWxkU3RhdHVzLnZhbHVlLCBzaWxlbnQ6IGZhbHNlIH0pLFxuICAgICAgICAgICRlYWNoOiBleHRyYWN0Q29sbGVjdGlvbkVycm9yKCRlYWNoU3RhdHVzLnZhbHVlKSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkc2lsZW50RXJyb3JzID0gY29tcHV0ZWQ8JEludGVybmFsUmVnbGVDb2xsZWN0aW9uRXJyb3JzPigoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgJGVycm9yczogZXh0cmFjdFJ1bGVzRXJyb3JzKHsgZmllbGQ6ICRmaWVsZFN0YXR1cy52YWx1ZSwgc2lsZW50OiB0cnVlIH0pLFxuICAgICAgICAgICRlYWNoOiBleHRyYWN0Q29sbGVjdGlvbkVycm9yKCRlYWNoU3RhdHVzLnZhbHVlLCB0cnVlKSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAkZGlydHksXG4gICAgICAgICRhbnlEaXJ0eSxcbiAgICAgICAgJGludmFsaWQsXG4gICAgICAgICR2YWxpZCxcbiAgICAgICAgJGVycm9yLFxuICAgICAgICAkcGVuZGluZyxcbiAgICAgICAgJGVycm9ycyxcbiAgICAgICAgJHNpbGVudEVycm9ycyxcbiAgICAgIH0gc2F0aXNmaWVzIFNjb3BlUmV0dXJuU3RhdGU7XG4gICAgfSkhO1xuXG4gICAgaWYgKGltbWVkaWF0ZVNjb3BlU3RhdGUuaXNQcmltaXRpdmVBcnJheS52YWx1ZSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgJHtwYXRofSBpcyBhIEFycmF5IG9mIHByaW1pdGl2ZXMuIFRyYWNraW5nIGNhbiBiZSBsb3N0IHdoZW4gcmVhc3NpZ25pbmcgdGhlIEFycmF5LiBXZSBhZHZpc2UgdG8gdXNlIGFuIEFycmF5IG9mIG9iamVjdHMgaW5zdGVhZGBcbiAgICAgICk7XG4gICAgICAkdW53YXRjaFN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gJHVud2F0Y2goKSB7XG4gICAgaWYgKCR1bndhdGNoU3RhdGUpIHtcbiAgICAgICR1bndhdGNoU3RhdGUoKTtcbiAgICB9XG4gICAgaWYgKCRmaWVsZFN0YXR1cy52YWx1ZSkge1xuICAgICAgJGZpZWxkU3RhdHVzLnZhbHVlLiR1bndhdGNoKCk7XG4gICAgfVxuICAgIGlmICgkZWFjaFN0YXR1cy52YWx1ZSkge1xuICAgICAgJGVhY2hTdGF0dXMudmFsdWUuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoJyRkaXJ0eScgaW4gZWxlbWVudCkge1xuICAgICAgICAgIGVsZW1lbnQuJHVud2F0Y2goKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHNjb3BlLnN0b3AoKTtcbiAgICBzY29wZSA9IGVmZmVjdFNjb3BlKCk7XG4gICAgaW1tZWRpYXRlU2NvcGUuc3RvcCgpO1xuICAgIGltbWVkaWF0ZVNjb3BlID0gZWZmZWN0U2NvcGUodHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiAkdG91Y2goKTogdm9pZCB7XG4gICAgJGZpZWxkU3RhdHVzLnZhbHVlLiR0b3VjaCgpO1xuICAgICRlYWNoU3RhdHVzLnZhbHVlLmZvckVhY2goKCRlYWNoKSA9PiB7XG4gICAgICAkZWFjaC4kdG91Y2goKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uICRyZXNldCgpOiB2b2lkIHtcbiAgICAkZmllbGRTdGF0dXMudmFsdWUuJHJlc2V0KCk7XG4gICAgJGVhY2hTdGF0dXMudmFsdWUuZm9yRWFjaCgoJGVhY2gpID0+IHtcbiAgICAgICRlYWNoLiRyZXNldCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gJHZhbGlkYXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAkZmllbGRTdGF0dXMudmFsdWUuJHZhbGlkYXRlKCksXG4gICAgICAgIC4uLiRlYWNoU3RhdHVzLnZhbHVlLm1hcCgocnVsZSkgPT4ge1xuICAgICAgICAgIHJldHVybiBydWxlLiR2YWxpZGF0ZSgpO1xuICAgICAgICB9KSxcbiAgICAgIF0pO1xuICAgICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHZhbHVlKSA9PiAhIXZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gJGNsZWFyRXh0ZXJuYWxFcnJvcnMoKSB7XG4gICAgLy8gVE9ETyBjbGVhciBleHRlcm5hbCBlcnJvcnNcbiAgfVxuXG4gIHJldHVybiByZWFjdGl2ZSh7XG4gICAgJGZpZWxkOiAkZmllbGRTdGF0dXMsXG4gICAgLi4uc2NvcGVTdGF0ZSxcbiAgICAkZWFjaDogJGVhY2hTdGF0dXMsXG4gICAgJHZhbHVlOiBzdGF0ZSxcbiAgICAkdmFsaWRhdGUsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgICR0b3VjaCxcbiAgICAkcmVzZXQsXG4gICAgJGNsZWFyRXh0ZXJuYWxFcnJvcnMsXG4gIH0pIHNhdGlzZmllcyAkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25TdGF0dXM7XG59XG4iLCJpbXBvcnQgdHlwZSB7IFJlcXVpcmVkRGVlcCB9IGZyb20gJ3R5cGUtZmVzdCc7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkUmVmLCBFZmZlY3RTY29wZSwgUmVmLCBXYXRjaFN0b3BIYW5kbGUgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdFNjb3BlLCByZWFjdGl2ZSwgcmVmLCB0b1JlZiwgdHJpZ2dlclJlZiwgdW5yZWYsIHdhdGNoIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHtcbiAgRGVlcE1heWJlUmVmLFxuICBDdXN0b21SdWxlc0RlY2xhcmF0aW9uVHJlZSxcbiAgJEludGVybmFsRXh0ZXJuYWxSZWdsZUVycm9ycyxcbiAgJEludGVybmFsRm9ybVByb3BlcnR5VHlwZXMsXG4gICRJbnRlcm5hbFJlZ2xlUGFydGlhbFZhbGlkYXRpb25UcmVlLFxuICAkSW50ZXJuYWxSZWdsZVN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlLFxuICBNYXliZUdldHRlcixcbiAgUmVnbGVCZWhhdmlvdXJPcHRpb25zLFxuICBSZWdsZUV4dGVybmFsRXJyb3JUcmVlLFxuICBSZWdsZVZhbGlkYXRpb25Hcm91cEVudHJ5LFxuICBSZXNvbHZlZFJlZ2xlQmVoYXZpb3VyT3B0aW9ucyxcbiAgJEludGVybmFsUmVnbGVFcnJvcnMsXG59IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IG1lcmdlQXJyYXlHcm91cFByb3BlcnRpZXMsIG1lcmdlQm9vbGVhbkdyb3VwUHJvcGVydGllcyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzUmVmT2JqZWN0LCB1bndyYXBHZXR0ZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFJlZ2xlU3RvcmFnZSB9IGZyb20gJy4uLy4uL3VzZVN0b3JhZ2UnO1xuaW1wb3J0IHtcbiAgaXNDb2xsZWN0aW9uUnVsZXNEZWYsXG4gIGlzTmVzdGVkUnVsZXNEZWYsXG4gIGlzU3RhdGVBcnJheSxcbiAgaXNWYWxpZGF0b3JSdWxlc0RlZixcbn0gZnJvbSAnLi4vZ3VhcmRzJztcbmltcG9ydCB7IGNyZWF0ZVJlYWN0aXZlQ29sbGVjdGlvblN0YXR1cyB9IGZyb20gJy4vY3JlYXRlUmVhY3RpdmVDb2xsZWN0aW9uU3RhdHVzJztcbmltcG9ydCB7IGNyZWF0ZVJlYWN0aXZlRmllbGRTdGF0dXMgfSBmcm9tICcuL2NyZWF0ZVJlYWN0aXZlRmllbGRTdGF0dXMnO1xuaW1wb3J0IHsgZXh0cmFjdE5lc3RlZEVycm9ycyB9IGZyb20gJy4uL3VzZUVycm9ycyc7XG5cbmludGVyZmFjZSBDcmVhdGVSZWFjdGl2ZU5lc3RlZFN0YXR1cyB7XG4gIHJvb3RSdWxlcz86IFJlZjwkSW50ZXJuYWxSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZT47XG4gIHNjb3BlUnVsZXM6IFJlZjwkSW50ZXJuYWxSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZT47XG4gIHN0YXRlOiBSZWY8UmVjb3JkPHN0cmluZywgYW55Pj47XG4gIGN1c3RvbU1lc3NhZ2VzPzogQ3VzdG9tUnVsZXNEZWNsYXJhdGlvblRyZWU7XG4gIHBhdGg/OiBzdHJpbmc7XG4gIGluZGV4PzogbnVtYmVyO1xuICBzdG9yYWdlOiBSZWdsZVN0b3JhZ2U7XG4gIG9wdGlvbnM6IFJlc29sdmVkUmVnbGVCZWhhdmlvdXJPcHRpb25zO1xuICBleHRlcm5hbEVycm9yczogUmVhZG9ubHk8UmVmPFJlZ2xlRXh0ZXJuYWxFcnJvclRyZWUgfCB1bmRlZmluZWQ+PjtcbiAgdmFsaWRhdGlvbkdyb3Vwcz86XG4gICAgfCAoKHJ1bGVzOiB7XG4gICAgICAgIFt4OiBzdHJpbmddOiAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGU7XG4gICAgICB9KSA9PiBSZWNvcmQ8c3RyaW5nLCBSZWdsZVZhbGlkYXRpb25Hcm91cEVudHJ5W10+KVxuICAgIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVhY3RpdmVOZXN0ZWRTdGF0dXMoe1xuICBzY29wZVJ1bGVzLFxuICBzdGF0ZSxcbiAgY3VzdG9tTWVzc2FnZXMsXG4gIHBhdGggPSAnJyxcbiAgcm9vdFJ1bGVzLFxuICBzdG9yYWdlLFxuICBvcHRpb25zLFxuICBleHRlcm5hbEVycm9ycyxcbiAgdmFsaWRhdGlvbkdyb3Vwcyxcbn06IENyZWF0ZVJlYWN0aXZlTmVzdGVkU3RhdHVzKTogJEludGVybmFsUmVnbGVTdGF0dXMge1xuICB0eXBlIFNjb3BlU3RhdGUgPSB7XG4gICAgJGRpcnR5OiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgICAkYW55RGlydHk6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAgICRpbnZhbGlkOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgICAkdmFsaWQ6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAgICRlcnJvcjogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICAgJHBlbmRpbmc6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAgICRlcnJvcnM6IENvbXB1dGVkUmVmPFJlY29yZDxzdHJpbmcsICRJbnRlcm5hbFJlZ2xlRXJyb3JzPj47XG4gICAgJHNpbGVudEVycm9yczogQ29tcHV0ZWRSZWY8UmVjb3JkPHN0cmluZywgJEludGVybmFsUmVnbGVFcnJvcnM+PjtcbiAgfTtcbiAgbGV0IHNjb3BlOiBFZmZlY3RTY29wZTtcbiAgbGV0IHNjb3BlU3RhdGUhOiBTY29wZVN0YXRlO1xuICBsZXQgJHVud2F0Y2hGaWVsZHM6IFdhdGNoU3RvcEhhbmRsZTtcbiAgbGV0ICR1bndhdGNoU3RhdGU6IFdhdGNoU3RvcEhhbmRsZTtcbiAgbGV0ICR1bndhdGNoR3JvdXBzOiBXYXRjaFN0b3BIYW5kbGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlUmVhY3RpdmVGaWVsZHNTdGF0dXMod2F0Y2ggPSB0cnVlLCBmb3JjZUZyb21HZXR0ZXIgPSBmYWxzZSkge1xuICAgICRmaWVsZHMudmFsdWUgPSBudWxsITtcbiAgICB0cmlnZ2VyUmVmKCRmaWVsZHMpO1xuXG4gICAgY29uc3Qgc2NvcGVkUnVsZXNTdGF0dXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhzY29wZVJ1bGVzLnZhbHVlKVxuICAgICAgICAubWFwKChbc3RhdGVQcm9wS2V5LCBzdGF0ZVByb3BSdWxlc10pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGVQcm9wUnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlUmVmID0gdG9SZWYoc3RhdGUudmFsdWUsIHN0YXRlUHJvcEtleSk7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZVByb3BSdWxlc1JlZiA9IHRvUmVmKCgpID0+IHN0YXRlUHJvcFJ1bGVzKTtcbiAgICAgICAgICAgIGNvbnN0ICRleHRlcm5hbEVycm9ycyA9IHRvUmVmKCgpID0+IGV4dGVybmFsRXJyb3JzLnZhbHVlPy5bc3RhdGVQcm9wS2V5XSk7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBzdGF0ZVByb3BLZXksXG4gICAgICAgICAgICAgIGNyZWF0ZVJlYWN0aXZlQ2hpbGRyZW5TdGF0dXMoe1xuICAgICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZVJlZixcbiAgICAgICAgICAgICAgICBydWxlc0RlZjogc3RhdGVQcm9wUnVsZXNSZWYsXG4gICAgICAgICAgICAgICAgY3VzdG9tTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgcGF0aDogcGF0aCA/IGAke3BhdGh9LiR7c3RhdGVQcm9wS2V5fWAgOiBzdGF0ZVByb3BLZXksXG4gICAgICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgIGV4dGVybmFsRXJyb3JzOiAkZXh0ZXJuYWxFcnJvcnMsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChydWxlKTogcnVsZSBpcyBbc3RyaW5nLCAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGVdID0+ICEhcnVsZS5sZW5ndGggJiYgcnVsZVsxXSAhPSBudWxsXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgZXh0ZXJuYWxSdWxlc1N0YXR1cyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHVucmVmKGV4dGVybmFsRXJyb3JzKSA/PyB7fSlcbiAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICEoa2V5IGluIHNjb3BlUnVsZXMudmFsdWUpKVxuICAgICAgICAubWFwKChba2V5LCBlcnJvcnNdKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVQcm9wUnVsZXNSZWYgPSB0b1JlZigoKSA9PiAoe30pKTtcbiAgICAgICAgICAgIGNvbnN0ICRleHRlcm5hbEVycm9ycyA9IHRvUmVmKCgpID0+IGVycm9ycyk7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIGNyZWF0ZVJlYWN0aXZlQ2hpbGRyZW5TdGF0dXMoe1xuICAgICAgICAgICAgICAgIHN0YXRlOiByZWYodW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBydWxlc0RlZjogc3RhdGVQcm9wUnVsZXNSZWYsXG4gICAgICAgICAgICAgICAgY3VzdG9tTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgcGF0aDogcGF0aCA/IGAke3BhdGh9LiR7a2V5fWAgOiBrZXksXG4gICAgICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgIGV4dGVybmFsRXJyb3JzOiAkZXh0ZXJuYWxFcnJvcnMsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBncm91cHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh2YWxpZGF0aW9uR3JvdXBzPy4oc2NvcGVkUnVsZXNTdGF0dXMpID8/IHt9KS5tYXAoKFtrZXksIGVudHJpZXNdKSA9PiB7XG4gICAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLk9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgICAoWyckaW52YWxpZCcsICckZXJyb3InLCAnJHBlbmRpbmcnLCAnJGRpcnR5JywgJyR2YWxpZCddIGFzIGNvbnN0KS5tYXAoXG4gICAgICAgICAgICAgICAgICAocHJvcGVydHkpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIG1lcmdlQm9vbGVhbkdyb3VwUHJvcGVydGllcyhcbiAgICAgICAgICAgICAgICAgICAgICB0b1JlZigoKSA9PiBlbnRyaWVzKSxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgLi4uT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgICAgICAgIChbJyRlcnJvcnMnLCAnJHNpbGVudEVycm9ycyddIGFzIGNvbnN0KS5tYXAoKHByb3BlcnR5KSA9PiBbXG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgIG1lcmdlQXJyYXlHcm91cFByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgICAgIHRvUmVmKCgpID0+IGVudHJpZXMpLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgICRmaWVsZHMudmFsdWUgPSB7IC4uLnNjb3BlZFJ1bGVzU3RhdHVzLCAuLi5leHRlcm5hbFJ1bGVzU3RhdHVzLCAuLi5ncm91cHMgfTtcbiAgICBpZiAod2F0Y2gpIHtcbiAgICAgICR3YXRjaCgpO1xuICAgIH1cbiAgfVxuXG4gIGxldCAkZmllbGRzOiBSZWY8UmVjb3JkPHN0cmluZywgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlPj4gPSBzdG9yYWdlLmdldEZpZWxkc0VudHJ5KHBhdGgpO1xuICBjcmVhdGVSZWFjdGl2ZUZpZWxkc1N0YXR1cygpO1xuXG4gIGZ1bmN0aW9uICRyZXNldCgpOiB2b2lkIHtcbiAgICBjcmVhdGVSZWFjdGl2ZUZpZWxkc1N0YXR1cyhmYWxzZSk7XG4gICAgT2JqZWN0LmVudHJpZXMoJGZpZWxkcy52YWx1ZSkuZm9yRWFjaCgoW18sIHN0YXR1c09yRmllbGRdKSA9PiB7XG4gICAgICBzdGF0dXNPckZpZWxkLiRyZXNldCgpO1xuICAgIH0pO1xuICAgICR3YXRjaCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gJHRvdWNoKCk6IHZvaWQge1xuICAgIE9iamVjdC5lbnRyaWVzKCRmaWVsZHMudmFsdWUpLmZvckVhY2goKFtfLCBzdGF0dXNPckZpZWxkXSkgPT4ge1xuICAgICAgc3RhdHVzT3JGaWVsZC4kdG91Y2goKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uICR2YWxpZGF0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoJGZpZWxkcy52YWx1ZSkubWFwKChbXywgc3RhdHVzT3JGaWVsZF0pID0+IHtcbiAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kdmFsaWRhdGUoKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzdWx0cy5ldmVyeSgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gJHdhdGNoKCkge1xuICAgIGlmIChyb290UnVsZXMpIHtcbiAgICAgICR1bndhdGNoRmllbGRzID0gd2F0Y2goXG4gICAgICAgIHJvb3RSdWxlcyxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICR1bndhdGNoKCk7XG4gICAgICAgICAgY3JlYXRlUmVhY3RpdmVGaWVsZHNTdGF0dXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBkZWVwOiB0cnVlLCBmbHVzaDogJ3Bvc3QnIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2NvcGUgPSBlZmZlY3RTY29wZSgpO1xuICAgIHNjb3BlU3RhdGUgPSBzY29wZS5ydW4oKCkgPT4ge1xuICAgICAgY29uc3QgJGRpcnR5ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICEhT2JqZWN0LmVudHJpZXMoJGZpZWxkcy52YWx1ZSkubGVuZ3RoICYmXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoJGZpZWxkcy52YWx1ZSkuZXZlcnkoKFtrZXksIHN0YXR1c09yRmllbGRdKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kZGlydHk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkYW55RGlydHkgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcygkZmllbGRzLnZhbHVlKS5zb21lKChba2V5LCBzdGF0dXNPckZpZWxkXSkgPT4ge1xuICAgICAgICAgIHJldHVybiBzdGF0dXNPckZpZWxkLiRkaXJ0eTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJGludmFsaWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcygkZmllbGRzLnZhbHVlKS5zb21lKChba2V5LCBzdGF0dXNPckZpZWxkXSkgPT4ge1xuICAgICAgICAgIHJldHVybiBzdGF0dXNPckZpZWxkLiRpbnZhbGlkO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkdmFsaWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcygkZmllbGRzLnZhbHVlKS5ldmVyeSgoW2tleSwgc3RhdHVzT3JGaWVsZF0pID0+IHtcbiAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kdmFsaWQ7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRlcnJvciA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKCRmaWVsZHMudmFsdWUpLnNvbWUoKFtrZXksIHN0YXR1c09yRmllbGRdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHN0YXR1c09yRmllbGQuJGVycm9yO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkcGVuZGluZyA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKCRmaWVsZHMudmFsdWUpLnNvbWUoKFtrZXksIHN0YXR1c09yRmllbGRdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHN0YXR1c09yRmllbGQuJHBlbmRpbmc7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRlcnJvcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBleHRyYWN0TmVzdGVkRXJyb3JzKCRmaWVsZHMudmFsdWUpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCAkc2lsZW50RXJyb3JzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZXh0cmFjdE5lc3RlZEVycm9ycygkZmllbGRzLnZhbHVlLCB0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAkZGlydHksXG4gICAgICAgICRhbnlEaXJ0eSxcbiAgICAgICAgJGludmFsaWQsXG4gICAgICAgICR2YWxpZCxcbiAgICAgICAgJGVycm9yLFxuICAgICAgICAkcGVuZGluZyxcbiAgICAgICAgJGVycm9ycyxcbiAgICAgICAgJHNpbGVudEVycm9ycyxcbiAgICAgIH0gc2F0aXNmaWVzIFNjb3BlU3RhdGU7XG4gICAgfSkhO1xuICB9XG5cbiAgZnVuY3Rpb24gJHVud2F0Y2goKSB7XG4gICAgaWYgKCRmaWVsZHMudmFsdWUpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKCRmaWVsZHMudmFsdWUpLmZvckVhY2goKFtfLCBmaWVsZF0pID0+IHtcbiAgICAgICAgZmllbGQuJHVud2F0Y2goKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgICR1bndhdGNoRmllbGRzPy4oKTtcbiAgICAkdW53YXRjaFN0YXRlPy4oKTtcbiAgICAkdW53YXRjaEdyb3Vwcz8uKCk7XG4gICAgc2NvcGUuc3RvcCgpO1xuICAgIHNjb3BlID0gZWZmZWN0U2NvcGUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uICRjbGVhckV4dGVybmFsRXJyb3JzKCkge1xuICAgIE9iamVjdC5lbnRyaWVzKCRmaWVsZHMudmFsdWUpLmZvckVhY2goKFtfLCBmaWVsZF0pID0+IHtcbiAgICAgIGZpZWxkLiRjbGVhckV4dGVybmFsRXJyb3JzKCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVhY3RpdmUoe1xuICAgIC4uLnNjb3BlU3RhdGUsXG4gICAgJGZpZWxkcyxcbiAgICAkdmFsdWU6IHN0YXRlLFxuICAgICRyZXNldCxcbiAgICAkdG91Y2gsXG4gICAgJHZhbGlkYXRlLFxuICAgICR1bndhdGNoLFxuICAgICR3YXRjaCxcbiAgICAkY2xlYXJFeHRlcm5hbEVycm9ycyxcbiAgfSkgc2F0aXNmaWVzICRJbnRlcm5hbFJlZ2xlU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgQ3JlYXRlUmVhY3RpdmVDaGlsZHJlblN0YXR1cyB7XG4gIHN0YXRlOiBSZWY8dW5rbm93bj47XG4gIHJ1bGVzRGVmOiBSZWY8JEludGVybmFsRm9ybVByb3BlcnR5VHlwZXMsIGFueT47XG4gIGN1c3RvbU1lc3NhZ2VzPzogQ3VzdG9tUnVsZXNEZWNsYXJhdGlvblRyZWU7XG4gIHBhdGg6IHN0cmluZztcbiAgaW5kZXg/OiBudW1iZXI7XG4gIHN0b3JhZ2U6IFJlZ2xlU3RvcmFnZTtcbiAgb3B0aW9uczogRGVlcE1heWJlUmVmPFJlcXVpcmVkRGVlcDxSZWdsZUJlaGF2aW91ck9wdGlvbnM+PjtcbiAgZXh0ZXJuYWxFcnJvcnM6IFJlYWRvbmx5PFJlZjwkSW50ZXJuYWxFeHRlcm5hbFJlZ2xlRXJyb3JzIHwgdW5kZWZpbmVkPj47XG4gIG9uVW53YXRjaD86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWFjdGl2ZUNoaWxkcmVuU3RhdHVzKHtcbiAgc3RhdGUsXG4gIHJ1bGVzRGVmLFxuICBjdXN0b21NZXNzYWdlcyxcbiAgcGF0aCxcbiAgc3RvcmFnZSxcbiAgb3B0aW9ucyxcbiAgZXh0ZXJuYWxFcnJvcnMsXG4gIGluZGV4LFxuICBvblVud2F0Y2gsXG59OiBDcmVhdGVSZWFjdGl2ZUNoaWxkcmVuU3RhdHVzKTogJEludGVybmFsUmVnbGVTdGF0dXNUeXBlIHwgbnVsbCB7XG4gIGlmIChpc0NvbGxlY3Rpb25SdWxlc0RlZihydWxlc0RlZikpIHtcbiAgICByZXR1cm4gY3JlYXRlUmVhY3RpdmVDb2xsZWN0aW9uU3RhdHVzKHtcbiAgICAgIHN0YXRlOiBzdGF0ZSBhcyBSZWY8dW5rbm93biAmIHsgJGlkPzogc3RyaW5nIH1bXT4sXG4gICAgICBydWxlc0RlZixcbiAgICAgIGN1c3RvbU1lc3NhZ2VzLFxuICAgICAgcGF0aCxcbiAgICAgIHN0b3JhZ2UsXG4gICAgICBvcHRpb25zLFxuICAgICAgaW5kZXgsXG4gICAgICBleHRlcm5hbEVycm9ycyxcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc05lc3RlZFJ1bGVzRGVmKHN0YXRlLCBydWxlc0RlZikgJiYgaXNSZWZPYmplY3Qoc3RhdGUpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJlYWN0aXZlTmVzdGVkU3RhdHVzKHtcbiAgICAgIHNjb3BlUnVsZXM6IHJ1bGVzRGVmLFxuICAgICAgc3RhdGUsXG4gICAgICBjdXN0b21NZXNzYWdlcyxcbiAgICAgIHBhdGgsXG4gICAgICBzdG9yYWdlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGluZGV4LFxuICAgICAgZXh0ZXJuYWxFcnJvcnM6IGV4dGVybmFsRXJyb3JzIGFzIFJlYWRvbmx5PFJlZjxSZWdsZUV4dGVybmFsRXJyb3JUcmVlIHwgdW5kZWZpbmVkPj4sXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNWYWxpZGF0b3JSdWxlc0RlZihydWxlc0RlZikpIHtcbiAgICByZXR1cm4gY3JlYXRlUmVhY3RpdmVGaWVsZFN0YXR1cyh7XG4gICAgICBzdGF0ZSxcbiAgICAgIHJ1bGVzRGVmLFxuICAgICAgY3VzdG9tTWVzc2FnZXMsXG4gICAgICBwYXRoLFxuICAgICAgc3RvcmFnZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBpbmRleCxcbiAgICAgIGV4dGVybmFsRXJyb3JzOiBleHRlcm5hbEVycm9ycyBhcyBSZWY8c3RyaW5nW10gfCB1bmRlZmluZWQ+LFxuICAgICAgb25VbndhdGNoLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJpbXBvcnQgdHlwZSB7IENvbXB1dGVkUmVmLCBSZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgY29tcHV0ZWQsIHJlYWN0aXZlLCB1bnJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7XG4gICRJbnRlcm5hbFJlZ2xlUGFydGlhbFZhbGlkYXRpb25UcmVlLFxuICBDdXN0b21SdWxlc0RlY2xhcmF0aW9uVHJlZSxcbiAgUmVzb2x2ZWRSZWdsZUJlaGF2aW91ck9wdGlvbnMsXG59IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IHVzZVN0b3JhZ2UgfSBmcm9tICcuLi8uLi91c2VTdG9yYWdlJztcbmltcG9ydCB7IHVzZUVycm9ycyB9IGZyb20gJy4uL3VzZUVycm9ycyc7XG5pbXBvcnQgeyBjcmVhdGVSZWFjdGl2ZU5lc3RlZFN0YXR1cyB9IGZyb20gJy4vY3JlYXRlUmVhY3RpdmVOZXN0ZWRTdGF0dXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlU3RhdGVQcm9wZXJ0aWVzKFxuICBzY29wZVJ1bGVzOiBDb21wdXRlZFJlZjwkSW50ZXJuYWxSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZT4sXG4gIHN0YXRlOiBSZWY8UmVjb3JkPHN0cmluZywgYW55Pj4sXG4gIG9wdGlvbnM6IFJlc29sdmVkUmVnbGVCZWhhdmlvdXJPcHRpb25zLFxuICBjdXN0b21SdWxlcz86ICgpID0+IEN1c3RvbVJ1bGVzRGVjbGFyYXRpb25UcmVlXG4pIHtcbiAgY29uc3Qgc3RvcmFnZSA9IHVzZVN0b3JhZ2UoKTtcblxuICBjb25zdCBleHRlcm5hbEVycm9ycyA9IGNvbXB1dGVkKCgpID0+IHVucmVmKG9wdGlvbnMuZXh0ZXJuYWxFcnJvcnMpKTtcblxuICBjb25zdCByZWdsZSA9IHJlYWN0aXZlKFxuICAgIGNyZWF0ZVJlYWN0aXZlTmVzdGVkU3RhdHVzKHtcbiAgICAgIHJvb3RSdWxlczogc2NvcGVSdWxlcyxcbiAgICAgIHNjb3BlUnVsZXMsXG4gICAgICBzdGF0ZSxcbiAgICAgIGN1c3RvbU1lc3NhZ2VzOiBjdXN0b21SdWxlcz8uKCksXG4gICAgICBzdG9yYWdlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGV4dGVybmFsRXJyb3JzLFxuICAgICAgdmFsaWRhdGlvbkdyb3Vwczogb3B0aW9ucy52YWxpZGF0aW9uR3JvdXBzLFxuICAgIH0pXG4gICk7XG5cbiAgY29uc3QgZXJyb3JzID0gdXNlRXJyb3JzKHJlZ2xlKTtcblxuICByZXR1cm4geyByZWdsZSwgZXJyb3JzIH07XG59XG4iLCJpbXBvcnQgdHlwZSB7IFJlcXVpcmVkRGVlcCB9IGZyb20gJ3R5cGUtZmVzdCc7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkUmVmLCBNYXliZVJlZiwgUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IGNvbXB1dGVkLCBpc1JlZiwgcmVmLCB0b1JhdyB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7XG4gICRJbnRlcm5hbFJlZ2xlUGFydGlhbFZhbGlkYXRpb25UcmVlLFxuICBBbGxSdWxlc0RlY2xhcmF0aW9ucyxcbiAgRGVlcFJlYWN0aXZlU3RhdGUsXG4gIERlZXBTYWZlRm9ybVN0YXRlLFxuICBMb2NhbFJlZ2xlQmVoYXZpb3VyT3B0aW9ucyxcbiAgUmVnbGUsXG4gIFJlZ2xlQmVoYXZpb3VyT3B0aW9ucyxcbiAgUmVnbGVFcnJvclRyZWUsXG4gIFJlZ2xlRXh0ZXJuYWxFcnJvclRyZWUsXG4gIFJlZ2xlUGFydGlhbFZhbGlkYXRpb25UcmVlLFxuICBSZWdsZVN0YXR1cyxcbiAgUmVnbGVWYWxpZGF0aW9uR3JvdXBFbnRyeSxcbiAgUmVzb2x2ZWRSZWdsZUJlaGF2aW91ck9wdGlvbnMsXG59IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgRGVlcE1heWJlUmVmIH0gZnJvbSAnLi4vLi4vdHlwZXMvdXRpbHMnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IHVzZVN0YXRlUHJvcGVydGllcyB9IGZyb20gJy4vdXNlU3RhdGVQcm9wZXJ0aWVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVzZVJlZ2xlQ29tcG9zYWJsZTxUQ3VzdG9tUnVsZXMgZXh0ZW5kcyBQYXJ0aWFsPEFsbFJ1bGVzRGVjbGFyYXRpb25zPj4oXG4gIGN1c3RvbVJ1bGVzPzogKCkgPT4gVEN1c3RvbVJ1bGVzLFxuICBvcHRpb25zPzogUmVnbGVCZWhhdmlvdXJPcHRpb25zXG4pIHtcbiAgY29uc3QgZ2xvYmFsT3B0aW9uczogUmVxdWlyZWREZWVwPFJlZ2xlQmVoYXZpb3VyT3B0aW9ucz4gPSB7XG4gICAgYXV0b0RpcnR5OiBvcHRpb25zPy5hdXRvRGlydHkgPz8gdHJ1ZSxcbiAgICBsYXp5OiBvcHRpb25zPy5sYXp5ID8/IGZhbHNlLFxuICAgIHJld2FyZEVhcmx5OiBvcHRpb25zPy5yZXdhcmRFYXJseSA/PyBmYWxzZSxcbiAgfTtcblxuICBmdW5jdGlvbiB1c2VSZWdsZTxcbiAgICBUU3RhdGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIFRSdWxlcyBleHRlbmRzIFJlZ2xlUGFydGlhbFZhbGlkYXRpb25UcmVlPFRTdGF0ZSwgUGFydGlhbDxBbGxSdWxlc0RlY2xhcmF0aW9ucz4gJiBUQ3VzdG9tUnVsZXM+LFxuICAgIFRFeHRlcm5hbCBleHRlbmRzIFJlZ2xlRXh0ZXJuYWxFcnJvclRyZWU8VFN0YXRlPixcbiAgICBUVmFsaWRhdGlvbkdyb3VwcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFJlZ2xlVmFsaWRhdGlvbkdyb3VwRW50cnlbXT4sXG4gICAgVFZhbGlkID0ga2V5b2YgVFJ1bGVzIGV4dGVuZHMga2V5b2YgUmVnbGVQYXJ0aWFsVmFsaWRhdGlvblRyZWU8XG4gICAgICBUU3RhdGUsXG4gICAgICBQYXJ0aWFsPEFsbFJ1bGVzRGVjbGFyYXRpb25zPiAmIFRDdXN0b21SdWxlc1xuICAgID5cbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZSxcbiAgPihcbiAgICBzdGF0ZTogTWF5YmVSZWY8VFN0YXRlPiB8IERlZXBSZWFjdGl2ZVN0YXRlPFRTdGF0ZT4sXG4gICAgcnVsZXNGYWN0b3J5OiBUVmFsaWQgZXh0ZW5kcyB0cnVlID8gVFJ1bGVzIHwgKCgpID0+IFRSdWxlcykgfCBDb21wdXRlZFJlZjxUUnVsZXM+IDogbmV2ZXIsXG4gICAgb3B0aW9ucz86IFBhcnRpYWw8RGVlcE1heWJlUmVmPFJlZ2xlQmVoYXZpb3VyT3B0aW9ucz4+ICZcbiAgICAgIExvY2FsUmVnbGVCZWhhdmlvdXJPcHRpb25zPFRTdGF0ZSwgVFJ1bGVzLCBURXh0ZXJuYWwsIFRWYWxpZGF0aW9uR3JvdXBzPlxuICApOiBSZWdsZTxUU3RhdGUsIFRSdWxlcywgVEV4dGVybmFsLCBUVmFsaWRhdGlvbkdyb3Vwcz4ge1xuICAgIGNvbnN0IHNjb3BlUnVsZXMgPSBpc1JlZihydWxlc0ZhY3RvcnkpXG4gICAgICA/IHJ1bGVzRmFjdG9yeVxuICAgICAgOiBjb21wdXRlZChcbiAgICAgICAgICAodHlwZW9mIChydWxlc0ZhY3RvcnkgYXMgVFJ1bGVzIHwgKCgpID0+IFRSdWxlcykpID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHJ1bGVzRmFjdG9yeVxuICAgICAgICAgICAgOiAoKSA9PiBydWxlc0ZhY3RvcnkpIGFzIGFueVxuICAgICAgICApO1xuXG4gICAgY29uc3QgcmVzb2x2ZWRPcHRpb25zOiBSZXNvbHZlZFJlZ2xlQmVoYXZpb3VyT3B0aW9ucyA9IHtcbiAgICAgIC4uLmdsb2JhbE9wdGlvbnMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0gYXMgYW55O1xuXG4gICAgY29uc3QgcHJvY2Vzc2VkU3RhdGUgPSBpc1JlZihzdGF0ZSkgPyBzdGF0ZSA6IChyZWYoc3RhdGUpIGFzIFJlZjxUU3RhdGU+KTtcblxuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IGNsb25lRGVlcCh0b1Jhdyhwcm9jZXNzZWRTdGF0ZS52YWx1ZSkpO1xuXG4gICAgY29uc3QgeyByZWdsZSwgZXJyb3JzIH0gPSB1c2VTdGF0ZVByb3BlcnRpZXMoXG4gICAgICBzY29wZVJ1bGVzIGFzIENvbXB1dGVkUmVmPCRJbnRlcm5hbFJlZ2xlUGFydGlhbFZhbGlkYXRpb25UcmVlPixcbiAgICAgIHByb2Nlc3NlZFN0YXRlLFxuICAgICAgcmVzb2x2ZWRPcHRpb25zLFxuICAgICAgY3VzdG9tUnVsZXNcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gcmVzZXRBbGwoKSB7XG4gICAgICByZWdsZS4kdW53YXRjaCgpO1xuICAgICAgcmVzZXRWYWx1ZXNSZWN1cnNpdmVseShzdGF0ZSwgaW5pdGlhbFN0YXRlKTtcbiAgICAgIHJlZ2xlLiRyZXNldCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2V0VmFsdWVzUmVjdXJzaXZlbHkoXG4gICAgICBjdXJyZW50OiBSZWY8UmVjb3JkPHN0cmluZywgTWF5YmVSZWY8YW55Pj4+IHwgUmVjb3JkPHN0cmluZywgTWF5YmVSZWY8YW55Pj4sXG4gICAgICBpbml0aWFsOiBSZWNvcmQ8c3RyaW5nLCBNYXliZVJlZjxhbnk+PlxuICAgICkge1xuICAgICAgT2JqZWN0LmVudHJpZXMoaW5pdGlhbCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGxldCBjdXJyZW50UmVmID0gaXNSZWY8UmVjb3JkPHN0cmluZywgTWF5YmVSZWY8YW55Pj4+KGN1cnJlbnQpID8gY3VycmVudC52YWx1ZSA6IGN1cnJlbnQ7XG4gICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBpc1JlZihjdXJyZW50UmVmW2tleV0pID8gY3VycmVudFJlZltrZXldLnZhbHVlIDogY3VycmVudFJlZltrZXldO1xuICAgICAgICBsZXQgaW5pdGlhbFJlZiA9IGlzUmVmKGluaXRpYWxba2V5XSkgPyAoaW5pdGlhbFtrZXldIGFzIGFueSkuX3ZhbHVlIDogaW5pdGlhbFtrZXldO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbml0aWFsUmVmKSAmJiBBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgICBjdXJyZW50UmVmW2tleV0gPSBbXTtcbiAgICAgICAgICBpbml0aWFsUmVmLmZvckVhY2goKHZhbCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnRSZWZba2V5XVtpbmRleF0gPSB7fTtcbiAgICAgICAgICAgIHJlc2V0VmFsdWVzUmVjdXJzaXZlbHkoY3VycmVudFJlZltrZXldW2luZGV4XSwgaW5pdGlhbFJlZltpbmRleF0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGluaXRpYWxSZWYpKSB7XG4gICAgICAgICAgcmVzZXRWYWx1ZXNSZWN1cnNpdmVseShjdXJyZW50VmFsdWUsIGluaXRpYWxSZWYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpc1JlZihjdXJyZW50UmVmW2tleV0pKSB7XG4gICAgICAgICAgICBjdXJyZW50UmVmW2tleV0udmFsdWUgPSBpbml0aWFsUmVmO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50UmVmW2tleV0gPSBpbml0aWFsUmVmO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZHkgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICByZXR1cm4gIShyZWdsZS4kaW52YWxpZCB8fCByZWdsZS4kcGVuZGluZyk7XG4gICAgfSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiB2YWxpZGF0ZVN0YXRlKCk6IFByb21pc2U8ZmFsc2UgfCBEZWVwU2FmZUZvcm1TdGF0ZTxUU3RhdGUsIFRSdWxlcz4+IHtcbiAgICAgIHJlZ2xlLiR0b3VjaCgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVnbGUuJHZhbGlkYXRlKCk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzZWRTdGF0ZS52YWx1ZSBhcyBhbnk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZ2xlOiByZWdsZSBhcyB1bmtub3duIGFzIFJlZ2xlU3RhdHVzPFRTdGF0ZSwgVFJ1bGVzLCBUVmFsaWRhdGlvbkdyb3Vwcz4sXG4gICAgICBlcnJvcnM6IGVycm9ycyBhcyBSZWdsZUVycm9yVHJlZTxUUnVsZXM+LFxuICAgICAgcmVzZXRBbGwsXG4gICAgICB2YWxpZGF0ZVN0YXRlLFxuICAgICAgcmVhZHksXG4gICAgICBzdGF0ZTogcHJvY2Vzc2VkU3RhdGUsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1c2VSZWdsZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVJlZ2xlID0gY3JlYXRlVXNlUmVnbGVDb21wb3NhYmxlKCk7XG4iLCJpbXBvcnQgdHlwZSB7IEFsbFJ1bGVzRGVjbGFyYXRpb25zLCBSZWdsZUJlaGF2aW91ck9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVVc2VSZWdsZUNvbXBvc2FibGUgfSBmcm9tICcuL3VzZVJlZ2xlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVJlZ2xlQ29uZmlnPFRDdXN0b21SdWxlcyBleHRlbmRzIFBhcnRpYWw8QWxsUnVsZXNEZWNsYXJhdGlvbnM+Pih7XG4gIHJ1bGVzLFxuICBtb2RpZmllcnMsXG59OiB7XG4gIHJ1bGVzPzogKCkgPT4gVEN1c3RvbVJ1bGVzO1xuICBtb2RpZmllcnM/OiBSZWdsZUJlaGF2aW91ck9wdGlvbnM7XG59KSB7XG4gIGNvbnN0IHVzZVJlZ2xlID0gY3JlYXRlVXNlUmVnbGVDb21wb3NhYmxlPFRDdXN0b21SdWxlcz4ocnVsZXMsIG1vZGlmaWVycyk7XG5cbiAgcmV0dXJuIHVzZVJlZ2xlO1xufVxuIl19
1657
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL2NyZWF0ZVJ1bGUvdW53cmFwUnVsZVBhcmFtZXRlcnMudHMiLCIuLi9zcmMvY29yZS9jcmVhdGVSdWxlL2RlZmluZVJ1bGVQcm9jZXNzb3JzLnRzIiwiLi4vc3JjL2NvcmUvY3JlYXRlUnVsZS9jcmVhdGVSdWxlLnRzIiwiLi4vc3JjL3V0aWxzL29iamVjdC51dGlscy50cyIsIi4uL3NyYy91dGlscy9pc0VtcHR5LnRzIiwiLi4vc3JjL3V0aWxzL2RlYm91bmNlLnRzIiwiLi4vc3JjL3V0aWxzL3ZlcnNpb24tY29tcGFyZS50cyIsIi4uL3NyYy91dGlscy9yYW5kb21JZC50cyIsIi4uL3NyYy9jb3JlL3VzZVN0b3JhZ2UvdXNlU3RvcmFnZS50cyIsIi4uL3NyYy9jb3JlL3VzZVJlZ2xlL2d1YXJkcy9ydWxlRGVmLmd1YXJkcy50cyIsIi4uL3NyYy9jb3JlL3VzZVJlZ2xlL2d1YXJkcy9ydWxlLnN0YXR1cy5ndWFyZHMudHMiLCIuLi9zcmMvY29yZS91c2VSZWdsZS9ndWFyZHMvcnVsZS5lcnJvcnMuZ3VhcmRzLnRzIiwiLi4vc3JjL2NvcmUvdXNlUmVnbGUvdXNlRXJyb3JzLnRzIiwiLi4vc3JjL3R5cGVzL3J1bGVzL3J1bGUuaW50ZXJuYWwudHlwZXMudHMiLCIuLi9zcmMvdHlwZXMvdXRpbHMvZ3JvdXBzLnRzIiwiLi4vc3JjL2NvcmUvdXNlUmVnbGUvdXNlU3RhdGVQcm9wZXJ0aWVzL2NyZWF0ZVJlYWN0aXZlUnVsZVN0YXR1cy50cyIsIi4uL3NyYy9jb3JlL3VzZVJlZ2xlL3VzZVN0YXRlUHJvcGVydGllcy9jcmVhdGVSZWFjdGl2ZUZpZWxkU3RhdHVzLnRzIiwiLi4vc3JjL2NvcmUvdXNlUmVnbGUvdXNlU3RhdGVQcm9wZXJ0aWVzL2NyZWF0ZVJlYWN0aXZlQ29sbGVjdGlvblN0YXR1cy50cyIsIi4uL3NyYy9jb3JlL3VzZVJlZ2xlL3VzZVN0YXRlUHJvcGVydGllcy9jcmVhdGVSZWFjdGl2ZU5lc3RlZFN0YXR1cy50cyIsIi4uL3NyYy9jb3JlL3VzZVJlZ2xlL3VzZVN0YXRlUHJvcGVydGllcy91c2VTdGF0ZVByb3BlcnRpZXMudHMiLCIuLi9zcmMvY29yZS91c2VSZWdsZS91c2VSZWdsZS50cyIsIi4uL3NyYy9jb3JlL2RlZmluZVJlZ2xlQ29uZmlnLnRzIl0sIm5hbWVzIjpbInZhbGlkYXRvciIsIkludGVybmFsUnVsZVR5cGUiLCJjb21wdXRlZCIsIiR2YWxpZCIsImVmZmVjdFNjb3BlIiwicmVmIiwidG9SZWYiLCJ1bnJlZiIsIndhdGNoIiwicmVhY3RpdmUiLCJ1c2VSZWdsZSIsIm9wdGlvbnMiLCJpc1JlZiIsInRvUmF3Il0sIm1hcHBpbmdzIjoiOzs7QUFPTyxTQUFTLHFCQUE0QyxNQUE4QixFQUFBO0FBQ3hGLEVBQU8sT0FBQSxNQUFBLENBQU8sR0FBSSxDQUFBLENBQUMsS0FBVSxLQUFBO0FBQzNCLElBQUEsSUFBSSxpQkFBaUIsUUFBVSxFQUFBO0FBQzdCLE1BQUEsT0FBTyxLQUFNLEVBQUE7QUFBQTtBQUVmLElBQUEsT0FBTyxNQUFNLEtBQUssQ0FBQTtBQUFBLEdBQ25CLENBQUE7QUFDSDtBQU1PLFNBQVMscUJBQTRDLE1BQThCLEVBQUE7QUFDeEYsRUFBTyxPQUFBLE1BQUEsQ0FBTyxHQUFJLENBQUEsQ0FBQyxLQUFVLEtBQUE7QUFDM0IsSUFBQSxJQUFJLGlCQUFpQixRQUFVLEVBQUE7QUFDN0IsTUFBTyxPQUFBLEtBQUE7QUFBQSxLQUNULE1BQUEsSUFBVyxLQUFNLENBQUEsS0FBSyxDQUFHLEVBQUE7QUFDdkIsTUFBTyxPQUFBLEtBQUE7QUFBQTtBQUVULElBQU8sT0FBQSxLQUFBLENBQU0sTUFBTSxLQUFLLENBQUE7QUFBQSxHQUN6QixDQUFBO0FBQ0g7QUFLTyxTQUFTLDRCQUE0QixJQUF3QixFQUFBO0FBQ2xFLEVBQU0sTUFBQSxPQUFBLEdBQVUsS0FBSyxRQUFTLEVBQUE7QUFDOUIsRUFBTSxNQUFBLGVBQUEsR0FBa0IsT0FBUSxDQUFBLFFBQUEsQ0FBUyxJQUFJLENBQUE7QUFDN0MsRUFBQSxNQUFN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bEMsQ0FBQTtBQUVELElBQUEsZUFBZSxhQUFvRSxHQUFBO0FBQ2pGLE1BQUEsS0FBQSxDQUFNLE1BQU8sRUFBQTtBQUNiLE1BQU0sTUFBQSxNQUFBLEdBQVMsTUFBTSxLQUFBLENBQU0sU0FBVSxFQUFBO0FBQ3JDLE1BQUEsSUFBSSxNQUFRLEVBQUE7QUFDVixRQUFBLE9BQU8sY0FBZSxDQUFBLEtBQUE7QUFBQTtBQUV4QixNQUFPLE9BQUEsS0FBQTtBQUFBO0FBR1QsSUFBTyxPQUFBO0FBQUEsTUFDTCxLQUFBO0FBQUEsTUFDQSxFQUFJLEVBQUEsS0FBQTtBQUFBLE1BQ0osTUFBQTtBQUFBLE1BQ0EsUUFBQTtBQUFBLE1BQ0EsYUFBQTtBQUFBLE1BQ0EsS0FBQTtBQUFBLE1BQ0EsS0FBTyxFQUFBO0FBQUEsS0FDVDtBQUFBO0FBR0YsRUFBT1EsT0FBQUEsU0FBQUE7QUFDVDtBQUVPLElBQU0sV0FBVyx3QkFBeUI7OztBQ2pJMUMsU0FBUyxpQkFBc0UsQ0FBQTtBQUFBLEVBQ3BGLEtBQUE7QUFBQSxFQUNBO0FBQ0YsQ0FHRyxFQUFBO0FBQ0QsRUFBTUEsTUFBQUEsU0FBQUEsR0FBVyx3QkFBdUMsQ0FBQSxLQUFBLEVBQU8sU0FBUyxDQUFBO0FBRXhFLEVBQU9BLE9BQUFBLFNBQUFBO0FBQ1QiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1JlZiwgdG9SZWYsIHVucmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHsgUGFyYW1EZWNsIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG4vKipcbiAqIFJldHVybnMgYSBjbGVhbiBsaXN0IG9mIHBhcmFtZXRlcnNcbiAqIFJlbW92aW5nIFJlZiBhbmQgZXhlY3V0aW5nIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgdW53cmFwZWQgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcFJ1bGVQYXJhbWV0ZXJzPFRQYXJhbXMgZXh0ZW5kcyBhbnlbXT4ocGFyYW1zOiBQYXJhbURlY2xbXSk6IFRQYXJhbXMge1xuICByZXR1cm4gcGFyYW1zLm1hcCgocGFyYW0pID0+IHtcbiAgICBpZiAocGFyYW0gaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIHBhcmFtKCk7XG4gICAgfVxuICAgIHJldHVybiB1bnJlZihwYXJhbSk7XG4gIH0pIGFzIFRQYXJhbXM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNsZWFuIGxpc3Qgb2YgcGFyYW1ldGVyc1xuICogUmVtb3ZpbmcgUmVmIGFuZCBleGVjdXRpbmcgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSB1bndyYXBlZCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVhY3RpdmVQYXJhbXM8VFBhcmFtcyBleHRlbmRzIGFueVtdPihwYXJhbXM6IFBhcmFtRGVjbFtdKTogVFBhcmFtcyB7XG4gIHJldHVybiBwYXJhbXMubWFwKChwYXJhbSkgPT4ge1xuICAgIGlmIChwYXJhbSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gcGFyYW07XG4gICAgfSBlbHNlIGlmIChpc1JlZihwYXJhbSkpIHtcbiAgICAgIHJldHVybiBwYXJhbTtcbiAgICB9XG4gICAgcmV0dXJuIHRvUmVmKCgpID0+IHBhcmFtKTtcbiAgfSkgYXMgVFBhcmFtcztcbn1cblxuLyoqXG4gKiBEdWUgdG8gYGZ1bmN0aW9uLmxlbmd0aGAgbm90IHJldHVybmluZyBkZWZhdWx0IHBhcmFtZXRlcnMsIGl0IG5lZWQgdG8gcGFyc2UgdGhlIGZ1bmMudG9TdHJpbmcoKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzTGVuZ3RoKGZ1bmM6IEZ1bmN0aW9uKTogbnVtYmVyIHtcbiAgY29uc3QgZnVuY1N0ciA9IGZ1bmMudG9TdHJpbmcoKTtcbiAgY29uc3QgaXNBcnJvd0Z1bmN0aW9uID0gZnVuY1N0ci5pbmNsdWRlcygnPT4nKTtcbiAgY29uc3QgcGFyYW1zID0gKGlzQXJyb3dGdW5jdGlvbiA/IGZ1bmNTdHIuc3BsaXQoJz0+JylbMF0gOiBmdW5jU3RyKVxuICAgIC5zbGljZShmdW5jU3RyLmluZGV4T2YoJygnKSArIDEsIGZ1bmNTdHIuaW5kZXhPZignKScpKVxuICAgIC5zcGxpdCgnLCcpXG4gICAgLm1hcCgocGFyYW0pID0+IHBhcmFtLnRyaW0oKSk7XG4gIGNvbnN0IGRlZmF1bHRzID0gcGFyYW1zLmZpbHRlcigocGFyYW0pID0+IHBhcmFtLmluY2x1ZGVzKCc9JykpO1xuICByZXR1cm4gZGVmYXVsdHMubGVuZ3RoICsgZnVuYy5sZW5ndGg7XG59XG4iLCJpbXBvcnQgdHlwZSB7XG4gICRJbnRlcm5hbFJlZ2xlUnVsZURlZmluaXRpb24sXG4gICRJbnRlcm5hbFJlZ2xlUnVsZUluaXQsXG4gICRJbnRlcm5hbFJlZ2xlUnVsZU1ldGFkYXRhQ29uc3VtZXIsXG4gIFJlZ2xlUnVsZU1ldGFkYXRhRGVmaW5pdGlvbixcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlUmVhY3RpdmVQYXJhbXMsIHVud3JhcFJ1bGVQYXJhbWV0ZXJzIH0gZnJvbSAnLi91bndyYXBSdWxlUGFyYW1ldGVycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVSdWxlUHJvY2Vzc29ycyhcbiAgZGVmaW5pdGlvbjogJEludGVybmFsUmVnbGVSdWxlSW5pdCxcbiAgLi4ucGFyYW1zOiBhbnlbXVxuKTogJEludGVybmFsUmVnbGVSdWxlRGVmaW5pdGlvbiB7XG4gIGNvbnN0IHsgbWVzc2FnZSwgdmFsaWRhdG9yLCBhY3RpdmUsIC4uLnByb3BlcnRpZXMgfSA9IGRlZmluaXRpb247XG5cbiAgY29uc3QgaXNBc3luYyA9IHZhbGlkYXRvci5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXN5bmNGdW5jdGlvbic7XG5cbiAgY29uc3QgZGVmYXVsdFByb2Nlc3NvcnMgPSB7XG4gICAgdmFsaWRhdG9yKHZhbHVlOiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICByZXR1cm4gZGVmaW5pdGlvbi52YWxpZGF0b3IodmFsdWUsIC4uLnVud3JhcFJ1bGVQYXJhbWV0ZXJzKGFyZ3MubGVuZ3RoID8gYXJncyA6IHBhcmFtcykpO1xuICAgIH0sXG4gICAgbWVzc2FnZSh2YWx1ZTogYW55LCBtZXRhZGF0YTogJEludGVybmFsUmVnbGVSdWxlTWV0YWRhdGFDb25zdW1lcikge1xuICAgICAgaWYgKHR5cGVvZiBkZWZpbml0aW9uLm1lc3NhZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb24ubWVzc2FnZSh2YWx1ZSwge1xuICAgICAgICAgIC4uLm1ldGFkYXRhLFxuICAgICAgICAgICRwYXJhbXM6IHVud3JhcFJ1bGVQYXJhbWV0ZXJzKG1ldGFkYXRhLiRwYXJhbXM/Lmxlbmd0aCA/IG1ldGFkYXRhLiRwYXJhbXMgOiBwYXJhbXMpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZSh2YWx1ZTogYW55LCBtZXRhZGF0YTogJEludGVybmFsUmVnbGVSdWxlTWV0YWRhdGFDb25zdW1lcikge1xuICAgICAgaWYgKHR5cGVvZiBkZWZpbml0aW9uLmFjdGl2ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gZGVmaW5pdGlvbi5hY3RpdmUodmFsdWUsIHtcbiAgICAgICAgICAuLi5tZXRhZGF0YSxcbiAgICAgICAgICAkcGFyYW1zOiB1bndyYXBSdWxlUGFyYW1ldGVycyhtZXRhZGF0YS4kcGFyYW1zPy5sZW5ndGggPyBtZXRhZGF0YS4kcGFyYW1zIDogcGFyYW1zKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmaW5pdGlvbi5hY3RpdmUgPz8gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGV4ZWModmFsdWU6IGFueSkge1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gZGVmaW5pdGlvbi52YWxpZGF0b3IodmFsdWUsIC4uLnVud3JhcFJ1bGVQYXJhbWV0ZXJzKHBhcmFtcykpO1xuICAgICAgbGV0IHJhd1Jlc3VsdDogUmVnbGVSdWxlTWV0YWRhdGFEZWZpbml0aW9uO1xuICAgICAgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRvci50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICByYXdSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiByYXdSZXN1bHQgPT09ICdvYmplY3QnICYmICckdmFsaWQnIGluIHJhd1Jlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJhd1Jlc3VsdC4kdmFsaWQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmF3UmVzdWx0ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiByYXdSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYXdSZXN1bHQgPSB2YWxpZGF0b3I7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgcmF3UmVzdWx0ID09PSAnb2JqZWN0JyAmJiAnJHZhbGlkJyBpbiByYXdSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHJhd1Jlc3VsdC4kdmFsaWQ7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByYXdSZXN1bHQgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gcmF3UmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgcHJvY2Vzc29ycyA9IHtcbiAgICAuLi5kZWZhdWx0UHJvY2Vzc29ycyxcbiAgICAuLi5wcm9wZXJ0aWVzLFxuICAgIC4uLntcbiAgICAgIF92YWxpZGF0b3I6IGRlZmluaXRpb24udmFsaWRhdG9yIGFzIGFueSxcbiAgICAgIF9tZXNzYWdlOiBkZWZpbml0aW9uLm1lc3NhZ2UsXG4gICAgICBfYWN0aXZlOiBkZWZpbml0aW9uLmFjdGl2ZSxcbiAgICAgIF90eXBlOiBkZWZpbml0aW9uLnR5cGUsXG4gICAgICBfcGF0Y2hlZDogZmFsc2UsXG4gICAgICBfYXN5bmM6IGlzQXN5bmMsXG4gICAgICBfcGFyYW1zOiBjcmVhdGVSZWFjdGl2ZVBhcmFtczxuZXZlcj4ocGFyYW1zKSxcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBwcm9jZXNzb3JzO1xufVxuIiwiaW1wb3J0IHR5cGUge1xuICBJbmZlclJlZ2xlUnVsZSxcbiAgUmVnbGVSdWxlSW5pdCxcbiAgUmVnbGVSdWxlTWV0YWRhdGFEZWZpbml0aW9uLFxuICBSZWdsZVJ1bGVUeXBlUmV0dXJuLFxuICBSZWdsZVVuaXZlcnNhbFBhcmFtcyxcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgZGVmaW5lUnVsZVByb2Nlc3NvcnMgfSBmcm9tICcuL2RlZmluZVJ1bGVQcm9jZXNzb3JzJztcbmltcG9ydCB7IGdldEZ1bmN0aW9uUGFyYW1ldGVyc0xlbmd0aCB9IGZyb20gJy4vdW53cmFwUnVsZVBhcmFtZXRlcnMnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogQ3JlYXRlIGEgdHlwZWQgY3VzdG9tIHJ1bGUgdGhhdCBjYW4gYmUgdXNlZCBsaWtlIGRlZmF1bHQgcnVsZXMuXG4gKiBJdCBjYW4gYWxzbyBiZSBkZWNsYXJlZCBpbiB0aGUgZ2xvYmFsIG9wdGlvbnNcbiAqXG4gKiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGlmIHRoZSBydWxlIGlzIGFzeW5jXG4gKlxuICogQHR5cGVQYXJhbSBUVmFsdWUgLSBUaGUgaW5wdXQgdmFsdWUgdGhlIHJ1bGUgc2hvdWxkIHJlY2VpdmVcbiAqIEB0eXBlUGFyYW0gVFBhcmFtcyAtIFR1cGxlIGRlY2xhcmF0aW9uIG9mIHRoZSBydWxlIHBhcmFtZXRlcnMgKGlmIGFueSlcbiAqXG4gKiBAcGFyYW0gZGVmaW5pdGlvbiAtIFRoZSBydWxlIHByb2Nlc3NvcnMgb2JqZWN0XG4gKlxuICogQHJldHVybnMgQSBydWxlIGRlZmluaXRpb24gdGhhdCBjYW4gYmUgY2FsbGFibGUgZGVwZW5kaW5nIG9uIHBhcmFtcyBwcmVzZW5jZVxuICpcbiAqIEBleGVtcGxlXG4gKlxuICogYGBgdHNcbiAqIC8vIENyZWF0ZSBhIHNpbXBsZSBydWxlIHdpdGggbm8gcGFyYW1zXG4gKiBpbXBvcnQge3J1bGVIZWxwZXJzfSBmcm9tICdAcmVnbGUvcnVsZXMnO1xuICpcbiAqIGV4cG9ydCBjb25zdCBpc0ZvbyA9IGNyZWF0ZVJ1bGUoe1xuICogICB2YWxpZGF0b3IodmFsdWU6IHN0cmluZykge1xuICogICAgICAgaWYgKHJ1bGVIZWxwZXJzLmlzRmlsbGVkKHZhbHVlKSkge1xuICogICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ2Zvbyc7XG4gKiAgICAgICB9XG4gKiAgICAgICByZXR1cm4gdHJ1ZVxuICogICB9LFxuICogICBtZXNzYWdlOiBcIlRoZSB2YWx1ZSBzaG91bGQgYmUgJ2ZvbydcIlxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUnVsZTxcbiAgVFZhbHVlIGV4dGVuZHMgYW55LFxuICBUUGFyYW1zIGV4dGVuZHMgYW55W10sXG4gIFRSZXR1cm4gZXh0ZW5kcyBSZWdsZVJ1bGVNZXRhZGF0YURlZmluaXRpb24gfCBQcm9taXNlPFJlZ2xlUnVsZU1ldGFkYXRhRGVmaW5pdGlvbj4sXG4gIFRNZXRhZGF0YSBleHRlbmRzIFJlZ2xlUnVsZU1ldGFkYXRhRGVmaW5pdGlvbiA9IFRSZXR1cm4gZXh0ZW5kcyBQcm9taXNlPGluZmVyIE0+ID8gTSA6IFRSZXR1cm4sXG4gIFRBc3luYyBleHRlbmRzIGJvb2xlYW4gPSBUUmV0dXJuIGV4dGVuZHMgUHJvbWlzZTxhbnk+ID8gdHJ1ZSA6IGZhbHNlLFxuPihcbiAgZGVmaW5pdGlvbjogUmVnbGVSdWxlSW5pdDxUVmFsdWUsIFRQYXJhbXMsIFRSZXR1cm4sIFRNZXRhZGF0YSwgVEFzeW5jPlxuKTogSW5mZXJSZWdsZVJ1bGU8VFZhbHVlLCBUUGFyYW1zLCBUQXN5bmMsIFRNZXRhZGF0YT4ge1xuICBpZiAodHlwZW9mIGRlZmluaXRpb24udmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbGV0IGZha2VQYXJhbXM6IGFueVtdID0gW107XG4gICAgY29uc3Qgc3RhdGljUHJvY2Vzc29ycyA9IGRlZmluZVJ1bGVQcm9jZXNzb3JzKGRlZmluaXRpb24gYXMgYW55LCAuLi5mYWtlUGFyYW1zKTtcblxuICAgIGNvbnN0IGlzQXN5bmMgPSBkZWZpbml0aW9uLnZhbGlkYXRvci5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXN5bmNGdW5jdGlvbic7XG4gICAgLy8gRm9yIHZhbGlkYXRvcnMgbmVlZGluZyBhIHBhcmFtcyBsaWtlIG1heExlbmd0aCBvciByZXF1aXJlZElmXG4gICAgaWYgKGdldEZ1bmN0aW9uUGFyYW1ldGVyc0xlbmd0aChkZWZpbml0aW9uLnZhbGlkYXRvcikgPiAxKSB7XG4gICAgICAvLyBGb3IgdmFsaWRhdG9ycyB3aXRoIHBhcmFtLCByZXR1cm4gYSBmdW5jdGlvbiBwcm92aWRpbmcgcGFyYW1zIGZvciBhbGwgdGhlIHJ1bGUgcHJvY2Vzc29yc1xuICAgICAgY29uc3QgcnVsZUZhY3RvcnkgPSBmdW5jdGlvbiAoLi4ucGFyYW1zOiBSZWdsZVVuaXZlcnNhbFBhcmFtczxUUGFyYW1zPikge1xuICAgICAgICByZXR1cm4gZGVmaW5lUnVsZVByb2Nlc3NvcnMoZGVmaW5pdGlvbiBhcyBhbnksIC4uLnBhcmFtcyk7XG4gICAgICB9O1xuXG4gICAgICAvLyBBc3NpZ24gYWxsIHRoZSBpbnRlcm5hbHMgdG8gdGhlIHJ1bGUgcmF3IGZ1bmN0aW9uIHNvIHRoZXkgYXJlIGFjY2Vzc2libGUgd2l0aG91dCBjYWxsaW5nIGl0XG4gICAgICBydWxlRmFjdG9yeS52YWxpZGF0b3IgPSBzdGF0aWNQcm9jZXNzb3JzLnZhbGlkYXRvcjtcbiAgICAgIHJ1bGVGYWN0b3J5Lm1lc3NhZ2UgPSBzdGF0aWNQcm9jZXNzb3JzLm1lc3NhZ2U7XG4gICAgICBydWxlRmFjdG9yeS5hY3RpdmUgPSBzdGF0aWNQcm9jZXNzb3JzLmFjdGl2ZTtcbiAgICAgIHJ1bGVGYWN0b3J5LnR5cGUgPSBzdGF0aWNQcm9jZXNzb3JzLnR5cGU7XG4gICAgICBydWxlRmFjdG9yeS5leGVjID0gc3RhdGljUHJvY2Vzc29ycy5leGVjO1xuXG4gICAgICBydWxlRmFjdG9yeS5fdmFsaWRhdG9yID0gc3RhdGljUHJvY2Vzc29ycy52YWxpZGF0b3I7XG4gICAgICBydWxlRmFjdG9yeS5fbWVzc2FnZSA9IHN0YXRpY1Byb2Nlc3NvcnMubWVzc2FnZTtcbiAgICAgIHJ1bGVGYWN0b3J5Ll9hY3RpdmUgPSBzdGF0aWNQcm9jZXNzb3JzLmFjdGl2ZTtcbiAgICAgIHJ1bGVGYWN0b3J5Ll90eXBlID0gZGVmaW5pdGlvbi50eXBlO1xuICAgICAgcnVsZUZhY3RvcnkuX3BhdGNoZWQgPSBmYWxzZTtcbiAgICAgIHJ1bGVGYWN0b3J5Ll9hc3luYyA9IGlzQXN5bmMgYXMgVEFzeW5jO1xuICAgICAgcmV0dXJuIHJ1bGVGYWN0b3J5IGFzIGFueTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0YXRpY1Byb2Nlc3NvcnMgYXMgYW55O1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbGlkYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbn1cbiIsImltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHsgTWF5YmVHZXR0ZXIgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdChvYmo6IHVua25vd24pOiBvYmogaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkob2JqKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmT2JqZWN0KG9iajogUmVmPHVua25vd24+KTogb2JqIGlzIFJlZjxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gIHJldHVybiBpc09iamVjdChvYmoudmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVEZWVwPFQ+KG9iajogVCk6IFQge1xuICBsZXQgcmVzdWx0ID0gb2JqIGFzIGFueTtcbiAgbGV0IHR5cGUgPSB7fS50b1N0cmluZy5jYWxsKG9iaikuc2xpY2UoOCwgLTEpO1xuICBpZiAodHlwZSA9PSAnU2V0Jykge1xuICAgIHJlc3VsdCA9IG5ldyBTZXQoWy4uLihvYmogYXMgYW55KV0ubWFwKCh2YWx1ZSkgPT4gY2xvbmVEZWVwKHZhbHVlKSkpO1xuICB9XG4gIGlmICh0eXBlID09ICdNYXAnKSB7XG4gICAgcmVzdWx0ID0gbmV3IE1hcChbLi4uKG9iaiBhcyBhbnkpXS5tYXAoKGt2KSA9PiBbY2xvbmVEZWVwKGt2WzBdKSwgY2xvbmVEZWVwKGt2WzFdKV0pKTtcbiAgfVxuICBpZiAodHlwZSA9PSAnRGF0ZScpIHtcbiAgICByZXN1bHQgPSBuZXcgRGF0ZSgob2JqIGFzIGFueSkuZ2V0VGltZSgpKTtcbiAgfVxuICBpZiAodHlwZSA9PSAnUmVnRXhwJykge1xuICAgIHJlc3VsdCA9IFJlZ0V4cCgob2JqIGFzIGFueSkuc291cmNlLCBnZXRSZWdFeHBGbGFncyhvYmopKTtcbiAgfVxuICBpZiAodHlwZSA9PSAnQXJyYXknIHx8IHR5cGUgPT0gJ09iamVjdCcpIHtcbiAgICByZXN1bHQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBbXSA6IHt9O1xuICAgIGZvciAobGV0IGtleSBpbiBvYmopIHtcbiAgICAgIC8vIGluY2x1ZGUgcHJvdG90eXBlIHByb3BlcnRpZXNcbiAgICAgIHJlc3VsdFtrZXldID0gY2xvbmVEZWVwKG9ialtrZXldKTtcbiAgICB9XG4gIH1cbiAgLy8gcHJpbWl0aXZlcyBhbmQgbm9uLXN1cHBvcnRlZCBvYmplY3RzIChlLmcuIGZ1bmN0aW9ucykgbGFuZCBoZXJlXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldFJlZ0V4cEZsYWdzKHJlZ0V4cDogYW55KSB7XG4gIGlmICh0eXBlb2YgcmVnRXhwLnNvdXJjZS5mbGFncyA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiByZWdFeHAuc291cmNlLmZsYWdzO1xuICB9IGVsc2Uge1xuICAgIGxldCBmbGFncyA9IFtdO1xuICAgIHJlZ0V4cC5nbG9iYWwgJiYgZmxhZ3MucHVzaCgnZycpO1xuICAgIHJlZ0V4cC5pZ25vcmVDYXNlICYmIGZsYWdzLnB1c2goJ2knKTtcbiAgICByZWdFeHAubXVsdGlsaW5lICYmIGZsYWdzLnB1c2goJ20nKTtcbiAgICByZWdFeHAuc3RpY2t5ICYmIGZsYWdzLnB1c2goJ3knKTtcbiAgICByZWdFeHAudW5pY29kZSAmJiBmbGFncy5wdXNoKCd1Jyk7XG4gICAgcmV0dXJuIGZsYWdzLmpvaW4oJycpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBHZXR0ZXI8VCBleHRlbmRzIGFueT4oXG4gIGdldHRlcjogTWF5YmVHZXR0ZXI8VCwgYW55PixcbiAgdmFsdWU6IFJlZjxhbnk+LFxuICBpbmRleD86IG51bWJlclxuKTogVCB7XG4gIGlmIChnZXR0ZXIgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBnZXR0ZXIodmFsdWUsIGluZGV4ID8/IDApO1xuICB9XG4gIHJldHVybiBnZXR0ZXI7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAvLyBpbnZhbGlkIGRhdGUgd29uJ3QgcGFzc1xuICAgIHJldHVybiBpc05hTih2YWx1ZS5nZXRUaW1lKCkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPT09IDA7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICFTdHJpbmcodmFsdWUudHJpbSgpKS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwiaW50ZXJmYWNlIERlYm91bmNlZEZ1bmN0aW9uIHtcbiAgKC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8dW5rbm93bj47XG4gIGNhbmNlbCgpOiB2b2lkO1xuICBkb0ltbWVkaWF0ZWx5KC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkgfCBQcm9taXNlPGFueT4+KFxuICB0aGlzOiBhbnksXG4gIGZ1bmM6IFQsXG4gIHdhaXQ6IG51bWJlcixcbiAgaW1tZWRpYXRlPzogYm9vbGVhblxuKTogVCB7XG4gIGxldCB0aW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZGVib3VuY2VkRm46IERlYm91bmNlZEZ1bmN0aW9uID0gKC4uLmFyZ3MpID0+XG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoZnVuYy5hcHBseSh0aGlzLCBbLi4uYXJnc10gYXMgYW55KSkudGhlbihyZXNvbHZlKTtcbiAgICAgICAgfVxuICAgICAgfSwgd2FpdCk7XG4gICAgICBpZiAoaW1tZWRpYXRlICYmICF0aW1lb3V0KSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShmdW5jLmFwcGx5KHRoaXMsIFsuLi5hcmdzXSBhcyBhbnkpKS50aGVuKHJlc29sdmUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGRlYm91bmNlZEZuLmNhbmNlbCA9ICgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IHVuZGVmaW5lZDtcbiAgfTtcblxuICBkZWJvdW5jZWRGbi5kb0ltbWVkaWF0ZWx5ID0gKC4uLmFyZ3MpID0+XG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGZ1bmMuYXBwbHkodGhpcywgWy4uLmFyZ3NdIGFzIGFueSkpLnRoZW4ocmVzb2x2ZSk7XG4gICAgICB9LCAwKTtcbiAgICB9KTtcblxuICByZXR1cm4gZGVib3VuY2VkRm4gYXMgdW5rbm93biBhcyBUO1xufVxuIiwiaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJ3Z1ZSc7XG5cbmV4cG9ydCB0eXBlIFZlcnNpb24gPSBzdHJpbmcgfCBudW1iZXI7XG5leHBvcnQgZW51bSBWZXJzaW9uSXMge1xuICBMZXNzVGhhbiA9IC0xLFxuICBFcXVhbFRvID0gMCxcbiAgR3JlYXRlclRoYW4gPSAxLFxufVxuXG4vKipcbiAqIENvbXBhcmUgdHdvIHZlcnNpb25zIHF1aWNrbHkuXG4gKiBAcGFyYW0gY3VycmVudCBJcyB0aGlzIHZlcnNpb24gZ3JlYXRlciwgZXF1YWwgdG8sIG9yIGxlc3MgdGhhbiB0aGUgb3RoZXI/XG4gKiBAcGFyYW0gb3RoZXIgVGhlIHZlcnNpb24gdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSBjdXJyZW50IHZlcnNpb25cbiAqIEByZXR1cm4gMSBpZiBjdXJyZW50IGlzIGdyZWF0ZXIgdGhhbiBvdGhlciwgMCBpZiB0aGV5IGFyZSBlcXVhbCBvciBlcXVpdmFsZW50LCBhbmQgLTEgaWYgY3VycmVudCBpcyBsZXNzIHRoYW4gb3RoZXJcbiAqL1xuZnVuY3Rpb24gdmVyc2lvbkNvbXBhcmUoY3VycmVudDogVmVyc2lvbiwgb3RoZXI6IFZlcnNpb24pOiBWZXJzaW9uSXMge1xuICBjb25zdCBjcCA9IFN0cmluZyhjdXJyZW50KS5zcGxpdCgnLicpO1xuICBjb25zdCBvcCA9IFN0cmluZyhvdGhlcikuc3BsaXQoJy4nKTtcbiAgZm9yIChsZXQgZGVwdGggPSAwOyBkZXB0aCA8IE1hdGgubWluKGNwLmxlbmd0aCwgb3AubGVuZ3RoKTsgZGVwdGgrKykge1xuICAgIGNvbnN0IGNuID0gTnVtYmVyKGNwW2RlcHRoXSk7XG4gICAgY29uc3Qgb24gPSBOdW1iZXIob3BbZGVwdGhdKTtcbiAgICBpZiAoY24gPiBvbikgcmV0dXJuIFZlcnNpb25Jcy5HcmVhdGVyVGhhbjtcbiAgICBpZiAob24gPiBjbikgcmV0dXJuIFZlcnNpb25Jcy5MZXNzVGhhbjtcbiAgICBpZiAoIWlzTmFOKGNuKSAmJiBpc05hTihvbikpIHJldHVybiBWZXJzaW9uSXMuR3JlYXRlclRoYW47XG4gICAgaWYgKGlzTmFOKGNuKSAmJiAhaXNOYU4ob24pKSByZXR1cm4gVmVyc2lvbklzLkxlc3NUaGFuO1xuICB9XG4gIHJldHVybiBWZXJzaW9uSXMuRXF1YWxUbztcbn1cblxuZXhwb3J0IGNvbnN0IGlzVnVlU3VwZXJpb3JPckVxdWFsVG8zZG90Rml2ZSA9XG4gIHZlcnNpb25Db21wYXJlKHZlcnNpb24sICczLjUuMCcpID09PSAtMSA/IGZhbHNlIDogdHJ1ZTtcbiIsImZ1bmN0aW9uIHVuaXF1ZUlETnV4dCgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIERhdGUubm93KCkpLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21JZCgpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdW5pcXVlSUROdXh0KCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdWludDMyID0gd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTtcbiAgICByZXR1cm4gdWludDMyLnRvU3RyaW5nKDEwKTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgb25TY29wZURpc3Bvc2UsIHJlZiwgc2hhbGxvd1JlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7ICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZSwgUmVnbGVSdWxlRGVjbCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IHVud3JhcFJ1bGVQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vY3JlYXRlUnVsZS91bndyYXBSdWxlUGFyYW1ldGVycyc7XG5cbmV4cG9ydCB0eXBlIFN0b3JlZFJ1bGVTdGF0dXMgPSB7XG4gICR2YWxpZDogUmVmPGJvb2xlYW4+O1xuICAkcGVuZGluZzogUmVmPGJvb2xlYW4+O1xuICAkbWV0YWRhdGE6IFJlZjxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcbiAgJHZhbGlkYXRpbmc6IFJlZjxib29sZWFuPjtcbn07XG5cbmV4cG9ydCB0eXBlIFJlZ2xlU3RvcmFnZSA9IFJldHVyblR5cGU8dHlwZW9mIHVzZVN0b3JhZ2U+O1xuXG4vKipcbiAqIEluc3BpcmVkIGJ5IFZ1ZWxpZGF0ZSBzdG9yYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdG9yYWdlKCkge1xuICBjb25zdCBydWxlRGVjbFN0b3JhZ2UgPSBzaGFsbG93UmVmKG5ldyBNYXA8c3RyaW5nLCBSZWdsZVJ1bGVEZWNsPGFueSwgYW55Pj4oKSk7XG4gIGNvbnN0IGZpZWxkc1N0b3JhZ2UgPSBzaGFsbG93UmVmKFxuICAgIG5ldyBNYXA8c3RyaW5nLCBSZWY8UmVjb3JkPHN0cmluZywgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlPj4+KClcbiAgKTtcbiAgY29uc3QgY29sbGVjdGlvbnNTdG9yYWdlID0gc2hhbGxvd1JlZihuZXcgTWFwPHN0cmluZywgUmVmPEFycmF5PCRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZT4+PigpKTtcbiAgY29uc3QgZGlydHlTdG9yYWdlID0gc2hhbGxvd1JlZihuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKSk7XG4gIGNvbnN0IHJ1bGVTdGF0dXNTdG9yYWdlID0gc2hhbGxvd1JlZihuZXcgTWFwPHN0cmluZywgU3RvcmVkUnVsZVN0YXR1cz4oKSk7XG5cbiAgY29uc3QgYXJyYXlTdGF0dXNTdG9yYWdlID0gc2hhbGxvd1JlZihuZXcgTWFwPHN0cmluZywgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlPigpKTtcblxuICBmdW5jdGlvbiBnZXRGaWVsZHNFbnRyeSgkcGF0aDogc3RyaW5nKTogUmVmPFJlY29yZDxzdHJpbmcsICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZT4+IHtcbiAgICBjb25zdCBleGlzdGluZ0ZpZWxkcyA9IGZpZWxkc1N0b3JhZ2UudmFsdWUuZ2V0KCRwYXRoKTtcbiAgICBpZiAoZXhpc3RpbmdGaWVsZHMpIHtcbiAgICAgIHJldHVybiBleGlzdGluZ0ZpZWxkcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgJGZpZWxkcyA9IHJlZih7fSkgYXMgUmVmPFJlY29yZDxzdHJpbmcsICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZT4+O1xuICAgICAgZmllbGRzU3RvcmFnZS52YWx1ZS5zZXQoJHBhdGgsICRmaWVsZHMpO1xuICAgICAgcmV0dXJuICRmaWVsZHM7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q29sbGVjdGlvbnNFbnRyeSgkcGF0aDogc3RyaW5nKTogUmVmPEFycmF5PCRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZT4+IHtcbiAgICBjb25zdCBleGlzdGluZ0VhY2ggPSBjb2xsZWN0aW9uc1N0b3JhZ2UudmFsdWUuZ2V0KCRwYXRoKTtcbiAgICBpZiAoZXhpc3RpbmdFYWNoKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdFYWNoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCAkZWFjaCA9IHJlZjxBcnJheTwkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGU+PihbXSk7XG4gICAgICBjb2xsZWN0aW9uc1N0b3JhZ2UudmFsdWUuc2V0KCRwYXRoLCAkZWFjaCk7XG4gICAgICByZXR1cm4gJGVhY2g7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29sbGVjdGlvbnNcblxuICBmdW5jdGlvbiBhZGRBcnJheVN0YXR1cygkYXJyYXlJZDogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZywgdmFsdWU6ICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZSkge1xuICAgIGFycmF5U3RhdHVzU3RvcmFnZS52YWx1ZS5zZXQoYCR7JGFycmF5SWR9LSR7aXRlbUlkfWAsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFycmF5U3RhdHVzKCRhcnJheUlkOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFycmF5U3RhdHVzU3RvcmFnZS52YWx1ZS5nZXQoYCR7JGFycmF5SWR9LSR7aXRlbUlkfWApO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVsZXRlQXJyYXlTdGF0dXMoJGFycmF5SWQ6IHN0cmluZywgaXRlbUlkPzogc3RyaW5nKSB7XG4gICAgaWYgKCRhcnJheUlkICYmIGl0ZW1JZCAhPSBudWxsKSB7XG4gICAgICBhcnJheVN0YXR1c1N0b3JhZ2UudmFsdWUuZGVsZXRlKGAkeyRhcnJheUlkfS0ke2l0ZW1JZH1gKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXREaXJ0eUVudHJ5KCRwYXRoOiBzdHJpbmcsIGRpcnR5OiBib29sZWFuKSB7XG4gICAgZGlydHlTdG9yYWdlLnZhbHVlLnNldCgkcGF0aCwgZGlydHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGlydHlTdGF0ZShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZGlydHlTdG9yYWdlLnZhbHVlLmdldChwYXRoKSA/PyBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFJ1bGVEZWNsRW50cnkoJHBhdGg6IHN0cmluZywgb3B0aW9uczogUmVnbGVSdWxlRGVjbDxhbnksIGFueT4pIHtcbiAgICBydWxlRGVjbFN0b3JhZ2UudmFsdWUuc2V0KCRwYXRoLCBvcHRpb25zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrUnVsZURlY2xFbnRyeShcbiAgICAkcGF0aDogc3RyaW5nLFxuICAgIG5ld1J1bGVzOiBSZWdsZVJ1bGVEZWNsXG4gICk6IHsgdmFsaWQ6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RvcmVkUnVsZXNEZWZzID0gcnVsZURlY2xTdG9yYWdlLnZhbHVlLmdldCgkcGF0aCk7XG5cbiAgICBpZiAoIXN0b3JlZFJ1bGVzRGVmcykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHN0b3JlZFJ1bGVzID0gc3RvcmVkUnVsZXNEZWZzO1xuXG4gICAgY29uc3QgaXNWYWxpZENhY2hlID0gYXJlUnVsZXNDaGFuZ2VkKG5ld1J1bGVzLCBzdG9yZWRSdWxlcyk7XG5cbiAgICBpZiAoIWlzVmFsaWRDYWNoZSkgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlIH07XG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFyZVJ1bGVzQ2hhbmdlZChuZXdSdWxlczogUmVnbGVSdWxlRGVjbCwgc3RvcmVkUnVsZXM6IFJlZ2xlUnVsZURlY2wpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdG9yZWRSdWxlc0tleXMgPSBPYmplY3Qua2V5cyhzdG9yZWRSdWxlcyk7XG4gICAgY29uc3QgbmV3UnVsZXNLZXlzID0gT2JqZWN0LmtleXMobmV3UnVsZXMpO1xuXG4gICAgaWYgKG5ld1J1bGVzS2V5cy5sZW5ndGggIT09IHN0b3JlZFJ1bGVzS2V5cy5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGhhc0FsbFZhbGlkYXRvcnMgPSBuZXdSdWxlc0tleXMuZXZlcnkoKHJ1bGVLZXkpID0+IHN0b3JlZFJ1bGVzS2V5cy5pbmNsdWRlcyhydWxlS2V5KSk7XG4gICAgaWYgKCFoYXNBbGxWYWxpZGF0b3JzKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gbmV3UnVsZXNLZXlzLmV2ZXJ5KChydWxlS2V5KSA9PiB7XG4gICAgICBjb25zdCBuZXdSdWxlRWxlbWVudCA9IG5ld1J1bGVzW3J1bGVLZXldO1xuICAgICAgY29uc3Qgc3RvcmVkUnVsZUVsZW1lbnQgPSBzdG9yZWRSdWxlc1tydWxlS2V5XTtcbiAgICAgIGlmIChcbiAgICAgICAgIXN0b3JlZFJ1bGVFbGVtZW50IHx8XG4gICAgICAgICFuZXdSdWxlRWxlbWVudCB8fFxuICAgICAgICB0eXBlb2YgbmV3UnVsZUVsZW1lbnQgPT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHN0b3JlZFJ1bGVFbGVtZW50ID09PSAnZnVuY3Rpb24nXG4gICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIC8vICRkZWJvdW5jZVxuICAgICAgaWYgKHR5cGVvZiBuZXdSdWxlRWxlbWVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyAkbGF6eSwgJGF1dG9EaXJ0eSBldGMuLlxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV3UnVsZUVsZW1lbnQgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKCFuZXdSdWxlRWxlbWVudC5fcGFyYW1zKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3UnVsZUVsZW1lbnQuX3BhcmFtcz8uZXZlcnkoKHBhcmFtS2V5LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2Ygc3RvcmVkUnVsZUVsZW1lbnQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzdG9yZWRSdWxlRWxlbWVudCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmVkUGFyYW1zID0gdW53cmFwUnVsZVBhcmFtZXRlcnMoc3RvcmVkUnVsZUVsZW1lbnQuX3BhcmFtcyBhcyBhbnlbXSk7XG4gICAgICAgICAgICBjb25zdCBuZXdQYXJhbXMgPSB1bndyYXBSdWxlUGFyYW1ldGVycyhuZXdSdWxlRWxlbWVudC5fcGFyYW1zIGFzIGFueVtdKTtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZWRQYXJhbXM/LltpbmRleF0gPT09IG5ld1BhcmFtcz8uW2luZGV4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJ5U2V0UnVsZVN0YXR1c1JlZihwYXRoOiBzdHJpbmcpOiBTdG9yZWRSdWxlU3RhdHVzIHtcbiAgICBjb25zdCBydWxlU3RhdHVzID0gcnVsZVN0YXR1c1N0b3JhZ2UudmFsdWUuZ2V0KHBhdGgpO1xuICAgIGlmIChydWxlU3RhdHVzKSB7XG4gICAgICByZXR1cm4gcnVsZVN0YXR1cztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgJHBlbmRpbmcgPSByZWYoZmFsc2UpO1xuICAgICAgY29uc3QgJHZhbGlkID0gcmVmKHRydWUpO1xuICAgICAgY29uc3QgJG1ldGFkYXRhID0gcmVmKHt9KTtcbiAgICAgIGNvbnN0ICR2YWxpZGF0aW5nID0gcmVmKGZhbHNlKTtcbiAgICAgIHJ1bGVTdGF0dXNTdG9yYWdlLnZhbHVlLnNldChwYXRoLCB7ICRwZW5kaW5nLCAkdmFsaWQsICRtZXRhZGF0YSwgJHZhbGlkYXRpbmcgfSk7XG4gICAgICByZXR1cm4geyAkcGVuZGluZywgJHZhbGlkLCAkbWV0YWRhdGEsICR2YWxpZGF0aW5nIH07XG4gICAgfVxuICB9XG5cbiAgb25TY29wZURpc3Bvc2UoKCkgPT4ge1xuICAgIHJ1bGVEZWNsU3RvcmFnZS52YWx1ZS5jbGVhcigpO1xuICAgIGZpZWxkc1N0b3JhZ2UudmFsdWUuY2xlYXIoKTtcbiAgICBjb2xsZWN0aW9uc1N0b3JhZ2UudmFsdWUuY2xlYXIoKTtcbiAgICBkaXJ0eVN0b3JhZ2UudmFsdWUuY2xlYXIoKTtcbiAgICBydWxlU3RhdHVzU3RvcmFnZS52YWx1ZS5jbGVhcigpO1xuICAgIGFycmF5U3RhdHVzU3RvcmFnZS52YWx1ZS5jbGVhcigpO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGFkZFJ1bGVEZWNsRW50cnksXG4gICAgc2V0RGlydHlFbnRyeSxcbiAgICBjaGVja1J1bGVEZWNsRW50cnksXG4gICAgZ2V0RGlydHlTdGF0ZSxcbiAgICB0cnlTZXRSdWxlU3RhdHVzUmVmLFxuICAgIGdldEZpZWxkc0VudHJ5LFxuICAgIGdldENvbGxlY3Rpb25zRW50cnksXG4gICAgZ2V0QXJyYXlTdGF0dXMsXG4gICAgYWRkQXJyYXlTdGF0dXMsXG4gICAgZGVsZXRlQXJyYXlTdGF0dXMsXG4gICAgYXJyYXlTdGF0dXNTdG9yYWdlLFxuICB9O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHR5cGUge1xuICAkSW50ZXJuYWxGb3JtUHJvcGVydHlUeXBlcyxcbiAgJEludGVybmFsUmVnbGVDb2xsZWN0aW9uUnVsZURlY2wsXG4gICRJbnRlcm5hbFJlZ2xlUGFydGlhbFZhbGlkYXRpb25UcmVlLFxuICAkSW50ZXJuYWxSZWdsZVJ1bGVEZWNsLFxuICBJbmxpbmVSdWxlRGVjbGFyYXRpb24sXG4gIE1heWJlR2V0dGVyLFxuICBSZWdsZVJ1bGVEZWZpbml0aW9uLFxufSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc09iamVjdCwgdW53cmFwR2V0dGVyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWRSdWxlc0RlZihcbiAgc3RhdGU6IFJlZjx1bmtub3duPixcbiAgcnVsZXM6IFJlZjwkSW50ZXJuYWxGb3JtUHJvcGVydHlUeXBlcz5cbik6IHJ1bGVzIGlzIFJlZjwkSW50ZXJuYWxSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZT4ge1xuICByZXR1cm4gKFxuICAgIGlzT2JqZWN0KHN0YXRlLnZhbHVlKSAmJlxuICAgIGlzT2JqZWN0KHJ1bGVzLnZhbHVlKSAmJlxuICAgICFPYmplY3QuZW50cmllcyhydWxlcy52YWx1ZSkuc29tZSgocnVsZSkgPT4gaXNSdWxlRGVmKHJ1bGUpKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xsZWN0aW9uUnVsZXNEZWYoXG4gIHJ1bGVzOiBSZWY8JEludGVybmFsRm9ybVByb3BlcnR5VHlwZXMsIGFueT5cbik6IHJ1bGVzIGlzIFJlZjwkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25SdWxlRGVjbD4ge1xuICByZXR1cm4gISFydWxlcy52YWx1ZSAmJiAnJGVhY2gnIGluIHJ1bGVzLnZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZGF0b3JSdWxlc0RlZihcbiAgcnVsZXM6IFJlZjwkSW50ZXJuYWxGb3JtUHJvcGVydHlUeXBlcz5cbik6IHJ1bGVzIGlzIFJlZjwkSW50ZXJuYWxSZWdsZVJ1bGVEZWNsPiB7XG4gIHJldHVybiAhIXJ1bGVzLnZhbHVlICYmIGlzT2JqZWN0KHJ1bGVzLnZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUnVsZURlZihydWxlOiB1bmtub3duKTogcnVsZSBpcyBSZWdsZVJ1bGVEZWZpbml0aW9uPGFueSwgYW55PiB7XG4gIHJldHVybiBpc09iamVjdChydWxlKSAmJiAnX3ZhbGlkYXRvcicgaW4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRm9ybVJ1bGVEZWZpbml0aW9uKFxuICBydWxlOiBSZWY8dW5rbm93bj5cbik6IHJ1bGUgaXMgUmVmPFJlZ2xlUnVsZURlZmluaXRpb248YW55LCBhbnk+PiB7XG4gIHJldHVybiAhKHR5cGVvZiBydWxlLnZhbHVlID09PSAnZnVuY3Rpb24nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRm9ybUlubGluZShcbiAgcnVsZTogUmVmPHVua25vd24+XG4pOiBydWxlIGlzIFJlZjxJbmxpbmVSdWxlRGVjbGFyYXRpb248YW55LCBhbnlbXSwgYW55Pj4ge1xuICByZXR1cm4gdHlwZW9mIHJ1bGUudmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YXRlQXJyYXkoc3RhdGU6IFJlZjx1bmtub3duPik6IHN0YXRlIGlzIFJlZjwodW5rbm93biAmIHsgJGlkPzogc3RyaW5nIH0pW10+IHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3RhdGUudmFsdWUpO1xufVxuIiwiaW1wb3J0IHR5cGUge1xuICAkSW50ZXJuYWxFeHRlcm5hbFJlZ2xlRXJyb3JzLFxuICAkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25TdGF0dXMsXG4gICRJbnRlcm5hbFJlZ2xlRmllbGRTdGF0dXMsXG4gICRJbnRlcm5hbFJlZ2xlUnVsZVN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVTdGF0dXMsXG4gICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZSxcbiAgUmVnbGVFeHRlcm5hbENvbGxlY3Rpb25FcnJvcnMsXG4gIFJlZ2xlRXh0ZXJuYWxFcnJvclRyZWUsXG59IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWRSdWxlc1N0YXR1cyhydWxlOiAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGUpOiBydWxlIGlzICRJbnRlcm5hbFJlZ2xlU3RhdHVzIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJ1bGUpICYmICckZmllbGRzJyBpbiBydWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xsZWN0aW9uUnVsZXNTdGF0dXMoXG4gIHJ1bGU6ICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZVxuKTogcnVsZSBpcyAkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25TdGF0dXMge1xuICByZXR1cm4gISFydWxlICYmICckZWFjaCcgaW4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmllbGRTdGF0dXMocnVsZTogJEludGVybmFsUmVnbGVTdGF0dXNUeXBlKTogcnVsZSBpcyAkSW50ZXJuYWxSZWdsZUZpZWxkU3RhdHVzIHtcbiAgcmV0dXJuICEhcnVsZSAmJiAnJHJ1bGVzJyBpbiBydWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSdWxlU3RhdHVzKHJ1bGU6IHVua25vd24pOiBydWxlIGlzICRJbnRlcm5hbFJlZ2xlUnVsZVN0YXR1cyB7XG4gIHJldHVybiBpc09iamVjdChydWxlKSAmJiAnJHR5cGUnIGluIHJ1bGUgJiYgJyRtZXNzYWdlJyBpbiBydWxlO1xufVxuXG4vLyAgLS0gRXh0ZXJuYWxFcnJvcnNcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkRXh0ZXJuYWxFcnJvclN0YXR1cyhcbiAgcnVsZTogJEludGVybmFsRXh0ZXJuYWxSZWdsZUVycm9yc1xuKTogcnVsZSBpcyBSZWdsZUV4dGVybmFsRXJyb3JUcmVlPGFueT4ge1xuICByZXR1cm4gISFydWxlICYmICckZWFjaCcgaW4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29sbGVjdGlvbkV4dGVybmFsRXJyb3JTdGF0dXMoXG4gIHJ1bGU6ICRJbnRlcm5hbEV4dGVybmFsUmVnbGVFcnJvcnNcbik6IHJ1bGUgaXMgUmVnbGVFeHRlcm5hbENvbGxlY3Rpb25FcnJvcnM8YW55PiB7XG4gIHJldHVybiAhIXJ1bGUgJiYgJyRlYWNoJyBpbiBydWxlO1xufVxuIiwiaW1wb3J0IHR5cGUgeyAkSW50ZXJuYWxFeHRlcm5hbFJlZ2xlRXJyb3JzLCBSZWdsZUV4dGVybmFsQ29sbGVjdGlvbkVycm9ycyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXh0ZXJuYWxFcnJvckNvbGxlY3Rpb24oXG4gIHZhbHVlOiAkSW50ZXJuYWxFeHRlcm5hbFJlZ2xlRXJyb3JzXG4pOiB2YWx1ZSBpcyBSZWdsZUV4dGVybmFsQ29sbGVjdGlvbkVycm9ycyB7XG4gIHJldHVybiAnJGVhY2gnIGluIHZhbHVlIHx8ICckZXJyb3JzJyBpbiB2YWx1ZTtcbn1cbiIsImltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHtcbiAgJEludGVybmFsUmVnbGVDb2xsZWN0aW9uU3RhdHVzLFxuICAkSW50ZXJuYWxSZWdsZUVycm9ycyxcbiAgJEludGVybmFsUmVnbGVGaWVsZFN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVSdWxlU3RhdHVzLFxuICAkSW50ZXJuYWxSZWdsZVN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlLFxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc0NvbGxlY3Rpb25SdWxlc1N0YXR1cywgaXNGaWVsZFN0YXR1cywgaXNOZXN0ZWRSdWxlc1N0YXR1cyB9IGZyb20gJy4vZ3VhcmRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RSdWxlc0Vycm9ycyh7XG4gIGZpZWxkLFxuICBzaWxlbnQgPSBmYWxzZSxcbn06IHtcbiAgZmllbGQ6IFBpY2s8JEludGVybmFsUmVnbGVGaWVsZFN0YXR1cywgJyRydWxlcycgfCAnJGRpcnR5JyB8ICckZXh0ZXJuYWxFcnJvcnMnPjtcbiAgc2lsZW50PzogYm9vbGVhbjtcbn0pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhmaWVsZC4kcnVsZXMgPz8ge30pXG4gICAgLm1hcCgoW3J1bGVLZXksIHJ1bGVdKSA9PiB7XG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIHJldHVybiBydWxlLiRtZXNzYWdlO1xuICAgICAgfSBlbHNlIGlmICghcnVsZS4kdmFsaWQgJiYgZmllbGQuJGRpcnR5KSB7XG4gICAgICAgIHJldHVybiBydWxlLiRtZXNzYWdlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KVxuICAgIC5maWx0ZXIoKG1zZyk6IG1zZyBpcyBzdHJpbmcgfCBzdHJpbmdbXSA9PiAhIW1zZylcbiAgICAucmVkdWNlPHN0cmluZ1tdPigoYWNjLCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFjYz8uY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFjYz8uY29uY2F0KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCBbXSlcbiAgICAuY29uY2F0KGZpZWxkLiRleHRlcm5hbEVycm9ycyA/PyBbXSk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NGaWVsZEVycm9ycyhcbiAgZmllbGRTdGF0dXM6ICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZSxcbiAgc2lsZW50ID0gZmFsc2Vcbik6ICRJbnRlcm5hbFJlZ2xlRXJyb3JzIHtcbiAgaWYgKGlzTmVzdGVkUnVsZXNTdGF0dXMoZmllbGRTdGF0dXMpKSB7XG4gICAgcmV0dXJuIGV4dHJhY3ROZXN0ZWRFcnJvcnMoZmllbGRTdGF0dXMuJGZpZWxkcyk7XG4gIH0gZWxzZSBpZiAoaXNDb2xsZWN0aW9uUnVsZXNTdGF0dXMoZmllbGRTdGF0dXMpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRlcnJvcnM6IGZpZWxkU3RhdHVzLiRmaWVsZC4kcnVsZXNcbiAgICAgICAgPyBleHRyYWN0UnVsZXNFcnJvcnMoeyBmaWVsZDogZmllbGRTdGF0dXMuJGZpZWxkLCBzaWxlbnQgfSlcbiAgICAgICAgOiBbXSxcbiAgICAgICRlYWNoOiBmaWVsZFN0YXR1cy4kZWFjaC5tYXAoKGZpZWxkKSA9PiBwcm9jZXNzRmllbGRFcnJvcnMoZmllbGQsIHNpbGVudCkpLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNGaWVsZFN0YXR1cyhmaWVsZFN0YXR1cykpIHtcbiAgICBpZiAoZmllbGRTdGF0dXMuJGVycm9yKSB7XG4gICAgICByZXR1cm4gZXh0cmFjdFJ1bGVzRXJyb3JzKHtcbiAgICAgICAgZmllbGQ6IGZpZWxkU3RhdHVzLFxuICAgICAgICBzaWxlbnQsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpZWxkU3RhdHVzLiRleHRlcm5hbEVycm9ycyA/PyBbXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdENvbGxlY3Rpb25FcnJvcihcbiAgZWFjaDogJEludGVybmFsUmVnbGVTdGF0dXNUeXBlW10sXG4gIHNpbGVudCA9IGZhbHNlXG4pOiAkSW50ZXJuYWxSZWdsZUVycm9yc1tdIHtcbiAgcmV0dXJuIGVhY2gubWFwKChmaWVsZCkgPT4gcHJvY2Vzc0ZpZWxkRXJyb3JzKGZpZWxkLCBzaWxlbnQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3ROZXN0ZWRFcnJvcnMoXG4gIGZpZWxkczogUmVjb3JkPHN0cmluZywgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlPiB8ICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZVtdLFxuICBzaWxlbnQgPSBmYWxzZVxuKTogUmVjb3JkPHN0cmluZywgJEludGVybmFsUmVnbGVFcnJvcnM+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhmaWVsZHMpLm1hcCgoW2ZpZWxkS2V5LCBmaWVsZFN0YXR1c10pID0+IHtcbiAgICAgIGlmIChpc05lc3RlZFJ1bGVzU3RhdHVzKGZpZWxkU3RhdHVzKSkge1xuICAgICAgICByZXR1cm4gW2ZpZWxkS2V5LCBleHRyYWN0TmVzdGVkRXJyb3JzKGZpZWxkU3RhdHVzLiRmaWVsZHMsIHNpbGVudCldO1xuICAgICAgfSBlbHNlIGlmIChpc0NvbGxlY3Rpb25SdWxlc1N0YXR1cyhmaWVsZFN0YXR1cykpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBmaWVsZEtleSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAkZXJyb3JzOiBleHRyYWN0UnVsZXNFcnJvcnMoeyBmaWVsZDogZmllbGRTdGF0dXMuJGZpZWxkLCBzaWxlbnQgfSksXG4gICAgICAgICAgICAkZWFjaDogZXh0cmFjdENvbGxlY3Rpb25FcnJvcihmaWVsZFN0YXR1cy4kZWFjaCwgc2lsZW50KSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSBlbHNlIGlmIChpc0ZpZWxkU3RhdHVzKGZpZWxkU3RhdHVzKSkge1xuICAgICAgICBpZiAoZmllbGRTdGF0dXMuJGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGZpZWxkS2V5LFxuICAgICAgICAgICAgZXh0cmFjdFJ1bGVzRXJyb3JzKHtcbiAgICAgICAgICAgICAgZmllbGQ6IGZpZWxkU3RhdHVzLFxuICAgICAgICAgICAgICBzaWxlbnQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbZmllbGRLZXksIGZpZWxkU3RhdHVzLiRleHRlcm5hbEVycm9ycyA/PyBbXV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbZmllbGRLZXksIFtdXTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlRXJyb3JzKCRyZWdsZTogJEludGVybmFsUmVnbGVTdGF0dXMpIHtcbiAgY29uc3QgZXJyb3JzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBleHRyYWN0TmVzdGVkRXJyb3JzKCRyZWdsZS4kZmllbGRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cbiIsImltcG9ydCB0eXBlIHsgTWF5YmUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBvc3NpYmxlUmVnbGVSdWxlTWV0YWRhdGFDb25zdW1lcixcbiAgUmVnbGVSdWxlTWV0YWRhdGFEZWZpbml0aW9uLFxufSBmcm9tICcuL3J1bGUuZGVmaW5pdGlvbi50eXBlJztcbmltcG9ydCB0eXBlIHsgUmVnbGVVbml2ZXJzYWxQYXJhbXMgfSBmcm9tICcuL3J1bGUucGFyYW1zLnR5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBkZWZpbml0aW9uIG9mIHRoZSBydWxlLCBjYW4gYmUgdXNlZCB0byByZXNldCBvciBwYXRjaCB0aGUgcnVsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2xlSW50ZXJuYWxSdWxlRGVmczxcbiAgVFZhbHVlIGV4dGVuZHMgYW55ID0gYW55LFxuICBUUGFyYW1zIGV4dGVuZHMgYW55W10gPSBbXSxcbiAgVEFzeW5jIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlLFxuICBUTWV0YWRhdGEgZXh0ZW5kcyBSZWdsZVJ1bGVNZXRhZGF0YURlZmluaXRpb24gPSBib29sZWFuLFxuPiB7XG4gIF92YWxpZGF0b3I6IChcbiAgICB2YWx1ZTogTWF5YmU8VFZhbHVlPixcbiAgICAuLi5hcmdzOiBUUGFyYW1zXG4gICkgPT4gVEFzeW5jIGV4dGVuZHMgZmFsc2UgPyBUTWV0YWRhdGEgOiBQcm9taXNlPFRNZXRhZGF0YT47XG4gIF9tZXNzYWdlOlxuICAgIHwgc3RyaW5nXG4gICAgfCBzdHJpbmdbXVxuICAgIHwgKCh2YWx1ZTogTWF5YmU8VFZhbHVlPiwgbWV0YWRhdGE6IFBvc3NpYmxlUmVnbGVSdWxlTWV0YWRhdGFDb25zdW1lcikgPT4gc3RyaW5nIHwgc3RyaW5nW10pO1xuICBfYWN0aXZlPzpcbiAgICB8IGJvb2xlYW5cbiAgICB8ICgodmFsdWU6IE1heWJlPFRWYWx1ZT4sIG1ldGFkYXRhOiBQb3NzaWJsZVJlZ2xlUnVsZU1ldGFkYXRhQ29uc3VtZXIpID0+IGJvb2xlYW4pO1xuICBfdHlwZT86IHN0cmluZztcbiAgX3BhdGNoZWQ6IGJvb2xlYW47XG4gIF9wYXJhbXM/OiBSZWdsZVVuaXZlcnNhbFBhcmFtczxUUGFyYW1zPjtcbiAgX2FzeW5jOiBUQXN5bmM7XG59XG5cbmV4cG9ydCBlbnVtIEludGVybmFsUnVsZVR5cGUge1xuICBJbmxpbmUgPSAnX19pbmxpbmUnLFxuICBBc3luYyA9ICdfX2FzeW5jJyxcbn1cbiIsImltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IGNvbXB1dGVkLCB0b1JlZnMgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHR5cGUgeyBSZWdsZVZhbGlkYXRpb25Hcm91cEVudHJ5IH0gZnJvbSAnLi4vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUJvb2xlYW5Hcm91cFByb3BlcnRpZXMoXG4gIGVudHJpZXM6IFJlZjxSZWdsZVZhbGlkYXRpb25Hcm91cEVudHJ5W10+LFxuICBwcm9wZXJ0eTogRXh0cmFjdDxcbiAgICBrZXlvZiBSZWdsZVZhbGlkYXRpb25Hcm91cEVudHJ5LFxuICAgICckaW52YWxpZCcgfCAnJGVycm9yJyB8ICckcGVuZGluZycgfCAnJGRpcnR5JyB8ICckdmFsaWQnXG4gID5cbikge1xuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBlbnRyaWVzLnZhbHVlLnNvbWUoKGVudHJ5KSA9PiB7XG4gICAgICByZXR1cm4gZW50cnlbcHJvcGVydHldO1xuICAgIH0pO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFycmF5R3JvdXBQcm9wZXJ0aWVzKFxuICBlbnRyaWVzOiBSZWY8UmVnbGVWYWxpZGF0aW9uR3JvdXBFbnRyeVtdPixcbiAgcHJvcGVydHk6IEV4dHJhY3Q8a2V5b2YgUmVnbGVWYWxpZGF0aW9uR3JvdXBFbnRyeSwgJyRlcnJvcnMnIHwgJyRzaWxlbnRFcnJvcnMnPlxuKSB7XG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGVudHJpZXMudmFsdWUucmVkdWNlKChhbGwsIGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBmZXRjaGVkUHJvcGVydHkgPSBlbnRyeVtwcm9wZXJ0eV0gfHwgW107XG4gICAgICByZXR1cm4gYWxsLmNvbmNhdChmZXRjaGVkUHJvcGVydHkpO1xuICAgIH0sIFtdIGFzIHN0cmluZ1tdKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgdHlwZSB7IENvbXB1dGVkUmVmLCBSZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdFNjb3BlLCByZWFjdGl2ZSwgdG9SYXcsIHdhdGNoIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHtcbiAgJEludGVybmFsUmVnbGVSdWxlTWV0YWRhdGFDb25zdW1lcixcbiAgJEludGVybmFsUmVnbGVSdWxlU3RhdHVzLFxuICBDdXN0b21SdWxlc0RlY2xhcmF0aW9uVHJlZSxcbiAgSW5saW5lUnVsZURlY2xhcmF0aW9uLFxuICBSZWdsZVJ1bGVEZWZpbml0aW9uLFxuICBSZWdsZVJ1bGVEZWZpbml0aW9uUHJvY2Vzc29yLFxuICBSZWdsZVJ1bGVNZXRhZGF0YURlZmluaXRpb24sXG59IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEludGVybmFsUnVsZVR5cGUgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBkZWJvdW5jZSwgaXNFbXB0eSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IHVud3JhcFJ1bGVQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vLi4vY3JlYXRlUnVsZS91bndyYXBSdWxlUGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSB7IFJlZ2xlU3RvcmFnZSB9IGZyb20gJy4uLy4uL3VzZVN0b3JhZ2UnO1xuaW1wb3J0IHsgaXNGb3JtUnVsZURlZmluaXRpb24gfSBmcm9tICcuLi9ndWFyZHMnO1xuXG5pbnRlcmZhY2UgQ3JlYXRlUmVhY3RpdmVSdWxlU3RhdHVzT3B0aW9ucyB7XG4gIHN0YXRlOiBSZWY8dW5rbm93bj47XG4gIHJ1bGVLZXk6IHN0cmluZztcbiAgcnVsZTogUmVmPElubGluZVJ1bGVEZWNsYXJhdGlvbjxhbnksIGFueVtdLCBhbnk+IHwgUmVnbGVSdWxlRGVmaW5pdGlvbjxhbnksIGFueSwgYW55Pj47XG4gICRkaXJ0eTogUmVmPGJvb2xlYW4+O1xuICBjdXN0b21NZXNzYWdlcz86IFBhcnRpYWw8Q3VzdG9tUnVsZXNEZWNsYXJhdGlvblRyZWU+O1xuICBwYXRoOiBzdHJpbmc7XG4gIHN0b3JhZ2U6IFJlZ2xlU3RvcmFnZTtcbiAgJGRlYm91bmNlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVhY3RpdmVSdWxlU3RhdHVzKHtcbiAgJGRpcnR5LFxuICBjdXN0b21NZXNzYWdlcyxcbiAgcnVsZSxcbiAgcnVsZUtleSxcbiAgc3RhdGUsXG4gIHBhdGgsXG4gIHN0b3JhZ2UsXG4gICRkZWJvdW5jZSxcbn06IENyZWF0ZVJlYWN0aXZlUnVsZVN0YXR1c09wdGlvbnMpOiAkSW50ZXJuYWxSZWdsZVJ1bGVTdGF0dXMge1xuICB0eXBlIFNjb3BlU3RhdGUgPSB7XG4gICAgJGFjdGl2ZTogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICAgJG1lc3NhZ2U6IENvbXB1dGVkUmVmPHN0cmluZyB8IHN0cmluZ1tdPjtcbiAgICAkdHlwZTogQ29tcHV0ZWRSZWY8c3RyaW5nPjtcbiAgICAkdmFsaWRhdG9yOiBDb21wdXRlZFJlZjxcbiAgICAgIFJlZ2xlUnVsZURlZmluaXRpb25Qcm9jZXNzb3I8XG4gICAgICAgIGFueSxcbiAgICAgICAgYW55LFxuICAgICAgICBSZWdsZVJ1bGVNZXRhZGF0YURlZmluaXRpb24gfCBQcm9taXNlPFJlZ2xlUnVsZU1ldGFkYXRhRGVmaW5pdGlvbj5cbiAgICAgID5cbiAgICA+O1xuICAgICRwYXJhbXM6IENvbXB1dGVkUmVmPGFueVtdPjtcbiAgICAkcGF0aDogQ29tcHV0ZWRSZWY8c3RyaW5nPjtcbiAgfTtcbiAgbGV0IHNjb3BlID0gZWZmZWN0U2NvcGUoKTtcbiAgbGV0IHNjb3BlU3RhdGUhOiBTY29wZVN0YXRlO1xuXG4gIGxldCAkdW53YXRjaFN0YXRlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0IHsgJHBlbmRpbmcsICR2YWxpZCwgJG1ldGFkYXRhLCAkdmFsaWRhdGluZyB9ID0gc3RvcmFnZS50cnlTZXRSdWxlU3RhdHVzUmVmKFxuICAgIGAke3BhdGh9LiR7cnVsZUtleX1gXG4gICk7XG5cbiAgZnVuY3Rpb24gJHdhdGNoKCkge1xuICAgIHNjb3BlU3RhdGUgPSBzY29wZS5ydW4oKCkgPT4ge1xuICAgICAgY29uc3QgJGRlZmF1bHRNZXRhZGF0YSA9IGNvbXB1dGVkPCRJbnRlcm5hbFJlZ2xlUnVsZU1ldGFkYXRhQ29uc3VtZXI+KCgpID0+ICh7XG4gICAgICAgICRpbnZhbGlkOiAhJHZhbGlkLnZhbHVlLFxuICAgICAgICAkcGFyYW1zOiAkcGFyYW1zLnZhbHVlLFxuICAgICAgICAuLi4kbWV0YWRhdGEudmFsdWUsXG4gICAgICB9KSk7XG5cbiAgICAgIGNvbnN0ICRhY3RpdmUgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIGlmIChpc0Zvcm1SdWxlRGVmaW5pdGlvbihydWxlKSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgcnVsZS52YWx1ZS5hY3RpdmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBydWxlLnZhbHVlLmFjdGl2ZShzdGF0ZS52YWx1ZSwgJGRlZmF1bHRNZXRhZGF0YS52YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBydWxlLnZhbHVlLmFjdGl2ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkbWVzc2FnZSA9IGNvbXB1dGVkPHN0cmluZyB8IHN0cmluZ1tdPigoKSA9PiB7XG4gICAgICAgIGxldCBtZXNzYWdlOiBzdHJpbmcgfCBzdHJpbmdbXSA9ICcnO1xuICAgICAgICBjb25zdCBjdXN0b21NZXNzYWdlUnVsZSA9IGN1c3RvbU1lc3NhZ2VzID8gY3VzdG9tTWVzc2FnZXNbcnVsZUtleV0/Lm1lc3NhZ2UgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGN1c3RvbU1lc3NhZ2VSdWxlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXN0b21NZXNzYWdlUnVsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbWVzc2FnZSA9IGN1c3RvbU1lc3NhZ2VSdWxlKHN0YXRlLnZhbHVlLCAkZGVmYXVsdE1ldGFkYXRhLnZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZSA9IGN1c3RvbU1lc3NhZ2VSdWxlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGb3JtUnVsZURlZmluaXRpb24ocnVsZSkpIHtcbiAgICAgICAgICBpZiAoIShjdXN0b21NZXNzYWdlUnVsZSAmJiAhcnVsZS52YWx1ZS5fcGF0Y2hlZCkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZS52YWx1ZS5tZXNzYWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSBydWxlLnZhbHVlLm1lc3NhZ2Uoc3RhdGUudmFsdWUsICRkZWZhdWx0TWV0YWRhdGEudmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IHJ1bGUudmFsdWUubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNFbXB0eShtZXNzYWdlKSkge1xuICAgICAgICAgIG1lc3NhZ2UgPSAnRXJyb3InO1xuICAgICAgICAgIGNvbnNvbGUud2FybihgTm8gZXJyb3IgbWVzc2FnZSBkZWZpbmVkIGZvciAke3BhdGh9LiR7cnVsZUtleX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICR0eXBlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAoaXNGb3JtUnVsZURlZmluaXRpb24ocnVsZSkgJiYgcnVsZS52YWx1ZS50eXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHJ1bGUudmFsdWUudHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcnVsZUtleTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICR2YWxpZGF0b3IgPSBjb21wdXRlZDxcbiAgICAgICAgUmVnbGVSdWxlRGVmaW5pdGlvblByb2Nlc3NvcjxhbnksIGFueSwgYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4+XG4gICAgICA+KCgpID0+IHtcbiAgICAgICAgaWYgKGlzRm9ybVJ1bGVEZWZpbml0aW9uKHJ1bGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHJ1bGUudmFsdWUudmFsaWRhdG9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBydWxlLnZhbHVlIGFzIElubGluZVJ1bGVEZWNsYXJhdGlvbjxhbnksIGFueVtdLCBhbnk+O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJHBhcmFtcyA9IGNvbXB1dGVkPGFueVtdPigoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcnVsZS52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW53cmFwUnVsZVBhcmFtZXRlcnMocnVsZS52YWx1ZS5fcGFyYW1zID8/IFtdKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkcGF0aCA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4gYCR7cGF0aH0uJHskdHlwZS52YWx1ZX1gKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJGFjdGl2ZSxcbiAgICAgICAgJG1lc3NhZ2UsXG4gICAgICAgICR0eXBlLFxuICAgICAgICAkdmFsaWRhdG9yLFxuICAgICAgICAkcGFyYW1zLFxuICAgICAgICAkcGF0aCxcbiAgICAgIH0gc2F0aXNmaWVzIFNjb3BlU3RhdGU7XG4gICAgfSkhO1xuXG4gICAgJHVud2F0Y2hTdGF0ZSA9IHdhdGNoKHNjb3BlU3RhdGUuJHBhcmFtcywgJHZhbGlkYXRlLCB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgJHdhdGNoKCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gY29tcHV0ZUFzeW5jUmVzdWx0KHByb21pc2U6IFByb21pc2U8UmVnbGVSdWxlTWV0YWRhdGFEZWZpbml0aW9uPikge1xuICAgIGxldCBydWxlUmVzdWx0ID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICR2YWxpZC52YWx1ZSA9IHRydWU7XG4gICAgICBpZiAoJGRpcnR5LnZhbHVlKSB7XG4gICAgICAgICRwZW5kaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByb21pc2VSZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuICAgICAgaWYgKHR5cGVvZiBwcm9taXNlUmVzdWx0ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcnVsZVJlc3VsdCA9IHByb21pc2VSZXN1bHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7ICR2YWxpZCwgLi4ucmVzdCB9ID0gcHJvbWlzZVJlc3VsdDtcbiAgICAgICAgcnVsZVJlc3VsdCA9ICR2YWxpZDtcbiAgICAgICAgJG1ldGFkYXRhLnZhbHVlID0gcmVzdDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBydWxlUmVzdWx0ID0gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICRwZW5kaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVSZXN1bHQ7XG4gIH1cblxuICBjb25zdCAkY29tcHV0ZUFzeW5jRGVib3VuY2UgPSBkZWJvdW5jZShjb21wdXRlQXN5bmNSZXN1bHQsICRkZWJvdW5jZSA/PyAxMDApO1xuXG4gIGFzeW5jIGZ1bmN0aW9uICR2YWxpZGF0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAkdmFsaWRhdGluZy52YWx1ZSA9IHRydWU7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NvcGVTdGF0ZS4kdmFsaWRhdG9yLnZhbHVlO1xuICAgIGxldCBydWxlUmVzdWx0ID0gZmFsc2U7XG4gICAgY29uc3QgcmVzdWx0T3JQcm9taXNlID0gdmFsaWRhdG9yKHN0YXRlLnZhbHVlLCAuLi5zY29wZVN0YXRlLiRwYXJhbXMudmFsdWUpO1xuXG4gICAgaWYgKHJlc3VsdE9yUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIGNvbnN0IHByb21pc2VEZWJvdW5jZSA9ICRjb21wdXRlQXN5bmNEZWJvdW5jZShyZXN1bHRPclByb21pc2UpO1xuICAgICAgcnVsZVJlc3VsdCA9IGF3YWl0IHByb21pc2VEZWJvdW5jZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJlc3VsdE9yUHJvbWlzZSAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0T3JQcm9taXNlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBydWxlUmVzdWx0ID0gcmVzdWx0T3JQcm9taXNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHsgJHZhbGlkLCAuLi5yZXN0IH0gPSByZXN1bHRPclByb21pc2U7XG4gICAgICAgICAgcnVsZVJlc3VsdCA9ICR2YWxpZDtcbiAgICAgICAgICAkbWV0YWRhdGEudmFsdWUgPSByZXN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgICR2YWxpZC52YWx1ZSA9IHJ1bGVSZXN1bHQ7XG5cbiAgICAkdmFsaWRhdGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHJ1bGVSZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiAkcmVzZXQoKSB7XG4gICAgJHZhbGlkLnZhbHVlID0gdHJ1ZTtcbiAgICAkbWV0YWRhdGEudmFsdWUgPSB7fTtcbiAgICAkcGVuZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICR2YWxpZGF0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAkd2F0Y2goKTtcbiAgfVxuXG4gIGZ1bmN0aW9uICR1bndhdGNoKCkge1xuICAgICR1bndhdGNoU3RhdGUoKTtcbiAgICBzY29wZS5zdG9wKCk7XG4gICAgc2NvcGUgPSBlZmZlY3RTY29wZSgpO1xuICB9XG5cbiAgcmV0dXJuIHJlYWN0aXZlKHtcbiAgICAuLi5zY29wZVN0YXRlLFxuICAgICRwZW5kaW5nLFxuICAgICR2YWxpZCxcbiAgICAkbWV0YWRhdGEsXG4gICAgJHZhbGlkYXRlLFxuICAgICR1bndhdGNoLFxuICAgICR3YXRjaCxcbiAgICAkcmVzZXQsXG4gIH0pIHNhdGlzZmllcyAkSW50ZXJuYWxSZWdsZVJ1bGVTdGF0dXM7XG59XG4iLCJpbXBvcnQgdHlwZSB7IENvbXB1dGVkUmVmLCBSZWYsIFdhdGNoU3RvcEhhbmRsZSB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0U2NvcGUsIHJlYWN0aXZlLCByZWYsIHRvUmVmLCB1bnJlZiwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuaW1wb3J0IHR5cGUge1xuICAkSW50ZXJuYWxSZWdsZUZpZWxkU3RhdHVzLFxuICAkSW50ZXJuYWxSZWdsZVJ1bGVEZWNsLFxuICAkSW50ZXJuYWxSZWdsZVJ1bGVTdGF0dXMsXG4gIEN1c3RvbVJ1bGVzRGVjbGFyYXRpb25UcmVlLFxuICBGaWVsZFJlZ2xlQmVoYXZpb3VyT3B0aW9ucyxcbiAgUmVnbGVSdWxlRGVjbCxcbiAgUmVzb2x2ZWRSZWdsZUJlaGF2aW91ck9wdGlvbnMsXG59IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGRlYm91bmNlLCBpc0VtcHR5LCBpc1Z1ZVN1cGVyaW9yT3JFcXVhbFRvM2RvdEZpdmUgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFJlZ2xlU3RvcmFnZSB9IGZyb20gJy4uLy4uL3VzZVN0b3JhZ2UnO1xuaW1wb3J0IHsgZXh0cmFjdFJ1bGVzRXJyb3JzIH0gZnJvbSAnLi4vdXNlRXJyb3JzJztcbmltcG9ydCB7IGNyZWF0ZVJlYWN0aXZlUnVsZVN0YXR1cyB9IGZyb20gJy4vY3JlYXRlUmVhY3RpdmVSdWxlU3RhdHVzJztcblxuaW50ZXJmYWNlIENyZWF0ZVJlYWN0aXZlRmllbGRTdGF0dXNBcmdzIHtcbiAgc3RhdGU6IFJlZjx1bmtub3duPjtcbiAgcnVsZXNEZWY6IFJlZjwkSW50ZXJuYWxSZWdsZVJ1bGVEZWNsPjtcbiAgY3VzdG9tTWVzc2FnZXM/OiBDdXN0b21SdWxlc0RlY2xhcmF0aW9uVHJlZTtcbiAgcGF0aDogc3RyaW5nO1xuICBpbmRleD86IG51bWJlcjtcbiAgc3RvcmFnZTogUmVnbGVTdG9yYWdlO1xuICBvcHRpb25zOiBSZXNvbHZlZFJlZ2xlQmVoYXZpb3VyT3B0aW9ucztcbiAgZXh0ZXJuYWxFcnJvcnM6IFJlYWRvbmx5PFJlZjxzdHJpbmdbXSB8IHVuZGVmaW5lZD4+O1xuICBvblVud2F0Y2g/OiAoKSA9PiB2b2lkO1xufVxuXG50eXBlIFNjb3BlUmV0dXJuU3RhdGUgPSB7XG4gICRlcnJvcjogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICRlcnJvcnM6IENvbXB1dGVkUmVmPHN0cmluZ1tdPjtcbiAgJHNpbGVudEVycm9yczogQ29tcHV0ZWRSZWY8c3RyaW5nW10+O1xuICAkcGVuZGluZzogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICRpbnZhbGlkOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgJHZhbGlkOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgJGRlYm91bmNlOiBDb21wdXRlZFJlZjxudW1iZXIgfCB1bmRlZmluZWQ+O1xuICAkbGF6eTogQ29tcHV0ZWRSZWY8Ym9vbGVhbiB8IHVuZGVmaW5lZD47XG4gICRyZXdhcmRFYXJseTogQ29tcHV0ZWRSZWY8Ym9vbGVhbiB8IHVuZGVmaW5lZD47XG4gICRhdXRvRGlydHk6IENvbXB1dGVkUmVmPGJvb2xlYW4gfCB1bmRlZmluZWQ+O1xuICAkYW55RGlydHk6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlYWN0aXZlRmllbGRTdGF0dXMoe1xuICBzdGF0ZSxcbiAgcnVsZXNEZWYsXG4gIGN1c3RvbU1lc3NhZ2VzLFxuICBwYXRoLFxuICBzdG9yYWdlLFxuICBvcHRpb25zLFxuICBleHRlcm5hbEVycm9ycyxcbiAgaW5kZXgsXG4gIG9uVW53YXRjaCxcbn06IENyZWF0ZVJlYWN0aXZlRmllbGRTdGF0dXNBcmdzKTogJEludGVybmFsUmVnbGVGaWVsZFN0YXR1cyB7XG4gIGxldCBzY29wZSA9IGVmZmVjdFNjb3BlKCk7XG4gIGxldCBzY29wZVN0YXRlITogU2NvcGVSZXR1cm5TdGF0ZTtcblxuICBjb25zdCAkZGlydHkgPSByZWYoZmFsc2UpO1xuXG4gIGNvbnN0IHRyaWdnZXJQdW5pc2htZW50ID0gcmVmKGZhbHNlKTtcblxuICBjb25zdCAkZXh0ZXJuYWxFcnJvcnMgPSByZWY8c3RyaW5nW10gfCB1bmRlZmluZWQ+KFtdKTtcblxuICBsZXQgJHVud2F0Y2hTdGF0ZTogV2F0Y2hTdG9wSGFuZGxlO1xuICBsZXQgJHVud2F0Y2hWYWxpZDogV2F0Y2hTdG9wSGFuZGxlO1xuICBsZXQgJHVud2F0Y2hFeHRlcm5hbEVycm9yczogV2F0Y2hTdG9wSGFuZGxlO1xuICBsZXQgJHVud2F0Y2hEaXJ0eTogV2F0Y2hTdG9wSGFuZGxlO1xuXG4gIGxldCAkY29tbWl0ID0gKCkgPT4ge307XG5cbiAgZnVuY3Rpb24gY29sbGVjdEV4dGVybmFsRXJyb3JzKCkge1xuICAgICRleHRlcm5hbEVycm9ycy52YWx1ZSA9IGV4dGVybmFsRXJyb3JzLnZhbHVlID8/IFtdO1xuICB9XG4gIGNvbGxlY3RFeHRlcm5hbEVycm9ycygpO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlYWN0aXZlUnVsZXNSZXN1bHQoKSB7XG4gICAgY29uc3QgZGVjbGFyZWRSdWxlcyA9IHJ1bGVzRGVmLnZhbHVlIGFzIFJlZ2xlUnVsZURlY2w8YW55LCBhbnk+O1xuICAgIGNvbnN0IHN0b3JlUmVzdWx0ID0gc3RvcmFnZS5jaGVja1J1bGVEZWNsRW50cnkocGF0aCwgZGVjbGFyZWRSdWxlcyk7XG5cbiAgICAkbG9jYWxPcHRpb25zLnZhbHVlID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMoZGVjbGFyZWRSdWxlcykuZmlsdGVyKChbcnVsZUtleV0pID0+IHJ1bGVLZXkuc3RhcnRzV2l0aCgnJCcpKVxuICAgICk7XG5cbiAgICAkcnVsZXMudmFsdWUgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhydWxlc0RlZi52YWx1ZSlcbiAgICAgICAgLmZpbHRlcigoW3J1bGVLZXldKSA9PiAhcnVsZUtleS5zdGFydHNXaXRoKCckJykpXG4gICAgICAgIC5tYXAoKFtydWxlS2V5LCBydWxlXSkgPT4ge1xuICAgICAgICAgIGlmIChydWxlKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlUmVmID0gdG9SZWYoKCkgPT4gcnVsZSk7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBydWxlS2V5LFxuICAgICAgICAgICAgICBjcmVhdGVSZWFjdGl2ZVJ1bGVTdGF0dXMoe1xuICAgICAgICAgICAgICAgICRkaXJ0eSxcbiAgICAgICAgICAgICAgICBjdXN0b21NZXNzYWdlcyxcbiAgICAgICAgICAgICAgICBydWxlOiBydWxlUmVmIGFzIGFueSxcbiAgICAgICAgICAgICAgICBydWxlS2V5LFxuICAgICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgICAgICAkZGVib3VuY2U6ICRsb2NhbE9wdGlvbnMudmFsdWUuJGRlYm91bmNlLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigocnVsZURlZik6IHJ1bGVEZWYgaXMgW3N0cmluZywgJEludGVybmFsUmVnbGVSdWxlU3RhdHVzXSA9PiAhIXJ1bGVEZWYubGVuZ3RoKVxuICAgICk7XG5cbiAgICAkd2F0Y2goKTtcblxuICAgICRjb21taXQgPSBzY29wZVN0YXRlLiRkZWJvdW5jZS52YWx1ZVxuICAgICAgPyBkZWJvdW5jZSgkY29tbWl0SGFuZGxlciwgc2NvcGVTdGF0ZS4kZGVib3VuY2UudmFsdWUgPz8gMClcbiAgICAgIDogJGNvbW1pdEhhbmRsZXI7XG5cbiAgICBpZiAoc3RvcmVSZXN1bHQ/LnZhbGlkICE9IG51bGwpIHtcbiAgICAgICRkaXJ0eS52YWx1ZSA9IHN0b3JhZ2UuZ2V0RGlydHlTdGF0ZShwYXRoKTtcbiAgICAgIGlmICgkZGlydHkudmFsdWUpIHtcbiAgICAgICAgJGNvbW1pdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0b3JhZ2UuYWRkUnVsZURlY2xFbnRyeShwYXRoLCBkZWNsYXJlZFJ1bGVzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uICR1bndhdGNoKCkge1xuICAgIGlmICgkcnVsZXMudmFsdWUpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKCRydWxlcy52YWx1ZSkuZm9yRWFjaCgoW18sIHJ1bGVdKSA9PiB7XG4gICAgICAgIHJ1bGUuJHVud2F0Y2goKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAkdW53YXRjaERpcnR5KCk7XG4gICAgaWYgKCRkaXJ0eS52YWx1ZSkge1xuICAgICAgc3RvcmFnZS5zZXREaXJ0eUVudHJ5KHBhdGgsICRkaXJ0eS52YWx1ZSk7XG4gICAgfVxuICAgICR1bndhdGNoU3RhdGUoKTtcbiAgICAkdW53YXRjaFZhbGlkKCk7XG4gICAgJHVud2F0Y2hFeHRlcm5hbEVycm9ycygpO1xuICAgIHNjb3BlLnN0b3AoKTtcbiAgICBzY29wZSA9IGVmZmVjdFNjb3BlKCk7XG4gICAgb25VbndhdGNoPy4oKTtcbiAgfVxuXG4gIGZ1bmN0aW9uICR3YXRjaCgpIHtcbiAgICBpZiAoJHJ1bGVzLnZhbHVlKSB7XG4gICAgICBPYmplY3QuZW50cmllcygkcnVsZXMudmFsdWUpLmZvckVhY2goKFtfLCBydWxlXSkgPT4ge1xuICAgICAgICBydWxlLiR3YXRjaCgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHNjb3BlU3RhdGUgPSBzY29wZS5ydW4oKCkgPT4ge1xuICAgICAgY29uc3QgJGFueURpcnR5ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gJGRpcnR5LnZhbHVlKTtcbiAgICAgIGNvbnN0ICRkZWJvdW5jZSA9IGNvbXB1dGVkPG51bWJlciB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gJGxvY2FsT3B0aW9ucy52YWx1ZS4kZGVib3VuY2U7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJGxhenkgPSBjb21wdXRlZDxib29sZWFuIHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgICAgIGlmICgkbG9jYWxPcHRpb25zLnZhbHVlLiRsYXp5ICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gJGxvY2FsT3B0aW9ucy52YWx1ZS4kbGF6eTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5yZWYob3B0aW9ucy5sYXp5KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkcmV3YXJkRWFybHkgPSBjb21wdXRlZDxib29sZWFuIHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgICAgIGlmICgkbG9jYWxPcHRpb25zLnZhbHVlLiRyZXdhcmRFYXJseSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuICRsb2NhbE9wdGlvbnMudmFsdWUuJHJld2FyZEVhcmx5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bnJlZihvcHRpb25zLnJld2FyZEVhcmx5KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkYXV0b0RpcnR5ID0gY29tcHV0ZWQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgICAgICBpZiAoJGxvY2FsT3B0aW9ucy52YWx1ZS4kYXV0b0RpcnR5ICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gJGxvY2FsT3B0aW9ucy52YWx1ZS4kYXV0b0RpcnR5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bnJlZihvcHRpb25zLmF1dG9EaXJ0eSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJGVycm9yID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gJGludmFsaWQudmFsdWUgJiYgISRwZW5kaW5nLnZhbHVlICYmICRkaXJ0eS52YWx1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkZXJyb3JzID0gY29tcHV0ZWQ8c3RyaW5nW10+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RSdWxlc0Vycm9ycyh7XG4gICAgICAgICAgZmllbGQ6IHtcbiAgICAgICAgICAgICRkaXJ0eTogJGRpcnR5LnZhbHVlLFxuICAgICAgICAgICAgJGV4dGVybmFsRXJyb3JzOiAkZXh0ZXJuYWxFcnJvcnMudmFsdWUsXG4gICAgICAgICAgICAkcnVsZXM6ICRydWxlcy52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkc2lsZW50RXJyb3JzID0gY29tcHV0ZWQ8c3RyaW5nW10+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RSdWxlc0Vycm9ycyh7XG4gICAgICAgICAgZmllbGQ6IHtcbiAgICAgICAgICAgICRkaXJ0eTogJGRpcnR5LnZhbHVlLFxuICAgICAgICAgICAgJGV4dGVybmFsRXJyb3JzOiAkZXh0ZXJuYWxFcnJvcnMudmFsdWUsXG4gICAgICAgICAgICAkcnVsZXM6ICRydWxlcy52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJHBlbmRpbmcgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIGlmICh0cmlnZ2VyUHVuaXNobWVudC52YWx1ZSB8fCAhJHJld2FyZEVhcmx5LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKCRydWxlcy52YWx1ZSkuc29tZSgoW2tleSwgcnVsZVJlc3VsdF0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBydWxlUmVzdWx0LiRwZW5kaW5nO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkaW52YWxpZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgaWYgKCRleHRlcm5hbEVycm9ycy52YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoISRyZXdhcmRFYXJseS52YWx1ZSB8fCAoJHJld2FyZEVhcmx5LnZhbHVlICYmIHRyaWdnZXJQdW5pc2htZW50LnZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcygkcnVsZXMudmFsdWUpLnNvbWUoKFtrZXksIHJ1bGVSZXN1bHRdKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIXJ1bGVSZXN1bHQuJHZhbGlkO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkdmFsaWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIGlmICgkZGlydHkudmFsdWUgJiYgIWlzRW1wdHkoc3RhdGUudmFsdWUpKSB7XG4gICAgICAgICAgaWYgKCRleHRlcm5hbEVycm9ycy52YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmICgkcmV3YXJkRWFybHkudmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcygkcnVsZXMudmFsdWUpLmV2ZXJ5KChba2V5LCBydWxlUmVzdWx0XSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcnVsZVJlc3VsdC4kdmFsaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICEkaW52YWxpZC52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICAgIHdhdGNoKCR2YWxpZCwgKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRyaWdnZXJQdW5pc2htZW50LnZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAkZXJyb3IsXG4gICAgICAgICRwZW5kaW5nLFxuICAgICAgICAkaW52YWxpZCxcbiAgICAgICAgJHZhbGlkLFxuICAgICAgICAkZGVib3VuY2UsXG4gICAgICAgICRsYXp5LFxuICAgICAgICAkZXJyb3JzLFxuICAgICAgICAkc2lsZW50RXJyb3JzLFxuICAgICAgICAkcmV3YXJkRWFybHksXG4gICAgICAgICRhdXRvRGlydHksXG4gICAgICAgICRhbnlEaXJ0eSxcbiAgICAgIH0gc2F0aXNmaWVzIFNjb3BlUmV0dXJuU3RhdGU7XG4gICAgfSkgYXMgU2NvcGVSZXR1cm5TdGF0ZTtcblxuICAgICR1bndhdGNoRXh0ZXJuYWxFcnJvcnMgPSB3YXRjaChleHRlcm5hbEVycm9ycywgY29sbGVjdEV4dGVybmFsRXJyb3JzKTtcbiAgICAkdW53YXRjaFN0YXRlID0gd2F0Y2goXG4gICAgICBzdGF0ZSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHNjb3BlU3RhdGUuJGF1dG9EaXJ0eS52YWx1ZSkge1xuICAgICAgICAgIGlmICghJGRpcnR5LnZhbHVlKSB7XG4gICAgICAgICAgICAkZGlydHkudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocnVsZXNEZWYudmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgIGNyZWF0ZVJlYWN0aXZlUnVsZXNSZXN1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICAkY29tbWl0KCk7XG4gICAgICAgIGlmICghc2NvcGVTdGF0ZS4kcmV3YXJkRWFybHkudmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgLy8gJGNsZWFyRXh0ZXJuYWxFcnJvcnMoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgZGVlcDogaXNWdWVTdXBlcmlvck9yRXF1YWxUbzNkb3RGaXZlID8gMSA6IHRydWUgfVxuICAgICk7XG5cbiAgICAkdW53YXRjaERpcnR5ID0gd2F0Y2goJGRpcnR5LCAoKSA9PiB7XG4gICAgICBzdG9yYWdlLnNldERpcnR5RW50cnkocGF0aCwgJGRpcnR5LnZhbHVlKTtcbiAgICB9KTtcblxuICAgICR1bndhdGNoVmFsaWQgPSB3YXRjaChzY29wZVN0YXRlLiR2YWxpZCwgKHZhbGlkKSA9PiB7XG4gICAgICBpZiAoc2NvcGVTdGF0ZS4kcmV3YXJkRWFybHkudmFsdWUgJiYgdmFsaWQpIHtcbiAgICAgICAgdHJpZ2dlclB1bmlzaG1lbnQudmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uICRjb21taXRIYW5kbGVyKCkge1xuICAgIE9iamVjdC5lbnRyaWVzKCRydWxlcy52YWx1ZSkuZm9yRWFjaCgoW2tleSwgcnVsZV0pID0+IHtcbiAgICAgIHJ1bGUuJHZhbGlkYXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCAkcnVsZXMgPSByZWYoKSBhcyBSZWY8UmVjb3JkPHN0cmluZywgJEludGVybmFsUmVnbGVSdWxlU3RhdHVzPj47XG4gIGNvbnN0ICRsb2NhbE9wdGlvbnMgPSByZWYoKSBhcyBSZWY8RmllbGRSZWdsZUJlaGF2aW91ck9wdGlvbnM+O1xuXG4gIGNyZWF0ZVJlYWN0aXZlUnVsZXNSZXN1bHQoKTtcblxuICBmdW5jdGlvbiAkcmVzZXQoKTogdm9pZCB7XG4gICAgJGRpcnR5LnZhbHVlID0gZmFsc2U7XG4gICAgJGV4dGVybmFsRXJyb3JzLnZhbHVlID0gW107XG4gICAgT2JqZWN0LmVudHJpZXMoJHJ1bGVzLnZhbHVlKS5mb3JFYWNoKChba2V5LCBydWxlXSkgPT4ge1xuICAgICAgcnVsZS4kcmVzZXQoKTtcbiAgICB9KTtcbiAgICBpZiAoIXNjb3BlU3RhdGUuJGxhenkudmFsdWUpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKCRydWxlcy52YWx1ZSkubWFwKChba2V5LCBydWxlXSkgPT4ge1xuICAgICAgICByZXR1cm4gcnVsZS4kdmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uICR0b3VjaCgpOiB2b2lkIHtcbiAgICBpZiAoISRkaXJ0eS52YWx1ZSkge1xuICAgICAgJGRpcnR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgIGlmICghc2NvcGVTdGF0ZS4kcmV3YXJkRWFybHkudmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vICRjbGVhckV4dGVybmFsRXJyb3JzKCk7XG4gICAgICB9XG4gICAgICAkY29tbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgJHZhbGlkYXRlID0gc2NvcGVTdGF0ZS4kZGVib3VuY2UudmFsdWVcbiAgICA/IGRlYm91bmNlKCR2YWxpZGF0ZUhhbmRsZXIsIHNjb3BlU3RhdGUuJGRlYm91bmNlLnZhbHVlID8/IDApXG4gICAgOiAkdmFsaWRhdGVIYW5kbGVyO1xuXG4gIGFzeW5jIGZ1bmN0aW9uICR2YWxpZGF0ZUhhbmRsZXIoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRyaWdnZXJQdW5pc2htZW50LnZhbHVlID0gdHJ1ZTtcbiAgICAgIGlmIChzY29wZVN0YXRlLiRhdXRvRGlydHkudmFsdWUgJiYgJGRpcnR5LnZhbHVlICYmICFzY29wZVN0YXRlLiRwZW5kaW5nLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiAhc2NvcGVTdGF0ZS4kZXJyb3IudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5lbnRyaWVzKCRydWxlcy52YWx1ZSkubWFwKChba2V5LCBydWxlXSkgPT4ge1xuICAgICAgICAgIHJldHVybiBydWxlLiR2YWxpZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uICRjbGVhckV4dGVybmFsRXJyb3JzKCkge1xuICAgICRleHRlcm5hbEVycm9ycy52YWx1ZSA9IFtdO1xuICB9XG5cbiAgaWYgKCFzY29wZVN0YXRlLiRsYXp5LnZhbHVlKSB7XG4gICAgJHZhbGlkYXRlSGFuZGxlcigpO1xuICB9XG5cbiAgcmV0dXJuIHJlYWN0aXZlKHtcbiAgICAkZGlydHksXG4gICAgLi4uc2NvcGVTdGF0ZSxcbiAgICAkZXh0ZXJuYWxFcnJvcnMsXG4gICAgJHZhbHVlOiBzdGF0ZSxcbiAgICAkcnVsZXM6ICRydWxlcyxcbiAgICAkcmVzZXQsXG4gICAgJHRvdWNoLFxuICAgICR2YWxpZGF0ZSxcbiAgICAkdW53YXRjaCxcbiAgICAkd2F0Y2gsXG4gICAgJGNsZWFyRXh0ZXJuYWxFcnJvcnMsXG4gIH0pIHNhdGlzZmllcyAkSW50ZXJuYWxSZWdsZUZpZWxkU3RhdHVzO1xufVxuIiwiaW1wb3J0IHR5cGUgeyBSZXF1aXJlZERlZXAgfSBmcm9tICd0eXBlLWZlc3QnO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlZFJlZiwgUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3RTY29wZSwgcmVhY3RpdmUsIHJlZiwgdG9SZWYsIHdhdGNoIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHtcbiAgJEludGVybmFsRXh0ZXJuYWxSZWdsZUVycm9ycyxcbiAgJEludGVybmFsRm9ybVByb3BlcnR5VHlwZXMsXG4gICRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvbkVycm9ycyxcbiAgJEludGVybmFsUmVnbGVDb2xsZWN0aW9uUnVsZURlY2wsXG4gICRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvblN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVGaWVsZFN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlLFxuICBDdXN0b21SdWxlc0RlY2xhcmF0aW9uVHJlZSxcbiAgRGVlcE1heWJlUmVmLFxuICBSZWdsZUJlaGF2aW91ck9wdGlvbnMsXG4gIFJlZ2xlQ29sbGVjdGlvblJ1bGVEZWNsS2V5UHJvcGVydHksXG4gIFJlc29sdmVkUmVnbGVCZWhhdmlvdXJPcHRpb25zLFxufSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIHJhbmRvbUlkLCB1bndyYXBHZXR0ZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBpc1Z1ZVN1cGVyaW9yT3JFcXVhbFRvM2RvdEZpdmUgfSBmcm9tICcuLi8uLi8uLi91dGlscy92ZXJzaW9uLWNvbXBhcmUnO1xuaW1wb3J0IHR5cGUgeyBSZWdsZVN0b3JhZ2UgfSBmcm9tICcuLi8uLi91c2VTdG9yYWdlJztcbmltcG9ydCB7IGlzRXh0ZXJuYWxFcnJvckNvbGxlY3Rpb24sIGlzUnVsZURlZiB9IGZyb20gJy4uL2d1YXJkcyc7XG5pbXBvcnQgeyBleHRyYWN0Q29sbGVjdGlvbkVycm9yLCBleHRyYWN0UnVsZXNFcnJvcnMgfSBmcm9tICcuLi91c2VFcnJvcnMnO1xuaW1wb3J0IHsgY3JlYXRlUmVhY3RpdmVGaWVsZFN0YXR1cyB9IGZyb20gJy4vY3JlYXRlUmVhY3RpdmVGaWVsZFN0YXR1cyc7XG5pbXBvcnQgeyBjcmVhdGVSZWFjdGl2ZUNoaWxkcmVuU3RhdHVzIH0gZnJvbSAnLi9jcmVhdGVSZWFjdGl2ZU5lc3RlZFN0YXR1cyc7XG5cbnR5cGUgU3RhdGVXaXRoSWQgPSB1bmtub3duICYgeyAkaWQ/OiBzdHJpbmcgfTtcblxuZnVuY3Rpb24gY3JlYXRlQ29sbGVjdGlvbkVsZW1lbnQoe1xuICAkaWQsXG4gIHBhdGgsXG4gIGluZGV4LFxuICBvcHRpb25zLFxuICBzdG9yYWdlLFxuICBzdGF0ZVZhbHVlLFxuICBjdXN0b21NZXNzYWdlcyxcbiAgcnVsZXMsXG4gIGV4dGVybmFsRXJyb3JzLFxufToge1xuICAkaWQ6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBpbmRleDogbnVtYmVyO1xuICBzdGF0ZVZhbHVlOiBSZWY8U3RhdGVXaXRoSWQ+O1xuICBjdXN0b21NZXNzYWdlcz86IEN1c3RvbVJ1bGVzRGVjbGFyYXRpb25UcmVlO1xuICBzdG9yYWdlOiBSZWdsZVN0b3JhZ2U7XG4gIG9wdGlvbnM6IERlZXBNYXliZVJlZjxSZXF1aXJlZERlZXA8UmVnbGVCZWhhdmlvdXJPcHRpb25zPj47XG4gIHJ1bGVzOiAkSW50ZXJuYWxGb3JtUHJvcGVydHlUeXBlcyAmIFJlZ2xlQ29sbGVjdGlvblJ1bGVEZWNsS2V5UHJvcGVydHk7XG4gIGV4dGVybmFsRXJyb3JzOiBDb21wdXRlZFJlZjwkSW50ZXJuYWxFeHRlcm5hbFJlZ2xlRXJyb3JzW10gfCB1bmRlZmluZWQ+O1xufSk6ICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZSB8IG51bGwge1xuICBjb25zdCAkZmllbGRJZCA9IHJ1bGVzLiRrZXkgPyBydWxlcy4ka2V5IDogcmFuZG9tSWQoKTtcbiAgbGV0ICRwYXRoID0gYCR7cGF0aH0uJHtTdHJpbmcoJGZpZWxkSWQpfWA7XG5cbiAgaWYgKHR5cGVvZiBzdGF0ZVZhbHVlLnZhbHVlID09PSAnb2JqZWN0JyAmJiBzdGF0ZVZhbHVlLnZhbHVlICE9IG51bGwpIHtcbiAgICBpZiAoIXN0YXRlVmFsdWUudmFsdWUuJGlkKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdGF0ZVZhbHVlLnZhbHVlLCB7XG4gICAgICAgICRpZDoge1xuICAgICAgICAgIHZhbHVlOiAkZmllbGRJZCxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAkcGF0aCA9IGAke3BhdGh9LiR7c3RhdGVWYWx1ZS52YWx1ZS4kaWR9YDtcbiAgICB9XG4gIH1cblxuICBjb25zdCAkZXh0ZXJuYWxFcnJvcnMgPSB0b1JlZigoKSA9PiBleHRlcm5hbEVycm9ycy52YWx1ZT8uW2luZGV4XSk7XG5cbiAgY29uc3QgJHN0YXR1cyA9IGNyZWF0ZVJlYWN0aXZlQ2hpbGRyZW5TdGF0dXMoe1xuICAgIHN0YXRlOiBzdGF0ZVZhbHVlLFxuICAgIHJ1bGVzRGVmOiB0b1JlZigoKSA9PiBydWxlcyksXG4gICAgY3VzdG9tTWVzc2FnZXMsXG4gICAgcGF0aDogJHBhdGgsXG4gICAgc3RvcmFnZSxcbiAgICBvcHRpb25zLFxuICAgIGV4dGVybmFsRXJyb3JzOiAkZXh0ZXJuYWxFcnJvcnMsXG4gIH0pO1xuXG4gIGlmICgkc3RhdHVzKSB7XG4gICAgY29uc3QgdmFsdWVJZCA9IHN0YXRlVmFsdWUudmFsdWU/LiRpZDtcbiAgICAkc3RhdHVzLiRpZCA9IHZhbHVlSWQgPz8gU3RyaW5nKCRmaWVsZElkKTtcbiAgICBzdG9yYWdlLmFkZEFycmF5U3RhdHVzKCRpZCwgJHN0YXR1cy4kaWQsICRzdGF0dXMpO1xuICB9XG5cbiAgcmV0dXJuICRzdGF0dXM7XG59XG5cbmludGVyZmFjZSBDcmVhdGVSZWFjdGl2ZUNvbGxlY3Rpb25TdGF0dXNBcmdzIHtcbiAgc3RhdGU6IFJlZjxTdGF0ZVdpdGhJZFtdICYgU3RhdGVXaXRoSWQ+O1xuICBydWxlc0RlZjogUmVmPCRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvblJ1bGVEZWNsPjtcbiAgY3VzdG9tTWVzc2FnZXM/OiBDdXN0b21SdWxlc0RlY2xhcmF0aW9uVHJlZTtcbiAgcGF0aDogc3RyaW5nO1xuICBpbmRleD86IG51bWJlcjtcbiAgc3RvcmFnZTogUmVnbGVTdG9yYWdlO1xuICBvcHRpb25zOiBSZXNvbHZlZFJlZ2xlQmVoYXZpb3VyT3B0aW9ucztcbiAgZXh0ZXJuYWxFcnJvcnM6IFJlYWRvbmx5PFJlZjwkSW50ZXJuYWxFeHRlcm5hbFJlZ2xlRXJyb3JzIHwgdW5kZWZpbmVkPj47XG59XG5cbmludGVyZmFjZSBTY29wZVJldHVyblN0YXRlIHtcbiAgJGRpcnR5OiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgJGFueURpcnR5OiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgJGludmFsaWQ6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAkdmFsaWQ6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAkZXJyb3I6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAkcGVuZGluZzogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICRlcnJvcnM6IENvbXB1dGVkUmVmPCRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvbkVycm9ycz47XG4gICRzaWxlbnRFcnJvcnM6IENvbXB1dGVkUmVmPCRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvbkVycm9ycz47XG59XG5cbmludGVyZmFjZSBJbW1lZGlhdGVTY29wZVJldHVyblN0YXRlIHtcbiAgaXNQcmltaXRpdmVBcnJheTogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICRleHRlcm5hbEVycm9yc0ZpZWxkOiBDb21wdXRlZFJlZjxzdHJpbmdbXT47XG4gICRleHRlcm5hbEVycm9yc0VhY2g6IENvbXB1dGVkUmVmPCRJbnRlcm5hbEV4dGVybmFsUmVnbGVFcnJvcnNbXT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWFjdGl2ZUNvbGxlY3Rpb25TdGF0dXMoe1xuICBzdGF0ZSxcbiAgcnVsZXNEZWYsXG4gIGN1c3RvbU1lc3NhZ2VzLFxuICBwYXRoLFxuICBzdG9yYWdlLFxuICBvcHRpb25zLFxuICBleHRlcm5hbEVycm9ycyxcbn06IENyZWF0ZVJlYWN0aXZlQ29sbGVjdGlvblN0YXR1c0FyZ3MpOiAkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25TdGF0dXMgfCBudWxsIHtcbiAgbGV0IHNjb3BlID0gZWZmZWN0U2NvcGUoKTtcbiAgbGV0IHNjb3BlU3RhdGUhOiBTY29wZVJldHVyblN0YXRlO1xuXG4gIGxldCBpbW1lZGlhdGVTY29wZSA9IGVmZmVjdFNjb3BlKCk7XG4gIGxldCBpbW1lZGlhdGVTY29wZVN0YXRlITogSW1tZWRpYXRlU2NvcGVSZXR1cm5TdGF0ZTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS52YWx1ZSkgJiYgIXJ1bGVzRGVmLnZhbHVlLiRlYWNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgJGlkID0gcmVmPHN0cmluZz4oKSBhcyBSZWY8c3RyaW5nPjtcbiAgY29uc3QgJHZhbHVlID0gcmVmKHN0YXRlLnZhbHVlKTtcblxuICBsZXQgJHVud2F0Y2hTdGF0ZTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3QgJGZpZWxkU3RhdHVzID0gcmVmKHt9KSBhcyBSZWY8JEludGVybmFsUmVnbGVGaWVsZFN0YXR1cz47XG4gIGNvbnN0ICRlYWNoU3RhdHVzID0gc3RvcmFnZS5nZXRDb2xsZWN0aW9uc0VudHJ5KHBhdGgpO1xuXG4gIGltbWVkaWF0ZVNjb3BlU3RhdGUgPSBpbW1lZGlhdGVTY29wZS5ydW4oKCkgPT4ge1xuICAgIGNvbnN0IGlzUHJpbWl0aXZlQXJyYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS52YWx1ZSkgJiYgc3RhdGUudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS52YWx1ZS5zb21lKChzKSA9PiB0eXBlb2YgcyAhPT0gJ29iamVjdCcpO1xuICAgICAgfSBlbHNlIGlmIChydWxlc0RlZi52YWx1ZS4kZWFjaCAmJiAhKHJ1bGVzRGVmLnZhbHVlLiRlYWNoIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJ1bGVzRGVmLnZhbHVlLiRlYWNoKS5ldmVyeSgocnVsZSkgPT4gaXNSdWxlRGVmKHJ1bGUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIGNvbnN0ICRleHRlcm5hbEVycm9yc0ZpZWxkID0gY29tcHV0ZWQ8c3RyaW5nW10+KCgpID0+IHtcbiAgICAgIGlmIChleHRlcm5hbEVycm9ycy52YWx1ZSkge1xuICAgICAgICBpZiAoaXNFeHRlcm5hbEVycm9yQ29sbGVjdGlvbihleHRlcm5hbEVycm9ycy52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gZXh0ZXJuYWxFcnJvcnMudmFsdWUuJGVycm9ycyA/PyBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG5cbiAgICBjb25zdCAkZXh0ZXJuYWxFcnJvcnNFYWNoID0gY29tcHV0ZWQ8JEludGVybmFsRXh0ZXJuYWxSZWdsZUVycm9yc1tdPigoKSA9PiB7XG4gICAgICBpZiAoZXh0ZXJuYWxFcnJvcnMudmFsdWUpIHtcbiAgICAgICAgaWYgKGlzRXh0ZXJuYWxFcnJvckNvbGxlY3Rpb24oZXh0ZXJuYWxFcnJvcnMudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGV4dGVybmFsRXJyb3JzLnZhbHVlLiRlYWNoID8/IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNQcmltaXRpdmVBcnJheSxcbiAgICAgICRleHRlcm5hbEVycm9yc0ZpZWxkLFxuICAgICAgJGV4dGVybmFsRXJyb3JzRWFjaCxcbiAgICB9IHNhdGlzZmllcyBJbW1lZGlhdGVTY29wZVJldHVyblN0YXRlO1xuICB9KSE7XG5cbiAgY3JlYXRlU3RhdHVzKCk7XG4gICR3YXRjaCgpO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0YXR1cygpIHtcbiAgICBpZiAodHlwZW9mIHN0YXRlLnZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHN0YXRlLnZhbHVlICE9IG51bGwgJiYgIXN0YXRlLnZhbHVlPy4kaWQgJiYgc3RhdGUudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgJGlkLnZhbHVlID0gcmFuZG9tSWQoKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RhdGUudmFsdWUsIHtcbiAgICAgICAgICAkaWQ6IHtcbiAgICAgICAgICAgIHZhbHVlOiAkaWQudmFsdWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLnZhbHVlPy4kaWQpIHtcbiAgICAgICAgJGlkLnZhbHVlID0gc3RhdGUudmFsdWUuJGlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbW1lZGlhdGVTY29wZVN0YXRlLmlzUHJpbWl0aXZlQXJyYXkudmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAkdmFsdWUudmFsdWUgPSAkZmllbGRTdGF0dXMudmFsdWUuJHZhbHVlO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUudmFsdWUpICYmIHJ1bGVzRGVmLnZhbHVlLiRlYWNoKSB7XG4gICAgICAkZWFjaFN0YXR1cy52YWx1ZSA9IHN0YXRlLnZhbHVlXG4gICAgICAgIC5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVud3JhcHBlZCRFYWNoID0gdW53cmFwR2V0dGVyKFxuICAgICAgICAgICAgcnVsZXNEZWYudmFsdWUuJGVhY2gsXG4gICAgICAgICAgICB0b1JlZigoKSA9PiB2YWx1ZSksXG4gICAgICAgICAgICBpbmRleFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHVud3JhcHBlZCRFYWNoKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY3JlYXRlQ29sbGVjdGlvbkVsZW1lbnQoe1xuICAgICAgICAgICAgICAkaWQ6ICRpZC52YWx1ZSxcbiAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgcnVsZXM6IHVud3JhcHBlZCRFYWNoLFxuICAgICAgICAgICAgICBzdGF0ZVZhbHVlOiB0b1JlZigoKSA9PiB2YWx1ZSksXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgICAgICBleHRlcm5hbEVycm9yczogaW1tZWRpYXRlU2NvcGVTdGF0ZS4kZXh0ZXJuYWxFcnJvcnNFYWNoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoZWFjaCkgPT4gISFlYWNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGVhY2hTdGF0dXMudmFsdWUgPSBbXTtcbiAgICB9XG5cbiAgICAkZmllbGRTdGF0dXMudmFsdWUgPSBjcmVhdGVSZWFjdGl2ZUZpZWxkU3RhdHVzKHtcbiAgICAgIHN0YXRlLFxuICAgICAgcnVsZXNEZWYsXG4gICAgICBjdXN0b21NZXNzYWdlcyxcbiAgICAgIHBhdGgsXG4gICAgICBzdG9yYWdlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGV4dGVybmFsRXJyb3JzOiBpbW1lZGlhdGVTY29wZVN0YXRlLiRleHRlcm5hbEVycm9yc0ZpZWxkLFxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU3RhdHVzKCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHN0YXRlLnZhbHVlKSkge1xuICAgICAgY29uc3QgcHJldmlvdXNTdGF0dXMgPSBjbG9uZURlZXAoJGVhY2hTdGF0dXMudmFsdWUpO1xuXG4gICAgICAkZWFjaFN0YXR1cy52YWx1ZSA9IHN0YXRlLnZhbHVlXG4gICAgICAgIC5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRvUmVmKCgpID0+IHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUuJGlkICYmICRlYWNoU3RhdHVzLnZhbHVlLmZpbmQoKGVhY2gpID0+IGVhY2guJGlkID09PSB2YWx1ZS4kaWQpKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1N0YXR1cyA9IHN0b3JhZ2UuZ2V0QXJyYXlTdGF0dXMoJGlkLnZhbHVlLCB2YWx1ZS4kaWQpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nU3RhdHVzKSB7XG4gICAgICAgICAgICAgIGV4aXN0aW5nU3RhdHVzLiR2YWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nU3RhdHVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHVud3JhcHBlZCRFYWNoID0gdW53cmFwR2V0dGVyKHJ1bGVzRGVmLnZhbHVlLiRlYWNoLCBjdXJyZW50VmFsdWUsIGluZGV4KTtcbiAgICAgICAgICAgIGlmICh1bndyYXBwZWQkRWFjaCkge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY3JlYXRlQ29sbGVjdGlvbkVsZW1lbnQoe1xuICAgICAgICAgICAgICAgICRpZDogJGlkLnZhbHVlLFxuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgcnVsZXM6IHVud3JhcHBlZCRFYWNoLFxuICAgICAgICAgICAgICAgIHN0YXRlVmFsdWU6IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgZXh0ZXJuYWxFcnJvcnM6IGltbWVkaWF0ZVNjb3BlU3RhdGUuJGV4dGVybmFsRXJyb3JzRWFjaCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChlYWNoKSA9PiAhIWVhY2gpO1xuXG4gICAgICBwcmV2aW91c1N0YXR1c1xuICAgICAgICAuZmlsdGVyKCgkZWFjaCkgPT4gIXN0YXRlLnZhbHVlLmZpbmQoKGYpID0+ICRlYWNoLiRpZCA9PT0gZi4kaWQpKVxuICAgICAgICAuZm9yRWFjaCgoJGVhY2gsIGluZGV4KSA9PiB7XG4gICAgICAgICAgc3RvcmFnZS5kZWxldGVBcnJheVN0YXR1cygkaWQudmFsdWUsIGluZGV4LnRvU3RyaW5nKCkpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGVhY2hTdGF0dXMudmFsdWUgPSBbXTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiAkd2F0Y2goKSB7XG4gICAgJHVud2F0Y2hTdGF0ZSA9IHdhdGNoKFxuICAgICAgc3RhdGUsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZS52YWx1ZSAhPSBudWxsICYmICFPYmplY3QuaGFzT3duKHN0YXRlLnZhbHVlIGFzIGFueSwgJyRpZCcpKSB7XG4gICAgICAgICAgY3JlYXRlU3RhdHVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlU3RhdHVzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGRlZXA6IGlzVnVlU3VwZXJpb3JPckVxdWFsVG8zZG90Rml2ZSA/IDEgOiB0cnVlLCBmbHVzaDogJ3ByZScgfVxuICAgICk7XG4gICAgc2NvcGVTdGF0ZSA9IHNjb3BlLnJ1bigoKSA9PiB7XG4gICAgICBjb25zdCAkZGlydHkgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgJGZpZWxkU3RhdHVzLnZhbHVlLiRkaXJ0eSAmJlxuICAgICAgICAgICRlYWNoU3RhdHVzLnZhbHVlLmV2ZXJ5KChzdGF0dXNPckZpZWxkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kZGlydHk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkYW55RGlydHkgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgJGZpZWxkU3RhdHVzLnZhbHVlLiRhbnlEaXJ0eSB8fFxuICAgICAgICAgICRlYWNoU3RhdHVzLnZhbHVlLnNvbWUoKHN0YXR1c09yRmllbGQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXNPckZpZWxkLiRkaXJ0eTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRpbnZhbGlkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICRmaWVsZFN0YXR1cy52YWx1ZS4kaW52YWxpZCB8fFxuICAgICAgICAgICRlYWNoU3RhdHVzLnZhbHVlLnNvbWUoKHN0YXR1c09yRmllbGQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXNPckZpZWxkLiRpbnZhbGlkO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJHZhbGlkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oXG4gICAgICAgICgpID0+XG4gICAgICAgICAgJGZpZWxkU3RhdHVzLnZhbHVlLiR2YWxpZCAmJlxuICAgICAgICAgICRlYWNoU3RhdHVzLnZhbHVlLmV2ZXJ5KChzdGF0dXNPckZpZWxkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kdmFsaWQ7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0ICRlcnJvciA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAkZmllbGRTdGF0dXMudmFsdWUuJGVycm9yIHx8XG4gICAgICAgICAgJGVhY2hTdGF0dXMudmFsdWUuc29tZSgoc3RhdHVzT3JGaWVsZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1c09yRmllbGQuJGVycm9yO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJHBlbmRpbmcgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgJGZpZWxkU3RhdHVzLnZhbHVlLiRwZW5kaW5nIHx8XG4gICAgICAgICAgJGVhY2hTdGF0dXMudmFsdWUuc29tZSgoc3RhdHVzT3JGaWVsZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1c09yRmllbGQuJHBlbmRpbmc7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkZXJyb3JzID0gY29tcHV0ZWQ8JEludGVybmFsUmVnbGVDb2xsZWN0aW9uRXJyb3JzPigoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgJGVycm9yczogZXh0cmFjdFJ1bGVzRXJyb3JzKHsgZmllbGQ6ICRmaWVsZFN0YXR1cy52YWx1ZSwgc2lsZW50OiBmYWxzZSB9KSxcbiAgICAgICAgICAkZWFjaDogZXh0cmFjdENvbGxlY3Rpb25FcnJvcigkZWFjaFN0YXR1cy52YWx1ZSksXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJHNpbGVudEVycm9ycyA9IGNvbXB1dGVkPCRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvbkVycm9ycz4oKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICRlcnJvcnM6IGV4dHJhY3RSdWxlc0Vycm9ycyh7IGZpZWxkOiAkZmllbGRTdGF0dXMudmFsdWUsIHNpbGVudDogdHJ1ZSB9KSxcbiAgICAgICAgICAkZWFjaDogZXh0cmFjdENvbGxlY3Rpb25FcnJvcigkZWFjaFN0YXR1cy52YWx1ZSwgdHJ1ZSksXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJGRpcnR5LFxuICAgICAgICAkYW55RGlydHksXG4gICAgICAgICRpbnZhbGlkLFxuICAgICAgICAkdmFsaWQsXG4gICAgICAgICRlcnJvcixcbiAgICAgICAgJHBlbmRpbmcsXG4gICAgICAgICRlcnJvcnMsXG4gICAgICAgICRzaWxlbnRFcnJvcnMsXG4gICAgICB9IHNhdGlzZmllcyBTY29wZVJldHVyblN0YXRlO1xuICAgIH0pITtcblxuICAgIGlmIChpbW1lZGlhdGVTY29wZVN0YXRlLmlzUHJpbWl0aXZlQXJyYXkudmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYCR7cGF0aH0gaXMgYSBBcnJheSBvZiBwcmltaXRpdmVzLiBUcmFja2luZyBjYW4gYmUgbG9zdCB3aGVuIHJlYXNzaWduaW5nIHRoZSBBcnJheS4gV2UgYWR2aXNlIHRvIHVzZSBhbiBBcnJheSBvZiBvYmplY3RzIGluc3RlYWRgXG4gICAgICApO1xuICAgICAgJHVud2F0Y2hTdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uICR1bndhdGNoKCkge1xuICAgIGlmICgkdW53YXRjaFN0YXRlKSB7XG4gICAgICAkdW53YXRjaFN0YXRlKCk7XG4gICAgfVxuICAgIGlmICgkZmllbGRTdGF0dXMudmFsdWUpIHtcbiAgICAgICRmaWVsZFN0YXR1cy52YWx1ZS4kdW53YXRjaCgpO1xuICAgIH1cbiAgICBpZiAoJGVhY2hTdGF0dXMudmFsdWUpIHtcbiAgICAgICRlYWNoU3RhdHVzLnZhbHVlLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKCckZGlydHknIGluIGVsZW1lbnQpIHtcbiAgICAgICAgICBlbGVtZW50LiR1bndhdGNoKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBzY29wZS5zdG9wKCk7XG4gICAgc2NvcGUgPSBlZmZlY3RTY29wZSgpO1xuICAgIGltbWVkaWF0ZVNjb3BlLnN0b3AoKTtcbiAgICBpbW1lZGlhdGVTY29wZSA9IGVmZmVjdFNjb3BlKHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gJHRvdWNoKCk6IHZvaWQge1xuICAgICRmaWVsZFN0YXR1cy52YWx1ZS4kdG91Y2goKTtcbiAgICAkZWFjaFN0YXR1cy52YWx1ZS5mb3JFYWNoKCgkZWFjaCkgPT4ge1xuICAgICAgJGVhY2guJHRvdWNoKCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiAkcmVzZXQoKTogdm9pZCB7XG4gICAgJGZpZWxkU3RhdHVzLnZhbHVlLiRyZXNldCgpO1xuICAgICRlYWNoU3RhdHVzLnZhbHVlLmZvckVhY2goKCRlYWNoKSA9PiB7XG4gICAgICAkZWFjaC4kcmVzZXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uICR2YWxpZGF0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgJGZpZWxkU3RhdHVzLnZhbHVlLiR2YWxpZGF0ZSgpLFxuICAgICAgICAuLi4kZWFjaFN0YXR1cy52YWx1ZS5tYXAoKHJ1bGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gcnVsZS4kdmFsaWRhdGUoKTtcbiAgICAgICAgfSksXG4gICAgICBdKTtcbiAgICAgIHJldHVybiByZXN1bHRzLmV2ZXJ5KCh2YWx1ZSkgPT4gISF2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uICRjbGVhckV4dGVybmFsRXJyb3JzKCkge1xuICAgIC8vIFRPRE8gY2xlYXIgZXh0ZXJuYWwgZXJyb3JzXG4gIH1cblxuICByZXR1cm4gcmVhY3RpdmUoe1xuICAgICRmaWVsZDogJGZpZWxkU3RhdHVzLFxuICAgIC4uLnNjb3BlU3RhdGUsXG4gICAgJGVhY2g6ICRlYWNoU3RhdHVzLFxuICAgICR2YWx1ZTogc3RhdGUsXG4gICAgJHZhbGlkYXRlLFxuICAgICR1bndhdGNoLFxuICAgICR3YXRjaCxcbiAgICAkdG91Y2gsXG4gICAgJHJlc2V0LFxuICAgICRjbGVhckV4dGVybmFsRXJyb3JzLFxuICB9KSBzYXRpc2ZpZXMgJEludGVybmFsUmVnbGVDb2xsZWN0aW9uU3RhdHVzO1xufVxuIiwiaW1wb3J0IHR5cGUgeyBSZXF1aXJlZERlZXAgfSBmcm9tICd0eXBlLWZlc3QnO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlZFJlZiwgRWZmZWN0U2NvcGUsIFJlZiwgV2F0Y2hTdG9wSGFuZGxlIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3RTY29wZSwgcmVhY3RpdmUsIHJlZiwgdG9SZWYsIHRyaWdnZXJSZWYsIHVucmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7XG4gIERlZXBNYXliZVJlZixcbiAgQ3VzdG9tUnVsZXNEZWNsYXJhdGlvblRyZWUsXG4gICRJbnRlcm5hbEV4dGVybmFsUmVnbGVFcnJvcnMsXG4gICRJbnRlcm5hbEZvcm1Qcm9wZXJ0eVR5cGVzLFxuICAkSW50ZXJuYWxSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZSxcbiAgJEludGVybmFsUmVnbGVTdGF0dXMsXG4gICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZSxcbiAgTWF5YmVHZXR0ZXIsXG4gIFJlZ2xlQmVoYXZpb3VyT3B0aW9ucyxcbiAgUmVnbGVFeHRlcm5hbEVycm9yVHJlZSxcbiAgUmVnbGVWYWxpZGF0aW9uR3JvdXBFbnRyeSxcbiAgUmVzb2x2ZWRSZWdsZUJlaGF2aW91ck9wdGlvbnMsXG4gICRJbnRlcm5hbFJlZ2xlRXJyb3JzLFxufSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBtZXJnZUFycmF5R3JvdXBQcm9wZXJ0aWVzLCBtZXJnZUJvb2xlYW5Hcm91cFByb3BlcnRpZXMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc1JlZk9iamVjdCwgaXNWdWVTdXBlcmlvck9yRXF1YWxUbzNkb3RGaXZlLCB1bndyYXBHZXR0ZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFJlZ2xlU3RvcmFnZSB9IGZyb20gJy4uLy4uL3VzZVN0b3JhZ2UnO1xuaW1wb3J0IHtcbiAgaXNDb2xsZWN0aW9uUnVsZXNEZWYsXG4gIGlzTmVzdGVkUnVsZXNEZWYsXG4gIGlzU3RhdGVBcnJheSxcbiAgaXNWYWxpZGF0b3JSdWxlc0RlZixcbn0gZnJvbSAnLi4vZ3VhcmRzJztcbmltcG9ydCB7IGNyZWF0ZVJlYWN0aXZlQ29sbGVjdGlvblN0YXR1cyB9IGZyb20gJy4vY3JlYXRlUmVhY3RpdmVDb2xsZWN0aW9uU3RhdHVzJztcbmltcG9ydCB7IGNyZWF0ZVJlYWN0aXZlRmllbGRTdGF0dXMgfSBmcm9tICcuL2NyZWF0ZVJlYWN0aXZlRmllbGRTdGF0dXMnO1xuaW1wb3J0IHsgZXh0cmFjdE5lc3RlZEVycm9ycyB9IGZyb20gJy4uL3VzZUVycm9ycyc7XG5cbmludGVyZmFjZSBDcmVhdGVSZWFjdGl2ZU5lc3RlZFN0YXR1cyB7XG4gIHJvb3RSdWxlcz86IFJlZjwkSW50ZXJuYWxSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZT47XG4gIHNjb3BlUnVsZXM6IFJlZjwkSW50ZXJuYWxSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZT47XG4gIHN0YXRlOiBSZWY8UmVjb3JkPHN0cmluZywgYW55Pj47XG4gIGN1c3RvbU1lc3NhZ2VzPzogQ3VzdG9tUnVsZXNEZWNsYXJhdGlvblRyZWU7XG4gIHBhdGg/OiBzdHJpbmc7XG4gIGluZGV4PzogbnVtYmVyO1xuICBzdG9yYWdlOiBSZWdsZVN0b3JhZ2U7XG4gIG9wdGlvbnM6IFJlc29sdmVkUmVnbGVCZWhhdmlvdXJPcHRpb25zO1xuICBleHRlcm5hbEVycm9yczogUmVhZG9ubHk8UmVmPFJlZ2xlRXh0ZXJuYWxFcnJvclRyZWUgfCB1bmRlZmluZWQ+PjtcbiAgdmFsaWRhdGlvbkdyb3Vwcz86XG4gICAgfCAoKHJ1bGVzOiB7XG4gICAgICAgIFt4OiBzdHJpbmddOiAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGU7XG4gICAgICB9KSA9PiBSZWNvcmQ8c3RyaW5nLCBSZWdsZVZhbGlkYXRpb25Hcm91cEVudHJ5W10+KVxuICAgIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVhY3RpdmVOZXN0ZWRTdGF0dXMoe1xuICBzY29wZVJ1bGVzLFxuICBzdGF0ZSxcbiAgY3VzdG9tTWVzc2FnZXMsXG4gIHBhdGggPSAnJyxcbiAgcm9vdFJ1bGVzLFxuICBzdG9yYWdlLFxuICBvcHRpb25zLFxuICBleHRlcm5hbEVycm9ycyxcbiAgdmFsaWRhdGlvbkdyb3Vwcyxcbn06IENyZWF0ZVJlYWN0aXZlTmVzdGVkU3RhdHVzKTogJEludGVybmFsUmVnbGVTdGF0dXMge1xuICB0eXBlIFNjb3BlU3RhdGUgPSB7XG4gICAgJGRpcnR5OiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgICAkYW55RGlydHk6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAgICRpbnZhbGlkOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgICAkdmFsaWQ6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAgICRlcnJvcjogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICAgJHBlbmRpbmc6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAgICRlcnJvcnM6IENvbXB1dGVkUmVmPFJlY29yZDxzdHJpbmcsICRJbnRlcm5hbFJlZ2xlRXJyb3JzPj47XG4gICAgJHNpbGVudEVycm9yczogQ29tcHV0ZWRSZWY8UmVjb3JkPHN0cmluZywgJEludGVybmFsUmVnbGVFcnJvcnM+PjtcbiAgfTtcbiAgbGV0IHNjb3BlOiBFZmZlY3RTY29wZTtcbiAgbGV0IHNjb3BlU3RhdGUhOiBTY29wZVN0YXRlO1xuICBsZXQgJHVud2F0Y2hGaWVsZHM6IFdhdGNoU3RvcEhhbmRsZTtcbiAgbGV0ICR1bndhdGNoU3RhdGU6IFdhdGNoU3RvcEhhbmRsZTtcbiAgbGV0ICR1bndhdGNoR3JvdXBzOiBXYXRjaFN0b3BIYW5kbGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlUmVhY3RpdmVGaWVsZHNTdGF0dXMod2F0Y2ggPSB0cnVlLCBmb3JjZUZyb21HZXR0ZXIgPSBmYWxzZSkge1xuICAgICRmaWVsZHMudmFsdWUgPSBudWxsITtcbiAgICB0cmlnZ2VyUmVmKCRmaWVsZHMpO1xuXG4gICAgY29uc3Qgc2NvcGVkUnVsZXNTdGF0dXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhzY29wZVJ1bGVzLnZhbHVlKVxuICAgICAgICAubWFwKChbc3RhdGVQcm9wS2V5LCBzdGF0ZVByb3BSdWxlc10pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGVQcm9wUnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlUmVmID0gdG9SZWYoc3RhdGUudmFsdWUsIHN0YXRlUHJvcEtleSk7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZVByb3BSdWxlc1JlZiA9IHRvUmVmKCgpID0+IHN0YXRlUHJvcFJ1bGVzKTtcbiAgICAgICAgICAgIGNvbnN0ICRleHRlcm5hbEVycm9ycyA9IHRvUmVmKCgpID0+IGV4dGVybmFsRXJyb3JzLnZhbHVlPy5bc3RhdGVQcm9wS2V5XSk7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBzdGF0ZVByb3BLZXksXG4gICAgICAgICAgICAgIGNyZWF0ZVJlYWN0aXZlQ2hpbGRyZW5TdGF0dXMoe1xuICAgICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZVJlZixcbiAgICAgICAgICAgICAgICBydWxlc0RlZjogc3RhdGVQcm9wUnVsZXNSZWYsXG4gICAgICAgICAgICAgICAgY3VzdG9tTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgcGF0aDogcGF0aCA/IGAke3BhdGh9LiR7c3RhdGVQcm9wS2V5fWAgOiBzdGF0ZVByb3BLZXksXG4gICAgICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgIGV4dGVybmFsRXJyb3JzOiAkZXh0ZXJuYWxFcnJvcnMsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChydWxlKTogcnVsZSBpcyBbc3RyaW5nLCAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGVdID0+ICEhcnVsZS5sZW5ndGggJiYgcnVsZVsxXSAhPSBudWxsXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgZXh0ZXJuYWxSdWxlc1N0YXR1cyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHVucmVmKGV4dGVybmFsRXJyb3JzKSA/PyB7fSlcbiAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICEoa2V5IGluIHNjb3BlUnVsZXMudmFsdWUpKVxuICAgICAgICAubWFwKChba2V5LCBlcnJvcnNdKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVQcm9wUnVsZXNSZWYgPSB0b1JlZigoKSA9PiAoe30pKTtcbiAgICAgICAgICAgIGNvbnN0ICRleHRlcm5hbEVycm9ycyA9IHRvUmVmKCgpID0+IGVycm9ycyk7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIGNyZWF0ZVJlYWN0aXZlQ2hpbGRyZW5TdGF0dXMoe1xuICAgICAgICAgICAgICAgIHN0YXRlOiByZWYodW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBydWxlc0RlZjogc3RhdGVQcm9wUnVsZXNSZWYsXG4gICAgICAgICAgICAgICAgY3VzdG9tTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgcGF0aDogcGF0aCA/IGAke3BhdGh9LiR7a2V5fWAgOiBrZXksXG4gICAgICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgIGV4dGVybmFsRXJyb3JzOiAkZXh0ZXJuYWxFcnJvcnMsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBncm91cHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh2YWxpZGF0aW9uR3JvdXBzPy4oc2NvcGVkUnVsZXNTdGF0dXMpID8/IHt9KS5tYXAoKFtrZXksIGVudHJpZXNdKSA9PiB7XG4gICAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLk9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgICAoWyckaW52YWxpZCcsICckZXJyb3InLCAnJHBlbmRpbmcnLCAnJGRpcnR5JywgJyR2YWxpZCddIGFzIGNvbnN0KS5tYXAoXG4gICAgICAgICAgICAgICAgICAocHJvcGVydHkpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIG1lcmdlQm9vbGVhbkdyb3VwUHJvcGVydGllcyhcbiAgICAgICAgICAgICAgICAgICAgICB0b1JlZigoKSA9PiBlbnRyaWVzKSxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgLi4uT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgICAgICAgIChbJyRlcnJvcnMnLCAnJHNpbGVudEVycm9ycyddIGFzIGNvbnN0KS5tYXAoKHByb3BlcnR5KSA9PiBbXG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgIG1lcmdlQXJyYXlHcm91cFByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgICAgIHRvUmVmKCgpID0+IGVudHJpZXMpLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgICRmaWVsZHMudmFsdWUgPSB7IC4uLnNjb3BlZFJ1bGVzU3RhdHVzLCAuLi5leHRlcm5hbFJ1bGVzU3RhdHVzLCAuLi5ncm91cHMgfTtcbiAgICBpZiAod2F0Y2gpIHtcbiAgICAgICR3YXRjaCgpO1xuICAgIH1cbiAgfVxuXG4gIGxldCAkZmllbGRzOiBSZWY8UmVjb3JkPHN0cmluZywgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlPj4gPSBzdG9yYWdlLmdldEZpZWxkc0VudHJ5KHBhdGgpO1xuICBjcmVhdGVSZWFjdGl2ZUZpZWxkc1N0YXR1cygpO1xuXG4gIGZ1bmN0aW9uICRyZXNldCgpOiB2b2lkIHtcbiAgICBjcmVhdGVSZWFjdGl2ZUZpZWxkc1N0YXR1cyhmYWxzZSk7XG4gICAgT2JqZWN0LmVudHJpZXMoJGZpZWxkcy52YWx1ZSkuZm9yRWFjaCgoW18sIHN0YXR1c09yRmllbGRdKSA9PiB7XG4gICAgICBzdGF0dXNPckZpZWxkLiRyZXNldCgpO1xuICAgIH0pO1xuICAgICR3YXRjaCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gJHRvdWNoKCk6IHZvaWQge1xuICAgIE9iamVjdC5lbnRyaWVzKCRmaWVsZHMudmFsdWUpLmZvckVhY2goKFtfLCBzdGF0dXNPckZpZWxkXSkgPT4ge1xuICAgICAgc3RhdHVzT3JGaWVsZC4kdG91Y2goKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uICR2YWxpZGF0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoJGZpZWxkcy52YWx1ZSkubWFwKChbXywgc3RhdHVzT3JGaWVsZF0pID0+IHtcbiAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kdmFsaWRhdGUoKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzdWx0cy5ldmVyeSgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gJHdhdGNoKCkge1xuICAgIGlmIChyb290UnVsZXMpIHtcbiAgICAgICR1bndhdGNoRmllbGRzID0gd2F0Y2goXG4gICAgICAgIHJvb3RSdWxlcyxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICR1bndhdGNoKCk7XG4gICAgICAgICAgY3JlYXRlUmVhY3RpdmVGaWVsZHNTdGF0dXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBkZWVwOiBpc1Z1ZVN1cGVyaW9yT3JFcXVhbFRvM2RvdEZpdmUgPyAxIDogdHJ1ZSwgZmx1c2g6ICdwb3N0JyB9XG4gICAgICApO1xuICAgIH1cblxuICAgIHNjb3BlID0gZWZmZWN0U2NvcGUoKTtcbiAgICBzY29wZVN0YXRlID0gc2NvcGUucnVuKCgpID0+IHtcbiAgICAgIGNvbnN0ICRkaXJ0eSA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAhIU9iamVjdC5lbnRyaWVzKCRmaWVsZHMudmFsdWUpLmxlbmd0aCAmJlxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKCRmaWVsZHMudmFsdWUpLmV2ZXJ5KChba2V5LCBzdGF0dXNPckZpZWxkXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1c09yRmllbGQuJGRpcnR5O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJGFueURpcnR5ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoJGZpZWxkcy52YWx1ZSkuc29tZSgoW2tleSwgc3RhdHVzT3JGaWVsZF0pID0+IHtcbiAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kZGlydHk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRpbnZhbGlkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoJGZpZWxkcy52YWx1ZSkuc29tZSgoW2tleSwgc3RhdHVzT3JGaWVsZF0pID0+IHtcbiAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kaW52YWxpZDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJHZhbGlkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoJGZpZWxkcy52YWx1ZSkuZXZlcnkoKFtrZXksIHN0YXR1c09yRmllbGRdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHN0YXR1c09yRmllbGQuJHZhbGlkO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkZXJyb3IgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcygkZmllbGRzLnZhbHVlKS5zb21lKChba2V5LCBzdGF0dXNPckZpZWxkXSkgPT4ge1xuICAgICAgICAgIHJldHVybiBzdGF0dXNPckZpZWxkLiRlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJHBlbmRpbmcgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcygkZmllbGRzLnZhbHVlKS5zb21lKChba2V5LCBzdGF0dXNPckZpZWxkXSkgPT4ge1xuICAgICAgICAgIHJldHVybiBzdGF0dXNPckZpZWxkLiRwZW5kaW5nO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkZXJyb3JzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZXh0cmFjdE5lc3RlZEVycm9ycygkZmllbGRzLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgJHNpbGVudEVycm9ycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3ROZXN0ZWRFcnJvcnMoJGZpZWxkcy52YWx1ZSwgdHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJGRpcnR5LFxuICAgICAgICAkYW55RGlydHksXG4gICAgICAgICRpbnZhbGlkLFxuICAgICAgICAkdmFsaWQsXG4gICAgICAgICRlcnJvcixcbiAgICAgICAgJHBlbmRpbmcsXG4gICAgICAgICRlcnJvcnMsXG4gICAgICAgICRzaWxlbnRFcnJvcnMsXG4gICAgICB9IHNhdGlzZmllcyBTY29wZVN0YXRlO1xuICAgIH0pITtcbiAgfVxuXG4gIGZ1bmN0aW9uICR1bndhdGNoKCkge1xuICAgIGlmICgkZmllbGRzLnZhbHVlKSB7XG4gICAgICBPYmplY3QuZW50cmllcygkZmllbGRzLnZhbHVlKS5mb3JFYWNoKChbXywgZmllbGRdKSA9PiB7XG4gICAgICAgIGZpZWxkLiR1bndhdGNoKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAkdW53YXRjaEZpZWxkcz8uKCk7XG4gICAgJHVud2F0Y2hTdGF0ZT8uKCk7XG4gICAgJHVud2F0Y2hHcm91cHM/LigpO1xuICAgIHNjb3BlLnN0b3AoKTtcbiAgICBzY29wZSA9IGVmZmVjdFNjb3BlKCk7XG4gIH1cblxuICBmdW5jdGlvbiAkY2xlYXJFeHRlcm5hbEVycm9ycygpIHtcbiAgICBPYmplY3QuZW50cmllcygkZmllbGRzLnZhbHVlKS5mb3JFYWNoKChbXywgZmllbGRdKSA9PiB7XG4gICAgICBmaWVsZC4kY2xlYXJFeHRlcm5hbEVycm9ycygpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlYWN0aXZlKHtcbiAgICAuLi5zY29wZVN0YXRlLFxuICAgICRmaWVsZHMsXG4gICAgJHZhbHVlOiBzdGF0ZSxcbiAgICAkcmVzZXQsXG4gICAgJHRvdWNoLFxuICAgICR2YWxpZGF0ZSxcbiAgICAkdW53YXRjaCxcbiAgICAkd2F0Y2gsXG4gICAgJGNsZWFyRXh0ZXJuYWxFcnJvcnMsXG4gIH0pIHNhdGlzZmllcyAkSW50ZXJuYWxSZWdsZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIENyZWF0ZVJlYWN0aXZlQ2hpbGRyZW5TdGF0dXMge1xuICBzdGF0ZTogUmVmPHVua25vd24+O1xuICBydWxlc0RlZjogUmVmPCRJbnRlcm5hbEZvcm1Qcm9wZXJ0eVR5cGVzLCBhbnk+O1xuICBjdXN0b21NZXNzYWdlcz86IEN1c3RvbVJ1bGVzRGVjbGFyYXRpb25UcmVlO1xuICBwYXRoOiBzdHJpbmc7XG4gIGluZGV4PzogbnVtYmVyO1xuICBzdG9yYWdlOiBSZWdsZVN0b3JhZ2U7XG4gIG9wdGlvbnM6IERlZXBNYXliZVJlZjxSZXF1aXJlZERlZXA8UmVnbGVCZWhhdmlvdXJPcHRpb25zPj47XG4gIGV4dGVybmFsRXJyb3JzOiBSZWFkb25seTxSZWY8JEludGVybmFsRXh0ZXJuYWxSZWdsZUVycm9ycyB8IHVuZGVmaW5lZD4+O1xuICBvblVud2F0Y2g/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVhY3RpdmVDaGlsZHJlblN0YXR1cyh7XG4gIHN0YXRlLFxuICBydWxlc0RlZixcbiAgY3VzdG9tTWVzc2FnZXMsXG4gIHBhdGgsXG4gIHN0b3JhZ2UsXG4gIG9wdGlvbnMsXG4gIGV4dGVybmFsRXJyb3JzLFxuICBpbmRleCxcbiAgb25VbndhdGNoLFxufTogQ3JlYXRlUmVhY3RpdmVDaGlsZHJlblN0YXR1cyk6ICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZSB8IG51bGwge1xuICBpZiAoaXNDb2xsZWN0aW9uUnVsZXNEZWYocnVsZXNEZWYpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJlYWN0aXZlQ29sbGVjdGlvblN0YXR1cyh7XG4gICAgICBzdGF0ZTogc3RhdGUgYXMgUmVmPHVua25vd24gJiB7ICRpZD86IHN0cmluZyB9W10+LFxuICAgICAgcnVsZXNEZWYsXG4gICAgICBjdXN0b21NZXNzYWdlcyxcbiAgICAgIHBhdGgsXG4gICAgICBzdG9yYWdlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGluZGV4LFxuICAgICAgZXh0ZXJuYWxFcnJvcnMsXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNOZXN0ZWRSdWxlc0RlZihzdGF0ZSwgcnVsZXNEZWYpICYmIGlzUmVmT2JqZWN0KHN0YXRlKSkge1xuICAgIHJldHVybiBjcmVhdGVSZWFjdGl2ZU5lc3RlZFN0YXR1cyh7XG4gICAgICBzY29wZVJ1bGVzOiBydWxlc0RlZixcbiAgICAgIHN0YXRlLFxuICAgICAgY3VzdG9tTWVzc2FnZXMsXG4gICAgICBwYXRoLFxuICAgICAgc3RvcmFnZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBpbmRleCxcbiAgICAgIGV4dGVybmFsRXJyb3JzOiBleHRlcm5hbEVycm9ycyBhcyBSZWFkb25seTxSZWY8UmVnbGVFeHRlcm5hbEVycm9yVHJlZSB8IHVuZGVmaW5lZD4+LFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzVmFsaWRhdG9yUnVsZXNEZWYocnVsZXNEZWYpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJlYWN0aXZlRmllbGRTdGF0dXMoe1xuICAgICAgc3RhdGUsXG4gICAgICBydWxlc0RlZixcbiAgICAgIGN1c3RvbU1lc3NhZ2VzLFxuICAgICAgcGF0aCxcbiAgICAgIHN0b3JhZ2UsXG4gICAgICBvcHRpb25zLFxuICAgICAgaW5kZXgsXG4gICAgICBleHRlcm5hbEVycm9yczogZXh0ZXJuYWxFcnJvcnMgYXMgUmVmPHN0cmluZ1tdIHwgdW5kZWZpbmVkPixcbiAgICAgIG9uVW53YXRjaCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiaW1wb3J0IHR5cGUgeyBDb21wdXRlZFJlZiwgUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IGNvbXB1dGVkLCByZWFjdGl2ZSwgdW5yZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHR5cGUge1xuICAkSW50ZXJuYWxSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZSxcbiAgQ3VzdG9tUnVsZXNEZWNsYXJhdGlvblRyZWUsXG4gIFJlc29sdmVkUmVnbGVCZWhhdmlvdXJPcHRpb25zLFxufSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyB1c2VTdG9yYWdlIH0gZnJvbSAnLi4vLi4vdXNlU3RvcmFnZSc7XG5pbXBvcnQgeyB1c2VFcnJvcnMgfSBmcm9tICcuLi91c2VFcnJvcnMnO1xuaW1wb3J0IHsgY3JlYXRlUmVhY3RpdmVOZXN0ZWRTdGF0dXMgfSBmcm9tICcuL2NyZWF0ZVJlYWN0aXZlTmVzdGVkU3RhdHVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0YXRlUHJvcGVydGllcyhcbiAgc2NvcGVSdWxlczogQ29tcHV0ZWRSZWY8JEludGVybmFsUmVnbGVQYXJ0aWFsVmFsaWRhdGlvblRyZWU+LFxuICBzdGF0ZTogUmVmPFJlY29yZDxzdHJpbmcsIGFueT4+LFxuICBvcHRpb25zOiBSZXNvbHZlZFJlZ2xlQmVoYXZpb3VyT3B0aW9ucyxcbiAgY3VzdG9tUnVsZXM/OiAoKSA9PiBDdXN0b21SdWxlc0RlY2xhcmF0aW9uVHJlZVxuKSB7XG4gIGNvbnN0IHN0b3JhZ2UgPSB1c2VTdG9yYWdlKCk7XG5cbiAgY29uc3QgZXh0ZXJuYWxFcnJvcnMgPSBjb21wdXRlZCgoKSA9PiB1bnJlZihvcHRpb25zLmV4dGVybmFsRXJyb3JzKSk7XG5cbiAgY29uc3QgcmVnbGUgPSByZWFjdGl2ZShcbiAgICBjcmVhdGVSZWFjdGl2ZU5lc3RlZFN0YXR1cyh7XG4gICAgICByb290UnVsZXM6IHNjb3BlUnVsZXMsXG4gICAgICBzY29wZVJ1bGVzLFxuICAgICAgc3RhdGUsXG4gICAgICBjdXN0b21NZXNzYWdlczogY3VzdG9tUnVsZXM/LigpLFxuICAgICAgc3RvcmFnZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBleHRlcm5hbEVycm9ycyxcbiAgICAgIHZhbGlkYXRpb25Hcm91cHM6IG9wdGlvbnMudmFsaWRhdGlvbkdyb3VwcyxcbiAgICB9KVxuICApO1xuXG4gIGNvbnN0IGVycm9ycyA9IHVzZUVycm9ycyhyZWdsZSk7XG5cbiAgcmV0dXJuIHsgcmVnbGUsIGVycm9ycyB9O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBSZXF1aXJlZERlZXAgfSBmcm9tICd0eXBlLWZlc3QnO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlZFJlZiwgTWF5YmVSZWYsIFJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyBjb21wdXRlZCwgaXNSZWYsIHJlZiwgdG9SYXcgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHR5cGUge1xuICAkSW50ZXJuYWxSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZSxcbiAgQWxsUnVsZXNEZWNsYXJhdGlvbnMsXG4gIERlZXBSZWFjdGl2ZVN0YXRlLFxuICBEZWVwU2FmZUZvcm1TdGF0ZSxcbiAgTG9jYWxSZWdsZUJlaGF2aW91ck9wdGlvbnMsXG4gIFJlZ2xlLFxuICBSZWdsZUJlaGF2aW91ck9wdGlvbnMsXG4gIFJlZ2xlRXJyb3JUcmVlLFxuICBSZWdsZUV4dGVybmFsRXJyb3JUcmVlLFxuICBSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZSxcbiAgUmVnbGVTdGF0dXMsXG4gIFJlZ2xlVmFsaWRhdGlvbkdyb3VwRW50cnksXG4gIFJlc29sdmVkUmVnbGVCZWhhdmlvdXJPcHRpb25zLFxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IERlZXBNYXliZVJlZiB9IGZyb20gJy4uLy4uL3R5cGVzL3V0aWxzJztcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyB1c2VTdGF0ZVByb3BlcnRpZXMgfSBmcm9tICcuL3VzZVN0YXRlUHJvcGVydGllcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVc2VSZWdsZUNvbXBvc2FibGU8VEN1c3RvbVJ1bGVzIGV4dGVuZHMgUGFydGlhbDxBbGxSdWxlc0RlY2xhcmF0aW9ucz4+KFxuICBjdXN0b21SdWxlcz86ICgpID0+IFRDdXN0b21SdWxlcyxcbiAgb3B0aW9ucz86IFJlZ2xlQmVoYXZpb3VyT3B0aW9uc1xuKSB7XG4gIGNvbnN0IGdsb2JhbE9wdGlvbnM6IFJlcXVpcmVkRGVlcDxSZWdsZUJlaGF2aW91ck9wdGlvbnM+ID0ge1xuICAgIGF1dG9EaXJ0eTogb3B0aW9ucz8uYXV0b0RpcnR5ID8/IHRydWUsXG4gICAgbGF6eTogb3B0aW9ucz8ubGF6eSA/PyBmYWxzZSxcbiAgICByZXdhcmRFYXJseTogb3B0aW9ucz8ucmV3YXJkRWFybHkgPz8gZmFsc2UsXG4gIH07XG5cbiAgZnVuY3Rpb24gdXNlUmVnbGU8XG4gICAgVFN0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBUUnVsZXMgZXh0ZW5kcyBSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZTxUU3RhdGUsIFBhcnRpYWw8QWxsUnVsZXNEZWNsYXJhdGlvbnM+ICYgVEN1c3RvbVJ1bGVzPixcbiAgICBURXh0ZXJuYWwgZXh0ZW5kcyBSZWdsZUV4dGVybmFsRXJyb3JUcmVlPFRTdGF0ZT4sXG4gICAgVFZhbGlkYXRpb25Hcm91cHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBSZWdsZVZhbGlkYXRpb25Hcm91cEVudHJ5W10+LFxuICAgIFRWYWxpZCA9IGtleW9mIFRSdWxlcyBleHRlbmRzIGtleW9mIFJlZ2xlUGFydGlhbFZhbGlkYXRpb25UcmVlPFxuICAgICAgVFN0YXRlLFxuICAgICAgUGFydGlhbDxBbGxSdWxlc0RlY2xhcmF0aW9ucz4gJiBUQ3VzdG9tUnVsZXNcbiAgICA+XG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2UsXG4gID4oXG4gICAgc3RhdGU6IE1heWJlUmVmPFRTdGF0ZT4gfCBEZWVwUmVhY3RpdmVTdGF0ZTxUU3RhdGU+LFxuICAgIHJ1bGVzRmFjdG9yeTogVFZhbGlkIGV4dGVuZHMgdHJ1ZSA/IFRSdWxlcyB8ICgoKSA9PiBUUnVsZXMpIHwgQ29tcHV0ZWRSZWY8VFJ1bGVzPiA6IG5ldmVyLFxuICAgIG9wdGlvbnM/OiBQYXJ0aWFsPERlZXBNYXliZVJlZjxSZWdsZUJlaGF2aW91ck9wdGlvbnM+PiAmXG4gICAgICBMb2NhbFJlZ2xlQmVoYXZpb3VyT3B0aW9uczxUU3RhdGUsIFRSdWxlcywgVEV4dGVybmFsLCBUVmFsaWRhdGlvbkdyb3Vwcz5cbiAgKTogUmVnbGU8VFN0YXRlLCBUUnVsZXMsIFRFeHRlcm5hbCwgVFZhbGlkYXRpb25Hcm91cHM+IHtcbiAgICBjb25zdCBzY29wZVJ1bGVzID0gaXNSZWYocnVsZXNGYWN0b3J5KVxuICAgICAgPyBydWxlc0ZhY3RvcnlcbiAgICAgIDogY29tcHV0ZWQoXG4gICAgICAgICAgKHR5cGVvZiAocnVsZXNGYWN0b3J5IGFzIFRSdWxlcyB8ICgoKSA9PiBUUnVsZXMpKSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBydWxlc0ZhY3RvcnlcbiAgICAgICAgICAgIDogKCkgPT4gcnVsZXNGYWN0b3J5KSBhcyBhbnlcbiAgICAgICAgKTtcblxuICAgIGNvbnN0IHJlc29sdmVkT3B0aW9uczogUmVzb2x2ZWRSZWdsZUJlaGF2aW91ck9wdGlvbnMgPSB7XG4gICAgICAuLi5nbG9iYWxPcHRpb25zLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9IGFzIGFueTtcblxuICAgIGNvbnN0IHByb2Nlc3NlZFN0YXRlID0gaXNSZWYoc3RhdGUpID8gc3RhdGUgOiAocmVmKHN0YXRlKSBhcyBSZWY8VFN0YXRlPik7XG5cbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSBjbG9uZURlZXAodG9SYXcocHJvY2Vzc2VkU3RhdGUudmFsdWUpKTtcblxuICAgIGNvbnN0IHsgcmVnbGUsIGVycm9ycyB9ID0gdXNlU3RhdGVQcm9wZXJ0aWVzKFxuICAgICAgc2NvcGVSdWxlcyBhcyBDb21wdXRlZFJlZjwkSW50ZXJuYWxSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZT4sXG4gICAgICBwcm9jZXNzZWRTdGF0ZSxcbiAgICAgIHJlc29sdmVkT3B0aW9ucyxcbiAgICAgIGN1c3RvbVJ1bGVzXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIHJlc2V0QWxsKCkge1xuICAgICAgcmVnbGUuJHVud2F0Y2goKTtcbiAgICAgIHJlc2V0VmFsdWVzUmVjdXJzaXZlbHkoc3RhdGUsIGluaXRpYWxTdGF0ZSk7XG4gICAgICByZWdsZS4kcmVzZXQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNldFZhbHVlc1JlY3Vyc2l2ZWx5KFxuICAgICAgY3VycmVudDogUmVmPFJlY29yZDxzdHJpbmcsIE1heWJlUmVmPGFueT4+PiB8IFJlY29yZDxzdHJpbmcsIE1heWJlUmVmPGFueT4+LFxuICAgICAgaW5pdGlhbDogUmVjb3JkPHN0cmluZywgTWF5YmVSZWY8YW55Pj5cbiAgICApIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGluaXRpYWwpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBsZXQgY3VycmVudFJlZiA9IGlzUmVmPFJlY29yZDxzdHJpbmcsIE1heWJlUmVmPGFueT4+PihjdXJyZW50KSA/IGN1cnJlbnQudmFsdWUgOiBjdXJyZW50O1xuICAgICAgICBsZXQgY3VycmVudFZhbHVlID0gaXNSZWYoY3VycmVudFJlZltrZXldKSA/IGN1cnJlbnRSZWZba2V5XS52YWx1ZSA6IGN1cnJlbnRSZWZba2V5XTtcbiAgICAgICAgbGV0IGluaXRpYWxSZWYgPSBpc1JlZihpbml0aWFsW2tleV0pID8gKGluaXRpYWxba2V5XSBhcyBhbnkpLl92YWx1ZSA6IGluaXRpYWxba2V5XTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdGlhbFJlZikgJiYgQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgICAgY3VycmVudFJlZltrZXldID0gW107XG4gICAgICAgICAgaW5pdGlhbFJlZi5mb3JFYWNoKCh2YWwsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50UmVmW2tleV1baW5kZXhdID0ge307XG4gICAgICAgICAgICByZXNldFZhbHVlc1JlY3Vyc2l2ZWx5KGN1cnJlbnRSZWZba2V5XVtpbmRleF0sIGluaXRpYWxSZWZbaW5kZXhdKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbml0aWFsUmVmKSkge1xuICAgICAgICAgIHJlc2V0VmFsdWVzUmVjdXJzaXZlbHkoY3VycmVudFZhbHVlLCBpbml0aWFsUmVmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNSZWYoY3VycmVudFJlZltrZXldKSkge1xuICAgICAgICAgICAgY3VycmVudFJlZltrZXldLnZhbHVlID0gaW5pdGlhbFJlZjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudFJlZltrZXldID0gaW5pdGlhbFJlZjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWR5ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgcmV0dXJuICEocmVnbGUuJGludmFsaWQgfHwgcmVnbGUuJHBlbmRpbmcpO1xuICAgIH0pO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZSgpOiBQcm9taXNlPGZhbHNlIHwgRGVlcFNhZmVGb3JtU3RhdGU8VFN0YXRlLCBUUnVsZXM+PiB7XG4gICAgICByZWdsZS4kdG91Y2goKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZ2xlLiR2YWxpZGF0ZSgpO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkU3RhdGUudmFsdWUgYXMgYW55O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZWdsZTogcmVnbGUgYXMgdW5rbm93biBhcyBSZWdsZVN0YXR1czxUU3RhdGUsIFRSdWxlcywgVFZhbGlkYXRpb25Hcm91cHM+LFxuICAgICAgciQ6IHJlZ2xlIGFzIHVua25vd24gYXMgUmVnbGVTdGF0dXM8VFN0YXRlLCBUUnVsZXMsIFRWYWxpZGF0aW9uR3JvdXBzPixcbiAgICAgIGVycm9yczogZXJyb3JzIGFzIFJlZ2xlRXJyb3JUcmVlPFRSdWxlcz4sXG4gICAgICByZXNldEFsbCxcbiAgICAgIHZhbGlkYXRlU3RhdGUsXG4gICAgICByZWFkeSxcbiAgICAgIHN0YXRlOiBwcm9jZXNzZWRTdGF0ZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVzZVJlZ2xlO1xufVxuXG5leHBvcnQgY29uc3QgdXNlUmVnbGUgPSBjcmVhdGVVc2VSZWdsZUNvbXBvc2FibGUoKTtcbiIsImltcG9ydCB0eXBlIHsgQWxsUnVsZXNEZWNsYXJhdGlvbnMsIFJlZ2xlQmVoYXZpb3VyT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVVzZVJlZ2xlQ29tcG9zYWJsZSB9IGZyb20gJy4vdXNlUmVnbGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVnbGVDb25maWc8VEN1c3RvbVJ1bGVzIGV4dGVuZHMgUGFydGlhbDxBbGxSdWxlc0RlY2xhcmF0aW9ucz4+KHtcbiAgcnVsZXMsXG4gIG1vZGlmaWVycyxcbn06IHtcbiAgcnVsZXM/OiAoKSA9PiBUQ3VzdG9tUnVsZXM7XG4gIG1vZGlmaWVycz86IFJlZ2xlQmVoYXZpb3VyT3B0aW9ucztcbn0pIHtcbiAgY29uc3QgdXNlUmVnbGUgPSBjcmVhdGVVc2VSZWdsZUNvbXBvc2FibGU8VEN1c3RvbVJ1bGVzPihydWxlcywgbW9kaWZpZXJzKTtcblxuICByZXR1cm4gdXNlUmVnbGU7XG59XG4iXX0=