ets-fe-ng-sdk 17.0.148 → 17.0.150

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.
@@ -224,4 +224,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
224
224
  type: Input,
225
225
  args: ['isShow']
226
226
  }] } });
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9JLE9BQU8sRUFBZ0QsV0FBVyxFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFILE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQW1CLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFl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O3dCQUNyQixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQix5QkFBeUI7d0JBQ3pCLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixTQUFTO3FCQUNWOzhCQU1RLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUN1QixtQkFBbUI7c0JBQWhELE1BQU07dUJBQUMsb0JBQW9CO2dCQUNuQixVQUFVO3NCQUFsQixLQUFLO2dCQXFCOEMsV0FBVztzQkFBOUQsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtnQkFHekIsT0FBTztzQkFBM0IsS0FBSzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFR5cGUsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3JGbiwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRnVuY3Rpb25DYWxsZXIyLCBUb0FueVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy91dGlsaXR5LnBpcGUnO1xuaW1wb3J0IHsgQnRuQ29tcG9uZW50IH0gZnJvbSAnLi4vYnRuL2J0bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRCYXNpY0NvbXBvbmVudCwgT3B0aW9uTGFiZWxUeXBlIH0gZnJvbSAnLi4vaW5wdXQvaW5wdXQtYmFzaWMuY29tcG9uZW50JztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50JztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQvdmFsaWRhdGlvbi1tZXNzYWdlL3ZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGhvbmVOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuLi9waG9uZS1udW1iZXIvcGhvbmUtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nU3dpdGNoRGVmYXVsdCwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vU2VydmljZXMvdXRpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IElPYmplY3RMaXRlcmFsLCBJbnB1dFN1YlR5cGUsIElucHV0VHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBJY29uVHlwZSB9IGZyb20gJy4uL2J0bi9idG4ubW9kZWwnO1xuaW1wb3J0IHsgUmljaFRleHRFZGl0b3JSRkNvbXBvbmVudCB9IGZyb20gJy4uL3JpY2gtdGV4dC1lZGl0b3ItcmYvcmljaC10ZXh0LWVkaXRvci1yZi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUdlbmVyYXRvclNlcnZpY2UgfSBmcm9tICcuL2Zvcm0tZ2VuZXJhdG9yLnNlcnZpY2UnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZvcm1HZW5lcmF0b3I8VEZvcm1Hcm91cCBleHRlbmRzIElPYmplY3RMaXRlcmFsLCBUQmFzZUZvcm1TY2hlbWEgZXh0ZW5kcyB7IGZpZWxkPzogYW55IH0gPSBhbnk+IHtcbiAgZm9ybVNjaGVtYU1hcCA9IHNpZ25hbDx7IFtmaWVsZDogc3RyaW5nXTogVEJhc2VGb3JtU2NoZW1hIH0+KHt9KTtcbiAgZm9ybVNjaGVtYSA9IGNvbXB1dGVkPFRCYXNlRm9ybVNjaGVtYVtdPigoKSA9PiBPYmplY3QudmFsdWVzKHRoaXMuZm9ybVNjaGVtYU1hcCgpKS5maWx0ZXIoKHgpID0+IHgpKTtcbiAgc3ViczogeyBbZmllbGROYW1lOiBzdHJpbmddOiBTdWJzY3JpcHRpb24gfSA9IHt9O1xuXG4gIHB1YmxpYyB1dGlsaXR5U2VydmljZSA9IGluamVjdChVdGlsaXR5U2VydmljZSk7XG4gIHB1YmxpYyBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgdGhpcy5vbkRlc3Ryb3koKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGVzdHJveSgpIHtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuc3VicykuZm9yRWFjaCgocykgPT4ge1xuICAgICAgcz8udW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgICB0aGlzLnN1YnMgPSB7fTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfc2V0Rm9ybVNjaGVtYXMoc2NoZW1hczogVEJhc2VGb3JtU2NoZW1hW10pIHtcbiAgICB0aGlzLmZvcm1TY2hlbWFNYXAuc2V0KChzY2hlbWFzIHx8IFtdKS50b01hcCgnZmllbGQnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3VwZGF0ZUZvcm1TY2hlbWEoZmllbGQ6IHN0cmluZywgc2NoZW1lOiBQYXJ0aWFsPFRCYXNlRm9ybVNjaGVtYT4pIHtcbiAgICB0aGlzLmZvcm1TY2hlbWFNYXAudXBkYXRlKChmb3JtU2NoZW1hTWFwKSA9PiB7XG4gICAgICBjb25zdCBzY2ggPSBmb3JtU2NoZW1hTWFwW2ZpZWxkXTtcbiAgICAgIHJldHVybiAhc2NoID8geyAuLi5mb3JtU2NoZW1hTWFwLCBbZmllbGQgYXMgYW55XTogc2NoZW1lIH0gOiB7IC4uLmZvcm1TY2hlbWFNYXAsIFtmaWVsZCBhcyBhbnldOiB7IC4uLnNjaCwgLi4uc2NoZW1lIH0gfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfcmVtb3ZlRm9ybVNjaGVtYShmaWVsZDogc3RyaW5nKSB7XG4gICAgdGhpcy5mb3JtU2NoZW1hTWFwLnVwZGF0ZSgoZm9ybVNjaGVtYU1hcCkgPT4ge1xuICAgICAgZGVsZXRlIGZvcm1TY2hlbWFNYXBbZmllbGRdO1xuICAgICAgcmV0dXJuIGNsb25lRGVlcChmb3JtU2NoZW1hTWFwKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEZvcm0gc2hvdWxkIGJlIHNldCBiZWZvcmUgdGhlIHRoZSBmb3JtU2NoZW1hXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zvcm0tZ2VuZXJhdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIExvYWRlckNvbXBvbmVudCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUGhvbmVOdW1iZXJDb21wb25lbnQsXG4gICAgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQsXG4gICAgQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIElucHV0QmFzaWNDb21wb25lbnQsXG4gICAgUmljaFRleHRFZGl0b3JSRkNvbXBvbmVudCxcbiAgICBCdG5Db21wb25lbnQsXG4gICAgRnVuY3Rpb25DYWxsZXIyLFxuICAgIFRvQW55UGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUdlbmVyYXRvckNvbXBvbmVudDxURm9ybUdyb3VwIGV4dGVuZHMgeyBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PiB9PiBleHRlbmRzIEJhc2VGb3JtR2VuZXJhdG9yPFxuICBURm9ybUdyb3VwLFxuICBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPlxuPiB7XG4gIEBJbnB1dCgpIGtleUZpZWxkOiAnZmllbGQnIHwgJ2xhYmVsJyA9ICdmaWVsZCc7XG5cbiAgQE91dHB1dCgpIG9uU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3N1Ym1pc3Npb25SZXNwb25zZScpIF9zdWJtaXNzaW9uUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgc3VibWl0RnVuYzogKHZhbHVlOiBhbnkpID0+IFByb21pc2U8YW55PjtcbiAgc3VibWl0QnRuVGV4dCA9IGlucHV0KCdTdWJtaXQnKTtcbiAgc3VibWl0QnRuVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xuICBzdWJtaXRTdWNjZXNzVGV4dCA9IGlucHV0KCdTYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgc2hvd1N1Ym1pdEJ0biA9IGlucHV0KHRydWUpO1xuXG4gIGdyaWRTdHlsZSA9IGlucHV0PG51bWJlciB8ICdhdXRvJz4oKTtcbiAgZ3JpZE1EU3R5bGUgPSBpbnB1dDxudW1iZXIgfCAnYXV0byc+KCk7XG4gIGdyaWRMR1N0eWxlID0gaW5wdXQ8bnVtYmVyIHwgJ2F1dG8nPigpO1xuICBncmlkWFhMU3R5bGUgPSBpbnB1dDxudW1iZXIgfCAnYXV0byc+KCk7XG5cbiAgZm9ybUdyaWRDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgdXNlTG9hZGVyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgbG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgX2xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbXB1dGVkTG9hZGluZyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnVzZUxvYWRlcigpID8gdGhpcy5sb2FkaW5nKCkgfHwgdGhpcy5fbG9hZGluZygpIDogZmFsc2UpKTtcblxuICBmb3JtID0gaW5wdXQ8Rm9ybUdyb3VwPFRGb3JtR3JvdXA+Pih1bmRlZmluZWQsIHt9KTtcbiAgc3VibWlzc2lvblJlc3BvbnNlOiBhbnk7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ2Zvcm1TY2hlbWEnIH0pIHNldCBfZm9ybVNjaGVtYSh2OiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdKSB7XG4gICAgdGhpcy5pbml0KGNsb25lRGVlcCh2LmZpbHRlcigoeCkgPT4geCkpKTtcbiAgfVxuICBASW5wdXQoJ2lzU2hvdycpIHNldCBfaXNTaG93KHY6IGJvb2xlYW4pIHtcbiAgICBpZiAodikgdGhpcy5mb3JtKCk/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIGVsc2UgdGhpcy5mb3JtKCk/LmVuYWJsZSgpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodikgdGhpcy5mb3JtKCk/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgZWxzZSB0aGlzLmZvcm0oKT8uZW5hYmxlKCk7XG4gICAgfSwgNTAwKTtcbiAgfVxuICBvcHRpb25zTWFwID0gc2lnbmFsPElGb3JtT3B0aW9ucz4oe30pO1xuICBmb3JtVmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mb3JtKCk/LmdldFJhd1ZhbHVlKCkpO1xuXG4gIGNvbXB1dGVkRm9ybVNjaGVtYSA9IGNvbXB1dGVkPElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10+KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1WYWwgPSB0aGlzLmZvcm1WYWwoKSxcbiAgICAgICAgZm9ybVNjaGVtYSA9IHRoaXMuZm9ybVNjaGVtYSgpIHx8IFtdO1xuICAgICAgcmV0dXJuIGZvcm1TY2hlbWEuZmlsdGVyKChzY2hlbWUpID0+ICFzY2hlbWUuaGlkZGVuICYmICghc2NoZW1lLmhpZGVJZkZ1bmMgfHwgIXNjaGVtZS5oaWRlSWZGdW5jKGZvcm1WYWwpKSk7XG4gICAgfSxcbiAgICB7IGVxdWFsOiBpc0VxdWFsIH0sXG4gICk7XG4gIC8vIG1pc2NJbmRleDogVE1pc2NJbmRleDtcbiAgcHVibGljIGZvcm1TZXJ2aWNlID0gaW5qZWN0KEZvcm1HZW5lcmF0b3JTZXJ2aWNlKTtcblxuICBpbml0KHNjaGVtYTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXSkge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHRoaXMub25EZXN0cm95KCk7XG4gICAgdGhpcy5fc2V0Rm9ybVNjaGVtYXMoc2NoZW1hIHx8IFtdKTtcbiAgICBpZiAoc2NoZW1hKSBmb3IgKGNvbnN0IHNjaGVtZSBvZiBzY2hlbWEpIHRoaXMuaGFuZGxlRm9ybVNjaGVtZShzY2hlbWUpO1xuICAgIGlmIChzY2hlbWEpXG4gICAgICBmb3IgKGNvbnN0IHNjaGVtZSBvZiBzY2hlbWEpXG4gICAgICAgIGlmIChzY2hlbWUudHJpZ2dlck9uQ2hhbmdlT25Jbml0KSBzY2hlbWUub25DaGFuZ2VGdW5jKHRoaXMuZm9ybSgpLmdldFJhd1ZhbHVlKCksIHRoaXMuZm9ybSgpLmdldFJhd1ZhbHVlKClbc2NoZW1lLmZpZWxkPy50b1N0cmluZygpXSwgdGhpcyk7XG4gIH1cblxuICBoYW5kbGVGb3JtU2NoZW1lKHNjaGVtZTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4pIHtcbiAgICBzY2hlbWUuaWQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpO1xuICAgIGlmIChzY2hlbWUuc3RhY2tlZCA9PSBudWxsKSBzY2hlbWUuc3RhY2tlZCA9IHRydWU7XG4gICAgaWYgKHNjaGVtZS5zaG93VmFsaWRhdGlvbk1zZyA9PSBudWxsKSBzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2cgPSB0cnVlO1xuICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlLmNvbmZpZy5zaG93VmFsaWRhdGlvbk1lc3NhZ2VzQnlEZWZhdWx0KVxuICAgICAgaWYgKHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPT0gbnVsbCAmJiAoIXNjaGVtZS52YWx1ZUZpZWxkIHx8ICFzY2hlbWUubGFiZWxGaWVsZCkpIHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlRm9ybVNjaGVtYShzY2hlbWUuZmllbGQsIHNjaGVtZSk7XG5cbiAgICBpZiAoc2NoZW1lLm9wdGlvbnNJbml0RnVuYylcbiAgICAgIHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHNjaGVtZS5vcHRpb25zID0gcjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgICAgfSk7XG4gICAgaWYgKHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMyKVxuICAgICAgc2NoZW1lLm9wdGlvbnNJbml0RnVuYzIoKS5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgICAgc2NoZW1lLm9wdGlvbnMgPSByO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1TY2hlbWEoc2NoZW1lLmZpZWxkLCB7IG9wdGlvbnM6IHIgfSk7XG4gICAgICB9KTtcbiAgICBpZiAoc2NoZW1lLm9uQ2hhbmdlRnVuYykge1xuICAgICAgaWYgKHNjaGVtZS5kZWJ1ZykgZGVidWdnZXI7XG4gICAgICB0aGlzLnN1YnNbc2NoZW1lLmZpZWxkPy50b1N0cmluZygpXSA9IHRoaXMuZm9ybSgpXG4gICAgICAgID8uY29udHJvbHNbc2NoZW1lLmZpZWxkPy50b1N0cmluZygpXT8udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDApKVxuICAgICAgICAuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgICAgc2NoZW1lLm9uQ2hhbmdlRnVuYyh0aGlzLmZvcm0oKS5nZXRSYXdWYWx1ZSgpLCByLCB0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGV0YWNoRm9ybVNjaGVtZShmaWVsZE5hbWU/OiBrZXlvZiBURm9ybUdyb3VwKSB7XG4gICAgdGhpcy5zdWJzW2ZpZWxkTmFtZSBhcyBzdHJpbmddLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBtY2hhbmdlRW1pdHRlcigpIHtcbiAgICB0aGlzLm1jaGFuZ2UuZW1pdCh0aGlzLmZvcm0oKS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIGdldEZvcm1TY2hlbWUgPSAoZmllbGROYW1lOiBrZXlvZiBURm9ybUdyb3VwKSA9PiB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVNjaGVtYU1hcCgpW2ZpZWxkTmFtZSBhcyBzdHJpbmddO1xuICB9O1xuXG4gIGFkZFRvRm9ybVNjaGVtYShmb3JtU2NoZW1lOiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPikge1xuICAgIHRoaXMucmVtb3ZlRnJvbUZvcm1TY2hlbWEoZm9ybVNjaGVtZS5maWVsZCk7XG4gICAgdGhpcy5oYW5kbGVGb3JtU2NoZW1lKGNsb25lRGVlcChmb3JtU2NoZW1lKSk7XG4gIH1cblxuICB1cGRhdGVGb3JtU2NoZW1hKGZpZWxkTmFtZToga2V5b2YgVEZvcm1Hcm91cCwgc2NoZW1lOiBQYXJ0aWFsPElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+Pikge1xuICAgIHJldHVybiBzdXBlci5fdXBkYXRlRm9ybVNjaGVtYShmaWVsZE5hbWUgYXMgc3RyaW5nLCBzY2hlbWUpO1xuICB9XG5cbiAgcmVtb3ZlRnJvbUZvcm1TY2hlbWEoZmllbGROYW1lOiBrZXlvZiBURm9ybUdyb3VwKSB7XG4gICAgdGhpcy5kZXRhY2hGb3JtU2NoZW1lKGZpZWxkTmFtZSk7XG4gICAgY29uc3Qgb25SZW1vdmUgPSB0aGlzLmZvcm1TY2hlbWFNYXAoKVtmaWVsZE5hbWUgYXMgc3RyaW5nXT8ub25SZW1vdmVGdW5jO1xuICAgIGlmIChvblJlbW92ZSkgb25SZW1vdmUodGhpcy5mb3JtKCkuZ2V0UmF3VmFsdWUoKSBhcyBhbnksIHRoaXMuZm9ybSgpLmNvbnRyb2xzW2ZpZWxkTmFtZSBhcyBhbnldLCB0aGlzKTtcbiAgICB0aGlzLl9yZW1vdmVGb3JtU2NoZW1hKGZpZWxkTmFtZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgc2V0T3B0aW9uTGFiZWwoJGV2ZW50OiBhbnksIHNjaGVtZTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4pIHtcbiAgICBzY2hlbWUuc2VsZWN0ZWRPcHRpb25MYWJlbCA9ICRldmVudDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdChidG4/OiBCdG5Db21wb25lbnQpIHtcbiAgICBpZiAodGhpcy5zdWJtaXRGdW5jKSB7XG4gICAgICBidG4/LnNldExvYWRlcih0cnVlKTtcbiAgICAgIHRoaXMuX2xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgY29uc3QgZm9ybVZhbCA9IHRoaXMuZm9ybVZhbCgpO1xuICAgICAgdGhpcy5vblN1Ym1pdC5lbWl0KGZvcm1WYWwpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnN1Ym1pdEZ1bmMoZm9ybVZhbCk7XG4gICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaW5mbyh0aGlzLnN1Ym1pdFN1Y2Nlc3NUZXh0KCksIDEpO1xuICAgICAgICB0aGlzLl9zdWJtaXNzaW9uUmVzcG9uc2UuZW1pdCh0aGlzLnN1Ym1pc3Npb25SZXNwb25zZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmluZm8oZXJyb3IsIDApO1xuICAgICAgfVxuICAgICAgdGhpcy5fbG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgYnRuPy5zZXRMb2FkZXIoZmFsc2UpO1xuICAgIH0gZWxzZSB0aGlzLm9uU3VibWl0LmVtaXQodGhpcy5mb3JtVmFsKCkpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VGb3JtU2NoZW1hPFxuICBULFxuICBDb21wb25lbnQgZXh0ZW5kcyBCYXNlRm9ybUdlbmVyYXRvcjxUPixcbiAgVEZvcm1Hcm91cCBleHRlbmRzIHtcbiAgICBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgfSA9IGFueSxcbj4ge1xuICBhc3luY1ZhbGlkYXRvcnM/OiBBc3luY1ZhbGlkYXRvckZuW107XG4gIGF1dG9QaWNrVmFsdWVGaWVsZD86IGJvb2xlYW47XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBjbGVhck9uRGlzYWJsZT86IGJvb2xlYW47XG4gIGNscz86IHN0cmluZztcbiAgY291bnRyeUNvZGUzPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IElCYXNlRm9ybVNjaGVtYTxULCBDb21wb25lbnQsIFRGb3JtR3JvdXA+W107XG4gIGRlY2ltYWxQb2ludHM/OiBudW1iZXI7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWRJZj86IChyb3c6IGFueSwgY2VsbEZpZWxkPzogc3RyaW5nKSA9PiBib29sZWFuO1xuICBoaWRlSWZGdW5jPzogKHJvdykgPT4gYm9vbGVhbjtcbiAgZmllbGQ6IGtleW9mIFRGb3JtR3JvdXA7XG4gIGZvcm0/OiBGb3JtR3JvdXA8VEZvcm1Hcm91cD47XG4gIGdldENvdW50cnlDb2RlM0tleT86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgaGludD86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICBpc1NlYXJjaEZpZWxkPzogYm9vbGVhbjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGxhYmVsRmllbGQ/OiBzdHJpbmc7XG4gIGxhYmVsVHlwZT86IE9wdGlvbkxhYmVsVHlwZTtcbiAgb3B0aW9uTGFiZWxGb3JtYXR0ZXI/OiAocm93KSA9PiBzdHJpbmc7XG4gIG1heD86IG51bWJlcjtcbiAgbWluPzogbnVtYmVyO1xuICBub0Zvcm1hdD86IGJvb2xlYW47XG4gIG9wdGlvbkZvcm1hdHRlcj86IChpdGVtOiBhbnkpID0+IHN0cmluZztcbiAgb3B0aW9ucz86IGFueVtdO1xuICBvcHRpb25zQXN5bmM/OiBPYnNlcnZhYmxlPGFueVtdPiB8IFByb21pc2U8YW55W10+O1xuICBvcHRpb25zSW5pdEZ1bmM/OiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgb3B0aW9uc0luaXRGdW5jMj86ICgpID0+IE9ic2VydmFibGU8YW55W10+O1xuICBvcHRpb25zS2V5Pzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgc2VhcmNoRnVuYz86ICguLi5hcmdzKSA9PiBhbnk7XG4gIHNldEFzQ291bnRyeUNvZGUzPzogYm9vbGVhbjtcbiAgc2hvd1ZhbGlkYXRpb24/OiBib29sZWFuO1xuICBzaG93VmFsaWRhdGlvbkljb24/OiBib29sZWFuO1xuICB0ZW1wbGF0ZVZhbHVlPzogYW55O1xuICB0eXBlPzogSW5wdXRUeXBlO1xuICB2YWxpZGF0b3JzPzogVmFsaWRhdG9yRm5bXTtcbiAgdmFsdWU/OiBhbnk7XG4gIHZhbHVlRmllbGQ/OiBzdHJpbmc7XG4gIG9wdGlvbnNGdW5jPzogKC4uLnZhbDogYW55KSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgdHJpZ2dlck9uQ2hhbmdlT25Jbml0PzogYm9vbGVhbjtcbiAgZm9ybWF0dGVyPzogKHJvdzogeyBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogYW55IH0sIGZpZWxkTmFtZToga2V5b2YgVEZvcm1Hcm91cCkgPT4gc3RyaW5nO1xuICBleHRyYT86IGFueTtcbiAgb25DaGFuZ2VGdW5jPzogKHJvdzogeyBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXT86IFRGb3JtR3JvdXBbS11bJ3ZhbHVlJ10gfSwgY2VsbFZhbHVlPzogYW55LCBjb21wb25lbnQ/OiBDb21wb25lbnQpID0+IE9ic2VydmFibGU8YW55W10+IHwgYW55O1xuICBvblJlbW92ZUZ1bmM/OiAocm93OiB7IFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBURm9ybUdyb3VwW0tdWyd2YWx1ZSddIH0sIGNlbGw/OiBhbnksIGNvbXBvbmVudD86IENvbXBvbmVudCkgPT4gYW55O1xuICBzZWxlY3RlZE9wdGlvbkxhYmVsPzogc3RyaW5nO1xuICBzdGFja2VkPzogYm9vbGVhbjtcbiAgZGVidWc/OiBib29sZWFuO1xuICBzaG93VmFsaWRhdGlvbk1zZz86IGJvb2xlYW47XG4gIGRvbnRGb3JtYXRBc0lucHV0PzogYm9vbGVhbjtcbiAgc2hvd1JlcXVpcmVkVGFnPzogYm9vbGVhbjtcbiAgdGFibGVGb3JtYXR0ZXI/OiAodmFsOiBhbnkpID0+IHN0cmluZyB8IHVuZGVmaW5lZCB8IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB8IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgaWNvbj86IEljb25UeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtU2NoZW1hPFxuICBURm9ybUdyb3VwIGV4dGVuZHMge1xuICAgIFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+O1xuICB9ID0gYW55LFxuPiBleHRlbmRzIElCYXNlRm9ybVNjaGVtYTxURm9ybUdyb3VwLCBGb3JtR2VuZXJhdG9yQ29tcG9uZW50PFRGb3JtR3JvdXA+PiB7XG4gIGNoaWxkcmVuPzogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXTtcbiAgbGFiZWxUeXBlPzogT3B0aW9uTGFiZWxUeXBlO1xuICBmaWVsZDoga2V5b2YgVEZvcm1Hcm91cDtcbiAgc3ViVHlwZT86IElucHV0U3ViVHlwZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1TY2hlbWEyPFRTdHJ1Y3QgPSBhbnk+XG4gIGV4dGVuZHMgSUZvcm1TY2hlbWE8e1xuICAgIFtLIGluIGtleW9mIFRTdHJ1Y3RdOiBBYnN0cmFjdENvbnRyb2w8VFN0cnVjdFtLXT47XG4gIH0+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1PcHRpb25zIHtcbiAgW2ZpZWxkOiBzdHJpbmddOiBhbnk7XG59XG4iLCI8bG9hZGVyIFtsb2FkaW5nXT1cImNvbXB1dGVkTG9hZGluZygpXCI+XG4gIDxmb3JtPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicm93IHJvdy1jb2xzLXt7IGdyaWRTdHlsZSgpIH19IHJvdy1jb2xzLW1kLXt7IGdyaWRNRFN0eWxlKCkgfX0gcm93LWNvbHMtbGcte3sgZ3JpZExHU3R5bGUoKSB9fSByb3ctY29scy14eGwte3tcbiAgICAgICAgZ3JpZFhYTFN0eWxlKClcbiAgICAgIH19IGFsaWduLWl0ZW1zLWNlbnRlciB7eyBmb3JtR3JpZENsYXNzKCkgfX1cIj5cbiAgICAgIEBmb3IgKHNjaGVtZSBvZiBjb21wdXRlZEZvcm1TY2hlbWEoKTsgdHJhY2sgc2NoZW1lLmZpZWxkKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wge3sgc2NoZW1lLmNscyB9fSBcIj5cbiAgICAgICAgICBAc3dpdGNoICh0cnVlKSB7XG4gICAgICAgICAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ3RlbCcpIHtcbiAgICAgICAgICAgICAgPGFwcC1waG9uZS1udW1iZXJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJzY2hlbWUuZm9ybSB8fCBmb3JtKClcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGVcIlxuICAgICAgICAgICAgICAgIFtzdGFja2VkXT1cInNjaGVtZS5zdGFja2VkXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJzY2hlbWUuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtub0Zvcm1hdF09XCJzY2hlbWUubm9Gb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtkZWJ1Z109XCJzY2hlbWUuZGVidWdcIlxuICAgICAgICAgICAgICAgIChtY2hhbmdlKT1cIm1jaGFuZ2VFbWl0dGVyKClcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbl09XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25cIlxuICAgICAgICAgICAgICAgIFthdXRvUGlja1ZhbHVlRmllbGRdPVwic2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dSZXF1aXJlZFRhZ109XCJzY2hlbWUuc2hvd1JlcXVpcmVkVGFnXCJcbiAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25Nc2ddPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uTXNnXCJcbiAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25JY29uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbkljb25cIlxuICAgICAgICAgICAgICAgIFtjb3VudHJ5Q29kZTNdPVwic2NoZW1lLmNvdW50cnlDb2RlM1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZCB8fCAoc2NoZW1lLmRpc2FibGVkSWYgfCBmdW5jdGlvbkNhbGxlcjI6IGZvcm0oKS52YWx1ZSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSkpXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlIChzY2hlbWUudHlwZSA9PSAnYXV0b2NvbXBsZXRlJykge1xuICAgICAgICAgICAgICA8YXBwLWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAgIFtmb3JtXT1cInNjaGVtZS5mb3JtIHx8IGZvcm0oKVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInNjaGVtZS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgW3N0YWNrZWRdPVwic2NoZW1lLnN0YWNrZWRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbEZpZWxkXT1cInNjaGVtZS5sYWJlbEZpZWxkXCJcbiAgICAgICAgICAgICAgICBbbm9Gb3JtYXRdPVwic2NoZW1lLm5vRm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbbGFiZWxUeXBlXT1cInNjaGVtZS5sYWJlbFR5cGUgfCB0b0FueVwiXG4gICAgICAgICAgICAgICAgKG1jaGFuZ2UpPVwibWNoYW5nZUVtaXR0ZXIoKVwiXG4gICAgICAgICAgICAgICAgKG1TZWxlY3RlZE9wdGlvbkxhYmVsKT1cInNldE9wdGlvbkxhYmVsKCRldmVudCwgc2NoZW1lKVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbZGVidWddPVwic2NoZW1lLmRlYnVnXCJcbiAgICAgICAgICAgICAgICBbc2hvd1JlcXVpcmVkVGFnXT1cInNjaGVtZS5zaG93UmVxdWlyZWRUYWdcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwic2NoZW1lLnZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zRnVuY109XCJzY2hlbWUub3B0aW9uc0Z1bmNcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2dcIlxuICAgICAgICAgICAgICAgIFthdXRvUGlja1ZhbHVlRmllbGRdPVwic2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZFwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic2NoZW1lLm9wdGlvbnMgfHwgb3B0aW9uc01hcCgpW3NjaGVtZS5maWVsZCB8IHRvQW55XVwiXG4gICAgICAgICAgICAgICAgW2hpbnRdPVwic2NoZW1lLmhpbnRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzY2hlbWUuZGlzYWJsZWQgfHwgKHNjaGVtZS5kaXNhYmxlZElmIHwgZnVuY3Rpb25DYWxsZXIyOiBmb3JtKCkudmFsdWUgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ3JpY2h0ZXh0Jykge1xuICAgICAgICAgICAgICA8cmljaC10ZXh0LWVkaXRvci1yZlxuICAgICAgICAgICAgICAgIFtmb3JtXT1cInNjaGVtZS5mb3JtIHx8IGZvcm0oKVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInNjaGVtZS5sYWJlbCFcIlxuICAgICAgICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGUhXCJcbiAgICAgICAgICAgICAgICBbc3RhY2tlZF09XCJzY2hlbWUuc3RhY2tlZFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGQhXCJcbiAgICAgICAgICAgICAgICBbbm9Gb3JtYXRdPVwic2NoZW1lLm5vRm9ybWF0IVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsVHlwZV09XCJzY2hlbWUubGFiZWxUeXBlIHwgdG9BbnlcIlxuICAgICAgICAgICAgICAgIChtY2hhbmdlKT1cIm1jaGFuZ2VFbWl0dGVyKClcIlxuICAgICAgICAgICAgICAgIChtU2VsZWN0ZWRPcHRpb25MYWJlbCk9XCJzZXRPcHRpb25MYWJlbCgkZXZlbnQsIHNjaGVtZSlcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZFwiXG4gICAgICAgICAgICAgICAgW2RlYnVnXT1cInNjaGVtZS5kZWJ1ZyFcIlxuICAgICAgICAgICAgICAgIFtzaG93UmVxdWlyZWRUYWddPVwic2NoZW1lLnNob3dSZXF1aXJlZFRhZyFcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlciFcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cInNjaGVtZS52YWx1ZUZpZWxkIVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNGdW5jXT1cInNjaGVtZS5vcHRpb25zRnVuYyFcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2dcIlxuICAgICAgICAgICAgICAgIFthdXRvUGlja1ZhbHVlRmllbGRdPVwic2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZCFcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zIHx8IG9wdGlvbnNNYXAoKVtzY2hlbWUuZmllbGQgfCB0b0FueV1cIlxuICAgICAgICAgICAgICAgIFtoaW50XT1cInNjaGVtZS5oaW50IVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgc2NoZW1lLmRpc2FibGVkIHx8XG4gICAgICAgICAgICAgICAgICAoc2NoZW1lLmRpc2FibGVkSWYhIHwgZnVuY3Rpb25DYWxsZXIyOiBmb3JtKCkudmFsdWUgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVxuICAgICAgICAgICAgICAgIFwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgIDxhcHAtaW5wdXQtYmFzaWNcbiAgICAgICAgICAgICAgICBbbm9Gb3JtYXRdPVwic2NoZW1lLm5vRm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJzY2hlbWUuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtmb3JtXT1cInNjaGVtZS5mb3JtIHx8IGZvcm0oKVwiXG4gICAgICAgICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwic2NoZW1lLnR5cGVcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cInNjaGVtZS52YWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICBbYXV0b1BpY2tWYWx1ZUZpZWxkXT1cInNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgIFtzdGFja2VkXT1cInNjaGVtZS5zdGFja2VkXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxUeXBlXT1cInNjaGVtZS5sYWJlbFR5cGUgfCB0b0FueVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2NoZW1lLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbl09XCIhIXNjaGVtZS5hc3luY1ZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbkljb25dPVwiISFzY2hlbWUuYXN5bmNWYWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICBbZGVidWddPVwic2NoZW1lLmRlYnVnXCJcbiAgICAgICAgICAgICAgICAobWNoYW5nZSk9XCJtY2hhbmdlRW1pdHRlcigpXCJcbiAgICAgICAgICAgICAgICBbc2hvd1JlcXVpcmVkVGFnXT1cInNjaGVtZS5zaG93UmVxdWlyZWRUYWdcIlxuICAgICAgICAgICAgICAgIFtsYWJlbEZpZWxkXT1cInNjaGVtZS5sYWJlbEZpZWxkXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uRm9ybWF0dGVyXT1cInNjaGVtZS5vcHRpb25Gb3JtYXR0ZXJcIlxuICAgICAgICAgICAgICAgIChtU2VsZWN0ZWRPcHRpb25MYWJlbCk9XCJzZXRPcHRpb25MYWJlbCgkZXZlbnQsIHNjaGVtZSlcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zIHx8IG9wdGlvbnNNYXAoKVtzY2hlbWUuZmllbGQgfCB0b0FueV1cIlxuICAgICAgICAgICAgICAgIFtkZWNpbWFsUG9pbnRzXT1cInNjaGVtZS5kZWNpbWFsUG9pbnRzXCJcbiAgICAgICAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludFwiXG4gICAgICAgICAgICAgICAgW21heF09XCJzY2hlbWUubWF4XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cInNjaGVtZS5taW5cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzY2hlbWUucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2dcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzY2hlbWUuZGlzYWJsZWQgfHwgKHNjaGVtZS5kaXNhYmxlZElmIHwgZnVuY3Rpb25DYWxsZXIyOiBmb3JtKCkudmFsdWUgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IHJvdy1jb2xzLWF1dG8ganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICBAaWYgKHNob3dTdWJtaXRCdG4oKSkge1xuICAgICAgICAgIDxhcHAtYnRuIFt0ZXh0XT1cInN1Ym1pdEJ0blRleHQoKVwiIGFjdGlvblR5cGU9XCJzdWJtaXRcIiBncm91cD1cInN1Ym1pdFwiIFtmb3JtXT1cImZvcm0oKVwiIChtY2xpY2spPVwic3VibWl0KHN1Ym1pdEJ0bilcIiAjc3VibWl0QnRuIC8+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChzdWJtaXRCdG5UZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1Ym1pdEJ0blRlbXBsYXRlKClcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvbG9hZGVyPlxuIl19
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9JLE9BQU8sRUFBZ0QsV0FBVyxFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFILE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQW1CLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFl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O3dCQUNyQixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQix5QkFBeUI7d0JBQ3pCLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixTQUFTO3FCQUNWOzhCQU1RLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUN1QixtQkFBbUI7c0JBQWhELE1BQU07dUJBQUMsb0JBQW9CO2dCQUNuQixVQUFVO3NCQUFsQixLQUFLO2dCQXFCOEMsV0FBVztzQkFBOUQsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtnQkFHekIsT0FBTztzQkFBM0IsS0FBSzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFR5cGUsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3JGbiwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRnVuY3Rpb25DYWxsZXIyLCBUb0FueVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy91dGlsaXR5LnBpcGUnO1xuaW1wb3J0IHsgQnRuQ29tcG9uZW50IH0gZnJvbSAnLi4vYnRuL2J0bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRCYXNpY0NvbXBvbmVudCwgT3B0aW9uTGFiZWxUeXBlIH0gZnJvbSAnLi4vaW5wdXQvaW5wdXQtYmFzaWMuY29tcG9uZW50JztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50JztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQvdmFsaWRhdGlvbi1tZXNzYWdlL3ZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGhvbmVOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuLi9waG9uZS1udW1iZXIvcGhvbmUtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nU3dpdGNoRGVmYXVsdCwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vU2VydmljZXMvdXRpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IElPYmplY3RMaXRlcmFsLCBJbnB1dFN1YlR5cGUsIElucHV0VHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBJY29uVHlwZSB9IGZyb20gJy4uL2J0bi9idG4ubW9kZWwnO1xuaW1wb3J0IHsgUmljaFRleHRFZGl0b3JSRkNvbXBvbmVudCB9IGZyb20gJy4uL3JpY2gtdGV4dC1lZGl0b3ItcmYvcmljaC10ZXh0LWVkaXRvci1yZi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUdlbmVyYXRvclNlcnZpY2UgfSBmcm9tICcuL2Zvcm0tZ2VuZXJhdG9yLnNlcnZpY2UnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZvcm1HZW5lcmF0b3I8VEZvcm1Hcm91cCBleHRlbmRzIElPYmplY3RMaXRlcmFsLCBUQmFzZUZvcm1TY2hlbWEgZXh0ZW5kcyB7IGZpZWxkPzogYW55IH0gPSBhbnk+IHtcbiAgZm9ybVNjaGVtYU1hcCA9IHNpZ25hbDx7IFtmaWVsZDogc3RyaW5nXTogVEJhc2VGb3JtU2NoZW1hIH0+KHt9KTtcbiAgZm9ybVNjaGVtYSA9IGNvbXB1dGVkPFRCYXNlRm9ybVNjaGVtYVtdPigoKSA9PiBPYmplY3QudmFsdWVzKHRoaXMuZm9ybVNjaGVtYU1hcCgpKS5maWx0ZXIoKHgpID0+IHgpKTtcbiAgc3ViczogeyBbZmllbGROYW1lOiBzdHJpbmddOiBTdWJzY3JpcHRpb24gfSA9IHt9O1xuXG4gIHB1YmxpYyB1dGlsaXR5U2VydmljZSA9IGluamVjdChVdGlsaXR5U2VydmljZSk7XG4gIHB1YmxpYyBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgdGhpcy5vbkRlc3Ryb3koKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGVzdHJveSgpIHtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuc3VicykuZm9yRWFjaCgocykgPT4ge1xuICAgICAgcz8udW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgICB0aGlzLnN1YnMgPSB7fTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfc2V0Rm9ybVNjaGVtYXMoc2NoZW1hczogVEJhc2VGb3JtU2NoZW1hW10pIHtcbiAgICB0aGlzLmZvcm1TY2hlbWFNYXAuc2V0KChzY2hlbWFzIHx8IFtdKS50b01hcCgnZmllbGQnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3VwZGF0ZUZvcm1TY2hlbWEoZmllbGQ6IHN0cmluZywgc2NoZW1lOiBQYXJ0aWFsPFRCYXNlRm9ybVNjaGVtYT4pIHtcbiAgICB0aGlzLmZvcm1TY2hlbWFNYXAudXBkYXRlKChmb3JtU2NoZW1hTWFwKSA9PiB7XG4gICAgICBjb25zdCBzY2ggPSBmb3JtU2NoZW1hTWFwW2ZpZWxkXTtcbiAgICAgIHJldHVybiAhc2NoID8geyAuLi5mb3JtU2NoZW1hTWFwLCBbZmllbGQgYXMgYW55XTogc2NoZW1lIH0gOiB7IC4uLmZvcm1TY2hlbWFNYXAsIFtmaWVsZCBhcyBhbnldOiB7IC4uLnNjaCwgLi4uc2NoZW1lIH0gfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfcmVtb3ZlRm9ybVNjaGVtYShmaWVsZDogc3RyaW5nKSB7XG4gICAgdGhpcy5mb3JtU2NoZW1hTWFwLnVwZGF0ZSgoZm9ybVNjaGVtYU1hcCkgPT4ge1xuICAgICAgZGVsZXRlIGZvcm1TY2hlbWFNYXBbZmllbGRdO1xuICAgICAgcmV0dXJuIGNsb25lRGVlcChmb3JtU2NoZW1hTWFwKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEZvcm0gc2hvdWxkIGJlIHNldCBiZWZvcmUgdGhlIHRoZSBmb3JtU2NoZW1hXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zvcm0tZ2VuZXJhdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIExvYWRlckNvbXBvbmVudCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUGhvbmVOdW1iZXJDb21wb25lbnQsXG4gICAgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQsXG4gICAgQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIElucHV0QmFzaWNDb21wb25lbnQsXG4gICAgUmljaFRleHRFZGl0b3JSRkNvbXBvbmVudCxcbiAgICBCdG5Db21wb25lbnQsXG4gICAgRnVuY3Rpb25DYWxsZXIyLFxuICAgIFRvQW55UGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUdlbmVyYXRvckNvbXBvbmVudDxURm9ybUdyb3VwIGV4dGVuZHMgeyBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PiB9PiBleHRlbmRzIEJhc2VGb3JtR2VuZXJhdG9yPFxuICBURm9ybUdyb3VwLFxuICBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPlxuPiB7XG4gIEBJbnB1dCgpIGtleUZpZWxkOiAnZmllbGQnIHwgJ2xhYmVsJyA9ICdmaWVsZCc7XG5cbiAgQE91dHB1dCgpIG9uU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3N1Ym1pc3Npb25SZXNwb25zZScpIF9zdWJtaXNzaW9uUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgc3VibWl0RnVuYzogKHZhbHVlOiBhbnkpID0+IFByb21pc2U8YW55PjtcbiAgc3VibWl0QnRuVGV4dCA9IGlucHV0KCdTdWJtaXQnKTtcbiAgc3VibWl0QnRuVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xuICBzdWJtaXRTdWNjZXNzVGV4dCA9IGlucHV0KCdTYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgc2hvd1N1Ym1pdEJ0biA9IGlucHV0KHRydWUpO1xuXG4gIGdyaWRTdHlsZSA9IGlucHV0PG51bWJlciB8ICdhdXRvJz4oKTtcbiAgZ3JpZE1EU3R5bGUgPSBpbnB1dDxudW1iZXIgfCAnYXV0byc+KCk7XG4gIGdyaWRMR1N0eWxlID0gaW5wdXQ8bnVtYmVyIHwgJ2F1dG8nPigpO1xuICBncmlkWFhMU3R5bGUgPSBpbnB1dDxudW1iZXIgfCAnYXV0byc+KCk7XG5cbiAgZm9ybUdyaWRDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgdXNlTG9hZGVyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgbG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgX2xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbXB1dGVkTG9hZGluZyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnVzZUxvYWRlcigpID8gdGhpcy5sb2FkaW5nKCkgfHwgdGhpcy5fbG9hZGluZygpIDogZmFsc2UpKTtcblxuICBmb3JtID0gaW5wdXQ8Rm9ybUdyb3VwPFRGb3JtR3JvdXA+Pih1bmRlZmluZWQsIHt9KTtcbiAgc3VibWlzc2lvblJlc3BvbnNlOiBhbnk7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ2Zvcm1TY2hlbWEnIH0pIHNldCBfZm9ybVNjaGVtYSh2OiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdKSB7XG4gICAgdGhpcy5pbml0KGNsb25lRGVlcCh2LmZpbHRlcigoeCkgPT4geCkpKTtcbiAgfVxuICBASW5wdXQoJ2lzU2hvdycpIHNldCBfaXNTaG93KHY6IGJvb2xlYW4pIHtcbiAgICBpZiAodikgdGhpcy5mb3JtKCk/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIGVsc2UgdGhpcy5mb3JtKCk/LmVuYWJsZSgpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodikgdGhpcy5mb3JtKCk/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgZWxzZSB0aGlzLmZvcm0oKT8uZW5hYmxlKCk7XG4gICAgfSwgNTAwKTtcbiAgfVxuICBvcHRpb25zTWFwID0gc2lnbmFsPElGb3JtT3B0aW9ucz4oe30pO1xuICBmb3JtVmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mb3JtKCk/LmdldFJhd1ZhbHVlKCkpO1xuXG4gIGNvbXB1dGVkRm9ybVNjaGVtYSA9IGNvbXB1dGVkPElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10+KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1WYWwgPSB0aGlzLmZvcm1WYWwoKSxcbiAgICAgICAgZm9ybVNjaGVtYSA9IHRoaXMuZm9ybVNjaGVtYSgpIHx8IFtdO1xuICAgICAgcmV0dXJuIGZvcm1TY2hlbWEuZmlsdGVyKChzY2hlbWUpID0+ICFzY2hlbWUuaGlkZGVuICYmICghc2NoZW1lLmhpZGVJZkZ1bmMgfHwgIXNjaGVtZS5oaWRlSWZGdW5jKGZvcm1WYWwpKSk7XG4gICAgfSxcbiAgICB7IGVxdWFsOiBpc0VxdWFsIH0sXG4gICk7XG4gIC8vIG1pc2NJbmRleDogVE1pc2NJbmRleDtcbiAgcHVibGljIGZvcm1TZXJ2aWNlID0gaW5qZWN0KEZvcm1HZW5lcmF0b3JTZXJ2aWNlKTtcblxuICBpbml0KHNjaGVtYTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXSkge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHRoaXMub25EZXN0cm95KCk7XG4gICAgdGhpcy5fc2V0Rm9ybVNjaGVtYXMoc2NoZW1hIHx8IFtdKTtcbiAgICBpZiAoc2NoZW1hKSBmb3IgKGNvbnN0IHNjaGVtZSBvZiBzY2hlbWEpIHRoaXMuaGFuZGxlRm9ybVNjaGVtZShzY2hlbWUpO1xuICAgIGlmIChzY2hlbWEpXG4gICAgICBmb3IgKGNvbnN0IHNjaGVtZSBvZiBzY2hlbWEpXG4gICAgICAgIGlmIChzY2hlbWUudHJpZ2dlck9uQ2hhbmdlT25Jbml0KSBzY2hlbWUub25DaGFuZ2VGdW5jKHRoaXMuZm9ybSgpLmdldFJhd1ZhbHVlKCksIHRoaXMuZm9ybSgpLmdldFJhd1ZhbHVlKClbc2NoZW1lLmZpZWxkPy50b1N0cmluZygpXSwgdGhpcyk7XG4gIH1cblxuICBoYW5kbGVGb3JtU2NoZW1lKHNjaGVtZTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4pIHtcbiAgICBzY2hlbWUuaWQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpO1xuICAgIGlmIChzY2hlbWUuc3RhY2tlZCA9PSBudWxsKSBzY2hlbWUuc3RhY2tlZCA9IHRydWU7XG4gICAgaWYgKHNjaGVtZS5zaG93VmFsaWRhdGlvbk1zZyA9PSBudWxsKSBzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2cgPSB0cnVlO1xuICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlLmNvbmZpZy5zaG93VmFsaWRhdGlvbk1lc3NhZ2VzQnlEZWZhdWx0KVxuICAgICAgaWYgKHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPT0gbnVsbCAmJiAoIXNjaGVtZS52YWx1ZUZpZWxkIHx8ICFzY2hlbWUubGFiZWxGaWVsZCkpIHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlRm9ybVNjaGVtYShzY2hlbWUuZmllbGQsIHNjaGVtZSk7XG5cbiAgICBpZiAoc2NoZW1lLm9wdGlvbnNJbml0RnVuYylcbiAgICAgIHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHNjaGVtZS5vcHRpb25zID0gcjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgICAgfSk7XG4gICAgaWYgKHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMyKVxuICAgICAgc2NoZW1lLm9wdGlvbnNJbml0RnVuYzIoKS5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgICAgc2NoZW1lLm9wdGlvbnMgPSByO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1TY2hlbWEoc2NoZW1lLmZpZWxkLCB7IG9wdGlvbnM6IHIgfSk7XG4gICAgICB9KTtcbiAgICBpZiAoc2NoZW1lLm9uQ2hhbmdlRnVuYykge1xuICAgICAgaWYgKHNjaGVtZS5kZWJ1ZykgZGVidWdnZXI7XG4gICAgICB0aGlzLnN1YnNbc2NoZW1lLmZpZWxkPy50b1N0cmluZygpXSA9IHRoaXMuZm9ybSgpXG4gICAgICAgID8uY29udHJvbHNbc2NoZW1lLmZpZWxkPy50b1N0cmluZygpXT8udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDApKVxuICAgICAgICAuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgICAgc2NoZW1lLm9uQ2hhbmdlRnVuYyh0aGlzLmZvcm0oKS5nZXRSYXdWYWx1ZSgpLCByLCB0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGV0YWNoRm9ybVNjaGVtZShmaWVsZE5hbWU/OiBrZXlvZiBURm9ybUdyb3VwKSB7XG4gICAgdGhpcy5zdWJzW2ZpZWxkTmFtZSBhcyBzdHJpbmddLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBtY2hhbmdlRW1pdHRlcigpIHtcbiAgICB0aGlzLm1jaGFuZ2UuZW1pdCh0aGlzLmZvcm0oKS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIGdldEZvcm1TY2hlbWUgPSAoZmllbGROYW1lOiBrZXlvZiBURm9ybUdyb3VwKSA9PiB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVNjaGVtYU1hcCgpW2ZpZWxkTmFtZSBhcyBzdHJpbmddO1xuICB9O1xuXG4gIGFkZFRvRm9ybVNjaGVtYShmb3JtU2NoZW1lOiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPikge1xuICAgIHRoaXMucmVtb3ZlRnJvbUZvcm1TY2hlbWEoZm9ybVNjaGVtZS5maWVsZCk7XG4gICAgdGhpcy5oYW5kbGVGb3JtU2NoZW1lKGNsb25lRGVlcChmb3JtU2NoZW1lKSk7XG4gIH1cblxuICB1cGRhdGVGb3JtU2NoZW1hKGZpZWxkTmFtZToga2V5b2YgVEZvcm1Hcm91cCwgc2NoZW1lOiBQYXJ0aWFsPElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+Pikge1xuICAgIHJldHVybiBzdXBlci5fdXBkYXRlRm9ybVNjaGVtYShmaWVsZE5hbWUgYXMgc3RyaW5nLCBzY2hlbWUpO1xuICB9XG5cbiAgcmVtb3ZlRnJvbUZvcm1TY2hlbWEoZmllbGROYW1lOiBrZXlvZiBURm9ybUdyb3VwKSB7XG4gICAgdGhpcy5kZXRhY2hGb3JtU2NoZW1lKGZpZWxkTmFtZSk7XG4gICAgY29uc3Qgb25SZW1vdmUgPSB0aGlzLmZvcm1TY2hlbWFNYXAoKVtmaWVsZE5hbWUgYXMgc3RyaW5nXT8ub25SZW1vdmVGdW5jO1xuICAgIGlmIChvblJlbW92ZSkgb25SZW1vdmUodGhpcy5mb3JtKCkuZ2V0UmF3VmFsdWUoKSBhcyBhbnksIHRoaXMuZm9ybSgpLmNvbnRyb2xzW2ZpZWxkTmFtZSBhcyBhbnldLCB0aGlzKTtcbiAgICB0aGlzLl9yZW1vdmVGb3JtU2NoZW1hKGZpZWxkTmFtZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgc2V0T3B0aW9uTGFiZWwoJGV2ZW50OiBhbnksIHNjaGVtZTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4pIHtcbiAgICBzY2hlbWUuc2VsZWN0ZWRPcHRpb25MYWJlbCA9ICRldmVudDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdChidG4/OiBCdG5Db21wb25lbnQpIHtcbiAgICBpZiAodGhpcy5zdWJtaXRGdW5jKSB7XG4gICAgICBidG4/LnNldExvYWRlcih0cnVlKTtcbiAgICAgIHRoaXMuX2xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgY29uc3QgZm9ybVZhbCA9IHRoaXMuZm9ybVZhbCgpO1xuICAgICAgdGhpcy5vblN1Ym1pdC5lbWl0KGZvcm1WYWwpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnN1Ym1pdEZ1bmMoZm9ybVZhbCk7XG4gICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaW5mbyh0aGlzLnN1Ym1pdFN1Y2Nlc3NUZXh0KCksIDEpO1xuICAgICAgICB0aGlzLl9zdWJtaXNzaW9uUmVzcG9uc2UuZW1pdCh0aGlzLnN1Ym1pc3Npb25SZXNwb25zZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmluZm8oZXJyb3IsIDApO1xuICAgICAgfVxuICAgICAgdGhpcy5fbG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgYnRuPy5zZXRMb2FkZXIoZmFsc2UpO1xuICAgIH0gZWxzZSB0aGlzLm9uU3VibWl0LmVtaXQodGhpcy5mb3JtVmFsKCkpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VGb3JtU2NoZW1hPFxuICBULFxuICBDb21wb25lbnQgZXh0ZW5kcyBCYXNlRm9ybUdlbmVyYXRvcjxUPixcbiAgVEZvcm1Hcm91cCBleHRlbmRzIHtcbiAgICBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgfSA9IGFueSxcbj4ge1xuICBhc3luY1ZhbGlkYXRvcnM/OiBBc3luY1ZhbGlkYXRvckZuW107XG4gIGF1dG9QaWNrVmFsdWVGaWVsZD86IGJvb2xlYW47XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBjbGVhck9uRGlzYWJsZT86IGJvb2xlYW47XG4gIGNscz86IHN0cmluZztcbiAgY291bnRyeUNvZGUzPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IElCYXNlRm9ybVNjaGVtYTxULCBDb21wb25lbnQsIFRGb3JtR3JvdXA+W107XG4gIGRlY2ltYWxQb2ludHM/OiBudW1iZXI7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWRJZj86IChyb3c6IGFueSwgY2VsbEZpZWxkPzogc3RyaW5nKSA9PiBib29sZWFuO1xuICBoaWRlSWZGdW5jPzogKHJvdykgPT4gYm9vbGVhbjtcbiAgZmllbGQ6IGtleW9mIFRGb3JtR3JvdXA7XG4gIGZvcm0/OiBGb3JtR3JvdXA8VEZvcm1Hcm91cD47XG4gIGdldENvdW50cnlDb2RlM0tleT86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgaGludD86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICBpc1NlYXJjaEZpZWxkPzogYm9vbGVhbjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGxhYmVsRmllbGQ/OiBzdHJpbmc7XG4gIGxhYmVsVHlwZT86IE9wdGlvbkxhYmVsVHlwZTtcbiAgb3B0aW9uTGFiZWxGb3JtYXR0ZXI/OiAocm93KSA9PiBzdHJpbmc7XG4gIG1heD86IG51bWJlcjtcbiAgbWluPzogbnVtYmVyO1xuICBub0Zvcm1hdD86IGJvb2xlYW47XG4gIG9wdGlvbkZvcm1hdHRlcj86IChpdGVtOiBhbnkpID0+IHN0cmluZztcbiAgb3B0aW9ucz86IGFueVtdO1xuICBvcHRpb25zQXN5bmM/OiBPYnNlcnZhYmxlPGFueVtdPiB8IFByb21pc2U8YW55W10+O1xuICBvcHRpb25zSW5pdEZ1bmM/OiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgb3B0aW9uc0luaXRGdW5jMj86ICgpID0+IE9ic2VydmFibGU8YW55W10+O1xuICBvcHRpb25zS2V5Pzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgc2VhcmNoRnVuYz86ICguLi5hcmdzKSA9PiBhbnk7XG4gIHNldEFzQ291bnRyeUNvZGUzPzogYm9vbGVhbjtcbiAgc2hvd1ZhbGlkYXRpb24/OiBib29sZWFuO1xuICBzaG93VmFsaWRhdGlvbkljb24/OiBib29sZWFuO1xuICB0ZW1wbGF0ZVZhbHVlPzogYW55O1xuICB0eXBlPzogSW5wdXRUeXBlO1xuICB2YWxpZGF0b3JzPzogVmFsaWRhdG9yRm5bXTtcbiAgdmFsdWU/OiBhbnk7XG4gIHZhbHVlRmllbGQ/OiBzdHJpbmc7XG4gIG9wdGlvbnNGdW5jPzogKC4uLnZhbDogYW55KSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgdHJpZ2dlck9uQ2hhbmdlT25Jbml0PzogYm9vbGVhbjtcbiAgZm9ybWF0dGVyPzogKHJvdzogeyBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogYW55IH0sIGZpZWxkTmFtZToga2V5b2YgVEZvcm1Hcm91cCkgPT4gc3RyaW5nO1xuICBleHRyYT86IGFueTtcbiAgb25DaGFuZ2VGdW5jPzogKHJvdzogeyBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXT86IFRGb3JtR3JvdXBbS11bJ3ZhbHVlJ10gfSwgY2VsbFZhbHVlPzogYW55LCBjb21wb25lbnQ/OiBDb21wb25lbnQpID0+IE9ic2VydmFibGU8YW55W10+IHwgYW55O1xuICBvblJlbW92ZUZ1bmM/OiAocm93OiB7IFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBURm9ybUdyb3VwW0tdWyd2YWx1ZSddIH0sIGNlbGw/OiBhbnksIGNvbXBvbmVudD86IENvbXBvbmVudCkgPT4gYW55O1xuICBzZWxlY3RlZE9wdGlvbkxhYmVsPzogc3RyaW5nO1xuICBzdGFja2VkPzogYm9vbGVhbjtcbiAgZGVidWc/OiBib29sZWFuO1xuICBzaG93VmFsaWRhdGlvbk1zZz86IGJvb2xlYW47XG4gIGRvbnRGb3JtYXRBc0lucHV0PzogYm9vbGVhbjtcbiAgc2hvd1JlcXVpcmVkVGFnPzogYm9vbGVhbjtcbiAgdGFibGVGb3JtYXR0ZXI/OiAodmFsOiBhbnkpID0+IHN0cmluZyB8IHVuZGVmaW5lZCB8IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB8IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgaWNvbj86IEljb25UeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtU2NoZW1hPFxuICBURm9ybUdyb3VwIGV4dGVuZHMge1xuICAgIFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+O1xuICB9ID0gYW55LFxuPiBleHRlbmRzIElCYXNlRm9ybVNjaGVtYTxURm9ybUdyb3VwLCBGb3JtR2VuZXJhdG9yQ29tcG9uZW50PFRGb3JtR3JvdXA+PiB7XG4gIGNoaWxkcmVuPzogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXTtcbiAgbGFiZWxUeXBlPzogT3B0aW9uTGFiZWxUeXBlO1xuICBmaWVsZDoga2V5b2YgVEZvcm1Hcm91cDtcbiAgc3ViVHlwZT86IElucHV0U3ViVHlwZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1TY2hlbWEyPFRTdHJ1Y3QgPSBhbnk+XG4gIGV4dGVuZHMgSUZvcm1TY2hlbWE8e1xuICAgIFtLIGluIGtleW9mIFRTdHJ1Y3RdPzogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgfT4ge31cblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybU9wdGlvbnMge1xuICBbZmllbGQ6IHN0cmluZ106IGFueTtcbn1cbiIsIjxsb2FkZXIgW2xvYWRpbmddPVwiY29tcHV0ZWRMb2FkaW5nKClcIj5cbiAgPGZvcm0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyb3cgcm93LWNvbHMte3sgZ3JpZFN0eWxlKCkgfX0gcm93LWNvbHMtbWQte3sgZ3JpZE1EU3R5bGUoKSB9fSByb3ctY29scy1sZy17eyBncmlkTEdTdHlsZSgpIH19IHJvdy1jb2xzLXh4bC17e1xuICAgICAgICBncmlkWFhMU3R5bGUoKVxuICAgICAgfX0gYWxpZ24taXRlbXMtY2VudGVyIHt7IGZvcm1HcmlkQ2xhc3MoKSB9fVwiPlxuICAgICAgQGZvciAoc2NoZW1lIG9mIGNvbXB1dGVkRm9ybVNjaGVtYSgpOyB0cmFjayBzY2hlbWUuZmllbGQpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB7eyBzY2hlbWUuY2xzIH19IFwiPlxuICAgICAgICAgIEBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgIEBjYXNlIChzY2hlbWUudHlwZSA9PSAndGVsJykge1xuICAgICAgICAgICAgICA8YXBwLXBob25lLW51bWJlclxuICAgICAgICAgICAgICAgIFtmb3JtXT1cInNjaGVtZS5mb3JtIHx8IGZvcm0oKVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInNjaGVtZS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgW3N0YWNrZWRdPVwic2NoZW1lLnN0YWNrZWRcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZFwiXG4gICAgICAgICAgICAgICAgW25vRm9ybWF0XT1cInNjaGVtZS5ub0Zvcm1hdFwiXG4gICAgICAgICAgICAgICAgW2RlYnVnXT1cInNjaGVtZS5kZWJ1Z1wiXG4gICAgICAgICAgICAgICAgKG1jaGFuZ2UpPVwibWNoYW5nZUVtaXR0ZXIoKVwiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvblwiXG4gICAgICAgICAgICAgICAgW2F1dG9QaWNrVmFsdWVGaWVsZF09XCJzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICBbc2hvd1JlcXVpcmVkVGFnXT1cInNjaGVtZS5zaG93UmVxdWlyZWRUYWdcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2dcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbkljb25dPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uSWNvblwiXG4gICAgICAgICAgICAgICAgW2NvdW50cnlDb2RlM109XCJzY2hlbWUuY291bnRyeUNvZGUzXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2NoZW1lLmRpc2FibGVkIHx8IChzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogZm9ybSgpLnZhbHVlIDogKHNjaGVtZS5maWVsZCB8IHRvQW55KSlcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKHNjaGVtZS50eXBlID09ICdhdXRvY29tcGxldGUnKSB7XG4gICAgICAgICAgICAgIDxhcHAtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm0gfHwgZm9ybSgpXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwic2NoZW1lLmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbY2xlYXJPbkRpc2FibGVdPVwic2NoZW1lLmNsZWFyT25EaXNhYmxlXCJcbiAgICAgICAgICAgICAgICBbc3RhY2tlZF09XCJzY2hlbWUuc3RhY2tlZFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGRcIlxuICAgICAgICAgICAgICAgIFtub0Zvcm1hdF09XCJzY2hlbWUubm9Gb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbFR5cGVdPVwic2NoZW1lLmxhYmVsVHlwZSB8IHRvQW55XCJcbiAgICAgICAgICAgICAgICAobWNoYW5nZSk9XCJtY2hhbmdlRW1pdHRlcigpXCJcbiAgICAgICAgICAgICAgICAobVNlbGVjdGVkT3B0aW9uTGFiZWwpPVwic2V0T3B0aW9uTGFiZWwoJGV2ZW50LCBzY2hlbWUpXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJzY2hlbWUuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtkZWJ1Z109XCJzY2hlbWUuZGVidWdcIlxuICAgICAgICAgICAgICAgIFtzaG93UmVxdWlyZWRUYWddPVwic2NoZW1lLnNob3dSZXF1aXJlZFRhZ1wiXG4gICAgICAgICAgICAgICAgW29wdGlvbkZvcm1hdHRlcl09XCJzY2hlbWUub3B0aW9uRm9ybWF0dGVyXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJzY2hlbWUudmFsdWVGaWVsZFwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNGdW5jXT1cInNjaGVtZS5vcHRpb25zRnVuY1wiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uTXNnXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbk1zZ1wiXG4gICAgICAgICAgICAgICAgW2F1dG9QaWNrVmFsdWVGaWVsZF09XCJzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJzY2hlbWUub3B0aW9ucyB8fCBvcHRpb25zTWFwKClbc2NoZW1lLmZpZWxkIHwgdG9BbnldXCJcbiAgICAgICAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZCB8fCAoc2NoZW1lLmRpc2FibGVkSWYgfCBmdW5jdGlvbkNhbGxlcjI6IGZvcm0oKS52YWx1ZSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSkpXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlIChzY2hlbWUudHlwZSA9PSAncmljaHRleHQnKSB7XG4gICAgICAgICAgICAgIDxyaWNoLXRleHQtZWRpdG9yLXJmXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm0gfHwgZm9ybSgpXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwic2NoZW1lLmxhYmVsIVwiXG4gICAgICAgICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZSFcIlxuICAgICAgICAgICAgICAgIFtzdGFja2VkXT1cInNjaGVtZS5zdGFja2VkXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxGaWVsZF09XCJzY2hlbWUubGFiZWxGaWVsZCFcIlxuICAgICAgICAgICAgICAgIFtub0Zvcm1hdF09XCJzY2hlbWUubm9Gb3JtYXQhXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxUeXBlXT1cInNjaGVtZS5sYWJlbFR5cGUgfCB0b0FueVwiXG4gICAgICAgICAgICAgICAgKG1jaGFuZ2UpPVwibWNoYW5nZUVtaXR0ZXIoKVwiXG4gICAgICAgICAgICAgICAgKG1TZWxlY3RlZE9wdGlvbkxhYmVsKT1cInNldE9wdGlvbkxhYmVsKCRldmVudCwgc2NoZW1lKVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbZGVidWddPVwic2NoZW1lLmRlYnVnIVwiXG4gICAgICAgICAgICAgICAgW3Nob3dSZXF1aXJlZFRhZ109XCJzY2hlbWUuc2hvd1JlcXVpcmVkVGFnIVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbkZvcm1hdHRlcl09XCJzY2hlbWUub3B0aW9uRm9ybWF0dGVyIVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwic2NoZW1lLnZhbHVlRmllbGQhXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc0Z1bmNdPVwic2NoZW1lLm9wdGlvbnNGdW5jIVwiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uTXNnXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbk1zZ1wiXG4gICAgICAgICAgICAgICAgW2F1dG9QaWNrVmFsdWVGaWVsZF09XCJzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkIVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic2NoZW1lLm9wdGlvbnMgfHwgb3B0aW9uc01hcCgpW3NjaGVtZS5maWVsZCB8IHRvQW55XVwiXG4gICAgICAgICAgICAgICAgW2hpbnRdPVwic2NoZW1lLmhpbnQhXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICBzY2hlbWUuZGlzYWJsZWQgfHxcbiAgICAgICAgICAgICAgICAgIChzY2hlbWUuZGlzYWJsZWRJZiEgfCBmdW5jdGlvbkNhbGxlcjI6IGZvcm0oKS52YWx1ZSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSkpXG4gICAgICAgICAgICAgICAgXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgPGFwcC1pbnB1dC1iYXNpY1xuICAgICAgICAgICAgICAgIFtub0Zvcm1hdF09XCJzY2hlbWUubm9Gb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm0gfHwgZm9ybSgpXCJcbiAgICAgICAgICAgICAgICBbY2xlYXJPbkRpc2FibGVdPVwic2NoZW1lLmNsZWFyT25EaXNhYmxlXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJzY2hlbWUudHlwZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwic2NoZW1lLnZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgIFthdXRvUGlja1ZhbHVlRmllbGRdPVwic2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZFwiXG4gICAgICAgICAgICAgICAgW3N0YWNrZWRdPVwic2NoZW1lLnN0YWNrZWRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbFR5cGVdPVwic2NoZW1lLmxhYmVsVHlwZSB8IHRvQW55XCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzY2hlbWUuY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cIiEhc2NoZW1lLmFzeW5jVmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uSWNvbl09XCIhIXNjaGVtZS5hc3luY1ZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIFtkZWJ1Z109XCJzY2hlbWUuZGVidWdcIlxuICAgICAgICAgICAgICAgIChtY2hhbmdlKT1cIm1jaGFuZ2VFbWl0dGVyKClcIlxuICAgICAgICAgICAgICAgIFtzaG93UmVxdWlyZWRUYWddPVwic2NoZW1lLnNob3dSZXF1aXJlZFRhZ1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGRcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgKG1TZWxlY3RlZE9wdGlvbkxhYmVsKT1cInNldE9wdGlvbkxhYmVsKCRldmVudCwgc2NoZW1lKVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic2NoZW1lLm9wdGlvbnMgfHwgb3B0aW9uc01hcCgpW3NjaGVtZS5maWVsZCB8IHRvQW55XVwiXG4gICAgICAgICAgICAgICAgW2RlY2ltYWxQb2ludHNdPVwic2NoZW1lLmRlY2ltYWxQb2ludHNcIlxuICAgICAgICAgICAgICAgIFtoaW50XT1cInNjaGVtZS5oaW50XCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cInNjaGVtZS5tYXhcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwic2NoZW1lLm1pblwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNjaGVtZS5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInNjaGVtZS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uTXNnXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbk1zZ1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZCB8fCAoc2NoZW1lLmRpc2FibGVkSWYgfCBmdW5jdGlvbkNhbGxlcjI6IGZvcm0oKS52YWx1ZSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSkpXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgcm93LWNvbHMtYXV0byBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgIEBpZiAoc2hvd1N1Ym1pdEJ0bigpKSB7XG4gICAgICAgICAgPGFwcC1idG4gW3RleHRdPVwic3VibWl0QnRuVGV4dCgpXCIgYWN0aW9uVHlwZT1cInN1Ym1pdFwiIGdyb3VwPVwic3VibWl0XCIgW2Zvcm1dPVwiZm9ybSgpXCIgKG1jbGljayk9XCJzdWJtaXQoc3VibWl0QnRuKVwiICNzdWJtaXRCdG4gLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHN1Ym1pdEJ0blRlbXBsYXRlKCkpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VibWl0QnRuVGVtcGxhdGUoKVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9sb2FkZXI+XG4iXX0=
@@ -13,6 +13,7 @@ import { filter } from 'rxjs';
13
13
  import { MatTooltipModule } from '@angular/material/tooltip';
14
14
  import { TranslatePipe } from '../../../pipes/translate.pipe';
15
15
  import { Config } from '../../../../configs/index.config';
16
+ import { toSignal } from '@angular/core/rxjs-interop';
16
17
  import * as i0 from "@angular/core";
17
18
  import * as i1 from "../input.service";
18
19
  import * as i2 from "@angular/common";
@@ -45,6 +46,7 @@ export class DateInputComponent {
45
46
  seconds: seconds?.slice(0, 2),
46
47
  meridiem: +hours > 12 ? 12 : 0,
47
48
  });
49
+ const formVal = this.formValue();
48
50
  // this.matCalendar?.updateTodaysDate();
49
51
  // this.matCalendar?._goToDateInView(this.form.controls.date.value,'month')
50
52
  }
@@ -53,7 +55,6 @@ export class DateInputComponent {
53
55
  // this.skipPatchControl = true;
54
56
  this.form().reset();
55
57
  }
56
- this.formValue.set(this.form().getRawValue());
57
58
  }
58
59
  set _max(v) {
59
60
  if (v)
@@ -80,8 +81,8 @@ export class DateInputComponent {
80
81
  formattedValue: new FormControl(null),
81
82
  rawValue: new FormControl(null),
82
83
  }));
83
- this.formValue = signal(this.form().getRawValue());
84
- // formValue = toSignal(this.form().valueChanges);
84
+ // formValue = signal(this.form().getRawValue());
85
+ this.formValue = toSignal(this.form().valueChanges);
85
86
  this.valueChanged = new EventEmitter();
86
87
  this.showTime = signal(null);
87
88
  this.inpCl = input('control-bg-gray');
@@ -137,7 +138,6 @@ export class DateInputComponent {
137
138
  this.form().controls.formattedValue.patchValue(this.datePipe.transform(this.controlValue || date, `MMM. dd, yyyy${this.showTime() ? '. hh:mm:ss a' : ''}`), {
138
139
  emitEvent: false,
139
140
  });
140
- this.formValue.set(this.form().getRawValue());
141
141
  });
142
142
  };
143
143
  this.formatterFunction();
@@ -160,7 +160,7 @@ export class DateInputComponent {
160
160
  }
161
161
  }
162
162
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: DateInputComponent, deps: [{ token: i1.InputService }, { token: i2.DatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
163
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0", type: DateInputComponent, isStandalone: true, selector: "date-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, inpCl: { classPropertyName: "inpCl", publicName: "inpCl", isSignal: true, isRequired: false, transformFunction: null }, cls: { classPropertyName: "cls", publicName: "cls", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, valid: { classPropertyName: "valid", publicName: "valid", isSignal: false, isRequired: false, transformFunction: null }, _max: { classPropertyName: "_max", publicName: "max", isSignal: false, isRequired: false, transformFunction: null }, _min: { classPropertyName: "_min", publicName: "min", isSignal: false, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, _type: { classPropertyName: "_type", publicName: "type", isSignal: false, isRequired: false, transformFunction: null }, showValidation: { classPropertyName: "showValidation", publicName: "showValidation", isSignal: false, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChanged: "valueChanged" }, viewQueries: [{ propertyName: "matCalendar", first: true, predicate: MatCalendar, descendants: true }], ngImport: i0, template: "<div class=\"customdate {{ cls() }} {{ inputClass() }}\" [ngClass]=\"{ disabled: readonly() || disabled() }\">\n <div class=\"row g-1 w-100\">\n <!-- <div class=\"col overflow-auto hide-scroll-x\" [formGroup]=\"form2\">\n <div class=\"d-flex w-100 align-items-center\" [formGroup]=\"form2\">\n <ng-container *ngFor=\"let item of iS.dateInputChunks;let ci=index\">\n <div [style.width]=\"'auto'||item.width\" class=\" d-flex align-items-center\" *ngIf=\"ci<chunksLength\">\n <span>{{item.seperator}}</span>\n <input noformat class=\"d-i-f\" id=\"{{this.id}}_di_{{item.formControlName}}\" [type]=\"item.type\"\n [formControlName]=\"item.formControlName\" [matTooltipShowDelay]=\"2000\"\n [matTooltip]=\"item.label\" [style.width.ch]=\"item?.length\" [placeholder]=\"item.placeholder\">\n </div>\n </ng-container>\n\n\n </div>\n </div> -->\n <div class=\"col\">\n <input\n class=\"w-100 border-0\"\n [value]=\"formValue()?.formattedValue\"\n (change)=\"iS.formatUserInput($event, form(), showTime(), id())\"\n placeholder=\"dd/mm/yyyy{{ showTime() ? ' hh:mm:ss:aa' : '' }}\"\n [readOnly]=\"disabled()\" />\n <!-- <input class=\"w-100 border-0\" [value]=\"form.controls.formattedValue.value\" (change)=\"formatUserInput()\"\n [readOnly]=\"control?.disabled\" [mat-menu-trigger-for]=\"control?.disabled||readonly?null:picker\"> -->\n </div>\n @if (!disabled() && !readonly()) {\n <div class=\"col-auto\">\n <mat-datepicker-toggle\n matIconSuffix\n [mat-menu-trigger-for]=\"picker\"\n (click)=\"formValue()?.date ? matCalRef._goToDateInView(formValue()?.date, 'month') : null\"></mat-datepicker-toggle>\n </div>\n }\n </div>\n</div>\n\n<mat-menu class=\"full-width\" #picker=\"matMenu\" xPosition=\"after\">\n <div class=\"customdate-picker\" [ngClass]=\"{ 'pe-3': showTime() }\" (click)=\"$event.stopPropagation()\">\n <div class=\"row justify-content-center m-0 gy-2\">\n <div class=\"col-lg-auto\">\n <div class=\"calendar-cont\" #calendarCont>\n <mat-calendar\n #matCalRef\n [selected]=\"formValue()?.date\"\n [maxDate]=\"max()\"\n [minDate]=\"min()\"\n (selectedChange)=\"form().controls.date.patchValue($event)\"></mat-calendar>\n </div>\n </div>\n @if (showTime()) {\n <div class=\"col-lg-auto\">\n <div class=\"time-cont text-center\">\n <div class=\"d-flex align-items-center\">\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'HR' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.hours\">\n @for (item of iS.timeHours(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'MIN' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.minutes\">\n @for (item of iS.timeMinutes(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'S' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.seconds\">\n @for (item of iS.timeSeconds(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\">\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.meridiem\">\n @for (item of iS.timeMeridiem(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item.incrementor\">\n {{ item.label | uppercase }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</mat-menu>\n", styles: ["input:focus-visible{outline:none}input{background-color:transparent!important}.d-i-f{border:none;width:auto;min-width:0;padding:0;text-align:center}:host{--phFC: #484848 !important}:host ::placeholder{text-transform:none;color:var(--phFC)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i4.MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }, { kind: "ngmodule", type: MatRippleModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }] }); }
163
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0", type: DateInputComponent, isStandalone: true, selector: "date-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, inpCl: { classPropertyName: "inpCl", publicName: "inpCl", isSignal: true, isRequired: false, transformFunction: null }, cls: { classPropertyName: "cls", publicName: "cls", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, valid: { classPropertyName: "valid", publicName: "valid", isSignal: false, isRequired: false, transformFunction: null }, _max: { classPropertyName: "_max", publicName: "max", isSignal: false, isRequired: false, transformFunction: null }, _min: { classPropertyName: "_min", publicName: "min", isSignal: false, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, _type: { classPropertyName: "_type", publicName: "type", isSignal: false, isRequired: false, transformFunction: null }, showValidation: { classPropertyName: "showValidation", publicName: "showValidation", isSignal: false, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChanged: "valueChanged" }, viewQueries: [{ propertyName: "matCalendar", first: true, predicate: MatCalendar, descendants: true }], ngImport: i0, template: "<div class=\"customdate ps-2 {{ cls() }} {{ inputClass() }}\" [ngClass]=\"{ disabled: readonly() || disabled() }\">\n <div class=\"row g-1 w-100 align-items-center\">\n <!-- <div class=\"col overflow-auto hide-scroll-x\" [formGroup]=\"form2\">\n <div class=\"d-flex w-100 align-items-center\" [formGroup]=\"form2\">\n <ng-container *ngFor=\"let item of iS.dateInputChunks;let ci=index\">\n <div [style.width]=\"'auto'||item.width\" class=\" d-flex align-items-center\" *ngIf=\"ci<chunksLength\">\n <span>{{item.seperator}}</span>\n <input noformat class=\"d-i-f\" id=\"{{this.id}}_di_{{item.formControlName}}\" [type]=\"item.type\"\n [formControlName]=\"item.formControlName\" [matTooltipShowDelay]=\"2000\"\n [matTooltip]=\"item.label\" [style.width.ch]=\"item?.length\" [placeholder]=\"item.placeholder\">\n </div>\n </ng-container>\n\n\n </div>\n </div> -->\n <div class=\"col\">\n <input\n class=\"w-100 border-0\"\n [value]=\"formValue()?.formattedValue\"\n (change)=\"iS.formatUserInput($event, form(), showTime(), id())\"\n placeholder=\"dd/mm/yyyy{{ showTime() ? ' hh:mm:ss:aa' : '' }}\"\n [readOnly]=\"disabled()\" />\n <!-- <input class=\"w-100 border-0\" [value]=\"form.controls.formattedValue.value\" (change)=\"formatUserInput()\"\n [readOnly]=\"control?.disabled\" [mat-menu-trigger-for]=\"control?.disabled||readonly?null:picker\"> -->\n </div>\n @if (!disabled() || !readonly() ) {\n <div class=\"col-auto\">\n <mat-datepicker-toggle\n matIconSuffix\n [mat-menu-trigger-for]=\"picker\"\n (click)=\"formValue()?.date ? matCalRef._goToDateInView(formValue()?.date, 'month') : null\"></mat-datepicker-toggle>\n </div>\n }\n </div>\n</div>\n\n<mat-menu class=\"full-width\" #picker=\"matMenu\" xPosition=\"after\">\n <div class=\"customdate-picker\" [ngClass]=\"{ 'pe-3': showTime() }\" (click)=\"$event.stopPropagation()\">\n <div class=\"row justify-content-center m-0 gy-2\">\n <div class=\"col-lg-auto\">\n <div class=\"calendar-cont\" #calendarCont>\n <mat-calendar\n #matCalRef\n [selected]=\"formValue()?.date\"\n [maxDate]=\"max()\"\n [minDate]=\"min()\"\n (selectedChange)=\"form().controls.date.patchValue($event)\"></mat-calendar>\n </div>\n </div>\n @if (showTime()) {\n <div class=\"col-lg-auto\">\n <div class=\"time-cont text-center\">\n <div class=\"d-flex align-items-center\">\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'HR' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.hours\">\n @for (item of iS.timeHours(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'MIN' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.minutes\">\n @for (item of iS.timeMinutes(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'S' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.seconds\">\n @for (item of iS.timeSeconds(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\">\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.meridiem\">\n @for (item of iS.timeMeridiem(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item.incrementor\">\n {{ item.label | uppercase }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</mat-menu>\n", styles: ["input:focus-visible{outline:none}input{background-color:transparent!important}.d-i-f{border:none;width:auto;min-width:0;padding:0;text-align:center}:host{--phFC: #484848 !important}:host ::placeholder{text-transform:none;color:var(--phFC)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i4.MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }, { kind: "ngmodule", type: MatRippleModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }] }); }
164
164
  }
165
165
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: DateInputComponent, decorators: [{
166
166
  type: Component,
@@ -187,7 +187,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
187
187
  NgSwitchDefault,
188
188
  ReactiveFormsModule,
189
189
  MatMenuModule,
190
- ], template: "<div class=\"customdate {{ cls() }} {{ inputClass() }}\" [ngClass]=\"{ disabled: readonly() || disabled() }\">\n <div class=\"row g-1 w-100\">\n <!-- <div class=\"col overflow-auto hide-scroll-x\" [formGroup]=\"form2\">\n <div class=\"d-flex w-100 align-items-center\" [formGroup]=\"form2\">\n <ng-container *ngFor=\"let item of iS.dateInputChunks;let ci=index\">\n <div [style.width]=\"'auto'||item.width\" class=\" d-flex align-items-center\" *ngIf=\"ci<chunksLength\">\n <span>{{item.seperator}}</span>\n <input noformat class=\"d-i-f\" id=\"{{this.id}}_di_{{item.formControlName}}\" [type]=\"item.type\"\n [formControlName]=\"item.formControlName\" [matTooltipShowDelay]=\"2000\"\n [matTooltip]=\"item.label\" [style.width.ch]=\"item?.length\" [placeholder]=\"item.placeholder\">\n </div>\n </ng-container>\n\n\n </div>\n </div> -->\n <div class=\"col\">\n <input\n class=\"w-100 border-0\"\n [value]=\"formValue()?.formattedValue\"\n (change)=\"iS.formatUserInput($event, form(), showTime(), id())\"\n placeholder=\"dd/mm/yyyy{{ showTime() ? ' hh:mm:ss:aa' : '' }}\"\n [readOnly]=\"disabled()\" />\n <!-- <input class=\"w-100 border-0\" [value]=\"form.controls.formattedValue.value\" (change)=\"formatUserInput()\"\n [readOnly]=\"control?.disabled\" [mat-menu-trigger-for]=\"control?.disabled||readonly?null:picker\"> -->\n </div>\n @if (!disabled() && !readonly()) {\n <div class=\"col-auto\">\n <mat-datepicker-toggle\n matIconSuffix\n [mat-menu-trigger-for]=\"picker\"\n (click)=\"formValue()?.date ? matCalRef._goToDateInView(formValue()?.date, 'month') : null\"></mat-datepicker-toggle>\n </div>\n }\n </div>\n</div>\n\n<mat-menu class=\"full-width\" #picker=\"matMenu\" xPosition=\"after\">\n <div class=\"customdate-picker\" [ngClass]=\"{ 'pe-3': showTime() }\" (click)=\"$event.stopPropagation()\">\n <div class=\"row justify-content-center m-0 gy-2\">\n <div class=\"col-lg-auto\">\n <div class=\"calendar-cont\" #calendarCont>\n <mat-calendar\n #matCalRef\n [selected]=\"formValue()?.date\"\n [maxDate]=\"max()\"\n [minDate]=\"min()\"\n (selectedChange)=\"form().controls.date.patchValue($event)\"></mat-calendar>\n </div>\n </div>\n @if (showTime()) {\n <div class=\"col-lg-auto\">\n <div class=\"time-cont text-center\">\n <div class=\"d-flex align-items-center\">\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'HR' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.hours\">\n @for (item of iS.timeHours(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'MIN' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.minutes\">\n @for (item of iS.timeMinutes(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'S' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.seconds\">\n @for (item of iS.timeSeconds(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\">\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.meridiem\">\n @for (item of iS.timeMeridiem(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item.incrementor\">\n {{ item.label | uppercase }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</mat-menu>\n", styles: ["input:focus-visible{outline:none}input{background-color:transparent!important}.d-i-f{border:none;width:auto;min-width:0;padding:0;text-align:center}:host{--phFC: #484848 !important}:host ::placeholder{text-transform:none;color:var(--phFC)}\n"] }]
190
+ ], template: "<div class=\"customdate ps-2 {{ cls() }} {{ inputClass() }}\" [ngClass]=\"{ disabled: readonly() || disabled() }\">\n <div class=\"row g-1 w-100 align-items-center\">\n <!-- <div class=\"col overflow-auto hide-scroll-x\" [formGroup]=\"form2\">\n <div class=\"d-flex w-100 align-items-center\" [formGroup]=\"form2\">\n <ng-container *ngFor=\"let item of iS.dateInputChunks;let ci=index\">\n <div [style.width]=\"'auto'||item.width\" class=\" d-flex align-items-center\" *ngIf=\"ci<chunksLength\">\n <span>{{item.seperator}}</span>\n <input noformat class=\"d-i-f\" id=\"{{this.id}}_di_{{item.formControlName}}\" [type]=\"item.type\"\n [formControlName]=\"item.formControlName\" [matTooltipShowDelay]=\"2000\"\n [matTooltip]=\"item.label\" [style.width.ch]=\"item?.length\" [placeholder]=\"item.placeholder\">\n </div>\n </ng-container>\n\n\n </div>\n </div> -->\n <div class=\"col\">\n <input\n class=\"w-100 border-0\"\n [value]=\"formValue()?.formattedValue\"\n (change)=\"iS.formatUserInput($event, form(), showTime(), id())\"\n placeholder=\"dd/mm/yyyy{{ showTime() ? ' hh:mm:ss:aa' : '' }}\"\n [readOnly]=\"disabled()\" />\n <!-- <input class=\"w-100 border-0\" [value]=\"form.controls.formattedValue.value\" (change)=\"formatUserInput()\"\n [readOnly]=\"control?.disabled\" [mat-menu-trigger-for]=\"control?.disabled||readonly?null:picker\"> -->\n </div>\n @if (!disabled() || !readonly() ) {\n <div class=\"col-auto\">\n <mat-datepicker-toggle\n matIconSuffix\n [mat-menu-trigger-for]=\"picker\"\n (click)=\"formValue()?.date ? matCalRef._goToDateInView(formValue()?.date, 'month') : null\"></mat-datepicker-toggle>\n </div>\n }\n </div>\n</div>\n\n<mat-menu class=\"full-width\" #picker=\"matMenu\" xPosition=\"after\">\n <div class=\"customdate-picker\" [ngClass]=\"{ 'pe-3': showTime() }\" (click)=\"$event.stopPropagation()\">\n <div class=\"row justify-content-center m-0 gy-2\">\n <div class=\"col-lg-auto\">\n <div class=\"calendar-cont\" #calendarCont>\n <mat-calendar\n #matCalRef\n [selected]=\"formValue()?.date\"\n [maxDate]=\"max()\"\n [minDate]=\"min()\"\n (selectedChange)=\"form().controls.date.patchValue($event)\"></mat-calendar>\n </div>\n </div>\n @if (showTime()) {\n <div class=\"col-lg-auto\">\n <div class=\"time-cont text-center\">\n <div class=\"d-flex align-items-center\">\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'HR' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.hours\">\n @for (item of iS.timeHours(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'MIN' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.minutes\">\n @for (item of iS.timeMinutes(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'S' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.seconds\">\n @for (item of iS.timeSeconds(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\">\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.meridiem\">\n @for (item of iS.timeMeridiem(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item.incrementor\">\n {{ item.label | uppercase }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</mat-menu>\n", styles: ["input:focus-visible{outline:none}input{background-color:transparent!important}.d-i-f{border:none;width:auto;min-width:0;padding:0;text-align:center}:host{--phFC: #484848 !important}:host ::placeholder{text-transform:none;color:var(--phFC)}\n"] }]
191
191
  }], ctorParameters: () => [{ type: i1.InputService }, { type: i2.DatePipe }], propDecorators: { valueChanged: [{
192
192
  type: Output
193
193
  }], value: [{
@@ -213,4 +213,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
213
213
  type: ViewChild,
214
214
  args: [MatCalendar]
215
215
  }] } });
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9pbnB1dC9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQW9CLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEksT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1B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S0FBSztnQkFDa0IsV0FBVztzQkFBbEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBEYXRlUGlwZSwgTmdDbGFzcywgTmdGb3IsIE5nSWYsIE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UsIE5nU3dpdGNoRGVmYXVsdCwgVXBwZXJDYXNlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0TmF0aXZlRGF0ZU1vZHVsZSwgTWF0UmlwcGxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRDYWxlbmRhciwgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IElucHV0Q2xhc3NQaXBlIH0gZnJvbSAnLi4vaW5wdXRzLXBpcGVzLnBpcGUnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgSW5wdXRTZXJ2aWNlIH0gZnJvbSAnLi4vaW5wdXQuc2VydmljZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZpbHRlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL3RyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IElucHV0VHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9jb25maWdzL2luZGV4LmNvbmZpZyc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0ZS1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBBc3luY1BpcGUsXG4gICAgVXBwZXJDYXNlUGlwZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBJbnB1dENsYXNzUGlwZSxcbiAgICBEYXRlUGlwZSxcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1hdE5hdGl2ZURhdGVNb2R1bGUsXG4gICAgTmdDbGFzcyxcbiAgICBOZ0ZvcixcbiAgICBOZ0lmLFxuICAgIE5nU3dpdGNoLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgTmdTd2l0Y2hDYXNlLFxuICAgIE1hdFJpcHBsZU1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE1hdE1lbnVNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlSW5wdXRDb21wb25lbnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIGNodW5rc0xlbmd0aDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZm9ybSA9IHNpZ25hbChcbiAgICBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIGRhdGU6IG5ldyBGb3JtQ29udHJvbDxEYXRlPihudWxsKSxcbiAgICAgIGhvdXJzOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihudWxsKSxcbiAgICAgIG1pbnV0ZXM6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KG51bGwpLFxuICAgICAgc2Vjb25kczogbmV3IEZvcm1Db250cm9sPHN0cmluZz4obnVsbCksXG4gICAgICBtZXJpZGllbTogbmV3IEZvcm1Db250cm9sPG51bWJlcj4obnVsbCksXG4gICAgICBmb3JtYXR0ZWRWYWx1ZTogbmV3IEZvcm1Db250cm9sPHN0cmluZz4obnVsbCksXG4gICAgICByYXdWYWx1ZTogbmV3IEZvcm1Db250cm9sPHN0cmluZz4obnVsbCksXG4gICAgfSksXG4gICk7XG5cbiAgZm9ybVZhbHVlID0gc2lnbmFsKHRoaXMuZm9ybSgpLmdldFJhd1ZhbHVlKCkpO1xuICAvLyBmb3JtVmFsdWUgPSB0b1NpZ25hbCh0aGlzLmZvcm0oKS52YWx1ZUNoYW5nZXMpO1xuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRhcmdldDogeyBjaGVja2VkPzogYm9vbGVhbjsgdmFsdWU6IGFueSB9IH0+KCk7XG4gIHNob3dUaW1lID0gc2lnbmFsPGJvb2xlYW4+KG51bGwpO1xuICBza2lwUGF0Y2hGcm9tQ29udHJvbDogYm9vbGVhbjtcbiAgc2tpcFBhdGNoQ29udHJvbDogYm9vbGVhbjtcbiAgY29udHJvbFZhbHVlOiBhbnk7XG4gIEBJbnB1dCgpIHNldCB2YWx1ZSh2OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZygpKSBkZWJ1Z2dlcjtcbiAgICBpZiAodGhpcy5za2lwUGF0Y2hGcm9tQ29udHJvbCAmJiB2ID09IHRoaXMuY29udHJvbFZhbHVlKSB7XG4gICAgICB0aGlzLnNraXBQYXRjaEZyb21Db250cm9sID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh2KSB7XG4gICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgIHRoaXMuc2tpcFBhdGNoQ29udHJvbCA9IHRydWU7XG4gICAgICB0aGlzLmZvcm0oKS5jb250cm9scy5kYXRlLnBhdGNoVmFsdWUobmV3IERhdGUodiksIHsgZW1pdEV2ZW50OiAhdGhpcy5zaG93VGltZSgpIH0pO1xuICAgICAgaWYgKCF0aGlzLnNob3dUaW1lKCkpIHJldHVybjtcbiAgICAgIGNvbnN0IHRpbWVDb21wID0gdi5zcGxpdCgnVCcpPy5bMV07XG4gICAgICAvLyBpZiAoIXRpbWVDb21wKSByZXR1cm47XG5cbiAgICAgIGlmICh0aGlzLmRlYnVnKCkpIGRlYnVnZ2VyO1xuICAgICAgY29uc3QgW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzXSA9IHRpbWVDb21wID8gdGltZUNvbXAuc3BsaXQoJzonKSA6IFsnMTInLCAnMDAnLCAnMDAnXTtcbiAgICAgIHRoaXMuZm9ybSgpLnBhdGNoVmFsdWUoe1xuICAgICAgICBob3VyczogKCcwJyArICgraG91cnMgJSAxMikpLnNsaWNlKC0yKSxcbiAgICAgICAgbWludXRlcyxcbiAgICAgICAgc2Vjb25kczogc2Vjb25kcz8uc2xpY2UoMCwgMiksXG4gICAgICAgIG1lcmlkaWVtOiAraG91cnMgPiAxMiA/IDEyIDogMCxcbiAgICAgIH0pO1xuICAgICAgLy8gdGhpcy5tYXRDYWxlbmRhcj8udXBkYXRlVG9kYXlzRGF0ZSgpO1xuICAgICAgLy8gdGhpcy5tYXRDYWxlbmRhcj8uX2dvVG9EYXRlSW5WaWV3KHRoaXMuZm9ybS5jb250cm9scy5kYXRlLnZhbHVlLCdtb250aCcpXG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm0oKS5jb250cm9scy5mb3JtYXR0ZWRWYWx1ZS52YWx1ZSkge1xuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAvLyB0aGlzLnNraXBQYXRjaENvbnRyb2wgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtKCkucmVzZXQoKTtcbiAgICB9XG4gICAgdGhpcy5mb3JtVmFsdWUuc2V0KHRoaXMuZm9ybSgpLmdldFJhd1ZhbHVlKCkpO1xuICB9XG4gIGlucENsID0gaW5wdXQ8c3RyaW5nPignY29udHJvbC1iZy1ncmF5Jyk7XG4gIGNscyA9IGlucHV0PHN0cmluZz4oKTtcbiAgaW5wdXRDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgQElucHV0KCkgdmFsaWQ6IGJvb2xlYW47XG4gIG1heCA9IHNpZ25hbDxEYXRlPih1bmRlZmluZWQpO1xuICBASW5wdXQoJ21heCcpXG4gIHNldCBfbWF4KHY6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGlmICh2KSB0aGlzLm1heC5zZXQobmV3IERhdGUodikpO1xuICB9XG4gIG1pbiA9IHNpZ25hbDxEYXRlPih1bmRlZmluZWQpO1xuICBASW5wdXQoJ21pbicpXG4gIHNldCBfbWluKHY6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGlmICh2KSB0aGlzLm1pbi5zZXQobmV3IERhdGUodikpO1xuICB9XG4gIGlkID0gaW5wdXQ8c3RyaW5nPigpO1xuICBASW5wdXQoKSBpbnZhbGlkOiBib29sZWFuO1xuICBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIGRlYnVnID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPigpO1xuICBASW5wdXQoJ3R5cGUnKSBzZXQgX3R5cGUodjogSW5wdXRUeXBlKSB7XG4gICAgdGhpcy5zaG93VGltZS5zZXQodiA9PSAnZGF0ZXRpbWUtbG9jYWwnKTtcbiAgICB0aGlzLnR5cGUgPSB2O1xuICAgIHRoaXMuY2h1bmtzTGVuZ3RoID0gdGhpcy5zaG93VGltZSgpID8gdGhpcy5pUy5kYXRlSW5wdXRDaHVua3MubGVuZ3RoIDogdGhpcy5pUy5kYXRlSW5wdXRDaHVua3MuZmluZEluZGV4KCh4KSA9PiB4LmlzVGltZSk7XG4gIH1cbiAgQElucHV0KCkgc2hvd1ZhbGlkYXRpb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gIEBWaWV3Q2hpbGQoTWF0Q2FsZW5kYXIpIG1hdENhbGVuZGFyOiBNYXRDYWxlbmRhcjxhbnk+O1xuICBzdWJzOiB7IFt4OiBzdHJpbmddOiBTdWJzY3JpcHRpb24gfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpUzogSW5wdXRTZXJ2aWNlLFxuICAgIHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICkge1xuICAgIHRoaXMuZm9ybWF0dGVyRnVuY3Rpb24oKTtcbiAgfVxuICBmb3JtYXR0ZXJGdW5jdGlvbiA9ICgpID0+IHtcbiAgICB0aGlzLmZvcm0oKVxuICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGZpbHRlcigoKSA9PiAhIXRoaXMuY29udHJvbCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZvcm1hdHRlZFZhbHVlLCAuLi5jaGFuZ2UgfSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kZWJ1ZygpKSBkZWJ1Z2dlcjtcbiAgICAgICAgaWYgKCFPYmplY3QudmFsdWVzKGNoYW5nZSkuZmlsdGVyKCh4KSA9PiB4ICE9IG51bGwpLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY29udHJvbD8ucmVzZXQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRhdGUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtZXJpZGllbSB9ID0gY2hhbmdlO1xuICAgICAgICBpZiAoIWRhdGUpIHJldHVybjtcbiAgICAgICAgY29uc3QgW2RheVN0ciwgc2hvcnRNb250aCwgZGF5LCB5ZWFyXSA9IGRhdGUudG9EYXRlU3RyaW5nKCkuc3BsaXQoJyAnKTtcbiAgICAgICAgY29uc3QgZGF0ZUlTT1N0cmluZyA9IGAke3llYXJ9LSR7Q29uZmlnLk1vbnRoc1tkYXRlPy5nZXRNb250aCgpXT8uaXNvU3RyfS0ke2RheX1gO1xuICAgICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgICAgdGhpcy5za2lwUGF0Y2hGcm9tQ29udHJvbCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLnNraXBQYXRjaENvbnRyb2wpIHtcbiAgICAgICAgICB0aGlzLnNraXBQYXRjaENvbnRyb2wgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAvLyAgIGRhdGUsXG4gICAgICAgICAgLy8gICBob3VycyxcbiAgICAgICAgICAvLyAgIG1pbnV0ZXMsXG4gICAgICAgICAgLy8gICBzZWNvbmRzLFxuICAgICAgICAgIC8vICAgbWVyaWRpZW0sXG4gICAgICAgICAgLy8gICB0aGlzLnNob3dUaW1lLFxuICAgICAgICAgIC8vICAgZGF0ZUlTT1N0cmluZyArXG4gICAgICAgICAgLy8gICAgIGBUJHsoJzAnICsgKCgraG91cnMgJSAxMikgKyBtZXJpZGllbSkpLnNsaWNlKC0yKSB8fCAnMDAnfToke21pbnV0ZXMgfHwgJzAwJ306JHtcbiAgICAgICAgICAvLyAgICAgICBzZWNvbmRzIHx8ICcwMCdcbiAgICAgICAgICAvLyAgICAgfWBcbiAgICAgICAgICAvLyApO1xuICAgICAgICAgIGlmICh0aGlzLnNob3dUaW1lKCkpXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgIGRhdGVJU09TdHJpbmcgKyBgVCR7KCcwJyArICgoK2hvdXJzICUgMTIpICsgbWVyaWRpZW0pKS5zbGljZSgtMikgfHwgJzAwJ306JHttaW51dGVzIHx8ICcwMCd9OiR7c2Vjb25kcyB8fCAnMDAnfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGVsc2UgdGhpcy5jb250cm9sPy5wYXRjaFZhbHVlKGRhdGVJU09TdHJpbmcpO1xuICAgICAgICAgIHRoaXMuY29udHJvbFZhbHVlID0gdGhpcy5jb250cm9sPy52YWx1ZTtcbiAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZC5lbWl0KHsgdGFyZ2V0OiB7IHZhbHVlOiB0aGlzLmNvbnRyb2wudmFsdWUgfSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9ybSgpLmNvbnRyb2xzLmZvcm1hdHRlZFZhbHVlLnBhdGNoVmFsdWUoXG4gICAgICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jb250cm9sVmFsdWUgfHwgZGF0ZSwgYE1NTS4gZGQsIHl5eXkke3RoaXMuc2hvd1RpbWUoKSA/ICcuIGhoOm1tOnNzIGEnIDogJyd9YCksXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmZvcm1WYWx1ZS5zZXQodGhpcy5mb3JtKCkuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICB9KTtcbiAgfTtcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy9DYWxsZWQgb25jZSwgYmVmb3JlIHRoZSBpbnN0YW5jZSBpcyBkZXN0cm95ZWQuXG4gICAgLy9BZGQgJ2ltcGxlbWVudHMgT25EZXN0cm95JyB0byB0aGUgY2xhc3MuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5zdWJzIHx8IHt9KSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuc3Vicywga2V5KSkge1xuICAgICAgICB0aGlzLnN1YnM/LltrZXldPy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy9DYWxsZWQgYWZ0ZXIgbmdBZnRlckNvbnRlbnRJbml0IHdoZW4gdGhlIGNvbXBvbmVudCdzIHZpZXcgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIEFwcGxpZXMgdG8gY29tcG9uZW50cyBvbmx5LlxuICAgIC8vQWRkICdpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQnIHRvIHRoZSBjbGFzcy5cbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBpZiAodGhpcy5mb3JtVmFsdWUoKT8uZGF0ZSkge1xuICAgICAgdGhpcy5tYXRDYWxlbmRhci5hY3RpdmVEYXRlID0gbmV3IERhdGUodGhpcy5mb3JtVmFsdWUoKS5kYXRlKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjdXN0b21kYXRlIHt7IGNscygpIH19IHt7IGlucHV0Q2xhc3MoKSB9fVwiIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IHJlYWRvbmx5KCkgfHwgZGlzYWJsZWQoKSB9XCI+XG4gIDxkaXYgY2xhc3M9XCJyb3cgZy0xIHctMTAwXCI+XG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sIG92ZXJmbG93LWF1dG8gaGlkZS1zY3JvbGwteFwiIFtmb3JtR3JvdXBdPVwiZm9ybTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggdy0xMDAgYWxpZ24taXRlbXMtY2VudGVyXCIgW2Zvcm1Hcm91cF09XCJmb3JtMlwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaVMuZGF0ZUlucHV0Q2h1bmtzO2xldCBjaT1pbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCInYXV0byd8fGl0ZW0ud2lkdGhcIiBjbGFzcz1cIiAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiICpuZ0lmPVwiY2k8Y2h1bmtzTGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2l0ZW0uc2VwZXJhdG9yfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbm9mb3JtYXQgY2xhc3M9XCJkLWktZlwiIGlkPVwie3t0aGlzLmlkfX1fZGlfe3tpdGVtLmZvcm1Db250cm9sTmFtZX19XCIgW3R5cGVdPVwiaXRlbS50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIml0ZW0uZm9ybUNvbnRyb2xOYW1lXCIgW21hdFRvb2x0aXBTaG93RGVsYXldPVwiMjAwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaXRlbS5sYWJlbFwiIFtzdHlsZS53aWR0aC5jaF09XCJpdGVtPy5sZW5ndGhcIiBbcGxhY2Vob2xkZXJdPVwiaXRlbS5wbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cInctMTAwIGJvcmRlci0wXCJcbiAgICAgICAgW3ZhbHVlXT1cImZvcm1WYWx1ZSgpPy5mb3JtYXR0ZWRWYWx1ZVwiXG4gICAgICAgIChjaGFuZ2UpPVwiaVMuZm9ybWF0VXNlcklucHV0KCRldmVudCwgZm9ybSgpLCBzaG93VGltZSgpLCBpZCgpKVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiZGQvbW0veXl5eXt7IHNob3dUaW1lKCkgPyAnIGhoOm1tOnNzOmFhJyA6ICcnIH19XCJcbiAgICAgICAgW3JlYWRPbmx5XT1cImRpc2FibGVkKClcIiAvPlxuICAgICAgPCEtLSA8aW5wdXQgY2xhc3M9XCJ3LTEwMCBib3JkZXItMFwiIFt2YWx1ZV09XCJmb3JtLmNvbnRyb2xzLmZvcm1hdHRlZFZhbHVlLnZhbHVlXCIgKGNoYW5nZSk9XCJmb3JtYXRVc2VySW5wdXQoKVwiXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImNvbnRyb2w/LmRpc2FibGVkXCIgW21hdC1tZW51LXRyaWdnZXItZm9yXT1cImNvbnRyb2w/LmRpc2FibGVkfHxyZWFkb25seT9udWxsOnBpY2tlclwiPiAtLT5cbiAgICA8L2Rpdj5cbiAgICBAaWYgKCFkaXNhYmxlZCgpICYmICFyZWFkb25seSgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZVxuICAgICAgICAgIG1hdEljb25TdWZmaXhcbiAgICAgICAgICBbbWF0LW1lbnUtdHJpZ2dlci1mb3JdPVwicGlja2VyXCJcbiAgICAgICAgICAoY2xpY2spPVwiZm9ybVZhbHVlKCk/LmRhdGUgPyBtYXRDYWxSZWYuX2dvVG9EYXRlSW5WaWV3KGZvcm1WYWx1ZSgpPy5kYXRlLCAnbW9udGgnKSA6IG51bGxcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG1hdC1tZW51IGNsYXNzPVwiZnVsbC13aWR0aFwiICNwaWNrZXI9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYWZ0ZXJcIj5cbiAgPGRpdiBjbGFzcz1cImN1c3RvbWRhdGUtcGlja2VyXCIgW25nQ2xhc3NdPVwieyAncGUtMyc6IHNob3dUaW1lKCkgfVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1jZW50ZXIgbS0wIGd5LTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctYXV0b1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItY29udFwiICNjYWxlbmRhckNvbnQ+XG4gICAgICAgICAgPG1hdC1jYWxlbmRhclxuICAgICAgICAgICAgI21hdENhbFJlZlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cImZvcm1WYWx1ZSgpPy5kYXRlXCJcbiAgICAgICAgICAgIFttYXhEYXRlXT1cIm1heCgpXCJcbiAgICAgICAgICAgIFttaW5EYXRlXT1cIm1pbigpXCJcbiAgICAgICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJmb3JtKCkuY29udHJvbHMuZGF0ZS5wYXRjaFZhbHVlKCRldmVudClcIj48L21hdC1jYWxlbmRhcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoc2hvd1RpbWUoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLWF1dG9cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1jb250IHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQtMTAgb3ZlcmZsb3ctaGlkZGVuIG14LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1vcHRpb25zLWNvbnQgaGlkZS1zY3JvbGxcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImNhbGVuZGFyQ29udC5vZmZzZXRIZWlnaHRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGlja3ktdG9wIGJnLXdoaXRlIHJvdW5kZWQtMTAgdGV4dC1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdIUicgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgY2xhc3M9XCJoaWRlLXNjcm9sbFwiIFtmb3JtQ29udHJvbF09XCJmb3JtKCkuY29udHJvbHMuaG91cnNcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBpUy50aW1lSG91cnMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJyb3VuZGVkLTEwXCIgW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0gfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkLTEwIG92ZXJmbG93LWhpZGRlbiBteC0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtb3B0aW9ucy1jb250IGhpZGUtc2Nyb2xsXCIgW3N0eWxlLmhlaWdodC5weF09XCJjYWxlbmRhckNvbnQub2Zmc2V0SGVpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXRvcCBiZy13aGl0ZSByb3VuZGVkLTEwIHRleHQtcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnTUlOJyB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCBjbGFzcz1cImhpZGUtc2Nyb2xsXCIgW2Zvcm1Db250cm9sXT1cImZvcm0oKS5jb250cm9scy5taW51dGVzXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaVMudGltZU1pbnV0ZXMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJyb3VuZGVkLTEwXCIgW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0gfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkLTEwIG92ZXJmbG93LWhpZGRlbiBteC0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtb3B0aW9ucy1jb250IGhpZGUtc2Nyb2xsXCIgW3N0eWxlLmhlaWdodC5weF09XCJjYWxlbmRhckNvbnQub2Zmc2V0SGVpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXRvcCBiZy13aGl0ZSByb3VuZGVkLTEwIHRleHQtcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnUycgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgY2xhc3M9XCJoaWRlLXNjcm9sbFwiIFtmb3JtQ29udHJvbF09XCJmb3JtKCkuY29udHJvbHMuc2Vjb25kc1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGlTLnRpbWVTZWNvbmRzKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwicm91bmRlZC0xMFwiIFt2YWx1ZV09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZC0xMCBvdmVyZmxvdy1oaWRkZW4gbXgtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLW9wdGlvbnMtY29udCBoaWRlLXNjcm9sbFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIGNsYXNzPVwiaGlkZS1zY3JvbGxcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybSgpLmNvbnRyb2xzLm1lcmlkaWVtXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaVMudGltZU1lcmlkaWVtKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwicm91bmRlZC0xMFwiIFt2YWx1ZV09XCJpdGVtLmluY3JlbWVudG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIHwgdXBwZXJjYXNlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9tYXQtbWVudT5cbiJdfQ==
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9pbnB1dC9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQW9CLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEksT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1B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IEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIERhdGVQaXBlLCBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiwgTmdTd2l0Y2gsIE5nU3dpdGNoQ2FzZSwgTmdTd2l0Y2hEZWZhdWx0LCBVcHBlckNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXROYXRpdmVEYXRlTW9kdWxlLCBNYXRSaXBwbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdENhbGVuZGFyLCBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgSW5wdXRDbGFzc1BpcGUgfSBmcm9tICcuLi9pbnB1dHMtcGlwZXMucGlwZSc7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBJbnB1dFNlcnZpY2UgfSBmcm9tICcuLi9pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2luZGV4Lm1vZGVsJztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbmZpZ3MvaW5kZXguY29uZmlnJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRlLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBVcHBlckNhc2VQaXBlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIElucHV0Q2xhc3NQaXBlLFxuICAgIERhdGVQaXBlLFxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0TmF0aXZlRGF0ZU1vZHVsZSxcbiAgICBOZ0NsYXNzLFxuICAgIE5nRm9yLFxuICAgIE5nSWYsXG4gICAgTmdTd2l0Y2gsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBOZ1N3aXRjaENhc2UsXG4gICAgTWF0UmlwcGxlTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERhdGVJbnB1dENvbXBvbmVudCB7XG4gIHR5cGU6IHN0cmluZztcbiAgY2h1bmtzTGVuZ3RoOiBudW1iZXI7XG4gIHByb3RlY3RlZCBmb3JtID0gc2lnbmFsKFxuICAgIG5ldyBGb3JtR3JvdXAoe1xuICAgICAgZGF0ZTogbmV3IEZvcm1Db250cm9sPERhdGU+KG51bGwpLFxuICAgICAgaG91cnM6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KG51bGwpLFxuICAgICAgbWludXRlczogbmV3IEZvcm1Db250cm9sPHN0cmluZz4obnVsbCksXG4gICAgICBzZWNvbmRzOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihudWxsKSxcbiAgICAgIG1lcmlkaWVtOiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyPihudWxsKSxcbiAgICAgIGZvcm1hdHRlZFZhbHVlOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihudWxsKSxcbiAgICAgIHJhd1ZhbHVlOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihudWxsKSxcbiAgICB9KSxcbiAgKTtcblxuICAvLyBmb3JtVmFsdWUgPSBzaWduYWwodGhpcy5mb3JtKCkuZ2V0UmF3VmFsdWUoKSk7XG4gIGZvcm1WYWx1ZSA9IHRvU2lnbmFsKHRoaXMuZm9ybSgpLnZhbHVlQ2hhbmdlcyk7XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdGFyZ2V0OiB7IGNoZWNrZWQ/OiBib29sZWFuOyB2YWx1ZTogYW55IH0gfT4oKTtcbiAgc2hvd1RpbWUgPSBzaWduYWw8Ym9vbGVhbj4obnVsbCk7XG4gIHNraXBQYXRjaEZyb21Db250cm9sOiBib29sZWFuO1xuICBza2lwUGF0Y2hDb250cm9sOiBib29sZWFuO1xuICBjb250cm9sVmFsdWU6IGFueTtcbiAgQElucHV0KCkgc2V0IHZhbHVlKHY6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmRlYnVnKCkpIGRlYnVnZ2VyO1xuICAgIGlmICh0aGlzLnNraXBQYXRjaEZyb21Db250cm9sICYmIHYgPT0gdGhpcy5jb250cm9sVmFsdWUpIHtcbiAgICAgIHRoaXMuc2tpcFBhdGNoRnJvbUNvbnRyb2wgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHYpIHtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgdGhpcy5za2lwUGF0Y2hDb250cm9sID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9ybSgpLmNvbnRyb2xzLmRhdGUucGF0Y2hWYWx1ZShuZXcgRGF0ZSh2KSwgeyBlbWl0RXZlbnQ6ICF0aGlzLnNob3dUaW1lKCkgfSk7XG4gICAgICBpZiAoIXRoaXMuc2hvd1RpbWUoKSkgcmV0dXJuO1xuICAgICAgY29uc3QgdGltZUNvbXAgPSB2LnNwbGl0KCdUJyk/LlsxXTtcbiAgICAgIC8vIGlmICghdGltZUNvbXApIHJldHVybjtcblxuICAgICAgaWYgKHRoaXMuZGVidWcoKSkgZGVidWdnZXI7XG4gICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXMsIHNlY29uZHNdID0gdGltZUNvbXAgPyB0aW1lQ29tcC5zcGxpdCgnOicpIDogWycxMicsICcwMCcsICcwMCddO1xuICAgICAgdGhpcy5mb3JtKCkucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGhvdXJzOiAoJzAnICsgKCtob3VycyAlIDEyKSkuc2xpY2UoLTIpLFxuICAgICAgICBtaW51dGVzLFxuICAgICAgICBzZWNvbmRzOiBzZWNvbmRzPy5zbGljZSgwLCAyKSxcbiAgICAgICAgbWVyaWRpZW06ICtob3VycyA+IDEyID8gMTIgOiAwLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmb3JtVmFsID0gdGhpcy5mb3JtVmFsdWUoKTtcbiAgICAgIC8vIHRoaXMubWF0Q2FsZW5kYXI/LnVwZGF0ZVRvZGF5c0RhdGUoKTtcbiAgICAgIC8vIHRoaXMubWF0Q2FsZW5kYXI/Ll9nb1RvRGF0ZUluVmlldyh0aGlzLmZvcm0uY29udHJvbHMuZGF0ZS52YWx1ZSwnbW9udGgnKVxuICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtKCkuY29udHJvbHMuZm9ybWF0dGVkVmFsdWUudmFsdWUpIHtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgLy8gdGhpcy5za2lwUGF0Y2hDb250cm9sID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9ybSgpLnJlc2V0KCk7XG4gICAgfVxuICB9XG4gIGlucENsID0gaW5wdXQ8c3RyaW5nPignY29udHJvbC1iZy1ncmF5Jyk7XG4gIGNscyA9IGlucHV0PHN0cmluZz4oKTtcbiAgaW5wdXRDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgQElucHV0KCkgdmFsaWQ6IGJvb2xlYW47XG4gIG1heCA9IHNpZ25hbDxEYXRlPih1bmRlZmluZWQpO1xuICBASW5wdXQoJ21heCcpXG4gIHNldCBfbWF4KHY6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGlmICh2KSB0aGlzLm1heC5zZXQobmV3IERhdGUodikpO1xuICB9XG4gIG1pbiA9IHNpZ25hbDxEYXRlPih1bmRlZmluZWQpO1xuICBASW5wdXQoJ21pbicpXG4gIHNldCBfbWluKHY6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGlmICh2KSB0aGlzLm1pbi5zZXQobmV3IERhdGUodikpO1xuICB9XG4gIGlkID0gaW5wdXQ8c3RyaW5nPigpO1xuICBASW5wdXQoKSBpbnZhbGlkOiBib29sZWFuO1xuICBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIGRlYnVnID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPigpO1xuICBASW5wdXQoJ3R5cGUnKSBzZXQgX3R5cGUodjogSW5wdXRUeXBlKSB7XG4gICAgdGhpcy5zaG93VGltZS5zZXQodiA9PSAnZGF0ZXRpbWUtbG9jYWwnKTtcbiAgICB0aGlzLnR5cGUgPSB2O1xuICAgIHRoaXMuY2h1bmtzTGVuZ3RoID0gdGhpcy5zaG93VGltZSgpID8gdGhpcy5pUy5kYXRlSW5wdXRDaHVua3MubGVuZ3RoIDogdGhpcy5pUy5kYXRlSW5wdXRDaHVua3MuZmluZEluZGV4KCh4KSA9PiB4LmlzVGltZSk7XG4gIH1cbiAgQElucHV0KCkgc2hvd1ZhbGlkYXRpb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gIEBWaWV3Q2hpbGQoTWF0Q2FsZW5kYXIpIG1hdENhbGVuZGFyOiBNYXRDYWxlbmRhcjxhbnk+O1xuICBzdWJzOiB7IFt4OiBzdHJpbmddOiBTdWJzY3JpcHRpb24gfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpUzogSW5wdXRTZXJ2aWNlLFxuICAgIHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICkge1xuICAgIHRoaXMuZm9ybWF0dGVyRnVuY3Rpb24oKTtcbiAgfVxuICBmb3JtYXR0ZXJGdW5jdGlvbiA9ICgpID0+IHtcbiAgICB0aGlzLmZvcm0oKVxuICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGZpbHRlcigoKSA9PiAhIXRoaXMuY29udHJvbCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZvcm1hdHRlZFZhbHVlLCAuLi5jaGFuZ2UgfSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kZWJ1ZygpKSBkZWJ1Z2dlcjtcbiAgICAgICAgaWYgKCFPYmplY3QudmFsdWVzKGNoYW5nZSkuZmlsdGVyKCh4KSA9PiB4ICE9IG51bGwpLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY29udHJvbD8ucmVzZXQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRhdGUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtZXJpZGllbSB9ID0gY2hhbmdlO1xuICAgICAgICBpZiAoIWRhdGUpIHJldHVybjtcbiAgICAgICAgY29uc3QgW2RheVN0ciwgc2hvcnRNb250aCwgZGF5LCB5ZWFyXSA9IGRhdGUudG9EYXRlU3RyaW5nKCkuc3BsaXQoJyAnKTtcbiAgICAgICAgY29uc3QgZGF0ZUlTT1N0cmluZyA9IGAke3llYXJ9LSR7Q29uZmlnLk1vbnRoc1tkYXRlPy5nZXRNb250aCgpXT8uaXNvU3RyfS0ke2RheX1gO1xuICAgICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgICAgdGhpcy5za2lwUGF0Y2hGcm9tQ29udHJvbCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLnNraXBQYXRjaENvbnRyb2wpIHtcbiAgICAgICAgICB0aGlzLnNraXBQYXRjaENvbnRyb2wgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAvLyAgIGRhdGUsXG4gICAgICAgICAgLy8gICBob3VycyxcbiAgICAgICAgICAvLyAgIG1pbnV0ZXMsXG4gICAgICAgICAgLy8gICBzZWNvbmRzLFxuICAgICAgICAgIC8vICAgbWVyaWRpZW0sXG4gICAgICAgICAgLy8gICB0aGlzLnNob3dUaW1lLFxuICAgICAgICAgIC8vICAgZGF0ZUlTT1N0cmluZyArXG4gICAgICAgICAgLy8gICAgIGBUJHsoJzAnICsgKCgraG91cnMgJSAxMikgKyBtZXJpZGllbSkpLnNsaWNlKC0yKSB8fCAnMDAnfToke21pbnV0ZXMgfHwgJzAwJ306JHtcbiAgICAgICAgICAvLyAgICAgICBzZWNvbmRzIHx8ICcwMCdcbiAgICAgICAgICAvLyAgICAgfWBcbiAgICAgICAgICAvLyApO1xuICAgICAgICAgIGlmICh0aGlzLnNob3dUaW1lKCkpXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgIGRhdGVJU09TdHJpbmcgKyBgVCR7KCcwJyArICgoK2hvdXJzICUgMTIpICsgbWVyaWRpZW0pKS5zbGljZSgtMikgfHwgJzAwJ306JHttaW51dGVzIHx8ICcwMCd9OiR7c2Vjb25kcyB8fCAnMDAnfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGVsc2UgdGhpcy5jb250cm9sPy5wYXRjaFZhbHVlKGRhdGVJU09TdHJpbmcpO1xuICAgICAgICAgIHRoaXMuY29udHJvbFZhbHVlID0gdGhpcy5jb250cm9sPy52YWx1ZTtcbiAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZC5lbWl0KHsgdGFyZ2V0OiB7IHZhbHVlOiB0aGlzLmNvbnRyb2wudmFsdWUgfSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9ybSgpLmNvbnRyb2xzLmZvcm1hdHRlZFZhbHVlLnBhdGNoVmFsdWUoXG4gICAgICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jb250cm9sVmFsdWUgfHwgZGF0ZSwgYE1NTS4gZGQsIHl5eXkke3RoaXMuc2hvd1RpbWUoKSA/ICcuIGhoOm1tOnNzIGEnIDogJyd9YCksXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH07XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy9DYWxsZWQgb25jZSwgYmVmb3JlIHRoZSBpbnN0YW5jZSBpcyBkZXN0cm95ZWQuXG4gICAgLy9BZGQgJ2ltcGxlbWVudHMgT25EZXN0cm95JyB0byB0aGUgY2xhc3MuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5zdWJzIHx8IHt9KSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuc3Vicywga2V5KSkge1xuICAgICAgICB0aGlzLnN1YnM/LltrZXldPy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvL0NhbGxlZCBhZnRlciBuZ0FmdGVyQ29udGVudEluaXQgd2hlbiB0aGUgY29tcG9uZW50J3MgdmlldyBoYXMgYmVlbiBpbml0aWFsaXplZC4gQXBwbGllcyB0byBjb21wb25lbnRzIG9ubHkuXG4gICAgLy9BZGQgJ2ltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCcgdG8gdGhlIGNsYXNzLlxuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmICh0aGlzLmZvcm1WYWx1ZSgpPy5kYXRlKSB7XG4gICAgICB0aGlzLm1hdENhbGVuZGFyLmFjdGl2ZURhdGUgPSBuZXcgRGF0ZSh0aGlzLmZvcm1WYWx1ZSgpLmRhdGUpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImN1c3RvbWRhdGUgcHMtMiB7eyBjbHMoKSB9fSB7eyBpbnB1dENsYXNzKCkgfX1cIiBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiByZWFkb25seSgpIHx8IGRpc2FibGVkKCkgfVwiPlxuICA8ZGl2IGNsYXNzPVwicm93IGctMSB3LTEwMCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wgb3ZlcmZsb3ctYXV0byBoaWRlLXNjcm9sbC14XCIgW2Zvcm1Hcm91cF09XCJmb3JtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCB3LTEwMCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZvcm0yXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpUy5kYXRlSW5wdXRDaHVua3M7bGV0IGNpPWluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cIidhdXRvJ3x8aXRlbS53aWR0aFwiIGNsYXNzPVwiICBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgKm5nSWY9XCJjaTxjaHVua3NMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7aXRlbS5zZXBlcmF0b3J9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBub2Zvcm1hdCBjbGFzcz1cImQtaS1mXCIgaWQ9XCJ7e3RoaXMuaWR9fV9kaV97e2l0ZW0uZm9ybUNvbnRyb2xOYW1lfX1cIiBbdHlwZV09XCJpdGVtLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiaXRlbS5mb3JtQ29udHJvbE5hbWVcIiBbbWF0VG9vbHRpcFNob3dEZWxheV09XCIyMDAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJpdGVtLmxhYmVsXCIgW3N0eWxlLndpZHRoLmNoXT1cIml0ZW0/Lmxlbmd0aFwiIFtwbGFjZWhvbGRlcl09XCJpdGVtLnBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwidy0xMDAgYm9yZGVyLTBcIlxuICAgICAgICBbdmFsdWVdPVwiZm9ybVZhbHVlKCk/LmZvcm1hdHRlZFZhbHVlXCJcbiAgICAgICAgKGNoYW5nZSk9XCJpUy5mb3JtYXRVc2VySW5wdXQoJGV2ZW50LCBmb3JtKCksIHNob3dUaW1lKCksIGlkKCkpXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJkZC9tbS95eXl5e3sgc2hvd1RpbWUoKSA/ICcgaGg6bW06c3M6YWEnIDogJycgfX1cIlxuICAgICAgICBbcmVhZE9ubHldPVwiZGlzYWJsZWQoKVwiIC8+XG4gICAgICA8IS0tIDxpbnB1dCBjbGFzcz1cInctMTAwIGJvcmRlci0wXCIgW3ZhbHVlXT1cImZvcm0uY29udHJvbHMuZm9ybWF0dGVkVmFsdWUudmFsdWVcIiAoY2hhbmdlKT1cImZvcm1hdFVzZXJJbnB1dCgpXCJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29udHJvbD8uZGlzYWJsZWRcIiBbbWF0LW1lbnUtdHJpZ2dlci1mb3JdPVwiY29udHJvbD8uZGlzYWJsZWR8fHJlYWRvbmx5P251bGw6cGlja2VyXCI+IC0tPlxuICAgIDwvZGl2PlxuICAgIEBpZiAoIWRpc2FibGVkKCkgfHwgIXJlYWRvbmx5KCkgKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZVxuICAgICAgICAgIG1hdEljb25TdWZmaXhcbiAgICAgICAgICBbbWF0LW1lbnUtdHJpZ2dlci1mb3JdPVwicGlja2VyXCJcbiAgICAgICAgICAoY2xpY2spPVwiZm9ybVZhbHVlKCk/LmRhdGUgPyBtYXRDYWxSZWYuX2dvVG9EYXRlSW5WaWV3KGZvcm1WYWx1ZSgpPy5kYXRlLCAnbW9udGgnKSA6IG51bGxcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG1hdC1tZW51IGNsYXNzPVwiZnVsbC13aWR0aFwiICNwaWNrZXI9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYWZ0ZXJcIj5cbiAgPGRpdiBjbGFzcz1cImN1c3RvbWRhdGUtcGlja2VyXCIgW25nQ2xhc3NdPVwieyAncGUtMyc6IHNob3dUaW1lKCkgfVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1jZW50ZXIgbS0wIGd5LTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctYXV0b1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItY29udFwiICNjYWxlbmRhckNvbnQ+XG4gICAgICAgICAgPG1hdC1jYWxlbmRhclxuICAgICAgICAgICAgI21hdENhbFJlZlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cImZvcm1WYWx1ZSgpPy5kYXRlXCJcbiAgICAgICAgICAgIFttYXhEYXRlXT1cIm1heCgpXCJcbiAgICAgICAgICAgIFttaW5EYXRlXT1cIm1pbigpXCJcbiAgICAgICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJmb3JtKCkuY29udHJvbHMuZGF0ZS5wYXRjaFZhbHVlKCRldmVudClcIj48L21hdC1jYWxlbmRhcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoc2hvd1RpbWUoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLWF1dG9cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1jb250IHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQtMTAgb3ZlcmZsb3ctaGlkZGVuIG14LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1vcHRpb25zLWNvbnQgaGlkZS1zY3JvbGxcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImNhbGVuZGFyQ29udC5vZmZzZXRIZWlnaHRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGlja3ktdG9wIGJnLXdoaXRlIHJvdW5kZWQtMTAgdGV4dC1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdIUicgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgY2xhc3M9XCJoaWRlLXNjcm9sbFwiIFtmb3JtQ29udHJvbF09XCJmb3JtKCkuY29udHJvbHMuaG91cnNcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBpUy50aW1lSG91cnMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJyb3VuZGVkLTEwXCIgW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0gfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkLTEwIG92ZXJmbG93LWhpZGRlbiBteC0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtb3B0aW9ucy1jb250IGhpZGUtc2Nyb2xsXCIgW3N0eWxlLmhlaWdodC5weF09XCJjYWxlbmRhckNvbnQub2Zmc2V0SGVpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXRvcCBiZy13aGl0ZSByb3VuZGVkLTEwIHRleHQtcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnTUlOJyB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCBjbGFzcz1cImhpZGUtc2Nyb2xsXCIgW2Zvcm1Db250cm9sXT1cImZvcm0oKS5jb250cm9scy5taW51dGVzXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaVMudGltZU1pbnV0ZXMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJyb3VuZGVkLTEwXCIgW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0gfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkLTEwIG92ZXJmbG93LWhpZGRlbiBteC0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtb3B0aW9ucy1jb250IGhpZGUtc2Nyb2xsXCIgW3N0eWxlLmhlaWdodC5weF09XCJjYWxlbmRhckNvbnQub2Zmc2V0SGVpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXRvcCBiZy13aGl0ZSByb3VuZGVkLTEwIHRleHQtcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnUycgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgY2xhc3M9XCJoaWRlLXNjcm9sbFwiIFtmb3JtQ29udHJvbF09XCJmb3JtKCkuY29udHJvbHMuc2Vjb25kc1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGlTLnRpbWVTZWNvbmRzKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwicm91bmRlZC0xMFwiIFt2YWx1ZV09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZC0xMCBvdmVyZmxvdy1oaWRkZW4gbXgtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLW9wdGlvbnMtY29udCBoaWRlLXNjcm9sbFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIGNsYXNzPVwiaGlkZS1zY3JvbGxcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybSgpLmNvbnRyb2xzLm1lcmlkaWVtXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaVMudGltZU1lcmlkaWVtKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwicm91bmRlZC0xMFwiIFt2YWx1ZV09XCJpdGVtLmluY3JlbWVudG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIHwgdXBwZXJjYXNlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9tYXQtbWVudT5cbiJdfQ==
@@ -40,6 +40,8 @@ export class PageTemplateComponent {
40
40
  isModal: this.isModal(),
41
41
  }));
42
42
  this.queryParamsSignal = toSignal(this.route.queryParams);
43
+ this.ifEdit = () => { };
44
+ this.ifCreate = () => { };
43
45
  this.ifShow = () => { };
44
46
  this.ifClone = () => { };
45
47
  this.ifParams = (func) => {
@@ -139,4 +141,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
139
141
  }], modalSubmitted: [{
140
142
  type: Output
141
143
  }] } });
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2hhcmVkL2NvbXBvbmVudHMvcGFnZS10ZW1wbGF0ZS9wYWdlLXRlbXBsYXRlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQWtCLE1BQU0sMEJBQTBCLENBQUM7QUFFckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQU90RCxNQUFNLE9BQU8scUJBQXFCO0lBSWhDLElBQWEsUUFBUSxDQUFDLENBQVU7UUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQU1ELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBVyxRQUFRLENBQUMsS0FBZ0I7UUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQVlEO1FBM0JBLGtCQUFhLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLFlBQU8sR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFNdkIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTlDLG1CQUFjLEdBQUcs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Q0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzRyxDQUFDOzhHQS9IVSxxQkFBcUI7a0dBQXJCLHFCQUFxQixpTEFIdEIsRUFBRTs7MkZBR0QscUJBQXFCO2tCQUpqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxFQUFFO29CQUNaLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjt3REFLYyxRQUFRO3NCQUFwQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUksY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9saWIvU2VydmljZXMvdXRpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IEVQYWdlVHlwZSwgSU9iamVjdExpdGVyYWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvaW5kZXgubW9kZWwnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIFNES0Vudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Vudmlyb25tZW50Lm1vZGVsJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6IGBgLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlVGVtcGxhdGVDb21wb25lbnQ8TW9kZWxEYXRhID0gYW55LCBURW52aXJvbm1lbnQgZXh0ZW5kcyBTREtFbnZpcm9ubWVudCA9IEVudmlyb25tZW50PiB7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGxvYWRpbmdTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc01vZGFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgQElucHV0KCkgc2V0IF9pc01vZGFsKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzTW9kYWwuc2V0KHYpO1xuICB9XG4gIEBJbnB1dCgpIG1vZGVsRGF0YTogTW9kZWxEYXRhO1xuICBtb2RhbE9uQ29tcGxldGU6ICguLi5hcmdzKSA9PiBhbnk7XG4gIEBPdXRwdXQoKSBtb2RhbFN1Ym1pdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgY29kZT86IHN0cmluZztcbiAgcGFnZVR5cGVTaWduYWwgPSBzaWduYWw8RVBhZ2VUeXBlPih1bmRlZmluZWQpO1xuICBwdWJsaWMgZ2V0IHBhZ2VUeXBlKCk6IEVQYWdlVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMucGFnZVR5cGVTaWduYWwoKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhZ2VUeXBlKHZhbHVlOiBFUGFnZVR5cGUpIHtcbiAgICB0aGlzLnBhZ2VUeXBlU2lnbmFsLnNldCh2YWx1ZSk7XG4gIH1cblxuICBpZEZpZWxkID0gJ2NvZGUnO1xuICBpc0NyZWF0ZSA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHRoaXMudVMucGFnZVMuaXNDcmVhdGUodGhpcy5yb3V0ZSwgdGhpcy5wYWdlVHlwZVNpZ25hbCgpKSk7XG4gIGlzSW5kZXggPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB0aGlzLnVTLnBhZ2VTLmlzSW5kZXgodGhpcy5yb3V0ZSwgdGhpcy5wYWdlVHlwZVNpZ25hbCgpKSk7XG4gIGlzQ2xvbmUgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB0aGlzLnVTLnBhZ2VTLmlzQ2xvbmUodGhpcy5yb3V0ZSwgdGhpcy5wYWdlVHlwZVNpZ25hbCgpKSk7XG4gIGlzRWRpdCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHRoaXMudVMucGFnZVMuaXNFZGl0KHRoaXMucm91dGUsIHRoaXMucGFnZVR5cGVTaWduYWwoKSkpO1xuICBpc1Nob3cgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB0aGlzLnVTLnBhZ2VTLmlzU2hvdyh0aGlzLnJvdXRlLCB0aGlzLnBhZ2VUeXBlU2lnbmFsKCkpKTtcbiAgaW5mb0Z1bmM6ICh0ZXh0OiBzdHJpbmcsIHN0YXR1cz86IDEgfCAwIHwgMiwgaGVhZGluZz86IHN0cmluZywgYnRucz86IGFueVtdLCBkaXNhYmxlQ2xvc2U/OiBib29sZWFuKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBwdWJsaWMgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwdWJsaWMgdVMgPSBpbmplY3QoVXRpbGl0eVNlcnZpY2U8VEVudmlyb25tZW50Pik7XG4gIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgYXN5bmMgaW5pdChmdW5jPzogKCkgPT4gUHJvbWlzZTxhbnk+LCBlcnI/OiAoKSA9PiBhbnkpIHtcbiAgICB0aGlzLnNldExvYWRlcih0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29kZSA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQodGhpcy5pZEZpZWxkKSB8fCB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCh0aGlzLmlkRmllbGQpO1xuICAgICAgdGhpcy5wYWdlVHlwZSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YS50eXBlO1xuICAgICAgdGhpc1t0aGlzLmlkRmllbGRdID0gY29kZTtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRlICYmIGNvZGUpIHRocm93ICdQYWdlIGlzIGltcHVyZSc7XG4gICAgICBpZiAoY29kZSAmJiBmdW5jKSBhd2FpdCBmdW5jKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgaWYgKGVycikgZXJyKCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbmZvRnVuYyhlcnJvciwgMCk7XG4gICAgICAgIHRoaXMudVMuYmFjaygpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNldExvYWRlcihmYWxzZSk7XG4gIH1cblxuICBzZXRMb2FkZXIgPSAodjogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMubG9hZGluZyA9IHY7XG4gICAgdGhpcy5sb2FkaW5nU2lnbmFsLnNldCh2KTtcbiAgfTtcblxuICBwYWdlU3RhdGUgPSBjb21wdXRlZDxJUGFnZVN0YXRlPigoKSA9PiAoe1xuICAgIGlzQ2xvbmU6IHRoaXMuaXNDbG9uZSgpLFxuICAgIGlzQ3JlYXRlOiB0aGlzLmlzQ3JlYXRlKCksXG4gICAgaXNFZGl0OiB0aGlzLmlzRWRpdCgpLFxuICAgIGlzU2hvdzogdGhpcy5pc1Nob3coKSxcbiAgICBpc01vZGFsOiB0aGlzLmlzTW9kYWwoKSxcbiAgfSkpO1xuXG4gIHNldEFzSW5kZXgoKSB7XG4gICAgdGhpcy5wYWdlVHlwZVNpZ25hbC5zZXQoRVBhZ2VUeXBlLmluZGV4UGFnZSk7XG4gIH1cbiAgc2V0QXNDbG9uZSgpIHtcbiAgICB0aGlzLnBhZ2VUeXBlU2lnbmFsLnNldChFUGFnZVR5cGUuY2xvbmVQYWdlKTtcbiAgfVxuICBzZXRBc0NyZWF0ZSgpIHtcbiAgICB0aGlzLnBhZ2VUeXBlU2lnbmFsLnNldChFUGFnZVR5cGUuY3JlYXRlUGFnZSk7XG4gIH1cbiAgc2V0QXNFZGl0KCkge1xuICAgIHRoaXMucGFnZVR5cGVTaWduYWwuc2V0KEVQYWdlVHlwZS5lZGl0UGFnZSk7XG4gIH1cbiAgc2V0QXNTaG93KCkge1xuICAgIHRoaXMucGFnZVR5cGVTaWduYWwuc2V0KEVQYWdlVHlwZS5zaG93UGFnZSk7XG4gIH1cblxuICBxdWVyeVBhcmFtc1NpZ25hbCA9IHRvU2lnbmFsKHRoaXMucm91dGUucXVlcnlQYXJhbXMgYXMgT2JzZXJ2YWJsZTx7IGNvZGU/OiBzdHJpbmcgfT4pO1xuICBnZXQgcXVlcnlQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlQYXJhbXNTaWduYWwoKSB8fCB7fTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrUGFyYW1zKHBhcmFtczogc3RyaW5nW10gPSBbJ2NvZGUnXSkge1xuICAgIGlmICh0aGlzLmlzQ3JlYXRlKCkpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiBwYXJhbXMpIGlmICghdGhpcy5xdWVyeVBhcmFtcz8uW3BhcmFtIGFzIGtleW9mIHR5cGVvZiB0aGlzLnF1ZXJ5UGFyYW1zXSkgdGhyb3cgYCR7cGFyYW19IGlzIG1pc3NpbmcuYDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5ib3VuY2UoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBoaWRlQ29kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0NyZWF0ZSgpIHx8IHRoaXMuaXNDbG9uZSgpO1xuICB9XG5cbiAgYXN5bmMgYm91bmNlKGVycm9yOiBhbnkpIHtcbiAgICBhd2FpdCB0aGlzLnVTLmluZm8oZXJyb3IsIDApO1xuICAgIHRoaXMudVMuZ29SKCcvJyk7XG4gIH1cblxuICBoYW5kbGVGb3JtKCkge1xuICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgY2FzZSB0aGlzLmlzU2hvdygpOlxuICAgICAgICB0aGlzLmlmU2hvdygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5pc0Nsb25lKCk6XG4gICAgICAgIHRoaXMuaWZDbG9uZSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWZTaG93ID0gKCkgPT4ge307XG4gIGlmQ2xvbmUgPSAoKSA9PiB7fTtcbiAgaWZQYXJhbXMgPSAoZnVuYzogKCkgPT4gYW55KSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzQ3JlYXRlKCkpIHtcbiAgICAgIGZ1bmMoKTtcbiAgICB9XG4gIH07XG5cbiAgYXN5bmMgb25TdWJtaXRDb21wbGV0ZShjb25maWc6IHsgbm90aWZpY2F0aW9uTWVzc2FnZTogc3RyaW5nOyBwYXJhbT86IElPYmplY3RMaXRlcmFsOyByb3V0ZT86IHN0cmluZyB9KSB7XG4gICAgYXdhaXQgdGhpcy51Uy5pbmZvKGNvbmZpZy5ub3RpZmljYXRpb25NZXNzYWdlKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbY29uZmlnLnJvdXRlIHx8ICcuLi9zaG93J10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgcXVlcnlQYXJhbXM6IGNvbmZpZy5wYXJhbSB9KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQYWdlU3RhdGUge1xuICBpc0Nsb25lPzogYm9vbGVhbjtcbiAgaXNDcmVhdGU/OiBib29sZWFuO1xuICBpc0VkaXQ/OiBib29sZWFuO1xuICBpc1Nob3c/OiBib29sZWFuO1xuICBpc01vZGFsPzogYm9vbGVhbjtcbn1cbiJdfQ==
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2hhcmVkL2NvbXBvbmVudHMvcGFnZS10ZW1wbGF0ZS9wYWdlLXRlbXBsYXRlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQWtCLE1BQU0sMEJBQTBCLENBQUM7QUFFckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQU90RCxNQUFNLE9BQU8scUJBQXFCO0lBSWhDLElBQWEsUUFBUSxDQUFDLENBQVU7UUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQU1ELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBVyxRQUFRLENBQUMsS0FBZ0I7UUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQVlEO1FBM0JBLGtCQUFhLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLFlBQU8sR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFNdkIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTlDLG1CQUFjLEdBQUcs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QUM7SUFZRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBK0U7UUFDcEcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0csQ0FBQzs4R0FqSVUscUJBQXFCO2tHQUFyQixxQkFBcUIsaUxBSHRCLEVBQUU7OzJGQUdELHFCQUFxQjtrQkFKakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsRUFBRTtvQkFDWixVQUFVLEVBQUUsSUFBSTtpQkFDakI7d0RBS2MsUUFBUTtzQkFBcEIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBFUGFnZVR5cGUsIElPYmplY3RMaXRlcmFsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2luZGV4Lm1vZGVsJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBTREtFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL21vZGVscy9lbnZpcm9ubWVudC5tb2RlbCc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlOiBgYCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZVRlbXBsYXRlQ29tcG9uZW50PE1vZGVsRGF0YSA9IGFueSwgVEVudmlyb25tZW50IGV4dGVuZHMgU0RLRW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudD4ge1xuICBsb2FkaW5nOiBib29sZWFuO1xuICBsb2FkaW5nU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNNb2RhbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIEBJbnB1dCgpIHNldCBfaXNNb2RhbCh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5pc01vZGFsLnNldCh2KTtcbiAgfVxuICBASW5wdXQoKSBtb2RlbERhdGE6IE1vZGVsRGF0YTtcbiAgbW9kYWxPbkNvbXBsZXRlOiAoLi4uYXJncykgPT4gYW55O1xuICBAT3V0cHV0KCkgbW9kYWxTdWJtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIHBhZ2VUeXBlU2lnbmFsID0gc2lnbmFsPEVQYWdlVHlwZT4odW5kZWZpbmVkKTtcbiAgcHVibGljIGdldCBwYWdlVHlwZSgpOiBFUGFnZVR5cGUge1xuICAgIHJldHVybiB0aGlzLnBhZ2VUeXBlU2lnbmFsKCk7XG4gIH1cbiAgcHVibGljIHNldCBwYWdlVHlwZSh2YWx1ZTogRVBhZ2VUeXBlKSB7XG4gICAgdGhpcy5wYWdlVHlwZVNpZ25hbC5zZXQodmFsdWUpO1xuICB9XG5cbiAgaWRGaWVsZCA9ICdjb2RlJztcbiAgaXNDcmVhdGUgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB0aGlzLnVTLnBhZ2VTLmlzQ3JlYXRlKHRoaXMucm91dGUsIHRoaXMucGFnZVR5cGVTaWduYWwoKSkpO1xuICBpc0luZGV4ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gdGhpcy51Uy5wYWdlUy5pc0luZGV4KHRoaXMucm91dGUsIHRoaXMucGFnZVR5cGVTaWduYWwoKSkpO1xuICBpc0Nsb25lID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gdGhpcy51Uy5wYWdlUy5pc0Nsb25lKHRoaXMucm91dGUsIHRoaXMucGFnZVR5cGVTaWduYWwoKSkpO1xuICBpc0VkaXQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB0aGlzLnVTLnBhZ2VTLmlzRWRpdCh0aGlzLnJvdXRlLCB0aGlzLnBhZ2VUeXBlU2lnbmFsKCkpKTtcbiAgaXNTaG93ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gdGhpcy51Uy5wYWdlUy5pc1Nob3codGhpcy5yb3V0ZSwgdGhpcy5wYWdlVHlwZVNpZ25hbCgpKSk7XG4gIGluZm9GdW5jOiAodGV4dDogc3RyaW5nLCBzdGF0dXM/OiAxIHwgMCB8IDIsIGhlYWRpbmc/OiBzdHJpbmcsIGJ0bnM/OiBhbnlbXSwgZGlzYWJsZUNsb3NlPzogYm9vbGVhbikgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgcHVibGljIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHVibGljIHVTID0gaW5qZWN0KFV0aWxpdHlTZXJ2aWNlPFRFbnZpcm9ubWVudD4pO1xuICByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGFzeW5jIGluaXQoZnVuYz86ICgpID0+IFByb21pc2U8YW55PiwgZXJyPzogKCkgPT4gYW55KSB7XG4gICAgdGhpcy5zZXRMb2FkZXIodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvZGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KHRoaXMuaWRGaWVsZCkgfHwgdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQodGhpcy5pZEZpZWxkKTtcbiAgICAgIHRoaXMucGFnZVR5cGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEudHlwZTtcbiAgICAgIHRoaXNbdGhpcy5pZEZpZWxkXSA9IGNvZGU7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0ZSAmJiBjb2RlKSB0aHJvdyAnUGFnZSBpcyBpbXB1cmUnO1xuICAgICAgaWYgKGNvZGUgJiYgZnVuYykgYXdhaXQgZnVuYygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIGlmIChlcnIpIGVycigpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5mb0Z1bmMoZXJyb3IsIDApO1xuICAgICAgICB0aGlzLnVTLmJhY2soKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRMb2FkZXIoZmFsc2UpO1xuICB9XG5cbiAgc2V0TG9hZGVyID0gKHY6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmxvYWRpbmcgPSB2O1xuICAgIHRoaXMubG9hZGluZ1NpZ25hbC5zZXQodik7XG4gIH07XG5cbiAgcGFnZVN0YXRlID0gY29tcHV0ZWQ8SVBhZ2VTdGF0ZT4oKCkgPT4gKHtcbiAgICBpc0Nsb25lOiB0aGlzLmlzQ2xvbmUoKSxcbiAgICBpc0NyZWF0ZTogdGhpcy5pc0NyZWF0ZSgpLFxuICAgIGlzRWRpdDogdGhpcy5pc0VkaXQoKSxcbiAgICBpc1Nob3c6IHRoaXMuaXNTaG93KCksXG4gICAgaXNNb2RhbDogdGhpcy5pc01vZGFsKCksXG4gIH0pKTtcblxuICBzZXRBc0luZGV4KCkge1xuICAgIHRoaXMucGFnZVR5cGVTaWduYWwuc2V0KEVQYWdlVHlwZS5pbmRleFBhZ2UpO1xuICB9XG4gIHNldEFzQ2xvbmUoKSB7XG4gICAgdGhpcy5wYWdlVHlwZVNpZ25hbC5zZXQoRVBhZ2VUeXBlLmNsb25lUGFnZSk7XG4gIH1cbiAgc2V0QXNDcmVhdGUoKSB7XG4gICAgdGhpcy5wYWdlVHlwZVNpZ25hbC5zZXQoRVBhZ2VUeXBlLmNyZWF0ZVBhZ2UpO1xuICB9XG4gIHNldEFzRWRpdCgpIHtcbiAgICB0aGlzLnBhZ2VUeXBlU2lnbmFsLnNldChFUGFnZVR5cGUuZWRpdFBhZ2UpO1xuICB9XG4gIHNldEFzU2hvdygpIHtcbiAgICB0aGlzLnBhZ2VUeXBlU2lnbmFsLnNldChFUGFnZVR5cGUuc2hvd1BhZ2UpO1xuICB9XG5cbiAgcXVlcnlQYXJhbXNTaWduYWwgPSB0b1NpZ25hbCh0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zIGFzIE9ic2VydmFibGU8eyBjb2RlPzogc3RyaW5nIH0+KTtcbiAgZ2V0IHF1ZXJ5UGFyYW1zKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5UGFyYW1zU2lnbmFsKCkgfHwge307XG4gIH1cblxuICBhc3luYyBjaGVja1BhcmFtcyhwYXJhbXM6IHN0cmluZ1tdID0gWydjb2RlJ10pIHtcbiAgICBpZiAodGhpcy5pc0NyZWF0ZSgpKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSBpZiAoIXRoaXMucXVlcnlQYXJhbXM/LltwYXJhbSBhcyBrZXlvZiB0eXBlb2YgdGhpcy5xdWVyeVBhcmFtc10pIHRocm93IGAke3BhcmFtfSBpcyBtaXNzaW5nLmA7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYm91bmNlKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaGlkZUNvZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDcmVhdGUoKSB8fCB0aGlzLmlzQ2xvbmUoKTtcbiAgfVxuXG4gIGFzeW5jIGJvdW5jZShlcnJvcjogYW55KSB7XG4gICAgYXdhaXQgdGhpcy51Uy5pbmZvKGVycm9yLCAwKTtcbiAgICB0aGlzLnVTLmdvUignLycpO1xuICB9XG5cbiAgaGFuZGxlRm9ybSgpIHtcbiAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgdGhpcy5pc1Nob3coKTpcbiAgICAgICAgdGhpcy5pZlNob3coKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMuaXNDbG9uZSgpOlxuICAgICAgICB0aGlzLmlmQ2xvbmUoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmRWRpdCA9ICgpID0+IHt9O1xuICBpZkNyZWF0ZSA9ICgpID0+IHt9O1xuICBpZlNob3cgPSAoKSA9PiB7fTtcbiAgaWZDbG9uZSA9ICgpID0+IHt9O1xuICBpZlBhcmFtcyA9IChmdW5jOiAoKSA9PiBhbnkpID0+IHtcbiAgICBpZiAoIXRoaXMuaXNDcmVhdGUoKSkge1xuICAgICAgZnVuYygpO1xuICAgIH1cbiAgfTtcblxuICBhc3luYyBvblN1Ym1pdENvbXBsZXRlKGNvbmZpZzogeyBub3RpZmljYXRpb25NZXNzYWdlOiBzdHJpbmc7IHBhcmFtPzogSU9iamVjdExpdGVyYWw7IHJvdXRlPzogc3RyaW5nIH0pIHtcbiAgICBhd2FpdCB0aGlzLnVTLmluZm8oY29uZmlnLm5vdGlmaWNhdGlvbk1lc3NhZ2UpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtjb25maWcucm91dGUgfHwgJy4uL3Nob3cnXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLCBxdWVyeVBhcmFtczogY29uZmlnLnBhcmFtIH0pO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2VTdGF0ZSB7XG4gIGlzQ2xvbmU/OiBib29sZWFuO1xuICBpc0NyZWF0ZT86IGJvb2xlYW47XG4gIGlzRWRpdD86IGJvb2xlYW47XG4gIGlzU2hvdz86IGJvb2xlYW47XG4gIGlzTW9kYWw/OiBib29sZWFuO1xufVxuIl19