ng-materialgrammi
Version:
An Angular framework which follows
179 lines • 25.2 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
export class DaterService {
constructor() {
this.now = new Date();
this.months = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
];
this.weekDays = [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
];
}
assign(dateString) {
return new Date(dateString);
}
dater(dd = false) {
return !dd ? new Date() : new Date(dd);
}
getMonth(date = this.dater()) {
return date.getMonth();
}
getDate(date = this.dater()) {
return date.getDate();
}
getYear(date = this.dater()) {
return date.getFullYear();
}
getDay(date = this.dater()) {
return date.getDay();
}
getWeekDay(date = this.dater()) {
return this.weekDays[date.getDay()];
}
getHour(date = this.dater()) {
return date.getHours();
}
getMinute(date = this.dater()) {
return date.getMinutes();
}
getSeconds(date = this.dater()) {
return date.getSeconds();
}
format(date, formatString) {
let splitter = this.splitDate(date);
if (splitter && splitter.date !== undefined && splitter.day !== undefined
&& splitter.hour !== undefined && splitter.minute !== undefined
&& splitter.month !== undefined && splitter.second !== undefined && splitter.year !== undefined) {
formatString = formatString.split("dd").join(this.addZero(splitter.date, 1));
formatString = formatString.split("d").join(`${splitter.date}`);
formatString = formatString.split("MMMM").join(this.months[splitter.month] ? this.months[splitter.month] : "");
formatString = formatString.split("MMM").join(this.firstDigits(this.months[splitter.month] ? this.months[splitter.month] : ""));
formatString = formatString.split("MM").join(this.addZero(splitter.month + 1, 1));
formatString = formatString.split("M").join(`${splitter.month + 1}`);
formatString = formatString.split("YYYY").join(`${splitter.year}`);
formatString = formatString.split("YY").join(this.firstDigits(`${splitter.year}`, 2));
formatString = formatString.split("yyyy").join(`${splitter.year}`);
formatString = formatString.split("yy").join(this.firstDigits(`${splitter.year}`, 2));
formatString = formatString.split("DD").join(`${splitter.day}`);
formatString = formatString.split("D").join(this.firstDigits(`${splitter.day}`, 3));
formatString = formatString.split("HH").join(this.addZero(splitter.hour, 1));
formatString = formatString.split("H").join(`${splitter.hour}`);
formatString = formatString.split("hh").join(`${this.twelveHour(splitter.hour, true)}`);
formatString = formatString.split("h").join(`${this.twelveHour(splitter.hour, false)}`);
formatString = formatString.split("mm").join(this.addZero(splitter.minute, 1));
formatString = formatString.split("m").join(`${splitter.minute}`);
formatString = formatString.split("ss").join(this.addZero(splitter.second, 1));
formatString = formatString.split("s").join(`${splitter.second}`);
formatString = formatString.split("AP").join(this.getAp(splitter.hour));
formatString = formatString.split("ap").join(this.getAp(splitter.hour, true));
return formatString;
}
return ``;
}
twelveHour(dd, addZ = false) {
let d = dd > 12 ? (dd - 12) : dd;
return addZ ? this.addZero(d, 1) : d;
}
getAp(dd, sm = false) {
let ap = {
a: sm ? "am" : "AM",
p: sm ? "pm" : "PM"
};
return dd > 12 ? ap.p : ap.a;
}
firstDigits(str, num = 3) {
let mystring = str.split("");
let final = "";
for (let i = 0; i < num; i++) {
final += `${mystring[i]}`;
}
return final;
}
addZero(d, numZ = 1) {
let conc = ``;
for (let i = 0; i < numZ; i++) {
conc += `0`;
}
if (d < 10) {
return conc + d;
}
return `${d}`;
}
initializeSplit() {
return this.dateSplit = {
date: 0,
year: 0,
month: 0,
day: 0,
hour: 0,
minute: 0,
second: 0
};
}
splitDate(date) {
this.dateSplit = this.initializeSplit();
this.dateSplit.date = date.getDate();
this.dateSplit.year = date.getFullYear();
this.dateSplit.month = date.getMonth();
this.dateSplit.day = date.getDay();
this.dateSplit.hour = date.getHours();
this.dateSplit.minute = date.getMinutes();
this.dateSplit.second = date.getSeconds();
return this.dateSplit;
}
getMonths(month = false) {
if (month == false) {
let mo = this.months.map(m => {
return m.slice(0, 3);
});
return mo;
}
else {
return this.months[month].slice(0, 3);
}
}
getMonthsLong(month = false) {
return month ? this.months[month] : this.months;
}
daysInMonth(month, year = this.getYear(this.dater())) {
let dd = this.splitDate(this.dater(`${this.months[month - 1]} 01, ${year}`));
return new Date(dd.year, dd.month + 1, 0).getDate();
}
isGreater(date1, date2) {
let d1 = new Date(date1);
let d2 = new Date(date2);
return d1.getTime() > d2.getTime();
}
isLessThan(date1, date2) {
let d1 = new Date(date1);
let d2 = new Date(date2);
return d1.getTime() < d2.getTime();
}
}
DaterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: DaterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
DaterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: DaterService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: DaterService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsZ3JhbW1pL3NyYy9saWIvZGF0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWdCM0MsTUFBTSxPQUFPLFlBQVk7SUE4QnZCO1FBN0JBLFFBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRWpCLFdBQU0sR0FBRztZQUNQLFNBQVM7WUFDVCxVQUFVO1lBQ1YsT0FBTztZQUNQLE9BQU87WUFDUCxLQUFLO1lBQ0wsTUFBTTtZQUNOLE1BQU07WUFDTixRQUFRO1lBQ1IsV0FBVztZQUNYLFNBQVM7WUFDVCxVQUFVO1lBQ1YsVUFBVTtTQUNYLENBQUM7UUFFRixhQUFRLEdBQUc7WUFDVCxRQUFRO1lBQ1IsUUFBUTtZQUNSLFNBQVM7WUFDVCxXQUFXO1lBQ1gsVUFBVTtZQUNWLFFBQVE7WUFDUixVQUFVO1NBQ1gsQ0FBQztJQUljLENBQUM7SUFFakIsTUFBTSxDQUFDLFVBQWtCO1FBQ3ZCLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFxQixLQUFLO1FBQzlCLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBYSxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBYSxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBYSxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBYSxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQzlCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBYSxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQWEsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUMvQixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQWEsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNqQyxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQWEsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNsQyxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVUsRUFBRSxZQUFvQjtRQUNyQyxJQUFJLFFBQVEsR0FBZ0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsR0FBRyxLQUFLLFNBQVM7ZUFDbkUsUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxTQUFTO2VBQzVELFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFDO1lBQzlGLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RSxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRSxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvRyxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEksWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRixZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkUsWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbkUsWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RixZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNuRSxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEYsWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxD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QUMsQ0FBQztRQUN6QixJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhLEVBQUUsS0FBYTtRQUNyQyxJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQzs7eUdBaE1VLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BsaXR0ZWREYXRlIHtcbiAgZGF0ZTogbnVtYmVyLFxuICB5ZWFyOiBudW1iZXIsXG4gIG1vbnRoOiBudW1iZXIsXG4gIGRheTogbnVtYmVyLFxuICBob3VyOiBudW1iZXIsXG4gIG1pbnV0ZTogbnVtYmVyLFxuICBzZWNvbmQ6IG51bWJlclxufVxuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERhdGVyU2VydmljZSB7XG4gIG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgbW9udGhzID0gW1xuICAgIFwiSmFudWFyeVwiLFxuICAgIFwiRmVicnVhcnlcIixcbiAgICBcIk1hcmNoXCIsXG4gICAgXCJBcHJpbFwiLFxuICAgIFwiTWF5XCIsXG4gICAgXCJKdW5lXCIsXG4gICAgXCJKdWx5XCIsXG4gICAgXCJBdWd1c3RcIixcbiAgICBcIlNlcHRlbWJlclwiLFxuICAgIFwiT2N0b2JlclwiLFxuICAgIFwiTm92ZW1iZXJcIixcbiAgICBcIkRlY2VtYmVyXCJcbiAgXTtcblxuICB3ZWVrRGF5cyA9IFtcbiAgICBcIlN1bmRheVwiLFxuICAgIFwiTW9uZGF5XCIsXG4gICAgXCJUdWVzZGF5XCIsXG4gICAgXCJXZWRuZXNkYXlcIixcbiAgICBcIlRodXJzZGF5XCIsXG4gICAgXCJGcmlkYXlcIixcbiAgICBcIlNhdHVyZGF5XCJcbiAgXTtcblxuICBkYXRlU3BsaXQ/OiBTcGxpdHRlZERhdGU7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBhc3NpZ24oZGF0ZVN0cmluZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICB9XG5cbiAgZGF0ZXIoZGQ6IHN0cmluZyB8IGZhbHNlID0gZmFsc2Upe1xuICAgIHJldHVybiAhZGQgPyBuZXcgRGF0ZSgpIDogbmV3IERhdGUoZGQpO1xuICB9XG5cbiAgZ2V0TW9udGgoZGF0ZTogRGF0ZSA9IHRoaXMuZGF0ZXIoKSl7XG4gICAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbiAgfVxuXG4gIGdldERhdGUoZGF0ZTogRGF0ZSA9IHRoaXMuZGF0ZXIoKSl7XG4gICAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpO1xuICB9XG5cbiAgZ2V0WWVhcihkYXRlOiBEYXRlID0gdGhpcy5kYXRlcigpKXtcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICB9XG5cbiAgZ2V0RGF5KGRhdGU6IERhdGUgPSB0aGlzLmRhdGVyKCkpe1xuICAgIHJldHVybiBkYXRlLmdldERheSgpO1xuICB9XG5cbiAgZ2V0V2Vla0RheShkYXRlOiBEYXRlID0gdGhpcy5kYXRlcigpKXtcbiAgICByZXR1cm4gdGhpcy53ZWVrRGF5c1tkYXRlLmdldERheSgpXTtcbiAgfVxuXG4gIGdldEhvdXIoZGF0ZTogRGF0ZSA9IHRoaXMuZGF0ZXIoKSl7XG4gICAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbiAgfVxuXG4gIGdldE1pbnV0ZShkYXRlOiBEYXRlID0gdGhpcy5kYXRlcigpKXtcbiAgICByZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG4gIH1cblxuICBnZXRTZWNvbmRzKGRhdGU6IERhdGUgPSB0aGlzLmRhdGVyKCkpe1xuICAgIHJldHVybiBkYXRlLmdldFNlY29uZHMoKTtcbiAgfVxuXG4gIGZvcm1hdChkYXRlOiBEYXRlLCBmb3JtYXRTdHJpbmc6IHN0cmluZykge1xuICAgIGxldCBzcGxpdHRlcjpTcGxpdHRlZERhdGUgPSB0aGlzLnNwbGl0RGF0ZShkYXRlKTtcbiAgICBpZihzcGxpdHRlciAmJiBzcGxpdHRlci5kYXRlICE9PSB1bmRlZmluZWQgJiYgc3BsaXR0ZXIuZGF5ICE9PSB1bmRlZmluZWQgXG4gICAgICAmJiBzcGxpdHRlci5ob3VyICE9PSB1bmRlZmluZWQgJiYgc3BsaXR0ZXIubWludXRlICE9PSB1bmRlZmluZWQgXG4gICAgICAmJiBzcGxpdHRlci5tb250aCAhPT0gdW5kZWZpbmVkICYmIHNwbGl0dGVyLnNlY29uZCAhPT0gdW5kZWZpbmVkICYmIHNwbGl0dGVyLnllYXIgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcImRkXCIpLmpvaW4odGhpcy5hZGRaZXJvKHNwbGl0dGVyLmRhdGUsIDEpKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwiZFwiKS5qb2luKGAke3NwbGl0dGVyLmRhdGV9YCk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcIk1NTU1cIikuam9pbih0aGlzLm1vbnRoc1tzcGxpdHRlci5tb250aF0gPyB0aGlzLm1vbnRoc1tzcGxpdHRlci5tb250aF0gOiBcIlwiKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwiTU1NXCIpLmpvaW4odGhpcy5maXJzdERpZ2l0cyh0aGlzLm1vbnRoc1tzcGxpdHRlci5tb250aF0gPyB0aGlzLm1vbnRoc1tzcGxpdHRlci5tb250aF0gOiBcIlwiKSk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcIk1NXCIpLmpvaW4odGhpcy5hZGRaZXJvKHNwbGl0dGVyLm1vbnRoKzEsIDEpKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwiTVwiKS5qb2luKGAke3NwbGl0dGVyLm1vbnRoKzF9YCk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcIllZWVlcIikuam9pbihgJHtzcGxpdHRlci55ZWFyfWApO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJZWVwiKS5qb2luKHRoaXMuZmlyc3REaWdpdHMoYCR7c3BsaXR0ZXIueWVhcn1gLCAyKSk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcInl5eXlcIikuam9pbihgJHtzcGxpdHRlci55ZWFyfWApO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJ5eVwiKS5qb2luKHRoaXMuZmlyc3REaWdpdHMoYCR7c3BsaXR0ZXIueWVhcn1gLCAyKSk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcIkREXCIpLmpvaW4oYCR7c3BsaXR0ZXIuZGF5fWApO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJEXCIpLmpvaW4odGhpcy5maXJzdERpZ2l0cyhgJHtzcGxpdHRlci5kYXl9YCwgMykpO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJISFwiKS5qb2luKHRoaXMuYWRkWmVybyhzcGxpdHRlci5ob3VyLCAxKSk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcIkhcIikuam9pbihgJHtzcGxpdHRlci5ob3VyfWApO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJoaFwiKS5qb2luKGAke3RoaXMudHdlbHZlSG91cihzcGxpdHRlci5ob3VyLCB0cnVlKX1gKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwiaFwiKS5qb2luKGAke3RoaXMudHdlbHZlSG91cihzcGxpdHRlci5ob3VyLCBmYWxzZSl9YCk7XG4gICAgICAgIGZvcm1hdFN0cmluZyA9IGZvcm1hdFN0cmluZy5zcGxpdChcIm1tXCIpLmpvaW4odGhpcy5hZGRaZXJvKHNwbGl0dGVyLm1pbnV0ZSwgMSkpO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJtXCIpLmpvaW4oYCR7c3BsaXR0ZXIubWludXRlfWApO1xuICAgICAgICBmb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmcuc3BsaXQoXCJzc1wiKS5qb2luKHRoaXMuYWRkWmVybyhzcGxpdHRlci5zZWNvbmQsIDEpKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwic1wiKS5qb2luKGAke3NwbGl0dGVyLnNlY29uZH1gKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwiQVBcIikuam9pbih0aGlzLmdldEFwKHNwbGl0dGVyLmhvdXIpKTtcbiAgICAgICAgZm9ybWF0U3RyaW5nID0gZm9ybWF0U3RyaW5nLnNwbGl0KFwiYXBcIikuam9pbih0aGlzLmdldEFwKHNwbGl0dGVyLmhvdXIsIHRydWUpKTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdFN0cmluZztcbiAgICAgIH1cbiAgICByZXR1cm4gYGA7XG4gIH1cblxuICB0d2VsdmVIb3VyKGRkOiBudW1iZXIsIGFkZFogPSBmYWxzZSkge1xuICAgIGxldCBkOiBudW1iZXIgPSBkZCA+IDEyID8gKGRkIC0gMTIpIDogZGQ7XG4gICAgcmV0dXJuIGFkZFogPyB0aGlzLmFkZFplcm8oZCwgMSkgOiBkO1xuICB9XG5cbiAgZ2V0QXAoZGQ6IG51bWJlciwgc20gPSBmYWxzZSkge1xuICAgIGxldCBhcCA9IHtcbiAgICAgIGE6IHNtID8gXCJhbVwiIDogXCJBTVwiLFxuICAgICAgcDogc20gPyBcInBtXCIgOiBcIlBNXCJcbiAgICB9O1xuICAgIHJldHVybiBkZCA+IDEyID8gYXAucCA6IGFwLmE7XG4gIH1cblxuICBwcml2YXRlIGZpcnN0RGlnaXRzKHN0cjogc3RyaW5nLCBudW0gPSAzKSB7XG4gICAgbGV0IG15c3RyaW5nID0gc3RyLnNwbGl0KFwiXCIpO1xuICAgIGxldCBmaW5hbCA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgZmluYWwgKz0gYCR7bXlzdHJpbmdbaV19YDtcbiAgICB9XG4gICAgcmV0dXJuIGZpbmFsO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRaZXJvKGQ6IG51bWJlciwgbnVtWiA9IDEpIHtcbiAgICBsZXQgY29uYyA9IGBgO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtWjsgaSsrKSB7XG4gICAgICBjb25jICs9IGAwYDtcbiAgICB9XG4gICAgaWYgKGQgPCAxMCkge1xuICAgICAgcmV0dXJuIGNvbmMgKyBkO1xuICAgIH1cbiAgICByZXR1cm4gYCR7ZH1gO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVNwbGl0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlU3BsaXQgPSB7XG4gICAgICBkYXRlOiAwLFxuICAgICAgeWVhcjogMCxcbiAgICAgIG1vbnRoOiAwLCBcbiAgICAgIGRheTogMCxcbiAgICAgIGhvdXI6IDAsXG4gICAgICBtaW51dGU6IDAsXG4gICAgICBzZWNvbmQ6IDBcbiAgICB9O1xuICB9XG5cbiAgc3BsaXREYXRlKGRhdGU6IERhdGUpIHtcbiAgICB0aGlzLmRhdGVTcGxpdCA9IHRoaXMuaW5pdGlhbGl6ZVNwbGl0KCk7XG4gICAgdGhpcy5kYXRlU3BsaXQuZGF0ZSA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgIHRoaXMuZGF0ZVNwbGl0LnllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgdGhpcy5kYXRlU3BsaXQubW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgdGhpcy5kYXRlU3BsaXQuZGF5ID0gZGF0ZS5nZXREYXkoKTtcbiAgICB0aGlzLmRhdGVTcGxpdC5ob3VyID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIHRoaXMuZGF0ZVNwbGl0Lm1pbnV0ZSA9IGRhdGUuZ2V0TWludXRlcygpO1xuICAgIHRoaXMuZGF0ZVNwbGl0LnNlY29uZCA9IGRhdGUuZ2V0U2Vjb25kcygpO1xuICAgIHJldHVybiB0aGlzLmRhdGVTcGxpdDtcbiAgfVxuXG4gIGdldE1vbnRocyhtb250aDogbnVtYmVyIHwgZmFsc2UgPSBmYWxzZSkge1xuICAgIGlmKG1vbnRoID09IGZhbHNlKSB7XG4gICAgICBsZXQgbW8gPSB0aGlzLm1vbnRocy5tYXAobSA9PiB7XG4gICAgICAgIHJldHVybiBtLnNsaWNlKDAsIDMpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbW87XG4gICAgfWVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMubW9udGhzW21vbnRoXS5zbGljZSgwLCAzKTtcbiAgICB9XG4gICAgXG4gIH1cblxuICBnZXRNb250aHNMb25nKG1vbnRoOiBudW1iZXIgfCBmYWxzZSA9IGZhbHNlKSB7IFxuICAgIHJldHVybiBtb250aCA/IHRoaXMubW9udGhzW21vbnRoXSA6IHRoaXMubW9udGhzO1xuICB9XG5cbiAgZGF5c0luTW9udGgobW9udGg6IG51bWJlciwgeWVhcjpudW1iZXIgPSB0aGlzLmdldFllYXIodGhpcy5kYXRlcigpKSkge1xuICAgIGxldCBkZCA9IHRoaXMuc3BsaXREYXRlKHRoaXMuZGF0ZXIoYCR7dGhpcy5tb250aHNbbW9udGgtMV19IDAxLCAke3llYXJ9YCkpO1xuICAgIHJldHVybiBuZXcgRGF0ZShkZC55ZWFyLCBkZC5tb250aCArIDEsIDApLmdldERhdGUoKTtcbiAgfVxuXG4gIGlzR3JlYXRlcihkYXRlMTogc3RyaW5nLCBkYXRlMjogc3RyaW5nKXtcbiAgICBsZXQgZDEgPSBuZXcgRGF0ZShkYXRlMSk7XG4gICAgbGV0IGQyID0gbmV3IERhdGUoZGF0ZTIpO1xuICAgIHJldHVybiBkMS5nZXRUaW1lKCkgPiBkMi5nZXRUaW1lKCk7IFxuICB9XG5cbiAgaXNMZXNzVGhhbihkYXRlMTogc3RyaW5nLCBkYXRlMjogc3RyaW5nKXtcbiAgICBsZXQgZDEgPSBuZXcgRGF0ZShkYXRlMSk7XG4gICAgbGV0IGQyID0gbmV3IERhdGUoZGF0ZTIpO1xuICAgIHJldHVybiBkMS5nZXRUaW1lKCkgPCBkMi5nZXRUaW1lKCk7IFxuICB9XG59XG4iXX0=