New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@genialis/resolwe

Package Overview
Dependencies
Maintainers
4
Versions
86
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@genialis/resolwe - npm Package Compare versions

Comparing version 2.0.5 to 3.0.0

2

dist/core/components/base.d.ts

@@ -77,3 +77,3 @@ /// <reference types="angular" />

*/
subscribe<T>(target: string | ((data: T) => any), observable: Rx.Observable<T> | Promise<any>, options?: SubscribeComponentOptions): Rx.IDisposable;
subscribe<T>(target: string | ((data: T) => any), observable: Rx.Observable<T> | Promise<any> | angular.IPromise<any>, options?: SubscribeComponentOptions): Rx.IDisposable;
/**

@@ -80,0 +80,0 @@ * Returns true if all subscriptions created by calling `subscribe` are ready.

@@ -25,2 +25,4 @@ "use strict";

__extends(DummyComponent, _super);
// @ngInject
DummyComponent.$inject = ["$scope"];
function DummyComponent($scope) {

@@ -106,2 +108,2 @@ var _this = _super.call(this, $scope) || this;

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL2NvbXBvbmVudHMvYmFzZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBCQUE0QjtBQUk1QiwrQkFBZ0Q7QUFDaEQsbURBQXdEO0FBRXhELDZCQUFpQixDQUFDLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxVQUFDLE1BQU07SUFLM0M7UUFBNkIsa0NBQWE7UUFPdEMsd0JBQVksTUFBc0I7WUFBbEMsWUFDSSxrQkFBTSxNQUFNLENBQUMsU0FJaEI7WUFSTSxXQUFLLEdBQWEsRUFBRSxDQUFDO1lBTXhCLEtBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSSxDQUFDLHFCQUFxQixDQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsR0FBRyxFQUFSLENBQVEsQ0FBQyxDQUFDO1lBQ2hFLEtBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSSxDQUFDLHFCQUFxQixDQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsS0FBSyxFQUFWLENBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQzs7UUFDOUUsQ0FBQztRQVpDLGNBQWM7WUFKbkIsZ0JBQVMsQ0FBQztnQkFDUCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07Z0JBQ3JCLFNBQVMsRUFBRSxzQkFBc0I7YUFDcEMsQ0FBQztXQUNJLGNBQWMsQ0FhbkI7UUFBRCxxQkFBQztLQWJELEFBYUMsQ0FiNEIsb0JBQWEsR0FhekM7SUFFRCxFQUFFLENBQUMsdURBQXVELEVBQUU7UUFDeEQsSUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FDcEMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FDbkMsQ0FBQztRQUVGLGdCQUFnQjtRQUNoQixJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYTthQUN2QixvQkFBb0IsRUFBRTthQUN0QixTQUFTLENBQUMsVUFBQyxLQUFLLElBQUss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dHMvYmFzZS5zcGVjLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgUnggZnJvbSAncngnO1xuaW1wb3J0ICogYXMgYW5ndWxhciBmcm9tICdhbmd1bGFyJztcblxuaW1wb3J0IHtDb21wb25lbnRCYXNlLCBjb21wb25lbnR9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQge2Rlc2NyaWJlQ29tcG9uZW50fSBmcm9tICcuLi8uLi90ZXN0cy9jb21wb25lbnQnO1xuXG5kZXNjcmliZUNvbXBvbmVudCgnYmFzZSBjb21wb25lbnQnLCBbXSwgKHRlc3RlcikgPT4ge1xuICAgIEBjb21wb25lbnQoe1xuICAgICAgICBtb2R1bGU6IHRlc3Rlci5tb2R1bGUsXG4gICAgICAgIGRpcmVjdGl2ZTogJ2dlbi13YXRjaC1vYnNlcnZhYmxlJyxcbiAgICB9KVxuICAgIGNsYXNzIER1bW15Q29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7XG4gICAgICAgIHB1YmxpYyBzdHI6IHN0cmluZztcbiAgICAgICAgcHVibGljIHN0ck9ic2VydmFibGU6IFJ4Lk9ic2VydmFibGU8c3RyaW5nPjtcblxuICAgICAgICBwdWJsaWMgYXJyYXk6IHN0cmluZ1tdID0gW107XG4gICAgICAgIHB1YmxpYyBhcnJheU9ic2VydmFibGU6IFJ4Lk9ic2VydmFibGU8c3RyaW5nW10+O1xuXG4gICAgICAgIGNvbnN0cnVjdG9yKCRzY29wZTogYW5ndWxhci5JU2NvcGUpIHtcbiAgICAgICAgICAgIHN1cGVyKCRzY29wZSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3RyT2JzZXJ2YWJsZSA9IHRoaXMuY3JlYXRlV2F0Y2hPYnNlcnZhYmxlKCgpID0+IHRoaXMuc3RyKTtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlPYnNlcnZhYmxlID0gdGhpcy5jcmVhdGVXYXRjaE9ic2VydmFibGUoKCkgPT4gdGhpcy5hcnJheSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpdCgnc2hvdWxkIHJlYWN0aXZlbHkgdXBkYXRlIG9uIHNoYWxsb3cgY29tcG9uZW50IGNoYW5nZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRlc3Rlci5jcmVhdGVDb21wb25lbnQ8RHVtbXlDb21wb25lbnQ+KFxuICAgICAgICAgICAgRHVtbXlDb21wb25lbnQuYXNWaWV3KCkudGVtcGxhdGVcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBUZXN0IHRoaXMuc3RyXG4gICAgICAgIGNvbnN0IHN0clNweSA9IGphc21pbmUuY3JlYXRlU3B5KCdzdHJTcHknKTtcbiAgICAgICAgY29tcG9uZW50LmN0cmwuc3RyT2JzZXJ2YWJsZVxuICAgICAgICAgICAgLmRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiBzdHJTcHkoXy5jbG9uZURlZXAodmFsdWUpKSk7XG5cbiAgICAgICAgY29tcG9uZW50LmN0cmwuc3RyID0gJ3NvbWUgdmFsdWUnO1xuICAgICAgICB0ZXN0ZXIuZGlnZXN0KCk7XG5cbiAgICAgICAgZXhwZWN0KHN0clNweS5jYWxscy5jb3VudCgpKS50b0JlKDIpO1xuICAgICAgICBleHBlY3Qoc3RyU3B5LmNhbGxzLmZpcnN0KCkuYXJnc1swXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgICBleHBlY3Qoc3RyU3B5LmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzBdKS50b0JlKCdzb21lIHZhbHVlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlYWN0aXZlbHkgdXBkYXRlIG9uIGRlZXAgY29tcG9uZW50IGNoYW5nZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRlc3Rlci5jcmVhdGVDb21wb25lbnQ8RHVtbXlDb21wb25lbnQ+KFxuICAgICAgICAgICAgRHVtbXlDb21wb25lbnQuYXNWaWV3KCkudGVtcGxhdGVcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBUZXN0IHRoaXMuYXJyYXlcbiAgICAgICAgY29uc3QgYXJyYXlTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgnYXJyYXlTcHknKTtcbiAgICAgICAgY29tcG9uZW50LmN0cmwuYXJyYXlPYnNlcnZhYmxlXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gIV8uaXNFbXB0eSh2YWx1ZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gYXJyYXlTcHkoXy5jbG9uZURlZXAodmFsdWUpKSk7XG5cbiAgICAgICAgY29tcG9uZW50LmN0cmwuYXJyYXkucHVzaCgnc29tZSB2YWx1ZScpO1xuICAgICAgICB0ZXN0ZXIuZGlnZXN0KCk7XG4gICAgICAgIGNvbXBvbmVudC5jdHJsLmFycmF5LnB1c2goJ3NvbWUgb3RoZXIgdmFsdWUnKTtcbiAgICAgICAgdGVzdGVyLmRpZ2VzdCgpO1xuXG4gICAgICAgIGV4cGVjdChhcnJheVNweS5jYWxscy5hbGwoKVswXS5hcmdzWzBdKS50b0VxdWFsKFsnc29tZSB2YWx1ZSddKTtcbiAgICAgICAgZXhwZWN0KGFycmF5U3B5LmNhbGxzLmFsbCgpWzFdLmFyZ3NbMF0pLnRvRXF1YWwoWydzb21lIHZhbHVlJywgJ3NvbWUgb3RoZXIgdmFsdWUnXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1cHBvcnQgd2F0Y2gnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRlc3Rlci5jcmVhdGVDb21wb25lbnQ8RHVtbXlDb21wb25lbnQ+KFxuICAgICAgICAgICAgRHVtbXlDb21wb25lbnQuYXNWaWV3KCkudGVtcGxhdGVcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBObyB3YXRjaCBzaG91bGQgYmUgY3JlYXRlZCBpZiBjb21wdXRhdGlvbiBpcyBpbW1lZGlhdGVseSB1bnN1YnNjcmliZWQuXG4gICAgICAgIGxldCBleHByZXNzaW9uID0gMDtcbiAgICAgICAgbGV0IGV4ZWN1dGVkID0gMDtcbiAgICAgICAgbGV0IHdhdGNoQ29tcHV0YXRpb24gPSBjb21wb25lbnQuY3RybC53YXRjaCgoKSA9PiBleHByZXNzaW9uLCAoY29tcHV0YXRpb24pID0+IHtcbiAgICAgICAgICAgIGV4ZWN1dGVkKys7XG4gICAgICAgICAgICBleHBlY3QoY29tcHV0YXRpb24uaXNEb25lKCkpLnRvQmVGYWxzeSgpO1xuICAgICAgICAgICAgY29tcHV0YXRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGV4cGVjdCh3YXRjaENvbXB1dGF0aW9uLmlzRG9uZSgpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgICAgZXhwcmVzc2lvbiA9IDE7XG4gICAgICAgIHRlc3Rlci5kaWdlc3QoKTtcbiAgICAgICAgZXhwZWN0KGV4ZWN1dGVkKS50b0JlKDEpO1xuXG4gICAgICAgIC8vIENoZWNrIHRoYXQgd2F0Y2hpbmcgd29ya3MgY29ycmVjdGx5LlxuICAgICAgICBleHByZXNzaW9uID0gMDtcbiAgICAgICAgZXhlY3V0ZWQgPSAwO1xuICAgICAgICB3YXRjaENvbXB1dGF0aW9uID0gY29tcG9uZW50LmN0cmwud2F0Y2goKCkgPT4gZXhwcmVzc2lvbiwgKGNvbXB1dGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBleGVjdXRlZCsrO1xuICAgICAgICAgICAgaWYgKGV4ZWN1dGVkID4gMikgY29tcHV0YXRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGV4cGVjdCh3YXRjaENvbXB1dGF0aW9uLmlzRG9uZSgpKS50b0JlRmFsc3koKTtcblxuICAgICAgICBleHByZXNzaW9uID0gMTtcbiAgICAgICAgdGVzdGVyLmRpZ2VzdCgpO1xuICAgICAgICAvLyBKdXN0IHRvIGNoZWNrIHRoYXQgd2F0Y2ggaXMgb25seSBldmFsdWF0ZWQgd2hlbiB0aGUgZXhwcmVzc2lvbiBjaGFuZ2VzLlxuICAgICAgICB0ZXN0ZXIuZGlnZXN0KCk7XG4gICAgICAgIGV4cGVjdChleGVjdXRlZCkudG9CZSgyKTtcblxuICAgICAgICBleHByZXNzaW9uID0gMjtcbiAgICAgICAgdGVzdGVyLmRpZ2VzdCgpO1xuICAgICAgICBleHBlY3QoZXhlY3V0ZWQpLnRvQmUoMyk7XG5cbiAgICAgICAgLy8gQ2hlY2sgdGhhdCB1bnN1YnNjcmliZSBhY3R1YWxseSBzdG9wcyB0aGUgd2F0Y2guXG4gICAgICAgIGV4cHJlc3Npb24gPSAzO1xuICAgICAgICB0ZXN0ZXIuZGlnZXN0KCk7XG4gICAgICAgIGV4cGVjdChleGVjdXRlZCkudG9CZSgzKTtcbiAgICB9KTtcbn0pO1xuXG5cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL2NvbXBvbmVudHMvYmFzZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBCQUE0QjtBQUk1QiwrQkFBZ0Q7QUFDaEQsbURBQXdEO0FBRXhELDZCQUFpQixDQUFDLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxVQUFDLE1BQU07SUFLM0M7UUFBNkIsa0NBQWE7UUFPdEMsWUFBWTtRQUNaLHdCQUFZLE1BQXNCO1lBQWxDLFlBQ0ksa0JBQU0sTUFBTSxDQUFDLFNBSWhCO1lBVE0sV0FBSyxHQUFhLEVBQUUsQ0FBQztZQU94QixLQUFJLENBQUMsYUFBYSxHQUFHLEtBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLEdBQUcsRUFBUixDQUFRLENBQUMsQ0FBQztZQUNoRSxLQUFJLENBQUMsZUFBZSxHQUFHLEtBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLEtBQUssRUFBVixDQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7O1FBQzlFLENBQUM7UUFiQyxjQUFjO1lBSm5CLGdCQUFTLENBQUM7Z0JBQ1AsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2dCQUNyQixTQUFTLEVBQUUsc0JBQXNCO2FBQ3BDLENBQUM7V0FDSSxjQUFjLENBY25CO1FBQUQscUJBQUM7S0FkRCxBQWNDLENBZDRCLG9CQUFhLEdBY3pDO0lBRUQsRUFBRSxDQUFDLHVEQUF1RCxFQUFFO1FBQ3hELElBQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQ3BDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQ25DLENBQUM7UUFFRixnQkFBZ0I7UUFDaEIsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWE7YUFDdkIsb0JBQW9CLEVBQUU7YUFDdEIsU0FBUyxDQUFDLFVBQUMs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ZS9jb21wb25lbnRzL2Jhc2Uuc3BlYy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIFJ4IGZyb20gJ3J4JztcbmltcG9ydCAqIGFzIGFuZ3VsYXIgZnJvbSAnYW5ndWxhcic7XG5cbmltcG9ydCB7Q29tcG9uZW50QmFzZSwgY29tcG9uZW50fSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHtkZXNjcmliZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vdGVzdHMvY29tcG9uZW50JztcblxuZGVzY3JpYmVDb21wb25lbnQoJ2Jhc2UgY29tcG9uZW50JywgW10sICh0ZXN0ZXIpID0+IHtcbiAgICBAY29tcG9uZW50KHtcbiAgICAgICAgbW9kdWxlOiB0ZXN0ZXIubW9kdWxlLFxuICAgICAgICBkaXJlY3RpdmU6ICdnZW4td2F0Y2gtb2JzZXJ2YWJsZScsXG4gICAgfSlcbiAgICBjbGFzcyBEdW1teUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2Uge1xuICAgICAgICBwdWJsaWMgc3RyOiBzdHJpbmc7XG4gICAgICAgIHB1YmxpYyBzdHJPYnNlcnZhYmxlOiBSeC5PYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgICAgICAgcHVibGljIGFycmF5OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBwdWJsaWMgYXJyYXlPYnNlcnZhYmxlOiBSeC5PYnNlcnZhYmxlPHN0cmluZ1tdPjtcblxuICAgICAgICAvLyBAbmdJbmplY3RcbiAgICAgICAgY29uc3RydWN0b3IoJHNjb3BlOiBhbmd1bGFyLklTY29wZSkge1xuICAgICAgICAgICAgc3VwZXIoJHNjb3BlKTtcblxuICAgICAgICAgICAgdGhpcy5zdHJPYnNlcnZhYmxlID0gdGhpcy5jcmVhdGVXYXRjaE9ic2VydmFibGUoKCkgPT4gdGhpcy5zdHIpO1xuICAgICAgICAgICAgdGhpcy5hcnJheU9ic2VydmFibGUgPSB0aGlzLmNyZWF0ZVdhdGNoT2JzZXJ2YWJsZSgoKSA9PiB0aGlzLmFycmF5LCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGl0KCdzaG91bGQgcmVhY3RpdmVseSB1cGRhdGUgb24gc2hhbGxvdyBjb21wb25lbnQgY2hhbmdlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGVzdGVyLmNyZWF0ZUNvbXBvbmVudDxEdW1teUNvbXBvbmVudD4oXG4gICAgICAgICAgICBEdW1teUNvbXBvbmVudC5hc1ZpZXcoKS50ZW1wbGF0ZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFRlc3QgdGhpcy5zdHJcbiAgICAgICAgY29uc3Qgc3RyU3B5ID0gamFzbWluZS5jcmVhdGVTcHkoJ3N0clNweScpO1xuICAgICAgICBjb21wb25lbnQuY3RybC5zdHJPYnNlcnZhYmxlXG4gICAgICAgICAgICAuZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHN0clNweShfLmNsb25lRGVlcCh2YWx1ZSkpKTtcblxuICAgICAgICBjb21wb25lbnQuY3RybC5zdHIgPSAnc29tZSB2YWx1ZSc7XG4gICAgICAgIHRlc3Rlci5kaWdlc3QoKTtcblxuICAgICAgICBleHBlY3Qoc3RyU3B5LmNhbGxzLmNvdW50KCkpLnRvQmUoMik7XG4gICAgICAgIGV4cGVjdChzdHJTcHkuY2FsbHMuZmlyc3QoKS5hcmdzWzBdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgICAgIGV4cGVjdChzdHJTcHkuY2FsbHMubW9zdFJlY2VudCgpLmFyZ3NbMF0pLnRvQmUoJ3NvbWUgdmFsdWUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVhY3RpdmVseSB1cGRhdGUgb24gZGVlcCBjb21wb25lbnQgY2hhbmdlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGVzdGVyLmNyZWF0ZUNvbXBvbmVudDxEdW1teUNvbXBvbmVudD4oXG4gICAgICAgICAgICBEdW1teUNvbXBvbmVudC5hc1ZpZXcoKS50ZW1wbGF0ZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFRlc3QgdGhpcy5hcnJheVxuICAgICAgICBjb25zdCBhcnJheVNweSA9IGphc21pbmUuY3JlYXRlU3B5KCdhcnJheVNweScpO1xuICAgICAgICBjb21wb25lbnQuY3RybC5hcnJheU9ic2VydmFibGVcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiAhXy5pc0VtcHR5KHZhbHVlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiBhcnJheVNweShfLmNsb25lRGVlcCh2YWx1ZSkpKTtcblxuICAgICAgICBjb21wb25lbnQuY3RybC5hcnJheS5wdXNoKCdzb21lIHZhbHVlJyk7XG4gICAgICAgIHRlc3Rlci5kaWdlc3QoKTtcbiAgICAgICAgY29tcG9uZW50LmN0cmwuYXJyYXkucHVzaCgnc29tZSBvdGhlciB2YWx1ZScpO1xuICAgICAgICB0ZXN0ZXIuZGlnZXN0KCk7XG5cbiAgICAgICAgZXhwZWN0KGFycmF5U3B5LmNhbGxzLmFsbCgpWzBdLmFyZ3NbMF0pLnRvRXF1YWwoWydzb21lIHZhbHVlJ10pO1xuICAgICAgICBleHBlY3QoYXJyYXlTcHkuY2FsbHMuYWxsKClbMV0uYXJnc1swXSkudG9FcXVhbChbJ3NvbWUgdmFsdWUnLCAnc29tZSBvdGhlciB2YWx1ZSddKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VwcG9ydCB3YXRjaCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGVzdGVyLmNyZWF0ZUNvbXBvbmVudDxEdW1teUNvbXBvbmVudD4oXG4gICAgICAgICAgICBEdW1teUNvbXBvbmVudC5hc1ZpZXcoKS50ZW1wbGF0ZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIE5vIHdhdGNoIHNob3VsZCBiZSBjcmVhdGVkIGlmIGNvbXB1dGF0aW9uIGlzIGltbWVkaWF0ZWx5IHVuc3Vic2NyaWJlZC5cbiAgICAgICAgbGV0IGV4cHJlc3Npb24gPSAwO1xuICAgICAgICBsZXQgZXhlY3V0ZWQgPSAwO1xuICAgICAgICBsZXQgd2F0Y2hDb21wdXRhdGlvbiA9IGNvbXBvbmVudC5jdHJsLndhdGNoKCgpID0+IGV4cHJlc3Npb24sIChjb21wdXRhdGlvbikgPT4ge1xuICAgICAgICAgICAgZXhlY3V0ZWQrKztcbiAgICAgICAgICAgIGV4cGVjdChjb21wdXRhdGlvbi5pc0RvbmUoKSkudG9CZUZhbHN5KCk7XG4gICAgICAgICAgICBjb21wdXRhdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHdhdGNoQ29tcHV0YXRpb24uaXNEb25lKCkpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgICBleHByZXNzaW9uID0gMTtcbiAgICAgICAgdGVzdGVyLmRpZ2VzdCgpO1xuICAgICAgICBleHBlY3QoZXhlY3V0ZWQpLnRvQmUoMSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgdGhhdCB3YXRjaGluZyB3b3JrcyBjb3JyZWN0bHkuXG4gICAgICAgIGV4cHJlc3Npb24gPSAwO1xuICAgICAgICBleGVjdXRlZCA9IDA7XG4gICAgICAgIHdhdGNoQ29tcHV0YXRpb24gPSBjb21wb25lbnQuY3RybC53YXRjaCgoKSA9PiBleHByZXNzaW9uLCAoY29tcHV0YXRpb24pID0+IHtcbiAgICAgICAgICAgIGV4ZWN1dGVkKys7XG4gICAgICAgICAgICBpZiAoZXhlY3V0ZWQgPiAyKSBjb21wdXRhdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHdhdGNoQ29tcHV0YXRpb24uaXNEb25lKCkpLnRvQmVGYWxzeSgpO1xuXG4gICAgICAgIGV4cHJlc3Npb24gPSAxO1xuICAgICAgICB0ZXN0ZXIuZGlnZXN0KCk7XG4gICAgICAgIC8vIEp1c3QgdG8gY2hlY2sgdGhhdCB3YXRjaCBpcyBvbmx5IGV2YWx1YXRlZCB3aGVuIHRoZSBleHByZXNzaW9uIGNoYW5nZXMuXG4gICAgICAgIHRlc3Rlci5kaWdlc3QoKTtcbiAgICAgICAgZXhwZWN0KGV4ZWN1dGVkKS50b0JlKDIpO1xuXG4gICAgICAgIGV4cHJlc3Npb24gPSAyO1xuICAgICAgICB0ZXN0ZXIuZGlnZXN0KCk7XG4gICAgICAgIGV4cGVjdChleGVjdXRlZCkudG9CZSgzKTtcblxuICAgICAgICAvLyBDaGVjayB0aGF0IHVuc3Vic2NyaWJlIGFjdHVhbGx5IHN0b3BzIHRoZSB3YXRjaC5cbiAgICAgICAgZXhwcmVzc2lvbiA9IDM7XG4gICAgICAgIHRlc3Rlci5kaWdlc3QoKTtcbiAgICAgICAgZXhwZWN0KGV4ZWN1dGVkKS50b0JlKDMpO1xuICAgIH0pO1xufSk7XG5cblxuIl19
/// <reference types="ng-file-upload" />
/// <reference types="angular" />
import * as Rx from 'rx';
import * as angular from 'angular';

@@ -8,2 +9,16 @@ import 'ng-file-upload';

import { FileUploadResponse } from '../../api/types/modules';
export declare enum UploadEventType {
PROGRESS = "progress",
RETRYING = "retrying",
RESULT = "result",
}
export declare type UploadEvent<T> = {
progress: ProgressEvent;
type: UploadEventType.PROGRESS;
} | {
type: UploadEventType.RETRYING;
} | {
result: T;
type: UploadEventType.RESULT;
};
/**

@@ -15,2 +30,7 @@ * Base API service class providing additional features like file

export declare class APIServiceBase {
consecutiveAutoretryAttempts: number;
CHUNK_SIZE: number;
RETRY_DELAY_INCREMENT: number;
MAX_RETRY_DELAY: number;
ERROR_GROUPING_TIME: () => number;
connection: Connection;

@@ -20,3 +40,3 @@ private _upload;

private _http;
constructor(Upload: angular.angularFileUpload.IUploadService, $q: angular.IQService, $http: angular.IHttpService);
constructor(Upload: angular.angularFileUpload.IUploadService, $q: angular.IQService, $http: angular.IHttpService, consecutiveAutoretryAttempts?: number);
/**

@@ -36,7 +56,7 @@ * Performs a data upload.

*/
upload<T>(data: any, fileUID?: string): angular.angularFileUpload.IUploadPromise<T>;
upload<T>(data: any, fileUID?: string): Rx.Observable<UploadEvent<T>>;
/**
* Uploads string content as a file.
*/
uploadString(filename: string, content: string): angular.angularFileUpload.IUploadPromise<FileUploadResponse>;
uploadString(filename: string, content: string): Rx.Observable<UploadEvent<FileUploadResponse>>;
}

@@ -63,2 +83,5 @@ /**

* );
*
* // Configure upload auto-retries to infinity
* apiProvider.setConsecutiveAutoretryAttempts(Infinity);
* });

@@ -72,4 +95,6 @@ * ```

private _websocketUri;
private _consecutiveAutoretryAttempts;
setAPI(api: typeof ResolweApi, connection: Connection, restUri: string, websocketUri: string): void;
setConsecutiveAutoretryAttempts(retries: number): void;
$get(Upload: angular.angularFileUpload.IUploadService, $q: angular.IQService, $http: angular.IHttpService): any;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Rx = require("rx");
var angular = require("angular");
var _ = require("lodash");
require("ng-file-upload");

@@ -11,2 +13,8 @@ var error_1 = require("../errors/error");

]);
var UploadEventType;
(function (UploadEventType) {
UploadEventType["PROGRESS"] = "progress";
UploadEventType["RETRYING"] = "retrying";
UploadEventType["RESULT"] = "result";
})(UploadEventType = exports.UploadEventType || (exports.UploadEventType = {}));
/**

@@ -18,6 +26,16 @@ * Base API service class providing additional features like file

var APIServiceBase = /** @class */ (function () {
function APIServiceBase(Upload, $q, $http) {
function APIServiceBase(Upload, $q, $http, consecutiveAutoretryAttempts) {
var _this = this;
// Note that this is configurable in provider
this.consecutiveAutoretryAttempts = 5;
this.CHUNK_SIZE = 1 * 1024 * 1024; // 1MB
this.RETRY_DELAY_INCREMENT = 500;
this.MAX_RETRY_DELAY = 5000;
this.ERROR_GROUPING_TIME = function () { return _this.RETRY_DELAY_INCREMENT * _this.consecutiveAutoretryAttempts * 2; };
this._upload = Upload;
this._q = $q;
this._http = $http;
if (!_.isUndefined(consecutiveAutoretryAttempts)) {
this.consecutiveAutoretryAttempts = consecutiveAutoretryAttempts;
}
}

@@ -39,4 +57,4 @@ /**

APIServiceBase.prototype.upload = function (data, fileUID) {
var _this = this;
if (fileUID === void 0) { fileUID = ''; }
var http = this._http;
var url = this.connection.createUriFromPath('/upload/');

@@ -48,26 +66,76 @@ var headers = {

};
return this._upload.upload({
url: url,
method: 'POST',
headers: headers,
withCredentials: true,
resumeSize: function () {
// There is a reason that this function does not use the fat arrow syntax. We need
// to get a reference to the internal config object (via 'this') due to a bug in
// the ng-file-upload library: https://github.com/danialfarid/ng-file-upload/issues/1392
var config = this;
return http.get(url, {
headers: headers,
withCredentials: true,
}).then(function (response) {
// Set _end as it is otherwise not set due to the above bug.
var resumeOffset = response.data.resume_offset;
if (config._chunkSize) {
config._end = resumeOffset + config._chunkSize;
}
return resumeOffset;
});
},
resumeChunkSize: '1MB',
data: data,
return Rx.Observable.create(function (observer) {
observer.onNext({ type: UploadEventType.RETRYING }); // Note: First one of these is skipped below.
var rejectableResumeSizePromise = _this._q.defer();
var fileUpload = _this._upload.upload({
url: url,
method: 'POST',
headers: headers,
withCredentials: true,
resumeSize: function () {
var resumeSizePromise = _this._http.get(url, {
headers: headers,
withCredentials: true,
}).then(function (response) {
return response.data.resume_offset;
}, function (error) {
observer.onError(error); // Handled in observables
return _this._q.defer().promise; // Never resolve
});
rejectableResumeSizePromise.resolve(resumeSizePromise);
return rejectableResumeSizePromise.promise;
},
resumeChunkSize: _this.CHUNK_SIZE,
data: data,
});
fileUpload.then(function (result) {
observer.onNext({ result: result.data, type: UploadEventType.RESULT });
observer.onCompleted();
}, function (error) {
observer.onError(error);
}, function (progress) {
observer.onNext({ progress: progress, type: UploadEventType.PROGRESS });
});
return function () {
// To differentiate between connections aborted by server or client (when computer
// goes to standby/sleep), we emit a custom error. Otherwise we would have to
// filter out all `xhrStatus === 'abort'` and couldn't auto-retry after standby.
observer.onError({ xhrStatus: 'manual-abort' });
fileUpload.abort();
rejectableResumeSizePromise.reject();
};
})
.retryWhen(function (errors) {
return errors
.filter(function (error) { return error && error.xhrStatus !== 'manual-abort'; })
.timeInterval()
.scan(function (accumulated, value) {
var error = value.value;
var timeSincePrevious = value.interval;
var consecutiveErrors = accumulated.consecutiveErrors + 1;
if (timeSincePrevious > _this.ERROR_GROUPING_TIME())
consecutiveErrors = 1;
var retry = consecutiveErrors <= _this.consecutiveAutoretryAttempts;
var delay = Math.min(consecutiveErrors * _this.RETRY_DELAY_INCREMENT, _this.MAX_RETRY_DELAY);
return { error: error, consecutiveErrors: consecutiveErrors, timeSincePrevious: timeSincePrevious, retry: retry, delay: delay };
}, { error: null, consecutiveErrors: 0, timeSincePrevious: 0, retry: false, delay: 0 })
.flatMap(function (_a) {
var retry = _a.retry, delay = _a.delay, error = _a.error;
// This event is probably computer going to standby. Wait a bit longer.
if (error && error.xhrStatus === 'abort')
delay = 10000;
if (!retry) {
return Rx.Observable.throw(error);
}
return Rx.Observable.just(error).delay(delay);
})
.do(function (error) {
console.log("Retrying upload after an error", error);
});
})
.skip(1) // Skip initial 'retrying' event.
.filter(function (event) {
// If a retry request fails, it would remove the progress bar until it
// succeeds again. With this filter we can keep the progress bar anyway.
return !(event.type === UploadEventType.PROGRESS && event.progress.loaded === 0 && event.progress.total === 0);
});

@@ -113,2 +181,5 @@ };

* );
*
* // Configure upload auto-retries to infinity
* apiProvider.setConsecutiveAutoretryAttempts(Infinity);
* });

@@ -126,5 +197,8 @@ * ```

};
APIServiceProvider.prototype.setConsecutiveAutoretryAttempts = function (retries) {
this._consecutiveAutoretryAttempts = retries;
};
// @ngInject
APIServiceProvider.prototype.$get = function (Upload, $q, $http) {
// TODO: Use error notifciation service instead.
// TODO: Use error notification service instead.
if (!this._api)

@@ -138,3 +212,3 @@ throw new error_1.GenError("API not configured.");

// Arguments for APIServiceBase part.
[Upload, $q, $http]);
[Upload, $q, $http, this._consecutiveAutoretryAttempts]);
};

@@ -147,2 +221,2 @@ APIServiceProvider.prototype.$get.$inject = ["Upload", "$q", "$http"];

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL3NlcnZpY2VzL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUFtQztBQUNuQywwQkFBd0I7QUFFeEIseUNBQXlDO0FBSXpDLHNDQUFzQztBQUN0Qyx3Q0FBMEM7QUFFMUMsSUFBTSxhQUFhLEdBQW9CLE9BQU8sQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUU7SUFDMUUsY0FBYztDQUNqQixDQUFDLENBQUM7QUFFSDs7OztHQUlHO0FBQ0g7SUFTSSx3QkFBWSxNQUFnRCxFQUNoRCxFQUFxQixFQUNyQixLQUEyQjtRQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0ksK0JBQU0sR0FBYixVQUFpQixJQUFTLEVBQUUsT0FBb0I7UUFBcEIsd0JBQUEsRUFBQSxZQUFvQjtRQUM1QyxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hCLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsSUFBTSxPQUFPLEdBQXNDO1lBQy9DLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRTtZQUN6QyxZQUFZLEVBQUUsT0FBTztZQUNyQixhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUU7U0FDOUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBSTtZQUMxQixHQUFHLEVBQUUsR0FBRztZQUNSLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFLE9BQU87WUFDaEIsZUFBZSxFQUFFLElBQUk7WUFDckIsVUFBVSxFQUFFO2dCQUNSLGtGQUFrRjtnQkFD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QUN0QixDQUFDO0lBQ04sQ0FBQztJQUNMLHlCQUFDO0FBQUQsQ0FqQ0EsQUFpQ0MsSUFBQTtBQWpDWSxnREFBa0I7QUFtQy9CLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUMiLCJmaWxlIjoiY29yZS9zZXJ2aWNlcy9hcGkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhbmd1bGFyIGZyb20gJ2FuZ3VsYXInO1xuaW1wb3J0ICduZy1maWxlLXVwbG9hZCc7XG5cbmltcG9ydCB7R2VuRXJyb3J9IGZyb20gJy4uL2Vycm9ycy9lcnJvcic7XG5pbXBvcnQge1Jlc29sd2VBcGl9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQge0Nvbm5lY3Rpb259IGZyb20gJy4uLy4uL2FwaS9jb25uZWN0aW9uJztcbmltcG9ydCB7RmlsZVVwbG9hZFJlc3BvbnNlfSBmcm9tICcuLi8uLi9hcGkvdHlwZXMvbW9kdWxlcyc7XG5pbXBvcnQge2NvbXBvc2V9IGZyb20gJy4uL3V0aWxzL2xhbmcnO1xuaW1wb3J0ICogYXMgcmFuZG9tIGZyb20gJy4uL3V0aWxzL3JhbmRvbSc7XG5cbmNvbnN0IGFuZ3VsYXJNb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKCdyZXNvbHdlLnNlcnZpY2VzLmFwaScsIFtcbiAgICAnbmdGaWxlVXBsb2FkJyxcbl0pO1xuXG4vKipcbiAqIEJhc2UgQVBJIHNlcnZpY2UgY2xhc3MgcHJvdmlkaW5nIGFkZGl0aW9uYWwgZmVhdHVyZXMgbGlrZSBmaWxlXG4gKiB1cGxvYWQgc3VwcG9ydC4gSXQgc2hvdWxkIGJlIHVzZWQgYXMgYSBtaXhpbiB0b2dldGhlciB3aXRoIGFuXG4gKiBhY3R1YWwgQVBJIGNsYXNzLlxuICovXG5leHBvcnQgY2xhc3MgQVBJU2VydmljZUJhc2Uge1xuICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNvbm5lY3Rpb24gcHJvcGVydHkgaXMgbm90IGluaXRpYWxpemVkIGFueXdoZXJlIGFzIGl0IHdpbGxcbiAgICAvLyBiZSBpbml0aWFsaXplZCBieSB0aGUgYWN0dWFsIEFQSSB3aGljaCBpcyBtaXhlZCBpbiBieSB0aGUgcHJvdmlkZXIuXG4gICAgcHVibGljIGNvbm5lY3Rpb246IENvbm5lY3Rpb247XG5cbiAgICBwcml2YXRlIF91cGxvYWQ6IGFuZ3VsYXIuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFNlcnZpY2U7XG4gICAgcHJpdmF0ZSBfcTogYW5ndWxhci5JUVNlcnZpY2U7XG4gICAgcHJpdmF0ZSBfaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2U7XG5cbiAgICBjb25zdHJ1Y3RvcihVcGxvYWQ6IGFuZ3VsYXIuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSkge1xuICAgICAgICB0aGlzLl91cGxvYWQgPSBVcGxvYWQ7XG4gICAgICAgIHRoaXMuX3EgPSAkcTtcbiAgICAgICAgdGhpcy5faHR0cCA9ICRodHRwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgZGF0YSB1cGxvYWQuXG4gICAgICpcbiAgICAgKiBFYWNoIGZpZWxkIGluY2x1ZGluZyBuZXN0ZWQgb2JqZWN0cyB3aWxsIGJlIHNlbnQgYXMgYSBmb3JtIGRhdGEgbXVsdGlwYXJ0LlxuICAgICAqIFNhbXBsZXM6XG4gICAgICogICB7cGljOiBmaWxlLCB1c2VybmFtZTogdXNlcm5hbWV9XG4gICAgICogICB7ZmlsZXM6IGZpbGVzLCBvdGhlckluZm86IHtpZDogaWQsIHBlcnNvbjogcGVyc29uLC4uLn19IG11bHRpcGxlIGZpbGVzIChodG1sNSlcbiAgICAgKiAgIHtwcm9maWxlczoge1t7cGljOiBmaWxlMSwgdXNlcm5hbWU6IHVzZXJuYW1lMX0sIHtwaWM6IGZpbGUyLCB1c2VybmFtZTogdXNlcm5hbWUyfV19IG5lc3RlZCBhcnJheSBtdWx0aXBsZSBmaWxlcyAoaHRtbDUpXG4gICAgICogICB7ZmlsZTogZmlsZSwgaW5mbzogVXBsb2FkLmpzb24oe2lkOiBpZCwgbmFtZTogbmFtZSwgLi4ufSl9IHNlbmQgZmllbGRzIGFzIGpzb24gc3RyaW5nXG4gICAgICogICB7ZmlsZTogZmlsZSwgaW5mbzogVXBsb2FkLmpzb25CbG9iKHtpZDogaWQsIG5hbWU6IG5hbWUsIC4uLn0pfSBzZW5kIGZpZWxkcyBhcyBqc29uIGJsb2IsICdhcHBsaWNhdGlvbi9qc29uJyBjb250ZW50X3R5cGVcbiAgICAgKiAgIHtwaWNGaWxlOiBVcGxvYWQucmVuYW1lKGZpbGUsICdwcm9maWxlLmpwZycpLCB0aXRsZTogdGl0bGV9IHNlbmQgZmlsZSB3aXRoIHBpY0ZpbGUga2V5IGFuZCBwcm9maWxlLmpwZyBmaWxlIG5hbWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YW55fSBkYXRhIFNlZSBhbmd1bGFyLmFuZ3VsYXJGaWxlVXBsb2FkLklGaWxlVXBsb2FkQ29uZmlnRmlsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBsb2FkPFQ+KGRhdGE6IGFueSwgZmlsZVVJRDogc3RyaW5nID0gJycpOiBhbmd1bGFyLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRQcm9taXNlPFQ+IHtcbiAgICAgICAgY29uc3QgaHR0cCA9IHRoaXMuX2h0dHA7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29ubmVjdGlvbi5jcmVhdGVVcmlGcm9tUGF0aCgnL3VwbG9hZC8nKTtcbiAgICAgICAgY29uc3QgaGVhZGVyczogYW5ndWxhci5JSHR0cFJlcXVlc3RDb25maWdIZWFkZXJzID0ge1xuICAgICAgICAgICAgJ1Nlc3Npb24tSWQnOiB0aGlzLmNvbm5lY3Rpb24uc2Vzc2lvbklkKCksXG4gICAgICAgICAgICAnWC1GaWxlLVVpZCc6IGZpbGVVSUQsXG4gICAgICAgICAgICAnWC1DU1JGVG9rZW4nOiB0aGlzLmNvbm5lY3Rpb24uY3NyZkNvb2tpZSgpLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLl91cGxvYWQudXBsb2FkPFQ+KHtcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgcmVzdW1lU2l6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgcmVhc29uIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgdGhlIGZhdCBhcnJvdyBzeW50YXguIFdlIG5lZWRcbiAgICAgICAgICAgICAgICAvLyB0byBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGludGVybmFsIGNvbmZpZyBvYmplY3QgKHZpYSAndGhpcycpIGR1ZSB0byBhIGJ1ZyBpblxuICAgICAgICAgICAgICAgIC8vIHRoZSBuZy1maWxlLXVwbG9hZCBsaWJyYXJ5OiBodHRwczovL2dpdGh1Yi5jb20vZGFuaWFsZmFyaWQvbmctZmlsZS11cGxvYWQvaXNzdWVzLzEzOTJcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0dHAuZ2V0KHVybCwge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IF9lbmQgYXMgaXQgaXMgb3RoZXJ3aXNlIG5vdCBzZXQgZHVlIHRvIHRoZSBhYm92ZSBidWcuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VtZU9mZnNldDogbnVtYmVyID0gKDxhbnk+IHJlc3BvbnNlLmRhdGEpLnJlc3VtZV9vZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuX2NodW5rU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9lbmQgPSByZXN1bWVPZmZzZXQgKyBjb25maWcuX2NodW5rU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdW1lT2Zmc2V0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZUNodW5rU2l6ZTogJzFNQicsXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGxvYWRzIHN0cmluZyBjb250ZW50IGFzIGEgZmlsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBsb2FkU3RyaW5nKGZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IGFuZ3VsYXIuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFByb21pc2U8RmlsZVVwbG9hZFJlc3BvbnNlPiB7XG4gICAgICAgIGxldCBmaWxlOiBGaWxlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmlsZSA9IG5ldyBGaWxlKFtjb250ZW50XSwgZmlsZW5hbWUsIHt0eXBlOiAndGV4dC9wbGFpbicsIGxhc3RNb2RpZmllZDogRGF0ZS5ub3coKX0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBTaW1wbGUgZmFsbGJhY2sgZm9yIFNhZmFyaSA5IGFuZCBJRS9FZGdlLCBiZWNhdXNlIHRoZXkgZG9uJ3RcbiAgICAgICAgICAgIC8vIHN1cHBvcnQgRmlsZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICAgIGZpbGUgPSA8RmlsZT4gXy5hc3NpZ24obmV3IEJsb2IoW2NvbnRlbnRdLCB7dHlwZTogJ3RleHQvcGxhaW4nfSksIHtuYW1lOiBmaWxlbmFtZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkPEZpbGVVcGxvYWRSZXNwb25zZT4oe2ZpbGU6IGZpbGV9LCAnc3RyaW5nLScgKyByYW5kb20ucmFuZG9tVXVpZCgpKTtcbiAgICB9XG59XG5cbi8qKlxuICogU2VydmljZSBwcm92aWRlciBmb3IgY29uZmlndXJpbmcgdGhlIEFQSSBzZXJ2aWNlLiBCZWZvcmUgdXNpbmcgdGhlXG4gKiBBUEkgc2VydmljZSwgdGhpcyBwcm92aWRlciBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCBhbiBhY3R1YWwgQVBJXG4gKiBjbGFzcywgd2hpY2ggc2hvdWxkIGRlcml2ZSBmcm9tIFtbUmVzb2x3ZUFwaV1dLlxuICpcbiAqIEZvciBleGFtcGxlLCBpZiB0aGUgQVBJIGNsYXNzIGlzIGNhbGxlZCBgQmFzZUFwaWAsIHdlIGNhbiBjb25maWd1cmVcbiAqIHRoZSBBUEkgc2VydmljZSBhcyBmb2xsb3dzOlxuICogYGBgXG4gKiAvLyBDcmVhdGUgYSB0eXBlIGZvciB0aGUgc2VydmljZS5cbiAqIGV4cG9ydCBpbnRlcmZhY2UgQVBJU2VydmljZSBleHRlbmRzIEFQSVNlcnZpY2VCYXNlLCBCYXNlQXBpIHtcbiAqIH1cbiAqXG4gKiAvLyBDb25maWd1cmUgdGhlIEFQSSBwcm92aWRlciB3aXRoIG91ciBBUEkgaW5zdGFuY2UuXG4gKiBtb2R1bGUuY29uZmlnKChhcGlQcm92aWRlcjogQVBJU2VydmljZVByb3ZpZGVyKSA9PiB7XG4gKiAgICAgYXBpUHJvdmlkZXIuc2V0QVBJKFxuICogICAgICAgICBCYXNlQXBpLFxuICogICAgICAgICBuZXcgU2ltcGxlQ29ubmVjdGlvbigpLFxuICogICAgICAgICBSRVNUX1VSTCxcbiAqICAgICAgICAgV0VCU09DS0VUX1VSTFxuICogICAgICk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQVBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAvLyBBUEkgaW5zdGFuY2UgdGhhdCBzaG91bGQgYmUgdXNlZCBieSB0aGUgc2VydmljZS5cbiAgICBwcml2YXRlIF9hcGk6IHR5cGVvZiBSZXNvbHdlQXBpO1xuICAgIHByaXZhdGUgX2Nvbm5lY3Rpb246IENvbm5lY3Rpb247XG4gICAgcHJpdmF0ZSBfcmVzdFVyaTogc3RyaW5nO1xuICAgIHByaXZhdGUgX3dlYnNvY2tldFVyaTogc3RyaW5nO1xuXG4gICAgcHVibGljIHNldEFQSShhcGk6IHR5cGVvZiBSZXNvbHdlQXBpLFxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbjogQ29ubmVjdGlvbixcbiAgICAgICAgICAgICAgICAgIHJlc3RVcmk6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgIHdlYnNvY2tldFVyaTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2FwaSA9IGFwaTtcbiAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgICAgIHRoaXMuX3Jlc3RVcmkgPSByZXN0VXJpO1xuICAgICAgICB0aGlzLl93ZWJzb2NrZXRVcmkgPSB3ZWJzb2NrZXRVcmk7XG4gICAgfVxuXG4gICAgLy8gQG5nSW5qZWN0XG4gICAgcHVibGljICRnZXQoVXBsb2FkOiBhbmd1bGFyLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICRxOiBhbmd1bGFyLklRU2VydmljZSxcbiAgICAgICAgICAgICAgICAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UpIHtcbiAgICAgICAgLy8gVE9ETzogVXNlIGVycm9yIG5vdGlmY2lhdGlvbiBzZXJ2aWNlIGluc3RlYWQuXG4gICAgICAgIGlmICghdGhpcy5fYXBpKSB0aHJvdyBuZXcgR2VuRXJyb3IoXCJBUEkgbm90IGNvbmZpZ3VyZWQuXCIpO1xuXG4gICAgICAgIC8vIE1peCB0b2dldGhlciB0aGUgQVBJIGFuZCB0aGUgQVBJU2VydmljZUJhc2UuXG4gICAgICAgIGxldCBzZXJ2aWNlQ2xhc3MgPSBjb21wb3NlKFt0aGlzLl9hcGksIEFQSVNlcnZpY2VCYXNlXSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgc2VydmljZUNsYXNzKFxuICAgICAgICAgICAgLy8gQXJndW1lbnRzIGZvciB0aGUgQVBJIHBhcnQuXG4gICAgICAgICAgICBbdGhpcy5fY29ubmVjdGlvbiwgdGhpcy5fcmVzdFVyaSwgdGhpcy5fd2Vic29ja2V0VXJpXSxcbiAgICAgICAgICAgIC8vIEFyZ3VtZW50cyBmb3IgQVBJU2VydmljZUJhc2UgcGFydC5cbiAgICAgICAgICAgIFtVcGxvYWQsICRxLCAkaHR0cF1cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmFuZ3VsYXJNb2R1bGUucHJvdmlkZXIoJ2FwaScsIEFQSVNlcnZpY2VQcm92aWRlcik7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL3NlcnZpY2VzL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVCQUF5QjtBQUN6QixpQ0FBbUM7QUFDbkMsMEJBQTRCO0FBQzVCLDBCQUF3QjtBQUV4Qix5Q0FBeUM7QUFJekMsc0NBQXNDO0FBQ3RDLHdDQUEwQztBQUUxQyxJQUFNLGFBQWEsR0FBb0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRTtJQUMxRSxjQUFjO0NBQ2pCLENBQUMsQ0FBQztBQUVILElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN2Qix3Q0FBcUIsQ0FBQTtJQUNyQix3Q0FBcUIsQ0FBQTtJQUNyQixvQ0FBaUIsQ0FBQTtBQUNyQixDQUFDLEVBSlcsZUFBZSxHQUFmLHVCQUFlLEtBQWYsdUJBQWUsUUFJMUI7QUFNRDs7OztHQUlHO0FBQ0g7SUFnQkksd0JBQVksTUFBZ0QsRUFDaEQsRUFBcUIsRUFDckIsS0FBMkIsRUFDM0IsNEJBQXFDO1FBSGpELGlCQVdDO1FBMUJELDZDQUE2QztRQUN0QyxpQ0FBNEIsR0FBRyxDQUFDLENBQUM7UUFDakMsZUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTTtRQUNwQywwQkFBcUIsR0FBRyxHQUFHLENBQUM7UUFDNUIsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsd0JBQW1CLEdBQUcsY0FBTSxPQUFBLEtBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFJLENBQUMsNEJBQTRCLEdBQUcsQ0FBQyxFQUFsRSxDQUFrRSxDQUFDO1FBY2xHLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9D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WUFBQyxNQUFNLElBQUksZ0JBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRTFELCtDQUErQztRQUMvQyxJQUFJLFlBQVksR0FBRyxjQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlELE1BQU0sQ0FBQyxJQUFJLFlBQVk7UUFDbkIsOEJBQThCO1FBQzlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDckQscUNBQXFDO1FBQ3JDLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQzFELENBQUM7SUFDTixDQUFDO0lBQ0wseUJBQUM7QUFBRCxDQXRDQSxBQXNDQyxJQUFBO0FBdENZLGdEQUFrQjtBQXdDL0IsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyIsImZpbGUiOiJjb3JlL3NlcnZpY2VzL2FwaS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJ4IGZyb20gJ3J4JztcbmltcG9ydCAqIGFzIGFuZ3VsYXIgZnJvbSAnYW5ndWxhcic7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgJ25nLWZpbGUtdXBsb2FkJztcblxuaW1wb3J0IHtHZW5FcnJvcn0gZnJvbSAnLi4vZXJyb3JzL2Vycm9yJztcbmltcG9ydCB7UmVzb2x3ZUFwaX0gZnJvbSAnLi4vLi4vYXBpJztcbmltcG9ydCB7Q29ubmVjdGlvbn0gZnJvbSAnLi4vLi4vYXBpL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IHtGaWxlVXBsb2FkUmVzcG9uc2V9IGZyb20gJy4uLy4uL2FwaS90eXBlcy9tb2R1bGVzJztcbmltcG9ydCB7Y29tcG9zZX0gZnJvbSAnLi4vdXRpbHMvbGFuZyc7XG5pbXBvcnQgKiBhcyByYW5kb20gZnJvbSAnLi4vdXRpbHMvcmFuZG9tJztcblxuY29uc3QgYW5ndWxhck1vZHVsZTogYW5ndWxhci5JTW9kdWxlID0gYW5ndWxhci5tb2R1bGUoJ3Jlc29sd2Uuc2VydmljZXMuYXBpJywgW1xuICAgICduZ0ZpbGVVcGxvYWQnLFxuXSk7XG5cbmV4cG9ydCBlbnVtIFVwbG9hZEV2ZW50VHlwZSB7XG4gICAgUFJPR1JFU1MgPSAncHJvZ3Jlc3MnLFxuICAgIFJFVFJZSU5HID0gJ3JldHJ5aW5nJyxcbiAgICBSRVNVTFQgPSAncmVzdWx0Jyxcbn1cblxuZXhwb3J0IHR5cGUgVXBsb2FkRXZlbnQ8VD4gPSB7IHByb2dyZXNzOiBQcm9ncmVzc0V2ZW50LCB0eXBlOiBVcGxvYWRFdmVudFR5cGUuUFJPR1JFU1MgfSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdHlwZTogVXBsb2FkRXZlbnRUeXBlLlJFVFJZSU5HIH0gfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJlc3VsdDogVCwgdHlwZTogVXBsb2FkRXZlbnRUeXBlLlJFU1VMVCB9O1xuXG4vKipcbiAqIEJhc2UgQVBJIHNlcnZpY2UgY2xhc3MgcHJvdmlkaW5nIGFkZGl0aW9uYWwgZmVhdHVyZXMgbGlrZSBmaWxlXG4gKiB1cGxvYWQgc3VwcG9ydC4gSXQgc2hvdWxkIGJlIHVzZWQgYXMgYSBtaXhpbiB0b2dldGhlciB3aXRoIGFuXG4gKiBhY3R1YWwgQVBJIGNsYXNzLlxuICovXG5leHBvcnQgY2xhc3MgQVBJU2VydmljZUJhc2Uge1xuICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGNvbmZpZ3VyYWJsZSBpbiBwcm92aWRlclxuICAgIHB1YmxpYyBjb25zZWN1dGl2ZUF1dG9yZXRyeUF0dGVtcHRzID0gNTtcbiAgICBwdWJsaWMgQ0hVTktfU0laRSA9IDEgKiAxMDI0ICogMTAyNDsgLy8gMU1CXG4gICAgcHVibGljIFJFVFJZX0RFTEFZX0lOQ1JFTUVOVCA9IDUwMDtcbiAgICBwdWJsaWMgTUFYX1JFVFJZX0RFTEFZID0gNTAwMDtcbiAgICBwdWJsaWMgRVJST1JfR1JPVVBJTkdfVElNRSA9ICgpID0+IHRoaXMuUkVUUllfREVMQVlfSU5DUkVNRU5UICogdGhpcy5jb25zZWN1dGl2ZUF1dG9yZXRyeUF0dGVtcHRzICogMjtcblxuICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNvbm5lY3Rpb24gcHJvcGVydHkgaXMgbm90IGluaXRpYWxpemVkIGFueXdoZXJlIGFzIGl0IHdpbGxcbiAgICAvLyBiZSBpbml0aWFsaXplZCBieSB0aGUgYWN0dWFsIEFQSSB3aGljaCBpcyBtaXhlZCBpbiBieSB0aGUgcHJvdmlkZXIuXG4gICAgcHVibGljIGNvbm5lY3Rpb246IENvbm5lY3Rpb247XG5cbiAgICBwcml2YXRlIF91cGxvYWQ6IGFuZ3VsYXIuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFNlcnZpY2U7XG4gICAgcHJpdmF0ZSBfcTogYW5ndWxhci5JUVNlcnZpY2U7XG4gICAgcHJpdmF0ZSBfaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2U7XG5cbiAgICBjb25zdHJ1Y3RvcihVcGxvYWQ6IGFuZ3VsYXIuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcbiAgICAgICAgICAgICAgICBjb25zZWN1dGl2ZUF1dG9yZXRyeUF0dGVtcHRzPzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3VwbG9hZCA9IFVwbG9hZDtcbiAgICAgICAgdGhpcy5fcSA9ICRxO1xuICAgICAgICB0aGlzLl9odHRwID0gJGh0dHA7XG5cbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGNvbnNlY3V0aXZlQXV0b3JldHJ5QXR0ZW1wdHMpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnNlY3V0aXZlQXV0b3JldHJ5QXR0ZW1wdHMgPSBjb25zZWN1dGl2ZUF1dG9yZXRyeUF0dGVtcHRzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBkYXRhIHVwbG9hZC5cbiAgICAgKlxuICAgICAqIEVhY2ggZmllbGQgaW5jbHVkaW5nIG5lc3RlZCBvYmplY3RzIHdpbGwgYmUgc2VudCBhcyBhIGZvcm0gZGF0YSBtdWx0aXBhcnQuXG4gICAgICogU2FtcGxlczpcbiAgICAgKiAgIHtwaWM6IGZpbGUsIHVzZXJuYW1lOiB1c2VybmFtZX1cbiAgICAgKiAgIHtmaWxlczogZmlsZXMsIG90aGVySW5mbzoge2lkOiBpZCwgcGVyc29uOiBwZXJzb24sLi4ufX0gbXVsdGlwbGUgZmlsZXMgKGh0bWw1KVxuICAgICAqICAge3Byb2ZpbGVzOiB7W3twaWM6IGZpbGUxLCB1c2VybmFtZTogdXNlcm5hbWUxfSwge3BpYzogZmlsZTIsIHVzZXJuYW1lOiB1c2VybmFtZTJ9XX0gbmVzdGVkIGFycmF5IG11bHRpcGxlIGZpbGVzIChodG1sNSlcbiAgICAgKiAgIHtmaWxlOiBmaWxlLCBpbmZvOiBVcGxvYWQuanNvbih7aWQ6IGlkLCBuYW1lOiBuYW1lLCAuLi59KX0gc2VuZCBmaWVsZHMgYXMganNvbiBzdHJpbmdcbiAgICAgKiAgIHtmaWxlOiBmaWxlLCBpbmZvOiBVcGxvYWQuanNvbkJsb2Ioe2lkOiBpZCwgbmFtZTogbmFtZSwgLi4ufSl9IHNlbmQgZmllbGRzIGFzIGpzb24gYmxvYiwgJ2FwcGxpY2F0aW9uL2pzb24nIGNvbnRlbnRfdHlwZVxuICAgICAqICAge3BpY0ZpbGU6IFVwbG9hZC5yZW5hbWUoZmlsZSwgJ3Byb2ZpbGUuanBnJyksIHRpdGxlOiB0aXRsZX0gc2VuZCBmaWxlIHdpdGggcGljRmlsZSBrZXkgYW5kIHByb2ZpbGUuanBnIGZpbGUgbmFtZVxuICAgICAqXG4gICAgICogQHBhcmFtIHthbnl9IGRhdGEgU2VlIGFuZ3VsYXIuYW5ndWxhckZpbGVVcGxvYWQuSUZpbGVVcGxvYWRDb25maWdGaWxlLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGxvYWQ8VD4oZGF0YTogYW55LCBmaWxlVUlEOiBzdHJpbmcgPSAnJyk6IFJ4Lk9ic2VydmFibGU8VXBsb2FkRXZlbnQ8VD4+IHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5jb25uZWN0aW9uLmNyZWF0ZVVyaUZyb21QYXRoKCcvdXBsb2FkLycpO1xuICAgICAgICBjb25zdCBoZWFkZXJzOiBhbmd1bGFyLklIdHRwUmVxdWVzdENvbmZpZ0hlYWRlcnMgPSB7XG4gICAgICAgICAgICAnU2Vzc2lvbi1JZCc6IHRoaXMuY29ubmVjdGlvbi5zZXNzaW9uSWQoKSxcbiAgICAgICAgICAgICdYLUZpbGUtVWlkJzogZmlsZVVJRCxcbiAgICAgICAgICAgICdYLUNTUkZUb2tlbic6IHRoaXMuY29ubmVjdGlvbi5jc3JmQ29va2llKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIFJ4Lk9ic2VydmFibGUuY3JlYXRlPFVwbG9hZEV2ZW50PFQ+Pigob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgIG9ic2VydmVyLm9uTmV4dCh7IHR5cGU6IFVwbG9hZEV2ZW50VHlwZS5SRVRSWUlORyB9KTsgLy8gTm90ZTogRmlyc3Qgb25lIG9mIHRoZXNlIGlzIHNraXBwZWQgYmVsb3cuXG5cbiAgICAgICAgICAgIGNvbnN0IHJlamVjdGFibGVSZXN1bWVTaXplUHJvbWlzZSA9IHRoaXMuX3EuZGVmZXI8bnVtYmVyPigpO1xuICAgICAgICAgICAgY29uc3QgZmlsZVVwbG9hZCA9IHRoaXMuX3VwbG9hZC51cGxvYWQ8VD4oe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlc3VtZVNpemU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdW1lU2l6ZVByb21pc2UgPSB0aGlzLl9odHRwLmdldCh1cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxhbnk+IHJlc3BvbnNlLmRhdGEpLnJlc3VtZV9vZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIub25FcnJvcihlcnJvcik7IC8vIEhhbmRsZWQgaW4gb2JzZXJ2YWJsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9xLmRlZmVyKCkucHJvbWlzZTsgLy8gTmV2ZXIgcmVzb2x2ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZWplY3RhYmxlUmVzdW1lU2l6ZVByb21pc2UucmVzb2x2ZShyZXN1bWVTaXplUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3RhYmxlUmVzdW1lU2l6ZVByb21pc2UucHJvbWlzZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlc3VtZUNodW5rU2l6ZTogdGhpcy5DSFVOS19TSVpFLFxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZmlsZVVwbG9hZC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5vbk5leHQoeyByZXN1bHQ6IHJlc3VsdC5kYXRhLCB0eXBlOiBVcGxvYWRFdmVudFR5cGUuUkVTVUxUIH0pO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm9uQ29tcGxldGVkKCk7XG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5vbkVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0sIChwcm9ncmVzcykgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm9uTmV4dCh7IHByb2dyZXNzOiBwcm9ncmVzcywgdHlwZTogVXBsb2FkRXZlbnRUeXBlLlBST0dSRVNTIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGNvbm5lY3Rpb25zIGFib3J0ZWQgYnkgc2VydmVyIG9yIGNsaWVudCAod2hlbiBjb21wdXRlclxuICAgICAgICAgICAgICAgIC8vIGdvZXMgdG8gc3RhbmRieS9zbGVlcCksIHdlIGVtaXQgYSBjdXN0b20gZXJyb3IuIE90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIHRvXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIG91dCBhbGwgYHhoclN0YXR1cyA9PT0gJ2Fib3J0J2AgYW5kIGNvdWxkbid0IGF1dG8tcmV0cnkgYWZ0ZXIgc3RhbmRieS5cbiAgICAgICAgICAgICAgICBvYnNlcnZlci5vbkVycm9yKHt4aHJTdGF0dXM6ICdtYW51YWwtYWJvcnQnfSk7XG4gICAgICAgICAgICAgICAgZmlsZVVwbG9hZC5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIHJlamVjdGFibGVSZXN1bWVTaXplUHJvbWlzZS5yZWplY3QoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXRyeVdoZW4oKGVycm9ycykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGVycm9yKSA9PiBlcnJvciAmJiBlcnJvci54aHJTdGF0dXMgIT09ICdtYW51YWwtYWJvcnQnKVxuICAgICAgICAgICAgICAgIC50aW1lSW50ZXJ2YWwoKVxuICAgICAgICAgICAgICAgIC5zY2FuKChhY2N1bXVsYXRlZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZVNpbmNlUHJldmlvdXMgPSB2YWx1ZS5pbnRlcnZhbDtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgY29uc2VjdXRpdmVFcnJvcnMgPSBhY2N1bXVsYXRlZC5jb25zZWN1dGl2ZUVycm9ycyArIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aW1lU2luY2VQcmV2aW91cyA+IHRoaXMuRVJST1JfR1JPVVBJTkdfVElNRSgpKSBjb25zZWN1dGl2ZUVycm9ycyA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV0cnkgPSBjb25zZWN1dGl2ZUVycm9ycyA8PSB0aGlzLmNvbnNlY3V0aXZlQXV0b3JldHJ5QXR0ZW1wdHM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGF5ID0gTWF0aC5taW4oY29uc2VjdXRpdmVFcnJvcnMgKiB0aGlzLlJFVFJZX0RFTEFZX0lOQ1JFTUVOVCwgdGhpcy5NQVhfUkVUUllfREVMQVkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yLCBjb25zZWN1dGl2ZUVycm9ycywgdGltZVNpbmNlUHJldmlvdXMsIHJldHJ5LCBkZWxheSB9O1xuICAgICAgICAgICAgICAgIH0sIHsgZXJyb3I6IG51bGwsIGNvbnNlY3V0aXZlRXJyb3JzOiAwLCB0aW1lU2luY2VQcmV2aW91czogMCwgcmV0cnk6IGZhbHNlLCBkZWxheTogMCB9KVxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKCh7cmV0cnksIGRlbGF5LCBlcnJvcn0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBldmVudCBpcyBwcm9iYWJseSBjb21wdXRlciBnb2luZyB0byBzdGFuZGJ5LiBXYWl0IGEgYml0IGxvbmdlci5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnhoclN0YXR1cyA9PT0gJ2Fib3J0JykgZGVsYXkgPSAxMDAwMDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJldHJ5KSB7IC8vIFN0b3AgcmV0cnlpbmcgYWZ0ZXIgYSB3aGlsZSBhbmQgcmV0dXJuIHVud3JhcHBlZCBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJ4Lk9ic2VydmFibGUudGhyb3coZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSeC5PYnNlcnZhYmxlLmp1c3QoZXJyb3IpLmRlbGF5KGRlbGF5KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kbygoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZXRyeWluZyB1cGxvYWQgYWZ0ZXIgYW4gZXJyb3JcIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuc2tpcCgxKSAvLyBTa2lwIGluaXRpYWwgJ3JldHJ5aW5nJyBldmVudC5cbiAgICAgICAgLmZpbHRlcigoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIElmIGEgcmV0cnkgcmVxdWVzdCBmYWlscywgaXQgd291bGQgcmVtb3ZlIHRoZSBwcm9ncmVzcyBiYXIgdW50aWwgaXRcbiAgICAgICAgICAgIC8vIHN1Y2NlZWRzIGFnYWluLiBXaXRoIHRoaXMgZmlsdGVyIHdlIGNhbiBrZWVwIHRoZSBwcm9ncmVzcyBiYXIgYW55d2F5LlxuICAgICAgICAgICAgcmV0dXJuICEoZXZlbnQudHlwZSA9PT0gVXBsb2FkRXZlbnRUeXBlLlBST0dSRVNTICYmIGV2ZW50LnByb2dyZXNzLmxvYWRlZCA9PT0gMCAmJiBldmVudC5wcm9ncmVzcy50b3RhbCA9PT0gMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwbG9hZHMgc3RyaW5nIGNvbnRlbnQgYXMgYSBmaWxlLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGxvYWRTdHJpbmcoZmlsZW5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nKTogUnguT2JzZXJ2YWJsZTxVcGxvYWRFdmVudDxGaWxlVXBsb2FkUmVzcG9uc2U+PiB7XG4gICAgICAgIGxldCBmaWxlOiBGaWxlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmlsZSA9IG5ldyBGaWxlKFtjb250ZW50XSwgZmlsZW5hbWUsIHt0eXBlOiAndGV4dC9wbGFpbicsIGxhc3RNb2RpZmllZDogRGF0ZS5ub3coKX0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBTaW1wbGUgZmFsbGJhY2sgZm9yIFNhZmFyaSA5IGFuZCBJRS9FZGdlLCBiZWNhdXNlIHRoZXkgZG9uJ3RcbiAgICAgICAgICAgIC8vIHN1cHBvcnQgRmlsZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICAgIGZpbGUgPSA8RmlsZT4gXy5hc3NpZ24obmV3IEJsb2IoW2NvbnRlbnRdLCB7dHlwZTogJ3RleHQvcGxhaW4nfSksIHtuYW1lOiBmaWxlbmFtZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkPEZpbGVVcGxvYWRSZXNwb25zZT4oe2ZpbGU6IGZpbGV9LCAnc3RyaW5nLScgKyByYW5kb20ucmFuZG9tVXVpZCgpKTtcbiAgICB9XG59XG5cbi8qKlxuICogU2VydmljZSBwcm92aWRlciBmb3IgY29uZmlndXJpbmcgdGhlIEFQSSBzZXJ2aWNlLiBCZWZvcmUgdXNpbmcgdGhlXG4gKiBBUEkgc2VydmljZSwgdGhpcyBwcm92aWRlciBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCBhbiBhY3R1YWwgQVBJXG4gKiBjbGFzcywgd2hpY2ggc2hvdWxkIGRlcml2ZSBmcm9tIFtbUmVzb2x3ZUFwaV1dLlxuICpcbiAqIEZvciBleGFtcGxlLCBpZiB0aGUgQVBJIGNsYXNzIGlzIGNhbGxlZCBgQmFzZUFwaWAsIHdlIGNhbiBjb25maWd1cmVcbiAqIHRoZSBBUEkgc2VydmljZSBhcyBmb2xsb3dzOlxuICogYGBgXG4gKiAvLyBDcmVhdGUgYSB0eXBlIGZvciB0aGUgc2VydmljZS5cbiAqIGV4cG9ydCBpbnRlcmZhY2UgQVBJU2VydmljZSBleHRlbmRzIEFQSVNlcnZpY2VCYXNlLCBCYXNlQXBpIHtcbiAqIH1cbiAqXG4gKiAvLyBDb25maWd1cmUgdGhlIEFQSSBwcm92aWRlciB3aXRoIG91ciBBUEkgaW5zdGFuY2UuXG4gKiBtb2R1bGUuY29uZmlnKChhcGlQcm92aWRlcjogQVBJU2VydmljZVByb3ZpZGVyKSA9PiB7XG4gKiAgICAgYXBpUHJvdmlkZXIuc2V0QVBJKFxuICogICAgICAgICBCYXNlQXBpLFxuICogICAgICAgICBuZXcgU2ltcGxlQ29ubmVjdGlvbigpLFxuICogICAgICAgICBSRVNUX1VSTCxcbiAqICAgICAgICAgV0VCU09DS0VUX1VSTFxuICogICAgICk7XG4gKlxuICogICAgIC8vIENvbmZpZ3VyZSB1cGxvYWQgYXV0by1yZXRyaWVzIHRvIGluZmluaXR5XG4gKiAgICAgYXBpUHJvdmlkZXIuc2V0Q29uc2VjdXRpdmVBdXRvcmV0cnlBdHRlbXB0cyhJbmZpbml0eSk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQVBJU2VydmljZVByb3ZpZGVyIHtcbiAgICAvLyBBUEkgaW5zdGFuY2UgdGhhdCBzaG91bGQgYmUgdXNlZCBieSB0aGUgc2VydmljZS5cbiAgICBwcml2YXRlIF9hcGk6IHR5cGVvZiBSZXNvbHdlQXBpO1xuICAgIHByaXZhdGUgX2Nvbm5lY3Rpb246IENvbm5lY3Rpb247XG4gICAgcHJpdmF0ZSBfcmVzdFVyaTogc3RyaW5nO1xuICAgIHByaXZhdGUgX3dlYnNvY2tldFVyaTogc3RyaW5nO1xuICAgIHByaXZhdGUgX2NvbnNlY3V0aXZlQXV0b3JldHJ5QXR0ZW1wdHM6IG51bWJlcjtcblxuICAgIHB1YmxpYyBzZXRBUEkoYXBpOiB0eXBlb2YgUmVzb2x3ZUFwaSxcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IENvbm5lY3Rpb24sXG4gICAgICAgICAgICAgICAgICByZXN0VXJpOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICB3ZWJzb2NrZXRVcmk6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9hcGkgPSBhcGk7XG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICAgICAgICB0aGlzLl9yZXN0VXJpID0gcmVzdFVyaTtcbiAgICAgICAgdGhpcy5fd2Vic29ja2V0VXJpID0gd2Vic29ja2V0VXJpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb25zZWN1dGl2ZUF1dG9yZXRyeUF0dGVtcHRzKHJldHJpZXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jb25zZWN1dGl2ZUF1dG9yZXRyeUF0dGVtcHRzID0gcmV0cmllcztcbiAgICB9XG5cbiAgICAvLyBAbmdJbmplY3RcbiAgICBwdWJsaWMgJGdldChVcGxvYWQ6IGFuZ3VsYXIuYW5ndWxhckZpbGVVcGxvYWQuSVVwbG9hZFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSkge1xuICAgICAgICAvLyBUT0RPOiBVc2UgZXJyb3Igbm90aWZpY2F0aW9uIHNlcnZpY2UgaW5zdGVhZC5cbiAgICAgICAgaWYgKCF0aGlzLl9hcGkpIHRocm93IG5ldyBHZW5FcnJvcihcIkFQSSBub3QgY29uZmlndXJlZC5cIik7XG5cbiAgICAgICAgLy8gTWl4IHRvZ2V0aGVyIHRoZSBBUEkgYW5kIHRoZSBBUElTZXJ2aWNlQmFzZS5cbiAgICAgICAgbGV0IHNlcnZpY2VDbGFzcyA9IGNvbXBvc2UoW3RoaXMuX2FwaSwgQVBJU2VydmljZUJhc2VdLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBzZXJ2aWNlQ2xhc3MoXG4gICAgICAgICAgICAvLyBBcmd1bWVudHMgZm9yIHRoZSBBUEkgcGFydC5cbiAgICAgICAgICAgIFt0aGlzLl9jb25uZWN0aW9uLCB0aGlzLl9yZXN0VXJpLCB0aGlzLl93ZWJzb2NrZXRVcmldLFxuICAgICAgICAgICAgLy8gQXJndW1lbnRzIGZvciBBUElTZXJ2aWNlQmFzZSBwYXJ0LlxuICAgICAgICAgICAgW1VwbG9hZCwgJHEsICRodHRwLCB0aGlzLl9jb25zZWN1dGl2ZUF1dG9yZXRyeUF0dGVtcHRzXVxuICAgICAgICApO1xuICAgIH1cbn1cblxuYW5ndWxhck1vZHVsZS5wcm92aWRlcignYXBpJywgQVBJU2VydmljZVByb3ZpZGVyKTtcbiJdfQ==

@@ -21,2 +21,4 @@ "use strict";

var Rx = require("rx");
var angular = require("angular");
var api_1 = require("./api");
var mock_1 = require("../../api/mock");

@@ -146,6 +148,9 @@ var base_1 = require("../components/base");

});
tester.api().upload({}, 'test-uuid').then(function (response) {
expect(uploaded).toEqual(true);
expect(response.data).toEqual('hello');
done();
tester.api().upload({}, 'test-uuid').subscribe(function (response) {
expect(response.type).toEqual('result');
if (response.type === api_1.UploadEventType.RESULT) {
expect(uploaded).toEqual(true);
expect(response.result).toEqual({ data: 'hello' });
done();
}
});

@@ -172,3 +177,149 @@ });

});
describe('upload', function () {
var api;
var $httpBackend;
var $exceptionHandler;
// Auto-retry tests fail if $exceptionHandler rethrows errors.
angular.module('ignore_exceptions', []).config(["$exceptionHandlerProvider", function ($exceptionHandlerProvider) {
$exceptionHandlerProvider.mode('log');
}]);
beforeEach(angular.mock.module('ignore_exceptions'));
beforeEach(angular.mock.module('ngFileUpload'));
beforeEach(inject(function (Upload, $q, $http, _$httpBackend_, _$exceptionHandler_) {
$httpBackend = _$httpBackend_;
$exceptionHandler = _$exceptionHandler_;
api = new api_1.APIServiceBase(Upload, $q, $http);
api.connection = new mock_1.MockConnection();
api.RETRY_DELAY_INCREMENT = 10;
}));
it('should work for new files', function (done) {
$httpBackend.expectGET('/upload/').respond(function (method, url, data, headers, queryParams) {
expect(headers['X-File-Uid']).toBeDefined();
return [200, { resume_offset: 0 }, {}, 'OK'];
});
$httpBackend.expectPOST('/upload/').respond(200, {
files: [{ name: 'a.txt', size: 1000, done: true, temp: '5ed2a' }],
});
api.uploadString('a.txt', 'abcd').subscribe(function (response) {
expect(response.type).toEqual('result');
if (response.type === api_1.UploadEventType.RESULT) {
expect(response.result.files[0].name).toEqual('a.txt');
expect($exceptionHandler.errors).toEqual([]);
done();
}
});
$httpBackend.flush();
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it('should chunk large files', function (done) {
$httpBackend.expectGET('/upload/').respond(200, { resume_offset: 0 });
$httpBackend.expectPOST('/upload/').respond(200, {});
$httpBackend.expectPOST('/upload/').respond(200, {});
$httpBackend.expectPOST('/upload/').respond(200, {});
var largeContent = _.range(3 * api.CHUNK_SIZE - 1).map(function () { return 'a'; }).join('');
api.uploadString('a.txt', largeContent).toArray().subscribe(function (_a) {
var response1 = _a[0], response2 = _a[1], response3 = _a[2];
expect(response1.type).toEqual('progress');
expect(response2.type).toEqual('progress');
expect(response3.type).toEqual('result');
expect($exceptionHandler.errors).toEqual([]);
done();
});
$httpBackend.flush();
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it('should resume for existing files', function (done) {
$httpBackend.expectGET('/upload/').respond(200, { resume_offset: api.CHUNK_SIZE });
$httpBackend.expectPOST('/upload/').respond(200, {});
$httpBackend.expectPOST('/upload/').respond(200, {});
var largeContent = _.range(3 * api.CHUNK_SIZE - 1).map(function () { return 'a'; }).join('');
api.uploadString('a.txt', largeContent).toArray().subscribe(function (_a) {
var response1 = _a[0], response2 = _a[1];
expect(response1.type).toEqual('progress');
expect(response2.type).toEqual('result');
expect($exceptionHandler.errors).toEqual([]);
done();
});
$httpBackend.flush();
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it('should auto-retry after failed requests', function (done) {
$httpBackend.expectGET('/upload/').respond(503, {});
var largeContent = _.range(3 * api.CHUNK_SIZE - 1).map(function () { return 'a'; }).join('');
api.uploadString('a.txt', largeContent).toArray().subscribe(function (responses) {
expect(responses[0].type).toEqual('retrying');
expect(responses[1].type).toEqual('retrying');
expect(responses[2].type).toEqual('progress');
expect(responses[3].type).toEqual('retrying');
expect(responses[4].type).toEqual('result');
var unexpectedLogs = $exceptionHandler.errors.filter(function (log) {
var isExpected = _.isString(log) && /Possibly unhandled rejection: .*"status":503/.test(log);
return !isExpected;
});
expect(unexpectedLogs).toEqual([]);
done();
});
$httpBackend.flush();
$httpBackend.expectGET('/upload/').respond(200, { resume_offset: api.CHUNK_SIZE });
$httpBackend.expectPOST('/upload/').respond(503, {});
setTimeout(function () {
$httpBackend.flush();
$httpBackend.expectGET('/upload/').respond(200, { resume_offset: api.CHUNK_SIZE });
$httpBackend.expectPOST('/upload/').respond(200, {});
$httpBackend.expectPOST('/upload/').respond(503, {});
setTimeout(function () {
$httpBackend.flush();
$httpBackend.expectGET('/upload/').respond(200, { resume_offset: 2 * api.CHUNK_SIZE });
$httpBackend.expectPOST('/upload/').respond(200, {});
setTimeout(function () {
$httpBackend.flush();
}, 30 + 5);
}, 20 + 5);
}, 10 + 5); // Wait for RETRY_DELAY_INCREMENT, and 5ms padding time
});
it('should stop retrying after too many failed requests', function (done) {
$httpBackend.expectGET('/upload/').respond(503, {});
var largeContent = _.range(3 * api.CHUNK_SIZE - 1).map(function () { return 'a'; }).join('');
api.uploadString('a.txt', largeContent).toArray().subscribe(function (responses) {
done.fail('Expected upload to fail, not succeed');
}, function (error) {
expect(error.config.method).toEqual('POST');
expect(error.status).toEqual(503);
var unexpectedLogs = $exceptionHandler.errors.filter(function (log) {
var isExpected = _.isString(log) && /Possibly unhandled rejection: .*"status":503/.test(log);
return !isExpected;
});
expect(unexpectedLogs).toEqual([]);
done();
});
$httpBackend.flush();
$httpBackend.expectGET('/upload/').respond(503, {});
setTimeout(function () {
$httpBackend.flush();
$httpBackend.expectGET('/upload/').respond(200, { resume_offset: api.CHUNK_SIZE });
$httpBackend.expectPOST('/upload/').respond(503, {});
setTimeout(function () {
$httpBackend.flush();
$httpBackend.expectGET('/upload/').respond(503, {});
setTimeout(function () {
$httpBackend.flush();
$httpBackend.expectGET('/upload/').respond(200, { resume_offset: api.CHUNK_SIZE });
$httpBackend.expectPOST('/upload/').respond(503, {});
setTimeout(function () {
$httpBackend.flush();
$httpBackend.expectGET('/upload/').respond(200, { resume_offset: api.CHUNK_SIZE });
$httpBackend.expectPOST('/upload/').respond(503, {});
setTimeout(function () {
$httpBackend.flush();
}, 50 + 5);
}, 40 + 5);
}, 30 + 5);
}, 20 + 5);
}, 10 + 5);
});
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL3NlcnZpY2VzL2FwaS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBCQUE0QjtBQUM1Qix1QkFBeUI7QUFLekIsdUNBQXVDO0FBQ3ZDLDJDQUE0RDtBQUM1RCxtREFBd0Q7QUFLeEQsUUFBUSxDQUFDLFVBQVUsRUFBRTtJQUNqQixFQUFFLENBQUMsa0NBQWtDLEVBQUU7UUFDbkMsSUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFPLEVBQUUsQ0FBQztRQUM5QixJQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRW5ELE9BQU8sQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckMsdUNBQXVDO1FBQ3ZDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFMUQsZUFBZTtRQUNmLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUMsaUVBQWlFO1FBQ2pFLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1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QyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxRSwwQ0FBMEM7UUFDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDIiwiZmlsZSI6ImNvcmUvc2VydmljZXMvYXBpLnNwZWMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBSeCBmcm9tICdyeCc7XG5pbXBvcnQgKiBhcyBhbmd1bGFyIGZyb20gJ2FuZ3VsYXInO1xuXG5pbXBvcnQge0FQSVNlcnZpY2VCYXNlfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge1Jlc29sd2VBcGl9IGZyb20gJy4uLy4uL2FwaS9pbmRleCc7XG5pbXBvcnQge01vY2tBcGl9IGZyb20gJy4uLy4uL2FwaS9tb2NrJztcbmltcG9ydCB7Y29tcG9uZW50LCBDb21wb25lbnRCYXNlfSBmcm9tICcuLi9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtkZXNjcmliZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vdGVzdHMvY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBUElTZXJ2aWNlIGV4dGVuZHMgQVBJU2VydmljZUJhc2UsIFJlc29sd2VBcGkge1xufVxuXG5kZXNjcmliZSgnbW9jayBhcGknLCAoKSA9PiB7XG4gICAgaXQoJ21vY2tzIGJhc2ljIG5vbi1yZWFjdGl2ZSBxdWVyaWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2NrQXBpID0gbmV3IE1vY2tBcGkoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlciA9IGphc21pbmUuY3JlYXRlU3B5KCdzdWJzY3JpYmVyJyk7XG5cbiAgICAgICAgbW9ja0FwaS5jcmVhdGVSZXNvdXJjZSgnY29sbGVjdGlvbicpO1xuXG4gICAgICAgIC8vIFF1ZXJpZXMgYXJlIG5vdCByZWFjdGl2ZSBieSBkZWZhdWx0LlxuICAgICAgICBtb2NrQXBpLkNvbGxlY3Rpb24ucXVlcnkoKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzBdKS50b0VxdWFsKFtdKTtcblxuICAgICAgICAvLyBBZGQgYW4gaXRlbS5cbiAgICAgICAgbW9ja0FwaS5hZGRJdGVtKCdjb2xsZWN0aW9uJywge2lkOiAxLCBuYW1lOiAnSGVsbG8gd29ybGQnfSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cbiAgICAgICAgLy8gU2luY2UgaXQgaXMgYSBub24tcmVhY3RpdmUgcXVlcnksIHdlIG5lZWQgdG8gcmVwZWF0IHRoZSBxdWVyeS5cbiAgICAgICAgbW9ja0FwaS5Db2xsZWN0aW9uLnF1ZXJ5KCkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICBleHBlY3Qoc3Vic2NyaWJlcikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgICAgICBleHBlY3Qoc3Vic2NyaWJlci5jYWxscy5tb3N0UmVjZW50KCkuYXJnc1swXSkudG9FcXVhbChbe2lkOiAxLCBuYW1lOiAnSGVsbG8gd29ybGQnfV0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ21vY2tzIGJhc2ljIHJlYWN0aXZlIHF1ZXJpZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vY2tBcGkgPSBuZXcgTW9ja0FwaSgpO1xuICAgICAgICBjb25zdCBzdWJzY3JpYmVyID0gamFzbWluZS5jcmVhdGVTcHkoJ3N1YnNjcmliZXInKTtcblxuICAgICAgICBtb2NrQXBpLmNyZWF0ZVJlc291cmNlKCdjb2xsZWN0aW9uJyk7XG5cbiAgICAgICAgbW9ja0FwaS5Db2xsZWN0aW9uLnF1ZXJ5KHt9LCB7cmVhY3RpdmU6IHRydWV9KS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzBdKS50b0VxdWFsKFtdKTtcblxuICAgICAgICAvLyBBZGQgYW4gaXRlbS5cbiAgICAgICAgbW9ja0FwaS5hZGRJdGVtKCdjb2xsZWN0aW9uJywge2lkOiAxLCBuYW1lOiAnSGVsbG8gd29ybGQnfSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzBdKS50b0VxdWFsKFt7aWQ6IDEsIG5hbWU6ICdIZWxsbyB3b3JsZCd9XSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGFuIGl0ZW0uXG4gICAgICAgIG1vY2tBcGkudXBkYXRlSXRlbSgnY29sbGVjdGlvbicsIHtpZDogMSwgbmFtZTogJ0hlbGxvIG1vY2t1cHMnfSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzBdKS50b0VxdWFsKFt7aWQ6IDEsIG5hbWU6ICdIZWxsbyBtb2NrdXBzJ31dKTtcblxuICAgICAgICAvLyBSZW1vdmUgYW4gaXRlbS5cbiAgICAgICAgbW9ja0FwaS5yZW1vdmVJdGVtKCdjb2xsZWN0aW9uJywgMSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoNCk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzBdKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCdtb2NrcyBjb21wbGV4IHJlYWN0aXZlIHF1ZXJpZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vY2tBcGkgPSBuZXcgTW9ja0FwaSgpO1xuICAgICAgICBjb25zdCBzdWJzY3JpYmVyUGxhaW4gPSBqYXNtaW5lLmNyZWF0ZVNweSgnc3Vic2NyaWJlclBsYWluJyk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZXJXaXRoRmlsdGVyID0gamFzbWluZS5jcmVhdGVTcHkoJ3N1YnNjcmliZXJXaXRoRmlsdGVyJyk7XG5cbiAgICAgICAgbW9ja0FwaS5jcmVhdGVSZXNvdXJjZSgnY29sbGVjdGlvbicsICdpZCcsIChxdWVyeSwgaXRlbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChfLmlzRW1wdHkocXVlcnkpKSByZXR1cm4gaXRlbXM7XG5cbiAgICAgICAgICAgIHJldHVybiBfLmZpbHRlcihpdGVtcywgKGl0ZW06IGFueSkgPT4gaXRlbS5uYW1lID09PSBxdWVyeS5uYW1lKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbW9ja0FwaS5Db2xsZWN0aW9uLnF1ZXJ5KHt9LCB7cmVhY3RpdmU6IHRydWV9KS5zdWJzY3JpYmUoc3Vic2NyaWJlclBsYWluKTtcbiAgICAgICAgbW9ja0FwaS5Db2xsZWN0aW9uLnF1ZXJ5KHtuYW1lOiAnSGVsbG8nfSwge3JlYWN0aXZlOiB0cnVlfSkuc3Vic2NyaWJlKHN1YnNjcmliZXJXaXRoRmlsdGVyKTtcblxuICAgICAgICBtb2NrQXBpLmFkZEl0ZW0oJ2NvbGxlY3Rpb24nLCB7aWQ6IDEsIG5hbWU6ICdDb2xsZWN0aW9uIEEnfSk7XG4gICAgICAgIG1vY2tBcGkuYWRkSXRlbSgnY29sbGVjdGlvbicsIHtpZDogMiwgbmFtZTogJ0Fub3RoZXIgb25lJ30pO1xuICAgICAgICBtb2NrQXBpLmFkZEl0ZW0oJ2NvbGxlY3Rpb24nLCB7aWQ6IDMsIG5hbWU6ICdIZWxsbyd9KTtcbiAgICAgICAgbW9ja0FwaS5hZGRJdGVtKCdjb2xsZWN0aW9uJywge2lkOiA0LCBuYW1lOiAnSGVsbG8gd29ybGQnfSk7XG5cbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXJQbGFpbikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDUpO1xuICAgICAgICBleHBlY3Qoc3Vic2NyaWJlcldpdGhGaWx0ZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbiAgICB9KTtcblxuICAgIGl0KCdtb2NrcyBub24tcXVlcnkgb3BlcmF0aW9ucycsICgpID0+IHtcbiAgICAgICAgY29uc3QgbW9ja0FwaSA9IG5ldyBNb2NrQXBpKCk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZXIgPSBqYXNtaW5lLmNyZWF0ZVNweSgnc3Vic2NyaWJlcicpO1xuXG4gICAgICAgIG1vY2tBcGkud2hlblBvc3QoJy9hcGkvY29sbGVjdGlvbicsIHN1YnNjcmliZXIpO1xuICAgICAgICBtb2NrQXBpLkNvbGxlY3Rpb24uY3JlYXRlKHtuYW1lOiAnRm9vJ30pO1xuXG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzBdKS50b0VxdWFsKHt9KTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIuY2FsbHMubW9zdFJlY2VudCgpLmFyZ3NbMV0pLnRvRXF1YWwoe25hbWU6ICdGb28nfSk7XG5cbiAgICAgICAgbW9ja0FwaS53aGVuUG9zdCgvXlxcL2FwaVxcL2NvbGxlY3Rpb25cXC8oLis/KVxcL2FkZF9kYXRhLywgc3Vic2NyaWJlcik7XG4gICAgICAgIG1vY2tBcGkuQ29sbGVjdGlvbi5hZGREYXRhKDEsIFsxLCAyLCAzLCA0XSk7XG5cbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIuY2FsbHMubW9zdFJlY2VudCgpLmFyZ3NbMV0pLnRvRXF1YWwoe2lkczogWzEsIDIsIDMsIDRdfSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzJdWzFdKS50b0VxdWFsKCcxJyk7XG5cbiAgICAgICAgbW9ja0FwaS53aGVuR2V0KCcvYXBpL2NvbGxlY3Rpb24vc2x1Z19leGlzdHMnLCAocGFyYW1ldGVycywgZGF0YSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMubmFtZSA9PT0gJ2hlbGxvJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbW9ja0FwaS5Db2xsZWN0aW9uLnNsdWdFeGlzdHMoJ2JhcicpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIuY2FsbHMubW9zdFJlY2VudCgpLmFyZ3NbMF0pLnRvQmUoZmFsc2UpO1xuXG4gICAgICAgIG1vY2tBcGkuQ29sbGVjdGlvbi5zbHVnRXhpc3RzKCdoZWxsbycpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcyg0KTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIuY2FsbHMubW9zdFJlY2VudCgpLmFyZ3NbMF0pLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc3VwcG9ydHMgemlwIG9wZXJhdGlvbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgbW9ja0FwaSA9IG5ldyBNb2NrQXBpKCk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZXIgPSBqYXNtaW5lLmNyZWF0ZVNweSgnc3Vic2NyaWJlcicpO1xuXG4gICAgICAgIG1vY2tBcGkuY3JlYXRlUmVzb3VyY2UoJ2NvbGxlY3Rpb24nKTtcbiAgICAgICAgbW9ja0FwaS5hZGRJdGVtKCdjb2xsZWN0aW9uJywgeyBpZDogMSB9KTtcblxuICAgICAgICBSeC5PYnNlcnZhYmxlLnppcChtb2NrQXBpLkNvbGxlY3Rpb24ucXVlcnkoKSwgbW9ja0FwaS5Db2xsZWN0aW9uLnF1ZXJ5KCkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIuY2FsbHMubW9zdFJlY2VudCgpLmFyZ3NbMF0pLnRvRXF1YWwoWyBbIHsgaWQ6IDEgfSBdLCBbIHsgaWQ6IDEgfSBdIF0pO1xuICAgIH0pO1xufSk7XG5cbmRlc2NyaWJlQ29tcG9uZW50KCdhbmd1bGFyIG1vY2sgYXBpJywgW10sICh0ZXN0ZXIpID0+IHtcbiAgICBAY29tcG9uZW50KHtcbiAgICAgICAgbW9kdWxlOiB0ZXN0ZXIubW9kdWxlLFxuICAgICAgICBkaXJlY3RpdmU6ICdnZW4tdGVzdC1jb21wb25lbnQnLFxuICAgICAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJ0ZXh0LW5hbWVcIj5Db2xsZWN0aW9uIG5hbWUgaXMge3tjdHJsLmNvbGxlY3Rpb24ubmFtZX19PC9kaXY+YCxcbiAgICB9KVxuICAgIGNsYXNzIFRlc3RDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHtcbiAgICAgICAgcHVibGljIGNvbGxlY3Rpb246IGFueTtcblxuICAgICAgICAvLyBAbmdJbmplY3RcbiAgICAgICAgY29uc3RydWN0b3IoJHNjb3BlOiBhbmd1bGFyLklTY29wZSwgYXBpOiBBUElTZXJ2aWNlKSB7XG4gICAgICAgICAgICBzdXBlcigkc2NvcGUpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZSgnY29sbGVjdGlvbicsIGFwaS5Db2xsZWN0aW9uLnF1ZXJ5T25lKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXQoJ3JlcGxhY2VzIGFwaSBzZXJ2aWNlJywgKCkgPT4ge1xuICAgICAgICB0ZXN0ZXIuYXBpKCkuY3JlYXRlUmVzb3VyY2UoJ2NvbGxlY3Rpb24nKTtcbiAgICAgICAgdGVzdGVyLmFwaSgpLmFkZEl0ZW0oJ2NvbGxlY3Rpb24nLCB7aWQ6IDEsIG5hbWU6ICdIZWxsbyB3b3JsZCd9KTtcblxuICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0ZXN0ZXIuY3JlYXRlQ29tcG9uZW50PFRlc3RDb21wb25lbnQ+KFxuICAgICAgICAgICAgVGVzdENvbXBvbmVudC5hc1ZpZXcoKS50ZW1wbGF0ZVxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChjb21wb25lbnQuY3RybC5jb2xsZWN0aW9uLmlkKS50b0JlKDEpO1xuICAgICAgICBleHBlY3QoY29tcG9uZW50LmN0cmwuY29sbGVjdGlvbi5uYW1lKS50b0JlKCdIZWxsbyB3b3JsZCcpO1xuICAgICAgICBleHBlY3QoY29tcG9uZW50LmVsZW1lbnQuZmluZCgnLnRleHQtbmFtZScpLnRleHQoKSkudG9CZSgnQ29sbGVjdGlvbiBuYW1lIGlzIEhlbGxvIHdvcmxkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnbW9ja3MgdXBsb2FkcycsIChkb25lKSA9PiB7XG4gICAgICAgIGxldCB1cGxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgICAgIHRlc3Rlci5hcGkoKS53aGVuVXBsb2FkKChkYXRhOiBhbnksIGZpbGVVSUQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdXBsb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIDxhbmd1bGFyLklIdHRwUmVzcG9uc2U8c3RyaW5nPj4ge2RhdGE6ICdoZWxsbyd9O1xuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0ZXIuYXBpKCkudXBsb2FkKHt9LCAndGVzdC11dWlkJykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdCh1cGxvYWRlZCkudG9FcXVhbCh0cnVlKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXNwb25zZS5kYXRhKS50b0VxdWFsKCdoZWxsbycpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn0pO1xuXG5kZXNjcmliZSgncmVzb3VyY2UnLCAoKSA9PiB7XG4gICAgaXQoJ2NvcnJlY3RseSBjYWNoZXMgcmVhY3RpdmUgcXVlcmllcycsIChkb25lKSA9PiB7XG4gICAgICAgIGxldCBjYWxsZWQgPSAwO1xuICAgICAgICBjb25zdCBtb2NrQXBpID0gbmV3IE1vY2tBcGkoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgrK2NhbGxlZCA9PT0gMykgeyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBtb2NrQXBpLmNyZWF0ZVJlc291cmNlKCdwcm9jZXNzJyk7XG4gICAgICAgIG1vY2tBcGkuc2ltdWxhdGVEZWxheSh0cnVlKTtcblxuICAgICAgICBtb2NrQXBpLlByb2Nlc3MucXVlcnkoe30sIHtyZWFjdGl2ZTogdHJ1ZX0pLnRha2UoMSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICBtb2NrQXBpLlByb2Nlc3MucXVlcnkoe30sIHtyZWFjdGl2ZTogdHJ1ZX0pLnRha2UoMSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICBtb2NrQXBpLlByb2Nlc3MucXVlcnkoe30sIHtyZWFjdGl2ZTogdHJ1ZX0pLnRha2UoMSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuXG4gICAgICAgIC8vIEVuc3VyZSB0aGVzZSBxdWVyaWVzIGhhdmUgYmVlbiBkZWxheWVkLlxuICAgICAgICBleHBlY3QoY2FsbGVkKS50b0VxdWFsKDApO1xuICAgIH0pO1xufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL3NlcnZpY2VzL2FwaS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBCQUE0QjtBQUM1Qix1QkFBeUI7QUFDekIsaUNBQW1DO0FBRW5DLDZCQUFzRDtBQUV0RCx1Q0FBdUQ7QUFFdkQsMkNBQTREO0FBQzVELG1EQUF3RDtBQUt4RCxRQUFRLENBQUMsVUFBVSxFQUFFO0lBQ2pCLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRTtRQUNuQyxJQUFNLE9BQU8sR0FBRyxJQUFJLGNBQU8sRUFBRSxDQUFDO1FBQzlCLElBQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbkQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVyQyx1Q0FBdUM7UUFDdkMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUxRCxlQUFlO1FBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1QyxpRUFBaUU7UUFDakUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFO1FBQy9CLElBQU0sT0FBTyxHQUFHLElBQUksY0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVuRCxPQUFPLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXJDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTFELGVBQWU7UUFDZixPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRGLGtCQUFrQjtRQUNsQixPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhGLGtCQUFrQjtRQUNsQixPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGdDQUFnQyxFQUFFO1FBQ2pDLElBQU0sT0FBTyxHQUFHLElBQUksY0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdELElBQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRXZFLE9BQU8sQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFDLEtBQUssRUFBRSxLQUFLO1lBQ3BELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUVuQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBQyxJQUFTLElBQUssT0FBQSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQXhCLENBQXdCLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRTVGLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUM7UUFDNUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQztRQUU1RCxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNEJBQTRCLEVBQUU7UUFDN0IsSUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFPLEVBQUUsQ0FBQztRQUM5QixJQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRW5ELE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEQsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUV6QyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBRXJFLE9BQU8sQ0FBQyxRQUFRLENBQUMscUNBQXFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDcEUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1QyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFF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QyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMiLCJmaWxlIjoiY29yZS9zZXJ2aWNlcy9hcGkuc3BlYy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIFJ4IGZyb20gJ3J4JztcbmltcG9ydCAqIGFzIGFuZ3VsYXIgZnJvbSAnYW5ndWxhcic7XG5cbmltcG9ydCB7QVBJU2VydmljZUJhc2UsIFVwbG9hZEV2ZW50VHlwZX0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHtSZXNvbHdlQXBpfSBmcm9tICcuLi8uLi9hcGkvaW5kZXgnO1xuaW1wb3J0IHtNb2NrQXBpLCBNb2NrQ29ubmVjdGlvbn0gZnJvbSAnLi4vLi4vYXBpL21vY2snO1xuaW1wb3J0IHtGaWxlVXBsb2FkUmVzcG9uc2V9IGZyb20gJy4uLy4uL2FwaS90eXBlcy9tb2R1bGVzJztcbmltcG9ydCB7Y29tcG9uZW50LCBDb21wb25lbnRCYXNlfSBmcm9tICcuLi9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtkZXNjcmliZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vdGVzdHMvY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBUElTZXJ2aWNlIGV4dGVuZHMgQVBJU2VydmljZUJhc2UsIFJlc29sd2VBcGkge1xufVxuXG5kZXNjcmliZSgnbW9jayBhcGknLCAoKSA9PiB7XG4gICAgaXQoJ21vY2tzIGJhc2ljIG5vbi1yZWFjdGl2ZSBxdWVyaWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2NrQXBpID0gbmV3IE1vY2tBcGkoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlciA9IGphc21pbmUuY3JlYXRlU3B5KCdzdWJzY3JpYmVyJyk7XG5cbiAgICAgICAgbW9ja0FwaS5jcmVhdGVSZXNvdXJjZSgnY29sbGVjdGlvbicpO1xuXG4gICAgICAgIC8vIFF1ZXJpZXMgYXJlIG5vdCByZWFjdGl2ZSBieSBkZWZhdWx0LlxuICAgICAgICBtb2NrQXBpLkNvbGxlY3Rpb24ucXVlcnkoKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzBdKS50b0VxdWFsKFtdKTtcblxuICAgICAgICAvLyBBZGQgYW4gaXRlbS5cbiAgICAgICAgbW9ja0FwaS5hZGRJdGVtKCdjb2xsZWN0aW9uJywge2lkOiAxLCBuYW1lOiAnSGVsbG8gd29ybGQnfSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cbiAgICAgICAgLy8gU2luY2UgaXQgaXMgYSBub24tcmVhY3RpdmUgcXVlcnksIHdlIG5lZWQgdG8gcmVwZWF0IHRoZSBxdWVyeS5cbiAgICAgICAgbW9ja0FwaS5Db2xsZWN0aW9uLnF1ZXJ5KCkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICBleHBlY3Qoc3Vic2NyaWJlcikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgICAgICBleHBlY3Qoc3Vic2NyaWJlci5jYWxscy5tb3N0UmVjZW50KCkuYXJnc1swXSkudG9FcXVhbChbe2lkOiAxLCBuYW1lOiAnSGVsbG8gd29ybGQnfV0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ21vY2tzIGJhc2ljIHJlYWN0aXZlIHF1ZXJpZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vY2tBcGkgPSBuZXcgTW9ja0FwaSgpO1xuICAgICAgICBjb25zdCBzdWJzY3JpYmVyID0gamFzbWluZS5jcmVhdGVTcHkoJ3N1YnNjcmliZXInKTtcblxuICAgICAgICBtb2NrQXBpLmNyZWF0ZVJlc291cmNlKCdjb2xsZWN0aW9uJyk7XG5cbiAgICAgICAgbW9ja0FwaS5Db2xsZWN0aW9uLnF1ZXJ5KHt9LCB7cmVhY3RpdmU6IHRydWV9KS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzBdKS50b0VxdWFsKFtdKTtcblxuICAgICAgICAvLyBBZGQgYW4gaXRlbS5cbiAgICAgICAgbW9ja0FwaS5hZGRJdGVtKCdjb2xsZWN0aW9uJywge2lkOiAxLCBuYW1lOiAnSGVsbG8gd29ybGQnfSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzBdKS50b0VxdWFsKFt7aWQ6IDEsIG5hbWU6ICdIZWxsbyB3b3JsZCd9XSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGFuIGl0ZW0uXG4gICAgICAgIG1vY2tBcGkudXBkYXRlSXRlbSgnY29sbGVjdGlvbicsIHtpZDogMSwgbmFtZTogJ0hlbGxvIG1vY2t1cHMnfSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzBdKS50b0VxdWFsKFt7aWQ6IDEsIG5hbWU6ICdIZWxsbyBtb2NrdXBzJ31dKTtcblxuICAgICAgICAvLyBSZW1vdmUgYW4gaXRlbS5cbiAgICAgICAgbW9ja0FwaS5yZW1vdmVJdGVtKCdjb2xsZWN0aW9uJywgMSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoNCk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzBdKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCdtb2NrcyBjb21wbGV4IHJlYWN0aXZlIHF1ZXJpZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vY2tBcGkgPSBuZXcgTW9ja0FwaSgpO1xuICAgICAgICBjb25zdCBzdWJzY3JpYmVyUGxhaW4gPSBqYXNtaW5lLmNyZWF0ZVNweSgnc3Vic2NyaWJlclBsYWluJyk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZXJXaXRoRmlsdGVyID0gamFzbWluZS5jcmVhdGVTcHkoJ3N1YnNjcmliZXJXaXRoRmlsdGVyJyk7XG5cbiAgICAgICAgbW9ja0FwaS5jcmVhdGVSZXNvdXJjZSgnY29sbGVjdGlvbicsICdpZCcsIChxdWVyeSwgaXRlbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChfLmlzRW1wdHkocXVlcnkpKSByZXR1cm4gaXRlbXM7XG5cbiAgICAgICAgICAgIHJldHVybiBfLmZpbHRlcihpdGVtcywgKGl0ZW06IGFueSkgPT4gaXRlbS5uYW1lID09PSBxdWVyeS5uYW1lKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbW9ja0FwaS5Db2xsZWN0aW9uLnF1ZXJ5KHt9LCB7cmVhY3RpdmU6IHRydWV9KS5zdWJzY3JpYmUoc3Vic2NyaWJlclBsYWluKTtcbiAgICAgICAgbW9ja0FwaS5Db2xsZWN0aW9uLnF1ZXJ5KHtuYW1lOiAnSGVsbG8nfSwge3JlYWN0aXZlOiB0cnVlfSkuc3Vic2NyaWJlKHN1YnNjcmliZXJXaXRoRmlsdGVyKTtcblxuICAgICAgICBtb2NrQXBpLmFkZEl0ZW0oJ2NvbGxlY3Rpb24nLCB7aWQ6IDEsIG5hbWU6ICdDb2xsZWN0aW9uIEEnfSk7XG4gICAgICAgIG1vY2tBcGkuYWRkSXRlbSgnY29sbGVjdGlvbicsIHtpZDogMiwgbmFtZTogJ0Fub3RoZXIgb25lJ30pO1xuICAgICAgICBtb2NrQXBpLmFkZEl0ZW0oJ2NvbGxlY3Rpb24nLCB7aWQ6IDMsIG5hbWU6ICdIZWxsbyd9KTtcbiAgICAgICAgbW9ja0FwaS5hZGRJdGVtKCdjb2xsZWN0aW9uJywge2lkOiA0LCBuYW1lOiAnSGVsbG8gd29ybGQnfSk7XG5cbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXJQbGFpbikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDUpO1xuICAgICAgICBleHBlY3Qoc3Vic2NyaWJlcldpdGhGaWx0ZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbiAgICB9KTtcblxuICAgIGl0KCdtb2NrcyBub24tcXVlcnkgb3BlcmF0aW9ucycsICgpID0+IHtcbiAgICAgICAgY29uc3QgbW9ja0FwaSA9IG5ldyBNb2NrQXBpKCk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZXIgPSBqYXNtaW5lLmNyZWF0ZVNweSgnc3Vic2NyaWJlcicpO1xuXG4gICAgICAgIG1vY2tBcGkud2hlblBvc3QoJy9hcGkvY29sbGVjdGlvbicsIHN1YnNjcmliZXIpO1xuICAgICAgICBtb2NrQXBpLkNvbGxlY3Rpb24uY3JlYXRlKHtuYW1lOiAnRm9vJ30pO1xuXG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzBdKS50b0VxdWFsKHt9KTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIuY2FsbHMubW9zdFJlY2VudCgpLmFyZ3NbMV0pLnRvRXF1YWwoe25hbWU6ICdGb28nfSk7XG5cbiAgICAgICAgbW9ja0FwaS53aGVuUG9zdCgvXlxcL2FwaVxcL2NvbGxlY3Rpb25cXC8oLis/KVxcL2FkZF9kYXRhLywgc3Vic2NyaWJlcik7XG4gICAgICAgIG1vY2tBcGkuQ29sbGVjdGlvbi5hZGREYXRhKDEsIFsxLCAyLCAzLCA0XSk7XG5cbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIuY2FsbHMubW9zdFJlY2VudCgpLmFyZ3NbMV0pLnRvRXF1YWwoe2lkczogWzEsIDIsIDMsIDRdfSk7XG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyLmNhbGxzLm1vc3RSZWNlbnQoKS5hcmdzWzJdWzFdKS50b0VxdWFsKCcxJyk7XG5cbiAgICAgICAgbW9ja0FwaS53aGVuR2V0KCcvYXBpL2NvbGxlY3Rpb24vc2x1Z19leGlzdHMnLCAocGFyYW1ldGVycywgZGF0YSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMubmFtZSA9PT0gJ2hlbGxvJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbW9ja0FwaS5Db2xsZWN0aW9uLnNsdWdFeGlzdHMoJ2JhcicpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIuY2FsbHMubW9zdFJlY2VudCgpLmFyZ3NbMF0pLnRvQmUoZmFsc2UpO1xuXG4gICAgICAgIG1vY2tBcGkuQ29sbGVjdGlvbi5zbHVnRXhpc3RzKCdoZWxsbycpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcyg0KTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIuY2FsbHMubW9zdFJlY2VudCgpLmFyZ3NbMF0pLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc3VwcG9ydHMgemlwIG9wZXJhdGlvbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgbW9ja0FwaSA9IG5ldyBNb2NrQXBpKCk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZXIgPSBqYXNtaW5lLmNyZWF0ZVNweSgnc3Vic2NyaWJlcicpO1xuXG4gICAgICAgIG1vY2tBcGkuY3JlYXRlUmVzb3VyY2UoJ2NvbGxlY3Rpb24nKTtcbiAgICAgICAgbW9ja0FwaS5hZGRJdGVtKCdjb2xsZWN0aW9uJywgeyBpZDogMSB9KTtcblxuICAgICAgICBSeC5PYnNlcnZhYmxlLnppcChtb2NrQXBpLkNvbGxlY3Rpb24ucXVlcnkoKSwgbW9ja0FwaS5Db2xsZWN0aW9uLnF1ZXJ5KCkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIuY2FsbHMubW9zdFJlY2VudCgpLmFyZ3NbMF0pLnRvRXF1YWwoWyBbIHsgaWQ6IDEgfSBdLCBbIHsgaWQ6IDEgfSBdIF0pO1xuICAgIH0pO1xufSk7XG5cbmRlc2NyaWJlQ29tcG9uZW50KCdhbmd1bGFyIG1vY2sgYXBpJywgW10sICh0ZXN0ZXIpID0+IHtcbiAgICBAY29tcG9uZW50KHtcbiAgICAgICAgbW9kdWxlOiB0ZXN0ZXIubW9kdWxlLFxuICAgICAgICBkaXJlY3RpdmU6ICdnZW4tdGVzdC1jb21wb25lbnQnLFxuICAgICAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJ0ZXh0LW5hbWVcIj5Db2xsZWN0aW9uIG5hbWUgaXMge3tjdHJsLmNvbGxlY3Rpb24ubmFtZX19PC9kaXY+YCxcbiAgICB9KVxuICAgIGNsYXNzIFRlc3RDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHtcbiAgICAgICAgcHVibGljIGNvbGxlY3Rpb246IGFueTtcblxuICAgICAgICAvLyBAbmdJbmplY3RcbiAgICAgICAgY29uc3RydWN0b3IoJHNjb3BlOiBhbmd1bGFyLklTY29wZSwgYXBpOiBBUElTZXJ2aWNlKSB7XG4gICAgICAgICAgICBzdXBlcigkc2NvcGUpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZSgnY29sbGVjdGlvbicsIGFwaS5Db2xsZWN0aW9uLnF1ZXJ5T25lKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXQoJ3JlcGxhY2VzIGFwaSBzZXJ2aWNlJywgKCkgPT4ge1xuICAgICAgICB0ZXN0ZXIuYXBpKCkuY3JlYXRlUmVzb3VyY2UoJ2NvbGxlY3Rpb24nKTtcbiAgICAgICAgdGVzdGVyLmFwaSgpLmFkZEl0ZW0oJ2NvbGxlY3Rpb24nLCB7aWQ6IDEsIG5hbWU6ICdIZWxsbyB3b3JsZCd9KTtcblxuICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0ZXN0ZXIuY3JlYXRlQ29tcG9uZW50PFRlc3RDb21wb25lbnQ+KFxuICAgICAgICAgICAgVGVzdENvbXBvbmVudC5hc1ZpZXcoKS50ZW1wbGF0ZVxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChjb21wb25lbnQuY3RybC5jb2xsZWN0aW9uLmlkKS50b0JlKDEpO1xuICAgICAgICBleHBlY3QoY29tcG9uZW50LmN0cmwuY29sbGVjdGlvbi5uYW1lKS50b0JlKCdIZWxsbyB3b3JsZCcpO1xuICAgICAgICBleHBlY3QoY29tcG9uZW50LmVsZW1lbnQuZmluZCgnLnRleHQtbmFtZScpLnRleHQoKSkudG9CZSgnQ29sbGVjdGlvbiBuYW1lIGlzIEhlbGxvIHdvcmxkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnbW9ja3MgdXBsb2FkcycsIChkb25lKSA9PiB7XG4gICAgICAgIGxldCB1cGxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgICAgIHRlc3Rlci5hcGkoKS53aGVuVXBsb2FkKChkYXRhOiBhbnksIGZpbGVVSUQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdXBsb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogJ2hlbGxvJyB9O1xuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0ZXIuYXBpKCkudXBsb2FkKHt9LCAndGVzdC11dWlkJykuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3BvbnNlLnR5cGUpLnRvRXF1YWwoJ3Jlc3VsdCcpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09IFVwbG9hZEV2ZW50VHlwZS5SRVNVTFQpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodXBsb2FkZWQpLnRvRXF1YWwodHJ1ZSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHJlc3BvbnNlLnJlc3VsdCkudG9FcXVhbCh7IGRhdGE6ICdoZWxsbycgfSk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn0pO1xuXG5kZXNjcmliZSgncmVzb3VyY2UnLCAoKSA9PiB7XG4gICAgaXQoJ2NvcnJlY3RseSBjYWNoZXMgcmVhY3RpdmUgcXVlcmllcycsIChkb25lKSA9PiB7XG4gICAgICAgIGxldCBjYWxsZWQgPSAwO1xuICAgICAgICBjb25zdCBtb2NrQXBpID0gbmV3IE1vY2tBcGkoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgrK2NhbGxlZCA9PT0gMykgeyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBtb2NrQXBpLmNyZWF0ZVJlc291cmNlKCdwcm9jZXNzJyk7XG4gICAgICAgIG1vY2tBcGkuc2ltdWxhdGVEZWxheSh0cnVlKTtcblxuICAgICAgICBtb2NrQXBpLlByb2Nlc3MucXVlcnkoe30sIHtyZWFjdGl2ZTogdHJ1ZX0pLnRha2UoMSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICBtb2NrQXBpLlByb2Nlc3MucXVlcnkoe30sIHtyZWFjdGl2ZTogdHJ1ZX0pLnRha2UoMSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICBtb2NrQXBpLlByb2Nlc3MucXVlcnkoe30sIHtyZWFjdGl2ZTogdHJ1ZX0pLnRha2UoMSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuXG4gICAgICAgIC8vIEVuc3VyZSB0aGVzZSBxdWVyaWVzIGhhdmUgYmVlbiBkZWxheWVkLlxuICAgICAgICBleHBlY3QoY2FsbGVkKS50b0VxdWFsKDApO1xuICAgIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd1cGxvYWQnLCAoKSA9PiB7XG4gICAgbGV0IGFwaTogQVBJU2VydmljZUJhc2U7XG4gICAgbGV0ICRodHRwQmFja2VuZDogYW5ndWxhci5JSHR0cEJhY2tlbmRTZXJ2aWNlO1xuICAgIGxldCAkZXhjZXB0aW9uSGFuZGxlcjogYW5ndWxhci5JRXhjZXB0aW9uSGFuZGxlclNlcnZpY2UgJiB7IGVycm9yczogYW55W10gfTtcblxuICAgIC8vIEF1dG8tcmV0cnkgdGVzdHMgZmFpbCBpZiAkZXhjZXB0aW9uSGFuZGxlciByZXRocm93cyBlcnJvcnMuXG4gICAgYW5ndWxhci5tb2R1bGUoJ2lnbm9yZV9leGNlcHRpb25zJywgW10pLmNvbmZpZygoJGV4Y2VwdGlvbkhhbmRsZXJQcm92aWRlcjogYW5ndWxhci5JRXhjZXB0aW9uSGFuZGxlclByb3ZpZGVyKSA9PiB7XG4gICAgICAgICRleGNlcHRpb25IYW5kbGVyUHJvdmlkZXIubW9kZSgnbG9nJyk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKGFuZ3VsYXIubW9jay5tb2R1bGUoJ2lnbm9yZV9leGNlcHRpb25zJykpO1xuICAgIGJlZm9yZUVhY2goYW5ndWxhci5tb2NrLm1vZHVsZSgnbmdGaWxlVXBsb2FkJykpO1xuXG4gICAgYmVmb3JlRWFjaChpbmplY3QoKFVwbG9hZDogYW5ndWxhci5hbmd1bGFyRmlsZVVwbG9hZC5JVXBsb2FkU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgIF8kaHR0cEJhY2tlbmRfLFxuICAgICAgICAgICAgICAgICAgICAgICBfJGV4Y2VwdGlvbkhhbmRsZXJfKSA9PiB7XG4gICAgICAgICRodHRwQmFja2VuZCA9IF8kaHR0cEJhY2tlbmRfO1xuICAgICAgICAkZXhjZXB0aW9uSGFuZGxlciA9IF8kZXhjZXB0aW9uSGFuZGxlcl87XG5cbiAgICAgICAgYXBpID0gbmV3IEFQSVNlcnZpY2VCYXNlKFVwbG9hZCwgJHEsICRodHRwKTtcbiAgICAgICAgYXBpLmNvbm5lY3Rpb24gPSBuZXcgTW9ja0Nvbm5lY3Rpb24oKTtcbiAgICAgICAgYXBpLlJFVFJZX0RFTEFZX0lOQ1JFTUVOVCA9IDEwO1xuICAgIH0pKTtcblxuICAgIGl0KCdzaG91bGQgd29yayBmb3IgbmV3IGZpbGVzJywgKGRvbmUpID0+IHtcbiAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdEdFVCgnL3VwbG9hZC8nKS5yZXNwb25kKChtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycywgcXVlcnlQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChoZWFkZXJzWydYLUZpbGUtVWlkJ10pLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgICAgICByZXR1cm4gWzIwMCwgeyByZXN1bWVfb2Zmc2V0OiAwIH0sIHt9LCAnT0snXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdFBPU1QoJy91cGxvYWQvJykucmVzcG9uZChcbiAgICAgICAgICAgIDIwMCxcbiAgICAgICAgICAgIDxGaWxlVXBsb2FkUmVzcG9uc2U+IHtcbiAgICAgICAgICAgICAgICBmaWxlczogW3sgbmFtZTogJ2EudHh0Jywgc2l6ZTogMTAwMCwgZG9uZTogdHJ1ZSwgdGVtcDogJzVlZDJhJyB9XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgYXBpLnVwbG9hZFN0cmluZygnYS50eHQnLCAnYWJjZCcpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChyZXNwb25zZS50eXBlKS50b0VxdWFsKCdyZXN1bHQnKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSBVcGxvYWRFdmVudFR5cGUuUkVTVUxUKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHJlc3BvbnNlLnJlc3VsdC5maWxlc1swXS5uYW1lKS50b0VxdWFsKCdhLnR4dCcpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCgkZXhjZXB0aW9uSGFuZGxlci5lcnJvcnMpLnRvRXF1YWwoW10pO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICRodHRwQmFja2VuZC5mbHVzaCgpO1xuICAgICAgICAkaHR0cEJhY2tlbmQudmVyaWZ5Tm9PdXRzdGFuZGluZ0V4cGVjdGF0aW9uKCk7XG4gICAgICAgICRodHRwQmFja2VuZC52ZXJpZnlOb091dHN0YW5kaW5nUmVxdWVzdCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjaHVuayBsYXJnZSBmaWxlcycsIChkb25lKSA9PiB7XG4gICAgICAgICRodHRwQmFja2VuZC5leHBlY3RHRVQoJy91cGxvYWQvJykucmVzcG9uZCgyMDAsIHsgcmVzdW1lX29mZnNldDogMCB9KTtcbiAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdFBPU1QoJy91cGxvYWQvJykucmVzcG9uZCgyMDAsIHt9KTtcbiAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdFBPU1QoJy91cGxvYWQvJykucmVzcG9uZCgyMDAsIHt9KTtcbiAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdFBPU1QoJy91cGxvYWQvJykucmVzcG9uZCgyMDAsIHsgLyogcmVzdWx0ICovIH0pO1xuXG4gICAgICAgIGNvbnN0IGxhcmdlQ29udGVudCA9IF8ucmFuZ2UoMyAqIGFwaS5DSFVOS19TSVpFIC0gMSkubWFwKCgpID0+ICdhJykuam9pbignJyk7XG4gICAgICAgIGFwaS51cGxvYWRTdHJpbmcoJ2EudHh0JywgbGFyZ2VDb250ZW50KS50b0FycmF5KCkuc3Vic2NyaWJlKChbcmVzcG9uc2UxLCByZXNwb25zZTIsIHJlc3BvbnNlM10pID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChyZXNwb25zZTEudHlwZSkudG9FcXVhbCgncHJvZ3Jlc3MnKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXNwb25zZTIudHlwZSkudG9FcXVhbCgncHJvZ3Jlc3MnKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXNwb25zZTMudHlwZSkudG9FcXVhbCgncmVzdWx0Jyk7XG4gICAgICAgICAgICBleHBlY3QoJGV4Y2VwdGlvbkhhbmRsZXIuZXJyb3JzKS50b0VxdWFsKFtdKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgICRodHRwQmFja2VuZC5mbHVzaCgpO1xuICAgICAgICAkaHR0cEJhY2tlbmQudmVyaWZ5Tm9PdXRzdGFuZGluZ0V4cGVjdGF0aW9uKCk7XG4gICAgICAgICRodHRwQmFja2VuZC52ZXJpZnlOb091dHN0YW5kaW5nUmVxdWVzdCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXN1bWUgZm9yIGV4aXN0aW5nIGZpbGVzJywgKGRvbmUpID0+IHtcbiAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdEdFVCgnL3VwbG9hZC8nKS5yZXNwb25kKDIwMCwgeyByZXN1bWVfb2Zmc2V0OiBhcGkuQ0hVTktfU0laRSB9KTtcbiAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdFBPU1QoJy91cGxvYWQvJykucmVzcG9uZCgyMDAsIHt9KTtcbiAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdFBPU1QoJy91cGxvYWQvJykucmVzcG9uZCgyMDAsIHsgLyogcmVzdWx0ICovIH0pO1xuXG4gICAgICAgIGNvbnN0IGxhcmdlQ29udGVudCA9IF8ucmFuZ2UoMyAqIGFwaS5DSFVOS19TSVpFIC0gMSkubWFwKCgpID0+ICdhJykuam9pbignJyk7XG4gICAgICAgIGFwaS51cGxvYWRTdHJpbmcoJ2EudHh0JywgbGFyZ2VDb250ZW50KS50b0FycmF5KCkuc3Vic2NyaWJlKChbcmVzcG9uc2UxLCByZXNwb25zZTJdKSA9PiB7XG4gICAgICAgICAgICBleHBlY3QocmVzcG9uc2UxLnR5cGUpLnRvRXF1YWwoJ3Byb2dyZXNzJyk7XG4gICAgICAgICAgICBleHBlY3QocmVzcG9uc2UyLnR5cGUpLnRvRXF1YWwoJ3Jlc3VsdCcpO1xuICAgICAgICAgICAgZXhwZWN0KCRleGNlcHRpb25IYW5kbGVyLmVycm9ycykudG9FcXVhbChbXSk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgICAgICAkaHR0cEJhY2tlbmQuZmx1c2goKTtcbiAgICAgICAgJGh0dHBCYWNrZW5kLnZlcmlmeU5vT3V0c3RhbmRpbmdFeHBlY3RhdGlvbigpO1xuICAgICAgICAkaHR0cEJhY2tlbmQudmVyaWZ5Tm9PdXRzdGFuZGluZ1JlcXVlc3QoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXV0by1yZXRyeSBhZnRlciBmYWlsZWQgcmVxdWVzdHMnLCAoZG9uZSkgPT4ge1xuICAgICAgICAkaHR0cEJhY2tlbmQuZXhwZWN0R0VUKCcvdXBsb2FkLycpLnJlc3BvbmQoNTAzLCB7fSk7XG5cbiAgICAgICAgY29uc3QgbGFyZ2VDb250ZW50ID0gXy5yYW5nZSgzICogYXBpLkNIVU5LX1NJWkUgLSAxKS5tYXAoKCkgPT4gJ2EnKS5qb2luKCcnKTtcbiAgICAgICAgYXBpLnVwbG9hZFN0cmluZygnYS50eHQnLCBsYXJnZUNvbnRlbnQpLnRvQXJyYXkoKS5zdWJzY3JpYmUoKHJlc3BvbnNlcykgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3BvbnNlc1swXS50eXBlKS50b0VxdWFsKCdyZXRyeWluZycpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3BvbnNlc1sxXS50eXBlKS50b0VxdWFsKCdyZXRyeWluZycpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3BvbnNlc1syXS50eXBlKS50b0VxdWFsKCdwcm9ncmVzcycpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3BvbnNlc1szXS50eXBlKS50b0VxdWFsKCdyZXRyeWluZycpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3BvbnNlc1s0XS50eXBlKS50b0VxdWFsKCdyZXN1bHQnKTtcblxuICAgICAgICAgICAgY29uc3QgdW5leHBlY3RlZExvZ3MgPSAkZXhjZXB0aW9uSGFuZGxlci5lcnJvcnMuZmlsdGVyKChsb2cpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0V4cGVjdGVkID0gXy5pc1N0cmluZyhsb2cpICYmIC9Qb3NzaWJseSB1bmhhbmRsZWQgcmVqZWN0aW9uOiAuKlwic3RhdHVzXCI6NTAzLy50ZXN0KGxvZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFpc0V4cGVjdGVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBleHBlY3QodW5leHBlY3RlZExvZ3MpLnRvRXF1YWwoW10pO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgJGh0dHBCYWNrZW5kLmZsdXNoKCk7XG5cbiAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdEdFVCgnL3VwbG9hZC8nKS5yZXNwb25kKDIwMCwgeyByZXN1bWVfb2Zmc2V0OiBhcGkuQ0hVTktfU0laRSB9KTtcbiAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdFBPU1QoJy91cGxvYWQvJykucmVzcG9uZCg1MDMsIHt9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAkaHR0cEJhY2tlbmQuZmx1c2goKTtcblxuICAgICAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdEdFVCgnL3VwbG9hZC8nKS5yZXNwb25kKDIwMCwgeyByZXN1bWVfb2Zmc2V0OiBhcGkuQ0hVTktfU0laRSB9KTtcbiAgICAgICAgICAgICRodHRwQmFja2VuZC5leHBlY3RQT1NUKCcvdXBsb2FkLycpLnJlc3BvbmQoMjAwLCB7fSk7XG4gICAgICAgICAgICAkaHR0cEJhY2tlbmQuZXhwZWN0UE9TVCgnL3VwbG9hZC8nKS5yZXNwb25kKDUwMywge30pO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgJGh0dHBCYWNrZW5kLmZsdXNoKCk7XG5cbiAgICAgICAgICAgICAgICAkaHR0cEJhY2tlbmQuZXhwZWN0R0VUKCcvdXBsb2FkLycpLnJlc3BvbmQoMjAwLCB7IHJlc3VtZV9vZmZzZXQ6IDIgKiBhcGkuQ0hVTktfU0laRSB9KTtcbiAgICAgICAgICAgICAgICAkaHR0cEJhY2tlbmQuZXhwZWN0UE9TVCgnL3VwbG9hZC8nKS5yZXNwb25kKDIwMCwgeyAvKiByZXN1bHQgKi8gfSk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICRodHRwQmFja2VuZC5mbHVzaCgpO1xuICAgICAgICAgICAgICAgIH0sIDMwICsgNSk7XG4gICAgICAgICAgICB9LCAyMCArIDUpO1xuICAgICAgICB9LCAxMCArIDUpOyAvLyBXYWl0IGZvciBSRVRSWV9ERUxBWV9JTkNSRU1FTlQsIGFuZCA1bXMgcGFkZGluZyB0aW1lXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN0b3AgcmV0cnlpbmcgYWZ0ZXIgdG9vIG1hbnkgZmFpbGVkIHJlcXVlc3RzJywgKGRvbmUpID0+IHtcbiAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdEdFVCgnL3VwbG9hZC8nKS5yZXNwb25kKDUwMywge30pO1xuXG4gICAgICAgIGNvbnN0IGxhcmdlQ29udGVudCA9IF8ucmFuZ2UoMyAqIGFwaS5DSFVOS19TSVpFIC0gMSkubWFwKCgpID0+ICdhJykuam9pbignJyk7XG4gICAgICAgIGFwaS51cGxvYWRTdHJpbmcoJ2EudHh0JywgbGFyZ2VDb250ZW50KS50b0FycmF5KCkuc3Vic2NyaWJlKChyZXNwb25zZXMpID0+IHtcbiAgICAgICAgICAgIGRvbmUuZmFpbCgnRXhwZWN0ZWQgdXBsb2FkIHRvIGZhaWwsIG5vdCBzdWNjZWVkJyk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KGVycm9yLmNvbmZpZy5tZXRob2QpLnRvRXF1YWwoJ1BPU1QnKTtcbiAgICAgICAgICAgIGV4cGVjdChlcnJvci5zdGF0dXMpLnRvRXF1YWwoNTAzKTtcblxuICAgICAgICAgICAgY29uc3QgdW5leHBlY3RlZExvZ3MgPSAkZXhjZXB0aW9uSGFuZGxlci5lcnJvcnMuZmlsdGVyKChsb2cpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0V4cGVjdGVkID0gXy5pc1N0cmluZyhsb2cpICYmIC9Qb3NzaWJseSB1bmhhbmRsZWQgcmVqZWN0aW9uOiAuKlwic3RhdHVzXCI6NTAzLy50ZXN0KGxvZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFpc0V4cGVjdGVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBleHBlY3QodW5leHBlY3RlZExvZ3MpLnRvRXF1YWwoW10pO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgJGh0dHBCYWNrZW5kLmZsdXNoKCk7XG5cbiAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdEdFVCgnL3VwbG9hZC8nKS5yZXNwb25kKDUwMywge30pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICRodHRwQmFja2VuZC5mbHVzaCgpO1xuXG4gICAgICAgICAgICAkaHR0cEJhY2tlbmQuZXhwZWN0R0VUKCcvdXBsb2FkLycpLnJlc3BvbmQoMjAwLCB7IHJlc3VtZV9vZmZzZXQ6IGFwaS5DSFVOS19TSVpFIH0pO1xuICAgICAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdFBPU1QoJy91cGxvYWQvJykucmVzcG9uZCg1MDMsIHt9KTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICRodHRwQmFja2VuZC5mbHVzaCgpO1xuXG4gICAgICAgICAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdEdFVCgnL3VwbG9hZC8nKS5yZXNwb25kKDUwMywge30pO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAkaHR0cEJhY2tlbmQuZmx1c2goKTtcblxuICAgICAgICAgICAgICAgICAgICAkaHR0cEJhY2tlbmQuZXhwZWN0R0VUKCcvdXBsb2FkLycpLnJlc3BvbmQoMjAwLCB7IHJlc3VtZV9vZmZzZXQ6IGFwaS5DSFVOS19TSVpFIH0pO1xuICAgICAgICAgICAgICAgICAgICAkaHR0cEJhY2tlbmQuZXhwZWN0UE9TVCgnL3VwbG9hZC8nKS5yZXNwb25kKDUwMywge30pO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRodHRwQmFja2VuZC5mbHVzaCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkaHR0cEJhY2tlbmQuZXhwZWN0R0VUKCcvdXBsb2FkLycpLnJlc3BvbmQoMjAwLCB7IHJlc3VtZV9vZmZzZXQ6IGFwaS5DSFVOS19TSVpFIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGh0dHBCYWNrZW5kLmV4cGVjdFBPU1QoJy91cGxvYWQvJykucmVzcG9uZCg1MDMsIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRodHRwQmFja2VuZC5mbHVzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAgKyA1KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgNDAgKyA1KTtcbiAgICAgICAgICAgICAgICB9LCAzMCArIDUpO1xuICAgICAgICAgICAgfSwgMjAgKyA1KTtcbiAgICAgICAgfSwgMTAgKyA1KTtcbiAgICB9KTtcbn0pO1xuIl19

@@ -0,1 +1,2 @@

/// <reference types="angular" />
import * as immutable from 'immutable';

@@ -10,3 +11,3 @@ export interface Jsonable {

*/
export declare function isPromise(value: any): value is Promise<any>;
export declare function isPromiseLike(value: any): value is Promise<any> | angular.IPromise<any>;
/**

@@ -13,0 +14,0 @@ * Returns true if the given value is an observable.

@@ -9,6 +9,7 @@ "use strict";

*/
function isPromise(value) {
return value instanceof Promise;
function isPromiseLike(value) {
var promise = value;
return !!promise.then && typeof promise.then === 'function';
}
exports.isPromise = isPromise;
exports.isPromiseLike = isPromiseLike;
/**

@@ -98,2 +99,2 @@ * Returns true if the given value is an observable.

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL3V0aWxzL2xhbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQkFBNEI7QUFPNUI7Ozs7R0FJRztBQUNILG1CQUEwQixLQUFVO0lBQ2hDLE1BQU0sQ0FBQyxLQUFLLFlBQVksT0FBTyxDQUFDO0FBQ3BDLENBQUM7QUFGRCw4QkFFQztBQUVEOzs7O0dBSUc7QUFDSCxzQkFBNkIsS0FBVTtJQUNuQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ2hELENBQUM7QUFGRCxvQ0FFQztBQUVEOzs7O0dBSUc7QUFDSCxvQkFBMkIsS0FBVTtJQUNqQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzdDLENBQUM7QUFGRCxnQ0FFQztBQUVEOzs7O0dBSUc7QUFDSCwrQkFBc0MsS0FBVTtJQUM1QyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzNDLENBQUM7QUFGRCxzREFFQztBQUVEOzs7Ozs7R0FNRztBQUNILGdCQUFnQixNQUFXLEVBQUUsTUFBVztJQUNwQyxHQUFHLENBQUM7UUFDQSxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsSUFBSTtZQUM1QyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssYUFBYSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdkYsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUJBQW1CO1FBQ25CLE1BQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUMsUUFBUSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtBQUNyRCxDQUFDO0FBR0Q7Ozs7OztHQU1HO0FBQ0gsaUJBQXdCLE1BQWEsRUFBRSxpQkFBa0M7SUFBbEMsa0NBQUEsRUFBQSx5QkFBa0M7SUFDckUsd0ZBQXdGO0lBQ3hGLElBQUksSUFBSSxHQUFHO1FBQUEsaUJBWVY7UUFabUIsY0FBYzthQUFkLFVBQWMsRUFBZCxxQkFBYyxFQUFkLElBQWM7WUFBZCx5QkFBYzs7UUFDOUIsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLDZEQUE2RDtZQUM3RCxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxFQUFrQjtvQkFBakIsYUFBSyxFQUFFLGlCQUFTO2dCQUMxQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLDZEQUE2RDtZQUM3RCxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUMsS0FBSztnQkFDakIsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsNkVBQTZFO0lBQzdFLGdDQUFnQztJQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUMsS0FBSztRQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUF2QkQsMEJBdUJDIiwiZmlsZSI6ImNvcmUvdXRpbHMvbGFuZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIGltbXV0YWJsZSBmcm9tICdpbW11dGFibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEpzb25hYmxlIHtcbiAgICB0b0pTT04oKTogYW55O1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBwcm9taXNlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2U7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBvYnNlcnZhYmxlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPYnNlcnZhYmxlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBSeC5PYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBfLmlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZS5zdWJzY3JpYmU7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBoYXMgYSBgdG9KU09OYCBtZXRob2QuXG4gKlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIGNoZWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0pzb25hYmxlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBKc29uYWJsZSB7XG4gICAgcmV0dXJuIF8uaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLnRvSlNPTjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIEltbXV0YWJsZS5qcyBjb2xsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbW11dGFibGVDb2xsZWN0aW9uKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBpbW11dGFibGUuQ29sbGVjdGlvbjxhbnksIGFueT4ge1xuICAgIHJldHVybiBfLmlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZS50b0pTO1xufVxuXG4vKipcbiAqIENvcHkgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0IHRvIHRhcmdldCBvYmplY3QgZXhjbHVkaW5nIGNvbnN0cnVjdG9yLlxuICogSWYgYSBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIGV4aXN0cyBvbiB0aGUgdGFyZ2V0IGl0IGlzIE5PVCBvdmVyd3JpdHRlbi5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gc291cmNlXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQ6IGFueSwgc291cmNlOiBhbnkpIHtcbiAgICBkbyB7XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSkuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5hbWUgIT09ICdjb25zdHJ1Y3RvcicgJiYgIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBuYW1lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlY3Vyc2UgdXB3YXJkcy5cbiAgICAgICAgc291cmNlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSk7XG4gICAgfSB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSkgIT09IG51bGwpO1xufVxuXG5cbi8qKlxuICogQ3JlYXRlIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIGEgY2xhc3MgaW1wbGVtZW50aW5nIHRoZSBnaXZlbiBtaXhpbnMuXG4gKlxuICogQHBhcmFtIG1peGlucyBBcnJheSBvZiBjbGFzc2VzIHRvIGJlIG1peGVkIHRvZ2V0aGVyXG4gKiBAcGFyYW0gc2VwYXJhdGVBcmd1bWVudHMgU2hvdWxkIHRoZSBuZXcgY29uc3RydWN0IGFjY2VwdCBzZXBhcmF0ZSBhcmd1bWVudHNcbiAqIEByZXR1cm4gQSBjb25zdHJ1Y3RvciBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZShtaXhpbnM6IGFueVtdLCBzZXBhcmF0ZUFyZ3VtZW50czogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgLy8gQ29uc3RydWN0b3IgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIGEgbmV3IGNvbXBvc2VkIG9iamVjdCBpcyBjcmVhdGVkLlxuICAgIGxldCBjdG9yID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgaWYgKHNlcGFyYXRlQXJndW1lbnRzKSB7XG4gICAgICAgICAgICAvLyBDYWxsIGVhY2ggY29uc3RydWN0aW9uIGZ1bmN0aW9uIHdpdGggcmVzcGVjdGl2ZSBhcmd1bWVudHMuXG4gICAgICAgICAgICBfLnppcChtaXhpbnMsIGFyZ3MpLmZvckVhY2goKFttaXhpbiwgbWl4aW5BcmdzXSkgPT4ge1xuICAgICAgICAgICAgICAgIG1peGluLmFwcGx5KHRoaXMsIG1peGluQXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENhbGwgdGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIG9mIGFsbCB0aGUgbWl4aW5zLCBpbiBvcmRlci5cbiAgICAgICAgICAgIG1peGlucy5mb3JFYWNoKChtaXhpbikgPT4ge1xuICAgICAgICAgICAgICAgIG1peGluLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gQWRkIGFsbCBtaXhpbnMgcHJvcGVydGllcyBhbmQgbWV0aG9kcyB0byB0aGUgY29uc3RydWN0b3IgcHJvdG90eXBlIGZvciBhbGxcbiAgICAvLyBjcmVhdGVkIG9iamVjdHMgdG8gaGF2ZSB0aGVtLlxuICAgIG1peGlucy5mb3JFYWNoKChtaXhpbikgPT4ge1xuICAgICAgICBleHRlbmQoY3Rvci5wcm90b3R5cGUsIG1peGluLnByb3RvdHlwZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3Rvcjtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL3V0aWxzL2xhbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQkFBNEI7QUFPNUI7Ozs7R0FJRztBQUNILHVCQUE4QixLQUFVO0lBQ3BDLElBQU0sT0FBTyxHQUFrQixLQUFLLENBQUM7SUFDckMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7QUFDaEUsQ0FBQztBQUhELHNDQUdDO0FBRUQ7Ozs7R0FJRztBQUNILHNCQUE2QixLQUFVO0lBQ25DLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDaEQsQ0FBQztBQUZELG9DQUVDO0FBRUQ7Ozs7R0FJRztBQUNILG9CQUEyQixLQUFVO0lBQ2pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDN0MsQ0FBQztBQUZELGdDQUVDO0FBRUQ7Ozs7R0FJRztBQUNILCtCQUFzQyxLQUFVO0lBQzVDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0MsQ0FBQztBQUZELHNEQUVDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsZ0JBQWdCLE1BQVcsRUFBRSxNQUFXO0lBQ3BDLEdBQUcsQ0FBQztRQUNBLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxJQUFJO1lBQzVDLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN2RixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxtQkFBbUI7UUFDbkIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxRQUFRLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3JELENBQUM7QUFHRDs7Ozs7O0dBTUc7QUFDSCxpQkFBd0IsTUFBYSxFQUFFLGlCQUFrQztJQUFsQyxrQ0FBQSxFQUFBLHlCQUFrQztJQUNyRSx3RkFBd0Y7SUFDeEYsSUFBSSxJQUFJLEdBQUc7UUFBQSxpQkFZVjtRQVptQixjQUFjO2FBQWQsVUFBYyxFQUFkLHFCQUFjLEVBQWQsSUFBYztZQUFkLHlCQUFjOztRQUM5QixFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDcEIsNkRBQTZEO1lBQzdELENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFDLEVBQWtCO29CQUFqQixhQUFLLEVBQUUsaUJBQVM7Z0JBQzFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osNkRBQTZEO1lBQzdELE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLO2dCQUNqQixLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRiw2RUFBNkU7SUFDN0UsZ0NBQWdDO0lBQ2hDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLO1FBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQXZCRCwwQkF1QkMiLCJmaWxlIjoiY29yZS91dGlscy9sYW5nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgaW1tdXRhYmxlIGZyb20gJ2ltbXV0YWJsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbmFibGUge1xuICAgIHRvSlNPTigpOiBhbnk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIHByb21pc2UuXG4gKlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIGNoZWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2VMaWtlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBQcm9taXNlPGFueT4gfCBhbmd1bGFyLklQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHByb21pc2UgPSA8UHJvbWlzZTxhbnk+PiB2YWx1ZTtcbiAgICByZXR1cm4gISFwcm9taXNlLnRoZW4gJiYgdHlwZW9mIHByb21pc2UudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIG9ic2VydmFibGUuXG4gKlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIGNoZWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09ic2VydmFibGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIFJ4Lk9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIF8uaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLnN1YnNjcmliZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGhhcyBhIGB0b0pTT05gIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gY2hlY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSnNvbmFibGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIEpzb25hYmxlIHtcbiAgICByZXR1cm4gXy5pc09iamVjdCh2YWx1ZSkgJiYgdmFsdWUudG9KU09OO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gSW1tdXRhYmxlLmpzIGNvbGxlY3Rpb24uXG4gKlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIGNoZWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ltbXV0YWJsZUNvbGxlY3Rpb24odmFsdWU6IGFueSk6IHZhbHVlIGlzIGltbXV0YWJsZS5Db2xsZWN0aW9uPGFueSwgYW55PiB7XG4gICAgcmV0dXJuIF8uaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLnRvSlM7XG59XG5cbi8qKlxuICogQ29weSBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3QgdG8gdGFyZ2V0IG9iamVjdCBleGNsdWRpbmcgY29uc3RydWN0b3IuXG4gKiBJZiBhIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgZXhpc3RzIG9uIHRoZSB0YXJnZXQgaXQgaXMgTk9UIG92ZXJ3cml0dGVuLlxuICpcbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSBzb3VyY2VcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldDogYW55LCBzb3VyY2U6IGFueSkge1xuICAgIGRvIHtcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZSAhPT0gJ2NvbnN0cnVjdG9yJyAmJiAhdGFyZ2V0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIG5hbWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVjdXJzZSB1cHdhcmRzLlxuICAgICAgICBzb3VyY2UgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKTtcbiAgICB9IHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKSAhPT0gbnVsbCk7XG59XG5cblxuLyoqXG4gKiBDcmVhdGUgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgYSBjbGFzcyBpbXBsZW1lbnRpbmcgdGhlIGdpdmVuIG1peGlucy5cbiAqXG4gKiBAcGFyYW0gbWl4aW5zIEFycmF5IG9mIGNsYXNzZXMgdG8gYmUgbWl4ZWQgdG9nZXRoZXJcbiAqIEBwYXJhbSBzZXBhcmF0ZUFyZ3VtZW50cyBTaG91bGQgdGhlIG5ldyBjb25zdHJ1Y3QgYWNjZXB0IHNlcGFyYXRlIGFyZ3VtZW50c1xuICogQHJldHVybiBBIGNvbnN0cnVjdG9yIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlKG1peGluczogYW55W10sIHNlcGFyYXRlQXJndW1lbnRzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAvLyBDb25zdHJ1Y3RvciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgYSBuZXcgY29tcG9zZWQgb2JqZWN0IGlzIGNyZWF0ZWQuXG4gICAgbGV0IGN0b3IgPSBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgICBpZiAoc2VwYXJhdGVBcmd1bWVudHMpIHtcbiAgICAgICAgICAgIC8vIENhbGwgZWFjaCBjb25zdHJ1Y3Rpb24gZnVuY3Rpb24gd2l0aCByZXNwZWN0aXZlIGFyZ3VtZW50cy5cbiAgICAgICAgICAgIF8uemlwKG1peGlucywgYXJncykuZm9yRWFjaCgoW21peGluLCBtaXhpbkFyZ3NdKSA9PiB7XG4gICAgICAgICAgICAgICAgbWl4aW4uYXBwbHkodGhpcywgbWl4aW5BcmdzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gb2YgYWxsIHRoZSBtaXhpbnMsIGluIG9yZGVyLlxuICAgICAgICAgICAgbWl4aW5zLmZvckVhY2goKG1peGluKSA9PiB7XG4gICAgICAgICAgICAgICAgbWl4aW4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBBZGQgYWxsIG1peGlucyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIHRvIHRoZSBjb25zdHJ1Y3RvciBwcm90b3R5cGUgZm9yIGFsbFxuICAgIC8vIGNyZWF0ZWQgb2JqZWN0cyB0byBoYXZlIHRoZW0uXG4gICAgbWl4aW5zLmZvckVhY2goKG1peGluKSA9PiB7XG4gICAgICAgIGV4dGVuZChjdG9yLnByb3RvdHlwZSwgbWl4aW4ucHJvdG90eXBlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjdG9yO1xufVxuIl19

@@ -112,6 +112,5 @@ "use strict";

// Register any shared stores.
var sharedStores = _.filter(modules, function (m) { return m.storeId; });
modules = _.filter(modules, function (m) { return !m.storeId; });
var _a = _.partition(modules, function (m) { return !!m.storeId; }), sharedStores = _a[0], additionalModules = _a[1];
module.config(["sharedStoreManagerProvider", function (sharedStoreManagerProvider) {
sharedStores.forEach(function (descriptor) {
_.each(sharedStores, function (descriptor) {
if (descriptor.factory) {

@@ -125,14 +124,19 @@ sharedStoreManagerProvider.register(descriptor.storeId, descriptor.factory);

}]);
for (var _i = 0, modules_1 = modules; _i < modules_1.length; _i++) {
var additionalModuleName = modules_1[_i];
beforeEach(angular.mock.module(additionalModuleName));
}
_.each(additionalModules, function (additionalModule) {
beforeEach(angular.mock.module(additionalModule));
});
// A container in DOM where we can temporarily append component elements.
var containerElement = null;
function provideRealDOM() {
removeRealDOM();
var body = angular.element(document.body);
containerElement = angular.element('<div id="test-container-element"></div>');
body.remove('#test-container-element');
body.append(containerElement);
}
function removeRealDOM() {
if (containerElement) {
containerElement.remove();
containerElement = null;
}
}
beforeEach(function () {

@@ -148,4 +152,3 @@ jasmine.addMatchers(matchers_1.ngEqualMatcher);

$scope.$destroy();
if (containerElement)
containerElement.empty();
removeRealDOM();
});

@@ -178,2 +181,2 @@ tests({

//# sourceMappingURL=data:application/json;charset=utf8;base64,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Q0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzNDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztnQkFFRCxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ3JCLENBQUM7WUFFRCxNQUFNLEVBQUU7Z0JBQ0osTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLENBQUM7WUFFRCxHQUFHLEVBQUU7Z0JBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNuQixDQUFDO1lBRUQsS0FBSyxFQUFFO2dCQUNILE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDbEIsQ0FBQztZQUVELGNBQWMsRUFBRSxjQUFjO1NBQ2pDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQXRHRCw4Q0FzR0MiLCJmaWxlIjoidGVzdHMvY29tcG9uZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgYW5ndWxhciBmcm9tICdhbmd1bGFyJztcbmltcG9ydCAnYW5ndWxhci1tb2Nrcyc7XG5cbmltcG9ydCB7UmVzb2x3ZUFwaX0gZnJvbSAnLi4vYXBpL2luZGV4JztcbmltcG9ydCB7TW9ja0Jhc2UsIE1vY2tBcGl9IGZyb20gJy4uL2FwaS9tb2NrJztcbmltcG9ydCB7bmdFcXVhbE1hdGNoZXJ9IGZyb20gJy4vbWF0Y2hlcnMnO1xuaW1wb3J0IHtTaGFyZWRTdG9yZUZhY3RvcnksIFNoYXJlZFN0b3JlUHJvdmlkZXJ9IGZyb20gJy4uL2NvcmUvc2hhcmVkX3N0b3JlL2luZGV4JztcbmltcG9ydCB7R2VuRXJyb3J9IGZyb20gJy4uL2NvcmUvZXJyb3JzL2Vycm9yJztcbmltcG9ydCB7Y29tcG9zZX0gZnJvbSAnLi4vY29yZS91dGlscy9sYW5nJztcbmltcG9ydCB7TW9ja0FwaVNlcnZpY2V9IGZyb20gJy4vbW9jayc7XG5pbXBvcnQgJy4vbWF0Y2hlcnMnO1xuXG4vLyBTZXJ2aWNlIG1vZHVsZXMgdGhhdCBzaG91bGQgYmUgbG9hZGVkLlxuaW1wb3J0ICcuLi9jb3JlL3NoYXJlZF9zdG9yZS9pbmRleCc7XG5pbXBvcnQgJy4uL2NvcmUvY29tcG9uZW50cy9tYW5hZ2VyJztcblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREZXNjcmlwdG9yPFQ+IHtcbiAgICBlbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnk7XG4gICAgY3RybDogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZWRTdG9yZURlc2NyaXB0b3Ige1xuICAgIHN0b3JlSWQ6IHN0cmluZztcbiAgICBpbml0aWFsU3RhdGU/OiBhbnk7XG4gICAgZmFjdG9yeT86IFNoYXJlZFN0b3JlRmFjdG9yeTxhbnksIGFueT47XG59XG5cbi8qKlxuICogSGVscGVyIGZvciBjcmVhdGluZyBzaW1wbGUgc2hhcmVkIHN0b3JlcyBpbiB0ZXN0cy4gQWxzbyBzZWVcbiAqIFtbU2hhcmVkU3RvcmVQcm92aWRlci5jcmVhdGVdXS5cbiAqXG4gKiBAcGFyYW0gc3RvcmVJZCBJZGVudGlmaWVyIG9mIHRoZSBzaGFyZWQgc3RvcmUgKG11c3QgYmUgZ2xvYmFsbHkgdW5pcXVlKVxuICogQHBhcmFtIGluaXRpYWxTdGF0ZSBPcHRpb25hbCBpbml0aWFsIHN0YXRlIG9mIHRoZSBzaGFyZWQgc3RvcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNoYXJlZFN0b3JlKHN0b3JlSWQ6IHN0cmluZywgaW5pdGlhbFN0YXRlOiBhbnkgPSBudWxsKTogU2hhcmVkU3RvcmVEZXNjcmlwdG9yIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdG9yZUlkLFxuICAgICAgICBpbml0aWFsU3RhdGUsXG4gICAgfTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZm9yIHVzaW5nIHNoYXJlZCBzdG9yZXMgaW4gdGVzdHMuXG4gKlxuICogQHBhcmFtIHN0b3JlSWQgSWRlbnRpZmllciBvZiB0aGUgc2hhcmVkIHN0b3JlIChtdXN0IGJlIGdsb2JhbGx5IHVuaXF1ZSlcbiAqIEBwYXJhbSBmYWN0b3J5IFNoYXJlZCBzdG9yZSBjbGFzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU2hhcmVkU3RvcmUoc3RvcmVJZDogc3RyaW5nLCBmYWN0b3J5OiBTaGFyZWRTdG9yZUZhY3Rvcnk8YW55LCBhbnk+KTogU2hhcmVkU3RvcmVEZXNjcmlwdG9yIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdG9yZUlkLFxuICAgICAgICBmYWN0b3J5LFxuICAgIH07XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHdoZW4gdW5pdCB0ZXN0aW5nIGNvbXBvbmVudHMgd2hpY2ggY29tcGlsZXMgYSBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtICRjb21waWxlIENvbXBpbGUgc2VydmljZVxuICogQHBhcmFtICRzY29wZSBTY29wZSBzZXJ2aWNlXG4gKiBAcGFyYW0gdGVtcGxhdGUgdGVtcGxhdGUgaW4gdGhlIGZvcm0gb2YgYSBkaXJlY3RpdmUsIGUuZy4gYCc8Z2VuLXNvbWUtY29tcG9uZW50PjxnZW4tc29tZS1jb21wb25lbnQ+J2BcbiAqIEByZXR1cm5zIHtDb21wb25lbnREZXNjcmlwdG9yfSBFbGVtZW50IGFuZCBpdHMgY29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcG9uZW50PFQ+KCRjb21waWxlOiBhbmd1bGFyLklDb21waWxlU2VydmljZSwgJHNjb3BlOiBhbmd1bGFyLklTY29wZSwgdGVtcGxhdGU6IHN0cmluZyk6IENvbXBvbmVudERlc2NyaXB0b3I8VD4ge1xuXG4gICAgLy8gVE9ETzogaW5zdGVhZCBvZiBoYXZpbmcgZ2V0Q29tcG9uZW50PFQ+LCB3ZSBjb3VsZCBoYXZlIGdldENvbXBvbmVudDxUIGV4dGVuZHMgQ29tcG9uZW50QmFzZT4gYW5kIHRoZW4geW91IHdvdWxkIGRvXG4gICAgLy8gVC5hc1ZpZXcgdGh1cyByZWR1Y2luZyB0aGUgbmVlZCBmb3IgdGVtcGxhdGUgYXJndW1lbnQsIGJ1dCBsb29rcyBsaWtlIHR5cGVzY3JpcHQgZG9lcyBub3Qgc3VwcG9ydCB0aGF0ICh5ZXQpXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy81Njc3XG5cbiAgICBjb25zdCBlbGVtZW50ID0gJGNvbXBpbGUodGVtcGxhdGUpKCRzY29wZSk7XG4gICAgJHNjb3BlLiRkaWdlc3QoKTtcblxuICAgIGxldCBjdHJsOiBUO1xuICAgIHRyeSB7XG4gICAgICAgIGN0cmwgPSAkc2NvcGVbJyQkY2hpbGRUYWlsJ10uY3RybDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBHZW5FcnJvcihcIlVuYWJsZSB0byBmZXRjaCBjb21wb25lbnQgY29udHJvbGxlci4gRGlkIHlvdSBsb2FkIHlvdXIgbW9kdWxlIGluIHRlc3RzP1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICBjdHJsOiBjdHJsLFxuICAgIH07XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGV4cG9zZWQgdG8gdGVzdCBjYXNlIGZ1bmN0aW9ucywgd2hpY2ggYXJlIGNyZWF0ZWQgdXNpbmcgW1tkZXNjcmliZUNvbXBvbmVudF1dLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFRlc3RlciB7XG4gICAgLy8vIEFuZ3VsYXIgbW9kdWxlLCB3aGljaCBtYXkgYmUgdXNlZCB0byByZWdpc3RlciB0ZXN0IGNvbXBvbmVudHMgaW4uXG4gICAgbW9kdWxlOiBhbmd1bGFyLklNb2R1bGU7XG5cbiAgICAvKipcbiAgICAgKiBTZWUgW1tnZXRDb21wb25lbnRdXS5cbiAgICAgKi9cbiAgICBjcmVhdGVDb21wb25lbnQ8VD4odGVtcGxhdGU6IHN0cmluZyk6IENvbXBvbmVudERlc2NyaXB0b3I8VD47XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGFuIEFuZ3VsYXIgZGlnZXN0IGN5Y2xlLlxuICAgICAqL1xuICAgIGRpZ2VzdCgpOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbW9jayB2ZXJzaW9uIG9mIHRoZSBBUEksIHdoaWNoIG1heSBiZSB1c2VkIHRvIHNpbXVsYXRlIHRoZSBiYWNrZW5kXG4gICAgICogd2hlbiB0ZXN0aW5nIGNvbXBvbmVudHMuIFRoZSBtb2NrIEFQSSBpcyBhdXRvbWF0aWNhbGx5IGluamVjdGVkIGludG8gY29tcG9uZW50c1xuICAgICAqIGFuZCByZXBsYWNlcyB0aGUgdXN1YWwgQVBJLlxuICAgICAqL1xuICAgIGFwaSgpOiBSZXNvbHdlQXBpICYgTW9ja0Jhc2UgJiBNb2NrQXBpU2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNjb3BlLlxuICAgICAqL1xuICAgIHNjb3BlKCk6IGFuZ3VsYXIuSVNjb3BlO1xuXG4gICAgLyoqXG4gICAgICogRW5zdXJlcyB0aGF0IHRoZSB0ZXN0ZWQgY29tcG9uZW50cyBhcmUgaW5zZXJ0ZWQgaW50byBhbiBhY3R1YWwgRE9NLCBzbyB0aGluZ3NcbiAgICAgKiBsaWtlIGhlaWdodCBjYWxjdWxhdGlvbnMgd29yayBhcyBleHBlY3RlZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmVcbiAgICAgKiBhbnkgW1tjcmVhdGVDb21wb25lbnRdXSBjYWxscy5cbiAgICAgKi9cbiAgICBwcm92aWRlUmVhbERPTSgpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vY2tBcGlGYWN0b3J5IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKTogUmVzb2x3ZUFwaSAmIE1vY2tCYXNlO1xufVxuXG4vKipcbiAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGVhc2UgdGVzdGluZyBvZiBjb21wb25lbnRzLiBJdCB3aWxsIHRha2UgY2FyZSBvZiBtb2NraW5nIHRoZVxuICogdXN1YWwgbW9kdWxlcyBuZWVkZWQgZm9yIHRlc3RpbmcgY29tcG9uZW50cyBhbmQgcHJlcGFyaW5nIGEgbW9kdWxlIHRoYXQgeW91IGNhbiB1c2VcbiAqIHRvIHJlZ2lzdGVyIHRlc3QgY29tcG9uZW50cy5cbiAqXG4gKiBUaGUgdGVzdCBjYXNlIGlzIHBhc3NlZCBhbiBpbnN0YW5jZSBvZiBbW0NvbXBvbmVudFRlc3Rlcl1dLCB3aGljaCBjb250YWlucyBzb21lXG4gKiB1c2VmdWwgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBmb3IgdGVzdGluZyBjb21wb25lbnRzLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgbW9kdWxlcyBhcmUgYXV0b21hdGljYWxseSBsb2FkZWQ6XG4gKiAqIGByZXNvbHdlLnNlcnZpY2VzLnNoYXJlZF9zdG9yZWBcbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBsb2FkIGFueSBhZGRpdGlvbmFsIG1vZHVsZXMsIHNwZWNpZnkgdGhlbSBpbiB0aGUgYG1vZHVsZXNgXG4gKiBhcmd1bWVudC5cbiAqXG4gKiBAcGFyYW0gZGVzY3JpcHRpb24gVGVzdCBjYXNlIGRlc2NyaXB0aW9uXG4gKiBAcGFyYW0gbW9kdWxlcyBMaXN0IG9mIG1vZHVsZXMgdG8gbG9hZCBmb3IgdGhpcyB0ZXN0XG4gKiBAcGFyYW0gdGVzdHMgVGVzdCBjYXNlIGJvZHlcbiAqIEBwYXJhbSBhcGlDbGFzcyBPcHRpb25hbCBtb2NrIEFQSSBjbGFzcyB0aGF0IHNob3VsZCBiZSB1c2VkXG4gKiBAcGFyYW0gYmFzZU1vZHVsZXMgT3B0aW9uYWwgbGlzdCBvZiBtb2R1bGVzIHRvIGxvYWQgYmVmb3JlIGV2ZXJ5dGhpbmcgZm9yIHRoaXMgdGVzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVDb21wb25lbnQoZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzOiBhbnlbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0czogKHRlc3RlcjogQ29tcG9uZW50VGVzdGVyKSA9PiB2b2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaUNsYXNzOiBNb2NrQXBpRmFjdG9yeSA9IE1vY2tBcGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZU1vZHVsZXM6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcbiAgICBkZXNjcmliZShkZXNjcmlwdGlvbiwgKCkgPT4ge1xuICAgICAgICBsZXQgJGNvbXBpbGU6IGFuZ3VsYXIuSUNvbXBpbGVTZXJ2aWNlO1xuICAgICAgICBsZXQgJHNjb3BlOiBhbmd1bGFyLklTY29wZTtcbiAgICAgICAgbGV0IG1vY2tBcGk6IFJlc29sd2VBcGkgJiBNb2NrQmFzZSAmIE1vY2tBcGlTZXJ2aWNlO1xuXG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWUgPSAncmVzb2x3ZS50ZXN0cy4nICsgZGVzY3JpcHRpb24ucmVwbGFjZSgvIC9nLCAnLicpO1xuICAgICAgICBjb25zdCBtb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKG1vZHVsZU5hbWUsIFtdKTtcblxuICAgICAgICAvLyBMb2FkIGJhc2UgbW9kdWxlcy5cbiAgICAgICAgYmVmb3JlRWFjaChhbmd1bGFyLm1vY2subW9kdWxlKCdyZXNvbHdlLnNlcnZpY2VzLnNoYXJlZF9zdG9yZScpKTtcbiAgICAgICAgYmVmb3JlRWFjaChhbmd1bGFyLm1vY2subW9kdWxlKCdyZXNvbHdlLnNlcnZpY2VzLnN0YXRlX21hbmFnZXInKSk7XG4gICAgICAgIGJhc2VNb2R1bGVzLmZvckVhY2goKGJhc2VNb2R1bGUpID0+IGJlZm9yZUVhY2goYW5ndWxhci5tb2NrLm1vZHVsZShiYXNlTW9kdWxlKSkpO1xuXG4gICAgICAgIGJlZm9yZUVhY2goYW5ndWxhci5tb2NrLm1vZHVsZSgoJHByb3ZpZGU6IGFuZ3VsYXIuYXV0by5JUHJvdmlkZVNlcnZpY2UpID0+IHtcbiAgICAgICAgICAgIC8vIEV4cGxpY2l0bHkgc2V0IHJvb3QgZWxlbWVudCBiZWNhdXNlIHRlc3RzIGRvIG5vdCBnbyB0aHJvdWdoIHVzdWFsXG4gICAgICAgICAgICAvLyBBbmd1bGFyIGJvb3RzdHJhcHBpbmcuXG4gICAgICAgICAgICAkcHJvdmlkZS52YWx1ZSgnJHJvb3RFbGVtZW50JywgYW5ndWxhci5lbGVtZW50KGRvY3VtZW50LmJvZHkpKTtcblxuICAgICAgICAgICAgLy8gUmVwbGFjZSB1c3VhbCBBUEkgc2VydmljZSB3aXRoIG1vY2sgQVBJLlxuICAgICAgICAgICAgJHByb3ZpZGUuc2VydmljZSgnYXBpJywgY29tcG9zZShbYXBpQ2xhc3MsIE1vY2tBcGlTZXJ2aWNlXSkpO1xuICAgICAgICB9KSk7XG4gICAgICAgIGJlZm9yZUVhY2goYW5ndWxhci5tb2NrLm1vZHVsZShtb2R1bGVOYW1lKSk7XG5cbiAgICAgICAgLy8gUmVnaXN0ZXIgYW55IHNoYXJlZCBzdG9yZXMuXG4gICAgICAgIGxldCBzaGFyZWRTdG9yZXMgPSBfLmZpbHRlcihtb2R1bGVzLCAobSkgPT4gbS5zdG9yZUlkKTtcbiAgICAgICAgbW9kdWxlcyA9IF8uZmlsdGVyKG1vZHVsZXMsIChtKSA9PiAhbS5zdG9yZUlkKTtcblxuICAgICAgICBtb2R1bGUuY29uZmlnKChzaGFyZWRTdG9yZU1hbmFnZXJQcm92aWRlcjogU2hhcmVkU3RvcmVQcm92aWRlcikgPT4ge1xuICAgICAgICAgICAgc2hhcmVkU3RvcmVzLmZvckVhY2goKGRlc2NyaXB0b3I6IFNoYXJlZFN0b3JlRGVzY3JpcHRvcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVkU3RvcmVNYW5hZ2VyUHJvdmlkZXIucmVnaXN0ZXIoZGVzY3JpcHRvci5zdG9yZUlkLCBkZXNjcmlwdG9yLmZhY3RvcnkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYXJlZFN0b3JlTWFuYWdlclByb3ZpZGVyLmNyZWF0ZShkZXNjcmlwdG9yLnN0b3JlSWQsIGRlc2NyaXB0b3IuaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBhZGRpdGlvbmFsTW9kdWxlTmFtZSBvZiBtb2R1bGVzKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKGFuZ3VsYXIubW9jay5tb2R1bGUoYWRkaXRpb25hbE1vZHVsZU5hbWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEEgY29udGFpbmVyIGluIERPTSB3aGVyZSB3ZSBjYW4gdGVtcG9yYXJpbHkgYXBwZW5kIGNvbXBvbmVudCBlbGVtZW50cy5cbiAgICAgICAgbGV0IGNvbnRhaW5lckVsZW1lbnQgPSBudWxsO1xuXG4gICAgICAgIGZ1bmN0aW9uIHByb3ZpZGVSZWFsRE9NKCk6IHZvaWQge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQgPSBhbmd1bGFyLmVsZW1lbnQoJzxkaXYgaWQ9XCJ0ZXN0LWNvbnRhaW5lci1lbGVtZW50XCI+PC9kaXY+Jyk7XG4gICAgICAgICAgICBib2R5LnJlbW92ZSgnI3Rlc3QtY29udGFpbmVyLWVsZW1lbnQnKTtcbiAgICAgICAgICAgIGJvZHkuYXBwZW5kKGNvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBqYXNtaW5lLmFkZE1hdGNoZXJzKG5nRXF1YWxNYXRjaGVyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYmVmb3JlRWFjaChhbmd1bGFyLm1vY2suaW5qZWN0KChfJGNvbXBpbGVfLCBfJHJvb3RTY29wZV8sIF9hcGlfKSA9PiB7XG4gICAgICAgICAgICAkY29tcGlsZSA9IF8kY29tcGlsZV87XG4gICAgICAgICAgICAkc2NvcGUgPSBfJHJvb3RTY29wZV8uJG5ldygpO1xuICAgICAgICAgICAgbW9ja0FwaSA9IF9hcGlfO1xuXG4gICAgICAgICAgICAvLyBAaWZuZGVmIEdFTkpTX1BST0RVQ1RJT05cbiAgICAgICAgICAgICAgICBpZiAoXy5jb250YWlucyh0ZXN0cy50b1N0cmluZygpLCAnZGVidWdnZXInKSB8fCBfLmNvbnRhaW5zKHRlc3RzLnRvU3RyaW5nKCksICcgZml0KCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVSZWFsRE9NKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQGVuZGlmXG4gICAgICAgIH0pKTtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgJHNjb3BlLiRkZXN0cm95KCk7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyRWxlbWVudCkgY29udGFpbmVyRWxlbWVudC5lbXB0eSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0cyh7XG4gICAgICAgICAgICBtb2R1bGU6IG1vZHVsZSxcblxuICAgICAgICAgICAgY3JlYXRlQ29tcG9uZW50OiBmdW5jdGlvbjxUPih0ZW1wbGF0ZTogc3RyaW5nKTogQ29tcG9uZW50RGVzY3JpcHRvcjxUPiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZ2V0Q29tcG9uZW50PFQ+KCRjb21waWxlLCAkc2NvcGUsIHRlbXBsYXRlKTtcblxuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCBjb21wb25lbnQgZWxlbWVudCB0byBhY3R1YWwgRE9NLiBPdGhlcndpc2UsIGNvbXB1dGF0aW9ucyBsaWtlIGhlaWdodCB3aWxsIG5vdCB3b3JrLlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZChjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICRzY29wZS4kZGlnZXN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGRpZ2VzdDogZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgICAgICAgICAgICAgJHNjb3BlLiRkaWdlc3QoKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGFwaTogZnVuY3Rpb24oKTogUmVzb2x3ZUFwaSAmIE1vY2tCYXNlICYgTW9ja0FwaVNlcnZpY2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2NrQXBpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc2NvcGU6IGZ1bmN0aW9uKCk6IGFuZ3VsYXIuSVNjb3BlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJHNjb3BlO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgcHJvdmlkZVJlYWxET006IHByb3ZpZGVSZWFsRE9NLFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFDO1lBRUQsTUFBTSxFQUFFO2dCQUNKLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQixDQUFDO1lBRUQsR0FBRyxFQUFFO2dCQUNELE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDbkIsQ0FBQztZQUVELEtBQUssRUFBRTtnQkFDSCxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ2xCLENBQUM7WUFFRCxjQUFjLEVBQUUsY0FBYztTQUNqQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUE1R0QsOENBNEdDIiwiZmlsZSI6InRlc3RzL2NvbXBvbmVudC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIGFuZ3VsYXIgZnJvbSAnYW5ndWxhcic7XG5pbXBvcnQgJ2FuZ3VsYXItbW9ja3MnO1xuXG5pbXBvcnQge1Jlc29sd2VBcGl9IGZyb20gJy4uL2FwaS9pbmRleCc7XG5pbXBvcnQge01vY2tCYXNlLCBNb2NrQXBpfSBmcm9tICcuLi9hcGkvbW9jayc7XG5pbXBvcnQge25nRXF1YWxNYXRjaGVyfSBmcm9tICcuL21hdGNoZXJzJztcbmltcG9ydCB7U2hhcmVkU3RvcmVGYWN0b3J5LCBTaGFyZWRTdG9yZVByb3ZpZGVyfSBmcm9tICcuLi9jb3JlL3NoYXJlZF9zdG9yZS9pbmRleCc7XG5pbXBvcnQge0dlbkVycm9yfSBmcm9tICcuLi9jb3JlL2Vycm9ycy9lcnJvcic7XG5pbXBvcnQge2NvbXBvc2V9IGZyb20gJy4uL2NvcmUvdXRpbHMvbGFuZyc7XG5pbXBvcnQge01vY2tBcGlTZXJ2aWNlfSBmcm9tICcuL21vY2snO1xuaW1wb3J0ICcuL21hdGNoZXJzJztcblxuLy8gU2VydmljZSBtb2R1bGVzIHRoYXQgc2hvdWxkIGJlIGxvYWRlZC5cbmltcG9ydCAnLi4vY29yZS9zaGFyZWRfc3RvcmUvaW5kZXgnO1xuaW1wb3J0ICcuLi9jb3JlL2NvbXBvbmVudHMvbWFuYWdlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RGVzY3JpcHRvcjxUPiB7XG4gICAgZWxlbWVudDogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5O1xuICAgIGN0cmw6IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVkU3RvcmVEZXNjcmlwdG9yIHtcbiAgICBzdG9yZUlkOiBzdHJpbmc7XG4gICAgaW5pdGlhbFN0YXRlPzogYW55O1xuICAgIGZhY3Rvcnk/OiBTaGFyZWRTdG9yZUZhY3Rvcnk8YW55LCBhbnk+O1xufVxuXG4vKipcbiAqIEhlbHBlciBmb3IgY3JlYXRpbmcgc2ltcGxlIHNoYXJlZCBzdG9yZXMgaW4gdGVzdHMuIEFsc28gc2VlXG4gKiBbW1NoYXJlZFN0b3JlUHJvdmlkZXIuY3JlYXRlXV0uXG4gKlxuICogQHBhcmFtIHN0b3JlSWQgSWRlbnRpZmllciBvZiB0aGUgc2hhcmVkIHN0b3JlIChtdXN0IGJlIGdsb2JhbGx5IHVuaXF1ZSlcbiAqIEBwYXJhbSBpbml0aWFsU3RhdGUgT3B0aW9uYWwgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgc2hhcmVkIHN0b3JlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaGFyZWRTdG9yZShzdG9yZUlkOiBzdHJpbmcsIGluaXRpYWxTdGF0ZTogYW55ID0gbnVsbCk6IFNoYXJlZFN0b3JlRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RvcmVJZCxcbiAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgIH07XG59XG5cbi8qKlxuICogSGVscGVyIGZvciB1c2luZyBzaGFyZWQgc3RvcmVzIGluIHRlc3RzLlxuICpcbiAqIEBwYXJhbSBzdG9yZUlkIElkZW50aWZpZXIgb2YgdGhlIHNoYXJlZCBzdG9yZSAobXVzdCBiZSBnbG9iYWxseSB1bmlxdWUpXG4gKiBAcGFyYW0gZmFjdG9yeSBTaGFyZWQgc3RvcmUgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNoYXJlZFN0b3JlKHN0b3JlSWQ6IHN0cmluZywgZmFjdG9yeTogU2hhcmVkU3RvcmVGYWN0b3J5PGFueSwgYW55Pik6IFNoYXJlZFN0b3JlRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RvcmVJZCxcbiAgICAgICAgZmFjdG9yeSxcbiAgICB9O1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB3aGVuIHVuaXQgdGVzdGluZyBjb21wb25lbnRzIHdoaWNoIGNvbXBpbGVzIGEgY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSAkY29tcGlsZSBDb21waWxlIHNlcnZpY2VcbiAqIEBwYXJhbSAkc2NvcGUgU2NvcGUgc2VydmljZVxuICogQHBhcmFtIHRlbXBsYXRlIHRlbXBsYXRlIGluIHRoZSBmb3JtIG9mIGEgZGlyZWN0aXZlLCBlLmcuIGAnPGdlbi1zb21lLWNvbXBvbmVudD48Z2VuLXNvbWUtY29tcG9uZW50PidgXG4gKiBAcmV0dXJucyB7Q29tcG9uZW50RGVzY3JpcHRvcn0gRWxlbWVudCBhbmQgaXRzIGNvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXBvbmVudDxUPigkY29tcGlsZTogYW5ndWxhci5JQ29tcGlsZVNlcnZpY2UsICRzY29wZTogYW5ndWxhci5JU2NvcGUsIHRlbXBsYXRlOiBzdHJpbmcpOiBDb21wb25lbnREZXNjcmlwdG9yPFQ+IHtcblxuICAgIC8vIFRPRE86IGluc3RlYWQgb2YgaGF2aW5nIGdldENvbXBvbmVudDxUPiwgd2UgY291bGQgaGF2ZSBnZXRDb21wb25lbnQ8VCBleHRlbmRzIENvbXBvbmVudEJhc2U+IGFuZCB0aGVuIHlvdSB3b3VsZCBkb1xuICAgIC8vIFQuYXNWaWV3IHRodXMgcmVkdWNpbmcgdGhlIG5lZWQgZm9yIHRlbXBsYXRlIGFyZ3VtZW50LCBidXQgbG9va3MgbGlrZSB0eXBlc2NyaXB0IGRvZXMgbm90IHN1cHBvcnQgdGhhdCAoeWV0KVxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvNTY3N1xuXG4gICAgY29uc3QgZWxlbWVudCA9ICRjb21waWxlKHRlbXBsYXRlKSgkc2NvcGUpO1xuICAgICRzY29wZS4kZGlnZXN0KCk7XG5cbiAgICBsZXQgY3RybDogVDtcbiAgICB0cnkge1xuICAgICAgICBjdHJsID0gJHNjb3BlWyckJGNoaWxkVGFpbCddLmN0cmw7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgR2VuRXJyb3IoXCJVbmFibGUgdG8gZmV0Y2ggY29tcG9uZW50IGNvbnRyb2xsZXIuIERpZCB5b3UgbG9hZCB5b3VyIG1vZHVsZSBpbiB0ZXN0cz9cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgY3RybDogY3RybCxcbiAgICB9O1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBleHBvc2VkIHRvIHRlc3QgY2FzZSBmdW5jdGlvbnMsIHdoaWNoIGFyZSBjcmVhdGVkIHVzaW5nIFtbZGVzY3JpYmVDb21wb25lbnRdXS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRUZXN0ZXIge1xuICAgIC8vLyBBbmd1bGFyIG1vZHVsZSwgd2hpY2ggbWF5IGJlIHVzZWQgdG8gcmVnaXN0ZXIgdGVzdCBjb21wb25lbnRzIGluLlxuICAgIG1vZHVsZTogYW5ndWxhci5JTW9kdWxlO1xuXG4gICAgLyoqXG4gICAgICogU2VlIFtbZ2V0Q29tcG9uZW50XV0uXG4gICAgICovXG4gICAgY3JlYXRlQ29tcG9uZW50PFQ+KHRlbXBsYXRlOiBzdHJpbmcpOiBDb21wb25lbnREZXNjcmlwdG9yPFQ+O1xuXG4gICAgLyoqXG4gICAgICogUnVucyBhbiBBbmd1bGFyIGRpZ2VzdCBjeWNsZS5cbiAgICAgKi9cbiAgICBkaWdlc3QoKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1vY2sgdmVyc2lvbiBvZiB0aGUgQVBJLCB3aGljaCBtYXkgYmUgdXNlZCB0byBzaW11bGF0ZSB0aGUgYmFja2VuZFxuICAgICAqIHdoZW4gdGVzdGluZyBjb21wb25lbnRzLiBUaGUgbW9jayBBUEkgaXMgYXV0b21hdGljYWxseSBpbmplY3RlZCBpbnRvIGNvbXBvbmVudHNcbiAgICAgKiBhbmQgcmVwbGFjZXMgdGhlIHVzdWFsIEFQSS5cbiAgICAgKi9cbiAgICBhcGkoKTogUmVzb2x3ZUFwaSAmIE1vY2tCYXNlICYgTW9ja0FwaVNlcnZpY2U7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzY29wZS5cbiAgICAgKi9cbiAgICBzY29wZSgpOiBhbmd1bGFyLklTY29wZTtcblxuICAgIC8qKlxuICAgICAqIEVuc3VyZXMgdGhhdCB0aGUgdGVzdGVkIGNvbXBvbmVudHMgYXJlIGluc2VydGVkIGludG8gYW4gYWN0dWFsIERPTSwgc28gdGhpbmdzXG4gICAgICogbGlrZSBoZWlnaHQgY2FsY3VsYXRpb25zIHdvcmsgYXMgZXhwZWN0ZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlXG4gICAgICogYW55IFtbY3JlYXRlQ29tcG9uZW50XV0gY2FsbHMuXG4gICAgICovXG4gICAgcHJvdmlkZVJlYWxET00oKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2NrQXBpRmFjdG9yeSB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFJlc29sd2VBcGkgJiBNb2NrQmFzZTtcbn1cblxuLyoqXG4gKiBBIGhlbHBlciBmdW5jdGlvbiB0byBlYXNlIHRlc3Rpbmcgb2YgY29tcG9uZW50cy4gSXQgd2lsbCB0YWtlIGNhcmUgb2YgbW9ja2luZyB0aGVcbiAqIHVzdWFsIG1vZHVsZXMgbmVlZGVkIGZvciB0ZXN0aW5nIGNvbXBvbmVudHMgYW5kIHByZXBhcmluZyBhIG1vZHVsZSB0aGF0IHlvdSBjYW4gdXNlXG4gKiB0byByZWdpc3RlciB0ZXN0IGNvbXBvbmVudHMuXG4gKlxuICogVGhlIHRlc3QgY2FzZSBpcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgW1tDb21wb25lbnRUZXN0ZXJdXSwgd2hpY2ggY29udGFpbnMgc29tZVxuICogdXNlZnVsIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgZm9yIHRlc3RpbmcgY29tcG9uZW50cy5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIGF1dG9tYXRpY2FsbHkgbG9hZGVkOlxuICogKiBgcmVzb2x3ZS5zZXJ2aWNlcy5zaGFyZWRfc3RvcmVgXG4gKlxuICogSWYgeW91IG5lZWQgdG8gbG9hZCBhbnkgYWRkaXRpb25hbCBtb2R1bGVzLCBzcGVjaWZ5IHRoZW0gaW4gdGhlIGBtb2R1bGVzYFxuICogYXJndW1lbnQuXG4gKlxuICogQHBhcmFtIGRlc2NyaXB0aW9uIFRlc3QgY2FzZSBkZXNjcmlwdGlvblxuICogQHBhcmFtIG1vZHVsZXMgTGlzdCBvZiBtb2R1bGVzIHRvIGxvYWQgZm9yIHRoaXMgdGVzdFxuICogQHBhcmFtIHRlc3RzIFRlc3QgY2FzZSBib2R5XG4gKiBAcGFyYW0gYXBpQ2xhc3MgT3B0aW9uYWwgbW9jayBBUEkgY2xhc3MgdGhhdCBzaG91bGQgYmUgdXNlZFxuICogQHBhcmFtIGJhc2VNb2R1bGVzIE9wdGlvbmFsIGxpc3Qgb2YgbW9kdWxlcyB0byBsb2FkIGJlZm9yZSBldmVyeXRoaW5nIGZvciB0aGlzIHRlc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlQ29tcG9uZW50KGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlczogYW55W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHM6ICh0ZXN0ZXI6IENvbXBvbmVudFRlc3RlcikgPT4gdm9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlDbGFzczogTW9ja0FwaUZhY3RvcnkgPSBNb2NrQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VNb2R1bGVzOiBzdHJpbmdbXSA9IFtdKTogdm9pZCB7XG4gICAgZGVzY3JpYmUoZGVzY3JpcHRpb24sICgpID0+IHtcbiAgICAgICAgbGV0ICRjb21waWxlOiBhbmd1bGFyLklDb21waWxlU2VydmljZTtcbiAgICAgICAgbGV0ICRzY29wZTogYW5ndWxhci5JU2NvcGU7XG4gICAgICAgIGxldCBtb2NrQXBpOiBSZXNvbHdlQXBpICYgTW9ja0Jhc2UgJiBNb2NrQXBpU2VydmljZTtcblxuICAgICAgICBjb25zdCBtb2R1bGVOYW1lID0gJ3Jlc29sd2UudGVzdHMuJyArIGRlc2NyaXB0aW9uLnJlcGxhY2UoLyAvZywgJy4nKTtcbiAgICAgICAgY29uc3QgbW9kdWxlOiBhbmd1bGFyLklNb2R1bGUgPSBhbmd1bGFyLm1vZHVsZShtb2R1bGVOYW1lLCBbXSk7XG5cbiAgICAgICAgLy8gTG9hZCBiYXNlIG1vZHVsZXMuXG4gICAgICAgIGJlZm9yZUVhY2goYW5ndWxhci5tb2NrLm1vZHVsZSgncmVzb2x3ZS5zZXJ2aWNlcy5zaGFyZWRfc3RvcmUnKSk7XG4gICAgICAgIGJlZm9yZUVhY2goYW5ndWxhci5tb2NrLm1vZHVsZSgncmVzb2x3ZS5zZXJ2aWNlcy5zdGF0ZV9tYW5hZ2VyJykpO1xuICAgICAgICBiYXNlTW9kdWxlcy5mb3JFYWNoKChiYXNlTW9kdWxlKSA9PiBiZWZvcmVFYWNoKGFuZ3VsYXIubW9jay5tb2R1bGUoYmFzZU1vZHVsZSkpKTtcblxuICAgICAgICBiZWZvcmVFYWNoKGFuZ3VsYXIubW9jay5tb2R1bGUoKCRwcm92aWRlOiBhbmd1bGFyLmF1dG8uSVByb3ZpZGVTZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgICAvLyBFeHBsaWNpdGx5IHNldCByb290IGVsZW1lbnQgYmVjYXVzZSB0ZXN0cyBkbyBub3QgZ28gdGhyb3VnaCB1c3VhbFxuICAgICAgICAgICAgLy8gQW5ndWxhciBib290c3RyYXBwaW5nLlxuICAgICAgICAgICAgJHByb3ZpZGUudmFsdWUoJyRyb290RWxlbWVudCcsIGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5ib2R5KSk7XG5cbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdXN1YWwgQVBJIHNlcnZpY2Ugd2l0aCBtb2NrIEFQSS5cbiAgICAgICAgICAgICRwcm92aWRlLnNlcnZpY2UoJ2FwaScsIGNvbXBvc2UoW2FwaUNsYXNzLCBNb2NrQXBpU2VydmljZV0pKTtcbiAgICAgICAgfSkpO1xuICAgICAgICBiZWZvcmVFYWNoKGFuZ3VsYXIubW9jay5tb2R1bGUobW9kdWxlTmFtZSkpO1xuXG4gICAgICAgIC8vIFJlZ2lzdGVyIGFueSBzaGFyZWQgc3RvcmVzLlxuICAgICAgICBjb25zdCBbc2hhcmVkU3RvcmVzLCBhZGRpdGlvbmFsTW9kdWxlc10gPSBfLnBhcnRpdGlvbihtb2R1bGVzLCAobSkgPT4gISFtLnN0b3JlSWQpO1xuXG4gICAgICAgIG1vZHVsZS5jb25maWcoKHNoYXJlZFN0b3JlTWFuYWdlclByb3ZpZGVyOiBTaGFyZWRTdG9yZVByb3ZpZGVyKSA9PiB7XG4gICAgICAgICAgICBfLmVhY2goc2hhcmVkU3RvcmVzLCAoZGVzY3JpcHRvcjogU2hhcmVkU3RvcmVEZXNjcmlwdG9yKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZmFjdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICBzaGFyZWRTdG9yZU1hbmFnZXJQcm92aWRlci5yZWdpc3RlcihkZXNjcmlwdG9yLnN0b3JlSWQsIGRlc2NyaXB0b3IuZmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVkU3RvcmVNYW5hZ2VyUHJvdmlkZXIuY3JlYXRlKGRlc2NyaXB0b3Iuc3RvcmVJZCwgZGVzY3JpcHRvci5pbml0aWFsU3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBfLmVhY2goYWRkaXRpb25hbE1vZHVsZXMsIChhZGRpdGlvbmFsTW9kdWxlKSA9PiB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKGFuZ3VsYXIubW9jay5tb2R1bGUoYWRkaXRpb25hbE1vZHVsZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBIGNvbnRhaW5lciBpbiBET00gd2hlcmUgd2UgY2FuIHRlbXBvcmFyaWx5IGFwcGVuZCBjb21wb25lbnQgZWxlbWVudHMuXG4gICAgICAgIGxldCBjb250YWluZXJFbGVtZW50OiBhbmd1bGFyLklBdWdtZW50ZWRKUXVlcnkgPSBudWxsO1xuXG4gICAgICAgIGZ1bmN0aW9uIHByb3ZpZGVSZWFsRE9NKCk6IHZvaWQge1xuICAgICAgICAgICAgcmVtb3ZlUmVhbERPTSgpO1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQgPSBhbmd1bGFyLmVsZW1lbnQoJzxkaXYgaWQ9XCJ0ZXN0LWNvbnRhaW5lci1lbGVtZW50XCI+PC9kaXY+Jyk7XG4gICAgICAgICAgICBib2R5LmFwcGVuZChjb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZVJlYWxET00oKTogdm9pZCB7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGphc21pbmUuYWRkTWF0Y2hlcnMobmdFcXVhbE1hdGNoZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBiZWZvcmVFYWNoKGFuZ3VsYXIubW9jay5pbmplY3QoKF8kY29tcGlsZV8sIF8kcm9vdFNjb3BlXywgX2FwaV8pID0+IHtcbiAgICAgICAgICAgICRjb21waWxlID0gXyRjb21waWxlXztcbiAgICAgICAgICAgICRzY29wZSA9IF8kcm9vdFNjb3BlXy4kbmV3KCk7XG4gICAgICAgICAgICBtb2NrQXBpID0gX2FwaV87XG5cbiAgICAgICAgICAgIC8vIEBpZm5kZWYgR0VOSlNfUFJPRFVDVElPTlxuICAgICAgICAgICAgICAgIGlmIChfLmNvbnRhaW5zKHRlc3RzLnRvU3RyaW5nKCksICdkZWJ1Z2dlcicpIHx8IF8uY29udGFpbnModGVzdHMudG9TdHJpbmcoKSwgJyBmaXQoJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZVJlYWxET00oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBAZW5kaWZcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcbiAgICAgICAgICAgIHJlbW92ZVJlYWxET00oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdHMoe1xuICAgICAgICAgICAgbW9kdWxlOiBtb2R1bGUsXG5cbiAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudDogZnVuY3Rpb248VD4odGVtcGxhdGU6IHN0cmluZyk6IENvbXBvbmVudERlc2NyaXB0b3I8VD4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGdldENvbXBvbmVudDxUPigkY29tcGlsZSwgJHNjb3BlLCB0ZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgY29tcG9uZW50IGVsZW1lbnQgdG8gYWN0dWFsIERPTS4gT3RoZXJ3aXNlLCBjb21wdXRhdGlvbnMgbGlrZSBoZWlnaHQgd2lsbCBub3Qgd29yay5cbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmQoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGRpZ2VzdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBkaWdlc3Q6IGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgICAgICRzY29wZS4kZGlnZXN0KCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhcGk6IGZ1bmN0aW9uKCk6IFJlc29sd2VBcGkgJiBNb2NrQmFzZSAmIE1vY2tBcGlTZXJ2aWNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9ja0FwaTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHNjb3BlOiBmdW5jdGlvbigpOiBhbmd1bGFyLklTY29wZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICRzY29wZTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHByb3ZpZGVSZWFsRE9NOiBwcm92aWRlUmVhbERPTSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iXX0=

@@ -1,4 +0,2 @@

/// <reference types="angular" />
/// <reference types="ng-file-upload" />
import * as angular from 'angular';
import { UploadEvent } from 'resolwe/core/services/api';
import 'ng-file-upload';

@@ -13,3 +11,3 @@ /**

export interface MockUploadHandler<T> {
(data: any, fileUID: string): angular.IHttpPromiseCallbackArg<T>;
(data: any, fileUID: string): T;
}

@@ -24,3 +22,3 @@ /**

*/
upload<T>(data: any, fileUID?: string): angular.angularFileUpload.IUploadPromise<T>;
upload<T>(data: any, fileUID?: string): Rx.Observable<UploadEvent<T>>;
/**

@@ -27,0 +25,0 @@ * Registers a mock upload request handler.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var api_1 = require("resolwe/core/services/api");
require("ng-file-upload");

@@ -10,3 +11,3 @@ /**

// Mock upload handler.
this._uploadHandler = function () { return { data: null }; };
this._uploadHandler = function () { return ({ data: null }); };
}

@@ -19,9 +20,12 @@ /**

if (fileUID === void 0) { fileUID = ''; }
// TODO: Augment the promise to enable upload-specific functions (or make them noops).
return new Promise(function (resolve, reject) {
return Rx.Observable.create(function (observer) {
try {
resolve(_this._uploadHandler(data, fileUID));
observer.onNext({
result: _this._uploadHandler(data, fileUID),
type: api_1.UploadEventType.RESULT,
});
observer.onCompleted();
}
catch (error) {
reject(error);
observer.onError(error);
}

@@ -42,2 +46,2 @@ });

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90ZXN0cy9tb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsMEJBQXdCO0FBY3hCOztHQUVHO0FBQ0g7SUFBQTtRQUNJLHVCQUF1QjtRQUNmLG1CQUFjLEdBQTJCLGNBQVEsTUFBTSxDQUFpQyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQTBCbkgsQ0FBQztJQXhCRzs7T0FFRztJQUNJLCtCQUFNLEdBQWIsVUFBaUIsSUFBUyxFQUFFLE9BQW9CO1FBQWhELGlCQVdDO1FBWDJCLHdCQUFBLEVBQUEsWUFBb0I7UUFDNUMsc0ZBQXNGO1FBQ3RGLE1BQU0sQ0FBK0MsSUFBSSxPQUFPLENBQzVELFVBQUMsT0FBTyxFQUFFLE1BQU07WUFDWixJQUFJLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLEtBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xCLENBQUM7UUFDTCxDQUFDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksbUNBQVUsR0FBakIsVUFBcUIsT0FBNkI7UUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7SUFDbEMsQ0FBQztJQUNMLHFCQUFDO0FBQUQsQ0E1QkEsQUE0QkMsSUFBQTtBQTVCWSx3Q0FBYyIsImZpbGUiOiJ0ZXN0cy9tb2NrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYW5ndWxhciBmcm9tICdhbmd1bGFyJztcbmltcG9ydCAnbmctZmlsZS11cGxvYWQnO1xuXG5cbi8qKlxuICogTW9jayB1cGxvYWQgaGFuZGxlciBmdW5jdGlvbi4gSXQgcmVjZWl2ZXMgYW55IHF1ZXJ5IGFyZ3VtZW50cyBhbmQgZGF0YSB0aGF0XG4gKiB3YXMgdXNlZCB0byBtYWtlIHRoZSByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSBkYXRhIFJlcXVlc3QgZGF0YVxuICogQHBhcmFtIGZpbGVVSUQgVW5pcXVlIGZpbGUgaWRlbnRpZmllclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vY2tVcGxvYWRIYW5kbGVyPFQ+IHtcbiAgICAoZGF0YTogYW55LCBmaWxlVUlEOiBzdHJpbmcpOiBhbmd1bGFyLklIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+O1xufVxuXG4vKipcbiAqIE1vY2sgQVBJIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2NrQXBpU2VydmljZSB7XG4gICAgLy8gTW9jayB1cGxvYWQgaGFuZGxlci5cbiAgICBwcml2YXRlIF91cGxvYWRIYW5kbGVyOiBNb2NrVXBsb2FkSGFuZGxlcjxhbnk+ID0gKCkgPT4geyByZXR1cm4gPGFuZ3VsYXIuSUh0dHBSZXNwb25zZTxzdHJpbmc+PiB7ZGF0YTogbnVsbH07IH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgbW9jayBkYXRhIHVwbG9hZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBsb2FkPFQ+KGRhdGE6IGFueSwgZmlsZVVJRDogc3RyaW5nID0gJycpOiBhbmd1bGFyLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRQcm9taXNlPFQ+IHtcbiAgICAgICAgLy8gVE9ETzogQXVnbWVudCB0aGUgcHJvbWlzZSB0byBlbmFibGUgdXBsb2FkLXNwZWNpZmljIGZ1bmN0aW9ucyAob3IgbWFrZSB0aGVtIG5vb3BzKS5cbiAgICAgICAgcmV0dXJuIDxhbmd1bGFyLmFuZ3VsYXJGaWxlVXBsb2FkLklVcGxvYWRQcm9taXNlPFQ+PiBuZXcgUHJvbWlzZTxhbmd1bGFyLklIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFQ+PihcbiAgICAgICAgICAgIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuX3VwbG9hZEhhbmRsZXIoZGF0YSwgZmlsZVVJRCkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVycyBhIG1vY2sgdXBsb2FkIHJlcXVlc3QgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIFVwbG9hZCBoYW5kbGVyXG4gICAgICovXG4gICAgcHVibGljIHdoZW5VcGxvYWQ8VD4oaGFuZGxlcjogTW9ja1VwbG9hZEhhbmRsZXI8VD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXBsb2FkSGFuZGxlciA9IGhhbmRsZXI7XG4gICAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90ZXN0cy9tb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaURBQXVFO0FBQ3ZFLDBCQUF3QjtBQWN4Qjs7R0FFRztBQUNIO0lBQUE7UUFDSSx1QkFBdUI7UUFDZixtQkFBYyxHQUEyQixjQUFNLE9BQUEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFoQixDQUFnQixDQUFDO0lBMkI1RSxDQUFDO0lBekJHOztPQUVHO0lBQ0ksK0JBQU0sR0FBYixVQUFpQixJQUFTLEVBQUUsT0FBb0I7UUFBaEQsaUJBWUM7UUFaMkIsd0JBQUEsRUFBQSxZQUFvQjtRQUM1QyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQWlCLFVBQUMsUUFBUTtZQUNqRCxJQUFJLENBQUM7Z0JBQ0QsUUFBUSxDQUFDLE1BQU0sQ0FBQztvQkFDWixNQUFNLEVBQUUsS0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO29CQUMxQyxJQUFJLEVBQUUscUJBQWUsQ0FBQyxNQUFNO2lCQUMvQixDQUFDLENBQUM7Z0JBQ0gsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNCLENBQUM7WUFBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNiLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxtQ0FBVSxHQUFqQixVQUFxQixPQUE2QjtRQUM5QyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztJQUNsQyxDQUFDO0lBQ0wscUJBQUM7QUFBRCxDQTdCQSxBQTZCQyxJQUFBO0FBN0JZLHdDQUFjIiwiZmlsZSI6InRlc3RzL21vY2suanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1VwbG9hZEV2ZW50LCBVcGxvYWRFdmVudFR5cGV9IGZyb20gJ3Jlc29sd2UvY29yZS9zZXJ2aWNlcy9hcGknO1xuaW1wb3J0ICduZy1maWxlLXVwbG9hZCc7XG5cblxuLyoqXG4gKiBNb2NrIHVwbG9hZCBoYW5kbGVyIGZ1bmN0aW9uLiBJdCByZWNlaXZlcyBhbnkgcXVlcnkgYXJndW1lbnRzIGFuZCBkYXRhIHRoYXRcbiAqIHdhcyB1c2VkIHRvIG1ha2UgdGhlIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGRhdGEgUmVxdWVzdCBkYXRhXG4gKiBAcGFyYW0gZmlsZVVJRCBVbmlxdWUgZmlsZSBpZGVudGlmaWVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ja1VwbG9hZEhhbmRsZXI8VD4ge1xuICAgIChkYXRhOiBhbnksIGZpbGVVSUQ6IHN0cmluZyk6IFQ7XG59XG5cbi8qKlxuICogTW9jayBBUEkgc2VydmljZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vY2tBcGlTZXJ2aWNlIHtcbiAgICAvLyBNb2NrIHVwbG9hZCBoYW5kbGVyLlxuICAgIHByaXZhdGUgX3VwbG9hZEhhbmRsZXI6IE1vY2tVcGxvYWRIYW5kbGVyPGFueT4gPSAoKSA9PiAoeyBkYXRhOiBudWxsIH0pO1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBtb2NrIGRhdGEgdXBsb2FkLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGxvYWQ8VD4oZGF0YTogYW55LCBmaWxlVUlEOiBzdHJpbmcgPSAnJyk6IFJ4Lk9ic2VydmFibGU8VXBsb2FkRXZlbnQ8VD4+IHtcbiAgICAgICAgcmV0dXJuIFJ4Lk9ic2VydmFibGUuY3JlYXRlPFVwbG9hZEV2ZW50PFQ+Pigob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIub25OZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiB0aGlzLl91cGxvYWRIYW5kbGVyKGRhdGEsIGZpbGVVSUQpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBVcGxvYWRFdmVudFR5cGUuUkVTVUxULFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm9uQ29tcGxldGVkKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBtb2NrIHVwbG9hZCByZXF1ZXN0IGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGFuZGxlciBVcGxvYWQgaGFuZGxlclxuICAgICAqL1xuICAgIHB1YmxpYyB3aGVuVXBsb2FkPFQ+KGhhbmRsZXI6IE1vY2tVcGxvYWRIYW5kbGVyPFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VwbG9hZEhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIH1cbn1cbiJdfQ==
{
"name": "@genialis/resolwe",
"author": "Genialis Inc.",
"version": "2.0.5",
"version": "3.0.0",
"description": "Resolwe frontend libraries",

@@ -6,0 +6,0 @@ "license" : "Apache-2.0",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc