tauro-directives
Version:
This is an Angular library composed of several useful directives developed by the team of developers of [3Tecnos Tecnologia](http://www.3tecnos.com.br/).
426 lines (414 loc) • 40.6 kB
JavaScript
import { Injectable, Component, NgModule, Directive, HostListener, ElementRef, Input, defineInjectable } from '@angular/core';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var TauroDirectivesService = /** @class */ (function () {
function TauroDirectivesService() {
}
TauroDirectivesService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] },
];
/** @nocollapse */
TauroDirectivesService.ctorParameters = function () { return []; };
/** @nocollapse */ TauroDirectivesService.ngInjectableDef = defineInjectable({ factory: function TauroDirectivesService_Factory() { return new TauroDirectivesService(); }, token: TauroDirectivesService, providedIn: "root" });
return TauroDirectivesService;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var TauroDirectivesComponent = /** @class */ (function () {
function TauroDirectivesComponent() {
}
/**
* @return {?}
*/
TauroDirectivesComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
TauroDirectivesComponent.decorators = [
{ type: Component, args: [{
selector: 'ta-tauro-directives',
template: "\n <p>\n tauro-directives works!\n </p>\n ",
styles: []
},] },
];
/** @nocollapse */
TauroDirectivesComponent.ctorParameters = function () { return []; };
return TauroDirectivesComponent;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var CpfDirective = /** @class */ (function () {
function CpfDirective() {
}
/**
* @param {?} $event
* @return {?}
*/
CpfDirective.prototype.onKeyup = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
/** @type {?} */
var valor;
valor = $event.target.value.replace(/\D/g, '');
$event.target.value = valor.MaskCpfCnpj("cpf");
};
CpfDirective.decorators = [
{ type: Directive, args: [{
selector: '[ta-cpf]'
},] },
];
/** @nocollapse */
CpfDirective.ctorParameters = function () { return []; };
CpfDirective.propDecorators = {
onKeyup: [{ type: HostListener, args: ['keyup', ['$event'],] }]
};
return CpfDirective;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var CnpjDirective = /** @class */ (function () {
function CnpjDirective() {
}
/**
* @param {?} $event
* @return {?}
*/
CnpjDirective.prototype.onKeyup = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
/** @type {?} */
var valor;
valor = $event.target.value.replace(/\D/g, '');
$event.target.value = valor.MaskCpfCnpj("cnpj");
};
CnpjDirective.decorators = [
{ type: Directive, args: [{
selector: '[ta-cnpj]'
},] },
];
/** @nocollapse */
CnpjDirective.ctorParameters = function () { return []; };
CnpjDirective.propDecorators = {
onKeyup: [{ type: HostListener, args: ['keyup', ['$event'],] }]
};
return CnpjDirective;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var CountToDirective = /** @class */ (function () {
function CountToDirective(element) {
this.element = element;
}
/**
* @return {?}
*/
CountToDirective.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
/** @type {?} */
var time = Number(this.duration || 1500);
/** @type {?} */
var end = parseInt(this.element.nativeElement.innerHTML);
/** @type {?} */
var stepTime = Math.abs(Math.floor(time / end));
stepTime = Math.max(stepTime, 50);
/** @type {?} */
var obj = this.element.nativeElement;
/** @type {?} */
var startTime = new Date().getTime();
/** @type {?} */
var endTime = startTime + time;
/**
* @return {?}
*/
function run() {
/** @type {?} */
var now = new Date().getTime();
/** @type {?} */
var remaining = Math.max((endTime - now) / time, 0);
/** @type {?} */
var value = Math.round(end - (remaining * end));
obj.innerHTML = value;
if (value == end) {
clearInterval(timer);
}
}
/** @type {?} */
var timer = setInterval(run, stepTime);
};
CountToDirective.decorators = [
{ type: Directive, args: [{
selector: '[ta-countTo]'
},] },
];
/** @nocollapse */
CountToDirective.ctorParameters = function () { return [
{ type: ElementRef }
]; };
CountToDirective.propDecorators = {
duration: [{ type: Input }]
};
return CountToDirective;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var TelDirective = /** @class */ (function () {
function TelDirective() {
}
/**
* @param {?} $event
* @return {?}
*/
TelDirective.prototype.onKeyup = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
/** @type {?} */
var valor;
valor = $event.target.value.replace(/\D/g, '');
$event.target.value = valor.MaskTel();
};
TelDirective.decorators = [
{ type: Directive, args: [{
selector: '[ta-tel]'
},] },
];
/** @nocollapse */
TelDirective.ctorParameters = function () { return []; };
TelDirective.propDecorators = {
onKeyup: [{ type: HostListener, args: ['keyup', ['$event'],] }]
};
return TelDirective;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
Array.prototype.difference = function (b, field) {
/** @type {?} */
var a = this;
/** @type {?} */
var diffBy = function (pred) { return function (a, b) { return a.filter(function (x) { return !b.some(function (y) { return pred(x, y); }); }); }; };
/** @type {?} */
var makeSymmDiffFunc = function (pred) { return function (a, b) { return diffBy(pred)(a, b).concat(diffBy(pred)(b, a)); }; };
/** @type {?} */
var myDiff = makeSymmDiffFunc(function (x, y) { return x[field] === y[field]; });
return myDiff(a, b);
};
String.prototype.removeMask = function () {
return this.replace(/[^0-9]+/g, "");
};
String.prototype.MaskTel = function () {
/** @type {?} */
var tel = this;
if (tel) {
tel = tel.replace(/[^0-9]+/g, "");
if (tel.length > 0) {
tel = "(" + tel.substring(0);
}
if (tel.length > 3) {
tel = tel.substring(0, 3) + ")" + tel.substring(3);
}
if (tel.length > 8) {
tel = tel.substring(0, 8) + "-" + tel.substring(8, 13);
}
if (tel.length > 13) {
tel = tel.replace('-', "");
tel = tel.substring(0, 9) + "-" + tel.substring(9, 14);
}
}
return tel;
};
String.prototype.MaskCpfCnpj = function (option) {
/** @type {?} */
var value = this;
if (this) {
value = this.replace(/[^0-9]+/g, "");
if (option == "cnpj") {
if (value.length > 2) {
value = value.substring(0, 2) + "." + value.substring(2);
}
if (value.length > 6) {
value = value.substring(0, 6) + "." + value.substring(6);
}
if (value.length > 10) {
value = value.substring(0, 10) + "/" + value.substring(10);
}
if (value.length > 15) {
value = value.substring(0, 15) + "-" + value.substring(15, 17);
}
}
else {
if (value.length > 3) {
value = value.substring(0, 3) + "." + value.substring(3);
}
if (value.length > 7) {
value = value.substring(0, 7) + "." + value.substring(7);
}
if (value.length > 11) {
/** @type {?} */
var max = 16;
if (option == "cpf") {
max = 13;
}
value = value.substring(0, 11) + "-" + value.substring(11, max);
}
if (value.length > 14) {
value = value.replace('.', "");
value = value.replace('.', "");
value = value.replace('-', "");
value = value.substring(0, 2) + "." + value.substring(2, 5) + "." + value.substring(5, 8) + "/" + value.substring(8, 12) + "-" + value.substring(12, 14);
}
}
}
return value;
};
String.prototype.validaCPF = function () {
/** @type {?} */
var cpf = this;
if (cpf) {
cpf = cpf.replace(/\D/g, '');
/** @type {?} */
var Soma = void 0;
/** @type {?} */
var Resto = void 0;
Soma = 0;
if (cpf == "00000000000" ||
cpf == "00000000000" ||
cpf == "11111111111" ||
cpf == "22222222222" ||
cpf == "33333333333" ||
cpf == "44444444444" ||
cpf == "55555555555" ||
cpf == "66666666666" ||
cpf == "77777777777" ||
cpf == "88888888888" ||
cpf == "99999999999")
return false;
for (var i = 1; i <= 9; i++)
Soma = Soma + parseInt(cpf.substring(i - 1, i)) * (11 - i);
Resto = (Soma * 10) % 11;
if ((Resto == 10) || (Resto == 11))
Resto = 0;
if (Resto != parseInt(cpf.substring(9, 10)))
return false;
Soma = 0;
for (var i = 1; i <= 10; i++)
Soma = Soma + parseInt(cpf.substring(i - 1, i)) * (12 - i);
Resto = (Soma * 10) % 11;
if ((Resto == 10) || (Resto == 11))
Resto = 0;
if (Resto != parseInt(cpf.substring(10, 11)))
return false;
return true;
}
else {
return false;
}
};
String.prototype.validaCNPJ = function () {
/** @type {?} */
var b = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
if (/0{14}/.test(this))
return false;
for (var i = 0, n = 0; i < 12; n += this[i] * b[++i])
;
if (this[12] != (((n %= 11) < 2) ? 0 : 11 - n))
return false;
for (var i = 0, n = 0; i <= 12; n += this[i] * b[i++])
;
if (this[13] != (((n %= 11) < 2) ? 0 : 11 - n))
return false;
return true;
};
String.prototype.ToCpfCnpj = function () {
/** @type {?} */
var num = this;
if (num) {
num = num.toString();
num = num.replace(/\D/g, "");
switch (num.length) {
case 4:
num = num.replace(/(\d+)(\d{3})/, " $1.$2");
break;
case 5:
num = num.replace(/(\d+)(\d{3})/, " $1.$2");
break;
case 6:
num = num.replace(/(\d+)(\d{3})/, " $1.$2");
break;
case 7:
num = num.replace(/(\d+)(\d{3})(\d{3})/, " $1.$2.$3");
break;
case 8:
num = num.replace(/(\d+)(\d{3})(\d{3})/, " $1.$2.$3");
break;
case 9:
num = num.replace(/(\d+)(\d{3})(\d{3})/, " $1.$2.$3");
break;
case 10:
num = num.replace(/(\d+)(\d{3})(\d{3})(\d{1})/, " $1.$2.$3-$4");
break;
case 11:
num = num.replace(/(\d+)(\d{3})(\d{3})(\d{2})/, " $1.$2.$3-$4");
break;
case 12:
num = num.replace(/(\d+)(\d{3})(\d{3})(\d{4})/, " $1.$2.$3/$4");
break;
case 13:
num = num.replace(/(\d+)(\d{3})(\d{3})(\d{4})(\d{2})/, " $1.$2.$3/$4-$5");
break;
case 14:
num = num.replace(/(\d{2})(\d{3})(\d{3})(\d{4})(\d+)/, " $1.$2.$3/$4-$5");
break;
}
}
return num;
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var TauroDirectivesModule = /** @class */ (function () {
function TauroDirectivesModule() {
}
TauroDirectivesModule.decorators = [
{ type: NgModule, args: [{
imports: [],
declarations: [TauroDirectivesComponent, CpfDirective, CnpjDirective, CountToDirective, TelDirective],
exports: [TauroDirectivesComponent, CpfDirective, CnpjDirective, CountToDirective, TelDirective]
},] },
];
return TauroDirectivesModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
export { TauroDirectivesService, TauroDirectivesComponent, TauroDirectivesModule, CnpjDirective, CountToDirective, CpfDirective, TelDirective };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF1cm8tZGlyZWN0aXZlcy5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vdGF1cm8tZGlyZWN0aXZlcy9saWIvdGF1cm8tZGlyZWN0aXZlcy5zZXJ2aWNlLnRzIiwibmc6Ly90YXVyby1kaXJlY3RpdmVzL2xpYi90YXVyby1kaXJlY3RpdmVzLmNvbXBvbmVudC50cyIsIm5nOi8vdGF1cm8tZGlyZWN0aXZlcy9saWIvY3BmL2NwZi5kaXJlY3RpdmUudHMiLCJuZzovL3RhdXJvLWRpcmVjdGl2ZXMvbGliL2NucGovY25wai5kaXJlY3RpdmUudHMiLCJuZzovL3RhdXJvLWRpcmVjdGl2ZXMvbGliL2NvdW50LXRvL2NvdW50LXRvLmRpcmVjdGl2ZS50cyIsIm5nOi8vdGF1cm8tZGlyZWN0aXZlcy9saWIvdGVsL3RlbC5kaXJlY3RpdmUudHMiLCJuZzovL3RhdXJvLWRpcmVjdGl2ZXMvbGliL3V0aWxzL2V4dGVuZGVkLm1ldGhvZHMudHMiLCJuZzovL3RhdXJvLWRpcmVjdGl2ZXMvbGliL3RhdXJvLWRpcmVjdGl2ZXMubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVGF1cm9EaXJlY3RpdmVzU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RhLXRhdXJvLWRpcmVjdGl2ZXMnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxwPlxuICAgICAgdGF1cm8tZGlyZWN0aXZlcyB3b3JrcyFcbiAgICA8L3A+XG4gIGAsXG4gIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgVGF1cm9EaXJlY3RpdmVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbn1cbiIsImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0YS1jcGZdJ1xufSlcbmV4cG9ydCBjbGFzcyBDcGZEaXJlY3RpdmUge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICBvbktleXVwKCRldmVudDogYW55KSB7XG4gICAgbGV0IHZhbG9yOiBzdHJpbmc7XG4gICAgdmFsb3IgPSAkZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgJGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbG9yLk1hc2tDcGZDbnBqKFwiY3BmXCIpO1xuICB9XG5cbiAgIFxufVxuIiwiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3RhLWNucGpdJ1xufSlcbmV4cG9ydCBjbGFzcyBDbnBqRGlyZWN0aXZlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSlcbiAgb25LZXl1cCgkZXZlbnQ6IGFueSkge1xuICAgIGxldCB2YWxvcjogc3RyaW5nO1xuICAgIHZhbG9yID0gJGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgICRldmVudC50YXJnZXQudmFsdWUgPSB2YWxvci5NYXNrQ3BmQ25waihcImNucGpcIik7XG4gIH0gICBcblxufVxuIiwiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGEtY291bnRUb10nXG59KVxuZXhwb3J0IGNsYXNzIENvdW50VG9EaXJlY3RpdmUge1xuXG4gIEBJbnB1dCgpIGR1cmF0aW9uOiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDpFbGVtZW50UmVmKXt9IFxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBsZXQgdGltZSAgICAgID0gTnVtYmVyKHRoaXMuZHVyYXRpb24gfHwgMTUwMCk7ICBcbiAgICBsZXQgZW5kICAgICAgID0gcGFyc2VJbnQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICBsZXQgc3RlcFRpbWUgID0gTWF0aC5hYnMoTWF0aC5mbG9vcih0aW1lIC8gZW5kKSk7XG4gICAgc3RlcFRpbWUgICAgICA9IE1hdGgubWF4KHN0ZXBUaW1lLCA1MCk7XG4gICAgbGV0IG9iaiAgICAgICA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuXG4gICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGxldCBlbmRUaW1lICAgPSBzdGFydFRpbWUgKyB0aW1lO1xuICAgIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAgICAgbGV0IG5vdyAgICAgICA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBsZXQgcmVtYWluaW5nID0gTWF0aC5tYXgoKGVuZFRpbWUgLSBub3cpIC8gdGltZSwgMCk7XG4gICAgICAgIGxldCB2YWx1ZSAgICAgPSBNYXRoLnJvdW5kKGVuZCAtIChyZW1haW5pbmcgKiBlbmQpKTtcbiAgICAgICAgb2JqLmlubmVySFRNTCA9IHZhbHVlOyAgXG5cbiAgICAgICAgaWYgKHZhbHVlID09IGVuZCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHRpbWVyID0gc2V0SW50ZXJ2YWwocnVuLCBzdGVwVGltZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0YS10ZWxdJ1xufSlcbmV4cG9ydCBjbGFzcyBUZWxEaXJlY3RpdmUge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICBvbktleXVwKCRldmVudDogYW55KSB7XG4gICAgbGV0IHZhbG9yOiBzdHJpbmc7XG4gICAgdmFsb3IgPSAkZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgJGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbG9yLk1hc2tUZWwoKTtcbiAgfVxuXG59XG4iLCJpbnRlcmZhY2UgU3RyaW5nIHtcclxuICAgIHJlbW92ZU1hc2soKTogc3RyaW5nO1xyXG4gICAgTWFza0NwZkNucGoob3B0aW9uOiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgICBNYXNrVGVsKCk6IHN0cmluZztcclxuICAgIFRvQ3BmQ25waigpOiBzdHJpbmc7XHJcbiAgICB2YWxpZGFDUEYoKTogYm9vbGVhbjtcclxuICAgIHZhbGlkYUNOUEooKTogYm9vbGVhbjtcclxufVxyXG5cclxuaW50ZXJmYWNlIEFycmF5PFQ+IHtcclxuICAgIGRpZmZlcmVuY2UoYjogQXJyYXk8VD4sIGZpZWxkOiBzdHJpbmcpOiBBcnJheTxUPjtcclxufVxyXG5cclxuQXJyYXkucHJvdG90eXBlLmRpZmZlcmVuY2UgPSBmdW5jdGlvbiAoYiwgZmllbGQpOiBhbnlbXSB7XHJcbiAgICBsZXQgYSA9IHRoaXM7XHJcbiAgICBjb25zdCBkaWZmQnkgPSAocHJlZCkgPT4gKGEsIGIpID0+IGEuZmlsdGVyKHggPT4gIWIuc29tZSh5ID0+IHByZWQoeCwgeSkpKTtcclxuICAgIGNvbnN0IG1ha2VTeW1tRGlmZkZ1bmMgPSAocHJlZCkgPT4gKGEsIGIpID0+IGRpZmZCeShwcmVkKShhLCBiKS5jb25jYXQoZGlmZkJ5KHByZWQpKGIsIGEpKTtcclxuICAgIGNvbnN0IG15RGlmZiA9IG1ha2VTeW1tRGlmZkZ1bmMoKHgsIHkpID0+IHhbZmllbGRdID09PSB5W2ZpZWxkXSk7XHJcbiAgICByZXR1cm4gbXlEaWZmKGEsIGIpO1xyXG59XHJcblxyXG5TdHJpbmcucHJvdG90eXBlLnJlbW92ZU1hc2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC9bXjAtOV0rL2csIFwiXCIpO1xyXG59XHJcblxyXG5TdHJpbmcucHJvdG90eXBlLk1hc2tUZWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBsZXQgdGVsID0gdGhpcztcclxuICAgIGlmICh0ZWwpIHtcclxuICAgICAgICB0ZWwgPSB0ZWwucmVwbGFjZSgvW14wLTldKy9nLCBcIlwiKTtcclxuICAgICAgICBpZiAodGVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGVsID0gXCIoXCIgKyB0ZWwuc3Vic3RyaW5nKDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGVsLmxlbmd0aCA+IDMpIHtcclxuICAgICAgICAgICAgdGVsID0gdGVsLnN1YnN0cmluZygwLCAzKSArIFwiKVwiICsgdGVsLnN1YnN0cmluZygzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRlbC5sZW5ndGggPiA4KSB7XHJcbiAgICAgICAgICAgIHRlbCA9IHRlbC5zdWJzdHJpbmcoMCwgOCkgKyBcIi1cIiArIHRlbC5zdWJzdHJpbmcoOCwgMTMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGVsLmxlbmd0aCA+IDEzKSB7XHJcbiAgICAgICAgICAgIHRlbCA9IHRlbC5yZXBsYWNlKCctJywgXCJcIik7XHJcbiAgICAgICAgICAgIHRlbCA9IHRlbC5zdWJzdHJpbmcoMCwgOSkgKyBcIi1cIiArIHRlbC5zdWJzdHJpbmcoOSwgMTQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0ZWxcclxufVxyXG5cclxuU3RyaW5nLnByb3RvdHlwZS5NYXNrQ3BmQ25waiA9IGZ1bmN0aW9uIChvcHRpb24pIHtcclxuICAgIGxldCB2YWx1ZSA9IHRoaXM7XHJcbiAgICBpZiAodGhpcykge1xyXG4gICAgICAgIHZhbHVlID0gdGhpcy5yZXBsYWNlKC9bXjAtOV0rL2csIFwiXCIpO1xyXG4gICAgICAgIGlmIChvcHRpb24gPT0gXCJjbnBqXCIpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIDIpICsgXCIuXCIgKyB2YWx1ZS5zdWJzdHJpbmcoMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIDYpICsgXCIuXCIgKyB2YWx1ZS5zdWJzdHJpbmcoNik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDEwKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCAxMCkgKyBcIi9cIiArIHZhbHVlLnN1YnN0cmluZygxMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDE1KSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCAxNSkgKyBcIi1cIiArIHZhbHVlLnN1YnN0cmluZygxNSwgMTcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgMykgKyBcIi5cIiArIHZhbHVlLnN1YnN0cmluZygzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gNykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgNykgKyBcIi5cIiArIHZhbHVlLnN1YnN0cmluZyg3KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMTEpIHtcclxuICAgICAgICAgICAgICAgIGxldCBtYXggPSAxNjtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb24gPT0gXCJjcGZcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IDEzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgMTEpICsgXCItXCIgKyB2YWx1ZS5zdWJzdHJpbmcoMTEsIG1heCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDE0KSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJy4nLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnLicsIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCctJywgXCJcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgMikgKyBcIi5cIiArIHZhbHVlLnN1YnN0cmluZygyLCA1KSArIFwiLlwiICsgdmFsdWUuc3Vic3RyaW5nKDUsIDgpICsgXCIvXCIgKyB2YWx1ZS5zdWJzdHJpbmcoOCwgMTIpICsgXCItXCIgKyB2YWx1ZS5zdWJzdHJpbmcoMTIsIDE0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG5cclxuU3RyaW5nLnByb3RvdHlwZS52YWxpZGFDUEYgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBsZXQgY3BmID0gdGhpcztcclxuICAgIGlmIChjcGYpIHtcclxuICAgICAgICBjcGYgPSBjcGYucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgICAgICBsZXQgU29tYTtcclxuICAgICAgICBsZXQgUmVzdG87XHJcbiAgICAgICAgU29tYSA9IDA7XHJcbiAgICAgICAgaWYgKGNwZiA9PSBcIjAwMDAwMDAwMDAwXCIgfHxcclxuICAgICAgICAgICAgY3BmID09IFwiMDAwMDAwMDAwMDBcIiB8fFxyXG4gICAgICAgICAgICBjcGYgPT0gXCIxMTExMTExMTExMVwiIHx8XHJcbiAgICAgICAgICAgIGNwZiA9PSBcIjIyMjIyMjIyMjIyXCIgfHxcclxuICAgICAgICAgICAgY3BmID09IFwiMzMzMzMzMzMzMzNcIiB8fFxyXG4gICAgICAgICAgICBjcGYgPT0gXCI0NDQ0NDQ0NDQ0NFwiIHx8XHJcbiAgICAgICAgICAgIGNwZiA9PSBcIjU1NTU1NTU1NTU1XCIgfHxcclxuICAgICAgICAgICAgY3BmID09IFwiNjY2NjY2NjY2NjZcIiB8fFxyXG4gICAgICAgICAgICBjcGYgPT0gXCI3Nzc3Nzc3Nzc3N1wiIHx8XHJcbiAgICAgICAgICAgIGNwZiA9PSBcIjg4ODg4ODg4ODg4XCIgfHxcclxuICAgICAgICAgICAgY3BmID09IFwiOTk5OTk5OTk5OTlcIikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSA5OyBpKyspIFNvbWEgPSBTb21hICsgcGFyc2VJbnQoY3BmLnN1YnN0cmluZyhpIC0gMSwgaSkpICogKDExIC0gaSk7XHJcbiAgICAgICAgUmVzdG8gPSAoU29tYSAqIDEwKSAlIDExO1xyXG5cclxuICAgICAgICBpZiAoKFJlc3RvID09IDEwKSB8fCAoUmVzdG8gPT0gMTEpKSBSZXN0byA9IDA7XHJcbiAgICAgICAgaWYgKFJlc3RvICE9IHBhcnNlSW50KGNwZi5zdWJzdHJpbmcoOSwgMTApKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBTb21hID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMDsgaSsrKSBTb21hID0gU29tYSArIHBhcnNlSW50KGNwZi5zdWJzdHJpbmcoaSAtIDEsIGkpKSAqICgxMiAtIGkpO1xyXG4gICAgICAgIFJlc3RvID0gKFNvbWEgKiAxMCkgJSAxMTtcclxuXHJcbiAgICAgICAgaWYgKChSZXN0byA9PSAxMCkgfHwgKFJlc3RvID09IDExKSkgUmVzdG8gPSAwO1xyXG4gICAgICAgIGlmIChSZXN0byAhPSBwYXJzZUludChjcGYuc3Vic3RyaW5nKDEwLCAxMSkpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcblN0cmluZy5wcm90b3R5cGUudmFsaWRhQ05QSiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBiID0gWzYsIDUsIDQsIDMsIDIsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDJdO1xyXG5cclxuICAgIGlmICgvMHsxNH0vLnRlc3QodGhpcykpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gMDsgaSA8IDEyOyBuICs9IHRoaXNbaV0gKiBiWysraV0pO1xyXG4gICAgaWYgKHRoaXNbMTJdICE9ICgoKG4gJT0gMTEpIDwgMikgPyAwIDogMTEgLSBuKSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSAwOyBpIDw9IDEyOyBuICs9IHRoaXNbaV0gKiBiW2krK10pO1xyXG4gICAgaWYgKHRoaXNbMTNdICE9ICgoKG4gJT0gMTEpIDwgMikgPyAwIDogMTEgLSBuKSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcblN0cmluZy5wcm90b3R5cGUuVG9DcGZDbnBqID0gZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IG51bSA9IHRoaXM7XHJcbiAgICBpZiAobnVtKSB7XHJcbiAgICAgICAgbnVtID0gbnVtLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgbnVtID0gbnVtLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChudW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIG51bSA9IG51bS5yZXBsYWNlKC8oXFxkKykoXFxkezN9KS8sIFwiICQxLiQyXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgIG51bSA9IG51bS5yZXBsYWNlKC8oXFxkKykoXFxkezN9KS8sIFwiICQxLiQyXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgIG51bSA9IG51bS5yZXBsYWNlKC8oXFxkKykoXFxkezN9KS8sIFwiICQxLiQyXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgICAgIG51bSA9IG51bS5yZXBsYWNlKC8oXFxkKykoXFxkezN9KShcXGR7M30pLywgXCIgJDEuJDIuJDNcIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA4OlxyXG4gICAgICAgICAgICAgICAgbnVtID0gbnVtLnJlcGxhY2UoLyhcXGQrKShcXGR7M30pKFxcZHszfSkvLCBcIiAkMS4kMi4kM1wiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDk6XHJcbiAgICAgICAgICAgICAgICBudW0gPSBudW0ucmVwbGFjZSgvKFxcZCspKFxcZHszfSkoXFxkezN9KS8sIFwiICQxLiQyLiQzXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTA6XHJcbiAgICAgICAgICAgICAgICBudW0gPSBudW0ucmVwbGFjZSgvKFxcZCspKFxcZHszfSkoXFxkezN9KShcXGR7MX0pLywgXCIgJDEuJDIuJDMtJDRcIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxMTpcclxuICAgICAgICAgICAgICAgIG51bSA9IG51bS5yZXBsYWNlKC8oXFxkKykoXFxkezN9KShcXGR7M30pKFxcZHsyfSkvLCBcIiAkMS4kMi4kMy0kNFwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDEyOlxyXG4gICAgICAgICAgICAgICAgbnVtID0gbnVtLnJlcGxhY2UoLyhcXGQrKShcXGR7M30pKFxcZHszfSkoXFxkezR9KS8sIFwiICQxLiQyLiQzLyQ0XCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICBudW0gPSBudW0ucmVwbGFjZSgvKFxcZCspKFxcZHszfSkoXFxkezN9KShcXGR7NH0pKFxcZHsyfSkvLCBcIiAkMS4kMi4kMy8kNC0kNVwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgbnVtID0gbnVtLnJlcGxhY2UoLyhcXGR7Mn0pKFxcZHszfSkoXFxkezN9KShcXGR7NH0pKFxcZCspLywgXCIgJDEuJDIuJDMvJDQtJDVcIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVtO1xyXG59XHJcblxyXG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGF1cm9EaXJlY3RpdmVzQ29tcG9uZW50IH0gZnJvbSAnLi90YXVyby1kaXJlY3RpdmVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcGZEaXJlY3RpdmUgfSBmcm9tICcuL2NwZi9jcGYuZGlyZWN0aXZlJztcbmltcG9ydCB7IENucGpEaXJlY3RpdmUgfSBmcm9tICcuL2NucGovY25wai5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ291bnRUb0RpcmVjdGl2ZSB9IGZyb20gJy4vY291bnQtdG8vY291bnQtdG8uZGlyZWN0aXZlJztcbmltcG9ydCB7IFRlbERpcmVjdGl2ZSB9IGZyb20gJy4vdGVsL3RlbC5kaXJlY3RpdmUnO1xuaW1wb3J0ICcuL3V0aWxzL2V4dGVuZGVkLm1ldGhvZHMnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1RhdXJvRGlyZWN0aXZlc0NvbXBvbmVudCwgQ3BmRGlyZWN0aXZlLCBDbnBqRGlyZWN0aXZlLCBDb3VudFRvRGlyZWN0aXZlLCBUZWxEaXJlY3RpdmVdLFxuICBleHBvcnRzOiBbVGF1cm9EaXJlY3RpdmVzQ29tcG9uZW50LCBDcGZEaXJlY3RpdmUsIENucGpEaXJlY3RpdmUsIENvdW50VG9EaXJlY3RpdmUsIFRlbERpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgVGF1cm9EaXJlY3RpdmVzTW9kdWxlIHsgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0lBT0U7S0FBaUI7O2dCQUxsQixVQUFVLFNBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzs7OztpQ0FKRDs7Ozs7OztBQ0FBO0lBYUU7S0FBaUI7Ozs7SUFFakIsMkNBQVE7OztJQUFSO0tBQ0M7O2dCQWRGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixRQUFRLEVBQUUsd0RBSVQ7b0JBQ0QsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7Ozs7bUNBVkQ7Ozs7Ozs7QUNBQTtJQU9FO0tBQWlCOzs7OztJQUdqQiw4QkFBTzs7OztJQURQLFVBQ1EsTUFBVzs7UUFDakIsSUFBSSxLQUFLLENBQVM7UUFDbEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxD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QUFJLElBQUksRUFBRTtRQUNOLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyQyxJQUFJLE1BQU0sSUFBSSxNQUFNLEVBQUU7WUFDbEIsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVEO1lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVEO1lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtnQkFDbkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtnQkFDbkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNsRTtTQUNKO2FBQ0k7WUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDNUQ7WUFDRCxJQUFJ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