@neocomplexx/ngx-neo-directives
Version:
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.5.
226 lines • 21.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/neo-numbers.directive.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, ElementRef, HostListener, Input, Renderer2 } from '@angular/core';
import { NgModel } from '@angular/forms';
export class NeoNumbersDirective {
/**
* @param {?} el
* @param {?} renderer
* @param {?} model
*/
constructor(el, renderer, model) {
this.el = el;
this.renderer = renderer;
this.model = model;
this.allowNullValue = false;
}
/**
* @return {?}
*/
ngOnInit() {
if ((/** @type {?} */ (this.allowNullValue)) === "")
this.allowNullValue = true;
this.regex = new RegExp('^\\d+$');
this.el.nativeElement.type = "number";
}
/**
* @param {?} e
* @return {?}
*/
blockPaste(e) {
/** @type {?} */
const clipboardData = e.clipboardData || window['clipboardData'];
/** @type {?} */
let pastedData = clipboardData.getData('text/plain').split(",").join(".");
/** @type {?} */
let posPoint = pastedData.lastIndexOf('.');
if (posPoint > -1) {
pastedData = pastedData.substring(0, posPoint).split(".").join("");
}
/** @type {?} */
const onlyNumbers = Array.from(pastedData).map((/**
* @param {?} x
* @return {?}
*/
x => this.isOnlyNumber(x))).reduce((/**
* @param {?} prev
* @param {?} el
* @return {?}
*/
(prev, el) => prev && el), true);
/** @type {?} */
const isCorrect = this.regex.test(pastedData);
if (isCorrect && this.el.nativeElement.max && pastedData.length > this.el.nativeElement.max.length)
pastedData = pastedData.substr(0, this.el.nativeElement.max.length);
setTimeout((/**
* @return {?}
*/
() => {
if (onlyNumbers && isCorrect) {
this.el.nativeElement.value = pastedData;
}
else {
this.el.nativeElement.value = '0';
}
}), 10);
}
/**
* @return {?}
*/
onfocus() {
if (this.el.nativeElement.value == "0") {
this.el.nativeElement.value = null;
}
}
/**
* @return {?}
*/
onBlur() {
/** @type {?} */
let current = this.el.nativeElement.value;
if (current == "") {
if (this.allowNullValue) {
this.el.nativeElement.value = null;
this.model.control.setValue(null);
}
else {
this.el.nativeElement.value = "0";
this.model.control.setValue(0);
}
}
else {
this.el.nativeElement.type = "text";
this.el.nativeElement.type = "number";
if (this.el.nativeElement.max && this.el.nativeElement.valueAsNumber > +this.el.nativeElement.max) {
this.el.nativeElement.value = this.el.nativeElement.max;
this.model.control.setValue(this.el.nativeElement.valueAsNumber);
}
}
}
/**
* @param {?} event
* @return {?}
*/
onKeyUp(event) {
console.log(event);
/** @type {?} */
let current = this.el.nativeElement.value;
current = current.split("-").join("");
/** @type {?} */
let posPoint = current.indexOf('.');
if (posPoint > -1) {
current = current.substring(0, posPoint);
this.el.nativeElement.value = current;
}
if (this.isSpecial(event) || current == "") {
if (event.keyCode == 8 || current != "") {
this.prev = current;
}
return;
}
if (!this.isOnlyNumber(event)) {
event.preventDefault();
event.stopPropagation();
return false;
}
if (this.el.nativeElement.max && this.el.nativeElement.valueAsNumber > +this.el.nativeElement.max) {
this.el.nativeElement.value = current.substring(0, current.length - 1);
}
}
/**
* @param {?} event
* @return {?}
*/
onKeyDown(event) {
if (this.isSpecial(event)) {
return;
}
if (!this.isOnlyNumber(event)) {
event.preventDefault();
event.stopPropagation();
return false;
}
/** @type {?} */
let current = this.el.nativeElement.value;
this.prev = current;
}
/**
* @private
* @param {?} e
* @return {?}
*/
isSpecial(e) {
return e.key === 'Delete' || (e.key === 'Tab' || e.keyCode == 9) || (e.key === 'Backspace' || e.keyCode == 8) || e.key === 'ArrowLeft' ||
e.altKey || e.ctrlKey || e.key === 'Home' || e.key === 'End' || e.key === 'PageDown' || e.key === 'PageUp' ||
e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'ArrowRight' || e.key === 'Control' || e.key === 'Alt' || e.key === 'Shift' ||
(((/** @type {?} */ (e))).keyIdentifier == 'Down' || ((/** @type {?} */ (e))).keyIdentifier == 'Up' || ((/** @type {?} */ (e))).keyIdentifier == 'Left' || ((/** @type {?} */ (e))).keyIdentifier == 'Right');
}
/**
* @private
* @param {?} e
* @return {?}
*/
isOnlyNumber(e) {
if (e instanceof KeyboardEvent) {
return ((e.key >= '0' && e.key <= '9') || (e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105));
}
else {
return (e >= '0' && e <= '9');
}
}
}
NeoNumbersDirective.decorators = [
{ type: Directive, args: [{
selector: '[isNumber]'
},] }
];
/** @nocollapse */
NeoNumbersDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 },
{ type: NgModel }
];
NeoNumbersDirective.propDecorators = {
isNumber: [{ type: Input }],
allowNullValue: [{ type: Input, args: ['allowNullValue',] }],
blockPaste: [{ type: HostListener, args: ['paste', ['$event'],] }],
onfocus: [{ type: HostListener, args: ['focus',] }],
onBlur: [{ type: HostListener, args: ['blur',] }],
onKeyUp: [{ type: HostListener, args: ['keyup', ['$event'],] }],
onKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }]
};
if (false) {
/** @type {?} */
NeoNumbersDirective.prototype.isNumber;
/** @type {?} */
NeoNumbersDirective.prototype.allowNullValue;
/**
* @type {?}
* @private
*/
NeoNumbersDirective.prototype.prev;
/**
* @type {?}
* @private
*/
NeoNumbersDirective.prototype.regex;
/**
* @type {?}
* @private
*/
NeoNumbersDirective.prototype.el;
/**
* @type {?}
* @private
*/
NeoNumbersDirective.prototype.renderer;
/**
* @type {?}
* @private
*/
NeoNumbersDirective.prototype.model;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVvLW51bWJlcnMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5lb2NvbXBsZXh4L25neC1uZW8tZGlyZWN0aXZlcy8iLCJzb3VyY2VzIjpbImxpYi9uZW8tbnVtYmVycy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLekMsTUFBTSxPQUFPLG1CQUFtQjs7Ozs7O0lBTTVCLFlBQW9CLEVBQWMsRUFBVSxRQUFtQixFQUFVLEtBQWM7UUFBbkUsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFTO1FBSjlELG1CQUFjLEdBQUcsS0FBSyxDQUFDO0lBS2hELENBQUM7Ozs7SUFFRCxRQUFRO1FBQ0osSUFBSSxtQkFBSyxJQUFJLENBQUMsY0FBYyxFQUFBLEtBQUssRUFBRTtZQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQTtJQUN6QyxDQUFDOzs7OztJQUVrQyxVQUFVLENBQUMsQ0FBaUI7O2NBQ3JELGFBQWEsR0FBaUIsQ0FBQyxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDOztZQUMxRSxVQUFVLEdBQVcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzs7WUFFN0UsUUFBUSxHQUFHLFVBQVUsQ0FBQyxX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LEVBQUUsQ0FBQyxRQUFRLENBQUM7c0JBd0JoQyxZQUFZLFNBQUMsT0FBTztxQkFNcEIsWUFBWSxTQUFDLE1BQU07c0JBb0JuQixZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO3dCQTZCaEMsWUFBWSxTQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7OztJQTdGbkMsdUNBQXVCOztJQUN2Qiw2Q0FBZ0Q7Ozs7O0lBQ2hELG1DQUFrQjs7Ozs7SUFDbEIsb0NBQXNCOzs7OztJQUVWLGlDQUFzQjs7Ozs7SUFBRSx1Q0FBMkI7Ozs7O0lBQUUsb0NBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBSZW5kZXJlcjIsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaXNOdW1iZXJdJ1xufSlcbmV4cG9ydCBjbGFzcyBOZW9OdW1iZXJzRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBpc051bWJlcjogYW55O1xuICAgIEBJbnB1dCgnYWxsb3dOdWxsVmFsdWUnKSBhbGxvd051bGxWYWx1ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgcHJldjogYW55O1xuICAgIHByaXZhdGUgcmVnZXg6IFJlZ0V4cDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBtb2RlbDogTmdNb2RlbCkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoPGFueT50aGlzLmFsbG93TnVsbFZhbHVlID09PSBcIlwiKSB0aGlzLmFsbG93TnVsbFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWdleCA9IG5ldyBSZWdFeHAoJ15cXFxcZCskJyk7XG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC50eXBlID0gXCJudW1iZXJcIlxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3Bhc3RlJywgWyckZXZlbnQnXSkgYmxvY2tQYXN0ZShlOiBDbGlwYm9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBjbGlwYm9hcmREYXRhOiBEYXRhVHJhbnNmZXIgPSBlLmNsaXBib2FyZERhdGEgfHwgd2luZG93WydjbGlwYm9hcmREYXRhJ107XG4gICAgICAgIGxldCBwYXN0ZWREYXRhOiBzdHJpbmcgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKS5zcGxpdChcIixcIikuam9pbihcIi5cIik7XG5cbiAgICAgICAgbGV0IHBvc1BvaW50ID0gcGFzdGVkRGF0YS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICBpZiAocG9zUG9pbnQgPiAtMSkge1xuICAgICAgICAgICAgcGFzdGVkRGF0YSA9IHBhc3RlZERhdGEuc3Vic3RyaW5nKDAsIHBvc1BvaW50KS5zcGxpdChcIi5cIikuam9pbihcIlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9ubHlOdW1iZXJzID0gQXJyYXkuZnJvbShwYXN0ZWREYXRhKS5tYXAoeCA9PiB0aGlzLmlzT25seU51bWJlcih4KSkucmVkdWNlKChwcmV2LCBlbCkgPT4gcHJldiAmJiBlbCwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGlzQ29ycmVjdCA9IHRoaXMucmVnZXgudGVzdChwYXN0ZWREYXRhKTtcbiAgICAgICAgaWYgKGlzQ29ycmVjdCAmJiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQubWF4ICYmIHBhc3RlZERhdGEubGVuZ3RoID4gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heC5sZW5ndGgpXG4gICAgICAgICAgICBwYXN0ZWREYXRhID0gcGFzdGVkRGF0YS5zdWJzdHIoMCwgdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heC5sZW5ndGgpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9ubHlOdW1iZXJzICYmIGlzQ29ycmVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IHBhc3RlZERhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgIFxuICAgICAgICB9LCAxMCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKSBvbmZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID09IFwiMFwiKSB7XG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignYmx1cicpIG9uQmx1cigpIHtcbiAgICAgICAgbGV0IGN1cnJlbnQ6IHN0cmluZyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT0gXCJcIikge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dOdWxsVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuY29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCIwXCI7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5jb250cm9sLnNldFZhbHVlKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC50eXBlID0gXCJudW1iZXJcIjtcbiAgICAgICAgICAgIGlmICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQubWF4ICYmIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZUFzTnVtYmVyID4gK3RoaXMuZWwubmF0aXZlRWxlbWVudC5tYXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQubWF4O1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuY29udHJvbC5zZXRWYWx1ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWVBc051bWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pIG9uS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblxuICAgICAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgICAgIGxldCBjdXJyZW50OiBzdHJpbmcgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnNwbGl0KFwiLVwiKS5qb2luKFwiXCIpO1xuICAgICAgICBsZXQgcG9zUG9pbnQgPSBjdXJyZW50LmluZGV4T2YoJy4nKTtcbiAgICAgICAgaWYgKHBvc1BvaW50ID4gLTEpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnN1YnN0cmluZygwLCBwb3NQb2ludCk7XG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBjdXJyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTcGVjaWFsKGV2ZW50KSB8fCBjdXJyZW50ID09IFwiXCIpIHsgXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PSA4IHx8IGN1cnJlbnQgIT0gXCJcIikge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldiA9IGN1cnJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47IFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzT25seU51bWJlcihldmVudCkpIHsgXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQubWF4ICYmIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZUFzTnVtYmVyID4gK3RoaXMuZWwubmF0aXZlRWxlbWVudC5tYXgpIHtcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IGN1cnJlbnQuc3Vic3RyaW5nKDAsIGN1cnJlbnQubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSkgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTcGVjaWFsKGV2ZW50KSkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNPbmx5TnVtYmVyKGV2ZW50KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGxldCBjdXJyZW50OiBzdHJpbmcgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG5cbiAgICAgICAgdGhpcy5wcmV2ID0gY3VycmVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU3BlY2lhbChlOiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBlLmtleSA9PT0gJ0RlbGV0ZScgfHwgKGUua2V5ID09PSAnVGFiJyB8fCBlLmtleUNvZGUgPT0gOSkgfHwgKGUua2V5ID09PSAnQmFja3NwYWNlJyB8fCBlLmtleUNvZGUgPT0gOCkgfHwgZS5rZXkgPT09ICdBcnJvd0xlZnQnIHx8XG4gICAgICAgICAgICBlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5rZXkgPT09ICdIb21lJyB8fCBlLmtleSA9PT0gJ0VuZCcgfHwgZS5rZXkgPT09ICdQYWdlRG93bicgfHwgZS5rZXkgPT09ICdQYWdlVXAnIHx8XG4gICAgICAgICAgICBlLmtleSA9PT0gJ0Fycm93RG93bicgfHwgZS5rZXkgPT09ICdBcnJvd1VwJyB8fCBlLmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGUua2V5ID09PSAnQ29udHJvbCcgfHwgZS5rZXkgPT09ICdBbHQnIHx8IGUua2V5ID09PSAnU2hpZnQnIHx8XG4gICAgICAgICAgICAoKDxhbnk+ZSkua2V5SWRlbnRpZmllciA9PSAnRG93bicgfHwgKDxhbnk+ZSkua2V5SWRlbnRpZmllciA9PSAnVXAnIHx8ICg8YW55PmUpLmtleUlkZW50aWZpZXIgPT0gJ0xlZnQnIHx8ICg8YW55PmUpLmtleUlkZW50aWZpZXIgPT0gJ1JpZ2h0Jyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc09ubHlOdW1iZXIoZTogS2V5Ym9hcmRFdmVudCB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiAoKGUua2V5ID49ICcwJyAmJiBlLmtleSA8PSAnOScpIHx8IChlLmtleUNvZGUgPj0gNDggJiYgZS5rZXlDb2RlIDw9IDU3KSB8fCAoZS5rZXlDb2RlID49IDk2ICYmIGUua2V5Q29kZSA8PSAxMDUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoZSA+PSAnMCcgJiYgZSA8PSAnOScpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19