@ng-bootstrap/ng-bootstrap
Version:
Angular powered Bootstrap
467 lines • 34.5 kB
JavaScript
import { NgbCalendarIslamicCivil } from './ngb-calendar-islamic-civil';
import { NgbDate } from '../ngb-date';
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
/**
* Umalqura calendar is one type of Hijri calendars used in islamic countries.
* This Calendar is used by Saudi Arabia for administrative purpose.
* Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic.
* http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types
*/
const GREGORIAN_FIRST_DATE = new Date(1882, 10, 12);
const GREGORIAN_LAST_DATE = new Date(2174, 10, 25);
const HIJRI_BEGIN = 1300;
const HIJRI_END = 1600;
const ONE_DAY = 1000 * 60 * 60 * 24;
const MONTH_LENGTH = [
// 1300-1304
'101010101010',
'110101010100',
'111011001001',
'011011010100',
'011011101010',
// 1305-1309
'001101101100',
'101010101101',
'010101010101',
'011010101001',
'011110010010',
// 1310-1314
'101110101001',
'010111010100',
'101011011010',
'010101011100',
'110100101101',
// 1315-1319
'011010010101',
'011101001010',
'101101010100',
'101101101010',
'010110101101',
// 1320-1324
'010010101110',
'101001001111',
'010100010111',
'011010001011',
'011010100101',
// 1325-1329
'101011010101',
'001011010110',
'100101011011',
'010010011101',
'101001001101',
// 1330-1334
'110100100110',
'110110010101',
'010110101100',
'100110110110',
'001010111010',
// 1335-1339
'101001011011',
'010100101011',
'101010010101',
'011011001010',
'101011101001',
// 1340-1344
'001011110100',
'100101110110',
'001010110110',
'100101010110',
'101011001010',
// 1345-1349
'101110100100',
'101111010010',
'010111011001',
'001011011100',
'100101101101',
// 1350-1354
'010101001101',
'101010100101',
'101101010010',
'101110100101',
'010110110100',
// 1355-1359
'100110110110',
'010101010111',
'001010010111',
'010101001011',
'011010100011',
// 1360-1364
'011101010010',
'101101100101',
'010101101010',
'101010101011',
'010100101011',
// 1365-1369
'110010010101',
'110101001010',
'110110100101',
'010111001010',
'101011010110',
// 1370-1374
'100101010111',
'010010101011',
'100101001011',
'101010100101',
'101101010010',
// 1375-1379
'101101101010',
'010101110101',
'001001110110',
'100010110111',
'010001011011',
// 1380-1384
'010101010101',
'010110101001',
'010110110100',
'100111011010',
'010011011101',
// 1385-1389
'001001101110',
'100100110110',
'101010101010',
'110101010100',
'110110110010',
// 1390-1394
'010111010101',
'001011011010',
'100101011011',
'010010101011',
'101001010101',
// 1395-1399
'101101001001',
'101101100100',
'101101110001',
'010110110100',
'101010110101',
// 1400-1404
'101001010101',
'110100100101',
'111010010010',
'111011001001',
'011011010100',
// 1405-1409
'101011101001',
'100101101011',
'010010101011',
'101010010011',
'110101001001',
// 1410-1414
'110110100100',
'110110110010',
'101010111001',
'010010111010',
'101001011011',
// 1415-1419
'010100101011',
'101010010101',
'101100101010',
'101101010101',
'010101011100',
// 1420-1424
'010010111101',
'001000111101',
'100100011101',
'101010010101',
'101101001010',
// 1425-1429
'101101011010',
'010101101101',
'001010110110',
'100100111011',
'010010011011',
// 1430-1434
'011001010101',
'011010101001',
'011101010100',
'101101101010',
'010101101100',
// 1435-1439
'101010101101',
'010101010101',
'101100101001',
'101110010010',
'101110101001',
// 1440-1444
'010111010100',
'101011011010',
'010101011010',
'101010101011',
'010110010101',
// 1445-1449
'011101001001',
'011101100100',
'101110101010',
'010110110101',
'001010110110',
// 1450-1454
'101001010110',
'111001001101',
'101100100101',
'101101010010',
'101101101010',
// 1455-1459
'010110101101',
'001010101110',
'100100101111',
'010010010111',
'011001001011',
// 1460-1464
'011010100101',
'011010101100',
'101011010110',
'010101011101',
'010010011101',
// 1465-1469
'101001001101',
'110100010110',
'110110010101',
'010110101010',
'010110110101',
// 1470-1474
'001011011010',
'100101011011',
'010010101101',
'010110010101',
'011011001010',
// 1475-1479
'011011100100',
'101011101010',
'010011110101',
'001010110110',
'100101010110',
// 1480-1484
'101010101010',
'101101010100',
'101111010010',
'010111011001',
'001011101010',
// 1485-1489
'100101101101',
'010010101101',
'101010010101',
'101101001010',
'101110100101',
// 1490-1494
'010110110010',
'100110110101',
'010011010110',
'101010010111',
'010101000111',
// 1495-1499
'011010010011',
'011101001001',
'101101010101',
'010101101010',
'101001101011',
// 1500-1504
'010100101011',
'101010001011',
'110101000110',
'110110100011',
'010111001010',
// 1505-1509
'101011010110',
'010011011011',
'001001101011',
'100101001011',
'101010100101',
// 1510-1514
'101101010010',
'101101101001',
'010101110101',
'000101110110',
'100010110111',
// 1515-1519
'001001011011',
'010100101011',
'010101100101',
'010110110100',
'100111011010',
// 1520-1524
'010011101101',
'000101101101',
'100010110110',
'101010100110',
'110101010010',
// 1525-1529
'110110101001',
'010111010100',
'101011011010',
'100101011011',
'010010101011',
// 1530-1534
'011001010011',
'011100101001',
'011101100010',
'101110101001',
'010110110010',
// 1535-1539
'101010110101',
'010101010101',
'101100100101',
'110110010010',
'111011001001',
// 1540-1544
'011011010010',
'101011101001',
'010101101011',
'010010101011',
'101001010101',
// 1545-1549
'110100101001',
'110101010100',
'110110101010',
'100110110101',
'010010111010',
// 1550-1554
'101000111011',
'010010011011',
'101001001101',
'101010101010',
'101011010101',
// 1555-1559
'001011011010',
'100101011101',
'010001011110',
'101000101110',
'110010011010',
// 1560-1564
'110101010101',
'011010110010',
'011010111001',
'010010111010',
'101001011101',
// 1565-1569
'010100101101',
'101010010101',
'101101010010',
'101110101000',
'101110110100',
// 1570-1574
'010110111001',
'001011011010',
'100101011010',
'101101001010',
'110110100100',
// 1575-1579
'111011010001',
'011011101000',
'101101101010',
'010101101101',
'010100110101',
// 1580-1584
'011010010101',
'110101001010',
'110110101000',
'110111010100',
'011011011010',
// 1585-1589
'010101011011',
'001010011101',
'011000101011',
'101100010101',
'101101001010',
// 1590-1594
'101110010101',
'010110101010',
'101010101110',
'100100101110',
'110010001111',
// 1595-1599
'010100100111',
'011010010101',
'011010101010',
'101011010110',
'010101011101',
// 1600
'001010011101',
];
function getDaysDiff(date1, date2) {
// Ignores the time part in date1 and date2:
const time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());
const time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());
const diff = Math.abs(time1 - time2);
return Math.round(diff / ONE_DAY);
}
class NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil {
/**
* Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date.
* `gdate` is s JS Date to be converted to Hijri.
*/
fromGregorian(gDate) {
let hDay = 1, hMonth = 0, hYear = 1300;
let daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE);
if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) {
let year = 1300;
for (let i = 0; i < MONTH_LENGTH.length; i++, year++) {
for (let j = 0; j < 12; j++) {
let numOfDays = +MONTH_LENGTH[i][j] + 29;
if (daysDiff <= numOfDays) {
hDay = daysDiff + 1;
if (hDay > numOfDays) {
hDay = 1;
j++;
}
if (j > 11) {
j = 0;
year++;
}
hMonth = j;
hYear = year;
return new NgbDate(hYear, hMonth + 1, hDay);
}
daysDiff = daysDiff - numOfDays;
}
}
return null;
}
else {
return super.fromGregorian(gDate);
}
}
/**
* Converts the current Hijri date to Gregorian.
*/
toGregorian(hDate) {
const hYear = hDate.year;
const hMonth = hDate.month - 1;
const hDay = hDate.day;
let gDate = new Date(GREGORIAN_FIRST_DATE);
let dayDiff = hDay - 1;
if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {
for (let y = 0; y < hYear - HIJRI_BEGIN; y++) {
for (let m = 0; m < 12; m++) {
dayDiff += +MONTH_LENGTH[y][m] + 29;
}
}
for (let m = 0; m < hMonth; m++) {
dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29;
}
gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff);
}
else {
gDate = super.toGregorian(hDate);
}
return gDate;
}
/**
* Returns the number of days in a specific Hijri hMonth.
* `hMonth` is 1 for Muharram, 2 for Safar, etc.
* `hYear` is any Hijri hYear.
*/
getDaysPerMonth(hMonth, hYear) {
if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {
const pos = hYear - HIJRI_BEGIN;
return +MONTH_LENGTH[pos][hMonth - 1] + 29;
}
return super.getDaysPerMonth(hMonth, hYear);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgbCalendarIslamicUmalqura, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgbCalendarIslamicUmalqura }); }
}
export { NgbCalendarIslamicUmalqura };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgbCalendarIslamicUmalqura, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLWlzbGFtaWMtdW1hbHF1cmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0ZXBpY2tlci9oaWpyaS9uZ2ItY2FsZW5kYXItaXNsYW1pYy11bWFscXVyYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDOzs7OztHQUtHO0FBRUgsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUVwQyxNQUFNLFlBQVksR0FBRztJQUNwQixZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJ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LENBQUM7aUJBQ3BDO2FBQ0Q7WUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUN0RDtZQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7U0FDeEQ7YUFBTTtZQUNOLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILGVBQWUsQ0FBQyxNQUFjLEVBQUUsS0FBYTtRQUM1QyxJQUFJLEtBQUssSUFBSSxXQUFXLElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRTtZQUMvQyxNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsV0FBVyxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMzQztRQUNELE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQzs4R0F4RVcsMEJBQTBCO2tIQUExQiwwQkFBMEI7O1NBQTFCLDBCQUEwQjsyRkFBMUIsMEJBQTBCO2tCQUR0QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdiQ2FsZW5kYXJJc2xhbWljQ2l2aWwgfSBmcm9tICcuL25nYi1jYWxlbmRhci1pc2xhbWljLWNpdmlsJztcbmltcG9ydCB7IE5nYkRhdGUgfSBmcm9tICcuLi9uZ2ItZGF0ZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogVW1hbHF1cmEgY2FsZW5kYXIgaXMgb25lIHR5cGUgb2YgSGlqcmkgY2FsZW5kYXJzIHVzZWQgaW4gaXNsYW1pYyBjb3VudHJpZXMuXG4gKiBUaGlzIENhbGVuZGFyIGlzIHVzZWQgYnkgU2F1ZGkgQXJhYmlhIGZvciBhZG1pbmlzdHJhdGl2ZSBwdXJwb3NlLlxuICogVW5saWtlIHRhYnVsYXIgY2FsZW5kYXJzLCB0aGUgYWxnb3JpdGhtIGludm9sdmVzIGFzdHJvbm9taWNhbCBjYWxjdWxhdGlvbiwgYnV0IGl0J3Mgc3RpbGwgZGV0ZXJtaW5pc3RpYy5cbiAqIGh0dHA6Ly9jbGRyLnVuaWNvZGUub3JnL2RldmVsb3BtZW50L2RldmVsb3BtZW50LXByb2Nlc3MvZGVzaWduLXByb3Bvc2Fscy9pc2xhbWljLWNhbGVuZGFyLXR5cGVzXG4gKi9cblxuY29uc3QgR1JFR09SSUFOX0ZJUlNUX0RBVEUgPSBuZXcgRGF0ZSgxODgyLCAxMCwgMTIpO1xuY29uc3QgR1JFR09SSUFOX0xBU1RfREFURSA9IG5ldyBEYXRlKDIxNzQsIDEwLCAyNSk7XG5jb25zdCBISUpSSV9CRUdJTiA9IDEzMDA7XG5jb25zdCBISUpSSV9FTkQgPSAxNjAwO1xuY29uc3QgT05FX0RBWSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7XG5cbmNvbnN0IE1PTlRIX0xFTkdUSCA9IFtcblx0Ly8gMTMwMC0xMzA0XG5cdCcxMDEwMTAxMDEwMTAnLFxuXHQnMTEwMTAxMDEwMTAwJyxcblx0JzExMTAxMTAwMTAwMScsXG5cdCcwMTEwMTEwMTAxMDAnLFxuXHQnMDExMDExMTAxMDEwJyxcblx0Ly8gMTMwNS0xMzA5XG5cdCcwMDExMDExMDExMDAnLFxuXHQnMTAxMDEwMTAxMTAxJyxcblx0JzAxMDEwMTAxMDEwMScsXG5cdCcwMTEwMTAxMDEwMDEnLFxuXHQnMDExMTEwMDEwMDEwJyxcblx0Ly8gMTMxMC0xMzE0XG5cdCcxMDExMTAxMDEwMDEnLFxuXHQnMDEwMTExMDEwMTAwJyxcblx0JzEwMTAxMTAxMTAxMCcsXG5cdCcwMTAxMDEwMTExMDAnLFxuXHQnMTEwMTAwMTAxMTAxJyxcblx0Ly8gMTMxNS0xMzE5XG5cdCcwMTEwMTAwMTAxMDEnLFxuXHQnMDExMTAxMDAxMDEwJyxcblx0JzEwMTEwMTAxMDEwMCcsXG5cdCcxMDExMDExMDEwMTAnLFxuXHQnMDEwMTEwMTAxMTAxJyxcblx0Ly8gMTMyMC0xMzI0XG5cdCcwMTAwMTAxMDExMTAnLFxuXHQnMTAxMDAxMDAxMTExJyxcblx0JzAxMDEwMDAxMDExMScsXG5cdCcwMTEwMTAwMDEwMTEnLFxuXHQnMDExMDEwMTAwMTAxJyxcblx0Ly8gMTMyNS0xMzI5XG5cdCcxMDEwMTEwMTAxMDEnLFxuXHQnMDAxMDExMDEwMTEwJyxcblx0JzEwMDEwMTAxMTAxMScsXG5cdCcwMTAwMTAwMTExMDEnLFxuXHQnMTAxMDAxMDAxMTAxJyxcblx0Ly8gMTMzMC0xMzM0XG5cdCcxMTAxMDAxMDAxMTAnLFxuXHQnMTEwMTEwMDEwMTAxJyxcblx0JzAxMDExMDEwMTEwMCcsXG5cdCcxMDAxMTAxMTAxMTAnLFxuXHQnMDAxMDEwMTExMDEwJyxcblx0Ly8gMTMzNS0xMzM5XG5cdCcxMDEwMDEwMTEwMTEnLFxuXHQnMDEwMTAwMTAxMDExJyxcblx0JzEwMTAxMDAxMDEwMScsXG5cdCcwMTEwMTEwMDEwMTAnLFxuXHQnMTAxMDExMTAxMDAxJyxcblx0Ly8gMTM0MC0xMzQ0XG5cdCcwMDEwMTExMTAxMDAnLFxuXHQnMTAwMTAxMTEwMTEwJyxcblx0JzAwMTAxMDExMDExMCcsXG5cdCcxMDAxMDEwMTAxMTAnLFxuXHQnMTAxMDExMDAxMDEwJyxcblx0Ly8gMTM0NS0xMzQ5XG5cdCcxMDExMTAxMDAxMDAnLFxuXHQnMTAxMTExMDEwMDEwJyxcblx0JzAxMDExMTAxMTAwMScsXG5cdCcwMDEwMTEwMTExMDAnLFxuXHQnMTAwMTAxMTAxMTAxJyxcblx0Ly8gMTM1MC0xMzU0XG5cdCcwMTAxMDEwMDExMDEnLFxuXHQnMTAxMDEwMTAwMTAxJyxcblx0JzEwMTEwMTAxMDAxMCcsXG5cdCcxMDExMTAxMDAxMDEnLFxuXHQnMDEwMTEwMTEwMTAwJyxcblx0Ly8gMTM1NS0xMzU5XG5cdCcxMDAxMTAxMTAxMTAnLFxuXHQnMDEwMTAxMDEwMTExJyxcblx0JzAwMTAxMDAxMDExMScsXG5cdCcwMTAxMDEwMDEwMTEnLFxuXHQnMDExMDEwMTAwMDExJyxcblx0Ly8gMTM2MC0xMzY0XG5cdCcwMTExMDEwMTAwMTAnLFxuXHQnMTAxMTAxMTAwMTAxJyxcblx0JzAxMDEwMTEwMTAxMCcsXG5cdCcxMDEwMTAxMDEwMTEnLFxuXHQnMDEwMTAwMTAxMDExJyxcblx0Ly8gMTM2NS0xMzY5XG5cdCcxMTAwMTAwMTAxMDEnLFxuXHQnMTEwMTAxMDAxMDEwJyxcblx0JzExMDExMDEwMDEwMScsXG5cdCcwMTAxMTEwMDEwMTAnLFxuXHQnMTAxMDExMDEwMTEwJyxcblx0Ly8gMTM3MC0xMzc0XG5cdCcxMDAxMDEwMTAxMTEnLFxuXHQnMDEwMDEwMTAxMDExJyxcblx0JzEwMDEwMTAwMTAxMScsXG5cdCcxMDEwMTAxMDAxMDEnLFxuXHQnMTAxMTAxMDEwMDEwJyxcblx0Ly8gMTM3NS0xMzc5XG5cdCcxMDExMDExMDEwMTAnLFxuXHQnMDEwMTAxMTEwMTAxJyxcblx0JzAwMTAwMTExMDExMCcsXG5cdCcxMDAwMTAxMTAxMTEnLFxuXHQnMDEwMDAxMDExMDExJyxcblx0Ly8gMTM4MC0xMzg0XG5cdCcwMTAxMDEwMTAxMDEnLFxuXHQnMDEwMTEwMTAxMDAxJyxcblx0JzAxMDExMDExMDEwMCcsXG5cdCcxMDAxMTEwMTEwMTAnLFxuXHQnMDEwMDExMDExMTAxJyxcblx0Ly8gMTM4NS0xMzg5XG5cdCcwMDEwMDExMDExMTAnLFxuXHQnMTAwMTAwMTEwMTEwJyxcblx0JzEwMTAxMDEwMTAxMCcsXG5cdCcxMTAxMDEwMTAxMDAnLFxuXHQnMTEwMTEwMTEwMDEwJyxcblx0Ly8gMTM5MC0xMzk0XG5cdCcwMTAxMTEwMTAxMDEnLFxuXHQnMDAxMDExMDExMDEwJyxcblx0JzEwMDEwMTAxMTAxMScsXG5cdCcwMTAwMTAxMDEwMTEnLFxuXHQnMTAxMDAxMDEwMTAxJyxcblx0Ly8gMTM5NS0xMzk5XG5cdCcxMDExMDEwMDEwMDEnLFxuXHQnMTAxMTAxMTAwMTAwJyxcblx0JzEwMTEwMTExMDAwMScsXG5cdCcwMTAxMTAxMTAxMDAnLFxuXHQnMTAxMDEwMTEwMTAxJyxcblx0Ly8gMTQwMC0xNDA0XG5cdCcxMDEwMDEwMTAxMDEnLFxuXHQnMTEwMTAwMTAwMTAxJyxcblx0JzExMTAxMDAxMDAxMCcsXG5cdCcxMTEwMTEwMDEwMDEnLFxuXHQnMDExMDExMDEwMTAwJyxcblx0Ly8gMTQwNS0xNDA5XG5cdCcxMDEwMTExMDEwMDEnLFxuXHQnMTAwMTAxMTAxMDExJyxcblx0JzAxMDAxMDEwMTAxMScsXG5cdCcxMDEwMTAwMTAwMTEnLFxuXHQnMTEwMTAxMDAxMDAxJyxcblx0Ly8gMTQxMC0xNDE0XG5cdCcxMTAxMTAxMDAxMDAnLFxuXHQnMTEwMTEwMTEwMDEwJyxcblx0JzEwMTAxMDExMTAwMScsXG5cdCcwMTAwMTAxMTEwMTAnLFxuXHQnMTAxMDAxMDExMDExJyxcblx0Ly8gMTQxNS0xNDE5XG5cdCcwMTAxMDAxMDEwMTEnLFxuXHQnMTAxMDEwMDEwMTAxJyxcblx0JzEwMTEwMDEwMTAxMCcsXG5cdCcxMDExMDEwMTAxMDEnLFxuXHQnMDEwMTAxMDExMTAwJyxcblx0Ly8gMTQyMC0xNDI0XG5cdCcwMTAwMTAxMTExMDEnLFxuXHQnMDAxMDAwMTExMTAxJyxcblx0JzEwMDEwMDAxMTEwMScsXG5cdCcxMDEwMTAwMTAxMDEnLFxuXHQnMTAxMTAxMDAxMDEwJyxcblx0Ly8gMTQyNS0xNDI5XG5cdCcxMDExMDEwMTEwMTAnLFxuXHQnMDEwMTAxMTAxMTAxJyxcblx0JzAwMTAxMDExMDExMCcsXG5cdCcxMDAxMDAxMTEwMTEnLFxuXHQnMDEwMDEwMDExMDExJyxcblx0Ly8gMTQzMC0xNDM0XG5cdCcwMTEwMDEwMTAxMDEnLFxuXHQnMDExMDEwMTAxMDAxJyxcblx0JzAxMTEwMTAxMDEwMCcsXG5cdCcxMDExMDExMDEwMTAnLFxuXHQnMDEwMTAxMTAxMTAwJyxcblx0Ly8gMTQzNS0xNDM5XG5cdCcxMDEwMTAxMDExMDEnLFxuXHQnMDEwMTAxMDEwMTAxJyxcblx0JzEwMTEwMDEwMTAwMScsXG5cdCcxMDExMTAwMTAwMTAnLFxuXHQnMTAxMTEwMTAxMDAxJyxcblx0Ly8gMTQ0MC0xNDQ0XG5cdCcwMTAxMTEwMTAxMDAnLFxuXHQnMTAxMDExMDExMDEwJyxcblx0JzAxMDEwMTAxMTAxMCcsXG5cdCcxMDEwMTAxMDEwMTEnLFxuXHQnMDEwMTEwMDEwMTAxJyxcblx0Ly8gMTQ0NS0xNDQ5XG5cdCcwMTExMDEwMDEwMDEnLFxuXHQnMDExMTAxMTAwMTAwJyxcblx0JzEwMTExMDEwMTAxMCcsXG5cdCcwMTAxMTAxMTAxMDEnLFxuXHQnMDAxMDEwMTEwMTEwJyxcblx0Ly8gMTQ1MC0xNDU0XG5cdCcxMDEwMDEwMTAxMTAnLFxuXHQnMTExMDAxMDAxMTAxJyxcblx0JzEwMTEwMDEwMDEwMScsXG5cdCcxMDExMDEwMTAwMTAnLFxuXHQnMTAxMTAxMTAxMDEwJyxcblx0Ly8gMTQ1NS0xNDU5XG5cdCcwMTAxMTAxMDExMDEnLFxuXHQnMDAxMDEwMTAxMTEwJyxcblx0JzEwMDEwMDEwMTExMScsXG5cdCcwMTAwMTAwMTAxMTEnLFxuXHQnMDExMDAxMDAxMDExJyxcblx0Ly8gMTQ2MC0xNDY0XG5cdCcwMTEwMTAxMDAxMDEnLFxuXHQnMDExMDEwMTAxMTAwJyxcblx0JzEwMTAxMTAxMDExMCcsXG5cdCcwMTAxMDEwMTExMDEnLFxuXHQnMDEwMDEwMDExMTAxJyxcblx0Ly8gMTQ2NS0xNDY5XG5cdCcxMDEwMDEwMDExMDEnLFxuXHQnMTEwMTAwMDEwMTEwJyxcblx0JzExMDExMDAxMDEwMScsXG5cdCcwMTAxMTAxMDEwMTAnLFxuXHQnMDEwMTEwMTEwMTAxJyxcblx0Ly8gMTQ3MC0xNDc0XG5cdCcwMDEwMTEwMTEwMTAnLFxuXHQnMTAwMTAxMDExMDExJyxcblx0JzAxMDAxMDEwMTEwMScsXG5cdCcwMTAxMTAwMTAxMDEnLFxuXHQnMDExMDExMDAxMDEwJyxcblx0Ly8gMTQ3NS0xNDc5XG5cdCcwMTEwMTExMDAxMDAnLFxuXHQnMTAxMDExMTAxMDEwJyxcblx0JzAxMDAxMTExMDEwMScsXG5cdCcwMDEwMTAxMTAxMTAnLFxuXHQnMTAwMTAxMDEwMTEwJyxcblx0Ly8gMTQ4MC0xNDg0XG5cdCcxMDEwMTAxMDEwMTAnLFxuXHQnMTAxMTAxMDEwMTAwJyxcblx0JzEwMTExMTAxMDAxMCcsXG5cdCcwMTAxMTEwMTEwMDEnLFxuXHQnMDAxMDExMTAxMDEwJyxcblx0Ly8gMTQ4NS0xNDg5XG5cdCcxMDAxMDExMDExMDEnLFxuXHQnMDEwMDEwMTAxMTAxJyxcblx0JzEwMTAxMDAxMDEwMScsXG5cdCcxMDExMDEwMDEwMTAnLFxuXHQnMTAxMTEwMTAwMTAxJyxcblx0Ly8gMTQ5MC0xNDk0XG5cdCcwMTAxMTAxMTAwMTAnLFxuXHQnMTAwMTEwMTEwMTAxJyxcblx0JzAxMDAxMTAxMDExMCcsXG5cdCcxMDEwMTAwMTAxMTEnLFxuXHQnMDEwMTAxMDAwMTExJyxcblx0Ly8gMTQ5NS0xNDk5XG5cdCcwMTEwMTAwMTAwMTEnLFxuXHQnMDExMTAxMDAxMDAxJyxcblx0JzEwMTEwMTAxMDEwMScsXG5cdCcwMTAxMDExMDEwMTAnLFxuXHQnMTAxMDAxMTAxMDExJyxcblx0Ly8gMTUwMC0xNTA0XG5cdCcwMTAxMDAxMDEwMTEnLFxuXHQnMTAxMDEwMDAxMDExJyxcblx0JzExMDEwMTAwMDExMCcsXG5cdCcxMTAxMTAxMDAwMTEnLFxuXHQnMDEwMTExMDAxMDEwJyxcblx0Ly8gMTUwNS0xNTA5XG5cdCcxMDEwMTEwMTAxMTAnLFxuXHQnMDEwMDExMDExMDExJyxcblx0JzAwMTAwMTEwMTAxMScsXG5cdCcxMDAxMDEwMDEwMTEnLFxuXHQnMTAxMDEwMTAwMTAxJyxcblx0Ly8gMTUxMC0xNTE0XG5cdCcxMDExMDEwMTAwMTAnLFxuXHQnMTAxMTAxMTAxMDAxJyxcblx0JzAxMDEwMTExMDEwMScsXG5cdCcwMDAxMDExMTAxMTAnLFxuXHQnMTAwMDEwMTEwMTExJyxcblx0Ly8gMTUxNS0xNTE5XG5cdCcwMDEwMDEwMTEwMTEnLFxuXHQnMDEwMTAwMTAxMDExJyxcblx0JzAxMDEwMTEwMDEwMScsXG5cdCcwMTAxMTAxMTAxMDAnLFxuXHQnMTAwMTExMDExMDEwJyxcblx0Ly8gMTUyMC0xNTI0XG5cdCcwMTAwMTExMDExMDEnLFxuXHQnMDAwMTAxMTAxMTAxJyxcblx0JzEwMDAxMDExMDExMCcsXG5cdCcxMDEwMTAxMDAxMTAnLFxuXHQnMTEwMTAxMDEwMDEwJyxcblx0Ly8gMTUyNS0xNTI5XG5cdCcxMTAxMTAxMDEwMDEnLFxuXHQnMDEwMTExMDEwMTAwJyxcblx0JzEwMTAxMTAxMTAxMCcsXG5cdCcxMDAxMDEwMTEwMTEnLFxuXHQnMDEwMDEwMTAxMDExJyxcblx0Ly8gMTUzMC0xNTM0XG5cdCcwMTEwMDEwMTAwMTEnLFxuXHQnMDExMTAwMTAxMDAxJyxcblx0JzAxMTEwMTEwMDAxMCcsXG5cdCcxMDExMTAxMDEwMDEnLFxuXHQnMDEwMTEwMTEwMDEwJyxcblx0Ly8gMTUzNS0xNTM5XG5cdCcxMDEwMTAxMTAxMDEnLFxuXHQnMDEwMTAxMDEwMTAxJyxcblx0JzEwMTEwMDEwMDEwMScsXG5cdCcxMTAxMTAwMTAwMTAnLFxuXHQnMTExMDExMDAxMDAxJyxcblx0Ly8gMTU0MC0xNTQ0XG5cdCcwMTEwMTEwMTAwMTAnLFxuXHQnMTAxMDExMTAxMDAxJyxcblx0JzAxMDEwMTEwMTAxMScsXG5cdCcwMTAwMTAxMDEwMTEnLFxuXHQnMTAxMDAxMDEwMTAxJyxcblx0Ly8gMTU0NS0xNTQ5XG5cdCcxMTAxMDAxMDEwMDEnLFxuXHQnMTEwMTAxMDEwMTAwJyxcblx0JzExMDExMDEwMTAxMCcsXG5cdCcxMDAxMTAxMTAxMDEnLFxuXHQnMDEwMDEwMTExMDEwJyxcblx0Ly8gMTU1MC0xNTU0XG5cdCcxMDEwMDAxMTEwMTEnLFxuXHQnMDEwMDEwMDExMDExJyxcblx0JzEwMTAwMTAwMTEwMScsXG5cdCcxMDEwMTAxMDEwMTAnLFxuXHQnMTAxMDExMDEwMTAxJyxcblx0Ly8gMTU1NS0xNTU5XG5cdCcwMDEwMTEwMTEwMTAnLFxuXHQnMTAwMTAxMDExMTAxJyxcblx0JzAxMDAwMTAxMTExMCcsXG5cdCcxMDEwMDAxMDExMTAnLFxuXHQnMTEwMDEwMDExMDEwJyxcblx0Ly8gMTU2MC0xNTY0XG5cdCcxMTAxMDEwMTAxMDEnLFxuXHQnMDExMDEwMTEwMDEwJyxcblx0JzAxMTAxMDExMTAwMScsXG5cdCcwMTAwMTAxMTEwMTAnLFxuXHQnMTAxMDAxMDExMTAxJyxcblx0Ly8gMTU2NS0xNTY5XG5cdCcwMTAxMDAxMDExMDEnLFxuXHQnMTAxMDEwMDEwMTAxJyxcblx0JzEwMTEwMTAxMDAxMCcsXG5cdCcxMDExMTAxMDEwMDAnLFxuXHQnMTAxMTEwMTEwMTAwJyxcblx0Ly8gMTU3MC0xNTc0XG5cdCcwMTAxMTAxMTEwMDEnLFxuXHQnMDAxMDExMDExMDEwJyxcblx0JzEwMDEwMTAxMTAxMCcsXG5cdCcxMDExMDEwMDEwMTAnLFxuXHQnMTEwMTEwMTAwMTAwJyxcblx0Ly8gMTU3NS0xNTc5XG5cdCcxMTEwMTEwMTAwMDEnLFxuXHQnMDExMDExMTAxMDAwJyxcblx0JzEwMTEwMTEwMTAxMCcsXG5cdCcwMTAxMDExMDExMDEnLFxuXHQnMDEwMTAwMTEwMTAxJyxcblx0Ly8gMTU4MC0xNTg0XG5cdCcwMTEwMTAwMTAxMDEnLFxuXHQnMTEwMTAxMDAxMDEwJyxcblx0JzExMDExMDEwMTAwMCcsXG5cdCcxMTAxMTEwMTAxMDAnLFxuXHQnMDExMDExMDExMDEwJyxcblx0Ly8gMTU4NS0xNTg5XG5cdCcwMTAxMDEwMTEwMTEnLFxuXHQnMDAxMDEwMDExMTAxJyxcblx0JzAxMTAwMDEwMTAxMScsXG5cdCcxMDExMDAwMTAxMDEnLFxuXHQnMTAxMTAxMDAxMDEwJyxcblx0Ly8gMTU5MC0xNTk0XG5cdCcxMDExMTAwMTAxMDEnLFxuXHQnMDEwMTEwMTAxMDEwJyxcblx0JzEwMTAxMDEwMTExMCcsXG5cdCcxMDAxMDAxMDExMTAnLFxuXHQnMTEwMDEwMDAxMTExJyxcblx0Ly8gMTU5NS0xNTk5XG5cdCcwMTAxMDAxMDAxMTEnLFxuXHQnMDExMDEwMDEwMTAxJyxcblx0JzAxMTAxMDEwMTAxMCcsXG5cdCcxMDEwMTEwMTAxMTAnLFxuXHQnMDEwMTAxMDExMTAxJyxcblx0Ly8gMTYwMFxuXHQnMDAxMDEwMDExMTAxJyxcbl07XG5cbmZ1bmN0aW9uIGdldERheXNEaWZmKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IG51bWJlciB7XG5cdC8vIElnbm9yZXMgdGhlIHRpbWUgcGFydCBpbiBkYXRlMSBhbmQgZGF0ZTI6XG5cdGNvbnN0IHRpbWUxID0gRGF0ZS5VVEMoZGF0ZTEuZ2V0RnVsbFllYXIoKSwgZGF0ZTEuZ2V0TW9udGgoKSwgZGF0ZTEuZ2V0RGF0ZSgpKTtcblx0Y29uc3QgdGltZTIgPSBEYXRlLlVUQyhkYXRlMi5nZXRGdWxsWWVhcigpLCBkYXRlMi5nZXRNb250aCgpLCBkYXRlMi5nZXREYXRlKCkpO1xuXHRjb25zdCBkaWZmID0gTWF0aC5hYnModGltZTEgLSB0aW1lMik7XG5cdHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBPTkVfREFZKTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nYkNhbGVuZGFySXNsYW1pY1VtYWxxdXJhIGV4dGVuZHMgTmdiQ2FsZW5kYXJJc2xhbWljQ2l2aWwge1xuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZXF1aXZhbGVudCBpc2xhbWljKFVtYWxxdXJhKSBkYXRlIHZhbHVlIGZvciBhIGdpdmUgaW5wdXQgR3JlZ29yaWFuIGRhdGUuXG5cdCAqIGBnZGF0ZWAgaXMgcyBKUyBEYXRlIHRvIGJlIGNvbnZlcnRlZCB0byBIaWpyaS5cblx0ICovXG5cdGZyb21HcmVnb3JpYW4oZ0RhdGU6IERhdGUpOiBOZ2JEYXRlIHtcblx0XHRsZXQgaERheSA9IDEsXG5cdFx0XHRoTW9udGggPSAwLFxuXHRcdFx0aFllYXIgPSAxMzAwO1xuXHRcdGxldCBkYXlzRGlmZiA9IGdldERheXNEaWZmKGdEYXRlLCBHUkVHT1JJQU5fRklSU1RfREFURSk7XG5cdFx0aWYgKGdEYXRlLmdldFRpbWUoKSAtIEdSRUdPUklBTl9GSVJTVF9EQVRFLmdldFRpbWUoKSA+PSAwICYmIGdEYXRlLmdldFRpbWUoKSAtIEdSRUdPUklBTl9MQVNUX0RBVEUuZ2V0VGltZSgpIDw9IDApIHtcblx0XHRcdGxldCB5ZWFyID0gMTMwMDtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgTU9OVEhfTEVOR1RILmxlbmd0aDsgaSsrLCB5ZWFyKyspIHtcblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCAxMjsgaisrKSB7XG5cdFx0XHRcdFx0bGV0IG51bU9mRGF5cyA9ICtNT05USF9MRU5HVEhbaV1bal0gKyAyOTtcblx0XHRcdFx0XHRpZiAoZGF5c0RpZmYgPD0gbnVtT2ZEYXlzKSB7XG5cdFx0XHRcdFx0XHRoRGF5ID0gZGF5c0RpZmYgKyAxO1xuXHRcdFx0XHRcdFx0aWYgKGhEYXkgPiBudW1PZkRheXMpIHtcblx0XHRcdFx0XHRcdFx0aERheSA9IDE7XG5cdFx0XHRcdFx0XHRcdGorKztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChqID4gMTEpIHtcblx0XHRcdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0XHRcdHllYXIrKztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGhNb250aCA9IGo7XG5cdFx0XHRcdFx0XHRoWWVhciA9IHllYXI7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbmV3IE5nYkRhdGUoaFllYXIsIGhNb250aCArIDEsIGhEYXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXlzRGlmZiA9IGRheXNEaWZmIC0gbnVtT2ZEYXlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbCBhcyBhbnk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzdXBlci5mcm9tR3JlZ29yaWFuKGdEYXRlKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIENvbnZlcnRzIHRoZSBjdXJyZW50IEhpanJpIGRhdGUgdG8gR3JlZ29yaWFuLlxuXHQgKi9cblx0dG9HcmVnb3JpYW4oaERhdGU6IE5nYkRhdGUpOiBEYXRlIHtcblx0XHRjb25zdCBoWWVhciA9IGhEYXRlLnllYXI7XG5cdFx0Y29uc3QgaE1vbnRoID0gaERhdGUubW9udGggLSAxO1xuXHRcdGNvbnN0IGhEYXkgPSBoRGF0ZS5kYXk7XG5cdFx0bGV0IGdEYXRlID0gbmV3IERhdGUoR1JFR09SSUFOX0ZJUlNUX0RBVEUpO1xuXHRcdGxldCBkYXlEaWZmID0gaERheSAtIDE7XG5cdFx0aWYgKGhZZWFyID49IEhJSlJJX0JFR0lOICYmIGhZZWFyIDw9IEhJSlJJX0VORCkge1xuXHRcdFx0Zm9yIChsZXQgeSA9IDA7IHkgPCBoWWVhciAtIEhJSlJJX0JFR0lOOyB5KyspIHtcblx0XHRcdFx0Zm9yIChsZXQgbSA9IDA7IG0gPCAxMjsgbSsrKSB7XG5cdFx0XHRcdFx0ZGF5RGlmZiArPSArTU9OVEhfTEVOR1RIW3ldW21dICsgMjk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAobGV0IG0gPSAwOyBtIDwgaE1vbnRoOyBtKyspIHtcblx0XHRcdFx0ZGF5RGlmZiArPSArTU9OVEhfTEVOR1RIW2hZZWFyIC0gSElKUklfQkVHSU5dW21dICsgMjk7XG5cdFx0XHR9XG5cdFx0XHRnRGF0ZS5zZXREYXRlKEdSRUdPUklBTl9GSVJTVF9EQVRFLmdldERhdGUoKSArIGRheURpZmYpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRnRGF0ZSA9IHN1cGVyLnRvR3JlZ29yaWFuKGhEYXRlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGdEYXRlO1xuXHR9XG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIHNwZWNpZmljIEhpanJpIGhNb250aC5cblx0ICogYGhNb250aGAgaXMgMSBmb3IgTXVoYXJyYW0sIDIgZm9yIFNhZmFyLCBldGMuXG5cdCAqIGBoWWVhcmAgaXMgYW55IEhpanJpIGhZZWFyLlxuXHQgKi9cblx0Z2V0RGF5c1Blck1vbnRoKGhNb250aDogbnVtYmVyLCBoWWVhcjogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRpZiAoaFllYXIgPj0gSElKUklfQkVHSU4gJiYgaFllYXIgPD0gSElKUklfRU5EKSB7XG5cdFx0XHRjb25zdCBwb3MgPSBoWWVhciAtIEhJSlJJX0JFR0lOO1xuXHRcdFx0cmV0dXJuICtNT05USF9MRU5HVEhbcG9zXVtoTW9udGggLSAxXSArIDI5O1xuXHRcdH1cblx0XHRyZXR1cm4gc3VwZXIuZ2V0RGF5c1Blck1vbnRoKGhNb250aCwgaFllYXIpO1xuXHR9XG59XG4iXX0=