UNPKG

@infordata-web/portal-common-component-lib

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.

434 lines 78.6 kB
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
import { Subject } from 'rxjs';
import { map, shareReplay, tap } from 'rxjs/operators';
import { AltriSoggettiGiudiziarioDTO } from '../../models/altri-soggetti-giudiziario-dto';
import { AltriSoggettiNoEsproprioDTO } from '../../models/altri-soggetti-no-esproprio-dto';
import { InfoAnagrafichePFDTO } from '../../models/info-anagrafiche-pf';
import { InfoNascitaPFDTO } from '../../models/info-nascita-pf.dto';
import { PersonaFisicaDTO } from '../../models/persona-fisica-dto';
import { PersonaGiuridicaDTO } from '../../models/persona-giuridica-dto';
import { ComponentOutputStatus } from '../../normalizzazione/component-output-status';
import { DelegheService } from '../../services/deleghe-services/deleghe.service';
import { MessageService } from '../../services/message.service';
import { ComponentReducer } from '../../utils/component-reducer';
import { Modals } from '../../utils/modals';
export class AltriSoggettiComponent {
    constructor(delegheService, modals, msg) {
        this.delegheService = delegheService;
        this.modals = modals;
        this.msg = msg;
        this.nextStep = new EventEmitter();
        this.salvaBozza = new EventEmitter();
        this.previousStep = new EventEmitter();
        //TODO
        // changesPF$ = new Subject<
        // 	ComponentOutputStatus<(value: AltriSoggettiGiudiziarioDTO) => void>
        // >();
        //TODO
        // changesPF2$ = new Subject<
        // 	ComponentOutputStatus<(value: AltriSoggettiNoEsproprioDTO) => void>
        // >();
        this.changesRicercaPG$ = new Subject();
        this.changesRicercaPF$ = new Subject();
        this.changesPersonaGiuridica$ = new Subject();
        this.changesPersonaFisica$ = new Subject();
        this.direction = "both-ways";
        this.isFinal = false;
        this.showComponentRicercaPF = false;
        this.showComponentRicercaPG = false;
        this.isSearching = false;
    }
    ngOnInit() {
        //console.log('[AltriSoggettiGiudiziarioDTO - AltriSoggettiNoEsproprioDTO]', this.altriSoggetti);
        this.form = new FormGroup({});
        let valid = true;
        this.nspg = "nsRapprLegpg";
        if (!this.altriSoggetti) {
            this.initAltriSoggetti();
            valid = false;
        }
        else {
            if (this.formControlSoggetto) {
                this.personaGiuridica = this.altriSoggetti.personaGiuridica;
                if (this.personaGiuridica) {
                    this.showComponentRicercaPG = true;
                }
                this.personaFisica = this.altriSoggetti.personaFisica;
                if (this.personaFisica) {
                    this.showComponentRicercaPF = true;
                }
                if (this.altriSoggetti.codiceTipoAltroSoggetto === 'SOGGETTO_DA_IDENTIFICARE') {
                    this.altriSoggetti.codiceRegione = '';
                }
            }
            else {
                if (!(this.altriSoggetti.soggettoNonIdentificato)) {
                    this.personaFisica = this.mapperPersonaFisica(this.altriSoggetti);
                }
            }
        }
        this.tipoSoggetto = new FormControl({ value: this.altriSoggetti.codiceTipoAltroSoggetto, disabled: false }, [Validators.required]);
        this.form.addControl('tipoSoggetto', this.tipoSoggetto);
        this.soggettoNonIdentificato = new FormControl({ value: this.altriSoggetti.soggettoNonIdentificato, disabled: false });
        this.form.addControl('soggettoNonIdentificato', this.soggettoNonIdentificato);
        this.namespaceInfoPf = this.namespace + "infoPF";
        if (!this.formControlSoggetto) {
            if (this.altriSoggetti.soggettoNonIdentificato) {
                this.showComponentRicercaPF = false;
            }
            else {
                this.showComponentRicercaPF = true;
            }
        }
        this.checkSoggetto$ = this.soggettoNonIdentificato.valueChanges.pipe(
        // tap(checkSoggetto => console.log('[checkSoggetto$] - soggettoNonIdentificato:', checkSoggetto)),
        tap((checkSoggetto) => {
            if (!checkSoggetto) {
                this.showComponentRicercaPF = true;
                this.isSearching = false;
            }
            else {
                this.resetSoggetti();
                this.showComponentRicercaPF = false;
                this.isSearching = false;
            }
        }), shareReplay());
        const changesCheckSoggetto$ = this.checkSoggetto$.pipe(
        // tap(checkSoggetto => console.log('[changesCheckSoggetto$] - soggettoNonIdentificato:', checkSoggetto)),
        map((checkSoggetto) => {
            this.changesPersonaFisica$.next(ComponentOutputStatus.of(true, (personaFisica) => (sogg) => { }));
            return ComponentOutputStatus.of(true, (soggetto) => (soggetto.soggettoNonIdentificato = checkSoggetto));
        }));
        this.tipoSoggetto$ = this.tipoSoggetto.valueChanges.pipe(
        // tap(tipo => console.log('[tipoSoggetto$] - codiceSoggetto:', tipo)),
        tap((tipo) => {
            if (tipo != 'SOGGETTO_DA_IDENTIFICARE') {
                this.setSoggetto(tipo);
                this.isSearching = false;
            }
            else {
                this.resetSoggetti();
                this.showComponentRicercaPF = false;
                this.showComponentRicercaPG = false;
                this.isSearching = false;
                this.resetValidation();
            }
        }), shareReplay());
        const tipoSoggettoChanges$ = this.tipoSoggetto$.pipe(
        // tap(tipoSoggettoChanges => console.log('[tipoSoggettoChanges$] - codiceTipoAltroSoggetto:', tipoSoggettoChanges)),
        map((tipo) => {
            return ComponentOutputStatus.of(this.tipoSoggetto.valid, (sog) => (sog.codiceTipoAltroSoggetto = tipo));
        }));
        const altriSoggetti$ = ComponentReducer.reducer4(tipoSoggettoChanges$, changesCheckSoggetto$, 
        // TODO
        // this.changesRicercaPF$,
        this.changesPersonaFisica$, 
        // this.changesRicercaPG$,
        // TODO
        this.changesPersonaGiuridica$, (soggetto) => {
            let isValid;
            // console.log('[codiceTipoAltroSoggetto]', (<AltriSoggettiNoEsproprioDTO>soggetto).codiceTipoAltroSoggetto);
            // console.log('[soggettoNonIdentificato]', (<AltriSoggettiGiudiziarioDTO>soggetto).soggettoNonIdentificato);
            if (this.formControlSoggetto) {
                switch (soggetto.codiceTipoAltroSoggetto) {
                    case 'PRESUNTO_BENEFICIARIO':
                        // isValid = (<AltriSoggettiNoEsproprioDTO>soggetto).idPersona != null && this.tipoSoggetto.value;
                        isValid = soggetto.idPersona != null && this.tipoSoggetto.value;
                        break;
                    case 'AUTORITA_ORDINANTE':
                        // isValid = (<AltriSoggettiNoEsproprioDTO>soggetto).idPersona != null && this.tipoSoggetto.value;
                        isValid = soggetto.idPersona != null && this.tipoSoggetto.value;
                        break;
                    default:
                        isValid = true;
                }
            }
            else {
                soggetto.soggettoNonIdentificato ?
                    // isValid = true : isValid = (<AltriSoggettiGiudiziarioDTO>soggetto).idPersona != null
                    isValid = true : isValid = soggetto.idPersona != null;
            }
            // console.log('[idPersona]', (<AltriSoggettiNoEsproprioDTO>soggetto).idPersona)
            // console.log('[idPersona]', (<AltriSoggettiGiudiziarioDTO>soggetto).idPersona)
            return isValid;
        }, ComponentOutputStatus.of(valid, this.altriSoggetti));
        altriSoggetti$.subscribe((soggetto) => {
            // console.log('[AltriSoggettiComponent] altriSoggetti', soggetto);
            this.altriSoggetti = soggetto.output;
            this.altriSoggetti.idPersona = soggetto.output.idPersona;
            this.isFormValid = soggetto.status;
        });
    }
    resetValidation() {
        this.changesPersonaFisica$.next(ComponentOutputStatus.of(true, (personaFisica) => (sogg) => { }));
        this.changesPersonaGiuridica$.next(ComponentOutputStatus.of(true, (personaGiuridica) => (sogg) => { }));
    }
    initAltriSoggetti() {
        if (this.formControlSoggetto) {
            this.altriSoggetti = new AltriSoggettiNoEsproprioDTO();
        }
        else {
            this.altriSoggetti = new AltriSoggettiGiudiziarioDTO();
        }
    }
    // TODO
    viewPersona() {
        if (this.formControlSoggetto) {
            return !this.tipoSoggetto.value ||
                this.tipoSoggetto.value === "SOGGETTO_DA_IDENTIFICARE";
        }
        else {
            let showComponent;
            this.checkSoggetto$.subscribe(_ => {
                // console.log('[checkSoggetto]', _);
                showComponent = _.valueOf();
            });
            return showComponent;
        }
    }
    setSoggetto(tipo) {
        // console.log('[setDelega]', delega);
        // console.log('[isPersonaFisica]', this.isPersonaFisica(this.rappresentanza.codiceDelega))
        // console.log('[isPersonaGiuridica]', this.isPersonaGiuridica(this.rappresentanza.codiceDelega))
        // console.log('[codiceDelega]', this.rappresentanza.codiceDelega);
        this.resetSoggetti();
        if (this.isPersonaFisica(tipo)) {
            this.showComponentRicercaPF = true;
            this.showComponentRicercaPG = false;
        }
        if (this.isPersonaGiuridica(tipo)) {
            this.showComponentRicercaPF = false;
            this.showComponentRicercaPG = true;
        }
    }
    resetSoggetti() {
        if (!this.altriSoggetti) {
            this.initAltriSoggetti();
        }
        if (this.formControlSoggetto) {
            this.altriSoggetti.personaGiuridica = null;
            this.personaGiuridica = null;
            this.altriSoggetti.codiceRegione = '';
        }
        else {
            this.altriSoggetti.soggettoNonIdentificato = this.soggettoNonIdentificato.value;
            this.altriSoggetti.cognome = null;
            this.altriSoggetti.nome = null;
            this.altriSoggetti.codFiscale = null;
            this.altriSoggetti.comuneNascita = null;
            this.altriSoggetti.provinciaNascita = null;
            this.altriSoggetti.dataNascita = null;
        }
        this.altriSoggetti.idPersona = null;
        this.altriSoggetti.personaFisica = null;
        this.personaFisica = null;
    }
    isPersonaFisica(codiceSoggetto) {
        return (codiceSoggetto === "PRESUNTO_BENEFICIARIO");
    }
    isPersonaGiuridica(codiceSoggetto) {
        return (codiceSoggetto === 'AUTORITA_ORDINANTE');
    }
    ricercaPFReady(ricercaPFStatus) {
        // console.log('[ricercaPFReady]', ricercaPFStatus);
        this.changesRicercaPF$.next(ricercaPFStatus.mapValue((infoPF) => (sogg) => {
            this.getPersonaFisica(infoPF.id);
            if (!this.formControlSoggetto) {
                sogg.soggettoNonIdentificato = false;
            }
            sogg.idPersona = infoPF.id;
        }));
    }
    personaFisicaReady(personaFisicaStatus) {
        //console.log('[personaFisicaReady]', personaFisicaStatus);
        this.changesPersonaFisica$.next(personaFisicaStatus.mapValue((personaFisica) => (sogg) => {
            var _a, _b, _c, _d, _e, _f;
            const pf = new PersonaFisicaDTO();
            pf.infoAnagrafiche = personaFisica.infoAnagrafiche;
            pf.infoNascita = personaFisica.infoNascita;
            pf.id = personaFisica.id;
            if (personaFisica.id) {
                sogg.idPersona = personaFisica.id;
            }
            sogg.personaFisica = pf;
            if (!this.formControlSoggetto) {
                this.soggettoNonIdentificato.value ?
                    sogg.soggettoNonIdentificato = this.soggettoNonIdentificato.value :
                    sogg.soggettoNonIdentificato = false;
                sogg.cognome = (_a = personaFisica === null || personaFisica === void 0 ? void 0 : personaFisica.infoAnagrafiche) === null || _a === void 0 ? void 0 : _a.cognome;
                sogg.nome = (_b = personaFisica === null || personaFisica === void 0 ? void 0 : personaFisica.infoAnagrafiche) === null || _b === void 0 ? void 0 : _b.nome;
                sogg.codFiscale = (_c = personaFisica === null || personaFisica === void 0 ? void 0 : personaFisica.infoAnagrafiche) === null || _c === void 0 ? void 0 : _c.codFiscale;
                sogg.comuneNascita = (_d = personaFisica === null || personaFisica === void 0 ? void 0 : personaFisica.infoNascita) === null || _d === void 0 ? void 0 : _d.comuneNascita;
                sogg.provinciaNascita = (_e = personaFisica === null || personaFisica === void 0 ? void 0 : personaFisica.infoNascita) === null || _e === void 0 ? void 0 : _e.provinciaNascita;
                //TODO
                // (<AltriSoggettiGiudiziarioDTO>sogg).dataNascita = new Date(moment(personaFisica?.infoNascita?.dataNascita, "DD/MM/YYYY").toDate());
                // (<AltriSoggettiGiudiziarioDTO>sogg).dataNascita = moment(personaFisica?.infoNascita?.dataNascita, "DD/MM/YYYY").toDate();
                sogg.dataNascita = (_f = personaFisica === null || personaFisica === void 0 ? void 0 : personaFisica.infoNascita) === null || _f === void 0 ? void 0 : _f.dataNascita;
            }
        }));
    }
    ricercaPGReady(ricercaPGStatus) {
        // console.log('[ricercaPGReady]', ricercaPGStatus);
        this.changesRicercaPG$.next(ricercaPGStatus.mapValue((infoPG) => (sogg) => {
            this.getPersonaGiuridica(infoPG.datiPersonaGiuridica.id);
            sogg.idPersona = infoPG.datiPersonaGiuridica.id;
        }));
    }
    personaGiuridicaReady(personaGiuridicaStatus) {
        // console.log("[personaGiuridicaReady]", personaGiuridicaStatus);
        this.changesPersonaGiuridica$.next(personaGiuridicaStatus.mapValue((personaGiuridica) => (sogg) => {
            var _a, _b, _c;
            const pg = new PersonaGiuridicaDTO();
            pg.codiceFiscale = personaGiuridica.codiceFiscale;
            pg.ragioneSociale = personaGiuridica.ragioneSociale;
            pg.partitaIVA = personaGiuridica.partitaIVA;
            pg.idPersonaGiuridica = personaGiuridica.idPersonaGiuridica;
            sogg.idPersona = personaGiuridica.idPersonaGiuridica;
            sogg.personaGiuridica = pg;
            if (personaGiuridica.sedi != undefined) {
                sogg.codiceRegione = (_c = (_b = (_a = personaGiuridica === null || personaGiuridica === void 0 ? void 0 : personaGiuridica.sedi[0]) === null || _a === void 0 ? void 0 : _a.indirizzo) === null || _b === void 0 ? void 0 : _b.regione) === null || _c === void 0 ? void 0 : _c.sigla;
            }
        }));
    }
    getPersonaFisica(id) {
        this.showComponentRicercaPF = false;
        //debugger
        this.personaFisica$ = this.delegheService.getPersona(id)
            .pipe(shareReplay());
        this.pfSubscription = this.personaFisica$.pipe(
        // pluck("datiPersonaFisica")
        ).subscribe(
        // (pf: DatiPersonaFisica) => {
        (pf) => {
            var _a, _b;
            //console.log('[pf]', pf);
            this.personaFisica = this.mapperPersonaFisica(pf.datiPersonaFisica);
            // this.personaFisica = pf;
            this.altriSoggetti.codiceRegione = (_b = (_a = pf === null || pf === void 0 ? void 0 : pf.residenza) === null || _a === void 0 ? void 0 : _a.regione) === null || _b === void 0 ? void 0 : _b.sigla;
            //(<AltriSoggettiGiudiziarioDTO>this.altriSoggetti).personaFisica = this.personaFisica;
            this.altriSoggetti.idPersona = id;
            // this.showComponentRicercaPF = true;
            if (this.personaFisica) {
                setTimeout(() => this.showComponentRicercaPF = true, 0);
            }
            this.isSearching = true;
        }, _ => {
            this.modals.failure([
                "recupero.datipersonafisica.failure"
            ], []);
        });
    }
    getPersonaGiuridica(id) {
        this.personaGiuridica$ = this.delegheService.getDatiSocieta(id)
            .pipe(shareReplay());
        this.pgSubscription = this.personaGiuridica$.pipe(
        // pluck("datiPersonaGiuridica")
        ).subscribe((pg) => {
            // console.log('[pg]', pg);
            this.mapperPersonaGiuridica(pg);
            this.personaGiuridica = pg;
            // (<AltriSoggettiNoEsproprioDTO>this.altriSoggetti).idPersona = id;
            this.altriSoggetti.idPersona = id;
            this.showComponentRicercaPG = false;
            this.isSearching = true;
            if (pg.sedi != undefined) {
                const sede = pg.sedi.filter(sedeLegale => sedeLegale.tipoSede.codice === "LEGALE");
                this.altriSoggetti.codiceRegione = sede[0].indirizzo.regione.sigla;
            }
        }, _ => {
            this.modals.failure([
                "recupero.datipersonagiuridica.failure"
            ], []);
        });
    }
    mapperPersonaFisica(datiPersona) {
        //console.log('[mapperPersonaFisica]- datiPersona', datiPersona);
        const personaFisica = new PersonaFisicaDTO();
        const infoAnagrafiche = new InfoAnagrafichePFDTO();
        infoAnagrafiche.codFiscale = datiPersona.codFiscale;
        infoAnagrafiche.cognome = datiPersona.cognome;
        infoAnagrafiche.nome = datiPersona.nome;
        personaFisica.infoAnagrafiche = infoAnagrafiche;
        personaFisica.id = datiPersona.idPersona;
        const infoNascita = new InfoNascitaPFDTO();
        infoNascita.comuneNascita = datiPersona.comuneNascita;
        infoNascita.provinciaNascita = datiPersona.provinciaNascita;
        infoNascita.dataNascita = datiPersona.dataNascita;
        personaFisica.infoNascita = infoNascita;
        this.altriSoggetti.personaFisica = personaFisica;
        //console.log('[mapperPersonaFisica]- personaFisica', personaFisica);
        //console.log('[mapperPersonaFisica]- altriSoggetti', this.altriSoggetti.personaFisica);
        setTimeout(() => this.showComponentRicercaPF = true, 0);
        return personaFisica;
    }
    mapperPersonaGiuridica(datiPersona) {
        // console.log('[mapperPersonaGiuridica]', datiPersona);
        if (!this.altriSoggetti) {
            this.initAltriSoggetti();
        }
        const personaGiuridica = new PersonaGiuridicaDTO();
        personaGiuridica.codiceFiscale = datiPersona.datiPersonaGiuridica.codiceFiscale;
        personaGiuridica.ragioneSociale = datiPersona.datiPersonaGiuridica.ragioneSociale;
        personaGiuridica.partitaIVA = datiPersona.datiPersonaGiuridica.partitaIVA;
        this.altriSoggetti.personaGiuridica = personaGiuridica;
    }
    enableSearch() {
        this.resetSoggetti();
        // console.log('[enableSearch] - codiceSoggetto:', (<AltriSoggettiNoEsproprioDTO>this.altriSoggetti).codiceTipoAltroSoggetto);
        // console.log('[enableSearch] - soggettoNonIdentificato:', (<AltriSoggettiGiudiziarioDTO>this.altriSoggetti).soggettoNonIdentificato);
        if (this.altriSoggetti.codiceTipoAltroSoggetto) {
            this.tipoSoggetto.setValue(this.altriSoggetti.codiceTipoAltroSoggetto);
            if (this.isPersonaFisica(this.altriSoggetti.codiceTipoAltroSoggetto)) {
                setTimeout(() => this.showComponentRicercaPF = true, 0);
            }
            if (this.isPersonaGiuridica(this.altriSoggetti.codiceTipoAltroSoggetto)) {
                setTimeout(() => this.showComponentRicercaPG = true, 0);
            }
        }
        else {
            this.soggettoNonIdentificato.setValue(this.altriSoggetti.soggettoNonIdentificato);
            setTimeout(() => this.showComponentRicercaPF = true, 0);
        }
    }
    forward(_) {
        this.nextStep.emit(this.altriSoggetti);
    }
    backward($event) {
        this.previousStep.emit(this.altriSoggetti);
    }
    complete($event) { }
    onSalvaBozza($event) {
        this.salvaBozza.emit(this.altriSoggetti);
    }
    ngOnDestroy() {
        if (this.altriSoggettiChangedSub) {
            this.altriSoggettiChangedSub.unsubscribe();
        }
    }
}
AltriSoggettiComponent.decorators = [
    { type: Component, args: [{
                selector: 'lib-altri-soggetti',
                template: "<!-- <p>altri-soggetti works!</p> -->\r\n<div class=\"mt-3 mb-5\">\r\n\t<mat-expansion-panel class=\"panel\" [expanded]=\"true\">\r\n\t\t<mat-expansion-panel-header [collapsedHeight]=\"'48px'\" [expandedHeight]=\"'48px'\" class=\"custom-header\">\r\n\t\t\t<mat-panel-title>\r\n\t\t\t\t<!-- <h3>{{'altri-soggetti' | traduzione}}</h3> -->\r\n\r\n\t\t\t\t<div *ngIf=\"!formControlSoggetto\">\r\n\t\t\t\t\t<h3 class=\"h5 mb-0\"><info-tip-label label=\"altri-soggetti\"></info-tip-label></h3>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div *ngIf=\"formControlSoggetto\">\r\n\t\t\t\t\t<h3 class=\"h5 mb-0\"><info-tip-label label=\"altri-soggetti-interessati\"></info-tip-label></h3>\r\n\t\t\t\t</div>\r\n\t\t\t</mat-panel-title>\r\n\t\t</mat-expansion-panel-header>\r\n\t\t<form [formGroup]=\"form\">\r\n\t\t\t<div class=\"collapse-body mt-2\">\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t<div *ngIf=\"formControlSoggetto\" class=\"col-md-4\">\r\n\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t<mat-label>{{'required'| traduzione}}{{'soggetto' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t\t<mat-select placeholder=\"{{'seleziona' | traduzione}}\" formControlName=\"tipoSoggetto\">\r\n\t\t\t\t\t\t\t\t<mat-option *ngFor=\"let soggetto of tipologieSoggetto$ | async\"\r\n\t\t\t\t\t\t\t\t\t[value]=\"soggetto.codice\">\r\n\t\t\t\t\t\t\t\t\t{{soggetto.descrizione}}\r\n\t\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t\t<mat-error *ngIf=\"form.controls['tipoSoggetto'].invalid\">\r\n\t\t\t\t\t\t\t\t{{msg.produceMessage('obbligatorio', form.controls['tipoSoggetto']) | traduzione}}\r\n\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t\t<mat-hint *infoTip=\"'soggetto'\"></mat-hint>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"!formControlSoggetto\" class=\"col-md-4\">\r\n\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\t\t\tformControlName=\"soggettoNonIdentificato\">\r\n\t\t\t\t\t\t\t\t{{'soggetto-non-identificato' | traduzione }}\r\n\t\t\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t\t\t\t<mat-hint *infoTip=\"'soggetto-non-identificato'\"></mat-hint>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-md-8\">\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t*ngIf=\"isSearching && !showComponentRicercaPF && !showComponentRicercaPG\"\r\n\t\t\t\t\t\t\tmat-flat-button color=\"primary\"\r\n\t\t\t\t\t\t\tclass=\"text-uppercase mb-2\"\r\n\t\t\t\t\t\t\t(click)=\"enableSearch()\"\r\n\t\t\t\t\t\t\t> {{'ricerca' | traduzione}}\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<!-- TODO -->\r\n\t\t\t\t<!-- <lib-info-pf *ngIf=\"!viewPersona() \" -->\r\n\t\t\t\t<!-- <lib-info-pf *ngIf=\"!(checkSoggetto$ | async)\" -->\r\n\t\t\t\t<!-- <lib-info-pf *ngIf=\"!viewPersona()\"\r\n\t\t\t\t\t[cfDifferentFrom]=\"cfDifferentFrom\"\r\n\t\t\t\t\t[namespace]=\"namespaceInfoPf\"\r\n\t\t\t\t\t(done)=\"infoPfReady2($event)\"\r\n\t\t\t\t\t[infopf]=\"altriSoggetti\"\r\n\t\t\t\t\t[readOnly]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-info-pf> -->\r\n\t\t\t\t<div class=\"mt-4\"></div>\r\n\t\t\t\t<!-- <lib-ricerca-pf\r\n\t\t\t\t\t*ngIf=\"showComponentRicercaPF\"\r\n\t\t\t\t\t[namespace]=\"namespaceInfoPf\"\r\n\t\t\t\t\t[readOnly]=\"false\"\r\n\t\t\t\t\t(done)=\"ricercaPFReady($event)\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-ricerca-pf>\r\n\t\t\t\t<lib-info-pf\r\n\t\t\t\t\t*ngIf=\"personaFisica\"\r\n\t\t\t\t\t[cfDifferentFrom]=\"cfDifferentFrom\"\r\n\t\t\t\t\t[namespace]=\"namespaceInfoPf\"\r\n\t\t\t\t\t[infopf]=\"altriSoggetti?.personaFisica?.infoAnagrafiche\"\r\n\t\t\t\t\t[readOnly]=\"true\"\r\n\t\t\t\t\t[validatorFormControl]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-info-pf> -->\r\n\t\t\t\t<lib-persona-fisica\r\n\t\t\t\t\t*ngIf=\"showComponentRicercaPF\"\r\n\t\t\t\t\t(done)=\"personaFisicaReady($event)\"\r\n\t\t\t\t\t[nazioni]=\"nazioni\"\r\n\t\t\t\t\t[province]=\"province\"\r\n\t\t\t\t\t[namespace]=\"namespaceInfoPf\"\r\n\t\t\t\t\t[infoPersonaFisica]=\"altriSoggetti?.personaFisica\"\r\n\t\t\t\t\t[idDelega]=\"null\"\r\n\t\t\t\t\t[validatorFormControl]=\"true\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-persona-fisica>\r\n\t\t\t\t<!-- <lib-ricerca-pg\r\n\t\t\t\t\t*ngIf=\"showComponentRicercaPG\"\r\n\t\t\t\t\t[namespace]=\"nspg\"\r\n\t\t\t\t\t[readOnly]=\"false\"\r\n\t\t\t\t\t(done)=\"ricercaPGReady($event)\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-ricerca-pg>\r\n\t\t\t\t<lib-persona-giuridica\r\n\t\t\t\t\t*ngIf=\"personaGiuridica\"\r\n\t\t\t\t\t[namespace]=\"nspg\"\r\n\t\t\t\t\t[datisocieta]=\"altriSoggetti?.personaGiuridica\"\r\n\t\t\t\t\t[idDelega]=\"altriSoggetti.idPersona\"\r\n\t\t\t\t\t[validatorFormControl]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-persona-giuridica> -->\r\n\t\t\t\t<!-- TODO -->\r\n\t\t\t\t<lib-persona-giuridica\r\n\t\t\t\t\t*ngIf=\"showComponentRicercaPG\"\r\n\t\t\t\t\t(done)=\"personaGiuridicaReady($event)\"\r\n\t\t\t\t\t[namespace]=\"nspg\"\r\n\t\t\t\t\t[datisocieta]=\"altriSoggetti?.personaGiuridica\"\r\n\t\t\t\t\t[idDelega]=\"null\"\r\n\t\t\t\t\t[validatorFormControl]=\"false\"\r\n\t\t\t\t\t[gestioneSedi]=\"false\"\r\n\t\t\t\t\t[couldBeDittaIndividuale]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t</lib-persona-giuridica>\r\n\t\t\t</div>\r\n\t\t</form>\r\n\t</mat-expansion-panel>\r\n\t<div class=\"mt-4\"></div>\r\n\t<lib-stepper-navigator\r\n\t\t[form]=\"form\"\r\n\t\t[direction]=\"direction\"\r\n\t\t[isFinal]=\"isFinal\"\r\n\t\t[isContainerValid]=\"isFormValid\"\r\n\t\t(goForward)=\"forward($event)\"\r\n\t\t(goBackward)=\"backward($event)\"\r\n\t\t(salvaBozza)=\"onSalvaBozza($event)\"\r\n\t\t(complete)=\"complete($event)\"\r\n\t>\r\n\t</lib-stepper-navigator>\r\n</div>\r\n",
                styles: [""]
            },] }
];
AltriSoggettiComponent.ctorParameters = () => [
    { type: DelegheService },
    { type: Modals },
    { type: MessageService }
];
AltriSoggettiComponent.propDecorators = {
    altriSoggetti: [{ type: Input }],
    tipologieSoggetto$: [{ type: Input }],
    cfDifferentFrom: [{ type: Input }],
    namespace: [{ type: Input }],
    formControlSoggetto: [{ type: Input }],
    province: [{ type: Input }],
    nazioni: [{ type: Input }],
    nextStep: [{ type: Output }],
    salvaBozza: [{ type: Output }],
    previousStep: [{ type: Output }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWx0cmktc29nZ2V0dGkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkQ6L1Byb2dldHRpL0RBRy9zb3JnZW50aS9naXRsYWItdGVybmkvY29tbW9uLWNvbXBvbmVudC1saWIvcHJvamVjdHMvcG9ydGFsLWNvbW1vbi1jb21wb25lbnQtbGliL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9kZXBvc2l0aS9jb21wb25lbnRzL2FsdHJpLXNvZ2dldHRpL2FsdHJpLXNvZ2dldHRpLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRSxPQUFPLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsR0FBRyxFQUFTLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUt6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdD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QUs7dUJBR0wsTUFBTTt5QkFJTixNQUFNOzJCQUlOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHBsdWNrLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWx0cmktc29nZ2V0dGktZ2l1ZGl6aWFyaW8tZHRvJztcclxuaW1wb3J0IHsgQWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FsdHJpLXNvZ2dldHRpLW5vLWVzcHJvcHJpby1kdG8nO1xyXG5pbXBvcnQgeyBJbmZvQW5hZ3JhZmljaGVQRkRUTyB9IGZyb20gJy4uLy4uL21vZGVscy9pbmZvLWFuYWdyYWZpY2hlLXBmJztcclxuaW1wb3J0IHsgSW5mb05hc2NpdGFQRkRUTyB9IGZyb20gJy4uLy4uL21vZGVscy9pbmZvLW5hc2NpdGEtcGYuZHRvJztcclxuaW1wb3J0IHsgUGVyc29uYUZpc2ljYURUTyB9IGZyb20gJy4uLy4uL21vZGVscy9wZXJzb25hLWZpc2ljYS1kdG8nO1xyXG5pbXBvcnQgeyBQZXJzb25hR2l1cmlkaWNhRFRPIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BlcnNvbmEtZ2l1cmlkaWNhLWR0byc7XHJcbmltcG9ydCB7IERhdGlQZXJzb25hRmlzaWNhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BvcnRhbGUvZGF0aS1wZXJzb25hLWZpc2ljYSc7XHJcbmltcG9ydCB7IFBlcnNvbmFGaXNpY2EgfSBmcm9tICcuLi8uLi9tb2RlbHMvcG9ydGFsZS9wZXJzb25hLWZpc2ljYS1tb2RlbCc7XHJcbmltcG9ydCB7IFBlcnNvbmFHaXVyaWRpY2EgfSBmcm9tICcuLi8uLi9tb2RlbHMvcG9ydGFsZS9wZXJzb25hLWdpdXJpZGljYS1tb2RlbCc7XHJcbmltcG9ydCB7IFRpcG9sb2dpY2FEVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvdGlwb2xvZ2ljYS1kLXQtbyc7XHJcbmltcG9ydCB7IENvbXBvbmVudE91dHB1dFN0YXR1cyB9IGZyb20gJy4uLy4uL25vcm1hbGl6emF6aW9uZS9jb21wb25lbnQtb3V0cHV0LXN0YXR1cyc7XHJcbmltcG9ydCB7IERlbGVnaGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGVsZWdoZS1zZXJ2aWNlcy9kZWxlZ2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudFJlZHVjZXIgfSBmcm9tICcuLi8uLi91dGlscy9jb21wb25lbnQtcmVkdWNlcic7XHJcbmltcG9ydCB7IE1vZGFscyB9IGZyb20gJy4uLy4uL3V0aWxzL21vZGFscyc7XHJcbmltcG9ydCB7IExvY2FsaXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BvcnRhbGUvbG9jYWxpdGEnO1xyXG5pbXBvcnQgeyBOYXppb25lIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BvcnRhbGUvbmF6aW9uZSc7XHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnbGliLWFsdHJpLXNvZ2dldHRpJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vYWx0cmktc29nZ2V0dGkuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2FsdHJpLXNvZ2dldHRpLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWx0cmlTb2dnZXR0aUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcblx0Zm9ybTogRm9ybUdyb3VwO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGFsdHJpU29nZ2V0dGk6IEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTyB8IEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTztcclxuXHJcblx0QElucHV0KClcclxuXHR0aXBvbG9naWVTb2dnZXR0byQ6IE9ic2VydmFibGU8QXJyYXk8VGlwb2xvZ2ljYURUTz4+O1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGNmRGlmZmVyZW50RnJvbTogc3RyaW5nO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdG5hbWVzcGFjZTogc3RyaW5nO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGZvcm1Db250cm9sU29nZ2V0dG86IGJvb2xlYW47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0cHJvdmluY2U6IE9ic2VydmFibGU8QXJyYXk8TG9jYWxpdGE+PjtcclxuXHJcblx0QElucHV0KClcclxuXHRuYXppb25pOiBPYnNlcnZhYmxlPEFycmF5PE5hemlvbmU+PjtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0bmV4dFN0ZXA6IEV2ZW50RW1pdHRlcjxBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8gfCBBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+XHJcblx0XHQ9IG5ldyBFdmVudEVtaXR0ZXI8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPIHwgQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPigpO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRzYWx2YUJvenphOiBFdmVudEVtaXR0ZXI8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPIHwgQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPlxyXG5cdFx0PSBuZXcgRXZlbnRFbWl0dGVyPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTyB8IEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz4oKTtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0cHJldmlvdXNTdGVwOiBFdmVudEVtaXR0ZXI8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPIHwgQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPlxyXG5cdFx0PSBuZXcgRXZlbnRFbWl0dGVyPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTyB8IEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz4oKTtcclxuXHJcblx0Ly9UT0RPXHJcblx0Ly8gY2hhbmdlc1BGJCA9IG5ldyBTdWJqZWN0PFxyXG5cdC8vIFx0Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPKSA9PiB2b2lkPlxyXG5cdC8vID4oKTtcclxuXHJcblx0Ly9UT0RPXHJcblx0Ly8gY2hhbmdlc1BGMiQgPSBuZXcgU3ViamVjdDxcclxuXHQvLyBcdENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTykgPT4gdm9pZD5cclxuXHQvLyA+KCk7XHJcblxyXG5cdGNoYW5nZXNSaWNlcmNhUEckID0gbmV3IFN1YmplY3Q8XHJcblx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8pID0+IHZvaWQ+XHJcblx0PigpO1xyXG5cclxuXHRjaGFuZ2VzUmljZXJjYVBGJCA9IG5ldyBTdWJqZWN0PFxyXG5cdFx0Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogQWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPKSA9PiB2b2lkPlxyXG5cdD4oKTtcclxuXHJcblx0Y2hhbmdlc1BlcnNvbmFHaXVyaWRpY2EkID0gbmV3IFN1YmplY3Q8XHJcblx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8pID0+IHZvaWQ+XHJcblx0PigpO1xyXG5cclxuXHRjaGFuZ2VzUGVyc29uYUZpc2ljYSQgPSBuZXcgU3ViamVjdDxcclxuXHRcdENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTyB8IEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTykgPT4gdm9pZD5cclxuXHQ+KCk7XHJcblxyXG5cdG5hbWVzcGFjZUluZm9QZjogc3RyaW5nO1xyXG5cclxuXHRhbHRyaVNvZ2dldHRpQ2hhbmdlZFN1YjogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHR0aXBvU29nZ2V0dG86IEZvcm1Db250cm9sO1xyXG5cdHNvZ2dldHRvTm9uSWRlbnRpZmljYXRvOiBGb3JtQ29udHJvbDtcclxuXHJcblx0Y2hlY2tTb2dnZXR0byQ6IE9ic2VydmFibGU8Qm9vbGVhbj47XHJcblxyXG5cdHRpcG9Tb2dnZXR0byQ6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuXHJcblx0ZGlyZWN0aW9uOiBzdHJpbmcgPSBcImJvdGgtd2F5c1wiO1xyXG5cdGlzRmluYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRpc0Zvcm1WYWxpZDogYm9vbGVhbjtcclxuXHJcblx0c2hvd0NvbXBvbmVudFJpY2VyY2FQRjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHNob3dDb21wb25lbnRSaWNlcmNhUEc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRpc1NlYXJjaGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvLyBwZXJzb25hR2l1cmlkaWNhOiBQZXJzb25hR2l1cmlkaWNhO1xyXG5cdHBlcnNvbmFHaXVyaWRpY2E6IGFueTtcclxuXHRwZXJzb25hR2l1cmlkaWNhJDogT2JzZXJ2YWJsZTxQZXJzb25hR2l1cmlkaWNhPjtcclxuXHQvLyBwZXJzb25hRmlzaWNhOiBEYXRpUGVyc29uYUZpc2ljYTtcclxuXHRwZXJzb25hRmlzaWNhOiBQZXJzb25hRmlzaWNhRFRPO1xyXG5cdHBlcnNvbmFGaXNpY2EkOiBPYnNlcnZhYmxlPFBlcnNvbmFGaXNpY2E+O1xyXG5cclxuXHRwZlN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHRwZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cdG5zcGc6IHN0cmluZztcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIGRlbGVnaGVTZXJ2aWNlOiBEZWxlZ2hlU2VydmljZSxcclxuXHRcdHByaXZhdGUgbW9kYWxzOiBNb2RhbHMsXHJcblx0XHRwcml2YXRlIG1zZzogTWVzc2FnZVNlcnZpY2VcclxuXHQpIHsgfVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHJcblx0XHQvL2NvbnNvbGUubG9nKCdbQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPIC0gQWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPXScsIHRoaXMuYWx0cmlTb2dnZXR0aSk7XHJcblxyXG5cdFx0dGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblx0XHRsZXQgdmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHRcdHRoaXMubnNwZyA9IFwibnNSYXBwckxlZ3BnXCI7XHJcblxyXG5cdFx0aWYgKCF0aGlzLmFsdHJpU29nZ2V0dGkpIHtcclxuXHRcdFx0dGhpcy5pbml0QWx0cmlTb2dnZXR0aSgpO1xyXG5cdFx0XHR2YWxpZCA9IGZhbHNlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKHRoaXMuZm9ybUNvbnRyb2xTb2dnZXR0bykge1xyXG5cdFx0XHRcdHRoaXMucGVyc29uYUdpdXJpZGljYSA9ICg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkucGVyc29uYUdpdXJpZGljYTtcclxuXHRcdFx0XHRpZiAodGhpcy5wZXJzb25hR2l1cmlkaWNhKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEcgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy5wZXJzb25hRmlzaWNhID0gKDxBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKS5wZXJzb25hRmlzaWNhO1xyXG5cdFx0XHRcdGlmICh0aGlzLnBlcnNvbmFGaXNpY2EpIHtcclxuXHRcdFx0XHRcdHRoaXMuc2hvd0NvbXBvbmVudFJpY2VyY2FQRiA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoKDxBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKS5jb2RpY2VUaXBvQWx0cm9Tb2dnZXR0byA9PT0gJ1NPR0dFVFRPX0RBX0lERU5USUZJQ0FSRScpIHtcclxuXHRcdFx0XHRcdCg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuY29kaWNlUmVnaW9uZSA9ICcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKCEoKDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKS5zb2dnZXR0b05vbklkZW50aWZpY2F0bykpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wZXJzb25hRmlzaWNhID0gdGhpcy5tYXBwZXJQZXJzb25hRmlzaWNhKDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudGlwb1NvZ2dldHRvID0gbmV3IEZvcm1Db250cm9sKFxyXG5cdFx0XHR7IHZhbHVlOiAoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmNvZGljZVRpcG9BbHRyb1NvZ2dldHRvLCBkaXNhYmxlZDogZmFsc2UgfSxcclxuXHRcdFx0W1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcclxuXHRcdHRoaXMuZm9ybS5hZGRDb250cm9sKCd0aXBvU29nZ2V0dG8nLCB0aGlzLnRpcG9Tb2dnZXR0byk7XHJcblxyXG5cdFx0dGhpcy5zb2dnZXR0b05vbklkZW50aWZpY2F0byA9IG5ldyBGb3JtQ29udHJvbChcclxuXHRcdFx0eyB2YWx1ZTogKDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKS5zb2dnZXR0b05vbklkZW50aWZpY2F0bywgZGlzYWJsZWQ6IGZhbHNlIH0pO1xyXG5cdFx0dGhpcy5mb3JtLmFkZENvbnRyb2woJ3NvZ2dldHRvTm9uSWRlbnRpZmljYXRvJywgdGhpcy5zb2dnZXR0b05vbklkZW50aWZpY2F0byk7XHJcblxyXG5cdFx0dGhpcy5uYW1lc3BhY2VJbmZvUGYgPSB0aGlzLm5hbWVzcGFjZSArIFwiaW5mb1BGXCI7XHJcblxyXG5cdFx0aWYgKCF0aGlzLmZvcm1Db250cm9sU29nZ2V0dG8pIHtcclxuXHRcdFx0aWYgKCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8pIHtcclxuXHRcdFx0XHR0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEYgPSBmYWxzZTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEYgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5jaGVja1NvZ2dldHRvJCA9IHRoaXMuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8udmFsdWVDaGFuZ2VzLnBpcGUoXHJcblx0XHRcdC8vIHRhcChjaGVja1NvZ2dldHRvID0+IGNvbnNvbGUubG9nKCdbY2hlY2tTb2dnZXR0byRdIC0gc29nZ2V0dG9Ob25JZGVudGlmaWNhdG86JywgY2hlY2tTb2dnZXR0bykpLFxyXG5cdFx0XHR0YXAoKGNoZWNrU29nZ2V0dG8pID0+IHtcclxuXHRcdFx0XHRpZiAoIWNoZWNrU29nZ2V0dG8pIHtcclxuXHRcdFx0XHRcdHRoaXMuc2hvd0NvbXBvbmVudFJpY2VyY2FQRiA9IHRydWU7XHJcblx0XHRcdFx0XHR0aGlzLmlzU2VhcmNoaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMucmVzZXRTb2dnZXR0aSgpO1xyXG5cdFx0XHRcdFx0dGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBGID0gZmFsc2U7XHJcblx0XHRcdFx0XHR0aGlzLmlzU2VhcmNoaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KSxcclxuXHRcdFx0c2hhcmVSZXBsYXkoKSk7XHJcblxyXG5cdFx0Y29uc3QgY2hhbmdlc0NoZWNrU29nZ2V0dG8kOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czxcclxuXHRcdFx0KHZhbHVlOiBBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8pID0+IHZvaWRcclxuXHRcdD4+ID0gdGhpcy5jaGVja1NvZ2dldHRvJC5waXBlKFxyXG5cdFx0XHQvLyB0YXAoY2hlY2tTb2dnZXR0byA9PiBjb25zb2xlLmxvZygnW2NoYW5nZXNDaGVja1NvZ2dldHRvJF0gLSBzb2dnZXR0b05vbklkZW50aWZpY2F0bzonLCBjaGVja1NvZ2dldHRvKSksXHJcblx0XHRcdG1hcCgoY2hlY2tTb2dnZXR0bykgPT4ge1xyXG5cdFx0XHRcdHRoaXMuY2hhbmdlc1BlcnNvbmFGaXNpY2EkLm5leHQoXHJcblx0XHRcdFx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXMub2YodHJ1ZSwgKHBlcnNvbmFGaXNpY2EpID0+IChzb2dnOiBBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8pID0+IHt9KSk7XHJcblx0XHRcdFx0cmV0dXJuIENvbXBvbmVudE91dHB1dFN0YXR1cy5vZih0cnVlLFxyXG5cdFx0XHRcdFx0KHNvZ2dldHRvOiBBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8pID0+IChzb2dnZXR0by5zb2dnZXR0b05vbklkZW50aWZpY2F0byA9IGNoZWNrU29nZ2V0dG8pXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy50aXBvU29nZ2V0dG8kID0gdGhpcy50aXBvU29nZ2V0dG8udmFsdWVDaGFuZ2VzLnBpcGUoXHJcblx0XHRcdC8vIHRhcCh0aXBvID0+IGNvbnNvbGUubG9nKCdbdGlwb1NvZ2dldHRvJF0gLSBjb2RpY2VTb2dnZXR0bzonLCB0aXBvKSksXHJcblx0XHRcdHRhcCgodGlwbykgPT4ge1xyXG5cdFx0XHRcdGlmICh0aXBvICE9ICdTT0dHRVRUT19EQV9JREVOVElGSUNBUkUnKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNldFNvZ2dldHRvKHRpcG8pO1xyXG5cdFx0XHRcdFx0dGhpcy5pc1NlYXJjaGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnJlc2V0U29nZ2V0dGkoKTtcclxuXHRcdFx0XHRcdHRoaXMuc2hvd0NvbXBvbmVudFJpY2VyY2FQRiA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0dGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBHID0gZmFsc2U7XHJcblx0XHRcdFx0XHR0aGlzLmlzU2VhcmNoaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHR0aGlzLnJlc2V0VmFsaWRhdGlvbigpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSksXHJcblx0XHRcdHNoYXJlUmVwbGF5KClcclxuXHRcdCk7XHJcblxyXG5cdFx0Y29uc3QgdGlwb1NvZ2dldHRvQ2hhbmdlcyQ6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPFxyXG5cdFx0XHQodmFsdWU6IEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTykgPT4gdm9pZFxyXG5cdFx0Pj4gPSB0aGlzLnRpcG9Tb2dnZXR0byQucGlwZShcclxuXHRcdFx0Ly8gdGFwKHRpcG9Tb2dnZXR0b0NoYW5nZXMgPT4gY29uc29sZS5sb2coJ1t0aXBvU29nZ2V0dG9DaGFuZ2VzJF0gLSBjb2RpY2VUaXBvQWx0cm9Tb2dnZXR0bzonLCB0aXBvU29nZ2V0dG9DaGFuZ2VzKSksXHJcblx0XHRcdG1hcCgodGlwbykgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBDb21wb25lbnRPdXRwdXRTdGF0dXMub2YoXHJcblx0XHRcdFx0XHR0aGlzLnRpcG9Tb2dnZXR0by52YWxpZCxcclxuXHRcdFx0XHRcdChzb2c6IEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTykgPT4gKHNvZy5jb2RpY2VUaXBvQWx0cm9Tb2dnZXR0byA9IHRpcG8pXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0Y29uc3QgYWx0cmlTb2dnZXR0aSQgPSBDb21wb25lbnRSZWR1Y2VyLnJlZHVjZXI0KFxyXG5cdFx0XHR0aXBvU29nZ2V0dG9DaGFuZ2VzJCxcclxuXHRcdFx0Y2hhbmdlc0NoZWNrU29nZ2V0dG8kLFxyXG5cdFx0XHQvLyBUT0RPXHJcblx0XHRcdC8vIHRoaXMuY2hhbmdlc1JpY2VyY2FQRiQsXHJcblx0XHRcdHRoaXMuY2hhbmdlc1BlcnNvbmFGaXNpY2EkLFxyXG5cdFx0XHQvLyB0aGlzLmNoYW5nZXNSaWNlcmNhUEckLFxyXG5cdFx0XHQvLyBUT0RPXHJcblx0XHRcdHRoaXMuY2hhbmdlc1BlcnNvbmFHaXVyaWRpY2EkLFxyXG5cdFx0XHQoc29nZ2V0dG8pID0+IHtcclxuXHRcdFx0XHRsZXQgaXNWYWxpZDogYm9vbGVhbjtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygnW2NvZGljZVRpcG9BbHRyb1NvZ2dldHRvXScsICg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnNvZ2dldHRvKS5jb2RpY2VUaXBvQWx0cm9Tb2dnZXR0byk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ1tzb2dnZXR0b05vbklkZW50aWZpY2F0b10nLCAoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5zb2dnZXR0bykuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8pO1xyXG5cdFx0XHRcdGlmICh0aGlzLmZvcm1Db250cm9sU29nZ2V0dG8pIHtcclxuXHRcdFx0XHRcdHN3aXRjaCAoKDxBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8+c29nZ2V0dG8pLmNvZGljZVRpcG9BbHRyb1NvZ2dldHRvKSB7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ1BSRVNVTlRPX0JFTkVGSUNJQVJJTyc6XHJcblx0XHRcdFx0XHRcdFx0Ly8gaXNWYWxpZCA9ICg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnNvZ2dldHRvKS5pZFBlcnNvbmEgIT0gbnVsbCAmJiB0aGlzLnRpcG9Tb2dnZXR0by52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRpc1ZhbGlkID0gc29nZ2V0dG8uaWRQZXJzb25hICE9IG51bGwgJiYgdGhpcy50aXBvU29nZ2V0dG8udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ0FVVE9SSVRBX09SRElOQU5URSc6XHJcblx0XHRcdFx0XHRcdFx0Ly8gaXNWYWxpZCA9ICg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnNvZ2dldHRvKS5pZFBlcnNvbmEgIT0gbnVsbCAmJiB0aGlzLnRpcG9Tb2dnZXR0by52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRpc1ZhbGlkID0gc29nZ2V0dG8uaWRQZXJzb25hICE9IG51bGwgJiYgdGhpcy50aXBvU29nZ2V0dG8udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0aXNWYWxpZCA9IHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnNvZ2dldHRvKS5zb2dnZXR0b05vbklkZW50aWZpY2F0byA/XHJcblx0XHRcdFx0XHRcdC8vIGlzVmFsaWQgPSB0cnVlIDogaXNWYWxpZCA9ICg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnNvZ2dldHRvKS5pZFBlcnNvbmEgIT0gbnVsbFxyXG5cdFx0XHRcdFx0XHRpc1ZhbGlkID0gdHJ1ZSA6IGlzVmFsaWQgPSBzb2dnZXR0by5pZFBlcnNvbmEgIT0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ1tpZFBlcnNvbmFdJywgKDxBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8+c29nZ2V0dG8pLmlkUGVyc29uYSlcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygnW2lkUGVyc29uYV0nLCAoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5zb2dnZXR0bykuaWRQZXJzb25hKVxyXG5cdFx0XHRcdHJldHVybiBpc1ZhbGlkO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXMub2YodmFsaWQsIHRoaXMuYWx0cmlTb2dnZXR0aSlcclxuXHRcdClcclxuXHJcblx0XHRhbHRyaVNvZ2dldHRpJC5zdWJzY3JpYmUoKHNvZ2dldHRvOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPIHwgQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPikgPT4ge1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZygnW0FsdHJpU29nZ2V0dGlDb21wb25lbnRdIGFsdHJpU29nZ2V0dGknLCBzb2dnZXR0byk7XHJcblx0XHRcdHRoaXMuYWx0cmlTb2dnZXR0aSA9IHNvZ2dldHRvLm91dHB1dDtcclxuXHRcdFx0dGhpcy5hbHRyaVNvZ2dldHRpLmlkUGVyc29uYSA9IHNvZ2dldHRvLm91dHB1dC5pZFBlcnNvbmE7XHJcblx0XHRcdHRoaXMuaXNGb3JtVmFsaWQgPSBzb2dnZXR0by5zdGF0dXM7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHJlc2V0VmFsaWRhdGlvbigpIHtcclxuXHRcdHRoaXMuY2hhbmdlc1BlcnNvbmFGaXNpY2EkLm5leHQoXHJcblx0XHRcdENvbXBvbmVudE91dHB1dFN0YXR1cy5vZih0cnVlLCAocGVyc29uYUZpc2ljYSkgPT4gKHNvZ2c6IEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTykgPT4geyB9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmNoYW5nZXNQZXJzb25hR2l1cmlkaWNhJC5uZXh0KFxyXG5cdFx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXMub2YodHJ1ZSwgKHBlcnNvbmFHaXVyaWRpY2EpID0+IChzb2dnOiBBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8pID0+IHsgfSlcclxuXHRcdClcclxuXHR9XHJcblxyXG5cdGluaXRBbHRyaVNvZ2dldHRpKCkge1xyXG5cdFx0aWYgKHRoaXMuZm9ybUNvbnRyb2xTb2dnZXR0bykge1xyXG5cdFx0XHR0aGlzLmFsdHJpU29nZ2V0dGkgPSBuZXcgQWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmFsdHJpU29nZ2V0dGkgPSBuZXcgQWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPXHJcblx0cHVibGljIHZpZXdQZXJzb25hKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKHRoaXMuZm9ybUNvbnRyb2xTb2dnZXR0bykge1xyXG5cdFx0XHRyZXR1cm4gIXRoaXMudGlwb1NvZ2dldHRvLnZhbHVlIHx8XHJcblx0XHRcdFx0dGhpcy50aXBvU29nZ2V0dG8udmFsdWUgPT09IFwiU09HR0VUVE9fREFfSURFTlRJRklDQVJFXCJcclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRsZXQgc2hvd0NvbXBvbmVudDogYm9vbGVhbjtcclxuXHRcdFx0dGhpcy5jaGVja1NvZ2dldHRvJC5zdWJzY3JpYmUoXyA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ1tjaGVja1NvZ2dldHRvXScsIF8pO1xyXG5cdFx0XHRcdHNob3dDb21wb25lbnQgPSBfLnZhbHVlT2YoKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHJldHVybiBzaG93Q29tcG9uZW50O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0c2V0U29nZ2V0dG8odGlwbzogc3RyaW5nKSB7XHJcblx0XHQvLyBjb25zb2xlLmxvZygnW3NldERlbGVnYV0nLCBkZWxlZ2EpO1xyXG5cdFx0Ly8gY29uc29sZS5sb2coJ1tpc1BlcnNvbmFGaXNpY2FdJywgdGhpcy5pc1BlcnNvbmFGaXNpY2EodGhpcy5yYXBwcmVzZW50YW56YS5jb2RpY2VEZWxlZ2EpKVxyXG5cdFx0Ly8gY29uc29sZS5sb2coJ1tpc1BlcnNvbmFHaXVyaWRpY2FdJywgdGhpcy5pc1BlcnNvbmFHaXVyaWRpY2EodGhpcy5yYXBwcmVzZW50YW56YS5jb2RpY2VEZWxlZ2EpKVxyXG5cdFx0Ly8gY29uc29sZS5sb2coJ1tjb2RpY2VEZWxlZ2FdJywgdGhpcy5yYXBwcmVzZW50YW56YS5jb2RpY2VEZWxlZ2EpO1xyXG5cclxuXHRcdHRoaXMucmVzZXRTb2dnZXR0aSgpO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzUGVyc29uYUZpc2ljYSh0aXBvKSkge1xyXG5cdFx0XHR0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEYgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEcgPSBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5pc1BlcnNvbmFHaXVyaWRpY2EodGlwbykpIHtcclxuXHRcdFx0dGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBGID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuc2hvd0NvbXBvbmVudFJpY2VyY2FQRyA9IHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXNldFNvZ2dldHRpKCkge1xyXG5cclxuXHRcdGlmICghdGhpcy5hbHRyaVNvZ2dldHRpKSB7XHJcblx0XHRcdHRoaXMuaW5pdEFsdHJpU29nZ2V0dGkoKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5mb3JtQ29udHJvbFNvZ2dldHRvKSB7XHJcblx0XHRcdCg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkucGVyc29uYUdpdXJpZGljYSA9IG51bGw7XHJcblx0XHRcdHRoaXMucGVyc29uYUdpdXJpZGljYSA9IG51bGw7XHJcblx0XHRcdCg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuY29kaWNlUmVnaW9uZSA9ICcnO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0KDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKS5zb2dnZXR0b05vbklkZW50aWZpY2F0byA9IHRoaXMuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8udmFsdWU7XHJcblx0XHRcdCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuY29nbm9tZSA9IG51bGw7XHJcblx0XHRcdCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkubm9tZSA9IG51bGw7XHJcblx0XHRcdCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuY29kRmlzY2FsZSA9IG51bGw7XHJcblx0XHRcdCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuY29tdW5lTmFzY2l0YSA9IG51bGw7XHJcblx0XHRcdCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkucHJvdmluY2lhTmFzY2l0YSA9IG51bGw7XHJcblx0XHRcdCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuZGF0YU5hc2NpdGEgPSBudWxsO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5hbHRyaVNvZ2dldHRpLmlkUGVyc29uYSA9IG51bGw7XHJcblx0XHR0aGlzLmFsdHJpU29nZ2V0dGkucGVyc29uYUZpc2ljYSA9IG51bGw7XHJcblx0XHR0aGlzLnBlcnNvbmFGaXNpY2EgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0aXNQZXJzb25hRmlzaWNhKGNvZGljZVNvZ2dldHRvOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoY29kaWNlU29nZ2V0dG8gPT09IFwiUFJFU1VOVE9fQkVORUZJQ0lBUklPXCIpXHJcblx0fVxyXG5cclxuXHRpc1BlcnNvbmFHaXVyaWRpY2EoY29kaWNlU29nZ2V0dG86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChjb2RpY2VTb2dnZXR0byA9PT0gJ0FVVE9SSVRBX09SRElOQU5URScpXHJcblx0fVxyXG5cclxuXHRyaWNlcmNhUEZSZWFkeShyaWNlcmNhUEZTdGF0dXM6IENvbXBvbmVudE91dHB1dFN0YXR1czxEYXRpUGVyc29uYUZpc2ljYT4pIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKCdbcmljZXJjYVBGUmVhZHldJywgcmljZXJjYVBGU3RhdHVzKTtcclxuXHRcdHRoaXMuY2hhbmdlc1JpY2VyY2FQRiQubmV4dChcclxuXHRcdFx0cmljZXJjYVBGU3RhdHVzLm1hcFZhbHVlKFxyXG5cdFx0XHRcdChpbmZvUEYpID0+IChzb2dnOiBBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8gfCBBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8pID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0UGVyc29uYUZpc2ljYShpbmZvUEYuaWQpO1xyXG5cdFx0XHRcdFx0aWYgKCF0aGlzLmZvcm1Db250cm9sU29nZ2V0dG8pIHtcclxuXHRcdFx0XHRcdFx0KDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+c29nZykuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8gPSBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHNvZ2cuaWRQZXJzb25hID0gaW5mb1BGLmlkO1xyXG5cdFx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cGVyc29uYUZpc2ljYVJlYWR5KHBlcnNvbmFGaXNpY2FTdGF0dXM6IENvbXBvbmVudE91dHB1dFN0YXR1czxQZXJzb25hRmlzaWNhRFRPPikge1xyXG5cdFx0Ly9jb25zb2xlLmxvZygnW3BlcnNvbmFGaXNpY2FSZWFkeV0nLCBwZXJzb25hRmlzaWNhU3RhdHVzKTtcclxuXHRcdHRoaXMuY2hhbmdlc1BlcnNvbmFGaXNpY2EkLm5leHQoXHJcblx0XHRcdHBlcnNvbmFGaXNpY2FTdGF0dXMubWFwVmFsdWUoXHJcblx0XHRcdFx0KHBlcnNvbmFGaXNpY2EpID0+IChzb2dnOiBBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8gfCBBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8pID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHBmID0gbmV3IFBlcnNvbmFGaXNpY2FEVE8oKTtcclxuXHRcdFx0XHRcdHBmLmluZm9BbmFncmFmaWNoZSA9IHBlcnNvbmFGaXNpY2EuaW5mb0FuYWdyYWZpY2hlO1xyXG5cdFx0XHRcdFx0cGYuaW5mb05hc2NpdGEgPSBwZXJzb25hRmlzaWNhLmluZm9OYXNjaXRhO1xyXG5cdFx0XHRcdFx0cGYuaWQgPSBwZXJzb25hRmlzaWNhLmlkO1xyXG5cdFx0XHRcdFx0aWYocGVyc29uYUZpc2ljYS5pZCl7XHJcblx0XHRcdFx0XHRcdHNvZ2cuaWRQZXJzb25hID0gcGVyc29uYUZpc2ljYS5pZDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHNvZ2cucGVyc29uYUZpc2ljYSA9IHBmO1xyXG5cdFx0XHRcdFx0aWYgKCF0aGlzLmZvcm1Db250cm9sU29nZ2V0dG8pIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zb2dnZXR0b05vbklkZW50aWZpY2F0by52YWx1ZSA/XHJcblx0XHRcdFx0XHRcdFx0KDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+c29nZykuc29nZ2V0dG9Ob25JZGVudGlmaWNhdG8gPSB0aGlzLnNvZ2dldHRvTm9uSWRlbnRpZmljYXRvLnZhbHVlIDpcclxuXHRcdFx0XHRcdFx0XHRcdCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnNvZ2cpLnNvZ2dldHRvTm9uSWRlbnRpZmljYXRvID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5zb2dnKS5jb2dub21lID0gcGVyc29uYUZpc2ljYT8uaW5mb0FuYWdyYWZpY2hlPy5jb2dub21lO1xyXG5cdFx0XHRcdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5zb2dnKS5ub21lID0gcGVyc29uYUZpc2ljYT8uaW5mb0FuYWdyYWZpY2hlPy5ub21lO1xyXG5cdFx0XHRcdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5zb2dnKS5jb2RGaXNjYWxlID0gcGVyc29uYUZpc2ljYT8uaW5mb0FuYWdyYWZpY2hlPy5jb2RGaXNjYWxlO1xyXG5cdFx0XHRcdFx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz5zb2dnKS5jb211bmVOYXNjaXRhID0gcGVyc29uYUZpc2ljYT8uaW5mb05hc2NpdGE/LmNvbXVuZU5hc2NpdGE7XHJcblx0XHRcdFx0XHRcdCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnNvZ2cpLnByb3ZpbmNpYU5hc2NpdGEgPSBwZXJzb25hRmlzaWNhPy5pbmZvTmFzY2l0YT8ucHJvdmluY2lhTmFzY2l0YTtcclxuXHRcdFx0XHRcdFx0Ly9UT0RPXHJcblx0XHRcdFx0XHRcdC8vICg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnNvZ2cpLmRhdGFOYXNjaXRhID0gbmV3IERhdGUobW9tZW50KHBlcnNvbmFGaXNpY2E/LmluZm9OYXNjaXRhPy5kYXRhTmFzY2l0YSwgXCJERC9NTS9ZWVlZXCIpLnRvRGF0ZSgpKTtcclxuXHRcdFx0XHRcdFx0Ly8gKDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+c29nZykuZGF0YU5hc2NpdGEgPSBtb21lbnQocGVyc29uYUZpc2ljYT8uaW5mb05hc2NpdGE/LmRhdGFOYXNjaXRhLCBcIkREL01NL1lZWVlcIikudG9EYXRlKCk7XHJcblx0XHRcdFx0XHRcdCg8QWx0cmlTb2dnZXR0aUdpdWRpemlhcmlvRFRPPnNvZ2cpLmRhdGFOYXNjaXRhID0gcGVyc29uYUZpc2ljYT8uaW5mb05hc2NpdGE/LmRhdGFOYXNjaXRhO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJpY2VyY2FQR1JlYWR5KHJpY2VyY2FQR1N0YXR1czogQ29tcG9uZW50T3V0cHV0U3RhdHVzPFBlcnNvbmFHaXVyaWRpY2E+KSB7XHJcblx0XHQvLyBjb25zb2xlLmxvZygnW3JpY2VyY2FQR1JlYWR5XScsIHJpY2VyY2FQR1N0YXR1cyk7XHJcblx0XHR0aGlzLmNoYW5nZXNSaWNlcmNhUEckLm5leHQoXHJcblx0XHRcdHJpY2VyY2FQR1N0YXR1cy5tYXBWYWx1ZShcclxuXHRcdFx0XHQoaW5mb1BHKSA9PiAoc29nZzogQWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmdldFBlcnNvbmFHaXVyaWRpY2EoaW5mb1BHLmRhdGlQZXJzb25hR2l1cmlkaWNhLmlkKTtcclxuXHRcdFx0XHRcdHNvZ2cuaWRQZXJzb25hID0gaW5mb1BHLmRhdGlQZXJzb25hR2l1cmlkaWNhLmlkO1xyXG5cdFx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cGVyc29uYUdpdXJpZGljYVJlYWR5KHBlcnNvbmFHaXVyaWRpY2FTdGF0dXM6IENvbXBvbmVudE91dHB1dFN0YXR1czxQZXJzb25hR2l1cmlkaWNhRFRPPikge1xyXG5cdFx0Ly8gY29uc29sZS5sb2coXCJbcGVyc29uYUdpdXJpZGljYVJlYWR5XVwiLCBwZXJzb25hR2l1cmlkaWNhU3RhdHVzKTtcclxuXHRcdHRoaXMuY2hhbmdlc1BlcnNvbmFHaXVyaWRpY2EkLm5leHQoXHJcblx0XHRcdHBlcnNvbmFHaXVyaWRpY2FTdGF0dXMubWFwVmFsdWUoXHJcblx0XHRcdFx0KHBlcnNvbmFHaXVyaWRpY2EpID0+IChzb2dnOiBBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8pID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHBnID0gbmV3IFBlcnNvbmFHaXVyaWRpY2FEVE8oKTtcclxuXHRcdFx0XHRcdHBnLmNvZGljZUZpc2NhbGUgPSBwZXJzb25hR2l1cmlkaWNhLmNvZGljZUZpc2NhbGU7XHJcblx0XHRcdFx0XHRwZy5yYWdpb25lU29jaWFsZSA9IHBlcnNvbmFHaXVyaWRpY2EucmFnaW9uZVNvY2lhbGU7XHJcblx0XHRcdFx0XHRwZy5wYXJ0aXRhSVZBID0gcGVyc29uYUdpdXJpZGljYS5wYXJ0aXRhSVZBO1xyXG5cdFx0XHRcdFx0cGcuaWRQZXJzb25hR2l1cmlkaWNhID0gcGVyc29uYUdpdXJpZGljYS5pZFBlcnNvbmFHaXVyaWRpY2E7XHJcblx0XHRcdFx0XHRzb2dnLmlkUGVyc29uYSA9IHBlcnNvbmFHaXVyaWRpY2EuaWRQZXJzb25hR2l1cmlkaWNhO1xyXG5cdFx0XHRcdFx0c29nZy5wZXJzb25hR2l1cmlkaWNhID0gcGc7XHJcblx0XHRcdFx0XHRpZiAocGVyc29uYUdpdXJpZGljYS5zZWRpICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRzb2dnLmNvZGljZVJlZ2lvbmUgPSBwZXJzb25hR2l1cmlkaWNhPy5zZWRpWzBdPy5pbmRpcml6em8/LnJlZ2lvbmU/LnNpZ2xhO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldFBlcnNvbmFGaXNpY2EoaWQ6IHN0cmluZykge1xyXG5cdFx0dGhpcy5zaG93Q29tcG9uZW50UmljZXJjYVBGID0gZmFsc2U7XHJcblx0XHQvL2RlYnVnZ2VyXHJcblx0XHR0aGlzLnBlcnNvbmFGaXNpY2EkID0gdGhpcy5kZWxlZ2hlU2VydmljZS5nZXRQZXJzb25hKGlkKVxyXG5cdFx0XHQucGlwZShzaGFyZVJlcGxheSgpKTtcclxuXHJcblx0XHR0aGlzLnBmU3Vic2NyaXB0aW9uID0gdGhpcy5wZXJzb25hRmlzaWNhJC5waXBlKFxyXG5cdFx0XHQvLyBwbHVjayhcImRhdGlQZXJzb25hRmlzaWNhXCIpXHJcblx0XHQpLnN1YnNjcmliZShcclxuXHRcdFx0Ly8gKHBmOiBEYXRpUGVyc29uYUZpc2ljYSkgPT4ge1xyXG5cdFx0XHQocGYpID0+IHtcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKCdbcGZdJywgcGYpO1xyXG5cdFx0XHRcdHRoaXMucGVyc29uYUZpc2ljYSA9IHRoaXMubWFwcGVyUGVyc29uYUZpc2ljYShwZi5kYXRpUGVyc29uYUZpc2ljYSk7XHJcblx0XHRcdFx0Ly8gdGhpcy5wZXJzb25hRmlzaWNhID0gcGY7XHJcblx0XHRcdFx0KDxBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKS5jb2RpY2VSZWdpb25lID0gcGY/LnJlc2lkZW56YT8ucmVnaW9uZT8uc2lnbGE7XHJcblx0XHRcdFx0Ly8oPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLnBlcnNvbmFGaXNpY2EgPSB0aGlzLnBlcnNvbmFGaXNpY2E7XHJcblx0XHRcdFx0dGhpcy5hbHRyaVNvZ2dldHRpLmlkUGVyc29uYSA9IGlkO1xyXG5cdFx0XHRcdC8vIHRoaXMuc2hvd0NvbXBvbmVudFJpY2VyY2FQRiA9IHRydWU7XHJcblx0XHRcdFx0aWYgKHRoaXMucGVyc29uYUZpc2ljYSkge1xyXG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEYgPSB0cnVlLCAwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5pc1NlYXJjaGluZyA9IHRydWU7XHJcblx0XHRcdH0sXHJcblx0XHRcdF8gPT4ge1xyXG5cdFx0XHRcdHRoaXMubW9kYWxzLmZhaWx1cmUoW1xyXG5cdFx0XHRcdFx0XCJyZWN1cGVyby5kYXRpcGVyc29uYWZpc2ljYS5mYWlsdXJlXCJcclxuXHRcdFx0XHRdLCBbXSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRQZXJzb25hR2l1cmlkaWNhKGlkOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMucGVyc29uYUdpdXJpZGljYSQgPSB0aGlzLmRlbGVnaGVTZXJ2aWNlLmdldERhdGlTb2NpZXRhKGlkKVxyXG5cdFx0XHQucGlwZShzaGFyZVJlcGxheSgpKTtcclxuXHJcblx0XHR0aGlzLnBnU3Vic2NyaXB0aW9uID0gdGhpcy5wZXJzb25hR2l1cmlkaWNhJC5waXBlKFxyXG5cdFx0XHQvLyBwbHVjayhcImRhdGlQZXJzb25hR2l1cmlkaWNhXCIpXHJcblx0XHQpLnN1YnNjcmliZShcclxuXHRcdFx0KHBnOiBQZXJzb25hR2l1cmlkaWNhKSA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ1twZ10nLCBwZyk7XHJcblx0XHRcdFx0dGhpcy5tYXBwZXJQZXJzb25hR2l1cmlkaWNhKHBnKTtcclxuXHRcdFx0XHR0aGlzLnBlcnNvbmFHaXVyaWRpY2EgPSBwZztcclxuXHRcdFx0XHQvLyAoPEFsdHJpU29nZ2V0dGlOb0VzcHJvcHJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLmlkUGVyc29uYSA9IGlkO1xyXG5cdFx0XHRcdHRoaXMuYWx0cmlTb2dnZXR0aS5pZFBlcnNvbmEgPSBpZDtcclxuXHRcdFx0XHR0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEcgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLmlzU2VhcmNoaW5nID0gdHJ1ZTtcclxuXHRcdFx0XHRpZiAocGcuc2VkaSAhPSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IHNlZGUgPSBwZy5zZWRpLmZpbHRlcihzZWRlTGVnYWxlID0+IHNlZGVMZWdhbGUudGlwb1NlZGUuY29kaWNlID09PSBcIkxFR0FMRVwiKTtcclxuXHRcdFx0XHRcdCg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuY29kaWNlUmVnaW9uZSA9IHNlZGVbMF0uaW5kaXJpenpvLnJlZ2lvbmUuc2lnbGE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRfID0+IHtcclxuXHRcdFx0XHR0aGlzLm1vZGFscy5mYWlsdXJlKFtcclxuXHRcdFx0XHRcdFwicmVjdXBlcm8uZGF0aXBlcnNvbmFnaXVyaWRpY2EuZmFpbHVyZVwiXHJcblx0XHRcdFx0XSwgW10pO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0bWFwcGVyUGVyc29uYUZpc2ljYShkYXRpUGVyc29uYSk6IFBlcnNvbmFGaXNpY2FEVE8ge1xyXG5cdFx0Ly9jb25zb2xlLmxvZygnW21hcHBlclBlcnNvbmFGaXNpY2FdLSBkYXRpUGVyc29uYScsIGRhdGlQZXJzb25hKTtcclxuXHJcblx0XHRjb25zdCBwZXJzb25hRmlzaWNhID0gbmV3IFBlcnNvbmFGaXNpY2FEVE8oKTtcclxuXHRcdGNvbnN0IGluZm9BbmFncmFmaWNoZSA9IG5ldyBJbmZvQW5hZ3JhZmljaGVQRkRUTygpO1xyXG5cdFx0aW5mb0FuYWdyYWZpY2hlLmNvZEZpc2NhbGUgPSBkYXRpUGVyc29uYS5jb2RGaXNjYWxlO1xyXG5cdFx0aW5mb0FuYWdyYWZpY2hlLmNvZ25vbWUgPSBkYXRpUGVyc29uYS5jb2dub21lO1xyXG5cdFx0aW5mb0FuYWdyYWZpY2hlLm5vbWUgPSBkYXRpUGVyc29uYS5ub21lO1xyXG5cdFx0cGVyc29uYUZpc2ljYS5pbmZvQW5hZ3JhZmljaGUgPSBpbmZvQW5hZ3JhZmljaGU7XHJcblx0XHRwZXJzb25hRmlzaWNhLmlkID0gZGF0aVBlcnNvbmEuaWRQZXJzb25hO1xyXG5cdFx0Y29uc3QgaW5mb05hc2NpdGEgPSBuZXcgSW5mb05hc2NpdGFQRkRUTygpO1xyXG5cdFx0aW5mb05hc2NpdGEuY29tdW5lTmFzY2l0YSA9IGRhdGlQZXJzb25hLmNvbXVuZU5hc2NpdGE7XHJcblx0XHRpbmZvTmFzY2l0YS5wcm92aW5jaWFOYXNjaXRhID0gZGF0aVBlcnNvbmEucHJvdmluY2lhTmFzY2l0YTtcclxuXHRcdGluZm9OYXNjaXRhLmRhdGFOYXNjaXRhID0gZGF0aVBlcnNvbmEuZGF0YU5hc2NpdGE7XHJcblx0XHRwZXJzb25hRmlzaWNhLmluZm9OYXNjaXRhID0gaW5mb05hc2NpdGE7XHJcblx0XHQoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLnBlcnNvbmFGaXNpY2EgPSBwZXJzb25hRmlzaWNhO1xyXG5cdFx0Ly9jb25zb2xlLmxvZygnW21hcHBlclBlcnNvbmFGaXNpY2FdLSBwZXJzb25hRmlzaWNhJywgcGVyc29uYUZpc2ljYSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKCdbbWFwcGVyUGVyc29uYUZpc2ljYV0tIGFsdHJpU29nZ2V0dGknLCB0aGlzLmFsdHJpU29nZ2V0dGkucGVyc29uYUZpc2ljYSk7XHJcblx0XHRzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2hvd0NvbXBvbmVudFJpY2VyY2FQRiA9IHRydWUsIDApO1xyXG5cdFx0cmV0dXJuIHBlcnNvbmFGaXNpY2E7XHJcblx0fVxyXG5cclxuXHRtYXBwZXJQZXJzb25hR2l1cmlkaWNhKGRhdGlQZXJzb25hOiBQZXJzb25hR2l1cmlkaWNhKSB7XHJcblx0XHQvLyBjb25zb2xlLmxvZygnW21hcHBlclBlcnNvbmFHaXVyaWRpY2FdJywgZGF0aVBlcnNvbmEpO1xyXG5cclxuXHRcdGlmICghdGhpcy5hbHRyaVNvZ2dldHRpKSB7XHJcblx0XHRcdHRoaXMuaW5pdEFsdHJpU29nZ2V0dGkoKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwZXJzb25hR2l1cmlkaWNhID0gbmV3IFBlcnNvbmFHaXVyaWRpY2FEVE8oKTtcclxuXHRcdHBlcnNvbmFHaXVyaWRpY2EuY29kaWNlRmlzY2FsZSA9IGRhdGlQZXJzb25hLmRhdGlQZXJzb25hR2l1cmlkaWNhLmNvZGljZUZpc2NhbGU7XHJcblx0XHRwZXJzb25hR2l1cmlkaWNhLnJhZ2lvbmVTb2NpYWxlID0gZGF0aVBlcnNvbmEuZGF0aVBlcnNvbmFHaXVyaWRpY2EucmFnaW9uZVNvY2lhbGU7XHJcblx0XHRwZXJzb25hR2l1cmlkaWNhLnBhcnRpdGFJVkEgPSBkYXRpUGVyc29uYS5kYXRpUGVyc29uYUdpdXJpZGljYS5wYXJ0aXRhSVZBO1xyXG5cdFx0KDxBbHRyaVNvZ2dldHRpTm9Fc3Byb3ByaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKS5wZXJzb25hR2l1cmlkaWNhID0gcGVyc29uYUdpdXJpZGljYTtcclxuXHR9XHJcblxyXG5cdGVuYWJsZVNlYXJjaCgpIHtcclxuXHRcdHRoaXMucmVzZXRTb2dnZXR0aSgpO1xyXG5cclxuXHRcdC8vIGNvbnNvbGUubG9nKCdbZW5hYmxlU2VhcmNoXSAtIGNvZGljZVNvZ2dldHRvOicsICg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuY29kaWNlVGlwb0FsdHJvU29nZ2V0dG8pO1xyXG5cdFx0Ly8gY29uc29sZS5sb2coJ1tlbmFibGVTZWFyY2hdIC0gc29nZ2V0dG9Ob25JZGVudGlmaWNhdG86JywgKDxBbHRyaVNvZ2dldHRpR2l1ZGl6aWFyaW9EVE8+dGhpcy5hbHRyaVNvZ2dldHRpKS5zb2dnZXR0b05vbklkZW50aWZpY2F0byk7XHJcblxyXG5cdFx0aWYgKCg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuY29kaWNlVGlwb0FsdHJvU29nZ2V0dG8pIHtcclxuXHJcblx0XHRcdHRoaXMudGlwb1NvZ2dldHRvLnNldFZhbHVlKCg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuY29kaWNlVGlwb0FsdHJvU29nZ2V0dG8pO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMuaXNQZXJzb25hRmlzaWNhKCg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuY29kaWNlVGlwb0FsdHJvU29nZ2V0dG8pKSB7XHJcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEYgPSB0cnVlLCAwKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHRoaXMuaXNQZXJzb25hR2l1cmlkaWNhKCg8QWx0cmlTb2dnZXR0aU5vRXNwcm9wcmlvRFRPPnRoaXMuYWx0cmlTb2dnZXR0aSkuY29kaWNlVGlwb0FsdHJvU29nZ2V0dG8pKSB7XHJcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEcgPSB0cnVlLCAwKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zb2dnZXR0b05vbklkZW50aWZpY2F0by5zZXRWYWx1ZSgoPEFsdHJpU29nZ2V0dGlHaXVkaXppYXJpb0RUTz50aGlzLmFsdHJpU29nZ2V0dGkpLnNvZ2dldHRvTm9uSWRlbnRpZmljYXRvKTtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB0aGlzLnNob3dDb21wb25lbnRSaWNlcmNhUEYgPSB0cnVlLCAwKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcndhcmQoXzogYW55KSB7XHJcblx0XHR0aGlzLm5leHRTdGVwLmVtaXQodGhpcy5hbHRyaVNvZ2dldHRpKTtcclxuXHR9XHJcblxyXG5cdGJhY2t3YXJkKCRldmVudDogYW55KSB7XHJcblx0XHR0aGlzLnByZXZpb3VzU3RlcC5lbWl0KHRoaXMuYWx0cmlTb2dnZXR0aSk7XHJcblx0fVxyXG5cclxuXHRjb21wbGV0ZSgkZXZlbnQ6IGFueSkgeyB9XHJcblxyXG5cdG9uU2FsdmFCb3p6YSgkZXZlbnQ6IGFueSkge1xyXG5cdFx0dGhpcy5zYWx2YUJvenphLmVtaXQodGhpcy5hbHRyaVNvZ2dldHRpKTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuYWx0cmlTb2dnZXR0aUNoYW5nZWRTdWIpIHtcclxuXHRcdFx0dGhpcy5hbHRyaVNvZ2dldHRpQ2hhbmdlZFN1Yi51bnN1YnNjcmliZSgpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iXX0=