@symphony-talent/component-library 3.38.1 → 3.38.4

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.
@@ -1,4 +1,4 @@
1
- import { Component, EventEmitter, Input, Output, } from '@angular/core';
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { Icons } from '../../../atoms/icon/icon.enum';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "../../../templates/modal-templates/two-column-modal-template/two-column-modal-template.component";
@@ -21,11 +21,12 @@ export class AdvertiseModalComponent {
21
21
  this.buttonClicked = new EventEmitter();
22
22
  this.closeButtonClicked = new EventEmitter();
23
23
  this.postingBoardChange = new EventEmitter();
24
+ this.keywordSearchChange = new EventEmitter();
24
25
  this.fundsInfo = {
25
26
  icon: Icons.CONFIRMATION,
26
27
  iconFirst: true,
27
28
  text: 'Sufficient Funds',
28
- iconColor: '#00D56B',
29
+ iconColor: '#00D56B'
29
30
  };
30
31
  this.payPerClickBoards = [];
31
32
  this.jobBoards = [];
@@ -40,7 +41,7 @@ export class AdvertiseModalComponent {
40
41
  title: 'Are you sure you want to abandon your order?',
41
42
  content: 'All selections will be deleted and you will have to start over.',
42
43
  btnPrimary: 'Continue Order',
43
- btnSecondary: 'Abandon Order',
44
+ btnSecondary: 'Abandon Order'
44
45
  };
45
46
  }
46
47
  ngOnChanges(changes) {
@@ -57,29 +58,29 @@ export class AdvertiseModalComponent {
57
58
  title: 'Pay-Per-Click',
58
59
  total: {
59
60
  textLeft: 'Cost Programatic Boards',
60
- textRight: `x (${this.jobCount}) Jobs = $0`,
61
- },
61
+ textRight: `x (${this.jobCount}) Jobs = $0`
62
+ }
62
63
  },
63
64
  {
64
65
  lineItems: [],
65
66
  title: 'Job Boards',
66
67
  total: {
67
68
  textLeft: 'Cost Job Boards',
68
- textRight: `x (${this.jobCount}) Jobs = $0`,
69
- },
70
- },
69
+ textRight: `x (${this.jobCount}) Jobs = $0`
70
+ }
71
+ }
71
72
  ],
72
73
  total: {
73
74
  textLeft: '',
74
75
  textRight: '$0',
75
- label: 'Total:',
76
- },
76
+ label: 'Total:'
77
+ }
77
78
  };
78
79
  }
79
80
  updateModalHeader() {
80
81
  let subTitleTooltip = '';
81
82
  let jobNumber = 1;
82
- this.model.jobsToAdvertise.forEach((job) => {
83
+ this.model.jobsToAdvertise.forEach(job => {
83
84
  subTitleTooltip = subTitleTooltip + `${job.jobTitle} [${job.id}]`;
84
85
  if (jobNumber != this.model.jobsToAdvertise.length) {
85
86
  subTitleTooltip = subTitleTooltip + '</br>';
@@ -91,11 +92,11 @@ export class AdvertiseModalComponent {
91
92
  text: `${this.model.jobsToAdvertise.length} Jobs`,
92
93
  iconFirst: false,
93
94
  icon: Icons.INFO,
94
- placement: 'right',
95
+ placement: 'right'
95
96
  };
96
97
  }
97
98
  onKeywordSearch(keyword) {
98
- this.filteredPostingBoardList = this.model.jobBoards.filter((board) => board.boardName.toLowerCase().includes(keyword.toLowerCase()));
99
+ this.keywordSearchChange.emit(keyword);
99
100
  }
100
101
  onButtonClick(text) {
101
102
  this.buttonClicked.emit(text);
@@ -109,31 +110,32 @@ export class AdvertiseModalComponent {
109
110
  addLineItem(invoiceAreaIndex, selectedBoard) {
110
111
  this.orderSummary.invoiceAreas[invoiceAreaIndex].lineItems.push({
111
112
  textLeft: selectedBoard.boardName,
112
- textRight: `$${selectedBoard.boardPrice}`,
113
+ textRight: `$${selectedBoard.boardPrice}`
113
114
  });
114
115
  }
115
116
  calculateInvoiceAreaTotal(invoiceAreaIndex) {
116
117
  let invoiceAreaTotal = 0;
117
- this.orderSummary.invoiceAreas[invoiceAreaIndex].lineItems.forEach((li) => {
118
+ this.orderSummary.invoiceAreas[invoiceAreaIndex].lineItems.forEach(li => {
118
119
  invoiceAreaTotal = invoiceAreaTotal + +li.textRight.replace('$', '');
119
120
  });
120
121
  this.orderSummary.invoiceAreas[invoiceAreaIndex].total.textRight = `x (${this.model.jobsToAdvertise.length}) Jobs = $${invoiceAreaTotal * this.model.jobsToAdvertise.length}`;
121
122
  return invoiceAreaTotal * this.model.jobsToAdvertise.length;
122
123
  }
123
124
  calculateOrderTotal(payPerClickAreaTotal, jobBoardAreaTotal) {
124
- const selectedJobBoards = this.model.jobBoards.filter((jb) => jb.isSelected).length;
125
+ const selectedJobBoards = this.model.jobBoards.filter(jb => jb.isSelected)
126
+ .length;
125
127
  const jobToAdvertiseCount = this.model.jobsToAdvertise.length;
126
128
  const orderSummaryText = `(${selectedJobBoards}) Boards x ${this.model.jobsToAdvertise.length} Jobs = (${selectedJobBoards * jobToAdvertiseCount}) Ads`;
127
129
  this.orderSummary.total = {
128
130
  label: 'Total:',
129
131
  textLeft: orderSummaryText,
130
- textRight: `$${payPerClickAreaTotal + jobBoardAreaTotal}`,
132
+ textRight: `$${payPerClickAreaTotal + jobBoardAreaTotal}`
131
133
  };
132
134
  }
133
135
  updateOrderSummary() {
134
136
  this.orderSummary.invoiceAreas[0].lineItems = [];
135
137
  this.orderSummary.invoiceAreas[1].lineItems = [];
136
- this.model.jobBoards.forEach((jb) => {
138
+ this.model.jobBoards.forEach(jb => {
137
139
  if (jb.isSelected) {
138
140
  if (jb.isPayPerClick) {
139
141
  this.addLineItem(0, jb);
@@ -146,7 +148,7 @@ export class AdvertiseModalComponent {
146
148
  const payPerClickAreaTotal = this.calculateInvoiceAreaTotal(0);
147
149
  const jobBoardAreaTotal = this.calculateInvoiceAreaTotal(1);
148
150
  this.calculateOrderTotal(payPerClickAreaTotal, jobBoardAreaTotal);
149
- if (this.model.jobBoards.filter((jb) => jb.isSelected).length === 0) {
151
+ if (this.model.jobBoards.filter(jb => jb.isSelected).length === 0) {
150
152
  this.isJobBoardNextButtonDisabled = true;
151
153
  }
152
154
  else {
@@ -156,10 +158,10 @@ export class AdvertiseModalComponent {
156
158
  }
157
159
  }
158
160
  AdvertiseModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: AdvertiseModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
159
- AdvertiseModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: AdvertiseModalComponent, selector: "symphony-advertise-modal", inputs: { model: "model" }, outputs: { buttonClicked: "buttonClicked", closeButtonClicked: "closeButtonClicked", postingBoardChange: "postingBoardChange" }, usesOnChanges: true, ngImport: i0, template: "<symphony-two-column-modal-template *ngIf=\"!model.navigation.showCancel\">\n <symphony-h4\n *ngIf=\"model.navigation.showJobBoardsSelection && !model.isLoading\"\n sfx-modal-title\n >Select Your Job Ad Buys</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.navigation.showOrderReview\" sfx-modal-title\n >Review you Job Ad Buys</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.navigation.showConfirmation\" sfx-modal-title\n >Confirmation of your Job Ad Buys</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.navigation.showProcessing\" sfx-modal-title\n >Processing Order...</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.isLoading\" sfx-modal-title\n >Loading Job Boards...</symphony-h4\n >\n <symphony-icon\n sfx-close-button\n [icon]=\"'si-close-modal'\"\n (clicked)=\"onCloseButtonClick()\"\n ></symphony-icon>\n <symphony-h5-with-icon sfx-modal-subtitle [model]=\"subTitle\">\n </symphony-h5-with-icon>\n\n <symphony-two-column-body-template\n *ngIf=\"!model.isLoading && model.navigation.showJobBoardsSelection\"\n [showHeader]=\"true\"\n sfx-modal-body-area\n >\n <symphony-input-text\n sfx-left-col-header\n [noMargin]=\"true\"\n [placeholder]=\"'Search Ad Boards'\"\n [icon]=\"'si-search-new'\"\n (textChange)=\"onKeywordSearch($event)\"\n >\n </symphony-input-text>\n <div class=\"right-col-header-inner\" sfx-right-col-header>\n <symphony-h5-with-icon\n sfx-right-col-header\n *ngIf=\"model.showFunds\"\n class=\"pull-right\"\n [model]=\"fundsInfo\"\n ></symphony-h5-with-icon>\n </div>\n <div sfx-left-column class=\"posting-boards sfx-pr-10\">\n <symphony-advertise-postingboard-selection-list\n [model]=\"filteredPostingBoardList\"\n (postingBoardChange)=\"onPostingBoardChange($event)\"\n ></symphony-advertise-postingboard-selection-list>\n </div>\n\n <symphony-order-summary\n sfx-right-column\n [model]=\"orderSummary\"\n ></symphony-order-summary>\n </symphony-two-column-body-template>\n\n <symphony-two-column-body-template\n *ngIf=\"!model.isLoading && model.navigation.showOrderReview\"\n sfx-modal-body-area\n >\n <div sfx-left-column class=\"posting-boards\">\n <symphony-advertise-order-review></symphony-advertise-order-review>\n </div>\n\n <symphony-order-summary\n sfx-right-column\n [model]=\"orderSummary\"\n ></symphony-order-summary>\n </symphony-two-column-body-template>\n\n <symphony-two-column-body-template\n *ngIf=\"!model.isLoading && model.navigation.showConfirmation\"\n sfx-modal-body-area\n >\n <symphony-order-summary\n sfx-left-column\n [model]=\"orderSummary\"\n ></symphony-order-summary>\n <div sfx-right-column class=\"posting-boards\">\n <div class=\"stage\">\n <div class=\"box bounce-7\">\n <div class=\"complete-container\">\n <symphony-h2>Your order is complete</symphony-h2>\n <div class=\"success-icon-spacing\">\n <symphony-icon\n [icon]=\"'si-confirmation'\"\n [iconColor]=\"'#00D56B'\"\n [size]=\"'50px'\"\n ></symphony-icon>\n </div>\n </div>\n </div>\n </div>\n </div>\n </symphony-two-column-body-template>\n\n <div\n *ngIf=\"!model.isLoading && model.navigation.showProcessing\"\n sfx-modal-body-area\n class=\"posting-boards sfx-p-30\"\n >\n <div class=\"processing-container\">\n <symphony-paragraph\n ><b>SmashFlyX</b> is submitting your order to your selected job boards.\n Some orders happen immediately, while others take a little more time.\n Check your order status if you don't recieve a confirmation in the next\n 24hours.</symphony-paragraph\n >\n </div>\n <div class=\"sfx-mt-80\">\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n </div>\n\n <div class=\"loader-container\" *ngIf=\"model.isLoading\" sfx-modal-body-area>\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n\n <symphony-button\n *ngIf=\"model.navigation.showJobBoardsSelection\"\n sfx-button-secondary\n [text]=\"'Cancel'\"\n [isSecondary]=\"true\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n <symphony-button\n *ngIf=\"model.navigation.showJobBoardsSelection\"\n sfx-button-primary\n [text]=\"'Review Order'\"\n [disabled]=\"isJobBoardNextButtonDisabled\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n\n <symphony-button\n *ngIf=\"model.navigation.showOrderReview\"\n sfx-button-back\n [text]=\"'Edit Order'\"\n [isSecondary]=\"true\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n <symphony-button\n *ngIf=\"model.navigation.showOrderReview\"\n sfx-button-secondary\n [text]=\"'Cancel'\"\n [isSecondary]=\"true\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n <symphony-button\n *ngIf=\"model.navigation.showOrderReview\"\n sfx-button-primary\n [text]=\"'Buy'\"\n [disabled]=\"false\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n\n <symphony-button\n *ngIf=\"model.navigation.showConfirmation\"\n sfx-button-primary\n [text]=\"'Finish & Close'\"\n [disabled]=\"false\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n</symphony-two-column-modal-template>\n<symphony-confirmation-modal\n *ngIf=\"!model.isLoading && model.navigation.showCancel\"\n (buttonClicked)=\"onButtonClick($event)\"\n (closeButtonClicked)=\"onCloseButtonClick()\"\n [model]=\"cancelContent\"\n>\n</symphony-confirmation-modal>\n", styles: [".right-col-header-inner{padding-top:10px}.posting-boards{height:400px;overflow-x:auto}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:#fff}::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#555}.loader-container{padding-top:246px;padding-bottom:245px}.complete-container{text-align:center;margin-top:25%}.success-icon-spacing{margin-top:25px}.processing-container{width:400px;text-align:justify}.stage{display:flex;height:240px;width:100%}.box{align-self:flex-end;animation-duration:2s;animation-iteration-count:1;height:200px;margin:0 auto;transform-origin:bottom;width:200px}.bounce-7{animation-name:bounce-7;animation-timing-function:cubic-bezier(.24,.82,.24,.82)}@keyframes bounce-7{0%{transform:scale(1) translateY(0)}10%{transform:scale(1.1,.9) translateY(0)}30%{transform:scale(.9,1.1) translateY(-15px)}50%{transform:scale(1.05,.95) translateY(0)}57%{transform:scale(1) translateY(-7px)}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}\n"], components: [{ type: i1.TwoColumnModalTemplateComponent, selector: "symphony-two-column-modal-template" }, { type: i2.H4Component, selector: "symphony-h4", inputs: ["text", "isSecondary"] }, { type: i3.IconComponent, selector: "symphony-icon", inputs: ["icon", "isSecondary", "size", "iconColor"], outputs: ["clicked"] }, { type: i4.H5WithIconComponent, selector: "symphony-h5-with-icon", inputs: ["model"] }, { type: i5.TwoColumnBodyTemplateComponent, selector: "symphony-two-column-body-template", inputs: ["showHeader"] }, { type: i6.InputTextComponent, selector: "symphony-input-text", inputs: ["placeholder", "icon", "label", "isInverse", "noMargin"], outputs: ["textChange"] }, { type: i7.AdvertisePostingboardSelectionListComponent, selector: "symphony-advertise-postingboard-selection-list", inputs: ["model"], outputs: ["postingBoardChange"] }, { type: i8.OrderSummaryComponent, selector: "symphony-order-summary", inputs: ["model"] }, { type: i9.AdvertiseOrderReviewComponent, selector: "symphony-advertise-order-review" }, { type: i10.H2Component, selector: "symphony-h2", inputs: ["text", "isSecondary"] }, { type: i11.ParagraphComponent, selector: "symphony-paragraph", inputs: ["text", "isSecondary"] }, { type: i12.SfxLoaderComponent, selector: "symphony-sfx-loader", inputs: ["leftStyle", "message"] }, { type: i13.ButtonComponent, selector: "symphony-button", inputs: ["text", "disabled", "isSecondary", "isInverse"], outputs: ["clicked"] }, { type: i14.ConfirmationModalComponent, selector: "symphony-confirmation-modal", inputs: ["model"], outputs: ["buttonClicked", "closeButtonClicked"] }], directives: [{ type: i15.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
161
+ AdvertiseModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: AdvertiseModalComponent, selector: "symphony-advertise-modal", inputs: { model: "model" }, outputs: { buttonClicked: "buttonClicked", closeButtonClicked: "closeButtonClicked", postingBoardChange: "postingBoardChange", keywordSearchChange: "keywordSearchChange" }, usesOnChanges: true, ngImport: i0, template: "<symphony-two-column-modal-template *ngIf=\"!model.navigation.showCancel\">\n <symphony-h4\n *ngIf=\"model.navigation.showJobBoardsSelection && !model.isLoading\"\n sfx-modal-title\n >Select Your Job Ad Buys</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.navigation.showOrderReview\" sfx-modal-title\n >Review you Job Ad Buys</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.navigation.showConfirmation\" sfx-modal-title\n >Confirmation of your Job Ad Buys</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.navigation.showProcessing\" sfx-modal-title\n >Processing Order...</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.isLoading\" sfx-modal-title\n >Loading Job Boards...</symphony-h4\n >\n <symphony-icon\n sfx-close-button\n [icon]=\"'si-close-modal'\"\n (clicked)=\"onCloseButtonClick()\"\n ></symphony-icon>\n <symphony-h5-with-icon sfx-modal-subtitle [model]=\"subTitle\">\n </symphony-h5-with-icon>\n\n <symphony-two-column-body-template\n *ngIf=\"!model.isLoading && model.navigation.showJobBoardsSelection\"\n [showHeader]=\"true\"\n sfx-modal-body-area\n >\n <symphony-input-text\n sfx-left-col-header\n [noMargin]=\"true\"\n [placeholder]=\"'Search Ad Boards'\"\n [icon]=\"'si-search-new'\"\n (textChange)=\"onKeywordSearch($event)\"\n >\n </symphony-input-text>\n <div class=\"right-col-header-inner\" sfx-right-col-header>\n <symphony-h5-with-icon\n sfx-right-col-header\n *ngIf=\"model.showFunds\"\n class=\"pull-right\"\n [model]=\"fundsInfo\"\n ></symphony-h5-with-icon>\n </div>\n <div sfx-left-column class=\"posting-boards sfx-pr-10\">\n <symphony-advertise-postingboard-selection-list\n [model]=\"model.jobBoards\"\n (postingBoardChange)=\"onPostingBoardChange($event)\"\n ></symphony-advertise-postingboard-selection-list>\n </div>\n\n <symphony-order-summary\n sfx-right-column\n [model]=\"orderSummary\"\n ></symphony-order-summary>\n </symphony-two-column-body-template>\n\n <symphony-two-column-body-template\n *ngIf=\"!model.isLoading && model.navigation.showOrderReview\"\n sfx-modal-body-area\n >\n <div sfx-left-column class=\"posting-boards\">\n <symphony-advertise-order-review></symphony-advertise-order-review>\n </div>\n\n <symphony-order-summary\n sfx-right-column\n [model]=\"orderSummary\"\n ></symphony-order-summary>\n </symphony-two-column-body-template>\n\n <symphony-two-column-body-template\n *ngIf=\"!model.isLoading && model.navigation.showConfirmation\"\n sfx-modal-body-area\n >\n <symphony-order-summary\n sfx-left-column\n [model]=\"orderSummary\"\n ></symphony-order-summary>\n <div sfx-right-column class=\"posting-boards\">\n <div class=\"stage\">\n <div class=\"box bounce-7\">\n <div class=\"complete-container\">\n <symphony-h2>Your order is complete</symphony-h2>\n <div class=\"success-icon-spacing\">\n <symphony-icon\n [icon]=\"'si-confirmation'\"\n [iconColor]=\"'#00D56B'\"\n [size]=\"'50px'\"\n ></symphony-icon>\n </div>\n </div>\n </div>\n </div>\n </div>\n </symphony-two-column-body-template>\n\n <div\n *ngIf=\"!model.isLoading && model.navigation.showProcessing\"\n sfx-modal-body-area\n class=\"posting-boards sfx-p-30\"\n >\n <div class=\"processing-container\">\n <symphony-paragraph\n ><b>SmashFlyX</b> is submitting your order to your selected job boards.\n Some orders happen immediately, while others take a little more time.\n Check your order status if you don't recieve a confirmation in the next\n 24hours.</symphony-paragraph\n >\n </div>\n <div class=\"sfx-mt-80\">\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n </div>\n\n <div class=\"loader-container\" *ngIf=\"model.isLoading\" sfx-modal-body-area>\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n\n <symphony-button\n *ngIf=\"model.navigation.showJobBoardsSelection\"\n sfx-button-secondary\n [text]=\"'Cancel'\"\n [isSecondary]=\"true\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n <symphony-button\n *ngIf=\"model.navigation.showJobBoardsSelection\"\n sfx-button-primary\n [text]=\"'Review Order'\"\n [disabled]=\"isJobBoardNextButtonDisabled\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n\n <symphony-button\n *ngIf=\"model.navigation.showOrderReview\"\n sfx-button-back\n [text]=\"'Edit Order'\"\n [isSecondary]=\"true\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n <symphony-button\n *ngIf=\"model.navigation.showOrderReview\"\n sfx-button-secondary\n [text]=\"'Cancel'\"\n [isSecondary]=\"true\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n <symphony-button\n *ngIf=\"model.navigation.showOrderReview\"\n sfx-button-primary\n [text]=\"'Buy'\"\n [disabled]=\"false\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n\n <symphony-button\n *ngIf=\"model.navigation.showConfirmation\"\n sfx-button-primary\n [text]=\"'Finish & Close'\"\n [disabled]=\"false\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n</symphony-two-column-modal-template>\n<symphony-confirmation-modal\n *ngIf=\"!model.isLoading && model.navigation.showCancel\"\n (buttonClicked)=\"onButtonClick($event)\"\n (closeButtonClicked)=\"onCloseButtonClick()\"\n [model]=\"cancelContent\"\n>\n</symphony-confirmation-modal>\n", styles: [".right-col-header-inner{padding-top:10px}.posting-boards{height:400px;overflow-x:auto}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:#fff}::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#555}.loader-container{padding-top:246px;padding-bottom:245px}.complete-container{text-align:center;margin-top:25%}.success-icon-spacing{margin-top:25px}.processing-container{width:400px;text-align:justify}.stage{display:flex;height:240px;width:100%}.box{align-self:flex-end;animation-duration:2s;animation-iteration-count:1;height:200px;margin:0 auto;transform-origin:bottom;width:200px}.bounce-7{animation-name:bounce-7;animation-timing-function:cubic-bezier(.24,.82,.24,.82)}@keyframes bounce-7{0%{transform:scale(1) translateY(0)}10%{transform:scale(1.1,.9) translateY(0)}30%{transform:scale(.9,1.1) translateY(-15px)}50%{transform:scale(1.05,.95) translateY(0)}57%{transform:scale(1) translateY(-7px)}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}\n"], components: [{ type: i1.TwoColumnModalTemplateComponent, selector: "symphony-two-column-modal-template" }, { type: i2.H4Component, selector: "symphony-h4", inputs: ["text", "isSecondary"] }, { type: i3.IconComponent, selector: "symphony-icon", inputs: ["icon", "isSecondary", "size", "iconColor"], outputs: ["clicked"] }, { type: i4.H5WithIconComponent, selector: "symphony-h5-with-icon", inputs: ["model"] }, { type: i5.TwoColumnBodyTemplateComponent, selector: "symphony-two-column-body-template", inputs: ["showHeader"] }, { type: i6.InputTextComponent, selector: "symphony-input-text", inputs: ["placeholder", "icon", "label", "isInverse", "noMargin"], outputs: ["textChange"] }, { type: i7.AdvertisePostingboardSelectionListComponent, selector: "symphony-advertise-postingboard-selection-list", inputs: ["model"], outputs: ["postingBoardChange"] }, { type: i8.OrderSummaryComponent, selector: "symphony-order-summary", inputs: ["model"] }, { type: i9.AdvertiseOrderReviewComponent, selector: "symphony-advertise-order-review" }, { type: i10.H2Component, selector: "symphony-h2", inputs: ["text", "isSecondary"] }, { type: i11.ParagraphComponent, selector: "symphony-paragraph", inputs: ["text", "isSecondary"] }, { type: i12.SfxLoaderComponent, selector: "symphony-sfx-loader", inputs: ["leftStyle", "message"] }, { type: i13.ButtonComponent, selector: "symphony-button", inputs: ["text", "disabled", "isSecondary", "isInverse"], outputs: ["clicked"] }, { type: i14.ConfirmationModalComponent, selector: "symphony-confirmation-modal", inputs: ["model"], outputs: ["buttonClicked", "closeButtonClicked"] }], directives: [{ type: i15.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
160
162
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: AdvertiseModalComponent, decorators: [{
161
163
  type: Component,
162
- args: [{ selector: 'symphony-advertise-modal', template: "<symphony-two-column-modal-template *ngIf=\"!model.navigation.showCancel\">\n <symphony-h4\n *ngIf=\"model.navigation.showJobBoardsSelection && !model.isLoading\"\n sfx-modal-title\n >Select Your Job Ad Buys</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.navigation.showOrderReview\" sfx-modal-title\n >Review you Job Ad Buys</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.navigation.showConfirmation\" sfx-modal-title\n >Confirmation of your Job Ad Buys</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.navigation.showProcessing\" sfx-modal-title\n >Processing Order...</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.isLoading\" sfx-modal-title\n >Loading Job Boards...</symphony-h4\n >\n <symphony-icon\n sfx-close-button\n [icon]=\"'si-close-modal'\"\n (clicked)=\"onCloseButtonClick()\"\n ></symphony-icon>\n <symphony-h5-with-icon sfx-modal-subtitle [model]=\"subTitle\">\n </symphony-h5-with-icon>\n\n <symphony-two-column-body-template\n *ngIf=\"!model.isLoading && model.navigation.showJobBoardsSelection\"\n [showHeader]=\"true\"\n sfx-modal-body-area\n >\n <symphony-input-text\n sfx-left-col-header\n [noMargin]=\"true\"\n [placeholder]=\"'Search Ad Boards'\"\n [icon]=\"'si-search-new'\"\n (textChange)=\"onKeywordSearch($event)\"\n >\n </symphony-input-text>\n <div class=\"right-col-header-inner\" sfx-right-col-header>\n <symphony-h5-with-icon\n sfx-right-col-header\n *ngIf=\"model.showFunds\"\n class=\"pull-right\"\n [model]=\"fundsInfo\"\n ></symphony-h5-with-icon>\n </div>\n <div sfx-left-column class=\"posting-boards sfx-pr-10\">\n <symphony-advertise-postingboard-selection-list\n [model]=\"filteredPostingBoardList\"\n (postingBoardChange)=\"onPostingBoardChange($event)\"\n ></symphony-advertise-postingboard-selection-list>\n </div>\n\n <symphony-order-summary\n sfx-right-column\n [model]=\"orderSummary\"\n ></symphony-order-summary>\n </symphony-two-column-body-template>\n\n <symphony-two-column-body-template\n *ngIf=\"!model.isLoading && model.navigation.showOrderReview\"\n sfx-modal-body-area\n >\n <div sfx-left-column class=\"posting-boards\">\n <symphony-advertise-order-review></symphony-advertise-order-review>\n </div>\n\n <symphony-order-summary\n sfx-right-column\n [model]=\"orderSummary\"\n ></symphony-order-summary>\n </symphony-two-column-body-template>\n\n <symphony-two-column-body-template\n *ngIf=\"!model.isLoading && model.navigation.showConfirmation\"\n sfx-modal-body-area\n >\n <symphony-order-summary\n sfx-left-column\n [model]=\"orderSummary\"\n ></symphony-order-summary>\n <div sfx-right-column class=\"posting-boards\">\n <div class=\"stage\">\n <div class=\"box bounce-7\">\n <div class=\"complete-container\">\n <symphony-h2>Your order is complete</symphony-h2>\n <div class=\"success-icon-spacing\">\n <symphony-icon\n [icon]=\"'si-confirmation'\"\n [iconColor]=\"'#00D56B'\"\n [size]=\"'50px'\"\n ></symphony-icon>\n </div>\n </div>\n </div>\n </div>\n </div>\n </symphony-two-column-body-template>\n\n <div\n *ngIf=\"!model.isLoading && model.navigation.showProcessing\"\n sfx-modal-body-area\n class=\"posting-boards sfx-p-30\"\n >\n <div class=\"processing-container\">\n <symphony-paragraph\n ><b>SmashFlyX</b> is submitting your order to your selected job boards.\n Some orders happen immediately, while others take a little more time.\n Check your order status if you don't recieve a confirmation in the next\n 24hours.</symphony-paragraph\n >\n </div>\n <div class=\"sfx-mt-80\">\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n </div>\n\n <div class=\"loader-container\" *ngIf=\"model.isLoading\" sfx-modal-body-area>\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n\n <symphony-button\n *ngIf=\"model.navigation.showJobBoardsSelection\"\n sfx-button-secondary\n [text]=\"'Cancel'\"\n [isSecondary]=\"true\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n <symphony-button\n *ngIf=\"model.navigation.showJobBoardsSelection\"\n sfx-button-primary\n [text]=\"'Review Order'\"\n [disabled]=\"isJobBoardNextButtonDisabled\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n\n <symphony-button\n *ngIf=\"model.navigation.showOrderReview\"\n sfx-button-back\n [text]=\"'Edit Order'\"\n [isSecondary]=\"true\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n <symphony-button\n *ngIf=\"model.navigation.showOrderReview\"\n sfx-button-secondary\n [text]=\"'Cancel'\"\n [isSecondary]=\"true\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n <symphony-button\n *ngIf=\"model.navigation.showOrderReview\"\n sfx-button-primary\n [text]=\"'Buy'\"\n [disabled]=\"false\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n\n <symphony-button\n *ngIf=\"model.navigation.showConfirmation\"\n sfx-button-primary\n [text]=\"'Finish & Close'\"\n [disabled]=\"false\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n</symphony-two-column-modal-template>\n<symphony-confirmation-modal\n *ngIf=\"!model.isLoading && model.navigation.showCancel\"\n (buttonClicked)=\"onButtonClick($event)\"\n (closeButtonClicked)=\"onCloseButtonClick()\"\n [model]=\"cancelContent\"\n>\n</symphony-confirmation-modal>\n", styles: [".right-col-header-inner{padding-top:10px}.posting-boards{height:400px;overflow-x:auto}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:#fff}::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#555}.loader-container{padding-top:246px;padding-bottom:245px}.complete-container{text-align:center;margin-top:25%}.success-icon-spacing{margin-top:25px}.processing-container{width:400px;text-align:justify}.stage{display:flex;height:240px;width:100%}.box{align-self:flex-end;animation-duration:2s;animation-iteration-count:1;height:200px;margin:0 auto;transform-origin:bottom;width:200px}.bounce-7{animation-name:bounce-7;animation-timing-function:cubic-bezier(.24,.82,.24,.82)}@keyframes bounce-7{0%{transform:scale(1) translateY(0)}10%{transform:scale(1.1,.9) translateY(0)}30%{transform:scale(.9,1.1) translateY(-15px)}50%{transform:scale(1.05,.95) translateY(0)}57%{transform:scale(1) translateY(-7px)}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}\n"] }]
164
+ args: [{ selector: 'symphony-advertise-modal', template: "<symphony-two-column-modal-template *ngIf=\"!model.navigation.showCancel\">\n <symphony-h4\n *ngIf=\"model.navigation.showJobBoardsSelection && !model.isLoading\"\n sfx-modal-title\n >Select Your Job Ad Buys</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.navigation.showOrderReview\" sfx-modal-title\n >Review you Job Ad Buys</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.navigation.showConfirmation\" sfx-modal-title\n >Confirmation of your Job Ad Buys</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.navigation.showProcessing\" sfx-modal-title\n >Processing Order...</symphony-h4\n >\n <symphony-h4 *ngIf=\"model.isLoading\" sfx-modal-title\n >Loading Job Boards...</symphony-h4\n >\n <symphony-icon\n sfx-close-button\n [icon]=\"'si-close-modal'\"\n (clicked)=\"onCloseButtonClick()\"\n ></symphony-icon>\n <symphony-h5-with-icon sfx-modal-subtitle [model]=\"subTitle\">\n </symphony-h5-with-icon>\n\n <symphony-two-column-body-template\n *ngIf=\"!model.isLoading && model.navigation.showJobBoardsSelection\"\n [showHeader]=\"true\"\n sfx-modal-body-area\n >\n <symphony-input-text\n sfx-left-col-header\n [noMargin]=\"true\"\n [placeholder]=\"'Search Ad Boards'\"\n [icon]=\"'si-search-new'\"\n (textChange)=\"onKeywordSearch($event)\"\n >\n </symphony-input-text>\n <div class=\"right-col-header-inner\" sfx-right-col-header>\n <symphony-h5-with-icon\n sfx-right-col-header\n *ngIf=\"model.showFunds\"\n class=\"pull-right\"\n [model]=\"fundsInfo\"\n ></symphony-h5-with-icon>\n </div>\n <div sfx-left-column class=\"posting-boards sfx-pr-10\">\n <symphony-advertise-postingboard-selection-list\n [model]=\"model.jobBoards\"\n (postingBoardChange)=\"onPostingBoardChange($event)\"\n ></symphony-advertise-postingboard-selection-list>\n </div>\n\n <symphony-order-summary\n sfx-right-column\n [model]=\"orderSummary\"\n ></symphony-order-summary>\n </symphony-two-column-body-template>\n\n <symphony-two-column-body-template\n *ngIf=\"!model.isLoading && model.navigation.showOrderReview\"\n sfx-modal-body-area\n >\n <div sfx-left-column class=\"posting-boards\">\n <symphony-advertise-order-review></symphony-advertise-order-review>\n </div>\n\n <symphony-order-summary\n sfx-right-column\n [model]=\"orderSummary\"\n ></symphony-order-summary>\n </symphony-two-column-body-template>\n\n <symphony-two-column-body-template\n *ngIf=\"!model.isLoading && model.navigation.showConfirmation\"\n sfx-modal-body-area\n >\n <symphony-order-summary\n sfx-left-column\n [model]=\"orderSummary\"\n ></symphony-order-summary>\n <div sfx-right-column class=\"posting-boards\">\n <div class=\"stage\">\n <div class=\"box bounce-7\">\n <div class=\"complete-container\">\n <symphony-h2>Your order is complete</symphony-h2>\n <div class=\"success-icon-spacing\">\n <symphony-icon\n [icon]=\"'si-confirmation'\"\n [iconColor]=\"'#00D56B'\"\n [size]=\"'50px'\"\n ></symphony-icon>\n </div>\n </div>\n </div>\n </div>\n </div>\n </symphony-two-column-body-template>\n\n <div\n *ngIf=\"!model.isLoading && model.navigation.showProcessing\"\n sfx-modal-body-area\n class=\"posting-boards sfx-p-30\"\n >\n <div class=\"processing-container\">\n <symphony-paragraph\n ><b>SmashFlyX</b> is submitting your order to your selected job boards.\n Some orders happen immediately, while others take a little more time.\n Check your order status if you don't recieve a confirmation in the next\n 24hours.</symphony-paragraph\n >\n </div>\n <div class=\"sfx-mt-80\">\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n </div>\n\n <div class=\"loader-container\" *ngIf=\"model.isLoading\" sfx-modal-body-area>\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n\n <symphony-button\n *ngIf=\"model.navigation.showJobBoardsSelection\"\n sfx-button-secondary\n [text]=\"'Cancel'\"\n [isSecondary]=\"true\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n <symphony-button\n *ngIf=\"model.navigation.showJobBoardsSelection\"\n sfx-button-primary\n [text]=\"'Review Order'\"\n [disabled]=\"isJobBoardNextButtonDisabled\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n\n <symphony-button\n *ngIf=\"model.navigation.showOrderReview\"\n sfx-button-back\n [text]=\"'Edit Order'\"\n [isSecondary]=\"true\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n <symphony-button\n *ngIf=\"model.navigation.showOrderReview\"\n sfx-button-secondary\n [text]=\"'Cancel'\"\n [isSecondary]=\"true\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n <symphony-button\n *ngIf=\"model.navigation.showOrderReview\"\n sfx-button-primary\n [text]=\"'Buy'\"\n [disabled]=\"false\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n\n <symphony-button\n *ngIf=\"model.navigation.showConfirmation\"\n sfx-button-primary\n [text]=\"'Finish & Close'\"\n [disabled]=\"false\"\n [isInverse]=\"true\"\n (clicked)=\"onButtonClick($event)\"\n ></symphony-button>\n</symphony-two-column-modal-template>\n<symphony-confirmation-modal\n *ngIf=\"!model.isLoading && model.navigation.showCancel\"\n (buttonClicked)=\"onButtonClick($event)\"\n (closeButtonClicked)=\"onCloseButtonClick()\"\n [model]=\"cancelContent\"\n>\n</symphony-confirmation-modal>\n", styles: [".right-col-header-inner{padding-top:10px}.posting-boards{height:400px;overflow-x:auto}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:#fff}::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#555}.loader-container{padding-top:246px;padding-bottom:245px}.complete-container{text-align:center;margin-top:25%}.success-icon-spacing{margin-top:25px}.processing-container{width:400px;text-align:justify}.stage{display:flex;height:240px;width:100%}.box{align-self:flex-end;animation-duration:2s;animation-iteration-count:1;height:200px;margin:0 auto;transform-origin:bottom;width:200px}.bounce-7{animation-name:bounce-7;animation-timing-function:cubic-bezier(.24,.82,.24,.82)}@keyframes bounce-7{0%{transform:scale(1) translateY(0)}10%{transform:scale(1.1,.9) translateY(0)}30%{transform:scale(.9,1.1) translateY(-15px)}50%{transform:scale(1.05,.95) translateY(0)}57%{transform:scale(1) translateY(-7px)}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}\n"] }]
163
165
  }], ctorParameters: function () { return []; }, propDecorators: { model: [{
164
166
  type: Input
165
167
  }], buttonClicked: [{
@@ -168,5 +170,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImpor
168
170
  type: Output
169
171
  }], postingBoardChange: [{
170
172
  type: Output
173
+ }], keywordSearchChange: [{
174
+ type: Output
171
175
  }] } });
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2ZXJ0aXNlLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvcGFnZXMvbW9kYWxzL2FkdmVydGlzZS1tb2RhbC9hZHZlcnRpc2UtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9wYWdlcy9tb2RhbHMvYWR2ZXJ0aXNlLW1vZGFsL2FkdmVydGlzZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFldEQsTUFBTSxPQUFPLHVCQUF1QjtJQTBCbEM7UUF2QlUsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzNDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDaEQsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBRTVDLENBQUM7UUFLRyxjQUFTLEdBQW9CO1lBQ2xDLElBQUksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUN4QixTQUFTLEVBQUUsSUFBSTtZQUNmLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztRQUdLLHNCQUFpQixHQUFtQixFQUFFLENBQUM7UUFDdkMsY0FBUyxHQUFtQixFQUFFLENBQUM7UUFDL0IsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixlQUFVLEdBQVcsRUFBRSxDQUFDO0lBR2hCLENBQUM7SUFFaEIsUUFBUTtRQUNOLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsS0FBSyxFQUFFLDhDQUE4QztZQUNyRCxPQUFPLEVBQ0wsaUVBQWlFO1lBQ25FLFVBQVUsRUFBRSxnQkFBZ0I7WUFDNUIsWUFBWSxFQUFFLGVBQWU7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ3ZELENBQUM7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDbEIsS0FBSyxFQUFFLFlBQVk7WUFDbkIsWUFBWSxFQUFFO2dCQUNaO29CQUNFLFNBQVMsRUFBRSxFQUFFO29CQUNiLEtBQUssRUFBRSxlQUFlO29CQUN0QixLQUFLLEVBQUU7d0JBQ0wsUUFBUSxFQUFFLHlCQUF5Qjt3QkFDbkMsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDLFFBQVEsYUFBYTtxQkFDNUM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsS0FBSyxFQUFFLFlBQVk7b0JBQ25CLEtBQUssRUFBRTt3QkFDTCxRQUFRLEVBQUUsaUJBQWlCO3dCQUMzQixTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxhQUFhO3FCQUM1QztpQkFDRjthQUNGO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLFFBQVEsRUFBRSxFQUFFO2dCQUNaLFNBQVMsRUFBRSxJQUFJO2dCQUNmLEtBQUssRUFBRSxRQUFRO2FBQ2hCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLGVBQWUsR0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3pDLGVBQWUsR0FBRyxlQUFlLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQztZQUNsRSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xELGVBQWUsR0FBRyxlQUFlLEdBQUcsT0FBTyxDQUFDO2FBQzdDO1lBQ0QsU0FBUyxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxXQUFXLEVBQUUsZUFBZTtZQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLE9BQU87WUFDakQsU0FBUyxFQUFFLEtBQUs7WUFDaEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLFNBQVMsRUFBRSxPQUFPO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQWU7UUFDN0IsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3BFLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUM5RCxDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFZO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxhQUEwQztRQUM3RCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVyxDQUNULGdCQUF3QixFQUN4QixhQUEwQztRQUUxQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDOUQsUUFBUSxFQUFFLGFBQWEsQ0FBQyxTQUFTO1lBQ2pDLFNBQVMsRUFBRSxJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUU7U0FDMUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHlCQUF5QixDQUFDLGdCQUF3QjtRQUNoRCxJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUN4RSxnQkFBZ0IsR0FBRyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxNQUNqRSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUM3QixhQUFhLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BFLE9BQU8sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO0lBQzlELENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxvQkFBNEIsRUFBRSxpQkFBeUI7UUFDekUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQ25ELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUN0QixDQUFDLE1BQU0sQ0FBQztRQUVULE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBRTlELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxpQkFBaUIsY0FDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFDN0IsWUFBWSxpQkFBaUIsR0FBRyxtQkFBbUIsT0FBTyxDQUFDO1FBRTNELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHO1lBQ3hCLEtBQUssRUFBRSxRQUFRO1lBQ2YsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixTQUFTLEVBQUUsSUFBSSxvQkFBb0IsR0FBRyxpQkFBaUIsRUFBRTtTQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFO2dCQUNqQixJQUFJLEVBQUUsQ0FBQyxhQUFhLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2lCQUN6QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDekI7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDbEUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ25FLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7U0FDMUM7YUFBTTtZQUNMLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxLQUFLLENBQUM7U0FDM0M7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDOztvSEE5S1UsdUJBQXVCO3dHQUF2Qix1QkFBdUIsa1BDekJwQyw4dUxBb0xBOzJGRDNKYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UsMEJBQTBCOzBFQUszQixLQUFLO3NCQUFiLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJY29ucyB9IGZyb20gJy4uLy4uLy4uL2F0b21zL2ljb24vaWNvbi5lbnVtJztcbmltcG9ydCB7IE9yZGVyU3VtbWFyeU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vb3JnYW5pc21zL29yZGVyLXN1bW1hcnkvb3JkZXItc3VtbWFyeS5tb2RlbCc7XG5pbXBvcnQgeyBINVdpdGhJY29uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2xlY3VsZXMvaDUtd2l0aC1pY29uL2g1LXdpdGgtaWNvbi5tb2RlbCc7XG5pbXBvcnQge1xuICBBZHZlcnRpc2VNb2RhbE1vZGVsLFxuICBQb3N0aW5nQm9hcmRzU2VsZWN0aW9uTW9kZWwsXG59IGZyb20gJy4vYWR2ZXJ0aXNlLW1vZGFsLm1vZGVsJztcbmltcG9ydCB7IEludm9pY2VNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vbGVjdWxlcy9pbnZvaWNlLWxpbmUtaXRlbS9pbnZvaWNlLWxpbmUtaXRlbS5tb2RlbCc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uLy4uL29yZ2FuaXNtcy9jb25maXJtYXRpb24tbW9kYWwvY29uZmlybWF0aW9uLW1vZGFsLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3ltcGhvbnktYWR2ZXJ0aXNlLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmVydGlzZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FkdmVydGlzZS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZlcnRpc2VNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgbW9kZWw6IFBhcnRpYWw8QWR2ZXJ0aXNlTW9kYWxNb2RlbD47XG5cbiAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGNsb3NlQnV0dG9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcG9zdGluZ0JvYXJkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICBQYXJ0aWFsPEFkdmVydGlzZU1vZGFsTW9kZWw+XG4gID4oKTtcblxuICBwdWJsaWMgZmlsdGVyZWRQb3N0aW5nQm9hcmRMaXN0OiBQb3N0aW5nQm9hcmRzU2VsZWN0aW9uTW9kZWxbXTtcbiAgcHVibGljIG9yZGVyU3VtbWFyeTogT3JkZXJTdW1tYXJ5TW9kZWw7XG4gIHB1YmxpYyBzdWJUaXRsZTogSDVXaXRoSWNvbk1vZGVsO1xuICBwdWJsaWMgZnVuZHNJbmZvOiBINVdpdGhJY29uTW9kZWwgPSB7XG4gICAgaWNvbjogSWNvbnMuQ09ORklSTUFUSU9OLFxuICAgIGljb25GaXJzdDogdHJ1ZSxcbiAgICB0ZXh0OiAnU3VmZmljaWVudCBGdW5kcycsXG4gICAgaWNvbkNvbG9yOiAnIzAwRDU2QicsXG4gIH07XG4gIHB1YmxpYyBjYW5jZWxDb250ZW50OiBDb25maXJtYXRpb25Nb2RlbDtcblxuICBwdWJsaWMgcGF5UGVyQ2xpY2tCb2FyZHM6IEludm9pY2VNb2RlbFtdID0gW107XG4gIHB1YmxpYyBqb2JCb2FyZHM6IEludm9pY2VNb2RlbFtdID0gW107XG4gIHB1YmxpYyBqb2JDb3VudDogbnVtYmVyID0gMDtcbiAgcHVibGljIG1vZGFsVGl0bGU6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgaXNKb2JCb2FyZE5leHRCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXNlRGVmYXVsdFZhbHVlcygpO1xuICAgIHRoaXMudXBkYXRlTW9kYWxIZWFkZXIoKTtcbiAgICB0aGlzLnVwZGF0ZU9yZGVyU3VtbWFyeSgpO1xuICAgIHRoaXMuY2FuY2VsQ29udGVudCA9IHtcbiAgICAgIHRpdGxlOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGFiYW5kb24geW91ciBvcmRlcj8nLFxuICAgICAgY29udGVudDpcbiAgICAgICAgJ0FsbCBzZWxlY3Rpb25zIHdpbGwgYmUgZGVsZXRlZCBhbmQgeW91IHdpbGwgaGF2ZSB0byBzdGFydCBvdmVyLicsXG4gICAgICBidG5QcmltYXJ5OiAnQ29udGludWUgT3JkZXInLFxuICAgICAgYnRuU2Vjb25kYXJ5OiAnQWJhbmRvbiBPcmRlcicsXG4gICAgfTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlcmVkUG9zdGluZ0JvYXJkTGlzdCA9IHRoaXMubW9kZWwuam9iQm9hcmRzO1xuICB9XG5cbiAgaW5pdGlhbGlzZURlZmF1bHRWYWx1ZXMoKSB7XG4gICAgdGhpcy5maWx0ZXJlZFBvc3RpbmdCb2FyZExpc3QgPSB0aGlzLm1vZGVsLmpvYkJvYXJkcztcbiAgICB0aGlzLmpvYkNvdW50ID0gdGhpcy5tb2RlbC5qb2JzVG9BZHZlcnRpc2UubGVuZ3RoO1xuICAgIHRoaXMub3JkZXJTdW1tYXJ5ID0ge1xuICAgICAgdGl0bGU6ICdZb3VyIE9yZGVyJyxcbiAgICAgIGludm9pY2VBcmVhczogW1xuICAgICAgICB7XG4gICAgICAgICAgbGluZUl0ZW1zOiBbXSxcbiAgICAgICAgICB0aXRsZTogJ1BheS1QZXItQ2xpY2snLFxuICAgICAgICAgIHRvdGFsOiB7XG4gICAgICAgICAgICB0ZXh0TGVmdDogJ0Nvc3QgUHJvZ3JhbWF0aWMgQm9hcmRzJyxcbiAgICAgICAgICAgIHRleHRSaWdodDogYHggKCR7dGhpcy5qb2JDb3VudH0pIEpvYnMgPSAkMGAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxpbmVJdGVtczogW10sXG4gICAgICAgICAgdGl0bGU6ICdKb2IgQm9hcmRzJyxcbiAgICAgICAgICB0b3RhbDoge1xuICAgICAgICAgICAgdGV4dExlZnQ6ICdDb3N0IEpvYiBCb2FyZHMnLFxuICAgICAgICAgICAgdGV4dFJpZ2h0OiBgeCAoJHt0aGlzLmpvYkNvdW50fSkgSm9icyA9ICQwYCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRvdGFsOiB7XG4gICAgICAgIHRleHRMZWZ0OiAnJyxcbiAgICAgICAgdGV4dFJpZ2h0OiAnJDAnLFxuICAgICAgICBsYWJlbDogJ1RvdGFsOicsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVNb2RhbEhlYWRlcigpIHtcbiAgICBsZXQgc3ViVGl0bGVUb29sdGlwOiBzdHJpbmcgPSAnJztcbiAgICBsZXQgam9iTnVtYmVyID0gMTtcbiAgICB0aGlzLm1vZGVsLmpvYnNUb0FkdmVydGlzZS5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgIHN1YlRpdGxlVG9vbHRpcCA9IHN1YlRpdGxlVG9vbHRpcCArIGAke2pvYi5qb2JUaXRsZX0gWyR7am9iLmlkfV1gO1xuICAgICAgaWYgKGpvYk51bWJlciAhPSB0aGlzLm1vZGVsLmpvYnNUb0FkdmVydGlzZS5sZW5ndGgpIHtcbiAgICAgICAgc3ViVGl0bGVUb29sdGlwID0gc3ViVGl0bGVUb29sdGlwICsgJzwvYnI+JztcbiAgICAgIH1cbiAgICAgIGpvYk51bWJlcisrO1xuICAgIH0pO1xuICAgIHRoaXMuc3ViVGl0bGUgPSB7XG4gICAgICB0b29sdGlwSHRtbDogc3ViVGl0bGVUb29sdGlwLFxuICAgICAgdGV4dDogYCR7dGhpcy5tb2RlbC5qb2JzVG9BZHZlcnRpc2UubGVuZ3RofSBKb2JzYCxcbiAgICAgIGljb25GaXJzdDogZmFsc2UsXG4gICAgICBpY29uOiBJY29ucy5JTkZPLFxuICAgICAgcGxhY2VtZW50OiAncmlnaHQnLFxuICAgIH07XG4gIH1cblxuICBvbktleXdvcmRTZWFyY2goa2V5d29yZDogc3RyaW5nKSB7XG4gICAgdGhpcy5maWx0ZXJlZFBvc3RpbmdCb2FyZExpc3QgPSB0aGlzLm1vZGVsLmpvYkJvYXJkcy5maWx0ZXIoKGJvYXJkKSA9PlxuICAgICAgYm9hcmQuYm9hcmROYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa2V5d29yZC50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gIH1cblxuICBvbkJ1dHRvbkNsaWNrKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuYnV0dG9uQ2xpY2tlZC5lbWl0KHRleHQpO1xuICB9XG5cbiAgb25DbG9zZUJ1dHRvbkNsaWNrKCkge1xuICAgIHRoaXMuY2xvc2VCdXR0b25DbGlja2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uUG9zdGluZ0JvYXJkQ2hhbmdlKHNlbGVjdGVkQm9hcmQ6IFBvc3RpbmdCb2FyZHNTZWxlY3Rpb25Nb2RlbCkge1xuICAgIHRoaXMudXBkYXRlT3JkZXJTdW1tYXJ5KCk7XG4gIH1cblxuICBhZGRMaW5lSXRlbShcbiAgICBpbnZvaWNlQXJlYUluZGV4OiBudW1iZXIsXG4gICAgc2VsZWN0ZWRCb2FyZDogUG9zdGluZ0JvYXJkc1NlbGVjdGlvbk1vZGVsXG4gICkge1xuICAgIHRoaXMub3JkZXJTdW1tYXJ5Lmludm9pY2VBcmVhc1tpbnZvaWNlQXJlYUluZGV4XS5saW5lSXRlbXMucHVzaCh7XG4gICAgICB0ZXh0TGVmdDogc2VsZWN0ZWRCb2FyZC5ib2FyZE5hbWUsXG4gICAgICB0ZXh0UmlnaHQ6IGAkJHtzZWxlY3RlZEJvYXJkLmJvYXJkUHJpY2V9YCxcbiAgICB9KTtcbiAgfVxuXG4gIGNhbGN1bGF0ZUludm9pY2VBcmVhVG90YWwoaW52b2ljZUFyZWFJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgaW52b2ljZUFyZWFUb3RhbCA9IDA7XG4gICAgdGhpcy5vcmRlclN1bW1hcnkuaW52b2ljZUFyZWFzW2ludm9pY2VBcmVhSW5kZXhdLmxpbmVJdGVtcy5mb3JFYWNoKChsaSkgPT4ge1xuICAgICAgaW52b2ljZUFyZWFUb3RhbCA9IGludm9pY2VBcmVhVG90YWwgKyArbGkudGV4dFJpZ2h0LnJlcGxhY2UoJyQnLCAnJyk7XG4gICAgfSk7XG4gICAgdGhpcy5vcmRlclN1bW1hcnkuaW52b2ljZUFyZWFzW2ludm9pY2VBcmVhSW5kZXhdLnRvdGFsLnRleHRSaWdodCA9IGB4ICgke1xuICAgICAgdGhpcy5tb2RlbC5qb2JzVG9BZHZlcnRpc2UubGVuZ3RoXG4gICAgfSkgSm9icyA9ICQke2ludm9pY2VBcmVhVG90YWwgKiB0aGlzLm1vZGVsLmpvYnNUb0FkdmVydGlzZS5sZW5ndGh9YDtcbiAgICByZXR1cm4gaW52b2ljZUFyZWFUb3RhbCAqIHRoaXMubW9kZWwuam9ic1RvQWR2ZXJ0aXNlLmxlbmd0aDtcbiAgfVxuXG4gIGNhbGN1bGF0ZU9yZGVyVG90YWwocGF5UGVyQ2xpY2tBcmVhVG90YWw6IG51bWJlciwgam9iQm9hcmRBcmVhVG90YWw6IG51bWJlcikge1xuICAgIGNvbnN0IHNlbGVjdGVkSm9iQm9hcmRzID0gdGhpcy5tb2RlbC5qb2JCb2FyZHMuZmlsdGVyKFxuICAgICAgKGpiKSA9PiBqYi5pc1NlbGVjdGVkXG4gICAgKS5sZW5ndGg7XG5cbiAgICBjb25zdCBqb2JUb0FkdmVydGlzZUNvdW50ID0gdGhpcy5tb2RlbC5qb2JzVG9BZHZlcnRpc2UubGVuZ3RoO1xuXG4gICAgY29uc3Qgb3JkZXJTdW1tYXJ5VGV4dCA9IGAoJHtzZWxlY3RlZEpvYkJvYXJkc30pIEJvYXJkcyB4ICR7XG4gICAgICB0aGlzLm1vZGVsLmpvYnNUb0FkdmVydGlzZS5sZW5ndGhcbiAgICB9IEpvYnMgPSAoJHtzZWxlY3RlZEpvYkJvYXJkcyAqIGpvYlRvQWR2ZXJ0aXNlQ291bnR9KSBBZHNgO1xuXG4gICAgdGhpcy5vcmRlclN1bW1hcnkudG90YWwgPSB7XG4gICAgICBsYWJlbDogJ1RvdGFsOicsXG4gICAgICB0ZXh0TGVmdDogb3JkZXJTdW1tYXJ5VGV4dCxcbiAgICAgIHRleHRSaWdodDogYCQke3BheVBlckNsaWNrQXJlYVRvdGFsICsgam9iQm9hcmRBcmVhVG90YWx9YCxcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlT3JkZXJTdW1tYXJ5KCkge1xuICAgIHRoaXMub3JkZXJTdW1tYXJ5Lmludm9pY2VBcmVhc1swXS5saW5lSXRlbXMgPSBbXTtcbiAgICB0aGlzLm9yZGVyU3VtbWFyeS5pbnZvaWNlQXJlYXNbMV0ubGluZUl0ZW1zID0gW107XG4gICAgdGhpcy5tb2RlbC5qb2JCb2FyZHMuZm9yRWFjaCgoamIpID0+IHtcbiAgICAgIGlmIChqYi5pc1NlbGVjdGVkKSB7XG4gICAgICAgIGlmIChqYi5pc1BheVBlckNsaWNrKSB7XG4gICAgICAgICAgdGhpcy5hZGRMaW5lSXRlbSgwLCBqYik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hZGRMaW5lSXRlbSgxLCBqYik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHBheVBlckNsaWNrQXJlYVRvdGFsID0gdGhpcy5jYWxjdWxhdGVJbnZvaWNlQXJlYVRvdGFsKDApO1xuICAgIGNvbnN0IGpvYkJvYXJkQXJlYVRvdGFsID0gdGhpcy5jYWxjdWxhdGVJbnZvaWNlQXJlYVRvdGFsKDEpO1xuICAgIHRoaXMuY2FsY3VsYXRlT3JkZXJUb3RhbChwYXlQZXJDbGlja0FyZWFUb3RhbCwgam9iQm9hcmRBcmVhVG90YWwpO1xuICAgIGlmICh0aGlzLm1vZGVsLmpvYkJvYXJkcy5maWx0ZXIoKGpiKSA9PiBqYi5pc1NlbGVjdGVkKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaXNKb2JCb2FyZE5leHRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNKb2JCb2FyZE5leHRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnBvc3RpbmdCb2FyZENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xuICB9XG59XG4iLCI8c3ltcGhvbnktdHdvLWNvbHVtbi1tb2RhbC10ZW1wbGF0ZSAqbmdJZj1cIiFtb2RlbC5uYXZpZ2F0aW9uLnNob3dDYW5jZWxcIj5cbiAgPHN5bXBob255LWg0XG4gICAgKm5nSWY9XCJtb2RlbC5uYXZpZ2F0aW9uLnNob3dKb2JCb2FyZHNTZWxlY3Rpb24gJiYgIW1vZGVsLmlzTG9hZGluZ1wiXG4gICAgc2Z4LW1vZGFsLXRpdGxlXG4gICAgPlNlbGVjdCBZb3VyIEpvYiBBZCBCdXlzPC9zeW1waG9ueS1oNFxuICA+XG4gIDxzeW1waG9ueS1oNCAqbmdJZj1cIm1vZGVsLm5hdmlnYXRpb24uc2hvd09yZGVyUmV2aWV3XCIgc2Z4LW1vZGFsLXRpdGxlXG4gICAgPlJldmlldyB5b3UgSm9iIEFkIEJ1eXM8L3N5bXBob255LWg0XG4gID5cbiAgPHN5bXBob255LWg0ICpuZ0lmPVwibW9kZWwubmF2aWdhdGlvbi5zaG93Q29uZmlybWF0aW9uXCIgc2Z4LW1vZGFsLXRpdGxlXG4gICAgPkNvbmZpcm1hdGlvbiBvZiB5b3VyIEpvYiBBZCBCdXlzPC9zeW1waG9ueS1oNFxuICA+XG4gIDxzeW1waG9ueS1oNCAqbmdJZj1cIm1vZGVsLm5hdmlnYXRpb24uc2hvd1Byb2Nlc3NpbmdcIiBzZngtbW9kYWwtdGl0bGVcbiAgICA+UHJvY2Vzc2luZyBPcmRlci4uLjwvc3ltcGhvbnktaDRcbiAgPlxuICA8c3ltcGhvbnktaDQgKm5nSWY9XCJtb2RlbC5pc0xvYWRpbmdcIiBzZngtbW9kYWwtdGl0bGVcbiAgICA+TG9hZGluZyBKb2IgQm9hcmRzLi4uPC9zeW1waG9ueS1oNFxuICA+XG4gIDxzeW1waG9ueS1pY29uXG4gICAgc2Z4LWNsb3NlLWJ1dHRvblxuICAgIFtpY29uXT1cIidzaS1jbG9zZS1tb2RhbCdcIlxuICAgIChjbGlja2VkKT1cIm9uQ2xvc2VCdXR0b25DbGljaygpXCJcbiAgPjwvc3ltcGhvbnktaWNvbj5cbiAgPHN5bXBob255LWg1LXdpdGgtaWNvbiBzZngtbW9kYWwtc3VidGl0bGUgW21vZGVsXT1cInN1YlRpdGxlXCI+XG4gIDwvc3ltcGhvbnktaDUtd2l0aC1pY29uPlxuXG4gIDxzeW1waG9ueS10d28tY29sdW1uLWJvZHktdGVtcGxhdGVcbiAgICAqbmdJZj1cIiFtb2RlbC5pc0xvYWRpbmcgJiYgbW9kZWwubmF2aWdhdGlvbi5zaG93Sm9iQm9hcmRzU2VsZWN0aW9uXCJcbiAgICBbc2hvd0hlYWRlcl09XCJ0cnVlXCJcbiAgICBzZngtbW9kYWwtYm9keS1hcmVhXG4gID5cbiAgICA8c3ltcGhvbnktaW5wdXQtdGV4dFxuICAgICAgc2Z4LWxlZnQtY29sLWhlYWRlclxuICAgICAgW25vTWFyZ2luXT1cInRydWVcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWFyY2ggQWQgQm9hcmRzJ1wiXG4gICAgICBbaWNvbl09XCInc2ktc2VhcmNoLW5ldydcIlxuICAgICAgKHRleHRDaGFuZ2UpPVwib25LZXl3b3JkU2VhcmNoKCRldmVudClcIlxuICAgID5cbiAgICA8L3N5bXBob255LWlucHV0LXRleHQ+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0LWNvbC1oZWFkZXItaW5uZXJcIiBzZngtcmlnaHQtY29sLWhlYWRlcj5cbiAgICAgIDxzeW1waG9ueS1oNS13aXRoLWljb25cbiAgICAgICAgc2Z4LXJpZ2h0LWNvbC1oZWFkZXJcbiAgICAgICAgKm5nSWY9XCJtb2RlbC5zaG93RnVuZHNcIlxuICAgICAgICBjbGFzcz1cInB1bGwtcmlnaHRcIlxuICAgICAgICBbbW9kZWxdPVwiZnVuZHNJbmZvXCJcbiAgICAgID48L3N5bXBob255LWg1LXdpdGgtaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHNmeC1sZWZ0LWNvbHVtbiBjbGFzcz1cInBvc3RpbmctYm9hcmRzIHNmeC1wci0xMFwiPlxuICAgICAgPHN5bXBob255LWFkdmVydGlzZS1wb3N0aW5nYm9hcmQtc2VsZWN0aW9uLWxpc3RcbiAgICAgICAgW21vZGVsXT1cImZpbHRlcmVkUG9zdGluZ0JvYXJkTGlzdFwiXG4gICAgICAgIChwb3N0aW5nQm9hcmRDaGFuZ2UpPVwib25Qb3N0aW5nQm9hcmRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+PC9zeW1waG9ueS1hZHZlcnRpc2UtcG9zdGluZ2JvYXJkLXNlbGVjdGlvbi1saXN0PlxuICAgIDwvZGl2PlxuXG4gICAgPHN5bXBob255LW9yZGVyLXN1bW1hcnlcbiAgICAgIHNmeC1yaWdodC1jb2x1bW5cbiAgICAgIFttb2RlbF09XCJvcmRlclN1bW1hcnlcIlxuICAgID48L3N5bXBob255LW9yZGVyLXN1bW1hcnk+XG4gIDwvc3ltcGhvbnktdHdvLWNvbHVtbi1ib2R5LXRlbXBsYXRlPlxuXG4gIDxzeW1waG9ueS10d28tY29sdW1uLWJvZHktdGVtcGxhdGVcbiAgICAqbmdJZj1cIiFtb2RlbC5pc0xvYWRpbmcgJiYgbW9kZWwubmF2aWdhdGlvbi5zaG93T3JkZXJSZXZpZXdcIlxuICAgIHNmeC1tb2RhbC1ib2R5LWFyZWFcbiAgPlxuICAgIDxkaXYgc2Z4LWxlZnQtY29sdW1uIGNsYXNzPVwicG9zdGluZy1ib2FyZHNcIj5cbiAgICAgIDxzeW1waG9ueS1hZHZlcnRpc2Utb3JkZXItcmV2aWV3Pjwvc3ltcGhvbnktYWR2ZXJ0aXNlLW9yZGVyLXJldmlldz5cbiAgICA8L2Rpdj5cblxuICAgIDxzeW1waG9ueS1vcmRlci1zdW1tYXJ5XG4gICAgICBzZngtcmlnaHQtY29sdW1uXG4gICAgICBbbW9kZWxdPVwib3JkZXJTdW1tYXJ5XCJcbiAgICA+PC9zeW1waG9ueS1vcmRlci1zdW1tYXJ5PlxuICA8L3N5bXBob255LXR3by1jb2x1bW4tYm9keS10ZW1wbGF0ZT5cblxuICA8c3ltcGhvbnktdHdvLWNvbHVtbi1ib2R5LXRlbXBsYXRlXG4gICAgKm5nSWY9XCIhbW9kZWwuaXNMb2FkaW5nICYmIG1vZGVsLm5hdmlnYXRpb24uc2hvd0NvbmZpcm1hdGlvblwiXG4gICAgc2Z4LW1vZGFsLWJvZHktYXJlYVxuICA+XG4gICAgPHN5bXBob255LW9yZGVyLXN1bW1hcnlcbiAgICAgIHNmeC1sZWZ0LWNvbHVtblxuICAgICAgW21vZGVsXT1cIm9yZGVyU3VtbWFyeVwiXG4gICAgPjwvc3ltcGhvbnktb3JkZXItc3VtbWFyeT5cbiAgICA8ZGl2IHNmeC1yaWdodC1jb2x1bW4gY2xhc3M9XCJwb3N0aW5nLWJvYXJkc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0YWdlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3ggYm91bmNlLTdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGxldGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8c3ltcGhvbnktaDI+WW91ciBvcmRlciBpcyBjb21wbGV0ZTwvc3ltcGhvbnktaDI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VjY2Vzcy1pY29uLXNwYWNpbmdcIj5cbiAgICAgICAgICAgICAgPHN5bXBob255LWljb25cbiAgICAgICAgICAgICAgICBbaWNvbl09XCInc2ktY29uZmlybWF0aW9uJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25Db2xvcl09XCInIzAwRDU2QidcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cIic1MHB4J1wiXG4gICAgICAgICAgICAgID48L3N5bXBob255LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9zeW1waG9ueS10d28tY29sdW1uLWJvZHktdGVtcGxhdGU+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwiIW1vZGVsLmlzTG9hZGluZyAmJiBtb2RlbC5uYXZpZ2F0aW9uLnNob3dQcm9jZXNzaW5nXCJcbiAgICBzZngtbW9kYWwtYm9keS1hcmVhXG4gICAgY2xhc3M9XCJwb3N0aW5nLWJvYXJkcyBzZngtcC0zMFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwicHJvY2Vzc2luZy1jb250YWluZXJcIj5cbiAgICAgIDxzeW1waG9ueS1wYXJhZ3JhcGhcbiAgICAgICAgPjxiPlNtYXNoRmx5WDwvYj4gaXMgc3VibWl0dGluZyB5b3VyIG9yZGVyIHRvIHlvdXIgc2VsZWN0ZWQgam9iIGJvYXJkcy5cbiAgICAgICAgU29tZSBvcmRlcnMgaGFwcGVuIGltbWVkaWF0ZWx5LCB3aGlsZSBvdGhlcnMgdGFrZSBhIGxpdHRsZSBtb3JlIHRpbWUuXG4gICAgICAgIENoZWNrIHlvdXIgb3JkZXIgc3RhdHVzIGlmIHlvdSBkb24ndCByZWNpZXZlIGEgY29uZmlybWF0aW9uIGluIHRoZSBuZXh0XG4gICAgICAgIDI0aG91cnMuPC9zeW1waG9ueS1wYXJhZ3JhcGhcbiAgICAgID5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2Z4LW10LTgwXCI+XG4gICAgICA8c3ltcGhvbnktc2Z4LWxvYWRlcj48L3N5bXBob255LXNmeC1sb2FkZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJsb2FkZXItY29udGFpbmVyXCIgKm5nSWY9XCJtb2RlbC5pc0xvYWRpbmdcIiBzZngtbW9kYWwtYm9keS1hcmVhPlxuICAgIDxzeW1waG9ueS1zZngtbG9hZGVyPjwvc3ltcGhvbnktc2Z4LWxvYWRlcj5cbiAgPC9kaXY+XG5cbiAgPHN5bXBob255LWJ1dHRvblxuICAgICpuZ0lmPVwibW9kZWwubmF2aWdhdGlvbi5zaG93Sm9iQm9hcmRzU2VsZWN0aW9uXCJcbiAgICBzZngtYnV0dG9uLXNlY29uZGFyeVxuICAgIFt0ZXh0XT1cIidDYW5jZWwnXCJcbiAgICBbaXNTZWNvbmRhcnldPVwidHJ1ZVwiXG4gICAgW2lzSW52ZXJzZV09XCJ0cnVlXCJcbiAgICAoY2xpY2tlZCk9XCJvbkJ1dHRvbkNsaWNrKCRldmVudClcIlxuICA+PC9zeW1waG9ueS1idXR0b24+XG4gIDxzeW1waG9ueS1idXR0b25cbiAgICAqbmdJZj1cIm1vZGVsLm5hdmlnYXRpb24uc2hvd0pvYkJvYXJkc1NlbGVjdGlvblwiXG4gICAgc2Z4LWJ1dHRvbi1wcmltYXJ5XG4gICAgW3RleHRdPVwiJ1JldmlldyBPcmRlcidcIlxuICAgIFtkaXNhYmxlZF09XCJpc0pvYkJvYXJkTmV4dEJ1dHRvbkRpc2FibGVkXCJcbiAgICBbaXNJbnZlcnNlXT1cInRydWVcIlxuICAgIChjbGlja2VkKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiXG4gID48L3N5bXBob255LWJ1dHRvbj5cblxuICA8c3ltcGhvbnktYnV0dG9uXG4gICAgKm5nSWY9XCJtb2RlbC5uYXZpZ2F0aW9uLnNob3dPcmRlclJldmlld1wiXG4gICAgc2Z4LWJ1dHRvbi1iYWNrXG4gICAgW3RleHRdPVwiJ0VkaXQgT3JkZXInXCJcbiAgICBbaXNTZWNvbmRhcnldPVwidHJ1ZVwiXG4gICAgW2lzSW52ZXJzZV09XCJ0cnVlXCJcbiAgICAoY2xpY2tlZCk9XCJvbkJ1dHRvbkNsaWNrKCRldmVudClcIlxuICA+PC9zeW1waG9ueS1idXR0b24+XG4gIDxzeW1waG9ueS1idXR0b25cbiAgICAqbmdJZj1cIm1vZGVsLm5hdmlnYXRpb24uc2hvd09yZGVyUmV2aWV3XCJcbiAgICBzZngtYnV0dG9uLXNlY29uZGFyeVxuICAgIFt0ZXh0XT1cIidDYW5jZWwnXCJcbiAgICBbaXNTZWNvbmRhcnldPVwidHJ1ZVwiXG4gICAgW2lzSW52ZXJzZV09XCJ0cnVlXCJcbiAgICAoY2xpY2tlZCk9XCJvbkJ1dHRvbkNsaWNrKCRldmVudClcIlxuICA+PC9zeW1waG9ueS1idXR0b24+XG4gIDxzeW1waG9ueS1idXR0b25cbiAgICAqbmdJZj1cIm1vZGVsLm5hdmlnYXRpb24uc2hvd09yZGVyUmV2aWV3XCJcbiAgICBzZngtYnV0dG9uLXByaW1hcnlcbiAgICBbdGV4dF09XCInQnV5J1wiXG4gICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICBbaXNJbnZlcnNlXT1cInRydWVcIlxuICAgIChjbGlja2VkKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiXG4gID48L3N5bXBob255LWJ1dHRvbj5cblxuICA8c3ltcGhvbnktYnV0dG9uXG4gICAgKm5nSWY9XCJtb2RlbC5uYXZpZ2F0aW9uLnNob3dDb25maXJtYXRpb25cIlxuICAgIHNmeC1idXR0b24tcHJpbWFyeVxuICAgIFt0ZXh0XT1cIidGaW5pc2ggJiBDbG9zZSdcIlxuICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgW2lzSW52ZXJzZV09XCJ0cnVlXCJcbiAgICAoY2xpY2tlZCk9XCJvbkJ1dHRvbkNsaWNrKCRldmVudClcIlxuICA+PC9zeW1waG9ueS1idXR0b24+XG48L3N5bXBob255LXR3by1jb2x1bW4tbW9kYWwtdGVtcGxhdGU+XG48c3ltcGhvbnktY29uZmlybWF0aW9uLW1vZGFsXG4gICpuZ0lmPVwiIW1vZGVsLmlzTG9hZGluZyAmJiBtb2RlbC5uYXZpZ2F0aW9uLnNob3dDYW5jZWxcIlxuICAoYnV0dG9uQ2xpY2tlZCk9XCJvbkJ1dHRvbkNsaWNrKCRldmVudClcIlxuICAoY2xvc2VCdXR0b25DbGlja2VkKT1cIm9uQ2xvc2VCdXR0b25DbGljaygpXCJcbiAgW21vZGVsXT1cImNhbmNlbENvbnRlbnRcIlxuPlxuPC9zeW1waG9ueS1jb25maXJtYXRpb24tbW9kYWw+XG4iXX0=
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2ZXJ0aXNlLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvcGFnZXMvbW9kYWxzL2FkdmVydGlzZS1tb2RhbC9hZHZlcnRpc2UtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9wYWdlcy9tb2RhbHMvYWR2ZXJ0aXNlLW1vZGFsL2FkdmVydGlzZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFldEQsTUFBTSxPQUFPLHVCQUF1QjtJQTJCbEM7UUF4QlUsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzNDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDaEQsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBRTVDLENBQUM7UUFDTSx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBS3BELGNBQVMsR0FBb0I7WUFDbEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ3hCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO1FBR0ssc0JBQWlCLEdBQW1CLEVBQUUsQ0FBQztRQUN2QyxjQUFTLEdBQW1CLEVBQUUsQ0FBQztRQUMvQixhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBQ3JCLGVBQVUsR0FBVyxFQUFFLENBQUM7SUFHaEIsQ0FBQztJQUVoQixRQUFRO1FBQ04sSUFB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LEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDakUsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQztTQUMxQzthQUFNO1lBQ0wsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEtBQUssQ0FBQztTQUMzQztRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7O29IQTVLVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw4UkN6QnBDLHF1TEFvTEE7MkZEM0phLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSwwQkFBMEI7MEVBSzNCLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBR0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEljb25zIH0gZnJvbSAnLi4vLi4vLi4vYXRvbXMvaWNvbi9pY29uLmVudW0nO1xuaW1wb3J0IHsgT3JkZXJTdW1tYXJ5TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9vcmdhbmlzbXMvb3JkZXItc3VtbWFyeS9vcmRlci1zdW1tYXJ5Lm1vZGVsJztcbmltcG9ydCB7IEg1V2l0aEljb25Nb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vbGVjdWxlcy9oNS13aXRoLWljb24vaDUtd2l0aC1pY29uLm1vZGVsJztcbmltcG9ydCB7XG4gIEFkdmVydGlzZU1vZGFsTW9kZWwsXG4gIFBvc3RpbmdCb2FyZHNTZWxlY3Rpb25Nb2RlbFxufSBmcm9tICcuL2FkdmVydGlzZS1tb2RhbC5tb2RlbCc7XG5pbXBvcnQgeyBJbnZvaWNlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2xlY3VsZXMvaW52b2ljZS1saW5lLWl0ZW0vaW52b2ljZS1saW5lLWl0ZW0ubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9vcmdhbmlzbXMvY29uZmlybWF0aW9uLW1vZGFsL2NvbmZpcm1hdGlvbi1tb2RhbC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N5bXBob255LWFkdmVydGlzZS1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZlcnRpc2UtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hZHZlcnRpc2UtbW9kYWwuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBBZHZlcnRpc2VNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgbW9kZWw6IFBhcnRpYWw8QWR2ZXJ0aXNlTW9kYWxNb2RlbD47XG5cbiAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGNsb3NlQnV0dG9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcG9zdGluZ0JvYXJkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICBQYXJ0aWFsPEFkdmVydGlzZU1vZGFsTW9kZWw+XG4gID4oKTtcbiAgQE91dHB1dCgpIGtleXdvcmRTZWFyY2hDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBwdWJsaWMgZmlsdGVyZWRQb3N0aW5nQm9hcmRMaXN0OiBQb3N0aW5nQm9hcmRzU2VsZWN0aW9uTW9kZWxbXTtcbiAgcHVibGljIG9yZGVyU3VtbWFyeTogT3JkZXJTdW1tYXJ5TW9kZWw7XG4gIHB1YmxpYyBzdWJUaXRsZTogSDVXaXRoSWNvbk1vZGVsO1xuICBwdWJsaWMgZnVuZHNJbmZvOiBINVdpdGhJY29uTW9kZWwgPSB7XG4gICAgaWNvbjogSWNvbnMuQ09ORklSTUFUSU9OLFxuICAgIGljb25GaXJzdDogdHJ1ZSxcbiAgICB0ZXh0OiAnU3VmZmljaWVudCBGdW5kcycsXG4gICAgaWNvbkNvbG9yOiAnIzAwRDU2QidcbiAgfTtcbiAgcHVibGljIGNhbmNlbENvbnRlbnQ6IENvbmZpcm1hdGlvbk1vZGVsO1xuXG4gIHB1YmxpYyBwYXlQZXJDbGlja0JvYXJkczogSW52b2ljZU1vZGVsW10gPSBbXTtcbiAgcHVibGljIGpvYkJvYXJkczogSW52b2ljZU1vZGVsW10gPSBbXTtcbiAgcHVibGljIGpvYkNvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgbW9kYWxUaXRsZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBpc0pvYkJvYXJkTmV4dEJ1dHRvbkRpc2FibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpc2VEZWZhdWx0VmFsdWVzKCk7XG4gICAgdGhpcy51cGRhdGVNb2RhbEhlYWRlcigpO1xuICAgIHRoaXMudXBkYXRlT3JkZXJTdW1tYXJ5KCk7XG4gICAgdGhpcy5jYW5jZWxDb250ZW50ID0ge1xuICAgICAgdGl0bGU6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gYWJhbmRvbiB5b3VyIG9yZGVyPycsXG4gICAgICBjb250ZW50OlxuICAgICAgICAnQWxsIHNlbGVjdGlvbnMgd2lsbCBiZSBkZWxldGVkIGFuZCB5b3Ugd2lsbCBoYXZlIHRvIHN0YXJ0IG92ZXIuJyxcbiAgICAgIGJ0blByaW1hcnk6ICdDb250aW51ZSBPcmRlcicsXG4gICAgICBidG5TZWNvbmRhcnk6ICdBYmFuZG9uIE9yZGVyJ1xuICAgIH07XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJlZFBvc3RpbmdCb2FyZExpc3QgPSB0aGlzLm1vZGVsLmpvYkJvYXJkcztcbiAgfVxuXG4gIGluaXRpYWxpc2VEZWZhdWx0VmFsdWVzKCkge1xuICAgIHRoaXMuZmlsdGVyZWRQb3N0aW5nQm9hcmRMaXN0ID0gdGhpcy5tb2RlbC5qb2JCb2FyZHM7XG4gICAgdGhpcy5qb2JDb3VudCA9IHRoaXMubW9kZWwuam9ic1RvQWR2ZXJ0aXNlLmxlbmd0aDtcbiAgICB0aGlzLm9yZGVyU3VtbWFyeSA9IHtcbiAgICAgIHRpdGxlOiAnWW91ciBPcmRlcicsXG4gICAgICBpbnZvaWNlQXJlYXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxpbmVJdGVtczogW10sXG4gICAgICAgICAgdGl0bGU6ICdQYXktUGVyLUNsaWNrJyxcbiAgICAgICAgICB0b3RhbDoge1xuICAgICAgICAgICAgdGV4dExlZnQ6ICdDb3N0IFByb2dyYW1hdGljIEJvYXJkcycsXG4gICAgICAgICAgICB0ZXh0UmlnaHQ6IGB4ICgke3RoaXMuam9iQ291bnR9KSBKb2JzID0gJDBgXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGluZUl0ZW1zOiBbXSxcbiAgICAgICAgICB0aXRsZTogJ0pvYiBCb2FyZHMnLFxuICAgICAgICAgIHRvdGFsOiB7XG4gICAgICAgICAgICB0ZXh0TGVmdDogJ0Nvc3QgSm9iIEJvYXJkcycsXG4gICAgICAgICAgICB0ZXh0UmlnaHQ6IGB4ICgke3RoaXMuam9iQ291bnR9KSBKb2JzID0gJDBgXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgdG90YWw6IHtcbiAgICAgICAgdGV4dExlZnQ6ICcnLFxuICAgICAgICB0ZXh0UmlnaHQ6ICckMCcsXG4gICAgICAgIGxhYmVsOiAnVG90YWw6J1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB1cGRhdGVNb2RhbEhlYWRlcigpIHtcbiAgICBsZXQgc3ViVGl0bGVUb29sdGlwOiBzdHJpbmcgPSAnJztcbiAgICBsZXQgam9iTnVtYmVyID0gMTtcbiAgICB0aGlzLm1vZGVsLmpvYnNUb0FkdmVydGlzZS5mb3JFYWNoKGpvYiA9PiB7XG4gICAgICBzdWJUaXRsZVRvb2x0aXAgPSBzdWJUaXRsZVRvb2x0aXAgKyBgJHtqb2Iuam9iVGl0bGV9IFske2pvYi5pZH1dYDtcbiAgICAgIGlmIChqb2JOdW1iZXIgIT0gdGhpcy5tb2RlbC5qb2JzVG9BZHZlcnRpc2UubGVuZ3RoKSB7XG4gICAgICAgIHN1YlRpdGxlVG9vbHRpcCA9IHN1YlRpdGxlVG9vbHRpcCArICc8L2JyPic7XG4gICAgICB9XG4gICAgICBqb2JOdW1iZXIrKztcbiAgICB9KTtcbiAgICB0aGlzLnN1YlRpdGxlID0ge1xuICAgICAgdG9vbHRpcEh0bWw6IHN1YlRpdGxlVG9vbHRpcCxcbiAgICAgIHRleHQ6IGAke3RoaXMubW9kZWwuam9ic1RvQWR2ZXJ0aXNlLmxlbmd0aH0gSm9ic2AsXG4gICAgICBpY29uRmlyc3Q6IGZhbHNlLFxuICAgICAgaWNvbjogSWNvbnMuSU5GTyxcbiAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xuICAgIH07XG4gIH1cblxuICBvbktleXdvcmRTZWFyY2goa2V5d29yZDogc3RyaW5nKSB7XG4gICAgdGhpcy5rZXl3b3JkU2VhcmNoQ2hhbmdlLmVtaXQoa2V5d29yZCk7XG4gIH1cblxuICBvbkJ1dHRvbkNsaWNrKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuYnV0dG9uQ2xpY2tlZC5lbWl0KHRleHQpO1xuICB9XG5cbiAgb25DbG9zZUJ1dHRvbkNsaWNrKCkge1xuICAgIHRoaXMuY2xvc2VCdXR0b25DbGlja2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uUG9zdGluZ0JvYXJkQ2hhbmdlKHNlbGVjdGVkQm9hcmQ6IFBvc3RpbmdCb2FyZHNTZWxlY3Rpb25Nb2RlbCkge1xuICAgIHRoaXMudXBkYXRlT3JkZXJTdW1tYXJ5KCk7XG4gIH1cblxuICBhZGRMaW5lSXRlbShcbiAgICBpbnZvaWNlQXJlYUluZGV4OiBudW1iZXIsXG4gICAgc2VsZWN0ZWRCb2FyZDogUG9zdGluZ0JvYXJkc1NlbGVjdGlvbk1vZGVsXG4gICkge1xuICAgIHRoaXMub3JkZXJTdW1tYXJ5Lmludm9pY2VBcmVhc1tpbnZvaWNlQXJlYUluZGV4XS5saW5lSXRlbXMucHVzaCh7XG4gICAgICB0ZXh0TGVmdDogc2VsZWN0ZWRCb2FyZC5ib2FyZE5hbWUsXG4gICAgICB0ZXh0UmlnaHQ6IGAkJHtzZWxlY3RlZEJvYXJkLmJvYXJkUHJpY2V9YFxuICAgIH0pO1xuICB9XG5cbiAgY2FsY3VsYXRlSW52b2ljZUFyZWFUb3RhbChpbnZvaWNlQXJlYUluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBpbnZvaWNlQXJlYVRvdGFsID0gMDtcbiAgICB0aGlzLm9yZGVyU3VtbWFyeS5pbnZvaWNlQXJlYXNbaW52b2ljZUFyZWFJbmRleF0ubGluZUl0ZW1zLmZvckVhY2gobGkgPT4ge1xuICAgICAgaW52b2ljZUFyZWFUb3RhbCA9IGludm9pY2VBcmVhVG90YWwgKyArbGkudGV4dFJpZ2h0LnJlcGxhY2UoJyQnLCAnJyk7XG4gICAgfSk7XG4gICAgdGhpcy5vcmRlclN1bW1hcnkuaW52b2ljZUFyZWFzW2ludm9pY2VBcmVhSW5kZXhdLnRvdGFsLnRleHRSaWdodCA9IGB4ICgke1xuICAgICAgdGhpcy5tb2RlbC5qb2JzVG9BZHZlcnRpc2UubGVuZ3RoXG4gICAgfSkgSm9icyA9ICQke2ludm9pY2VBcmVhVG90YWwgKiB0aGlzLm1vZGVsLmpvYnNUb0FkdmVydGlzZS5sZW5ndGh9YDtcbiAgICByZXR1cm4gaW52b2ljZUFyZWFUb3RhbCAqIHRoaXMubW9kZWwuam9ic1RvQWR2ZXJ0aXNlLmxlbmd0aDtcbiAgfVxuXG4gIGNhbGN1bGF0ZU9yZGVyVG90YWwocGF5UGVyQ2xpY2tBcmVhVG90YWw6IG51bWJlciwgam9iQm9hcmRBcmVhVG90YWw6IG51bWJlcikge1xuICAgIGNvbnN0IHNlbGVjdGVkSm9iQm9hcmRzID0gdGhpcy5tb2RlbC5qb2JCb2FyZHMuZmlsdGVyKGpiID0+IGpiLmlzU2VsZWN0ZWQpXG4gICAgICAubGVuZ3RoO1xuXG4gICAgY29uc3Qgam9iVG9BZHZlcnRpc2VDb3VudCA9IHRoaXMubW9kZWwuam9ic1RvQWR2ZXJ0aXNlLmxlbmd0aDtcblxuICAgIGNvbnN0IG9yZGVyU3VtbWFyeVRleHQgPSBgKCR7c2VsZWN0ZWRKb2JCb2FyZHN9KSBCb2FyZHMgeCAke1xuICAgICAgdGhpcy5tb2RlbC5qb2JzVG9BZHZlcnRpc2UubGVuZ3RoXG4gICAgfSBKb2JzID0gKCR7c2VsZWN0ZWRKb2JCb2FyZHMgKiBqb2JUb0FkdmVydGlzZUNvdW50fSkgQWRzYDtcblxuICAgIHRoaXMub3JkZXJTdW1tYXJ5LnRvdGFsID0ge1xuICAgICAgbGFiZWw6ICdUb3RhbDonLFxuICAgICAgdGV4dExlZnQ6IG9yZGVyU3VtbWFyeVRleHQsXG4gICAgICB0ZXh0UmlnaHQ6IGAkJHtwYXlQZXJDbGlja0FyZWFUb3RhbCArIGpvYkJvYXJkQXJlYVRvdGFsfWBcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlT3JkZXJTdW1tYXJ5KCkge1xuICAgIHRoaXMub3JkZXJTdW1tYXJ5Lmludm9pY2VBcmVhc1swXS5saW5lSXRlbXMgPSBbXTtcbiAgICB0aGlzLm9yZGVyU3VtbWFyeS5pbnZvaWNlQXJlYXNbMV0ubGluZUl0ZW1zID0gW107XG4gICAgdGhpcy5tb2RlbC5qb2JCb2FyZHMuZm9yRWFjaChqYiA9PiB7XG4gICAgICBpZiAoamIuaXNTZWxlY3RlZCkge1xuICAgICAgICBpZiAoamIuaXNQYXlQZXJDbGljaykge1xuICAgICAgICAgIHRoaXMuYWRkTGluZUl0ZW0oMCwgamIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWRkTGluZUl0ZW0oMSwgamIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXlQZXJDbGlja0FyZWFUb3RhbCA9IHRoaXMuY2FsY3VsYXRlSW52b2ljZUFyZWFUb3RhbCgwKTtcbiAgICBjb25zdCBqb2JCb2FyZEFyZWFUb3RhbCA9IHRoaXMuY2FsY3VsYXRlSW52b2ljZUFyZWFUb3RhbCgxKTtcbiAgICB0aGlzLmNhbGN1bGF0ZU9yZGVyVG90YWwocGF5UGVyQ2xpY2tBcmVhVG90YWwsIGpvYkJvYXJkQXJlYVRvdGFsKTtcbiAgICBpZiAodGhpcy5tb2RlbC5qb2JCb2FyZHMuZmlsdGVyKGpiID0+IGpiLmlzU2VsZWN0ZWQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0pvYkJvYXJkTmV4dEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0pvYkJvYXJkTmV4dEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucG9zdGluZ0JvYXJkQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XG4gIH1cbn1cbiIsIjxzeW1waG9ueS10d28tY29sdW1uLW1vZGFsLXRlbXBsYXRlICpuZ0lmPVwiIW1vZGVsLm5hdmlnYXRpb24uc2hvd0NhbmNlbFwiPlxuICA8c3ltcGhvbnktaDRcbiAgICAqbmdJZj1cIm1vZGVsLm5hdmlnYXRpb24uc2hvd0pvYkJvYXJkc1NlbGVjdGlvbiAmJiAhbW9kZWwuaXNMb2FkaW5nXCJcbiAgICBzZngtbW9kYWwtdGl0bGVcbiAgICA+U2VsZWN0IFlvdXIgSm9iIEFkIEJ1eXM8L3N5bXBob255LWg0XG4gID5cbiAgPHN5bXBob255LWg0ICpuZ0lmPVwibW9kZWwubmF2aWdhdGlvbi5zaG93T3JkZXJSZXZpZXdcIiBzZngtbW9kYWwtdGl0bGVcbiAgICA+UmV2aWV3IHlvdSBKb2IgQWQgQnV5czwvc3ltcGhvbnktaDRcbiAgPlxuICA8c3ltcGhvbnktaDQgKm5nSWY9XCJtb2RlbC5uYXZpZ2F0aW9uLnNob3dDb25maXJtYXRpb25cIiBzZngtbW9kYWwtdGl0bGVcbiAgICA+Q29uZmlybWF0aW9uIG9mIHlvdXIgSm9iIEFkIEJ1eXM8L3N5bXBob255LWg0XG4gID5cbiAgPHN5bXBob255LWg0ICpuZ0lmPVwibW9kZWwubmF2aWdhdGlvbi5zaG93UHJvY2Vzc2luZ1wiIHNmeC1tb2RhbC10aXRsZVxuICAgID5Qcm9jZXNzaW5nIE9yZGVyLi4uPC9zeW1waG9ueS1oNFxuICA+XG4gIDxzeW1waG9ueS1oNCAqbmdJZj1cIm1vZGVsLmlzTG9hZGluZ1wiIHNmeC1tb2RhbC10aXRsZVxuICAgID5Mb2FkaW5nIEpvYiBCb2FyZHMuLi48L3N5bXBob255LWg0XG4gID5cbiAgPHN5bXBob255LWljb25cbiAgICBzZngtY2xvc2UtYnV0dG9uXG4gICAgW2ljb25dPVwiJ3NpLWNsb3NlLW1vZGFsJ1wiXG4gICAgKGNsaWNrZWQpPVwib25DbG9zZUJ1dHRvbkNsaWNrKClcIlxuICA+PC9zeW1waG9ueS1pY29uPlxuICA8c3ltcGhvbnktaDUtd2l0aC1pY29uIHNmeC1tb2RhbC1zdWJ0aXRsZSBbbW9kZWxdPVwic3ViVGl0bGVcIj5cbiAgPC9zeW1waG9ueS1oNS13aXRoLWljb24+XG5cbiAgPHN5bXBob255LXR3by1jb2x1bW4tYm9keS10ZW1wbGF0ZVxuICAgICpuZ0lmPVwiIW1vZGVsLmlzTG9hZGluZyAmJiBtb2RlbC5uYXZpZ2F0aW9uLnNob3dKb2JCb2FyZHNTZWxlY3Rpb25cIlxuICAgIFtzaG93SGVhZGVyXT1cInRydWVcIlxuICAgIHNmeC1tb2RhbC1ib2R5LWFyZWFcbiAgPlxuICAgIDxzeW1waG9ueS1pbnB1dC10ZXh0XG4gICAgICBzZngtbGVmdC1jb2wtaGVhZGVyXG4gICAgICBbbm9NYXJnaW5dPVwidHJ1ZVwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlYXJjaCBBZCBCb2FyZHMnXCJcbiAgICAgIFtpY29uXT1cIidzaS1zZWFyY2gtbmV3J1wiXG4gICAgICAodGV4dENoYW5nZSk9XCJvbktleXdvcmRTZWFyY2goJGV2ZW50KVwiXG4gICAgPlxuICAgIDwvc3ltcGhvbnktaW5wdXQtdGV4dD5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHQtY29sLWhlYWRlci1pbm5lclwiIHNmeC1yaWdodC1jb2wtaGVhZGVyPlxuICAgICAgPHN5bXBob255LWg1LXdpdGgtaWNvblxuICAgICAgICBzZngtcmlnaHQtY29sLWhlYWRlclxuICAgICAgICAqbmdJZj1cIm1vZGVsLnNob3dGdW5kc1wiXG4gICAgICAgIGNsYXNzPVwicHVsbC1yaWdodFwiXG4gICAgICAgIFttb2RlbF09XCJmdW5kc0luZm9cIlxuICAgICAgPjwvc3ltcGhvbnktaDUtd2l0aC1pY29uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc2Z4LWxlZnQtY29sdW1uIGNsYXNzPVwicG9zdGluZy1ib2FyZHMgc2Z4LXByLTEwXCI+XG4gICAgICA8c3ltcGhvbnktYWR2ZXJ0aXNlLXBvc3Rpbmdib2FyZC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICBbbW9kZWxdPVwibW9kZWwuam9iQm9hcmRzXCJcbiAgICAgICAgKHBvc3RpbmdCb2FyZENoYW5nZSk9XCJvblBvc3RpbmdCb2FyZENoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L3N5bXBob255LWFkdmVydGlzZS1wb3N0aW5nYm9hcmQtc2VsZWN0aW9uLWxpc3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8c3ltcGhvbnktb3JkZXItc3VtbWFyeVxuICAgICAgc2Z4LXJpZ2h0LWNvbHVtblxuICAgICAgW21vZGVsXT1cIm9yZGVyU3VtbWFyeVwiXG4gICAgPjwvc3ltcGhvbnktb3JkZXItc3VtbWFyeT5cbiAgPC9zeW1waG9ueS10d28tY29sdW1uLWJvZHktdGVtcGxhdGU+XG5cbiAgPHN5bXBob255LXR3by1jb2x1bW4tYm9keS10ZW1wbGF0ZVxuICAgICpuZ0lmPVwiIW1vZGVsLmlzTG9hZGluZyAmJiBtb2RlbC5uYXZpZ2F0aW9uLnNob3dPcmRlclJldmlld1wiXG4gICAgc2Z4LW1vZGFsLWJvZHktYXJlYVxuICA+XG4gICAgPGRpdiBzZngtbGVmdC1jb2x1bW4gY2xhc3M9XCJwb3N0aW5nLWJvYXJkc1wiPlxuICAgICAgPHN5bXBob255LWFkdmVydGlzZS1vcmRlci1yZXZpZXc+PC9zeW1waG9ueS1hZHZlcnRpc2Utb3JkZXItcmV2aWV3PlxuICAgIDwvZGl2PlxuXG4gICAgPHN5bXBob255LW9yZGVyLXN1bW1hcnlcbiAgICAgIHNmeC1yaWdodC1jb2x1bW5cbiAgICAgIFttb2RlbF09XCJvcmRlclN1bW1hcnlcIlxuICAgID48L3N5bXBob255LW9yZGVyLXN1bW1hcnk+XG4gIDwvc3ltcGhvbnktdHdvLWNvbHVtbi1ib2R5LXRlbXBsYXRlPlxuXG4gIDxzeW1waG9ueS10d28tY29sdW1uLWJvZHktdGVtcGxhdGVcbiAgICAqbmdJZj1cIiFtb2RlbC5pc0xvYWRpbmcgJiYgbW9kZWwubmF2aWdhdGlvbi5zaG93Q29uZmlybWF0aW9uXCJcbiAgICBzZngtbW9kYWwtYm9keS1hcmVhXG4gID5cbiAgICA8c3ltcGhvbnktb3JkZXItc3VtbWFyeVxuICAgICAgc2Z4LWxlZnQtY29sdW1uXG4gICAgICBbbW9kZWxdPVwib3JkZXJTdW1tYXJ5XCJcbiAgICA+PC9zeW1waG9ueS1vcmRlci1zdW1tYXJ5PlxuICAgIDxkaXYgc2Z4LXJpZ2h0LWNvbHVtbiBjbGFzcz1cInBvc3RpbmctYm9hcmRzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RhZ2VcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJveCBib3VuY2UtN1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wbGV0ZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzeW1waG9ueS1oMj5Zb3VyIG9yZGVyIGlzIGNvbXBsZXRlPC9zeW1waG9ueS1oMj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWNjZXNzLWljb24tc3BhY2luZ1wiPlxuICAgICAgICAgICAgICA8c3ltcGhvbnktaWNvblxuICAgICAgICAgICAgICAgIFtpY29uXT1cIidzaS1jb25maXJtYXRpb24nXCJcbiAgICAgICAgICAgICAgICBbaWNvbkNvbG9yXT1cIicjMDBENTZCJ1wiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiJzUwcHgnXCJcbiAgICAgICAgICAgICAgPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3N5bXBob255LXR3by1jb2x1bW4tYm9keS10ZW1wbGF0ZT5cblxuICA8ZGl2XG4gICAgKm5nSWY9XCIhbW9kZWwuaXNMb2FkaW5nICYmIG1vZGVsLm5hdmlnYXRpb24uc2hvd1Byb2Nlc3NpbmdcIlxuICAgIHNmeC1tb2RhbC1ib2R5LWFyZWFcbiAgICBjbGFzcz1cInBvc3RpbmctYm9hcmRzIHNmeC1wLTMwXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJwcm9jZXNzaW5nLWNvbnRhaW5lclwiPlxuICAgICAgPHN5bXBob255LXBhcmFncmFwaFxuICAgICAgICA+PGI+U21hc2hGbHlYPC9iPiBpcyBzdWJtaXR0aW5nIHlvdXIgb3JkZXIgdG8geW91ciBzZWxlY3RlZCBqb2IgYm9hcmRzLlxuICAgICAgICBTb21lIG9yZGVycyBoYXBwZW4gaW1tZWRpYXRlbHksIHdoaWxlIG90aGVycyB0YWtlIGEgbGl0dGxlIG1vcmUgdGltZS5cbiAgICAgICAgQ2hlY2sgeW91ciBvcmRlciBzdGF0dXMgaWYgeW91IGRvbid0IHJlY2lldmUgYSBjb25maXJtYXRpb24gaW4gdGhlIG5leHRcbiAgICAgICAgMjRob3Vycy48L3N5bXBob255LXBhcmFncmFwaFxuICAgICAgPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzZngtbXQtODBcIj5cbiAgICAgIDxzeW1waG9ueS1zZngtbG9hZGVyPjwvc3ltcGhvbnktc2Z4LWxvYWRlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImxvYWRlci1jb250YWluZXJcIiAqbmdJZj1cIm1vZGVsLmlzTG9hZGluZ1wiIHNmeC1tb2RhbC1ib2R5LWFyZWE+XG4gICAgPHN5bXBob255LXNmeC1sb2FkZXI+PC9zeW1waG9ueS1zZngtbG9hZGVyPlxuICA8L2Rpdj5cblxuICA8c3ltcGhvbnktYnV0dG9uXG4gICAgKm5nSWY9XCJtb2RlbC5uYXZpZ2F0aW9uLnNob3dKb2JCb2FyZHNTZWxlY3Rpb25cIlxuICAgIHNmeC1idXR0b24tc2Vjb25kYXJ5XG4gICAgW3RleHRdPVwiJ0NhbmNlbCdcIlxuICAgIFtpc1NlY29uZGFyeV09XCJ0cnVlXCJcbiAgICBbaXNJbnZlcnNlXT1cInRydWVcIlxuICAgIChjbGlja2VkKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiXG4gID48L3N5bXBob255LWJ1dHRvbj5cbiAgPHN5bXBob255LWJ1dHRvblxuICAgICpuZ0lmPVwibW9kZWwubmF2aWdhdGlvbi5zaG93Sm9iQm9hcmRzU2VsZWN0aW9uXCJcbiAgICBzZngtYnV0dG9uLXByaW1hcnlcbiAgICBbdGV4dF09XCInUmV2aWV3IE9yZGVyJ1wiXG4gICAgW2Rpc2FibGVkXT1cImlzSm9iQm9hcmROZXh0QnV0dG9uRGlzYWJsZWRcIlxuICAgIFtpc0ludmVyc2VdPVwidHJ1ZVwiXG4gICAgKGNsaWNrZWQpPVwib25CdXR0b25DbGljaygkZXZlbnQpXCJcbiAgPjwvc3ltcGhvbnktYnV0dG9uPlxuXG4gIDxzeW1waG9ueS1idXR0b25cbiAgICAqbmdJZj1cIm1vZGVsLm5hdmlnYXRpb24uc2hvd09yZGVyUmV2aWV3XCJcbiAgICBzZngtYnV0dG9uLWJhY2tcbiAgICBbdGV4dF09XCInRWRpdCBPcmRlcidcIlxuICAgIFtpc1NlY29uZGFyeV09XCJ0cnVlXCJcbiAgICBbaXNJbnZlcnNlXT1cInRydWVcIlxuICAgIChjbGlja2VkKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiXG4gID48L3N5bXBob255LWJ1dHRvbj5cbiAgPHN5bXBob255LWJ1dHRvblxuICAgICpuZ0lmPVwibW9kZWwubmF2aWdhdGlvbi5zaG93T3JkZXJSZXZpZXdcIlxuICAgIHNmeC1idXR0b24tc2Vjb25kYXJ5XG4gICAgW3RleHRdPVwiJ0NhbmNlbCdcIlxuICAgIFtpc1NlY29uZGFyeV09XCJ0cnVlXCJcbiAgICBbaXNJbnZlcnNlXT1cInRydWVcIlxuICAgIChjbGlja2VkKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiXG4gID48L3N5bXBob255LWJ1dHRvbj5cbiAgPHN5bXBob255LWJ1dHRvblxuICAgICpuZ0lmPVwibW9kZWwubmF2aWdhdGlvbi5zaG93T3JkZXJSZXZpZXdcIlxuICAgIHNmeC1idXR0b24tcHJpbWFyeVxuICAgIFt0ZXh0XT1cIidCdXknXCJcbiAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgIFtpc0ludmVyc2VdPVwidHJ1ZVwiXG4gICAgKGNsaWNrZWQpPVwib25CdXR0b25DbGljaygkZXZlbnQpXCJcbiAgPjwvc3ltcGhvbnktYnV0dG9uPlxuXG4gIDxzeW1waG9ueS1idXR0b25cbiAgICAqbmdJZj1cIm1vZGVsLm5hdmlnYXRpb24uc2hvd0NvbmZpcm1hdGlvblwiXG4gICAgc2Z4LWJ1dHRvbi1wcmltYXJ5XG4gICAgW3RleHRdPVwiJ0ZpbmlzaCAmIENsb3NlJ1wiXG4gICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICBbaXNJbnZlcnNlXT1cInRydWVcIlxuICAgIChjbGlja2VkKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiXG4gID48L3N5bXBob255LWJ1dHRvbj5cbjwvc3ltcGhvbnktdHdvLWNvbHVtbi1tb2RhbC10ZW1wbGF0ZT5cbjxzeW1waG9ueS1jb25maXJtYXRpb24tbW9kYWxcbiAgKm5nSWY9XCIhbW9kZWwuaXNMb2FkaW5nICYmIG1vZGVsLm5hdmlnYXRpb24uc2hvd0NhbmNlbFwiXG4gIChidXR0b25DbGlja2VkKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiXG4gIChjbG9zZUJ1dHRvbkNsaWNrZWQpPVwib25DbG9zZUJ1dHRvbkNsaWNrKClcIlxuICBbbW9kZWxdPVwiY2FuY2VsQ29udGVudFwiXG4+XG48L3N5bXBob255LWNvbmZpcm1hdGlvbi1tb2RhbD5cbiJdfQ==