@colijnit/corecomponents_v12 260.1.5 → 260.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/colijnit-corecomponents_v12.umd.js +19 -15
- package/bundles/colijnit-corecomponents_v12.umd.js.map +1 -1
- package/colijnit-corecomponents_v12-260.1.6.tgz +0 -0
- package/colijnit-corecomponents_v12.metadata.json +1 -1
- package/esm2015/lib/components/filter-item/filter-item.component.js +163 -163
- package/esm2015/lib/components/input-scanner/input-scanner.component.js +9 -11
- package/esm2015/lib/components/list-of-values/list-of-values.component.js +9 -3
- package/fesm2015/colijnit-corecomponents_v12.js +178 -174
- package/fesm2015/colijnit-corecomponents_v12.js.map +1 -1
- package/lib/components/hour-scheduling-expandable/style/_layout.scss +1 -0
- package/lib/components/list-of-values/list-of-values.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -187,7 +187,7 @@ export class FilterItemComponent {
|
|
|
187
187
|
var _a, _b;
|
|
188
188
|
return __awaiter(this, void 0, void 0, function* () {
|
|
189
189
|
if (!isNaN(this.minSearchCharsToLoadCollection)) {
|
|
190
|
-
if (text.length < this.minSearchCharsToLoadCollection) {
|
|
190
|
+
if (!text || text.length < this.minSearchCharsToLoadCollection) {
|
|
191
191
|
yield new Promise(resolve => setTimeout(resolve, 300));
|
|
192
192
|
this.collection = undefined;
|
|
193
193
|
}
|
|
@@ -755,167 +755,167 @@ export class FilterItemComponent {
|
|
|
755
755
|
FilterItemComponent.decorators = [
|
|
756
756
|
{ type: Component, args: [{
|
|
757
757
|
selector: "co-filter-item",
|
|
758
|
-
template: `
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|| mode === modes.SelectListWithNumberOutput || mode === modes.SelectListWithStringCollectionOutput">
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
758
|
+
template: `
|
|
759
|
+
<div class="co-filter-item-header">
|
|
760
|
+
<co-collapsible
|
|
761
|
+
[headerTitle]="placeholder"
|
|
762
|
+
[expandButtonLast]="true"
|
|
763
|
+
[iconData]="iconService.getIcon(icons.ArrowPointDown)"
|
|
764
|
+
[expanded]="expanded"
|
|
765
|
+
[showButton]="showButton"
|
|
766
|
+
[buttonText]="filterButtonLabel"
|
|
767
|
+
(buttonClicked)="onButtonClicked()"
|
|
768
|
+
>
|
|
769
|
+
<div class="co-filter-item-collapsable-content">
|
|
770
|
+
<div class="co-filter-item-custom-content" *ngIf="customContent; else collectionContent"
|
|
771
|
+
(keydown)="showButton=true" (mousedown)="showButton=true">
|
|
772
|
+
<ng-content></ng-content>
|
|
773
|
+
</div>
|
|
774
|
+
<ng-template #collectionContent>
|
|
775
|
+
<div class="co-filter-item-collection-content" *ngIf="mode === modes.Filterlist || mode === modes.SingleSelectList
|
|
776
|
+
|| mode === modes.SelectListWithNumberOutput || mode === modes.SelectListWithStringCollectionOutput">
|
|
777
|
+
<co-input-text
|
|
778
|
+
*ngIf="collection?.length > 10 || minSearchCharsToLoadCollection"
|
|
779
|
+
[placeholder]="searchPlaceholder"
|
|
780
|
+
[model]="filterText"
|
|
781
|
+
(modelChange)="onModelChange($event)"
|
|
782
|
+
[readonly]="readonly"
|
|
783
|
+
>
|
|
784
|
+
</co-input-text>
|
|
785
|
+
<div *ngIf="isLoading" class="filter-loader"><span></span></div>
|
|
786
|
+
<div class="no-results" *ngIf="filteredCollection?.length === 0">
|
|
787
|
+
<span [textContent]="noResultsLabel"></span>
|
|
788
|
+
</div>
|
|
789
|
+
<div class="co-filter-item-collection-results">
|
|
790
|
+
<ng-container
|
|
791
|
+
*ngFor="let option of filteredCollection; let index = index">
|
|
792
|
+
<div class="co-filter-item-collection-result-item" *ngIf="index < limitTo || showAllResults">
|
|
793
|
+
<co-input-checkbox *ngIf="mode !== modes.SingleSelectList"
|
|
794
|
+
[label]="option.description"
|
|
795
|
+
[model]="option.checked"
|
|
796
|
+
[clickableLabel]="false"
|
|
797
|
+
(modelChange)="handleModelChange(option)"
|
|
798
|
+
[readonly]="readonly"
|
|
799
|
+
></co-input-checkbox>
|
|
800
|
+
<co-input-radio-button *ngIf="mode === modes.SingleSelectList"
|
|
801
|
+
[label]="option.description"
|
|
802
|
+
[model]="option.checked"
|
|
803
|
+
(modelChange)="handleModelChange(option)"
|
|
804
|
+
[readonly]="readonly"
|
|
805
|
+
></co-input-radio-button>
|
|
806
|
+
<div class="co-filter-item-amount" *ngIf="option.count"
|
|
807
|
+
[textContent]="option.count.toString() | append: ')' | prepend: ' ('"
|
|
808
|
+
></div>
|
|
809
|
+
</div>
|
|
810
|
+
|
|
811
|
+
</ng-container>
|
|
812
|
+
</div>
|
|
813
|
+
<div class="co-filter-show-more-or-less" *ngIf="!showAllResults">
|
|
814
|
+
<div class="co-filter-show-more clickable"
|
|
815
|
+
*ngIf="moreToShow()">
|
|
816
|
+
<a (click)="increaseLimit()">
|
|
817
|
+
<co-icon [iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
|
|
818
|
+
<span [textContent]="showMoreLabel"></span>
|
|
819
|
+
</a>
|
|
820
|
+
</div>
|
|
821
|
+
<div class="co-filter-show-less clickable"
|
|
822
|
+
*ngIf="lessToShow()">
|
|
823
|
+
<a (click)="setToInitialLimit()">
|
|
824
|
+
<co-icon [iconData]="iconService.getIcon(icons.ArrowPointUp)"></co-icon>
|
|
825
|
+
<span [textContent]="showLessLabel"></span>
|
|
826
|
+
</a>
|
|
827
|
+
</div>
|
|
828
|
+
</div>
|
|
829
|
+
</div>
|
|
830
|
+
<div class="co-filter-item-slider-content" *ngIf="mode === modes.Slider">
|
|
831
|
+
<co-input-text
|
|
832
|
+
class="slider-from"
|
|
833
|
+
[type]="'number'"
|
|
834
|
+
[digitsOnly]="true"
|
|
835
|
+
[hideArrowButtons]="true"
|
|
836
|
+
[excludePlusMinus]="true"
|
|
837
|
+
[label]="'FROM' | coreLocalize"
|
|
838
|
+
[(model)]="sliderMin"
|
|
839
|
+
[readonly]="readonly"
|
|
840
|
+
(modelChange)="handleModelChange(sliderMin)"
|
|
841
|
+
></co-input-text>
|
|
842
|
+
<co-input-text
|
|
843
|
+
class="slider-to"
|
|
844
|
+
[type]="'number'"
|
|
845
|
+
[digitsOnly]="true"
|
|
846
|
+
[hideArrowButtons]="true"
|
|
847
|
+
[excludePlusMinus]="true"
|
|
848
|
+
[label]="'TO' | coreLocalize"
|
|
849
|
+
[(model)]="sliderMax"
|
|
850
|
+
[readonly]="readonly"
|
|
851
|
+
(modelChange)="handleModelChange(sliderMax)"
|
|
852
|
+
></co-input-text>
|
|
853
|
+
</div>
|
|
854
|
+
<div class="co-filter-item-slider-content" *ngIf="mode === modes.NullableSlider">
|
|
855
|
+
<co-input-text
|
|
856
|
+
class="slider-from"
|
|
857
|
+
[type]="'number'"
|
|
858
|
+
[digitsOnly]="true"
|
|
859
|
+
[hideArrowButtons]="true"
|
|
860
|
+
[excludePlusMinus]="true"
|
|
861
|
+
[label]="'FROM' | coreLocalize"
|
|
862
|
+
[(model)]="sliderMin"
|
|
863
|
+
[readonly]="readonly"
|
|
864
|
+
(modelChange)="handleModelChange(sliderMin)"
|
|
865
|
+
></co-input-text>
|
|
866
|
+
<co-input-text
|
|
867
|
+
class="slider-to"
|
|
868
|
+
[type]="'number'"
|
|
869
|
+
[digitsOnly]="true"
|
|
870
|
+
[hideArrowButtons]="true"
|
|
871
|
+
[excludePlusMinus]="true"
|
|
872
|
+
[label]="'TO' | coreLocalize"
|
|
873
|
+
[(model)]="sliderMax"
|
|
874
|
+
[readonly]="readonly"
|
|
875
|
+
(modelChange)="handleModelChange(sliderMax)"
|
|
876
|
+
></co-input-text>
|
|
877
|
+
</div>
|
|
878
|
+
<div class="co-filter-item-checkbox-content" *ngIf="mode === modes.Checkbox ">
|
|
879
|
+
<co-input-checkbox
|
|
880
|
+
[(model)]="model"
|
|
881
|
+
(modelChange)="handleModelChange($event)"
|
|
882
|
+
[readonly]="readonly"
|
|
883
|
+
[label]="placeholder">
|
|
884
|
+
</co-input-checkbox>
|
|
885
|
+
</div>
|
|
886
|
+
<div class="co-filter-item-checkbox-content"
|
|
887
|
+
*ngIf="mode === modes.CheckboxToText || mode === modes.CheckboxToSimpleText || mode === modes.CheckboxToBinary">
|
|
888
|
+
<co-input-checkbox
|
|
889
|
+
[(model)]="checkBoxToTextModel"
|
|
890
|
+
(modelChange)="handleModelChange($event)"
|
|
891
|
+
[readonly]="readonly"
|
|
892
|
+
[label]="placeholder"></co-input-checkbox>
|
|
893
|
+
</div>
|
|
894
|
+
<div class="co-filter-item-textfield-content" *ngIf="mode === modes.TextField">
|
|
895
|
+
<co-input-text
|
|
896
|
+
[(model)]="model" [readonly]="readonly"
|
|
897
|
+
(modelChange)="handleModelChange($event)"></co-input-text>
|
|
898
|
+
</div>
|
|
899
|
+
<div class="co-filter-item-dateField-content" *ngIf="mode === modes.DateField">
|
|
900
|
+
<co-input-date
|
|
901
|
+
#dateInput
|
|
902
|
+
[(model)]="dateFieldValue" [readonly]="readonly" [firstDayOfWeek]="firstDayOfWeek"
|
|
903
|
+
(modelChange)="handleModelChange($event)"
|
|
904
|
+
></co-input-date>
|
|
905
|
+
</div>
|
|
906
|
+
<div class="co-filter-item-dateField-content" *ngIf="mode === modes.DateRangeField">
|
|
907
|
+
<co-input-date-range [readonly]="readonly" [firstDayOfWeek]="firstDayOfWeek"
|
|
908
|
+
#dateRangeInput
|
|
909
|
+
[model]="[dateRangeStart, dateRangeEnd]"
|
|
910
|
+
(modelChange)="handleModelChange($event)"
|
|
911
|
+
[placeholder]="'Kies datum' | coreLocalize">
|
|
912
|
+
</co-input-date-range>
|
|
913
|
+
</div>
|
|
914
|
+
</ng-template>
|
|
915
|
+
</div>
|
|
916
|
+
</co-collapsible>
|
|
917
|
+
</div>
|
|
918
|
+
|
|
919
919
|
`,
|
|
920
920
|
encapsulation: ViewEncapsulation.None,
|
|
921
921
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
@@ -958,4 +958,4 @@ FilterItemComponent.propDecorators = {
|
|
|
958
958
|
dateRangeInput: [{ type: ViewChild, args: ['dateRangeInput',] }],
|
|
959
959
|
hidden: [{ type: HostBinding, args: ['class.co-hidden',] }]
|
|
960
960
|
};
|
|
961
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci1pdGVtL2ZpbHRlci1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0wsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFN0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRXBFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUV0RixPQUFPLEVBQUMsOENBQThDLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUUvSCxPQUFPLEVBQUMsZUFBZSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBNktuRCxNQUFNLE9BQU8sbUJBQW1CO0lBMko5QixZQUFtQixXQUE2QixFQUM1QixlQUFrQztRQURuQyxnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQW1CO1FBM0ovQyxVQUFLLEdBQThCLGtCQUFrQixDQUFDO1FBQ3RELFVBQUssR0FBMEIsY0FBYyxDQUFDO1FBK0I5QyxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUcxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBUWpDLDRHQUE0RztRQUVyRyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUV0QyxtSEFBbUg7UUFFNUcsbUJBQWMsR0FBWSxLQUFLLENBQUM7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cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29yZUNvbXBvbmVudHNJY29ufSBmcm9tICcuLi8uLi9jb3JlL2VudW0vY29yZS1jb21wb25lbnRzLWljb24uZW51bSc7XHJcbmltcG9ydCB7RmlsdGVySXRlbVZpZXdtb2RlbH0gZnJvbSAnLi9maWx0ZXItaXRlbS12aWV3bW9kZWwnO1xyXG5pbXBvcnQge0ljb25DYWNoZVNlcnZpY2V9IGZyb20gJy4uL2ljb24vaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtGaWx0ZXJJdGVtTW9kZX0gZnJvbSAnLi4vLi4vY29yZS9lbnVtL2ZpbHRlckl0ZW0tbW9kZS5lbnVtJztcclxuaW1wb3J0IHtTY3JlZW5Db25maWdBZGFwdGVyQ29tcG9uZW50fSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjcmVlbi1jb25maWctYWRhcHRlci5jb21wb25lbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtVc2VyUmlnaHRUeXBlfSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9lbnVtL3VzZXItcmlnaHQtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtPYmplY3RDb25maWd1cmF0aW9ufSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9vYmplY3QtY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7U0NSRUVOX0NPTkZJR19BREFQVEVSX0NPTVBPTkVOVF9JTlRFUkZBQ0VfTkFNRX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY3JlZW4tY29uZmlnLWFkYXB0ZXItY29tcG9uZW50LWludGVyZmFjZS1uYW1lJztcclxuaW1wb3J0IHtPYmplY3RDb25maWd1cmF0aW9uRGVmYXVsdFZhbHVlVHlwZX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvdHlwZS9vYmplY3QtY29uZmlndXJhdGlvbi1kZWZhdWx0LXZhbHVlLXR5cGUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImNvLWZpbHRlci1pdGVtXCIsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1pdGVtLWhlYWRlclwiPlxyXG4gICAgICAgICAgPGNvLWNvbGxhcHNpYmxlXHJcbiAgICAgICAgICAgICAgICAgIFtoZWFkZXJUaXRsZV09XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgIFtleHBhbmRCdXR0b25MYXN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29ucy5BcnJvd1BvaW50RG93bilcIlxyXG4gICAgICAgICAgICAgICAgICBbZXhwYW5kZWRdPVwiZXhwYW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0J1dHRvbl09XCJzaG93QnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgW2J1dHRvblRleHRdPVwiZmlsdGVyQnV0dG9uTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2tlZCk9XCJvbkJ1dHRvbkNsaWNrZWQoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1pdGVtLWNvbGxhcHNhYmxlLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1pdGVtLWN1c3RvbS1jb250ZW50XCIgKm5nSWY9XCJjdXN0b21Db250ZW50OyBlbHNlIGNvbGxlY3Rpb25Db250ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJzaG93QnV0dG9uPXRydWVcIiAobW91c2Vkb3duKT1cInNob3dCdXR0b249dHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjb2xsZWN0aW9uQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItaXRlbS1jb2xsZWN0aW9uLWNvbnRlbnRcIiAqbmdJZj1cIm1vZGUgPT09IG1vZGVzLkZpbHRlcmxpc3QgfHwgbW9kZSA9PT0gbW9kZXMuU2luZ2xlU2VsZWN0TGlzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbW9kZSA9PT0gbW9kZXMuU2VsZWN0TGlzdFdpdGhOdW1iZXJPdXRwdXQgfHwgbW9kZSA9PT0gbW9kZXMuU2VsZWN0TGlzdFdpdGhTdHJpbmdDb2xsZWN0aW9uT3V0cHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sbGVjdGlvbj8ubGVuZ3RoID4gMTAgfHwgbWluU2VhcmNoQ2hhcnNUb0xvYWRDb2xsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwiZmlsdGVyVGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvY28taW5wdXQtdGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwiZmlsdGVyLWxvYWRlclwiPjxzcGFuPjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8tcmVzdWx0c1wiICpuZ0lmPVwiZmlsdGVyZWRDb2xsZWN0aW9uPy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cIm5vUmVzdWx0c0xhYmVsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItaXRlbS1jb2xsZWN0aW9uLXJlc3VsdHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRDb2xsZWN0aW9uOyBsZXQgaW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1pdGVtLWNvbGxlY3Rpb24tcmVzdWx0LWl0ZW1cIiAqbmdJZj1cImluZGV4IDwgbGltaXRUbyB8fCBzaG93QWxsUmVzdWx0c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC1jaGVja2JveCAqbmdJZj1cIm1vZGUgIT09IG1vZGVzLlNpbmdsZVNlbGVjdExpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwib3B0aW9uLmRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm9wdGlvbi5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZUxhYmVsXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImhhbmRsZU1vZGVsQ2hhbmdlKG9wdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2NvLWlucHV0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC1yYWRpby1idXR0b24gKm5nSWY9XCJtb2RlID09PSBtb2Rlcy5TaW5nbGVTZWxlY3RMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24uZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm9wdGlvbi5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJoYW5kbGVNb2RlbENoYW5nZShvcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvY28taW5wdXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItaXRlbS1hbW91bnRcIiAqbmdJZj1cIm9wdGlvbi5jb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dENvbnRlbnRdPVwib3B0aW9uLmNvdW50LnRvU3RyaW5nKCkgfCBhcHBlbmQ6ICcpJyB8IHByZXBlbmQ6ICcgICAgICAoJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLXNob3ctbW9yZS1vci1sZXNzXCIgKm5nSWY9XCIhc2hvd0FsbFJlc3VsdHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1zaG93LW1vcmUgY2xpY2thYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1vcmVUb1Nob3coKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImluY3JlYXNlTGltaXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb25zLkFycm93UG9pbnREb3duKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwic2hvd01vcmVMYWJlbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItc2hvdy1sZXNzIGNsaWNrYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJsZXNzVG9TaG93KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJzZXRUb0luaXRpYWxMaW1pdCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWljb24gW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbnMuQXJyb3dQb2ludFVwKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwic2hvd0xlc3NMYWJlbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItaXRlbS1zbGlkZXItY29udGVudFwiICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuU2xpZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2xpZGVyLWZyb21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiJ251bWJlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RpZ2l0c09ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZUFycm93QnV0dG9uc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtleGNsdWRlUGx1c01pbnVzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidGUk9NJyB8IGNvcmVMb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJzbGlkZXJNaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJoYW5kbGVNb2RlbENoYW5nZShzbGlkZXJNaW4pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNsaWRlci10b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlnaXRzT25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlQXJyb3dCdXR0b25zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V4Y2x1ZGVQbHVzTWludXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1RPJyB8IGNvcmVMb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJzbGlkZXJNYXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJoYW5kbGVNb2RlbENoYW5nZShzbGlkZXJNYXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tc2xpZGVyLWNvbnRlbnRcIiAqbmdJZj1cIm1vZGUgPT09IG1vZGVzLk51bGxhYmxlU2xpZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2xpZGVyLWZyb21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiJ251bWJlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RpZ2l0c09ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZUFycm93QnV0dG9uc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtleGNsdWRlUGx1c01pbnVzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidGUk9NJyB8IGNvcmVMb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJzbGlkZXJNaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJoYW5kbGVNb2RlbENoYW5nZShzbGlkZXJNaW4pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNsaWRlci10b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlnaXRzT25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlQXJyb3dCdXR0b25zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V4Y2x1ZGVQbHVzTWludXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1RPJyB8IGNvcmVMb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJzbGlkZXJNYXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJoYW5kbGVNb2RlbENoYW5nZShzbGlkZXJNYXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tY2hlY2tib3gtY29udGVudFwiICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuQ2hlY2tib3ggXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJtb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jby1pbnB1dC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1pdGVtLWNoZWNrYm94LWNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1vZGUgPT09IG1vZGVzLkNoZWNrYm94VG9UZXh0IHx8IG1vZGUgPT09IG1vZGVzLkNoZWNrYm94VG9TaW1wbGVUZXh0IHx8IG1vZGUgPT09IG1vZGVzLkNoZWNrYm94VG9CaW5hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28taW5wdXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cImNoZWNrQm94VG9UZXh0TW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImhhbmRsZU1vZGVsQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJwbGFjZWhvbGRlclwiPjwvY28taW5wdXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItaXRlbS10ZXh0ZmllbGQtY29udGVudFwiICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuVGV4dEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cIm1vZGVsXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJoYW5kbGVNb2RlbENoYW5nZSgkZXZlbnQpXCI+PC9jby1pbnB1dC10ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tZGF0ZUZpZWxkLWNvbnRlbnRcIiAqbmdJZj1cIm1vZGUgPT09IG1vZGVzLkRhdGVGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC1kYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZGF0ZUlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJkYXRlRmllbGRWYWx1ZVwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFtmaXJzdERheU9mV2Vla109XCJmaXJzdERheU9mV2Vla1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvY28taW5wdXQtZGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1pdGVtLWRhdGVGaWVsZC1jb250ZW50XCIgKm5nSWY9XCJtb2RlID09PSBtb2Rlcy5EYXRlUmFuZ2VGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC1kYXRlLXJhbmdlIFtyZWFkb25seV09XCJyZWFkb25seVwiIFtmaXJzdERheU9mV2Vla109XCJmaXJzdERheU9mV2Vla1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZGF0ZVJhbmdlSW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJbZGF0ZVJhbmdlU3RhcnQsIGRhdGVSYW5nZUVuZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImhhbmRsZU1vZGVsQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLaWVzIGRhdHVtJyB8IGNvcmVMb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvY28taW5wdXQtZGF0ZS1yYW5nZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9jby1jb2xsYXBzaWJsZT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gIGAsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFt7XHJcbiAgICAgIHByb3ZpZGU6IFNDUkVFTl9DT05GSUdfQURBUFRFUl9DT01QT05FTlRfSU5URVJGQUNFX05BTUUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZpbHRlckl0ZW1Db21wb25lbnQpXHJcbiAgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlckl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIFNjcmVlbkNvbmZpZ0FkYXB0ZXJDb21wb25lbnQsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIGljb25zOiB0eXBlb2YgQ29yZUNvbXBvbmVudHNJY29uID0gQ29yZUNvbXBvbmVudHNJY29uO1xyXG4gIHB1YmxpYyBtb2RlczogdHlwZW9mIEZpbHRlckl0ZW1Nb2RlID0gRmlsdGVySXRlbU1vZGU7XHJcblxyXG4gIHB1YmxpYyBkYXRlRmllbGRWYWx1ZT86IERhdGU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBtb2RlKHZhbHVlOiBGaWx0ZXJJdGVtTW9kZSkge1xyXG4gICAgdGhpcy5fbW9kZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5yZWFkTW9kZWxGb3JNb2RlKHRoaXMuX21vZGVsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbW9kZSgpOiBGaWx0ZXJJdGVtTW9kZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBjb2xsZWN0aW9uKHZhbHVlOiBGaWx0ZXJJdGVtVmlld21vZGVsW10pIHtcclxuICAgIHRoaXMuX2NvbGxlY3Rpb24gPSB2YWx1ZTtcclxuICAgIHRoaXMuZmlsdGVyZWRDb2xsZWN0aW9uID0gdGhpcy5fY29sbGVjdGlvbj8uc2xpY2UoKTtcclxuICAgIC8vcmVzZXQgdGhlIG1vZGVsIGluIGNhc2UgdGhlcmUgd2FzIG5vIGNvbGxlY3Rpb24gdG8gc2V0IGl0cyB2YWx1ZXMgb24gd2hlbiBpdCB3YXMgc2V0LlxyXG4gICAgdGhpcy5tb2RlbCA9IHRoaXMuX21vZGVsO1xyXG4gICAgdGhpcy5fY29sbGVjdGlvblN1YmplY3QubmV4dCh0aGlzLl9jb2xsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29sbGVjdGlvbigpOiBGaWx0ZXJJdGVtVmlld21vZGVsW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBpbml0aWFsTGltaXQ6IG51bWJlciA9IDEwO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBleHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBtaW5TZWFyY2hDaGFyc1RvTG9hZENvbGxlY3Rpb246IG51bWJlcjtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY29sbGVjdGlvbkxvYWRGbjogRnVuY3Rpb247XHJcblxyXG4gIC8vIFNldCB0byBmYWxzZSB0byB1c2UgZmlsdGVyIGl0ZW0gd2l0aCBhIG11bHRpIHNlbGVjdGFibGUgY29sbGVjdGlvbi4gU2V0IHRvIHRydWUgdG8gc3BlY2lmeSBjdXN0b20gY29udGVudFxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGN1c3RvbUNvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gU2V0IHRvIHRydWUgdG8gc2hvdyBhbGwgcmVzdWx0cy4gU2V0IHRvIGZhbHNlIHRvIGdldCAnc2hvdyBtb3JlJyBhbmQgJ3Nob3cgbGVzcycgYnV0dG9ucyB0byBleHBhbmQgYW5kIGNvbnRyYWN0LlxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dBbGxSZXN1bHRzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGZpbHRlckJ1dHRvbkxhYmVsOiBzdHJpbmcgPSBcIlNlYXJjaFwiO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlYXJjaC4uLic7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dNb3JlTGFiZWw6IHN0cmluZyA9ICdTaG93IG1vcmUnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzaG93TGVzc0xhYmVsOiBzdHJpbmcgPSAnU2hvdyBsZXNzJztcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbm9SZXN1bHRzTGFiZWw6IHN0cmluZyA9IFwiTm8gcmVzdWx0c1wiO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzbGlkZXJEZWZhdWx0TWluOiBudW1iZXIgPSAwO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzbGlkZXJEZWZhdWx0TWF4OiBudW1iZXIgPSAxMDAwMDA7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGZ1bGxSYW5nZUlzTnVsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5GaWx0ZXJCeUNvZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZmlyc3REYXlPZldlZWs6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IG1vZGVsKG5ld01vZGVsOiBhbnkpIHtcclxuICAgIHRoaXMucmVhZE1vZGVsRm9yTW9kZShuZXdNb2RlbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGNvbmZpZ09iamVjdCh2YWx1ZTogT2JqZWN0Q29uZmlndXJhdGlvbikge1xyXG4gICAgdGhpcy5fY29uZmlnT2JqZWN0ID0gdmFsdWU7XHJcbiAgICB0aGlzLmV4cGFuZGVkID0gKHRoaXMuX2NvbmZpZ09iamVjdC5yaWdodHMgPT09IFVzZXJSaWdodFR5cGUuUmVhZFdyaXRlKTtcclxuICAgIHRoaXMuaGlkZGVuID0gKHRoaXMuX2NvbmZpZ09iamVjdC5yaWdodHMgPCBVc2VyUmlnaHRUeXBlLlJlYWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjb25maWdPYmplY3QoKTogT2JqZWN0Q29uZmlndXJhdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnT2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgY29sbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPEZpbHRlckl0ZW1WaWV3bW9kZWxbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckl0ZW1WaWV3bW9kZWxbXT4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGZpbHRlckJ1dHRvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuY28tZmlsdGVyLWl0ZW1cIikgZ2V0IGhhc0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRydWU7IC8vIEVuc3VyZXMgaXQgbmV2ZXIgZ2V0cyByZW1vdmVkXHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdkYXRlSW5wdXQnKSBkYXRlSW5wdXQ6IGFueTtcclxuICBAVmlld0NoaWxkKCdkYXRlUmFuZ2VJbnB1dCcpIGRhdGVSYW5nZUlucHV0OiBhbnk7XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJlZENvbGxlY3Rpb246IEZpbHRlckl0ZW1WaWV3bW9kZWxbXSA9IFtdO1xyXG4gIHB1YmxpYyBsaW1pdFRvOiBudW1iZXIgPSAxMDtcclxuICBwdWJsaWMgZmlsdGVyVGV4dDogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgc2hvd0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy9tb2RlbHMgZm9yIHRoZSBzbGlkZXIgZmllbGQgaW5wdXRzXHJcbiAgcHVibGljIHNsaWRlck1pbjogbnVtYmVyO1xyXG4gIHB1YmxpYyBzbGlkZXJNYXg6IG51bWJlcjtcclxuXHJcbiAgLy9tb2RlbHMgZm9yIHRoIGRhdGVyYW5nZSBpbnB1dFxyXG4gIHB1YmxpYyBkYXRlUmFuZ2VTdGFydDogRGF0ZTtcclxuICBwdWJsaWMgZGF0ZVJhbmdlRW5kOiBEYXRlO1xyXG5cclxuICAvL3NjcmVlbkNvbmZpZ1xyXG4gIHB1YmxpYyBvYmplY3RDb25maWdOYW1lOiBzdHJpbmc7XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1oaWRkZW4nKVxyXG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XHJcbiAgcHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBmb3JjZVJlYWRvbmx5OiBib29sZWFuO1xyXG4gIHB1YmxpYyByZWFkb25seTogYm9vbGVhbjtcclxuICBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXI7XHJcbiAgcHVibGljIGRlZmF1bHRWYWx1ZTogT2JqZWN0Q29uZmlndXJhdGlvbkRlZmF1bHRWYWx1ZVR5cGU7XHJcbiAgcHVibGljIGRlY2ltYWxzOiBudW1iZXI7XHJcbiAgcHVibGljIHJlZEVycm9yQmFja2dyb3VuZDogYm9vbGVhbjtcclxuXHJcbiAgLy9tb2RlbCBmb3IgdGhlIHRleHRib3ggb3B0aW9ucyB0aGF0IG5lZWQgYSBjb252ZXJ0ZWQgb3V0cHV0XHJcbiAgcHVibGljIGNoZWNrQm94VG9UZXh0TW9kZWw6IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgX2NvbmZpZ09iamVjdDogT2JqZWN0Q29uZmlndXJhdGlvbjtcclxuICBwcml2YXRlIF9jb2xsZWN0aW9uOiBGaWx0ZXJJdGVtVmlld21vZGVsW10gPSBbXTtcclxuICBwcml2YXRlIF9tb2RlOiBGaWx0ZXJJdGVtTW9kZSA9IHRoaXMubW9kZXMuRmlsdGVybGlzdDtcclxuICBwcml2YXRlIF9tb2RlbDogYW55O1xyXG4gIHByaXZhdGUgX2RlZmF1bHRTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9jb2xsZWN0aW9uU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsdGVySXRlbVZpZXdtb2RlbFtdPih1bmRlZmluZWQpO1xyXG4gIHByaXZhdGUgX2NvbGxlY3Rpb25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGRlYm91bmNlVGltZW91dDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaWNvblNlcnZpY2U6IEljb25DYWNoZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFRvSW5pdGlhbExpbWl0KCk7XHJcbiAgICB0aGlzLnNob3dCdXR0b24gPSB0aGlzLnZhbHVlU2VsZWN0ZWQoKTtcclxuICAgIGlmKHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmNoZWNrQm94VG9UZXh0TW9kZWwgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuX2NvbGxlY3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLl9jb2xsZWN0aW9uU3ViamVjdC5zdWJzY3JpYmUoKGNvbGxlY3Rpb24pID0+IHtcclxuICAgICAgaWYgKCF0aGlzLl9kZWZhdWx0U2V0ICYmIGNvbGxlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLl9hcHBseURlZmF1bHRGaWx0ZXJzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb2xsZWN0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VG9Jbml0aWFsTGltaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpbWl0VG8gPSB0aGlzLmluaXRpYWxMaW1pdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbmNyZWFzZUxpbWl0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5saW1pdFRvICs9IDEwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vcmVUb1Nob3coKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zaG93QWxsUmVzdWx0cykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZENvbGxlY3Rpb24/Lmxlbmd0aCA+IHRoaXMubGltaXRUbztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsZXNzVG9TaG93KCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd0FsbFJlc3VsdHMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRDb2xsZWN0aW9uPy5sZW5ndGggPD0gdGhpcy5saW1pdFRvICYmIHRoaXMuZmlsdGVyZWRDb2xsZWN0aW9uPy5sZW5ndGggPiB0aGlzLmluaXRpYWxMaW1pdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNb2RlbENoYW5nZShtb2RlbDogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuRmlsdGVybGlzdDpcclxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIG1vZGVsLmNoZWNrZWQgPSAhbW9kZWwuY2hlY2tlZDtcclxuICAgICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvckZpbHRlckxpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLlNlbGVjdExpc3RXaXRoU3RyaW5nQ29sbGVjdGlvbk91dHB1dDpcclxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIG1vZGVsLmNoZWNrZWQgPSAhbW9kZWwuY2hlY2tlZDtcclxuICAgICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvclN0cmluZ0NvbGxlY3Rpb25MaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5TaW5nbGVTZWxlY3RMaXN0OlxyXG4gICAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51bmNoZWNrRm9yU2luZ2xlU2VsZWN0KG1vZGVsKTtcclxuICAgICAgICBtb2RlbC5jaGVja2VkID0gIW1vZGVsLmNoZWNrZWQ7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JTaW5nbGVTZWxlY3RMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5TZWxlY3RMaXN0V2l0aE51bWJlck91dHB1dDpcclxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIG1vZGVsLmNoZWNrZWQgPSAhbW9kZWwuY2hlY2tlZDtcclxuICAgICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvclNlbGVjdExpc3RXaXRoTnVtYmVyT3V0cHV0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5TbGlkZXI6XHJcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvclNsaWRlck1vZGUoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLk51bGxhYmxlU2xpZGVyOlxyXG4gICAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JOdWxsYWJsZVNsaWRlck1vZGUoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkNoZWNrYm94VG9UZXh0OlxyXG4gICAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JDaGVja2JveFRvVGV4dCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuQ2hlY2tib3hUb1NpbXBsZVRleHQ6XHJcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvckNoZWNrYm94VG9TaW1wbGVUZXh0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5DaGVja2JveFRvQmluYXJ5OlxyXG4gICAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JDaGVja2JveFRvQmluYXJ5KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5EYXRlUmFuZ2VGaWVsZDpcclxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yRGF0ZVJhbmdlKG1vZGVsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkRhdGVGaWVsZDpcclxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yRGF0ZUZpZWxkKG1vZGVsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLlRleHRGaWVsZDpcclxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX21vZGVsID0gKHR5cGVvZiB0aGlzLl9tb2RlbCA9PT0gJ3N0cmluZycgJiYgdGhpcy5fbW9kZWwubGVuZ3RoID09PSAwKSA/IHVuZGVmaW5lZCA6IHRoaXMuX21vZGVsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMuX21vZGVsKTtcclxuICAgIHRoaXMuY29sbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuY29sbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmFsdWVTZWxlY3RlZCgpIHtcclxuICAgIGlmICh0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jb2xsZWN0aW9uLmZpbmQoYyA9PiBjLmNoZWNrZWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uTW9kZWxDaGFuZ2UodGV4dDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpO1xyXG4gICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcih0ZXh0KTtcclxuICAgIH0sIDMwMCk7XHJcbiAgfVxyXG5cclxuICAvLyBBcHBsaWVzIGZpbHRlciB0byB0aGUgY29sbGVjdGlvbi5cclxuICBwdWJsaWMgYXN5bmMgYXBwbHlGaWx0ZXIodGV4dDogc3RyaW5nKTogUHJvbWlzZTxbXT4ge1xyXG4gICAgaWYgKCFpc05hTih0aGlzLm1pblNlYXJjaENoYXJzVG9Mb2FkQ29sbGVjdGlvbikpIHtcclxuICAgICAgaWYgKHRleHQubGVuZ3RoIDwgdGhpcy5taW5TZWFyY2hDaGFyc1RvTG9hZENvbGxlY3Rpb24pIHtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwKSk7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAzMDApKTtcclxuICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25Mb2FkRm4odGV4dCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZmlsdGVyVGV4dCA9IHRleHQ7XHJcbiAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbHRlclRleHQ6IHN0cmluZyA9IHRoaXMuZmlsdGVyVGV4dD8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgbGV0IGZpbHRlcmVkSXRlbUNvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHRoaXMuZmlsdGVyZWRDb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uPy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgbGFiZWxUZXh0OiBzdHJpbmcgPSBpdGVtLmRlc2NyaXB0aW9uPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICBjb25zdCBtYXRjaGVzRGVzY3JpcHRpb246IGJvb2xlYW4gPSBsYWJlbFRleHQ/LmluZGV4T2YoZmlsdGVyVGV4dCkgIT09IC0xO1xyXG5cclxuICAgICAgbGV0IG1hdGNoZXNDb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLmNhbkZpbHRlckJ5Q29kZSkge1xyXG4gICAgICAgIGNvbnN0IGNvZGVUZXh0OiBzdHJpbmcgPSBpdGVtLmNvZGU/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBtYXRjaGVzQ29kZSA9IGNvZGVUZXh0Py5pbmRleE9mKGZpbHRlclRleHQpICE9PSAtMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaXNIaWRkZW5CeUZpbHRlcjogYm9vbGVhbiA9ICFtYXRjaGVzRGVzY3JpcHRpb24gJiYgIW1hdGNoZXNDb2RlO1xyXG5cclxuICAgICAgaWYgKGlzSGlkZGVuQnlGaWx0ZXIpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmlsdGVyZWRJdGVtQ291bnQrKztcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG9uQnV0dG9uQ2xpY2tlZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIChkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50IHwgbnVsbCk/LmJsdXI/LigpO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5EYXRlRmllbGQ6XHJcbiAgICAgICAgdGhpcy5kYXRlSW5wdXQ/LmZpbmFsaXplPy4oKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkRhdGVSYW5nZUZpZWxkOlxyXG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlSW5wdXQ/LmZpbmFsaXplPy4oKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIHRoaXMuZmlsdGVyQnV0dG9uQ2xpY2tlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSB1bmNoZWNrRm9yU2luZ2xlU2VsZWN0KG1vZGVsOiBGaWx0ZXJJdGVtVmlld21vZGVsKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChtID0+IHtcclxuICAgICAgaWYgKG0uY29kZSAhPT0gbW9kZWwuY29kZSAmJiBtLmRlc2NyaXB0aW9uICE9PSBtb2RlbC5kZXNjcmlwdGlvbikge1xyXG4gICAgICAgIG0uY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZE1vZGVsRm9yTW9kZShuZXdNb2RlbDogYW55KTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuRmlsdGVybGlzdDpcclxuICAgICAgICB0aGlzLl9yZWFkTW9kZWxGb3JGaWx0ZXJMaXN0KG5ld01vZGVsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLlNpbmdsZVNlbGVjdExpc3Q6XHJcbiAgICAgICAgdGhpcy5fcmVhZE1vZGVsRm9yU2luZ2xlU2VsZWN0TGlzdChuZXdNb2RlbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5TZWxlY3RMaXN0V2l0aFN0cmluZ0NvbGxlY3Rpb25PdXRwdXQ6XHJcbiAgICAgICAgdGhpcy5fcmVhZE1vZGVsRm9yU3RyaW5nQ29sbGVjdGlvbkxpc3QobmV3TW9kZWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuU2VsZWN0TGlzdFdpdGhOdW1iZXJPdXRwdXQ6XHJcbiAgICAgICAgdGhpcy5fcmVhZE1vZGVsRm9yU2VsZWN0TGlzdFdpdGhOdW1iZXJPdXRwdXQobmV3TW9kZWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuU2xpZGVyOlxyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuTnVsbGFibGVTbGlkZXI6XHJcbiAgICAgICAgdGhpcy5fcmVhZE1vZGVsRm9yU2xpZGVyTW9kZShuZXdNb2RlbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5DaGVja2JveFRvVGV4dDpcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkNoZWNrYm94VG9TaW1wbGVUZXh0OlxyXG4gICAgICAgIHRoaXMuX3JlYWRNb2RlbEZvckNoZWNrYm94VG9UZXh0KG5ld01vZGVsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkNoZWNrYm94VG9CaW5hcnk6XHJcbiAgICAgICAgdGhpcy5fcmVhZE1vZGVsRm9yQ2hlY2tib3hUb0JpbmFyeShuZXdNb2RlbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5EYXRlRmllbGQ6XHJcbiAgICAgICAgdGhpcy5fcmVhZE1vZGVsRm9yRGF0ZUZpZWxkKG5ld01vZGVsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkRhdGVSYW5nZUZpZWxkOlxyXG4gICAgICAgIHRoaXMuX3JlYWRNb2RlbEZvckRhdGVSYW5nZUZpZWxkKG5ld01vZGVsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLl9tb2RlbCA9IG5ld01vZGVsO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgLy9Nb2RlbCBjcmVhdGlvbiBmb3IgYWxsIG9mIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyBhdmFpbGFibGUvL1xyXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBwcml2YXRlIF9jcmVhdGVNb2RlbEZvckZpbHRlckxpc3QoKTogdm9pZCB7XHJcbiAgICBsZXQgZmlsdGVyUmFuZ2U6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAodGhpcy5jb2xsZWN0aW9uICE9PSBudWxsICYmIHRoaXMuY29sbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY29sbGVjdGlvbi5mb3JFYWNoKCh2aWV3TW9kZWw6IEZpbHRlckl0ZW1WaWV3bW9kZWwpID0+IHtcclxuICAgICAgICBpZiAodmlld01vZGVsLmNoZWNrZWQpIHtcclxuICAgICAgICAgIGZpbHRlclJhbmdlLnB1c2goYD89JyR7dmlld01vZGVsLmNvZGV9J2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChmaWx0ZXJSYW5nZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBmaWx0ZXJSYW5nZS5qb2luKCcsJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fbW9kZWwgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZU1vZGVsRm9yU3RyaW5nQ29sbGVjdGlvbkxpc3QoKTogdm9pZCB7XHJcbiAgICBsZXQgZmlsdGVyUmFuZ2U6IGFueSA9IFtdO1xyXG4gICAgdGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKHZpZXdNb2RlbDogRmlsdGVySXRlbVZpZXdtb2RlbCkgPT4ge1xyXG4gICAgICBpZiAodmlld01vZGVsLmNoZWNrZWQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZpZXdNb2RlbC5jb2RlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgZmlsdGVyUmFuZ2UucHVzaCh2aWV3TW9kZWwuY29kZS50b1N0cmluZygpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2aWV3TW9kZWwuY29kZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGZpbHRlclJhbmdlLnB1c2godmlld01vZGVsLmNvZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoZmlsdGVyUmFuZ2UubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLl9tb2RlbCA9IGZpbHRlclJhbmdlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbW9kZWwgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVNb2RlbEZvclNpbmdsZVNlbGVjdExpc3QoKTogdm9pZCB7XHJcbiAgICBsZXQgZmlsdGVyU3RyaW5nOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgdGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKHZpZXdNb2RlbDogRmlsdGVySXRlbVZpZXdtb2RlbCkgPT4ge1xyXG4gICAgICBpZiAodmlld01vZGVsLmNoZWNrZWQpIHtcclxuICAgICAgICBmaWx0ZXJTdHJpbmcgPSB2aWV3TW9kZWwuY29kZS50b1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChmaWx0ZXJTdHJpbmcubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLl9tb2RlbCA9IGZpbHRlclN0cmluZztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX21vZGVsID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlTW9kZWxGb3JTZWxlY3RMaXN0V2l0aE51bWJlck91dHB1dCgpOiB2b2lkIHtcclxuICAgIGxldCBmaWx0ZXJOdW1iZXI6IG51bWJlciA9IG51bGw7XHJcbiAgICB0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaCgodmlld01vZGVsOiBGaWx0ZXJJdGVtVmlld21vZGVsKSA9PiB7XHJcbiAgICAgIGlmICh2aWV3TW9kZWwuY2hlY2tlZCkge1xyXG4gICAgICAgIGlmIChmaWx0ZXJOdW1iZXIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgZmlsdGVyTnVtYmVyID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsdGVyTnVtYmVyICs9IE51bWJlcih2aWV3TW9kZWwuY29kZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbW9kZWwgPSBmaWx0ZXJOdW1iZXI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVNb2RlbEZvclNsaWRlck1vZGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNsaWRlck1pbiA9ICEhdGhpcy5zbGlkZXJNaW4gPyB0aGlzLnNsaWRlck1pbiA6IHRoaXMuc2xpZGVyRGVmYXVsdE1pbjtcclxuICAgIHRoaXMuc2xpZGVyTWF4ID0gISF0aGlzLnNsaWRlck1heCA/IHRoaXMuc2xpZGVyTWF4IDogdGhpcy5zbGlkZXJEZWZhdWx0TWF4O1xyXG5cclxuICAgIGxldCB0cnVlTG93ZXJCb3VuZCA9IE1hdGgubWluKHRoaXMuc2xpZGVyTWluLCB0aGlzLnNsaWRlck1heCk7XHJcbiAgICBsZXQgdHJ1ZVVwcGVyQm91bmQgPSBNYXRoLm1heCh0aGlzLnNsaWRlck1pbiwgdGhpcy5zbGlkZXJNYXgpO1xyXG5cclxuICAgIHRoaXMuc2xpZGVyTWluID0gdHJ1ZUxvd2VyQm91bmQ7XHJcbiAgICB0aGlzLnNsaWRlck1heCA9IHRydWVVcHBlckJvdW5kO1xyXG4gICAgdGhpcy5fbW9kZWwgPSBgJHt0cnVlTG93ZXJCb3VuZH0gLSAke3RydWVVcHBlckJvdW5kfWA7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlTW9kZWxGb3JOdWxsYWJsZVNsaWRlck1vZGUoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMuc2xpZGVyTWluICYmIHRoaXMuc2xpZGVyTWF4KSB7XHJcbiAgICAgIGxldCB0cnVlTG93ZXJCb3VuZCA9IE1hdGgubWluKHRoaXMuc2xpZGVyTWluLCB0aGlzLnNsaWRlck1heCk7XHJcbiAgICAgIGxldCB0cnVlVXBwZXJCb3VuZCA9IE1hdGgubWF4KHRoaXMuc2xpZGVyTWluLCB0aGlzLnNsaWRlck1heCk7XHJcblxyXG4gICAgICB0aGlzLl9tb2RlbCA9IGAke3RydWVMb3dlckJvdW5kfSAtICR7dHJ1ZVVwcGVyQm91bmR9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX21vZGVsID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZU1vZGVsRm9yQ2hlY2tib3hUb1RleHQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGVja0JveFRvVGV4dE1vZGVsKSB7XHJcbiAgICAgIHRoaXMuX21vZGVsID0gXCI/PSdKJ1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbW9kZWwgPSBcIj89J04nXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVNb2RlbEZvckNoZWNrYm94VG9TaW1wbGVUZXh0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCkge1xyXG4gICAgICB0aGlzLl9tb2RlbCA9IFwiSlwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbW9kZWwgPSBcIk5cIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZU1vZGVsRm9yQ2hlY2tib3hUb0JpbmFyeSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoZWNrQm94VG9UZXh0TW9kZWwpIHtcclxuICAgICAgdGhpcy5fbW9kZWwgPSAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbW9kZWwgPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9jcmVhdGVNb2RlbEZvckRhdGVGaWVsZChkYXRlOiBEYXRlKTogdm9pZCB7XHJcbiAgICBpZiAoZGF0ZSkge1xyXG4gICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZVRvU3RyaW5nKGRhdGUpO1xyXG4gICAgICB0aGlzLl9tb2RlbCA9IGA/PScke2Zvcm1hdHRlZERhdGV9J2A7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9tb2RlbCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZU1vZGVsRm9yRGF0ZVJhbmdlKGRhdGVzOiBEYXRlW10pOiB2b2lkIHtcclxuICAgIGlmIChkYXRlcykge1xyXG4gICAgICBsZXQgc3RhcnREYXRlID0gZGF0ZXNbMF07XHJcbiAgICAgIGxldCBlbmREYXRlID0gZGF0ZXNbMV07XHJcblxyXG4gICAgICBjb25zdCBzdGFydERhdGVSZXF1ZXN0ID0gc3RhcnREYXRlID8gdGhpcy5fZm9ybWF0RGF0ZVRvU3RyaW5nKHN0YXJ0RGF0ZSkgOiAnJztcclxuICAgICAgY29uc3QgZW5kRGF0ZVJlcXVlc3QgPSBlbmREYXRlID8gdGhpcy5fZm9ybWF0RGF0ZVRvU3RyaW5nKGVuZERhdGUpIDogJyc7XHJcbiAgICAgIHRoaXMuX21vZGVsID0gYD8+PVxcJyR7c3RhcnREYXRlUmVxdWVzdH1cXCcmID88PVxcJyR7ZW5kRGF0ZVJlcXVlc3R9XFwnYDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Zvcm1hdERhdGVUb1N0cmluZyhkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIGxldCBkYXkgPSBkYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBsZXQgbW9udGggPSAoZGF0ZS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgbGV0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcblxyXG4gICAgcmV0dXJuIGAke2RheX0tJHttb250aH0tJHt5ZWFyfWA7XHJcbiAgfVxyXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIC8vTW9kZWwgcmVhZGluZyBmb3IgYWxsIG9mIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyBhdmFpbGFibGUvL1xyXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIHByaXZhdGUgX3JlYWRNb2RlbEZvckZpbHRlckxpc3QoZmlsdGVyTW9kZWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGZpbHRlckxpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgICBsZXQgaXRlbXNUb0NoZWNrOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgdGhpcy5fdW5jaGVja0FsbCgpO1xyXG4gICAgdGhpcy5fbW9kZWwgPSBmaWx0ZXJNb2RlbDtcclxuXHJcbiAgICBpZiAoZmlsdGVyTW9kZWwgIT09IG51bGwgJiYgZmlsdGVyTW9kZWwgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZmlsdGVyTW9kZWwgPT09ICdzdHJpbmcnICYmIGZpbHRlck1vZGVsLmxlbmd0aCAhPSAwICYmIHRoaXMuY29sbGVjdGlvbiAhPT0gbnVsbCAmJiB0aGlzLmNvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBmaWx0ZXJMaXN0ID0gZmlsdGVyTW9kZWwuc3BsaXQoXCIsXCIpXHJcbiAgICAgIGZpbHRlckxpc3QuZm9yRWFjaCgoZmlsdGVyOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpdGVtc1RvQ2hlY2sucHVzaChmaWx0ZXIuc3Vic3RyKDMsIGZpbHRlci5sZW5ndGggLSA0KSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9DaGVjaykge1xyXG4gICAgICAgIGxldCBmaWx0ZXIgPSB0aGlzLmNvbGxlY3Rpb24uZmluZChlbGVtZW50ID0+IGVsZW1lbnQuY29kZS50b1N0cmluZygpID09PSBpdGVtKTtcclxuICAgICAgICBpZiAoZmlsdGVyICE9PSBudWxsICYmIGZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBmaWx0ZXIuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX21vZGVsID0gZmlsdGVyTW9kZWw7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVhZE1vZGVsRm9yU2luZ2xlU2VsZWN0TGlzdChzaW5nbGVTZWxlY3RNb2RlbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl91bmNoZWNrQWxsKCk7XHJcbiAgICB0aGlzLl9tb2RlbCA9IHNpbmdsZVNlbGVjdE1vZGVsO1xyXG5cclxuICAgIGlmIChzaW5nbGVTZWxlY3RNb2RlbCAhPT0gbnVsbCAmJiBzaW5nbGVTZWxlY3RNb2RlbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29sbGVjdGlvbiAhPT0gbnVsbCAmJiB0aGlzLmNvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgZmlsdGVyID0gdGhpcy5jb2xsZWN0aW9uLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmNvZGUudG9TdHJpbmcoKSA9PT0gc2luZ2xlU2VsZWN0TW9kZWwpO1xyXG4gICAgICBpZiAoZmlsdGVyICE9PSBudWxsICYmIGZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZmlsdGVyLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWFkTW9kZWxGb3JTdHJpbmdDb2xsZWN0aW9uTGlzdChjb2xsZWN0aW9uTW9kZWw6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fdW5jaGVja0FsbCgpO1xyXG4gICAgdGhpcy5fbW9kZWwgPSBjb2xsZWN0aW9uTW9kZWw7XHJcblxyXG4gICAgaWYgKGNvbGxlY3Rpb25Nb2RlbCAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uTW9kZWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbGxlY3Rpb24gIT09IG51bGwgJiYgdGhpcy5jb2xsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKHZpZXdNb2RlbDogRmlsdGVySXRlbVZpZXdtb2RlbCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgY29sbGVjdGlvbk1vZGVsLmluZGV4T2Yodmlld01vZGVsLmNvZGUpID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgdmlld01vZGVsLmNoZWNrZWQgPSBjb2xsZWN0aW9uTW9kZWwuaW5kZXhPZih2aWV3TW9kZWwuY29kZS50b1N0cmluZygpKSA+IC0xO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbGxlY3Rpb25Nb2RlbC5pbmRleE9mKHZpZXdNb2RlbC5jb2RlKSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIHZpZXdNb2RlbC5jaGVja2VkID0gY29sbGVjdGlvbk1vZGVsLmluZGV4T2Yodmlld01vZGVsLmNvZGUpID4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlYWRNb2RlbEZvclNlbGVjdExpc3RXaXRoTnVtYmVyT3V0cHV0KG51bWJlck1vZGVsOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3VuY2hlY2tBbGwoKTtcclxuICAgIHRoaXMuX21vZGVsID0gbnVtYmVyTW9kZWw7XHJcblxyXG4gICAgaWYgKG51bWJlck1vZGVsICE9PSBudWxsICYmIG51bWJlck1vZGVsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb2xsZWN0aW9uICE9PSBudWxsICYmIHRoaXMuY29sbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgICBjb25zdCBpdGVtQ29kZTogbnVtYmVyID0gaXRlbS5jb2RlIGFzIG51bWJlcjtcclxuICAgICAgICBjb25zdCBtb2RWYWx1ZSA9IChudW1iZXJNb2RlbCAlICgyICogaXRlbUNvZGUpKTtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSAobW9kVmFsdWUgPj0gaXRlbUNvZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91bmNoZWNrQWxsKCkge1xyXG4gICAgaWYgKHRoaXMuY29sbGVjdGlvbiAhPT0gbnVsbCAmJiB0aGlzLmNvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChtID0+IHtcclxuICAgICAgICBtLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWFkTW9kZWxGb3JTbGlkZXJNb2RlKHNsaWRlck1vZGVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX21vZGVsID0gc2xpZGVyTW9kZWw7XHJcbiAgICBpZiAoc2xpZGVyTW9kZWwgIT09IHVuZGVmaW5lZCAmJiBzbGlkZXJNb2RlbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgc2xpZGVySW5wdXRDb2xsZWN0aW9uID0gc2xpZGVyTW9kZWwuc3BsaXQoJyAtICcpO1xyXG4gICAgICB0aGlzLnNsaWRlck1pbiA9IHBhcnNlSW50KHNsaWRlcklucHV0Q29sbGVjdGlvblswXSk7XHJcbiAgICAgIHRoaXMuc2xpZGVyTWF4ID0gcGFyc2VJbnQoc2xpZGVySW5wdXRDb2xsZWN0aW9uWzFdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2xpZGVyTWluID0gdGhpcy5zbGlkZXJEZWZhdWx0TWluO1xyXG4gICAgICB0aGlzLnNsaWRlck1heCA9IHRoaXMuc2xpZGVyRGVmYXVsdE1heDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlYWRNb2RlbEZvckNoZWNrYm94VG9UZXh0KGNoZWNrYm94VG9UZXh0TW9kZWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fbW9kZWwgPSBjaGVja2JveFRvVGV4dE1vZGVsO1xyXG4gICAgaWYgKGNoZWNrYm94VG9UZXh0TW9kZWwgIT09IHVuZGVmaW5lZCAmJiBjaGVja2JveFRvVGV4dE1vZGVsICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCA9IChjaGVja2JveFRvVGV4dE1vZGVsLmluZGV4T2YoJ0onKSA+IC0xKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVhZE1vZGVsRm9yQ2hlY2tib3hUb0JpbmFyeShjaGVja2JveFRvQmluYXJ5OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX21vZGVsID0gY2hlY2tib3hUb0JpbmFyeTtcclxuICAgIGlmIChjaGVja2JveFRvQmluYXJ5ICE9PSB1bmRlZmluZWQgJiYgY2hlY2tib3hUb0JpbmFyeSAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmNoZWNrQm94VG9UZXh0TW9kZWwgPSAoY2hlY2tib3hUb0JpbmFyeSA+PSAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVhZE1vZGVsRm9yRGF0ZUZpZWxkKGRhdGVGaWVsZE1vZGVsOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIEtlZXAgd2hhdGV2ZXIgY2FtZSBpbiBhcyB0aGUgXCJmaWx0ZXIgdmFsdWVcIiBmb3Igb3V0cHV0c1xyXG4gICAgdGhpcy5fbW9kZWwgPSBkYXRlRmllbGRNb2RlbDtcclxuXHJcbiAgICBpZiAoIWRhdGVGaWVsZE1vZGVsKSB7XHJcbiAgICAgIHRoaXMuZGF0ZUZpZWxkVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0ZUZpZWxkTW9kZWwgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIHRoaXMuZGF0ZUZpZWxkVmFsdWUgPSBkYXRlRmllbGRNb2RlbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgZGF0ZUZpZWxkTW9kZWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIC8vIEFjY2VwdCBcIj89J2RkLU1NLXl5eXknXCIsIFwiZGQtTU0teXl5eVwiLCBvciBcInl5eXktTU0tZGRcIlxyXG4gICAgICBsZXQgcmF3ID0gZGF0ZUZpZWxkTW9kZWw7XHJcbiAgICAgIGNvbnN0IHdyYXBwZWQgPSByYXcubWF0Y2goL1xcPz0nKFxcZHsyfS1cXGR7Mn0tXFxkezR9KScvKTtcclxuICAgICAgaWYgKHdyYXBwZWQpIHJhdyA9IHdyYXBwZWRbMV07XHJcblxyXG4gICAgICBjb25zdCBkZG1teXl5eSA9IC9eKFxcZHsyfSktKFxcZHsyfSktKFxcZHs0fSkkLztcclxuICAgICAgY29uc3QgeXl5eW1tZGQgPSAvXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pJC87XHJcblxyXG4gICAgICBpZiAoZGRtbXl5eXkudGVzdChyYXcpKSB7XHJcbiAgICAgICAgY29uc3QgWywgZGQsIG1tLCB5eXl5XSA9IGRkbW15eXl5LmV4ZWMocmF3KSE7XHJcbiAgICAgICAgdGhpcy5kYXRlRmllbGRWYWx1ZSA9IG5ldyBEYXRlKCt5eXl5LCArbW0gLSAxLCArZGQpO1xyXG4gICAgICB9IGVsc2UgaWYgKHl5eXltbWRkLnRlc3QocmF3KSkge1xyXG4gICAgICAgIGNvbnN0IFssIHl5eXksIG1tLCBkZF0gPSB5eXl5bW1kZC5leGVjKHJhdykhO1xyXG4gICAgICAgIHRoaXMuZGF0ZUZpZWxkVmFsdWUgPSBuZXcgRGF0ZSgreXl5eSwgK21tIC0gMSwgK2RkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRhdGVGaWVsZFZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfcmVhZE1vZGVsRm9yRGF0ZVJhbmdlRmllbGQoZGF0ZVJhbmdlRmllbGRNb2RlbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9tb2RlbCA9IGRhdGVSYW5nZUZpZWxkTW9kZWw7XHJcbiAgICBpZiAoZGF0ZVJhbmdlRmllbGRNb2RlbCAhPT0gdW5kZWZpbmVkICYmIGRhdGVSYW5nZUZpZWxkTW9kZWwgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGRhdGVDb2xsZWN0aW9uID0gZGF0ZVJhbmdlRmllbGRNb2RlbC5zcGxpdCgnJicpO1xyXG5cclxuICAgICAgbGV0IHN0YXJ0U3RyaW5nID0gZGF0ZUNvbGxlY3Rpb25bMF0udHJpbSgpLnN1YnN0cig0LCBkYXRlQ29sbGVjdGlvblswXS5sZW5ndGggLSA1KTtcclxuICAgICAgbGV0IGVuZFN0cmluZyA9IGRhdGVDb2xsZWN0aW9uWzFdLnRyaW0oKS5zdWJzdHIoNCwgZGF0ZUNvbGxlY3Rpb25bMV0ubGVuZ3RoIC0gNSk7XHJcblxyXG4gICAgICBsZXQgc3RhcnREYXRlQ29tcG9uZW50cyA9IHN0YXJ0U3RyaW5nLnNwbGl0KCctJyk7XHJcbiAgICAgIGxldCBlbmREYXRlQ29tcG9uZW50cyA9IGVuZFN0cmluZy5zcGxpdCgnLScpO1xyXG5cclxuICAgICAgdGhpcy5kYXRlUmFuZ2VTdGFydCA9IG5ldyBEYXRlKHBhcnNlSW50KHN0YXJ0RGF0ZUNvbXBvbmVudHNbMl0pLCBwYXJzZUludChzdGFydERhdGVDb21wb25lbnRzWzFdKSAtIDEsIHBhcnNlSW50KHN0YXJ0RGF0ZUNvbXBvbmVudHNbMF0pKTtcclxuICAgICAgdGhpcy5kYXRlUmFuZ2VFbmQgPSBuZXcgRGF0ZShwYXJzZUludChlbmREYXRlQ29tcG9uZW50c1syXSksIHBhcnNlSW50KGVuZERhdGVDb21wb25lbnRzWzFdKSAtIDEsIHBhcnNlSW50KGVuZERhdGVDb21wb25lbnRzWzBdKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGVSYW5nZVN0YXJ0ID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLmRhdGVSYW5nZUVuZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FwcGx5RGVmYXVsdEZvckZpbHRlckxpc3QoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkZWZhdWx0U3RyaW5nID0gdGhpcy5kZWZhdWx0VmFsdWUudG9TdHJpbmcoKTtcclxuICAgIGNvbnN0IGNvZGVzID0gZGVmYXVsdFN0cmluZy5zcGxpdCgnLCcpLm1hcChjb2RlID0+IGNvZGUudHJpbSgpKTtcclxuXHJcbiAgICBjb2Rlcy5mb3JFYWNoKGNvZGUgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fY29sbGVjdGlvbi5maW5kKGkgPT4gaS5jb2RlLnRvU3RyaW5nKCkgPT09IGNvZGUpO1xyXG4gICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yRmlsdGVyTGlzdCgpO1xyXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMuX21vZGVsKTtcclxuICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcHBseURlZmF1bHRGb3JTdHJpbmdDb2xsZWN0aW9uTGlzdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlZmF1bHRTdHJpbmcgPSB0aGlzLmRlZmF1bHRWYWx1ZS50b1N0cmluZygpO1xyXG4gICAgY29uc3QgY29kZXMgPSBkZWZhdWx0U3RyaW5nLnNwbGl0KCcsJykubWFwKGNvZGUgPT4gY29kZS50cmltKCkpO1xyXG5cclxuICAgIGNvZGVzLmZvckVhY2goY29kZSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9jb2xsZWN0aW9uLmZpbmQoaSA9PiBpLmNvZGUudG9TdHJpbmcoKSA9PT0gY29kZSk7XHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JTdHJpbmdDb2xsZWN0aW9uTGlzdCgpO1xyXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMuX21vZGVsKTtcclxuICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcHBseURlZmF1bHRGb3JTaW5nbGVTZWxlY3RMaXN0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGVmYXVsdENvZGUgPSB0aGlzLmRlZmF1bHRWYWx1ZS50b1N0cmluZygpLnRyaW0oKTtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9jb2xsZWN0aW9uLmZpbmQoaSA9PiBpLmNvZGUudG9TdHJpbmcoKSA9PT0gZGVmYXVsdENvZGUpO1xyXG5cclxuICAgIGlmIChpdGVtKSB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yU2luZ2xlU2VsZWN0TGlzdCgpO1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5fbW9kZWwpO1xyXG4gICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYXBwbHlEZWZhdWx0Rm9yU2VsZWN0TGlzdFdpdGhOdW1iZXJPdXRwdXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkZWZhdWx0TnVtYmVyID0gTnVtYmVyKHRoaXMuZGVmYXVsdFZhbHVlKTtcclxuXHJcbiAgICBpZiAoIWlzTmFOKGRlZmF1bHROdW1iZXIpICYmIGRlZmF1bHROdW1iZXIgPiAwKSB7XHJcbiAgICAgIC8vIERlY29kZSB0aGUgbnVtYmVyIHRvIGRldGVybWluZSB3aGljaCBpdGVtcyBzaG91bGQgYmUgY2hlY2tlZFxyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fY29sbGVjdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1Db2RlOiBudW1iZXIgPSBOdW1iZXIoaXRlbS5jb2RlKTtcclxuICAgICAgICBjb25zdCBtb2RWYWx1ZSA9IChkZWZhdWx0TnVtYmVyICUgKDIgKiBpdGVtQ29kZSkpO1xyXG4gICAgICAgIGl0ZW0uY2hlY2tlZCA9IChtb2RWYWx1ZSA+PSBpdGVtQ29kZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yU2VsZWN0TGlzdFdpdGhOdW1iZXJPdXRwdXQoKTtcclxuICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMuX21vZGVsKTtcclxuICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FwcGx5RGVmYXVsdEZvclNsaWRlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlZmF1bHRTdHJpbmcgPSB0aGlzLmRlZmF1bHRWYWx1ZS50b1N0cmluZygpO1xyXG5cclxuICAgIGNvbnN0IFttaW4sIG1heF0gPSBkZWZhdWx0U3RyaW5nLnNwbGl0KCctJykubWFwKHMgPT4gTnVtYmVyKHMudHJpbSgpKSk7XHJcbiAgICBpZiAoIWlzTmFOKG1pbikgJiYgIWlzTmFOKG1heCkpIHtcclxuICAgICAgdGhpcy5zbGlkZXJNaW4gPSBtaW47XHJcbiAgICAgIHRoaXMuc2xpZGVyTWF4ID0gbWF4O1xyXG4gICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvclNsaWRlck1vZGUoKTtcclxuICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMuX21vZGVsKTtcclxuICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FwcGx5RGVmYXVsdEZvckNoZWNrYm94VG9UZXh0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGVmYXVsdFN0cmluZyA9IHRoaXMuZGVmYXVsdFZhbHVlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtcclxuICAgIHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCA9IChkZWZhdWx0U3RyaW5nID09PSAnSicgfHwgZGVmYXVsdFN0cmluZyA9PT0gJ1knIHx8IGRlZmF1bHRTdHJpbmcgPT09ICdUUlVFJyk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gdGhpcy5tb2Rlcy5DaGVja2JveFRvVGV4dCkge1xyXG4gICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvckNoZWNrYm94VG9UZXh0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvckNoZWNrYm94VG9TaW1wbGVUZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMuX21vZGVsKTtcclxuICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcHBseURlZmF1bHRGb3JDaGVja2JveFRvQmluYXJ5KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gTnVtYmVyKHRoaXMuZGVmYXVsdFZhbHVlKTtcclxuICAgIHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCA9ICghaXNOYU4oZGVmYXVsdFZhbHVlKSAmJiBkZWZhdWx0VmFsdWUgPj0gMSk7XHJcblxyXG4gICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JDaGVja2JveFRvQmluYXJ5KCk7XHJcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5fbW9kZWwpO1xyXG4gICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FwcGx5RGVmYXVsdEZvckRhdGVGaWVsZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlZmF1bHRTdHJpbmcgPSB0aGlzLmRlZmF1bHRWYWx1ZS50b1N0cmluZygpO1xyXG5cclxuICAgIGlmIChkZWZhdWx0U3RyaW5nLm1hdGNoKC9eXFxkezJ9LVxcZHsyfS1cXGR7NH0kLykpIHtcclxuICAgICAgLy8gZGQtTU0teXl5eSBmb3JtYXRcclxuICAgICAgY29uc3QgW2RkLCBtbSwgeXl5eV0gPSBkZWZhdWx0U3RyaW5nLnNwbGl0KCctJyk7XHJcbiAgICAgIHRoaXMuZGF0ZUZpZWxkVmFsdWUgPSBuZXcgRGF0ZSgreXl5eSwgK21tIC0gMSwgK2RkKTtcclxuICAgIH0gZWxzZSBpZiAoZGVmYXVsdFN0cmluZy5tYXRjaCgvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8pKSB7XHJcbiAgICAgIC8vIHl5eXktTU0tZGQgZm9ybWF0XHJcbiAgICAgIGNvbnN0IFt5eXl5LCBtbSwgZGRdID0gZGVmYXVsdFN0cmluZy5zcGxpdCgnLScpO1xyXG4gICAgICB0aGlzLmRhdGVGaWVsZFZhbHVlID0gbmV3IERhdGUoK3l5eXksICttbSAtIDEsICtkZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBUcnkgcGFyc2luZyBhcyBzdGFuZGFyZCBkYXRlXHJcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkZWZhdWx0U3RyaW5nKTtcclxuICAgICAgaWYgKCFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcclxuICAgICAgICB0aGlzLmRhdGVGaWVsZFZhbHVlID0gZGF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGVGaWVsZFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yRGF0ZUZpZWxkKHRoaXMuZGF0ZUZpZWxkVmFsdWUpO1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5fbW9kZWwpO1xyXG4gICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYXBwbHlEZWZhdWx0Rm9yRGF0ZVJhbmdlRmllbGQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkZWZhdWx0U3RyaW5nID0gdGhpcy5kZWZhdWx0VmFsdWUudG9TdHJpbmcoKTtcclxuXHJcbiAgICBpZiAoZGVmYXVsdFN0cmluZy5pbmNsdWRlcygnJicpKSB7XHJcbiAgICAgIC8vIEZvcm1hdDogXCJzdGFydERhdGUgJiBlbmREYXRlXCJcclxuICAgICAgY29uc3QgW3N0YXJ0U3RyLCBlbmRTdHJdID0gZGVmYXVsdFN0cmluZy5zcGxpdCgnJicpLm1hcChzID0+IHMudHJpbSgpKTtcclxuXHJcbiAgICAgIGNvbnN0IHBhcnNlRGF0ZSA9IChkYXRlU3RyOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGVTdHIubWF0Y2goL15cXGR7Mn0tXFxkezJ9LVxcZHs0fSQvKSkge1xyXG4gICAgICAgICAgY29uc3QgW2RkLCBtbSwgeXl5eV0gPSBkYXRlU3RyLnNwbGl0KCctJyk7XHJcbiAgICAgICAgICByZXR1cm4gbmV3IERhdGUoK3l5eXksICttbSAtIDEsICtkZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRlU3RyLm1hdGNoKC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLykpIHtcclxuICAgICAgICAgIGNvbnN0IFt5eXl5LCBtbSwgZGRdID0gZGF0ZVN0ci5zcGxpdCgnLScpO1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCt5eXl5LCArbW0gLSAxLCArZGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHBhcnNlRGF0ZShzdGFydFN0cik7XHJcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZURhdGUoZW5kU3RyKTtcclxuXHJcbiAgICAgIGlmIChzdGFydERhdGUgJiYgZW5kRGF0ZSkge1xyXG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlU3RhcnQgPSBzdGFydERhdGU7XHJcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2VFbmQgPSBlbmREYXRlO1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yRGF0ZVJhbmdlKFt0aGlzLmRhdGVSYW5nZVN0YXJ0LCB0aGlzLmRhdGVSYW5nZUVuZF0pO1xyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLl9tb2RlbCk7XHJcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYXBwbHlEZWZhdWx0Rm9yVGV4dEZpZWxkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbW9kZWwgPSB0aGlzLmRlZmF1bHRWYWx1ZS50b1N0cmluZygpO1xyXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMuX21vZGVsKTtcclxuICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcHBseURlZmF1bHRGb3JDaGVja2JveCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlZmF1bHRTdHJpbmcgPSB0aGlzLmRlZmF1bHRWYWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLl9tb2RlbCA9IChkZWZhdWx0U3RyaW5nID09PSAndHJ1ZScgfHwgZGVmYXVsdFN0cmluZyA9PT0gJzEnIHx8IGRlZmF1bHRTdHJpbmcgPT09ICd5ZXMnKTtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLl9tb2RlbCk7XHJcbiAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYXBwbHlEZWZhdWx0RmlsdGVycygpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBtb2RlV2l0aG91dENvbGxlY3Rpb246IGJvb2xlYW4gPSB0aGlzLm1vZGUgPT09IHRoaXMubW9kZXMuRGF0ZUZpZWxkIHx8XHJcbiAgICAgIHRoaXMubW9kZSA9PT0gdGhpcy5tb2Rlcy5EYXRlUmFuZ2VGaWVsZCB8fFxyXG4gICAgICB0aGlzLm1vZGUgPT09IHRoaXMubW9kZXMuU2xpZGVyO1xyXG5cclxuICAgIGNvbnN0IGNhbkFwcGx5RGVmYXVsdHM6IGJvb2xlYW4gPSAobW9kZVdpdGhvdXRDb2xsZWN0aW9uIHx8ICghbW9kZVdpdGhvdXRDb2xsZWN0aW9uICYmIHRoaXMuY29sbGVjdGlvbiAmJiB0aGlzLmNvbGxlY3Rpb24ubGVuZ3RoID4gMCkpICYmXHJcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlICYmXHJcbiAgICAgICEodGhpcy5fbW9kZWw/Lmxlbmd0aCB8fCB0aGlzLl9tb2RlbCA+IDApO1xyXG5cclxuICAgIGlmICghY2FuQXBwbHlEZWZhdWx0cykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkZpbHRlcmxpc3Q6XHJcbiAgICAgICAgdGhpcy5fYXBwbHlEZWZhdWx0Rm9yRmlsdGVyTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuU2VsZWN0TGlzdFdpdGhTdHJpbmdDb2xsZWN0aW9uT3V0cHV0OlxyXG4gICAgICAgIHRoaXMuX2FwcGx5RGVmYXVsdEZvclN0cmluZ0NvbGxlY3Rpb25MaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5TaW5nbGVTZWxlY3RMaXN0OlxyXG4gICAgICAgIHRoaXMuX2FwcGx5RGVmYXVsdEZvclNpbmdsZVNlbGVjdExpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLlNlbGVjdExpc3RXaXRoTnVtYmVyT3V0cHV0OlxyXG4gICAgICAgIHRoaXMuX2FwcGx5RGVmYXVsdEZvclNlbGVjdExpc3RXaXRoTnVtYmVyT3V0cHV0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5TbGlkZXI6XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5OdWxsYWJsZVNsaWRlcjpcclxuICAgICAgICB0aGlzLl9hcHBseURlZmF1bHRGb3JTbGlkZXIoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkNoZWNrYm94VG9UZXh0OlxyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuQ2hlY2tib3hUb1NpbXBsZVRleHQ6XHJcbiAgICAgICAgdGhpcy5fYXBwbHlEZWZhdWx0Rm9yQ2hlY2tib3hUb1RleHQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkNoZWNrYm94VG9CaW5hcnk6XHJcbiAgICAgICAgdGhpcy5fYXBwbHlEZWZhdWx0Rm9yQ2hlY2tib3hUb0JpbmFyeSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuRGF0ZUZpZWxkOlxyXG4gICAgICAgIHRoaXMuX2FwcGx5RGVmYXVsdEZvckRhdGVGaWVsZCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuRGF0ZVJhbmdlRmllbGQ6XHJcbiAgICAgICAgdGhpcy5fYXBwbHlEZWZhdWx0Rm9yRGF0ZVJhbmdlRmllbGQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLlRleHRGaWVsZDpcclxuICAgICAgICB0aGlzLl9hcHBseURlZmF1bHRGb3JUZXh0RmllbGQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkNoZWNrYm94OlxyXG4gICAgICAgIHRoaXMuX2FwcGx5RGVmYXVsdEZvckNoZWNrYm94KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kZWZhdWx0U2V0ID0gdHJ1ZTtcclxuICB9XHJcbn1cclxuIl19
|
|
961
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci1pdGVtL2ZpbHRlci1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUU3RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFFcEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHlEQUF5RCxDQUFDO0FBRXRGLE9BQU8sRUFDTCw4Q0FBOEMsRUFDL0MsTUFBTSxpRUFBaUUsQ0FBQztBQUl6RSxPQUFPLEVBQUMsZUFBZSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBNktuRCxNQUFNLE9BQU8sbUJBQW1CO0lBMko5QixZQUFtQixXQUE2QixFQUM1QixlQUFrQztRQURuQyxnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQW1CO1FBM0ovQyxVQUFLLEdBQThCLGtCQUFrQixDQUFDO1FBQ3RELFVBQUssR0FBMEIsY0FBYyxDQUFDO1FBK0I5QyxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUcxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBUWpDLDRHQUE0RztRQUVyRyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUV0QyxtSEFBbUg7UUFFNUcsbUJBQWMsR0FBWSxLQUFLLENB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IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb3JlQ29tcG9uZW50c0ljb259IGZyb20gJy4uLy4uL2NvcmUvZW51bS9jb3JlLWNvbXBvbmVudHMtaWNvbi5lbnVtJztcbmltcG9ydCB7RmlsdGVySXRlbVZpZXdtb2RlbH0gZnJvbSAnLi9maWx0ZXItaXRlbS12aWV3bW9kZWwnO1xuaW1wb3J0IHtJY29uQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi9pY29uL2ljb24tY2FjaGUuc2VydmljZSc7XG5pbXBvcnQge0ZpbHRlckl0ZW1Nb2RlfSBmcm9tICcuLi8uLi9jb3JlL2VudW0vZmlsdGVySXRlbS1tb2RlLmVudW0nO1xuaW1wb3J0IHtTY3JlZW5Db25maWdBZGFwdGVyQ29tcG9uZW50fSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjcmVlbi1jb25maWctYWRhcHRlci5jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7VXNlclJpZ2h0VHlwZX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvZW51bS91c2VyLXJpZ2h0LXR5cGUuZW51bSc7XG5pbXBvcnQge09iamVjdENvbmZpZ3VyYXRpb259IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL29iamVjdC1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7XG4gIFNDUkVFTl9DT05GSUdfQURBUFRFUl9DT01QT05FTlRfSU5URVJGQUNFX05BTUVcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY3JlZW4tY29uZmlnLWFkYXB0ZXItY29tcG9uZW50LWludGVyZmFjZS1uYW1lJztcbmltcG9ydCB7XG4gIE9iamVjdENvbmZpZ3VyYXRpb25EZWZhdWx0VmFsdWVUeXBlXG59IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL3R5cGUvb2JqZWN0LWNvbmZpZ3VyYXRpb24tZGVmYXVsdC12YWx1ZS10eXBlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY28tZmlsdGVyLWl0ZW1cIixcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0taGVhZGVyXCI+XG4gICAgICA8Y28tY29sbGFwc2libGVcbiAgICAgICAgW2hlYWRlclRpdGxlXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW2V4cGFuZEJ1dHRvbkxhc3RdPVwidHJ1ZVwiXG4gICAgICAgIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb25zLkFycm93UG9pbnREb3duKVwiXG4gICAgICAgIFtleHBhbmRlZF09XCJleHBhbmRlZFwiXG4gICAgICAgIFtzaG93QnV0dG9uXT1cInNob3dCdXR0b25cIlxuICAgICAgICBbYnV0dG9uVGV4dF09XCJmaWx0ZXJCdXR0b25MYWJlbFwiXG4gICAgICAgIChidXR0b25DbGlja2VkKT1cIm9uQnV0dG9uQ2xpY2tlZCgpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1pdGVtLWNvbGxhcHNhYmxlLWNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tY3VzdG9tLWNvbnRlbnRcIiAqbmdJZj1cImN1c3RvbUNvbnRlbnQ7IGVsc2UgY29sbGVjdGlvbkNvbnRlbnRcIlxuICAgICAgICAgICAgICAgKGtleWRvd24pPVwic2hvd0J1dHRvbj10cnVlXCIgKG1vdXNlZG93bik9XCJzaG93QnV0dG9uPXRydWVcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NvbGxlY3Rpb25Db250ZW50PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1pdGVtLWNvbGxlY3Rpb24tY29udGVudFwiICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuRmlsdGVybGlzdCB8fCBtb2RlID09PSBtb2Rlcy5TaW5nbGVTZWxlY3RMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbW9kZSA9PT0gbW9kZXMuU2VsZWN0TGlzdFdpdGhOdW1iZXJPdXRwdXQgfHwgbW9kZSA9PT0gbW9kZXMuU2VsZWN0TGlzdFdpdGhTdHJpbmdDb2xsZWN0aW9uT3V0cHV0XCI+XG4gICAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2xsZWN0aW9uPy5sZW5ndGggPiAxMCB8fCBtaW5TZWFyY2hDaGFyc1RvTG9hZENvbGxlY3Rpb25cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW21vZGVsXT1cImZpbHRlclRleHRcIlxuICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJvbk1vZGVsQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9jby1pbnB1dC10ZXh0PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJmaWx0ZXItbG9hZGVyXCI+PHNwYW4+PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8tcmVzdWx0c1wiICpuZ0lmPVwiZmlsdGVyZWRDb2xsZWN0aW9uPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwibm9SZXN1bHRzTGFiZWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tY29sbGVjdGlvbi1yZXN1bHRzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZENvbGxlY3Rpb247IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tY29sbGVjdGlvbi1yZXN1bHQtaXRlbVwiICpuZ0lmPVwiaW5kZXggPCBsaW1pdFRvIHx8IHNob3dBbGxSZXN1bHRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC1jaGVja2JveCAqbmdJZj1cIm1vZGUgIT09IG1vZGVzLlNpbmdsZVNlbGVjdExpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwib3B0aW9uLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZUxhYmVsXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJoYW5kbGVNb2RlbENoYW5nZShvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgID48L2NvLWlucHV0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8Y28taW5wdXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuU2luZ2xlU2VsZWN0TGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm9wdGlvbi5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlTW9kZWxDaGFuZ2Uob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvY28taW5wdXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tYW1vdW50XCIgKm5nSWY9XCJvcHRpb24uY291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJvcHRpb24uY291bnQudG9TdHJpbmcoKSB8IGFwcGVuZDogJyknIHwgcHJlcGVuZDogJyAgICAgICgnXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItc2hvdy1tb3JlLW9yLWxlc3NcIiAqbmdJZj1cIiFzaG93QWxsUmVzdWx0c1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItc2hvdy1tb3JlIGNsaWNrYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1vcmVUb1Nob3coKVwiPlxuICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImluY3JlYXNlTGltaXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29ucy5BcnJvd1BvaW50RG93bilcIj48L2NvLWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJzaG93TW9yZUxhYmVsXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItc2hvdy1sZXNzIGNsaWNrYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImxlc3NUb1Nob3coKVwiPlxuICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInNldFRvSW5pdGlhbExpbWl0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGNvLWljb24gW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbnMuQXJyb3dQb2ludFVwKVwiPjwvY28taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cInNob3dMZXNzTGFiZWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tc2xpZGVyLWNvbnRlbnRcIiAqbmdJZj1cIm1vZGUgPT09IG1vZGVzLlNsaWRlclwiPlxuICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2xpZGVyLWZyb21cIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICAgICBbZGlnaXRzT25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbaGlkZUFycm93QnV0dG9uc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbZXhjbHVkZVBsdXNNaW51c109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0ZST00nIHwgY29yZUxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJzbGlkZXJNaW5cIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImhhbmRsZU1vZGVsQ2hhbmdlKHNsaWRlck1pbilcIlxuICAgICAgICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxuICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2xpZGVyLXRvXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICAgICAgW2RpZ2l0c09ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2hpZGVBcnJvd0J1dHRvbnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2V4Y2x1ZGVQbHVzTWludXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidUTycgfCBjb3JlTG9jYWxpemVcIlxuICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInNsaWRlck1heFwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlTW9kZWxDaGFuZ2Uoc2xpZGVyTWF4KVwiXG4gICAgICAgICAgICAgID48L2NvLWlucHV0LXRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItaXRlbS1zbGlkZXItY29udGVudFwiICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuTnVsbGFibGVTbGlkZXJcIj5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHRcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNsaWRlci1mcm9tXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICAgICAgW2RpZ2l0c09ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2hpZGVBcnJvd0J1dHRvbnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2V4Y2x1ZGVQbHVzTWludXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidGUk9NJyB8IGNvcmVMb2NhbGl6ZVwiXG4gICAgICAgICAgICAgICAgWyhtb2RlbCldPVwic2xpZGVyTWluXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJoYW5kbGVNb2RlbENoYW5nZShzbGlkZXJNaW4pXCJcbiAgICAgICAgICAgICAgPjwvY28taW5wdXQtdGV4dD5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHRcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNsaWRlci10b1wiXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICAgIFtkaWdpdHNPbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtoaWRlQXJyb3dCdXR0b25zXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtleGNsdWRlUGx1c01pbnVzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInVE8nIHwgY29yZUxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJzbGlkZXJNYXhcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImhhbmRsZU1vZGVsQ2hhbmdlKHNsaWRlck1heClcIlxuICAgICAgICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tY2hlY2tib3gtY29udGVudFwiICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuQ2hlY2tib3ggXCI+XG4gICAgICAgICAgICAgIDxjby1pbnB1dC1jaGVja2JveFxuICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cIm1vZGVsXCJcbiAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwicGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICAgICAgPC9jby1pbnB1dC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1pdGVtLWNoZWNrYm94LWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAqbmdJZj1cIm1vZGUgPT09IG1vZGVzLkNoZWNrYm94VG9UZXh0IHx8IG1vZGUgPT09IG1vZGVzLkNoZWNrYm94VG9TaW1wbGVUZXh0IHx8IG1vZGUgPT09IG1vZGVzLkNoZWNrYm94VG9CaW5hcnlcIj5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgWyhtb2RlbCldPVwiY2hlY2tCb3hUb1RleHRNb2RlbFwiXG4gICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImhhbmRsZU1vZGVsQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInBsYWNlaG9sZGVyXCI+PC9jby1pbnB1dC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1pdGVtLXRleHRmaWVsZC1jb250ZW50XCIgKm5nSWY9XCJtb2RlID09PSBtb2Rlcy5UZXh0RmllbGRcIj5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHRcbiAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJtb2RlbFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImhhbmRsZU1vZGVsQ2hhbmdlKCRldmVudClcIj48L2NvLWlucHV0LXRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItaXRlbS1kYXRlRmllbGQtY29udGVudFwiICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuRGF0ZUZpZWxkXCI+XG4gICAgICAgICAgICAgIDxjby1pbnB1dC1kYXRlXG4gICAgICAgICAgICAgICAgI2RhdGVJbnB1dFxuICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cImRhdGVGaWVsZFZhbHVlXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrXCJcbiAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L2NvLWlucHV0LWRhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItaXRlbS1kYXRlRmllbGQtY29udGVudFwiICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuRGF0ZVJhbmdlRmllbGRcIj5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LWRhdGUtcmFuZ2UgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RhdGVSYW5nZUlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJbZGF0ZVJhbmdlU3RhcnQsIGRhdGVSYW5nZUVuZF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2llcyBkYXR1bScgfCBjb3JlTG9jYWxpemVcIj5cbiAgICAgICAgICAgICAgPC9jby1pbnB1dC1kYXRlLXJhbmdlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2NvLWNvbGxhcHNpYmxlPlxuICAgIDwvZGl2PlxuXG4gIGAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogU0NSRUVOX0NPTkZJR19BREFQVEVSX0NPTVBPTkVOVF9JTlRFUkZBQ0VfTkFNRSxcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGaWx0ZXJJdGVtQ29tcG9uZW50KVxuICB9XVxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBTY3JlZW5Db25maWdBZGFwdGVyQ29tcG9uZW50LCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgaWNvbnM6IHR5cGVvZiBDb3JlQ29tcG9uZW50c0ljb24gPSBDb3JlQ29tcG9uZW50c0ljb247XG4gIHB1YmxpYyBtb2RlczogdHlwZW9mIEZpbHRlckl0ZW1Nb2RlID0gRmlsdGVySXRlbU1vZGU7XG5cbiAgcHVibGljIGRhdGVGaWVsZFZhbHVlPzogRGF0ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1vZGUodmFsdWU6IEZpbHRlckl0ZW1Nb2RlKSB7XG4gICAgdGhpcy5fbW9kZSA9IHZhbHVlO1xuICAgIHRoaXMucmVhZE1vZGVsRm9yTW9kZSh0aGlzLl9tb2RlbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1vZGUoKTogRmlsdGVySXRlbU1vZGUge1xuICAgIHJldHVybiB0aGlzLl9tb2RlO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjb2xsZWN0aW9uKHZhbHVlOiBGaWx0ZXJJdGVtVmlld21vZGVsW10pIHtcbiAgICB0aGlzLl9jb2xsZWN0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5maWx0ZXJlZENvbGxlY3Rpb24gPSB0aGlzLl9jb2xsZWN0aW9uPy5zbGljZSgpO1xuICAgIC8vcmVzZXQgdGhlIG1vZGVsIGluIGNhc2UgdGhlcmUgd2FzIG5vIGNvbGxlY3Rpb24gdG8gc2V0IGl0cyB2YWx1ZXMgb24gd2hlbiBpdCB3YXMgc2V0LlxuICAgIHRoaXMubW9kZWwgPSB0aGlzLl9tb2RlbDtcbiAgICB0aGlzLl9jb2xsZWN0aW9uU3ViamVjdC5uZXh0KHRoaXMuX2NvbGxlY3Rpb24pO1xuICB9XG5cbiAgcHVibGljIGdldCBjb2xsZWN0aW9uKCk6IEZpbHRlckl0ZW1WaWV3bW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb247XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaW5pdGlhbExpbWl0OiBudW1iZXIgPSAxMDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWluU2VhcmNoQ2hhcnNUb0xvYWRDb2xsZWN0aW9uOiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbGxlY3Rpb25Mb2FkRm46IEZ1bmN0aW9uO1xuXG4gIC8vIFNldCB0byBmYWxzZSB0byB1c2UgZmlsdGVyIGl0ZW0gd2l0aCBhIG11bHRpIHNlbGVjdGFibGUgY29sbGVjdGlvbi4gU2V0IHRvIHRydWUgdG8gc3BlY2lmeSBjdXN0b20gY29udGVudFxuICBASW5wdXQoKVxuICBwdWJsaWMgY3VzdG9tQ29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFNldCB0byB0cnVlIHRvIHNob3cgYWxsIHJlc3VsdHMuIFNldCB0byBmYWxzZSB0byBnZXQgJ3Nob3cgbW9yZScgYW5kICdzaG93IGxlc3MnIGJ1dHRvbnMgdG8gZXhwYW5kIGFuZCBjb250cmFjdC5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dBbGxSZXN1bHRzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZpbHRlckJ1dHRvbkxhYmVsOiBzdHJpbmcgPSBcIlNlYXJjaFwiO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlYXJjaC4uLic7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dNb3JlTGFiZWw6IHN0cmluZyA9ICdTaG93IG1vcmUnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93TGVzc0xhYmVsOiBzdHJpbmcgPSAnU2hvdyBsZXNzJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbm9SZXN1bHRzTGFiZWw6IHN0cmluZyA9IFwiTm8gcmVzdWx0c1wiO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzbGlkZXJEZWZhdWx0TWluOiBudW1iZXIgPSAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzbGlkZXJEZWZhdWx0TWF4OiBudW1iZXIgPSAxMDAwMDA7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZ1bGxSYW5nZUlzTnVsbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjYW5GaWx0ZXJCeUNvZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZmlyc3REYXlPZldlZWs6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1vZGVsKG5ld01vZGVsOiBhbnkpIHtcbiAgICB0aGlzLnJlYWRNb2RlbEZvck1vZGUobmV3TW9kZWwpO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2RlbCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgY29uZmlnT2JqZWN0KHZhbHVlOiBPYmplY3RDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fY29uZmlnT2JqZWN0ID0gdmFsdWU7XG4gICAgdGhpcy5leHBhbmRlZCA9ICh0aGlzLl9jb25maWdPYmplY3QucmlnaHRzID09PSBVc2VyUmlnaHRUeXBlLlJlYWRXcml0ZSk7XG4gICAgdGhpcy5oaWRkZW4gPSAodGhpcy5fY29uZmlnT2JqZWN0LnJpZ2h0cyA8IFVzZXJSaWdodFR5cGUuUmVhZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbmZpZ09iamVjdCgpOiBPYmplY3RDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnT2JqZWN0O1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBtb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNvbGxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWx0ZXJJdGVtVmlld21vZGVsW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJJdGVtVmlld21vZGVsW10+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBmaWx0ZXJCdXR0b25DbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuY28tZmlsdGVyLWl0ZW1cIikgZ2V0IGhhc0NsYXNzKCkge1xuICAgIHJldHVybiB0cnVlOyAvLyBFbnN1cmVzIGl0IG5ldmVyIGdldHMgcmVtb3ZlZFxuICB9XG5cbiAgQFZpZXdDaGlsZCgnZGF0ZUlucHV0JykgZGF0ZUlucHV0OiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVSYW5nZUlucHV0JykgZGF0ZVJhbmdlSW5wdXQ6IGFueTtcblxuICBwdWJsaWMgZmlsdGVyZWRDb2xsZWN0aW9uOiBGaWx0ZXJJdGVtVmlld21vZGVsW10gPSBbXTtcbiAgcHVibGljIGxpbWl0VG86IG51bWJlciA9IDEwO1xuICBwdWJsaWMgZmlsdGVyVGV4dDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHNob3dCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vbW9kZWxzIGZvciB0aGUgc2xpZGVyIGZpZWxkIGlucHV0c1xuICBwdWJsaWMgc2xpZGVyTWluOiBudW1iZXI7XG4gIHB1YmxpYyBzbGlkZXJNYXg6IG51bWJlcjtcblxuICAvL21vZGVscyBmb3IgdGggZGF0ZXJhbmdlIGlucHV0XG4gIHB1YmxpYyBkYXRlUmFuZ2VTdGFydDogRGF0ZTtcbiAgcHVibGljIGRhdGVSYW5nZUVuZDogRGF0ZTtcblxuICAvL3NjcmVlbkNvbmZpZ1xuICBwdWJsaWMgb2JqZWN0Q29uZmlnTmFtZTogc3RyaW5nO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvLWhpZGRlbicpXG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XG4gIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcbiAgcHVibGljIGZvcmNlUmVhZG9ubHk6IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seTogYm9vbGVhbjtcbiAgcHVibGljIG1heExlbmd0aDogbnVtYmVyO1xuICBwdWJsaWMgZGVmYXVsdFZhbHVlOiBPYmplY3RDb25maWd1cmF0aW9uRGVmYXVsdFZhbHVlVHlwZTtcbiAgcHVibGljIGRlY2ltYWxzOiBudW1iZXI7XG4gIHB1YmxpYyByZWRFcnJvckJhY2tncm91bmQ6IGJvb2xlYW47XG5cbiAgLy9tb2RlbCBmb3IgdGhlIHRleHRib3ggb3B0aW9ucyB0aGF0IG5lZWQgYSBjb252ZXJ0ZWQgb3V0cHV0XG4gIHB1YmxpYyBjaGVja0JveFRvVGV4dE1vZGVsOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX2NvbmZpZ09iamVjdDogT2JqZWN0Q29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBfY29sbGVjdGlvbjogRmlsdGVySXRlbVZpZXdtb2RlbFtdID0gW107XG4gIHByaXZhdGUgX21vZGU6IEZpbHRlckl0ZW1Nb2RlID0gdGhpcy5tb2Rlcy5GaWx0ZXJsaXN0O1xuICBwcml2YXRlIF9tb2RlbDogYW55O1xuICBwcml2YXRlIF9kZWZhdWx0U2V0OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2NvbGxlY3Rpb25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJJdGVtVmlld21vZGVsW10+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX2NvbGxlY3Rpb25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBkZWJvdW5jZVRpbWVvdXQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaWNvblNlcnZpY2U6IEljb25DYWNoZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VG9Jbml0aWFsTGltaXQoKTtcbiAgICB0aGlzLnNob3dCdXR0b24gPSB0aGlzLnZhbHVlU2VsZWN0ZWQoKTtcbiAgICBpZiAodGhpcy5jaGVja0JveFRvVGV4dE1vZGVsID09PSB1bmRlZmluZWQgfHwgdGhpcy5jaGVja0JveFRvVGV4dE1vZGVsID09PSBudWxsKSB7XG4gICAgICB0aGlzLmNoZWNrQm94VG9UZXh0TW9kZWwgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fY29sbGVjdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMuX2NvbGxlY3Rpb25TdWJqZWN0LnN1YnNjcmliZSgoY29sbGVjdGlvbikgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9kZWZhdWx0U2V0ICYmIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fYXBwbHlEZWZhdWx0RmlsdGVycygpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fY29sbGVjdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHNldFRvSW5pdGlhbExpbWl0KCk6IHZvaWQge1xuICAgIHRoaXMubGltaXRUbyA9IHRoaXMuaW5pdGlhbExpbWl0O1xuICB9XG5cbiAgcHVibGljIGluY3JlYXNlTGltaXQoKTogdm9pZCB7XG4gICAgdGhpcy5saW1pdFRvICs9IDEwO1xuICB9XG5cbiAgcHVibGljIG1vcmVUb1Nob3coKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc2hvd0FsbFJlc3VsdHMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRDb2xsZWN0aW9uPy5sZW5ndGggPiB0aGlzLmxpbWl0VG87XG4gIH1cblxuICBwdWJsaWMgbGVzc1RvU2hvdygpIHtcbiAgICBpZiAodGhpcy5zaG93QWxsUmVzdWx0cykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZENvbGxlY3Rpb24/Lmxlbmd0aCA8PSB0aGlzLmxpbWl0VG8gJiYgdGhpcy5maWx0ZXJlZENvbGxlY3Rpb24/Lmxlbmd0aCA+IHRoaXMuaW5pdGlhbExpbWl0O1xuICB9XG5cbiAgcHVibGljIGhhbmRsZU1vZGVsQ2hhbmdlKG1vZGVsOiBhbnkpIHtcbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLkZpbHRlcmxpc3Q6XG4gICAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XG4gICAgICAgIG1vZGVsLmNoZWNrZWQgPSAhbW9kZWwuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JGaWx0ZXJMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLlNlbGVjdExpc3RXaXRoU3RyaW5nQ29sbGVjdGlvbk91dHB1dDpcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgbW9kZWwuY2hlY2tlZCA9ICFtb2RlbC5jaGVja2VkO1xuICAgICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvclN0cmluZ0NvbGxlY3Rpb25MaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLlNpbmdsZVNlbGVjdExpc3Q6XG4gICAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XG4gICAgICAgIHRoaXMudW5jaGVja0ZvclNpbmdsZVNlbGVjdChtb2RlbCk7XG4gICAgICAgIG1vZGVsLmNoZWNrZWQgPSAhbW9kZWwuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JTaW5nbGVTZWxlY3RMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLlNlbGVjdExpc3RXaXRoTnVtYmVyT3V0cHV0OlxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xuICAgICAgICBtb2RlbC5jaGVja2VkID0gIW1vZGVsLmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yU2VsZWN0TGlzdFdpdGhOdW1iZXJPdXRwdXQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMubW9kZXMuU2xpZGVyOlxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xuICAgICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvclNsaWRlck1vZGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMubW9kZXMuTnVsbGFibGVTbGlkZXI6XG4gICAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yTnVsbGFibGVTbGlkZXJNb2RlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLkNoZWNrYm94VG9UZXh0OlxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xuICAgICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvckNoZWNrYm94VG9UZXh0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLkNoZWNrYm94VG9TaW1wbGVUZXh0OlxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xuICAgICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvckNoZWNrYm94VG9TaW1wbGVUZXh0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLkNoZWNrYm94VG9CaW5hcnk6XG4gICAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yQ2hlY2tib3hUb0JpbmFyeSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5EYXRlUmFuZ2VGaWVsZDpcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JEYXRlUmFuZ2UobW9kZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5EYXRlRmllbGQ6XG4gICAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yRGF0ZUZpZWxkKG1vZGVsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMubW9kZXMuVGV4dEZpZWxkOlxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xuICAgICAgICB0aGlzLl9tb2RlbCA9ICh0eXBlb2YgdGhpcy5fbW9kZWwgPT09ICdzdHJpbmcnICYmIHRoaXMuX21vZGVsLmxlbmd0aCA9PT0gMCkgPyB1bmRlZmluZWQgOiB0aGlzLl9tb2RlbDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLl9tb2RlbCk7XG4gICAgdGhpcy5jb2xsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5jb2xsZWN0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyB2YWx1ZVNlbGVjdGVkKCkge1xuICAgIGlmICh0aGlzLmNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuY29sbGVjdGlvbi5maW5kKGMgPT4gYy5jaGVja2VkKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIG9uTW9kZWxDaGFuZ2UodGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCk7XG4gICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIodGV4dCk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIC8vIEFwcGxpZXMgZmlsdGVyIHRvIHRoZSBjb2xsZWN0aW9uLlxuICBwdWJsaWMgYXN5bmMgYXBwbHlGaWx0ZXIodGV4dDogc3RyaW5nKTogUHJvbWlzZTxbXT4ge1xuICAgIGlmICghaXNOYU4odGhpcy5taW5TZWFyY2hDaGFyc1RvTG9hZENvbGxlY3Rpb24pKSB7XG4gICAgICBpZiAoIXRleHQgfHwgdGV4dC5sZW5ndGggPCB0aGlzLm1pblNlYXJjaENoYXJzVG9Mb2FkQ29sbGVjdGlvbikge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwKSk7XG4gICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAzMDApKTtcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uTG9hZEZuKHRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmZpbHRlclRleHQgPSB0ZXh0O1xuICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSB7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJUZXh0OiBzdHJpbmcgPSB0aGlzLmZpbHRlclRleHQ/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgZmlsdGVyZWRJdGVtQ291bnQ6IG51bWJlciA9IDA7XG5cbiAgICB0aGlzLmZpbHRlcmVkQ29sbGVjdGlvbiA9IHRoaXMuY29sbGVjdGlvbj8uZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBsYWJlbFRleHQ6IHN0cmluZyA9IGl0ZW0uZGVzY3JpcHRpb24/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgY29uc3QgbWF0Y2hlc0Rlc2NyaXB0aW9uOiBib29sZWFuID0gbGFiZWxUZXh0Py5pbmRleE9mKGZpbHRlclRleHQpICE9PSAtMTtcblxuICAgICAgbGV0IG1hdGNoZXNDb2RlOiBib29sZWFuID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5jYW5GaWx0ZXJCeUNvZGUpIHtcbiAgICAgICAgY29uc3QgY29kZVRleHQ6IHN0cmluZyA9IGl0ZW0uY29kZT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBtYXRjaGVzQ29kZSA9IGNvZGVUZXh0Py5pbmRleE9mKGZpbHRlclRleHQpICE9PSAtMTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNIaWRkZW5CeUZpbHRlcjogYm9vbGVhbiA9ICFtYXRjaGVzRGVzY3JpcHRpb24gJiYgIW1hdGNoZXNDb2RlO1xuXG4gICAgICBpZiAoaXNIaWRkZW5CeUZpbHRlcikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJlZEl0ZW1Db3VudCsrO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkJ1dHRvbkNsaWNrZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfCBudWxsKT8uYmx1cj8uKCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLkRhdGVGaWVsZDpcbiAgICAgICAgdGhpcy5kYXRlSW5wdXQ/LmZpbmFsaXplPy4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMubW9kZXMuRGF0ZVJhbmdlRmllbGQ6XG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlSW5wdXQ/LmZpbmFsaXplPy4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHRoaXMuZmlsdGVyQnV0dG9uQ2xpY2tlZC5lbWl0KCk7XG4gIH1cblxuXG4gIHByaXZhdGUgdW5jaGVja0ZvclNpbmdsZVNlbGVjdChtb2RlbDogRmlsdGVySXRlbVZpZXdtb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuY29sbGVjdGlvbi5mb3JFYWNoKG0gPT4ge1xuICAgICAgaWYgKG0uY29kZSAhPT0gbW9kZWwuY29kZSAmJiBtLmRlc2NyaXB0aW9uICE9PSBtb2RlbC5kZXNjcmlwdGlvbikge1xuICAgICAgICBtLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZE1vZGVsRm9yTW9kZShuZXdNb2RlbDogYW55KTogdm9pZCB7XG4gICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5GaWx0ZXJsaXN0OlxuICAgICAgICB0aGlzLl9yZWFkTW9kZWxGb3JGaWx0ZXJMaXN0KG5ld01vZGVsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMubW9kZXMuU2luZ2xlU2VsZWN0TGlzdDpcbiAgICAgICAgdGhpcy5fcmVhZE1vZGVsRm9yU2luZ2xlU2VsZWN0TGlzdChuZXdNb2RlbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLlNlbGVjdExpc3RXaXRoU3RyaW5nQ29sbGVjdGlvbk91dHB1dDpcbiAgICAgICAgdGhpcy5fcmVhZE1vZGVsRm9yU3RyaW5nQ29sbGVjdGlvbkxpc3QobmV3TW9kZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5TZWxlY3RMaXN0V2l0aE51bWJlck91dHB1dDpcbiAgICAgICAgdGhpcy5fcmVhZE1vZGVsRm9yU2VsZWN0TGlzdFdpdGhOdW1iZXJPdXRwdXQobmV3TW9kZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5TbGlkZXI6XG4gICAgICBjYXNlIHRoaXMubW9kZXMuTnVsbGFibGVTbGlkZXI6XG4gICAgICAgIHRoaXMuX3JlYWRNb2RlbEZvclNsaWRlck1vZGUobmV3TW9kZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5DaGVja2JveFRvVGV4dDpcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5DaGVja2JveFRvU2ltcGxlVGV4dDpcbiAgICAgICAgdGhpcy5fcmVhZE1vZGVsRm9yQ2hlY2tib3hUb1RleHQobmV3TW9kZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5DaGVja2JveFRvQmluYXJ5OlxuICAgICAgICB0aGlzLl9yZWFkTW9kZWxGb3JDaGVja2JveFRvQmluYXJ5KG5ld01vZGVsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMubW9kZXMuRGF0ZUZpZWxkOlxuICAgICAgICB0aGlzLl9yZWFkTW9kZWxGb3JEYXRlRmllbGQobmV3TW9kZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5EYXRlUmFuZ2VGaWVsZDpcbiAgICAgICAgdGhpcy5fcmVhZE1vZGVsRm9yRGF0ZVJhbmdlRmllbGQobmV3TW9kZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuX21vZGVsID0gbmV3TW9kZWw7XG4gICAgfVxuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvL01vZGVsIGNyZWF0aW9uIGZvciBhbGwgb2YgdGhlIGRpZmZlcmVudCBvcHRpb25zIGF2YWlsYWJsZS8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgcHJpdmF0ZSBfY3JlYXRlTW9kZWxGb3JGaWx0ZXJMaXN0KCk6IHZvaWQge1xuICAgIGxldCBmaWx0ZXJSYW5nZTogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAodGhpcy5jb2xsZWN0aW9uICE9PSBudWxsICYmIHRoaXMuY29sbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaCgodmlld01vZGVsOiBGaWx0ZXJJdGVtVmlld21vZGVsKSA9PiB7XG4gICAgICAgIGlmICh2aWV3TW9kZWwuY2hlY2tlZCkge1xuICAgICAgICAgIGZpbHRlclJhbmdlLnB1c2goYD89JyR7dmlld01vZGVsLmNvZGV9J2ApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChmaWx0ZXJSYW5nZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gZmlsdGVyUmFuZ2Uuam9pbignLCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlTW9kZWxGb3JTdHJpbmdDb2xsZWN0aW9uTGlzdCgpOiB2b2lkIHtcbiAgICBsZXQgZmlsdGVyUmFuZ2U6IGFueSA9IFtdO1xuICAgIHRoaXMuY29sbGVjdGlvbi5mb3JFYWNoKCh2aWV3TW9kZWw6IEZpbHRlckl0ZW1WaWV3bW9kZWwpID0+IHtcbiAgICAgIGlmICh2aWV3TW9kZWwuY2hlY2tlZCkge1xuICAgICAgICBpZiAodHlwZW9mIHZpZXdNb2RlbC5jb2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGZpbHRlclJhbmdlLnB1c2godmlld01vZGVsLmNvZGUudG9TdHJpbmcoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZpZXdNb2RlbC5jb2RlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGZpbHRlclJhbmdlLnB1c2godmlld01vZGVsLmNvZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGZpbHRlclJhbmdlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX21vZGVsID0gZmlsdGVyUmFuZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21vZGVsID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZU1vZGVsRm9yU2luZ2xlU2VsZWN0TGlzdCgpOiB2b2lkIHtcbiAgICBsZXQgZmlsdGVyU3RyaW5nOiBzdHJpbmcgPSBcIlwiO1xuICAgIHRoaXMuY29sbGVjdGlvbi5mb3JFYWNoKCh2aWV3TW9kZWw6IEZpbHRlckl0ZW1WaWV3bW9kZWwpID0+IHtcbiAgICAgIGlmICh2aWV3TW9kZWwuY2hlY2tlZCkge1xuICAgICAgICBmaWx0ZXJTdHJpbmcgPSB2aWV3TW9kZWwuY29kZS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChmaWx0ZXJTdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fbW9kZWwgPSBmaWx0ZXJTdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21vZGVsID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZU1vZGVsRm9yU2VsZWN0TGlzdFdpdGhOdW1iZXJPdXRwdXQoKTogdm9pZCB7XG4gICAgbGV0IGZpbHRlck51bWJlcjogbnVtYmVyID0gbnVsbDtcbiAgICB0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaCgodmlld01vZGVsOiBGaWx0ZXJJdGVtVmlld21vZGVsKSA9PiB7XG4gICAgICBpZiAodmlld01vZGVsLmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKGZpbHRlck51bWJlciA9PSBudWxsKSB7XG4gICAgICAgICAgZmlsdGVyTnVtYmVyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBmaWx0ZXJOdW1iZXIgKz0gTnVtYmVyKHZpZXdNb2RlbC5jb2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9tb2RlbCA9IGZpbHRlck51bWJlcjtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZU1vZGVsRm9yU2xpZGVyTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNsaWRlck1pbiA9ICEhdGhpcy5zbGlkZXJNaW4gPyB0aGlzLnNsaWRlck1pbiA6IHRoaXMuc2xpZGVyRGVmYXVsdE1pbjtcbiAgICB0aGlzLnNsaWRlck1heCA9ICEhdGhpcy5zbGlkZXJNYXggPyB0aGlzLnNsaWRlck1heCA6IHRoaXMuc2xpZGVyRGVmYXVsdE1heDtcblxuICAgIGxldCB0cnVlTG93ZXJCb3VuZCA9IE1hdGgubWluKHRoaXMuc2xpZGVyTWluLCB0aGlzLnNsaWRlck1heCk7XG4gICAgbGV0IHRydWVVcHBlckJvdW5kID0gTWF0aC5tYXgodGhpcy5zbGlkZXJNaW4sIHRoaXMuc2xpZGVyTWF4KTtcblxuICAgIHRoaXMuc2xpZGVyTWluID0gdHJ1ZUxvd2VyQm91bmQ7XG4gICAgdGhpcy5zbGlkZXJNYXggPSB0cnVlVXBwZXJCb3VuZDtcbiAgICB0aGlzLl9tb2RlbCA9IGAke3RydWVMb3dlckJvdW5kfSAtICR7dHJ1ZVVwcGVyQm91bmR9YDtcblxuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlTW9kZWxGb3JOdWxsYWJsZVNsaWRlck1vZGUoKTogdm9pZCB7XG5cbiAgICBpZiAodGhpcy5zbGlkZXJNaW4gJiYgdGhpcy5zbGlkZXJNYXgpIHtcbiAgICAgIGxldCB0cnVlTG93ZXJCb3VuZCA9IE1hdGgubWluKHRoaXMuc2xpZGVyTWluLCB0aGlzLnNsaWRlck1heCk7XG4gICAgICBsZXQgdHJ1ZVVwcGVyQm91bmQgPSBNYXRoLm1heCh0aGlzLnNsaWRlck1pbiwgdGhpcy5zbGlkZXJNYXgpO1xuXG4gICAgICB0aGlzLl9tb2RlbCA9IGAke3RydWVMb3dlckJvdW5kfSAtICR7dHJ1ZVVwcGVyQm91bmR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW9kZWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZU1vZGVsRm9yQ2hlY2tib3hUb1RleHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCkge1xuICAgICAgdGhpcy5fbW9kZWwgPSBcIj89J0onXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21vZGVsID0gXCI/PSdOJ1wiO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZU1vZGVsRm9yQ2hlY2tib3hUb1NpbXBsZVRleHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCkge1xuICAgICAgdGhpcy5fbW9kZWwgPSBcIkpcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW9kZWwgPSBcIk5cIjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVNb2RlbEZvckNoZWNrYm94VG9CaW5hcnkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCkge1xuICAgICAgdGhpcy5fbW9kZWwgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IDA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlTW9kZWxGb3JEYXRlRmllbGQoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChkYXRlKSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZVRvU3RyaW5nKGRhdGUpO1xuICAgICAgdGhpcy5fbW9kZWwgPSBgPz0nJHtmb3JtYXR0ZWREYXRlfSdgO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVNb2RlbEZvckRhdGVSYW5nZShkYXRlczogRGF0ZVtdKTogdm9pZCB7XG4gICAgaWYgKGRhdGVzKSB7XG4gICAgICBsZXQgc3RhcnREYXRlID0gZGF0ZXNbMF07XG4gICAgICBsZXQgZW5kRGF0ZSA9IGRhdGVzWzFdO1xuXG4gICAgICBjb25zdCBzdGFydERhdGVSZXF1ZXN0ID0gc3RhcnREYXRlID8gdGhpcy5fZm9ybWF0RGF0ZVRvU3RyaW5nKHN0YXJ0RGF0ZSkgOiAnJztcbiAgICAgIGNvbnN0IGVuZERhdGVSZXF1ZXN0ID0gZW5kRGF0ZSA/IHRoaXMuX2Zvcm1hdERhdGVUb1N0cmluZyhlbmREYXRlKSA6ICcnO1xuICAgICAgdGhpcy5fbW9kZWwgPSBgPz49XFwnJHtzdGFydERhdGVSZXF1ZXN0fVxcJyYgPzw9XFwnJHtlbmREYXRlUmVxdWVzdH1cXCdgO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Zvcm1hdERhdGVUb1N0cmluZyhkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBsZXQgZGF5ID0gZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGxldCBtb250aCA9IChkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgbGV0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICByZXR1cm4gYCR7ZGF5fS0ke21vbnRofS0ke3llYXJ9YDtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvL01vZGVsIHJlYWRpbmcgZm9yIGFsbCBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgYXZhaWxhYmxlLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIHByaXZhdGUgX3JlYWRNb2RlbEZvckZpbHRlckxpc3QoZmlsdGVyTW9kZWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBmaWx0ZXJMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBpdGVtc1RvQ2hlY2s6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5fdW5jaGVja0FsbCgpO1xuICAgIHRoaXMuX21vZGVsID0gZmlsdGVyTW9kZWw7XG5cbiAgICBpZiAoZmlsdGVyTW9kZWwgIT09IG51bGwgJiYgZmlsdGVyTW9kZWwgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZmlsdGVyTW9kZWwgPT09ICdzdHJpbmcnICYmIGZpbHRlck1vZGVsLmxlbmd0aCAhPSAwICYmIHRoaXMuY29sbGVjdGlvbiAhPT0gbnVsbCAmJiB0aGlzLmNvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsdGVyTGlzdCA9IGZpbHRlck1vZGVsLnNwbGl0KFwiLFwiKVxuICAgICAgZmlsdGVyTGlzdC5mb3JFYWNoKChmaWx0ZXI6IHN0cmluZykgPT4ge1xuICAgICAgICBpdGVtc1RvQ2hlY2sucHVzaChmaWx0ZXIuc3Vic3RyKDMsIGZpbHRlci5sZW5ndGggLSA0KSk7XG4gICAgICB9KTtcblxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9DaGVjaykge1xuICAgICAgICBsZXQgZmlsdGVyID0gdGhpcy5jb2xsZWN0aW9uLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmNvZGUudG9TdHJpbmcoKSA9PT0gaXRlbSk7XG4gICAgICAgIGlmIChmaWx0ZXIgIT09IG51bGwgJiYgZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmaWx0ZXIuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX21vZGVsID0gZmlsdGVyTW9kZWw7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIF9yZWFkTW9kZWxGb3JTaW5nbGVTZWxlY3RMaXN0KHNpbmdsZVNlbGVjdE1vZGVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLl91bmNoZWNrQWxsKCk7XG4gICAgdGhpcy5fbW9kZWwgPSBzaW5nbGVTZWxlY3RNb2RlbDtcblxuICAgIGlmIChzaW5nbGVTZWxlY3RNb2RlbCAhPT0gbnVsbCAmJiBzaW5nbGVTZWxlY3RNb2RlbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29sbGVjdGlvbiAhPT0gbnVsbCAmJiB0aGlzLmNvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IGZpbHRlciA9IHRoaXMuY29sbGVjdGlvbi5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC5jb2RlLnRvU3RyaW5nKCkgPT09IHNpbmdsZVNlbGVjdE1vZGVsKTtcbiAgICAgIGlmIChmaWx0ZXIgIT09IG51bGwgJiYgZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZmlsdGVyLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlYWRNb2RlbEZvclN0cmluZ0NvbGxlY3Rpb25MaXN0KGNvbGxlY3Rpb25Nb2RlbDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fdW5jaGVja0FsbCgpO1xuICAgIHRoaXMuX21vZGVsID0gY29sbGVjdGlvbk1vZGVsO1xuXG4gICAgaWYgKGNvbGxlY3Rpb25Nb2RlbCAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uTW9kZWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbGxlY3Rpb24gIT09IG51bGwgJiYgdGhpcy5jb2xsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29sbGVjdGlvbi5mb3JFYWNoKCh2aWV3TW9kZWw6IEZpbHRlckl0ZW1WaWV3bW9kZWwpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb2xsZWN0aW9uTW9kZWwuaW5kZXhPZih2aWV3TW9kZWwuY29kZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdmlld01vZGVsLmNoZWNrZWQgPSBjb2xsZWN0aW9uTW9kZWwuaW5kZXhPZih2aWV3TW9kZWwuY29kZS50b1N0cmluZygpKSA+IC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2xsZWN0aW9uTW9kZWwuaW5kZXhPZih2aWV3TW9kZWwuY29kZSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdmlld01vZGVsLmNoZWNrZWQgPSBjb2xsZWN0aW9uTW9kZWwuaW5kZXhPZih2aWV3TW9kZWwuY29kZSkgPiAtMTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVhZE1vZGVsRm9yU2VsZWN0TGlzdFdpdGhOdW1iZXJPdXRwdXQobnVtYmVyTW9kZWw6IG51bWJlcikge1xuICAgIHRoaXMuX3VuY2hlY2tBbGwoKTtcbiAgICB0aGlzLl9tb2RlbCA9IG51bWJlck1vZGVsO1xuXG4gICAgaWYgKG51bWJlck1vZGVsICE9PSBudWxsICYmIG51bWJlck1vZGVsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb2xsZWN0aW9uICE9PSBudWxsICYmIHRoaXMuY29sbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jb2xsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1Db2RlOiBudW1iZXIgPSBpdGVtLmNvZGUgYXMgbnVtYmVyO1xuICAgICAgICBjb25zdCBtb2RWYWx1ZSA9IChudW1iZXJNb2RlbCAlICgyICogaXRlbUNvZGUpKTtcbiAgICAgICAgaXRlbS5jaGVja2VkID0gKG1vZFZhbHVlID49IGl0ZW1Db2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91bmNoZWNrQWxsKCkge1xuICAgIGlmICh0aGlzLmNvbGxlY3Rpb24gIT09IG51bGwgJiYgdGhpcy5jb2xsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29sbGVjdGlvbi5mb3JFYWNoKG0gPT4ge1xuICAgICAgICBtLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlYWRNb2RlbEZvclNsaWRlck1vZGUoc2xpZGVyTW9kZWw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX21vZGVsID0gc2xpZGVyTW9kZWw7XG4gICAgaWYgKHNsaWRlck1vZGVsICE9PSB1bmRlZmluZWQgJiYgc2xpZGVyTW9kZWwgIT09IG51bGwpIHtcbiAgICAgIGxldCBzbGlkZXJJbnB1dENvbGxlY3Rpb24gPSBzbGlkZXJNb2RlbC5zcGxpdCgnIC0gJyk7XG4gICAgICB0aGlzLnNsaWRlck1pbiA9IHBhcnNlSW50KHNsaWRlcklucHV0Q29sbGVjdGlvblswXSk7XG4gICAgICB0aGlzLnNsaWRlck1heCA9IHBhcnNlSW50KHNsaWRlcklucHV0Q29sbGVjdGlvblsxXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2xpZGVyTWluID0gdGhpcy5zbGlkZXJEZWZhdWx0TWluO1xuICAgICAgdGhpcy5zbGlkZXJNYXggPSB0aGlzLnNsaWRlckRlZmF1bHRNYXg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVhZE1vZGVsRm9yQ2hlY2tib3hUb1RleHQoY2hlY2tib3hUb1RleHRNb2RlbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbW9kZWwgPSBjaGVja2JveFRvVGV4dE1vZGVsO1xuICAgIGlmIChjaGVja2JveFRvVGV4dE1vZGVsICE9PSB1bmRlZmluZWQgJiYgY2hlY2tib3hUb1RleHRNb2RlbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5jaGVja0JveFRvVGV4dE1vZGVsID0gKGNoZWNrYm94VG9UZXh0TW9kZWwuaW5kZXhPZignSicpID4gLTEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrQm94VG9UZXh0TW9kZWwgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZWFkTW9kZWxGb3JDaGVja2JveFRvQmluYXJ5KGNoZWNrYm94VG9CaW5hcnk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX21vZGVsID0gY2hlY2tib3hUb0JpbmFyeTtcbiAgICBpZiAoY2hlY2tib3hUb0JpbmFyeSAhPT0gdW5kZWZpbmVkICYmIGNoZWNrYm94VG9CaW5hcnkgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCA9IChjaGVja2JveFRvQmluYXJ5ID49IDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrQm94VG9UZXh0TW9kZWwgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZWFkTW9kZWxGb3JEYXRlRmllbGQoZGF0ZUZpZWxkTW9kZWw6IGFueSk6IHZvaWQge1xuICAgIC8vIEtlZXAgd2hhdGV2ZXIgY2FtZSBpbiBhcyB0aGUgXCJmaWx0ZXIgdmFsdWVcIiBmb3Igb3V0cHV0c1xuICAgIHRoaXMuX21vZGVsID0gZGF0ZUZpZWxkTW9kZWw7XG5cbiAgICBpZiAoIWRhdGVGaWVsZE1vZGVsKSB7XG4gICAgICB0aGlzLmRhdGVGaWVsZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRlRmllbGRNb2RlbCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHRoaXMuZGF0ZUZpZWxkVmFsdWUgPSBkYXRlRmllbGRNb2RlbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGVGaWVsZE1vZGVsID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gQWNjZXB0IFwiPz0nZGQtTU0teXl5eSdcIiwgXCJkZC1NTS15eXl5XCIsIG9yIFwieXl5eS1NTS1kZFwiXG4gICAgICBsZXQgcmF3ID0gZGF0ZUZpZWxkTW9kZWw7XG4gICAgICBjb25zdCB3cmFwcGVkID0gcmF3Lm1hdGNoKC9cXD89JyhcXGR7Mn0tXFxkezJ9LVxcZHs0fSknLyk7XG4gICAgICBpZiAod3JhcHBlZCkgcmF3ID0gd3JhcHBlZFsxXTtcblxuICAgICAgY29uc3QgZGRtbXl5eXkgPSAvXihcXGR7Mn0pLShcXGR7Mn0pLShcXGR7NH0pJC87XG4gICAgICBjb25zdCB5eXl5bW1kZCA9IC9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSkkLztcblxuICAgICAgaWYgKGRkbW15eXl5LnRlc3QocmF3KSkge1xuICAgICAgICBjb25zdCBbLCBkZCwgbW0sIHl5eXldID0gZGRtbXl5eXkuZXhlYyhyYXcpITtcbiAgICAgICAgdGhpcy5kYXRlRmllbGRWYWx1ZSA9IG5ldyBEYXRlKCt5eXl5LCArbW0gLSAxLCArZGQpO1xuICAgICAgfSBlbHNlIGlmICh5eXl5bW1kZC50ZXN0KHJhdykpIHtcbiAgICAgICAgY29uc3QgWywgeXl5eSwgbW0sIGRkXSA9IHl5eXltbWRkLmV4ZWMocmF3KSE7XG4gICAgICAgIHRoaXMuZGF0ZUZpZWxkVmFsdWUgPSBuZXcgRGF0ZSgreXl5eSwgK21tIC0gMSwgK2RkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0ZUZpZWxkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIF9yZWFkTW9kZWxGb3JEYXRlUmFuZ2VGaWVsZChkYXRlUmFuZ2VGaWVsZE1vZGVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tb2RlbCA9IGRhdGVSYW5nZUZpZWxkTW9kZWw7XG4gICAgaWYgKGRhdGVSYW5nZUZpZWxkTW9kZWwgIT09IHVuZGVmaW5lZCAmJiBkYXRlUmFuZ2VGaWVsZE1vZGVsICE9PSBudWxsKSB7XG4gICAgICBsZXQgZGF0ZUNvbGxlY3Rpb24gPSBkYXRlUmFuZ2VGaWVsZE1vZGVsLnNwbGl0KCcmJyk7XG5cbiAgICAgIGxldCBzdGFydFN0cmluZyA9IGRhdGVDb2xsZWN0aW9uWzBdLnRyaW0oKS5zdWJzdHIoNCwgZGF0ZUNvbGxlY3Rpb25bMF0ubGVuZ3RoIC0gNSk7XG4gICAgICBsZXQgZW5kU3RyaW5nID0gZGF0ZUNvbGxlY3Rpb25bMV0udHJpbSgpLnN1YnN0cig0LCBkYXRlQ29sbGVjdGlvblsxXS5sZW5ndGggLSA1KTtcblxuICAgICAgbGV0IHN0YXJ0RGF0ZUNvbXBvbmVudHMgPSBzdGFydFN0cmluZy5zcGxpdCgnLScpO1xuICAgICAgbGV0IGVuZERhdGVDb21wb25lbnRzID0gZW5kU3RyaW5nLnNwbGl0KCctJyk7XG5cbiAgICAgIHRoaXMuZGF0ZVJhbmdlU3RhcnQgPSBuZXcgRGF0ZShwYXJzZUludChzdGFydERhdGVDb21wb25lbnRzWzJdKSwgcGFyc2VJbnQoc3RhcnREYXRlQ29tcG9uZW50c1sxXSkgLSAxLCBwYXJzZUludChzdGFydERhdGVDb21wb25lbnRzWzBdKSk7XG4gICAgICB0aGlzLmRhdGVSYW5nZUVuZCA9IG5ldyBEYXRlKHBhcnNlSW50KGVuZERhdGVDb21wb25lbnRzWzJdKSwgcGFyc2VJbnQoZW5kRGF0ZUNvbXBvbmVudHNbMV0pIC0gMSwgcGFyc2VJbnQoZW5kRGF0ZUNvbXBvbmVudHNbMF0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRlUmFuZ2VTdGFydCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlRW5kID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5RGVmYXVsdEZvckZpbHRlckxpc3QoKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdFN0cmluZyA9IHRoaXMuZGVmYXVsdFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgY29kZXMgPSBkZWZhdWx0U3RyaW5nLnNwbGl0KCcsJykubWFwKGNvZGUgPT4gY29kZS50cmltKCkpO1xuXG4gICAgY29kZXMuZm9yRWFjaChjb2RlID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9jb2xsZWN0aW9uLmZpbmQoaSA9PiBpLmNvZGUudG9TdHJpbmcoKSA9PT0gY29kZSk7XG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICBpdGVtLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JGaWx0ZXJMaXN0KCk7XG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMuX21vZGVsKTtcbiAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlEZWZhdWx0Rm9yU3RyaW5nQ29sbGVjdGlvbkxpc3QoKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdFN0cmluZyA9IHRoaXMuZGVmYXVsdFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgY29kZXMgPSBkZWZhdWx0U3RyaW5nLnNwbGl0KCcsJykubWFwKGNvZGUgPT4gY29kZS50cmltKCkpO1xuXG4gICAgY29kZXMuZm9yRWFjaChjb2RlID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9jb2xsZWN0aW9uLmZpbmQoaSA9PiBpLmNvZGUudG9TdHJpbmcoKSA9PT0gY29kZSk7XG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICBpdGVtLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JTdHJpbmdDb2xsZWN0aW9uTGlzdCgpO1xuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLl9tb2RlbCk7XG4gICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5RGVmYXVsdEZvclNpbmdsZVNlbGVjdExpc3QoKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdENvZGUgPSB0aGlzLmRlZmF1bHRWYWx1ZS50b1N0cmluZygpLnRyaW0oKTtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5fY29sbGVjdGlvbi5maW5kKGkgPT4gaS5jb2RlLnRvU3RyaW5nKCkgPT09IGRlZmF1bHRDb2RlKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICBpdGVtLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JTaW5nbGVTZWxlY3RMaXN0KCk7XG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5fbW9kZWwpO1xuICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hcHBseURlZmF1bHRGb3JTZWxlY3RMaXN0V2l0aE51bWJlck91dHB1dCgpOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0TnVtYmVyID0gTnVtYmVyKHRoaXMuZGVmYXVsdFZhbHVlKTtcblxuICAgIGlmICghaXNOYU4oZGVmYXVsdE51bWJlcikgJiYgZGVmYXVsdE51bWJlciA+IDApIHtcbiAgICAgIC8vIERlY29kZSB0aGUgbnVtYmVyIHRvIGRldGVybWluZSB3aGljaCBpdGVtcyBzaG91bGQgYmUgY2hlY2tlZFxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuX2NvbGxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgaXRlbUNvZGU6IG51bWJlciA9IE51bWJlcihpdGVtLmNvZGUpO1xuICAgICAgICBjb25zdCBtb2RWYWx1ZSA9IChkZWZhdWx0TnVtYmVyICUgKDIgKiBpdGVtQ29kZSkpO1xuICAgICAgICBpdGVtLmNoZWNrZWQgPSAobW9kVmFsdWUgPj0gaXRlbUNvZGUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvclNlbGVjdExpc3RXaXRoTnVtYmVyT3V0cHV0KCk7XG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5fbW9kZWwpO1xuICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hcHBseURlZmF1bHRGb3JTbGlkZXIoKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdFN0cmluZyA9IHRoaXMuZGVmYXVsdFZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICBjb25zdCBbbWluLCBtYXhdID0gZGVmYXVsdFN0cmluZy5zcGxpdCgnLScpLm1hcChzID0+IE51bWJlcihzLnRyaW0oKSkpO1xuICAgIGlmICghaXNOYU4obWluKSAmJiAhaXNOYU4obWF4KSkge1xuICAgICAgdGhpcy5zbGlkZXJNaW4gPSBtaW47XG4gICAgICB0aGlzLnNsaWRlck1heCA9IG1heDtcbiAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yU2xpZGVyTW9kZSgpO1xuICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMuX21vZGVsKTtcbiAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlEZWZhdWx0Rm9yQ2hlY2tib3hUb1RleHQoKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdFN0cmluZyA9IHRoaXMuZGVmYXVsdFZhbHVlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtcbiAgICB0aGlzLmNoZWNrQm94VG9UZXh0TW9kZWwgPSAoZGVmYXVsdFN0cmluZyA9PT0gJ0onIHx8IGRlZmF1bHRTdHJpbmcgPT09ICdZJyB8fCBkZWZhdWx0U3RyaW5nID09PSAnVFJVRScpO1xuXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gdGhpcy5tb2Rlcy5DaGVja2JveFRvVGV4dCkge1xuICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JDaGVja2JveFRvVGV4dCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvckNoZWNrYm94VG9TaW1wbGVUZXh0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMuX21vZGVsKTtcbiAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlEZWZhdWx0Rm9yQ2hlY2tib3hUb0JpbmFyeSgpOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBOdW1iZXIodGhpcy5kZWZhdWx0VmFsdWUpO1xuICAgIHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCA9ICghaXNOYU4oZGVmYXVsdFZhbHVlKSAmJiBkZWZhdWx0VmFsdWUgPj0gMSk7XG5cbiAgICB0aGlzLl9jcmVhdGVNb2RlbEZvckNoZWNrYm94VG9CaW5hcnkoKTtcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5fbW9kZWwpO1xuICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseURlZmF1bHRGb3JEYXRlRmllbGQoKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdFN0cmluZyA9IHRoaXMuZGVmYXVsdFZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoZGVmYXVsdFN0cmluZy5tYXRjaCgvXlxcZHsyfS1cXGR7Mn0tXFxkezR9JC8pKSB7XG4gICAgICAvLyBkZC1NTS15eXl5IGZvcm1hdFxuICAgICAgY29uc3QgW2RkLCBtbSwgeXl5eV0gPSBkZWZhdWx0U3RyaW5nLnNwbGl0KCctJyk7XG4gICAgICB0aGlzLmRhdGVGaWVsZFZhbHVlID0gbmV3IERhdGUoK3l5eXksICttbSAtIDEsICtkZCk7XG4gICAgfSBlbHNlIGlmIChkZWZhdWx0U3RyaW5nLm1hdGNoKC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLykpIHtcbiAgICAgIC8vIHl5eXktTU0tZGQgZm9ybWF0XG4gICAgICBjb25zdCBbeXl5eSwgbW0sIGRkXSA9IGRlZmF1bHRTdHJpbmcuc3BsaXQoJy0nKTtcbiAgICAgIHRoaXMuZGF0ZUZpZWxkVmFsdWUgPSBuZXcgRGF0ZSgreXl5eSwgK21tIC0gMSwgK2RkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJ5IHBhcnNpbmcgYXMgc3RhbmRhcmQgZGF0ZVxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRlZmF1bHRTdHJpbmcpO1xuICAgICAgaWYgKCFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgdGhpcy5kYXRlRmllbGRWYWx1ZSA9IGRhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZUZpZWxkVmFsdWUpIHtcbiAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yRGF0ZUZpZWxkKHRoaXMuZGF0ZUZpZWxkVmFsdWUpO1xuICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMuX21vZGVsKTtcbiAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlEZWZhdWx0Rm9yRGF0ZVJhbmdlRmllbGQoKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdFN0cmluZyA9IHRoaXMuZGVmYXVsdFZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoZGVmYXVsdFN0cmluZy5pbmNsdWRlcygnJicpKSB7XG4gICAgICAvLyBGb3JtYXQ6IFwic3RhcnREYXRlICYgZW5kRGF0ZVwiXG4gICAgICBjb25zdCBbc3RhcnRTdHIsIGVuZFN0cl0gPSBkZWZhdWx0U3RyaW5nLnNwbGl0KCcmJykubWFwKHMgPT4gcy50cmltKCkpO1xuXG4gICAgICBjb25zdCBwYXJzZURhdGUgPSAoZGF0ZVN0cjogc3RyaW5nKTogRGF0ZSB8IG51bGwgPT4ge1xuICAgICAgICBpZiAoZGF0ZVN0ci5tYXRjaCgvXlxcZHsyfS1cXGR7Mn0tXFxkezR9JC8pKSB7XG4gICAgICAgICAgY29uc3QgW2RkLCBtbSwgeXl5eV0gPSBkYXRlU3RyLnNwbGl0KCctJyk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCt5eXl5LCArbW0gLSAxLCArZGQpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVTdHIubWF0Y2goL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvKSkge1xuICAgICAgICAgIGNvbnN0IFt5eXl5LCBtbSwgZGRdID0gZGF0ZVN0ci5zcGxpdCgnLScpO1xuICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgreXl5eSwgK21tIC0gMSwgK2RkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHBhcnNlRGF0ZShzdGFydFN0cik7XG4gICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VEYXRlKGVuZFN0cik7XG5cbiAgICAgIGlmIChzdGFydERhdGUgJiYgZW5kRGF0ZSkge1xuICAgICAgICB0aGlzLmRhdGVSYW5nZVN0YXJ0ID0gc3RhcnREYXRlO1xuICAgICAgICB0aGlzLmRhdGVSYW5nZUVuZCA9IGVuZERhdGU7XG4gICAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yRGF0ZVJhbmdlKFt0aGlzLmRhdGVSYW5nZVN0YXJ0LCB0aGlzLmRhdGVSYW5nZUVuZF0pO1xuICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5fbW9kZWwpO1xuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5RGVmYXVsdEZvclRleHRGaWVsZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9tb2RlbCA9IHRoaXMuZGVmYXVsdFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMuX21vZGVsKTtcbiAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlEZWZhdWx0Rm9yQ2hlY2tib3goKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdFN0cmluZyA9IHRoaXMuZGVmYXVsdFZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLl9tb2RlbCA9IChkZWZhdWx0U3RyaW5nID09PSAndHJ1ZScgfHwgZGVmYXVsdFN0cmluZyA9PT0gJzEnIHx8IGRlZmF1bHRTdHJpbmcgPT09ICd5ZXMnKTtcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5fbW9kZWwpO1xuICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseURlZmF1bHRGaWx0ZXJzKCk6IHZvaWQge1xuXG4gICAgY29uc3QgbW9kZVdpdGhvdXRDb2xsZWN0aW9uOiBib29sZWFuID0gdGhpcy5tb2RlID09PSB0aGlzLm1vZGVzLkRhdGVGaWVsZCB8fFxuICAgICAgdGhpcy5tb2RlID09PSB0aGlzLm1vZGVzLkRhdGVSYW5nZUZpZWxkIHx8XG4gICAgICB0aGlzLm1vZGUgPT09IHRoaXMubW9kZXMuU2xpZGVyO1xuXG4gICAgY29uc3QgY2FuQXBwbHlEZWZhdWx0czogYm9vbGVhbiA9IChtb2RlV2l0aG91dENvbGxlY3Rpb24gfHwgKCFtb2RlV2l0aG91dENvbGxlY3Rpb24gJiYgdGhpcy5jb2xsZWN0aW9uICYmIHRoaXMuY29sbGVjdGlvbi5sZW5ndGggPiAwKSkgJiZcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlICYmXG4gICAgICAhKHRoaXMuX21vZGVsPy5sZW5ndGggfHwgdGhpcy5fbW9kZWwgPiAwKTtcblxuICAgIGlmICghY2FuQXBwbHlEZWZhdWx0cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgICBjYXNlIHRoaXMubW9kZXMuRmlsdGVybGlzdDpcbiAgICAgICAgdGhpcy5fYXBwbHlEZWZhdWx0Rm9yRmlsdGVyTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5TZWxlY3RMaXN0V2l0aFN0cmluZ0NvbGxlY3Rpb25PdXRwdXQ6XG4gICAgICAgIHRoaXMuX2FwcGx5RGVmYXVsdEZvclN0cmluZ0NvbGxlY3Rpb25MaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLlNpbmdsZVNlbGVjdExpc3Q6XG4gICAgICAgIHRoaXMuX2FwcGx5RGVmYXVsdEZvclNpbmdsZVNlbGVjdExpc3QoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMubW9kZXMuU2VsZWN0TGlzdFdpdGhOdW1iZXJPdXRwdXQ6XG4gICAgICAgIHRoaXMuX2FwcGx5RGVmYXVsdEZvclNlbGVjdExpc3RXaXRoTnVtYmVyT3V0cHV0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLlNsaWRlcjpcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5OdWxsYWJsZVNsaWRlcjpcbiAgICAgICAgdGhpcy5fYXBwbHlEZWZhdWx0Rm9yU2xpZGVyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLkNoZWNrYm94VG9UZXh0OlxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkNoZWNrYm94VG9TaW1wbGVUZXh0OlxuICAgICAgICB0aGlzLl9hcHBseURlZmF1bHRGb3JDaGVja2JveFRvVGV4dCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5DaGVja2JveFRvQmluYXJ5OlxuICAgICAgICB0aGlzLl9hcHBseURlZmF1bHRGb3JDaGVja2JveFRvQmluYXJ5KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLkRhdGVGaWVsZDpcbiAgICAgICAgdGhpcy5fYXBwbHlEZWZhdWx0Rm9yRGF0ZUZpZWxkKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1vZGVzLkRhdGVSYW5nZUZpZWxkOlxuICAgICAgICB0aGlzLl9hcHBseURlZmF1bHRGb3JEYXRlUmFuZ2VGaWVsZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5UZXh0RmllbGQ6XG4gICAgICAgIHRoaXMuX2FwcGx5RGVmYXVsdEZvclRleHRGaWVsZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5DaGVja2JveDpcbiAgICAgICAgdGhpcy5fYXBwbHlEZWZhdWx0Rm9yQ2hlY2tib3goKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX2RlZmF1bHRTZXQgPSB0cnVlO1xuICB9XG59XG4iXX0=
|