@angular/common 17.1.2 → 17.2.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/http/src/client.mjs +3 -3
- package/esm2022/http/src/fetch.mjs +3 -3
- package/esm2022/http/src/interceptor.mjs +3 -3
- package/esm2022/http/src/jsonp.mjs +6 -6
- package/esm2022/http/src/module.mjs +12 -12
- package/esm2022/http/src/xhr.mjs +3 -3
- package/esm2022/http/src/xsrf.mjs +6 -6
- package/esm2022/http/testing/src/backend.mjs +3 -3
- package/esm2022/http/testing/src/module.mjs +4 -4
- package/esm2022/src/common.mjs +1 -1
- package/esm2022/src/common_module.mjs +4 -4
- package/esm2022/src/directives/ng_class.mjs +3 -3
- package/esm2022/src/directives/ng_component_outlet.mjs +3 -3
- package/esm2022/src/directives/ng_for_of.mjs +3 -3
- package/esm2022/src/directives/ng_if.mjs +3 -3
- package/esm2022/src/directives/ng_optimized_image/image_loaders/image_loader.mjs +1 -1
- package/esm2022/src/directives/ng_optimized_image/index.mjs +1 -1
- package/esm2022/src/directives/ng_optimized_image/lcp_image_observer.mjs +3 -3
- package/esm2022/src/directives/ng_optimized_image/ng_optimized_image.mjs +130 -5
- package/esm2022/src/directives/ng_optimized_image/preconnect_link_checker.mjs +3 -3
- package/esm2022/src/directives/ng_optimized_image/preload-link-creator.mjs +3 -3
- package/esm2022/src/directives/ng_plural.mjs +6 -6
- package/esm2022/src/directives/ng_style.mjs +3 -3
- package/esm2022/src/directives/ng_switch.mjs +9 -9
- package/esm2022/src/directives/ng_template_outlet.mjs +3 -3
- package/esm2022/src/errors.mjs +1 -1
- package/esm2022/src/i18n/localization.mjs +6 -6
- package/esm2022/src/location/hash_location_strategy.mjs +3 -3
- package/esm2022/src/location/location.mjs +3 -3
- package/esm2022/src/location/location_strategy.mjs +6 -6
- package/esm2022/src/location/platform_location.mjs +6 -6
- package/esm2022/src/navigation/navigation_types.mjs +9 -0
- package/esm2022/src/navigation/platform_navigation.mjs +4 -4
- package/esm2022/src/pipes/async_pipe.mjs +3 -3
- package/esm2022/src/pipes/case_conversion_pipes.mjs +9 -9
- package/esm2022/src/pipes/date_pipe.mjs +3 -3
- package/esm2022/src/pipes/i18n_plural_pipe.mjs +3 -3
- package/esm2022/src/pipes/i18n_select_pipe.mjs +3 -3
- package/esm2022/src/pipes/json_pipe.mjs +3 -3
- package/esm2022/src/pipes/keyvalue_pipe.mjs +3 -3
- package/esm2022/src/pipes/number_pipe.mjs +9 -9
- package/esm2022/src/pipes/slice_pipe.mjs +3 -3
- package/esm2022/src/private_export.mjs +2 -1
- package/esm2022/src/version.mjs +1 -1
- package/esm2022/testing/src/location_mock.mjs +3 -3
- package/esm2022/testing/src/mock_location_strategy.mjs +3 -3
- package/esm2022/testing/src/mock_platform_location.mjs +83 -5
- package/esm2022/testing/src/navigation/fake_navigation.mjs +1 -3
- package/esm2022/testing/src/navigation/navigation_types.mjs +9 -0
- package/esm2022/testing/src/navigation/provide_fake_platform_navigation.mjs +7 -4
- package/esm2022/testing/src/private_export.mjs +9 -0
- package/esm2022/testing/src/testing.mjs +2 -1
- package/esm2022/upgrade/src/location_upgrade_module.mjs +4 -4
- package/fesm2022/common.mjs +255 -117
- package/fesm2022/common.mjs.map +1 -1
- package/fesm2022/http/testing.mjs +8 -8
- package/fesm2022/http.mjs +37 -37
- package/fesm2022/testing.mjs +986 -228
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/upgrade.mjs +5 -5
- package/http/index.d.ts +1 -1
- package/http/testing/index.d.ts +1 -1
- package/index.d.ts +197 -2
- package/package.json +2 -2
- package/testing/index.d.ts +6 -1
- package/upgrade/index.d.ts +1 -1
|
@@ -1,5 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { DOCUMENT, ɵPlatformNavigation as PlatformNavigation, } from '@angular/common';
|
|
9
|
+
import { Inject, inject, Injectable, InjectionToken, Optional } from '@angular/core';
|
|
2
10
|
import { Subject } from 'rxjs';
|
|
11
|
+
import { FakeNavigation } from './navigation/fake_navigation';
|
|
3
12
|
import * as i0 from "@angular/core";
|
|
4
13
|
/**
|
|
5
14
|
* Parser from https://tools.ietf.org/html/rfc3986#appendix-B
|
|
@@ -207,10 +216,10 @@ export class MockPlatformLocation {
|
|
|
207
216
|
});
|
|
208
217
|
}
|
|
209
218
|
}
|
|
210
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1
|
|
211
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1
|
|
219
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0-next.1", ngImport: i0, type: MockPlatformLocation, deps: [{ token: MOCK_PLATFORM_LOCATION_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
220
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.0-next.1", ngImport: i0, type: MockPlatformLocation }); }
|
|
212
221
|
}
|
|
213
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1
|
|
222
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0-next.1", ngImport: i0, type: MockPlatformLocation, decorators: [{
|
|
214
223
|
type: Injectable
|
|
215
224
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
216
225
|
type: Inject,
|
|
@@ -218,4 +227,73 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
218
227
|
}, {
|
|
219
228
|
type: Optional
|
|
220
229
|
}] }] });
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19wbGF0Zm9ybV9sb2NhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi90ZXN0aW5nL3NyYy9tb2NrX3BsYXRmb3JtX2xvY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQzs7QUFFN0I7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sUUFBUSxHQUFHLCtEQUErRCxDQUFDO0FBRWpGLFNBQVMsUUFBUSxDQUFDLE1BQWMsRUFBRSxRQUFnQjtJQUNoRCxNQUFNLGNBQWMsR0FBRyx3QkFBd0IsQ0FBQztJQUNoRCxJQUFJLFVBQThCLENBQUM7SUFFbkMsNkZBQTZGO0lBQzdGLHdEQUF3RDtJQUN4RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2pDLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsSUFBSSxTQU9ILENBQUM7SUFDRixJQUFJLENBQUM7UUFDSCxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLE1BQU0sZUFBZSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FB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QkFEaEMsVUFBVTs7MEJBaUJOLE1BQU07MkJBQUMsNkJBQTZCOzswQkFBRyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7TG9jYXRpb25DaGFuZ2VFdmVudCwgTG9jYXRpb25DaGFuZ2VMaXN0ZW5lciwgUGxhdGZvcm1Mb2NhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBQYXJzZXIgZnJvbSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNhcHBlbmRpeC1CXG4gKiBeKChbXjovPyNdKyk6KT8oLy8oW14vPyNdKikpPyhbXj8jXSopKFxcPyhbXiNdKikpPygjKC4qKSk/XG4gKiAgMTIgICAgICAgICAgICAzICA0ICAgICAgICAgIDUgICAgICAgNiAgNyAgICAgICAgOCA5XG4gKlxuICogRXhhbXBsZTogaHR0cDovL3d3dy5pY3MudWNpLmVkdS9wdWIvaWV0Zi91cmkvI1JlbGF0ZWRcbiAqXG4gKiBSZXN1bHRzIGluOlxuICpcbiAqICQxID0gaHR0cDpcbiAqICQyID0gaHR0cFxuICogJDMgPSAvL3d3dy5pY3MudWNpLmVkdVxuICogJDQgPSB3d3cuaWNzLnVjaS5lZHVcbiAqICQ1ID0gL3B1Yi9pZXRmL3VyaS9cbiAqICQ2ID0gPHVuZGVmaW5lZD5cbiAqICQ3ID0gPHVuZGVmaW5lZD5cbiAqICQ4ID0gI1JlbGF0ZWRcbiAqICQ5ID0gUmVsYXRlZFxuICovXG5jb25zdCB1cmxQYXJzZSA9IC9eKChbXjpcXC8/I10rKTopPyhcXC9cXC8oW15cXC8/I10qKSk/KFtePyNdKikoXFw/KFteI10qKSk/KCMoLiopKT8vO1xuXG5mdW5jdGlvbiBwYXJzZVVybCh1cmxTdHI6IHN0cmluZywgYmFzZUhyZWY6IHN0cmluZykge1xuICBjb25zdCB2ZXJpZnlQcm90b2NvbCA9IC9eKChodHRwW3NdP3xmdHApOlxcL1xcLykvO1xuICBsZXQgc2VydmVyQmFzZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8vIFVSTCBjbGFzcyByZXF1aXJlcyBmdWxsIFVSTC4gSWYgdGhlIFVSTCBzdHJpbmcgZG9lc24ndCBzdGFydCB3aXRoIHByb3RvY29sLCB3ZSBuZWVkIHRvIGFkZFxuICAvLyBhbiBhcmJpdHJhcnkgYmFzZSBVUkwgd2hpY2ggY2FuIGJlIHJlbW92ZWQgYWZ0ZXJ3YXJkLlxuICBpZiAoIXZlcmlmeVByb3RvY29sLnRlc3QodXJsU3RyKSkge1xuICAgIHNlcnZlckJhc2UgPSAnaHR0cDovL2VtcHR5LmNvbS8nO1xuICB9XG4gIGxldCBwYXJzZWRVcmw6IHtcbiAgICBwcm90b2NvbDogc3RyaW5nO1xuICAgIGhvc3RuYW1lOiBzdHJpbmc7XG4gICAgcG9ydDogc3RyaW5nO1xuICAgIHBhdGhuYW1lOiBzdHJpbmc7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgaGFzaDogc3RyaW5nO1xuICB9O1xuICB0cnkge1xuICAgIHBhcnNlZFVybCA9IG5ldyBVUkwodXJsU3RyLCBzZXJ2ZXJCYXNlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHVybFBhcnNlLmV4ZWMoc2VydmVyQmFzZSB8fCAnJyArIHVybFN0cik7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVUkw6ICR7dXJsU3RyfSB3aXRoIGJhc2U6ICR7YmFzZUhyZWZ9YCk7XG4gICAgfVxuICAgIGNvbnN0IGhvc3RTcGxpdCA9IHJlc3VsdFs0XS5zcGxpdCgnOicpO1xuICAgIHBhcnNlZFVybCA9IHtcbiAgICAgIHByb3RvY29sOiByZXN1bHRbMV0sXG4gICAgICBob3N0bmFtZTogaG9zdFNwbGl0WzBdLFxuICAgICAgcG9ydDogaG9zdFNwbGl0WzFdIHx8ICcnLFxuICAgICAgcGF0aG5hbWU6IHJlc3VsdFs1XSxcbiAgICAgIHNlYXJjaDogcmVzdWx0WzZdLFxuICAgICAgaGFzaDogcmVzdWx0WzhdLFxuICAgIH07XG4gIH1cbiAgaWYgKHBhcnNlZFVybC5wYXRobmFtZSAmJiBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZihiYXNlSHJlZikgPT09IDApIHtcbiAgICBwYXJzZWRVcmwucGF0aG5hbWUgPSBwYXJzZWRVcmwucGF0aG5hbWUuc3Vic3RyaW5nKGJhc2VIcmVmLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBob3N0bmFtZTogKCFzZXJ2ZXJCYXNlICYmIHBhcnNlZFVybC5ob3N0bmFtZSkgfHwgJycsXG4gICAgcHJvdG9jb2w6ICghc2VydmVyQmFzZSAmJiBwYXJzZWRVcmwucHJvdG9jb2wpIHx8ICcnLFxuICAgIHBvcnQ6ICghc2VydmVyQmFzZSAmJiBwYXJzZWRVcmwucG9ydCkgfHwgJycsXG4gICAgcGF0aG5hbWU6IHBhcnNlZFVybC5wYXRobmFtZSB8fCAnLycsXG4gICAgc2VhcmNoOiBwYXJzZWRVcmwuc2VhcmNoIHx8ICcnLFxuICAgIGhhc2g6IHBhcnNlZFVybC5oYXNoIHx8ICcnLFxuICB9O1xufVxuXG4vKipcbiAqIE1vY2sgcGxhdGZvcm0gbG9jYXRpb24gY29uZmlnXG4gKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vY2tQbGF0Zm9ybUxvY2F0aW9uQ29uZmlnIHtcbiAgc3RhcnRVcmw/OiBzdHJpbmc7XG4gIGFwcEJhc2VIcmVmPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3ZpZGVyIGZvciBtb2NrIHBsYXRmb3JtIGxvY2F0aW9uIGNvbmZpZ1xuICpcbiAqIEBwdWJsaWNBcGlcbiAqL1xuZXhwb3J0IGNvbnN0IE1PQ0tfUExBVEZPUk1fTE9DQVRJT05fQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPE1vY2tQbGF0Zm9ybUxvY2F0aW9uQ29uZmlnPihcbiAgJ01PQ0tfUExBVEZPUk1fTE9DQVRJT05fQ09ORklHJyxcbik7XG5cbi8qKlxuICogTW9jayBpbXBsZW1lbnRhdGlvbiBvZiBVUkwgc3RhdGUuXG4gKlxuICogQHB1YmxpY0FwaVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9ja1BsYXRmb3JtTG9jYXRpb24gaW1wbGVtZW50cyBQbGF0Zm9ybUxvY2F0aW9uIHtcbiAgcHJpdmF0ZSBiYXNlSHJlZjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgaGFzaFVwZGF0ZSA9IG5ldyBTdWJqZWN0PExvY2F0aW9uQ2hhbmdlRXZlbnQ+KCk7XG4gIHByaXZhdGUgcG9wU3RhdGVTdWJqZWN0ID0gbmV3IFN1YmplY3Q8TG9jYXRpb25DaGFuZ2VFdmVudD4oKTtcbiAgcHJpdmF0ZSB1cmxDaGFuZ2VJbmRleDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSB1cmxDaGFuZ2VzOiB7XG4gICAgaG9zdG5hbWU6IHN0cmluZztcbiAgICBwcm90b2NvbDogc3RyaW5nO1xuICAgIHBvcnQ6IHN0cmluZztcbiAgICBwYXRobmFtZTogc3RyaW5nO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICAgIGhhc2g6IHN0cmluZztcbiAgICBzdGF0ZTogdW5rbm93bjtcbiAgfVtdID0gW3tob3N0bmFtZTogJycsIHByb3RvY29sOiAnJywgcG9ydDogJycsIHBhdGhuYW1lOiAnLycsIHNlYXJjaDogJycsIGhhc2g6ICcnLCBzdGF0ZTogbnVsbH1dO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTU9DS19QTEFURk9STV9MT0NBVElPTl9DT05GSUcpIEBPcHRpb25hbCgpIGNvbmZpZz86IE1vY2tQbGF0Zm9ybUxvY2F0aW9uQ29uZmlnLFxuICApIHtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmJhc2VIcmVmID0gY29uZmlnLmFwcEJhc2VIcmVmIHx8ICcnO1xuXG4gICAgICBjb25zdCBwYXJzZWRDaGFuZ2VzID0gdGhpcy5wYXJzZUNoYW5nZXMoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGNvbmZpZy5zdGFydFVybCB8fCAnaHR0cDovL19lbXB0eV8vJyxcbiAgICAgICAgdGhpcy5iYXNlSHJlZixcbiAgICAgICk7XG4gICAgICB0aGlzLnVybENoYW5nZXNbMF0gPSB7Li4ucGFyc2VkQ2hhbmdlc307XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhvc3RuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnVybENoYW5nZXNbdGhpcy51cmxDaGFuZ2VJbmRleF0uaG9zdG5hbWU7XG4gIH1cbiAgZ2V0IHByb3RvY29sKCkge1xuICAgIHJldHVybiB0aGlzLnVybENoYW5nZXNbdGhpcy51cmxDaGFuZ2VJbmRleF0ucHJvdG9jb2w7XG4gIH1cbiAgZ2V0IHBvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudXJsQ2hhbmdlc1t0aGlzLnVybENoYW5nZUluZGV4XS5wb3J0O1xuICB9XG4gIGdldCBwYXRobmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy51cmxDaGFuZ2VzW3RoaXMudXJsQ2hhbmdlSW5kZXhdLnBhdGhuYW1lO1xuICB9XG4gIGdldCBzZWFyY2goKSB7XG4gICAgcmV0dXJuIHRoaXMudXJsQ2hhbmdlc1t0aGlzLnVybENoYW5nZUluZGV4XS5zZWFyY2g7XG4gIH1cbiAgZ2V0IGhhc2goKSB7XG4gICAgcmV0dXJuIHRoaXMudXJsQ2hhbmdlc1t0aGlzLnVybENoYW5nZUluZGV4XS5oYXNoO1xuICB9XG4gIGdldCBzdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy51cmxDaGFuZ2VzW3RoaXMudXJsQ2hhbmdlSW5kZXhdLnN0YXRlO1xuICB9XG5cbiAgZ2V0QmFzZUhyZWZGcm9tRE9NKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZUhyZWY7XG4gIH1cblxuICBvblBvcFN0YXRlKGZuOiBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKTogVm9pZEZ1bmN0aW9uIHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLnBvcFN0YXRlU3ViamVjdC5zdWJzY3JpYmUoZm4pO1xuICAgIHJldHVybiAoKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9uSGFzaENoYW5nZShmbjogTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcik6IFZvaWRGdW5jdGlvbiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5oYXNoVXBkYXRlLnN1YnNjcmliZShmbik7XG4gICAgcmV0dXJuICgpID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZ2V0IGhyZWYoKTogc3RyaW5nIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5wcm90b2NvbH0vLyR7dGhpcy5ob3N0bmFtZX0ke3RoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnfWA7XG4gICAgdXJsICs9IGAke3RoaXMucGF0aG5hbWUgPT09ICcvJyA/ICcnIDogdGhpcy5wYXRobmFtZX0ke3RoaXMuc2VhcmNofSR7dGhpcy5oYXNofWA7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wYXRobmFtZX0ke3RoaXMuc2VhcmNofSR7dGhpcy5oYXNofWA7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQ2hhbmdlcyhzdGF0ZTogdW5rbm93biwgdXJsOiBzdHJpbmcsIGJhc2VIcmVmOiBzdHJpbmcgPSAnJykge1xuICAgIC8vIFdoZW4gdGhlIGBoaXN0b3J5LnN0YXRlYCB2YWx1ZSBpcyBzdG9yZWQsIGl0IGlzIGFsd2F5cyBjb3BpZWQuXG4gICAgc3RhdGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHN0YXRlKSk7XG4gICAgcmV0dXJuIHsuLi5wYXJzZVVybCh1cmwsIGJhc2VIcmVmKSwgc3RhdGV9O1xuICB9XG5cbiAgcmVwbGFjZVN0YXRlKHN0YXRlOiBhbnksIHRpdGxlOiBzdHJpbmcsIG5ld1VybDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qge3BhdGhuYW1lLCBzZWFyY2gsIHN0YXRlOiBwYXJzZWRTdGF0ZSwgaGFzaH0gPSB0aGlzLnBhcnNlQ2hhbmdlcyhzdGF0ZSwgbmV3VXJsKTtcblxuICAgIHRoaXMudXJsQ2hhbmdlc1t0aGlzLnVybENoYW5nZUluZGV4XSA9IHtcbiAgICAgIC4uLnRoaXMudXJsQ2hhbmdlc1t0aGlzLnVybENoYW5nZUluZGV4XSxcbiAgICAgIHBhdGhuYW1lLFxuICAgICAgc2VhcmNoLFxuICAgICAgaGFzaCxcbiAgICAgIHN0YXRlOiBwYXJzZWRTdGF0ZSxcbiAgICB9O1xuICB9XG5cbiAgcHVzaFN0YXRlKHN0YXRlOiBhbnksIHRpdGxlOiBzdHJpbmcsIG5ld1VybDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qge3BhdGhuYW1lLCBzZWFyY2gsIHN0YXRlOiBwYXJzZWRTdGF0ZSwgaGFzaH0gPSB0aGlzLnBhcnNlQ2hhbmdlcyhzdGF0ZSwgbmV3VXJsKTtcbiAgICBpZiAodGhpcy51cmxDaGFuZ2VJbmRleCA+IDApIHtcbiAgICAgIHRoaXMudXJsQ2hhbmdlcy5zcGxpY2UodGhpcy51cmxDaGFuZ2VJbmRleCArIDEpO1xuICAgIH1cbiAgICB0aGlzLnVybENoYW5nZXMucHVzaCh7XG4gICAgICAuLi50aGlzLnVybENoYW5nZXNbdGhpcy51cmxDaGFuZ2VJbmRleF0sXG4gICAgICBwYXRobmFtZSxcbiAgICAgIHNlYXJjaCxcbiAgICAgIGhhc2gsXG4gICAgICBzdGF0ZTogcGFyc2VkU3RhdGUsXG4gICAgfSk7XG4gICAgdGhpcy51cmxDaGFuZ2VJbmRleCA9IHRoaXMudXJsQ2hhbmdlcy5sZW5ndGggLSAxO1xuICB9XG5cbiAgZm9yd2FyZCgpOiB2b2lkIHtcbiAgICBjb25zdCBvbGRVcmwgPSB0aGlzLnVybDtcbiAgICBjb25zdCBvbGRIYXNoID0gdGhpcy5oYXNoO1xuICAgIGlmICh0aGlzLnVybENoYW5nZUluZGV4IDwgdGhpcy51cmxDaGFuZ2VzLmxlbmd0aCkge1xuICAgICAgdGhpcy51cmxDaGFuZ2VJbmRleCsrO1xuICAgIH1cbiAgICB0aGlzLmVtaXRFdmVudHMob2xkSGFzaCwgb2xkVXJsKTtcbiAgfVxuXG4gIGJhY2soKTogdm9pZCB7XG4gICAgY29uc3Qgb2xkVXJsID0gdGhpcy51cmw7XG4gICAgY29uc3Qgb2xkSGFzaCA9IHRoaXMuaGFzaDtcbiAgICBpZiAodGhpcy51cmxDaGFuZ2VJbmRleCA+IDApIHtcbiAgICAgIHRoaXMudXJsQ2hhbmdlSW5kZXgtLTtcbiAgICB9XG4gICAgdGhpcy5lbWl0RXZlbnRzKG9sZEhhc2gsIG9sZFVybCk7XG4gIH1cblxuICBoaXN0b3J5R28ocmVsYXRpdmVQb3NpdGlvbjogbnVtYmVyID0gMCk6IHZvaWQge1xuICAgIGNvbnN0IG9sZFVybCA9IHRoaXMudXJsO1xuICAgIGNvbnN0IG9sZEhhc2ggPSB0aGlzLmhhc2g7XG4gICAgY29uc3QgbmV4dFBhZ2VJbmRleCA9IHRoaXMudXJsQ2hhbmdlSW5kZXggKyByZWxhdGl2ZVBvc2l0aW9uO1xuICAgIGlmIChuZXh0UGFnZUluZGV4ID49IDAgJiYgbmV4dFBhZ2VJbmRleCA8IHRoaXMudXJsQ2hhbmdlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudXJsQ2hhbmdlSW5kZXggPSBuZXh0UGFnZUluZGV4O1xuICAgIH1cbiAgICB0aGlzLmVtaXRFdmVudHMob2xkSGFzaCwgb2xkVXJsKTtcbiAgfVxuXG4gIGdldFN0YXRlKCk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEJyb3dzZXJzIGFyZSBpbmNvbnNpc3RlbnQgaW4gd2hlbiB0aGV5IGZpcmUgZXZlbnRzIGFuZCBwZXJmb3JtIHRoZSBzdGF0ZSB1cGRhdGVzXG4gICAqIFRoZSBtb3N0IGVhc2llc3QgdGhpbmcgdG8gZG8gaW4gb3VyIG1vY2sgaXMgc3luY2hyb25vdXMgYW5kIHRoYXQgaGFwcGVucyB0byBtYXRjaFxuICAgKiBGaXJlZm94IGFuZCBDaHJvbWUsIGF0IGxlYXN0IHNvbWV3aGF0IGNsb3NlbHlcbiAgICpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvbmF2aWdhdGlvbi1hcGkjd2F0Y2hpbmctZm9yLW5hdmlnYXRpb25zXG4gICAqIGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVBkdmUtREoxSkNHaWxqOVlxZjVIeFJKeUJLU2VsNW93Z092VUpxVGF1d1UvZWRpdCNoZWFkaW5nPWguM3llNHY3MXdzejk0XG4gICAqIHBvcHN0YXRlIGlzIGFsd2F5cyBzZW50IGJlZm9yZSBoYXNoY2hhbmdlOlxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L3BvcHN0YXRlX2V2ZW50I3doZW5fcG9wc3RhdGVfaXNfc2VudFxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0RXZlbnRzKG9sZEhhc2g6IHN0cmluZywgb2xkVXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBvcFN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgIHR5cGU6ICdwb3BzdGF0ZScsXG4gICAgICBzdGF0ZTogdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgb2xkVXJsLFxuICAgICAgbmV3VXJsOiB0aGlzLnVybCxcbiAgICB9IGFzIExvY2F0aW9uQ2hhbmdlRXZlbnQpO1xuICAgIGlmIChvbGRIYXNoICE9PSB0aGlzLmhhc2gpIHtcbiAgICAgIHRoaXMuaGFzaFVwZGF0ZS5uZXh0KHtcbiAgICAgICAgdHlwZTogJ2hhc2hjaGFuZ2UnLFxuICAgICAgICBzdGF0ZTogbnVsbCxcbiAgICAgICAgb2xkVXJsLFxuICAgICAgICBuZXdVcmw6IHRoaXMudXJsLFxuICAgICAgfSBhcyBMb2NhdGlvbkNoYW5nZUV2ZW50KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
230
|
+
/**
|
|
231
|
+
* Mock implementation of URL state.
|
|
232
|
+
*/
|
|
233
|
+
export class FakeNavigationPlatformLocation {
|
|
234
|
+
constructor() {
|
|
235
|
+
this._platformNavigation = inject(PlatformNavigation);
|
|
236
|
+
this.window = inject(DOCUMENT).defaultView;
|
|
237
|
+
this.config = inject(MOCK_PLATFORM_LOCATION_CONFIG, { optional: true });
|
|
238
|
+
if (!(this._platformNavigation instanceof FakeNavigation)) {
|
|
239
|
+
throw new Error('FakePlatformNavigation cannot be used without FakeNavigation. Use ' +
|
|
240
|
+
'`provideFakeNavigation` to have all these services provided together.');
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
getBaseHrefFromDOM() {
|
|
244
|
+
return this.config?.appBaseHref ?? '';
|
|
245
|
+
}
|
|
246
|
+
onPopState(fn) {
|
|
247
|
+
this.window.addEventListener('popstate', fn);
|
|
248
|
+
return () => this.window.removeEventListener('popstate', fn);
|
|
249
|
+
}
|
|
250
|
+
onHashChange(fn) {
|
|
251
|
+
this.window.addEventListener('hashchange', fn);
|
|
252
|
+
return () => this.window.removeEventListener('hashchange', fn);
|
|
253
|
+
}
|
|
254
|
+
get href() {
|
|
255
|
+
return this._platformNavigation.currentEntry.url;
|
|
256
|
+
}
|
|
257
|
+
get protocol() {
|
|
258
|
+
return new URL(this._platformNavigation.currentEntry.url).protocol;
|
|
259
|
+
}
|
|
260
|
+
get hostname() {
|
|
261
|
+
return new URL(this._platformNavigation.currentEntry.url).hostname;
|
|
262
|
+
}
|
|
263
|
+
get port() {
|
|
264
|
+
return new URL(this._platformNavigation.currentEntry.url).port;
|
|
265
|
+
}
|
|
266
|
+
get pathname() {
|
|
267
|
+
return new URL(this._platformNavigation.currentEntry.url).pathname;
|
|
268
|
+
}
|
|
269
|
+
get search() {
|
|
270
|
+
return new URL(this._platformNavigation.currentEntry.url).search;
|
|
271
|
+
}
|
|
272
|
+
get hash() {
|
|
273
|
+
return new URL(this._platformNavigation.currentEntry.url).hash;
|
|
274
|
+
}
|
|
275
|
+
pushState(state, title, url) {
|
|
276
|
+
this._platformNavigation.pushState(state, title, url);
|
|
277
|
+
}
|
|
278
|
+
replaceState(state, title, url) {
|
|
279
|
+
this._platformNavigation.replaceState(state, title, url);
|
|
280
|
+
}
|
|
281
|
+
forward() {
|
|
282
|
+
this._platformNavigation.forward();
|
|
283
|
+
}
|
|
284
|
+
back() {
|
|
285
|
+
this._platformNavigation.back();
|
|
286
|
+
}
|
|
287
|
+
historyGo(relativePosition = 0) {
|
|
288
|
+
this._platformNavigation.go(relativePosition);
|
|
289
|
+
}
|
|
290
|
+
getState() {
|
|
291
|
+
return this._platformNavigation.currentEntry.getHistoryState();
|
|
292
|
+
}
|
|
293
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0-next.1", ngImport: i0, type: FakeNavigationPlatformLocation, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
294
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.0-next.1", ngImport: i0, type: FakeNavigationPlatformLocation }); }
|
|
295
|
+
}
|
|
296
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0-next.1", ngImport: i0, type: FakeNavigationPlatformLocation, decorators: [{
|
|
297
|
+
type: Injectable
|
|
298
|
+
}], ctorParameters: () => [] });
|
|
299
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19wbGF0Zm9ybV9sb2NhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi90ZXN0aW5nL3NyYy9tb2NrX3BsYXRmb3JtX2xvY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFDTCxRQUFRLEVBSVIsbUJBQW1CLElBQUksa0JBQWtCLEdBQzFDLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sOEJBQThCLENBQUM7O0FBRTVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLFFBQVEsR0FBRywrREFBK0QsQ0FBQztBQUVqRixTQUFTLFFBQVEsQ0FBQyxNQUFjLEVBQUUsUUFBZ0I7SUFDaEQsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLENBQUM7SUFDaEQsSUFBSSxVQUE4QixDQUFDO0lBRW5DLDZGQUE2RjtJQUM3Rix3REFBd0Q7SUFDeEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxVQUFVLEdBQUcsbUJBQW1CLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksU0FPSCxDQUFDO0lBQ0YsSUFBSSxDQUFDO1FBQ0gsU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztR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QUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxFQUFTLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUksQ0FBQztJQUNwRCxDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsRSxDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNwRSxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsRSxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVUsRUFBRSxLQUFhLEVBQUUsR0FBVztRQUM5QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVLEVBQUUsS0FBYSxFQUFFLEdBQVc7UUFDakQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxTQUFTLENBQUMsbUJBQTJCLENBQUM7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ2pFLENBQUM7eUhBeEVVLDhCQUE4Qjs2SEFBOUIsOEJBQThCOztzR0FBOUIsOEJBQThCO2tCQUQxQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIERPQ1VNRU5ULFxuICBMb2NhdGlvbkNoYW5nZUV2ZW50LFxuICBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyLFxuICBQbGF0Zm9ybUxvY2F0aW9uLFxuICDJtVBsYXRmb3JtTmF2aWdhdGlvbiBhcyBQbGF0Zm9ybU5hdmlnYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0luamVjdCwgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtGYWtlTmF2aWdhdGlvbn0gZnJvbSAnLi9uYXZpZ2F0aW9uL2Zha2VfbmF2aWdhdGlvbic7XG5cbi8qKlxuICogUGFyc2VyIGZyb20gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQlxuICogXigoW146Lz8jXSspOik/KC8vKFteLz8jXSopKT8oW14/I10qKShcXD8oW14jXSopKT8oIyguKikpP1xuICogIDEyICAgICAgICAgICAgMyAgNCAgICAgICAgICA1ICAgICAgIDYgIDcgICAgICAgIDggOVxuICpcbiAqIEV4YW1wbGU6IGh0dHA6Ly93d3cuaWNzLnVjaS5lZHUvcHViL2lldGYvdXJpLyNSZWxhdGVkXG4gKlxuICogUmVzdWx0cyBpbjpcbiAqXG4gKiAkMSA9IGh0dHA6XG4gKiAkMiA9IGh0dHBcbiAqICQzID0gLy93d3cuaWNzLnVjaS5lZHVcbiAqICQ0ID0gd3d3Lmljcy51Y2kuZWR1XG4gKiAkNSA9IC9wdWIvaWV0Zi91cmkvXG4gKiAkNiA9IDx1bmRlZmluZWQ+XG4gKiAkNyA9IDx1bmRlZmluZWQ+XG4gKiAkOCA9ICNSZWxhdGVkXG4gKiAkOSA9IFJlbGF0ZWRcbiAqL1xuY29uc3QgdXJsUGFyc2UgPSAvXigoW146XFwvPyNdKyk6KT8oXFwvXFwvKFteXFwvPyNdKikpPyhbXj8jXSopKFxcPyhbXiNdKikpPygjKC4qKSk/LztcblxuZnVuY3Rpb24gcGFyc2VVcmwodXJsU3RyOiBzdHJpbmcsIGJhc2VIcmVmOiBzdHJpbmcpIHtcbiAgY29uc3QgdmVyaWZ5UHJvdG9jb2wgPSAvXigoaHR0cFtzXT98ZnRwKTpcXC9cXC8pLztcbiAgbGV0IHNlcnZlckJhc2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvLyBVUkwgY2xhc3MgcmVxdWlyZXMgZnVsbCBVUkwuIElmIHRoZSBVUkwgc3RyaW5nIGRvZXNuJ3Qgc3RhcnQgd2l0aCBwcm90b2NvbCwgd2UgbmVlZCB0byBhZGRcbiAgLy8gYW4gYXJiaXRyYXJ5IGJhc2UgVVJMIHdoaWNoIGNhbiBiZSByZW1vdmVkIGFmdGVyd2FyZC5cbiAgaWYgKCF2ZXJpZnlQcm90b2NvbC50ZXN0KHVybFN0cikpIHtcbiAgICBzZXJ2ZXJCYXNlID0gJ2h0dHA6Ly9lbXB0eS5jb20vJztcbiAgfVxuICBsZXQgcGFyc2VkVXJsOiB7XG4gICAgcHJvdG9jb2w6IHN0cmluZztcbiAgICBob3N0bmFtZTogc3RyaW5nO1xuICAgIHBvcnQ6IHN0cmluZztcbiAgICBwYXRobmFtZTogc3RyaW5nO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICAgIGhhc2g6IHN0cmluZztcbiAgfTtcbiAgdHJ5IHtcbiAgICBwYXJzZWRVcmwgPSBuZXcgVVJMKHVybFN0ciwgc2VydmVyQmFzZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCByZXN1bHQgPSB1cmxQYXJzZS5leGVjKHNlcnZlckJhc2UgfHwgJycgKyB1cmxTdHIpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgVVJMOiAke3VybFN0cn0gd2l0aCBiYXNlOiAke2Jhc2VIcmVmfWApO1xuICAgIH1cbiAgICBjb25zdCBob3N0U3BsaXQgPSByZXN1bHRbNF0uc3BsaXQoJzonKTtcbiAgICBwYXJzZWRVcmwgPSB7XG4gICAgICBwcm90b2NvbDogcmVzdWx0WzFdLFxuICAgICAgaG9zdG5hbWU6IGhvc3RTcGxpdFswXSxcbiAgICAgIHBvcnQ6IGhvc3RTcGxpdFsxXSB8fCAnJyxcbiAgICAgIHBhdGhuYW1lOiByZXN1bHRbNV0sXG4gICAgICBzZWFyY2g6IHJlc3VsdFs2XSxcbiAgICAgIGhhc2g6IHJlc3VsdFs4XSxcbiAgICB9O1xuICB9XG4gIGlmIChwYXJzZWRVcmwucGF0aG5hbWUgJiYgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoYmFzZUhyZWYpID09PSAwKSB7XG4gICAgcGFyc2VkVXJsLnBhdGhuYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lLnN1YnN0cmluZyhiYXNlSHJlZi5sZW5ndGgpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaG9zdG5hbWU6ICghc2VydmVyQmFzZSAmJiBwYXJzZWRVcmwuaG9zdG5hbWUpIHx8ICcnLFxuICAgIHByb3RvY29sOiAoIXNlcnZlckJhc2UgJiYgcGFyc2VkVXJsLnByb3RvY29sKSB8fCAnJyxcbiAgICBwb3J0OiAoIXNlcnZlckJhc2UgJiYgcGFyc2VkVXJsLnBvcnQpIHx8ICcnLFxuICAgIHBhdGhuYW1lOiBwYXJzZWRVcmwucGF0aG5hbWUgfHwgJy8nLFxuICAgIHNlYXJjaDogcGFyc2VkVXJsLnNlYXJjaCB8fCAnJyxcbiAgICBoYXNoOiBwYXJzZWRVcmwuaGFzaCB8fCAnJyxcbiAgfTtcbn1cblxuLyoqXG4gKiBNb2NrIHBsYXRmb3JtIGxvY2F0aW9uIGNvbmZpZ1xuICpcbiAqIEBwdWJsaWNBcGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2NrUGxhdGZvcm1Mb2NhdGlvbkNvbmZpZyB7XG4gIHN0YXJ0VXJsPzogc3RyaW5nO1xuICBhcHBCYXNlSHJlZj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm92aWRlciBmb3IgbW9jayBwbGF0Zm9ybSBsb2NhdGlvbiBjb25maWdcbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBjb25zdCBNT0NLX1BMQVRGT1JNX0xPQ0FUSU9OX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxNb2NrUGxhdGZvcm1Mb2NhdGlvbkNvbmZpZz4oXG4gICdNT0NLX1BMQVRGT1JNX0xPQ0FUSU9OX0NPTkZJRycsXG4pO1xuXG4vKipcbiAqIE1vY2sgaW1wbGVtZW50YXRpb24gb2YgVVJMIHN0YXRlLlxuICpcbiAqIEBwdWJsaWNBcGlcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vY2tQbGF0Zm9ybUxvY2F0aW9uIGltcGxlbWVudHMgUGxhdGZvcm1Mb2NhdGlvbiB7XG4gIHByaXZhdGUgYmFzZUhyZWY6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIGhhc2hVcGRhdGUgPSBuZXcgU3ViamVjdDxMb2NhdGlvbkNoYW5nZUV2ZW50PigpO1xuICBwcml2YXRlIHBvcFN0YXRlU3ViamVjdCA9IG5ldyBTdWJqZWN0PExvY2F0aW9uQ2hhbmdlRXZlbnQ+KCk7XG4gIHByaXZhdGUgdXJsQ2hhbmdlSW5kZXg6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgdXJsQ2hhbmdlczoge1xuICAgIGhvc3RuYW1lOiBzdHJpbmc7XG4gICAgcHJvdG9jb2w6IHN0cmluZztcbiAgICBwb3J0OiBzdHJpbmc7XG4gICAgcGF0aG5hbWU6IHN0cmluZztcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgICBoYXNoOiBzdHJpbmc7XG4gICAgc3RhdGU6IHVua25vd247XG4gIH1bXSA9IFt7aG9zdG5hbWU6ICcnLCBwcm90b2NvbDogJycsIHBvcnQ6ICcnLCBwYXRobmFtZTogJy8nLCBzZWFyY2g6ICcnLCBoYXNoOiAnJywgc3RhdGU6IG51bGx9XTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1PQ0tfUExBVEZPUk1fTE9DQVRJT05fQ09ORklHKSBAT3B0aW9uYWwoKSBjb25maWc/OiBNb2NrUGxhdGZvcm1Mb2NhdGlvbkNvbmZpZyxcbiAgKSB7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5iYXNlSHJlZiA9IGNvbmZpZy5hcHBCYXNlSHJlZiB8fCAnJztcblxuICAgICAgY29uc3QgcGFyc2VkQ2hhbmdlcyA9IHRoaXMucGFyc2VDaGFuZ2VzKFxuICAgICAgICBudWxsLFxuICAgICAgICBjb25maWcuc3RhcnRVcmwgfHwgJ2h0dHA6Ly9fZW1wdHlfLycsXG4gICAgICAgIHRoaXMuYmFzZUhyZWYsXG4gICAgICApO1xuICAgICAgdGhpcy51cmxDaGFuZ2VzWzBdID0gey4uLnBhcnNlZENoYW5nZXN9O1xuICAgIH1cbiAgfVxuXG4gIGdldCBob3N0bmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy51cmxDaGFuZ2VzW3RoaXMudXJsQ2hhbmdlSW5kZXhdLmhvc3RuYW1lO1xuICB9XG4gIGdldCBwcm90b2NvbCgpIHtcbiAgICByZXR1cm4gdGhpcy51cmxDaGFuZ2VzW3RoaXMudXJsQ2hhbmdlSW5kZXhdLnByb3RvY29sO1xuICB9XG4gIGdldCBwb3J0KCkge1xuICAgIHJldHVybiB0aGlzLnVybENoYW5nZXNbdGhpcy51cmxDaGFuZ2VJbmRleF0ucG9ydDtcbiAgfVxuICBnZXQgcGF0aG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudXJsQ2hhbmdlc1t0aGlzLnVybENoYW5nZUluZGV4XS5wYXRobmFtZTtcbiAgfVxuICBnZXQgc2VhcmNoKCkge1xuICAgIHJldHVybiB0aGlzLnVybENoYW5nZXNbdGhpcy51cmxDaGFuZ2VJbmRleF0uc2VhcmNoO1xuICB9XG4gIGdldCBoYXNoKCkge1xuICAgIHJldHVybiB0aGlzLnVybENoYW5nZXNbdGhpcy51cmxDaGFuZ2VJbmRleF0uaGFzaDtcbiAgfVxuICBnZXQgc3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudXJsQ2hhbmdlc1t0aGlzLnVybENoYW5nZUluZGV4XS5zdGF0ZTtcbiAgfVxuXG4gIGdldEJhc2VIcmVmRnJvbURPTSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VIcmVmO1xuICB9XG5cbiAgb25Qb3BTdGF0ZShmbjogTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcik6IFZvaWRGdW5jdGlvbiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5wb3BTdGF0ZVN1YmplY3Quc3Vic2NyaWJlKGZuKTtcbiAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBvbkhhc2hDaGFuZ2UoZm46IExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIpOiBWb2lkRnVuY3Rpb24ge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuaGFzaFVwZGF0ZS5zdWJzY3JpYmUoZm4pO1xuICAgIHJldHVybiAoKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGdldCBocmVmKCk6IHN0cmluZyB7XG4gICAgbGV0IHVybCA9IGAke3RoaXMucHJvdG9jb2x9Ly8ke3RoaXMuaG9zdG5hbWV9JHt0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJ31gO1xuICAgIHVybCArPSBgJHt0aGlzLnBhdGhuYW1lID09PSAnLycgPyAnJyA6IHRoaXMucGF0aG5hbWV9JHt0aGlzLnNlYXJjaH0ke3RoaXMuaGFzaH1gO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMucGF0aG5hbWV9JHt0aGlzLnNlYXJjaH0ke3RoaXMuaGFzaH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNoYW5nZXMoc3RhdGU6IHVua25vd24sIHVybDogc3RyaW5nLCBiYXNlSHJlZjogc3RyaW5nID0gJycpIHtcbiAgICAvLyBXaGVuIHRoZSBgaGlzdG9yeS5zdGF0ZWAgdmFsdWUgaXMgc3RvcmVkLCBpdCBpcyBhbHdheXMgY29waWVkLlxuICAgIHN0YXRlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICAgIHJldHVybiB7Li4ucGFyc2VVcmwodXJsLCBiYXNlSHJlZiksIHN0YXRlfTtcbiAgfVxuXG4gIHJlcGxhY2VTdGF0ZShzdGF0ZTogYW55LCB0aXRsZTogc3RyaW5nLCBuZXdVcmw6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHtwYXRobmFtZSwgc2VhcmNoLCBzdGF0ZTogcGFyc2VkU3RhdGUsIGhhc2h9ID0gdGhpcy5wYXJzZUNoYW5nZXMoc3RhdGUsIG5ld1VybCk7XG5cbiAgICB0aGlzLnVybENoYW5nZXNbdGhpcy51cmxDaGFuZ2VJbmRleF0gPSB7XG4gICAgICAuLi50aGlzLnVybENoYW5nZXNbdGhpcy51cmxDaGFuZ2VJbmRleF0sXG4gICAgICBwYXRobmFtZSxcbiAgICAgIHNlYXJjaCxcbiAgICAgIGhhc2gsXG4gICAgICBzdGF0ZTogcGFyc2VkU3RhdGUsXG4gICAgfTtcbiAgfVxuXG4gIHB1c2hTdGF0ZShzdGF0ZTogYW55LCB0aXRsZTogc3RyaW5nLCBuZXdVcmw6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHtwYXRobmFtZSwgc2VhcmNoLCBzdGF0ZTogcGFyc2VkU3RhdGUsIGhhc2h9ID0gdGhpcy5wYXJzZUNoYW5nZXMoc3RhdGUsIG5ld1VybCk7XG4gICAgaWYgKHRoaXMudXJsQ2hhbmdlSW5kZXggPiAwKSB7XG4gICAgICB0aGlzLnVybENoYW5nZXMuc3BsaWNlKHRoaXMudXJsQ2hhbmdlSW5kZXggKyAxKTtcbiAgICB9XG4gICAgdGhpcy51cmxDaGFuZ2VzLnB1c2goe1xuICAgICAgLi4udGhpcy51cmxDaGFuZ2VzW3RoaXMudXJsQ2hhbmdlSW5kZXhdLFxuICAgICAgcGF0aG5hbWUsXG4gICAgICBzZWFyY2gsXG4gICAgICBoYXNoLFxuICAgICAgc3RhdGU6IHBhcnNlZFN0YXRlLFxuICAgIH0pO1xuICAgIHRoaXMudXJsQ2hhbmdlSW5kZXggPSB0aGlzLnVybENoYW5nZXMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIGZvcndhcmQoKTogdm9pZCB7XG4gICAgY29uc3Qgb2xkVXJsID0gdGhpcy51cmw7XG4gICAgY29uc3Qgb2xkSGFzaCA9IHRoaXMuaGFzaDtcbiAgICBpZiAodGhpcy51cmxDaGFuZ2VJbmRleCA8IHRoaXMudXJsQ2hhbmdlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudXJsQ2hhbmdlSW5kZXgrKztcbiAgICB9XG4gICAgdGhpcy5lbWl0RXZlbnRzKG9sZEhhc2gsIG9sZFVybCk7XG4gIH1cblxuICBiYWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IG9sZFVybCA9IHRoaXMudXJsO1xuICAgIGNvbnN0IG9sZEhhc2ggPSB0aGlzLmhhc2g7XG4gICAgaWYgKHRoaXMudXJsQ2hhbmdlSW5kZXggPiAwKSB7XG4gICAgICB0aGlzLnVybENoYW5nZUluZGV4LS07XG4gICAgfVxuICAgIHRoaXMuZW1pdEV2ZW50cyhvbGRIYXNoLCBvbGRVcmwpO1xuICB9XG5cbiAgaGlzdG9yeUdvKHJlbGF0aXZlUG9zaXRpb246IG51bWJlciA9IDApOiB2b2lkIHtcbiAgICBjb25zdCBvbGRVcmwgPSB0aGlzLnVybDtcbiAgICBjb25zdCBvbGRIYXNoID0gdGhpcy5oYXNoO1xuICAgIGNvbnN0IG5leHRQYWdlSW5kZXggPSB0aGlzLnVybENoYW5nZUluZGV4ICsgcmVsYXRpdmVQb3NpdGlvbjtcbiAgICBpZiAobmV4dFBhZ2VJbmRleCA+PSAwICYmIG5leHRQYWdlSW5kZXggPCB0aGlzLnVybENoYW5nZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnVybENoYW5nZUluZGV4ID0gbmV4dFBhZ2VJbmRleDtcbiAgICB9XG4gICAgdGhpcy5lbWl0RXZlbnRzKG9sZEhhc2gsIG9sZFVybCk7XG4gIH1cblxuICBnZXRTdGF0ZSgpOiB1bmtub3duIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCcm93c2VycyBhcmUgaW5jb25zaXN0ZW50IGluIHdoZW4gdGhleSBmaXJlIGV2ZW50cyBhbmQgcGVyZm9ybSB0aGUgc3RhdGUgdXBkYXRlc1xuICAgKiBUaGUgbW9zdCBlYXNpZXN0IHRoaW5nIHRvIGRvIGluIG91ciBtb2NrIGlzIHN5bmNocm9ub3VzIGFuZCB0aGF0IGhhcHBlbnMgdG8gbWF0Y2hcbiAgICogRmlyZWZveCBhbmQgQ2hyb21lLCBhdCBsZWFzdCBzb21ld2hhdCBjbG9zZWx5XG4gICAqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL25hdmlnYXRpb24tYXBpI3dhdGNoaW5nLWZvci1uYXZpZ2F0aW9uc1xuICAgKiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFQZHZlLURKMUpDR2lsajlZcWY1SHhSSnlCS1NlbDVvd2dPdlVKcVRhdXdVL2VkaXQjaGVhZGluZz1oLjN5ZTR2NzF3c3o5NFxuICAgKiBwb3BzdGF0ZSBpcyBhbHdheXMgc2VudCBiZWZvcmUgaGFzaGNoYW5nZTpcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9wb3BzdGF0ZV9ldmVudCN3aGVuX3BvcHN0YXRlX2lzX3NlbnRcbiAgICovXG4gIHByaXZhdGUgZW1pdEV2ZW50cyhvbGRIYXNoOiBzdHJpbmcsIG9sZFVybDogc3RyaW5nKSB7XG4gICAgdGhpcy5wb3BTdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICB0eXBlOiAncG9wc3RhdGUnLFxuICAgICAgc3RhdGU6IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgIG9sZFVybCxcbiAgICAgIG5ld1VybDogdGhpcy51cmwsXG4gICAgfSBhcyBMb2NhdGlvbkNoYW5nZUV2ZW50KTtcbiAgICBpZiAob2xkSGFzaCAhPT0gdGhpcy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2hVcGRhdGUubmV4dCh7XG4gICAgICAgIHR5cGU6ICdoYXNoY2hhbmdlJyxcbiAgICAgICAgc3RhdGU6IG51bGwsXG4gICAgICAgIG9sZFVybCxcbiAgICAgICAgbmV3VXJsOiB0aGlzLnVybCxcbiAgICAgIH0gYXMgTG9jYXRpb25DaGFuZ2VFdmVudCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTW9jayBpbXBsZW1lbnRhdGlvbiBvZiBVUkwgc3RhdGUuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGYWtlTmF2aWdhdGlvblBsYXRmb3JtTG9jYXRpb24gaW1wbGVtZW50cyBQbGF0Zm9ybUxvY2F0aW9uIHtcbiAgcHJpdmF0ZSBfcGxhdGZvcm1OYXZpZ2F0aW9uID0gaW5qZWN0KFBsYXRmb3JtTmF2aWdhdGlvbikgYXMgRmFrZU5hdmlnYXRpb247XG4gIHByaXZhdGUgd2luZG93ID0gaW5qZWN0KERPQ1VNRU5UKS5kZWZhdWx0VmlldyE7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCEodGhpcy5fcGxhdGZvcm1OYXZpZ2F0aW9uIGluc3RhbmNlb2YgRmFrZU5hdmlnYXRpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdGYWtlUGxhdGZvcm1OYXZpZ2F0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgRmFrZU5hdmlnYXRpb24uIFVzZSAnICtcbiAgICAgICAgICAnYHByb3ZpZGVGYWtlTmF2aWdhdGlvbmAgdG8gaGF2ZSBhbGwgdGhlc2Ugc2VydmljZXMgcHJvdmlkZWQgdG9nZXRoZXIuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25maWcgPSBpbmplY3QoTU9DS19QTEFURk9STV9MT0NBVElPTl9DT05GSUcsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICBnZXRCYXNlSHJlZkZyb21ET00oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmFwcEJhc2VIcmVmID8/ICcnO1xuICB9XG5cbiAgb25Qb3BTdGF0ZShmbjogTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcik6IFZvaWRGdW5jdGlvbiB7XG4gICAgdGhpcy53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBmbik7XG4gICAgcmV0dXJuICgpID0+IHRoaXMud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZm4pO1xuICB9XG5cbiAgb25IYXNoQ2hhbmdlKGZuOiBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKTogVm9pZEZ1bmN0aW9uIHtcbiAgICB0aGlzLndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgZm4gYXMgYW55KTtcbiAgICByZXR1cm4gKCkgPT4gdGhpcy53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIGZuIGFzIGFueSk7XG4gIH1cblxuICBnZXQgaHJlZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGF0Zm9ybU5hdmlnYXRpb24uY3VycmVudEVudHJ5LnVybCE7XG4gIH1cbiAgZ2V0IHByb3RvY29sKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBVUkwodGhpcy5fcGxhdGZvcm1OYXZpZ2F0aW9uLmN1cnJlbnRFbnRyeS51cmwhKS5wcm90b2NvbDtcbiAgfVxuICBnZXQgaG9zdG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IFVSTCh0aGlzLl9wbGF0Zm9ybU5hdmlnYXRpb24uY3VycmVudEVudHJ5LnVybCEpLmhvc3RuYW1lO1xuICB9XG4gIGdldCBwb3J0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBVUkwodGhpcy5fcGxhdGZvcm1OYXZpZ2F0aW9uLmN1cnJlbnRFbnRyeS51cmwhKS5wb3J0O1xuICB9XG4gIGdldCBwYXRobmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgVVJMKHRoaXMuX3BsYXRmb3JtTmF2aWdhdGlvbi5jdXJyZW50RW50cnkudXJsISkucGF0aG5hbWU7XG4gIH1cbiAgZ2V0IHNlYXJjaCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgVVJMKHRoaXMuX3BsYXRmb3JtTmF2aWdhdGlvbi5jdXJyZW50RW50cnkudXJsISkuc2VhcmNoO1xuICB9XG4gIGdldCBoYXNoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBVUkwodGhpcy5fcGxhdGZvcm1OYXZpZ2F0aW9uLmN1cnJlbnRFbnRyeS51cmwhKS5oYXNoO1xuICB9XG5cbiAgcHVzaFN0YXRlKHN0YXRlOiBhbnksIHRpdGxlOiBzdHJpbmcsIHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fcGxhdGZvcm1OYXZpZ2F0aW9uLnB1c2hTdGF0ZShzdGF0ZSwgdGl0bGUsIHVybCk7XG4gIH1cblxuICByZXBsYWNlU3RhdGUoc3RhdGU6IGFueSwgdGl0bGU6IHN0cmluZywgdXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF0Zm9ybU5hdmlnYXRpb24ucmVwbGFjZVN0YXRlKHN0YXRlLCB0aXRsZSwgdXJsKTtcbiAgfVxuXG4gIGZvcndhcmQoKTogdm9pZCB7XG4gICAgdGhpcy5fcGxhdGZvcm1OYXZpZ2F0aW9uLmZvcndhcmQoKTtcbiAgfVxuXG4gIGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy5fcGxhdGZvcm1OYXZpZ2F0aW9uLmJhY2soKTtcbiAgfVxuXG4gIGhpc3RvcnlHbyhyZWxhdGl2ZVBvc2l0aW9uOiBudW1iZXIgPSAwKTogdm9pZCB7XG4gICAgdGhpcy5fcGxhdGZvcm1OYXZpZ2F0aW9uLmdvKHJlbGF0aXZlUG9zaXRpb24pO1xuICB9XG5cbiAgZ2V0U3RhdGUoKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYXRmb3JtTmF2aWdhdGlvbi5jdXJyZW50RW50cnkuZ2V0SGlzdG9yeVN0YXRlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -5,8 +5,6 @@
|
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
6
|
* found in the LICENSE file at https://angular.io/license
|
|
7
7
|
*/
|
|
8
|
-
// Prevents deletion of `Event` from `globalThis` during module loading.
|
|
9
|
-
const Event = globalThis.Event;
|
|
10
8
|
/**
|
|
11
9
|
* Fake implementation of user agent history and navigation behavior. This is a
|
|
12
10
|
* high-fidelity implementation of browser behavior that attempts to emulate
|
|
@@ -666,4 +664,4 @@ class InternalNavigationResult {
|
|
|
666
664
|
this.finished.catch(() => { });
|
|
667
665
|
}
|
|
668
666
|
}
|
|
669
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZV9uYXZpZ2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3Rlc3Rpbmcvc3JjL25hdmlnYXRpb24vZmFrZV9uYXZpZ2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILHdFQUF3RTtBQUN4RSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO0FBRS9COzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQXdEekIsK0NBQStDO0lBQy9DLElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFlBQ21CLE1BQWMsRUFDL0IsUUFBeUI7UUFEUixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBckVqQzs7O1dBR0c7UUFDYyxlQUFVLEdBQWlDLEVBQUUsQ0FBQztRQUUvRDs7V0FFRztRQUNLLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUU5Qjs7V0FFRztRQUNLLGtCQUFhLEdBQTBDLFNBQVMsQ0FBQztRQUV6RTs7O1dBR0c7UUFDYyxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUFvQyxDQUFDO1FBRTlFOzs7V0FHRztRQUNLLGtCQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTFDOzs7V0FHRztRQUNLLDBCQUFxQixHQUFHLENBQUMsQ0FBQztRQUVsQzs7O1dBR0c7UUFDSywwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFF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SSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vIFByZXZlbnRzIGRlbGV0aW9uIG9mIGBFdmVudGAgZnJvbSBgZ2xvYmFsVGhpc2AgZHVyaW5nIG1vZHVsZSBsb2FkaW5nLlxuY29uc3QgRXZlbnQgPSBnbG9iYWxUaGlzLkV2ZW50O1xuXG4vKipcbiAqIEZha2UgaW1wbGVtZW50YXRpb24gb2YgdXNlciBhZ2VudCBoaXN0b3J5IGFuZCBuYXZpZ2F0aW9uIGJlaGF2aW9yLiBUaGlzIGlzIGFcbiAqIGhpZ2gtZmlkZWxpdHkgaW1wbGVtZW50YXRpb24gb2YgYnJvd3NlciBiZWhhdmlvciB0aGF0IGF0dGVtcHRzIHRvIGVtdWxhdGVcbiAqIHRoaW5ncyBsaWtlIHRyYXZlcnNhbCBkZWxheS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZha2VOYXZpZ2F0aW9uIGltcGxlbWVudHMgTmF2aWdhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgZmFrZSBpbXBsZW1lbnRhdGlvbiBvZiBhbiBlbnRyaWVzIGFycmF5LiBPbmx5IHNhbWUtZG9jdW1lbnQgZW50cmllc1xuICAgKiBhbGxvd2VkLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBlbnRyaWVzQXJyOiBGYWtlTmF2aWdhdGlvbkhpc3RvcnlFbnRyeVtdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGFjdGl2ZSBlbnRyeSBpbmRleCBpbnRvIGBlbnRyaWVzQXJyYC5cbiAgICovXG4gIHByaXZhdGUgY3VycmVudEVudHJ5SW5kZXggPSAwO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBuYXZpZ2F0ZSBldmVudC5cbiAgICovXG4gIHByaXZhdGUgbmF2aWdhdGVFdmVudDogSW50ZXJuYWxGYWtlTmF2aWdhdGVFdmVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQSBNYXAgb2YgcGVuZGluZyB0cmF2ZXJzYWxzLCBzbyB0aGF0IHRyYXZlcnNhbHMgdG8gdGhlIHNhbWUgZW50cnkgY2FuIGJlXG4gICAqIHJlLXVzZWQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYXZlcnNhbFF1ZXVlID0gbmV3IE1hcDxzdHJpbmcsIEludGVybmFsTmF2aWdhdGlvblJlc3VsdD4oKTtcblxuICAvKipcbiAgICogQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcHJldmlvdXMgdHJhdmVyc2FscyBoYXZlIGZpbmlzaGVkLiBVc2VkIHRvXG4gICAqIHNpbXVsYXRlIHRoZSBjcm9zcy1wcm9jZXNzIGNvbW11bmljYXRpb24gbmVjZXNzYXJ5IGZvciB0cmF2ZXJzYWxzLlxuICAgKi9cbiAgcHJpdmF0ZSBuZXh0VHJhdmVyc2FsID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgLyoqXG4gICAqIEEgcHJvc3BlY3RpdmUgY3VycmVudCBhY3RpdmUgZW50cnkgaW5kZXgsIHdoaWNoIGluY2x1ZGVzIHVucmVzb2x2ZWRcbiAgICogdHJhdmVyc2Fscy4gVXNlZCBieSBgZ29gIHRvIGRldGVybWluZSB3aGVyZSBuYXZpZ2F0aW9ucyBhcmUgaW50ZW5kZWQgdG8gZ28uXG4gICAqL1xuICBwcml2YXRlIHByb3NwZWN0aXZlRW50cnlJbmRleCA9IDA7XG5cbiAgLyoqXG4gICAqIEEgdGVzdC1vbmx5IG9wdGlvbiB0byBtYWtlIHRyYXZlcnNhbHMgc3luY2hyb25vdXMsIHJhdGhlciB0aGFuIGVtdWxhdGVcbiAgICogY3Jvc3MtcHJvY2VzcyBjb21tdW5pY2F0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBzeW5jaHJvbm91c1RyYXZlcnNhbHMgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0byBhbGxvdyBhIGNhbGwgdG8gc2V0SW5pdGlhbEVudHJ5Rm9yVGVzdGluZy4gKi9cbiAgcHJpdmF0ZSBjYW5TZXRJbml0aWFsRW50cnkgPSB0cnVlO1xuXG4gIC8qKiBgRXZlbnRUYXJnZXRgIHRvIGRpc3BhdGNoIGV2ZW50cy4gKi9cbiAgcHJpdmF0ZSBldmVudFRhcmdldDogRXZlbnRUYXJnZXQgPSB0aGlzLndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAvKiogVGhlIG5leHQgdW5pcXVlIGlkIGZvciBjcmVhdGVkIGVudHJpZXMuIFJlcGxhY2UgcmVjcmVhdGVzIHRoaXMgaWQuICovXG4gIHByaXZhdGUgbmV4dElkID0gMDtcblxuICAvKiogVGhlIG5leHQgdW5pcXVlIGtleSBmb3IgY3JlYXRlZCBlbnRyaWVzLiBSZXBsYWNlIGluaGVyaXRzIHRoaXMgaWQuICovXG4gIHByaXZhdGUgbmV4dEtleSA9IDA7XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBmYWtlIGlzIGRpc3Bvc2VkLiAqL1xuICBwcml2YXRlIGRpc3Bvc2VkID0gZmFsc2U7XG5cbiAgLyoqIEVxdWl2YWxlbnQgdG8gYG5hdmlnYXRpb24uY3VycmVudEVudHJ5YC4gKi9cbiAgZ2V0IGN1cnJlbnRFbnRyeSgpOiBGYWtlTmF2aWdhdGlvbkhpc3RvcnlFbnRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllc0Fyclt0aGlzLmN1cnJlbnRFbnRyeUluZGV4XTtcbiAgfVxuXG4gIGdldCBjYW5Hb0JhY2soKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEVudHJ5SW5kZXggPiAwO1xuICB9XG5cbiAgZ2V0IGNhbkdvRm9yd2FyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RW50cnlJbmRleCA8IHRoaXMuZW50cmllc0Fyci5sZW5ndGggLSAxO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3c6IFdpbmRvdyxcbiAgICBzdGFydFVSTDogYGh0dHAke3N0cmluZ31gLFxuICApIHtcbiAgICAvLyBGaXJzdCBlbnRyeS5cbiAgICB0aGlzLnNldEluaXRpYWxFbnRyeUZvclRlc3Rpbmcoc3RhcnRVUkwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluaXRpYWwgZW50cnkuXG4gICAqL1xuICBwcml2YXRlIHNldEluaXRpYWxFbnRyeUZvclRlc3RpbmcoXG4gICAgdXJsOiBgaHR0cCR7c3RyaW5nfWAsXG4gICAgb3B0aW9uczoge2hpc3RvcnlTdGF0ZTogdW5rbm93bjsgc3RhdGU/OiB1bmtub3dufSA9IHtoaXN0b3J5U3RhdGU6IG51bGx9LFxuICApIHtcbiAgICBpZiAoIXRoaXMuY2FuU2V0SW5pdGlhbEVudHJ5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdzZXRJbml0aWFsRW50cnlGb3JUZXN0aW5nIGNhbiBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgYW55ICcgKyAnbmF2aWdhdGlvbiBoYXMgb2NjdXJyZWQnLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEluaXRpYWxFbnRyeSA9IHRoaXMuZW50cmllc0FyclswXTtcbiAgICB0aGlzLmVudHJpZXNBcnJbMF0gPSBuZXcgRmFrZU5hdmlnYXRpb25IaXN0b3J5RW50cnkobmV3IFVSTCh1cmwpLnRvU3RyaW5nKCksIHtcbiAgICAgIGluZGV4OiAwLFxuICAgICAga2V5OiBjdXJyZW50SW5pdGlhbEVudHJ5Py5rZXkgPz8gU3RyaW5nKHRoaXMubmV4dEtleSsrKSxcbiAgICAgIGlkOiBjdXJyZW50SW5pdGlhbEVudHJ5Py5pZCA/PyBTdHJpbmcodGhpcy5uZXh0SWQrKyksXG4gICAgICBzYW1lRG9jdW1lbnQ6IHRydWUsXG4gICAgICBoaXN0b3J5U3RhdGU6IG9wdGlvbnM/Lmhpc3RvcnlTdGF0ZSxcbiAgICAgIHN0YXRlOiBvcHRpb25zLnN0YXRlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJldHVybnMgd2hldGhlciB0aGUgaW5pdGlhbCBlbnRyeSBpcyBzdGlsbCBlbGlnaWJsZSB0byBiZSBzZXQuICovXG4gIGNhblNldEluaXRpYWxFbnRyeUZvclRlc3RpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FuU2V0SW5pdGlhbEVudHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgd2hldGhlciB0byBlbXVsYXRlIHRyYXZlcnNhbHMgYXMgc3luY2hyb25vdXMgcmF0aGVyIHRoYW5cbiAgICogYXN5bmNocm9ub3VzLlxuICAgKi9cbiAgc2V0U3luY2hyb25vdXNUcmF2ZXJzYWxzRm9yVGVzdGluZyhzeW5jaHJvbm91c1RyYXZlcnNhbHM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN5bmNocm9ub3VzVHJhdmVyc2FscyA9IHN5bmNocm9ub3VzVHJhdmVyc2FscztcbiAgfVxuXG4gIC8qKiBFcXVpdmFsZW50IHRvIGBuYXZpZ2F0aW9uLmVudHJpZXMoKWAuICovXG4gIGVudHJpZXMoKTogRmFrZU5hdmlnYXRpb25IaXN0b3J5RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllc0Fyci5zbGljZSgpO1xuICB9XG5cbiAgLyoqIEVxdWl2YWxlbnQgdG8gYG5hdmlnYXRpb24ubmF2aWdhdGUoKWAuICovXG4gIG5hdmlnYXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogTmF2aWdhdGlvbk5hdmlnYXRlT3B0aW9ucyk6IEZha2VOYXZpZ2F0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBmcm9tVXJsID0gbmV3IFVSTCh0aGlzLmN1cnJlbnRFbnRyeS51cmwhKTtcbiAgICBjb25zdCB0b1VybCA9IG5ldyBVUkwodXJsLCB0aGlzLmN1cnJlbnRFbnRyeS51cmwhKTtcblxuICAgIGxldCBuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGVTdHJpbmc7XG4gICAgaWYgKCFvcHRpb25zPy5oaXN0b3J5IHx8IG9wdGlvbnMuaGlzdG9yeSA9PT0gJ2F1dG8nKSB7XG4gICAgICAvLyBBdXRvIGRlZmF1bHRzIHRvIHB1c2gsIGJ1dCBpZiB0aGUgVVJMcyBhcmUgdGhlIHNhbWUsIGlzIGEgcmVwbGFjZS5cbiAgICAgIGlmIChmcm9tVXJsLnRvU3RyaW5nKCkgPT09IHRvVXJsLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgbmF2aWdhdGlvblR5cGUgPSAncmVwbGFjZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuYXZpZ2F0aW9uVHlwZSA9ICdwdXNoJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmF2aWdhdGlvblR5cGUgPSBvcHRpb25zLmhpc3Rvcnk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzaENoYW5nZSA9IGlzSGFzaENoYW5nZShmcm9tVXJsLCB0b1VybCk7XG5cbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IG5ldyBGYWtlTmF2aWdhdGlvbkRlc3RpbmF0aW9uKHtcbiAgICAgIHVybDogdG9VcmwudG9TdHJpbmcoKSxcbiAgICAgIHN0YXRlOiBvcHRpb25zPy5zdGF0ZSxcbiAgICAgIHNhbWVEb2N1bWVudDogaGFzaENoYW5nZSxcbiAgICAgIGhpc3RvcnlTdGF0ZTogbnVsbCxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgSW50ZXJuYWxOYXZpZ2F0aW9uUmVzdWx0KCk7XG5cbiAgICB0aGlzLnVzZXJBZ2VudE5hdmlnYXRlKGRlc3RpbmF0aW9uLCByZXN1bHQsIHtcbiAgICAgIG5hdmlnYXRpb25UeXBlLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgIGNhbkludGVyY2VwdDogdHJ1ZSxcbiAgICAgIC8vIEFsd2F5cyBmYWxzZSBmb3IgbmF2aWdhdGUoKS5cbiAgICAgIHVzZXJJbml0aWF0ZWQ6IGZhbHNlLFxuICAgICAgaGFzaENoYW5nZSxcbiAgICAgIGluZm86IG9wdGlvbnM/LmluZm8sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29tbWl0dGVkOiByZXN1bHQuY29tbWl0dGVkLFxuICAgICAgZmluaXNoZWQ6IHJlc3VsdC5maW5pc2hlZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEVxdWl2YWxlbnQgdG8gYGhpc3RvcnkucHVzaFN0YXRlKClgLiAqL1xuICBwdXNoU3RhdGUoZGF0YTogdW5rbm93biwgdGl0bGU6IHN0cmluZywgdXJsPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wdXNoT3JSZXBsYWNlU3RhdGUoJ3B1c2gnLCBkYXRhLCB0aXRsZSwgdXJsKTtcbiAgfVxuXG4gIC8qKiBFcXVpdmFsZW50IHRvIGBoaXN0b3J5LnJlcGxhY2VTdGF0ZSgpYC4gKi9cbiAgcmVwbGFjZVN0YXRlKGRhdGE6IHVua25vd24sIHRpdGxlOiBzdHJpbmcsIHVybD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucHVzaE9yUmVwbGFjZVN0YXRlKCdyZXBsYWNlJywgZGF0YSwgdGl0bGUsIHVybCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hPclJlcGxhY2VTdGF0ZShcbiAgICBuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGVTdHJpbmcsXG4gICAgZGF0YTogdW5rbm93bixcbiAgICBfdGl0bGU6IHN0cmluZyxcbiAgICB1cmw/OiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGZyb21VcmwgPSBuZXcgVVJMKHRoaXMuY3VycmVudEVudHJ5LnVybCEpO1xuICAgIGNvbnN0IHRvVXJsID0gdXJsID8gbmV3IFVSTCh1cmwsIHRoaXMuY3VycmVudEVudHJ5LnVybCEpIDogZnJvbVVybDtcblxuICAgIGNvbnN0IGhhc2hDaGFuZ2UgPSBpc0hhc2hDaGFuZ2UoZnJvbVVybCwgdG9VcmwpO1xuXG4gICAgY29uc3QgZGVzdGluYXRpb24gPSBuZXcgRmFrZU5hdmlnYXRpb25EZXN0aW5hdGlvbih7XG4gICAgICB1cmw6IHRvVXJsLnRvU3RyaW5nKCksXG4gICAgICBzYW1lRG9jdW1lbnQ6IHRydWUsXG4gICAgICBoaXN0b3J5U3RhdGU6IGRhdGEsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IEludGVybmFsTmF2aWdhdGlvblJlc3VsdCgpO1xuXG4gICAgdGhpcy51c2VyQWdlbnROYXZpZ2F0ZShkZXN0aW5hdGlvbiwgcmVzdWx0LCB7XG4gICAgICBuYXZpZ2F0aW9uVHlwZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICBjYW5JbnRlcmNlcHQ6IHRydWUsXG4gICAgICAvLyBBbHdheXMgZmFsc2UgZm9yIHB1c2hTdGF0ZSgpIG9yIHJlcGxhY2VTdGF0ZSgpLlxuICAgICAgdXNlckluaXRpYXRlZDogZmFsc2UsXG4gICAgICBoYXNoQ2hhbmdlLFxuICAgICAgc2tpcFBvcFN0YXRlOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEVxdWl2YWxlbnQgdG8gYG5hdmlnYXRpb24udHJhdmVyc2VUbygpYC4gKi9cbiAgdHJhdmVyc2VUbyhrZXk6IHN0cmluZywgb3B0aW9ucz86IE5hdmlnYXRpb25PcHRpb25zKTogRmFrZU5hdmlnYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IGZyb21VcmwgPSBuZXcgVVJMKHRoaXMuY3VycmVudEVudHJ5LnVybCEpO1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5maW5kRW50cnkoa2V5KTtcbiAgICBpZiAoIWVudHJ5KSB7XG4gICAgICBjb25zdCBkb21FeGNlcHRpb24gPSBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIGtleScsICdJbnZhbGlkU3RhdGVFcnJvcicpO1xuICAgICAgY29uc3QgY29tbWl0dGVkID0gUHJvbWlzZS5yZWplY3QoZG9tRXhjZXB0aW9uKTtcbiAgICAgIGNvbnN0IGZpbmlzaGVkID0gUHJvbWlzZS5yZWplY3QoZG9tRXhjZXB0aW9uKTtcbiAgICAgIGNvbW1pdHRlZC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICBmaW5pc2hlZC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21taXR0ZWQsXG4gICAgICAgIGZpbmlzaGVkLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGVudHJ5ID09PSB0aGlzLmN1cnJlbnRFbnRyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tbWl0dGVkOiBQcm9taXNlLnJlc29sdmUodGhpcy5jdXJyZW50RW50cnkpLFxuICAgICAgICBmaW5pc2hlZDogUHJvbWlzZS5yZXNvbHZlKHRoaXMuY3VycmVudEVudHJ5KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLnRyYXZlcnNhbFF1ZXVlLmhhcyhlbnRyeS5rZXkpKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1Jlc3VsdCA9IHRoaXMudHJhdmVyc2FsUXVldWUuZ2V0KGVudHJ5LmtleSkhO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tbWl0dGVkOiBleGlzdGluZ1Jlc3VsdC5jb21taXR0ZWQsXG4gICAgICAgIGZpbmlzaGVkOiBleGlzdGluZ1Jlc3VsdC5maW5pc2hlZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgaGFzaENoYW5nZSA9IGlzSGFzaENoYW5nZShmcm9tVXJsLCBuZXcgVVJMKGVudHJ5LnVybCEsIHRoaXMuY3VycmVudEVudHJ5LnVybCEpKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IG5ldyBGYWtlTmF2aWdhdGlvbkRlc3RpbmF0aW9uKHtcbiAgICAgIHVybDogZW50cnkudXJsISxcbiAgICAgIHN0YXRlOiBlbnRyeS5nZXRTdGF0ZSgpLFxuICAgICAgaGlzdG9yeVN0YXRlOiBlbnRyeS5nZXRIaXN0b3J5U3RhdGUoKSxcbiAgICAgIGtleTogZW50cnkua2V5LFxuICAgICAgaWQ6IGVudHJ5LmlkLFxuICAgICAgaW5kZXg6IGVudHJ5LmluZGV4LFxuICAgICAgc2FtZURvY3VtZW50OiBlbnRyeS5zYW1lRG9jdW1lbnQsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9zcGVjdGl2ZUVudHJ5SW5kZXggPSBlbnRyeS5pbmRleDtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgSW50ZXJuYWxOYXZpZ2F0aW9uUmVzdWx0KCk7XG4gICAgdGhpcy50cmF2ZXJzYWxRdWV1ZS5zZXQoZW50cnkua2V5LCByZXN1bHQpO1xuICAgIHRoaXMucnVuVHJhdmVyc2FsKCgpID0+IHtcbiAgICAgIHRoaXMudHJhdmVyc2FsUXVldWUuZGVsZXRlKGVudHJ5LmtleSk7XG4gICAgICB0aGlzLnVzZXJBZ2VudE5hdmlnYXRlKGRlc3RpbmF0aW9uLCByZXN1bHQsIHtcbiAgICAgICAgbmF2aWdhdGlvblR5cGU6ICd0cmF2ZXJzZScsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgIGNhbkludGVyY2VwdDogdHJ1ZSxcbiAgICAgICAgLy8gQWx3YXlzIGZhbHNlIGZvciB0cmF2ZXJzZVRvKCkuXG4gICAgICAgIHVzZXJJbml0aWF0ZWQ6IGZhbHNlLFxuICAgICAgICBoYXNoQ2hhbmdlLFxuICAgICAgICBpbmZvOiBvcHRpb25zPy5pbmZvLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbW1pdHRlZDogcmVzdWx0LmNvbW1pdHRlZCxcbiAgICAgIGZpbmlzaGVkOiByZXN1bHQuZmluaXNoZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBFcXVpdmFsZW50IHRvIGBuYXZpZ2F0aW9uLmJhY2soKWAuICovXG4gIGJhY2sob3B0aW9ucz86IE5hdmlnYXRpb25PcHRpb25zKTogRmFrZU5hdmlnYXRpb25SZXN1bHQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRFbnRyeUluZGV4ID09PSAwKSB7XG4gICAgICBjb25zdCBkb21FeGNlcHRpb24gPSBuZXcgRE9NRXhjZXB0aW9uKCdDYW5ub3QgZ28gYmFjaycsICdJbnZhbGlkU3RhdGVFcnJvcicpO1xuICAgICAgY29uc3QgY29tbWl0dGVkID0gUHJvbWlzZS5yZWplY3QoZG9tRXhjZXB0aW9uKTtcbiAgICAgIGNvbnN0IGZpbmlzaGVkID0gUHJvbWlzZS5yZWplY3QoZG9tRXhjZXB0aW9uKTtcbiAgICAgIGNvbW1pdHRlZC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICBmaW5pc2hlZC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21taXR0ZWQsXG4gICAgICAgIGZpbmlzaGVkLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmVudHJpZXNBcnJbdGhpcy5jdXJyZW50RW50cnlJbmRleCAtIDFdO1xuICAgIHJldHVybiB0aGlzLnRyYXZlcnNlVG8oZW50cnkua2V5LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBFcXVpdmFsZW50IHRvIGBuYXZpZ2F0aW9uLmZvcndhcmQoKWAuICovXG4gIGZvcndhcmQob3B0aW9ucz86IE5hdmlnYXRpb25PcHRpb25zKTogRmFrZU5hdmlnYXRpb25SZXN1bHQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRFbnRyeUluZGV4ID09PSB0aGlzLmVudHJpZXNBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgY29uc3QgZG9tRXhjZXB0aW9uID0gbmV3IERPTUV4Y2VwdGlvbignQ2Fubm90IGdvIGZvcndhcmQnLCAnSW52YWxpZFN0YXRlRXJyb3InKTtcbiAgICAgIGNvbnN0IGNvbW1pdHRlZCA9IFByb21pc2UucmVqZWN0KGRvbUV4Y2VwdGlvbik7XG4gICAgICBjb25zdCBmaW5pc2hlZCA9IFByb21pc2UucmVqZWN0KGRvbUV4Y2VwdGlvbik7XG4gICAgICBjb21taXR0ZWQuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgZmluaXNoZWQuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tbWl0dGVkLFxuICAgICAgICBmaW5pc2hlZCxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzQXJyW3RoaXMuY3VycmVudEVudHJ5SW5kZXggKyAxXTtcbiAgICByZXR1cm4gdGhpcy50cmF2ZXJzZVRvKGVudHJ5LmtleSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRXF1aXZhbGVudCB0byBgaGlzdG9yeS5nbygpYC5cbiAgICogTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGRvZXMgbm90IGFjdHVhbGx5IHdvcmsgcHJlY2lzZWx5IHRvIGhvdyBDaHJvbWVcbiAgICogZG9lcywgaW5zdGVhZCBjaG9vc2luZyBhIHNpbXBsZXIgbW9kZWwgd2l0aCBsZXNzIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG4gICAqIENocm9tZSBoYXMgYSBmZXcgZWRnZSBjYXNlIG9wdGltaXphdGlvbnMsIGZvciBpbnN0YW5jZSB3aXRoIHJlcGVhdGVkXG4gICAqIGBiYWNrKCk7IGZvcndhcmQoKWAgY2hhaW5zIGl0IGNvbGxhcHNlcyBjZXJ0YWluIHRyYXZlcnNhbHMuXG4gICAqL1xuICBnbyhkaXJlY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5wcm9zcGVjdGl2ZUVudHJ5SW5kZXggKyBkaXJlY3Rpb247XG4gICAgaWYgKHRhcmdldEluZGV4ID49IHRoaXMuZW50cmllc0Fyci5sZW5ndGggfHwgdGFyZ2V0SW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvc3BlY3RpdmVFbnRyeUluZGV4ID0gdGFyZ2V0SW5kZXg7XG4gICAgdGhpcy5ydW5UcmF2ZXJzYWwoKCkgPT4ge1xuICAgICAgLy8gQ2hlY2sgYWdhaW4gdGhhdCBkZXN0aW5hdGlvbiBpcyBpbiB0aGUgZW50cmllcyBhcnJheS5cbiAgICAgIGlmICh0YXJnZXRJbmRleCA+PSB0aGlzLmVudHJpZXNBcnIubGVuZ3RoIHx8IHRhcmdldEluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBmcm9tVXJsID0gbmV3IFVSTCh0aGlzLmN1cnJlbnRFbnRyeS51cmwhKTtcbiAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzQXJyW3RhcmdldEluZGV4XTtcbiAgICAgIGNvbnN0IGhhc2hDaGFuZ2UgPSBpc0hhc2hDaGFuZ2UoZnJvbVVybCwgbmV3IFVSTChlbnRyeS51cmwhLCB0aGlzLmN1cnJlbnRFbnRyeS51cmwhKSk7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbiA9IG5ldyBGYWtlTmF2aWdhdGlvbkRlc3RpbmF0aW9uKHtcbiAgICAgICAgdXJsOiBlbnRyeS51cmwhLFxuICAgICAgICBzdGF0ZTogZW50cnkuZ2V0U3RhdGUoKSxcbiAgICAgICAgaGlzdG9yeVN0YXRlOiBlbnRyeS5nZXRIaXN0b3J5U3RhdGUoKSxcbiAgICAgICAga2V5OiBlbnRyeS5rZXksXG4gICAgICAgIGlkOiBlbnRyeS5pZCxcbiAgICAgICAgaW5kZXg6IGVudHJ5LmluZGV4LFxuICAgICAgICBzYW1lRG9jdW1lbnQ6IGVudHJ5LnNhbWVEb2N1bWVudCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEludGVybmFsTmF2aWdhdGlvblJlc3VsdCgpO1xuICAgICAgdGhpcy51c2VyQWdlbnROYXZpZ2F0ZShkZXN0aW5hdGlvbiwgcmVzdWx0LCB7XG4gICAgICAgIG5hdmlnYXRpb25UeXBlOiAndHJhdmVyc2UnLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICBjYW5JbnRlcmNlcHQ6IHRydWUsXG4gICAgICAgIC8vIEFsd2F5cyBmYWxzZSBmb3IgZ28oKS5cbiAgICAgICAgdXNlckluaXRpYXRlZDogZmFsc2UsXG4gICAgICAgIGhhc2hDaGFuZ2UsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSdW5zIGEgdHJhdmVyc2FsIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkgKi9cbiAgcHJpdmF0ZSBydW5UcmF2ZXJzYWwodHJhdmVyc2FsOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuc3luY2hyb25vdXNUcmF2ZXJzYWxzKSB7XG4gICAgICB0cmF2ZXJzYWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFYWNoIHRyYXZlcnNhbCBvY2N1cGllcyBhIHNpbmdsZSB0aW1lb3V0IHJlc29sdXRpb24uXG4gICAgLy8gVGhpcyBtZWFucyB0aGF0IFByb21pc2VzIGFkZGVkIHRvIGNvbW1pdCBhbmQgZmluaXNoIHNob3VsZCByZXNvbHZlXG4gICAgLy8gYmVmb3JlIHRoZSBuZXh0IHRyYXZlcnNhbC5cbiAgICB0aGlzLm5leHRUcmF2ZXJzYWwgPSB0aGlzLm5leHRUcmF2ZXJzYWwudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIHRyYXZlcnNhbCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEVxdWl2YWxlbnQgdG8gYG5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcigpYC4gKi9cbiAgYWRkRXZlbnRMaXN0ZW5lcihcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsXG4gICAgb3B0aW9ucz86IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIHwgYm9vbGVhbixcbiAgKSB7XG4gICAgdGhpcy5ldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBFcXVpdmFsZW50IHRvIGBuYXZpZ2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoKWAuICovXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LFxuICAgIG9wdGlvbnM/OiBFdmVudExpc3RlbmVyT3B0aW9ucyB8IGJvb2xlYW4sXG4gICkge1xuICAgIHRoaXMuZXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogRXF1aXZhbGVudCB0byBgbmF2aWdhdGlvbi5kaXNwYXRjaEV2ZW50KClgICovXG4gIGRpc3BhdGNoRXZlbnQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRUYXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH1cblxuICAvKiogQ2xlYW5zIHVwIHJlc291cmNlcy4gKi9cbiAgZGlzcG9zZSgpIHtcbiAgICAvLyBSZWNyZWF0ZSBldmVudFRhcmdldCB0byByZWxlYXNlIGN1cnJlbnQgbGlzdGVuZXJzLlxuICAgIC8vIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50YCBiZWNhdXNlIE5vZGVKUyBgRXZlbnRUYXJnZXRgIGlzIGluY29tcGF0aWJsZSB3aXRoIERvbWlubydzIGBFdmVudGAuXG4gICAgdGhpcy5ldmVudFRhcmdldCA9IHRoaXMud2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqIFJldHVybnMgd2hldGhlciB0aGlzIGZha2UgaXMgZGlzcG9zZWQuICovXG4gIGlzRGlzcG9zZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcG9zZWQ7XG4gIH1cblxuICAvKiogSW1wbGVtZW50YXRpb24gZm9yIGFsbCBuYXZpZ2F0aW9ucyBhbmQgdHJhdmVyc2Fscy4gKi9cbiAgcHJpdmF0ZSB1c2VyQWdlbnROYXZpZ2F0ZShcbiAgICBkZXN0aW5hdGlvbjogRmFrZU5hdmlnYXRpb25EZXN0aW5hdGlvbixcbiAgICByZXN1bHQ6IEludGVybmFsTmF2aWdhdGlvblJlc3VsdCxcbiAgICBvcHRpb25zOiBJbnRlcm5hbE5hdmlnYXRlT3B0aW9ucyxcbiAgKSB7XG4gICAgLy8gVGhlIGZpcnN0IG5hdmlnYXRpb24gc2hvdWxkIGRpc2FsbG93IGFueSBmdXR1cmUgY2FsbHMgdG8gc2V0IHRoZSBpbml0aWFsXG4gICAgLy8gZW50cnkuXG4gICAgdGhpcy5jYW5TZXRJbml0aWFsRW50cnkgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5uYXZpZ2F0ZUV2ZW50KSB7XG4gICAgICB0aGlzLm5hdmlnYXRlRXZlbnQuY2FuY2VsKG5ldyBET01FeGNlcHRpb24oJ05hdmlnYXRpb24gd2FzIGFib3J0ZWQnLCAnQWJvcnRFcnJvcicpKTtcbiAgICAgIHRoaXMubmF2aWdhdGVFdmVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBuYXZpZ2F0ZUV2ZW50ID0gY3JlYXRlRmFrZU5hdmlnYXRlRXZlbnQoe1xuICAgICAgbmF2aWdhdGlvblR5cGU6IG9wdGlvbnMubmF2aWdhdGlvblR5cGUsXG4gICAgICBjYW5jZWxhYmxlOiBvcHRpb25zLmNhbmNlbGFibGUsXG4gICAgICBjYW5JbnRlcmNlcHQ6IG9wdGlvbnMuY2FuSW50ZXJjZXB0LFxuICAgICAgdXNlckluaXRpYXRlZDogb3B0aW9ucy51c2VySW5pdGlhdGVkLFxuICAgICAgaGFzaENoYW5nZTogb3B0aW9ucy5oYXNoQ2hhbmdlLFxuICAgICAgc2lnbmFsOiByZXN1bHQuc2lnbmFsLFxuICAgICAgZGVzdGluYXRpb24sXG4gICAgICBpbmZvOiBvcHRpb25zLmluZm8sXG4gICAgICBzYW1lRG9jdW1lbnQ6IGRlc3RpbmF0aW9uLnNhbWVEb2N1bWVudCxcbiAgICAgIHNraXBQb3BTdGF0ZTogb3B0aW9ucy5za2lwUG9wU3RhdGUsXG4gICAgICByZXN1bHQsXG4gICAgICB1c2VyQWdlbnRDb21taXQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy51c2VyQWdlbnRDb21taXQoKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hdmlnYXRlRXZlbnQgPSBuYXZpZ2F0ZUV2ZW50O1xuICAgIHRoaXMuZXZlbnRUYXJnZXQuZGlzcGF0Y2hFdmVudChuYXZpZ2F0ZUV2ZW50KTtcbiAgICBuYXZpZ2F0ZUV2ZW50LmRpc3BhdGNoZWROYXZpZ2F0ZUV2ZW50KCk7XG4gICAgaWYgKG5hdmlnYXRlRXZlbnQuY29tbWl0T3B0aW9uID09PSAnaW1tZWRpYXRlJykge1xuICAgICAgbmF2aWdhdGVFdmVudC5jb21taXQoLyogaW50ZXJuYWw9ICovIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBJbXBsZW1lbnRhdGlvbiB0byBjb21taXQgYSBuYXZpZ2F0aW9uLiAqL1xuICBwcml2YXRlIHVzZXJBZ2VudENvbW1pdCgpIHtcbiAgICBpZiAoIXRoaXMubmF2aWdhdGVFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmcm9tID0gdGhpcy5jdXJyZW50RW50cnk7XG4gICAgaWYgKCF0aGlzLm5hdmlnYXRlRXZlbnQuc2FtZURvY3VtZW50KSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignQ2Fubm90IG5hdmlnYXRlIHRvIGEgbm9uLXNhbWUtZG9jdW1lbnQgVVJMLicpO1xuICAgICAgdGhpcy5uYXZpZ2F0ZUV2ZW50LmNhbmNlbChlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5uYXZpZ2F0ZUV2ZW50Lm5hdmlnYXRpb25UeXBlID09PSAncHVzaCcgfHxcbiAgICAgIHRoaXMubmF2aWdhdGVFdmVudC5uYXZpZ2F0aW9uVHlwZSA9PT0gJ3JlcGxhY2UnXG4gICAgKSB7XG4gICAgICB0aGlzLnVzZXJBZ2VudFB1c2hPclJlcGxhY2UodGhpcy5uYXZpZ2F0ZUV2ZW50LmRlc3RpbmF0aW9uLCB7XG4gICAgICAgIG5hdmlnYXRpb25UeXBlOiB0aGlzLm5hdmlnYXRlRXZlbnQubmF2aWdhdGlvblR5cGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubmF2aWdhdGVFdmVudC5uYXZpZ2F0aW9uVHlwZSA9PT0gJ3RyYXZlcnNlJykge1xuICAgICAgdGhpcy51c2VyQWdlbnRUcmF2ZXJzZSh0aGlzLm5hdmlnYXRlRXZlbnQuZGVzdGluYXRpb24pO1xuICAgIH1cbiAgICB0aGlzLm5hdmlnYXRlRXZlbnQudXNlckFnZW50TmF2aWdhdGVkKHRoaXMuY3VycmVudEVudHJ5KTtcbiAgICBjb25zdCBjdXJyZW50RW50cnlDaGFuZ2VFdmVudCA9IGNyZWF0ZUZha2VOYXZpZ2F0aW9uQ3VycmVudEVudHJ5Q2hhbmdlRXZlbnQoe1xuICAgICAgZnJvbSxcbiAgICAgIG5hdmlnYXRpb25UeXBlOiB0aGlzLm5hdmlnYXRlRXZlbnQubmF2aWdhdGlvblR5cGUsXG4gICAgfSk7XG4gICAgdGhpcy5ldmVudFRhcmdldC5kaXNwYXRjaEV2ZW50KGN1cnJlbnRFbnRyeUNoYW5nZUV2ZW50KTtcbiAgICBpZiAoIXRoaXMubmF2aWdhdGVFdmVudC5za2lwUG9wU3RhdGUpIHtcbiAgICAgIGNvbnN0IHBvcFN0YXRlRXZlbnQgPSBjcmVhdGVQb3BTdGF0ZUV2ZW50KHtcbiAgICAgICAgc3RhdGU6IHRoaXMubmF2aWdhdGVFdmVudC5kZXN0aW5hdGlvbi5nZXRIaXN0b3J5U3RhdGUoKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy53aW5kb3cuZGlzcGF0Y2hFdmVudChwb3BTdGF0ZUV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKiogSW1wbGVtZW50YXRpb24gZm9yIGEgcHVzaCBvciByZXBsYWNlIG5hdmlnYXRpb24uICovXG4gIHByaXZhdGUgdXNlckFnZW50UHVzaE9yUmVwbGFjZShcbiAgICBkZXN0aW5hdGlvbjogRmFrZU5hdmlnYXRpb25EZXN0aW5hdGlvbixcbiAgICB7bmF2aWdhdGlvblR5cGV9OiB7bmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlU3RyaW5nfSxcbiAgKSB7XG4gICAgaWYgKG5hdmlnYXRpb25UeXBlID09PSAncHVzaCcpIHtcbiAgICAgIHRoaXMuY3VycmVudEVudHJ5SW5kZXgrKztcbiAgICAgIHRoaXMucHJvc3BlY3RpdmVFbnRyeUluZGV4ID0gdGhpcy5jdXJyZW50RW50cnlJbmRleDtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFbnRyeUluZGV4O1xuICAgIGNvbnN0IGtleSA9IG5hdmlnYXRpb25UeXBlID09PSAncHVzaCcgPyBTdHJpbmcodGhpcy5uZXh0S2V5KyspIDogdGhpcy5jdXJyZW50RW50cnkua2V5O1xuICAgIGNvbnN0IGVudHJ5ID0gbmV3IEZha2VOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5KGRlc3RpbmF0aW9uLnVybCwge1xuICAgICAgaWQ6IFN0cmluZyh0aGlzLm5leHRJZCsrKSxcbiAgICAgIGtleSxcbiAgICAgIGluZGV4LFxuICAgICAgc2FtZURvY3VtZW50OiB0cnVlLFxuICAgICAgc3RhdGU6IGRlc3RpbmF0aW9uLmdldFN0YXRlKCksXG4gICAgICBoaXN0b3J5U3RhdGU6IGRlc3RpbmF0aW9uLmdldEhpc3RvcnlTdGF0ZSgpLFxuICAgIH0pO1xuICAgIGlmIChuYXZpZ2F0aW9uVHlwZSA9PT0gJ3B1c2gnKSB7XG4gICAgICB0aGlzLmVudHJpZXNBcnIuc3BsaWNlKGluZGV4LCBJbmZpbml0eSwgZW50cnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVudHJpZXNBcnJbaW5kZXhdID0gZW50cnk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEltcGxlbWVudGF0aW9uIGZvciBhIHRyYXZlcnNlIG5hdmlnYXRpb24uICovXG4gIHByaXZhdGUgdXNlckFnZW50VHJhdmVyc2UoZGVzdGluYXRpb246IEZha2VOYXZpZ2F0aW9uRGVzdGluYXRpb24pIHtcbiAgICB0aGlzLmN1cnJlbnRFbnRyeUluZGV4ID0gZGVzdGluYXRpb24uaW5kZXg7XG4gIH1cblxuICAvKiogVXRpbGl0eSBtZXRob2QgZm9yIGZpbmRpbmcgZW50cmllcyB3aXRoIHRoZSBnaXZlbiBga2V5YC4gKi9cbiAgcHJpdmF0ZSBmaW5kRW50cnkoa2V5OiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc0Fycikge1xuICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSByZXR1cm4gZW50cnk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzZXQgb25uYXZpZ2F0ZShfaGFuZGxlcjogKCh0aGlzOiBOYXZpZ2F0aW9uLCBldjogTmF2aWdhdGVFdmVudCkgPT4gYW55KSB8IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGdldCBvbm5hdmlnYXRlKCk6ICgodGhpczogTmF2aWdhdGlvbiwgZXY6IE5hdmlnYXRlRXZlbnQpID0+IGFueSkgfCBudWxsIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHNldCBvbmN1cnJlbnRlbnRyeWNoYW5nZShcbiAgICBfaGFuZGxlcjogKCh0aGlzOiBOYXZpZ2F0aW9uLCBldjogTmF2aWdhdGlvbkN1cnJlbnRFbnRyeUNoYW5nZUV2ZW50KSA9PiBhbnkpIHwgbnVsbCxcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQgb25jdXJyZW50ZW50cnljaGFuZ2UoKTpcbiAgICB8ICgodGhpczogTmF2aWdhdGlvbiwgZXY6IE5hdmlnYXRpb25DdXJyZW50RW50cnlDaGFuZ2VFdmVudCkgPT4gYW55KVxuICAgIHwgbnVsbCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICBzZXQgb25uYXZpZ2F0ZXN1Y2Nlc3MoX2hhbmRsZXI6ICgodGhpczogTmF2aWdhdGlvbiwgZXY6IEV2ZW50KSA9PiBhbnkpIHwgbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5pbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0IG9ubmF2aWdhdGVzdWNjZXNzKCk6ICgodGhpczogTmF2aWdhdGlvbiwgZXY6IEV2ZW50KSA9PiBhbnkpIHwgbnVsbCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICBzZXQgb25uYXZpZ2F0ZWVycm9yKF9oYW5kbGVyOiAoKHRoaXM6IE5hdmlnYXRpb24sIGV2OiBFcnJvckV2ZW50KSA9PiBhbnkpIHwgbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5pbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0IG9ubmF2aWdhdGVlcnJvcigpOiAoKHRoaXM6IE5hdmlnYXRpb24sIGV2OiBFcnJvckV2ZW50KSA9PiBhbnkpIHwgbnVsbCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQgdHJhbnNpdGlvbigpOiBOYXZpZ2F0aW9uVHJhbnNpdGlvbiB8IG51bGwge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5pbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgdXBkYXRlQ3VycmVudEVudHJ5KF9vcHRpb25zOiBOYXZpZ2F0aW9uVXBkYXRlQ3VycmVudEVudHJ5T3B0aW9ucyk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5pbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgcmVsb2FkKF9vcHRpb25zPzogTmF2aWdhdGlvblJlbG9hZE9wdGlvbnMpOiBOYXZpZ2F0aW9uUmVzdWx0IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG4vKipcbiAqIEZha2UgZXF1aXZhbGVudCBvZiB0aGUgYE5hdmlnYXRpb25SZXN1bHRgIGludGVyZmFjZSB3aXRoXG4gKiBgRmFrZU5hdmlnYXRpb25IaXN0b3J5RW50cnlgLlxuICovXG5pbnRlcmZhY2UgRmFrZU5hdmlnYXRpb25SZXN1bHQgZXh0ZW5kcyBOYXZpZ2F0aW9uUmVzdWx0IHtcbiAgcmVhZG9ubHkgY29tbWl0dGVkOiBQcm9taXNlPEZha2VOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5PjtcbiAgcmVhZG9ubHkgZmluaXNoZWQ6IFByb21pc2U8RmFrZU5hdmlnYXRpb25IaXN0b3J5RW50cnk+O1xufVxuXG4vKipcbiAqIEZha2UgZXF1aXZhbGVudCBvZiBgTmF2aWdhdGlvbkhpc3RvcnlFbnRyeWAuXG4gKi9cbmV4cG9ydCBjbGFzcyBGYWtlTmF2aWdhdGlvbkhpc3RvcnlFbnRyeSBpbXBsZW1lbnRzIE5hdmlnYXRpb25IaXN0b3J5RW50cnkge1xuICByZWFkb25seSBzYW1lRG9jdW1lbnQ7XG5cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGU6IHVua25vd247XG4gIHByaXZhdGUgcmVhZG9ubHkgaGlzdG9yeVN0YXRlOiB1bmtub3duO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgb25kaXNwb3NlOiAoKHRoaXM6IE5hdmlnYXRpb25IaXN0b3J5RW50cnksIGV2OiBFdmVudCkgPT4gYW55KSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHVybDogc3RyaW5nIHwgbnVsbCxcbiAgICB7XG4gICAgICBpZCxcbiAgICAgIGtleSxcbiAgICAgIGluZGV4LFxuICAgICAgc2FtZURvY3VtZW50LFxuICAgICAgc3RhdGUsXG4gICAgICBoaXN0b3J5U3RhdGUsXG4gICAgfToge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIGtleTogc3RyaW5nO1xuICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgIHNhbWVEb2N1bWVudDogYm9vbGVhbjtcbiAgICAgIGhpc3RvcnlTdGF0ZTogdW5rbm93bjtcbiAgICAgIHN0YXRlPzogdW5rbm93bjtcbiAgICB9LFxuICApIHtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgIHRoaXMuc2FtZURvY3VtZW50ID0gc2FtZURvY3VtZW50O1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmhpc3RvcnlTdGF0ZSA9IGhpc3RvcnlTdGF0ZTtcbiAgfVxuXG4gIGdldFN0YXRlKCk6IHVua25vd24ge1xuICAgIC8vIEJ1ZGdldCBjb3B5LlxuICAgIHJldHVybiB0aGlzLnN0YXRlID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRlKSkgOiB0aGlzLnN0YXRlO1xuICB9XG5cbiAgZ2V0SGlzdG9yeVN0YXRlKCk6IHVua25vd24ge1xuICAgIC8vIEJ1ZGdldCBjb3B5LlxuICAgIHJldHVybiB0aGlzLmhpc3RvcnlTdGF0ZSA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5oaXN0b3J5U3RhdGUpKSA6IHRoaXMuaGlzdG9yeVN0YXRlO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcihcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsXG4gICAgb3B0aW9ucz86IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIHwgYm9vbGVhbixcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyKFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBjYWxsYmFjazogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCxcbiAgICBvcHRpb25zPzogRXZlbnRMaXN0ZW5lck9wdGlvbnMgfCBib29sZWFuLFxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGRpc3BhdGNoRXZlbnQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuLyoqIGBOYXZpZ2F0aW9uSW50ZXJjZXB0T3B0aW9uc2Agd2l0aCBleHBlcmltZW50YWwgY29tbWl0IG9wdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwZXJpbWVudGFsTmF2aWdhdGlvbkludGVyY2VwdE9wdGlvbnMgZXh0ZW5kcyBOYXZpZ2F0aW9uSW50ZXJjZXB0T3B0aW9ucyB7XG4gIGNvbW1pdD86ICdpbW1lZGlhdGUnIHwgJ2FmdGVyLXRyYW5zaXRpb24nO1xufVxuXG4vKiogYE5hdmlnYXRlRXZlbnRgIHdpdGggZXhwZXJpbWVudGFsIGNvbW1pdCBmdW5jdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwZXJpbWVudGFsTmF2aWdhdGVFdmVudCBleHRlbmRzIE5hdmlnYXRlRXZlbnQge1xuICBpbnRlcmNlcHQob3B0aW9ucz86IEV4cGVyaW1lbnRhbE5hdmlnYXRpb25JbnRlcmNlcHRPcHRpb25zKTogdm9pZDtcblxuICBjb21taXQoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBGYWtlIGVxdWl2YWxlbnQgb2YgYE5hdmlnYXRlRXZlbnRgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZha2VOYXZpZ2F0ZUV2ZW50IGV4dGVuZHMgRXhwZXJpbWVudGFsTmF2aWdhdGVFdmVudCB7XG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBGYWtlTmF2aWdhdGlvbkRlc3RpbmF0aW9uO1xufVxuXG5pbnRlcmZhY2UgSW50ZXJuYWxGYWtlTmF2aWdhdGVFdmVudCBleHRlbmRzIEZha2VOYXZpZ2F0ZUV2ZW50IHtcbiAgcmVhZG9ubHkgc2FtZURvY3VtZW50OiBib29sZWFuO1xuICByZWFkb25seSBza2lwUG9wU3RhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBjb21taXRPcHRpb246ICdhZnRlci10cmFuc2l0aW9uJyB8ICdpbW1lZGlhdGUnO1xuICByZWFkb25seSByZXN1bHQ6IEludGVybmFsTmF2aWdhdGlvblJlc3VsdDtcblxuICBjb21taXQoaW50ZXJuYWw/OiBib29sZWFuKTogdm9pZDtcbiAgY2FuY2VsKHJlYXNvbjogRXJyb3IpOiB2b2lkO1xuICBkaXNwYXRjaGVkTmF2aWdhdGVFdmVudCgpOiB2b2lkO1xuICB1c2VyQWdlbnROYXZpZ2F0ZWQoZW50cnk6IEZha2VOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5KTogdm9pZDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmYWtlIGVxdWl2YWxlbnQgb2YgYE5hdmlnYXRlRXZlbnRgLiBUaGlzIGlzIG5vdCBhIGNsYXNzIGJlY2F1c2UgRVM1XG4gKiB0cmFuc3BpbGVkIEphdmFTY3JpcHQgY2Fubm90IGV4dGVuZCBuYXRpdmUgRXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZha2VOYXZpZ2F0ZUV2ZW50KHtcbiAgY2FuY2VsYWJsZSxcbiAgY2FuSW50ZXJjZXB0LFxuICB1c2VySW5pdGlhdGVkLFxuICBoYXNoQ2hhbmdlLFxuICBuYXZpZ2F0aW9uVHlwZSxcbiAgc2lnbmFsLFxuICBkZXN0aW5hdGlvbixcbiAgaW5mbyxcbiAgc2FtZURvY3VtZW50LFxuICBza2lwUG9wU3RhdGUsXG4gIHJlc3VsdCxcbiAgdXNlckFnZW50Q29tbWl0LFxufToge1xuICBjYW5jZWxhYmxlOiBib29sZWFuO1xuICBjYW5JbnRlcmNlcHQ6IGJvb2xlYW47XG4gIHVzZXJJbml0aWF0ZWQ6IGJvb2xlYW47XG4gIGhhc2hDaGFuZ2U6IGJvb2xlYW47XG4gIG5hdmlnYXRpb25UeXBlOiBOYXZpZ2F0aW9uVHlwZVN0cmluZztcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgZGVzdGluYXRpb246IEZha2VOYXZpZ2F0aW9uRGVzdGluYXRpb247XG4gIGluZm86IHVua25vd247XG4gIHNhbWVEb2N1bWVudDogYm9vbGVhbjtcbiAgc2tpcFBvcFN0YXRlPzogYm9vbGVhbjtcbiAgcmVzdWx0OiBJbnRlcm5hbE5hdmlnYXRpb25SZXN1bHQ7XG4gIHVzZXJBZ2VudENvbW1pdDogKCkgPT4gdm9pZDtcbn0pIHtcbiAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQoJ25hdmlnYXRlJywge2J1YmJsZXM6IGZhbHNlLCBjYW5jZWxhYmxlfSkgYXMge1xuICAgIC1yZWFkb25seSBbUCBpbiBrZXlvZiBJbnRlcm5hbEZha2VOYXZpZ2F0ZUV2ZW50XTogSW50ZXJuYWxGYWtlTmF2aWdhdGVFdmVudFtQXTtcbiAgfTtcbiAgZXZlbnQuY2FuSW50ZXJjZXB0ID0gY2FuSW50ZXJjZXB0O1xuICBldmVudC51c2VySW5pdGlhdGVkID0gdXNlckluaXRpYXRlZDtcbiAgZXZlbnQuaGFzaENoYW5nZSA9IGhhc2hDaGFuZ2U7XG4gIGV2ZW50Lm5hdmlnYXRpb25UeXBlID0gbmF2aWdhdGlvblR5cGU7XG4gIGV2ZW50LnNpZ25hbCA9IHNpZ25hbDtcbiAgZXZlbnQuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgZXZlbnQuaW5mbyA9IGluZm87XG4gIGV2ZW50LmRvd25sb2FkUmVxdWVzdCA9IG51bGw7XG4gIGV2ZW50LmZvcm1EYXRhID0gbnVsbDtcblxuICBldmVudC5zYW1lRG9jdW1lbnQgPSBzYW1lRG9jdW1lbnQ7XG4gIGV2ZW50LnNraXBQb3BTdGF0ZSA9IHNraXBQb3BTdGF0ZTtcbiAgZXZlbnQuY29tbWl0T3B0aW9uID0gJ2ltbWVkaWF0ZSc7XG5cbiAgbGV0IGhhbmRsZXJGaW5pc2hlZDogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgbGV0IGludGVyY2VwdENhbGxlZCA9IGZhbHNlO1xuICBsZXQgZGlzcGF0Y2hlZE5hdmlnYXRlRXZlbnQgPSBmYWxzZTtcbiAgbGV0IGNvbW1pdENhbGxlZCA9IGZhbHNlO1xuXG4gIGV2ZW50LmludGVyY2VwdCA9IGZ1bmN0aW9uIChcbiAgICB0aGlzOiBJbnRlcm5hbEZha2VOYXZpZ2F0ZUV2ZW50LFxuICAgIG9wdGlvbnM/OiBFeHBlcmltZW50YWxOYXZpZ2F0aW9uSW50ZXJjZXB0T3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgaW50ZXJjZXB0Q2FsbGVkID0gdHJ1ZTtcbiAgICBldmVudC5zYW1lRG9jdW1lbnQgPSB0cnVlO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBvcHRpb25zPy5oYW5kbGVyO1xuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyRmluaXNoZWQgPSBoYW5kbGVyKCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5jb21taXQpIHtcbiAgICAgIGV2ZW50LmNvbW1pdE9wdGlvbiA9IG9wdGlvbnMuY29tbWl0O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uZm9jdXNSZXNldCAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnM/LnNjcm9sbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuaW1wbGVtZW50ZWQnKTtcbiAgICB9XG4gIH07XG5cbiAgZXZlbnQuc2Nyb2xsID0gZnVuY3Rpb24gKHRoaXM6IEludGVybmFsRmFrZU5hdmlnYXRlRXZlbnQpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuaW1wbGVtZW50ZWQnKTtcbiAgfTtcblxuICBldmVudC5jb21taXQgPSBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxGYWtlTmF2aWdhdGVFdmVudCwgaW50ZXJuYWwgPSBmYWxzZSkge1xuICAgIGlmICghaW50ZXJuYWwgJiYgIWludGVyY2VwdENhbGxlZCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEZhaWxlZCB0byBleGVjdXRlICdjb21taXQnIG9uICdOYXZpZ2F0ZUV2ZW50JzogaW50ZXJjZXB0KCkgbXVzdCBiZSBgICtcbiAgICAgICAgICBgY2FsbGVkIGJlZm9yZSBjb21taXQoKS5gLFxuICAgICAgICAnSW52YWxpZFN0YXRlRXJyb3InLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFkaXNwYXRjaGVkTmF2aWdhdGVFdmVudCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEZhaWxlZCB0byBleGVjdXRlICdjb21taXQnIG9uICdOYXZpZ2F0ZUV2ZW50JzogY29tbWl0KCkgbWF5IG5vdCBiZSBgICtcbiAgICAgICAgICBgY2FsbGVkIGR1cmluZyBldmVudCBkaXNwYXRjaC5gLFxuICAgICAgICAnSW52YWxpZFN0YXRlRXJyb3InLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvbW1pdENhbGxlZCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEZhaWxlZCB0byBleGVjdXRlICdjb21taXQnIG9uICdOYXZpZ2F0ZUV2ZW50JzogY29tbWl0KCkgYWxyZWFkeSBgICsgYGNhbGxlZC5gLFxuICAgICAgICAnSW52YWxpZFN0YXRlRXJyb3InLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29tbWl0Q2FsbGVkID0gdHJ1ZTtcblxuICAgIHVzZXJBZ2VudENvbW1pdCgpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIG9ubHkuXG4gIGV2ZW50LmNhbmNlbCA9IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbEZha2VOYXZpZ2F0ZUV2ZW50LCByZWFzb246IEVycm9yKSB7XG4gICAgcmVzdWx0LmNvbW1pdHRlZFJlamVjdChyZWFzb24pO1xuICAgIHJlc3VsdC5maW5pc2hlZFJlamVjdChyZWFzb24pO1xuICB9O1xuXG4gIC8vIEludGVybmFsIG9ubHkuXG4gIGV2ZW50LmRpc3BhdGNoZWROYXZpZ2F0ZUV2ZW50ID0gZnVuY3Rpb24gKHRoaXM6IEludGVybmFsRmFrZU5hdmlnYXRlRXZlbnQpIHtcbiAgICBkaXNwYXRjaGVkTmF2aWdhdGVFdmVudCA9IHRydWU7XG4gICAgaWYgKGV2ZW50LmNvbW1pdE9wdGlvbiA9PT0gJ2FmdGVyLXRyYW5zaXRpb24nKSB7XG4gICAgICAvLyBJZiBoYW5kbGVyIGZpbmlzaGVzIGJlZm9yZSBjb21taXQsIGNhbGwgY29tbWl0LlxuICAgICAgaGFuZGxlckZpbmlzaGVkPy50aGVuKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKCFjb21taXRDYWxsZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LmNvbW1pdCgvKiBpbnRlcm5hbCAqLyB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHt9LFxuICAgICAgKTtcbiAgICB9XG4gICAgUHJvbWlzZS5hbGwoW3Jlc3VsdC5jb21taXR0ZWQsIGhhbmRsZXJGaW5pc2hlZF0pLnRoZW4oXG4gICAgICAoW2VudHJ5XSkgPT4ge1xuICAgICAgICByZXN1bHQuZmluaXNoZWRSZXNvbHZlKGVudHJ5KTtcbiAgICAgIH0sXG4gICAgICAocmVhc29uKSA9PiB7XG4gICAgICAgIHJlc3VsdC5maW5pc2hlZFJlamVjdChyZWFzb24pO1xuICAgICAgfSxcbiAgICApO1xuICB9O1xuXG4gIC8vIEludGVybmFsIG9ubHkuXG4gIGV2ZW50LnVzZXJBZ2VudE5hdmlnYXRlZCA9IGZ1bmN0aW9uIChcbiAgICB0aGlzOiBJbnRlcm5hbEZha2VOYXZpZ2F0ZUV2ZW50LFxuICAgIGVudHJ5OiBGYWtlTmF2aWdhdGlvbkhpc3RvcnlFbnRyeSxcbiAgKSB7XG4gICAgcmVzdWx0LmNvbW1pdHRlZFJlc29sdmUoZW50cnkpO1xuICB9O1xuXG4gIHJldHVybiBldmVudCBhcyBJbnRlcm5hbEZha2VOYXZpZ2F0ZUV2ZW50O1xufVxuXG4vKiogRmFrZSBlcXVpdmFsZW50IG9mIGBOYXZpZ2F0aW9uQ3VycmVudEVudHJ5Q2hhbmdlRXZlbnRgLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWtlTmF2aWdhdGlvbkN1cnJlbnRFbnRyeUNoYW5nZUV2ZW50IGV4dGVuZHMgTmF2aWdhdGlvbkN1cnJlbnRFbnRyeUNoYW5nZUV2ZW50IHtcbiAgcmVhZG9ubHkgZnJvbTogRmFrZU5hdmlnYXRpb25IaXN0b3J5RW50cnk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZmFrZSBlcXVpdmFsZW50IG9mIGBOYXZpZ2F0aW9uQ3VycmVudEVudHJ5Q2hhbmdlYC4gVGhpcyBkb2VzIG5vdCB1c2VcbiAqIGEgY2xhc3MgYmVjYXVzZSBFUzUgdHJhbnNwaWxlZCBKYXZhU2NyaXB0IGNhbm5vdCBleHRlbmQgbmF0aXZlIEV2ZW50LlxuICovXG5mdW5jdGlvbiBjcmVhdGVGYWtlTmF2aWdhdGlvbkN1cnJlbnRFbnRyeUNoYW5nZUV2ZW50KHtcbiAgZnJvbSxcbiAgbmF2aWdhdGlvblR5cGUsXG59OiB7XG4gIGZyb206IEZha2VOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5O1xuICBuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGVTdHJpbmc7XG59KSB7XG4gIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KCdjdXJyZW50ZW50cnljaGFuZ2UnLCB7XG4gICAgYnViYmxlczogZmFsc2UsXG4gICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gIH0pIGFzIHtcbiAgICAtcmVhZG9ubHkgW1AgaW4ga2V5b2YgTmF2aWdhdGlvbkN1cnJlbnRFbnRyeUNoYW5nZUV2ZW50XTogTmF2aWdhdGlvbkN1cnJlbnRFbnRyeUNoYW5nZUV2ZW50W1BdO1xuICB9O1xuICBldmVudC5mcm9tID0gZnJvbTtcbiAgZXZlbnQubmF2aWdhdGlvblR5cGUgPSBuYXZpZ2F0aW9uVHlwZTtcbiAgcmV0dXJuIGV2ZW50IGFzIEZha2VOYXZpZ2F0aW9uQ3VycmVudEVudHJ5Q2hhbmdlRXZlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZmFrZSBlcXVpdmFsZW50IG9mIGBQb3BTdGF0ZUV2ZW50YC4gVGhpcyBkb2VzIG5vdCB1c2UgYSBjbGFzc1xuICogYmVjYXVzZSBFUzUgdHJhbnNwaWxlZCBKYXZhU2NyaXB0IGNhbm5vdCBleHRlbmQgbmF0aXZlIEV2ZW50LlxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3BTdGF0ZUV2ZW50KHtzdGF0ZX06IHtzdGF0ZTogdW5rbm93bn0pIHtcbiAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQoJ3BvcHN0YXRlJywge1xuICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICB9KSBhcyB7LXJlYWRvbmx5IFtQIGluIGtleW9mIFBvcFN0YXRlRXZlbnRdOiBQb3BTdGF0ZUV2ZW50W1BdfTtcbiAgZXZlbnQuc3RhdGUgPSBzdGF0ZTtcbiAgcmV0dXJuIGV2ZW50IGFzIFBvcFN0YXRlRXZlbnQ7XG59XG5cbi8qKlxuICogRmFrZSBlcXVpdmFsZW50IG9mIGBOYXZpZ2F0aW9uRGVzdGluYXRpb25gLlxuICovXG5leHBvcnQgY2xhc3MgRmFrZU5hdmlnYXRpb25EZXN0aW5hdGlvbiBpbXBsZW1lbnRzIE5hdmlnYXRpb25EZXN0aW5hdGlvbiB7XG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICByZWFkb25seSBzYW1lRG9jdW1lbnQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGtleTogc3RyaW5nIHwgbnVsbDtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZyB8IG51bGw7XG4gIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZT86IHVua25vd247XG4gIHByaXZhdGUgcmVhZG9ubHkgaGlzdG9yeVN0YXRlOiB1bmtub3duO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICB1cmwsXG4gICAgc2FtZURvY3VtZW50LFxuICAgIGhpc3RvcnlTdGF0ZSxcbiAgICBzdGF0ZSxcbiAgICBrZXkgPSBudWxsLFxuICAgIGlkID0gbnVsbCxcbiAgICBpbmRleCA9IC0xLFxuICB9OiB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgc2FtZURvY3VtZW50OiBib29sZWFuO1xuICAgIGhpc3RvcnlTdGF0ZTogdW5rbm93bjtcbiAgICBzdGF0ZT86IHVua25vd247XG4gICAga2V5Pzogc3RyaW5nIHwgbnVsbDtcbiAgICBpZD86IHN0cmluZyB8IG51bGw7XG4gICAgaW5kZXg/OiBudW1iZXI7XG4gIH0pIHtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnNhbWVEb2N1bWVudCA9IHNhbWVEb2N1bWVudDtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5oaXN0b3J5U3RhdGUgPSBoaXN0b3J5U3RhdGU7XG4gICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIGdldFN0YXRlKCk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlO1xuICB9XG5cbiAgZ2V0SGlzdG9yeVN0YXRlKCk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLmhpc3RvcnlTdGF0ZTtcbiAgfVxufVxuXG4vKiogVXRpbGl0eSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciB0d28gVXJsTGlrZSBoYXZlIHRoZSBzYW1lIGhhc2guICovXG5mdW5jdGlvbiBpc0hhc2hDaGFuZ2UoZnJvbTogVVJMLCB0bzogVVJMKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgdG8uaGFzaCAhPT0gZnJvbS5oYXNoICYmXG4gICAgdG8uaG9zdG5hbWUgPT09IGZyb20uaG9zdG5hbWUgJiZcbiAgICB0by5wYXRobmFtZSA9PT0gZnJvbS5wYXRobmFtZSAmJlxuICAgIHRvLnNlYXJjaCA9PT0gZnJvbS5zZWFyY2hcbiAgKTtcbn1cblxuLyoqIEludGVybmFsIHV0aWxpdHkgY2xhc3MgZm9yIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIGEgbmF2aWdhdGlvbi4gICovXG5jbGFzcyBJbnRlcm5hbE5hdmlnYXRpb25SZXN1bHQge1xuICBjb21taXR0ZWRSZXNvbHZlITogKGVudHJ5OiBGYWtlTmF2aWdhdGlvbkhpc3RvcnlFbnRyeSkgPT4gdm9pZDtcbiAgY29tbWl0dGVkUmVqZWN0ITogKHJlYXNvbjogRXJyb3IpID0+IHZvaWQ7XG4gIGZpbmlzaGVkUmVzb2x2ZSE6IChlbnRyeTogRmFrZU5hdmlnYXRpb25IaXN0b3J5RW50cnkpID0+IHZvaWQ7XG4gIGZpbmlzaGVkUmVqZWN0ITogKHJlYXNvbjogRXJyb3IpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IGNvbW1pdHRlZDogUHJvbWlzZTxGYWtlTmF2aWdhdGlvbkhpc3RvcnlFbnRyeT47XG4gIHJlYWRvbmx5IGZpbmlzaGVkOiBQcm9taXNlPEZha2VOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5PjtcbiAgZ2V0IHNpZ25hbCgpOiBBYm9ydFNpZ25hbCB7XG4gICAgcmV0dXJuIHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbW1pdHRlZCA9IG5ldyBQcm9taXNlPEZha2VOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmNvbW1pdHRlZFJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgdGhpcy5jb21taXR0ZWRSZWplY3QgPSByZWplY3Q7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpbmlzaGVkID0gbmV3IFByb21pc2U8RmFrZU5hdmlnYXRpb25IaXN0b3J5RW50cnk+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZmluaXNoZWRSZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIHRoaXMuZmluaXNoZWRSZWplY3QgPSAocmVhc29uOiBFcnJvcikgPT4ge1xuICAgICAgICByZWplY3QocmVhc29uKTtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQocmVhc29uKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgLy8gQWxsIHJlamVjdGlvbnMgYXJlIGhhbmRsZWQuXG4gICAgdGhpcy5jb21taXR0ZWQuY2F0Y2goKCkgPT4ge30pO1xuICAgIHRoaXMuZmluaXNoZWQuY2F0Y2goKCkgPT4ge30pO1xuICB9XG59XG5cbi8qKiBJbnRlcm5hbCBvcHRpb25zIGZvciBwZXJmb3JtaW5nIGEgbmF2aWdhdGUuICovXG5pbnRlcmZhY2UgSW50ZXJuYWxOYXZpZ2F0ZU9wdGlvbnMge1xuICBuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGVTdHJpbmc7XG4gIGNhbmNlbGFibGU6IGJvb2xlYW47XG4gIGNhbkludGVyY2VwdDogYm9vbGVhbjtcbiAgdXNlckluaXRpYXRlZDogYm9vbGVhbjtcbiAgaGFzaENoYW5nZTogYm9vbGVhbjtcbiAgaW5mbz86IHVua25vd247XG4gIHNraXBQb3BTdGF0ZT86IGJvb2xlYW47XG59XG4iXX0=
|
|
667
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZV9uYXZpZ2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3Rlc3Rpbmcvc3JjL25hdmlnYXRpb24vZmFrZV9uYXZpZ2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQWtCSDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUF3RHpCLCtDQUErQztJQUMvQyxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxZQUNtQixNQUFjLEVBQy9CLFFBQXlCO1FBRFIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXJFakM7OztXQUdHO1FBQ2MsZUFBVSxHQUFpQyxFQUFFLENBQUM7UUFFL0Q7O1dBRUc7UUFDSyxzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFFOUI7O1dBRUc7UUFDSyxrQkFBYSxHQUEwQyxTQUFTLENBQUM7UUFFekU7OztXQUdHO1FBQ2MsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztRQUU5RTs7O1dBR0c7UUFDSyxrQkFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUUxQzs7O1dBR0c7UUFDSywwQkFBcUIsR0FBRyxDQUFDLENBQUM7UUFFbEM7OztXQUdHO1FBQ0ssMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBRXRDLDREQUE0RDtRQUNwRCx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFFbEMsd0NBQXdDO1FB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QUFDO0lBQ2hDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1xuICBOYXZpZ2F0ZUV2ZW50LFxuICBOYXZpZ2F0aW9uLFxuICBOYXZpZ2F0aW9uQ3VycmVudEVudHJ5Q2hhbmdlRXZlbnQsXG4gIE5hdmlnYXRpb25EZXN0aW5hdGlvbixcbiAgTmF2aWdhdGlvbkhpc3RvcnlFbnRyeSxcbiAgTmF2aWdhdGlvbkludGVyY2VwdE9wdGlvbnMsXG4gIE5hdmlnYXRpb25OYXZpZ2F0ZU9wdGlvbnMsXG4gIE5hdmlnYXRpb25PcHRpb25zLFxuICBOYXZpZ2F0aW9uUmVsb2FkT3B0aW9ucyxcbiAgTmF2aWdhdGlvblJlc3VsdCxcbiAgTmF2aWdhdGlvblRyYW5zaXRpb24sXG4gIE5hdmlnYXRpb25UeXBlU3RyaW5nLFxuICBOYXZpZ2F0aW9uVXBkYXRlQ3VycmVudEVudHJ5T3B0aW9ucyxcbn0gZnJvbSAnLi9uYXZpZ2F0aW9uX3R5cGVzJztcblxuLyoqXG4gKiBGYWtlIGltcGxlbWVudGF0aW9uIG9mIHVzZXIgYWdlbnQgaGlzdG9yeSBhbmQgbmF2aWdhdGlvbiBiZWhhdmlvci4gVGhpcyBpcyBhXG4gKiBoaWdoLWZpZGVsaXR5IGltcGxlbWVudGF0aW9uIG9mIGJyb3dzZXIgYmVoYXZpb3IgdGhhdCBhdHRlbXB0cyB0byBlbXVsYXRlXG4gKiB0aGluZ3MgbGlrZSB0cmF2ZXJzYWwgZGVsYXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBGYWtlTmF2aWdhdGlvbiBpbXBsZW1lbnRzIE5hdmlnYXRpb24ge1xuICAvKipcbiAgICogVGhlIGZha2UgaW1wbGVtZW50YXRpb24gb2YgYW4gZW50cmllcyBhcnJheS4gT25seSBzYW1lLWRvY3VtZW50IGVudHJpZXNcbiAgICogYWxsb3dlZC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cmllc0FycjogRmFrZU5hdmlnYXRpb25IaXN0b3J5RW50cnlbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBhY3RpdmUgZW50cnkgaW5kZXggaW50byBgZW50cmllc0FycmAuXG4gICAqL1xuICBwcml2YXRlIGN1cnJlbnRFbnRyeUluZGV4ID0gMDtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgbmF2aWdhdGUgZXZlbnQuXG4gICAqL1xuICBwcml2YXRlIG5hdmlnYXRlRXZlbnQ6IEludGVybmFsRmFrZU5hdmlnYXRlRXZlbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEEgTWFwIG9mIHBlbmRpbmcgdHJhdmVyc2Fscywgc28gdGhhdCB0cmF2ZXJzYWxzIHRvIHRoZSBzYW1lIGVudHJ5IGNhbiBiZVxuICAgKiByZS11c2VkLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0cmF2ZXJzYWxRdWV1ZSA9IG5ldyBNYXA8c3RyaW5nLCBJbnRlcm5hbE5hdmlnYXRpb25SZXN1bHQ+KCk7XG5cbiAgLyoqXG4gICAqIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHByZXZpb3VzIHRyYXZlcnNhbHMgaGF2ZSBmaW5pc2hlZC4gVXNlZCB0b1xuICAgKiBzaW11bGF0ZSB0aGUgY3Jvc3MtcHJvY2VzcyBjb21tdW5pY2F0aW9uIG5lY2Vzc2FyeSBmb3IgdHJhdmVyc2Fscy5cbiAgICovXG4gIHByaXZhdGUgbmV4dFRyYXZlcnNhbCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBBIHByb3NwZWN0aXZlIGN1cnJlbnQgYWN0aXZlIGVudHJ5IGluZGV4LCB3aGljaCBpbmNsdWRlcyB1bnJlc29sdmVkXG4gICAqIHRyYXZlcnNhbHMuIFVzZWQgYnkgYGdvYCB0byBkZXRlcm1pbmUgd2hlcmUgbmF2aWdhdGlvbnMgYXJlIGludGVuZGVkIHRvIGdvLlxuICAgKi9cbiAgcHJpdmF0ZSBwcm9zcGVjdGl2ZUVudHJ5SW5kZXggPSAwO1xuXG4gIC8qKlxuICAgKiBBIHRlc3Qtb25seSBvcHRpb24gdG8gbWFrZSB0cmF2ZXJzYWxzIHN5bmNocm9ub3VzLCByYXRoZXIgdGhhbiBlbXVsYXRlXG4gICAqIGNyb3NzLXByb2Nlc3MgY29tbXVuaWNhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgc3luY2hyb25vdXNUcmF2ZXJzYWxzID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgYSBjYWxsIHRvIHNldEluaXRpYWxFbnRyeUZvclRlc3RpbmcuICovXG4gIHByaXZhdGUgY2FuU2V0SW5pdGlhbEVudHJ5ID0gdHJ1ZTtcblxuICAvKiogYEV2ZW50VGFyZ2V0YCB0byBkaXNwYXRjaCBldmVudHMuICovXG4gIHByaXZhdGUgZXZlbnRUYXJnZXQ6IEV2ZW50VGFyZ2V0ID0gdGhpcy53aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgLyoqIFRoZSBuZXh0IHVuaXF1ZSBpZCBmb3IgY3JlYXRlZCBlbnRyaWVzLiBSZXBsYWNlIHJlY3JlYXRlcyB0aGlzIGlkLiAqL1xuICBwcml2YXRlIG5leHRJZCA9IDA7XG5cbiAgLyoqIFRoZSBuZXh0IHVuaXF1ZSBrZXkgZm9yIGNyZWF0ZWQgZW50cmllcy4gUmVwbGFjZSBpbmhlcml0cyB0aGlzIGlkLiAqL1xuICBwcml2YXRlIG5leHRLZXkgPSAwO1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgZmFrZSBpcyBkaXNwb3NlZC4gKi9cbiAgcHJpdmF0ZSBkaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKiBFcXVpdmFsZW50IHRvIGBuYXZpZ2F0aW9uLmN1cnJlbnRFbnRyeWAuICovXG4gIGdldCBjdXJyZW50RW50cnkoKTogRmFrZU5hdmlnYXRpb25IaXN0b3J5RW50cnkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXNBcnJbdGhpcy5jdXJyZW50RW50cnlJbmRleF07XG4gIH1cblxuICBnZXQgY2FuR29CYWNrKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRFbnRyeUluZGV4ID4gMDtcbiAgfVxuXG4gIGdldCBjYW5Hb0ZvcndhcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEVudHJ5SW5kZXggPCB0aGlzLmVudHJpZXNBcnIubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2luZG93OiBXaW5kb3csXG4gICAgc3RhcnRVUkw6IGBodHRwJHtzdHJpbmd9YCxcbiAgKSB7XG4gICAgLy8gRmlyc3QgZW50cnkuXG4gICAgdGhpcy5zZXRJbml0aWFsRW50cnlGb3JUZXN0aW5nKHN0YXJ0VVJMKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbml0aWFsIGVudHJ5LlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRJbml0aWFsRW50cnlGb3JUZXN0aW5nKFxuICAgIHVybDogYGh0dHAke3N0cmluZ31gLFxuICAgIG9wdGlvbnM6IHtoaXN0b3J5U3RhdGU6IHVua25vd247IHN0YXRlPzogdW5rbm93bn0gPSB7aGlzdG9yeVN0YXRlOiBudWxsfSxcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmNhblNldEluaXRpYWxFbnRyeSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnc2V0SW5pdGlhbEVudHJ5Rm9yVGVzdGluZyBjYW4gb25seSBiZSBjYWxsZWQgYmVmb3JlIGFueSAnICsgJ25hdmlnYXRpb24gaGFzIG9jY3VycmVkJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRJbml0aWFsRW50cnkgPSB0aGlzLmVudHJpZXNBcnJbMF07XG4gICAgdGhpcy5lbnRyaWVzQXJyWzBdID0gbmV3IEZha2VOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5KG5ldyBVUkwodXJsKS50b1N0cmluZygpLCB7XG4gICAgICBpbmRleDogMCxcbiAgICAgIGtleTogY3VycmVudEluaXRpYWxFbnRyeT8ua2V5ID8/IFN0cmluZyh0aGlzLm5leHRLZXkrKyksXG4gICAgICBpZDogY3VycmVudEluaXRpYWxFbnRyeT8uaWQgPz8gU3RyaW5nKHRoaXMubmV4dElkKyspLFxuICAgICAgc2FtZURvY3VtZW50OiB0cnVlLFxuICAgICAgaGlzdG9yeVN0YXRlOiBvcHRpb25zPy5oaXN0b3J5U3RhdGUsXG4gICAgICBzdGF0ZTogb3B0aW9ucy5zdGF0ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGluaXRpYWwgZW50cnkgaXMgc3RpbGwgZWxpZ2libGUgdG8gYmUgc2V0LiAqL1xuICBjYW5TZXRJbml0aWFsRW50cnlGb3JUZXN0aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhblNldEluaXRpYWxFbnRyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHdoZXRoZXIgdG8gZW11bGF0ZSB0cmF2ZXJzYWxzIGFzIHN5bmNocm9ub3VzIHJhdGhlciB0aGFuXG4gICAqIGFzeW5jaHJvbm91cy5cbiAgICovXG4gIHNldFN5bmNocm9ub3VzVHJhdmVyc2Fsc0ZvclRlc3Rpbmcoc3luY2hyb25vdXNUcmF2ZXJzYWxzOiBib29sZWFuKSB7XG4gICAgdGhpcy5zeW5jaHJvbm91c1RyYXZlcnNhbHMgPSBzeW5jaHJvbm91c1RyYXZlcnNhbHM7XG4gIH1cblxuICAvKiogRXF1aXZhbGVudCB0byBgbmF2aWdhdGlvbi5lbnRyaWVzKClgLiAqL1xuICBlbnRyaWVzKCk6IEZha2VOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5W10ge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXNBcnIuc2xpY2UoKTtcbiAgfVxuXG4gIC8qKiBFcXVpdmFsZW50IHRvIGBuYXZpZ2F0aW9uLm5hdmlnYXRlKClgLiAqL1xuICBuYXZpZ2F0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IE5hdmlnYXRpb25OYXZpZ2F0ZU9wdGlvbnMpOiBGYWtlTmF2aWdhdGlvblJlc3VsdCB7XG4gICAgY29uc3QgZnJvbVVybCA9IG5ldyBVUkwodGhpcy5jdXJyZW50RW50cnkudXJsISk7XG4gICAgY29uc3QgdG9VcmwgPSBuZXcgVVJMKHVybCwgdGhpcy5jdXJyZW50RW50cnkudXJsISk7XG5cbiAgICBsZXQgbmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlU3RyaW5nO1xuICAgIGlmICghb3B0aW9ucz8uaGlzdG9yeSB8fCBvcHRpb25zLmhpc3RvcnkgPT09ICdhdXRvJykge1xuICAgICAgLy8gQXV0byBkZWZhdWx0cyB0byBwdXNoLCBidXQgaWYgdGhlIFVSTHMgYXJlIHRoZSBzYW1lLCBpcyBhIHJlcGxhY2UuXG4gICAgICBpZiAoZnJvbVVybC50b1N0cmluZygpID09PSB0b1VybC50b1N0cmluZygpKSB7XG4gICAgICAgIG5hdmlnYXRpb25UeXBlID0gJ3JlcGxhY2UnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmF2aWdhdGlvblR5cGUgPSAncHVzaCc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hdmlnYXRpb25UeXBlID0gb3B0aW9ucy5oaXN0b3J5O1xuICAgIH1cblxuICAgIGNvbnN0IGhhc2hDaGFuZ2UgPSBpc0hhc2hDaGFuZ2UoZnJvbVVybCwgdG9VcmwpO1xuXG4gICAgY29uc3QgZGVzdGluYXRpb24gPSBuZXcgRmFrZU5hdmlnYXRpb25EZXN0aW5hdGlvbih7XG4gICAgICB1cmw6IHRvVXJsLnRvU3RyaW5nKCksXG4gICAgICBzdGF0ZTogb3B0aW9ucz8uc3RhdGUsXG4gICAgICBzYW1lRG9jdW1lbnQ6IGhhc2hDaGFuZ2UsXG4gICAgICBoaXN0b3J5U3RhdGU6IG51bGwsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IEludGVybmFsTmF2aWdhdGlvblJlc3VsdCgpO1xuXG4gICAgdGhpcy51c2VyQWdlbnROYXZpZ2F0ZShkZXN0aW5hdGlvbiwgcmVzdWx0LCB7XG4gICAgICBuYXZpZ2F0aW9uVHlwZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICBjYW5JbnRlcmNlcHQ6IHRydWUsXG4gICAgICAvLyBBbHdheXMgZmFsc2UgZm9yIG5hdmlnYXRlKCkuXG4gICAgICB1c2VySW5pdGlhdGVkOiBmYWxzZSxcbiAgICAgIGhhc2hDaGFuZ2UsXG4gICAgICBpbmZvOiBvcHRpb25zPy5pbmZvLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbW1pdHRlZDogcmVzdWx0LmNvbW1pdHRlZCxcbiAgICAgIGZpbmlzaGVkOiByZXN1bHQuZmluaXNoZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBFcXVpdmFsZW50IHRvIGBoaXN0b3J5LnB1c2hTdGF0ZSgpYC4gKi9cbiAgcHVzaFN0YXRlKGRhdGE6IHVua25vd24sIHRpdGxlOiBzdHJpbmcsIHVybD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucHVzaE9yUmVwbGFjZVN0YXRlKCdwdXNoJywgZGF0YSwgdGl0bGUsIHVybCk7XG4gIH1cblxuICAvKiogRXF1aXZhbGVudCB0byBgaGlzdG9yeS5yZXBsYWNlU3RhdGUoKWAuICovXG4gIHJlcGxhY2VTdGF0ZShkYXRhOiB1bmtub3duLCB0aXRsZTogc3RyaW5nLCB1cmw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnB1c2hPclJlcGxhY2VTdGF0ZSgncmVwbGFjZScsIGRhdGEsIHRpdGxlLCB1cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoT3JSZXBsYWNlU3RhdGUoXG4gICAgbmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlU3RyaW5nLFxuICAgIGRhdGE6IHVua25vd24sXG4gICAgX3RpdGxlOiBzdHJpbmcsXG4gICAgdXJsPzogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmcm9tVXJsID0gbmV3IFVSTCh0aGlzLmN1cnJlbnRFbnRyeS51cmwhKTtcbiAgICBjb25zdCB0b1VybCA9IHVybCA/IG5ldyBVUkwodXJsLCB0aGlzLmN1cnJlbnRFbnRyeS51cmwhKSA6IGZyb21Vcmw7XG5cbiAgICBjb25zdCBoYXNoQ2hhbmdlID0gaXNIYXNoQ2hhbmdlKGZyb21VcmwsIHRvVXJsKTtcblxuICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gbmV3IEZha2VOYXZpZ2F0aW9uRGVzdGluYXRpb24oe1xuICAgICAgdXJsOiB0b1VybC50b1N0cmluZygpLFxuICAgICAgc2FtZURvY3VtZW50OiB0cnVlLFxuICAgICAgaGlzdG9yeVN0YXRlOiBkYXRhLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBJbnRlcm5hbE5hdmlnYXRpb25SZXN1bHQoKTtcblxuICAgIHRoaXMudXNlckFnZW50TmF2aWdhdGUoZGVzdGluYXRpb24sIHJlc3VsdCwge1xuICAgICAgbmF2aWdhdGlvblR5cGUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgY2FuSW50ZXJjZXB0OiB0cnVlLFxuICAgICAgLy8gQWx3YXlzIGZhbHNlIGZvciBwdXNoU3RhdGUoKSBvciByZXBsYWNlU3RhdGUoKS5cbiAgICAgIHVzZXJJbml0aWF0ZWQ6IGZhbHNlLFxuICAgICAgaGFzaENoYW5nZSxcbiAgICAgIHNraXBQb3BTdGF0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBFcXVpdmFsZW50IHRvIGBuYXZpZ2F0aW9uLnRyYXZlcnNlVG8oKWAuICovXG4gIHRyYXZlcnNlVG8oa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBOYXZpZ2F0aW9uT3B0aW9ucyk6IEZha2VOYXZpZ2F0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBmcm9tVXJsID0gbmV3IFVSTCh0aGlzLmN1cnJlbnRFbnRyeS51cmwhKTtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuZmluZEVudHJ5KGtleSk7XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgY29uc3QgZG9tRXhjZXB0aW9uID0gbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBrZXknLCAnSW52YWxpZFN0YXRlRXJyb3InKTtcbiAgICAgIGNvbnN0IGNvbW1pdHRlZCA9IFByb21pc2UucmVqZWN0KGRvbUV4Y2VwdGlvbik7XG4gICAgICBjb25zdCBmaW5pc2hlZCA9IFByb21pc2UucmVqZWN0KGRvbUV4Y2VwdGlvbik7XG4gICAgICBjb21taXR0ZWQuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgZmluaXNoZWQuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tbWl0dGVkLFxuICAgICAgICBmaW5pc2hlZCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChlbnRyeSA9PT0gdGhpcy5jdXJyZW50RW50cnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1pdHRlZDogUHJvbWlzZS5yZXNvbHZlKHRoaXMuY3VycmVudEVudHJ5KSxcbiAgICAgICAgZmluaXNoZWQ6IFByb21pc2UucmVzb2x2ZSh0aGlzLmN1cnJlbnRFbnRyeSksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy50cmF2ZXJzYWxRdWV1ZS5oYXMoZW50cnkua2V5KSkge1xuICAgICAgY29uc3QgZXhpc3RpbmdSZXN1bHQgPSB0aGlzLnRyYXZlcnNhbFF1ZXVlLmdldChlbnRyeS5rZXkpITtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1pdHRlZDogZXhpc3RpbmdSZXN1bHQuY29tbWl0dGVkLFxuICAgICAgICBmaW5pc2hlZDogZXhpc3RpbmdSZXN1bHQuZmluaXNoZWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGhhc2hDaGFuZ2UgPSBpc0hhc2hDaGFuZ2UoZnJvbVVybCwgbmV3IFVSTChlbnRyeS51cmwhLCB0aGlzLmN1cnJlbnRFbnRyeS51cmwhKSk7XG4gICAgY29uc3QgZGVzdGluYXRpb24gPSBuZXcgRmFrZU5hdmlnYXRpb25EZXN0aW5hdGlvbih7XG4gICAgICB1cmw6IGVudHJ5LnVybCEsXG4gICAgICBzdGF0ZTogZW50cnkuZ2V0U3RhdGUoKSxcbiAgICAgIGhpc3RvcnlTdGF0ZTogZW50cnkuZ2V0SGlzdG9yeVN0YXRlKCksXG4gICAgICBrZXk6IGVudHJ5LmtleSxcbiAgICAgIGlkOiBlbnRyeS5pZCxcbiAgICAgIGluZGV4OiBlbnRyeS5pbmRleCxcbiAgICAgIHNhbWVEb2N1bWVudDogZW50cnkuc2FtZURvY3VtZW50LFxuICAgIH0pO1xuICAgIHRoaXMucHJvc3BlY3RpdmVFbnRyeUluZGV4ID0gZW50cnkuaW5kZXg7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IEludGVybmFsTmF2aWdhdGlvblJlc3VsdCgpO1xuICAgIHRoaXMudHJhdmVyc2FsUXVldWUuc2V0KGVudHJ5LmtleSwgcmVzdWx0KTtcbiAgICB0aGlzLnJ1blRyYXZlcnNhbCgoKSA9PiB7XG4gICAgICB0aGlzLnRyYXZlcnNhbFF1ZXVlLmRlbGV0ZShlbnRyeS5rZXkpO1xuICAgICAgdGhpcy51c2VyQWdlbnROYXZpZ2F0ZShkZXN0aW5hdGlvbiwgcmVzdWx0LCB7XG4gICAgICAgIG5hdmlnYXRpb25UeXBlOiAndHJhdmVyc2UnLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICBjYW5JbnRlcmNlcHQ6IHRydWUsXG4gICAgICAgIC8vIEFsd2F5cyBmYWxzZSBmb3IgdHJhdmVyc2VUbygpLlxuICAgICAgICB1c2VySW5pdGlhdGVkOiBmYWxzZSxcbiAgICAgICAgaGFzaENoYW5nZSxcbiAgICAgICAgaW5mbzogb3B0aW9ucz8uaW5mbyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBjb21taXR0ZWQ6IHJlc3VsdC5jb21taXR0ZWQsXG4gICAgICBmaW5pc2hlZDogcmVzdWx0LmZpbmlzaGVkLFxuICAgIH07XG4gIH1cblxuICAvKiogRXF1aXZhbGVudCB0byBgbmF2aWdhdGlvbi5iYWNrKClgLiAqL1xuICBiYWNrKG9wdGlvbnM/OiBOYXZpZ2F0aW9uT3B0aW9ucyk6IEZha2VOYXZpZ2F0aW9uUmVzdWx0IHtcbiAgICBpZiAodGhpcy5jdXJyZW50RW50cnlJbmRleCA9PT0gMCkge1xuICAgICAgY29uc3QgZG9tRXhjZXB0aW9uID0gbmV3IERPTUV4Y2VwdGlvbignQ2Fubm90IGdvIGJhY2snLCAnSW52YWxpZFN0YXRlRXJyb3InKTtcbiAgICAgIGNvbnN0IGNvbW1pdHRlZCA9IFByb21pc2UucmVqZWN0KGRvbUV4Y2VwdGlvbik7XG4gICAgICBjb25zdCBmaW5pc2hlZCA9IFByb21pc2UucmVqZWN0KGRvbUV4Y2VwdGlvbik7XG4gICAgICBjb21taXR0ZWQuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgZmluaXNoZWQuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tbWl0dGVkLFxuICAgICAgICBmaW5pc2hlZCxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzQXJyW3RoaXMuY3VycmVudEVudHJ5SW5kZXggLSAxXTtcbiAgICByZXR1cm4gdGhpcy50cmF2ZXJzZVRvKGVudHJ5LmtleSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogRXF1aXZhbGVudCB0byBgbmF2aWdhdGlvbi5mb3J3YXJkKClgLiAqL1xuICBmb3J3YXJkKG9wdGlvbnM/OiBOYXZpZ2F0aW9uT3B0aW9ucyk6IEZha2VOYXZpZ2F0aW9uUmVzdWx0IHtcbiAgICBpZiAodGhpcy5jdXJyZW50RW50cnlJbmRleCA9PT0gdGhpcy5lbnRyaWVzQXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgIGNvbnN0IGRvbUV4Y2VwdGlvbiA9IG5ldyBET01FeGNlcHRpb24oJ0Nhbm5vdCBnbyBmb3J3YXJkJywgJ0ludmFsaWRTdGF0ZUVycm9yJyk7XG4gICAgICBjb25zdCBjb21taXR0ZWQgPSBQcm9taXNlLnJlamVjdChkb21FeGNlcHRpb24pO1xuICAgICAgY29uc3QgZmluaXNoZWQgPSBQcm9taXNlLnJlamVjdChkb21FeGNlcHRpb24pO1xuICAgICAgY29tbWl0dGVkLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIGZpbmlzaGVkLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1pdHRlZCxcbiAgICAgICAgZmluaXNoZWQsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuZW50cmllc0Fyclt0aGlzLmN1cnJlbnRFbnRyeUluZGV4ICsgMV07XG4gICAgcmV0dXJuIHRoaXMudHJhdmVyc2VUbyhlbnRyeS5rZXksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVxdWl2YWxlbnQgdG8gYGhpc3RvcnkuZ28oKWAuXG4gICAqIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBkb2VzIG5vdCBhY3R1YWxseSB3b3JrIHByZWNpc2VseSB0byBob3cgQ2hyb21lXG4gICAqIGRvZXMsIGluc3RlYWQgY2hvb3NpbmcgYSBzaW1wbGVyIG1vZGVsIHdpdGggbGVzcyB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuICAgKiBDaHJvbWUgaGFzIGEgZmV3IGVkZ2UgY2FzZSBvcHRpbWl6YXRpb25zLCBmb3IgaW5zdGFuY2Ugd2l0aCByZXBlYXRlZFxuICAgKiBgYmFjaygpOyBmb3J3YXJkKClgIGNoYWlucyBpdCBjb2xsYXBzZXMgY2VydGFpbiB0cmF2ZXJzYWxzLlxuICAgKi9cbiAgZ28oZGlyZWN0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXRJbmRleCA9IHRoaXMucHJvc3BlY3RpdmVFbnRyeUluZGV4ICsgZGlyZWN0aW9uO1xuICAgIGlmICh0YXJnZXRJbmRleCA+PSB0aGlzLmVudHJpZXNBcnIubGVuZ3RoIHx8IHRhcmdldEluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb3NwZWN0aXZlRW50cnlJbmRleCA9IHRhcmdldEluZGV4O1xuICAgIHRoaXMucnVuVHJhdmVyc2FsKCgpID0+IHtcbiAgICAgIC8vIENoZWNrIGFnYWluIHRoYXQgZGVzdGluYXRpb24gaXMgaW4gdGhlIGVudHJpZXMgYXJyYXkuXG4gICAgICBpZiAodGFyZ2V0SW5kZXggPj0gdGhpcy5lbnRyaWVzQXJyLmxlbmd0aCB8fCB0YXJnZXRJbmRleCA8IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZnJvbVVybCA9IG5ldyBVUkwodGhpcy5jdXJyZW50RW50cnkudXJsISk7XG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuZW50cmllc0Fyclt0YXJnZXRJbmRleF07XG4gICAgICBjb25zdCBoYXNoQ2hhbmdlID0gaXNIYXNoQ2hhbmdlKGZyb21VcmwsIG5ldyBVUkwoZW50cnkudXJsISwgdGhpcy5jdXJyZW50RW50cnkudXJsISkpO1xuICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBuZXcgRmFrZU5hdmlnYXRpb25EZXN0aW5hdGlvbih7XG4gICAgICAgIHVybDogZW50cnkudXJsISxcbiAgICAgICAgc3RhdGU6IGVudHJ5LmdldFN0YXRlKCksXG4gICAgICAgIGhpc3RvcnlTdGF0ZTogZW50cnkuZ2V0SGlzdG9yeVN0YXRlKCksXG4gICAgICAgIGtleTogZW50cnkua2V5LFxuICAgICAgICBpZDogZW50cnkuaWQsXG4gICAgICAgIGluZGV4OiBlbnRyeS5pbmRleCxcbiAgICAgICAgc2FtZURvY3VtZW50OiBlbnRyeS5zYW1lRG9jdW1lbnQsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBJbnRlcm5hbE5hdmlnYXRpb25SZXN1bHQoKTtcbiAgICAgIHRoaXMudXNlckFnZW50TmF2aWdhdGUoZGVzdGluYXRpb24sIHJlc3VsdCwge1xuICAgICAgICBuYXZpZ2F0aW9uVHlwZTogJ3RyYXZlcnNlJyxcbiAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgY2FuSW50ZXJjZXB0OiB0cnVlLFxuICAgICAgICAvLyBBbHdheXMgZmFsc2UgZm9yIGdvKCkuXG4gICAgICAgIHVzZXJJbml0aWF0ZWQ6IGZhbHNlLFxuICAgICAgICBoYXNoQ2hhbmdlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogUnVucyBhIHRyYXZlcnNhbCBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5ICovXG4gIHByaXZhdGUgcnVuVHJhdmVyc2FsKHRyYXZlcnNhbDogKCkgPT4gdm9pZCkge1xuICAgIGlmICh0aGlzLnN5bmNocm9ub3VzVHJhdmVyc2Fscykge1xuICAgICAgdHJhdmVyc2FsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRWFjaCB0cmF2ZXJzYWwgb2NjdXBpZXMgYSBzaW5nbGUgdGltZW91dCByZXNvbHV0aW9uLlxuICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBQcm9taXNlcyBhZGRlZCB0byBjb21taXQgYW5kIGZpbmlzaCBzaG91bGQgcmVzb2x2ZVxuICAgIC8vIGJlZm9yZSB0aGUgbmV4dCB0cmF2ZXJzYWwuXG4gICAgdGhpcy5uZXh0VHJhdmVyc2FsID0gdGhpcy5uZXh0VHJhdmVyc2FsLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB0cmF2ZXJzYWwoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBFcXVpdmFsZW50IHRvIGBuYXZpZ2F0aW9uLmFkZEV2ZW50TGlzdGVuZXIoKWAuICovXG4gIGFkZEV2ZW50TGlzdGVuZXIoXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LFxuICAgIG9wdGlvbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyB8IGJvb2xlYW4sXG4gICkge1xuICAgIHRoaXMuZXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogRXF1aXZhbGVudCB0byBgbmF2aWdhdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKClgLiAqL1xuICByZW1vdmVFdmVudExpc3RlbmVyKFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBjYWxsYmFjazogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCxcbiAgICBvcHRpb25zPzogRXZlbnRMaXN0ZW5lck9wdGlvbnMgfCBib29sZWFuLFxuICApIHtcbiAgICB0aGlzLmV2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIEVxdWl2YWxlbnQgdG8gYG5hdmlnYXRpb24uZGlzcGF0Y2hFdmVudCgpYCAqL1xuICBkaXNwYXRjaEV2ZW50KGV2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9XG5cbiAgLyoqIENsZWFucyB1cCByZXNvdXJjZXMuICovXG4gIGRpc3Bvc2UoKSB7XG4gICAgLy8gUmVjcmVhdGUgZXZlbnRUYXJnZXQgdG8gcmVsZWFzZSBjdXJyZW50IGxpc3RlbmVycy5cbiAgICAvLyBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudGAgYmVjYXVzZSBOb2RlSlMgYEV2ZW50VGFyZ2V0YCBpcyBpbmNvbXBhdGlibGUgd2l0aCBEb21pbm8ncyBgRXZlbnRgLlxuICAgIHRoaXMuZXZlbnRUYXJnZXQgPSB0aGlzLndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLmRpc3Bvc2VkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWtlIGlzIGRpc3Bvc2VkLiAqL1xuICBpc0Rpc3Bvc2VkKCkge1xuICAgIHJldHVybiB0aGlzLmRpc3Bvc2VkO1xuICB9XG5cbiAgLyoqIEltcGxlbWVudGF0aW9uIGZvciBhbGwgbmF2aWdhdGlvbnMgYW5kIHRyYXZlcnNhbHMuICovXG4gIHByaXZhdGUgdXNlckFnZW50TmF2aWdhdGUoXG4gICAgZGVzdGluYXRpb246IEZha2VOYXZpZ2F0aW9uRGVzdGluYXRpb24sXG4gICAgcmVzdWx0OiBJbnRlcm5hbE5hdmlnYXRpb25SZXN1bHQsXG4gICAgb3B0aW9uczogSW50ZXJuYWxOYXZpZ2F0ZU9wdGlvbnMsXG4gICkge1xuICAgIC8vIFRoZSBmaXJzdCBuYXZpZ2F0aW9uIHNob3VsZCBkaXNhbGxvdyBhbnkgZnV0dXJlIGNhbGxzIHRvIHNldCB0aGUgaW5pdGlhbFxuICAgIC8vIGVudHJ5LlxuICAgIHRoaXMuY2FuU2V0SW5pdGlhbEVudHJ5ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubmF2aWdhdGVFdmVudCkge1xuICAgICAgdGhpcy5uYXZpZ2F0ZUV2ZW50LmNhbmNlbChuZXcgRE9NRXhjZXB0aW9uKCdOYXZpZ2F0aW9uIHdhcyBhYm9ydGVkJywgJ0Fib3J0RXJyb3InKSk7XG4gICAgICB0aGlzLm5hdmlnYXRlRXZlbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgbmF2aWdhdGVFdmVudCA9IGNyZWF0ZUZha2VOYXZpZ2F0ZUV2ZW50KHtcbiAgICAgIG5hdmlnYXRpb25UeXBlOiBvcHRpb25zLm5hdmlnYXRpb25UeXBlLFxuICAgICAgY2FuY2VsYWJsZTogb3B0aW9ucy5jYW5jZWxhYmxlLFxuICAgICAgY2FuSW50ZXJjZXB0OiBvcHRpb25zLmNhbkludGVyY2VwdCxcbiAgICAgIHVzZXJJbml0aWF0ZWQ6IG9wdGlvbnMudXNlckluaXRpYXRlZCxcbiAgICAgIGhhc2hDaGFuZ2U6IG9wdGlvbnMuaGFzaENoYW5nZSxcbiAgICAgIHNpZ25hbDogcmVzdWx0LnNpZ25hbCxcbiAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgaW5mbzogb3B0aW9ucy5pbmZvLFxuICAgICAgc2FtZURvY3VtZW50OiBkZXN0aW5hdGlvbi5zYW1lRG9jdW1lbnQsXG4gICAgICBza2lwUG9wU3RhdGU6IG9wdGlvbnMuc2tpcFBvcFN0YXRlLFxuICAgICAgcmVzdWx0LFxuICAgICAgdXNlckFnZW50Q29tbWl0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMudXNlckFnZW50Q29tbWl0KCk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYXZpZ2F0ZUV2ZW50ID0gbmF2aWdhdGVFdmVudDtcbiAgICB0aGlzLmV2ZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQobmF2aWdhdGVFdmVudCk7XG4gICAgbmF2aWdhdGVFdmVudC5kaXNwYXRjaGVkTmF2aWdhdGVFdmVudCgpO1xuICAgIGlmIChuYXZpZ2F0ZUV2ZW50LmNvbW1pdE9wdGlvbiA9PT0gJ2ltbWVkaWF0ZScpIHtcbiAgICAgIG5hdmlnYXRlRXZlbnQuY29tbWl0KC8qIGludGVybmFsPSAqLyB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKiogSW1wbGVtZW50YXRpb24gdG8gY29tbWl0IGEgbmF2aWdhdGlvbi4gKi9cbiAgcHJpdmF0ZSB1c2VyQWdlbnRDb21taXQoKSB7XG4gICAgaWYgKCF0aGlzLm5hdmlnYXRlRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZnJvbSA9IHRoaXMuY3VycmVudEVudHJ5O1xuICAgIGlmICghdGhpcy5uYXZpZ2F0ZUV2ZW50LnNhbWVEb2N1bWVudCkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ0Nhbm5vdCBuYXZpZ2F0ZSB0byBhIG5vbi1zYW1lLWRvY3VtZW50IFVSTC4nKTtcbiAgICAgIHRoaXMubmF2aWdhdGVFdmVudC5jYW5jZWwoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMubmF2aWdhdGVFdmVudC5uYXZpZ2F0aW9uVHlwZSA9PT0gJ3B1c2gnIHx8XG4gICAgICB0aGlzLm5hdmlnYXRlRXZlbnQubmF2aWdhdGlvblR5cGUgPT09ICdyZXBsYWNlJ1xuICAgICkge1xuICAgICAgdGhpcy51c2VyQWdlbnRQdXNoT3JSZXBsYWNlKHRoaXMubmF2aWdhdGVFdmVudC5kZXN0aW5hdGlvbiwge1xuICAgICAgICBuYXZpZ2F0aW9uVHlwZTogdGhpcy5uYXZpZ2F0ZUV2ZW50Lm5hdmlnYXRpb25UeXBlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm5hdmlnYXRlRXZlbnQubmF2aWdhdGlvblR5cGUgPT09ICd0cmF2ZXJzZScpIHtcbiAgICAgIHRoaXMudXNlckFnZW50VHJhdmVyc2UodGhpcy5uYXZpZ2F0ZUV2ZW50LmRlc3RpbmF0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5uYXZpZ2F0ZUV2ZW50LnVzZXJBZ2VudE5hdmlnYXRlZCh0aGlzLmN1cnJlbnRFbnRyeSk7XG4gICAgY29uc3QgY3VycmVudEVudHJ5Q2hhbmdlRXZlbnQgPSBjcmVhdGVGYWtlTmF2aWdhdGlvbkN1cnJlbnRFbnRyeUNoYW5nZUV2ZW50KHtcbiAgICAgIGZyb20sXG4gICAgICBuYXZpZ2F0aW9uVHlwZTogdGhpcy5uYXZpZ2F0ZUV2ZW50Lm5hdmlnYXRpb25UeXBlLFxuICAgIH0pO1xuICAgIHRoaXMuZXZlbnRUYXJnZXQuZGlzcGF0Y2hFdmVudChjdXJyZW50RW50cnlDaGFuZ2VFdmVudCk7XG4gICAgaWYgKCF0aGlzLm5hdmlnYXRlRXZlbnQuc2tpcFBvcFN0YXRlKSB7XG4gICAgICBjb25zdCBwb3BTdGF0ZUV2ZW50ID0gY3JlYXRlUG9wU3RhdGVFdmVudCh7XG4gICAgICAgIHN0YXRlOiB0aGlzLm5hdmlnYXRlRXZlbnQuZGVzdGluYXRpb24uZ2V0SGlzdG9yeVN0YXRlKCksXG4gICAgICB9KTtcbiAgICAgIHRoaXMud2luZG93LmRpc3BhdGNoRXZlbnQocG9wU3RhdGVFdmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEltcGxlbWVudGF0aW9uIGZvciBhIHB1c2ggb3IgcmVwbGFjZSBuYXZpZ2F0aW9uLiAqL1xuICBwcml2YXRlIHVzZXJBZ2VudFB1c2hPclJlcGxhY2UoXG4gICAgZGVzdGluYXRpb246IEZha2VOYXZpZ2F0aW9uRGVzdGluYXRpb24sXG4gICAge25hdmlnYXRpb25UeXBlfToge25hdmlnYXRpb25UeXBlOiBOYXZpZ2F0aW9uVHlwZVN0cmluZ30sXG4gICkge1xuICAgIGlmIChuYXZpZ2F0aW9uVHlwZSA9PT0gJ3B1c2gnKSB7XG4gICAgICB0aGlzLmN1cnJlbnRFbnRyeUluZGV4Kys7XG4gICAgICB0aGlzLnByb3NwZWN0aXZlRW50cnlJbmRleCA9IHRoaXMuY3VycmVudEVudHJ5SW5kZXg7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50RW50cnlJbmRleDtcbiAgICBjb25zdCBrZXkgPSBuYXZpZ2F0aW9uVHlwZSA9PT0gJ3B1c2gnID8gU3RyaW5nKHRoaXMubmV4dEtleSsrKSA6IHRoaXMuY3VycmVudEVudHJ5LmtleTtcbiAgICBjb25zdCBlbnRyeSA9IG5ldyBGYWtlTmF2aWdhdGlvbkhpc3RvcnlFbnRyeShkZXN0aW5hdGlvbi51cmwsIHtcbiAgICAgIGlkOiBTdHJpbmcodGhpcy5uZXh0SWQrKyksXG4gICAgICBrZXksXG4gICAgICBpbmRleCxcbiAgICAgIHNhbWVEb2N1bWVudDogdHJ1ZSxcbiAgICAgIHN0YXRlOiBkZXN0aW5hdGlvbi5nZXRTdGF0ZSgpLFxuICAgICAgaGlzdG9yeVN0YXRlOiBkZXN0aW5hdGlvbi5nZXRIaXN0b3J5U3RhdGUoKSxcbiAgICB9KTtcbiAgICBpZiAobmF2aWdhdGlvblR5cGUgPT09ICdwdXNoJykge1xuICAgICAgdGhpcy5lbnRyaWVzQXJyLnNwbGljZShpbmRleCwgSW5maW5pdHksIGVudHJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbnRyaWVzQXJyW2luZGV4XSA9IGVudHJ5O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBJbXBsZW1lbnRhdGlvbiBmb3IgYSB0cmF2ZXJzZSBuYXZpZ2F0aW9uLiAqL1xuICBwcml2YXRlIHVzZXJBZ2VudFRyYXZlcnNlKGRlc3RpbmF0aW9uOiBGYWtlTmF2aWdhdGlvbkRlc3RpbmF0aW9uKSB7XG4gICAgdGhpcy5jdXJyZW50RW50cnlJbmRleCA9IGRlc3RpbmF0aW9uLmluZGV4O1xuICB9XG5cbiAgLyoqIFV0aWxpdHkgbWV0aG9kIGZvciBmaW5kaW5nIGVudHJpZXMgd2l0aCB0aGUgZ2l2ZW4gYGtleWAuICovXG4gIHByaXZhdGUgZmluZEVudHJ5KGtleTogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNBcnIpIHtcbiAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgc2V0IG9ubmF2aWdhdGUoX2hhbmRsZXI6ICgodGhpczogTmF2aWdhdGlvbiwgZXY6IE5hdmlnYXRlRXZlbnQpID0+IGFueSkgfCBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQgb25uYXZpZ2F0ZSgpOiAoKHRoaXM6IE5hdmlnYXRpb24sIGV2OiBOYXZpZ2F0ZUV2ZW50KSA9PiBhbnkpIHwgbnVsbCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICBzZXQgb25jdXJyZW50ZW50cnljaGFuZ2UoXG4gICAgX2hhbmRsZXI6ICgodGhpczogTmF2aWdhdGlvbiwgZXY6IE5hdmlnYXRpb25DdXJyZW50RW50cnlDaGFuZ2VFdmVudCkgPT4gYW55KSB8IG51bGwsXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5pbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0IG9uY3VycmVudGVudHJ5Y2hhbmdlKCk6XG4gICAgfCAoKHRoaXM6IE5hdmlnYXRpb24sIGV2OiBOYXZpZ2F0aW9uQ3VycmVudEVudHJ5Q2hhbmdlRXZlbnQpID0+IGFueSlcbiAgICB8IG51bGwge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5pbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgc2V0IG9ubmF2aWdhdGVzdWNjZXNzKF9oYW5kbGVyOiAoKHRoaXM6IE5hdmlnYXRpb24sIGV2OiBFdmVudCkgPT4gYW55KSB8IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGdldCBvbm5hdmlnYXRlc3VjY2VzcygpOiAoKHRoaXM6IE5hdmlnYXRpb24sIGV2OiBFdmVudCkgPT4gYW55KSB8IG51bGwge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5pbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgc2V0IG9ubmF2aWdhdGVlcnJvcihfaGFuZGxlcjogKCh0aGlzOiBOYXZpZ2F0aW9uLCBldjogRXJyb3JFdmVudCkgPT4gYW55KSB8IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGdldCBvbm5hdmlnYXRlZXJyb3IoKTogKCh0aGlzOiBOYXZpZ2F0aW9uLCBldjogRXJyb3JFdmVudCkgPT4gYW55KSB8IG51bGwge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5pbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0IHRyYW5zaXRpb24oKTogTmF2aWdhdGlvblRyYW5zaXRpb24gfCBudWxsIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHVwZGF0ZUN1cnJlbnRFbnRyeShfb3B0aW9uczogTmF2aWdhdGlvblVwZGF0ZUN1cnJlbnRFbnRyeU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHJlbG9hZChfb3B0aW9ucz86IE5hdmlnYXRpb25SZWxvYWRPcHRpb25zKTogTmF2aWdhdGlvblJlc3VsdCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBGYWtlIGVxdWl2YWxlbnQgb2YgdGhlIGBOYXZpZ2F0aW9uUmVzdWx0YCBpbnRlcmZhY2Ugd2l0aFxuICogYEZha2VOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5YC5cbiAqL1xuaW50ZXJmYWNlIEZha2VOYXZpZ2F0aW9uUmVzdWx0IGV4dGVuZHMgTmF2aWdhdGlvblJlc3VsdCB7XG4gIHJlYWRvbmx5IGNvbW1pdHRlZDogUHJvbWlzZTxGYWtlTmF2aWdhdGlvbkhpc3RvcnlFbnRyeT47XG4gIHJlYWRvbmx5IGZpbmlzaGVkOiBQcm9taXNlPEZha2VOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5Pjtcbn1cblxuLyoqXG4gKiBGYWtlIGVxdWl2YWxlbnQgb2YgYE5hdmlnYXRpb25IaXN0b3J5RW50cnlgLlxuICovXG5leHBvcnQgY2xhc3MgRmFrZU5hdmlnYXRpb25IaXN0b3J5RW50cnkgaW1wbGVtZW50cyBOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5IHtcbiAgcmVhZG9ubHkgc2FtZURvY3VtZW50O1xuXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICByZWFkb25seSBpbmRleDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlOiB1bmtub3duO1xuICBwcml2YXRlIHJlYWRvbmx5IGhpc3RvcnlTdGF0ZTogdW5rbm93bjtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIG9uZGlzcG9zZTogKCh0aGlzOiBOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5LCBldjogRXZlbnQpID0+IGFueSkgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSB1cmw6IHN0cmluZyB8IG51bGwsXG4gICAge1xuICAgICAgaWQsXG4gICAgICBrZXksXG4gICAgICBpbmRleCxcbiAgICAgIHNhbWVEb2N1bWVudCxcbiAgICAgIHN0YXRlLFxuICAgICAgaGlzdG9yeVN0YXRlLFxuICAgIH06IHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBrZXk6IHN0cmluZztcbiAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICBzYW1lRG9jdW1lbnQ6IGJvb2xlYW47XG4gICAgICBoaXN0b3J5U3RhdGU6IHVua25vd247XG4gICAgICBzdGF0ZT86IHVua25vd247XG4gICAgfSxcbiAgKSB7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnNhbWVEb2N1bWVudCA9IHNhbWVEb2N1bWVudDtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5oaXN0b3J5U3RhdGUgPSBoaXN0b3J5U3RhdGU7XG4gIH1cblxuICBnZXRTdGF0ZSgpOiB1bmtub3duIHtcbiAgICAvLyBCdWRnZXQgY29weS5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZSkpIDogdGhpcy5zdGF0ZTtcbiAgfVxuXG4gIGdldEhpc3RvcnlTdGF0ZSgpOiB1bmtub3duIHtcbiAgICAvLyBCdWRnZXQgY29weS5cbiAgICByZXR1cm4gdGhpcy5oaXN0b3J5U3RhdGUgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuaGlzdG9yeVN0YXRlKSkgOiB0aGlzLmhpc3RvcnlTdGF0ZTtcbiAgfVxuXG4gIGFkZEV2ZW50TGlzdGVuZXIoXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LFxuICAgIG9wdGlvbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyB8IGJvb2xlYW4sXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5pbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsXG4gICAgb3B0aW9ucz86IEV2ZW50TGlzdGVuZXJPcHRpb25zIHwgYm9vbGVhbixcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICBkaXNwYXRjaEV2ZW50KGV2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5pbXBsZW1lbnRlZCcpO1xuICB9XG59XG5cbi8qKiBgTmF2aWdhdGlvbkludGVyY2VwdE9wdGlvbnNgIHdpdGggZXhwZXJpbWVudGFsIGNvbW1pdCBvcHRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cGVyaW1lbnRhbE5hdmlnYXRpb25JbnRlcmNlcHRPcHRpb25zIGV4dGVuZHMgTmF2aWdhdGlvbkludGVyY2VwdE9wdGlvbnMge1xuICBjb21taXQ/OiAnaW1tZWRpYXRlJyB8ICdhZnRlci10cmFuc2l0aW9uJztcbn1cblxuLyoqIGBOYXZpZ2F0ZUV2ZW50YCB3aXRoIGV4cGVyaW1lbnRhbCBjb21taXQgZnVuY3Rpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cGVyaW1lbnRhbE5hdmlnYXRlRXZlbnQgZXh0ZW5kcyBOYXZpZ2F0ZUV2ZW50IHtcbiAgaW50ZXJjZXB0KG9wdGlvbnM/OiBFeHBlcmltZW50YWxOYXZpZ2F0aW9uSW50ZXJjZXB0T3B0aW9ucyk6IHZvaWQ7XG5cbiAgY29tbWl0KCk6IHZvaWQ7XG59XG5cbi8qKlxuICogRmFrZSBlcXVpdmFsZW50IG9mIGBOYXZpZ2F0ZUV2ZW50YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWtlTmF2aWdhdGVFdmVudCBleHRlbmRzIEV4cGVyaW1lbnRhbE5hdmlnYXRlRXZlbnQge1xuICByZWFkb25seSBkZXN0aW5hdGlvbjogRmFrZU5hdmlnYXRpb25EZXN0aW5hdGlvbjtcbn1cblxuaW50ZXJmYWNlIEludGVybmFsRmFrZU5hdmlnYXRlRXZlbnQgZXh0ZW5kcyBGYWtlTmF2aWdhdGVFdmVudCB7XG4gIHJlYWRvbmx5IHNhbWVEb2N1bWVudDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2tpcFBvcFN0YXRlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY29tbWl0T3B0aW9uOiAnYWZ0ZXItdHJhbnNpdGlvbicgfCAnaW1tZWRpYXRlJztcbiAgcmVhZG9ubHkgcmVzdWx0OiBJbnRlcm5hbE5hdmlnYXRpb25SZXN1bHQ7XG5cbiAgY29tbWl0KGludGVybmFsPzogYm9vbGVhbik6IHZvaWQ7XG4gIGNhbmNlbChyZWFzb246IEVycm9yKTogdm9pZDtcbiAgZGlzcGF0Y2hlZE5hdmlnYXRlRXZlbnQoKTogdm9pZDtcbiAgdXNlckFnZW50TmF2aWdhdGVkKGVudHJ5OiBGYWtlTmF2aWdhdGlvbkhpc3RvcnlFbnRyeSk6IHZvaWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZmFrZSBlcXVpdmFsZW50IG9mIGBOYXZpZ2F0ZUV2ZW50YC4gVGhpcyBpcyBub3QgYSBjbGFzcyBiZWNhdXNlIEVTNVxuICogdHJhbnNwaWxlZCBKYXZhU2NyaXB0IGNhbm5vdCBleHRlbmQgbmF0aXZlIEV2ZW50LlxuICovXG5mdW5jdGlvbiBjcmVhdGVGYWtlTmF2aWdhdGVFdmVudCh7XG4gIGNhbmNlbGFibGUsXG4gIGNhbkludGVyY2VwdCxcbiAgdXNlckluaXRpYXRlZCxcbiAgaGFzaENoYW5nZSxcbiAgbmF2aWdhdGlvblR5cGUsXG4gIHNpZ25hbCxcbiAgZGVzdGluYXRpb24sXG4gIGluZm8sXG4gIHNhbWVEb2N1bWVudCxcbiAgc2tpcFBvcFN0YXRlLFxuICByZXN1bHQsXG4gIHVzZXJBZ2VudENvbW1pdCxcbn06IHtcbiAgY2FuY2VsYWJsZTogYm9vbGVhbjtcbiAgY2FuSW50ZXJjZXB0OiBib29sZWFuO1xuICB1c2VySW5pdGlhdGVkOiBib29sZWFuO1xuICBoYXNoQ2hhbmdlOiBib29sZWFuO1xuICBuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGVTdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIGRlc3RpbmF0aW9uOiBGYWtlTmF2aWdhdGlvbkRlc3RpbmF0aW9uO1xuICBpbmZvOiB1bmtub3duO1xuICBzYW1lRG9jdW1lbnQ6IGJvb2xlYW47XG4gIHNraXBQb3BTdGF0ZT86IGJvb2xlYW47XG4gIHJlc3VsdDogSW50ZXJuYWxOYXZpZ2F0aW9uUmVzdWx0O1xuICB1c2VyQWdlbnRDb21taXQ6ICgpID0+IHZvaWQ7XG59KSB7XG4gIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KCduYXZpZ2F0ZScsIHtidWJibGVzOiBmYWxzZSwgY2FuY2VsYWJsZX0pIGFzIHtcbiAgICAtcmVhZG9ubHkgW1AgaW4ga2V5b2YgSW50ZXJuYWxGYWtlTmF2aWdhdGVFdmVudF06IEludGVybmFsRmFrZU5hdmlnYXRlRXZlbnRbUF07XG4gIH07XG4gIGV2ZW50LmNhbkludGVyY2VwdCA9IGNhbkludGVyY2VwdDtcbiAgZXZlbnQudXNlckluaXRpYXRlZCA9IHVzZXJJbml0aWF0ZWQ7XG4gIGV2ZW50Lmhhc2hDaGFuZ2UgPSBoYXNoQ2hhbmdlO1xuICBldmVudC5uYXZpZ2F0aW9uVHlwZSA9IG5hdmlnYXRpb25UeXBlO1xuICBldmVudC5zaWduYWwgPSBzaWduYWw7XG4gIGV2ZW50LmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gIGV2ZW50LmluZm8gPSBpbmZvO1xuICBldmVudC5kb3dubG9hZFJlcXVlc3QgPSBudWxsO1xuICBldmVudC5mb3JtRGF0YSA9IG51bGw7XG5cbiAgZXZlbnQuc2FtZURvY3VtZW50ID0gc2FtZURvY3VtZW50O1xuICBldmVudC5za2lwUG9wU3RhdGUgPSBza2lwUG9wU3RhdGU7XG4gIGV2ZW50LmNvbW1pdE9wdGlvbiA9ICdpbW1lZGlhdGUnO1xuXG4gIGxldCBoYW5kbGVyRmluaXNoZWQ6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCBpbnRlcmNlcHRDYWxsZWQgPSBmYWxzZTtcbiAgbGV0IGRpc3BhdGNoZWROYXZpZ2F0ZUV2ZW50ID0gZmFsc2U7XG4gIGxldCBjb21taXRDYWxsZWQgPSBmYWxzZTtcblxuICBldmVudC5pbnRlcmNlcHQgPSBmdW5jdGlvbiAoXG4gICAgdGhpczogSW50ZXJuYWxGYWtlTmF2aWdhdGVFdmVudCxcbiAgICBvcHRpb25zPzogRXhwZXJpbWVudGFsTmF2aWdhdGlvbkludGVyY2VwdE9wdGlvbnMsXG4gICk6IHZvaWQge1xuICAgIGludGVyY2VwdENhbGxlZCA9IHRydWU7XG4gICAgZXZlbnQuc2FtZURvY3VtZW50ID0gdHJ1ZTtcbiAgICBjb25zdCBoYW5kbGVyID0gb3B0aW9ucz8uaGFuZGxlcjtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgaGFuZGxlckZpbmlzaGVkID0gaGFuZGxlcigpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uY29tbWl0KSB7XG4gICAgICBldmVudC5jb21taXRPcHRpb24gPSBvcHRpb25zLmNvbW1pdDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LmZvY3VzUmVzZXQgIT09IHVuZGVmaW5lZCB8fCBvcHRpb25zPy5zY3JvbGwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmltcGxlbWVudGVkJyk7XG4gICAgfVxuICB9O1xuXG4gIGV2ZW50LnNjcm9sbCA9IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbEZha2VOYXZpZ2F0ZUV2ZW50KTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmltcGxlbWVudGVkJyk7XG4gIH07XG5cbiAgZXZlbnQuY29tbWl0ID0gZnVuY3Rpb24gKHRoaXM6IEludGVybmFsRmFrZU5hdmlnYXRlRXZlbnQsIGludGVybmFsID0gZmFsc2UpIHtcbiAgICBpZiAoIWludGVybmFsICYmICFpbnRlcmNlcHRDYWxsZWQpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgIGBGYWlsZWQgdG8gZXhlY3V0ZSAnY29tbWl0JyBvbiAnTmF2aWdhdGVFdmVudCc6IGludGVyY2VwdCgpIG11c3QgYmUgYCArXG4gICAgICAgICAgYGNhbGxlZCBiZWZvcmUgY29tbWl0KCkuYCxcbiAgICAgICAgJ0ludmFsaWRTdGF0ZUVycm9yJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghZGlzcGF0Y2hlZE5hdmlnYXRlRXZlbnQpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgIGBGYWlsZWQgdG8gZXhlY3V0ZSAnY29tbWl0JyBvbiAnTmF2aWdhdGVFdmVudCc6IGNvbW1pdCgpIG1heSBub3QgYmUgYCArXG4gICAgICAgICAgYGNhbGxlZCBkdXJpbmcgZXZlbnQgZGlzcGF0Y2guYCxcbiAgICAgICAgJ0ludmFsaWRTdGF0ZUVycm9yJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb21taXRDYWxsZWQpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgIGBGYWlsZWQgdG8gZXhlY3V0ZSAnY29tbWl0JyBvbiAnTmF2aWdhdGVFdmVudCc6IGNvbW1pdCgpIGFscmVhZHkgYCArIGBjYWxsZWQuYCxcbiAgICAgICAgJ0ludmFsaWRTdGF0ZUVycm9yJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbW1pdENhbGxlZCA9IHRydWU7XG5cbiAgICB1c2VyQWdlbnRDb21taXQoKTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBvbmx5LlxuICBldmVudC5jYW5jZWwgPSBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxGYWtlTmF2aWdhdGVFdmVudCwgcmVhc29uOiBFcnJvcikge1xuICAgIHJlc3VsdC5jb21taXR0ZWRSZWplY3QocmVhc29uKTtcbiAgICByZXN1bHQuZmluaXNoZWRSZWplY3QocmVhc29uKTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBvbmx5LlxuICBldmVudC5kaXNwYXRjaGVkTmF2aWdhdGVFdmVudCA9IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbEZha2VOYXZpZ2F0ZUV2ZW50KSB7XG4gICAgZGlzcGF0Y2hlZE5hdmlnYXRlRXZlbnQgPSB0cnVlO1xuICAgIGlmIChldmVudC5jb21taXRPcHRpb24gPT09ICdhZnRlci10cmFuc2l0aW9uJykge1xuICAgICAgLy8gSWYgaGFuZGxlciBmaW5pc2hlcyBiZWZvcmUgY29tbWl0LCBjYWxsIGNvbW1pdC5cbiAgICAgIGhhbmRsZXJGaW5pc2hlZD8udGhlbihcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICghY29tbWl0Q2FsbGVkKSB7XG4gICAgICAgICAgICBldmVudC5jb21taXQoLyogaW50ZXJuYWwgKi8gdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7fSxcbiAgICAgICk7XG4gICAgfVxuICAgIFByb21pc2UuYWxsKFtyZXN1bHQuY29tbWl0dGVkLCBoYW5kbGVyRmluaXNoZWRdKS50aGVuKFxuICAgICAgKFtlbnRyeV0pID0+IHtcbiAgICAgICAgcmVzdWx0LmZpbmlzaGVkUmVzb2x2ZShlbnRyeSk7XG4gICAgICB9LFxuICAgICAgKHJlYXNvbikgPT4ge1xuICAgICAgICByZXN1bHQuZmluaXNoZWRSZWplY3QocmVhc29uKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBvbmx5LlxuICBldmVudC51c2VyQWdlbnROYXZpZ2F0ZWQgPSBmdW5jdGlvbiAoXG4gICAgdGhpczogSW50ZXJuYWxGYWtlTmF2aWdhdGVFdmVudCxcbiAgICBlbnRyeTogRmFrZU5hdmlnYXRpb25IaXN0b3J5RW50cnksXG4gICkge1xuICAgIHJlc3VsdC5jb21taXR0ZWRSZXNvbHZlKGVudHJ5KTtcbiAgfTtcblxuICByZXR1cm4gZXZlbnQgYXMgSW50ZXJuYWxGYWtlTmF2aWdhdGVFdmVudDtcbn1cblxuLyoqIEZha2UgZXF1aXZhbGVudCBvZiBgTmF2aWdhdGlvbkN1cnJlbnRFbnRyeUNoYW5nZUV2ZW50YC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFrZU5hdmlnYXRpb25DdXJyZW50RW50cnlDaGFuZ2VFdmVudCBleHRlbmRzIE5hdmlnYXRpb25DdXJyZW50RW50cnlDaGFuZ2VFdmVudCB7XG4gIHJlYWRvbmx5IGZyb206IEZha2VOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZha2UgZXF1aXZhbGVudCBvZiBgTmF2aWdhdGlvbkN1cnJlbnRFbnRyeUNoYW5nZWAuIFRoaXMgZG9lcyBub3QgdXNlXG4gKiBhIGNsYXNzIGJlY2F1c2UgRVM1IHRyYW5zcGlsZWQgSmF2YVNjcmlwdCBjYW5ub3QgZXh0ZW5kIG5hdGl2ZSBFdmVudC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmFrZU5hdmlnYXRpb25DdXJyZW50RW50cnlDaGFuZ2VFdmVudCh7XG4gIGZyb20sXG4gIG5hdmlnYXRpb25UeXBlLFxufToge1xuICBmcm9tOiBGYWtlTmF2aWdhdGlvbkhpc3RvcnlFbnRyeTtcbiAgbmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlU3RyaW5nO1xufSkge1xuICBjb25zdCBldmVudCA9IG5ldyBFdmVudCgnY3VycmVudGVudHJ5Y2hhbmdlJywge1xuICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICB9KSBhcyB7XG4gICAgLXJlYWRvbmx5IFtQIGluIGtleW9mIE5hdmlnYXRpb25DdXJyZW50RW50cnlDaGFuZ2VFdmVudF06IE5hdmlnYXRpb25DdXJyZW50RW50cnlDaGFuZ2VFdmVudFtQXTtcbiAgfTtcbiAgZXZlbnQuZnJvbSA9IGZyb207XG4gIGV2ZW50Lm5hdmlnYXRpb25UeXBlID0gbmF2aWdhdGlvblR5cGU7XG4gIHJldHVybiBldmVudCBhcyBGYWtlTmF2aWdhdGlvbkN1cnJlbnRFbnRyeUNoYW5nZUV2ZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZha2UgZXF1aXZhbGVudCBvZiBgUG9wU3RhdGVFdmVudGAuIFRoaXMgZG9lcyBub3QgdXNlIGEgY2xhc3NcbiAqIGJlY2F1c2UgRVM1IHRyYW5zcGlsZWQgSmF2YVNjcmlwdCBjYW5ub3QgZXh0ZW5kIG5hdGl2ZSBFdmVudC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9wU3RhdGVFdmVudCh7c3RhdGV9OiB7c3RhdGU6IHVua25vd259KSB7XG4gIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KCdwb3BzdGF0ZScsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgfSkgYXMgey1yZWFkb25seSBbUCBpbiBrZXlvZiBQb3BTdGF0ZUV2ZW50XTogUG9wU3RhdGVFdmVudFtQXX07XG4gIGV2ZW50LnN0YXRlID0gc3RhdGU7XG4gIHJldHVybiBldmVudCBhcyBQb3BTdGF0ZUV2ZW50O1xufVxuXG4vKipcbiAqIEZha2UgZXF1aXZhbGVudCBvZiBgTmF2aWdhdGlvbkRlc3RpbmF0aW9uYC5cbiAqL1xuZXhwb3J0IGNsYXNzIEZha2VOYXZpZ2F0aW9uRGVzdGluYXRpb24gaW1wbGVtZW50cyBOYXZpZ2F0aW9uRGVzdGluYXRpb24ge1xuICByZWFkb25seSB1cmw6IHN0cmluZztcbiAgcmVhZG9ubHkgc2FtZURvY3VtZW50OiBib29sZWFuO1xuICByZWFkb25seSBrZXk6IHN0cmluZyB8IG51bGw7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmcgfCBudWxsO1xuICByZWFkb25seSBpbmRleDogbnVtYmVyO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGU/OiB1bmtub3duO1xuICBwcml2YXRlIHJlYWRvbmx5IGhpc3RvcnlTdGF0ZTogdW5rbm93bjtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgdXJsLFxuICAgIHNhbWVEb2N1bWVudCxcbiAgICBoaXN0b3J5U3RhdGUsXG4gICAgc3RhdGUsXG4gICAga2V5ID0gbnVsbCxcbiAgICBpZCA9IG51bGwsXG4gICAgaW5kZXggPSAtMSxcbiAgfToge1xuICAgIHVybDogc3RyaW5nO1xuICAgIHNhbWVEb2N1bWVudDogYm9vbGVhbjtcbiAgICBoaXN0b3J5U3RhdGU6IHVua25vd247XG4gICAgc3RhdGU/OiB1bmtub3duO1xuICAgIGtleT86IHN0cmluZyB8IG51bGw7XG4gICAgaWQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIGluZGV4PzogbnVtYmVyO1xuICB9KSB7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgdGhpcy5zYW1lRG9jdW1lbnQgPSBzYW1lRG9jdW1lbnQ7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuaGlzdG9yeVN0YXRlID0gaGlzdG9yeVN0YXRlO1xuICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBnZXRTdGF0ZSgpOiB1bmtub3duIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZTtcbiAgfVxuXG4gIGdldEhpc3RvcnlTdGF0ZSgpOiB1bmtub3duIHtcbiAgICByZXR1cm4gdGhpcy5oaXN0b3J5U3RhdGU7XG4gIH1cbn1cblxuLyoqIFV0aWxpdHkgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdHdvIFVybExpa2UgaGF2ZSB0aGUgc2FtZSBoYXNoLiAqL1xuZnVuY3Rpb24gaXNIYXNoQ2hhbmdlKGZyb206IFVSTCwgdG86IFVSTCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHRvLmhhc2ggIT09IGZyb20uaGFzaCAmJlxuICAgIHRvLmhvc3RuYW1lID09PSBmcm9tLmhvc3RuYW1lICYmXG4gICAgdG8ucGF0aG5hbWUgPT09IGZyb20ucGF0aG5hbWUgJiZcbiAgICB0by5zZWFyY2ggPT09IGZyb20uc2VhcmNoXG4gICk7XG59XG5cbi8qKiBJbnRlcm5hbCB1dGlsaXR5IGNsYXNzIGZvciByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiBhIG5hdmlnYXRpb24uICAqL1xuY2xhc3MgSW50ZXJuYWxOYXZpZ2F0aW9uUmVzdWx0IHtcbiAgY29tbWl0dGVkUmVzb2x2ZSE6IChlbnRyeTogRmFrZU5hdmlnYXRpb25IaXN0b3J5RW50cnkpID0+IHZvaWQ7XG4gIGNvbW1pdHRlZFJlamVjdCE6IChyZWFzb246IEVycm9yKSA9PiB2b2lkO1xuICBmaW5pc2hlZFJlc29sdmUhOiAoZW50cnk6IEZha2VOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5KSA9PiB2b2lkO1xuICBmaW5pc2hlZFJlamVjdCE6IChyZWFzb246IEVycm9yKSA9PiB2b2lkO1xuICByZWFkb25seSBjb21taXR0ZWQ6IFByb21pc2U8RmFrZU5hdmlnYXRpb25IaXN0b3J5RW50cnk+O1xuICByZWFkb25seSBmaW5pc2hlZDogUHJvbWlzZTxGYWtlTmF2aWdhdGlvbkhpc3RvcnlFbnRyeT47XG4gIGdldCBzaWduYWwoKTogQWJvcnRTaWduYWwge1xuICAgIHJldHVybiB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb21taXR0ZWQgPSBuZXcgUHJvbWlzZTxGYWtlTmF2aWdhdGlvbkhpc3RvcnlFbnRyeT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5jb21taXR0ZWRSZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIHRoaXMuY29tbWl0dGVkUmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgdGhpcy5maW5pc2hlZCA9IG5ldyBQcm9taXNlPEZha2VOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmZpbmlzaGVkUmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB0aGlzLmZpbmlzaGVkUmVqZWN0ID0gKHJlYXNvbjogRXJyb3IpID0+IHtcbiAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KHJlYXNvbik7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIC8vIEFsbCByZWplY3Rpb25zIGFyZSBoYW5kbGVkLlxuICAgIHRoaXMuY29tbWl0dGVkLmNhdGNoKCgpID0+IHt9KTtcbiAgICB0aGlzLmZpbmlzaGVkLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxufVxuXG4vKiogSW50ZXJuYWwgb3B0aW9ucyBmb3IgcGVyZm9ybWluZyBhIG5hdmlnYXRlLiAqL1xuaW50ZXJmYWNlIEludGVybmFsTmF2aWdhdGVPcHRpb25zIHtcbiAgbmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlU3RyaW5nO1xuICBjYW5jZWxhYmxlOiBib29sZWFuO1xuICBjYW5JbnRlcmNlcHQ6IGJvb2xlYW47XG4gIHVzZXJJbml0aWF0ZWQ6IGJvb2xlYW47XG4gIGhhc2hDaGFuZ2U6IGJvb2xlYW47XG4gIGluZm8/OiB1bmtub3duO1xuICBza2lwUG9wU3RhdGU/OiBib29sZWFuO1xufVxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbl90eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi90ZXN0aW5nL3NyYy9uYXZpZ2F0aW9uL25hdmlnYXRpb25fdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2aWdhdGlvbkV2ZW50TWFwIHtcbiAgbmF2aWdhdGU6IE5hdmlnYXRlRXZlbnQ7XG4gIG5hdmlnYXRlc3VjY2VzczogRXZlbnQ7XG4gIG5hdmlnYXRlZXJyb3I6IEVycm9yRXZlbnQ7XG4gIGN1cnJlbnRlbnRyeWNoYW5nZTogTmF2aWdhdGlvbkN1cnJlbnRFbnRyeUNoYW5nZUV2ZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRpb25SZXN1bHQge1xuICBjb21taXR0ZWQ6IFByb21pc2U8TmF2aWdhdGlvbkhpc3RvcnlFbnRyeT47XG4gIGZpbmlzaGVkOiBQcm9taXNlPE5hdmlnYXRpb25IaXN0b3J5RW50cnk+O1xufVxuXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBOYXZpZ2F0aW9uIGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICBlbnRyaWVzKCk6IE5hdmlnYXRpb25IaXN0b3J5RW50cnlbXTtcbiAgcmVhZG9ubHkgY3VycmVudEVudHJ5OiBOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5IHwgbnVsbDtcbiAgdXBkYXRlQ3VycmVudEVudHJ5KG9wdGlvbnM6IE5hdmlnYXRpb25VcGRhdGVDdXJyZW50RW50cnlPcHRpb25zKTogdm9pZDtcbiAgcmVhZG9ubHkgdHJhbnNpdGlvbjogTmF2aWdhdGlvblRyYW5zaXRpb24gfCBudWxsO1xuXG4gIHJlYWRvbmx5IGNhbkdvQmFjazogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FuR29Gb3J3YXJkOiBib29sZWFuO1xuXG4gIG5hdmlnYXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogTmF2aWdhdGlvbk5hdmlnYXRlT3B0aW9ucyk6IE5hdmlnYXRpb25SZXN1bHQ7XG4gIHJlbG9hZChvcHRpb25zPzogTmF2aWdhdGlvblJlbG9hZE9wdGlvbnMpOiBOYXZpZ2F0aW9uUmVzdWx0O1xuXG4gIHRyYXZlcnNlVG8oa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBOYXZpZ2F0aW9uT3B0aW9ucyk6IE5hdmlnYXRpb25SZXN1bHQ7XG4gIGJhY2sob3B0aW9ucz86IE5hdmlnYXRpb25PcHRpb25zKTogTmF2aWdhdGlvblJlc3VsdDtcbiAgZm9yd2FyZChvcHRpb25zPzogTmF2aWdhdGlvbk9wdGlvbnMpOiBOYXZpZ2F0aW9uUmVzdWx0O1xuXG4gIG9ubmF2aWdhdGU6ICgodGhpczogTmF2aWdhdGlvbiwgZXY6IE5hdmlnYXRlRXZlbnQpID0+IGFueSkgfCBudWxsO1xuICBvbm5hdmlnYXRlc3VjY2VzczogKCh0aGlzOiBOYXZpZ2F0aW9uLCBldjogRXZlbnQpID0+IGFueSkgfCBudWxsO1xuICBvbm5hdmlnYXRlZXJyb3I6ICgodGhpczogTmF2aWdhdGlvbiwgZXY6IEVycm9yRXZlbnQpID0+IGFueSkgfCBudWxsO1xuICBvbmN1cnJlbnRlbnRyeWNoYW5nZTogKCh0aGlzOiBOYXZpZ2F0aW9uLCBldjogTmF2aWdhdGlvbkN1cnJlbnRFbnRyeUNoYW5nZUV2ZW50KSA9PiBhbnkpIHwgbnVsbDtcblxuICBhZGRFdmVudExpc3RlbmVyPEsgZXh0ZW5kcyBrZXlvZiBOYXZpZ2F0aW9uRXZlbnRNYXA+KFxuICAgIHR5cGU6IEssXG4gICAgbGlzdGVuZXI6ICh0aGlzOiBOYXZpZ2F0aW9uLCBldjogTmF2aWdhdGlvbkV2ZW50TWFwW0tdKSA9PiBhbnksXG4gICAgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyxcbiAgKTogdm9pZDtcbiAgYWRkRXZlbnRMaXN0ZW5lcihcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsXG4gICAgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyxcbiAgKTogdm9pZDtcbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjxLIGV4dGVuZHMga2V5b2YgTmF2aWdhdGlvbkV2ZW50TWFwPihcbiAgICB0eXBlOiBLLFxuICAgIGxpc3RlbmVyOiAodGhpczogTmF2aWdhdGlvbiwgZXY6IE5hdmlnYXRpb25FdmVudE1hcFtLXSkgPT4gYW55LFxuICAgIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMsXG4gICk6IHZvaWQ7XG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LFxuICAgIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMsXG4gICk6IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIE5hdmlnYXRpb25UcmFuc2l0aW9uIHtcbiAgcmVhZG9ubHkgbmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlU3RyaW5nO1xuICByZWFkb25seSBmcm9tOiBOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5O1xuICByZWFkb25seSBmaW5pc2hlZDogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5RXZlbnRNYXAge1xuICBkaXNwb3NlOiBFdmVudDtcbn1cblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgTmF2aWdhdGlvbkhpc3RvcnlFbnRyeSBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVybDogc3RyaW5nIHwgbnVsbDtcbiAgcmVhZG9ubHkgaW5kZXg6IG51bWJlcjtcbiAgcmVhZG9ubHkgc2FtZURvY3VtZW50OiBib29sZWFuO1xuXG4gIGdldFN0YXRlKCk6IHVua25vd247XG5cbiAgb25kaXNwb3NlOiAoKHRoaXM6IE5hdmlnYXRpb25IaXN0b3J5RW50cnksIGV2OiBFdmVudCkgPT4gYW55KSB8IG51bGw7XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcjxLIGV4dGVuZHMga2V5b2YgTmF2aWdhdGlvbkhpc3RvcnlFbnRyeUV2ZW50TWFwPihcbiAgICB0eXBlOiBLLFxuICAgIGxpc3RlbmVyOiAodGhpczogTmF2aWdhdGlvbkhpc3RvcnlFbnRyeSwgZXY6IE5hdmlnYXRpb25IaXN0b3J5RW50cnlFdmVudE1hcFtLXSkgPT4gYW55LFxuICAgIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMsXG4gICk6IHZvaWQ7XG4gIGFkZEV2ZW50TGlzdGVuZXIoXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LFxuICAgIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMsXG4gICk6IHZvaWQ7XG4gIHJlbW92ZUV2ZW50TGlzdGVuZXI8SyBleHRlbmRzIGtleW9mIE5hdmlnYXRpb25IaXN0b3J5RW50cnlFdmVudE1hcD4oXG4gICAgdHlwZTogSyxcbiAgICBsaXN0ZW5lcjogKHRoaXM6IE5hdmlnYXRpb25IaXN0b3J5RW50cnksIGV2OiBOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5RXZlbnRNYXBbS10pID0+IGFueSxcbiAgICBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zLFxuICApOiB2b2lkO1xuICByZW1vdmVFdmVudExpc3RlbmVyKFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCxcbiAgICBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zLFxuICApOiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uVHlwZVN0cmluZyA9ICdyZWxvYWQnIHwgJ3B1c2gnIHwgJ3JlcGxhY2UnIHwgJ3RyYXZlcnNlJztcblxuZXhwb3J0IGludGVyZmFjZSBOYXZpZ2F0aW9uVXBkYXRlQ3VycmVudEVudHJ5T3B0aW9ucyB7XG4gIHN0YXRlOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRpb25PcHRpb25zIHtcbiAgaW5mbz86IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2aWdhdGlvbk5hdmlnYXRlT3B0aW9ucyBleHRlbmRzIE5hdmlnYXRpb25PcHRpb25zIHtcbiAgc3RhdGU/OiB1bmtub3duO1xuICBoaXN0b3J5PzogJ2F1dG8nIHwgJ3B1c2gnIHwgJ3JlcGxhY2UnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRpb25SZWxvYWRPcHRpb25zIGV4dGVuZHMgTmF2aWdhdGlvbk9wdGlvbnMge1xuICBzdGF0ZT86IHVua25vd247XG59XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIE5hdmlnYXRpb25DdXJyZW50RW50cnlDaGFuZ2VFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCBldmVudEluaXQ/OiBOYXZpZ2F0aW9uQ3VycmVudEVudHJ5Q2hhbmdlRXZlbnRJbml0KTtcblxuICByZWFkb25seSBuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGVTdHJpbmcgfCBudWxsO1xuICByZWFkb25seSBmcm9tOiBOYXZpZ2F0aW9uSGlzdG9yeUVudHJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRpb25DdXJyZW50RW50cnlDaGFuZ2VFdmVudEluaXQgZXh0ZW5kcyBFdmVudEluaXQge1xuICBuYXZpZ2F0aW9uVHlwZT86IE5hdmlnYXRpb25UeXBlU3RyaW5nIHwgbnVsbDtcbiAgZnJvbTogTmF2aWdhdGlvbkhpc3RvcnlFbnRyeTtcbn1cblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgTmF2aWdhdGVFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCBldmVudEluaXQ/OiBOYXZpZ2F0ZUV2ZW50SW5pdCk7XG5cbiAgcmVhZG9ubHkgbmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlU3RyaW5nO1xuICByZWFkb25seSBjYW5JbnRlcmNlcHQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHVzZXJJbml0aWF0ZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGhhc2hDaGFuZ2U6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBOYXZpZ2F0aW9uRGVzdGluYXRpb247XG4gIHJlYWRvbmx5IHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIHJlYWRvbmx5IGZvcm1EYXRhOiBGb3JtRGF0YSB8IG51bGw7XG4gIHJlYWRvbmx5IGRvd25sb2FkUmVxdWVzdDogc3RyaW5nIHwgbnVsbDtcbiAgcmVhZG9ubHkgaW5mbz86IHVua25vd247XG5cbiAgaW50ZXJjZXB0KG9wdGlvbnM/OiBOYXZpZ2F0aW9uSW50ZXJjZXB0T3B0aW9ucyk6IHZvaWQ7XG4gIHNjcm9sbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRlRXZlbnRJbml0IGV4dGVuZHMgRXZlbnRJbml0IHtcbiAgbmF2aWdhdGlvblR5cGU/OiBOYXZpZ2F0aW9uVHlwZVN0cmluZztcbiAgY2FuSW50ZXJjZXB0PzogYm9vbGVhbjtcbiAgdXNlckluaXRpYXRlZD86IGJvb2xlYW47XG4gIGhhc2hDaGFuZ2U/OiBib29sZWFuO1xuICBkZXN0aW5hdGlvbjogTmF2aWdhdGlvbkRlc3RpbmF0aW9uO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICBmb3JtRGF0YT86IEZvcm1EYXRhIHwgbnVsbDtcbiAgZG93bmxvYWRSZXF1ZXN0Pzogc3RyaW5nIHwgbnVsbDtcbiAgaW5mbz86IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2aWdhdGlvbkludGVyY2VwdE9wdGlvbnMge1xuICBoYW5kbGVyPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZm9jdXNSZXNldD86ICdhZnRlci10cmFuc2l0aW9uJyB8ICdtYW51YWwnO1xuICBzY3JvbGw/OiAnYWZ0ZXItdHJhbnNpdGlvbicgfCAnbWFudWFsJztcbn1cblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgTmF2aWdhdGlvbkRlc3RpbmF0aW9uIHtcbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtleTogc3RyaW5nIHwgbnVsbDtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZyB8IG51bGw7XG4gIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG4gIHJlYWRvbmx5IHNhbWVEb2N1bWVudDogYm9vbGVhbjtcblxuICBnZXRTdGF0ZSgpOiB1bmtub3duO1xufVxuIl19
|
|
@@ -5,22 +5,25 @@
|
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
6
|
* found in the LICENSE file at https://angular.io/license
|
|
7
7
|
*/
|
|
8
|
+
import { DOCUMENT, PlatformLocation } from '@angular/common';
|
|
9
|
+
import { inject } from '@angular/core';
|
|
8
10
|
// @ng_package: ignore-cross-repo-import
|
|
9
11
|
import { PlatformNavigation } from '../../../src/navigation/platform_navigation';
|
|
12
|
+
import { FakeNavigationPlatformLocation, MOCK_PLATFORM_LOCATION_CONFIG, } from '../mock_platform_location';
|
|
10
13
|
import { FakeNavigation } from './fake_navigation';
|
|
11
14
|
/**
|
|
12
15
|
* Return a provider for the `FakeNavigation` in place of the real Navigation API.
|
|
13
|
-
*
|
|
14
|
-
* @internal
|
|
15
16
|
*/
|
|
16
17
|
export function provideFakePlatformNavigation() {
|
|
17
18
|
return [
|
|
18
19
|
{
|
|
19
20
|
provide: PlatformNavigation,
|
|
20
21
|
useFactory: () => {
|
|
21
|
-
|
|
22
|
+
const config = inject(MOCK_PLATFORM_LOCATION_CONFIG, { optional: true });
|
|
23
|
+
return new FakeNavigation(inject(DOCUMENT).defaultView, config?.startUrl ?? 'http://_empty_/');
|
|
22
24
|
},
|
|
23
25
|
},
|
|
26
|
+
{ provide: PlatformLocation, useClass: FakeNavigationPlatformLocation },
|
|
24
27
|
];
|
|
25
28
|
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZV9mYWtlX3BsYXRmb3JtX25hdmlnYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vdGVzdGluZy9zcmMvbmF2aWdhdGlvbi9wcm92aWRlX2Zha2VfcGxhdGZvcm1fbmF2aWdhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFDLE1BQU0sRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUUvQyx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDL0UsT0FBTyxFQUNMLDhCQUE4QixFQUM5Qiw2QkFBNkIsR0FDOUIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFakQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsNkJBQTZCO0lBQzNDLE9BQU87UUFDTDtZQUNFLE9BQU8sRUFBRSxrQkFBa0I7WUFDM0IsVUFBVSxFQUFFLEdBQUcsRUFBRTtnQkFDZixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztnQkFDdkUsT0FBTyxJQUFJLGNBQWMsQ0FDdkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVksRUFDNUIsTUFBTSxFQUFFLFFBQTRCLElBQUksaUJBQWlCLENBQzNELENBQUM7WUFDSixDQUFDO1NBQ0Y7UUFDRCxFQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsOEJBQThCLEVBQUM7S0FDdEUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtET0NVTUVOVCwgUGxhdGZvcm1Mb2NhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7aW5qZWN0LCBQcm92aWRlcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8vIEBuZ19wYWNrYWdlOiBpZ25vcmUtY3Jvc3MtcmVwby1pbXBvcnRcbmltcG9ydCB7UGxhdGZvcm1OYXZpZ2F0aW9ufSBmcm9tICcuLi8uLi8uLi9zcmMvbmF2aWdhdGlvbi9wbGF0Zm9ybV9uYXZpZ2F0aW9uJztcbmltcG9ydCB7XG4gIEZha2VOYXZpZ2F0aW9uUGxhdGZvcm1Mb2NhdGlvbixcbiAgTU9DS19QTEFURk9STV9MT0NBVElPTl9DT05GSUcsXG59IGZyb20gJy4uL21vY2tfcGxhdGZvcm1fbG9jYXRpb24nO1xuXG5pbXBvcnQge0Zha2VOYXZpZ2F0aW9ufSBmcm9tICcuL2Zha2VfbmF2aWdhdGlvbic7XG5cbi8qKlxuICogUmV0dXJuIGEgcHJvdmlkZXIgZm9yIHRoZSBgRmFrZU5hdmlnYXRpb25gIGluIHBsYWNlIG9mIHRoZSByZWFsIE5hdmlnYXRpb24gQVBJLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUZha2VQbGF0Zm9ybU5hdmlnYXRpb24oKTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogUGxhdGZvcm1OYXZpZ2F0aW9uLFxuICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgICBjb25zdCBjb25maWcgPSBpbmplY3QoTU9DS19QTEFURk9STV9MT0NBVElPTl9DT05GSUcsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgICAgICByZXR1cm4gbmV3IEZha2VOYXZpZ2F0aW9uKFxuICAgICAgICAgIGluamVjdChET0NVTUVOVCkuZGVmYXVsdFZpZXchLFxuICAgICAgICAgIChjb25maWc/LnN0YXJ0VXJsIGFzIGBodHRwJHtzdHJpbmd9YCkgPz8gJ2h0dHA6Ly9fZW1wdHlfLycsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0sXG4gICAge3Byb3ZpZGU6IFBsYXRmb3JtTG9jYXRpb24sIHVzZUNsYXNzOiBGYWtlTmF2aWdhdGlvblBsYXRmb3JtTG9jYXRpb259LFxuICBdO1xufVxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
export { provideFakePlatformNavigation as ɵprovideFakePlatformNavigation } from './navigation/provide_fake_platform_navigation';
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9leHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vdGVzdGluZy9zcmMvcHJpdmF0ZV9leHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLDZCQUE2QixJQUFJLDhCQUE4QixFQUFDLE1BQU0sK0NBQStDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0IHtwcm92aWRlRmFrZVBsYXRmb3JtTmF2aWdhdGlvbiBhcyDJtXByb3ZpZGVGYWtlUGxhdGZvcm1OYXZpZ2F0aW9ufSBmcm9tICcuL25hdmlnYXRpb24vcHJvdmlkZV9mYWtlX3BsYXRmb3JtX25hdmlnYXRpb24nO1xuIl19
|