theme-lib
Version:
This is a simple example Angular Library published to npm.
396 lines • 22.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
/*
* @license
* Copyright Akveo. All Rights Reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
import { Inject, Injectable, LOCALE_ID } from '@angular/core';
import { DatePipe, FormStyle, getLocaleDayNames, getLocaleFirstDayOfWeek, getLocaleMonthNames, TranslationWidth, } from '@angular/common';
import { NbDateService } from './date.service';
/*
* The `NbNativeDateService` is basic implementation of `NbDateService` using
* native js date objects and angular localization services.
* */
var NbNativeDateService = /** @class */ (function (_super) {
tslib_1.__extends(NbNativeDateService, _super);
function NbNativeDateService(locale) {
var _this = _super.call(this) || this;
_this.setLocale(locale);
return _this;
}
/**
* @param {?} locale
* @return {?}
*/
NbNativeDateService.prototype.setLocale = /**
* @param {?} locale
* @return {?}
*/
function (locale) {
_super.prototype.setLocale.call(this, locale);
this.datePipe = new DatePipe(locale);
};
/**
* @param {?} date
* @param {?} format
* @return {?}
*/
NbNativeDateService.prototype.isValidDateString = /**
* @param {?} date
* @param {?} format
* @return {?}
*/
function (date, format) {
return !isNaN(this.parse(date, format).getTime());
};
/**
* @return {?}
*/
NbNativeDateService.prototype.today = /**
* @return {?}
*/
function () {
return new Date();
};
/**
* @param {?} date
* @return {?}
*/
NbNativeDateService.prototype.getDate = /**
* @param {?} date
* @return {?}
*/
function (date) {
return date.getDate();
};
/**
* @param {?} date
* @return {?}
*/
NbNativeDateService.prototype.getMonth = /**
* @param {?} date
* @return {?}
*/
function (date) {
return date.getMonth();
};
/**
* @param {?} date
* @return {?}
*/
NbNativeDateService.prototype.getYear = /**
* @param {?} date
* @return {?}
*/
function (date) {
return date.getFullYear();
};
/**
* @param {?} date
* @return {?}
*/
NbNativeDateService.prototype.getDayOfWeek = /**
* @param {?} date
* @return {?}
*/
function (date) {
return date.getDay();
};
/*
* returns first day of the week, it can be 1 if week starts from monday
* and 0 if from sunday and so on.
* */
/*
* returns first day of the week, it can be 1 if week starts from monday
* and 0 if from sunday and so on.
* */
/**
* @return {?}
*/
NbNativeDateService.prototype.getFirstDayOfWeek = /*
* returns first day of the week, it can be 1 if week starts from monday
* and 0 if from sunday and so on.
* */
/**
* @return {?}
*/
function () {
return getLocaleFirstDayOfWeek(this.locale);
};
/**
* @param {?} date
* @param {?=} style
* @return {?}
*/
NbNativeDateService.prototype.getMonthName = /**
* @param {?} date
* @param {?=} style
* @return {?}
*/
function (date, style) {
if (style === void 0) { style = TranslationWidth.Abbreviated; }
/** @type {?} */
var index = date.getMonth();
return this.getMonthNameByIndex(index, style);
};
/**
* @param {?} index
* @param {?=} style
* @return {?}
*/
NbNativeDateService.prototype.getMonthNameByIndex = /**
* @param {?} index
* @param {?=} style
* @return {?}
*/
function (index, style) {
if (style === void 0) { style = TranslationWidth.Abbreviated; }
return getLocaleMonthNames(this.locale, FormStyle.Format, style)[index];
};
/**
* @return {?}
*/
NbNativeDateService.prototype.getDayOfWeekNames = /**
* @return {?}
*/
function () {
return getLocaleDayNames(this.locale, FormStyle.Format, TranslationWidth.Short);
};
/**
* @param {?} date
* @param {?} format
* @return {?}
*/
NbNativeDateService.prototype.format = /**
* @param {?} date
* @param {?} format
* @return {?}
*/
function (date, format) {
return this.datePipe.transform(date, format);
};
/*
* We haven't got capability to parse date using formatting without third party libraries.
* */
/*
* We haven't got capability to parse date using formatting without third party libraries.
* */
/**
* @param {?} date
* @param {?} format
* @return {?}
*/
NbNativeDateService.prototype.parse = /*
* We haven't got capability to parse date using formatting without third party libraries.
* */
/**
* @param {?} date
* @param {?} format
* @return {?}
*/
function (date, format) {
return new Date(Date.parse(date));
};
/**
* @param {?} date
* @param {?} num
* @return {?}
*/
NbNativeDateService.prototype.addDay = /**
* @param {?} date
* @param {?} num
* @return {?}
*/
function (date, num) {
return this.createDate(date.getFullYear(), date.getMonth(), date.getDate() + num);
};
/**
* @param {?} date
* @param {?} num
* @return {?}
*/
NbNativeDateService.prototype.addMonth = /**
* @param {?} date
* @param {?} num
* @return {?}
*/
function (date, num) {
return this.createDate(date.getFullYear(), date.getMonth() + num, date.getDate());
};
/**
* @param {?} date
* @param {?} num
* @return {?}
*/
NbNativeDateService.prototype.addYear = /**
* @param {?} date
* @param {?} num
* @return {?}
*/
function (date, num) {
return this.createDate(date.getFullYear() + num, date.getMonth(), date.getDate());
};
/**
* @param {?} date
* @return {?}
*/
NbNativeDateService.prototype.clone = /**
* @param {?} date
* @return {?}
*/
function (date) {
return new Date(date.getTime());
};
/**
* @param {?} date1
* @param {?} date2
* @return {?}
*/
NbNativeDateService.prototype.compareDates = /**
* @param {?} date1
* @param {?} date2
* @return {?}
*/
function (date1, date2) {
return date1.getTime() - date2.getTime();
};
/**
* @param {?} year
* @param {?} month
* @param {?} date
* @return {?}
*/
NbNativeDateService.prototype.createDate = /**
* @param {?} year
* @param {?} month
* @param {?} date
* @return {?}
*/
function (year, month, date) {
/** @type {?} */
var result = new Date(year, month, date);
// We need to correct for the fact that JS native Date treats years in range [0, 99] as
// abbreviations for 19xx.
if (year >= 0 && year < 100) {
result.setFullYear(result.getFullYear() - 1900);
}
return result;
};
/**
* @param {?} date
* @return {?}
*/
NbNativeDateService.prototype.getMonthEnd = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.createDate(date.getFullYear(), date.getMonth() + 1, 0);
};
/**
* @param {?} date
* @return {?}
*/
NbNativeDateService.prototype.getMonthStart = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.createDate(date.getFullYear(), date.getMonth(), 1);
};
/**
* @param {?} date
* @return {?}
*/
NbNativeDateService.prototype.getNumberOfDaysInMonth = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.getMonthEnd(date).getDate();
};
/**
* @param {?} date
* @return {?}
*/
NbNativeDateService.prototype.getYearEnd = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.createDate(date.getFullYear(), 11, 31);
};
/**
* @param {?} date
* @return {?}
*/
NbNativeDateService.prototype.getYearStart = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.createDate(date.getFullYear(), 0, 1);
};
/**
* @param {?} date1
* @param {?} date2
* @return {?}
*/
NbNativeDateService.prototype.isSameDay = /**
* @param {?} date1
* @param {?} date2
* @return {?}
*/
function (date1, date2) {
return this.isSameMonth(date1, date2) &&
date1.getDate() === date2.getDate();
};
/**
* @param {?} date1
* @param {?} date2
* @return {?}
*/
NbNativeDateService.prototype.isSameMonth = /**
* @param {?} date1
* @param {?} date2
* @return {?}
*/
function (date1, date2) {
return this.isSameYear(date1, date2) &&
date1.getMonth() === date2.getMonth();
};
/**
* @param {?} date1
* @param {?} date2
* @return {?}
*/
NbNativeDateService.prototype.isSameYear = /**
* @param {?} date1
* @param {?} date2
* @return {?}
*/
function (date1, date2) {
return date1.getFullYear() === date2.getFullYear();
};
NbNativeDateService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
NbNativeDateService.ctorParameters = function () { return [
{ type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] }
]; };
return NbNativeDateService;
}(NbDateService));
export { NbNativeDateService };
if (false) {
/**
* @type {?}
* @protected
*/
NbNativeDateService.prototype.datePipe;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWRhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RoZW1lLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NhbGVuZGFyLWtpdC9zZXJ2aWNlcy9uYXRpdmUtZGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFNQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIsZ0JBQWdCLEdBQ2pCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQU8vQztJQUN5QywrQ0FBbUI7SUFHMUQsNkJBQStCLE1BQWM7UUFBN0MsWUFDRSxpQkFBTyxTQUVSO1FBREMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7SUFDekIsQ0FBQzs7Ozs7SUFFRCx1Q0FBUzs7OztJQUFULFVBQVUsTUFBYztRQUN0QixpQkFBTSxTQUFTLFlBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDOzs7Ozs7SUFFRCwrQ0FBaUI7Ozs7O0lBQWpCLFVBQWtCLElBQVksRUFBRSxNQUFjO1FBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDOzs7O0lBRUQsbUNBQUs7OztJQUFMO1FBQ0UsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3BCLENBQUM7Ozs7O0lBRUQscUNBQU87Ozs7SUFBUCxVQUFRLElBQVU7UUFDaEIsT0FBTyxJ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QUM7SUFDckQsQ0FBQzs7Ozs7SUFFRCwwQ0FBWTs7OztJQUFaLFVBQWEsSUFBVTtRQUNyQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDOzs7Ozs7SUFFRCx1Q0FBUzs7Ozs7SUFBVCxVQUFVLEtBQVcsRUFBRSxLQUFXO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO1lBQ25DLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEMsQ0FBQzs7Ozs7O0lBRUQseUNBQVc7Ozs7O0lBQVgsVUFBWSxLQUFXLEVBQUUsS0FBVztRQUNsQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztZQUNsQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzFDLENBQUM7Ozs7OztJQUVELHdDQUFVOzs7OztJQUFWLFVBQVcsS0FBVyxFQUFFLEtBQVc7UUFDakMsT0FBTyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JELENBQUM7O2dCQXJJRixVQUFVOzs7OzZDQUlJLE1BQU0sU0FBQyxTQUFTOztJQWtJL0IsMEJBQUM7Q0FBQSxBQXRJRCxDQUN5QyxhQUFhLEdBcUlyRDtTQXJJWSxtQkFBbUI7Ozs7OztJQUM5Qix1Q0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgQWt2ZW8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBMT0NBTEVfSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBEYXRlUGlwZSxcclxuICBGb3JtU3R5bGUsXHJcbiAgZ2V0TG9jYWxlRGF5TmFtZXMsXHJcbiAgZ2V0TG9jYWxlRmlyc3REYXlPZldlZWssXHJcbiAgZ2V0TG9jYWxlTW9udGhOYW1lcyxcclxuICBUcmFuc2xhdGlvbldpZHRoLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5pbXBvcnQgeyBOYkRhdGVTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlLnNlcnZpY2UnO1xyXG5cclxuXHJcbi8qXHJcbiAqIFRoZSBgTmJOYXRpdmVEYXRlU2VydmljZWAgaXMgYmFzaWMgaW1wbGVtZW50YXRpb24gb2YgYE5iRGF0ZVNlcnZpY2VgIHVzaW5nXHJcbiAqIG5hdGl2ZSBqcyBkYXRlIG9iamVjdHMgYW5kIGFuZ3VsYXIgbG9jYWxpemF0aW9uIHNlcnZpY2VzLlxyXG4gKiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOYk5hdGl2ZURhdGVTZXJ2aWNlIGV4dGVuZHMgTmJEYXRlU2VydmljZTxEYXRlPiB7XHJcbiAgcHJvdGVjdGVkIGRhdGVQaXBlOiBEYXRlUGlwZTtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZTogc3RyaW5nKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5zZXRMb2NhbGUobG9jYWxlKTtcclxuICB9XHJcblxyXG4gIHNldExvY2FsZShsb2NhbGU6IHN0cmluZykge1xyXG4gICAgc3VwZXIuc2V0TG9jYWxlKGxvY2FsZSk7XHJcbiAgICB0aGlzLmRhdGVQaXBlID0gbmV3IERhdGVQaXBlKGxvY2FsZSk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkRGF0ZVN0cmluZyhkYXRlOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIWlzTmFOKHRoaXMucGFyc2UoZGF0ZSwgZm9ybWF0KS5nZXRUaW1lKCkpO1xyXG4gIH1cclxuXHJcbiAgdG9kYXkoKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoKTtcclxuICB9XHJcblxyXG4gIGdldERhdGUoZGF0ZTogRGF0ZSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRNb250aChkYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XHJcbiAgfVxyXG5cclxuICBnZXRZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICB9XHJcblxyXG4gIGdldERheU9mV2VlayhkYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBkYXRlLmdldERheSgpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiByZXR1cm5zIGZpcnN0IGRheSBvZiB0aGUgd2VlaywgaXQgY2FuIGJlIDEgaWYgd2VlayBzdGFydHMgZnJvbSBtb25kYXlcclxuICAgKiBhbmQgMCBpZiBmcm9tIHN1bmRheSBhbmQgc28gb24uXHJcbiAgICogKi9cclxuICBnZXRGaXJzdERheU9mV2VlaygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGdldExvY2FsZUZpcnN0RGF5T2ZXZWVrKHRoaXMubG9jYWxlKTtcclxuICB9XHJcblxyXG4gIGdldE1vbnRoTmFtZShkYXRlOiBEYXRlLCBzdHlsZTogVHJhbnNsYXRpb25XaWR0aCA9IFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgaW5kZXg6IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKTtcclxuICAgIHJldHVybiB0aGlzLmdldE1vbnRoTmFtZUJ5SW5kZXgoaW5kZXgsIHN0eWxlKTtcclxuICB9XHJcblxyXG4gIGdldE1vbnRoTmFtZUJ5SW5kZXgoaW5kZXg6IG51bWJlciwgc3R5bGU6IFRyYW5zbGF0aW9uV2lkdGggPSBUcmFuc2xhdGlvbldpZHRoLkFiYnJldmlhdGVkKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBnZXRMb2NhbGVNb250aE5hbWVzKHRoaXMubG9jYWxlLCBGb3JtU3R5bGUuRm9ybWF0LCBzdHlsZSlbaW5kZXhdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF5T2ZXZWVrTmFtZXMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIGdldExvY2FsZURheU5hbWVzKHRoaXMubG9jYWxlLCBGb3JtU3R5bGUuRm9ybWF0LCBUcmFuc2xhdGlvbldpZHRoLlNob3J0KTtcclxuICB9XHJcblxyXG4gIGZvcm1hdChkYXRlOiBEYXRlLCBmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgZm9ybWF0KTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogV2UgaGF2ZW4ndCBnb3QgY2FwYWJpbGl0eSB0byBwYXJzZSBkYXRlIHVzaW5nIGZvcm1hdHRpbmcgd2l0aG91dCB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMuXHJcbiAgICogKi9cclxuICBwYXJzZShkYXRlOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5wYXJzZShkYXRlKSk7XHJcbiAgfVxyXG5cclxuICBhZGREYXkoZGF0ZTogRGF0ZSwgbnVtOiBudW1iZXIpOiBEYXRlIHtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZURhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpICsgbnVtKTtcclxuICB9XHJcblxyXG4gIGFkZE1vbnRoKGRhdGU6IERhdGUsIG51bTogbnVtYmVyKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgbnVtLCBkYXRlLmdldERhdGUoKSk7XHJcbiAgfVxyXG5cclxuICBhZGRZZWFyKGRhdGU6IERhdGUsIG51bTogbnVtYmVyKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSArIG51bSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7XHJcbiAgfVxyXG5cclxuICBjbG9uZShkYXRlOiBEYXRlKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xyXG4gIH1cclxuXHJcbiAgY29tcGFyZURhdGVzKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZGF0ZTEuZ2V0VGltZSgpIC0gZGF0ZTIuZ2V0VGltZSgpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRGF0ZSh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRhdGU6IG51bWJlcik6IERhdGUge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRhdGUpO1xyXG5cclxuICAgIC8vIFdlIG5lZWQgdG8gY29ycmVjdCBmb3IgdGhlIGZhY3QgdGhhdCBKUyBuYXRpdmUgRGF0ZSB0cmVhdHMgeWVhcnMgaW4gcmFuZ2UgWzAsIDk5XSBhc1xyXG4gICAgLy8gYWJicmV2aWF0aW9ucyBmb3IgMTl4eC5cclxuICAgIGlmICh5ZWFyID49IDAgJiYgeWVhciA8IDEwMCkge1xyXG4gICAgICByZXN1bHQuc2V0RnVsbFllYXIocmVzdWx0LmdldEZ1bGxZZWFyKCkgLSAxOTAwKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBnZXRNb250aEVuZChkYXRlOiBEYXRlKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgMSwgMCk7XHJcbiAgfVxyXG5cclxuICBnZXRNb250aFN0YXJ0KGRhdGU6IERhdGUpOiBEYXRlIHtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZURhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIDEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TnVtYmVyT2ZEYXlzSW5Nb250aChkYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmdldE1vbnRoRW5kKGRhdGUpLmdldERhdGUoKTtcclxuICB9XHJcblxyXG4gIGdldFllYXJFbmQoZGF0ZTogRGF0ZSk6IERhdGUge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDExLCAzMSk7XHJcbiAgfVxyXG5cclxuICBnZXRZZWFyU3RhcnQoZGF0ZTogRGF0ZSk6IERhdGUge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xyXG4gIH1cclxuXHJcbiAgaXNTYW1lRGF5KGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTYW1lTW9udGgoZGF0ZTEsIGRhdGUyKSAmJlxyXG4gICAgICBkYXRlMS5nZXREYXRlKCkgPT09IGRhdGUyLmdldERhdGUoKTtcclxuICB9XHJcblxyXG4gIGlzU2FtZU1vbnRoKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTYW1lWWVhcihkYXRlMSwgZGF0ZTIpICYmXHJcbiAgICAgIGRhdGUxLmdldE1vbnRoKCkgPT09IGRhdGUyLmdldE1vbnRoKCk7XHJcbiAgfVxyXG5cclxuICBpc1NhbWVZZWFyKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGRhdGUxLmdldEZ1bGxZZWFyKCkgPT09IGRhdGUyLmdldEZ1bGxZZWFyKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==