@po-ui/ng-components 17.26.6 → 17.26.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/po-field/po-datepicker/po-datepicker-base.component.mjs +19 -2
- package/esm2022/lib/components/po-field/po-datepicker/po-datepicker.component.mjs +89 -44
- package/esm2022/lib/components/po-field/po-datepicker/po-datepicker.module.mjs +25 -4
- package/esm2022/lib/components/po-field/po-input/po-mask.mjs +4 -4
- package/esm2022/lib/utils/util.mjs +8 -2
- package/fesm2022/po-ui-ng-components.mjs +142 -55
- package/fesm2022/po-ui-ng-components.mjs.map +1 -1
- package/lib/components/po-field/po-datepicker/po-datepicker-base.component.d.ts +16 -1
- package/lib/components/po-field/po-datepicker/po-datepicker.module.d.ts +5 -4
- package/lib/utils/util.d.ts +1 -0
- package/package.json +4 -4
- package/po-ui-ng-components-17.26.7.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-update/v14/index.js +1 -1
- package/schematics/ng-update/v15/index.js +1 -1
- package/schematics/ng-update/v16/index.js +1 -1
- package/schematics/ng-update/v17/index.js +1 -1
- package/schematics/ng-update/v2/index.js +1 -1
- package/schematics/ng-update/v3/index.js +1 -1
- package/schematics/ng-update/v4/index.js +1 -1
- package/schematics/ng-update/v5/index.js +1 -1
- package/schematics/ng-update/v6/index.js +1 -1
- package/po-ui-ng-components-17.26.6.tgz +0 -0
|
@@ -89,10 +89,10 @@ export class PoMask {
|
|
|
89
89
|
}
|
|
90
90
|
setSelectionRange($event) {
|
|
91
91
|
if (this.initialPosition > this.finalPosition) {
|
|
92
|
-
$event.target.setSelectionRange(this.finalPosition, this.initialPosition);
|
|
92
|
+
$event.target.setSelectionRange?.(this.finalPosition, this.initialPosition);
|
|
93
93
|
}
|
|
94
94
|
else {
|
|
95
|
-
$event.target.setSelectionRange(this.initialPosition, this.finalPosition);
|
|
95
|
+
$event.target.setSelectionRange?.(this.initialPosition, this.finalPosition);
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
keydown($event) {
|
|
@@ -212,7 +212,7 @@ export class PoMask {
|
|
|
212
212
|
}
|
|
213
213
|
// posiciona o cursor de acordo com o controle de posição
|
|
214
214
|
setPositions($event) {
|
|
215
|
-
$event.target.setSelectionRange(this.initialPosition, this.finalPosition);
|
|
215
|
+
$event.target.setSelectionRange?.(this.initialPosition, this.finalPosition);
|
|
216
216
|
}
|
|
217
217
|
// muda a posição do cursor e atualiza o controle de posição
|
|
218
218
|
changePosition($event, value) {
|
|
@@ -460,4 +460,4 @@ export class PoMask {
|
|
|
460
460
|
}
|
|
461
461
|
}
|
|
462
462
|
}
|
|
463
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbWFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1pbnB1dC9wby1tYXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sTUFBTTtJQUNqQixJQUFJLEdBQVcsRUFBRSxDQUFDO0lBQ2xCLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0Isc0JBQXNCO0lBQ3RCLGVBQWUsR0FBVyxDQUFDLENBQUM7SUFDNUIsYUFBYSxHQUFXLENBQUMsQ0FBQztJQUUxQixPQUFPLEdBQVcsRUFBRSxDQUFDO0lBQ3JCLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsWUFBWSxDQUFTO0lBQ3JCLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksZUFBZSxDQUFDLEtBQWE7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQVksQ0FBUztJQUNyQixJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFJLGVBQWUsQ0FBQyxLQUFhO1FBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjLENBQVU7SUFFeEIsWUFBWSxJQUFZLEVBQUUsV0FBb0I7UUFDNUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFXO1FB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QUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUNELE9BQU8sT0FBTyxDQUFDO1NBQ2hCO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJhIHVzYXIgbyBwby1tYXNrIMOpIHByZWNpc28gaW5zdGFuY2lhciBlc3RhIGNsYXNzZSBwYXNzYW5kbyBhIG3DoXNjYXJhIGNvbW9cbiAqIHByaW1laXJvIHBhcsOibWV0cm8sIGUgbm8gc2VndW5kbyBwYXLDom1ldHJvLCBkZXZlIHNlIGluZm9ybWFkbyB0cnVlLCBjYXNvIHF1ZWlyYVxuICogcXVlIG8gbW9kZWwgc2VqYSBmb3JtYXRhZG8gb3UgZmFsc2UgcGFyYSBvIHF1ZSBvIG1vZGVsIHNlamEgbGltcG8uXG4gKi9cbmV4cG9ydCBjbGFzcyBQb01hc2sge1xuICBtYXNrOiBzdHJpbmcgPSAnJztcbiAgZm9ybWF0TW9kZWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gY29udHJvbGUgZGUgcG9zacOnw6NvXG4gIGluaXRpYWxQb3NpdGlvbjogbnVtYmVyID0gMDtcbiAgZmluYWxQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICBwYXR0ZXJuOiBzdHJpbmcgPSAnJztcbiAgZ2V0IGdldFBhdHRlcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXR0ZXJuO1xuICB9XG5cbiAgdmFsdWVUb0lucHV0OiBzdHJpbmc7XG4gIGdldCBnZXRWYWx1ZVRvSW5wdXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVRvSW5wdXQ7XG4gIH1cbiAgc2V0IHNldFZhbHVlVG9JbnB1dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZVRvSW5wdXQgPSB2YWx1ZTtcbiAgfVxuXG4gIHZhbHVlVG9Nb2RlbDogc3RyaW5nO1xuICBnZXQgZ2V0VmFsdWVUb01vZGVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVUb01vZGVsO1xuICB9XG4gIHNldCBzZXRWYWx1ZVRvTW9kZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWVUb01vZGVsID0gdmFsdWU7XG4gIH1cblxuICBmb3JtYXR0aW5nRW5kczogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihtYXNrOiBzdHJpbmcsIGZvcm1hdE1vZGVsOiBib29sZWFuKSB7XG4gICAgdGhpcy5tYXNrID0gbWFzaztcbiAgICB0aGlzLmZvcm1hdE1vZGVsID0gZm9ybWF0TW9kZWw7XG4gICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5nZXRSZWdleEZyb21NYXNrKG1hc2spO1xuICB9XG5cbiAga2V5dXAoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5tYXNrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9ICRldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAvLyBmb3JtYXRhIG8gdmFsb3IgcXVhbmRvIGZvciBjb2xhZG8gY29tIGNvbnRyb2wgKyB2IGUgcmVwb3NpY2lvbmEgbyBjdXJzb3JcbiAgICAgIGlmICgkZXZlbnQua2V5Q29kZSA9PT0gMTcgfHwgJGV2ZW50LmtleUNvZGUgPT09IDkxKSB7XG4gICAgICAgICRldmVudC50YXJnZXQudmFsdWUgPSB0aGlzLmNvbnRyb2xGb3JtYXR0aW5nKHZhbHVlKTtcbiAgICAgICAgdGhpcy5yZXNldFBvc2l0aW9ucygkZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgc3dpdGNoICgkZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIDM3OiAvLyBzZXRhIGVzcXVlcmRhXG4gICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbFBvc2l0aW9uID4gMCkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsUG9zaXRpb24tLTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbk5vdFNoaWZ0S2V5KCRldmVudCk7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZSgkZXZlbnQpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzk6IC8vIHNldGEgZGlyZWl0YVxuICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxQb3NpdGlvbiA8IHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxQb3NpdGlvbisrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uTm90U2hpZnRLZXkoJGV2ZW50KTtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKCRldmVudCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzNTogLy8gZW5kXG4gICAgICAgICAgdGhpcy5maW5hbFBvc2l0aW9uID0gdmFsdWUudG9TdHJpbmcoKS5sZW5ndGg7XG4gICAgICAgICAgaWYgKCRldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbnMoJGV2ZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsUG9zaXRpb24gPSB0aGlzLmZpbmFsUG9zaXRpb247XG4gICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9ucygkZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM2OiAvLyBIT01FXG4gICAgICAgICAgaWYgKCRldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5maW5hbFBvc2l0aW9uID0gdGhpcy5pbml0aWFsUG9zaXRpb247XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxQb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9ucygkZXZlbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxQb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICB0aGlzLmZpbmFsUG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbnMoJGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0UG9zaXRpb25Ob3RTaGlmdEtleSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICghJGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLmZpbmFsUG9zaXRpb24gPSB0aGlzLmluaXRpYWxQb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICBzZXRTZWxlY3Rpb25SYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmluaXRpYWxQb3NpdGlvbiA+IHRoaXMuZmluYWxQb3NpdGlvbikge1xuICAgICAgJGV2ZW50LnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLmZpbmFsUG9zaXRpb24sIHRoaXMuaW5pdGlhbFBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGV2ZW50LnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLmluaXRpYWxQb3NpdGlvbiwgdGhpcy5maW5hbFBvc2l0aW9uKTtcbiAgICB9XG4gIH1cblxuICBrZXlkb3duKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMubWFzaykge1xuICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgPSAkZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKCRldmVudC5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCEkZXZlbnQuY3RybEtleSAmJiAhJGV2ZW50Lm1ldGFLZXkpIHtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE7Do28gZmF6IG5hZGEgcXVhbmRvIGZvciBkaWdpdGFkbyBDVFJMIG91IENPTU1BTkQgZSBWXG4gICAgICAvLyBKw6EgZXN0w6Egc2VuZG8gdHJhdGFkbyBubyBldmVudG8ga2V5dXBcbiAgICAgIGlmIChcbiAgICAgICAgJGV2ZW50LmN0cmxLZXkgfHxcbiAgICAgICAgKCRldmVudC5tZXRhS2V5ICYmICRldmVudC5rZXlDb2RlICE9PSA4NikgfHxcbiAgICAgICAgKCRldmVudC5rZXlDb2RlID49IDM3ICYmICRldmVudC5rZXlDb2RlIDw9IDQwKSB8fFxuICAgICAgICAkZXZlbnQua2V5Q29kZSA9PT0gMTYgfHxcbiAgICAgICAgJGV2ZW50LmtleUNvZGUgPT09IDlcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYSBhIHRlY2xhIGRpZ2l0YWRhXG4gICAgICBpZiAodGhpcy5pc0tleVZhbGlkKCRldmVudC5rZXlDb2RlKSkge1xuICAgICAgICBpZiAodGhpcy5maW5hbFBvc2l0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5maW5hbFBvc2l0aW9uID0gdGhpcy5pbml0aWFsUG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXZlcnRQb3NpdGlvbnModGhpcy5pbml0aWFsUG9zaXRpb24sIHRoaXMuZmluYWxQb3NpdGlvbik7XG5cbiAgICAgICAgc3dpdGNoICgkZXZlbnQua2V5Q29kZSkge1xuICAgICAgICAgIGNhc2UgODogLy8gYmFja3NwYWNlXG4gICAgICAgICAgICB0aGlzLmdldFBvc2l0aW9uKCRldmVudCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsUG9zaXRpb24gPCAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuaW5pdGlhbFBvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbnMoJGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxQb3NpdGlvbiA9PT0gdGhpcy5maW5hbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tNYXNrQmVmb3JlKCRldmVudCwgLTEpO1xuICAgICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsUG9zaXRpb24gIT09IDApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIHRoaXMuaW5pdGlhbFBvc2l0aW9uIC0gMSkgKyB2YWx1ZS5zbGljZSh0aGlzLmZpbmFsUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jb250cm9sRm9ybWF0dGluZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgJGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlUG9zaXRpb24oJGV2ZW50LCAtMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja01hc2tCZWZvcmUoJGV2ZW50LCAtMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbnMoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0UG9zaXRpb25zKCRldmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJSYW5nZVNlbGVjdGlvbih2YWx1ZSwgJGV2ZW50LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb25zKCRldmVudCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNDY6IC8vIGRlbGV0ZVxuICAgICAgICAgICAgdGhpcy5nZXRQb3NpdGlvbigkZXZlbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbFBvc2l0aW9uID09PSB0aGlzLmZpbmFsUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja01hc2tBZnRlcigkZXZlbnQsIDEpO1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIHRoaXMuaW5pdGlhbFBvc2l0aW9uKSArIHZhbHVlLnNsaWNlKHRoaXMuZmluYWxQb3NpdGlvbiArIDEpO1xuICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY29udHJvbEZvcm1hdHRpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAkZXZlbnQudGFyZ2V0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb25zKCRldmVudCk7XG4gICAgICAgICAgICAgIHRoaXMucmVzZXRQb3NpdGlvbnMoJGV2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJSYW5nZVNlbGVjdGlvbih2YWx1ZSwgJGV2ZW50LCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9ucygkZXZlbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gcXVhbHF1ZXIgb3V0cmEgdGVjbGEgdsOhbGlkYVxuICAgICAgICAgICAgdGhpcy5nZXRQb3NpdGlvbigkZXZlbnQpO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCB0aGlzLmluaXRpYWxQb3NpdGlvbikgKyAkZXZlbnQua2V5ICsgdmFsdWUuc2xpY2UodGhpcy5maW5hbFBvc2l0aW9uKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jb250cm9sRm9ybWF0dGluZyh2YWx1ZSk7XG4gICAgICAgICAgICAkZXZlbnQudGFyZ2V0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVBvc2l0aW9uKCRldmVudCwgMSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrTWFza0JlZm9yZSgkZXZlbnQsIDEpO1xuICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbnMoJGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRQb3NpdGlvbnMoJGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb25zKCRldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbGVhclJhbmdlU2VsZWN0aW9uKHZhbHVlOiBzdHJpbmcsICRldmVudDogYW55LCBpc0JhY2tzcGFjZTogYm9vbGVhbikge1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgdGhpcy5pbml0aWFsUG9zaXRpb24pICsgdmFsdWUuc2xpY2UodGhpcy5maW5hbFBvc2l0aW9uKTtcbiAgICB2YWx1ZSA9IHRoaXMuY29udHJvbEZvcm1hdHRpbmcodmFsdWUpO1xuICAgICRldmVudC50YXJnZXQudmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmIChpc0JhY2tzcGFjZSkge1xuICAgICAgdGhpcy5jaGVja01hc2tCZWZvcmUoJGV2ZW50LCAtMSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRQb3NpdGlvbnMoJGV2ZW50KTtcbiAgICB0aGlzLnJlc2V0UG9zaXRpb25zKCRldmVudCk7XG4gIH1cblxuICAvLyBwYXNzYSBhIHBvc2nDp8OjbyBkbyBjbGljayBwYXJhIG8gY29udHJvbGUgZGUgcG9zacOnw6NvXG4gIGNsaWNrKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5pbml0aWFsUG9zaXRpb24gPSAkZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuICAgIHRoaXMuZmluYWxQb3NpdGlvbiA9ICRldmVudC50YXJnZXQuc2VsZWN0aW9uRW5kO1xuICB9XG5cbiAgYmx1cigkZXZlbnQ6IGFueSkge1xuICAgIC8vIFNlIGhvdXZlciBhbGd1bSB2YWxvciBkZWZpbmlkbyBuYSBtw6FzY2FyYVxuICAgIGlmICh0aGlzLm1hc2spIHtcbiAgICAgIC8vIHBlZ2EgbyB2YWxvciBkbyBjYW1wbywgZm9ybWF0YSBlIHBhc3NhIHBhcmEgbyBtb2RlbFxuICAgICAgbGV0IHZhbHVlID0gJGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIHZhbHVlID0gdGhpcy5jb250cm9sRm9ybWF0dGluZyh2YWx1ZSk7XG4gICAgICAkZXZlbnQudGFyZ2V0LnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV2ZXJ0UG9zaXRpb25zKGluaXRpYWxQb3NpdGlvbjogbnVtYmVyLCBmaW5hbFBvc2l0aW9uOiBudW1iZXIpIHtcbiAgICBpZiAoaW5pdGlhbFBvc2l0aW9uID4gZmluYWxQb3NpdGlvbikge1xuICAgICAgLy8gaW52ZXJ0ZSBvIGNvbnRyb2xlIGRlIHBvc2nDp8OjbyBjYXNvIG8gaW5pY2lhbCBlc3RlamEgbWFpb3IgcXVlIG8gZmluYWxcbiAgICAgIGNvbnN0IHRlbXBQb3NpdGlvbiA9IGluaXRpYWxQb3NpdGlvbjtcbiAgICAgIHRoaXMuaW5pdGlhbFBvc2l0aW9uID0gZmluYWxQb3NpdGlvbjtcbiAgICAgIHRoaXMuZmluYWxQb3NpdGlvbiA9IHRlbXBQb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyByZXNldGEgbyBjb250cm9sZSBkZSBwb3Npw6fDo29cbiAgcmVzZXRQb3NpdGlvbnMoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmluaXRpYWxQb3NpdGlvbiA9ICRldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgdGhpcy5maW5hbFBvc2l0aW9uID0gdGhpcy5pbml0aWFsUG9zaXRpb247XG4gIH1cblxuICAvLyBwb3NpY2lvbmEgbyBjdXJzb3IgZGUgYWNvcmRvIGNvbSBvIGNvbnRyb2xlIGRlIHBvc2nDp8Ojb1xuICBzZXRQb3NpdGlvbnMoJGV2ZW50OiBhbnkpIHtcbiAgICAkZXZlbnQudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKHRoaXMuaW5pdGlhbFBvc2l0aW9uLCB0aGlzLmZpbmFsUG9zaXRpb24pO1xuICB9XG5cbiAgLy8gbXVkYSBhIHBvc2nDp8OjbyBkbyBjdXJzb3IgZSBhdHVhbGl6YSBvIGNvbnRyb2xlIGRlIHBvc2nDp8Ojb1xuICBjaGFuZ2VQb3NpdGlvbigkZXZlbnQ6IGFueSwgdmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuaW5pdGlhbFBvc2l0aW9uID0gdGhpcy5pbml0aWFsUG9zaXRpb24gKyB2YWx1ZTtcbiAgICB0aGlzLmZpbmFsUG9zaXRpb24gPSB0aGlzLmZpbmFsUG9zaXRpb24gKyB2YWx1ZTtcbiAgICB0aGlzLnNldFBvc2l0aW9ucygkZXZlbnQpO1xuICB9XG5cbiAgZ2V0UG9zaXRpb24oJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmluaXRpYWxQb3NpdGlvbiA9ICRldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgdGhpcy5maW5hbFBvc2l0aW9uID0gJGV2ZW50LnRhcmdldC5zZWxlY3Rpb25FbmQ7XG4gICAgdGhpcy5zZXRQb3NpdGlvbnMoJGV2ZW50KTtcbiAgfVxuXG4gIC8vIE3DqXRvZG8gcmVzcG9uc8OhdmVsIHBvciBjb250cm9sYXIgYSBmb3JtYXRhw6fDo28gZSBhcGxpY2FyIHRvZGFzIGFzIG3DoXNjYXJhIHBvc3PDrXZlaXNcbiAgLy8gcXVhbmRvIGhvdXZlciB2YWxvcmVzIG9wY2lvbmFpcyAoPylcbiAgY29udHJvbEZvcm1hdHRpbmcodmFsdWU6IHN0cmluZykge1xuICAgIC8vIFNlIG8gdmFsb3IgZm9yIHZhemlvLCByZXRvcm5hIHZhemlvXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZVRvSW5wdXQgPSAnJztcbiAgICAgIHRoaXMudmFsdWVUb01vZGVsID0gJyc7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGxldCB2YWx1ZVByb2Nlc3NlZDtcbiAgICBsZXQgbWFza1RtcCA9IHRoaXMubWFzaztcblxuICAgIC8vIEFycmF5IHF1ZSBzZXLDoSB1c2FkbyBwYXJhIGFybWF6ZW5hciB0b2RhcyBhcyBtw6FzY2FyYXMgcG9zc8OtdmVpcyBwYXJhXG4gICAgLy8gcXVhbmRvIGhvdXZlciB1bSB2YWxvciBvcGNpb25hbCAoPylcbiAgICBjb25zdCBhcnJNYXNrczogQXJyYXk8YW55PiA9IFtdO1xuICAgIGxldCBjb250TWFza3MgPSAwO1xuXG4gICAgLy8gRW5xdWFudG8gaG91dmVyIGFsZ3VtIDk/IG5hIG3DoXNjYXJhXG4gICAgd2hpbGUgKHRoaXMuaGFzT3B0aW9uYWxOdW1iZXIobWFza1RtcCkpIHtcbiAgICAgIGFyck1hc2tzLnB1c2gobWFza1RtcCk7XG4gICAgICBtYXNrVG1wID0gdGhpcy5yZXBsYWNlT3B0aW9uYWxOdW1iZXIobWFza1RtcCk7XG4gICAgfVxuICAgIGFyck1hc2tzLnB1c2gobWFza1RtcCk7XG5cbiAgICAvLyBJbnZlcnRlIG8gYXJyYXlcbiAgICBhcnJNYXNrcy5yZXZlcnNlKCk7XG5cbiAgICAvLyBJbmZvcm1hIHF1ZSBhIGZvcm1hdGHDp8OjbyBhaW5kYSBuw6NvIGNoZWdvdSBhbyBmaW1cbiAgICB0aGlzLmZvcm1hdHRpbmdFbmRzID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoIXRoaXMuZm9ybWF0dGluZ0VuZHMpIHtcbiAgICAgIC8vIFNldGEgYSBmb3JtYXRhw6fDo28gY29tbyB0ZXJtaW5hZGFcbiAgICAgIC8vIEVudMOjbyBvIG3DqXRvZG8gZm9ybWF0VmFsdWUgaXLDoSBzZXRhciBjb21vIG7Do28gdGVybWluYWRvIGNhc28gaGFqYVxuICAgICAgdGhpcy5mb3JtYXR0aW5nRW5kcyA9IHRydWU7XG5cbiAgICAgIC8vIFNlIG7Do28gZXhpc3RlIG1haXMgbmVuaHVtYSBtw6FzY2FyYSBwb3Nzw612ZWwsIGVudMOjbyBlbmNlcnJhIGEgZm9ybWF0YcOnw6NvXG4gICAgICBpZiAoIWFyck1hc2tzW2NvbnRNYXNrc10pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIENoYW1hIGEgZm9ybWF0YcOnw6NvIHBhc3NhbmRvIGEgbcOhc2NhcmEgZSBvIHZhbG9yXG4gICAgICB2YWx1ZVByb2Nlc3NlZCA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUsIGFyck1hc2tzW2NvbnRNYXNrc10pO1xuICAgICAgY29udE1hc2tzKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlUHJvY2Vzc2VkO1xuICB9XG5cbiAgLy8gRnVuw6fDo28gcXVlIGZvcm1hdGEgYSBtw6FzY2FyYSBjb20gbyB2YWxvciBwYXNzYWRvXG4gIGZvcm1hdFZhbHVlKHZhbHVlOiBzdHJpbmcsIG1hc2s6IHN0cmluZykge1xuICAgIC8vIFJlbW92ZSBhcyBtYXJjYXMgZGUgdmFsb3Igb3BjaW9uYSAoPylcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9cXD8vZywgJycpO1xuXG4gICAgLy8gU3Vic3RpdHVpIHRvZG9zIG9zIGNhcmFjdGVyZXMgcXVlIG7Do28gc8OjbyBmaXhvcyBkYSBtw6FzY2FyYSBwb3IgX1xuICAgIGNvbnN0IGd1aWRlID0gbWFzay5yZXBsYWNlKHRoaXMubGlzdFZhbGlkS2V5cygpLCAnXycpO1xuXG4gICAgLy8gQ29udGFkb3IgdXNhZG8gcGFyYSBwZXJjb3JyZXIgbyBndWlkZVxuICAgIGxldCBjb250R3VpZGU6IG51bWJlciA9IDA7XG5cbiAgICAvLyBTdHJpbmcgZmluYWwgZm9ybWF0YWRhXG4gICAgbGV0IHZhbHVlUHJvY2Vzc2VkOiBzdHJpbmcgPSAnJztcblxuICAgIC8vIFJlbW92ZSBkbyB2YWxvciB0b2RvcyBvcyBjYXJhY3RlcmVzIGZpeG9zIGNvbW8gKCkvLStcbiAgICB2YWx1ZSA9IHRoaXMucmVtb3ZlRm9ybWF0dGluZ1ZhbHVlKHZhbHVlKTtcblxuICAgIC8vIFBlcmNvcnJlIHRvZG8gbyB2YWxvciBlIGNvbG9jYSBhIGZvcm1hdGHDp8OjbyBkZSBhY29yZG8gY29tIGEgbcOhc2NhcmFcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyVmFsdWUgPSB2YWx1ZVtpXTtcblxuICAgICAgLy8gU2UgbyBndWlkZSBhY2Fib3UsIHNldGEgYSBmb3JtYXRhw6fDo28gY29tbyBuw6NvIHRlcm1pbmFkYSBwYXJhIHF1ZSBvIG3DqXRvZG8gY29udHJvbEZvcm1hdHRpbmdcbiAgICAgIC8vIHRlbnRlIGZvcm1hdGFyIGNvbSBvdXRyYSBwb3Nzw612ZWwgbcOhc2NhcmFcbiAgICAgIGlmICghZ3VpZGVbY29udEd1aWRlXSkge1xuICAgICAgICB0aGlzLmZvcm1hdHRpbmdFbmRzID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBQZXJjb3JyZSBvIEd1aWRlIGVucXVhbnRvIHRlbSBjYXJhY3RlcmVzIGZpeG9zXG4gICAgICB3aGlsZSAodGhpcy5pc0ZpeGVkQ2hhcmFjdGVyR3VpZGUoZ3VpZGVbY29udEd1aWRlXSkgJiYgZ3VpZGVbY29udEd1aWRlXSkge1xuICAgICAgICB2YWx1ZVByb2Nlc3NlZCArPSBndWlkZVtjb250R3VpZGVdO1xuICAgICAgICBjb250R3VpZGUrKztcbiAgICAgIH1cblxuICAgICAgLy8gw4kgdW0gY2FyYWN0ZXIgdsOhbGlkbyBkZSBhY29yZG8gY29tIGEgbcOhc2NhcmFcbiAgICAgIGlmICh0aGlzLmlzS2V5VmFsaWRNYXNrKGNoYXJWYWx1ZSwgbWFza1tjb250R3VpZGVdKSkge1xuICAgICAgICB2YWx1ZVByb2Nlc3NlZCArPSBjaGFyVmFsdWU7XG4gICAgICAgIGNvbnRHdWlkZSsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2UgbsOjbyDDqSB1bSBjYXJhY3RlciB2w6FsaWRvLCBkZXZlIGludGVycm9tcGVyLlxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb3JtYXRNb2RlbCkge1xuICAgICAgdGhpcy52YWx1ZVRvSW5wdXQgPSB2YWx1ZVByb2Nlc3NlZDtcbiAgICAgIHRoaXMudmFsdWVUb01vZGVsID0gdmFsdWVQcm9jZXNzZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVUb0lucHV0ID0gdmFsdWVQcm9jZXNzZWQ7XG4gICAgICB0aGlzLnZhbHVlVG9Nb2RlbCA9IHRoaXMucmVtb3ZlRm9ybWF0dGluZ1ZhbHVlKHZhbHVlUHJvY2Vzc2VkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVQcm9jZXNzZWQ7XG4gIH1cblxuICAvLyB2ZXJpZmljYSBzZSB0ZW0gYWxndW0gY2FyYWN0ZXIgZGUgbWFzY2FyYSBhbnRlcyBkbyBjdXJzb3JcbiAgY2hlY2tNYXNrQmVmb3JlKCRldmVudDogYW55LCBwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuaXNGaXhlZENoYXJhY3Rlckd1aWRlKCRldmVudC50YXJnZXQudmFsdWUudG9TdHJpbmcoKS5jaGFyQXQodGhpcy5pbml0aWFsUG9zaXRpb24gLSAxKSkpIHtcbiAgICAgIHRoaXMuY2hhbmdlUG9zaXRpb24oJGV2ZW50LCBwb3NpdGlvbik7XG4gICAgICB0aGlzLmNoZWNrTWFza0JlZm9yZSgkZXZlbnQsIHBvc2l0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvLyB2ZXJpZmljYSBzZSB0ZW0gYWxndW0gY2FyYWN0ZXIgZGUgbWFzY2FyYSBkZXBvaXMgZG8gY3Vyc29yXG4gIGNoZWNrTWFza0FmdGVyKCRldmVudDogYW55LCBwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuaXNGaXhlZENoYXJhY3Rlckd1aWRlKCRldmVudC50YXJnZXQudmFsdWUudG9TdHJpbmcoKS5jaGFyQXQodGhpcy5pbml0aWFsUG9zaXRpb24pKSkge1xuICAgICAgdGhpcy5jaGFuZ2VQb3NpdGlvbigkZXZlbnQsIHBvc2l0aW9uKTtcbiAgICAgIHRoaXMuY2hlY2tNYXNrQWZ0ZXIoJGV2ZW50LCBwb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0b3JuYSBhIG3DoXNjYXJhIHNlbSB1bSB2YWxvciBvcGNpb25hbFxuICByZXBsYWNlT3B0aW9uYWxOdW1iZXIobWFzazogc3RyaW5nKSB7XG4gICAgbGV0IGkgPSA5O1xuICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgIGlmIChtYXNrLmluZGV4T2YoaSArICc/JykgPiAtMSkge1xuICAgICAgICByZXR1cm4gbWFzay5yZXBsYWNlKGkgKyAnPycsICcnKTtcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICB9XG4gICAgcmV0dXJuIG1hc2s7XG4gIH1cblxuICAvLyBWZXJpZmljYSBzZSBjb250w6ltIGNhcmFjdGVyZXMgcGVybWl0aWRvcyBzb21lbnRlIG5hIG3DoXNjYXJhIFxcLygpICstXG4gIGlzRml4ZWRDaGFyYWN0ZXJHdWlkZShrZXk6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnRlc3RSZWdleChrZXksIHRoaXMuZ2V0Rml4ZWRDaGFyYWN0ZXJHdWlkZSgpKTtcbiAgfVxuXG4gIC8vIFJldG9ybmEgY2FyYWN0ZXJlcyBwZXJtaXRpZG9zIHNvbWVudGUgbmEgbcOhc2NhcmEgXFwvKCkgKy1cbiAgZ2V0Rml4ZWRDaGFyYWN0ZXJHdWlkZSgpIHtcbiAgICByZXR1cm4gL1tcXFxcXFwvKCkgKy0uXFw6XS9nO1xuICB9XG5cbiAgLy8gQ2FyYWN0ZXJlcyBwZXJtaXRpZG9zIGRlIHNlcmVtIGRpZ2l0YWRvc1xuICBsaXN0VmFsaWRLZXlzKCkge1xuICAgIHJldHVybiAvW2EtekEtWjAtOV0vZztcbiAgfVxuXG4gIC8vIFNlIMOpIHVtIGTDrWdpdG8gdsOhbGlkb1xuICBpc0tleVZhbGlkKGtleUNvZGU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmlzS2V5Q29kZVZhbGlkKGtleUNvZGUpO1xuICB9XG5cbiAgLy8gVmVyaWZpY2Egc2UgYSB0ZWNsYSBkaWdpdGFkYSDDqSBwZXJtaXRpZGFcbiAgLy8gUGVybWl0ZSBhcGVuYXMgbsO6bWVyb3MsIGxldHJhcywgYmFja3NwYWNlIGUgZGVsXG4gIGlzS2V5Q29kZVZhbGlkKGtleUNvZGU6IG51bWJlcikge1xuICAgIHJldHVybiAoXG4gICAgICAoa2V5Q29kZSA+PSA0OCAmJiBrZXlDb2RlIDw9IDU3KSB8fFxuICAgICAgKGtleUNvZGUgPj0gNjUgJiYga2V5Q29kZSA8PSA5MCkgfHxcbiAgICAgIChrZXlDb2RlID49IDk2ICYmIGtleUNvZGUgPD0gMTA1KSB8fFxuICAgICAga2V5Q29kZSA9PT0gOCB8fFxuICAgICAga2V5Q29kZSA9PT0gOSB8fFxuICAgICAga2V5Q29kZSA9PT0gNDZcbiAgICApO1xuICB9XG5cbiAgLy8gU2UgZXN0w6EgZGUgYWNvcmRvIGNvbSBhIG3DoXNjYXJhXG4gIGlzS2V5VmFsaWRNYXNrKGtleTogYW55LCBrZXlNYXNrOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0UmVnZXgoa2V5LCB0aGlzLnJlcGxhY2VNYXNrKGtleU1hc2spKTtcbiAgfVxuXG4gIC8vIFJldG9ybmEgc2UgYSBjaGF2ZSBmb2kgYXByb3ZhZGEgcGVsYSBleHByZXNzw6NvIHJlZ3VsYXJcbiAgdGVzdFJlZ2V4KGtleTogYW55LCByZWdleDogYW55KSB7XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3Qoa2V5KTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBhIGZvcm1hdGFjw6NvIGRvIHZhbG9yXG4gIC8vIMOJIHBvc3PDrXZlbCBzZXIgbWVsaG9yYWRvIHBhcmEgcmVtb3ZlciBwb250dWFsbWVudGUgb3MgY2FyYWN0ZXJlcyBmaXhvcyBkZSBhY29yZG8gY29tIGEgbcOhc2NhcmFcbiAgcmVtb3ZlRm9ybWF0dGluZ1ZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSh0aGlzLmdldEZpeGVkQ2hhcmFjdGVyR3VpZGUoKSwgJycpO1xuICB9XG5cbiAgLy8gVmVyaWZpY2Egc2UgY29udMOpbSB2YWxvciBvcGNpb25hbCBuYSBtw6FzY2FyYSAwLTk/XG4gIGhhc09wdGlvbmFsTnVtYmVyKG1hc2s6IHN0cmluZykge1xuICAgIHJldHVybiBtYXNrLm1hdGNoKC9cXGRcXD8vZyk7XG4gIH1cblxuICAvLyBSZXRvcm5hIGEgZXhwcmVzc8OjbyByZWd1bGFyIGNvcnJlc3BvbmRlbnRlIGFvIGNvbWFuZG8gcGFzc2Fkb1xuICByZXBsYWNlTWFzayhjaGFyOiBzdHJpbmcpIHtcbiAgICBsZXQgcmVnZXggPSAvLi87XG4gICAgc3dpdGNoIChjaGFyKSB7XG4gICAgICBjYXNlICcwJzpcbiAgICAgICAgcmVnZXggPSAvWzBdLztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcxJzpcbiAgICAgICAgcmVnZXggPSAvWzAtMV0vO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzInOlxuICAgICAgICByZWdleCA9IC9bMC0yXS87XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnMyc6XG4gICAgICAgIHJlZ2V4ID0gL1swLTNdLztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc0JzpcbiAgICAgICAgcmVnZXggPSAvWzAtNF0vO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzUnOlxuICAgICAgICByZWdleCA9IC9bMC01XS87XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnNic6XG4gICAgICAgIHJlZ2V4ID0gL1swLTZdLztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc3JzpcbiAgICAgICAgcmVnZXggPSAvWzAtN10vO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzgnOlxuICAgICAgICByZWdleCA9IC9bMC04XS87XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnOSc6XG4gICAgICAgIHJlZ2V4ID0gL1swLTldLztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgcmVnZXggPSAvXFxzLztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdAJzpcbiAgICAgICAgcmVnZXggPSAvW2EtekEtWl0vO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3cnOlxuICAgICAgICByZWdleCA9IC9bYS16QS1aMC05XS87XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVnZXg7XG4gIH1cblxuICBnZXRSZWdleEZyb21NYXNrKG1hc2s6IHN0cmluZykge1xuICAgIGlmIChtYXNrKSB7XG4gICAgICBsZXQgcGF0dGVybjtcbiAgICAgIGlmICh0aGlzLmZvcm1hdE1vZGVsKSB7XG4gICAgICAgIHBhdHRlcm4gPSBtYXNrLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJyk7XG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcKy9nLCAnXFxcXCsnKTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvXFwuL2csICdcXFxcLicpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC8tL2csICctJyk7XG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcKC9nLCAnXFxcXCgnKTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvXFwpL2csICdcXFxcKScpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9cXC8vZywgJ1xcXFwvJyk7XG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xccy9nLCAnXFxcXHMnKTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvOi9nLCAnXFxcXDonKTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvXFxAKD8hXFxzKS9nLCAnXFxcXHcnKTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvXFxkL2csICdcXFxcdycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0dGVybiA9IG1hc2sucmVwbGFjZSgvXFxcXC9nLCAnJyk7XG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcKy9nLCAnJyk7XG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcLi9nLCAnJyk7XG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoLy0vZywgJycpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9cXCgvZywgJycpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9cXCkvZywgJycpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9cXC8vZywgJycpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC86L2csICcnKTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvXFxAL2csICdcXFxcdycpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9cXGQvZywgJ1xcXFx3Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGF0dGVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
463
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbWFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1pbnB1dC9wby1tYXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sTUFBTTtJQUNqQixJQUFJLEdBQVcsRUFBRSxDQUFDO0lBQ2xCLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0Isc0JBQXNCO0lBQ3RCLGVBQWUsR0FBVyxDQUFDLENBQUM7SUFDNUIsYUFBYSxHQUFXLENBQUMsQ0FBQztJQUUxQixPQUFPLEdBQVcsRUFBRSxDQUFDO0lBQ3JCLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsWUFBWSxDQUFTO0lBQ3JCLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksZUFBZSxDQUFDLEtBQWE7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQVksQ0FBUztJQUNyQixJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFJLGVBQWUsQ0FBQyxLQUFhO1FBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjLENBQVU7SUFFeEIsWUFBWSxJQUFZLEVBQUUsV0FBb0I7UUFDNUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFXO1FBQ2YsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDbEMsMkVBQTJFO1lBQzNFLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUU7Z0JBQ2xELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM3QjtZQUVELE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUV4QixRQUFRLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3RCLEtBQUssRUFBRSxFQUFFLGdCQUFnQjtvQkFDdkIsSUFBSSxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsRUFBRTt3QkFDNUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3FCQUN4QjtvQkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDL0IsTUFBTTtnQkFFUixLQUFLLEVBQUUsRUFBRSxlQUFlO29CQUN0QixJQUFJLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRTt3QkFDbEQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3FCQUN4QjtvQkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDL0IsTUFBTTtnQkFFUixLQUFLLEVBQUUsRUFBRSxNQUFNO29CQUNiLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQztvQkFDN0MsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO3dCQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUMzQjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7d0JBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQzNCO29CQUNELE1BQU07Z0JBRVIsS0FBSyxFQUFFLEVBQUUsT0FBTztvQkFDZCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7d0JBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQzt3QkFDMUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQzNCO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO3dCQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDM0I7b0JBQ0QsTUFBTTthQUNUO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsTUFBVztRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7U0FDM0M7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBVztRQUMzQixJQUFJLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDN0U7YUFBTTtZQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUM3RTtJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsTUFBVztRQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLEtBQUssR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN4QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO2dCQUN4QixPQUFPO2FBQ1I7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3RDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN6QjtZQUVELHVEQUF1RDtZQUN2RCx3Q0FBd0M7WUFDeEMsSUFDRSxNQUFNLENBQUMsT0FBTztnQkFDZCxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ3pDLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sQ0FBQyxPQUFPLEtBQUssRUFBRTtnQkFDckIsTUFBTSxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQ3BCO2dCQUNBLE9BQU87YUFDUjtZQUVELDBCQUEwQjtZQUMxQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNuQyxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFO29CQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7aUJBQzNDO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRS9ELFFBQVEsTUFBTSxDQUFDLE9BQU8sRUFBRTtvQkFDdEIsS0FBSyxDQUFDLEVBQUUsWUFBWTt3QkFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDekIsSUFBSSxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsRUFBRTs0QkFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7NEJBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7eUJBQzNCO3dCQUNELElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFOzRCQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNqQyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssQ0FBQyxFQUFFO2dDQUM5QixLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQ0FDbkYsS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQ0FDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dDQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dDQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzZCQUM3Qjt5QkFDRjs2QkFBTTs0QkFDTCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzt5QkFDL0M7d0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDMUIsTUFBTTtvQkFFUixLQUFLLEVBQUUsRUFBRSxTQUFTO3dCQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN6QixJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRTs0QkFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQy9CLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUNuRixLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7NEJBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7eUJBQzdCOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO3lCQUNoRDt3QkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUMxQixNQUFNO29CQUVSO3dCQUNFLDhCQUE4Qjt3QkFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDekIsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUM1RixLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7d0JBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDN0I7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWEsRUFBRSxNQUFXLEVBQUUsV0FBb0I7UUFDbEUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvRSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUU1QixJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELHNEQUFzRDtJQUN0RCxLQUFLLENBQUMsTUFBVztRQUNmLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQVc7UUFDZCw0Q0FBNEM7UUFDNUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2Isc0RBQXNEO1lBQ3RELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2hDLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxlQUF1QixFQUFFLGFBQXFCO1FBQzVELElBQUksZUFBZSxHQUFHLGFBQWEsRUFBRTtZQUNuQyx3RUFBd0U7WUFDeEUsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVELCtCQUErQjtJQUMvQixjQUFjLENBQUMsTUFBVztRQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBQ3BELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM1QyxDQUFDO0lBRUQseURBQXlEO0lBQ3pELFlBQVksQ0FBQyxNQUFXO1FBQ3RCLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsNERBQTREO0lBQzVELGNBQWMsQ0FBQyxNQUFXLEVBQUUsS0FBYTtRQUN2QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3BELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQVc7UUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUNwRCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELHFGQUFxRjtJQUNyRixzQ0FBc0M7SUFDdEMsaUJBQWlCLENBQUMsS0FBYTtRQUM3QixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxJQUFJLGNBQWMsQ0FBQztRQUNuQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRXhCLHVFQUF1RTtRQUN2RSxzQ0FBc0M7UUFDdEMsTUFBTSxRQUFRLEdBQWUsRUFBRSxDQUFDO1FBQ2hDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUVsQixzQ0FBc0M7UUFDdEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QixPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2QixrQkFBa0I7UUFDbEIsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRW5CLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUU1QixPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUMzQixtQ0FBbUM7WUFDbkMsb0VBQW9FO1lBQ3BFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBRTNCLDBFQUEwRTtZQUMxRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUN4QixNQUFNO2FBQ1A7WUFFRCxrREFBa0Q7WUFDbEQsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzlELFNBQVMsRUFBRSxDQUFDO1NBQ2I7UUFFRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsbURBQW1EO0lBQ25ELFdBQVcsQ0FBQyxLQUFhLEVBQUUsSUFBWTtRQUNyQyx3Q0FBd0M7UUFDeEMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRS9CLG1FQUFtRTtRQUNuRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV0RCx3Q0FBd0M7UUFDeEMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO1FBRTFCLHlCQUF5QjtRQUN6QixJQUFJLGNBQWMsR0FBVyxFQUFFLENBQUM7UUFFaEMsdURBQXVEO1FBQ3ZELEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUMsc0VBQXNFO1FBQ3RFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUzQiw4RkFBOEY7WUFDOUYsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixNQUFNO2FBQ1A7WUFFRCxpREFBaUQ7WUFDakQsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUN2RSxjQUFjLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNuQyxTQUFTLEVBQUUsQ0FBQzthQUNiO1lBRUQsK0NBQStDO1lBQy9DLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25ELGNBQWMsSUFBSSxTQUFTLENBQUM7Z0JBQzVCLFNBQVMsRUFBRSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsaURBQWlEO2dCQUNqRCxNQUFNO2FBQ1A7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQztZQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQztTQUNwQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUM7WUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDaEU7UUFFRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsNERBQTREO0lBQzVELGVBQWUsQ0FBQyxNQUFXLEVBQUUsUUFBZ0I7UUFDM0MsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMvRixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN4QztJQUNILENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsY0FBYyxDQUFDLE1BQVcsRUFBRSxRQUFnQjtRQUMxQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUU7WUFDM0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQsMENBQTBDO0lBQzFDLHFCQUFxQixDQUFDLElBQVk7UUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDOUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDbEM7WUFDRCxDQUFDLEVBQUUsQ0FBQztTQUNMO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLHFCQUFxQixDQUFDLEdBQVE7UUFDNUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCwyREFBMkQ7SUFDM0Qsc0JBQXNCO1FBQ3BCLE9BQU8saUJBQWlCLENBQUM7SUFDM0IsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxhQUFhO1FBQ1gsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixVQUFVLENBQUMsT0FBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxrREFBa0Q7SUFDbEQsY0FBYyxDQUFDLE9BQWU7UUFDNUIsT0FBTyxDQUNMLENBQUMsT0FBTyxJQUFJLEVBQUUsSUFBSSxPQUFPLElBQUksRUFBRSxDQUFDO1lBQ2hDLENBQUMsT0FBTyxJQUFJLEVBQUUsSUFBSSxPQUFPLElBQUksRUFBRSxDQUFDO1lBQ2hDLENBQUMsT0FBTyxJQUFJLEVBQUUsSUFBSSxPQUFPLElBQUksR0FBRyxDQUFDO1lBQ2pDLE9BQU8sS0FBSyxDQUFDO1lBQ2IsT0FBTyxLQUFLLENBQUM7WUFDYixPQUFPLEtBQUssRUFBRSxDQUNmLENBQUM7SUFDSixDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLGNBQWMsQ0FBQyxHQUFRLEVBQUUsT0FBWTtRQUNuQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQseURBQXlEO0lBQ3pELFNBQVMsQ0FBQyxHQUFRLEVBQUUsS0FBVTtRQUM1QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELCtCQUErQjtJQUMvQixpR0FBaUc7SUFDakcscUJBQXFCLENBQUMsS0FBYTtRQUNqQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxpQkFBaUIsQ0FBQyxJQUFZO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNoQixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssR0FBRztnQkFDTixLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNkLE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sS0FBSyxHQUFHLE9BQU8sQ0FBQztnQkFDaEIsTUFBTTtZQUNSLEtBQUssR0FBRztnQkFDTixLQUFLLEdBQUcsT0FBTyxDQUFDO2dCQUNoQixNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLEtBQUssR0FBRyxPQUFPLENBQUM7Z0JBQ2hCLE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sS0FBSyxHQUFHLE9BQU8sQ0FBQztnQkFDaEIsTUFBTTtZQUNSLEtBQUssR0FBRztnQkFDTixLQUFLLEdBQUcsT0FBTyxDQUFDO2dCQUNoQixNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLEtBQUssR0FBRyxPQUFPLENBQUM7Z0JBQ2hCLE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sS0FBSyxHQUFHLE9BQU8sQ0FBQztnQkFDaEIsTUFBTTtZQUNSLEtBQUssR0FBRztnQkFDTixLQUFLLEdBQUcsT0FBTyxDQUFDO2dCQUNoQixNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLEtBQUssR0FBRyxPQUFPLENBQUM7Z0JBQ2hCLE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDYixNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLEtBQUssR0FBRyxVQUFVLENBQUM7Z0JBQ25CLE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sS0FBSyxHQUFHLGFBQWEsQ0FBQztnQkFDdEIsTUFBTTtTQUNUO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBWTtRQUMzQixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksT0FBTyxDQUFDO1lBQ1osSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDeEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDeEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDeEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzlDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztpQkFBTTtnQkFDTCxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUNELE9BQU8sT0FBTyxDQUFDO1NBQ2hCO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJhIHVzYXIgbyBwby1tYXNrIMOpIHByZWNpc28gaW5zdGFuY2lhciBlc3RhIGNsYXNzZSBwYXNzYW5kbyBhIG3DoXNjYXJhIGNvbW9cbiAqIHByaW1laXJvIHBhcsOibWV0cm8sIGUgbm8gc2VndW5kbyBwYXLDom1ldHJvLCBkZXZlIHNlIGluZm9ybWFkbyB0cnVlLCBjYXNvIHF1ZWlyYVxuICogcXVlIG8gbW9kZWwgc2VqYSBmb3JtYXRhZG8gb3UgZmFsc2UgcGFyYSBvIHF1ZSBvIG1vZGVsIHNlamEgbGltcG8uXG4gKi9cbmV4cG9ydCBjbGFzcyBQb01hc2sge1xuICBtYXNrOiBzdHJpbmcgPSAnJztcbiAgZm9ybWF0TW9kZWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gY29udHJvbGUgZGUgcG9zacOnw6NvXG4gIGluaXRpYWxQb3NpdGlvbjogbnVtYmVyID0gMDtcbiAgZmluYWxQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICBwYXR0ZXJuOiBzdHJpbmcgPSAnJztcbiAgZ2V0IGdldFBhdHRlcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXR0ZXJuO1xuICB9XG5cbiAgdmFsdWVUb0lucHV0OiBzdHJpbmc7XG4gIGdldCBnZXRWYWx1ZVRvSW5wdXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVRvSW5wdXQ7XG4gIH1cbiAgc2V0IHNldFZhbHVlVG9JbnB1dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZVRvSW5wdXQgPSB2YWx1ZTtcbiAgfVxuXG4gIHZhbHVlVG9Nb2RlbDogc3RyaW5nO1xuICBnZXQgZ2V0VmFsdWVUb01vZGVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVUb01vZGVsO1xuICB9XG4gIHNldCBzZXRWYWx1ZVRvTW9kZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWVUb01vZGVsID0gdmFsdWU7XG4gIH1cblxuICBmb3JtYXR0aW5nRW5kczogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihtYXNrOiBzdHJpbmcsIGZvcm1hdE1vZGVsOiBib29sZWFuKSB7XG4gICAgdGhpcy5tYXNrID0gbWFzaztcbiAgICB0aGlzLmZvcm1hdE1vZGVsID0gZm9ybWF0TW9kZWw7XG4gICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5nZXRSZWdleEZyb21NYXNrKG1hc2spO1xuICB9XG5cbiAga2V5dXAoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5tYXNrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9ICRldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAvLyBmb3JtYXRhIG8gdmFsb3IgcXVhbmRvIGZvciBjb2xhZG8gY29tIGNvbnRyb2wgKyB2IGUgcmVwb3NpY2lvbmEgbyBjdXJzb3JcbiAgICAgIGlmICgkZXZlbnQua2V5Q29kZSA9PT0gMTcgfHwgJGV2ZW50LmtleUNvZGUgPT09IDkxKSB7XG4gICAgICAgICRldmVudC50YXJnZXQudmFsdWUgPSB0aGlzLmNvbnRyb2xGb3JtYXR0aW5nKHZhbHVlKTtcbiAgICAgICAgdGhpcy5yZXNldFBvc2l0aW9ucygkZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgc3dpdGNoICgkZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIDM3OiAvLyBzZXRhIGVzcXVlcmRhXG4gICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbFBvc2l0aW9uID4gMCkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsUG9zaXRpb24tLTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbk5vdFNoaWZ0S2V5KCRldmVudCk7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZSgkZXZlbnQpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzk6IC8vIHNldGEgZGlyZWl0YVxuICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxQb3NpdGlvbiA8IHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxQb3NpdGlvbisrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uTm90U2hpZnRLZXkoJGV2ZW50KTtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKCRldmVudCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzNTogLy8gZW5kXG4gICAgICAgICAgdGhpcy5maW5hbFBvc2l0aW9uID0gdmFsdWUudG9TdHJpbmcoKS5sZW5ndGg7XG4gICAgICAgICAgaWYgKCRldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbnMoJGV2ZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsUG9zaXRpb24gPSB0aGlzLmZpbmFsUG9zaXRpb247XG4gICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9ucygkZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM2OiAvLyBIT01FXG4gICAgICAgICAgaWYgKCRldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5maW5hbFBvc2l0aW9uID0gdGhpcy5pbml0aWFsUG9zaXRpb247XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxQb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9ucygkZXZlbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxQb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICB0aGlzLmZpbmFsUG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbnMoJGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0UG9zaXRpb25Ob3RTaGlmdEtleSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICghJGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLmZpbmFsUG9zaXRpb24gPSB0aGlzLmluaXRpYWxQb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICBzZXRTZWxlY3Rpb25SYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmluaXRpYWxQb3NpdGlvbiA+IHRoaXMuZmluYWxQb3NpdGlvbikge1xuICAgICAgJGV2ZW50LnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZT8uKHRoaXMuZmluYWxQb3NpdGlvbiwgdGhpcy5pbml0aWFsUG9zaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAkZXZlbnQudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlPy4odGhpcy5pbml0aWFsUG9zaXRpb24sIHRoaXMuZmluYWxQb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAga2V5ZG93bigkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm1hc2spIHtcbiAgICAgIGxldCB2YWx1ZTogc3RyaW5nID0gJGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmICgkZXZlbnQua2V5Q29kZSA9PT0gOSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghJGV2ZW50LmN0cmxLZXkgJiYgISRldmVudC5tZXRhS2V5KSB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBOw6NvIGZheiBuYWRhIHF1YW5kbyBmb3IgZGlnaXRhZG8gQ1RSTCBvdSBDT01NQU5EIGUgVlxuICAgICAgLy8gSsOhIGVzdMOhIHNlbmRvIHRyYXRhZG8gbm8gZXZlbnRvIGtleXVwXG4gICAgICBpZiAoXG4gICAgICAgICRldmVudC5jdHJsS2V5IHx8XG4gICAgICAgICgkZXZlbnQubWV0YUtleSAmJiAkZXZlbnQua2V5Q29kZSAhPT0gODYpIHx8XG4gICAgICAgICgkZXZlbnQua2V5Q29kZSA+PSAzNyAmJiAkZXZlbnQua2V5Q29kZSA8PSA0MCkgfHxcbiAgICAgICAgJGV2ZW50LmtleUNvZGUgPT09IDE2IHx8XG4gICAgICAgICRldmVudC5rZXlDb2RlID09PSA5XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGEgYSB0ZWNsYSBkaWdpdGFkYVxuICAgICAgaWYgKHRoaXMuaXNLZXlWYWxpZCgkZXZlbnQua2V5Q29kZSkpIHtcbiAgICAgICAgaWYgKHRoaXMuZmluYWxQb3NpdGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuZmluYWxQb3NpdGlvbiA9IHRoaXMuaW5pdGlhbFBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmV2ZXJ0UG9zaXRpb25zKHRoaXMuaW5pdGlhbFBvc2l0aW9uLCB0aGlzLmZpbmFsUG9zaXRpb24pO1xuXG4gICAgICAgIHN3aXRjaCAoJGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgICBjYXNlIDg6IC8vIGJhY2tzcGFjZVxuICAgICAgICAgICAgdGhpcy5nZXRQb3NpdGlvbigkZXZlbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbFBvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgICB0aGlzLmluaXRpYWxQb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb25zKCRldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsUG9zaXRpb24gPT09IHRoaXMuZmluYWxQb3NpdGlvbikge1xuICAgICAgICAgICAgICB0aGlzLmNoZWNrTWFza0JlZm9yZSgkZXZlbnQsIC0xKTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbFBvc2l0aW9uICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCB0aGlzLmluaXRpYWxQb3NpdGlvbiAtIDEpICsgdmFsdWUuc2xpY2UodGhpcy5maW5hbFBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY29udHJvbEZvcm1hdHRpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBvc2l0aW9uKCRldmVudCwgLTEpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tNYXNrQmVmb3JlKCRldmVudCwgLTEpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb25zKCRldmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFBvc2l0aW9ucygkZXZlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmNsZWFyUmFuZ2VTZWxlY3Rpb24odmFsdWUsICRldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9ucygkZXZlbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDQ2OiAvLyBkZWxldGVcbiAgICAgICAgICAgIHRoaXMuZ2V0UG9zaXRpb24oJGV2ZW50KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxQb3NpdGlvbiA9PT0gdGhpcy5maW5hbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tNYXNrQWZ0ZXIoJGV2ZW50LCAxKTtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCB0aGlzLmluaXRpYWxQb3NpdGlvbikgKyB2YWx1ZS5zbGljZSh0aGlzLmZpbmFsUG9zaXRpb24gKyAxKTtcbiAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmNvbnRyb2xGb3JtYXR0aW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgJGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9ucygkZXZlbnQpO1xuICAgICAgICAgICAgICB0aGlzLnJlc2V0UG9zaXRpb25zKCRldmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmNsZWFyUmFuZ2VTZWxlY3Rpb24odmFsdWUsICRldmVudCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbnMoJGV2ZW50KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIHF1YWxxdWVyIG91dHJhIHRlY2xhIHbDoWxpZGFcbiAgICAgICAgICAgIHRoaXMuZ2V0UG9zaXRpb24oJGV2ZW50KTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgdGhpcy5pbml0aWFsUG9zaXRpb24pICsgJGV2ZW50LmtleSArIHZhbHVlLnNsaWNlKHRoaXMuZmluYWxQb3NpdGlvbik7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY29udHJvbEZvcm1hdHRpbmcodmFsdWUpO1xuICAgICAgICAgICAgJGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VQb3NpdGlvbigkZXZlbnQsIDEpO1xuICAgICAgICAgICAgdGhpcy5jaGVja01hc2tCZWZvcmUoJGV2ZW50LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb25zKCRldmVudCk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UG9zaXRpb25zKCRldmVudCk7XG4gICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9ucygkZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xlYXJSYW5nZVNlbGVjdGlvbih2YWx1ZTogc3RyaW5nLCAkZXZlbnQ6IGFueSwgaXNCYWNrc3BhY2U6IGJvb2xlYW4pIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIHRoaXMuaW5pdGlhbFBvc2l0aW9uKSArIHZhbHVlLnNsaWNlKHRoaXMuZmluYWxQb3NpdGlvbik7XG4gICAgdmFsdWUgPSB0aGlzLmNvbnRyb2xGb3JtYXR0aW5nKHZhbHVlKTtcbiAgICAkZXZlbnQudGFyZ2V0LnZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoaXNCYWNrc3BhY2UpIHtcbiAgICAgIHRoaXMuY2hlY2tNYXNrQmVmb3JlKCRldmVudCwgLTEpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0UG9zaXRpb25zKCRldmVudCk7XG4gICAgdGhpcy5yZXNldFBvc2l0aW9ucygkZXZlbnQpO1xuICB9XG5cbiAgLy8gcGFzc2EgYSBwb3Npw6fDo28gZG8gY2xpY2sgcGFyYSBvIGNvbnRyb2xlIGRlIHBvc2nDp8Ojb1xuICBjbGljaygkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaW5pdGlhbFBvc2l0aW9uID0gJGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcbiAgICB0aGlzLmZpbmFsUG9zaXRpb24gPSAkZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZDtcbiAgfVxuXG4gIGJsdXIoJGV2ZW50OiBhbnkpIHtcbiAgICAvLyBTZSBob3V2ZXIgYWxndW0gdmFsb3IgZGVmaW5pZG8gbmEgbcOhc2NhcmFcbiAgICBpZiAodGhpcy5tYXNrKSB7XG4gICAgICAvLyBwZWdhIG8gdmFsb3IgZG8gY2FtcG8sIGZvcm1hdGEgZSBwYXNzYSBwYXJhIG8gbW9kZWxcbiAgICAgIGxldCB2YWx1ZSA9ICRldmVudC50YXJnZXQudmFsdWU7XG4gICAgICB2YWx1ZSA9IHRoaXMuY29udHJvbEZvcm1hdHRpbmcodmFsdWUpO1xuICAgICAgJGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldmVydFBvc2l0aW9ucyhpbml0aWFsUG9zaXRpb246IG51bWJlciwgZmluYWxQb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgaWYgKGluaXRpYWxQb3NpdGlvbiA+IGZpbmFsUG9zaXRpb24pIHtcbiAgICAgIC8vIGludmVydGUgbyBjb250cm9sZSBkZSBwb3Npw6fDo28gY2FzbyBvIGluaWNpYWwgZXN0ZWphIG1haW9yIHF1ZSBvIGZpbmFsXG4gICAgICBjb25zdCB0ZW1wUG9zaXRpb24gPSBpbml0aWFsUG9zaXRpb247XG4gICAgICB0aGlzLmluaXRpYWxQb3NpdGlvbiA9IGZpbmFsUG9zaXRpb247XG4gICAgICB0aGlzLmZpbmFsUG9zaXRpb24gPSB0ZW1wUG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgLy8gcmVzZXRhIG8gY29udHJvbGUgZGUgcG9zacOnw6NvXG4gIHJlc2V0UG9zaXRpb25zKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5pbml0aWFsUG9zaXRpb24gPSAkZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuICAgIHRoaXMuZmluYWxQb3NpdGlvbiA9IHRoaXMuaW5pdGlhbFBvc2l0aW9uO1xuICB9XG5cbiAgLy8gcG9zaWNpb25hIG8gY3Vyc29yIGRlIGFjb3JkbyBjb20gbyBjb250cm9sZSBkZSBwb3Npw6fDo29cbiAgc2V0UG9zaXRpb25zKCRldmVudDogYW55KSB7XG4gICAgJGV2ZW50LnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZT8uKHRoaXMuaW5pdGlhbFBvc2l0aW9uLCB0aGlzLmZpbmFsUG9zaXRpb24pO1xuICB9XG5cbiAgLy8gbXVkYSBhIHBvc2nDp8OjbyBkbyBjdXJzb3IgZSBhdHVhbGl6YSBvIGNvbnRyb2xlIGRlIHBvc2nDp8Ojb1xuICBjaGFuZ2VQb3NpdGlvbigkZXZlbnQ6IGFueSwgdmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuaW5pdGlhbFBvc2l0aW9uID0gdGhpcy5pbml0aWFsUG9zaXRpb24gKyB2YWx1ZTtcbiAgICB0aGlzLmZpbmFsUG9zaXRpb24gPSB0aGlzLmZpbmFsUG9zaXRpb24gKyB2YWx1ZTtcbiAgICB0aGlzLnNldFBvc2l0aW9ucygkZXZlbnQpO1xuICB9XG5cbiAgZ2V0UG9zaXRpb24oJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmluaXRpYWxQb3NpdGlvbiA9ICRldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgdGhpcy5maW5hbFBvc2l0aW9uID0gJGV2ZW50LnRhcmdldC5zZWxlY3Rpb25FbmQ7XG4gICAgdGhpcy5zZXRQb3NpdGlvbnMoJGV2ZW50KTtcbiAgfVxuXG4gIC8vIE3DqXRvZG8gcmVzcG9uc8OhdmVsIHBvciBjb250cm9sYXIgYSBmb3JtYXRhw6fDo28gZSBhcGxpY2FyIHRvZGFzIGFzIG3DoXNjYXJhIHBvc3PDrXZlaXNcbiAgLy8gcXVhbmRvIGhvdXZlciB2YWxvcmVzIG9wY2lvbmFpcyAoPylcbiAgY29udHJvbEZvcm1hdHRpbmcodmFsdWU6IHN0cmluZykge1xuICAgIC8vIFNlIG8gdmFsb3IgZm9yIHZhemlvLCByZXRvcm5hIHZhemlvXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZVRvSW5wdXQgPSAnJztcbiAgICAgIHRoaXMudmFsdWVUb01vZGVsID0gJyc7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGxldCB2YWx1ZVByb2Nlc3NlZDtcbiAgICBsZXQgbWFza1RtcCA9IHRoaXMubWFzaztcblxuICAgIC8vIEFycmF5IHF1ZSBzZXLDoSB1c2FkbyBwYXJhIGFybWF6ZW5hciB0b2RhcyBhcyBtw6FzY2FyYXMgcG9zc8OtdmVpcyBwYXJhXG4gICAgLy8gcXVhbmRvIGhvdXZlciB1bSB2YWxvciBvcGNpb25hbCAoPylcbiAgICBjb25zdCBhcnJNYXNrczogQXJyYXk8YW55PiA9IFtdO1xuICAgIGxldCBjb250TWFza3MgPSAwO1xuXG4gICAgLy8gRW5xdWFudG8gaG91dmVyIGFsZ3VtIDk/IG5hIG3DoXNjYXJhXG4gICAgd2hpbGUgKHRoaXMuaGFzT3B0aW9uYWxOdW1iZXIobWFza1RtcCkpIHtcbiAgICAgIGFyck1hc2tzLnB1c2gobWFza1RtcCk7XG4gICAgICBtYXNrVG1wID0gdGhpcy5yZXBsYWNlT3B0aW9uYWxOdW1iZXIobWFza1RtcCk7XG4gICAgfVxuICAgIGFyck1hc2tzLnB1c2gobWFza1RtcCk7XG5cbiAgICAvLyBJbnZlcnRlIG8gYXJyYXlcbiAgICBhcnJNYXNrcy5yZXZlcnNlKCk7XG5cbiAgICAvLyBJbmZvcm1hIHF1ZSBhIGZvcm1hdGHDp8OjbyBhaW5kYSBuw6NvIGNoZWdvdSBhbyBmaW1cbiAgICB0aGlzLmZvcm1hdHRpbmdFbmRzID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoIXRoaXMuZm9ybWF0dGluZ0VuZHMpIHtcbiAgICAgIC8vIFNldGEgYSBmb3JtYXRhw6fDo28gY29tbyB0ZXJtaW5hZGFcbiAgICAgIC8vIEVudMOjbyBvIG3DqXRvZG8gZm9ybWF0VmFsdWUgaXLDoSBzZXRhciBjb21vIG7Do28gdGVybWluYWRvIGNhc28gaGFqYVxuICAgICAgdGhpcy5mb3JtYXR0aW5nRW5kcyA9IHRydWU7XG5cbiAgICAgIC8vIFNlIG7Do28gZXhpc3RlIG1haXMgbmVuaHVtYSBtw6FzY2FyYSBwb3Nzw612ZWwsIGVudMOjbyBlbmNlcnJhIGEgZm9ybWF0YcOnw6NvXG4gICAgICBpZiAoIWFyck1hc2tzW2NvbnRNYXNrc10pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIENoYW1hIGEgZm9ybWF0YcOnw6NvIHBhc3NhbmRvIGEgbcOhc2NhcmEgZSBvIHZhbG9yXG4gICAgICB2YWx1ZVByb2Nlc3NlZCA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUsIGFyck1hc2tzW2NvbnRNYXNrc10pO1xuICAgICAgY29udE1hc2tzKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlUHJvY2Vzc2VkO1xuICB9XG5cbiAgLy8gRnVuw6fDo28gcXVlIGZvcm1hdGEgYSBtw6FzY2FyYSBjb20gbyB2YWxvciBwYXNzYWRvXG4gIGZvcm1hdFZhbHVlKHZhbHVlOiBzdHJpbmcsIG1hc2s6IHN0cmluZykge1xuICAgIC8vIFJlbW92ZSBhcyBtYXJjYXMgZGUgdmFsb3Igb3BjaW9uYSAoPylcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9cXD8vZywgJycpO1xuXG4gICAgLy8gU3Vic3RpdHVpIHRvZG9zIG9zIGNhcmFjdGVyZXMgcXVlIG7Do28gc8OjbyBmaXhvcyBkYSBtw6FzY2FyYSBwb3IgX1xuICAgIGNvbnN0IGd1aWRlID0gbWFzay5yZXBsYWNlKHRoaXMubGlzdFZhbGlkS2V5cygpLCAnXycpO1xuXG4gICAgLy8gQ29udGFkb3IgdXNhZG8gcGFyYSBwZXJjb3JyZXIgbyBndWlkZVxuICAgIGxldCBjb250R3VpZGU6IG51bWJlciA9IDA7XG5cbiAgICAvLyBTdHJpbmcgZmluYWwgZm9ybWF0YWRhXG4gICAgbGV0IHZhbHVlUHJvY2Vzc2VkOiBzdHJpbmcgPSAnJztcblxuICAgIC8vIFJlbW92ZSBkbyB2YWxvciB0b2RvcyBvcyBjYXJhY3RlcmVzIGZpeG9zIGNvbW8gKCkvLStcbiAgICB2YWx1ZSA9IHRoaXMucmVtb3ZlRm9ybWF0dGluZ1ZhbHVlKHZhbHVlKTtcblxuICAgIC8vIFBlcmNvcnJlIHRvZG8gbyB2YWxvciBlIGNvbG9jYSBhIGZvcm1hdGHDp8OjbyBkZSBhY29yZG8gY29tIGEgbcOhc2NhcmFcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyVmFsdWUgPSB2YWx1ZVtpXTtcblxuICAgICAgLy8gU2UgbyBndWlkZSBhY2Fib3UsIHNldGEgYSBmb3JtYXRhw6fDo28gY29tbyBuw6NvIHRlcm1pbmFkYSBwYXJhIHF1ZSBvIG3DqXRvZG8gY29udHJvbEZvcm1hdHRpbmdcbiAgICAgIC8vIHRlbnRlIGZvcm1hdGFyIGNvbSBvdXRyYSBwb3Nzw612ZWwgbcOhc2NhcmFcbiAgICAgIGlmICghZ3VpZGVbY29udEd1aWRlXSkge1xuICAgICAgICB0aGlzLmZvcm1hdHRpbmdFbmRzID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBQZXJjb3JyZSBvIEd1aWRlIGVucXVhbnRvIHRlbSBjYXJhY3RlcmVzIGZpeG9zXG4gICAgICB3aGlsZSAodGhpcy5pc0ZpeGVkQ2hhcmFjdGVyR3VpZGUoZ3VpZGVbY29udEd1aWRlXSkgJiYgZ3VpZGVbY29udEd1aWRlXSkge1xuICAgICAgICB2YWx1ZVByb2Nlc3NlZCArPSBndWlkZVtjb250R3VpZGVdO1xuICAgICAgICBjb250R3VpZGUrKztcbiAgICAgIH1cblxuICAgICAgLy8gw4kgdW0gY2FyYWN0ZXIgdsOhbGlkbyBkZSBhY29yZG8gY29tIGEgbcOhc2NhcmFcbiAgICAgIGlmICh0aGlzLmlzS2V5VmFsaWRNYXNrKGNoYXJWYWx1ZSwgbWFza1tjb250R3VpZGVdKSkge1xuICAgICAgICB2YWx1ZVByb2Nlc3NlZCArPSBjaGFyVmFsdWU7XG4gICAgICAgIGNvbnRHdWlkZSsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2UgbsOjbyDDqSB1bSBjYXJhY3RlciB2w6FsaWRvLCBkZXZlIGludGVycm9tcGVyLlxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb3JtYXRNb2RlbCkge1xuICAgICAgdGhpcy52YWx1ZVRvSW5wdXQgPSB2YWx1ZVByb2Nlc3NlZDtcbiAgICAgIHRoaXMudmFsdWVUb01vZGVsID0gdmFsdWVQcm9jZXNzZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVUb0lucHV0ID0gdmFsdWVQcm9jZXNzZWQ7XG4gICAgICB0aGlzLnZhbHVlVG9Nb2RlbCA9IHRoaXMucmVtb3ZlRm9ybWF0dGluZ1ZhbHVlKHZhbHVlUHJvY2Vzc2VkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVQcm9jZXNzZWQ7XG4gIH1cblxuICAvLyB2ZXJpZmljYSBzZSB0ZW0gYWxndW0gY2FyYWN0ZXIgZGUgbWFzY2FyYSBhbnRlcyBkbyBjdXJzb3JcbiAgY2hlY2tNYXNrQmVmb3JlKCRldmVudDogYW55LCBwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuaXNGaXhlZENoYXJhY3Rlckd1aWRlKCRldmVudC50YXJnZXQudmFsdWUudG9TdHJpbmcoKS5jaGFyQXQodGhpcy5pbml0aWFsUG9zaXRpb24gLSAxKSkpIHtcbiAgICAgIHRoaXMuY2hhbmdlUG9zaXRpb24oJGV2ZW50LCBwb3NpdGlvbik7XG4gICAgICB0aGlzLmNoZWNrTWFza0JlZm9yZSgkZXZlbnQsIHBvc2l0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvLyB2ZXJpZmljYSBzZSB0ZW0gYWxndW0gY2FyYWN0ZXIgZGUgbWFzY2FyYSBkZXBvaXMgZG8gY3Vyc29yXG4gIGNoZWNrTWFza0FmdGVyKCRldmVudDogYW55LCBwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuaXNGaXhlZENoYXJhY3Rlckd1aWRlKCRldmVudC50YXJnZXQudmFsdWUudG9TdHJpbmcoKS5jaGFyQXQodGhpcy5pbml0aWFsUG9zaXRpb24pKSkge1xuICAgICAgdGhpcy5jaGFuZ2VQb3NpdGlvbigkZXZlbnQsIHBvc2l0aW9uKTtcbiAgICAgIHRoaXMuY2hlY2tNYXNrQWZ0ZXIoJGV2ZW50LCBwb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0b3JuYSBhIG3DoXNjYXJhIHNlbSB1bSB2YWxvciBvcGNpb25hbFxuICByZXBsYWNlT3B0aW9uYWxOdW1iZXIobWFzazogc3RyaW5nKSB7XG4gICAgbGV0IGkgPSA5O1xuICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgIGlmIChtYXNrLmluZGV4T2YoaSArICc/JykgPiAtMSkge1xuICAgICAgICByZXR1cm4gbWFzay5yZXBsYWNlKGkgKyAnPycsICcnKTtcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICB9XG4gICAgcmV0dXJuIG1hc2s7XG4gIH1cblxuICAvLyBWZXJpZmljYSBzZSBjb250w6ltIGNhcmFjdGVyZXMgcGVybWl0aWRvcyBzb21lbnRlIG5hIG3DoXNjYXJhIFxcLygpICstXG4gIGlzRml4ZWRDaGFyYWN0ZXJHdWlkZShrZXk6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnRlc3RSZWdleChrZXksIHRoaXMuZ2V0Rml4ZWRDaGFyYWN0ZXJHdWlkZSgpKTtcbiAgfVxuXG4gIC8vIFJldG9ybmEgY2FyYWN0ZXJlcyBwZXJtaXRpZG9zIHNvbWVudGUgbmEgbcOhc2NhcmEgXFwvKCkgKy1cbiAgZ2V0Rml4ZWRDaGFyYWN0ZXJHdWlkZSgpIHtcbiAgICByZXR1cm4gL1tcXFxcXFwvKCkgKy0uXFw6XS9nO1xuICB9XG5cbiAgLy8gQ2FyYWN0ZXJlcyBwZXJtaXRpZG9zIGRlIHNlcmVtIGRpZ2l0YWRvc1xuICBsaXN0VmFsaWRLZXlzKCkge1xuICAgIHJldHVybiAvW2EtekEtWjAtOV0vZztcbiAgfVxuXG4gIC8vIFNlIMOpIHVtIGTDrWdpdG8gdsOhbGlkb1xuICBpc0tleVZhbGlkKGtleUNvZGU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmlzS2V5Q29kZVZhbGlkKGtleUNvZGUpO1xuICB9XG5cbiAgLy8gVmVyaWZpY2Egc2UgYSB0ZWNsYSBkaWdpdGFkYSDDqSBwZXJtaXRpZGFcbiAgLy8gUGVybWl0ZSBhcGVuYXMgbsO6bWVyb3MsIGxldHJhcywgYmFja3NwYWNlIGUgZGVsXG4gIGlzS2V5Q29kZVZhbGlkKGtleUNvZGU6IG51bWJlcikge1xuICAgIHJldHVybiAoXG4gICAgICAoa2V5Q29kZSA+PSA0OCAmJiBrZXlDb2RlIDw9IDU3KSB8fFxuICAgICAgKGtleUNvZGUgPj0gNjUgJiYga2V5Q29kZSA8PSA5MCkgfHxcbiAgICAgIChrZXlDb2RlID49IDk2ICYmIGtleUNvZGUgPD0gMTA1KSB8fFxuICAgICAga2V5Q29kZSA9PT0gOCB8fFxuICAgICAga2V5Q29kZSA9PT0gOSB8fFxuICAgICAga2V5Q29kZSA9PT0gNDZcbiAgICApO1xuICB9XG5cbiAgLy8gU2UgZXN0w6EgZGUgYWNvcmRvIGNvbSBhIG3DoXNjYXJhXG4gIGlzS2V5VmFsaWRNYXNrKGtleTogYW55LCBrZXlNYXNrOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0UmVnZXgoa2V5LCB0aGlzLnJlcGxhY2VNYXNrKGtleU1hc2spKTtcbiAgfVxuXG4gIC8vIFJldG9ybmEgc2UgYSBjaGF2ZSBmb2kgYXByb3ZhZGEgcGVsYSBleHByZXNzw6NvIHJlZ3VsYXJcbiAgdGVzdFJlZ2V4KGtleTogYW55LCByZWdleDogYW55KSB7XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3Qoa2V5KTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBhIGZvcm1hdGFjw6NvIGRvIHZhbG9yXG4gIC8vIMOJIHBvc3PDrXZlbCBzZXIgbWVsaG9yYWRvIHBhcmEgcmVtb3ZlciBwb250dWFsbWVudGUgb3MgY2FyYWN0ZXJlcyBmaXhvcyBkZSBhY29yZG8gY29tIGEgbcOhc2NhcmFcbiAgcmVtb3ZlRm9ybWF0dGluZ1ZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSh0aGlzLmdldEZpeGVkQ2hhcmFjdGVyR3VpZGUoKSwgJycpO1xuICB9XG5cbiAgLy8gVmVyaWZpY2Egc2UgY29udMOpbSB2YWxvciBvcGNpb25hbCBuYSBtw6FzY2FyYSAwLTk/XG4gIGhhc09wdGlvbmFsTnVtYmVyKG1hc2s6IHN0cmluZykge1xuICAgIHJldHVybiBtYXNrLm1hdGNoKC9cXGRcXD8vZyk7XG4gIH1cblxuICAvLyBSZXRvcm5hIGEgZXhwcmVzc8OjbyByZWd1bGFyIGNvcnJlc3BvbmRlbnRlIGFvIGNvbWFuZG8gcGFzc2Fkb1xuICByZXBsYWNlTWFzayhjaGFyOiBzdHJpbmcpIHtcbiAgICBsZXQgcmVnZXggPSAvLi87XG4gICAgc3dpdGNoIChjaGFyKSB7XG4gICAgICBjYXNlICcwJzpcbiAgICAgICAgcmVnZXggPSAvWzBdLztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcxJzpcbiAgICAgICAgcmVnZXggPSAvWzAtMV0vO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzInOlxuICAgICAgICByZWdleCA9IC9bMC0yXS87XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnMyc6XG4gICAgICAgIHJlZ2V4ID0gL1swLTNdLztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc0JzpcbiAgICAgICAgcmVnZXggPSAvWzAtNF0vO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzUnOlxuICAgICAgICByZWdleCA9IC9bMC01XS87XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnNic6XG4gICAgICAgIHJlZ2V4ID0gL1swLTZdLztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc3JzpcbiAgICAgICAgcmVnZXggPSAvWzAtN10vO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzgnOlxuICAgICAgICByZWdleCA9IC9bMC04XS87XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnOSc6XG4gICAgICAgIHJlZ2V4ID0gL1swLTldLztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgcmVnZXggPSAvXFxzLztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdAJzpcbiAgICAgICAgcmVnZXggPSAvW2EtekEtWl0vO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3cnOlxuICAgICAgICByZWdleCA9IC9bYS16QS1aMC05XS87XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVnZXg7XG4gIH1cblxuICBnZXRSZWdleEZyb21NYXNrKG1hc2s6IHN0cmluZykge1xuICAgIGlmIChtYXNrKSB7XG4gICAgICBsZXQgcGF0dGVybjtcbiAgICAgIGlmICh0aGlzLmZvcm1hdE1vZGVsKSB7XG4gICAgICAgIHBhdHRlcm4gPSBtYXNrLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJyk7XG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcKy9nLCAnXFxcXCsnKTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvXFwuL2csICdcXFxcLicpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC8tL2csICctJyk7XG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcKC9nLCAnXFxcXCgnKTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvXFwpL2csICdcXFxcKScpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9cXC8vZywgJ1xcXFwvJyk7XG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xccy9nLCAnXFxcXHMnKTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvOi9nLCAnXFxcXDonKTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvXFxAKD8hXFxzKS9nLCAnXFxcXHcnKTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvXFxkL2csICdcXFxcdycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0dGVybiA9IG1hc2sucmVwbGFjZSgvXFxcXC9nLCAnJyk7XG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcKy9nLCAnJyk7XG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcLi9nLCAnJyk7XG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoLy0vZywgJycpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9cXCgvZywgJycpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9cXCkvZywgJycpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9cXC8vZywgJycpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC86L2csICcnKTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvXFxAL2csICdcXFxcdycpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9cXGQvZywgJ1xcXFx3Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGF0dGVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -57,7 +57,13 @@ export function isLanguage(value) {
|
|
|
57
57
|
}
|
|
58
58
|
/* istanbul ignore next */
|
|
59
59
|
export function reloadCurrentPage() {
|
|
60
|
-
window.location.
|
|
60
|
+
const currentUrl = window.location.origin + window.location.pathname;
|
|
61
|
+
if (isValidUrl(currentUrl)) {
|
|
62
|
+
window.location.assign(currentUrl);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function isValidUrl(url, location = window.location) {
|
|
66
|
+
return url === location.origin + location.pathname;
|
|
61
67
|
}
|
|
62
68
|
export function convertToBoolean(val) {
|
|
63
69
|
if (typeof val === 'string') {
|
|
@@ -577,4 +583,4 @@ export function sortArrayOfObjects(items, key, isAscendingOrder) {
|
|
|
577
583
|
});
|
|
578
584
|
}
|
|
579
585
|
}
|
|
580
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvdXRpbHMvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRTFGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQWEsRUFBRSxRQUFRLEdBQUcsQ0FBQztJQUNyRCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDeEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsUUFBUSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBRXZDLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNwRyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLCtDQUErQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLFNB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RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDWCxTQUFTO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLENBQUMsRUFBRSxDQUFDO1NBQ0w7S0FDRjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsSUFBZ0I7SUFDNUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDcEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtZQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQixDQUFDLEVBQUUsQ0FBQztTQUNMO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLDJDQUEyQyxDQUFDLElBQWdCLEVBQUUsUUFBUTtJQUNwRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNqRSxJQUFJLENB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O2dCQUN6RSxPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO2FBQzFEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7S0FDSjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwb0xvY2FsZXMsIHBvTG9jYWxlRGVmYXVsdCB9IGZyb20gJy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLmNvbnN0YW50JztcblxuLyoqXG4gKiBDb252ZXJ0ZSBlIGZvcm1hdGEgb3MgYnl0ZXMgZW0gZm9ybWF0byBtYWlzIGxlZ8OtdmVsIHBhcmEgbyB1c3XDoXJpby5cbiAqXG4gKiBQb3IgZXhlbXBsbzpcbiAqIC0gMzE0NTcyODAgZW0gMzAgTUIuXG4gKiAtIDIxNDc0ODM2NDgwIGVtIDIwIEdCLlxuICogLSAxMi41NjY2NjY2IGVtIDEyLjU3IEJ5dGVzIChkdWFzIGNhc2FzIGRlY2ltYWlzKS5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMge251bWJlcn0gVmFsb3IgZW0gYnl0ZXNcbiAqIEBwYXJhbSBkZWNpbWFscyB7bnVtYmVyfSBRdWFudGlkYWRlIGRlIGNhc2FzIGRlY2ltYWlzIHF1ZSB0ZXLDoSBhcMOzcyBhIGNvbnZlcnPDo28uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCeXRlcyhieXRlczogbnVtYmVyLCBkZWNpbWFscyA9IDIpOiBzdHJpbmcge1xuICBpZiAoIWJ5dGVzKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG11bHRpcGxpZXIgPSAxMDI0O1xuICBjb25zdCBzaXplcyA9IFsnQnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcbiAgY29uc3QgcmVzdWx0ID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhtdWx0aXBsaWVyKSk7XG4gIGRlY2ltYWxzID0gZGVjaW1hbHMgPCAwID8gMCA6IGRlY2ltYWxzO1xuXG4gIHJldHVybiBgJHtwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KG11bHRpcGxpZXIsIHJlc3VsdCkpLnRvRml4ZWQoZGVjaW1hbHMpKX0gJHtzaXplc1tyZXN1bHRdfWA7XG59XG5cbi8qKlxuICogUmV0b3JuYSBvIGlkaW9tYSBhdHVhbCBkbyBuYXZlZ2Fkb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyb3dzZXJMYW5ndWFnZSgpOiBzdHJpbmcge1xuICAvLyBuYXZpZ2F0b3IudXNlckxhbmd1YWdlIGlzIHRoZSB2YWx1ZSBmb3IgSUUxMFxuICBjb25zdCBsYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZSB8fCBuYXZpZ2F0b3JbJ3VzZXJMYW5ndWFnZSddO1xuICBjb25zdCBzaG9ydExhbmd1YWdlID0gZ2V0U2hvcnRMYW5ndWFnZShsYW5ndWFnZSk7XG5cbiAgcmV0dXJuIHBvTG9jYWxlcy5pbmNsdWRlcyhzaG9ydExhbmd1YWdlKSA/IGxhbmd1YWdlIDogcG9Mb2NhbGVEZWZhdWx0O1xufVxuXG4vKipcbiAqIFJldG9ybmEgbyBpZGlvbWEgZG8gbmF2ZWdhZG9yLCBjb20gc29tZW50ZSBhcyBkdWFzIHByaW1laXJhcyBsZXRyYXMuIFBvciBleGVtcGxvOiBcInB0XCIgb3UgXCJlc1wiLlxuICpcbiAqIENhc28gbyB2YWxvciByZXRvcm5hZG8gcGVsbyBuYXZlZ2Fkb3IgbsOjbyBlc3RpdmVyIGRlbnRybyBkb3MgaWRpb21hcyBzdXBvcnRhZG9zIHBlbG8gUE8sXG4gKiBzZXLDoSByZXRvcm5hZG8gYSBsaW5ndWFnZW0gcGFkcsOjbyAocG9Mb2NhbGVEZWZhdWx0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNob3J0QnJvd3Nlckxhbmd1YWdlKCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRTaG9ydExhbmd1YWdlKGdldEJyb3dzZXJMYW5ndWFnZSgpKTtcbn1cblxuLyoqXG4gKiBSZXRvcm5hIG8gaWRpb21hIGNvbSBzb21lbnRlIGEgYWJyZXZpYcOnw6NvIGRvIGlkaW9tYSAoZHVhcyBwcmltZWlyYXMgbGV0cmFzKS5cbiAqIFBvciBleGVtcGxvOiBcInB0XCIgb3UgXCJlc1wiLlxuICpcbiAqIEBwYXJhbSBsYW5ndWFnZSB7c3RyaW5nfSBsaW5ndWFnZW0uXG4gKlxuICogQHJldHVybnMgc2lnbGEgZG8gaWRpb21hIHBhZHLDo28ge3N0cmluZ30uXG4gKlxuICogQGRlZmF1bHQgcHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNob3J0TGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAobGFuZ3VhZ2UgfHwgcG9Mb2NhbGVEZWZhdWx0KS50b0xvd2VyQ2FzZSgpLnN1YnN0cmluZygwLCAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGFuZ3VhZ2UodmFsdWUpIHtcbiAgY29uc3QgbGFuZ3VhZ2VSZWdleCA9IG5ldyBSZWdFeHAoJ15bYS16XXsyfSgtW2Etel17Mn0pPyQnLCAnaScpO1xuXG4gIHJldHVybiBsYW5ndWFnZVJlZ2V4LnRlc3QodmFsdWUpO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZEN1cnJlbnRQYWdlKCkge1xuICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGxvY2F0aW9uLmhyZWYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvQm9vbGVhbih2YWw6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSB2YWwudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgcmV0dXJuIHZhbCA9PT0gJ3RydWUnIHx8IHZhbCA9PT0gJ29uJyB8fCB2YWwgPT09ICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbCA9PT0gMTtcbiAgfVxuXG4gIHJldHVybiAhIXZhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0ludCh2YWx1ZTogYW55LCB2YWx1ZURlZmF1bHQ/OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCB2YWxpZE51bWJlciA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIGNvbnN0IHZhbGlkRGVmYXVsdFZhbHVlID0gcGFyc2VJbnQodmFsdWVEZWZhdWx0LCAxMCk7XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHZhbGlkRGVmYXVsdFZhbHVlIHx8IHZhbGlkRGVmYXVsdFZhbHVlID09PSAwID8gdmFsaWREZWZhdWx0VmFsdWUgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHZhbGlkTnVtYmVyIHx8IHZhbGlkTnVtYmVyID09PSAwID8gdmFsaWROdW1iZXIgOiBkZWZhdWx0VmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVvZihvYmplY3Q6IGFueSwgdHlwZTogYW55KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSB0eXBlO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gZm4gRnVuw6fDo28gcXVlIHNlcsOhIGV4ZWN1dGFkYSBkZW50cm8gZG8gY29udGV4dG8uIFBvZGVuZG8gc2VyIG8gbm9tZSBkYSBmdW7Dp8Ojb1xuICogb3UgYSByZWZlcsOqbmNpYSBkYSBtZXNtYS5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCBDb250ZXh0byBkbyBxdWFsIGEgZnVuw6fDo28gc2Vyw6EgZXhlY3V0YWRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsbEZ1bmN0aW9uKGZuOiBhbnksIGNvbnRleHQ6IGFueSwgcGFyYW0/KTogdm9pZCB7XG4gIGlmIChpc1R5cGVvZihmbiwgJ2Z1bmN0aW9uJykpIHtcbiAgICBmbi5jYWxsKGNvbnRleHQsIHBhcmFtKTtcbiAgfSBlbHNlIHtcbiAgICBjb250ZXh0W2ZuXShwYXJhbSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRJc29Ub0RhdGUodmFsdWU6IHN0cmluZywgc3RhcnQ6IGJvb2xlYW4sIGVuZDogYm9vbGVhbikge1xuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBkYXkgPSBwYXJzZUludCh2YWx1ZS5zdWJzdHJpbmcoOCwgMTApLCAxMCk7XG4gICAgY29uc3QgbW9udGggPSBwYXJzZUludCh2YWx1ZS5zdWJzdHJpbmcoNSwgNyksIDEwKTtcbiAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQodmFsdWUuc3Vic3RyaW5nKDAsIDQpLCAxMCk7XG5cbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSwgMCwgMCwgMCk7XG5cbiAgICAgIHNldFllYXJGcm9tMFRvMTAwKGRhdGUsIHllYXIpO1xuXG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9IGVsc2UgaWYgKGVuZCkge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5LCAyMywgNTksIDU5KTtcblxuICAgICAgc2V0WWVhckZyb20wVG8xMDAoZGF0ZSwgeWVhcik7XG5cbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERhdGVUb0lTT0RhdGUoZGF0ZTogRGF0ZSkge1xuICBpZiAoZGF0ZSkge1xuICAgIGNvbnN0IGdldE1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTtcbiAgICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKSA8IDEwID8gJzAnICsgZGF0ZS5nZXREYXRlKCkgOiBkYXRlLmdldERhdGUoKTtcbiAgICBjb25zdCBtb250aCA9IGdldE1vbnRoIDwgMTAgPyAnMCcgKyBnZXRNb250aCA6IGdldE1vbnRoO1xuICAgIGNvbnN0IHllYXIgPSBmb3JtYXRZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG5cbiAgICByZXR1cm4geWVhciArICctJyArIG1vbnRoICsgJy0nICsgZGF5O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGF0ZVRvSVNPRXh0ZW5kZWQoZGF0ZTogRGF0ZSwgdGltZT86IHN0cmluZykge1xuICBpZiAoZGF0ZSkge1xuICAgIGNvbnN0IGdldE1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTtcbiAgICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKSA8IDEwID8gJzAnICsgZGF0ZS5nZXREYXRlKCkgOiBkYXRlLmdldERhdGUoKTtcbiAgICBjb25zdCBtb250aCA9IGdldE1vbnRoIDwgMTAgPyAnMCcgKyBnZXRNb250aCA6IGdldE1vbnRoO1xuICAgIGNvbnN0IHllYXIgPSBmb3JtYXRZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG5cbiAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZS50b1N0cmluZygpO1xuXG4gICAgaWYgKHRpbWUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB5ZWFyICsgJy0nICsgbW9udGggKyAnLScgKyBkYXkgKyB0aW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB5ZWFyICtcbiAgICAgICAgJy0nICtcbiAgICAgICAgbW9udGggK1xuICAgICAgICAnLScgK1xuICAgICAgICBkYXkgK1xuICAgICAgICAnVCcgK1xuICAgICAgICBkYXRlU3RyaW5nLnN1YnN0cmluZygxNiwgMjQpICtcbiAgICAgICAgZGF0ZVN0cmluZy5zdWJzdHJpbmcoMjgsIDMxKSArXG4gICAgICAgICc6JyArXG4gICAgICAgIGRhdGVTdHJpbmcuc3Vic3RyaW5nKDMxLCAzMylcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogVHJhbnNmb3JtYSBvIGFubyBlbSB1bWEgc3RyaW5nIG5vIGZvcm1hdG8geXl5eSBlIGNhc28gbyBhbm8gc2VqYSBtZW5vciBxdWUgMTAwMCBwcmVlbmNoZSBjb20gemVyb3MgYSBlc3F1ZXJkYS5cbiAqXG4gKiBAcGFyYW0geWVhciBBbm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFllYXIoeWVhcjogbnVtYmVyKSB7XG4gIGlmICh5ZWFyID49IDEwMDApIHtcbiAgICByZXR1cm4geWVhci50b1N0cmluZygpO1xuICB9XG5cbiAgaWYgKHllYXIgPiA5OSAmJiB5ZWFyIDwgMTAwMCkge1xuICAgIHJldHVybiBgMCR7eWVhcn1gO1xuICB9XG5cbiAgaWYgKHllYXIgPiA5ICYmIHllYXIgPCAxMDApIHtcbiAgICByZXR1cm4gYDAwJHt5ZWFyfWA7XG4gIH1cblxuICBpZiAoeWVhciA+PSAwICYmIHllYXIgPCAxMCkge1xuICAgIHJldHVybiBgMDAwJHt5ZWFyfWA7XG4gIH1cbn1cblxuLy8gVmVyaWZpY2Egc2UgbyBuYXZlZ2Fkb3IgZW0gcXVlIGVzdMOhIHNlbmRvIHVzYWRvIMOpIEludGVybmV0IEV4cGxvcmVyIG91IEVkZ2VcbmV4cG9ydCBmdW5jdGlvbiBpc0lFT3JFZGdlKCkge1xuICBjb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcblxuICByZXR1cm4gL21zaWVcXHN8dHJpZGVudFxcL3xlZGdlXFwvL2kudGVzdCh1c2VyQWdlbnQpO1xufVxuXG4vLyBWZXJpZmljYSBzZSBvIG5hdmVnYWRvciBlbSBxdWUgZXN0w6Egc2VuZG8gdXNhZG8gw6kgSW50ZXJuZXQgRXhwbG9yZXJcbmV4cG9ydCBmdW5jdGlvbiBpc0lFKCkge1xuICBjb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcblxuICByZXR1cm4gL21zaWVcXHN8dHJpZGVudC9pLnRlc3QodXNlckFnZW50KTtcbn1cblxuLy8gVmVyaWZpY2Egc2UgbyBuYXZlZ2Fkb3IgZW0gcXVlIGVzdMOhIHNlbmRvIHVzYWRvIMOpIEZpcmVmb3hcbmV4cG9ydCBmdW5jdGlvbiBpc0ZpcmVmb3goKSB7XG4gIGNvbnN0IHVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuXG4gIHJldHVybiB1c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgPiAtMTtcbn1cblxuLy8gVmVyaWZpY2Egc2UgbyBuYXZlZ2Fkb3IgZW0gcXVlIGVzdMOhIHNlbmRvIHVzYWRvIMOpIFNhZmFyaVxuZXhwb3J0IGZ1bmN0aW9uIGlzU2FmYXJpKCkge1xuICBjb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcblxuICByZXR1cm4gL14oPyEuKmNocm9tZSkuKnNhZmFyaS4qJC8udGVzdCh1c2VyQWdlbnQudG9Mb2NhbGVMb3dlckNhc2UoKSk7XG59XG5cbi8vIFZlcmlmaWNhIHF1YWwgbyBkaXNwb3NpdGl2byBxdWUgZXN0w6Egc2VuZG8gdXNhZG9cbmV4cG9ydCBmdW5jdGlvbiBpc01vYmlsZSgpIHtcbiAgY29uc3QgdXNlckFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgcmV0dXJuIHVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8V2luZG93cyBQaG9uZS9pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXF1YWxzKHZhbHVlLCBjb21wYXJlZFZhbHVlKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KGNvbXBhcmVkVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNLZXlDb2RlRW50ZXIoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZXZlbnQua2V5Q29kZSA9PT0gMTMgfHwgZXZlbnQud2hpY2ggPT09IDEzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNLZXlDb2RlU3BhY2UoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZXZlbnQua2V5Q29kZSA9PT0gMzIgfHwgZXZlbnQud2hpY2ggPT09IDMyO1xufVxuXG4vKipcbiAqIENhc28gbyBhbm8gb3JpZ2luYWwgZGEgZGF0YSBzZWphIGVudHJlIDAgZSAxMDAgYXRyaWJ1aSBlc3NlIHZhbG9yIGFvIGFubywgcG9pcyBvIGBuZXcgRGF0ZWAgZG8gamF2YXNjcmlwdCB0cmFuc2Zvcm1hIG8gYW5vIHBhcmEgMTkwWC5cbiAqXG4gKiBAcGFyYW0gZGF0ZSBEYXRhXG4gKiBAcGFyYW0geWVhciBBbm8gb3JpZ2luYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFllYXJGcm9tMFRvMTAwKGRhdGU6IERhdGUsIHllYXI6IG51bWJlcikge1xuICBpZiAoeWVhciA+PSAwICYmIHllYXIgPCAxMDApIHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKHllYXIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0T3B0aW9uc0J5UHJvcGVydHkob3B0aW9uczogQXJyYXk8YW55PiwgcHJvcGVydHk6IHN0cmluZykge1xuICBvcHRpb25zLnNvcnQoKG9wdGlvbkEsIG9wdGlvbkIpID0+IHtcbiAgICBvcHRpb25BID0gb3B0aW9uQVtwcm9wZXJ0eV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgIG9wdGlvbkIgPSBvcHRpb25CW3Byb3BlcnR5XS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAob3B0aW9uQSA8IG9wdGlvbkIpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbkEgPiBvcHRpb25CKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xufVxuXG4vKipcbiAqIE9yZGVuYSBvIGNhbXBvcyBiYXNlYWRvIG5vIHZhbG9yIGRhIHByb3ByaWVkYWRlIGBvcmRlcmAuXG4gKlxuICogU8OzIHNlcsOjbyBhY2VpdG9zIHZhbG9yZXMgY29tIG7Dum1lcm9zIGludGVpcm9zIG1haW9yZXMgZG8gcXVlIHplcm8gcGFyYSBhIG9yZGVuYcOnw6NvLlxuICpcbiAqIENhbXBvcyBzZW0gYG9yZGVyYCBvdSBjb20gdmFsb3JlcyBuZWdhdGl2b3MsIHplcmFkb3Mgb3UgaW52w6FsaWRvc1xuICogcmVjZWJlcsOjbyBvIHZhbG9yIGRlZmF1bHQgZSBzZWd1aXLDo28gbyBwb3NpY2lvbmFtZW50byBkZW50cm8gZG9cbiAqIGFycmF5LlxuICpcbiAqIEBwYXJhbSBmaWVsZHMgY2FtcG8gcXVlIHNlIGRlc2VqYSBvcmRlbmFyLlxuICogQHBhcmFtIGRlZmF1bHRPcmRlcmluZyB2YWxvciBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgbWFudGVyIG5hIHBvc2nDp8OjbyBkbyBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRGaWVsZHMoZmllbGRzID0gW10sIGRlZmF1bHRPcmRlcmluZyA9IC0xKSB7XG4gIGNvbnN0IHJlc3VsdENsYXNzaWZpY2F0aW9uID0geyBmaWVsZEFDb21lc0ZpcnN0OiAtMSwgZmllbGRBQ29tZXNBZnRlcjogMSwga2VlcFBvc2l0aW9uczogMCB9O1xuXG4gIGNvbnN0IGlzT3JkZXJWYWxpZCA9IChvcmRlcjogbnVtYmVyKSA9PiBpc1R5cGVvZihvcmRlciwgJ251bWJlcicpICYmIG9yZGVyID4gMDtcbiAgY29uc3QgYXBwbHlEZWZhdWx0T3JkZXJpbmcgPSAob3JkZXI6IG51bWJlcikgPT4gKGlzT3JkZXJWYWxpZChvcmRlcikgPyBvcmRlciA6IGRlZmF1bHRPcmRlcmluZyk7XG5cbiAgcmV0dXJuIGZpZWxkcy5zb3J0KChmaWVsZEEsIGZpZWxkQikgPT4ge1xuICAgIGNvbnN0IG9yZGVyQSA9IGFwcGx5RGVmYXVsdE9yZGVyaW5nKGZpZWxkQS5vcmRlcik7XG4gICAgY29uc3Qgb3JkZXJCID0gYXBwbHlEZWZhdWx0T3JkZXJpbmcoZmllbGRCLm9yZGVyKTtcblxuICAgIGlmIChvcmRlckEgPT09IG9yZGVyQikge1xuICAgICAgcmV0dXJuIHJlc3VsdENsYXNzaWZpY2F0aW9uLmtlZXBQb3NpdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKG9yZGVyQSA9PT0gZGVmYXVsdE9yZGVyaW5nKSB7XG4gICAgICByZXR1cm4gcmVzdWx0Q2xhc3NpZmljYXRpb24uZmllbGRBQ29tZXNBZnRlcjtcbiAgICB9XG5cbiAgICBpZiAob3JkZXJCID09PSBkZWZhdWx0T3JkZXJpbmcpIHtcbiAgICAgIHJldHVybiByZXN1bHRDbGFzc2lmaWNhdGlvbi5maWVsZEFDb21lc0ZpcnN0O1xuICAgIH1cblxuICAgIHJldHVybiBvcmRlckEgLSBvcmRlckI7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRHVwbGljYXRlZE9wdGlvbnMobGlzdDogQXJyYXk8YW55Pikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGxpc3QuZmluZEluZGV4KG9wID0+IG9wLnZhbHVlID09PSBsaXN0W2ldLnZhbHVlKSAhPT0gaSkge1xuICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICBpLS07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEdXBsaWNhdGVkT3B0aW9uc1dpdGhGaWVsZFZhbHVlKGxpc3Q6IEFycmF5PGFueT4sIG5ld1ZhbHVlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobGlzdC5maW5kSW5kZXgob3AgPT4gb3BbbmV3VmFsdWVdID09PSBsaXN0W2ldW25ld1ZhbHVlXSkgIT09IGkpIHtcbiAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgaS0tO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbE9wdGlvbnMobGlzdDogQXJyYXk8YW55Pikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobGlzdFtpXS52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGxpc3RbaV0udmFsdWUgPT09IG51bGwpIHtcbiAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgaS0tO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbE9wdGlvbnNXaXRoRmllbGRWYWx1ZShsaXN0OiBBcnJheTxhbnk+LCBuZXdWYWx1ZSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobGlzdFtpXVtuZXdWYWx1ZV0gPT09IHVuZGVmaW5lZCB8fCBsaXN0W2ldW25ld1ZhbHVlXSA9PT0gbnVsbCkge1xuICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICBpLS07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJykgfHwgdmFsdWUgPT09IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHRlcm5hbExpbmsodXJsKTogYm9vbGVhbiB7XG4gIHJldHVybiB1cmwgPyB1cmwuc3RhcnRzV2l0aCgnaHR0cCcpIDogZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuRXh0ZXJuYWxMaW5rKHVybCk6IHZvaWQge1xuICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1hdHRlZExpbmsobGluazogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGZvcm1hdHRlZExpbmsgPSAnJztcbiAgLy8gUmV0aXJhIHRvZG9zIG9zIHBvbnRvcyBubyBjb21lw6dvIGRhIFVSTC5cbiAgaWYgKGxpbmspIHtcbiAgICBmb3JtYXR0ZWRMaW5rID0gbGluay5yZXBsYWNlKC9eKFxcLikrL2csICcnKTtcbiAgfVxuICAvLyBWZXJpZmljYSBzZSBmb2kgdXRpbGl6YWRvIHVtYSByb3RhIHF1ZSBuw6NvIGNvbWVjZSBjb20gYmFycmEuXG4gIGlmICghZm9ybWF0dGVkTGluay5zdGFydHNXaXRoKCcvJykpIHtcbiAgICBmb3JtYXR0ZWRMaW5rID0gJy8nLmNvbmNhdChmb3JtYXR0ZWRMaW5rKTtcbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkTGluaztcbn1cblxuLyoqXG4gKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwb3Igb3JkZW5hciBkb2lzIHZhbG9yZXMuXG4gKlxuICogQHBhcmFtIGxlZnRTaWRlIFByaW1laXJvIHZhbG9yIGEgc2VyIGNvbXBhcmFkby5cbiAqIEBwYXJhbSByaWdodFNpZGUgU2VndW5kbyB2YWxvciBhIHNlciBjb21wYXJhZG8uXG4gKiBAcGFyYW0gYXNjZW5kaW5nIERldGVybWluYSBzZSBzZXLDoSBlbSBvcmRlbSBhc2NlbmRlbnRlIG91IGRlc2NlbmRlbnRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFZhbHVlcyhsZWZ0U2lkZTogc3RyaW5nIHwgRGF0ZSwgcmlnaHRTaWRlOiBzdHJpbmcgfCBEYXRlLCBhc2NlbmRpbmc6IGJvb2xlYW4gPSB0cnVlKTogbnVtYmVyIHtcbiAgY29uc3QgbGVmdCA9IGlzVHlwZW9mKGxlZnRTaWRlLCAnc3RyaW5nJykgPyAobGVmdFNpZGUgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpIDogbGVmdFNpZGU7XG4gIGNvbnN0IHJpZ2h0ID0gaXNUeXBlb2YocmlnaHRTaWRlLCAnc3RyaW5nJykgPyAocmlnaHRTaWRlIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKSA6IHJpZ2h0U2lkZTtcblxuICBjb25zdCBsZWZ0SXNJbnZhbGlkID0gbGVmdCA9PT0gbnVsbCB8fCBsZWZ0ID09PSB1bmRlZmluZWQgfHwgTnVtYmVyLmlzTmFOKGxlZnQpO1xuICBjb25zdCByaWdodElzSW52YWxpZCA9IHJpZ2h0ID09PSBudWxsIHx8IHJpZ2h0ID09PSB1bmRlZmluZWQgfHwgTnVtYmVyLmlzTmFOKHJpZ2h0KTtcblxuICBpZiAoYXNjZW5kaW5nKSB7XG4gICAgaWYgKGxlZnQgPCByaWdodCB8fCBsZWZ0SXNJbnZhbGlkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfSBlbHNlIGlmIChsZWZ0ID4gcmlnaHQgfHwgcmlnaHRJc0ludmFsaWQpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhc2NlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgaWYgKGxlZnQgPCByaWdodCB8fCBsZWZ0SXNJbnZhbGlkKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGxlZnQgPiByaWdodCB8fCByaWdodElzSW52YWxpZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRGF0ZVJhbmdlKGRhdGU6IERhdGUsIGRhdGVTdGFydDogRGF0ZSwgZGF0ZUVuZDogRGF0ZSkge1xuICBpZiAoZGF0ZVN0YXJ0ICYmIGRhdGVFbmQpIHtcbiAgICByZXR1cm4gZGF0ZSA+PSBkYXRlU3RhcnQgJiYgZGF0ZSA8PSBkYXRlRW5kO1xuICB9IGVsc2UgaWYgKGRhdGVTdGFydCAmJiAhZGF0ZUVuZCkge1xuICAgIHJldHVybiBkYXRlID49IGRhdGVTdGFydDtcbiAgfSBlbHNlIGlmICghZGF0ZVN0YXJ0ICYmIGRhdGVFbmQpIHtcbiAgICByZXR1cm4gZGF0ZSA8PSBkYXRlRW5kO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1dWlkKCkge1xuICBmdW5jdGlvbiBoZXg0KCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKVxuICAgICAgLnRvU3RyaW5nKDE2KVxuICAgICAgLnN1YnN0cmluZygxKTtcbiAgfVxuXG4gIHJldHVybiBoZXg0KCkgKyBoZXg0KCkgKyAnLScgKyBoZXg0KCkgKyAnLScgKyBoZXg0KCkgKyAnLScgKyBoZXg0KCkgKyAnLScgKyBoZXg0KCkgKyBoZXg0KCkgKyBoZXg0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3RleHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHt0ZXh0LnNsaWNlKDEpfWA7XG59XG5cbi8qKlxuICogTWFwZWlhIHVtIG5vdm8gYXJyYXkgYXBlbmFzIGNvbSBhcyBwcm9wcmllZGFkZXMgZGVmaW5pZGFzIHBlbG8gZGVzZW52b2x2ZWRvciBiYXNlYWRvIGVtIHVtIGFycmF5IGRlXG4gKiBvcmlnZW0uXG4gKlxuICogRXhlbXBsbzpcbiAqXG4gKiBgYGBcbiAqIGNvbnN0IHBlb3BsZSA9IFtcbiAqICB7IGlkOiAxLCBuYW1lOiAnRnVsYW5vJywgYmlydGhkYXRlOiAnMTk4MC0xMS0wMScsIGdlbnJlOiAnTWFsZScsIGNpdHk6ICdTw6NvIFBhdWxvJywgZGVwZW5kZW50czogMiB9LFxuICogIHsgaWQ6IDIsIG5hbWU6ICdCZWx0cmFubycsIGJpcnRoZGF0ZTogJzE5OTctMDEtMjEnLCBnZW5yZTogJ0ZlbWFsZScsIGNpdHk6ICdKb2ludmlsbGUnLCBkZXBlbmRlbnRzOiAwIH0sXG4gKiAgeyBpZDogMywgbmFtZTogJ1NpY2xhbm8nLCBiaXJ0aGRhdGU6ICcxOTk1LTA3LTE1JywgZ2VucmU6ICdNYWxlJywgY2l0eTogJ0pvaW52aWxsZScsIGRlcGVuZGVudHM6IDAgfVxuICogXTtcbiAqXG4gKiBjb25zdCBwcm9wZXJ0aWVzID0gWydpZCcsICduYW1lJ107XG4gKlxuICogY29uc3QgaWRBbmROYW1lID0gbWFwQXJyYXlCeVByb3BlcnRpZXMocGVvcGxlLCBwcm9wZXJ0aWVzKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhpZEFuZE5hbWUpOyAvLyBbeyBpZDogMSwgbmFtZTogJ0Z1bGFubycgfSwgeyBpZDogMiwgbmFtZTogJ0JlbHRyYW5vJyB9LCB7IGlkOiAzLCBuYW1lOiAnU2ljbGFubycgfV1cbiAqIGBgYFxuICpcbiAqIFVtIG91dHJvIHVzbyBwYXJhIG8gbcOpdG9kbyDDqSBcInBhcmVhclwiIHRvZG9zIG9zIG9iamV0b3MgZG8gYXJyYXkgY29tIGFzIG1lc21hcyBwcm9wcmllZGFkZXMuXG4gKlxuICogYGBgXG4gKiBjb25zdCBjdXN0b21lcnMgPSBbXG4gKiAgeyBpZDogMSwgbmFtZTogJ0Z1bGFubycsIGNpdHk6ICdTw6NvIFBhdWxvJywgZGVwZW5kZW50czogMiB9LCAvLyBzZW0gZ2VucmVcbiAqICB7IGlkOiAyLCBuYW1lOiAnQmVsdHJhbm8nLCBnZW5yZTogJ0ZlbWFsZScsIGNpdHk6ICdKb2ludmlsbGUnIH0sIC8vIHNlbSBkZXBlbmRlbnRzXG4gKiAgeyBpZDogMywgbmFtZTogJ1NpY2xhbm8nLCBnZW5yZTogJ01hbGUnLCBjaXR5OiAnSm9pbnZpbGxlJywgZGVwZW5kZW50czogMCB9XG4gKiBdO1xuICogY29uc3QgcHJvcGVydGllcyA9IFsnaWQnLCAnbmFtZScsICdjaXR5JywgJ2dlbnJlJywgJ2RlcGVuZGVudHMnXTtcbiAqXG4gKiBjb25zdCBwYXR0ZXJuID0gbWFwQXJyYXlCeVByb3BlcnRpZXMoY3VzdG9tZXJzLCBwcm9wZXJ0aWVzKTtcbiAqIGNvbnNvbGUubG9nKHBhdHRlcm4pO1xuICpcbiAqIC8vIFtcbiAqIC8vICAgeyBpZDogMSwgbmFtZTogJ0Z1bGFubycsIGNpdHk6ICdTw6NvIFBhdWxvJywgZ2VucmU6IHVuZGVmaW5lZCwgZGVwZW5kZW50czogMiB9LFxuICogLy8gICB7IGlkOiAyLCBuYW1lOiAnQmVsdHJhbm8nLCBjaXR5OiAnSm9pbnZpbGxlJywgZ2VucmU6ICdGZW1hbGUnLCBkZXBlbmRlbnRzOiB1bmRlZmluZWQgfSxcbiAqIC8vICAgeyBpZDogMywgbmFtZTogJ1NpY2xhbm8nLCBjaXR5OiAnSm9pbnZpbGxlJywgZ2VucmU6ICdNYWxlJywgZGVwZW5kZW50czogMCB9XG4gKiAvLyBdXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gaXRlbXMge0FycmF5PGFueT59IEFycmF5IGRlIGl0ZW1zIG9yaWdpbmFsLlxuICogQHBhcmFtIHByb3BlcnRpZXMge0FycmF5PHN0cmluZz59IEFycmF5IGRlIHN0cmluZyBjb20gYSBsaXN0YSBkZSBwcm9wcmllZGFkZXMgcXVlIGRldmVtIHNlciByZXRvcm5hZGFzLlxuICpcbiAqIEByZXR1cm5zIEFycmF5PGFueT5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcEFycmF5QnlQcm9wZXJ0aWVzKGl0ZW1zOiBBcnJheTxhbnk+ID0gW10sIHByb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gPSBbXSk6IEFycmF5PGFueT4ge1xuICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4gbWFwT2JqZWN0QnlQcm9wZXJ0aWVzKGl0ZW0sIHByb3BlcnRpZXMpKTtcbn1cblxuLyoqXG4gKiBNYXBlaWEgdW0gbm92byBvYmpldG8gYXBlbmFzIGNvbSBhcyBwcm9wcmllZGFkZXMgZGVmaW5pZGFzIHBlbG8gZGVzZW52b2x2ZWRvci5cbiAqXG4gKiBFeGVtcGxvOlxuICpcbiAqIGBgYFxuICogY29uc3QgcGVyc29uID0geyBpZDogMSwgbmFtZTogJ0Z1bGFubycsIGJpcnRoZGF0ZTogJzE5ODAtMTEtMDEnLCBnZW5yZTogJ01hbGUnLCBjaXR5OiAnU8OjbyBQYXVsbycsIGRlcGVuZGVudHM6IDIgfTtcbiAqXG4gKiBjb25zdCBwcm9wZXJ0aWVzID0gWydpZCcsICduYW1lJ107XG4gKlxuICogY29uc3QgaWRBbmROYW1lID0gbWFwT2JqZWN0QnlQcm9wZXJ0aWVzKHBlcnNvbiwgcHJvcGVydGllcyk7XG4gKlxuICogY29uc29sZS5sb2coaWRBbmROYW1lKTsgLy8geyBpZDogMSwgbmFtZTogJ0Z1bGFubycgfVxuICogYGBgXG4gKlxuICogQHBhcmFtIG9iamVjdCB7QXJyYXk8YW55Pn0gQXJyYXkgZGUgaXRlbXMgb3JpZ2luYWwuXG4gKiBAcGFyYW0gcHJvcGVydGllcyB7QXJyYXk8c3RyaW5nPn0gQXJyYXkgZGUgc3RyaW5nIGNvbSBhIGxpc3RhIGRlIHByb3ByaWVkYWRlcyBxdWUgZGV2ZW0gc2VyIHJldG9ybmFkYXMuXG4gKlxuICogQHJldHVybnMgQXJyYXk8YW55PlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwT2JqZWN0QnlQcm9wZXJ0aWVzKG9iamVjdDogYW55ID0ge30sIHByb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gPSBbXSkge1xuICBjb25zdCBnZXRTZWxlY3RlZFByb3BlcnRpZXMgPSAoc2VsZWN0ZWRQcm9wZXJ0aWVzLCBwcm9wZXJ0eSkgPT4gKHtcbiAgICAuLi5zZWxlY3RlZFByb3BlcnRpZXMsXG4gICAgW3Byb3BlcnR5XTogb2JqZWN0W3Byb3BlcnR5XVxuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllcy5yZWR1Y2UoZ2V0U2VsZWN0ZWRQcm9wZXJ0aWVzLCB7fSk7XG59XG5cbi8qKlxuICogUmV0b3JuYSBvcyB2YWxvcmVzIGRlIHVtIG9iamV0byBkZW50cm8gZGUgdW0gYXJyYXkuXG4gKlxuICogPiBTaW11bGEgbyBPYmplY3QudmFsdWVzKG9iaiksIG8gbWVzbW8gZGV2ZSBzZXIgcmVtb3ZpZG8gYXNzaW0gcXVlIGEgdmVyc8OjbyB0eXBlc2NyaXQgZm9yIGF0dWFsaXphZGEuXG4gKlxuICogQHBhcmFtIG9iamVjdCBPYmpldG8gZGUgb25kZSBzZXLDoSBwZWdvIG9zIHZhbG9yZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNGcm9tT2JqZWN0KG9iamVjdDogYW55ID0ge30pOiBBcnJheTxhbnk+IHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubWFwKHByb3BlcnR5ID0+IG9iamVjdFtwcm9wZXJ0eV0pO1xufVxuXG4vKipcbiAqIENvbnZlcnRlIHVtIGFycXVpdm8gZW0gYmFzZTY0LlxuICpcbiAqIEBwYXJhbSBmaWxlIGFycXVpdm8gcXVlIHNlcsOhIGNvbnZlcnRpZG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0SW1hZ2VUb0Jhc2U2NChmaWxlOiBGaWxlKTogUHJvbWlzZTxhbnk+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFZhbGlkYSBzZSBhIGltYWdlbSDDqSBkbyB0aXBvIGJhc2U2NCB2YWxpZGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkSW1hZ2VCYXNlNjQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiAhIXZhbHVlLm1hdGNoKC9eZGF0YTppbWFnZVxcLyhbYS16QS1aXSopO2Jhc2U2NCwoW15cXFwiXSopJC8pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0ZSB1bSBuw7ptZXJvIGVtIGRlY2ltYWwgYmFzZWFkbyBuYSBxdWFudGlkYWRlIGRlIGNhc2FzIGRlY2ltYWlzLlxuICpcbiAqIENhc28gbyB2YWxvciBzZWphIGludsOhbGlkbywgc2Vyw6EgcmV0b3JuYWRvIG8gdmFsb3IgYHVuZGVmaW5lZGAuXG4gKiBWYWxvcmVzIGludsOhbGlkb3Mgc8OjbzogYGZhbHNlYCwgYE5hTmAsIGBzdHJpbmdzYCBxdWUgbsOjbyBudW3DqXJpY2FzLCBgdW5kZWZpbmVkYCBlIGBudWxsYC5cbiAqXG4gKiBAcGFyYW0gbnVtYmVyIHZhbG9yIHF1ZSBzZXLDoSBjb252ZXJ0aWRvXG4gKiBAcGFyYW0gZGVjaW1hbHNQbGFjZSBxdWFudGlkYWRlIGRlIGNhc2FzIGRlY2ltYWlzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TnVtYmVyVG9EZWNpbWFsKG51bWJlcjogYW55LCBkZWNpbWFsc1BsYWNlOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBpc1ZhbGlkVmFsdWUgPSAobnVtYmVyIHx8IG51bWJlciA9PT0gMCkgJiYgIWlzTmFOKG51bWJlcik7XG5cbiAgY29uc3QgZmxvYXRWYWx1ZSA9IGlzVmFsaWRWYWx1ZSA/IHBhcnNlRmxvYXQobnVtYmVyKSA6IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KGZsb2F0VmFsdWUudG9GaXhlZChkZWNpbWFsc1BsYWNlKSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmbG9hdFZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogUmV0b3JuYSB1bWEgY29waWEgZG8gb2JqZXRvIHN1am8sIHNlbSBhcyBwcm9wcmllZGFkZXMgbnVsYXMgb3UgaW5kZWZpbmlkYXMuXG4gKiBSZXRvcm5hIG8gb2JqZXRvIHNlbSBhcyBwcm9wcmllZGFkZXMgcXVlIGNvbnTDqW0gdmFsb3JlcyBudWxvcyBvdSBpbmRlZmluaWRvcy5cbiAqXG4gKiBAcGFyYW0gZGlydHlPYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyT2JqZWN0KGRpcnR5T2JqZWN0OiBvYmplY3QpOiBhbnkge1xuICBjb25zdCBjbGVhbk9iamVjdCA9IHt9O1xuXG4gIE9iamVjdC5rZXlzKGRpcnR5T2JqZWN0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKGRpcnR5T2JqZWN0W2tleV0gIT09IG51bGwgJiYgZGlydHlPYmplY3Rba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhbk9iamVjdFtrZXldID0gZGlydHlPYmplY3Rba2V5XTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjbGVhbk9iamVjdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlT2JqZWN0VHlwZSh2YWx1ZTogYW55KSB7XG4gIHJldHVybiBpc1R5cGVvZih2YWx1ZSwgJ29iamVjdCcpICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldG9ybmEgb3MgZWxlbWVudG9zIERPTSBjYXBhemVzIGRlIHJlY2ViZXIgZm9jby5cbiAqXG4gKiA+IEF0dWFsbWVudGUgc8OjbyBjb25zaWRlcmFkb3MgXCJmb2PDoXZlaXNcIiBvcyBlbGVtZW50b3MgRE9NIGBpbnB1dGAsIGBzZWxlY3RgLFxuICogYHRleHRhcmVhYCwgYGJ1dHRvbmAgZSBgYWAuXG4gKlxuICogQHBhcmFtIHBhcmVudEVsZW1lbnQgRWxlbWVudG8gRE9NIHBhaS5cbiAqIEByZXR1cm5zIExpc3RhIGRvcyBlbGVtZW50b3MgRE9NIGZpbGhvcyBcImZvY8OhdmVpc1wiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlRWxlbWVudHMocGFyZW50RWxlbWVudDogRWxlbWVudCk6IE5vZGVMaXN0T2Y8RWxlbWVudD4ge1xuICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9ICdidXR0b246bm90KFtkaXNhYmxlZF0pLCBbaHJlZl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSc7XG4gIHJldHVybiBwYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZm9jdXNhYmxlRWxlbWVudHMpO1xufVxuXG4vLyBSZXRvcm5hIG8gZm9ybWF0byBkZSBhY29yZG8gY29tIG8gbG9jYWxlLlxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTZXBhcmF0b3IoZm9ybWF0OiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKSB7XG4gIGxldCBuZXdGb3JtYXQgPSBmb3JtYXQ7XG4gIGlmIChzZXBhcmF0b3IgIT09ICcvJykge1xuICAgIG5ld0Zvcm1hdCA9IG5ld0Zvcm1hdC5yZXBsYWNlKC9cXC8vZywgc2VwYXJhdG9yKTtcbiAgfVxuICByZXR1cm4gbmV3Rm9ybWF0O1xufVxuXG4vKipcbiAqIFJlY2ViZSB1bSBhcnJheSBkZSBvYmpldG9zIHBhcmEgb3JkZW5hw6fDo28gdXRpbGl6YW5kbyBjaGF2ZSBjb21vIGNvbXBhcmF0aXZvIGVcbiAqIHNlIGEgb3JkZXIgw6kgY3Jlc2NlbnRlKHRydWUpIG91IGRlc2NyZXNjZW50ZShmYWxzZSlcbiAqXG4gKiBFeGVtcGxvOlxuICpcbiAqIGBgYFxuICogaXRlbXM6IFt7Y291bnRyeTogJ2phcGFvJ30sIHtjb3VudHJ5OiAnYnJhc2lsJ30gLCB7Y291bnRyeTogJ2NoaW5hJ31dXG4gKiBrZXk6ICdjb3VudHJ5J1xuICogaXNBc2NlbmRpbmdPcmRlcjogdHJ1ZVxuICogUmVzdWx0YWRvIGRvIHJldG9ybm86XG4gKiAgICBbe2NvdW50cnk6ICdicmFzaWwnfSwge2NvdW50cnk6ICdjaGluYSd9ICwge2NvdW50cnk6ICdqYXBhbyd9XVxuICogYGBgXG4gKlxuICpcbiAqIEBwYXJhbSBpdGVtcyA6IGxpc3RhIGRlIGl0ZW5zLlxuICogQHBhcmFtIGtleSA6IHByb3ByaWVkYWRlIHV0aWxpemFkYSBuYSBjb21wYXJhw6fDo28uXG4gKiBAcGFyYW0gaXNBc2NlbmRpbmdPcmRlciA6IG9yZGVuYcOnw6NvIGNyZXNjZW50ZSBvdSBkZXNjcmVzY2VudGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0QXJyYXlPZk9iamVjdHMoaXRlbXMsIGtleSwgaXNBc2NlbmRpbmdPcmRlcikge1xuICBpZiAoaXRlbXMpIHtcbiAgICByZXR1cm4gaXRlbXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgdmFsdWVBID0gYVtrZXldO1xuICAgICAgY29uc3QgdmFsdWVCID0gYltrZXldO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlQSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlQiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIGlzQXNjZW5kaW5nT3JkZXIgPyB2YWx1ZUEgLSB2YWx1ZUIgOiB2YWx1ZUIgLSB2YWx1ZUE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb21wYXJlUmVzdWx0ID0gdmFsdWVBLnRvU3RyaW5nKCkubG9jYWxlQ29tcGFyZSh2YWx1ZUIudG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiBpc0FzY2VuZGluZ09yZGVyID8gY29tcGFyZVJlc3VsdCA6IC1jb21wYXJlUmVzdWx0O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
586
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvdXRpbHMvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRTFGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQWEsRUFBRSxRQUFRLEdBQUcsQ0FBQztJQUNyRCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDeEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsUUFBUSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBRXZDLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNwRyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLCtDQUErQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLFNB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LFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQixDQUFDLEVBQUUsQ0FBQztTQUNMO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLHFDQUFxQyxDQUFDLElBQWdCLEVBQUUsUUFBUTtJQUM5RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDWCxTQUFTO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLENBQUMsRUFBRSxDQUFDO1NBQ0w7S0FDRjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsSUFBZ0I7SUFDNUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDcEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtZQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQixDQUFDLEVBQUUsQ0FBQztTQUNMO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsTUFB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RXRCLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtnQkFDNUQsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzthQUM3RDtpQkFBTTtnQkFDTCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RSxPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO2FBQzFEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7S0FDSjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwb0xvY2FsZXMsIHBvTG9jYWxlRGVmYXVsdCB9IGZyb20gJy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLmNvbnN0YW50JztcblxuLyoqXG4gKiBDb252ZXJ0ZSBlIGZvcm1hdGEgb3MgYnl0ZXMgZW0gZm9ybWF0byBtYWlzIGxlZ8OtdmVsIHBhcmEgbyB1c3XDoXJpby5cbiAqXG4gKiBQb3IgZXhlbXBsbzpcbiAqIC0gMzE0NTcyODAgZW0gMzAgTUIuXG4gKiAtIDIxNDc0ODM2NDgwIGVtIDIwIEdCLlxuICogLSAxMi41NjY2NjY2IGVtIDEyLjU3IEJ5dGVzIChkdWFzIGNhc2FzIGRlY2ltYWlzKS5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMge251bWJlcn0gVmFsb3IgZW0gYnl0ZXNcbiAqIEBwYXJhbSBkZWNpbWFscyB7bnVtYmVyfSBRdWFudGlkYWRlIGRlIGNhc2FzIGRlY2ltYWlzIHF1ZSB0ZXLDoSBhcMOzcyBhIGNvbnZlcnPDo28uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCeXRlcyhieXRlczogbnVtYmVyLCBkZWNpbWFscyA9IDIpOiBzdHJpbmcge1xuICBpZiAoIWJ5dGVzKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG11bHRpcGxpZXIgPSAxMDI0O1xuICBjb25zdCBzaXplcyA9IFsnQnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcbiAgY29uc3QgcmVzdWx0ID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhtdWx0aXBsaWVyKSk7XG4gIGRlY2ltYWxzID0gZGVjaW1hbHMgPCAwID8gMCA6IGRlY2ltYWxzO1xuXG4gIHJldHVybiBgJHtwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KG11bHRpcGxpZXIsIHJlc3VsdCkpLnRvRml4ZWQoZGVjaW1hbHMpKX0gJHtzaXplc1tyZXN1bHRdfWA7XG59XG5cbi8qKlxuICogUmV0b3JuYSBvIGlkaW9tYSBhdHVhbCBkbyBuYXZlZ2Fkb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyb3dzZXJMYW5ndWFnZSgpOiBzdHJpbmcge1xuICAvLyBuYXZpZ2F0b3IudXNlckxhbmd1YWdlIGlzIHRoZSB2YWx1ZSBmb3IgSUUxMFxuICBjb25zdCBsYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZSB8fCBuYXZpZ2F0b3JbJ3VzZXJMYW5ndWFnZSddO1xuICBjb25zdCBzaG9ydExhbmd1YWdlID0gZ2V0U2hvcnRMYW5ndWFnZShsYW5ndWFnZSk7XG5cbiAgcmV0dXJuIHBvTG9jYWxlcy5pbmNsdWRlcyhzaG9ydExhbmd1YWdlKSA/IGxhbmd1YWdlIDogcG9Mb2NhbGVEZWZhdWx0O1xufVxuXG4vKipcbiAqIFJldG9ybmEgbyBpZGlvbWEgZG8gbmF2ZWdhZG9yLCBjb20gc29tZW50ZSBhcyBkdWFzIHByaW1laXJhcyBsZXRyYXMuIFBvciBleGVtcGxvOiBcInB0XCIgb3UgXCJlc1wiLlxuICpcbiAqIENhc28gbyB2YWxvciByZXRvcm5hZG8gcGVsbyBuYXZlZ2Fkb3IgbsOjbyBlc3RpdmVyIGRlbnRybyBkb3MgaWRpb21hcyBzdXBvcnRhZG9zIHBlbG8gUE8sXG4gKiBzZXLDoSByZXRvcm5hZG8gYSBsaW5ndWFnZW0gcGFkcsOjbyAocG9Mb2NhbGVEZWZhdWx0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNob3J0QnJvd3Nlckxhbmd1YWdlKCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRTaG9ydExhbmd1YWdlKGdldEJyb3dzZXJMYW5ndWFnZSgpKTtcbn1cblxuLyoqXG4gKiBSZXRvcm5hIG8gaWRpb21hIGNvbSBzb21lbnRlIGEgYWJyZXZpYcOnw6NvIGRvIGlkaW9tYSAoZHVhcyBwcmltZWlyYXMgbGV0cmFzKS5cbiAqIFBvciBleGVtcGxvOiBcInB0XCIgb3UgXCJlc1wiLlxuICpcbiAqIEBwYXJhbSBsYW5ndWFnZSB7c3RyaW5nfSBsaW5ndWFnZW0uXG4gKlxuICogQHJldHVybnMgc2lnbGEgZG8gaWRpb21hIHBhZHLDo28ge3N0cmluZ30uXG4gKlxuICogQGRlZmF1bHQgcHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNob3J0TGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAobGFuZ3VhZ2UgfHwgcG9Mb2NhbGVEZWZhdWx0KS50b0xvd2VyQ2FzZSgpLnN1YnN0cmluZygwLCAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGFuZ3VhZ2UodmFsdWUpIHtcbiAgY29uc3QgbGFuZ3VhZ2VSZWdleCA9IG5ldyBSZWdFeHAoJ15bYS16XXsyfSgtW2Etel17Mn0pPyQnLCAnaScpO1xuXG4gIHJldHVybiBsYW5ndWFnZVJlZ2V4LnRlc3QodmFsdWUpO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZEN1cnJlbnRQYWdlKCkge1xuICBjb25zdCBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcblxuICBpZiAoaXNWYWxpZFVybChjdXJyZW50VXJsKSkge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oY3VycmVudFVybCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRVcmwodXJsOiBzdHJpbmcsIGxvY2F0aW9uOiBMb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gdXJsID09PSBsb2NhdGlvbi5vcmlnaW4gKyBsb2NhdGlvbi5wYXRobmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0Jvb2xlYW4odmFsOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gdmFsLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIHJldHVybiB2YWwgPT09ICd0cnVlJyB8fCB2YWwgPT09ICdvbicgfHwgdmFsID09PSAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWwgPT09IDE7XG4gIH1cblxuICByZXR1cm4gISF2YWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9JbnQodmFsdWU6IGFueSwgdmFsdWVEZWZhdWx0PzogYW55KTogbnVtYmVyIHtcbiAgY29uc3QgdmFsaWROdW1iZXIgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICBjb25zdCB2YWxpZERlZmF1bHRWYWx1ZSA9IHBhcnNlSW50KHZhbHVlRGVmYXVsdCwgMTApO1xuICBjb25zdCBkZWZhdWx0VmFsdWUgPSB2YWxpZERlZmF1bHRWYWx1ZSB8fCB2YWxpZERlZmF1bHRWYWx1ZSA9PT0gMCA/IHZhbGlkRGVmYXVsdFZhbHVlIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiB2YWxpZE51bWJlciB8fCB2YWxpZE51bWJlciA9PT0gMCA/IHZhbGlkTnVtYmVyIDogZGVmYXVsdFZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlb2Yob2JqZWN0OiBhbnksIHR5cGU6IGFueSkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gdHlwZTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIGZuIEZ1bsOnw6NvIHF1ZSBzZXLDoSBleGVjdXRhZGEgZGVudHJvIGRvIGNvbnRleHRvLiBQb2RlbmRvIHNlciBvIG5vbWUgZGEgZnVuw6fDo29cbiAqIG91IGEgcmVmZXLDqm5jaWEgZGEgbWVzbWEuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgQ29udGV4dG8gZG8gcXVhbCBhIGZ1bsOnw6NvIHNlcsOhIGV4ZWN1dGFkYS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGxGdW5jdGlvbihmbjogYW55LCBjb250ZXh0OiBhbnksIHBhcmFtPyk6IHZvaWQge1xuICBpZiAoaXNUeXBlb2YoZm4sICdmdW5jdGlvbicpKSB7XG4gICAgZm4uY2FsbChjb250ZXh0LCBwYXJhbSk7XG4gIH0gZWxzZSB7XG4gICAgY29udGV4dFtmbl0ocGFyYW0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0SXNvVG9EYXRlKHZhbHVlOiBzdHJpbmcsIHN0YXJ0OiBib29sZWFuLCBlbmQ6IGJvb2xlYW4pIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgZGF5ID0gcGFyc2VJbnQodmFsdWUuc3Vic3RyaW5nKDgsIDEwKSwgMTApO1xuICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQodmFsdWUuc3Vic3RyaW5nKDUsIDcpLCAxMCk7XG4gICAgY29uc3QgeWVhciA9IHBhcnNlSW50KHZhbHVlLnN1YnN0cmluZygwLCA0KSwgMTApO1xuXG4gICAgaWYgKHN0YXJ0KSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXksIDAsIDAsIDApO1xuXG4gICAgICBzZXRZZWFyRnJvbTBUbzEwMChkYXRlLCB5ZWFyKTtcblxuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSBlbHNlIGlmIChlbmQpIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSwgMjMsIDU5LCA1OSk7XG5cbiAgICAgIHNldFllYXJGcm9tMFRvMTAwKGRhdGUsIHllYXIpO1xuXG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREYXRlVG9JU09EYXRlKGRhdGU6IERhdGUpIHtcbiAgaWYgKGRhdGUpIHtcbiAgICBjb25zdCBnZXRNb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXRlKCkgPCAxMCA/ICcwJyArIGRhdGUuZ2V0RGF0ZSgpIDogZGF0ZS5nZXREYXRlKCk7XG4gICAgY29uc3QgbW9udGggPSBnZXRNb250aCA8IDEwID8gJzAnICsgZ2V0TW9udGggOiBnZXRNb250aDtcbiAgICBjb25zdCB5ZWFyID0gZm9ybWF0WWVhcihkYXRlLmdldEZ1bGxZZWFyKCkpO1xuXG4gICAgcmV0dXJuIHllYXIgKyAnLScgKyBtb250aCArICctJyArIGRheTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERhdGVUb0lTT0V4dGVuZGVkKGRhdGU6IERhdGUsIHRpbWU/OiBzdHJpbmcpIHtcbiAgaWYgKGRhdGUpIHtcbiAgICBjb25zdCBnZXRNb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXRlKCkgPCAxMCA/ICcwJyArIGRhdGUuZ2V0RGF0ZSgpIDogZGF0ZS5nZXREYXRlKCk7XG4gICAgY29uc3QgbW9udGggPSBnZXRNb250aCA8IDEwID8gJzAnICsgZ2V0TW9udGggOiBnZXRNb250aDtcbiAgICBjb25zdCB5ZWFyID0gZm9ybWF0WWVhcihkYXRlLmdldEZ1bGxZZWFyKCkpO1xuXG4gICAgY29uc3QgZGF0ZVN0cmluZyA9IGRhdGUudG9TdHJpbmcoKTtcblxuICAgIGlmICh0aW1lICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4geWVhciArICctJyArIG1vbnRoICsgJy0nICsgZGF5ICsgdGltZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgeWVhciArXG4gICAgICAgICctJyArXG4gICAgICAgIG1vbnRoICtcbiAgICAgICAgJy0nICtcbiAgICAgICAgZGF5ICtcbiAgICAgICAgJ1QnICtcbiAgICAgICAgZGF0ZVN0cmluZy5zdWJzdHJpbmcoMTYsIDI0KSArXG4gICAgICAgIGRhdGVTdHJpbmcuc3Vic3RyaW5nKDI4LCAzMSkgK1xuICAgICAgICAnOicgK1xuICAgICAgICBkYXRlU3RyaW5nLnN1YnN0cmluZygzMSwgMzMpXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybWEgbyBhbm8gZW0gdW1hIHN0cmluZyBubyBmb3JtYXRvIHl5eXkgZSBjYXNvIG8gYW5vIHNlamEgbWVub3IgcXVlIDEwMDAgcHJlZW5jaGUgY29tIHplcm9zIGEgZXNxdWVyZGEuXG4gKlxuICogQHBhcmFtIHllYXIgQW5vXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRZZWFyKHllYXI6IG51bWJlcikge1xuICBpZiAoeWVhciA+PSAxMDAwKSB7XG4gICAgcmV0dXJuIHllYXIudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGlmICh5ZWFyID4gOTkgJiYgeWVhciA8IDEwMDApIHtcbiAgICByZXR1cm4gYDAke3llYXJ9YDtcbiAgfVxuXG4gIGlmICh5ZWFyID4gOSAmJiB5ZWFyIDwgMTAwKSB7XG4gICAgcmV0dXJuIGAwMCR7eWVhcn1gO1xuICB9XG5cbiAgaWYgKHllYXIgPj0gMCAmJiB5ZWFyIDwgMTApIHtcbiAgICByZXR1cm4gYDAwMCR7eWVhcn1gO1xuICB9XG59XG5cbi8vIFZlcmlmaWNhIHNlIG8gbmF2ZWdhZG9yIGVtIHF1ZSBlc3TDoSBzZW5kbyB1c2FkbyDDqSBJbnRlcm5ldCBFeHBsb3JlciBvdSBFZGdlXG5leHBvcnQgZnVuY3Rpb24gaXNJRU9yRWRnZSgpIHtcbiAgY29uc3QgdXNlckFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgcmV0dXJuIC9tc2llXFxzfHRyaWRlbnRcXC98ZWRnZVxcLy9pLnRlc3QodXNlckFnZW50KTtcbn1cblxuLy8gVmVyaWZpY2Egc2UgbyBuYXZlZ2Fkb3IgZW0gcXVlIGVzdMOhIHNlbmRvIHVzYWRvIMOpIEludGVybmV0IEV4cGxvcmVyXG5leHBvcnQgZnVuY3Rpb24gaXNJRSgpIHtcbiAgY29uc3QgdXNlckFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgcmV0dXJuIC9tc2llXFxzfHRyaWRlbnQvaS50ZXN0KHVzZXJBZ2VudCk7XG59XG5cbi8vIFZlcmlmaWNhIHNlIG8gbmF2ZWdhZG9yIGVtIHF1ZSBlc3TDoSBzZW5kbyB1c2FkbyDDqSBGaXJlZm94XG5leHBvcnQgZnVuY3Rpb24gaXNGaXJlZm94KCkge1xuICBjb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcblxuICByZXR1cm4gdXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gLTE7XG59XG5cbi8vIFZlcmlmaWNhIHNlIG8gbmF2ZWdhZG9yIGVtIHF1ZSBlc3TDoSBzZW5kbyB1c2FkbyDDqSBTYWZhcmlcbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmFyaSgpIHtcbiAgY29uc3QgdXNlckFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgcmV0dXJuIC9eKD8hLipjaHJvbWUpLipzYWZhcmkuKiQvLnRlc3QodXNlckFnZW50LnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xufVxuXG4vLyBWZXJpZmljYSBxdWFsIG8gZGlzcG9zaXRpdm8gcXVlIGVzdMOhIHNlbmRvIHVzYWRvXG5leHBvcnQgZnVuY3Rpb24gaXNNb2JpbGUoKSB7XG4gIGNvbnN0IHVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuXG4gIHJldHVybiB1c2VyQWdlbnQubWF0Y2goL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fFdpbmRvd3MgUGhvbmUvaSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VxdWFscyh2YWx1ZSwgY29tcGFyZWRWYWx1ZSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpID09PSBKU09OLnN0cmluZ2lmeShjb21wYXJlZFZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzS2V5Q29kZUVudGVyKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGV2ZW50LmtleUNvZGUgPT09IDEzIHx8IGV2ZW50LndoaWNoID09PSAxMztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzS2V5Q29kZVNwYWNlKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGV2ZW50LmtleUNvZGUgPT09IDMyIHx8IGV2ZW50LndoaWNoID09PSAzMjtcbn1cblxuLyoqXG4gKiBDYXNvIG8gYW5vIG9yaWdpbmFsIGRhIGRhdGEgc2VqYSBlbnRyZSAwIGUgMTAwIGF0cmlidWkgZXNzZSB2YWxvciBhbyBhbm8sIHBvaXMgbyBgbmV3IERhdGVgIGRvIGphdmFzY3JpcHQgdHJhbnNmb3JtYSBvIGFubyBwYXJhIDE5MFguXG4gKlxuICogQHBhcmFtIGRhdGUgRGF0YVxuICogQHBhcmFtIHllYXIgQW5vIG9yaWdpbmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRZZWFyRnJvbTBUbzEwMChkYXRlOiBEYXRlLCB5ZWFyOiBudW1iZXIpIHtcbiAgaWYgKHllYXIgPj0gMCAmJiB5ZWFyIDwgMTAwKSB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydE9wdGlvbnNCeVByb3BlcnR5KG9wdGlvbnM6IEFycmF5PGFueT4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgb3B0aW9ucy5zb3J0KChvcHRpb25BLCBvcHRpb25CKSA9PiB7XG4gICAgb3B0aW9uQSA9IG9wdGlvbkFbcHJvcGVydHldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICBvcHRpb25CID0gb3B0aW9uQltwcm9wZXJ0eV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKG9wdGlvbkEgPCBvcHRpb25CKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChvcHRpb25BID4gb3B0aW9uQikge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9KTtcbn1cblxuLyoqXG4gKiBPcmRlbmEgbyBjYW1wb3MgYmFzZWFkbyBubyB2YWxvciBkYSBwcm9wcmllZGFkZSBgb3JkZXJgLlxuICpcbiAqIFPDsyBzZXLDo28gYWNlaXRvcyB2YWxvcmVzIGNvbSBuw7ptZXJvcyBpbnRlaXJvcyBtYWlvcmVzIGRvIHF1ZSB6ZXJvIHBhcmEgYSBvcmRlbmHDp8Ojby5cbiAqXG4gKiBDYW1wb3Mgc2VtIGBvcmRlcmAgb3UgY29tIHZhbG9yZXMgbmVnYXRpdm9zLCB6ZXJhZG9zIG91IGludsOhbGlkb3NcbiAqIHJlY2ViZXLDo28gbyB2YWxvciBkZWZhdWx0IGUgc2VndWlyw6NvIG8gcG9zaWNpb25hbWVudG8gZGVudHJvIGRvXG4gKiBhcnJheS5cbiAqXG4gKiBAcGFyYW0gZmllbGRzIGNhbXBvIHF1ZSBzZSBkZXNlamEgb3JkZW5hci5cbiAqIEBwYXJhbSBkZWZhdWx0T3JkZXJpbmcgdmFsb3IgcXVlIHNlcsOhIHV0aWxpemFkbyBwYXJhIG1hbnRlciBuYSBwb3Npw6fDo28gZG8gYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0RmllbGRzKGZpZWxkcyA9IFtdLCBkZWZhdWx0T3JkZXJpbmcgPSAtMSkge1xuICBjb25zdCByZXN1bHRDbGFzc2lmaWNhdGlvbiA9IHsgZmllbGRBQ29tZXNGaXJzdDogLTEsIGZpZWxkQUNvbWVzQWZ0ZXI6IDEsIGtlZXBQb3NpdGlvbnM6IDAgfTtcblxuICBjb25zdCBpc09yZGVyVmFsaWQgPSAob3JkZXI6IG51bWJlcikgPT4gaXNUeXBlb2Yob3JkZXIsICdudW1iZXInKSAmJiBvcmRlciA+IDA7XG4gIGNvbnN0IGFwcGx5RGVmYXVsdE9yZGVyaW5nID0gKG9yZGVyOiBudW1iZXIpID0+IChpc09yZGVyVmFsaWQob3JkZXIpID8gb3JkZXIgOiBkZWZhdWx0T3JkZXJpbmcpO1xuXG4gIHJldHVybiBmaWVsZHMuc29ydCgoZmllbGRBLCBmaWVsZEIpID0+IHtcbiAgICBjb25zdCBvcmRlckEgPSBhcHBseURlZmF1bHRPcmRlcmluZyhmaWVsZEEub3JkZXIpO1xuICAgIGNvbnN0IG9yZGVyQiA9IGFwcGx5RGVmYXVsdE9yZGVyaW5nKGZpZWxkQi5vcmRlcik7XG5cbiAgICBpZiAob3JkZXJBID09PSBvcmRlckIpIHtcbiAgICAgIHJldHVybiByZXN1bHRDbGFzc2lmaWNhdGlvbi5rZWVwUG9zaXRpb25zO1xuICAgIH1cblxuICAgIGlmIChvcmRlckEgPT09IGRlZmF1bHRPcmRlcmluZykge1xuICAgICAgcmV0dXJuIHJlc3VsdENsYXNzaWZpY2F0aW9uLmZpZWxkQUNvbWVzQWZ0ZXI7XG4gICAgfVxuXG4gICAgaWYgKG9yZGVyQiA9PT0gZGVmYXVsdE9yZGVyaW5nKSB7XG4gICAgICByZXR1cm4gcmVzdWx0Q2xhc3NpZmljYXRpb24uZmllbGRBQ29tZXNGaXJzdDtcbiAgICB9XG5cbiAgICByZXR1cm4gb3JkZXJBIC0gb3JkZXJCO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zKGxpc3Q6IEFycmF5PGFueT4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChsaXN0LmZpbmRJbmRleChvcCA9PiBvcC52YWx1ZSA9PT0gbGlzdFtpXS52YWx1ZSkgIT09IGkpIHtcbiAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgaS0tO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRHVwbGljYXRlZE9wdGlvbnNXaXRoRmllbGRWYWx1ZShsaXN0OiBBcnJheTxhbnk+LCBuZXdWYWx1ZSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGxpc3QuZmluZEluZGV4KG9wID0+IG9wW25ld1ZhbHVlXSA9PT0gbGlzdFtpXVtuZXdWYWx1ZV0pICE9PSBpKSB7XG4gICAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICAgIGktLTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxPcHRpb25zKGxpc3Q6IEFycmF5PGFueT4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGxpc3RbaV0udmFsdWUgPT09IHVuZGVmaW5lZCB8fCBsaXN0W2ldLnZhbHVlID09PSBudWxsKSB7XG4gICAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICAgIGktLTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxPcHRpb25zV2l0aEZpZWxkVmFsdWUobGlzdDogQXJyYXk8YW55PiwgbmV3VmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGxpc3RbaV1bbmV3VmFsdWVdID09PSB1bmRlZmluZWQgfHwgbGlzdFtpXVtuZXdWYWx1ZV0gPT09IG51bGwpIHtcbiAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgaS0tO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gIHJldHVybiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gJycpIHx8IHZhbHVlID09PSBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXh0ZXJuYWxMaW5rKHVybCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdXJsID8gdXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSA6IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3BlbkV4dGVybmFsTGluayh1cmwpOiB2b2lkIHtcbiAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXR0ZWRMaW5rKGxpbms6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBmb3JtYXR0ZWRMaW5rID0gJyc7XG4gIC8vIFJldGlyYSB0b2RvcyBvcyBwb250b3Mgbm8gY29tZcOnbyBkYSBVUkwuXG4gIGlmIChsaW5rKSB7XG4gICAgZm9ybWF0dGVkTGluayA9IGxpbmsucmVwbGFjZSgvXihcXC4pKy9nLCAnJyk7XG4gIH1cbiAgLy8gVmVyaWZpY2Egc2UgZm9pIHV0aWxpemFkbyB1bWEgcm90YSBxdWUgbsOjbyBjb21lY2UgY29tIGJhcnJhLlxuICBpZiAoIWZvcm1hdHRlZExpbmsuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgZm9ybWF0dGVkTGluayA9ICcvJy5jb25jYXQoZm9ybWF0dGVkTGluayk7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdHRlZExpbms7XG59XG5cbi8qKlxuICogTcOpdG9kbyByZXNwb25zw6F2ZWwgcG9yIG9yZGVuYXIgZG9pcyB2YWxvcmVzLlxuICpcbiAqIEBwYXJhbSBsZWZ0U2lkZSBQcmltZWlybyB2YWxvciBhIHNlciBjb21wYXJhZG8uXG4gKiBAcGFyYW0gcmlnaHRTaWRlIFNlZ3VuZG8gdmFsb3IgYSBzZXIgY29tcGFyYWRvLlxuICogQHBhcmFtIGFzY2VuZGluZyBEZXRlcm1pbmEgc2Ugc2Vyw6EgZW0gb3JkZW0gYXNjZW5kZW50ZSBvdSBkZXNjZW5kZW50ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRWYWx1ZXMobGVmdFNpZGU6IHN0cmluZyB8IERhdGUsIHJpZ2h0U2lkZTogc3RyaW5nIHwgRGF0ZSwgYXNjZW5kaW5nOiBib29sZWFuID0gdHJ1ZSk6IG51bWJlciB7XG4gIGNvbnN0IGxlZnQgPSBpc1R5cGVvZihsZWZ0U2lkZSwgJ3N0cmluZycpID8gKGxlZnRTaWRlIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKSA6IGxlZnRTaWRlO1xuICBjb25zdCByaWdodCA9IGlzVHlwZW9mKHJpZ2h0U2lkZSwgJ3N0cmluZycpID8gKHJpZ2h0U2lkZSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkgOiByaWdodFNpZGU7XG5cbiAgY29uc3QgbGVmdElzSW52YWxpZCA9IGxlZnQgPT09IG51bGwgfHwgbGVmdCA9PT0gdW5kZWZpbmVkIHx8IE51bWJlci5pc05hTihsZWZ0KTtcbiAgY29uc3QgcmlnaHRJc0ludmFsaWQgPSByaWdodCA9PT0gbnVsbCB8fCByaWdodCA9PT0gdW5kZWZpbmVkIHx8IE51bWJlci5pc05hTihyaWdodCk7XG5cbiAgaWYgKGFzY2VuZGluZykge1xuICAgIGlmIChsZWZ0IDwgcmlnaHQgfHwgbGVmdElzSW52YWxpZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gZWxzZSBpZiAobGVmdCA+IHJpZ2h0IHx8IHJpZ2h0SXNJbnZhbGlkKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXNjZW5kaW5nID09PSBmYWxzZSkge1xuICAgIGlmIChsZWZ0IDwgcmlnaHQgfHwgbGVmdElzSW52YWxpZCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChsZWZ0ID4gcmlnaHQgfHwgcmlnaHRJc0ludmFsaWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZURhdGVSYW5nZShkYXRlOiBEYXRlLCBkYXRlU3RhcnQ6IERhdGUsIGRhdGVFbmQ6IERhdGUpIHtcbiAgaWYgKGRhdGVTdGFydCAmJiBkYXRlRW5kKSB7XG4gICAgcmV0dXJuIGRhdGUgPj0gZGF0ZVN0YXJ0ICYmIGRhdGUgPD0gZGF0ZUVuZDtcbiAgfSBlbHNlIGlmIChkYXRlU3RhcnQgJiYgIWRhdGVFbmQpIHtcbiAgICByZXR1cm4gZGF0ZSA+PSBkYXRlU3RhcnQ7XG4gIH0gZWxzZSBpZiAoIWRhdGVTdGFydCAmJiBkYXRlRW5kKSB7XG4gICAgcmV0dXJuIGRhdGUgPD0gZGF0ZUVuZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXVpZCgpIHtcbiAgZnVuY3Rpb24gaGV4NCgpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMClcbiAgICAgIC50b1N0cmluZygxNilcbiAgICAgIC5zdWJzdHJpbmcoMSk7XG4gIH1cblxuICByZXR1cm4gaGV4NCgpICsgaGV4NCgpICsgJy0nICsgaGV4NCgpICsgJy0nICsgaGV4NCgpICsgJy0nICsgaGV4NCgpICsgJy0nICsgaGV4NCgpICsgaGV4NCgpICsgaGV4NCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHt0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7dGV4dC5zbGljZSgxKX1gO1xufVxuXG4vKipcbiAqIE1hcGVpYSB1bSBub3ZvIGFycmF5IGFwZW5hcyBjb20gYXMgcHJvcHJpZWRhZGVzIGRlZmluaWRhcyBwZWxvIGRlc2Vudm9sdmVkb3IgYmFzZWFkbyBlbSB1bSBhcnJheSBkZVxuICogb3JpZ2VtLlxuICpcbiAqIEV4ZW1wbG86XG4gKlxuICogYGBgXG4gKiBjb25zdCBwZW9wbGUgPSBbXG4gKiAgeyBpZDogMSwgbmFtZTogJ0Z1bGFubycsIGJpcnRoZGF0ZTogJzE5ODAtMTEtMDEnLCBnZW5yZTogJ01hbGUnLCBjaXR5OiAnU8OjbyBQYXVsbycsIGRlcGVuZGVudHM6IDIgfSxcbiAqICB7IGlkOiAyLCBuYW1lOiAnQmVsdHJhbm8nLCBiaXJ0aGRhdGU6ICcxOTk3LTAxLTIxJywgZ2VucmU6ICdGZW1hbGUnLCBjaXR5OiAnSm9pbnZpbGxlJywgZGVwZW5kZW50czogMCB9LFxuICogIHsgaWQ6IDMsIG5hbWU6ICdTaWNsYW5vJywgYmlydGhkYXRlOiAnMTk5NS0wNy0xNScsIGdlbnJlOiAnTWFsZScsIGNpdHk6ICdKb2ludmlsbGUnLCBkZXBlbmRlbnRzOiAwIH1cbiAqIF07XG4gKlxuICogY29uc3QgcHJvcGVydGllcyA9IFsnaWQnLCAnbmFtZSddO1xuICpcbiAqIGNvbnN0IGlkQW5kTmFtZSA9IG1hcEFycmF5QnlQcm9wZXJ0aWVzKHBlb3BsZSwgcHJvcGVydGllcyk7XG4gKlxuICogY29uc29sZS5sb2coaWRBbmROYW1lKTsgLy8gW3sgaWQ6IDEsIG5hbWU6ICdGdWxhbm8nIH0sIHsgaWQ6IDIsIG5hbWU6ICdCZWx0cmFubycgfSwgeyBpZDogMywgbmFtZTogJ1NpY2xhbm8nIH1dXG4gKiBgYGBcbiAqXG4gKiBVbSBvdXRybyB1c28gcGFyYSBvIG3DqXRvZG8gw6kgXCJwYXJlYXJcIiB0b2RvcyBvcyBvYmpldG9zIGRvIGFycmF5IGNvbSBhcyBtZXNtYXMgcHJvcHJpZWRhZGVzLlxuICpcbiAqIGBgYFxuICogY29uc3QgY3VzdG9tZXJzID0gW1xuICogIHsgaWQ6IDEsIG5hbWU6ICdGdWxhbm8nLCBjaXR5OiAnU8OjbyBQYXVsbycsIGRlcGVuZGVudHM6IDIgfSwgLy8gc2VtIGdlbnJlXG4gKiAgeyBpZDogMiwgbmFtZTogJ0JlbHRyYW5vJywgZ2VucmU6ICdGZW1hbGUnLCBjaXR5OiAnSm9pbnZpbGxlJyB9LCAvLyBzZW0gZGVwZW5kZW50c1xuICogIHsgaWQ6IDMsIG5hbWU6ICdTaWNsYW5vJywgZ2VucmU6ICdNYWxlJywgY2l0eTogJ0pvaW52aWxsZScsIGRlcGVuZGVudHM6IDAgfVxuICogXTtcbiAqIGNvbnN0IHByb3BlcnRpZXMgPSBbJ2lkJywgJ25hbWUnLCAnY2l0eScsICdnZW5yZScsICdkZXBlbmRlbnRzJ107XG4gKlxuICogY29uc3QgcGF0dGVybiA9IG1hcEFycmF5QnlQcm9wZXJ0aWVzKGN1c3RvbWVycywgcHJvcGVydGllcyk7XG4gKiBjb25zb2xlLmxvZyhwYXR0ZXJuKTtcbiAqXG4gKiAvLyBbXG4gKiAvLyAgIHsgaWQ6IDEsIG5hbWU6ICdGdWxhbm8nLCBjaXR5OiAnU8OjbyBQYXVsbycsIGdlbnJlOiB1bmRlZmluZWQsIGRlcGVuZGVudHM6IDIgfSxcbiAqIC8vICAgeyBpZDogMiwgbmFtZTogJ0JlbHRyYW5vJywgY2l0eTogJ0pvaW52aWxsZScsIGdlbnJlOiAnRmVtYWxlJywgZGVwZW5kZW50czogdW5kZWZpbmVkIH0sXG4gKiAvLyAgIHsgaWQ6IDMsIG5hbWU6ICdTaWNsYW5vJywgY2l0eTogJ0pvaW52aWxsZScsIGdlbnJlOiAnTWFsZScsIGRlcGVuZGVudHM6IDAgfVxuICogLy8gXVxuICogYGBgXG4gKlxuICogQHBhcmFtIGl0ZW1zIHtBcnJheTxhbnk+fSBBcnJheSBkZSBpdGVtcyBvcmlnaW5hbC5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIHtBcnJheTxzdHJpbmc+fSBBcnJheSBkZSBzdHJpbmcgY29tIGEgbGlzdGEgZGUgcHJvcHJpZWRhZGVzIHF1ZSBkZXZlbSBzZXIgcmV0b3JuYWRhcy5cbiAqXG4gKiBAcmV0dXJucyBBcnJheTxhbnk+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBBcnJheUJ5UHJvcGVydGllcyhpdGVtczogQXJyYXk8YW55PiA9IFtdLCBwcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gW10pOiBBcnJheTxhbnk+IHtcbiAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+IG1hcE9iamVjdEJ5UHJvcGVydGllcyhpdGVtLCBwcm9wZXJ0aWVzKSk7XG59XG5cbi8qKlxuICogTWFwZWlhIHVtIG5vdm8gb2JqZXRvIGFwZW5hcyBjb20gYXMgcHJvcHJpZWRhZGVzIGRlZmluaWRhcyBwZWxvIGRlc2Vudm9sdmVkb3IuXG4gKlxuICogRXhlbXBsbzpcbiAqXG4gKiBgYGBcbiAqIGNvbnN0IHBlcnNvbiA9IHsgaWQ6IDEsIG5hbWU6ICdGdWxhbm8nLCBiaXJ0aGRhdGU6ICcxOTgwLTExLTAxJywgZ2VucmU6ICdNYWxlJywgY2l0eTogJ1PDo28gUGF1bG8nLCBkZXBlbmRlbnRzOiAyIH07XG4gKlxuICogY29uc3QgcHJvcGVydGllcyA9IFsnaWQnLCAnbmFtZSddO1xuICpcbiAqIGNvbnN0IGlkQW5kTmFtZSA9IG1hcE9iamVjdEJ5UHJvcGVydGllcyhwZXJzb24sIHByb3BlcnRpZXMpO1xuICpcbiAqIGNvbnNvbGUubG9nKGlkQW5kTmFtZSk7IC8vIHsgaWQ6IDEsIG5hbWU6ICdGdWxhbm8nIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge0FycmF5PGFueT59IEFycmF5IGRlIGl0ZW1zIG9yaWdpbmFsLlxuICogQHBhcmFtIHByb3BlcnRpZXMge0FycmF5PHN0cmluZz59IEFycmF5IGRlIHN0cmluZyBjb20gYSBsaXN0YSBkZSBwcm9wcmllZGFkZXMgcXVlIGRldmVtIHNlciByZXRvcm5hZGFzLlxuICpcbiAqIEByZXR1cm5zIEFycmF5PGFueT5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcE9iamVjdEJ5UHJvcGVydGllcyhvYmplY3Q6IGFueSA9IHt9LCBwcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gW10pIHtcbiAgY29uc3QgZ2V0U2VsZWN0ZWRQcm9wZXJ0aWVzID0gKHNlbGVjdGVkUHJvcGVydGllcywgcHJvcGVydHkpID0+ICh7XG4gICAgLi4uc2VsZWN0ZWRQcm9wZXJ0aWVzLFxuICAgIFtwcm9wZXJ0eV06IG9iamVjdFtwcm9wZXJ0eV1cbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXMucmVkdWNlKGdldFNlbGVjdGVkUHJvcGVydGllcywge30pO1xufVxuXG4vKipcbiAqIFJldG9ybmEgb3MgdmFsb3JlcyBkZSB1bSBvYmpldG8gZGVudHJvIGRlIHVtIGFycmF5LlxuICpcbiAqID4gU2ltdWxhIG8gT2JqZWN0LnZhbHVlcyhvYmopLCBvIG1lc21vIGRldmUgc2VyIHJlbW92aWRvIGFzc2ltIHF1ZSBhIHZlcnPDo28gdHlwZXNjcml0IGZvciBhdHVhbGl6YWRhLlxuICpcbiAqIEBwYXJhbSBvYmplY3QgT2JqZXRvIGRlIG9uZGUgc2Vyw6EgcGVnbyBvcyB2YWxvcmVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzRnJvbU9iamVjdChvYmplY3Q6IGFueSA9IHt9KTogQXJyYXk8YW55PiB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLm1hcChwcm9wZXJ0eSA9PiBvYmplY3RbcHJvcGVydHldKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0ZSB1bSBhcnF1aXZvIGVtIGJhc2U2NC5cbiAqXG4gKiBAcGFyYW0gZmlsZSBhcnF1aXZvIHF1ZSBzZXLDoSBjb252ZXJ0aWRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEltYWdlVG9CYXNlNjQoZmlsZTogRmlsZSk6IFByb21pc2U8YW55PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBWYWxpZGEgc2UgYSBpbWFnZW0gw6kgZG8gdGlwbyBiYXNlNjQgdmFsaWRhXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEltYWdlQmFzZTY0KHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISF2YWx1ZS5tYXRjaCgvXmRhdGE6aW1hZ2VcXC8oW2EtekEtWl0qKTtiYXNlNjQsKFteXFxcIl0qKSQvKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydGUgdW0gbsO6bWVybyBlbSBkZWNpbWFsIGJhc2VhZG8gbmEgcXVhbnRpZGFkZSBkZSBjYXNhcyBkZWNpbWFpcy5cbiAqXG4gKiBDYXNvIG8gdmFsb3Igc2VqYSBpbnbDoWxpZG8sIHNlcsOhIHJldG9ybmFkbyBvIHZhbG9yIGB1bmRlZmluZWRgLlxuICogVmFsb3JlcyBpbnbDoWxpZG9zIHPDo286IGBmYWxzZWAsIGBOYU5gLCBgc3RyaW5nc2AgcXVlIG7Do28gbnVtw6lyaWNhcywgYHVuZGVmaW5lZGAgZSBgbnVsbGAuXG4gKlxuICogQHBhcmFtIG51bWJlciB2YWxvciBxdWUgc2Vyw6EgY29udmVydGlkb1xuICogQHBhcmFtIGRlY2ltYWxzUGxhY2UgcXVhbnRpZGFkZSBkZSBjYXNhcyBkZWNpbWFpc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE51bWJlclRvRGVjaW1hbChudW1iZXI6IGFueSwgZGVjaW1hbHNQbGFjZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgaXNWYWxpZFZhbHVlID0gKG51bWJlciB8fCBudW1iZXIgPT09IDApICYmICFpc05hTihudW1iZXIpO1xuXG4gIGNvbnN0IGZsb2F0VmFsdWUgPSBpc1ZhbGlkVmFsdWUgPyBwYXJzZUZsb2F0KG51bWJlcikgOiB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChmbG9hdFZhbHVlLnRvRml4ZWQoZGVjaW1hbHNQbGFjZSkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmxvYXRWYWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFJldG9ybmEgdW1hIGNvcGlhIGRvIG9iamV0byBzdWpvLCBzZW0gYXMgcHJvcHJpZWRhZGVzIG51bGFzIG91IGluZGVmaW5pZGFzLlxuICogUmV0b3JuYSBvIG9iamV0byBzZW0gYXMgcHJvcHJpZWRhZGVzIHF1ZSBjb250w6ltIHZhbG9yZXMgbnVsb3Mgb3UgaW5kZWZpbmlkb3MuXG4gKlxuICogQHBhcmFtIGRpcnR5T2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhck9iamVjdChkaXJ0eU9iamVjdDogb2JqZWN0KTogYW55IHtcbiAgY29uc3QgY2xlYW5PYmplY3QgPSB7fTtcblxuICBPYmplY3Qua2V5cyhkaXJ0eU9iamVjdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmIChkaXJ0eU9iamVjdFtrZXldICE9PSBudWxsICYmIGRpcnR5T2JqZWN0W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYW5PYmplY3Rba2V5XSA9IGRpcnR5T2JqZWN0W2tleV07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY2xlYW5PYmplY3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU9iamVjdFR5cGUodmFsdWU6IGFueSkge1xuICByZXR1cm4gaXNUeXBlb2YodmFsdWUsICdvYmplY3QnKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXRvcm5hIG9zIGVsZW1lbnRvcyBET00gY2FwYXplcyBkZSByZWNlYmVyIGZvY28uXG4gKlxuICogPiBBdHVhbG1lbnRlIHPDo28gY29uc2lkZXJhZG9zIFwiZm9jw6F2ZWlzXCIgb3MgZWxlbWVudG9zIERPTSBgaW5wdXRgLCBgc2VsZWN0YCxcbiAqIGB0ZXh0YXJlYWAsIGBidXR0b25gIGUgYGFgLlxuICpcbiAqIEBwYXJhbSBwYXJlbnRFbGVtZW50IEVsZW1lbnRvIERPTSBwYWkuXG4gKiBAcmV0dXJucyBMaXN0YSBkb3MgZWxlbWVudG9zIERPTSBmaWxob3MgXCJmb2PDoXZlaXNcIi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvY3VzYWJsZUVsZW1lbnRzKHBhcmVudEVsZW1lbnQ6IEVsZW1lbnQpOiBOb2RlTGlzdE9mPEVsZW1lbnQ+IHtcbiAgY29uc3QgZm9jdXNhYmxlRWxlbWVudHMgPSAnYnV0dG9uOm5vdChbZGlzYWJsZWRdKSwgW2hyZWZdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0nO1xuICByZXR1cm4gcGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGZvY3VzYWJsZUVsZW1lbnRzKTtcbn1cblxuLy8gUmV0b3JuYSBvIGZvcm1hdG8gZGUgYWNvcmRvIGNvbSBvIGxvY2FsZS5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRm9ybWF0U2VwYXJhdG9yKGZvcm1hdDogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZykge1xuICBsZXQgbmV3Rm9ybWF0ID0gZm9ybWF0O1xuICBpZiAoc2VwYXJhdG9yICE9PSAnLycpIHtcbiAgICBuZXdGb3JtYXQgPSBuZXdGb3JtYXQucmVwbGFjZSgvXFwvL2csIHNlcGFyYXRvcik7XG4gIH1cbiAgcmV0dXJuIG5ld0Zvcm1hdDtcbn1cblxuLyoqXG4gKiBSZWNlYmUgdW0gYXJyYXkgZGUgb2JqZXRvcyBwYXJhIG9yZGVuYcOnw6NvIHV0aWxpemFuZG8gY2hhdmUgY29tbyBjb21wYXJhdGl2byBlXG4gKiBzZSBhIG9yZGVyIMOpIGNyZXNjZW50ZSh0cnVlKSBvdSBkZXNjcmVzY2VudGUoZmFsc2UpXG4gKlxuICogRXhlbXBsbzpcbiAqXG4gKiBgYGBcbiAqIGl0ZW1zOiBbe2NvdW50cnk6ICdqYXBhbyd9LCB7Y291bnRyeTogJ2JyYXNpbCd9ICwge2NvdW50cnk6ICdjaGluYSd9XVxuICoga2V5OiAnY291bnRyeSdcbiAqIGlzQXNjZW5kaW5nT3JkZXI6IHRydWVcbiAqIFJlc3VsdGFkbyBkbyByZXRvcm5vOlxuICogICAgW3tjb3VudHJ5OiAnYnJhc2lsJ30sIHtjb3VudHJ5OiAnY2hpbmEnfSAsIHtjb3VudHJ5OiAnamFwYW8nfV1cbiAqIGBgYFxuICpcbiAqXG4gKiBAcGFyYW0gaXRlbXMgOiBsaXN0YSBkZSBpdGVucy5cbiAqIEBwYXJhbSBrZXkgOiBwcm9wcmllZGFkZSB1dGlsaXphZGEgbmEgY29tcGFyYcOnw6NvLlxuICogQHBhcmFtIGlzQXNjZW5kaW5nT3JkZXIgOiBvcmRlbmHDp8OjbyBjcmVzY2VudGUgb3UgZGVzY3Jlc2NlbnRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydEFycmF5T2ZPYmplY3RzKGl0ZW1zLCBrZXksIGlzQXNjZW5kaW5nT3JkZXIpIHtcbiAgaWYgKGl0ZW1zKSB7XG4gICAgcmV0dXJuIGl0ZW1zLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlQSA9IGFba2V5XTtcbiAgICAgIGNvbnN0IHZhbHVlQiA9IGJba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZUEgPT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZUIgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBpc0FzY2VuZGluZ09yZGVyID8gdmFsdWVBIC0gdmFsdWVCIDogdmFsdWVCIC0gdmFsdWVBO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29tcGFyZVJlc3VsdCA9IHZhbHVlQS50b1N0cmluZygpLmxvY2FsZUNvbXBhcmUodmFsdWVCLnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gaXNBc2NlbmRpbmdPcmRlciA/IGNvbXBhcmVSZXN1bHQgOiAtY29tcGFyZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
|