@ethlete/cdk 3.17.0 → 3.18.1
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/CHANGELOG.md +18 -0
- package/esm2022/lib/components/bracket/components/bracket/bracket.component.mjs +7 -7
- package/esm2022/lib/components/bracket/utils/bracket.utils.mjs +15 -11
- package/esm2022/lib/components/filter/filter-overlay/components/filter-overlay-page-outlet/filter-overlay-page-outlet.component.mjs +46 -0
- package/esm2022/lib/components/filter/filter-overlay/components/filter-overlay-page-outlet/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/components/index.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/components/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/constants/filter-overlay.constants.mjs +3 -0
- package/esm2022/lib/components/filter/filter-overlay/constants/index.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/constants/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/directives/filter-overlay-back-or-close/filter-overlay-back-or-close.directive.mjs +45 -0
- package/esm2022/lib/components/filter/filter-overlay/directives/filter-overlay-back-or-close/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/directives/filter-overlay-link/filter-overlay-link.directive.mjs +46 -0
- package/esm2022/lib/components/filter/filter-overlay/directives/filter-overlay-link/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/directives/filter-overlay-reset/filter-overlay-reset.directive.mjs +45 -0
- package/esm2022/lib/components/filter/filter-overlay/directives/filter-overlay-reset/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/directives/filter-overlay-submit/filter-overlay-submit.directive.mjs +45 -0
- package/esm2022/lib/components/filter/filter-overlay/directives/filter-overlay-submit/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/directives/index.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/directives/public-api.mjs +5 -0
- package/esm2022/lib/components/filter/filter-overlay/filter-overlay.imports.mjs +14 -0
- package/esm2022/lib/components/filter/filter-overlay/public-api.mjs +8 -0
- package/esm2022/lib/components/filter/filter-overlay/services/filter-overlay.service.mjs +37 -0
- package/esm2022/lib/components/filter/filter-overlay/services/index.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/services/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/types/filter-overlay-config.types.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/types/index.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/types/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/utils/filter-overlay-ref.mjs +56 -0
- package/esm2022/lib/components/filter/filter-overlay/utils/index.mjs +2 -0
- package/esm2022/lib/components/filter/filter-overlay/utils/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/public-api.mjs +3 -0
- package/esm2022/lib/components/filter/rich-filter/components/index.mjs +2 -0
- package/esm2022/lib/components/filter/rich-filter/components/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/rich-filter/components/rich-filter-host/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/rich-filter/components/rich-filter-host/rich-filter-host.component.mjs +66 -0
- package/esm2022/lib/components/filter/rich-filter/directives/index.mjs +2 -0
- package/esm2022/lib/components/filter/rich-filter/directives/public-api.mjs +5 -0
- package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-button/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-button/rich-filter-button.directive.mjs +32 -0
- package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-button-slot/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-button-slot/rich-filter-button-slot.directive.mjs +32 -0
- package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-content/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-content/rich-filter-content.directive.mjs +32 -0
- package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-top/public-api.mjs +2 -0
- package/esm2022/lib/components/filter/rich-filter/directives/rich-filter-top/rich-filter-top.directive.mjs +29 -0
- package/esm2022/lib/components/filter/rich-filter/public-api.mjs +4 -0
- package/esm2022/lib/components/filter/rich-filter/rich-filter.imports.mjs +10 -0
- package/esm2022/lib/components/forms/components/input/components/search-input/search-input.component.mjs +3 -3
- package/esm2022/lib/components/forms/components/input/directives/search-input/search-input.directive.mjs +3 -1
- package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.mjs +7 -1
- package/esm2022/lib/components/forms/components/select/components/select/directives/select/select.directive.mjs +2 -1
- package/esm2022/lib/components/forms/components/slider/components/slider/slider.component.mjs +3 -3
- package/esm2022/lib/components/masonry/components/masonry/masonry.component.mjs +10 -7
- package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-base.service.mjs +2 -2
- package/esm2022/lib/components/overlay/components/dialog/services/dialog-base.service.mjs +3 -3
- package/esm2022/lib/components/overlay/components/menu/menu-aim.mjs +1 -1
- package/esm2022/lib/components/overlay/components/overlay/services/overlay.service.mjs +4 -4
- package/esm2022/lib/components/pagination/services/pagination-head.service.mjs +3 -3
- package/esm2022/lib/components/public-api.mjs +2 -2
- package/esm2022/lib/components/query-error/components/query-error/query-error.component.mjs +3 -3
- package/esm2022/lib/components/query-error/directives/query-error/query-error.directive.mjs +1 -1
- package/esm2022/lib/components/sort/partials/sort/sort.directive.mjs +1 -1
- package/esm2022/lib/services/swipe-handler.service.mjs +1 -1
- package/fesm2022/ethlete-cdk.mjs +255 -53
- package/fesm2022/ethlete-cdk.mjs.map +1 -1
- package/lib/components/bracket/utils/bracket.utils.d.ts +1 -1
- package/lib/components/{filter-overlay → filter/filter-overlay}/components/filter-overlay-page-outlet/filter-overlay-page-outlet.component.d.ts +3 -2
- package/lib/components/{filter-overlay → filter/filter-overlay}/services/filter-overlay.service.d.ts +1 -1
- package/lib/components/{filter-overlay → filter/filter-overlay}/types/filter-overlay-config.types.d.ts +1 -5
- package/lib/components/{filter-overlay → filter/filter-overlay}/utils/filter-overlay-ref.d.ts +4 -4
- package/lib/components/filter/public-api.d.ts +2 -0
- package/lib/components/filter/rich-filter/components/index.d.ts +1 -0
- package/lib/components/filter/rich-filter/components/public-api.d.ts +1 -0
- package/lib/components/filter/rich-filter/components/rich-filter-host/public-api.d.ts +1 -0
- package/lib/components/filter/rich-filter/components/rich-filter-host/rich-filter-host.component.d.ts +23 -0
- package/lib/components/filter/rich-filter/directives/index.d.ts +1 -0
- package/lib/components/filter/rich-filter/directives/public-api.d.ts +4 -0
- package/lib/components/filter/rich-filter/directives/rich-filter-button/public-api.d.ts +1 -0
- package/lib/components/filter/rich-filter/directives/rich-filter-button/rich-filter-button.directive.d.ts +8 -0
- package/lib/components/filter/rich-filter/directives/rich-filter-button-slot/public-api.d.ts +1 -0
- package/lib/components/filter/rich-filter/directives/rich-filter-button-slot/rich-filter-button-slot.directive.d.ts +10 -0
- package/lib/components/filter/rich-filter/directives/rich-filter-content/public-api.d.ts +1 -0
- package/lib/components/filter/rich-filter/directives/rich-filter-content/rich-filter-content.directive.d.ts +10 -0
- package/lib/components/filter/rich-filter/directives/rich-filter-top/public-api.d.ts +1 -0
- package/lib/components/filter/rich-filter/directives/rich-filter-top/rich-filter-top.directive.d.ts +8 -0
- package/lib/components/filter/rich-filter/public-api.d.ts +3 -0
- package/lib/components/filter/rich-filter/rich-filter.imports.d.ts +3 -0
- package/lib/components/public-api.d.ts +1 -1
- package/package.json +5 -3
- package/esm2022/lib/components/filter-overlay/components/filter-overlay-page-outlet/filter-overlay-page-outlet.component.mjs +0 -36
- package/esm2022/lib/components/filter-overlay/components/filter-overlay-page-outlet/public-api.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/components/index.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/components/public-api.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/constants/filter-overlay.constants.mjs +0 -3
- package/esm2022/lib/components/filter-overlay/constants/index.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/constants/public-api.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/directives/filter-overlay-back-or-close/filter-overlay-back-or-close.directive.mjs +0 -45
- package/esm2022/lib/components/filter-overlay/directives/filter-overlay-back-or-close/public-api.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/directives/filter-overlay-link/filter-overlay-link.directive.mjs +0 -46
- package/esm2022/lib/components/filter-overlay/directives/filter-overlay-link/public-api.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/directives/filter-overlay-reset/filter-overlay-reset.directive.mjs +0 -45
- package/esm2022/lib/components/filter-overlay/directives/filter-overlay-reset/public-api.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/directives/filter-overlay-submit/filter-overlay-submit.directive.mjs +0 -45
- package/esm2022/lib/components/filter-overlay/directives/filter-overlay-submit/public-api.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/directives/index.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/directives/public-api.mjs +0 -5
- package/esm2022/lib/components/filter-overlay/filter-overlay.imports.mjs +0 -14
- package/esm2022/lib/components/filter-overlay/public-api.mjs +0 -8
- package/esm2022/lib/components/filter-overlay/services/filter-overlay.service.mjs +0 -37
- package/esm2022/lib/components/filter-overlay/services/index.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/services/public-api.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/types/filter-overlay-config.types.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/types/index.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/types/public-api.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/utils/filter-overlay-ref.mjs +0 -60
- package/esm2022/lib/components/filter-overlay/utils/index.mjs +0 -2
- package/esm2022/lib/components/filter-overlay/utils/public-api.mjs +0 -2
- /package/lib/components/{filter-overlay → filter/filter-overlay}/components/filter-overlay-page-outlet/public-api.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/components/index.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/components/public-api.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/constants/filter-overlay.constants.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/constants/index.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/constants/public-api.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/directives/filter-overlay-back-or-close/filter-overlay-back-or-close.directive.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/directives/filter-overlay-back-or-close/public-api.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/directives/filter-overlay-link/filter-overlay-link.directive.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/directives/filter-overlay-link/public-api.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/directives/filter-overlay-reset/filter-overlay-reset.directive.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/directives/filter-overlay-reset/public-api.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/directives/filter-overlay-submit/filter-overlay-submit.directive.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/directives/filter-overlay-submit/public-api.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/directives/index.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/directives/public-api.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/filter-overlay.imports.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/public-api.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/services/index.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/services/public-api.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/types/index.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/types/public-api.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/utils/index.d.ts +0 -0
- /package/lib/components/{filter-overlay → filter/filter-overlay}/utils/public-api.d.ts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @ethlete/cdk
|
|
2
2
|
|
|
3
|
+
## 3.18.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`8e413111`](https://github.com/ethlete-io/ethdk/commit/8e4131116df87095ab5ce83266a842ff47a653b4) Thanks [@TomTomB](https://github.com/TomTomB)! - Do not close an onverlay if esc gets pressed inside a non empty seach input
|
|
8
|
+
|
|
9
|
+
- [`5de622fc`](https://github.com/ethlete-io/ethdk/commit/5de622fc257cc90134ae3ba9ab4774986ee78236) Thanks [@TomTomB](https://github.com/TomTomB)! - Fix current active route getting lost inside filter overlay sometimes
|
|
10
|
+
|
|
11
|
+
- [`4c32357c`](https://github.com/ethlete-io/ethdk/commit/4c32357c4a20597d32ce75cc17b1924db04cbb8a) Thanks [@TomTomB](https://github.com/TomTomB)! - Dont close overlays if esc gets pressed inside an open select or combobox
|
|
12
|
+
|
|
13
|
+
- [`e8c76d30`](https://github.com/ethlete-io/ethdk/commit/e8c76d30e1cd09f600710e24fed0bbeae8215954) Thanks [@TomTomB](https://github.com/TomTomB)! - Add backwards animation to filter overlay
|
|
14
|
+
|
|
15
|
+
## 3.18.0
|
|
16
|
+
|
|
17
|
+
### Minor Changes
|
|
18
|
+
|
|
19
|
+
- [`fe654949`](https://github.com/ethlete-io/ethdk/commit/fe654949e47909e82a00de34aed1894c5d4afeb7) Thanks [@TomTomB](https://github.com/TomTomB)! - Add rich filter component and directives
|
|
20
|
+
|
|
3
21
|
## 3.17.0
|
|
4
22
|
|
|
5
23
|
### Minor Changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
|
|
3
3
|
import { AsyncPipe, NgClass, NgForOf, NgIf } from '@angular/common';
|
|
4
|
-
import { ChangeDetectionStrategy, Component, ElementRef, HostBinding,
|
|
4
|
+
import { ChangeDetectionStrategy, Component, ElementRef, HostBinding, Injector, Input, ViewEncapsulation, inject, } from '@angular/core';
|
|
5
5
|
import { LetDirective, Memo, ScrollObserverFirstElementDirective, ScrollObserverLastElementDirective, } from '@ethlete/core';
|
|
6
6
|
import { BehaviorSubject, map } from 'rxjs';
|
|
7
7
|
import { BRACKET_CONFIG_TOKEN, BRACKET_MATCH_ID_TOKEN, BRACKET_ROUND_ID_TOKEN, BRACKET_TOKEN } from '../../constants';
|
|
@@ -132,13 +132,13 @@ export class BracketComponent {
|
|
|
132
132
|
// for connecting the last looser match and the respective semi final winner match
|
|
133
133
|
if (isDoubleElimination &&
|
|
134
134
|
(!nextRound || nextRound.data.type === 'third_place') &&
|
|
135
|
-
currentRound
|
|
135
|
+
currentRound?.data.type === 'loser_bracket') {
|
|
136
136
|
return bracket.totalRowCount - 1;
|
|
137
137
|
}
|
|
138
138
|
if (!nextRound) {
|
|
139
139
|
return 1;
|
|
140
140
|
}
|
|
141
|
-
if (nextRound.matches.length === currentRound
|
|
141
|
+
if (nextRound.matches.length === currentRound?.matches.length) {
|
|
142
142
|
return 1;
|
|
143
143
|
}
|
|
144
144
|
if (!isDoubleElimination) {
|
|
@@ -146,7 +146,7 @@ export class BracketComponent {
|
|
|
146
146
|
}
|
|
147
147
|
else {
|
|
148
148
|
let rndIndex = roundIndex;
|
|
149
|
-
if (currentRound
|
|
149
|
+
if (currentRound?.data.type === 'loser_bracket') {
|
|
150
150
|
const totalWinnerRounds = bracket.winnerRoundCount;
|
|
151
151
|
const looserRoundIndex = currentRound.data.type === 'loser_bracket' ? roundIndex - totalWinnerRounds : roundIndex;
|
|
152
152
|
rndIndex = looserRoundIndex / 2;
|
|
@@ -228,7 +228,7 @@ export class BracketComponent {
|
|
|
228
228
|
provide: BRACKET_TOKEN,
|
|
229
229
|
useExisting: BracketComponent,
|
|
230
230
|
},
|
|
231
|
-
], ngImport: i0, template: "<ng-container *ngIf=\"_bracket$ | async as bracket\">\n <ng-container *ngFor=\"let round of bracket.bracketRounds; trackBy: trackByRound; let roundIndex = index\">\n <div\n *ngIf=\"_config.roundHeaderComponent\"\n [etScrollObserverFirstElement]=\"roundIndex === 0\"\n [etScrollObserverLastElement]=\"roundIndex === bracket.winnerRoundCount - 1\"\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place' ? round.row.start + 1 : round.row.start\n \"\n [attr.special-align-end]=\"\n round.data.type === 'third_place' &&\n bracket.bracketType === 'single' &&\n bracket.firstWinnerRound.matches.length <= 4\n ? 'true'\n : 'false'\n \"\n [attr.is-loser-round-header]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && bracket.bracketType === 'double'\n \"\n class=\"et-bracket-round\"\n >\n <ng-container *cdkPortalOutlet=\"createRoundPortal(round, _config.roundHeaderComponent)\" />\n </div>\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex - 1] as lastRound\">\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex + 1] as nextRound\">\n <ng-container *ngFor=\"let match of round.matches; trackBy: trackByMatch; let matchIndex = index\">\n <div\n *ngIf=\"getConnectedMatches(match, bracket) as connectedMatches\"\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.start + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.start + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_re]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.end + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.end + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_line-multi-after]=\"getLineMultiAfter(roundIndex, bracket)\"\n [attr.et-has-parents]=\"!!connectedMatches.previousMatches?.length\"\n [attr.et-has-child]=\"!!connectedMatches.nextMatch\"\n [attr.et-child-connector-shape]=\"getChildConnectorShape(match, connectedMatches.nextMatch)\"\n [attr.line-span-before]=\"getLineSpan(lastRound, lastRound, round, nextRound, bracket)\"\n [attr.line-span-current]=\"getLineSpan(round, lastRound, round, nextRound, bracket)\"\n [attr.line-span-after]=\"getLineSpan(nextRound, lastRound, round, nextRound, bracket)\"\n [attr.is-first-loser-round-match]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && matchIndex === 0\n \"\n [attr.is-last-lower-bracket-match]=\"\n round.data.type === 'loser_bracket' &&\n (roundIndex === bracket.bracketRounds.length - 1 || nextRound?.data?.type === 'third_place')\n \"\n class=\"et-bracket-match\"\n >\n <ng-container *cdkPortalOutlet=\"createMatchPortal(match, _config.matchComponent)\" />\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".et-bracket{--connection-color: rgb(101, 101, 101);--connection-radius: 10px;--connection-size: 1.5px;display:grid;grid-auto-columns:min-content;column-gap:var(--_bracket-column-gap);row-gap:var(--_bracket-row-gap)}.et-bracket .et-bracket-round{grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_rs);height:var(--_round-header-height)}.et-bracket .et-bracket-round[special-align-end=true]{align-self:flex-end}.et-bracket[has-round-headers=false][is-first-loser-round-match=true],.et-bracket[has-round-headers=true] [is-loser-round-header=true]{margin-top:var(--_upper-lower-bracket-gap)}.et-bracket .et-bracket-match{--_gap-x-half: calc(var(--_bracket-column-gap) / 2);--_gap-y-half: calc(var(--_bracket-row-gap) / 2);--_bracket-item-height-half: calc(var(--_bracket-item-height) / 2);--_bracket-item-width-half: calc(var(--_bracket-item-width) / 2);--_connection-size-half: calc(var(--connection-size) / 2);position:relative;grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_re);inline-size:var(--_bracket-item-width);block-size:var(--_bracket-item-height);justify-self:center;align-self:center}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"0\"]{--_gap-full-width-before: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"2\"]{--_gap-full-width-before: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"0\"]{--_gap-full-width-before: calc( var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half) )}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"0\"]{--_gap-full-width-after: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"2\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"0\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half))}.et-bracket .et-bracket-match[et-has-parents=true]:before{content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-before) / 2);block-size:0;border-block-start:var(--connection-size) solid var(--connection-color);inset-inline-end:100%;inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true]:after{--_height-multi: calc(var(--_bracket-item-height-half) * var(--_line-multi-after));--_gap-y-multi: calc(var(--_gap-y-half) * var(--_line-multi-after));content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-after) / 2);block-size:calc(var(--_height-multi) + var(--_gap-y-multi));inset-inline-start:100%}.et-bracket .et-bracket-match[et-has-child=true][is-last-lower-bracket-match=true]:after{--_height-multi: calc( (var(--_bracket-item-height-half) * var(--_line-multi-after)) + var(--_upper-lower-bracket-gap) + var(--_round-header-height) )}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=down]:after{border-block-start:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-start-end-radius:var(--connection-radius);inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=up]:after{border-block-end:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-end-end-radius:var(--connection-radius);inset-block-end:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=straight]:after{border-block-start:var(--connection-size) solid var(--connection-color);inset-block-start:calc(50% - var(--_connection-size-half));block-size:0}\n"], dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: LetDirective, selector: "[etLet]", inputs: ["etLet"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: ScrollObserverFirstElementDirective, selector: "[etScrollObserverFirstElement]", inputs: ["etScrollObserverFirstElement"] }, { kind: "directive", type: ScrollObserverLastElementDirective, selector: "[etScrollObserverLastElement]", inputs: ["etScrollObserverLastElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
231
|
+
], ngImport: i0, template: "<ng-container *ngIf=\"_bracket$ | async as bracket\">\n <ng-container *ngFor=\"let round of bracket.bracketRounds; trackBy: trackByRound; let roundIndex = index\">\n <div\n *ngIf=\"_config.roundHeaderComponent\"\n [etScrollObserverFirstElement]=\"roundIndex === 0\"\n [etScrollObserverLastElement]=\"roundIndex === bracket.winnerRoundCount - 1\"\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place' ? round.row.start + 1 : round.row.start\n \"\n [attr.special-align-end]=\"\n round.data.type === 'third_place' &&\n bracket.bracketType === 'single' &&\n bracket.firstWinnerRound &&\n bracket.firstWinnerRound.matches.length <= 4\n ? 'true'\n : 'false'\n \"\n [attr.is-loser-round-header]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && bracket.bracketType === 'double'\n \"\n class=\"et-bracket-round\"\n >\n <ng-container *cdkPortalOutlet=\"createRoundPortal(round, _config.roundHeaderComponent)\" />\n </div>\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex - 1] ?? null as lastRound\">\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex + 1] ?? null as nextRound\">\n <ng-container *ngFor=\"let match of round.matches; trackBy: trackByMatch; let matchIndex = index\">\n <div\n *ngIf=\"getConnectedMatches(match, bracket) as connectedMatches\"\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.start + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.start + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_re]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.end + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.end + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_line-multi-after]=\"getLineMultiAfter(roundIndex, bracket)\"\n [attr.et-has-parents]=\"!!connectedMatches.previousMatches?.length\"\n [attr.et-has-child]=\"!!connectedMatches.nextMatch\"\n [attr.et-child-connector-shape]=\"getChildConnectorShape(match, connectedMatches.nextMatch)\"\n [attr.line-span-before]=\"getLineSpan(lastRound, lastRound, round, nextRound, bracket)\"\n [attr.line-span-current]=\"getLineSpan(round, lastRound, round, nextRound, bracket)\"\n [attr.line-span-after]=\"getLineSpan(nextRound, lastRound, round, nextRound, bracket)\"\n [attr.is-first-loser-round-match]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && matchIndex === 0\n \"\n [attr.is-last-lower-bracket-match]=\"\n round.data.type === 'loser_bracket' &&\n (roundIndex === bracket.bracketRounds.length - 1 || nextRound?.data?.type === 'third_place')\n \"\n class=\"et-bracket-match\"\n >\n <ng-container *cdkPortalOutlet=\"createMatchPortal(match, _config.matchComponent)\" />\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".et-bracket{--connection-color: rgb(101, 101, 101);--connection-radius: 10px;--connection-size: 1.5px;display:grid;grid-auto-columns:min-content;column-gap:var(--_bracket-column-gap);row-gap:var(--_bracket-row-gap)}.et-bracket .et-bracket-round{grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_rs);height:var(--_round-header-height)}.et-bracket .et-bracket-round[special-align-end=true]{align-self:flex-end}.et-bracket[has-round-headers=false][is-first-loser-round-match=true],.et-bracket[has-round-headers=true] [is-loser-round-header=true]{margin-top:var(--_upper-lower-bracket-gap)}.et-bracket .et-bracket-match{--_gap-x-half: calc(var(--_bracket-column-gap) / 2);--_gap-y-half: calc(var(--_bracket-row-gap) / 2);--_bracket-item-height-half: calc(var(--_bracket-item-height) / 2);--_bracket-item-width-half: calc(var(--_bracket-item-width) / 2);--_connection-size-half: calc(var(--connection-size) / 2);position:relative;grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_re);inline-size:var(--_bracket-item-width);block-size:var(--_bracket-item-height);justify-self:center;align-self:center}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"0\"]{--_gap-full-width-before: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"2\"]{--_gap-full-width-before: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"0\"]{--_gap-full-width-before: calc( var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half) )}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"0\"]{--_gap-full-width-after: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"2\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"0\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half))}.et-bracket .et-bracket-match[et-has-parents=true]:before{content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-before) / 2);block-size:0;border-block-start:var(--connection-size) solid var(--connection-color);inset-inline-end:100%;inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true]:after{--_height-multi: calc(var(--_bracket-item-height-half) * var(--_line-multi-after));--_gap-y-multi: calc(var(--_gap-y-half) * var(--_line-multi-after));content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-after) / 2);block-size:calc(var(--_height-multi) + var(--_gap-y-multi));inset-inline-start:100%}.et-bracket .et-bracket-match[et-has-child=true][is-last-lower-bracket-match=true]:after{--_height-multi: calc( (var(--_bracket-item-height-half) * var(--_line-multi-after)) + var(--_upper-lower-bracket-gap) + var(--_round-header-height) )}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=down]:after{border-block-start:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-start-end-radius:var(--connection-radius);inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=up]:after{border-block-end:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-end-end-radius:var(--connection-radius);inset-block-end:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=straight]:after{border-block-start:var(--connection-size) solid var(--connection-color);inset-block-start:calc(50% - var(--_connection-size-half));block-size:0}\n"], dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: LetDirective, selector: "[etLet]", inputs: ["etLet"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: ScrollObserverFirstElementDirective, selector: "[etScrollObserverFirstElement]", inputs: ["etScrollObserverFirstElement"] }, { kind: "directive", type: ScrollObserverLastElementDirective, selector: "[etScrollObserverLastElement]", inputs: ["etScrollObserverLastElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
232
232
|
}
|
|
233
233
|
__decorate([
|
|
234
234
|
Memo({
|
|
@@ -318,7 +318,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
|
|
|
318
318
|
provide: BRACKET_TOKEN,
|
|
319
319
|
useExisting: BracketComponent,
|
|
320
320
|
},
|
|
321
|
-
], template: "<ng-container *ngIf=\"_bracket$ | async as bracket\">\n <ng-container *ngFor=\"let round of bracket.bracketRounds; trackBy: trackByRound; let roundIndex = index\">\n <div\n *ngIf=\"_config.roundHeaderComponent\"\n [etScrollObserverFirstElement]=\"roundIndex === 0\"\n [etScrollObserverLastElement]=\"roundIndex === bracket.winnerRoundCount - 1\"\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place' ? round.row.start + 1 : round.row.start\n \"\n [attr.special-align-end]=\"\n round.data.type === 'third_place' &&\n bracket.bracketType === 'single' &&\n bracket.firstWinnerRound.matches.length <= 4\n ? 'true'\n : 'false'\n \"\n [attr.is-loser-round-header]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && bracket.bracketType === 'double'\n \"\n class=\"et-bracket-round\"\n >\n <ng-container *cdkPortalOutlet=\"createRoundPortal(round, _config.roundHeaderComponent)\" />\n </div>\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex - 1] as lastRound\">\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex + 1] as nextRound\">\n <ng-container *ngFor=\"let match of round.matches; trackBy: trackByMatch; let matchIndex = index\">\n <div\n *ngIf=\"getConnectedMatches(match, bracket) as connectedMatches\"\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.start + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.start + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_re]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.end + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.end + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_line-multi-after]=\"getLineMultiAfter(roundIndex, bracket)\"\n [attr.et-has-parents]=\"!!connectedMatches.previousMatches?.length\"\n [attr.et-has-child]=\"!!connectedMatches.nextMatch\"\n [attr.et-child-connector-shape]=\"getChildConnectorShape(match, connectedMatches.nextMatch)\"\n [attr.line-span-before]=\"getLineSpan(lastRound, lastRound, round, nextRound, bracket)\"\n [attr.line-span-current]=\"getLineSpan(round, lastRound, round, nextRound, bracket)\"\n [attr.line-span-after]=\"getLineSpan(nextRound, lastRound, round, nextRound, bracket)\"\n [attr.is-first-loser-round-match]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && matchIndex === 0\n \"\n [attr.is-last-lower-bracket-match]=\"\n round.data.type === 'loser_bracket' &&\n (roundIndex === bracket.bracketRounds.length - 1 || nextRound?.data?.type === 'third_place')\n \"\n class=\"et-bracket-match\"\n >\n <ng-container *cdkPortalOutlet=\"createMatchPortal(match, _config.matchComponent)\" />\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".et-bracket{--connection-color: rgb(101, 101, 101);--connection-radius: 10px;--connection-size: 1.5px;display:grid;grid-auto-columns:min-content;column-gap:var(--_bracket-column-gap);row-gap:var(--_bracket-row-gap)}.et-bracket .et-bracket-round{grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_rs);height:var(--_round-header-height)}.et-bracket .et-bracket-round[special-align-end=true]{align-self:flex-end}.et-bracket[has-round-headers=false][is-first-loser-round-match=true],.et-bracket[has-round-headers=true] [is-loser-round-header=true]{margin-top:var(--_upper-lower-bracket-gap)}.et-bracket .et-bracket-match{--_gap-x-half: calc(var(--_bracket-column-gap) / 2);--_gap-y-half: calc(var(--_bracket-row-gap) / 2);--_bracket-item-height-half: calc(var(--_bracket-item-height) / 2);--_bracket-item-width-half: calc(var(--_bracket-item-width) / 2);--_connection-size-half: calc(var(--connection-size) / 2);position:relative;grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_re);inline-size:var(--_bracket-item-width);block-size:var(--_bracket-item-height);justify-self:center;align-self:center}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"0\"]{--_gap-full-width-before: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"2\"]{--_gap-full-width-before: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"0\"]{--_gap-full-width-before: calc( var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half) )}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"0\"]{--_gap-full-width-after: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"2\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"0\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half))}.et-bracket .et-bracket-match[et-has-parents=true]:before{content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-before) / 2);block-size:0;border-block-start:var(--connection-size) solid var(--connection-color);inset-inline-end:100%;inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true]:after{--_height-multi: calc(var(--_bracket-item-height-half) * var(--_line-multi-after));--_gap-y-multi: calc(var(--_gap-y-half) * var(--_line-multi-after));content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-after) / 2);block-size:calc(var(--_height-multi) + var(--_gap-y-multi));inset-inline-start:100%}.et-bracket .et-bracket-match[et-has-child=true][is-last-lower-bracket-match=true]:after{--_height-multi: calc( (var(--_bracket-item-height-half) * var(--_line-multi-after)) + var(--_upper-lower-bracket-gap) + var(--_round-header-height) )}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=down]:after{border-block-start:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-start-end-radius:var(--connection-radius);inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=up]:after{border-block-end:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-end-end-radius:var(--connection-radius);inset-block-end:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=straight]:after{border-block-start:var(--connection-size) solid var(--connection-color);inset-block-start:calc(50% - var(--_connection-size-half));block-size:0}\n"] }]
|
|
321
|
+
], template: "<ng-container *ngIf=\"_bracket$ | async as bracket\">\n <ng-container *ngFor=\"let round of bracket.bracketRounds; trackBy: trackByRound; let roundIndex = index\">\n <div\n *ngIf=\"_config.roundHeaderComponent\"\n [etScrollObserverFirstElement]=\"roundIndex === 0\"\n [etScrollObserverLastElement]=\"roundIndex === bracket.winnerRoundCount - 1\"\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place' ? round.row.start + 1 : round.row.start\n \"\n [attr.special-align-end]=\"\n round.data.type === 'third_place' &&\n bracket.bracketType === 'single' &&\n bracket.firstWinnerRound &&\n bracket.firstWinnerRound.matches.length <= 4\n ? 'true'\n : 'false'\n \"\n [attr.is-loser-round-header]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && bracket.bracketType === 'double'\n \"\n class=\"et-bracket-round\"\n >\n <ng-container *cdkPortalOutlet=\"createRoundPortal(round, _config.roundHeaderComponent)\" />\n </div>\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex - 1] ?? null as lastRound\">\n <ng-container *etLet=\"bracket.bracketRounds[roundIndex + 1] ?? null as nextRound\">\n <ng-container *ngFor=\"let match of round.matches; trackBy: trackByMatch; let matchIndex = index\">\n <div\n *ngIf=\"getConnectedMatches(match, bracket) as connectedMatches\"\n [style.--_cs]=\"round.column.start\"\n [style.--_ce]=\"round.column.end\"\n [style.--_rs]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.start + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.start + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_re]=\"\n round.data.type === 'loser_bracket' || round.data.type === 'third_place'\n ? match.row.end + (_config.roundHeaderComponent ? 2 : 0)\n : match.row.end + (_config.roundHeaderComponent ? 1 : 0)\n \"\n [style.--_line-multi-after]=\"getLineMultiAfter(roundIndex, bracket)\"\n [attr.et-has-parents]=\"!!connectedMatches.previousMatches?.length\"\n [attr.et-has-child]=\"!!connectedMatches.nextMatch\"\n [attr.et-child-connector-shape]=\"getChildConnectorShape(match, connectedMatches.nextMatch)\"\n [attr.line-span-before]=\"getLineSpan(lastRound, lastRound, round, nextRound, bracket)\"\n [attr.line-span-current]=\"getLineSpan(round, lastRound, round, nextRound, bracket)\"\n [attr.line-span-after]=\"getLineSpan(nextRound, lastRound, round, nextRound, bracket)\"\n [attr.is-first-loser-round-match]=\"\n (round.data.type === 'loser_bracket' || round.data.type === 'third_place') && matchIndex === 0\n \"\n [attr.is-last-lower-bracket-match]=\"\n round.data.type === 'loser_bracket' &&\n (roundIndex === bracket.bracketRounds.length - 1 || nextRound?.data?.type === 'third_place')\n \"\n class=\"et-bracket-match\"\n >\n <ng-container *cdkPortalOutlet=\"createMatchPortal(match, _config.matchComponent)\" />\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".et-bracket{--connection-color: rgb(101, 101, 101);--connection-radius: 10px;--connection-size: 1.5px;display:grid;grid-auto-columns:min-content;column-gap:var(--_bracket-column-gap);row-gap:var(--_bracket-row-gap)}.et-bracket .et-bracket-round{grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_rs);height:var(--_round-header-height)}.et-bracket .et-bracket-round[special-align-end=true]{align-self:flex-end}.et-bracket[has-round-headers=false][is-first-loser-round-match=true],.et-bracket[has-round-headers=true] [is-loser-round-header=true]{margin-top:var(--_upper-lower-bracket-gap)}.et-bracket .et-bracket-match{--_gap-x-half: calc(var(--_bracket-column-gap) / 2);--_gap-y-half: calc(var(--_bracket-row-gap) / 2);--_bracket-item-height-half: calc(var(--_bracket-item-height) / 2);--_bracket-item-width-half: calc(var(--_bracket-item-width) / 2);--_connection-size-half: calc(var(--connection-size) / 2);position:relative;grid-column:var(--_cs)/var(--_ce);grid-row:var(--_rs)/var(--_re);inline-size:var(--_bracket-item-width);block-size:var(--_bracket-item-height);justify-self:center;align-self:center}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"0\"]{--_gap-full-width-before: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"2\"]{--_gap-full-width-before: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-before=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-before=\"2\"][line-span-current=\"0\"]{--_gap-full-width-before: calc( var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half) )}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"0\"]{--_gap-full-width-after: var(--_bracket-column-gap)}.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"2\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) * 2 + var(--_bracket-item-width))}.et-bracket .et-bracket-match[line-span-after=\"0\"][line-span-current=\"2\"],.et-bracket .et-bracket-match[line-span-after=\"2\"][line-span-current=\"0\"]{--_gap-full-width-after: calc(var(--_bracket-column-gap) + (var(--_bracket-item-width) / 2) + var(--_gap-x-half))}.et-bracket .et-bracket-match[et-has-parents=true]:before{content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-before) / 2);block-size:0;border-block-start:var(--connection-size) solid var(--connection-color);inset-inline-end:100%;inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true]:after{--_height-multi: calc(var(--_bracket-item-height-half) * var(--_line-multi-after));--_gap-y-multi: calc(var(--_gap-y-half) * var(--_line-multi-after));content:\"\";position:absolute;inline-size:calc(var(--_gap-full-width-after) / 2);block-size:calc(var(--_height-multi) + var(--_gap-y-multi));inset-inline-start:100%}.et-bracket .et-bracket-match[et-has-child=true][is-last-lower-bracket-match=true]:after{--_height-multi: calc( (var(--_bracket-item-height-half) * var(--_line-multi-after)) + var(--_upper-lower-bracket-gap) + var(--_round-header-height) )}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=down]:after{border-block-start:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-start-end-radius:var(--connection-radius);inset-block-start:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=up]:after{border-block-end:var(--connection-size) solid var(--connection-color);border-inline-end:var(--connection-size) solid var(--connection-color);border-end-end-radius:var(--connection-radius);inset-block-end:calc(50% - var(--_connection-size-half))}.et-bracket .et-bracket-match[et-has-child=true][et-child-connector-shape=straight]:after{border-block-start:var(--connection-size) solid var(--connection-color);inset-block-start:calc(50% - var(--_connection-size-half));block-size:0}\n"] }]
|
|
322
322
|
}], propDecorators: { itemWith: [{
|
|
323
323
|
type: Input
|
|
324
324
|
}], itemHeight: [{
|
|
@@ -339,4 +339,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
|
|
|
339
339
|
type: HostBinding,
|
|
340
340
|
args: ['attr.has-round-headers']
|
|
341
341
|
}], getConnectedMatches: [], getChildConnectorShape: [], getLineMultiAfter: [], getLineSpan: [], createRoundPortal: [], createMatchPortal: [], _getRoundById: [], _getPreviousMatches: [], _getNextMatch: [] } });
|
|
342
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhY2tldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvYnJhY2tldC9jb21wb25lbnRzL2JyYWNrZXQvYnJhY2tldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvYnJhY2tldC9jb21wb25lbnRzL2JyYWNrZXQvYnJhY2tldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGVBQWUsRUFBaUIsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBRUwsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxZQUFZLEVBQ1osSUFBSSxFQUNKLG1DQUFtQyxFQUNuQyxrQ0FBa0MsR0FDbkMsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRILE9BQU8sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7QUE4QnhFLE1BQU0sT0FBTyxnQkFBZ0I7SUEzQjdCO1FBNEJVLGdCQUFXLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUMx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S0FBSztnQkFXRixNQUFNO3NCQURULEtBQUs7Z0JBV0YsaUJBQWlCO3NCQURwQixLQUFLO2dCQW9CRixlQUFlO3NCQURsQixLQUFLO2dCQVdGLGVBQWU7c0JBRGxCLFdBQVc7dUJBQUMsd0JBQXdCO2dCQXVCM0IsbUJBQW1CLE1BY25CLHNCQUFzQixNQWdDdEIsaUJBQWlCLE1BaURqQixXQUFXLE1BZ0NYLGlCQUFpQixNQW1CakIsaUJBQWlCLE1BaUJuQixhQUFhLE1BUWIsbUJBQW1CLE1Ba0JuQixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsLCBDb21wb25lbnRUeXBlLCBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdGb3JPZiwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgaW5qZWN0LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIFRyYWNrQnlGdW5jdGlvbixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTGV0RGlyZWN0aXZlLFxuICBNZW1vLFxuICBTY3JvbGxPYnNlcnZlckZpcnN0RWxlbWVudERpcmVjdGl2ZSxcbiAgU2Nyb2xsT2JzZXJ2ZXJMYXN0RWxlbWVudERpcmVjdGl2ZSxcbn0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IH0gZnJvbSAnQGV0aGxldGUvdHlwZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJSQUNLRVRfQ09ORklHX1RPS0VOLCBCUkFDS0VUX01BVENIX0lEX1RPS0VOLCBCUkFDS0VUX1JPVU5EX0lEX1RPS0VOLCBCUkFDS0VUX1RPS0VOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEJyYWNrZXRDb25maWcsIEJyYWNrZXRNYXRjaCwgQnJhY2tldFJvdW5kIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQnJhY2tldCwgY3JlYXRlQnJhY2tldENvbmZpZywgb3JkZXJSb3VuZHMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDb25uZWN0ZWRNYXRjaGVzIH0gZnJvbSAnLi9icmFja2V0LmNvbXBvbmVudC50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LWJyYWNrZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJhY2tldC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2JyYWNrZXQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nRm9yT2YsXG4gICAgTGV0RGlyZWN0aXZlLFxuICAgIE5nSWYsXG4gICAgUG9ydGFsTW9kdWxlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBTY3JvbGxPYnNlcnZlckZpcnN0RWxlbWVudERpcmVjdGl2ZSxcbiAgICBTY3JvbGxPYnNlcnZlckxhc3RFbGVtZW50RGlyZWN0aXZlLFxuICBdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1icmFja2V0JyxcbiAgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQlJBQ0tFVF9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBCcmFja2V0Q29tcG9uZW50LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEJyYWNrZXRDb21wb25lbnQge1xuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBfYnJhY2tldENvbmZpZyA9IGluamVjdChCUkFDS0VUX0NPTkZJR19UT0tFTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpdGVtV2l0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbVdpdGg7XG4gIH1cbiAgc2V0IGl0ZW1XaXRoKHY6IHN0cmluZykge1xuICAgIHRoaXMuX2l0ZW1XaXRoID0gdjtcblxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1fYnJhY2tldC1pdGVtLXdpZHRoJywgdik7XG4gIH1cbiAgcHJpdmF0ZSBfaXRlbVdpdGggPSAnMjAwcHgnO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpdGVtSGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtSGVpZ2h0O1xuICB9XG4gIHNldCBpdGVtSGVpZ2h0KHY6IHN0cmluZykge1xuICAgIHRoaXMuX2l0ZW1IZWlnaHQgPSB2O1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1fYnJhY2tldC1pdGVtLWhlaWdodCcsIHYpO1xuICB9XG4gIHByaXZhdGUgX2l0ZW1IZWlnaHQgPSAnMTAwcHgnO1xuXG4gIEBJbnB1dCgpXG4gIGdldCByb3VuZEhlYWRlckhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRIZWFkZXJIZWlnaHQ7XG4gIH1cbiAgc2V0IHJvdW5kSGVhZGVySGVpZ2h0KHY6IHN0cmluZykge1xuICAgIHRoaXMuX3JvdW5kSGVhZGVySGVpZ2h0ID0gdjtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tX3JvdW5kLWhlYWRlci1oZWlnaHQnLCB2KTtcbiAgfVxuICBwcml2YXRlIF9yb3VuZEhlYWRlckhlaWdodCA9ICc1MHB4JztcblxuICBASW5wdXQoKVxuICBnZXQgdXBwZXJMb3dlckJyYWNrZXRHYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VwcGVyTG93ZXJCcmFja2V0R2FwO1xuICB9XG4gIHNldCB1cHBlckxvd2VyQnJhY2tldEdhcCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl91cHBlckxvd2VyQnJhY2tldEdhcCA9IHY7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLV91cHBlci1sb3dlci1icmFja2V0LWdhcCcsIHYpO1xuICB9XG4gIHByaXZhdGUgX3VwcGVyTG93ZXJCcmFja2V0R2FwID0gJzBweCc7XG5cbiAgQElucHV0KClcbiAgZ2V0IGNvbHVtbkdhcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uR2FwO1xuICB9XG4gIHNldCBjb2x1bW5HYXAodjogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29sdW1uR2FwID0gdjtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tX2JyYWNrZXQtY29sdW1uLWdhcCcsIHYpO1xuICB9XG4gIHByaXZhdGUgX2NvbHVtbkdhcCE6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBnZXQgcm93R2FwKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3dHYXA7XG4gIH1cbiAgc2V0IHJvd0dhcCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yb3dHYXAgPSB2O1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1fYnJhY2tldC1yb3ctZ2FwJywgdik7XG4gIH1cbiAgcHJpdmF0ZSBfcm93R2FwITogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGdldCByb3VuZHNXaXRoTWF0Y2hlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRzV2l0aE1hdGNoZXM7XG4gIH1cbiAgc2V0IHJvdW5kc1dpdGhNYXRjaGVzKHY6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXdbXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yb3VuZHNXaXRoTWF0Y2hlcyA9IHY7XG5cbiAgICBpZiAoIXYgfHwgdi5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuX2JyYWNrZXQkLm5leHQobnVsbCk7XG4gICAgICB0aGlzLl9yb3VuZHNXaXRoTWF0Y2hlcyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNvcnRlZFJvdW5kcyA9IG9yZGVyUm91bmRzKHYpO1xuXG4gICAgICB0aGlzLl9icmFja2V0JC5uZXh0KG5ldyBCcmFja2V0KHNvcnRlZFJvdW5kcykpO1xuICAgICAgdGhpcy5fcm91bmRzV2l0aE1hdGNoZXMgPSBzb3J0ZWRSb3VuZHM7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3JvdW5kc1dpdGhNYXRjaGVzITogUm91bmRTdGFnZVN0cnVjdHVyZVdpdGhNYXRjaGVzVmlld1tdIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBnZXQgY29tcG9uZW50Q29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnRDb25maWc7XG4gIH1cbiAgc2V0IGNvbXBvbmVudENvbmZpZyh2OiBCcmFja2V0Q29uZmlnIHwgbnVsbCkge1xuICAgIHRoaXMuX2NvbXBvbmVudENvbmZpZyA9IHY7XG4gICAgdGhpcy5fY29uZmlnID0gY3JlYXRlQnJhY2tldENvbmZpZyh0aGlzLl9icmFja2V0Q29uZmlnLCB2KTtcbiAgfVxuICBwcml2YXRlIF9jb21wb25lbnRDb25maWc6IEJyYWNrZXRDb25maWcgfCBudWxsID0gbnVsbDtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaGFzLXJvdW5kLWhlYWRlcnMnKVxuICBnZXQgaGFzUm91bmRIZWFkZXJzKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2NvbmZpZz8ucm91bmRIZWFkZXJDb21wb25lbnQgPz8gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2NvbmZpZyA9IGNyZWF0ZUJyYWNrZXRDb25maWcodGhpcy5fY29tcG9uZW50Q29uZmlnLCB0aGlzLl9icmFja2V0Q29uZmlnKTtcbiAgcHJvdGVjdGVkIF9icmFja2V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QnJhY2tldCB8IG51bGw+KG51bGwpO1xuXG4gIHRyYWNrQnlSb3VuZDogVHJhY2tCeUZ1bmN0aW9uPEJyYWNrZXRSb3VuZD4gPSAoXywgcm91bmQpID0+IHJvdW5kLmRhdGEuaWQ7XG4gIHRyYWNrQnlNYXRjaDogVHJhY2tCeUZ1bmN0aW9uPEJyYWNrZXRNYXRjaD4gPSAoXywgbWF0Y2gpID0+IG1hdGNoLmRhdGEuaWQ7XG5cbiAgZ2V0QnJhY2tldE1hdGNoQnlJZChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JyYWNrZXQkLnBpcGUobWFwKChicmFja2V0KSA9PiBicmFja2V0Py5nZXRNYXRjaEJ5SWQoaWQpID8/IG51bGwpKTtcbiAgfVxuXG4gIGdldEJyYWNrZXRSb3VuZEJ5SWQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9icmFja2V0JC5waXBlKG1hcCgoYnJhY2tldCkgPT4gYnJhY2tldD8uZ2V0Um91bmRCeUlkKGlkKSA/PyBudWxsKSk7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSA9PlxuICAgICAgYCR7bWF0Y2guZGF0YS5pZH0tJHttYXRjaC5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByb3RlY3RlZCBnZXRDb25uZWN0ZWRNYXRjaGVzKG1hdGNoOiBCcmFja2V0TWF0Y2gsIGJyYWNrZXQ6IEJyYWNrZXQpOiBDb25uZWN0ZWRNYXRjaGVzIHtcbiAgICBjb25zdCBwcmV2aW91c01hdGNoZXMgPSB0aGlzLl9nZXRQcmV2aW91c01hdGNoZXMobWF0Y2gsIGJyYWNrZXQpO1xuICAgIGNvbnN0IG5leHRNYXRjaCA9IHRoaXMuX2dldE5leHRNYXRjaChtYXRjaCwgYnJhY2tldCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJldmlvdXNNYXRjaGVzLFxuICAgICAgbmV4dE1hdGNoLFxuICAgIH07XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChjdXJyZW50TWF0Y2g6IEJyYWNrZXRNYXRjaCwgbmV4dE1hdGNoOiBCcmFja2V0TWF0Y2ggfCBudWxsKSA9PlxuICAgICAgYCR7Y3VycmVudE1hdGNoLmRhdGEuaWR9LSR7bmV4dE1hdGNoPy5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH1gLFxuICB9KVxuICBwcm90ZWN0ZWQgZ2V0Q2hpbGRDb25uZWN0b3JTaGFwZShjdXJyZW50TWF0Y2g6IEJyYWNrZXRNYXRjaCwgbmV4dE1hdGNoOiBCcmFja2V0TWF0Y2ggfCBudWxsKSB7XG4gICAgaWYgKCFuZXh0TWF0Y2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNYXRjaFByZXZpb3VzTWF0Y2hlcyA9IG5leHRNYXRjaC5wcmV2aW91c01hdGNoZXM/Lm1hdGNoSWRzO1xuXG4gICAgaWYgKCFuZXh0TWF0Y2hQcmV2aW91c01hdGNoZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNYXRjaFByZXZpb3VzTWF0Y2hBID0gbmV4dE1hdGNoUHJldmlvdXNNYXRjaGVzWzBdO1xuICAgIGNvbnN0IG5leHRNYXRjaFByZXZpb3VzTWF0Y2hCID0gbmV4dE1hdGNoUHJldmlvdXNNYXRjaGVzWzFdO1xuXG4gICAgaWYgKG5leHRNYXRjaFByZXZpb3VzTWF0Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiAnc3RyYWlnaHQnO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50TWF0Y2guZGF0YS5pZCA9PT0gbmV4dE1hdGNoUHJldmlvdXNNYXRjaEEpIHtcbiAgICAgIHJldHVybiAnZG93bic7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRNYXRjaC5kYXRhLmlkID09PSBuZXh0TWF0Y2hQcmV2aW91c01hdGNoQikge1xuICAgICAgcmV0dXJuICd1cCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChyb3VuZEluZGV4OiBudW1iZXIsIGJyYWNrZXQ6IEJyYWNrZXQpID0+IGAke3JvdW5kSW5kZXh9LSR7YnJhY2tldC5pZH1gLFxuICB9KVxuICBwcm90ZWN0ZWQgZ2V0TGluZU11bHRpQWZ0ZXIocm91bmRJbmRleDogbnVtYmVyLCBicmFja2V0OiBCcmFja2V0KSB7XG4gICAgY29uc3QgaXNEb3VibGVFbGltaW5hdGlvbiA9IGJyYWNrZXQuYnJhY2tldFR5cGUgPT09ICdkb3VibGUnO1xuICAgIGNvbnN0IGN1cnJlbnRSb3VuZCA9IGJyYWNrZXQuYnJhY2tldFJvdW5kc1tyb3VuZEluZGV4XTtcbiAgICBjb25zdCBuZXh0Um91bmQgPSBicmFja2V0LmJyYWNrZXRSb3VuZHNbcm91bmRJbmRleCArIDFdO1xuXG4gICAgLy8gZm9yIGNvbm5lY3RpbmcgdGhlIGxhc3QgbG9vc2VyIG1hdGNoIGFuZCB0aGUgcmVzcGVjdGl2ZSBzZW1pIGZpbmFsIHdpbm5lciBtYXRjaFxuICAgIGlmIChcbiAgICAgIGlzRG91YmxlRWxpbWluYXRpb24gJiZcbiAgICAgICghbmV4dFJvdW5kIHx8IG5leHRSb3VuZC5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScpICYmXG4gICAgICBjdXJyZW50Um91bmQuZGF0YS50eXBlID09PSAnbG9zZXJfYnJhY2tldCdcbiAgICApIHtcbiAgICAgIHJldHVybiBicmFja2V0LnRvdGFsUm93Q291bnQgLSAxO1xuICAgIH1cblxuICAgIGlmICghbmV4dFJvdW5kKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFJvdW5kLm1hdGNoZXMubGVuZ3RoID09PSBjdXJyZW50Um91bmQubWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICghaXNEb3VibGVFbGltaW5hdGlvbikge1xuICAgICAgcmV0dXJuIDIgKiogcm91bmRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHJuZEluZGV4ID0gcm91bmRJbmRleDtcblxuICAgICAgaWYgKGN1cnJlbnRSb3VuZC5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0Jykge1xuICAgICAgICBjb25zdCB0b3RhbFdpbm5lclJvdW5kcyA9IGJyYWNrZXQud2lubmVyUm91bmRDb3VudDtcbiAgICAgICAgY29uc3QgbG9vc2VyUm91bmRJbmRleCA9XG4gICAgICAgICAgY3VycmVudFJvdW5kLmRhdGEudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnID8gcm91bmRJbmRleCAtIHRvdGFsV2lubmVyUm91bmRzIDogcm91bmRJbmRleDtcblxuICAgICAgICBybmRJbmRleCA9IGxvb3NlclJvdW5kSW5kZXggLyAyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gMiAqKiBybmRJbmRleDtcbiAgICB9XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChcbiAgICAgIGFmZmVjdGVkUm91bmQ6IEJyYWNrZXRSb3VuZCB8IG51bGwsXG4gICAgICBwcmV2aW91c1JvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgICAgY3VycmVudFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgICAgbmV4dFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgICAgYnJhY2tldDogQnJhY2tldCxcbiAgICApID0+XG4gICAgICBgJHthZmZlY3RlZFJvdW5kPy5kYXRhLmlkfSAke3ByZXZpb3VzUm91bmQ/LmRhdGEuaWR9ICR7Y3VycmVudFJvdW5kPy5kYXRhLmlkfSAke25leHRSb3VuZD8uZGF0YS5pZH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByb3RlY3RlZCBnZXRMaW5lU3BhbihcbiAgICBhZmZlY3RlZFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgIHByZXZpb3VzUm91bmQ6IEJyYWNrZXRSb3VuZCB8IG51bGwsXG4gICAgY3VycmVudFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgIG5leHRSb3VuZDogQnJhY2tldFJvdW5kIHwgbnVsbCxcbiAgICBicmFja2V0OiBCcmFja2V0LFxuICApIHtcbiAgICBpZiAoIWFmZmVjdGVkUm91bmQpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIGlzIG5ldmVyIGEgY29ubmVjdGlvbiB0byB0aGUgdGhpcmQgcGxhY2UgbWF0Y2hcbiAgICBpZiAobmV4dFJvdW5kPy5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmIChicmFja2V0LmlzUGFydGlhbERvdWJsZUVsaW1pbmF0aW9uKSB7XG4gICAgICBpZiAoYWZmZWN0ZWRSb3VuZCA9PT0gbmV4dFJvdW5kICYmIG5leHRSb3VuZC5kYXRhLnR5cGUgPT09ICdmaW5hbCcpIHtcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgICB9IGVsc2UgaWYgKGFmZmVjdGVkUm91bmQgPT09IGN1cnJlbnRSb3VuZCAmJiBjdXJyZW50Um91bmQ/LmRhdGEudHlwZSA9PT0gJ2ZpbmFsJykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSBpZiAoYWZmZWN0ZWRSb3VuZCA9PT0gcHJldmlvdXNSb3VuZCAmJiBjdXJyZW50Um91bmQ/LmRhdGEudHlwZSA9PT0gJ2ZpbmFsJykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWZmZWN0ZWRSb3VuZC5jb2x1bW4uZW5kIC0gYWZmZWN0ZWRSb3VuZC5jb2x1bW4uc3RhcnQ7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChyb3VuZDogQnJhY2tldFJvdW5kKSA9PiBgJHtyb3VuZC5kYXRhLmlkfWAsXG4gIH0pXG4gIHByb3RlY3RlZCBjcmVhdGVSb3VuZFBvcnRhbChyb3VuZDogQnJhY2tldFJvdW5kLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8dW5rbm93bj4pIHtcbiAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEJSQUNLRVRfUk9VTkRfSURfVE9LRU4sXG4gICAgICAgICAgdXNlVmFsdWU6IHJvdW5kLmRhdGEuaWQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcGFyZW50OiB0aGlzLl9pbmplY3RvcixcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoY29tcG9uZW50LCBudWxsLCBpbmplY3Rvcik7XG5cbiAgICByZXR1cm4gcG9ydGFsO1xuICB9XG5cbiAgQE1lbW8oe1xuICAgIHJlc29sdmVyOiAobWF0Y2g6IEJyYWNrZXRNYXRjaCkgPT4gYCR7bWF0Y2guZGF0YS5pZH1gLFxuICB9KVxuICBwcm90ZWN0ZWQgY3JlYXRlTWF0Y2hQb3J0YWwobWF0Y2g6IEJyYWNrZXRNYXRjaCwgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPHVua25vd24+KSB7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBCUkFDS0VUX01BVENIX0lEX1RPS0VOLFxuICAgICAgICAgIHVzZVZhbHVlOiBtYXRjaC5kYXRhLmlkLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3IsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudCwgbnVsbCwgaW5qZWN0b3IpO1xuXG4gICAgcmV0dXJuIHBvcnRhbDtcbiAgfVxuXG4gIEBNZW1vKHsgcmVzb2x2ZXI6IChpZDogc3RyaW5nLCBicmFja2V0OiBCcmFja2V0KSA9PiBgJHtpZH0tJHticmFja2V0LmlkfWAgfSlcbiAgcHJpdmF0ZSBfZ2V0Um91bmRCeUlkKGlkOiBzdHJpbmcsIGJyYWNrZXQ6IEJyYWNrZXQpIHtcbiAgICByZXR1cm4gYnJhY2tldD8uYnJhY2tldFJvdW5kcy5maW5kKChyb3VuZCkgPT4gcm91bmQuZGF0YS5pZCA9PT0gaWQpID8/IG51bGw7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSA9PlxuICAgICAgYCR7bWF0Y2guZGF0YS5pZH0tJHttYXRjaC5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByaXZhdGUgX2dldFByZXZpb3VzTWF0Y2hlcyhtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSB7XG4gICAgaWYgKCFtYXRjaC5wcmV2aW91c01hdGNoZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcm91bmRJZCwgbWF0Y2hJZHMgfSA9IG1hdGNoLnByZXZpb3VzTWF0Y2hlcztcblxuICAgIGNvbnN0IHJvdW5kID0gdGhpcy5fZ2V0Um91bmRCeUlkKHJvdW5kSWQsIGJyYWNrZXQpO1xuXG4gICAgcmV0dXJuIG1hdGNoSWRzLm1hcCgobWF0Y2hJZDogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gcm91bmQ/Lm1hdGNoZXMuZmluZCgobWF0Y2gpID0+IG1hdGNoLmRhdGEuaWQgPT09IG1hdGNoSWQpID8/IG51bGw7XG4gICAgfSk7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSA9PlxuICAgICAgYCR7bWF0Y2guZGF0YS5pZH0tJHttYXRjaC5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByaXZhdGUgX2dldE5leHRNYXRjaChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSB7XG4gICAgaWYgKCFtYXRjaC5uZXh0TWF0Y2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcm91bmRJZCwgbWF0Y2hJZCB9ID0gbWF0Y2gubmV4dE1hdGNoO1xuXG4gICAgY29uc3Qgcm91bmQgPSB0aGlzLl9nZXRSb3VuZEJ5SWQocm91bmRJZCwgYnJhY2tldCk7XG5cbiAgICByZXR1cm4gcm91bmQ/Lm1hdGNoZXMuZmluZCgobWF0Y2gpID0+IG1hdGNoLmRhdGEuaWQgPT09IG1hdGNoSWQpID8/IG51bGw7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJfYnJhY2tldCQgfCBhc3luYyBhcyBicmFja2V0XCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdW5kIG9mIGJyYWNrZXQuYnJhY2tldFJvdW5kczsgdHJhY2tCeTogdHJhY2tCeVJvdW5kOyBsZXQgcm91bmRJbmRleCA9IGluZGV4XCI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJfY29uZmlnLnJvdW5kSGVhZGVyQ29tcG9uZW50XCJcbiAgICAgIFtldFNjcm9sbE9ic2VydmVyRmlyc3RFbGVtZW50XT1cInJvdW5kSW5kZXggPT09IDBcIlxuICAgICAgW2V0U2Nyb2xsT2JzZXJ2ZXJMYXN0RWxlbWVudF09XCJyb3VuZEluZGV4ID09PSBicmFja2V0Lndpbm5lclJvdW5kQ291bnQgLSAxXCJcbiAgICAgIFtzdHlsZS4tLV9jc109XCJyb3VuZC5jb2x1bW4uc3RhcnRcIlxuICAgICAgW3N0eWxlLi0tX2NlXT1cInJvdW5kLmNvbHVtbi5lbmRcIlxuICAgICAgW3N0eWxlLi0tX3JzXT1cIlxuICAgICAgICByb3VuZC5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0JyB8fCByb3VuZC5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScgPyByb3VuZC5yb3cuc3RhcnQgKyAxIDogcm91bmQucm93LnN0YXJ0XG4gICAgICBcIlxuICAgICAgW2F0dHIuc3BlY2lhbC1hbGlnbi1lbmRdPVwiXG4gICAgICAgIHJvdW5kLmRhdGEudHlwZSA9PT0gJ3RoaXJkX3BsYWNlJyAmJlxuICAgICAgICBicmFja2V0LmJyYWNrZXRUeXBlID09PSAnc2luZ2xlJyAmJlxuICAgICAgICBicmFja2V0LmZpcnN0V2lubmVyUm91bmQubWF0Y2hlcy5sZW5ndGggPD0gNFxuICAgICAgICAgID8gJ3RydWUnXG4gICAgICAgICAgOiAnZmFsc2UnXG4gICAgICBcIlxuICAgICAgW2F0dHIuaXMtbG9zZXItcm91bmQtaGVhZGVyXT1cIlxuICAgICAgICAocm91bmQuZGF0YS50eXBlID09PSAnbG9zZXJfYnJhY2tldCcgfHwgcm91bmQuZGF0YS50eXBlID09PSAndGhpcmRfcGxhY2UnKSAmJiBicmFja2V0LmJyYWNrZXRUeXBlID09PSAnZG91YmxlJ1xuICAgICAgXCJcbiAgICAgIGNsYXNzPVwiZXQtYnJhY2tldC1yb3VuZFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqY2RrUG9ydGFsT3V0bGV0PVwiY3JlYXRlUm91bmRQb3J0YWwocm91bmQsIF9jb25maWcucm91bmRIZWFkZXJDb21wb25lbnQpXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpldExldD1cImJyYWNrZXQuYnJhY2tldFJvdW5kc1tyb3VuZEluZGV4IC0gMV0gYXMgbGFzdFJvdW5kXCI+XG4gICAgICA8bmctY29udGFpbmVyICpldExldD1cImJyYWNrZXQuYnJhY2tldFJvdW5kc1tyb3VuZEluZGV4ICsgMV0gYXMgbmV4dFJvdW5kXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1hdGNoIG9mIHJvdW5kLm1hdGNoZXM7IHRyYWNrQnk6IHRyYWNrQnlNYXRjaDsgbGV0IG1hdGNoSW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29ubmVjdGVkTWF0Y2hlcyhtYXRjaCwgYnJhY2tldCkgYXMgY29ubmVjdGVkTWF0Y2hlc1wiXG4gICAgICAgICAgICBbc3R5bGUuLS1fY3NdPVwicm91bmQuY29sdW1uLnN0YXJ0XCJcbiAgICAgICAgICAgIFtzdHlsZS4tLV9jZV09XCJyb3VuZC5jb2x1bW4uZW5kXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLV9yc109XCJcbiAgICAgICAgICAgICAgcm91bmQuZGF0YS50eXBlID09PSAnbG9zZXJfYnJhY2tldCcgfHwgcm91bmQuZGF0YS50eXBlID09PSAndGhpcmRfcGxhY2UnXG4gICAgICAgICAgICAgICAgPyBtYXRjaC5yb3cuc3RhcnQgKyAoX2NvbmZpZy5yb3VuZEhlYWRlckNvbXBvbmVudCA/IDIgOiAwKVxuICAgICAgICAgICAgICAgIDogbWF0Y2gucm93LnN0YXJ0ICsgKF9jb25maWcucm91bmRIZWFkZXJDb21wb25lbnQgPyAxIDogMClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbc3R5bGUuLS1fcmVdPVwiXG4gICAgICAgICAgICAgIHJvdW5kLmRhdGEudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnIHx8IHJvdW5kLmRhdGEudHlwZSA9PT0gJ3RoaXJkX3BsYWNlJ1xuICAgICAgICAgICAgICAgID8gbWF0Y2gucm93LmVuZCArIChfY29uZmlnLnJvdW5kSGVhZGVyQ29tcG9uZW50ID8gMiA6IDApXG4gICAgICAgICAgICAgICAgOiBtYXRjaC5yb3cuZW5kICsgKF9jb25maWcucm91bmRIZWFkZXJDb21wb25lbnQgPyAxIDogMClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbc3R5bGUuLS1fbGluZS1tdWx0aS1hZnRlcl09XCJnZXRMaW5lTXVsdGlBZnRlcihyb3VuZEluZGV4LCBicmFja2V0KVwiXG4gICAgICAgICAgICBbYXR0ci5ldC1oYXMtcGFyZW50c109XCIhIWNvbm5lY3RlZE1hdGNoZXMucHJldmlvdXNNYXRjaGVzPy5sZW5ndGhcIlxuICAgICAgICAgICAgW2F0dHIuZXQtaGFzLWNoaWxkXT1cIiEhY29ubmVjdGVkTWF0Y2hlcy5uZXh0TWF0Y2hcIlxuICAgICAgICAgICAgW2F0dHIuZXQtY2hpbGQtY29ubmVjdG9yLXNoYXBlXT1cImdldENoaWxkQ29ubmVjdG9yU2hhcGUobWF0Y2gsIGNvbm5lY3RlZE1hdGNoZXMubmV4dE1hdGNoKVwiXG4gICAgICAgICAgICBbYXR0ci5saW5lLXNwYW4tYmVmb3JlXT1cImdldExpbmVTcGFuKGxhc3RSb3VuZCwgbGFzdFJvdW5kLCByb3VuZCwgbmV4dFJvdW5kLCBicmFja2V0KVwiXG4gICAgICAgICAgICBbYXR0ci5saW5lLXNwYW4tY3VycmVudF09XCJnZXRMaW5lU3Bhbihyb3VuZCwgbGFzdFJvdW5kLCByb3VuZCwgbmV4dFJvdW5kLCBicmFja2V0KVwiXG4gICAgICAgICAgICBbYXR0ci5saW5lLXNwYW4tYWZ0ZXJdPVwiZ2V0TGluZVNwYW4obmV4dFJvdW5kLCBsYXN0Um91bmQsIHJvdW5kLCBuZXh0Um91bmQsIGJyYWNrZXQpXCJcbiAgICAgICAgICAgIFthdHRyLmlzLWZpcnN0LWxvc2VyLXJvdW5kLW1hdGNoXT1cIlxuICAgICAgICAgICAgICAocm91bmQuZGF0YS50eXBlID09PSAnbG9zZXJfYnJhY2tldCcgfHwgcm91bmQuZGF0YS50eXBlID09PSAndGhpcmRfcGxhY2UnKSAmJiBtYXRjaEluZGV4ID09PSAwXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2F0dHIuaXMtbGFzdC1sb3dlci1icmFja2V0LW1hdGNoXT1cIlxuICAgICAgICAgICAgICByb3VuZC5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0JyAmJlxuICAgICAgICAgICAgICAocm91bmRJbmRleCA9PT0gYnJhY2tldC5icmFja2V0Um91bmRzLmxlbmd0aCAtIDEgfHwgbmV4dFJvdW5kPy5kYXRhPy50eXBlID09PSAndGhpcmRfcGxhY2UnKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXQtYnJhY2tldC1tYXRjaFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrUG9ydGFsT3V0bGV0PVwiY3JlYXRlTWF0Y2hQb3J0YWwobWF0Y2gsIF9jb25maWcubWF0Y2hDb21wb25lbnQpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhY2tldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvYnJhY2tldC9jb21wb25lbnRzL2JyYWNrZXQvYnJhY2tldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvYnJhY2tldC9jb21wb25lbnRzL2JyYWNrZXQvYnJhY2tldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGVBQWUsRUFBaUIsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFFTCxpQkFBaUIsRUFDakIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxZQUFZLEVBQ1osSUFBSSxFQUNKLG1DQUFtQyxFQUNuQyxrQ0FBa0MsR0FDbkMsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRILE9BQU8sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7QUE4QnhFLE1BQU0sT0FBTyxnQkFBZ0I7SUEzQjdCO1FBNEJVLGdCQUFXLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUMx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S0FBSztnQkFXRixNQUFNO3NCQURULEtBQUs7Z0JBV0YsaUJBQWlCO3NCQURwQixLQUFLO2dCQW9CRixlQUFlO3NCQURsQixLQUFLO2dCQVdGLGVBQWU7c0JBRGxCLFdBQVc7dUJBQUMsd0JBQXdCO2dCQXVCM0IsbUJBQW1CLE1BY25CLHNCQUFzQixNQWdDdEIsaUJBQWlCLE1BaURqQixXQUFXLE1BZ0NYLGlCQUFpQixNQW1CakIsaUJBQWlCLE1BaUJuQixhQUFhLE1BUWIsbUJBQW1CLE1Ba0JuQixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsLCBDb21wb25lbnRUeXBlLCBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdGb3JPZiwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBUcmFja0J5RnVuY3Rpb24sXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTGV0RGlyZWN0aXZlLFxuICBNZW1vLFxuICBTY3JvbGxPYnNlcnZlckZpcnN0RWxlbWVudERpcmVjdGl2ZSxcbiAgU2Nyb2xsT2JzZXJ2ZXJMYXN0RWxlbWVudERpcmVjdGl2ZSxcbn0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IH0gZnJvbSAnQGV0aGxldGUvdHlwZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJSQUNLRVRfQ09ORklHX1RPS0VOLCBCUkFDS0VUX01BVENIX0lEX1RPS0VOLCBCUkFDS0VUX1JPVU5EX0lEX1RPS0VOLCBCUkFDS0VUX1RPS0VOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEJyYWNrZXRDb25maWcsIEJyYWNrZXRNYXRjaCwgQnJhY2tldFJvdW5kIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQnJhY2tldCwgY3JlYXRlQnJhY2tldENvbmZpZywgb3JkZXJSb3VuZHMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDb25uZWN0ZWRNYXRjaGVzIH0gZnJvbSAnLi9icmFja2V0LmNvbXBvbmVudC50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LWJyYWNrZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJhY2tldC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2JyYWNrZXQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nRm9yT2YsXG4gICAgTGV0RGlyZWN0aXZlLFxuICAgIE5nSWYsXG4gICAgUG9ydGFsTW9kdWxlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBTY3JvbGxPYnNlcnZlckZpcnN0RWxlbWVudERpcmVjdGl2ZSxcbiAgICBTY3JvbGxPYnNlcnZlckxhc3RFbGVtZW50RGlyZWN0aXZlLFxuICBdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1icmFja2V0JyxcbiAgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQlJBQ0tFVF9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBCcmFja2V0Q29tcG9uZW50LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEJyYWNrZXRDb21wb25lbnQge1xuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBfYnJhY2tldENvbmZpZyA9IGluamVjdChCUkFDS0VUX0NPTkZJR19UT0tFTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpdGVtV2l0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbVdpdGg7XG4gIH1cbiAgc2V0IGl0ZW1XaXRoKHY6IHN0cmluZykge1xuICAgIHRoaXMuX2l0ZW1XaXRoID0gdjtcblxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1fYnJhY2tldC1pdGVtLXdpZHRoJywgdik7XG4gIH1cbiAgcHJpdmF0ZSBfaXRlbVdpdGggPSAnMjAwcHgnO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpdGVtSGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtSGVpZ2h0O1xuICB9XG4gIHNldCBpdGVtSGVpZ2h0KHY6IHN0cmluZykge1xuICAgIHRoaXMuX2l0ZW1IZWlnaHQgPSB2O1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1fYnJhY2tldC1pdGVtLWhlaWdodCcsIHYpO1xuICB9XG4gIHByaXZhdGUgX2l0ZW1IZWlnaHQgPSAnMTAwcHgnO1xuXG4gIEBJbnB1dCgpXG4gIGdldCByb3VuZEhlYWRlckhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRIZWFkZXJIZWlnaHQ7XG4gIH1cbiAgc2V0IHJvdW5kSGVhZGVySGVpZ2h0KHY6IHN0cmluZykge1xuICAgIHRoaXMuX3JvdW5kSGVhZGVySGVpZ2h0ID0gdjtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tX3JvdW5kLWhlYWRlci1oZWlnaHQnLCB2KTtcbiAgfVxuICBwcml2YXRlIF9yb3VuZEhlYWRlckhlaWdodCA9ICc1MHB4JztcblxuICBASW5wdXQoKVxuICBnZXQgdXBwZXJMb3dlckJyYWNrZXRHYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VwcGVyTG93ZXJCcmFja2V0R2FwO1xuICB9XG4gIHNldCB1cHBlckxvd2VyQnJhY2tldEdhcCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl91cHBlckxvd2VyQnJhY2tldEdhcCA9IHY7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLV91cHBlci1sb3dlci1icmFja2V0LWdhcCcsIHYpO1xuICB9XG4gIHByaXZhdGUgX3VwcGVyTG93ZXJCcmFja2V0R2FwID0gJzBweCc7XG5cbiAgQElucHV0KClcbiAgZ2V0IGNvbHVtbkdhcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uR2FwO1xuICB9XG4gIHNldCBjb2x1bW5HYXAodjogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29sdW1uR2FwID0gdjtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tX2JyYWNrZXQtY29sdW1uLWdhcCcsIHYpO1xuICB9XG4gIHByaXZhdGUgX2NvbHVtbkdhcCE6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBnZXQgcm93R2FwKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3dHYXA7XG4gIH1cbiAgc2V0IHJvd0dhcCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yb3dHYXAgPSB2O1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1fYnJhY2tldC1yb3ctZ2FwJywgdik7XG4gIH1cbiAgcHJpdmF0ZSBfcm93R2FwITogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGdldCByb3VuZHNXaXRoTWF0Y2hlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRzV2l0aE1hdGNoZXM7XG4gIH1cbiAgc2V0IHJvdW5kc1dpdGhNYXRjaGVzKHY6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXdbXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yb3VuZHNXaXRoTWF0Y2hlcyA9IHY7XG5cbiAgICBpZiAoIXYgfHwgdi5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuX2JyYWNrZXQkLm5leHQobnVsbCk7XG4gICAgICB0aGlzLl9yb3VuZHNXaXRoTWF0Y2hlcyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNvcnRlZFJvdW5kcyA9IG9yZGVyUm91bmRzKHYpO1xuXG4gICAgICB0aGlzLl9icmFja2V0JC5uZXh0KG5ldyBCcmFja2V0KHNvcnRlZFJvdW5kcykpO1xuICAgICAgdGhpcy5fcm91bmRzV2l0aE1hdGNoZXMgPSBzb3J0ZWRSb3VuZHM7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3JvdW5kc1dpdGhNYXRjaGVzITogUm91bmRTdGFnZVN0cnVjdHVyZVdpdGhNYXRjaGVzVmlld1tdIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBnZXQgY29tcG9uZW50Q29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnRDb25maWc7XG4gIH1cbiAgc2V0IGNvbXBvbmVudENvbmZpZyh2OiBCcmFja2V0Q29uZmlnIHwgbnVsbCkge1xuICAgIHRoaXMuX2NvbXBvbmVudENvbmZpZyA9IHY7XG4gICAgdGhpcy5fY29uZmlnID0gY3JlYXRlQnJhY2tldENvbmZpZyh0aGlzLl9icmFja2V0Q29uZmlnLCB2KTtcbiAgfVxuICBwcml2YXRlIF9jb21wb25lbnRDb25maWc6IEJyYWNrZXRDb25maWcgfCBudWxsID0gbnVsbDtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaGFzLXJvdW5kLWhlYWRlcnMnKVxuICBnZXQgaGFzUm91bmRIZWFkZXJzKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2NvbmZpZz8ucm91bmRIZWFkZXJDb21wb25lbnQgPz8gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2NvbmZpZyA9IGNyZWF0ZUJyYWNrZXRDb25maWcodGhpcy5fY29tcG9uZW50Q29uZmlnLCB0aGlzLl9icmFja2V0Q29uZmlnKTtcbiAgcHJvdGVjdGVkIF9icmFja2V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QnJhY2tldCB8IG51bGw+KG51bGwpO1xuXG4gIHRyYWNrQnlSb3VuZDogVHJhY2tCeUZ1bmN0aW9uPEJyYWNrZXRSb3VuZD4gPSAoXywgcm91bmQpID0+IHJvdW5kLmRhdGEuaWQ7XG4gIHRyYWNrQnlNYXRjaDogVHJhY2tCeUZ1bmN0aW9uPEJyYWNrZXRNYXRjaD4gPSAoXywgbWF0Y2gpID0+IG1hdGNoLmRhdGEuaWQ7XG5cbiAgZ2V0QnJhY2tldE1hdGNoQnlJZChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JyYWNrZXQkLnBpcGUobWFwKChicmFja2V0KSA9PiBicmFja2V0Py5nZXRNYXRjaEJ5SWQoaWQpID8/IG51bGwpKTtcbiAgfVxuXG4gIGdldEJyYWNrZXRSb3VuZEJ5SWQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9icmFja2V0JC5waXBlKG1hcCgoYnJhY2tldCkgPT4gYnJhY2tldD8uZ2V0Um91bmRCeUlkKGlkKSA/PyBudWxsKSk7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSA9PlxuICAgICAgYCR7bWF0Y2guZGF0YS5pZH0tJHttYXRjaC5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByb3RlY3RlZCBnZXRDb25uZWN0ZWRNYXRjaGVzKG1hdGNoOiBCcmFja2V0TWF0Y2gsIGJyYWNrZXQ6IEJyYWNrZXQpOiBDb25uZWN0ZWRNYXRjaGVzIHtcbiAgICBjb25zdCBwcmV2aW91c01hdGNoZXMgPSB0aGlzLl9nZXRQcmV2aW91c01hdGNoZXMobWF0Y2gsIGJyYWNrZXQpO1xuICAgIGNvbnN0IG5leHRNYXRjaCA9IHRoaXMuX2dldE5leHRNYXRjaChtYXRjaCwgYnJhY2tldCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJldmlvdXNNYXRjaGVzLFxuICAgICAgbmV4dE1hdGNoLFxuICAgIH07XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChjdXJyZW50TWF0Y2g6IEJyYWNrZXRNYXRjaCwgbmV4dE1hdGNoOiBCcmFja2V0TWF0Y2ggfCBudWxsKSA9PlxuICAgICAgYCR7Y3VycmVudE1hdGNoLmRhdGEuaWR9LSR7bmV4dE1hdGNoPy5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH1gLFxuICB9KVxuICBwcm90ZWN0ZWQgZ2V0Q2hpbGRDb25uZWN0b3JTaGFwZShjdXJyZW50TWF0Y2g6IEJyYWNrZXRNYXRjaCwgbmV4dE1hdGNoOiBCcmFja2V0TWF0Y2ggfCBudWxsKSB7XG4gICAgaWYgKCFuZXh0TWF0Y2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNYXRjaFByZXZpb3VzTWF0Y2hlcyA9IG5leHRNYXRjaC5wcmV2aW91c01hdGNoZXM/Lm1hdGNoSWRzO1xuXG4gICAgaWYgKCFuZXh0TWF0Y2hQcmV2aW91c01hdGNoZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNYXRjaFByZXZpb3VzTWF0Y2hBID0gbmV4dE1hdGNoUHJldmlvdXNNYXRjaGVzWzBdO1xuICAgIGNvbnN0IG5leHRNYXRjaFByZXZpb3VzTWF0Y2hCID0gbmV4dE1hdGNoUHJldmlvdXNNYXRjaGVzWzFdO1xuXG4gICAgaWYgKG5leHRNYXRjaFByZXZpb3VzTWF0Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiAnc3RyYWlnaHQnO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50TWF0Y2guZGF0YS5pZCA9PT0gbmV4dE1hdGNoUHJldmlvdXNNYXRjaEEpIHtcbiAgICAgIHJldHVybiAnZG93bic7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRNYXRjaC5kYXRhLmlkID09PSBuZXh0TWF0Y2hQcmV2aW91c01hdGNoQikge1xuICAgICAgcmV0dXJuICd1cCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChyb3VuZEluZGV4OiBudW1iZXIsIGJyYWNrZXQ6IEJyYWNrZXQpID0+IGAke3JvdW5kSW5kZXh9LSR7YnJhY2tldC5pZH1gLFxuICB9KVxuICBwcm90ZWN0ZWQgZ2V0TGluZU11bHRpQWZ0ZXIocm91bmRJbmRleDogbnVtYmVyLCBicmFja2V0OiBCcmFja2V0KSB7XG4gICAgY29uc3QgaXNEb3VibGVFbGltaW5hdGlvbiA9IGJyYWNrZXQuYnJhY2tldFR5cGUgPT09ICdkb3VibGUnO1xuICAgIGNvbnN0IGN1cnJlbnRSb3VuZCA9IGJyYWNrZXQuYnJhY2tldFJvdW5kc1tyb3VuZEluZGV4XTtcbiAgICBjb25zdCBuZXh0Um91bmQgPSBicmFja2V0LmJyYWNrZXRSb3VuZHNbcm91bmRJbmRleCArIDFdO1xuXG4gICAgLy8gZm9yIGNvbm5lY3RpbmcgdGhlIGxhc3QgbG9vc2VyIG1hdGNoIGFuZCB0aGUgcmVzcGVjdGl2ZSBzZW1pIGZpbmFsIHdpbm5lciBtYXRjaFxuICAgIGlmIChcbiAgICAgIGlzRG91YmxlRWxpbWluYXRpb24gJiZcbiAgICAgICghbmV4dFJvdW5kIHx8IG5leHRSb3VuZC5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScpICYmXG4gICAgICBjdXJyZW50Um91bmQ/LmRhdGEudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnXG4gICAgKSB7XG4gICAgICByZXR1cm4gYnJhY2tldC50b3RhbFJvd0NvdW50IC0gMTtcbiAgICB9XG5cbiAgICBpZiAoIW5leHRSb3VuZCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKG5leHRSb3VuZC5tYXRjaGVzLmxlbmd0aCA9PT0gY3VycmVudFJvdW5kPy5tYXRjaGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKCFpc0RvdWJsZUVsaW1pbmF0aW9uKSB7XG4gICAgICByZXR1cm4gMiAqKiByb3VuZEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcm5kSW5kZXggPSByb3VuZEluZGV4O1xuXG4gICAgICBpZiAoY3VycmVudFJvdW5kPy5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0Jykge1xuICAgICAgICBjb25zdCB0b3RhbFdpbm5lclJvdW5kcyA9IGJyYWNrZXQud2lubmVyUm91bmRDb3VudDtcbiAgICAgICAgY29uc3QgbG9vc2VyUm91bmRJbmRleCA9XG4gICAgICAgICAgY3VycmVudFJvdW5kLmRhdGEudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnID8gcm91bmRJbmRleCAtIHRvdGFsV2lubmVyUm91bmRzIDogcm91bmRJbmRleDtcblxuICAgICAgICBybmRJbmRleCA9IGxvb3NlclJvdW5kSW5kZXggLyAyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gMiAqKiBybmRJbmRleDtcbiAgICB9XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChcbiAgICAgIGFmZmVjdGVkUm91bmQ6IEJyYWNrZXRSb3VuZCB8IG51bGwsXG4gICAgICBwcmV2aW91c1JvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgICAgY3VycmVudFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgICAgbmV4dFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgICAgYnJhY2tldDogQnJhY2tldCxcbiAgICApID0+XG4gICAgICBgJHthZmZlY3RlZFJvdW5kPy5kYXRhLmlkfSAke3ByZXZpb3VzUm91bmQ/LmRhdGEuaWR9ICR7Y3VycmVudFJvdW5kPy5kYXRhLmlkfSAke25leHRSb3VuZD8uZGF0YS5pZH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByb3RlY3RlZCBnZXRMaW5lU3BhbihcbiAgICBhZmZlY3RlZFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgIHByZXZpb3VzUm91bmQ6IEJyYWNrZXRSb3VuZCB8IG51bGwsXG4gICAgY3VycmVudFJvdW5kOiBCcmFja2V0Um91bmQgfCBudWxsLFxuICAgIG5leHRSb3VuZDogQnJhY2tldFJvdW5kIHwgbnVsbCxcbiAgICBicmFja2V0OiBCcmFja2V0LFxuICApIHtcbiAgICBpZiAoIWFmZmVjdGVkUm91bmQpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIGlzIG5ldmVyIGEgY29ubmVjdGlvbiB0byB0aGUgdGhpcmQgcGxhY2UgbWF0Y2hcbiAgICBpZiAobmV4dFJvdW5kPy5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmIChicmFja2V0LmlzUGFydGlhbERvdWJsZUVsaW1pbmF0aW9uKSB7XG4gICAgICBpZiAoYWZmZWN0ZWRSb3VuZCA9PT0gbmV4dFJvdW5kICYmIG5leHRSb3VuZC5kYXRhLnR5cGUgPT09ICdmaW5hbCcpIHtcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgICB9IGVsc2UgaWYgKGFmZmVjdGVkUm91bmQgPT09IGN1cnJlbnRSb3VuZCAmJiBjdXJyZW50Um91bmQ/LmRhdGEudHlwZSA9PT0gJ2ZpbmFsJykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSBpZiAoYWZmZWN0ZWRSb3VuZCA9PT0gcHJldmlvdXNSb3VuZCAmJiBjdXJyZW50Um91bmQ/LmRhdGEudHlwZSA9PT0gJ2ZpbmFsJykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWZmZWN0ZWRSb3VuZC5jb2x1bW4uZW5kIC0gYWZmZWN0ZWRSb3VuZC5jb2x1bW4uc3RhcnQ7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChyb3VuZDogQnJhY2tldFJvdW5kKSA9PiBgJHtyb3VuZC5kYXRhLmlkfWAsXG4gIH0pXG4gIHByb3RlY3RlZCBjcmVhdGVSb3VuZFBvcnRhbChyb3VuZDogQnJhY2tldFJvdW5kLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8dW5rbm93bj4pIHtcbiAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEJSQUNLRVRfUk9VTkRfSURfVE9LRU4sXG4gICAgICAgICAgdXNlVmFsdWU6IHJvdW5kLmRhdGEuaWQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcGFyZW50OiB0aGlzLl9pbmplY3RvcixcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoY29tcG9uZW50LCBudWxsLCBpbmplY3Rvcik7XG5cbiAgICByZXR1cm4gcG9ydGFsO1xuICB9XG5cbiAgQE1lbW8oe1xuICAgIHJlc29sdmVyOiAobWF0Y2g6IEJyYWNrZXRNYXRjaCkgPT4gYCR7bWF0Y2guZGF0YS5pZH1gLFxuICB9KVxuICBwcm90ZWN0ZWQgY3JlYXRlTWF0Y2hQb3J0YWwobWF0Y2g6IEJyYWNrZXRNYXRjaCwgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPHVua25vd24+KSB7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBCUkFDS0VUX01BVENIX0lEX1RPS0VOLFxuICAgICAgICAgIHVzZVZhbHVlOiBtYXRjaC5kYXRhLmlkLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3IsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudCwgbnVsbCwgaW5qZWN0b3IpO1xuXG4gICAgcmV0dXJuIHBvcnRhbDtcbiAgfVxuXG4gIEBNZW1vKHsgcmVzb2x2ZXI6IChpZDogc3RyaW5nLCBicmFja2V0OiBCcmFja2V0KSA9PiBgJHtpZH0tJHticmFja2V0LmlkfWAgfSlcbiAgcHJpdmF0ZSBfZ2V0Um91bmRCeUlkKGlkOiBzdHJpbmcsIGJyYWNrZXQ6IEJyYWNrZXQpIHtcbiAgICByZXR1cm4gYnJhY2tldD8uYnJhY2tldFJvdW5kcy5maW5kKChyb3VuZCkgPT4gcm91bmQuZGF0YS5pZCA9PT0gaWQpID8/IG51bGw7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSA9PlxuICAgICAgYCR7bWF0Y2guZGF0YS5pZH0tJHttYXRjaC5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByaXZhdGUgX2dldFByZXZpb3VzTWF0Y2hlcyhtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSB7XG4gICAgaWYgKCFtYXRjaC5wcmV2aW91c01hdGNoZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcm91bmRJZCwgbWF0Y2hJZHMgfSA9IG1hdGNoLnByZXZpb3VzTWF0Y2hlcztcblxuICAgIGNvbnN0IHJvdW5kID0gdGhpcy5fZ2V0Um91bmRCeUlkKHJvdW5kSWQsIGJyYWNrZXQpO1xuXG4gICAgcmV0dXJuIG1hdGNoSWRzLm1hcCgobWF0Y2hJZDogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gcm91bmQ/Lm1hdGNoZXMuZmluZCgobWF0Y2gpID0+IG1hdGNoLmRhdGEuaWQgPT09IG1hdGNoSWQpID8/IG51bGw7XG4gICAgfSk7XG4gIH1cblxuICBATWVtbyh7XG4gICAgcmVzb2x2ZXI6IChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSA9PlxuICAgICAgYCR7bWF0Y2guZGF0YS5pZH0tJHttYXRjaC5wcmV2aW91c01hdGNoZXM/LnJvdW5kSWQgPz8gbnVsbH0gJHticmFja2V0LmlkfWAsXG4gIH0pXG4gIHByaXZhdGUgX2dldE5leHRNYXRjaChtYXRjaDogQnJhY2tldE1hdGNoLCBicmFja2V0OiBCcmFja2V0KSB7XG4gICAgaWYgKCFtYXRjaC5uZXh0TWF0Y2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcm91bmRJZCwgbWF0Y2hJZCB9ID0gbWF0Y2gubmV4dE1hdGNoO1xuXG4gICAgY29uc3Qgcm91bmQgPSB0aGlzLl9nZXRSb3VuZEJ5SWQocm91bmRJZCwgYnJhY2tldCk7XG5cbiAgICByZXR1cm4gcm91bmQ/Lm1hdGNoZXMuZmluZCgobWF0Y2gpID0+IG1hdGNoLmRhdGEuaWQgPT09IG1hdGNoSWQpID8/IG51bGw7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJfYnJhY2tldCQgfCBhc3luYyBhcyBicmFja2V0XCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdW5kIG9mIGJyYWNrZXQuYnJhY2tldFJvdW5kczsgdHJhY2tCeTogdHJhY2tCeVJvdW5kOyBsZXQgcm91bmRJbmRleCA9IGluZGV4XCI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJfY29uZmlnLnJvdW5kSGVhZGVyQ29tcG9uZW50XCJcbiAgICAgIFtldFNjcm9sbE9ic2VydmVyRmlyc3RFbGVtZW50XT1cInJvdW5kSW5kZXggPT09IDBcIlxuICAgICAgW2V0U2Nyb2xsT2JzZXJ2ZXJMYXN0RWxlbWVudF09XCJyb3VuZEluZGV4ID09PSBicmFja2V0Lndpbm5lclJvdW5kQ291bnQgLSAxXCJcbiAgICAgIFtzdHlsZS4tLV9jc109XCJyb3VuZC5jb2x1bW4uc3RhcnRcIlxuICAgICAgW3N0eWxlLi0tX2NlXT1cInJvdW5kLmNvbHVtbi5lbmRcIlxuICAgICAgW3N0eWxlLi0tX3JzXT1cIlxuICAgICAgICByb3VuZC5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0JyB8fCByb3VuZC5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScgPyByb3VuZC5yb3cuc3RhcnQgKyAxIDogcm91bmQucm93LnN0YXJ0XG4gICAgICBcIlxuICAgICAgW2F0dHIuc3BlY2lhbC1hbGlnbi1lbmRdPVwiXG4gICAgICAgIHJvdW5kLmRhdGEudHlwZSA9PT0gJ3RoaXJkX3BsYWNlJyAmJlxuICAgICAgICBicmFja2V0LmJyYWNrZXRUeXBlID09PSAnc2luZ2xlJyAmJlxuICAgICAgICBicmFja2V0LmZpcnN0V2lubmVyUm91bmQgJiZcbiAgICAgICAgYnJhY2tldC5maXJzdFdpbm5lclJvdW5kLm1hdGNoZXMubGVuZ3RoIDw9IDRcbiAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgIDogJ2ZhbHNlJ1xuICAgICAgXCJcbiAgICAgIFthdHRyLmlzLWxvc2VyLXJvdW5kLWhlYWRlcl09XCJcbiAgICAgICAgKHJvdW5kLmRhdGEudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnIHx8IHJvdW5kLmRhdGEudHlwZSA9PT0gJ3RoaXJkX3BsYWNlJykgJiYgYnJhY2tldC5icmFja2V0VHlwZSA9PT0gJ2RvdWJsZSdcbiAgICAgIFwiXG4gICAgICBjbGFzcz1cImV0LWJyYWNrZXQtcm91bmRcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKmNka1BvcnRhbE91dGxldD1cImNyZWF0ZVJvdW5kUG9ydGFsKHJvdW5kLCBfY29uZmlnLnJvdW5kSGVhZGVyQ29tcG9uZW50KVwiIC8+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqZXRMZXQ9XCJicmFja2V0LmJyYWNrZXRSb3VuZHNbcm91bmRJbmRleCAtIDFdID8/IG51bGwgYXMgbGFzdFJvdW5kXCI+XG4gICAgICA8bmctY29udGFpbmVyICpldExldD1cImJyYWNrZXQuYnJhY2tldFJvdW5kc1tyb3VuZEluZGV4ICsgMV0gPz8gbnVsbCBhcyBuZXh0Um91bmRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWF0Y2ggb2Ygcm91bmQubWF0Y2hlczsgdHJhY2tCeTogdHJhY2tCeU1hdGNoOyBsZXQgbWF0Y2hJbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJnZXRDb25uZWN0ZWRNYXRjaGVzKG1hdGNoLCBicmFja2V0KSBhcyBjb25uZWN0ZWRNYXRjaGVzXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLV9jc109XCJyb3VuZC5jb2x1bW4uc3RhcnRcIlxuICAgICAgICAgICAgW3N0eWxlLi0tX2NlXT1cInJvdW5kLmNvbHVtbi5lbmRcIlxuICAgICAgICAgICAgW3N0eWxlLi0tX3JzXT1cIlxuICAgICAgICAgICAgICByb3VuZC5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0JyB8fCByb3VuZC5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZSdcbiAgICAgICAgICAgICAgICA/IG1hdGNoLnJvdy5zdGFydCArIChfY29uZmlnLnJvdW5kSGVhZGVyQ29tcG9uZW50ID8gMiA6IDApXG4gICAgICAgICAgICAgICAgOiBtYXRjaC5yb3cuc3RhcnQgKyAoX2NvbmZpZy5yb3VuZEhlYWRlckNvbXBvbmVudCA/IDEgOiAwKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLV9yZV09XCJcbiAgICAgICAgICAgICAgcm91bmQuZGF0YS50eXBlID09PSAnbG9zZXJfYnJhY2tldCcgfHwgcm91bmQuZGF0YS50eXBlID09PSAndGhpcmRfcGxhY2UnXG4gICAgICAgICAgICAgICAgPyBtYXRjaC5yb3cuZW5kICsgKF9jb25maWcucm91bmRIZWFkZXJDb21wb25lbnQgPyAyIDogMClcbiAgICAgICAgICAgICAgICA6IG1hdGNoLnJvdy5lbmQgKyAoX2NvbmZpZy5yb3VuZEhlYWRlckNvbXBvbmVudCA/IDEgOiAwKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLV9saW5lLW11bHRpLWFmdGVyXT1cImdldExpbmVNdWx0aUFmdGVyKHJvdW5kSW5kZXgsIGJyYWNrZXQpXCJcbiAgICAgICAgICAgIFthdHRyLmV0LWhhcy1wYXJlbnRzXT1cIiEhY29ubmVjdGVkTWF0Y2hlcy5wcmV2aW91c01hdGNoZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgICBbYXR0ci5ldC1oYXMtY2hpbGRdPVwiISFjb25uZWN0ZWRNYXRjaGVzLm5leHRNYXRjaFwiXG4gICAgICAgICAgICBbYXR0ci5ldC1jaGlsZC1jb25uZWN0b3Itc2hhcGVdPVwiZ2V0Q2hpbGRDb25uZWN0b3JTaGFwZShtYXRjaCwgY29ubmVjdGVkTWF0Y2hlcy5uZXh0TWF0Y2gpXCJcbiAgICAgICAgICAgIFthdHRyLmxpbmUtc3Bhbi1iZWZvcmVdPVwiZ2V0TGluZVNwYW4obGFzdFJvdW5kLCBsYXN0Um91bmQsIHJvdW5kLCBuZXh0Um91bmQsIGJyYWNrZXQpXCJcbiAgICAgICAgICAgIFthdHRyLmxpbmUtc3Bhbi1jdXJyZW50XT1cImdldExpbmVTcGFuKHJvdW5kLCBsYXN0Um91bmQsIHJvdW5kLCBuZXh0Um91bmQsIGJyYWNrZXQpXCJcbiAgICAgICAgICAgIFthdHRyLmxpbmUtc3Bhbi1hZnRlcl09XCJnZXRMaW5lU3BhbihuZXh0Um91bmQsIGxhc3RSb3VuZCwgcm91bmQsIG5leHRSb3VuZCwgYnJhY2tldClcIlxuICAgICAgICAgICAgW2F0dHIuaXMtZmlyc3QtbG9zZXItcm91bmQtbWF0Y2hdPVwiXG4gICAgICAgICAgICAgIChyb3VuZC5kYXRhLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0JyB8fCByb3VuZC5kYXRhLnR5cGUgPT09ICd0aGlyZF9wbGFjZScpICYmIG1hdGNoSW5kZXggPT09IDBcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYXR0ci5pcy1sYXN0LWxvd2VyLWJyYWNrZXQtbWF0Y2hdPVwiXG4gICAgICAgICAgICAgIHJvdW5kLmRhdGEudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnICYmXG4gICAgICAgICAgICAgIChyb3VuZEluZGV4ID09PSBicmFja2V0LmJyYWNrZXRSb3VuZHMubGVuZ3RoIC0gMSB8fCBuZXh0Um91bmQ/LmRhdGE/LnR5cGUgPT09ICd0aGlyZF9wbGFjZScpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJldC1icmFja2V0LW1hdGNoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpjZGtQb3J0YWxPdXRsZXQ9XCJjcmVhdGVNYXRjaFBvcnRhbChtYXRjaCwgX2NvbmZpZy5tYXRjaENvbXBvbmVudClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
@@ -49,10 +49,10 @@ export class Bracket {
|
|
|
49
49
|
return this._roundsWithMatches.filter((r) => r.round.type === 'loser_bracket');
|
|
50
50
|
}
|
|
51
51
|
get firstWinnerRound() {
|
|
52
|
-
return this.winnerRounds[0];
|
|
52
|
+
return this.winnerRounds[0] ?? null;
|
|
53
53
|
}
|
|
54
54
|
get firstLoserRound() {
|
|
55
|
-
return
|
|
55
|
+
return this.loserRounds[0] ?? null;
|
|
56
56
|
}
|
|
57
57
|
get winnerRoundCount() {
|
|
58
58
|
return this.winnerRounds.length;
|
|
@@ -61,13 +61,13 @@ export class Bracket {
|
|
|
61
61
|
return this.loserRounds.length;
|
|
62
62
|
}
|
|
63
63
|
get bracketSize() {
|
|
64
|
-
return this.firstWinnerRound.matches.length * 2;
|
|
64
|
+
return this.firstWinnerRound ? this.firstWinnerRound.matches.length * 2 : 0;
|
|
65
65
|
}
|
|
66
66
|
get bracketType() {
|
|
67
67
|
return !this.loserRoundCount ? 'single' : 'double';
|
|
68
68
|
}
|
|
69
69
|
get winnerBracketRowCount() {
|
|
70
|
-
return this.firstWinnerRound
|
|
70
|
+
return this.firstWinnerRound?.matches.length ?? 0;
|
|
71
71
|
}
|
|
72
72
|
get loserBracketRowCount() {
|
|
73
73
|
return this.firstLoserRound?.matches.length ?? 0;
|
|
@@ -106,7 +106,7 @@ export class Bracket {
|
|
|
106
106
|
return loserRoundCount - winnerRoundCount;
|
|
107
107
|
}
|
|
108
108
|
get isPartialDoubleElimination() {
|
|
109
|
-
return (this.bracketType === 'double' && this.firstWinnerRound
|
|
109
|
+
return (this.bracketType === 'double' && this.firstWinnerRound?.matches.length === this.firstLoserRound?.matches.length);
|
|
110
110
|
}
|
|
111
111
|
constructor(_roundsWithMatches) {
|
|
112
112
|
this._roundsWithMatches = _roundsWithMatches;
|
|
@@ -121,7 +121,7 @@ export class Bracket {
|
|
|
121
121
|
let rowStart = isWinnerBracket ? this.winnerRowStart : this.loserRowStart;
|
|
122
122
|
let rowEnd = isWinnerBracket ? this.winnerRowEnd : this.loserRowEnd;
|
|
123
123
|
let firstRoundMatchCount = isWinnerBracket
|
|
124
|
-
? this.firstWinnerRound
|
|
124
|
+
? this.firstWinnerRound?.matches.length
|
|
125
125
|
: this.firstLoserRound?.matches.length;
|
|
126
126
|
if (isDoubleElimination) {
|
|
127
127
|
if (isWinnerBracket) {
|
|
@@ -244,8 +244,11 @@ export class Bracket {
|
|
|
244
244
|
let logicalNextRound = null;
|
|
245
245
|
if ((currentRound?.round.type === 'loser_bracket' && !nextRound) ||
|
|
246
246
|
(currentRound?.round.type === 'loser_bracket' && nextRound?.round.type === 'third_place')) {
|
|
247
|
-
|
|
248
|
-
|
|
247
|
+
const next = this._roundsWithMatches[currentRoundIndex - this.looserRowAdditionalRoundCount + 1];
|
|
248
|
+
if (next) {
|
|
249
|
+
// Transition from last round of looser bracket to semi final round of winner bracket
|
|
250
|
+
logicalNextRound = next;
|
|
251
|
+
}
|
|
249
252
|
}
|
|
250
253
|
else if (((currentRound && isUpperBracketMatch(currentRound)) || !currentRound?.round.type) &&
|
|
251
254
|
nextRound?.round.type === 'loser_bracket') {
|
|
@@ -259,8 +262,9 @@ export class Bracket {
|
|
|
259
262
|
let previousMatchB = previousRound?.matches[matchIndex * 2 + 1]?.id ?? null;
|
|
260
263
|
// previousMatchB could be the last loser bracket match
|
|
261
264
|
if (!previousMatchB && currentRound && isUpperBracketMatch(currentRound)) {
|
|
262
|
-
|
|
263
|
-
|
|
265
|
+
const matchB = this.loserRounds[currentRoundIndex + this.looserRowAdditionalRoundCount - 1]?.matches[0];
|
|
266
|
+
if (this.loserRounds.length === currentRoundIndex + this.looserRowAdditionalRoundCount && matchB) {
|
|
267
|
+
previousMatchB = matchB.id;
|
|
264
268
|
roundsSameSize = false;
|
|
265
269
|
}
|
|
266
270
|
}
|
|
@@ -332,4 +336,4 @@ export class Bracket {
|
|
|
332
336
|
return rounds;
|
|
333
337
|
}
|
|
334
338
|
}
|
|
335
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhY2tldC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9icmFja2V0L3V0aWxzL2JyYWNrZXQudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBRWxCLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBNEQsRUFBRSxFQUFFO0lBQ2xHLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsT0FBTyxDQUNMLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLGdCQUFnQjtRQUNyQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO1FBQzVCLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVE7UUFDN0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssZUFBZTtRQUNwQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNsQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBNEMsRUFBRSxFQUFFO0lBQzFFLE1BQU0sWUFBWSxHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDL0YsTUFBTSxZQUFZLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQ3ZHLE1BQU0sV0FBVyxHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxN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QyxDQUFDLElBQUksSUFBSSxDQUFDO1lBRXJGLDZEQUE2RDtZQUM3RCxJQUFJLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssa0JBQWtCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDMUYsYUFBYSxHQUFHLElBQUksQ0FBQzthQUN0QjtZQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ25GO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQTBPRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1hdGNoTGlzdFZpZXcsIFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXcgfSBmcm9tICdAZXRobGV0ZS90eXBlcyc7XG5pbXBvcnQgeyBCcmFja2V0TWF0Y2gsIEJyYWNrZXRSb3VuZCB9IGZyb20gJy4uL3R5cGVzJztcblxubGV0IGJyYWNrZXRJZCA9IDA7XG5cbmV4cG9ydCBjb25zdCBpc1VwcGVyQnJhY2tldE1hdGNoID0gKG1hdGNoOiBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBtYXRjaC5yb3VuZC50eXBlID09PSAnd2lubmVyX2JyYWNrZXQnIHx8XG4gICAgbWF0Y2gucm91bmQudHlwZSA9PT0gJ2ZpbmFsJyB8fFxuICAgIG1hdGNoLnJvdW5kLnR5cGUgPT09ICdub3JtYWwnIHx8XG4gICAgbWF0Y2gucm91bmQudHlwZSA9PT0gJ3JldmVyc2VfZmluYWwnIHx8XG4gICAgIW1hdGNoLnJvdW5kLnR5cGVcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBvcmRlclJvdW5kcyA9IChyb3VuZHM6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXdbXSkgPT4ge1xuICBjb25zdCBub3JtYWxSb3VuZHMgPSBvcmRlclJvdW5kc0J5Um91bmROdW1iZXIocm91bmRzLmZpbHRlcigocikgPT4gci5yb3VuZC50eXBlID09PSAnbm9ybWFsJykpO1xuICBjb25zdCB3aW5uZXJSb3VuZHMgPSBvcmRlclJvdW5kc0J5Um91bmROdW1iZXIocm91bmRzLmZpbHRlcigocikgPT4gci5yb3VuZC50eXBlID09PSAnd2lubmVyX2JyYWNrZXQnKSk7XG4gIGNvbnN0IGxvc2VyUm91bmRzID0gb3JkZXJSb3VuZHNCeVJvdW5kTnVtYmVyKHJvdW5kcy5maWx0ZXIoKHIpID0+IHIucm91bmQudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnKSk7XG4gIGNvbnN0IGZpbmFsUm91bmRzID0gcm91bmRzLmZpbHRlcigocikgPT4gci5yb3VuZC50eXBlID09PSAnZmluYWwnKTtcbiAgY29uc3QgcmV2ZXJzZUZpbmFsUm91bmRzID0gcm91bmRzLmZpbHRlcigocikgPT4gci5yb3VuZC50eXBlID09PSAncmV2ZXJzZV9maW5hbCcpO1xuICBjb25zdCB0aGlyZFBsYWNlUm91bmRzID0gcm91bmRzLmZpbHRlcigocikgPT4gci5yb3VuZC50eXBlID09PSAndGhpcmRfcGxhY2UnKTtcblxuICByZXR1cm4gWy4uLndpbm5lclJvdW5kcywgLi4ubm9ybWFsUm91bmRzLCAuLi5maW5hbFJvdW5kcywgLi4ucmV2ZXJzZUZpbmFsUm91bmRzLCAuLi5sb3NlclJvdW5kcywgLi4udGhpcmRQbGFjZVJvdW5kc107XG59O1xuXG5leHBvcnQgY29uc3Qgb3JkZXJSb3VuZHNCeVJvdW5kTnVtYmVyID0gKHJvdW5kczogUm91bmRTdGFnZVN0cnVjdHVyZVdpdGhNYXRjaGVzVmlld1tdKSA9PiB7XG4gIHJldHVybiByb3VuZHMuc2xpY2UoMCkuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLnJvdW5kLm51bWJlciA8IGIucm91bmQubnVtYmVyKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChhLnJvdW5kLm51bWJlciA+IGIucm91bmQubnVtYmVyKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVJvdW5kVHlwZSA9IChyb3VuZFR5cGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpID0+IHtcbiAgaWYgKCFyb3VuZFR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChcbiAgICByb3VuZFR5cGUgPT09ICdub3JtYWwnIHx8XG4gICAgcm91bmRUeXBlID09PSAnd2lubmVyX2JyYWNrZXQnIHx8XG4gICAgcm91bmRUeXBlID09PSAnZmluYWwnIHx8XG4gICAgcm91bmRUeXBlID09PSAncmV2ZXJzZV9maW5hbCdcbiAgKSB7XG4gICAgcmV0dXJuICd1cHBlcic7XG4gIH1cblxuICByZXR1cm4gJ2xvd2VyJztcbn07XG5cbmV4cG9ydCBjbGFzcyBCcmFja2V0IHtcbiAgZ2V0IHdpbm5lclJvdW5kcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRzV2l0aE1hdGNoZXMuZmlsdGVyKChyKSA9PiBpc1VwcGVyQnJhY2tldE1hdGNoKHIpKTtcbiAgfVxuXG4gIGdldCBsb3NlclJvdW5kcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRzV2l0aE1hdGNoZXMuZmlsdGVyKChyKSA9PiByLnJvdW5kLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0Jyk7XG4gIH1cblxuICBnZXQgZmlyc3RXaW5uZXJSb3VuZCgpIHtcbiAgICByZXR1cm4gdGhpcy53aW5uZXJSb3VuZHNbMF07XG4gIH1cblxuICBnZXQgZmlyc3RMb3NlclJvdW5kKCkge1xuICAgIHJldHVybiAodGhpcy5sb3NlclJvdW5kc1swXSA/PyBudWxsKSBhcyBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IHwgbnVsbDtcbiAgfVxuXG4gIGdldCB3aW5uZXJSb3VuZENvdW50KCkge1xuICAgIHJldHVybiB0aGlzLndpbm5lclJvdW5kcy5sZW5ndGg7XG4gIH1cblxuICBnZXQgbG9zZXJSb3VuZENvdW50KCkge1xuICAgIHJldHVybiB0aGlzLmxvc2VyUm91bmRzLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBicmFja2V0U2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maXJzdFdpbm5lclJvdW5kLm1hdGNoZXMubGVuZ3RoICogMjtcbiAgfVxuXG4gIGdldCBicmFja2V0VHlwZSgpIHtcbiAgICByZXR1cm4gIXRoaXMubG9zZXJSb3VuZENvdW50ID8gJ3NpbmdsZScgOiAnZG91YmxlJztcbiAgfVxuXG4gIGdldCB3aW5uZXJCcmFja2V0Um93Q291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlyc3RXaW5uZXJSb3VuZC5tYXRjaGVzLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBsb3NlckJyYWNrZXRSb3dDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5maXJzdExvc2VyUm91bmQ/Lm1hdGNoZXMubGVuZ3RoID8/IDA7XG4gIH1cblxuICBnZXQgdG90YWxSb3dDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy53aW5uZXJCcmFja2V0Um93Q291bnQgKyB0aGlzLmxvc2VyQnJhY2tldFJvd0NvdW50ICsgMTtcbiAgfVxuXG4gIGdldCB0b3RhbENvbENvdW50KCkge1xuICAgIHJldHVybiB0aGlzLmJyYWNrZXRUeXBlID09PSAnc2luZ2xlJ1xuICAgICAgPyB0aGlzLndpbm5lclJvdW5kQ291bnRcbiAgICAgIDogdGhpcy5sb3NlclJvdW5kQ291bnQgKyAodGhpcy53aW5uZXJSb3VuZENvdW50IC0gdGhpcy5sb3NlclJvdW5kQ291bnQgLyAyKSAtIDE7XG4gIH1cblxuICBnZXQgd2lubmVyUm93U3RhcnQoKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBnZXQgd2lubmVyUm93RW5kKCkge1xuICAgIHJldHVybiB0aGlzLmJyYWNrZXRUeXBlID09PSAnc2luZ2xlJyA/IHRoaXMudG90YWxSb3dDb3VudCA6IHRoaXMudG90YWxSb3dDb3VudCAtIHRoaXMud2lubmVyQnJhY2tldFJvd0NvdW50O1xuICB9XG5cbiAgZ2V0IGxvc2VyUm93U3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMud2lubmVyQnJhY2tldFJvd0NvdW50ICsgMTtcbiAgfVxuXG4gIGdldCBsb3NlclJvd0VuZCgpIHtcbiAgICByZXR1cm4gdGhpcy50b3RhbFJvd0NvdW50O1xuICB9XG5cbiAgZ2V0IGluZGV4T2ZMb29zZXJSb3VuZFN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZHNXaXRoTWF0Y2hlcy5maW5kSW5kZXgoKHIpID0+IHIucm91bmQudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnKTtcbiAgfVxuXG4gIGdldCBsb29zZXJSb3dBZGRpdGlvbmFsUm91bmRDb3VudCgpIHtcbiAgICBpZiAodGhpcy5icmFja2V0VHlwZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IHdpbm5lclJvdW5kcyA9IHRoaXMuX3JvdW5kc1dpdGhNYXRjaGVzLmZpbHRlcigocikgPT4gci5yb3VuZC50eXBlID09PSAnd2lubmVyX2JyYWNrZXQnKTtcbiAgICBjb25zdCB3aW5uZXJSb3VuZENvdW50ID0gd2lubmVyUm91bmRzLmxlbmd0aDtcbiAgICBjb25zdCBsb3NlclJvdW5kcyA9IHRoaXMuX3JvdW5kc1dpdGhNYXRjaGVzLmZpbHRlcigocikgPT4gci5yb3VuZC50eXBlID09PSAnbG9zZXJfYnJhY2tldCcpO1xuICAgIGNvbnN0IGxvc2VyUm91bmRDb3VudCA9IGxvc2VyUm91bmRzLmxlbmd0aDtcblxuICAgIHJldHVybiBsb3NlclJvdW5kQ291bnQgLSB3aW5uZXJSb3VuZENvdW50O1xuICB9XG5cbiAgZ2V0IGlzUGFydGlhbERvdWJsZUVsaW1pbmF0aW9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJyYWNrZXRUeXBlID09PSAnZG91YmxlJyAmJiB0aGlzLmZpcnN0V2lubmVyUm91bmQubWF0Y2hlcy5sZW5ndGggPT09IHRoaXMuZmlyc3RMb3NlclJvdW5kPy5tYXRjaGVzLmxlbmd0aFxuICAgICk7XG4gIH1cblxuICByZWFkb25seSBicmFja2V0Um91bmRzOiBCcmFja2V0Um91bmRbXTtcbiAgcmVhZG9ubHkgaWQgPSBicmFja2V0SWQrKztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9icmFja2V0TWF0Y2hlczogQnJhY2tldE1hdGNoW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfcm91bmRzV2l0aE1hdGNoZXM6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXdbXSkge1xuICAgIHRoaXMuYnJhY2tldFJvdW5kcyA9IHRoaXMuX2NvbXB1dGVCcmFja2V0KF9yb3VuZHNXaXRoTWF0Y2hlcyk7XG5cbiAgICBjb25zdCByb3VuZHMgPSB0aGlzLmJyYWNrZXRSb3VuZHMubWFwKChyKSA9PiByLm1hdGNoZXMpO1xuICAgIGNvbnN0IGZsYXRNYXRjaGVzOiBCcmFja2V0TWF0Y2hbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCByb3VuZCBvZiByb3VuZHMpIHtcbiAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2Ygcm91bmQpIHtcbiAgICAgICAgZmxhdE1hdGNoZXMucHVzaChtYXRjaCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fYnJhY2tldE1hdGNoZXMgPSBmbGF0TWF0Y2hlcztcbiAgfVxuXG4gIGdldFJvdW5kQnlJZChyb3VuZElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5icmFja2V0Um91bmRzLmZpbmQoKHIpID0+IHIuZGF0YS5pZCA9PT0gcm91bmRJZCk7XG4gIH1cblxuICBnZXRNYXRjaEJ5SWQobWF0Y2hJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JyYWNrZXRNYXRjaGVzLmZpbmQoKG0pID0+IG0uZGF0YS5pZCA9PT0gbWF0Y2hJZCk7XG4gIH1cblxuICBwcml2YXRlIF9jb21wdXRlQnJhY2tldChkYXRhOiBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3W10pIHtcbiAgICBjb25zdCByb3VuZHM6IEJyYWNrZXRSb3VuZFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgcm91bmRdIG9mIGRhdGEuZW50cmllcygpKSB7XG4gICAgICBsZXQgcmVsYXRpdmVJbmRleCA9IGluZGV4O1xuXG4gICAgICBpZiAoaW5kZXggPT09IHRoaXMuaW5kZXhPZkxvb3NlclJvdW5kU3RhcnQgfHwgaW5kZXggPiB0aGlzLmluZGV4T2ZMb29zZXJSb3VuZFN0YXJ0KSB7XG4gICAgICAgIHJlbGF0aXZlSW5kZXggPSBpbmRleCAtIHRoaXMuaW5kZXhPZkxvb3NlclJvdW5kU3RhcnQ7XG4gICAgICB9XG5cbiAgICAgIGxldCBwcmV2aW91c1JvdW5kOiBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IHwgbnVsbCA9IGRhdGFbaW5kZXggLSAxXSA/PyBudWxsO1xuICAgICAgY29uc3QgbmV4dFJvdW5kOiBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IHwgbnVsbCA9IGRhdGFbaW5kZXggKyAxXSA/PyBudWxsO1xuXG4gICAgICAvLyBTd2l0Y2hpbmcgdG8gbG9zZXIgYnJhY2tldCBzaG91bGQgcmVzZXQgdGhlIHByZXZpb3VzUm91bmQuXG4gICAgICBpZiAobm9ybWFsaXplUm91bmRUeXBlKHByZXZpb3VzUm91bmQ/LnJvdW5kLnR5cGUpICE9PSBub3JtYWxpemVSb3VuZFR5cGUocm91bmQucm91bmQudHlwZSkpIHtcbiAgICAgICAgcHJldmlvdXNSb3VuZCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJvdW5kcy5wdXNoKHRoaXMuX3RyYW5zZm9ybVJvdW5kKHJvdW5kLCByZWxhdGl2ZUluZGV4LCBwcmV2aW91c1JvdW5kLCBuZXh0Um91bmQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm91bmRzO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHJhbnNmb3JtUm91bmQgPSAoXG4gICAgY3VycmVudFJvdW5kOiBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3LFxuICAgIGN1cnJlbnRSb3VuZEluZGV4OiBudW1iZXIsXG4gICAgcHJldmlvdXNSb3VuZDogUm91bmRTdGFnZVN0cnVjdHVyZVdpdGhNYXRjaGVzVmlldyB8IG51bGwsXG4gICAgbmV4dFJvdW5kOiBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IHwgbnVsbCxcbiAgKTogQnJhY2tldFJvdW5kID0+IHtcbiAgICBjb25zdCBtYXRjaENvdW50ID0gY3VycmVudFJvdW5kLm1hdGNoZXMubGVuZ3RoO1xuICAgIGNvbnN0IG5hbWUgPSBjdXJyZW50Um91bmQucm91bmQubmFtZTtcbiAgICBjb25zdCBpc1dpbm5lckJyYWNrZXQgPSBpc1VwcGVyQnJhY2tldE1hdGNoKGN1cnJlbnRSb3VuZCk7XG4gICAgY29uc3QgaXNEb3VibGVFbGltaW5hdGlvbiA9IHRoaXMuYnJhY2tldFR5cGUgPT09ICdkb3VibGUnO1xuXG4gICAgbGV0IGNvbFN0YXJ0ID0gMDtcbiAgICBsZXQgY29sRW5kID0gMDtcblxuICAgIGxldCByb3dTdGFydCA9IGlzV2lubmVyQnJhY2tldCA/IHRoaXMud2lubmVyUm93U3RhcnQgOiB0aGlzLmxvc2VyUm93U3RhcnQ7XG4gICAgbGV0IHJvd0VuZCA9IGlzV2lubmVyQnJhY2tldCA/IHRoaXMud2lubmVyUm93RW5kIDogdGhpcy5sb3NlclJvd0VuZDtcbiAgICBsZXQgZmlyc3RSb3VuZE1hdGNoQ291bnQgPSBpc1dpbm5lckJyYWNrZXRcbiAgICAgID8gdGhpcy5maXJzdFdpbm5lclJvdW5kLm1hdGNoZXMubGVuZ3RoXG4gICAgICA6IHRoaXMuZmlyc3RMb3NlclJvdW5kPy5tYXRjaGVzLmxlbmd0aDtcblxuICAgIGlmIChpc0RvdWJsZUVsaW1pbmF0aW9uKSB7XG4gICAgICBpZiAoaXNXaW5uZXJCcmFja2V0KSB7XG4gICAgICAgIGlmIChjdXJyZW50Um91bmRJbmRleCA9PT0gMCkge1xuICAgICAgICAgIC8vIFRoZSBmaXJzdCB3aW5uZXIgYnJhY2tldCByb3VuZCBpcyBhbHdheXMgMSBjb2wgd2lkZS5cbiAgICAgICAgICBjb2xTdGFydCA9IDE7XG4gICAgICAgICAgY29sRW5kID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb2xTdGFydERvdWJsZSA9IGN1cnJlbnRSb3VuZEluZGV4ICogMjtcbiAgICAgICAgICBjb25zdCBjb2xFbmREb3VibGUgPSBjb2xTdGFydERvdWJsZSArIDE7XG4gICAgICAgICAgY29uc3QgaXNTZW1pRmluYWxSb3VuZCA9IGN1cnJlbnRSb3VuZC5yb3VuZC50eXBlID09PSAnd2lubmVyX2JyYWNrZXQnICYmIG1hdGNoQ291bnQgPT09IDE7XG5cbiAgICAgICAgICAvLyBJZiB0aGUgY29sIGVuZCBpcyBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIGxvb3NlciByb3VuZHMsIHRoZW4gd2UgbmVlZCB0byBzcGFuIDIgY29scyxcbiAgICAgICAgICAvLyBzaW5jZSB0aGUgbG9zZXIgYnJhY2tldCB3aWxsIGFsd2F5cyBwbGF5IDIgcm91bmRzIHBlciB3aW5uZXIgYnJhY2tldCByb3VuZC5cbiAgICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gc3BhbiAyIGNvbCBpZiB0aGUgY3VycmVudCByb3VuZCBpcyB0aGUgc2VtaSBmaW5hbCByb3VuZCBBTkQgd2UgaGF2ZSBhbiBhc3luYyBzdGFydC5cbiAgICAgICAgICAvLyBBc3luYyBzdGFydCBtZWFucyB0aGF0IHRoZSBmaXJzdCB3aW5uZXIgcm91bmQncyBtYXRjaGVzIGxlbmd0aCBpcyBlcXVhbCB0byB0aGUgZmlyc3QgbG9zZXIgcm91bmQncyBtYXRjaGVzIGxlbmd0aC5cbiAgICAgICAgICAvLyBUaGlzIGlzIHByb2R1Y2VkIGJ5IG9ubHkgc2hvd2luZyBhIHBhcnQgKGVnLiB0aGUgbGFzdCA1IHJvdW5kcykgb2YgYSBtdWNoIGJpZ2dlciBicmFja2V0LlxuICAgICAgICAgIGlmIChjb2xFbmREb3VibGUgPCB0aGlzLmxvc2VyUm91bmRDb3VudCB8fCAoaXNTZW1pRmluYWxSb3VuZCAmJiB0aGlzLmlzUGFydGlhbERvdWJsZUVsaW1pbmF0aW9uKSkge1xuICAgICAgICAgICAgY29sU3RhcnQgPSBjb2xTdGFydERvdWJsZTtcblxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGQgb25lIHRvIHRoZSBjb2wgdG8gY3JlYXRlIGEgYWN0dWFsIGdyaWQgc3BhblxuICAgICAgICAgICAgY29sRW5kID0gY29sRW5kRG91YmxlICsgMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGNvbCBlbmQgaXMgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBsb29zZXIgcm91bmRzLCB0aGVuIHdlIG5lZWQgdG8gZ28gYmFjayB0byAxIGNvbCB3aWRlLFxuICAgICAgICAgICAgLy8gc2luY2UgdGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgc2VtaSBmaW5hbHMsIGZpbmFscyAoYW5kIHNlY29uZCBjaGFuY2UgZmluYWwpIGFyZSBwbGF5ZWRcbiAgICAgICAgICAgIGNvbnN0IG92ZXJzaG9vdCA9IGNvbEVuZERvdWJsZSAtIHRoaXMubG9zZXJSb3VuZENvdW50O1xuICAgICAgICAgICAgbGV0IGRlbHRhID0gTWF0aC5mbG9vcihvdmVyc2hvb3QgLyAyKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNQYXJ0aWFsRG91YmxlRWxpbWluYXRpb24pIHtcbiAgICAgICAgICAgICAgZGVsdGEgPSBkZWx0YSAtIDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbFN0YXJ0ID0gY29sU3RhcnREb3VibGUgLSBkZWx0YTtcbiAgICAgICAgICAgIGNvbEVuZCA9IGNvbFN0YXJ0RG91YmxlIC0gZGVsdGE7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBvdmVyc2hvb3QgaXMgYmlnZ2VyIHRoYW4gMSwgd2UgbmVlZCB0byBhZGp1c3QgdGhlIHJvdyBzdGFydCBhbmQgZW5kIHRvIHNwYW4gb3ZlciB0aGUgd2hvbGUgZ3JpZCxcbiAgICAgICAgICAgIC8vIHNpbmNlIHdlIGFyZSBpbiB0aGUgZmluYWwgcm91bmQocykuXG4gICAgICAgICAgICAvLyBPdmVyc2hvb3QgMSBtZWFucyB3ZSBhcmUgaW4gdGhlIHNlbWkgZmluYWwgcm91bmQgYW5kIHRoZXJlIGlzIGEgbG9zZXIgYnJhY2tldCByb3VuZCBpbiB0aGlzIHN0ZXAgKHRoZSBsYXN0IG9uZSkuXG4gICAgICAgICAgICBpZiAob3ZlcnNob290ID4gMSkge1xuICAgICAgICAgICAgICByb3dTdGFydCA9IDE7XG4gICAgICAgICAgICAgIHJvd0VuZCA9IHRoaXMudG90YWxSb3dDb3VudDtcbiAgICAgICAgICAgICAgZmlyc3RSb3VuZE1hdGNoQ291bnQgPSB0aGlzLnRvdGFsUm93Q291bnQgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50Um91bmQucm91bmQudHlwZSA9PT0gJ3RoaXJkX3BsYWNlJykge1xuICAgICAgICBjb25zdCBoYXNTZWNvbmRDaGFuY2VGaW5hbCA9IHRoaXMuX3JvdW5kc1dpdGhNYXRjaGVzLnNvbWUoKHIpID0+IHIucm91bmQudHlwZSA9PT0gJ3JldmVyc2VfZmluYWwnKTtcblxuICAgICAgICAvLyBTcGFuIHRoZSB0aGlyZCBwbGFjZSBtYXRjaCBmb3JtIGZpbmFsIHRvIHNlY29uZCBjaGFuY2UgZmluYWxcbiAgICAgICAgaWYgKGhhc1NlY29uZENoYW5jZUZpbmFsKSB7XG4gICAgICAgICAgY29sU3RhcnQgPSBjdXJyZW50Um91bmRJbmRleCArIDE7XG4gICAgICAgICAgY29sRW5kID0gY3VycmVudFJvdW5kSW5kZXggKyAzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEtlZXAgdGhlIHRoaXJkIHBsYWNlIG1hdGNoIGluIHRoZSBzYW1lIGNvbCBhcyB0aGUgZmluYWxcbiAgICAgICAgICBjb2xTdGFydCA9IGN1cnJlbnRSb3VuZEluZGV4ICsgMTtcbiAgICAgICAgICBjb2xFbmQgPSBjdXJyZW50Um91bmRJbmRleCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvc2VyIGJyYWNrZXQgcm91bmRzIGFyZSBhbHdheXMgMSBjb2wgd2lkZS5cbiAgICAgICAgY29sU3RhcnQgPSBjdXJyZW50Um91bmRJbmRleCArIDE7XG4gICAgICAgIGNvbEVuZCA9IGN1cnJlbnRSb3VuZEluZGV4ICsgMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN1cnJlbnRSb3VuZC5yb3VuZC50eXBlID09PSAndGhpcmRfcGxhY2UnKSB7XG4gICAgICAgIC8vIFRoZSB0aGlyZCBwbGFjZSBtYXRjaCBpcyBhbHdheXMgaW4gdGhlIHNhbWUgY29sIGFzIHRoZSBmaW5hbFxuICAgICAgICBjb2xTdGFydCA9IGN1cnJlbnRSb3VuZEluZGV4IC0gMTtcbiAgICAgICAgY29sRW5kID0gY3VycmVudFJvdW5kSW5kZXggLSAxO1xuXG4gICAgICAgIGlmICh0aGlzLndpbm5lclJvd0VuZCAtIDEgPT09IDIpIHtcbiAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIDIgbWF0Y2ggYnJhY2tldHNcbiAgICAgICAgICByb3dTdGFydCA9IDI7XG4gICAgICAgICAgcm93RW5kID0gMjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLndpbm5lclJvd0VuZCAtIDEgPT09IDQpIHtcbiAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIDQgbWF0Y2ggYnJhY2tldHNcbiAgICAgICAgICByb3dTdGFydCA9IDM7XG4gICAgICAgICAgcm93RW5kID0gMztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLndpbm5lclJvd0VuZCAtIDEgPiA0KSB7XG4gICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciA4KyBtYXRjaCBicmFja2V0cy4gVGhpcyB3aWxsIHJlc3VsdCBpbiBpdCBiZWluZyBpbiB0aGUgc2FtZSByb3cgYXMgdGhlIHNlY29uZCBzZW1pIGZpbmFsIG1hdGNoLlxuICAgICAgICAgIHJvd1N0YXJ0ID0gKHRoaXMud2lubmVyUm93RW5kIC0gMSkgLyAyICsgKHRoaXMud2lubmVyUm93RW5kIC0gMSkgLyAyIC8gMjtcbiAgICAgICAgICByb3dFbmQgPSB0aGlzLndpbm5lclJvd0VuZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWxsIG90aGVyIHNpbmdsZSBlbGltaW5hdGlvbiByb3VuZHMgYXJlIGFsd2F5cyAxIGNvbCB3aWRlLlxuICAgICAgICBjb2xTdGFydCA9IGN1cnJlbnRSb3VuZEluZGV4O1xuICAgICAgICBjb2xFbmQgPSBjdXJyZW50Um91bmRJbmRleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaGVzID0gY3VycmVudFJvdW5kLm1hdGNoZXMubWFwKChtYXRjaCwgbWF0Y2hJbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybU1hdGNoKFxuICAgICAgICBtYXRjaCxcbiAgICAgICAgbWF0Y2hJbmRleCxcbiAgICAgICAgcm93U3RhcnQsXG4gICAgICAgIG1hdGNoQ291bnQsXG4gICAgICAgIGZpcnN0Um91bmRNYXRjaENvdW50ID8/IDAsXG4gICAgICAgIHByZXZpb3VzUm91bmQsXG4gICAgICAgIG5leHRSb3VuZCxcbiAgICAgICAgY3VycmVudFJvdW5kLFxuICAgICAgICBjdXJyZW50Um91bmRJbmRleCxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbWF0Y2hDb3VudCxcbiAgICAgIG5hbWUsXG4gICAgICBtYXRjaGVzLFxuICAgICAgZGF0YTogY3VycmVudFJvdW5kLnJvdW5kLFxuXG4gICAgICByb3c6IHtcbiAgICAgICAgc3RhcnQ6IHJvd1N0YXJ0LFxuICAgICAgICBlbmQ6IHJvd0VuZCxcbiAgICAgIH0sXG4gICAgICBjb2x1bW46IHtcbiAgICAgICAgc3RhcnQ6IGNvbFN0YXJ0LFxuICAgICAgICBlbmQ6IGNvbEVuZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfTtcblxuICBwcml2YXRlIF90cmFuc2Zvcm1NYXRjaCA9IChcbiAgICBtYXRjaDogTWF0Y2hMaXN0VmlldyxcbiAgICBtYXRjaEluZGV4OiBudW1iZXIsXG4gICAgcm91bmRSb3dTdGFydDogbnVtYmVyLFxuICAgIG1hdGNoQ291bnQ6IG51bWJlcixcbiAgICBmaXJzdFJvdW5kTWF0Y2hDb3VudDogbnVtYmVyLFxuICAgIHByZXZpb3VzUm91bmQ6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXcgfCBudWxsLFxuICAgIG5leHRSb3VuZDogUm91bmRTdGFnZVN0cnVjdHVyZVdpdGhNYXRjaGVzVmlldyB8IG51bGwsXG4gICAgY3VycmVudFJvdW5kOiBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IHwgbnVsbCxcbiAgICBjdXJyZW50Um91bmRJbmRleDogbnVtYmVyLFxuICApOiBCcmFja2V0TWF0Y2ggPT4ge1xuICAgIGNvbnN0IGRpZmYgPSBmaXJzdFJvdW5kTWF0Y2hDb3VudCAvIG1hdGNoQ291bnQ7XG5cbiAgICBsZXQgcm93U3RhcnQgPSByb3VuZFJvd1N0YXJ0ICsgbWF0Y2hJbmRleCAqIGRpZmY7XG4gICAgbGV0IHJvd0VuZCA9IHJvd1N0YXJ0ICsgZGlmZjtcblxuICAgIGlmIChjdXJyZW50Um91bmQ/LnJvdW5kLnR5cGUgPT09ICd0aGlyZF9wbGFjZScgJiYgdGhpcy5icmFja2V0VHlwZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgOCsgc2luZ2xlIGVsaW1pbmF0aW9uIGJyYWNrZXRzLiBUaGlzIHdpbGwgcmVzdWx0IGluIHRoZSBjdXJyZW50IG1hdGNoIGJlaW5nIGluIHRoZSBzYW1lIHJvdyBhcyB0aGUgc2Vjb25kIHNlbWkgZmluYWwgbWF0Y2guXG4gICAgICBpZiAodGhpcy53aW5uZXJSb3dFbmQgLSAxID4gNCkge1xuICAgICAgICByb3dTdGFydCA9ICh0aGlzLndpbm5lclJvd0VuZCAtIDEpIC8gMjtcbiAgICAgICAgcm93RW5kID0gdGhpcy53aW5uZXJSb3dFbmQgLSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByb3VuZHNTYW1lU2l6ZSA9IHByZXZpb3VzUm91bmQ/Lm1hdGNoZXMubGVuZ3RoID09PSBtYXRjaENvdW50O1xuICAgIGxldCBsb2dpY2FsTmV4dFJvdW5kOiBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAoXG4gICAgICAoY3VycmVudFJvdW5kPy5yb3VuZC50eXBlID09PSAnbG9zZXJfYnJhY2tldCcgJiYgIW5leHRSb3VuZCkgfHxcbiAgICAgIChjdXJyZW50Um91bmQ/LnJvdW5kLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0JyAmJiBuZXh0Um91bmQ/LnJvdW5kLnR5cGUgPT09ICd0aGlyZF9wbGFjZScpXG4gICAgKSB7XG4gICAgICAvLyBUcmFuc2l0aW9uIGZyb20gbGFzdCByb3VuZCBvZiBsb29zZXIgYnJhY2tldCB0byBzZW1pIGZpbmFsIHJvdW5kIG9mIHdpbm5lciBicmFja2V0XG4gICAgICBsb2dpY2FsTmV4dFJvdW5kID0gdGhpcy5fcm91bmRzV2l0aE1hdGNoZXNbY3VycmVudFJvdW5kSW5kZXggLSB0aGlzLmxvb3NlclJvd0FkZGl0aW9uYWxSb3VuZENvdW50ICsgMV07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICgoY3VycmVudFJvdW5kICYmIGlzVXBwZXJCcmFja2V0TWF0Y2goY3VycmVudFJvdW5kKSkgfHwgIWN1cnJlbnRSb3VuZD8ucm91bmQudHlwZSkgJiZcbiAgICAgIG5leHRSb3VuZD8ucm91bmQudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnXG4gICAgKSB7XG4gICAgICAvLyBUaGUgbGFzdCB3aW5uZXIgcm91bmQgKGZpbmFsKSBkb2VzIG5vdCBoYXZlIGEgbmV4dCByb3VuZCwgYnV0IHRoZSBuZXh0IHJvdW5kIGlzIHRoZSBmaXJzdCBsb29zZXIgcm91bmQuXG4gICAgICBsb2dpY2FsTmV4dFJvdW5kID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9naWNhbE5leHRSb3VuZCA9IG5leHRSb3VuZDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91c01hdGNoQSA9XG4gICAgICAocm91bmRzU2FtZVNpemUgPyBwcmV2aW91c1JvdW5kPy5tYXRjaGVzW21hdGNoSW5kZXhdPy5pZCA6IHByZXZpb3VzUm91bmQ/Lm1hdGNoZXNbbWF0Y2hJbmRleCAqIDJdPy5pZCkgPz8gbnVsbDtcbiAgICBsZXQgcHJldmlvdXNNYXRjaEIgPSBwcmV2aW91c1JvdW5kPy5tYXRjaGVzW21hdGNoSW5kZXggKiAyICsgMV0/LmlkID8/IG51bGw7XG5cbiAgICAvLyBwcmV2aW91c01hdGNoQiBjb3VsZCBiZSB0aGUgbGFzdCBsb3NlciBicmFja2V0IG1hdGNoXG4gICAgaWYgKCFwcmV2aW91c01hdGNoQiAmJiBjdXJyZW50Um91bmQgJiYgaXNVcHBlckJyYWNrZXRNYXRjaChjdXJyZW50Um91bmQpKSB7XG4gICAgICBpZiAodGhpcy5sb3NlclJvdW5kcy5sZW5ndGggPT09IGN1cnJlbnRSb3VuZEluZGV4ICsgdGhpcy5sb29zZXJSb3dBZGRpdGlvbmFsUm91bmRDb3VudCkge1xuICAgICAgICBwcmV2aW91c01hdGNoQiA9IHRoaXMubG9zZXJSb3VuZHNbY3VycmVudFJvdW5kSW5kZXggKyB0aGlzLmxvb3NlclJvd0FkZGl0aW9uYWxSb3VuZENvdW50IC0gMV0ubWF0Y2hlc1swXS5pZDtcbiAgICAgICAgcm91bmRzU2FtZVNpemUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXh0TWF0Y2ggPSBsb2dpY2FsTmV4dFJvdW5kPy5tYXRjaGVzW01hdGguZmxvb3IobWF0Y2hJbmRleCAvIDIpXT8uaWQgPz8gbnVsbDtcblxuICAgIGxldCBwcmV2aW91c1JvdW5kTWF0Y2hlcyA9IG51bGw7XG5cbiAgICBpZiAocHJldmlvdXNSb3VuZCkge1xuICAgICAgaWYgKHJvdW5kc1NhbWVTaXplICYmIHByZXZpb3VzTWF0Y2hBKSB7XG4gICAgICAgIC8vIDEgbWF0Y2ggdG8gMSBtYXRjaFxuICAgICAgICBwcmV2aW91c1JvdW5kTWF0Y2hlcyA9IHtcbiAgICAgICAgICByb3VuZElkOiBwcmV2aW91c1JvdW5kLnJvdW5kLmlkLFxuICAgICAgICAgIG1hdGNoSWRzOiBbcHJldmlvdXNNYXRjaEFdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChwcmV2aW91c01hdGNoQSAmJiBwcmV2aW91c01hdGNoQikge1xuICAgICAgICAvLyAyIG1hdGNoZXMgdG8gMSBtYXRjaFxuICAgICAgICBwcmV2aW91c1JvdW5kTWF0Y2hlcyA9IHtcbiAgICAgICAgICByb3VuZElkOiBwcmV2aW91c1JvdW5kLnJvdW5kLmlkLFxuICAgICAgICAgIG1hdGNoSWRzOiBbcHJldmlvdXNNYXRjaEEsIHByZXZpb3VzTWF0Y2hCXSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXh0Um91bmRNYXRjaCA9XG4gICAgICBuZXh0TWF0Y2ggJiYgbG9naWNhbE5leHRSb3VuZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHJvdW5kSWQ6IGxvZ2ljYWxOZXh0Um91bmQucm91bmQuaWQsXG4gICAgICAgICAgICBtYXRjaElkOiBuZXh0TWF0Y2gsXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcm93OiB7XG4gICAgICAgIHN0YXJ0OiByb3dTdGFydCxcbiAgICAgICAgZW5kOiByb3dFbmQsXG4gICAgICB9LFxuICAgICAgZGF0YTogbWF0Y2gsXG5cbiAgICAgIHByZXZpb3VzTWF0Y2hlczogY3VycmVudFJvdW5kPy5yb3VuZC50eXBlICE9PSAndGhpcmRfcGxhY2UnID8gcHJldmlvdXNSb3VuZE1hdGNoZXMgOiBudWxsLFxuICAgICAgbmV4dE1hdGNoOiBjdXJyZW50Um91bmQ/LnJvdW5kLnR5cGUgIT09ICd0aGlyZF9wbGFjZScgPyBuZXh0Um91bmRNYXRjaCA6IG51bGwsXG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhY2tldC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9icmFja2V0L3V0aWxzL2JyYWNrZXQudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBRWxCLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBNEQsRUFBRSxFQUFFO0lBQ2xHLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsT0FBTyxDQUNMLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLGdCQUFnQjtRQUNyQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO1FBQzVCLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVE7UUFDN0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssZUFBZTtRQUNwQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNsQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBNEMsRUFBRSxFQUFFO0lBQzFFLE1BQU0sWUFBWSxHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDL0YsTUFBTSxZQUFZLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQ3ZHLE1BQU0sV0FBVyxHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxN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bEYsYUFBYSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUM7YUFDdEQ7WUFFRCxJQUFJLGFBQWEsR0FBOEMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7WUFDdkYsTUFBTSxTQUFTLEdBQThDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1lBRXJGLDZEQUE2RDtZQUM3RCxJQUFJLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssa0JBQWtCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDMUYsYUFBYSxHQUFHLElBQUksQ0FBQzthQUN0QjtZQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ25GO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQWdQRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1hdGNoTGlzdFZpZXcsIFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXcgfSBmcm9tICdAZXRobGV0ZS90eXBlcyc7XG5pbXBvcnQgeyBCcmFja2V0TWF0Y2gsIEJyYWNrZXRSb3VuZCB9IGZyb20gJy4uL3R5cGVzJztcblxubGV0IGJyYWNrZXRJZCA9IDA7XG5cbmV4cG9ydCBjb25zdCBpc1VwcGVyQnJhY2tldE1hdGNoID0gKG1hdGNoOiBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBtYXRjaC5yb3VuZC50eXBlID09PSAnd2lubmVyX2JyYWNrZXQnIHx8XG4gICAgbWF0Y2gucm91bmQudHlwZSA9PT0gJ2ZpbmFsJyB8fFxuICAgIG1hdGNoLnJvdW5kLnR5cGUgPT09ICdub3JtYWwnIHx8XG4gICAgbWF0Y2gucm91bmQudHlwZSA9PT0gJ3JldmVyc2VfZmluYWwnIHx8XG4gICAgIW1hdGNoLnJvdW5kLnR5cGVcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBvcmRlclJvdW5kcyA9IChyb3VuZHM6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXdbXSkgPT4ge1xuICBjb25zdCBub3JtYWxSb3VuZHMgPSBvcmRlclJvdW5kc0J5Um91bmROdW1iZXIocm91bmRzLmZpbHRlcigocikgPT4gci5yb3VuZC50eXBlID09PSAnbm9ybWFsJykpO1xuICBjb25zdCB3aW5uZXJSb3VuZHMgPSBvcmRlclJvdW5kc0J5Um91bmROdW1iZXIocm91bmRzLmZpbHRlcigocikgPT4gci5yb3VuZC50eXBlID09PSAnd2lubmVyX2JyYWNrZXQnKSk7XG4gIGNvbnN0IGxvc2VyUm91bmRzID0gb3JkZXJSb3VuZHNCeVJvdW5kTnVtYmVyKHJvdW5kcy5maWx0ZXIoKHIpID0+IHIucm91bmQudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnKSk7XG4gIGNvbnN0IGZpbmFsUm91bmRzID0gcm91bmRzLmZpbHRlcigocikgPT4gci5yb3VuZC50eXBlID09PSAnZmluYWwnKTtcbiAgY29uc3QgcmV2ZXJzZUZpbmFsUm91bmRzID0gcm91bmRzLmZpbHRlcigocikgPT4gci5yb3VuZC50eXBlID09PSAncmV2ZXJzZV9maW5hbCcpO1xuICBjb25zdCB0aGlyZFBsYWNlUm91bmRzID0gcm91bmRzLmZpbHRlcigocikgPT4gci5yb3VuZC50eXBlID09PSAndGhpcmRfcGxhY2UnKTtcblxuICByZXR1cm4gWy4uLndpbm5lclJvdW5kcywgLi4ubm9ybWFsUm91bmRzLCAuLi5maW5hbFJvdW5kcywgLi4ucmV2ZXJzZUZpbmFsUm91bmRzLCAuLi5sb3NlclJvdW5kcywgLi4udGhpcmRQbGFjZVJvdW5kc107XG59O1xuXG5leHBvcnQgY29uc3Qgb3JkZXJSb3VuZHNCeVJvdW5kTnVtYmVyID0gKHJvdW5kczogUm91bmRTdGFnZVN0cnVjdHVyZVdpdGhNYXRjaGVzVmlld1tdKSA9PiB7XG4gIHJldHVybiByb3VuZHMuc2xpY2UoMCkuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLnJvdW5kLm51bWJlciA8IGIucm91bmQubnVtYmVyKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChhLnJvdW5kLm51bWJlciA+IGIucm91bmQubnVtYmVyKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVJvdW5kVHlwZSA9IChyb3VuZFR5cGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpID0+IHtcbiAgaWYgKCFyb3VuZFR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChcbiAgICByb3VuZFR5cGUgPT09ICdub3JtYWwnIHx8XG4gICAgcm91bmRUeXBlID09PSAnd2lubmVyX2JyYWNrZXQnIHx8XG4gICAgcm91bmRUeXBlID09PSAnZmluYWwnIHx8XG4gICAgcm91bmRUeXBlID09PSAncmV2ZXJzZV9maW5hbCdcbiAgKSB7XG4gICAgcmV0dXJuICd1cHBlcic7XG4gIH1cblxuICByZXR1cm4gJ2xvd2VyJztcbn07XG5cbmV4cG9ydCBjbGFzcyBCcmFja2V0IHtcbiAgZ2V0IHdpbm5lclJvdW5kcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRzV2l0aE1hdGNoZXMuZmlsdGVyKChyKSA9PiBpc1VwcGVyQnJhY2tldE1hdGNoKHIpKTtcbiAgfVxuXG4gIGdldCBsb3NlclJvdW5kcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRzV2l0aE1hdGNoZXMuZmlsdGVyKChyKSA9PiByLnJvdW5kLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0Jyk7XG4gIH1cblxuICBnZXQgZmlyc3RXaW5uZXJSb3VuZCgpIHtcbiAgICByZXR1cm4gdGhpcy53aW5uZXJSb3VuZHNbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIGdldCBmaXJzdExvc2VyUm91bmQoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9zZXJSb3VuZHNbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIGdldCB3aW5uZXJSb3VuZENvdW50KCkge1xuICAgIHJldHVybiB0aGlzLndpbm5lclJvdW5kcy5sZW5ndGg7XG4gIH1cblxuICBnZXQgbG9zZXJSb3VuZENvdW50KCkge1xuICAgIHJldHVybiB0aGlzLmxvc2VyUm91bmRzLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBicmFja2V0U2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maXJzdFdpbm5lclJvdW5kID8gdGhpcy5maXJzdFdpbm5lclJvdW5kLm1hdGNoZXMubGVuZ3RoICogMiA6IDA7XG4gIH1cblxuICBnZXQgYnJhY2tldFR5cGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLmxvc2VyUm91bmRDb3VudCA/ICdzaW5nbGUnIDogJ2RvdWJsZSc7XG4gIH1cblxuICBnZXQgd2lubmVyQnJhY2tldFJvd0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLmZpcnN0V2lubmVyUm91bmQ/Lm1hdGNoZXMubGVuZ3RoID8/IDA7XG4gIH1cblxuICBnZXQgbG9zZXJCcmFja2V0Um93Q291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlyc3RMb3NlclJvdW5kPy5tYXRjaGVzLmxlbmd0aCA/PyAwO1xuICB9XG5cbiAgZ2V0IHRvdGFsUm93Q291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMud2lubmVyQnJhY2tldFJvd0NvdW50ICsgdGhpcy5sb3NlckJyYWNrZXRSb3dDb3VudCArIDE7XG4gIH1cblxuICBnZXQgdG90YWxDb2xDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5icmFja2V0VHlwZSA9PT0gJ3NpbmdsZSdcbiAgICAgID8gdGhpcy53aW5uZXJSb3VuZENvdW50XG4gICAgICA6IHRoaXMubG9zZXJSb3VuZENvdW50ICsgKHRoaXMud2lubmVyUm91bmRDb3VudCAtIHRoaXMubG9zZXJSb3VuZENvdW50IC8gMikgLSAxO1xuICB9XG5cbiAgZ2V0IHdpbm5lclJvd1N0YXJ0KCkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgZ2V0IHdpbm5lclJvd0VuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5icmFja2V0VHlwZSA9PT0gJ3NpbmdsZScgPyB0aGlzLnRvdGFsUm93Q291bnQgOiB0aGlzLnRvdGFsUm93Q291bnQgLSB0aGlzLndpbm5lckJyYWNrZXRSb3dDb3VudDtcbiAgfVxuXG4gIGdldCBsb3NlclJvd1N0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLndpbm5lckJyYWNrZXRSb3dDb3VudCArIDE7XG4gIH1cblxuICBnZXQgbG9zZXJSb3dFbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG90YWxSb3dDb3VudDtcbiAgfVxuXG4gIGdldCBpbmRleE9mTG9vc2VyUm91bmRTdGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRzV2l0aE1hdGNoZXMuZmluZEluZGV4KChyKSA9PiByLnJvdW5kLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0Jyk7XG4gIH1cblxuICBnZXQgbG9vc2VyUm93QWRkaXRpb25hbFJvdW5kQ291bnQoKSB7XG4gICAgaWYgKHRoaXMuYnJhY2tldFR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCB3aW5uZXJSb3VuZHMgPSB0aGlzLl9yb3VuZHNXaXRoTWF0Y2hlcy5maWx0ZXIoKHIpID0+IHIucm91bmQudHlwZSA9PT0gJ3dpbm5lcl9icmFja2V0Jyk7XG4gICAgY29uc3Qgd2lubmVyUm91bmRDb3VudCA9IHdpbm5lclJvdW5kcy5sZW5ndGg7XG4gICAgY29uc3QgbG9zZXJSb3VuZHMgPSB0aGlzLl9yb3VuZHNXaXRoTWF0Y2hlcy5maWx0ZXIoKHIpID0+IHIucm91bmQudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnKTtcbiAgICBjb25zdCBsb3NlclJvdW5kQ291bnQgPSBsb3NlclJvdW5kcy5sZW5ndGg7XG5cbiAgICByZXR1cm4gbG9zZXJSb3VuZENvdW50IC0gd2lubmVyUm91bmRDb3VudDtcbiAgfVxuXG4gIGdldCBpc1BhcnRpYWxEb3VibGVFbGltaW5hdGlvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5icmFja2V0VHlwZSA9PT0gJ2RvdWJsZScgJiYgdGhpcy5maXJzdFdpbm5lclJvdW5kPy5tYXRjaGVzLmxlbmd0aCA9PT0gdGhpcy5maXJzdExvc2VyUm91bmQ/Lm1hdGNoZXMubGVuZ3RoXG4gICAgKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGJyYWNrZXRSb3VuZHM6IEJyYWNrZXRSb3VuZFtdO1xuICByZWFkb25seSBpZCA9IGJyYWNrZXRJZCsrO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2JyYWNrZXRNYXRjaGVzOiBCcmFja2V0TWF0Y2hbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3VuZHNXaXRoTWF0Y2hlczogUm91bmRTdGFnZVN0cnVjdHVyZVdpdGhNYXRjaGVzVmlld1tdKSB7XG4gICAgdGhpcy5icmFja2V0Um91bmRzID0gdGhpcy5fY29tcHV0ZUJyYWNrZXQoX3JvdW5kc1dpdGhNYXRjaGVzKTtcblxuICAgIGNvbnN0IHJvdW5kcyA9IHRoaXMuYnJhY2tldFJvdW5kcy5tYXAoKHIpID0+IHIubWF0Y2hlcyk7XG4gICAgY29uc3QgZmxhdE1hdGNoZXM6IEJyYWNrZXRNYXRjaFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJvdW5kIG9mIHJvdW5kcykge1xuICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiByb3VuZCkge1xuICAgICAgICBmbGF0TWF0Y2hlcy5wdXNoKG1hdGNoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9icmFja2V0TWF0Y2hlcyA9IGZsYXRNYXRjaGVzO1xuICB9XG5cbiAgZ2V0Um91bmRCeUlkKHJvdW5kSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmJyYWNrZXRSb3VuZHMuZmluZCgocikgPT4gci5kYXRhLmlkID09PSByb3VuZElkKTtcbiAgfVxuXG4gIGdldE1hdGNoQnlJZChtYXRjaElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fYnJhY2tldE1hdGNoZXMuZmluZCgobSkgPT4gbS5kYXRhLmlkID09PSBtYXRjaElkKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXB1dGVCcmFja2V0KGRhdGE6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXdbXSkge1xuICAgIGNvbnN0IHJvdW5kczogQnJhY2tldFJvdW5kW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCByb3VuZF0gb2YgZGF0YS5lbnRyaWVzKCkpIHtcbiAgICAgIGxldCByZWxhdGl2ZUluZGV4ID0gaW5kZXg7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5pbmRleE9mTG9vc2VyUm91bmRTdGFydCB8fCBpbmRleCA+IHRoaXMuaW5kZXhPZkxvb3NlclJvdW5kU3RhcnQpIHtcbiAgICAgICAgcmVsYXRpdmVJbmRleCA9IGluZGV4IC0gdGhpcy5pbmRleE9mTG9vc2VyUm91bmRTdGFydDtcbiAgICAgIH1cblxuICAgICAgbGV0IHByZXZpb3VzUm91bmQ6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXcgfCBudWxsID0gZGF0YVtpbmRleCAtIDFdID8/IG51bGw7XG4gICAgICBjb25zdCBuZXh0Um91bmQ6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXcgfCBudWxsID0gZGF0YVtpbmRleCArIDFdID8/IG51bGw7XG5cbiAgICAgIC8vIFN3aXRjaGluZyB0byBsb3NlciBicmFja2V0IHNob3VsZCByZXNldCB0aGUgcHJldmlvdXNSb3VuZC5cbiAgICAgIGlmIChub3JtYWxpemVSb3VuZFR5cGUocHJldmlvdXNSb3VuZD8ucm91bmQudHlwZSkgIT09IG5vcm1hbGl6ZVJvdW5kVHlwZShyb3VuZC5yb3VuZC50eXBlKSkge1xuICAgICAgICBwcmV2aW91c1JvdW5kID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcm91bmRzLnB1c2godGhpcy5fdHJhbnNmb3JtUm91bmQocm91bmQsIHJlbGF0aXZlSW5kZXgsIHByZXZpb3VzUm91bmQsIG5leHRSb3VuZCkpO1xuICAgIH1cblxuICAgIHJldHVybiByb3VuZHM7XG4gIH1cblxuICBwcml2YXRlIF90cmFuc2Zvcm1Sb3VuZCA9IChcbiAgICBjdXJyZW50Um91bmQ6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXcsXG4gICAgY3VycmVudFJvdW5kSW5kZXg6IG51bWJlcixcbiAgICBwcmV2aW91c1JvdW5kOiBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IHwgbnVsbCxcbiAgICBuZXh0Um91bmQ6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXcgfCBudWxsLFxuICApOiBCcmFja2V0Um91bmQgPT4ge1xuICAgIGNvbnN0IG1hdGNoQ291bnQgPSBjdXJyZW50Um91bmQubWF0Y2hlcy5sZW5ndGg7XG4gICAgY29uc3QgbmFtZSA9IGN1cnJlbnRSb3VuZC5yb3VuZC5uYW1lO1xuICAgIGNvbnN0IGlzV2lubmVyQnJhY2tldCA9IGlzVXBwZXJCcmFja2V0TWF0Y2goY3VycmVudFJvdW5kKTtcbiAgICBjb25zdCBpc0RvdWJsZUVsaW1pbmF0aW9uID0gdGhpcy5icmFja2V0VHlwZSA9PT0gJ2RvdWJsZSc7XG5cbiAgICBsZXQgY29sU3RhcnQgPSAwO1xuICAgIGxldCBjb2xFbmQgPSAwO1xuXG4gICAgbGV0IHJvd1N0YXJ0ID0gaXNXaW5uZXJCcmFja2V0ID8gdGhpcy53aW5uZXJSb3dTdGFydCA6IHRoaXMubG9zZXJSb3dTdGFydDtcbiAgICBsZXQgcm93RW5kID0gaXNXaW5uZXJCcmFja2V0ID8gdGhpcy53aW5uZXJSb3dFbmQgOiB0aGlzLmxvc2VyUm93RW5kO1xuICAgIGxldCBmaXJzdFJvdW5kTWF0Y2hDb3VudCA9IGlzV2lubmVyQnJhY2tldFxuICAgICAgPyB0aGlzLmZpcnN0V2lubmVyUm91bmQ/Lm1hdGNoZXMubGVuZ3RoXG4gICAgICA6IHRoaXMuZmlyc3RMb3NlclJvdW5kPy5tYXRjaGVzLmxlbmd0aDtcblxuICAgIGlmIChpc0RvdWJsZUVsaW1pbmF0aW9uKSB7XG4gICAgICBpZiAoaXNXaW5uZXJCcmFja2V0KSB7XG4gICAgICAgIGlmIChjdXJyZW50Um91bmRJbmRleCA9PT0gMCkge1xuICAgICAgICAgIC8vIFRoZSBmaXJzdCB3aW5uZXIgYnJhY2tldCByb3VuZCBpcyBhbHdheXMgMSBjb2wgd2lkZS5cbiAgICAgICAgICBjb2xTdGFydCA9IDE7XG4gICAgICAgICAgY29sRW5kID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb2xTdGFydERvdWJsZSA9IGN1cnJlbnRSb3VuZEluZGV4ICogMjtcbiAgICAgICAgICBjb25zdCBjb2xFbmREb3VibGUgPSBjb2xTdGFydERvdWJsZSArIDE7XG4gICAgICAgICAgY29uc3QgaXNTZW1pRmluYWxSb3VuZCA9IGN1cnJlbnRSb3VuZC5yb3VuZC50eXBlID09PSAnd2lubmVyX2JyYWNrZXQnICYmIG1hdGNoQ291bnQgPT09IDE7XG5cbiAgICAgICAgICAvLyBJZiB0aGUgY29sIGVuZCBpcyBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIGxvb3NlciByb3VuZHMsIHRoZW4gd2UgbmVlZCB0byBzcGFuIDIgY29scyxcbiAgICAgICAgICAvLyBzaW5jZSB0aGUgbG9zZXIgYnJhY2tldCB3aWxsIGFsd2F5cyBwbGF5IDIgcm91bmRzIHBlciB3aW5uZXIgYnJhY2tldCByb3VuZC5cbiAgICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gc3BhbiAyIGNvbCBpZiB0aGUgY3VycmVudCByb3VuZCBpcyB0aGUgc2VtaSBmaW5hbCByb3VuZCBBTkQgd2UgaGF2ZSBhbiBhc3luYyBzdGFydC5cbiAgICAgICAgICAvLyBBc3luYyBzdGFydCBtZWFucyB0aGF0IHRoZSBmaXJzdCB3aW5uZXIgcm91bmQncyBtYXRjaGVzIGxlbmd0aCBpcyBlcXVhbCB0byB0aGUgZmlyc3QgbG9zZXIgcm91bmQncyBtYXRjaGVzIGxlbmd0aC5cbiAgICAgICAgICAvLyBUaGlzIGlzIHByb2R1Y2VkIGJ5IG9ubHkgc2hvd2luZyBhIHBhcnQgKGVnLiB0aGUgbGFzdCA1IHJvdW5kcykgb2YgYSBtdWNoIGJpZ2dlciBicmFja2V0LlxuICAgICAgICAgIGlmIChjb2xFbmREb3VibGUgPCB0aGlzLmxvc2VyUm91bmRDb3VudCB8fCAoaXNTZW1pRmluYWxSb3VuZCAmJiB0aGlzLmlzUGFydGlhbERvdWJsZUVsaW1pbmF0aW9uKSkge1xuICAgICAgICAgICAgY29sU3RhcnQgPSBjb2xTdGFydERvdWJsZTtcblxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGQgb25lIHRvIHRoZSBjb2wgdG8gY3JlYXRlIGEgYWN0dWFsIGdyaWQgc3BhblxuICAgICAgICAgICAgY29sRW5kID0gY29sRW5kRG91YmxlICsgMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGNvbCBlbmQgaXMgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBsb29zZXIgcm91bmRzLCB0aGVuIHdlIG5lZWQgdG8gZ28gYmFjayB0byAxIGNvbCB3aWRlLFxuICAgICAgICAgICAgLy8gc2luY2UgdGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgc2VtaSBmaW5hbHMsIGZpbmFscyAoYW5kIHNlY29uZCBjaGFuY2UgZmluYWwpIGFyZSBwbGF5ZWRcbiAgICAgICAgICAgIGNvbnN0IG92ZXJzaG9vdCA9IGNvbEVuZERvdWJsZSAtIHRoaXMubG9zZXJSb3VuZENvdW50O1xuICAgICAgICAgICAgbGV0IGRlbHRhID0gTWF0aC5mbG9vcihvdmVyc2hvb3QgLyAyKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNQYXJ0aWFsRG91YmxlRWxpbWluYXRpb24pIHtcbiAgICAgICAgICAgICAgZGVsdGEgPSBkZWx0YSAtIDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbFN0YXJ0ID0gY29sU3RhcnREb3VibGUgLSBkZWx0YTtcbiAgICAgICAgICAgIGNvbEVuZCA9IGNvbFN0YXJ0RG91YmxlIC0gZGVsdGE7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBvdmVyc2hvb3QgaXMgYmlnZ2VyIHRoYW4gMSwgd2UgbmVlZCB0byBhZGp1c3QgdGhlIHJvdyBzdGFydCBhbmQgZW5kIHRvIHNwYW4gb3ZlciB0aGUgd2hvbGUgZ3JpZCxcbiAgICAgICAgICAgIC8vIHNpbmNlIHdlIGFyZSBpbiB0aGUgZmluYWwgcm91bmQocykuXG4gICAgICAgICAgICAvLyBPdmVyc2hvb3QgMSBtZWFucyB3ZSBhcmUgaW4gdGhlIHNlbWkgZmluYWwgcm91bmQgYW5kIHRoZXJlIGlzIGEgbG9zZXIgYnJhY2tldCByb3VuZCBpbiB0aGlzIHN0ZXAgKHRoZSBsYXN0IG9uZSkuXG4gICAgICAgICAgICBpZiAob3ZlcnNob290ID4gMSkge1xuICAgICAgICAgICAgICByb3dTdGFydCA9IDE7XG4gICAgICAgICAgICAgIHJvd0VuZCA9IHRoaXMudG90YWxSb3dDb3VudDtcbiAgICAgICAgICAgICAgZmlyc3RSb3VuZE1hdGNoQ291bnQgPSB0aGlzLnRvdGFsUm93Q291bnQgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50Um91bmQucm91bmQudHlwZSA9PT0gJ3RoaXJkX3BsYWNlJykge1xuICAgICAgICBjb25zdCBoYXNTZWNvbmRDaGFuY2VGaW5hbCA9IHRoaXMuX3JvdW5kc1dpdGhNYXRjaGVzLnNvbWUoKHIpID0+IHIucm91bmQudHlwZSA9PT0gJ3JldmVyc2VfZmluYWwnKTtcblxuICAgICAgICAvLyBTcGFuIHRoZSB0aGlyZCBwbGFjZSBtYXRjaCBmb3JtIGZpbmFsIHRvIHNlY29uZCBjaGFuY2UgZmluYWxcbiAgICAgICAgaWYgKGhhc1NlY29uZENoYW5jZUZpbmFsKSB7XG4gICAgICAgICAgY29sU3RhcnQgPSBjdXJyZW50Um91bmRJbmRleCArIDE7XG4gICAgICAgICAgY29sRW5kID0gY3VycmVudFJvdW5kSW5kZXggKyAzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEtlZXAgdGhlIHRoaXJkIHBsYWNlIG1hdGNoIGluIHRoZSBzYW1lIGNvbCBhcyB0aGUgZmluYWxcbiAgICAgICAgICBjb2xTdGFydCA9IGN1cnJlbnRSb3VuZEluZGV4ICsgMTtcbiAgICAgICAgICBjb2xFbmQgPSBjdXJyZW50Um91bmRJbmRleCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvc2VyIGJyYWNrZXQgcm91bmRzIGFyZSBhbHdheXMgMSBjb2wgd2lkZS5cbiAgICAgICAgY29sU3RhcnQgPSBjdXJyZW50Um91bmRJbmRleCArIDE7XG4gICAgICAgIGNvbEVuZCA9IGN1cnJlbnRSb3VuZEluZGV4ICsgMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN1cnJlbnRSb3VuZC5yb3VuZC50eXBlID09PSAndGhpcmRfcGxhY2UnKSB7XG4gICAgICAgIC8vIFRoZSB0aGlyZCBwbGFjZSBtYXRjaCBpcyBhbHdheXMgaW4gdGhlIHNhbWUgY29sIGFzIHRoZSBmaW5hbFxuICAgICAgICBjb2xTdGFydCA9IGN1cnJlbnRSb3VuZEluZGV4IC0gMTtcbiAgICAgICAgY29sRW5kID0gY3VycmVudFJvdW5kSW5kZXggLSAxO1xuXG4gICAgICAgIGlmICh0aGlzLndpbm5lclJvd0VuZCAtIDEgPT09IDIpIHtcbiAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIDIgbWF0Y2ggYnJhY2tldHNcbiAgICAgICAgICByb3dTdGFydCA9IDI7XG4gICAgICAgICAgcm93RW5kID0gMjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLndpbm5lclJvd0VuZCAtIDEgPT09IDQpIHtcbiAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIDQgbWF0Y2ggYnJhY2tldHNcbiAgICAgICAgICByb3dTdGFydCA9IDM7XG4gICAgICAgICAgcm93RW5kID0gMztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLndpbm5lclJvd0VuZCAtIDEgPiA0KSB7XG4gICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciA4KyBtYXRjaCBicmFja2V0cy4gVGhpcyB3aWxsIHJlc3VsdCBpbiBpdCBiZWluZyBpbiB0aGUgc2FtZSByb3cgYXMgdGhlIHNlY29uZCBzZW1pIGZpbmFsIG1hdGNoLlxuICAgICAgICAgIHJvd1N0YXJ0ID0gKHRoaXMud2lubmVyUm93RW5kIC0gMSkgLyAyICsgKHRoaXMud2lubmVyUm93RW5kIC0gMSkgLyAyIC8gMjtcbiAgICAgICAgICByb3dFbmQgPSB0aGlzLndpbm5lclJvd0VuZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWxsIG90aGVyIHNpbmdsZSBlbGltaW5hdGlvbiByb3VuZHMgYXJlIGFsd2F5cyAxIGNvbCB3aWRlLlxuICAgICAgICBjb2xTdGFydCA9IGN1cnJlbnRSb3VuZEluZGV4O1xuICAgICAgICBjb2xFbmQgPSBjdXJyZW50Um91bmRJbmRleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaGVzID0gY3VycmVudFJvdW5kLm1hdGNoZXMubWFwKChtYXRjaCwgbWF0Y2hJbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybU1hdGNoKFxuICAgICAgICBtYXRjaCxcbiAgICAgICAgbWF0Y2hJbmRleCxcbiAgICAgICAgcm93U3RhcnQsXG4gICAgICAgIG1hdGNoQ291bnQsXG4gICAgICAgIGZpcnN0Um91bmRNYXRjaENvdW50ID8/IDAsXG4gICAgICAgIHByZXZpb3VzUm91bmQsXG4gICAgICAgIG5leHRSb3VuZCxcbiAgICAgICAgY3VycmVudFJvdW5kLFxuICAgICAgICBjdXJyZW50Um91bmRJbmRleCxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbWF0Y2hDb3VudCxcbiAgICAgIG5hbWUsXG4gICAgICBtYXRjaGVzLFxuICAgICAgZGF0YTogY3VycmVudFJvdW5kLnJvdW5kLFxuXG4gICAgICByb3c6IHtcbiAgICAgICAgc3RhcnQ6IHJvd1N0YXJ0LFxuICAgICAgICBlbmQ6IHJvd0VuZCxcbiAgICAgIH0sXG4gICAgICBjb2x1bW46IHtcbiAgICAgICAgc3RhcnQ6IGNvbFN0YXJ0LFxuICAgICAgICBlbmQ6IGNvbEVuZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfTtcblxuICBwcml2YXRlIF90cmFuc2Zvcm1NYXRjaCA9IChcbiAgICBtYXRjaDogTWF0Y2hMaXN0VmlldyxcbiAgICBtYXRjaEluZGV4OiBudW1iZXIsXG4gICAgcm91bmRSb3dTdGFydDogbnVtYmVyLFxuICAgIG1hdGNoQ291bnQ6IG51bWJlcixcbiAgICBmaXJzdFJvdW5kTWF0Y2hDb3VudDogbnVtYmVyLFxuICAgIHByZXZpb3VzUm91bmQ6IFJvdW5kU3RhZ2VTdHJ1Y3R1cmVXaXRoTWF0Y2hlc1ZpZXcgfCBudWxsLFxuICAgIG5leHRSb3VuZDogUm91bmRTdGFnZVN0cnVjdHVyZVdpdGhNYXRjaGVzVmlldyB8IG51bGwsXG4gICAgY3VycmVudFJvdW5kOiBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IHwgbnVsbCxcbiAgICBjdXJyZW50Um91bmRJbmRleDogbnVtYmVyLFxuICApOiBCcmFja2V0TWF0Y2ggPT4ge1xuICAgIGNvbnN0IGRpZmYgPSBmaXJzdFJvdW5kTWF0Y2hDb3VudCAvIG1hdGNoQ291bnQ7XG5cbiAgICBsZXQgcm93U3RhcnQgPSByb3VuZFJvd1N0YXJ0ICsgbWF0Y2hJbmRleCAqIGRpZmY7XG4gICAgbGV0IHJvd0VuZCA9IHJvd1N0YXJ0ICsgZGlmZjtcblxuICAgIGlmIChjdXJyZW50Um91bmQ/LnJvdW5kLnR5cGUgPT09ICd0aGlyZF9wbGFjZScgJiYgdGhpcy5icmFja2V0VHlwZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgOCsgc2luZ2xlIGVsaW1pbmF0aW9uIGJyYWNrZXRzLiBUaGlzIHdpbGwgcmVzdWx0IGluIHRoZSBjdXJyZW50IG1hdGNoIGJlaW5nIGluIHRoZSBzYW1lIHJvdyBhcyB0aGUgc2Vjb25kIHNlbWkgZmluYWwgbWF0Y2guXG4gICAgICBpZiAodGhpcy53aW5uZXJSb3dFbmQgLSAxID4gNCkge1xuICAgICAgICByb3dTdGFydCA9ICh0aGlzLndpbm5lclJvd0VuZCAtIDEpIC8gMjtcbiAgICAgICAgcm93RW5kID0gdGhpcy53aW5uZXJSb3dFbmQgLSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByb3VuZHNTYW1lU2l6ZSA9IHByZXZpb3VzUm91bmQ/Lm1hdGNoZXMubGVuZ3RoID09PSBtYXRjaENvdW50O1xuICAgIGxldCBsb2dpY2FsTmV4dFJvdW5kOiBSb3VuZFN0YWdlU3RydWN0dXJlV2l0aE1hdGNoZXNWaWV3IHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAoXG4gICAgICAoY3VycmVudFJvdW5kPy5yb3VuZC50eXBlID09PSAnbG9zZXJfYnJhY2tldCcgJiYgIW5leHRSb3VuZCkgfHxcbiAgICAgIChjdXJyZW50Um91bmQ/LnJvdW5kLnR5cGUgPT09ICdsb3Nlcl9icmFja2V0JyAmJiBuZXh0Um91bmQ/LnJvdW5kLnR5cGUgPT09ICd0aGlyZF9wbGFjZScpXG4gICAgKSB7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy5fcm91bmRzV2l0aE1hdGNoZXNbY3VycmVudFJvdW5kSW5kZXggLSB0aGlzLmxvb3NlclJvd0FkZGl0aW9uYWxSb3VuZENvdW50ICsgMV07XG5cbiAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgIC8vIFRyYW5zaXRpb24gZnJvbSBsYXN0IHJvdW5kIG9mIGxvb3NlciBicmFja2V0IHRvIHNlbWkgZmluYWwgcm91bmQgb2Ygd2lubmVyIGJyYWNrZXRcbiAgICAgICAgbG9naWNhbE5leHRSb3VuZCA9IG5leHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICgoY3VycmVudFJvdW5kICYmIGlzVXBwZXJCcmFja2V0TWF0Y2goY3VycmVudFJvdW5kKSkgfHwgIWN1cnJlbnRSb3VuZD8ucm91bmQudHlwZSkgJiZcbiAgICAgIG5leHRSb3VuZD8ucm91bmQudHlwZSA9PT0gJ2xvc2VyX2JyYWNrZXQnXG4gICAgKSB7XG4gICAgICAvLyBUaGUgbGFzdCB3aW5uZXIgcm91bmQgKGZpbmFsKSBkb2VzIG5vdCBoYXZlIGEgbmV4dCByb3VuZCwgYnV0IHRoZSBuZXh0IHJvdW5kIGlzIHRoZSBmaXJzdCBsb29zZXIgcm91bmQuXG4gICAgICBsb2dpY2FsTmV4dFJvdW5kID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9naWNhbE5leHRSb3VuZCA9IG5leHRSb3VuZDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91c01hdGNoQSA9XG4gICAgICAocm91bmRzU2FtZVNpemUgPyBwcmV2aW91c1JvdW5kPy5tYXRjaGVzW21hdGNoSW5kZXhdPy5pZCA6IHByZXZpb3VzUm91bmQ/Lm1hdGNoZXNbbWF0Y2hJbmRleCAqIDJdPy5pZCkgPz8gbnVsbDtcbiAgICBsZXQgcHJldmlvdXNNYXRjaEIgPSBwcmV2aW91c1JvdW5kPy5tYXRjaGVzW21hdGNoSW5kZXggKiAyICsgMV0/LmlkID8/IG51bGw7XG5cbiAgICAvLyBwcmV2aW91c01hdGNoQiBjb3VsZCBiZSB0aGUgbGFzdCBsb3NlciBicmFja2V0IG1hdGNoXG4gICAgaWYgKCFwcmV2aW91c01hdGNoQiAmJiBjdXJyZW50Um91bmQgJiYgaXNVcHBlckJyYWNrZXRNYXRjaChjdXJyZW50Um91bmQpKSB7XG4gICAgICBjb25zdCBtYXRjaEIgPSB0aGlzLmxvc2VyUm91bmRzW2N1cnJlbnRSb3VuZEluZGV4ICsgdGhpcy5sb29zZXJSb3dBZGRpdGlvbmFsUm91bmRDb3VudCAtIDFdPy5tYXRjaGVzWzBdO1xuXG4gICAgICBpZiAodGhpcy5sb3NlclJvdW5kcy5sZW5ndGggPT09IGN1cnJlbnRSb3VuZEluZGV4ICsgdGhpcy5sb29zZXJSb3dBZGRpdGlvbmFsUm91bmRDb3VudCAmJiBtYXRjaEIpIHtcbiAgICAgICAgcHJldmlvdXNNYXRjaEIgPSBtYXRjaEIuaWQ7XG4gICAgICAgIHJvdW5kc1NhbWVTaXplID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dE1hdGNoID0gbG9naWNhbE5leHRSb3VuZD8ubWF0Y2hlc1tNYXRoLmZsb29yKG1hdGNoSW5kZXggLyAyKV0/LmlkID8/IG51bGw7XG5cbiAgICBsZXQgcHJldmlvdXNSb3VuZE1hdGNoZXMgPSBudWxsO1xuXG4gICAgaWYgKHByZXZpb3VzUm91bmQpIHtcbiAgICAgIGlmIChyb3VuZHNTYW1lU2l6ZSAmJiBwcmV2aW91c01hdGNoQSkge1xuICAgICAgICAvLyAxIG1hdGNoIHRvIDEgbWF0Y2hcbiAgICAgICAgcHJldmlvdXNSb3VuZE1hdGNoZXMgPSB7XG4gICAgICAgICAgcm91bmRJZDogcHJldmlvdXNSb3VuZC5yb3VuZC5pZCxcbiAgICAgICAgICBtYXRjaElkczogW3ByZXZpb3VzTWF0Y2hBXSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNNYXRjaEEgJiYgcHJldmlvdXNNYXRjaEIpIHtcbiAgICAgICAgLy8gMiBtYXRjaGVzIHRvIDEgbWF0Y2hcbiAgICAgICAgcHJldmlvdXNSb3VuZE1hdGNoZXMgPSB7XG4gICAgICAgICAgcm91bmRJZDogcHJldmlvdXNSb3VuZC5yb3VuZC5pZCxcbiAgICAgICAgICBtYXRjaElkczogW3ByZXZpb3VzTWF0Y2hBLCBwcmV2aW91c01hdGNoQl0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFJvdW5kTWF0Y2ggPVxuICAgICAgbmV4dE1hdGNoICYmIGxvZ2ljYWxOZXh0Um91bmRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICByb3VuZElkOiBsb2dpY2FsTmV4dFJvdW5kLnJvdW5kLmlkLFxuICAgICAgICAgICAgbWF0Y2hJZDogbmV4dE1hdGNoLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdzoge1xuICAgICAgICBzdGFydDogcm93U3RhcnQsXG4gICAgICAgIGVuZDogcm93RW5kLFxuICAgICAgfSxcbiAgICAgIGRhdGE6IG1hdGNoLFxuXG4gICAgICBwcmV2aW91c01hdGNoZXM6IGN1cnJlbnRSb3VuZD8ucm91bmQudHlwZSAhPT0gJ3RoaXJkX3BsYWNlJyA/IHByZXZpb3VzUm91bmRNYXRjaGVzIDogbnVsbCxcbiAgICAgIG5leHRNYXRjaDogY3VycmVudFJvdW5kPy5yb3VuZC50eXBlICE9PSAndGhpcmRfcGxhY2UnID8gbmV4dFJvdW5kTWF0Y2ggOiBudWxsLFxuICAgIH07XG4gIH07XG59XG4iXX0=
|