pdm-ui-kit 0.1.33 → 0.1.35

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.
@@ -217,8 +217,12 @@ export class PdmCalendarComponent {
217
217
  }
218
218
  dayButtonClasses(cell) {
219
219
  return [
220
- 'relative z-10 flex h-8 w-8 appearance-none items-center justify-center rounded-md border-0 bg-transparent p-0 text-sm leading-5',
221
- cell.selected ? 'bg-primary text-primary-foreground' : cell.rangeFill ? 'text-accent-foreground' : 'text-foreground',
220
+ 'relative z-10 flex h-8 w-8 appearance-none items-center justify-center rounded-md border-0 p-0 text-sm leading-5',
221
+ cell.selected
222
+ ? 'bg-primary text-primary-foreground'
223
+ : cell.rangeFill
224
+ ? 'bg-transparent text-accent-foreground'
225
+ : 'bg-transparent text-foreground',
222
226
  cell.muted && !cell.rangeFill ? 'opacity-50' : '',
223
227
  cell.disabled ? 'cursor-not-allowed opacity-40' : '',
224
228
  !cell.disabled && !this.readonly && !cell.selected ? 'hover:bg-accent/70' : ''
@@ -500,4 +504,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
500
504
  }], month: [{
501
505
  type: Input
502
506
  }] } });
503
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBZ0NuSCxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFPbkMsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUpsQyxXQUFNLEdBQWdCLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUE0QixJQUFJLENBQUM7UUFDNUMsV0FBTSxHQUFnQixJQUFJLENBQUM7UUFJMUIsWUFBTyxHQUFnQyxRQUFRLENBQUM7UUFDaEQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLFlBQU8sR0FBZ0IsSUFBSSxDQUFDO1FBQzVCLFlBQU8sR0FBZ0IsSUFBSSxDQUFDO1FBQzVCLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQzlCLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQzlCLG1CQUFjLEdBQXFDLElBQUksQ0FBQztRQUN4RCxzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDekIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVoQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFDOUMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFDL0QsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3ZDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3JDLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUErQjlDLGFBQVEsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBVSxDQUFDO1FBQy9ELGlCQUFZLEdBQUc7WUFDdEIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDM0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7U0FDbkIsQ0FBQztRQStMWCxpQkFBWSxHQUFHLENBQUMsS0FBYSxFQUFVLEVBQUU7WUFDdkMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUE7UUFFRCxnQkFBVyxHQUFHLENBQUMsTUFBYyxFQUFFLElBQXFCLEVBQVUsRUFBRTtZQUM5RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQTtJQW5RNEMsQ0FBQztJQW1COUMsSUFDSSxLQUFLLENBQUMsS0FBa0I7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQ0ksVUFBVSxDQUFDLEtBQThCO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSztZQUN0QixDQUFDLENBQUM7Z0JBQ0UsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDdEMsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNuQztZQUNILENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBQ0QsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUNJLEtBQUssQ0FBQyxLQUFrQjtRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hELENBQUM7SUFDRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQWtCRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV4QyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssUUFBUSxFQUFFO1lBQ3JDLE9BQU87Z0JBQ0w7b0JBQ0UsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO29CQUN0QyxVQUFVLEVBQUUsV0FBVztvQkFDdkIsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7b0JBQy9DLFlBQVksRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUM3QyxjQUFjLEVBQUUsSUFBSTtvQkFDcEIsY0FBYyxFQUFFLElBQUk7b0JBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7aUJBQzlDO2FBQ0YsQ0FBQztTQUNIO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0MsT0FBTztZQUNMO2dCQUNFLElBQUksRUFBRSxTQUFTO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztnQkFDdEMsVUFBVSxFQUFFLE9BQU87Z0JBQ25CLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixjQUFjLEVBQUUsS0FBSztnQkFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQzthQUM3QztZQUNEO2dCQUNFLElBQUksRUFBRSxTQUFTO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztnQkFDdEMsVUFBVSxFQUFFLE9BQU87Z0JBQ25CLGNBQWMsRUFBRSxLQUFLO2dCQUNyQixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQzthQUM3QztTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMzQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzNGLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDMUYsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBRTNCLElBQUksWUFBWSxHQUFHLE9BQU8sRUFBRTtZQUMxQixPQUFPLEdBQUcsWUFBWSxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxZQUFZLEdBQUcsT0FBTyxFQUFFO1lBQzFCLE9BQU8sR0FBRyxZQUFZLENBQUM7U0FDeEI7UUFFRCxJQUFJLE9BQU8sR0FBRyxPQUFPLEVBQUU7WUFDckIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDbEIsT0FBTyxHQUFHLE9BQU8sQ0FBQztTQUNuQjtRQUVELEtBQUssSUFBSSxJQUFJLEdBQUcsT0FBTyxFQUFFLElBQUksSUFBSSxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRTtZQUNuRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xCO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTztZQUNMLDBFQUEwRTtZQUMxRSxJQUFJLENBQUMsZUFBZSxLQUFLLE9BQU87Z0JBQzlCLENBQUMsQ0FBQyx5RUFBeUU7Z0JBQzNFLENBQUMsQ0FBQyx1REFBdUQ7WUFDM0QsSUFBSSxDQUFDLFNBQVM7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUVuRSxPQUFPO1lBQ0wsS0FBSztZQUNMLFFBQVEsRUFBRSxLQUFLO1lBQ2YsUUFBUSxFQUFFLEtBQUs7WUFDZixTQUFTLEVBQUUsT0FBTztZQUNsQixJQUFJLEVBQUUsVUFBVTtZQUNoQixTQUFTLEVBQUUsWUFBWTtTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQWM7UUFDOUIsT0FBTyxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxlQUFlLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUEyQjtRQUN2QyxPQUFPLENBQUMsMENBQTBDLEVBQUUsS0FBSyxDQUFDLFVBQVUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU87WUFDTCxpSEFBaUg7WUFDakgsa0RBQWtEO1NBQ25ELENBQUM7SUFDSixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUFrQjtRQUNoQyxPQUFPLENBQUMsaURBQWlELEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPO1lBQ0wscUVBQXFFO1lBQ3JFLHlHQUF5RztTQUMxRyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU87WUFDTCxVQUFVLEVBQUUsTUFBTTtZQUNsQixnQkFBZ0IsRUFBRSxNQUFNO1lBQ3hCLGFBQWEsRUFBRSxNQUFNO1lBQ3JCLFVBQVUsRUFBRSxhQUFhO1lBQ3pCLE1BQU0sRUFBRSxHQUFHO1lBQ1gsU0FBUyxFQUFFLE1BQU07WUFDakIsT0FBTyxFQUFFLEdBQUc7WUFDWixPQUFPLEVBQUUsR0FBRztZQUNaLE1BQU0sRUFBRSxHQUFHO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCx1QkFBdUI7UUFDckIsT0FBTyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxDQUFDLGtHQUFrRyxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQXFCO1FBQ2xDLE9BQU87WUFDTCw0REFBNEQ7WUFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDekMsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFxQjtRQUNwQyxPQUFPO1lBQ0wsaUlBQWlJO1lBQ2pJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLG9DQUFvQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsaUJBQWlCO1lBQ3BILElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEQsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQy9FLENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQXNCO1FBQ3BDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBVUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELG1CQUFtQixDQUFDLFVBQWtCO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxFQUFFO1lBQ2xELE9BQU87U0FDUjtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBaUI7UUFDbEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QixPQUFPO1NBQ1I7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFxQjtRQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLFFBQVEsRUFBRTtZQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLG9CQUFvQixDQUFDLElBQVU7UUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNqQyxNQUFNLFlBQVksR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzNFLE1BQU0sVUFBVSxHQUFHLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFckUsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksSUFBSSxVQUFVLENBQUMsRUFBRTtZQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ2pFLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkUsT0FBTztTQUNSO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUM3RSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTNFLElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtZQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBVyxFQUFFLFlBQXFCO1FBQ3hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUMxRCxNQUFNLEtBQUssR0FBd0IsRUFBRSxDQUFDO1FBRXRDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekMsTUFBTSxHQUFHLEdBQXNCLEVBQUUsQ0FBQztZQUVsQyxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUU7Z0JBQ25DLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNsQztZQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakI7UUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRTtZQUN2QixLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFO2dCQUM1QyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNqQixTQUFTO2lCQUNWO2dCQUVELE1BQU0sU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pELE1BQU0sVUFBVSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFFdkUsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLFNBQVMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLFVBQVUsQ0FBQzthQUNsQztTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVUsRUFBRSxZQUFrQixFQUFFLFlBQXFCO1FBQ3JFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLEtBQUssWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JILE1BQU0sVUFBVSxHQUFHLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuSCxNQUFNLFFBQVEsR0FBRyxZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0csTUFBTSxPQUFPLEdBQ1gsWUFBWTtZQUNaLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUs7WUFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRztZQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUQsT0FBTztZQUNMLElBQUksRUFBRSxVQUFVO1lBQ2hCLEtBQUssRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFO1lBQzNCLEtBQUssRUFBRSxDQUFDLGNBQWM7WUFDdEIsUUFBUTtZQUNSLFFBQVEsRUFBRSxjQUFjLElBQUksVUFBVSxJQUFJLFFBQVE7WUFDbEQsT0FBTztZQUNQLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFlBQVksRUFBRSxLQUFLO1lBQ25CLGFBQWEsRUFBRSxLQUFLO1NBQ3JCLENBQUM7SUFDSixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLFNBQVMsR0FBZ0IsSUFBSSxDQUFDO1FBRWxDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN6QzthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUMzRCxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUM7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFO1lBQ3RFLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkQ7YUFBTTtZQUNMLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztTQUMzQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7U0FDdEM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQVc7UUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNqQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxJQUFVO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDN0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFVO1FBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1RCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekYsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUN0QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsS0FBVyxFQUFFLEdBQVM7UUFDckQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbEM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBOEI7UUFDbEQsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7WUFDN0QsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVU7UUFDMUIsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTyxXQUFXLENBQUMsSUFBNkI7UUFDL0MsT0FBTyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBVTtRQUM3QixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFVO1FBQzNCLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUFVO1FBQzVCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVU7UUFDMUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFVLEVBQUUsTUFBYztRQUMxQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBVSxFQUFFLElBQVk7UUFDdEMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxTQUFTLENBQUMsSUFBVTtRQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDaEYsQ0FBQztJQUVPLFNBQVMsQ0FBQyxDQUFPLEVBQUUsQ0FBTztRQUNoQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ2xDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlFLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBVTtRQUN4QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0IsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFVO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU8sZUFBZSxDQUFDLElBQVU7UUFDaEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQzs7aUhBdmlCVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixpaUJDdkNqQyw4eEpBa0hBOzJGRDNFYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsY0FBYyxtQkFFUCx1QkFBdUIsQ0FBQyxNQUFNO3dHQVN0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBR0gsS0FBSztzQkFEUixLQUFLO2dCQVNGLFVBQVU7c0JBRGIsS0FBSztnQkFjRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIFBkbUNhbGVuZGFyVmFyaWFudCA9ICdzaW5nbGUnIHwgJ3JhbmdlJztcblxuZXhwb3J0IGludGVyZmFjZSBQZG1DYWxlbmRhclJhbmdlIHtcbiAgc3RhcnQ6IERhdGUgfCBudWxsO1xuICBlbmQ6IERhdGUgfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgUGRtQ2FsZW5kYXJDZWxsIHtcbiAgZGF0ZTogRGF0ZTtcbiAgbGFiZWw6IG51bWJlcjtcbiAgbXV0ZWQ6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgaW5SYW5nZTogYm9vbGVhbjtcbiAgcmFuZ2VGaWxsOiBib29sZWFuO1xuICByYW5nZUxlZnRDYXA6IGJvb2xlYW47XG4gIHJhbmdlUmlnaHRDYXA6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQZG1DYWxlbmRhck1vbnRoVmlldyB7XG4gIGRhdGU6IERhdGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRpdGxlU3R5bGU6ICdkcm9wZG93bnMnIHwgJ3BsYWluJztcbiAgZHJvcGRvd25Nb250aD86IHN0cmluZztcbiAgZHJvcGRvd25ZZWFyPzogc3RyaW5nO1xuICBzaG93UHJldkJ1dHRvbjogYm9vbGVhbjtcbiAgc2hvd05leHRCdXR0b246IGJvb2xlYW47XG4gIHdlZWtzOiByZWFkb25seSAocmVhZG9ubHkgUGRtQ2FsZW5kYXJDZWxsW10pW107XG59XG5cbmNvbnN0IERBWV9NUyA9IDI0ICogNjAgKiA2MCAqIDEwMDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBkbUNhbGVuZGFyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfdmFsdWU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfcmFuZ2VWYWx1ZTogUGRtQ2FsZW5kYXJSYW5nZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9tb250aDogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBASW5wdXQoKSB2YXJpYW50OiBQZG1DYWxlbmRhclZhcmlhbnQgfCBzdHJpbmcgPSAnc2luZ2xlJztcbiAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkRGF0ZXM6IERhdGVbXSA9IFtdO1xuICBASW5wdXQoKSBtaW5EYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1heERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbWluWWVhcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1heFllYXI6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBpc0RhdGVEaXNhYmxlZDogKChkYXRlOiBEYXRlKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBhbGxvd1NhbWVEYXlSYW5nZSA9IHRydWU7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIHJhbmdlVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgbW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBPdXRwdXQoKSBkYXRlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBPdXRwdXQoKSBkaXNhYmxlZERhdGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWUpO1xuICB9XG4gIGdldCB2YWx1ZSgpOiBEYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJhbmdlVmFsdWUodmFsdWU6IFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsKSB7XG4gICAgdGhpcy5fcmFuZ2VWYWx1ZSA9IHZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgICBzdGFydDogdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlLnN0YXJ0KSxcbiAgICAgICAgICBlbmQ6IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZS5lbmQpXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcbiAgfVxuICBnZXQgcmFuZ2VWYWx1ZSgpOiBQZG1DYWxlbmRhclJhbmdlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlVmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbW9udGgodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fbW9udGggPSB2YWx1ZSA/IHRoaXMuc3RhcnRPZk1vbnRoKHZhbHVlKSA6IG51bGw7XG4gIH1cbiAgZ2V0IG1vbnRoKCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbW9udGg7XG4gIH1cblxuICByZWFkb25seSB3ZWVrZGF5cyA9IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSBhcyBjb25zdDtcbiAgcmVhZG9ubHkgbW9udGhPcHRpb25zID0gW1xuICAgIHsgdmFsdWU6IDAsIGxhYmVsOiAnSmFuJyB9LFxuICAgIHsgdmFsdWU6IDEsIGxhYmVsOiAnRmViJyB9LFxuICAgIHsgdmFsdWU6IDIsIGxhYmVsOiAnTWFyJyB9LFxuICAgIHsgdmFsdWU6IDMsIGxhYmVsOiAnQXByJyB9LFxuICAgIHsgdmFsdWU6IDQsIGxhYmVsOiAnTWF5JyB9LFxuICAgIHsgdmFsdWU6IDUsIGxhYmVsOiAnSnVuJyB9LFxuICAgIHsgdmFsdWU6IDYsIGxhYmVsOiAnSnVsJyB9LFxuICAgIHsgdmFsdWU6IDcsIGxhYmVsOiAnQXVnJyB9LFxuICAgIHsgdmFsdWU6IDgsIGxhYmVsOiAnU2VwJyB9LFxuICAgIHsgdmFsdWU6IDksIGxhYmVsOiAnT2N0JyB9LFxuICAgIHsgdmFsdWU6IDEwLCBsYWJlbDogJ05vdicgfSxcbiAgICB7IHZhbHVlOiAxMSwgbGFiZWw6ICdEZWMnIH1cbiAgXSBhcyBjb25zdDtcblxuICBnZXQgcmVzb2x2ZWRWYXJpYW50KCk6IFBkbUNhbGVuZGFyVmFyaWFudCB7XG4gICAgcmV0dXJuIHRoaXMudmFyaWFudCA9PT0gJ3JhbmdlJyA/ICdyYW5nZScgOiAnc2luZ2xlJztcbiAgfVxuXG4gIGdldCB2aXNpYmxlTW9udGhzKCk6IHJlYWRvbmx5IFBkbUNhbGVuZGFyTW9udGhWaWV3W10ge1xuICAgIGNvbnN0IGJhc2VNb250aCA9IHRoaXMuZ2V0QW5jaG9yTW9udGgoKTtcblxuICAgIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRlOiBiYXNlTW9udGgsXG4gICAgICAgICAgdGl0bGU6IHRoaXMuZm9ybWF0TW9udGhZZWFyKGJhc2VNb250aCksXG4gICAgICAgICAgdGl0bGVTdHlsZTogJ2Ryb3Bkb3ducycsXG4gICAgICAgICAgZHJvcGRvd25Nb250aDogdGhpcy5mb3JtYXRNb250aFNob3J0KGJhc2VNb250aCksXG4gICAgICAgICAgZHJvcGRvd25ZZWFyOiBTdHJpbmcoYmFzZU1vbnRoLmdldEZ1bGxZZWFyKCkpLFxuICAgICAgICAgIHNob3dQcmV2QnV0dG9uOiB0cnVlLFxuICAgICAgICAgIHNob3dOZXh0QnV0dG9uOiB0cnVlLFxuICAgICAgICAgIHdlZWtzOiB0aGlzLmJ1aWxkTW9udGhXZWVrcyhiYXNlTW9udGgsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuYWRkTW9udGhzKGJhc2VNb250aCwgMSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZGF0ZTogYmFzZU1vbnRoLFxuICAgICAgICB0aXRsZTogdGhpcy5mb3JtYXRNb250aFllYXIoYmFzZU1vbnRoKSxcbiAgICAgICAgdGl0bGVTdHlsZTogJ3BsYWluJyxcbiAgICAgICAgc2hvd1ByZXZCdXR0b246IHRydWUsXG4gICAgICAgIHNob3dOZXh0QnV0dG9uOiBmYWxzZSxcbiAgICAgICAgd2Vla3M6IHRoaXMuYnVpbGRNb250aFdlZWtzKGJhc2VNb250aCwgdHJ1ZSlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRhdGU6IG5leHRNb250aCxcbiAgICAgICAgdGl0bGU6IHRoaXMuZm9ybWF0TW9udGhZZWFyKG5leHRNb250aCksXG4gICAgICAgIHRpdGxlU3R5bGU6ICdwbGFpbicsXG4gICAgICAgIHNob3dQcmV2QnV0dG9uOiBmYWxzZSxcbiAgICAgICAgc2hvd05leHRCdXR0b246IHRydWUsXG4gICAgICAgIHdlZWtzOiB0aGlzLmJ1aWxkTW9udGhXZWVrcyhuZXh0TW9udGgsIHRydWUpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGdldCBzaW5nbGVIZWFkZXJNb250aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldEFuY2hvck1vbnRoKCkuZ2V0TW9udGgoKTtcbiAgfVxuXG4gIGdldCBzaW5nbGVIZWFkZXJZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QW5jaG9yTW9udGgoKS5nZXRGdWxsWWVhcigpO1xuICB9XG5cbiAgZ2V0IHllYXJPcHRpb25zKCk6IHJlYWRvbmx5IG51bWJlcltdIHtcbiAgICBjb25zdCBiYXNlWWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBzZWxlY3RlZFllYXIgPSB0aGlzLnNpbmdsZUhlYWRlclllYXI7XG4gICAgbGV0IG1pblllYXIgPSB0aGlzLm1pblllYXIgPz8gKHRoaXMubWluRGF0ZSA/IHRoaXMubWluRGF0ZS5nZXRGdWxsWWVhcigpIDogYmFzZVllYXIgLSAxMDApO1xuICAgIGxldCBtYXhZZWFyID0gdGhpcy5tYXhZZWFyID8/ICh0aGlzLm1heERhdGUgPyB0aGlzLm1heERhdGUuZ2V0RnVsbFllYXIoKSA6IGJhc2VZZWFyICsgMTApO1xuICAgIGNvbnN0IHllYXJzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaWYgKHNlbGVjdGVkWWVhciA8IG1pblllYXIpIHtcbiAgICAgIG1pblllYXIgPSBzZWxlY3RlZFllYXI7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGVkWWVhciA+IG1heFllYXIpIHtcbiAgICAgIG1heFllYXIgPSBzZWxlY3RlZFllYXI7XG4gICAgfVxuXG4gICAgaWYgKG1pblllYXIgPiBtYXhZZWFyKSB7XG4gICAgICBjb25zdCBuZXh0TWluID0gbWF4WWVhcjtcbiAgICAgIG1heFllYXIgPSBtaW5ZZWFyO1xuICAgICAgbWluWWVhciA9IG5leHRNaW47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgeWVhciA9IG1pblllYXI7IHllYXIgPD0gbWF4WWVhcjsgeWVhciArPSAxKSB7XG4gICAgICB5ZWFycy5wdXNoKHllYXIpO1xuICAgIH1cblxuICAgIHJldHVybiB5ZWFycztcbiAgfVxuXG4gIGdldCByb290Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdib3JkZXItYm9yZGVyIGJnLWJhY2tncm91bmQgcmVsYXRpdmUgcm91bmRlZC1bMTBweF0gYm9yZGVyIHAtMyBzaGFkb3ctc20nLFxuICAgICAgdGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdyYW5nZSdcbiAgICAgICAgPyAnaW5saW5lLWZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1jZW50ZXIgZ2FwLTQgc2hyaW5rLTAgZ3Jvdy0wIGJhc2lzLWF1dG8nXG4gICAgICAgIDogJ2lubGluZS1mbGV4IGZsZXgtY29sIGdhcC00IHNocmluay0wIGdyb3ctMCBiYXNpcy1hdXRvJyxcbiAgICAgIHRoaXMuY2xhc3NOYW1lXG4gICAgXTtcbiAgfVxuXG4gIGdldCByb290U3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyA/ICc0ODhweCcgOiAnMjUwcHgnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoLFxuICAgICAgbWluV2lkdGg6IHdpZHRoLFxuICAgICAgbWF4V2lkdGg6IHdpZHRoLFxuICAgICAgbWluSGVpZ2h0OiAnMjkzcHgnLFxuICAgICAgZmxleDogJzAgMCBhdXRvJyxcbiAgICAgIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnXG4gICAgfTtcbiAgfVxuXG4gIG1vbnRoUGFuZWxDbGFzc2VzKF9pbmRleDogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggZmxleC1jb2wgaXRlbXMtc3RhcnQnLCB0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyA/ICd3LVsyMjRweF0gZ2FwLTQnIDogJ3ctZnVsbCBnYXAtMCddO1xuICB9XG5cbiAgaGVhZGVyQ2xhc3Nlcyhtb250aDogUGRtQ2FsZW5kYXJNb250aFZpZXcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbicsIG1vbnRoLnRpdGxlU3R5bGUgPT09ICdkcm9wZG93bnMnID8gJycgOiAnbWItNCddO1xuICB9XG5cbiAgbmF2QnV0dG9uQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdmbGV4IGgtOCB3LTggYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHAtMCB0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgJ2Rpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS00MCdcbiAgICBdO1xuICB9XG5cbiAgbmF2UGxhY2Vob2xkZXJDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydoLTcgdy03IHNocmluay0wJ107XG4gIH1cblxuICBkcm9wZG93bldyYXBDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydmbGV4IHctNDAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yJ107XG4gIH1cblxuICBkcm9wZG93bkNsYXNzZXMod2lkdGhDbGFzczogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggaC04IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBweC0xJywgd2lkdGhDbGFzc107XG4gIH1cblxuICBkcm9wZG93blNlbGVjdENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAndGV4dC1mb3JlZ3JvdW5kIGgtZnVsbCBiZy10cmFuc3BhcmVudCB0ZXh0LXNtIGZvbnQtbWVkaXVtIGxlYWRpbmctNScsXG4gICAgICAnYXBwZWFyYW5jZS1ub25lIGJvcmRlci0wIG91dGxpbmUtbm9uZSByaW5nLTAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCB0ZXh0LWNlbnRlciBjdXJzb3ItcG9pbnRlcidcbiAgICBdO1xuICB9XG5cbiAgZ2V0IGRyb3Bkb3duU2VsZWN0U3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAgIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAgIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICBib3JkZXI6ICcwJyxcbiAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgb3V0bGluZTogJzAnLFxuICAgICAgcGFkZGluZzogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9O1xuICB9XG5cbiAgY2FsZW5kYXJHcmlkV3JhcENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggdy1mdWxsIGZsZXgtY29sIGl0ZW1zLXN0YXJ0J107XG4gIH1cblxuICB3ZWVrZGF5Um93Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyJ107XG4gIH1cblxuICB3ZWVrZGF5Q2VsbENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBmbGV4IGgtWzIxcHhdIHctOCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCB0ZXh0LXhzIGxlYWRpbmctNCddO1xuICB9XG5cbiAgd2Vla1Jvd0NsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggdy1mdWxsIGl0ZW1zLXN0YXJ0IHB0LTInXTtcbiAgfVxuXG4gIGRheUNlbGxDbGFzc2VzKGNlbGw6IFBkbUNhbGVuZGFyQ2VsbCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3JlbGF0aXZlIGZsZXggaC04IHctOCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgY2VsbC5yYW5nZUZpbGwgPyAnYmctYWNjZW50JyA6ICcnLFxuICAgICAgY2VsbC5yYW5nZUxlZnRDYXAgPyAncm91bmRlZC1sLW1kJyA6ICcnLFxuICAgICAgY2VsbC5yYW5nZVJpZ2h0Q2FwID8gJ3JvdW5kZWQtci1tZCcgOiAnJ1xuICAgIF07XG4gIH1cblxuICBkYXlCdXR0b25DbGFzc2VzKGNlbGw6IFBkbUNhbGVuZGFyQ2VsbCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3JlbGF0aXZlIHotMTAgZmxleCBoLTggdy04IGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBwLTAgdGV4dC1zbSBsZWFkaW5nLTUnLFxuICAgICAgY2VsbC5zZWxlY3RlZCA/ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kJyA6IGNlbGwucmFuZ2VGaWxsID8gJ3RleHQtYWNjZW50LWZvcmVncm91bmQnIDogJ3RleHQtZm9yZWdyb3VuZCcsXG4gICAgICBjZWxsLm11dGVkICYmICFjZWxsLnJhbmdlRmlsbCA/ICdvcGFjaXR5LTUwJyA6ICcnLFxuICAgICAgY2VsbC5kaXNhYmxlZCA/ICdjdXJzb3Itbm90LWFsbG93ZWQgb3BhY2l0eS00MCcgOiAnJyxcbiAgICAgICFjZWxsLmRpc2FibGVkICYmICF0aGlzLnJlYWRvbmx5ICYmICFjZWxsLnNlbGVjdGVkID8gJ2hvdmVyOmJnLWFjY2VudC83MCcgOiAnJ1xuICAgIF07XG4gIH1cblxuICBkYXlMYWJlbENsYXNzZXMoX2NlbGw6IFBkbUNhbGVuZGFyQ2VsbCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydmb250LW5vcm1hbCddO1xuICB9XG5cbiAgdHJhY2tCeUluZGV4ID0gKGluZGV4OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHRyYWNrQnlEYXRlID0gKF9pbmRleDogbnVtYmVyLCBjZWxsOiBQZG1DYWxlbmRhckNlbGwpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVLZXkoY2VsbC5kYXRlKTtcbiAgfVxuXG4gIGdvVG9QcmV2aW91c01vbnRoKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0QW5jaG9yTW9udGgodGhpcy5hZGRNb250aHModGhpcy5nZXRBbmNob3JNb250aCgpLCAtMSkpO1xuICB9XG5cbiAgZ29Ub05leHRNb250aCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEFuY2hvck1vbnRoKHRoaXMuYWRkTW9udGhzKHRoaXMuZ2V0QW5jaG9yTW9udGgoKSwgMSkpO1xuICB9XG5cbiAgb25TaW5nbGVNb250aENoYW5nZShtb250aFZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBtb250aCA9IE51bWJlcihtb250aFZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKG1vbnRoKSB8fCBtb250aCA8IDAgfHwgbW9udGggPiAxMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuZ2V0QW5jaG9yTW9udGgoKTtcbiAgICB0aGlzLnNldEFuY2hvck1vbnRoKG5ldyBEYXRlKGFuY2hvci5nZXRGdWxsWWVhcigpLCBtb250aCwgMSkpO1xuICB9XG5cbiAgb25TaW5nbGVZZWFyQ2hhbmdlKHllYXJWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgeWVhciA9IE51bWJlcih5ZWFyVmFsdWUpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4oeWVhcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmdldEFuY2hvck1vbnRoKCk7XG4gICAgdGhpcy5zZXRBbmNob3JNb250aChuZXcgRGF0ZSh5ZWFyLCBhbmNob3IuZ2V0TW9udGgoKSwgMSkpO1xuICB9XG5cbiAgb25EYXRlUHJlc3NlZChjZWxsOiBQZG1DYWxlbmRhckNlbGwpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5jbG9uZURhdGUoY2VsbC5kYXRlKTtcblxuICAgIGlmIChjZWxsLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmRpc2FibGVkRGF0ZUNsaWNrLmVtaXQoZGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGVDbGljay5lbWl0KGRhdGUpO1xuXG4gICAgaWYgKHRoaXMucmVzb2x2ZWRWYXJpYW50ID09PSAnc2luZ2xlJykge1xuICAgICAgdGhpcy5fdmFsdWUgPSBkYXRlO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKGRhdGUpKTtcbiAgICAgIHRoaXMuc3luY1Zpc2libGVNb250aFRvRGF0ZShkYXRlKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlUmFuZ2VTZWxlY3Rpb24oZGF0ZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJhbmdlU2VsZWN0aW9uKGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5fcmFuZ2VWYWx1ZTtcbiAgICBjb25zdCBjdXJyZW50U3RhcnQgPSBjdXJyZW50Py5zdGFydCA/IHRoaXMuY2xvbmVEYXRlKGN1cnJlbnQuc3RhcnQpIDogbnVsbDtcbiAgICBjb25zdCBjdXJyZW50RW5kID0gY3VycmVudD8uZW5kID8gdGhpcy5jbG9uZURhdGUoY3VycmVudC5lbmQpIDogbnVsbDtcblxuICAgIGlmICghY3VycmVudFN0YXJ0IHx8IChjdXJyZW50U3RhcnQgJiYgY3VycmVudEVuZCkpIHtcbiAgICAgIHRoaXMuX3JhbmdlVmFsdWUgPSB7IHN0YXJ0OiBkYXRlLCBlbmQ6IG51bGwgfTtcbiAgICAgIHRoaXMucmFuZ2VWYWx1ZUNoYW5nZS5lbWl0KHsgc3RhcnQ6IHRoaXMuY2xvbmVEYXRlKGRhdGUpLCBlbmQ6IG51bGwgfSk7XG4gICAgICB0aGlzLnN5bmNWaXNpYmxlTW9udGhUb0RhdGUoZGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTYW1lRGF5KGN1cnJlbnRTdGFydCwgZGF0ZSkgJiYgIXRoaXMuYWxsb3dTYW1lRGF5UmFuZ2UpIHtcbiAgICAgIHRoaXMuX3JhbmdlVmFsdWUgPSB7IHN0YXJ0OiBkYXRlLCBlbmQ6IG51bGwgfTtcbiAgICAgIHRoaXMucmFuZ2VWYWx1ZUNoYW5nZS5lbWl0KHsgc3RhcnQ6IHRoaXMuY2xvbmVEYXRlKGRhdGUpLCBlbmQ6IG51bGwgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNvbXBhcmVEYXRlKGRhdGUsIGN1cnJlbnRTdGFydCkgPCAwID8gZGF0ZSA6IGN1cnJlbnRTdGFydDtcbiAgICBjb25zdCBlbmQgPSB0aGlzLmNvbXBhcmVEYXRlKGRhdGUsIGN1cnJlbnRTdGFydCkgPCAwID8gY3VycmVudFN0YXJ0IDogZGF0ZTtcblxuICAgIGlmICh0aGlzLnJhbmdlQ29udGFpbnNCbG9ja2VkRGF0ZShzdGFydCwgZW5kKSkge1xuICAgICAgdGhpcy5kaXNhYmxlZERhdGVDbGljay5lbWl0KHRoaXMuY2xvbmVEYXRlKGRhdGUpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yYW5nZVZhbHVlID0geyBzdGFydCwgZW5kIH07XG4gICAgdGhpcy5yYW5nZVZhbHVlQ2hhbmdlLmVtaXQoeyBzdGFydDogdGhpcy5jbG9uZURhdGUoc3RhcnQpLCBlbmQ6IHRoaXMuY2xvbmVEYXRlKGVuZCkgfSk7XG4gICAgdGhpcy5zeW5jVmlzaWJsZU1vbnRoVG9EYXRlKHN0YXJ0KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRNb250aFdlZWtzKG1vbnRoOiBEYXRlLCBpbmNsdWRlUmFuZ2U6IGJvb2xlYW4pOiByZWFkb25seSAocmVhZG9ubHkgUGRtQ2FsZW5kYXJDZWxsW10pW10ge1xuICAgIGNvbnN0IGZpcnN0T2ZNb250aCA9IHRoaXMuc3RhcnRPZk1vbnRoKG1vbnRoKTtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuc3RhcnRPZldlZWsoZmlyc3RPZk1vbnRoKTtcbiAgICBjb25zdCBlbmQgPSB0aGlzLmVuZE9mV2Vlayh0aGlzLmVuZE9mTW9udGgoZmlyc3RPZk1vbnRoKSk7XG4gICAgY29uc3Qgd2Vla3M6IFBkbUNhbGVuZGFyQ2VsbFtdW10gPSBbXTtcblxuICAgIGxldCBjdXJzb3IgPSB0aGlzLmNsb25lRGF0ZShzdGFydCk7XG4gICAgd2hpbGUgKHRoaXMuY29tcGFyZURhdGUoY3Vyc29yLCBlbmQpIDw9IDApIHtcbiAgICAgIGNvbnN0IHJvdzogUGRtQ2FsZW5kYXJDZWxsW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgNzsgY29sICs9IDEpIHtcbiAgICAgICAgcm93LnB1c2godGhpcy5idWlsZENlbGwoY3Vyc29yLCBtb250aCwgaW5jbHVkZVJhbmdlKSk7XG4gICAgICAgIGN1cnNvciA9IHRoaXMuYWRkRGF5cyhjdXJzb3IsIDEpO1xuICAgICAgfVxuXG4gICAgICB3ZWVrcy5wdXNoKHJvdyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByb3cgb2Ygd2Vla3MpIHtcbiAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IHJvdy5sZW5ndGg7IGNvbCArPSAxKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSByb3dbY29sXTtcbiAgICAgICAgaWYgKCFjZWxsLmluUmFuZ2UpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxlZnRJblJvdyA9IGNvbCA+IDAgPyByb3dbY29sIC0gMV0uaW5SYW5nZSA6IGZhbHNlO1xuICAgICAgICBjb25zdCByaWdodEluUm93ID0gY29sIDwgcm93Lmxlbmd0aCAtIDEgPyByb3dbY29sICsgMV0uaW5SYW5nZSA6IGZhbHNlO1xuXG4gICAgICAgIGNlbGwucmFuZ2VMZWZ0Q2FwID0gIWxlZnRJblJvdztcbiAgICAgICAgY2VsbC5yYW5nZVJpZ2h0Q2FwID0gIXJpZ2h0SW5Sb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHdlZWtzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENlbGwoZGF0ZTogRGF0ZSwgdmlzaWJsZU1vbnRoOiBEYXRlLCBpbmNsdWRlUmFuZ2U6IGJvb2xlYW4pOiBQZG1DYWxlbmRhckNlbGwge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLmNsb25lRGF0ZShkYXRlKTtcbiAgICBjb25zdCBpbkN1cnJlbnRNb250aCA9IG5vcm1hbGl6ZWQuZ2V0TW9udGgoKSA9PT0gdmlzaWJsZU1vbnRoLmdldE1vbnRoKCkgJiYgbm9ybWFsaXplZC5nZXRGdWxsWWVhcigpID09PSB2aXNpYmxlTW9udGguZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNCbG9ja2VkKG5vcm1hbGl6ZWQpO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRTaW5nbGUgPSB0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3NpbmdsZScgJiYgISF0aGlzLl92YWx1ZSAmJiB0aGlzLmlzU2FtZURheShub3JtYWxpemVkLCB0aGlzLl92YWx1ZSk7XG4gICAgY29uc3QgcmFuZ2VTdGFydCA9IGluY2x1ZGVSYW5nZSAmJiAhIXRoaXMuX3JhbmdlVmFsdWU/LnN0YXJ0ICYmIHRoaXMuaXNTYW1lRGF5KG5vcm1hbGl6ZWQsIHRoaXMuX3JhbmdlVmFsdWUuc3RhcnQpO1xuICAgIGNvbnN0IHJhbmdlRW5kID0gaW5jbHVkZVJhbmdlICYmICEhdGhpcy5fcmFuZ2VWYWx1ZT8uZW5kICYmIHRoaXMuaXNTYW1lRGF5KG5vcm1hbGl6ZWQsIHRoaXMuX3JhbmdlVmFsdWUuZW5kKTtcbiAgICBjb25zdCBpblJhbmdlID1cbiAgICAgIGluY2x1ZGVSYW5nZSAmJlxuICAgICAgISF0aGlzLl9yYW5nZVZhbHVlPy5zdGFydCAmJlxuICAgICAgISF0aGlzLl9yYW5nZVZhbHVlPy5lbmQgJiZcbiAgICAgIHRoaXMuY29tcGFyZURhdGUobm9ybWFsaXplZCwgdGhpcy5fcmFuZ2VWYWx1ZS5zdGFydCkgPj0gMCAmJlxuICAgICAgdGhpcy5jb21wYXJlRGF0ZShub3JtYWxpemVkLCB0aGlzLl9yYW5nZVZhbHVlLmVuZCkgPD0gMDtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRlOiBub3JtYWxpemVkLFxuICAgICAgbGFiZWw6IG5vcm1hbGl6ZWQuZ2V0RGF0ZSgpLFxuICAgICAgbXV0ZWQ6ICFpbkN1cnJlbnRNb250aCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgc2VsZWN0ZWQ6IHNlbGVjdGVkU2luZ2xlIHx8IHJhbmdlU3RhcnQgfHwgcmFuZ2VFbmQsXG4gICAgICBpblJhbmdlLFxuICAgICAgcmFuZ2VGaWxsOiBpblJhbmdlLFxuICAgICAgcmFuZ2VMZWZ0Q2FwOiBmYWxzZSxcbiAgICAgIHJhbmdlUmlnaHRDYXA6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QW5jaG9yTW9udGgoKTogRGF0ZSB7XG4gICAgbGV0IGNhbmRpZGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX21vbnRoKSB7XG4gICAgICBjYW5kaWRhdGUgPSB0aGlzLmNsb25lRGF0ZSh0aGlzLl9tb250aCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3NpbmdsZScgJiYgdGhpcy5fdmFsdWUpIHtcbiAgICAgIGNhbmRpZGF0ZSA9IHRoaXMuc3RhcnRPZk1vbnRoKHRoaXMuX3ZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucmVzb2x2ZWRWYXJpYW50ID09PSAncmFuZ2UnICYmIHRoaXMuX3JhbmdlVmFsdWU/LnN0YXJ0KSB7XG4gICAgICBjYW5kaWRhdGUgPSB0aGlzLnN0YXJ0T2ZNb250aCh0aGlzLl9yYW5nZVZhbHVlLnN0YXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FuZGlkYXRlID0gdGhpcy5zdGFydE9mTW9udGgobmV3IERhdGUoKSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWREYXRlKGNhbmRpZGF0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0T2ZNb250aChuZXcgRGF0ZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FuZGlkYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBbmNob3JNb250aChtb250aDogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLnN0YXJ0T2ZNb250aChtb250aCk7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWREYXRlKG5vcm1hbGl6ZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX21vbnRoID0gbm9ybWFsaXplZDtcbiAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQodGhpcy5jbG9uZURhdGUodGhpcy5fbW9udGgpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1Zpc2libGVNb250aFRvRGF0ZShkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5zdGFydE9mTW9udGgoZGF0ZSk7XG4gICAgaWYgKCF0aGlzLl9tb250aCB8fCAhdGhpcy5pc1NhbWVNb250aCh0aGlzLl9tb250aCwgbmV4dE1vbnRoKSkge1xuICAgICAgdGhpcy5fbW9udGggPSBuZXh0TW9udGg7XG4gICAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQodGhpcy5jbG9uZURhdGUobmV4dE1vbnRoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0Jsb2NrZWQoZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm1pbkRhdGUgJiYgdGhpcy5jb21wYXJlRGF0ZShkYXRlLCB0aGlzLm1pbkRhdGUpIDwgMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWF4RGF0ZSAmJiB0aGlzLmNvbXBhcmVEYXRlKGRhdGUsIHRoaXMubWF4RGF0ZSkgPiAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBibG9ja2VkU2V0ID0gbmV3IFNldCgodGhpcy5kaXNhYmxlZERhdGVzIHx8IFtdKS5tYXAoKGl0ZW0pID0+IHRoaXMuZGF0ZUtleShpdGVtKSkpO1xuICAgIGlmIChibG9ja2VkU2V0Lmhhcyh0aGlzLmRhdGVLZXkoZGF0ZSkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gISF0aGlzLmlzRGF0ZURpc2FibGVkPy4odGhpcy5jbG9uZURhdGUoZGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByYW5nZUNvbnRhaW5zQmxvY2tlZERhdGUoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGxldCBjdXJzb3IgPSB0aGlzLmNsb25lRGF0ZShzdGFydCk7XG5cbiAgICB3aGlsZSAodGhpcy5jb21wYXJlRGF0ZShjdXJzb3IsIGVuZCkgPD0gMCkge1xuICAgICAgaWYgKHRoaXMuaXNCbG9ja2VkKGN1cnNvcikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjdXJzb3IgPSB0aGlzLmFkZERheXMoY3Vyc29yLCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZURhdGUodmFsdWU6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkKTogRGF0ZSB8IG51bGwge1xuICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgfHwgTnVtYmVyLmlzTmFOKHZhbHVlLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZS5nZXRGdWxsWWVhcigpLCB2YWx1ZS5nZXRNb250aCgpLCB2YWx1ZS5nZXREYXRlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZURhdGUoZGF0ZTogRGF0ZSk6IERhdGUge1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkRGF0ZShkYXRlOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGRhdGUgaXMgRGF0ZSB7XG4gICAgcmV0dXJuICEhZGF0ZSAmJiBkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRPZk1vbnRoKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmRPZk1vbnRoKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCkgKyAxLCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRPZldlZWsoZGF0ZTogRGF0ZSk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmFkZERheXMoZGF0ZSwgLWRhdGUuZ2V0RGF5KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmRPZldlZWsoZGF0ZTogRGF0ZSk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmFkZERheXMoZGF0ZSwgNiAtIGRhdGUuZ2V0RGF5KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNb250aHMoZGF0ZTogRGF0ZSwgbW9udGhzOiBudW1iZXIpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCkgKyBtb250aHMsIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREYXlzKGRhdGU6IERhdGUsIGRheXM6IG51bWJlcik6IERhdGUge1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkgKyBkYXlzKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZURhdGUoYTogRGF0ZSwgYjogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVZhbHVlKGEpIC0gdGhpcy5kYXRlVmFsdWUoYik7XG4gIH1cblxuICBwcml2YXRlIGRhdGVWYWx1ZShkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKSAvIERBWV9NUztcbiAgfVxuXG4gIHByaXZhdGUgaXNTYW1lRGF5KGE6IERhdGUsIGI6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb21wYXJlRGF0ZShhLCBiKSA9PT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgaXNTYW1lTW9udGgoYTogRGF0ZSwgYjogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhLmdldEZ1bGxZZWFyKCkgPT09IGIuZ2V0RnVsbFllYXIoKSAmJiBhLmdldE1vbnRoKCkgPT09IGIuZ2V0TW9udGgoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGF0ZUtleShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCB5ID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIGNvbnN0IG0gPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBkID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBgJHt5fS0ke219LSR7ZH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRNb250aFNob3J0KGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbW9udGg6ICdzaG9ydCcgfSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE1vbnRoWWVhcihkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnbG9uZycsIHllYXI6ICdudW1lcmljJyB9KTtcbiAgfVxufVxuIiwiPGRpdiBbbmdDbGFzc109XCJyb290Q2xhc3Nlc1wiIFtuZ1N0eWxlXT1cInJvb3RTdHlsZVwiPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBtb250aCBvZiB2aXNpYmxlTW9udGhzOyBsZXQgbW9udGhJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIiBbbmdDbGFzc109XCJtb250aFBhbmVsQ2xhc3Nlcyhtb250aEluZGV4KVwiPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwiaGVhZGVyQ2xhc3Nlcyhtb250aClcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJtb250aC5zaG93UHJldkJ1dHRvbjsgZWxzZSBwcmV2UGxhY2Vob2xkZXJcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW25nQ2xhc3NdPVwibmF2QnV0dG9uQ2xhc3NlcygpXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIlByZXZpb3VzIG1vbnRoXCJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9QcmV2aW91c01vbnRoKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgPlxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBjbGFzcz1cImgtNCB3LTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICA8cGF0aCBkPVwibTE1IDE4LTYtNiA2LTZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctdGVtcGxhdGUgI3ByZXZQbGFjZWhvbGRlcj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJuYXZQbGFjZWhvbGRlckNsYXNzZXMoKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vbnRoLnRpdGxlU3R5bGUgPT09ICdkcm9wZG93bnMnOyBlbHNlIHBsYWluVGl0bGVcIj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJkcm9wZG93bldyYXBDbGFzc2VzKClcIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImRyb3Bkb3duQ2xhc3Nlcygndy1bNzJweF0nKVwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJkcm9wZG93blNlbGVjdENsYXNzZXMoKVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImRyb3Bkb3duU2VsZWN0U3R5bGVcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2luZ2xlSGVhZGVyTW9udGhcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTW9udGhcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2luZ2xlTW9udGhDaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1vbnRoT3B0aW9uIG9mIG1vbnRoT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm1vbnRoT3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwibW9udGhPcHRpb24udmFsdWUgPT09IHNpbmdsZUhlYWRlck1vbnRoXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IG1vbnRoT3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBjbGFzcz1cImgtMyB3LTMgdGV4dC1mb3JlZ3JvdW5kXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJtNiA5IDYgNiA2LTZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImRyb3Bkb3duQ2xhc3Nlcygndy1bODJweF0nKVwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJkcm9wZG93blNlbGVjdENsYXNzZXMoKVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImRyb3Bkb3duU2VsZWN0U3R5bGVcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2luZ2xlSGVhZGVyWWVhclwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJZZWFyXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNpbmdsZVllYXJDaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHllYXIgb2YgeWVhck9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ5ZWFyXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwieWVhciA9PT0gc2luZ2xlSGVhZGVyWWVhclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB5ZWFyIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBjbGFzcz1cImgtMyB3LTMgdGV4dC1mb3JlZ3JvdW5kXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJtNiA5IDYgNiA2LTZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNwbGFpblRpdGxlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtaW4tdy0wIGZsZXgtMSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cIm0tMCB0ZXh0LWZvcmVncm91bmQgdGV4dC1jZW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSBsZWFkaW5nLTVcIj5cbiAgICAgICAgICAgIHt7IG1vbnRoLnRpdGxlIH19XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJtb250aC5zaG93TmV4dEJ1dHRvbjsgZWxzZSBuZXh0UGxhY2Vob2xkZXJcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW25nQ2xhc3NdPVwibmF2QnV0dG9uQ2xhc3NlcygpXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIk5leHQgbW9udGhcIlxuICAgICAgICAoY2xpY2spPVwiZ29Ub05leHRNb250aCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICAgID5cbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgPHBhdGggZD1cIm05IDE4IDYtNi02LTZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctdGVtcGxhdGUgI25leHRQbGFjZWhvbGRlcj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJuYXZQbGFjZWhvbGRlckNsYXNzZXMoKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgW25nQ2xhc3NdPVwiY2FsZW5kYXJHcmlkV3JhcENsYXNzZXMoKVwiPlxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ3ZWVrZGF5Um93Q2xhc3NlcygpXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrZGF5czsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgW25nQ2xhc3NdPVwid2Vla2RheUNlbGxDbGFzc2VzKClcIj5cbiAgICAgICAgICA8c3Bhbj57eyBkYXkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHdlZWsgb2YgbW9udGgud2Vla3M7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiIFtuZ0NsYXNzXT1cIndlZWtSb3dDbGFzc2VzKClcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2VsbCBvZiB3ZWVrOyB0cmFja0J5OiB0cmFja0J5RGF0ZVwiIFtuZ0NsYXNzXT1cImRheUNlbGxDbGFzc2VzKGNlbGwpXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJkYXlCdXR0b25DbGFzc2VzKGNlbGwpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImNlbGwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJjZWxsLmRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImNlbGwuZGF0ZSB8IGRhdGUgOiAneXl5eS1NTS1kZCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGF0ZVByZXNzZWQoY2VsbClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImRheUxhYmVsQ2xhc3NlcyhjZWxsKVwiPnt7IGNlbGwubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
507
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBZ0NuSCxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFPbkMsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUpsQyxXQUFNLEdBQWdCLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUE0QixJQUFJLENBQUM7UUFDNUMsV0FBTSxHQUFnQixJQUFJLENBQUM7UUFJMUIsWUFBTyxHQUFnQyxRQUFRLENBQUM7UUFDaEQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLFlBQU8sR0FBZ0IsSUFBSSxDQUFDO1FBQzVCLFlBQU8sR0FBZ0IsSUFBSSxDQUFDO1FBQzVCLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQzlCLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQzlCLG1CQUFjLEdBQXFDLElBQUksQ0FBQztRQUN4RCxzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDekIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVoQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFDOUMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFDL0QsZ0JBQVcsR0FBRyxJQUFJ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QUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVU7UUFDMUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFVLEVBQUUsTUFBYztRQUMxQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBVSxFQUFFLElBQVk7UUFDdEMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxTQUFTLENBQUMsSUFBVTtRQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDaEYsQ0FBQztJQUVPLFNBQVMsQ0FBQyxDQUFPLEVBQUUsQ0FBTztRQUNoQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ2xDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlFLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBVTtRQUN4QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0IsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFVO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU8sZUFBZSxDQUFDLElBQVU7UUFDaEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQzs7aUhBM2lCVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixpaUJDdkNqQyw4eEpBa0hBOzJGRDNFYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsY0FBYyxtQkFFUCx1QkFBdUIsQ0FBQyxNQUFNO3dHQVN0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBR0gsS0FBSztzQkFEUixLQUFLO2dCQVNGLFVBQVU7c0JBRGIsS0FBSztnQkFjRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIFBkbUNhbGVuZGFyVmFyaWFudCA9ICdzaW5nbGUnIHwgJ3JhbmdlJztcblxuZXhwb3J0IGludGVyZmFjZSBQZG1DYWxlbmRhclJhbmdlIHtcbiAgc3RhcnQ6IERhdGUgfCBudWxsO1xuICBlbmQ6IERhdGUgfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgUGRtQ2FsZW5kYXJDZWxsIHtcbiAgZGF0ZTogRGF0ZTtcbiAgbGFiZWw6IG51bWJlcjtcbiAgbXV0ZWQ6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgaW5SYW5nZTogYm9vbGVhbjtcbiAgcmFuZ2VGaWxsOiBib29sZWFuO1xuICByYW5nZUxlZnRDYXA6IGJvb2xlYW47XG4gIHJhbmdlUmlnaHRDYXA6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQZG1DYWxlbmRhck1vbnRoVmlldyB7XG4gIGRhdGU6IERhdGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRpdGxlU3R5bGU6ICdkcm9wZG93bnMnIHwgJ3BsYWluJztcbiAgZHJvcGRvd25Nb250aD86IHN0cmluZztcbiAgZHJvcGRvd25ZZWFyPzogc3RyaW5nO1xuICBzaG93UHJldkJ1dHRvbjogYm9vbGVhbjtcbiAgc2hvd05leHRCdXR0b246IGJvb2xlYW47XG4gIHdlZWtzOiByZWFkb25seSAocmVhZG9ubHkgUGRtQ2FsZW5kYXJDZWxsW10pW107XG59XG5cbmNvbnN0IERBWV9NUyA9IDI0ICogNjAgKiA2MCAqIDEwMDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBkbUNhbGVuZGFyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfdmFsdWU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfcmFuZ2VWYWx1ZTogUGRtQ2FsZW5kYXJSYW5nZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9tb250aDogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBASW5wdXQoKSB2YXJpYW50OiBQZG1DYWxlbmRhclZhcmlhbnQgfCBzdHJpbmcgPSAnc2luZ2xlJztcbiAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkRGF0ZXM6IERhdGVbXSA9IFtdO1xuICBASW5wdXQoKSBtaW5EYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1heERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbWluWWVhcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1heFllYXI6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBpc0RhdGVEaXNhYmxlZDogKChkYXRlOiBEYXRlKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBhbGxvd1NhbWVEYXlSYW5nZSA9IHRydWU7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIHJhbmdlVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgbW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBPdXRwdXQoKSBkYXRlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBPdXRwdXQoKSBkaXNhYmxlZERhdGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWUpO1xuICB9XG4gIGdldCB2YWx1ZSgpOiBEYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJhbmdlVmFsdWUodmFsdWU6IFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsKSB7XG4gICAgdGhpcy5fcmFuZ2VWYWx1ZSA9IHZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgICBzdGFydDogdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlLnN0YXJ0KSxcbiAgICAgICAgICBlbmQ6IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZS5lbmQpXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcbiAgfVxuICBnZXQgcmFuZ2VWYWx1ZSgpOiBQZG1DYWxlbmRhclJhbmdlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlVmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbW9udGgodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fbW9udGggPSB2YWx1ZSA/IHRoaXMuc3RhcnRPZk1vbnRoKHZhbHVlKSA6IG51bGw7XG4gIH1cbiAgZ2V0IG1vbnRoKCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbW9udGg7XG4gIH1cblxuICByZWFkb25seSB3ZWVrZGF5cyA9IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSBhcyBjb25zdDtcbiAgcmVhZG9ubHkgbW9udGhPcHRpb25zID0gW1xuICAgIHsgdmFsdWU6IDAsIGxhYmVsOiAnSmFuJyB9LFxuICAgIHsgdmFsdWU6IDEsIGxhYmVsOiAnRmViJyB9LFxuICAgIHsgdmFsdWU6IDIsIGxhYmVsOiAnTWFyJyB9LFxuICAgIHsgdmFsdWU6IDMsIGxhYmVsOiAnQXByJyB9LFxuICAgIHsgdmFsdWU6IDQsIGxhYmVsOiAnTWF5JyB9LFxuICAgIHsgdmFsdWU6IDUsIGxhYmVsOiAnSnVuJyB9LFxuICAgIHsgdmFsdWU6IDYsIGxhYmVsOiAnSnVsJyB9LFxuICAgIHsgdmFsdWU6IDcsIGxhYmVsOiAnQXVnJyB9LFxuICAgIHsgdmFsdWU6IDgsIGxhYmVsOiAnU2VwJyB9LFxuICAgIHsgdmFsdWU6IDksIGxhYmVsOiAnT2N0JyB9LFxuICAgIHsgdmFsdWU6IDEwLCBsYWJlbDogJ05vdicgfSxcbiAgICB7IHZhbHVlOiAxMSwgbGFiZWw6ICdEZWMnIH1cbiAgXSBhcyBjb25zdDtcblxuICBnZXQgcmVzb2x2ZWRWYXJpYW50KCk6IFBkbUNhbGVuZGFyVmFyaWFudCB7XG4gICAgcmV0dXJuIHRoaXMudmFyaWFudCA9PT0gJ3JhbmdlJyA/ICdyYW5nZScgOiAnc2luZ2xlJztcbiAgfVxuXG4gIGdldCB2aXNpYmxlTW9udGhzKCk6IHJlYWRvbmx5IFBkbUNhbGVuZGFyTW9udGhWaWV3W10ge1xuICAgIGNvbnN0IGJhc2VNb250aCA9IHRoaXMuZ2V0QW5jaG9yTW9udGgoKTtcblxuICAgIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRlOiBiYXNlTW9udGgsXG4gICAgICAgICAgdGl0bGU6IHRoaXMuZm9ybWF0TW9udGhZZWFyKGJhc2VNb250aCksXG4gICAgICAgICAgdGl0bGVTdHlsZTogJ2Ryb3Bkb3ducycsXG4gICAgICAgICAgZHJvcGRvd25Nb250aDogdGhpcy5mb3JtYXRNb250aFNob3J0KGJhc2VNb250aCksXG4gICAgICAgICAgZHJvcGRvd25ZZWFyOiBTdHJpbmcoYmFzZU1vbnRoLmdldEZ1bGxZZWFyKCkpLFxuICAgICAgICAgIHNob3dQcmV2QnV0dG9uOiB0cnVlLFxuICAgICAgICAgIHNob3dOZXh0QnV0dG9uOiB0cnVlLFxuICAgICAgICAgIHdlZWtzOiB0aGlzLmJ1aWxkTW9udGhXZWVrcyhiYXNlTW9udGgsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuYWRkTW9udGhzKGJhc2VNb250aCwgMSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZGF0ZTogYmFzZU1vbnRoLFxuICAgICAgICB0aXRsZTogdGhpcy5mb3JtYXRNb250aFllYXIoYmFzZU1vbnRoKSxcbiAgICAgICAgdGl0bGVTdHlsZTogJ3BsYWluJyxcbiAgICAgICAgc2hvd1ByZXZCdXR0b246IHRydWUsXG4gICAgICAgIHNob3dOZXh0QnV0dG9uOiBmYWxzZSxcbiAgICAgICAgd2Vla3M6IHRoaXMuYnVpbGRNb250aFdlZWtzKGJhc2VNb250aCwgdHJ1ZSlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRhdGU6IG5leHRNb250aCxcbiAgICAgICAgdGl0bGU6IHRoaXMuZm9ybWF0TW9udGhZZWFyKG5leHRNb250aCksXG4gICAgICAgIHRpdGxlU3R5bGU6ICdwbGFpbicsXG4gICAgICAgIHNob3dQcmV2QnV0dG9uOiBmYWxzZSxcbiAgICAgICAgc2hvd05leHRCdXR0b246IHRydWUsXG4gICAgICAgIHdlZWtzOiB0aGlzLmJ1aWxkTW9udGhXZWVrcyhuZXh0TW9udGgsIHRydWUpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGdldCBzaW5nbGVIZWFkZXJNb250aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldEFuY2hvck1vbnRoKCkuZ2V0TW9udGgoKTtcbiAgfVxuXG4gIGdldCBzaW5nbGVIZWFkZXJZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QW5jaG9yTW9udGgoKS5nZXRGdWxsWWVhcigpO1xuICB9XG5cbiAgZ2V0IHllYXJPcHRpb25zKCk6IHJlYWRvbmx5IG51bWJlcltdIHtcbiAgICBjb25zdCBiYXNlWWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBzZWxlY3RlZFllYXIgPSB0aGlzLnNpbmdsZUhlYWRlclllYXI7XG4gICAgbGV0IG1pblllYXIgPSB0aGlzLm1pblllYXIgPz8gKHRoaXMubWluRGF0ZSA/IHRoaXMubWluRGF0ZS5nZXRGdWxsWWVhcigpIDogYmFzZVllYXIgLSAxMDApO1xuICAgIGxldCBtYXhZZWFyID0gdGhpcy5tYXhZZWFyID8/ICh0aGlzLm1heERhdGUgPyB0aGlzLm1heERhdGUuZ2V0RnVsbFllYXIoKSA6IGJhc2VZZWFyICsgMTApO1xuICAgIGNvbnN0IHllYXJzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaWYgKHNlbGVjdGVkWWVhciA8IG1pblllYXIpIHtcbiAgICAgIG1pblllYXIgPSBzZWxlY3RlZFllYXI7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGVkWWVhciA+IG1heFllYXIpIHtcbiAgICAgIG1heFllYXIgPSBzZWxlY3RlZFllYXI7XG4gICAgfVxuXG4gICAgaWYgKG1pblllYXIgPiBtYXhZZWFyKSB7XG4gICAgICBjb25zdCBuZXh0TWluID0gbWF4WWVhcjtcbiAgICAgIG1heFllYXIgPSBtaW5ZZWFyO1xuICAgICAgbWluWWVhciA9IG5leHRNaW47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgeWVhciA9IG1pblllYXI7IHllYXIgPD0gbWF4WWVhcjsgeWVhciArPSAxKSB7XG4gICAgICB5ZWFycy5wdXNoKHllYXIpO1xuICAgIH1cblxuICAgIHJldHVybiB5ZWFycztcbiAgfVxuXG4gIGdldCByb290Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdib3JkZXItYm9yZGVyIGJnLWJhY2tncm91bmQgcmVsYXRpdmUgcm91bmRlZC1bMTBweF0gYm9yZGVyIHAtMyBzaGFkb3ctc20nLFxuICAgICAgdGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdyYW5nZSdcbiAgICAgICAgPyAnaW5saW5lLWZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1jZW50ZXIgZ2FwLTQgc2hyaW5rLTAgZ3Jvdy0wIGJhc2lzLWF1dG8nXG4gICAgICAgIDogJ2lubGluZS1mbGV4IGZsZXgtY29sIGdhcC00IHNocmluay0wIGdyb3ctMCBiYXNpcy1hdXRvJyxcbiAgICAgIHRoaXMuY2xhc3NOYW1lXG4gICAgXTtcbiAgfVxuXG4gIGdldCByb290U3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyA/ICc0ODhweCcgOiAnMjUwcHgnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoLFxuICAgICAgbWluV2lkdGg6IHdpZHRoLFxuICAgICAgbWF4V2lkdGg6IHdpZHRoLFxuICAgICAgbWluSGVpZ2h0OiAnMjkzcHgnLFxuICAgICAgZmxleDogJzAgMCBhdXRvJyxcbiAgICAgIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnXG4gICAgfTtcbiAgfVxuXG4gIG1vbnRoUGFuZWxDbGFzc2VzKF9pbmRleDogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggZmxleC1jb2wgaXRlbXMtc3RhcnQnLCB0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyA/ICd3LVsyMjRweF0gZ2FwLTQnIDogJ3ctZnVsbCBnYXAtMCddO1xuICB9XG5cbiAgaGVhZGVyQ2xhc3Nlcyhtb250aDogUGRtQ2FsZW5kYXJNb250aFZpZXcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbicsIG1vbnRoLnRpdGxlU3R5bGUgPT09ICdkcm9wZG93bnMnID8gJycgOiAnbWItNCddO1xuICB9XG5cbiAgbmF2QnV0dG9uQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdmbGV4IGgtOCB3LTggYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHAtMCB0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgJ2Rpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS00MCdcbiAgICBdO1xuICB9XG5cbiAgbmF2UGxhY2Vob2xkZXJDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydoLTcgdy03IHNocmluay0wJ107XG4gIH1cblxuICBkcm9wZG93bldyYXBDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydmbGV4IHctNDAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yJ107XG4gIH1cblxuICBkcm9wZG93bkNsYXNzZXMod2lkdGhDbGFzczogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggaC04IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBweC0xJywgd2lkdGhDbGFzc107XG4gIH1cblxuICBkcm9wZG93blNlbGVjdENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAndGV4dC1mb3JlZ3JvdW5kIGgtZnVsbCBiZy10cmFuc3BhcmVudCB0ZXh0LXNtIGZvbnQtbWVkaXVtIGxlYWRpbmctNScsXG4gICAgICAnYXBwZWFyYW5jZS1ub25lIGJvcmRlci0wIG91dGxpbmUtbm9uZSByaW5nLTAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCB0ZXh0LWNlbnRlciBjdXJzb3ItcG9pbnRlcidcbiAgICBdO1xuICB9XG5cbiAgZ2V0IGRyb3Bkb3duU2VsZWN0U3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAgIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAgIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICBib3JkZXI6ICcwJyxcbiAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgb3V0bGluZTogJzAnLFxuICAgICAgcGFkZGluZzogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9O1xuICB9XG5cbiAgY2FsZW5kYXJHcmlkV3JhcENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggdy1mdWxsIGZsZXgtY29sIGl0ZW1zLXN0YXJ0J107XG4gIH1cblxuICB3ZWVrZGF5Um93Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyJ107XG4gIH1cblxuICB3ZWVrZGF5Q2VsbENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBmbGV4IGgtWzIxcHhdIHctOCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCB0ZXh0LXhzIGxlYWRpbmctNCddO1xuICB9XG5cbiAgd2Vla1Jvd0NsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggdy1mdWxsIGl0ZW1zLXN0YXJ0IHB0LTInXTtcbiAgfVxuXG4gIGRheUNlbGxDbGFzc2VzKGNlbGw6IFBkbUNhbGVuZGFyQ2VsbCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3JlbGF0aXZlIGZsZXggaC04IHctOCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgY2VsbC5yYW5nZUZpbGwgPyAnYmctYWNjZW50JyA6ICcnLFxuICAgICAgY2VsbC5yYW5nZUxlZnRDYXAgPyAncm91bmRlZC1sLW1kJyA6ICcnLFxuICAgICAgY2VsbC5yYW5nZVJpZ2h0Q2FwID8gJ3JvdW5kZWQtci1tZCcgOiAnJ1xuICAgIF07XG4gIH1cblxuICBkYXlCdXR0b25DbGFzc2VzKGNlbGw6IFBkbUNhbGVuZGFyQ2VsbCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3JlbGF0aXZlIHotMTAgZmxleCBoLTggdy04IGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItMCBwLTAgdGV4dC1zbSBsZWFkaW5nLTUnLFxuICAgICAgY2VsbC5zZWxlY3RlZFxuICAgICAgICA/ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kJ1xuICAgICAgICA6IGNlbGwucmFuZ2VGaWxsXG4gICAgICAgICAgPyAnYmctdHJhbnNwYXJlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCdcbiAgICAgICAgICA6ICdiZy10cmFuc3BhcmVudCB0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgY2VsbC5tdXRlZCAmJiAhY2VsbC5yYW5nZUZpbGwgPyAnb3BhY2l0eS01MCcgOiAnJyxcbiAgICAgIGNlbGwuZGlzYWJsZWQgPyAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNDAnIDogJycsXG4gICAgICAhY2VsbC5kaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSAmJiAhY2VsbC5zZWxlY3RlZCA/ICdob3ZlcjpiZy1hY2NlbnQvNzAnIDogJydcbiAgICBdO1xuICB9XG5cbiAgZGF5TGFiZWxDbGFzc2VzKF9jZWxsOiBQZG1DYWxlbmRhckNlbGwpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZm9udC1ub3JtYWwnXTtcbiAgfVxuXG4gIHRyYWNrQnlJbmRleCA9IChpbmRleDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5RGF0ZSA9IChfaW5kZXg6IG51bWJlciwgY2VsbDogUGRtQ2FsZW5kYXJDZWxsKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRlS2V5KGNlbGwuZGF0ZSk7XG4gIH1cblxuICBnb1RvUHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEFuY2hvck1vbnRoKHRoaXMuYWRkTW9udGhzKHRoaXMuZ2V0QW5jaG9yTW9udGgoKSwgLTEpKTtcbiAgfVxuXG4gIGdvVG9OZXh0TW9udGgoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRBbmNob3JNb250aCh0aGlzLmFkZE1vbnRocyh0aGlzLmdldEFuY2hvck1vbnRoKCksIDEpKTtcbiAgfVxuXG4gIG9uU2luZ2xlTW9udGhDaGFuZ2UobW9udGhWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbW9udGggPSBOdW1iZXIobW9udGhWYWx1ZSk7XG4gICAgaWYgKE51bWJlci5pc05hTihtb250aCkgfHwgbW9udGggPCAwIHx8IG1vbnRoID4gMTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmdldEFuY2hvck1vbnRoKCk7XG4gICAgdGhpcy5zZXRBbmNob3JNb250aChuZXcgRGF0ZShhbmNob3IuZ2V0RnVsbFllYXIoKSwgbW9udGgsIDEpKTtcbiAgfVxuXG4gIG9uU2luZ2xlWWVhckNoYW5nZSh5ZWFyVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoeWVhclZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHllYXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5nZXRBbmNob3JNb250aCgpO1xuICAgIHRoaXMuc2V0QW5jaG9yTW9udGgobmV3IERhdGUoeWVhciwgYW5jaG9yLmdldE1vbnRoKCksIDEpKTtcbiAgfVxuXG4gIG9uRGF0ZVByZXNzZWQoY2VsbDogUGRtQ2FsZW5kYXJDZWxsKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuY2xvbmVEYXRlKGNlbGwuZGF0ZSk7XG5cbiAgICBpZiAoY2VsbC5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5kaXNhYmxlZERhdGVDbGljay5lbWl0KGRhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRlQ2xpY2suZW1pdChkYXRlKTtcblxuICAgIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gZGF0ZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmNsb25lRGF0ZShkYXRlKSk7XG4gICAgICB0aGlzLnN5bmNWaXNpYmxlTW9udGhUb0RhdGUoZGF0ZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZVJhbmdlU2VsZWN0aW9uKGRhdGUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSYW5nZVNlbGVjdGlvbihkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuX3JhbmdlVmFsdWU7XG4gICAgY29uc3QgY3VycmVudFN0YXJ0ID0gY3VycmVudD8uc3RhcnQgPyB0aGlzLmNsb25lRGF0ZShjdXJyZW50LnN0YXJ0KSA6IG51bGw7XG4gICAgY29uc3QgY3VycmVudEVuZCA9IGN1cnJlbnQ/LmVuZCA/IHRoaXMuY2xvbmVEYXRlKGN1cnJlbnQuZW5kKSA6IG51bGw7XG5cbiAgICBpZiAoIWN1cnJlbnRTdGFydCB8fCAoY3VycmVudFN0YXJ0ICYmIGN1cnJlbnRFbmQpKSB7XG4gICAgICB0aGlzLl9yYW5nZVZhbHVlID0geyBzdGFydDogZGF0ZSwgZW5kOiBudWxsIH07XG4gICAgICB0aGlzLnJhbmdlVmFsdWVDaGFuZ2UuZW1pdCh7IHN0YXJ0OiB0aGlzLmNsb25lRGF0ZShkYXRlKSwgZW5kOiBudWxsIH0pO1xuICAgICAgdGhpcy5zeW5jVmlzaWJsZU1vbnRoVG9EYXRlKGRhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FtZURheShjdXJyZW50U3RhcnQsIGRhdGUpICYmICF0aGlzLmFsbG93U2FtZURheVJhbmdlKSB7XG4gICAgICB0aGlzLl9yYW5nZVZhbHVlID0geyBzdGFydDogZGF0ZSwgZW5kOiBudWxsIH07XG4gICAgICB0aGlzLnJhbmdlVmFsdWVDaGFuZ2UuZW1pdCh7IHN0YXJ0OiB0aGlzLmNsb25lRGF0ZShkYXRlKSwgZW5kOiBudWxsIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jb21wYXJlRGF0ZShkYXRlLCBjdXJyZW50U3RhcnQpIDwgMCA/IGRhdGUgOiBjdXJyZW50U3RhcnQ7XG4gICAgY29uc3QgZW5kID0gdGhpcy5jb21wYXJlRGF0ZShkYXRlLCBjdXJyZW50U3RhcnQpIDwgMCA/IGN1cnJlbnRTdGFydCA6IGRhdGU7XG5cbiAgICBpZiAodGhpcy5yYW5nZUNvbnRhaW5zQmxvY2tlZERhdGUoc3RhcnQsIGVuZCkpIHtcbiAgICAgIHRoaXMuZGlzYWJsZWREYXRlQ2xpY2suZW1pdCh0aGlzLmNsb25lRGF0ZShkYXRlKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmFuZ2VWYWx1ZSA9IHsgc3RhcnQsIGVuZCB9O1xuICAgIHRoaXMucmFuZ2VWYWx1ZUNoYW5nZS5lbWl0KHsgc3RhcnQ6IHRoaXMuY2xvbmVEYXRlKHN0YXJ0KSwgZW5kOiB0aGlzLmNsb25lRGF0ZShlbmQpIH0pO1xuICAgIHRoaXMuc3luY1Zpc2libGVNb250aFRvRGF0ZShzdGFydCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTW9udGhXZWVrcyhtb250aDogRGF0ZSwgaW5jbHVkZVJhbmdlOiBib29sZWFuKTogcmVhZG9ubHkgKHJlYWRvbmx5IFBkbUNhbGVuZGFyQ2VsbFtdKVtdIHtcbiAgICBjb25zdCBmaXJzdE9mTW9udGggPSB0aGlzLnN0YXJ0T2ZNb250aChtb250aCk7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnN0YXJ0T2ZXZWVrKGZpcnN0T2ZNb250aCk7XG4gICAgY29uc3QgZW5kID0gdGhpcy5lbmRPZldlZWsodGhpcy5lbmRPZk1vbnRoKGZpcnN0T2ZNb250aCkpO1xuICAgIGNvbnN0IHdlZWtzOiBQZG1DYWxlbmRhckNlbGxbXVtdID0gW107XG5cbiAgICBsZXQgY3Vyc29yID0gdGhpcy5jbG9uZURhdGUoc3RhcnQpO1xuICAgIHdoaWxlICh0aGlzLmNvbXBhcmVEYXRlKGN1cnNvciwgZW5kKSA8PSAwKSB7XG4gICAgICBjb25zdCByb3c6IFBkbUNhbGVuZGFyQ2VsbFtdID0gW107XG5cbiAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDc7IGNvbCArPSAxKSB7XG4gICAgICAgIHJvdy5wdXNoKHRoaXMuYnVpbGRDZWxsKGN1cnNvciwgbW9udGgsIGluY2x1ZGVSYW5nZSkpO1xuICAgICAgICBjdXJzb3IgPSB0aGlzLmFkZERheXMoY3Vyc29yLCAxKTtcbiAgICAgIH1cblxuICAgICAgd2Vla3MucHVzaChyb3cpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHdlZWtzKSB7XG4gICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCByb3cubGVuZ3RoOyBjb2wgKz0gMSkge1xuICAgICAgICBjb25zdCBjZWxsID0gcm93W2NvbF07XG4gICAgICAgIGlmICghY2VsbC5pblJhbmdlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsZWZ0SW5Sb3cgPSBjb2wgPiAwID8gcm93W2NvbCAtIDFdLmluUmFuZ2UgOiBmYWxzZTtcbiAgICAgICAgY29uc3QgcmlnaHRJblJvdyA9IGNvbCA8IHJvdy5sZW5ndGggLSAxID8gcm93W2NvbCArIDFdLmluUmFuZ2UgOiBmYWxzZTtcblxuICAgICAgICBjZWxsLnJhbmdlTGVmdENhcCA9ICFsZWZ0SW5Sb3c7XG4gICAgICAgIGNlbGwucmFuZ2VSaWdodENhcCA9ICFyaWdodEluUm93O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB3ZWVrcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDZWxsKGRhdGU6IERhdGUsIHZpc2libGVNb250aDogRGF0ZSwgaW5jbHVkZVJhbmdlOiBib29sZWFuKTogUGRtQ2FsZW5kYXJDZWxsIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5jbG9uZURhdGUoZGF0ZSk7XG4gICAgY29uc3QgaW5DdXJyZW50TW9udGggPSBub3JtYWxpemVkLmdldE1vbnRoKCkgPT09IHZpc2libGVNb250aC5nZXRNb250aCgpICYmIG5vcm1hbGl6ZWQuZ2V0RnVsbFllYXIoKSA9PT0gdmlzaWJsZU1vbnRoLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzQmxvY2tlZChub3JtYWxpemVkKTtcblxuICAgIGNvbnN0IHNlbGVjdGVkU2luZ2xlID0gdGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdzaW5nbGUnICYmICEhdGhpcy5fdmFsdWUgJiYgdGhpcy5pc1NhbWVEYXkobm9ybWFsaXplZCwgdGhpcy5fdmFsdWUpO1xuICAgIGNvbnN0IHJhbmdlU3RhcnQgPSBpbmNsdWRlUmFuZ2UgJiYgISF0aGlzLl9yYW5nZVZhbHVlPy5zdGFydCAmJiB0aGlzLmlzU2FtZURheShub3JtYWxpemVkLCB0aGlzLl9yYW5nZVZhbHVlLnN0YXJ0KTtcbiAgICBjb25zdCByYW5nZUVuZCA9IGluY2x1ZGVSYW5nZSAmJiAhIXRoaXMuX3JhbmdlVmFsdWU/LmVuZCAmJiB0aGlzLmlzU2FtZURheShub3JtYWxpemVkLCB0aGlzLl9yYW5nZVZhbHVlLmVuZCk7XG4gICAgY29uc3QgaW5SYW5nZSA9XG4gICAgICBpbmNsdWRlUmFuZ2UgJiZcbiAgICAgICEhdGhpcy5fcmFuZ2VWYWx1ZT8uc3RhcnQgJiZcbiAgICAgICEhdGhpcy5fcmFuZ2VWYWx1ZT8uZW5kICYmXG4gICAgICB0aGlzLmNvbXBhcmVEYXRlKG5vcm1hbGl6ZWQsIHRoaXMuX3JhbmdlVmFsdWUuc3RhcnQpID49IDAgJiZcbiAgICAgIHRoaXMuY29tcGFyZURhdGUobm9ybWFsaXplZCwgdGhpcy5fcmFuZ2VWYWx1ZS5lbmQpIDw9IDA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZTogbm9ybWFsaXplZCxcbiAgICAgIGxhYmVsOiBub3JtYWxpemVkLmdldERhdGUoKSxcbiAgICAgIG11dGVkOiAhaW5DdXJyZW50TW9udGgsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZFNpbmdsZSB8fCByYW5nZVN0YXJ0IHx8IHJhbmdlRW5kLFxuICAgICAgaW5SYW5nZSxcbiAgICAgIHJhbmdlRmlsbDogaW5SYW5nZSxcbiAgICAgIHJhbmdlTGVmdENhcDogZmFsc2UsXG4gICAgICByYW5nZVJpZ2h0Q2FwOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEFuY2hvck1vbnRoKCk6IERhdGUge1xuICAgIGxldCBjYW5kaWRhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl9tb250aCkge1xuICAgICAgY2FuZGlkYXRlID0gdGhpcy5jbG9uZURhdGUodGhpcy5fbW9udGgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdzaW5nbGUnICYmIHRoaXMuX3ZhbHVlKSB7XG4gICAgICBjYW5kaWRhdGUgPSB0aGlzLnN0YXJ0T2ZNb250aCh0aGlzLl92YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyAmJiB0aGlzLl9yYW5nZVZhbHVlPy5zdGFydCkge1xuICAgICAgY2FuZGlkYXRlID0gdGhpcy5zdGFydE9mTW9udGgodGhpcy5fcmFuZ2VWYWx1ZS5zdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbmRpZGF0ZSA9IHRoaXMuc3RhcnRPZk1vbnRoKG5ldyBEYXRlKCkpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZShjYW5kaWRhdGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydE9mTW9udGgobmV3IERhdGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QW5jaG9yTW9udGgobW9udGg6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5zdGFydE9mTW9udGgobW9udGgpO1xuICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZShub3JtYWxpemVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9tb250aCA9IG5vcm1hbGl6ZWQ7XG4gICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKHRoaXMuX21vbnRoKSk7XG4gIH1cblxuICBwcml2YXRlIHN5bmNWaXNpYmxlTW9udGhUb0RhdGUoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuc3RhcnRPZk1vbnRoKGRhdGUpO1xuICAgIGlmICghdGhpcy5fbW9udGggfHwgIXRoaXMuaXNTYW1lTW9udGgodGhpcy5fbW9udGgsIG5leHRNb250aCkpIHtcbiAgICAgIHRoaXMuX21vbnRoID0gbmV4dE1vbnRoO1xuICAgICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKG5leHRNb250aCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNCbG9ja2VkKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5taW5EYXRlICYmIHRoaXMuY29tcGFyZURhdGUoZGF0ZSwgdGhpcy5taW5EYXRlKSA8IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1heERhdGUgJiYgdGhpcy5jb21wYXJlRGF0ZShkYXRlLCB0aGlzLm1heERhdGUpID4gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgYmxvY2tlZFNldCA9IG5ldyBTZXQoKHRoaXMuZGlzYWJsZWREYXRlcyB8fCBbXSkubWFwKChpdGVtKSA9PiB0aGlzLmRhdGVLZXkoaXRlbSkpKTtcbiAgICBpZiAoYmxvY2tlZFNldC5oYXModGhpcy5kYXRlS2V5KGRhdGUpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhdGhpcy5pc0RhdGVEaXNhYmxlZD8uKHRoaXMuY2xvbmVEYXRlKGRhdGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmFuZ2VDb250YWluc0Jsb2NrZWREYXRlKHN0YXJ0OiBEYXRlLCBlbmQ6IERhdGUpOiBib29sZWFuIHtcbiAgICBsZXQgY3Vyc29yID0gdGhpcy5jbG9uZURhdGUoc3RhcnQpO1xuXG4gICAgd2hpbGUgKHRoaXMuY29tcGFyZURhdGUoY3Vyc29yLCBlbmQpIDw9IDApIHtcbiAgICAgIGlmICh0aGlzLmlzQmxvY2tlZChjdXJzb3IpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY3Vyc29yID0gdGhpcy5hZGREYXlzKGN1cnNvciwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlKHZhbHVlOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHx8IE51bWJlci5pc05hTih2YWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUuZ2V0RnVsbFllYXIoKSwgdmFsdWUuZ2V0TW9udGgoKSwgdmFsdWUuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVEYXRlKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZERhdGUoZGF0ZTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBkYXRlIGlzIERhdGUge1xuICAgIHJldHVybiAhIWRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIU51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0T2ZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCAxKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5kT2ZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgMSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0T2ZXZWVrKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5hZGREYXlzKGRhdGUsIC1kYXRlLmdldERheSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5kT2ZXZWVrKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5hZGREYXlzKGRhdGUsIDYgLSBkYXRlLmdldERheSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTW9udGhzKGRhdGU6IERhdGUsIG1vbnRoczogbnVtYmVyKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgbW9udGhzLCAxKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGF5cyhkYXRlOiBEYXRlLCBkYXlzOiBudW1iZXIpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpICsgZGF5cyk7XG4gIH1cblxuICBwcml2YXRlIGNvbXBhcmVEYXRlKGE6IERhdGUsIGI6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGVWYWx1ZShhKSAtIHRoaXMuZGF0ZVZhbHVlKGIpO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRlVmFsdWUoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSkgLyBEQVlfTVM7XG4gIH1cblxuICBwcml2YXRlIGlzU2FtZURheShhOiBEYXRlLCBiOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGUoYSwgYikgPT09IDA7XG4gIH1cblxuICBwcml2YXRlIGlzU2FtZU1vbnRoKGE6IERhdGUsIGI6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYS5nZXRGdWxsWWVhcigpID09PSBiLmdldEZ1bGxZZWFyKCkgJiYgYS5nZXRNb250aCgpID09PSBiLmdldE1vbnRoKCk7XG4gIH1cblxuICBwcml2YXRlIGRhdGVLZXkoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgeSA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBtID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgZCA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICByZXR1cm4gYCR7eX0tJHttfS0ke2R9YDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TW9udGhTaG9ydChkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnc2hvcnQnIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRNb250aFllYXIoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ2xvbmcnLCB5ZWFyOiAnbnVtZXJpYycgfSk7XG4gIH1cbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwicm9vdENsYXNzZXNcIiBbbmdTdHlsZV09XCJyb290U3R5bGVcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgbW9udGggb2YgdmlzaWJsZU1vbnRoczsgbGV0IG1vbnRoSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgW25nQ2xhc3NdPVwibW9udGhQYW5lbENsYXNzZXMobW9udGhJbmRleClcIj5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cImhlYWRlckNsYXNzZXMobW9udGgpXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwibW9udGguc2hvd1ByZXZCdXR0b247IGVsc2UgcHJldlBsYWNlaG9sZGVyXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIm5hdkJ1dHRvbkNsYXNzZXMoKVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBtb250aFwiXG4gICAgICAgIChjbGljayk9XCJnb1RvUHJldmlvdXNNb250aCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICAgID5cbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgPHBhdGggZD1cIm0xNSAxOC02LTYgNi02XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLXRlbXBsYXRlICNwcmV2UGxhY2Vob2xkZXI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwibmF2UGxhY2Vob2xkZXJDbGFzc2VzKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb250aC50aXRsZVN0eWxlID09PSAnZHJvcGRvd25zJzsgZWxzZSBwbGFpblRpdGxlXCI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZHJvcGRvd25XcmFwQ2xhc3NlcygpXCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJkcm9wZG93bkNsYXNzZXMoJ3ctWzcycHhdJylcIj5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZHJvcGRvd25TZWxlY3RDbGFzc2VzKClcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJkcm9wZG93blNlbGVjdFN0eWxlXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNpbmdsZUhlYWRlck1vbnRoXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk1vbnRoXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNpbmdsZU1vbnRoQ2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtb250aE9wdGlvbiBvZiBtb250aE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJtb250aE9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIm1vbnRoT3B0aW9uLnZhbHVlID09PSBzaW5nbGVIZWFkZXJNb250aFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBtb250aE9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTMgdy0zIHRleHQtZm9yZWdyb3VuZFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwibTYgOSA2IDYgNi02XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJkcm9wZG93bkNsYXNzZXMoJ3ctWzgycHhdJylcIj5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZHJvcGRvd25TZWxlY3RDbGFzc2VzKClcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJkcm9wZG93blNlbGVjdFN0eWxlXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNpbmdsZUhlYWRlclllYXJcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiWWVhclwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TaW5nbGVZZWFyQ2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB5ZWFyIG9mIHllYXJPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwieWVhclwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cInllYXIgPT09IHNpbmdsZUhlYWRlclllYXJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgeWVhciB9fVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTMgdy0zIHRleHQtZm9yZWdyb3VuZFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwibTYgOSA2IDYgNi02XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhaW5UaXRsZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWluLXctMCBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJtLTAgdGV4dC1mb3JlZ3JvdW5kIHRleHQtY2VudGVyIHRleHQtc20gZm9udC1tZWRpdW0gbGVhZGluZy01XCI+XG4gICAgICAgICAgICB7eyBtb250aC50aXRsZSB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwibW9udGguc2hvd05leHRCdXR0b247IGVsc2UgbmV4dFBsYWNlaG9sZGVyXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIm5hdkJ1dHRvbkNsYXNzZXMoKVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJOZXh0IG1vbnRoXCJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9OZXh0TW9udGgoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiXG4gICAgICA+XG4gICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGNsYXNzPVwiaC00IHctNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJtOSAxOCA2LTYtNi02XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLXRlbXBsYXRlICNuZXh0UGxhY2Vob2xkZXI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwibmF2UGxhY2Vob2xkZXJDbGFzc2VzKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cImNhbGVuZGFyR3JpZFdyYXBDbGFzc2VzKClcIj5cbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwid2Vla2RheVJvd0NsYXNzZXMoKVwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla2RheXM7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiIFtuZ0NsYXNzXT1cIndlZWtkYXlDZWxsQ2xhc3NlcygpXCI+XG4gICAgICAgICAgPHNwYW4+e3sgZGF5IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB3ZWVrIG9mIG1vbnRoLndlZWtzOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIiBbbmdDbGFzc109XCJ3ZWVrUm93Q2xhc3NlcygpXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNlbGwgb2Ygd2VlazsgdHJhY2tCeTogdHJhY2tCeURhdGVcIiBbbmdDbGFzc109XCJkYXlDZWxsQ2xhc3NlcyhjZWxsKVwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGF5QnV0dG9uQ2xhc3NlcyhjZWxsKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJjZWxsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiY2VsbC5kaXNhYmxlZCB8fCByZWFkb25seVwiXG4gICAgICAgICAgICBbYXR0ci50aXRsZV09XCJjZWxsLmRhdGUgfCBkYXRlIDogJ3l5eXktTU0tZGQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkRhdGVQcmVzc2VkKGNlbGwpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJkYXlMYWJlbENsYXNzZXMoY2VsbClcIj57eyBjZWxsLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -3,18 +3,46 @@ import * as i0 from "@angular/core";
3
3
  import * as i1 from "@angular/common";
4
4
  import * as i2 from "../icon/icon.component";
5
5
  import * as i3 from "../select/select.component";
6
+ const coerceNumber = (value, fallback) => {
7
+ const next = Number(value);
8
+ return Number.isFinite(next) ? next : fallback;
9
+ };
6
10
  export class PdmPaginationComponent {
7
11
  constructor() {
8
- this.page = 1;
9
- this.pageCount = 1;
10
- this.maxVisible = 4;
12
+ this._page = 1;
13
+ this._pageCount = 1;
14
+ this._maxVisible = 4;
15
+ this._rowsPerPage = 10;
11
16
  this.className = '';
12
17
  this.rowsPerPageLabel = 'Rows per page';
13
- this.rowsPerPage = 10;
14
18
  this.rowsPerPageOptions = [10, 20, 30, 50];
15
19
  this.pageChange = new EventEmitter();
16
20
  this.rowsPerPageChange = new EventEmitter();
17
21
  }
22
+ get page() {
23
+ return this._page;
24
+ }
25
+ set page(value) {
26
+ this._page = coerceNumber(value, 1);
27
+ }
28
+ get pageCount() {
29
+ return this._pageCount;
30
+ }
31
+ set pageCount(value) {
32
+ this._pageCount = coerceNumber(value, 1);
33
+ }
34
+ get maxVisible() {
35
+ return this._maxVisible;
36
+ }
37
+ set maxVisible(value) {
38
+ this._maxVisible = coerceNumber(value, 4);
39
+ }
40
+ get rowsPerPage() {
41
+ return this._rowsPerPage;
42
+ }
43
+ set rowsPerPage(value) {
44
+ this._rowsPerPage = coerceNumber(value, 10);
45
+ }
18
46
  get rowsPerPageSelectOptions() {
19
47
  return this.rowsPerPageOptions.map((value) => ({
20
48
  label: String(value),
@@ -26,15 +54,40 @@ export class PdmPaginationComponent {
26
54
  }
27
55
  get visiblePages() {
28
56
  const total = Math.max(1, this.pageCount);
29
- if (total <= Math.max(1, this.maxVisible)) {
57
+ const maxVisible = Math.max(1, this.maxVisible);
58
+ if (total <= maxVisible) {
30
59
  return Array.from({ length: total }, (_, i) => i + 1);
31
60
  }
32
- return [1, 2, 'ellipsis', total];
61
+ const current = Math.min(Math.max(1, this.page), total);
62
+ const windowSize = Math.max(1, maxVisible - 1);
63
+ const startThreshold = Math.ceil(windowSize / 2);
64
+ const endThreshold = total - Math.floor(windowSize / 2);
65
+ const range = (start, end) => Array.from({ length: end - start + 1 }, (_, i) => start + i);
66
+ if (current <= startThreshold) {
67
+ const end = Math.min(windowSize, total - 1);
68
+ return [...range(1, end), 'ellipsis', total];
69
+ }
70
+ if (current >= endThreshold) {
71
+ const start = Math.max(1, total - windowSize);
72
+ const pages = range(start, total);
73
+ if (pages[0] === 1) {
74
+ return pages;
75
+ }
76
+ return [1, 'ellipsis', ...pages];
77
+ }
78
+ let start = current - Math.floor(windowSize / 2);
79
+ let end = start + windowSize - 1;
80
+ if (end >= total) {
81
+ end = total - 1;
82
+ start = end - windowSize + 1;
83
+ }
84
+ return [...range(start, end), 'ellipsis', total];
33
85
  }
34
86
  setPage(next) {
35
87
  if (next < 1 || next > this.pageCount || next === this.page) {
36
88
  return;
37
89
  }
90
+ this._page = next;
38
91
  this.pageChange.emit(next);
39
92
  }
40
93
  onRowsPerPageChangeValue(value) {
@@ -42,14 +95,15 @@ export class PdmPaginationComponent {
42
95
  if (!Number.isFinite(next) || next <= 0 || next === this.rowsPerPage) {
43
96
  return;
44
97
  }
98
+ this._rowsPerPage = next;
45
99
  this.rowsPerPageChange.emit(next);
46
100
  }
47
101
  }
48
102
  PdmPaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
49
- PdmPaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmPaginationComponent, selector: "pdm-pagination", inputs: { page: "page", pageCount: "pageCount", maxVisible: "maxVisible", className: "className", rowsPerPageLabel: "rowsPerPageLabel", rowsPerPage: "rowsPerPage", rowsPerPageOptions: "rowsPerPageOptions" }, outputs: { pageChange: "pageChange", rowsPerPageChange: "rowsPerPageChange" }, ngImport: i0, template: "<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none border border-border bg-muted text-foreground shadow-sm'\n : 'appearance-none border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }, { kind: "component", type: i3.PdmSelectComponent, selector: "pdm-select", inputs: ["id", "value", "options", "disabled", "invalid", "className", "placeholder"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
103
+ PdmPaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmPaginationComponent, selector: "pdm-pagination", inputs: { page: "page", pageCount: "pageCount", maxVisible: "maxVisible", className: "className", rowsPerPageLabel: "rowsPerPageLabel", rowsPerPage: "rowsPerPage", rowsPerPageOptions: "rowsPerPageOptions" }, outputs: { pageChange: "pageChange", rowsPerPageChange: "rowsPerPageChange" }, ngImport: i0, template: "<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none border border-border bg-muted/80 text-foreground shadow-sm'\n : 'appearance-none border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }, { kind: "component", type: i3.PdmSelectComponent, selector: "pdm-select", inputs: ["id", "value", "options", "disabled", "invalid", "className", "placeholder"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
50
104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmPaginationComponent, decorators: [{
51
105
  type: Component,
52
- args: [{ selector: 'pdm-pagination', changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none border border-border bg-muted text-foreground shadow-sm'\n : 'appearance-none border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n" }]
106
+ args: [{ selector: 'pdm-pagination', changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none border border-border bg-muted/80 text-foreground shadow-sm'\n : 'appearance-none border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n" }]
53
107
  }], propDecorators: { page: [{
54
108
  type: Input
55
109
  }], pageCount: [{
@@ -69,4 +123,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
69
123
  }], rowsPerPageChange: [{
70
124
  type: Output
71
125
  }] } });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRaEcsTUFBTSxPQUFPLHNCQUFzQjtJQUxuQztRQU1XLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixxQkFBZ0IsR0FBRyxlQUFlLENBQUM7UUFDbkMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsdUJBQWtCLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUvQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4QyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBc0MxRDtJQXBDQyxJQUFJLHdCQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDckIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3pDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUVELE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzNELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUFhO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BFLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7bUhBL0NVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHFWQ1JuQyxrdkZBbUVBOzJGRDNEYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUVULHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgUGRtTmF0aXZlU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vbmF0aXZlLXNlbGVjdC9uYXRpdmUtc2VsZWN0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1wYWdpbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQZG1QYWdpbmF0aW9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgcGFnZSA9IDE7XG4gIEBJbnB1dCgpIHBhZ2VDb3VudCA9IDE7XG4gIEBJbnB1dCgpIG1heFZpc2libGUgPSA0O1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbiAgQElucHV0KCkgcm93c1BlclBhZ2VMYWJlbCA9ICdSb3dzIHBlciBwYWdlJztcbiAgQElucHV0KCkgcm93c1BlclBhZ2UgPSAxMDtcbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDMwLCA1MF07XG5cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJvd3NQZXJQYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgZ2V0IHJvd3NQZXJQYWdlU2VsZWN0T3B0aW9ucygpOiBQZG1OYXRpdmVTZWxlY3RPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMucm93c1BlclBhZ2VPcHRpb25zLm1hcCgodmFsdWUpID0+ICh7XG4gICAgICBsYWJlbDogU3RyaW5nKHZhbHVlKSxcbiAgICAgIHZhbHVlOiBTdHJpbmcodmFsdWUpXG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0IHJvd3NQZXJQYWdlVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMucm93c1BlclBhZ2UpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVQYWdlcygpOiBBcnJheTxudW1iZXIgfCAnZWxsaXBzaXMnPiB7XG4gICAgY29uc3QgdG90YWwgPSBNYXRoLm1heCgxLCB0aGlzLnBhZ2VDb3VudCk7XG4gICAgaWYgKHRvdGFsIDw9IE1hdGgubWF4KDEsIHRoaXMubWF4VmlzaWJsZSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbCB9LCAoXywgaSkgPT4gaSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBbMSwgMiwgJ2VsbGlwc2lzJywgdG90YWxdO1xuICB9XG5cbiAgc2V0UGFnZShuZXh0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAobmV4dCA8IDEgfHwgbmV4dCA+IHRoaXMucGFnZUNvdW50IHx8IG5leHQgPT09IHRoaXMucGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgb25Sb3dzUGVyUGFnZUNoYW5nZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuZXh0KSB8fCBuZXh0IDw9IDAgfHwgbmV4dCA9PT0gdGhpcy5yb3dzUGVyUGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucm93c1BlclBhZ2VDaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxufVxuIiwiPG5hdlxuICBhcmlhLWxhYmVsPVwiUGFnaW5hdGlvblwiXG4gIFtuZ0NsYXNzXT1cIltcbiAgICAnbXgtYXV0byBmbGV4IHctZnVsbCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00JyxcbiAgICBjbGFzc05hbWUsXG4gIF1cIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIiAqbmdJZj1cInJvd3NQZXJQYWdlT3B0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZFwiPnt7XG4gICAgICByb3dzUGVyUGFnZUxhYmVsXG4gICAgfX08L3NwYW4+XG4gICAgPHBkbS1zZWxlY3RcbiAgICAgIFt2YWx1ZV09XCJyb3dzUGVyUGFnZVZhbHVlXCJcbiAgICAgIFtvcHRpb25zXT1cInJvd3NQZXJQYWdlU2VsZWN0T3B0aW9uc1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicm93c1BlclBhZ2VWYWx1ZVwiXG4gICAgICBjbGFzc05hbWU9XCJ3LVsxMjBweF1cIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUm93c1BlclBhZ2VDaGFuZ2VWYWx1ZSgkZXZlbnQpXCJcbiAgICA+PC9wZG0tc2VsZWN0PlxuICA8L2Rpdj5cblxuICA8dWwgY2xhc3M9XCJtLTAgZmxleCBsaXN0LW5vbmUgaXRlbXMtY2VudGVyIGdhcC0xIHAtMFwiPlxuICAgIDxsaT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggaC05IGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcm91bmRlZC1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBkaXNhYmxlZDpvcGFjaXR5LTUwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPD0gMVwiXG4gICAgICAgIChjbGljayk9XCJzZXRQYWdlKHBhZ2UgLSAxKVwiXG4gICAgICA+XG4gICAgICAgIDxwZG0taWNvbiBuYW1lPVwiY2hldnJvbi1sZWZ0XCIgW3NpemVdPVwiMTRcIj48L3BkbS1pY29uPlxuICAgICAgICBQcmV2aW91c1xuICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nRm9yPVwibGV0IHBhZ2VOdW1iZXIgb2YgdmlzaWJsZVBhZ2VzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFnZU51bWJlciA9PT0gJ2VsbGlwc2lzJzsgZWxzZSBwYWdlQnV0dG9uXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgbWluLXctOSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtMiB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiXG4gICAgICAgICAgPi4uLjwvc3BhblxuICAgICAgICA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjcGFnZUJ1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICdpbmxpbmUtZmxleCBoLTkgbWluLXctOSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBweC0yIHRleHQtc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTInLFxuICAgICAgICAgICAgcGFnZU51bWJlciA9PT0gcGFnZVxuICAgICAgICAgICAgICA/ICdhcHBlYXJhbmNlLW5vbmUgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctbXV0ZWQgdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSdcbiAgICAgICAgICAgICAgOiAnYXBwZWFyYW5jZS1ub25lIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHRleHQtZm9yZWdyb3VuZCBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgXVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNldFBhZ2UoK3BhZ2VOdW1iZXIpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHBhZ2VOdW1iZXIgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbGk+XG4gICAgPGxpPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSByb3VuZGVkLW1kIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHB4LTIgdGV4dC1zbSB0ZXh0LWZvcmVncm91bmQgaG92ZXI6YmctYWNjZW50IGRpc2FibGVkOm9wYWNpdHktNTAgcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicGFnZSA+PSBwYWdlQ291bnRcIlxuICAgICAgICAoY2xpY2spPVwic2V0UGFnZShwYWdlICsgMSlcIlxuICAgICAgPlxuICAgICAgICBOZXh0XG4gICAgICAgIDxwZG0taWNvbiBuYW1lPVwiY2hldnJvbi1yaWdodFwiIFtzaXplXT1cIjE0XCI+PC9wZG0taWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbGk+XG4gIDwvdWw+XG48L25hdj5cbiJdfQ==
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFHaEcsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFjLEVBQUUsUUFBZ0IsRUFBVSxFQUFFO0lBQ2hFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ2pELENBQUMsQ0FBQztBQU9GLE1BQU0sT0FBTyxzQkFBc0I7SUFMbkM7UUFNVSxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBMEJqQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YscUJBQWdCLEdBQUcsZUFBZSxDQUFDO1FBVW5DLHVCQUFrQixHQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFL0MsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDeEMsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztLQXNFMUQ7SUE1R0MsSUFDSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENB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QUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsd0JBQXdCLENBQUMsS0FBYTtRQUNwQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwRSxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O21IQWpIVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixxVkNibkMscXZGQW1FQTsyRkR0RGEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLGdCQUFnQixtQkFFVCx1QkFBdUIsQ0FBQyxNQUFNOzhCQVMzQyxJQUFJO3NCQURQLEtBQUs7Z0JBU0YsU0FBUztzQkFEWixLQUFLO2dCQVNGLFVBQVU7c0JBRGIsS0FBSztnQkFRRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRixXQUFXO3NCQURkLEtBQUs7Z0JBUUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFBkbU5hdGl2ZVNlbGVjdE9wdGlvbiB9IGZyb20gJy4uL25hdGl2ZS1zZWxlY3QvbmF0aXZlLXNlbGVjdC5jb21wb25lbnQnO1xuXG5jb25zdCBjb2VyY2VOdW1iZXIgPSAodmFsdWU6IHVua25vd24sIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICBjb25zdCBuZXh0ID0gTnVtYmVyKHZhbHVlKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuZXh0KSA/IG5leHQgOiBmYWxsYmFjaztcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1wYWdpbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQZG1QYWdpbmF0aW9uQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfcGFnZSA9IDE7XG4gIHByaXZhdGUgX3BhZ2VDb3VudCA9IDE7XG4gIHByaXZhdGUgX21heFZpc2libGUgPSA0O1xuICBwcml2YXRlIF9yb3dzUGVyUGFnZSA9IDEwO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBwYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2U7XG4gIH1cbiAgc2V0IHBhZ2UodmFsdWU6IG51bWJlciB8IHN0cmluZykge1xuICAgIHRoaXMuX3BhZ2UgPSBjb2VyY2VOdW1iZXIodmFsdWUsIDEpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHBhZ2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wYWdlQ291bnQ7XG4gIH1cbiAgc2V0IHBhZ2VDb3VudCh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5fcGFnZUNvdW50ID0gY29lcmNlTnVtYmVyKHZhbHVlLCAxKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBtYXhWaXNpYmxlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heFZpc2libGU7XG4gIH1cbiAgc2V0IG1heFZpc2libGUodmFsdWU6IG51bWJlciB8IHN0cmluZykge1xuICAgIHRoaXMuX21heFZpc2libGUgPSBjb2VyY2VOdW1iZXIodmFsdWUsIDQpO1xuICB9XG5cbiAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlTGFiZWwgPSAnUm93cyBwZXIgcGFnZSc7XG5cbiAgQElucHV0KClcbiAgZ2V0IHJvd3NQZXJQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NQZXJQYWdlO1xuICB9XG4gIHNldCByb3dzUGVyUGFnZSh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5fcm93c1BlclBhZ2UgPSBjb2VyY2VOdW1iZXIodmFsdWUsIDEwKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbMTAsIDIwLCAzMCwgNTBdO1xuXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSByb3dzUGVyUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIGdldCByb3dzUGVyUGFnZVNlbGVjdE9wdGlvbnMoKTogUGRtTmF0aXZlU2VsZWN0T3B0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgbGFiZWw6IFN0cmluZyh2YWx1ZSksXG4gICAgICB2YWx1ZTogU3RyaW5nKHZhbHVlKVxuICAgIH0pKTtcbiAgfVxuXG4gIGdldCByb3dzUGVyUGFnZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLnJvd3NQZXJQYWdlKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlUGFnZXMoKTogQXJyYXk8bnVtYmVyIHwgJ2VsbGlwc2lzJz4ge1xuICAgIGNvbnN0IHRvdGFsID0gTWF0aC5tYXgoMSwgdGhpcy5wYWdlQ291bnQpO1xuICAgIGNvbnN0IG1heFZpc2libGUgPSBNYXRoLm1heCgxLCB0aGlzLm1heFZpc2libGUpO1xuXG4gICAgaWYgKHRvdGFsIDw9IG1heFZpc2libGUpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbCB9LCAoXywgaSkgPT4gaSArIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnQgPSBNYXRoLm1pbihNYXRoLm1heCgxLCB0aGlzLnBhZ2UpLCB0b3RhbCk7XG4gICAgY29uc3Qgd2luZG93U2l6ZSA9IE1hdGgubWF4KDEsIG1heFZpc2libGUgLSAxKTtcbiAgICBjb25zdCBzdGFydFRocmVzaG9sZCA9IE1hdGguY2VpbCh3aW5kb3dTaXplIC8gMik7XG4gICAgY29uc3QgZW5kVGhyZXNob2xkID0gdG90YWwgLSBNYXRoLmZsb29yKHdpbmRvd1NpemUgLyAyKTtcbiAgICBjb25zdCByYW5nZSA9IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlcltdID0+XG4gICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgLSBzdGFydCArIDEgfSwgKF8sIGkpID0+IHN0YXJ0ICsgaSk7XG5cbiAgICBpZiAoY3VycmVudCA8PSBzdGFydFRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4od2luZG93U2l6ZSwgdG90YWwgLSAxKTtcbiAgICAgIHJldHVybiBbLi4ucmFuZ2UoMSwgZW5kKSwgJ2VsbGlwc2lzJywgdG90YWxdO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50ID49IGVuZFRocmVzaG9sZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgxLCB0b3RhbCAtIHdpbmRvd1NpemUpO1xuICAgICAgY29uc3QgcGFnZXMgPSByYW5nZShzdGFydCwgdG90YWwpO1xuICAgICAgaWYgKHBhZ2VzWzBdID09PSAxKSB7XG4gICAgICAgIHJldHVybiBwYWdlcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBbMSwgJ2VsbGlwc2lzJywgLi4ucGFnZXNdO1xuICAgIH1cblxuICAgIGxldCBzdGFydCA9IGN1cnJlbnQgLSBNYXRoLmZsb29yKHdpbmRvd1NpemUgLyAyKTtcbiAgICBsZXQgZW5kID0gc3RhcnQgKyB3aW5kb3dTaXplIC0gMTtcbiAgICBpZiAoZW5kID49IHRvdGFsKSB7XG4gICAgICBlbmQgPSB0b3RhbCAtIDE7XG4gICAgICBzdGFydCA9IGVuZCAtIHdpbmRvd1NpemUgKyAxO1xuICAgIH1cblxuICAgIHJldHVybiBbLi4ucmFuZ2Uoc3RhcnQsIGVuZCksICdlbGxpcHNpcycsIHRvdGFsXTtcbiAgfVxuXG4gIHNldFBhZ2UobmV4dDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKG5leHQgPCAxIHx8IG5leHQgPiB0aGlzLnBhZ2VDb3VudCB8fCBuZXh0ID09PSB0aGlzLnBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wYWdlID0gbmV4dDtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxuXG4gIG9uUm93c1BlclBhZ2VDaGFuZ2VWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobmV4dCkgfHwgbmV4dCA8PSAwIHx8IG5leHQgPT09IHRoaXMucm93c1BlclBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3dzUGVyUGFnZSA9IG5leHQ7XG4gICAgdGhpcy5yb3dzUGVyUGFnZUNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG59XG4iLCI8bmF2XG4gIGFyaWEtbGFiZWw9XCJQYWdpbmF0aW9uXCJcbiAgW25nQ2xhc3NdPVwiW1xuICAgICdteC1hdXRvIGZsZXggdy1mdWxsIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTQnLFxuICAgIGNsYXNzTmFtZSxcbiAgXVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtM1wiICpuZ0lmPVwicm93c1BlclBhZ2VPcHRpb25zLmxlbmd0aCA+IDBcIj5cbiAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kXCI+e3tcbiAgICAgIHJvd3NQZXJQYWdlTGFiZWxcbiAgICB9fTwvc3Bhbj5cbiAgICA8cGRtLXNlbGVjdFxuICAgICAgW3ZhbHVlXT1cInJvd3NQZXJQYWdlVmFsdWVcIlxuICAgICAgW29wdGlvbnNdPVwicm93c1BlclBhZ2VTZWxlY3RPcHRpb25zXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJyb3dzUGVyUGFnZVZhbHVlXCJcbiAgICAgIGNsYXNzTmFtZT1cInctWzEyMHB4XVwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwib25Sb3dzUGVyUGFnZUNoYW5nZVZhbHVlKCRldmVudClcIlxuICAgID48L3BkbS1zZWxlY3Q+XG4gIDwvZGl2PlxuXG4gIDx1bCBjbGFzcz1cIm0tMCBmbGV4IGxpc3Qtbm9uZSBpdGVtcy1jZW50ZXIgZ2FwLTEgcC0wXCI+XG4gICAgPGxpPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSByb3VuZGVkLW1kIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHB4LTIgdGV4dC1zbSB0ZXh0LWZvcmVncm91bmQgaG92ZXI6YmctYWNjZW50IGRpc2FibGVkOm9wYWNpdHktNTAgcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicGFnZSA8PSAxXCJcbiAgICAgICAgKGNsaWNrKT1cInNldFBhZ2UocGFnZSAtIDEpXCJcbiAgICAgID5cbiAgICAgICAgPHBkbS1pY29uIG5hbWU9XCJjaGV2cm9uLWxlZnRcIiBbc2l6ZV09XCIxNFwiPjwvcGRtLWljb24+XG4gICAgICAgIFByZXZpb3VzXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2xpPlxuICAgIDxsaSAqbmdGb3I9XCJsZXQgcGFnZU51bWJlciBvZiB2aXNpYmxlUGFnZXNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYWdlTnVtYmVyID09PSAnZWxsaXBzaXMnOyBlbHNlIHBhZ2VCdXR0b25cIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBtaW4tdy05IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC0yIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCJcbiAgICAgICAgICA+Li4uPC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNwYWdlQnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiW1xuICAgICAgICAgICAgJ2lubGluZS1mbGV4IGgtOSBtaW4tdy05IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIHB4LTIgdGV4dC1zbSByaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMicsXG4gICAgICAgICAgICBwYWdlTnVtYmVyID09PSBwYWdlXG4gICAgICAgICAgICAgID8gJ2FwcGVhcmFuY2Utbm9uZSBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1tdXRlZC84MCB0ZXh0LWZvcmVncm91bmQgc2hhZG93LXNtJ1xuICAgICAgICAgICAgICA6ICdhcHBlYXJhbmNlLW5vbmUgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBdXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0UGFnZSgrcGFnZU51bWJlcilcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcGFnZU51bWJlciB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9saT5cbiAgICA8bGk+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBhcHBlYXJhbmNlLW5vbmUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIHJvdW5kZWQtbWQgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgcHgtMiB0ZXh0LXNtIHRleHQtZm9yZWdyb3VuZCBob3ZlcjpiZy1hY2NlbnQgZGlzYWJsZWQ6b3BhY2l0eS01MCByaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMlwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJwYWdlID49IHBhZ2VDb3VudFwiXG4gICAgICAgIChjbGljayk9XCJzZXRQYWdlKHBhZ2UgKyAxKVwiXG4gICAgICA+XG4gICAgICAgIE5leHRcbiAgICAgICAgPHBkbS1pY29uIG5hbWU9XCJjaGV2cm9uLXJpZ2h0XCIgW3NpemVdPVwiMTRcIj48L3BkbS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvbmF2PlxuIl19