@lynx-js/react 0.112.3 → 0.112.4

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.
Files changed (38) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/package.json +2 -2
  3. package/refresh/.turbo/turbo-build.log +2 -2
  4. package/refresh/dist/index.js +16 -4
  5. package/refresh/package.json +1 -1
  6. package/runtime/lib/backgroundSnapshot.js +2 -2
  7. package/runtime/lib/backgroundSnapshot.js.map +1 -1
  8. package/runtime/lib/compat/initData.js +3 -2
  9. package/runtime/lib/compat/initData.js.map +1 -1
  10. package/runtime/lib/lynx/env.js +2 -1
  11. package/runtime/lib/lynx/env.js.map +1 -1
  12. package/runtime/lib/lynx/tt.js +1 -1
  13. package/runtime/lib/lynx/tt.js.map +1 -1
  14. package/runtime/lib/snapshot.js +1 -1
  15. package/runtime/lib/snapshot.js.map +1 -1
  16. package/testing-library/dist/env/vitest.js +22 -8
  17. package/testing-library/dist/index.d.ts +1 -0
  18. package/transform/dist/wasm.cjs +1 -1
  19. package/worklet-runtime/dist/dev.js +89 -7
  20. package/worklet-runtime/dist/main.js +1 -1
  21. package/worklet-runtime/lib/api/animation/animation.d.ts +17 -0
  22. package/worklet-runtime/lib/api/animation/animation.js +39 -0
  23. package/worklet-runtime/lib/api/animation/animation.js.map +1 -0
  24. package/worklet-runtime/lib/api/animation/effect.d.ts +7 -0
  25. package/worklet-runtime/lib/api/animation/effect.js +11 -0
  26. package/worklet-runtime/lib/api/animation/effect.js.map +1 -0
  27. package/worklet-runtime/lib/api/element.d.ts +3 -1
  28. package/worklet-runtime/lib/api/element.js +14 -4
  29. package/worklet-runtime/lib/api/element.js.map +1 -1
  30. package/worklet-runtime/lib/bindings/bindings.d.ts +1 -1
  31. package/worklet-runtime/lib/bindings/bindings.js +9 -1
  32. package/worklet-runtime/lib/bindings/bindings.js.map +1 -1
  33. package/worklet-runtime/lib/eomImpl.d.ts +4 -0
  34. package/worklet-runtime/lib/eomImpl.js +10 -0
  35. package/worklet-runtime/lib/eomImpl.js.map +1 -0
  36. package/worklet-runtime/lib/global.d.ts +2 -0
  37. package/worklet-runtime/lib/workletRuntime.js +2 -0
  38. package/worklet-runtime/lib/workletRuntime.js.map +1 -1
@@ -10,6 +10,77 @@
10
10
  else obj[key] = value;
11
11
  return obj;
12
12
  }
13
+ class Animation {
14
+ cancel() {
15
+ return __ElementAnimate(this.effect.target.element, [
16
+ 3,
17
+ this.id
18
+ ]);
19
+ }
20
+ pause() {
21
+ return __ElementAnimate(this.effect.target.element, [
22
+ 2,
23
+ this.id
24
+ ]);
25
+ }
26
+ play() {
27
+ return __ElementAnimate(this.effect.target.element, [
28
+ 1,
29
+ this.id
30
+ ]);
31
+ }
32
+ start() {
33
+ return __ElementAnimate(this.effect.target.element, [
34
+ 0,
35
+ this.id,
36
+ this.effect.keyframes,
37
+ this.effect.options
38
+ ]);
39
+ }
40
+ constructor(effect){
41
+ _define_property(this, "effect", void 0);
42
+ _define_property(this, "id", void 0);
43
+ this.effect = effect;
44
+ this.id = '__lynx-inner-js-animation-' + Animation.count++;
45
+ this.start();
46
+ }
47
+ }
48
+ _define_property(Animation, "count", 0);
49
+ function effect_define_property(obj, key, value) {
50
+ if (key in obj) Object.defineProperty(obj, key, {
51
+ value: value,
52
+ enumerable: true,
53
+ configurable: true,
54
+ writable: true
55
+ });
56
+ else obj[key] = value;
57
+ return obj;
58
+ }
59
+ class KeyframeEffect {
60
+ constructor(target, keyframes, options){
61
+ effect_define_property(this, "target", void 0);
62
+ effect_define_property(this, "keyframes", void 0);
63
+ effect_define_property(this, "options", void 0);
64
+ this.target = target;
65
+ this.keyframes = keyframes;
66
+ this.options = options;
67
+ }
68
+ }
69
+ function element_define_property(obj, key, value) {
70
+ if (key in obj) Object.defineProperty(obj, key, {
71
+ value: value,
72
+ enumerable: true,
73
+ configurable: true,
74
+ writable: true
75
+ });
76
+ else obj[key] = value;
77
+ return obj;
78
+ }
79
+ let willFlush = false;
80
+ let shouldFlush = true;
81
+ function setShouldFlush(value) {
82
+ shouldFlush = value;
83
+ }
13
84
  class Element {
14
85
  setAttribute(name, value) {
15
86
  __SetAttribute(this.element, name, value);
@@ -36,6 +107,12 @@
36
107
  querySelectorAll(selector) {
37
108
  return __QuerySelectorAll(this.element, selector, {}).map((element)=>new Element(element));
38
109
  }
110
+ animate(keyframes, options) {
111
+ const normalizedOptions = 'number' == typeof options ? {
112
+ duration: options
113
+ } : null != options ? options : {};
114
+ return new Animation(new KeyframeEffect(this, keyframes, normalizedOptions));
115
+ }
39
116
  invoke(methodName, params) {
40
117
  return new Promise((resolve, reject)=>{
41
118
  __InvokeUIMethod(this.element, methodName, null != params ? params : {}, (res)=>{
@@ -46,15 +123,15 @@
46
123
  });
47
124
  }
48
125
  flushElementTree() {
49
- if (Element.willFlush) return;
50
- Element.willFlush = true;
126
+ if (willFlush || !shouldFlush) return;
127
+ willFlush = true;
51
128
  Promise.resolve().then(()=>{
52
- Element.willFlush = false;
129
+ willFlush = false;
53
130
  __FlushElementTree();
54
131
  });
55
132
  }
56
133
  constructor(element){
57
- _define_property(this, "element", void 0);
134
+ element_define_property(this, "element", void 0);
58
135
  Object.defineProperty(this, 'element', {
59
136
  get () {
60
137
  return element;
@@ -62,7 +139,6 @@
62
139
  });
63
140
  }
64
141
  }
65
- _define_property(Element, "willFlush", false);
66
142
  function lepusQuerySelector_define_property(obj, key, value) {
67
143
  if (key in obj) Object.defineProperty(obj, key, {
68
144
  value: value,
@@ -236,6 +312,11 @@
236
312
  function clearDelayedWorklets() {
237
313
  delayWorkletEvent_impl._delayedWorkletParamsMap.clear();
238
314
  }
315
+ function initEomImpl() {
316
+ return {
317
+ setShouldFlush: setShouldFlush
318
+ };
319
+ }
239
320
  function hydrateCtx(ctx, firstScreenCtx) {
240
321
  profile('hydrateCtx', ()=>{
241
322
  hydrateCtxImpl(ctx, firstScreenCtx, ctx._execId);
@@ -324,7 +405,8 @@
324
405
  _refImpl: initWorkletRef(),
325
406
  _runOnBackgroundDelayImpl: initRunOnBackgroundDelay(),
326
407
  _hydrateCtx: hydrateCtx,
327
- _eventDelayImpl: initEventDelay()
408
+ _eventDelayImpl: initEventDelay(),
409
+ _eomImpl: initEomImpl()
328
410
  };
329
411
  if (isRunOnBackgroundEnabled()) globalThis.lynxWorkletImpl._jsFunctionLifecycleManager = new JsFunctionLifecycleManager();
330
412
  globalThis.registerWorklet = registerWorklet;
@@ -404,4 +486,4 @@
404
486
  }
405
487
  })();
406
488
 
407
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2FwaS9lbGVtZW50LnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9hcGkvbGVwdXNRdWVyeVNlbGVjdG9yLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy91dGlscy92ZXJzaW9uLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9hcGkvbHlueEFwaS50cyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvdXRpbHMvcHJvZmlsZS50cyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvd29ya2xldFJlZi50cyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvbGlzdGVuZXJzLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9kZWxheVJ1bk9uQmFja2dyb3VuZC50cyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvZGVsYXlXb3JrbGV0RXZlbnQudHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2h5ZHJhdGUudHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2pzRnVuY3Rpb25MaWZlY3ljbGUudHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL3dvcmtsZXRSdW50aW1lLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuZXhwb3J0IGNsYXNzIEVsZW1lbnQge1xuICBwcml2YXRlIHN0YXRpYyB3aWxsRmx1c2ggPSBmYWxzZTtcblxuICAvLyBAdHMtZXhwZWN0LWVycm9yIHNldCBpbiBjb25zdHJ1Y3RvclxuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnROb2RlO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnROb2RlKSB7XG4gICAgLy8gSW4gTHlueCB2ZXJzaW9ucyBwcmlvciB0byBhbmQgaW5jbHVkaW5nIDIuMTUsXG4gICAgLy8gYSBjcmFzaCBvY2N1cnMgd2hlbiBwcmludGluZyBvciB0cmFuc2ZlcnJpbmcgcmVmQ291bnRlZCBhY3Jvc3MgdGhyZWFkcy5cbiAgICAvLyBCeXBhc3MgdGhpcyBwcm9ibGVtIGJ5IGhpZGluZyB0aGUgZWxlbWVudCBvYmplY3QuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbGVtZW50Jywge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBfX1NldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdHlsZVByb3BlcnR5KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIF9fQWRkSW5saW5lU3R5bGUodGhpcy5lbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gICAgdGhpcy5mbHVzaEVsZW1lbnRUcmVlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0U3R5bGVQcm9wZXJ0aWVzKHN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHN0eWxlcykge1xuICAgICAgX19BZGRJbmxpbmVTdHlsZSh0aGlzLmVsZW1lbnQsIGtleSwgc3R5bGVzW2tleV0hKTtcbiAgICB9XG4gICAgdGhpcy5mbHVzaEVsZW1lbnRUcmVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiBfX0dldEF0dHJpYnV0ZUJ5TmFtZSh0aGlzLmVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldEF0dHJpYnV0ZU5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gX19HZXRBdHRyaWJ1dGVOYW1lcyh0aGlzLmVsZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIHF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3I6IHN0cmluZyk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCByZWYgPSBfX1F1ZXJ5U2VsZWN0b3IodGhpcy5lbGVtZW50LCBzZWxlY3Rvciwge30pO1xuICAgIHJldHVybiByZWYgPyBuZXcgRWxlbWVudChyZWYpIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBxdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yOiBzdHJpbmcpOiBFbGVtZW50W10ge1xuICAgIHJldHVybiBfX1F1ZXJ5U2VsZWN0b3JBbGwodGhpcy5lbGVtZW50LCBzZWxlY3Rvciwge30pLm1hcCgoZWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBFbGVtZW50KGVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGludm9rZShcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBfX0ludm9rZVVJTWV0aG9kKFxuICAgICAgICB0aGlzLmVsZW1lbnQsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhcmFtcyA/PyB7fSxcbiAgICAgICAgKHJlczogeyBjb2RlOiBudW1iZXI7IGRhdGE6IHVua25vd24gfSkgPT4ge1xuICAgICAgICAgIGlmIChyZXMuY29kZSA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1VJIG1ldGhvZCBpbnZva2U6ICcgKyBKU09OLnN0cmluZ2lmeShyZXMpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuZmx1c2hFbGVtZW50VHJlZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaEVsZW1lbnRUcmVlKCkge1xuICAgIGlmIChFbGVtZW50LndpbGxGbHVzaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBFbGVtZW50LndpbGxGbHVzaCA9IHRydWU7XG4gICAgdm9pZCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIEVsZW1lbnQud2lsbEZsdXNoID0gZmFsc2U7XG4gICAgICBfX0ZsdXNoRWxlbWVudFRyZWUoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICcuL2VsZW1lbnQuanMnO1xuXG5jbGFzcyBQYWdlRWxlbWVudCB7XG4gIHByaXZhdGUgc3RhdGljIHBhZ2VFbGVtZW50OiBFbGVtZW50Tm9kZSB8IHVuZGVmaW5lZDtcblxuICBzdGF0aWMgZ2V0KCkge1xuICAgIFBhZ2VFbGVtZW50LnBhZ2VFbGVtZW50ID8/PSBfX0dldFBhZ2VFbGVtZW50KCk7XG4gICAgcmV0dXJuIFBhZ2VFbGVtZW50LnBhZ2VFbGVtZW50O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yKGNzc1NlbGVjdG9yOiBzdHJpbmcpOiBFbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGVsZW1lbnQgPSBfX1F1ZXJ5U2VsZWN0b3IoUGFnZUVsZW1lbnQuZ2V0KCksIGNzc1NlbGVjdG9yLCB7fSk7XG4gIHJldHVybiBlbGVtZW50ID8gbmV3IEVsZW1lbnQoZWxlbWVudCkgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbChjc3NTZWxlY3Rvcjogc3RyaW5nKTogRWxlbWVudFtdIHtcbiAgcmV0dXJuIF9fUXVlcnlTZWxlY3RvckFsbChQYWdlRWxlbWVudC5nZXQoKSwgY3NzU2VsZWN0b3IsIHt9KS5tYXAoXG4gICAgKGVsZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgRWxlbWVudChlbGVtZW50KTtcbiAgICB9LFxuICApO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmV4cG9ydCBmdW5jdGlvbiBpc1Nka1ZlcnNpb25HdChtYWpvcjogbnVtYmVyLCBtaW5vcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IGx5bnhTZGtWZXJzaW9uOiBzdHJpbmcgPSBTeXN0ZW1JbmZvLmx5bnhTZGtWZXJzaW9uID8/ICcxLjAnO1xuICBjb25zdCB2ZXJzaW9uID0gbHlueFNka1ZlcnNpb24uc3BsaXQoJy4nKTtcbiAgcmV0dXJuIChcbiAgICBOdW1iZXIodmVyc2lvblswXSkgPiBtYWpvclxuICAgIHx8IChOdW1iZXIodmVyc2lvblswXSkgPT0gbWFqb3IgJiYgTnVtYmVyKHZlcnNpb25bMV0pID4gbWlub3IpXG4gICk7XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgcXVlcnlTZWxlY3RvciwgcXVlcnlTZWxlY3RvckFsbCB9IGZyb20gJy4vbGVwdXNRdWVyeVNlbGVjdG9yLmpzJztcbmltcG9ydCB7IGlzU2RrVmVyc2lvbkd0IH0gZnJvbSAnLi4vdXRpbHMvdmVyc2lvbi5qcyc7XG5cbmZ1bmN0aW9uIGluaXRBcGlFbnYoKTogdm9pZCB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBseW54LnF1ZXJ5U2VsZWN0b3IgPSBxdWVyeVNlbGVjdG9yO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgbHlueC5xdWVyeVNlbGVjdG9yQWxsID0gcXVlcnlTZWxlY3RvckFsbDtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuc2V0VGltZW91dCA9IGx5bnguc2V0VGltZW91dCBhcyAoY2I6ICgpID0+IHZvaWQsIHRpbWVvdXQ6IG51bWJlcikgPT4gbnVtYmVyO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5zZXRJbnRlcnZhbCA9IGx5bnguc2V0SW50ZXJ2YWwgYXMgKGNiOiAoKSA9PiB2b2lkLCB0aW1lb3V0OiBudW1iZXIpID0+IG51bWJlcjtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuY2xlYXJUaW1lb3V0ID0gbHlueC5jbGVhclRpbWVvdXQgYXMgKHRpbWVvdXQ6IG51bWJlcikgPT4gdm9pZDtcbiAgLy8gSW4gbHlueCAyLjE0IGBjbGVhckludGVydmFsYCBpcyBtaXN0YWtlbmx5IHNwZWxsZWQgYXMgYGNsZWFyVGltZUludGVydmFsYC4gVGhpcyBpcyBmaXhlZCBpbiBseW54IDIuMTUuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLmNsZWFySW50ZXJ2YWwgPSAobHlueC5jbGVhckludGVydmFsID8/IGx5bnguY2xlYXJUaW1lSW50ZXJ2YWwpIGFzICh0aW1lb3V0OiBudW1iZXIpID0+IHZvaWQ7XG5cbiAge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICAgIGNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGx5bngucmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFzIChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4gbnVtYmVyO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICAgIGx5bngucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsVGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoXG4gICAgICBjYWxsYmFjazogKCkgPT4gdm9pZCxcbiAgICApID0+IHtcbiAgICAgIGlmICghaXNTZGtWZXJzaW9uR3QoMiwgMTUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAncmVxdWVzdEFuaW1hdGlvbkZyYW1lIGluIG1haW4gdGhyZWFkIHNjcmlwdCByZXF1aXJlcyBMeW54IHNkayB2ZXJzaW9uIDIuMTYnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gbHlueC5jYW5jZWxBbmltYXRpb25GcmFtZSBhcyAocmVxdWVzdElkOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB7IGluaXRBcGlFbnYgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5leHBvcnQgZnVuY3Rpb24gcHJvZmlsZTxSZXQsIEZuIGV4dGVuZHMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUmV0PihcbiAgc2xpY2VOYW1lOiBzdHJpbmcsXG4gIGY6IEZuLFxuKTogUmV0IHtcbiAgLyogdjggaWdub3JlIG5leHQgOSAqL1xuICAvLyBUT0RPOiBjaGFuZ2UgaXQgdG8gX19QUk9GSUxFX19cbiAgaWYgKF9fREVWX18pIHtcbiAgICBjb25zb2xlLnByb2ZpbGUoc2xpY2VOYW1lKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGYoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY29uc29sZS5wcm9maWxlRW5kKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmKCk7XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSAnLi9hcGkvZWxlbWVudC5qcyc7XG5pbXBvcnQgdHlwZSB7IFdvcmtsZXRSZWYsIFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZkltcGwgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuXG5pbnRlcmZhY2UgUmVmSW1wbCB7XG4gIF93b3JrbGV0UmVmTWFwOiBSZWNvcmQ8V29ya2xldFJlZklkLCBXb3JrbGV0UmVmPHVua25vd24+PjtcbiAgX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcDogUmVjb3JkPFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZjx1bmtub3duPj47XG4gIHVwZGF0ZVdvcmtsZXRSZWYoXG4gICAgcmVmSW1wbDogV29ya2xldFJlZkltcGw8RWxlbWVudCB8IG51bGw+LFxuICAgIGVsZW1lbnQ6IEVsZW1lbnROb2RlIHwgbnVsbCxcbiAgKTogdm9pZDtcbiAgdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMocGF0Y2g6IFtudW1iZXIsIHVua25vd25dW10pOiB2b2lkO1xuICBjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCgpOiB2b2lkO1xufVxuXG5sZXQgaW1wbDogUmVmSW1wbCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaW5pdFdvcmtsZXRSZWYoKTogUmVmSW1wbCB7XG4gIHJldHVybiAoaW1wbCA9IHtcbiAgICBfd29ya2xldFJlZk1hcDoge30sXG4gICAgLyoqXG4gICAgICogTWFwIG9mIHdvcmtsZXQgcmVmcyB0aGF0IGFyZSBjcmVhdGVkIGR1cmluZyBmaXJzdCBzY3JlZW4gcmVuZGVyaW5nLlxuICAgICAqIFRoZXNlIHJlZnMgYXJlIGNyZWF0ZWQgd2l0aCBuZWdhdGl2ZSBJRHMgYW5kIG5lZWQgdG8gYmUgaHlkcmF0ZWRcbiAgICAgKiB3aGVuIHRoZSBhcHAgc3RhcnRzLiBUaGUgbWFwIGlzIGNsZWFyZWQgYWZ0ZXIgaHlkcmF0aW9uIGlzIGNvbXBsZXRlXG4gICAgICogdG8gZnJlZSB1cCBtZW1vcnkuXG4gICAgICovXG4gICAgX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcDoge30sXG4gICAgdXBkYXRlV29ya2xldFJlZixcbiAgICB1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcyxcbiAgICBjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCxcbiAgfSk7XG59XG5cbmNvbnN0IGNyZWF0ZVdvcmtsZXRSZWYgPSA8VD4oXG4gIGlkOiBXb3JrbGV0UmVmSWQsXG4gIHZhbHVlOiBULFxuKTogV29ya2xldFJlZjxUPiA9PiB7XG4gIHJldHVybiB7XG4gICAgY3VycmVudDogdmFsdWUsXG4gICAgX3d2aWQ6IGlkLFxuICB9O1xufTtcblxuY29uc3QgZ2V0RnJvbVdvcmtsZXRSZWZNYXAgPSA8VD4oXG4gIHJlZkltcGw6IFdvcmtsZXRSZWZJbXBsPFQ+LFxuKTogV29ya2xldFJlZjxUPiA9PiB7XG4gIGNvbnN0IGlkID0gcmVmSW1wbC5fd3ZpZDtcbiAgbGV0IHZhbHVlO1xuICBpZiAoaWQgPCAwKSB7XG4gICAgLy8gQXQgdGhlIGZpcnN0IHNjcmVlbiByZW5kZXJpbmcsIHRoZSB3b3JrbGV0IHJlZiBpcyBjcmVhdGVkIHdpdGggYSBuZWdhdGl2ZSBJRC5cbiAgICAvLyBNaWdodCBiZSBjYWxsZWQgaW4gdHdvIHNjZW5hcmlvczpcbiAgICAvLyAxLiBJbiBNVFMgZXZlbnRzXG4gICAgLy8gMi4gSW4gYG1haW4tdGhyZWFkOnJlZmBcbiAgICB2YWx1ZSA9IGltcGwhLl9maXJzdFNjcmVlbldvcmtsZXRSZWZNYXBbaWRdIGFzIFdvcmtsZXRSZWY8VD47XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdmFsdWUgPSBpbXBsIS5fZmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwW2lkXSA9IGNyZWF0ZVdvcmtsZXRSZWYoaWQsIHJlZkltcGwuX2luaXRWYWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gaW1wbCEuX3dvcmtsZXRSZWZNYXBbaWRdIGFzIFdvcmtsZXRSZWY8VD47XG4gIH1cblxuICAvKiB2OCBpZ25vcmUgbmV4dCAzICovXG4gIGlmIChfX0RFVl9fICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtsZXQ6IHJlZiBpcyBub3QgaW5pdGlhbGl6ZWQ6ICcgKyBpZCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuZnVuY3Rpb24gcmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcChpZDogV29ya2xldFJlZklkKTogdm9pZCB7XG4gIGRlbGV0ZSBpbXBsIS5fd29ya2xldFJlZk1hcFtpZF07XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGVsZW1lbnQgaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIGVsZW1lbnQgbm9kZSwgdGhlbiBzZXQgdGhlIHdvcmtsZXQgdmFsdWUgdG8gaXQuXG4gKiBUaGlzIGlzIGNhbGxlZCBpbiBgc25hcHNob3RDb250ZXh0VXBkYXRlV29ya2xldFJlZmAuXG4gKiBAcGFyYW0gaGFuZGxlIGhhbmRsZSBvZiB0aGUgd29ya2xldCB2YWx1ZS5cbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVdvcmtsZXRSZWYoXG4gIGhhbmRsZTogV29ya2xldFJlZkltcGw8RWxlbWVudCB8IG51bGw+LFxuICBlbGVtZW50OiBFbGVtZW50Tm9kZSB8IG51bGwsXG4pOiB2b2lkIHtcbiAgZ2V0RnJvbVdvcmtsZXRSZWZNYXAoaGFuZGxlKS5jdXJyZW50ID0gZWxlbWVudFxuICAgID8gbmV3IEVsZW1lbnQoZWxlbWVudClcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVdvcmtsZXRSZWZJbml0VmFsdWVDaGFuZ2VzKFxuICBwYXRjaDogW1dvcmtsZXRSZWZJZCwgdW5rbm93bl1bXSxcbik6IHZvaWQge1xuICBwcm9maWxlKCd1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcycsICgpID0+IHtcbiAgICBwYXRjaC5mb3JFYWNoKChbaWQsIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKCFpbXBsIS5fd29ya2xldFJlZk1hcFtpZF0pIHtcbiAgICAgICAgaW1wbCEuX3dvcmtsZXRSZWZNYXBbaWRdID0gY3JlYXRlV29ya2xldFJlZihpZCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJGaXJzdFNjcmVlbldvcmtsZXRSZWZNYXAoKTogdm9pZCB7XG4gIGltcGwhLl9maXJzdFNjcmVlbldvcmtsZXRSZWZNYXAgPSB7fTtcbn1cblxuZXhwb3J0IHtcbiAgdHlwZSBSZWZJbXBsLFxuICBjcmVhdGVXb3JrbGV0UmVmLFxuICBpbml0V29ya2xldFJlZixcbiAgZ2V0RnJvbVdvcmtsZXRSZWZNYXAsXG4gIHJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAsXG4gIHVwZGF0ZVdvcmtsZXRSZWZJbml0VmFsdWVDaGFuZ2VzLFxufTtcbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBXb3JrbGV0RXZlbnRzIH0gZnJvbSAnLi9iaW5kaW5ncy9ldmVudHMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWxlYXNlV29ya2xldFJlZkRhdGEsIFJ1bldvcmtsZXRDdHhEYXRhLCBSdW5Xb3JrbGV0Q3R4UmV0RGF0YSB9IGZyb20gJy4vYmluZGluZ3MvZXZlbnRzLmpzJztcbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBFdmVudCB9IGZyb20gJy4vdHlwZXMvcnVudGltZVByb3h5LmpzJztcbmltcG9ydCB7IHJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAgfSBmcm9tICcuL3dvcmtsZXRSZWYuanMnO1xuXG5mdW5jdGlvbiBpbml0RXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gIGNvbnN0IGpzQ29udGV4dCA9IGx5bnguZ2V0SlNDb250ZXh0KCk7XG4gIGpzQ29udGV4dC5hZGRFdmVudExpc3RlbmVyKFxuICAgIFdvcmtsZXRFdmVudHMucnVuV29ya2xldEN0eCxcbiAgICAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhIGFzIHN0cmluZykgYXMgUnVuV29ya2xldEN0eERhdGE7XG4gICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IHJ1bldvcmtsZXQoZGF0YS53b3JrbGV0LCBkYXRhLnBhcmFtcyBhcyBDbG9zdXJlVmFsdWVUeXBlW10pO1xuICAgICAganNDb250ZXh0LmRpc3BhdGNoRXZlbnQoe1xuICAgICAgICB0eXBlOiBXb3JrbGV0RXZlbnRzLkZ1bmN0aW9uQ2FsbFJldCxcbiAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHJlc29sdmVJZDogZGF0YS5yZXNvbHZlSWQsXG4gICAgICAgICAgcmV0dXJuVmFsdWUsXG4gICAgICAgIH0gYXMgUnVuV29ya2xldEN0eFJldERhdGEpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgKTtcbiAganNDb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgV29ya2xldEV2ZW50cy5yZWxlYXNlV29ya2xldFJlZixcbiAgICAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICByZW1vdmVWYWx1ZUZyb21Xb3JrbGV0UmVmTWFwKChldmVudC5kYXRhIGFzIFJlbGVhc2VXb3JrbGV0UmVmRGF0YSkuaWQpO1xuICAgIH0sXG4gICk7XG59XG5cbmV4cG9ydCB7IGluaXRFdmVudExpc3RlbmVycyB9O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB0eXBlIHsgSnNGbkhhbmRsZSB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuXG5pbnRlcmZhY2UgRGV0YWlscyB7XG4gIHRhc2s6IChmbklkOiBudW1iZXIsIGV4ZWNJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIC8vIFRoaXMgY29tZXMgZnJvbSB0aGUgYmFja2dyb3VuZCB0aHJlYWQsIGluc2VydGVkIGhlcmUgZHVyaW5nIGN0eCBoeWRyYXRpb24uXG4gIGpzRm5IYW5kbGU/OiBKc0ZuSGFuZGxlO1xufVxuXG5pbnRlcmZhY2UgUnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsIHtcbiAgLy8gRWxlbWVudHMgc2hvdWxkIGtlZXAgdGhlIG9yZGVyIGJlaW5nIGNhbGxlZCBieSB0aGUgdXNlci5cbiAgZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5OiBEZXRhaWxzW107XG4gIGRlbGF5UnVuT25CYWNrZ3JvdW5kKGZuT2JqOiBKc0ZuSGFuZGxlLCBmbjogKGZuSWQ6IG51bWJlciwgZXhlY0lkOiBudW1iZXIpID0+IHZvaWQpOiB2b2lkO1xuICBydW5EZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9ucygpOiB2b2lkO1xufVxuXG5sZXQgaW1wbDogUnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkoKTogUnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsIHtcbiAgcmV0dXJuIChpbXBsID0ge1xuICAgIGRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheTogW10sXG4gICAgZGVsYXlSdW5PbkJhY2tncm91bmQsXG4gICAgcnVuRGVsYXllZEJhY2tncm91bmRGdW5jdGlvbnMsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWxheVJ1bk9uQmFja2dyb3VuZChmbk9iajogSnNGbkhhbmRsZSwgdGFzazogKGZuSWQ6IG51bWJlciwgZXhlY0lkOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5LnB1c2goeyB0YXNrIH0pO1xuICBjb25zdCBkZWxheUluZGljZXMgPSBmbk9iai5fZGVsYXlJbmRpY2VzID8/PSBbXTtcbiAgZGVsYXlJbmRpY2VzLnB1c2goaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5Lmxlbmd0aCAtIDEpO1xufVxuXG5mdW5jdGlvbiBydW5EZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9ucygpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBkZXRhaWxzIG9mIGltcGwhLmRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheSkge1xuICAgIGlmIChkZXRhaWxzLmpzRm5IYW5kbGUpIHtcbiAgICAgIGRldGFpbHMudGFzayhkZXRhaWxzLmpzRm5IYW5kbGUuX2pzRm5JZCEsIGRldGFpbHMuanNGbkhhbmRsZS5fZXhlY0lkISk7XG4gICAgfVxuICB9XG4gIGltcGwhLmRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheS5sZW5ndGggPSAwO1xufVxuXG5leHBvcnQgeyB0eXBlIFJ1bk9uQmFja2dyb3VuZERlbGF5SW1wbCwgaW5pdFJ1bk9uQmFja2dyb3VuZERlbGF5IH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlLCBXb3JrbGV0IH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBwcm9maWxlIH0gZnJvbSAnLi91dGlscy9wcm9maWxlLmpzJztcblxuaW50ZXJmYWNlIEV2ZW50RGVsYXlJbXBsIHtcbiAgX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwOiBNYXA8c3RyaW5nLCBDbG9zdXJlVmFsdWVUeXBlW11bXT47XG4gIHJ1bkRlbGF5ZWRXb3JrbGV0KHdvcmtsZXQ6IFdvcmtsZXQsIGVsZW1lbnQ6IEVsZW1lbnROb2RlKTogdm9pZDtcbiAgY2xlYXJEZWxheWVkV29ya2xldHMoKTogdm9pZDtcbn1cblxubGV0IGltcGw6IEV2ZW50RGVsYXlJbXBsIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpbml0RXZlbnREZWxheSgpOiBFdmVudERlbGF5SW1wbCB7XG4gIHJldHVybiAoaW1wbCA9IHtcbiAgICBfZGVsYXllZFdvcmtsZXRQYXJhbXNNYXA6IG5ldyBNYXAoKSxcbiAgICBydW5EZWxheWVkV29ya2xldCxcbiAgICBjbGVhckRlbGF5ZWRXb3JrbGV0cyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlbGF5RXhlY1VudGlsSnNSZWFkeShcbiAgaGFzaDogc3RyaW5nLFxuICBwYXJhbXM6IENsb3N1cmVWYWx1ZVR5cGVbXSxcbik6IHZvaWQge1xuICBwcm9maWxlKCdkZWxheUV4ZWNVbnRpbEpzUmVhZHk6ICcgKyBoYXNoLCAoKSA9PiB7XG4gICAgY29uc3QgbWFwID0gaW1wbCEuX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwO1xuICAgIGNvbnN0IHBhcmFtVmVjID0gbWFwLmdldChoYXNoKTtcbiAgICBpZiAocGFyYW1WZWMpIHtcbiAgICAgIHBhcmFtVmVjLnB1c2gocGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFwLnNldChoYXNoLCBbcGFyYW1zXSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcnVuRGVsYXllZFdvcmtsZXQod29ya2xldDogV29ya2xldCwgZWxlbWVudDogRWxlbWVudE5vZGUpOiB2b2lkIHtcbiAgcHJvZmlsZSgnY29tbWl0RGVsYXllZFdvcmtsZXQnLCAoKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zVmVjID0gaW1wbCEuX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwLmdldChcbiAgICAgIHdvcmtsZXQuX3drbHRJZCxcbiAgICApO1xuICAgIGlmIChwYXJhbXNWZWMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsZWZ0UGFyYW1zVmVjOiBDbG9zdXJlVmFsdWVUeXBlW11bXSA9IFtdO1xuICAgIHBhcmFtc1ZlYy5mb3JFYWNoKChwYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0UGFyYW0gPSBwYXJhbXNbMF0gYXMgeyBjdXJyZW50VGFyZ2V0PzogeyBlbGVtZW50UmVmcHRyPzogRWxlbWVudE5vZGUgfSB9IHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGZpcnN0UGFyYW0/LmN1cnJlbnRUYXJnZXQ/LmVsZW1lbnRSZWZwdHIgPT09IGVsZW1lbnQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcHJvZmlsZSgncnVuRGVsYXllZFdvcmtsZXQnLCAoKSA9PiB7XG4gICAgICAgICAgICBydW5Xb3JrbGV0KHdvcmtsZXQsIHBhcmFtcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdFBhcmFtc1ZlYy5wdXNoKHBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaW1wbCEuX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwLnNldChcbiAgICAgIHdvcmtsZXQuX3drbHRJZCxcbiAgICAgIGxlZnRQYXJhbXNWZWMsXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyRGVsYXllZFdvcmtsZXRzKCk6IHZvaWQge1xuICBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXAuY2xlYXIoKTtcbn1cblxuZXhwb3J0IHsgdHlwZSBFdmVudERlbGF5SW1wbCwgaW5pdEV2ZW50RGVsYXksIGRlbGF5RXhlY1VudGlsSnNSZWFkeSwgcnVuRGVsYXllZFdvcmtsZXQsIGNsZWFyRGVsYXllZFdvcmtsZXRzIH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuXG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIEpzRm5IYW5kbGUsIFdvcmtsZXQsIFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZkltcGwgfSBmcm9tICcuL2JpbmRpbmdzL2luZGV4LmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuXG4vKipcbiAqIEh5ZHJhdGVzIGEgV29ya2xldCBjb250ZXh0IHdpdGggZGF0YSBmcm9tIGEgZmlyc3Qtc2NyZWVuIFdvcmtsZXQgY29udGV4dC5cbiAqIFRoaXMgcHJvY2VzcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBydW4gYWxsIGRlbGF5ZWQgYHJ1bk9uQmFja2dyb3VuZGAgZnVuY3Rpb25zXG4gKiBhbmQgaW5pdGlhbGl6ZSBgV29ya2xldFJlZmAgdmFsdWVzIG1vZGlmaWVkIGJlZm9yZSBoeWRyYXRpb24uXG4gKlxuICogQHBhcmFtIGN0eCBUaGUgdGFyZ2V0IFdvcmtsZXQgY29udGV4dCB0byBiZSBoeWRyYXRlZC5cbiAqIEBwYXJhbSBmaXJzdFNjcmVlbkN0eCBUaGUgV29ya2xldCBjb250ZXh0IGZyb20gdGhlIGZpcnN0IHNjcmVlbiByZW5kZXJpbmcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgZGF0YSB0byBoeWRyYXRlIHdpdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlQ3R4KGN0eDogV29ya2xldCwgZmlyc3RTY3JlZW5DdHg6IFdvcmtsZXQpOiB2b2lkIHtcbiAgcHJvZmlsZSgnaHlkcmF0ZUN0eCcsICgpID0+IHtcbiAgICBoeWRyYXRlQ3R4SW1wbChjdHgsIGZpcnN0U2NyZWVuQ3R4LCBjdHguX2V4ZWNJZCEpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaHlkcmF0ZUN0eEltcGwoY3R4OiBDbG9zdXJlVmFsdWVUeXBlLCBmaXJzdFNjcmVlbkN0eDogQ2xvc3VyZVZhbHVlVHlwZSwgZXhlY0lkOiBudW1iZXIpOiB2b2lkIHtcbiAgaWYgKCFjdHggfHwgdHlwZW9mIGN0eCAhPT0gJ29iamVjdCcgfHwgIWZpcnN0U2NyZWVuQ3R4IHx8IHR5cGVvZiBmaXJzdFNjcmVlbkN0eCAhPT0gJ29iamVjdCcpIHJldHVybjtcblxuICBjb25zdCBjdHhPYmogPSBjdHggYXMgUmVjb3JkPHN0cmluZywgQ2xvc3VyZVZhbHVlVHlwZT47XG4gIGNvbnN0IGZpcnN0U2NyZWVuQ3R4T2JqID0gZmlyc3RTY3JlZW5DdHggYXMgUmVjb3JkPHN0cmluZywgQ2xvc3VyZVZhbHVlVHlwZT47XG5cbiAgaWYgKGN0eE9ialsnX3drbHRJZCddICYmIGN0eE9ialsnX3drbHRJZCddICE9PSBmaXJzdFNjcmVlbkN0eE9ialsnX3drbHRJZCddKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mb3ItaW4tYXJyYXlcbiAgZm9yIChjb25zdCBrZXkgaW4gY3R4KSB7XG4gICAgaWYgKGtleSA9PT0gJ193dmlkJykge1xuICAgICAgaHlkcmF0ZU1haW5UaHJlYWRSZWYoY3R4T2JqW2tleV0gYXMgV29ya2xldFJlZklkLCBmaXJzdFNjcmVlbkN0eE9iaiBhcyB1bmtub3duIGFzIFdvcmtsZXRSZWZJbXBsPHVua25vd24+KTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ19qc0ZuJykge1xuICAgICAgaHlkcmF0ZURlbGF5UnVuT25CYWNrZ3JvdW5kVGFza3MoXG4gICAgICAgIGN0eE9ialtrZXldIGFzIFJlY29yZDxzdHJpbmcsIEpzRm5IYW5kbGU+LFxuICAgICAgICBmaXJzdFNjcmVlbkN0eE9ialtrZXldIGFzIFJlY29yZDxzdHJpbmcsIEpzRm5IYW5kbGU+LFxuICAgICAgICBleGVjSWQsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaXJzdFNjcmVlblZhbHVlID0gdHlwZW9mIGZpcnN0U2NyZWVuQ3R4T2JqW2tleV0gPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyAoZmlyc3RTY3JlZW5DdHhPYmpba2V5XSBhcyB7IGN0eDogQ2xvc3VyZVZhbHVlVHlwZSB9KS5jdHhcbiAgICAgICAgOiBmaXJzdFNjcmVlbkN0eE9ialtrZXldO1xuICAgICAgaHlkcmF0ZUN0eEltcGwoY3R4T2JqW2tleV0sIGZpcnN0U2NyZWVuVmFsdWUsIGV4ZWNJZCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSHlkcmF0ZXMgYSBXb3JrbGV0UmVmIG9uIHRoZSBtYWluIHRocmVhZC5cbiAqIFRoaXMgaXMgdXNlZCB0byB1cGRhdGUgdGhlIFdvcmtsZXRSZWYncyBiYWNrZ3JvdW5kIGluaXRpYWwgdmFsdWUgYmFzZWQgb24gY2hhbmdlc1xuICogdGhhdCBvY2N1cnJlZCBpbiB0aGUgZmlyc3Qtc2NyZWVuIFdvcmtsZXQgY29udGV4dCBiZWZvcmUgaHlkcmF0aW9uLlxuICpcbiAqIEBwYXJhbSByZWZJZCBUaGUgSUQgb2YgdGhlIFdvcmtsZXRSZWYgdG8gaHlkcmF0ZS5cbiAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHZhbHVlIGZvciB0aGUgV29ya2xldFJlZi5cbiAqL1xuZnVuY3Rpb24gaHlkcmF0ZU1haW5UaHJlYWRSZWYocmVmSWQ6IFdvcmtsZXRSZWZJZCwgdmFsdWU6IFdvcmtsZXRSZWZJbXBsPHVua25vd24+IHwgeyBjdXJyZW50OiB1bmtub3duIH0pIHtcbiAgaWYgKCdfaW5pdFZhbHVlJyBpbiB2YWx1ZSkge1xuICAgIC8vIFRoZSByZWYgaGFzIG5vdCBiZWVuIGFjY2Vzc2VkIHlldC5cbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcmVmID0gbHlueFdvcmtsZXRJbXBsIS5fcmVmSW1wbC5fd29ya2xldFJlZk1hcFtyZWZJZF0hO1xuICByZWYuY3VycmVudCA9IHZhbHVlLmN1cnJlbnQ7XG59XG5cbi8qKlxuICogSHlkcmF0ZXMgZGVsYXllZCBgcnVuT25CYWNrZ3JvdW5kYCB0YXNrcy5cbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGFueSBgcnVuT25CYWNrZ3JvdW5kYCBjYWxscyB0aGF0IHdlcmUgZGVsYXllZFxuICogZHVyaW5nIHRoZSBmaXJzdC1zY3JlZW4gcmVuZGVyaW5nIGFyZSBjb3JyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHRoZWlyXG4gKiByZXNwZWN0aXZlIEphdmFTY3JpcHQgZnVuY3Rpb24gaGFuZGxlcyBpbiB0aGUgaHlkcmF0ZWQgV29ya2xldCBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBoeWRyYXRlRGVsYXlSdW5PbkJhY2tncm91bmRUYXNrcyhcbiAgZm5PYmpzOiBSZWNvcmQ8c3RyaW5nLCBKc0ZuSGFuZGxlPiwgLy8gZXhhbXBsZToge1wiX2pzRm4xXCI6e1wiX2pzRm5JZFwiOjF9fVxuICBmaXJzdFNjcmVlbkZuT2JqczogUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sIC8vIGV4YW1wbGU6IHtcIl9qc0ZuMVwiOntcIl9pc0ZpcnN0U2NyZWVuXCI6dHJ1ZSxcIl9kZWxheUluZGljZXNcIjpbMF19fVxuICBleGVjSWQ6IG51bWJlcixcbikge1xuICBmb3IgKGNvbnN0IGZuTmFtZSBpbiBmbk9ianMpIHtcbiAgICBjb25zdCBmbk9iaiA9IGZuT2Jqc1tmbk5hbWVdITtcbiAgICBjb25zdCBmaXJzdFNjcmVlbkZuT2JqOiBKc0ZuSGFuZGxlIHwgdW5kZWZpbmVkID0gZmlyc3RTY3JlZW5Gbk9ianNbZm5OYW1lXTtcbiAgICBpZiAoIWZpcnN0U2NyZWVuRm5PYmo/Ll9kZWxheUluZGljZXMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGZpcnN0U2NyZWVuRm5PYmouX2RlbGF5SW5kaWNlcykge1xuICAgICAgY29uc3QgZGV0YWlscyA9IGx5bnhXb3JrbGV0SW1wbCEuX3J1bk9uQmFja2dyb3VuZERlbGF5SW1wbC5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXlbaW5kZXhdITtcbiAgICAgIGZuT2JqLl9leGVjSWQgPSBleGVjSWQ7XG4gICAgICBkZXRhaWxzLmpzRm5IYW5kbGUgPSBmbk9iajtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBXb3JrbGV0RXZlbnRzIH0gZnJvbSAnLi9iaW5kaW5ncy9ldmVudHMuanMnO1xuaW1wb3J0IHsgcHJvZmlsZSB9IGZyb20gJy4vdXRpbHMvcHJvZmlsZS5qcyc7XG5pbXBvcnQgeyBpc1Nka1ZlcnNpb25HdCB9IGZyb20gJy4vdXRpbHMvdmVyc2lvbi5qcyc7XG5cbi8qKlxuICogYEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyYCBtb25pdG9ycyByZWZlcmVuY2VzIHRvIEpTIGZ1bmN0aW9uIGhhbmRsZXMgdG8gYmUgY2FsbGVkIGJ5IGBydW5PbkJhY2tncm91bmQoKWAuXG4gKiBJbiBKUyBjb250ZXh0LCBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGJ5IGBydW5PbkJhY2tncm91bmQoKWAgaXMgcmVmZXJlbmNlZCBieSBgSnNGbkhhbmRsZWBzIGFuZCBmaW5hbGx5IGJ5IGBleGVjSWRgLlxuICogV2hlbiBhbGwgYEpzRm5IYW5kbGVgcyBpbiBsZXB1cyBhcmUgcmVsZWFzZWQsIGFuIGV2ZW50IHdpbGwgYmUgc2VudCB0byBKUyBjb250ZXh0IHRvIGRlLXJlZiB0aGUgYGV4ZWNJZGAsXG4gKiByZXN1bHRpbmcgYSBkZS1yZWYgdG8gdGhlIGpzIGZ1bmN0aW9uIGluIEpTIGNvbnRleHQuXG4gKi9cbmNsYXNzIEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBleGVjSWRSZWZDb3VudCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIHByaXZhdGUgZXhlY0lkU2V0VG9GaXJlID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIHByaXZhdGUgd2lsbEZpcmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWdpc3RyeT86IEZpbmFsaXphdGlvblJlZ2lzdHJ5PG51bWJlcj4gPSB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yZWdpc3RyeSA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeTxudW1iZXI+KHRoaXMucmVtb3ZlUmVmLmJpbmQodGhpcykpO1xuICB9XG5cbiAgYWRkUmVmKGV4ZWNJZDogbnVtYmVyLCBvYmpUb1JlZjogb2JqZWN0KTogdm9pZCB7XG4gICAgdGhpcy5leGVjSWRSZWZDb3VudC5zZXQoXG4gICAgICBleGVjSWQsXG4gICAgICAodGhpcy5leGVjSWRSZWZDb3VudC5nZXQoZXhlY0lkKSA/PyAwKSArIDEsXG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdHJ5IS5yZWdpc3RlcihvYmpUb1JlZiwgZXhlY0lkKTtcbiAgfVxuXG4gIHJlbW92ZVJlZihleGVjSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJjID0gdGhpcy5leGVjSWRSZWZDb3VudC5nZXQoZXhlY0lkKSE7XG4gICAgaWYgKHJjID4gMSkge1xuICAgICAgdGhpcy5leGVjSWRSZWZDb3VudC5zZXQoZXhlY0lkLCByYyAtIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV4ZWNJZFJlZkNvdW50LmRlbGV0ZShleGVjSWQpO1xuICAgIHRoaXMuZXhlY0lkU2V0VG9GaXJlLmFkZChleGVjSWQpO1xuICAgIGlmICghdGhpcy53aWxsRmlyZSkge1xuICAgICAgdGhpcy53aWxsRmlyZSA9IHRydWU7XG4gICAgICB2b2lkIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZpcmUoKTogdm9pZCB7XG4gICAgcHJvZmlsZSgnSnNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIuZmlyZScsICgpID0+IHtcbiAgICAgIGx5bnguZ2V0SlNDb250ZXh0KCkuZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgIHR5cGU6IFdvcmtsZXRFdmVudHMucmVsZWFzZUJhY2tncm91bmRXb3JrbGV0Q3R4LFxuICAgICAgICBkYXRhOiBBcnJheS5mcm9tKHRoaXMuZXhlY0lkU2V0VG9GaXJlKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGVjSWRTZXRUb0ZpcmUuY2xlYXIoKTtcbiAgICAgIHRoaXMud2lsbEZpcmUgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1J1bk9uQmFja2dyb3VuZEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1Nka1ZlcnNpb25HdCgyLCAxNSk7XG59XG5cbmV4cG9ydCB7IEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyLCBpc1J1bk9uQmFja2dyb3VuZEVuYWJsZWQgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSAnLi9hcGkvZWxlbWVudC5qcyc7XG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIFdvcmtsZXQsIFdvcmtsZXRSZWZJbXBsIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkgfSBmcm9tICcuL2RlbGF5UnVuT25CYWNrZ3JvdW5kLmpzJztcbmltcG9ydCB7IGRlbGF5RXhlY1VudGlsSnNSZWFkeSwgaW5pdEV2ZW50RGVsYXkgfSBmcm9tICcuL2RlbGF5V29ya2xldEV2ZW50LmpzJztcbmltcG9ydCB7IGh5ZHJhdGVDdHggfSBmcm9tICcuL2h5ZHJhdGUuanMnO1xuaW1wb3J0IHsgSnNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIsIGlzUnVuT25CYWNrZ3JvdW5kRW5hYmxlZCB9IGZyb20gJy4vanNGdW5jdGlvbkxpZmVjeWNsZS5qcyc7XG5pbXBvcnQgeyBwcm9maWxlIH0gZnJvbSAnLi91dGlscy9wcm9maWxlLmpzJztcbmltcG9ydCB7IGdldEZyb21Xb3JrbGV0UmVmTWFwLCBpbml0V29ya2xldFJlZiB9IGZyb20gJy4vd29ya2xldFJlZi5qcyc7XG5cbmZ1bmN0aW9uIGluaXRXb3JrbGV0KCk6IHZvaWQge1xuICBnbG9iYWxUaGlzLmx5bnhXb3JrbGV0SW1wbCA9IHtcbiAgICBfd29ya2xldE1hcDoge30sXG4gICAgX3JlZkltcGw6IGluaXRXb3JrbGV0UmVmKCksXG4gICAgX3J1bk9uQmFja2dyb3VuZERlbGF5SW1wbDogaW5pdFJ1bk9uQmFja2dyb3VuZERlbGF5KCksXG4gICAgX2h5ZHJhdGVDdHg6IGh5ZHJhdGVDdHgsXG4gICAgX2V2ZW50RGVsYXlJbXBsOiBpbml0RXZlbnREZWxheSgpLFxuICB9O1xuXG4gIGlmIChpc1J1bk9uQmFja2dyb3VuZEVuYWJsZWQoKSkge1xuICAgIGdsb2JhbFRoaXMubHlueFdvcmtsZXRJbXBsLl9qc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciA9IG5ldyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlcigpO1xuICB9XG5cbiAgZ2xvYmFsVGhpcy5yZWdpc3RlcldvcmtsZXQgPSByZWdpc3RlcldvcmtsZXQ7XG4gIGdsb2JhbFRoaXMucmVnaXN0ZXJXb3JrbGV0SW50ZXJuYWwgPSByZWdpc3RlcldvcmtsZXQ7XG4gIGdsb2JhbFRoaXMucnVuV29ya2xldCA9IHJ1bldvcmtsZXQ7XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSB3b3JrbGV0IGZ1bmN0aW9uLCBhbGxvd2luZyBpdCB0byBiZSBleGVjdXRlZCBieSBgcnVuV29ya2xldCgpYC5cbiAqIFRoaXMgaXMgY2FsbGVkIGluIGxlcHVzLmpzLlxuICogQHBhcmFtIF90eXBlIHdvcmtsZXQgdHlwZSwgJ21haW4tdGhyZWFkJyBvciAndWknXG4gKiBAcGFyYW0gaWQgd29ya2xldCBoYXNoXG4gKiBAcGFyYW0gd29ya2xldCB3b3JrbGV0IGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyV29ya2xldChfdHlwZTogc3RyaW5nLCBpZDogc3RyaW5nLCB3b3JrbGV0OiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duKTogdm9pZCB7XG4gIGx5bnhXb3JrbGV0SW1wbC5fd29ya2xldE1hcFtpZF0gPSB3b3JrbGV0O1xufVxuXG4vKipcbiAqIEVudHJhbmNlIG9mIGFsbCB3b3JrbGV0IGNhbGxzLlxuICogTmF0aXZlIGV2ZW50IHRvdWNoIGhhbmRsZXIgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0gY3R4IHdvcmtsZXQgb2JqZWN0LlxuICogQHBhcmFtIHBhcmFtcyB3b3JrbGV0IHBhcmFtcy5cbiAqL1xuZnVuY3Rpb24gcnVuV29ya2xldChjdHg6IFdvcmtsZXQsIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdKTogdW5rbm93biB7XG4gIGlmICghdmFsaWRhdGVXb3JrbGV0KGN0eCkpIHtcbiAgICBjb25zb2xlLndhcm4oJ1dvcmtsZXQ6IEludmFsaWQgd29ya2xldCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShjdHgpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCdfbGVwdXNXb3JrbGV0SGFzaCcgaW4gY3R4KSB7XG4gICAgZGVsYXlFeGVjVW50aWxKc1JlYWR5KGN0eC5fbGVwdXNXb3JrbGV0SGFzaCwgcGFyYW1zKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIHJ1bldvcmtsZXRJbXBsKGN0eCwgcGFyYW1zKTtcbn1cblxuZnVuY3Rpb24gcnVuV29ya2xldEltcGwoY3R4OiBXb3JrbGV0LCBwYXJhbXM6IENsb3N1cmVWYWx1ZVR5cGVbXSk6IHVua25vd24ge1xuICBjb25zdCB3b3JrbGV0OiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duID0gcHJvZmlsZShcbiAgICAndHJhbnNmb3JtV29ya2xldEN0eCAnICsgY3R4Ll93a2x0SWQsXG4gICAgKCkgPT4gdHJhbnNmb3JtV29ya2xldChjdHgsIHRydWUpLFxuICApO1xuICBjb25zdCBwYXJhbXNfOiBDbG9zdXJlVmFsdWVUeXBlW10gPSBwcm9maWxlKFxuICAgICd0cmFuc2Zvcm1Xb3JrbGV0UGFyYW1zJyxcbiAgICAoKSA9PiB0cmFuc2Zvcm1Xb3JrbGV0KHBhcmFtcyB8fCBbXSwgZmFsc2UpLFxuICApO1xuICByZXR1cm4gcHJvZmlsZSgncnVuV29ya2xldCcsICgpID0+IHdvcmtsZXQoLi4ucGFyYW1zXykpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdvcmtsZXQoY3R4OiB1bmtub3duKTogY3R4IGlzIFdvcmtsZXQge1xuICByZXR1cm4gdHlwZW9mIGN0eCA9PT0gJ29iamVjdCcgJiYgY3R4ICE9PSBudWxsICYmICgnX3drbHRJZCcgaW4gY3R4IHx8ICdfbGVwdXNXb3JrbGV0SGFzaCcgaW4gY3R4KTtcbn1cblxuY29uc3Qgd29ya2xldENhY2hlID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBDbG9zdXJlVmFsdWVUeXBlIHwgKCguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pPigpO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Xb3JrbGV0KGN0eDogV29ya2xldCwgaXNXb3JrbGV0OiB0cnVlKTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bjtcbmZ1bmN0aW9uIHRyYW5zZm9ybVdvcmtsZXQoXG4gIGN0eDogQ2xvc3VyZVZhbHVlVHlwZVtdLFxuICBpc1dvcmtsZXQ6IGZhbHNlLFxuKTogQ2xvc3VyZVZhbHVlVHlwZVtdO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Xb3JrbGV0KFxuICBjdHg6IENsb3N1cmVWYWx1ZVR5cGUsXG4gIGlzV29ya2xldDogYm9vbGVhbixcbik6IENsb3N1cmVWYWx1ZVR5cGUgfCAoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bikge1xuICAvKiB2OCBpZ25vcmUgbmV4dCAzICovXG4gIGlmICh0eXBlb2YgY3R4ICE9PSAnb2JqZWN0JyB8fCBjdHggPT09IG51bGwpIHtcbiAgICByZXR1cm4gY3R4O1xuICB9XG5cbiAgaWYgKGlzV29ya2xldCkge1xuICAgIGNvbnN0IHJlcyA9IHdvcmtsZXRDYWNoZS5nZXQoY3R4KTtcbiAgICBpZiAocmVzKSB7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdvcmtsZXQgPSB7IG1haW46IGN0eCB9O1xuICB0cmFuc2Zvcm1Xb3JrbGV0SW5uZXIod29ya2xldCwgMCwgY3R4KTtcblxuICBpZiAoaXNXb3JrbGV0KSB7XG4gICAgd29ya2xldENhY2hlLnNldChjdHgsIHdvcmtsZXQubWFpbik7XG4gIH1cbiAgcmV0dXJuIHdvcmtsZXQubWFpbjtcbn1cblxuY29uc3QgdHJhbnNmb3JtV29ya2xldElubmVyID0gKFxuICB2YWx1ZTogQ2xvc3VyZVZhbHVlVHlwZSxcbiAgZGVwdGg6IG51bWJlcixcbiAgY3R4OiB1bmtub3duLFxuKSA9PiB7XG4gIGNvbnN0IGxpbWl0ID0gMTAwMDtcbiAgaWYgKCsrZGVwdGggPj0gbGltaXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcHRoIG9mIHZhbHVlIGV4Y2VlZHMgbGltaXQgb2YgJyArIGxpbWl0ICsgJy4nKTtcbiAgfVxuICAvKiB2OCBpZ25vcmUgbmV4dCAzICovXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG9iaiA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuXG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGNvbnN0IHN1Yk9iajogQ2xvc3VyZVZhbHVlVHlwZSA9IG9ialtrZXldO1xuICAgIGlmICh0eXBlb2Ygc3ViT2JqICE9PSAnb2JqZWN0JyB8fCBzdWJPYmogPT09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICgvKiogaXNFdmVudFRhcmdldCAqLyAnZWxlbWVudFJlZnB0cicgaW4gc3ViT2JqKSB7XG4gICAgICBvYmpba2V5XSA9IG5ldyBFbGVtZW50KHN1Yk9ialsnZWxlbWVudFJlZnB0ciddIGFzIEVsZW1lbnROb2RlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAoc3ViT2JqIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtV29ya2xldElubmVyKHN1Yk9iaiwgZGVwdGgsIGN0eCk7XG5cbiAgICBjb25zdCBpc1dvcmtsZXRSZWYgPSAnX3d2aWQnIGluIChzdWJPYmogYXMgb2JqZWN0KTtcbiAgICBpZiAoaXNXb3JrbGV0UmVmKSB7XG4gICAgICBvYmpba2V5XSA9IGdldEZyb21Xb3JrbGV0UmVmTWFwKFxuICAgICAgICBzdWJPYmogYXMgdW5rbm93biBhcyBXb3JrbGV0UmVmSW1wbDx1bmtub3duPixcbiAgICAgICk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgaXNXb3JrbGV0ID0gJ193a2x0SWQnIGluIHN1Yk9iajtcbiAgICBpZiAoaXNXb3JrbGV0KSB7XG4gICAgICAvLyBgc3ViT2JqYCBpcyB3b3JrbGV0IGN0eC4gU2hhbGxvdyBjb3B5IGl0IHRvIHByZXZlbnQgdGhlIHRyYW5zZm9ybWVkIHdvcmtsZXQgZnJvbSByZWZlcmVuY2luZyBjdHguXG4gICAgICAvLyBUaGlzIHdvdWxkIHJlc3VsdCBpbiB0aGUgdmFsdWUgb2YgYHdvcmtsZXRDYWNoZWAgcmVmZXJlbmNpbmcgaXRzIGtleS5cbiAgICAgIG9ialtrZXldID0gbHlueFdvcmtsZXRJbXBsLl93b3JrbGV0TWFwWyhzdWJPYmogYXMgV29ya2xldCkuX3drbHRJZF0hXG4gICAgICAgIC5iaW5kKHsgLi4uc3ViT2JqIH0pO1xuICAgICAgb2JqW2tleV0uY3R4ID0gc3ViT2JqO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGlzSnNGbiA9ICdfanNGbklkJyBpbiBzdWJPYmo7XG4gICAgaWYgKGlzSnNGbikge1xuICAgICAgc3ViT2JqWydfZXhlY0lkJ10gPSAoY3R4IGFzIFdvcmtsZXQpLl9leGVjSWQ7XG4gICAgICBseW54V29ya2xldEltcGwuX2pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyPy5hZGRSZWYoXG4gICAgICAgIChjdHggYXMgV29ya2xldCkuX2V4ZWNJZCEsXG4gICAgICAgIHN1Yk9iaixcbiAgICAgICk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCB7IGluaXRXb3JrbGV0IH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgaW5pdEFwaUVudiB9IGZyb20gJy4vYXBpL2x5bnhBcGkuanMnO1xuaW1wb3J0IHsgaW5pdEV2ZW50TGlzdGVuZXJzIH0gZnJvbSAnLi9saXN0ZW5lcnMuanMnO1xuaW1wb3J0IHsgaW5pdFdvcmtsZXQgfSBmcm9tICcuL3dvcmtsZXRSdW50aW1lLmpzJztcblxuaWYgKGdsb2JhbFRoaXMubHlueFdvcmtsZXRJbXBsID09PSB1bmRlZmluZWQpIHtcbiAgaW5pdFdvcmtsZXQoKTtcbiAgaW5pdEFwaUVudigpO1xuICBpbml0RXZlbnRMaXN0ZW5lcnMoKTtcbn1cbiJdLCJuYW1lcyI6WyJFbGVtZW50IiwibmFtZSIsInZhbHVlIiwiX19TZXRBdHRyaWJ1dGUiLCJfX0FkZElubGluZVN0eWxlIiwic3R5bGVzIiwia2V5IiwiYXR0cmlidXRlTmFtZSIsIl9fR2V0QXR0cmlidXRlQnlOYW1lIiwiX19HZXRBdHRyaWJ1dGVOYW1lcyIsInNlbGVjdG9yIiwicmVmIiwiX19RdWVyeVNlbGVjdG9yIiwiX19RdWVyeVNlbGVjdG9yQWxsIiwiZWxlbWVudCIsIm1ldGhvZE5hbWUiLCJwYXJhbXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIl9fSW52b2tlVUlNZXRob2QiLCJyZXMiLCJFcnJvciIsIkpTT04iLCJfX0ZsdXNoRWxlbWVudFRyZWUiLCJPYmplY3QiLCJQYWdlRWxlbWVudCIsIl9QYWdlRWxlbWVudCIsIl9fR2V0UGFnZUVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiY3NzU2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaXNTZGtWZXJzaW9uR3QiLCJtYWpvciIsIm1pbm9yIiwiX1N5c3RlbUluZm9fbHlueFNka1ZlcnNpb24iLCJseW54U2RrVmVyc2lvbiIsInZlcnNpb24iLCJOdW1iZXIiLCJpbml0QXBpRW52IiwibHlueCIsImdsb2JhbFRoaXMiLCJfbHlueF9jbGVhckludGVydmFsIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FsbGJhY2siLCJwcm9maWxlIiwic2xpY2VOYW1lIiwiZiIsImNvbnNvbGUiLCJpbXBsIiwiaW5pdFdvcmtsZXRSZWYiLCJ1cGRhdGVXb3JrbGV0UmVmIiwidXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMiLCJjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCIsImNyZWF0ZVdvcmtsZXRSZWYiLCJpZCIsImdldEZyb21Xb3JrbGV0UmVmTWFwIiwicmVmSW1wbCIsInVuZGVmaW5lZCIsInJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAiLCJoYW5kbGUiLCJwYXRjaCIsImluaXRFdmVudExpc3RlbmVycyIsImpzQ29udGV4dCIsIldvcmtsZXRFdmVudHMiLCJldmVudCIsImRhdGEiLCJyZXR1cm5WYWx1ZSIsInJ1bldvcmtsZXQiLCJpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkiLCJkZWxheVJ1bk9uQmFja2dyb3VuZCIsInJ1bkRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25zIiwiZm5PYmoiLCJ0YXNrIiwiX2ZuT2JqIiwiZGVsYXlJbmRpY2VzIiwiZGV0YWlscyIsImluaXRFdmVudERlbGF5IiwiTWFwIiwicnVuRGVsYXllZFdvcmtsZXQiLCJjbGVhckRlbGF5ZWRXb3JrbGV0cyIsImRlbGF5RXhlY1VudGlsSnNSZWFkeSIsImhhc2giLCJtYXAiLCJwYXJhbVZlYyIsIndvcmtsZXQiLCJwYXJhbXNWZWMiLCJsZWZ0UGFyYW1zVmVjIiwiX2ZpcnN0UGFyYW1fY3VycmVudFRhcmdldCIsImZpcnN0UGFyYW0iLCJzZXRUaW1lb3V0IiwiaHlkcmF0ZUN0eCIsImN0eCIsImZpcnN0U2NyZWVuQ3R4IiwiaHlkcmF0ZUN0eEltcGwiLCJleGVjSWQiLCJjdHhPYmoiLCJmaXJzdFNjcmVlbkN0eE9iaiIsImh5ZHJhdGVNYWluVGhyZWFkUmVmIiwiaHlkcmF0ZURlbGF5UnVuT25CYWNrZ3JvdW5kVGFza3MiLCJmaXJzdFNjcmVlblZhbHVlIiwicmVmSWQiLCJseW54V29ya2xldEltcGwiLCJmbk9ianMiLCJmaXJzdFNjcmVlbkZuT2JqcyIsImZuTmFtZSIsImZpcnN0U2NyZWVuRm5PYmoiLCJpbmRleCIsIkpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyIiwib2JqVG9SZWYiLCJfdGhpc19leGVjSWRSZWZDb3VudF9nZXQiLCJyYyIsIkFycmF5IiwiU2V0IiwiRmluYWxpemF0aW9uUmVnaXN0cnkiLCJpc1J1bk9uQmFja2dyb3VuZEVuYWJsZWQiLCJpbml0V29ya2xldCIsInJlZ2lzdGVyV29ya2xldCIsIl90eXBlIiwidmFsaWRhdGVXb3JrbGV0IiwicnVuV29ya2xldEltcGwiLCJ0cmFuc2Zvcm1Xb3JrbGV0IiwicGFyYW1zXyIsIndvcmtsZXRDYWNoZSIsIldlYWtNYXAiLCJpc1dvcmtsZXQiLCJ0cmFuc2Zvcm1Xb3JrbGV0SW5uZXIiLCJkZXB0aCIsImxpbWl0Iiwib2JqIiwic3ViT2JqIiwiaXNXb3JrbGV0UmVmIiwiaXNKc0ZuIiwiX2x5bnhXb3JrbGV0SW1wbF9fanNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUdPLE1BQU1BO1FBaUJKLGFBQWFDLElBQVksRUFBRUMsS0FBYyxFQUFRO1lBQ3REQyxlQUFlLElBQUksQ0FBQyxPQUFPLEVBQUVGLE1BQU1DO1lBQ25DLElBQUksQ0FBQyxnQkFBZ0I7UUFDdkI7UUFFTyxpQkFBaUJELElBQVksRUFBRUMsS0FBYSxFQUFRO1lBQ3pERSxpQkFBaUIsSUFBSSxDQUFDLE9BQU8sRUFBRUgsTUFBTUM7WUFDckMsSUFBSSxDQUFDLGdCQUFnQjtRQUN2QjtRQUVPLG1CQUFtQkcsTUFBOEIsRUFBUTtZQUM5RCxJQUFLLE1BQU1DLE9BQU9ELE9BQ2hCRCxpQkFBaUIsSUFBSSxDQUFDLE9BQU8sRUFBRUUsS0FBS0QsTUFBTSxDQUFDQyxJQUFJO1lBRWpELElB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
489
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2FwaS9hbmltYXRpb24vYW5pbWF0aW9uLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9hcGkvYW5pbWF0aW9uL2VmZmVjdC50cyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvYXBpL2VsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2FwaS9sZXB1c1F1ZXJ5U2VsZWN0b3IudHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL3V0aWxzL3ZlcnNpb24udHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2FwaS9seW54QXBpLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy91dGlscy9wcm9maWxlLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy93b3JrbGV0UmVmLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9saXN0ZW5lcnMudHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2RlbGF5UnVuT25CYWNrZ3JvdW5kLnRzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9kZWxheVdvcmtsZXRFdmVudC50cyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvZW9tSW1wbC50cyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvaHlkcmF0ZS50cyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvanNGdW5jdGlvbkxpZmVjeWNsZS50cyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvd29ya2xldFJ1bnRpbWUudHMiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI1IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgdHlwZSB7IEtleWZyYW1lRWZmZWN0IH0gZnJvbSAnLi9lZmZlY3QuanMnO1xuXG5leHBvcnQgZW51bSBBbmltYXRpb25PcGVyYXRpb24ge1xuICBTVEFSVCA9IDAsIC8vIFN0YXJ0IGEgbmV3IGFuaW1hdGlvblxuICBQTEFZID0gMSwgLy8gUGxheS9yZXN1bWUgYSBwYXVzZWQgYW5pbWF0aW9uXG4gIFBBVVNFID0gMiwgLy8gUGF1c2UgYW4gZXhpc3RpbmcgYW5pbWF0aW9uXG4gIENBTkNFTCA9IDMsIC8vIENhbmNlbCBhbiBhbmltYXRpb25cbn1cblxuZXhwb3J0IGNsYXNzIEFuaW1hdGlvbiB7XG4gIHN0YXRpYyBjb3VudCA9IDA7XG4gIHB1YmxpYyByZWFkb25seSBlZmZlY3Q6IEtleWZyYW1lRWZmZWN0O1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihlZmZlY3Q6IEtleWZyYW1lRWZmZWN0KSB7XG4gICAgdGhpcy5lZmZlY3QgPSBlZmZlY3Q7XG4gICAgdGhpcy5pZCA9ICdfX2x5bngtaW5uZXItanMtYW5pbWF0aW9uLScgKyBBbmltYXRpb24uY291bnQrKztcbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbQW5pbWF0aW9uT3BlcmF0aW9uLkNBTkNFTCwgdGhpcy5pZF0pO1xuICB9XG5cbiAgcHVibGljIHBhdXNlKCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbQW5pbWF0aW9uT3BlcmF0aW9uLlBBVVNFLCB0aGlzLmlkXSk7XG4gIH1cblxuICBwdWJsaWMgcGxheSgpOiB2b2lkIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFjY2Vzc2luZyBwcml2YXRlIG1lbWJlciAnZWxlbWVudCdcbiAgICByZXR1cm4gX19FbGVtZW50QW5pbWF0ZSh0aGlzLmVmZmVjdC50YXJnZXQuZWxlbWVudCwgW0FuaW1hdGlvbk9wZXJhdGlvbi5QTEFZLCB0aGlzLmlkXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0KCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbXG4gICAgICBBbmltYXRpb25PcGVyYXRpb24uU1RBUlQsXG4gICAgICB0aGlzLmlkLFxuICAgICAgdGhpcy5lZmZlY3Qua2V5ZnJhbWVzLFxuICAgICAgdGhpcy5lZmZlY3Qub3B0aW9ucyxcbiAgICBdKTtcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjUgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB0eXBlIHsgRWxlbWVudCB9IGZyb20gJy4uL2VsZW1lbnQuanMnO1xuXG5leHBvcnQgY2xhc3MgS2V5ZnJhbWVFZmZlY3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0OiBFbGVtZW50O1xuICBwdWJsaWMgcmVhZG9ubHkga2V5ZnJhbWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+W107XG4gIHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRhcmdldDogRWxlbWVudCxcbiAgICBrZXlmcmFtZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz5bXSxcbiAgICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+LFxuICApIHtcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLmtleWZyYW1lcyA9IGtleWZyYW1lcztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgQW5pbWF0aW9uIH0gZnJvbSAnLi9hbmltYXRpb24vYW5pbWF0aW9uLmpzJztcbmltcG9ydCB7IEtleWZyYW1lRWZmZWN0IH0gZnJvbSAnLi9hbmltYXRpb24vZWZmZWN0LmpzJztcblxubGV0IHdpbGxGbHVzaCA9IGZhbHNlO1xubGV0IHNob3VsZEZsdXNoID0gdHJ1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNob3VsZEZsdXNoKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gIHNob3VsZEZsdXNoID0gdmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50IHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBzZXQgaW4gY29uc3RydWN0b3JcbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50OiBFbGVtZW50Tm9kZTtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50Tm9kZSkge1xuICAgIC8vIEluIEx5bnggdmVyc2lvbnMgcHJpb3IgdG8gYW5kIGluY2x1ZGluZyAyLjE1LFxuICAgIC8vIGEgY3Jhc2ggb2NjdXJzIHdoZW4gcHJpbnRpbmcgb3IgdHJhbnNmZXJyaW5nIHJlZkNvdW50ZWQgYWNyb3NzIHRocmVhZHMuXG4gICAgLy8gQnlwYXNzIHRoaXMgcHJvYmxlbSBieSBoaWRpbmcgdGhlIGVsZW1lbnQgb2JqZWN0LlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZWxlbWVudCcsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgX19TZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gICAgdGhpcy5mbHVzaEVsZW1lbnRUcmVlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0U3R5bGVQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBfX0FkZElubGluZVN0eWxlKHRoaXMuZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuICAgIHRoaXMuZmx1c2hFbGVtZW50VHJlZSgpO1xuICB9XG5cbiAgcHVibGljIHNldFN0eWxlUHJvcGVydGllcyhzdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzdHlsZXMpIHtcbiAgICAgIF9fQWRkSW5saW5lU3R5bGUodGhpcy5lbGVtZW50LCBrZXksIHN0eWxlc1trZXldISk7XG4gICAgfVxuICAgIHRoaXMuZmx1c2hFbGVtZW50VHJlZSgpO1xuICB9XG5cbiAgcHVibGljIGdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICByZXR1cm4gX19HZXRBdHRyaWJ1dGVCeU5hbWUodGhpcy5lbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdHRyaWJ1dGVOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIF9fR2V0QXR0cmlidXRlTmFtZXModGhpcy5lbGVtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBxdWVyeVNlbGVjdG9yKHNlbGVjdG9yOiBzdHJpbmcpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgcmVmID0gX19RdWVyeVNlbGVjdG9yKHRoaXMuZWxlbWVudCwgc2VsZWN0b3IsIHt9KTtcbiAgICByZXR1cm4gcmVmID8gbmV3IEVsZW1lbnQocmVmKSA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgcXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcjogc3RyaW5nKTogRWxlbWVudFtdIHtcbiAgICByZXR1cm4gX19RdWVyeVNlbGVjdG9yQWxsKHRoaXMuZWxlbWVudCwgc2VsZWN0b3IsIHt9KS5tYXAoKGVsZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgRWxlbWVudChlbGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhbmltYXRlKFxuICAgIGtleWZyYW1lczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPltdLFxuICAgIG9wdGlvbnM/OiBudW1iZXIgfCBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+LFxuICApOiBBbmltYXRpb24ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRPcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInID8geyBkdXJhdGlvbjogb3B0aW9ucyB9IDogb3B0aW9ucyA/PyB7fTtcbiAgICByZXR1cm4gbmV3IEFuaW1hdGlvbihuZXcgS2V5ZnJhbWVFZmZlY3QodGhpcywga2V5ZnJhbWVzLCBub3JtYWxpemVkT3B0aW9ucykpO1xuICB9XG5cbiAgcHVibGljIGludm9rZShcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBfX0ludm9rZVVJTWV0aG9kKFxuICAgICAgICB0aGlzLmVsZW1lbnQsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhcmFtcyA/PyB7fSxcbiAgICAgICAgKHJlczogeyBjb2RlOiBudW1iZXI7IGRhdGE6IHVua25vd24gfSkgPT4ge1xuICAgICAgICAgIGlmIChyZXMuY29kZSA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1VJIG1ldGhvZCBpbnZva2U6ICcgKyBKU09OLnN0cmluZ2lmeShyZXMpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuZmx1c2hFbGVtZW50VHJlZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaEVsZW1lbnRUcmVlKCkge1xuICAgIGlmICh3aWxsRmx1c2ggfHwgIXNob3VsZEZsdXNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdpbGxGbHVzaCA9IHRydWU7XG4gICAgdm9pZCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIHdpbGxGbHVzaCA9IGZhbHNlO1xuICAgICAgX19GbHVzaEVsZW1lbnRUcmVlKCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSAnLi9lbGVtZW50LmpzJztcblxuY2xhc3MgUGFnZUVsZW1lbnQge1xuICBwcml2YXRlIHN0YXRpYyBwYWdlRWxlbWVudDogRWxlbWVudE5vZGUgfCB1bmRlZmluZWQ7XG5cbiAgc3RhdGljIGdldCgpIHtcbiAgICBQYWdlRWxlbWVudC5wYWdlRWxlbWVudCA/Pz0gX19HZXRQYWdlRWxlbWVudCgpO1xuICAgIHJldHVybiBQYWdlRWxlbWVudC5wYWdlRWxlbWVudDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTZWxlY3Rvcihjc3NTZWxlY3Rvcjogc3RyaW5nKTogRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBlbGVtZW50ID0gX19RdWVyeVNlbGVjdG9yKFBhZ2VFbGVtZW50LmdldCgpLCBjc3NTZWxlY3Rvciwge30pO1xuICByZXR1cm4gZWxlbWVudCA/IG5ldyBFbGVtZW50KGVsZW1lbnQpIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3JBbGwoY3NzU2VsZWN0b3I6IHN0cmluZyk6IEVsZW1lbnRbXSB7XG4gIHJldHVybiBfX1F1ZXJ5U2VsZWN0b3JBbGwoUGFnZUVsZW1lbnQuZ2V0KCksIGNzc1NlbGVjdG9yLCB7fSkubWFwKFxuICAgIChlbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEVsZW1lbnQoZWxlbWVudCk7XG4gICAgfSxcbiAgKTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5leHBvcnQgZnVuY3Rpb24gaXNTZGtWZXJzaW9uR3QobWFqb3I6IG51bWJlciwgbWlub3I6IG51bWJlcik6IGJvb2xlYW4ge1xuICBjb25zdCBseW54U2RrVmVyc2lvbjogc3RyaW5nID0gU3lzdGVtSW5mby5seW54U2RrVmVyc2lvbiA/PyAnMS4wJztcbiAgY29uc3QgdmVyc2lvbiA9IGx5bnhTZGtWZXJzaW9uLnNwbGl0KCcuJyk7XG4gIHJldHVybiAoXG4gICAgTnVtYmVyKHZlcnNpb25bMF0pID4gbWFqb3JcbiAgICB8fCAoTnVtYmVyKHZlcnNpb25bMF0pID09IG1ham9yICYmIE51bWJlcih2ZXJzaW9uWzFdKSA+IG1pbm9yKVxuICApO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IHF1ZXJ5U2VsZWN0b3IsIHF1ZXJ5U2VsZWN0b3JBbGwgfSBmcm9tICcuL2xlcHVzUXVlcnlTZWxlY3Rvci5qcyc7XG5pbXBvcnQgeyBpc1Nka1ZlcnNpb25HdCB9IGZyb20gJy4uL3V0aWxzL3ZlcnNpb24uanMnO1xuXG5mdW5jdGlvbiBpbml0QXBpRW52KCk6IHZvaWQge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgbHlueC5xdWVyeVNlbGVjdG9yID0gcXVlcnlTZWxlY3RvcjtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGx5bngucXVlcnlTZWxlY3RvckFsbCA9IHF1ZXJ5U2VsZWN0b3JBbGw7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLnNldFRpbWVvdXQgPSBseW54LnNldFRpbWVvdXQgYXMgKGNiOiAoKSA9PiB2b2lkLCB0aW1lb3V0OiBudW1iZXIpID0+IG51bWJlcjtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuc2V0SW50ZXJ2YWwgPSBseW54LnNldEludGVydmFsIGFzIChjYjogKCkgPT4gdm9pZCwgdGltZW91dDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLmNsZWFyVGltZW91dCA9IGx5bnguY2xlYXJUaW1lb3V0IGFzICh0aW1lb3V0OiBudW1iZXIpID0+IHZvaWQ7XG4gIC8vIEluIGx5bnggMi4xNCBgY2xlYXJJbnRlcnZhbGAgaXMgbWlzdGFrZW5seSBzcGVsbGVkIGFzIGBjbGVhclRpbWVJbnRlcnZhbGAuIFRoaXMgaXMgZml4ZWQgaW4gbHlueCAyLjE1LlxuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5jbGVhckludGVydmFsID0gKGx5bnguY2xlYXJJbnRlcnZhbCA/PyBseW54LmNsZWFyVGltZUludGVydmFsKSBhcyAodGltZW91dDogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBseW54LnJlcXVlc3RBbmltYXRpb25GcmFtZSBhcyAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IG51bWJlcjtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgICBseW54LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gKFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHZvaWQsXG4gICAgKSA9PiB7XG4gICAgICBpZiAoIWlzU2RrVmVyc2lvbkd0KDIsIDE1KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ3JlcXVlc3RBbmltYXRpb25GcmFtZSBpbiBtYWluIHRocmVhZCBzY3JpcHQgcmVxdWlyZXMgTHlueCBzZGsgdmVyc2lvbiAyLjE2JyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spO1xuICAgIH07XG4gIH1cblxuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGx5bnguY2FuY2VsQW5pbWF0aW9uRnJhbWUgYXMgKHJlcXVlc3RJZDogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgeyBpbml0QXBpRW52IH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuZXhwb3J0IGZ1bmN0aW9uIHByb2ZpbGU8UmV0LCBGbiBleHRlbmRzICguLi5hcmdzOiB1bmtub3duW10pID0+IFJldD4oXG4gIHNsaWNlTmFtZTogc3RyaW5nLFxuICBmOiBGbixcbik6IFJldCB7XG4gIC8qIHY4IGlnbm9yZSBuZXh0IDkgKi9cbiAgLy8gVE9ETzogY2hhbmdlIGl0IHRvIF9fUFJPRklMRV9fXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgY29uc29sZS5wcm9maWxlKHNsaWNlTmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNvbnNvbGUucHJvZmlsZUVuZCgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZigpO1xuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBXb3JrbGV0UmVmLCBXb3JrbGV0UmVmSWQsIFdvcmtsZXRSZWZJbXBsIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBwcm9maWxlIH0gZnJvbSAnLi91dGlscy9wcm9maWxlLmpzJztcblxuaW50ZXJmYWNlIFJlZkltcGwge1xuICBfd29ya2xldFJlZk1hcDogUmVjb3JkPFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZjx1bmtub3duPj47XG4gIF9maXJzdFNjcmVlbldvcmtsZXRSZWZNYXA6IFJlY29yZDxXb3JrbGV0UmVmSWQsIFdvcmtsZXRSZWY8dW5rbm93bj4+O1xuICB1cGRhdGVXb3JrbGV0UmVmKFxuICAgIHJlZkltcGw6IFdvcmtsZXRSZWZJbXBsPEVsZW1lbnQgfCBudWxsPixcbiAgICBlbGVtZW50OiBFbGVtZW50Tm9kZSB8IG51bGwsXG4gICk6IHZvaWQ7XG4gIHVwZGF0ZVdvcmtsZXRSZWZJbml0VmFsdWVDaGFuZ2VzKHBhdGNoOiBbbnVtYmVyLCB1bmtub3duXVtdKTogdm9pZDtcbiAgY2xlYXJGaXJzdFNjcmVlbldvcmtsZXRSZWZNYXAoKTogdm9pZDtcbn1cblxubGV0IGltcGw6IFJlZkltcGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGluaXRXb3JrbGV0UmVmKCk6IFJlZkltcGwge1xuICByZXR1cm4gKGltcGwgPSB7XG4gICAgX3dvcmtsZXRSZWZNYXA6IHt9LFxuICAgIC8qKlxuICAgICAqIE1hcCBvZiB3b3JrbGV0IHJlZnMgdGhhdCBhcmUgY3JlYXRlZCBkdXJpbmcgZmlyc3Qgc2NyZWVuIHJlbmRlcmluZy5cbiAgICAgKiBUaGVzZSByZWZzIGFyZSBjcmVhdGVkIHdpdGggbmVnYXRpdmUgSURzIGFuZCBuZWVkIHRvIGJlIGh5ZHJhdGVkXG4gICAgICogd2hlbiB0aGUgYXBwIHN0YXJ0cy4gVGhlIG1hcCBpcyBjbGVhcmVkIGFmdGVyIGh5ZHJhdGlvbiBpcyBjb21wbGV0ZVxuICAgICAqIHRvIGZyZWUgdXAgbWVtb3J5LlxuICAgICAqL1xuICAgIF9maXJzdFNjcmVlbldvcmtsZXRSZWZNYXA6IHt9LFxuICAgIHVwZGF0ZVdvcmtsZXRSZWYsXG4gICAgdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMsXG4gICAgY2xlYXJGaXJzdFNjcmVlbldvcmtsZXRSZWZNYXAsXG4gIH0pO1xufVxuXG5jb25zdCBjcmVhdGVXb3JrbGV0UmVmID0gPFQ+KFxuICBpZDogV29ya2xldFJlZklkLFxuICB2YWx1ZTogVCxcbik6IFdvcmtsZXRSZWY8VD4gPT4ge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnQ6IHZhbHVlLFxuICAgIF93dmlkOiBpZCxcbiAgfTtcbn07XG5cbmNvbnN0IGdldEZyb21Xb3JrbGV0UmVmTWFwID0gPFQ+KFxuICByZWZJbXBsOiBXb3JrbGV0UmVmSW1wbDxUPixcbik6IFdvcmtsZXRSZWY8VD4gPT4ge1xuICBjb25zdCBpZCA9IHJlZkltcGwuX3d2aWQ7XG4gIGxldCB2YWx1ZTtcbiAgaWYgKGlkIDwgMCkge1xuICAgIC8vIEF0IHRoZSBmaXJzdCBzY3JlZW4gcmVuZGVyaW5nLCB0aGUgd29ya2xldCByZWYgaXMgY3JlYXRlZCB3aXRoIGEgbmVnYXRpdmUgSUQuXG4gICAgLy8gTWlnaHQgYmUgY2FsbGVkIGluIHR3byBzY2VuYXJpb3M6XG4gICAgLy8gMS4gSW4gTVRTIGV2ZW50c1xuICAgIC8vIDIuIEluIGBtYWluLXRocmVhZDpyZWZgXG4gICAgdmFsdWUgPSBpbXBsIS5fZmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwW2lkXSBhcyBXb3JrbGV0UmVmPFQ+O1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHZhbHVlID0gaW1wbCEuX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcFtpZF0gPSBjcmVhdGVXb3JrbGV0UmVmKGlkLCByZWZJbXBsLl9pbml0VmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGltcGwhLl93b3JrbGV0UmVmTWFwW2lkXSBhcyBXb3JrbGV0UmVmPFQ+O1xuICB9XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAoX19ERVZfXyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrbGV0OiByZWYgaXMgbm90IGluaXRpYWxpemVkOiAnICsgaWQpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmZ1bmN0aW9uIHJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAoaWQ6IFdvcmtsZXRSZWZJZCk6IHZvaWQge1xuICBkZWxldGUgaW1wbCEuX3dvcmtsZXRSZWZNYXBbaWRdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlIG9mIHRoZSBnaXZlbiBlbGVtZW50IG5vZGUsIHRoZW4gc2V0IHRoZSB3b3JrbGV0IHZhbHVlIHRvIGl0LlxuICogVGhpcyBpcyBjYWxsZWQgaW4gYHNuYXBzaG90Q29udGV4dFVwZGF0ZVdvcmtsZXRSZWZgLlxuICogQHBhcmFtIGhhbmRsZSBoYW5kbGUgb2YgdGhlIHdvcmtsZXQgdmFsdWUuXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudCBub2RlLlxuICovXG5mdW5jdGlvbiB1cGRhdGVXb3JrbGV0UmVmKFxuICBoYW5kbGU6IFdvcmtsZXRSZWZJbXBsPEVsZW1lbnQgfCBudWxsPixcbiAgZWxlbWVudDogRWxlbWVudE5vZGUgfCBudWxsLFxuKTogdm9pZCB7XG4gIGdldEZyb21Xb3JrbGV0UmVmTWFwKGhhbmRsZSkuY3VycmVudCA9IGVsZW1lbnRcbiAgICA/IG5ldyBFbGVtZW50KGVsZW1lbnQpXG4gICAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcyhcbiAgcGF0Y2g6IFtXb3JrbGV0UmVmSWQsIHVua25vd25dW10sXG4pOiB2b2lkIHtcbiAgcHJvZmlsZSgndXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMnLCAoKSA9PiB7XG4gICAgcGF0Y2guZm9yRWFjaCgoW2lkLCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICghaW1wbCEuX3dvcmtsZXRSZWZNYXBbaWRdKSB7XG4gICAgICAgIGltcGwhLl93b3JrbGV0UmVmTWFwW2lkXSA9IGNyZWF0ZVdvcmtsZXRSZWYoaWQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyRmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwKCk6IHZvaWQge1xuICBpbXBsIS5fZmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwID0ge307XG59XG5cbmV4cG9ydCB7XG4gIHR5cGUgUmVmSW1wbCxcbiAgY3JlYXRlV29ya2xldFJlZixcbiAgaW5pdFdvcmtsZXRSZWYsXG4gIGdldEZyb21Xb3JrbGV0UmVmTWFwLFxuICByZW1vdmVWYWx1ZUZyb21Xb3JrbGV0UmVmTWFwLFxuICB1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcyxcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgV29ya2xldEV2ZW50cyB9IGZyb20gJy4vYmluZGluZ3MvZXZlbnRzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVsZWFzZVdvcmtsZXRSZWZEYXRhLCBSdW5Xb3JrbGV0Q3R4RGF0YSwgUnVuV29ya2xldEN0eFJldERhdGEgfSBmcm9tICcuL2JpbmRpbmdzL2V2ZW50cy5qcyc7XG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRXZlbnQgfSBmcm9tICcuL3R5cGVzL3J1bnRpbWVQcm94eS5qcyc7XG5pbXBvcnQgeyByZW1vdmVWYWx1ZUZyb21Xb3JrbGV0UmVmTWFwIH0gZnJvbSAnLi93b3JrbGV0UmVmLmpzJztcblxuZnVuY3Rpb24gaW5pdEV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICBjb25zdCBqc0NvbnRleHQgPSBseW54LmdldEpTQ29udGV4dCgpO1xuICBqc0NvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBXb3JrbGV0RXZlbnRzLnJ1bldvcmtsZXRDdHgsXG4gICAgKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSBhcyBzdHJpbmcpIGFzIFJ1bldvcmtsZXRDdHhEYXRhO1xuICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBydW5Xb3JrbGV0KGRhdGEud29ya2xldCwgZGF0YS5wYXJhbXMgYXMgQ2xvc3VyZVZhbHVlVHlwZVtdKTtcbiAgICAgIGpzQ29udGV4dC5kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgdHlwZTogV29ya2xldEV2ZW50cy5GdW5jdGlvbkNhbGxSZXQsXG4gICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICByZXNvbHZlSWQ6IGRhdGEucmVzb2x2ZUlkLFxuICAgICAgICAgIHJldHVyblZhbHVlLFxuICAgICAgICB9IGFzIFJ1bldvcmtsZXRDdHhSZXREYXRhKSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICk7XG4gIGpzQ29udGV4dC5hZGRFdmVudExpc3RlbmVyKFxuICAgIFdvcmtsZXRFdmVudHMucmVsZWFzZVdvcmtsZXRSZWYsXG4gICAgKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgcmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcCgoZXZlbnQuZGF0YSBhcyBSZWxlYXNlV29ya2xldFJlZkRhdGEpLmlkKTtcbiAgICB9LFxuICApO1xufVxuXG5leHBvcnQgeyBpbml0RXZlbnRMaXN0ZW5lcnMgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgdHlwZSB7IEpzRm5IYW5kbGUgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcblxuaW50ZXJmYWNlIERldGFpbHMge1xuICB0YXNrOiAoZm5JZDogbnVtYmVyLCBleGVjSWQ6IG51bWJlcikgPT4gdm9pZDtcblxuICAvLyBUaGlzIGNvbWVzIGZyb20gdGhlIGJhY2tncm91bmQgdGhyZWFkLCBpbnNlcnRlZCBoZXJlIGR1cmluZyBjdHggaHlkcmF0aW9uLlxuICBqc0ZuSGFuZGxlPzogSnNGbkhhbmRsZTtcbn1cblxuaW50ZXJmYWNlIFJ1bk9uQmFja2dyb3VuZERlbGF5SW1wbCB7XG4gIC8vIEVsZW1lbnRzIHNob3VsZCBrZWVwIHRoZSBvcmRlciBiZWluZyBjYWxsZWQgYnkgdGhlIHVzZXIuXG4gIGRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheTogRGV0YWlsc1tdO1xuICBkZWxheVJ1bk9uQmFja2dyb3VuZChmbk9iajogSnNGbkhhbmRsZSwgZm46IChmbklkOiBudW1iZXIsIGV4ZWNJZDogbnVtYmVyKSA9PiB2b2lkKTogdm9pZDtcbiAgcnVuRGVsYXllZEJhY2tncm91bmRGdW5jdGlvbnMoKTogdm9pZDtcbn1cblxubGV0IGltcGw6IFJ1bk9uQmFja2dyb3VuZERlbGF5SW1wbCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaW5pdFJ1bk9uQmFja2dyb3VuZERlbGF5KCk6IFJ1bk9uQmFja2dyb3VuZERlbGF5SW1wbCB7XG4gIHJldHVybiAoaW1wbCA9IHtcbiAgICBkZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXk6IFtdLFxuICAgIGRlbGF5UnVuT25CYWNrZ3JvdW5kLFxuICAgIHJ1bkRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25zLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVsYXlSdW5PbkJhY2tncm91bmQoZm5PYmo6IEpzRm5IYW5kbGUsIHRhc2s6IChmbklkOiBudW1iZXIsIGV4ZWNJZDogbnVtYmVyKSA9PiB2b2lkKSB7XG4gIGltcGwhLmRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheS5wdXNoKHsgdGFzayB9KTtcbiAgY29uc3QgZGVsYXlJbmRpY2VzID0gZm5PYmouX2RlbGF5SW5kaWNlcyA/Pz0gW107XG4gIGRlbGF5SW5kaWNlcy5wdXNoKGltcGwhLmRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheS5sZW5ndGggLSAxKTtcbn1cblxuZnVuY3Rpb24gcnVuRGVsYXllZEJhY2tncm91bmRGdW5jdGlvbnMoKTogdm9pZCB7XG4gIGZvciAoY29uc3QgZGV0YWlscyBvZiBpbXBsIS5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXkpIHtcbiAgICBpZiAoZGV0YWlscy5qc0ZuSGFuZGxlKSB7XG4gICAgICBkZXRhaWxzLnRhc2soZGV0YWlscy5qc0ZuSGFuZGxlLl9qc0ZuSWQhLCBkZXRhaWxzLmpzRm5IYW5kbGUuX2V4ZWNJZCEpO1xuICAgIH1cbiAgfVxuICBpbXBsIS5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXkubGVuZ3RoID0gMDtcbn1cblxuZXhwb3J0IHsgdHlwZSBSdW5PbkJhY2tncm91bmREZWxheUltcGwsIGluaXRSdW5PbkJhY2tncm91bmREZWxheSB9O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSwgV29ya2xldCB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgcHJvZmlsZSB9IGZyb20gJy4vdXRpbHMvcHJvZmlsZS5qcyc7XG5cbmludGVyZmFjZSBFdmVudERlbGF5SW1wbCB7XG4gIF9kZWxheWVkV29ya2xldFBhcmFtc01hcDogTWFwPHN0cmluZywgQ2xvc3VyZVZhbHVlVHlwZVtdW10+O1xuICBydW5EZWxheWVkV29ya2xldCh3b3JrbGV0OiBXb3JrbGV0LCBlbGVtZW50OiBFbGVtZW50Tm9kZSk6IHZvaWQ7XG4gIGNsZWFyRGVsYXllZFdvcmtsZXRzKCk6IHZvaWQ7XG59XG5cbmxldCBpbXBsOiBFdmVudERlbGF5SW1wbCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaW5pdEV2ZW50RGVsYXkoKTogRXZlbnREZWxheUltcGwge1xuICByZXR1cm4gKGltcGwgPSB7XG4gICAgX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwOiBuZXcgTWFwKCksXG4gICAgcnVuRGVsYXllZFdvcmtsZXQsXG4gICAgY2xlYXJEZWxheWVkV29ya2xldHMsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWxheUV4ZWNVbnRpbEpzUmVhZHkoXG4gIGhhc2g6IHN0cmluZyxcbiAgcGFyYW1zOiBDbG9zdXJlVmFsdWVUeXBlW10sXG4pOiB2b2lkIHtcbiAgcHJvZmlsZSgnZGVsYXlFeGVjVW50aWxKc1JlYWR5OiAnICsgaGFzaCwgKCkgPT4ge1xuICAgIGNvbnN0IG1hcCA9IGltcGwhLl9kZWxheWVkV29ya2xldFBhcmFtc01hcDtcbiAgICBjb25zdCBwYXJhbVZlYyA9IG1hcC5nZXQoaGFzaCk7XG4gICAgaWYgKHBhcmFtVmVjKSB7XG4gICAgICBwYXJhbVZlYy5wdXNoKHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcC5zZXQoaGFzaCwgW3BhcmFtc10pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJ1bkRlbGF5ZWRXb3JrbGV0KHdvcmtsZXQ6IFdvcmtsZXQsIGVsZW1lbnQ6IEVsZW1lbnROb2RlKTogdm9pZCB7XG4gIHByb2ZpbGUoJ2NvbW1pdERlbGF5ZWRXb3JrbGV0JywgKCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtc1ZlYyA9IGltcGwhLl9kZWxheWVkV29ya2xldFBhcmFtc01hcC5nZXQoXG4gICAgICB3b3JrbGV0Ll93a2x0SWQsXG4gICAgKTtcbiAgICBpZiAocGFyYW1zVmVjID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGVmdFBhcmFtc1ZlYzogQ2xvc3VyZVZhbHVlVHlwZVtdW10gPSBbXTtcbiAgICBwYXJhbXNWZWMuZm9yRWFjaCgocGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdFBhcmFtID0gcGFyYW1zWzBdIGFzIHsgY3VycmVudFRhcmdldD86IHsgZWxlbWVudFJlZnB0cj86IEVsZW1lbnROb2RlIH0gfSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChmaXJzdFBhcmFtPy5jdXJyZW50VGFyZ2V0Py5lbGVtZW50UmVmcHRyID09PSBlbGVtZW50KSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHByb2ZpbGUoJ3J1bkRlbGF5ZWRXb3JrbGV0JywgKCkgPT4ge1xuICAgICAgICAgICAgcnVuV29ya2xldCh3b3JrbGV0LCBwYXJhbXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnRQYXJhbXNWZWMucHVzaChwYXJhbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGltcGwhLl9kZWxheWVkV29ya2xldFBhcmFtc01hcC5zZXQoXG4gICAgICB3b3JrbGV0Ll93a2x0SWQsXG4gICAgICBsZWZ0UGFyYW1zVmVjLFxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGVhckRlbGF5ZWRXb3JrbGV0cygpOiB2b2lkIHtcbiAgaW1wbCEuX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwLmNsZWFyKCk7XG59XG5cbmV4cG9ydCB7IHR5cGUgRXZlbnREZWxheUltcGwsIGluaXRFdmVudERlbGF5LCBkZWxheUV4ZWNVbnRpbEpzUmVhZHksIHJ1bkRlbGF5ZWRXb3JrbGV0LCBjbGVhckRlbGF5ZWRXb3JrbGV0cyB9O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjUgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IHNldFNob3VsZEZsdXNoIH0gZnJvbSAnLi9hcGkvZWxlbWVudC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW9tSW1wbCB7XG4gIHNldFNob3VsZEZsdXNoKHZhbHVlOiBib29sZWFuKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRFb21JbXBsKCk6IEVvbUltcGwge1xuICByZXR1cm4ge1xuICAgIHNldFNob3VsZEZsdXNoLFxuICB9O1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cblxuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlLCBKc0ZuSGFuZGxlLCBXb3JrbGV0LCBXb3JrbGV0UmVmSWQsIFdvcmtsZXRSZWZJbXBsIH0gZnJvbSAnLi9iaW5kaW5ncy9pbmRleC5qcyc7XG5pbXBvcnQgeyBwcm9maWxlIH0gZnJvbSAnLi91dGlscy9wcm9maWxlLmpzJztcblxuLyoqXG4gKiBIeWRyYXRlcyBhIFdvcmtsZXQgY29udGV4dCB3aXRoIGRhdGEgZnJvbSBhIGZpcnN0LXNjcmVlbiBXb3JrbGV0IGNvbnRleHQuXG4gKiBUaGlzIHByb2Nlc3MgaXMgdHlwaWNhbGx5IHVzZWQgdG8gcnVuIGFsbCBkZWxheWVkIGBydW5PbkJhY2tncm91bmRgIGZ1bmN0aW9uc1xuICogYW5kIGluaXRpYWxpemUgYFdvcmtsZXRSZWZgIHZhbHVlcyBtb2RpZmllZCBiZWZvcmUgaHlkcmF0aW9uLlxuICpcbiAqIEBwYXJhbSBjdHggVGhlIHRhcmdldCBXb3JrbGV0IGNvbnRleHQgdG8gYmUgaHlkcmF0ZWQuXG4gKiBAcGFyYW0gZmlyc3RTY3JlZW5DdHggVGhlIFdvcmtsZXQgY29udGV4dCBmcm9tIHRoZSBmaXJzdCBzY3JlZW4gcmVuZGVyaW5nLFxuICogICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gaHlkcmF0ZSB3aXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaHlkcmF0ZUN0eChjdHg6IFdvcmtsZXQsIGZpcnN0U2NyZWVuQ3R4OiBXb3JrbGV0KTogdm9pZCB7XG4gIHByb2ZpbGUoJ2h5ZHJhdGVDdHgnLCAoKSA9PiB7XG4gICAgaHlkcmF0ZUN0eEltcGwoY3R4LCBmaXJzdFNjcmVlbkN0eCwgY3R4Ll9leGVjSWQhKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGh5ZHJhdGVDdHhJbXBsKGN0eDogQ2xvc3VyZVZhbHVlVHlwZSwgZmlyc3RTY3JlZW5DdHg6IENsb3N1cmVWYWx1ZVR5cGUsIGV4ZWNJZDogbnVtYmVyKTogdm9pZCB7XG4gIGlmICghY3R4IHx8IHR5cGVvZiBjdHggIT09ICdvYmplY3QnIHx8ICFmaXJzdFNjcmVlbkN0eCB8fCB0eXBlb2YgZmlyc3RTY3JlZW5DdHggIT09ICdvYmplY3QnKSByZXR1cm47XG5cbiAgY29uc3QgY3R4T2JqID0gY3R4IGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuICBjb25zdCBmaXJzdFNjcmVlbkN0eE9iaiA9IGZpcnN0U2NyZWVuQ3R4IGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuXG4gIGlmIChjdHhPYmpbJ193a2x0SWQnXSAmJiBjdHhPYmpbJ193a2x0SWQnXSAhPT0gZmlyc3RTY3JlZW5DdHhPYmpbJ193a2x0SWQnXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZm9yLWluLWFycmF5XG4gIGZvciAoY29uc3Qga2V5IGluIGN0eCkge1xuICAgIGlmIChrZXkgPT09ICdfd3ZpZCcpIHtcbiAgICAgIGh5ZHJhdGVNYWluVGhyZWFkUmVmKGN0eE9ialtrZXldIGFzIFdvcmtsZXRSZWZJZCwgZmlyc3RTY3JlZW5DdHhPYmogYXMgdW5rbm93biBhcyBXb3JrbGV0UmVmSW1wbDx1bmtub3duPik7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdfanNGbicpIHtcbiAgICAgIGh5ZHJhdGVEZWxheVJ1bk9uQmFja2dyb3VuZFRhc2tzKFxuICAgICAgICBjdHhPYmpba2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCBKc0ZuSGFuZGxlPixcbiAgICAgICAgZmlyc3RTY3JlZW5DdHhPYmpba2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCBKc0ZuSGFuZGxlPixcbiAgICAgICAgZXhlY0lkLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlyc3RTY3JlZW5WYWx1ZSA9IHR5cGVvZiBmaXJzdFNjcmVlbkN0eE9ialtrZXldID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gKGZpcnN0U2NyZWVuQ3R4T2JqW2tleV0gYXMgeyBjdHg6IENsb3N1cmVWYWx1ZVR5cGUgfSkuY3R4XG4gICAgICAgIDogZmlyc3RTY3JlZW5DdHhPYmpba2V5XTtcbiAgICAgIGh5ZHJhdGVDdHhJbXBsKGN0eE9ialtrZXldLCBmaXJzdFNjcmVlblZhbHVlLCBleGVjSWQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEh5ZHJhdGVzIGEgV29ya2xldFJlZiBvbiB0aGUgbWFpbiB0aHJlYWQuXG4gKiBUaGlzIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBXb3JrbGV0UmVmJ3MgYmFja2dyb3VuZCBpbml0aWFsIHZhbHVlIGJhc2VkIG9uIGNoYW5nZXNcbiAqIHRoYXQgb2NjdXJyZWQgaW4gdGhlIGZpcnN0LXNjcmVlbiBXb3JrbGV0IGNvbnRleHQgYmVmb3JlIGh5ZHJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcmVmSWQgVGhlIElEIG9mIHRoZSBXb3JrbGV0UmVmIHRvIGh5ZHJhdGUuXG4gKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIFdvcmtsZXRSZWYuXG4gKi9cbmZ1bmN0aW9uIGh5ZHJhdGVNYWluVGhyZWFkUmVmKHJlZklkOiBXb3JrbGV0UmVmSWQsIHZhbHVlOiBXb3JrbGV0UmVmSW1wbDx1bmtub3duPiB8IHsgY3VycmVudDogdW5rbm93biB9KSB7XG4gIGlmICgnX2luaXRWYWx1ZScgaW4gdmFsdWUpIHtcbiAgICAvLyBUaGUgcmVmIGhhcyBub3QgYmVlbiBhY2Nlc3NlZCB5ZXQuXG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlZiA9IGx5bnhXb3JrbGV0SW1wbCEuX3JlZkltcGwuX3dvcmtsZXRSZWZNYXBbcmVmSWRdITtcbiAgcmVmLmN1cnJlbnQgPSB2YWx1ZS5jdXJyZW50O1xufVxuXG4vKipcbiAqIEh5ZHJhdGVzIGRlbGF5ZWQgYHJ1bk9uQmFja2dyb3VuZGAgdGFza3MuXG4gKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBhbnkgYHJ1bk9uQmFja2dyb3VuZGAgY2FsbHMgdGhhdCB3ZXJlIGRlbGF5ZWRcbiAqIGR1cmluZyB0aGUgZmlyc3Qtc2NyZWVuIHJlbmRlcmluZyBhcmUgY29ycmVjdGx5IGFzc29jaWF0ZWQgd2l0aCB0aGVpclxuICogcmVzcGVjdGl2ZSBKYXZhU2NyaXB0IGZ1bmN0aW9uIGhhbmRsZXMgaW4gdGhlIGh5ZHJhdGVkIFdvcmtsZXQgY29udGV4dC5cbiAqL1xuZnVuY3Rpb24gaHlkcmF0ZURlbGF5UnVuT25CYWNrZ3JvdW5kVGFza3MoXG4gIGZuT2JqczogUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sIC8vIGV4YW1wbGU6IHtcIl9qc0ZuMVwiOntcIl9qc0ZuSWRcIjoxfX1cbiAgZmlyc3RTY3JlZW5Gbk9ianM6IFJlY29yZDxzdHJpbmcsIEpzRm5IYW5kbGU+LCAvLyBleGFtcGxlOiB7XCJfanNGbjFcIjp7XCJfaXNGaXJzdFNjcmVlblwiOnRydWUsXCJfZGVsYXlJbmRpY2VzXCI6WzBdfX1cbiAgZXhlY0lkOiBudW1iZXIsXG4pIHtcbiAgZm9yIChjb25zdCBmbk5hbWUgaW4gZm5PYmpzKSB7XG4gICAgY29uc3QgZm5PYmogPSBmbk9ianNbZm5OYW1lXSE7XG4gICAgY29uc3QgZmlyc3RTY3JlZW5Gbk9iajogSnNGbkhhbmRsZSB8IHVuZGVmaW5lZCA9IGZpcnN0U2NyZWVuRm5PYmpzW2ZuTmFtZV07XG4gICAgaWYgKCFmaXJzdFNjcmVlbkZuT2JqPy5fZGVsYXlJbmRpY2VzKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpbmRleCBvZiBmaXJzdFNjcmVlbkZuT2JqLl9kZWxheUluZGljZXMpIHtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBseW54V29ya2xldEltcGwhLl9ydW5PbkJhY2tncm91bmREZWxheUltcGwuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5W2luZGV4XSE7XG4gICAgICBmbk9iai5fZXhlY0lkID0gZXhlY0lkO1xuICAgICAgZGV0YWlscy5qc0ZuSGFuZGxlID0gZm5PYmo7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgV29ya2xldEV2ZW50cyB9IGZyb20gJy4vYmluZGluZ3MvZXZlbnRzLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuaW1wb3J0IHsgaXNTZGtWZXJzaW9uR3QgfSBmcm9tICcuL3V0aWxzL3ZlcnNpb24uanMnO1xuXG4vKipcbiAqIGBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlcmAgbW9uaXRvcnMgcmVmZXJlbmNlcyB0byBKUyBmdW5jdGlvbiBoYW5kbGVzIHRvIGJlIGNhbGxlZCBieSBgcnVuT25CYWNrZ3JvdW5kKClgLlxuICogSW4gSlMgY29udGV4dCwgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBieSBgcnVuT25CYWNrZ3JvdW5kKClgIGlzIHJlZmVyZW5jZWQgYnkgYEpzRm5IYW5kbGVgcyBhbmQgZmluYWxseSBieSBgZXhlY0lkYC5cbiAqIFdoZW4gYWxsIGBKc0ZuSGFuZGxlYHMgaW4gbGVwdXMgYXJlIHJlbGVhc2VkLCBhbiBldmVudCB3aWxsIGJlIHNlbnQgdG8gSlMgY29udGV4dCB0byBkZS1yZWYgdGhlIGBleGVjSWRgLFxuICogcmVzdWx0aW5nIGEgZGUtcmVmIHRvIHRoZSBqcyBmdW5jdGlvbiBpbiBKUyBjb250ZXh0LlxuICovXG5jbGFzcyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciB7XG4gIHByaXZhdGUgZXhlY0lkUmVmQ291bnQgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBwcml2YXRlIGV4ZWNJZFNldFRvRmlyZSA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBwcml2YXRlIHdpbGxGaXJlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVnaXN0cnk/OiBGaW5hbGl6YXRpb25SZWdpc3RyeTxudW1iZXI+ID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVnaXN0cnkgPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnk8bnVtYmVyPih0aGlzLnJlbW92ZVJlZi5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIGFkZFJlZihleGVjSWQ6IG51bWJlciwgb2JqVG9SZWY6IG9iamVjdCk6IHZvaWQge1xuICAgIHRoaXMuZXhlY0lkUmVmQ291bnQuc2V0KFxuICAgICAgZXhlY0lkLFxuICAgICAgKHRoaXMuZXhlY0lkUmVmQ291bnQuZ2V0KGV4ZWNJZCkgPz8gMCkgKyAxLFxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RyeSEucmVnaXN0ZXIob2JqVG9SZWYsIGV4ZWNJZCk7XG4gIH1cblxuICByZW1vdmVSZWYoZXhlY0lkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCByYyA9IHRoaXMuZXhlY0lkUmVmQ291bnQuZ2V0KGV4ZWNJZCkhO1xuICAgIGlmIChyYyA+IDEpIHtcbiAgICAgIHRoaXMuZXhlY0lkUmVmQ291bnQuc2V0KGV4ZWNJZCwgcmMgLSAxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5leGVjSWRSZWZDb3VudC5kZWxldGUoZXhlY0lkKTtcbiAgICB0aGlzLmV4ZWNJZFNldFRvRmlyZS5hZGQoZXhlY0lkKTtcbiAgICBpZiAoIXRoaXMud2lsbEZpcmUpIHtcbiAgICAgIHRoaXMud2lsbEZpcmUgPSB0cnVlO1xuICAgICAgdm9pZCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmaXJlKCk6IHZvaWQge1xuICAgIHByb2ZpbGUoJ0pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyLmZpcmUnLCAoKSA9PiB7XG4gICAgICBseW54LmdldEpTQ29udGV4dCgpLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgICB0eXBlOiBXb3JrbGV0RXZlbnRzLnJlbGVhc2VCYWNrZ3JvdW5kV29ya2xldEN0eCxcbiAgICAgICAgZGF0YTogQXJyYXkuZnJvbSh0aGlzLmV4ZWNJZFNldFRvRmlyZSksXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhlY0lkU2V0VG9GaXJlLmNsZWFyKCk7XG4gICAgICB0aGlzLndpbGxGaXJlID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNSdW5PbkJhY2tncm91bmRFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNTZGtWZXJzaW9uR3QoMiwgMTUpO1xufVxuXG5leHBvcnQgeyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciwgaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlLCBXb3JrbGV0LCBXb3JrbGV0UmVmSW1wbCB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgaW5pdFJ1bk9uQmFja2dyb3VuZERlbGF5IH0gZnJvbSAnLi9kZWxheVJ1bk9uQmFja2dyb3VuZC5qcyc7XG5pbXBvcnQgeyBkZWxheUV4ZWNVbnRpbEpzUmVhZHksIGluaXRFdmVudERlbGF5IH0gZnJvbSAnLi9kZWxheVdvcmtsZXRFdmVudC5qcyc7XG5pbXBvcnQgeyBpbml0RW9tSW1wbCB9IGZyb20gJy4vZW9tSW1wbC5qcyc7XG5pbXBvcnQgeyBoeWRyYXRlQ3R4IH0gZnJvbSAnLi9oeWRyYXRlLmpzJztcbmltcG9ydCB7IEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyLCBpc1J1bk9uQmFja2dyb3VuZEVuYWJsZWQgfSBmcm9tICcuL2pzRnVuY3Rpb25MaWZlY3ljbGUuanMnO1xuaW1wb3J0IHsgcHJvZmlsZSB9IGZyb20gJy4vdXRpbHMvcHJvZmlsZS5qcyc7XG5pbXBvcnQgeyBnZXRGcm9tV29ya2xldFJlZk1hcCwgaW5pdFdvcmtsZXRSZWYgfSBmcm9tICcuL3dvcmtsZXRSZWYuanMnO1xuXG5mdW5jdGlvbiBpbml0V29ya2xldCgpOiB2b2lkIHtcbiAgZ2xvYmFsVGhpcy5seW54V29ya2xldEltcGwgPSB7XG4gICAgX3dvcmtsZXRNYXA6IHt9LFxuICAgIF9yZWZJbXBsOiBpbml0V29ya2xldFJlZigpLFxuICAgIF9ydW5PbkJhY2tncm91bmREZWxheUltcGw6IGluaXRSdW5PbkJhY2tncm91bmREZWxheSgpLFxuICAgIF9oeWRyYXRlQ3R4OiBoeWRyYXRlQ3R4LFxuICAgIF9ldmVudERlbGF5SW1wbDogaW5pdEV2ZW50RGVsYXkoKSxcbiAgICBfZW9tSW1wbDogaW5pdEVvbUltcGwoKSxcbiAgfTtcblxuICBpZiAoaXNSdW5PbkJhY2tncm91bmRFbmFibGVkKCkpIHtcbiAgICBnbG9iYWxUaGlzLmx5bnhXb3JrbGV0SW1wbC5fanNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIgPSBuZXcgSnNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIoKTtcbiAgfVxuXG4gIGdsb2JhbFRoaXMucmVnaXN0ZXJXb3JrbGV0ID0gcmVnaXN0ZXJXb3JrbGV0O1xuICBnbG9iYWxUaGlzLnJlZ2lzdGVyV29ya2xldEludGVybmFsID0gcmVnaXN0ZXJXb3JrbGV0O1xuICBnbG9iYWxUaGlzLnJ1bldvcmtsZXQgPSBydW5Xb3JrbGV0O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgd29ya2xldCBmdW5jdGlvbiwgYWxsb3dpbmcgaXQgdG8gYmUgZXhlY3V0ZWQgYnkgYHJ1bldvcmtsZXQoKWAuXG4gKiBUaGlzIGlzIGNhbGxlZCBpbiBsZXB1cy5qcy5cbiAqIEBwYXJhbSBfdHlwZSB3b3JrbGV0IHR5cGUsICdtYWluLXRocmVhZCcgb3IgJ3VpJ1xuICogQHBhcmFtIGlkIHdvcmtsZXQgaGFzaFxuICogQHBhcmFtIHdvcmtsZXQgd29ya2xldCBmdW5jdGlvblxuICovXG5mdW5jdGlvbiByZWdpc3RlcldvcmtsZXQoX3R5cGU6IHN0cmluZywgaWQ6IHN0cmluZywgd29ya2xldDogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bik6IHZvaWQge1xuICBseW54V29ya2xldEltcGwuX3dvcmtsZXRNYXBbaWRdID0gd29ya2xldDtcbn1cblxuLyoqXG4gKiBFbnRyYW5jZSBvZiBhbGwgd29ya2xldCBjYWxscy5cbiAqIE5hdGl2ZSBldmVudCB0b3VjaCBoYW5kbGVyIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIGN0eCB3b3JrbGV0IG9iamVjdC5cbiAqIEBwYXJhbSBwYXJhbXMgd29ya2xldCBwYXJhbXMuXG4gKi9cbmZ1bmN0aW9uIHJ1bldvcmtsZXQoY3R4OiBXb3JrbGV0LCBwYXJhbXM6IENsb3N1cmVWYWx1ZVR5cGVbXSk6IHVua25vd24ge1xuICBpZiAoIXZhbGlkYXRlV29ya2xldChjdHgpKSB7XG4gICAgY29uc29sZS53YXJuKCdXb3JrbGV0OiBJbnZhbGlkIHdvcmtsZXQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkoY3R4KSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICgnX2xlcHVzV29ya2xldEhhc2gnIGluIGN0eCkge1xuICAgIGRlbGF5RXhlY1VudGlsSnNSZWFkeShjdHguX2xlcHVzV29ya2xldEhhc2gsIHBhcmFtcyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJldHVybiBydW5Xb3JrbGV0SW1wbChjdHgsIHBhcmFtcyk7XG59XG5cbmZ1bmN0aW9uIHJ1bldvcmtsZXRJbXBsKGN0eDogV29ya2xldCwgcGFyYW1zOiBDbG9zdXJlVmFsdWVUeXBlW10pOiB1bmtub3duIHtcbiAgY29uc3Qgd29ya2xldDogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biA9IHByb2ZpbGUoXG4gICAgJ3RyYW5zZm9ybVdvcmtsZXRDdHggJyArIGN0eC5fd2tsdElkLFxuICAgICgpID0+IHRyYW5zZm9ybVdvcmtsZXQoY3R4LCB0cnVlKSxcbiAgKTtcbiAgY29uc3QgcGFyYW1zXzogQ2xvc3VyZVZhbHVlVHlwZVtdID0gcHJvZmlsZShcbiAgICAndHJhbnNmb3JtV29ya2xldFBhcmFtcycsXG4gICAgKCkgPT4gdHJhbnNmb3JtV29ya2xldChwYXJhbXMgfHwgW10sIGZhbHNlKSxcbiAgKTtcbiAgcmV0dXJuIHByb2ZpbGUoJ3J1bldvcmtsZXQnLCAoKSA9PiB3b3JrbGV0KC4uLnBhcmFtc18pKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXb3JrbGV0KGN0eDogdW5rbm93bik6IGN0eCBpcyBXb3JrbGV0IHtcbiAgcmV0dXJuIHR5cGVvZiBjdHggPT09ICdvYmplY3QnICYmIGN0eCAhPT0gbnVsbCAmJiAoJ193a2x0SWQnIGluIGN0eCB8fCAnX2xlcHVzV29ya2xldEhhc2gnIGluIGN0eCk7XG59XG5cbmNvbnN0IHdvcmtsZXRDYWNoZSA9IG5ldyBXZWFrTWFwPG9iamVjdCwgQ2xvc3VyZVZhbHVlVHlwZSB8ICgoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duKT4oKTtcblxuZnVuY3Rpb24gdHJhbnNmb3JtV29ya2xldChjdHg6IFdvcmtsZXQsIGlzV29ya2xldDogdHJ1ZSk6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd247XG5mdW5jdGlvbiB0cmFuc2Zvcm1Xb3JrbGV0KFxuICBjdHg6IENsb3N1cmVWYWx1ZVR5cGVbXSxcbiAgaXNXb3JrbGV0OiBmYWxzZSxcbik6IENsb3N1cmVWYWx1ZVR5cGVbXTtcblxuZnVuY3Rpb24gdHJhbnNmb3JtV29ya2xldChcbiAgY3R4OiBDbG9zdXJlVmFsdWVUeXBlLFxuICBpc1dvcmtsZXQ6IGJvb2xlYW4sXG4pOiBDbG9zdXJlVmFsdWVUeXBlIHwgKCguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pIHtcbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAodHlwZW9mIGN0eCAhPT0gJ29iamVjdCcgfHwgY3R4ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGN0eDtcbiAgfVxuXG4gIGlmIChpc1dvcmtsZXQpIHtcbiAgICBjb25zdCByZXMgPSB3b3JrbGV0Q2FjaGUuZ2V0KGN0eCk7XG4gICAgaWYgKHJlcykge1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JrbGV0ID0geyBtYWluOiBjdHggfTtcbiAgdHJhbnNmb3JtV29ya2xldElubmVyKHdvcmtsZXQsIDAsIGN0eCk7XG5cbiAgaWYgKGlzV29ya2xldCkge1xuICAgIHdvcmtsZXRDYWNoZS5zZXQoY3R4LCB3b3JrbGV0Lm1haW4pO1xuICB9XG4gIHJldHVybiB3b3JrbGV0Lm1haW47XG59XG5cbmNvbnN0IHRyYW5zZm9ybVdvcmtsZXRJbm5lciA9IChcbiAgdmFsdWU6IENsb3N1cmVWYWx1ZVR5cGUsXG4gIGRlcHRoOiBudW1iZXIsXG4gIGN0eDogdW5rbm93bixcbikgPT4ge1xuICBjb25zdCBsaW1pdCA9IDEwMDA7XG4gIGlmICgrK2RlcHRoID49IGxpbWl0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEZXB0aCBvZiB2YWx1ZSBleGNlZWRzIGxpbWl0IG9mICcgKyBsaW1pdCArICcuJyk7XG4gIH1cbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBvYmogPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBDbG9zdXJlVmFsdWVUeXBlPjtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBjb25zdCBzdWJPYmo6IENsb3N1cmVWYWx1ZVR5cGUgPSBvYmpba2V5XTtcbiAgICBpZiAodHlwZW9mIHN1Yk9iaiAhPT0gJ29iamVjdCcgfHwgc3ViT2JqID09PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoLyoqIGlzRXZlbnRUYXJnZXQgKi8gJ2VsZW1lbnRSZWZwdHInIGluIHN1Yk9iaikge1xuICAgICAgb2JqW2tleV0gPSBuZXcgRWxlbWVudChzdWJPYmpbJ2VsZW1lbnRSZWZwdHInXSBhcyBFbGVtZW50Tm9kZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2UgaWYgKHN1Yk9iaiBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHRyYW5zZm9ybVdvcmtsZXRJbm5lcihzdWJPYmosIGRlcHRoLCBjdHgpO1xuXG4gICAgY29uc3QgaXNXb3JrbGV0UmVmID0gJ193dmlkJyBpbiAoc3ViT2JqIGFzIG9iamVjdCk7XG4gICAgaWYgKGlzV29ya2xldFJlZikge1xuICAgICAgb2JqW2tleV0gPSBnZXRGcm9tV29ya2xldFJlZk1hcChcbiAgICAgICAgc3ViT2JqIGFzIHVua25vd24gYXMgV29ya2xldFJlZkltcGw8dW5rbm93bj4sXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGlzV29ya2xldCA9ICdfd2tsdElkJyBpbiBzdWJPYmo7XG4gICAgaWYgKGlzV29ya2xldCkge1xuICAgICAgLy8gYHN1Yk9iamAgaXMgd29ya2xldCBjdHguIFNoYWxsb3cgY29weSBpdCB0byBwcmV2ZW50IHRoZSB0cmFuc2Zvcm1lZCB3b3JrbGV0IGZyb20gcmVmZXJlbmNpbmcgY3R4LlxuICAgICAgLy8gVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIHZhbHVlIG9mIGB3b3JrbGV0Q2FjaGVgIHJlZmVyZW5jaW5nIGl0cyBrZXkuXG4gICAgICBvYmpba2V5XSA9IGx5bnhXb3JrbGV0SW1wbC5fd29ya2xldE1hcFsoc3ViT2JqIGFzIFdvcmtsZXQpLl93a2x0SWRdIVxuICAgICAgICAuYmluZCh7IC4uLnN1Yk9iaiB9KTtcbiAgICAgIG9ialtrZXldLmN0eCA9IHN1Yk9iajtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBpc0pzRm4gPSAnX2pzRm5JZCcgaW4gc3ViT2JqO1xuICAgIGlmIChpc0pzRm4pIHtcbiAgICAgIHN1Yk9ialsnX2V4ZWNJZCddID0gKGN0eCBhcyBXb3JrbGV0KS5fZXhlY0lkO1xuICAgICAgbHlueFdvcmtsZXRJbXBsLl9qc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlcj8uYWRkUmVmKFxuICAgICAgICAoY3R4IGFzIFdvcmtsZXQpLl9leGVjSWQhLFxuICAgICAgICBzdWJPYmosXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgeyBpbml0V29ya2xldCB9O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IGluaXRBcGlFbnYgfSBmcm9tICcuL2FwaS9seW54QXBpLmpzJztcbmltcG9ydCB7IGluaXRFdmVudExpc3RlbmVycyB9IGZyb20gJy4vbGlzdGVuZXJzLmpzJztcbmltcG9ydCB7IGluaXRXb3JrbGV0IH0gZnJvbSAnLi93b3JrbGV0UnVudGltZS5qcyc7XG5cbmlmIChnbG9iYWxUaGlzLmx5bnhXb3JrbGV0SW1wbCA9PT0gdW5kZWZpbmVkKSB7XG4gIGluaXRXb3JrbGV0KCk7XG4gIGluaXRBcGlFbnYoKTtcbiAgaW5pdEV2ZW50TGlzdGVuZXJzKCk7XG59XG4iXSwibmFtZXMiOlsiQW5pbWF0aW9uIiwiX19FbGVtZW50QW5pbWF0ZSIsImVmZmVjdCIsIktleWZyYW1lRWZmZWN0IiwidGFyZ2V0Iiwia2V5ZnJhbWVzIiwib3B0aW9ucyIsIndpbGxGbHVzaCIsInNob3VsZEZsdXNoIiwic2V0U2hvdWxkRmx1c2giLCJ2YWx1ZSIsIkVsZW1lbnQiLCJuYW1lIiwiX19TZXRBdHRyaWJ1dGUiLCJfX0FkZElubGluZVN0eWxlIiwic3R5bGVzIiwia2V5IiwiYXR0cmlidXRlTmFtZSIsIl9fR2V0QXR0cmlidXRlQnlOYW1lIiwiX19HZXRBdHRyaWJ1dGVOYW1lcyIsInNlbGVjdG9yIiwicmVmIiwiX19RdWVyeVNlbGVjdG9yIiwiX19RdWVyeVNlbGVjdG9yQWxsIiwiZWxlbWVudCIsIm5vcm1hbGl6ZWRPcHRpb25zIiwibWV0aG9kTmFtZSIsInBhcmFtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiX19JbnZva2VVSU1ldGhvZCIsInJlcyIsIkVycm9yIiwiSlNPTiIsIl9fRmx1c2hFbGVtZW50VHJlZSIsIk9iamVjdCIsIlBhZ2VFbGVtZW50IiwiX1BhZ2VFbGVtZW50IiwiX19HZXRQYWdlRWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJjc3NTZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpc1Nka1ZlcnNpb25HdCIsIm1ham9yIiwibWlub3IiLCJfU3lzdGVtSW5mb19seW54U2RrVmVyc2lvbiIsImx5bnhTZGtWZXJzaW9uIiwidmVyc2lvbiIsIk51bWJlciIsImluaXRBcGlFbnYiLCJseW54IiwiZ2xvYmFsVGhpcyIsIl9seW54X2NsZWFySW50ZXJ2YWwiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYWxsYmFjayIsInByb2ZpbGUiLCJzbGljZU5hbWUiLCJmIiwiY29uc29sZSIsImltcGwiLCJpbml0V29ya2xldFJlZiIsInVwZGF0ZVdvcmtsZXRSZWYiLCJ1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcyIsImNsZWFyRmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwIiwiY3JlYXRlV29ya2xldFJlZiIsImlkIiwiZ2V0RnJvbVdvcmtsZXRSZWZNYXAiLCJyZWZJbXBsIiwidW5kZWZpbmVkIiwicmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcCIsImhhbmRsZSIsInBhdGNoIiwiaW5pdEV2ZW50TGlzdGVuZXJzIiwianNDb250ZXh0IiwiV29ya2xldEV2ZW50cyIsImV2ZW50IiwiZGF0YSIsInJldHVyblZhbHVlIiwicnVuV29ya2xldCIsImluaXRSdW5PbkJhY2tncm91bmREZWxheSIsImRlbGF5UnVuT25CYWNrZ3JvdW5kIiwicnVuRGVsYXllZEJhY2tncm91bmRGdW5jdGlvbnMiLCJmbk9iaiIsInRhc2siLCJfZm5PYmoiLCJkZWxheUluZGljZXMiLCJkZXRhaWxzIiwiaW5pdEV2ZW50RGVsYXkiLCJNYXAiLCJydW5EZWxheWVkV29ya2xldCIsImNsZWFyRGVsYXllZFdvcmtsZXRzIiwiZGVsYXlFeGVjVW50aWxKc1JlYWR5IiwiaGFzaCIsIm1hcCIsInBhcmFtVmVjIiwid29ya2xldCIsInBhcmFtc1ZlYyIsImxlZnRQYXJhbXNWZWMiLCJfZmlyc3RQYXJhbV9jdXJyZW50VGFyZ2V0IiwiZmlyc3RQYXJhbSIsInNldFRpbWVvdXQiLCJpbml0RW9tSW1wbCIsImh5ZHJhdGVDdHgiLCJjdHgiLCJmaXJzdFNjcmVlbkN0eCIsImh5ZHJhdGVDdHhJbXBsIiwiZXhlY0lkIiwiY3R4T2JqIiwiZmlyc3RTY3JlZW5DdHhPYmoiLCJoeWRyYXRlTWFpblRocmVhZFJlZiIsImh5ZHJhdGVEZWxheVJ1bk9uQmFja2dyb3VuZFRhc2tzIiwiZmlyc3RTY3JlZW5WYWx1ZSIsInJlZklkIiwibHlueFdvcmtsZXRJbXBsIiwiZm5PYmpzIiwiZmlyc3RTY3JlZW5Gbk9ianMiLCJmbk5hbWUiLCJmaXJzdFNjcmVlbkZuT2JqIiwiaW5kZXgiLCJKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciIsIm9ialRvUmVmIiwiX3RoaXNfZXhlY0lkUmVmQ291bnRfZ2V0IiwicmMiLCJBcnJheSIsIlNldCIsIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwiaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIiwiaW5pdFdvcmtsZXQiLCJyZWdpc3RlcldvcmtsZXQiLCJfdHlwZSIsInZhbGlkYXRlV29ya2xldCIsInJ1bldvcmtsZXRJbXBsIiwidHJhbnNmb3JtV29ya2xldCIsInBhcmFtc18iLCJ3b3JrbGV0Q2FjaGUiLCJXZWFrTWFwIiwiaXNXb3JrbGV0IiwidHJhbnNmb3JtV29ya2xldElubmVyIiwiZGVwdGgiLCJsaW1pdCIsIm9iaiIsInN1Yk9iaiIsImlzV29ya2xldFJlZiIsImlzSnNGbiIsIl9seW54V29ya2xldEltcGxfX2pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFZTyxNQUFNQTtRQVdKLFNBQWU7WUFFcEIsT0FBT0MsaUJBQWlCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTs7Z0JBQTRCLElBQUksQ0FBQyxFQUFFO2FBQUM7UUFDMUY7UUFFTyxRQUFjO1lBRW5CLE9BQU9BLGlCQUFpQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7O2dCQUEyQixJQUFJLENBQUMsRUFBRTthQUFDO1FBQ3pGO1FBRU8sT0FBYTtZQUVsQixPQUFPQSxpQkFBaUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFOztnQkFBMEIsSUFBSSxDQUFDLEVBQUU7YUFBQztRQUN4RjtRQUVRLFFBQWM7WUFFcEIsT0FBT0EsaUJBQWlCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTs7Z0JBRWxELElBQUksQ0FBQyxFQUFFO2dCQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztnQkFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO2FBQ3BCO1FBQ0g7UUE3QkEsWUFBWUMsTUFBc0IsQ0FBRTtZQUhwQyx1QkFBZ0IsVUFBaEI7WUFDQSx1QkFBZ0IsTUFBaEI7WUFHRSxJQUFJLENBQUMsTUFBTSxHQUFHQTtZQUNkLElBQUksQ0FBQyxFQUFFLEdBQUcsK0JBQStCRixVQUFVLEtBQUs7WUFDeEQsSUFBSSxDQUFDLEtBQUs7UUFDWjtJQTBCRjtJQWxDRSxpQkFEV0EsV0FDSixTQUFROzs7Ozs7Ozs7OztJQ1JWLE1BQU1HO1FBS1gsWUFDRUMsTUFBZSxFQUNmQyxTQUE0QyxFQUM1Q0MsT0FBd0MsQ0FDeEM7WUFSRiw2QkFBZ0IsVUFBaEI7WUFDQSw2QkFBZ0IsYUFBaEI7WUFDQSw2QkFBZ0IsV0FBaEI7WUFPRSxJQUFJLENBQUMsTUFBTSxHQUFHRjtZQUNkLElBQUksQ0FBQyxTQUFTLEdBQUdDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUdDO1FBQ2pCO0lBQ0Y7Ozs7Ozs7Ozs7O0lDYkEsSUFBSUMsWUFBWTtJQUNoQixJQUFJQyxjQUFjO0lBRVgsU0FBU0MsZUFBZUMsS0FBYztRQUMzQ0YsY0FBY0U7SUFDaEI7SUFFTyxNQUFNQztRQWVKLGFBQWFDLElBQVksRUFBRUYsS0FBYyxFQUFRO1lBQ3RERyxlQUFlLElBQUksQ0FBQyxPQUFPLEVBQUVELE1BQU1GO1lBQ25DLElBQUksQ0FBQyxnQkFBZ0I7UUFDdkI7UUFFTyxpQkFBaUJFLElBQVksRUFBRUYsS0FBYSxFQUFRO1lBQ3pESSxpQkFBaUIsSUFBSSxDQUFDLE9BQU8sRUFBRUYsTUFBTUY7WUFDckMsSUFBSSxDQUFDLGdCQUFnQjtRQUN2QjtRQUVPLG1CQUFtQkssTUFBOEIsRUFBUTtZQUM5RCxJQUFLLE1BQU1DLE9BQU9ELE9BQ2hCRCxpQkFBaUIsSUFBSSxDQUFDLE9BQU8sRUFBRUUsS0FBS0QsTUFBTSxDQUFDQyxJQUFJO1lBRWpELElBQUksQ0FBQyxnQkFBZ0I7UUFDdkI7UUFFTyxhQUFhQyxhQUFxQixFQUFXO1lBQ2xELE9BQU9DLHFCQUFxQixJQUFJLENBQUMsT0FBTyxFQUFFRDtRQUM1QztRQUVPLG9CQUE4QjtZQUNuQyxPQUFPRSxvQkFBb0IsSUFBSSxDQUFDLE9BQU87UUFDekM7UUFFTyxjQUFjQyxRQUFnQixFQUFrQjtZQUNyRCxNQUFNQyxNQUFNQyxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sRUFBRUYsVUFBVSxDQUFDO1lBQ3JELE9BQU9DLE1BQU0sSUFBSVYsUUFBUVUsT0FBTztRQUNsQztRQUVPLGlCQUFpQkQsUUFBZ0IsRUFBYTtZQUNuRCxPQUFPRyxtQkFBbUIsSUFBSSxDQUFDLE9BQU8sRUFBRUgsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUNJLFVBQ2xELElBQUliLFFBQVFhO1FBRXZCO1FBRU8sUUFDTG5CLFNBQTRDLEVBQzVDQyxPQUFrRCxFQUN2QztZQUNYLE1BQU1tQixvQkFBb0IsQUFBbUIsWUFBbkIsT0FBT25CLFVBQXVCO2dCQUFFLFVBQVVBO1lBQVEsSUFBSUEsUUFBQUEsVUFBQUEsVUFBVyxDQUFDO1lBQzVGLE9BQU8sSUFBSU4sVUFBVSxJQUFJRyxlQUFlLElBQUksRUFBRUUsV0FBV29CO1FBQzNEO1FBRU8sT0FDTEMsVUFBa0IsRUFDbEJDLE1BQWdDLEVBQ2Q7WUFDbEIsT0FBTyxJQUFJQyxRQUFRLENBQUNDLFNBQVNDO2dCQUMzQkMsaUJBQ0UsSUFBSSxDQUFDLE9BQU8sRUFDWkwsWUFDQUMsUUFBQUEsU0FBQUEsU0FBVSxDQUFDLEdBQ1gsQ0FBQ0s7b0JBQ0MsSUFBSUEsQUFBYSxNQUFiQSxJQUFJLElBQUksRUFDVkgsUUFBUUcsSUFBSSxJQUFJO3lCQUVoQkYsT0FBTyxJQUFJRyxNQUFNLHVCQUF1QkMsS0FBSyxTQUFTLENBQUNGO2dCQUUzRDtnQkFFRixJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZCO1FBQ0Y7UUFFUSxtQkFBbUI7WUFDekIsSUFBSXpCLGFBQWEsQ0FBQ0MsYUFDaEI7WUFFRkQsWUFBWTtZQUNQcUIsUUFBUSxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUMxQnJCLFlBQVk7Z0JBQ1o0QjtZQUNGO1FBQ0Y7UUFyRkEsWUFBWVgsT0FBb0IsQ0FBRTtZQUZsQyw4QkFBaUIsV0FBakI7WUFNRVksT0FBTyxjQUFjLENBQUMsSUFBSSxFQUFFLFdBQVc7Z0JBQ3JDO29CQUNFLE9BQU9aO2dCQUNUO1lBQ0Y7UUFDRjtJQTZFRjs7Ozs7Ozs7Ozs7SUNsR0EsTUFBTWE7UUFHSixPQUFPLE1BQU07Z0JBQ1hDO1lBQUFBLFFBQUFBLEFBQUFBLENBQUFBLGVBQUFBLFdBQVUsRUFBRSxXQUFXLElBQXZCQSxDQUFBQSxhQUFZLFdBQVcsR0FBS0Msa0JBQWlCO1lBQzdDLE9BQU9GLFlBQVksV0FBVztRQUNoQztJQUNGO0lBTkUsbUNBRElBLGFBQ1csZUFBZjtJQVFLLFNBQVNHLGNBQWNDLFdBQW1CO1FBQy9DLE1BQU1qQixVQUFVRixnQkFBZ0JlLFlBQVksR0FBRyxJQUFJSSxhQUFhLENBQUM7UUFDakUsT0FBT2pCLFVBQVUsSUFBSWIsUUFBUWEsV0FBVztJQUMxQztJQUVPLFNBQVNrQixpQkFBaUJELFdBQW1CO1FBQ2xELE9BQU9sQixtQkFBbUJjLFlBQVksR0FBRyxJQUFJSSxhQUFhLENBQUMsR0FBRyxHQUFHLENBQy9ELENBQUNqQixVQUNRLElBQUliLFFBQVFhO0lBR3pCO0lDdEJPLFNBQVNtQixlQUFlQyxLQUFhLEVBQUVDLEtBQWE7WUFDMUJDO1FBQS9CLE1BQU1DLGlCQUF5QkQsUUFBQUEsQ0FBQUEsNkJBQUFBLFdBQVcsY0FBYyxBQUFELElBQXhCQSw2QkFBNkI7UUFDNUQsTUFBTUUsVUFBVUQsZUFBZSxLQUFLLENBQUM7UUFDckMsT0FDRUUsT0FBT0QsT0FBTyxDQUFDLEVBQUUsSUFBSUosU0FDakJLLE9BQU9ELE9BQU8sQ0FBQyxFQUFFLEtBQUtKLFNBQVNLLE9BQU9ELE9BQU8sQ0FBQyxFQUFFLElBQUlIO0lBRTVEO0lDSkEsU0FBU0s7UUFFUEMsS0FBSyxhQUFhLEdBQUdYO1FBRXJCVyxLQUFLLGdCQUFnQixHQUFHVDtRQUV4QlUsV0FBVyxVQUFVLEdBQUdELEtBQUssVUFBVTtRQUV2Q0MsV0FBVyxXQUFXLEdBQUdELEtBQUssV0FBVztRQUV6Q0MsV0FBVyxZQUFZLEdBQUdELEtBQUssWUFBWTtZQUdmRTtRQUE1QkQsV0FBVyxhQUFhLEdBQUlDLFFBQUFBLENBQUFBLHNCQUFBQSxLQUFLLGFBQWEsQUFBRCxJQUFqQkEsc0JBQXNCRixLQUFLLGlCQUFpQjtRQUV4RTtZQUVFLE1BQU1HLHdCQUF3QkgsS0FBSyxxQkFBcUI7WUFFeERBLEtBQUsscUJBQXFCLEdBQUdDLFdBQVcscUJBQXFCLEdBQUcsQ0FDOURHO2dCQUVBLElBQUksQ0FBQ1osZUFBZSxHQUFHLEtBQ3JCLE1BQU0sSUFBSVYsTUFDUjtnQkFHSixPQUFPcUIsc0JBQXNCQztZQUMvQjtRQUNGO1FBR0FILFdBQVcsb0JBQW9CLEdBQUdELEtBQUssb0JBQW9CO0lBQzdEO0lDcENPLFNBQVNLLFFBQ2RDLFNBQWlCLEVBQ2pCQyxDQUFLO1FBS0hDLFFBQVEsT0FBTyxDQUFDRjtRQUNoQixJQUFJO1lBQ0YsT0FBT0M7UUFDVCxTQUFVO1lBQ1JDLFFBQVEsVUFBVTtRQUNwQjtJQUlKO0lDREEsSUFBSUM7SUFFSixTQUFTQztRQUNQLE9BQVFELE9BQU87WUFDYixnQkFBZ0IsQ0FBQztZQU9qQiwyQkFBMkIsQ0FBQztZQUM1QkU7WUFDQUM7WUFDQUM7UUFDRjtJQUNGO0lBRUEsTUFBTUMsbUJBQW1CLENBQ3ZCQyxJQUNBeEQsUUFFTztZQUNMLFNBQVNBO1lBQ1QsT0FBT3dEO1FBQ1Q7SUFHRixNQUFNQyx1QkFBdUIsQ0FDM0JDO1FBRUEsTUFBTUYsS0FBS0UsUUFBUSxLQUFLO1FBQ3hCLElBQUkxRDtRQUNKLElBQUl3RCxLQUFLLEdBQUc7WUFLVnhELFFBQVFrRCxLQUFNLHlCQUF5QixDQUFDTSxHQUFHO1lBQzNDLElBQUksQ0FBQ3hELE9BQ0hBLFFBQVFrRCxLQUFNLHlCQUF5QixDQUFDTSxHQUFHLEdBQUdELGlCQUFpQkMsSUFBSUUsUUFBUSxVQUFVO1FBRXpGLE9BQ0UxRCxRQUFRa0QsS0FBTSxjQUFjLENBQUNNLEdBQUc7UUFJbEMsSUFBZXhELEFBQVUyRCxXQUFWM0QsT0FDYixNQUFNLElBQUl1QixNQUFNLHNDQUFzQ2lDO1FBRXhELE9BQU94RDtJQUNUO0lBRUEsU0FBUzRELDZCQUE2QkosRUFBZ0I7UUFDcEQsT0FBT04sS0FBTSxjQUFjLENBQUNNLEdBQUc7SUFDakM7SUFRQSxTQUFTSixpQkFDUFMsTUFBc0MsRUFDdEMvQyxPQUEyQjtRQUUzQjJDLHFCQUFxQkksUUFBUSxPQUFPLEdBQUcvQyxVQUNuQyxJQUFJYixRQUFRYSxXQUNaO0lBQ047SUFFQSxTQUFTdUMsaUNBQ1BTLEtBQWdDO1FBRWhDaEIsUUFBUSxvQ0FBb0M7WUFDMUNnQixNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUNOLElBQUl4RCxNQUFNO2dCQUN4QixJQUFJLENBQUNrRCxLQUFNLGNBQWMsQ0FBQ00sR0FBRyxFQUMzQk4sS0FBTSxjQUFjLENBQUNNLEdBQUcsR0FBR0QsaUJBQWlCQyxJQUFJeEQ7WUFFcEQ7UUFDRjtJQUNGO0lBRUEsU0FBU3NEO1FBQ1BKLEtBQU0seUJBQXlCLEdBQUcsQ0FBQztJQUNyQztJQy9GQSxTQUFTYTtRQUNQLE1BQU1DLFlBQVl2QixLQUFLLFlBQVk7UUFDbkN1QixVQUFVLGdCQUFnQixDQUN4QkMsOEJBQ0EsQ0FBQ0M7WUFDQyxNQUFNQyxPQUFPM0MsS0FBSyxLQUFLLENBQUMwQyxNQUFNLElBQUk7WUFDbEMsTUFBTUUsY0FBY0MsV0FBV0YsS0FBSyxPQUFPLEVBQUVBLEtBQUssTUFBTTtZQUN4REgsVUFBVSxhQUFhLENBQUM7Z0JBQ3RCLE1BQU1DO2dCQUNOLE1BQU16QyxLQUFLLFNBQVMsQ0FBQztvQkFDbkIsV0FBVzJDLEtBQUssU0FBUztvQkFDekJDO2dCQUNGO1lBQ0Y7UUFDRjtRQUVGSixVQUFVLGdCQUFnQixDQUN4QkMsa0NBQ0EsQ0FBQ0M7WUFDQ04sNkJBQThCTSxNQUFNLElBQUksQ0FBMkIsRUFBRTtRQUN2RTtJQUVKO0lDWkEsSUFBSWhCO0lBRUosU0FBU29CO1FBQ1AsT0FBUXBCLDRCQUFPO1lBQ2IsZ0NBQWdDLEVBQUU7WUFDbENxQjtZQUNBQztRQUNGO0lBQ0Y7SUFFQSxTQUFTRCxxQkFBcUJFLEtBQWlCLEVBQUVDLElBQTRDO1lBRXRFQztRQURyQnpCLDBCQUFNLDhCQUE4QixDQUFDLElBQUksQ0FBQztZQUFFd0I7UUFBSzs7UUFDakQsTUFBTUUsZUFBZUQsUUFBQUEsQ0FBQUEsaUJBQUFBLEFBQUFBLENBQUFBLFNBQUFBLEtBQUksRUFBRSxhQUFhLEFBQUQsSUFBWixpQkFBTkEsT0FBTSxhQUFhLEdBQUssRUFBRTtRQUMvQ0MsYUFBYSxJQUFJLENBQUMxQiwwQkFBTSw4QkFBOEIsQ0FBQyxNQUFNLEdBQUc7SUFDbEU7SUFFQSxTQUFTc0I7UUFDUCxLQUFLLE1BQU1LLFdBQVczQiwwQkFBTSw4QkFBOEIsQ0FDeEQsSUFBSTJCLFFBQVEsVUFBVSxFQUNwQkEsUUFBUSxJQUFJLENBQUNBLFFBQVEsVUFBVSxDQUFDLE9BQU8sRUFBR0EsUUFBUSxVQUFVLENBQUMsT0FBTztRQUd4RTNCLDBCQUFNLDhCQUE4QixDQUFDLE1BQU0sR0FBRztJQUNoRDtJQzlCQSxJQUFJQTtJQUVKLFNBQVM0QjtRQUNQLE9BQVE1Qix5QkFBTztZQUNiLDBCQUEwQixJQUFJNkI7WUFDOUJDO1lBQ0FDO1FBQ0Y7SUFDRjtJQUVBLFNBQVNDLHNCQUNQQyxJQUFZLEVBQ1psRSxNQUEwQjtRQUUxQjZCLFFBQVEsNEJBQTRCcUMsTUFBTTtZQUN4QyxNQUFNQyxNQUFNbEMsdUJBQU0sd0JBQXdCO1lBQzFDLE1BQU1tQyxXQUFXRCxJQUFJLEdBQUcsQ0FBQ0Q7WUFDekIsSUFBSUUsVUFDRkEsU0FBUyxJQUFJLENBQUNwRTtpQkFFZG1FLElBQUksR0FBRyxDQUFDRCxNQUFNO2dCQUFDbEU7YUFBTztRQUUxQjtJQUNGO0lBRUEsU0FBUytELGtCQUFrQk0sT0FBZ0IsRUFBRXhFLE9BQW9CO1FBQy9EZ0MsUUFBUSx3QkFBd0I7WUFDOUIsTUFBTXlDLFlBQVlyQyx1QkFBTSx3QkFBd0IsQ0FBQyxHQUFHLENBQ2xEb0MsUUFBUSxPQUFPO1lBRWpCLElBQUlDLEFBQWM1QixXQUFkNEIsV0FDRjtZQUVGLE1BQU1DLGdCQUFzQyxFQUFFO1lBQzlDRCxVQUFVLE9BQU8sQ0FBQyxDQUFDdEU7b0JBRWJ3RTtnQkFESixNQUFNQyxhQUFhekUsTUFBTSxDQUFDLEVBQUU7Z0JBQzVCLElBQUl3RSxBQUFBQSxDQUFBQSxRQUFBQSxhQUFBQSxLQUFBQSxJQUFBQSxRQUFBQSxDQUFBQSw0QkFBQUEsV0FBWSxhQUFhLEFBQUQsSUFBeEJBLEtBQUFBLElBQUFBLDBCQUEyQixhQUFhLEFBQUQsTUFBTTNFLFNBQy9DNkUsV0FBVztvQkFDVDdDLFFBQVEscUJBQXFCO3dCQUMzQnVCLFdBQVdpQixTQUFTckU7b0JBQ3RCO2dCQUNGLEdBQUc7cUJBRUh1RSxjQUFjLElBQUksQ0FBQ3ZFO1lBRXZCO1lBQ0FpQyx1QkFBTSx3QkFBd0IsQ0FBQyxHQUFHLENBQ2hDb0MsUUFBUSxPQUFPLEVBQ2ZFO1FBRUo7SUFDRjtJQUVBLFNBQVNQO1FBQ1AvQix1QkFBTSx3QkFBd0IsQ0FBQyxLQUFLO0lBQ3RDO0lDMURPLFNBQVMwQztRQUNkLE9BQU87WUFDTDdGLGdCQUFjQTtRQUNoQjtJQUNGO0lDR08sU0FBUzhGLFdBQVdDLEdBQVksRUFBRUMsY0FBdUI7UUFDOURqRCxRQUFRLGNBQWM7WUFDcEJrRCxlQUFlRixLQUFLQyxnQkFBZ0JELElBQUksT0FBTztRQUNqRDtJQUNGO0lBRUEsU0FBU0UsZUFBZUYsR0FBcUIsRUFBRUMsY0FBZ0MsRUFBRUUsTUFBYztRQUM3RixJQUFJLENBQUNILE9BQU8sQUFBZSxZQUFmLE9BQU9BLE9BQW9CLENBQUNDLGtCQUFrQixBQUEwQixZQUExQixPQUFPQSxnQkFBNkI7UUFFOUYsTUFBTUcsU0FBU0o7UUFDZixNQUFNSyxvQkFBb0JKO1FBRTFCLElBQUlHLE1BQU0sQ0FBQyxVQUFVLElBQUlBLE1BQU0sQ0FBQyxVQUFVLEtBQUtDLGlCQUFpQixDQUFDLFVBQVUsRUFDekU7UUFJRixJQUFLLE1BQU03RixPQUFPd0YsSUFDaEIsSUFBSXhGLEFBQVEsWUFBUkEsS0FDRjhGLHFCQUFxQkYsTUFBTSxDQUFDNUYsSUFBSSxFQUFrQjZGO2FBQzdDLElBQUk3RixBQUFRLFlBQVJBLEtBQ1QrRixpQ0FDRUgsTUFBTSxDQUFDNUYsSUFBSSxFQUNYNkYsaUJBQWlCLENBQUM3RixJQUFJLEVBQ3RCMkY7YUFFRztZQUNMLE1BQU1LLG1CQUFtQixBQUFrQyxjQUFsQyxPQUFPSCxpQkFBaUIsQ0FBQzdGLElBQUksR0FDakQ2RixpQkFBaUIsQ0FBQzdGLElBQUksQ0FBK0IsR0FBRyxHQUN6RDZGLGlCQUFpQixDQUFDN0YsSUFBSTtZQUMxQjBGLGVBQWVFLE1BQU0sQ0FBQzVGLElBQUksRUFBRWdHLGtCQUFrQkw7UUFDaEQ7SUFFSjtJQVVBLFNBQVNHLHFCQUFxQkcsS0FBbUIsRUFBRXZHLEtBQXFEO1FBQ3RHLElBQUksZ0JBQWdCQSxPQUVsQjtRQUVGLE1BQU1XLE1BQU02RixnQkFBaUIsUUFBUSxDQUFDLGNBQWMsQ0FBQ0QsTUFBTTtRQUMzRDVGLElBQUksT0FBTyxHQUFHWCxNQUFNLE9BQU87SUFDN0I7SUFRQSxTQUFTcUcsaUNBQ1BJLE1BQWtDLEVBQ2xDQyxpQkFBNkMsRUFDN0NULE1BQWM7UUFFZCxJQUFLLE1BQU1VLFVBQVVGLE9BQVE7WUFDM0IsTUFBTWhDLFFBQVFnQyxNQUFNLENBQUNFLE9BQU87WUFDNUIsTUFBTUMsbUJBQTJDRixpQkFBaUIsQ0FBQ0MsT0FBTztZQUMxRSxJQUFLQyxRQUFBQSxtQkFBQUEsS0FBQUEsSUFBQUEsaUJBQWtCLGFBQWEsRUFHcEMsS0FBSyxNQUFNQyxTQUFTRCxpQkFBaUIsYUFBYSxDQUFFO2dCQUNsRCxNQUFNL0IsVUFBVTJCLGdCQUFpQix5QkFBeUIsQ0FBQyw4QkFBOEIsQ0FBQ0ssTUFBTTtnQkFDaEdwQyxNQUFNLE9BQU8sR0FBR3dCO2dCQUNoQnBCLFFBQVEsVUFBVSxHQUFHSjtZQUN2QjtRQUNGO0lBQ0Y7Ozs7Ozs7Ozs7O0lDOUVBLE1BQU1xQztRQVVKLE9BQU9iLE1BQWMsRUFBRWMsUUFBZ0IsRUFBUTtnQkFHMUNDO1lBRkgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ3JCZixRQUNDZSxBQUFBQSxTQUFBQSxDQUFBQSwyQkFBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUNmLE9BQU0sSUFBOUJlLDJCQUFtQyxLQUFLO1lBRTNDLElBQUksQ0FBQyxRQUFRLENBQUUsUUFBUSxDQUFDRCxVQUFVZDtRQUNwQztRQUVBLFVBQVVBLE1BQWMsRUFBUTtZQUM5QixNQUFNZ0IsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQ2hCO1lBQ25DLElBQUlnQixLQUFLLEdBQUcsWUFDVixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQ2hCLFFBQVFnQixLQUFLO1lBR3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDaEI7WUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUNBO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHO2dCQUNYL0UsUUFBUSxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUMxQixJQUFJLENBQUMsSUFBSTtnQkFDWDtZQUNGO1FBQ0Y7UUFFQSxPQUFhO1lBQ1g0QixRQUFRLG1DQUFtQztnQkFDekNMLEtBQUssWUFBWSxHQUFHLGFBQWEsQ0FBQztvQkFDaEMsTUFBTXdCO29CQUNOLE1BQU1pRCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZTtnQkFDdkM7Z0JBQ0EsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLO2dCQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2xCO1FBQ0Y7UUFyQ0EsYUFBYztZQUxkLDBDQUFRLGtCQUFpQixJQUFJbkM7WUFDN0IsMENBQVEsbUJBQWtCLElBQUlvQztZQUM5QiwwQ0FBUSxZQUFXO1lBQ25CLDBDQUFRLFlBQTBDeEQ7WUFHaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJeUQscUJBQTZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUk7UUFDM0U7SUFvQ0Y7SUFFQSxTQUFTQztRQUNQLE9BQU9wRixlQUFlLEdBQUc7SUFDM0I7SUNoREEsU0FBU3FGO1FBQ1A1RSxXQUFXLGVBQWUsR0FBRztZQUMzQixhQUFhLENBQUM7WUFDZCxVQUFVUztZQUNWLDJCQUEyQm1CO1lBQzNCLGFBQWF1QjtZQUNiLGlCQUFpQmY7WUFDakIsVUFBVWM7UUFDWjtRQUVBLElBQUl5Qiw0QkFDRjNFLFdBQVcsZUFBZSxDQUFDLDJCQUEyQixHQUFHLElBQUlvRTtRQUcvRHBFLFdBQVcsZUFBZSxHQUFHNkU7UUFDN0I3RSxXQUFXLHVCQUF1QixHQUFHNkU7UUFDckM3RSxXQUFXLFVBQVUsR0FBRzJCO0lBQzFCO0lBU0EsU0FBU2tELGdCQUFnQkMsS0FBYSxFQUFFaEUsRUFBVSxFQUFFOEIsT0FBd0M7UUFDMUZrQixnQkFBZ0IsV0FBVyxDQUFDaEQsR0FBRyxHQUFHOEI7SUFDcEM7SUFRQSxTQUFTakIsMEJBQVd5QixHQUFZLEVBQUU3RSxNQUEwQjtRQUMxRCxJQUFJLENBQUN3RyxnQkFBZ0IzQixNQUFNLFlBQ3pCN0MsUUFBUSxJQUFJLENBQUMsc0NBQXNDekIsS0FBSyxTQUFTLENBQUNzRTtRQUdwRSxJQUFJLHVCQUF1QkEsS0FBSyxZQUM5Qlosc0JBQXNCWSxJQUFJLGlCQUFpQixFQUFFN0U7UUFHL0MsT0FBT3lHLGVBQWU1QixLQUFLN0U7SUFDN0I7SUFFQSxTQUFTeUcsZUFBZTVCLEdBQVksRUFBRTdFLE1BQTBCO1FBQzlELE1BQU1xRSxVQUEyQ3hDLFFBQy9DLHlCQUF5QmdELElBQUksT0FBTyxFQUNwQyxJQUFNNkIsaUJBQWlCN0IsS0FBSztRQUU5QixNQUFNOEIsVUFBOEI5RSxRQUNsQywwQkFDQSxJQUFNNkUsaUJBQWlCMUcsVUFBVSxFQUFFLEVBQUU7UUFFdkMsT0FBTzZCLFFBQVEsY0FBYyxJQUFNd0MsV0FBV3NDO0lBQ2hEO0lBRUEsU0FBU0gsZ0JBQWdCM0IsR0FBWTtRQUNuQyxPQUFPLEFBQWUsWUFBZixPQUFPQSxPQUFvQkEsQUFBUSxTQUFSQSxPQUFpQixjQUFhQSxPQUFPLHVCQUF1QkEsR0FBRTtJQUNsRztJQUVBLE1BQU0rQixlQUFlLElBQUlDO0lBUXpCLFNBQVNILGlCQUNQN0IsR0FBcUIsRUFDckJpQyxTQUFrQjtRQUdsQixJQUFJLEFBQWUsWUFBZixPQUFPakMsT0FBb0JBLEFBQVEsU0FBUkEsS0FDN0IsT0FBT0E7UUFHVCxJQUFJaUMsV0FBVztZQUNiLE1BQU16RyxNQUFNdUcsYUFBYSxHQUFHLENBQUMvQjtZQUM3QixJQUFJeEUsS0FDRixPQUFPQTtRQUVYO1FBRUEsTUFBTWdFLFVBQVU7WUFBRSxNQUFNUTtRQUFJO1FBQzVCa0Msc0JBQXNCMUMsU0FBUyxHQUFHUTtRQUVsQyxJQUFJaUMsV0FDRkYsYUFBYSxHQUFHLENBQUMvQixLQUFLUixRQUFRLElBQUk7UUFFcEMsT0FBT0EsUUFBUSxJQUFJO0lBQ3JCO0lBRUEsTUFBTTBDLHdCQUF3QixDQUM1QmhJLE9BQ0FpSSxPQUNBbkM7UUFFQSxNQUFNb0MsUUFBUTtRQUNkLElBQUksRUFBRUQsU0FBU0MsT0FDYixNQUFNLElBQUkzRyxNQUFNLHFDQUFxQzJHLFFBQVE7UUFHL0QsSUFBSSxBQUFpQixZQUFqQixPQUFPbEksU0FBc0JBLEFBQVUsU0FBVkEsT0FDL0I7UUFFRixNQUFNbUksTUFBTW5JO1FBRVosSUFBSyxNQUFNTSxPQUFPNkgsSUFBSztZQUNyQixNQUFNQyxTQUEyQkQsR0FBRyxDQUFDN0gsSUFBSTtZQUN6QyxJQUFJLEFBQWtCLFlBQWxCLE9BQU84SCxVQUF1QkEsQUFBVyxTQUFYQSxRQUNoQztZQUdGLElBQXlCLG1CQUFtQkEsUUFBUTtnQkFDbERELEdBQUcsQ0FBQzdILElBQUksR0FBRyxJQUFJTCxRQUFRbUksTUFBTSxDQUFDLGdCQUFnQjtnQkFDOUM7WUFDRjtZQUFPLElBQUlBLGtCQUFrQm5JLFNBQzNCO1lBR0YrSCxzQkFBc0JJLFFBQVFILE9BQU9uQztZQUVyQyxNQUFNdUMsZUFBZSxXQUFZRDtZQUNqQyxJQUFJQyxjQUFjO2dCQUNoQkYsR0FBRyxDQUFDN0gsSUFBSSxHQUFHbUQscUJBQ1QyRTtnQkFFRjtZQUNGO1lBQ0EsTUFBTUwsWUFBWSxhQUFhSztZQUMvQixJQUFJTCxXQUFXO2dCQUdiSSxHQUFHLENBQUM3SCxJQUFJLEdBQUdrRyxnQkFBZ0IsV0FBVyxDQUFFNEIsT0FBbUIsT0FBTyxDQUFDLENBQ2hFLElBQUksQ0FBQztvQkFBRSxHQUFHQSxNQUFNO2dCQUFDO2dCQUNwQkQsR0FBRyxDQUFDN0gsSUFBSSxDQUFDLEdBQUcsR0FBRzhIO2dCQUNmO1lBQ0Y7WUFDQSxNQUFNRSxTQUFTLGFBQWFGO1lBQzVCLElBQUlFLFFBQVE7b0JBRVZDO2dCQURBSCxNQUFNLENBQUMsVUFBVSxHQUFJdEMsSUFBZ0IsT0FBTzt3QkFDNUN5QyxDQUFBQSwrQ0FBQUEsZ0JBQWdCLDJCQUEyQixBQUFELEtBQTFDQSw2Q0FBNkMsTUFBTSxDQUNoRHpDLElBQWdCLE9BQU8sRUFDeEJzQztnQkFFRjtZQUNGO1FBQ0Y7SUFDRjtJQy9KQSxJQUFJMUYsQUFBK0JpQixXQUEvQmpCLFdBQVcsZUFBZSxFQUFnQjtRQUM1QzRFO1FBQ0E5RTtRQUNBdUI7SUFDRiJ9
@@ -1 +1 @@
1
- (()=>{"use strict";let e,t,l;function n(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}class r{setAttribute(e,t){__SetAttribute(this.element,e,t),this.flushElementTree()}setStyleProperty(e,t){__AddInlineStyle(this.element,e,t),this.flushElementTree()}setStyleProperties(e){for(let t in e)__AddInlineStyle(this.element,t,e[t]);this.flushElementTree()}getAttribute(e){return __GetAttributeByName(this.element,e)}getAttributeNames(){return __GetAttributeNames(this.element)}querySelector(e){let t=__QuerySelector(this.element,e,{});return t?new r(t):null}querySelectorAll(e){return __QuerySelectorAll(this.element,e,{}).map(e=>new r(e))}invoke(e,t){return new Promise((l,n)=>{__InvokeUIMethod(this.element,e,null!=t?t:{},e=>{0===e.code?l(e.data):n(Error("UI method invoke: "+JSON.stringify(e)))}),this.flushElementTree()})}flushElementTree(){r.willFlush||(r.willFlush=!0,Promise.resolve().then(()=>{r.willFlush=!1,__FlushElementTree()}))}constructor(e){n(this,"element",void 0),Object.defineProperty(this,"element",{get:()=>e})}}n(r,"willFlush",!1);class i{static get(){return null!=i.pageElement||(i.pageElement=__GetPageElement()),i.pageElement}}function o(e){let t=__QuerySelector(i.get(),e,{});return t?new r(t):null}function a(e){return __QuerySelectorAll(i.get(),e,{}).map(e=>new r(e))}function u(e,t){var l;let n=(null!=(l=SystemInfo.lynxSdkVersion)?l:"1.0").split(".");return Number(n[0])>e||Number(n[0])==e&&Number(n[1])>t}!function(e,t,l){t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l}(i,"pageElement",void 0);let s=(e,t)=>({current:t,_wvid:e}),c=t=>{let l,n=t._wvid;return n<0?(l=e._firstScreenWorkletRefMap[n])||(l=e._firstScreenWorkletRefMap[n]=s(n,t._initValue)):l=e._workletRefMap[n],l};function d(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function f(e,t,l){lynxWorkletImpl._workletMap[t]=l}let y=new WeakMap;function m(e,t){if("object"!=typeof e||null===e)return e;if(t){let t=y.get(e);if(t)return t}let l={main:e};return _(l,0,e),t&&y.set(e,l.main),l.main}let _=(e,t,l)=>{if(++t>=1e3)throw Error("Depth of value exceeds limit of 1000.");if("object"==typeof e&&null!==e)for(let i in e){let o=e[i];if("object"==typeof o&&null!==o){if("elementRefptr"in o){e[i]=new r(o.elementRefptr);continue}if(!(o instanceof r)){if(_(o,t,l),"_wvid"in o){e[i]=c(o);continue}if("_wkltId"in o){e[i]=lynxWorkletImpl._workletMap[o._wkltId].bind({...o}),e[i].ctx=o;continue}if("_jsFnId"in o){var n;o._execId=l._execId,null==(n=lynxWorkletImpl._jsFunctionLifecycleManager)||n.addRef(l._execId,o);continue}}}}};void 0===globalThis.lynxWorkletImpl&&(globalThis.lynxWorkletImpl={_workletMap:{},_refImpl:e={_workletRefMap:{},_firstScreenWorkletRefMap:{},updateWorkletRef:function(e,t){c(e).current=t?new r(t):null},updateWorkletRefInitValueChanges:function(t){t.forEach(([t,l])=>{e._workletRefMap[t]||(e._workletRefMap[t]=s(t,l))})},clearFirstScreenWorkletRefMap:function(){e._firstScreenWorkletRefMap={}}},_runOnBackgroundDelayImpl:t={delayedBackgroundFunctionArray:[],delayRunOnBackground:function(e,l){var n;t.delayedBackgroundFunctionArray.push({task:l}),(null!=(n=e._delayIndices)?n:e._delayIndices=[]).push(t.delayedBackgroundFunctionArray.length-1)},runDelayedBackgroundFunctions:function(){for(let e of t.delayedBackgroundFunctionArray)e.jsFnHandle&&e.task(e.jsFnHandle._jsFnId,e.jsFnHandle._execId);t.delayedBackgroundFunctionArray.length=0}},_hydrateCtx:function(e,t){(function e(t,l,n){if(t&&"object"==typeof t&&l&&"object"==typeof l&&(!t._wkltId||t._wkltId===l._wkltId))for(let o in t)if("_wvid"===o){var r,i;r=t[o],"_initValue"in(i=l)||(lynxWorkletImpl._refImpl._workletRefMap[r].current=i.current)}else if("_jsFn"===o)!function(e,t,l){for(let n in e){let r=e[n],i=t[n];if(null==i?void 0:i._delayIndices)for(let e of i._delayIndices){let t=lynxWorkletImpl._runOnBackgroundDelayImpl.delayedBackgroundFunctionArray[e];r._execId=l,t.jsFnHandle=r}}}(t[o],l[o],n);else{let r="function"==typeof l[o]?l[o].ctx:l[o];e(t[o],r,n)}})(e,t,e._execId)},_eventDelayImpl:l={_delayedWorkletParamsMap:new Map,runDelayedWorklet:function(e,t){(()=>{let n=l._delayedWorkletParamsMap.get(e._wkltId);if(void 0===n)return;let r=[];n.forEach(l=>{var n;let i=l[0];(null==i||null==(n=i.currentTarget)?void 0:n.elementRefptr)===t?setTimeout(()=>{runWorklet(e,l)},0):r.push(l)}),l._delayedWorkletParamsMap.set(e._wkltId,r)})()},clearDelayedWorklets:function(){l._delayedWorkletParamsMap.clear()}}},u(2,15)&&(globalThis.lynxWorkletImpl._jsFunctionLifecycleManager=new class e{addRef(e,t){var l;this.execIdRefCount.set(e,(null!=(l=this.execIdRefCount.get(e))?l:0)+1),this.registry.register(t,e)}removeRef(e){let t=this.execIdRefCount.get(e);if(t>1)return void this.execIdRefCount.set(e,t-1);this.execIdRefCount.delete(e),this.execIdSetToFire.add(e),this.willFire||(this.willFire=!0,Promise.resolve().then(()=>{this.fire()}))}fire(){lynx.getJSContext().dispatchEvent({type:"Lynx.Worklet.releaseBackgroundWorkletCtx",data:Array.from(this.execIdSetToFire)}),this.execIdSetToFire.clear(),this.willFire=!1}constructor(){d(this,"execIdRefCount",new Map),d(this,"execIdSetToFire",new Set),d(this,"willFire",!1),d(this,"registry",void 0),this.registry=new FinalizationRegistry(this.removeRef.bind(this))}}),globalThis.registerWorklet=f,globalThis.registerWorkletInternal=f,globalThis.runWorklet=function(e,t){var n,r;if(!("object"==typeof(n=e)&&null!==n&&("_wkltId"in n||"_lepusWorkletHash"in n)))return void console.warn("Worklet: Invalid worklet object: "+JSON.stringify(e));if("_lepusWorkletHash"in e){return void(r=e._lepusWorkletHash,(()=>{let e=l._delayedWorkletParamsMap,n=e.get(r);n?n.push(t):e.set(r,[t])})())}return function(e,t){let l=(e._wkltId,m(e,!0)),n=m(t||[],!1);return l(...n)}(e,t)},function(){var e;lynx.querySelector=o,lynx.querySelectorAll=a,globalThis.setTimeout=lynx.setTimeout,globalThis.setInterval=lynx.setInterval,globalThis.clearTimeout=lynx.clearTimeout,globalThis.clearInterval=null!=(e=lynx.clearInterval)?e:lynx.clearTimeInterval;{let e=lynx.requestAnimationFrame;lynx.requestAnimationFrame=globalThis.requestAnimationFrame=t=>{if(!u(2,15))throw Error("requestAnimationFrame in main thread script requires Lynx sdk version 2.16");return e(t)}}globalThis.cancelAnimationFrame=lynx.cancelAnimationFrame}(),function(){let t=lynx.getJSContext();t.addEventListener("Lynx.Worklet.runWorkletCtx",e=>{let l=JSON.parse(e.data),n=runWorklet(l.worklet,l.params);t.dispatchEvent({type:"Lynx.Worklet.FunctionCallRet",data:JSON.stringify({resolveId:l.resolveId,returnValue:n})})}),t.addEventListener("Lynx.Worklet.releaseWorkletRef",t=>{var l;l=t.data.id,delete e._workletRefMap[l]})}())})();
1
+ (()=>{"use strict";let e,t,n;function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class l{cancel(){return __ElementAnimate(this.effect.target.element,[3,this.id])}pause(){return __ElementAnimate(this.effect.target.element,[2,this.id])}play(){return __ElementAnimate(this.effect.target.element,[1,this.id])}start(){return __ElementAnimate(this.effect.target.element,[0,this.id,this.effect.keyframes,this.effect.options])}constructor(e){r(this,"effect",void 0),r(this,"id",void 0),this.effect=e,this.id="__lynx-inner-js-animation-"+l.count++,this.start()}}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}r(l,"count",0);class o{constructor(e,t,n){i(this,"target",void 0),i(this,"keyframes",void 0),i(this,"options",void 0),this.target=e,this.keyframes=t,this.options=n}}let a=!1,s=!0;class u{setAttribute(e,t){__SetAttribute(this.element,e,t),this.flushElementTree()}setStyleProperty(e,t){__AddInlineStyle(this.element,e,t),this.flushElementTree()}setStyleProperties(e){for(let t in e)__AddInlineStyle(this.element,t,e[t]);this.flushElementTree()}getAttribute(e){return __GetAttributeByName(this.element,e)}getAttributeNames(){return __GetAttributeNames(this.element)}querySelector(e){let t=__QuerySelector(this.element,e,{});return t?new u(t):null}querySelectorAll(e){return __QuerySelectorAll(this.element,e,{}).map(e=>new u(e))}animate(e,t){return new l(new o(this,e,"number"==typeof t?{duration:t}:null!=t?t:{}))}invoke(e,t){return new Promise((n,r)=>{__InvokeUIMethod(this.element,e,null!=t?t:{},e=>{0===e.code?n(e.data):r(Error("UI method invoke: "+JSON.stringify(e)))}),this.flushElementTree()})}flushElementTree(){!a&&s&&(a=!0,Promise.resolve().then(()=>{a=!1,__FlushElementTree()}))}constructor(e){!function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(this,"element",void 0),Object.defineProperty(this,"element",{get:()=>e})}}class c{static get(){return null!=c.pageElement||(c.pageElement=__GetPageElement()),c.pageElement}}function d(e){let t=__QuerySelector(c.get(),e,{});return t?new u(t):null}function f(e){return __QuerySelectorAll(c.get(),e,{}).map(e=>new u(e))}function m(e,t){var n;let r=(null!=(n=SystemInfo.lynxSdkVersion)?n:"1.0").split(".");return Number(r[0])>e||Number(r[0])==e&&Number(r[1])>t}!function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(c,"pageElement",void 0);let y=(e,t)=>({current:t,_wvid:e}),h=t=>{let n,r=t._wvid;return r<0?(n=e._firstScreenWorkletRefMap[r])||(n=e._firstScreenWorkletRefMap[r]=y(r,t._initValue)):n=e._workletRefMap[r],n};function _(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t,n){lynxWorkletImpl._workletMap[t]=n}let k=new WeakMap;function g(e,t){if("object"!=typeof e||null===e)return e;if(t){let t=k.get(e);if(t)return t}let n={main:e};return I(n,0,e),t&&k.set(e,n.main),n.main}let I=(e,t,n)=>{if(++t>=1e3)throw Error("Depth of value exceeds limit of 1000.");if("object"==typeof e&&null!==e)for(let l in e){let i=e[l];if("object"==typeof i&&null!==i){if("elementRefptr"in i){e[l]=new u(i.elementRefptr);continue}if(!(i instanceof u)){if(I(i,t,n),"_wvid"in i){e[l]=h(i);continue}if("_wkltId"in i){e[l]=lynxWorkletImpl._workletMap[i._wkltId].bind({...i}),e[l].ctx=i;continue}if("_jsFnId"in i){var r;i._execId=n._execId,null==(r=lynxWorkletImpl._jsFunctionLifecycleManager)||r.addRef(n._execId,i);continue}}}}};void 0===globalThis.lynxWorkletImpl&&(globalThis.lynxWorkletImpl={_workletMap:{},_refImpl:e={_workletRefMap:{},_firstScreenWorkletRefMap:{},updateWorkletRef:function(e,t){h(e).current=t?new u(t):null},updateWorkletRefInitValueChanges:function(t){t.forEach(([t,n])=>{e._workletRefMap[t]||(e._workletRefMap[t]=y(t,n))})},clearFirstScreenWorkletRefMap:function(){e._firstScreenWorkletRefMap={}}},_runOnBackgroundDelayImpl:t={delayedBackgroundFunctionArray:[],delayRunOnBackground:function(e,n){var r;t.delayedBackgroundFunctionArray.push({task:n}),(null!=(r=e._delayIndices)?r:e._delayIndices=[]).push(t.delayedBackgroundFunctionArray.length-1)},runDelayedBackgroundFunctions:function(){for(let e of t.delayedBackgroundFunctionArray)e.jsFnHandle&&e.task(e.jsFnHandle._jsFnId,e.jsFnHandle._execId);t.delayedBackgroundFunctionArray.length=0}},_hydrateCtx:function(e,t){(function e(t,n,r){if(t&&"object"==typeof t&&n&&"object"==typeof n&&(!t._wkltId||t._wkltId===n._wkltId))for(let o in t)if("_wvid"===o){var l,i;l=t[o],"_initValue"in(i=n)||(lynxWorkletImpl._refImpl._workletRefMap[l].current=i.current)}else if("_jsFn"===o)!function(e,t,n){for(let r in e){let l=e[r],i=t[r];if(null==i?void 0:i._delayIndices)for(let e of i._delayIndices){let t=lynxWorkletImpl._runOnBackgroundDelayImpl.delayedBackgroundFunctionArray[e];l._execId=n,t.jsFnHandle=l}}}(t[o],n[o],r);else{let l="function"==typeof n[o]?n[o].ctx:n[o];e(t[o],l,r)}})(e,t,e._execId)},_eventDelayImpl:n={_delayedWorkletParamsMap:new Map,runDelayedWorklet:function(e,t){(()=>{let r=n._delayedWorkletParamsMap.get(e._wkltId);if(void 0===r)return;let l=[];r.forEach(n=>{var r;let i=n[0];(null==i||null==(r=i.currentTarget)?void 0:r.elementRefptr)===t?setTimeout(()=>{runWorklet(e,n)},0):l.push(n)}),n._delayedWorkletParamsMap.set(e._wkltId,l)})()},clearDelayedWorklets:function(){n._delayedWorkletParamsMap.clear()}},_eomImpl:{setShouldFlush:function(e){s=e}}},m(2,15)&&(globalThis.lynxWorkletImpl._jsFunctionLifecycleManager=new class e{addRef(e,t){var n;this.execIdRefCount.set(e,(null!=(n=this.execIdRefCount.get(e))?n:0)+1),this.registry.register(t,e)}removeRef(e){let t=this.execIdRefCount.get(e);if(t>1)return void this.execIdRefCount.set(e,t-1);this.execIdRefCount.delete(e),this.execIdSetToFire.add(e),this.willFire||(this.willFire=!0,Promise.resolve().then(()=>{this.fire()}))}fire(){lynx.getJSContext().dispatchEvent({type:"Lynx.Worklet.releaseBackgroundWorkletCtx",data:Array.from(this.execIdSetToFire)}),this.execIdSetToFire.clear(),this.willFire=!1}constructor(){_(this,"execIdRefCount",new Map),_(this,"execIdSetToFire",new Set),_(this,"willFire",!1),_(this,"registry",void 0),this.registry=new FinalizationRegistry(this.removeRef.bind(this))}}),globalThis.registerWorklet=p,globalThis.registerWorkletInternal=p,globalThis.runWorklet=function(e,t){var r,l;if(!("object"==typeof(r=e)&&null!==r&&("_wkltId"in r||"_lepusWorkletHash"in r)))return void console.warn("Worklet: Invalid worklet object: "+JSON.stringify(e));if("_lepusWorkletHash"in e){return void(l=e._lepusWorkletHash,(()=>{let e=n._delayedWorkletParamsMap,r=e.get(l);r?r.push(t):e.set(l,[t])})())}return function(e,t){let n=(e._wkltId,g(e,!0)),r=g(t||[],!1);return n(...r)}(e,t)},function(){var e;lynx.querySelector=d,lynx.querySelectorAll=f,globalThis.setTimeout=lynx.setTimeout,globalThis.setInterval=lynx.setInterval,globalThis.clearTimeout=lynx.clearTimeout,globalThis.clearInterval=null!=(e=lynx.clearInterval)?e:lynx.clearTimeInterval;{let e=lynx.requestAnimationFrame;lynx.requestAnimationFrame=globalThis.requestAnimationFrame=t=>{if(!m(2,15))throw Error("requestAnimationFrame in main thread script requires Lynx sdk version 2.16");return e(t)}}globalThis.cancelAnimationFrame=lynx.cancelAnimationFrame}(),function(){let t=lynx.getJSContext();t.addEventListener("Lynx.Worklet.runWorkletCtx",e=>{let n=JSON.parse(e.data),r=runWorklet(n.worklet,n.params);t.dispatchEvent({type:"Lynx.Worklet.FunctionCallRet",data:JSON.stringify({resolveId:n.resolveId,returnValue:r})})}),t.addEventListener("Lynx.Worklet.releaseWorkletRef",t=>{var n;n=t.data.id,delete e._workletRefMap[n]})}())})();
@@ -0,0 +1,17 @@
1
+ import type { KeyframeEffect } from './effect.js';
2
+ export declare enum AnimationOperation {
3
+ START = 0,// Start a new animation
4
+ PLAY = 1,// Play/resume a paused animation
5
+ PAUSE = 2,// Pause an existing animation
6
+ CANCEL = 3
7
+ }
8
+ export declare class Animation {
9
+ static count: number;
10
+ readonly effect: KeyframeEffect;
11
+ readonly id: string;
12
+ constructor(effect: KeyframeEffect);
13
+ cancel(): void;
14
+ pause(): void;
15
+ play(): void;
16
+ private start;
17
+ }
@@ -0,0 +1,39 @@
1
+ export var AnimationOperation;
2
+ (function (AnimationOperation) {
3
+ AnimationOperation[AnimationOperation["START"] = 0] = "START";
4
+ AnimationOperation[AnimationOperation["PLAY"] = 1] = "PLAY";
5
+ AnimationOperation[AnimationOperation["PAUSE"] = 2] = "PAUSE";
6
+ AnimationOperation[AnimationOperation["CANCEL"] = 3] = "CANCEL";
7
+ })(AnimationOperation || (AnimationOperation = {}));
8
+ export class Animation {
9
+ static count = 0;
10
+ effect;
11
+ id;
12
+ constructor(effect) {
13
+ this.effect = effect;
14
+ this.id = '__lynx-inner-js-animation-' + Animation.count++;
15
+ this.start();
16
+ }
17
+ cancel() {
18
+ // @ts-expect-error accessing private member 'element'
19
+ return __ElementAnimate(this.effect.target.element, [AnimationOperation.CANCEL, this.id]);
20
+ }
21
+ pause() {
22
+ // @ts-expect-error accessing private member 'element'
23
+ return __ElementAnimate(this.effect.target.element, [AnimationOperation.PAUSE, this.id]);
24
+ }
25
+ play() {
26
+ // @ts-expect-error accessing private member 'element'
27
+ return __ElementAnimate(this.effect.target.element, [AnimationOperation.PLAY, this.id]);
28
+ }
29
+ start() {
30
+ // @ts-expect-error accessing private member 'element'
31
+ return __ElementAnimate(this.effect.target.element, [
32
+ AnimationOperation.START,
33
+ this.id,
34
+ this.effect.keyframes,
35
+ this.effect.options,
36
+ ]);
37
+ }
38
+ }
39
+ //# sourceMappingURL=animation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation.js","sourceRoot":"","sources":["../../../src/api/animation/animation.ts"],"names":[],"mappings":"AAKA,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,6DAAS,CAAA;IACT,2DAAQ,CAAA;IACR,6DAAS,CAAA;IACT,+DAAU,CAAA;AACZ,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B;AAED,MAAM,OAAO,SAAS;IACpB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACD,MAAM,CAAiB;IACvB,EAAE,CAAS;IAE3B,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,GAAG,4BAA4B,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;QAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAEM,MAAM;QACX,sDAAsD;QACtD,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;IAEM,KAAK;QACV,sDAAsD;QACtD,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC;IAEM,IAAI;QACT,sDAAsD;QACtD,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1F,CAAC;IAEO,KAAK;QACX,sDAAsD;QACtD,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;YAClD,kBAAkB,CAAC,KAAK;YACxB,IAAI,CAAC,EAAE;YACP,IAAI,CAAC,MAAM,CAAC,SAAS;YACrB,IAAI,CAAC,MAAM,CAAC,OAAO;SACpB,CAAC,CAAC;IACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Element } from '../element.js';
2
+ export declare class KeyframeEffect {
3
+ readonly target: Element;
4
+ readonly keyframes: Record<string, number | string>[];
5
+ readonly options: Record<string, number | string>;
6
+ constructor(target: Element, keyframes: Record<string, number | string>[], options: Record<string, number | string>);
7
+ }
@@ -0,0 +1,11 @@
1
+ export class KeyframeEffect {
2
+ target;
3
+ keyframes;
4
+ options;
5
+ constructor(target, keyframes, options) {
6
+ this.target = target;
7
+ this.keyframes = keyframes;
8
+ this.options = options;
9
+ }
10
+ }
11
+ //# sourceMappingURL=effect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../src/api/animation/effect.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,cAAc;IACT,MAAM,CAAU;IAChB,SAAS,CAAoC;IAC7C,OAAO,CAAkC;IAEzD,YACE,MAAe,EACf,SAA4C,EAC5C,OAAwC;QAExC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
@@ -1,5 +1,6 @@
1
+ import { Animation } from './animation/animation.js';
2
+ export declare function setShouldFlush(value: boolean): void;
1
3
  export declare class Element {
2
- private static willFlush;
3
4
  private readonly element;
4
5
  constructor(element: ElementNode);
5
6
  setAttribute(name: string, value: unknown): void;
@@ -9,6 +10,7 @@ export declare class Element {
9
10
  getAttributeNames(): string[];
10
11
  querySelector(selector: string): Element | null;
11
12
  querySelectorAll(selector: string): Element[];
13
+ animate(keyframes: Record<string, number | string>[], options?: number | Record<string, number | string>): Animation;
12
14
  invoke(methodName: string, params?: Record<string, unknown>): Promise<unknown>;
13
15
  private flushElementTree;
14
16
  }
@@ -1,8 +1,14 @@
1
1
  // Copyright 2024 The Lynx Authors. All rights reserved.
2
2
  // Licensed under the Apache License Version 2.0 that can be found in the
3
3
  // LICENSE file in the root directory of this source tree.
4
+ import { Animation } from './animation/animation.js';
5
+ import { KeyframeEffect } from './animation/effect.js';
6
+ let willFlush = false;
7
+ let shouldFlush = true;
8
+ export function setShouldFlush(value) {
9
+ shouldFlush = value;
10
+ }
4
11
  export class Element {
5
- static willFlush = false;
6
12
  // @ts-expect-error set in constructor
7
13
  element;
8
14
  constructor(element) {
@@ -44,6 +50,10 @@ export class Element {
44
50
  return new Element(element);
45
51
  });
46
52
  }
53
+ animate(keyframes, options) {
54
+ const normalizedOptions = typeof options === 'number' ? { duration: options } : options ?? {};
55
+ return new Animation(new KeyframeEffect(this, keyframes, normalizedOptions));
56
+ }
47
57
  invoke(methodName, params) {
48
58
  return new Promise((resolve, reject) => {
49
59
  __InvokeUIMethod(this.element, methodName, params ?? {}, (res) => {
@@ -58,12 +68,12 @@ export class Element {
58
68
  });
59
69
  }
60
70
  flushElementTree() {
61
- if (Element.willFlush) {
71
+ if (willFlush || !shouldFlush) {
62
72
  return;
63
73
  }
64
- Element.willFlush = true;
74
+ willFlush = true;
65
75
  void Promise.resolve().then(() => {
66
- Element.willFlush = false;
76
+ willFlush = false;
67
77
  __FlushElementTree();
68
78
  });
69
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/api/element.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/api/element.ts"],"names":[],"mappings":"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"}
@@ -11,4 +11,4 @@ declare function runWorkletCtx(worklet: Worklet, params: ClosureValueType[]): un
11
11
  * @param patch - An array containing the index and new value of the worklet value.
12
12
  */
13
13
  declare function updateWorkletRefInitValueChanges(patch?: [number, unknown][]): void;
14
- export { runWorkletCtx, updateWorkletRef, updateWorkletRefInitValueChanges, registerWorklet, delayRunOnBackground };
14
+ export { runWorkletCtx, updateWorkletRef, updateWorkletRefInitValueChanges, registerWorklet, delayRunOnBackground, setEomShouldFlushElementTree, };