@pepperi-addons/ngx-lib 0.4.2-beta.161 → 0.4.2-beta.162

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.
@@ -319,7 +319,7 @@ export class PepCarouselComponent {
319
319
  this.reachesLeftBound.emit(false);
320
320
  this.reachesRightBound.emit(true);
321
321
  }
322
- else if (this._contentRef.nativeElement.scrollLeft === 0 &&
322
+ else if (this._contentRef.nativeElement.scrollLeft < 3 &&
323
323
  this._contentRef.nativeElement.scrollWidth >
324
324
  this._contentRef.nativeElement.clientWidth) {
325
325
  // reached left end
@@ -331,7 +331,7 @@ export class PepCarouselComponent {
331
331
  this.reachesLeftBound.emit(false);
332
332
  this.reachesRightBound.emit(false);
333
333
  }
334
- }, 100);
334
+ }, 0);
335
335
  }
336
336
  onWheel(event) {
337
337
  if (this._xWheelEnabled) {
@@ -742,4 +742,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
742
742
  type: HostListener,
743
743
  args: ['window:resize']
744
744
  }] } });
745
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9jYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBR04sWUFBWSxFQUNaLFNBQVMsRUFDVCxlQUFlLEVBR2YsTUFBTSxFQUNOLFdBQVcsRUFDWCxZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQXVCckUsTUFBTSxPQUFPLG9CQUFvQjtJQWdON0IsWUFDZ0MsV0FBdUIsRUFDeEIsU0FBb0IsRUFDckIsU0FBYztRQUZaLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBSztRQWpOcEMsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUVYLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV6QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbkIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUV0QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUV0QixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUVoQixrQkFBYSxHQUFHLEdBQUcsQ0FBQztRQUVwQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQVk1Qjs7V0FFRztRQUNILGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEI7O1dBRUc7UUFDSCxnQkFBVyxHQUFHLEtBQUssQ0FBQztR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cnQge1xuICAgIEVsZW1lbnRSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIFJlbmRlcmVyMixcbiAgICBPbkRlc3Ryb3ksXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBWaWV3Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgUXVlcnlMaXN0LFxuICAgIEluamVjdCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBQZXBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2Nhcm91c2VsLWl0ZW0uZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtY2Fyb3VzZWwnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJvdXNlbC1jb250ZW50XCIgI2NvbnRlbnRSZWY+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgIGAsXG4gICAgc3R5bGVzOiBbXG4gICAgICAgIGBcbiAgICAgICAgICAgIDpob3N0IHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmNhcm91c2VsLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgfVxuICAgICAgICBgLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBlcENhcm91c2VsQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gICAgcHJpdmF0ZSBfaW5kZXggPSAwO1xuXG4gICAgcHJpdmF0ZSBfc2Nyb2xsYmFySGlkZGVuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfeERpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF94V2hlZWxFbmFibGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF95RGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2RyYWdEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfc25hcERpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9zbmFwT2Zmc2V0ID0gMDtcblxuICAgIHByaXZhdGUgX3NuYXBEdXJhdGlvbiA9IDUwMDtcblxuICAgIHByaXZhdGUgX2lzRHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX29uTW91c2VNb3ZlTGlzdGVuZXI6ICgpID0+IGFueTtcblxuICAgIHByaXZhdGUgX29uTW91c2VVcExpc3RlbmVyOiAoKSA9PiBhbnk7XG5cbiAgICBwcml2YXRlIF9vbk1vdXNlRG93bkxpc3RlbmVyOiAoKSA9PiBhbnk7XG5cbiAgICBwcml2YXRlIF9vblNjcm9sbExpc3RlbmVyOiAoKSA9PiBhbnk7XG5cbiAgICBwcml2YXRlIF9vbkRyYWdTdGFydExpc3RlbmVyOiAoKSA9PiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgdXNlciBjdXJyZW50bHkgcHJlc3NpbmcgdGhlIGVsZW1lbnRcbiAgICAgKi9cbiAgICBpc1ByZXNzZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIElzIHRoZSB1c2VyIGN1cnJlbnRseSBzY3JvbGxpbmcgdGhlIGVsZW1lbnRcbiAgICAgKi9cbiAgICBpc1Njcm9sbGluZyA9IGZhbHNlO1xuXG4gICAgc2Nyb2xsVGltZXI6IGFueTsgLy8gfCBOb2RlSlMuVGltZXIgPSAtMTtcblxuICAgIHNjcm9sbFRvVGltZXI6IGFueTsgLy8gfCBOb2RlSlMuVGltZXIgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIElzIHRoZSB1c2VyIGN1cnJlbnRseSBkcmFnZ2luZyB0aGUgZWxlbWVudFxuICAgICAqL1xuICAgIGdldCBpc0RyYWdnaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNEcmFnZ2luZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgeCBjb29yZGluYXRlcyBvbiB0aGUgZWxlbWVudFxuICAgICAqL1xuICAgIGRvd25YID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB5IGNvb3JkaW5hdGVzIG9uIHRoZSBlbGVtZW50XG4gICAgICovXG4gICAgZG93blkgPSAwO1xuXG4gICAgZGlzcGxheVR5cGU6IHN0cmluZyB8IG51bGwgPSAnYmxvY2snO1xuXG4gICAgZWxXaWR0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBlbEhlaWdodDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGFyZW50Tm9kZSBvZiBjYXJvdXNlbCBFbGVtZW50XG4gICAgICovXG4gICAgcGFyZW50Tm9kZTogSFRNTEVsZW1lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2Fyb3VzZWwgRWxlbWVudFxuICAgICAqL1xuXG4gICAgQFZpZXdDaGlsZCgnY29udGVudFJlZicsIHsgc3RhdGljOiB0cnVlIH0pIF9jb250ZW50UmVmOiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihQZXBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBfY2hpbGRyZW46IFF1ZXJ5TGlzdDxQZXBDYXJvdXNlbEl0ZW1EaXJlY3RpdmU+O1xuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5wb2ludGVyLWV2ZW50cycpIF9wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuXG4gICAgd3JhcHBlcjogSFRNTERpdkVsZW1lbnQgfCBudWxsO1xuXG4gICAgc2Nyb2xsYmFyV2lkdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgZ2V0IGN1cnJJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luZGV4O1xuICAgIH1cbiAgICBzZXQgY3VyckluZGV4KHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5faW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuX2luZGV4ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmluZGV4Q2hhbmdlZC5lbWl0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzQW5pbWF0aW5nID0gZmFsc2U7XG5cbiAgICBwcmV2Q2hpbGRyZW5MZW5ndGggPSAwO1xuXG4gICAgaW5kZXhCb3VuZCA9IDA7XG5cbiAgICBAT3V0cHV0KCkgZHNJbml0aWFsaXplZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIEBPdXRwdXQoKSBpbmRleENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIEBPdXRwdXQoKSByZWFjaGVzTGVmdEJvdW5kID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQE91dHB1dCgpIHJlYWNoZXNSaWdodEJvdW5kID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQE91dHB1dCgpIHNuYXBBbmltYXRpb25GaW5pc2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgQE91dHB1dCgpIGRyYWdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIEBPdXRwdXQoKSBkcmFnRW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgc2Nyb2xsYmFyIGlzIGhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgnc2Nyb2xsYmFySGlkZGVuJylcbiAgICBnZXQgc2Nyb2xsYmFySGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsYmFySGlkZGVuO1xuICAgIH1cbiAgICBzZXQgc2Nyb2xsYmFySGlkZGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Njcm9sbGJhckhpZGRlbiA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNhbGx5IGRyYWdpbmcgYW5kIHNjcm9sbGluZyBpcyBiZSBkaXNhYmxlZFxuICAgICAqL1xuICAgIEBJbnB1dCgnZGlzYWJsZWQnKVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGhvcml6b250YWxseSBkcmFnZ2luZyBhbmQgc2Nyb2xsaW5nIGlzIGJlIGRpc2FibGVkXG4gICAgICovXG4gICAgQElucHV0KCd4RGlzYWJsZWQnKVxuICAgIGdldCB4RGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl94RGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCB4RGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5feERpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB2ZXJ0aWNhbGx5IGRyYWdnaW5nIGFuZCBzY3JvbGxpbmcgZXZlbnRzIGlzIGRpc2FibGVkXG4gICAgICovXG4gICAgQElucHV0KCd5RGlzYWJsZWQnKVxuICAgIGdldCB5RGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl95RGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCB5RGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5feURpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBzY3JvbGxpbmcgaG9yaXpvbnRhbGx5IHdpdGggbW91c2Ugd2hlZWwgaXMgZW5hYmxlZFxuICAgICAqL1xuICAgIEBJbnB1dCgneFdoZWVsRW5hYmxlZCcpXG4gICAgZ2V0IHhXaGVlbEVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl94V2hlZWxFbmFibGVkO1xuICAgIH1cbiAgICBzZXQgeFdoZWVsRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl94V2hlZWxFbmFibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQElucHV0KCdkcmFnRGlzYWJsZWQnKVxuICAgIGdldCBkcmFnRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcmFnRGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCBkcmFnRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZHJhZ0Rpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQElucHV0KCdzbmFwRGlzYWJsZWQnKVxuICAgIGdldCBzbmFwRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zbmFwRGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCBzbmFwRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc25hcERpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQElucHV0KCdzbmFwT2Zmc2V0JylcbiAgICBnZXQgc25hcE9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBPZmZzZXQ7XG4gICAgfVxuICAgIHNldCBzbmFwT2Zmc2V0KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fc25hcE9mZnNldCA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgnc25hcER1cmF0aW9uJylcbiAgICBnZXQgc25hcER1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc25hcER1cmF0aW9uO1xuICAgIH1cbiAgICBzZXQgc25hcER1cmF0aW9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fc25hcER1cmF0aW9uID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRWxlbWVudFJlZikgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQEluamVjdChSZW5kZXJlcjIpIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnlcbiAgICApIHtcbiAgICAgICAgdGhpcy5zY3JvbGxiYXJXaWR0aCA9IGAke3RoaXMuZ2V0U2Nyb2xsYmFyV2lkdGgoKX1weGA7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuc2V0U2Nyb2xsQmFyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMueERpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5fc2Nyb2xsYmFySGlkZGVuKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTY3JvbGwoJ3gnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlU2Nyb2xsKCd4Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy55RGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2Nyb2xsKCd5Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVNjcm9sbCgneScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICAvLyBhdXRvIGFzc2lnbiBjb21wdXRlZCBjc3NcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ2RyYWctc2Nyb2xsJyxcbiAgICAgICAgICAgICd0cnVlJ1xuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZGlzcGxheVR5cGUgPVxuICAgICAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgLmRpc3BsYXlcbiAgICAgICAgICAgICAgICA6ICdibG9jayc7XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAnZGlzcGxheScsXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlUeXBlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ3doaXRlU3BhY2UnLFxuICAgICAgICAgICAgJ25vV3JhcCdcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBzdG9yZSBlbGUgd2lkdGggaGVpZ2h0IGZvciBsYXRlciB1c2VyXG4gICAgICAgIHRoaXMubWFya0VsRGltZW5zaW9uKCk7XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgICAgdGhpcy5lbFdpZHRoXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICB0aGlzLmVsSGVpZ2h0XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMud3JhcHBlcikge1xuICAgICAgICAgICAgdGhpcy5jaGVja1Njcm9sbGJhcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb25Nb3VzZURvd25MaXN0ZW5lciA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICdtb3VzZWRvd24nLFxuICAgICAgICAgICAgdGhpcy5vbk1vdXNlRG93bkhhbmRsZXIuYmluZCh0aGlzKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9vblNjcm9sbExpc3RlbmVyID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgICAgICB0aGlzLm9uU2Nyb2xsSGFuZGxlci5iaW5kKHRoaXMpXG4gICAgICAgICk7XG4gICAgICAgIC8vIHByZXZlbnQgRmlyZWZveCBmcm9tIGRyYWdnaW5nIGltYWdlc1xuICAgICAgICB0aGlzLl9vbkRyYWdTdGFydExpc3RlbmVyID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICdkcmFnc3RhcnQnLFxuICAgICAgICAgICAgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2hlY2tOYXZTdGF0dXMoKTtcbiAgICAgICAgdGhpcy5kc0luaXRpYWxpemVkLmVtaXQoKTtcbiAgICAgICAgdGhpcy5hZGp1c3RNYXJnaW5Ub0xhc3RDaGlsZCgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgLy8gYXZvaWQgZXh0cmEgY2hlY2tzXG4gICAgICAgIGlmICh0aGlzLl9jaGlsZHJlbi5sZW5ndGggIT09IHRoaXMucHJldkNoaWxkcmVuTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm1hcmtFbERpbWVuc2lvbigpO1xuICAgICAgICAgICAgdGhpcy5jaGVja1Njcm9sbGJhcigpO1xuICAgICAgICAgICAgdGhpcy5wcmV2Q2hpbGRyZW5MZW5ndGggPSB0aGlzLl9jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmNoZWNrTmF2U3RhdHVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ2RyYWctc2Nyb2xsJyxcbiAgICAgICAgICAgICdmYWxzZSdcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuX29uTW91c2VEb3duTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX29uTW91c2VEb3duTGlzdGVuZXIgPSB0aGlzLl9vbk1vdXNlRG93bkxpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX29uU2Nyb2xsTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX29uU2Nyb2xsTGlzdGVuZXIgPSB0aGlzLl9vblNjcm9sbExpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX29uRHJhZ1N0YXJ0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX29uRHJhZ1N0YXJ0TGlzdGVuZXIgPSB0aGlzLl9vbkRyYWdTdGFydExpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1vdXNlTW92ZUhhbmRsZXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbk1vdXNlTW92ZShldmVudCk7XG4gICAgfVxuXG4gICAgb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQcmVzc2VkICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBwcmV2ZW50IHNjcm9sbCBzdHVjayBpZiBicm93c2VyIGxvc3QgZm9jdXNcbiAgICAgICAgICAgIC8vIE1vdXNlRXZlbnQuYnV0dG9ucyBub3Qgc3VwcG9ydCBieSBTYWZhcmlcbiAgICAgICAgICAgIGlmICghZXZlbnQuYnV0dG9ucyAmJiAhZXZlbnQud2hpY2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vbk1vdXNlVXBIYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fcG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgICAgICAgIHRoaXMuX3NldElzRHJhZ2dpbmcodHJ1ZSk7XG5cbiAgICAgICAgICAgIC8vIERyYWcgWFxuICAgICAgICAgICAgaWYgKCF0aGlzLnhEaXNhYmxlZCAmJiAhdGhpcy5kcmFnRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRYID0gKGV2ZW50IGFzIE1vdXNlRXZlbnQpLmNsaWVudFg7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCAtXG4gICAgICAgICAgICAgICAgICAgIGNsaWVudFggK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25YO1xuICAgICAgICAgICAgICAgIHRoaXMuZG93blggPSBjbGllbnRYO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEcmFnIFlcbiAgICAgICAgICAgIGlmICghdGhpcy55RGlzYWJsZWQgJiYgIXRoaXMuZHJhZ0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpZW50WSA9IChldmVudCBhcyBNb3VzZUV2ZW50KS5jbGllbnRZO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIC1cbiAgICAgICAgICAgICAgICAgICAgY2xpZW50WSArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG93blk7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3duWSA9IGNsaWVudFk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1vdXNlRG93bkhhbmRsZXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgY2Fyb3VzZWxJdGVtOiBQZXBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUgfCBudWxsID0gdGhpcy5sb2NhdGVDYXJvdXNlbEl0ZW0oXG4gICAgICAgICAgICBldmVudC50YXJnZXQgYXMgRWxlbWVudFxuICAgICAgICApO1xuICAgICAgICBpZiAoY2Fyb3VzZWxJdGVtICYmIGNhcm91c2VsSXRlbS5kcmFnRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzVG91Y2hFdmVudCA9IGV2ZW50LnR5cGUgPT09ICd0b3VjaHN0YXJ0JztcblxuICAgICAgICB0aGlzLl9zdGFydEdsb2JhbExpc3RlbmluZyhpc1RvdWNoRXZlbnQpO1xuICAgICAgICB0aGlzLmlzUHJlc3NlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IGV2ZW50IGFzIE1vdXNlRXZlbnQ7XG4gICAgICAgIHRoaXMuZG93blggPSBtb3VzZUV2ZW50LmNsaWVudFg7XG4gICAgICAgIHRoaXMuZG93blkgPSBtb3VzZUV2ZW50LmNsaWVudFk7XG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsVG9UaW1lciBhcyBudW1iZXIpO1xuICAgIH1cblxuICAgIG9uU2Nyb2xsSGFuZGxlcigpIHtcbiAgICAgICAgdGhpcy5jaGVja05hdlN0YXR1cygpO1xuICAgICAgICBpZiAoIXRoaXMuaXNQcmVzc2VkICYmICF0aGlzLmlzQW5pbWF0aW5nICYmICF0aGlzLnNuYXBEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9IHRydWU7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaW1lciBhcyBudW1iZXIpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2F0ZUN1cnJlbnRJbmRleCh0cnVlKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvY2F0ZUN1cnJlbnRJbmRleCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Nb3VzZVVwSGFuZGxlcihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc1ByZXNzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQcmVzc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgICAgICAgICAgdGhpcy5fc2V0SXNEcmFnZ2luZyhmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc25hcERpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhdGVDdXJyZW50SW5kZXgodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubG9jYXRlQ3VycmVudEluZGV4KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9zdG9wR2xvYmFsTGlzdGVuaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5hdiBidXR0b25cbiAgICAgKi9cbiAgICBtb3ZlTGVmdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VyckluZGV4ICE9PSAwIHx8IHRoaXMuc25hcERpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJJbmRleC0tO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsVG9UaW1lciBhcyBudW1iZXIpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyhcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgdGhpcy50b0NoaWxkcmVuTG9jYXRpb24oKSxcbiAgICAgICAgICAgICAgICB0aGlzLnNuYXBEdXJhdGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1vdmVSaWdodCgpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy53cmFwcGVyIHx8IHRoaXMucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXIgPyBjb250YWluZXIuY2xpZW50V2lkdGggOiAwO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmlzU2Nyb2xsUmVhY2hlc1JpZ2h0RW5kKCkgJiZcbiAgICAgICAgICAgIHRoaXMuY3VyckluZGV4IDxcbiAgICAgICAgICAgIHRoaXMubWF4aW11bUluZGV4KGNvbnRhaW5lcldpZHRoLCB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jdXJySW5kZXgrKztcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRvVGltZXIgYXMgbnVtYmVyKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMudG9DaGlsZHJlbkxvY2F0aW9uKCksXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwRHVyYXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb3ZlVG8oaW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLndyYXBwZXIgfHwgdGhpcy5wYXJlbnROb2RlO1xuICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5jbGllbnRXaWR0aCA6IDA7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGluZGV4ID49IDAgJiZcbiAgICAgICAgICAgIGluZGV4ICE9PSB0aGlzLmN1cnJJbmRleCAmJlxuICAgICAgICAgICAgdGhpcy5jdXJySW5kZXggPD1cbiAgICAgICAgICAgIHRoaXMubWF4aW11bUluZGV4KGNvbnRhaW5lcldpZHRoLCB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jdXJySW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICB0aGlzLm1heGltdW1JbmRleChjb250YWluZXJXaWR0aCwgdGhpcy5fY2hpbGRyZW4udG9BcnJheSgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRvVGltZXIgYXMgbnVtYmVyKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMudG9DaGlsZHJlbkxvY2F0aW9uKCksXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwRHVyYXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVja05hdlN0YXR1cygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvbmx5T25lSXRlbSA9IEJvb2xlYW4odGhpcy5fY2hpbGRyZW4ubGVuZ3RoIDw9IDEpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVySXNMYXJnZXJUaGFuQ29udGVudCA9IEJvb2xlYW4oXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoIDw9XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG9ubHlPbmVJdGVtIHx8IGNvbnRhaW5lcklzTGFyZ2VyVGhhbkNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBvbmx5IG9uZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFjaGVzTGVmdEJvdW5kLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFjaGVzUmlnaHRCb3VuZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzU2Nyb2xsUmVhY2hlc1JpZ2h0RW5kKCkpIHtcbiAgICAgICAgICAgICAgICAvLyByZWFjaGVkIHJpZ2h0IGVuZFxuICAgICAgICAgICAgICAgIHRoaXMucmVhY2hlc0xlZnRCb3VuZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWNoZXNSaWdodEJvdW5kLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID09PSAwICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoID5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIHJlYWNoZWQgbGVmdCBlbmRcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWNoZXNMZWZ0Qm91bmQuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWNoZXNSaWdodEJvdW5kLmVtaXQoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpbiB0aGUgbWlkZGxlXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFjaGVzTGVmdEJvdW5kLmVtaXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVhY2hlc1JpZ2h0Qm91bmQuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2hlZWwnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbldoZWVsKGV2ZW50OiBXaGVlbEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl94V2hlZWxFbmFibGVkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fc25hcERpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbEJ5KGV2ZW50LmRlbHRhWSwgMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5kZWx0YVkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZUxlZnQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmRlbHRhWSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlUmlnaHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgICBwdWJsaWMgb25XaW5kb3dSZXNpemUoKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaFdyYXBwZXJEaW1lbnNpb25zKCk7XG4gICAgICAgIHRoaXMuY2hlY2tOYXZTdGF0dXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRJc0RyYWdnaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0RyYWdnaW5nID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faXNEcmFnZ2luZyA9IHZhbHVlO1xuICAgICAgICB2YWx1ZSA/IHRoaXMuZHJhZ1N0YXJ0LmVtaXQoKSA6IHRoaXMuZHJhZ0VuZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RhcnRHbG9iYWxMaXN0ZW5pbmcoaXNUb3VjaEV2ZW50OiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdGhpcy5fb25Nb3VzZU1vdmVMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uc3QgZXZlbnROYW1lID0gaXNUb3VjaEV2ZW50ID8gJ3RvdWNobW92ZScgOiAnbW91c2Vtb3ZlJztcbiAgICAgICAgICAgIHRoaXMuX29uTW91c2VNb3ZlTGlzdGVuZXIgPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICAgICBldmVudE5hbWUsXG4gICAgICAgICAgICAgICAgdGhpcy5vbk1vdXNlTW92ZUhhbmRsZXIuYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fb25Nb3VzZVVwTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGlzVG91Y2hFdmVudCA/ICd0b3VjaGVuZCcgOiAnbW91c2V1cCc7XG4gICAgICAgICAgICB0aGlzLl9vbk1vdXNlVXBMaXN0ZW5lciA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICB0aGlzLm9uTW91c2VVcEhhbmRsZXIuYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3N0b3BHbG9iYWxMaXN0ZW5pbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLl9vbk1vdXNlTW92ZUxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9vbk1vdXNlTW92ZUxpc3RlbmVyID0gdGhpcy5fb25Nb3VzZU1vdmVMaXN0ZW5lcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX29uTW91c2VVcExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9vbk1vdXNlVXBMaXN0ZW5lciA9IHRoaXMuX29uTW91c2VVcExpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2FibGVTY3JvbGwoYXhpczogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgYG92ZXJmbG93LSR7YXhpc31gLFxuICAgICAgICAgICAgJ2hpZGRlbidcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuYWJsZVNjcm9sbChheGlzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBgb3ZlcmZsb3ctJHtheGlzfWAsXG4gICAgICAgICAgICAnYXV0bydcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVTY3JvbGxiYXIoKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgJiZcbiAgICAgICAgICAgICF0aGlzLndyYXBwZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUgPSB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZTtcblxuICAgICAgICAgICAgLy8gY3JlYXRlIGNvbnRhaW5lciBlbGVtZW50XG4gICAgICAgICAgICB0aGlzLndyYXBwZXIgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMud3JhcHBlciwgJ2Nhcm91c2VsLXdyYXBwZXInKTtcbiAgICAgICAgICAgIC8vIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLndyYXBwZXIsICdjbGFzcycsICdjYXJvdXNlbC13cmFwcGVyJyk7XG4gICAgICAgICAgICAvLyB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLndyYXBwZXIsICdjYXJvdXNlbC1jb250YWluZXInKTtcblxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoV3JhcHBlckRpbWVuc2lvbnMoKTtcblxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy53cmFwcGVyLCAnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7XG5cbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgICAgICAgIGBjYWxjKDEwMCUgKyAke3RoaXMuc2Nyb2xsYmFyV2lkdGh9KWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICAgICAgYGNhbGMoMTAwJSArICR7dGhpcy5zY3JvbGxiYXJXaWR0aH0pYFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gQXBwZW5kIGNvbnRhaW5lciBlbGVtZW50IHRvIGNvbXBvbmVudCBlbGVtZW50LlxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMud3JhcHBlclxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gQXBwZW5kIGNvbnRlbnQgZWxlbWVudCB0byBjb250YWluZXIgZWxlbWVudC5cbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKFxuICAgICAgICAgICAgICAgIHRoaXMud3JhcHBlcixcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuYWRqdXN0TWFyZ2luVG9MYXN0Q2hpbGQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd1Njcm9sbGJhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcHBlcikge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICAgICAgJzEwMCUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoZWlnaHQnLFxuICAgICAgICAgICAgICAgIHRoaXMud3JhcHBlci5zdHlsZS5oZWlnaHRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLndyYXBwZXIgPSBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLmFkanVzdE1hcmdpblRvTGFzdENoaWxkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrU2Nyb2xsYmFyKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGggPD1cbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgICAgICAgICAnMTAwJSdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICAgICAgYGNhbGMoMTAwJSArICR7dGhpcy5zY3JvbGxiYXJXaWR0aH0pYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IDw9XG4gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICAgICAgJzEwMCUnXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICAgICAgYGNhbGMoMTAwJSArICR7dGhpcy5zY3JvbGxiYXJXaWR0aH0pYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U2Nyb2xsQmFyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxiYXJIaWRkZW4pIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZVNjcm9sbGJhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93U2Nyb2xsYmFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNjcm9sbGJhcldpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCcm93c2VyIFNjcm9sbGJhciBXaWR0aHMgKDIwMTYpXG4gICAgICAgICAqIE9TWCAoQ2hyb21lLCBTYWZhcmksIEZpcmVmb3gpIC0gMTVweFxuICAgICAgICAgKiBXaW5kb3dzIFhQIChJRTcsIENocm9tZSwgRmlyZWZveCkgLSAxN3B4XG4gICAgICAgICAqIFdpbmRvd3MgNyAoSUUxMCwgSUUxMSwgQ2hyb21lLCBGaXJlZm94KSAtIDE3cHhcbiAgICAgICAgICogV2luZG93cyA4LjEgKElFMTEsIENocm9tZSwgRmlyZWZveCkgLSAxN3B4XG4gICAgICAgICAqIFdpbmRvd3MgMTAgKElFMTEsIENocm9tZSwgRmlyZWZveCkgLSAxN3B4XG4gICAgICAgICAqIFdpbmRvd3MgMTAgKEVkZ2UgMTIvMTMpIC0gMTJweFxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3Qgb3V0ZXIgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUob3V0ZXIsICd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShvdXRlciwgJ3dpZHRoJywgJzEwMHB4Jyk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKG91dGVyLCAnbXNPdmVyZmxvd1N0eWxlJywgJ3Njcm9sbGJhcicpOyAvLyBuZWVkZWQgZm9yIFdpbkpTIGFwcHNcbiAgICAgICAgLy8gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlcik7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuX2RvY3VtZW50LmJvZHksIG91dGVyKTtcbiAgICAgICAgLy8gdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5fcmVuZGVyZXIuc2VsZWN0Um9vdEVsZW1lbnQoJ2JvZHknKSwgb3V0ZXIpO1xuICAgICAgICBjb25zdCB3aWR0aE5vU2Nyb2xsID0gb3V0ZXIub2Zmc2V0V2lkdGg7XG4gICAgICAgIC8vIGZvcmNlIHNjcm9sbGJhcnNcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUob3V0ZXIsICdvdmVyZmxvdycsICdzY3JvbGwnKTtcblxuICAgICAgICAvLyBhZGQgaW5uZXJkaXZcbiAgICAgICAgY29uc3QgaW5uZXIgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoaW5uZXIsICd3aWR0aCcsICcxMDAlJyk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKG91dGVyLCBpbm5lcik7XG5cbiAgICAgICAgY29uc3Qgd2lkdGhXaXRoU2Nyb2xsID0gaW5uZXIub2Zmc2V0V2lkdGg7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGRpdnNcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5fZG9jdW1lbnQuYm9keSwgb3V0ZXIpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTY3JvbGxiYXIgd2lkdGggd2lsbCBiZSAwIG9uIE1hYyBPUyB3aXRoIHRoZVxuICAgICAgICAgKiBkZWZhdWx0IFwiT25seSBzaG93IHNjcm9sbGJhcnMgd2hlbiBzY3JvbGxpbmdcIiBzZXR0aW5nIChZb3NlbWl0ZSBhbmQgdXApLlxuICAgICAgICAgKiBzZXR0aW5nIGRlZmF1bHQgd2lkdGggdG8gMjA7XG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gd2lkdGhOb1Njcm9sbCAtIHdpZHRoV2l0aFNjcm9sbCB8fCAyMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hXcmFwcGVyRGltZW5zaW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcHBlcikge1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID1cbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0IHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy53cmFwcGVyLCAnd2lkdGgnLCAnMTAwJScpO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLFxuICAgICAgICAgICAgICAgICdoZWlnaHQnLFxuICAgICAgICAgICAgICAgIGhlaWdodCA9PT0gMCA/ICdhdXRvJyA6IGhlaWdodCArICdweCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFRoZSBiZWxvdyBzb2x1dGlvbiBpcyBoZWF2aWx5IGluc3BpcmVkIGZyb21cbiAgICAgKiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hbmRqb3NoLzY3NjQ5MzlcbiAgICAgKi9cbiAgICBwcml2YXRlIHNjcm9sbFRvKGVsZW1lbnQ6IEVsZW1lbnQsIHRvOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5pc0FuaW1hdGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgY2hhbmdlID0gdG8gLSBzdGFydCAtIHRoaXMuc25hcE9mZnNldCxcbiAgICAgICAgICAgIGluY3JlbWVudCA9IDIwO1xuICAgICAgICBsZXQgY3VycmVudFRpbWUgPSAwO1xuXG4gICAgICAgIC8vIHQgPSBjdXJyZW50IHRpbWVcbiAgICAgICAgLy8gYiA9IHN0YXJ0IHZhbHVlXG4gICAgICAgIC8vIGMgPSBjaGFuZ2UgaW4gdmFsdWVcbiAgICAgICAgLy8gZCA9IGR1cmF0aW9uXG4gICAgICAgIGNvbnN0IGVhc2VJbk91dFF1YWQgPSAodDogbnVtYmVyLCBiOiBudW1iZXIsIGM6IG51bWJlciwgZDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICB0IC89IGQgLyAyO1xuICAgICAgICAgICAgaWYgKHQgPCAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChjIC8gMikgKiB0ICogdCArIGI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0LS07XG4gICAgICAgICAgICByZXR1cm4gKC1jIC8gMikgKiAodCAqICh0IC0gMikgLSAxKSArIGI7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYW5pbWF0ZVNjcm9sbCA9ICgpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnRUaW1lICs9IGluY3JlbWVudDtcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCA9IGVhc2VJbk91dFF1YWQoXG4gICAgICAgICAgICAgICAgY3VycmVudFRpbWUsXG4gICAgICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICAgICAgY2hhbmdlLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRUaW1lIDwgZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvVGltZXIgPSBzZXRUaW1lb3V0KGFuaW1hdGVTY3JvbGwsIGluY3JlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHJ1biBvbmUgbW9yZSBmcmFtZSB0byBtYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyBmdWxseSBmaW5pc2hlZFxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc25hcEFuaW1hdGlvbkZpbmlzaGVkLmVtaXQodGhpcy5jdXJySW5kZXgpO1xuICAgICAgICAgICAgICAgIH0sIGluY3JlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGFuaW1hdGVTY3JvbGwoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvY2F0ZUN1cnJlbnRJbmRleChzbmFwPzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRDaGlsZFdpZHRoKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGN1cnJlbnRDaGlsZFdpZHRoLFxuICAgICAgICAgICAgICAgIG5leHRDaGlsZHJlbldpZHRoLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuV2lkdGgsXG4gICAgICAgICAgICAgICAgaWR4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgc3RvcFxuICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA+PVxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbldpZHRoICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0IDw9XG4gICAgICAgICAgICAgICAgICAgIG5leHRDaGlsZHJlbldpZHRoXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDaGlsZHJlbldpZHRoIC1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGlsZFdpZHRoIC8gMiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuaXNTY3JvbGxSZWFjaGVzUmlnaHRFbmQoKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJvbGwgYmFjayBzY3JvbGxpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0FuaW1hdGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VyckluZGV4ID0gaWR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNuYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc25hcER1cmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ICE9PSAwXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yd2FyZCBzY3JvbGxpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0FuaW1hdGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VyckluZGV4ID0gaWR4ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbmFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbldpZHRoICsgY3VycmVudENoaWxkV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc25hcER1cmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpZHggKyAxID09PSB0aGlzLl9jaGlsZHJlbi5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWNoZXMgbGFzdCBpbmRleFxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNBbmltYXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VyckluZGV4ID0gaWR4ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3VycmVudENoaWxkV2lkdGgoXG4gICAgICAgIGNiOiAoXG4gICAgICAgICAgICBjdXJyZW50Q2xpbGRXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgbmV4dENoaWxkcmVuV2lkdGg6IG51bWJlcixcbiAgICAgICAgICAgIGNoaWxkcmVuV2lkdGg6IG51bWJlcixcbiAgICAgICAgICAgIGluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICBicmVha0Z1bmM6ICgpID0+IHZvaWRcbiAgICAgICAgKSA9PiB2b2lkXG4gICAgKSB7XG4gICAgICAgIGxldCBjaGlsZHJlbldpZHRoID0gMDtcbiAgICAgICAgbGV0IHNob3VsZEJyZWFrID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGJyZWFrRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNob3VsZEJyZWFrID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5BcnIgPSB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbkFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPT09IGNoaWxkcmVuQXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaG91bGRCcmVhaykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXh0Q2hpbGRyZW5XaWR0aCA9XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5XaWR0aCArXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5BcnJbaSArIDFdLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q2xpbGRXaWR0aCA9XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5BcnJbaV0uX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIGNiKFxuICAgICAgICAgICAgICAgIGN1cnJlbnRDbGlsZFdpZHRoLFxuICAgICAgICAgICAgICAgIG5leHRDaGlsZHJlbldpZHRoLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuV2lkdGgsXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBicmVha0Z1bmNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNoaWxkcmVuV2lkdGggKz0gY3VycmVudENsaWxkV2lkdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRvQ2hpbGRyZW5Mb2NhdGlvbigpOiBudW1iZXIge1xuICAgICAgICBsZXQgdG8gPSAwO1xuICAgICAgICBjb25zdCBjaGlsZHJlbkFyciA9IHRoaXMuX2NoaWxkcmVuLnRvQXJyYXkoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmN1cnJJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICB0byArPSBjaGlsZHJlbkFycltpXS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvY2F0ZUNhcm91c2VsSXRlbShcbiAgICAgICAgZWxlbWVudDogRWxlbWVudFxuICAgICk6IFBlcENhcm91c2VsSXRlbURpcmVjdGl2ZSB8IG51bGwge1xuICAgICAgICBsZXQgaXRlbTogUGVwQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuQXJyID0gdGhpcy5fY2hpbGRyZW4udG9BcnJheSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gY2hpbGRyZW5BcnJbaV0uX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGl0ZW0gPSBjaGlsZHJlbkFycltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcmtFbERpbWVuc2lvbigpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcHBlcikge1xuICAgICAgICAgICAgdGhpcy5lbFdpZHRoID0gdGhpcy53cmFwcGVyLnN0eWxlLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5lbEhlaWdodCA9IHRoaXMud3JhcHBlci5zdHlsZS5oZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVsV2lkdGggPVxuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCB8fFxuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCArICdweCc7XG4gICAgICAgICAgICB0aGlzLmVsSGVpZ2h0ID1cbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0IHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy53cmFwcGVyIHx8IHRoaXMucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXIgPyBjb250YWluZXIuY2xpZW50V2lkdGggOiAwO1xuICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5pbmRleEJvdW5kID0gdGhpcy5tYXhpbXVtSW5kZXgoXG4gICAgICAgICAgICAgICAgY29udGFpbmVyV2lkdGgsXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4udG9BcnJheSgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXhpbXVtSW5kZXgoXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBudW1iZXIsXG4gICAgICAgIGNoaWxkcmVuRWxlbWVudHM6IFBlcENhcm91c2VsSXRlbURpcmVjdGl2ZVtdXG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgbGV0IGNoaWxkcmVuV2lkdGggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBjaGlsZHJlbkVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAvLyBsYXN0IE4gZWxlbWVudFxuICAgICAgICAgICAgY29uc3QgY2Fyb3VzZWxJdGVtRGlyZWN0aXZlOiBQZXBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUgPVxuICAgICAgICAgICAgICAgIGNoaWxkcmVuRWxlbWVudHNbY2hpbGRyZW5FbGVtZW50cy5sZW5ndGggLSAxIC0gaV07XG4gICAgICAgICAgICBpZiAoIWNhcm91c2VsSXRlbURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYXRpdmVFbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgY2Fyb3VzZWxJdGVtRGlyZWN0aXZlLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgbGV0IGl0ZW1XaWR0aCA9IG5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1XaWR0aCA9PT0gMCAmJiBuYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1XaWR0aCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJvdXNlbEl0ZW1EaXJlY3RpdmUuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maXJzdEVsZW1lbnRDaGlsZC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5XaWR0aCArPSBpdGVtV2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuV2lkdGggPCBjb250YWluZXJXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGRyZW5FbGVtZW50cy5sZW5ndGggLSBjb3VudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2Nyb2xsUmVhY2hlc1JpZ2h0RW5kKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzY3JvbGxMZWZ0UG9zID1cbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ICtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgcmV0dXJuIHNjcm9sbExlZnRQb3MgPj0gdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZHMgYSBtYXJnaW4gcmlnaHQgc3R5bGUgdG8gdGhlIGxhc3QgY2hpbGQgZWxlbWVudCB3aGljaCB3aWxsIHJlc29sdmUgdGhlIGlzc3VlXG4gICAgICogb2YgbGFzdCBpdGVtIGdldHMgY3V0b2ZmLlxuICAgICAqL1xuICAgIHByaXZhdGUgYWRqdXN0TWFyZ2luVG9MYXN0Q2hpbGQoKTogdm9pZCB7XG4gICAgICAgIC8vIGlmICh0aGlzLl9jaGlsZHJlbiAmJiB0aGlzLl9jaGlsZHJlbi5sZW5ndGggPiAwICYmIHRoaXMuaGlkZVNjcm9sbGJhcikge1xuICAgICAgICAvLyAgICAgY29uc3QgY2hpbGRyZW5BcnIgPSB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCk7XG4gICAgICAgIC8vICAgICBjb25zdCBsYXN0SXRlbSA9IGNoaWxkcmVuQXJyW2NoaWxkcmVuQXJyLmxlbmd0aCAtIDFdLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vICAgICBpZiAodGhpcy53cmFwcGVyICYmIGNoaWxkcmVuQXJyLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShsYXN0SXRlbSwgJ21hcmdpbi1yaWdodCcsIHRoaXMuc2Nyb2xsYmFyV2lkdGgpO1xuICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShsYXN0SXRlbSwgJ21hcmdpbi1yaWdodCcsIDApO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgfVxufVxuIl19
745
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9jYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBR04sWUFBWSxFQUNaLFNBQVMsRUFDVCxlQUFlLEVBR2YsTUFBTSxFQUNOLFdBQVcsRUFDWCxZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQXVCckUsTUFBTSxPQUFPLG9CQUFvQjtJQWdON0IsWUFDZ0MsV0FBdUIsRUFDeEIsU0FBb0IsRUFDckIsU0FBYztRQUZaLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBSztRQWpOcEMsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUVYLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV6QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbkIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUV0QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUV0QixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUVoQixrQkFBYSxHQUFHLEdBQUcsQ0FBQztRQUVwQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQVk1Qjs7V0FFRztRQUNILGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEI7O1dBRUc7UUFDSCxnQkFBVyxHQUFHLEtBQUssQ0FBQztR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cnQge1xuICAgIEVsZW1lbnRSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIFJlbmRlcmVyMixcbiAgICBPbkRlc3Ryb3ksXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBWaWV3Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgUXVlcnlMaXN0LFxuICAgIEluamVjdCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBQZXBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2Nhcm91c2VsLWl0ZW0uZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtY2Fyb3VzZWwnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJvdXNlbC1jb250ZW50XCIgI2NvbnRlbnRSZWY+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgIGAsXG4gICAgc3R5bGVzOiBbXG4gICAgICAgIGBcbiAgICAgICAgICAgIDpob3N0IHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmNhcm91c2VsLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgfVxuICAgICAgICBgLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBlcENhcm91c2VsQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gICAgcHJpdmF0ZSBfaW5kZXggPSAwO1xuXG4gICAgcHJpdmF0ZSBfc2Nyb2xsYmFySGlkZGVuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfeERpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF94V2hlZWxFbmFibGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF95RGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2RyYWdEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfc25hcERpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9zbmFwT2Zmc2V0ID0gMDtcblxuICAgIHByaXZhdGUgX3NuYXBEdXJhdGlvbiA9IDUwMDtcblxuICAgIHByaXZhdGUgX2lzRHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX29uTW91c2VNb3ZlTGlzdGVuZXI6ICgpID0+IGFueTtcblxuICAgIHByaXZhdGUgX29uTW91c2VVcExpc3RlbmVyOiAoKSA9PiBhbnk7XG5cbiAgICBwcml2YXRlIF9vbk1vdXNlRG93bkxpc3RlbmVyOiAoKSA9PiBhbnk7XG5cbiAgICBwcml2YXRlIF9vblNjcm9sbExpc3RlbmVyOiAoKSA9PiBhbnk7XG5cbiAgICBwcml2YXRlIF9vbkRyYWdTdGFydExpc3RlbmVyOiAoKSA9PiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgdXNlciBjdXJyZW50bHkgcHJlc3NpbmcgdGhlIGVsZW1lbnRcbiAgICAgKi9cbiAgICBpc1ByZXNzZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIElzIHRoZSB1c2VyIGN1cnJlbnRseSBzY3JvbGxpbmcgdGhlIGVsZW1lbnRcbiAgICAgKi9cbiAgICBpc1Njcm9sbGluZyA9IGZhbHNlO1xuXG4gICAgc2Nyb2xsVGltZXI6IGFueTsgLy8gfCBOb2RlSlMuVGltZXIgPSAtMTtcblxuICAgIHNjcm9sbFRvVGltZXI6IGFueTsgLy8gfCBOb2RlSlMuVGltZXIgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIElzIHRoZSB1c2VyIGN1cnJlbnRseSBkcmFnZ2luZyB0aGUgZWxlbWVudFxuICAgICAqL1xuICAgIGdldCBpc0RyYWdnaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNEcmFnZ2luZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgeCBjb29yZGluYXRlcyBvbiB0aGUgZWxlbWVudFxuICAgICAqL1xuICAgIGRvd25YID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB5IGNvb3JkaW5hdGVzIG9uIHRoZSBlbGVtZW50XG4gICAgICovXG4gICAgZG93blkgPSAwO1xuXG4gICAgZGlzcGxheVR5cGU6IHN0cmluZyB8IG51bGwgPSAnYmxvY2snO1xuXG4gICAgZWxXaWR0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBlbEhlaWdodDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGFyZW50Tm9kZSBvZiBjYXJvdXNlbCBFbGVtZW50XG4gICAgICovXG4gICAgcGFyZW50Tm9kZTogSFRNTEVsZW1lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2Fyb3VzZWwgRWxlbWVudFxuICAgICAqL1xuXG4gICAgQFZpZXdDaGlsZCgnY29udGVudFJlZicsIHsgc3RhdGljOiB0cnVlIH0pIF9jb250ZW50UmVmOiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihQZXBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBfY2hpbGRyZW46IFF1ZXJ5TGlzdDxQZXBDYXJvdXNlbEl0ZW1EaXJlY3RpdmU+O1xuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5wb2ludGVyLWV2ZW50cycpIF9wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuXG4gICAgd3JhcHBlcjogSFRNTERpdkVsZW1lbnQgfCBudWxsO1xuXG4gICAgc2Nyb2xsYmFyV2lkdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgZ2V0IGN1cnJJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luZGV4O1xuICAgIH1cbiAgICBzZXQgY3VyckluZGV4KHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5faW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuX2luZGV4ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmluZGV4Q2hhbmdlZC5lbWl0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzQW5pbWF0aW5nID0gZmFsc2U7XG5cbiAgICBwcmV2Q2hpbGRyZW5MZW5ndGggPSAwO1xuXG4gICAgaW5kZXhCb3VuZCA9IDA7XG5cbiAgICBAT3V0cHV0KCkgZHNJbml0aWFsaXplZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIEBPdXRwdXQoKSBpbmRleENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIEBPdXRwdXQoKSByZWFjaGVzTGVmdEJvdW5kID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQE91dHB1dCgpIHJlYWNoZXNSaWdodEJvdW5kID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQE91dHB1dCgpIHNuYXBBbmltYXRpb25GaW5pc2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgQE91dHB1dCgpIGRyYWdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIEBPdXRwdXQoKSBkcmFnRW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgc2Nyb2xsYmFyIGlzIGhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgnc2Nyb2xsYmFySGlkZGVuJylcbiAgICBnZXQgc2Nyb2xsYmFySGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsYmFySGlkZGVuO1xuICAgIH1cbiAgICBzZXQgc2Nyb2xsYmFySGlkZGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Njcm9sbGJhckhpZGRlbiA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNhbGx5IGRyYWdpbmcgYW5kIHNjcm9sbGluZyBpcyBiZSBkaXNhYmxlZFxuICAgICAqL1xuICAgIEBJbnB1dCgnZGlzYWJsZWQnKVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGhvcml6b250YWxseSBkcmFnZ2luZyBhbmQgc2Nyb2xsaW5nIGlzIGJlIGRpc2FibGVkXG4gICAgICovXG4gICAgQElucHV0KCd4RGlzYWJsZWQnKVxuICAgIGdldCB4RGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl94RGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCB4RGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5feERpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB2ZXJ0aWNhbGx5IGRyYWdnaW5nIGFuZCBzY3JvbGxpbmcgZXZlbnRzIGlzIGRpc2FibGVkXG4gICAgICovXG4gICAgQElucHV0KCd5RGlzYWJsZWQnKVxuICAgIGdldCB5RGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl95RGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCB5RGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5feURpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBzY3JvbGxpbmcgaG9yaXpvbnRhbGx5IHdpdGggbW91c2Ugd2hlZWwgaXMgZW5hYmxlZFxuICAgICAqL1xuICAgIEBJbnB1dCgneFdoZWVsRW5hYmxlZCcpXG4gICAgZ2V0IHhXaGVlbEVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl94V2hlZWxFbmFibGVkO1xuICAgIH1cbiAgICBzZXQgeFdoZWVsRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl94V2hlZWxFbmFibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQElucHV0KCdkcmFnRGlzYWJsZWQnKVxuICAgIGdldCBkcmFnRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcmFnRGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCBkcmFnRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZHJhZ0Rpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQElucHV0KCdzbmFwRGlzYWJsZWQnKVxuICAgIGdldCBzbmFwRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zbmFwRGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCBzbmFwRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc25hcERpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQElucHV0KCdzbmFwT2Zmc2V0JylcbiAgICBnZXQgc25hcE9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBPZmZzZXQ7XG4gICAgfVxuICAgIHNldCBzbmFwT2Zmc2V0KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fc25hcE9mZnNldCA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgnc25hcER1cmF0aW9uJylcbiAgICBnZXQgc25hcER1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc25hcER1cmF0aW9uO1xuICAgIH1cbiAgICBzZXQgc25hcER1cmF0aW9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fc25hcER1cmF0aW9uID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRWxlbWVudFJlZikgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQEluamVjdChSZW5kZXJlcjIpIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnlcbiAgICApIHtcbiAgICAgICAgdGhpcy5zY3JvbGxiYXJXaWR0aCA9IGAke3RoaXMuZ2V0U2Nyb2xsYmFyV2lkdGgoKX1weGA7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuc2V0U2Nyb2xsQmFyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMueERpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5fc2Nyb2xsYmFySGlkZGVuKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTY3JvbGwoJ3gnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlU2Nyb2xsKCd4Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy55RGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2Nyb2xsKCd5Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVNjcm9sbCgneScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICAvLyBhdXRvIGFzc2lnbiBjb21wdXRlZCBjc3NcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ2RyYWctc2Nyb2xsJyxcbiAgICAgICAgICAgICd0cnVlJ1xuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZGlzcGxheVR5cGUgPVxuICAgICAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgLmRpc3BsYXlcbiAgICAgICAgICAgICAgICA6ICdibG9jayc7XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAnZGlzcGxheScsXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlUeXBlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ3doaXRlU3BhY2UnLFxuICAgICAgICAgICAgJ25vV3JhcCdcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBzdG9yZSBlbGUgd2lkdGggaGVpZ2h0IGZvciBsYXRlciB1c2VyXG4gICAgICAgIHRoaXMubWFya0VsRGltZW5zaW9uKCk7XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgICAgdGhpcy5lbFdpZHRoXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICB0aGlzLmVsSGVpZ2h0XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMud3JhcHBlcikge1xuICAgICAgICAgICAgdGhpcy5jaGVja1Njcm9sbGJhcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb25Nb3VzZURvd25MaXN0ZW5lciA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICdtb3VzZWRvd24nLFxuICAgICAgICAgICAgdGhpcy5vbk1vdXNlRG93bkhhbmRsZXIuYmluZCh0aGlzKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9vblNjcm9sbExpc3RlbmVyID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgICAgICB0aGlzLm9uU2Nyb2xsSGFuZGxlci5iaW5kKHRoaXMpXG4gICAgICAgICk7XG4gICAgICAgIC8vIHByZXZlbnQgRmlyZWZveCBmcm9tIGRyYWdnaW5nIGltYWdlc1xuICAgICAgICB0aGlzLl9vbkRyYWdTdGFydExpc3RlbmVyID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICdkcmFnc3RhcnQnLFxuICAgICAgICAgICAgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2hlY2tOYXZTdGF0dXMoKTtcbiAgICAgICAgdGhpcy5kc0luaXRpYWxpemVkLmVtaXQoKTtcbiAgICAgICAgdGhpcy5hZGp1c3RNYXJnaW5Ub0xhc3RDaGlsZCgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgLy8gYXZvaWQgZXh0cmEgY2hlY2tzXG4gICAgICAgIGlmICh0aGlzLl9jaGlsZHJlbi5sZW5ndGggIT09IHRoaXMucHJldkNoaWxkcmVuTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm1hcmtFbERpbWVuc2lvbigpO1xuICAgICAgICAgICAgdGhpcy5jaGVja1Njcm9sbGJhcigpO1xuICAgICAgICAgICAgdGhpcy5wcmV2Q2hpbGRyZW5MZW5ndGggPSB0aGlzLl9jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmNoZWNrTmF2U3RhdHVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ2RyYWctc2Nyb2xsJyxcbiAgICAgICAgICAgICdmYWxzZSdcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuX29uTW91c2VEb3duTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX29uTW91c2VEb3duTGlzdGVuZXIgPSB0aGlzLl9vbk1vdXNlRG93bkxpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX29uU2Nyb2xsTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX29uU2Nyb2xsTGlzdGVuZXIgPSB0aGlzLl9vblNjcm9sbExpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX29uRHJhZ1N0YXJ0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX29uRHJhZ1N0YXJ0TGlzdGVuZXIgPSB0aGlzLl9vbkRyYWdTdGFydExpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1vdXNlTW92ZUhhbmRsZXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbk1vdXNlTW92ZShldmVudCk7XG4gICAgfVxuXG4gICAgb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQcmVzc2VkICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBwcmV2ZW50IHNjcm9sbCBzdHVjayBpZiBicm93c2VyIGxvc3QgZm9jdXNcbiAgICAgICAgICAgIC8vIE1vdXNlRXZlbnQuYnV0dG9ucyBub3Qgc3VwcG9ydCBieSBTYWZhcmlcbiAgICAgICAgICAgIGlmICghZXZlbnQuYnV0dG9ucyAmJiAhZXZlbnQud2hpY2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vbk1vdXNlVXBIYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fcG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgICAgICAgIHRoaXMuX3NldElzRHJhZ2dpbmcodHJ1ZSk7XG5cbiAgICAgICAgICAgIC8vIERyYWcgWFxuICAgICAgICAgICAgaWYgKCF0aGlzLnhEaXNhYmxlZCAmJiAhdGhpcy5kcmFnRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRYID0gKGV2ZW50IGFzIE1vdXNlRXZlbnQpLmNsaWVudFg7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCAtXG4gICAgICAgICAgICAgICAgICAgIGNsaWVudFggK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25YO1xuICAgICAgICAgICAgICAgIHRoaXMuZG93blggPSBjbGllbnRYO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEcmFnIFlcbiAgICAgICAgICAgIGlmICghdGhpcy55RGlzYWJsZWQgJiYgIXRoaXMuZHJhZ0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpZW50WSA9IChldmVudCBhcyBNb3VzZUV2ZW50KS5jbGllbnRZO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIC1cbiAgICAgICAgICAgICAgICAgICAgY2xpZW50WSArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG93blk7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3duWSA9IGNsaWVudFk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1vdXNlRG93bkhhbmRsZXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgY2Fyb3VzZWxJdGVtOiBQZXBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUgfCBudWxsID0gdGhpcy5sb2NhdGVDYXJvdXNlbEl0ZW0oXG4gICAgICAgICAgICBldmVudC50YXJnZXQgYXMgRWxlbWVudFxuICAgICAgICApO1xuICAgICAgICBpZiAoY2Fyb3VzZWxJdGVtICYmIGNhcm91c2VsSXRlbS5kcmFnRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzVG91Y2hFdmVudCA9IGV2ZW50LnR5cGUgPT09ICd0b3VjaHN0YXJ0JztcblxuICAgICAgICB0aGlzLl9zdGFydEdsb2JhbExpc3RlbmluZyhpc1RvdWNoRXZlbnQpO1xuICAgICAgICB0aGlzLmlzUHJlc3NlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IGV2ZW50IGFzIE1vdXNlRXZlbnQ7XG4gICAgICAgIHRoaXMuZG93blggPSBtb3VzZUV2ZW50LmNsaWVudFg7XG4gICAgICAgIHRoaXMuZG93blkgPSBtb3VzZUV2ZW50LmNsaWVudFk7XG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsVG9UaW1lciBhcyBudW1iZXIpO1xuICAgIH1cblxuICAgIG9uU2Nyb2xsSGFuZGxlcigpIHtcbiAgICAgICAgdGhpcy5jaGVja05hdlN0YXR1cygpO1xuICAgICAgICBpZiAoIXRoaXMuaXNQcmVzc2VkICYmICF0aGlzLmlzQW5pbWF0aW5nICYmICF0aGlzLnNuYXBEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9IHRydWU7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaW1lciBhcyBudW1iZXIpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2F0ZUN1cnJlbnRJbmRleCh0cnVlKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvY2F0ZUN1cnJlbnRJbmRleCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Nb3VzZVVwSGFuZGxlcihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc1ByZXNzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQcmVzc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgICAgICAgICAgdGhpcy5fc2V0SXNEcmFnZ2luZyhmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc25hcERpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhdGVDdXJyZW50SW5kZXgodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubG9jYXRlQ3VycmVudEluZGV4KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9zdG9wR2xvYmFsTGlzdGVuaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5hdiBidXR0b25cbiAgICAgKi9cbiAgICBtb3ZlTGVmdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VyckluZGV4ICE9PSAwIHx8IHRoaXMuc25hcERpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJJbmRleC0tO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsVG9UaW1lciBhcyBudW1iZXIpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyhcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgdGhpcy50b0NoaWxkcmVuTG9jYXRpb24oKSxcbiAgICAgICAgICAgICAgICB0aGlzLnNuYXBEdXJhdGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1vdmVSaWdodCgpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy53cmFwcGVyIHx8IHRoaXMucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXIgPyBjb250YWluZXIuY2xpZW50V2lkdGggOiAwO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmlzU2Nyb2xsUmVhY2hlc1JpZ2h0RW5kKCkgJiZcbiAgICAgICAgICAgIHRoaXMuY3VyckluZGV4IDxcbiAgICAgICAgICAgIHRoaXMubWF4aW11bUluZGV4KGNvbnRhaW5lcldpZHRoLCB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jdXJySW5kZXgrKztcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRvVGltZXIgYXMgbnVtYmVyKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMudG9DaGlsZHJlbkxvY2F0aW9uKCksXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwRHVyYXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb3ZlVG8oaW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLndyYXBwZXIgfHwgdGhpcy5wYXJlbnROb2RlO1xuICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5jbGllbnRXaWR0aCA6IDA7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGluZGV4ID49IDAgJiZcbiAgICAgICAgICAgIGluZGV4ICE9PSB0aGlzLmN1cnJJbmRleCAmJlxuICAgICAgICAgICAgdGhpcy5jdXJySW5kZXggPD1cbiAgICAgICAgICAgIHRoaXMubWF4aW11bUluZGV4KGNvbnRhaW5lcldpZHRoLCB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jdXJySW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICB0aGlzLm1heGltdW1JbmRleChjb250YWluZXJXaWR0aCwgdGhpcy5fY2hpbGRyZW4udG9BcnJheSgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRvVGltZXIgYXMgbnVtYmVyKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMudG9DaGlsZHJlbkxvY2F0aW9uKCksXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwRHVyYXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVja05hdlN0YXR1cygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvbmx5T25lSXRlbSA9IEJvb2xlYW4odGhpcy5fY2hpbGRyZW4ubGVuZ3RoIDw9IDEpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVySXNMYXJnZXJUaGFuQ29udGVudCA9IEJvb2xlYW4oXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoIDw9XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG9ubHlPbmVJdGVtIHx8IGNvbnRhaW5lcklzTGFyZ2VyVGhhbkNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBvbmx5IG9uZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFjaGVzTGVmdEJvdW5kLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFjaGVzUmlnaHRCb3VuZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzU2Nyb2xsUmVhY2hlc1JpZ2h0RW5kKCkpIHtcbiAgICAgICAgICAgICAgICAvLyByZWFjaGVkIHJpZ2h0IGVuZFxuICAgICAgICAgICAgICAgIHRoaXMucmVhY2hlc0xlZnRCb3VuZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWNoZXNSaWdodEJvdW5kLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0IDwgMyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCA+XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyByZWFjaGVkIGxlZnQgZW5kXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFjaGVzTGVmdEJvdW5kLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFjaGVzUmlnaHRCb3VuZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaW4gdGhlIG1pZGRsZVxuICAgICAgICAgICAgICAgIHRoaXMucmVhY2hlc0xlZnRCb3VuZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWNoZXNSaWdodEJvdW5kLmVtaXQoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aGVlbCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uV2hlZWwoZXZlbnQ6IFdoZWVsRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX3hXaGVlbEVuYWJsZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zbmFwRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsQnkoZXZlbnQuZGVsdGFZLCAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmRlbHRhWSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlTGVmdCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuZGVsdGFZID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVSaWdodCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICAgIHB1YmxpYyBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoV3JhcHBlckRpbWVuc2lvbnMoKTtcbiAgICAgICAgdGhpcy5jaGVja05hdlN0YXR1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldElzRHJhZ2dpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRHJhZ2dpbmcgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pc0RyYWdnaW5nID0gdmFsdWU7XG4gICAgICAgIHZhbHVlID8gdGhpcy5kcmFnU3RhcnQuZW1pdCgpIDogdGhpcy5kcmFnRW5kLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zdGFydEdsb2JhbExpc3RlbmluZyhpc1RvdWNoRXZlbnQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLl9vbk1vdXNlTW92ZUxpc3RlbmVyKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSBpc1RvdWNoRXZlbnQgPyAndG91Y2htb3ZlJyA6ICdtb3VzZW1vdmUnO1xuICAgICAgICAgICAgdGhpcy5fb25Nb3VzZU1vdmVMaXN0ZW5lciA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICB0aGlzLm9uTW91c2VNb3ZlSGFuZGxlci5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9vbk1vdXNlVXBMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uc3QgZXZlbnROYW1lID0gaXNUb3VjaEV2ZW50ID8gJ3RvdWNoZW5kJyA6ICdtb3VzZXVwJztcbiAgICAgICAgICAgIHRoaXMuX29uTW91c2VVcExpc3RlbmVyID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgICAgICdkb2N1bWVudCcsXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgICAgIHRoaXMub25Nb3VzZVVwSGFuZGxlci5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RvcEdsb2JhbExpc3RlbmluZygpIHtcbiAgICAgICAgaWYgKHRoaXMuX29uTW91c2VNb3ZlTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX29uTW91c2VNb3ZlTGlzdGVuZXIgPSB0aGlzLl9vbk1vdXNlTW92ZUxpc3RlbmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fb25Nb3VzZVVwTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX29uTW91c2VVcExpc3RlbmVyID0gdGhpcy5fb25Nb3VzZVVwTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGlzYWJsZVNjcm9sbChheGlzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBgb3ZlcmZsb3ctJHtheGlzfWAsXG4gICAgICAgICAgICAnaGlkZGVuJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlU2Nyb2xsKGF4aXM6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIGBvdmVyZmxvdy0ke2F4aXN9YCxcbiAgICAgICAgICAgICdhdXRvJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZVNjcm9sbGJhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgIT09ICdub25lJyAmJlxuICAgICAgICAgICAgIXRoaXMud3JhcHBlclxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZSA9IHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlO1xuXG4gICAgICAgICAgICAvLyBjcmVhdGUgY29udGFpbmVyIGVsZW1lbnRcbiAgICAgICAgICAgIHRoaXMud3JhcHBlciA9IHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy53cmFwcGVyLCAnY2Fyb3VzZWwtd3JhcHBlcicpO1xuICAgICAgICAgICAgLy8gdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMud3JhcHBlciwgJ2NsYXNzJywgJ2Nhcm91c2VsLXdyYXBwZXInKTtcbiAgICAgICAgICAgIC8vIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMud3JhcHBlciwgJ2Nhcm91c2VsLWNvbnRhaW5lcicpO1xuXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hXcmFwcGVyRGltZW5zaW9ucygpO1xuXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLndyYXBwZXIsICdvdmVyZmxvdycsICdoaWRkZW4nKTtcblxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICAgICAgYGNhbGMoMTAwJSArICR7dGhpcy5zY3JvbGxiYXJXaWR0aH0pYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgICAgICAgICBgY2FsYygxMDAlICsgJHt0aGlzLnNjcm9sbGJhcldpZHRofSlgXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBBcHBlbmQgY29udGFpbmVyIGVsZW1lbnQgdG8gY29tcG9uZW50IGVsZW1lbnQuXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBBcHBlbmQgY29udGVudCBlbGVtZW50IHRvIGNvbnRhaW5lciBlbGVtZW50LlxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5hZGp1c3RNYXJnaW5Ub0xhc3RDaGlsZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93U2Nyb2xsYmFyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAnMTAwJSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLnN0eWxlLmhlaWdodFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy53cmFwcGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud3JhcHBlciA9IG51bGw7XG5cbiAgICAgICAgICAgIHRoaXMuYWRqdXN0TWFyZ2luVG9MYXN0Q2hpbGQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tTY3JvbGxiYXIoKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCA8PVxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoZWlnaHQnLFxuICAgICAgICAgICAgICAgICcxMDAlJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgICAgICAgICBgY2FsYygxMDAlICsgJHt0aGlzLnNjcm9sbGJhcldpZHRofSlgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPD1cbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAnMTAwJSdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICBgY2FsYygxMDAlICsgJHt0aGlzLnNjcm9sbGJhcldpZHRofSlgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTY3JvbGxCYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbGJhckhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5oaWRlU2Nyb2xsYmFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dTY3JvbGxiYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2Nyb2xsYmFyV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJyb3dzZXIgU2Nyb2xsYmFyIFdpZHRocyAoMjAxNilcbiAgICAgICAgICogT1NYIChDaHJvbWUsIFNhZmFyaSwgRmlyZWZveCkgLSAxNXB4XG4gICAgICAgICAqIFdpbmRvd3MgWFAgKElFNywgQ2hyb21lLCBGaXJlZm94KSAtIDE3cHhcbiAgICAgICAgICogV2luZG93cyA3IChJRTEwLCBJRTExLCBDaHJvbWUsIEZpcmVmb3gpIC0gMTdweFxuICAgICAgICAgKiBXaW5kb3dzIDguMSAoSUUxMSwgQ2hyb21lLCBGaXJlZm94KSAtIDE3cHhcbiAgICAgICAgICogV2luZG93cyAxMCAoSUUxMSwgQ2hyb21lLCBGaXJlZm94KSAtIDE3cHhcbiAgICAgICAgICogV2luZG93cyAxMCAoRWRnZSAxMi8xMykgLSAxMnB4XG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBvdXRlciA9IHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShvdXRlciwgJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKG91dGVyLCAnd2lkdGgnLCAnMTAwcHgnKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUob3V0ZXIsICdtc092ZXJmbG93U3R5bGUnLCAnc2Nyb2xsYmFyJyk7IC8vIG5lZWRlZCBmb3IgV2luSlMgYXBwc1xuICAgICAgICAvLyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9jdW1lbnQuYm9keSwgb3V0ZXIpO1xuICAgICAgICAvLyB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLl9yZW5kZXJlci5zZWxlY3RSb290RWxlbWVudCgnYm9keScpLCBvdXRlcik7XG4gICAgICAgIGNvbnN0IHdpZHRoTm9TY3JvbGwgPSBvdXRlci5vZmZzZXRXaWR0aDtcbiAgICAgICAgLy8gZm9yY2Ugc2Nyb2xsYmFyc1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShvdXRlciwgJ292ZXJmbG93JywgJ3Njcm9sbCcpO1xuXG4gICAgICAgIC8vIGFkZCBpbm5lcmRpdlxuICAgICAgICBjb25zdCBpbm5lciA9IHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShpbm5lciwgJ3dpZHRoJywgJzEwMCUnKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQob3V0ZXIsIGlubmVyKTtcblxuICAgICAgICBjb25zdCB3aWR0aFdpdGhTY3JvbGwgPSBpbm5lci5vZmZzZXRXaWR0aDtcblxuICAgICAgICAvLyByZW1vdmUgZGl2c1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLl9kb2N1bWVudC5ib2R5LCBvdXRlcik7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNjcm9sbGJhciB3aWR0aCB3aWxsIGJlIDAgb24gTWFjIE9TIHdpdGggdGhlXG4gICAgICAgICAqIGRlZmF1bHQgXCJPbmx5IHNob3cgc2Nyb2xsYmFycyB3aGVuIHNjcm9sbGluZ1wiIHNldHRpbmcgKFlvc2VtaXRlIGFuZCB1cCkuXG4gICAgICAgICAqIHNldHRpbmcgZGVmYXVsdCB3aWR0aCB0byAyMDtcbiAgICAgICAgICovXG4gICAgICAgIHJldHVybiB3aWR0aE5vU2Nyb2xsIC0gd2lkdGhXaXRoU2Nyb2xsIHx8IDIwO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaFdyYXBwZXJEaW1lbnNpb25zKCkge1xuICAgICAgICBpZiAodGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPVxuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLndyYXBwZXIsICd3aWR0aCcsICcxMDAlJyk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICB0aGlzLndyYXBwZXIsXG4gICAgICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID09PSAwID8gJ2F1dG8nIDogaGVpZ2h0ICsgJ3B4J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qXG4gICAgICogVGhlIGJlbG93IHNvbHV0aW9uIGlzIGhlYXZpbHkgaW5zcGlyZWQgZnJvbVxuICAgICAqIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2FuZGpvc2gvNjc2NDkzOVxuICAgICAqL1xuICAgIHByaXZhdGUgc2Nyb2xsVG8oZWxlbWVudDogRWxlbWVudCwgdG86IG51bWJlciwgZHVyYXRpb246IG51bWJlcikge1xuICAgICAgICB0aGlzLmlzQW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgICAgICAgICBjaGFuZ2UgPSB0byAtIHN0YXJ0IC0gdGhpcy5zbmFwT2Zmc2V0LFxuICAgICAgICAgICAgaW5jcmVtZW50ID0gMjA7XG4gICAgICAgIGxldCBjdXJyZW50VGltZSA9IDA7XG5cbiAgICAgICAgLy8gdCA9IGN1cnJlbnQgdGltZVxuICAgICAgICAvLyBiID0gc3RhcnQgdmFsdWVcbiAgICAgICAgLy8gYyA9IGNoYW5nZSBpbiB2YWx1ZVxuICAgICAgICAvLyBkID0gZHVyYXRpb25cbiAgICAgICAgY29uc3QgZWFzZUluT3V0UXVhZCA9ICh0OiBudW1iZXIsIGI6IG51bWJlciwgYzogbnVtYmVyLCBkOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHQgLz0gZCAvIDI7XG4gICAgICAgICAgICBpZiAodCA8IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGMgLyAyKSAqIHQgKiB0ICsgYjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQtLTtcbiAgICAgICAgICAgIHJldHVybiAoLWMgLyAyKSAqICh0ICogKHQgLSAyKSAtIDEpICsgYjtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBhbmltYXRlU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgICAgICAgY3VycmVudFRpbWUgKz0gaW5jcmVtZW50O1xuICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxMZWZ0ID0gZWFzZUluT3V0UXVhZChcbiAgICAgICAgICAgICAgICBjdXJyZW50VGltZSxcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBjaGFuZ2UsXG4gICAgICAgICAgICAgICAgZHVyYXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFRpbWUgPCBkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9UaW1lciA9IHNldFRpbWVvdXQoYW5pbWF0ZVNjcm9sbCwgaW5jcmVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcnVuIG9uZSBtb3JlIGZyYW1lIHRvIG1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGlzIGZ1bGx5IGZpbmlzaGVkXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFwQW5pbWF0aW9uRmluaXNoZWQuZW1pdCh0aGlzLmN1cnJJbmRleCk7XG4gICAgICAgICAgICAgICAgfSwgaW5jcmVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgYW5pbWF0ZVNjcm9sbCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9jYXRlQ3VycmVudEluZGV4KHNuYXA/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY3VycmVudENoaWxkV2lkdGgoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgY3VycmVudENoaWxkV2lkdGgsXG4gICAgICAgICAgICAgICAgbmV4dENoaWxkcmVuV2lkdGgsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5XaWR0aCxcbiAgICAgICAgICAgICAgICBpZHg6IG51bWJlcixcbiAgICAgICAgICAgICAgICBzdG9wXG4gICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID49XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuV2lkdGggJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPD1cbiAgICAgICAgICAgICAgICAgICAgbmV4dENoaWxkcmVuV2lkdGhcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENoaWxkcmVuV2lkdGggLVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPlxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoaWxkV2lkdGggLyAyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5pc1Njcm9sbFJlYWNoZXNSaWdodEVuZCgpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcm9sbCBiYWNrIHNjcm9sbGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQW5pbWF0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJySW5kZXggPSBpZHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc25hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFwRHVyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgIT09IDBcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3J3YXJkIHNjcm9sbGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQW5pbWF0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJySW5kZXggPSBpZHggKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNuYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuV2lkdGggKyBjdXJyZW50Q2hpbGRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFwRHVyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlkeCArIDEgPT09IHRoaXMuX2NoaWxkcmVuLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhY2hlcyBsYXN0IGluZGV4XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0FuaW1hdGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJySW5kZXggPSBpZHggKyAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjdXJyZW50Q2hpbGRXaWR0aChcbiAgICAgICAgY2I6IChcbiAgICAgICAgICAgIGN1cnJlbnRDbGlsZFdpZHRoOiBudW1iZXIsXG4gICAgICAgICAgICBuZXh0Q2hpbGRyZW5XaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgY2hpbGRyZW5XaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgIGJyZWFrRnVuYzogKCkgPT4gdm9pZFxuICAgICAgICApID0+IHZvaWRcbiAgICApIHtcbiAgICAgICAgbGV0IGNoaWxkcmVuV2lkdGggPSAwO1xuICAgICAgICBsZXQgc2hvdWxkQnJlYWsgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgYnJlYWtGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hvdWxkQnJlYWsgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjaGlsZHJlbkFyciA9IHRoaXMuX2NoaWxkcmVuLnRvQXJyYXkoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gY2hpbGRyZW5BcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNob3VsZEJyZWFrKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5leHRDaGlsZHJlbldpZHRoID1cbiAgICAgICAgICAgICAgICBjaGlsZHJlbldpZHRoICtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbkFycltpICsgMV0uX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDbGlsZFdpZHRoID1cbiAgICAgICAgICAgICAgICBjaGlsZHJlbkFycltpXS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgY2IoXG4gICAgICAgICAgICAgICAgY3VycmVudENsaWxkV2lkdGgsXG4gICAgICAgICAgICAgICAgbmV4dENoaWxkcmVuV2lkdGgsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5XaWR0aCxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIGJyZWFrRnVuY1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY2hpbGRyZW5XaWR0aCArPSBjdXJyZW50Q2xpbGRXaWR0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdG9DaGlsZHJlbkxvY2F0aW9uKCk6IG51bWJlciB7XG4gICAgICAgIGxldCB0byA9IDA7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuQXJyID0gdGhpcy5fY2hpbGRyZW4udG9BcnJheSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VyckluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIHRvICs9IGNoaWxkcmVuQXJyW2ldLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9jYXRlQ2Fyb3VzZWxJdGVtKFxuICAgICAgICBlbGVtZW50OiBFbGVtZW50XG4gICAgKTogUGVwQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlIHwgbnVsbCB7XG4gICAgICAgIGxldCBpdGVtOiBQZXBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUgfCBudWxsID0gbnVsbDtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5BcnIgPSB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW5BcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBjaGlsZHJlbkFycltpXS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaXRlbSA9IGNoaWxkcmVuQXJyW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFya0VsRGltZW5zaW9uKCkge1xuICAgICAgICBpZiAodGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICB0aGlzLmVsV2lkdGggPSB0aGlzLndyYXBwZXIuc3R5bGUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmVsSGVpZ2h0ID0gdGhpcy53cmFwcGVyLnN0eWxlLmhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWxXaWR0aCA9XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIHRoaXMuZWxIZWlnaHQgPVxuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLndyYXBwZXIgfHwgdGhpcy5wYXJlbnROb2RlO1xuICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5jbGllbnRXaWR0aCA6IDA7XG4gICAgICAgIGlmICh0aGlzLl9jaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV4Qm91bmQgPSB0aGlzLm1heGltdW1JbmRleChcbiAgICAgICAgICAgICAgICBjb250YWluZXJXaWR0aCxcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbi50b0FycmF5KClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1heGltdW1JbmRleChcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IG51bWJlcixcbiAgICAgICAgY2hpbGRyZW5FbGVtZW50czogUGVwQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlW11cbiAgICApOiBudW1iZXIge1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBsZXQgY2hpbGRyZW5XaWR0aCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGNoaWxkcmVuRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIC8vIGxhc3QgTiBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBjYXJvdXNlbEl0ZW1EaXJlY3RpdmU6IFBlcENhcm91c2VsSXRlbURpcmVjdGl2ZSA9XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5FbGVtZW50c1tjaGlsZHJlbkVsZW1lbnRzLmxlbmd0aCAtIDEgLSBpXTtcbiAgICAgICAgICAgIGlmICghY2Fyb3VzZWxJdGVtRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICBjYXJvdXNlbEl0ZW1EaXJlY3RpdmUuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBsZXQgaXRlbVdpZHRoID0gbmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVdpZHRoID09PSAwICYmIG5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbVdpZHRoID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcm91c2VsSXRlbURpcmVjdGl2ZS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpcnN0RWxlbWVudENoaWxkLmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGlsZHJlbldpZHRoICs9IGl0ZW1XaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5XaWR0aCA8IGNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbkVsZW1lbnRzLmxlbmd0aCAtIGNvdW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTY3JvbGxSZWFjaGVzUmlnaHRFbmQoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbExlZnRQb3MgPVxuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgK1xuICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICByZXR1cm4gc2Nyb2xsTGVmdFBvcyA+PSB0aGlzLl9jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkcyBhIG1hcmdpbiByaWdodCBzdHlsZSB0byB0aGUgbGFzdCBjaGlsZCBlbGVtZW50IHdoaWNoIHdpbGwgcmVzb2x2ZSB0aGUgaXNzdWVcbiAgICAgKiBvZiBsYXN0IGl0ZW0gZ2V0cyBjdXRvZmYuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGp1c3RNYXJnaW5Ub0xhc3RDaGlsZCgpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKHRoaXMuX2NoaWxkcmVuICYmIHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA+IDAgJiYgdGhpcy5oaWRlU2Nyb2xsYmFyKSB7XG4gICAgICAgIC8vICAgICBjb25zdCBjaGlsZHJlbkFyciA9IHRoaXMuX2NoaWxkcmVuLnRvQXJyYXkoKTtcbiAgICAgICAgLy8gICAgIGNvbnN0IGxhc3RJdGVtID0gY2hpbGRyZW5BcnJbY2hpbGRyZW5BcnIubGVuZ3RoIC0gMV0uX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgLy8gICAgIGlmICh0aGlzLndyYXBwZXIgJiYgY2hpbGRyZW5BcnIubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKGxhc3RJdGVtLCAnbWFyZ2luLXJpZ2h0JywgdGhpcy5zY3JvbGxiYXJXaWR0aCk7XG4gICAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKGxhc3RJdGVtLCAnbWFyZ2luLXJpZ2h0JywgMCk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICB9XG59XG4iXX0=
@@ -352,7 +352,7 @@ class PepCarouselComponent {
352
352
  this.reachesLeftBound.emit(false);
353
353
  this.reachesRightBound.emit(true);
354
354
  }
355
- else if (this._contentRef.nativeElement.scrollLeft === 0 &&
355
+ else if (this._contentRef.nativeElement.scrollLeft < 3 &&
356
356
  this._contentRef.nativeElement.scrollWidth >
357
357
  this._contentRef.nativeElement.clientWidth) {
358
358
  // reached left end
@@ -364,7 +364,7 @@ class PepCarouselComponent {
364
364
  this.reachesLeftBound.emit(false);
365
365
  this.reachesRightBound.emit(false);
366
366
  }
367
- }, 100);
367
+ }, 0);
368
368
  }
369
369
  onWheel(event) {
370
370
  if (this._xWheelEnabled) {
@@ -1 +1 @@
1
- {"version":3,"file":"pepperi-addons-ngx-lib-carousel.mjs","sources":["../../../projects/ngx-lib/carousel/carousel-item.directive.ts","../../../projects/ngx-lib/carousel/carousel.component.ts","../../../projects/ngx-lib/carousel/carousel.module.ts","../../../projects/ngx-lib/carousel/public-api.ts","../../../projects/ngx-lib/carousel/pepperi-addons-ngx-lib-carousel.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n Input,\n HostBinding,\n Inject,\n} from '@angular/core';\n\n@Directive({\n selector: '[pepCarouselItem]',\n})\nexport class PepCarouselItemDirective {\n @HostBinding('style.display')\n display = 'inline-block';\n\n @Input('dragDisabled')\n get dragDisabled() {\n return this._dragDisabled;\n }\n set dragDisabled(value: boolean) {\n this._dragDisabled = value;\n }\n\n _dragDisabled = false;\n\n _elementRef: ElementRef;\n\n constructor(@Inject(ElementRef) elementRef: ElementRef) {\n this._elementRef = elementRef;\n }\n}\n","import {\n ElementRef,\n Component,\n Renderer2,\n OnDestroy,\n Input,\n Output,\n AfterViewInit,\n OnChanges,\n EventEmitter,\n ViewChild,\n ContentChildren,\n AfterViewChecked,\n QueryList,\n Inject,\n HostBinding,\n HostListener,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { PepCarouselItemDirective } from './carousel-item.directive';\n\n@Component({\n selector: 'pep-carousel',\n template: `\n <div class=\"carousel-content\" #contentRef>\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n overflow: hidden;\n display: block;\n }\n .carousel-content {\n height: 100%;\n overflow: auto;\n white-space: nowrap;\n }\n `,\n ],\n})\nexport class PepCarouselComponent\n implements OnDestroy, AfterViewInit, OnChanges, AfterViewChecked {\n private _index = 0;\n\n private _scrollbarHidden = false;\n\n private _disabled = false;\n\n private _xDisabled = false;\n\n private _xWheelEnabled = false;\n\n private _yDisabled = false;\n\n private _dragDisabled = false;\n\n private _snapDisabled = false;\n\n private _snapOffset = 0;\n\n private _snapDuration = 500;\n\n private _isDragging = false;\n\n private _onMouseMoveListener: () => any;\n\n private _onMouseUpListener: () => any;\n\n private _onMouseDownListener: () => any;\n\n private _onScrollListener: () => any;\n\n private _onDragStartListener: () => any;\n\n /**\n * Is the user currently pressing the element\n */\n isPressed = false;\n\n /**\n * Is the user currently scrolling the element\n */\n isScrolling = false;\n\n scrollTimer: any; // | NodeJS.Timer = -1;\n\n scrollToTimer: any; // | NodeJS.Timer = -1;\n\n /**\n * Is the user currently dragging the element\n */\n get isDragging(): boolean {\n return this._isDragging;\n }\n\n /**\n * The x coordinates on the element\n */\n downX = 0;\n\n /**\n * The y coordinates on the element\n */\n downY = 0;\n\n displayType: string | null = 'block';\n\n elWidth: string | null = null;\n\n elHeight: string | null = null;\n\n /**\n * The parentNode of carousel Element\n */\n parentNode: HTMLElement;\n\n /**\n * The carousel Element\n */\n\n @ViewChild('contentRef', { static: true }) _contentRef: ElementRef;\n\n @ContentChildren(PepCarouselItemDirective, { descendants: true })\n _children: QueryList<PepCarouselItemDirective>;\n\n @HostBinding('style.pointer-events') _pointerEvents = 'auto';\n\n wrapper: HTMLDivElement | null;\n\n scrollbarWidth: string | null = null;\n\n get currIndex() {\n return this._index;\n }\n set currIndex(value) {\n if (value !== this._index) {\n this._index = value;\n this.indexChanged.emit(value);\n }\n }\n\n isAnimating = false;\n\n prevChildrenLength = 0;\n\n indexBound = 0;\n\n @Output() dsInitialized = new EventEmitter<void>();\n\n @Output() indexChanged = new EventEmitter<number>();\n\n @Output() reachesLeftBound = new EventEmitter<boolean>();\n\n @Output() reachesRightBound = new EventEmitter<boolean>();\n\n @Output() snapAnimationFinished = new EventEmitter<number>();\n\n @Output() dragStart = new EventEmitter<void>();\n\n @Output() dragEnd = new EventEmitter<void>();\n\n /**\n * Whether the scrollbar is hidden\n */\n @Input('scrollbarHidden')\n get scrollbarHidden() {\n return this._scrollbarHidden;\n }\n set scrollbarHidden(value: boolean) {\n this._scrollbarHidden = value;\n }\n\n /**\n * Whether horizontally and vertically draging and scrolling is be disabled\n */\n @Input('disabled')\n get disabled() {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = value;\n }\n\n /**\n * Whether horizontally dragging and scrolling is be disabled\n */\n @Input('xDisabled')\n get xDisabled() {\n return this._xDisabled;\n }\n set xDisabled(value: boolean) {\n this._xDisabled = value;\n }\n\n /**\n * Whether vertically dragging and scrolling events is disabled\n */\n @Input('yDisabled')\n get yDisabled() {\n return this._yDisabled;\n }\n set yDisabled(value: boolean) {\n this._yDisabled = value;\n }\n\n /**\n * Whether scrolling horizontally with mouse wheel is enabled\n */\n @Input('xWheelEnabled')\n get xWheelEnabled() {\n return this._xWheelEnabled;\n }\n set xWheelEnabled(value: boolean) {\n this._xWheelEnabled = value;\n }\n\n @Input('dragDisabled')\n get dragDisabled() {\n return this._dragDisabled;\n }\n set dragDisabled(value: boolean) {\n this._dragDisabled = value;\n }\n\n @Input('snapDisabled')\n get snapDisabled() {\n return this._snapDisabled;\n }\n set snapDisabled(value: boolean) {\n this._snapDisabled = value;\n }\n\n @Input('snapOffset')\n get snapOffset() {\n return this._snapOffset;\n }\n set snapOffset(value: number) {\n this._snapOffset = value;\n }\n\n @Input('snapDuration')\n get snapDuration() {\n return this._snapDuration;\n }\n set snapDuration(value: number) {\n this._snapDuration = value;\n }\n\n constructor(\n @Inject(ElementRef) private _elementRef: ElementRef,\n @Inject(Renderer2) private _renderer: Renderer2,\n @Inject(DOCUMENT) private _document: any\n ) {\n this.scrollbarWidth = `${this.getScrollbarWidth()}px`;\n }\n\n ngOnChanges() {\n this.setScrollBar();\n\n if (this.xDisabled || this.disabled || this._scrollbarHidden) {\n this.disableScroll('x');\n } else {\n this.enableScroll('x');\n }\n\n if (this.yDisabled || this.disabled) {\n this.disableScroll('y');\n } else {\n this.enableScroll('y');\n }\n }\n\n ngAfterViewInit() {\n // auto assign computed css\n this._renderer.setAttribute(\n this._contentRef.nativeElement,\n 'drag-scroll',\n 'true'\n );\n\n this.displayType =\n typeof window !== 'undefined'\n ? window.getComputedStyle(this._elementRef.nativeElement)\n .display\n : 'block';\n\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'display',\n this.displayType\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'whiteSpace',\n 'noWrap'\n );\n\n // store ele width height for later user\n this.markElDimension();\n\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n this.elWidth\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n this.elHeight\n );\n\n if (this.wrapper) {\n this.checkScrollbar();\n }\n\n this._onMouseDownListener = this._renderer.listen(\n this._contentRef.nativeElement,\n 'mousedown',\n this.onMouseDownHandler.bind(this)\n );\n this._onScrollListener = this._renderer.listen(\n this._contentRef.nativeElement,\n 'scroll',\n this.onScrollHandler.bind(this)\n );\n // prevent Firefox from dragging images\n this._onDragStartListener = this._renderer.listen(\n 'document',\n 'dragstart',\n (e) => {\n e.preventDefault();\n }\n );\n this.checkNavStatus();\n this.dsInitialized.emit();\n this.adjustMarginToLastChild();\n }\n\n ngAfterViewChecked() {\n // avoid extra checks\n if (this._children.length !== this.prevChildrenLength) {\n this.markElDimension();\n this.checkScrollbar();\n this.prevChildrenLength = this._children.length;\n this.checkNavStatus();\n }\n }\n\n ngOnDestroy() {\n this._renderer.setAttribute(\n this._contentRef.nativeElement,\n 'drag-scroll',\n 'false'\n );\n if (this._onMouseDownListener) {\n this._onMouseDownListener = this._onMouseDownListener();\n }\n if (this._onScrollListener) {\n this._onScrollListener = this._onScrollListener();\n }\n if (this._onDragStartListener) {\n this._onDragStartListener = this._onDragStartListener();\n }\n }\n\n onMouseMoveHandler(event: MouseEvent) {\n this.onMouseMove(event);\n }\n\n onMouseMove(event: MouseEvent) {\n if (this.isPressed && !this.disabled) {\n // Workaround for prevent scroll stuck if browser lost focus\n // MouseEvent.buttons not support by Safari\n if (!event.buttons && !event.which) {\n return this.onMouseUpHandler(event);\n }\n\n this._pointerEvents = 'none';\n this._setIsDragging(true);\n\n // Drag X\n if (!this.xDisabled && !this.dragDisabled) {\n const clientX = (event as MouseEvent).clientX;\n this._contentRef.nativeElement.scrollLeft =\n this._contentRef.nativeElement.scrollLeft -\n clientX +\n this.downX;\n this.downX = clientX;\n }\n\n // Drag Y\n if (!this.yDisabled && !this.dragDisabled) {\n const clientY = (event as MouseEvent).clientY;\n this._contentRef.nativeElement.scrollTop =\n this._contentRef.nativeElement.scrollTop -\n clientY +\n this.downY;\n this.downY = clientY;\n }\n }\n }\n\n onMouseDownHandler(event: MouseEvent) {\n const carouselItem: PepCarouselItemDirective | null = this.locateCarouselItem(\n event.target as Element\n );\n if (carouselItem && carouselItem.dragDisabled) {\n return;\n }\n\n const isTouchEvent = event.type === 'touchstart';\n\n this._startGlobalListening(isTouchEvent);\n this.isPressed = true;\n\n const mouseEvent = event as MouseEvent;\n this.downX = mouseEvent.clientX;\n this.downY = mouseEvent.clientY;\n\n clearTimeout(this.scrollToTimer as number);\n }\n\n onScrollHandler() {\n this.checkNavStatus();\n if (!this.isPressed && !this.isAnimating && !this.snapDisabled) {\n this.isScrolling = true;\n clearTimeout(this.scrollTimer as number);\n this.scrollTimer = setTimeout(() => {\n this.isScrolling = false;\n this.locateCurrentIndex(true);\n }, 500);\n } else {\n this.locateCurrentIndex();\n }\n }\n\n onMouseUpHandler(event: MouseEvent) {\n if (this.isPressed) {\n this.isPressed = false;\n this._pointerEvents = 'auto';\n this._setIsDragging(false);\n if (!this.snapDisabled) {\n this.locateCurrentIndex(true);\n } else {\n this.locateCurrentIndex();\n }\n this._stopGlobalListening();\n }\n }\n\n /*\n * Nav button\n */\n moveLeft() {\n if (this.currIndex !== 0 || this.snapDisabled) {\n this.currIndex--;\n clearTimeout(this.scrollToTimer as number);\n this.scrollTo(\n this._contentRef.nativeElement,\n this.toChildrenLocation(),\n this.snapDuration\n );\n }\n }\n\n moveRight() {\n const container = this.wrapper || this.parentNode;\n const containerWidth = container ? container.clientWidth : 0;\n\n if (\n !this.isScrollReachesRightEnd() &&\n this.currIndex <\n this.maximumIndex(containerWidth, this._children.toArray())\n ) {\n this.currIndex++;\n clearTimeout(this.scrollToTimer as number);\n this.scrollTo(\n this._contentRef.nativeElement,\n this.toChildrenLocation(),\n this.snapDuration\n );\n }\n }\n\n moveTo(index: number) {\n const container = this.wrapper || this.parentNode;\n const containerWidth = container ? container.clientWidth : 0;\n if (\n index >= 0 &&\n index !== this.currIndex &&\n this.currIndex <=\n this.maximumIndex(containerWidth, this._children.toArray())\n ) {\n this.currIndex = Math.min(\n index,\n this.maximumIndex(containerWidth, this._children.toArray())\n );\n clearTimeout(this.scrollToTimer as number);\n this.scrollTo(\n this._contentRef.nativeElement,\n this.toChildrenLocation(),\n this.snapDuration\n );\n }\n }\n\n checkNavStatus() {\n setTimeout(() => {\n const onlyOneItem = Boolean(this._children.length <= 1);\n const containerIsLargerThanContent = Boolean(\n this._contentRef.nativeElement.scrollWidth <=\n this._contentRef.nativeElement.clientWidth\n );\n if (onlyOneItem || containerIsLargerThanContent) {\n // only one element\n this.reachesLeftBound.emit(true);\n this.reachesRightBound.emit(true);\n } else if (this.isScrollReachesRightEnd()) {\n // reached right end\n this.reachesLeftBound.emit(false);\n this.reachesRightBound.emit(true);\n } else if (\n this._contentRef.nativeElement.scrollLeft === 0 &&\n this._contentRef.nativeElement.scrollWidth >\n this._contentRef.nativeElement.clientWidth\n ) {\n // reached left end\n this.reachesLeftBound.emit(true);\n this.reachesRightBound.emit(false);\n } else {\n // in the middle\n this.reachesLeftBound.emit(false);\n this.reachesRightBound.emit(false);\n }\n }, 100);\n }\n\n @HostListener('wheel', ['$event'])\n public onWheel(event: WheelEvent) {\n if (this._xWheelEnabled) {\n event.preventDefault();\n\n if (this._snapDisabled) {\n this._contentRef.nativeElement.scrollBy(event.deltaY, 0);\n } else {\n if (event.deltaY < 0) {\n this.moveLeft();\n } else if (event.deltaY > 0) {\n this.moveRight();\n }\n }\n }\n }\n\n @HostListener('window:resize')\n public onWindowResize() {\n this.refreshWrapperDimensions();\n this.checkNavStatus();\n }\n\n private _setIsDragging(value: boolean) {\n if (this._isDragging === value) {\n return;\n }\n\n this._isDragging = value;\n value ? this.dragStart.emit() : this.dragEnd.emit();\n }\n\n private _startGlobalListening(isTouchEvent: boolean) {\n if (!this._onMouseMoveListener) {\n const eventName = isTouchEvent ? 'touchmove' : 'mousemove';\n this._onMouseMoveListener = this._renderer.listen(\n 'document',\n eventName,\n this.onMouseMoveHandler.bind(this)\n );\n }\n\n if (!this._onMouseUpListener) {\n const eventName = isTouchEvent ? 'touchend' : 'mouseup';\n this._onMouseUpListener = this._renderer.listen(\n 'document',\n eventName,\n this.onMouseUpHandler.bind(this)\n );\n }\n }\n\n private _stopGlobalListening() {\n if (this._onMouseMoveListener) {\n this._onMouseMoveListener = this._onMouseMoveListener();\n }\n\n if (this._onMouseUpListener) {\n this._onMouseUpListener = this._onMouseUpListener();\n }\n }\n\n private disableScroll(axis: string): void {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n `overflow-${axis}`,\n 'hidden'\n );\n }\n\n private enableScroll(axis: string): void {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n `overflow-${axis}`,\n 'auto'\n );\n }\n\n private hideScrollbar(): void {\n if (\n this._contentRef.nativeElement.style.display !== 'none' &&\n !this.wrapper\n ) {\n this.parentNode = this._contentRef.nativeElement.parentNode;\n\n // create container element\n this.wrapper = this._renderer.createElement('div');\n this._renderer.addClass(this.wrapper, 'carousel-wrapper');\n // this._renderer.setAttribute(this.wrapper, 'class', 'carousel-wrapper');\n // this._renderer.addClass(this.wrapper, 'carousel-container');\n\n this.refreshWrapperDimensions();\n\n this._renderer.setStyle(this.wrapper, 'overflow', 'hidden');\n\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n `calc(100% + ${this.scrollbarWidth})`\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n `calc(100% + ${this.scrollbarWidth})`\n );\n\n // Append container element to component element.\n this._renderer.appendChild(\n this._elementRef.nativeElement,\n this.wrapper\n );\n\n // Append content element to container element.\n this._renderer.appendChild(\n this.wrapper,\n this._contentRef.nativeElement\n );\n\n this.adjustMarginToLastChild();\n }\n }\n\n private showScrollbar(): void {\n if (this.wrapper) {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n '100%'\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n this.wrapper.style.height\n );\n if (this.parentNode !== null) {\n this.parentNode.removeChild(this.wrapper);\n this.parentNode.appendChild(this._contentRef.nativeElement);\n }\n this.wrapper = null;\n\n this.adjustMarginToLastChild();\n }\n }\n\n private checkScrollbar() {\n if (\n this._contentRef.nativeElement.scrollWidth <=\n this._contentRef.nativeElement.clientWidth\n ) {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n '100%'\n );\n } else {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n `calc(100% + ${this.scrollbarWidth})`\n );\n }\n if (\n this._contentRef.nativeElement.scrollHeight <=\n this._contentRef.nativeElement.clientHeight\n ) {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n '100%'\n );\n } else {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n `calc(100% + ${this.scrollbarWidth})`\n );\n }\n }\n\n private setScrollBar(): void {\n if (this.scrollbarHidden) {\n this.hideScrollbar();\n } else {\n this.showScrollbar();\n }\n }\n\n private getScrollbarWidth(): number {\n /**\n * Browser Scrollbar Widths (2016)\n * OSX (Chrome, Safari, Firefox) - 15px\n * Windows XP (IE7, Chrome, Firefox) - 17px\n * Windows 7 (IE10, IE11, Chrome, Firefox) - 17px\n * Windows 8.1 (IE11, Chrome, Firefox) - 17px\n * Windows 10 (IE11, Chrome, Firefox) - 17px\n * Windows 10 (Edge 12/13) - 12px\n */\n const outer = this._renderer.createElement('div');\n this._renderer.setStyle(outer, 'visibility', 'hidden');\n this._renderer.setStyle(outer, 'width', '100px');\n this._renderer.setStyle(outer, 'msOverflowStyle', 'scrollbar'); // needed for WinJS apps\n // document.body.appendChild(outer);\n this._renderer.appendChild(this._document.body, outer);\n // this._renderer.appendChild(this._renderer.selectRootElement('body'), outer);\n const widthNoScroll = outer.offsetWidth;\n // force scrollbars\n this._renderer.setStyle(outer, 'overflow', 'scroll');\n\n // add innerdiv\n const inner = this._renderer.createElement('div');\n this._renderer.setStyle(inner, 'width', '100%');\n this._renderer.appendChild(outer, inner);\n\n const widthWithScroll = inner.offsetWidth;\n\n // remove divs\n this._renderer.removeChild(this._document.body, outer);\n\n /**\n * Scrollbar width will be 0 on Mac OS with the\n * default \"Only show scrollbars when scrolling\" setting (Yosemite and up).\n * setting default width to 20;\n */\n return widthNoScroll - widthWithScroll || 20;\n }\n\n private refreshWrapperDimensions() {\n if (this.wrapper) {\n const height =\n this._elementRef.nativeElement.style.height ||\n this._elementRef.nativeElement.offsetHeight;\n\n this._renderer.setStyle(this.wrapper, 'width', '100%');\n this._renderer.setStyle(\n this.wrapper,\n 'height',\n height === 0 ? 'auto' : height + 'px'\n );\n }\n }\n\n /*\n * The below solution is heavily inspired from\n * https://gist.github.com/andjosh/6764939\n */\n private scrollTo(element: Element, to: number, duration: number) {\n this.isAnimating = true;\n const start = element.scrollLeft,\n change = to - start - this.snapOffset,\n increment = 20;\n let currentTime = 0;\n\n // t = current time\n // b = start value\n // c = change in value\n // d = duration\n const easeInOutQuad = (t: number, b: number, c: number, d: number) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t * t + b;\n }\n t--;\n return (-c / 2) * (t * (t - 2) - 1) + b;\n };\n\n const animateScroll = () => {\n currentTime += increment;\n element.scrollLeft = easeInOutQuad(\n currentTime,\n start,\n change,\n duration\n );\n if (currentTime < duration) {\n this.scrollToTimer = setTimeout(animateScroll, increment);\n } else {\n // run one more frame to make sure the animation is fully finished\n setTimeout(() => {\n this.isAnimating = false;\n this.snapAnimationFinished.emit(this.currIndex);\n }, increment);\n }\n };\n animateScroll();\n }\n\n private locateCurrentIndex(snap?: boolean) {\n this.currentChildWidth(\n (\n currentChildWidth,\n nextChildrenWidth,\n childrenWidth,\n idx: number,\n stop\n ) => {\n if (\n this._contentRef.nativeElement.scrollLeft >=\n childrenWidth &&\n this._contentRef.nativeElement.scrollLeft <=\n nextChildrenWidth\n ) {\n if (\n nextChildrenWidth -\n this._contentRef.nativeElement.scrollLeft >\n currentChildWidth / 2 &&\n !this.isScrollReachesRightEnd()\n ) {\n // roll back scrolling\n if (!this.isAnimating) {\n this.currIndex = idx;\n }\n if (snap) {\n this.scrollTo(\n this._contentRef.nativeElement,\n childrenWidth,\n this.snapDuration\n );\n }\n } else if (\n this._contentRef.nativeElement.scrollLeft !== 0\n ) {\n // forward scrolling\n if (!this.isAnimating) {\n this.currIndex = idx + 1;\n }\n if (snap) {\n this.scrollTo(\n this._contentRef.nativeElement,\n childrenWidth + currentChildWidth,\n this.snapDuration\n );\n }\n }\n stop();\n } else if (idx + 1 === this._children.length - 1) {\n // reaches last index\n if (!this.isAnimating) {\n this.currIndex = idx + 1;\n }\n stop();\n }\n }\n );\n }\n\n private currentChildWidth(\n cb: (\n currentClildWidth: number,\n nextChildrenWidth: number,\n childrenWidth: number,\n index: number,\n breakFunc: () => void\n ) => void\n ) {\n let childrenWidth = 0;\n let shouldBreak = false;\n const breakFunc = function () {\n shouldBreak = true;\n };\n const childrenArr = this._children.toArray();\n\n for (let i = 0; i < childrenArr.length; i++) {\n if (i === childrenArr.length - 1) {\n break;\n }\n if (shouldBreak) {\n break;\n }\n\n const nextChildrenWidth =\n childrenWidth +\n childrenArr[i + 1]._elementRef.nativeElement.clientWidth;\n const currentClildWidth =\n childrenArr[i]._elementRef.nativeElement.clientWidth;\n cb(\n currentClildWidth,\n nextChildrenWidth,\n childrenWidth,\n i,\n breakFunc\n );\n\n childrenWidth += currentClildWidth;\n }\n }\n\n private toChildrenLocation(): number {\n let to = 0;\n const childrenArr = this._children.toArray();\n for (let i = 0; i < this.currIndex; i++) {\n to += childrenArr[i]._elementRef.nativeElement.clientWidth;\n }\n return to;\n }\n\n private locateCarouselItem(\n element: Element\n ): PepCarouselItemDirective | null {\n let item: PepCarouselItemDirective | null = null;\n const childrenArr = this._children.toArray();\n for (let i = 0; i < childrenArr.length; i++) {\n if (element === childrenArr[i]._elementRef.nativeElement) {\n item = childrenArr[i];\n }\n }\n return item;\n }\n\n private markElDimension() {\n if (this.wrapper) {\n this.elWidth = this.wrapper.style.width;\n this.elHeight = this.wrapper.style.height;\n } else {\n this.elWidth =\n this._elementRef.nativeElement.style.width ||\n this._elementRef.nativeElement.offsetWidth + 'px';\n this.elHeight =\n this._elementRef.nativeElement.style.height ||\n this._elementRef.nativeElement.offsetHeight + 'px';\n }\n const container = this.wrapper || this.parentNode;\n const containerWidth = container ? container.clientWidth : 0;\n if (this._children.length > 1) {\n this.indexBound = this.maximumIndex(\n containerWidth,\n this._children.toArray()\n );\n }\n }\n\n private maximumIndex(\n containerWidth: number,\n childrenElements: PepCarouselItemDirective[]\n ): number {\n let count = 0;\n let childrenWidth = 0;\n for (let i = 0; i <= childrenElements.length; i++) {\n // last N element\n const carouselItemDirective: PepCarouselItemDirective =\n childrenElements[childrenElements.length - 1 - i];\n if (!carouselItemDirective) {\n break;\n } else {\n const nativeElement =\n carouselItemDirective._elementRef.nativeElement;\n let itemWidth = nativeElement.clientWidth;\n if (itemWidth === 0 && nativeElement.firstElementChild) {\n itemWidth =\n carouselItemDirective._elementRef.nativeElement\n .firstElementChild.clientWidth;\n }\n childrenWidth += itemWidth;\n if (childrenWidth < containerWidth) {\n count++;\n } else {\n break;\n }\n }\n }\n return childrenElements.length - count;\n }\n\n private isScrollReachesRightEnd(): boolean {\n const scrollLeftPos =\n this._contentRef.nativeElement.scrollLeft +\n this._contentRef.nativeElement.offsetWidth;\n return scrollLeftPos >= this._contentRef.nativeElement.scrollWidth;\n }\n\n /**\n * adds a margin right style to the last child element which will resolve the issue\n * of last item gets cutoff.\n */\n private adjustMarginToLastChild(): void {\n // if (this._children && this._children.length > 0 && this.hideScrollbar) {\n // const childrenArr = this._children.toArray();\n // const lastItem = childrenArr[childrenArr.length - 1]._elementRef.nativeElement;\n // if (this.wrapper && childrenArr.length > 1) {\n // this._renderer.setStyle(lastItem, 'margin-right', this.scrollbarWidth);\n // } else {\n // this._renderer.setStyle(lastItem, 'margin-right', 0);\n // }\n // }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { PepCarouselComponent } from './carousel.component';\nimport { PepCarouselItemDirective } from './carousel-item.directive';\n\n@NgModule({\n exports: [PepCarouselComponent, PepCarouselItemDirective],\n declarations: [PepCarouselComponent, PepCarouselItemDirective],\n})\nexport class PepCarouselModule {}\n","/*\n * Public API Surface of carousel\n */\nexport * from './carousel.module';\nexport * from './carousel.component';\nexport * from './carousel-item.directive';\n// export * from './carousel.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pepperi-addons-ngx-lib-carousel.mjs","sources":["../../../projects/ngx-lib/carousel/carousel-item.directive.ts","../../../projects/ngx-lib/carousel/carousel.component.ts","../../../projects/ngx-lib/carousel/carousel.module.ts","../../../projects/ngx-lib/carousel/public-api.ts","../../../projects/ngx-lib/carousel/pepperi-addons-ngx-lib-carousel.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n Input,\n HostBinding,\n Inject,\n} from '@angular/core';\n\n@Directive({\n selector: '[pepCarouselItem]',\n})\nexport class PepCarouselItemDirective {\n @HostBinding('style.display')\n display = 'inline-block';\n\n @Input('dragDisabled')\n get dragDisabled() {\n return this._dragDisabled;\n }\n set dragDisabled(value: boolean) {\n this._dragDisabled = value;\n }\n\n _dragDisabled = false;\n\n _elementRef: ElementRef;\n\n constructor(@Inject(ElementRef) elementRef: ElementRef) {\n this._elementRef = elementRef;\n }\n}\n","import {\n ElementRef,\n Component,\n Renderer2,\n OnDestroy,\n Input,\n Output,\n AfterViewInit,\n OnChanges,\n EventEmitter,\n ViewChild,\n ContentChildren,\n AfterViewChecked,\n QueryList,\n Inject,\n HostBinding,\n HostListener,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { PepCarouselItemDirective } from './carousel-item.directive';\n\n@Component({\n selector: 'pep-carousel',\n template: `\n <div class=\"carousel-content\" #contentRef>\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n overflow: hidden;\n display: block;\n }\n .carousel-content {\n height: 100%;\n overflow: auto;\n white-space: nowrap;\n }\n `,\n ],\n})\nexport class PepCarouselComponent\n implements OnDestroy, AfterViewInit, OnChanges, AfterViewChecked {\n private _index = 0;\n\n private _scrollbarHidden = false;\n\n private _disabled = false;\n\n private _xDisabled = false;\n\n private _xWheelEnabled = false;\n\n private _yDisabled = false;\n\n private _dragDisabled = false;\n\n private _snapDisabled = false;\n\n private _snapOffset = 0;\n\n private _snapDuration = 500;\n\n private _isDragging = false;\n\n private _onMouseMoveListener: () => any;\n\n private _onMouseUpListener: () => any;\n\n private _onMouseDownListener: () => any;\n\n private _onScrollListener: () => any;\n\n private _onDragStartListener: () => any;\n\n /**\n * Is the user currently pressing the element\n */\n isPressed = false;\n\n /**\n * Is the user currently scrolling the element\n */\n isScrolling = false;\n\n scrollTimer: any; // | NodeJS.Timer = -1;\n\n scrollToTimer: any; // | NodeJS.Timer = -1;\n\n /**\n * Is the user currently dragging the element\n */\n get isDragging(): boolean {\n return this._isDragging;\n }\n\n /**\n * The x coordinates on the element\n */\n downX = 0;\n\n /**\n * The y coordinates on the element\n */\n downY = 0;\n\n displayType: string | null = 'block';\n\n elWidth: string | null = null;\n\n elHeight: string | null = null;\n\n /**\n * The parentNode of carousel Element\n */\n parentNode: HTMLElement;\n\n /**\n * The carousel Element\n */\n\n @ViewChild('contentRef', { static: true }) _contentRef: ElementRef;\n\n @ContentChildren(PepCarouselItemDirective, { descendants: true })\n _children: QueryList<PepCarouselItemDirective>;\n\n @HostBinding('style.pointer-events') _pointerEvents = 'auto';\n\n wrapper: HTMLDivElement | null;\n\n scrollbarWidth: string | null = null;\n\n get currIndex() {\n return this._index;\n }\n set currIndex(value) {\n if (value !== this._index) {\n this._index = value;\n this.indexChanged.emit(value);\n }\n }\n\n isAnimating = false;\n\n prevChildrenLength = 0;\n\n indexBound = 0;\n\n @Output() dsInitialized = new EventEmitter<void>();\n\n @Output() indexChanged = new EventEmitter<number>();\n\n @Output() reachesLeftBound = new EventEmitter<boolean>();\n\n @Output() reachesRightBound = new EventEmitter<boolean>();\n\n @Output() snapAnimationFinished = new EventEmitter<number>();\n\n @Output() dragStart = new EventEmitter<void>();\n\n @Output() dragEnd = new EventEmitter<void>();\n\n /**\n * Whether the scrollbar is hidden\n */\n @Input('scrollbarHidden')\n get scrollbarHidden() {\n return this._scrollbarHidden;\n }\n set scrollbarHidden(value: boolean) {\n this._scrollbarHidden = value;\n }\n\n /**\n * Whether horizontally and vertically draging and scrolling is be disabled\n */\n @Input('disabled')\n get disabled() {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = value;\n }\n\n /**\n * Whether horizontally dragging and scrolling is be disabled\n */\n @Input('xDisabled')\n get xDisabled() {\n return this._xDisabled;\n }\n set xDisabled(value: boolean) {\n this._xDisabled = value;\n }\n\n /**\n * Whether vertically dragging and scrolling events is disabled\n */\n @Input('yDisabled')\n get yDisabled() {\n return this._yDisabled;\n }\n set yDisabled(value: boolean) {\n this._yDisabled = value;\n }\n\n /**\n * Whether scrolling horizontally with mouse wheel is enabled\n */\n @Input('xWheelEnabled')\n get xWheelEnabled() {\n return this._xWheelEnabled;\n }\n set xWheelEnabled(value: boolean) {\n this._xWheelEnabled = value;\n }\n\n @Input('dragDisabled')\n get dragDisabled() {\n return this._dragDisabled;\n }\n set dragDisabled(value: boolean) {\n this._dragDisabled = value;\n }\n\n @Input('snapDisabled')\n get snapDisabled() {\n return this._snapDisabled;\n }\n set snapDisabled(value: boolean) {\n this._snapDisabled = value;\n }\n\n @Input('snapOffset')\n get snapOffset() {\n return this._snapOffset;\n }\n set snapOffset(value: number) {\n this._snapOffset = value;\n }\n\n @Input('snapDuration')\n get snapDuration() {\n return this._snapDuration;\n }\n set snapDuration(value: number) {\n this._snapDuration = value;\n }\n\n constructor(\n @Inject(ElementRef) private _elementRef: ElementRef,\n @Inject(Renderer2) private _renderer: Renderer2,\n @Inject(DOCUMENT) private _document: any\n ) {\n this.scrollbarWidth = `${this.getScrollbarWidth()}px`;\n }\n\n ngOnChanges() {\n this.setScrollBar();\n\n if (this.xDisabled || this.disabled || this._scrollbarHidden) {\n this.disableScroll('x');\n } else {\n this.enableScroll('x');\n }\n\n if (this.yDisabled || this.disabled) {\n this.disableScroll('y');\n } else {\n this.enableScroll('y');\n }\n }\n\n ngAfterViewInit() {\n // auto assign computed css\n this._renderer.setAttribute(\n this._contentRef.nativeElement,\n 'drag-scroll',\n 'true'\n );\n\n this.displayType =\n typeof window !== 'undefined'\n ? window.getComputedStyle(this._elementRef.nativeElement)\n .display\n : 'block';\n\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'display',\n this.displayType\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'whiteSpace',\n 'noWrap'\n );\n\n // store ele width height for later user\n this.markElDimension();\n\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n this.elWidth\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n this.elHeight\n );\n\n if (this.wrapper) {\n this.checkScrollbar();\n }\n\n this._onMouseDownListener = this._renderer.listen(\n this._contentRef.nativeElement,\n 'mousedown',\n this.onMouseDownHandler.bind(this)\n );\n this._onScrollListener = this._renderer.listen(\n this._contentRef.nativeElement,\n 'scroll',\n this.onScrollHandler.bind(this)\n );\n // prevent Firefox from dragging images\n this._onDragStartListener = this._renderer.listen(\n 'document',\n 'dragstart',\n (e) => {\n e.preventDefault();\n }\n );\n this.checkNavStatus();\n this.dsInitialized.emit();\n this.adjustMarginToLastChild();\n }\n\n ngAfterViewChecked() {\n // avoid extra checks\n if (this._children.length !== this.prevChildrenLength) {\n this.markElDimension();\n this.checkScrollbar();\n this.prevChildrenLength = this._children.length;\n this.checkNavStatus();\n }\n }\n\n ngOnDestroy() {\n this._renderer.setAttribute(\n this._contentRef.nativeElement,\n 'drag-scroll',\n 'false'\n );\n if (this._onMouseDownListener) {\n this._onMouseDownListener = this._onMouseDownListener();\n }\n if (this._onScrollListener) {\n this._onScrollListener = this._onScrollListener();\n }\n if (this._onDragStartListener) {\n this._onDragStartListener = this._onDragStartListener();\n }\n }\n\n onMouseMoveHandler(event: MouseEvent) {\n this.onMouseMove(event);\n }\n\n onMouseMove(event: MouseEvent) {\n if (this.isPressed && !this.disabled) {\n // Workaround for prevent scroll stuck if browser lost focus\n // MouseEvent.buttons not support by Safari\n if (!event.buttons && !event.which) {\n return this.onMouseUpHandler(event);\n }\n\n this._pointerEvents = 'none';\n this._setIsDragging(true);\n\n // Drag X\n if (!this.xDisabled && !this.dragDisabled) {\n const clientX = (event as MouseEvent).clientX;\n this._contentRef.nativeElement.scrollLeft =\n this._contentRef.nativeElement.scrollLeft -\n clientX +\n this.downX;\n this.downX = clientX;\n }\n\n // Drag Y\n if (!this.yDisabled && !this.dragDisabled) {\n const clientY = (event as MouseEvent).clientY;\n this._contentRef.nativeElement.scrollTop =\n this._contentRef.nativeElement.scrollTop -\n clientY +\n this.downY;\n this.downY = clientY;\n }\n }\n }\n\n onMouseDownHandler(event: MouseEvent) {\n const carouselItem: PepCarouselItemDirective | null = this.locateCarouselItem(\n event.target as Element\n );\n if (carouselItem && carouselItem.dragDisabled) {\n return;\n }\n\n const isTouchEvent = event.type === 'touchstart';\n\n this._startGlobalListening(isTouchEvent);\n this.isPressed = true;\n\n const mouseEvent = event as MouseEvent;\n this.downX = mouseEvent.clientX;\n this.downY = mouseEvent.clientY;\n\n clearTimeout(this.scrollToTimer as number);\n }\n\n onScrollHandler() {\n this.checkNavStatus();\n if (!this.isPressed && !this.isAnimating && !this.snapDisabled) {\n this.isScrolling = true;\n clearTimeout(this.scrollTimer as number);\n this.scrollTimer = setTimeout(() => {\n this.isScrolling = false;\n this.locateCurrentIndex(true);\n }, 500);\n } else {\n this.locateCurrentIndex();\n }\n }\n\n onMouseUpHandler(event: MouseEvent) {\n if (this.isPressed) {\n this.isPressed = false;\n this._pointerEvents = 'auto';\n this._setIsDragging(false);\n if (!this.snapDisabled) {\n this.locateCurrentIndex(true);\n } else {\n this.locateCurrentIndex();\n }\n this._stopGlobalListening();\n }\n }\n\n /*\n * Nav button\n */\n moveLeft() {\n if (this.currIndex !== 0 || this.snapDisabled) {\n this.currIndex--;\n clearTimeout(this.scrollToTimer as number);\n this.scrollTo(\n this._contentRef.nativeElement,\n this.toChildrenLocation(),\n this.snapDuration\n );\n }\n }\n\n moveRight() {\n const container = this.wrapper || this.parentNode;\n const containerWidth = container ? container.clientWidth : 0;\n\n if (\n !this.isScrollReachesRightEnd() &&\n this.currIndex <\n this.maximumIndex(containerWidth, this._children.toArray())\n ) {\n this.currIndex++;\n clearTimeout(this.scrollToTimer as number);\n this.scrollTo(\n this._contentRef.nativeElement,\n this.toChildrenLocation(),\n this.snapDuration\n );\n }\n }\n\n moveTo(index: number) {\n const container = this.wrapper || this.parentNode;\n const containerWidth = container ? container.clientWidth : 0;\n if (\n index >= 0 &&\n index !== this.currIndex &&\n this.currIndex <=\n this.maximumIndex(containerWidth, this._children.toArray())\n ) {\n this.currIndex = Math.min(\n index,\n this.maximumIndex(containerWidth, this._children.toArray())\n );\n clearTimeout(this.scrollToTimer as number);\n this.scrollTo(\n this._contentRef.nativeElement,\n this.toChildrenLocation(),\n this.snapDuration\n );\n }\n }\n\n checkNavStatus() {\n setTimeout(() => {\n const onlyOneItem = Boolean(this._children.length <= 1);\n const containerIsLargerThanContent = Boolean(\n this._contentRef.nativeElement.scrollWidth <=\n this._contentRef.nativeElement.clientWidth\n );\n if (onlyOneItem || containerIsLargerThanContent) {\n // only one element\n this.reachesLeftBound.emit(true);\n this.reachesRightBound.emit(true);\n } else if (this.isScrollReachesRightEnd()) {\n // reached right end\n this.reachesLeftBound.emit(false);\n this.reachesRightBound.emit(true);\n } else if (\n this._contentRef.nativeElement.scrollLeft < 3 &&\n this._contentRef.nativeElement.scrollWidth >\n this._contentRef.nativeElement.clientWidth\n ) {\n // reached left end\n this.reachesLeftBound.emit(true);\n this.reachesRightBound.emit(false);\n } else {\n // in the middle\n this.reachesLeftBound.emit(false);\n this.reachesRightBound.emit(false);\n }\n }, 0);\n }\n\n @HostListener('wheel', ['$event'])\n public onWheel(event: WheelEvent) {\n if (this._xWheelEnabled) {\n event.preventDefault();\n\n if (this._snapDisabled) {\n this._contentRef.nativeElement.scrollBy(event.deltaY, 0);\n } else {\n if (event.deltaY < 0) {\n this.moveLeft();\n } else if (event.deltaY > 0) {\n this.moveRight();\n }\n }\n }\n }\n\n @HostListener('window:resize')\n public onWindowResize() {\n this.refreshWrapperDimensions();\n this.checkNavStatus();\n }\n\n private _setIsDragging(value: boolean) {\n if (this._isDragging === value) {\n return;\n }\n\n this._isDragging = value;\n value ? this.dragStart.emit() : this.dragEnd.emit();\n }\n\n private _startGlobalListening(isTouchEvent: boolean) {\n if (!this._onMouseMoveListener) {\n const eventName = isTouchEvent ? 'touchmove' : 'mousemove';\n this._onMouseMoveListener = this._renderer.listen(\n 'document',\n eventName,\n this.onMouseMoveHandler.bind(this)\n );\n }\n\n if (!this._onMouseUpListener) {\n const eventName = isTouchEvent ? 'touchend' : 'mouseup';\n this._onMouseUpListener = this._renderer.listen(\n 'document',\n eventName,\n this.onMouseUpHandler.bind(this)\n );\n }\n }\n\n private _stopGlobalListening() {\n if (this._onMouseMoveListener) {\n this._onMouseMoveListener = this._onMouseMoveListener();\n }\n\n if (this._onMouseUpListener) {\n this._onMouseUpListener = this._onMouseUpListener();\n }\n }\n\n private disableScroll(axis: string): void {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n `overflow-${axis}`,\n 'hidden'\n );\n }\n\n private enableScroll(axis: string): void {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n `overflow-${axis}`,\n 'auto'\n );\n }\n\n private hideScrollbar(): void {\n if (\n this._contentRef.nativeElement.style.display !== 'none' &&\n !this.wrapper\n ) {\n this.parentNode = this._contentRef.nativeElement.parentNode;\n\n // create container element\n this.wrapper = this._renderer.createElement('div');\n this._renderer.addClass(this.wrapper, 'carousel-wrapper');\n // this._renderer.setAttribute(this.wrapper, 'class', 'carousel-wrapper');\n // this._renderer.addClass(this.wrapper, 'carousel-container');\n\n this.refreshWrapperDimensions();\n\n this._renderer.setStyle(this.wrapper, 'overflow', 'hidden');\n\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n `calc(100% + ${this.scrollbarWidth})`\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n `calc(100% + ${this.scrollbarWidth})`\n );\n\n // Append container element to component element.\n this._renderer.appendChild(\n this._elementRef.nativeElement,\n this.wrapper\n );\n\n // Append content element to container element.\n this._renderer.appendChild(\n this.wrapper,\n this._contentRef.nativeElement\n );\n\n this.adjustMarginToLastChild();\n }\n }\n\n private showScrollbar(): void {\n if (this.wrapper) {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n '100%'\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n this.wrapper.style.height\n );\n if (this.parentNode !== null) {\n this.parentNode.removeChild(this.wrapper);\n this.parentNode.appendChild(this._contentRef.nativeElement);\n }\n this.wrapper = null;\n\n this.adjustMarginToLastChild();\n }\n }\n\n private checkScrollbar() {\n if (\n this._contentRef.nativeElement.scrollWidth <=\n this._contentRef.nativeElement.clientWidth\n ) {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n '100%'\n );\n } else {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n `calc(100% + ${this.scrollbarWidth})`\n );\n }\n if (\n this._contentRef.nativeElement.scrollHeight <=\n this._contentRef.nativeElement.clientHeight\n ) {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n '100%'\n );\n } else {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n `calc(100% + ${this.scrollbarWidth})`\n );\n }\n }\n\n private setScrollBar(): void {\n if (this.scrollbarHidden) {\n this.hideScrollbar();\n } else {\n this.showScrollbar();\n }\n }\n\n private getScrollbarWidth(): number {\n /**\n * Browser Scrollbar Widths (2016)\n * OSX (Chrome, Safari, Firefox) - 15px\n * Windows XP (IE7, Chrome, Firefox) - 17px\n * Windows 7 (IE10, IE11, Chrome, Firefox) - 17px\n * Windows 8.1 (IE11, Chrome, Firefox) - 17px\n * Windows 10 (IE11, Chrome, Firefox) - 17px\n * Windows 10 (Edge 12/13) - 12px\n */\n const outer = this._renderer.createElement('div');\n this._renderer.setStyle(outer, 'visibility', 'hidden');\n this._renderer.setStyle(outer, 'width', '100px');\n this._renderer.setStyle(outer, 'msOverflowStyle', 'scrollbar'); // needed for WinJS apps\n // document.body.appendChild(outer);\n this._renderer.appendChild(this._document.body, outer);\n // this._renderer.appendChild(this._renderer.selectRootElement('body'), outer);\n const widthNoScroll = outer.offsetWidth;\n // force scrollbars\n this._renderer.setStyle(outer, 'overflow', 'scroll');\n\n // add innerdiv\n const inner = this._renderer.createElement('div');\n this._renderer.setStyle(inner, 'width', '100%');\n this._renderer.appendChild(outer, inner);\n\n const widthWithScroll = inner.offsetWidth;\n\n // remove divs\n this._renderer.removeChild(this._document.body, outer);\n\n /**\n * Scrollbar width will be 0 on Mac OS with the\n * default \"Only show scrollbars when scrolling\" setting (Yosemite and up).\n * setting default width to 20;\n */\n return widthNoScroll - widthWithScroll || 20;\n }\n\n private refreshWrapperDimensions() {\n if (this.wrapper) {\n const height =\n this._elementRef.nativeElement.style.height ||\n this._elementRef.nativeElement.offsetHeight;\n\n this._renderer.setStyle(this.wrapper, 'width', '100%');\n this._renderer.setStyle(\n this.wrapper,\n 'height',\n height === 0 ? 'auto' : height + 'px'\n );\n }\n }\n\n /*\n * The below solution is heavily inspired from\n * https://gist.github.com/andjosh/6764939\n */\n private scrollTo(element: Element, to: number, duration: number) {\n this.isAnimating = true;\n const start = element.scrollLeft,\n change = to - start - this.snapOffset,\n increment = 20;\n let currentTime = 0;\n\n // t = current time\n // b = start value\n // c = change in value\n // d = duration\n const easeInOutQuad = (t: number, b: number, c: number, d: number) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t * t + b;\n }\n t--;\n return (-c / 2) * (t * (t - 2) - 1) + b;\n };\n\n const animateScroll = () => {\n currentTime += increment;\n element.scrollLeft = easeInOutQuad(\n currentTime,\n start,\n change,\n duration\n );\n if (currentTime < duration) {\n this.scrollToTimer = setTimeout(animateScroll, increment);\n } else {\n // run one more frame to make sure the animation is fully finished\n setTimeout(() => {\n this.isAnimating = false;\n this.snapAnimationFinished.emit(this.currIndex);\n }, increment);\n }\n };\n animateScroll();\n }\n\n private locateCurrentIndex(snap?: boolean) {\n this.currentChildWidth(\n (\n currentChildWidth,\n nextChildrenWidth,\n childrenWidth,\n idx: number,\n stop\n ) => {\n if (\n this._contentRef.nativeElement.scrollLeft >=\n childrenWidth &&\n this._contentRef.nativeElement.scrollLeft <=\n nextChildrenWidth\n ) {\n if (\n nextChildrenWidth -\n this._contentRef.nativeElement.scrollLeft >\n currentChildWidth / 2 &&\n !this.isScrollReachesRightEnd()\n ) {\n // roll back scrolling\n if (!this.isAnimating) {\n this.currIndex = idx;\n }\n if (snap) {\n this.scrollTo(\n this._contentRef.nativeElement,\n childrenWidth,\n this.snapDuration\n );\n }\n } else if (\n this._contentRef.nativeElement.scrollLeft !== 0\n ) {\n // forward scrolling\n if (!this.isAnimating) {\n this.currIndex = idx + 1;\n }\n if (snap) {\n this.scrollTo(\n this._contentRef.nativeElement,\n childrenWidth + currentChildWidth,\n this.snapDuration\n );\n }\n }\n stop();\n } else if (idx + 1 === this._children.length - 1) {\n // reaches last index\n if (!this.isAnimating) {\n this.currIndex = idx + 1;\n }\n stop();\n }\n }\n );\n }\n\n private currentChildWidth(\n cb: (\n currentClildWidth: number,\n nextChildrenWidth: number,\n childrenWidth: number,\n index: number,\n breakFunc: () => void\n ) => void\n ) {\n let childrenWidth = 0;\n let shouldBreak = false;\n const breakFunc = function () {\n shouldBreak = true;\n };\n const childrenArr = this._children.toArray();\n\n for (let i = 0; i < childrenArr.length; i++) {\n if (i === childrenArr.length - 1) {\n break;\n }\n if (shouldBreak) {\n break;\n }\n\n const nextChildrenWidth =\n childrenWidth +\n childrenArr[i + 1]._elementRef.nativeElement.clientWidth;\n const currentClildWidth =\n childrenArr[i]._elementRef.nativeElement.clientWidth;\n cb(\n currentClildWidth,\n nextChildrenWidth,\n childrenWidth,\n i,\n breakFunc\n );\n\n childrenWidth += currentClildWidth;\n }\n }\n\n private toChildrenLocation(): number {\n let to = 0;\n const childrenArr = this._children.toArray();\n for (let i = 0; i < this.currIndex; i++) {\n to += childrenArr[i]._elementRef.nativeElement.clientWidth;\n }\n return to;\n }\n\n private locateCarouselItem(\n element: Element\n ): PepCarouselItemDirective | null {\n let item: PepCarouselItemDirective | null = null;\n const childrenArr = this._children.toArray();\n for (let i = 0; i < childrenArr.length; i++) {\n if (element === childrenArr[i]._elementRef.nativeElement) {\n item = childrenArr[i];\n }\n }\n return item;\n }\n\n private markElDimension() {\n if (this.wrapper) {\n this.elWidth = this.wrapper.style.width;\n this.elHeight = this.wrapper.style.height;\n } else {\n this.elWidth =\n this._elementRef.nativeElement.style.width ||\n this._elementRef.nativeElement.offsetWidth + 'px';\n this.elHeight =\n this._elementRef.nativeElement.style.height ||\n this._elementRef.nativeElement.offsetHeight + 'px';\n }\n const container = this.wrapper || this.parentNode;\n const containerWidth = container ? container.clientWidth : 0;\n if (this._children.length > 1) {\n this.indexBound = this.maximumIndex(\n containerWidth,\n this._children.toArray()\n );\n }\n }\n\n private maximumIndex(\n containerWidth: number,\n childrenElements: PepCarouselItemDirective[]\n ): number {\n let count = 0;\n let childrenWidth = 0;\n for (let i = 0; i <= childrenElements.length; i++) {\n // last N element\n const carouselItemDirective: PepCarouselItemDirective =\n childrenElements[childrenElements.length - 1 - i];\n if (!carouselItemDirective) {\n break;\n } else {\n const nativeElement =\n carouselItemDirective._elementRef.nativeElement;\n let itemWidth = nativeElement.clientWidth;\n if (itemWidth === 0 && nativeElement.firstElementChild) {\n itemWidth =\n carouselItemDirective._elementRef.nativeElement\n .firstElementChild.clientWidth;\n }\n childrenWidth += itemWidth;\n if (childrenWidth < containerWidth) {\n count++;\n } else {\n break;\n }\n }\n }\n return childrenElements.length - count;\n }\n\n private isScrollReachesRightEnd(): boolean {\n const scrollLeftPos =\n this._contentRef.nativeElement.scrollLeft +\n this._contentRef.nativeElement.offsetWidth;\n return scrollLeftPos >= this._contentRef.nativeElement.scrollWidth;\n }\n\n /**\n * adds a margin right style to the last child element which will resolve the issue\n * of last item gets cutoff.\n */\n private adjustMarginToLastChild(): void {\n // if (this._children && this._children.length > 0 && this.hideScrollbar) {\n // const childrenArr = this._children.toArray();\n // const lastItem = childrenArr[childrenArr.length - 1]._elementRef.nativeElement;\n // if (this.wrapper && childrenArr.length > 1) {\n // this._renderer.setStyle(lastItem, 'margin-right', this.scrollbarWidth);\n // } else {\n // this._renderer.setStyle(lastItem, 'margin-right', 0);\n // }\n // }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { PepCarouselComponent } from './carousel.component';\nimport { PepCarouselItemDirective } from './carousel-item.directive';\n\n@NgModule({\n exports: [PepCarouselComponent, PepCarouselItemDirective],\n declarations: [PepCarouselComponent, PepCarouselItemDirective],\n})\nexport class PepCarouselModule {}\n","/*\n * Public API Surface of carousel\n */\nexport * from './carousel.module';\nexport * from './carousel.component';\nexport * from './carousel-item.directive';\n// export * from './carousel.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -350,7 +350,7 @@ class PepCarouselComponent {
350
350
  this.reachesLeftBound.emit(false);
351
351
  this.reachesRightBound.emit(true);
352
352
  }
353
- else if (this._contentRef.nativeElement.scrollLeft === 0 &&
353
+ else if (this._contentRef.nativeElement.scrollLeft < 3 &&
354
354
  this._contentRef.nativeElement.scrollWidth >
355
355
  this._contentRef.nativeElement.clientWidth) {
356
356
  // reached left end
@@ -362,7 +362,7 @@ class PepCarouselComponent {
362
362
  this.reachesLeftBound.emit(false);
363
363
  this.reachesRightBound.emit(false);
364
364
  }
365
- }, 100);
365
+ }, 0);
366
366
  }
367
367
  onWheel(event) {
368
368
  if (this._xWheelEnabled) {
@@ -1 +1 @@
1
- {"version":3,"file":"pepperi-addons-ngx-lib-carousel.mjs","sources":["../../../projects/ngx-lib/carousel/carousel-item.directive.ts","../../../projects/ngx-lib/carousel/carousel.component.ts","../../../projects/ngx-lib/carousel/carousel.module.ts","../../../projects/ngx-lib/carousel/public-api.ts","../../../projects/ngx-lib/carousel/pepperi-addons-ngx-lib-carousel.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n Input,\n HostBinding,\n Inject,\n} from '@angular/core';\n\n@Directive({\n selector: '[pepCarouselItem]',\n})\nexport class PepCarouselItemDirective {\n @HostBinding('style.display')\n display = 'inline-block';\n\n @Input('dragDisabled')\n get dragDisabled() {\n return this._dragDisabled;\n }\n set dragDisabled(value: boolean) {\n this._dragDisabled = value;\n }\n\n _dragDisabled = false;\n\n _elementRef: ElementRef;\n\n constructor(@Inject(ElementRef) elementRef: ElementRef) {\n this._elementRef = elementRef;\n }\n}\n","import {\n ElementRef,\n Component,\n Renderer2,\n OnDestroy,\n Input,\n Output,\n AfterViewInit,\n OnChanges,\n EventEmitter,\n ViewChild,\n ContentChildren,\n AfterViewChecked,\n QueryList,\n Inject,\n HostBinding,\n HostListener,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { PepCarouselItemDirective } from './carousel-item.directive';\n\n@Component({\n selector: 'pep-carousel',\n template: `\n <div class=\"carousel-content\" #contentRef>\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n overflow: hidden;\n display: block;\n }\n .carousel-content {\n height: 100%;\n overflow: auto;\n white-space: nowrap;\n }\n `,\n ],\n})\nexport class PepCarouselComponent\n implements OnDestroy, AfterViewInit, OnChanges, AfterViewChecked {\n private _index = 0;\n\n private _scrollbarHidden = false;\n\n private _disabled = false;\n\n private _xDisabled = false;\n\n private _xWheelEnabled = false;\n\n private _yDisabled = false;\n\n private _dragDisabled = false;\n\n private _snapDisabled = false;\n\n private _snapOffset = 0;\n\n private _snapDuration = 500;\n\n private _isDragging = false;\n\n private _onMouseMoveListener: () => any;\n\n private _onMouseUpListener: () => any;\n\n private _onMouseDownListener: () => any;\n\n private _onScrollListener: () => any;\n\n private _onDragStartListener: () => any;\n\n /**\n * Is the user currently pressing the element\n */\n isPressed = false;\n\n /**\n * Is the user currently scrolling the element\n */\n isScrolling = false;\n\n scrollTimer: any; // | NodeJS.Timer = -1;\n\n scrollToTimer: any; // | NodeJS.Timer = -1;\n\n /**\n * Is the user currently dragging the element\n */\n get isDragging(): boolean {\n return this._isDragging;\n }\n\n /**\n * The x coordinates on the element\n */\n downX = 0;\n\n /**\n * The y coordinates on the element\n */\n downY = 0;\n\n displayType: string | null = 'block';\n\n elWidth: string | null = null;\n\n elHeight: string | null = null;\n\n /**\n * The parentNode of carousel Element\n */\n parentNode: HTMLElement;\n\n /**\n * The carousel Element\n */\n\n @ViewChild('contentRef', { static: true }) _contentRef: ElementRef;\n\n @ContentChildren(PepCarouselItemDirective, { descendants: true })\n _children: QueryList<PepCarouselItemDirective>;\n\n @HostBinding('style.pointer-events') _pointerEvents = 'auto';\n\n wrapper: HTMLDivElement | null;\n\n scrollbarWidth: string | null = null;\n\n get currIndex() {\n return this._index;\n }\n set currIndex(value) {\n if (value !== this._index) {\n this._index = value;\n this.indexChanged.emit(value);\n }\n }\n\n isAnimating = false;\n\n prevChildrenLength = 0;\n\n indexBound = 0;\n\n @Output() dsInitialized = new EventEmitter<void>();\n\n @Output() indexChanged = new EventEmitter<number>();\n\n @Output() reachesLeftBound = new EventEmitter<boolean>();\n\n @Output() reachesRightBound = new EventEmitter<boolean>();\n\n @Output() snapAnimationFinished = new EventEmitter<number>();\n\n @Output() dragStart = new EventEmitter<void>();\n\n @Output() dragEnd = new EventEmitter<void>();\n\n /**\n * Whether the scrollbar is hidden\n */\n @Input('scrollbarHidden')\n get scrollbarHidden() {\n return this._scrollbarHidden;\n }\n set scrollbarHidden(value: boolean) {\n this._scrollbarHidden = value;\n }\n\n /**\n * Whether horizontally and vertically draging and scrolling is be disabled\n */\n @Input('disabled')\n get disabled() {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = value;\n }\n\n /**\n * Whether horizontally dragging and scrolling is be disabled\n */\n @Input('xDisabled')\n get xDisabled() {\n return this._xDisabled;\n }\n set xDisabled(value: boolean) {\n this._xDisabled = value;\n }\n\n /**\n * Whether vertically dragging and scrolling events is disabled\n */\n @Input('yDisabled')\n get yDisabled() {\n return this._yDisabled;\n }\n set yDisabled(value: boolean) {\n this._yDisabled = value;\n }\n\n /**\n * Whether scrolling horizontally with mouse wheel is enabled\n */\n @Input('xWheelEnabled')\n get xWheelEnabled() {\n return this._xWheelEnabled;\n }\n set xWheelEnabled(value: boolean) {\n this._xWheelEnabled = value;\n }\n\n @Input('dragDisabled')\n get dragDisabled() {\n return this._dragDisabled;\n }\n set dragDisabled(value: boolean) {\n this._dragDisabled = value;\n }\n\n @Input('snapDisabled')\n get snapDisabled() {\n return this._snapDisabled;\n }\n set snapDisabled(value: boolean) {\n this._snapDisabled = value;\n }\n\n @Input('snapOffset')\n get snapOffset() {\n return this._snapOffset;\n }\n set snapOffset(value: number) {\n this._snapOffset = value;\n }\n\n @Input('snapDuration')\n get snapDuration() {\n return this._snapDuration;\n }\n set snapDuration(value: number) {\n this._snapDuration = value;\n }\n\n constructor(\n @Inject(ElementRef) private _elementRef: ElementRef,\n @Inject(Renderer2) private _renderer: Renderer2,\n @Inject(DOCUMENT) private _document: any\n ) {\n this.scrollbarWidth = `${this.getScrollbarWidth()}px`;\n }\n\n ngOnChanges() {\n this.setScrollBar();\n\n if (this.xDisabled || this.disabled || this._scrollbarHidden) {\n this.disableScroll('x');\n } else {\n this.enableScroll('x');\n }\n\n if (this.yDisabled || this.disabled) {\n this.disableScroll('y');\n } else {\n this.enableScroll('y');\n }\n }\n\n ngAfterViewInit() {\n // auto assign computed css\n this._renderer.setAttribute(\n this._contentRef.nativeElement,\n 'drag-scroll',\n 'true'\n );\n\n this.displayType =\n typeof window !== 'undefined'\n ? window.getComputedStyle(this._elementRef.nativeElement)\n .display\n : 'block';\n\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'display',\n this.displayType\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'whiteSpace',\n 'noWrap'\n );\n\n // store ele width height for later user\n this.markElDimension();\n\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n this.elWidth\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n this.elHeight\n );\n\n if (this.wrapper) {\n this.checkScrollbar();\n }\n\n this._onMouseDownListener = this._renderer.listen(\n this._contentRef.nativeElement,\n 'mousedown',\n this.onMouseDownHandler.bind(this)\n );\n this._onScrollListener = this._renderer.listen(\n this._contentRef.nativeElement,\n 'scroll',\n this.onScrollHandler.bind(this)\n );\n // prevent Firefox from dragging images\n this._onDragStartListener = this._renderer.listen(\n 'document',\n 'dragstart',\n (e) => {\n e.preventDefault();\n }\n );\n this.checkNavStatus();\n this.dsInitialized.emit();\n this.adjustMarginToLastChild();\n }\n\n ngAfterViewChecked() {\n // avoid extra checks\n if (this._children.length !== this.prevChildrenLength) {\n this.markElDimension();\n this.checkScrollbar();\n this.prevChildrenLength = this._children.length;\n this.checkNavStatus();\n }\n }\n\n ngOnDestroy() {\n this._renderer.setAttribute(\n this._contentRef.nativeElement,\n 'drag-scroll',\n 'false'\n );\n if (this._onMouseDownListener) {\n this._onMouseDownListener = this._onMouseDownListener();\n }\n if (this._onScrollListener) {\n this._onScrollListener = this._onScrollListener();\n }\n if (this._onDragStartListener) {\n this._onDragStartListener = this._onDragStartListener();\n }\n }\n\n onMouseMoveHandler(event: MouseEvent) {\n this.onMouseMove(event);\n }\n\n onMouseMove(event: MouseEvent) {\n if (this.isPressed && !this.disabled) {\n // Workaround for prevent scroll stuck if browser lost focus\n // MouseEvent.buttons not support by Safari\n if (!event.buttons && !event.which) {\n return this.onMouseUpHandler(event);\n }\n\n this._pointerEvents = 'none';\n this._setIsDragging(true);\n\n // Drag X\n if (!this.xDisabled && !this.dragDisabled) {\n const clientX = (event as MouseEvent).clientX;\n this._contentRef.nativeElement.scrollLeft =\n this._contentRef.nativeElement.scrollLeft -\n clientX +\n this.downX;\n this.downX = clientX;\n }\n\n // Drag Y\n if (!this.yDisabled && !this.dragDisabled) {\n const clientY = (event as MouseEvent).clientY;\n this._contentRef.nativeElement.scrollTop =\n this._contentRef.nativeElement.scrollTop -\n clientY +\n this.downY;\n this.downY = clientY;\n }\n }\n }\n\n onMouseDownHandler(event: MouseEvent) {\n const carouselItem: PepCarouselItemDirective | null = this.locateCarouselItem(\n event.target as Element\n );\n if (carouselItem && carouselItem.dragDisabled) {\n return;\n }\n\n const isTouchEvent = event.type === 'touchstart';\n\n this._startGlobalListening(isTouchEvent);\n this.isPressed = true;\n\n const mouseEvent = event as MouseEvent;\n this.downX = mouseEvent.clientX;\n this.downY = mouseEvent.clientY;\n\n clearTimeout(this.scrollToTimer as number);\n }\n\n onScrollHandler() {\n this.checkNavStatus();\n if (!this.isPressed && !this.isAnimating && !this.snapDisabled) {\n this.isScrolling = true;\n clearTimeout(this.scrollTimer as number);\n this.scrollTimer = setTimeout(() => {\n this.isScrolling = false;\n this.locateCurrentIndex(true);\n }, 500);\n } else {\n this.locateCurrentIndex();\n }\n }\n\n onMouseUpHandler(event: MouseEvent) {\n if (this.isPressed) {\n this.isPressed = false;\n this._pointerEvents = 'auto';\n this._setIsDragging(false);\n if (!this.snapDisabled) {\n this.locateCurrentIndex(true);\n } else {\n this.locateCurrentIndex();\n }\n this._stopGlobalListening();\n }\n }\n\n /*\n * Nav button\n */\n moveLeft() {\n if (this.currIndex !== 0 || this.snapDisabled) {\n this.currIndex--;\n clearTimeout(this.scrollToTimer as number);\n this.scrollTo(\n this._contentRef.nativeElement,\n this.toChildrenLocation(),\n this.snapDuration\n );\n }\n }\n\n moveRight() {\n const container = this.wrapper || this.parentNode;\n const containerWidth = container ? container.clientWidth : 0;\n\n if (\n !this.isScrollReachesRightEnd() &&\n this.currIndex <\n this.maximumIndex(containerWidth, this._children.toArray())\n ) {\n this.currIndex++;\n clearTimeout(this.scrollToTimer as number);\n this.scrollTo(\n this._contentRef.nativeElement,\n this.toChildrenLocation(),\n this.snapDuration\n );\n }\n }\n\n moveTo(index: number) {\n const container = this.wrapper || this.parentNode;\n const containerWidth = container ? container.clientWidth : 0;\n if (\n index >= 0 &&\n index !== this.currIndex &&\n this.currIndex <=\n this.maximumIndex(containerWidth, this._children.toArray())\n ) {\n this.currIndex = Math.min(\n index,\n this.maximumIndex(containerWidth, this._children.toArray())\n );\n clearTimeout(this.scrollToTimer as number);\n this.scrollTo(\n this._contentRef.nativeElement,\n this.toChildrenLocation(),\n this.snapDuration\n );\n }\n }\n\n checkNavStatus() {\n setTimeout(() => {\n const onlyOneItem = Boolean(this._children.length <= 1);\n const containerIsLargerThanContent = Boolean(\n this._contentRef.nativeElement.scrollWidth <=\n this._contentRef.nativeElement.clientWidth\n );\n if (onlyOneItem || containerIsLargerThanContent) {\n // only one element\n this.reachesLeftBound.emit(true);\n this.reachesRightBound.emit(true);\n } else if (this.isScrollReachesRightEnd()) {\n // reached right end\n this.reachesLeftBound.emit(false);\n this.reachesRightBound.emit(true);\n } else if (\n this._contentRef.nativeElement.scrollLeft === 0 &&\n this._contentRef.nativeElement.scrollWidth >\n this._contentRef.nativeElement.clientWidth\n ) {\n // reached left end\n this.reachesLeftBound.emit(true);\n this.reachesRightBound.emit(false);\n } else {\n // in the middle\n this.reachesLeftBound.emit(false);\n this.reachesRightBound.emit(false);\n }\n }, 100);\n }\n\n @HostListener('wheel', ['$event'])\n public onWheel(event: WheelEvent) {\n if (this._xWheelEnabled) {\n event.preventDefault();\n\n if (this._snapDisabled) {\n this._contentRef.nativeElement.scrollBy(event.deltaY, 0);\n } else {\n if (event.deltaY < 0) {\n this.moveLeft();\n } else if (event.deltaY > 0) {\n this.moveRight();\n }\n }\n }\n }\n\n @HostListener('window:resize')\n public onWindowResize() {\n this.refreshWrapperDimensions();\n this.checkNavStatus();\n }\n\n private _setIsDragging(value: boolean) {\n if (this._isDragging === value) {\n return;\n }\n\n this._isDragging = value;\n value ? this.dragStart.emit() : this.dragEnd.emit();\n }\n\n private _startGlobalListening(isTouchEvent: boolean) {\n if (!this._onMouseMoveListener) {\n const eventName = isTouchEvent ? 'touchmove' : 'mousemove';\n this._onMouseMoveListener = this._renderer.listen(\n 'document',\n eventName,\n this.onMouseMoveHandler.bind(this)\n );\n }\n\n if (!this._onMouseUpListener) {\n const eventName = isTouchEvent ? 'touchend' : 'mouseup';\n this._onMouseUpListener = this._renderer.listen(\n 'document',\n eventName,\n this.onMouseUpHandler.bind(this)\n );\n }\n }\n\n private _stopGlobalListening() {\n if (this._onMouseMoveListener) {\n this._onMouseMoveListener = this._onMouseMoveListener();\n }\n\n if (this._onMouseUpListener) {\n this._onMouseUpListener = this._onMouseUpListener();\n }\n }\n\n private disableScroll(axis: string): void {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n `overflow-${axis}`,\n 'hidden'\n );\n }\n\n private enableScroll(axis: string): void {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n `overflow-${axis}`,\n 'auto'\n );\n }\n\n private hideScrollbar(): void {\n if (\n this._contentRef.nativeElement.style.display !== 'none' &&\n !this.wrapper\n ) {\n this.parentNode = this._contentRef.nativeElement.parentNode;\n\n // create container element\n this.wrapper = this._renderer.createElement('div');\n this._renderer.addClass(this.wrapper, 'carousel-wrapper');\n // this._renderer.setAttribute(this.wrapper, 'class', 'carousel-wrapper');\n // this._renderer.addClass(this.wrapper, 'carousel-container');\n\n this.refreshWrapperDimensions();\n\n this._renderer.setStyle(this.wrapper, 'overflow', 'hidden');\n\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n `calc(100% + ${this.scrollbarWidth})`\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n `calc(100% + ${this.scrollbarWidth})`\n );\n\n // Append container element to component element.\n this._renderer.appendChild(\n this._elementRef.nativeElement,\n this.wrapper\n );\n\n // Append content element to container element.\n this._renderer.appendChild(\n this.wrapper,\n this._contentRef.nativeElement\n );\n\n this.adjustMarginToLastChild();\n }\n }\n\n private showScrollbar(): void {\n if (this.wrapper) {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n '100%'\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n this.wrapper.style.height\n );\n if (this.parentNode !== null) {\n this.parentNode.removeChild(this.wrapper);\n this.parentNode.appendChild(this._contentRef.nativeElement);\n }\n this.wrapper = null;\n\n this.adjustMarginToLastChild();\n }\n }\n\n private checkScrollbar() {\n if (\n this._contentRef.nativeElement.scrollWidth <=\n this._contentRef.nativeElement.clientWidth\n ) {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n '100%'\n );\n } else {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n `calc(100% + ${this.scrollbarWidth})`\n );\n }\n if (\n this._contentRef.nativeElement.scrollHeight <=\n this._contentRef.nativeElement.clientHeight\n ) {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n '100%'\n );\n } else {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n `calc(100% + ${this.scrollbarWidth})`\n );\n }\n }\n\n private setScrollBar(): void {\n if (this.scrollbarHidden) {\n this.hideScrollbar();\n } else {\n this.showScrollbar();\n }\n }\n\n private getScrollbarWidth(): number {\n /**\n * Browser Scrollbar Widths (2016)\n * OSX (Chrome, Safari, Firefox) - 15px\n * Windows XP (IE7, Chrome, Firefox) - 17px\n * Windows 7 (IE10, IE11, Chrome, Firefox) - 17px\n * Windows 8.1 (IE11, Chrome, Firefox) - 17px\n * Windows 10 (IE11, Chrome, Firefox) - 17px\n * Windows 10 (Edge 12/13) - 12px\n */\n const outer = this._renderer.createElement('div');\n this._renderer.setStyle(outer, 'visibility', 'hidden');\n this._renderer.setStyle(outer, 'width', '100px');\n this._renderer.setStyle(outer, 'msOverflowStyle', 'scrollbar'); // needed for WinJS apps\n // document.body.appendChild(outer);\n this._renderer.appendChild(this._document.body, outer);\n // this._renderer.appendChild(this._renderer.selectRootElement('body'), outer);\n const widthNoScroll = outer.offsetWidth;\n // force scrollbars\n this._renderer.setStyle(outer, 'overflow', 'scroll');\n\n // add innerdiv\n const inner = this._renderer.createElement('div');\n this._renderer.setStyle(inner, 'width', '100%');\n this._renderer.appendChild(outer, inner);\n\n const widthWithScroll = inner.offsetWidth;\n\n // remove divs\n this._renderer.removeChild(this._document.body, outer);\n\n /**\n * Scrollbar width will be 0 on Mac OS with the\n * default \"Only show scrollbars when scrolling\" setting (Yosemite and up).\n * setting default width to 20;\n */\n return widthNoScroll - widthWithScroll || 20;\n }\n\n private refreshWrapperDimensions() {\n if (this.wrapper) {\n const height =\n this._elementRef.nativeElement.style.height ||\n this._elementRef.nativeElement.offsetHeight;\n\n this._renderer.setStyle(this.wrapper, 'width', '100%');\n this._renderer.setStyle(\n this.wrapper,\n 'height',\n height === 0 ? 'auto' : height + 'px'\n );\n }\n }\n\n /*\n * The below solution is heavily inspired from\n * https://gist.github.com/andjosh/6764939\n */\n private scrollTo(element: Element, to: number, duration: number) {\n this.isAnimating = true;\n const start = element.scrollLeft,\n change = to - start - this.snapOffset,\n increment = 20;\n let currentTime = 0;\n\n // t = current time\n // b = start value\n // c = change in value\n // d = duration\n const easeInOutQuad = (t: number, b: number, c: number, d: number) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t * t + b;\n }\n t--;\n return (-c / 2) * (t * (t - 2) - 1) + b;\n };\n\n const animateScroll = () => {\n currentTime += increment;\n element.scrollLeft = easeInOutQuad(\n currentTime,\n start,\n change,\n duration\n );\n if (currentTime < duration) {\n this.scrollToTimer = setTimeout(animateScroll, increment);\n } else {\n // run one more frame to make sure the animation is fully finished\n setTimeout(() => {\n this.isAnimating = false;\n this.snapAnimationFinished.emit(this.currIndex);\n }, increment);\n }\n };\n animateScroll();\n }\n\n private locateCurrentIndex(snap?: boolean) {\n this.currentChildWidth(\n (\n currentChildWidth,\n nextChildrenWidth,\n childrenWidth,\n idx: number,\n stop\n ) => {\n if (\n this._contentRef.nativeElement.scrollLeft >=\n childrenWidth &&\n this._contentRef.nativeElement.scrollLeft <=\n nextChildrenWidth\n ) {\n if (\n nextChildrenWidth -\n this._contentRef.nativeElement.scrollLeft >\n currentChildWidth / 2 &&\n !this.isScrollReachesRightEnd()\n ) {\n // roll back scrolling\n if (!this.isAnimating) {\n this.currIndex = idx;\n }\n if (snap) {\n this.scrollTo(\n this._contentRef.nativeElement,\n childrenWidth,\n this.snapDuration\n );\n }\n } else if (\n this._contentRef.nativeElement.scrollLeft !== 0\n ) {\n // forward scrolling\n if (!this.isAnimating) {\n this.currIndex = idx + 1;\n }\n if (snap) {\n this.scrollTo(\n this._contentRef.nativeElement,\n childrenWidth + currentChildWidth,\n this.snapDuration\n );\n }\n }\n stop();\n } else if (idx + 1 === this._children.length - 1) {\n // reaches last index\n if (!this.isAnimating) {\n this.currIndex = idx + 1;\n }\n stop();\n }\n }\n );\n }\n\n private currentChildWidth(\n cb: (\n currentClildWidth: number,\n nextChildrenWidth: number,\n childrenWidth: number,\n index: number,\n breakFunc: () => void\n ) => void\n ) {\n let childrenWidth = 0;\n let shouldBreak = false;\n const breakFunc = function () {\n shouldBreak = true;\n };\n const childrenArr = this._children.toArray();\n\n for (let i = 0; i < childrenArr.length; i++) {\n if (i === childrenArr.length - 1) {\n break;\n }\n if (shouldBreak) {\n break;\n }\n\n const nextChildrenWidth =\n childrenWidth +\n childrenArr[i + 1]._elementRef.nativeElement.clientWidth;\n const currentClildWidth =\n childrenArr[i]._elementRef.nativeElement.clientWidth;\n cb(\n currentClildWidth,\n nextChildrenWidth,\n childrenWidth,\n i,\n breakFunc\n );\n\n childrenWidth += currentClildWidth;\n }\n }\n\n private toChildrenLocation(): number {\n let to = 0;\n const childrenArr = this._children.toArray();\n for (let i = 0; i < this.currIndex; i++) {\n to += childrenArr[i]._elementRef.nativeElement.clientWidth;\n }\n return to;\n }\n\n private locateCarouselItem(\n element: Element\n ): PepCarouselItemDirective | null {\n let item: PepCarouselItemDirective | null = null;\n const childrenArr = this._children.toArray();\n for (let i = 0; i < childrenArr.length; i++) {\n if (element === childrenArr[i]._elementRef.nativeElement) {\n item = childrenArr[i];\n }\n }\n return item;\n }\n\n private markElDimension() {\n if (this.wrapper) {\n this.elWidth = this.wrapper.style.width;\n this.elHeight = this.wrapper.style.height;\n } else {\n this.elWidth =\n this._elementRef.nativeElement.style.width ||\n this._elementRef.nativeElement.offsetWidth + 'px';\n this.elHeight =\n this._elementRef.nativeElement.style.height ||\n this._elementRef.nativeElement.offsetHeight + 'px';\n }\n const container = this.wrapper || this.parentNode;\n const containerWidth = container ? container.clientWidth : 0;\n if (this._children.length > 1) {\n this.indexBound = this.maximumIndex(\n containerWidth,\n this._children.toArray()\n );\n }\n }\n\n private maximumIndex(\n containerWidth: number,\n childrenElements: PepCarouselItemDirective[]\n ): number {\n let count = 0;\n let childrenWidth = 0;\n for (let i = 0; i <= childrenElements.length; i++) {\n // last N element\n const carouselItemDirective: PepCarouselItemDirective =\n childrenElements[childrenElements.length - 1 - i];\n if (!carouselItemDirective) {\n break;\n } else {\n const nativeElement =\n carouselItemDirective._elementRef.nativeElement;\n let itemWidth = nativeElement.clientWidth;\n if (itemWidth === 0 && nativeElement.firstElementChild) {\n itemWidth =\n carouselItemDirective._elementRef.nativeElement\n .firstElementChild.clientWidth;\n }\n childrenWidth += itemWidth;\n if (childrenWidth < containerWidth) {\n count++;\n } else {\n break;\n }\n }\n }\n return childrenElements.length - count;\n }\n\n private isScrollReachesRightEnd(): boolean {\n const scrollLeftPos =\n this._contentRef.nativeElement.scrollLeft +\n this._contentRef.nativeElement.offsetWidth;\n return scrollLeftPos >= this._contentRef.nativeElement.scrollWidth;\n }\n\n /**\n * adds a margin right style to the last child element which will resolve the issue\n * of last item gets cutoff.\n */\n private adjustMarginToLastChild(): void {\n // if (this._children && this._children.length > 0 && this.hideScrollbar) {\n // const childrenArr = this._children.toArray();\n // const lastItem = childrenArr[childrenArr.length - 1]._elementRef.nativeElement;\n // if (this.wrapper && childrenArr.length > 1) {\n // this._renderer.setStyle(lastItem, 'margin-right', this.scrollbarWidth);\n // } else {\n // this._renderer.setStyle(lastItem, 'margin-right', 0);\n // }\n // }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { PepCarouselComponent } from './carousel.component';\nimport { PepCarouselItemDirective } from './carousel-item.directive';\n\n@NgModule({\n exports: [PepCarouselComponent, PepCarouselItemDirective],\n declarations: [PepCarouselComponent, PepCarouselItemDirective],\n})\nexport class PepCarouselModule {}\n","/*\n * Public API Surface of carousel\n */\nexport * from './carousel.module';\nexport * from './carousel.component';\nexport * from './carousel-item.directive';\n// export * from './carousel.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAWa,wBAAwB,CAAA;AAgBjC,IAAA,WAAA,CAAgC,UAAsB,EAAA;QAdtD,IAAO,CAAA,OAAA,GAAG,cAAc,CAAC;QAUzB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AAKlB,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;KACjC;AAdD,IAAA,IACI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;;AAVQ,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,kBAgBb,UAAU,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;yGAhBrB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mBAAmB;AAChC,iBAAA,CAAA;;0BAiBgB,MAAM;2BAAC,UAAU,CAAA;4CAd9B,OAAO,EAAA,CAAA;sBADN,WAAW;uBAAC,eAAe,CAAA;gBAIxB,YAAY,EAAA,CAAA;sBADf,KAAK;uBAAC,cAAc,CAAA;;;MC4BZ,oBAAoB,CAAA;AAgN7B,IAAA,WAAA,CACgC,WAAuB,EACxB,SAAoB,EACrB,SAAc,EAAA;QAFZ,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;QACxB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACrB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAK;QAjNpC,IAAM,CAAA,MAAA,GAAG,CAAC,CAAC;QAEX,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QAEzB,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAElB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAEnB,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;QAEvB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAEnB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAEtB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAEtB,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;QAEhB,IAAa,CAAA,aAAA,GAAG,GAAG,CAAC;QAEpB,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAY5B;;AAEG;QACH,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAElB;;AAEG;QACH,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAapB;;AAEG;QACH,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC;AAEV;;AAEG;QACH,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC;QAEV,IAAW,CAAA,WAAA,GAAkB,OAAO,CAAC;QAErC,IAAO,CAAA,OAAA,GAAkB,IAAI,CAAC;QAE9B,IAAQ,CAAA,QAAA,GAAkB,IAAI,CAAC;QAgBM,IAAc,CAAA,cAAA,GAAG,MAAM,CAAC;QAI7D,IAAc,CAAA,cAAA,GAAkB,IAAI,CAAC;QAYrC,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;QAEpB,IAAkB,CAAA,kBAAA,GAAG,CAAC,CAAC;QAEvB,IAAU,CAAA,UAAA,GAAG,CAAC,CAAC;AAEL,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEzC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU,CAAC;AAE1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAW,CAAC;AAE/C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAW,CAAC;AAEhD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAU,CAAC;AAEnD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;AAErC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;QA8FzC,IAAI,CAAC,cAAc,GAAG,CAAA,EAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA,EAAA,CAAI,CAAC;KACzD;AAtKD;;AAEG;AACH,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;AAsCD,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IACD,IAAI,SAAS,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,SAAA;KACJ;AAsBD;;AAEG;AACH,IAAA,IACI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAChC;IACD,IAAI,eAAe,CAAC,KAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;KACjC;AAED;;AAEG;AACH,IAAA,IACI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IACD,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KAC1B;AAED;;AAEG;AACH,IAAA,IACI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IACD,IAAI,SAAS,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KAC3B;AAED;;AAEG;AACH,IAAA,IACI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IACD,IAAI,SAAS,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KAC3B;AAED;;AAEG;AACH,IAAA,IACI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;IACD,IAAI,aAAa,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC/B;AAED,IAAA,IACI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;AAED,IAAA,IACI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;AAED,IAAA,IACI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;IACD,IAAI,UAAU,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC5B;AAED,IAAA,IACI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;IAUD,WAAW,GAAA;QACP,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC1D,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC3B,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1B,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC3B,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1B,SAAA;KACJ;IAED,eAAe,GAAA;;AAEX,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CACvB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,aAAa,EACb,MAAM,CACT,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW;YACZ,OAAO,MAAM,KAAK,WAAW;kBACvB,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;qBACpD,OAAO;kBACV,OAAO,CAAC;AAElB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,SAAS,EACT,IAAI,CAAC,WAAW,CACnB,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,YAAY,EACZ,QAAQ,CACX,CAAC;;QAGF,IAAI,CAAC,eAAe,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,IAAI,CAAC,OAAO,CACf,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,IAAI,CAAC,QAAQ,CAChB,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,SAAA;QAED,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC7C,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,WAAW,EACX,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CACrC,CAAC;QACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC1C,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC,CAAC;;AAEF,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC7C,UAAU,EACV,WAAW,EACX,CAAC,CAAC,KAAI;YACF,CAAC,CAAC,cAAc,EAAE,CAAC;AACvB,SAAC,CACJ,CAAC;QACF,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAClC;IAED,kBAAkB,GAAA;;QAEd,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,kBAAkB,EAAE;YACnD,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAChD,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,SAAA;KACJ;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CACvB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,aAAa,EACb,OAAO,CACV,CAAC;QACF,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC3D,SAAA;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACrD,SAAA;QACD,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC3D,SAAA;KACJ;AAED,IAAA,kBAAkB,CAAC,KAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAC3B;AAED,IAAA,WAAW,CAAC,KAAiB,EAAA;QACzB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;;YAGlC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAChC,gBAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvC,aAAA;AAED,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;;YAG1B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACvC,gBAAA,MAAM,OAAO,GAAI,KAAoB,CAAC,OAAO,CAAC;AAC9C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;AACrC,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;wBACzC,OAAO;wBACP,IAAI,CAAC,KAAK,CAAC;AACf,gBAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AACxB,aAAA;;YAGD,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACvC,gBAAA,MAAM,OAAO,GAAI,KAAoB,CAAC,OAAO,CAAC;AAC9C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS;AACpC,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS;wBACxC,OAAO;wBACP,IAAI,CAAC,KAAK,CAAC;AACf,gBAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AACxB,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QAChC,MAAM,YAAY,GAAoC,IAAI,CAAC,kBAAkB,CACzE,KAAK,CAAC,MAAiB,CAC1B,CAAC;AACF,QAAA,IAAI,YAAY,IAAI,YAAY,CAAC,YAAY,EAAE;YAC3C,OAAO;AACV,SAAA;AAED,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AAEjD,QAAA,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,MAAM,UAAU,GAAG,KAAmB,CAAC;AACvC,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC;AAEhC,QAAA,YAAY,CAAC,IAAI,CAAC,aAAuB,CAAC,CAAC;KAC9C;IAED,eAAe,GAAA;QACX,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC5D,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,YAAY,CAAC,IAAI,CAAC,WAAqB,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAK;AAC/B,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;aACjC,EAAE,GAAG,CAAC,CAAC;AACX,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC7B,SAAA;KACJ;AAED,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QAC9B,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACpB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACjC,aAAA;AAAM,iBAAA;gBACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC7B,aAAA;YACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/B,SAAA;KACJ;AAED;;AAEG;IACH,QAAQ,GAAA;QACJ,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;YAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,YAAY,CAAC,IAAI,CAAC,aAAuB,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,kBAAkB,EAAE,EACzB,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,SAAA;KACJ;IAED,SAAS,GAAA;QACL,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;AAE7D,QAAA,IACI,CAAC,IAAI,CAAC,uBAAuB,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAC7D;YACE,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,YAAY,CAAC,IAAI,CAAC,aAAuB,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,kBAAkB,EAAE,EACzB,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,SAAA;KACJ;AAED,IAAA,MAAM,CAAC,KAAa,EAAA;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;QAC7D,IACI,KAAK,IAAI,CAAC;YACV,KAAK,KAAK,IAAI,CAAC,SAAS;AACxB,YAAA,IAAI,CAAC,SAAS;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAC7D;YACE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CACrB,KAAK,EACL,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAC9D,CAAC;AACF,YAAA,YAAY,CAAC,IAAI,CAAC,aAAuB,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,kBAAkB,EAAE,EACzB,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,SAAA;KACJ;IAED,cAAc,GAAA;QACV,UAAU,CAAC,MAAK;AACZ,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YACxD,MAAM,4BAA4B,GAAG,OAAO,CACxC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW;AAC1C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAC7C,CAAC;YACF,IAAI,WAAW,IAAI,4BAA4B,EAAE;;AAE7C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;;AAEvC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,aAAA;iBAAM,IACH,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,KAAK,CAAC;AAC/C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW;AAC1C,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,EAC5C;;AAEE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,aAAA;AAAM,iBAAA;;AAEH,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,aAAA;SACJ,EAAE,GAAG,CAAC,CAAC;KACX;AAGM,IAAA,OAAO,CAAC,KAAiB,EAAA;QAC5B,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,KAAK,CAAC,cAAc,EAAE,CAAC;YAEvB,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC5D,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;AACnB,iBAAA;AAAM,qBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,IAAI,CAAC,SAAS,EAAE,CAAC;AACpB,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;IAGM,cAAc,GAAA;QACjB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,cAAc,EAAE,CAAC;KACzB;AAEO,IAAA,cAAc,CAAC,KAAc,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;YAC5B,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACvD;AAEO,IAAA,qBAAqB,CAAC,YAAqB,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC5B,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;YAC3D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC7C,UAAU,EACV,SAAS,EACT,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CACrC,CAAC;AACL,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B,MAAM,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;YACxD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC3C,UAAU,EACV,SAAS,EACT,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CACnC,CAAC;AACL,SAAA;KACJ;IAEO,oBAAoB,GAAA;QACxB,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC3D,SAAA;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACvD,SAAA;KACJ;AAEO,IAAA,aAAa,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,CAAY,SAAA,EAAA,IAAI,EAAE,EAClB,QAAQ,CACX,CAAC;KACL;AAEO,IAAA,YAAY,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,CAAY,SAAA,EAAA,IAAI,EAAE,EAClB,MAAM,CACT,CAAC;KACL;IAEO,aAAa,GAAA;QACjB,IACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM;YACvD,CAAC,IAAI,CAAC,OAAO,EACf;YACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC;;YAG5D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;;;YAI1D,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAEhC,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAE5D,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,CAAe,YAAA,EAAA,IAAI,CAAC,cAAc,CAAA,CAAA,CAAG,CACxC,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,CAAe,YAAA,EAAA,IAAI,CAAC,cAAc,CAAA,CAAA,CAAG,CACxC,CAAC;;AAGF,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CACtB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,OAAO,CACf,CAAC;;AAGF,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CACtB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,WAAW,CAAC,aAAa,CACjC,CAAC;YAEF,IAAI,CAAC,uBAAuB,EAAE,CAAC;AAClC,SAAA;KACJ;IAEO,aAAa,GAAA;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,MAAM,CACT,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAC5B,CAAC;AACF,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;gBAC1B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAC/D,aAAA;AACD,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,IAAI,CAAC,uBAAuB,EAAE,CAAC;AAClC,SAAA;KACJ;IAEO,cAAc,GAAA;AAClB,QAAA,IACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,EAC5C;AACE,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,MAAM,CACT,CAAC;AACL,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,CAAe,YAAA,EAAA,IAAI,CAAC,cAAc,CAAA,CAAA,CAAG,CACxC,CAAC;AACL,SAAA;AACD,QAAA,IACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,EAC7C;AACE,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,MAAM,CACT,CAAC;AACL,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,CAAe,YAAA,EAAA,IAAI,CAAC,cAAc,CAAA,CAAA,CAAG,CACxC,CAAC;AACL,SAAA;KACJ;IAEO,YAAY,GAAA;QAChB,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,SAAA;KACJ;IAEO,iBAAiB,GAAA;AACrB;;;;;;;;AAQG;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;;AAE/D,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;AAEvD,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC;;QAExC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;;QAGrD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEzC,QAAA,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC;;AAG1C,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAEvD;;;;AAIG;AACH,QAAA,OAAO,aAAa,GAAG,eAAe,IAAI,EAAE,CAAC;KAChD;IAEO,wBAAwB,GAAA;QAC5B,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,MAAM,MAAM,GACR,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM;AAC3C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC;AAEhD,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,OAAO,EACZ,QAAQ,EACR,MAAM,KAAK,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CACxC,CAAC;AACL,SAAA;KACJ;AAED;;;AAGG;AACK,IAAA,QAAQ,CAAC,OAAgB,EAAE,EAAU,EAAE,QAAgB,EAAA;AAC3D,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAC5B,MAAM,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,EACrC,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,WAAW,GAAG,CAAC,CAAC;;;;;QAMpB,MAAM,aAAa,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;AACjE,YAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,EAAE;gBACP,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B,aAAA;AACD,YAAA,CAAC,EAAE,CAAC;YACJ,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5C,SAAC,CAAC;QAEF,MAAM,aAAa,GAAG,MAAK;YACvB,WAAW,IAAI,SAAS,CAAC;AACzB,YAAA,OAAO,CAAC,UAAU,GAAG,aAAa,CAC9B,WAAW,EACX,KAAK,EACL,MAAM,EACN,QAAQ,CACX,CAAC;YACF,IAAI,WAAW,GAAG,QAAQ,EAAE;gBACxB,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AAC7D,aAAA;AAAM,iBAAA;;gBAEH,UAAU,CAAC,MAAK;AACZ,oBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;oBACzB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACnD,EAAE,SAAS,CAAC,CAAC;AACjB,aAAA;AACL,SAAC,CAAC;AACF,QAAA,aAAa,EAAE,CAAC;KACnB;AAEO,IAAA,kBAAkB,CAAC,IAAc,EAAA;AACrC,QAAA,IAAI,CAAC,iBAAiB,CAClB,CACI,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,GAAW,EACX,IAAI,KACJ;AACA,YAAA,IACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;gBACzC,aAAa;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;AACzC,oBAAA,iBAAiB,EACnB;AACE,gBAAA,IACI,iBAAiB;AACjB,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;AACzC,oBAAA,iBAAiB,GAAG,CAAC;AACrB,oBAAA,CAAC,IAAI,CAAC,uBAAuB,EAAE,EACjC;;AAEE,oBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,wBAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;AACxB,qBAAA;AACD,oBAAA,IAAI,IAAI,EAAE;AACN,wBAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,aAAa,EACb,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,qBAAA;AACJ,iBAAA;qBAAM,IACH,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,KAAK,CAAC,EACjD;;AAEE,oBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,wBAAA,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;AAC5B,qBAAA;AACD,oBAAA,IAAI,IAAI,EAAE;AACN,wBAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,aAAa,GAAG,iBAAiB,EACjC,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,qBAAA;AACJ,iBAAA;AACD,gBAAA,IAAI,EAAE,CAAC;AACV,aAAA;iBAAM,IAAI,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE9C,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,oBAAA,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;AAC5B,iBAAA;AACD,gBAAA,IAAI,EAAE,CAAC;AACV,aAAA;AACL,SAAC,CACJ,CAAC;KACL;AAEO,IAAA,iBAAiB,CACrB,EAMS,EAAA;QAET,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,QAAA,MAAM,SAAS,GAAG,YAAA;YACd,WAAW,GAAG,IAAI,CAAC;AACvB,SAAC,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAE7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,IAAI,CAAC,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,MAAM;AACT,aAAA;AACD,YAAA,IAAI,WAAW,EAAE;gBACb,MAAM;AACT,aAAA;YAED,MAAM,iBAAiB,GACnB,aAAa;gBACb,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;AAC7D,YAAA,MAAM,iBAAiB,GACnB,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;YACzD,EAAE,CACE,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,CAAC,EACD,SAAS,CACZ,CAAC;YAEF,aAAa,IAAI,iBAAiB,CAAC;AACtC,SAAA;KACJ;IAEO,kBAAkB,GAAA;QACtB,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;YACrC,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;AAC9D,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACb;AAEO,IAAA,kBAAkB,CACtB,OAAgB,EAAA;QAEhB,IAAI,IAAI,GAAoC,IAAI,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,EAAE;AACtD,gBAAA,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AACzB,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;IAEO,eAAe,GAAA;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;AAC7C,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,OAAO;AACR,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK;oBAC1C,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;AACtD,YAAA,IAAI,CAAC,QAAQ;AACT,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM;oBAC3C,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC;AAC1D,SAAA;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;AAC7D,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAC/B,cAAc,EACd,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAC3B,CAAC;AACL,SAAA;KACJ;IAEO,YAAY,CAChB,cAAsB,EACtB,gBAA4C,EAAA;QAE5C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;AAE/C,YAAA,MAAM,qBAAqB,GACvB,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,qBAAqB,EAAE;gBACxB,MAAM;AACT,aAAA;AAAM,iBAAA;AACH,gBAAA,MAAM,aAAa,GACf,qBAAqB,CAAC,WAAW,CAAC,aAAa,CAAC;AACpD,gBAAA,IAAI,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC;AAC1C,gBAAA,IAAI,SAAS,KAAK,CAAC,IAAI,aAAa,CAAC,iBAAiB,EAAE;oBACpD,SAAS;wBACL,qBAAqB,CAAC,WAAW,CAAC,aAAa;6BAC1C,iBAAiB,CAAC,WAAW,CAAC;AAC1C,iBAAA;gBACD,aAAa,IAAI,SAAS,CAAC;gBAC3B,IAAI,aAAa,GAAG,cAAc,EAAE;AAChC,oBAAA,KAAK,EAAE,CAAC;AACX,iBAAA;AAAM,qBAAA;oBACH,MAAM;AACT,iBAAA;AACJ,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,gBAAgB,CAAC,MAAM,GAAG,KAAK,CAAC;KAC1C;IAEO,uBAAuB,GAAA;QAC3B,MAAM,aAAa,GACf,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;AACzC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;QAC/C,OAAO,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;KACtE;AAED;;;AAGG;IACK,uBAAuB,GAAA;;;;;;;;;;KAU9B;;AAp9BQ,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EAiNjB,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,UAAU,EACV,EAAA,EAAA,KAAA,EAAA,SAAS,aACT,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qGAnNX,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAkFZ,wBAAwB,EArG/B,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,uGAAA,CAAA,EAAA,CAAA,CAAA;2FAeQ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBArBhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EACd,QAAA,EAAA,CAAA;;;;AAIT,IAAA,CAAA,EAAA,MAAA,EAAA,CAAA,uGAAA,CAAA,EAAA,CAAA;;0BAgOI,MAAM;2BAAC,UAAU,CAAA;;0BACjB,MAAM;2BAAC,SAAS,CAAA;;0BAChB,MAAM;2BAAC,QAAQ,CAAA;4CAnIuB,WAAW,EAAA,CAAA;sBAArD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAGzC,SAAS,EAAA,CAAA;sBADR,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,wBAAwB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;gBAG3B,cAAc,EAAA,CAAA;sBAAlD,WAAW;uBAAC,sBAAsB,CAAA;gBAsBzB,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBAEG,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;gBAEG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;gBAEG,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBAEG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAMH,eAAe,EAAA,CAAA;sBADlB,KAAK;uBAAC,iBAAiB,CAAA;gBAYpB,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,UAAU,CAAA;gBAYb,SAAS,EAAA,CAAA;sBADZ,KAAK;uBAAC,WAAW,CAAA;gBAYd,SAAS,EAAA,CAAA;sBADZ,KAAK;uBAAC,WAAW,CAAA;gBAYd,aAAa,EAAA,CAAA;sBADhB,KAAK;uBAAC,eAAe,CAAA;gBASlB,YAAY,EAAA,CAAA;sBADf,KAAK;uBAAC,cAAc,CAAA;gBASjB,YAAY,EAAA,CAAA;sBADf,KAAK;uBAAC,cAAc,CAAA;gBASjB,UAAU,EAAA,CAAA;sBADb,KAAK;uBAAC,YAAY,CAAA;gBASf,YAAY,EAAA,CAAA;sBADf,KAAK;uBAAC,cAAc,CAAA;gBA0Sd,OAAO,EAAA,CAAA;sBADb,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAkB1B,cAAc,EAAA,CAAA;sBADpB,YAAY;uBAAC,eAAe,CAAA;;;MCpiBpB,iBAAiB,CAAA;;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,iBAFX,oBAAoB,EAAE,wBAAwB,CADnD,EAAA,OAAA,EAAA,CAAA,oBAAoB,EAAE,wBAAwB,CAAA,EAAA,CAAA,CAAA;+GAG/C,iBAAiB,EAAA,CAAA,CAAA;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,oBAAoB,EAAE,wBAAwB,CAAC;AACzD,oBAAA,YAAY,EAAE,CAAC,oBAAoB,EAAE,wBAAwB,CAAC;AACjE,iBAAA,CAAA;;;ACRD;;AAEG;AAIH;;ACNA;;AAEG;;;;"}
1
+ {"version":3,"file":"pepperi-addons-ngx-lib-carousel.mjs","sources":["../../../projects/ngx-lib/carousel/carousel-item.directive.ts","../../../projects/ngx-lib/carousel/carousel.component.ts","../../../projects/ngx-lib/carousel/carousel.module.ts","../../../projects/ngx-lib/carousel/public-api.ts","../../../projects/ngx-lib/carousel/pepperi-addons-ngx-lib-carousel.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n Input,\n HostBinding,\n Inject,\n} from '@angular/core';\n\n@Directive({\n selector: '[pepCarouselItem]',\n})\nexport class PepCarouselItemDirective {\n @HostBinding('style.display')\n display = 'inline-block';\n\n @Input('dragDisabled')\n get dragDisabled() {\n return this._dragDisabled;\n }\n set dragDisabled(value: boolean) {\n this._dragDisabled = value;\n }\n\n _dragDisabled = false;\n\n _elementRef: ElementRef;\n\n constructor(@Inject(ElementRef) elementRef: ElementRef) {\n this._elementRef = elementRef;\n }\n}\n","import {\n ElementRef,\n Component,\n Renderer2,\n OnDestroy,\n Input,\n Output,\n AfterViewInit,\n OnChanges,\n EventEmitter,\n ViewChild,\n ContentChildren,\n AfterViewChecked,\n QueryList,\n Inject,\n HostBinding,\n HostListener,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { PepCarouselItemDirective } from './carousel-item.directive';\n\n@Component({\n selector: 'pep-carousel',\n template: `\n <div class=\"carousel-content\" #contentRef>\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n overflow: hidden;\n display: block;\n }\n .carousel-content {\n height: 100%;\n overflow: auto;\n white-space: nowrap;\n }\n `,\n ],\n})\nexport class PepCarouselComponent\n implements OnDestroy, AfterViewInit, OnChanges, AfterViewChecked {\n private _index = 0;\n\n private _scrollbarHidden = false;\n\n private _disabled = false;\n\n private _xDisabled = false;\n\n private _xWheelEnabled = false;\n\n private _yDisabled = false;\n\n private _dragDisabled = false;\n\n private _snapDisabled = false;\n\n private _snapOffset = 0;\n\n private _snapDuration = 500;\n\n private _isDragging = false;\n\n private _onMouseMoveListener: () => any;\n\n private _onMouseUpListener: () => any;\n\n private _onMouseDownListener: () => any;\n\n private _onScrollListener: () => any;\n\n private _onDragStartListener: () => any;\n\n /**\n * Is the user currently pressing the element\n */\n isPressed = false;\n\n /**\n * Is the user currently scrolling the element\n */\n isScrolling = false;\n\n scrollTimer: any; // | NodeJS.Timer = -1;\n\n scrollToTimer: any; // | NodeJS.Timer = -1;\n\n /**\n * Is the user currently dragging the element\n */\n get isDragging(): boolean {\n return this._isDragging;\n }\n\n /**\n * The x coordinates on the element\n */\n downX = 0;\n\n /**\n * The y coordinates on the element\n */\n downY = 0;\n\n displayType: string | null = 'block';\n\n elWidth: string | null = null;\n\n elHeight: string | null = null;\n\n /**\n * The parentNode of carousel Element\n */\n parentNode: HTMLElement;\n\n /**\n * The carousel Element\n */\n\n @ViewChild('contentRef', { static: true }) _contentRef: ElementRef;\n\n @ContentChildren(PepCarouselItemDirective, { descendants: true })\n _children: QueryList<PepCarouselItemDirective>;\n\n @HostBinding('style.pointer-events') _pointerEvents = 'auto';\n\n wrapper: HTMLDivElement | null;\n\n scrollbarWidth: string | null = null;\n\n get currIndex() {\n return this._index;\n }\n set currIndex(value) {\n if (value !== this._index) {\n this._index = value;\n this.indexChanged.emit(value);\n }\n }\n\n isAnimating = false;\n\n prevChildrenLength = 0;\n\n indexBound = 0;\n\n @Output() dsInitialized = new EventEmitter<void>();\n\n @Output() indexChanged = new EventEmitter<number>();\n\n @Output() reachesLeftBound = new EventEmitter<boolean>();\n\n @Output() reachesRightBound = new EventEmitter<boolean>();\n\n @Output() snapAnimationFinished = new EventEmitter<number>();\n\n @Output() dragStart = new EventEmitter<void>();\n\n @Output() dragEnd = new EventEmitter<void>();\n\n /**\n * Whether the scrollbar is hidden\n */\n @Input('scrollbarHidden')\n get scrollbarHidden() {\n return this._scrollbarHidden;\n }\n set scrollbarHidden(value: boolean) {\n this._scrollbarHidden = value;\n }\n\n /**\n * Whether horizontally and vertically draging and scrolling is be disabled\n */\n @Input('disabled')\n get disabled() {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = value;\n }\n\n /**\n * Whether horizontally dragging and scrolling is be disabled\n */\n @Input('xDisabled')\n get xDisabled() {\n return this._xDisabled;\n }\n set xDisabled(value: boolean) {\n this._xDisabled = value;\n }\n\n /**\n * Whether vertically dragging and scrolling events is disabled\n */\n @Input('yDisabled')\n get yDisabled() {\n return this._yDisabled;\n }\n set yDisabled(value: boolean) {\n this._yDisabled = value;\n }\n\n /**\n * Whether scrolling horizontally with mouse wheel is enabled\n */\n @Input('xWheelEnabled')\n get xWheelEnabled() {\n return this._xWheelEnabled;\n }\n set xWheelEnabled(value: boolean) {\n this._xWheelEnabled = value;\n }\n\n @Input('dragDisabled')\n get dragDisabled() {\n return this._dragDisabled;\n }\n set dragDisabled(value: boolean) {\n this._dragDisabled = value;\n }\n\n @Input('snapDisabled')\n get snapDisabled() {\n return this._snapDisabled;\n }\n set snapDisabled(value: boolean) {\n this._snapDisabled = value;\n }\n\n @Input('snapOffset')\n get snapOffset() {\n return this._snapOffset;\n }\n set snapOffset(value: number) {\n this._snapOffset = value;\n }\n\n @Input('snapDuration')\n get snapDuration() {\n return this._snapDuration;\n }\n set snapDuration(value: number) {\n this._snapDuration = value;\n }\n\n constructor(\n @Inject(ElementRef) private _elementRef: ElementRef,\n @Inject(Renderer2) private _renderer: Renderer2,\n @Inject(DOCUMENT) private _document: any\n ) {\n this.scrollbarWidth = `${this.getScrollbarWidth()}px`;\n }\n\n ngOnChanges() {\n this.setScrollBar();\n\n if (this.xDisabled || this.disabled || this._scrollbarHidden) {\n this.disableScroll('x');\n } else {\n this.enableScroll('x');\n }\n\n if (this.yDisabled || this.disabled) {\n this.disableScroll('y');\n } else {\n this.enableScroll('y');\n }\n }\n\n ngAfterViewInit() {\n // auto assign computed css\n this._renderer.setAttribute(\n this._contentRef.nativeElement,\n 'drag-scroll',\n 'true'\n );\n\n this.displayType =\n typeof window !== 'undefined'\n ? window.getComputedStyle(this._elementRef.nativeElement)\n .display\n : 'block';\n\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'display',\n this.displayType\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'whiteSpace',\n 'noWrap'\n );\n\n // store ele width height for later user\n this.markElDimension();\n\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n this.elWidth\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n this.elHeight\n );\n\n if (this.wrapper) {\n this.checkScrollbar();\n }\n\n this._onMouseDownListener = this._renderer.listen(\n this._contentRef.nativeElement,\n 'mousedown',\n this.onMouseDownHandler.bind(this)\n );\n this._onScrollListener = this._renderer.listen(\n this._contentRef.nativeElement,\n 'scroll',\n this.onScrollHandler.bind(this)\n );\n // prevent Firefox from dragging images\n this._onDragStartListener = this._renderer.listen(\n 'document',\n 'dragstart',\n (e) => {\n e.preventDefault();\n }\n );\n this.checkNavStatus();\n this.dsInitialized.emit();\n this.adjustMarginToLastChild();\n }\n\n ngAfterViewChecked() {\n // avoid extra checks\n if (this._children.length !== this.prevChildrenLength) {\n this.markElDimension();\n this.checkScrollbar();\n this.prevChildrenLength = this._children.length;\n this.checkNavStatus();\n }\n }\n\n ngOnDestroy() {\n this._renderer.setAttribute(\n this._contentRef.nativeElement,\n 'drag-scroll',\n 'false'\n );\n if (this._onMouseDownListener) {\n this._onMouseDownListener = this._onMouseDownListener();\n }\n if (this._onScrollListener) {\n this._onScrollListener = this._onScrollListener();\n }\n if (this._onDragStartListener) {\n this._onDragStartListener = this._onDragStartListener();\n }\n }\n\n onMouseMoveHandler(event: MouseEvent) {\n this.onMouseMove(event);\n }\n\n onMouseMove(event: MouseEvent) {\n if (this.isPressed && !this.disabled) {\n // Workaround for prevent scroll stuck if browser lost focus\n // MouseEvent.buttons not support by Safari\n if (!event.buttons && !event.which) {\n return this.onMouseUpHandler(event);\n }\n\n this._pointerEvents = 'none';\n this._setIsDragging(true);\n\n // Drag X\n if (!this.xDisabled && !this.dragDisabled) {\n const clientX = (event as MouseEvent).clientX;\n this._contentRef.nativeElement.scrollLeft =\n this._contentRef.nativeElement.scrollLeft -\n clientX +\n this.downX;\n this.downX = clientX;\n }\n\n // Drag Y\n if (!this.yDisabled && !this.dragDisabled) {\n const clientY = (event as MouseEvent).clientY;\n this._contentRef.nativeElement.scrollTop =\n this._contentRef.nativeElement.scrollTop -\n clientY +\n this.downY;\n this.downY = clientY;\n }\n }\n }\n\n onMouseDownHandler(event: MouseEvent) {\n const carouselItem: PepCarouselItemDirective | null = this.locateCarouselItem(\n event.target as Element\n );\n if (carouselItem && carouselItem.dragDisabled) {\n return;\n }\n\n const isTouchEvent = event.type === 'touchstart';\n\n this._startGlobalListening(isTouchEvent);\n this.isPressed = true;\n\n const mouseEvent = event as MouseEvent;\n this.downX = mouseEvent.clientX;\n this.downY = mouseEvent.clientY;\n\n clearTimeout(this.scrollToTimer as number);\n }\n\n onScrollHandler() {\n this.checkNavStatus();\n if (!this.isPressed && !this.isAnimating && !this.snapDisabled) {\n this.isScrolling = true;\n clearTimeout(this.scrollTimer as number);\n this.scrollTimer = setTimeout(() => {\n this.isScrolling = false;\n this.locateCurrentIndex(true);\n }, 500);\n } else {\n this.locateCurrentIndex();\n }\n }\n\n onMouseUpHandler(event: MouseEvent) {\n if (this.isPressed) {\n this.isPressed = false;\n this._pointerEvents = 'auto';\n this._setIsDragging(false);\n if (!this.snapDisabled) {\n this.locateCurrentIndex(true);\n } else {\n this.locateCurrentIndex();\n }\n this._stopGlobalListening();\n }\n }\n\n /*\n * Nav button\n */\n moveLeft() {\n if (this.currIndex !== 0 || this.snapDisabled) {\n this.currIndex--;\n clearTimeout(this.scrollToTimer as number);\n this.scrollTo(\n this._contentRef.nativeElement,\n this.toChildrenLocation(),\n this.snapDuration\n );\n }\n }\n\n moveRight() {\n const container = this.wrapper || this.parentNode;\n const containerWidth = container ? container.clientWidth : 0;\n\n if (\n !this.isScrollReachesRightEnd() &&\n this.currIndex <\n this.maximumIndex(containerWidth, this._children.toArray())\n ) {\n this.currIndex++;\n clearTimeout(this.scrollToTimer as number);\n this.scrollTo(\n this._contentRef.nativeElement,\n this.toChildrenLocation(),\n this.snapDuration\n );\n }\n }\n\n moveTo(index: number) {\n const container = this.wrapper || this.parentNode;\n const containerWidth = container ? container.clientWidth : 0;\n if (\n index >= 0 &&\n index !== this.currIndex &&\n this.currIndex <=\n this.maximumIndex(containerWidth, this._children.toArray())\n ) {\n this.currIndex = Math.min(\n index,\n this.maximumIndex(containerWidth, this._children.toArray())\n );\n clearTimeout(this.scrollToTimer as number);\n this.scrollTo(\n this._contentRef.nativeElement,\n this.toChildrenLocation(),\n this.snapDuration\n );\n }\n }\n\n checkNavStatus() {\n setTimeout(() => {\n const onlyOneItem = Boolean(this._children.length <= 1);\n const containerIsLargerThanContent = Boolean(\n this._contentRef.nativeElement.scrollWidth <=\n this._contentRef.nativeElement.clientWidth\n );\n if (onlyOneItem || containerIsLargerThanContent) {\n // only one element\n this.reachesLeftBound.emit(true);\n this.reachesRightBound.emit(true);\n } else if (this.isScrollReachesRightEnd()) {\n // reached right end\n this.reachesLeftBound.emit(false);\n this.reachesRightBound.emit(true);\n } else if (\n this._contentRef.nativeElement.scrollLeft < 3 &&\n this._contentRef.nativeElement.scrollWidth >\n this._contentRef.nativeElement.clientWidth\n ) {\n // reached left end\n this.reachesLeftBound.emit(true);\n this.reachesRightBound.emit(false);\n } else {\n // in the middle\n this.reachesLeftBound.emit(false);\n this.reachesRightBound.emit(false);\n }\n }, 0);\n }\n\n @HostListener('wheel', ['$event'])\n public onWheel(event: WheelEvent) {\n if (this._xWheelEnabled) {\n event.preventDefault();\n\n if (this._snapDisabled) {\n this._contentRef.nativeElement.scrollBy(event.deltaY, 0);\n } else {\n if (event.deltaY < 0) {\n this.moveLeft();\n } else if (event.deltaY > 0) {\n this.moveRight();\n }\n }\n }\n }\n\n @HostListener('window:resize')\n public onWindowResize() {\n this.refreshWrapperDimensions();\n this.checkNavStatus();\n }\n\n private _setIsDragging(value: boolean) {\n if (this._isDragging === value) {\n return;\n }\n\n this._isDragging = value;\n value ? this.dragStart.emit() : this.dragEnd.emit();\n }\n\n private _startGlobalListening(isTouchEvent: boolean) {\n if (!this._onMouseMoveListener) {\n const eventName = isTouchEvent ? 'touchmove' : 'mousemove';\n this._onMouseMoveListener = this._renderer.listen(\n 'document',\n eventName,\n this.onMouseMoveHandler.bind(this)\n );\n }\n\n if (!this._onMouseUpListener) {\n const eventName = isTouchEvent ? 'touchend' : 'mouseup';\n this._onMouseUpListener = this._renderer.listen(\n 'document',\n eventName,\n this.onMouseUpHandler.bind(this)\n );\n }\n }\n\n private _stopGlobalListening() {\n if (this._onMouseMoveListener) {\n this._onMouseMoveListener = this._onMouseMoveListener();\n }\n\n if (this._onMouseUpListener) {\n this._onMouseUpListener = this._onMouseUpListener();\n }\n }\n\n private disableScroll(axis: string): void {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n `overflow-${axis}`,\n 'hidden'\n );\n }\n\n private enableScroll(axis: string): void {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n `overflow-${axis}`,\n 'auto'\n );\n }\n\n private hideScrollbar(): void {\n if (\n this._contentRef.nativeElement.style.display !== 'none' &&\n !this.wrapper\n ) {\n this.parentNode = this._contentRef.nativeElement.parentNode;\n\n // create container element\n this.wrapper = this._renderer.createElement('div');\n this._renderer.addClass(this.wrapper, 'carousel-wrapper');\n // this._renderer.setAttribute(this.wrapper, 'class', 'carousel-wrapper');\n // this._renderer.addClass(this.wrapper, 'carousel-container');\n\n this.refreshWrapperDimensions();\n\n this._renderer.setStyle(this.wrapper, 'overflow', 'hidden');\n\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n `calc(100% + ${this.scrollbarWidth})`\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n `calc(100% + ${this.scrollbarWidth})`\n );\n\n // Append container element to component element.\n this._renderer.appendChild(\n this._elementRef.nativeElement,\n this.wrapper\n );\n\n // Append content element to container element.\n this._renderer.appendChild(\n this.wrapper,\n this._contentRef.nativeElement\n );\n\n this.adjustMarginToLastChild();\n }\n }\n\n private showScrollbar(): void {\n if (this.wrapper) {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n '100%'\n );\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n this.wrapper.style.height\n );\n if (this.parentNode !== null) {\n this.parentNode.removeChild(this.wrapper);\n this.parentNode.appendChild(this._contentRef.nativeElement);\n }\n this.wrapper = null;\n\n this.adjustMarginToLastChild();\n }\n }\n\n private checkScrollbar() {\n if (\n this._contentRef.nativeElement.scrollWidth <=\n this._contentRef.nativeElement.clientWidth\n ) {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n '100%'\n );\n } else {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'height',\n `calc(100% + ${this.scrollbarWidth})`\n );\n }\n if (\n this._contentRef.nativeElement.scrollHeight <=\n this._contentRef.nativeElement.clientHeight\n ) {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n '100%'\n );\n } else {\n this._renderer.setStyle(\n this._contentRef.nativeElement,\n 'width',\n `calc(100% + ${this.scrollbarWidth})`\n );\n }\n }\n\n private setScrollBar(): void {\n if (this.scrollbarHidden) {\n this.hideScrollbar();\n } else {\n this.showScrollbar();\n }\n }\n\n private getScrollbarWidth(): number {\n /**\n * Browser Scrollbar Widths (2016)\n * OSX (Chrome, Safari, Firefox) - 15px\n * Windows XP (IE7, Chrome, Firefox) - 17px\n * Windows 7 (IE10, IE11, Chrome, Firefox) - 17px\n * Windows 8.1 (IE11, Chrome, Firefox) - 17px\n * Windows 10 (IE11, Chrome, Firefox) - 17px\n * Windows 10 (Edge 12/13) - 12px\n */\n const outer = this._renderer.createElement('div');\n this._renderer.setStyle(outer, 'visibility', 'hidden');\n this._renderer.setStyle(outer, 'width', '100px');\n this._renderer.setStyle(outer, 'msOverflowStyle', 'scrollbar'); // needed for WinJS apps\n // document.body.appendChild(outer);\n this._renderer.appendChild(this._document.body, outer);\n // this._renderer.appendChild(this._renderer.selectRootElement('body'), outer);\n const widthNoScroll = outer.offsetWidth;\n // force scrollbars\n this._renderer.setStyle(outer, 'overflow', 'scroll');\n\n // add innerdiv\n const inner = this._renderer.createElement('div');\n this._renderer.setStyle(inner, 'width', '100%');\n this._renderer.appendChild(outer, inner);\n\n const widthWithScroll = inner.offsetWidth;\n\n // remove divs\n this._renderer.removeChild(this._document.body, outer);\n\n /**\n * Scrollbar width will be 0 on Mac OS with the\n * default \"Only show scrollbars when scrolling\" setting (Yosemite and up).\n * setting default width to 20;\n */\n return widthNoScroll - widthWithScroll || 20;\n }\n\n private refreshWrapperDimensions() {\n if (this.wrapper) {\n const height =\n this._elementRef.nativeElement.style.height ||\n this._elementRef.nativeElement.offsetHeight;\n\n this._renderer.setStyle(this.wrapper, 'width', '100%');\n this._renderer.setStyle(\n this.wrapper,\n 'height',\n height === 0 ? 'auto' : height + 'px'\n );\n }\n }\n\n /*\n * The below solution is heavily inspired from\n * https://gist.github.com/andjosh/6764939\n */\n private scrollTo(element: Element, to: number, duration: number) {\n this.isAnimating = true;\n const start = element.scrollLeft,\n change = to - start - this.snapOffset,\n increment = 20;\n let currentTime = 0;\n\n // t = current time\n // b = start value\n // c = change in value\n // d = duration\n const easeInOutQuad = (t: number, b: number, c: number, d: number) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t * t + b;\n }\n t--;\n return (-c / 2) * (t * (t - 2) - 1) + b;\n };\n\n const animateScroll = () => {\n currentTime += increment;\n element.scrollLeft = easeInOutQuad(\n currentTime,\n start,\n change,\n duration\n );\n if (currentTime < duration) {\n this.scrollToTimer = setTimeout(animateScroll, increment);\n } else {\n // run one more frame to make sure the animation is fully finished\n setTimeout(() => {\n this.isAnimating = false;\n this.snapAnimationFinished.emit(this.currIndex);\n }, increment);\n }\n };\n animateScroll();\n }\n\n private locateCurrentIndex(snap?: boolean) {\n this.currentChildWidth(\n (\n currentChildWidth,\n nextChildrenWidth,\n childrenWidth,\n idx: number,\n stop\n ) => {\n if (\n this._contentRef.nativeElement.scrollLeft >=\n childrenWidth &&\n this._contentRef.nativeElement.scrollLeft <=\n nextChildrenWidth\n ) {\n if (\n nextChildrenWidth -\n this._contentRef.nativeElement.scrollLeft >\n currentChildWidth / 2 &&\n !this.isScrollReachesRightEnd()\n ) {\n // roll back scrolling\n if (!this.isAnimating) {\n this.currIndex = idx;\n }\n if (snap) {\n this.scrollTo(\n this._contentRef.nativeElement,\n childrenWidth,\n this.snapDuration\n );\n }\n } else if (\n this._contentRef.nativeElement.scrollLeft !== 0\n ) {\n // forward scrolling\n if (!this.isAnimating) {\n this.currIndex = idx + 1;\n }\n if (snap) {\n this.scrollTo(\n this._contentRef.nativeElement,\n childrenWidth + currentChildWidth,\n this.snapDuration\n );\n }\n }\n stop();\n } else if (idx + 1 === this._children.length - 1) {\n // reaches last index\n if (!this.isAnimating) {\n this.currIndex = idx + 1;\n }\n stop();\n }\n }\n );\n }\n\n private currentChildWidth(\n cb: (\n currentClildWidth: number,\n nextChildrenWidth: number,\n childrenWidth: number,\n index: number,\n breakFunc: () => void\n ) => void\n ) {\n let childrenWidth = 0;\n let shouldBreak = false;\n const breakFunc = function () {\n shouldBreak = true;\n };\n const childrenArr = this._children.toArray();\n\n for (let i = 0; i < childrenArr.length; i++) {\n if (i === childrenArr.length - 1) {\n break;\n }\n if (shouldBreak) {\n break;\n }\n\n const nextChildrenWidth =\n childrenWidth +\n childrenArr[i + 1]._elementRef.nativeElement.clientWidth;\n const currentClildWidth =\n childrenArr[i]._elementRef.nativeElement.clientWidth;\n cb(\n currentClildWidth,\n nextChildrenWidth,\n childrenWidth,\n i,\n breakFunc\n );\n\n childrenWidth += currentClildWidth;\n }\n }\n\n private toChildrenLocation(): number {\n let to = 0;\n const childrenArr = this._children.toArray();\n for (let i = 0; i < this.currIndex; i++) {\n to += childrenArr[i]._elementRef.nativeElement.clientWidth;\n }\n return to;\n }\n\n private locateCarouselItem(\n element: Element\n ): PepCarouselItemDirective | null {\n let item: PepCarouselItemDirective | null = null;\n const childrenArr = this._children.toArray();\n for (let i = 0; i < childrenArr.length; i++) {\n if (element === childrenArr[i]._elementRef.nativeElement) {\n item = childrenArr[i];\n }\n }\n return item;\n }\n\n private markElDimension() {\n if (this.wrapper) {\n this.elWidth = this.wrapper.style.width;\n this.elHeight = this.wrapper.style.height;\n } else {\n this.elWidth =\n this._elementRef.nativeElement.style.width ||\n this._elementRef.nativeElement.offsetWidth + 'px';\n this.elHeight =\n this._elementRef.nativeElement.style.height ||\n this._elementRef.nativeElement.offsetHeight + 'px';\n }\n const container = this.wrapper || this.parentNode;\n const containerWidth = container ? container.clientWidth : 0;\n if (this._children.length > 1) {\n this.indexBound = this.maximumIndex(\n containerWidth,\n this._children.toArray()\n );\n }\n }\n\n private maximumIndex(\n containerWidth: number,\n childrenElements: PepCarouselItemDirective[]\n ): number {\n let count = 0;\n let childrenWidth = 0;\n for (let i = 0; i <= childrenElements.length; i++) {\n // last N element\n const carouselItemDirective: PepCarouselItemDirective =\n childrenElements[childrenElements.length - 1 - i];\n if (!carouselItemDirective) {\n break;\n } else {\n const nativeElement =\n carouselItemDirective._elementRef.nativeElement;\n let itemWidth = nativeElement.clientWidth;\n if (itemWidth === 0 && nativeElement.firstElementChild) {\n itemWidth =\n carouselItemDirective._elementRef.nativeElement\n .firstElementChild.clientWidth;\n }\n childrenWidth += itemWidth;\n if (childrenWidth < containerWidth) {\n count++;\n } else {\n break;\n }\n }\n }\n return childrenElements.length - count;\n }\n\n private isScrollReachesRightEnd(): boolean {\n const scrollLeftPos =\n this._contentRef.nativeElement.scrollLeft +\n this._contentRef.nativeElement.offsetWidth;\n return scrollLeftPos >= this._contentRef.nativeElement.scrollWidth;\n }\n\n /**\n * adds a margin right style to the last child element which will resolve the issue\n * of last item gets cutoff.\n */\n private adjustMarginToLastChild(): void {\n // if (this._children && this._children.length > 0 && this.hideScrollbar) {\n // const childrenArr = this._children.toArray();\n // const lastItem = childrenArr[childrenArr.length - 1]._elementRef.nativeElement;\n // if (this.wrapper && childrenArr.length > 1) {\n // this._renderer.setStyle(lastItem, 'margin-right', this.scrollbarWidth);\n // } else {\n // this._renderer.setStyle(lastItem, 'margin-right', 0);\n // }\n // }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { PepCarouselComponent } from './carousel.component';\nimport { PepCarouselItemDirective } from './carousel-item.directive';\n\n@NgModule({\n exports: [PepCarouselComponent, PepCarouselItemDirective],\n declarations: [PepCarouselComponent, PepCarouselItemDirective],\n})\nexport class PepCarouselModule {}\n","/*\n * Public API Surface of carousel\n */\nexport * from './carousel.module';\nexport * from './carousel.component';\nexport * from './carousel-item.directive';\n// export * from './carousel.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAWa,wBAAwB,CAAA;AAgBjC,IAAA,WAAA,CAAgC,UAAsB,EAAA;QAdtD,IAAO,CAAA,OAAA,GAAG,cAAc,CAAC;QAUzB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AAKlB,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;KACjC;AAdD,IAAA,IACI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;;AAVQ,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,kBAgBb,UAAU,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;yGAhBrB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mBAAmB;AAChC,iBAAA,CAAA;;0BAiBgB,MAAM;2BAAC,UAAU,CAAA;4CAd9B,OAAO,EAAA,CAAA;sBADN,WAAW;uBAAC,eAAe,CAAA;gBAIxB,YAAY,EAAA,CAAA;sBADf,KAAK;uBAAC,cAAc,CAAA;;;MC4BZ,oBAAoB,CAAA;AAgN7B,IAAA,WAAA,CACgC,WAAuB,EACxB,SAAoB,EACrB,SAAc,EAAA;QAFZ,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;QACxB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACrB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAK;QAjNpC,IAAM,CAAA,MAAA,GAAG,CAAC,CAAC;QAEX,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QAEzB,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAElB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAEnB,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;QAEvB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAEnB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAEtB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAEtB,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;QAEhB,IAAa,CAAA,aAAA,GAAG,GAAG,CAAC;QAEpB,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAY5B;;AAEG;QACH,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAElB;;AAEG;QACH,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAapB;;AAEG;QACH,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC;AAEV;;AAEG;QACH,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC;QAEV,IAAW,CAAA,WAAA,GAAkB,OAAO,CAAC;QAErC,IAAO,CAAA,OAAA,GAAkB,IAAI,CAAC;QAE9B,IAAQ,CAAA,QAAA,GAAkB,IAAI,CAAC;QAgBM,IAAc,CAAA,cAAA,GAAG,MAAM,CAAC;QAI7D,IAAc,CAAA,cAAA,GAAkB,IAAI,CAAC;QAYrC,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;QAEpB,IAAkB,CAAA,kBAAA,GAAG,CAAC,CAAC;QAEvB,IAAU,CAAA,UAAA,GAAG,CAAC,CAAC;AAEL,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEzC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU,CAAC;AAE1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAW,CAAC;AAE/C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAW,CAAC;AAEhD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAU,CAAC;AAEnD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;AAErC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;QA8FzC,IAAI,CAAC,cAAc,GAAG,CAAA,EAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA,EAAA,CAAI,CAAC;KACzD;AAtKD;;AAEG;AACH,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;AAsCD,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IACD,IAAI,SAAS,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,SAAA;KACJ;AAsBD;;AAEG;AACH,IAAA,IACI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAChC;IACD,IAAI,eAAe,CAAC,KAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;KACjC;AAED;;AAEG;AACH,IAAA,IACI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IACD,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KAC1B;AAED;;AAEG;AACH,IAAA,IACI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IACD,IAAI,SAAS,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KAC3B;AAED;;AAEG;AACH,IAAA,IACI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IACD,IAAI,SAAS,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KAC3B;AAED;;AAEG;AACH,IAAA,IACI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;IACD,IAAI,aAAa,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC/B;AAED,IAAA,IACI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;AAED,IAAA,IACI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;AAED,IAAA,IACI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;IACD,IAAI,UAAU,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC5B;AAED,IAAA,IACI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;IAUD,WAAW,GAAA;QACP,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC1D,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC3B,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1B,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC3B,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1B,SAAA;KACJ;IAED,eAAe,GAAA;;AAEX,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CACvB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,aAAa,EACb,MAAM,CACT,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW;YACZ,OAAO,MAAM,KAAK,WAAW;kBACvB,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;qBACpD,OAAO;kBACV,OAAO,CAAC;AAElB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,SAAS,EACT,IAAI,CAAC,WAAW,CACnB,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,YAAY,EACZ,QAAQ,CACX,CAAC;;QAGF,IAAI,CAAC,eAAe,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,IAAI,CAAC,OAAO,CACf,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,IAAI,CAAC,QAAQ,CAChB,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,SAAA;QAED,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC7C,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,WAAW,EACX,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CACrC,CAAC;QACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC1C,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC,CAAC;;AAEF,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC7C,UAAU,EACV,WAAW,EACX,CAAC,CAAC,KAAI;YACF,CAAC,CAAC,cAAc,EAAE,CAAC;AACvB,SAAC,CACJ,CAAC;QACF,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAClC;IAED,kBAAkB,GAAA;;QAEd,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,kBAAkB,EAAE;YACnD,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAChD,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,SAAA;KACJ;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CACvB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,aAAa,EACb,OAAO,CACV,CAAC;QACF,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC3D,SAAA;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACrD,SAAA;QACD,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC3D,SAAA;KACJ;AAED,IAAA,kBAAkB,CAAC,KAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAC3B;AAED,IAAA,WAAW,CAAC,KAAiB,EAAA;QACzB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;;YAGlC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAChC,gBAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvC,aAAA;AAED,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;;YAG1B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACvC,gBAAA,MAAM,OAAO,GAAI,KAAoB,CAAC,OAAO,CAAC;AAC9C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;AACrC,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;wBACzC,OAAO;wBACP,IAAI,CAAC,KAAK,CAAC;AACf,gBAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AACxB,aAAA;;YAGD,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACvC,gBAAA,MAAM,OAAO,GAAI,KAAoB,CAAC,OAAO,CAAC;AAC9C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS;AACpC,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS;wBACxC,OAAO;wBACP,IAAI,CAAC,KAAK,CAAC;AACf,gBAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AACxB,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QAChC,MAAM,YAAY,GAAoC,IAAI,CAAC,kBAAkB,CACzE,KAAK,CAAC,MAAiB,CAC1B,CAAC;AACF,QAAA,IAAI,YAAY,IAAI,YAAY,CAAC,YAAY,EAAE;YAC3C,OAAO;AACV,SAAA;AAED,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AAEjD,QAAA,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,MAAM,UAAU,GAAG,KAAmB,CAAC;AACvC,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC;AAEhC,QAAA,YAAY,CAAC,IAAI,CAAC,aAAuB,CAAC,CAAC;KAC9C;IAED,eAAe,GAAA;QACX,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC5D,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,YAAY,CAAC,IAAI,CAAC,WAAqB,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAK;AAC/B,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;aACjC,EAAE,GAAG,CAAC,CAAC;AACX,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC7B,SAAA;KACJ;AAED,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QAC9B,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACpB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACjC,aAAA;AAAM,iBAAA;gBACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC7B,aAAA;YACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/B,SAAA;KACJ;AAED;;AAEG;IACH,QAAQ,GAAA;QACJ,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;YAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,YAAY,CAAC,IAAI,CAAC,aAAuB,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,kBAAkB,EAAE,EACzB,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,SAAA;KACJ;IAED,SAAS,GAAA;QACL,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;AAE7D,QAAA,IACI,CAAC,IAAI,CAAC,uBAAuB,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAC7D;YACE,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,YAAY,CAAC,IAAI,CAAC,aAAuB,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,kBAAkB,EAAE,EACzB,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,SAAA;KACJ;AAED,IAAA,MAAM,CAAC,KAAa,EAAA;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;QAC7D,IACI,KAAK,IAAI,CAAC;YACV,KAAK,KAAK,IAAI,CAAC,SAAS;AACxB,YAAA,IAAI,CAAC,SAAS;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAC7D;YACE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CACrB,KAAK,EACL,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAC9D,CAAC;AACF,YAAA,YAAY,CAAC,IAAI,CAAC,aAAuB,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,kBAAkB,EAAE,EACzB,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,SAAA;KACJ;IAED,cAAc,GAAA;QACV,UAAU,CAAC,MAAK;AACZ,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YACxD,MAAM,4BAA4B,GAAG,OAAO,CACxC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW;AAC1C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAC7C,CAAC;YACF,IAAI,WAAW,IAAI,4BAA4B,EAAE;;AAE7C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;;AAEvC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,aAAA;iBAAM,IACH,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC;AAC7C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW;AAC1C,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,EAC5C;;AAEE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,aAAA;AAAM,iBAAA;;AAEH,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,aAAA;SACJ,EAAE,CAAC,CAAC,CAAC;KACT;AAGM,IAAA,OAAO,CAAC,KAAiB,EAAA;QAC5B,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,KAAK,CAAC,cAAc,EAAE,CAAC;YAEvB,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC5D,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;AACnB,iBAAA;AAAM,qBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,IAAI,CAAC,SAAS,EAAE,CAAC;AACpB,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;IAGM,cAAc,GAAA;QACjB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,cAAc,EAAE,CAAC;KACzB;AAEO,IAAA,cAAc,CAAC,KAAc,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;YAC5B,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACvD;AAEO,IAAA,qBAAqB,CAAC,YAAqB,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC5B,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;YAC3D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC7C,UAAU,EACV,SAAS,EACT,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CACrC,CAAC;AACL,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B,MAAM,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;YACxD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC3C,UAAU,EACV,SAAS,EACT,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CACnC,CAAC;AACL,SAAA;KACJ;IAEO,oBAAoB,GAAA;QACxB,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC3D,SAAA;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACvD,SAAA;KACJ;AAEO,IAAA,aAAa,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,CAAY,SAAA,EAAA,IAAI,EAAE,EAClB,QAAQ,CACX,CAAC;KACL;AAEO,IAAA,YAAY,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,CAAY,SAAA,EAAA,IAAI,EAAE,EAClB,MAAM,CACT,CAAC;KACL;IAEO,aAAa,GAAA;QACjB,IACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM;YACvD,CAAC,IAAI,CAAC,OAAO,EACf;YACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC;;YAG5D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;;;YAI1D,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAEhC,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAE5D,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,CAAe,YAAA,EAAA,IAAI,CAAC,cAAc,CAAA,CAAA,CAAG,CACxC,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,CAAe,YAAA,EAAA,IAAI,CAAC,cAAc,CAAA,CAAA,CAAG,CACxC,CAAC;;AAGF,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CACtB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,OAAO,CACf,CAAC;;AAGF,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CACtB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,WAAW,CAAC,aAAa,CACjC,CAAC;YAEF,IAAI,CAAC,uBAAuB,EAAE,CAAC;AAClC,SAAA;KACJ;IAEO,aAAa,GAAA;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,MAAM,CACT,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAC5B,CAAC;AACF,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;gBAC1B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAC/D,aAAA;AACD,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,IAAI,CAAC,uBAAuB,EAAE,CAAC;AAClC,SAAA;KACJ;IAEO,cAAc,GAAA;AAClB,QAAA,IACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,EAC5C;AACE,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,MAAM,CACT,CAAC;AACL,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,CAAe,YAAA,EAAA,IAAI,CAAC,cAAc,CAAA,CAAA,CAAG,CACxC,CAAC;AACL,SAAA;AACD,QAAA,IACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,EAC7C;AACE,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,MAAM,CACT,CAAC;AACL,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,CAAe,YAAA,EAAA,IAAI,CAAC,cAAc,CAAA,CAAA,CAAG,CACxC,CAAC;AACL,SAAA;KACJ;IAEO,YAAY,GAAA;QAChB,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,SAAA;KACJ;IAEO,iBAAiB,GAAA;AACrB;;;;;;;;AAQG;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;;AAE/D,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;AAEvD,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC;;QAExC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;;QAGrD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEzC,QAAA,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC;;AAG1C,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAEvD;;;;AAIG;AACH,QAAA,OAAO,aAAa,GAAG,eAAe,IAAI,EAAE,CAAC;KAChD;IAEO,wBAAwB,GAAA;QAC5B,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,MAAM,MAAM,GACR,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM;AAC3C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC;AAEhD,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,OAAO,EACZ,QAAQ,EACR,MAAM,KAAK,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CACxC,CAAC;AACL,SAAA;KACJ;AAED;;;AAGG;AACK,IAAA,QAAQ,CAAC,OAAgB,EAAE,EAAU,EAAE,QAAgB,EAAA;AAC3D,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAC5B,MAAM,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,EACrC,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,WAAW,GAAG,CAAC,CAAC;;;;;QAMpB,MAAM,aAAa,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;AACjE,YAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,EAAE;gBACP,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B,aAAA;AACD,YAAA,CAAC,EAAE,CAAC;YACJ,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5C,SAAC,CAAC;QAEF,MAAM,aAAa,GAAG,MAAK;YACvB,WAAW,IAAI,SAAS,CAAC;AACzB,YAAA,OAAO,CAAC,UAAU,GAAG,aAAa,CAC9B,WAAW,EACX,KAAK,EACL,MAAM,EACN,QAAQ,CACX,CAAC;YACF,IAAI,WAAW,GAAG,QAAQ,EAAE;gBACxB,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AAC7D,aAAA;AAAM,iBAAA;;gBAEH,UAAU,CAAC,MAAK;AACZ,oBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;oBACzB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACnD,EAAE,SAAS,CAAC,CAAC;AACjB,aAAA;AACL,SAAC,CAAC;AACF,QAAA,aAAa,EAAE,CAAC;KACnB;AAEO,IAAA,kBAAkB,CAAC,IAAc,EAAA;AACrC,QAAA,IAAI,CAAC,iBAAiB,CAClB,CACI,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,GAAW,EACX,IAAI,KACJ;AACA,YAAA,IACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;gBACzC,aAAa;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;AACzC,oBAAA,iBAAiB,EACnB;AACE,gBAAA,IACI,iBAAiB;AACjB,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;AACzC,oBAAA,iBAAiB,GAAG,CAAC;AACrB,oBAAA,CAAC,IAAI,CAAC,uBAAuB,EAAE,EACjC;;AAEE,oBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,wBAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;AACxB,qBAAA;AACD,oBAAA,IAAI,IAAI,EAAE;AACN,wBAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,aAAa,EACb,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,qBAAA;AACJ,iBAAA;qBAAM,IACH,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,KAAK,CAAC,EACjD;;AAEE,oBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,wBAAA,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;AAC5B,qBAAA;AACD,oBAAA,IAAI,IAAI,EAAE;AACN,wBAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,aAAa,GAAG,iBAAiB,EACjC,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,qBAAA;AACJ,iBAAA;AACD,gBAAA,IAAI,EAAE,CAAC;AACV,aAAA;iBAAM,IAAI,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE9C,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,oBAAA,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;AAC5B,iBAAA;AACD,gBAAA,IAAI,EAAE,CAAC;AACV,aAAA;AACL,SAAC,CACJ,CAAC;KACL;AAEO,IAAA,iBAAiB,CACrB,EAMS,EAAA;QAET,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,QAAA,MAAM,SAAS,GAAG,YAAA;YACd,WAAW,GAAG,IAAI,CAAC;AACvB,SAAC,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAE7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,IAAI,CAAC,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,MAAM;AACT,aAAA;AACD,YAAA,IAAI,WAAW,EAAE;gBACb,MAAM;AACT,aAAA;YAED,MAAM,iBAAiB,GACnB,aAAa;gBACb,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;AAC7D,YAAA,MAAM,iBAAiB,GACnB,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;YACzD,EAAE,CACE,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,CAAC,EACD,SAAS,CACZ,CAAC;YAEF,aAAa,IAAI,iBAAiB,CAAC;AACtC,SAAA;KACJ;IAEO,kBAAkB,GAAA;QACtB,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;YACrC,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;AAC9D,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACb;AAEO,IAAA,kBAAkB,CACtB,OAAgB,EAAA;QAEhB,IAAI,IAAI,GAAoC,IAAI,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,EAAE;AACtD,gBAAA,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AACzB,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;IAEO,eAAe,GAAA;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;AAC7C,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,OAAO;AACR,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK;oBAC1C,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;AACtD,YAAA,IAAI,CAAC,QAAQ;AACT,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM;oBAC3C,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC;AAC1D,SAAA;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;AAC7D,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAC/B,cAAc,EACd,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAC3B,CAAC;AACL,SAAA;KACJ;IAEO,YAAY,CAChB,cAAsB,EACtB,gBAA4C,EAAA;QAE5C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;AAE/C,YAAA,MAAM,qBAAqB,GACvB,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,qBAAqB,EAAE;gBACxB,MAAM;AACT,aAAA;AAAM,iBAAA;AACH,gBAAA,MAAM,aAAa,GACf,qBAAqB,CAAC,WAAW,CAAC,aAAa,CAAC;AACpD,gBAAA,IAAI,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC;AAC1C,gBAAA,IAAI,SAAS,KAAK,CAAC,IAAI,aAAa,CAAC,iBAAiB,EAAE;oBACpD,SAAS;wBACL,qBAAqB,CAAC,WAAW,CAAC,aAAa;6BAC1C,iBAAiB,CAAC,WAAW,CAAC;AAC1C,iBAAA;gBACD,aAAa,IAAI,SAAS,CAAC;gBAC3B,IAAI,aAAa,GAAG,cAAc,EAAE;AAChC,oBAAA,KAAK,EAAE,CAAC;AACX,iBAAA;AAAM,qBAAA;oBACH,MAAM;AACT,iBAAA;AACJ,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,gBAAgB,CAAC,MAAM,GAAG,KAAK,CAAC;KAC1C;IAEO,uBAAuB,GAAA;QAC3B,MAAM,aAAa,GACf,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;AACzC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;QAC/C,OAAO,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;KACtE;AAED;;;AAGG;IACK,uBAAuB,GAAA;;;;;;;;;;KAU9B;;AAp9BQ,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EAiNjB,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,UAAU,EACV,EAAA,EAAA,KAAA,EAAA,SAAS,aACT,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qGAnNX,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAkFZ,wBAAwB,EArG/B,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,uGAAA,CAAA,EAAA,CAAA,CAAA;2FAeQ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBArBhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EACd,QAAA,EAAA,CAAA;;;;AAIT,IAAA,CAAA,EAAA,MAAA,EAAA,CAAA,uGAAA,CAAA,EAAA,CAAA;;0BAgOI,MAAM;2BAAC,UAAU,CAAA;;0BACjB,MAAM;2BAAC,SAAS,CAAA;;0BAChB,MAAM;2BAAC,QAAQ,CAAA;4CAnIuB,WAAW,EAAA,CAAA;sBAArD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAGzC,SAAS,EAAA,CAAA;sBADR,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,wBAAwB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;gBAG3B,cAAc,EAAA,CAAA;sBAAlD,WAAW;uBAAC,sBAAsB,CAAA;gBAsBzB,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBAEG,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;gBAEG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;gBAEG,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBAEG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAMH,eAAe,EAAA,CAAA;sBADlB,KAAK;uBAAC,iBAAiB,CAAA;gBAYpB,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,UAAU,CAAA;gBAYb,SAAS,EAAA,CAAA;sBADZ,KAAK;uBAAC,WAAW,CAAA;gBAYd,SAAS,EAAA,CAAA;sBADZ,KAAK;uBAAC,WAAW,CAAA;gBAYd,aAAa,EAAA,CAAA;sBADhB,KAAK;uBAAC,eAAe,CAAA;gBASlB,YAAY,EAAA,CAAA;sBADf,KAAK;uBAAC,cAAc,CAAA;gBASjB,YAAY,EAAA,CAAA;sBADf,KAAK;uBAAC,cAAc,CAAA;gBASjB,UAAU,EAAA,CAAA;sBADb,KAAK;uBAAC,YAAY,CAAA;gBASf,YAAY,EAAA,CAAA;sBADf,KAAK;uBAAC,cAAc,CAAA;gBA0Sd,OAAO,EAAA,CAAA;sBADb,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAkB1B,cAAc,EAAA,CAAA;sBADpB,YAAY;uBAAC,eAAe,CAAA;;;MCpiBpB,iBAAiB,CAAA;;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,iBAFX,oBAAoB,EAAE,wBAAwB,CADnD,EAAA,OAAA,EAAA,CAAA,oBAAoB,EAAE,wBAAwB,CAAA,EAAA,CAAA,CAAA;+GAG/C,iBAAiB,EAAA,CAAA,CAAA;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,oBAAoB,EAAE,wBAAwB,CAAC;AACzD,oBAAA,YAAY,EAAE,CAAC,oBAAoB,EAAE,wBAAwB,CAAC;AACjE,iBAAA,CAAA;;;ACRD;;AAEG;AAIH;;ACNA;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pepperi-addons/ngx-lib",
3
- "version": "0.4.2-beta.161",
3
+ "version": "0.4.2-beta.162",
4
4
  "peerDependencies": {
5
5
  "@angular/animations": ">= 14.0.2",
6
6
  "@angular/cdk": ">= 14.0.2",