angular-three 0.0.3 → 0.0.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 (54) hide show
  1. package/esm2020/index.mjs +28 -1
  2. package/esm2020/lib/canvas.mjs +4 -2
  3. package/esm2020/lib/directives/cursor.mjs +35 -0
  4. package/esm2020/lib/directives/repeat.mjs +20 -0
  5. package/esm2020/lib/instance.mjs +11 -1
  6. package/esm2020/lib/pipes/math.mjs +15 -0
  7. package/esm2020/lib/pipes/pi.mjs +14 -0
  8. package/esm2020/lib/pipes/radian.mjs +14 -0
  9. package/esm2020/lib/pipes/side.mjs +22 -0
  10. package/esm2020/lights/lib/ambient-light/ambient-light.mjs +2 -12
  11. package/esm2020/lights/lib/ambient-light-probe/ambient-light-probe.mjs +2 -12
  12. package/esm2020/lights/lib/directional-light/directional-light.mjs +2 -12
  13. package/esm2020/lights/lib/hemisphere-light/hemisphere-light.mjs +2 -12
  14. package/esm2020/lights/lib/hemisphere-light-probe/hemisphere-light-probe.mjs +2 -12
  15. package/esm2020/lights/lib/light-probe/light-probe.mjs +2 -12
  16. package/esm2020/lights/lib/point-light/point-light.mjs +2 -12
  17. package/esm2020/lights/lib/rect-area-light/rect-area-light.mjs +2 -12
  18. package/esm2020/lights/lib/spot-light/spot-light.mjs +2 -12
  19. package/esm2020/objects/lib/lod/lod.mjs +2 -3
  20. package/esm2020/objects/lib/skeleton/skeleton.mjs +3 -12
  21. package/fesm2015/angular-three-audios.mjs +1 -0
  22. package/fesm2015/angular-three-lights.mjs +9 -100
  23. package/fesm2015/angular-three-lights.mjs.map +1 -1
  24. package/fesm2015/angular-three-objects.mjs +3 -14
  25. package/fesm2015/angular-three-objects.mjs.map +1 -1
  26. package/fesm2015/angular-three.mjs +126 -5
  27. package/fesm2015/angular-three.mjs.map +1 -1
  28. package/fesm2020/angular-three-audios.mjs +1 -0
  29. package/fesm2020/angular-three-lights.mjs +9 -100
  30. package/fesm2020/angular-three-lights.mjs.map +1 -1
  31. package/fesm2020/angular-three-objects.mjs +3 -14
  32. package/fesm2020/angular-three-objects.mjs.map +1 -1
  33. package/fesm2020/angular-three.mjs +123 -5
  34. package/fesm2020/angular-three.mjs.map +1 -1
  35. package/index.d.ts +27 -0
  36. package/lib/canvas.d.ts +2 -2
  37. package/lib/directives/cursor.d.ts +7 -0
  38. package/lib/directives/repeat.d.ts +7 -0
  39. package/lib/pipes/math.d.ts +7 -0
  40. package/lib/pipes/pi.d.ts +7 -0
  41. package/lib/pipes/radian.d.ts +7 -0
  42. package/lib/pipes/side.d.ts +8 -0
  43. package/lights/lib/ambient-light/ambient-light.d.ts +1 -11
  44. package/lights/lib/ambient-light-probe/ambient-light-probe.d.ts +1 -11
  45. package/lights/lib/directional-light/directional-light.d.ts +1 -11
  46. package/lights/lib/hemisphere-light/hemisphere-light.d.ts +1 -11
  47. package/lights/lib/hemisphere-light-probe/hemisphere-light-probe.d.ts +1 -11
  48. package/lights/lib/light-probe/light-probe.d.ts +1 -11
  49. package/lights/lib/point-light/point-light.d.ts +1 -11
  50. package/lights/lib/rect-area-light/rect-area-light.d.ts +1 -11
  51. package/lights/lib/spot-light/spot-light.d.ts +1 -11
  52. package/objects/lib/lod/lod.d.ts +1 -2
  53. package/objects/lib/skeleton/skeleton.d.ts +1 -2
  54. package/package.json +1 -1
package/esm2020/index.mjs CHANGED
@@ -1,12 +1,39 @@
1
+ /**
2
+ * main exports
3
+ */
1
4
  export * from './lib/canvas';
2
5
  export * from './lib/types';
3
6
  export * from './lib/instance';
7
+ /**
8
+ * services
9
+ */
4
10
  export * from './lib/services/loader';
5
11
  export * from './lib/services/resize';
12
+ /**
13
+ * stores
14
+ */
6
15
  export * from './lib/stores/store';
7
16
  export * from './lib/stores/component-store';
17
+ /**
18
+ * directives
19
+ */
8
20
  export * from './lib/directives/args';
21
+ export * from './lib/directives/cursor';
22
+ export * from './lib/directives/repeat';
23
+ /**
24
+ * pipes
25
+ */
26
+ export * from './lib/pipes/pi';
27
+ export * from './lib/pipes/math';
28
+ export * from './lib/pipes/radian';
29
+ export * from './lib/pipes/side';
30
+ /**
31
+ * utilities
32
+ */
9
33
  export * from './lib/utils/proxy';
10
34
  export * from './lib/utils/loop';
35
+ /**
36
+ * resize
37
+ */
11
38
  export * from './lib/di/resize';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXRocmVlL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGdCQUFnQixDQUFDO0FBRS9CLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsOEJBQThCLENBQUM7QUFFN0MsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsa0JBQWtCLENBQUM7QUFFakMsY0FBYyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2NhbnZhcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnN0YW5jZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2xvYWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9yZXNpemUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdG9yZXMvc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RvcmVzL2NvbXBvbmVudC1zdG9yZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvYXJncyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3Byb3h5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2xvb3AnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaS9yZXNpemUnO1xuIl19
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXRocmVlL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0I7O0dBRUc7QUFDSCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEM7O0dBRUc7QUFDSCxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsOEJBQThCLENBQUM7QUFDN0M7O0dBRUc7QUFDSCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4Qzs7R0FFRztBQUNILGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakM7O0dBRUc7QUFDSCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsa0JBQWtCLENBQUM7QUFDakM7O0dBRUc7QUFDSCxjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBtYWluIGV4cG9ydHNcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2FudmFzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2luc3RhbmNlJztcbi8qKlxuICogc2VydmljZXNcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvbG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Jlc2l6ZSc7XG4vKipcbiAqIHN0b3Jlc1xuICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdG9yZXMvc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RvcmVzL2NvbXBvbmVudC1zdG9yZSc7XG4vKipcbiAqIGRpcmVjdGl2ZXNcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9hcmdzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvY3Vyc29yJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcmVwZWF0Jztcbi8qKlxuICogcGlwZXNcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvcGknO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvbWF0aCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy9yYWRpYW4nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvc2lkZSc7XG4vKipcbiAqIHV0aWxpdGllc1xuICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9wcm94eSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9sb29wJztcbi8qKlxuICogcmVzaXplXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpL3Jlc2l6ZSc7XG4iXX0=
@@ -138,7 +138,9 @@ export class NgtCanvas extends NgtComponentStore {
138
138
  }
139
139
  if (this.created.observed) {
140
140
  this.zone.run(() => {
141
- this.created.emit(this.store.read());
141
+ requestAnimationFrame(() => {
142
+ this.created.emit(this.store.read());
143
+ });
142
144
  });
143
145
  }
144
146
  });
@@ -224,4 +226,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
224
226
  type: ContentChild,
225
227
  args: [TemplateRef, { static: true }]
226
228
  }] } });
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci10aHJlZS9zcmMvbGliL2NhbnZhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBaUI5QyxNQUFNLE9BQU8sa0JBQWtCO0lBZi9CO1FBZ0JjLFdBQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFnQyxDQUFDO0tBQ3ZFOzsrR0FGWSxrQkFBa0I7bUdBQWxCLGtCQUFrQixrR0FYaEIsQ0FBQyxTQUFTLENBQUMsMEJBRFosMkJBQTJCOzJGQVk1QixrQkFBa0I7a0JBZjlCLFNBQVM7K0JBQ0ksc0JBQXNCLGNBQ3BCLElBQUksWUFDTiwyQkFBMkIsYUFDMUIsQ0FBQyxTQUFTLENBQUM7OEJBWVosTUFBTTtzQkFBZixNQUFNOztBQTZCWCxNQUFNLE9BQU8sU0FBVSxT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O3NCQUFkLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLE1BQU07c0JBQWxCLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJSSxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFHUCxRQUFRO3NCQURQLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJdkMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGNyZWF0ZVBvaW50ZXJFdmVudHMgfSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgeyBwcm92aWRlSW5zdGFuY2VSZWYgfSBmcm9tICcuL2luc3RhbmNlJztcbmltcG9ydCB7IE5ndFJlc2l6ZSwgTmd0UmVzaXplUmVzdWx0IH0gZnJvbSAnLi9zZXJ2aWNlcy9yZXNpemUnO1xuaW1wb3J0IHsgTmd0Q29tcG9uZW50U3RvcmUgfSBmcm9tICcuL3N0b3Jlcy9jb21wb25lbnQtc3RvcmUnO1xuaW1wb3J0IHsgTmd0U3RvcmUsIHJvb3RTdGF0ZU1hcCB9IGZyb20gJy4vc3RvcmVzL3N0b3JlJztcbmltcG9ydCB0eXBlIHsgTmd0Q2FudmFzSW5wdXRzLCBOZ3REb21FdmVudCwgTmd0RHByLCBOZ3RPYnNlcnZhYmxlSW5wdXQsIE5ndFZlY3RvcjMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IE5ndExvYWRlciB9IGZyb20gJy4vc2VydmljZXMvbG9hZGVyJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3QtY2FudmFzLWNvbnRhaW5lcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nLFxuICAgIHByb3ZpZGVyczogW05ndFJlc2l6ZV0sXG4gICAgc3R5bGVzOiBbXG4gICAgICAgIGBcbiAgICAgICAgICAgIDpob3N0IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIGAsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0Q2FudmFzQ29udGFpbmVyIHtcbiAgICBAT3V0cHV0KCkgcmVzaXplID0gaW5qZWN0KE5ndFJlc2l6ZSkgYXMgT2JzZXJ2YWJsZTxOZ3RSZXNpemVSZXN1bHQ+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndC1jYW52YXMnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1jYW52YXMtY29udGFpbmVyIChyZXNpemUpPVwib25SZXNpemUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGNhbnZhcyAjZ2xDYW52YXMgc3R5bGU9XCJkaXNwbGF5OiBibG9ja1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NvbmZpZ3VyZWRcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjYW52YXNDb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9jYW52YXM+XG4gICAgICAgIDwvbmd0LWNhbnZhcy1jb250YWluZXI+XG4gICAgYCxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAgICAgOmhvc3Qge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgYCxcbiAgICBdLFxuICAgIGltcG9ydHM6IFtOZ3RDYW52YXNDb250YWluZXIsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIEFzeW5jUGlwZV0sXG4gICAgcHJvdmlkZXJzOiBbTmd0U3RvcmUsIHByb3ZpZGVJbnN0YW5jZVJlZihOZ3RDYW52YXMsIChjYW52YXMpID0+IGNhbnZhcy5zY2VuZVJlZildLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RDYW52YXMgZXh0ZW5kcyBOZ3RDb21wb25lbnRTdG9yZTxOZ3RDYW52YXNJbnB1dHM+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3Mubmd0LWNhbnZhcycpIHJlYWRvbmx5IGhvc3RDbGFzcyA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnBvaW50ZXJFdmVudHMnKSBnZXQgcG9pbnRlckV2ZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZCgocykgPT4gcy5ldmVudFNvdXJjZSkgIT09IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50ID8gJ25vbmUnIDogJ2F1dG8nO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBsaW5lYXIobGluZWFyOiBOZ3RPYnNlcnZhYmxlSW5wdXQ8Ym9vbGVhbj4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IGxpbmVhciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbGVnYWN5KGxlZ2FjeTogTmd0T2JzZXJ2YWJsZUlucHV0PGJvb2xlYW4+KSB7XG4gICAgICAgIHRoaXMud3JpdGUoeyBsZWdhY3kgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGZsYXQoZmxhdDogTmd0T2JzZXJ2YWJsZUlucHV0PGJvb2xlYW4+KSB7XG4gICAgICAgIHRoaXMud3JpdGUoeyBmbGF0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBvcnRob2dyYXBoaWMob3J0aG9ncmFwaGljOiBOZ3RPYnNlcnZhYmxlSW5wdXQ8Ym9vbGVhbj4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IG9ydGhvZ3JhcGhpYyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZnJhbWVsb29wKGZyYW1lbG9vcDogTmd0T2JzZXJ2YWJsZUlucHV0PCdhbHdheXMnIHwgJ2RlbWFuZCcgfCAnbmV2ZXInPikge1xuICAgICAgICB0aGlzLndyaXRlKHsgZnJhbWVsb29wIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkcHIoZHByOiBOZ3RPYnNlcnZhYmxlSW5wdXQ8Tmd0RHByPikge1xuICAgICAgICB0aGlzLndyaXRlKHsgZHByIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCByYXljYXN0ZXIocmF5Y2FzdGVyOiBQYXJ0aWFsPFRIUkVFLlJheWNhc3Rlcj4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IHJheWNhc3RlciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2hhZG93cyhzaGFkb3dzOiBib29sZWFuIHwgUGFydGlhbDxUSFJFRS5XZWJHTFNoYWRvd01hcD4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7XG4gICAgICAgICAgICBzaGFkb3dzOiB0eXBlb2Ygc2hhZG93cyA9PT0gJ29iamVjdCcgPyAoc2hhZG93cyBhcyBQYXJ0aWFsPFRIUkVFLldlYkdMU2hhZG93TWFwPikgOiBzaGFkb3dzLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgY2FtZXJhKGNhbWVyYTogTmd0Q2FudmFzSW5wdXRzWydjYW1lcmEnXSkge1xuICAgICAgICB0aGlzLndyaXRlKHsgY2FtZXJhIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBnbChnbDogTmd0Q2FudmFzSW5wdXRzWydnbCddKSB7XG4gICAgICAgIHRoaXMud3JpdGUoeyBnbCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZXZlbnRTb3VyY2UoZXZlbnRTb3VyY2U6IE5ndENhbnZhc0lucHV0c1snZXZlbnRTb3VyY2UnXSkge1xuICAgICAgICB0aGlzLndyaXRlKHsgZXZlbnRTb3VyY2UgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGV2ZW50UHJlZml4KGV2ZW50UHJlZml4OiBOZ3RDYW52YXNJbnB1dHNbJ2V2ZW50UHJlZml4J10pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IGV2ZW50UHJlZml4IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBsb29rQXQobG9va0F0OiBOZ3RPYnNlcnZhYmxlSW5wdXQ8Tmd0VmVjdG9yMz4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IGxvb2tBdCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcGVyZm9ybWFuY2UocGVyZm9ybWFuY2U6IE5ndENhbnZhc0lucHV0c1sncGVyZm9ybWFuY2UnXSkge1xuICAgICAgICB0aGlzLndyaXRlKHsgcGVyZm9ybWFuY2UgfSk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIGNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGNhbnZhc1BvaW50ZXJNaXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAVmlld0NoaWxkKCdnbENhbnZhcycsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgZ2xDYW52YXMhOiBFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50PjtcblxuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgY2FudmFzQ29udGVudCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkZXIgPSBpbmplY3QoTmd0TG9hZGVyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KE5ndFN0b3JlLCB7IHNlbGY6IHRydWUgfSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvc3QgPSBpbmplY3QoRWxlbWVudFJlZikgYXMgRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBnZXQgc2NlbmVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLnJlYWQoKHMpID0+IHMuc2NlbmVSZWYpO1xuICAgIH1cblxuICAgIGdldCBpc0NvbmZpZ3VyZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmlzQ29uZmlndXJlZDtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCkge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMud3JpdGUoe1xuICAgICAgICAgICAgc2hhZG93czogZmFsc2UsXG4gICAgICAgICAgICBsaW5lYXI6IGZhbHNlLFxuICAgICAgICAgICAgZmxhdDogZmFsc2UsXG4gICAgICAgICAgICBsZWdhY3k6IGZhbHNlLFxuICAgICAgICAgICAgb3J0aG9ncmFwaGljOiBmYWxzZSxcbiAgICAgICAgICAgIGZyYW1lbG9vcDogJ2Fsd2F5cycsXG4gICAgICAgICAgICBkcHI6IFsxLCAyXSxcbiAgICAgICAgICAgIGV2ZW50czogY3JlYXRlUG9pbnRlckV2ZW50cyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZXZlbnRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50U291cmNlID0gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhbnZhc1BvaW50ZXJNaXNzZWQub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgcG9pbnRlck1pc3NlZCBldmVudFxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUud3JpdGUoe1xuICAgICAgICAgICAgICAgICAgICBvblBvaW50ZXJNaXNzZWQ6IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ28gYmFjayBpbnRvIGFuZ3VsYXIgem9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW52YXNQb2ludGVyTWlzc2VkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNldCByb290U3RhdGVNYXBcbiAgICAgICAgICAgIHJvb3RTdGF0ZU1hcC5zZXQodGhpcy5nbENhbnZhcy5uYXRpdmVFbGVtZW50LCB0aGlzLnN0b3JlLnJlYWQpO1xuXG4gICAgICAgICAgICAvLyBzZXR1cCBjYW52YXMgc3RhdGVcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuaW5pdCgpO1xuXG4gICAgICAgICAgICB0aGlzLnN0b3JlLm9uUmVhZHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdG9yZS5yZWFkKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRzID0gdGhpcy5yZWFkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBjYW52YXMgaXMgcmVhZHlcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLndyaXRlKChzKSA9PiAoeyBpbnRlcm5hbDogeyAuLi5zLmludGVybmFsLCBhY3RpdmU6IHRydWUgfSB9KSk7XG5cbiAgICAgICAgICAgICAgICAvLyBDb25uZWN0IHRvIGV2ZW50c291cmNlXG4gICAgICAgICAgICAgICAgc3RhdGUuZXZlbnRzLmNvbm5lY3Q/LihcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRzLmV2ZW50U291cmNlIGluc3RhbmNlb2YgRWxlbWVudFJlZiA/IGlucHV0cy5ldmVudFNvdXJjZS5uYXRpdmVFbGVtZW50IDogaW5wdXRzLmV2ZW50U291cmNlXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIC8vIFNldCB1cCBjb21wdXRlIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0cy5ldmVudFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRFdmVudHMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZTogKGV2ZW50LCBzdGF0ZUdldHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyU3RhdGUgPSBzdGF0ZUdldHRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHggPSBldmVudFsoaW5wdXRzLmV2ZW50UHJlZml4ICsgJ1gnKSBhcyBrZXlvZiBOZ3REb21FdmVudF0gYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBldmVudFsoaW5wdXRzLmV2ZW50UHJlZml4ICsgJ1knKSBhcyBrZXlvZiBOZ3REb21FdmVudF0gYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyU3RhdGUucG9pbnRlci5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4IC8gaW5uZXJTdGF0ZS5zaXplLndpZHRoKSAqIDIgLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKHkgLyBpbm5lclN0YXRlLnNpemUuaGVpZ2h0KSAqIDIgKyAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lclN0YXRlLnJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKGlubmVyU3RhdGUucG9pbnRlciwgaW5uZXJTdGF0ZS5jYW1lcmEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3JlYXRlZC5vYnNlcnZlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlZC5lbWl0KHRoaXMuc3RvcmUucmVhZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uUmVzaXplKHJlc2l6ZVJlc3VsdDogTmd0UmVzaXplUmVzdWx0KSB7XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHJlc2l6ZVJlc3VsdDtcbiAgICAgICAgICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdG9yZS5pc0luaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5pbml0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuY29uZmlndXJlKHRoaXMucmVhZCgpLCB0aGlzLmdsQ2FudmFzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5sb2FkZXIuZGVzdHJveSgpO1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiJdfQ==
229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci10aHJlZS9zcmMvbGliL2NhbnZhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBaUI5QyxNQUFNLE9BQU8sa0JBQWtCO0lBZi9CO1FBZ0JjLFdBQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFnQyxDQUFDO0tBQ3ZFOzsrR0FGWSxrQkFBa0I7bUdBQWxCLGtCQUFrQixrR0FYaEIsQ0FBQyxTQUFTLENBQUMsMEJBRFosMkJBQTJCOzJGQVk1QixrQkFBa0I7a0JBZjlCLFNBQVM7K0JBQ0ksc0JBQXNCLGNBQ3BCLElBQUksWUFDTiwyQkFBMkIsYUFDMUIsQ0FBQyxTQUFTLENBQUM7OEJBWVosTUFBTTtzQkFBZixNQUFNOztBQTZCWCxNQUFNLE9BQU8sU0FBVSxT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T0FBTztzQkFBbkIsS0FBSztnQkFNTyxNQUFNO3NCQUFsQixLQUFLO2dCQUlPLEVBQUU7c0JBQWQsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUdQLFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUl2QyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgY3JlYXRlUG9pbnRlckV2ZW50cyB9IGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCB7IHByb3ZpZGVJbnN0YW5jZVJlZiB9IGZyb20gJy4vaW5zdGFuY2UnO1xuaW1wb3J0IHsgTmd0UmVzaXplLCBOZ3RSZXNpemVSZXN1bHQgfSBmcm9tICcuL3NlcnZpY2VzL3Jlc2l6ZSc7XG5pbXBvcnQgeyBOZ3RDb21wb25lbnRTdG9yZSB9IGZyb20gJy4vc3RvcmVzL2NvbXBvbmVudC1zdG9yZSc7XG5pbXBvcnQgeyBOZ3RTdG9yZSwgcm9vdFN0YXRlTWFwIH0gZnJvbSAnLi9zdG9yZXMvc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RDYW52YXNJbnB1dHMsIE5ndERvbUV2ZW50LCBOZ3REcHIsIE5ndE9ic2VydmFibGVJbnB1dCwgTmd0U3RhdGUsIE5ndFZlY3RvcjMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IE5ndExvYWRlciB9IGZyb20gJy4vc2VydmljZXMvbG9hZGVyJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3QtY2FudmFzLWNvbnRhaW5lcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nLFxuICAgIHByb3ZpZGVyczogW05ndFJlc2l6ZV0sXG4gICAgc3R5bGVzOiBbXG4gICAgICAgIGBcbiAgICAgICAgICAgIDpob3N0IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIGAsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0Q2FudmFzQ29udGFpbmVyIHtcbiAgICBAT3V0cHV0KCkgcmVzaXplID0gaW5qZWN0KE5ndFJlc2l6ZSkgYXMgT2JzZXJ2YWJsZTxOZ3RSZXNpemVSZXN1bHQ+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndC1jYW52YXMnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1jYW52YXMtY29udGFpbmVyIChyZXNpemUpPVwib25SZXNpemUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGNhbnZhcyAjZ2xDYW52YXMgc3R5bGU9XCJkaXNwbGF5OiBibG9ja1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NvbmZpZ3VyZWRcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjYW52YXNDb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9jYW52YXM+XG4gICAgICAgIDwvbmd0LWNhbnZhcy1jb250YWluZXI+XG4gICAgYCxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAgICAgOmhvc3Qge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgYCxcbiAgICBdLFxuICAgIGltcG9ydHM6IFtOZ3RDYW52YXNDb250YWluZXIsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIEFzeW5jUGlwZV0sXG4gICAgcHJvdmlkZXJzOiBbTmd0U3RvcmUsIHByb3ZpZGVJbnN0YW5jZVJlZihOZ3RDYW52YXMsIChjYW52YXMpID0+IGNhbnZhcy5zY2VuZVJlZildLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RDYW52YXMgZXh0ZW5kcyBOZ3RDb21wb25lbnRTdG9yZTxOZ3RDYW52YXNJbnB1dHM+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3Mubmd0LWNhbnZhcycpIHJlYWRvbmx5IGhvc3RDbGFzcyA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnBvaW50ZXJFdmVudHMnKSBnZXQgcG9pbnRlckV2ZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZCgocykgPT4gcy5ldmVudFNvdXJjZSkgIT09IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50ID8gJ25vbmUnIDogJ2F1dG8nO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBsaW5lYXIobGluZWFyOiBOZ3RPYnNlcnZhYmxlSW5wdXQ8Ym9vbGVhbj4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IGxpbmVhciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbGVnYWN5KGxlZ2FjeTogTmd0T2JzZXJ2YWJsZUlucHV0PGJvb2xlYW4+KSB7XG4gICAgICAgIHRoaXMud3JpdGUoeyBsZWdhY3kgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGZsYXQoZmxhdDogTmd0T2JzZXJ2YWJsZUlucHV0PGJvb2xlYW4+KSB7XG4gICAgICAgIHRoaXMud3JpdGUoeyBmbGF0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBvcnRob2dyYXBoaWMob3J0aG9ncmFwaGljOiBOZ3RPYnNlcnZhYmxlSW5wdXQ8Ym9vbGVhbj4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IG9ydGhvZ3JhcGhpYyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZnJhbWVsb29wKGZyYW1lbG9vcDogTmd0T2JzZXJ2YWJsZUlucHV0PCdhbHdheXMnIHwgJ2RlbWFuZCcgfCAnbmV2ZXInPikge1xuICAgICAgICB0aGlzLndyaXRlKHsgZnJhbWVsb29wIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkcHIoZHByOiBOZ3RPYnNlcnZhYmxlSW5wdXQ8Tmd0RHByPikge1xuICAgICAgICB0aGlzLndyaXRlKHsgZHByIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCByYXljYXN0ZXIocmF5Y2FzdGVyOiBQYXJ0aWFsPFRIUkVFLlJheWNhc3Rlcj4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IHJheWNhc3RlciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2hhZG93cyhzaGFkb3dzOiBib29sZWFuIHwgUGFydGlhbDxUSFJFRS5XZWJHTFNoYWRvd01hcD4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7XG4gICAgICAgICAgICBzaGFkb3dzOiB0eXBlb2Ygc2hhZG93cyA9PT0gJ29iamVjdCcgPyAoc2hhZG93cyBhcyBQYXJ0aWFsPFRIUkVFLldlYkdMU2hhZG93TWFwPikgOiBzaGFkb3dzLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgY2FtZXJhKGNhbWVyYTogTmd0Q2FudmFzSW5wdXRzWydjYW1lcmEnXSkge1xuICAgICAgICB0aGlzLndyaXRlKHsgY2FtZXJhIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBnbChnbDogTmd0Q2FudmFzSW5wdXRzWydnbCddKSB7XG4gICAgICAgIHRoaXMud3JpdGUoeyBnbCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZXZlbnRTb3VyY2UoZXZlbnRTb3VyY2U6IE5ndENhbnZhc0lucHV0c1snZXZlbnRTb3VyY2UnXSkge1xuICAgICAgICB0aGlzLndyaXRlKHsgZXZlbnRTb3VyY2UgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGV2ZW50UHJlZml4KGV2ZW50UHJlZml4OiBOZ3RDYW52YXNJbnB1dHNbJ2V2ZW50UHJlZml4J10pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IGV2ZW50UHJlZml4IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBsb29rQXQobG9va0F0OiBOZ3RPYnNlcnZhYmxlSW5wdXQ8Tmd0VmVjdG9yMz4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IGxvb2tBdCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcGVyZm9ybWFuY2UocGVyZm9ybWFuY2U6IE5ndENhbnZhc0lucHV0c1sncGVyZm9ybWFuY2UnXSkge1xuICAgICAgICB0aGlzLndyaXRlKHsgcGVyZm9ybWFuY2UgfSk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIGNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFN0YXRlPigpO1xuICAgIEBPdXRwdXQoKSBjYW52YXNQb2ludGVyTWlzc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQFZpZXdDaGlsZCgnZ2xDYW52YXMnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGdsQ2FudmFzITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XG5cbiAgICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGNhbnZhc0NvbnRlbnQhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9hZGVyID0gaW5qZWN0KE5ndExvYWRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSwgeyBzZWxmOiB0cnVlIH0pO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBob3N0ID0gaW5qZWN0KEVsZW1lbnRSZWYpIGFzIEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgZ2V0IHNjZW5lUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5yZWFkKChzKSA9PiBzLnNjZW5lUmVmKTtcbiAgICB9XG5cbiAgICBnZXQgaXNDb25maWd1cmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5pc0NvbmZpZ3VyZWQ7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLndyaXRlKHtcbiAgICAgICAgICAgIHNoYWRvd3M6IGZhbHNlLFxuICAgICAgICAgICAgbGluZWFyOiBmYWxzZSxcbiAgICAgICAgICAgIGZsYXQ6IGZhbHNlLFxuICAgICAgICAgICAgbGVnYWN5OiBmYWxzZSxcbiAgICAgICAgICAgIG9ydGhvZ3JhcGhpYzogZmFsc2UsXG4gICAgICAgICAgICBmcmFtZWxvb3A6ICdhbHdheXMnLFxuICAgICAgICAgICAgZHByOiBbMSwgMl0sXG4gICAgICAgICAgICBldmVudHM6IGNyZWF0ZVBvaW50ZXJFdmVudHMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmV2ZW50U291cmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudFNvdXJjZSA9IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jYW52YXNQb2ludGVyTWlzc2VkLm9ic2VydmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHBvaW50ZXJNaXNzZWQgZXZlbnRcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLndyaXRlKHtcbiAgICAgICAgICAgICAgICAgICAgb25Qb2ludGVyTWlzc2VkOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdvIGJhY2sgaW50byBhbmd1bGFyIHpvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzUG9pbnRlck1pc3NlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzZXQgcm9vdFN0YXRlTWFwXG4gICAgICAgICAgICByb290U3RhdGVNYXAuc2V0KHRoaXMuZ2xDYW52YXMubmF0aXZlRWxlbWVudCwgdGhpcy5zdG9yZS5yZWFkKTtcblxuICAgICAgICAgICAgLy8gc2V0dXAgY2FudmFzIHN0YXRlXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmluaXQoKTtcblxuICAgICAgICAgICAgdGhpcy5zdG9yZS5vblJlYWR5KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RvcmUucmVhZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0cyA9IHRoaXMucmVhZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2FudmFzIGlzIHJlYWR5XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS53cml0ZSgocykgPT4gKHsgaW50ZXJuYWw6IHsgLi4ucy5pbnRlcm5hbCwgYWN0aXZlOiB0cnVlIH0gfSkpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ29ubmVjdCB0byBldmVudHNvdXJjZVxuICAgICAgICAgICAgICAgIHN0YXRlLmV2ZW50cy5jb25uZWN0Py4oXG4gICAgICAgICAgICAgICAgICAgIGlucHV0cy5ldmVudFNvdXJjZSBpbnN0YW5jZW9mIEVsZW1lbnRSZWYgPyBpbnB1dHMuZXZlbnRTb3VyY2UubmF0aXZlRWxlbWVudCA6IGlucHV0cy5ldmVudFNvdXJjZVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAvLyBTZXQgdXAgY29tcHV0ZSBmdW5jdGlvblxuICAgICAgICAgICAgICAgIGlmIChpbnB1dHMuZXZlbnRQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0RXZlbnRzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGU6IChldmVudCwgc3RhdGVHZXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lclN0YXRlID0gc3RhdGVHZXR0ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4ID0gZXZlbnRbKGlucHV0cy5ldmVudFByZWZpeCArICdYJykgYXMga2V5b2YgTmd0RG9tRXZlbnRdIGFzIG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gZXZlbnRbKGlucHV0cy5ldmVudFByZWZpeCArICdZJykgYXMga2V5b2YgTmd0RG9tRXZlbnRdIGFzIG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lclN0YXRlLnBvaW50ZXIuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeCAvIGlubmVyU3RhdGUuc2l6ZS53aWR0aCkgKiAyIC0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSh5IC8gaW5uZXJTdGF0ZS5zaXplLmhlaWdodCkgKiAyICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJTdGF0ZS5yYXljYXN0ZXIuc2V0RnJvbUNhbWVyYShpbm5lclN0YXRlLnBvaW50ZXIsIGlubmVyU3RhdGUuY2FtZXJhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNyZWF0ZWQub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlZC5lbWl0KHRoaXMuc3RvcmUucmVhZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25SZXNpemUocmVzaXplUmVzdWx0OiBOZ3RSZXNpemVSZXN1bHQpIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gcmVzaXplUmVzdWx0O1xuICAgICAgICAgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN0b3JlLmlzSW5pdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmluaXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5jb25maWd1cmUodGhpcy5yZWFkKCksIHRoaXMuZ2xDYW52YXMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmxvYWRlci5kZXN0cm95KCk7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,35 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Directive, Inject, Optional, Self } from '@angular/core';
3
+ import { map, merge, takeUntil } from 'rxjs';
4
+ import { NgtInstance } from '../instance';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../instance";
7
+ export class NgtCursor {
8
+ constructor(instance, document) {
9
+ if (!instance)
10
+ return;
11
+ merge(instance.pointerover.pipe(map(() => true)), instance.pointerout.pipe(map(() => false)))
12
+ .pipe(takeUntil(instance.destroy$))
13
+ .subscribe((hovered) => {
14
+ document.body.style.cursor = hovered ? 'pointer' : 'auto';
15
+ });
16
+ }
17
+ }
18
+ NgtCursor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtCursor, deps: [{ token: i1.NgtInstance, optional: true, self: true }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
19
+ NgtCursor.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: NgtCursor, isStandalone: true, selector: "[ngtCursor]", exportAs: ["ngtCursor"], ngImport: i0 });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtCursor, decorators: [{
21
+ type: Directive,
22
+ args: [{
23
+ selector: '[ngtCursor]',
24
+ standalone: true,
25
+ exportAs: 'ngtCursor',
26
+ }]
27
+ }], ctorParameters: function () { return [{ type: i1.NgtInstance, decorators: [{
28
+ type: Optional
29
+ }, {
30
+ type: Self
31
+ }] }, { type: Document, decorators: [{
32
+ type: Inject,
33
+ args: [DOCUMENT]
34
+ }] }]; } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Vyc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci10aHJlZS9zcmMvbGliL2RpcmVjdGl2ZXMvY3Vyc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7QUFPMUMsTUFBTSxPQUFPLFNBQVM7SUFDbEIsWUFHSSxRQUFxQixFQUNILFFBQWtCO1FBRXBDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDeEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDbEMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkIsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOztzR0FiUSxTQUFTLHlFQUtOLFFBQVE7MEZBTFgsU0FBUzsyRkFBVCxTQUFTO2tCQUxyQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxhQUFhO29CQUN2QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLFdBQVc7aUJBQ3hCOzswQkFHUSxRQUFROzswQkFDUixJQUFJOzswQkFFSixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdCwgT3B0aW9uYWwsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcCwgbWVyZ2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmd0SW5zdGFuY2UgfSBmcm9tICcuLi9pbnN0YW5jZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW25ndEN1cnNvcl0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgZXhwb3J0QXM6ICduZ3RDdXJzb3InLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RDdXJzb3Ige1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBAU2VsZigpXG4gICAgICAgIGluc3RhbmNlOiBOZ3RJbnN0YW5jZSxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQ6IERvY3VtZW50XG4gICAgKSB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHJldHVybjtcbiAgICAgICAgbWVyZ2UoaW5zdGFuY2UucG9pbnRlcm92ZXIucGlwZShtYXAoKCkgPT4gdHJ1ZSkpLCBpbnN0YW5jZS5wb2ludGVyb3V0LnBpcGUobWFwKCgpID0+IGZhbHNlKSkpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwoaW5zdGFuY2UuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaG92ZXJlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gaG92ZXJlZCA/ICdwb2ludGVyJyA6ICdhdXRvJztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { NgForOf } from '@angular/common';
2
+ import { Directive, Input } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class NgtRepeat extends NgForOf {
5
+ set ngForRepeat(count) {
6
+ this.ngForOf = Number.isInteger(count) ? Array.from({ length: count }, (_, i) => i) : [];
7
+ }
8
+ }
9
+ NgtRepeat.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtRepeat, deps: null, target: i0.ɵɵFactoryTarget.Directive });
10
+ NgtRepeat.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: NgtRepeat, isStandalone: true, selector: "[ngFor][ngForRepeat]", inputs: { ngForRepeat: "ngForRepeat" }, usesInheritance: true, ngImport: i0 });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtRepeat, decorators: [{
12
+ type: Directive,
13
+ args: [{
14
+ selector: '[ngFor][ngForRepeat]',
15
+ standalone: true,
16
+ }]
17
+ }], propDecorators: { ngForRepeat: [{
18
+ type: Input
19
+ }] } });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci10aHJlZS9zcmMvbGliL2RpcmVjdGl2ZXMvcmVwZWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNakQsTUFBTSxPQUFPLFNBQVUsU0FBUSxPQUFlO0lBQzFDLElBQWEsV0FBVyxDQUFDLEtBQWE7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3RixDQUFDOztzR0FIUSxTQUFTOzBGQUFULFNBQVM7MkZBQVQsU0FBUztrQkFKckIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtpQkFDbkI7OEJBRWdCLFdBQVc7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0Zvck9mIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbmdGb3JdW25nRm9yUmVwZWF0XScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0UmVwZWF0IGV4dGVuZHMgTmdGb3JPZjxudW1iZXI+IHtcbiAgICBASW5wdXQoKSBzZXQgbmdGb3JSZXBlYXQoY291bnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLm5nRm9yT2YgPSBOdW1iZXIuaXNJbnRlZ2VyKGNvdW50KSA/IEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0sIChfLCBpKSA9PiBpKSA6IFtdO1xuICAgIH1cbn1cbiJdfQ==
@@ -72,6 +72,16 @@ export class NgtInstance extends NgtComponentStore {
72
72
  let attachToParentSubscription;
73
73
  if (this.parentRef) {
74
74
  attachToParentSubscription = this.attachToParent(this.parent.pipe(filter((parent) => !!parent)));
75
+ const { noAttach, skipWrapper } = this.read();
76
+ if (!noAttach && !skipWrapper) {
77
+ const parentInstanceNode = getInstanceLocalState(getInstanceLocalState(this.instanceValue)?.parentRef?.value);
78
+ if (parentInstanceNode) {
79
+ const collections = is.object3d(this.instanceValue)
80
+ ? parentInstanceNode.objectsRefs
81
+ : parentInstanceNode.instancesRefs;
82
+ collections.set((s) => [...s, this.instanceRef]);
83
+ }
84
+ }
75
85
  }
76
86
  let beforeRenderCleanUp;
77
87
  if (this.beforeRender && is.object3d(this.instanceValue) && is.object3d(this.proxyInstance)) {
@@ -355,4 +365,4 @@ export const NGT_INSTANCE_INPUTS = [
355
365
  'readyCallback',
356
366
  ];
357
367
  export const NGT_INSTANCE_OUTPUTS = [...supportedEvents];
358
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXRocmVlL3NyYy9saWIvaW5zdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFFZCxLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFnQixHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBWTFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFeEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUF5QixrQ0FBa0MsQ0FBQyxDQUFDO0FBQ3ZILE1BQU0sVUFBVSxrQkFBa0IsQ0FHaEMsSUFBVyxFQUFFLE9BQW1EO0lBQzlELE9BQU87UUFDSCxPQUFP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QUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU07O0FBK25CWCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUMvQixLQUFLO0lBQ0wsUUFBUTtJQUNSLGFBQWE7SUFDYixVQUFVO0lBQ1YsVUFBVTtJQUNWLGNBQWM7SUFDZCxVQUFVO0lBQ1YsZ0JBQWdCO0lBQ2hCLGVBQWU7Q0FDbEIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgSW5qZWN0T3B0aW9ucyxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBTdWJzY3JpcHRpb24sIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmd0UmVmIH0gZnJvbSAnLi9yZWYnO1xuaW1wb3J0IHsgTmd0Q29tcG9uZW50U3RvcmUsIHRhcEVmZmVjdCB9IGZyb20gJy4vc3RvcmVzL2NvbXBvbmVudC1zdG9yZSc7XG5pbXBvcnQgeyBOZ3RTdG9yZSB9IGZyb20gJy4vc3RvcmVzL3N0b3JlJztcbmltcG9ydCB0eXBlIHtcbiAgICBOZ3RBbnlDdG9yLFxuICAgIE5ndEFueUZ1bmN0aW9uLFxuICAgIE5ndEFueVJlY29yZCxcbiAgICBOZ3RBdHRhY2hGdW5jdGlvbixcbiAgICBOZ3RCZWZvcmVSZW5kZXJDYWxsYmFjayxcbiAgICBOZ3RFdmVudEhhbmRsZXJzLFxuICAgIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSxcbiAgICBOZ3RPYnNlcnZhYmxlSW5wdXQsXG4gICAgTmd0VGhyZWVFdmVudCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBhcHBseVByb3BzIH0gZnJvbSAnLi91dGlscy9hcHBseS1wcm9wcyc7XG5pbXBvcnQgeyByZW1vdmVJbnRlcmFjdGl2aXR5IH0gZnJvbSAnLi91dGlscy9ldmVudHMnO1xuaW1wb3J0IHsgZ2V0SW5zdGFuY2VMb2NhbFN0YXRlIH0gZnJvbSAnLi91dGlscy9nZXQtaW5zdGFuY2UtbG9jYWwtc3RhdGUnO1xuaW1wb3J0IHsgaW52YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSAnLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgbXV0YXRlIH0gZnJvbSAnLi91dGlscy9tdXRhdGUnO1xuXG5leHBvcnQgY29uc3QgTkdUX1BST1hZX0lOU1RBTkNFID0gU3ltYm9sLmZvcignX19uZ3RfX3Byb3h5X19pbnN0YW5jZV9fJyk7XG5cbmV4cG9ydCBjb25zdCBOR1RfSU5TVEFOQ0VfUkVGX0ZBQ1RPUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48Tmd0QW55RnVuY3Rpb248Tmd0UmVmPj4oJ05ndEluc3RhbmNlW2luc3RhbmNlUmVmXSBmYWN0b3J5Jyk7XG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUluc3RhbmNlUmVmPFxuICAgIFRJbnN0YW5jZVR5cGUgZXh0ZW5kcyBvYmplY3QgPSBhbnksXG4gICAgVEN0b3IgZXh0ZW5kcyBOZ3RBbnlDdG9yPFRJbnN0YW5jZVR5cGU+ID0gTmd0QW55Q3RvcjxUSW5zdGFuY2VUeXBlPlxuPihjdG9yOiBUQ3RvciwgZmFjdG9yeT86IChpbnN0YW5jZTogSW5zdGFuY2VUeXBlPFRDdG9yPikgPT4gTmd0UmVmKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJvdmlkZTogTkdUX0lOU1RBTkNFX1JFRl9GQUNUT1JZLFxuICAgICAgICB1c2VGYWN0b3J5OiAoaW5zdGFuY2U6IEluc3RhbmNlVHlwZTxUQ3Rvcj4pID0+IHtcbiAgICAgICAgICAgIGlmIChmYWN0b3J5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IGZhY3RvcnkoaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT5cbiAgICAgICAgICAgICAgICAoaW5zdGFuY2UgYXMgTmd0QW55UmVjb3JkKVsnaW5zdGFuY2VSZWYnXSB8fCAoaW5zdGFuY2UgYXMgTmd0QW55UmVjb3JkKVsnaW5zdGFuY2UnXVsnaW5zdGFuY2VSZWYnXTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVwczogW2N0b3JdLFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0SW5zdGFuY2VSZWYoKTogTmd0QW55RnVuY3Rpb248Tmd0UmVmPjtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZVJlZihvcHRpb25zOiBJbmplY3RPcHRpb25zICYgeyBvcHRpb25hbD86IGZhbHNlIH0pOiBOZ3RBbnlGdW5jdGlvbjxOZ3RSZWY+O1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEluc3RhbmNlUmVmKG9wdGlvbnM6IEluamVjdE9wdGlvbnMgJiB7IG9wdGlvbmFsPzogdHJ1ZSB9KTogTmd0QW55RnVuY3Rpb248Tmd0UmVmPiB8IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0SW5zdGFuY2VSZWYob3B0aW9uczogSW5qZWN0T3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIGluamVjdChOR1RfSU5TVEFOQ0VfUkVGX0ZBQ1RPUlksIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEluc3RhbmNlU3RhdGU8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0ID0gTmd0QW55UmVjb3JkPiB7XG4gICAgaW5zdGFuY2VSZWY6IE5ndFJlZjxUSW5zdGFuY2U+O1xuICAgIGluc3RhbmNlQXJnczogdW5rbm93bltdO1xuICAgIGF0dGFjaDogc3RyaW5nW10gfCBOZ3RBdHRhY2hGdW5jdGlvbjtcbiAgICBub0F0dGFjaDogYm9vbGVhbjtcbiAgICBza2lwV3JhcHBlcjogYm9vbGVhbjtcbiAgICBza2lwSW5pdDogYm9vbGVhbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PigpOiBOZ3RJbnN0YW5jZTxUPjtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihvcHRpb25zOiBJbmplY3RPcHRpb25zICYgeyBvcHRpb25hbD86IGZhbHNlIH0pOiBOZ3RJbnN0YW5jZTxUPjtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihvcHRpb25zOiBJbmplY3RPcHRpb25zICYgeyBvcHRpb25hbD86IHRydWUgfSk6IE5ndEluc3RhbmNlPFQ+IHwgbnVsbDtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZShvcHRpb25zOiBJbmplY3RPcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gaW5qZWN0KE5ndEluc3RhbmNlLCBvcHRpb25zKTtcbn1cblxuY29uc3Qgc3VwcG9ydGVkRXZlbnRzID0gW1xuICAgICdjbGljaycsXG4gICAgJ2NvbnRleHRtZW51JyxcbiAgICAnZGJsY2xpY2snLFxuICAgICdwb2ludGVydXAnLFxuICAgICdwb2ludGVyZG93bicsXG4gICAgJ3BvaW50ZXJvdmVyJyxcbiAgICAncG9pbnRlcm91dCcsXG4gICAgJ3BvaW50ZXJlbnRlcicsXG4gICAgJ3BvaW50ZXJsZWF2ZScsXG4gICAgJ3BvaW50ZXJtb3ZlJyxcbiAgICAncG9pbnRlcm1pc3NlZCcsXG4gICAgJ3BvaW50ZXJjYW5jZWwnLFxuICAgICd3aGVlbCcsXG5dIGFzIGNvbnN0O1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tuZ3RJbnN0YW5jZV0nLFxuICAgIGV4cG9ydEFzOiAnbmd0SW5zdGFuY2UnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE5ndEluc3RhbmNlPFxuICAgICAgICBUSW5zdGFuY2UgZXh0ZW5kcyBvYmplY3QgPSBhbnksXG4gICAgICAgIFRJbnN0YW5jZVN0YXRlIGV4dGVuZHMgTmd0SW5zdGFuY2VTdGF0ZTxUSW5zdGFuY2U+ID0gTmd0SW5zdGFuY2VTdGF0ZTxUSW5zdGFuY2U+XG4gICAgPlxuICAgIGV4dGVuZHMgTmd0Q29tcG9uZW50U3RvcmU8VEluc3RhbmNlU3RhdGU+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAgIEBJbnB1dCgpIHNldCByZWYoaW5zdGFuY2U6IFRJbnN0YW5jZSB8IE5ndFJlZjxUSW5zdGFuY2U+KSB7XG4gICAgICAgIHRoaXMud3JpdGUoeyBpbnN0YW5jZVJlZjogaXMucmVmKGluc3RhbmNlKSA/IGluc3RhbmNlIDogbmV3IE5ndFJlZihpbnN0YW5jZSkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNraXBXcmFwcGVyKHNraXBXcmFwcGVyOiBOZ3RPYnNlcnZhYmxlSW5wdXQ8Ym9vbGVhbj4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IHNraXBXcmFwcGVyIH0pO1xuICAgICAgICB0aGlzLndyaXRlKHsgc2tpcFdyYXBwZXJFeHBsaWNpdDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2tpcEluaXQoc2tpcEluaXQ6IE5ndE9ic2VydmFibGVJbnB1dDxib29sZWFuPikge1xuICAgICAgICB0aGlzLndyaXRlKHsgc2tpcEluaXQgfSk7XG4gICAgICAgIHRoaXMud3JpdGUoeyBza2lwSW5pdEV4cGxpY2l0OiB0cnVlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBub0F0dGFjaChub0F0dGFjaDogTmd0T2JzZXJ2YWJsZUlucHV0PGJvb2xlYW4+KSB7XG4gICAgICAgIHRoaXMud3JpdGUoeyBub0F0dGFjaCB9KTtcbiAgICAgICAgdGhpcy53cml0ZSh7IG5vQXR0YWNoRXhwbGljaXQ6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGF0dGFjaCh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBbc3RyaW5nLCAuLi4oc3RyaW5nIHwgbnVtYmVyKVtdXSB8IE5ndEF0dGFjaEZ1bmN0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgYXR0YWNoID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWUubWFwKChpdGVtKSA9PiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInID8gaXRlbS50b1N0cmluZygpIDogaXRlbSkpXG4gICAgICAgICAgICAgICAgICAgIDogW3ZhbHVlXTtcblxuICAgICAgICAgICAgdGhpcy53cml0ZSh7IGF0dGFjaCwgYXR0YWNoRXhwbGljaXQ6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBwcmlvcml0eSA9IDA7XG4gICAgQElucHV0KCkgYmVmb3JlUmVuZGVyPzogTmd0QmVmb3JlUmVuZGVyQ2FsbGJhY2s8VEluc3RhbmNlPjtcblxuICAgIEBJbnB1dCgpIHJlYWR5Q2FsbGJhY2s/OiAoKGluc3RhbmNlOiBUSW5zdGFuY2UpID0+IHZvaWQpIHwgKCgpID0+IHZvaWQpO1xuICAgIEBJbnB1dCgpIHVwZGF0ZUNhbGxiYWNrPzogKChpbnN0YW5jZTogVEluc3RhbmNlKSA9PiB2b2lkKSB8ICgoKSA9PiB2b2lkKTtcblxuICAgIEBPdXRwdXQoKSBjbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxNb3VzZUV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgY29udGV4dG1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4+KCk7XG4gICAgQE91dHB1dCgpIGRibGNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVydXAgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcmRvd24gPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcm92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcm91dCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVyZW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcmxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJtaXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcmNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSB3aGVlbCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxXaGVlbEV2ZW50Pj4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRSZWYgPSBpbmplY3RJbnN0YW5jZVJlZih7IHNraXBTZWxmOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgICBwcml2YXRlIF9pc1JhdyA9IGZhbHNlO1xuXG4gICAgc2V0IGlzUmF3KHZhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9pc1JhdyA9IHZhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0VtaXR0ZWRBbHJlYWR5ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGluc3RhbmNlUmVhZHkgPSB0aGlzLmVmZmVjdChcbiAgICAgICAgdGFwRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXZlbnRzKCk7XG5cbiAgICAgICAgICAgIGxldCBhdHRhY2hUb1BhcmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50UmVmKSB7XG4gICAgICAgICAgICAgICAgYXR0YWNoVG9QYXJlbnRTdWJzY3JpcHRpb24gPSB0aGlzLmF0dGFjaFRvUGFyZW50KHRoaXMucGFyZW50IS5waXBlKGZpbHRlcigocGFyZW50KSA9PiAhIXBhcmVudCkpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGJlZm9yZVJlbmRlckNsZWFuVXA6ICgpID0+IHZvaWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5iZWZvcmVSZW5kZXIgJiYgaXMub2JqZWN0M2QodGhpcy5pbnN0YW5jZVZhbHVlKSAmJiBpcy5vYmplY3QzZCh0aGlzLnByb3h5SW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgYmVmb3JlUmVuZGVyQ2xlYW5VcCA9IHRoaXMuc3RvcmVcbiAgICAgICAgICAgICAgICAgICAgLnJlYWQoKHMpID0+IHMuaW50ZXJuYWwpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUsIG9iamVjdCkgPT4gdGhpcy5iZWZvcmVSZW5kZXIhKHN0YXRlLCBvYmplY3QpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucmVhZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJveHlJbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeUNhbGxiYWNrKSB0aGlzLnJlYWR5Q2FsbGJhY2sodGhpcy5pbnN0YW5jZVZhbHVlKTtcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBiZWZvcmVSZW5kZXJDbGVhblVwPy4oKTtcbiAgICAgICAgICAgICAgICBhdHRhY2hUb1BhcmVudFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHByaXZhdGUgaGFuZGxlRXZlbnRzID0gdGhpcy5lZmZlY3Q8dm9pZD4oXG4gICAgICAgIHRhcEVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZVZhbHVlICYmIGlzLm9iamVjdDNkKHRoaXMuaW5zdGFuY2VWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlZEV2ZW50cyA9IHN1cHBvcnRlZEV2ZW50cy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQsIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sbGVyRXZlbnQgPSB0aGlzW2V2ZW50XS5vYnNlcnZlZCA/IHRoaXNbZXZlbnRdIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaGFuZGxlcnNbZXZlbnRdID0gdGhpcy5ldmVudE5hbWVUb0hhbmRsZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJFdmVudCBhcyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxhbnk+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmV2ZW50Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaGFuZGxlcnM6IHt9LCBldmVudENvdW50OiAwIH0gYXMge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnM6IE5ndEV2ZW50SGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudENvdW50OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggX19uZ3RfXyB3aXRoIGV2ZW50c1xuICAgICAgICAgICAgICAgIGFwcGx5UHJvcHModGhpcy5fX25ndF9fLCBvYnNlcnZlZEV2ZW50cyk7XG5cbiAgICAgICAgICAgICAgICAvLyBhZGQgYXMgYW4gaW50ZXJhY3Rpb24gaWYgdGhlcmUgYXJlIGV2ZW50cyBvYnNlcnZlZFxuICAgICAgICAgICAgICAgIGlmIChvYnNlcnZlZEV2ZW50cy5ldmVudENvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRJbnN0YW5jZUxvY2FsU3RhdGUodGhpcy5pbnN0YW5jZVZhbHVlKT8ucm9vdEZhY3RvcnkoKS5hZGRJbnRlcmFjdGlvbih0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzLm9iamVjdDNkKHRoaXMuaW5zdGFuY2VWYWx1ZSkgJiYgdGhpcy5fX25ndF9fLmV2ZW50Q291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldEluc3RhbmNlTG9jYWxTdGF0ZSh0aGlzLmluc3RhbmNlVmFsdWUpPy5yb290RmFjdG9yeSgpLnJlbW92ZUludGVyYWN0aW9uKHRoaXMuaW5zdGFuY2VWYWx1ZS51dWlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGF0dGFjaFRvUGFyZW50ID0gdGhpcy5lZmZlY3QoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhdHRhY2ggPSB0aGlzLnJlYWQoKHMpID0+IHMuYXR0YWNoKTtcblxuICAgICAgICAgICAgbGV0IHBhcmVudEluc3RhbmNlUmVmID0gdGhpcy5fX25ndF9fPy5wYXJlbnRSZWY7XG5cbiAgICAgICAgICAgIC8vIGlmIG5vIHBhcmVudEluc3RhbmNlLCB0cnkgcmUtcnVuIHRoZSBmYWN0b3J5IGR1ZSB0byBsYXRlIGluaXRcbiAgICAgICAgICAgIGlmICghcGFyZW50SW5zdGFuY2VSZWYgfHwgIXBhcmVudEluc3RhbmNlUmVmLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGVhcmx5IGlmIGZhaWxlZCB0byByZXRyaWV2ZVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYXJlbnQ/LnZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAvLyByZWFzc2lnbiBvbiBpbnN0YW5jZSBpbnRlcm5hbCBzdGF0ZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLnBhcmVudFJlZiA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJlbnRJbnN0YW5jZVJlZiA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGF0dGFjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaENsZWFuVXAgPSBhdHRhY2gocGFyZW50SW5zdGFuY2VSZWYsIHRoaXMuaW5zdGFuY2VSZWYsIHRoaXMuc3RvcmUucmVhZCk7XG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaENsZWFuVXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaCA9IGF0dGFjaENsZWFuVXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVRvQXR0YWNoID0gWy4uLmF0dGFjaF07XG5cbiAgICAgICAgICAgICAgICAvLyBpZiBwcm9wZXJ0eVRvQXR0YWNoIGlzIGVtcHR5XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5VG9BdHRhY2gubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWlnaHQgYmUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGF0dGFjaGluZyBhbiBvYmplY3QzRCB0byB0aGUgcGFyZW50IG9iamVjdDNEXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm9iamVjdDNkKHRoaXMuaW5zdGFuY2VWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm9iamVjdDNkKHRoaXMucHJveHlJbnN0YW5jZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm9iamVjdDNkKHRoaXMucGFyZW50Py52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudD8udmFsdWUuYWRkKHRoaXMucHJveHlJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSBtYXRlcmlhbCBoYW5kbGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRvQXR0YWNoWzBdID09PSAnbWF0ZXJpYWwnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRvQXR0YWNoWzFdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgTnVtYmVyKHByb3BlcnR5VG9BdHRhY2hbMV0pID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXMubWF0ZXJpYWwodGhpcy5pbnN0YW5jZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZS5tYXRlcmlhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZS5tYXRlcmlhbCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdmFsdWUgb24gdGhlIHBhcmVudEluc3RhbmNlLCBzbyB3ZSBjYW4gcmVzZXQgaXQgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaFZhbHVlID0gcHJvcGVydHlUb0F0dGFjaC5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLCBwcm9wZXJ0eSkgPT4gdmFsdWVbcHJvcGVydHldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEluc3RhbmNlUmVmLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gYXR0YWNoIHRoZSBpbnN0YW5jZSB2YWx1ZSBvbiB0aGUgcGFyZW50XG4gICAgICAgICAgICAgICAgICAgIG11dGF0ZShwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZSwgdGhpcy5wcm94eUluc3RhbmNlLCBwcm9wZXJ0eVRvQXR0YWNoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB2YWxpZGF0ZSBvbiB0aGUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UodGhpcy5pbnN0YW5jZVZhbHVlKTtcblxuICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRlIG9uIHRoZSBwYXJlbnRcbiAgICAgICAgICAgICAgICBpZiAoZ2V0SW5zdGFuY2VMb2NhbFN0YXRlKHBhcmVudEluc3RhbmNlUmVmLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50SW5zdGFuY2VSZWYudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHNhdmUgdGhlIGF0dGFjaFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaCA9IHByb3BlcnR5VG9BdHRhY2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMud3JpdGUoeyBhdHRhY2g6IHByb3BlcnR5VG9BdHRhY2ggfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy53cml0ZSh7XG4gICAgICAgICAgICBpbnN0YW5jZVJlZjogbmV3IE5ndFJlZihudWxsKSxcbiAgICAgICAgICAgIGF0dGFjaDogW10sXG4gICAgICAgICAgICBub0F0dGFjaDogZmFsc2UsXG4gICAgICAgICAgICBza2lwV3JhcHBlcjogZmFsc2UsXG4gICAgICAgICAgICBza2lwSW5pdDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5vblJlYWR5KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlUmVhZHkodGhpcy5pbnN0YW5jZVJlZi5waXBlKGZpbHRlcigoaW5zdGFuY2UpID0+ICEhaW5zdGFuY2UpKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGluc3RhbmNlUmVmKCk6IE5ndFJlZjxUSW5zdGFuY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZCgocykgPT4gcy5pbnN0YW5jZVJlZik7XG4gICAgfVxuXG4gICAgZ2V0IGluc3RhbmNlVmFsdWUoKTogVEluc3RhbmNlIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlUmVmLnZhbHVlKSByZXR1cm4gdGhpcy5pbnN0YW5jZVJlZi52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmF3ID8gKHRoaXMuaW5zdGFuY2VSZWYudmFsdWU/LnZhbHVlT2YoKSBhcyBUSW5zdGFuY2UpIDogdGhpcy5pbnN0YW5jZVJlZi52YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgcHJveHlJbnN0YW5jZSgpOiBUSW5zdGFuY2Uge1xuICAgICAgICByZXR1cm4gKHRoaXMuaW5zdGFuY2VWYWx1ZSBhcyBhbnkpPy5bTkdUX1BST1hZX0lOU1RBTkNFXTtcbiAgICB9XG5cbiAgICBnZXQgX19uZ3RfXygpOiBOZ3RJbnN0YW5jZUxvY2FsU3RhdGUge1xuICAgICAgICByZXR1cm4gZ2V0SW5zdGFuY2VMb2NhbFN0YXRlKFxuICAgICAgICAgICAgdGhpcy5faXNSYXcgPyB0aGlzLmluc3RhbmNlUmVmLnZhbHVlIDogdGhpcy5pbnN0YW5jZVZhbHVlXG4gICAgICAgICkgYXMgTmd0SW5zdGFuY2VMb2NhbFN0YXRlO1xuICAgIH1cblxuICAgIGdldCBwYXJlbnQoKTogTmd0UmVmIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50UmVmPy4oKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChpcy5vYmplY3QzZCh0aGlzLmluc3RhbmNlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2UgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50SW5zdGFuY2UgJiYgaXMub2JqZWN0M2QocGFyZW50SW5zdGFuY2UudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUludGVyYWN0aXZpdHkodGhpcy5fX25ndF9fLnN0YXRlRmFjdG9yeS5iaW5kKHRoaXMuX19uZ3RfXyksIHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEluc3RhbmNlLnZhbHVlLnJlbW92ZSh0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50SW5zdGFuY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlVmFsdWUuY2xlYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlVmFsdWUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm9uLXNjZW5lIG9iamVjdHNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBdHRhY2ggPSB0aGlzLl9fbmd0X18uYXR0YWNoO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNBdHRhY2ggIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcmV2aW91c0F0dGFjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQXR0YWNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQXR0YWNoVmFsdWUgPSB0aGlzLl9fbmd0X18uYXR0YWNoVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXy5wYXJlbnRSZWYgJiYgdGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUodGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSwgcHJldmlvdXNBdHRhY2hWYWx1ZSwgcHJldmlvdXNBdHRhY2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXy5wYXJlbnRSZWYgJiYgdGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGVJbnN0YW5jZSh0aGlzLl9fbmd0X18ucGFyZW50UmVmLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGlzcG9zZSA9ICh0aGlzLmluc3RhbmNlVmFsdWUgYXMgTmd0QW55UmVjb3JkKVsnZGlzcG9zZSddO1xuICAgICAgICAgICAgaWYgKGRpc3Bvc2UgJiYgdHlwZW9mIGRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkaXNwb3NlLmFwcGx5KHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndyaXRlKHsgYXR0YWNoOiBbXSB9KTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVJlZi5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXZlbnROYW1lVG9IYW5kbGVyKFxuICAgICAgICBjb250cm9sbGVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4+IHwgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8V2hlZWxFdmVudD4+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiAoZXZlbnQ6IFBhcmFtZXRlcnM8RXhjbHVkZTxOZ3RFdmVudEhhbmRsZXJzW3R5cGVvZiBzdXBwb3J0ZWRFdmVudHNbbnVtYmVyXV0sIHVuZGVmaW5lZD4+WzBdKSA9PiB7XG4gICAgICAgICAgICAvLyBnbyBiYWNrIGludG8gQW5ndWxhciBab25lIHNvIHRoYXQgc3RhdGUgdXBkYXRlcyBvbiB0aGVzZSBldmVudHMgdHJpZ2dlciBDRFxuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlckV2ZW50LmVtaXQoZXZlbnQgYXMgTmd0VGhyZWVFdmVudDxhbnk+KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIHByb3RlY3RlZCBnZXQgb3B0aW9uc0ZpZWxkcygpOiBzdHJpbmdbXSB7XG4gICAgLy8gICAgIHJldHVybiBbXTtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyAvKipcbiAgICAvLyAgKiBTdWJjbGFzc2VzIGNhbiBjdXN0b21pemUgdGhpcyB0byBydW4gc2V0T3B0aW9ucyBvbiBjdXN0b20gdHJpZ2dlclxuICAgIC8vICAqIEBwcm90ZWN0ZWRcbiAgICAvLyAgKi9cbiAgICAvLyBwcm90ZWN0ZWQgc2V0T3B0aW9uc1RyaWdnZXIkOiBPYnNlcnZhYmxlPHt9PiA9IG9mKHt9KTtcbiAgICAvL1xuICAgIC8vIHByaXZhdGUgcmVhZG9ubHkgaW5pdCA9IHRoaXMuZWZmZWN0KHRhcEVmZmVjdCgoKSA9PiB0aGlzLmluaXRGbih0aGlzLnByZXBhcmVJbnN0YW5jZS5iaW5kKHRoaXMpKSkpO1xuICAgIC8vXG4gICAgLy8gcHJvdGVjdGVkIGFic3RyYWN0IGluaXRGbihwcmVwYXJlSW5zdGFuY2U6IE5ndFByZXBhcmVJbnN0YW5jZUZuPFRJbnN0YW5jZT4pOiAoKCkgPT4gdm9pZCkgfCB2b2lkIHwgdW5kZWZpbmVkO1xuICAgIC8vXG4gICAgLy8gcHJvdGVjdGVkIGluaXRUcmlnZ2VyJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5pbnN0YW5jZUFyZ3MkO1xuICAgIC8vXG4gICAgLy8gcHJpdmF0ZSByZWFkb25seSBzZXRPcHRpb25zID0gdGhpcy5lZmZlY3Q8c3RyaW5nW10+KFxuICAgIC8vICAgICB0YXAoKG5ld09wdGlvbnNLZXlzKSA9PiB7XG4gICAgLy8gICAgICAgICAvLyBubyBvcHRpb25zOyByZXR1cm4gZWFybHlcbiAgICAvLyAgICAgICAgIGlmIChuZXdPcHRpb25zS2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAvL1xuICAgIC8vICAgICAgICAgY29uc3QgaW5zdGFuY2VTdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAvLyAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fSBhcyBOZ3RBbnlSZWNvcmQ7XG4gICAgLy9cbiAgICAvLyAgICAgICAgIC8vIGhhbmRsaW5nIHJvdGF0aW9uIGFuZCBxdWF0ZXJuaW9uXG4gICAgLy8gICAgICAgICBpZiAobmV3T3B0aW9uc0tleXMuaW5jbHVkZXMoJ3JvdGF0aW9uJykpIHtcbiAgICAvLyAgICAgICAgICAgICBvcHRpb25zWydyb3RhdGlvbiddID0gaW5zdGFuY2VTdGF0ZVsncm90YXRpb24nXTtcbiAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAobmV3T3B0aW9uc0tleXMuaW5jbHVkZXMoJ3F1YXRlcm5pb24nKSkge1xuICAgIC8vICAgICAgICAgICAgIG9wdGlvbnNbJ3F1YXRlcm5pb24nXSA9IGluc3RhbmNlU3RhdGVbJ3F1YXRlcm5pb24nXTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvL1xuICAgIC8vICAgICAgICAgY29uc3QgaXNNYXRlcmlhbCA9IGlzLm1hdGVyaWFsKHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgLy8gICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBuZXdPcHRpb25zS2V5cykge1xuICAgIC8vICAgICAgICAgICAgIC8vIHNraXAgcm90YXRpb24gYW5kIHF1YXRlcm5pb24gYmVjYXVzZSB3ZSBhbHJlYWR5IGhhbmRsZWQgdGhlbVxuICAgIC8vICAgICAgICAgICAgIGlmIChbJ3JvdGF0aW9uJywgJ3F1YXRlcm5pb24nXS5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAvLyAgICAgICAgICAgICBjb25zdCBzaG91bGRVc2VPcHRpb24gPSBpc01hdGVyaWFsID8gaW5zdGFuY2VTdGF0ZVtrZXldICE9PSB1bmRlZmluZWQgOiBpbnN0YW5jZVN0YXRlW2tleV0gIT09IG51bGw7XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICBpZiAoc2hvdWxkVXNlT3B0aW9uKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIG9wdGlvbnNba2V5XSA9IGluc3RhbmNlU3RhdGVba2V5XTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGlmIChpc01hdGVyaWFsKSB7XG4gICAgLy8gICAgICAgICAgICAgaWYgKCd1bmlmb3JtcycgaW4gdGhpcy5pbnN0YW5jZVZhbHVlICYmIG5ld09wdGlvbnNLZXlzLmluY2x1ZGVzKCd1bmlmb3JtcycpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIG9wdGlvbnNbJ3VuaWZvcm1zJ10gPSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAuLi4odGhpcy5pbnN0YW5jZVZhbHVlIGFzIHVua25vd24gYXMgVEhSRUUuU2hhZGVyTWF0ZXJpYWwpWyd1bmlmb3JtcyddLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgLi4uaW5zdGFuY2VTdGF0ZVsndW5pZm9ybXMnXSxcbiAgICAvLyAgICAgICAgICAgICAgICAgfTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGFwcGx5UHJvcHModGhpcy5pbnN0YW5jZVZhbHVlLCBvcHRpb25zKTtcbiAgICAvL1xuICAgIC8vICAgICAgICAgdGhpcy5wb3N0U2V0T3B0aW9ucyh0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgIC8vXG4gICAgLy8gICAgICAgICBjaGVja1VwZGF0ZSh0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgIC8vXG4gICAgLy8gICAgICAgICBpZiAodGhpcy51cGRhdGUub2JzZXJ2ZWQpIHtcbiAgICAvLyAgICAgICAgICAgICB0aGlzLnVwZGF0ZS5lbWl0KHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH0pXG4gICAgLy8gKTtcbiAgICAvL1xuICAgIC8vIHByaXZhdGUgcmVhZG9ubHkgYXR0YWNoVG9QYXJlbnQgPSB0aGlzLmVmZmVjdChcbiAgICAvLyAgICAgdGFwKCgpID0+IHtcbiAgICAvLyAgICAgICAgIGNvbnN0IGF0dGFjaCA9IHRoaXMuZ2V0U3RhdGUoKHMpID0+IHMuYXR0YWNoKTtcbiAgICAvL1xuICAgIC8vICAgICAgICAgbGV0IHBhcmVudEluc3RhbmNlUmVmID0gdGhpcy5fX25ndF9fLnBhcmVudFJlZjtcbiAgICAvL1xuICAgIC8vICAgICAgICAgLy8gaWYgbm8gcGFyZW50SW5zdGFuY2UsIHRyeSByZS1ydW4gdGhlIGZhY3RvcnkgZHVlIHRvIGxhdGUgaW5pdFxuICAgIC8vICAgICAgICAgaWYgKCFwYXJlbnRJbnN0YW5jZVJlZiB8fCAhcGFyZW50SW5zdGFuY2VSZWYudmFsdWUpIHtcbiAgICAvLyAgICAgICAgICAgICAvLyByZXR1cm4gZWFybHkgaWYgZmFpbGVkIHRvIHJldHJpZXZlXG4gICAgLy8gICAgICAgICAgICAgaWYgKCF0aGlzLnBhcmVudD8udmFsdWUpIHJldHVybjtcbiAgICAvL1xuICAgIC8vICAgICAgICAgICAgIC8vIHJlYXNzaWduIG9uIGluc3RhbmNlIGludGVybmFsIHN0YXRlXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5fX25ndF9fLnBhcmVudFJlZiA9IHRoaXMucGFyZW50O1xuICAgIC8vICAgICAgICAgICAgIHBhcmVudEluc3RhbmNlUmVmID0gdGhpcy5wYXJlbnQ7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGlmICh0eXBlb2YgYXR0YWNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gICAgICAgICAgICAgY29uc3QgYXR0YWNoQ2xlYW5VcCA9IGF0dGFjaChwYXJlbnRJbnN0YW5jZVJlZiwgdGhpcy5pbnN0YW5jZVJlZik7XG4gICAgLy8gICAgICAgICAgICAgaWYgKGF0dGFjaENsZWFuVXApIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaCA9IGF0dGFjaENsZWFuVXA7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVRvQXR0YWNoID0gWy4uLmF0dGFjaF07XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAvLyBpZiBwcm9wZXJ0eVRvQXR0YWNoIGlzIGVtcHR5XG4gICAgLy8gICAgICAgICAgICAgaWYgKHByb3BlcnR5VG9BdHRhY2gubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAvLyBhcnJheSBtYXRlcmlhbCBoYW5kbGluZ1xuICAgIC8vICAgICAgICAgICAgIGlmIChcbiAgICAvLyAgICAgICAgICAgICAgICAgcHJvcGVydHlUb0F0dGFjaFswXSA9PT0gJ21hdGVyaWFsJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRvQXR0YWNoWzFdICYmXG4gICAgLy8gICAgICAgICAgICAgICAgIHR5cGVvZiBOdW1iZXIocHJvcGVydHlUb0F0dGFjaFsxXSkgPT09ICdudW1iZXInICYmXG4gICAgLy8gICAgICAgICAgICAgICAgIGlzLm1hdGVyaWFsKHRoaXMuaW5zdGFuY2VWYWx1ZSlcbiAgICAvLyAgICAgICAgICAgICApIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KChwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZSBhcyB1bmtub3duIGFzIFRIUkVFLk1lc2gpLm1hdGVyaWFsKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgKHBhcmVudEluc3RhbmNlUmVmLnZhbHVlIGFzIHVua25vd24gYXMgVEhSRUUuTWVzaCkubWF0ZXJpYWwgPSBbXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvL1xuICAgIC8vICAgICAgICAgICAgIC8vIHJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlIG9uIHRoZSBwYXJlbnRJbnN0YW5jZSwgc28gd2UgY2FuIHJlc2V0IGl0IGxhdGVyXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaFZhbHVlID0gcHJvcGVydHlUb0F0dGFjaC5yZWR1Y2UoXG4gICAgLy8gICAgICAgICAgICAgICAgICh2YWx1ZSwgcHJvcGVydHkpID0+IHZhbHVlW3Byb3BlcnR5XSxcbiAgICAvLyAgICAgICAgICAgICAgICAgcGFyZW50SW5zdGFuY2VSZWYudmFsdWVcbiAgICAvLyAgICAgICAgICAgICApO1xuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgLy8gYXR0YWNoIHRoZSBpbnN0YW5jZSB2YWx1ZSBvbiB0aGUgcGFyZW50XG4gICAgLy8gICAgICAgICAgICAgbXV0YXRlKHBhcmVudEluc3RhbmNlUmVmLnZhbHVlLCB0aGlzLmluc3RhbmNlVmFsdWUsIHByb3BlcnR5VG9BdHRhY2gpO1xuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGUgb24gdGhlIGluc3RhbmNlXG4gICAgLy8gICAgICAgICAgICAgaW52YWxpZGF0ZUluc3RhbmNlKHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0ZSBvbiB0aGUgcGFyZW50XG4gICAgLy8gICAgICAgICAgICAgaWYgKHBhcmVudEluc3RhbmNlUmVmLnZhbHVlLl9fbmd0X18pIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZUluc3RhbmNlKHBhcmVudEluc3RhbmNlUmVmLnZhbHVlKTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICB0aGlzLl9fbmd0X18uYXR0YWNoID0gcHJvcGVydHlUb0F0dGFjaDtcbiAgICAvLyAgICAgICAgICAgICB0aGlzLnNldCh7IGF0dGFjaDogcHJvcGVydHlUb0F0dGFjaCB9KTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvL1xuICAgIC8vICAgICAgICAgY2hlY2tVcGRhdGUocGFyZW50SW5zdGFuY2VSZWYudmFsdWUpO1xuICAgIC8vICAgICAgICAgY2hlY2tVcGRhdGUodGhpcy5pbnN0YW5jZVZhbHVlKTtcbiAgICAvLyAgICAgfSlcbiAgICAvLyApO1xuICAgIC8vXG4gICAgLy8gcHJpdmF0ZSByZWFkb25seSBpbnN0YW5jZVJlYWR5ID0gdGhpcy5lZmZlY3QoXG4gICAgLy8gICAgIHRhcEVmZmVjdCgoKSA9PiB7XG4gICAgLy8gICAgICAgICB0aGlzLnBvc3RJbml0KCk7XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGlmICh0aGlzLmNhbkluaXQpIHtcbiAgICAvLyAgICAgICAgICAgICAvLyBhc3NpZ25pbmcgb3B0aW9uc1xuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgY29uc3Qgc2V0T3B0aW9uc1N1YiA9IHRoaXMuc2V0T3B0aW9ucyhcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBvcHRpb25zRmllbGRzVG9LZXlzJCh0aGlzLCB0aGlzLm9wdGlvbnNGaWVsZHMsIGlzLm1hdGVyaWFsKHRoaXMuaW5zdGFuY2VWYWx1ZSkpLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zVHJpZ2dlciQsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAob3B0aW9uc0tleXMpID0+IG9wdGlvbnNLZXlzXG4gICAgLy8gICAgICAgICAgICAgICAgIClcbiAgICAvLyAgICAgICAgICAgICApO1xuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgLy8gYXR0YWNoaW5nXG4gICAgLy8gICAgICAgICAgICAgaWYgKCF0aGlzLmdldFN0YXRlKChzKSA9PiBzLm5vQXR0YWNoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaFRvUGFyZW50KHRoaXMucGFyZW50KTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAvLyBlbWl0dGluZ1xuICAgIC8vICAgICAgICAgICAgIGlmICghdGhpcy5oYXNFbWl0dGVkQWxyZWFkeSkge1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnJlYWR5LmVtaXQodGhpcy5pbnN0YW5jZVZhbHVlKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5oYXNFbWl0dGVkQWxyZWFkeSA9IHRydWU7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgc2V0T3B0aW9uc1N1Yi51bnN1YnNjcmliZSgpO1xuICAgIC8vICAgICAgICAgICAgIH07XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH0pXG4gICAgLy8gKTtcbiAgICAvL1xuICAgIC8vIC8qKlxuICAgIC8vICAqIFN1YmNsYXNzZXMgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJ1biBsb2dpYyAqKmJlZm9yZSoqIE5ndFN0b3JlIGlzIHJlYWR5XG4gICAgLy8gICogQHByb3RlY3RlZFxuICAgIC8vICAqL1xuICAgIC8vIHByb3RlY3RlZCBwcmVTdG9yZVJlYWR5KCkge1xuICAgIC8vICAgICByZXR1cm47XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gLyoqXG4gICAgLy8gICogU3ViY2xhc3NlcyBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gcnVuIGxvZ2ljICoqYWZ0ZXIqKiBOZ3RTdG9yZSBpcyByZWFkeVxuICAgIC8vICAqIEBwcm90ZWN0ZWRcbiAgICAvLyAgKi9cbiAgICAvLyBwcm90ZWN0ZWQgcG9zdFN0b3JlUmVhZHkoKSB7XG4gICAgLy8gICAgIHJldHVybjtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyAvKipcbiAgICAvLyAgKiBTdWJjbGFzc2VzIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBydW4gcG9zdC1pbml0IGxvZ2ljXG4gICAgLy8gICogQHByb3RlY3RlZFxuICAgIC8vICAqL1xuICAgIC8vIHByb3RlY3RlZCBwb3N0SW5pdCgpIHtcbiAgICAvLyAgICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIC8qKlxuICAgIC8vICAqIENhbiBiZSB1c2VkIGJ5IHN1YmNsYXNzZXMgdG8gcnVuIGFkZGl0aW9uYWwgbG9naWMgYWZ0ZXIgb3B0aW9ucyBhcmUgc2V0XG4gICAgLy8gICogQHByb3RlY3RlZFxuICAgIC8vICAqL1xuICAgIC8vIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAvLyBwcm90ZWN0ZWQgcG9zdFNldE9wdGlvbnMoXzogVEluc3RhbmNlKSB7XG4gICAgLy8gICAgIHJldHVybjtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyAvKipcbiAgICAvLyAgKiBTdWJjbGFzc2VzIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBjYWxjdWxhdGUgaW5zdGFuY2UgYXJndW1lbnRzXG4gICAgLy8gICogQHBhcmFtIGluc3RhbmNlQXJnc1xuICAgIC8vICAqIEBwcm90ZWN0ZWRcbiAgICAvLyAgKi9cbiAgICAvLyBwcm90ZWN0ZWQgaW5pdEluc3RhbmNlQXJncyhpbnN0YW5jZUFyZ3M6IHVua25vd25bXSkge1xuICAgIC8vICAgICByZXR1cm4gaW5zdGFuY2VBcmdzO1xuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIG92ZXJyaWRlIGluaXRpYWxpemUoKSB7XG4gICAgLy8gICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAvLyAgICAgdGhpcy5zZXQoe1xuICAgIC8vICAgICAgICAgaW5zdGFuY2VSZWY6IG5ldyBOZ3RSZWYobnVsbCksXG4gICAgLy8gICAgICAgICBpbnN0YW5jZUFyZ3M6IFtdLFxuICAgIC8vICAgICAgICAgYXR0YWNoOiBbXSxcbiAgICAvLyAgICAgICAgIG5vQXR0YWNoOiBmYWxzZSxcbiAgICAvLyAgICAgICAgIHNraXBXcmFwcGVyOiBmYWxzZSxcbiAgICAvLyAgICAgICAgIHNraXBJbml0OiBmYWxzZSxcbiAgICAvLyAgICAgICAgIG5vQXR0YWNoRXhwbGljaXQ6IGZhbHNlLFxuICAgIC8vICAgICAgICAgc2tpcFdyYXBwZXJFeHBsaWNpdDogZmFsc2UsXG4gICAgLy8gICAgICAgICBza2lwSW5pdEV4cGxpY2l0OiBmYWxzZSxcbiAgICAvLyAgICAgICAgIGF0dGFjaEV4cGxpY2l0OiBmYWxzZSxcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gbmdPbkluaXQoKSB7XG4gICAgLy8gICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgLy8gICAgICAgICAvLyBydW4gbG9naWMgYmVmb3JlIHRoZSBzdG9yZSBpcyByZWFkeTsgYWthIGJlZm9yZSB0aGUgY2FudmFzIGVudGl0aWVzIGFyZSBjcmVhdGVkIGFuZCByZWFkeVxuICAgIC8vICAgICAgICAgdGhpcy5wcmVTdG9yZVJlYWR5KCk7XG4gICAgLy9cbiAgICAvLyAgICAgICAgIHRoaXMuc3RvcmUub25SZWFkeSgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5wb3N0U3RvcmVSZWFkeSgpO1xuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgLy8gbm93IHJ1biBpbml0LCBidXQgb25seSBpZiB0aGlzIGlzIE5PVCBhIHdyYXBwZXIgYW5kIHRoZSBza2lwSW5pdCBmbGFnIGlzIG5vdCBzZXRcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5jYW5Jbml0KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuaW5pdCh0aGlzLmluaXRUcmlnZ2VyJCk7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGBpbnN0YW5jZWAgaXMgYXZhaWxhYmxlIGJlZm9yZSBkb2luZyBhbnl0aGluZ1xuICAgIC8vICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VSZWFkeSh0aGlzLmluc3RhbmNlUmVmLnBpcGUoZmlsdGVyKChpbnN0YW5jZSkgPT4gaW5zdGFuY2UgIT09IG51bGwpKSk7XG4gICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy8gICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgLy8gICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gcHJvdGVjdGVkIGRlc3Ryb3koKSB7XG4gICAgLy8gICAgIGlmICh0aGlzLmluc3RhbmNlVmFsdWUpIHtcbiAgICAvLyAgICAgICAgIGlmIChpcy5vYmplY3QzZCh0aGlzLmluc3RhbmNlVmFsdWUpKSB7XG4gICAgLy8gICAgICAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2UgPSB0aGlzLnBhcmVudDtcbiAgICAvLyAgICAgICAgICAgICBpZiAocGFyZW50SW5zdGFuY2UgJiYgaXMub2JqZWN0M2QocGFyZW50SW5zdGFuY2UudmFsdWUpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIHJlbW92ZUludGVyYWN0aXZpdHkodGhpcy5fX25ndF9fLnN0YXRlR2V0dGVyLmJpbmQodGhpcy5fX25ndF9fKSwgdGhpcy5pbnN0YW5jZVZhbHVlKTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZVZhbHVlLmNsZWFyICE9IG51bGwpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZVZhbHVlLmNsZWFyKCk7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICAvLyBub24tc2NlbmUgb2JqZWN0c1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQXR0YWNoID0gdGhpcy5fX25ndF9fLmF0dGFjaDtcbiAgICAvLyAgICAgICAgICAgICBpZiAocHJldmlvdXNBdHRhY2ggIT0gbnVsbCkge1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByZXZpb3VzQXR0YWNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0F0dGFjaCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBdHRhY2hWYWx1ZSA9IHRoaXMuX19uZ3RfXy5hdHRhY2hWYWx1ZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18ucGFyZW50UmVmICYmIHRoaXMuX19uZ3RfXy5wYXJlbnRSZWYudmFsdWUpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUodGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSwgcHJldmlvdXNBdHRhY2hWYWx1ZSwgcHJldmlvdXNBdHRhY2gpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXy5wYXJlbnRSZWYgJiYgdGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY2hlY2tVcGRhdGUodGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGNvbnN0IGRpc3Bvc2UgPSAodGhpcy5pbnN0YW5jZVZhbHVlIGFzIE5ndEFueVJlY29yZClbJ2Rpc3Bvc2UnXTtcbiAgICAvLyAgICAgICAgIGlmIChkaXNwb3NlICYmIHR5cGVvZiBkaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gICAgICAgICAgICAgZGlzcG9zZS5hcHBseSh0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgdGhpcy5zZXQoeyBhdHRhY2g6IFtdIH0pO1xuICAgIC8vICAgICB0aGlzLmluc3RhbmNlUmVmLmNvbXBsZXRlKCk7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gcHJpdmF0ZSBwcmVwYXJlSW5zdGFuY2UoXG4gICAgLy8gICAgIGluc3RhbmNlOiBUSW5zdGFuY2UsXG4gICAgLy8gICAgIHByZXBhcmVPcHRpb25zOiB7XG4gICAgLy8gICAgICAgICBwYXJlbnRTdGF0ZUdldHRlcj86IE5ndFN0YXRlR2V0dGVyO1xuICAgIC8vICAgICAgICAgcm9vdFN0YXRlR2V0dGVyPzogTmd0U3RhdGVHZXR0ZXI7XG4gICAgLy8gICAgICAgICB1dWlkPzogc3RyaW5nO1xuICAgIC8vICAgICB9ID0ge31cbiAgICAvLyApOiBOZ3RJbnN0YW5jZU5vZGU8VEluc3RhbmNlPiB7XG4gICAgLy8gICAgIGlmICghcHJlcGFyZU9wdGlvbnMucGFyZW50U3RhdGVHZXR0ZXIpIHtcbiAgICAvLyAgICAgICAgIHByZXBhcmVPcHRpb25zLnBhcmVudFN0YXRlR2V0dGVyID0gdGhpcy5zdG9yZS5nZXRTdGF0ZTtcbiAgICAvLyAgICAgfVxuICAgIC8vXG4gICAgLy8gICAgIGlmICghcHJlcGFyZU9wdGlvbnMucm9vdFN0YXRlR2V0dGVyKSB7XG4gICAgLy8gICAgICAgICBwcmVwYXJlT3B0aW9ucy5yb290U3RhdGVHZXR0ZXIgPSB0aGlzLnN0b3JlLnJvb3RTdGF0ZUdldHRlcjtcbiAgICAvLyAgICAgfVxuICAgIC8vXG4gICAgLy8gICAgIGlmIChwcmVwYXJlT3B0aW9ucy51dWlkICYmICd1dWlkJyBpbiBpbnN0YW5jZSkge1xuICAgIC8vICAgICAgICAgKGluc3RhbmNlIGFzIE5ndEFueVJlY29yZClbJ3V1aWQnXSA9IHByZXBhcmVPcHRpb25zLnV1aWQ7XG4gICAgLy8gICAgIH1cbiAgICAvL1xuICAgIC8vICAgICBjb25zdCBwcmVwSW5zdGFuY2UgPSBwcmVwYXJlKFxuICAgIC8vICAgICAgICAgaW5zdGFuY2UsXG4gICAgLy8gICAgICAgICBwcmVwYXJlT3B0aW9ucy5wYXJlbnRTdGF0ZUdldHRlciEsXG4gICAgLy8gICAgICAgICBwcmVwYXJlT3B0aW9ucy5yb290U3RhdGVHZXR0ZXIhLFxuICAgIC8vICAgICAgICAgdGhpcy5wYXJlbnQsXG4gICAgLy8gICAgICAgICB0aGlzLmluc3RhbmNlUmVmLFxuICAgIC8vICAgICAgICAgdGhpcy5pc1ByaW1pdGl2ZVxuICAgIC8vICAgICApO1xuICAgIC8vXG4gICAgLy8gICAgIHRoaXMuaW5zdGFuY2VSZWYuc2V0KHByZXBJbnN0YW5jZSk7XG4gICAgLy9cbiAgICAvLyAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAvLyAgICAgICAgIGNvbnN0IHsgbm9BdHRhY2gsIHNraXBXcmFwcGVyIH0gPSB0aGlzLmdldFN0YXRlKCk7XG4gICAgLy8gICAgICAgICBpZiAoIW5vQXR0YWNoICYmICFza2lwV3JhcHBlcikge1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IHBhcmVudEluc3RhbmNlTm9kZSA9IGdldEluc3RhbmNlTG9jYWxTdGF0ZShnZXRJbnN0YW5jZUxvY2FsU3RhdGUocHJlcEluc3RhbmNlKT8ucGFyZW50UmVmPy52YWx1ZSk7XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICBpZiAocGFyZW50SW5zdGFuY2VOb2RlKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmIChwcmVwSW5zdGFuY2VbJ2lzR3JvdXAnXSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbnMgPSBpcy5vYmplY3QzZChwcmVwSW5zdGFuY2UpXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICA/IHBhcmVudEluc3RhbmNlTm9kZS5vYmplY3RzUmVmc1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgOiBwYXJlbnRJbnN0YW5jZU5vZGUuaW5zdGFuY2VzUmVmcztcbiAgICAvLyAgICAgICAgICAgICAgICAgY29sbGVjdGlvbnMuc2V0KChzKSA9PiBbLi4ucywgdGhpcy5pbnN0YW5jZVJlZl0pO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfSk7XG4gICAgLy9cbiAgICAvLyAgICAgcmV0dXJuIHByZXBJbnN0YW5jZTtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyBnZXQgaW5zdGFuY2VSZWYoKTogTmd0UmVmPFRJbnN0YW5jZT4ge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZSgocykgPT4gcy5pbnN0YW5jZVJlZik7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gZ2V0IGluc3RhbmNlVmFsdWUoKTogVEluc3RhbmNlIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuaXNSYXcgPyAodGhpcy5pbnN0YW5jZVJlZi52YWx1ZT8udmFsdWVPZigpIGFzIFRJbnN0YW5jZSkgOiB0aGlzLmluc3RhbmNlUmVmLnZhbHVlO1xuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIGdldCBpbnN0YW5jZUFyZ3MkKCkge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5zZWxlY3QoKHMpID0+IHMuaW5zdGFuY2VBcmdzKTtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyBnZXQgaW5zdGFuY2VBcmdzKCk6IHVua25vd25bXSB7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLmdldFN0YXRlKChzKSA9PiBzLmluc3RhbmNlQXJncyk7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gc2V0IGluc3RhbmNlQXJncyh2OiB1bmtub3duIHwgdW5rbm93bltdKSB7XG4gICAgLy8gICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5pc0FycmF5KHYpID8gdiA6IFt2XTtcbiAgICAvLyAgICAgdGhpcy5zZXQoeyBpbnN0YW5jZUFyZ3M6IGFyZ3MgfSk7XG4gICAgLy8gICAgIGlmICh0aGlzLmluc3RhbmNlUmVmICYmIHRoaXMuX19uZ3RfXykge1xuICAgIC8vICAgICAgICAgaWYgKCF0aGlzLl9fbmd0X18ubWVtb2l6ZWQpIHtcbiAgICAvLyAgICAgICAgICAgICB0aGlzLl9fbmd0X18ubWVtb2l6ZWQgPSB7fTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIHRoaXMuX19uZ3RfXy5tZW1vaXplZFsnYXJncyddID0gYXJncztcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIGdldCBfX25ndF9fKCk6IE5ndEluc3RhbmNlTG9jYWxTdGF0ZSB7XG4gICAgLy8gICAgIHJldHVybiBnZXRJbnN0YW5jZUxvY2FsU3RhdGUodGhpcy5pc1JhdyA/IHRoaXMuaW5zdGFuY2VSZWYudmFsdWUgOiB0aGlzLmluc3RhbmNlVmFsdWUpIGFzIE5ndEluc3RhbmNlTG9jYWxTdGF0ZTtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyBnZXQgcGFyZW50KCk6IE5ndFJlZiB7XG4gICAgLy8gICAgIGlmICghdGhpcy5nZXRTdGF0ZSgocykgPT4gcy5za2lwV3JhcHBlcikpIHJldHVybiB0aGlzLnBhcmVudFJlZj8uKCk7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLnBhcmVudEhvc3RSZWY/LigpIHx8IHRoaXMucGFyZW50UmVmPy4oKTtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyBnZXQgY2FuSW5pdCgpIHtcbiAgICAvLyAgICAgcmV0dXJuICF0aGlzLmlzV3JhcHBlciAmJiAhdGhpcy5nZXRTdGF0ZSgocykgPT4gcy5za2lwSW5pdCk7XG4gICAgLy8gfVxufVxuXG5leHBvcnQgY29uc3QgTkdUX0lOU1RBTkNFX0lOUFVUUyA9IFtcbiAgICAncmVmJyxcbiAgICAnYXR0YWNoJyxcbiAgICAnc2tpcFdyYXBwZXInLFxuICAgICdza2lwSW5pdCcsXG4gICAgJ25vQXR0YWNoJyxcbiAgICAnYmVmb3JlUmVuZGVyJyxcbiAgICAncHJpb3JpdHknLFxuICAgICd1cGRhdGVDYWxsYmFjaycsXG4gICAgJ3JlYWR5Q2FsbGJhY2snLFxuXTtcblxuZXhwb3J0IGNvbnN0IE5HVF9JTlNUQU5DRV9PVVRQVVRTID0gWy4uLnN1cHBvcnRlZEV2ZW50c107XG4iXX0=
368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXRocmVlL3NyYy9saWIvaW5zdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFFZCxLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFnQixHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBWTFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFeEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUF5QixrQ0FBa0MsQ0FBQyxDQUFDO0FBQ3ZILE1BQU0sVUFBVSxrQkFBa0IsQ0FHaEMsSUFBVyxFQUFFLE9BQW1EO0lBQzlELE9BQU87UUFDSCxPQUFP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bnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbmplY3RPcHRpb25zLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIFN1YnNjcmlwdGlvbiwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ3RSZWYgfSBmcm9tICcuL3JlZic7XG5pbXBvcnQgeyBOZ3RDb21wb25lbnRTdG9yZSwgdGFwRWZmZWN0IH0gZnJvbSAnLi9zdG9yZXMvY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7IE5ndFN0b3JlIH0gZnJvbSAnLi9zdG9yZXMvc3RvcmUnO1xuaW1wb3J0IHR5cGUge1xuICAgIE5ndEFueUN0b3IsXG4gICAgTmd0QW55RnVuY3Rpb24sXG4gICAgTmd0QW55UmVjb3JkLFxuICAgIE5ndEF0dGFjaEZ1bmN0aW9uLFxuICAgIE5ndEJlZm9yZVJlbmRlckNhbGxiYWNrLFxuICAgIE5ndEV2ZW50SGFuZGxlcnMsXG4gICAgTmd0SW5zdGFuY2VMb2NhbFN0YXRlLFxuICAgIE5ndE9ic2VydmFibGVJbnB1dCxcbiAgICBOZ3RUaHJlZUV2ZW50LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGFwcGx5UHJvcHMgfSBmcm9tICcuL3V0aWxzL2FwcGx5LXByb3BzJztcbmltcG9ydCB7IHJlbW92ZUludGVyYWN0aXZpdHkgfSBmcm9tICcuL3V0aWxzL2V2ZW50cyc7XG5pbXBvcnQgeyBnZXRJbnN0YW5jZUxvY2FsU3RhdGUgfSBmcm9tICcuL3V0aWxzL2dldC1pbnN0YW5jZS1sb2NhbC1zdGF0ZSc7XG5pbXBvcnQgeyBpbnZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tICcuL3V0aWxzL2luc3RhbmNlJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi91dGlscy9pcyc7XG5pbXBvcnQgeyBtdXRhdGUgfSBmcm9tICcuL3V0aWxzL211dGF0ZSc7XG5cbmV4cG9ydCBjb25zdCBOR1RfUFJPWFlfSU5TVEFOQ0UgPSBTeW1ib2wuZm9yKCdfX25ndF9fcHJveHlfX2luc3RhbmNlX18nKTtcblxuZXhwb3J0IGNvbnN0IE5HVF9JTlNUQU5DRV9SRUZfRkFDVE9SWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3RBbnlGdW5jdGlvbjxOZ3RSZWY+PignTmd0SW5zdGFuY2VbaW5zdGFuY2VSZWZdIGZhY3RvcnknKTtcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlSW5zdGFuY2VSZWY8XG4gICAgVEluc3RhbmNlVHlwZSBleHRlbmRzIG9iamVjdCA9IGFueSxcbiAgICBUQ3RvciBleHRlbmRzIE5ndEFueUN0b3I8VEluc3RhbmNlVHlwZT4gPSBOZ3RBbnlDdG9yPFRJbnN0YW5jZVR5cGU+XG4+KGN0b3I6IFRDdG9yLCBmYWN0b3J5PzogKGluc3RhbmNlOiBJbnN0YW5jZVR5cGU8VEN0b3I+KSA9PiBOZ3RSZWYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcm92aWRlOiBOR1RfSU5TVEFOQ0VfUkVGX0ZBQ1RPUlksXG4gICAgICAgIHVzZUZhY3Rvcnk6IChpbnN0YW5jZTogSW5zdGFuY2VUeXBlPFRDdG9yPikgPT4ge1xuICAgICAgICAgICAgaWYgKGZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gZmFjdG9yeShpbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PlxuICAgICAgICAgICAgICAgIChpbnN0YW5jZSBhcyBOZ3RBbnlSZWNvcmQpWydpbnN0YW5jZVJlZiddIHx8IChpbnN0YW5jZSBhcyBOZ3RBbnlSZWNvcmQpWydpbnN0YW5jZSddWydpbnN0YW5jZVJlZiddO1xuICAgICAgICB9LFxuICAgICAgICBkZXBzOiBbY3Rvcl0sXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZVJlZigpOiBOZ3RBbnlGdW5jdGlvbjxOZ3RSZWY+O1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEluc3RhbmNlUmVmKG9wdGlvbnM6IEluamVjdE9wdGlvbnMgJiB7IG9wdGlvbmFsPzogZmFsc2UgfSk6IE5ndEFueUZ1bmN0aW9uPE5ndFJlZj47XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0SW5zdGFuY2VSZWYob3B0aW9uczogSW5qZWN0T3B0aW9ucyAmIHsgb3B0aW9uYWw/OiB0cnVlIH0pOiBOZ3RBbnlGdW5jdGlvbjxOZ3RSZWY+IHwgbnVsbDtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZVJlZihvcHRpb25zOiBJbmplY3RPcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gaW5qZWN0KE5HVF9JTlNUQU5DRV9SRUZfRkFDVE9SWSwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0SW5zdGFuY2VTdGF0ZTxUSW5zdGFuY2UgZXh0ZW5kcyBvYmplY3QgPSBOZ3RBbnlSZWNvcmQ+IHtcbiAgICBpbnN0YW5jZVJlZjogTmd0UmVmPFRJbnN0YW5jZT47XG4gICAgaW5zdGFuY2VBcmdzOiB1bmtub3duW107XG4gICAgYXR0YWNoOiBzdHJpbmdbXSB8IE5ndEF0dGFjaEZ1bmN0aW9uO1xuICAgIG5vQXR0YWNoOiBib29sZWFuO1xuICAgIHNraXBXcmFwcGVyOiBib29sZWFuO1xuICAgIHNraXBJbml0OiBib29sZWFuO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEluc3RhbmNlPFQgZXh0ZW5kcyBvYmplY3Q+KCk6IE5ndEluc3RhbmNlPFQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEluc3RhbmNlPFQgZXh0ZW5kcyBvYmplY3Q+KG9wdGlvbnM6IEluamVjdE9wdGlvbnMgJiB7IG9wdGlvbmFsPzogZmFsc2UgfSk6IE5ndEluc3RhbmNlPFQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEluc3RhbmNlPFQgZXh0ZW5kcyBvYmplY3Q+KG9wdGlvbnM6IEluamVjdE9wdGlvbnMgJiB7IG9wdGlvbmFsPzogdHJ1ZSB9KTogTmd0SW5zdGFuY2U8VD4gfCBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEluc3RhbmNlKG9wdGlvbnM6IEluamVjdE9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBpbmplY3QoTmd0SW5zdGFuY2UsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBzdXBwb3J0ZWRFdmVudHMgPSBbXG4gICAgJ2NsaWNrJyxcbiAgICAnY29udGV4dG1lbnUnLFxuICAgICdkYmxjbGljaycsXG4gICAgJ3BvaW50ZXJ1cCcsXG4gICAgJ3BvaW50ZXJkb3duJyxcbiAgICAncG9pbnRlcm92ZXInLFxuICAgICdwb2ludGVyb3V0JyxcbiAgICAncG9pbnRlcmVudGVyJyxcbiAgICAncG9pbnRlcmxlYXZlJyxcbiAgICAncG9pbnRlcm1vdmUnLFxuICAgICdwb2ludGVybWlzc2VkJyxcbiAgICAncG9pbnRlcmNhbmNlbCcsXG4gICAgJ3doZWVsJyxcbl0gYXMgY29uc3Q7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW25ndEluc3RhbmNlXScsXG4gICAgZXhwb3J0QXM6ICduZ3RJbnN0YW5jZScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0SW5zdGFuY2U8XG4gICAgICAgIFRJbnN0YW5jZSBleHRlbmRzIG9iamVjdCA9IGFueSxcbiAgICAgICAgVEluc3RhbmNlU3RhdGUgZXh0ZW5kcyBOZ3RJbnN0YW5jZVN0YXRlPFRJbnN0YW5jZT4gPSBOZ3RJbnN0YW5jZVN0YXRlPFRJbnN0YW5jZT5cbiAgICA+XG4gICAgZXh0ZW5kcyBOZ3RDb21wb25lbnRTdG9yZTxUSW5zdGFuY2VTdGF0ZT5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gICAgQElucHV0KCkgc2V0IHJlZihpbnN0YW5jZTogVEluc3RhbmNlIHwgTmd0UmVmPFRJbnN0YW5jZT4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IGluc3RhbmNlUmVmOiBpcy5yZWYoaW5zdGFuY2UpID8gaW5zdGFuY2UgOiBuZXcgTmd0UmVmKGluc3RhbmNlKSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2tpcFdyYXBwZXIoc2tpcFdyYXBwZXI6IE5ndE9ic2VydmFibGVJbnB1dDxib29sZWFuPikge1xuICAgICAgICB0aGlzLndyaXRlKHsgc2tpcFdyYXBwZXIgfSk7XG4gICAgICAgIHRoaXMud3JpdGUoeyBza2lwV3JhcHBlckV4cGxpY2l0OiB0cnVlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBza2lwSW5pdChza2lwSW5pdDogTmd0T2JzZXJ2YWJsZUlucHV0PGJvb2xlYW4+KSB7XG4gICAgICAgIHRoaXMud3JpdGUoeyBza2lwSW5pdCB9KTtcbiAgICAgICAgdGhpcy53cml0ZSh7IHNraXBJbml0RXhwbGljaXQ6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG5vQXR0YWNoKG5vQXR0YWNoOiBOZ3RPYnNlcnZhYmxlSW5wdXQ8Ym9vbGVhbj4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IG5vQXR0YWNoIH0pO1xuICAgICAgICB0aGlzLndyaXRlKHsgbm9BdHRhY2hFeHBsaWNpdDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYXR0YWNoKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IFtzdHJpbmcsIC4uLihzdHJpbmcgfCBudW1iZXIpW11dIHwgTmd0QXR0YWNoRnVuY3Rpb24gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRhY2ggPVxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZS5tYXAoKGl0ZW0pID0+ICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicgPyBpdGVtLnRvU3RyaW5nKCkgOiBpdGVtKSlcbiAgICAgICAgICAgICAgICAgICAgOiBbdmFsdWVdO1xuXG4gICAgICAgICAgICB0aGlzLndyaXRlKHsgYXR0YWNoLCBhdHRhY2hFeHBsaWNpdDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIHByaW9yaXR5ID0gMDtcbiAgICBASW5wdXQoKSBiZWZvcmVSZW5kZXI/OiBOZ3RCZWZvcmVSZW5kZXJDYWxsYmFjazxUSW5zdGFuY2U+O1xuXG4gICAgQElucHV0KCkgcmVhZHlDYWxsYmFjaz86ICgoaW5zdGFuY2U6IFRJbnN0YW5jZSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCk7XG4gICAgQElucHV0KCkgdXBkYXRlQ2FsbGJhY2s/OiAoKGluc3RhbmNlOiBUSW5zdGFuY2UpID0+IHZvaWQpIHwgKCgpID0+IHZvaWQpO1xuXG4gICAgQE91dHB1dCgpIGNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBjb250ZXh0bWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxNb3VzZUV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgZGJsY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJ1cCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVyZG93biA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVyb3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVyb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJlbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVybGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcm1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcm1pc3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVyY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4+KCk7XG4gICAgQE91dHB1dCgpIHdoZWVsID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFdoZWVsRXZlbnQ+PigpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudFJlZiA9IGluamVjdEluc3RhbmNlUmVmKHsgc2tpcFNlbGY6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH0pO1xuICAgIHByaXZhdGUgX2lzUmF3ID0gZmFsc2U7XG5cbiAgICBzZXQgaXNSYXcodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2lzUmF3ID0gdmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzRW1pdHRlZEFscmVhZHkgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5zdGFuY2VSZWFkeSA9IHRoaXMuZWZmZWN0KFxuICAgICAgICB0YXBFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFdmVudHMoKTtcblxuICAgICAgICAgICAgbGV0IGF0dGFjaFRvUGFyZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRSZWYpIHtcbiAgICAgICAgICAgICAgICBhdHRhY2hUb1BhcmVudFN1YnNjcmlwdGlvbiA9IHRoaXMuYXR0YWNoVG9QYXJlbnQodGhpcy5wYXJlbnQhLnBpcGUoZmlsdGVyKChwYXJlbnQpID0+ICEhcGFyZW50KSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbm9BdHRhY2gsIHNraXBXcmFwcGVyIH0gPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vQXR0YWNoICYmICFza2lwV3JhcHBlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZU5vZGUgPSBnZXRJbnN0YW5jZUxvY2FsU3RhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRJbnN0YW5jZUxvY2FsU3RhdGUodGhpcy5pbnN0YW5jZVZhbHVlKT8ucGFyZW50UmVmPy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJbnN0YW5jZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gaXMub2JqZWN0M2QodGhpcy5pbnN0YW5jZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcGFyZW50SW5zdGFuY2VOb2RlLm9iamVjdHNSZWZzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXJlbnRJbnN0YW5jZU5vZGUuaW5zdGFuY2VzUmVmcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25zLnNldCgocykgPT4gWy4uLnMsIHRoaXMuaW5zdGFuY2VSZWZdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGJlZm9yZVJlbmRlckNsZWFuVXA6ICgpID0+IHZvaWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5iZWZvcmVSZW5kZXIgJiYgaXMub2JqZWN0M2QodGhpcy5pbnN0YW5jZVZhbHVlKSAmJiBpcy5vYmplY3QzZCh0aGlzLnByb3h5SW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgYmVmb3JlUmVuZGVyQ2xlYW5VcCA9IHRoaXMuc3RvcmVcbiAgICAgICAgICAgICAgICAgICAgLnJlYWQoKHMpID0+IHMuaW50ZXJuYWwpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUsIG9iamVjdCkgPT4gdGhpcy5iZWZvcmVSZW5kZXIhKHN0YXRlLCBvYmplY3QpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucmVhZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJveHlJbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeUNhbGxiYWNrKSB0aGlzLnJlYWR5Q2FsbGJhY2sodGhpcy5pbnN0YW5jZVZhbHVlKTtcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBiZWZvcmVSZW5kZXJDbGVhblVwPy4oKTtcbiAgICAgICAgICAgICAgICBhdHRhY2hUb1BhcmVudFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHByaXZhdGUgaGFuZGxlRXZlbnRzID0gdGhpcy5lZmZlY3Q8dm9pZD4oXG4gICAgICAgIHRhcEVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZVZhbHVlICYmIGlzLm9iamVjdDNkKHRoaXMuaW5zdGFuY2VWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlZEV2ZW50cyA9IHN1cHBvcnRlZEV2ZW50cy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQsIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sbGVyRXZlbnQgPSB0aGlzW2V2ZW50XS5vYnNlcnZlZCA/IHRoaXNbZXZlbnRdIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaGFuZGxlcnNbZXZlbnRdID0gdGhpcy5ldmVudE5hbWVUb0hhbmRsZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJFdmVudCBhcyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxhbnk+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmV2ZW50Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaGFuZGxlcnM6IHt9LCBldmVudENvdW50OiAwIH0gYXMge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnM6IE5ndEV2ZW50SGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudENvdW50OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggX19uZ3RfXyB3aXRoIGV2ZW50c1xuICAgICAgICAgICAgICAgIGFwcGx5UHJvcHModGhpcy5fX25ndF9fLCBvYnNlcnZlZEV2ZW50cyk7XG5cbiAgICAgICAgICAgICAgICAvLyBhZGQgYXMgYW4gaW50ZXJhY3Rpb24gaWYgdGhlcmUgYXJlIGV2ZW50cyBvYnNlcnZlZFxuICAgICAgICAgICAgICAgIGlmIChvYnNlcnZlZEV2ZW50cy5ldmVudENvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRJbnN0YW5jZUxvY2FsU3RhdGUodGhpcy5pbnN0YW5jZVZhbHVlKT8ucm9vdEZhY3RvcnkoKS5hZGRJbnRlcmFjdGlvbih0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzLm9iamVjdDNkKHRoaXMuaW5zdGFuY2VWYWx1ZSkgJiYgdGhpcy5fX25ndF9fLmV2ZW50Q291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldEluc3RhbmNlTG9jYWxTdGF0ZSh0aGlzLmluc3RhbmNlVmFsdWUpPy5yb290RmFjdG9yeSgpLnJlbW92ZUludGVyYWN0aW9uKHRoaXMuaW5zdGFuY2VWYWx1ZS51dWlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGF0dGFjaFRvUGFyZW50ID0gdGhpcy5lZmZlY3QoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhdHRhY2ggPSB0aGlzLnJlYWQoKHMpID0+IHMuYXR0YWNoKTtcblxuICAgICAgICAgICAgbGV0IHBhcmVudEluc3RhbmNlUmVmID0gdGhpcy5fX25ndF9fPy5wYXJlbnRSZWY7XG5cbiAgICAgICAgICAgIC8vIGlmIG5vIHBhcmVudEluc3RhbmNlLCB0cnkgcmUtcnVuIHRoZSBmYWN0b3J5IGR1ZSB0byBsYXRlIGluaXRcbiAgICAgICAgICAgIGlmICghcGFyZW50SW5zdGFuY2VSZWYgfHwgIXBhcmVudEluc3RhbmNlUmVmLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGVhcmx5IGlmIGZhaWxlZCB0byByZXRyaWV2ZVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYXJlbnQ/LnZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAvLyByZWFzc2lnbiBvbiBpbnN0YW5jZSBpbnRlcm5hbCBzdGF0ZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLnBhcmVudFJlZiA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJlbnRJbnN0YW5jZVJlZiA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGF0dGFjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaENsZWFuVXAgPSBhdHRhY2gocGFyZW50SW5zdGFuY2VSZWYsIHRoaXMuaW5zdGFuY2VSZWYsIHRoaXMuc3RvcmUucmVhZCk7XG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaENsZWFuVXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaCA9IGF0dGFjaENsZWFuVXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVRvQXR0YWNoID0gWy4uLmF0dGFjaF07XG5cbiAgICAgICAgICAgICAgICAvLyBpZiBwcm9wZXJ0eVRvQXR0YWNoIGlzIGVtcHR5XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5VG9BdHRhY2gubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWlnaHQgYmUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGF0dGFjaGluZyBhbiBvYmplY3QzRCB0byB0aGUgcGFyZW50IG9iamVjdDNEXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm9iamVjdDNkKHRoaXMuaW5zdGFuY2VWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm9iamVjdDNkKHRoaXMucHJveHlJbnN0YW5jZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm9iamVjdDNkKHRoaXMucGFyZW50Py52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudD8udmFsdWUuYWRkKHRoaXMucHJveHlJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSBtYXRlcmlhbCBoYW5kbGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRvQXR0YWNoWzBdID09PSAnbWF0ZXJpYWwnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRvQXR0YWNoWzFdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgTnVtYmVyKHByb3BlcnR5VG9BdHRhY2hbMV0pID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXMubWF0ZXJpYWwodGhpcy5pbnN0YW5jZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZS5tYXRlcmlhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZS5tYXRlcmlhbCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdmFsdWUgb24gdGhlIHBhcmVudEluc3RhbmNlLCBzbyB3ZSBjYW4gcmVzZXQgaXQgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaFZhbHVlID0gcHJvcGVydHlUb0F0dGFjaC5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLCBwcm9wZXJ0eSkgPT4gdmFsdWVbcHJvcGVydHldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEluc3RhbmNlUmVmLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gYXR0YWNoIHRoZSBpbnN0YW5jZSB2YWx1ZSBvbiB0aGUgcGFyZW50XG4gICAgICAgICAgICAgICAgICAgIG11dGF0ZShwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZSwgdGhpcy5wcm94eUluc3RhbmNlLCBwcm9wZXJ0eVRvQXR0YWNoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB2YWxpZGF0ZSBvbiB0aGUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UodGhpcy5pbnN0YW5jZVZhbHVlKTtcblxuICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRlIG9uIHRoZSBwYXJlbnRcbiAgICAgICAgICAgICAgICBpZiAoZ2V0SW5zdGFuY2VMb2NhbFN0YXRlKHBhcmVudEluc3RhbmNlUmVmLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50SW5zdGFuY2VSZWYudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHNhdmUgdGhlIGF0dGFjaFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaCA9IHByb3BlcnR5VG9BdHRhY2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMud3JpdGUoeyBhdHRhY2g6IHByb3BlcnR5VG9BdHRhY2ggfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy53cml0ZSh7XG4gICAgICAgICAgICBpbnN0YW5jZVJlZjogbmV3IE5ndFJlZihudWxsKSxcbiAgICAgICAgICAgIGF0dGFjaDogW10sXG4gICAgICAgICAgICBub0F0dGFjaDogZmFsc2UsXG4gICAgICAgICAgICBza2lwV3JhcHBlcjogZmFsc2UsXG4gICAgICAgICAgICBza2lwSW5pdDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5vblJlYWR5KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlUmVhZHkodGhpcy5pbnN0YW5jZVJlZi5waXBlKGZpbHRlcigoaW5zdGFuY2UpID0+ICEhaW5zdGFuY2UpKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGluc3RhbmNlUmVmKCk6IE5ndFJlZjxUSW5zdGFuY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZCgocykgPT4gcy5pbnN0YW5jZVJlZik7XG4gICAgfVxuXG4gICAgZ2V0IGluc3RhbmNlVmFsdWUoKTogVEluc3RhbmNlIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlUmVmLnZhbHVlKSByZXR1cm4gdGhpcy5pbnN0YW5jZVJlZi52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmF3ID8gKHRoaXMuaW5zdGFuY2VSZWYudmFsdWU/LnZhbHVlT2YoKSBhcyBUSW5zdGFuY2UpIDogdGhpcy5pbnN0YW5jZVJlZi52YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgcHJveHlJbnN0YW5jZSgpOiBUSW5zdGFuY2Uge1xuICAgICAgICByZXR1cm4gKHRoaXMuaW5zdGFuY2VWYWx1ZSBhcyBhbnkpPy5bTkdUX1BST1hZX0lOU1RBTkNFXTtcbiAgICB9XG5cbiAgICBnZXQgX19uZ3RfXygpOiBOZ3RJbnN0YW5jZUxvY2FsU3RhdGUge1xuICAgICAgICByZXR1cm4gZ2V0SW5zdGFuY2VMb2NhbFN0YXRlKFxuICAgICAgICAgICAgdGhpcy5faXNSYXcgPyB0aGlzLmluc3RhbmNlUmVmLnZhbHVlIDogdGhpcy5pbnN0YW5jZVZhbHVlXG4gICAgICAgICkgYXMgTmd0SW5zdGFuY2VMb2NhbFN0YXRlO1xuICAgIH1cblxuICAgIGdldCBwYXJlbnQoKTogTmd0UmVmIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50UmVmPy4oKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChpcy5vYmplY3QzZCh0aGlzLmluc3RhbmNlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2UgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50SW5zdGFuY2UgJiYgaXMub2JqZWN0M2QocGFyZW50SW5zdGFuY2UudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUludGVyYWN0aXZpdHkodGhpcy5fX25ndF9fLnN0YXRlRmFjdG9yeS5iaW5kKHRoaXMuX19uZ3RfXyksIHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEluc3RhbmNlLnZhbHVlLnJlbW92ZSh0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50SW5zdGFuY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlVmFsdWUuY2xlYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlVmFsdWUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm9uLXNjZW5lIG9iamVjdHNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBdHRhY2ggPSB0aGlzLl9fbmd0X18uYXR0YWNoO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNBdHRhY2ggIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcmV2aW91c0F0dGFjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQXR0YWNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQXR0YWNoVmFsdWUgPSB0aGlzLl9fbmd0X18uYXR0YWNoVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXy5wYXJlbnRSZWYgJiYgdGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUodGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSwgcHJldmlvdXNBdHRhY2hWYWx1ZSwgcHJldmlvdXNBdHRhY2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXy5wYXJlbnRSZWYgJiYgdGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGVJbnN0YW5jZSh0aGlzLl9fbmd0X18ucGFyZW50UmVmLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGlzcG9zZSA9ICh0aGlzLmluc3RhbmNlVmFsdWUgYXMgTmd0QW55UmVjb3JkKVsnZGlzcG9zZSddO1xuICAgICAgICAgICAgaWYgKGRpc3Bvc2UgJiYgdHlwZW9mIGRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkaXNwb3NlLmFwcGx5KHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndyaXRlKHsgYXR0YWNoOiBbXSB9KTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVJlZi5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXZlbnROYW1lVG9IYW5kbGVyKFxuICAgICAgICBjb250cm9sbGVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4+IHwgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8V2hlZWxFdmVudD4+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiAoZXZlbnQ6IFBhcmFtZXRlcnM8RXhjbHVkZTxOZ3RFdmVudEhhbmRsZXJzW3R5cGVvZiBzdXBwb3J0ZWRFdmVudHNbbnVtYmVyXV0sIHVuZGVmaW5lZD4+WzBdKSA9PiB7XG4gICAgICAgICAgICAvLyBnbyBiYWNrIGludG8gQW5ndWxhciBab25lIHNvIHRoYXQgc3RhdGUgdXBkYXRlcyBvbiB0aGVzZSBldmVudHMgdHJpZ2dlciBDRFxuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlckV2ZW50LmVtaXQoZXZlbnQgYXMgTmd0VGhyZWVFdmVudDxhbnk+KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IE5HVF9JTlNUQU5DRV9JTlBVVFMgPSBbXG4gICAgJ3JlZicsXG4gICAgJ2F0dGFjaCcsXG4gICAgJ3NraXBXcmFwcGVyJyxcbiAgICAnc2tpcEluaXQnLFxuICAgICdub0F0dGFjaCcsXG4gICAgJ2JlZm9yZVJlbmRlcicsXG4gICAgJ3ByaW9yaXR5JyxcbiAgICAndXBkYXRlQ2FsbGJhY2snLFxuICAgICdyZWFkeUNhbGxiYWNrJyxcbl07XG5cbmV4cG9ydCBjb25zdCBOR1RfSU5TVEFOQ0VfT1VUUFVUUyA9IFsuLi5zdXBwb3J0ZWRFdmVudHNdO1xuIl19
@@ -0,0 +1,15 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class NgtMathPipe {
4
+ transform(value, keyOfMath) {
5
+ const params = Array.isArray(value) ? value : [value];
6
+ return Math[keyOfMath](...params);
7
+ }
8
+ }
9
+ NgtMathPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtMathPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
10
+ NgtMathPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.0", ngImport: i0, type: NgtMathPipe, isStandalone: true, name: "math" });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtMathPipe, decorators: [{
12
+ type: Pipe,
13
+ args: [{ name: 'math', standalone: true }]
14
+ }] });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9waXBlcy9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUdwRCxNQUFNLE9BQU8sV0FBVztJQUNwQixTQUFTLENBQ0wsS0FBd0IsRUFDeEIsU0FBOEc7UUFFOUcsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE9BQVEsSUFBSSxDQUFDLFNBQVMsQ0FBOEMsQ0FBQyxHQUFHLE1BQU0sQ0FFN0UsQ0FBQztJQUNOLENBQUM7O3dHQVRRLFdBQVc7c0dBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQUR2QixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7IG5hbWU6ICdtYXRoJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndE1hdGhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKFxuICAgICAgICB2YWx1ZTogbnVtYmVyIHwgbnVtYmVyW10sXG4gICAgICAgIGtleU9mTWF0aDoga2V5b2YgT21pdDxNYXRoLCAnUEknIHwgJ0UnIHwgJ0xOMicgfCAnTE9HMkUnIHwgJ0xOMTAnIHwgJ0xPRzEwRScgfCAnU1FSVDFfMicgfCAnU1FSVDInIHwgJ3JhbmRvbSc+XG4gICAgKTogUmV0dXJuVHlwZTxFeHRyYWN0PE1hdGhbdHlwZW9mIGtleU9mTWF0aF0sICdzdHJpbmcnPj4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICAgICAgcmV0dXJuIChNYXRoW2tleU9mTWF0aF0gYXMgdW5rbm93biBhcyAoLi4uYXJnczogbnVtYmVyW10pID0+IG51bWJlcikoLi4ucGFyYW1zKSBhcyBSZXR1cm5UeXBlPFxuICAgICAgICAgICAgRXh0cmFjdDxNYXRoW3R5cGVvZiBrZXlPZk1hdGhdLCAnc3RyaW5nJz5cbiAgICAgICAgPjtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class NgtPiPipe {
4
+ transform(value) {
5
+ return value * Math.PI;
6
+ }
7
+ }
8
+ NgtPiPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtPiPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
9
+ NgtPiPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.0", ngImport: i0, type: NgtPiPipe, isStandalone: true, name: "pi" });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtPiPipe, decorators: [{
11
+ type: Pipe,
12
+ args: [{ name: 'pi', standalone: true }]
13
+ }] });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXRocmVlL3NyYy9saWIvcGlwZXMvcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBR3BELE1BQU0sT0FBTyxTQUFTO0lBQ2xCLFNBQVMsQ0FBQyxLQUFhO1FBQ25CLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7c0dBSFEsU0FBUztvR0FBVCxTQUFTOzJGQUFULFNBQVM7a0JBRHJCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHsgbmFtZTogJ3BpJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndFBpUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICogTWF0aC5QSTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class NgtRadianPipe {
4
+ transform(degree) {
5
+ return (degree * Math.PI) / 180;
6
+ }
7
+ }
8
+ NgtRadianPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtRadianPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
9
+ NgtRadianPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.0", ngImport: i0, type: NgtRadianPipe, isStandalone: true, name: "radian" });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtRadianPipe, decorators: [{
11
+ type: Pipe,
12
+ args: [{ name: 'radian', standalone: true }]
13
+ }] });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaWFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci10aHJlZS9zcmMvbGliL3BpcGVzL3JhZGlhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFHcEQsTUFBTSxPQUFPLGFBQWE7SUFDdEIsU0FBUyxDQUFDLE1BQWM7UUFDcEIsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3BDLENBQUM7OzBHQUhRLGFBQWE7d0dBQWIsYUFBYTsyRkFBYixhQUFhO2tCQUR6QixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7IG5hbWU6ICdyYWRpYW4nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0UmFkaWFuUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShkZWdyZWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAoZGVncmVlICogTWF0aC5QSSkgLyAxODA7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,22 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as THREE from 'three';
3
+ import * as i0 from "@angular/core";
4
+ export class NgtSidePipe {
5
+ transform(side) {
6
+ switch (side) {
7
+ case 'front':
8
+ return THREE.FrontSide;
9
+ case 'back':
10
+ return THREE.BackSide;
11
+ case 'double':
12
+ return THREE.DoubleSide;
13
+ }
14
+ }
15
+ }
16
+ NgtSidePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtSidePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
17
+ NgtSidePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.0", ngImport: i0, type: NgtSidePipe, isStandalone: true, name: "side" });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtSidePipe, decorators: [{
19
+ type: Pipe,
20
+ args: [{ name: 'side', standalone: true }]
21
+ }] });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9waXBlcy9zaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDOztBQUcvQixNQUFNLE9BQU8sV0FBVztJQUNwQixTQUFTLENBQUMsSUFBaUM7UUFDdkMsUUFBUSxJQUFJLEVBQUU7WUFDVixLQUFLLE9BQU87Z0JBQ1IsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQzNCLEtBQUssTUFBTTtnQkFDUCxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDMUIsS0FBSyxRQUFRO2dCQUNULE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQztTQUMvQjtJQUNMLENBQUM7O3dHQVZRLFdBQVc7c0dBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQUR2QixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5AUGlwZSh7IG5hbWU6ICdzaWRlJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndFNpZGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHNpZGU6ICdmcm9udCcgfCAnYmFjaycgfCAnZG91YmxlJyk6IFRIUkVFLlNpZGUge1xuICAgICAgICBzd2l0Y2ggKHNpZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Zyb250JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gVEhSRUUuRnJvbnRTaWRlO1xuICAgICAgICAgICAgY2FzZSAnYmFjayc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRIUkVFLkJhY2tTaWRlO1xuICAgICAgICAgICAgY2FzZSAnZG91YmxlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gVEhSRUUuRG91YmxlU2lkZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==