ezlibrary_v2 0.0.11 → 0.0.12
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/esm2020/lib/file-upload/fileupload.component.mjs +3 -3
- package/esm2020/public_api.mjs +1 -2
- package/fesm2015/ezlibrary_v2.mjs +3 -24
- package/fesm2015/ezlibrary_v2.mjs.map +1 -1
- package/fesm2020/ezlibrary_v2.mjs +3 -24
- package/fesm2020/ezlibrary_v2.mjs.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +0 -1
- package/esm2020/lib/service/login-service.service.mjs +0 -24
- package/lib/service/login-service.service.d.ts +0 -9
|
@@ -903,10 +903,10 @@ export class FileuploadComponent {
|
|
|
903
903
|
}
|
|
904
904
|
}
|
|
905
905
|
/** @nocollapse */ FileuploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FileuploadComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ToastrService }, { token: i3.NgxSpinnerService }, { token: i4.HttpClient }, { token: i5.CommanServiceService }], target: i0.ɵɵFactoryTarget.Component });
|
|
906
|
-
/** @nocollapse */ FileuploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FileuploadComponent, selector: "app-fileupload", viewQueries: [{ propertyName: "closehdrbtn", first: true, predicate: ["closehdrbtn"], descendants: true }, { propertyName: "closedtlbtn", first: true, predicate: ["closedtlbtn"], descendants: true }, { propertyName: "Cofirmmapdtl", first: true, predicate: ["Cofirmmapdtl"], descendants: true }], ngImport: i0, template: "<div class=\"mt\" style=\"background: #fff;\">\r\n\r\n <div class=\"content-frame\">\r\n <p *ngIf=\"show\" class=\"loading-text\" style=\"z-index: 9999\"> {{stepMsg}} </p>\r\n\r\n <div class=\"innerD\">\r\n <div class=\"mt-element-step\">\r\n <div class=\"row step-thin\">\r\n\r\n <div class=\"col-md-2 bg-grey mt-step-col\" [ngClass]=\"{'done':step==1 ? 'done':''}\"\r\n (click)=setSetp(1)>\r\n <div class=\"mt-step-number bg-white font-grey\">1</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Browse</div>\r\n </div>\r\n <div class=\"col-md-4 bg-grey mt-step-col\" [ngClass]=\"{'done':step==2 ? 'done':''}\"\r\n (click)=setSetp(2)>\r\n <div class=\"mt-step-number bg-white font-grey\">2</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Header Verification</div>\r\n </div>\r\n <div class=\"col-md-3 bg-grey mt-step-col\" [ngClass]=\"{'done':step==3 ? 'done':''}\"\r\n (click)=setSetp(3)>\r\n <div class=\"mt-step-number bg-white font-grey\">3</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Data Verification</div>\r\n </div>\r\n\r\n <div class=\"col-md-3 bg-grey mt-step-col\" [ngClass]=\"{'done':step==4 ? 'done':''}\"\r\n (click)=setSetp(4)>\r\n <div class=\"mt-step-number bg-white font-grey\">4</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Uploading..</div>\r\n </div>\r\n </div>\r\n <div class=\"row upload\" *ngIf=\"step==1\">\r\n\r\n\r\n <div class=\"col-md-offset-3 col-md-3\" style=\"margin-top: 15px;\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-4 control-label\" style=\"padding: 5px;\">File Type :</label>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"fileType\" [(ngModel)]=\"fileType\">\r\n <option value=\"\">--select--</option>\r\n <option *ngFor=\"let file of fileOptionsList\" value=\"{{file?.k}}\">{{file?.v}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"col-md-2\">\r\n <a class=\"fileinput-wrapper btn btn-default fileinput btn-primary\"\r\n style=\"background: #3a5898\"><span>Browse file</span>\r\n <input type=\"file\" class=\"fileinput btn-primary\" name=\"filename\" id=\"filename\"\r\n title=\"Browse file\" accept=\".xlsx,.csv\" (change)=\"incomingfile($event)\"\r\n style=\"left: -163.75px; top: 9px;\"></a>\r\n\r\n </div>\r\n\r\n <!-- <label class=\"control-label\">Upload File : </label>\r\n\r\n <input type=\"file\" class=\"fileinput btn-primary\" accept=\".xlsx,.csv\" name=\"filename\" id=\"filename\"\r\n (change)=\"incomingfile($event)\" title=\"Browse file\"> -->\r\n\r\n\r\n </div>\r\n\r\n <div class=\"row upload\" *ngIf=\"step==2\">\r\n <div class=\"row\">\r\n <div class=\"col-md-1\">\r\n Total Match : {{totalmatch}}\r\n </div>\r\n <div class=\"col-md-1\">\r\n Total Ignore : {{totalignore}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"row col-md-12\" style=\"overflow: auto;width: 100%;\">\r\n <table class=\"fileuploadview\">\r\n <tr>\r\n <ng-container *ngFor=\"let hdr of headerList ;\">\r\n <th [ngClass]=\"{\r\n 'match':headerAttributeDtl[hdr].attr!='' && headerAttributeDtl[hdr].ignore!='Y',\r\n 'ignore':headerAttributeDtl[hdr].ignore=='Y',\r\n 'thbg':headerAttributeDtl[hdr].attr=='' && headerAttributeDtl[hdr].ignore!='Y'\r\n }\" (click)=\"updatecolumnstatue(hdr)\">{{hdr}}\r\n </th>\r\n </ng-container>\r\n </tr>\r\n <tr>\r\n <ng-container *ngFor=\"let hdr of headerList ;\">\r\n <th>\r\n <ng-container *ngIf=\"headerAttributeDtl[hdr].attr==''\">\r\n <!-- <select class=\"select-control\" name=\"{{headerAttributeDtl[hdr].attr}}\"\r\n [(ngModel)]=\"headerAttributeDtl[hdr].attr\"\r\n (change)=\"confirmsetHeaderMapp(hdr,$event.target)\"> -->\r\n <select class=\"select-control\" name=\"{{headerAttributeDtl[hdr].attr}}\"\r\n [(ngModel)]=\"headerAttributeDtl[hdr].attr\"\r\n (change)=\"confirmsetHeaderMapp(hdr)\">\r\n <option value=\"\">--select--</option>\r\n <option *ngFor=\"let attrDtl of attrStructureDtl\"\r\n value=\"{{attrDtl?.attr}}\">{{attrDtl?.attr}}</option>\r\n </select>\r\n </ng-container>\r\n <ng-container *ngIf=\"headerAttributeDtl[hdr].attr!=''\">\r\n {{headerAttributeDtl[hdr].attr}}\r\n \r\n </ng-container>\r\n\r\n </th>\r\n </ng-container>\r\n </tr>\r\n <tr>\r\n <ng-container *ngFor=\"let hdr of headerList ;\">\r\n <th>\r\n <ng-container *ngIf=\"headerAttributeDtl[hdr].dta_typ=='d'\">\r\n <select class=\"select-control\" name=\"{{dateFormatMap[hdr]}}\"\r\n [(ngModel)]=\"dateFormatMap[hdr]\"\r\n >\r\n <option *ngFor=\"let dteFmt of dateFormatList\"\r\n value=\"{{dteFmt?.k}}\">{{dteFmt?.v}}</option>\r\n </select>\r\n </ng-container>\r\n </th>\r\n </ng-container>\r\n </tr> \r\n <tr *ngFor=\"let rowDis of defultDisplayObj ;\">\r\n <td *ngFor=\"let hdr of headerList ;\">\r\n {{rowDis[hdr]}}\r\n </td>\r\n\r\n </tr>\r\n\r\n </table>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-offset-11 col-md-1\">\r\n <button type=\"button\" *ngIf=\"fileLogIdn==0 && (filenme=='generic' || filenme=='gia_bill')\" class=\"btn btn-success pull-right\"\r\n style=\"margin: 5px\" (click)=\"SkipVerification()\">Skip</button>\r\n \r\n <button type=\"button\" *ngIf=\"fileLogIdn==0\" class=\"btn btn-success pull-right\"\r\n style=\"margin: 5px\" (click)=\"ValidateFileHeaderMapping('Y')\">Verify</button>\r\n\r\n \r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row upload \" *ngIf=\"step==3\">\r\n <div class=\"row table-responsive col-md-12\">\r\n <table cellspacing=\"10\" class=\"displayTable fileuploadview\">\r\n <ng-container *ngFor=\"let hdr of charHeaderList ;let j=index;\">\r\n\r\n <tr>\r\n <th style=\"color:white;border: 1px solid white\">\r\n {{hdr}}({{headerAttributeDtl[hdr].attr}})</th>\r\n <td [ngClass]=\"{'even':j%2==0,'odd':j%2==1}\">\r\n <div class=\"row\" style=\"display: flex;\">\r\n <ng-container\r\n *ngFor=\"let attrVal of rowdistinctDataMap[headerAttributeDtl[hdr].attr];\">\r\n <div style=\"width:160px;margin-right: 1px\"\r\n [ngClass]=\"{'matchedUl':rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val !=''}\">\r\n <ul style=\"list-style: none;text-align:left\">\r\n <li> {{attrVal}} </li>\r\n <li>\r\n <select\r\n *ngIf=\"rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val==''\"\r\n class=\"select-control\"\r\n name=\"{{rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val}}\"\r\n [(ngModel)]=\"rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val\"\r\n (change)=\"confirmHeaderDetailsMapp(headerAttributeDtl[hdr].attr,headerAttributeDtl[hdr].attr_idn,attrVal)\">\r\n <option value=\"\">--select--</option>\r\n <option\r\n *ngFor=\"let attrdtlmap of attributeDtlMap[headerAttributeDtl[hdr].attr]\"\r\n value=\"{{attrdtlmap?.val}}\">{{attrdtlmap?.val}}\r\n </option>\r\n </select>\r\n\r\n <span\r\n *ngIf=\"rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val!=''\">\r\n {{rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val}} \r\n <i (click)=\"removeDetailAttrOptVal(headerAttributeDtl[hdr].attr_idn,attrVal,rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val,[headerAttributeDtl[hdr].attr])\" class=\"fa fa-times\" aria-hidden=\"true\" style=\"color: red;cursor: pointer;\"></i>\r\n </span>\r\n \r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </td>\r\n\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-offset-11 col-md-1\">\r\n <button type=\"button\" *ngIf=\"fileLogIdn==0 && (filenme=='generic' || filenme=='gia_bill')\" class=\"btn btn-success pull-right\"\r\n style=\"margin: 5px\" (click)=\"SkipVerificationDtl()\">Skip</button>\r\n \r\n <button type=\"button\" class=\"btn btn-success pull-right\" style=\"margin: 5px\"\r\n (click)=\"uploadFile()\" [disabled]=\"gmatchedCount!=gresultCount\">Upload</button>\r\n \r\n \r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row upload\" *ngIf=\"step==4\">\r\n\r\n <div class=\"row\">\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n\r\n <p *ngIf=\"step==4\" style=\"margin-left: 15px;color:green;font-size: 20px;text-align: left\">\r\n {{lableFile}}\r\n <span style=\"font-size: 14px;\" *ngIf=\"lastRefreshTimeFile != null\">Last\r\n refresh time :\r\n ({{lastRefreshTimeFile | date:'medium'}})</span>\r\n </p>\r\n\r\n <div class=\"progress\" style=\"margin: 15px;\">\r\n <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\"\r\n aria-valuemin=\"0\" aria-valuemax=\"100\" [ngStyle]=\"{'width':totProgressFile+'%'} \">\r\n {{totProgressFile}} %\r\n </div>\r\n </div>\r\n\r\n <p *ngIf=\"step==4 && clicked\" style=\"margin-top: 35px;\"><strong> Complete :{{sttsFile['C']}}\r\n Pending : {{sttsFile['P']}} Error :\r\n {{sttsFile['E']}} Invaild Status :\r\n {{sttsFile['I']}}\r\n Total : {{sttsFile['T']}}</strong></p>\r\n\r\n\r\n <p *ngIf=\"step==4\"\r\n style=\"margin-left: 15px;color:green;font-size: 20px;margin-top: 15px;text-align: left\">\r\n {{lable}}\r\n <span style=\"font-size: 12px;margin-left: 20px;color: black;\"\r\n *ngIf=\"lastRefreshTime != null\">Last\r\n refresh time :\r\n ({{lastRefreshTime | date:'medium'}})</span>\r\n </p>\r\n\r\n <div class=\"progress\" style=\"margin: 15px;\">\r\n <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\"\r\n aria-valuemin=\"0\" aria-valuemax=\"100\" [ngStyle]=\"{'width':totProgress+'%'} \">\r\n {{totProgress}} %\r\n </div>\r\n </div>\r\n\r\n <!-- <button type=\"button\" class=\"btn btn-success text-center\" style=\"margin: 5px\"\r\n (click)=\"checkUploadStt()\">Check\r\n Status</button> -->\r\n\r\n <p *ngIf=\"step==4 && clicked\" style=\"margin-top: 35px;\"><strong> Complete :{{stts['C']}}\r\n Pending : {{stts['P']}} Error : {{stts['E']}}\r\n Total : {{stts['T']}}</strong></p>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n<div class=\"modal\" id=\"fileUploadModal\" tabindex=\"-1\" style=\"z-index: 999999\" role=\"dialog\"\r\n aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\" data-keyboard=\"true\">\r\n <div class=\"modal-dialog \">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" #fileUploadclsbtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Add file upload option</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n\r\n <div class=\"col-md-12\">\r\n <form class=\"form-horizontal\" role=\"form\" #f=\"ngForm\" (ngSubmit)=\"onSubmit(f)\" name=\"appForm\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Name\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"nme\" name=\"nme\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Description\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"description\"\r\n name=\"description\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Type\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"typ\" [(ngModel)]=\"typ\">\r\n <option value=\"\">--select--</option>\r\n <option *ngFor=\"let file of fileTypeList\" value=\"{{file?.k}}\">\r\n {{file?.v}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Check status\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <ng-select placeholder=\"Select Status\" [options]=\"statusList\"\r\n [(ngModel)]=\"check_status\" name=\"check_status\" [multiple]=\"true\"\r\n [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Packet status\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <ng-select placeholder=\"Select Status\" [options]=\"statusList\"\r\n [(ngModel)]=\"pkt_status\" name=\"pkt_status\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\" #fileUploadclsbtn>Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\" appAppNoDblClick\r\n (click)=\"onSubmit(f)\">Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"Cofirmmaphdr\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" (click)=\"CancelHeaderMapp()\" class=\"close\" data-dismiss=\"modal\">\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\" >Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Alert</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n Are you sure For Mapping <b>{{maphdr}}</b> To Attribute <b>{{hdrmassage}}</b> \r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" (click)=\"CancelHeaderMapp()\" data-dismiss=\"modal\" >Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\" (click)=\"setHeaderMapp();\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"Cofirmmapdtl\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" (click)=\"CancelHeaderMapp()\" class=\"close\" data-dismiss=\"modal\" >\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\" >Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Alert</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n Are you sure For Mapping <b>{{dtloptionval}}</b> To Attribute <b> {{dtlAttr}} </b> with AttributeDetail <b>{{dtlmassage}}</b> \r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\" (click)=\"CancelHeaderDetailsMapp()\">Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\" (click)=\"setHeaderDetailsMapp()\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n<button id=\"btnfileUploadModal\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#fileUploadModal\"></button>\r\n\r\n<button id=\"btnCofirmmaphdr\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#Cofirmmaphdr\"></button>\r\n<button id=\"btnCofirmmapdtl\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#Cofirmmapdtl\"></button>\r\n\r\n\r\n\r\n<!-- <div class=\"centered\">\r\n <div id=\"divSpinner\" class=\"spinner loading\">\r\n <div class=\"loading-text\">Loading ...</div>\r\n </div>\r\n\r\n <button (click)=\"test()\" id=\"btnLoadRecords\" style=\"cursor:pointer;position: absolute; top: 52%; left: 45%;\">Load Records</button>\r\n </div> -->", styles: [".actionFooter{position:fixed;bottom:0;width:100%;text-align:right;padding:10px;background:#1b1e24}.innerD{min-height:calc(100vh - 100px);background:#fff}.mt-element-step .row{margin:0}.mt-element-step .step-thin .mt-step-col{padding-top:10px;padding-bottom:10px}.mt-element-step .step-thin .mt-step-number{font-size:22px;border-radius:50%!important;float:left;margin:auto;padding:3px 14px}.mt-element-step .step-thin .mt-step-title{font-size:20px;font-weight:100;padding-left:60px;margin-top:-4px}.mt-element-step .step-thin .mt-step-content{padding-left:60px;margin-top:-5px}.mt-element-step .step-thin .done{background-color:#3b5998!important}.mt-element-step .step-thin .done .mt-step-number{color:#3b5998!important}.mt-element-step .step-thin .done .mt-step-content,.mt-element-step .step-thin .done .mt-step-title{color:#fff!important}.font-grey-cascade{color:#95a5a6!important}.font-grey{color:#e5e5e5!important}.bg-grey{background:#E5E5E5!important}.bg-white{background:#fff!important}.mt-element-step .upload{text-align:center;padding-top:15px;padding-bottom:10px}.fileuploadview{width:calc(100% - 1px)}.fileuploadview th{padding:2px 5px;font-weight:700;font-size:12px;color:#000;height:35px;white-space:nowrap;text-align:center;vertical-align:middle}.fileuploadview tr{background-color:#fff}.fileuploadview td{height:25px;white-space:nowrap;text-align:center;font-size:9pt;padding:5px;border:1px solid white}.match{background-color:#95b75d!important}.ignore{background-color:#ff7a7a!important}.thbg{background-color:#e5e5e5!important}.select-control{height:20px;font-size:12px;line-height:18px;box-shadow:none;border:1px solid #D5D5D5;background:#F9F9F9;display:block;width:100%;border-radius:4px;box-shadow:inset 0 1px 1px #00000013;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.displayTable td.odd:hover,.displayTable td.even:hover{background-color:#e3f6ff}.displayTable td.odd{background-color:#efefef}.displayTable td.even{background-color:#f8f8f8}.displayTable td a:BEFORE{color:green}.displayTable th a{text-align:center;color:#000}.displayTable th a:visited{text-align:center;color:#fff}.displayTable th a:hover{color:#fc0;background-color:transparent;text-align:center}.matchedUl{background-color:#beccd2}.loading-text{width:400px;position:absolute;top:calc(50% - 370px);left:calc(50% - 180px);text-align:center;color:#00f;font-size:25px}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i8.SelectComponent, selector: "ng-select", inputs: ["options", "allowClear", "disabled", "multiple", "noFilter", "notFoundMsg", "placeholder", "filterPlaceholder", "label", "highlightColor", "highlightTextColor"], outputs: ["opened", "closed", "selected", "deselected", "focus", "blur", "noOptionsFound", "filterInputChanged"] }, { kind: "directive", type: i9.AppNoDblClickDirective, selector: "[appAppNoDblClick]" }, { kind: "pipe", type: i6.DatePipe, name: "date" }] });
|
|
906
|
+
/** @nocollapse */ FileuploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FileuploadComponent, selector: "app-fileupload", viewQueries: [{ propertyName: "closehdrbtn", first: true, predicate: ["closehdrbtn"], descendants: true }, { propertyName: "closedtlbtn", first: true, predicate: ["closedtlbtn"], descendants: true }, { propertyName: "Cofirmmapdtl", first: true, predicate: ["Cofirmmapdtl"], descendants: true }], ngImport: i0, template: "<div class=\"mt\" style=\"background: #fff;\">\r\n\r\n <div class=\"content-frame\">\r\n <p *ngIf=\"show\" class=\"loading-text\" style=\"z-index: 9999\"> {{stepMsg}} </p>\r\n\r\n <div class=\"innerD\">\r\n <div class=\"mt-element-step\">\r\n <div class=\"row step-thin\">\r\n\r\n <div class=\"col-md-2 bg-grey mt-step-col\" [ngClass]=\"{'done':step==1 ? 'done':''}\"\r\n (click)=setSetp(1)>\r\n <div class=\"mt-step-number bg-white font-grey\">1</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Browse</div>\r\n </div>\r\n <div class=\"col-md-4 bg-grey mt-step-col\" [ngClass]=\"{'done':step==2 ? 'done':''}\"\r\n (click)=setSetp(2)>\r\n <div class=\"mt-step-number bg-white font-grey\">2</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Header Verification</div>\r\n </div>\r\n <div class=\"col-md-3 bg-grey mt-step-col\" [ngClass]=\"{'done':step==3 ? 'done':''}\"\r\n (click)=setSetp(3)>\r\n <div class=\"mt-step-number bg-white font-grey\">3</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Data Verification</div>\r\n </div>\r\n\r\n <div class=\"col-md-3 bg-grey mt-step-col\" [ngClass]=\"{'done':step==4 ? 'done':''}\"\r\n (click)=setSetp(4)>\r\n <div class=\"mt-step-number bg-white font-grey\">4</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Uploading..</div>\r\n </div>\r\n </div>\r\n <div class=\"row upload\" *ngIf=\"step==1\">\r\n\r\n\r\n <div class=\"col-md-offset-3 col-md-3\" style=\"margin-top: 15px;\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-4 control-label\" style=\"padding: 5px;\">File Type :</label>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"fileType\" [(ngModel)]=\"fileType\">\r\n <option value=\"\">--select--</option>\r\n <option *ngFor=\"let file of fileOptionsList\" value=\"{{file?.k}}\">{{file?.v}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"col-md-2\">\r\n <a class=\"fileinput-wrapper btn btn-default fileinput btn-primary\"\r\n style=\"background: #3a5898\"><span>Browse file</span>\r\n <input type=\"file\" class=\"fileinput btn-primary\" name=\"filename\" id=\"filename\"\r\n title=\"Browse file\" accept=\".xlsx,.csv\" (change)=\"incomingfile($event)\"\r\n style=\"left: -163.75px; top: 9px;\"></a>\r\n\r\n </div>\r\n\r\n <!-- <label class=\"control-label\">Upload File : </label>\r\n\r\n <input type=\"file\" class=\"fileinput btn-primary\" accept=\".xlsx,.csv\" name=\"filename\" id=\"filename\"\r\n (change)=\"incomingfile($event)\" title=\"Browse file\"> -->\r\n\r\n\r\n </div>\r\n\r\n <div class=\"row upload\" *ngIf=\"step==2\">\r\n <div class=\"row\">\r\n <div class=\"col-md-1\">\r\n Total Match : {{totalmatch}}\r\n </div>\r\n <div class=\"col-md-1\">\r\n Total Ignore : {{totalignore}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"row col-md-12\" style=\"overflow: auto;width: 100%;\">\r\n <table class=\"fileuploadview\">\r\n <tr>\r\n <ng-container *ngFor=\"let hdr of headerList ;\">\r\n <th [ngClass]=\"{\r\n 'match':headerAttributeDtl[hdr].attr!='' && headerAttributeDtl[hdr].ignore!='Y',\r\n 'ignore':headerAttributeDtl[hdr].ignore=='Y',\r\n 'thbg':headerAttributeDtl[hdr].attr=='' && headerAttributeDtl[hdr].ignore!='Y'\r\n }\" (click)=\"updatecolumnstatue(hdr)\">{{hdr}}\r\n </th>\r\n </ng-container>\r\n </tr>\r\n <tr>\r\n <ng-container *ngFor=\"let hdr of headerList ;\">\r\n <th>\r\n <ng-container *ngIf=\"headerAttributeDtl[hdr].attr==''\">\r\n <!-- <select class=\"select-control\" name=\"{{headerAttributeDtl[hdr].attr}}\"\r\n [(ngModel)]=\"headerAttributeDtl[hdr].attr\"\r\n (change)=\"confirmsetHeaderMapp(hdr,$event.target)\"> -->\r\n <select class=\"select-control\" name=\"{{headerAttributeDtl[hdr].attr}}\"\r\n [(ngModel)]=\"headerAttributeDtl[hdr].attr\"\r\n (change)=\"confirmsetHeaderMapp(hdr)\">\r\n <option value=\"\">--select--</option>\r\n <option *ngFor=\"let attrDtl of attrStructureDtl\"\r\n value=\"{{attrDtl?.attr}}\">{{attrDtl?.attr}}</option>\r\n </select>\r\n </ng-container>\r\n <ng-container *ngIf=\"headerAttributeDtl[hdr].attr!=''\">\r\n {{headerAttributeDtl[hdr].attr}}\r\n \r\n </ng-container>\r\n\r\n </th>\r\n </ng-container>\r\n </tr>\r\n <tr>\r\n <ng-container *ngFor=\"let hdr of headerList ;\">\r\n <th>\r\n <ng-container *ngIf=\"headerAttributeDtl[hdr].dta_typ=='d'\">\r\n <select class=\"select-control\" name=\"{{dateFormatMap[hdr]}}\"\r\n [(ngModel)]=\"dateFormatMap[hdr]\"\r\n >\r\n <option *ngFor=\"let dteFmt of dateFormatList\"\r\n value=\"{{dteFmt?.k}}\">{{dteFmt?.v}}</option>\r\n </select>\r\n </ng-container>\r\n </th>\r\n </ng-container>\r\n </tr> \r\n <tr *ngFor=\"let rowDis of defultDisplayObj ;\">\r\n <td *ngFor=\"let hdr of headerList ;\">\r\n {{rowDis[hdr]}}\r\n </td>\r\n\r\n </tr>\r\n\r\n </table>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-offset-11 col-md-1\">\r\n <button type=\"button\" *ngIf=\"fileLogIdn==0 && (filenme=='generic' || filenme=='gia_bill')\" class=\"btn btn-success pull-right\"\r\n style=\"margin: 5px\" (click)=\"SkipVerification()\">Skip</button>\r\n \r\n <button type=\"button\" *ngIf=\"fileLogIdn==0\" class=\"btn btn-success pull-right\"\r\n style=\"margin: 5px\" (click)=\"ValidateFileHeaderMapping('Y')\">Verify</button>\r\n\r\n \r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row upload \" *ngIf=\"step==3\">\r\n <div class=\"row table-responsive col-md-12\">\r\n <table cellspacing=\"10\" class=\"displayTable fileuploadview\">\r\n <ng-container *ngFor=\"let hdr of charHeaderList ;let j=index;\">\r\n\r\n <tr>\r\n <th style=\"color:white;border: 1px solid white\">\r\n {{hdr}}({{headerAttributeDtl[hdr].attr}})</th>\r\n <td [ngClass]=\"{'even':j%2==0,'odd':j%2==1}\">\r\n <div class=\"row\" style=\"display: flex;\">\r\n <ng-container\r\n *ngFor=\"let attrVal of rowdistinctDataMap[headerAttributeDtl[hdr].attr];\">\r\n <div style=\"width:160px;margin-right: 1px\"\r\n [ngClass]=\"{'matchedUl':rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val !=''}\">\r\n <ul style=\"list-style: none;text-align:left\">\r\n <li> {{attrVal}} </li>\r\n <li>\r\n <select\r\n *ngIf=\"rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val==''\"\r\n class=\"select-control\"\r\n name=\"{{rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val}}\"\r\n [(ngModel)]=\"rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val\"\r\n (change)=\"confirmHeaderDetailsMapp(headerAttributeDtl[hdr].attr,headerAttributeDtl[hdr].attr_idn,attrVal)\">\r\n <option value=\"\">--select--</option>\r\n <option\r\n *ngFor=\"let attrdtlmap of attributeDtlMap[headerAttributeDtl[hdr].attr]\"\r\n value=\"{{attrdtlmap?.val}}\">{{attrdtlmap?.display}}({{attrdtlmap?.val}}) </option>\r\n </select>\r\n\r\n <span\r\n *ngIf=\"rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val!=''\">\r\n {{rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val}} \r\n <i (click)=\"removeDetailAttrOptVal(headerAttributeDtl[hdr].attr_idn,attrVal,rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val,[headerAttributeDtl[hdr].attr])\" class=\"fa fa-times\" aria-hidden=\"true\" style=\"color: red;cursor: pointer;\"></i>\r\n </span>\r\n \r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </td>\r\n\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-offset-11 col-md-1\">\r\n <button type=\"button\" *ngIf=\"fileLogIdn==0 && (filenme=='generic' || filenme=='gia_bill')\" class=\"btn btn-success pull-right\"\r\n style=\"margin: 5px\" (click)=\"SkipVerificationDtl()\">Skip</button>\r\n \r\n <button type=\"button\" class=\"btn btn-success pull-right\" style=\"margin: 5px\"\r\n (click)=\"uploadFile()\" [disabled]=\"gmatchedCount!=gresultCount\">Upload</button>\r\n \r\n \r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row upload\" *ngIf=\"step==4\">\r\n\r\n <div class=\"row\">\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n\r\n <p *ngIf=\"step==4\" style=\"margin-left: 15px;color:green;font-size: 20px;text-align: left\">\r\n {{lableFile}}\r\n <span style=\"font-size: 14px;\" *ngIf=\"lastRefreshTimeFile != null\">Last\r\n refresh time :\r\n ({{lastRefreshTimeFile | date:'medium'}})</span>\r\n </p>\r\n\r\n <div class=\"progress\" style=\"margin: 15px;\">\r\n <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\"\r\n aria-valuemin=\"0\" aria-valuemax=\"100\" [ngStyle]=\"{'width':totProgressFile+'%'} \">\r\n {{totProgressFile}} %\r\n </div>\r\n </div>\r\n\r\n <p *ngIf=\"step==4 && clicked\" style=\"margin-top: 35px;\"><strong> Complete :{{sttsFile['C']}}\r\n Pending : {{sttsFile['P']}} Error :\r\n {{sttsFile['E']}} Invaild Status :\r\n {{sttsFile['I']}}\r\n Total : {{sttsFile['T']}}</strong></p>\r\n\r\n\r\n <p *ngIf=\"step==4\"\r\n style=\"margin-left: 15px;color:green;font-size: 20px;margin-top: 15px;text-align: left\">\r\n {{lable}}\r\n <span style=\"font-size: 12px;margin-left: 20px;color: black;\"\r\n *ngIf=\"lastRefreshTime != null\">Last\r\n refresh time :\r\n ({{lastRefreshTime | date:'medium'}})</span>\r\n </p>\r\n\r\n <div class=\"progress\" style=\"margin: 15px;\">\r\n <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\"\r\n aria-valuemin=\"0\" aria-valuemax=\"100\" [ngStyle]=\"{'width':totProgress+'%'} \">\r\n {{totProgress}} %\r\n </div>\r\n </div>\r\n\r\n <!-- <button type=\"button\" class=\"btn btn-success text-center\" style=\"margin: 5px\"\r\n (click)=\"checkUploadStt()\">Check\r\n Status</button> -->\r\n\r\n <p *ngIf=\"step==4 && clicked\" style=\"margin-top: 35px;\"><strong> Complete :{{stts['C']}}\r\n Pending : {{stts['P']}} Error : {{stts['E']}}\r\n Total : {{stts['T']}}</strong></p>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n<div class=\"modal\" id=\"fileUploadModal\" tabindex=\"-1\" style=\"z-index: 999999\" role=\"dialog\"\r\n aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\" data-keyboard=\"true\">\r\n <div class=\"modal-dialog \">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" #fileUploadclsbtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Add file upload option</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n\r\n <div class=\"col-md-12\">\r\n <form class=\"form-horizontal\" role=\"form\" #f=\"ngForm\" (ngSubmit)=\"onSubmit(f)\" name=\"appForm\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Name\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"nme\" name=\"nme\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Description\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"description\"\r\n name=\"description\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Type\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"typ\" [(ngModel)]=\"typ\">\r\n <option value=\"\">--select--</option>\r\n <option *ngFor=\"let file of fileTypeList\" value=\"{{file?.k}}\">\r\n {{file?.v}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Check status\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <ng-select placeholder=\"Select Status\" [options]=\"statusList\"\r\n [(ngModel)]=\"check_status\" name=\"check_status\" [multiple]=\"true\"\r\n [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Packet status\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <ng-select placeholder=\"Select Status\" [options]=\"statusList\"\r\n [(ngModel)]=\"pkt_status\" name=\"pkt_status\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\" #fileUploadclsbtn>Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\" appAppNoDblClick\r\n (click)=\"onSubmit(f)\">Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"Cofirmmaphdr\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" (click)=\"CancelHeaderMapp()\" class=\"close\" data-dismiss=\"modal\">\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\" >Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Alert</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n Are you sure For Mapping <b>{{maphdr}}</b> To Attribute <b>{{hdrmassage}}</b> \r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" (click)=\"CancelHeaderMapp()\" data-dismiss=\"modal\" >Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\" (click)=\"setHeaderMapp();\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"Cofirmmapdtl\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" (click)=\"CancelHeaderMapp()\" class=\"close\" data-dismiss=\"modal\" >\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\" >Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Alert</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n Are you sure For Mapping <b>{{dtloptionval}}</b> To Attribute <b> {{dtlAttr}} </b> with AttributeDetail <b>{{dtlmassage}}</b> \r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\" (click)=\"CancelHeaderDetailsMapp()\">Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\" (click)=\"setHeaderDetailsMapp()\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n<button id=\"btnfileUploadModal\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#fileUploadModal\"></button>\r\n\r\n<button id=\"btnCofirmmaphdr\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#Cofirmmaphdr\"></button>\r\n<button id=\"btnCofirmmapdtl\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#Cofirmmapdtl\"></button>\r\n\r\n\r\n\r\n<!-- <div class=\"centered\">\r\n <div id=\"divSpinner\" class=\"spinner loading\">\r\n <div class=\"loading-text\">Loading ...</div>\r\n </div>\r\n\r\n <button (click)=\"test()\" id=\"btnLoadRecords\" style=\"cursor:pointer;position: absolute; top: 52%; left: 45%;\">Load Records</button>\r\n </div> -->", styles: [".actionFooter{position:fixed;bottom:0;width:100%;text-align:right;padding:10px;background:#1b1e24}.innerD{min-height:calc(100vh - 100px);background:#fff}.mt-element-step .row{margin:0}.mt-element-step .step-thin .mt-step-col{padding-top:10px;padding-bottom:10px}.mt-element-step .step-thin .mt-step-number{font-size:22px;border-radius:50%!important;float:left;margin:auto;padding:3px 14px}.mt-element-step .step-thin .mt-step-title{font-size:20px;font-weight:100;padding-left:60px;margin-top:-4px}.mt-element-step .step-thin .mt-step-content{padding-left:60px;margin-top:-5px}.mt-element-step .step-thin .done{background-color:#3b5998!important}.mt-element-step .step-thin .done .mt-step-number{color:#3b5998!important}.mt-element-step .step-thin .done .mt-step-content,.mt-element-step .step-thin .done .mt-step-title{color:#fff!important}.font-grey-cascade{color:#95a5a6!important}.font-grey{color:#e5e5e5!important}.bg-grey{background:#E5E5E5!important}.bg-white{background:#fff!important}.mt-element-step .upload{text-align:center;padding-top:15px;padding-bottom:10px}.fileuploadview{width:calc(100% - 1px)}.fileuploadview th{padding:2px 5px;font-weight:700;font-size:12px;color:#000;height:35px;white-space:nowrap;text-align:center;vertical-align:middle}.fileuploadview tr{background-color:#fff}.fileuploadview td{height:25px;white-space:nowrap;text-align:center;font-size:9pt;padding:5px;border:1px solid white}.match{background-color:#95b75d!important}.ignore{background-color:#ff7a7a!important}.thbg{background-color:#e5e5e5!important}.select-control{height:20px;font-size:12px;line-height:18px;box-shadow:none;border:1px solid #D5D5D5;background:#F9F9F9;display:block;width:100%;border-radius:4px;box-shadow:inset 0 1px 1px #00000013;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.displayTable td.odd:hover,.displayTable td.even:hover{background-color:#e3f6ff}.displayTable td.odd{background-color:#efefef}.displayTable td.even{background-color:#f8f8f8}.displayTable td a:BEFORE{color:green}.displayTable th a{text-align:center;color:#000}.displayTable th a:visited{text-align:center;color:#fff}.displayTable th a:hover{color:#fc0;background-color:transparent;text-align:center}.matchedUl{background-color:#beccd2}.loading-text{width:400px;position:absolute;top:calc(50% - 370px);left:calc(50% - 180px);text-align:center;color:#00f;font-size:25px}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i8.SelectComponent, selector: "ng-select", inputs: ["options", "allowClear", "disabled", "multiple", "noFilter", "notFoundMsg", "placeholder", "filterPlaceholder", "label", "highlightColor", "highlightTextColor"], outputs: ["opened", "closed", "selected", "deselected", "focus", "blur", "noOptionsFound", "filterInputChanged"] }, { kind: "directive", type: i9.AppNoDblClickDirective, selector: "[appAppNoDblClick]" }, { kind: "pipe", type: i6.DatePipe, name: "date" }] });
|
|
907
907
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FileuploadComponent, decorators: [{
|
|
908
908
|
type: Component,
|
|
909
|
-
args: [{ selector: 'app-fileupload', template: "<div class=\"mt\" style=\"background: #fff;\">\r\n\r\n <div class=\"content-frame\">\r\n <p *ngIf=\"show\" class=\"loading-text\" style=\"z-index: 9999\"> {{stepMsg}} </p>\r\n\r\n <div class=\"innerD\">\r\n <div class=\"mt-element-step\">\r\n <div class=\"row step-thin\">\r\n\r\n <div class=\"col-md-2 bg-grey mt-step-col\" [ngClass]=\"{'done':step==1 ? 'done':''}\"\r\n (click)=setSetp(1)>\r\n <div class=\"mt-step-number bg-white font-grey\">1</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Browse</div>\r\n </div>\r\n <div class=\"col-md-4 bg-grey mt-step-col\" [ngClass]=\"{'done':step==2 ? 'done':''}\"\r\n (click)=setSetp(2)>\r\n <div class=\"mt-step-number bg-white font-grey\">2</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Header Verification</div>\r\n </div>\r\n <div class=\"col-md-3 bg-grey mt-step-col\" [ngClass]=\"{'done':step==3 ? 'done':''}\"\r\n (click)=setSetp(3)>\r\n <div class=\"mt-step-number bg-white font-grey\">3</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Data Verification</div>\r\n </div>\r\n\r\n <div class=\"col-md-3 bg-grey mt-step-col\" [ngClass]=\"{'done':step==4 ? 'done':''}\"\r\n (click)=setSetp(4)>\r\n <div class=\"mt-step-number bg-white font-grey\">4</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Uploading..</div>\r\n </div>\r\n </div>\r\n <div class=\"row upload\" *ngIf=\"step==1\">\r\n\r\n\r\n <div class=\"col-md-offset-3 col-md-3\" style=\"margin-top: 15px;\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-4 control-label\" style=\"padding: 5px;\">File Type :</label>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"fileType\" [(ngModel)]=\"fileType\">\r\n <option value=\"\">--select--</option>\r\n <option *ngFor=\"let file of fileOptionsList\" value=\"{{file?.k}}\">{{file?.v}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"col-md-2\">\r\n <a class=\"fileinput-wrapper btn btn-default fileinput btn-primary\"\r\n style=\"background: #3a5898\"><span>Browse file</span>\r\n <input type=\"file\" class=\"fileinput btn-primary\" name=\"filename\" id=\"filename\"\r\n title=\"Browse file\" accept=\".xlsx,.csv\" (change)=\"incomingfile($event)\"\r\n style=\"left: -163.75px; top: 9px;\"></a>\r\n\r\n </div>\r\n\r\n <!-- <label class=\"control-label\">Upload File : </label>\r\n\r\n <input type=\"file\" class=\"fileinput btn-primary\" accept=\".xlsx,.csv\" name=\"filename\" id=\"filename\"\r\n (change)=\"incomingfile($event)\" title=\"Browse file\"> -->\r\n\r\n\r\n </div>\r\n\r\n <div class=\"row upload\" *ngIf=\"step==2\">\r\n <div class=\"row\">\r\n <div class=\"col-md-1\">\r\n Total Match : {{totalmatch}}\r\n </div>\r\n <div class=\"col-md-1\">\r\n Total Ignore : {{totalignore}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"row col-md-12\" style=\"overflow: auto;width: 100%;\">\r\n <table class=\"fileuploadview\">\r\n <tr>\r\n <ng-container *ngFor=\"let hdr of headerList ;\">\r\n <th [ngClass]=\"{\r\n 'match':headerAttributeDtl[hdr].attr!='' && headerAttributeDtl[hdr].ignore!='Y',\r\n 'ignore':headerAttributeDtl[hdr].ignore=='Y',\r\n 'thbg':headerAttributeDtl[hdr].attr=='' && headerAttributeDtl[hdr].ignore!='Y'\r\n }\" (click)=\"updatecolumnstatue(hdr)\">{{hdr}}\r\n </th>\r\n </ng-container>\r\n </tr>\r\n <tr>\r\n <ng-container *ngFor=\"let hdr of headerList ;\">\r\n <th>\r\n <ng-container *ngIf=\"headerAttributeDtl[hdr].attr==''\">\r\n <!-- <select class=\"select-control\" name=\"{{headerAttributeDtl[hdr].attr}}\"\r\n [(ngModel)]=\"headerAttributeDtl[hdr].attr\"\r\n (change)=\"confirmsetHeaderMapp(hdr,$event.target)\"> -->\r\n <select class=\"select-control\" name=\"{{headerAttributeDtl[hdr].attr}}\"\r\n [(ngModel)]=\"headerAttributeDtl[hdr].attr\"\r\n (change)=\"confirmsetHeaderMapp(hdr)\">\r\n <option value=\"\">--select--</option>\r\n <option *ngFor=\"let attrDtl of attrStructureDtl\"\r\n value=\"{{attrDtl?.attr}}\">{{attrDtl?.attr}}</option>\r\n </select>\r\n </ng-container>\r\n <ng-container *ngIf=\"headerAttributeDtl[hdr].attr!=''\">\r\n {{headerAttributeDtl[hdr].attr}}\r\n \r\n </ng-container>\r\n\r\n </th>\r\n </ng-container>\r\n </tr>\r\n <tr>\r\n <ng-container *ngFor=\"let hdr of headerList ;\">\r\n <th>\r\n <ng-container *ngIf=\"headerAttributeDtl[hdr].dta_typ=='d'\">\r\n <select class=\"select-control\" name=\"{{dateFormatMap[hdr]}}\"\r\n [(ngModel)]=\"dateFormatMap[hdr]\"\r\n >\r\n <option *ngFor=\"let dteFmt of dateFormatList\"\r\n value=\"{{dteFmt?.k}}\">{{dteFmt?.v}}</option>\r\n </select>\r\n </ng-container>\r\n </th>\r\n </ng-container>\r\n </tr> \r\n <tr *ngFor=\"let rowDis of defultDisplayObj ;\">\r\n <td *ngFor=\"let hdr of headerList ;\">\r\n {{rowDis[hdr]}}\r\n </td>\r\n\r\n </tr>\r\n\r\n </table>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-offset-11 col-md-1\">\r\n <button type=\"button\" *ngIf=\"fileLogIdn==0 && (filenme=='generic' || filenme=='gia_bill')\" class=\"btn btn-success pull-right\"\r\n style=\"margin: 5px\" (click)=\"SkipVerification()\">Skip</button>\r\n \r\n <button type=\"button\" *ngIf=\"fileLogIdn==0\" class=\"btn btn-success pull-right\"\r\n style=\"margin: 5px\" (click)=\"ValidateFileHeaderMapping('Y')\">Verify</button>\r\n\r\n \r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row upload \" *ngIf=\"step==3\">\r\n <div class=\"row table-responsive col-md-12\">\r\n <table cellspacing=\"10\" class=\"displayTable fileuploadview\">\r\n <ng-container *ngFor=\"let hdr of charHeaderList ;let j=index;\">\r\n\r\n <tr>\r\n <th style=\"color:white;border: 1px solid white\">\r\n {{hdr}}({{headerAttributeDtl[hdr].attr}})</th>\r\n <td [ngClass]=\"{'even':j%2==0,'odd':j%2==1}\">\r\n <div class=\"row\" style=\"display: flex;\">\r\n <ng-container\r\n *ngFor=\"let attrVal of rowdistinctDataMap[headerAttributeDtl[hdr].attr];\">\r\n <div style=\"width:160px;margin-right: 1px\"\r\n [ngClass]=\"{'matchedUl':rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val !=''}\">\r\n <ul style=\"list-style: none;text-align:left\">\r\n <li> {{attrVal}} </li>\r\n <li>\r\n <select\r\n *ngIf=\"rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val==''\"\r\n class=\"select-control\"\r\n name=\"{{rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val}}\"\r\n [(ngModel)]=\"rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val\"\r\n (change)=\"confirmHeaderDetailsMapp(headerAttributeDtl[hdr].attr,headerAttributeDtl[hdr].attr_idn,attrVal)\">\r\n <option value=\"\">--select--</option>\r\n <option\r\n *ngFor=\"let attrdtlmap of attributeDtlMap[headerAttributeDtl[hdr].attr]\"\r\n value=\"{{attrdtlmap?.val}}\">{{attrdtlmap?.val}}\r\n </option>\r\n </select>\r\n\r\n <span\r\n *ngIf=\"rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val!=''\">\r\n {{rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val}} \r\n <i (click)=\"removeDetailAttrOptVal(headerAttributeDtl[hdr].attr_idn,attrVal,rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val,[headerAttributeDtl[hdr].attr])\" class=\"fa fa-times\" aria-hidden=\"true\" style=\"color: red;cursor: pointer;\"></i>\r\n </span>\r\n \r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </td>\r\n\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-offset-11 col-md-1\">\r\n <button type=\"button\" *ngIf=\"fileLogIdn==0 && (filenme=='generic' || filenme=='gia_bill')\" class=\"btn btn-success pull-right\"\r\n style=\"margin: 5px\" (click)=\"SkipVerificationDtl()\">Skip</button>\r\n \r\n <button type=\"button\" class=\"btn btn-success pull-right\" style=\"margin: 5px\"\r\n (click)=\"uploadFile()\" [disabled]=\"gmatchedCount!=gresultCount\">Upload</button>\r\n \r\n \r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row upload\" *ngIf=\"step==4\">\r\n\r\n <div class=\"row\">\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n\r\n <p *ngIf=\"step==4\" style=\"margin-left: 15px;color:green;font-size: 20px;text-align: left\">\r\n {{lableFile}}\r\n <span style=\"font-size: 14px;\" *ngIf=\"lastRefreshTimeFile != null\">Last\r\n refresh time :\r\n ({{lastRefreshTimeFile | date:'medium'}})</span>\r\n </p>\r\n\r\n <div class=\"progress\" style=\"margin: 15px;\">\r\n <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\"\r\n aria-valuemin=\"0\" aria-valuemax=\"100\" [ngStyle]=\"{'width':totProgressFile+'%'} \">\r\n {{totProgressFile}} %\r\n </div>\r\n </div>\r\n\r\n <p *ngIf=\"step==4 && clicked\" style=\"margin-top: 35px;\"><strong> Complete :{{sttsFile['C']}}\r\n Pending : {{sttsFile['P']}} Error :\r\n {{sttsFile['E']}} Invaild Status :\r\n {{sttsFile['I']}}\r\n Total : {{sttsFile['T']}}</strong></p>\r\n\r\n\r\n <p *ngIf=\"step==4\"\r\n style=\"margin-left: 15px;color:green;font-size: 20px;margin-top: 15px;text-align: left\">\r\n {{lable}}\r\n <span style=\"font-size: 12px;margin-left: 20px;color: black;\"\r\n *ngIf=\"lastRefreshTime != null\">Last\r\n refresh time :\r\n ({{lastRefreshTime | date:'medium'}})</span>\r\n </p>\r\n\r\n <div class=\"progress\" style=\"margin: 15px;\">\r\n <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\"\r\n aria-valuemin=\"0\" aria-valuemax=\"100\" [ngStyle]=\"{'width':totProgress+'%'} \">\r\n {{totProgress}} %\r\n </div>\r\n </div>\r\n\r\n <!-- <button type=\"button\" class=\"btn btn-success text-center\" style=\"margin: 5px\"\r\n (click)=\"checkUploadStt()\">Check\r\n Status</button> -->\r\n\r\n <p *ngIf=\"step==4 && clicked\" style=\"margin-top: 35px;\"><strong> Complete :{{stts['C']}}\r\n Pending : {{stts['P']}} Error : {{stts['E']}}\r\n Total : {{stts['T']}}</strong></p>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n<div class=\"modal\" id=\"fileUploadModal\" tabindex=\"-1\" style=\"z-index: 999999\" role=\"dialog\"\r\n aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\" data-keyboard=\"true\">\r\n <div class=\"modal-dialog \">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" #fileUploadclsbtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Add file upload option</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n\r\n <div class=\"col-md-12\">\r\n <form class=\"form-horizontal\" role=\"form\" #f=\"ngForm\" (ngSubmit)=\"onSubmit(f)\" name=\"appForm\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Name\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"nme\" name=\"nme\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Description\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"description\"\r\n name=\"description\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Type\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"typ\" [(ngModel)]=\"typ\">\r\n <option value=\"\">--select--</option>\r\n <option *ngFor=\"let file of fileTypeList\" value=\"{{file?.k}}\">\r\n {{file?.v}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Check status\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <ng-select placeholder=\"Select Status\" [options]=\"statusList\"\r\n [(ngModel)]=\"check_status\" name=\"check_status\" [multiple]=\"true\"\r\n [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Packet status\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <ng-select placeholder=\"Select Status\" [options]=\"statusList\"\r\n [(ngModel)]=\"pkt_status\" name=\"pkt_status\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\" #fileUploadclsbtn>Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\" appAppNoDblClick\r\n (click)=\"onSubmit(f)\">Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"Cofirmmaphdr\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" (click)=\"CancelHeaderMapp()\" class=\"close\" data-dismiss=\"modal\">\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\" >Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Alert</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n Are you sure For Mapping <b>{{maphdr}}</b> To Attribute <b>{{hdrmassage}}</b> \r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" (click)=\"CancelHeaderMapp()\" data-dismiss=\"modal\" >Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\" (click)=\"setHeaderMapp();\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"Cofirmmapdtl\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" (click)=\"CancelHeaderMapp()\" class=\"close\" data-dismiss=\"modal\" >\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\" >Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Alert</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n Are you sure For Mapping <b>{{dtloptionval}}</b> To Attribute <b> {{dtlAttr}} </b> with AttributeDetail <b>{{dtlmassage}}</b> \r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\" (click)=\"CancelHeaderDetailsMapp()\">Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\" (click)=\"setHeaderDetailsMapp()\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n<button id=\"btnfileUploadModal\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#fileUploadModal\"></button>\r\n\r\n<button id=\"btnCofirmmaphdr\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#Cofirmmaphdr\"></button>\r\n<button id=\"btnCofirmmapdtl\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#Cofirmmapdtl\"></button>\r\n\r\n\r\n\r\n<!-- <div class=\"centered\">\r\n <div id=\"divSpinner\" class=\"spinner loading\">\r\n <div class=\"loading-text\">Loading ...</div>\r\n </div>\r\n\r\n <button (click)=\"test()\" id=\"btnLoadRecords\" style=\"cursor:pointer;position: absolute; top: 52%; left: 45%;\">Load Records</button>\r\n </div> -->", styles: [".actionFooter{position:fixed;bottom:0;width:100%;text-align:right;padding:10px;background:#1b1e24}.innerD{min-height:calc(100vh - 100px);background:#fff}.mt-element-step .row{margin:0}.mt-element-step .step-thin .mt-step-col{padding-top:10px;padding-bottom:10px}.mt-element-step .step-thin .mt-step-number{font-size:22px;border-radius:50%!important;float:left;margin:auto;padding:3px 14px}.mt-element-step .step-thin .mt-step-title{font-size:20px;font-weight:100;padding-left:60px;margin-top:-4px}.mt-element-step .step-thin .mt-step-content{padding-left:60px;margin-top:-5px}.mt-element-step .step-thin .done{background-color:#3b5998!important}.mt-element-step .step-thin .done .mt-step-number{color:#3b5998!important}.mt-element-step .step-thin .done .mt-step-content,.mt-element-step .step-thin .done .mt-step-title{color:#fff!important}.font-grey-cascade{color:#95a5a6!important}.font-grey{color:#e5e5e5!important}.bg-grey{background:#E5E5E5!important}.bg-white{background:#fff!important}.mt-element-step .upload{text-align:center;padding-top:15px;padding-bottom:10px}.fileuploadview{width:calc(100% - 1px)}.fileuploadview th{padding:2px 5px;font-weight:700;font-size:12px;color:#000;height:35px;white-space:nowrap;text-align:center;vertical-align:middle}.fileuploadview tr{background-color:#fff}.fileuploadview td{height:25px;white-space:nowrap;text-align:center;font-size:9pt;padding:5px;border:1px solid white}.match{background-color:#95b75d!important}.ignore{background-color:#ff7a7a!important}.thbg{background-color:#e5e5e5!important}.select-control{height:20px;font-size:12px;line-height:18px;box-shadow:none;border:1px solid #D5D5D5;background:#F9F9F9;display:block;width:100%;border-radius:4px;box-shadow:inset 0 1px 1px #00000013;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.displayTable td.odd:hover,.displayTable td.even:hover{background-color:#e3f6ff}.displayTable td.odd{background-color:#efefef}.displayTable td.even{background-color:#f8f8f8}.displayTable td a:BEFORE{color:green}.displayTable th a{text-align:center;color:#000}.displayTable th a:visited{text-align:center;color:#fff}.displayTable th a:hover{color:#fc0;background-color:transparent;text-align:center}.matchedUl{background-color:#beccd2}.loading-text{width:400px;position:absolute;top:calc(50% - 370px);left:calc(50% - 180px);text-align:center;color:#00f;font-size:25px}\n"] }]
|
|
909
|
+
args: [{ selector: 'app-fileupload', template: "<div class=\"mt\" style=\"background: #fff;\">\r\n\r\n <div class=\"content-frame\">\r\n <p *ngIf=\"show\" class=\"loading-text\" style=\"z-index: 9999\"> {{stepMsg}} </p>\r\n\r\n <div class=\"innerD\">\r\n <div class=\"mt-element-step\">\r\n <div class=\"row step-thin\">\r\n\r\n <div class=\"col-md-2 bg-grey mt-step-col\" [ngClass]=\"{'done':step==1 ? 'done':''}\"\r\n (click)=setSetp(1)>\r\n <div class=\"mt-step-number bg-white font-grey\">1</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Browse</div>\r\n </div>\r\n <div class=\"col-md-4 bg-grey mt-step-col\" [ngClass]=\"{'done':step==2 ? 'done':''}\"\r\n (click)=setSetp(2)>\r\n <div class=\"mt-step-number bg-white font-grey\">2</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Header Verification</div>\r\n </div>\r\n <div class=\"col-md-3 bg-grey mt-step-col\" [ngClass]=\"{'done':step==3 ? 'done':''}\"\r\n (click)=setSetp(3)>\r\n <div class=\"mt-step-number bg-white font-grey\">3</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Data Verification</div>\r\n </div>\r\n\r\n <div class=\"col-md-3 bg-grey mt-step-col\" [ngClass]=\"{'done':step==4 ? 'done':''}\"\r\n (click)=setSetp(4)>\r\n <div class=\"mt-step-number bg-white font-grey\">4</div>\r\n <div class=\"mt-step-title uppercase font-grey-cascade\">Uploading..</div>\r\n </div>\r\n </div>\r\n <div class=\"row upload\" *ngIf=\"step==1\">\r\n\r\n\r\n <div class=\"col-md-offset-3 col-md-3\" style=\"margin-top: 15px;\">\r\n <div class=\"form-group w-100\">\r\n <label class=\"col-md-4 control-label\" style=\"padding: 5px;\">File Type :</label>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"fileType\" [(ngModel)]=\"fileType\">\r\n <option value=\"\">--select--</option>\r\n <option *ngFor=\"let file of fileOptionsList\" value=\"{{file?.k}}\">{{file?.v}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"col-md-2\">\r\n <a class=\"fileinput-wrapper btn btn-default fileinput btn-primary\"\r\n style=\"background: #3a5898\"><span>Browse file</span>\r\n <input type=\"file\" class=\"fileinput btn-primary\" name=\"filename\" id=\"filename\"\r\n title=\"Browse file\" accept=\".xlsx,.csv\" (change)=\"incomingfile($event)\"\r\n style=\"left: -163.75px; top: 9px;\"></a>\r\n\r\n </div>\r\n\r\n <!-- <label class=\"control-label\">Upload File : </label>\r\n\r\n <input type=\"file\" class=\"fileinput btn-primary\" accept=\".xlsx,.csv\" name=\"filename\" id=\"filename\"\r\n (change)=\"incomingfile($event)\" title=\"Browse file\"> -->\r\n\r\n\r\n </div>\r\n\r\n <div class=\"row upload\" *ngIf=\"step==2\">\r\n <div class=\"row\">\r\n <div class=\"col-md-1\">\r\n Total Match : {{totalmatch}}\r\n </div>\r\n <div class=\"col-md-1\">\r\n Total Ignore : {{totalignore}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"row col-md-12\" style=\"overflow: auto;width: 100%;\">\r\n <table class=\"fileuploadview\">\r\n <tr>\r\n <ng-container *ngFor=\"let hdr of headerList ;\">\r\n <th [ngClass]=\"{\r\n 'match':headerAttributeDtl[hdr].attr!='' && headerAttributeDtl[hdr].ignore!='Y',\r\n 'ignore':headerAttributeDtl[hdr].ignore=='Y',\r\n 'thbg':headerAttributeDtl[hdr].attr=='' && headerAttributeDtl[hdr].ignore!='Y'\r\n }\" (click)=\"updatecolumnstatue(hdr)\">{{hdr}}\r\n </th>\r\n </ng-container>\r\n </tr>\r\n <tr>\r\n <ng-container *ngFor=\"let hdr of headerList ;\">\r\n <th>\r\n <ng-container *ngIf=\"headerAttributeDtl[hdr].attr==''\">\r\n <!-- <select class=\"select-control\" name=\"{{headerAttributeDtl[hdr].attr}}\"\r\n [(ngModel)]=\"headerAttributeDtl[hdr].attr\"\r\n (change)=\"confirmsetHeaderMapp(hdr,$event.target)\"> -->\r\n <select class=\"select-control\" name=\"{{headerAttributeDtl[hdr].attr}}\"\r\n [(ngModel)]=\"headerAttributeDtl[hdr].attr\"\r\n (change)=\"confirmsetHeaderMapp(hdr)\">\r\n <option value=\"\">--select--</option>\r\n <option *ngFor=\"let attrDtl of attrStructureDtl\"\r\n value=\"{{attrDtl?.attr}}\">{{attrDtl?.attr}}</option>\r\n </select>\r\n </ng-container>\r\n <ng-container *ngIf=\"headerAttributeDtl[hdr].attr!=''\">\r\n {{headerAttributeDtl[hdr].attr}}\r\n \r\n </ng-container>\r\n\r\n </th>\r\n </ng-container>\r\n </tr>\r\n <tr>\r\n <ng-container *ngFor=\"let hdr of headerList ;\">\r\n <th>\r\n <ng-container *ngIf=\"headerAttributeDtl[hdr].dta_typ=='d'\">\r\n <select class=\"select-control\" name=\"{{dateFormatMap[hdr]}}\"\r\n [(ngModel)]=\"dateFormatMap[hdr]\"\r\n >\r\n <option *ngFor=\"let dteFmt of dateFormatList\"\r\n value=\"{{dteFmt?.k}}\">{{dteFmt?.v}}</option>\r\n </select>\r\n </ng-container>\r\n </th>\r\n </ng-container>\r\n </tr> \r\n <tr *ngFor=\"let rowDis of defultDisplayObj ;\">\r\n <td *ngFor=\"let hdr of headerList ;\">\r\n {{rowDis[hdr]}}\r\n </td>\r\n\r\n </tr>\r\n\r\n </table>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-offset-11 col-md-1\">\r\n <button type=\"button\" *ngIf=\"fileLogIdn==0 && (filenme=='generic' || filenme=='gia_bill')\" class=\"btn btn-success pull-right\"\r\n style=\"margin: 5px\" (click)=\"SkipVerification()\">Skip</button>\r\n \r\n <button type=\"button\" *ngIf=\"fileLogIdn==0\" class=\"btn btn-success pull-right\"\r\n style=\"margin: 5px\" (click)=\"ValidateFileHeaderMapping('Y')\">Verify</button>\r\n\r\n \r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row upload \" *ngIf=\"step==3\">\r\n <div class=\"row table-responsive col-md-12\">\r\n <table cellspacing=\"10\" class=\"displayTable fileuploadview\">\r\n <ng-container *ngFor=\"let hdr of charHeaderList ;let j=index;\">\r\n\r\n <tr>\r\n <th style=\"color:white;border: 1px solid white\">\r\n {{hdr}}({{headerAttributeDtl[hdr].attr}})</th>\r\n <td [ngClass]=\"{'even':j%2==0,'odd':j%2==1}\">\r\n <div class=\"row\" style=\"display: flex;\">\r\n <ng-container\r\n *ngFor=\"let attrVal of rowdistinctDataMap[headerAttributeDtl[hdr].attr];\">\r\n <div style=\"width:160px;margin-right: 1px\"\r\n [ngClass]=\"{'matchedUl':rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val !=''}\">\r\n <ul style=\"list-style: none;text-align:left\">\r\n <li> {{attrVal}} </li>\r\n <li>\r\n <select\r\n *ngIf=\"rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val==''\"\r\n class=\"select-control\"\r\n name=\"{{rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val}}\"\r\n [(ngModel)]=\"rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val\"\r\n (change)=\"confirmHeaderDetailsMapp(headerAttributeDtl[hdr].attr,headerAttributeDtl[hdr].attr_idn,attrVal)\">\r\n <option value=\"\">--select--</option>\r\n <option\r\n *ngFor=\"let attrdtlmap of attributeDtlMap[headerAttributeDtl[hdr].attr]\"\r\n value=\"{{attrdtlmap?.val}}\">{{attrdtlmap?.display}}({{attrdtlmap?.val}}) </option>\r\n </select>\r\n\r\n <span\r\n *ngIf=\"rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val!=''\">\r\n {{rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val}} \r\n <i (click)=\"removeDetailAttrOptVal(headerAttributeDtl[hdr].attr_idn,attrVal,rowdatamapDetails[headerAttributeDtl[hdr].attr][attrVal].val,[headerAttributeDtl[hdr].attr])\" class=\"fa fa-times\" aria-hidden=\"true\" style=\"color: red;cursor: pointer;\"></i>\r\n </span>\r\n \r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </td>\r\n\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-offset-11 col-md-1\">\r\n <button type=\"button\" *ngIf=\"fileLogIdn==0 && (filenme=='generic' || filenme=='gia_bill')\" class=\"btn btn-success pull-right\"\r\n style=\"margin: 5px\" (click)=\"SkipVerificationDtl()\">Skip</button>\r\n \r\n <button type=\"button\" class=\"btn btn-success pull-right\" style=\"margin: 5px\"\r\n (click)=\"uploadFile()\" [disabled]=\"gmatchedCount!=gresultCount\">Upload</button>\r\n \r\n \r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row upload\" *ngIf=\"step==4\">\r\n\r\n <div class=\"row\">\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n\r\n <p *ngIf=\"step==4\" style=\"margin-left: 15px;color:green;font-size: 20px;text-align: left\">\r\n {{lableFile}}\r\n <span style=\"font-size: 14px;\" *ngIf=\"lastRefreshTimeFile != null\">Last\r\n refresh time :\r\n ({{lastRefreshTimeFile | date:'medium'}})</span>\r\n </p>\r\n\r\n <div class=\"progress\" style=\"margin: 15px;\">\r\n <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\"\r\n aria-valuemin=\"0\" aria-valuemax=\"100\" [ngStyle]=\"{'width':totProgressFile+'%'} \">\r\n {{totProgressFile}} %\r\n </div>\r\n </div>\r\n\r\n <p *ngIf=\"step==4 && clicked\" style=\"margin-top: 35px;\"><strong> Complete :{{sttsFile['C']}}\r\n Pending : {{sttsFile['P']}} Error :\r\n {{sttsFile['E']}} Invaild Status :\r\n {{sttsFile['I']}}\r\n Total : {{sttsFile['T']}}</strong></p>\r\n\r\n\r\n <p *ngIf=\"step==4\"\r\n style=\"margin-left: 15px;color:green;font-size: 20px;margin-top: 15px;text-align: left\">\r\n {{lable}}\r\n <span style=\"font-size: 12px;margin-left: 20px;color: black;\"\r\n *ngIf=\"lastRefreshTime != null\">Last\r\n refresh time :\r\n ({{lastRefreshTime | date:'medium'}})</span>\r\n </p>\r\n\r\n <div class=\"progress\" style=\"margin: 15px;\">\r\n <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\"\r\n aria-valuemin=\"0\" aria-valuemax=\"100\" [ngStyle]=\"{'width':totProgress+'%'} \">\r\n {{totProgress}} %\r\n </div>\r\n </div>\r\n\r\n <!-- <button type=\"button\" class=\"btn btn-success text-center\" style=\"margin: 5px\"\r\n (click)=\"checkUploadStt()\">Check\r\n Status</button> -->\r\n\r\n <p *ngIf=\"step==4 && clicked\" style=\"margin-top: 35px;\"><strong> Complete :{{stts['C']}}\r\n Pending : {{stts['P']}} Error : {{stts['E']}}\r\n Total : {{stts['T']}}</strong></p>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n<div class=\"modal\" id=\"fileUploadModal\" tabindex=\"-1\" style=\"z-index: 999999\" role=\"dialog\"\r\n aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\" data-keyboard=\"true\">\r\n <div class=\"modal-dialog \">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" #fileUploadclsbtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Add file upload option</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n\r\n <div class=\"col-md-12\">\r\n <form class=\"form-horizontal\" role=\"form\" #f=\"ngForm\" (ngSubmit)=\"onSubmit(f)\" name=\"appForm\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Name\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"nme\" name=\"nme\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Description\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"description\"\r\n name=\"description\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Type\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" name=\"typ\" [(ngModel)]=\"typ\">\r\n <option value=\"\">--select--</option>\r\n <option *ngFor=\"let file of fileTypeList\" value=\"{{file?.k}}\">\r\n {{file?.v}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Check status\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <ng-select placeholder=\"Select Status\" [options]=\"statusList\"\r\n [(ngModel)]=\"check_status\" name=\"check_status\" [multiple]=\"true\"\r\n [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <label class=\"col-md-3 control-label\">Packet status\r\n </label>\r\n <div class=\"col-md-5\">\r\n <div class=\"input-group w-100\">\r\n <ng-select placeholder=\"Select Status\" [options]=\"statusList\"\r\n [(ngModel)]=\"pkt_status\" name=\"pkt_status\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\" #fileUploadclsbtn>Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\" appAppNoDblClick\r\n (click)=\"onSubmit(f)\">Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"Cofirmmaphdr\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" (click)=\"CancelHeaderMapp()\" class=\"close\" data-dismiss=\"modal\">\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\" >Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Alert</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n Are you sure For Mapping <b>{{maphdr}}</b> To Attribute <b>{{hdrmassage}}</b> \r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" (click)=\"CancelHeaderMapp()\" data-dismiss=\"modal\" >Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\" (click)=\"setHeaderMapp();\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"Cofirmmapdtl\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" (click)=\"CancelHeaderMapp()\" class=\"close\" data-dismiss=\"modal\" >\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\" >Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Alert</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n Are you sure For Mapping <b>{{dtloptionval}}</b> To Attribute <b> {{dtlAttr}} </b> with AttributeDetail <b>{{dtlmassage}}</b> \r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\" (click)=\"CancelHeaderDetailsMapp()\">Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\" (click)=\"setHeaderDetailsMapp()\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n<button id=\"btnfileUploadModal\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#fileUploadModal\"></button>\r\n\r\n<button id=\"btnCofirmmaphdr\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#Cofirmmaphdr\"></button>\r\n<button id=\"btnCofirmmapdtl\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#Cofirmmapdtl\"></button>\r\n\r\n\r\n\r\n<!-- <div class=\"centered\">\r\n <div id=\"divSpinner\" class=\"spinner loading\">\r\n <div class=\"loading-text\">Loading ...</div>\r\n </div>\r\n\r\n <button (click)=\"test()\" id=\"btnLoadRecords\" style=\"cursor:pointer;position: absolute; top: 52%; left: 45%;\">Load Records</button>\r\n </div> -->", styles: [".actionFooter{position:fixed;bottom:0;width:100%;text-align:right;padding:10px;background:#1b1e24}.innerD{min-height:calc(100vh - 100px);background:#fff}.mt-element-step .row{margin:0}.mt-element-step .step-thin .mt-step-col{padding-top:10px;padding-bottom:10px}.mt-element-step .step-thin .mt-step-number{font-size:22px;border-radius:50%!important;float:left;margin:auto;padding:3px 14px}.mt-element-step .step-thin .mt-step-title{font-size:20px;font-weight:100;padding-left:60px;margin-top:-4px}.mt-element-step .step-thin .mt-step-content{padding-left:60px;margin-top:-5px}.mt-element-step .step-thin .done{background-color:#3b5998!important}.mt-element-step .step-thin .done .mt-step-number{color:#3b5998!important}.mt-element-step .step-thin .done .mt-step-content,.mt-element-step .step-thin .done .mt-step-title{color:#fff!important}.font-grey-cascade{color:#95a5a6!important}.font-grey{color:#e5e5e5!important}.bg-grey{background:#E5E5E5!important}.bg-white{background:#fff!important}.mt-element-step .upload{text-align:center;padding-top:15px;padding-bottom:10px}.fileuploadview{width:calc(100% - 1px)}.fileuploadview th{padding:2px 5px;font-weight:700;font-size:12px;color:#000;height:35px;white-space:nowrap;text-align:center;vertical-align:middle}.fileuploadview tr{background-color:#fff}.fileuploadview td{height:25px;white-space:nowrap;text-align:center;font-size:9pt;padding:5px;border:1px solid white}.match{background-color:#95b75d!important}.ignore{background-color:#ff7a7a!important}.thbg{background-color:#e5e5e5!important}.select-control{height:20px;font-size:12px;line-height:18px;box-shadow:none;border:1px solid #D5D5D5;background:#F9F9F9;display:block;width:100%;border-radius:4px;box-shadow:inset 0 1px 1px #00000013;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.displayTable td.odd:hover,.displayTable td.even:hover{background-color:#e3f6ff}.displayTable td.odd{background-color:#efefef}.displayTable td.even{background-color:#f8f8f8}.displayTable td a:BEFORE{color:green}.displayTable th a{text-align:center;color:#000}.displayTable th a:visited{text-align:center;color:#fff}.displayTable th a:hover{color:#fc0;background-color:transparent;text-align:center}.matchedUl{background-color:#beccd2}.loading-text{width:400px;position:absolute;top:calc(50% - 370px);left:calc(50% - 180px);text-align:center;color:#00f;font-size:25px}\n"] }]
|
|
910
910
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ToastrService }, { type: i3.NgxSpinnerService }, { type: i4.HttpClient }, { type: i5.CommanServiceService }]; }, propDecorators: { closehdrbtn: [{
|
|
911
911
|
type: ViewChild,
|
|
912
912
|
args: ['closehdrbtn']
|
|
@@ -917,4 +917,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
917
917
|
type: ViewChild,
|
|
918
918
|
args: ['Cofirmmapdtl']
|
|
919
919
|
}] } });
|
|
920
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lemxpYi9zcmMvbGliL2ZpbGUtdXBsb2FkL2ZpbGV1cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXpsaWIvc3JjL2xpYi9maWxlLXVwbG9hZC9maWxldXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0Isc0dBQXNHO0FBQ3RHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTs7Ozs7Ozs7Ozs7QUFTcEQsTUFBTSxPQUFPLG1CQUFtQjtJQXlEOUIsWUFDUyxNQUFjLEVBQ2IsS0FBcUIsRUFDckIsTUFBcUIsRUFDckIsY0FBaUMsRUFDakMsSUFBZ0IsRUFDaEIsRUFBd0I7UUFMekIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLFNBQUksR0FB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LGVBQWUsR0FBRztZQUNyQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFO1NBQ3ZDLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDOzttSUEvK0JVLG1CQUFtQjt1SEFBbkIsbUJBQW1CLDhWQ3BCaEMseTMwQkFnY1k7MkZENWFDLG1CQUFtQjtrQkFQL0IsU0FBUzsrQkFDRSxnQkFBZ0I7a1BBUUEsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNFLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDRyxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSBcIm5neC1zcGlubmVyXCI7XHJcbmltcG9ydCB7IENvb2tpZSB9IGZyb20gJ25nMi1jb29raWVzL25nMi1jb29raWVzJztcclxuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbW1hblNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbWFuLXNlcnZpY2UvY29tbWFuLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XHJcbi8vIGltcG9ydCB7IFVwbG9hZFNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnc3JjL2FwcC9jb21wb25lbnRzL2ZpbGV1cGxvYWQtbW9kdWxlL3VwbG9hZC1zZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2RhbERpcmVjdGl2ZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1maWxldXBsb2FkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZXVwbG9hZC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2Nsb3NlaGRyYnRuJykgY2xvc2VoZHJidG46IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnY2xvc2VkdGxidG4nKSBjbG9zZWR0bGJ0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdDb2Zpcm1tYXBkdGwnKSBDb2Zpcm1tYXBkdGw6IE1vZGFsRGlyZWN0aXZlO1xyXG4gIGhlYWRlciA9IHt9O1xyXG4gIGZpbGVUb1VwbG9hZDogRmlsZSA9IG51bGw7XHJcbiAgZmlsZU5hbWUgPSBcIlwiO1xyXG4gIGNEdDtcclxuICBzdGVwID0gMTtcclxuICBzaGVldERhdGEgPSBbXTtcclxuICBoZWFkZXJBdHRyaWJ1dGVEdGwgPSB7fTtcclxuICBkZWZ1bHREaXNwbGF5TGVuID0gNTtcclxuICBkZWZ1bHREaXNwbGF5T2JqID0gW107XHJcbiAgYXR0clN0cnVjdHVyZUR0bCA9IFtdO1xyXG4gIGhlYWRlckxpc3QgPSBbXTtcclxuICBoZWFkZXJwcnA7XHJcbiAgYXR0cnBycDtcclxuICB0b3RhbG1hdGNoID0gMDtcclxuICB0b3RhbGlnbm9yZSA9IDA7XHJcbiAgcGFnZURlZmluYXRpb24gPSB7fTtcclxuICByb3dkYXRhbWFwRGV0YWlscyA9IHt9O1xyXG4gIHJvd2Rpc3RpbmN0RGF0YU1hcCA9IHt9O1xyXG4gIGNoYXJIZWFkZXJMaXN0ID0gW107XHJcbiAgYXR0cmlidXRlRHRsTWFwID0ge307XHJcbiAgbWFwcFNoZWV0RGF0YSA9IFtdO1xyXG4gIGxhYmxlID0gXCJcIjtcclxuICBsYWJsZUZpbGUgPSBcIlwiO1xyXG4gIHN0YXR1c0xpc3QgPSBbXTtcclxuICBmaWxlRGV0YWlscyA9IFtdO1xyXG4gIGZpbGVUeXBlTGlzdCA9IFtdO1xyXG4gIGZpbGVPcHRpb25zTGlzdCA9IFtdO1xyXG4gIGZpbGVUeXBlO1xyXG4gIG5tZTtcclxuICB0eXA7XHJcbiAgbWRsO1xyXG4gIGRlc2NyaXB0aW9uO1xyXG4gIGNoZWNrX3N0YXR1cyA9IFtdO1xyXG4gIHBrdF9zdGF0dXMgPSBbXTtcclxuICBjb2xGb3JtYXRlID0gW107XHJcbiAgaWdub3JlRm9ybWF0ZSA9IFtdO1xyXG4gIGFsbGNvbHMgPSBbXTtcclxuICBmaWxlTG9nSWRuID0gMDtcclxuICBzaG93ID0gZmFsc2U7XHJcbiAgc3RlcE1zZyA9ICcnO1xyXG4gIHRpbWVyZmlsZTtcclxuICB0aW1lclByaWNlO1xyXG4gIGRhdGVGb3JtYXQ7XHJcbiAgZGVsaW07XHJcbiAgZGF0ZUZvcm1hdE1hcCA9IHt9O1xyXG4gIG1hcHBpbmdza2lwID0gZmFsc2U7XHJcbiAgZmlsZXR5cGU7XHJcbiAgZmlsZW5tZTtcclxuICBkYXRlRm9ybWF0TGlzdCA9IFt7IFwia1wiOiBcImRkL21tL3l5XCIsIFwidlwiOiBcImRkL21tL3l5XCIgfSxcclxuICB7IFwia1wiOiBcIm1tL2RkL3l5XCIsIFwidlwiOiBcIm1tL2RkL3l5XCIgfSxcclxuICB7IFwia1wiOiBcImRkL01vbi95eVwiLCBcInZcIjogXCJkZC9Nb24veXlcIiB9LFxyXG4gIF1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGNzOiBDb21tYW5TZXJ2aWNlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIGhhbmRsZUZpbGVJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcclxuICAgIHRoaXMuZmlsZVRvVXBsb2FkID0gZmlsZXMuaXRlbSgwKTtcclxuICAgIHRoaXMuZmlsZU5hbWUgPSBmaWxlc1swXS5uYW1lO1xyXG4gIH1cclxuICBvbkZpbGVTZWxlY3QoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGZpbGVzID0gaW5wdXQuZmlsZXM7XHJcblxyXG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCkge1xyXG5cclxuICAgICAgY29uc3QgZmlsZVRvUmVhZCA9IGZpbGVzWzBdO1xyXG5cclxuICAgICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gdGhpcy5vbkZpbGVMb2FkO1xyXG5cclxuICAgICAgZmlsZVJlYWRlci5yZWFkQXNUZXh0KGZpbGVUb1JlYWQsIFwiVVRGLThcIik7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuICBjc3ZDb250ZW50OiBzdHJpbmc7XHJcbiAgcGFyc2VkQ3N2OiBzdHJpbmdbXVtdO1xyXG4gIG9uRmlsZUxvYWQoZmlsZUxvYWRlZEV2ZW50KSB7XHJcbiAgICBjb25zdCBjc3ZTZXBhcmF0b3IgPSAnOyc7XHJcbiAgICBjb25zdCB0ZXh0RnJvbUZpbGVMb2FkZWQgPSBmaWxlTG9hZGVkRXZlbnQudGFyZ2V0LnJlc3VsdDtcclxuICAgIHRoaXMuY3N2Q29udGVudCA9IHRleHRGcm9tRmlsZUxvYWRlZDtcclxuICAgIGNvbnN0IHR4dCA9IHRleHRGcm9tRmlsZUxvYWRlZDtcclxuICAgIGNvbnN0IGNzdiA9IFtdO1xyXG4gICAgY29uc3QgbGluZXMgPSB0eHQuc3BsaXQoJ1xcbicpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKGxpbmVzWzBdKTtcclxuXHJcblxyXG4gICAgbGluZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgY29uc3QgY29sczogc3RyaW5nW10gPSBlbGVtZW50LnNwbGl0KGNzdlNlcGFyYXRvcik7XHJcbiAgICAgIGNzdi5wdXNoKGNvbHMpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBhcnNlZENzdiA9IGNzdjtcclxuXHJcbiAgICAvLyBkZW1vIG91dHB1dCBhcyBhbGVydFxyXG4gICAgdmFyIG91dHB1dDogc3RyaW5nID0gXCJcIjtcclxuICAgIGNzdi5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIG91dHB1dCArPSBcIlxcblwiO1xyXG4gICAgICB2YXIgY29sTm8gPSAwO1xyXG4gICAgICByb3cuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgIGlmIChjb2xObyA+IDApIG91dHB1dCArPSBcIiB8IFwiO1xyXG4gICAgICAgIG91dHB1dCArPSBjb2w7XHJcbiAgICAgICAgY29sTm8rKztcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgYXJyYXlCdWZmZXI6IGFueTtcclxuICBmaWxlOiBGaWxlO1xyXG4gIGluY29taW5nZmlsZShldmVudCkge1xyXG4gICAgdGhpcy5maWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IHRoaXMuZmlsZS5uYW1lO1xyXG4gICAgdGhpcy5VcGxvYWQoKTtcclxuICB9XHJcblxyXG4gIFVwbG9hZCgpIHtcclxuXHJcbiAgICB0aGlzLnNob3cgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGVwTXNnID0gJ0ZpbGUgdXBsb2FkIGluIHByb2Nlc3MuLic7XHJcbiAgICAvLyB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIHRoaXMubWFwcFNoZWV0RGF0YSA9IFtdO1xyXG4gICAgdGhpcy5zaGVldERhdGEgPSBbXTtcclxuICAgIGxldCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIGZpbGVSZWFkZXIub25sb2FkID0gKGUpID0+IHtcclxuICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZpbGVSZWFkZXIucmVzdWx0O1xyXG4gICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xyXG4gICAgICB2YXIgYXJyID0gbmV3IEFycmF5KCk7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpICE9IGRhdGEubGVuZ3RoOyArK2kpIGFycltpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0YVtpXSk7XHJcbiAgICAgIHZhciBic3RyID0gYXJyLmpvaW4oXCJcIik7XHJcbiAgICAgIHZhciB3b3JrYm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6IFwiYmluYXJ5XCIgfSk7XHJcbiAgICAgIHZhciBmaXJzdF9zaGVldF9uYW1lID0gd29ya2Jvb2suU2hlZXROYW1lc1swXTtcclxuICAgICAgdmFyIHdvcmtzaGVldCA9IHdvcmtib29rLlNoZWV0c1tmaXJzdF9zaGVldF9uYW1lXTtcclxuXHJcbiAgICAgIHZhciBzaGVldERhdGFNYXA6IGFueSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih3b3Jrc2hlZXQsIHsgaGVhZGVyOiAxIH0pO1xyXG4gICAgICBsZXQgaGVhZGVyTGlzdCA9IHNoZWV0RGF0YU1hcFswXTtcclxuICAgICAgaGVhZGVyTGlzdC5mb3JFYWNoKGhkciA9PiB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJMaXN0LnB1c2goaGRyLnRyaW0oKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNoZWV0RGF0YSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih3b3Jrc2hlZXQpO1xyXG4gICAgICB0aGlzLm1hcHBTaGVldERhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od29ya3NoZWV0KTtcclxuICAgICAgdGhpcy5maWxlTG9nSWRuID0gMDtcclxuICAgICAgY29uc29sZS5sb2coXCJ0aGlzLmhlYWRlckxpc3RcIiwgdGhpcy5oZWFkZXJMaXN0KTtcclxuXHJcbiAgICAgIHRoaXMuZ2V0SGVhZGVyTWF0Y2goKTtcclxuICAgICAgLy8gY29uc3QgZGlzdGluY3RTaCA9IFsuLi5uZXcgU2V0KHRoaXMuc2hlZXREYXRhLm1hcCh4PT54LlNIQVBFKSldO1xyXG4gICAgfVxyXG4gICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcih0aGlzLmZpbGUpO1xyXG4gIH1cclxuXHJcbiAgc2V0U2V0cChzdGVwKSB7XHJcbiAgICB0aGlzLnN0ZXAgPSBzdGVwO1xyXG5cclxuICAgIGlmIChzdGVwID09IDEpIHtcclxuICAgICAgdGhpcy5uZ09uRGVzdHJveSgpO1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRIZWFkZXJNYXRjaCgpIHtcclxuICAgIHRoaXMuc2hvdyA9IHRydWU7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICAgIHRoaXMuc3RlcE1zZyA9ICdIZWFkZXIgdmVyaWZpY2F0aW9uIGluIHByb2Nlc3MgLi4uJztcclxuICAgIC8vIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICByZXFPYmpbJ2F0dHJMaXN0J10gPSB0aGlzLmhlYWRlckxpc3Q7XHJcbiAgICByZXFPYmpbJ2ZpbGVJZG4nXSA9IHRoaXMuZmlsZVR5cGU7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9ICdsb2FkSGVhZGVyQXR0cic7XHJcbiAgICB0aGlzLmNzLmxvYWRpRmlsZShyZXFPYmosIHRoaXMuaGVhZGVyLCAnZmlsZVVwbG9hZC9sb2FkJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGwgPSByZXN1bHQuYXR0ckRldGFpbHMgfHwgJyc7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bFwiLCB0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bCk7XHJcbiAgICAgICAgbGV0IGhlYWRlckxpc3RMbnQgPSB0aGlzLmhlYWRlckxpc3QubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMudG90YWxtYXRjaCA9IHJlc3VsdC50b3RhbG1hdGNoIHx8IDA7XHJcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsICE9ICcnKSB7XHJcbiAgICAgICAgICB0aGlzLmF0dHJTdHJ1Y3R1cmVEdGwgPSByZXN1bHQuYXR0clN0cnVjdHVyZUR0bCB8fCBbXTtcclxuICAgICAgICAgIGlmICh0aGlzLnNoZWV0RGF0YS5sZW5ndGggPCA1KVxyXG4gICAgICAgICAgICB0aGlzLmRlZnVsdERpc3BsYXlMZW4gPSB0aGlzLnNoZWV0RGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGVmdWx0RGlzcGxheUxlbjsgaSsrKVxyXG4gICAgICAgICAgICB0aGlzLmRlZnVsdERpc3BsYXlPYmpbaV0gPSB0aGlzLnNoZWV0RGF0YVtpXTtcclxuXHJcbiAgICAgICAgICBsZXQgaWdub3JlQ29sdW1uTHN0ID0gcmVzdWx0Lmlnbm9yZV9jb2x1bW4gfHwgW107XHJcbiAgICAgICAgICBpZ25vcmVDb2x1bW5Mc3QuZm9yRWFjaChoZHJEc2MgPT4ge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkckRzY10gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyRHNjXS5pZ25vcmUgPSAnWSc7XHJcbiAgICAgICAgICAgICAgaGVhZGVyTGlzdExudC0tO1xyXG4gICAgICAgICAgICAgIHRoaXMudG90YWxpZ25vcmUrKztcclxuICAgICAgICAgICAgICBpZiAodGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyRHNjXS5hdHRyICE9IFwiXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsbWF0Y2gtLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBsZXQgaXNEYXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgdGhpcy5oZWFkZXJMaXN0LmZvckVhY2goaGRyID0+IHtcclxuXHJcbiAgICAgICAgICAgIGxldCBoZHJBdHRyID0gdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXSB8fCB7fTtcclxuICAgICAgICAgICAgaWYgKGhkckF0dHIuZHRhX3R5cCA9PSAnZCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmRhdGVGb3JtYXRNYXBbaGRyXSA9IHRoaXMuZGF0ZUZvcm1hdDtcclxuICAgICAgICAgICAgICBpc0RhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy50b3RhbG1hdGNoID09IGhlYWRlckxpc3RMbnQgJiYgaXNEYXRlID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuVmFsaWRhdGVGaWxlSGVhZGVyTWFwcGluZygnTicpO1xyXG4gICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zdGVwID0gMztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXAgPSAyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwiU29tZSBwcm9ibGVtIGluIEZpbGUgSGVhZGVyIE1hdGNoaW5nXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL3RoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIC8vdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgLy8gdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgdXBkYXRlY29sdW1uc3RhdHVlKGhkcikge1xyXG5cclxuICAgIHZhciBpc0lnbm9yZSA9IHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uaWdub3JlIHx8ICcnO1xyXG4gICAgaWYgKGlzSWdub3JlID09ICdZJykge1xyXG4gICAgICB0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmlnbm9yZSA9ICdOJ1xyXG4gICAgICB0aGlzLnRvdGFsaWdub3JlLS07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvdGFsaWdub3JlKys7XHJcbiAgICAgIHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uaWdub3JlID0gJ1knO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2codGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXSk7XHJcbiAgfVxyXG4gIG1hcGhkcjtcclxuICBoZHJtYXNzYWdlO1xyXG4gIGNvbmZpcm1zZXRIZWFkZXJNYXBwKGhkcikge1xyXG4gICAgdGhpcy5tYXBoZHIgPSBoZHI7XHJcbiAgICBsZXQgYXR0ciA9IHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cjtcclxuICAgIHRoaXMuYXR0clN0cnVjdHVyZUR0bC5mb3JFYWNoKGVsZSA9PiB7XHJcblxyXG4gICAgICBpZiAoZWxlLmF0dHIgPT0gYXR0cikge1xyXG4gICAgICAgIHRoaXMuaGRybWFzc2FnZSA9IHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0ciArIFwiKFwiICsgZWxlLnByaW50ICsgXCIpXCI7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bkNvZmlybW1hcGhkcicpLmNsaWNrKCk7XHJcbiAgfVxyXG4gIENhbmNlbEhlYWRlck1hcHAoKSB7XHJcbiAgICB0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bFt0aGlzLm1hcGhkcl0uYXR0ciA9IFwiXCI7XHJcbiAgfVxyXG4gIHNldEhlYWRlck1hcHAoKSB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICAgIGxldCBhdHRyID0gdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbdGhpcy5tYXBoZHJdLmF0dHIgfHwgJyc7XHJcbiAgICBpZiAoYXR0ciAhPSAnJykge1xyXG4gICAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2ZpbGVVcGxvYWQnO1xyXG4gICAgICByZXFPYmpbJ29wdGlvbmFWYWwnXSA9IHRoaXMubWFwaGRyXHJcbiAgICAgIHJlcU9ialsnYXR0ciddID0gYXR0cjtcclxuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gJ2FkZEhlYWRlckF0dHInO1xyXG4gICAgICB0aGlzLmNzLmxvYWRpRmlsZShyZXFPYmosIHRoaXMuaGVhZGVyLCAnZmlsZVVwbG9hZC9sb2FkJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQgfHwge307XHJcbiAgICAgICAgICBsZXQgaGRyRHRsID0gcmVzdWx0LmF0dHJEZXRhaWxzW3RoaXMubWFwaGRyXSB8fCAnJztcclxuICAgICAgICAgIGlmIChoZHJEdGwgIT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy50b3RhbG1hdGNoKys7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW3RoaXMubWFwaGRyXSA9IGhkckR0bDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW3RoaXMubWFwaGRyXSA9IHtcclxuICAgICAgICAgICAgICBcImF0dHJcIjogXCJcIixcclxuICAgICAgICAgICAgICBcInByaW50XCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgXCJzcnRcIjogXCJcIixcclxuICAgICAgICAgICAgICBcImR0YV90eXBcIjogXCJcIixcclxuICAgICAgICAgICAgICBcImF0dHJfaWRuXCI6IFwiXCJcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwiTWFwcGluZyBhdHRyaWJ1dGUgaXMgZW1wdHkgcGxlYXNlIHJldHJ5LlwiKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBnbWF0Y2hlZENvdW50ID0gMDtcclxuICBncmVzdWx0Q291bnQgPSAwO1xyXG4gIHNldFJvd0RhdGFNYXBwKCkge1xyXG4gICAgaWYgKCF0aGlzLm1hcHBpbmdza2lwKSB7XHJcbiAgICAgIGxldCByb3dNYXRjaENvdW50ID0gMDtcclxuICAgICAgdGhpcy5jaGFySGVhZGVyTGlzdCA9IFtdO1xyXG4gICAgICBkZWJ1Z2dlclxyXG4gICAgICB0aGlzLmhlYWRlckxpc3QuZm9yRWFjaChoZHIgPT4ge1xyXG5cclxuICAgICAgICBsZXQgYXR0ciA9IHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0ciB8fCAnJztcclxuICAgICAgICBsZXQgYXR0clR5cGUgPSB0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmR0YV90eXAgfHwgJyc7XHJcbiAgICAgICAgbGV0IGlzSWdub3JlID0gdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5pZ25vcmUgfHwgJyc7XHJcbiAgICAgICAgaWYgKGF0dHIgIT0gJycgJiYgaXNJZ25vcmUgIT0gJ04nICYmIGF0dHJUeXBlID09ICdjJykge1xyXG4gICAgICAgICAgZGVidWdnZXJcclxuICAgICAgICAgIHZhciBkaXN0aW5jdGxpc3QgPSBBcnJheS5mcm9tKG5ldyBTZXQodGhpcy5zaGVldERhdGEubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1baGRyXSkpKTtcclxuICAgICAgICAgIGRpc3RpbmN0bGlzdCA9IGRpc3RpbmN0bGlzdC5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgfSk7XHJcbiAgICAgICAgICBpZiAoZGlzdGluY3RsaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dkaXN0aW5jdERhdGFNYXBbYXR0cl0gPSBkaXN0aW5jdGxpc3Q7XHJcbiAgICAgICAgICAgIHJvd01hdGNoQ291bnQgPSByb3dNYXRjaENvdW50ICsgZGlzdGluY3RsaXN0Lmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5nbWF0Y2hlZENvdW50ID0gcm93TWF0Y2hDb3VudDtcclxuICAgICAgICAgICAgdGhpcy5jaGFySGVhZGVyTGlzdC5wdXNoKGhkcik7XHJcbiAgICAgICAgICAgIGxldCBhdHRyRGV0YWlscyA9IHRoaXMuYXR0clN0cnVjdHVyZUR0bC5maW5kKGF0dHJkdGwgPT4gYXR0cmR0bC5hdHRyID09IGF0dHIpIHx8IHt9O1xyXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZUR0bE1hcFthdHRyXSA9IGF0dHJEZXRhaWxzLnBycExpc3QgfHwgW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICB9KTtcclxuICAgICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9ICdmaWxlVXBsb2FkJztcclxuICAgICAgcmVxT2JqWydhdHRyTWFwJ10gPSB0aGlzLnJvd2Rpc3RpbmN0RGF0YU1hcDtcclxuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gJ2xvYWRIZWFkZXJBdHRyRHRsJztcclxuICAgICAgdGhpcy5jcy5sb2FkaUZpbGUocmVxT2JqLCB0aGlzLmhlYWRlciwgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhyb3dNYXRjaENvdW50KTtcclxuICAgICAgICAgIGRlYnVnZ2VyO1xyXG5cclxuICAgICAgICAgIHRoaXMucm93ZGF0YW1hcERldGFpbHMgPSByZXN1bHQuYXR0ckRldGFpbHMgfHwge307XHJcbiAgICAgICAgICB0aGlzLmdyZXN1bHRDb3VudCA9IHJlc3VsdC50b3RhbG1hdGNoO1xyXG4gICAgICAgICAgdGhpcy5zdGVwID0gMztcclxuICAgICAgICAgIGlmIChyb3dNYXRjaENvdW50ID09IHJlc3VsdC50b3RhbG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcCA9IDQ7XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZSgpO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcInBsZWFzZSB2ZXJpZnkgZGF0YSBtYXBwaW5nLlwiKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwic29tZXRoaW5nIGdvIHdyb25nIGluIHJvdyBkYXRhLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdGVwID0gNDtcclxuICAgICAgdGhpcy51cGxvYWRGaWxlKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBkdGxBdHRyO1xyXG4gIGR0bGF0dHJfaWRuO1xyXG4gIGR0bG9wdGlvbnZhbDtcclxuICBkdGxtYXNzYWdlO1xyXG4gIGNvbmZpcm1IZWFkZXJEZXRhaWxzTWFwcChhdHRyLCBhdHRyX2lkbiwgb3B0aW9udmFsKSB7XHJcbiAgICB0aGlzLmR0bEF0dHIgPSBhdHRyO1xyXG4gICAgdGhpcy5kdGxhdHRyX2lkbiA9IGF0dHJfaWRuO1xyXG4gICAgdGhpcy5kdGxvcHRpb252YWwgPSBvcHRpb252YWw7XHJcbiAgICBsZXQgdmFsID0gdGhpcy5yb3dkYXRhbWFwRGV0YWlsc1t0aGlzLmR0bEF0dHJdW3RoaXMuZHRsb3B0aW9udmFsXS52YWw7XHJcbiAgICBsZXQgYXR0cmlidXRlRHRsTGlzdCA9IHRoaXMuYXR0cmlidXRlRHRsTWFwW2F0dHJdO1xyXG4gICAgYXR0cmlidXRlRHRsTGlzdC5mb3JFYWNoKGVsZSA9PiB7XHJcblxyXG4gICAgICBpZiAoZWxlLnZhbCA9PSB2YWwpIHtcclxuICAgICAgICB0aGlzLmR0bG1hc3NhZ2UgPSB2YWwgKyBcIihcIiArIGVsZS5wcmludCArIFwiKVwiO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG5Db2Zpcm1tYXBkdGwnKS5jbGljaygpO1xyXG5cclxuICB9XHJcblxyXG4gIENhbmNlbEhlYWRlckRldGFpbHNNYXBwKCkge1xyXG4gICAgdGhpcy5yb3dkYXRhbWFwRGV0YWlsc1t0aGlzLmR0bEF0dHJdW3RoaXMuZHRsb3B0aW9udmFsXS52YWwgPSBcIlwiO1xyXG4gIH1cclxuICBzZXRIZWFkZXJEZXRhaWxzTWFwcCgpIHtcclxuICAgIGxldCBhdHRyRHRsVmFsID0gdGhpcy5yb3dkYXRhbWFwRGV0YWlsc1t0aGlzLmR0bEF0dHJdW3RoaXMuZHRsb3B0aW9udmFsXS52YWwgfHwgJyc7XHJcbiAgICBpZiAoYXR0ckR0bFZhbCAhPSAnJykge1xyXG4gICAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2ZpbGVVcGxvYWQnO1xyXG4gICAgICByZXFPYmpbJ29wdGlvbmFWYWwnXSA9IHRoaXMuZHRsb3B0aW9udmFsXHJcbiAgICAgIHJlcU9ialsnYXR0cl9pZG4nXSA9IHRoaXMuZHRsYXR0cl9pZG47XHJcbiAgICAgIHJlcU9ialsnYXR0ciddID0gdGhpcy5kdGxBdHRyO1xyXG4gICAgICByZXFPYmpbJ2F0dHJWYWwnXSA9IGF0dHJEdGxWYWw7XHJcbiAgICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gJ2FkZERldGFpbEF0dHInO1xyXG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgICAgdGhpcy5jcy5sb2FkaUZpbGUocmVxT2JqLCB0aGlzLmhlYWRlciwgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImFkZERldGFpbEF0dHJcIiwgcmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICB0aGlzLmdyZXN1bHRDb3VudCsrO1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdCB8fCB7fTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdC5hdHRyRGV0YWlscyk7XHJcbiAgICAgICAgICBsZXQgYXR0ckRldGFpbHMgPSByZXN1bHQuYXR0ckRldGFpbHMgfHwge31cclxuICAgICAgICAgIHRoaXMucm93ZGF0YW1hcERldGFpbHNbdGhpcy5kdGxBdHRyXVt0aGlzLmR0bG9wdGlvbnZhbF0gPSBhdHRyRGV0YWlsc1t0aGlzLmR0bG9wdGlvbnZhbF07XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwiTWFwcGluZyBhdHRyaWJ1dGUgaXMgZW1wdHkgcGxlYXNlIHJldHJ5LlwiKTtcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIG9uU3VibWl0KGZvcm1WYWwpIHtcclxuICAgIHZhciB0ID0gT2JqZWN0LmtleXMoZm9ybVZhbC5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1WYWwuZm9ybS5nZXQoZmllbGQpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNhdmVGaWxlT3B0aW9uKGZvcm1WYWwudmFsdWUpO1xyXG4gIH1cclxuICBzYXZlRmlsZU9wdGlvbihmcm12YWxzKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9iaiA9IHsgLi4uZnJtdmFscywgY29sdW1uX2Zvcm1hdDogdGhpcy5jb2xGb3JtYXRlLCBpZ25vcmVfY29sdW1uOiB0aGlzLmlnbm9yZUZvcm1hdGUgfTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2ZpbGVVcGxvYWQnO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSAnYWRkRmlsZU9wdGlvbic7XHJcbiAgICB0aGlzLmNzLmxvYWRpRmlsZShyZXFPYmosIHRoaXMuaGVhZGVyLCAnZmlsZVVwbG9hZC9sb2FkJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdCB8fCB7fTtcclxuICAgICAgICB0aGlzLmZpbGVPcHRpb25zTGlzdCA9IHJlc3VsdC5maWxlT3B0aW9uc0xpc3Q7XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZSA9IHJlc3VsdC5maWxlX2lkbjtcclxuICAgICAgICB0aGlzLlZhbGlkYXRlRmlsZUhlYWRlck1hcHBpbmcoJ04nKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgYWRkRmlsZUxvZyhmaWxlSWRuKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICByZXFPYmpbJ2ZpbGVfaWRuJ10gPSBmaWxlSWRuO1xyXG4gICAgcmVxT2JqWydmaWxlX3N0YXR1cyddID0gXCJIZWFkZXIgSW5zZXJ0ZWRcIjtcclxuICAgIHJlcU9ialsndmFsaWRhdGlvbl9yZW1hcmtzJ10gPSBcIkhlYWRlciB2YWxpZGF0ZWRcIjtcclxuICAgIHJlcU9ialsnaGVhZGVyX3JvdyddID0gdGhpcy5hbGxjb2xzO1xyXG4gICAgcmVxT2JqWydoZWFkZXJfYXR0cl9yb3cnXSA9IHRoaXMuY29sRm9ybWF0ZTtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gJ2FkZEZpbGVMb2cnO1xyXG4gICAgdGhpcy5jcy5sb2FkaUZpbGUocmVxT2JqLCB0aGlzLmhlYWRlciwgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQgfHwge307XHJcbiAgICAgICAgdGhpcy5maWxlTG9nSWRuID0gcmVzdWx0LmZpbGVfbG9nX2lkbjtcclxuICAgICAgICB0aGlzLnNldFJvd0RhdGFNYXBwKCk7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIkhlYWRlciB2YWxpZGF0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIFZhbGlkYXRlRmlsZUhlYWRlck1hcHBpbmcoZm9ybWF0U2F2ZSkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcblxyXG4gICAgdGhpcy5zaG93ID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RlcE1zZyA9ICdIZWFkZXIgdmVyaWZpY2F0aW9uIGluIHByb2Nlc3MgLi4uJztcclxuICAgIHRoaXMuY29sRm9ybWF0ZSA9IFtdO1xyXG4gICAgdGhpcy5pZ25vcmVGb3JtYXRlID0gW107XHJcbiAgICB0aGlzLmFsbGNvbHMgPSBbXTtcclxuICAgIGxldCBpc1ZhbGlkYXRlID0gdHJ1ZTtcclxuICAgIHRoaXMuaGVhZGVyTGlzdC5mb3JFYWNoKGhkciA9PiB7XHJcbiAgICAgIGxldCBoZHJEdGwgPSB0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdIHx8ICcnXHJcbiAgICAgIGlmIChoZHJEdGwuYXR0ciA9PSAnJyAmJiBoZHJEdGwuaWdub3JlICE9ICdZJykge1xyXG4gICAgICAgIGlzVmFsaWRhdGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaGRyRHRsLmF0dHIgIT0gJycgJiYgaGRyRHRsLmlnbm9yZSAhPSAnTicpIHtcclxuICAgICAgICB0aGlzLmNvbEZvcm1hdGUucHVzaChoZHJEdGwuYXR0cik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGhkckR0bC5pZ25vcmUgPT0gJ1knKSB7XHJcbiAgICAgICAgdGhpcy5pZ25vcmVGb3JtYXRlLnB1c2goaGRyKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFsbGNvbHMucHVzaChoZHIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGlzVmFsaWRhdGUgJiYgKHRoaXMuZmlsZVR5cGUgPT0gbnVsbCB8fCB0aGlzLmZpbGVUeXBlID09IHVuZGVmaW5lZCB8fCB0aGlzLmZpbGVUeXBlID09IFwiXCIpKSB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG5cclxuICAgICAgdGhpcy5zdGVwTXNnID0gXCJcIjtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bmZpbGVVcGxvYWRNb2RhbCcpLmNsaWNrKCk7XHJcbiAgICAgIHRoaXMuc3RlcCA9IDI7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICBpZiAoaXNWYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmIChmb3JtYXRTYXZlID09ICdZJykge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVmaWxlT3B0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkRmlsZUxvZyh0aGlzLmZpbGVUeXBlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcIlBsZWFzZSBzcGVjaWZ5IG1hcHBpbmcgb3IgbWFya2UgYXMgaWdub3JlIFwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93ID0gZmFsc2U7XHJcblxyXG5cclxuICB9XHJcbiAgaGRySWRuO1xyXG4gIHVwZGF0ZWZpbGVPcHRpb24oKSB7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9ICdmaWxlVXBsb2FkJztcclxuICAgIHJlcU9ialsnZmlsZUlkbiddID0gdGhpcy5maWxlVHlwZTtcclxuICAgIHJlcU9ialsnY29sdW1uX2Zvcm1hdCddID0gdGhpcy5jb2xGb3JtYXRlO1xyXG4gICAgcmVxT2JqWydpZ25vcmVfY29sdW1uJ10gPSB0aGlzLmlnbm9yZUZvcm1hdGU7XHJcblxyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSAndXBkYXRlQ29sdW1uRm9ybWF0JztcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgdGhpcy5jcy5sb2FkaUZpbGUocmVxT2JqLCB0aGlzLmhlYWRlciwgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgfVxyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRGaWxlKCkge1xyXG4gICAgdGhpcy5kYXRlRm9ybWF0ID0gdGhpcy5kYXRlRm9ybWF0IHx8ICdkZC9tbS95eSc7XHJcbiAgICB0aGlzLmRlbGltID0gdGhpcy5kZWxpbSB8fCAnLyc7XHJcbiAgICB0aGlzLnNob3cgPSB0cnVlO1xyXG4gICAgbGV0IGRhdGVWYWxpZCA9IHRydWU7XHJcbiAgICBsZXQgbWFzc2FnZSA9IFwiXCI7XHJcblxyXG4gICAgaWYgKCF0aGlzLm1hcHBpbmdza2lwKSB7XHJcbiAgICAgIHRoaXMuc3RlcE1zZyA9IFwiRGF0YSB2ZXJpZmljYXRpb24gaW4gcHJvY2VzcyAuLi5cIjtcclxuICAgICAgdGhpcy5oZWFkZXJMaXN0LmZvckVhY2goaGRyID0+IHtcclxuICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgIGxldCBhdHRyID0gdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyIHx8ICcnO1xyXG4gICAgICAgIGxldCBhdHRyVHlwZSA9IHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uZHRhX3R5cCB8fCAnJztcclxuICAgICAgICBsZXQgaXNJZ25vcmUgPSB0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmlnbm9yZSB8fCAnJztcclxuICAgICAgICBpZiAoaXNJZ25vcmUgPT0gJ1knKSB7XHJcbiAgICAgICAgICB0aGlzLm1hcHBTaGVldERhdGEubWFwKChyb3dEYXRhLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm1hcHBTaGVldERhdGFbaV1baGRyXTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoYXR0clR5cGUgPT0gJ2MnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFwcFNoZWV0RGF0YS5tYXAoKHJvd0RhdGEsIGkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5jaGFySGVhZGVyTGlzdC5pbmRleE9mKGhkcikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGxldCBhdHRyZHRsVmFsID0gcm93RGF0YVtoZHJdIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF0dHJkdGxWYWwgIT0gJycpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGxldCBhdHRyRHRsTWFwVmFsID0gdGhpcy5yb3dkYXRhbWFwRGV0YWlsc1thdHRyXVthdHRyZHRsVmFsXS5zcnQ7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWFwcFNoZWV0RGF0YVtpXVthdHRyXSA9IGF0dHJEdGxNYXBWYWwudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhdHRyICE9IGhkcilcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubWFwcFNoZWV0RGF0YVtpXVtoZHJdXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgfSBlbHNlIGlmIChhdHRyVHlwZSA9PSAnbicpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXBwU2hlZXREYXRhLm1hcCgocm93RGF0YSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBhdHRyZHRsVmFsID0gcm93RGF0YVtoZHJdIHx8ICcnO1xyXG4gICAgICAgICAgICAgIGlmIChhdHRyZHRsVmFsICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgICAgICAgICAgYXR0cmR0bFZhbCA9IGF0dHJkdGxWYWwucmVwbGFjZSgvW14wLTkuLV0vZywgXCJcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcHBTaGVldERhdGFbaV1bYXR0cl0gPSBhdHRyZHRsVmFsLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChhdHRyICE9IGhkcilcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm1hcHBTaGVldERhdGFbaV1baGRyXVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJUeXBlID09ICdkJykge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tYXBwU2hlZXREYXRhLm1hcCgocm93RGF0YSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgICAgICAgbGV0IGF0dHJkdGxWYWwgPSByb3dEYXRhW2hkcl0gfHwgJyc7XHJcbiAgICAgICAgICAgICAgbGV0IGR0RnJtID0gdGhpcy5kYXRlRm9ybWF0TWFwW2hkcl0gfHwgJ2RkL21tL3l5JztcclxuICAgICAgICAgICAgICBpZiAoYXR0cmR0bFZhbCAhPSAnJylcclxuICAgICAgICAgICAgICAgIGF0dHJkdGxWYWwgPSB0aGlzLmNzLmRhdGVWYWxpZGF0aW9uKGF0dHJkdGxWYWwsIGR0RnJtKTtcclxuICAgICAgICAgICAgICBpZiAoYXR0cmR0bFZhbCA9PSAnaW52YWlsZCcpIHtcclxuICAgICAgICAgICAgICAgIGRhdGVWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgbWFzc2FnZSA9IFwiUGxlYXNlIGNoZWNrIERhdGUgOlwiICsgcm93RGF0YVtoZHJdICsgXCIgRGF0ZSBGb3JtYXQgOlwiICsgZHRGcm07XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLm1hcHBTaGVldERhdGFbaV1bYXR0cl0gPSBhdHRyZHRsVmFsLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgaWYgKGF0dHIgIT0gaGRyKVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubWFwcFNoZWV0RGF0YVtpXVtoZHJdXHJcblxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJUeXBlID09ICd0Jykge1xyXG4gICAgICAgICAgICB0aGlzLm1hcHBTaGVldERhdGEubWFwKChyb3dEYXRhLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGF0dHJkdGxWYWwgPSByb3dEYXRhW2hkcl0gfHwgJyc7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMubWFwcFNoZWV0RGF0YVtpXVthdHRyXSA9IGF0dHJkdGxWYWwudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICBpZiAoYXR0ciAhPSBoZHIpXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5tYXBwU2hlZXREYXRhW2ldW2hkcl1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZGF0ZVZhbGlkKSB7XHJcbiAgICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgICAgcmVxT2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7Ly90aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbmFtZSddO1xyXG4gICAgICByZXFPYmpbJ2ZpbGVfbG9nX2lkbiddID0gdGhpcy5maWxlTG9nSWRuO1xyXG4gICAgICByZXFPYmpbJ2F0dHJfZGF0YSddID0gdGhpcy5tYXBwU2hlZXREYXRhO1xyXG4gICAgICByZXFPYmpbJ2luX2RhdGEnXSA9IHRoaXMuc2hlZXREYXRhO1xyXG4gICAgICByZXFPYmpbJ2RhdGVmb3JtYXQnXSA9IHRoaXMuZGF0ZUZvcm1hdE1hcDtcclxuICAgICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICAgIGxldCB1cmwgPSBcImZpbGVVcGxvYWQvbG9hZFwiO1xyXG4gICAgICBpZiAodGhpcy5tZGwgPT0gJ2lud2FyZCcpIHtcclxuICAgICAgICB1cmwgPSAnaW53YXJkL2xvYWRGaWxlJztcclxuICAgICAgICByZXFPYmpbJ2lud2FyZF9pZG4nXSA9IHRoaXMuaW53YXJkX2lkbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY29uc29sZS5sb2cocmVxT2JqKTtcclxuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaGVhZGVyKTtcclxuXHJcbiAgICAgIHRoaXMuY3MubG9hZGlGaWxlKHJlcU9iaiwgdGhpcy5oZWFkZXIsIHVybCkudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0IHx8IHt9O1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zdGVwID0gNDtcclxuICAgICAgICAgIHRoaXMuZmlsZUxvZ0lkbiA9IHJlc3VsdC5maWxlX2xvZ19pZG47XHJcbiAgICAgICAgICB0aGlzLmhkcklkbiA9IHJlc3VsdC5oZHJJZG47XHJcbiAgICAgICAgICB0aGlzLmdldFByb2dyZXNzRmlsZSh0aGlzLmZpbGVMb2dJZG4pO1xyXG4gICAgICAgICAgdGhpcy5sYWJsZUZpbGUgPSBcIkZpbGUgU2VxdWVuY2UgTm8uIFwiICsgdGhpcy5maWxlTG9nSWRuICsgXCIgVXBsb2FkaW5nIGluIHByb2dyZXNzLi4uXCI7XHJcbiAgICAgICAgICAvLyBzZXQgZmlsZSBpZCB0byBsb2NhbCBzdG9yYWdlXHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXBsb2FkZWRGaWxlSWQnLCByZXN1bHQuZmlsZV9sb2dfaWRuKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmxhYmxlID0gXCJQcmljaW5nIFNlcXVlbmNlIE5vLiBcIiArIHRoaXMuaGRySWRuICsgXCIgUHJpY2UgY2FsY3VsYXRpb25zIGluIHByb2dyZXNzLi4uXCI7XHJcblxyXG4gICAgICAgICAgdGhpcy5nZXRQcm9ncmVzc1ByaWNlKHRoaXMuaGRySWRuKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihtYXNzYWdlKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKFwibWFwcFNoZWV0RGF0YVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLm1hcHBTaGVldERhdGEpKTtcclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5zaGVldERhdGFcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGVldERhdGEpKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZU1hcHBpbmcoaGRyT2JqLCBoZHIsIGF0dHIpIHtcclxuICAgIHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uaWdub3JlID0gJ1knO1xyXG4gICAgdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyID0gJyc7XHJcbiAgICB0aGlzLnJlbW92ZUF0dHJPcHRWYWwoYXR0ciwgaGRyKTtcclxuICB9XHJcblxyXG5cclxuICByZW1vdmVBdHRyT3B0VmFsKGF0dHIsIG9wdGlvbmFWYWwpIHtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2ZpbGVVcGxvYWQnO1xyXG4gICAgcmVxT2JqWydhdHRyJ10gPSBhdHRyO1xyXG4gICAgcmVxT2JqWydvcHRpb25hVmFsJ10gPSBvcHRpb25hVmFsO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9ICdyZW1vdmVBdHRyT3B0VmFsJztcclxuICAgIHRoaXMuY3MubG9hZGlGaWxlKHJlcU9iaiwgdGhpcy5oZWFkZXIsICdmaWxlVXBsb2FkL2xvYWQnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVycm9yKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHJlbW92ZURldGFpbEF0dHJPcHRWYWwoYXR0cklkbiwgb3B0aW9uYVZhbCwgdmFsLCBoZHJBdHRyKSB7XHJcbiAgICB0aGlzLnJvd2RhdGFtYXBEZXRhaWxzW2hkckF0dHJdW29wdGlvbmFWYWxdLnZhbCA9ICcnO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICByZXFPYmpbJ2F0dHJWYWwnXSA9IHZhbDtcclxuICAgIHJlcU9ialsnb3B0aW9uYVZhbCddID0gb3B0aW9uYVZhbDtcclxuICAgIHJlcU9ialsnYXR0cl9pZG4nXSA9IGF0dHJJZG47XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gJ3JlbW92ZUF0dHJPcHRWYWwnO1xyXG4gICAgdGhpcy5jcy5sb2FkaUZpbGUocmVxT2JqLCB0aGlzLmhlYWRlciwgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICBzdHRzRmlsZSA9IHt9XHJcbiAgZ2V0UHJvZ3Jlc3NGaWxlKGZpbGVMb2dJZG4pIHtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2ZpbGVVcGxvYWQnO1xyXG4gICAgcmVxT2JqWydmaWxlX2xvZ19pZG4nXSA9IGZpbGVMb2dJZG47Ly90aGlzLmZpbGVMb2dJZG47XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gJ2dldEZpbGVMb2dTdGF0dXMnO1xyXG4gICAgdGhpcy5jcy5sb2FkaUZpbGUocmVxT2JqLCB0aGlzLmhlYWRlciwgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLmNsaWNrZWQgPSB0cnVlO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQgfHwge307XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgICB0aGlzLnN0dHNGaWxlWydDJ10gPSByZXN1bHRbJ0MnXTtcclxuICAgICAgICB0aGlzLnN0dHNGaWxlWydQJ10gPSByZXN1bHRbJ1AnXTtcclxuICAgICAgICB0aGlzLnN0dHNGaWxlWydFJ10gPSByZXN1bHRbJ0UnXTtcclxuICAgICAgICB0aGlzLnN0dHNGaWxlWydUJ10gPSByZXN1bHRbJ1QnXTtcclxuICAgICAgICB0aGlzLnN0dHNGaWxlWydJJ10gPSByZXN1bHRbJ0knXTtcclxuICAgICAgICB0aGlzLnN0ZXAgPSA0O1xyXG4gICAgICAgIHRoaXMudG90UHJvZ3Jlc3NGaWxlID0gTWF0aC5jZWlsKHBhcnNlRmxvYXQocmVzdWx0WydDJ10pICogMTAwIC8gcGFyc2VGbG9hdChyZXN1bHRbJ1QnXSkpO1xyXG4gICAgICAgIHRoaXMucmVjYWxsRmlsZShmaWxlTG9nSWRuKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRvdFByb2dyZXNzKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAvLyB0aGlzLmZsYXNoTWVzc2FnZXNTZXJ2aWNlLnNob3cocmVzcG9uc2UubWVzc2FnZSwgeyBjc3NDbGFzczogJ2FsZXJ0LXN1Y2Nlc3MnLCB0aW1lb3V0OiAzMDAwIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vIGNoZWNrVXBsb2FkU3R0KCkge1xyXG4gIC8vICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgLy8gICBsZXQgcmVxT2JqID0ge307XHJcbiAgLy8gICByZXFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1uYW1lJ107XHJcbiAgLy8gICByZXFPYmpbJ2ZpbGVfbG9nX2lkbiddID0gdGhpcy5maWxlTG9nSWRuO1xyXG4gIC8vICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgLy8gICB0aGlzLnVzLmRhdGEocmVxT2JqLCAnZ2V0RmlsZUxvZ1N0YXR1cycsICdmaWxlVXBsb2FkL2xvYWQnKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gIC8vICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gIC8vICAgICAgIHRoaXMuY2xpY2tlZCA9IHRydWU7XHJcbiAgLy8gICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdCB8fCB7fTtcclxuICAvLyAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gIC8vICAgICAgIHRoaXMuc3R0c1snQyddID0gcmVzdWx0WydDJ107XHJcbiAgLy8gICAgICAgdGhpcy5zdHRzWydQJ10gPSByZXN1bHRbJ1AnXTtcclxuICAvLyAgICAgICB0aGlzLnN0dHNbJ0UnXSA9IHJlc3VsdFsnRSddO1xyXG4gIC8vICAgICAgIHRoaXMuc3R0c1snVCddID0gcmVzdWx0WydUJ107XHJcbiAgLy8gICAgICAgdGhpcy5zdGVwID0gNDtcclxuICAvLyAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAvLyAgICAgICB0aGlzLmZsYXNoTWVzc2FnZXNTZXJ2aWNlLnNob3cocmVzcG9uc2UubWVzc2FnZSwgeyBjc3NDbGFzczogJ2FsZXJ0LXN1Y2Nlc3MnLCB0aW1lb3V0OiAzMDAwIH0pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gIC8vICAgfSwgZXJyb3IgPT4ge1xyXG4gIC8vICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAvLyAgICAgdGhpcy5mbGFzaE1lc3NhZ2VzU2VydmljZS5zaG93KGVycm9yLCB7IGNzc0NsYXNzOiAnYWxlcnQtZGFuZ2VyJywgdGltZW91dDogMzAwMCB9KTtcclxuICAvLyAgIH0pO1xyXG5cclxuICAvLyB9XHJcblxyXG4gIHN0dHMgPSB7fTtcclxuICBjbGlja2VkID0gZmFsc2U7XHJcbiAgdG90UHJvZ3Jlc3MgPSAwO1xyXG4gIHRvdFByb2dyZXNzRmlsZSA9IDA7XHJcbiAgZ2V0UHJvZ3Jlc3NQcmljZShoZHJJZG4pIHtcclxuICAgIC8vIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICByZXFPYmpbJ3NlcU5vJ10gPSBoZHJJZG47Ly9cIjg0NlwiOy8vdGhpcy5maWxlTG9nSWRuO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9ICdnZXRQcmljZVN0YXR1cyc7XHJcbiAgICB0aGlzLmNzLmxvYWRpRmlsZShyZXFPYmosIHRoaXMuaGVhZGVyLCAnZmlsZVVwbG9hZC9sb2FkJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMuY2xpY2tlZCA9IHRydWU7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdCB8fCB7fTtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuc3R0c1snQyddID0gcmVzdWx0WydDJ107XHJcbiAgICAgICAgdGhpcy5zdHRzWydQJ10gPSByZXN1bHRbJ1AnXTtcclxuICAgICAgICB0aGlzLnN0dHNbJ0UnXSA9IHJlc3VsdFsnRSddO1xyXG4gICAgICAgIHRoaXMuc3R0c1snVCddID0gcmVzdWx0WydUJ107XHJcbiAgICAgICAgdGhpcy5zdGVwID0gNDtcclxuICAgICAgICB0aGlzLnRvdFByb2dyZXNzID0gTWF0aC5jZWlsKHBhcnNlRmxvYXQocmVzdWx0WydDJ10pICogMTAwIC8gcGFyc2VGbG9hdChyZXN1bHRbJ1QnXSkpO1xyXG4gICAgICAgIHRoaXMucmVjYWxsKHRoaXMuaGRySWRuKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRvdFByb2dyZXNzKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAvLyB0aGlzLmZsYXNoTWVzc2FnZXNTZXJ2aWNlLnNob3cocmVzcG9uc2UubWVzc2FnZSwgeyBjc3NDbGFzczogJ2FsZXJ0LXN1Y2Nlc3MnLCB0aW1lb3V0OiAzMDAwIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBsYXN0UmVmcmVzaFRpbWVGaWxlID0gbnVsbDtcclxuICByZWNhbGxGaWxlKGZpbGVMb2dJZG4pIHtcclxuXHJcbiAgICBpZiAodGhpcy50b3RQcm9ncmVzc0ZpbGUgPCAxMDApIHtcclxuICAgICAgdGhpcy5sYXN0UmVmcmVzaFRpbWVGaWxlID0gbmV3IERhdGUoKTtcclxuICAgICAgdGhpcy50aW1lcmZpbGUgPVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5nZXRQcm9ncmVzc0ZpbGUoZmlsZUxvZ0lkbik7XHJcbiAgICAgICAgfSwgNTAwMCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXJmaWxlKTtcclxuICAgICAgLy8gdGhpcy5QbGFubmluZ0NvbXBvbmVudC5nZXRQYWNrZXRzQnlIZWFkZXJJZChoZHJJZG4pO1xyXG4gICAgICAvLyB0aGlzLmNsb3NlYnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgaWYgKHRoaXMudG90UHJvZ3Jlc3NGaWxlID09IDEwMCAmJiB0aGlzLnRvdFByb2dyZXNzID09IDEwMCkge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG5maWxlVXBsb2FkTW9kYWwnKS5jbGljaygpO1xyXG5cclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wcmljaW5nL3JvdWdoL3BsYW5pbmdzY3JlZW4vcm91Z2hQbGFuaW5nU2NyZWVuJ10sIHsgcXVlcnlQYXJhbXM6IHsgaGRySWQ6IHRoaXMuaGRySWRuIH0gfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG4gIGxhc3RSZWZyZXNoVGltZSA9IG51bGw7XHJcbiAgcmVjYWxsKGhkcklkbikge1xyXG4gICAgaWYgKHRoaXMudG90UHJvZ3Jlc3MgPCAxMDApIHtcclxuICAgICAgdGhpcy5sYXN0UmVmcmVzaFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICB0aGlzLnRpbWVyUHJpY2UgPVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5nZXRQcm9ncmVzc1ByaWNlKGhkcklkbik7XHJcbiAgICAgICAgfSwgNTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyUHJpY2UpO1xyXG4gICAgICBpZiAodGhpcy50b3RQcm9ncmVzc0ZpbGUgPT0gMTAwICYmIHRoaXMudG90UHJvZ3Jlc3MgPT0gMTAwKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bmZpbGVVcGxvYWRNb2RhbCcpLmNsaWNrKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJpY2luZy9yb3VnaC9wbGFuaW5nc2NyZWVuL3JvdWdoUGxhbmluZ1NjcmVlbiddLCB7IHF1ZXJ5UGFyYW1zOiB7IGhkcklkOiB0aGlzLmhkcklkbiB9IH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIFNraXBWZXJpZmljYXRpb24oKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgdGhpcy5tYXBwaW5nc2tpcCA9IHRydWU7XHJcbiAgICB0aGlzLmFkZEZpbGVMb2codGhpcy5maWxlVHlwZSk7XHJcblxyXG4gIH1cclxuICBTa2lwVmVyaWZpY2F0aW9uRHRsKCkge1xyXG4gICAgdGhpcy5tYXBwaW5nc2tpcCA9IHRydWU7XHJcbiAgICB0aGlzLnN0ZXAgPSA0O1xyXG4gICAgdGhpcy51cGxvYWRGaWxlKCk7XHJcbiAgfVxyXG5cclxuICBsb2FkRmlsZVR5cGVEYXRhKGZpbGVVcGxvYWQsIG1kbCkge1xyXG4gICAgdGhpcy5zaGVldERhdGEgPSBbXTtcclxuICAgIHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsID0ge307XHJcbiAgICB0aGlzLmRlZnVsdERpc3BsYXlMZW4gPSA1O1xyXG4gICAgdGhpcy5kZWZ1bHREaXNwbGF5T2JqID0gW107XHJcbiAgICB0aGlzLmF0dHJTdHJ1Y3R1cmVEdGwgPSBbXTtcclxuICAgIHRoaXMuaGVhZGVyTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5oZWFkZXJwcnA7XHJcbiAgICB0aGlzLmF0dHJwcnA7XHJcbiAgICB0aGlzLnRvdGFsbWF0Y2ggPSAwO1xyXG4gICAgdGhpcy50b3RhbGlnbm9yZSA9IDA7XHJcbiAgICB0aGlzLnBhZ2VEZWZpbmF0aW9uID0ge307XHJcbiAgICB0aGlzLnJvd2RhdGFtYXBEZXRhaWxzID0ge307XHJcbiAgICB0aGlzLnJvd2Rpc3RpbmN0RGF0YU1hcCA9IHt9O1xyXG4gICAgdGhpcy5jaGFySGVhZGVyTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVEdGxNYXAgPSB7fTtcclxuICAgIHRoaXMubWFwcFNoZWV0RGF0YSA9IFtdO1xyXG4gICAgdGhpcy5zdGF0dXNMaXN0ID0gW107XHJcbiAgICB0aGlzLmZpbGVEZXRhaWxzID0gW107XHJcbiAgICB0aGlzLmZpbGVUeXBlTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5maWxlT3B0aW9uc0xpc3QgPSBbXTtcclxuICAgIHRoaXMuZmlsZVR5cGU7XHJcbiAgICB0aGlzLm5tZTtcclxuICAgIHRoaXMudHlwO1xyXG4gICAgdGhpcy5kZXNjcmlwdGlvbjtcclxuICAgIHRoaXMuY2hlY2tfc3RhdHVzID0gW107XHJcbiAgICB0aGlzLnBrdF9zdGF0dXMgPSBbXTtcclxuICAgIHRoaXMuY29sRm9ybWF0ZSA9IFtdO1xyXG4gICAgdGhpcy5hbGxjb2xzID0gW107XHJcbiAgICB0aGlzLmZpbGVMb2dJZG4gPSAwO1xyXG4gICAgdGhpcy5zaG93ID0gZmFsc2U7XHJcbiAgICB0aGlzLnN0ZXBNc2cgPSAnJztcclxuICAgIHRoaXMuc3R0cyA9IHt9O1xyXG4gICAgdGhpcy5jbGlja2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLnRvdFByb2dyZXNzID0gMDtcclxuICAgIHRoaXMudG90UHJvZ3Jlc3NGaWxlID0gMDtcclxuICAgIHRoaXMuc3RlcCA9IDE7XHJcbiAgICB0aGlzLmxhYmxlID0gXCJcIjtcclxuICAgIHRoaXMuZmlsZW5tZSA9IFwiXCI7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICB0aGlzLmRhdGVGb3JtYXRNYXAgPSB7fTtcclxuICAgIGxldCBmaWxldHlwZSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmaWxldHlwZSddIHx8ICcnO1xyXG4gICAgdGhpcy5tZGwgPSBtZGw7XHJcbiAgICB0aGlzLmZpbGVubWUgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZmlsZXR5cGUnXSB8fCAnJztcclxuICAgIHRoaXMubWFwcGluZ3NraXAgPSBmYWxzZTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gZmlsZVVwbG9hZDtcclxuICAgIGlmIChtZGwgIT0gJycpXHJcbiAgICAgIHJlcU9ialsnbWRsJ10gPSBtZGw7XHJcbiAgICBpZiAoZmlsZXR5cGUgIT0gJycpXHJcbiAgICAgIHJlcU9ialsnZmlsZW5tZSddID0gZmlsZXR5cGU7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLmhlYWRlcikpO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9ICdsb2FkRmlsZVVwbG9hZCc7XHJcbiAgICB0aGlzLmNzLmxvYWRpRmlsZShyZXFPYmosIHRoaXMuaGVhZGVyLCAnZmlsZVVwbG9hZC9sb2FkJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0IHx8IHt9O1xyXG4gICAgICAgIHRoaXMucGFnZURlZmluYXRpb24gPSByZXN1bHQucGFnZURlZmluYXRpb25cclxuICAgICAgICB0aGlzLnN0YXR1c0xpc3QgPSByZXN1bHQuc3RhdHVzTGlzdDtcclxuICAgICAgICB0aGlzLmZpbGVEZXRhaWxzID0gcmVzdWx0LmZpbGVEZXRhaWxzO1xyXG4gICAgICAgIHRoaXMuZmlsZVR5cGVMaXN0ID0gcmVzdWx0LmZpbGVUeXBlTGlzdDtcclxuICAgICAgICB0aGlzLmZpbGVPcHRpb25zTGlzdCA9IHJlc3VsdC5maWxlT3B0aW9uc0xpc3QgfHwgW107XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZU9wdGlvbnNMaXN0Lmxlbmd0aCA+IDApXHJcbiAgICAgICAgICB0aGlzLmZpbGVUeXBlID0gdGhpcy5maWxlT3B0aW9uc0xpc3RbMF0uaztcclxuICAgICAgICBsZXQgYWRkbEF0dHIgPSB0aGlzLmZpbGVPcHRpb25zTGlzdFswXS5hZGRsX2F0dHIgfHwge307XHJcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0ID0gYWRkbEF0dHIuZGF0ZWZvcm1hdCB8fCAnZGQvbW0veXknO1xyXG4gICAgICAgIHRoaXMuZGVsaW0gPSBhZGRsQXR0ci5kZWxpbSB8fCAnLyc7XHJcbiAgICAgICAgdGhpcy5zdGF0dXNMaXN0ID0gcmVzdWx0LnN0YXR1c0xpc3QubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi5rLFxyXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG5cclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG5cclxuICAgIGxldCBtZGxrID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWRsS2V5JykpO1xyXG4gICAgbGV0IGNVcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICB0aGlzLmNEdCA9IG5ldyBEYXRlKCk7XHJcbiAgICB0aGlzLmhlYWRlciA9IHtcclxuICAgICAgJ2NsaWVudGtleSc6IENvb2tpZS5nZXQoJ19jaycpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAnbG9naW5pZCc6IENvb2tpZS5nZXQoJ19sb2dpZCcpLFxyXG4gICAgICAnbW9kdWxla2V5JzogbWRsa1tjVXJsLnNwbGl0KCcvJylbMV1dLFxyXG4gICAgICAnc291cmNlJzogJ3FzJ1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xyXG4gICAgICBsZXQgbWRsID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2dycCddIHx8ICcnO1xyXG5cclxuICAgICAgdGhpcy5sb2FkRmlsZVR5cGVEYXRhKCdmaWxlVXBsb2FkJywgbWRsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBpbndhcmRfaWRuO1xyXG4gIGlud2FyZFN0b2NrVHlwZTtcclxuICBzdG9ja0lud2FyZFVwbG9hZChpbndhcmREdGwsIG1kbCkge1xyXG4gICAgdGhpcy5pbndhcmRfaWRuID0gaW53YXJkRHRsLmlud2FyZF9pZG47XHJcbiAgICB0aGlzLmlud2FyZFN0b2NrVHlwZSA9IGlud2FyZER0bC5zdG9ja190eXBlO1xyXG4gICAgdGhpcy5tZGwgPSBtZGw7XHJcbiAgICB0aGlzLmxvYWRGaWxlVHlwZURhdGEoJ2ZpbGVVcGxvYWQnLCBtZGwpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy50aW1lcmZpbGUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcmZpbGUpO1xyXG5cclxuICAgIGlmICh0aGlzLnRpbWVyUHJpY2UgIT0gdW5kZWZpbmVkKVxyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lclByaWNlKTtcclxuXHJcbiAgfVxyXG5cclxuICBzZXRPcHRpb25zRm9yTWl4VG9TaW5nbGUoKSB7XHJcbiAgICB0aGlzLmZpbGVPcHRpb25zTGlzdCA9IFtcclxuICAgICAgeyBcImtcIjogXCI2OTZcIiwgXCJ2XCI6IFwiTWFya2V0aW5nIFN0b2NrXCIgfVxyXG4gICAgXTtcclxuICAgIHRoaXMuZmlsZVR5cGUgPSBcIjY5NlwiO1xyXG4gIH1cclxuXHJcblxyXG59IiwiPGRpdiBjbGFzcz1cIm10XCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZmZmO1wiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWZyYW1lXCI+XHJcbiAgICAgICAgPHAgKm5nSWY9XCJzaG93XCIgY2xhc3M9XCJsb2FkaW5nLXRleHRcIiBzdHlsZT1cInotaW5kZXg6IDk5OTlcIj4ge3tzdGVwTXNnfX0gPC9wPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5uZXJEXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC1lbGVtZW50LXN0ZXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc3RlcC10aGluXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBiZy1ncmV5IG10LXN0ZXAtY29sXCIgW25nQ2xhc3NdPVwieydkb25lJzpzdGVwPT0xID8gJ2RvbmUnOicnfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9c2V0U2V0cCgxKT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LXN0ZXAtbnVtYmVyIGJnLXdoaXRlIGZvbnQtZ3JleVwiPjE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LXN0ZXAtdGl0bGUgdXBwZXJjYXNlIGZvbnQtZ3JleS1jYXNjYWRlXCI+QnJvd3NlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGJnLWdyZXkgbXQtc3RlcC1jb2xcIiBbbmdDbGFzc109XCJ7J2RvbmUnOnN0ZXA9PTIgPyAnZG9uZSc6Jyd9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1zZXRTZXRwKDIpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtc3RlcC1udW1iZXIgYmctd2hpdGUgZm9udC1ncmV5XCI+MjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtc3RlcC10aXRsZSB1cHBlcmNhc2UgZm9udC1ncmV5LWNhc2NhZGVcIj5IZWFkZXIgVmVyaWZpY2F0aW9uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGJnLWdyZXkgbXQtc3RlcC1jb2xcIiBbbmdDbGFzc109XCJ7J2RvbmUnOnN0ZXA9PTMgPyAnZG9uZSc6Jyd9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1zZXRTZXRwKDMpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtc3RlcC1udW1iZXIgYmctd2hpdGUgZm9udC1ncmV5XCI+MzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtc3RlcC10aXRsZSB1cHBlcmNhc2UgZm9udC1ncmV5LWNhc2NhZGVcIj5EYXRhIFZlcmlmaWNhdGlvbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgYmctZ3JleSBtdC1zdGVwLWNvbFwiIFtuZ0NsYXNzXT1cInsnZG9uZSc6c3RlcD09NCA/ICdkb25lJzonJ31cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPXNldFNldHAoNCk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC1zdGVwLW51bWJlciBiZy13aGl0ZSBmb250LWdyZXlcIj40PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC1zdGVwLXRpdGxlIHVwcGVyY2FzZSBmb250LWdyZXktY2FzY2FkZVwiPlVwbG9hZGluZy4uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdXBsb2FkXCIgKm5nSWY9XCJzdGVwPT0xXCI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLW9mZnNldC0zIGNvbC1tZC0zXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAxNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTQgY29udHJvbC1sYWJlbFwiIHN0eWxlPVwicGFkZGluZzogNXB4O1wiPkZpbGUgVHlwZSA6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cImZpbGVUeXBlXCIgWyhuZ01vZGVsKV09XCJmaWxlVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tc2VsZWN0LS08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGZpbGUgb2YgZmlsZU9wdGlvbnNMaXN0XCIgdmFsdWU9XCJ7e2ZpbGU/Lmt9fVwiPnt7ZmlsZT8udn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmaWxlaW5wdXQtd3JhcHBlciBidG4gYnRuLWRlZmF1bHQgIGZpbGVpbnB1dCBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6ICMzYTU4OThcIj48c3Bhbj5Ccm93c2UgZmlsZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGNsYXNzPVwiZmlsZWlucHV0IGJ0bi1wcmltYXJ5XCIgbmFtZT1cImZpbGVuYW1lXCIgaWQ9XCJmaWxlbmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJCcm93c2UgZmlsZVwiIGFjY2VwdD1cIi54bHN4LC5jc3ZcIiAoY2hhbmdlKT1cImluY29taW5nZmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImxlZnQ6IC0xNjMuNzVweDsgdG9wOiA5cHg7XCI+PC9hPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+VXBsb2FkIEZpbGUgOiAmbmJzcDsmbmJzcDsmbmJzcDs8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBjbGFzcz1cImZpbGVpbnB1dCBidG4tcHJpbWFyeVwiIGFjY2VwdD1cIi54bHN4LC5jc3ZcIiBuYW1lPVwiZmlsZW5hbWVcIiBpZD1cImZpbGVuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJpbmNvbWluZ2ZpbGUoJGV2ZW50KVwiIHRpdGxlPVwiQnJvd3NlIGZpbGVcIj4gLS0+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdXBsb2FkXCIgKm5nSWY9XCJzdGVwPT0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsIE1hdGNoIDoge3t0b3RhbG1hdGNofX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG90YWwgSWdub3JlIDoge3t0b3RhbGlnbm9yZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbC1tZC0xMlwiIHN0eWxlPVwib3ZlcmZsb3c6IGF1dG87d2lkdGg6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImZpbGV1cGxvYWR2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGRyIG9mIGhlYWRlckxpc3QgO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hdGNoJzpoZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyIT0nJyAmJiBoZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5pZ25vcmUhPSdZJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZ25vcmUnOmhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmlnbm9yZT09J1knLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoYmcnOmhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHI9PScnICYmIGhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmlnbm9yZSE9J1knXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIChjbGljayk9XCJ1cGRhdGVjb2x1bW5zdGF0dWUoaGRyKVwiPnt7aGRyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGRyIG9mIGhlYWRlckxpc3QgO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cj09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzZWxlY3QgY2xhc3M9XCJzZWxlY3QtY29udHJvbFwiIG5hbWU9XCJ7e2hlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHJ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0clwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY29uZmlybXNldEhlYWRlck1hcHAoaGRyLCRldmVudC50YXJnZXQpXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwic2VsZWN0LWNvbnRyb2xcIiBuYW1lPVwie3toZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNvbmZpcm1zZXRIZWFkZXJNYXBwKGhkcilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tc2VsZWN0LS08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYXR0ckR0bCBvZiBhdHRyU3RydWN0dXJlRHRsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3thdHRyRHRsPy5hdHRyfX1cIj57e2F0dHJEdGw/LmF0dHJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0ciE9JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2hlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhkciBvZiBoZWFkZXJMaXN0IDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmR0YV90eXA9PSdkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJzZWxlY3QtY29udHJvbFwiIG5hbWU9XCJ7e2RhdGVGb3JtYXRNYXBbaGRyXX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRlRm9ybWF0TWFwW2hkcl1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZHRlRm10IG9mIGRhdGVGb3JtYXRMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tkdGVGbXQ/Lmt9fVwiPnt7ZHRlRm10Py52fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3dEaXMgb2YgZGVmdWx0RGlzcGxheU9iaiA7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBoZHIgb2YgaGVhZGVyTGlzdCA7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cm93RGlzW2hkcl19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLW9mZnNldC0xMSBjb2wtbWQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZmlsZUxvZ0lkbj09MCAmJiAoZmlsZW5tZT09J2dlbmVyaWMnIHx8IGZpbGVubWU9PSdnaWFfYmlsbCcpXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgcHVsbC1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW46IDVweFwiIChjbGljayk9XCJTa2lwVmVyaWZpY2F0aW9uKClcIj5Ta2lwPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7ICZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJmaWxlTG9nSWRuPT0wXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgcHVsbC1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW46IDVweFwiIChjbGljayk9XCJWYWxpZGF0ZUZpbGVIZWFkZXJNYXBwaW5nKCdZJylcIj5WZXJpZnk8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdXBsb2FkIFwiICpuZ0lmPVwic3RlcD09M1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdGFibGUtcmVzcG9uc2l2ZSBjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNlbGxzcGFjaW5nPVwiMTBcIiBjbGFzcz1cImRpc3BsYXlUYWJsZSBmaWxldXBsb2Fkdmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGRyIG9mIGNoYXJIZWFkZXJMaXN0IDtsZXQgaj1pbmRleDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJjb2xvcjp3aGl0ZTtib3JkZXI6IDFweCBzb2xpZCB3aGl0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3toZHJ9fSh7e2hlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHJ9fSk8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgW25nQ2xhc3NdPVwieydldmVuJzpqJTI9PTAsJ29kZCc6aiUyPT0xfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhdHRyVmFsIG9mIHJvd2Rpc3RpbmN0RGF0YU1hcFtoZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyXTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjE2MHB4O21hcmdpbi1yaWdodDogMXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbWF0Y2hlZFVsJzpyb3dkYXRhbWFwRGV0YWlsc1toZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyXVthdHRyVmFsXS52YWwgIT0nJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBzdHlsZT1cImxpc3Qtc3R5bGU6IG5vbmU7dGV4dC1hbGlnbjpsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPiB7e2F0dHJWYWx9fSA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyb3dkYXRhbWFwRGV0YWlsc1toZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyXVthdHRyVmFsXS52YWw9PScnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0LWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7cm93ZGF0YW1hcERldGFpbHNbaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cl1bYXR0clZhbF0udmFsfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dkYXRhbWFwRGV0YWlsc1toZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyXVthdHRyVmFsXS52YWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjb25maXJtSGVhZGVyRGV0YWlsc01hcHAoaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cixoZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyX2lkbixhdHRyVmFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tc2VsZWN0LS08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYXR0cmR0bG1hcCBvZiBhdHRyaWJ1dGVEdGxNYXBbaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cl1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3thdHRyZHRsbWFwPy52YWx9fVwiPnt7YXR0cmR0bG1hcD8udmFsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvd2RhdGFtYXBEZXRhaWxzW2hlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHJdW2F0dHJWYWxdLnZhbCE9JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cm93ZGF0YW1hcERldGFpbHNbaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cl1bYXR0clZhbF0udmFsfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7IDxpIChjbGljayk9XCJyZW1vdmVEZXRhaWxBdHRyT3B0VmFsKGhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHJfaWRuLGF0dHJWYWwscm93ZGF0YW1hcERldGFpbHNbaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cl1bYXR0clZhbF0udmFsLFtoZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyXSlcIiBjbGFzcz1cImZhIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJjb2xvcjogcmVkO2N1cnNvcjogcG9pbnRlcjtcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC1vZmZzZXQtMTEgY29sLW1kLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImZpbGVMb2dJZG49PTAgJiYgKGZpbGVubWU9PSdnZW5lcmljJyB8fCBmaWxlbm1lPT0nZ2lhX2JpbGwnKVwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIHB1bGwtcmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luOiA1cHhcIiAoY2xpY2spPVwiU2tpcFZlcmlmaWNhdGlvbkR0bCgpXCI+U2tpcDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyAmbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIHB1bGwtcmlnaHRcIiBzdHlsZT1cIm1hcmdpbjogNXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkRmlsZSgpXCIgW2Rpc2FibGVkXT1cImdtYXRjaGVkQ291bnQhPWdyZXN1bHRDb3VudFwiPlVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB1cGxvYWRcIiAqbmdJZj1cInN0ZXA9PTRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJzdGVwPT00XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTVweDtjb2xvcjpncmVlbjtmb250LXNpemU6IDIwcHg7dGV4dC1hbGlnbjogbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJsZUZpbGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCIgKm5nSWY9XCJsYXN0UmVmcmVzaFRpbWVGaWxlICE9IG51bGxcIj5MYXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaCB0aW1lIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe3tsYXN0UmVmcmVzaFRpbWVGaWxlIHwgZGF0ZTonbWVkaXVtJ319KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCIgc3R5bGU9XCJtYXJnaW46IDE1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci13YXJuaW5nXCIgcm9sZT1cInByb2dyZXNzYmFyXCIgYXJpYS12YWx1ZW5vdz1cIjYwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLXZhbHVlbWluPVwiMFwiIGFyaWEtdmFsdWVtYXg9XCIxMDBcIiBbbmdTdHlsZV09XCJ7J3dpZHRoJzp0b3RQcm9ncmVzc0ZpbGUrJyUnfSAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0b3RQcm9ncmVzc0ZpbGV9fSAlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInN0ZXA9PTQgJiYgY2xpY2tlZFwiIHN0eWxlPVwibWFyZ2luLXRvcDogMzVweDtcIj48c3Ryb25nPiBDb21wbGV0ZSA6e3tzdHRzRmlsZVsnQyddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgUGVuZGluZyA6IHt7c3R0c0ZpbGVbJ1AnXX19ICZuYnNwOyZuYnNwOyZuYnNwOyBFcnJvciA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzdHRzRmlsZVsnRSddfX0mbmJzcDsmbmJzcDsmbmJzcDsgSW52YWlsZCBTdGF0dXMgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c3R0c0ZpbGVbJ0knXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7IFRvdGFsIDoge3tzdHRzRmlsZVsnVCddfX08L3N0cm9uZz48L3A+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJzdGVwPT00XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDE1cHg7Y29sb3I6Z3JlZW47Zm9udC1zaXplOiAyMHB4O21hcmdpbi10b3A6IDE1cHg7dGV4dC1hbGlnbjogbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDttYXJnaW4tbGVmdDogMjBweDtjb2xvcjogYmxhY2s7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImxhc3RSZWZyZXNoVGltZSAhPSBudWxsXCI+TGFzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2ggdGltZSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHt7bGFzdFJlZnJlc2hUaW1lIHwgZGF0ZTonbWVkaXVtJ319KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCIgc3R5bGU9XCJtYXJnaW46IDE1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci13YXJuaW5nXCIgcm9sZT1cInByb2dyZXNzYmFyXCIgYXJpYS12YWx1ZW5vdz1cIjYwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLXZhbHVlbWluPVwiMFwiIGFyaWEtdmFsdWVtYXg9XCIxMDBcIiBbbmdTdHlsZV09XCJ7J3dpZHRoJzp0b3RQcm9ncmVzcysnJSd9ICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RvdFByb2dyZXNzfX0gJVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2VzcyB0ZXh0LWNlbnRlclwiIHN0eWxlPVwibWFyZ2luOiA1cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoZWNrVXBsb2FkU3R0KClcIj5DaGVja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzPC9idXR0b24+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJzdGVwPT00ICYmIGNsaWNrZWRcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDM1cHg7XCI+PHN0cm9uZz4gQ29tcGxldGUgOnt7c3R0c1snQyddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgUGVuZGluZyA6IHt7c3R0c1snUCddfX0gJm5ic3A7Jm5ic3A7Jm5ic3A7IEVycm9yIDoge3tzdHRzWydFJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyBUb3RhbCA6IHt7c3R0c1snVCddfX08L3N0cm9uZz48L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG48ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cImZpbGVVcGxvYWRNb2RhbFwiIHRhYmluZGV4PVwiLTFcIiBzdHlsZT1cInotaW5kZXg6IDk5OTk5OVwiIHJvbGU9XCJkaWFsb2dcIlxyXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwic21hbGxNb2RhbEhlYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1rZXlib2FyZD1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgI2ZpbGVVcGxvYWRjbHNidG4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cInNtYWxsTW9kYWxIZWFkXCI+QWRkIGZpbGUgdXBsb2FkIG9wdGlvbjwvaDQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgcm9sZT1cImZvcm1cIiAjZj1cIm5nRm9ybVwiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdChmKVwiIG5hbWU9XCJhcHBGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPk5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwibm1lXCIgbmFtZT1cIm5tZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPkRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRlc2NyaXB0aW9uXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+VHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwidHlwXCIgWyhuZ01vZGVsKV09XCJ0eXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tc2VsZWN0LS08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlVHlwZUxpc3RcIiB2YWx1ZT1cInt7ZmlsZT8ua319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZpbGU/LnZ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPkNoZWNrIHN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgcGxhY2Vob2xkZXI9XCJTZWxlY3QgU3RhdHVzXCIgW29wdGlvbnNdPVwic3RhdHVzTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2hlY2tfc3RhdHVzXCIgbmFtZT1cImNoZWNrX3N0YXR1c1wiIFttdWx0aXBsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93Q2xlYXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI29wdGlvblRlbXBsYXRlIGxldC1vcHRpb249XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmYW1mYW1mYW0tZmxhZ3Mge3tvcHRpb24/LnZhbHVlfX1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uPy5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPlBhY2tldCBzdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IHBsYWNlaG9sZGVyPVwiU2VsZWN0IFN0YXR1c1wiIFtvcHRpb25zXT1cInN0YXR1c0xpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBrdF9zdGF0dXNcIiBuYW1lPVwicGt0X3N0YXR1c1wiIFthbGxvd0NsZWFyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvcHRpb25UZW1wbGF0ZSBsZXQtb3B0aW9uPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmFtZmFtZmFtLWZsYWdzIHt7b3B0aW9uPy52YWx1ZX19XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbj8ubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAjZmlsZVVwbG9hZGNsc2J0bj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFwcEFwcE5vRGJsQ2xpY2tcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXQoZilcIj5TYXZlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJDb2Zpcm1tYXBoZHJcIiAgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cInNtYWxsTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiXHJcbiAgZGF0YS1rZXlib2FyZD1cImZhbHNlXCI+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJDYW5jZWxIZWFkZXJNYXBwKClcIiBjbGFzcz1cImNsb3NlXCIgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+XHJcbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJzbWFsbE1vZGFsSGVhZFwiPkFsZXJ0PC9oND5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgQXJlIHlvdSBzdXJlIEZvciBNYXBwaW5nIDxiPnt7bWFwaGRyfX08L2I+IFRvIEF0dHJpYnV0ZSA8Yj57e2hkcm1hc3NhZ2V9fTwvYj4gXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIChjbGljayk9XCJDYW5jZWxIZWFkZXJNYXBwKClcIiAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cInNldEhlYWRlck1hcHAoKTtcIj5Db25maXJtPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiQ29maXJtbWFwZHRsXCIgIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzbWFsbE1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIlxyXG4gIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiQ2FuY2VsSGVhZGVyTWFwcCgpXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgPlxyXG4gICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiID5DbG9zZTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic21hbGxNb2RhbEhlYWRcIj5BbGVydDwvaDQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIEFyZSB5b3Ugc3VyZSBGb3IgTWFwcGluZyA8Yj57e2R0bG9wdGlvbnZhbH19PC9iPiBUbyBBdHRyaWJ1dGUgIDxiPiB7e2R0bEF0dHJ9fSA8L2I+IHdpdGggQXR0cmlidXRlRGV0YWlsIDxiPnt7ZHRsbWFzc2FnZX19PC9iPiBcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwiQ2FuY2VsSGVhZGVyRGV0YWlsc01hcHAoKVwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cInNldEhlYWRlckRldGFpbHNNYXBwKClcIj5Db25maXJtPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuPGJ1dHRvbiBpZD1cImJ0bmZpbGVVcGxvYWRNb2RhbFwiIFtoaWRkZW5dPVwidHJ1ZVwiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNmaWxlVXBsb2FkTW9kYWxcIj48L2J1dHRvbj5cclxuXHJcbjxidXR0b24gaWQ9XCJidG5Db2Zpcm1tYXBoZHJcIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjQ29maXJtbWFwaGRyXCI+PC9idXR0b24+XHJcbjxidXR0b24gaWQ9XCJidG5Db2Zpcm1tYXBkdGxcIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjQ29maXJtbWFwZHRsXCI+PC9idXR0b24+XHJcblxyXG5cclxuXHJcbjwhLS0gPGRpdiBjbGFzcz1cImNlbnRlcmVkXCI+XHJcbiAgICA8ZGl2IGlkPVwiZGl2U3Bpbm5lclwiIGNsYXNzPVwic3Bpbm5lciBsb2FkaW5nXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXRleHRcIj5Mb2FkaW5nIC4uLjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwidGVzdCgpXCIgaWQ9XCJidG5Mb2FkUmVjb3Jkc1wiIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7cG9zaXRpb246IGFic29sdXRlOyB0b3A6IDUyJTsgbGVmdDogNDUlO1wiPkxvYWQgUmVjb3JkczwvYnV0dG9uPlxyXG4gIDwvZGl2PiAtLT4iXX0=
|
|
920
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lemxpYi9zcmMvbGliL2ZpbGUtdXBsb2FkL2ZpbGV1cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXpsaWIvc3JjL2xpYi9maWxlLXVwbG9hZC9maWxldXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0Isc0dBQXNHO0FBQ3RHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTs7Ozs7Ozs7Ozs7QUFTcEQsTUFBTSxPQUFPLG1CQUFtQjtJQXlEOUIsWUFDUyxNQUFjLEVBQ2IsS0FBcUIsRUFDckIsTUFBcUIsRUFDckIsY0FBaUMsRUFDakMsSUFBZ0IsRUFDaEIsRUFBd0I7UUFMekIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLFNBQUksR0FB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LGVBQWUsR0FBRztZQUNyQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFO1NBQ3ZDLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDOzttSUEvK0JVLG1CQUFtQjt1SEFBbkIsbUJBQW1CLDhWQ3BCaEMsODQwQkErYlk7MkZEM2FDLG1CQUFtQjtrQkFQL0IsU0FBUzsrQkFDRSxnQkFBZ0I7a1BBUUEsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNFLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDRyxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSBcIm5neC1zcGlubmVyXCI7XHJcbmltcG9ydCB7IENvb2tpZSB9IGZyb20gJ25nMi1jb29raWVzL25nMi1jb29raWVzJztcclxuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbW1hblNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbWFuLXNlcnZpY2UvY29tbWFuLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XHJcbi8vIGltcG9ydCB7IFVwbG9hZFNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnc3JjL2FwcC9jb21wb25lbnRzL2ZpbGV1cGxvYWQtbW9kdWxlL3VwbG9hZC1zZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2RhbERpcmVjdGl2ZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1maWxldXBsb2FkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZXVwbG9hZC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZXVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2Nsb3NlaGRyYnRuJykgY2xvc2VoZHJidG46IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnY2xvc2VkdGxidG4nKSBjbG9zZWR0bGJ0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdDb2Zpcm1tYXBkdGwnKSBDb2Zpcm1tYXBkdGw6IE1vZGFsRGlyZWN0aXZlO1xyXG4gIGhlYWRlciA9IHt9O1xyXG4gIGZpbGVUb1VwbG9hZDogRmlsZSA9IG51bGw7XHJcbiAgZmlsZU5hbWUgPSBcIlwiO1xyXG4gIGNEdDtcclxuICBzdGVwID0gMTtcclxuICBzaGVldERhdGEgPSBbXTtcclxuICBoZWFkZXJBdHRyaWJ1dGVEdGwgPSB7fTtcclxuICBkZWZ1bHREaXNwbGF5TGVuID0gNTtcclxuICBkZWZ1bHREaXNwbGF5T2JqID0gW107XHJcbiAgYXR0clN0cnVjdHVyZUR0bCA9IFtdO1xyXG4gIGhlYWRlckxpc3QgPSBbXTtcclxuICBoZWFkZXJwcnA7XHJcbiAgYXR0cnBycDtcclxuICB0b3RhbG1hdGNoID0gMDtcclxuICB0b3RhbGlnbm9yZSA9IDA7XHJcbiAgcGFnZURlZmluYXRpb24gPSB7fTtcclxuICByb3dkYXRhbWFwRGV0YWlscyA9IHt9O1xyXG4gIHJvd2Rpc3RpbmN0RGF0YU1hcCA9IHt9O1xyXG4gIGNoYXJIZWFkZXJMaXN0ID0gW107XHJcbiAgYXR0cmlidXRlRHRsTWFwID0ge307XHJcbiAgbWFwcFNoZWV0RGF0YSA9IFtdO1xyXG4gIGxhYmxlID0gXCJcIjtcclxuICBsYWJsZUZpbGUgPSBcIlwiO1xyXG4gIHN0YXR1c0xpc3QgPSBbXTtcclxuICBmaWxlRGV0YWlscyA9IFtdO1xyXG4gIGZpbGVUeXBlTGlzdCA9IFtdO1xyXG4gIGZpbGVPcHRpb25zTGlzdCA9IFtdO1xyXG4gIGZpbGVUeXBlO1xyXG4gIG5tZTtcclxuICB0eXA7XHJcbiAgbWRsO1xyXG4gIGRlc2NyaXB0aW9uO1xyXG4gIGNoZWNrX3N0YXR1cyA9IFtdO1xyXG4gIHBrdF9zdGF0dXMgPSBbXTtcclxuICBjb2xGb3JtYXRlID0gW107XHJcbiAgaWdub3JlRm9ybWF0ZSA9IFtdO1xyXG4gIGFsbGNvbHMgPSBbXTtcclxuICBmaWxlTG9nSWRuID0gMDtcclxuICBzaG93ID0gZmFsc2U7XHJcbiAgc3RlcE1zZyA9ICcnO1xyXG4gIHRpbWVyZmlsZTtcclxuICB0aW1lclByaWNlO1xyXG4gIGRhdGVGb3JtYXQ7XHJcbiAgZGVsaW07XHJcbiAgZGF0ZUZvcm1hdE1hcCA9IHt9O1xyXG4gIG1hcHBpbmdza2lwID0gZmFsc2U7XHJcbiAgZmlsZXR5cGU7XHJcbiAgZmlsZW5tZTtcclxuICBkYXRlRm9ybWF0TGlzdCA9IFt7IFwia1wiOiBcImRkL21tL3l5XCIsIFwidlwiOiBcImRkL21tL3l5XCIgfSxcclxuICB7IFwia1wiOiBcIm1tL2RkL3l5XCIsIFwidlwiOiBcIm1tL2RkL3l5XCIgfSxcclxuICB7IFwia1wiOiBcImRkL01vbi95eVwiLCBcInZcIjogXCJkZC9Nb24veXlcIiB9LFxyXG4gIF1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGNzOiBDb21tYW5TZXJ2aWNlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIGhhbmRsZUZpbGVJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcclxuICAgIHRoaXMuZmlsZVRvVXBsb2FkID0gZmlsZXMuaXRlbSgwKTtcclxuICAgIHRoaXMuZmlsZU5hbWUgPSBmaWxlc1swXS5uYW1lO1xyXG4gIH1cclxuICBvbkZpbGVTZWxlY3QoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGZpbGVzID0gaW5wdXQuZmlsZXM7XHJcblxyXG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCkge1xyXG5cclxuICAgICAgY29uc3QgZmlsZVRvUmVhZCA9IGZpbGVzWzBdO1xyXG5cclxuICAgICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gdGhpcy5vbkZpbGVMb2FkO1xyXG5cclxuICAgICAgZmlsZVJlYWRlci5yZWFkQXNUZXh0KGZpbGVUb1JlYWQsIFwiVVRGLThcIik7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuICBjc3ZDb250ZW50OiBzdHJpbmc7XHJcbiAgcGFyc2VkQ3N2OiBzdHJpbmdbXVtdO1xyXG4gIG9uRmlsZUxvYWQoZmlsZUxvYWRlZEV2ZW50KSB7XHJcbiAgICBjb25zdCBjc3ZTZXBhcmF0b3IgPSAnOyc7XHJcbiAgICBjb25zdCB0ZXh0RnJvbUZpbGVMb2FkZWQgPSBmaWxlTG9hZGVkRXZlbnQudGFyZ2V0LnJlc3VsdDtcclxuICAgIHRoaXMuY3N2Q29udGVudCA9IHRleHRGcm9tRmlsZUxvYWRlZDtcclxuICAgIGNvbnN0IHR4dCA9IHRleHRGcm9tRmlsZUxvYWRlZDtcclxuICAgIGNvbnN0IGNzdiA9IFtdO1xyXG4gICAgY29uc3QgbGluZXMgPSB0eHQuc3BsaXQoJ1xcbicpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKGxpbmVzWzBdKTtcclxuXHJcblxyXG4gICAgbGluZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgY29uc3QgY29sczogc3RyaW5nW10gPSBlbGVtZW50LnNwbGl0KGNzdlNlcGFyYXRvcik7XHJcbiAgICAgIGNzdi5wdXNoKGNvbHMpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBhcnNlZENzdiA9IGNzdjtcclxuXHJcbiAgICAvLyBkZW1vIG91dHB1dCBhcyBhbGVydFxyXG4gICAgdmFyIG91dHB1dDogc3RyaW5nID0gXCJcIjtcclxuICAgIGNzdi5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIG91dHB1dCArPSBcIlxcblwiO1xyXG4gICAgICB2YXIgY29sTm8gPSAwO1xyXG4gICAgICByb3cuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgIGlmIChjb2xObyA+IDApIG91dHB1dCArPSBcIiB8IFwiO1xyXG4gICAgICAgIG91dHB1dCArPSBjb2w7XHJcbiAgICAgICAgY29sTm8rKztcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgYXJyYXlCdWZmZXI6IGFueTtcclxuICBmaWxlOiBGaWxlO1xyXG4gIGluY29taW5nZmlsZShldmVudCkge1xyXG4gICAgdGhpcy5maWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IHRoaXMuZmlsZS5uYW1lO1xyXG4gICAgdGhpcy5VcGxvYWQoKTtcclxuICB9XHJcblxyXG4gIFVwbG9hZCgpIHtcclxuXHJcbiAgICB0aGlzLnNob3cgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGVwTXNnID0gJ0ZpbGUgdXBsb2FkIGluIHByb2Nlc3MuLic7XHJcbiAgICAvLyB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIHRoaXMubWFwcFNoZWV0RGF0YSA9IFtdO1xyXG4gICAgdGhpcy5zaGVldERhdGEgPSBbXTtcclxuICAgIGxldCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIGZpbGVSZWFkZXIub25sb2FkID0gKGUpID0+IHtcclxuICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZpbGVSZWFkZXIucmVzdWx0O1xyXG4gICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xyXG4gICAgICB2YXIgYXJyID0gbmV3IEFycmF5KCk7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpICE9IGRhdGEubGVuZ3RoOyArK2kpIGFycltpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0YVtpXSk7XHJcbiAgICAgIHZhciBic3RyID0gYXJyLmpvaW4oXCJcIik7XHJcbiAgICAgIHZhciB3b3JrYm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6IFwiYmluYXJ5XCIgfSk7XHJcbiAgICAgIHZhciBmaXJzdF9zaGVldF9uYW1lID0gd29ya2Jvb2suU2hlZXROYW1lc1swXTtcclxuICAgICAgdmFyIHdvcmtzaGVldCA9IHdvcmtib29rLlNoZWV0c1tmaXJzdF9zaGVldF9uYW1lXTtcclxuXHJcbiAgICAgIHZhciBzaGVldERhdGFNYXA6IGFueSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih3b3Jrc2hlZXQsIHsgaGVhZGVyOiAxIH0pO1xyXG4gICAgICBsZXQgaGVhZGVyTGlzdCA9IHNoZWV0RGF0YU1hcFswXTtcclxuICAgICAgaGVhZGVyTGlzdC5mb3JFYWNoKGhkciA9PiB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJMaXN0LnB1c2goaGRyLnRyaW0oKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNoZWV0RGF0YSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih3b3Jrc2hlZXQpO1xyXG4gICAgICB0aGlzLm1hcHBTaGVldERhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od29ya3NoZWV0KTtcclxuICAgICAgdGhpcy5maWxlTG9nSWRuID0gMDtcclxuICAgICAgY29uc29sZS5sb2coXCJ0aGlzLmhlYWRlckxpc3RcIiwgdGhpcy5oZWFkZXJMaXN0KTtcclxuXHJcbiAgICAgIHRoaXMuZ2V0SGVhZGVyTWF0Y2goKTtcclxuICAgICAgLy8gY29uc3QgZGlzdGluY3RTaCA9IFsuLi5uZXcgU2V0KHRoaXMuc2hlZXREYXRhLm1hcCh4PT54LlNIQVBFKSldO1xyXG4gICAgfVxyXG4gICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcih0aGlzLmZpbGUpO1xyXG4gIH1cclxuXHJcbiAgc2V0U2V0cChzdGVwKSB7XHJcbiAgICB0aGlzLnN0ZXAgPSBzdGVwO1xyXG5cclxuICAgIGlmIChzdGVwID09IDEpIHtcclxuICAgICAgdGhpcy5uZ09uRGVzdHJveSgpO1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRIZWFkZXJNYXRjaCgpIHtcclxuICAgIHRoaXMuc2hvdyA9IHRydWU7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICAgIHRoaXMuc3RlcE1zZyA9ICdIZWFkZXIgdmVyaWZpY2F0aW9uIGluIHByb2Nlc3MgLi4uJztcclxuICAgIC8vIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICByZXFPYmpbJ2F0dHJMaXN0J10gPSB0aGlzLmhlYWRlckxpc3Q7XHJcbiAgICByZXFPYmpbJ2ZpbGVJZG4nXSA9IHRoaXMuZmlsZVR5cGU7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9ICdsb2FkSGVhZGVyQXR0cic7XHJcbiAgICB0aGlzLmNzLmxvYWRpRmlsZShyZXFPYmosIHRoaXMuaGVhZGVyLCAnZmlsZVVwbG9hZC9sb2FkJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGwgPSByZXN1bHQuYXR0ckRldGFpbHMgfHwgJyc7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bFwiLCB0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bCk7XHJcbiAgICAgICAgbGV0IGhlYWRlckxpc3RMbnQgPSB0aGlzLmhlYWRlckxpc3QubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMudG90YWxtYXRjaCA9IHJlc3VsdC50b3RhbG1hdGNoIHx8IDA7XHJcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsICE9ICcnKSB7XHJcbiAgICAgICAgICB0aGlzLmF0dHJTdHJ1Y3R1cmVEdGwgPSByZXN1bHQuYXR0clN0cnVjdHVyZUR0bCB8fCBbXTtcclxuICAgICAgICAgIGlmICh0aGlzLnNoZWV0RGF0YS5sZW5ndGggPCA1KVxyXG4gICAgICAgICAgICB0aGlzLmRlZnVsdERpc3BsYXlMZW4gPSB0aGlzLnNoZWV0RGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGVmdWx0RGlzcGxheUxlbjsgaSsrKVxyXG4gICAgICAgICAgICB0aGlzLmRlZnVsdERpc3BsYXlPYmpbaV0gPSB0aGlzLnNoZWV0RGF0YVtpXTtcclxuXHJcbiAgICAgICAgICBsZXQgaWdub3JlQ29sdW1uTHN0ID0gcmVzdWx0Lmlnbm9yZV9jb2x1bW4gfHwgW107XHJcbiAgICAgICAgICBpZ25vcmVDb2x1bW5Mc3QuZm9yRWFjaChoZHJEc2MgPT4ge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkckRzY10gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyRHNjXS5pZ25vcmUgPSAnWSc7XHJcbiAgICAgICAgICAgICAgaGVhZGVyTGlzdExudC0tO1xyXG4gICAgICAgICAgICAgIHRoaXMudG90YWxpZ25vcmUrKztcclxuICAgICAgICAgICAgICBpZiAodGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyRHNjXS5hdHRyICE9IFwiXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsbWF0Y2gtLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBsZXQgaXNEYXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgdGhpcy5oZWFkZXJMaXN0LmZvckVhY2goaGRyID0+IHtcclxuXHJcbiAgICAgICAgICAgIGxldCBoZHJBdHRyID0gdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXSB8fCB7fTtcclxuICAgICAgICAgICAgaWYgKGhkckF0dHIuZHRhX3R5cCA9PSAnZCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmRhdGVGb3JtYXRNYXBbaGRyXSA9IHRoaXMuZGF0ZUZvcm1hdDtcclxuICAgICAgICAgICAgICBpc0RhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy50b3RhbG1hdGNoID09IGhlYWRlckxpc3RMbnQgJiYgaXNEYXRlID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuVmFsaWRhdGVGaWxlSGVhZGVyTWFwcGluZygnTicpO1xyXG4gICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zdGVwID0gMztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXAgPSAyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwiU29tZSBwcm9ibGVtIGluIEZpbGUgSGVhZGVyIE1hdGNoaW5nXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL3RoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIC8vdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgLy8gdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgdXBkYXRlY29sdW1uc3RhdHVlKGhkcikge1xyXG5cclxuICAgIHZhciBpc0lnbm9yZSA9IHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uaWdub3JlIHx8ICcnO1xyXG4gICAgaWYgKGlzSWdub3JlID09ICdZJykge1xyXG4gICAgICB0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmlnbm9yZSA9ICdOJ1xyXG4gICAgICB0aGlzLnRvdGFsaWdub3JlLS07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvdGFsaWdub3JlKys7XHJcbiAgICAgIHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uaWdub3JlID0gJ1knO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2codGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXSk7XHJcbiAgfVxyXG4gIG1hcGhkcjtcclxuICBoZHJtYXNzYWdlO1xyXG4gIGNvbmZpcm1zZXRIZWFkZXJNYXBwKGhkcikge1xyXG4gICAgdGhpcy5tYXBoZHIgPSBoZHI7XHJcbiAgICBsZXQgYXR0ciA9IHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cjtcclxuICAgIHRoaXMuYXR0clN0cnVjdHVyZUR0bC5mb3JFYWNoKGVsZSA9PiB7XHJcblxyXG4gICAgICBpZiAoZWxlLmF0dHIgPT0gYXR0cikge1xyXG4gICAgICAgIHRoaXMuaGRybWFzc2FnZSA9IHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0ciArIFwiKFwiICsgZWxlLnByaW50ICsgXCIpXCI7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bkNvZmlybW1hcGhkcicpLmNsaWNrKCk7XHJcbiAgfVxyXG4gIENhbmNlbEhlYWRlck1hcHAoKSB7XHJcbiAgICB0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bFt0aGlzLm1hcGhkcl0uYXR0ciA9IFwiXCI7XHJcbiAgfVxyXG4gIHNldEhlYWRlck1hcHAoKSB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICAgIGxldCBhdHRyID0gdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbdGhpcy5tYXBoZHJdLmF0dHIgfHwgJyc7XHJcbiAgICBpZiAoYXR0ciAhPSAnJykge1xyXG4gICAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2ZpbGVVcGxvYWQnO1xyXG4gICAgICByZXFPYmpbJ29wdGlvbmFWYWwnXSA9IHRoaXMubWFwaGRyXHJcbiAgICAgIHJlcU9ialsnYXR0ciddID0gYXR0cjtcclxuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gJ2FkZEhlYWRlckF0dHInO1xyXG4gICAgICB0aGlzLmNzLmxvYWRpRmlsZShyZXFPYmosIHRoaXMuaGVhZGVyLCAnZmlsZVVwbG9hZC9sb2FkJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQgfHwge307XHJcbiAgICAgICAgICBsZXQgaGRyRHRsID0gcmVzdWx0LmF0dHJEZXRhaWxzW3RoaXMubWFwaGRyXSB8fCAnJztcclxuICAgICAgICAgIGlmIChoZHJEdGwgIT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy50b3RhbG1hdGNoKys7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW3RoaXMubWFwaGRyXSA9IGhkckR0bDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW3RoaXMubWFwaGRyXSA9IHtcclxuICAgICAgICAgICAgICBcImF0dHJcIjogXCJcIixcclxuICAgICAgICAgICAgICBcInByaW50XCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgXCJzcnRcIjogXCJcIixcclxuICAgICAgICAgICAgICBcImR0YV90eXBcIjogXCJcIixcclxuICAgICAgICAgICAgICBcImF0dHJfaWRuXCI6IFwiXCJcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwiTWFwcGluZyBhdHRyaWJ1dGUgaXMgZW1wdHkgcGxlYXNlIHJldHJ5LlwiKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBnbWF0Y2hlZENvdW50ID0gMDtcclxuICBncmVzdWx0Q291bnQgPSAwO1xyXG4gIHNldFJvd0RhdGFNYXBwKCkge1xyXG4gICAgaWYgKCF0aGlzLm1hcHBpbmdza2lwKSB7XHJcbiAgICAgIGxldCByb3dNYXRjaENvdW50ID0gMDtcclxuICAgICAgdGhpcy5jaGFySGVhZGVyTGlzdCA9IFtdO1xyXG4gICAgICBkZWJ1Z2dlclxyXG4gICAgICB0aGlzLmhlYWRlckxpc3QuZm9yRWFjaChoZHIgPT4ge1xyXG5cclxuICAgICAgICBsZXQgYXR0ciA9IHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0ciB8fCAnJztcclxuICAgICAgICBsZXQgYXR0clR5cGUgPSB0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmR0YV90eXAgfHwgJyc7XHJcbiAgICAgICAgbGV0IGlzSWdub3JlID0gdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5pZ25vcmUgfHwgJyc7XHJcbiAgICAgICAgaWYgKGF0dHIgIT0gJycgJiYgaXNJZ25vcmUgIT0gJ04nICYmIGF0dHJUeXBlID09ICdjJykge1xyXG4gICAgICAgICAgZGVidWdnZXJcclxuICAgICAgICAgIHZhciBkaXN0aW5jdGxpc3QgPSBBcnJheS5mcm9tKG5ldyBTZXQodGhpcy5zaGVldERhdGEubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1baGRyXSkpKTtcclxuICAgICAgICAgIGRpc3RpbmN0bGlzdCA9IGRpc3RpbmN0bGlzdC5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgfSk7XHJcbiAgICAgICAgICBpZiAoZGlzdGluY3RsaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dkaXN0aW5jdERhdGFNYXBbYXR0cl0gPSBkaXN0aW5jdGxpc3Q7XHJcbiAgICAgICAgICAgIHJvd01hdGNoQ291bnQgPSByb3dNYXRjaENvdW50ICsgZGlzdGluY3RsaXN0Lmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5nbWF0Y2hlZENvdW50ID0gcm93TWF0Y2hDb3VudDtcclxuICAgICAgICAgICAgdGhpcy5jaGFySGVhZGVyTGlzdC5wdXNoKGhkcik7XHJcbiAgICAgICAgICAgIGxldCBhdHRyRGV0YWlscyA9IHRoaXMuYXR0clN0cnVjdHVyZUR0bC5maW5kKGF0dHJkdGwgPT4gYXR0cmR0bC5hdHRyID09IGF0dHIpIHx8IHt9O1xyXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZUR0bE1hcFthdHRyXSA9IGF0dHJEZXRhaWxzLnBycExpc3QgfHwgW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICB9KTtcclxuICAgICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9ICdmaWxlVXBsb2FkJztcclxuICAgICAgcmVxT2JqWydhdHRyTWFwJ10gPSB0aGlzLnJvd2Rpc3RpbmN0RGF0YU1hcDtcclxuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gJ2xvYWRIZWFkZXJBdHRyRHRsJztcclxuICAgICAgdGhpcy5jcy5sb2FkaUZpbGUocmVxT2JqLCB0aGlzLmhlYWRlciwgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhyb3dNYXRjaENvdW50KTtcclxuICAgICAgICAgIGRlYnVnZ2VyO1xyXG5cclxuICAgICAgICAgIHRoaXMucm93ZGF0YW1hcERldGFpbHMgPSByZXN1bHQuYXR0ckRldGFpbHMgfHwge307XHJcbiAgICAgICAgICB0aGlzLmdyZXN1bHRDb3VudCA9IHJlc3VsdC50b3RhbG1hdGNoO1xyXG4gICAgICAgICAgdGhpcy5zdGVwID0gMztcclxuICAgICAgICAgIGlmIChyb3dNYXRjaENvdW50ID09IHJlc3VsdC50b3RhbG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcCA9IDQ7XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZSgpO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcInBsZWFzZSB2ZXJpZnkgZGF0YSBtYXBwaW5nLlwiKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwic29tZXRoaW5nIGdvIHdyb25nIGluIHJvdyBkYXRhLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdGVwID0gNDtcclxuICAgICAgdGhpcy51cGxvYWRGaWxlKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBkdGxBdHRyO1xyXG4gIGR0bGF0dHJfaWRuO1xyXG4gIGR0bG9wdGlvbnZhbDtcclxuICBkdGxtYXNzYWdlO1xyXG4gIGNvbmZpcm1IZWFkZXJEZXRhaWxzTWFwcChhdHRyLCBhdHRyX2lkbiwgb3B0aW9udmFsKSB7XHJcbiAgICB0aGlzLmR0bEF0dHIgPSBhdHRyO1xyXG4gICAgdGhpcy5kdGxhdHRyX2lkbiA9IGF0dHJfaWRuO1xyXG4gICAgdGhpcy5kdGxvcHRpb252YWwgPSBvcHRpb252YWw7XHJcbiAgICBsZXQgdmFsID0gdGhpcy5yb3dkYXRhbWFwRGV0YWlsc1t0aGlzLmR0bEF0dHJdW3RoaXMuZHRsb3B0aW9udmFsXS52YWw7XHJcbiAgICBsZXQgYXR0cmlidXRlRHRsTGlzdCA9IHRoaXMuYXR0cmlidXRlRHRsTWFwW2F0dHJdO1xyXG4gICAgYXR0cmlidXRlRHRsTGlzdC5mb3JFYWNoKGVsZSA9PiB7XHJcblxyXG4gICAgICBpZiAoZWxlLnZhbCA9PSB2YWwpIHtcclxuICAgICAgICB0aGlzLmR0bG1hc3NhZ2UgPSB2YWwgKyBcIihcIiArIGVsZS5wcmludCArIFwiKVwiO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG5Db2Zpcm1tYXBkdGwnKS5jbGljaygpO1xyXG5cclxuICB9XHJcblxyXG4gIENhbmNlbEhlYWRlckRldGFpbHNNYXBwKCkge1xyXG4gICAgdGhpcy5yb3dkYXRhbWFwRGV0YWlsc1t0aGlzLmR0bEF0dHJdW3RoaXMuZHRsb3B0aW9udmFsXS52YWwgPSBcIlwiO1xyXG4gIH1cclxuICBzZXRIZWFkZXJEZXRhaWxzTWFwcCgpIHtcclxuICAgIGxldCBhdHRyRHRsVmFsID0gdGhpcy5yb3dkYXRhbWFwRGV0YWlsc1t0aGlzLmR0bEF0dHJdW3RoaXMuZHRsb3B0aW9udmFsXS52YWwgfHwgJyc7XHJcbiAgICBpZiAoYXR0ckR0bFZhbCAhPSAnJykge1xyXG4gICAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2ZpbGVVcGxvYWQnO1xyXG4gICAgICByZXFPYmpbJ29wdGlvbmFWYWwnXSA9IHRoaXMuZHRsb3B0aW9udmFsXHJcbiAgICAgIHJlcU9ialsnYXR0cl9pZG4nXSA9IHRoaXMuZHRsYXR0cl9pZG47XHJcbiAgICAgIHJlcU9ialsnYXR0ciddID0gdGhpcy5kdGxBdHRyO1xyXG4gICAgICByZXFPYmpbJ2F0dHJWYWwnXSA9IGF0dHJEdGxWYWw7XHJcbiAgICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gJ2FkZERldGFpbEF0dHInO1xyXG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgICAgdGhpcy5jcy5sb2FkaUZpbGUocmVxT2JqLCB0aGlzLmhlYWRlciwgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImFkZERldGFpbEF0dHJcIiwgcmVzcG9uc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICB0aGlzLmdyZXN1bHRDb3VudCsrO1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdCB8fCB7fTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdC5hdHRyRGV0YWlscyk7XHJcbiAgICAgICAgICBsZXQgYXR0ckRldGFpbHMgPSByZXN1bHQuYXR0ckRldGFpbHMgfHwge31cclxuICAgICAgICAgIHRoaXMucm93ZGF0YW1hcERldGFpbHNbdGhpcy5kdGxBdHRyXVt0aGlzLmR0bG9wdGlvbnZhbF0gPSBhdHRyRGV0YWlsc1t0aGlzLmR0bG9wdGlvbnZhbF07XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwiTWFwcGluZyBhdHRyaWJ1dGUgaXMgZW1wdHkgcGxlYXNlIHJldHJ5LlwiKTtcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIG9uU3VibWl0KGZvcm1WYWwpIHtcclxuICAgIHZhciB0ID0gT2JqZWN0LmtleXMoZm9ybVZhbC5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1WYWwuZm9ybS5nZXQoZmllbGQpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNhdmVGaWxlT3B0aW9uKGZvcm1WYWwudmFsdWUpO1xyXG4gIH1cclxuICBzYXZlRmlsZU9wdGlvbihmcm12YWxzKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9iaiA9IHsgLi4uZnJtdmFscywgY29sdW1uX2Zvcm1hdDogdGhpcy5jb2xGb3JtYXRlLCBpZ25vcmVfY29sdW1uOiB0aGlzLmlnbm9yZUZvcm1hdGUgfTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2ZpbGVVcGxvYWQnO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSAnYWRkRmlsZU9wdGlvbic7XHJcbiAgICB0aGlzLmNzLmxvYWRpRmlsZShyZXFPYmosIHRoaXMuaGVhZGVyLCAnZmlsZVVwbG9hZC9sb2FkJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdCB8fCB7fTtcclxuICAgICAgICB0aGlzLmZpbGVPcHRpb25zTGlzdCA9IHJlc3VsdC5maWxlT3B0aW9uc0xpc3Q7XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZSA9IHJlc3VsdC5maWxlX2lkbjtcclxuICAgICAgICB0aGlzLlZhbGlkYXRlRmlsZUhlYWRlck1hcHBpbmcoJ04nKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgYWRkRmlsZUxvZyhmaWxlSWRuKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICByZXFPYmpbJ2ZpbGVfaWRuJ10gPSBmaWxlSWRuO1xyXG4gICAgcmVxT2JqWydmaWxlX3N0YXR1cyddID0gXCJIZWFkZXIgSW5zZXJ0ZWRcIjtcclxuICAgIHJlcU9ialsndmFsaWRhdGlvbl9yZW1hcmtzJ10gPSBcIkhlYWRlciB2YWxpZGF0ZWRcIjtcclxuICAgIHJlcU9ialsnaGVhZGVyX3JvdyddID0gdGhpcy5hbGxjb2xzO1xyXG4gICAgcmVxT2JqWydoZWFkZXJfYXR0cl9yb3cnXSA9IHRoaXMuY29sRm9ybWF0ZTtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gJ2FkZEZpbGVMb2cnO1xyXG4gICAgdGhpcy5jcy5sb2FkaUZpbGUocmVxT2JqLCB0aGlzLmhlYWRlciwgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQgfHwge307XHJcbiAgICAgICAgdGhpcy5maWxlTG9nSWRuID0gcmVzdWx0LmZpbGVfbG9nX2lkbjtcclxuICAgICAgICB0aGlzLnNldFJvd0RhdGFNYXBwKCk7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIkhlYWRlciB2YWxpZGF0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIFZhbGlkYXRlRmlsZUhlYWRlck1hcHBpbmcoZm9ybWF0U2F2ZSkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcblxyXG4gICAgdGhpcy5zaG93ID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RlcE1zZyA9ICdIZWFkZXIgdmVyaWZpY2F0aW9uIGluIHByb2Nlc3MgLi4uJztcclxuICAgIHRoaXMuY29sRm9ybWF0ZSA9IFtdO1xyXG4gICAgdGhpcy5pZ25vcmVGb3JtYXRlID0gW107XHJcbiAgICB0aGlzLmFsbGNvbHMgPSBbXTtcclxuICAgIGxldCBpc1ZhbGlkYXRlID0gdHJ1ZTtcclxuICAgIHRoaXMuaGVhZGVyTGlzdC5mb3JFYWNoKGhkciA9PiB7XHJcbiAgICAgIGxldCBoZHJEdGwgPSB0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdIHx8ICcnXHJcbiAgICAgIGlmIChoZHJEdGwuYXR0ciA9PSAnJyAmJiBoZHJEdGwuaWdub3JlICE9ICdZJykge1xyXG4gICAgICAgIGlzVmFsaWRhdGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaGRyRHRsLmF0dHIgIT0gJycgJiYgaGRyRHRsLmlnbm9yZSAhPSAnTicpIHtcclxuICAgICAgICB0aGlzLmNvbEZvcm1hdGUucHVzaChoZHJEdGwuYXR0cik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGhkckR0bC5pZ25vcmUgPT0gJ1knKSB7XHJcbiAgICAgICAgdGhpcy5pZ25vcmVGb3JtYXRlLnB1c2goaGRyKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFsbGNvbHMucHVzaChoZHIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGlzVmFsaWRhdGUgJiYgKHRoaXMuZmlsZVR5cGUgPT0gbnVsbCB8fCB0aGlzLmZpbGVUeXBlID09IHVuZGVmaW5lZCB8fCB0aGlzLmZpbGVUeXBlID09IFwiXCIpKSB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG5cclxuICAgICAgdGhpcy5zdGVwTXNnID0gXCJcIjtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bmZpbGVVcGxvYWRNb2RhbCcpLmNsaWNrKCk7XHJcbiAgICAgIHRoaXMuc3RlcCA9IDI7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICBpZiAoaXNWYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmIChmb3JtYXRTYXZlID09ICdZJykge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVmaWxlT3B0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkRmlsZUxvZyh0aGlzLmZpbGVUeXBlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcIlBsZWFzZSBzcGVjaWZ5IG1hcHBpbmcgb3IgbWFya2UgYXMgaWdub3JlIFwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93ID0gZmFsc2U7XHJcblxyXG5cclxuICB9XHJcbiAgaGRySWRuO1xyXG4gIHVwZGF0ZWZpbGVPcHRpb24oKSB7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9ICdmaWxlVXBsb2FkJztcclxuICAgIHJlcU9ialsnZmlsZUlkbiddID0gdGhpcy5maWxlVHlwZTtcclxuICAgIHJlcU9ialsnY29sdW1uX2Zvcm1hdCddID0gdGhpcy5jb2xGb3JtYXRlO1xyXG4gICAgcmVxT2JqWydpZ25vcmVfY29sdW1uJ10gPSB0aGlzLmlnbm9yZUZvcm1hdGU7XHJcblxyXG4gICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSAndXBkYXRlQ29sdW1uRm9ybWF0JztcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgdGhpcy5jcy5sb2FkaUZpbGUocmVxT2JqLCB0aGlzLmhlYWRlciwgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgfVxyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRGaWxlKCkge1xyXG4gICAgdGhpcy5kYXRlRm9ybWF0ID0gdGhpcy5kYXRlRm9ybWF0IHx8ICdkZC9tbS95eSc7XHJcbiAgICB0aGlzLmRlbGltID0gdGhpcy5kZWxpbSB8fCAnLyc7XHJcbiAgICB0aGlzLnNob3cgPSB0cnVlO1xyXG4gICAgbGV0IGRhdGVWYWxpZCA9IHRydWU7XHJcbiAgICBsZXQgbWFzc2FnZSA9IFwiXCI7XHJcblxyXG4gICAgaWYgKCF0aGlzLm1hcHBpbmdza2lwKSB7XHJcbiAgICAgIHRoaXMuc3RlcE1zZyA9IFwiRGF0YSB2ZXJpZmljYXRpb24gaW4gcHJvY2VzcyAuLi5cIjtcclxuICAgICAgdGhpcy5oZWFkZXJMaXN0LmZvckVhY2goaGRyID0+IHtcclxuICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgIGxldCBhdHRyID0gdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyIHx8ICcnO1xyXG4gICAgICAgIGxldCBhdHRyVHlwZSA9IHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uZHRhX3R5cCB8fCAnJztcclxuICAgICAgICBsZXQgaXNJZ25vcmUgPSB0aGlzLmhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmlnbm9yZSB8fCAnJztcclxuICAgICAgICBpZiAoaXNJZ25vcmUgPT0gJ1knKSB7XHJcbiAgICAgICAgICB0aGlzLm1hcHBTaGVldERhdGEubWFwKChyb3dEYXRhLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm1hcHBTaGVldERhdGFbaV1baGRyXTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoYXR0clR5cGUgPT0gJ2MnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFwcFNoZWV0RGF0YS5tYXAoKHJvd0RhdGEsIGkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5jaGFySGVhZGVyTGlzdC5pbmRleE9mKGhkcikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGxldCBhdHRyZHRsVmFsID0gcm93RGF0YVtoZHJdIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF0dHJkdGxWYWwgIT0gJycpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGxldCBhdHRyRHRsTWFwVmFsID0gdGhpcy5yb3dkYXRhbWFwRGV0YWlsc1thdHRyXVthdHRyZHRsVmFsXS5zcnQ7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWFwcFNoZWV0RGF0YVtpXVthdHRyXSA9IGF0dHJEdGxNYXBWYWwudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhdHRyICE9IGhkcilcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubWFwcFNoZWV0RGF0YVtpXVtoZHJdXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgfSBlbHNlIGlmIChhdHRyVHlwZSA9PSAnbicpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXBwU2hlZXREYXRhLm1hcCgocm93RGF0YSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBhdHRyZHRsVmFsID0gcm93RGF0YVtoZHJdIHx8ICcnO1xyXG4gICAgICAgICAgICAgIGlmIChhdHRyZHRsVmFsICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgICAgICAgICAgYXR0cmR0bFZhbCA9IGF0dHJkdGxWYWwucmVwbGFjZSgvW14wLTkuLV0vZywgXCJcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcHBTaGVldERhdGFbaV1bYXR0cl0gPSBhdHRyZHRsVmFsLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChhdHRyICE9IGhkcilcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm1hcHBTaGVldERhdGFbaV1baGRyXVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJUeXBlID09ICdkJykge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tYXBwU2hlZXREYXRhLm1hcCgocm93RGF0YSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgICAgICAgbGV0IGF0dHJkdGxWYWwgPSByb3dEYXRhW2hkcl0gfHwgJyc7XHJcbiAgICAgICAgICAgICAgbGV0IGR0RnJtID0gdGhpcy5kYXRlRm9ybWF0TWFwW2hkcl0gfHwgJ2RkL21tL3l5JztcclxuICAgICAgICAgICAgICBpZiAoYXR0cmR0bFZhbCAhPSAnJylcclxuICAgICAgICAgICAgICAgIGF0dHJkdGxWYWwgPSB0aGlzLmNzLmRhdGVWYWxpZGF0aW9uKGF0dHJkdGxWYWwsIGR0RnJtKTtcclxuICAgICAgICAgICAgICBpZiAoYXR0cmR0bFZhbCA9PSAnaW52YWlsZCcpIHtcclxuICAgICAgICAgICAgICAgIGRhdGVWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgbWFzc2FnZSA9IFwiUGxlYXNlIGNoZWNrIERhdGUgOlwiICsgcm93RGF0YVtoZHJdICsgXCIgRGF0ZSBGb3JtYXQgOlwiICsgZHRGcm07XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLm1hcHBTaGVldERhdGFbaV1bYXR0cl0gPSBhdHRyZHRsVmFsLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgaWYgKGF0dHIgIT0gaGRyKVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubWFwcFNoZWV0RGF0YVtpXVtoZHJdXHJcblxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJUeXBlID09ICd0Jykge1xyXG4gICAgICAgICAgICB0aGlzLm1hcHBTaGVldERhdGEubWFwKChyb3dEYXRhLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGF0dHJkdGxWYWwgPSByb3dEYXRhW2hkcl0gfHwgJyc7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMubWFwcFNoZWV0RGF0YVtpXVthdHRyXSA9IGF0dHJkdGxWYWwudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICBpZiAoYXR0ciAhPSBoZHIpXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5tYXBwU2hlZXREYXRhW2ldW2hkcl1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZGF0ZVZhbGlkKSB7XHJcbiAgICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgICAgcmVxT2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7Ly90aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbmFtZSddO1xyXG4gICAgICByZXFPYmpbJ2ZpbGVfbG9nX2lkbiddID0gdGhpcy5maWxlTG9nSWRuO1xyXG4gICAgICByZXFPYmpbJ2F0dHJfZGF0YSddID0gdGhpcy5tYXBwU2hlZXREYXRhO1xyXG4gICAgICByZXFPYmpbJ2luX2RhdGEnXSA9IHRoaXMuc2hlZXREYXRhO1xyXG4gICAgICByZXFPYmpbJ2RhdGVmb3JtYXQnXSA9IHRoaXMuZGF0ZUZvcm1hdE1hcDtcclxuICAgICAgdGhpcy5oZWFkZXJbXCJtZXRob2RcIl0gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICAgIGxldCB1cmwgPSBcImZpbGVVcGxvYWQvbG9hZFwiO1xyXG4gICAgICBpZiAodGhpcy5tZGwgPT0gJ2lud2FyZCcpIHtcclxuICAgICAgICB1cmwgPSAnaW53YXJkL2xvYWRGaWxlJztcclxuICAgICAgICByZXFPYmpbJ2lud2FyZF9pZG4nXSA9IHRoaXMuaW53YXJkX2lkbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY29uc29sZS5sb2cocmVxT2JqKTtcclxuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaGVhZGVyKTtcclxuXHJcbiAgICAgIHRoaXMuY3MubG9hZGlGaWxlKHJlcU9iaiwgdGhpcy5oZWFkZXIsIHVybCkudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0IHx8IHt9O1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zdGVwID0gNDtcclxuICAgICAgICAgIHRoaXMuZmlsZUxvZ0lkbiA9IHJlc3VsdC5maWxlX2xvZ19pZG47XHJcbiAgICAgICAgICB0aGlzLmhkcklkbiA9IHJlc3VsdC5oZHJJZG47XHJcbiAgICAgICAgICB0aGlzLmdldFByb2dyZXNzRmlsZSh0aGlzLmZpbGVMb2dJZG4pO1xyXG4gICAgICAgICAgdGhpcy5sYWJsZUZpbGUgPSBcIkZpbGUgU2VxdWVuY2UgTm8uIFwiICsgdGhpcy5maWxlTG9nSWRuICsgXCIgVXBsb2FkaW5nIGluIHByb2dyZXNzLi4uXCI7XHJcbiAgICAgICAgICAvLyBzZXQgZmlsZSBpZCB0byBsb2NhbCBzdG9yYWdlXHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXBsb2FkZWRGaWxlSWQnLCByZXN1bHQuZmlsZV9sb2dfaWRuKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmxhYmxlID0gXCJQcmljaW5nIFNlcXVlbmNlIE5vLiBcIiArIHRoaXMuaGRySWRuICsgXCIgUHJpY2UgY2FsY3VsYXRpb25zIGluIHByb2dyZXNzLi4uXCI7XHJcblxyXG4gICAgICAgICAgdGhpcy5nZXRQcm9ncmVzc1ByaWNlKHRoaXMuaGRySWRuKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihtYXNzYWdlKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKFwibWFwcFNoZWV0RGF0YVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLm1hcHBTaGVldERhdGEpKTtcclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5zaGVldERhdGFcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5zaGVldERhdGEpKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZU1hcHBpbmcoaGRyT2JqLCBoZHIsIGF0dHIpIHtcclxuICAgIHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uaWdub3JlID0gJ1knO1xyXG4gICAgdGhpcy5oZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyID0gJyc7XHJcbiAgICB0aGlzLnJlbW92ZUF0dHJPcHRWYWwoYXR0ciwgaGRyKTtcclxuICB9XHJcblxyXG5cclxuICByZW1vdmVBdHRyT3B0VmFsKGF0dHIsIG9wdGlvbmFWYWwpIHtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2ZpbGVVcGxvYWQnO1xyXG4gICAgcmVxT2JqWydhdHRyJ10gPSBhdHRyO1xyXG4gICAgcmVxT2JqWydvcHRpb25hVmFsJ10gPSBvcHRpb25hVmFsO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9ICdyZW1vdmVBdHRyT3B0VmFsJztcclxuICAgIHRoaXMuY3MubG9hZGlGaWxlKHJlcU9iaiwgdGhpcy5oZWFkZXIsICdmaWxlVXBsb2FkL2xvYWQnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVycm9yKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHJlbW92ZURldGFpbEF0dHJPcHRWYWwoYXR0cklkbiwgb3B0aW9uYVZhbCwgdmFsLCBoZHJBdHRyKSB7XHJcbiAgICB0aGlzLnJvd2RhdGFtYXBEZXRhaWxzW2hkckF0dHJdW29wdGlvbmFWYWxdLnZhbCA9ICcnO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICByZXFPYmpbJ2F0dHJWYWwnXSA9IHZhbDtcclxuICAgIHJlcU9ialsnb3B0aW9uYVZhbCddID0gb3B0aW9uYVZhbDtcclxuICAgIHJlcU9ialsnYXR0cl9pZG4nXSA9IGF0dHJJZG47XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gJ3JlbW92ZUF0dHJPcHRWYWwnO1xyXG4gICAgdGhpcy5jcy5sb2FkaUZpbGUocmVxT2JqLCB0aGlzLmhlYWRlciwgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICBzdHRzRmlsZSA9IHt9XHJcbiAgZ2V0UHJvZ3Jlc3NGaWxlKGZpbGVMb2dJZG4pIHtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gJ2ZpbGVVcGxvYWQnO1xyXG4gICAgcmVxT2JqWydmaWxlX2xvZ19pZG4nXSA9IGZpbGVMb2dJZG47Ly90aGlzLmZpbGVMb2dJZG47XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIHRoaXMuaGVhZGVyW1wibWV0aG9kXCJdID0gJ2dldEZpbGVMb2dTdGF0dXMnO1xyXG4gICAgdGhpcy5jcy5sb2FkaUZpbGUocmVxT2JqLCB0aGlzLmhlYWRlciwgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLmNsaWNrZWQgPSB0cnVlO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQgfHwge307XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgICB0aGlzLnN0dHNGaWxlWydDJ10gPSByZXN1bHRbJ0MnXTtcclxuICAgICAgICB0aGlzLnN0dHNGaWxlWydQJ10gPSByZXN1bHRbJ1AnXTtcclxuICAgICAgICB0aGlzLnN0dHNGaWxlWydFJ10gPSByZXN1bHRbJ0UnXTtcclxuICAgICAgICB0aGlzLnN0dHNGaWxlWydUJ10gPSByZXN1bHRbJ1QnXTtcclxuICAgICAgICB0aGlzLnN0dHNGaWxlWydJJ10gPSByZXN1bHRbJ0knXTtcclxuICAgICAgICB0aGlzLnN0ZXAgPSA0O1xyXG4gICAgICAgIHRoaXMudG90UHJvZ3Jlc3NGaWxlID0gTWF0aC5jZWlsKHBhcnNlRmxvYXQocmVzdWx0WydDJ10pICogMTAwIC8gcGFyc2VGbG9hdChyZXN1bHRbJ1QnXSkpO1xyXG4gICAgICAgIHRoaXMucmVjYWxsRmlsZShmaWxlTG9nSWRuKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRvdFByb2dyZXNzKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAvLyB0aGlzLmZsYXNoTWVzc2FnZXNTZXJ2aWNlLnNob3cocmVzcG9uc2UubWVzc2FnZSwgeyBjc3NDbGFzczogJ2FsZXJ0LXN1Y2Nlc3MnLCB0aW1lb3V0OiAzMDAwIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vIGNoZWNrVXBsb2FkU3R0KCkge1xyXG4gIC8vICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgLy8gICBsZXQgcmVxT2JqID0ge307XHJcbiAgLy8gICByZXFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1uYW1lJ107XHJcbiAgLy8gICByZXFPYmpbJ2ZpbGVfbG9nX2lkbiddID0gdGhpcy5maWxlTG9nSWRuO1xyXG4gIC8vICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgLy8gICB0aGlzLnVzLmRhdGEocmVxT2JqLCAnZ2V0RmlsZUxvZ1N0YXR1cycsICdmaWxlVXBsb2FkL2xvYWQnKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gIC8vICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gIC8vICAgICAgIHRoaXMuY2xpY2tlZCA9IHRydWU7XHJcbiAgLy8gICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdCB8fCB7fTtcclxuICAvLyAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gIC8vICAgICAgIHRoaXMuc3R0c1snQyddID0gcmVzdWx0WydDJ107XHJcbiAgLy8gICAgICAgdGhpcy5zdHRzWydQJ10gPSByZXN1bHRbJ1AnXTtcclxuICAvLyAgICAgICB0aGlzLnN0dHNbJ0UnXSA9IHJlc3VsdFsnRSddO1xyXG4gIC8vICAgICAgIHRoaXMuc3R0c1snVCddID0gcmVzdWx0WydUJ107XHJcbiAgLy8gICAgICAgdGhpcy5zdGVwID0gNDtcclxuICAvLyAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAvLyAgICAgICB0aGlzLmZsYXNoTWVzc2FnZXNTZXJ2aWNlLnNob3cocmVzcG9uc2UubWVzc2FnZSwgeyBjc3NDbGFzczogJ2FsZXJ0LXN1Y2Nlc3MnLCB0aW1lb3V0OiAzMDAwIH0pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gIC8vICAgfSwgZXJyb3IgPT4ge1xyXG4gIC8vICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAvLyAgICAgdGhpcy5mbGFzaE1lc3NhZ2VzU2VydmljZS5zaG93KGVycm9yLCB7IGNzc0NsYXNzOiAnYWxlcnQtZGFuZ2VyJywgdGltZW91dDogMzAwMCB9KTtcclxuICAvLyAgIH0pO1xyXG5cclxuICAvLyB9XHJcblxyXG4gIHN0dHMgPSB7fTtcclxuICBjbGlja2VkID0gZmFsc2U7XHJcbiAgdG90UHJvZ3Jlc3MgPSAwO1xyXG4gIHRvdFByb2dyZXNzRmlsZSA9IDA7XHJcbiAgZ2V0UHJvZ3Jlc3NQcmljZShoZHJJZG4pIHtcclxuICAgIC8vIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICByZXFPYmpbJ3NlcU5vJ10gPSBoZHJJZG47Ly9cIjg0NlwiOy8vdGhpcy5maWxlTG9nSWRuO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9ICdnZXRQcmljZVN0YXR1cyc7XHJcbiAgICB0aGlzLmNzLmxvYWRpRmlsZShyZXFPYmosIHRoaXMuaGVhZGVyLCAnZmlsZVVwbG9hZC9sb2FkJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMuY2xpY2tlZCA9IHRydWU7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdCB8fCB7fTtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuc3R0c1snQyddID0gcmVzdWx0WydDJ107XHJcbiAgICAgICAgdGhpcy5zdHRzWydQJ10gPSByZXN1bHRbJ1AnXTtcclxuICAgICAgICB0aGlzLnN0dHNbJ0UnXSA9IHJlc3VsdFsnRSddO1xyXG4gICAgICAgIHRoaXMuc3R0c1snVCddID0gcmVzdWx0WydUJ107XHJcbiAgICAgICAgdGhpcy5zdGVwID0gNDtcclxuICAgICAgICB0aGlzLnRvdFByb2dyZXNzID0gTWF0aC5jZWlsKHBhcnNlRmxvYXQocmVzdWx0WydDJ10pICogMTAwIC8gcGFyc2VGbG9hdChyZXN1bHRbJ1QnXSkpO1xyXG4gICAgICAgIHRoaXMucmVjYWxsKHRoaXMuaGRySWRuKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRvdFByb2dyZXNzKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAvLyB0aGlzLmZsYXNoTWVzc2FnZXNTZXJ2aWNlLnNob3cocmVzcG9uc2UubWVzc2FnZSwgeyBjc3NDbGFzczogJ2FsZXJ0LXN1Y2Nlc3MnLCB0aW1lb3V0OiAzMDAwIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBsYXN0UmVmcmVzaFRpbWVGaWxlID0gbnVsbDtcclxuICByZWNhbGxGaWxlKGZpbGVMb2dJZG4pIHtcclxuXHJcbiAgICBpZiAodGhpcy50b3RQcm9ncmVzc0ZpbGUgPCAxMDApIHtcclxuICAgICAgdGhpcy5sYXN0UmVmcmVzaFRpbWVGaWxlID0gbmV3IERhdGUoKTtcclxuICAgICAgdGhpcy50aW1lcmZpbGUgPVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5nZXRQcm9ncmVzc0ZpbGUoZmlsZUxvZ0lkbik7XHJcbiAgICAgICAgfSwgNTAwMCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXJmaWxlKTtcclxuICAgICAgLy8gdGhpcy5QbGFubmluZ0NvbXBvbmVudC5nZXRQYWNrZXRzQnlIZWFkZXJJZChoZHJJZG4pO1xyXG4gICAgICAvLyB0aGlzLmNsb3NlYnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgaWYgKHRoaXMudG90UHJvZ3Jlc3NGaWxlID09IDEwMCAmJiB0aGlzLnRvdFByb2dyZXNzID09IDEwMCkge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG5maWxlVXBsb2FkTW9kYWwnKS5jbGljaygpO1xyXG5cclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wcmljaW5nL3JvdWdoL3BsYW5pbmdzY3JlZW4vcm91Z2hQbGFuaW5nU2NyZWVuJ10sIHsgcXVlcnlQYXJhbXM6IHsgaGRySWQ6IHRoaXMuaGRySWRuIH0gfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG4gIGxhc3RSZWZyZXNoVGltZSA9IG51bGw7XHJcbiAgcmVjYWxsKGhkcklkbikge1xyXG4gICAgaWYgKHRoaXMudG90UHJvZ3Jlc3MgPCAxMDApIHtcclxuICAgICAgdGhpcy5sYXN0UmVmcmVzaFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICB0aGlzLnRpbWVyUHJpY2UgPVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5nZXRQcm9ncmVzc1ByaWNlKGhkcklkbik7XHJcbiAgICAgICAgfSwgNTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyUHJpY2UpO1xyXG4gICAgICBpZiAodGhpcy50b3RQcm9ncmVzc0ZpbGUgPT0gMTAwICYmIHRoaXMudG90UHJvZ3Jlc3MgPT0gMTAwKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bmZpbGVVcGxvYWRNb2RhbCcpLmNsaWNrKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJpY2luZy9yb3VnaC9wbGFuaW5nc2NyZWVuL3JvdWdoUGxhbmluZ1NjcmVlbiddLCB7IHF1ZXJ5UGFyYW1zOiB7IGhkcklkOiB0aGlzLmhkcklkbiB9IH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIFNraXBWZXJpZmljYXRpb24oKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgdGhpcy5tYXBwaW5nc2tpcCA9IHRydWU7XHJcbiAgICB0aGlzLmFkZEZpbGVMb2codGhpcy5maWxlVHlwZSk7XHJcblxyXG4gIH1cclxuICBTa2lwVmVyaWZpY2F0aW9uRHRsKCkge1xyXG4gICAgdGhpcy5tYXBwaW5nc2tpcCA9IHRydWU7XHJcbiAgICB0aGlzLnN0ZXAgPSA0O1xyXG4gICAgdGhpcy51cGxvYWRGaWxlKCk7XHJcbiAgfVxyXG5cclxuICBsb2FkRmlsZVR5cGVEYXRhKGZpbGVVcGxvYWQsIG1kbCkge1xyXG4gICAgdGhpcy5zaGVldERhdGEgPSBbXTtcclxuICAgIHRoaXMuaGVhZGVyQXR0cmlidXRlRHRsID0ge307XHJcbiAgICB0aGlzLmRlZnVsdERpc3BsYXlMZW4gPSA1O1xyXG4gICAgdGhpcy5kZWZ1bHREaXNwbGF5T2JqID0gW107XHJcbiAgICB0aGlzLmF0dHJTdHJ1Y3R1cmVEdGwgPSBbXTtcclxuICAgIHRoaXMuaGVhZGVyTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5oZWFkZXJwcnA7XHJcbiAgICB0aGlzLmF0dHJwcnA7XHJcbiAgICB0aGlzLnRvdGFsbWF0Y2ggPSAwO1xyXG4gICAgdGhpcy50b3RhbGlnbm9yZSA9IDA7XHJcbiAgICB0aGlzLnBhZ2VEZWZpbmF0aW9uID0ge307XHJcbiAgICB0aGlzLnJvd2RhdGFtYXBEZXRhaWxzID0ge307XHJcbiAgICB0aGlzLnJvd2Rpc3RpbmN0RGF0YU1hcCA9IHt9O1xyXG4gICAgdGhpcy5jaGFySGVhZGVyTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVEdGxNYXAgPSB7fTtcclxuICAgIHRoaXMubWFwcFNoZWV0RGF0YSA9IFtdO1xyXG4gICAgdGhpcy5zdGF0dXNMaXN0ID0gW107XHJcbiAgICB0aGlzLmZpbGVEZXRhaWxzID0gW107XHJcbiAgICB0aGlzLmZpbGVUeXBlTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5maWxlT3B0aW9uc0xpc3QgPSBbXTtcclxuICAgIHRoaXMuZmlsZVR5cGU7XHJcbiAgICB0aGlzLm5tZTtcclxuICAgIHRoaXMudHlwO1xyXG4gICAgdGhpcy5kZXNjcmlwdGlvbjtcclxuICAgIHRoaXMuY2hlY2tfc3RhdHVzID0gW107XHJcbiAgICB0aGlzLnBrdF9zdGF0dXMgPSBbXTtcclxuICAgIHRoaXMuY29sRm9ybWF0ZSA9IFtdO1xyXG4gICAgdGhpcy5hbGxjb2xzID0gW107XHJcbiAgICB0aGlzLmZpbGVMb2dJZG4gPSAwO1xyXG4gICAgdGhpcy5zaG93ID0gZmFsc2U7XHJcbiAgICB0aGlzLnN0ZXBNc2cgPSAnJztcclxuICAgIHRoaXMuc3R0cyA9IHt9O1xyXG4gICAgdGhpcy5jbGlja2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLnRvdFByb2dyZXNzID0gMDtcclxuICAgIHRoaXMudG90UHJvZ3Jlc3NGaWxlID0gMDtcclxuICAgIHRoaXMuc3RlcCA9IDE7XHJcbiAgICB0aGlzLmxhYmxlID0gXCJcIjtcclxuICAgIHRoaXMuZmlsZW5tZSA9IFwiXCI7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICB0aGlzLmRhdGVGb3JtYXRNYXAgPSB7fTtcclxuICAgIGxldCBmaWxldHlwZSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmaWxldHlwZSddIHx8ICcnO1xyXG4gICAgdGhpcy5tZGwgPSBtZGw7XHJcbiAgICB0aGlzLmZpbGVubWUgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZmlsZXR5cGUnXSB8fCAnJztcclxuICAgIHRoaXMubWFwcGluZ3NraXAgPSBmYWxzZTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gZmlsZVVwbG9hZDtcclxuICAgIGlmIChtZGwgIT0gJycpXHJcbiAgICAgIHJlcU9ialsnbWRsJ10gPSBtZGw7XHJcbiAgICBpZiAoZmlsZXR5cGUgIT0gJycpXHJcbiAgICAgIHJlcU9ialsnZmlsZW5tZSddID0gZmlsZXR5cGU7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLmhlYWRlcikpO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLmhlYWRlcltcIm1ldGhvZFwiXSA9ICdsb2FkRmlsZVVwbG9hZCc7XHJcbiAgICB0aGlzLmNzLmxvYWRpRmlsZShyZXFPYmosIHRoaXMuaGVhZGVyLCAnZmlsZVVwbG9hZC9sb2FkJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0IHx8IHt9O1xyXG4gICAgICAgIHRoaXMucGFnZURlZmluYXRpb24gPSByZXN1bHQucGFnZURlZmluYXRpb25cclxuICAgICAgICB0aGlzLnN0YXR1c0xpc3QgPSByZXN1bHQuc3RhdHVzTGlzdDtcclxuICAgICAgICB0aGlzLmZpbGVEZXRhaWxzID0gcmVzdWx0LmZpbGVEZXRhaWxzO1xyXG4gICAgICAgIHRoaXMuZmlsZVR5cGVMaXN0ID0gcmVzdWx0LmZpbGVUeXBlTGlzdDtcclxuICAgICAgICB0aGlzLmZpbGVPcHRpb25zTGlzdCA9IHJlc3VsdC5maWxlT3B0aW9uc0xpc3QgfHwgW107XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZU9wdGlvbnNMaXN0Lmxlbmd0aCA+IDApXHJcbiAgICAgICAgICB0aGlzLmZpbGVUeXBlID0gdGhpcy5maWxlT3B0aW9uc0xpc3RbMF0uaztcclxuICAgICAgICBsZXQgYWRkbEF0dHIgPSB0aGlzLmZpbGVPcHRpb25zTGlzdFswXS5hZGRsX2F0dHIgfHwge307XHJcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0ID0gYWRkbEF0dHIuZGF0ZWZvcm1hdCB8fCAnZGQvbW0veXknO1xyXG4gICAgICAgIHRoaXMuZGVsaW0gPSBhZGRsQXR0ci5kZWxpbSB8fCAnLyc7XHJcbiAgICAgICAgdGhpcy5zdGF0dXNMaXN0ID0gcmVzdWx0LnN0YXR1c0xpc3QubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi5rLFxyXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG5cclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG5cclxuICAgIGxldCBtZGxrID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWRsS2V5JykpO1xyXG4gICAgbGV0IGNVcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICB0aGlzLmNEdCA9IG5ldyBEYXRlKCk7XHJcbiAgICB0aGlzLmhlYWRlciA9IHtcclxuICAgICAgJ2NsaWVudGtleSc6IENvb2tpZS5nZXQoJ19jaycpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAnbG9naW5pZCc6IENvb2tpZS5nZXQoJ19sb2dpZCcpLFxyXG4gICAgICAnbW9kdWxla2V5JzogbWRsa1tjVXJsLnNwbGl0KCcvJylbMV1dLFxyXG4gICAgICAnc291cmNlJzogJ3FzJ1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xyXG4gICAgICBsZXQgbWRsID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2dycCddIHx8ICcnO1xyXG5cclxuICAgICAgdGhpcy5sb2FkRmlsZVR5cGVEYXRhKCdmaWxlVXBsb2FkJywgbWRsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBpbndhcmRfaWRuO1xyXG4gIGlud2FyZFN0b2NrVHlwZTtcclxuICBzdG9ja0lud2FyZFVwbG9hZChpbndhcmREdGwsIG1kbCkge1xyXG4gICAgdGhpcy5pbndhcmRfaWRuID0gaW53YXJkRHRsLmlud2FyZF9pZG47XHJcbiAgICB0aGlzLmlud2FyZFN0b2NrVHlwZSA9IGlud2FyZER0bC5zdG9ja190eXBlO1xyXG4gICAgdGhpcy5tZGwgPSBtZGw7XHJcbiAgICB0aGlzLmxvYWRGaWxlVHlwZURhdGEoJ2ZpbGVVcGxvYWQnLCBtZGwpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy50aW1lcmZpbGUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcmZpbGUpO1xyXG5cclxuICAgIGlmICh0aGlzLnRpbWVyUHJpY2UgIT0gdW5kZWZpbmVkKVxyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lclByaWNlKTtcclxuXHJcbiAgfVxyXG5cclxuICBzZXRPcHRpb25zRm9yTWl4VG9TaW5nbGUoKSB7XHJcbiAgICB0aGlzLmZpbGVPcHRpb25zTGlzdCA9IFtcclxuICAgICAgeyBcImtcIjogXCI2OTZcIiwgXCJ2XCI6IFwiTWFya2V0aW5nIFN0b2NrXCIgfVxyXG4gICAgXTtcclxuICAgIHRoaXMuZmlsZVR5cGUgPSBcIjY5NlwiO1xyXG4gIH1cclxuXHJcblxyXG59IiwiPGRpdiBjbGFzcz1cIm10XCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZmZmO1wiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWZyYW1lXCI+XHJcbiAgICAgICAgPHAgKm5nSWY9XCJzaG93XCIgY2xhc3M9XCJsb2FkaW5nLXRleHRcIiBzdHlsZT1cInotaW5kZXg6IDk5OTlcIj4ge3tzdGVwTXNnfX0gPC9wPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5uZXJEXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC1lbGVtZW50LXN0ZXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc3RlcC10aGluXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBiZy1ncmV5IG10LXN0ZXAtY29sXCIgW25nQ2xhc3NdPVwieydkb25lJzpzdGVwPT0xID8gJ2RvbmUnOicnfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9c2V0U2V0cCgxKT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LXN0ZXAtbnVtYmVyIGJnLXdoaXRlIGZvbnQtZ3JleVwiPjE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LXN0ZXAtdGl0bGUgdXBwZXJjYXNlIGZvbnQtZ3JleS1jYXNjYWRlXCI+QnJvd3NlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGJnLWdyZXkgbXQtc3RlcC1jb2xcIiBbbmdDbGFzc109XCJ7J2RvbmUnOnN0ZXA9PTIgPyAnZG9uZSc6Jyd9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1zZXRTZXRwKDIpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtc3RlcC1udW1iZXIgYmctd2hpdGUgZm9udC1ncmV5XCI+MjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtc3RlcC10aXRsZSB1cHBlcmNhc2UgZm9udC1ncmV5LWNhc2NhZGVcIj5IZWFkZXIgVmVyaWZpY2F0aW9uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGJnLWdyZXkgbXQtc3RlcC1jb2xcIiBbbmdDbGFzc109XCJ7J2RvbmUnOnN0ZXA9PTMgPyAnZG9uZSc6Jyd9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1zZXRTZXRwKDMpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtc3RlcC1udW1iZXIgYmctd2hpdGUgZm9udC1ncmV5XCI+MzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtc3RlcC10aXRsZSB1cHBlcmNhc2UgZm9udC1ncmV5LWNhc2NhZGVcIj5EYXRhIFZlcmlmaWNhdGlvbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgYmctZ3JleSBtdC1zdGVwLWNvbFwiIFtuZ0NsYXNzXT1cInsnZG9uZSc6c3RlcD09NCA/ICdkb25lJzonJ31cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPXNldFNldHAoNCk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC1zdGVwLW51bWJlciBiZy13aGl0ZSBmb250LWdyZXlcIj40PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC1zdGVwLXRpdGxlIHVwcGVyY2FzZSBmb250LWdyZXktY2FzY2FkZVwiPlVwbG9hZGluZy4uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdXBsb2FkXCIgKm5nSWY9XCJzdGVwPT0xXCI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLW9mZnNldC0zIGNvbC1tZC0zXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAxNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTQgY29udHJvbC1sYWJlbFwiIHN0eWxlPVwicGFkZGluZzogNXB4O1wiPkZpbGUgVHlwZSA6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cImZpbGVUeXBlXCIgWyhuZ01vZGVsKV09XCJmaWxlVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tc2VsZWN0LS08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGZpbGUgb2YgZmlsZU9wdGlvbnNMaXN0XCIgdmFsdWU9XCJ7e2ZpbGU/Lmt9fVwiPnt7ZmlsZT8udn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmaWxlaW5wdXQtd3JhcHBlciBidG4gYnRuLWRlZmF1bHQgIGZpbGVpbnB1dCBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6ICMzYTU4OThcIj48c3Bhbj5Ccm93c2UgZmlsZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGNsYXNzPVwiZmlsZWlucHV0IGJ0bi1wcmltYXJ5XCIgbmFtZT1cImZpbGVuYW1lXCIgaWQ9XCJmaWxlbmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJCcm93c2UgZmlsZVwiIGFjY2VwdD1cIi54bHN4LC5jc3ZcIiAoY2hhbmdlKT1cImluY29taW5nZmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImxlZnQ6IC0xNjMuNzVweDsgdG9wOiA5cHg7XCI+PC9hPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+VXBsb2FkIEZpbGUgOiAmbmJzcDsmbmJzcDsmbmJzcDs8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBjbGFzcz1cImZpbGVpbnB1dCBidG4tcHJpbWFyeVwiIGFjY2VwdD1cIi54bHN4LC5jc3ZcIiBuYW1lPVwiZmlsZW5hbWVcIiBpZD1cImZpbGVuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJpbmNvbWluZ2ZpbGUoJGV2ZW50KVwiIHRpdGxlPVwiQnJvd3NlIGZpbGVcIj4gLS0+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdXBsb2FkXCIgKm5nSWY9XCJzdGVwPT0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsIE1hdGNoIDoge3t0b3RhbG1hdGNofX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG90YWwgSWdub3JlIDoge3t0b3RhbGlnbm9yZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbC1tZC0xMlwiIHN0eWxlPVwib3ZlcmZsb3c6IGF1dG87d2lkdGg6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImZpbGV1cGxvYWR2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGRyIG9mIGhlYWRlckxpc3QgO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hdGNoJzpoZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyIT0nJyAmJiBoZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5pZ25vcmUhPSdZJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZ25vcmUnOmhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmlnbm9yZT09J1knLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoYmcnOmhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHI9PScnICYmIGhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmlnbm9yZSE9J1knXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIChjbGljayk9XCJ1cGRhdGVjb2x1bW5zdGF0dWUoaGRyKVwiPnt7aGRyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGRyIG9mIGhlYWRlckxpc3QgO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cj09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzZWxlY3QgY2xhc3M9XCJzZWxlY3QtY29udHJvbFwiIG5hbWU9XCJ7e2hlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHJ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0clwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY29uZmlybXNldEhlYWRlck1hcHAoaGRyLCRldmVudC50YXJnZXQpXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwic2VsZWN0LWNvbnRyb2xcIiBuYW1lPVwie3toZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNvbmZpcm1zZXRIZWFkZXJNYXBwKGhkcilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tc2VsZWN0LS08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYXR0ckR0bCBvZiBhdHRyU3RydWN0dXJlRHRsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3thdHRyRHRsPy5hdHRyfX1cIj57e2F0dHJEdGw/LmF0dHJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0ciE9JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2hlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhkciBvZiBoZWFkZXJMaXN0IDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmR0YV90eXA9PSdkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJzZWxlY3QtY29udHJvbFwiIG5hbWU9XCJ7e2RhdGVGb3JtYXRNYXBbaGRyXX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRlRm9ybWF0TWFwW2hkcl1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZHRlRm10IG9mIGRhdGVGb3JtYXRMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tkdGVGbXQ/Lmt9fVwiPnt7ZHRlRm10Py52fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3dEaXMgb2YgZGVmdWx0RGlzcGxheU9iaiA7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBoZHIgb2YgaGVhZGVyTGlzdCA7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cm93RGlzW2hkcl19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLW9mZnNldC0xMSBjb2wtbWQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZmlsZUxvZ0lkbj09MCAmJiAoZmlsZW5tZT09J2dlbmVyaWMnIHx8IGZpbGVubWU9PSdnaWFfYmlsbCcpXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgcHVsbC1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW46IDVweFwiIChjbGljayk9XCJTa2lwVmVyaWZpY2F0aW9uKClcIj5Ta2lwPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7ICZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJmaWxlTG9nSWRuPT0wXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgcHVsbC1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW46IDVweFwiIChjbGljayk9XCJWYWxpZGF0ZUZpbGVIZWFkZXJNYXBwaW5nKCdZJylcIj5WZXJpZnk8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdXBsb2FkIFwiICpuZ0lmPVwic3RlcD09M1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdGFibGUtcmVzcG9uc2l2ZSBjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNlbGxzcGFjaW5nPVwiMTBcIiBjbGFzcz1cImRpc3BsYXlUYWJsZSBmaWxldXBsb2Fkdmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGRyIG9mIGNoYXJIZWFkZXJMaXN0IDtsZXQgaj1pbmRleDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJjb2xvcjp3aGl0ZTtib3JkZXI6IDFweCBzb2xpZCB3aGl0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3toZHJ9fSh7e2hlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHJ9fSk8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgW25nQ2xhc3NdPVwieydldmVuJzpqJTI9PTAsJ29kZCc6aiUyPT0xfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhdHRyVmFsIG9mIHJvd2Rpc3RpbmN0RGF0YU1hcFtoZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyXTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjE2MHB4O21hcmdpbi1yaWdodDogMXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbWF0Y2hlZFVsJzpyb3dkYXRhbWFwRGV0YWlsc1toZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyXVthdHRyVmFsXS52YWwgIT0nJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBzdHlsZT1cImxpc3Qtc3R5bGU6IG5vbmU7dGV4dC1hbGlnbjpsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPiB7e2F0dHJWYWx9fSA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyb3dkYXRhbWFwRGV0YWlsc1toZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyXVthdHRyVmFsXS52YWw9PScnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0LWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7cm93ZGF0YW1hcERldGFpbHNbaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cl1bYXR0clZhbF0udmFsfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dkYXRhbWFwRGV0YWlsc1toZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyXVthdHRyVmFsXS52YWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjb25maXJtSGVhZGVyRGV0YWlsc01hcHAoaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cixoZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyX2lkbixhdHRyVmFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tc2VsZWN0LS08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYXR0cmR0bG1hcCBvZiBhdHRyaWJ1dGVEdGxNYXBbaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cl1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3thdHRyZHRsbWFwPy52YWx9fVwiPnt7YXR0cmR0bG1hcD8uZGlzcGxheX19KHt7YXR0cmR0bG1hcD8udmFsfX0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvd2RhdGFtYXBEZXRhaWxzW2hlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHJdW2F0dHJWYWxdLnZhbCE9JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cm93ZGF0YW1hcERldGFpbHNbaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cl1bYXR0clZhbF0udmFsfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7IDxpIChjbGljayk9XCJyZW1vdmVEZXRhaWxBdHRyT3B0VmFsKGhlYWRlckF0dHJpYnV0ZUR0bFtoZHJdLmF0dHJfaWRuLGF0dHJWYWwscm93ZGF0YW1hcERldGFpbHNbaGVhZGVyQXR0cmlidXRlRHRsW2hkcl0uYXR0cl1bYXR0clZhbF0udmFsLFtoZWFkZXJBdHRyaWJ1dGVEdGxbaGRyXS5hdHRyXSlcIiBjbGFzcz1cImZhIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJjb2xvcjogcmVkO2N1cnNvcjogcG9pbnRlcjtcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC1vZmZzZXQtMTEgY29sLW1kLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImZpbGVMb2dJZG49PTAgJiYgKGZpbGVubWU9PSdnZW5lcmljJyB8fCBmaWxlbm1lPT0nZ2lhX2JpbGwnKVwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIHB1bGwtcmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luOiA1cHhcIiAoY2xpY2spPVwiU2tpcFZlcmlmaWNhdGlvbkR0bCgpXCI+U2tpcDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyAmbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIHB1bGwtcmlnaHRcIiBzdHlsZT1cIm1hcmdpbjogNXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkRmlsZSgpXCIgW2Rpc2FibGVkXT1cImdtYXRjaGVkQ291bnQhPWdyZXN1bHRDb3VudFwiPlVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB1cGxvYWRcIiAqbmdJZj1cInN0ZXA9PTRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJzdGVwPT00XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTVweDtjb2xvcjpncmVlbjtmb250LXNpemU6IDIwcHg7dGV4dC1hbGlnbjogbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJsZUZpbGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCIgKm5nSWY9XCJsYXN0UmVmcmVzaFRpbWVGaWxlICE9IG51bGxcIj5MYXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaCB0aW1lIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe3tsYXN0UmVmcmVzaFRpbWVGaWxlIHwgZGF0ZTonbWVkaXVtJ319KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCIgc3R5bGU9XCJtYXJnaW46IDE1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci13YXJuaW5nXCIgcm9sZT1cInByb2dyZXNzYmFyXCIgYXJpYS12YWx1ZW5vdz1cIjYwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLXZhbHVlbWluPVwiMFwiIGFyaWEtdmFsdWVtYXg9XCIxMDBcIiBbbmdTdHlsZV09XCJ7J3dpZHRoJzp0b3RQcm9ncmVzc0ZpbGUrJyUnfSAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0b3RQcm9ncmVzc0ZpbGV9fSAlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInN0ZXA9PTQgJiYgY2xpY2tlZFwiIHN0eWxlPVwibWFyZ2luLXRvcDogMzVweDtcIj48c3Ryb25nPiBDb21wbGV0ZSA6e3tzdHRzRmlsZVsnQyddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgUGVuZGluZyA6IHt7c3R0c0ZpbGVbJ1AnXX19ICZuYnNwOyZuYnNwOyZuYnNwOyBFcnJvciA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzdHRzRmlsZVsnRSddfX0mbmJzcDsmbmJzcDsmbmJzcDsgSW52YWlsZCBTdGF0dXMgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c3R0c0ZpbGVbJ0knXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7IFRvdGFsIDoge3tzdHRzRmlsZVsnVCddfX08L3N0cm9uZz48L3A+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJzdGVwPT00XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDE1cHg7Y29sb3I6Z3JlZW47Zm9udC1zaXplOiAyMHB4O21hcmdpbi10b3A6IDE1cHg7dGV4dC1hbGlnbjogbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDttYXJnaW4tbGVmdDogMjBweDtjb2xvcjogYmxhY2s7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImxhc3RSZWZyZXNoVGltZSAhPSBudWxsXCI+TGFzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2ggdGltZSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHt7bGFzdFJlZnJlc2hUaW1lIHwgZGF0ZTonbWVkaXVtJ319KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCIgc3R5bGU9XCJtYXJnaW46IDE1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci13YXJuaW5nXCIgcm9sZT1cInByb2dyZXNzYmFyXCIgYXJpYS12YWx1ZW5vdz1cIjYwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLXZhbHVlbWluPVwiMFwiIGFyaWEtdmFsdWVtYXg9XCIxMDBcIiBbbmdTdHlsZV09XCJ7J3dpZHRoJzp0b3RQcm9ncmVzcysnJSd9ICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RvdFByb2dyZXNzfX0gJVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2VzcyB0ZXh0LWNlbnRlclwiIHN0eWxlPVwibWFyZ2luOiA1cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoZWNrVXBsb2FkU3R0KClcIj5DaGVja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzPC9idXR0b24+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJzdGVwPT00ICYmIGNsaWNrZWRcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDM1cHg7XCI+PHN0cm9uZz4gQ29tcGxldGUgOnt7c3R0c1snQyddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsgUGVuZGluZyA6IHt7c3R0c1snUCddfX0gJm5ic3A7Jm5ic3A7Jm5ic3A7IEVycm9yIDoge3tzdHRzWydFJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyBUb3RhbCA6IHt7c3R0c1snVCddfX08L3N0cm9uZz48L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG48ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cImZpbGVVcGxvYWRNb2RhbFwiIHRhYmluZGV4PVwiLTFcIiBzdHlsZT1cInotaW5kZXg6IDk5OTk5OVwiIHJvbGU9XCJkaWFsb2dcIlxyXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwic21hbGxNb2RhbEhlYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1rZXlib2FyZD1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgI2ZpbGVVcGxvYWRjbHNidG4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cInNtYWxsTW9kYWxIZWFkXCI+QWRkIGZpbGUgdXBsb2FkIG9wdGlvbjwvaDQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgcm9sZT1cImZvcm1cIiAjZj1cIm5nRm9ybVwiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdChmKVwiIG5hbWU9XCJhcHBGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPk5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwibm1lXCIgbmFtZT1cIm5tZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPkRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRlc2NyaXB0aW9uXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+VHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwidHlwXCIgWyhuZ01vZGVsKV09XCJ0eXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tc2VsZWN0LS08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlVHlwZUxpc3RcIiB2YWx1ZT1cInt7ZmlsZT8ua319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZpbGU/LnZ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPkNoZWNrIHN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgcGxhY2Vob2xkZXI9XCJTZWxlY3QgU3RhdHVzXCIgW29wdGlvbnNdPVwic3RhdHVzTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2hlY2tfc3RhdHVzXCIgbmFtZT1cImNoZWNrX3N0YXR1c1wiIFttdWx0aXBsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93Q2xlYXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI29wdGlvblRlbXBsYXRlIGxldC1vcHRpb249XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmYW1mYW1mYW0tZmxhZ3Mge3tvcHRpb24/LnZhbHVlfX1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uPy5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPlBhY2tldCBzdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IHBsYWNlaG9sZGVyPVwiU2VsZWN0IFN0YXR1c1wiIFtvcHRpb25zXT1cInN0YXR1c0xpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBrdF9zdGF0dXNcIiBuYW1lPVwicGt0X3N0YXR1c1wiIFthbGxvd0NsZWFyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvcHRpb25UZW1wbGF0ZSBsZXQtb3B0aW9uPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmFtZmFtZmFtLWZsYWdzIHt7b3B0aW9uPy52YWx1ZX19XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbj8ubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAjZmlsZVVwbG9hZGNsc2J0bj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFwcEFwcE5vRGJsQ2xpY2tcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXQoZilcIj5TYXZlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJDb2Zpcm1tYXBoZHJcIiAgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cInNtYWxsTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiXHJcbiAgZGF0YS1rZXlib2FyZD1cImZhbHNlXCI+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJDYW5jZWxIZWFkZXJNYXBwKClcIiBjbGFzcz1cImNsb3NlXCIgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+XHJcbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJzbWFsbE1vZGFsSGVhZFwiPkFsZXJ0PC9oND5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgQXJlIHlvdSBzdXJlIEZvciBNYXBwaW5nIDxiPnt7bWFwaGRyfX08L2I+IFRvIEF0dHJpYnV0ZSA8Yj57e2hkcm1hc3NhZ2V9fTwvYj4gXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIChjbGljayk9XCJDYW5jZWxIZWFkZXJNYXBwKClcIiAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cInNldEhlYWRlck1hcHAoKTtcIj5Db25maXJtPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiQ29maXJtbWFwZHRsXCIgIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzbWFsbE1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIlxyXG4gIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiQ2FuY2VsSGVhZGVyTWFwcCgpXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgPlxyXG4gICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiID5DbG9zZTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic21hbGxNb2RhbEhlYWRcIj5BbGVydDwvaDQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIEFyZSB5b3Ugc3VyZSBGb3IgTWFwcGluZyA8Yj57e2R0bG9wdGlvbnZhbH19PC9iPiBUbyBBdHRyaWJ1dGUgIDxiPiB7e2R0bEF0dHJ9fSA8L2I+IHdpdGggQXR0cmlidXRlRGV0YWlsIDxiPnt7ZHRsbWFzc2FnZX19PC9iPiBcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwiQ2FuY2VsSGVhZGVyRGV0YWlsc01hcHAoKVwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cInNldEhlYWRlckRldGFpbHNNYXBwKClcIj5Db25maXJtPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuPGJ1dHRvbiBpZD1cImJ0bmZpbGVVcGxvYWRNb2RhbFwiIFtoaWRkZW5dPVwidHJ1ZVwiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNmaWxlVXBsb2FkTW9kYWxcIj48L2J1dHRvbj5cclxuXHJcbjxidXR0b24gaWQ9XCJidG5Db2Zpcm1tYXBoZHJcIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjQ29maXJtbWFwaGRyXCI+PC9idXR0b24+XHJcbjxidXR0b24gaWQ9XCJidG5Db2Zpcm1tYXBkdGxcIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjQ29maXJtbWFwZHRsXCI+PC9idXR0b24+XHJcblxyXG5cclxuXHJcbjwhLS0gPGRpdiBjbGFzcz1cImNlbnRlcmVkXCI+XHJcbiAgICA8ZGl2IGlkPVwiZGl2U3Bpbm5lclwiIGNsYXNzPVwic3Bpbm5lciBsb2FkaW5nXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXRleHRcIj5Mb2FkaW5nIC4uLjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwidGVzdCgpXCIgaWQ9XCJidG5Mb2FkUmVjb3Jkc1wiIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7cG9zaXRpb246IGFic29sdXRlOyB0b3A6IDUyJTsgbGVmdDogNDUlO1wiPkxvYWQgUmVjb3JkczwvYnV0dG9uPlxyXG4gIDwvZGl2PiAtLT4iXX0=
|