dmencu 0.3.25 → 0.3.26
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/dist/client/unlogged/bypass-formulario.js +1 -118
- package/dist/unlogged/unlogged/bypass-formulario.js +1 -118
- package/install/asignar_desasignar_tareas_tem_trg.sql +5 -2
- package/install/determinar_tarea_proxima_trg.sql +49 -0
- package/install/permite_modificar_tareas_tem_trg.sql +14 -1
- package/package.json +1 -1
|
@@ -674,141 +674,24 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
674
674
|
var esNoRea = false;
|
|
675
675
|
var codNoRea = null;
|
|
676
676
|
return { codNoRea, esNoRea };
|
|
677
|
-
//EJEMPLO PREJU_2022
|
|
678
|
-
//var unidadesARecorrer = ['viviendas','hogares','personas'] as IdUnidadAnalisis[];
|
|
679
|
-
//var uaPrincipal = likeAr(estructura.unidades_analisis).find((ua)=>!ua.padre);
|
|
680
|
-
//var esNoRea = false;
|
|
681
|
-
//var codNoRea:string|null= null;
|
|
682
|
-
// let resnorea = buscarNoReaEnRespuestas( unidadesARecorrer,uaPrincipal!,respuestas,estructura.noReas,'no_rea');
|
|
683
|
-
//codNoRea=resnorea.nrcodigo;
|
|
684
|
-
//esNoRea=resnorea.esvalor;
|
|
685
|
-
//return {codNoRea, esNoRea};
|
|
686
677
|
},
|
|
687
678
|
esNoReaSup: (_respuestas) => {
|
|
688
679
|
//IMPLEMENTAR EN OPERATIVO
|
|
689
680
|
var esNoReaSup = false;
|
|
690
681
|
var codNoReaSup = null;
|
|
691
682
|
return { codNoReaSup, esNoReaSup };
|
|
692
|
-
//EJEMPLO PREJU_2022
|
|
693
|
-
//TODO GENERALIZAR buscarNoreaRespuestas
|
|
694
|
-
//var unidadesARecorrerSup = ['viviendas','hogares_sup','personas_sup'] as IdUnidadAnalisis[];
|
|
695
|
-
//var uaPrincipal = likeAr(estructura.unidades_analisis).find((ua)=>!ua.padre);
|
|
696
|
-
//var esNoReaSup = false;
|
|
697
|
-
//var codNoReaSup:string|null= null;
|
|
698
|
-
//let resnorea =buscarNoReaEnRespuestas( unidadesARecorrerSup,uaPrincipal!,respuestas,estructura.noReasSup,'no_rea_sup');//con los parametros que necesitariamos para generalizar
|
|
699
|
-
// codNoReaSup=resnorea.nrcodigo;
|
|
700
|
-
// esNoReaSup=resnorea.esvalor;
|
|
701
|
-
//return {codNoReaSup,esNoReaSup}
|
|
702
683
|
},
|
|
703
684
|
esRealizada: (_respuestas) => {
|
|
704
685
|
//IMPLEMENTAR EN OPERATIVO
|
|
705
686
|
var esRea = false;
|
|
706
687
|
var codRea = null;
|
|
707
688
|
return { codRea, esRea };
|
|
708
|
-
//EJEMPLO PREJU_2022
|
|
709
|
-
//var esRea = false;
|
|
710
|
-
//var codRea:number|null= null;
|
|
711
|
-
//if(!respuestas['identif' as IdVariable]){
|
|
712
|
-
// return {codRea, esRea}
|
|
713
|
-
//}else if(respuestas['identif' as IdVariable]==2 ||respuestas['resid_hog' as IdVariable]==2||respuestas['contact' as IdVariable]==2){
|
|
714
|
-
// codRea = 2;
|
|
715
|
-
// esRea = false;
|
|
716
|
-
//}else{
|
|
717
|
-
// var reahs: number[]=[] ;
|
|
718
|
-
// var respuestasHs = respuestas['hogares'];
|
|
719
|
-
// if(respuestasHs){
|
|
720
|
-
// for(let respuestasH of respuestasHs){
|
|
721
|
-
// var reah:number;
|
|
722
|
-
// var selec:number;
|
|
723
|
-
// if(respuestasH['entrea' ] != 1||respuestasH['prejue1']==2||respuestasH['tp']==0){
|
|
724
|
-
// reah=2;
|
|
725
|
-
// }else{
|
|
726
|
-
// selec=respuestasH['cr_num_miembro']
|
|
727
|
-
// if(respuestasH['personas'] && respuestasH.personas[selec-1] ){
|
|
728
|
-
// var respuestasP = respuestasH.personas[selec-1];
|
|
729
|
-
// var resp_entrea_ind = respuestasP['entreaind' as IdVariable ];
|
|
730
|
-
// if(resp_entrea_ind==null){ //queremos contemplar el undefined
|
|
731
|
-
// reah = 3;
|
|
732
|
-
// }else{
|
|
733
|
-
// reah = Number(resp_entrea_ind);
|
|
734
|
-
// }
|
|
735
|
-
// }else{
|
|
736
|
-
// reah = 3;
|
|
737
|
-
// }
|
|
738
|
-
// }
|
|
739
|
-
// reahs.push(reah);
|
|
740
|
-
// }
|
|
741
|
-
// if (reahs.every(rh=>rh==1)){
|
|
742
|
-
// codRea = 1;
|
|
743
|
-
// esRea = true;
|
|
744
|
-
// }else if(reahs.every(rh=>rh==2)){
|
|
745
|
-
// codRea = 2;
|
|
746
|
-
// esRea = false;
|
|
747
|
-
// }else if(reahs.every(rh=>rh==1||rh==3)){
|
|
748
|
-
// codRea = 3;
|
|
749
|
-
// esRea = false;
|
|
750
|
-
// }else{
|
|
751
|
-
// codRea = 4;
|
|
752
|
-
// esRea = false;
|
|
753
|
-
// }
|
|
754
|
-
// } else{
|
|
755
|
-
// codRea = 3;
|
|
756
|
-
// esRea = false;
|
|
757
|
-
// }
|
|
758
|
-
//}
|
|
759
|
-
//return {codRea,esRea}
|
|
760
689
|
},
|
|
761
690
|
esRealizadaSup: (_respuestas) => {
|
|
762
691
|
//IMPLEMENTAR EN OPERATIVO
|
|
763
692
|
var esReaSup = false;
|
|
764
693
|
var codReaSup = null;
|
|
765
694
|
return { codReaSup, esReaSup };
|
|
766
|
-
//EJEMPLO PREJU_2022
|
|
767
|
-
//TODO GENERALIZAR
|
|
768
|
-
//var esReaSup = false;
|
|
769
|
-
//var codReaSup:number|null= null;
|
|
770
|
-
//if(!respuestas['confir_tel_sup' as IdVariable] && !respuestas['sp1a' as IdVariable]){
|
|
771
|
-
// return {codReaSup, esReaSup}
|
|
772
|
-
//}else if( respuestas['confir_tel_sup' as IdVariable]==2 || respuestas['confir_dom_sup' as IdVariable]==2||respuestas['sp1a' as IdVariable]==2 ||respuestas['sp1b' as IdVariable]==2||respuestas['sp1c' as IdVariable]==2){
|
|
773
|
-
// codReaSup = 2;
|
|
774
|
-
// esReaSup = false;
|
|
775
|
-
//}else{
|
|
776
|
-
// var reahs: number[]=[] ;
|
|
777
|
-
// var respuestasHs = respuestas['hogares_sup'];
|
|
778
|
-
// if(respuestasHs){
|
|
779
|
-
// for(let respuestasH of respuestasHs){
|
|
780
|
-
// var reah:number;
|
|
781
|
-
// var selec:number;
|
|
782
|
-
// if(respuestasH['entrea_sup' ] == 2||respuestasH['spr1_sup']==2||respuestasH['sp4']==3||respuestasH['total_rango_sup']==0){
|
|
783
|
-
// reah=2;
|
|
784
|
-
// }else{
|
|
785
|
-
// if(respuestasH['entrea_sup' ]){
|
|
786
|
-
// reah = 1;
|
|
787
|
-
// }else {
|
|
788
|
-
// reah=3;
|
|
789
|
-
// }
|
|
790
|
-
// }
|
|
791
|
-
// reahs.push(reah);
|
|
792
|
-
// }
|
|
793
|
-
// if (reahs.every(rh=>rh==1)){
|
|
794
|
-
// codReaSup = 1;
|
|
795
|
-
// esReaSup = true;
|
|
796
|
-
// }else if(reahs.every(rh=>rh==2)){
|
|
797
|
-
// codReaSup = 2;
|
|
798
|
-
// esReaSup = false;
|
|
799
|
-
// }else if(reahs.every(rh=>rh==1||rh==3)){
|
|
800
|
-
// codReaSup = 3;
|
|
801
|
-
// esReaSup = false;
|
|
802
|
-
// }else{
|
|
803
|
-
// codReaSup = 4;
|
|
804
|
-
// esReaSup = false;
|
|
805
|
-
// }
|
|
806
|
-
// } else{
|
|
807
|
-
// codReaSup = 3;
|
|
808
|
-
// esReaSup = false;
|
|
809
|
-
// }
|
|
810
|
-
//}
|
|
811
|
-
//return {codReaSup,esReaSup}
|
|
812
695
|
},
|
|
813
696
|
UAprincipal: '',
|
|
814
697
|
defUA: {},
|
|
@@ -1156,4 +1039,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
1156
1039
|
}
|
|
1157
1040
|
exports.calcularResumenVivienda = calcularResumenVivienda;
|
|
1158
1041
|
});
|
|
1159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEscUNBQXVEO0lBRXZELGlEQUFvRztJQUVwRywrQ0FBK0Q7SUFFL0QsbUNBZ0JpQjtJQUVqQixJQUFJLFVBQVUsR0FBRyxFQUdoQixDQUFBO0lBQ0QsU0FBZ0Isb0JBQW9CLENBQUMsaUJBQW1FO1FBQ3BHLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQTtJQUNwRCxDQUFDO0lBRkQsb0RBRUM7SUFFRCxTQUFnQix3Q0FBd0MsQ0FBQyxxQ0FBdUY7UUFDNUksVUFBVSxDQUFDLHFDQUFxQyxHQUFHLHFDQUFxQyxDQUFBO0lBQzVGLENBQUM7SUFGRCw0RkFFQztJQVNELElBQUksV0FBVyxHQUFHLEVBQWlCLENBQUE7SUFFbkMsOEJBQThCO0lBQzlCLElBQUksVUFBVSxHQUFjLElBQWtCLENBQUM7SUFFL0MsSUFBSSwyQkFBMkIsR0FBZ0QsR0FBRSxFQUFFO1FBQy9FLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUN2RCxDQUFDLENBQUE7SUFFRCxTQUFnQix1QkFBdUIsQ0FBQyx1QkFBbUQ7UUFDdkYsMkJBQTJCLEdBQUcsdUJBQXVCLENBQUM7SUFDMUQsQ0FBQztJQUZELDBEQUVDO0lBRUQsU0FBc0Isb0JBQW9CLENBQUMsSUFBNEI7O1lBQ25FLE1BQU0sMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7WUFDekIsbUJBQW1CLEVBQUUsQ0FBQztRQUMxQixDQUFDO0tBQUE7SUFKRCxvREFJQztJQUVELFNBQWdCLGdCQUFnQixDQUM1QixnQkFBK0Y7UUFFL0YsYUFBYSxHQUFHLGdCQUFnQixDQUFBO0lBQ3BDLENBQUM7SUFKRCw0Q0FJQztJQUVELElBQUksYUFBYSxHQUFrRixHQUFFLEVBQUU7UUFDbkcsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO0lBQ3BELENBQUMsQ0FBQTtJQUVNLElBQUksY0FBYyxHQUFHLENBQUMsS0FBVyxFQUFDLEVBQUU7UUFDdkMsSUFBSSxFQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQzlELElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDOUIsSUFBRyxLQUFLLEVBQUM7WUFDTCxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQTtTQUNsRDthQUFJO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFBO1NBQzFEO0lBQ0wsQ0FBQyxDQUFBO0lBUlUsUUFBQSxjQUFjLGtCQVF4QjtJQUVELFNBQWdCLGFBQWEsQ0FBQyxpQkFBNEI7O1FBQ3RELFVBQVUsR0FBRyxpQkFBaUIsQ0FBQztRQUMvQixvQkFBWSxDQUFDLFdBQVcsR0FBRyxNQUFBLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQywwQ0FBRSxlQUFnQixDQUFBO1FBQzFHLG9CQUFZLENBQUMsTUFBTSxHQUFHLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUEsQ0FBQyxFQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUN0RyxvQkFBWSxDQUFDLEtBQUssR0FBRyxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBQyxFQUFFLENBQUEsQ0FBQztZQUN4RSxFQUFFLEVBQUMsS0FBSyxDQUFDLFdBQXlCO1lBQ2xDLFNBQVMsRUFBRSxJQUFBLGdCQUFNLEVBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNyQyxNQUFNLEVBQUUsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7U0FDOUYsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDWCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBVkQsc0NBVUM7SUFFRCxTQUFnQixjQUFjLENBQUMsSUFBK0M7UUFDMUUsV0FBVyxpQ0FDUCxLQUFLLEVBQUMsS0FBSyxJQUNSLElBQUksS0FDUCxvQkFBb0IsRUFBQyxFQUF5QyxHQUNqRSxDQUFBO1FBQ0QsMEJBQTBCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBUEQsd0NBT0M7SUFFTSxJQUFJLGNBQWMsR0FBRyxHQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUE7SUFBakMsUUFBQSxjQUFjLGtCQUFtQjtJQUU1QyxTQUFTLFdBQVcsQ0FBQyxDQUFRO1FBQ3pCLEtBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBZ0IsdUJBQXVCO1FBQ25DLElBQUcsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFDO1lBQ2xGLDBCQUEwQixFQUFFLENBQUM7U0FDaEM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQztJQUM1QyxDQUFDO0lBTEQsMERBS0M7SUFFRCxTQUFnQixRQUFRO1FBQ3BCLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQTtJQUM1QixDQUFDO0lBRkQsNEJBRUM7SUFFRCxTQUFnQixhQUFhO1FBQ3pCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFGRCxzQ0FFQztJQThCRCxJQUFJLHVCQUF1QixHQUFHLEVBQThDLENBQUM7SUFFN0UsU0FBZ0IsaUJBQWlCLENBQWtDLEdBQXVCO1FBQ3RGLHlGQUF5RjtRQUN6RixJQUFJLGlCQUFpQixHQUF3Qix1QkFBdUIsQ0FBQztRQUNyRSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3BDLENBQUM7SUFKRCw4Q0FJQztJQU1ELFNBQWdCLGVBQWUsQ0FBQyxLQUFXLEVBQUUsYUFBc0IsRUFBRSxjQUF1QjtRQUN4RixJQUFJLG9CQUFvQixHQUFHLEVBQWdCLENBQUM7UUFDNUMsZ0VBQWdFO1FBQ2hFLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUF3QixDQUFDO1FBQ3RELElBQUksY0FBOEIsQ0FBQztRQUNuQyxJQUFJLFNBQWdCLENBQUM7UUFDckIsSUFBSSxlQUFlLEdBQThCLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUE7UUFDcEgsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksSUFBSSxHQUEyRSxFQUFFLENBQUM7UUFDdEYsT0FBTSxlQUFlLEVBQUM7WUFDbEIsSUFBSSxLQUFLLEdBQWtCLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ2xELFlBQVkscUJBQUssWUFBWSxDQUFDLENBQUM7WUFDL0IsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQ3RDLGVBQWUsR0FBQyxLQUFLLENBQUMsS0FBSyxDQUFBO1NBQzlCO1FBQ0QsT0FBTSxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQ2QsQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUcsQ0FBQTtZQUNwRCxJQUFJLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkQsSUFBRyxnQkFBZ0IsSUFBSSxTQUFTLEVBQUM7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQTthQUM5RTtZQUNELElBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksRUFBQztnQkFDbkMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNwQztZQUNELElBQUksa0JBQWtCLEdBQUMsVUFBVSxDQUFDO1lBQ2xDLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsWUFBWSxLQUFLLENBQUEsQ0FBQyxDQUFBLGdCQUFnQixHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUEsZ0JBQWdCLENBQUE7WUFDakcsVUFBVSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRCxJQUFHLFVBQVUsSUFBSSxJQUFJLEVBQUM7Z0JBQ2xCLElBQUcsY0FBYyxFQUFDO29CQUNkLFVBQVUsR0FBRyxFQUFnQixDQUFBO29CQUM3QixrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLENBQUE7b0JBQzFELG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsMEJBQTBCO2lCQUNoRTtxQkFBSTtvQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixRQUFRLDRCQUE0QixlQUFlLEdBQUcsQ0FBQyxDQUFDO2lCQUNyRzthQUNKO1lBQ0QsU0FBUyxLQUFULFNBQVMsR0FBSyxZQUFZLEVBQUM7WUFDM0IscUVBQXFFO1lBQ3JFLGNBQWMsS0FBZCxjQUFjLEdBQUssVUFBVSxFQUFDO1lBQzlCLElBQUcsYUFBYSxFQUFDO2dCQUNiLG9CQUFvQixpREFBTyxvQkFBb0IsR0FBSyxVQUFVLEtBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUMsZ0JBQWdCLEdBQUMsQ0FBQTthQUN4RztTQUNKO1FBQ0QsT0FBTztZQUNILFVBQVUsRUFBRSxvQkFBb0I7WUFDaEMsNkZBQTZGO1lBQzdGLGNBQWMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLEtBQUs7U0FDbkQsQ0FBQTtJQUNMLENBQUM7SUFqREQsMENBaURDO0lBRUQsU0FBZ0Isa0NBQWtDLENBQUMsU0FBbUI7UUFDbEUsSUFBSSxFQUFDLG9CQUFvQixFQUFDLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUM3RCxJQUFJLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDO1FBQ2hELElBQUksVUFBVSxHQUFHLElBQUEsb0JBQVksRUFBQyxTQUFTLENBQUMsQ0FBQTtRQUN4QyxJQUFJLFlBQVksR0FBSSxXQUFXLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakUsS0FBSSxJQUFJLEVBQUUsSUFBSSxpQkFBaUIsRUFBQztZQUM1QixJQUFJLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQyxJQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUM7Z0JBQ1osSUFBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBQztvQkFDckMsR0FBRyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7aUJBQzVCO2FBQ0o7WUFDRCxJQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBQztnQkFDYixHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBMEIsQ0FBQzthQUMzRTtZQUNELElBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFDO2dCQUNiLHlFQUF5RTtnQkFDekUsU0FBUzthQUNaO1lBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDcEgsSUFBRyxNQUFNLElBQUksR0FBRyxFQUFDO2dCQUNiLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTthQUNsRDtZQUNELElBQUcsTUFBTSxJQUFJLEdBQUcsRUFBQztnQkFDYixlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO2FBQ2pEO1lBQ0QsSUFBRyxPQUFPLElBQUksR0FBRyxFQUFDO2dCQUNkLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7YUFDekQ7U0FDSjtRQUNELElBQUcsWUFBWSxDQUFDLE1BQU0sRUFBQztZQUNuQixJQUFJLEVBQUMsR0FBRyxFQUFFLE1BQU0sRUFBQyxHQUFHLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsRSxJQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksTUFBTSxJQUFHLElBQUksRUFBQztnQkFDNUIsYUFBYTtnQkFDYixRQUFRLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO2dCQUNwRSxhQUFhO2dCQUNiLFFBQVEsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUM7YUFDNUU7U0FDSjtJQUNMLENBQUM7SUF2Q0QsZ0ZBdUNDO0lBRUQsU0FBZ0Isd0JBQXdCLENBQUMsVUFBMkI7O1FBQ2hFLElBQUksd0JBQXdCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLElBQUUsS0FBSyxDQUFBLENBQUMsQ0FBQSxnQkFBZ0IsQ0FBQSxDQUFDLENBQUEsT0FBTyxVQUFVLEVBQUUsQ0FBQztlQUN4RyxRQUFRLENBQUMsY0FBYyxDQUFDLDRCQUE0QixVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksUUFBUSxHQUFHLHdCQUF3QixDQUFDO1FBQ3hDLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFDLEdBQUcsR0FBRyxhQUFhLENBQUM7UUFDMUQsSUFBSSxjQUFjLEdBQW9CLFFBQVEsQ0FBQyxDQUFDLHFFQUFxRTtRQUNySCxJQUFJLGtCQUFrQixHQUF5QyxJQUFJLENBQUM7UUFDcEUsSUFBSSxnQkFBZ0IsR0FBb0IsSUFBSSxDQUFDLENBQUMsdUZBQXVGO1FBQ3JJLElBQUksb0JBQW9CLEdBQXlDLElBQUksQ0FBQztRQUN0RSxPQUFNLFFBQVEsSUFBSSxJQUFJLEVBQUM7WUFDbkIsSUFBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7bUJBQ3ZDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzttQkFDdkMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO21CQUN2QyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQzttQkFDaEQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUM7bUJBQ3ZELFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQ2hEO2dCQUNHLElBQUcsZ0JBQWdCLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxZQUFZLEdBQUcsWUFBWSxFQUFDO29CQUNoRSxjQUFjLEdBQUcsUUFBUSxDQUFDO2lCQUM3QjtxQkFBSTtvQkFDRCxJQUFHLGtCQUFrQixJQUFJLElBQUksRUFBQzt3QkFDMUIsZ0JBQWdCLEdBQUcsY0FBYyxDQUFBO3dCQUNqQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWUsQ0FBQyxDQUFBO3dCQUNuRCxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FBQztxQkFDN0M7b0JBQ0QsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDbkMsSUFBRyxrQkFBa0IsQ0FBQyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxFQUFDO3dCQUM1RSxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7d0JBQzVCLG9CQUFvQixHQUFHLElBQUksQ0FBQztxQkFDL0I7eUJBQUk7d0JBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQztxQkFDbkI7aUJBQ0o7YUFDSjtZQUNELFFBQVEsR0FBRyxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxhQUFhLG1DQUFJLElBQUksQ0FBQztTQUM5QztRQUNELElBQUcsZ0JBQWdCLElBQUksSUFBSSxFQUFDO1lBQ3hCLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztTQUNyQztRQUNELElBQUksTUFBTSxHQU1OLEVBQUUsQ0FBQztRQUNQLElBQUcsY0FBYyxJQUFJLElBQUksRUFBQztZQUN0QixJQUFHLGtCQUFrQixJQUFJLElBQUksRUFBQztnQkFDMUIsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQTthQUNyRDtZQUNELE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQztZQUN4RCxJQUFJLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixhQUFwQixvQkFBb0IsY0FBcEIsb0JBQW9CLEdBQUUsa0JBQWtCLENBQUMsQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDO1lBQ3pFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxHQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztZQUNqRSxJQUFHLEdBQUcsR0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBQztnQkFDdEMsTUFBTSxDQUFDLFVBQVUsR0FBQyxRQUFRLENBQUM7YUFDOUI7aUJBQUssSUFBRyxrQkFBa0IsQ0FBQyxHQUFHLEdBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxHQUFHLFlBQVksRUFBQztnQkFDMUcsTUFBTSxDQUFDLFVBQVUsR0FBQyxPQUFPLENBQUM7YUFDN0I7aUJBQUk7Z0JBQ0QsTUFBTSxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUE7YUFDdkI7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFoRUQsNERBZ0VDO0lBRUQsU0FBZ0IsZUFBZSxDQUMzQixNQUFzRixFQUN0RixJQUFNLEVBQ04sS0FBWTtRQUVaLElBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFDO1lBQzVDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQztJQVJELDBDQVFDO0lBRUQsU0FBZ0IsZ0JBQWdCLENBQzVCLE1BQVEsRUFDUixJQUFNLEVBQ04sS0FBVTtRQUVWLElBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBQztZQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQ3hCO0lBQ0wsQ0FBQztJQVJELDRDQVFDO0lBRUQsU0FBUyxnQ0FBZ0MsQ0FBQyxNQUFZO0lBRXRELENBQUM7SUFBQSxDQUFDO0lBR0YsU0FBZ0Isa0JBQWtCLENBQUMsUUFBNkMsRUFBRSxZQUF3QjtJQUMxRyxDQUFDO0lBREQsZ0RBQ0M7SUFFWSxRQUFBLDZCQUE2QixHQUFHLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO0lBQ3RFLFFBQUEscUNBQXFDLEdBQUcsTUFBTSxDQUFDLHNDQUFzQyxDQUFDLENBQUE7SUFFbkcsU0FBUyxtQkFBbUI7UUFDeEIsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQXNCLENBQUM7UUFDOUUsSUFBRyxXQUFXLEVBQUM7WUFDWCxJQUFHLFdBQVcsQ0FBQyxRQUFRLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDO2dCQUMzQyxXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQzthQUM3QztTQUNKO0lBQ0wsQ0FBQztJQUVELFNBQWdCLDBCQUEwQixDQUFDLE9BSTFDLEVBQUUsWUFBd0I7O1FBQ3ZCLElBQUksS0FBSyxHQUFHLGdCQUFnQixDQUFBO1FBQzVCLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUM3QyxJQUFJLEVBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUMsR0FBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEUsSUFBSSxlQUFlLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksYUFBYSxHQUFHLFFBQVEsSUFBSSxxQ0FBNkIsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDNUYsSUFBRyxTQUFTLEtBQUssNkNBQXFDLElBQUksUUFBUSxJQUFJLHFDQUE2QixFQUFDO1lBQ2hHLElBQUcsU0FBUyxLQUFLLEVBQUUsRUFBQztnQkFDaEIsU0FBUyxHQUFHLElBQUksQ0FBQzthQUNwQjtpQkFBSyxJQUFHLENBQUEsTUFBQSxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLDBDQUFFLElBQUksS0FBRSxRQUFRLEVBQUM7Z0JBQ3pHLElBQUcsU0FBUyxJQUFJLElBQUksRUFBQztvQkFDakIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDakM7YUFDSjtZQUNELHlEQUF5RDtZQUN6RCxjQUFjLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUFBO1lBQ3JGLElBQUcsY0FBYyxFQUFDO2dCQUNkLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLGFBQVQsU0FBUyxjQUFULFNBQVMsR0FBSSxJQUFJLENBQUMsQ0FBQyw0QkFBNEI7YUFDekU7U0FDSjtRQUNELElBQUksV0FBVyxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFBLG9CQUFZLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN4RSxJQUFJLGlCQUFpRCxDQUFDO1FBQ3RELElBQUcsUUFBUSxJQUFJLHFDQUE2QixJQUFJLENBQUMsY0FBYyxJQUFJLDZDQUFxQyxLQUFJLE1BQUEsV0FBVyxDQUFDLGNBQWMsMENBQUcsUUFBUSxDQUFDLENBQUEsQ0FBQyxFQUFDO1lBQ2hKLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzQyxJQUFHLFVBQVUsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxXQUFXLENBQUEsRUFBQztnQkFDcEQsZUFBZSxDQUFDO29CQUNaLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBQSw4QkFBc0IsRUFBQyxLQUFLLENBQUMsUUFBUyxDQUFDLENBQUM7b0JBQ3JGLFVBQVU7b0JBQ1YsY0FBYztvQkFDZCxjQUFjLEVBQUUsUUFBUTtvQkFDeEIsS0FBSyxFQUFFLEtBQUs7aUJBQ2YsQ0FBQyxDQUFBO2FBQ0w7WUFDRCxXQUFXLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLElBQUksY0FBYyxDQUFDO1lBQ3hELGNBQWMsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUM7WUFDaEUsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7WUFDakUsV0FBVyxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFBLG9CQUFZLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNwRSxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtZQUM3RCxpQkFBaUIsR0FBRyxRQUFRLENBQUM7WUFDN0IsR0FBRTtnQkFDRSxpQkFBaUIsR0FBRyxNQUFBLFdBQVcsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsMENBQUUsU0FBUyxDQUFDO2FBQzFFLFFBQU0sYUFBYSxJQUFJLElBQUksSUFBSSxjQUFjLElBQUksaUJBQWlCLElBQUksSUFBSSxJQUFJLGlCQUFpQixJQUFJLEtBQUssSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxtQkFBbUIsRUFBQztZQUM5TixJQUFHLGlCQUFpQixJQUFJLElBQUksSUFBSSxDQUFBLE1BQUEsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsMENBQUUsTUFBTSxLQUFJLFFBQVEsRUFBQztnQkFDL0UsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO2FBQzdCO1NBQ0o7UUFDRCxPQUFPLEVBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFDLENBQUM7SUFDbkYsQ0FBQztJQXZERCxnRUF1REM7SUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxPQUE4RCxFQUFFLFlBQXdCO1FBQzFILElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFIRCxzREFHQztJQUVELFNBQWdCLHFCQUFxQixDQUFDLE9BQXdELEVBQUUsWUFBd0I7UUFDcEgsSUFBSSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDM0M7Ozs7Ozs7Ozs7O1VBV0U7SUFDTixDQUFDO0lBZEQsc0RBY0M7SUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxPQUFxRixFQUFFLFlBQXdCO1FBQ25KLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsR0FBRyxPQUFPLENBQUM7UUFDakQsMERBQTBEO1FBQzFELGtDQUFrQztJQUN0QyxDQUFDO0lBSkQsMERBSUM7SUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxPQUE0QyxFQUFFLFlBQXdCO1FBQ3ZHLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ2xDLDBEQUEwRDtRQUMxRCw0QkFBNEI7SUFDaEMsQ0FBQztJQUpELG9EQUlDO0lBRUQsU0FBZ0IseUJBQXlCLENBQUMsRUFBQyxLQUFLLEVBQWdCLEVBQUUsWUFBd0I7UUFDdEYsSUFBSSxFQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUcsbUJBQW1CLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLDhCQUE4QixDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDM0ssZ0NBQWdDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7SUFDakUsQ0FBQztJQU5ELDhEQU1DO0lBRUQsU0FBZ0IsdUJBQXVCLENBQUMsRUFBQyxLQUFLLEVBQWdCLEVBQUUsWUFBd0I7UUFDcEYsSUFBSSxFQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUcsbUJBQW1CLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLDhCQUE4QixDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDM0ssZ0NBQWdDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7SUFDakUsQ0FBQztJQU5ELDBEQU1DO0lBRUQsU0FBZ0Isd0JBQXdCLENBQUMsRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFrQztRQUN6RixJQUFJLEVBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkgsSUFBSSxlQUFlLEdBQThCLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUE7UUFDcEgsSUFBSSxLQUFLLEdBQWtCLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6RSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxXQUFXLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO1FBQzlDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7UUFDdEQsbUJBQW1CLEVBQUUsQ0FBQztRQUN0QixnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDakUsZ0NBQWdDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0Msa0NBQWtDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0Msb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7SUFDakUsQ0FBQztJQWRELDREQWNDO0lBR0QsU0FBZ0IsY0FBYyxDQUMxQixHQUE0QyxFQUM1QyxPQUFTO1FBRVQsT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFMRCx3Q0FLQztJQUVELDBFQUEwRTtJQUc3RCxRQUFBLHFCQUFxQixHQUFHLDRCQUEwQyxDQUFDO0lBRW5FLFFBQUEsS0FBSyxHQUFDLEVBQUUsQ0FBQztJQUV0QixjQUFjO0lBRWQsSUFBSSxtQkFBbUIsR0FBdUI7UUFDMUMsS0FBSyxFQUFFLE9BQU87UUFDZCxJQUFJLEVBQUUsTUFBTTtRQUNaLEdBQUcsRUFBRSxJQUFJO1FBQ1QsSUFBSSxFQUFFLElBQUk7UUFDVixHQUFHLEVBQUUsSUFBSTtRQUNULEdBQUcsRUFBRSxJQUFJO1FBQ1QsSUFBSSxFQUFFLElBQUk7UUFDVixLQUFLLEVBQUUsSUFBSTtRQUNYLElBQUksRUFBRSxJQUFJO1FBQ1YsS0FBSyxFQUFFLElBQUk7UUFDWCxLQUFLLEVBQUUsR0FBRztRQUNWLEtBQUssRUFBRSxHQUFHO0tBQ2IsQ0FBQztJQUVXLFFBQUEsaUJBQWlCLEdBQUM7UUFDM0IsU0FBUyxDQUFDLFdBQWU7WUFDckIsSUFBRyxXQUFXLElBQUUsSUFBSSxFQUFDO2dCQUNqQixPQUFPLENBQUMsQ0FBQzthQUNaO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sQ0FBQyxTQUFnQixFQUFFLFdBQWtCLEVBQUUsRUFBUztZQUNuRCxJQUFHLFdBQVcsSUFBRSxDQUFDLEVBQUM7Z0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEdBQUMsRUFBRSxHQUFDLHdCQUF3QixHQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3RFO1lBQ0QsT0FBTyxTQUFTLEdBQUMsV0FBVyxDQUFDO1FBQ2pDLENBQUM7UUFDRCxJQUFJLEVBQUM7WUFDRCxNQUFNLENBQUMsQ0FBSztnQkFDUixPQUFPLENBQUMsS0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDdEIsQ0FBQztZQUNELEdBQUc7Z0JBQ0MsT0FBTyxtQkFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQy9CLENBQUM7WUFDRCxZQUFZLENBQUMsQ0FBUTtnQkFDakIsSUFBSSxjQUFjLEdBQUMsOERBQThELENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUN6RixJQUFJLEtBQVcsQ0FBQztnQkFDaEIsSUFBSSxZQUFxQixDQUFDO2dCQUMxQixZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixJQUFJLGNBQWMsRUFBQztvQkFDZixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMvQixJQUFJO3dCQUNBLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDdEM7b0JBQUMsT0FBTSxHQUFHLEVBQUM7d0JBQ1IsWUFBWSxHQUFHLEtBQUssQ0FBQztxQkFDeEI7aUJBQ0o7Z0JBQUEsQ0FBQztnQkFDRiw0RkFBNEY7Z0JBQzVGLE9BQU8sY0FBYyxJQUFJLFlBQVksQ0FBQTtZQUN6QyxDQUFDO1lBQ0QsY0FBYyxDQUFDLENBQVE7Z0JBQ25CLElBQUksY0FBYyxHQUFDLHNDQUFzQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDakUsT0FBTyxjQUFjLENBQUE7WUFDekIsQ0FBQztZQUNELFNBQVMsQ0FBQyxDQUFLO2dCQUNYLE9BQU8sQ0FBQyxLQUFHLFNBQVMsSUFBSSxDQUFDLEtBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLENBQUMsSUFBRyxDQUFDLENBQUMsTUFBTSxLQUFHLENBQUMsQ0FBRTt1QkFDeEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLE1BQU0sQ0FBQyxJQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBRSxDQUFBO1lBQzlELENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBSztnQkFDTixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUNsQixDQUFDO1lBQ0QsR0FBRyxDQUFDLENBQVE7Z0JBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQTtZQUNuQixDQUFDO1lBQ0QscUJBQXFCLENBQUMsSUFBVyxFQUFDLFFBQWUsRUFBRSx3QkFBK0I7Z0JBQzlFLElBQUksZUFBZSxHQUFHLENBQUMsRUFBTyxFQUFFLEVBQU8sRUFBQyxFQUFFO29CQUN0QyxJQUFJLE1BQU0sQ0FBQztvQkFDWCxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNwRCxNQUFNLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN4QixNQUFNLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN4QixPQUFPLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNwQyxDQUFDLENBQUE7Z0JBQ0QsSUFBSSxpQkFBaUIsR0FBRyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVELHVEQUF1RDtnQkFDdkQsSUFBSSxLQUFLLEdBQUcsbUJBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDN0csSUFBSSxjQUFjLEdBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUMsdURBQXVEO2dCQUN2RCxJQUFJLFVBQVUsR0FBRyxtQkFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNqRiwrQ0FBK0M7Z0JBQy9DLElBQUksZUFBZSxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hELElBQUksYUFBYSxHQUFHLGVBQWUsR0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTO2dCQUNqRCxPQUFPLENBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLElBQUksWUFBWTtvQkFDakQsYUFBYSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsbUJBQW1CO2lCQUNoRCxDQUFBO1lBQ0wsQ0FBQztZQUNELHFJQUFxSTtZQUNySSwySUFBMkk7WUFDM0ksK0ZBQStGO1lBQy9GLEdBQUc7WUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0JBbUNJO1NBQ1A7S0FDSixDQUFDO0lBSUYsSUFBSSxrQkFBa0IsR0FBaUMsRUFDdEQsQ0FBQTtJQUNELElBQUksZ0JBQWdCLEdBQStCLEVBQ2xELENBQUE7SUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxnQkFBdUI7UUFDdkQsSUFBSSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUN4RCxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBUyxPQUFPO1lBQzlGLElBQUksZUFBZSxHQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQyxJQUFHLGVBQWUsSUFBSSxtQkFBbUIsRUFBQztnQkFDdEMsT0FBTyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUMvQztpQkFBSyxJQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUM7Z0JBQ3pDLE9BQU8sT0FBTyxDQUFBO2FBQ2pCO2lCQUFLLElBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBQztnQkFDbkMsT0FBTyxPQUFPLENBQUE7YUFDakI7aUJBQUssSUFBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFDO2dCQUMzQixPQUFPLE9BQU8sQ0FBQTthQUNqQjtZQUNELE9BQU8sNEJBQTRCLEdBQUMsT0FBTyxHQUFDLEdBQUcsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFoQkQsa0RBZ0JDO0lBRUQsU0FBZ0IsbUJBQW1CLENBQUksbUJBQWtFO1FBQ3JHLE9BQU8sVUFBUyw0QkFBbUM7WUFDL0MsSUFBRyxDQUFDLG1CQUFtQixDQUFDLDRCQUE0QixDQUFDLEVBQUM7Z0JBQ2xELElBQUksTUFBTSxHQUFHLDRCQUE0QixDQUFDO2dCQUMxQyxJQUFHO29CQUNDLGtFQUFrRTtvQkFDbEUsSUFBSSxXQUFXLEdBQUksSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hFLG1CQUFtQixDQUFDLDRCQUE0QixDQUFDLEdBQUcsVUFBUyxPQUFPO3dCQUNoRSxJQUFHOzRCQUNDLElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUseUJBQWlCLENBQUMsQ0FBQzt5QkFDeEQ7d0JBQUEsT0FBTSxHQUFHLEVBQUM7NEJBQ1AsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsRUFBQyw0QkFBNEIsQ0FBQyxDQUFBOzRCQUMvRSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDOzRCQUNyQixNQUFNLEdBQUcsQ0FBQzt5QkFDYjt3QkFDRCxPQUFPLE1BQU0sQ0FBQztvQkFDbEIsQ0FBQyxDQUFBO2lCQUNKO2dCQUFBLE9BQU0sR0FBRyxFQUFDO29CQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLEVBQUMsNEJBQTRCLENBQUMsQ0FBQTtvQkFDaEYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDcEIsTUFBTSxHQUFHLENBQUM7aUJBQ2I7YUFDSjtZQUNELE9BQU8sbUJBQW1CLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUE7SUFDTCxDQUFDO0lBMUJELGtEQTBCQztJQUVZLFFBQUEsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM5RCxRQUFBLGlCQUFpQixHQUFLLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFHekUsSUFBSSxZQUFZLEdBQUcsSUFBQSwrQkFBZSxFQUEyQixFQUFDLG1CQUFtQixFQUFuQiwyQkFBbUIsRUFBRSxpQkFBaUIsRUFBakIseUJBQWlCLEVBQUMsQ0FBQyxDQUFBO0lBQy9GLElBQUksdUJBQXVCLEdBQUcsQ0FBQyxvQkFBdUMsRUFBQyxjQUE2QixFQUFFLFVBQXFCLEVBQUMsV0FBZ0IsRUFBQyxTQUFnQixFQUM1SCxFQUFFOztRQUN0QyxJQUFJLFFBQVEsR0FBYyxJQUFJLENBQUM7UUFDL0IsSUFBSSxPQUFPLEdBQUMsS0FBSyxDQUFDO1FBQ2xCLElBQUksTUFBTSxHQUFhLElBQUksQ0FBQztRQUM1QixJQUFJLFNBQWdCLENBQUM7UUFDckIsSUFBSSxNQUFNLEdBQWEsSUFBSSxDQUFDO1FBQzdCLDRDQUE0QztRQUMzQyxJQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEVBQUM7WUFDN0QsS0FBSSxJQUFJLEtBQUssSUFBSSxXQUFXLEVBQUMsRUFBRSx5Q0FBeUM7Z0JBQ3BFLElBQUksU0FBUyxJQUFFLFFBQVEsRUFBQztvQkFDcEIsSUFBSSxFQUFDLFFBQVEsRUFBRyxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsS0FBSyxDQUFDO29CQUN2QyxNQUFNLEdBQUMsTUFBTSxDQUFDO29CQUNkLE1BQU0sR0FBQyxLQUFLLENBQUM7b0JBQ2IsU0FBUyxHQUFDLFFBQVEsQ0FBQztpQkFDdEI7cUJBQUk7b0JBQ0QsSUFBSSxFQUFDLFlBQVksRUFBRyxTQUFTLEVBQUUsVUFBVSxFQUFDLEdBQUcsS0FBSyxDQUFDO29CQUNuRCxNQUFNLEdBQUMsVUFBVSxDQUFDO29CQUNsQixNQUFNLEdBQUMsU0FBUyxDQUFDO29CQUNqQixTQUFTLEdBQUMsWUFBWSxDQUFDO2lCQUMxQjtnQkFDRCxJQUFHLFVBQVUsQ0FBQyxTQUF1QixDQUFDLElBQUUsTUFBTSxFQUFDO29CQUMzQyxRQUFRLEdBQUUsTUFBTSxDQUFDLENBQUUsb0JBQW9CO29CQUN2QyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUNmLE9BQU8sRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFDLENBQUE7aUJBQzVCO3FCQUFJO29CQUNELFFBQVEsR0FBQyxJQUFJLENBQUM7b0JBQ2QsT0FBTyxHQUFDLEtBQUssQ0FBQztpQkFDakI7YUFDSjtTQUNKO1FBQ0QsS0FBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUEsZ0JBQU0sRUFBQyxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBQztZQUNsRCxJQUFHLENBQUEsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLGVBQWUsS0FBSSxVQUFVLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEtBQUssRUFBQztnQkFDdEUsS0FBSSxJQUFJLGVBQWUsSUFBSSxJQUFBLGdCQUFRLEVBQUMsTUFBQSxVQUFVLENBQUMsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLGVBQWUsQ0FBQyxtQ0FBSSxFQUFFLENBQUMsRUFBQztvQkFDeEUsSUFBSSxNQUFNLEdBQUUsSUFBQSwrQkFBdUIsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsZUFBZSxFQUFDLFdBQVcsRUFBQyxTQUFTLENBQUMsQ0FBQztvQkFDbEcsSUFBRyxNQUFNLENBQUMsT0FBTyxFQUFFO3dCQUNmLFFBQVEsR0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO3dCQUN6QixPQUFPLEdBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQzt3QkFDdkIsT0FBTyxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsQ0FBQTt3QkFDekIsTUFBTTtxQkFDVDt5QkFBSzt3QkFDRixRQUFRLEdBQUMsSUFBSSxDQUFDO3dCQUNkLE9BQU8sR0FBQyxLQUFLLENBQUM7d0JBQ2YsNkJBQTZCO3FCQUMvQjtpQkFDSjthQUNKO1NBQ0o7UUFDRCxPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxDQUFBO0lBQzdCLENBQUMsQ0FBQTtJQWpEUyxRQUFBLHVCQUF1QiwyQkFpRGhDO0lBSVMsUUFBQSxZQUFZLEdBQWdCO1FBQ25DLE9BQU8sRUFBQyxDQUFDLFdBQXNCLEVBQUMsRUFBRTtZQUM5QiwwQkFBMEI7WUFDMUIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksUUFBUSxHQUFjLElBQUksQ0FBQztZQUMvQixPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxDQUFDO1lBQzNCLG9CQUFvQjtZQUNwQixtRkFBbUY7WUFDbkYsK0VBQStFO1lBQy9FLHNCQUFzQjtZQUN0QixpQ0FBaUM7WUFDakMsa0hBQWtIO1lBQ2xILDZCQUE2QjtZQUM3QiwyQkFBMkI7WUFDM0IsNkJBQTZCO1FBQ2pDLENBQUM7UUFDRixVQUFVLEVBQUMsQ0FBQyxXQUFzQixFQUFDLEVBQUU7WUFDaEMsMEJBQTBCO1lBQzFCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLFdBQVcsR0FBYyxJQUFJLENBQUM7WUFDbEMsT0FBTyxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsQ0FBQTtZQUMvQixvQkFBb0I7WUFDcEIsd0NBQXdDO1lBQ3pDLDhGQUE4RjtZQUM5RiwrRUFBK0U7WUFDL0UseUJBQXlCO1lBQ3pCLG9DQUFvQztZQUNwQyxpTEFBaUw7WUFDakwsa0NBQWtDO1lBQ2xDLGdDQUFnQztZQUNoQyxpQ0FBaUM7UUFDcEMsQ0FBQztRQUNELFdBQVcsRUFBQyxDQUFDLFdBQXNCLEVBQUMsRUFBRTtZQUNsQywwQkFBMEI7WUFDMUIsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLElBQUksTUFBTSxHQUFjLElBQUksQ0FBQztZQUM3QixPQUFPLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxDQUFBO1lBQ3JCLG9CQUFvQjtZQUNwQixvQkFBb0I7WUFDcEIsK0JBQStCO1lBQy9CLDJDQUEyQztZQUMzQyw0QkFBNEI7WUFDNUIsc0lBQXNJO1lBQ3RJLGlCQUFpQjtZQUNqQixvQkFBb0I7WUFDcEIsUUFBUTtZQUNSLDhCQUE4QjtZQUM5QiwrQ0FBK0M7WUFDL0MsdUJBQXVCO1lBQ3ZCLCtDQUErQztZQUMvQyw4QkFBOEI7WUFDOUIsK0JBQStCO1lBQy9CLCtGQUErRjtZQUMvRix5QkFBeUI7WUFDekIsb0JBQW9CO1lBQ3BCLHFEQUFxRDtZQUNyRCxnRkFBZ0Y7WUFDaEYsc0VBQXNFO1lBQ3RFLG9GQUFvRjtZQUNwRixtRkFBbUY7WUFDbkYsbUNBQW1DO1lBQ25DLDRCQUE0QjtZQUM1Qix5REFBeUQ7WUFDekQsdUJBQXVCO1lBQ3ZCLHdCQUF3QjtZQUN4QiwrQkFBK0I7WUFDL0IsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZiwrQkFBK0I7WUFDL0IsV0FBVztZQUNYLHNDQUFzQztZQUN0Qyx5QkFBeUI7WUFDekIsMkJBQTJCO1lBQzNCLDJDQUEyQztZQUMzQyx5QkFBeUI7WUFDekIsNEJBQTRCO1lBQzVCLGtEQUFrRDtZQUNsRCx5QkFBeUI7WUFDekIsNEJBQTRCO1lBQzVCLGdCQUFnQjtZQUNoQix5QkFBeUI7WUFDekIsNEJBQTRCO1lBQzVCLFdBQVc7WUFDWCxhQUFhO1lBQ2IscUJBQXFCO1lBQ3JCLHdCQUF3QjtZQUN4QixPQUFPO1lBQ1AsR0FBRztZQUNILHVCQUF1QjtRQUMzQixDQUFDO1FBQ0QsY0FBYyxFQUFDLENBQUMsV0FBc0IsRUFBQyxFQUFFO1lBQ3JDLDBCQUEwQjtZQUMxQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxTQUFTLEdBQWMsSUFBSSxDQUFDO1lBQ2hDLE9BQU8sRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLENBQUE7WUFDM0Isb0JBQW9CO1lBQ3BCLG1CQUFtQjtZQUNuQix1QkFBdUI7WUFDdkIsa0NBQWtDO1lBQ2xDLHVGQUF1RjtZQUN2RixrQ0FBa0M7WUFDbEMsNE5BQTROO1lBQzVOLG9CQUFvQjtZQUNwQix1QkFBdUI7WUFDdkIsUUFBUTtZQUNSLDhCQUE4QjtZQUM5QixtREFBbUQ7WUFDbkQsdUJBQXVCO1lBQ3ZCLCtDQUErQztZQUMvQyw4QkFBOEI7WUFDOUIsK0JBQStCO1lBQy9CLHdJQUF3STtZQUN4SSx5QkFBeUI7WUFDekIsb0JBQW9CO1lBQ3BCLGlEQUFpRDtZQUNqRCw4QkFBOEI7WUFDOUIseUJBQXlCO1lBQ3pCLDRCQUE0QjtZQUM1Qix3QkFBd0I7WUFDeEIsZUFBZTtZQUNmLCtCQUErQjtZQUMvQixXQUFXO1lBQ1gsc0NBQXNDO1lBQ3RDLDRCQUE0QjtZQUM1Qiw4QkFBOEI7WUFDOUIsMkNBQTJDO1lBQzNDLDRCQUE0QjtZQUM1QiwrQkFBK0I7WUFDL0Isa0RBQWtEO1lBQ2xELDRCQUE0QjtZQUM1QiwrQkFBK0I7WUFDL0IsZ0JBQWdCO1lBQ2hCLDRCQUE0QjtZQUM1QiwrQkFBK0I7WUFDL0IsV0FBVztZQUNYLGFBQWE7WUFDYix3QkFBd0I7WUFDeEIsMkJBQTJCO1lBQzNCLE9BQU87WUFDUCxHQUFHO1lBQ0gsNkJBQTZCO1FBQ2pDLENBQUM7UUFDRCxXQUFXLEVBQUMsRUFBc0I7UUFDbEMsS0FBSyxFQUFDLEVBQW9HO1FBQzFHLE1BQU0sRUFBQyxFQUE0RTtLQUN0RixDQUFBO0lBQ0QseUdBQXlHO0lBR2xHLElBQUksa0JBQWtCLEdBQUcsQ0FDNUIsT0FBeUUsRUFDekUsVUFBa0YsRUFDbEYsV0FBeUUsRUFDekUsY0FBa0YsRUFDckYsRUFBRTtRQUNDLG9CQUFZLG1DQUNMLG9CQUFZLEtBQ2YsT0FBTztZQUNQLFVBQVU7WUFDVixXQUFXO1lBQ1gsY0FBYyxHQUNqQixDQUFBO0lBQ0wsQ0FBQyxDQUFBO0lBYlUsUUFBQSxrQkFBa0Isc0JBYTVCO0lBS0QsU0FBUyxHQUFHLENBQUMsR0FBc0I7UUFDL0Isb0RBQW9EO1FBQ3BELElBQUcsS0FBSyxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQixvREFBb0Q7UUFDcEQsT0FBTyxHQUFHLEdBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFJLGtCQUFrQixHQUEyQixFQUFFLENBQUE7SUFFbkQsU0FBZ0IsZUFBZSxDQUFDLElBTy9COztRQUNHLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBNEIsRUFBQyxFQUFFOztZQUNuRCxJQUFJLEVBQUMsVUFBVSxFQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsR0FBQyxJQUFJLENBQUM7WUFDL0MsVUFBVSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLEdBQUMsSUFBSSxDQUFDO1lBQ3pELFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDbEQsTUFBQSxtQkFBbUIsQ0FBQyxnQkFBZ0IsMENBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFDLEVBQUUsQ0FBQSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFGLElBQUcsV0FBVyxJQUFJLG1CQUFtQixDQUFDLFlBQVksRUFBQztnQkFDL0MsSUFBRyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEtBQUssRUFBQztvQkFDekUsS0FBSSxJQUFJLEdBQUcsSUFBSSxJQUFBLGdCQUFRLEVBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUM7d0JBQ2hELEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO3FCQUMxRDtpQkFDSjthQUNKO1FBQ0wsQ0FBQyxDQUFBO1FBRUQsSUFBSSxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBQyxHQUFHLElBQUksQ0FBQztRQUNwRixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUyxDQUFDO1FBQzVCLElBQUksRUFBQyxvQkFBb0IsRUFBQyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxzQkFBc0IsR0FBRyxJQUFBLDJCQUFtQixFQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hJLElBQUksVUFBVSxHQUFJLElBQUEsMkJBQW1CLEVBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pHLElBQUksY0FBYyxHQUFHLG1CQUFtQixDQUFDLGVBQWUsQ0FBQztRQUV6RCxJQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUM7WUFDdkQsSUFBSSxPQUFPLEdBQUcsTUFBQSxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQSxFQUFFLENBQUMsZUFBZSxJQUFFLGNBQWMsQ0FBQywwQ0FBRSxLQUFLLENBQUM7WUFDekcsSUFBSSxlQUFlLEdBQUcsTUFBQSxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQSxFQUFFLENBQUMsZUFBZSxJQUFFLE9BQU8sQ0FBQywwQ0FBRSxXQUFXLENBQUE7WUFDL0csSUFBRyxPQUFPLElBQUksb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUM7Z0JBQ3hDLGtFQUFrRTtnQkFDbEUsSUFBSSxLQUFLLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNGLElBQUcsY0FBYyxJQUFJLG1CQUFtQixDQUFDLGNBQWMsRUFBQztvQkFDcEQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxHQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQywrQkFBK0I7aUJBQzFHO2dCQUNELGNBQWMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO2dCQUNuQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2FBQ3RCO1NBQ0o7UUFDRCxJQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLEVBQUM7WUFDbEMsSUFBRyxVQUFVLENBQUMsY0FBYyxDQUFDLFlBQVksS0FBSyxFQUFDO2dCQUMzQyxJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFpQixDQUFBO2dCQUM3RCxJQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsSUFBRSxDQUFDLEVBQUM7b0JBQzdDLElBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFFLENBQUMsRUFBQzt3QkFDN0MsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxHQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO3FCQUN6RTtvQkFDRCxjQUFjLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDO2lCQUNoQztnQkFDRCxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNFLElBQUcsYUFBYSxHQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUM7b0JBQ2pDLG9EQUFvRDtvQkFDcEQsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FDdEMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBQyxFQUFFLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLEdBQUMsQ0FBQyxDQUFDLENBQ2pGLENBQUM7b0JBQ0YsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFlBQVksQ0FBQTtpQkFDNUM7Z0JBQ0QsT0FBTSxhQUFhLEdBQUMsWUFBWSxDQUFDLE1BQU0sRUFBQztvQkFDcEMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFnQixDQUFDLENBQUE7aUJBQ3RDO2dCQUVELFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUEsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZHLElBQUksTUFBTSxHQUFHLEtBQW1CLENBQUE7Z0JBQ2hDLElBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFFLENBQUM7b0JBQzVDLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQztvQkFDMUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxJQUFFLENBQUMsRUFDakQ7b0JBQ0csSUFBSSxPQUFPLEdBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFBLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxJQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUM7d0JBQ2QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUMsRUFBRSxDQUFBLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2hELG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO3dCQUMzRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUEsOEJBQWUsRUFBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLE1BQU0sRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBQyxJQUFJLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDakgsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7d0JBQzVCLElBQUcsbUJBQW1CLENBQUMsTUFBTSxJQUFFLE1BQU0sRUFBQzs0QkFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDOzRCQUNuQzs7Ozs7Z0RBS29CO3lCQUN2Qjs2QkFBSTs0QkFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7NEJBQ2hCLE1BQU0sUUFBUSxHQUFjLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7NEJBQ3ZFLEtBQUksSUFBSSxPQUFPLElBQUksT0FBTyxFQUFDO2dDQUN2QixZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxFQUFFLENBQUEsQ0FBQyxJQUFFLE9BQU8sQ0FBQyxNQUFNLENBQVcsR0FBRyxDQUFDLENBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7Z0NBQ2pGLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBQyxLQUFLLENBQUM7Z0NBQ3hCLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQ3REOzRCQUNELElBQUksc0JBQXNCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUMsRUFBRSxDQUFBLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDbEcsSUFBSSxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQzs0QkFDdkIsSUFBSSxxQkFBcUIsR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFBLEtBQUssR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQzs0QkFDOUMsSUFBRyxPQUFPLENBQUMsTUFBTSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sRUFBQztnQ0FDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFDLDREQUE0RDs2QkFDN0c7NEJBQ0QsSUFBSSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBRTs0QkFDN0MsSUFBSSxpQkFBaUIsR0FBRyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUM7NEJBQzFGLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFZLEVBQUMsRUFBRSxDQUFBLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBRSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDOUYsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxHQUFDLGdCQUFnQixDQUFDOzRCQUMzRCxVQUFVLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsR0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDOzRCQUNuRSxNQUFBLG1CQUFtQixDQUFDLGdCQUFnQiwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUMsRUFBRSxDQUNyRCxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFXLEdBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUNsSCxDQUFBO3lCQUNKO3FCQUNKO3lCQUFJO3dCQUNELFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFDLENBQUMsQ0FBQztxQkFDekQ7aUJBQ0o7Z0JBQ0QsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxHQUFFLFlBQVksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsd0JBQXdCO2dCQUNyRyxVQUFVLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsR0FBQyxJQUFJLENBQUM7Z0JBQy9ELElBQUcsbUJBQW1CLENBQUMsbUNBQW1DLEVBQUM7b0JBQ3ZELFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxtQ0FBbUMsQ0FBQyxHQUFDLElBQUksQ0FBQztpQkFDNUU7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQXRIRCwwQ0FzSEM7SUFFRCxTQUFTLG1CQUFtQixDQUFDLGNBQThCLEVBQUUsS0FBVztRQUNwRSxJQUFHLFVBQVUsQ0FBQyxpQkFBaUIsRUFBQztZQUM1QixVQUFVLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBRyxVQUFVLENBQUMscUNBQXFDLEVBQUM7WUFDaEQsVUFBVSxDQUFDLHFDQUFxQyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMzRTtJQUNMLENBQUM7SUFFRCxTQUFnQiw4QkFBOEIsQ0FDMUMsb0JBQWdHLEVBQ2hHLFdBQWlFLEVBQ2pFLFVBQXFCLEVBQ3JCLEVBQW1CLEVBQ25CLEtBQVcsRUFDWCxvQkFBK0IsRUFBRSwrQ0FBK0M7SUFDaEYsZUFBK0IsRUFDL0IsSUFBeUI7UUFFekIsb0NBQW9DO1FBQ3BDLEtBQUksSUFBSSxVQUFVLElBQUksb0JBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFDO1lBQ25ELElBQUksT0FBTyxHQUFHLG9CQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRCxJQUFJLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRCxJQUFBLGdCQUFNLEVBQUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUMsRUFBRTtnQkFDckUsSUFBSSxPQUFPLEdBQUcsd0JBQXdCLENBQUMsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztnQkFDL0UsOEJBQThCLENBQzFCLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsY0FBYyxFQUNkLFVBQVUsa0NBQ04sS0FBSyxLQUFFLENBQUMsT0FBTyxDQUFDLEVBQUMsT0FBTyxtREFDeEIsb0JBQW9CLEdBQUssY0FBYyxLQUFFLENBQUMsT0FBTyxDQUFDLEVBQUMsT0FBTyxLQUM5RCxVQUFVLEVBQ1YsSUFBSSxDQUNQLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQTtTQUNMO1FBQ0QsVUFBVTtRQUNWLEtBQUksSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUM7WUFDL0IsS0FBSSxJQUFJLFVBQVUsSUFBSSxvQkFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNO2dCQUFFLElBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsb0JBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFDO29CQUM3RyxJQUFJLFVBQVUsR0FBYyxJQUFBLG9CQUFZLGtDQUFLLEtBQUssS0FBRSxVQUFVLElBQUUsQ0FBQTtvQkFDaEUsSUFBSSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7b0JBQ2hDLElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDO29CQUMzQixHQUFFO3dCQUNFLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO3dCQUM3QixvQkFBb0IsQ0FBQyxVQUFVLENBQUM7NEJBQzVCLFlBQVksaUJBQ1AsUUFBUSxFQUFDLEtBQUssSUFBSyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsc0JBQXNCLEdBQ2xFLG9CQUFvQixFQUNwQixJQUFJLENBQ1AsQ0FBQTt3QkFDTCxJQUFJLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBQyxHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUNqRSxJQUFJLE9BQWtCLENBQUM7d0JBQ3ZCLElBQUcsY0FBYyxJQUFFLElBQUksRUFBQzs0QkFDcEIsS0FBSSxPQUFPLElBQUksY0FBYyxFQUFDO2dDQUMxQixJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssY0FBYyxDQUFDLE9BQU8sQ0FBVSxDQUFDO2dDQUN0RSxJQUFHLE1BQU0sRUFBQztvQ0FDTixVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBVSxDQUFDO29DQUN2RCxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFVLENBQUM7b0NBQ2pFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQ0FDaEMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2lDQUMzQjs2QkFDSjt5QkFDSjtxQkFDSixRQUFPLGdCQUFnQixJQUFJLHNCQUFzQixFQUFFLEdBQUMsQ0FBQyxFQUFFO29CQUN4RCxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFBLEVBQUU7d0JBQy9CLDhFQUE4RTtvQkFDbEYsQ0FBQyxDQUFDLENBQUE7b0JBQ0YsSUFBSSxVQUFVLEdBQUcsS0FBSyxHQUFDLFVBQXdCLENBQUE7b0JBQy9DLElBQUksd0JBQXdCLEdBQUcsSUFBQSw4QkFBc0IsRUFBQyxLQUFLLENBQUMsUUFBUyxDQUFDLENBQUM7b0JBQ3ZFLElBQUcsVUFBVSxDQUFDLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUMsRUFBQzt3QkFDN0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsd0JBQXdCLEVBQUUsQ0FBQyxDQUFBO3FCQUNuRztvQkFDRCxJQUFJLHNCQUFzQixHQUFHLFVBQVUsQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO29CQUMxRyxJQUFJLGFBQWEsR0FDYixzQkFBc0I7d0JBQ3RCLHNCQUFzQixDQUFDLG1DQUFtQzt3QkFDMUQsc0JBQXNCLENBQUMsbUNBQW1DLElBQUksVUFBVSxDQUFBLENBQUM7d0JBQ3JFLElBQUk7d0JBQ1IsQ0FBQyxDQUFBLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQzs0QkFDakIsSUFBSTs0QkFDUixDQUFDLENBQUEsT0FBTyxDQUFBO29CQUNaLElBQUcsU0FBUyxFQUFDO3dCQUNULFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxhQUFhLENBQUM7cUJBQzFDO3lCQUFLLElBQUcsZUFBZSxJQUFJLElBQUksRUFBQzt3QkFDN0IsZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLGFBQWEsQ0FBQztxQkFDL0M7aUJBQ0o7U0FDSjtJQUNMLENBQUM7SUFoRkQsd0VBZ0ZDO0lBRUQsU0FBZ0Isd0JBQXdCLENBQUMsY0FBNEIsRUFBRSxNQUFtQjtRQUN0Riw0RUFBNEU7UUFDNUUsSUFBRyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUM7WUFDckIsT0FBTyxjQUFjLENBQUM7U0FDekI7UUFDRCxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBQyxDQUFDLE1BQU0sWUFBWSxLQUFLLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQU5ELDREQU1DO0lBRU0sSUFBSSxzQkFBc0IsR0FBRyxDQUFDLFFBQWUsRUFBYyxFQUFFO1FBQ2hFLGlEQUFpRDtRQUNqRCxPQUFPLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQTtJQUMvRCxDQUFDLENBQUE7SUFIVSxRQUFBLHNCQUFzQiwwQkFHaEM7SUFFRCxTQUFnQiwwQkFBMEI7UUFDdEMsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUEsRUFBRSxDQUFBLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUEsRUFBRTtZQUM1RSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQVksRUFBRSxHQUFPLEVBQUMsRUFBRTtnQkFDdkMsSUFBSSxtQkFBbUIsR0FBRyxJQUFBLDhCQUFzQixFQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0RCxPQUFPLG1CQUFtQixDQUFBLENBQUMsQ0FBQSxtQkFBbUIsSUFBRSxDQUFDLENBQUMsWUFBWSxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUMsb0JBQW9CLENBQUE7WUFDekYsQ0FBQyxDQUFBO1lBQ0QsSUFBSSxvQkFBb0IsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUN4RSxJQUFBLG9CQUFVLEVBQUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsRUFBRTtnQkFDckUsSUFBSSxPQUFPLEdBQUcsd0JBQXdCLENBQUMsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztnQkFDL0UsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUMsZUFBZSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQWlCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUMsRUFBRTtvQkFDekssSUFBSSxTQUFTLEdBQUcsRUFBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUMsT0FBTyxFQUFjLENBQUE7b0JBQ3RFLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxDQUFBO1lBQ04sQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFmRCxnRUFlQztJQUVELFNBQWdCLHdCQUF3QixDQUNwQyxvQkFBZ0csRUFDaEcsV0FBaUUsRUFDakUsU0FBb0IsRUFDcEIsVUFBcUIsRUFDckIsSUFBeUI7UUFFekIsSUFBSSxLQUFLLHFCQUFZLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLDhCQUE4QixDQUFDLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsb0JBQVksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0ksQ0FBQztJQVRELDREQVNDO0lBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxVQUFzQixFQUFFLFNBQW1CLEVBQUUsSUFBeUI7UUFDNUYsSUFBSSxhQUEyQixDQUFDO1FBQ2hDLHFCQUFxQjtRQUNyQixJQUFJLFVBQVUsR0FBNEQsRUFBRSxDQUFBO1FBQzVFLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUYsV0FBVyxDQUFDLG9CQUFvQixHQUFHLElBQUEsZ0JBQU0sRUFBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFhLEVBQUUsT0FBa0IsRUFBQyxFQUFFLENBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BMLFdBQVcsQ0FBQyxvQkFBb0IsbUNBQU8sV0FBVyxDQUFDLG9CQUFvQixHQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQ3hGLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFTLENBQUMsbUNBQzlDLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFTLENBQUMsR0FDckQsdUJBQXVCLENBQ3RCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxDQUNiLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFTSxJQUFJLDJCQUEyQixHQUFHLENBQUMsVUFBaUIsRUFBQyxFQUFFO1FBQzFELElBQUksbUJBQW1CLEdBQUcsSUFBQSw4QkFBc0IsRUFBQyxVQUFVLENBQUMsQ0FBQztRQUM3RCxJQUFJLGFBQWEsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDMUMsSUFBSSxzQkFBc0IsR0FBRyxDQUFDLFlBQXlCLEVBQUMsRUFBRTtZQUN0RCxVQUFVLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFDLEVBQUU7O2dCQUM1RSxJQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFDO29CQUN2QixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUEsTUFBQSxTQUFTLENBQUMsS0FBSywwQ0FBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUEsQ0FBQyxDQUFBLFNBQVMsQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFBLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFpQixDQUFDO29CQUMxRyxJQUFHLFFBQVEsRUFBQzt3QkFDUixhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUM3QixzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDcEM7aUJBQ0o7WUFDTCxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQTtRQUNELHNCQUFzQixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDNUMsT0FBTyxhQUFhLENBQUM7SUFDekIsQ0FBQyxDQUFBO0lBaEJVLFFBQUEsMkJBQTJCLCtCQWdCckM7SUFFTSxJQUFJLGdCQUFnQixHQUFHLENBQUMsc0JBQXlELEVBQUUsYUFBcUIsRUFBRSxTQUFxQixFQUFFLFVBQXVCLEVBQUUsQ0FBWSxFQUFDLEVBQUUsQ0FDNUssQ0FBQyxDQUFDLENBQUMsc0JBQXNCO1FBQ3pCLHNCQUFzQixDQUFDLHdCQUF3QjtRQUMvQyxzQkFBc0IsQ0FBQyx3QkFBd0IsSUFBSSxVQUFVO1FBQzdELENBQUM7WUFDRyxhQUFhLElBQUksSUFBQSx1QkFBUSxFQUNyQixDQUFDLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsRUFDMUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUN0QztRQUNMLENBQUM7WUFDRyxTQUFTLElBQUksYUFBYSxDQUM3QixDQUFBO0lBWE0sUUFBQSxnQkFBZ0Isb0JBV3RCO0lBRUUsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLHNCQUF5RCxFQUFFLGFBQXFCLEVBQUUsVUFBdUIsRUFBRSxDQUFZLEVBQUMsRUFBRSxDQUN2SixDQUFDLENBQUMsQ0FBQyxzQkFBc0I7UUFDekIsc0JBQXNCLENBQUMsd0JBQXdCLElBQUksVUFBVTtRQUM3RCxhQUFhLElBQUksSUFBQSx1QkFBUSxFQUNyQixDQUFDLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsRUFDMUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUN0QyxDQUFDLENBQUE7SUFOSyxRQUFBLGtCQUFrQixzQkFNdkI7SUFFQyxJQUFJLHVCQUF1QixHQUFHLENBQUMsc0JBQXlELEVBQUUsVUFBdUIsRUFBQyxFQUFFLENBQ3ZILENBQUMsQ0FBQyxzQkFBc0I7UUFDeEIsc0JBQXNCLENBQUMsd0JBQXdCLElBQUksVUFBVSxDQUFDLENBQUE7SUFGdkQsUUFBQSx1QkFBdUIsMkJBRWdDO0lBV2xFLFNBQWdCLHVCQUF1QixDQUNuQyxTQUFtQixFQUNuQixvQkFBOEYsRUFDOUYsVUFBcUI7UUFFckIsSUFBSSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsR0FBRyxvQkFBWSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMxRCxJQUFJLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxHQUFHLG9CQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzFELElBQUksRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLEdBQUcsb0JBQVksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDbEUsSUFBSSxFQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUMsR0FBRyxvQkFBWSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNuRSxJQUFJLGFBQWEsR0FBRyxJQUFBLG1DQUEyQixFQUFDLFNBQVMsQ0FBQyxRQUFTLENBQUMsQ0FBQztRQUNyRSxJQUFJLDZCQUE2QixHQUFHLFVBQVUsQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFBLDhCQUFzQixFQUFDLFNBQVMsQ0FBQyxRQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ25JLElBQUksZ0JBQWdCLEdBQUcsSUFBQSxnQkFBTSxFQUFDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBQyxFQUFFO1lBQ3hFLElBQUksZUFBZSxHQUFHLDZCQUE2QixJQUFJLENBQUMsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLHdCQUF3QixJQUFJLDZCQUE2QixDQUFDLG1CQUFtQixDQUFDLENBQUE7WUFDdEssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsSUFBRSxTQUFTLENBQUMsUUFBUTtnQkFDbkQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFDdEQsQ0FBQyxlQUFlLENBQUEsQ0FBQztvQkFDYixDQUFDLElBQUEsMEJBQWtCLEVBQ2YsNkJBQTZCLEVBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFBLGVBQWUsQ0FBQzt3QkFDdEMsUUFBUSxFQUFDLFNBQVMsQ0FBQyxRQUFRO3dCQUMzQixVQUFVLEVBQUMsNkJBQTZCLENBQUMsbUJBQW9CO3dCQUM3RCxLQUFLLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLO3FCQUNsQyxDQUFDLENBQUMsVUFBVSxDQUFBLENBQUMsQ0FBQSxFQUFnQixDQUNqQztvQkFDTCxDQUFDLENBQUEsSUFBSSxDQUFDLENBQUE7UUFDZCxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLElBQUksV0FBVyxHQUFpRTtZQUM1RSxRQUFRLEVBQUMsRUFBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBQyxDQUFDLEVBQUM7WUFDbkMsZUFBZSxFQUFDLEVBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUMsQ0FBQyxFQUFDO1lBQzFDLFlBQVksRUFBQyxFQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFDLENBQUMsRUFBQztZQUN2QyxPQUFPLEVBQUMsRUFBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBQyxDQUFDLEVBQUM7WUFDbEMsY0FBYyxFQUFDLEVBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUMsQ0FBQyxFQUFDO1lBQ3pDLElBQUksRUFBQyxFQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFDLENBQUMsRUFBQztTQUNsQyxDQUFBO1FBQ0QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osSUFBSSxVQUFVLEdBQWtCLElBQUksQ0FBQztRQUNyQyxLQUFJLElBQUksUUFBUSxJQUFJLGdCQUFnQixFQUFDO1lBQ2pDLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDL0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLElBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsR0FBQyxHQUFHLEVBQUM7Z0JBQ2xDLEdBQUcsR0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNuQyxVQUFVLEdBQUMsT0FBTyxDQUFDO2FBQ3RCO1NBQ0o7UUFDRCxJQUFHLFVBQVUsSUFBRSxPQUFPLElBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxVQUFVLElBQUUsWUFBWSxFQUFDO1lBQzVFLElBQUcsS0FBSyxDQUFDLCtDQUErQyxFQUFDO2dCQUNyRCxVQUFVLEdBQUMsY0FBYyxDQUFDO2FBQzdCO2lCQUFJO2dCQUNELFVBQVUsR0FBQyxZQUFZLENBQUM7YUFDM0I7U0FDSjtRQUVELHdDQUF3QztRQUN4QyxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUE0QixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMzRixJQUFJLGFBQTJCLENBQUM7UUFDaEMsSUFBSSxnQkFBZ0IsR0FBaUIsT0FBTyxDQUFDO1FBQzdDLElBQUcsS0FBSyxJQUFFLE1BQU0sRUFBQztZQUNiLGdCQUFnQixHQUFHLFVBQVUsQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFBLENBQUMsQ0FBQSxVQUFVLENBQUE7WUFDakQscUVBQXFFO1lBQ3JFLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQTtTQUNuQzthQUFJO1lBQ0QsYUFBYSxHQUFHLE9BQU8sQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFBLENBQUMsQ0FBQSxVQUFVLENBQUE7U0FDOUM7UUFDRCxJQUFJLFNBQVMsR0FBb0I7WUFDN0IsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixNQUFNO1lBQ04sUUFBUTtZQUNSLFNBQVM7WUFDVCxXQUFXO1NBQ2QsQ0FBQTtRQUNELE9BQU8sU0FBUyxDQUFBO0lBQ3BCLENBQUM7SUExRUQsMERBMEVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRSb3dWYWxpZGF0b3IsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSwgT3BjaW9uZXNSb3dWYWxpZGF0b3IsIEZlZWRiYWNrIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbmltcG9ydCB7IGRhdGUsIGNvbXBhcmVGb3JPcmRlciwgY29hbGVzY2UgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgRXN0cnVjdHVyYSwgXHJcbiAgICBGb3JQaywgRm9yUGtSYWl6LFxyXG4gICAgSWRGaW4sIElkRm9ybXVsYXJpbywgSWRQcmVndW50YSwgSWRUYXJlYSwgSWRWYXJpYWJsZSwgXHJcbiAgICBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgSW5mb0Zvcm11bGFyaW8sIFxyXG4gICAgUGxhaW5Gb3JQaywgUmVzcHVlc3RhcywgUmVzcHVlc3Rhc1JhaXosIFJlc3VtZW5Fc3RhZG8sXHJcbiAgICBWYWxvciwgVmlzaXRhLCBcclxuICAgIHRvUGxhaW5Gb3JQayxcclxuICAgIFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgRm9ybXVsYXJpbyxcclxuICAgIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsXHJcbiAgICBJZEVuYyxcclxuICAgIERlZk9wZXJhdGl2byxcclxuICAgIGl0ZXJhdG9yXHJcbn0gZnJvbSBcIi4vdGlwb3NcIjtcclxuXHJcbnZhciBlc3BlY2lhbGVzID0ge30gYXMge1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXM/OihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspPT52b2lkXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvPzoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKT0+dm9pZFxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlcyhjYWxjdWxhclZhcmlhYmxlczoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosZm9yUGs6Rm9yUGspPT52b2lkKXtcclxuICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMgPSBjYWxjdWxhclZhcmlhYmxlc1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byhjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvOihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeixmb3JQazpGb3JQayk9PnZvaWQpe1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvID0gY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2b1xyXG59XHJcblxyXG50eXBlIERhdG9zQnlQYXNzID0gRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7XHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7ICAvLyBubyBzZSBwZXJzaXN0ZVxyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9XHJcbiAgICBkaXJ0eTpib29sZWFuXHJcbn07XHJcblxyXG52YXIgZGF0b3NCeVBhc3MgPSB7fSBhcyBEYXRvc0J5UGFzc1xyXG5cclxuLy9AdHMtaWdub3JlIGFycmFuY2EgZW4gYmxhbmNvXHJcbnZhciBlc3RydWN0dXJhOkVzdHJ1Y3R1cmEgPSBudWxsIGFzIEVzdHJ1Y3R1cmE7XHJcblxyXG5sZXQgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vOihkYnBwOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKT0+UHJvbWlzZTxhbnk+ID0gKCk9PntcclxuICAgIHRocm93IG5ldyBFcnJvcigncGVyc2lzdGlyRGF0b3NCeVBhc3MgU0lOIERFRklOSVInKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MocGVyc2lzdGlyRGF0b3NCeVBhc3NGdW46dHlwZW9mIHBlcnNpc3RpckRhdG9zQnlQYXNzKXtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubyA9IHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGJwcDpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyl7XHJcbiAgICBhd2FpdCBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm8oZGJwcCk7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGZhbHNlXHJcbiAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFbmNvbGFyQmFja3VwKFxyXG4gICAgZW5jb2xhckJhY2t1cEZ1bjoodG9rZW46c3RyaW5nfHVuZGVmaW5lZCwgZm9yUGtSYWl6OkZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhcyk9PnZvaWRcclxuKXtcclxuICAgIGVuY29sYXJCYWNrdXAgPSBlbmNvbGFyQmFja3VwRnVuXHJcbn1cclxuXHJcbmxldCBlbmNvbGFyQmFja3VwOih0b2tlbjpzdHJpbmd8dW5kZWZpbmVkLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzKT0+dm9pZCA9ICgpPT57XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTSU4gRVNQRUNJRklDQVIgZW5jb2xhckJhY2t1cFwiKVxyXG59XHJcblxyXG5leHBvcnQgdmFyIGludGVudGFyQmFja3VwID0gKGZvclBrOkZvclBrKT0+e1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSlcclxuICAgIHZhciB0b2tlbiA9IGRhdG9zQnlQYXNzLnRva2VuO1xyXG4gICAgaWYodG9rZW4pe1xyXG4gICAgICAgIGVuY29sYXJCYWNrdXAodG9rZW4sIGZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXopXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm5vIGhheSB0b2tlbiwgbm8gc2UgcHVkbyBoYWNlciBlbCBiYWNrdXBcIilcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVzdHJ1Y3R1cmEoZXN0cnVjdHVyYUFDYXJnYXI6RXN0cnVjdHVyYSl7XHJcbiAgICBlc3RydWN0dXJhID0gZXN0cnVjdHVyYUFDYXJnYXI7XHJcbiAgICBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCh1YT0+ISF1YS5wcmluY2lwYWwpPy51bmlkYWRfYW5hbGlzaXMhXHJcbiAgICBkZWZPcGVyYXRpdm8uZGVmRm9yID0gbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLm1hcChmPT4oe2hlcm1hbm86IGYuY2FzaWxsZXJvcy5oZXJtYW5vfSkpLnBsYWluKClcclxuICAgIGRlZk9wZXJhdGl2by5kZWZVQSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5tYXAoKHVhRGVmLCB1YSk9Pih7XHJcbiAgICAgICAgcGs6dWFEZWYucGtfYWdyZWdhZGEgYXMgSWRWYXJpYWJsZSwgXHJcbiAgICAgICAgaW5jbHVpZGFzOiBsaWtlQXIodWFEZWYuaGlqYXMpLmtleXMoKSxcclxuICAgICAgICBpZHNGb3I6IGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5maWx0ZXIoZj0+Zi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YSkua2V5cygpXHJcbiAgICB9KSkucGxhaW4oKVxyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7IFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RGF0b3NCeVBhc3MoZGJwcDpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyAmIHtkaXJ0eT86Ym9vbGVhbn0pe1xyXG4gICAgZGF0b3NCeVBhc3MgPSB7XHJcbiAgICAgICAgZGlydHk6ZmFsc2UsXHJcbiAgICAgICAgLi4uZGJwcCxcclxuICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7fSBhcyBEYXRvc0J5UGFzc1tcImZlZWRiYWNrUm93VmFsaWRhdG9yXCJdXHJcbiAgICB9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldERhdG9zQnlQYXNzID0gKCk9PiBkYXRvc0J5UGFzc1xyXG5cclxuZnVuY3Rpb24gb2JqZXRvVmFjaW8obzpvYmplY3Qpe1xyXG4gICAgZm9yKHZhciBrIGluIG8pe1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKXtcclxuICAgIGlmKCFkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciB8fCBvYmpldG9WYWNpbyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcikpe1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3I7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJ0eSgpe1xyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmRpcnR5XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFc3RydWN0dXJhKCl7XHJcbiAgICByZXR1cm4gZXN0cnVjdHVyYTtcclxufVxyXG5cclxudHlwZSBFbGVtZW50b3NSZWdpc3RyYWJsZXMgPSBIVE1MRGl2RWxlbWVudHxIVE1MQnV0dG9uRWxlbWVudHxIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxudHlwZSBEaXJlY3RGdW5jdGlvbjxULCBSZXN1bHQ+ID0gKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsVmFsb3IsSWRGaW4+LCBlbGVtZW50bzpULFxyXG4gICAgZmVlZGJhY2tBbGw6e1xyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLFZhbG9yLElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgfSxcclxuICAgIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4pID0+IFJlc3VsdFxyXG5cclxudHlwZSBSZWdpc3Ryb0VsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0ge1xyXG4gICAgaWQ6IHN0cmluZywgXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIGFueT5cclxufSAmICh7XHJcbiAgICBwcm9wOmtleW9mIFRcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgVFtrZXlvZiBUXT4gLy8gTG8gcXVlIHJldG9ybmEgbGEgZnVuKGNpw7NuKSBzZSB1c2EgcGFyYSBsYSBwcm9wKGVydHkpIGRlbCBlbGVtZW50b1xyXG59fHtcclxuICAgIGF0dHI6c3RyaW5nXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHN0cmluZz4gLy8gTG8gcXVlIHJldG9ybmEgbGEgZnVuKGNpw7NuKSBzZSB1c2EgcGFyYSBlbCB2YWxvciBkZWwgYXR0cihpYnV0bylcclxufXx7XHJcbiAgICBzdHlsZTprZXlvZiBDU1NTdHlsZURlY2xhcmF0aW9uIFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgZWwgdmFsb3IgZGVsIHN0eWxlXHJcbn18e1xyXG4gICAgZGlyZWN0OnRydWVcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgdm9pZD4gLy8gTGEgZnVuY2nDs24gdmEgYSB0b2NhciBkaXJlY3RhbWVudGUgZWwgZWxlbWVudG8geSBoYWNlciB0b2RvIGxvIHF1ZSB0ZW5nYSBxdWUgaGFjZXJcclxufSlcclxuXHJcbnR5cGUgUmVnaXN0cm9FbGVtZW50b3M8VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4gPSB7IFtpZDpzdHJpbmddOiBSZWdpc3Ryb0VsZW1lbnRvPFQ+ICYge2VsZW1lbnRvPzpUfSB9O1xyXG5cclxudmFyIHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsID0ge30gYXMgUmVnaXN0cm9FbGVtZW50b3M8RWxlbWVudG9zUmVnaXN0cmFibGVzPjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RyYXJFbGVtZW50bzxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPihkZWY6UmVnaXN0cm9FbGVtZW50bzxUPil7XHJcbiAgICAvLyBAdHMtaWdub3JlIFPDrSwgcG9kcsOtYSBzZXIgcXVlIGxvcyB0aXBvcyBkZSBUIHNlYW4gZGlzdGludG9zLCBwZXJvIHZhbiBhIHNlciBjb2hlcmVudGVzXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3M6UmVnaXN0cm9FbGVtZW50b3M8VD4gPSByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbDtcclxuICAgIHJlZ2lzdHJvRWxlbWVudG9zW2RlZi5pZF0gPSBkZWY7XHJcbn1cclxuXHJcbnR5cGUgUmVzcHVlc3Rhc0ZvclBrQ29tdW4gPSB7cmVzcHVlc3RhczpSZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6OkZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6VW5pZGFkQW5hbGlzaXN9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOkZvclBrKTpSZXNwdWVzdGFzRm9yUGtDb211blxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOkZvclBrLCBjb25BdW1lbnRhZGFzOnRydWUsIGFncmVnYXJTaUZhbHRhPzpib29sZWFuKTpSZXNwdWVzdGFzRm9yUGtDb211biAmIHtyZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzfVxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOkZvclBrLCBjb25BdW1lbnRhZGFzPzpib29sZWFuLCBhZ3JlZ2FyU2lGYWx0YT86Ym9vbGVhbik6UmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7cmVzcHVlc3Rhc0F1bWVudGFkYXM/OlJlc3B1ZXN0YXN9IHtcclxuICAgIHZhciByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHt9IGFzIFJlc3B1ZXN0YXM7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGxvIHF1ZSBzb2JyYXIgZGUgcmVzcHVlc3RhcyBubyBtZSBpbXBvcnRhLi4uXHJcbiAgICB2YXIgcmVzcHVlc3RhcyA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMgYXMgUmVzcHVlc3RhcztcclxuICAgIHZhciByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXo7IFxyXG4gICAgdmFyIGZvclBrUmFpejogRm9yUGs7IFxyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzfHVuZGVmaW5lZCA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXNcclxuICAgIHZhciBmb3JQa0FwaWxhZGEgPSBmb3JQaztcclxuICAgIHZhciBwaWxhOlt1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpcywgdWFEZWY6VW5pZGFkQW5hbGlzaXMsIGZvclBrOkZvclBrXVtdID0gW107XHJcbiAgICB3aGlsZSh1bmlkYWRfYW5hbGlzaXMpe1xyXG4gICAgICAgIHZhciB1YURlZjpVbmlkYWRBbmFsaXNpcyA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgICAgICBwaWxhLnB1c2goW3VuaWRhZF9hbmFsaXNpcywgdWFEZWYsIGZvclBrQXBpbGFkYV0pO1xyXG4gICAgICAgIGZvclBrQXBpbGFkYT17Li4uZm9yUGtBcGlsYWRhfTtcclxuICAgICAgICBkZWxldGUgZm9yUGtBcGlsYWRhW3VhRGVmLnBrX2FncmVnYWRhXVxyXG4gICAgICAgIHVuaWRhZF9hbmFsaXNpcz11YURlZi5wYWRyZVxyXG4gICAgfVxyXG4gICAgd2hpbGUocGlsYS5sZW5ndGgpe1xyXG4gICAgICAgIFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdID0gcGlsYS5wb3AoKSFcclxuICAgICAgICB2YXIgdmFsb3JQa09Qb3NpY2lvbiA9IGZvclBrQXBpbGFkYVt1YURlZi5wa19hZ3JlZ2FkYV07XHJcbiAgICAgICAgaWYodmFsb3JQa09Qb3NpY2lvbiA9PSB1bmRlZmluZWQpe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhbHRhIHVuIHZhbG9yIHBhcmEgJHtKU09OLnN0cmluZ2lmeSh1YURlZi5wa19hZ3JlZ2FkYSl9YClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID09IG51bGwpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3B1ZXN0YXNBbnRlcmlvcj1yZXNwdWVzdGFzO1xyXG4gICAgICAgIGxldCBwb3NpY2lvbiA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5P3ZhbG9yUGtPUG9zaWNpb24gLSAxOnZhbG9yUGtPUG9zaWNpb25cclxuICAgICAgICByZXNwdWVzdGFzID0gcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdW3Bvc2ljaW9uXTtcclxuICAgICAgICBpZihyZXNwdWVzdGFzID09IG51bGwpe1xyXG4gICAgICAgICAgICBpZihhZ3JlZ2FyU2lGYWx0YSl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0ge30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0FudGVyaW9yW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dID0gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZXhpc3RlIGVsIGVsZW1lbnRvICcke3Bvc2ljaW9ufScgZW4gbGEgdW5pZGFkX2FuYWxpc2lzICcke3VuaWRhZF9hbmFsaXNpc30nYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yUGtSYWl6IHx8PSBmb3JQa0FwaWxhZGE7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBTw6kgcXVlIGVzIHJhw616IHBvciBjw7NtbyBlc3RveSByZXZvbHZpZW5kbyBsYSBwaWxhXHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXogfHw9IHJlc3B1ZXN0YXM7XHJcbiAgICAgICAgaWYoY29uQXVtZW50YWRhcyl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzID0gey4uLnJlc3B1ZXN0YXNBdW1lbnRhZGFzLCAuLi5yZXNwdWVzdGFzLCBbdWFEZWYucGtfYWdyZWdhZGFdOnZhbG9yUGtPUG9zaWNpb259XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXNwdWVzdGFzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBTw6kgcXVlIGxhIHBpbGEgdGllbmUgYWwgbWVub3MgdW4gZWxlbWVudG8gcG9yIGxvIHRhbnRvIGVzdG8gZXN0w6EgbGxlbm8gc2VndXJvLiBcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczogdWFEZWZcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtSYWl6OkZvclBrUmFpeil7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXNBdW1lbnRhZGFzfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1JhaXosIHRydWUpXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3MgPSByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbDtcclxuICAgIHZhciBwbGFpbkZvclBrID0gdG9QbGFpbkZvclBrKGZvclBrUmFpeilcclxuICAgIHZhciByb3dWYWxpZGF0b3IgPSAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa107XHJcbiAgICBmb3IodmFyIGlkIGluIHJlZ2lzdHJvRWxlbWVudG9zKXtcclxuICAgICAgICB2YXIgZGVmID0gcmVnaXN0cm9FbGVtZW50b3NbaWRdO1xyXG4gICAgICAgIGlmKGRlZi5lbGVtZW50byl7XHJcbiAgICAgICAgICAgIGlmKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGRlZi5lbGVtZW50bykpe1xyXG4gICAgICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICBkZWYuZWxlbWVudG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkZWYuaWQpIGFzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWRlZi5lbGVtZW50byl7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCVVNDQU5ETyBlbCBlbGVtZW50byByZWdpc3RyYWRvICcsaWQsJ25vIGVzdMOhIGVuIGVsIERPTScpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmFsdWUgPSBkZWYuZnVuKHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByb3dWYWxpZGF0b3IsIGRlZi5lbGVtZW50bywgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgIGlmKCdwcm9wJyBpbiBkZWYpe1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50bywgZGVmLnByb3AsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZignYXR0cicgaW4gZGVmKXtcclxuICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGRlZi5lbGVtZW50bywgZGVmLmF0dHIsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZignc3R5bGUnIGluIGRlZil7XHJcbiAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZGVmLmVsZW1lbnRvLnN0eWxlLCBkZWYuc3R5bGUsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHJvd1ZhbGlkYXRvci5hY3R1YWwpe1xyXG4gICAgICAgIHZhciB7dG9wLCBib3R0b219ID0gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKHJvd1ZhbGlkYXRvci5hY3R1YWwpO1xyXG4gICAgICAgIGlmKHRvcCAhPSBudWxsICYmIGJvdHRvbSAhPW51bGwpe1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFycmliYScpLmVsVG9wVmlzaWJpbGl6YXIgPSB0b3A7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYWJham8nKS5lbEJvdHRvbVZpc2liaWxpemFyID0gYm90dG9tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyhpZFZhcmlhYmxlOklkVmFyaWFibGV8SWRGaW4pe1xyXG4gICAgdmFyIGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkVmFyaWFibGU9PSdmaW4nP2Bib3Rvbi12b2x2ZXItMmA6YHZhci0ke2lkVmFyaWFibGV9YClcclxuICAgICAgICB8fGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8tJHtpZFZhcmlhYmxlfWApO1xyXG4gICAgdmFyIGVsZW1lbnRvID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgdmFyIE1BUkdFTl9TQ1JPTEwgPSA2NDtcclxuICAgIHZhciBhbHRvUGFudGFsbGEgPSB3aW5kb3cuaW5uZXJIZWlnaHQqMC43IC0gTUFSR0VOX1NDUk9MTDtcclxuICAgIHZhciBlbGVtZW50b0VudGVybzpIVE1MRWxlbWVudHxudWxsID0gZWxlbWVudG87IC8vIGVzIGVsIGVsZW1lbnRvIHF1ZSB2YSBhIGVudGFyIGVudGVybyBlbiBwYW50YWxsYSwgZGVmaW5lIGVsIGJvdHRvbVxyXG4gICAgdmFyIHJlY3RFbGVtZW50b0VudGVybzpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHZhciBlbGVtZW50b1N1cGVyaW9yOkhUTUxFbGVtZW50fG51bGwgPSBudWxsOyAvLyBlcyBlbCBlbGVtZW50byBxdWUgdmEgYSBtb3N0cmFyc2UgZGVzZGUgYXJyaWJhIGF1bnF1ZSBubyBlbnRyZSBlbnRlcm8sIGRlZmluZSBlbCB0b3BcclxuICAgIHZhciByZWN0RWxlbWVudG9TdXBlcmlvcjpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHdoaWxlKGVsZW1lbnRvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygndmFyaWFibGUnKSBcclxuICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykgXHJcbiAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmVndW50YScpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnY29uanVudG9wcmVndW50YXMnKSBcclxuICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3NlY2Npb24tYm90b24tZm9ybXVsYXJpbycpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnYm90b25mb3JtdWxhcmlvJykgXHJcbiAgICAgICAgKXtcclxuICAgICAgICAgICAgaWYoZWxlbWVudG9TdXBlcmlvciA9PSBudWxsICYmIGVsZW1lbnRvLmNsaWVudEhlaWdodCA8IGFsdG9QYW50YWxsYSl7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50b0VudGVybyA9IGVsZW1lbnRvO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm9cclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvRW50ZXJvISlcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3RFbGVtZW50b0VudGVybztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gbXlPd24uZ2V0UmVjdChlbGVtZW50byk7XHJcbiAgICAgICAgICAgICAgICBpZihyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCAtIHJlY3QudG9wIDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdEVsZW1lbnRvU3VwZXJpb3IgPSByZWN0O1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRvID0gZWxlbWVudG8/LnBhcmVudEVsZW1lbnQgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIGlmKGVsZW1lbnRvU3VwZXJpb3IgPT0gbnVsbCl7XHJcbiAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdDp7XHJcbiAgICAgICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPzpIVE1MRWxlbWVudHxudWxsXHJcbiAgICAgICAgdG9wPzpudW1iZXJ8bnVsbFxyXG4gICAgICAgIGJvdHRvbT86bnVtYmVyfG51bGxcclxuICAgICAgICBlbmZvY2Fkbz86Ym9vbGVhbnxudWxsXHJcbiAgICAgICAgZGVzZW5mb3F1ZT86c3RyaW5nfG51bGxcclxuICAgIH0gPSB7fTtcclxuICAgIGlmKGVsZW1lbnRvRW50ZXJvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgcmVjdEVsZW1lbnRvRW50ZXJvID0gbXlPd24uZ2V0UmVjdChlbGVtZW50b0VudGVybylcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmVsZW1lbnRvSW5wdXRWYXJpYWJsZSA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgICAgICB2YXIgdG9wID0gKHJlY3RFbGVtZW50b1N1cGVyaW9yPz9yZWN0RWxlbWVudG9FbnRlcm8pLnRvcCAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICAgICAgcmVzdWx0LnRvcCA9IHRvcDtcclxuICAgICAgICByZXN1bHQuYm90dG9tID0gcmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0O1xyXG4gICAgICAgIGlmKHRvcDxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKXtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWU9J2FycmliYSc7XHJcbiAgICAgICAgfWVsc2UgaWYocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIGFsdG9QYW50YWxsYSl7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlPSdhYmFqbyc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lbmZvY2Fkbz10cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEF0dHJEaXN0aW50bzxOIGV4dGVuZHMgc3RyaW5nPihcclxuICAgIG9iamV0bzp7c2V0QXR0cmlidXRlOihuYW1lOk4sIHZhbG9yOnN0cmluZyk9PnZvaWQsIGdldEF0dHJpYnV0ZToobmFtZTpOKT0+c3RyaW5nfG51bGx9LFxyXG4gICAgbmFtZTpOLFxyXG4gICAgdmFsb3I6c3RyaW5nXHJcbil7XHJcbiAgICBpZihvYmpldG8gJiYgb2JqZXRvLmdldEF0dHJpYnV0ZShuYW1lKSAhPSB2YWxvcil7XHJcbiAgICAgICAgb2JqZXRvLnNldEF0dHJpYnV0ZShuYW1lLCB2YWxvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRWYWxvckRpc3RpbnRvPFQgZXh0ZW5kcyB7fSwgTiBleHRlbmRzIGtleW9mIFQ+KFxyXG4gICAgb2JqZXRvOlQsXHJcbiAgICBuYW1lOk4sXHJcbiAgICB2YWxvcjpUW05dXHJcbil7XHJcbiAgICBpZihvYmpldG9bbmFtZV0gIT0gdmFsb3Ipe1xyXG4gICAgICAgIG9iamV0b1tuYW1lXSA9IHZhbG9yO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhfZm9yUGs6Rm9yUGspe1xyXG4gICAgXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9pZF9wcmVndW50YShfcGF5bG9hZDp7cHJlZ3VudGE6IElkUHJlZ3VudGEsIGZvclBrOiBGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9TT0xPX1RSQUVSX1NUQVRVUycpXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPID0gU3ltYm9sKCdOT19DQU1CSUFSX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8nKVxyXG5cclxuZnVuY3Rpb24gcmVmcmVzY2FyTWFyY2FEaXJ0eSgpe1xyXG4gICAgdmFyIGJvdG9uR3JhYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWJ1dHRvblwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgIGlmKGJvdG9uR3JhYmFyKXtcclxuICAgICAgICBpZihib3RvbkdyYWJhci5kaXNhYmxlZCAhPT0gIWRhdG9zQnlQYXNzLmRpcnR5KXtcclxuICAgICAgICAgICAgYm90b25HcmFiYXIuZGlzYWJsZWQgPSAhZGF0b3NCeVBhc3MuZGlydHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEocGF5bG9hZDp7XHJcbiAgICBmb3JQazpGb3JQaywgXHJcbiAgICB2YXJpYWJsZTpJZFZhcmlhYmxlfHR5cGVvZiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgXHJcbiAgICByZXNwdWVzdGE6VmFsb3J8dHlwZW9mIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU9cclxufSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB0b2tlbiA9ICdBVkVSSUdVQVIgVE9ETydcclxuICAgIGxldCB7IGZvclBrLCByZXNwdWVzdGEsIHZhcmlhYmxlIH0gPSBwYXlsb2FkO1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSAgPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpcyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb107XHJcbiAgICB2YXIgcmVjZW50TW9kaWZpZWQgPSBmYWxzZTtcclxuICAgIHZhciB2YWxvckFudGVyaW9yID0gdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgPyByZXNwdWVzdGFzW3ZhcmlhYmxlXSA6IG51bGw7XHJcbiAgICBpZihyZXNwdWVzdGEgIT09IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMpe1xyXG4gICAgICAgIGlmKHJlc3B1ZXN0YSA9PT0gJycpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGEgPSBudWxsO1xyXG4gICAgICAgIH1lbHNlIGlmKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbdmFyaWFibGVdPy50aXBvPT0nbnVtZXJvJyl7XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YSA9IE51bWJlcihyZXNwdWVzdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNpIGVzIHVuIGZhbHN5ICgwID09IGZhbHNlKSB0ZW5nbyBxdWUgY29tcGFyYXIgY29uICE9PVxyXG4gICAgICAgIHJlY2VudE1vZGlmaWVkID0gcmVzcHVlc3RhID8gdmFsb3JBbnRlcmlvciAhPSByZXNwdWVzdGEgOiB2YWxvckFudGVyaW9yICE9PSByZXNwdWVzdGFcclxuICAgICAgICBpZihyZWNlbnRNb2RpZmllZCl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyaWFibGVdID0gcmVzcHVlc3RhID8/IG51bGw7IC8vIGNhbWJpbyB1bmRlZmluZWQgcG9yIG51bGxcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgIHZhciBzaWd1aWVudGVWYXJpYWJsZTpJZFZhcmlhYmxlfElkRmlufG51bGx8dW5kZWZpbmVkO1xyXG4gICAgaWYodmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgJiYgKHJlY2VudE1vZGlmaWVkIHx8IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgZmVlZGJhY2tSb3cuYXV0b0luZ3Jlc2FkYXM/Llt2YXJpYWJsZV0pKXtcclxuICAgICAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICAgICAgaWYoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWRhdG9zQnlQYXNzPy5zb2xvTGVjdHVyYSl7XHJcbiAgICAgICAgICAgIHZlcmlmaWNhclNvcnRlbyh7XHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvOiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrLnZpdmllbmRhISldLCBcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlQWN0dWFsOiB2YXJpYWJsZSwgXHJcbiAgICAgICAgICAgICAgICBmb3JQazogZm9yUGtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgICAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgcmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwge2F1dG9JbmdyZXNvOiB0cnVlfSk7XHJcbiAgICAgICAgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gdmFyaWFibGU7XHJcbiAgICAgICAgZG97XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbc2lndWllbnRlVmFyaWFibGVdPy5zaWd1aWVudGU7XHJcbiAgICAgICAgfXdoaWxlKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpXHJcbiAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgPT0gbnVsbCAmJiBmZWVkYmFja1Jvdy5mZWVkYmFja1t2YXJpYWJsZV0/LmVzdGFkbyA9PSAndmFsaWRhJyl7XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gJ2Zpbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtyZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsOiBmZWVkYmFja1Jvdy5hY3R1YWx9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9ub3RhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIHRhcmVhOklkVGFyZWEsIG5vdGE6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCB0YXJlYSwgbm90YSB9ID0gcGF5bG9hZDtcclxuICAgIGNvbnNvbGUubG9nKFwiRkFMVEEgLy8gVE9ET1wiKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfdmlzaXRhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIG9ic2VydmFjaW9uZXM6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBvYnNlcnZhY2lvbmVzIH0gPSBwYXlsb2FkO1xyXG4gICAgLypcclxuICAgIGlmKCFkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzKXtcclxuICAgICAgICBkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzID0gW107XHJcbiAgICB9XHJcbiAgICB2YXIgdmlzaXRhcyA9IGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXM7XHJcbiAgICB2aXNpdGFzLnB1c2goe1xyXG4gICAgICAgIGZlY2hhOiBkYXRldGltZS5ub3coKS50b1ltZCgpLFxyXG4gICAgICAgIGhvcmE6IGRhdGV0aW1lLm5vdygpLnRvSG0oKSxcclxuICAgICAgICBpZHBlcjogbnVsbCwgLy8gVE9ETzogVkVSIERFIERPTkRFIFNFIFNBQ0EgRUwgSURQRVIgc3RhdGUuZGF0b3MuaWRwZXIsXHJcbiAgICAgICAgb2JzZXJ2YWNpb25lczpvYnNlcnZhY2lvbmVzXHJcbiAgICB9KVxyXG4gICAgKi9cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9tb2RpZmljYXJfdmlzaXRhKHBheWxvYWQ6IHtmb3JQa1JhaXo6Rm9yUGtSYWl6LCBpbmRleDpudW1iZXIsIG9wY2lvbjprZXlvZiBWaXNpdGEgLCB2YWxvcjpzdHJpbmd8bnVsbH0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIGluZGV4LCBvcGNpb24sIHZhbG9yfSA9IHBheWxvYWQ7XHJcbiAgICAvLyB2YXIgdmlzaXRhcyA9IGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXM7XHJcbiAgICAvLyB2aXNpdGFzW2luZGV4XVtvcGNpb25dID0gdmFsb3I7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYm9ycmFyX3Zpc2l0YShwYXlsb2FkOiB7Zm9yUGtSYWl6OkZvclBrUmFpeiwgaW5kZXg6bnVtYmVyfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgaW5kZXh9ID0gcGF5bG9hZDtcclxuICAgIC8vIHZhciB2aXNpdGFzID0gZGF0b3NCeVBhc3MuaG9qYURlUnV0YVt2aXZpZW5kYV0udmlzaXRhcztcclxuICAgIC8vIHZpc2l0YXMuc3BsaWNlKGluZGV4LCAxKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8oe2ZvclBrfToge2ZvclBrOkZvclBrfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIHZhciB7cmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpen0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcywgbnVsbCwge30pXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyh7Zm9yUGt9OiB7Zm9yUGs6Rm9yUGt9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyh7Zm9yUGssIGZvclBrUGFkcmV9OiB7Zm9yUGs6Rm9yUGssIGZvclBrUGFkcmU6Rm9yUGt9KXtcclxuICAgIHZhciB7cmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXN8dW5kZWZpbmVkID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc1xyXG4gICAgdmFyIHVhRGVmOlVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGluZGV4ID0gZm9yUGtbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdW5pZGFkX2FuYWxpc2lzXS5wb3AoKTtcclxuICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrUGFkcmUpO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCB0cnVlO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHRydWU7XHJcbiAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHthdXRvSW5ncmVzbzogdHJ1ZX0pO1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGtQYWRyZSk7XHJcbiAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrUGFkcmUpO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoQnlQYXNzPFQsIFI+KFxyXG4gICAgZnVuOihwYXlsb2FkOlQsIGRhdG9zOnR5cGVvZiBkYXRvc0J5UGFzcyk9PlIsXHJcbiAgICBwYXlsb2FkOlRcclxuKXtcclxuICAgIHJldHVybiBmdW4ocGF5bG9hZCwgZGF0b3NCeVBhc3MpO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCB1bHRpbWFWYXJpYmxlVml2aWVuZGEgPSAnTk9fRVNUQV9ERUZJTklEQV9BVU4vL1RPRE8nIGFzIElkVmFyaWFibGU7XHJcblxyXG5leHBvcnQgY29uc3QgTUFYQ1A9MjA7XHJcblxyXG4vKiBSRURVQ0VSUyAqL1xyXG5cclxudmFyIHJlZW1wbGF6b3NIYWJpbGl0YXI6e1trZXk6c3RyaW5nXTpzdHJpbmd9PXtcclxuICAgIGZhbHNlOiAnZmFsc2UnLFxyXG4gICAgdHJ1ZTogJ3RydWUnLFxyXG4gICAgXCI9XCI6ICc9PScsXHJcbiAgICBcIjw+XCI6ICchPScsXHJcbiAgICBcIiZcIjogJyYmJyxcclxuICAgIFwifFwiOiAnfHwnLFxyXG4gICAgXCJPUlwiOiAnfHwnLFxyXG4gICAgXCJBTkRcIjogJyYmJyxcclxuICAgIFwib3JcIjogJ3x8JyxcclxuICAgIFwiYW5kXCI6ICcmJicsXHJcbiAgICBcIm5vdFwiOiAnIScsXHJcbiAgICBcIk5PVFwiOiAnIScsXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaGVscGVyc0Nhc2lsbGVyb3M9e1xyXG4gICAgbnVsbDJ6ZXJvKHBvc2libGVOdWxsOmFueSl7XHJcbiAgICAgICAgaWYocG9zaWJsZU51bGw9PW51bGwpe1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBvc2libGVOdWxsO1xyXG4gICAgfSxcclxuICAgIGRpdjBlcnIobnVtZXJhZG9yOm51bWJlciwgZGVub21pbmFkb3I6bnVtYmVyLCBwazpzdHJpbmcpe1xyXG4gICAgICAgIGlmKGRlbm9taW5hZG9yPT0wKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZW4gXCIrcGsrXCIgZGl2aXNpb24gcG9yIGNlcm8gZGUgXCIrbnVtZXJhZG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWRvci9kZW5vbWluYWRvcjtcclxuICAgIH0sXHJcbiAgICBmdW5zOntcclxuICAgICAgICBibGFuY28oeDphbnkpe1xyXG4gICAgICAgICAgICByZXR1cm4geCE9PTAgJiYgIXhcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhveSgpe1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZS50b2RheSgpLnRvRG15KClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZlY2hhX3ZhbGlkYSh4OnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbz0vXihbMS05XXwwWzEtOV18WzEyXVxcZHwzWzAxXSlcXC8oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8yMFxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgdmFyIHhEYXRlOiBEYXRlO1xyXG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbk9rOiBib29sZWFuO1xyXG4gICAgICAgICAgICBjb252ZXJzaW9uT2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0b192YWxpZG8pe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2QsIG0sIHldID0geC5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IG5ldyBEYXRlKGAke3l9LyR7bX0vJHtkfWApO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL2ZhbHRhcmlhIHZhbGlkYXIgcXVlIG5vIHNlYSB1bmEgZmVjaGEgZnV0dXJhIHkgcXVlIHNlYSB1bmEgZmVjaGEgZW4gZWwgcmFuZ28gZGVsIG9wZXJhdGl2b1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gJiYgY29udmVyc2lvbk9rXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXNhbmlvX3ZhbGlkbyh4OnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbz0vXihbMS05XXwwWzEtOV18MVswMTJdKVxcLygxOXwyMClcXGRcXGQkLy50ZXN0KHgpXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRvX3ZhbGlkbyBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZm9ybWFkbyh4OmFueSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4IT09dW5kZWZpbmVkICYmIHghPT1udWxsICYmICghKHggaW5zdGFuY2VvZiBBcnJheSl8fCB4Lmxlbmd0aCE9PTAgKVxyXG4gICAgICAgICAgICAmJiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KXx8IE9iamVjdC5rZXlzKHgpLmxlbmd0aCAhPT0gMCApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBuc25jKHg6YW55KXtcclxuICAgICAgICAgICAgcmV0dXJuIHggPT0gLTlcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcih4Om51bWJlcil7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICUgMj09MFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZWRhZF9tZXNfYW5uaW9fdmFsaWRvKGVkYWQ6bnVtYmVyLG1lc0FubmlvOnN0cmluZywgZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZOnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBtZXNlc0RpZmVyZW5jaWEgPSAoZDE6RGF0ZSwgZDI6RGF0ZSk9PntcclxuICAgICAgICAgICAgICAgIHZhciBtb250aHM7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgPSAoZDIuZ2V0RnVsbFllYXIoKSAtIGQxLmdldEZ1bGxZZWFyKCkpICogMTI7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgLT0gZDEuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIG1vbnRocyArPSBkMi5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyA8PSAwID8gMCA6IG1vbnRocztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzUmVhbGl6YWNpb24gPSBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVkuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBkYXRlLnltZChOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMl0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMV0pLE51bWJlcihwYXJ0ZXNSZWFsaXphY2lvblswXSkpXHJcbiAgICAgICAgICAgIHZhciBwYXJ0ZXNNZXNBbm5pbyA9ICBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNNZXNBbm5pb1sxXSksIE51bWJlcihwYXJ0ZXNNZXNBbm5pb1swXSksMSlcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIFJlYWxEYXRlIGVzIERhdGUgeSBzZSBwdWVkZSByZXN0YXJcclxuICAgICAgICAgICAgdmFyIGRpZmVyZW5jaWFNZXNlcyA9IG1lc2VzRGlmZXJlbmNpYShuYWNpbWllbnRvLHRvZGF5KTtcclxuICAgICAgICAgICAgdmFyIGVkYWREZWNpbWFsZXMgPSBkaWZlcmVuY2lhTWVzZXMvMTI7IC8vZWogMzYuNVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgTWF0aC5mbG9vcihlZGFkRGVjaW1hbGVzKSA9PSBlZGFkIHx8IC8vbWlzbWEgZWRhZFxyXG4gICAgICAgICAgICAgICAgZWRhZERlY2ltYWxlcyA9PSBlZGFkICsgMSAvL21lcyBkZSB0b2xlcmFuY2lhXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vY29waWFyX2NhbXBvX3VhX3JhbWEocmVzcHVlc3Rhc09yaWdlbjpSZXNwdWVzdGFzW10sIHBvc2ljaW9uOm51bWJlciwgdmFyaWFibGVPcmlnZW46IElkVmFyaWFibGUsIGNhbWlubzpzdHJpbmcsIGNvbmRpY2lvbjpib29sZWFuKXtcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uPyhyZXNwdWVzdGFzT3JpZ2VuICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV0gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXVtgJHtjYW1pbm99YF1bdmFyaWFibGVPcmlnZW5dKTpudWxsXHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj9ldmFsKGByZXNwdWVzdGFzT3JpZ2VuWyR7cG9zaWNpb24tMX1dLmArY2FtaW5vKycuJyt2YXJpYWJsZU9yaWdlbik6bnVsbDtcclxuICAgICAgICAvL31cclxuICAgICAgICAvKlxyXG4gICAgICAgIGRibzp7XHJcbiAgICAgICAgICAgIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsIGRhdG86c3RyaW5nKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgaW5mb3JtYWRvKHhwZXJzb25hcykgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdW2RhdG9dPyB4cGVyc29uYXNbcGVyLTFdW2RhdG9dOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZWRhZGZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ2VkYWQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVpbmRpdmlkdWFsKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXBlcnNvbmFzW3Blci0xXVsnZW50cmVhaW5kJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlbWllbWJybyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvY29ueXVnZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzXHJcbiAgICAgICAgICAgICAgICByZXR1cm4geHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTIpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9qZWZlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTEpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYXJlbnRlc2NvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdwNCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNleG9mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXhwZXJzb25hcyAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV0uc2V4bz8geHBlcnNvbmFzW3Blci0xXVsnc2V4byddOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2l0Y29ueWplZmUoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIsMSwncDUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAqLyAgICAgICBcclxuICAgIH1cclxufTtcclxuXHJcbnR5cGUgRnVuY2lvbkhhYmlsaXRhciA9ICh2YWxvcmVzOntba2V5OnN0cmluZ106YW55fSk9PmJvb2xlYW47XHJcbnR5cGUgRnVuY2lvblZhbG9yYXIgPSAodmFsb3Jlczp7W2tleTpzdHJpbmddOmFueX0pPT5hbnk7XHJcbnZhciBmdW5jaW9uZXNIYWJpbGl0YXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uSGFiaWxpdGFyfT17XHJcbn1cclxudmFyIGZ1bmNpb25lc1ZhbG9yYXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uVmFsb3Jhcn09e1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWluaUNvbXBpbGFkb3JTUWxKcyhleHByZXNpb25DYXNpU1FMOnN0cmluZyl7XHJcbiAgICB2YXIgZXhwcmVzaW9uID0gZXhwcmVzaW9uQ2FzaVNRTC5yZXBsYWNlKC9cXHUwMEEwL2csJyAnKTtcclxuICAgIHZhciBjdWVycG8gPSBleHByZXNpb24ucmVwbGFjZSgvXFxiaXMgZGlzdGluY3QgZnJvbVxcYi9naSwnIT0nKS5yZXBsYWNlKC9cXGIuKz9cXGIvZywgZnVuY3Rpb24oZWxUb2tlbil7XHJcbiAgICAgICAgdmFyIGVsVG9rZW5UcmltZWFkbz1lbFRva2VuLnRyaW0oKTtcclxuICAgICAgICBpZihlbFRva2VuVHJpbWVhZG8gaW4gcmVlbXBsYXpvc0hhYmlsaXRhcil7XHJcbiAgICAgICAgICAgIHJldHVybiByZWVtcGxhem9zSGFiaWxpdGFyW2VsVG9rZW5UcmltZWFkb107XHJcbiAgICAgICAgfWVsc2UgaWYoL15cXGQrXFwuP1xcZCokLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpe1xyXG4gICAgICAgICAgICByZXR1cm4gZWxUb2tlblxyXG4gICAgICAgIH1lbHNlIGlmKC9eXFxXKyQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfWVsc2UgaWYoL15cXHMrJC8udGVzdChlbFRva2VuKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnaGVscGVycy5udWxsMnplcm8odmFsb3Jlcy4nK2VsVG9rZW4rJyknO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY3VlcnBvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY2lvbkNvbXBpbGFkYTxUPihjb25qdW50b0RlRnVuY2lvbmVzOntba2V5OnN0cmluZ106KHZhbG9yZXM6e1trZXk6c3RyaW5nXTphbnl9KT0+VH0pe1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM6c3RyaW5nKXtcclxuICAgICAgICBpZighY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSl7XHJcbiAgICAgICAgICAgIHZhciBjdWVycG8gPSBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgY3VlcnBvID0gbWluaUNvbXBpbGFkb3JTUWxKcyhub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKTtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbEZ1biA9ICBuZXcgRnVuY3Rpb24oJ3ZhbG9yZXMnLCAnaGVscGVycycsICdyZXR1cm4gJytjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSA9IGZ1bmN0aW9uKHZhbG9yZXMpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVybmFsRnVuKHZhbG9yZXMsIGhlbHBlcnNDYXNpbGxlcm9zKTtcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIEVKRUNVQ0NJT04gRVhQUkVTSU9OIEVYVEVSTkEgJyxub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWxvcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBDT01QSUxBQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvbkhhYmlsaXRhciA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzSGFiaWxpdGFyKTtcclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25WYWxvcmFyICAgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc1ZhbG9yYXIpO1xyXG5cclxuXHJcbnZhciByb3dWYWxpZGF0b3IgPSBnZXRSb3dWYWxpZGF0b3I8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPih7Z2V0RnVuY2lvbkhhYmlsaXRhciwgZ2V0RnVuY2lvblZhbG9yYXJ9KVxyXG5leHBvcnQgdmFyIGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzID0gKHVuaWRhZGVzQVJlY29ycmVyUHJtOklkVW5pZGFkQW5hbGlzaXNbXSx1bmlkYWRBbmFsaXNpczpVbmlkYWRBbmFsaXNpcywgcmVzcHVlc3RhczpSZXNwdWVzdGFzLG5vUmVhc1RhcmVhOnt9W10sbm9tYk5vUmVhOnN0cmluZylcclxuOntucmNvZGlnbzpzdHJpbmd8bnVsbCwgZXN2YWxvcjpib29sZWFufT0+e1xyXG4gICAgdmFyIG5yY29kaWdvOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgdmFyIGVzdmFsb3I9ZmFsc2U7XHJcbiAgICB2YXIgcnZhbG9yOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgICB2YXIgcnZhcmlhYmxlOnN0cmluZztcclxuICAgIHZhciBybm9yZWE6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgLy8gdmFyIHJlc3VsdD17bnJjb2Q6U3RyaW5nLCBlc3ZhbDpCb29sZWFufTtcclxuICAgIGlmKHVuaWRhZGVzQVJlY29ycmVyUHJtLmluY2x1ZGVzKHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcykpe1xyXG4gICAgICAgIGZvcihsZXQgbm9SZWEgb2Ygbm9SZWFzVGFyZWEpeyAvL2VzdHJ1Y3R1cmEubm9SZWFzLCBlc3RydWN0dXJhLm5vUmVhc1N1cFxyXG4gICAgICAgICAgICBpZiAobm9tYk5vUmVhPT0nbm9fcmVhJyl7XHJcbiAgICAgICAgICAgICAgICB2YXIge3ZhcmlhYmxlICwgdmFsb3IsIG5vX3JlYX0gPSBub1JlYTtcclxuICAgICAgICAgICAgICAgIHJub3JlYT1ub19yZWE7XHJcbiAgICAgICAgICAgICAgICBydmFsb3I9dmFsb3I7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGU9dmFyaWFibGU7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdmFyIHt2YXJpYWJsZV9zdXAgLCB2YWxvcl9zdXAsIG5vX3JlYV9zdXB9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWE9bm9fcmVhX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YWxvcj12YWxvcl9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGU9dmFyaWFibGVfc3VwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbcnZhcmlhYmxlIGFzIElkVmFyaWFibGVdPT1ydmFsb3Ipe1xyXG4gICAgICAgICAgICAgICAgbnJjb2RpZ28gPXJub3JlYTsgIC8vbm9fcmVhLCBub19yZWFfc3VwXHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7bnJjb2RpZ28sZXN2YWxvcn1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbz1udWxsO1xyXG4gICAgICAgICAgICAgICAgZXN2YWxvcj1mYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvcihsZXQgdWEgb2YgKGxpa2VBcih1bmlkYWRBbmFsaXNpcz8uaGlqYXMpLmFycmF5KCkpKXtcclxuICAgICAgICBpZih1YT8udW5pZGFkX2FuYWxpc2lzICYmIHJlc3B1ZXN0YXNbdWEudW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KXtcclxuICAgICAgICAgICAgZm9yKGxldCByZXNwdWVzdGFzSGlqYXMgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1t1YT8udW5pZGFkX2FuYWxpc2lzXSA/PyBbXSkpe1xyXG4gICAgICAgICAgICAgICBsZXQgcmVzdWx0PSBidXNjYXJOb1JlYUVuUmVzcHVlc3Rhcyh1bmlkYWRlc0FSZWNvcnJlclBybSx1YSxyZXNwdWVzdGFzSGlqYXMsbm9SZWFzVGFyZWEsbm9tYk5vUmVhKTtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5lc3ZhbG9yICl7XHJcbiAgICAgICAgICAgICAgICAgICAgbnJjb2RpZ289cmVzdWx0Lm5yY29kaWdvO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3I9cmVzdWx0LmVzdmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtucmNvZGlnbyxlc3ZhbG9yfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvPW51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvcj1mYWxzZTtcclxuICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB7bnJjb2RpZ28sIGVzdmFsb3J9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge25yY29kaWdvLCBlc3ZhbG9yfVxyXG4gfVxyXG5cclxuXHJcblxyXG5leHBvcnQgdmFyIGRlZk9wZXJhdGl2bzpEZWZPcGVyYXRpdm8gPSB7XHJcbiAgICBlc05vUmVhOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzTm9SZWEgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kTm9SZWE6c3RyaW5nfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2ROb1JlYSwgZXNOb1JlYX07XHJcbiAgICAgICAgLy9FSkVNUExPIFBSRUpVXzIwMjJcclxuICAgICAgICAvL3ZhciB1bmlkYWRlc0FSZWNvcnJlciA9IFsndml2aWVuZGFzJywnaG9nYXJlcycsJ3BlcnNvbmFzJ10gYXMgSWRVbmlkYWRBbmFsaXNpc1tdO1xyXG4gICAgICAgIC8vdmFyIHVhUHJpbmNpcGFsID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+IXVhLnBhZHJlKTtcclxuICAgICAgICAvL3ZhciBlc05vUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy92YXIgY29kTm9SZWE6c3RyaW5nfG51bGw9IG51bGw7XHJcbiAgICAgICAgLy8gIGxldCByZXNub3JlYSA9IGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKCB1bmlkYWRlc0FSZWNvcnJlcix1YVByaW5jaXBhbCEscmVzcHVlc3Rhcyxlc3RydWN0dXJhLm5vUmVhcywnbm9fcmVhJyk7XHJcbiAgICAgICAgLy9jb2ROb1JlYT1yZXNub3JlYS5ucmNvZGlnbztcclxuICAgICAgICAvL2VzTm9SZWE9cmVzbm9yZWEuZXN2YWxvcjtcclxuICAgICAgICAvL3JldHVybiB7Y29kTm9SZWEsIGVzTm9SZWF9O1xyXG4gICAgfSxcclxuICAgZXNOb1JlYVN1cDooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhU3VwOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kTm9SZWFTdXAsZXNOb1JlYVN1cH1cclxuICAgICAgICAvL0VKRU1QTE8gUFJFSlVfMjAyMlxyXG4gICAgICAgIC8vVE9ETyBHRU5FUkFMSVpBUiBidXNjYXJOb3JlYVJlc3B1ZXN0YXNcclxuICAgICAgIC8vdmFyIHVuaWRhZGVzQVJlY29ycmVyU3VwID0gWyd2aXZpZW5kYXMnLCdob2dhcmVzX3N1cCcsJ3BlcnNvbmFzX3N1cCddIGFzIElkVW5pZGFkQW5hbGlzaXNbXTtcclxuICAgICAgIC8vdmFyIHVhUHJpbmNpcGFsID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+IXVhLnBhZHJlKTtcclxuICAgICAgIC8vdmFyIGVzTm9SZWFTdXAgPSBmYWxzZTtcclxuICAgICAgIC8vdmFyIGNvZE5vUmVhU3VwOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgLy9sZXQgcmVzbm9yZWEgPWJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKCB1bmlkYWRlc0FSZWNvcnJlclN1cCx1YVByaW5jaXBhbCEscmVzcHVlc3Rhcyxlc3RydWN0dXJhLm5vUmVhc1N1cCwnbm9fcmVhX3N1cCcpOy8vY29uIGxvcyBwYXJhbWV0cm9zIHF1ZSBuZWNlc2l0YXJpYW1vcyBwYXJhIGdlbmVyYWxpemFyXHJcbiAgICAgICAvLyAgY29kTm9SZWFTdXA9cmVzbm9yZWEubnJjb2RpZ287XHJcbiAgICAgICAvLyAgZXNOb1JlYVN1cD1yZXNub3JlYS5lc3ZhbG9yO1xyXG4gICAgICAgLy9yZXR1cm4ge2NvZE5vUmVhU3VwLGVzTm9SZWFTdXB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGE6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kUmVhLGVzUmVhfVxyXG4gICAgICAgIC8vRUpFTVBMTyBQUkVKVV8yMDIyXHJcbiAgICAgICAgLy92YXIgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvL3ZhciBjb2RSZWE6bnVtYmVyfG51bGw9IG51bGw7XHJcbiAgICAgICAgLy9pZighcmVzcHVlc3Rhc1snaWRlbnRpZicgYXMgSWRWYXJpYWJsZV0pe1xyXG4gICAgICAgIC8vICAgIHJldHVybiB7Y29kUmVhLCBlc1JlYX1cclxuICAgICAgICAvL31lbHNlIGlmKHJlc3B1ZXN0YXNbJ2lkZW50aWYnIGFzIElkVmFyaWFibGVdPT0yIHx8cmVzcHVlc3Rhc1sncmVzaWRfaG9nJyBhcyBJZFZhcmlhYmxlXT09Mnx8cmVzcHVlc3Rhc1snY29udGFjdCcgYXMgSWRWYXJpYWJsZV09PTIpe1xyXG4gICAgICAgIC8vICAgIGNvZFJlYSA9IDI7XHJcbiAgICAgICAgLy8gICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvL31lbHNle1xyXG4gICAgICAgIC8vICAgIHZhciByZWFoczogbnVtYmVyW109W10gO1xyXG4gICAgICAgIC8vICAgIHZhciByZXNwdWVzdGFzSHMgPSByZXNwdWVzdGFzWydob2dhcmVzJ107XHJcbiAgICAgICAgLy8gICAgaWYocmVzcHVlc3Rhc0hzKXtcclxuICAgICAgICAvLyAgICAgICAgZm9yKGxldCByZXNwdWVzdGFzSCBvZiByZXNwdWVzdGFzSHMpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgdmFyIHJlYWg6bnVtYmVyO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgdmFyIHNlbGVjOm51bWJlcjtcclxuICAgICAgICAvLyAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNIWydlbnRyZWEnIF0gIT0gMXx8cmVzcHVlc3Rhc0hbJ3ByZWp1ZTEnXT09Mnx8cmVzcHVlc3Rhc0hbJ3RwJ109PTApe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIHJlYWg9MjtcclxuICAgICAgICAvLyAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIHNlbGVjPXJlc3B1ZXN0YXNIWydjcl9udW1fbWllbWJybyddXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgaWYocmVzcHVlc3Rhc0hbJ3BlcnNvbmFzJ10gJiYgcmVzcHVlc3Rhc0gucGVyc29uYXNbc2VsZWMtMV0gKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3B1ZXN0YXNQID0gcmVzcHVlc3Rhc0gucGVyc29uYXNbc2VsZWMtMV07XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIHZhciByZXNwX2VudHJlYV9pbmQgPSByZXNwdWVzdGFzUFsnZW50cmVhaW5kJyBhcyBJZFZhcmlhYmxlIF07XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIGlmKHJlc3BfZW50cmVhX2luZD09bnVsbCl7IC8vcXVlcmVtb3MgY29udGVtcGxhciBlbCB1bmRlZmluZWRcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWggPSAzO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWggPSBOdW1iZXIocmVzcF9lbnRyZWFfaW5kKTtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICByZWFoID0gMztcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICAgICByZWFocy5wdXNoKHJlYWgpO1xyXG4gICAgICAgIC8vICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgIGlmIChyZWFocy5ldmVyeShyaD0+cmg9PTEpKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYSA9IDE7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYSA9IHRydWU7XHJcbiAgICAgICAgLy8gICAgICAgIH1lbHNlIGlmKHJlYWhzLmV2ZXJ5KHJoPT5yaD09Mikpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhID0gMjtcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgIH1lbHNlIGlmKHJlYWhzLmV2ZXJ5KHJoPT5yaD09MXx8cmg9PTMpKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYSA9IDM7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYSA9IDQ7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgfSBlbHNle1xyXG4gICAgICAgIC8vICAgICAgICBjb2RSZWEgPSAzO1xyXG4gICAgICAgIC8vICAgICAgICBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgIH1cclxuICAgICAgICAvL31cclxuICAgICAgICAvL3JldHVybiB7Y29kUmVhLGVzUmVhfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYVN1cDpudW1iZXJ8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZFJlYVN1cCxlc1JlYVN1cH1cclxuICAgICAgICAvL0VKRU1QTE8gUFJFSlVfMjAyMlxyXG4gICAgICAgIC8vVE9ETyBHRU5FUkFMSVpBUiBcclxuICAgICAgICAvL3ZhciBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIC8vdmFyIGNvZFJlYVN1cDpudW1iZXJ8bnVsbD0gbnVsbDtcclxuICAgICAgICAvL2lmKCFyZXNwdWVzdGFzWydjb25maXJfdGVsX3N1cCcgYXMgSWRWYXJpYWJsZV0gJiYgIXJlc3B1ZXN0YXNbJ3NwMWEnIGFzIElkVmFyaWFibGVdKXtcclxuICAgICAgICAvLyAgICByZXR1cm4ge2NvZFJlYVN1cCwgZXNSZWFTdXB9XHJcbiAgICAgICAgLy99ZWxzZSBpZiggcmVzcHVlc3Rhc1snY29uZmlyX3RlbF9zdXAnIGFzIElkVmFyaWFibGVdPT0yIHx8IHJlc3B1ZXN0YXNbJ2NvbmZpcl9kb21fc3VwJyBhcyBJZFZhcmlhYmxlXT09Mnx8cmVzcHVlc3Rhc1snc3AxYScgYXMgSWRWYXJpYWJsZV09PTIgfHxyZXNwdWVzdGFzWydzcDFiJyBhcyBJZFZhcmlhYmxlXT09Mnx8cmVzcHVlc3Rhc1snc3AxYycgYXMgSWRWYXJpYWJsZV09PTIpe1xyXG4gICAgICAgIC8vICAgIGNvZFJlYVN1cCA9IDI7XHJcbiAgICAgICAgLy8gICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvL31lbHNle1xyXG4gICAgICAgIC8vICAgIHZhciByZWFoczogbnVtYmVyW109W10gO1xyXG4gICAgICAgIC8vICAgIHZhciByZXNwdWVzdGFzSHMgPSByZXNwdWVzdGFzWydob2dhcmVzX3N1cCddO1xyXG4gICAgICAgIC8vICAgIGlmKHJlc3B1ZXN0YXNIcyl7XHJcbiAgICAgICAgLy8gICAgICAgIGZvcihsZXQgcmVzcHVlc3Rhc0ggb2YgcmVzcHVlc3Rhc0hzKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciByZWFoOm51bWJlcjtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciBzZWxlYzpudW1iZXI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBpZihyZXNwdWVzdGFzSFsnZW50cmVhX3N1cCcgXSA9PSAyfHxyZXNwdWVzdGFzSFsnc3ByMV9zdXAnXT09Mnx8cmVzcHVlc3Rhc0hbJ3NwNCddPT0zfHxyZXNwdWVzdGFzSFsndG90YWxfcmFuZ29fc3VwJ109PTApe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIHJlYWg9MjtcclxuICAgICAgICAvLyAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNIWydlbnRyZWFfc3VwJyBdKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICByZWFoID0gMTtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgcmVhaD0zO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIH0gICAgIFxyXG4gICAgICAgIC8vICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgcmVhaHMucHVzaChyZWFoKTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICBpZiAocmVhaHMuZXZlcnkocmg9PnJoPT0xKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWFTdXAgPSAxO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWFTdXAgPSB0cnVlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTIpKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYVN1cCA9IDI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTF8fHJoPT0zKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWFTdXAgPSAzO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWFTdXAgPSA0O1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgIH0gZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgY29kUmVhU3VwID0gMztcclxuICAgICAgICAvLyAgICAgICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICB9XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLy9yZXR1cm4ge2NvZFJlYVN1cCxlc1JlYVN1cH1cclxuICAgIH0sXHJcbiAgICBVQXByaW5jaXBhbDonJyBhcyBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgZGVmVUE6e30gYXMge1tpIGluIElkVW5pZGFkQW5hbGlzaXNdOntwazpJZFZhcmlhYmxlLCBpbmNsdWlkYXM6SWRVbmlkYWRBbmFsaXNpc1tdLCBpZHNGb3I6SWRGb3JtdWxhcmlvW119fSxcclxuICAgIGRlZkZvcjp7fSBhcyB7W2YgaW4gSWRGb3JtdWxhcmlvXTp7LyphcmJvbFVBOklkVW5pZGFkQW5hbGlzaXNbXSwgKi8gaGVybWFubz86dHJ1ZX19XHJcbn1cclxuLy8vLy8gQUJBSk8gZGUgZXN0YSBsw61uZWEgbm8gcHVlZGUgaGFiZXIgb3Ryb3Mgbm9tYnJlcyBkZSB2YXJpYWJsZXMgbyBmb3JtdWxhcmlvcyBvIGNhc2lsbGVyb3MgZW4gZ2VuZXJhbFxyXG5cclxuXHJcbmV4cG9ydCB2YXIgc2V0Q2FsY3Vsb1JlYU5vUmVhID0gKFxyXG4gICAgZXNOb1JlYToocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2ROb1JlYTpzdHJpbmd8bnVsbCwgZXNOb1JlYTpib29sZWFufSxcclxuICAgIGVzTm9SZWFTdXA6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kTm9SZWFTdXA6c3RyaW5nfG51bGwsIGVzTm9SZWFTdXA6Ym9vbGVhbn0sXHJcbiAgICBlc1JlYWxpemFkYToocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2RSZWE6bnVtYmVyfG51bGwsIGVzUmVhOmJvb2xlYW59LFxyXG4gICAgZXNSZWFsaXphZGFTdXA6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kUmVhU3VwOm51bWJlcnxudWxsLCBlc1JlYVN1cDpib29sZWFufVxyXG4pPT57XHJcbiAgICBkZWZPcGVyYXRpdm8gPSB7XHJcbiAgICAgICAgLi4uZGVmT3BlcmF0aXZvLFxyXG4gICAgICAgIGVzTm9SZWEsXHJcbiAgICAgICAgZXNOb1JlYVN1cCxcclxuICAgICAgICBlc1JlYWxpemFkYSxcclxuICAgICAgICBlc1JlYWxpemFkYVN1cFxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG50eXBlIFBlcnNvbmE9e3AxOnN0cmluZywgcDI6bnVtYmVyLCBwMzpudW1iZXIsIHA0Om51bWJlcnxudWxsLCBwNToxfG51bGwsIHA2OjF8bnVsbH1cclxuXHJcbmZ1bmN0aW9uIG51bShudW06bnVtYmVyfHN0cmluZ3xudWxsKTpudW1iZXJ7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICBpZihpc05hTihudW0tMCkpIHJldHVybiAwO1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIGdyYWNpYSBlcyBtZXRlciBudW0gY3VhbmRvIGVzIHN0cmluZ1xyXG4gICAgcmV0dXJuIG51bS0wO1xyXG59XHJcblxyXG52YXIgZnVuY2lvbmVzQ29ub2NpZGFzOntbayBpbiBzdHJpbmddOmJvb2xlYW59ID0ge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZmljYXJTb3J0ZW8ob3B0czp7XHJcbiAgICBjb25maWd1cmFjaW9uU29ydGVvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcyxcclxuICAgIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpelxyXG4gICAgZm9yUGs6Rm9yUGssXHJcbiAgICB2YXJpYWJsZUFjdHVhbDpJZFZhcmlhYmxlXHJcblxyXG59KXtcclxuICAgIGNvbnN0IHJlc2V0ZWFyU29ydGVvID0gKG9wdHM6e3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhc30pPT57XHJcbiAgICAgICAgdmFyIHtyZXNwdWVzdGFzfSA9IG9wdHM7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb109bnVsbDtcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc109bnVsbDtcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gPSBudWxsO1xyXG4gICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8uc29ydGVhZG9fbW9zdHJhcj8uZm9yRWFjaCgobW9zdHJhcik9PnJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdPW51bGwpO1xyXG4gICAgICAgIGlmKCd2YXJfbGV0cmEnIGluIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvKXtcclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gJiYgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgICAgICBmb3IodmFyIHBlciBvZiBpdGVyYXRvcihyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSkpe1xyXG4gICAgICAgICAgICAgICAgICAgIHBlcltjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfbGV0cmFdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIge2NvbmZpZ3VyYWNpb25Tb3J0ZW8sIHZhcmlhYmxlQWN0dWFsLCByZXNwdWVzdGFzLCBmb3JQaywgcmVzcHVlc3Rhc1JhaXp9ID0gb3B0cztcclxuICAgIHZhciBpZEVuYyA9IGZvclBrLnZpdmllbmRhITtcclxuICAgIHZhciB7cmVzcHVlc3Rhc0F1bWVudGFkYXN9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlKTtcclxuICAgIHZhciBleHByX2luY29tcGxldGl0dWRfZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmV4cHJfaW5jb21wbGV0aXR1ZF9qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pb10uZXhwcik7XHJcbiAgICB2YXIgZmlsdHJvX2Z1biA9ICBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZmlsdHJvX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvXS5leHByKTtcclxuICAgIHZhciB1bmlkYWRBbmFsaXNpcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8udW5pZGFkX2FuYWxpc2lzO1xyXG5cclxuICAgIGlmKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5pbmNsdWRlcyh2YXJpYWJsZUFjdHVhbCkpe1xyXG4gICAgICAgIHZhciB1YVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+dWEudW5pZGFkX2FuYWxpc2lzPT11bmlkYWRBbmFsaXNpcyk/LnBhZHJlO1xyXG4gICAgICAgIHZhciBwa0FncmVnYWRhUGFkcmUgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEpPT51YS51bmlkYWRfYW5hbGlzaXM9PXVhUGFkcmUpPy5wa19hZ3JlZ2FkYVxyXG4gICAgICAgIGlmKHVhUGFkcmUgJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV0pe1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgdmFyIHBhZHJlID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV1bTnVtYmVyKHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3BrQWdyZWdhZGFQYWRyZV0pLTFdO1xyXG4gICAgICAgICAgICBpZih2YXJpYWJsZUFjdHVhbCAhPSBjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsKXtcclxuICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPXBhZHJlW3VuaWRhZEFuYWxpc2lzXS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNldGVhclNvcnRlbyh7cmVzcHVlc3RhczpwYWRyZX0pO1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gIT0gbnVsbCl7XHJcbiAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgIHZhciByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBhcyBSZXNwdWVzdGFzW11cclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdIT0xKXtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXT09Mil7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXT1yZXNwdWVzdGFzVUEubGVuZ3RoICsgMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oe3Jlc3B1ZXN0YXN9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgY2FudGlkYWRUb3RhbCA9IE51bWJlcihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdKTtcclxuICAgICAgICAgICAgaWYoY2FudGlkYWRUb3RhbDxyZXNwdWVzdGFzVUEubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIC8vIGRvYmxlIGFzaWduYWNpw7NuIHBhcmEgcXVlIGxvIGNhcmd1ZSBlbiByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzVUEuZmlsdGVyKChwLGkpPT5cclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtZXRyb3Muc29tZSgocGFyYW0pPT5wW3BhcmFtXSB8fCBpIDw9IGNhbnRpZGFkVG90YWwtMSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSA9IHJlc3B1ZXN0YXNVQVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlKGNhbnRpZGFkVG90YWw+cmVzcHVlc3Rhc1VBLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEucHVzaCh7fSBhcyBSZXNwdWVzdGFzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdID0gcmVzcHVlc3Rhc1VBLmZpbHRlcihwPT5leHByX2luY29tcGxldGl0dWRfZnVuKHApKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciB2YXIkcDAgPSBcIiRwMFwiIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdPT0xICYmXHJcbiAgICAgICAgICAgICAgICAhcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gJiZcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5pbmNvbXBsZXRhc109PTBcclxuICAgICAgICAgICAgKXtcclxuICAgICAgICAgICAgICAgIHZhciBzb3J0ZWFyPXJlc3B1ZXN0YXNVQS5maWx0ZXIocD0+ZmlsdHJvX2Z1bihwKSk7XHJcbiAgICAgICAgICAgICAgICBpZihzb3J0ZWFyLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZvckVhY2goKHBlciwgaSk9PnBlclt2YXIkcDBdPWkrMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5vcmRlbi5wdXNoKHt2YXJpYWJsZTp2YXIkcDAsIG9yZGVuOjF9KTtcclxuICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNvcnQoY29tcGFyZUZvck9yZGVyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ubWFwKGVsZW0gPT4gKHtjb2x1bW46ZWxlbS52YXJpYWJsZSwgb3JkZXI6ZWxlbS5vcmRlbn0pKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpY2lvblNvcnRlYWRhID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLm1ldG9kbz09J2hhc2gnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOTyBJTVBMRU1FTlRBRE8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLypwb3NpY2lvblNvcnRlYWRhPShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9jb2VmLnJlZHVjZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN1bSwgcGFpcik9PnN1bSArIGRhdG9zVml2aWVuZGEudGVtW3BhaXIudmFyXSAqIHBhaXIuY29lZiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAlIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLmRpdmlzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSAlIHNvcnRlYXIubGVuZ3RoKi9cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldHJhID0gJ0EnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJMZXRyYTpJZFZhcmlhYmxlID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udmFyX2xldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIHBlcnNvbmEgb2Ygc29ydGVhcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEuZmluZCgoX3BlcixpKT0+aT09cGVyc29uYVt2YXIkcDBdIGFzIG51bWJlciAtIDEpIVt2YXJMZXRyYV0gPSBsZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbmFbdmFyTGV0cmFdPWxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0cmEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxldHJhLmNoYXJDb2RlQXQoMCkrMSk7ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxhQWxlYXRvcmlhTWllbWJyb3MgPSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby50YWJsYS5tYXAoKGxpc3RhKT0+bGlzdGEuc3BsaXQoJycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RvID0gaWRFbmMgJSAxMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbmFUYWJsYUFsZWF0b3JpYSA9IHJlc3RvP3Jlc3RvIC0gMTo5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzb3J0ZWFyLmxlbmd0aCA+IHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlYXIuc3BsaWNlKHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKSAvL2Rlc2NhcnRvIGNhbmRpZGF0b3Mgc2kgc29uIG3DoXMgcXVlIGxvIHF1ZSBwZXJtaXRlIGxhIHRhYmxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGFUYWJsYUFsZWF0b3JpYSA9IHNvcnRlYXIubGVuZ3RoIC0gMSA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYVNlbGVjY2lvbmFkYSA9IHRhYmxhQWxlYXRvcmlhTWllbWJyb3NbZmlsYVRhYmxhQWxlYXRvcmlhXVtjb2x1bW5hVGFibGFBbGVhdG9yaWFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpY2lvblNvcnRlYWRhID0gcmVzcHVlc3Rhc1VBLmZpbmRJbmRleCgocDpSZXNwdWVzdGFzKT0+cFt2YXJMZXRyYV09PWxldHJhU2VsZWNjaW9uYWRhKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dPXBvc2ljaW9uU29ydGVhZGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT1zb3J0ZWFyLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XT1yZXNwdWVzdGFzVUFbcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gYXMgbnVtYmVyIC0xXVttb3N0cmFyLnNvdXJjZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT0wO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09IHJlc3B1ZXN0YXNVQS5sZW5ndGggfHwgbnVsbDsgLy9ubyBxdWVyZW1vcyBlbCB2YWxvciAwXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBXT0nb2snO1xyXG4gICAgICAgICAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbF09J29rJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKXtcclxuICAgIGlmKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMpe1xyXG4gICAgICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIH1cclxuICAgIGlmKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byl7XHJcbiAgICAgICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICBmb3JtdWxhcmlvczp7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106SW5mb0Zvcm11bGFyaW8gfSwgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIFxyXG4gICAgVUE6SWRVbmlkYWRBbmFsaXNpcywgXHJcbiAgICBmb3JQazpGb3JQayxcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsIC8vIGluY2x1eWVuIGxhIGRlIHRvZG9zIGxvcyBwYWRyZXMgeSBhbnNlc3Ryb3MsXHJcbiAgICByZXNwdWVzdGFzUGFkcmU6UmVzcHVlc3Rhc3xudWxsLCBcclxuICAgIG9wdHM6T3BjaW9uZXNSb3dWYWxpZGF0b3IsXHJcbil7XHJcbiAgICAvLyByZWNvcnJpZW5kIFVBIHBlcnNvbmFzIHkgbWFzY290YXNcclxuICAgIGZvcih2YXIgVUFpbmNsdWlkYSBvZiBkZWZPcGVyYXRpdm8uZGVmVUFbVUFdLmluY2x1aWRhcyl7XHJcbiAgICAgICAgdmFyIHBrTnVldmEgPSBkZWZPcGVyYXRpdm8uZGVmVUFbVUFpbmNsdWlkYV0ucGs7XHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1tVQWluY2x1aWRhXTtcclxuICAgICAgICBsaWtlQXIoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXNIaWpvLCB2YWxvclBrT1Bvc2ljaW9uKT0+e1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yLCBcclxuICAgICAgICAgICAgICAgIGZvcm11bGFyaW9zLCBcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNIaWpvLCBcclxuICAgICAgICAgICAgICAgIFVBaW5jbHVpZGEsIFxyXG4gICAgICAgICAgICAgICAgey4uLmZvclBrLCBbcGtOdWV2YV06dmFsb3JQa30sXHJcbiAgICAgICAgICAgICAgICB7Li4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXNIaWpvLCBbcGtOdWV2YV06dmFsb3JQa30sXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvLyBTMSAsIEExXHJcbiAgICBmb3IodmFyIGVzSGVybWFubyBvZiBbdHJ1ZSwgZmFsc2VdKXtcclxuICAgICAgICBmb3IodmFyIGZvcm11bGFyaW8gb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pZHNGb3IpIGlmKCEhZXNIZXJtYW5vID09ICEhZGVmT3BlcmF0aXZvLmRlZkZvcltmb3JtdWxhcmlvXS5oZXJtYW5vKXtcclxuICAgICAgICAgICAgdmFyIHBsYWluRm9yUGs6UGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayh7Li4uZm9yUGssIGZvcm11bGFyaW99KVxyXG4gICAgICAgICAgICB2YXIgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcyA9IDEwO1xyXG4gICAgICAgICAgICB2YXIgdmFyQXV0b0luZ3Jlc2FkYXMgPSBbXTtcclxuICAgICAgICAgICAgZG97XHJcbiAgICAgICAgICAgICAgICB2YXIgaHVib0F1dG9pbmdyZXNvcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa109XHJcbiAgICAgICAgICAgICAgICAgICAgcm93VmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7bWFyY2FGaW46J2ZpbicsIC4uLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3J9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB2YXIge3Jlc3VtZW4sIGF1dG9JbmdyZXNhZGFzfSA9IGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhck5hbWU6SWRWYXJpYWJsZTtcclxuICAgICAgICAgICAgICAgIGlmKGF1dG9JbmdyZXNhZGFzIT1udWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3IodmFyTmFtZSBpbiBhdXRvSW5ncmVzYWRhcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW1iaW8gPSByZXNwdWVzdGFzW3Zhck5hbWVdICE9PSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FtYmlvKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5wdXNoKHZhck5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVib0F1dG9pbmdyZXNvcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gd2hpbGUoaHVib0F1dG9pbmdyZXNvcyAmJiBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzLS0+MCk7XHJcbiAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLmZvckVhY2godmFybmFtZT0+e1xyXG4gICAgICAgICAgICAgICAgLy8gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa10uZXN0YWRvc1t2YXJuYW1lIGFzIElkVmFyaWFibGVdID0gJ2FjdHVhbCc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHZhciBCRl92YXJuYW1lID0gJyRCLicrZm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIHZhciBmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGEgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrLnZpdmllbmRhISk7XHJcbiAgICAgICAgICAgIGlmKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gaGF5IGNvbmZpZ3VyYWNpb24gZGUgc29ydGVvIHBhcmEgZWwgZm9ybXVsYXJpbyAke2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYX1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXTtcclxuICAgICAgICAgICAgdmFyIHJlc3VtZW5Pck51bGwgPSBcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgJiYgXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsID09IEJGX3Zhcm5hbWU/XHJcbiAgICAgICAgICAgICAgICAgICAgJ29rJ1xyXG4gICAgICAgICAgICAgICAgOnJlc3VtZW4gPT0gJ3ZhY2lvJyA/IFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgIDpyZXN1bWVuXHJcbiAgICAgICAgICAgIGlmKGVzSGVybWFubyl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfWVsc2UgaWYocmVzcHVlc3Rhc1BhZHJlICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1BhZHJlW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShudW1iZXJPclN0cmluZzpudW1iZXJ8c3RyaW5nLCBvYmplY3Q6b2JqZWN0fGFueVtdKToobnVtYmVyfHN0cmluZyl7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzdG95IHVzYW5kbyBpc05hTiBwYXJhIHZlciBzaSBlcyBvIG5vIHVuIG7Dum1lcm8gc3VtYWJsZVxyXG4gICAgaWYoaXNOYU4obnVtYmVyT3JTdHJpbmcpKXtcclxuICAgICAgICByZXR1cm4gbnVtYmVyT3JTdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTnVtYmVyKG51bWJlck9yU3RyaW5nKSsob2JqZWN0IGluc3RhbmNlb2YgQXJyYXk/MTowKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRNYWluRm9ybUZvclZpdmllbmRhID0gKHZpdmllbmRhOm51bWJlcik6SWRGb3JtdWxhcmlvPT57XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgdml2aWVuZGEgZXMgZWwgcGFyYW1ldHJvIGNvcnJlY3RvXHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbdml2aWVuZGFdLnRhcmVhLm1haW5fZm9ybVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKXtcclxuICAgIGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maWx0ZXIodWFEZWY9PiF1YURlZi5wYWRyZSkuZm9yRWFjaCh1YURlZj0+e1xyXG4gICAgICAgIHZhciBlc1ByaW5jaXBhbCA9IChmOkZvcm11bGFyaW8sIGVuYzphbnkpPT4ge1xyXG4gICAgICAgICAgICBsZXQgZm9ybXVsYXJpb1ByaW5jaXBhbCA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZW5jKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm11bGFyaW9QcmluY2lwYWw/Zm9ybXVsYXJpb1ByaW5jaXBhbD09Zi5pZF9jYXNpbGxlcm86Zi5mb3JtdWxhcmlvX3ByaW5jaXBhbFxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW3VhRGVmLnVuaWRhZF9hbmFsaXNpc11cclxuICAgICAgICBiZWluZ0FycmF5KGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzLCB2YWxvclBrT1Bvc2ljaW9uKT0+e1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5maWx0ZXIoZj0+Zi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YURlZi51bmlkYWRfYW5hbGlzaXMgJiYgZXNQcmluY2lwYWwoZi5jYXNpbGxlcm9zLCB2YWxvclBrIGFzIG51bWJlcikpLmZvckVhY2goKF9kZWZGLCBmb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvclBrUmFpeiA9IHtmb3JtdWxhcmlvLCBbdWFEZWYucGtfYWdyZWdhZGFdOnZhbG9yUGt9IGFzIEZvclBrUmFpelxyXG4gICAgICAgICAgICAgICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzLCBmb3JQa1JhaXosIHt9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICBmb3JtdWxhcmlvczp7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106SW5mb0Zvcm11bGFyaW8gfSwgXHJcbiAgICBmb3JQa1JhaXo6IEZvclBrUmFpeiwgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIFxyXG4gICAgb3B0czpPcGNpb25lc1Jvd1ZhbGlkYXRvclxyXG4pe1xyXG4gICAgdmFyIGZvclBrOkZvclBrID17Li4uZm9yUGtSYWl6fTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhmZWVkYmFja1Jvd1ZhbGlkYXRvciwgZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIGRlZk9wZXJhdGl2by5VQXByaW5jaXBhbCwgZm9yUGssIHJlc3B1ZXN0YXMsIG51bGwsIG9wdHMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsIGZvclBrUmFpejpGb3JQa1JhaXosIG9wdHM6T3BjaW9uZXNSb3dWYWxpZGF0b3Ipe1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG86UmVzdW1lbkVzdGFkbztcclxuICAgIC8vIEB0cy1pZ25vcmUgUGFydGlhbFxyXG4gICAgdmFyIG51ZXZvc1Jvd3MgOiB7W3ggaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsSWRGaW4+fT17fVxyXG4gICAgY2FsY3VsYXJGZWVkYmFja0VuY3Vlc3RhKG51ZXZvc1Jvd3MsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIGZvclBrUmFpeiwgcmVzcHVlc3Rhcywgb3B0cyk7XHJcbiAgICBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGxpa2VBcihkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcikuZmlsdGVyKChfZmVlZGJhY2s6YW55LCBwbGFpblBrOlBsYWluRm9yUGspPT5KU09OLnBhcnNlKHBsYWluUGspLnZpdmllbmRhICE9IGZvclBrUmFpei52aXZpZW5kYSkucGxhaW4oKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0gey4uLmRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCAuLi5udWV2b3NSb3dzfTtcclxuICAgIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMudml2aWVuZGFzW2ZvclBrUmFpei52aXZpZW5kYSFdID0ge1xyXG4gICAgICAgIC4uLmRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMudml2aWVuZGFzW2ZvclBrUmFpei52aXZpZW5kYSFdLFxyXG4gICAgICAgIC4uLmNhbGN1bGFyUmVzdW1lblZpdmllbmRhKFxyXG4gICAgICAgICAgICBmb3JQa1JhaXosIFxyXG4gICAgICAgICAgICBudWV2b3NSb3dzLFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzXHJcbiAgICAgICAgKVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRGb3JtdWxhcmlvc0ZvcklkVml2aWVuZGEgPSAoaWRWaXZpZW5kYTpudW1iZXIpPT57XHJcbiAgICB2YXIgbWFpbkZvcm1Gb3JWaXZpZW5kYSA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoaWRWaXZpZW5kYSk7XHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IFttYWluRm9ybUZvclZpdmllbmRhXTtcclxuICAgIHZhciBidXNjYXJGb3JtdWxhcmlvc0hpam9zID0gKGlkRm9ybXVsYXJpbzpJZEZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9dLmNhc2lsbGVyb3MuY2FzaWxsZXJvcy5mb3JFYWNoKChjYXNpbGxlcm8pPT57XHJcbiAgICAgICAgICAgIGlmKGNhc2lsbGVyby50aXBvYyA9PSAnQkYnKXtcclxuICAgICAgICAgICAgICAgIHZhciBmb3JtSGlqbyA9IChjYXNpbGxlcm8uc2FsdG8/LnN0YXJ0c1dpdGgoJ0Y6Jyk/Y2FzaWxsZXJvLnNhbHRvOidGOicgKyBjYXNpbGxlcm8uc2FsdG8pIGFzIElkRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgIGlmKGZvcm1IaWpvKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLnB1c2goZm9ybUhpam8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MoZm9ybUhpam8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MobWFpbkZvcm1Gb3JWaXZpZW5kYSk7XHJcbiAgICByZXR1cm4gZm9ybXNGZWVkYmFjaztcclxufVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhckFjdHVhbEJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgbnVtRWxlbWVudG9VQTogbnVtYmVyLCBudW1BY3R1YWw6bnVtYmVyfG51bGwsIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvLCByOlJlc3B1ZXN0YXMpPT5cclxuICAgICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCAmJlxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpb1xyXG4gICAgPyBcclxuICAgICAgICBudW1FbGVtZW50b1VBID09IGNvYWxlc2NlKFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgKVxyXG4gICAgOlxyXG4gICAgICAgIG51bUFjdHVhbCA9PSBudW1FbGVtZW50b1VBXHJcbiAgICApXHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyRGlzYWJsZWRCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsIG51bUVsZW1lbnRvVUE6IG51bWJlciwgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8sIHI6UmVzcHVlc3Rhcyk9PlxyXG4gICAgISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8gJiZcclxuICAgIG51bUVsZW1lbnRvVUEgIT0gY29hbGVzY2UoXHJcbiAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb19tYW51YWxdLFxyXG4gICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICApKVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvKT0+XHJcbiAgICAhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvKVxyXG5cclxudHlwZSBSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgcmVzdW1lbkVzdGFkbzpSZXN1bWVuRXN0YWRvLFxyXG4gICAgcmVzdW1lbkVzdGFkb1N1cDpSZXN1bWVuRXN0YWRvLFxyXG4gICAgY29kUmVhOm51bWJlcnxudWxsLFxyXG4gICAgY29kTm9SZWE6c3RyaW5nfG51bGwsXHJcbiAgICBjb2RSZWFTdXA6bnVtYmVyfG51bGxcclxuICAgIGNvZE5vUmVhU3VwOnN0cmluZ3xudWxsLFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoXHJcbiAgICBmb3JQa1JhaXo6Rm9yUGtSYWl6LCBcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0sIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzXHJcbik6UmVzdWx0YWRvUmVzdW1lbntcclxuICAgIHZhciB7Y29kUmVhLCBlc1JlYX0gPSBkZWZPcGVyYXRpdm8uZXNSZWFsaXphZGEocmVzcHVlc3RhcylcclxuICAgIHZhciB7Y29kTm9SZWEsIGVzTm9SZWF9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWEocmVzcHVlc3RhcylcclxuICAgIHZhciB7Y29kUmVhU3VwLGVzUmVhU3VwfSA9IGRlZk9wZXJhdGl2by5lc1JlYWxpemFkYVN1cChyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHtjb2ROb1JlYVN1cCwgZXNOb1JlYVN1cH0gPSBkZWZPcGVyYXRpdm8uZXNOb1JlYVN1cChyZXNwdWVzdGFzKVxyXG4gICAgdmFyIGZvcm1zRmVlZGJhY2sgPSBnZXRGb3JtdWxhcmlvc0ZvcklkVml2aWVuZGEoZm9yUGtSYWl6LnZpdmllbmRhISk7XHJcbiAgICB2YXIgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrUmFpei52aXZpZW5kYSEpXVxyXG4gICAgdmFyIGZlZWRCYWNrVml2aWVuZGEgPSBsaWtlQXIoZmVlZGJhY2tSb3dWYWxpZGF0b3IpLmZpbHRlcigoX3JvdywgcGxhaW5Qayk9PntcclxuICAgICAgICB2YXIgdGllbmVJbmRpdmlkdWFsID0gY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gJiYgISEoY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUpXHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocGxhaW5Qaykudml2aWVuZGE9PWZvclBrUmFpei52aXZpZW5kYSAmJiBcclxuICAgICAgICAgICAgZm9ybXNGZWVkYmFjay5pbmNsdWRlcyhKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8pICYmXHJcbiAgICAgICAgICAgICh0aWVuZUluZGl2aWR1YWw/XHJcbiAgICAgICAgICAgICAgICAhY2FsY3VsYXJEaXNhYmxlZEJGKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLnBlcnNvbmEsIFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbywgXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5ob2dhcj9yZXNwdWVzdGFzRm9yUGsoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXZpZW5kYTpmb3JQa1JhaXoudml2aWVuZGEsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtdWxhcmlvOmNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBob2dhcjpKU09OLnBhcnNlKHBsYWluUGspLmhvZ2FyIFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLnJlc3B1ZXN0YXM6e30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6dHJ1ZSlcclxuICAgIH0pLmFycmF5KCk7XHJcbiAgICB2YXIgcHJpb3JpZGFkZXM6e1trZXkgaW4gUmVzdW1lbkVzdGFkb106IHtwcmlvcmlkYWQ6bnVtYmVyLCBjYW50aWRhZDpudW1iZXJ9fSA9IHtcclxuICAgICAgICAnbm8gcmVhJzp7cHJpb3JpZGFkOiAxLCBjYW50aWRhZDowfSxcclxuICAgICAgICAnY29uIHByb2JsZW1hcyc6e3ByaW9yaWRhZDogMiwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ2luY29tcGxldG8nOntwcmlvcmlkYWQ6IDMsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICd2YWNpbyc6e3ByaW9yaWRhZDogNCwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ2NpdGEgcGFjdGFkYSc6e3ByaW9yaWRhZDogNSwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ29rJzp7cHJpb3JpZGFkOiA2LCBjYW50aWRhZDowfVxyXG4gICAgfVxyXG4gICAgdmFyIG1pbiA9IDY7XHJcbiAgICB2YXIgbWluUmVzdW1lbjogUmVzdW1lbkVzdGFkbyA9ICdvayc7XHJcbiAgICBmb3IodmFyIGZlZWRiYWNrIG9mIGZlZWRCYWNrVml2aWVuZGEpe1xyXG4gICAgICAgIHZhciByZXN1bWVuID0gZmVlZGJhY2sucmVzdW1lbjtcclxuICAgICAgICBwcmlvcmlkYWRlc1tyZXN1bWVuXS5jYW50aWRhZCsrO1xyXG4gICAgICAgIGlmKHByaW9yaWRhZGVzW3Jlc3VtZW5dLnByaW9yaWRhZDxtaW4pe1xyXG4gICAgICAgICAgICBtaW49cHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkO1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuPXJlc3VtZW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYobWluUmVzdW1lbj09J3ZhY2lvJyYmIHByaW9yaWRhZGVzWydvayddLmNhbnRpZGFkIHx8IG1pblJlc3VtZW49PSdpbmNvbXBsZXRvJyl7XHJcbiAgICAgICAgaWYoZmFsc2UgLypyZXNwdWVzdGFzW3NwMV09PTIgJiYgcmVzcHVlc3Rhc1tzcDZdPT1udWxsKi8pe1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuPSdjaXRhIHBhY3RhZGEnO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuPSdpbmNvbXBsZXRvJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vVE9ETyBBUlJFR0xBUiBFU1RFIEhPUlJPUiwgR0VORVJBTElaQVJcclxuICAgIHZhciB0YXJlYSA9IGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW2ZvclBrUmFpei52aXZpZW5kYSBhcyB1bmtub3duIGFzIElkRW5jXS50YXJlYS50YXJlYTtcclxuICAgIHZhciByZXN1bWVuRXN0YWRvOlJlc3VtZW5Fc3RhZG87XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkb1N1cDpSZXN1bWVuRXN0YWRvID0gJ3ZhY2lvJztcclxuICAgIGlmKHRhcmVhPT0nc3VwZScpe1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAgPSBlc05vUmVhU3VwPydubyByZWEnOm1pblJlc3VtZW5cclxuICAgICAgICAvL3BhcmEgcXVlIGNvbG9yZWUgYmllbiBlbiBsYSBoZHIgZGVsIERNIChsdWVnbyBlbiBiYmRkIG5vIHNlIGd1YXJkYSlcclxuICAgICAgICByZXN1bWVuRXN0YWRvID0gcmVzdW1lbkVzdGFkb1N1cFxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IGVzTm9SZWE/J25vIHJlYSc6bWluUmVzdW1lblxyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdGFkbzpSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8sXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkb1N1cCxcclxuICAgICAgICBjb2RSZWEsXHJcbiAgICAgICAgY29kTm9SZWEsXHJcbiAgICAgICAgY29kUmVhU3VwLFxyXG4gICAgICAgIGNvZE5vUmVhU3VwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0YWRvXHJcbn1cclxuIl19
|
|
1042
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEscUNBQXVEO0lBRXZELGlEQUFvRztJQUVwRywrQ0FBK0Q7SUFFL0QsbUNBZ0JpQjtJQUVqQixJQUFJLFVBQVUsR0FBRyxFQUdoQixDQUFBO0lBQ0QsU0FBZ0Isb0JBQW9CLENBQUMsaUJBQW1FO1FBQ3BHLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQTtJQUNwRCxDQUFDO0lBRkQsb0RBRUM7SUFFRCxTQUFnQix3Q0FBd0MsQ0FBQyxxQ0FBdUY7UUFDNUksVUFBVSxDQUFDLHFDQUFxQyxHQUFHLHFDQUFxQyxDQUFBO0lBQzVGLENBQUM7SUFGRCw0RkFFQztJQVNELElBQUksV0FBVyxHQUFHLEVBQWlCLENBQUE7SUFFbkMsOEJBQThCO0lBQzlCLElBQUksVUFBVSxHQUFjLElBQWtCLENBQUM7SUFFL0MsSUFBSSwyQkFBMkIsR0FBZ0QsR0FBRSxFQUFFO1FBQy9FLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUN2RCxDQUFDLENBQUE7SUFFRCxTQUFnQix1QkFBdUIsQ0FBQyx1QkFBbUQ7UUFDdkYsMkJBQTJCLEdBQUcsdUJBQXVCLENBQUM7SUFDMUQsQ0FBQztJQUZELDBEQUVDO0lBRUQsU0FBc0Isb0JBQW9CLENBQUMsSUFBNEI7O1lBQ25FLE1BQU0sMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7WUFDekIsbUJBQW1CLEVBQUUsQ0FBQztRQUMxQixDQUFDO0tBQUE7SUFKRCxvREFJQztJQUVELFNBQWdCLGdCQUFnQixDQUM1QixnQkFBK0Y7UUFFL0YsYUFBYSxHQUFHLGdCQUFnQixDQUFBO0lBQ3BDLENB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TyxDQUFDO1FBQzdDLElBQUcsS0FBSyxJQUFFLE1BQU0sRUFBQztZQUNiLGdCQUFnQixHQUFHLFVBQVUsQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFBLENBQUMsQ0FBQSxVQUFVLENBQUE7WUFDakQscUVBQXFFO1lBQ3JFLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQTtTQUNuQzthQUFJO1lBQ0QsYUFBYSxHQUFHLE9BQU8sQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFBLENBQUMsQ0FBQSxVQUFVLENBQUE7U0FDOUM7UUFDRCxJQUFJLFNBQVMsR0FBb0I7WUFDN0IsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixNQUFNO1lBQ04sUUFBUTtZQUNSLFNBQVM7WUFDVCxXQUFXO1NBQ2QsQ0FBQTtRQUNELE9BQU8sU0FBUyxDQUFBO0lBQ3BCLENBQUM7SUExRUQsMERBMEVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRSb3dWYWxpZGF0b3IsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSwgT3BjaW9uZXNSb3dWYWxpZGF0b3IsIEZlZWRiYWNrIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbmltcG9ydCB7IGRhdGUsIGNvbXBhcmVGb3JPcmRlciwgY29hbGVzY2UgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgRXN0cnVjdHVyYSwgXHJcbiAgICBGb3JQaywgRm9yUGtSYWl6LFxyXG4gICAgSWRGaW4sIElkRm9ybXVsYXJpbywgSWRQcmVndW50YSwgSWRUYXJlYSwgSWRWYXJpYWJsZSwgXHJcbiAgICBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgSW5mb0Zvcm11bGFyaW8sIFxyXG4gICAgUGxhaW5Gb3JQaywgUmVzcHVlc3RhcywgUmVzcHVlc3Rhc1JhaXosIFJlc3VtZW5Fc3RhZG8sXHJcbiAgICBWYWxvciwgVmlzaXRhLCBcclxuICAgIHRvUGxhaW5Gb3JQayxcclxuICAgIFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgRm9ybXVsYXJpbyxcclxuICAgIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsXHJcbiAgICBJZEVuYyxcclxuICAgIERlZk9wZXJhdGl2byxcclxuICAgIGl0ZXJhdG9yXHJcbn0gZnJvbSBcIi4vdGlwb3NcIjtcclxuXHJcbnZhciBlc3BlY2lhbGVzID0ge30gYXMge1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXM/OihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspPT52b2lkXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvPzoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKT0+dm9pZFxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlcyhjYWxjdWxhclZhcmlhYmxlczoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosZm9yUGs6Rm9yUGspPT52b2lkKXtcclxuICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMgPSBjYWxjdWxhclZhcmlhYmxlc1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byhjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvOihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeixmb3JQazpGb3JQayk9PnZvaWQpe1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvID0gY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2b1xyXG59XHJcblxyXG50eXBlIERhdG9zQnlQYXNzID0gRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7XHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7ICAvLyBubyBzZSBwZXJzaXN0ZVxyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9XHJcbiAgICBkaXJ0eTpib29sZWFuXHJcbn07XHJcblxyXG52YXIgZGF0b3NCeVBhc3MgPSB7fSBhcyBEYXRvc0J5UGFzc1xyXG5cclxuLy9AdHMtaWdub3JlIGFycmFuY2EgZW4gYmxhbmNvXHJcbnZhciBlc3RydWN0dXJhOkVzdHJ1Y3R1cmEgPSBudWxsIGFzIEVzdHJ1Y3R1cmE7XHJcblxyXG5sZXQgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vOihkYnBwOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKT0+UHJvbWlzZTxhbnk+ID0gKCk9PntcclxuICAgIHRocm93IG5ldyBFcnJvcigncGVyc2lzdGlyRGF0b3NCeVBhc3MgU0lOIERFRklOSVInKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MocGVyc2lzdGlyRGF0b3NCeVBhc3NGdW46dHlwZW9mIHBlcnNpc3RpckRhdG9zQnlQYXNzKXtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubyA9IHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGJwcDpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyl7XHJcbiAgICBhd2FpdCBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm8oZGJwcCk7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGZhbHNlXHJcbiAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFbmNvbGFyQmFja3VwKFxyXG4gICAgZW5jb2xhckJhY2t1cEZ1bjoodG9rZW46c3RyaW5nfHVuZGVmaW5lZCwgZm9yUGtSYWl6OkZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhcyk9PnZvaWRcclxuKXtcclxuICAgIGVuY29sYXJCYWNrdXAgPSBlbmNvbGFyQmFja3VwRnVuXHJcbn1cclxuXHJcbmxldCBlbmNvbGFyQmFja3VwOih0b2tlbjpzdHJpbmd8dW5kZWZpbmVkLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzKT0+dm9pZCA9ICgpPT57XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTSU4gRVNQRUNJRklDQVIgZW5jb2xhckJhY2t1cFwiKVxyXG59XHJcblxyXG5leHBvcnQgdmFyIGludGVudGFyQmFja3VwID0gKGZvclBrOkZvclBrKT0+e1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSlcclxuICAgIHZhciB0b2tlbiA9IGRhdG9zQnlQYXNzLnRva2VuO1xyXG4gICAgaWYodG9rZW4pe1xyXG4gICAgICAgIGVuY29sYXJCYWNrdXAodG9rZW4sIGZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXopXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm5vIGhheSB0b2tlbiwgbm8gc2UgcHVkbyBoYWNlciBlbCBiYWNrdXBcIilcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVzdHJ1Y3R1cmEoZXN0cnVjdHVyYUFDYXJnYXI6RXN0cnVjdHVyYSl7XHJcbiAgICBlc3RydWN0dXJhID0gZXN0cnVjdHVyYUFDYXJnYXI7XHJcbiAgICBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCh1YT0+ISF1YS5wcmluY2lwYWwpPy51bmlkYWRfYW5hbGlzaXMhXHJcbiAgICBkZWZPcGVyYXRpdm8uZGVmRm9yID0gbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLm1hcChmPT4oe2hlcm1hbm86IGYuY2FzaWxsZXJvcy5oZXJtYW5vfSkpLnBsYWluKClcclxuICAgIGRlZk9wZXJhdGl2by5kZWZVQSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5tYXAoKHVhRGVmLCB1YSk9Pih7XHJcbiAgICAgICAgcGs6dWFEZWYucGtfYWdyZWdhZGEgYXMgSWRWYXJpYWJsZSwgXHJcbiAgICAgICAgaW5jbHVpZGFzOiBsaWtlQXIodWFEZWYuaGlqYXMpLmtleXMoKSxcclxuICAgICAgICBpZHNGb3I6IGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5maWx0ZXIoZj0+Zi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YSkua2V5cygpXHJcbiAgICB9KSkucGxhaW4oKVxyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7IFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RGF0b3NCeVBhc3MoZGJwcDpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyAmIHtkaXJ0eT86Ym9vbGVhbn0pe1xyXG4gICAgZGF0b3NCeVBhc3MgPSB7XHJcbiAgICAgICAgZGlydHk6ZmFsc2UsXHJcbiAgICAgICAgLi4uZGJwcCxcclxuICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7fSBhcyBEYXRvc0J5UGFzc1tcImZlZWRiYWNrUm93VmFsaWRhdG9yXCJdXHJcbiAgICB9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldERhdG9zQnlQYXNzID0gKCk9PiBkYXRvc0J5UGFzc1xyXG5cclxuZnVuY3Rpb24gb2JqZXRvVmFjaW8obzpvYmplY3Qpe1xyXG4gICAgZm9yKHZhciBrIGluIG8pe1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKXtcclxuICAgIGlmKCFkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciB8fCBvYmpldG9WYWNpbyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcikpe1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3I7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJ0eSgpe1xyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmRpcnR5XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFc3RydWN0dXJhKCl7XHJcbiAgICByZXR1cm4gZXN0cnVjdHVyYTtcclxufVxyXG5cclxudHlwZSBFbGVtZW50b3NSZWdpc3RyYWJsZXMgPSBIVE1MRGl2RWxlbWVudHxIVE1MQnV0dG9uRWxlbWVudHxIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxudHlwZSBEaXJlY3RGdW5jdGlvbjxULCBSZXN1bHQ+ID0gKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsVmFsb3IsSWRGaW4+LCBlbGVtZW50bzpULFxyXG4gICAgZmVlZGJhY2tBbGw6e1xyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLFZhbG9yLElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgfSxcclxuICAgIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4pID0+IFJlc3VsdFxyXG5cclxudHlwZSBSZWdpc3Ryb0VsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0ge1xyXG4gICAgaWQ6IHN0cmluZywgXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIGFueT5cclxufSAmICh7XHJcbiAgICBwcm9wOmtleW9mIFRcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgVFtrZXlvZiBUXT4gLy8gTG8gcXVlIHJldG9ybmEgbGEgZnVuKGNpw7NuKSBzZSB1c2EgcGFyYSBsYSBwcm9wKGVydHkpIGRlbCBlbGVtZW50b1xyXG59fHtcclxuICAgIGF0dHI6c3RyaW5nXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHN0cmluZz4gLy8gTG8gcXVlIHJldG9ybmEgbGEgZnVuKGNpw7NuKSBzZSB1c2EgcGFyYSBlbCB2YWxvciBkZWwgYXR0cihpYnV0bylcclxufXx7XHJcbiAgICBzdHlsZTprZXlvZiBDU1NTdHlsZURlY2xhcmF0aW9uIFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgZWwgdmFsb3IgZGVsIHN0eWxlXHJcbn18e1xyXG4gICAgZGlyZWN0OnRydWVcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgdm9pZD4gLy8gTGEgZnVuY2nDs24gdmEgYSB0b2NhciBkaXJlY3RhbWVudGUgZWwgZWxlbWVudG8geSBoYWNlciB0b2RvIGxvIHF1ZSB0ZW5nYSBxdWUgaGFjZXJcclxufSlcclxuXHJcbnR5cGUgUmVnaXN0cm9FbGVtZW50b3M8VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4gPSB7IFtpZDpzdHJpbmddOiBSZWdpc3Ryb0VsZW1lbnRvPFQ+ICYge2VsZW1lbnRvPzpUfSB9O1xyXG5cclxudmFyIHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsID0ge30gYXMgUmVnaXN0cm9FbGVtZW50b3M8RWxlbWVudG9zUmVnaXN0cmFibGVzPjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RyYXJFbGVtZW50bzxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPihkZWY6UmVnaXN0cm9FbGVtZW50bzxUPil7XHJcbiAgICAvLyBAdHMtaWdub3JlIFPDrSwgcG9kcsOtYSBzZXIgcXVlIGxvcyB0aXBvcyBkZSBUIHNlYW4gZGlzdGludG9zLCBwZXJvIHZhbiBhIHNlciBjb2hlcmVudGVzXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3M6UmVnaXN0cm9FbGVtZW50b3M8VD4gPSByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbDtcclxuICAgIHJlZ2lzdHJvRWxlbWVudG9zW2RlZi5pZF0gPSBkZWY7XHJcbn1cclxuXHJcbnR5cGUgUmVzcHVlc3Rhc0ZvclBrQ29tdW4gPSB7cmVzcHVlc3RhczpSZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6OkZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6VW5pZGFkQW5hbGlzaXN9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOkZvclBrKTpSZXNwdWVzdGFzRm9yUGtDb211blxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOkZvclBrLCBjb25BdW1lbnRhZGFzOnRydWUsIGFncmVnYXJTaUZhbHRhPzpib29sZWFuKTpSZXNwdWVzdGFzRm9yUGtDb211biAmIHtyZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzfVxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOkZvclBrLCBjb25BdW1lbnRhZGFzPzpib29sZWFuLCBhZ3JlZ2FyU2lGYWx0YT86Ym9vbGVhbik6UmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7cmVzcHVlc3Rhc0F1bWVudGFkYXM/OlJlc3B1ZXN0YXN9IHtcclxuICAgIHZhciByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHt9IGFzIFJlc3B1ZXN0YXM7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGxvIHF1ZSBzb2JyYXIgZGUgcmVzcHVlc3RhcyBubyBtZSBpbXBvcnRhLi4uXHJcbiAgICB2YXIgcmVzcHVlc3RhcyA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMgYXMgUmVzcHVlc3RhcztcclxuICAgIHZhciByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXo7IFxyXG4gICAgdmFyIGZvclBrUmFpejogRm9yUGs7IFxyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzfHVuZGVmaW5lZCA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXNcclxuICAgIHZhciBmb3JQa0FwaWxhZGEgPSBmb3JQaztcclxuICAgIHZhciBwaWxhOlt1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpcywgdWFEZWY6VW5pZGFkQW5hbGlzaXMsIGZvclBrOkZvclBrXVtdID0gW107XHJcbiAgICB3aGlsZSh1bmlkYWRfYW5hbGlzaXMpe1xyXG4gICAgICAgIHZhciB1YURlZjpVbmlkYWRBbmFsaXNpcyA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgICAgICBwaWxhLnB1c2goW3VuaWRhZF9hbmFsaXNpcywgdWFEZWYsIGZvclBrQXBpbGFkYV0pO1xyXG4gICAgICAgIGZvclBrQXBpbGFkYT17Li4uZm9yUGtBcGlsYWRhfTtcclxuICAgICAgICBkZWxldGUgZm9yUGtBcGlsYWRhW3VhRGVmLnBrX2FncmVnYWRhXVxyXG4gICAgICAgIHVuaWRhZF9hbmFsaXNpcz11YURlZi5wYWRyZVxyXG4gICAgfVxyXG4gICAgd2hpbGUocGlsYS5sZW5ndGgpe1xyXG4gICAgICAgIFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdID0gcGlsYS5wb3AoKSFcclxuICAgICAgICB2YXIgdmFsb3JQa09Qb3NpY2lvbiA9IGZvclBrQXBpbGFkYVt1YURlZi5wa19hZ3JlZ2FkYV07XHJcbiAgICAgICAgaWYodmFsb3JQa09Qb3NpY2lvbiA9PSB1bmRlZmluZWQpe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhbHRhIHVuIHZhbG9yIHBhcmEgJHtKU09OLnN0cmluZ2lmeSh1YURlZi5wa19hZ3JlZ2FkYSl9YClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID09IG51bGwpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3B1ZXN0YXNBbnRlcmlvcj1yZXNwdWVzdGFzO1xyXG4gICAgICAgIGxldCBwb3NpY2lvbiA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5P3ZhbG9yUGtPUG9zaWNpb24gLSAxOnZhbG9yUGtPUG9zaWNpb25cclxuICAgICAgICByZXNwdWVzdGFzID0gcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdW3Bvc2ljaW9uXTtcclxuICAgICAgICBpZihyZXNwdWVzdGFzID09IG51bGwpe1xyXG4gICAgICAgICAgICBpZihhZ3JlZ2FyU2lGYWx0YSl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0ge30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0FudGVyaW9yW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dID0gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZXhpc3RlIGVsIGVsZW1lbnRvICcke3Bvc2ljaW9ufScgZW4gbGEgdW5pZGFkX2FuYWxpc2lzICcke3VuaWRhZF9hbmFsaXNpc30nYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yUGtSYWl6IHx8PSBmb3JQa0FwaWxhZGE7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBTw6kgcXVlIGVzIHJhw616IHBvciBjw7NtbyBlc3RveSByZXZvbHZpZW5kbyBsYSBwaWxhXHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXogfHw9IHJlc3B1ZXN0YXM7XHJcbiAgICAgICAgaWYoY29uQXVtZW50YWRhcyl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzID0gey4uLnJlc3B1ZXN0YXNBdW1lbnRhZGFzLCAuLi5yZXNwdWVzdGFzLCBbdWFEZWYucGtfYWdyZWdhZGFdOnZhbG9yUGtPUG9zaWNpb259XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXNwdWVzdGFzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBTw6kgcXVlIGxhIHBpbGEgdGllbmUgYWwgbWVub3MgdW4gZWxlbWVudG8gcG9yIGxvIHRhbnRvIGVzdG8gZXN0w6EgbGxlbm8gc2VndXJvLiBcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczogdWFEZWZcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtSYWl6OkZvclBrUmFpeil7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXNBdW1lbnRhZGFzfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1JhaXosIHRydWUpXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3MgPSByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbDtcclxuICAgIHZhciBwbGFpbkZvclBrID0gdG9QbGFpbkZvclBrKGZvclBrUmFpeilcclxuICAgIHZhciByb3dWYWxpZGF0b3IgPSAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa107XHJcbiAgICBmb3IodmFyIGlkIGluIHJlZ2lzdHJvRWxlbWVudG9zKXtcclxuICAgICAgICB2YXIgZGVmID0gcmVnaXN0cm9FbGVtZW50b3NbaWRdO1xyXG4gICAgICAgIGlmKGRlZi5lbGVtZW50byl7XHJcbiAgICAgICAgICAgIGlmKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGRlZi5lbGVtZW50bykpe1xyXG4gICAgICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICBkZWYuZWxlbWVudG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkZWYuaWQpIGFzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWRlZi5lbGVtZW50byl7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCVVNDQU5ETyBlbCBlbGVtZW50byByZWdpc3RyYWRvICcsaWQsJ25vIGVzdMOhIGVuIGVsIERPTScpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmFsdWUgPSBkZWYuZnVuKHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByb3dWYWxpZGF0b3IsIGRlZi5lbGVtZW50bywgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgIGlmKCdwcm9wJyBpbiBkZWYpe1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50bywgZGVmLnByb3AsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZignYXR0cicgaW4gZGVmKXtcclxuICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGRlZi5lbGVtZW50bywgZGVmLmF0dHIsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZignc3R5bGUnIGluIGRlZil7XHJcbiAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZGVmLmVsZW1lbnRvLnN0eWxlLCBkZWYuc3R5bGUsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHJvd1ZhbGlkYXRvci5hY3R1YWwpe1xyXG4gICAgICAgIHZhciB7dG9wLCBib3R0b219ID0gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKHJvd1ZhbGlkYXRvci5hY3R1YWwpO1xyXG4gICAgICAgIGlmKHRvcCAhPSBudWxsICYmIGJvdHRvbSAhPW51bGwpe1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFycmliYScpLmVsVG9wVmlzaWJpbGl6YXIgPSB0b3A7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYWJham8nKS5lbEJvdHRvbVZpc2liaWxpemFyID0gYm90dG9tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyhpZFZhcmlhYmxlOklkVmFyaWFibGV8SWRGaW4pe1xyXG4gICAgdmFyIGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkVmFyaWFibGU9PSdmaW4nP2Bib3Rvbi12b2x2ZXItMmA6YHZhci0ke2lkVmFyaWFibGV9YClcclxuICAgICAgICB8fGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8tJHtpZFZhcmlhYmxlfWApO1xyXG4gICAgdmFyIGVsZW1lbnRvID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgdmFyIE1BUkdFTl9TQ1JPTEwgPSA2NDtcclxuICAgIHZhciBhbHRvUGFudGFsbGEgPSB3aW5kb3cuaW5uZXJIZWlnaHQqMC43IC0gTUFSR0VOX1NDUk9MTDtcclxuICAgIHZhciBlbGVtZW50b0VudGVybzpIVE1MRWxlbWVudHxudWxsID0gZWxlbWVudG87IC8vIGVzIGVsIGVsZW1lbnRvIHF1ZSB2YSBhIGVudGFyIGVudGVybyBlbiBwYW50YWxsYSwgZGVmaW5lIGVsIGJvdHRvbVxyXG4gICAgdmFyIHJlY3RFbGVtZW50b0VudGVybzpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHZhciBlbGVtZW50b1N1cGVyaW9yOkhUTUxFbGVtZW50fG51bGwgPSBudWxsOyAvLyBlcyBlbCBlbGVtZW50byBxdWUgdmEgYSBtb3N0cmFyc2UgZGVzZGUgYXJyaWJhIGF1bnF1ZSBubyBlbnRyZSBlbnRlcm8sIGRlZmluZSBlbCB0b3BcclxuICAgIHZhciByZWN0RWxlbWVudG9TdXBlcmlvcjpSZXR1cm5UeXBlPHR5cGVvZiBteU93bi5nZXRSZWN0PnxudWxsID0gbnVsbDtcclxuICAgIHdoaWxlKGVsZW1lbnRvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygndmFyaWFibGUnKSBcclxuICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykgXHJcbiAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmVndW50YScpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnY29uanVudG9wcmVndW50YXMnKSBcclxuICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3NlY2Npb24tYm90b24tZm9ybXVsYXJpbycpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnYm90b25mb3JtdWxhcmlvJykgXHJcbiAgICAgICAgKXtcclxuICAgICAgICAgICAgaWYoZWxlbWVudG9TdXBlcmlvciA9PSBudWxsICYmIGVsZW1lbnRvLmNsaWVudEhlaWdodCA8IGFsdG9QYW50YWxsYSl7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50b0VudGVybyA9IGVsZW1lbnRvO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm9cclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvRW50ZXJvISlcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3RFbGVtZW50b0VudGVybztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gbXlPd24uZ2V0UmVjdChlbGVtZW50byk7XHJcbiAgICAgICAgICAgICAgICBpZihyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCAtIHJlY3QudG9wIDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdEVsZW1lbnRvU3VwZXJpb3IgPSByZWN0O1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRvID0gZWxlbWVudG8/LnBhcmVudEVsZW1lbnQgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIGlmKGVsZW1lbnRvU3VwZXJpb3IgPT0gbnVsbCl7XHJcbiAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdDp7XHJcbiAgICAgICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPzpIVE1MRWxlbWVudHxudWxsXHJcbiAgICAgICAgdG9wPzpudW1iZXJ8bnVsbFxyXG4gICAgICAgIGJvdHRvbT86bnVtYmVyfG51bGxcclxuICAgICAgICBlbmZvY2Fkbz86Ym9vbGVhbnxudWxsXHJcbiAgICAgICAgZGVzZW5mb3F1ZT86c3RyaW5nfG51bGxcclxuICAgIH0gPSB7fTtcclxuICAgIGlmKGVsZW1lbnRvRW50ZXJvICE9IG51bGwpe1xyXG4gICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKXtcclxuICAgICAgICAgICAgcmVjdEVsZW1lbnRvRW50ZXJvID0gbXlPd24uZ2V0UmVjdChlbGVtZW50b0VudGVybylcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmVsZW1lbnRvSW5wdXRWYXJpYWJsZSA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgICAgICB2YXIgdG9wID0gKHJlY3RFbGVtZW50b1N1cGVyaW9yPz9yZWN0RWxlbWVudG9FbnRlcm8pLnRvcCAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICAgICAgcmVzdWx0LnRvcCA9IHRvcDtcclxuICAgICAgICByZXN1bHQuYm90dG9tID0gcmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0O1xyXG4gICAgICAgIGlmKHRvcDxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKXtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWU9J2FycmliYSc7XHJcbiAgICAgICAgfWVsc2UgaWYocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCtyZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIGFsdG9QYW50YWxsYSl7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlPSdhYmFqbyc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lbmZvY2Fkbz10cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEF0dHJEaXN0aW50bzxOIGV4dGVuZHMgc3RyaW5nPihcclxuICAgIG9iamV0bzp7c2V0QXR0cmlidXRlOihuYW1lOk4sIHZhbG9yOnN0cmluZyk9PnZvaWQsIGdldEF0dHJpYnV0ZToobmFtZTpOKT0+c3RyaW5nfG51bGx9LFxyXG4gICAgbmFtZTpOLFxyXG4gICAgdmFsb3I6c3RyaW5nXHJcbil7XHJcbiAgICBpZihvYmpldG8gJiYgb2JqZXRvLmdldEF0dHJpYnV0ZShuYW1lKSAhPSB2YWxvcil7XHJcbiAgICAgICAgb2JqZXRvLnNldEF0dHJpYnV0ZShuYW1lLCB2YWxvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRWYWxvckRpc3RpbnRvPFQgZXh0ZW5kcyB7fSwgTiBleHRlbmRzIGtleW9mIFQ+KFxyXG4gICAgb2JqZXRvOlQsXHJcbiAgICBuYW1lOk4sXHJcbiAgICB2YWxvcjpUW05dXHJcbil7XHJcbiAgICBpZihvYmpldG9bbmFtZV0gIT0gdmFsb3Ipe1xyXG4gICAgICAgIG9iamV0b1tuYW1lXSA9IHZhbG9yO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhfZm9yUGs6Rm9yUGspe1xyXG4gICAgXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9pZF9wcmVndW50YShfcGF5bG9hZDp7cHJlZ3VudGE6IElkUHJlZ3VudGEsIGZvclBrOiBGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9TT0xPX1RSQUVSX1NUQVRVUycpXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPID0gU3ltYm9sKCdOT19DQU1CSUFSX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8nKVxyXG5cclxuZnVuY3Rpb24gcmVmcmVzY2FyTWFyY2FEaXJ0eSgpe1xyXG4gICAgdmFyIGJvdG9uR3JhYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWJ1dHRvblwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgIGlmKGJvdG9uR3JhYmFyKXtcclxuICAgICAgICBpZihib3RvbkdyYWJhci5kaXNhYmxlZCAhPT0gIWRhdG9zQnlQYXNzLmRpcnR5KXtcclxuICAgICAgICAgICAgYm90b25HcmFiYXIuZGlzYWJsZWQgPSAhZGF0b3NCeVBhc3MuZGlydHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEocGF5bG9hZDp7XHJcbiAgICBmb3JQazpGb3JQaywgXHJcbiAgICB2YXJpYWJsZTpJZFZhcmlhYmxlfHR5cGVvZiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgXHJcbiAgICByZXNwdWVzdGE6VmFsb3J8dHlwZW9mIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU9cclxufSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB0b2tlbiA9ICdBVkVSSUdVQVIgVE9ETydcclxuICAgIGxldCB7IGZvclBrLCByZXNwdWVzdGEsIHZhcmlhYmxlIH0gPSBwYXlsb2FkO1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSAgPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpcyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb107XHJcbiAgICB2YXIgcmVjZW50TW9kaWZpZWQgPSBmYWxzZTtcclxuICAgIHZhciB2YWxvckFudGVyaW9yID0gdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgPyByZXNwdWVzdGFzW3ZhcmlhYmxlXSA6IG51bGw7XHJcbiAgICBpZihyZXNwdWVzdGEgIT09IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMpe1xyXG4gICAgICAgIGlmKHJlc3B1ZXN0YSA9PT0gJycpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGEgPSBudWxsO1xyXG4gICAgICAgIH1lbHNlIGlmKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbdmFyaWFibGVdPy50aXBvPT0nbnVtZXJvJyl7XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YSA9IE51bWJlcihyZXNwdWVzdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNpIGVzIHVuIGZhbHN5ICgwID09IGZhbHNlKSB0ZW5nbyBxdWUgY29tcGFyYXIgY29uICE9PVxyXG4gICAgICAgIHJlY2VudE1vZGlmaWVkID0gcmVzcHVlc3RhID8gdmFsb3JBbnRlcmlvciAhPSByZXNwdWVzdGEgOiB2YWxvckFudGVyaW9yICE9PSByZXNwdWVzdGFcclxuICAgICAgICBpZihyZWNlbnRNb2RpZmllZCl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyaWFibGVdID0gcmVzcHVlc3RhID8/IG51bGw7IC8vIGNhbWJpbyB1bmRlZmluZWQgcG9yIG51bGxcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgIHZhciBzaWd1aWVudGVWYXJpYWJsZTpJZFZhcmlhYmxlfElkRmlufG51bGx8dW5kZWZpbmVkO1xyXG4gICAgaWYodmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgJiYgKHJlY2VudE1vZGlmaWVkIHx8IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgZmVlZGJhY2tSb3cuYXV0b0luZ3Jlc2FkYXM/Llt2YXJpYWJsZV0pKXtcclxuICAgICAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICAgICAgaWYoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWRhdG9zQnlQYXNzPy5zb2xvTGVjdHVyYSl7XHJcbiAgICAgICAgICAgIHZlcmlmaWNhclNvcnRlbyh7XHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvOiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrLnZpdmllbmRhISldLCBcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlQWN0dWFsOiB2YXJpYWJsZSwgXHJcbiAgICAgICAgICAgICAgICBmb3JQazogZm9yUGtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgICAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgcmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwge2F1dG9JbmdyZXNvOiB0cnVlfSk7XHJcbiAgICAgICAgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gdmFyaWFibGU7XHJcbiAgICAgICAgZG97XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbc2lndWllbnRlVmFyaWFibGVdPy5zaWd1aWVudGU7XHJcbiAgICAgICAgfXdoaWxlKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpXHJcbiAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgPT0gbnVsbCAmJiBmZWVkYmFja1Jvdy5mZWVkYmFja1t2YXJpYWJsZV0/LmVzdGFkbyA9PSAndmFsaWRhJyl7XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gJ2Zpbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtyZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsOiBmZWVkYmFja1Jvdy5hY3R1YWx9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9ub3RhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIHRhcmVhOklkVGFyZWEsIG5vdGE6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCB0YXJlYSwgbm90YSB9ID0gcGF5bG9hZDtcclxuICAgIGNvbnNvbGUubG9nKFwiRkFMVEEgLy8gVE9ET1wiKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfdmlzaXRhKHBheWxvYWQ6e2ZvclBrUmFpejpGb3JQa1JhaXosIG9ic2VydmFjaW9uZXM6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBvYnNlcnZhY2lvbmVzIH0gPSBwYXlsb2FkO1xyXG4gICAgLypcclxuICAgIGlmKCFkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzKXtcclxuICAgICAgICBkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzID0gW107XHJcbiAgICB9XHJcbiAgICB2YXIgdmlzaXRhcyA9IGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXM7XHJcbiAgICB2aXNpdGFzLnB1c2goe1xyXG4gICAgICAgIGZlY2hhOiBkYXRldGltZS5ub3coKS50b1ltZCgpLFxyXG4gICAgICAgIGhvcmE6IGRhdGV0aW1lLm5vdygpLnRvSG0oKSxcclxuICAgICAgICBpZHBlcjogbnVsbCwgLy8gVE9ETzogVkVSIERFIERPTkRFIFNFIFNBQ0EgRUwgSURQRVIgc3RhdGUuZGF0b3MuaWRwZXIsXHJcbiAgICAgICAgb2JzZXJ2YWNpb25lczpvYnNlcnZhY2lvbmVzXHJcbiAgICB9KVxyXG4gICAgKi9cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9tb2RpZmljYXJfdmlzaXRhKHBheWxvYWQ6IHtmb3JQa1JhaXo6Rm9yUGtSYWl6LCBpbmRleDpudW1iZXIsIG9wY2lvbjprZXlvZiBWaXNpdGEgLCB2YWxvcjpzdHJpbmd8bnVsbH0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIGluZGV4LCBvcGNpb24sIHZhbG9yfSA9IHBheWxvYWQ7XHJcbiAgICAvLyB2YXIgdmlzaXRhcyA9IGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXM7XHJcbiAgICAvLyB2aXNpdGFzW2luZGV4XVtvcGNpb25dID0gdmFsb3I7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYm9ycmFyX3Zpc2l0YShwYXlsb2FkOiB7Zm9yUGtSYWl6OkZvclBrUmFpeiwgaW5kZXg6bnVtYmVyfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgaW5kZXh9ID0gcGF5bG9hZDtcclxuICAgIC8vIHZhciB2aXNpdGFzID0gZGF0b3NCeVBhc3MuaG9qYURlUnV0YVt2aXZpZW5kYV0udmlzaXRhcztcclxuICAgIC8vIHZpc2l0YXMuc3BsaWNlKGluZGV4LCAxKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8oe2ZvclBrfToge2ZvclBrOkZvclBrfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIHZhciB7cmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpen0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcywgbnVsbCwge30pXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyh7Zm9yUGt9OiB7Zm9yUGs6Rm9yUGt9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyh7Zm9yUGssIGZvclBrUGFkcmV9OiB7Zm9yUGs6Rm9yUGssIGZvclBrUGFkcmU6Rm9yUGt9KXtcclxuICAgIHZhciB7cmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXN8dW5kZWZpbmVkID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc1xyXG4gICAgdmFyIHVhRGVmOlVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGluZGV4ID0gZm9yUGtbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdW5pZGFkX2FuYWxpc2lzXS5wb3AoKTtcclxuICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrUGFkcmUpO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCB0cnVlO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHRydWU7XHJcbiAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHthdXRvSW5ncmVzbzogdHJ1ZX0pO1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGtQYWRyZSk7XHJcbiAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrUGFkcmUpO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoQnlQYXNzPFQsIFI+KFxyXG4gICAgZnVuOihwYXlsb2FkOlQsIGRhdG9zOnR5cGVvZiBkYXRvc0J5UGFzcyk9PlIsXHJcbiAgICBwYXlsb2FkOlRcclxuKXtcclxuICAgIHJldHVybiBmdW4ocGF5bG9hZCwgZGF0b3NCeVBhc3MpO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCB1bHRpbWFWYXJpYmxlVml2aWVuZGEgPSAnTk9fRVNUQV9ERUZJTklEQV9BVU4vL1RPRE8nIGFzIElkVmFyaWFibGU7XHJcblxyXG5leHBvcnQgY29uc3QgTUFYQ1A9MjA7XHJcblxyXG4vKiBSRURVQ0VSUyAqL1xyXG5cclxudmFyIHJlZW1wbGF6b3NIYWJpbGl0YXI6e1trZXk6c3RyaW5nXTpzdHJpbmd9PXtcclxuICAgIGZhbHNlOiAnZmFsc2UnLFxyXG4gICAgdHJ1ZTogJ3RydWUnLFxyXG4gICAgXCI9XCI6ICc9PScsXHJcbiAgICBcIjw+XCI6ICchPScsXHJcbiAgICBcIiZcIjogJyYmJyxcclxuICAgIFwifFwiOiAnfHwnLFxyXG4gICAgXCJPUlwiOiAnfHwnLFxyXG4gICAgXCJBTkRcIjogJyYmJyxcclxuICAgIFwib3JcIjogJ3x8JyxcclxuICAgIFwiYW5kXCI6ICcmJicsXHJcbiAgICBcIm5vdFwiOiAnIScsXHJcbiAgICBcIk5PVFwiOiAnIScsXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaGVscGVyc0Nhc2lsbGVyb3M9e1xyXG4gICAgbnVsbDJ6ZXJvKHBvc2libGVOdWxsOmFueSl7XHJcbiAgICAgICAgaWYocG9zaWJsZU51bGw9PW51bGwpe1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBvc2libGVOdWxsO1xyXG4gICAgfSxcclxuICAgIGRpdjBlcnIobnVtZXJhZG9yOm51bWJlciwgZGVub21pbmFkb3I6bnVtYmVyLCBwazpzdHJpbmcpe1xyXG4gICAgICAgIGlmKGRlbm9taW5hZG9yPT0wKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZW4gXCIrcGsrXCIgZGl2aXNpb24gcG9yIGNlcm8gZGUgXCIrbnVtZXJhZG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWRvci9kZW5vbWluYWRvcjtcclxuICAgIH0sXHJcbiAgICBmdW5zOntcclxuICAgICAgICBibGFuY28oeDphbnkpe1xyXG4gICAgICAgICAgICByZXR1cm4geCE9PTAgJiYgIXhcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhveSgpe1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZS50b2RheSgpLnRvRG15KClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZlY2hhX3ZhbGlkYSh4OnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbz0vXihbMS05XXwwWzEtOV18WzEyXVxcZHwzWzAxXSlcXC8oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8yMFxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgdmFyIHhEYXRlOiBEYXRlO1xyXG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbk9rOiBib29sZWFuO1xyXG4gICAgICAgICAgICBjb252ZXJzaW9uT2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0b192YWxpZG8pe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2QsIG0sIHldID0geC5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IG5ldyBEYXRlKGAke3l9LyR7bX0vJHtkfWApO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL2ZhbHRhcmlhIHZhbGlkYXIgcXVlIG5vIHNlYSB1bmEgZmVjaGEgZnV0dXJhIHkgcXVlIHNlYSB1bmEgZmVjaGEgZW4gZWwgcmFuZ28gZGVsIG9wZXJhdGl2b1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gJiYgY29udmVyc2lvbk9rXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXNhbmlvX3ZhbGlkbyh4OnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbz0vXihbMS05XXwwWzEtOV18MVswMTJdKVxcLygxOXwyMClcXGRcXGQkLy50ZXN0KHgpXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRvX3ZhbGlkbyBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZm9ybWFkbyh4OmFueSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4IT09dW5kZWZpbmVkICYmIHghPT1udWxsICYmICghKHggaW5zdGFuY2VvZiBBcnJheSl8fCB4Lmxlbmd0aCE9PTAgKVxyXG4gICAgICAgICAgICAmJiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KXx8IE9iamVjdC5rZXlzKHgpLmxlbmd0aCAhPT0gMCApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBuc25jKHg6YW55KXtcclxuICAgICAgICAgICAgcmV0dXJuIHggPT0gLTlcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcih4Om51bWJlcil7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICUgMj09MFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZWRhZF9tZXNfYW5uaW9fdmFsaWRvKGVkYWQ6bnVtYmVyLG1lc0FubmlvOnN0cmluZywgZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZOnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBtZXNlc0RpZmVyZW5jaWEgPSAoZDE6RGF0ZSwgZDI6RGF0ZSk9PntcclxuICAgICAgICAgICAgICAgIHZhciBtb250aHM7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgPSAoZDIuZ2V0RnVsbFllYXIoKSAtIGQxLmdldEZ1bGxZZWFyKCkpICogMTI7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgLT0gZDEuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIG1vbnRocyArPSBkMi5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyA8PSAwID8gMCA6IG1vbnRocztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzUmVhbGl6YWNpb24gPSBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVkuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBkYXRlLnltZChOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMl0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMV0pLE51bWJlcihwYXJ0ZXNSZWFsaXphY2lvblswXSkpXHJcbiAgICAgICAgICAgIHZhciBwYXJ0ZXNNZXNBbm5pbyA9ICBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNNZXNBbm5pb1sxXSksIE51bWJlcihwYXJ0ZXNNZXNBbm5pb1swXSksMSlcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIFJlYWxEYXRlIGVzIERhdGUgeSBzZSBwdWVkZSByZXN0YXJcclxuICAgICAgICAgICAgdmFyIGRpZmVyZW5jaWFNZXNlcyA9IG1lc2VzRGlmZXJlbmNpYShuYWNpbWllbnRvLHRvZGF5KTtcclxuICAgICAgICAgICAgdmFyIGVkYWREZWNpbWFsZXMgPSBkaWZlcmVuY2lhTWVzZXMvMTI7IC8vZWogMzYuNVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgTWF0aC5mbG9vcihlZGFkRGVjaW1hbGVzKSA9PSBlZGFkIHx8IC8vbWlzbWEgZWRhZFxyXG4gICAgICAgICAgICAgICAgZWRhZERlY2ltYWxlcyA9PSBlZGFkICsgMSAvL21lcyBkZSB0b2xlcmFuY2lhXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vY29waWFyX2NhbXBvX3VhX3JhbWEocmVzcHVlc3Rhc09yaWdlbjpSZXNwdWVzdGFzW10sIHBvc2ljaW9uOm51bWJlciwgdmFyaWFibGVPcmlnZW46IElkVmFyaWFibGUsIGNhbWlubzpzdHJpbmcsIGNvbmRpY2lvbjpib29sZWFuKXtcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uPyhyZXNwdWVzdGFzT3JpZ2VuICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV0gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXVtgJHtjYW1pbm99YF1bdmFyaWFibGVPcmlnZW5dKTpudWxsXHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj9ldmFsKGByZXNwdWVzdGFzT3JpZ2VuWyR7cG9zaWNpb24tMX1dLmArY2FtaW5vKycuJyt2YXJpYWJsZU9yaWdlbik6bnVsbDtcclxuICAgICAgICAvL31cclxuICAgICAgICAvKlxyXG4gICAgICAgIGRibzp7XHJcbiAgICAgICAgICAgIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsIGRhdG86c3RyaW5nKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgaW5mb3JtYWRvKHhwZXJzb25hcykgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdW2RhdG9dPyB4cGVyc29uYXNbcGVyLTFdW2RhdG9dOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZWRhZGZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ2VkYWQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVpbmRpdmlkdWFsKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXBlcnNvbmFzW3Blci0xXVsnZW50cmVhaW5kJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlbWllbWJybyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvY29ueXVnZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzXHJcbiAgICAgICAgICAgICAgICByZXR1cm4geHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTIpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9qZWZlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTEpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYXJlbnRlc2NvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdwNCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNleG9mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXhwZXJzb25hcyAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV0uc2V4bz8geHBlcnNvbmFzW3Blci0xXVsnc2V4byddOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2l0Y29ueWplZmUoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIsMSwncDUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAqLyAgICAgICBcclxuICAgIH1cclxufTtcclxuXHJcbnR5cGUgRnVuY2lvbkhhYmlsaXRhciA9ICh2YWxvcmVzOntba2V5OnN0cmluZ106YW55fSk9PmJvb2xlYW47XHJcbnR5cGUgRnVuY2lvblZhbG9yYXIgPSAodmFsb3Jlczp7W2tleTpzdHJpbmddOmFueX0pPT5hbnk7XHJcbnZhciBmdW5jaW9uZXNIYWJpbGl0YXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uSGFiaWxpdGFyfT17XHJcbn1cclxudmFyIGZ1bmNpb25lc1ZhbG9yYXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uVmFsb3Jhcn09e1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWluaUNvbXBpbGFkb3JTUWxKcyhleHByZXNpb25DYXNpU1FMOnN0cmluZyl7XHJcbiAgICB2YXIgZXhwcmVzaW9uID0gZXhwcmVzaW9uQ2FzaVNRTC5yZXBsYWNlKC9cXHUwMEEwL2csJyAnKTtcclxuICAgIHZhciBjdWVycG8gPSBleHByZXNpb24ucmVwbGFjZSgvXFxiaXMgZGlzdGluY3QgZnJvbVxcYi9naSwnIT0nKS5yZXBsYWNlKC9cXGIuKz9cXGIvZywgZnVuY3Rpb24oZWxUb2tlbil7XHJcbiAgICAgICAgdmFyIGVsVG9rZW5UcmltZWFkbz1lbFRva2VuLnRyaW0oKTtcclxuICAgICAgICBpZihlbFRva2VuVHJpbWVhZG8gaW4gcmVlbXBsYXpvc0hhYmlsaXRhcil7XHJcbiAgICAgICAgICAgIHJldHVybiByZWVtcGxhem9zSGFiaWxpdGFyW2VsVG9rZW5UcmltZWFkb107XHJcbiAgICAgICAgfWVsc2UgaWYoL15cXGQrXFwuP1xcZCokLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpe1xyXG4gICAgICAgICAgICByZXR1cm4gZWxUb2tlblxyXG4gICAgICAgIH1lbHNlIGlmKC9eXFxXKyQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfWVsc2UgaWYoL15cXHMrJC8udGVzdChlbFRva2VuKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnaGVscGVycy5udWxsMnplcm8odmFsb3Jlcy4nK2VsVG9rZW4rJyknO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY3VlcnBvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY2lvbkNvbXBpbGFkYTxUPihjb25qdW50b0RlRnVuY2lvbmVzOntba2V5OnN0cmluZ106KHZhbG9yZXM6e1trZXk6c3RyaW5nXTphbnl9KT0+VH0pe1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM6c3RyaW5nKXtcclxuICAgICAgICBpZighY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSl7XHJcbiAgICAgICAgICAgIHZhciBjdWVycG8gPSBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgY3VlcnBvID0gbWluaUNvbXBpbGFkb3JTUWxKcyhub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKTtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbEZ1biA9ICBuZXcgRnVuY3Rpb24oJ3ZhbG9yZXMnLCAnaGVscGVycycsICdyZXR1cm4gJytjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSA9IGZ1bmN0aW9uKHZhbG9yZXMpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVybmFsRnVuKHZhbG9yZXMsIGhlbHBlcnNDYXNpbGxlcm9zKTtcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIEVKRUNVQ0NJT04gRVhQUkVTSU9OIEVYVEVSTkEgJyxub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWxvcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBDT01QSUxBQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvbkhhYmlsaXRhciA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzSGFiaWxpdGFyKTtcclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25WYWxvcmFyICAgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc1ZhbG9yYXIpO1xyXG5cclxuXHJcbnZhciByb3dWYWxpZGF0b3IgPSBnZXRSb3dWYWxpZGF0b3I8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPih7Z2V0RnVuY2lvbkhhYmlsaXRhciwgZ2V0RnVuY2lvblZhbG9yYXJ9KVxyXG5leHBvcnQgdmFyIGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzID0gKHVuaWRhZGVzQVJlY29ycmVyUHJtOklkVW5pZGFkQW5hbGlzaXNbXSx1bmlkYWRBbmFsaXNpczpVbmlkYWRBbmFsaXNpcywgcmVzcHVlc3RhczpSZXNwdWVzdGFzLG5vUmVhc1RhcmVhOnt9W10sbm9tYk5vUmVhOnN0cmluZylcclxuOntucmNvZGlnbzpzdHJpbmd8bnVsbCwgZXN2YWxvcjpib29sZWFufT0+e1xyXG4gICAgdmFyIG5yY29kaWdvOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgdmFyIGVzdmFsb3I9ZmFsc2U7XHJcbiAgICB2YXIgcnZhbG9yOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgICB2YXIgcnZhcmlhYmxlOnN0cmluZztcclxuICAgIHZhciBybm9yZWE6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgLy8gdmFyIHJlc3VsdD17bnJjb2Q6U3RyaW5nLCBlc3ZhbDpCb29sZWFufTtcclxuICAgIGlmKHVuaWRhZGVzQVJlY29ycmVyUHJtLmluY2x1ZGVzKHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcykpe1xyXG4gICAgICAgIGZvcihsZXQgbm9SZWEgb2Ygbm9SZWFzVGFyZWEpeyAvL2VzdHJ1Y3R1cmEubm9SZWFzLCBlc3RydWN0dXJhLm5vUmVhc1N1cFxyXG4gICAgICAgICAgICBpZiAobm9tYk5vUmVhPT0nbm9fcmVhJyl7XHJcbiAgICAgICAgICAgICAgICB2YXIge3ZhcmlhYmxlICwgdmFsb3IsIG5vX3JlYX0gPSBub1JlYTtcclxuICAgICAgICAgICAgICAgIHJub3JlYT1ub19yZWE7XHJcbiAgICAgICAgICAgICAgICBydmFsb3I9dmFsb3I7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGU9dmFyaWFibGU7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdmFyIHt2YXJpYWJsZV9zdXAgLCB2YWxvcl9zdXAsIG5vX3JlYV9zdXB9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWE9bm9fcmVhX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YWxvcj12YWxvcl9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGU9dmFyaWFibGVfc3VwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbcnZhcmlhYmxlIGFzIElkVmFyaWFibGVdPT1ydmFsb3Ipe1xyXG4gICAgICAgICAgICAgICAgbnJjb2RpZ28gPXJub3JlYTsgIC8vbm9fcmVhLCBub19yZWFfc3VwXHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7bnJjb2RpZ28sZXN2YWxvcn1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbz1udWxsO1xyXG4gICAgICAgICAgICAgICAgZXN2YWxvcj1mYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvcihsZXQgdWEgb2YgKGxpa2VBcih1bmlkYWRBbmFsaXNpcz8uaGlqYXMpLmFycmF5KCkpKXtcclxuICAgICAgICBpZih1YT8udW5pZGFkX2FuYWxpc2lzICYmIHJlc3B1ZXN0YXNbdWEudW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KXtcclxuICAgICAgICAgICAgZm9yKGxldCByZXNwdWVzdGFzSGlqYXMgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1t1YT8udW5pZGFkX2FuYWxpc2lzXSA/PyBbXSkpe1xyXG4gICAgICAgICAgICAgICBsZXQgcmVzdWx0PSBidXNjYXJOb1JlYUVuUmVzcHVlc3Rhcyh1bmlkYWRlc0FSZWNvcnJlclBybSx1YSxyZXNwdWVzdGFzSGlqYXMsbm9SZWFzVGFyZWEsbm9tYk5vUmVhKTtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5lc3ZhbG9yICl7XHJcbiAgICAgICAgICAgICAgICAgICAgbnJjb2RpZ289cmVzdWx0Lm5yY29kaWdvO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3I9cmVzdWx0LmVzdmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtucmNvZGlnbyxlc3ZhbG9yfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvPW51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvcj1mYWxzZTtcclxuICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB7bnJjb2RpZ28sIGVzdmFsb3J9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge25yY29kaWdvLCBlc3ZhbG9yfVxyXG4gfVxyXG5cclxuXHJcblxyXG5leHBvcnQgdmFyIGRlZk9wZXJhdGl2bzpEZWZPcGVyYXRpdm8gPSB7XHJcbiAgICBlc05vUmVhOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzTm9SZWEgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kTm9SZWE6c3RyaW5nfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2ROb1JlYSwgZXNOb1JlYX07XHJcbiAgICB9LFxyXG4gICBlc05vUmVhU3VwOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzTm9SZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kTm9SZWFTdXA6c3RyaW5nfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2ROb1JlYVN1cCxlc05vUmVhU3VwfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYTpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZFJlYSxlc1JlYX1cclxuICAgIH0sXHJcbiAgICBlc1JlYWxpemFkYVN1cDooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2RSZWFTdXA6bnVtYmVyfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2RSZWFTdXAsZXNSZWFTdXB9XHJcbiAgICB9LFxyXG4gICAgVUFwcmluY2lwYWw6JycgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIGRlZlVBOnt9IGFzIHtbaSBpbiBJZFVuaWRhZEFuYWxpc2lzXTp7cGs6SWRWYXJpYWJsZSwgaW5jbHVpZGFzOklkVW5pZGFkQW5hbGlzaXNbXSwgaWRzRm9yOklkRm9ybXVsYXJpb1tdfX0sXHJcbiAgICBkZWZGb3I6e30gYXMge1tmIGluIElkRm9ybXVsYXJpb106ey8qYXJib2xVQTpJZFVuaWRhZEFuYWxpc2lzW10sICovIGhlcm1hbm8/OnRydWV9fVxyXG59XHJcbi8vLy8vIEFCQUpPIGRlIGVzdGEgbMOtbmVhIG5vIHB1ZWRlIGhhYmVyIG90cm9zIG5vbWJyZXMgZGUgdmFyaWFibGVzIG8gZm9ybXVsYXJpb3MgbyBjYXNpbGxlcm9zIGVuIGdlbmVyYWxcclxuXHJcbmV4cG9ydCB2YXIgc2V0Q2FsY3Vsb1JlYU5vUmVhID0gKFxyXG4gICAgZXNOb1JlYToocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2ROb1JlYTpzdHJpbmd8bnVsbCwgZXNOb1JlYTpib29sZWFufSxcclxuICAgIGVzTm9SZWFTdXA6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kTm9SZWFTdXA6c3RyaW5nfG51bGwsIGVzTm9SZWFTdXA6Ym9vbGVhbn0sXHJcbiAgICBlc1JlYWxpemFkYToocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IHtjb2RSZWE6bnVtYmVyfG51bGwsIGVzUmVhOmJvb2xlYW59LFxyXG4gICAgZXNSZWFsaXphZGFTdXA6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kUmVhU3VwOm51bWJlcnxudWxsLCBlc1JlYVN1cDpib29sZWFufVxyXG4pPT57XHJcbiAgICBkZWZPcGVyYXRpdm8gPSB7XHJcbiAgICAgICAgLi4uZGVmT3BlcmF0aXZvLFxyXG4gICAgICAgIGVzTm9SZWEsXHJcbiAgICAgICAgZXNOb1JlYVN1cCxcclxuICAgICAgICBlc1JlYWxpemFkYSxcclxuICAgICAgICBlc1JlYWxpemFkYVN1cFxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG50eXBlIFBlcnNvbmE9e3AxOnN0cmluZywgcDI6bnVtYmVyLCBwMzpudW1iZXIsIHA0Om51bWJlcnxudWxsLCBwNToxfG51bGwsIHA2OjF8bnVsbH1cclxuXHJcbmZ1bmN0aW9uIG51bShudW06bnVtYmVyfHN0cmluZ3xudWxsKTpudW1iZXJ7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICBpZihpc05hTihudW0tMCkpIHJldHVybiAwO1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIGdyYWNpYSBlcyBtZXRlciBudW0gY3VhbmRvIGVzIHN0cmluZ1xyXG4gICAgcmV0dXJuIG51bS0wO1xyXG59XHJcblxyXG52YXIgZnVuY2lvbmVzQ29ub2NpZGFzOntbayBpbiBzdHJpbmddOmJvb2xlYW59ID0ge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZmljYXJTb3J0ZW8ob3B0czp7XHJcbiAgICBjb25maWd1cmFjaW9uU29ydGVvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcyxcclxuICAgIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpelxyXG4gICAgZm9yUGs6Rm9yUGssXHJcbiAgICB2YXJpYWJsZUFjdHVhbDpJZFZhcmlhYmxlXHJcblxyXG59KXtcclxuICAgIGNvbnN0IHJlc2V0ZWFyU29ydGVvID0gKG9wdHM6e3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhc30pPT57XHJcbiAgICAgICAgdmFyIHtyZXNwdWVzdGFzfSA9IG9wdHM7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb109bnVsbDtcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc109bnVsbDtcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gPSBudWxsO1xyXG4gICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8uc29ydGVhZG9fbW9zdHJhcj8uZm9yRWFjaCgobW9zdHJhcik9PnJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdPW51bGwpO1xyXG4gICAgICAgIGlmKCd2YXJfbGV0cmEnIGluIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvKXtcclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gJiYgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgICAgICBmb3IodmFyIHBlciBvZiBpdGVyYXRvcihyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSkpe1xyXG4gICAgICAgICAgICAgICAgICAgIHBlcltjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfbGV0cmFdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIge2NvbmZpZ3VyYWNpb25Tb3J0ZW8sIHZhcmlhYmxlQWN0dWFsLCByZXNwdWVzdGFzLCBmb3JQaywgcmVzcHVlc3Rhc1JhaXp9ID0gb3B0cztcclxuICAgIHZhciBpZEVuYyA9IGZvclBrLnZpdmllbmRhITtcclxuICAgIHZhciB7cmVzcHVlc3Rhc0F1bWVudGFkYXN9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlKTtcclxuICAgIHZhciBleHByX2luY29tcGxldGl0dWRfZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmV4cHJfaW5jb21wbGV0aXR1ZF9qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pb10uZXhwcik7XHJcbiAgICB2YXIgZmlsdHJvX2Z1biA9ICBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZmlsdHJvX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvXS5leHByKTtcclxuICAgIHZhciB1bmlkYWRBbmFsaXNpcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8udW5pZGFkX2FuYWxpc2lzO1xyXG5cclxuICAgIGlmKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5pbmNsdWRlcyh2YXJpYWJsZUFjdHVhbCkpe1xyXG4gICAgICAgIHZhciB1YVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+dWEudW5pZGFkX2FuYWxpc2lzPT11bmlkYWRBbmFsaXNpcyk/LnBhZHJlO1xyXG4gICAgICAgIHZhciBwa0FncmVnYWRhUGFkcmUgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEpPT51YS51bmlkYWRfYW5hbGlzaXM9PXVhUGFkcmUpPy5wa19hZ3JlZ2FkYVxyXG4gICAgICAgIGlmKHVhUGFkcmUgJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV0pe1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgdmFyIHBhZHJlID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV1bTnVtYmVyKHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3BrQWdyZWdhZGFQYWRyZV0pLTFdO1xyXG4gICAgICAgICAgICBpZih2YXJpYWJsZUFjdHVhbCAhPSBjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsKXtcclxuICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPXBhZHJlW3VuaWRhZEFuYWxpc2lzXS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNldGVhclNvcnRlbyh7cmVzcHVlc3RhczpwYWRyZX0pO1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gIT0gbnVsbCl7XHJcbiAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgIHZhciByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBhcyBSZXNwdWVzdGFzW11cclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdIT0xKXtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXT09Mil7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXT1yZXNwdWVzdGFzVUEubGVuZ3RoICsgMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oe3Jlc3B1ZXN0YXN9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgY2FudGlkYWRUb3RhbCA9IE51bWJlcihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdKTtcclxuICAgICAgICAgICAgaWYoY2FudGlkYWRUb3RhbDxyZXNwdWVzdGFzVUEubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIC8vIGRvYmxlIGFzaWduYWNpw7NuIHBhcmEgcXVlIGxvIGNhcmd1ZSBlbiByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzVUEuZmlsdGVyKChwLGkpPT5cclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtZXRyb3Muc29tZSgocGFyYW0pPT5wW3BhcmFtXSB8fCBpIDw9IGNhbnRpZGFkVG90YWwtMSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSA9IHJlc3B1ZXN0YXNVQVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlKGNhbnRpZGFkVG90YWw+cmVzcHVlc3Rhc1VBLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEucHVzaCh7fSBhcyBSZXNwdWVzdGFzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdID0gcmVzcHVlc3Rhc1VBLmZpbHRlcihwPT5leHByX2luY29tcGxldGl0dWRfZnVuKHApKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciB2YXIkcDAgPSBcIiRwMFwiIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdPT0xICYmXHJcbiAgICAgICAgICAgICAgICAhcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gJiZcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5pbmNvbXBsZXRhc109PTBcclxuICAgICAgICAgICAgKXtcclxuICAgICAgICAgICAgICAgIHZhciBzb3J0ZWFyPXJlc3B1ZXN0YXNVQS5maWx0ZXIocD0+ZmlsdHJvX2Z1bihwKSk7XHJcbiAgICAgICAgICAgICAgICBpZihzb3J0ZWFyLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZvckVhY2goKHBlciwgaSk9PnBlclt2YXIkcDBdPWkrMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5vcmRlbi5wdXNoKHt2YXJpYWJsZTp2YXIkcDAsIG9yZGVuOjF9KTtcclxuICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNvcnQoY29tcGFyZUZvck9yZGVyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ubWFwKGVsZW0gPT4gKHtjb2x1bW46ZWxlbS52YXJpYWJsZSwgb3JkZXI6ZWxlbS5vcmRlbn0pKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpY2lvblNvcnRlYWRhID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLm1ldG9kbz09J2hhc2gnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOTyBJTVBMRU1FTlRBRE8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLypwb3NpY2lvblNvcnRlYWRhPShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9jb2VmLnJlZHVjZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN1bSwgcGFpcik9PnN1bSArIGRhdG9zVml2aWVuZGEudGVtW3BhaXIudmFyXSAqIHBhaXIuY29lZiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAlIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLmRpdmlzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSAlIHNvcnRlYXIubGVuZ3RoKi9cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldHJhID0gJ0EnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJMZXRyYTpJZFZhcmlhYmxlID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udmFyX2xldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIHBlcnNvbmEgb2Ygc29ydGVhcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEuZmluZCgoX3BlcixpKT0+aT09cGVyc29uYVt2YXIkcDBdIGFzIG51bWJlciAtIDEpIVt2YXJMZXRyYV0gPSBsZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbmFbdmFyTGV0cmFdPWxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0cmEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxldHJhLmNoYXJDb2RlQXQoMCkrMSk7ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxhQWxlYXRvcmlhTWllbWJyb3MgPSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby50YWJsYS5tYXAoKGxpc3RhKT0+bGlzdGEuc3BsaXQoJycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RvID0gaWRFbmMgJSAxMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbmFUYWJsYUFsZWF0b3JpYSA9IHJlc3RvP3Jlc3RvIC0gMTo5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzb3J0ZWFyLmxlbmd0aCA+IHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlYXIuc3BsaWNlKHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKSAvL2Rlc2NhcnRvIGNhbmRpZGF0b3Mgc2kgc29uIG3DoXMgcXVlIGxvIHF1ZSBwZXJtaXRlIGxhIHRhYmxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGFUYWJsYUFsZWF0b3JpYSA9IHNvcnRlYXIubGVuZ3RoIC0gMSA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYVNlbGVjY2lvbmFkYSA9IHRhYmxhQWxlYXRvcmlhTWllbWJyb3NbZmlsYVRhYmxhQWxlYXRvcmlhXVtjb2x1bW5hVGFibGFBbGVhdG9yaWFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpY2lvblNvcnRlYWRhID0gcmVzcHVlc3Rhc1VBLmZpbmRJbmRleCgocDpSZXNwdWVzdGFzKT0+cFt2YXJMZXRyYV09PWxldHJhU2VsZWNjaW9uYWRhKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dPXBvc2ljaW9uU29ydGVhZGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT1zb3J0ZWFyLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XT1yZXNwdWVzdGFzVUFbcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gYXMgbnVtYmVyIC0xXVttb3N0cmFyLnNvdXJjZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT0wO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09IHJlc3B1ZXN0YXNVQS5sZW5ndGggfHwgbnVsbDsgLy9ubyBxdWVyZW1vcyBlbCB2YWxvciAwXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBXT0nb2snO1xyXG4gICAgICAgICAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbF09J29rJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKXtcclxuICAgIGlmKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMpe1xyXG4gICAgICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIH1cclxuICAgIGlmKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byl7XHJcbiAgICAgICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICBmb3JtdWxhcmlvczp7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106SW5mb0Zvcm11bGFyaW8gfSwgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIFxyXG4gICAgVUE6SWRVbmlkYWRBbmFsaXNpcywgXHJcbiAgICBmb3JQazpGb3JQayxcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsIC8vIGluY2x1eWVuIGxhIGRlIHRvZG9zIGxvcyBwYWRyZXMgeSBhbnNlc3Ryb3MsXHJcbiAgICByZXNwdWVzdGFzUGFkcmU6UmVzcHVlc3Rhc3xudWxsLCBcclxuICAgIG9wdHM6T3BjaW9uZXNSb3dWYWxpZGF0b3IsXHJcbil7XHJcbiAgICAvLyByZWNvcnJpZW5kIFVBIHBlcnNvbmFzIHkgbWFzY290YXNcclxuICAgIGZvcih2YXIgVUFpbmNsdWlkYSBvZiBkZWZPcGVyYXRpdm8uZGVmVUFbVUFdLmluY2x1aWRhcyl7XHJcbiAgICAgICAgdmFyIHBrTnVldmEgPSBkZWZPcGVyYXRpdm8uZGVmVUFbVUFpbmNsdWlkYV0ucGs7XHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1tVQWluY2x1aWRhXTtcclxuICAgICAgICBsaWtlQXIoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXNIaWpvLCB2YWxvclBrT1Bvc2ljaW9uKT0+e1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yLCBcclxuICAgICAgICAgICAgICAgIGZvcm11bGFyaW9zLCBcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNIaWpvLCBcclxuICAgICAgICAgICAgICAgIFVBaW5jbHVpZGEsIFxyXG4gICAgICAgICAgICAgICAgey4uLmZvclBrLCBbcGtOdWV2YV06dmFsb3JQa30sXHJcbiAgICAgICAgICAgICAgICB7Li4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXNIaWpvLCBbcGtOdWV2YV06dmFsb3JQa30sXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvLyBTMSAsIEExXHJcbiAgICBmb3IodmFyIGVzSGVybWFubyBvZiBbdHJ1ZSwgZmFsc2VdKXtcclxuICAgICAgICBmb3IodmFyIGZvcm11bGFyaW8gb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pZHNGb3IpIGlmKCEhZXNIZXJtYW5vID09ICEhZGVmT3BlcmF0aXZvLmRlZkZvcltmb3JtdWxhcmlvXS5oZXJtYW5vKXtcclxuICAgICAgICAgICAgdmFyIHBsYWluRm9yUGs6UGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayh7Li4uZm9yUGssIGZvcm11bGFyaW99KVxyXG4gICAgICAgICAgICB2YXIgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcyA9IDEwO1xyXG4gICAgICAgICAgICB2YXIgdmFyQXV0b0luZ3Jlc2FkYXMgPSBbXTtcclxuICAgICAgICAgICAgZG97XHJcbiAgICAgICAgICAgICAgICB2YXIgaHVib0F1dG9pbmdyZXNvcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa109XHJcbiAgICAgICAgICAgICAgICAgICAgcm93VmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7bWFyY2FGaW46J2ZpbicsIC4uLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3J9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB2YXIge3Jlc3VtZW4sIGF1dG9JbmdyZXNhZGFzfSA9IGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhck5hbWU6SWRWYXJpYWJsZTtcclxuICAgICAgICAgICAgICAgIGlmKGF1dG9JbmdyZXNhZGFzIT1udWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3IodmFyTmFtZSBpbiBhdXRvSW5ncmVzYWRhcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW1iaW8gPSByZXNwdWVzdGFzW3Zhck5hbWVdICE9PSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FtYmlvKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5wdXNoKHZhck5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVib0F1dG9pbmdyZXNvcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gd2hpbGUoaHVib0F1dG9pbmdyZXNvcyAmJiBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzLS0+MCk7XHJcbiAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLmZvckVhY2godmFybmFtZT0+e1xyXG4gICAgICAgICAgICAgICAgLy8gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa10uZXN0YWRvc1t2YXJuYW1lIGFzIElkVmFyaWFibGVdID0gJ2FjdHVhbCc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHZhciBCRl92YXJuYW1lID0gJyRCLicrZm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIHZhciBmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGEgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrLnZpdmllbmRhISk7XHJcbiAgICAgICAgICAgIGlmKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gaGF5IGNvbmZpZ3VyYWNpb24gZGUgc29ydGVvIHBhcmEgZWwgZm9ybXVsYXJpbyAke2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYX1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXTtcclxuICAgICAgICAgICAgdmFyIHJlc3VtZW5Pck51bGwgPSBcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgJiYgXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsID09IEJGX3Zhcm5hbWU/XHJcbiAgICAgICAgICAgICAgICAgICAgJ29rJ1xyXG4gICAgICAgICAgICAgICAgOnJlc3VtZW4gPT0gJ3ZhY2lvJyA/IFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgIDpyZXN1bWVuXHJcbiAgICAgICAgICAgIGlmKGVzSGVybWFubyl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfWVsc2UgaWYocmVzcHVlc3Rhc1BhZHJlICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1BhZHJlW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShudW1iZXJPclN0cmluZzpudW1iZXJ8c3RyaW5nLCBvYmplY3Q6b2JqZWN0fGFueVtdKToobnVtYmVyfHN0cmluZyl7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzdG95IHVzYW5kbyBpc05hTiBwYXJhIHZlciBzaSBlcyBvIG5vIHVuIG7Dum1lcm8gc3VtYWJsZVxyXG4gICAgaWYoaXNOYU4obnVtYmVyT3JTdHJpbmcpKXtcclxuICAgICAgICByZXR1cm4gbnVtYmVyT3JTdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTnVtYmVyKG51bWJlck9yU3RyaW5nKSsob2JqZWN0IGluc3RhbmNlb2YgQXJyYXk/MTowKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRNYWluRm9ybUZvclZpdmllbmRhID0gKHZpdmllbmRhOm51bWJlcik6SWRGb3JtdWxhcmlvPT57XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgdml2aWVuZGEgZXMgZWwgcGFyYW1ldHJvIGNvcnJlY3RvXHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbdml2aWVuZGFdLnRhcmVhLm1haW5fZm9ybVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKXtcclxuICAgIGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maWx0ZXIodWFEZWY9PiF1YURlZi5wYWRyZSkuZm9yRWFjaCh1YURlZj0+e1xyXG4gICAgICAgIHZhciBlc1ByaW5jaXBhbCA9IChmOkZvcm11bGFyaW8sIGVuYzphbnkpPT4ge1xyXG4gICAgICAgICAgICBsZXQgZm9ybXVsYXJpb1ByaW5jaXBhbCA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZW5jKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm11bGFyaW9QcmluY2lwYWw/Zm9ybXVsYXJpb1ByaW5jaXBhbD09Zi5pZF9jYXNpbGxlcm86Zi5mb3JtdWxhcmlvX3ByaW5jaXBhbFxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW3VhRGVmLnVuaWRhZF9hbmFsaXNpc11cclxuICAgICAgICBiZWluZ0FycmF5KGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzLCB2YWxvclBrT1Bvc2ljaW9uKT0+e1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5maWx0ZXIoZj0+Zi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YURlZi51bmlkYWRfYW5hbGlzaXMgJiYgZXNQcmluY2lwYWwoZi5jYXNpbGxlcm9zLCB2YWxvclBrIGFzIG51bWJlcikpLmZvckVhY2goKF9kZWZGLCBmb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvclBrUmFpeiA9IHtmb3JtdWxhcmlvLCBbdWFEZWYucGtfYWdyZWdhZGFdOnZhbG9yUGt9IGFzIEZvclBrUmFpelxyXG4gICAgICAgICAgICAgICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzLCBmb3JQa1JhaXosIHt9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICBmb3JtdWxhcmlvczp7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106SW5mb0Zvcm11bGFyaW8gfSwgXHJcbiAgICBmb3JQa1JhaXo6IEZvclBrUmFpeiwgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIFxyXG4gICAgb3B0czpPcGNpb25lc1Jvd1ZhbGlkYXRvclxyXG4pe1xyXG4gICAgdmFyIGZvclBrOkZvclBrID17Li4uZm9yUGtSYWl6fTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhmZWVkYmFja1Jvd1ZhbGlkYXRvciwgZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIGRlZk9wZXJhdGl2by5VQXByaW5jaXBhbCwgZm9yUGssIHJlc3B1ZXN0YXMsIG51bGwsIG9wdHMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsIGZvclBrUmFpejpGb3JQa1JhaXosIG9wdHM6T3BjaW9uZXNSb3dWYWxpZGF0b3Ipe1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG86UmVzdW1lbkVzdGFkbztcclxuICAgIC8vIEB0cy1pZ25vcmUgUGFydGlhbFxyXG4gICAgdmFyIG51ZXZvc1Jvd3MgOiB7W3ggaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsSWRGaW4+fT17fVxyXG4gICAgY2FsY3VsYXJGZWVkYmFja0VuY3Vlc3RhKG51ZXZvc1Jvd3MsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIGZvclBrUmFpeiwgcmVzcHVlc3Rhcywgb3B0cyk7XHJcbiAgICBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGxpa2VBcihkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcikuZmlsdGVyKChfZmVlZGJhY2s6YW55LCBwbGFpblBrOlBsYWluRm9yUGspPT5KU09OLnBhcnNlKHBsYWluUGspLnZpdmllbmRhICE9IGZvclBrUmFpei52aXZpZW5kYSkucGxhaW4oKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0gey4uLmRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCAuLi5udWV2b3NSb3dzfTtcclxuICAgIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMudml2aWVuZGFzW2ZvclBrUmFpei52aXZpZW5kYSFdID0ge1xyXG4gICAgICAgIC4uLmRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMudml2aWVuZGFzW2ZvclBrUmFpei52aXZpZW5kYSFdLFxyXG4gICAgICAgIC4uLmNhbGN1bGFyUmVzdW1lblZpdmllbmRhKFxyXG4gICAgICAgICAgICBmb3JQa1JhaXosIFxyXG4gICAgICAgICAgICBudWV2b3NSb3dzLFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzXHJcbiAgICAgICAgKVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRGb3JtdWxhcmlvc0ZvcklkVml2aWVuZGEgPSAoaWRWaXZpZW5kYTpudW1iZXIpPT57XHJcbiAgICB2YXIgbWFpbkZvcm1Gb3JWaXZpZW5kYSA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoaWRWaXZpZW5kYSk7XHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IFttYWluRm9ybUZvclZpdmllbmRhXTtcclxuICAgIHZhciBidXNjYXJGb3JtdWxhcmlvc0hpam9zID0gKGlkRm9ybXVsYXJpbzpJZEZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9dLmNhc2lsbGVyb3MuY2FzaWxsZXJvcy5mb3JFYWNoKChjYXNpbGxlcm8pPT57XHJcbiAgICAgICAgICAgIGlmKGNhc2lsbGVyby50aXBvYyA9PSAnQkYnKXtcclxuICAgICAgICAgICAgICAgIHZhciBmb3JtSGlqbyA9IChjYXNpbGxlcm8uc2FsdG8/LnN0YXJ0c1dpdGgoJ0Y6Jyk/Y2FzaWxsZXJvLnNhbHRvOidGOicgKyBjYXNpbGxlcm8uc2FsdG8pIGFzIElkRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgIGlmKGZvcm1IaWpvKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLnB1c2goZm9ybUhpam8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MoZm9ybUhpam8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MobWFpbkZvcm1Gb3JWaXZpZW5kYSk7XHJcbiAgICByZXR1cm4gZm9ybXNGZWVkYmFjaztcclxufVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhckFjdHVhbEJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgbnVtRWxlbWVudG9VQTogbnVtYmVyLCBudW1BY3R1YWw6bnVtYmVyfG51bGwsIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvLCByOlJlc3B1ZXN0YXMpPT5cclxuICAgICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCAmJlxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpb1xyXG4gICAgPyBcclxuICAgICAgICBudW1FbGVtZW50b1VBID09IGNvYWxlc2NlKFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgKVxyXG4gICAgOlxyXG4gICAgICAgIG51bUFjdHVhbCA9PSBudW1FbGVtZW50b1VBXHJcbiAgICApXHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyRGlzYWJsZWRCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsIG51bUVsZW1lbnRvVUE6IG51bWJlciwgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8sIHI6UmVzcHVlc3Rhcyk9PlxyXG4gICAgISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8gJiZcclxuICAgIG51bUVsZW1lbnRvVUEgIT0gY29hbGVzY2UoXHJcbiAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb19tYW51YWxdLFxyXG4gICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICApKVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvKT0+XHJcbiAgICAhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvKVxyXG5cclxudHlwZSBSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgcmVzdW1lbkVzdGFkbzpSZXN1bWVuRXN0YWRvLFxyXG4gICAgcmVzdW1lbkVzdGFkb1N1cDpSZXN1bWVuRXN0YWRvLFxyXG4gICAgY29kUmVhOm51bWJlcnxudWxsLFxyXG4gICAgY29kTm9SZWE6c3RyaW5nfG51bGwsXHJcbiAgICBjb2RSZWFTdXA6bnVtYmVyfG51bGxcclxuICAgIGNvZE5vUmVhU3VwOnN0cmluZ3xudWxsLFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoXHJcbiAgICBmb3JQa1JhaXo6Rm9yUGtSYWl6LCBcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0sIFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzXHJcbik6UmVzdWx0YWRvUmVzdW1lbntcclxuICAgIHZhciB7Y29kUmVhLCBlc1JlYX0gPSBkZWZPcGVyYXRpdm8uZXNSZWFsaXphZGEocmVzcHVlc3RhcylcclxuICAgIHZhciB7Y29kTm9SZWEsIGVzTm9SZWF9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWEocmVzcHVlc3RhcylcclxuICAgIHZhciB7Y29kUmVhU3VwLGVzUmVhU3VwfSA9IGRlZk9wZXJhdGl2by5lc1JlYWxpemFkYVN1cChyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHtjb2ROb1JlYVN1cCwgZXNOb1JlYVN1cH0gPSBkZWZPcGVyYXRpdm8uZXNOb1JlYVN1cChyZXNwdWVzdGFzKVxyXG4gICAgdmFyIGZvcm1zRmVlZGJhY2sgPSBnZXRGb3JtdWxhcmlvc0ZvcklkVml2aWVuZGEoZm9yUGtSYWl6LnZpdmllbmRhISk7XHJcbiAgICB2YXIgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrUmFpei52aXZpZW5kYSEpXVxyXG4gICAgdmFyIGZlZWRCYWNrVml2aWVuZGEgPSBsaWtlQXIoZmVlZGJhY2tSb3dWYWxpZGF0b3IpLmZpbHRlcigoX3JvdywgcGxhaW5Qayk9PntcclxuICAgICAgICB2YXIgdGllbmVJbmRpdmlkdWFsID0gY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gJiYgISEoY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUpXHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocGxhaW5Qaykudml2aWVuZGE9PWZvclBrUmFpei52aXZpZW5kYSAmJiBcclxuICAgICAgICAgICAgZm9ybXNGZWVkYmFjay5pbmNsdWRlcyhKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8pICYmXHJcbiAgICAgICAgICAgICh0aWVuZUluZGl2aWR1YWw/XHJcbiAgICAgICAgICAgICAgICAhY2FsY3VsYXJEaXNhYmxlZEJGKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLnBlcnNvbmEsIFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbywgXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5ob2dhcj9yZXNwdWVzdGFzRm9yUGsoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXZpZW5kYTpmb3JQa1JhaXoudml2aWVuZGEsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtdWxhcmlvOmNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBob2dhcjpKU09OLnBhcnNlKHBsYWluUGspLmhvZ2FyIFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLnJlc3B1ZXN0YXM6e30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6dHJ1ZSlcclxuICAgIH0pLmFycmF5KCk7XHJcbiAgICB2YXIgcHJpb3JpZGFkZXM6e1trZXkgaW4gUmVzdW1lbkVzdGFkb106IHtwcmlvcmlkYWQ6bnVtYmVyLCBjYW50aWRhZDpudW1iZXJ9fSA9IHtcclxuICAgICAgICAnbm8gcmVhJzp7cHJpb3JpZGFkOiAxLCBjYW50aWRhZDowfSxcclxuICAgICAgICAnY29uIHByb2JsZW1hcyc6e3ByaW9yaWRhZDogMiwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ2luY29tcGxldG8nOntwcmlvcmlkYWQ6IDMsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICd2YWNpbyc6e3ByaW9yaWRhZDogNCwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ2NpdGEgcGFjdGFkYSc6e3ByaW9yaWRhZDogNSwgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ29rJzp7cHJpb3JpZGFkOiA2LCBjYW50aWRhZDowfVxyXG4gICAgfVxyXG4gICAgdmFyIG1pbiA9IDY7XHJcbiAgICB2YXIgbWluUmVzdW1lbjogUmVzdW1lbkVzdGFkbyA9ICdvayc7XHJcbiAgICBmb3IodmFyIGZlZWRiYWNrIG9mIGZlZWRCYWNrVml2aWVuZGEpe1xyXG4gICAgICAgIHZhciByZXN1bWVuID0gZmVlZGJhY2sucmVzdW1lbjtcclxuICAgICAgICBwcmlvcmlkYWRlc1tyZXN1bWVuXS5jYW50aWRhZCsrO1xyXG4gICAgICAgIGlmKHByaW9yaWRhZGVzW3Jlc3VtZW5dLnByaW9yaWRhZDxtaW4pe1xyXG4gICAgICAgICAgICBtaW49cHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkO1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuPXJlc3VtZW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYobWluUmVzdW1lbj09J3ZhY2lvJyYmIHByaW9yaWRhZGVzWydvayddLmNhbnRpZGFkIHx8IG1pblJlc3VtZW49PSdpbmNvbXBsZXRvJyl7XHJcbiAgICAgICAgaWYoZmFsc2UgLypyZXNwdWVzdGFzW3NwMV09PTIgJiYgcmVzcHVlc3Rhc1tzcDZdPT1udWxsKi8pe1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuPSdjaXRhIHBhY3RhZGEnO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuPSdpbmNvbXBsZXRvJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vVE9ETyBBUlJFR0xBUiBFU1RFIEhPUlJPUiwgR0VORVJBTElaQVJcclxuICAgIHZhciB0YXJlYSA9IGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW2ZvclBrUmFpei52aXZpZW5kYSBhcyB1bmtub3duIGFzIElkRW5jXS50YXJlYS50YXJlYTtcclxuICAgIHZhciByZXN1bWVuRXN0YWRvOlJlc3VtZW5Fc3RhZG87XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkb1N1cDpSZXN1bWVuRXN0YWRvID0gJ3ZhY2lvJztcclxuICAgIGlmKHRhcmVhPT0nc3VwZScpe1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAgPSBlc05vUmVhU3VwPydubyByZWEnOm1pblJlc3VtZW5cclxuICAgICAgICAvL3BhcmEgcXVlIGNvbG9yZWUgYmllbiBlbiBsYSBoZHIgZGVsIERNIChsdWVnbyBlbiBiYmRkIG5vIHNlIGd1YXJkYSlcclxuICAgICAgICByZXN1bWVuRXN0YWRvID0gcmVzdW1lbkVzdGFkb1N1cFxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IGVzTm9SZWE/J25vIHJlYSc6bWluUmVzdW1lblxyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdGFkbzpSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8sXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkb1N1cCxcclxuICAgICAgICBjb2RSZWEsXHJcbiAgICAgICAgY29kTm9SZWEsXHJcbiAgICAgICAgY29kUmVhU3VwLFxyXG4gICAgICAgIGNvZE5vUmVhU3VwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0YWRvXHJcbn1cclxuIl19
|