@ethlete/query 4.13.0 → 4.14.0
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/esm2022/lib/devtools/components/query-devtools/query-devtools.component.mjs +3 -3
- package/esm2022/lib/devtools/pipes/query-short-name.pipe.mjs +3 -3
- package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +3 -3
- package/esm2022/lib/directives/infinity-query.directive.mjs +3 -3
- package/esm2022/lib/directives/query.directive.mjs +3 -3
- package/esm2022/lib/query/query.mjs +17 -5
- package/esm2022/lib/query-form/query-form.mjs +30 -4
- package/esm2022/lib/query-form/query-form.types.mjs +1 -1
- package/esm2022/lib/utils/data.utils.mjs +4 -4
- package/fesm2022/ethlete-query.mjs +62 -24
- package/fesm2022/ethlete-query.mjs.map +1 -1
- package/lib/query-form/query-form.d.ts +16 -0
- package/lib/query-form/query-form.types.d.ts +16 -0
- package/package.json +2 -2
|
@@ -199,10 +199,10 @@ export class QueryDevtoolsComponent {
|
|
|
199
199
|
clearQueryHistory() {
|
|
200
200
|
this.queryHistory.set([]);
|
|
201
201
|
}
|
|
202
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
203
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.4", type: QueryDevtoolsComponent, isStandalone: true, selector: "et-query-devtools", host: { classAttribute: "et-query-devtools" }, ngImport: i0, template: "<button *ngIf=\"!isOpen()\" (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Open Devtools</button>\n\n<div\n *ngIf=\"isOpen()\"\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n>\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n <option *ngFor=\"let clientConfig of queryClientConfigs; index as i; trackBy: trackByClient\" [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n <div *ngIf=\"selectedClientConfig() as cfg\" class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n\n <div *ngIf=\"selectedClientConfig() as cfg\" class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Query browser</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' }\"\n (click)=\"selectQueryListMode('live')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' }\"\n (click)=\"selectQueryListMode('history')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n History ({{ queryHistory().length }}/50)\n </button>\n <ng-container *ngIf=\"queryListMode() === 'history'\">\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n </ng-container>\n </div>\n\n <div class=\"et-qd-queries__browser\">\n <ul *ngIf=\"queryListMode() === 'live'\" class=\"et-qd-queries__browser-list\">\n <li *ngFor=\"let query of queries(); trackBy: trackByQuery\">\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n </ul>\n <ul *ngIf=\"queryListMode() === 'history'\" class=\"et-qd-queries__browser-list\">\n <li *ngFor=\"let query of queryHistory(); trackBy: trackByQuery\">\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n </ul>\n <div class=\"et-qd-queries__browser-detail\">\n <ng-container *ngIf=\"selectedQuery() as query\">\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n <ng-container *ngIf=\"query.isPolling || query._isPollingPaused\">\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n </ng-container>\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showArguments()\">{{ query._arguments | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showResponse()\">{{ query.state$ | async | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showRawResponse()\">{{ query.rawState | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showQueryConfig()\">{{ stringifiedQueryConfig() | json }}</pre>\n </div>\n\n <div *ngIf=\"!!query._queryConfig.entity\" class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showEntityStoreValue()\">{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{position:fixed;top:0;z-index:1000000;font-size:14px;color:#fff}.et-query-devtools-container{position:fixed;inset:0;background-color:#25292e;z-index:10000;overflow:auto;font-family:monospace;display:grid;grid-template-rows:auto auto auto minmax(0,1fr)}.et-query-devtools-container.et-query-devtools-container--transparent{opacity:.25;pointer-events:none}.et-query-devtools-container.et-query-devtools-container--transparent .et-query-devtools-translucent-btn{pointer-events:all}.et-query-devtools-container.et-query-devtools-container--snap-left{inset-inline-start:0;inset-block-start:0;inset-block-end:0;width:50%;border-right:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-right{inset-inline-start:unset;inset-inline-end:0;inset-block-start:0;inset-block-end:0;width:50%;border-left:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-top{inset-inline-start:0;inset-block-start:0;inset-inline-end:0;height:50%;border-bottom:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-bottom{inset-inline-start:0;inset-block-start:unset;inset-block-end:0;inset-inline-end:0;height:50%;border-top:1px solid rgb(37,41,46)}.et-query-devtools-open-btn{position:fixed;inset-inline-start:0;inset-block-start:0;z-index:9999;all:unset;font-family:monospace}.et-qd-header{background-color:#00ffa1;padding:12px;display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.et-qd-header__title{color:#25292e;margin:0;font-size:22px}.et-qd-header__select{display:grid;background-color:#25292e;border-radius:10px;overflow:hidden}.et-qd-header__select select{width:250px;color:#fff;padding:3px 10px 2px;border:none;background-color:#25292e;font-family:monospace}.et-qd-header__select label{padding:3px 10px;color:#25292e;font-size:12px;font-weight:700;color:#fff;border-bottom:1px solid gray}.et-qd-sub-header{background-color:#00b371;padding:12px;display:flex;gap:12px;flex-wrap:wrap}.et-qd-sub-header__divider{width:1px;background-color:#25292e}.et-qd-btn{background-color:#00ffa1;color:#25292e;border:none;padding:12px;cursor:pointer;font-size:14px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;width:100%;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-btn:hover{background-color:#00cc81}.et-qd-btn.et-qd-btn-secondary{background-color:#25292e;color:#00ffa1}.et-qd-btn.et-qd-btn-secondary:hover{background-color:#3c424a}.et-qd-chip{background-color:#00ffa1;color:#25292e;border:none;padding:4px 9px;cursor:pointer;font-size:12px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-chip:hover{background-color:#00cc81}.et-qd-chip.et-qd-chip-secondary{background-color:#25292e;color:#00ffa1}.et-qd-chip.et-qd-chip-secondary:hover{background-color:#3c424a}.et-qd-chip.et-qd-chip-bordered{border:1px solid rgb(0,255,161)}.et-qd-translucent-clickable{pointer-events:all}.et-qd-client{border-bottom:1px solid #3c424a;padding:12px}.et-qd-client__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-client__actions{display:flex;gap:12px;margin-top:12px}.et-qd-queries{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.et-qd-queries__actions{display:flex;gap:12px;margin-top:12px;margin-bottom:16px}.et-qd-queries__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-queries__divider{width:1px;background-color:#3c424a}.et-qd-queries__browser{display:grid;grid-template-columns:1fr minmax(0,3fr);margin-left:-12px;margin-right:-12px;border-top:1px solid #3c424a;margin-bottom:-12px}.et-qd-queries__browser-list{border-right:1px solid #3c424a;list-style:none;padding:0;margin:0;display:grid;grid-auto-flow:row;grid-auto-rows:55px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-list li{margin:0}.et-qd-queries__browser-list li button{all:unset;font-family:monospace;box-sizing:border-box;width:100%;border:none;border-bottom:1px solid #3c424a;background-color:#25292e;color:#fff;text-align:left;padding:12px;height:100%;transition:all .3s ease-in-out;cursor:pointer;display:grid;gap:2px}.et-qd-queries__browser-list li button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.et-qd-queries__browser-list li button span:first-of-type{font-weight:700}.et-qd-queries__browser-list li button:hover,.et-qd-queries__browser-list li button.et-qd-query--active{background-color:#30363c}.et-qd-queries__browser-detail{padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-detail__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-list{display:grid;gap:12px}.et-qd-list-item{display:grid}.et-qd-list-item p{font-weight:700;margin:0;padding-bottom:8px}.et-qd-list-item p+p{margin-top:-8px}.et-qd-list-item div+pre{margin-top:8px}.et-qd-list-item pre{margin:0;padding:4px;background-color:#0e1012;border-radius:4px;max-height:450px;overflow:auto}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: QueryShortNamePipe, name: "queryShortName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom }); }
|
|
202
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: QueryDevtoolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
203
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: QueryDevtoolsComponent, isStandalone: true, selector: "et-query-devtools", host: { classAttribute: "et-query-devtools" }, ngImport: i0, template: "<button *ngIf=\"!isOpen()\" (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Open Devtools</button>\n\n<div\n *ngIf=\"isOpen()\"\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n>\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n <option *ngFor=\"let clientConfig of queryClientConfigs; index as i; trackBy: trackByClient\" [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n <div *ngIf=\"selectedClientConfig() as cfg\" class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n\n <div *ngIf=\"selectedClientConfig() as cfg\" class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Query browser</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' }\"\n (click)=\"selectQueryListMode('live')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' }\"\n (click)=\"selectQueryListMode('history')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n History ({{ queryHistory().length }}/50)\n </button>\n <ng-container *ngIf=\"queryListMode() === 'history'\">\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n </ng-container>\n </div>\n\n <div class=\"et-qd-queries__browser\">\n <ul *ngIf=\"queryListMode() === 'live'\" class=\"et-qd-queries__browser-list\">\n <li *ngFor=\"let query of queries(); trackBy: trackByQuery\">\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n </ul>\n <ul *ngIf=\"queryListMode() === 'history'\" class=\"et-qd-queries__browser-list\">\n <li *ngFor=\"let query of queryHistory(); trackBy: trackByQuery\">\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n </ul>\n <div class=\"et-qd-queries__browser-detail\">\n <ng-container *ngIf=\"selectedQuery() as query\">\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n <ng-container *ngIf=\"query.isPolling || query._isPollingPaused\">\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n </ng-container>\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showArguments()\">{{ query._arguments | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showResponse()\">{{ query.state$ | async | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showRawResponse()\">{{ query.rawState | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showQueryConfig()\">{{ stringifiedQueryConfig() | json }}</pre>\n </div>\n\n <div *ngIf=\"!!query._queryConfig.entity\" class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showEntityStoreValue()\">{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{position:fixed;top:0;z-index:1000000;font-size:14px;color:#fff}.et-query-devtools-container{position:fixed;inset:0;background-color:#25292e;z-index:10000;overflow:auto;font-family:monospace;display:grid;grid-template-rows:auto auto auto minmax(0,1fr)}.et-query-devtools-container.et-query-devtools-container--transparent{opacity:.25;pointer-events:none}.et-query-devtools-container.et-query-devtools-container--transparent .et-query-devtools-translucent-btn{pointer-events:all}.et-query-devtools-container.et-query-devtools-container--snap-left{inset-inline-start:0;inset-block-start:0;inset-block-end:0;width:50%;border-right:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-right{inset-inline-start:unset;inset-inline-end:0;inset-block-start:0;inset-block-end:0;width:50%;border-left:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-top{inset-inline-start:0;inset-block-start:0;inset-inline-end:0;height:50%;border-bottom:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-bottom{inset-inline-start:0;inset-block-start:unset;inset-block-end:0;inset-inline-end:0;height:50%;border-top:1px solid rgb(37,41,46)}.et-query-devtools-open-btn{position:fixed;inset-inline-start:0;inset-block-start:0;z-index:9999;all:unset;font-family:monospace}.et-qd-header{background-color:#00ffa1;padding:12px;display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.et-qd-header__title{color:#25292e;margin:0;font-size:22px}.et-qd-header__select{display:grid;background-color:#25292e;border-radius:10px;overflow:hidden}.et-qd-header__select select{width:250px;color:#fff;padding:3px 10px 2px;border:none;background-color:#25292e;font-family:monospace}.et-qd-header__select label{padding:3px 10px;color:#25292e;font-size:12px;font-weight:700;color:#fff;border-bottom:1px solid gray}.et-qd-sub-header{background-color:#00b371;padding:12px;display:flex;gap:12px;flex-wrap:wrap}.et-qd-sub-header__divider{width:1px;background-color:#25292e}.et-qd-btn{background-color:#00ffa1;color:#25292e;border:none;padding:12px;cursor:pointer;font-size:14px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;width:100%;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-btn:hover{background-color:#00cc81}.et-qd-btn.et-qd-btn-secondary{background-color:#25292e;color:#00ffa1}.et-qd-btn.et-qd-btn-secondary:hover{background-color:#3c424a}.et-qd-chip{background-color:#00ffa1;color:#25292e;border:none;padding:4px 9px;cursor:pointer;font-size:12px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-chip:hover{background-color:#00cc81}.et-qd-chip.et-qd-chip-secondary{background-color:#25292e;color:#00ffa1}.et-qd-chip.et-qd-chip-secondary:hover{background-color:#3c424a}.et-qd-chip.et-qd-chip-bordered{border:1px solid rgb(0,255,161)}.et-qd-translucent-clickable{pointer-events:all}.et-qd-client{border-bottom:1px solid #3c424a;padding:12px}.et-qd-client__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-client__actions{display:flex;gap:12px;margin-top:12px}.et-qd-queries{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.et-qd-queries__actions{display:flex;gap:12px;margin-top:12px;margin-bottom:16px}.et-qd-queries__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-queries__divider{width:1px;background-color:#3c424a}.et-qd-queries__browser{display:grid;grid-template-columns:1fr minmax(0,3fr);margin-left:-12px;margin-right:-12px;border-top:1px solid #3c424a;margin-bottom:-12px}.et-qd-queries__browser-list{border-right:1px solid #3c424a;list-style:none;padding:0;margin:0;display:grid;grid-auto-flow:row;grid-auto-rows:55px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-list li{margin:0}.et-qd-queries__browser-list li button{all:unset;font-family:monospace;box-sizing:border-box;width:100%;border:none;border-bottom:1px solid #3c424a;background-color:#25292e;color:#fff;text-align:left;padding:12px;height:100%;transition:all .3s ease-in-out;cursor:pointer;display:grid;gap:2px}.et-qd-queries__browser-list li button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.et-qd-queries__browser-list li button span:first-of-type{font-weight:700}.et-qd-queries__browser-list li button:hover,.et-qd-queries__browser-list li button.et-qd-query--active{background-color:#30363c}.et-qd-queries__browser-detail{padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-detail__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-list{display:grid;gap:12px}.et-qd-list-item{display:grid}.et-qd-list-item p{font-weight:700;margin:0;padding-bottom:8px}.et-qd-list-item p+p{margin-top:-8px}.et-qd-list-item div+pre{margin-top:8px}.et-qd-list-item pre{margin:0;padding:4px;background-color:#0e1012;border-radius:4px;max-height:450px;overflow:auto}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: QueryShortNamePipe, name: "queryShortName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom }); }
|
|
204
204
|
}
|
|
205
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
205
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: QueryDevtoolsComponent, decorators: [{
|
|
206
206
|
type: Component,
|
|
207
207
|
args: [{ selector: 'et-query-devtools', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, host: {
|
|
208
208
|
class: 'et-query-devtools',
|
|
@@ -15,10 +15,10 @@ export class QueryShortNamePipe {
|
|
|
15
15
|
console.log(route);
|
|
16
16
|
return route;
|
|
17
17
|
}
|
|
18
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
19
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.
|
|
18
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: QueryShortNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
19
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.5", ngImport: i0, type: QueryShortNamePipe, isStandalone: true, name: "queryShortName" }); }
|
|
20
20
|
}
|
|
21
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: QueryShortNamePipe, decorators: [{
|
|
22
22
|
type: Pipe,
|
|
23
23
|
args: [{ name: 'queryShortName', standalone: true }]
|
|
24
24
|
}] });
|
|
@@ -38,10 +38,10 @@ export class InfinityQueryTriggerDirective {
|
|
|
38
38
|
});
|
|
39
39
|
this._observer.observe(this._elementRef.nativeElement);
|
|
40
40
|
}
|
|
41
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
42
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
42
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 }); }
|
|
43
43
|
}
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
|
|
45
45
|
type: Directive,
|
|
46
46
|
args: [{
|
|
47
47
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -155,10 +155,10 @@ export class InfinityQueryDirective {
|
|
|
155
155
|
this._viewContext.currentQuery = null;
|
|
156
156
|
this._data$.next([]);
|
|
157
157
|
}
|
|
158
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
159
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.
|
|
158
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
159
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: InfinityQueryDirective, isStandalone: true, selector: "[etInfinityQuery]", inputs: { infinityQuery: ["etInfinityQuery", "infinityQuery"] }, providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }], exportAs: ["etInfinityQuery"], hostDirectives: [{ directive: i1.DelayableDirective }], ngImport: i0 }); }
|
|
160
160
|
}
|
|
161
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: InfinityQueryDirective, decorators: [{
|
|
162
162
|
type: Directive,
|
|
163
163
|
args: [{
|
|
164
164
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -103,10 +103,10 @@ export class QueryDirective {
|
|
|
103
103
|
this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
107
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.
|
|
106
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: QueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
107
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: QueryDirective, isStandalone: true, selector: "[etQuery]", inputs: { query: ["etQuery", "query"], cache: ["etQueryCache", "cache"] }, ngImport: i0 }); }
|
|
108
108
|
}
|
|
109
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: QueryDirective, decorators: [{
|
|
110
110
|
type: Directive,
|
|
111
111
|
args: [{
|
|
112
112
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -2,7 +2,7 @@ import { BehaviorSubject, filter, interval, map, of, shareReplay, skip, Subject,
|
|
|
2
2
|
import { isBearerAuthProvider } from '../auth';
|
|
3
3
|
import { shouldCacheQuery } from '../query-client';
|
|
4
4
|
import { request } from '../request';
|
|
5
|
-
import { computeQueryBody, computeQueryHeaders, computeQueryMethod, isGqlQueryConfig, isQueryStateLoading, isQueryStatePrepared, isQueryStateSuccess, takeUntilResponse, } from './query.utils';
|
|
5
|
+
import { computeQueryBody, computeQueryHeaders, computeQueryMethod, isGqlQueryConfig, isQueryStateCancelled, isQueryStateFailure, isQueryStateLoading, isQueryStatePrepared, isQueryStateSuccess, takeUntilResponse, } from './query.utils';
|
|
6
6
|
let _nextQueryId = 0;
|
|
7
7
|
export class Query {
|
|
8
8
|
get _nextId() {
|
|
@@ -27,10 +27,15 @@ export class Query {
|
|
|
27
27
|
return this._state$.value;
|
|
28
28
|
}
|
|
29
29
|
get isExpired() {
|
|
30
|
-
if (
|
|
30
|
+
if (isQueryStateLoading(this.rawState)) {
|
|
31
31
|
return false;
|
|
32
32
|
}
|
|
33
|
-
|
|
33
|
+
if (isQueryStatePrepared(this.rawState) ||
|
|
34
|
+
isQueryStateCancelled(this.rawState) ||
|
|
35
|
+
isQueryStateFailure(this.rawState)) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
const ts = this.rawState.meta.expiresAt;
|
|
34
39
|
if (!ts) {
|
|
35
40
|
return true;
|
|
36
41
|
}
|
|
@@ -134,12 +139,19 @@ export class Query {
|
|
|
134
139
|
cacheAdapter: this._client.config.request?.cacheAdapter,
|
|
135
140
|
retryFn: this._client.config.request?.retryFn,
|
|
136
141
|
})
|
|
137
|
-
.pipe(
|
|
142
|
+
.pipe(tap((state) => this._updateEntityState(state, meta, options)), takeUntil(this._onAbort$))
|
|
138
143
|
.subscribe();
|
|
139
144
|
return this;
|
|
140
145
|
}
|
|
141
146
|
abort() {
|
|
147
|
+
if (!isQueryStateLoading(this.rawState)) {
|
|
148
|
+
return this;
|
|
149
|
+
}
|
|
142
150
|
this._onAbort$.next();
|
|
151
|
+
this._state$.next({
|
|
152
|
+
type: "CANCELLED" /* QueryStateType.Cancelled */,
|
|
153
|
+
meta: { id: this.rawState.meta.id, triggeredVia: this.rawState.meta.triggeredVia },
|
|
154
|
+
});
|
|
143
155
|
return this;
|
|
144
156
|
}
|
|
145
157
|
poll(config) {
|
|
@@ -262,4 +274,4 @@ export class Query {
|
|
|
262
274
|
.pipe(map((v) => ({ ...s, response: v })));
|
|
263
275
|
}
|
|
264
276
|
}
|
|
265
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnkvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBQ04sUUFBUSxFQUNSLEdBQUcsRUFFSCxFQUFFLEVBQ0YsV0FBVyxFQUNYLElBQUksRUFDSixPQUFPLEVBRVAsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRS9DLE9BQU8sRUFBZSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBa0IsT0FBTyxFQUFnQixNQUFNLFlBQVksQ0FBQztBQWFuRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFFckIsTUFBTSxPQUFPLEtBQUs7SUF5QmhCLElBQVksT0FBTztRQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLDBCQUEwQjtnQkFBRSxPQUFPO1lBRXJFLElBQUksb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsU0FBUyxJQUFJ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QyxDQUFDLE9BQU8sRUFBRSxDQUNsRyxDQUNGO3FCQUNBLFNBQVMsRUFBRSxDQUFDO2dCQUVmLE1BQU07YUFDUDtZQUVELEtBQUssUUFBUSxDQUFDLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ2hCLElBQUksNENBQTBCO29CQUM5QixJQUFJO2lCQUNMLENBQUMsQ0FBQztnQkFFSCxNQUFNO2FBQ1A7U0FDRjtJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsQ0FBdUI7UUFDN0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQzdELE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBaUMsQ0FBQztTQUM5QztRQUVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUV4RixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTthQUM1QixHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQy9GLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBmaWx0ZXIsXG4gIGludGVydmFsLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzaGFyZVJlcGxheSxcbiAgc2tpcCxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFrZVdoaWxlLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNCZWFyZXJBdXRoUHJvdmlkZXIgfSBmcm9tICcuLi9hdXRoJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vZW50aXR5JztcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBzaG91bGRDYWNoZVF1ZXJ5IH0gZnJvbSAnLi4vcXVlcnktY2xpZW50JztcbmltcG9ydCB7IEh0dHBTdGF0dXNDb2RlLCByZXF1ZXN0LCBSZXF1ZXN0RXZlbnQgfSBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIEJhc2VBcmd1bWVudHMsXG4gIEV4ZWN1dGVRdWVyeU9wdGlvbnMsXG4gIEdxbFF1ZXJ5Q29uZmlnLFxuICBQb2xsQ29uZmlnLFxuICBRdWVyeUF1dG9SZWZyZXNoQ29uZmlnLFxuICBRdWVyeVN0YXRlLFxuICBRdWVyeVN0YXRlTWV0YSxcbiAgUXVlcnlTdGF0ZVR5cGUsXG4gIFJlc3RRdWVyeUNvbmZpZyxcbiAgUm91dGVUeXBlLFxufSBmcm9tICcuL3F1ZXJ5LnR5cGVzJztcbmltcG9ydCB7XG4gIGNvbXB1dGVRdWVyeUJvZHksXG4gIGNvbXB1dGVRdWVyeUhlYWRlcnMsXG4gIGNvbXB1dGVRdWVyeU1ldGhvZCxcbiAgaXNHcWxRdWVyeUNvbmZpZyxcbiAgaXNRdWVyeVN0YXRlTG9hZGluZyxcbiAgaXNRdWVyeVN0YXRlUHJlcGFyZWQsXG4gIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsXG4gIHRha2VVbnRpbFJlc3BvbnNlLFxufSBmcm9tICcuL3F1ZXJ5LnV0aWxzJztcblxubGV0IF9uZXh0UXVlcnlJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeTxcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJvdXRlIGV4dGVuZHMgUm91dGVUeXBlPEFyZ3VtZW50cz4sXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiB7XG4gIHJlYWRvbmx5IF9pZCA9IF9uZXh0UXVlcnlJZCsrO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRMb2NhbElkID0gMDtcbiAgcHJpdmF0ZSBfcG9sbGluZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX29uQWJvcnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfY3VycmVudFBvbGxDb25maWc6IFBvbGxDb25maWcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfaXNQb2xsaW5nUGF1c2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeVN0YXRlPFJlc3BvbnNlPj4oe1xuICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLlByZXBhcmVkLFxuICAgIG1ldGE6IHsgaWQ6IHRoaXMuX2N1cnJlbnRMb2NhbElkLCB0cmlnZ2VyZWRWaWE6ICdwcm9ncmFtJyB9LFxuICB9KTtcblxuICBwcml2YXRlIGdldCBfbmV4dElkKCkge1xuICAgIHJldHVybiArK3RoaXMuX2N1cnJlbnRMb2NhbElkO1xuICB9XG5cbiAgZ2V0IHN0YXRlJCgpOiBPYnNlcnZhYmxlPFF1ZXJ5U3RhdGU8RGF0YT4+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnBpcGUoXG4gICAgICB0YXAoKHMpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnQuY29uZmlnLmxvZ2dpbmc/LnByZXBhcmVkUXVlcnlTdWJzY3JpcHRpb25zKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZVByZXBhcmVkKHMpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFF1ZXJ5ICR7dGhpcy5fcm91dGVXaXRoUGFyYW1zfSB3YXMgc3Vic2NyaWJlZCB0byBpbiB0aGUgcHJlcGFyZWQgc3RhdGUuIERpZCB5b3UgZm9yZ2V0IHRvIGNhbGwgLmV4ZWN1dGUoKT9gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKChzKSA9PiB0aGlzLl90cmFuc2Zvcm1TdGF0ZShzKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHF1ZXJ5LlxuICAgKlxuICAgKiAqKldhcm5pbmchKiogVGhpcyBkaWZmZXJzIGZyb20gdGhlIGBzdGF0ZSRgIG9ic2VydmFibGUgaW4gdGhhdCBpdCBkb2VzIG5vdCB1c2UgdGhlIHF1ZXJ5IHN0b3JlLiBUaHVzLCB0aGUgcmVzcG9uc2UgZGF0YSBtaWdodCBiZSBvdXRkYXRlZC5cbiAgICogVXNlIGBzdGF0ZSRgIChvciBgZmlyc3RWYWx1ZUZyb20oc3RhdGUkKWApIHRoZSBtb3N0IHVwLXRvLWRhdGUgZGF0YS5cbiAgICovXG4gIGdldCByYXdTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzRXhwaXJlZCgpIHtcbiAgICBpZiAoIWlzUXVlcnlTdGF0ZVN1Y2Nlc3ModGhpcy5fc3RhdGUkLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHRzID0gdGhpcy5fc3RhdGUkLnZhbHVlLm1ldGEuZXhwaXJlc0F0O1xuXG4gICAgaWYgKCF0cykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRzIDwgRGF0ZS5ub3coKTtcbiAgfVxuXG4gIGdldCBpc0luVXNlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQub2JzZXJ2ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgX3N1YnNjcmliZXJDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLm9ic2VydmVycy5sZW5ndGg7XG4gIH1cblxuICBnZXQgaXNQb2xsaW5nKCkge1xuICAgIHJldHVybiAhIXRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb247XG4gIH1cblxuICBnZXQgYXV0b1JlZnJlc2hPbkNvbmZpZygpIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5fcXVlcnlDb25maWcuYXV0b1JlZnJlc2hPbiA/PyB7fTtcblxuICAgIGNvbnN0IHRyYW5zZm9ybWVkOiBSZWFkb25seTxRdWVyeUF1dG9SZWZyZXNoQ29uZmlnPiA9IHtcbiAgICAgIHF1ZXJ5Q2xpZW50RGVmYXVsdEhlYWRlcnNDaGFuZ2U6IGJhc2UucXVlcnlDbGllbnREZWZhdWx0SGVhZGVyc0NoYW5nZSA/PyB0cnVlLFxuICAgICAgd2luZG93Rm9jdXM6IGJhc2Uud2luZG93Rm9jdXMgPz8gdHJ1ZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IF9lbmFibGVTbWFydFBvbGxpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5Q29uZmlnLmVuYWJsZVNtYXJ0UG9sbGluZyA/PyB0cnVlO1xuICB9XG5cbiAgZ2V0IHN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHk/LnN0b3JlID8/IG51bGw7XG4gIH1cblxuICBnZXQgY2FuQmVDYWNoZWQoKSB7XG4gICAgcmV0dXJuIHNob3VsZENhY2hlUXVlcnkodGhpcy5fcXVlcnlDb25maWcubWV0aG9kKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NsaWVudDogUXVlcnlDbGllbnQsXG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgX3F1ZXJ5Q29uZmlnOlxuICAgICAgfCBSZXN0UXVlcnlDb25maWc8Um91dGUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD5cbiAgICAgIHwgR3FsUXVlcnlDb25maWc8Um91dGUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD4sXG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgX3JvdXRlV2l0aFBhcmFtczogUm91dGUsXG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgX2FyZ3VtZW50czogQXJndW1lbnRzLFxuICApIHt9XG5cbiAgZXhlY3V0ZShvcHRpb25zOiBFeGVjdXRlUXVlcnlPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7IHNraXBDYWNoZSA9IGZhbHNlLCBfdHJpZ2dlcmVkVmlhOiB0cmlnZ2VyZWRWaWEgPSAncHJvZ3JhbScsIGNhbmNlbFByZXZpb3VzID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgeyBhdXRoUHJvdmlkZXIgfSA9IHRoaXMuX2NsaWVudDtcbiAgICBjb25zdCBxdWVyeUNvbmZpZyA9IHRoaXMuX3F1ZXJ5Q29uZmlnO1xuXG4gICAgaWYgKCF0aGlzLmlzRXhwaXJlZCAmJiAhc2tpcENhY2hlICYmIGlzUXVlcnlTdGF0ZVN1Y2Nlc3ModGhpcy5yYXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmIChxdWVyeUNvbmZpZy5zZWN1cmUgJiYgIWF1dGhQcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZXhlY3V0ZSBzZWN1cmUgcXVlcnkgd2l0aG91dCBhdXRoIHByb3ZpZGVyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSB0aGlzLl9uZXh0SWQ7XG4gICAgY29uc3QgbWV0YTogUXVlcnlTdGF0ZU1ldGEgPSB7IGlkLCB0cmlnZ2VyZWRWaWEgfTtcblxuICAgIGlmIChpc1F1ZXJ5U3RhdGVMb2FkaW5nKHRoaXMucmF3U3RhdGUpKSB7XG4gICAgICBpZiAoY2FuY2VsUHJldmlvdXMpIHtcbiAgICAgICAgdGhpcy5hYm9ydCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUkLm5leHQoeyB0eXBlOiBRdWVyeVN0YXRlVHlwZS5Mb2FkaW5nLCBtZXRhIH0pO1xuXG4gICAgY29uc3QgbWV0aG9kID0gY29tcHV0ZVF1ZXJ5TWV0aG9kKHsgY29uZmlnOiBxdWVyeUNvbmZpZywgY2xpZW50OiB0aGlzLl9jbGllbnQgfSk7XG4gICAgY29uc3QgYm9keSA9IGNvbXB1dGVRdWVyeUJvZHkoeyBjb25maWc6IHF1ZXJ5Q29uZmlnLCBjbGllbnQ6IHRoaXMuX2NsaWVudCwgYXJnczogdGhpcy5fYXJndW1lbnRzLCBtZXRob2QgfSk7XG4gICAgY29uc3QgaGVhZGVycyA9IGNvbXB1dGVRdWVyeUhlYWRlcnMoeyBjbGllbnQ6IHRoaXMuX2NsaWVudCwgY29uZmlnOiBxdWVyeUNvbmZpZywgYXJnczogdGhpcy5fYXJndW1lbnRzIH0pO1xuXG4gICAgcmVxdWVzdDxSZXNwb25zZT4oe1xuICAgICAgdXJsV2l0aFBhcmFtczogdGhpcy5fcm91dGVXaXRoUGFyYW1zLFxuICAgICAgbWV0aG9kLFxuICAgICAgYm9keSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICByZXBvcnRQcm9ncmVzczogcXVlcnlDb25maWcucmVwb3J0UHJvZ3Jlc3MsXG4gICAgICByZXNwb25zZVR5cGU6IHF1ZXJ5Q29uZmlnLnJlc3BvbnNlVHlwZSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogcXVlcnlDb25maWcud2l0aENyZWRlbnRpYWxzLFxuICAgICAgY2FjaGVBZGFwdGVyOiB0aGlzLl9jbGllbnQuY29uZmlnLnJlcXVlc3Q/LmNhY2hlQWRhcHRlcixcbiAgICAgIHJldHJ5Rm46IHRoaXMuX2NsaWVudC5jb25maWcucmVxdWVzdD8ucmV0cnlGbixcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkFib3J0JCksXG4gICAgICAgIHRhcCgoc3RhdGUpID0+IHRoaXMuX3VwZGF0ZUVudGl0eVN0YXRlKHN0YXRlLCBtZXRhLCBvcHRpb25zKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuX29uQWJvcnQkLm5leHQoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcG9sbChjb25maWc6IFBvbGxDb25maWcpIHtcbiAgICBpZiAodGhpcy5fcG9sbGluZ1N1YnNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudFBvbGxDb25maWcgPSBjb25maWc7XG5cbiAgICBjb25zdCBpbnRlcnZhbCQgPSBpbnRlcnZhbChjb25maWcuaW50ZXJ2YWwpO1xuICAgIGNvbnN0IHBvbGwkID0gaW50ZXJ2YWwkLnBpcGUoXG4gICAgICBza2lwKGNvbmZpZy50cmlnZ2VySW1tZWRpYXRlbHkgPyAwIDogMSksXG4gICAgICB0YWtlVW50aWwoY29uZmlnLnRha2VVbnRpbCksXG4gICAgICB0YWtlV2hpbGUoKCkgPT4gIXRoaXMuX2lzUG9sbGluZ1BhdXNlZCksXG4gICAgICBmaWx0ZXIoKCkgPT4gIWlzUXVlcnlTdGF0ZUxvYWRpbmcodGhpcy5fc3RhdGUkLnZhbHVlKSksXG4gICAgKTtcblxuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24gPSBwb2xsJC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4gdGhpcy5leGVjdXRlKHsgc2tpcENhY2hlOiB0cnVlLCBfdHJpZ2dlcmVkVmlhOiAncG9sbCcgfSksXG4gICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5zdG9wUG9sbGluZygpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdG9wUG9sbGluZygpIHtcbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRQb2xsQ29uZmlnID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcGF1c2VQb2xsaW5nKCkge1xuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fcG9sbGluZ1N1YnNjcmlwdGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLl9pc1BvbGxpbmdQYXVzZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZXN1bWVQb2xsaW5nKCkge1xuICAgIGlmICghdGhpcy5faXNQb2xsaW5nUGF1c2VkIHx8ICF0aGlzLl9jdXJyZW50UG9sbENvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5faXNQb2xsaW5nUGF1c2VkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy5wb2xsKHsgLi4udGhpcy5fY3VycmVudFBvbGxDb25maWcsIHRyaWdnZXJJbW1lZGlhdGVseTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEJlYXJlckF1dGhQcm92aWRlcigpIHtcbiAgICBjb25zdCBhdXRoUHJvdmlkZXIgPSB0aGlzLl9jbGllbnQuYXV0aFByb3ZpZGVyO1xuXG4gICAgaWYgKGF1dGhQcm92aWRlciAmJiBpc0JlYXJlckF1dGhQcm92aWRlcihhdXRoUHJvdmlkZXIpKSB7XG4gICAgICByZXR1cm4gYXV0aFByb3ZpZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlRW50aXR5U3RhdGUoXG4gICAgcmVxdWVzdEV2ZW50OiBSZXF1ZXN0RXZlbnQ8UmVzcG9uc2U+LFxuICAgIG1ldGE6IFF1ZXJ5U3RhdGVNZXRhLFxuICAgIG9wdGlvbnM/OiBFeGVjdXRlUXVlcnlPcHRpb25zLFxuICApIHtcbiAgICBzd2l0Y2ggKHJlcXVlc3RFdmVudC50eXBlKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICBjYXNlICdkZWxheS1yZXRyeSc6IHtcbiAgICAgICAgY29uc3QgeyB0eXBlLCByZXRyeURlbGF5LCByZXRyeU51bWJlciB9ID0gcmVxdWVzdEV2ZW50O1xuICAgICAgICBjb25zdCBuZXdNZXRhOiBRdWVyeVN0YXRlTWV0YSA9IHsgLi4ubWV0YSwgaXNXYWl0aW5nRm9yUmV0cnk6IHR5cGUgPT09ICdkZWxheS1yZXRyeScsIHJldHJ5RGVsYXksIHJldHJ5TnVtYmVyIH07XG5cbiAgICAgICAgdGhpcy5fc3RhdGUkLm5leHQoe1xuICAgICAgICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkxvYWRpbmcsXG4gICAgICAgICAgbWV0YTogbmV3TWV0YSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICd1cGxvYWQtcHJvZ3Jlc3MnOlxuICAgICAgY2FzZSAnZG93bmxvYWQtcHJvZ3Jlc3MnOiB7XG4gICAgICAgIHRoaXMuX3N0YXRlJC5uZXh0KHtcbiAgICAgICAgICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5Mb2FkaW5nLFxuICAgICAgICAgIHByb2dyZXNzOiByZXF1ZXN0RXZlbnQucHJvZ3Jlc3MsXG4gICAgICAgICAgcGFydGlhbFRleHQ6ICdwYXJ0aWFsVGV4dCcgaW4gcmVxdWVzdEV2ZW50ID8gcmVxdWVzdEV2ZW50LnBhcnRpYWxUZXh0IDogdW5kZWZpbmVkLFxuICAgICAgICAgIG1ldGEsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdzdWNjZXNzJzoge1xuICAgICAgICBjb25zdCB7IHJlc3BvbnNlLCBleHBpcmVzSW5UaW1lc3RhbXAgfSA9IHJlcXVlc3RFdmVudDtcbiAgICAgICAgY29uc3QgaXNHcWwgPSBpc0dxbFF1ZXJ5Q29uZmlnKHRoaXMuX3F1ZXJ5Q29uZmlnKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID1cbiAgICAgICAgICBpc0dxbCAmJiB0eXBlb2YgcmVzcG9uc2UgPT09ICdvYmplY3QnICYmICEhcmVzcG9uc2UgJiYgJ2RhdGEnIGluIHJlc3BvbnNlXG4gICAgICAgICAgICA/IChyZXNwb25zZVsnZGF0YSddIGFzIFJlc3BvbnNlKVxuICAgICAgICAgICAgOiAocmVzcG9uc2UgYXMgUmVzcG9uc2UpO1xuXG4gICAgICAgIGlmICh0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHkgJiYgdGhpcy5fcXVlcnlDb25maWcuZW50aXR5LnNldCkge1xuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5fcXVlcnlDb25maWcuZW50aXR5Py5pZCh7IGFyZ3M6IHRoaXMuX2FyZ3VtZW50cywgcmVzcG9uc2U6IHJlc3BvbnNlRGF0YSB9KTtcblxuICAgICAgICAgIHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eT8uc2V0KHtcbiAgICAgICAgICAgIGFyZ3M6IHRoaXMuX2FyZ3VtZW50cyxcbiAgICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZURhdGEsXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIHN0b3JlOiB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHkuc3RvcmUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGF0ZSQubmV4dCh7XG4gICAgICAgICAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuU3VjY2VzcyxcbiAgICAgICAgICByZXNwb25zZTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgIG1ldGE6IHsgLi4ubWV0YSwgZXhwaXJlc0F0OiBleHBpcmVzSW5UaW1lc3RhbXAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2ZhaWx1cmUnOiB7XG4gICAgICAgIGNvbnN0IHsgZXJyb3IgfSA9IHJlcXVlc3RFdmVudDtcbiAgICAgICAgY29uc3QgZmFpbHVyZSA9ICgpID0+IHRoaXMuX3N0YXRlJC5uZXh0KHsgdHlwZTogUXVlcnlTdGF0ZVR5cGUuRmFpbHVyZSwgZXJyb3IsIG1ldGEgfSk7XG4gICAgICAgIGNvbnN0IGJlYXJlckF1dGhQcm92aWRlciA9IHRoaXMuX2dldEJlYXJlckF1dGhQcm92aWRlcigpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhYmVhcmVyQXV0aFByb3ZpZGVyIHx8XG4gICAgICAgICAgb3B0aW9ucz8uX2lzVW5hdXRob3JpemVkUmV0cnkgfHxcbiAgICAgICAgICBlcnJvci5zdGF0dXMgIT09IEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZCB8fFxuICAgICAgICAgICFiZWFyZXJBdXRoUHJvdmlkZXIuc2hvdWxkUmVmcmVzaE9uVW5hdXRob3JpemVkUmVzcG9uc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhaWx1cmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gYmVhcmVyQXV0aFByb3ZpZGVyLl9yZWZyZXNoUXVlcnkoKTtcbiAgICAgICAgaWYgKCFxdWVyeSkgcmV0dXJuIGZhaWx1cmUoKTtcblxuICAgICAgICBxdWVyeS5zdGF0ZSRcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbFJlc3BvbnNlKCksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25BYm9ydCQpLFxuICAgICAgICAgICAgdGFwKChzdGF0ZSkgPT5cbiAgICAgICAgICAgICAgaXNRdWVyeVN0YXRlU3VjY2VzcyhzdGF0ZSkgPyB0aGlzLmV4ZWN1dGUoeyAuLi5vcHRpb25zLCBfaXNVbmF1dGhvcml6ZWRSZXRyeTogdHJ1ZSB9KSA6IGZhaWx1cmUoKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnY2FuY2VsJzoge1xuICAgICAgICB0aGlzLl9zdGF0ZSQubmV4dCh7XG4gICAgICAgICAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuQ2FuY2VsbGVkLFxuICAgICAgICAgIG1ldGEsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zZm9ybVN0YXRlKHM6IFF1ZXJ5U3RhdGU8UmVzcG9uc2U+KTogT2JzZXJ2YWJsZTxRdWVyeVN0YXRlPERhdGE+PiB7XG4gICAgaWYgKCFpc1F1ZXJ5U3RhdGVTdWNjZXNzKHMpIHx8ICF0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHk/LmdldCkge1xuICAgICAgcmV0dXJuIG9mKHMpIGFzIE9ic2VydmFibGU8UXVlcnlTdGF0ZTxEYXRhPj47XG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHkuaWQoeyBhcmdzOiB0aGlzLl9hcmd1bWVudHMsIHJlc3BvbnNlOiBzLnJlc3BvbnNlIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eVxuICAgICAgLmdldCh7IGFyZ3M6IHRoaXMuX2FyZ3VtZW50cywgaWQsIHJlc3BvbnNlOiBzLnJlc3BvbnNlLCBzdG9yZTogdGhpcy5fcXVlcnlDb25maWcuZW50aXR5LnN0b3JlIH0pXG4gICAgICAucGlwZShtYXAoKHYpID0+ICh7IC4uLnMsIHJlc3BvbnNlOiB2IH0pKSk7XG4gIH1cbn1cbiJdfQ==
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnkvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBQ04sUUFBUSxFQUNSLEdBQUcsRUFFSCxFQUFFLEVBQ0YsV0FBVyxFQUNYLElBQUksRUFDSixPQUFPLEVBRVAsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRS9DLE9BQU8sRUFBZSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBa0IsT0FBTyxFQUFnQixNQUFNLFlBQVksQ0FBQztBQWFuRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUVyQixNQUFNLE9BQU8sS0FBSztJQXlCaEIsSUFBWSxPQUFPO1FBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsMEJBQTBCO2dCQUFFLE9BQU87WUFFckUsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDM0IsT0FB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QUFDLENBQUM7UUFFeEYsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU07YUFDNUIsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUMvRixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgZmlsdGVyLFxuICBpbnRlcnZhbCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc2hhcmVSZXBsYXksXG4gIHNraXAsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWwsXG4gIHRha2VXaGlsZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzQmVhcmVyQXV0aFByb3ZpZGVyIH0gZnJvbSAnLi4vYXV0aCc7XG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJy4uL2VudGl0eSc7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgc2hvdWxkQ2FjaGVRdWVyeSB9IGZyb20gJy4uL3F1ZXJ5LWNsaWVudCc7XG5pbXBvcnQgeyBIdHRwU3RhdHVzQ29kZSwgcmVxdWVzdCwgUmVxdWVzdEV2ZW50IH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQge1xuICBCYXNlQXJndW1lbnRzLFxuICBFeGVjdXRlUXVlcnlPcHRpb25zLFxuICBHcWxRdWVyeUNvbmZpZyxcbiAgUG9sbENvbmZpZyxcbiAgUXVlcnlBdXRvUmVmcmVzaENvbmZpZyxcbiAgUXVlcnlTdGF0ZSxcbiAgUXVlcnlTdGF0ZU1ldGEsXG4gIFF1ZXJ5U3RhdGVUeXBlLFxuICBSZXN0UXVlcnlDb25maWcsXG4gIFJvdXRlVHlwZSxcbn0gZnJvbSAnLi9xdWVyeS50eXBlcyc7XG5pbXBvcnQge1xuICBjb21wdXRlUXVlcnlCb2R5LFxuICBjb21wdXRlUXVlcnlIZWFkZXJzLFxuICBjb21wdXRlUXVlcnlNZXRob2QsXG4gIGlzR3FsUXVlcnlDb25maWcsXG4gIGlzUXVlcnlTdGF0ZUNhbmNlbGxlZCxcbiAgaXNRdWVyeVN0YXRlRmFpbHVyZSxcbiAgaXNRdWVyeVN0YXRlTG9hZGluZyxcbiAgaXNRdWVyeVN0YXRlUHJlcGFyZWQsXG4gIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsXG4gIHRha2VVbnRpbFJlc3BvbnNlLFxufSBmcm9tICcuL3F1ZXJ5LnV0aWxzJztcblxubGV0IF9uZXh0UXVlcnlJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeTxcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJvdXRlIGV4dGVuZHMgUm91dGVUeXBlPEFyZ3VtZW50cz4sXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiB7XG4gIHJlYWRvbmx5IF9pZCA9IF9uZXh0UXVlcnlJZCsrO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRMb2NhbElkID0gMDtcbiAgcHJpdmF0ZSBfcG9sbGluZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX29uQWJvcnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfY3VycmVudFBvbGxDb25maWc6IFBvbGxDb25maWcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfaXNQb2xsaW5nUGF1c2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeVN0YXRlPFJlc3BvbnNlPj4oe1xuICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLlByZXBhcmVkLFxuICAgIG1ldGE6IHsgaWQ6IHRoaXMuX2N1cnJlbnRMb2NhbElkLCB0cmlnZ2VyZWRWaWE6ICdwcm9ncmFtJyB9LFxuICB9KTtcblxuICBwcml2YXRlIGdldCBfbmV4dElkKCkge1xuICAgIHJldHVybiArK3RoaXMuX2N1cnJlbnRMb2NhbElkO1xuICB9XG5cbiAgZ2V0IHN0YXRlJCgpOiBPYnNlcnZhYmxlPFF1ZXJ5U3RhdGU8RGF0YT4+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnBpcGUoXG4gICAgICB0YXAoKHMpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnQuY29uZmlnLmxvZ2dpbmc/LnByZXBhcmVkUXVlcnlTdWJzY3JpcHRpb25zKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZVByZXBhcmVkKHMpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFF1ZXJ5ICR7dGhpcy5fcm91dGVXaXRoUGFyYW1zfSB3YXMgc3Vic2NyaWJlZCB0byBpbiB0aGUgcHJlcGFyZWQgc3RhdGUuIERpZCB5b3UgZm9yZ2V0IHRvIGNhbGwgLmV4ZWN1dGUoKT9gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKChzKSA9PiB0aGlzLl90cmFuc2Zvcm1TdGF0ZShzKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHF1ZXJ5LlxuICAgKlxuICAgKiAqKldhcm5pbmchKiogVGhpcyBkaWZmZXJzIGZyb20gdGhlIGBzdGF0ZSRgIG9ic2VydmFibGUgaW4gdGhhdCBpdCBkb2VzIG5vdCB1c2UgdGhlIHF1ZXJ5IHN0b3JlLiBUaHVzLCB0aGUgcmVzcG9uc2UgZGF0YSBtaWdodCBiZSBvdXRkYXRlZC5cbiAgICogVXNlIGBzdGF0ZSRgIChvciBgZmlyc3RWYWx1ZUZyb20oc3RhdGUkKWApIHRoZSBtb3N0IHVwLXRvLWRhdGUgZGF0YS5cbiAgICovXG4gIGdldCByYXdTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzRXhwaXJlZCgpIHtcbiAgICBpZiAoaXNRdWVyeVN0YXRlTG9hZGluZyh0aGlzLnJhd1N0YXRlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGlzUXVlcnlTdGF0ZVByZXBhcmVkKHRoaXMucmF3U3RhdGUpIHx8XG4gICAgICBpc1F1ZXJ5U3RhdGVDYW5jZWxsZWQodGhpcy5yYXdTdGF0ZSkgfHxcbiAgICAgIGlzUXVlcnlTdGF0ZUZhaWx1cmUodGhpcy5yYXdTdGF0ZSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHRzID0gdGhpcy5yYXdTdGF0ZS5tZXRhLmV4cGlyZXNBdDtcblxuICAgIGlmICghdHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cyA8IERhdGUubm93KCk7XG4gIH1cblxuICBnZXQgaXNJblVzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLm9ic2VydmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IF9zdWJzY3JpYmVyQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5vYnNlcnZlcnMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzUG9sbGluZygpIHtcbiAgICByZXR1cm4gISF0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGF1dG9SZWZyZXNoT25Db25maWcoKSB7XG4gICAgY29uc3QgYmFzZSA9IHRoaXMuX3F1ZXJ5Q29uZmlnLmF1dG9SZWZyZXNoT24gPz8ge307XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZDogUmVhZG9ubHk8UXVlcnlBdXRvUmVmcmVzaENvbmZpZz4gPSB7XG4gICAgICBxdWVyeUNsaWVudERlZmF1bHRIZWFkZXJzQ2hhbmdlOiBiYXNlLnF1ZXJ5Q2xpZW50RGVmYXVsdEhlYWRlcnNDaGFuZ2UgPz8gdHJ1ZSxcbiAgICAgIHdpbmRvd0ZvY3VzOiBiYXNlLndpbmRvd0ZvY3VzID8/IHRydWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBfZW5hYmxlU21hcnRQb2xsaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeUNvbmZpZy5lbmFibGVTbWFydFBvbGxpbmcgPz8gdHJ1ZTtcbiAgfVxuXG4gIGdldCBzdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlDb25maWcuZW50aXR5Py5zdG9yZSA/PyBudWxsO1xuICB9XG5cbiAgZ2V0IGNhbkJlQ2FjaGVkKCkge1xuICAgIHJldHVybiBzaG91bGRDYWNoZVF1ZXJ5KHRoaXMuX3F1ZXJ5Q29uZmlnLm1ldGhvZCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnQ6IFF1ZXJ5Q2xpZW50LFxuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9xdWVyeUNvbmZpZzpcbiAgICAgIHwgUmVzdFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+XG4gICAgICB8IEdxbFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LFxuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9yb3V0ZVdpdGhQYXJhbXM6IFJvdXRlLFxuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9hcmd1bWVudHM6IEFyZ3VtZW50cyxcbiAgKSB7fVxuXG4gIGV4ZWN1dGUob3B0aW9uczogRXhlY3V0ZVF1ZXJ5T3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgeyBza2lwQ2FjaGUgPSBmYWxzZSwgX3RyaWdnZXJlZFZpYTogdHJpZ2dlcmVkVmlhID0gJ3Byb2dyYW0nLCBjYW5jZWxQcmV2aW91cyA9IGZhbHNlIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHsgYXV0aFByb3ZpZGVyIH0gPSB0aGlzLl9jbGllbnQ7XG4gICAgY29uc3QgcXVlcnlDb25maWcgPSB0aGlzLl9xdWVyeUNvbmZpZztcblxuICAgIGlmICghdGhpcy5pc0V4cGlyZWQgJiYgIXNraXBDYWNoZSAmJiBpc1F1ZXJ5U3RhdGVTdWNjZXNzKHRoaXMucmF3U3RhdGUpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAocXVlcnlDb25maWcuc2VjdXJlICYmICFhdXRoUHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGV4ZWN1dGUgc2VjdXJlIHF1ZXJ5IHdpdGhvdXQgYXV0aCBwcm92aWRlcicpO1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gdGhpcy5fbmV4dElkO1xuICAgIGNvbnN0IG1ldGE6IFF1ZXJ5U3RhdGVNZXRhID0geyBpZCwgdHJpZ2dlcmVkVmlhIH07XG5cbiAgICBpZiAoaXNRdWVyeVN0YXRlTG9hZGluZyh0aGlzLnJhd1N0YXRlKSkge1xuICAgICAgaWYgKGNhbmNlbFByZXZpb3VzKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlJC5uZXh0KHsgdHlwZTogUXVlcnlTdGF0ZVR5cGUuTG9hZGluZywgbWV0YSB9KTtcblxuICAgIGNvbnN0IG1ldGhvZCA9IGNvbXB1dGVRdWVyeU1ldGhvZCh7IGNvbmZpZzogcXVlcnlDb25maWcsIGNsaWVudDogdGhpcy5fY2xpZW50IH0pO1xuICAgIGNvbnN0IGJvZHkgPSBjb21wdXRlUXVlcnlCb2R5KHsgY29uZmlnOiBxdWVyeUNvbmZpZywgY2xpZW50OiB0aGlzLl9jbGllbnQsIGFyZ3M6IHRoaXMuX2FyZ3VtZW50cywgbWV0aG9kIH0pO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBjb21wdXRlUXVlcnlIZWFkZXJzKHsgY2xpZW50OiB0aGlzLl9jbGllbnQsIGNvbmZpZzogcXVlcnlDb25maWcsIGFyZ3M6IHRoaXMuX2FyZ3VtZW50cyB9KTtcblxuICAgIHJlcXVlc3Q8UmVzcG9uc2U+KHtcbiAgICAgIHVybFdpdGhQYXJhbXM6IHRoaXMuX3JvdXRlV2l0aFBhcmFtcyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIGJvZHksXG4gICAgICBoZWFkZXJzLFxuICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHF1ZXJ5Q29uZmlnLnJlcG9ydFByb2dyZXNzLFxuICAgICAgcmVzcG9uc2VUeXBlOiBxdWVyeUNvbmZpZy5yZXNwb25zZVR5cGUsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHF1ZXJ5Q29uZmlnLndpdGhDcmVkZW50aWFscyxcbiAgICAgIGNhY2hlQWRhcHRlcjogdGhpcy5fY2xpZW50LmNvbmZpZy5yZXF1ZXN0Py5jYWNoZUFkYXB0ZXIsXG4gICAgICByZXRyeUZuOiB0aGlzLl9jbGllbnQuY29uZmlnLnJlcXVlc3Q/LnJldHJ5Rm4sXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKHN0YXRlKSA9PiB0aGlzLl91cGRhdGVFbnRpdHlTdGF0ZShzdGF0ZSwgbWV0YSwgb3B0aW9ucykpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fb25BYm9ydCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICBpZiAoIWlzUXVlcnlTdGF0ZUxvYWRpbmcodGhpcy5yYXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuX29uQWJvcnQkLm5leHQoKTtcblxuICAgIHRoaXMuX3N0YXRlJC5uZXh0KHtcbiAgICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkNhbmNlbGxlZCxcbiAgICAgIG1ldGE6IHsgaWQ6IHRoaXMucmF3U3RhdGUubWV0YS5pZCwgdHJpZ2dlcmVkVmlhOiB0aGlzLnJhd1N0YXRlLm1ldGEudHJpZ2dlcmVkVmlhIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBvbGwoY29uZmlnOiBQb2xsQ29uZmlnKSB7XG4gICAgaWYgKHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRQb2xsQ29uZmlnID0gY29uZmlnO1xuXG4gICAgY29uc3QgaW50ZXJ2YWwkID0gaW50ZXJ2YWwoY29uZmlnLmludGVydmFsKTtcbiAgICBjb25zdCBwb2xsJCA9IGludGVydmFsJC5waXBlKFxuICAgICAgc2tpcChjb25maWcudHJpZ2dlckltbWVkaWF0ZWx5ID8gMCA6IDEpLFxuICAgICAgdGFrZVVudGlsKGNvbmZpZy50YWtlVW50aWwpLFxuICAgICAgdGFrZVdoaWxlKCgpID0+ICF0aGlzLl9pc1BvbGxpbmdQYXVzZWQpLFxuICAgICAgZmlsdGVyKCgpID0+ICFpc1F1ZXJ5U3RhdGVMb2FkaW5nKHRoaXMuX3N0YXRlJC52YWx1ZSkpLFxuICAgICk7XG5cbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uID0gcG9sbCQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHRoaXMuZXhlY3V0ZSh7IHNraXBDYWNoZTogdHJ1ZSwgX3RyaWdnZXJlZFZpYTogJ3BvbGwnIH0pLFxuICAgICAgY29tcGxldGU6ICgpID0+IHRoaXMuc3RvcFBvbGxpbmcoKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RvcFBvbGxpbmcoKSB7XG4gICAgdGhpcy5fcG9sbGluZ1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50UG9sbENvbmZpZyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBhdXNlUG9sbGluZygpIHtcbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5faXNQb2xsaW5nUGF1c2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmVzdW1lUG9sbGluZygpIHtcbiAgICBpZiAoIXRoaXMuX2lzUG9sbGluZ1BhdXNlZCB8fCAhdGhpcy5fY3VycmVudFBvbGxDb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuX2lzUG9sbGluZ1BhdXNlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRoaXMucG9sbCh7IC4uLnRoaXMuX2N1cnJlbnRQb2xsQ29uZmlnLCB0cmlnZ2VySW1tZWRpYXRlbHk6IHRydWUgfSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRCZWFyZXJBdXRoUHJvdmlkZXIoKSB7XG4gICAgY29uc3QgYXV0aFByb3ZpZGVyID0gdGhpcy5fY2xpZW50LmF1dGhQcm92aWRlcjtcblxuICAgIGlmIChhdXRoUHJvdmlkZXIgJiYgaXNCZWFyZXJBdXRoUHJvdmlkZXIoYXV0aFByb3ZpZGVyKSkge1xuICAgICAgcmV0dXJuIGF1dGhQcm92aWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUVudGl0eVN0YXRlKFxuICAgIHJlcXVlc3RFdmVudDogUmVxdWVzdEV2ZW50PFJlc3BvbnNlPixcbiAgICBtZXRhOiBRdWVyeVN0YXRlTWV0YSxcbiAgICBvcHRpb25zPzogRXhlY3V0ZVF1ZXJ5T3B0aW9ucyxcbiAgKSB7XG4gICAgc3dpdGNoIChyZXF1ZXN0RXZlbnQudHlwZSkge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY2FzZSAnZGVsYXktcmV0cnknOiB7XG4gICAgICAgIGNvbnN0IHsgdHlwZSwgcmV0cnlEZWxheSwgcmV0cnlOdW1iZXIgfSA9IHJlcXVlc3RFdmVudDtcbiAgICAgICAgY29uc3QgbmV3TWV0YTogUXVlcnlTdGF0ZU1ldGEgPSB7IC4uLm1ldGEsIGlzV2FpdGluZ0ZvclJldHJ5OiB0eXBlID09PSAnZGVsYXktcmV0cnknLCByZXRyeURlbGF5LCByZXRyeU51bWJlciB9O1xuXG4gICAgICAgIHRoaXMuX3N0YXRlJC5uZXh0KHtcbiAgICAgICAgICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5Mb2FkaW5nLFxuICAgICAgICAgIG1ldGE6IG5ld01ldGEsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAndXBsb2FkLXByb2dyZXNzJzpcbiAgICAgIGNhc2UgJ2Rvd25sb2FkLXByb2dyZXNzJzoge1xuICAgICAgICB0aGlzLl9zdGF0ZSQubmV4dCh7XG4gICAgICAgICAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuTG9hZGluZyxcbiAgICAgICAgICBwcm9ncmVzczogcmVxdWVzdEV2ZW50LnByb2dyZXNzLFxuICAgICAgICAgIHBhcnRpYWxUZXh0OiAncGFydGlhbFRleHQnIGluIHJlcXVlc3RFdmVudCA/IHJlcXVlc3RFdmVudC5wYXJ0aWFsVGV4dCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtZXRhLFxuICAgICAgICB9KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnc3VjY2Vzcyc6IHtcbiAgICAgICAgY29uc3QgeyByZXNwb25zZSwgZXhwaXJlc0luVGltZXN0YW1wIH0gPSByZXF1ZXN0RXZlbnQ7XG4gICAgICAgIGNvbnN0IGlzR3FsID0gaXNHcWxRdWVyeUNvbmZpZyh0aGlzLl9xdWVyeUNvbmZpZyk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9XG4gICAgICAgICAgaXNHcWwgJiYgdHlwZW9mIHJlc3BvbnNlID09PSAnb2JqZWN0JyAmJiAhIXJlc3BvbnNlICYmICdkYXRhJyBpbiByZXNwb25zZVxuICAgICAgICAgICAgPyAocmVzcG9uc2VbJ2RhdGEnXSBhcyBSZXNwb25zZSlcbiAgICAgICAgICAgIDogKHJlc3BvbnNlIGFzIFJlc3BvbnNlKTtcblxuICAgICAgICBpZiAodGhpcy5fcXVlcnlDb25maWcuZW50aXR5ICYmIHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eS5zZXQpIHtcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eT8uaWQoeyBhcmdzOiB0aGlzLl9hcmd1bWVudHMsIHJlc3BvbnNlOiByZXNwb25zZURhdGEgfSk7XG5cbiAgICAgICAgICB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHk/LnNldCh7XG4gICAgICAgICAgICBhcmdzOiB0aGlzLl9hcmd1bWVudHMsXG4gICAgICAgICAgICByZXNwb25zZTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBzdG9yZTogdGhpcy5fcXVlcnlDb25maWcuZW50aXR5LnN0b3JlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RhdGUkLm5leHQoe1xuICAgICAgICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLlN1Y2Nlc3MsXG4gICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICBtZXRhOiB7IC4uLm1ldGEsIGV4cGlyZXNBdDogZXhwaXJlc0luVGltZXN0YW1wIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdmYWlsdXJlJzoge1xuICAgICAgICBjb25zdCB7IGVycm9yIH0gPSByZXF1ZXN0RXZlbnQ7XG4gICAgICAgIGNvbnN0IGZhaWx1cmUgPSAoKSA9PiB0aGlzLl9zdGF0ZSQubmV4dCh7IHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkZhaWx1cmUsIGVycm9yLCBtZXRhIH0pO1xuICAgICAgICBjb25zdCBiZWFyZXJBdXRoUHJvdmlkZXIgPSB0aGlzLl9nZXRCZWFyZXJBdXRoUHJvdmlkZXIoKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWJlYXJlckF1dGhQcm92aWRlciB8fFxuICAgICAgICAgIG9wdGlvbnM/Ll9pc1VuYXV0aG9yaXplZFJldHJ5IHx8XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzICE9PSBIdHRwU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWQgfHxcbiAgICAgICAgICAhYmVhcmVyQXV0aFByb3ZpZGVyLnNob3VsZFJlZnJlc2hPblVuYXV0aG9yaXplZFJlc3BvbnNlXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWlsdXJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdWVyeSA9IGJlYXJlckF1dGhQcm92aWRlci5fcmVmcmVzaFF1ZXJ5KCk7XG4gICAgICAgIGlmICghcXVlcnkpIHJldHVybiBmYWlsdXJlKCk7XG5cbiAgICAgICAgcXVlcnkuc3RhdGUkXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWxSZXNwb25zZSgpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uQWJvcnQkKSxcbiAgICAgICAgICAgIHRhcCgoc3RhdGUpID0+XG4gICAgICAgICAgICAgIGlzUXVlcnlTdGF0ZVN1Y2Nlc3Moc3RhdGUpID8gdGhpcy5leGVjdXRlKHsgLi4ub3B0aW9ucywgX2lzVW5hdXRob3JpemVkUmV0cnk6IHRydWUgfSkgOiBmYWlsdXJlKCksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2NhbmNlbCc6IHtcbiAgICAgICAgdGhpcy5fc3RhdGUkLm5leHQoe1xuICAgICAgICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkNhbmNlbGxlZCxcbiAgICAgICAgICBtZXRhLFxuICAgICAgICB9KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90cmFuc2Zvcm1TdGF0ZShzOiBRdWVyeVN0YXRlPFJlc3BvbnNlPik6IE9ic2VydmFibGU8UXVlcnlTdGF0ZTxEYXRhPj4ge1xuICAgIGlmICghaXNRdWVyeVN0YXRlU3VjY2VzcyhzKSB8fCAhdGhpcy5fcXVlcnlDb25maWcuZW50aXR5Py5nZXQpIHtcbiAgICAgIHJldHVybiBvZihzKSBhcyBPYnNlcnZhYmxlPFF1ZXJ5U3RhdGU8RGF0YT4+O1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gdGhpcy5fcXVlcnlDb25maWcuZW50aXR5LmlkKHsgYXJnczogdGhpcy5fYXJndW1lbnRzLCByZXNwb25zZTogcy5yZXNwb25zZSB9KTtcblxuICAgIHJldHVybiB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHlcbiAgICAgIC5nZXQoeyBhcmdzOiB0aGlzLl9hcmd1bWVudHMsIGlkLCByZXNwb25zZTogcy5yZXNwb25zZSwgc3RvcmU6IHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eS5zdG9yZSB9KVxuICAgICAgLnBpcGUobWFwKCh2KSA9PiAoeyAuLi5zLCByZXNwb25zZTogdiB9KSkpO1xuICB9XG59XG4iXX0=
|
|
@@ -13,6 +13,7 @@ export class QueryField {
|
|
|
13
13
|
this.data = data;
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
+
const IGNORED_FILTER_COUNT_FIELDS = ['page', 'skip', 'take', 'limit', 'sort', 'sortBy', 'sortOrder', 'query', 'search'];
|
|
16
17
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
18
|
export class QueryForm {
|
|
18
19
|
get _formValue() {
|
|
@@ -24,6 +25,12 @@ export class QueryForm {
|
|
|
24
25
|
get value() {
|
|
25
26
|
return this._changes$.value.currentValue;
|
|
26
27
|
}
|
|
28
|
+
get defaultFormValue() {
|
|
29
|
+
return Object.entries(this._defaultValues).reduce((acc, [key]) => {
|
|
30
|
+
acc[key] = this._getDefaultValue(key);
|
|
31
|
+
return acc;
|
|
32
|
+
}, {});
|
|
33
|
+
}
|
|
27
34
|
constructor(_fields) {
|
|
28
35
|
this._fields = _fields;
|
|
29
36
|
this._destroy$ = createDestroy();
|
|
@@ -54,6 +61,28 @@ export class QueryForm {
|
|
|
54
61
|
currentValue: this.form.getRawValue(),
|
|
55
62
|
});
|
|
56
63
|
this.changes$ = this._changes$.asObservable();
|
|
64
|
+
/**
|
|
65
|
+
* The number of active filters.
|
|
66
|
+
*
|
|
67
|
+
* Excludes the following fields by default:
|
|
68
|
+
* - `page`
|
|
69
|
+
* - `skip`
|
|
70
|
+
* - `take`
|
|
71
|
+
* - `limit`
|
|
72
|
+
* - `sort`
|
|
73
|
+
* - `sortBy`
|
|
74
|
+
* - `sortOrder`
|
|
75
|
+
* - `query`
|
|
76
|
+
* - `search`
|
|
77
|
+
*/
|
|
78
|
+
this.activeFilterCount$ = this.changes$.pipe(map(({ currentValue }) => Object.entries(currentValue)
|
|
79
|
+
.map(([key, value]) => {
|
|
80
|
+
if (IGNORED_FILTER_COUNT_FIELDS.includes(key) || this._fields[key].data.skipInFilterCount) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
return this._isDefaultValue(key, value);
|
|
84
|
+
})
|
|
85
|
+
.filter((v) => v === false).length));
|
|
57
86
|
assertInInjectionContext(QueryForm);
|
|
58
87
|
}
|
|
59
88
|
observe(options) {
|
|
@@ -237,9 +266,6 @@ export class QueryForm {
|
|
|
237
266
|
const defaultValues = {};
|
|
238
267
|
for (const [key, field] of Object.entries(this._fields)) {
|
|
239
268
|
const value = field.control.value;
|
|
240
|
-
if (value === null || value === undefined) {
|
|
241
|
-
continue;
|
|
242
|
-
}
|
|
243
269
|
if (Array.isArray(value)) {
|
|
244
270
|
defaultValues[key] = `${ET_ARR_PREFIX}${JSON.stringify(value)}`;
|
|
245
271
|
}
|
|
@@ -287,4 +313,4 @@ export class QueryForm {
|
|
|
287
313
|
this._currentFormValue$.next(newVal);
|
|
288
314
|
}
|
|
289
315
|
}
|
|
290
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBU2hILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTNFLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQztBQUVqQyxNQUFNLE9BQU8sVUFBVTtJQUNyQixJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFtQixJQUEwQjtRQUExQixTQUFJLEdBQUosSUFBSSxDQUFzQjtJQUFHLENBQUM7Q0FDbEQ7QUFFRCw4REFBOEQ7QUFDOUQsTUFBTSxPQUFPLFNBQVM7SUE0QnBCLElBQVksVUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUF1QixDQUFDO0lBQ3RELENBQUM7SUFTRCxJQUFJLFFBQVE7UUFDVixP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Q0FBQyxDQUFDLEtBQUssQ0FBQzthQUNYO1NBQ0Y7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO2dCQUN4QixXQUFXO2dCQUNYLFVBQVU7YUFDWCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxjQUFjLEdBQUcsS0FBSztRQUM5QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdEMsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQzdCLE9BQU87U0FDUjtRQUVELElBQUksY0FBYyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN2QztRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lLCBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGluamVjdCwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEVUX1BST1BFUlRZX1JFTU9WRUQsIFJvdXRlclN0YXRlU2VydmljZSwgY2xvbmUsIGNyZWF0ZURlc3Ryb3ksIGVxdWFsIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIGRlYm91bmNlVGltZSwgbWFwLCBtZXJnZSwgb2YsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBRdWVyeUZpZWxkT3B0aW9ucyxcbiAgUXVlcnlGb3JtR3JvdXBDb250cm9scyxcbiAgUXVlcnlGb3JtT2JzZXJ2ZU9wdGlvbnMsXG4gIFF1ZXJ5Rm9ybVZhbHVlLFxuICBRdWVyeUZvcm1WYWx1ZUV2ZW50LFxuICBRdWVyeUZvcm1Xcml0ZU9wdGlvbnMsXG59IGZyb20gJy4vcXVlcnktZm9ybS50eXBlcyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1Ub0Jvb2xlYW4sIHRyYW5zZm9ybVRvTnVtYmVyIH0gZnJvbSAnLi9xdWVyeS1mb3JtLnV0aWxzJztcblxuY29uc3QgRVRfQVJSX1BSRUZJWCA9ICdFVF9BUlJfXyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUZpZWxkPFQ+IHtcbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5jb250cm9sO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IFF1ZXJ5RmllbGRPcHRpb25zPFQ+KSB7fVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNsYXNzIFF1ZXJ5Rm9ybTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUXVlcnlGaWVsZDxhbnk+Pj4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdW5vYnNlcnZlVHJpZ2dlciQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0VmFsdWVzID0gdGhpcy5fZXh0cmFjdERlZmF1bHRWYWx1ZXMoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcm91dGVyU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlkVmFsdWVDaGFuZ2VzJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBfaXNPYnNlcnZpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2tpcE5leHRSZXNldHMgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGFuZ3VsYXIgZm9ybSBncm91cCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgZmllbGRzLlxuICAgKlxuICAgKiAqKkRvIG5vdCoqIHVzZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzIG9uIHRoaXMgZm9ybSBncm91cDpcbiAgICogLSBgc2V0VmFsdWVgOiBVc2UgYFF1ZXJ5Rm9ybS5zZXRWYWx1ZWAgaW5zdGVhZC5cbiAgICogLSBgcGF0Y2hWYWx1ZWA6IFVzZSBgUXVlcnlGb3JtLnBhdGNoVmFsdWVgIGluc3RlYWQuXG4gICAqIC0gYHZhbHVlQ2hhbmdlc2A6IFVzZSBgUXVlcnlGb3JtLmNoYW5nZXMkYCBpbnN0ZWFkLlxuICAgKiAtIGB2YWx1ZWA6IFVzZSBgUXVlcnlGb3JtLnZhbHVlYCBpbnN0ZWFkLlxuICAgKiAtIGBjb250cm9sc2A6IFVzZSBgUXVlcnlGb3JtLmNvbnRyb2xzYCBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX3NldHVwRm9ybUdyb3VwKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGFzdEZvcm1WYWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5Rm9ybVZhbHVlPFQ+IHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1cnJlbnRGb3JtVmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeUZvcm1WYWx1ZTxUPj4odGhpcy5fZm9ybVZhbHVlKTtcblxuICBwcml2YXRlIGdldCBfZm9ybVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSBhcyBRdWVyeUZvcm1WYWx1ZTxUPjtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeUZvcm1WYWx1ZUV2ZW50PFQ+Pih7XG4gICAgcHJldmlvdXNWYWx1ZTogbnVsbCxcbiAgICBjdXJyZW50VmFsdWU6IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFF1ZXJ5Rm9ybVZhbHVlPFQ+LFxuICB9KTtcblxuICByZWFkb25seSBjaGFuZ2VzJCA9IHRoaXMuX2NoYW5nZXMkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGdldCBjb250cm9scygpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VzJC52YWx1ZS5jdXJyZW50VmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9maWVsZHM6IFQpIHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoUXVlcnlGb3JtKTtcbiAgfVxuXG4gIG9ic2VydmUob3B0aW9ucz86IFF1ZXJ5Rm9ybU9ic2VydmVPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuX2lzT2JzZXJ2aW5nKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdRdWVyeUZvcm0ub2JzZXJ2ZSgpIHdhcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc09ic2VydmluZyA9IHRydWU7XG5cbiAgICBpZiAob3B0aW9ucz8uc3luY09uTmF2aWdhdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGRpZENoYW5nZXMgPSB0aGlzLnNldEZvcm1WYWx1ZUZyb21VcmxRdWVyeVBhcmFtcyh7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLl9yb3V0ZXJTdGF0ZVNlcnZpY2UucXVlcnlQYXJhbXMsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGRpZENoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlRm9ybUNoYW5nZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZXJnZSguLi5PYmplY3QudmFsdWVzKHRoaXMuX2ZpZWxkcykubWFwKChmaWVsZCkgPT4gZmllbGQuY29udHJvbC52YWx1ZUNoYW5nZXMpLCB0aGlzLl9kaWRWYWx1ZUNoYW5nZXMkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9oYW5kbGVGb3JtQ2hhbmdlKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5vYnNlcnZlVHJpZ2dlciQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgbGV0IGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3A6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGN1cnJlbnRVbmlxdWVDaGFuZ2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy5fY3VycmVudEZvcm1WYWx1ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiBjbG9uZSh0aGlzLl9sYXN0Rm9ybVZhbHVlJC52YWx1ZSksXG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IGNsb25lKGN1cnJlbnRWYWx1ZSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkgPT4ge1xuICAgICAgICAgIGlmIChvcHRpb25zPy53cml0ZVRvUXVlcnlQYXJhbXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zeW5jVmlhVXJsUXVlcnlQYXJhbXMoY3VycmVudFZhbHVlLCBvcHRpb25zPy5yZXBsYWNlVXJsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkaWRSZXNldFZhbHVlcyA9IHRoaXMuX3NraXBOZXh0UmVzZXRzXG4gICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICA6IHRoaXMuX2hhbmRsZVF1ZXJ5Rm9ybVJlc2V0cyhwcmV2aW91c1ZhbHVlID8/IG51bGwsIGN1cnJlbnRWYWx1ZSk7XG5cbiAgICAgICAgICB0aGlzLl9za2lwTmV4dFJlc2V0cyA9IGZhbHNlO1xuXG4gICAgICAgICAgY29uc3QgY2hhbmdlZEZpZWxkcyA9IE9iamVjdC5rZXlzKGN1cnJlbnRWYWx1ZSkuZmlsdGVyKFxuICAgICAgICAgICAgKGtleSkgPT4gIWVxdWFsKHByZXZpb3VzVmFsdWU/LltrZXldLCBjdXJyZW50VmFsdWVba2V5XSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wLmxlbmd0aCkge1xuICAgICAgICAgICAgY2hhbmdlZEZpZWxkcy5wdXNoKC4uLmNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3ApO1xuICAgICAgICAgICAgY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcCA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkaWRSZXNldFZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5fZGlkVmFsdWVDaGFuZ2VzJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcCA9IGNoYW5nZWRGaWVsZHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudFVuaXF1ZUNoYW5nZWRGaWVsZHMgPSBbLi4ubmV3IFNldChjaGFuZ2VkRmllbGRzKV07XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pID0+IHtcbiAgICAgICAgICBpZiAoY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcC5sZW5ndGgpIHJldHVybiBvZihudWxsKS5waXBlKG1hcCgoKSA9PiAoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkpKTtcblxuICAgICAgICAgIGNvbnN0IGRlYm91bmNlVmFsdWVzID0gY3VycmVudFVuaXF1ZUNoYW5nZWRGaWVsZHMubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRGF0YSA9IHRoaXMuX2ZpZWxkc1trZXldLmRhdGE7XG5cbiAgICAgICAgICAgIGlmIChmaWVsZERhdGEuZGlzYWJsZURlYm91bmNlSWZGYWxzeSA9PT0gdHJ1ZSAmJiAhY3VycmVudFZhbHVlW2tleV0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaWVsZERhdGEuZGVib3VuY2UgPz8gbnVsbDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGN1cnJlbnRVbmlxdWVDaGFuZ2VkRmllbGRzID0gW107XG5cbiAgICAgICAgICBpZiAoZGVib3VuY2VWYWx1ZXMuc29tZSgodikgPT4gdiA9PT0gbnVsbCkgfHwgIWRlYm91bmNlVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpLnBpcGUobWFwKCgpID0+ICh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNob3J0ZXN0RGVib3VuY2VUaW1lID0gTWF0aC5taW4oLi4uZGVib3VuY2VWYWx1ZXMuZmlsdGVyKCh2KTogdiBpcyBudW1iZXIgPT4gdiAhPT0gbnVsbCkpO1xuXG4gICAgICAgICAgcmV0dXJuIHRpbWVyKHNob3J0ZXN0RGVib3VuY2VUaW1lKS5waXBlKG1hcCgoKSA9PiAoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkpKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkgPT4ge1xuICAgICAgICAgIGlmIChjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbmdlcyQubmV4dCh7XG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiBwcmV2aW91c1ZhbHVlID8/IG51bGwsXG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91bm9ic2VydmVUcmlnZ2VyJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAob3B0aW9ucz8uc3luY09uTmF2aWdhdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3JvdXRlclN0YXRlU2VydmljZS5xdWVyeVBhcmFtQ2hhbmdlcyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5vYnNlcnZlVHJpZ2dlciQpLFxuICAgICAgICAgIHRhcCgoY2hhbmdlcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlkVmFsdWVDaGFuZ2VzID0gdGhpcy5zZXRGb3JtVmFsdWVGcm9tVXJsUXVlcnlQYXJhbXMoeyBxdWVyeVBhcmFtczogY2hhbmdlcyB9KTtcblxuICAgICAgICAgICAgaWYgKGRpZFZhbHVlQ2hhbmdlcykge1xuICAgICAgICAgICAgICB0aGlzLl9kaWRWYWx1ZUNoYW5nZXMkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVF1ZXJ5Rm9ybVJlc2V0cyhwcmV2aW91c1ZhbHVlOiBRdWVyeUZvcm1WYWx1ZTxUPiB8IG51bGwsIGN1cnJlbnRWYWx1ZTogUXVlcnlGb3JtVmFsdWU8VD4pIHtcbiAgICBsZXQgZGlkUmVzZXRWYWx1ZXMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgZm9ybUZpZWxkS2V5IGluIHRoaXMuX2ZpZWxkcykge1xuICAgICAgY29uc3QgcmVzZXRzID0gdGhpcy5fZmllbGRzW2Zvcm1GaWVsZEtleV0uZGF0YS5pc1Jlc2V0Qnk7XG5cbiAgICAgIGlmICghcmVzZXRzKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgcmVzZXRDb25kaXRpb25LZXlzID0gQXJyYXkuaXNBcnJheShyZXNldHMpID8gcmVzZXRzIDogW3Jlc2V0c107XG5cbiAgICAgIGZvciAoY29uc3QgcmVzZXRDb25kaXRpb25LZXkgb2YgcmVzZXRDb25kaXRpb25LZXlzKSB7XG4gICAgICAgIGlmICghKHJlc2V0Q29uZGl0aW9uS2V5IGluIHRoaXMuX2ZpZWxkcykpIHtcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgVGhlIGZpZWxkIFwiJHtyZXNldENvbmRpdGlvbktleX1cIiBpcyBub3QgZGVmaW5lZCBpbiB0aGUgUXVlcnlGb3JtLiBJcyBpdCBhIHR5cG8/YCwgdGhpcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJldmlvdXNWYWx1ZSAmJlxuICAgICAgICAgIGN1cnJlbnRWYWx1ZSAmJlxuICAgICAgICAgICFlcXVhbChwcmV2aW91c1ZhbHVlW3Jlc2V0Q29uZGl0aW9uS2V5XSwgY3VycmVudFZhbHVlW3Jlc2V0Q29uZGl0aW9uS2V5XSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlRm9yS2V5VG9SZXNldCA9IHRoaXMuX2dldERlZmF1bHRWYWx1ZShmb3JtRmllbGRLZXkpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZUZvcktleVRvUmVzZXQgPSBjdXJyZW50VmFsdWVbZm9ybUZpZWxkS2V5XTtcblxuICAgICAgICAgIGlmIChlcXVhbChkZWZhdWx0VmFsdWVGb3JLZXlUb1Jlc2V0LCBjdXJyZW50VmFsdWVGb3JLZXlUb1Jlc2V0KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2Zvcm1GaWVsZEtleV0uc2V0VmFsdWUoZGVmYXVsdFZhbHVlRm9yS2V5VG9SZXNldCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXG4gICAgICAgICAgZGlkUmVzZXRWYWx1ZXMgPSB0cnVlO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGlkUmVzZXRWYWx1ZXM7XG4gIH1cblxuICB1bm9ic2VydmUoKSB7XG4gICAgdGhpcy5fdW5vYnNlcnZlVHJpZ2dlciQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHNldEZvcm1WYWx1ZUZyb21VcmxRdWVyeVBhcmFtcyhvcHRpb25zOiB7IHF1ZXJ5UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KSB7XG4gICAgbGV0IGRpZFZhbHVlQ2hhbmdlcyA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBmaWVsZF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fZmllbGRzKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnF1ZXJ5UGFyYW1zW2tleV07XG5cbiAgICAgIGNvbnN0IHZhbHVlRG9lc05vdEV4aXN0ID0gdmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHZhbHVlRG9lc05vdEV4aXN0KSBjb250aW51ZTtcblxuICAgICAgY29uc3QgdmFsdWVHb3RSZW1vdmVkID0gdmFsdWUgPT09IEVUX1BST1BFUlRZX1JFTU9WRUQ7XG5cbiAgICAgIGlmICh2YWx1ZUdvdFJlbW92ZWQpIHtcbiAgICAgICAgZmllbGQuY29udHJvbC5zZXRWYWx1ZSh0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICBkaWRWYWx1ZUNoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGRlc2VyaWFsaXplZFZhbHVlID0gdmFsdWU7XG5cbiAgICAgIGlmIChmaWVsZC5kYXRhLnF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm4pIHtcbiAgICAgICAgZGVzZXJpYWxpemVkVmFsdWUgPSBmaWVsZC5kYXRhLnF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm4odmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGRlc2VyaWFsaXplZFZhbHVlID0gdHJhbnNmb3JtVG9OdW1iZXIodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSkgPT09ICdib29sZWFuJykge1xuICAgICAgICBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHRyYW5zZm9ybVRvQm9vbGVhbih2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlSXNFcXVhbFRvQ3VycmVudCA9IGVxdWFsKGRlc2VyaWFsaXplZFZhbHVlLCBmaWVsZC5jb250cm9sLnZhbHVlKTtcblxuICAgICAgaWYgKHZhbHVlSXNFcXVhbFRvQ3VycmVudCkgY29udGludWU7XG5cbiAgICAgIGZpZWxkLmNvbnRyb2wuc2V0VmFsdWUoZGVzZXJpYWxpemVkVmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIGRpZFZhbHVlQ2hhbmdlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZFZhbHVlQ2hhbmdlcztcbiAgfVxuXG4gIHNldFZhbHVlKHZhbHVlOiBRdWVyeUZvcm1WYWx1ZTxUPiwgb3B0aW9ucz86IFF1ZXJ5Rm9ybVdyaXRlT3B0aW9ucykge1xuICAgIHRoaXMuZm9ybS5zZXRWYWx1ZSh2YWx1ZSwgb3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucz8uc2tpcFJlc2V0cykge1xuICAgICAgdGhpcy5fc2tpcE5leHRSZXNldHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHBhdGNoVmFsdWUodmFsdWU6IFBhcnRpYWw8UXVlcnlGb3JtVmFsdWU8VD4+LCBvcHRpb25zPzogUXVlcnlGb3JtV3JpdGVPcHRpb25zKSB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodmFsdWUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnM/LnNraXBSZXNldHMpIHtcbiAgICAgIHRoaXMuX3NraXBOZXh0UmVzZXRzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXREZWZhdWx0VmFsdWUoa2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLl9kZWZhdWx0VmFsdWVzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsLnN0YXJ0c1dpdGgoRVRfQVJSX1BSRUZJWCkpIHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbC5zbGljZShFVF9BUlJfUFJFRklYLmxlbmd0aCkpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWwgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2lzRGVmYXVsdFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gYCR7RVRfQVJSX1BSRUZJWH0ke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gIDogdmFsdWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSkgPT09IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwRm9ybUdyb3VwKCkge1xuICAgIGNvbnN0IGdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSBhcyBRdWVyeUZvcm1Hcm91cENvbnRyb2xzPFQ+KTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2ZpZWxkcykpIHtcbiAgICAgIGdyb3VwLmFkZENvbnRyb2woa2V5LCBmaWVsZC5jb250cm9sKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cblxuICBwcml2YXRlIF9leHRyYWN0RGVmYXVsdFZhbHVlcygpIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBmaWVsZF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fZmllbGRzKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC5jb250cm9sLnZhbHVlO1xuXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZXNba2V5XSA9IGAke0VUX0FSUl9QUkVGSVh9JHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZXNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0VmFsdWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY1ZpYVVybFF1ZXJ5UGFyYW1zKHZhbHVlczogUXVlcnlGb3JtVmFsdWU8VD4sIHJlcGxhY2VVcmw/OiBib29sZWFuKSB7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IC4uLmNsb25lKHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKSB9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWVzKSkge1xuICAgICAgaWYgKCF0aGlzLl9maWVsZHNba2V5XSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFRoZSBmaWVsZCBcIiR7a2V5fVwiIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBRdWVyeUZvcm0uIElzIGl0IGEgdHlwbz9gLCB0aGlzKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9pc0RlZmF1bHRWYWx1ZShrZXksIHZhbHVlKSB8fCB0aGlzLl9maWVsZHNba2V5XS5kYXRhLmFwcGVuZFRvVXJsID09PSBmYWxzZSkge1xuICAgICAgICBkZWxldGUgcXVlcnlQYXJhbXNba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zW2tleV0gPSB0aGlzLl9maWVsZHNba2V5XS5kYXRhLnZhbHVlVG9RdWVyeVBhcmFtVHJhbnNmb3JtRm5cbiAgICAgICAgICA/IHRoaXMuX2ZpZWxkc1trZXldLmRhdGEudmFsdWVUb1F1ZXJ5UGFyYW1UcmFuc2Zvcm1Gbj8uKHZhbHVlKVxuICAgICAgICAgIDogdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICByZXBsYWNlVXJsLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVGb3JtQ2hhbmdlKGZvcmNlT3ZlcndyaXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCBjdXJyZW50VmFsID0gY2xvbmUodGhpcy5fY3VycmVudEZvcm1WYWx1ZSQudmFsdWUpO1xuICAgIGNvbnN0IG5ld1ZhbCA9IGNsb25lKHRoaXMuX2Zvcm1WYWx1ZSk7XG5cbiAgICBpZiAoZXF1YWwoY3VycmVudFZhbCwgbmV3VmFsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmb3JjZU92ZXJ3cml0ZSkge1xuICAgICAgdGhpcy5fbGFzdEZvcm1WYWx1ZSQubmV4dChuZXdWYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sYXN0Rm9ybVZhbHVlJC5uZXh0KGN1cnJlbnRWYWwpO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRGb3JtVmFsdWUkLm5leHQobmV3VmFsKTtcbiAgfVxufVxuIl19
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBU2hILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTNFLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQztBQUVqQyxNQUFNLE9BQU8sVUFBVTtJQUNyQixJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFtQixJQUEwQjtRQUExQixTQUFJLEdBQUosSUFBSSxDQUFzQjtJQUFHLENBQUM7Q0FDbEQ7QUFFRCxNQUFNLDJCQUEyQixHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUV4SCw4REFBOEQ7QUFDOUQsTUFBTSxPQUFPLFNBQVM7SUE0QnBCLElBQVksVUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUF1QixDQUFDO0lBQ3RELENBQUM7SUFzQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUMvRCxHQUFHLENBQUMsR0FBOEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVqRSxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUF1QixDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQW9CLE9BQVU7UUFBVixZQUFPLEdBQVAsT0FBTyxDQUFHO1FBbkZiLGNBQVMsR0FBRyxhQUFhLEVBQUUsQ0FBQztRQUM1Qix1QkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQzVDLFlBQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekIsb0JBQWUsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsbUJBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM5Qyx3QkFBbUIsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNqRCxVQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFFcEQsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFaEM7Ozs7Ozs7OztXQVNHO1FBQ00sU0FBSSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV0QixvQkFBZSxHQUFHLElBQUksZUFBZSxDQUEyQixJQUFJLENBQUMsQ0FBQztRQUN0RSx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBb0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBTTdFLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBeUI7WUFDdkUsYUFBYSxFQUFFLElBQUk7WUFDbkIsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUF1QjtTQUMzRCxDQUFDLENBQUM7UUFFTSxhQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsRDs7Ozs7Ozs7Ozs7OztXQWFHO1FBQ00sdUJBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQzlDLEdBQUcsQ0FDRCxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3BCLElBQUksMkJBQTJCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUN6RixPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQ3ZDLENBQ0YsQ0FBQztRQW1CQSx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQWlDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLFNBQVMsRUFBRSxFQUFFO2dCQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUVBQXVFLENBQUMsQ0FBQzthQUN2RjtZQUNELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXpCLElBQUksT0FBTyxFQUFFLGdCQUFnQixLQUFLLEtBQUssRUFBRTtZQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUM7Z0JBQ3JELFdBQVcsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVzthQUNsRCxDQUFDLENBQUM7WUFFSCxJQUFJLFVBQVUsRUFBRTtnQkFDZCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDOUI7U0FDRjtRQUVELEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDckcsSUFBSSxDQUNILFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFDekIsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUNuQzthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSw0QkFBNEIsR0FBYSxFQUFFLENBQUM7UUFDaEQsSUFBSSwwQkFBMEIsR0FBYSxFQUFFLENBQUM7UUFFOUMsSUFBSSxDQUFDLGtCQUFrQjthQUNwQixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDbkIsT0FBTztnQkFDTCxhQUFhLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO2dCQUNoRCxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQzthQUNsQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRTtZQUN0QyxJQUFJLE9BQU8sRUFBRSxrQkFBa0IsS0FBSyxLQUFLLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ2hFO1lBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWU7Z0JBQ3pDLENBQUMsQ0FBQyxLQUFLO2dCQUNQLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxJQUFJLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztZQUVyRSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUU3QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FDcEQsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN6RCxDQUFDO1lBRUYsSUFBSSw0QkFBNEIsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxDQUFDO2dCQUNwRCw0QkFBNEIsR0FBRyxFQUFFLENBQUM7YUFDbkM7WUFFRCxJQUFJLGNBQWMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEMsNEJBQTRCLEdBQUcsYUFBYSxDQUFDO2FBQzlDO1lBRUQsMEJBQTBCLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRTtZQUM1QyxJQUFJLDRCQUE0QixDQUFDLE1BQU07Z0JBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTVHLE1BQU0sY0FBYyxHQUFHLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM1RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFFekMsSUFBSSxTQUFTLENBQUMsc0JBQXNCLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNuRSxPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFFRCxPQUFPLFNBQVMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBRUgsMEJBQTBCLEdBQUcsRUFBRSxDQUFDO1lBRWhDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtnQkFDcEUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BFO1lBRUQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFaEcsT0FBTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRTtZQUN0QyxJQUFJLDRCQUE0QixDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUVoRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDbEIsYUFBYSxFQUFFLGFBQWEsSUFBSSxJQUFJO2dCQUNwQyxZQUFZLEVBQUUsWUFBWTthQUMzQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUN6QixTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQ25DO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFFZixJQUFJLE9BQU8sRUFBRSxnQkFBZ0IsS0FBSyxLQUFLLEVBQUU7WUFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQjtpQkFDeEMsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFDbEMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBRXRGLElBQUksZUFBZSxFQUFFO29CQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNuQztZQUNILENBQUMsQ0FBQyxDQUNIO2lCQUNBLFNBQVMsRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQixDQUFDLGFBQXVDLEVBQUUsWUFBK0I7UUFDckcsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBRTNCLEtBQUssTUFBTSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFFekQsSUFBSSxDQUFDLE1BQU07Z0JBQUUsU0FBUztZQUV0QixNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVyRSxLQUFLLE1BQU0saUJBQWlCLElBQUksa0JBQWtCLEVBQUU7Z0JBQ2xELElBQUksQ0FBQyxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDeEMsSUFBSSxTQUFTLEVBQUUsRUFBRTt3QkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsaUJBQWlCLGtEQUFrRCxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUN2RztvQkFFRCxTQUFTO2lCQUNWO2dCQUVELElBQ0UsYUFBYTtvQkFDYixZQUFZO29CQUNaLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQ3pFO29CQUNBLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUN0RSxNQUFNLHlCQUF5QixHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFFN0QsSUFBSSxLQUFLLENBQUMseUJBQXlCLEVBQUUseUJBQXlCLENBQUMsRUFBRTt3QkFDL0QsU0FBUztxQkFDVjtvQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMseUJBQXlCLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFFM0YsY0FBYyxHQUFHLElBQUksQ0FBQztvQkFFdEIsTUFBTTtpQkFDUDthQUNGO1NBQ0Y7UUFFRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELDhCQUE4QixDQUFDLE9BQWlEO1FBQzlFLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUU1QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV2QyxNQUFNLGlCQUFpQixHQUFHLEtBQUssS0FBSyxTQUFTLENBQUM7WUFFOUMsSUFBSSxpQkFBaUI7Z0JBQUUsU0FBUztZQUVoQyxNQUFNLGVBQWUsR0FBRyxLQUFLLEtBQUssbUJBQW1CLENBQUM7WUFFdEQsSUFBSSxlQUFlLEVBQUU7Z0JBQ25CLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RSxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUV2QixTQUFTO2FBQ1Y7WUFDRCxJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztZQUU5QixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUU7Z0JBQzNDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEU7aUJBQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQ3pELGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlDO2lCQUFNLElBQUksT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUMxRCxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMvQztZQUVELE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFNUUsSUFBSSxxQkFBcUI7Z0JBQUUsU0FBUztZQUVwQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLGVBQWUsR0FBRyxJQUFJLENBQUM7U0FDeEI7UUFFRCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQXdCLEVBQUUsT0FBK0I7UUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRW5DLElBQUksT0FBTyxFQUFFLFVBQVUsRUFBRTtZQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBaUMsRUFBRSxPQUErQjtRQUMzRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFckMsSUFBSSxPQUFPLEVBQUUsVUFBVSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEdBQVc7UUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVyQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxlQUFlLENBQUMsR0FBVyxFQUFFLEtBQWM7UUFDakQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFbEcsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssZUFBZSxDQUFDO0lBQ3hELENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDLEVBQStCLENBQUMsQ0FBQztRQUU3RCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3RDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE1BQU0sYUFBYSxHQUE0QixFQUFFLENBQUM7UUFFbEQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBRWxDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzthQUNqRTtpQkFBTTtnQkFDTCxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQzVCO1NBQ0Y7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRU8sc0JBQXNCLENBQUMsTUFBeUIsRUFBRSxVQUFvQjtRQUM1RSxNQUFNLFdBQVcsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFFNUUsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLGtEQUFrRCxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN4RixTQUFTO2FBQ1Y7WUFFRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUU7Z0JBQ3BGLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3pCO2lCQUFNO2dCQUNMLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEI7b0JBQ3BFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLEtBQUssQ0FBQztvQkFDOUQsQ0FBQyxDQUFDLEtBQUssQ0FBQzthQUNYO1NBQ0Y7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO2dCQUN4QixXQUFXO2dCQUNYLFVBQVU7YUFDWCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxjQUFjLEdBQUcsS0FBSztRQUM5QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdEMsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQzdCLE9BQU87U0FDUjtRQUVELElBQUksY0FBYyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN2QztRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lLCBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGluamVjdCwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEVUX1BST1BFUlRZX1JFTU9WRUQsIFJvdXRlclN0YXRlU2VydmljZSwgY2xvbmUsIGNyZWF0ZURlc3Ryb3ksIGVxdWFsIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIGRlYm91bmNlVGltZSwgbWFwLCBtZXJnZSwgb2YsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBRdWVyeUZpZWxkT3B0aW9ucyxcbiAgUXVlcnlGb3JtR3JvdXBDb250cm9scyxcbiAgUXVlcnlGb3JtT2JzZXJ2ZU9wdGlvbnMsXG4gIFF1ZXJ5Rm9ybVZhbHVlLFxuICBRdWVyeUZvcm1WYWx1ZUV2ZW50LFxuICBRdWVyeUZvcm1Xcml0ZU9wdGlvbnMsXG59IGZyb20gJy4vcXVlcnktZm9ybS50eXBlcyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1Ub0Jvb2xlYW4sIHRyYW5zZm9ybVRvTnVtYmVyIH0gZnJvbSAnLi9xdWVyeS1mb3JtLnV0aWxzJztcblxuY29uc3QgRVRfQVJSX1BSRUZJWCA9ICdFVF9BUlJfXyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUZpZWxkPFQ+IHtcbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5jb250cm9sO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IFF1ZXJ5RmllbGRPcHRpb25zPFQ+KSB7fVxufVxuXG5jb25zdCBJR05PUkVEX0ZJTFRFUl9DT1VOVF9GSUVMRFMgPSBbJ3BhZ2UnLCAnc2tpcCcsICd0YWtlJywgJ2xpbWl0JywgJ3NvcnQnLCAnc29ydEJ5JywgJ3NvcnRPcmRlcicsICdxdWVyeScsICdzZWFyY2gnXTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjbGFzcyBRdWVyeUZvcm08VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFF1ZXJ5RmllbGQ8YW55Pj4+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Vub2JzZXJ2ZVRyaWdnZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdFZhbHVlcyA9IHRoaXMuX2V4dHJhY3REZWZhdWx0VmFsdWVzKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlclN0YXRlU2VydmljZSA9IGluamVjdChSb3V0ZXJTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF96b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RpZFZhbHVlQ2hhbmdlcyQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIHByaXZhdGUgX2lzT2JzZXJ2aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX3NraXBOZXh0UmVzZXRzID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBhbmd1bGFyIGZvcm0gZ3JvdXAgdGhhdCBjb250YWlucyBhbGwgdGhlIGZpZWxkcy5cbiAgICpcbiAgICogKipEbyBub3QqKiB1c2UgYW55IG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbiB0aGlzIGZvcm0gZ3JvdXA6XG4gICAqIC0gYHNldFZhbHVlYDogVXNlIGBRdWVyeUZvcm0uc2V0VmFsdWVgIGluc3RlYWQuXG4gICAqIC0gYHBhdGNoVmFsdWVgOiBVc2UgYFF1ZXJ5Rm9ybS5wYXRjaFZhbHVlYCBpbnN0ZWFkLlxuICAgKiAtIGB2YWx1ZUNoYW5nZXNgOiBVc2UgYFF1ZXJ5Rm9ybS5jaGFuZ2VzJGAgaW5zdGVhZC5cbiAgICogLSBgdmFsdWVgOiBVc2UgYFF1ZXJ5Rm9ybS52YWx1ZWAgaW5zdGVhZC5cbiAgICogLSBgY29udHJvbHNgOiBVc2UgYFF1ZXJ5Rm9ybS5jb250cm9sc2AgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IGZvcm0gPSB0aGlzLl9zZXR1cEZvcm1Hcm91cCgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhc3RGb3JtVmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeUZvcm1WYWx1ZTxUPiB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50Rm9ybVZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlGb3JtVmFsdWU8VD4+KHRoaXMuX2Zvcm1WYWx1ZSk7XG5cbiAgcHJpdmF0ZSBnZXQgX2Zvcm1WYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkgYXMgUXVlcnlGb3JtVmFsdWU8VD47XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFuZ2VzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlGb3JtVmFsdWVFdmVudDxUPj4oe1xuICAgIHByZXZpb3VzVmFsdWU6IG51bGwsXG4gICAgY3VycmVudFZhbHVlOiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSBhcyBRdWVyeUZvcm1WYWx1ZTxUPixcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY2hhbmdlcyQgPSB0aGlzLl9jaGFuZ2VzJC5hc09ic2VydmFibGUoKTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBhY3RpdmUgZmlsdGVycy5cbiAgICpcbiAgICogRXhjbHVkZXMgdGhlIGZvbGxvd2luZyBmaWVsZHMgYnkgZGVmYXVsdDpcbiAgICogLSBgcGFnZWBcbiAgICogLSBgc2tpcGBcbiAgICogLSBgdGFrZWBcbiAgICogLSBgbGltaXRgXG4gICAqIC0gYHNvcnRgXG4gICAqIC0gYHNvcnRCeWBcbiAgICogLSBgc29ydE9yZGVyYFxuICAgKiAtIGBxdWVyeWBcbiAgICogLSBgc2VhcmNoYFxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aXZlRmlsdGVyQ291bnQkID0gdGhpcy5jaGFuZ2VzJC5waXBlKFxuICAgIG1hcChcbiAgICAgICh7IGN1cnJlbnRWYWx1ZSB9KSA9PlxuICAgICAgICBPYmplY3QuZW50cmllcyhjdXJyZW50VmFsdWUpXG4gICAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAoSUdOT1JFRF9GSUxURVJfQ09VTlRfRklFTERTLmluY2x1ZGVzKGtleSkgfHwgdGhpcy5fZmllbGRzW2tleV0uZGF0YS5za2lwSW5GaWx0ZXJDb3VudCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGVmYXVsdFZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigodikgPT4gdiA9PT0gZmFsc2UpLmxlbmd0aCxcbiAgICApLFxuICApO1xuXG4gIGdldCBjb250cm9scygpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VzJC52YWx1ZS5jdXJyZW50VmFsdWU7XG4gIH1cblxuICBnZXQgZGVmYXVsdEZvcm1WYWx1ZSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fZGVmYXVsdFZhbHVlcykucmVkdWNlKChhY2MsIFtrZXldKSA9PiB7XG4gICAgICBhY2Nba2V5IGFzIGtleW9mIFF1ZXJ5Rm9ybVZhbHVlPFQ+XSA9IHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpO1xuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFF1ZXJ5Rm9ybVZhbHVlPFQ+KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2ZpZWxkczogVCkge1xuICAgIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChRdWVyeUZvcm0pO1xuICB9XG5cbiAgb2JzZXJ2ZShvcHRpb25zPzogUXVlcnlGb3JtT2JzZXJ2ZU9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5faXNPYnNlcnZpbmcpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1F1ZXJ5Rm9ybS5vYnNlcnZlKCkgd2FzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzT2JzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIGlmIChvcHRpb25zPy5zeW5jT25OYXZpZ2F0aW9uICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgZGlkQ2hhbmdlcyA9IHRoaXMuc2V0Rm9ybVZhbHVlRnJvbVVybFF1ZXJ5UGFyYW1zKHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IHRoaXMuX3JvdXRlclN0YXRlU2VydmljZS5xdWVyeVBhcmFtcyxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGlkQ2hhbmdlcykge1xuICAgICAgICB0aGlzLl9oYW5kbGVGb3JtQ2hhbmdlKHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lcmdlKC4uLk9iamVjdC52YWx1ZXModGhpcy5fZmllbGRzKS5tYXAoKGZpZWxkKSA9PiBmaWVsZC5jb250cm9sLnZhbHVlQ2hhbmdlcyksIHRoaXMuX2RpZFZhbHVlQ2hhbmdlcyQpXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2hhbmRsZUZvcm1DaGFuZ2UoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91bm9ic2VydmVUcmlnZ2VyJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBsZXQgY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcDogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgY3VycmVudFVuaXF1ZUNoYW5nZWRGaWVsZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICB0aGlzLl9jdXJyZW50Rm9ybVZhbHVlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoY3VycmVudFZhbHVlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IGNsb25lKHRoaXMuX2xhc3RGb3JtVmFsdWUkLnZhbHVlKSxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogY2xvbmUoY3VycmVudFZhbHVlKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbnM/LndyaXRlVG9RdWVyeVBhcmFtcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N5bmNWaWFVcmxRdWVyeVBhcmFtcyhjdXJyZW50VmFsdWUsIG9wdGlvbnM/LnJlcGxhY2VVcmwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGRpZFJlc2V0VmFsdWVzID0gdGhpcy5fc2tpcE5leHRSZXNldHNcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogdGhpcy5faGFuZGxlUXVlcnlGb3JtUmVzZXRzKHByZXZpb3VzVmFsdWUgPz8gbnVsbCwgY3VycmVudFZhbHVlKTtcblxuICAgICAgICAgIHRoaXMuX3NraXBOZXh0UmVzZXRzID0gZmFsc2U7XG5cbiAgICAgICAgICBjb25zdCBjaGFuZ2VkRmllbGRzID0gT2JqZWN0LmtleXMoY3VycmVudFZhbHVlKS5maWx0ZXIoXG4gICAgICAgICAgICAoa2V5KSA9PiAhZXF1YWwocHJldmlvdXNWYWx1ZT8uW2tleV0sIGN1cnJlbnRWYWx1ZVtrZXldKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3AubGVuZ3RoKSB7XG4gICAgICAgICAgICBjaGFuZ2VkRmllbGRzLnB1c2goLi4uY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcCk7XG4gICAgICAgICAgICBjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRpZFJlc2V0VmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWRWYWx1ZUNoYW5nZXMkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICBjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wID0gY2hhbmdlZEZpZWxkcztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50VW5pcXVlQ2hhbmdlZEZpZWxkcyA9IFsuLi5uZXcgU2V0KGNoYW5nZWRGaWVsZHMpXTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkgPT4ge1xuICAgICAgICAgIGlmIChjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wLmxlbmd0aCkgcmV0dXJuIG9mKG51bGwpLnBpcGUobWFwKCgpID0+ICh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSkpO1xuXG4gICAgICAgICAgY29uc3QgZGVib3VuY2VWYWx1ZXMgPSBjdXJyZW50VW5pcXVlQ2hhbmdlZEZpZWxkcy5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGREYXRhID0gdGhpcy5fZmllbGRzW2tleV0uZGF0YTtcblxuICAgICAgICAgICAgaWYgKGZpZWxkRGF0YS5kaXNhYmxlRGVib3VuY2VJZkZhbHN5ID09PSB0cnVlICYmICFjdXJyZW50VmFsdWVba2V5XSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkRGF0YS5kZWJvdW5jZSA/PyBudWxsO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY3VycmVudFVuaXF1ZUNoYW5nZWRGaWVsZHMgPSBbXTtcblxuICAgICAgICAgIGlmIChkZWJvdW5jZVZhbHVlcy5zb21lKCh2KSA9PiB2ID09PSBudWxsKSB8fCAhZGVib3VuY2VWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCkucGlwZShtYXAoKCkgPT4gKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc2hvcnRlc3REZWJvdW5jZVRpbWUgPSBNYXRoLm1pbiguLi5kZWJvdW5jZVZhbHVlcy5maWx0ZXIoKHYpOiB2IGlzIG51bWJlciA9PiB2ICE9PSBudWxsKSk7XG5cbiAgICAgICAgICByZXR1cm4gdGltZXIoc2hvcnRlc3REZWJvdW5jZVRpbWUpLnBpcGUobWFwKCgpID0+ICh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSkpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSA9PiB7XG4gICAgICAgICAgaWYgKGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3AubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgICB0aGlzLl9jaGFuZ2VzJC5uZXh0KHtcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHByZXZpb3VzVmFsdWUgPz8gbnVsbCxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogY3VycmVudFZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vub2JzZXJ2ZVRyaWdnZXIkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIGlmIChvcHRpb25zPy5zeW5jT25OYXZpZ2F0aW9uICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5fcm91dGVyU3RhdGVTZXJ2aWNlLnF1ZXJ5UGFyYW1DaGFuZ2VzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bm9ic2VydmVUcmlnZ2VyJCksXG4gICAgICAgICAgdGFwKChjaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaWRWYWx1ZUNoYW5nZXMgPSB0aGlzLnNldEZvcm1WYWx1ZUZyb21VcmxRdWVyeVBhcmFtcyh7IHF1ZXJ5UGFyYW1zOiBjaGFuZ2VzIH0pO1xuXG4gICAgICAgICAgICBpZiAoZGlkVmFsdWVDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2RpZFZhbHVlQ2hhbmdlcyQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlUXVlcnlGb3JtUmVzZXRzKHByZXZpb3VzVmFsdWU6IFF1ZXJ5Rm9ybVZhbHVlPFQ+IHwgbnVsbCwgY3VycmVudFZhbHVlOiBRdWVyeUZvcm1WYWx1ZTxUPikge1xuICAgIGxldCBkaWRSZXNldFZhbHVlcyA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBmb3JtRmllbGRLZXkgaW4gdGhpcy5fZmllbGRzKSB7XG4gICAgICBjb25zdCByZXNldHMgPSB0aGlzLl9maWVsZHNbZm9ybUZpZWxkS2V5XS5kYXRhLmlzUmVzZXRCeTtcblxuICAgICAgaWYgKCFyZXNldHMpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCByZXNldENvbmRpdGlvbktleXMgPSBBcnJheS5pc0FycmF5KHJlc2V0cykgPyByZXNldHMgOiBbcmVzZXRzXTtcblxuICAgICAgZm9yIChjb25zdCByZXNldENvbmRpdGlvbktleSBvZiByZXNldENvbmRpdGlvbktleXMpIHtcbiAgICAgICAgaWYgKCEocmVzZXRDb25kaXRpb25LZXkgaW4gdGhpcy5fZmllbGRzKSkge1xuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBUaGUgZmllbGQgXCIke3Jlc2V0Q29uZGl0aW9uS2V5fVwiIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBRdWVyeUZvcm0uIElzIGl0IGEgdHlwbz9gLCB0aGlzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2aW91c1ZhbHVlICYmXG4gICAgICAgICAgY3VycmVudFZhbHVlICYmXG4gICAgICAgICAgIWVxdWFsKHByZXZpb3VzVmFsdWVbcmVzZXRDb25kaXRpb25LZXldLCBjdXJyZW50VmFsdWVbcmVzZXRDb25kaXRpb25LZXldKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVGb3JLZXlUb1Jlc2V0ID0gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGZvcm1GaWVsZEtleSk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlRm9yS2V5VG9SZXNldCA9IGN1cnJlbnRWYWx1ZVtmb3JtRmllbGRLZXldO1xuXG4gICAgICAgICAgaWYgKGVxdWFsKGRlZmF1bHRWYWx1ZUZvcktleVRvUmVzZXQsIGN1cnJlbnRWYWx1ZUZvcktleVRvUmVzZXQpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbZm9ybUZpZWxkS2V5XS5zZXRWYWx1ZShkZWZhdWx0VmFsdWVGb3JLZXlUb1Jlc2V0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cbiAgICAgICAgICBkaWRSZXNldFZhbHVlcyA9IHRydWU7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkaWRSZXNldFZhbHVlcztcbiAgfVxuXG4gIHVub2JzZXJ2ZSgpIHtcbiAgICB0aGlzLl91bm9ic2VydmVUcmlnZ2VyJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgc2V0Rm9ybVZhbHVlRnJvbVVybFF1ZXJ5UGFyYW1zKG9wdGlvbnM6IHsgcXVlcnlQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0pIHtcbiAgICBsZXQgZGlkVmFsdWVDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9maWVsZHMpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMucXVlcnlQYXJhbXNba2V5XTtcblxuICAgICAgY29uc3QgdmFsdWVEb2VzTm90RXhpc3QgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodmFsdWVEb2VzTm90RXhpc3QpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCB2YWx1ZUdvdFJlbW92ZWQgPSB2YWx1ZSA9PT0gRVRfUFJPUEVSVFlfUkVNT1ZFRDtcblxuICAgICAgaWYgKHZhbHVlR290UmVtb3ZlZCkge1xuICAgICAgICBmaWVsZC5jb250cm9sLnNldFZhbHVlKHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIGRpZFZhbHVlQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgZGVzZXJpYWxpemVkVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgaWYgKGZpZWxkLmRhdGEucXVlcnlQYXJhbVRvVmFsdWVUcmFuc2Zvcm1Gbikge1xuICAgICAgICBkZXNlcmlhbGl6ZWRWYWx1ZSA9IGZpZWxkLmRhdGEucXVlcnlQYXJhbVRvVmFsdWVUcmFuc2Zvcm1Gbih2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5KSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZGVzZXJpYWxpemVkVmFsdWUgPSB0cmFuc2Zvcm1Ub051bWJlcih2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5KSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGRlc2VyaWFsaXplZFZhbHVlID0gdHJhbnNmb3JtVG9Cb29sZWFuKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWVJc0VxdWFsVG9DdXJyZW50ID0gZXF1YWwoZGVzZXJpYWxpemVkVmFsdWUsIGZpZWxkLmNvbnRyb2wudmFsdWUpO1xuXG4gICAgICBpZiAodmFsdWVJc0VxdWFsVG9DdXJyZW50KSBjb250aW51ZTtcblxuICAgICAgZmllbGQuY29udHJvbC5zZXRWYWx1ZShkZXNlcmlhbGl6ZWRWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgZGlkVmFsdWVDaGFuZ2VzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlkVmFsdWVDaGFuZ2VzO1xuICB9XG5cbiAgc2V0VmFsdWUodmFsdWU6IFF1ZXJ5Rm9ybVZhbHVlPFQ+LCBvcHRpb25zPzogUXVlcnlGb3JtV3JpdGVPcHRpb25zKSB7XG4gICAgdGhpcy5mb3JtLnNldFZhbHVlKHZhbHVlLCBvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zPy5za2lwUmVzZXRzKSB7XG4gICAgICB0aGlzLl9za2lwTmV4dFJlc2V0cyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcGF0Y2hWYWx1ZSh2YWx1ZTogUGFydGlhbDxRdWVyeUZvcm1WYWx1ZTxUPj4sIG9wdGlvbnM/OiBRdWVyeUZvcm1Xcml0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh2YWx1ZSwgb3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucz8uc2tpcFJlc2V0cykge1xuICAgICAgdGhpcy5fc2tpcE5leHRSZXNldHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldERlZmF1bHRWYWx1ZShrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuX2RlZmF1bHRWYWx1ZXNba2V5XTtcblxuICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuc3RhcnRzV2l0aChFVF9BUlJfUFJFRklYKSkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsLnNsaWNlKEVUX0FSUl9QUkVGSVgubGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbCA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEZWZhdWx0VmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBgJHtFVF9BUlJfUFJFRklYfSR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWAgOiB2YWx1ZTtcblxuICAgIHJldHVybiB0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5KSA9PT0gbm9ybWFsaXplZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBGb3JtR3JvdXAoKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9IGFzIFF1ZXJ5Rm9ybUdyb3VwQ29udHJvbHM8VD4pO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBmaWVsZF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fZmllbGRzKSkge1xuICAgICAgZ3JvdXAuYWRkQ29udHJvbChrZXksIGZpZWxkLmNvbnRyb2wpO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuXG4gIHByaXZhdGUgX2V4dHJhY3REZWZhdWx0VmFsdWVzKCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9maWVsZHMpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkLmNvbnRyb2wudmFsdWU7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBkZWZhdWx0VmFsdWVzW2tleV0gPSBgJHtFVF9BUlJfUFJFRklYfSR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0VmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlcztcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNWaWFVcmxRdWVyeVBhcmFtcyh2YWx1ZXM6IFF1ZXJ5Rm9ybVZhbHVlPFQ+LCByZXBsYWNlVXJsPzogYm9vbGVhbikge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi5jbG9uZSh0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcykgfTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlcykpIHtcbiAgICAgIGlmICghdGhpcy5fZmllbGRzW2tleV0pIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBUaGUgZmllbGQgXCIke2tleX1cIiBpcyBub3QgZGVmaW5lZCBpbiB0aGUgUXVlcnlGb3JtLiBJcyBpdCBhIHR5cG8/YCwgdGhpcyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNEZWZhdWx0VmFsdWUoa2V5LCB2YWx1ZSkgfHwgdGhpcy5fZmllbGRzW2tleV0uZGF0YS5hcHBlbmRUb1VybCA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVsZXRlIHF1ZXJ5UGFyYW1zW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gdGhpcy5fZmllbGRzW2tleV0uZGF0YS52YWx1ZVRvUXVlcnlQYXJhbVRyYW5zZm9ybUZuXG4gICAgICAgICAgPyB0aGlzLl9maWVsZHNba2V5XS5kYXRhLnZhbHVlVG9RdWVyeVBhcmFtVHJhbnNmb3JtRm4/Lih2YWx1ZSlcbiAgICAgICAgICA6IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgcmVwbGFjZVVybCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlRm9ybUNoYW5nZShmb3JjZU92ZXJ3cml0ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgY3VycmVudFZhbCA9IGNsb25lKHRoaXMuX2N1cnJlbnRGb3JtVmFsdWUkLnZhbHVlKTtcbiAgICBjb25zdCBuZXdWYWwgPSBjbG9uZSh0aGlzLl9mb3JtVmFsdWUpO1xuXG4gICAgaWYgKGVxdWFsKGN1cnJlbnRWYWwsIG5ld1ZhbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZm9yY2VPdmVyd3JpdGUpIHtcbiAgICAgIHRoaXMuX2xhc3RGb3JtVmFsdWUkLm5leHQobmV3VmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGFzdEZvcm1WYWx1ZSQubmV4dChjdXJyZW50VmFsKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50Rm9ybVZhbHVlJC5uZXh0KG5ld1ZhbCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUXVlcnlGaWVsZCB9IGZyb20gJy4vcXVlcnktZm9ybSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGaWVsZE9wdGlvbnM8VCA9IHVua25vd24+IHtcbiAgLyoqXG4gICAqIERlYm91bmNlIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgZGVib3VuY2U/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUXVlcnlGaWVsZCB9IGZyb20gJy4vcXVlcnktZm9ybSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGaWVsZE9wdGlvbnM8VCA9IHVua25vd24+IHtcbiAgLyoqXG4gICAqIERlYm91bmNlIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgZGVib3VuY2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqICBXaGV0aGVyIHRoZSBkZWJvdW5jZSBzaG91bGQgbm90IGJlIGFwcGxpZWQgaWYgdGhlIHZhbHVlIGlzIGZhbHN5LlxuICAgKiAgVGhpcyBpcyB1c2VmdWwgZm9yIGZpZWxkcyB0aGF0IGNhbiBiZSBjbGVhcmVkIGxpa2UgYSBzZWFyY2ggZmllbGQuXG4gICAqXG4gICAqICBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZURlYm91bmNlSWZGYWxzeT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgZm9yIHRoZSBmaWVsZC5cbiAgICovXG4gIGNvbnRyb2w6IEZvcm1Db250cm9sPFQgfCBudWxsPjtcblxuICAvKipcbiAgICogQXBwZW5kIHRoZSBmaWVsZCdzIHZhbHVlIHRvIHRoZSB1cmwuXG4gICAqXG4gICAqIFRoZSBmaWVsZCB3b250IGJlIGFwcGVuZGVkIHRvIHRoZSB1cmwgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICogLSBJdCBpcyB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgKiAtIEl0IGlzIGFuIGVtcHR5IHN0cmluZ1xuICAgKiAtIEl0IGlzIGBudWxsYFxuICAgKiAtIEl0IGlzIGB1bmRlZmluZWRgXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGFwcGVuZFRvVXJsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVzZXQgdGhlIGZpZWxkJ3MgdmFsdWUgdG8gdGhlIGRlZmF1bHQgdmFsdWUgaWYgb25lIG9yIG1vcmUgb2YgdGhlIHNwZWNpZmllZCBmaWVsZHMgYXJlIGNoYW5nZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEdpdmVuIHRoaXMgZmllbGQgaXMgYSBgcGFnZWAgZmllbGQsIHRoZSBmaWVsZCB3aWxsIGJlIHJlc2V0IGlmIHRoZSBgbGltaXRgLCBgcXVlcnlgIG9yIGBzZWFyY2hgIGZpZWxkcyBhcmUgY2hhbmdlZC5cbiAgICogWydsaW1pdCcsICdxdWVyeScsICdzZWFyY2gnXVxuICAgKi9cbiAgaXNSZXNldEJ5Pzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZpZWxkIHNob3VsZCBjaGFuZ2UgdGhlIGNvdW50IG9mIGN1cnJlbnQgYWN0aXZlIGZpbHRlcnMuXG4gICAqXG4gICAqIFdpbGwgYmUgYHRydWVgIGZvciB0aGVzZSBjb21tb24gZmllbGRzOlxuICAgKiAtIGBwYWdlYFxuICAgKiAtIGBza2lwYFxuICAgKiAtIGB0YWtlYFxuICAgKiAtIGBsaW1pdGBcbiAgICogLSBgc29ydGBcbiAgICogLSBgc29ydEJ5YFxuICAgKiAtIGBzb3J0T3JkZXJgXG4gICAqIC0gYHF1ZXJ5YFxuICAgKiAtIGBzZWFyY2hgXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwSW5GaWx0ZXJDb3VudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB0cmFuc2Zvcm1zIHRoZSB0aGUgdmFsdWUgZ290dGVuIGZyb20gdGhlIHVybCBxdWVyeSBwYXJhbXMgdG8gYSB2YWx1ZSByZXF1aXJlZCBieSB0aGUgZmllbGQuXG4gICAqIEUuZy4gZm9yIGEgbnVtYmVyIGZpZWxkLCB0aGUgdmFsdWUgZnJvbSB0aGUgdXJsIHF1ZXJ5IHBhcmFtcyBpcyBhIHN0cmluZywgYnV0IHRoZSBmaWVsZCByZXF1aXJlcyBhIG51bWJlci5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBjb21tb24gdHJhbnNmb3JtYXRpb25zIGFyZSBhbHJlYWR5IGltcGxlbWVudGVkOlxuICAgKiAtIGB0cmFuc2Zvcm1Ub1N0cmluZ2BcbiAgICogLSBgdHJhbnNmb3JtVG9TdHJpbmdBcnJheWBcbiAgICogLSBgdHJhbnNmb3JtVG9OdW1iZXJgXG4gICAqIC0gYHRyYW5zZm9ybVRvTnVtYmVyQXJyYXlgXG4gICAqIC0gYHRyYW5zZm9ybVRvQm9vbGVhbmBcbiAgICogLSBgdHJhbnNmb3JtVG9Cb29sZWFuQXJyYXlgXG4gICAqIC0gYHRyYW5zZm9ybVRvRGF0ZWAgKGV4cGVjdHMgYSBzdHJpbmcgaW4gdGhlIGRlZmF1bHQganMgZm9ybWF0KVxuICAgKiAtIGB0cmFuc2Zvcm1Ub0RhdGVBcnJheWAgKGV4cGVjdHMgc3RyaW5ncyBpbiB0aGUgZGVmYXVsdCBqcyBmb3JtYXQpXG4gICAqIC0gYHRyYW5zZm9ybVRvU29ydGAgKGV4cGVjdHMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdCBgZmllbGQ6ZGlyZWN0aW9uYClcbiAgICovXG4gIHF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm4/OiAodmFsOiB1bmtub3duKSA9PiBUIHwgbnVsbDtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHRyYW5zZm9ybXMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB0byBhIHZhbHVlIHRoYXQgY2FuIGJlIGFwcGVuZGVkIHRvIHRoZSB1cmwgcXVlcnkgcGFyYW1zLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGNvbW1vbiB0cmFuc2Zvcm1hdGlvbnMgYXJlIGFscmVhZHkgaW1wbGVtZW50ZWQ6XG4gICAqIC0gYHRyYW5zZm9ybVRvU29ydFF1ZXJ5UGFyYW1gIChyZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIGBmaWVsZGAgYW5kIGBkaXJlY3Rpb25gIHByb3BlcnRpZXMpXG4gICAqL1xuICB2YWx1ZVRvUXVlcnlQYXJhbVRyYW5zZm9ybUZuPzogKHZhbDogVCB8IG51bGwpID0+IHVua25vd247XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBRdWVyeUZvcm1Hcm91cENvbnRyb2xzPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBRdWVyeUZpZWxkPGFueT4+PiA9IHtcbiAgW1Byb3BlcnR5IGluIGtleW9mIFRdOiBUW1Byb3BlcnR5XVsnY29udHJvbCddO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIFF1ZXJ5Rm9ybVZhbHVlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBRdWVyeUZpZWxkPGFueT4+PiA9IHtcbiAgW1Byb3BlcnR5IGluIGtleW9mIFRdOiBUW1Byb3BlcnR5XVsnY29udHJvbCddWyd2YWx1ZSddO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUZvcm1PYnNlcnZlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb3JtIHZhbHVlIHNob3VsZCBiZSBzeW5jZWQgdG8gdGhlIHVybCBxdWVyeSBwYXJhbXMuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHdyaXRlVG9RdWVyeVBhcmFtcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvcm0gdmFsdWUgc2hvdWxkIGJlIHVwZGF0ZWQgd2hlbiB0aGUgdXJsIHF1ZXJ5IHBhcmFtcyBjaGFuZ2UuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHN5bmNPbk5hdmlnYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0aGUgbmF2aWdhdGlvbiB3aWxsIG5vdCBjcmVhdGUgYSBuZXcgZW50cnkgaW4gdGhlIGJyb3dzZXIncyBoaXN0b3J5LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVwbGFjZVVybD86IGJvb2xlYW47XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Rm9ybVZhbHVlRXZlbnQ8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFF1ZXJ5RmllbGQ8YW55Pj4+IHtcbiAgcHJldmlvdXNWYWx1ZTogUXVlcnlGb3JtVmFsdWU8VD4gfCBudWxsO1xuICBjdXJyZW50VmFsdWU6IFF1ZXJ5Rm9ybVZhbHVlPFQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Rm9ybVdyaXRlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIGVhY2ggY2hhbmdlIG9ubHkgYWZmZWN0cyB0aGlzIGNvbnRyb2wsIGFuZCBub3QgaXRzIHBhcmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG9ubHlTZWxmPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiB0cnVlIG9yIG5vdCBzdXBwbGllZCAodGhlIGRlZmF1bHQpLCBib3RoIHRoZSBgc3RhdHVzQ2hhbmdlc2AgYW5kIGB2YWx1ZUNoYW5nZXNgXG4gICAqIG9ic2VydmFibGVzIGVtaXQgZXZlbnRzIHdpdGggdGhlIGxhdGVzdCBzdGF0dXMgYW5kIHZhbHVlIHdoZW4gdGhlIGNvbnRyb2wgdmFsdWUgaXMgdXBkYXRlZC5cbiAgICogV2hlbiBmYWxzZSwgbm8gZXZlbnRzIGFyZSBlbWl0dGVkLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBgcmVzZXRCeWAgY29uZGl0aW9ucyB3aWxsIGJlIGlnbm9yZWQgZm9yIHRoaXMgd3JpdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwUmVzZXRzPzogYm9vbGVhbjtcbn1cbiJdfQ==
|