@uengage.io/platform-sdk 2.4.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -0
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.js +6 -2
- package/dist/auth/realtime-token.d.ts +18 -0
- package/dist/auth/realtime-token.js +46 -0
- package/dist/realtime/channel.d.ts +7 -0
- package/dist/realtime/channel.js +29 -0
- package/dist/realtime/connect.js +4 -2
- package/dist/realtime/index.d.ts +2 -1
- package/dist/realtime/index.js +7 -3
- package/dist/upsell/index.d.ts +1 -1
- package/dist/upsell/index.js +1 -1
- package/dist/upsell/schema.d.ts +57 -0
- package/dist/upsell/schema.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
Client SDK for uEngage platform services. One factory (`createClient`) returns a `PlatformClient` exposing `business`, `audit`, `zones`, `wallet`, and `auth`. No singletons, no module-level state - each consumer constructs its own client with explicit config.
|
|
4
4
|
|
|
5
|
+
## Restricted realtime channels
|
|
6
|
+
|
|
7
|
+
Call `auth.mintRealtimeToken({ clientId, clientSecret, channel: 'delivery-updates',
|
|
8
|
+
expiresIn: 300, authBaseUrl })` on your backend after authorizing the current user.
|
|
9
|
+
The registered client needs `realtime.tokens:issue`. Return its
|
|
10
|
+
`{ token, expiresIn, channel }` result from your own non-cacheable token route.
|
|
11
|
+
On the frontend, supply the token through `realtime.connect({ getToken, env })`
|
|
12
|
+
and call `client.subscribe('delivery-updates', ...)`.
|
|
13
|
+
|
|
14
|
+
Names are case-sensitive identifiers, not paths or wildcards. Tokens permit exactly
|
|
15
|
+
one name, are valid for 60–900 seconds (300 by default), and cannot publish or call
|
|
16
|
+
other platform APIs. Minting does not create a publisher. See the
|
|
17
|
+
[complete integration and authorization guide](../../services/realtime/README.md).
|
|
18
|
+
|
|
5
19
|
## Quick start
|
|
6
20
|
|
|
7
21
|
```ts
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* the SDK itself — every helper takes parameters explicitly so multiple
|
|
5
5
|
* OAuth clients (dashboard, mobile, BFFs) can share one SDK install.
|
|
6
6
|
*/
|
|
7
|
+
export { mintRealtimeToken, type MintRealtimeTokenInput, type RealtimeToken, } from './realtime-token';
|
|
7
8
|
export { generatePKCE, type PkcePair } from './pkce';
|
|
8
9
|
export { createAuthorizeUrl, type AuthorizeUrlInput } from './authorize-url';
|
|
9
10
|
export { exchangeCode, parseTokenResponse, type ExchangeCodeInput, type TokenPair, } from './exchange-code';
|
|
@@ -12,6 +13,7 @@ export { verifyAccessToken } from './verify';
|
|
|
12
13
|
export { getIssuer, getExpiry } from './issuer';
|
|
13
14
|
export { loginWithPassword, type LoginWithPasswordInput } from './login';
|
|
14
15
|
export { requestOtp, verifyOtp, type RequestOtpInput, type RequestOtpResult, type VerifyOtpInput, } from './otp';
|
|
16
|
+
import { mintRealtimeToken } from './realtime-token';
|
|
15
17
|
import { generatePKCE } from './pkce';
|
|
16
18
|
import { createAuthorizeUrl } from './authorize-url';
|
|
17
19
|
import { exchangeCode } from './exchange-code';
|
|
@@ -29,6 +31,7 @@ import { requestOtp, verifyOtp } from './otp';
|
|
|
29
31
|
* sharing this object across clients is safe.
|
|
30
32
|
*/
|
|
31
33
|
export declare const auth: {
|
|
34
|
+
mintRealtimeToken: typeof mintRealtimeToken;
|
|
32
35
|
generatePKCE: typeof generatePKCE;
|
|
33
36
|
createAuthorizeUrl: typeof createAuthorizeUrl;
|
|
34
37
|
exchangeCode: typeof exchangeCode;
|
package/dist/auth/index.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.auth = exports.verifyOtp = exports.requestOtp = exports.loginWithPassword = exports.getExpiry = exports.getIssuer = exports.verifyAccessToken = exports.refresh = exports.parseTokenResponse = exports.exchangeCode = exports.createAuthorizeUrl = exports.generatePKCE = void 0;
|
|
3
|
+
exports.auth = exports.verifyOtp = exports.requestOtp = exports.loginWithPassword = exports.getExpiry = exports.getIssuer = exports.verifyAccessToken = exports.refresh = exports.parseTokenResponse = exports.exchangeCode = exports.createAuthorizeUrl = exports.generatePKCE = exports.mintRealtimeToken = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Auth namespace: helpers for OAuth2 flows against the platform's
|
|
6
6
|
* `/auth/business/*` surface. Consumers don't bake a `client_id` into
|
|
7
7
|
* the SDK itself — every helper takes parameters explicitly so multiple
|
|
8
8
|
* OAuth clients (dashboard, mobile, BFFs) can share one SDK install.
|
|
9
9
|
*/
|
|
10
|
+
var realtime_token_1 = require("./realtime-token");
|
|
11
|
+
Object.defineProperty(exports, "mintRealtimeToken", { enumerable: true, get: function () { return realtime_token_1.mintRealtimeToken; } });
|
|
10
12
|
var pkce_1 = require("./pkce");
|
|
11
13
|
Object.defineProperty(exports, "generatePKCE", { enumerable: true, get: function () { return pkce_1.generatePKCE; } });
|
|
12
14
|
var authorize_url_1 = require("./authorize-url");
|
|
@@ -26,6 +28,7 @@ Object.defineProperty(exports, "loginWithPassword", { enumerable: true, get: fun
|
|
|
26
28
|
var otp_1 = require("./otp");
|
|
27
29
|
Object.defineProperty(exports, "requestOtp", { enumerable: true, get: function () { return otp_1.requestOtp; } });
|
|
28
30
|
Object.defineProperty(exports, "verifyOtp", { enumerable: true, get: function () { return otp_1.verifyOtp; } });
|
|
31
|
+
const realtime_token_2 = require("./realtime-token");
|
|
29
32
|
const pkce_2 = require("./pkce");
|
|
30
33
|
const authorize_url_2 = require("./authorize-url");
|
|
31
34
|
const exchange_code_2 = require("./exchange-code");
|
|
@@ -43,6 +46,7 @@ const otp_2 = require("./otp");
|
|
|
43
46
|
* sharing this object across clients is safe.
|
|
44
47
|
*/
|
|
45
48
|
exports.auth = {
|
|
49
|
+
mintRealtimeToken: realtime_token_2.mintRealtimeToken,
|
|
46
50
|
generatePKCE: pkce_2.generatePKCE,
|
|
47
51
|
createAuthorizeUrl: authorize_url_2.createAuthorizeUrl,
|
|
48
52
|
exchangeCode: exchange_code_2.exchangeCode,
|
|
@@ -54,4 +58,4 @@ exports.auth = {
|
|
|
54
58
|
requestOtp: otp_2.requestOtp,
|
|
55
59
|
verifyOtp: otp_2.verifyOtp,
|
|
56
60
|
};
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7R0FLRztBQUNILG1EQUkwQjtBQUh4QixtSEFBQSxpQkFBaUIsT0FBQTtBQUluQiwrQkFBcUQ7QUFBNUMsb0dBQUEsWUFBWSxPQUFBO0FBQ3JCLGlEQUE2RTtBQUFwRSxtSEFBQSxrQkFBa0IsT0FBQTtBQUMzQixpREFLeUI7QUFKdkIsNkdBQUEsWUFBWSxPQUFBO0FBQ1osbUhBQUEsa0JBQWtCLE9BQUE7QUFJcEIscUNBQXVEO0FBQTlDLGtHQUFBLE9BQU8sT0FBQTtBQUNoQixtQ0FBNkM7QUFBcEMsMkdBQUEsaUJBQWlCLE9BQUE7QUFDMUIsbUNBQWdEO0FBQXZDLG1HQUFBLFNBQVMsT0FBQTtBQUFFLG1HQUFBLFNBQVMsT0FBQTtBQUM3QixpQ0FBeUU7QUFBaEUsMEdBQUEsaUJBQWlCLE9BQUE7QUFDMUIsNkJBTWU7QUFMYixpR0FBQSxVQUFVLE9BQUE7QUFDVixnR0FBQSxTQUFTLE9BQUE7QUFNWCxxREFBcUQ7QUFDckQsaUNBQXNDO0FBQ3RDLG1EQUFxRDtBQUNyRCxtREFBK0M7QUFDL0MsdUNBQW9DO0FBQ3BDLHFDQUE2QztBQUM3QyxxQ0FBZ0Q7QUFDaEQsbUNBQTRDO0FBQzVDLCtCQUE4QztBQUU5Qzs7Ozs7OztHQU9HO0FBQ1UsUUFBQSxJQUFJLEdBQUc7SUFDbEIsaUJBQWlCLEVBQWpCLGtDQUFpQjtJQUNqQixZQUFZLEVBQVosbUJBQVk7SUFDWixrQkFBa0IsRUFBbEIsa0NBQWtCO0lBQ2xCLFlBQVksRUFBWiw0QkFBWTtJQUNaLE9BQU8sRUFBUCxpQkFBTztJQUNQLGlCQUFpQixFQUFqQiwwQkFBaUI7SUFDakIsU0FBUyxFQUFULGtCQUFTO0lBQ1QsU0FBUyxFQUFULGtCQUFTO0lBQ1QsaUJBQWlCLEVBQWpCLHlCQUFpQjtJQUNqQixVQUFVLEVBQVYsZ0JBQVU7SUFDVixTQUFTLEVBQVQsZUFBUztDQUNWLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dGggbmFtZXNwYWNlOiBoZWxwZXJzIGZvciBPQXV0aDIgZmxvd3MgYWdhaW5zdCB0aGUgcGxhdGZvcm0nc1xuICogYC9hdXRoL2J1c2luZXNzLypgIHN1cmZhY2UuIENvbnN1bWVycyBkb24ndCBiYWtlIGEgYGNsaWVudF9pZGAgaW50b1xuICogdGhlIFNESyBpdHNlbGYg4oCUIGV2ZXJ5IGhlbHBlciB0YWtlcyBwYXJhbWV0ZXJzIGV4cGxpY2l0bHkgc28gbXVsdGlwbGVcbiAqIE9BdXRoIGNsaWVudHMgKGRhc2hib2FyZCwgbW9iaWxlLCBCRkZzKSBjYW4gc2hhcmUgb25lIFNESyBpbnN0YWxsLlxuICovXG5leHBvcnQge1xuICBtaW50UmVhbHRpbWVUb2tlbixcbiAgdHlwZSBNaW50UmVhbHRpbWVUb2tlbklucHV0LFxuICB0eXBlIFJlYWx0aW1lVG9rZW4sXG59IGZyb20gJy4vcmVhbHRpbWUtdG9rZW4nO1xuZXhwb3J0IHsgZ2VuZXJhdGVQS0NFLCB0eXBlIFBrY2VQYWlyIH0gZnJvbSAnLi9wa2NlJztcbmV4cG9ydCB7IGNyZWF0ZUF1dGhvcml6ZVVybCwgdHlwZSBBdXRob3JpemVVcmxJbnB1dCB9IGZyb20gJy4vYXV0aG9yaXplLXVybCc7XG5leHBvcnQge1xuICBleGNoYW5nZUNvZGUsXG4gIHBhcnNlVG9rZW5SZXNwb25zZSxcbiAgdHlwZSBFeGNoYW5nZUNvZGVJbnB1dCxcbiAgdHlwZSBUb2tlblBhaXIsXG59IGZyb20gJy4vZXhjaGFuZ2UtY29kZSc7XG5leHBvcnQgeyByZWZyZXNoLCB0eXBlIFJlZnJlc2hJbnB1dCB9IGZyb20gJy4vcmVmcmVzaCc7XG5leHBvcnQgeyB2ZXJpZnlBY2Nlc3NUb2tlbiB9IGZyb20gJy4vdmVyaWZ5JztcbmV4cG9ydCB7IGdldElzc3VlciwgZ2V0RXhwaXJ5IH0gZnJvbSAnLi9pc3N1ZXInO1xuZXhwb3J0IHsgbG9naW5XaXRoUGFzc3dvcmQsIHR5cGUgTG9naW5XaXRoUGFzc3dvcmRJbnB1dCB9IGZyb20gJy4vbG9naW4nO1xuZXhwb3J0IHtcbiAgcmVxdWVzdE90cCxcbiAgdmVyaWZ5T3RwLFxuICB0eXBlIFJlcXVlc3RPdHBJbnB1dCxcbiAgdHlwZSBSZXF1ZXN0T3RwUmVzdWx0LFxuICB0eXBlIFZlcmlmeU90cElucHV0LFxufSBmcm9tICcuL290cCc7XG5cbmltcG9ydCB7IG1pbnRSZWFsdGltZVRva2VuIH0gZnJvbSAnLi9yZWFsdGltZS10b2tlbic7XG5pbXBvcnQgeyBnZW5lcmF0ZVBLQ0UgfSBmcm9tICcuL3BrY2UnO1xuaW1wb3J0IHsgY3JlYXRlQXV0aG9yaXplVXJsIH0gZnJvbSAnLi9hdXRob3JpemUtdXJsJztcbmltcG9ydCB7IGV4Y2hhbmdlQ29kZSB9IGZyb20gJy4vZXhjaGFuZ2UtY29kZSc7XG5pbXBvcnQgeyByZWZyZXNoIH0gZnJvbSAnLi9yZWZyZXNoJztcbmltcG9ydCB7IHZlcmlmeUFjY2Vzc1Rva2VuIH0gZnJvbSAnLi92ZXJpZnknO1xuaW1wb3J0IHsgZ2V0SXNzdWVyLCBnZXRFeHBpcnkgfSBmcm9tICcuL2lzc3Vlcic7XG5pbXBvcnQgeyBsb2dpbldpdGhQYXNzd29yZCB9IGZyb20gJy4vbG9naW4nO1xuaW1wb3J0IHsgcmVxdWVzdE90cCwgdmVyaWZ5T3RwIH0gZnJvbSAnLi9vdHAnO1xuXG4vKipcbiAqIENvbnZlbmllbmNlIG5hbWVzcGFjZTogc3RhdGVsZXNzIGhlbHBlcnMgZ3JvdXBlZCB1bmRlciBvbmUgc3ltYm9sLlxuICogSWRlbnRpY2FsIHRvIHRoZSBuYW1lZCBleHBvcnRzIGFib3ZlOyBpbXBvcnRpbmcgdGhlIG5hbWVzcGFjZSBsZXRzXG4gKiBjYWxsZXJzIHdyaXRlIGBjbGllbnQuYXV0aC5yZWZyZXNoKC4uLilgIChpdCdzIGV4cG9zZWQgb24gdGhlXG4gKiBgUGxhdGZvcm1DbGllbnRgIGluc3RhbmNlIHJldHVybmVkIGJ5IGBjcmVhdGVDbGllbnQoLi4uKWApIG9yXG4gKiBgYXV0aC5nZW5lcmF0ZVBLQ0UoKWAgZnJvbSBhIHRvcC1sZXZlbCBpbXBvcnQuIE5vIG11dGFibGUgc3RhdGUsIHNvXG4gKiBzaGFyaW5nIHRoaXMgb2JqZWN0IGFjcm9zcyBjbGllbnRzIGlzIHNhZmUuXG4gKi9cbmV4cG9ydCBjb25zdCBhdXRoID0ge1xuICBtaW50UmVhbHRpbWVUb2tlbixcbiAgZ2VuZXJhdGVQS0NFLFxuICBjcmVhdGVBdXRob3JpemVVcmwsXG4gIGV4Y2hhbmdlQ29kZSxcbiAgcmVmcmVzaCxcbiAgdmVyaWZ5QWNjZXNzVG9rZW4sXG4gIGdldElzc3VlcixcbiAgZ2V0RXhwaXJ5LFxuICBsb2dpbldpdGhQYXNzd29yZCxcbiAgcmVxdWVzdE90cCxcbiAgdmVyaWZ5T3RwLFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface MintRealtimeTokenInput {
|
|
2
|
+
clientId: string;
|
|
3
|
+
clientSecret: string;
|
|
4
|
+
channel: string;
|
|
5
|
+
/** 60-900 seconds; defaults to 300. No refresh token is issued. */
|
|
6
|
+
expiresIn?: number;
|
|
7
|
+
/** Opaque user identifier (1-128 printable ASCII characters). Attribution only. */
|
|
8
|
+
onBehalfOf?: string;
|
|
9
|
+
authBaseUrl?: string;
|
|
10
|
+
fetchFn?: typeof fetch;
|
|
11
|
+
}
|
|
12
|
+
export interface RealtimeToken {
|
|
13
|
+
token: string;
|
|
14
|
+
expiresIn: number;
|
|
15
|
+
channel: string;
|
|
16
|
+
}
|
|
17
|
+
/** Backend only. Check the caller's entitlement to this channel before minting. */
|
|
18
|
+
export declare function mintRealtimeToken(input: MintRealtimeTokenInput): Promise<RealtimeToken>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mintRealtimeToken = mintRealtimeToken;
|
|
4
|
+
const config_1 = require("../config");
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
const channel_1 = require("../realtime/channel");
|
|
7
|
+
/** Backend only. Check the caller's entitlement to this channel before minting. */
|
|
8
|
+
async function mintRealtimeToken(input) {
|
|
9
|
+
if (!input.clientId || !input.clientSecret)
|
|
10
|
+
throw new errors_1.ConfigError('Backend client credentials are required');
|
|
11
|
+
if (!(0, channel_1.isChannelName)(input.channel))
|
|
12
|
+
throw new errors_1.ConfigError('Invalid channel name');
|
|
13
|
+
if (input.onBehalfOf !== undefined && !(0, channel_1.isAttributionId)(input.onBehalfOf)) {
|
|
14
|
+
throw new errors_1.ConfigError('onBehalfOf must be a printable ASCII identifier of 1-128 characters');
|
|
15
|
+
}
|
|
16
|
+
const expiresIn = input.expiresIn ?? 300;
|
|
17
|
+
if (!Number.isInteger(expiresIn) || expiresIn < 60 || expiresIn > 900) {
|
|
18
|
+
throw new errors_1.ConfigError('expiresIn must be an integer between 60 and 900 seconds');
|
|
19
|
+
}
|
|
20
|
+
const response = await (input.fetchFn ?? globalThis.fetch)(`${(input.authBaseUrl ?? `${config_1.DEFAULT_BASE_URL}/auth/business`).replace(/\/$/, '')}/oauth/token`, {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
headers: {
|
|
23
|
+
'content-type': 'application/x-www-form-urlencoded',
|
|
24
|
+
authorization: `Basic ${Buffer.from(`${input.clientId}:${input.clientSecret}`).toString('base64')}`,
|
|
25
|
+
},
|
|
26
|
+
body: new URLSearchParams({
|
|
27
|
+
grant_type: 'urn:uengage:params:oauth:grant-type:realtime-channel',
|
|
28
|
+
channel: input.channel,
|
|
29
|
+
expires_in: String(expiresIn),
|
|
30
|
+
...(input.onBehalfOf === undefined ? {} : { on_behalf_of: input.onBehalfOf }),
|
|
31
|
+
}).toString(),
|
|
32
|
+
});
|
|
33
|
+
if (!response.ok)
|
|
34
|
+
throw new errors_1.AuthenticationError(`Realtime token mint failed: HTTP ${response.status}`);
|
|
35
|
+
const body = (await response.json());
|
|
36
|
+
if (typeof body.access_token !== 'string' ||
|
|
37
|
+
!body.access_token ||
|
|
38
|
+
body.channel !== input.channel ||
|
|
39
|
+
!Number.isInteger(body.expires_in) ||
|
|
40
|
+
Number(body.expires_in) < 60 ||
|
|
41
|
+
Number(body.expires_in) > expiresIn) {
|
|
42
|
+
throw new errors_1.AuthenticationError('Invalid realtime token response');
|
|
43
|
+
}
|
|
44
|
+
return { token: body.access_token, expiresIn: Number(body.expires_in), channel: input.channel };
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUtdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9yZWFsdGltZS10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXNCQSw4Q0F5Q0M7QUEvREQsc0NBQTZDO0FBQzdDLHNDQUE2RDtBQUM3RCxpREFBcUU7QUFtQnJFLG1GQUFtRjtBQUM1RSxLQUFLLFVBQVUsaUJBQWlCLENBQUMsS0FBNkI7SUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtRQUN4QyxNQUFNLElBQUksb0JBQVcsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxJQUFBLHVCQUFhLEVBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUFFLE1BQU0sSUFBSSxvQkFBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDakYsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUEseUJBQWUsRUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUN6RSxNQUFNLElBQUksb0JBQVcsQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQztJQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLEdBQUcsRUFBRSxJQUFJLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUN0RSxNQUFNLElBQUksb0JBQVcsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQ3hELEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEdBQUcseUJBQWdCLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsY0FBYyxFQUM5RjtRQUNFLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFO1lBQ1AsY0FBYyxFQUFFLG1DQUFtQztZQUNuRCxhQUFhLEVBQUUsU0FBUyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7U0FDcEc7UUFDRCxJQUFJLEVBQUUsSUFBSSxlQUFlLENBQUM7WUFDeEIsVUFBVSxFQUFFLHNEQUFzRDtZQUNsRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDN0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUM5RSxDQUFDLENBQUMsUUFBUSxFQUFFO0tBQ2QsQ0FDRixDQUFDO0lBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ2QsTUFBTSxJQUFJLDRCQUFtQixDQUFDLG9DQUFvQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN2RixNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUE0QixDQUFDO0lBQ2hFLElBQ0UsT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVE7UUFDckMsQ0FBQyxJQUFJLENBQUMsWUFBWTtRQUNsQixJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxPQUFPO1FBQzlCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsRUFDbkMsQ0FBQztRQUNELE1BQU0sSUFBSSw0QkFBbUIsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNsRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVGQVVMVF9CQVNFX1VSTCB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbkVycm9yLCBDb25maWdFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBpc0NoYW5uZWxOYW1lLCBpc0F0dHJpYnV0aW9uSWQgfSBmcm9tICcuLi9yZWFsdGltZS9jaGFubmVsJztcblxuZXhwb3J0IGludGVyZmFjZSBNaW50UmVhbHRpbWVUb2tlbklucHV0IHtcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgY2xpZW50U2VjcmV0OiBzdHJpbmc7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgLyoqIDYwLTkwMCBzZWNvbmRzOyBkZWZhdWx0cyB0byAzMDAuIE5vIHJlZnJlc2ggdG9rZW4gaXMgaXNzdWVkLiAqL1xuICBleHBpcmVzSW4/OiBudW1iZXI7XG4gIC8qKiBPcGFxdWUgdXNlciBpZGVudGlmaWVyICgxLTEyOCBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycykuIEF0dHJpYnV0aW9uIG9ubHkuICovXG4gIG9uQmVoYWxmT2Y/OiBzdHJpbmc7XG4gIGF1dGhCYXNlVXJsPzogc3RyaW5nO1xuICBmZXRjaEZuPzogdHlwZW9mIGZldGNoO1xufVxuZXhwb3J0IGludGVyZmFjZSBSZWFsdGltZVRva2VuIHtcbiAgdG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG4gIGNoYW5uZWw6IHN0cmluZztcbn1cblxuLyoqIEJhY2tlbmQgb25seS4gQ2hlY2sgdGhlIGNhbGxlcidzIGVudGl0bGVtZW50IHRvIHRoaXMgY2hhbm5lbCBiZWZvcmUgbWludGluZy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtaW50UmVhbHRpbWVUb2tlbihpbnB1dDogTWludFJlYWx0aW1lVG9rZW5JbnB1dCk6IFByb21pc2U8UmVhbHRpbWVUb2tlbj4ge1xuICBpZiAoIWlucHV0LmNsaWVudElkIHx8ICFpbnB1dC5jbGllbnRTZWNyZXQpXG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKCdCYWNrZW5kIGNsaWVudCBjcmVkZW50aWFscyBhcmUgcmVxdWlyZWQnKTtcbiAgaWYgKCFpc0NoYW5uZWxOYW1lKGlucHV0LmNoYW5uZWwpKSB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoJ0ludmFsaWQgY2hhbm5lbCBuYW1lJyk7XG4gIGlmIChpbnB1dC5vbkJlaGFsZk9mICE9PSB1bmRlZmluZWQgJiYgIWlzQXR0cmlidXRpb25JZChpbnB1dC5vbkJlaGFsZk9mKSkge1xuICAgIHRocm93IG5ldyBDb25maWdFcnJvcignb25CZWhhbGZPZiBtdXN0IGJlIGEgcHJpbnRhYmxlIEFTQ0lJIGlkZW50aWZpZXIgb2YgMS0xMjggY2hhcmFjdGVycycpO1xuICB9XG4gIGNvbnN0IGV4cGlyZXNJbiA9IGlucHV0LmV4cGlyZXNJbiA/PyAzMDA7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihleHBpcmVzSW4pIHx8IGV4cGlyZXNJbiA8IDYwIHx8IGV4cGlyZXNJbiA+IDkwMCkge1xuICAgIHRocm93IG5ldyBDb25maWdFcnJvcignZXhwaXJlc0luIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDYwIGFuZCA5MDAgc2Vjb25kcycpO1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgKGlucHV0LmZldGNoRm4gPz8gZ2xvYmFsVGhpcy5mZXRjaCkoXG4gICAgYCR7KGlucHV0LmF1dGhCYXNlVXJsID8/IGAke0RFRkFVTFRfQkFTRV9VUkx9L2F1dGgvYnVzaW5lc3NgKS5yZXBsYWNlKC9cXC8kLywgJycpfS9vYXV0aC90b2tlbmAsXG4gICAge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7aW5wdXQuY2xpZW50SWR9OiR7aW5wdXQuY2xpZW50U2VjcmV0fWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBncmFudF90eXBlOiAndXJuOnVlbmdhZ2U6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6cmVhbHRpbWUtY2hhbm5lbCcsXG4gICAgICAgIGNoYW5uZWw6IGlucHV0LmNoYW5uZWwsXG4gICAgICAgIGV4cGlyZXNfaW46IFN0cmluZyhleHBpcmVzSW4pLFxuICAgICAgICAuLi4oaW5wdXQub25CZWhhbGZPZiA9PT0gdW5kZWZpbmVkID8ge30gOiB7IG9uX2JlaGFsZl9vZjogaW5wdXQub25CZWhhbGZPZiB9KSxcbiAgICAgIH0pLnRvU3RyaW5nKCksXG4gICAgfSxcbiAgKTtcbiAgaWYgKCFyZXNwb25zZS5vaylcbiAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihgUmVhbHRpbWUgdG9rZW4gbWludCBmYWlsZWQ6IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKFxuICAgIHR5cGVvZiBib2R5LmFjY2Vzc190b2tlbiAhPT0gJ3N0cmluZycgfHxcbiAgICAhYm9keS5hY2Nlc3NfdG9rZW4gfHxcbiAgICBib2R5LmNoYW5uZWwgIT09IGlucHV0LmNoYW5uZWwgfHxcbiAgICAhTnVtYmVyLmlzSW50ZWdlcihib2R5LmV4cGlyZXNfaW4pIHx8XG4gICAgTnVtYmVyKGJvZHkuZXhwaXJlc19pbikgPCA2MCB8fFxuICAgIE51bWJlcihib2R5LmV4cGlyZXNfaW4pID4gZXhwaXJlc0luXG4gICkge1xuICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKCdJbnZhbGlkIHJlYWx0aW1lIHRva2VuIHJlc3BvbnNlJyk7XG4gIH1cbiAgcmV0dXJuIHsgdG9rZW46IGJvZHkuYWNjZXNzX3Rva2VuLCBleHBpcmVzSW46IE51bWJlcihib2R5LmV4cGlyZXNfaW4pLCBjaGFubmVsOiBpbnB1dC5jaGFubmVsIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Public channel names are case-sensitive single identifiers, never paths or wildcards. */
|
|
2
|
+
export declare function isChannelName(value: unknown): value is string;
|
|
3
|
+
/** Internal AppSync mapping. Absolute paths remain supported for existing integrations. */
|
|
4
|
+
export declare function toChannelPath(channel: string): string;
|
|
5
|
+
export declare function nameFromChannelPath(path: string): string | null;
|
|
6
|
+
/** Backend-supplied opaque attribution, never an authorization grant. */
|
|
7
|
+
export declare function isAttributionId(value: unknown): value is string;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isChannelName = isChannelName;
|
|
4
|
+
exports.toChannelPath = toChannelPath;
|
|
5
|
+
exports.nameFromChannelPath = nameFromChannelPath;
|
|
6
|
+
exports.isAttributionId = isAttributionId;
|
|
7
|
+
/** Public channel names are case-sensitive single identifiers, never paths or wildcards. */
|
|
8
|
+
function isChannelName(value) {
|
|
9
|
+
return (typeof value === 'string' &&
|
|
10
|
+
value.trim() === value &&
|
|
11
|
+
/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/.test(value));
|
|
12
|
+
}
|
|
13
|
+
/** Internal AppSync mapping. Absolute paths remain supported for existing integrations. */
|
|
14
|
+
function toChannelPath(channel) {
|
|
15
|
+
if (channel.startsWith('/'))
|
|
16
|
+
return channel;
|
|
17
|
+
if (!isChannelName(channel))
|
|
18
|
+
throw new Error('Invalid channel name');
|
|
19
|
+
return `/channels/${channel}`;
|
|
20
|
+
}
|
|
21
|
+
function nameFromChannelPath(path) {
|
|
22
|
+
const name = path.startsWith('/channels/') ? path.slice('/channels/'.length) : null;
|
|
23
|
+
return isChannelName(name) ? name : null;
|
|
24
|
+
}
|
|
25
|
+
/** Backend-supplied opaque attribution, never an authorization grant. */
|
|
26
|
+
function isAttributionId(value) {
|
|
27
|
+
return typeof value === 'string' && value.trim() === value && /^[\x21-\x7e]{1,128}$/.test(value);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVhbHRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxzQ0FNQztBQUdELHNDQUlDO0FBRUQsa0RBR0M7QUFHRCwwQ0FFQztBQXhCRCw0RkFBNEY7QUFDNUYsU0FBZ0IsYUFBYSxDQUFDLEtBQWM7SUFDMUMsT0FBTyxDQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUs7UUFDdEIsbUNBQW1DLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVELDJGQUEyRjtBQUMzRixTQUFnQixhQUFhLENBQUMsT0FBZTtJQUMzQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDckUsT0FBTyxhQUFhLE9BQU8sRUFBRSxDQUFDO0FBQ2hDLENBQUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxJQUFZO0lBQzlDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEYsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNDLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsU0FBZ0IsZUFBZSxDQUFDLEtBQWM7SUFDNUMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUssSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBQdWJsaWMgY2hhbm5lbCBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUgc2luZ2xlIGlkZW50aWZpZXJzLCBuZXZlciBwYXRocyBvciB3aWxkY2FyZHMuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDaGFubmVsTmFtZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgIHZhbHVlLnRyaW0oKSA9PT0gdmFsdWUgJiZcbiAgICAvXltBLVphLXowLTldW0EtWmEtejAtOV8tXXswLDEyN30kLy50ZXN0KHZhbHVlKVxuICApO1xufVxuXG4vKiogSW50ZXJuYWwgQXBwU3luYyBtYXBwaW5nLiBBYnNvbHV0ZSBwYXRocyByZW1haW4gc3VwcG9ydGVkIGZvciBleGlzdGluZyBpbnRlZ3JhdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DaGFubmVsUGF0aChjaGFubmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoY2hhbm5lbC5zdGFydHNXaXRoKCcvJykpIHJldHVybiBjaGFubmVsO1xuICBpZiAoIWlzQ2hhbm5lbE5hbWUoY2hhbm5lbCkpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGFubmVsIG5hbWUnKTtcbiAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbUNoYW5uZWxQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBuYW1lID0gcGF0aC5zdGFydHNXaXRoKCcvY2hhbm5lbHMvJykgPyBwYXRoLnNsaWNlKCcvY2hhbm5lbHMvJy5sZW5ndGgpIDogbnVsbDtcbiAgcmV0dXJuIGlzQ2hhbm5lbE5hbWUobmFtZSkgPyBuYW1lIDogbnVsbDtcbn1cblxuLyoqIEJhY2tlbmQtc3VwcGxpZWQgb3BhcXVlIGF0dHJpYnV0aW9uLCBuZXZlciBhbiBhdXRob3JpemF0aW9uIGdyYW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXR0cmlidXRpb25JZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PT0gdmFsdWUgJiYgL15bXFx4MjEtXFx4N2VdezEsMTI4fSQvLnRlc3QodmFsdWUpO1xufVxuIl19
|
package/dist/realtime/connect.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.connect = connect;
|
|
4
4
|
exports.jitteredBackoff = jitteredBackoff;
|
|
5
|
+
const channel_1 = require("./channel");
|
|
5
6
|
const envelope_1 = require("./envelope");
|
|
6
7
|
const endpoints_1 = require("./endpoints");
|
|
7
8
|
const protocol_1 = require("./protocol");
|
|
@@ -319,7 +320,7 @@ function connect(options) {
|
|
|
319
320
|
return;
|
|
320
321
|
record.sent = true;
|
|
321
322
|
try {
|
|
322
|
-
socket.send((0, protocol_1.subscribeFrame)(record.id, record.channel, (0, protocol_1.authHeader)(endpoints.httpDomain, token)));
|
|
323
|
+
socket.send((0, protocol_1.subscribeFrame)(record.id, (0, channel_1.toChannelPath)(record.channel), (0, protocol_1.authHeader)(endpoints.httpDomain, token)));
|
|
323
324
|
}
|
|
324
325
|
catch (err) {
|
|
325
326
|
record.sent = false;
|
|
@@ -352,6 +353,7 @@ function connect(options) {
|
|
|
352
353
|
}
|
|
353
354
|
return {
|
|
354
355
|
subscribe(channel, subscribeOptions) {
|
|
356
|
+
(0, channel_1.toChannelPath)(channel);
|
|
355
357
|
const record = {
|
|
356
358
|
id: randomId(),
|
|
357
359
|
channel,
|
|
@@ -447,4 +449,4 @@ function unref(timer) {
|
|
|
447
449
|
if (typeof t.unref === 'function')
|
|
448
450
|
t.unref();
|
|
449
451
|
}
|
|
450
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWFsdGltZS9jb25uZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNEpBLDBCQXVXQztBQTZCRCwwQ0FHQztBQW5pQkQseUNBQTBFO0FBQzFFLDJDQUErRjtBQUMvRix5Q0FZb0I7QUFxQnBCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztBQTRGbEIsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFDcEMsTUFBTSw4QkFBOEIsR0FBRyxNQUFNLENBQUM7QUFDOUMsTUFBTSw0QkFBNEIsR0FBRyxNQUFNLENBQUM7QUFDNUM7Ozs7O0dBS0c7QUFDSCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDNUI7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztBQUVuQyxTQUFnQixPQUFPLENBQUMsT0FBK0I7SUFDckQsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUNqRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFLLFVBQVUsQ0FBQyxLQUFzQixDQUFDO0lBQ3RFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLDhCQUE4QixDQUFDO0lBRTFGLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO0lBRTVELElBQUksTUFBb0MsQ0FBQztJQUN6QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDbEIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztJQUMzQixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUN6QixJQUFJLGNBQXlELENBQUM7SUFDOUQsSUFBSSxjQUF5RCxDQUFDO0lBQzlELElBQUksWUFBdUQsQ0FBQztJQUM1RCxJQUFJLGtCQUFrQixHQUFHLDRCQUE0QixDQUFDO0lBQ3REOzs7OztPQUtHO0lBQ0gsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFFMUIsd0VBQXdFO0lBRXhFLFNBQVMsWUFBWTtRQUNuQixJQUFJLGNBQWMsSUFBSSxVQUFVLElBQUksTUFBTTtZQUFFLE9BQU87UUFDbkQsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLFVBQVUsR0FBRyxFQUFFLGlCQUFpQixDQUFDO1FBRXZDLDBFQUEwRTtRQUMxRSx3RUFBd0U7UUFDeEUseUVBQXlFO1FBQ3pFLHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUscUVBQXFFO1FBQ3JFLGlFQUFpRTtRQUNqRSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUvQixLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDZixJQUFJLEVBQW9CLENBQUM7WUFDekIsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN2QyxtRUFBbUU7Z0JBQ25FLDBEQUEwRDtnQkFDMUQsSUFBSSxjQUFjLElBQUksVUFBVSxLQUFLLGlCQUFpQjtvQkFBRSxPQUFPO2dCQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFVLEVBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdkQsRUFBRSxHQUFHLElBQUksYUFBYSxDQUFDLFNBQVMsU0FBUyxDQUFDLGNBQWMsaUJBQWlCLEVBQUU7b0JBQ3pFLCtCQUFvQjtvQkFDcEIsSUFBQSwwQkFBZSxFQUFDLE1BQU0sQ0FBQztpQkFDeEIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxVQUFVLEtBQUssaUJBQWlCO29CQUFFLE9BQU87Z0JBQzdDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ25CLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3ZCLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLHFDQUFxQyxDQUFDLENBQUMsQ0FBQztnQkFDcEUsaUJBQWlCLEVBQUUsQ0FBQztnQkFDcEIsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLGNBQWMsSUFBSSxVQUFVLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztnQkFDdkQsaUVBQWlFO2dCQUNqRSwyQ0FBMkM7Z0JBQzNDLElBQUksQ0FBQztvQkFDSCxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1AsOENBQThDO2dCQUNoRCxDQUFDO2dCQUNELE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNaLEVBQUUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUNmLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBQSw4QkFBbUIsR0FBRSxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDO1lBQ0YsRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUNwQixZQUFZLEVBQUUsQ0FBQztnQkFDZixXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLENBQUMsQ0FBQztZQUNGLEVBQUUsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUNoQixrRUFBa0U7Z0JBQ2xFLHlDQUF5QztZQUMzQyxDQUFDLENBQUM7WUFDRixFQUFFLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDaEIsY0FBYyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxjQUFjO29CQUFFLGlCQUFpQixFQUFFLENBQUM7WUFDM0MsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFTLGNBQWM7UUFDckIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUM7UUFDRCxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ25CLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNkLGNBQWMsRUFBRSxDQUFDO1FBQ2pCLG9CQUFvQixFQUFFLENBQUM7UUFDdkIsS0FBSyxNQUFNLE1BQU0sSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFO1lBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDbkUsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsa0JBQWtCLENBQUMsVUFBa0I7UUFDNUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN2QixZQUFZLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUM3QixZQUFZLEdBQUcsU0FBUyxDQUFDO1lBQ3pCLElBQUksVUFBVSxLQUFLLGlCQUFpQjtnQkFBRSxPQUFPO1lBQzdDLHdFQUF3RTtZQUN4RSx1RUFBdUU7WUFDdkUscUVBQXFFO1lBQ3JFLDJCQUEyQjtZQUMzQixpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUN2QixjQUFjLEVBQUUsQ0FBQztZQUNqQixjQUFjLENBQUMsSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQztnQkFDSCxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AscURBQXFEO1lBQ3ZELENBQUM7WUFDRCxJQUFJLENBQUMsY0FBYztnQkFBRSxpQkFBaUIsRUFBRSxDQUFDO1FBQzNDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsU0FBUyxvQkFBb0I7UUFDM0IsSUFBSSxZQUFZO1lBQUUsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLFlBQVksR0FBRyxTQUFTLENBQUM7SUFDM0IsQ0FBQztJQUVELFNBQVMsaUJBQWlCO1FBQ3hCLElBQUksY0FBYyxJQUFJLGNBQWM7WUFBRSxPQUFPO1FBQzdDLElBQUksYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDO1lBQUUsT0FBTztRQUNyQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNyRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQy9CLGNBQWMsR0FBRyxTQUFTLENBQUM7WUFDM0IsWUFBWSxFQUFFLENBQUM7UUFDakIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ1YsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTLFlBQVk7UUFDbkIsY0FBYyxFQUFFLENBQUM7UUFDakIsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsbUVBQW1FO1lBQ25FLG1FQUFtRTtZQUNuRSwrREFBK0Q7WUFDL0QsOEJBQThCO1lBQzlCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUNwQixjQUFjLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUM7Z0JBQ0gsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLHFEQUFxRDtZQUN2RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGNBQWM7Z0JBQUUsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQyxDQUFDLEVBQUUsa0JBQWtCLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDekMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTLGNBQWM7UUFDckIsSUFBSSxjQUFjO1lBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pELGNBQWMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELHdFQUF3RTtJQUV4RSxTQUFTLFdBQVcsQ0FBQyxHQUFXO1FBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUEsMkJBQWdCLEVBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRW5CLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNiLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ25CLGdCQUFnQixHQUFHLENBQUMsQ0FBQztnQkFDckIsb0JBQW9CLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxVQUFVLEdBQUksS0FBMEMsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbkYsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksVUFBVSxHQUFHLENBQUM7b0JBQUUsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO2dCQUN0RixZQUFZLEVBQUUsQ0FBQztnQkFDZixLQUFLLE1BQU0sTUFBTSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUU7b0JBQUUsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0UsT0FBTztZQUNULENBQUM7WUFDRCxLQUFLLElBQUk7Z0JBQ1AsT0FBTztZQUNULEtBQUssbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixPQUFPO1lBQ1QsQ0FBQztZQUNELEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDWixNQUFNLFNBQVMsR0FBRyxLQUFrQixDQUFDO2dCQUNyQyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTTtvQkFBRSxPQUFPO2dCQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFBLDhCQUFtQixFQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFBLDBCQUFlLEVBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDWCxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLHdDQUF3QyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN6RixPQUFPO2dCQUNULENBQUM7Z0JBQ0QsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQy9CLE9BQU87WUFDVCxDQUFDO1lBQ0QsS0FBSyxpQkFBaUIsQ0FBQztZQUN2QixLQUFLLGtCQUFrQixDQUFDO1lBQ3hCLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFDckIsTUFBTSxVQUFVLEdBQUcsS0FBbUIsQ0FBQztnQkFDdkMsTUFBTSxPQUFPLEdBQUcsYUFBYSxJQUFBLDRCQUFpQixFQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzdELElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNsQixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDaEQsSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDWCxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7d0JBQ3hDLE9BQU87b0JBQ1QsQ0FBQztnQkFDSCxDQUFDO2dCQUNELGNBQWMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxPQUFPO1lBQ1QsQ0FBQztZQUNEO2dCQUNFLE9BQU87UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsT0FBTyxDQUFDLE1BQTBCLEVBQUUsS0FBb0IsRUFBRSxNQUE0QjtRQUM3RixJQUFJLE1BQU0sQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsSUFBQSxrQkFBTyxFQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU87UUFDbkQsTUFBTSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQztZQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxXQUFXLENBQUMsTUFBMEIsRUFBRSxLQUFZO1FBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ3BDLElBQUksQ0FBQztZQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCwwREFBMEQ7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLGNBQWMsQ0FBQyxLQUFZO1FBQ2xDLEtBQUssTUFBTSxNQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRTtZQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELHdFQUF3RTtJQUV4RTs7Ozs7Ozs7T0FRRztJQUNILEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxNQUEwQjtRQUN4RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQzlELElBQUksS0FBYSxDQUFDO1FBQ2xCLElBQUksQ0FBQztZQUNILEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxPQUFPO1lBQUUsT0FBTztRQUN0RSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsSUFBSSxDQUNULElBQUEseUJBQWMsRUFBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBQSxxQkFBVSxFQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FDbkYsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDcEIsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLDBDQUEwQyxDQUFDLENBQUMsQ0FBQztZQUM5RSxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsS0FBSyxVQUFVLE9BQU8sQ0FBQyxNQUEwQixFQUFFLEtBQWE7UUFDOUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO2dCQUN6QyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUNsRCxDQUFDLENBQUMsTUFBTSxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3QyxJQUFJLFFBQVE7Z0JBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsdUNBQXVDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0YsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLFVBQVUsV0FBVyxDQUFDLE9BQWUsRUFBRSxLQUFhO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLE9BQU8sK0JBQStCLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDN0YsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEYsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMzRSxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUF3QixDQUFDO1FBQ3ZELE9BQU8sSUFBQSwwQkFBZSxFQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsT0FBTztRQUNMLFNBQVMsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCO1lBQ2pDLE1BQU0sTUFBTSxHQUF1QjtnQkFDakMsRUFBRSxFQUFFLFFBQVEsRUFBRTtnQkFDZCxPQUFPO2dCQUNQLE9BQU8sRUFBRSxnQkFBZ0I7Z0JBQ3pCLElBQUksRUFBRSxLQUFLO2dCQUNYLE1BQU0sRUFBRSxLQUFLO2FBQ2QsQ0FBQztZQUNGLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVyQyxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDcEIsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sWUFBWSxFQUFFLENBQUM7WUFDakIsQ0FBQztZQUVELE9BQU87Z0JBQ0wsT0FBTztnQkFDUCxXQUFXO29CQUNULElBQUksTUFBTSxDQUFDLE1BQU07d0JBQUUsT0FBTztvQkFDMUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ3JCLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNoQyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQzNELElBQUksQ0FBQzs0QkFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUEsMkJBQWdCLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzNDLENBQUM7d0JBQUMsTUFBTSxDQUFDOzRCQUNQLG9EQUFvRDs0QkFDcEQsMkNBQTJDO3dCQUM3QyxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQzthQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsS0FBSztZQUNILGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxjQUFjO2dCQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNqRCxjQUFjLEdBQUcsU0FBUyxDQUFDO1lBQzNCLEtBQUssTUFBTSxNQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRTtnQkFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNsRSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO1lBQ3BCLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQztnQkFDSCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLDJEQUEyRDtZQUM3RCxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsMEVBQTBFO0FBRTFFLFNBQVMsZ0JBQWdCLENBQUMsT0FBK0I7SUFDdkQsSUFBSSxPQUFPLENBQUMsU0FBUztRQUFFLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBQSx3QkFBWSxFQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxPQUFPLEVBQUUsR0FBRyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLElBQUksb0JBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUM3RSxDQUFDO0FBRUQsU0FBUyxlQUFlO0lBQ3RCLE1BQU0sSUFBSSxHQUFJLFVBQTRDLENBQUMsU0FBUyxDQUFDO0lBQ3JFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQ2IsNEZBQTRGLENBQzdGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixlQUFlLENBQUMsT0FBZSxFQUFFLFVBQWtCO0lBQ2pFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLHVCQUF1QixHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQztJQUM3RSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFFBQVE7SUFDZixNQUFNLENBQUMsR0FBSSxVQUF5RCxDQUFDLE1BQU0sQ0FBQztJQUM1RSxJQUFJLENBQUMsRUFBRSxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDekMsT0FBTyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckYsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEdBQVksRUFBRSxlQUF1QjtJQUNwRCxJQUFJLEdBQUcsWUFBWSxLQUFLO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDckMsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLGVBQWUsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxLQUFvQztJQUNqRCxNQUFNLENBQUMsR0FBRyxLQUErQixDQUFDO0lBQzFDLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFVBQVU7UUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzUmVhbHRpbWVFdmVudCwgaXNOZXdlciwgdHlwZSBSZWFsdGltZUV2ZW50IH0gZnJvbSAnLi9lbnZlbG9wZSc7XG5pbXBvcnQgeyBBUElfQkFTRSwgZW5kcG9pbnRzRm9yLCB0eXBlIFJlYWx0aW1lRW5kcG9pbnRzLCB0eXBlIFJlYWx0aW1lRW52IH0gZnJvbSAnLi9lbmRwb2ludHMnO1xuaW1wb3J0IHtcbiAgRVZFTlRfV1NfU1VCUFJPVE9DT0wsXG4gIGF1dGhIZWFkZXIsXG4gIGF1dGhTdWJwcm90b2NvbCxcbiAgY29ubmVjdGlvbkluaXRGcmFtZSxcbiAgZXJyb3JGcmFtZU1lc3NhZ2UsXG4gIHBhcnNlRGF0YUZyYW1lRXZlbnQsXG4gIHBhcnNlU2VydmVyRnJhbWUsXG4gIHN1YnNjcmliZUZyYW1lLFxuICB1bnN1YnNjcmliZUZyYW1lLFxuICB0eXBlIERhdGFGcmFtZSxcbiAgdHlwZSBFcnJvckZyYW1lLFxufSBmcm9tICcuL3Byb3RvY29sJztcblxuLyoqXG4gKiBUaGUgc2xpY2Ugb2YgdGhlIFdlYlNvY2tldCBBUEkgdGhpcyBjbGllbnQgdXNlcy5cbiAqXG4gKiBEZWNsYXJlZCBzdHJ1Y3R1cmFsbHkgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBhIERPTSBsaWI6IHRoZSBTREtcbiAqIGNvbXBpbGVzIGFnYWluc3QgYGxpYjogRVMyMDIyYCBvbmx5LCBhbmQgdGhpcyBrZWVwcyB0aGUgY2xpZW50XG4gKiBpbmplY3RhYmxlIHNvIHRlc3RzIGNhbiBkcml2ZSB0aGUgcHJvdG9jb2wgd2l0aCBhIGZha2Ugc29ja2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbmltYWxXZWJTb2NrZXQge1xuICByZWFkeVN0YXRlOiBudW1iZXI7XG4gIHNlbmQoZGF0YTogc3RyaW5nKTogdm9pZDtcbiAgY2xvc2UoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogdm9pZDtcbiAgb25vcGVuOiAoKGV2OiB1bmtub3duKSA9PiB2b2lkKSB8IG51bGw7XG4gIG9ubWVzc2FnZTogKChldjogeyBkYXRhOiB1bmtub3duIH0pID0+IHZvaWQpIHwgbnVsbDtcbiAgb25lcnJvcjogKChldjogdW5rbm93bikgPT4gdm9pZCkgfCBudWxsO1xuICBvbmNsb3NlOiAoKGV2OiB7IGNvZGU/OiBudW1iZXI7IHJlYXNvbj86IHN0cmluZyB9KSA9PiB2b2lkKSB8IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIFdlYlNvY2tldEN0b3IgPSBuZXcgKHVybDogc3RyaW5nLCBwcm90b2NvbHM/OiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4gTWluaW1hbFdlYlNvY2tldDtcblxuY29uc3QgV1NfT1BFTiA9IDE7XG5cbi8qKiBXaGVyZSBhbiBldmVudCBoYW5kZWQgdG8gYG9uVXBkYXRlYCBjYW1lIGZyb20uICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU1ldGEge1xuICBjaGFubmVsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgJ3NuYXBzaG90J2Ag4oCUIHRoZSBjaGFubmVsJ3MgbGFzdCB2YWx1ZSwgZmV0Y2hlZCBmcm9tIHRoZSBsYXN0LXZhbHVlXG4gICAqIGNhY2hlIG9uIHN1YnNjcmliZSBvciBhZnRlciBhIHJlY29ubmVjdC4gYCdsaXZlJ2Ag4oCUIGRlbGl2ZXJlZCBvdmVyXG4gICAqIHRoZSBzb2NrZXQuXG4gICAqXG4gICAqIEFwcHMgZ2VuZXJhbGx5IGRvbid0IG5lZWQgdG8gYnJhbmNoIG9uIHRoaXM7IHRoZSBTREsgaGFzIGFscmVhZHlcbiAgICogb3JkZXJlZCBhbmQgZGUtZHVwbGljYXRlZCBib3RoIHNvdXJjZXMgYnkgVUxJRC4gSXQncyB0aGVyZSBmb3JcbiAgICogdGVsZW1ldHJ5IGFuZCBmb3IgVUlzIHRoYXQgd2FudCB0byBkaXN0aW5ndWlzaCBcInJlc3RvcmVkXCIgZnJvbVxuICAgKiBcImp1c3QgaGFwcGVuZWRcIi5cbiAgICovXG4gIG9yaWdpbjogJ3NuYXBzaG90JyB8ICdsaXZlJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpYmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZpcmVzIG9uY2Ugd2l0aCB0aGUgY2hhbm5lbCdzIGxhdGVzdCBrbm93biB2YWx1ZSAoaWYgYW55KSwgdGhlbiBvblxuICAgKiBldmVyeSBsaXZlIGV2ZW50LiBOZXZlciBmaXJlcyB3aXRoIGFuIGV2ZW50IG9sZGVyIHRoYW4gb25lIGFscmVhZHlcbiAgICogZGVsaXZlcmVkIG9uIHRoaXMgc3Vic2NyaXB0aW9uLlxuICAgKi9cbiAgb25VcGRhdGUoZXZlbnQ6IFJlYWx0aW1lRXZlbnQsIG1ldGE6IFVwZGF0ZU1ldGEpOiB2b2lkO1xuICAvKipcbiAgICogU3Vic2NyaXB0aW9uLWxldmVsIGZhaWx1cmVzOiBhIHJlamVjdGVkIHN1YnNjcmliZSwgYSBtYWxmb3JtZWRcbiAgICogZnJhbWUsIGEgZmFpbGVkIHNuYXBzaG90IGZldGNoLiBUcmFuc2llbnQgc29ja2V0IGRyb3BzIGFyZSBoYW5kbGVkXG4gICAqIGludGVybmFsbHkgYnkgdGhlIHJlY29ubmVjdCBsb29wIGFuZCBhcmUgbm90IHN1cmZhY2VkIGhlcmUuXG4gICAqL1xuICBvbkVycm9yPyhlcnJvcjogRXJyb3IpOiB2b2lkO1xuICAvKipcbiAgICogUmVwbGFjZSB0aGUgYnVpbHQtaW4gbGFzdC12YWx1ZSBmZXRjaCBmb3IgdGhpcyBjaGFubmVsLiBSZXR1cm4gbnVsbFxuICAgKiB3aGVuIHRoZXJlIGlzIG5vIHNuYXBzaG90LiBVc2VmdWwgd2hlbiBhIGRvbWFpbiBoYXMgYSBiZXR0ZXIgc291cmNlXG4gICAqIG9mIHRydXRoIHRoYW4gdGhlIGNhY2hlIOKAlCBlLmcuIGZhbGxpbmcgYmFjayB0byB0aGUgb3JkZXItZGV0YWlscyBBUElcbiAgICogZm9yIGFuIG9yZGVyIHdob3NlIHRyYW5zaXRpb25zIHByZWRhdGUgYnVzIGluc3RydW1lbnRhdGlvbi5cbiAgICovXG4gIGdldFNuYXBzaG90PyhjaGFubmVsOiBzdHJpbmcpOiBQcm9taXNlPFJlYWx0aW1lRXZlbnQgfCBudWxsPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpcHRpb24ge1xuICByZWFkb25seSBjaGFubmVsOiBzdHJpbmc7XG4gIHVuc3Vic2NyaWJlKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhbHRpbWVDbGllbnQge1xuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIGEgY2hhbm5lbC4gQ2hhbm5lbHMgYXJlIHRoZSBvbmx5IGNvbmNlcHQgaGVyZSDigJQgdGhlXG4gICAqIHJlYWx0aW1lIGxheWVyIGtub3dzIG5vdGhpbmcgYWJvdXQgb3JkZXJzOyBgL29yZGVycy97aWR9YCBpcyBhXG4gICAqIG5hbWluZyBjb252ZW50aW9uIGVuZm9yY2VkIGJ5IHRoZSBzZXJ2aWNlJ3MgbmFtZXNwYWNlIHBvbGljeSwgbm90IGJ5XG4gICAqIHRoaXMgY2xpZW50LlxuICAgKlxuICAgKiBPbiB0aGlzIGNhbGwsIGFuZCBhZ2FpbiBhZnRlciBldmVyeSByZWNvbm5lY3QsIHRoZSBTREsgb3BlbnMgdGhlXG4gICAqIHN1YnNjcmlwdGlvbiAqZmlyc3QqIGFuZCBvbmx5IHRoZW4gZmV0Y2hlcyB0aGUgY2hhbm5lbCdzIGxhc3QgdmFsdWUsXG4gICAqIHNvIG5vIGV2ZW50IGNhbiBmYWxsIGJldHdlZW4gdGhlIHNuYXBzaG90IGFuZCB0aGUgc3RyZWFtLlxuICAgKi9cbiAgc3Vic2NyaWJlKGNoYW5uZWw6IHN0cmluZywgb3B0aW9uczogU3Vic2NyaWJlT3B0aW9ucyk6IFN1YnNjcmlwdGlvbjtcbiAgLyoqIENsb3NlIHRoZSBzaGFyZWQgc29ja2V0IGFuZCBzdG9wIHJlY29ubmVjdGluZy4gKi9cbiAgY2xvc2UoKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFsdGltZUNvbm5lY3RPcHRpb25zIHtcbiAgLyoqIFJlc29sdmVzIGVuZHBvaW50cyBmcm9tIHRoZSBidWlsdC1pbiB0YWJsZS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGVuZHBvaW50c2AuICovXG4gIGVudj86IFJlYWx0aW1lRW52O1xuICAvKiogRXhwbGljaXQgZW5kcG9pbnRzLCBmb3IgZW52aXJvbm1lbnRzIG5vdCBpbiB0aGUgdGFibGUuICovXG4gIGVuZHBvaW50cz86IFJlYWx0aW1lRW5kcG9pbnRzO1xuICAvKipcbiAgICogU3VwcGxpZXMgdGhlIHBsYXRmb3JtIEpXVC4gQ2FsbGVkIG9uIGNvbm5lY3QsIG9uIGV2ZXJ5IChyZSlzdWJzY3JpYmUsXG4gICAqIGFuZCBhZ2FpbiBhZnRlciBhIHRva2VuLWV4cGlyeSByZWNvbm5lY3Qg4oCUIHNvIHJldHVybmluZyBhIGZyZXNoIHRva2VuXG4gICAqIGZyb20geW91ciBzZXNzaW9uIHN0b3JlIGlzIGVub3VnaCB0byBrZWVwIGEgbG9uZy1saXZlZCBjb25uZWN0aW9uXG4gICAqIGF1dGhlbnRpY2F0ZWQuXG4gICAqL1xuICBnZXRUb2tlbigpOiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gIC8qKiBJbmplY3QgYSBXZWJTb2NrZXQgaW1wbGVtZW50YXRpb24uIERlZmF1bHRzIHRvIGBnbG9iYWxUaGlzLldlYlNvY2tldGAuICovXG4gIHdlYlNvY2tldEltcGw/OiBXZWJTb2NrZXRDdG9yO1xuICAvKiogSW5qZWN0IGEgZmV0Y2ggaW1wbGVtZW50YXRpb24gZm9yIHNuYXBzaG90IGZldGNoZXMuIERlZmF1bHRzIHRvIGBnbG9iYWxUaGlzLmZldGNoYC4gKi9cbiAgZmV0Y2hGbj86IHR5cGVvZiBmZXRjaDtcbiAgLyoqIEJhY2tvZmYgY2VpbGluZyBmb3IgcmVjb25uZWN0cy4gRGVmYXVsdCAzMF8wMDAuICovXG4gIG1heFJlY29ubmVjdERlbGF5TXM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTdWJzY3JpcHRpb25SZWNvcmQge1xuICBpZDogc3RyaW5nO1xuICBjaGFubmVsOiBzdHJpbmc7XG4gIG9wdGlvbnM6IFN1YnNjcmliZU9wdGlvbnM7XG4gIC8qKiBIaWdoZXN0IGVudmVsb3BlIGlkIGRlbGl2ZXJlZCBzbyBmYXIg4oCUIHRoZSBvcmRlcmluZy9kZWR1cGUgZ3VhcmQuICovXG4gIGxhc3RFdmVudElkPzogc3RyaW5nO1xuICAvKiogQ2xlYXJlZCBvbiBzb2NrZXQgbG9zcywgc2V0IG9uY2UgdGhlIHNlcnZlciBhY2tzIHRoZSBzdWJzY3JpYmUuICovXG4gIHNlbnQ6IGJvb2xlYW47XG4gIGNsb3NlZDogYm9vbGVhbjtcbn1cblxuY29uc3QgQkFTRV9SRUNPTk5FQ1RfREVMQVlfTVMgPSA1MDA7XG5jb25zdCBERUZBVUxUX01BWF9SRUNPTk5FQ1RfREVMQVlfTVMgPSAzMF8wMDA7XG5jb25zdCBERUZBVUxUX0tFRVBBTElWRV9USU1FT1VUX01TID0gNjBfMDAwO1xuLyoqXG4gKiBHcmFjZSBvbiB0b3Agb2YgdGhlIHNlcnZlcidzIGFkdmVydGlzZWQga2VlcGFsaXZlIGludGVydmFsIGJlZm9yZSB3ZVxuICogY2FsbCB0aGUgY29ubmVjdGlvbiBkZWFkLiBBIGBrYWAgaXMgZHVlIGV2ZXJ5IGBjb25uZWN0aW9uVGltZW91dE1zYDtcbiAqIHdhaXRpbmcgMS41w5cgYWJzb3JicyBub3JtYWwgaml0dGVyIHdpdGhvdXQgbGV0dGluZyBhIGJsYWNrLWhvbGVkXG4gKiBzb2NrZXQgc2l0IHRoZXJlIGxvb2tpbmcgaGVhbHRoeS5cbiAqL1xuY29uc3QgS0VFUEFMSVZFX0dSQUNFID0gMS41O1xuLyoqXG4gKiBIb3cgbG9uZyBhIHNvY2tldCBtYXkgc2l0IGJldHdlZW4gXCJ3ZSBzdGFydGVkIG9wZW5pbmcgaXRcIiBhbmRcbiAqIGBjb25uZWN0aW9uX2Fja2AgYmVmb3JlIHdlIGdpdmUgdXAgb24gaXQuXG4gKlxuICogVGhlIGtlZXBhbGl2ZSB3YXRjaGRvZyBjYW4gb25seSBzdGFydCBvbmNlIGEgZnJhbWUgaGFzIGFycml2ZWQsIHNvIGl0XG4gKiBjYW5ub3QgY292ZXIgdGhlIGhhbmRzaGFrZSBpdHNlbGYuIEEgc29ja2V0IHdob3NlIFRDUC9XUyBvcGVuIHN1Y2NlZWRzXG4gKiBidXQgd2hpY2ggdGhlbiBnb2VzIHNpbGVudCAtIGJsYWNrLWhvbGVkIGNvbm5lY3Rpb24sIE5BVCBtYXBwaW5nXG4gKiBkcm9wcGVkIHJpZ2h0IGFmdGVyIG9wZW4sIHJhZGlvIGRvemluZyAtIHdvdWxkIG90aGVyd2lzZSBuZXZlciBmaXJlXG4gKiBgb25jbG9zZWAsIG5ldmVyIGFybSB0aGUga2VlcGFsaXZlLCBhbmQgbGVhdmUgYGNvbm5lY3RpbmdgIHRydWUgc29cbiAqIGBlbnN1cmVTb2NrZXQoKWAgc2hvcnQtY2lyY3VpdHMgZm9yZXZlci4gRXZlcnkgc3Vic2NyaXB0aW9uIHdvdWxkIGJlXG4gKiBzaWxlbnRseSBkZWFkIHdpdGggbm90aGluZyBzdXJmYWNlZC5cbiAqXG4gKiBJdCBjb3ZlcnMgdGhlIHRva2VuIHN0ZXAgdG9vLCB3aGljaCBpcyB3aHkgaXQgaXMgYXJtZWQgYmVmb3JlXG4gKiBgZ2V0VG9rZW4oKWAgaXMgYXdhaXRlZCByYXRoZXIgdGhhbiBhZnRlciB0aGUgc29ja2V0IGV4aXN0czogYW5cbiAqIGFwcC1zdXBwbGllZCB0b2tlbiByZWZyZXNoIGlzIHVzdWFsbHkgYSBgZmV0Y2hgLCBhbmQgYSBgZmV0Y2hgIHRoYXQgbmV2ZXJcbiAqIHNldHRsZXMgcHJvZHVjZXMgdGhlIHNhbWUgcGVybWFuZW50IHdlZGdlIHdpdGhvdXQgZXZlciBjcmVhdGluZyBhIHNvY2tldC5cbiAqL1xuY29uc3QgQ09OTkVDVF9ERUFETElORV9NUyA9IDE1XzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3Qob3B0aW9uczogUmVhbHRpbWVDb25uZWN0T3B0aW9ucyk6IFJlYWx0aW1lQ2xpZW50IHtcbiAgY29uc3QgZW5kcG9pbnRzID0gcmVzb2x2ZUVuZHBvaW50cyhvcHRpb25zKTtcbiAgY29uc3QgV2ViU29ja2V0SW1wbCA9IG9wdGlvbnMud2ViU29ja2V0SW1wbCA/PyBnbG9iYWxXZWJTb2NrZXQoKTtcbiAgY29uc3QgZmV0Y2hGbiA9IG9wdGlvbnMuZmV0Y2hGbiA/PyAoZ2xvYmFsVGhpcy5mZXRjaCBhcyB0eXBlb2YgZmV0Y2gpO1xuICBjb25zdCBtYXhSZWNvbm5lY3REZWxheU1zID0gb3B0aW9ucy5tYXhSZWNvbm5lY3REZWxheU1zID8/IERFRkFVTFRfTUFYX1JFQ09OTkVDVF9ERUxBWV9NUztcblxuICBjb25zdCBzdWJzY3JpcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIFN1YnNjcmlwdGlvblJlY29yZD4oKTtcblxuICBsZXQgc29ja2V0OiBNaW5pbWFsV2ViU29ja2V0IHwgdW5kZWZpbmVkO1xuICBsZXQgYWNrZWQgPSBmYWxzZTtcbiAgbGV0IGNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgbGV0IGNsb3NlZEJ5Q2FsbGVyID0gZmFsc2U7XG4gIGxldCByZWNvbm5lY3RBdHRlbXB0ID0gMDtcbiAgbGV0IHJlY29ubmVjdFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgbGV0IGtlZXBhbGl2ZVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgbGV0IGNvbm5lY3RUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gIGxldCBrZWVwYWxpdmVUaW1lb3V0TXMgPSBERUZBVUxUX0tFRVBBTElWRV9USU1FT1VUX01TO1xuICAvKipcbiAgICogQnVtcGVkIGZvciBldmVyeSBjb25uZWN0IGF0dGVtcHQsIGFuZCBhZ2FpbiB3aGVuIHRoZSBjb25uZWN0IGRlYWRsaW5lXG4gICAqIGFiYW5kb25zIG9uZS4gYGVuc3VyZVNvY2tldGAncyBhc3luYyBib2R5IGNoZWNrcyBpdCBhZnRlciBldmVyeSBgYXdhaXRgXG4gICAqIHNvIGEgc2xvdyBgZ2V0VG9rZW4oKWAgdGhhdCBzZXR0bGVzIGxhdGUgY2Fubm90IGFkb3B0IGl0cyBzb2NrZXQgb3ZlciBhXG4gICAqIG5ld2VyIGF0dGVtcHQncy5cbiAgICovXG4gIGxldCBjb25uZWN0R2VuZXJhdGlvbiA9IDA7XG5cbiAgLy8g4pSA4pSA4pSAIFNvY2tldCBsaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgZnVuY3Rpb24gZW5zdXJlU29ja2V0KCk6IHZvaWQge1xuICAgIGlmIChjbG9zZWRCeUNhbGxlciB8fCBjb25uZWN0aW5nIHx8IHNvY2tldCkgcmV0dXJuO1xuICAgIGNvbm5lY3RpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGdlbmVyYXRpb24gPSArK2Nvbm5lY3RHZW5lcmF0aW9uO1xuXG4gICAgLy8gQXJtZWQgQkVGT1JFIHRoZSB0b2tlbiBhd2FpdCwgbm90IGFmdGVyIHRoZSBzb2NrZXQgZXhpc3RzLiBgZ2V0VG9rZW4oKWBcbiAgICAvLyBpcyBhcHAtc3VwcGxpZWQgYW5kIHRoZSBub3JtYWwgaW1wbGVtZW50YXRpb24gaXMgYSBgZmV0Y2hgLCB3aGljaCBjYW5cbiAgICAvLyBoYW5nIGluZGVmaW5pdGVseSBhY3Jvc3MgYSBuZXR3b3JrIHRyYW5zaXRpb24uIElmIGl0IG5ldmVyIHNldHRsZXMgYW5kXG4gICAgLy8gdGhlIGRlYWRsaW5lIHdlcmUgYXJtZWQgbGF0ZXIsIGBjb25uZWN0aW5nYCB3b3VsZCBzdGF5IHRydWUgd2l0aCBub1xuICAgIC8vIHNvY2tldCBhbmQgbm8gdGltZXIsIGBzY2hlZHVsZVJlY29ubmVjdCgpYCB3b3VsZCBuZXZlciBydW4sIGFuZCBldmVyeVxuICAgIC8vIHN1YnNlcXVlbnQgYHN1YnNjcmliZSgpYCB3b3VsZCBzaG9ydC1jaXJjdWl0IG9uIGBjb25uZWN0aW5nYCAtIHRoZVxuICAgIC8vIGNsaWVudCBkZWFkIGZvciB0aGUgcGFnZSdzIGxpZmV0aW1lIHdpdGggbm90aGluZyBvbiBgb25FcnJvcmAuXG4gICAgYXJtQ29ubmVjdERlYWRsaW5lKGdlbmVyYXRpb24pO1xuXG4gICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHdzOiBNaW5pbWFsV2ViU29ja2V0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBvcHRpb25zLmdldFRva2VuKCk7XG4gICAgICAgIC8vIFRoZSBkZWFkbGluZSBtYXkgaGF2ZSBhYmFuZG9uZWQgdGhpcyBhdHRlbXB0IHdoaWxlIHRoZSB0b2tlbiB3YXNcbiAgICAgICAgLy8gcGVuZGluZy4gQmFpbCBiZWZvcmUgYnVpbGRpbmcgYSBzb2NrZXQgbm9ib2R5IHdpbGwgb3duLlxuICAgICAgICBpZiAoY2xvc2VkQnlDYWxsZXIgfHwgZ2VuZXJhdGlvbiAhPT0gY29ubmVjdEdlbmVyYXRpb24pIHJldHVybjtcbiAgICAgICAgY29uc3QgaGVhZGVyID0gYXV0aEhlYWRlcihlbmRwb2ludHMuaHR0cERvbWFpbiwgdG9rZW4pO1xuICAgICAgICB3cyA9IG5ldyBXZWJTb2NrZXRJbXBsKGB3c3M6Ly8ke2VuZHBvaW50cy5yZWFsdGltZURvbWFpbn0vZXZlbnQvcmVhbHRpbWVgLCBbXG4gICAgICAgICAgRVZFTlRfV1NfU1VCUFJPVE9DT0wsXG4gICAgICAgICAgYXV0aFN1YnByb3RvY29sKGhlYWRlciksXG4gICAgICAgIF0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSBjb25uZWN0R2VuZXJhdGlvbikgcmV0dXJuO1xuICAgICAgICBjb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk7XG4gICAgICAgIGJyb2FkY2FzdEVycm9yKHRvRXJyb3IoZXJyLCAncmVhbHRpbWU6IGZhaWxlZCB0byBvcGVuIGNvbm5lY3Rpb24nKSk7XG4gICAgICAgIHNjaGVkdWxlUmVjb25uZWN0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsb3NlZEJ5Q2FsbGVyIHx8IGdlbmVyYXRpb24gIT09IGNvbm5lY3RHZW5lcmF0aW9uKSB7XG4gICAgICAgIC8vIFN1cGVyc2VkZWQgYmV0d2VlbiB0aGUgdG9rZW4gcmVzb2x2aW5nIGFuZCB0aGUgc29ja2V0IG9wZW5pbmcuXG4gICAgICAgIC8vIENsb3NlIHRoZSBvcnBoYW4gcmF0aGVyIHRoYW4gbGVha2luZyBpdC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3cy5jbG9zZSgxMDAwLCAnc3VwZXJzZWRlZCcpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBOb3RoaW5nIHVzZWZ1bCB0byBkbzsgaXQgd2FzIG5ldmVyIGFkb3B0ZWQuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzb2NrZXQgPSB3cztcbiAgICAgIHdzLm9ub3BlbiA9ICgpID0+IHtcbiAgICAgICAgd3Muc2VuZChjb25uZWN0aW9uSW5pdEZyYW1lKCkpO1xuICAgICAgfTtcbiAgICAgIHdzLm9ubWVzc2FnZSA9IChldikgPT4ge1xuICAgICAgICBhcm1LZWVwYWxpdmUoKTtcbiAgICAgICAgaGFuZGxlRnJhbWUodHlwZW9mIGV2LmRhdGEgPT09ICdzdHJpbmcnID8gZXYuZGF0YSA6IFN0cmluZyhldi5kYXRhKSk7XG4gICAgICB9O1xuICAgICAgd3Mub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgLy8gYG9uY2xvc2VgIGFsd2F5cyBmb2xsb3dzOyByZWNvbm5lY3QgaXMgZHJpdmVuIGZyb20gdGhlcmUgc28gdGhlXG4gICAgICAgIC8vIHR3byBwYXRocyBjYW4ndCBib3RoIHNjaGVkdWxlIGEgcmV0cnkuXG4gICAgICB9O1xuICAgICAgd3Mub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGVhcmRvd25Tb2NrZXQoKTtcbiAgICAgICAgaWYgKCFjbG9zZWRCeUNhbGxlcikgc2NoZWR1bGVSZWNvbm5lY3QoKTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRlYXJkb3duU29ja2V0KCk6IHZvaWQge1xuICAgIGlmIChzb2NrZXQpIHtcbiAgICAgIHNvY2tldC5vbm9wZW4gPSBudWxsO1xuICAgICAgc29ja2V0Lm9ubWVzc2FnZSA9IG51bGw7XG4gICAgICBzb2NrZXQub25lcnJvciA9IG51bGw7XG4gICAgICBzb2NrZXQub25jbG9zZSA9IG51bGw7XG4gICAgfVxuICAgIHNvY2tldCA9IHVuZGVmaW5lZDtcbiAgICBjb25uZWN0aW5nID0gZmFsc2U7XG4gICAgYWNrZWQgPSBmYWxzZTtcbiAgICBjbGVhcktlZXBhbGl2ZSgpO1xuICAgIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk7XG4gICAgZm9yIChjb25zdCByZWNvcmQgb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkgcmVjb3JkLnNlbnQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWlsIGEgaGFuZHNoYWtlIHRoYXQgbmV2ZXIgY29tcGxldGVzLiBDbGVhcmVkIGJ5IGBjb25uZWN0aW9uX2Fja2AsXG4gICAqIGFmdGVyIHdoaWNoIHRoZSBrZWVwYWxpdmUgd2F0Y2hkb2cgdGFrZXMgb3Zlci5cbiAgICovXG4gIGZ1bmN0aW9uIGFybUNvbm5lY3REZWFkbGluZShnZW5lcmF0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjbGVhckNvbm5lY3REZWFkbGluZSgpO1xuICAgIGNvbm5lY3RUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29ubmVjdFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGdlbmVyYXRpb24gIT09IGNvbm5lY3RHZW5lcmF0aW9uKSByZXR1cm47XG4gICAgICAvLyBBYmFuZG9uIHRoaXMgYXR0ZW1wdCBieSByZXRpcmluZyBpdHMgZ2VuZXJhdGlvbi4gQSBgZ2V0VG9rZW4oKWAgc3RpbGxcbiAgICAgIC8vIHBlbmRpbmcgd2hlbiB0aGlzIGZpcmVzIGNhbiB0aGVuIG5vIGxvbmdlciBpbnN0YWxsIGl0cyBzb2NrZXQsIHdoaWNoXG4gICAgICAvLyB3b3VsZCBvdGhlcndpc2UgbGFuZCB1bi1kZWFkbGluZWQgYW5kIHVuLWFja2VkIG9uIHRvcCBvZiB0aGUgZnJlc2hcbiAgICAgIC8vIGF0dGVtcHQgc2NoZWR1bGVkIGJlbG93LlxuICAgICAgY29ubmVjdEdlbmVyYXRpb24rKztcbiAgICAgIGNvbnN0IHN0YWxsZWQgPSBzb2NrZXQ7XG4gICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgYnJvYWRjYXN0RXJyb3IobmV3IEVycm9yKCdyZWFsdGltZTogY29ubmVjdGlvbiB0aW1lZCBvdXQgYmVmb3JlIGNvbm5lY3Rpb25fYWNrJykpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RhbGxlZD8uY2xvc2UoNDAwMSwgJ2Nvbm5lY3QgdGltZW91dCcpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEFscmVhZHkgZ29uZTsgdGhlIHJlY29ubmVjdCBiZWxvdyBpcyB3aGF0IG1hdHRlcnMuXG4gICAgICB9XG4gICAgICBpZiAoIWNsb3NlZEJ5Q2FsbGVyKSBzY2hlZHVsZVJlY29ubmVjdCgpO1xuICAgIH0sIENPTk5FQ1RfREVBRExJTkVfTVMpO1xuICAgIHVucmVmKGNvbm5lY3RUaW1lcik7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckNvbm5lY3REZWFkbGluZSgpOiB2b2lkIHtcbiAgICBpZiAoY29ubmVjdFRpbWVyKSBjbGVhclRpbWVvdXQoY29ubmVjdFRpbWVyKTtcbiAgICBjb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBzY2hlZHVsZVJlY29ubmVjdCgpOiB2b2lkIHtcbiAgICBpZiAoY2xvc2VkQnlDYWxsZXIgfHwgcmVjb25uZWN0VGltZXIpIHJldHVybjtcbiAgICBpZiAoc3Vic2NyaXB0aW9ucy5zaXplID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZGVsYXkgPSBqaXR0ZXJlZEJhY2tvZmYocmVjb25uZWN0QXR0ZW1wdCwgbWF4UmVjb25uZWN0RGVsYXlNcyk7XG4gICAgcmVjb25uZWN0QXR0ZW1wdCsrO1xuICAgIHJlY29ubmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZWNvbm5lY3RUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgIGVuc3VyZVNvY2tldCgpO1xuICAgIH0sIGRlbGF5KTtcbiAgICB1bnJlZihyZWNvbm5lY3RUaW1lcik7XG4gIH1cblxuICBmdW5jdGlvbiBhcm1LZWVwYWxpdmUoKTogdm9pZCB7XG4gICAgY2xlYXJLZWVwYWxpdmUoKTtcbiAgICBrZWVwYWxpdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gTm8gZnJhbWUg4oCUIG5vdCBldmVuIGEgYGthYCDigJQgd2l0aGluIHRoZSBncmFjZSB3aW5kb3cuIFRoZSBzb2NrZXRcbiAgICAgIC8vIG1heSBsb29rIG9wZW4gd2hpbGUgZGVsaXZlcmluZyBub3RoaW5nIChiYWNrZ3JvdW5kZWQgdGFiLCBkb3ppbmdcbiAgICAgIC8vIHJhZGlvLCBzaWxlbnRseSBkcm9wcGVkIE5BVCBtYXBwaW5nKTsgZm9yY2UgaXQgY2xvc2VkIHNvIHRoZVxuICAgICAgLy8gbm9ybWFsIHJlY29ubmVjdCBwYXRoIHJ1bnMuXG4gICAgICBjb25zdCBkZWFkID0gc29ja2V0O1xuICAgICAgdGVhcmRvd25Tb2NrZXQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRlYWQ/LmNsb3NlKDQwMDAsICdrZWVwYWxpdmUgdGltZW91dCcpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEFscmVhZHkgZ29uZTsgdGhlIHJlY29ubmVjdCBiZWxvdyBpcyB3aGF0IG1hdHRlcnMuXG4gICAgICB9XG4gICAgICBpZiAoIWNsb3NlZEJ5Q2FsbGVyKSBzY2hlZHVsZVJlY29ubmVjdCgpO1xuICAgIH0sIGtlZXBhbGl2ZVRpbWVvdXRNcyAqIEtFRVBBTElWRV9HUkFDRSk7XG4gICAgdW5yZWYoa2VlcGFsaXZlVGltZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJLZWVwYWxpdmUoKTogdm9pZCB7XG4gICAgaWYgKGtlZXBhbGl2ZVRpbWVyKSBjbGVhclRpbWVvdXQoa2VlcGFsaXZlVGltZXIpO1xuICAgIGtlZXBhbGl2ZVRpbWVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8g4pSA4pSA4pSAIEZyYW1lIGhhbmRsaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGZ1bmN0aW9uIGhhbmRsZUZyYW1lKHJhdzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZnJhbWUgPSBwYXJzZVNlcnZlckZyYW1lKHJhdyk7XG4gICAgaWYgKCFmcmFtZSkgcmV0dXJuO1xuXG4gICAgc3dpdGNoIChmcmFtZS50eXBlKSB7XG4gICAgICBjYXNlICdjb25uZWN0aW9uX2Fjayc6IHtcbiAgICAgICAgYWNrZWQgPSB0cnVlO1xuICAgICAgICBjb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHJlY29ubmVjdEF0dGVtcHQgPSAwO1xuICAgICAgICBjbGVhckNvbm5lY3REZWFkbGluZSgpO1xuICAgICAgICBjb25zdCBhZHZlcnRpc2VkID0gKGZyYW1lIGFzIHsgY29ubmVjdGlvblRpbWVvdXRNcz86IG51bWJlciB9KS5jb25uZWN0aW9uVGltZW91dE1zO1xuICAgICAgICBpZiAodHlwZW9mIGFkdmVydGlzZWQgPT09ICdudW1iZXInICYmIGFkdmVydGlzZWQgPiAwKSBrZWVwYWxpdmVUaW1lb3V0TXMgPSBhZHZlcnRpc2VkO1xuICAgICAgICBhcm1LZWVwYWxpdmUoKTtcbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkgdm9pZCBvcGVuU3Vic2NyaXB0aW9uKHJlY29yZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2thJzpcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnc3Vic2NyaWJlX3N1Y2Nlc3MnOiB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2RhdGEnOiB7XG4gICAgICAgIGNvbnN0IGRhdGFGcmFtZSA9IGZyYW1lIGFzIERhdGFGcmFtZTtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gc3Vic2NyaXB0aW9ucy5nZXQoZGF0YUZyYW1lLmlkKTtcbiAgICAgICAgaWYgKCFyZWNvcmQgfHwgcmVjb3JkLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gcGFyc2VEYXRhRnJhbWVFdmVudChkYXRhRnJhbWUpO1xuICAgICAgICBjb25zdCBldmVudCA9IGFzUmVhbHRpbWVFdmVudChwYXlsb2FkKTtcbiAgICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgbmV3IEVycm9yKGByZWFsdGltZTogZHJvcHBlZCBtYWxmb3JtZWQgZXZlbnQgb24gJHtyZWNvcmQuY2hhbm5lbH1gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlbGl2ZXIocmVjb3JkLCBldmVudCwgJ2xpdmUnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnc3Vic2NyaWJlX2Vycm9yJzpcbiAgICAgIGNhc2UgJ2Nvbm5lY3Rpb25fZXJyb3InOlxuICAgICAgY2FzZSAncHVibGlzaF9lcnJvcic6IHtcbiAgICAgICAgY29uc3QgZXJyb3JGcmFtZSA9IGZyYW1lIGFzIEVycm9yRnJhbWU7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgcmVhbHRpbWU6ICR7ZXJyb3JGcmFtZU1lc3NhZ2UoZXJyb3JGcmFtZSl9YDtcbiAgICAgICAgaWYgKGVycm9yRnJhbWUuaWQpIHtcbiAgICAgICAgICBjb25zdCByZWNvcmQgPSBzdWJzY3JpcHRpb25zLmdldChlcnJvckZyYW1lLmlkKTtcbiAgICAgICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgICAgICByZXBvcnRFcnJvcihyZWNvcmQsIG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyb2FkY2FzdEVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZWxpdmVyKHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkLCBldmVudDogUmVhbHRpbWVFdmVudCwgb3JpZ2luOiBVcGRhdGVNZXRhWydvcmlnaW4nXSkge1xuICAgIGlmIChyZWNvcmQuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKCFpc05ld2VyKGV2ZW50LmlkLCByZWNvcmQubGFzdEV2ZW50SWQpKSByZXR1cm47XG4gICAgcmVjb3JkLmxhc3RFdmVudElkID0gZXZlbnQuaWQ7XG4gICAgdHJ5IHtcbiAgICAgIHJlY29yZC5vcHRpb25zLm9uVXBkYXRlKGV2ZW50LCB7IGNoYW5uZWw6IHJlY29yZC5jaGFubmVsLCBvcmlnaW4gfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXBvcnRFcnJvcihyZWNvcmQsIHRvRXJyb3IoZXJyLCAncmVhbHRpbWU6IG9uVXBkYXRlIHRocmV3JykpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcG9ydEVycm9yKHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkLCBlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgICBpZiAoIXJlY29yZC5vcHRpb25zLm9uRXJyb3IpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgcmVjb3JkLm9wdGlvbnMub25FcnJvcihlcnJvcik7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBBIHRocm93aW5nIGVycm9yIGhhbmRsZXIgbXVzdCBub3QgdGFrZSBkb3duIHRoZSBzb2NrZXQuXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYnJvYWRjYXN0RXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCByZWNvcmQgb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkgcmVwb3J0RXJyb3IocmVjb3JkLCBlcnJvcik7XG4gIH1cblxuICAvLyDilIDilIDilIAgU3Vic2NyaXB0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogT3BlbiAob3IgcmUtb3Blbikgb25lIHN1YnNjcmlwdGlvbjogc2VuZCB0aGUgc3Vic2NyaWJlIGZyYW1lIGZpcnN0LFxuICAgKiB0aGVuIGZldGNoIHRoZSBjaGFubmVsJ3MgbGFzdCB2YWx1ZS5cbiAgICpcbiAgICogT3JkZXIgbWF0dGVycy4gQXBwU3luYyBFdmVudHMgaGFzIG5vIHJldGVudGlvbiwgc28gYW55dGhpbmcgcHVibGlzaGVkXG4gICAqIGJldHdlZW4gXCJ3ZSBhc2tlZCBmb3IgdGhlIHNuYXBzaG90XCIgYW5kIFwidGhlIHN0cmVhbSBpcyBsaXZlXCIgd291bGQgYmVcbiAgICogbG9zdCBmb3JldmVyLiBTdWJzY3JpYmluZyBmaXJzdCBtZWFucyB0aGUgd29yc3QgY2FzZSBpcyBhIGR1cGxpY2F0ZSxcbiAgICogd2hpY2ggdGhlIFVMSUQgZ3VhcmQgaW4gYGRlbGl2ZXJgIGFic29yYnMuXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBvcGVuU3Vic2NyaXB0aW9uKHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHJlY29yZC5jbG9zZWQgfHwgIXNvY2tldCB8fCAhYWNrZWQgfHwgcmVjb3JkLnNlbnQpIHJldHVybjtcbiAgICBsZXQgdG9rZW46IHN0cmluZztcbiAgICB0cnkge1xuICAgICAgdG9rZW4gPSBhd2FpdCBvcHRpb25zLmdldFRva2VuKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXBvcnRFcnJvcihyZWNvcmQsIHRvRXJyb3IoZXJyLCAncmVhbHRpbWU6IGdldFRva2VuIGZhaWxlZCcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlY29yZC5jbG9zZWQgfHwgIXNvY2tldCB8fCBzb2NrZXQucmVhZHlTdGF0ZSAhPT0gV1NfT1BFTikgcmV0dXJuO1xuICAgIHJlY29yZC5zZW50ID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgc29ja2V0LnNlbmQoXG4gICAgICAgIHN1YnNjcmliZUZyYW1lKHJlY29yZC5pZCwgcmVjb3JkLmNoYW5uZWwsIGF1dGhIZWFkZXIoZW5kcG9pbnRzLmh0dHBEb21haW4sIHRva2VuKSksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVjb3JkLnNlbnQgPSBmYWxzZTtcbiAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgdG9FcnJvcihlcnIsICdyZWFsdGltZTogc3Vic2NyaWJlIGZyYW1lIGZhaWxlZCB0byBzZW5kJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBoeWRyYXRlKHJlY29yZCwgdG9rZW4pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZShyZWNvcmQ6IFN1YnNjcmlwdGlvblJlY29yZCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IHJlY29yZC5vcHRpb25zLmdldFNuYXBzaG90XG4gICAgICAgID8gYXdhaXQgcmVjb3JkLm9wdGlvbnMuZ2V0U25hcHNob3QocmVjb3JkLmNoYW5uZWwpXG4gICAgICAgIDogYXdhaXQgZmV0Y2hMYXRlc3QocmVjb3JkLmNoYW5uZWwsIHRva2VuKTtcbiAgICAgIGlmIChzbmFwc2hvdCkgZGVsaXZlcihyZWNvcmQsIHNuYXBzaG90LCAnc25hcHNob3QnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgdG9FcnJvcihlcnIsIGByZWFsdGltZTogc25hcHNob3QgZmV0Y2ggZmFpbGVkIGZvciAke3JlY29yZC5jaGFubmVsfWApKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaExhdGVzdChjaGFubmVsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPFJlYWx0aW1lRXZlbnQgfCBudWxsPiB7XG4gICAgY29uc3QgdXJsID0gYCR7ZW5kcG9pbnRzLmFwaUJhc2V9L3YxL3JlYWx0aW1lL2xhdGVzdD9jaGFubmVsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNoYW5uZWwpfWA7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2hGbih1cmwsIHsgaGVhZGVyczogeyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCB9IH0pO1xuICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDQpIHJldHVybiBudWxsO1xuICAgIGlmICghcmVzLm9rKSB0aHJvdyBuZXcgRXJyb3IoYHNuYXBzaG90IGZldGNoIHJldHVybmVkIEhUVFAgJHtyZXMuc3RhdHVzfWApO1xuICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgeyBldmVudD86IHVua25vd24gfTtcbiAgICByZXR1cm4gYXNSZWFsdGltZUV2ZW50KGJvZHk/LmV2ZW50KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3Vic2NyaWJlKGNoYW5uZWwsIHN1YnNjcmliZU9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkID0ge1xuICAgICAgICBpZDogcmFuZG9tSWQoKSxcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgb3B0aW9uczogc3Vic2NyaWJlT3B0aW9ucyxcbiAgICAgICAgc2VudDogZmFsc2UsXG4gICAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgc3Vic2NyaXB0aW9ucy5zZXQocmVjb3JkLmlkLCByZWNvcmQpO1xuXG4gICAgICBpZiAoYWNrZWQgJiYgc29ja2V0KSB7XG4gICAgICAgIHZvaWQgb3BlblN1YnNjcmlwdGlvbihyZWNvcmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5zdXJlU29ja2V0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5uZWwsXG4gICAgICAgIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICAgIGlmIChyZWNvcmQuY2xvc2VkKSByZXR1cm47XG4gICAgICAgICAgcmVjb3JkLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgc3Vic2NyaXB0aW9ucy5kZWxldGUocmVjb3JkLmlkKTtcbiAgICAgICAgICBpZiAoc29ja2V0ICYmIHNvY2tldC5yZWFkeVN0YXRlID09PSBXU19PUEVOICYmIHJlY29yZC5zZW50KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzb2NrZXQuc2VuZCh1bnN1YnNjcmliZUZyYW1lKHJlY29yZC5pZCkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIC8vIFNvY2tldCBpcyBnb2luZyBhd2F5IGFueXdheTsgdGhlIHNlcnZlciBkcm9wcyB0aGVcbiAgICAgICAgICAgICAgLy8gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbm5lY3Rpb24gY2xvc2VzLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgY2xvc2VkQnlDYWxsZXIgPSB0cnVlO1xuICAgICAgaWYgKHJlY29ubmVjdFRpbWVyKSBjbGVhclRpbWVvdXQocmVjb25uZWN0VGltZXIpO1xuICAgICAgcmVjb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSByZWNvcmQuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIHN1YnNjcmlwdGlvbnMuY2xlYXIoKTtcbiAgICAgIGNvbnN0IG9wZW4gPSBzb2NrZXQ7XG4gICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3Blbj8uY2xvc2UoMTAwMCwgJ2NsaWVudCBjbG9zZWQnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBOb3RoaW5nIHVzZWZ1bCB0byBkbyBpZiB0aGUgc29ja2V0IGlzIGFscmVhZHkgdG9ybiBkb3duLlxuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbi8vIOKUgOKUgOKUgCBIZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZXNvbHZlRW5kcG9pbnRzKG9wdGlvbnM6IFJlYWx0aW1lQ29ubmVjdE9wdGlvbnMpOiBSZWFsdGltZUVuZHBvaW50cyB7XG4gIGlmIChvcHRpb25zLmVuZHBvaW50cykgcmV0dXJuIG9wdGlvbnMuZW5kcG9pbnRzO1xuICBpZiAoIW9wdGlvbnMuZW52KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWFsdGltZS5jb25uZWN0OiBwYXNzIGVpdGhlciB7ZW52fSBvciB7ZW5kcG9pbnRzfScpO1xuICB9XG4gIGNvbnN0IHJlc29sdmVkID0gZW5kcG9pbnRzRm9yKG9wdGlvbnMuZW52KTtcbiAgcmV0dXJuIHsgLi4ucmVzb2x2ZWQsIGFwaUJhc2U6IHJlc29sdmVkLmFwaUJhc2UgfHwgQVBJX0JBU0Vbb3B0aW9ucy5lbnZdIH07XG59XG5cbmZ1bmN0aW9uIGdsb2JhbFdlYlNvY2tldCgpOiBXZWJTb2NrZXRDdG9yIHtcbiAgY29uc3QgY3RvciA9IChnbG9iYWxUaGlzIGFzIHsgV2ViU29ja2V0PzogV2ViU29ja2V0Q3RvciB9KS5XZWJTb2NrZXQ7XG4gIGlmICghY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdyZWFsdGltZS5jb25uZWN0OiBubyBnbG9iYWwgV2ViU29ja2V0LiBQYXNzIHt3ZWJTb2NrZXRJbXBsfSAoTm9kZSA8IDIyLCBvciBhIHRlc3QgZG91YmxlKS4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGN0b3I7XG59XG5cbi8qKlxuICogRnVsbC1qaXR0ZXIgZXhwb25lbnRpYWwgYmFja29mZi4gRnVsbCBqaXR0ZXIgKHJhdGhlciB0aGFuXG4gKiBkZWxheSDCsSBqaXR0ZXIpIG1hdHRlcnMgaGVyZSBiZWNhdXNlIGV2ZXJ5IHRhYiB3YXRjaGluZyBhbiBvcmRlclxuICogcmVjb25uZWN0cyBvbiB0aGUgc2FtZSBzZXJ2ZXItc2lkZSBldmVudDsgd2l0aG91dCBpdCB0aGV5IHJldHJ5IGluXG4gKiBsb2Nrc3RlcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGppdHRlcmVkQmFja29mZihhdHRlbXB0OiBudW1iZXIsIG1heERlbGF5TXM6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGNlaWxpbmcgPSBNYXRoLm1pbihtYXhEZWxheU1zLCBCQVNFX1JFQ09OTkVDVF9ERUxBWV9NUyAqIDIgKiogYXR0ZW1wdCk7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjZWlsaW5nKTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tSWQoKTogc3RyaW5nIHtcbiAgY29uc3QgYyA9IChnbG9iYWxUaGlzIGFzIHsgY3J5cHRvPzogeyByYW5kb21VVUlEPzogKCkgPT4gc3RyaW5nIH0gfSkuY3J5cHRvO1xuICBpZiAoYz8ucmFuZG9tVVVJRCkgcmV0dXJuIGMucmFuZG9tVVVJRCgpO1xuICByZXR1cm4gYHN1Yi0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gO1xufVxuXG5mdW5jdGlvbiB0b0Vycm9yKGVycjogdW5rbm93biwgZmFsbGJhY2tNZXNzYWdlOiBzdHJpbmcpOiBFcnJvciB7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGVycjtcbiAgcmV0dXJuIG5ldyBFcnJvcihgJHtmYWxsYmFja01lc3NhZ2V9OiAke1N0cmluZyhlcnIpfWApO1xufVxuXG5mdW5jdGlvbiB1bnJlZih0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4pOiB2b2lkIHtcbiAgY29uc3QgdCA9IHRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH07XG4gIGlmICh0eXBlb2YgdC51bnJlZiA9PT0gJ2Z1bmN0aW9uJykgdC51bnJlZigpO1xufVxuIl19
|
|
452
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWFsdGltZS9jb25uZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNkpBLDBCQTRXQztBQTZCRCwwQ0FHQztBQXppQkQsdUNBQTBDO0FBQzFDLHlDQUEwRTtBQUMxRSwyQ0FBK0Y7QUFDL0YseUNBWW9CO0FBcUJwQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7QUE0RmxCLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLE1BQU0sOEJBQThCLEdBQUcsTUFBTSxDQUFDO0FBQzlDLE1BQU0sNEJBQTRCLEdBQUcsTUFBTSxDQUFDO0FBQzVDOzs7OztHQUtHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDO0FBQzVCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUM7QUFFbkMsU0FBZ0IsT0FBTyxDQUFDLE9BQStCO0lBQ3JELE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksZUFBZSxFQUFFLENBQUM7SUFDakUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSyxVQUFVLENBQUMsS0FBc0IsQ0FBQztJQUN0RSxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSw4QkFBOEIsQ0FBQztJQUUxRixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztJQUU1RCxJQUFJLE1BQW9DLENBQUM7SUFDekMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztJQUN2QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDM0IsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDekIsSUFBSSxjQUF5RCxDQUFDO0lBQzlELElBQUksY0FBeUQsQ0FBQztJQUM5RCxJQUFJLFlBQXVELENBQUM7SUFDNUQsSUFBSSxrQkFBa0IsR0FBRyw0QkFBNEIsQ0FBQztJQUN0RDs7Ozs7T0FLRztJQUNILElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBRTFCLHdFQUF3RTtJQUV4RSxTQUFTLFlBQVk7UUFDbkIsSUFBSSxjQUFjLElBQUksVUFBVSxJQUFJLE1BQU07WUFBRSxPQUFPO1FBQ25ELFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsTUFBTSxVQUFVLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQztRQUV2QywwRUFBMEU7UUFDMUUsd0VBQXdFO1FBQ3hFLHlFQUF5RTtRQUN6RSxzRUFBc0U7UUFDdEUsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSxpRUFBaUU7UUFDakUsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0IsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2YsSUFBSSxFQUFvQixDQUFDO1lBQ3pCLElBQUksQ0FBQztnQkFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdkMsbUVBQW1FO2dCQUNuRSwwREFBMEQ7Z0JBQzFELElBQUksY0FBYyxJQUFJLFVBQVUsS0FBSyxpQkFBaUI7b0JBQUUsT0FBTztnQkFDL0QsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBVSxFQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELEVBQUUsR0FBRyxJQUFJLGFBQWEsQ0FBQyxTQUFTLFNBQVMsQ0FBQyxjQUFjLGlCQUFpQixFQUFFO29CQUN6RSwrQkFBb0I7b0JBQ3BCLElBQUEsMEJBQWUsRUFBQyxNQUFNLENBQUM7aUJBQ3hCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksVUFBVSxLQUFLLGlCQUFpQjtvQkFBRSxPQUFPO2dCQUM3QyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUNuQixvQkFBb0IsRUFBRSxDQUFDO2dCQUN2QixjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3BCLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxjQUFjLElBQUksVUFBVSxLQUFLLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3ZELGlFQUFpRTtnQkFDakUsMkNBQTJDO2dCQUMzQyxJQUFJLENBQUM7b0JBQ0gsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLDhDQUE4QztnQkFDaEQsQ0FBQztnQkFDRCxPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDWixFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDZixFQUFFLENBQUMsSUFBSSxDQUFDLElBQUEsOEJBQW1CLEdBQUUsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQztZQUNGLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDcEIsWUFBWSxFQUFFLENBQUM7Z0JBQ2YsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN2RSxDQUFDLENBQUM7WUFDRixFQUFFLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDaEIsa0VBQWtFO2dCQUNsRSx5Q0FBeUM7WUFDM0MsQ0FBQyxDQUFDO1lBQ0YsRUFBRSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ2hCLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsY0FBYztvQkFBRSxpQkFBaUIsRUFBRSxDQUFDO1lBQzNDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDUCxDQUFDO0lBRUQsU0FBUyxjQUFjO1FBQ3JCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNyQixNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN4QixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUN0QixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDO1FBQ0QsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUNuQixVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxjQUFjLEVBQUUsQ0FBQztRQUNqQixvQkFBb0IsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssTUFBTSxNQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRTtZQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLGtCQUFrQixDQUFDLFVBQWtCO1FBQzVDLG9CQUFvQixFQUFFLENBQUM7UUFDdkIsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDN0IsWUFBWSxHQUFHLFNBQVMsQ0FBQztZQUN6QixJQUFJLFVBQVUsS0FBSyxpQkFBaUI7Z0JBQUUsT0FBTztZQUM3Qyx3RUFBd0U7WUFDeEUsdUVBQXVFO1lBQ3ZFLHFFQUFxRTtZQUNyRSwyQkFBMkI7WUFDM0IsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDdkIsY0FBYyxFQUFFLENBQUM7WUFDakIsY0FBYyxDQUFDLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUMxQyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLHFEQUFxRDtZQUN2RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGNBQWM7Z0JBQUUsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUN4QixLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELFNBQVMsb0JBQW9CO1FBQzNCLElBQUksWUFBWTtZQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxZQUFZLEdBQUcsU0FBUyxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTLGlCQUFpQjtRQUN4QixJQUFJLGNBQWMsSUFBSSxjQUFjO1lBQUUsT0FBTztRQUM3QyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDckMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDckUsZ0JBQWdCLEVBQUUsQ0FBQztRQUNuQixjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUMvQixjQUFjLEdBQUcsU0FBUyxDQUFDO1lBQzNCLFlBQVksRUFBRSxDQUFDO1FBQ2pCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNWLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUyxZQUFZO1FBQ25CLGNBQWMsRUFBRSxDQUFDO1FBQ2pCLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQy9CLG1FQUFtRTtZQUNuRSxtRUFBbUU7WUFDbkUsK0RBQStEO1lBQy9ELDhCQUE4QjtZQUM5QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7WUFDcEIsY0FBYyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDO2dCQUNILElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDekMsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxxREFBcUQ7WUFDdkQsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjO2dCQUFFLGlCQUFpQixFQUFFLENBQUM7UUFDM0MsQ0FBQyxFQUFFLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxDQUFDO1FBQ3pDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUyxjQUFjO1FBQ3JCLElBQUksY0FBYztZQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRCxjQUFjLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCx3RUFBd0U7SUFFeEUsU0FBUyxXQUFXLENBQUMsR0FBVztRQUM5QixNQUFNLEtBQUssR0FBRyxJQUFBLDJCQUFnQixFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUVuQixRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixLQUFLLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFDdEIsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDYixVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUNuQixnQkFBZ0IsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sVUFBVSxHQUFJLEtBQTBDLENBQUMsbUJBQW1CLENBQUM7Z0JBQ25GLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsR0FBRyxDQUFDO29CQUFFLGtCQUFrQixHQUFHLFVBQVUsQ0FBQztnQkFDdEYsWUFBWSxFQUFFLENBQUM7Z0JBQ2YsS0FBSyxNQUFNLE1BQU0sSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFO29CQUFFLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNFLE9BQU87WUFDVCxDQUFDO1lBQ0QsS0FBSyxJQUFJO2dCQUNQLE9BQU87WUFDVCxLQUFLLG1CQUFtQixDQUFDLENBQUMsQ0FBQztnQkFDekIsT0FBTztZQUNULENBQUM7WUFDRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1osTUFBTSxTQUFTLEdBQUcsS0FBa0IsQ0FBQztnQkFDckMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU07b0JBQUUsT0FBTztnQkFDckMsTUFBTSxPQUFPLEdBQUcsSUFBQSw4QkFBbUIsRUFBQyxTQUFTLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBQSwwQkFBZSxFQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ1gsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDekYsT0FBTztnQkFDVCxDQUFDO2dCQUNELE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQixPQUFPO1lBQ1QsQ0FBQztZQUNELEtBQUssaUJBQWlCLENBQUM7WUFDdkIsS0FBSyxrQkFBa0IsQ0FBQztZQUN4QixLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sVUFBVSxHQUFHLEtBQW1CLENBQUM7Z0JBQ3ZDLE1BQU0sT0FBTyxHQUFHLGFBQWEsSUFBQSw0QkFBaUIsRUFBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDbEIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2hELElBQUksTUFBTSxFQUFFLENBQUM7d0JBQ1gsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3dCQUN4QyxPQUFPO29CQUNULENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxjQUFjLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsT0FBTztZQUNULENBQUM7WUFDRDtnQkFDRSxPQUFPO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLE9BQU8sQ0FBQyxNQUEwQixFQUFFLEtBQW9CLEVBQUUsTUFBNEI7UUFDN0YsSUFBSSxNQUFNLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLElBQUEsa0JBQU8sRUFBQyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPO1FBQ25ELE1BQU0sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLDBCQUEwQixDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsV0FBVyxDQUFDLE1BQTBCLEVBQUUsS0FBWTtRQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUNwQyxJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsMERBQTBEO1FBQzVELENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxjQUFjLENBQUMsS0FBWTtRQUNsQyxLQUFLLE1BQU0sTUFBTSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCx3RUFBd0U7SUFFeEU7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsTUFBMEI7UUFDeEQsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUM5RCxJQUFJLEtBQWEsQ0FBQztRQUNsQixJQUFJLENBQUM7WUFDSCxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO1lBQy9ELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssT0FBTztZQUFFLE9BQU87UUFDdEUsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxDQUFDLElBQUksQ0FDVCxJQUFBLHlCQUFjLEVBQ1osTUFBTSxDQUFDLEVBQUUsRUFDVCxJQUFBLHVCQUFhLEVBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUM3QixJQUFBLHFCQUFVLEVBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FDeEMsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUNwQixXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsMENBQTBDLENBQUMsQ0FBQyxDQUFDO1lBQzlFLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxLQUFLLFVBQVUsT0FBTyxDQUFDLE1BQTBCLEVBQUUsS0FBYTtRQUM5RCxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVc7Z0JBQ3pDLENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQ2xELENBQUMsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdDLElBQUksUUFBUTtnQkFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSx1Q0FBdUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssVUFBVSxXQUFXLENBQUMsT0FBZSxFQUFFLEtBQWE7UUFDdkQsTUFBTSxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUMsT0FBTywrQkFBK0Isa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM3RixNQUFNLEdBQUcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxhQUFhLEVBQUUsVUFBVSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQXdCLENBQUM7UUFDdkQsT0FBTyxJQUFBLDBCQUFlLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxPQUFPO1FBQ0wsU0FBUyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0I7WUFDakMsSUFBQSx1QkFBYSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUF1QjtnQkFDakMsRUFBRSxFQUFFLFFBQVEsRUFBRTtnQkFDZCxPQUFPO2dCQUNQLE9BQU8sRUFBRSxnQkFBZ0I7Z0JBQ3pCLElBQUksRUFBRSxLQUFLO2dCQUNYLE1BQU0sRUFBRSxLQUFLO2FBQ2QsQ0FBQztZQUNGLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVyQyxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDcEIsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sWUFBWSxFQUFFLENBQUM7WUFDakIsQ0FBQztZQUVELE9BQU87Z0JBQ0wsT0FBTztnQkFDUCxXQUFXO29CQUNULElBQUksTUFBTSxDQUFDLE1BQU07d0JBQUUsT0FBTztvQkFDMUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ3JCLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNoQyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQzNELElBQUksQ0FBQzs0QkFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUEsMkJBQWdCLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzNDLENBQUM7d0JBQUMsTUFBTSxDQUFDOzRCQUNQLG9EQUFvRDs0QkFDcEQsMkNBQTJDO3dCQUM3QyxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQzthQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsS0FBSztZQUNILGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxjQUFjO2dCQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNqRCxjQUFjLEdBQUcsU0FBUyxDQUFDO1lBQzNCLEtBQUssTUFBTSxNQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRTtnQkFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNsRSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO1lBQ3BCLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQztnQkFDSCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLDJEQUEyRDtZQUM3RCxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsMEVBQTBFO0FBRTFFLFNBQVMsZ0JBQWdCLENBQUMsT0FBK0I7SUFDdkQsSUFBSSxPQUFPLENBQUMsU0FBUztRQUFFLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBQSx3QkFBWSxFQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxPQUFPLEVBQUUsR0FBRyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLElBQUksb0JBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUM3RSxDQUFDO0FBRUQsU0FBUyxlQUFlO0lBQ3RCLE1BQU0sSUFBSSxHQUFJLFVBQTRDLENBQUMsU0FBUyxDQUFDO0lBQ3JFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQ2IsNEZBQTRGLENBQzdGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixlQUFlLENBQUMsT0FBZSxFQUFFLFVBQWtCO0lBQ2pFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLHVCQUF1QixHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQztJQUM3RSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFFBQVE7SUFDZixNQUFNLENBQUMsR0FBSSxVQUF5RCxDQUFDLE1BQU0sQ0FBQztJQUM1RSxJQUFJLENBQUMsRUFBRSxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDekMsT0FBTyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckYsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEdBQVksRUFBRSxlQUF1QjtJQUNwRCxJQUFJLEdBQUcsWUFBWSxLQUFLO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDckMsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLGVBQWUsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxLQUFvQztJQUNqRCxNQUFNLENBQUMsR0FBRyxLQUErQixDQUFDO0lBQzFDLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFVBQVU7UUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvQ2hhbm5lbFBhdGggfSBmcm9tICcuL2NoYW5uZWwnO1xuaW1wb3J0IHsgYXNSZWFsdGltZUV2ZW50LCBpc05ld2VyLCB0eXBlIFJlYWx0aW1lRXZlbnQgfSBmcm9tICcuL2VudmVsb3BlJztcbmltcG9ydCB7IEFQSV9CQVNFLCBlbmRwb2ludHNGb3IsIHR5cGUgUmVhbHRpbWVFbmRwb2ludHMsIHR5cGUgUmVhbHRpbWVFbnYgfSBmcm9tICcuL2VuZHBvaW50cyc7XG5pbXBvcnQge1xuICBFVkVOVF9XU19TVUJQUk9UT0NPTCxcbiAgYXV0aEhlYWRlcixcbiAgYXV0aFN1YnByb3RvY29sLFxuICBjb25uZWN0aW9uSW5pdEZyYW1lLFxuICBlcnJvckZyYW1lTWVzc2FnZSxcbiAgcGFyc2VEYXRhRnJhbWVFdmVudCxcbiAgcGFyc2VTZXJ2ZXJGcmFtZSxcbiAgc3Vic2NyaWJlRnJhbWUsXG4gIHVuc3Vic2NyaWJlRnJhbWUsXG4gIHR5cGUgRGF0YUZyYW1lLFxuICB0eXBlIEVycm9yRnJhbWUsXG59IGZyb20gJy4vcHJvdG9jb2wnO1xuXG4vKipcbiAqIFRoZSBzbGljZSBvZiB0aGUgV2ViU29ja2V0IEFQSSB0aGlzIGNsaWVudCB1c2VzLlxuICpcbiAqIERlY2xhcmVkIHN0cnVjdHVyYWxseSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGEgRE9NIGxpYjogdGhlIFNES1xuICogY29tcGlsZXMgYWdhaW5zdCBgbGliOiBFUzIwMjJgIG9ubHksIGFuZCB0aGlzIGtlZXBzIHRoZSBjbGllbnRcbiAqIGluamVjdGFibGUgc28gdGVzdHMgY2FuIGRyaXZlIHRoZSBwcm90b2NvbCB3aXRoIGEgZmFrZSBzb2NrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWluaW1hbFdlYlNvY2tldCB7XG4gIHJlYWR5U3RhdGU6IG51bWJlcjtcbiAgc2VuZChkYXRhOiBzdHJpbmcpOiB2b2lkO1xuICBjbG9zZShjb2RlPzogbnVtYmVyLCByZWFzb24/OiBzdHJpbmcpOiB2b2lkO1xuICBvbm9wZW46ICgoZXY6IHVua25vd24pID0+IHZvaWQpIHwgbnVsbDtcbiAgb25tZXNzYWdlOiAoKGV2OiB7IGRhdGE6IHVua25vd24gfSkgPT4gdm9pZCkgfCBudWxsO1xuICBvbmVycm9yOiAoKGV2OiB1bmtub3duKSA9PiB2b2lkKSB8IG51bGw7XG4gIG9uY2xvc2U6ICgoZXY6IHsgY29kZT86IG51bWJlcjsgcmVhc29uPzogc3RyaW5nIH0pID0+IHZvaWQpIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgV2ViU29ja2V0Q3RvciA9IG5ldyAodXJsOiBzdHJpbmcsIHByb3RvY29scz86IHN0cmluZyB8IHN0cmluZ1tdKSA9PiBNaW5pbWFsV2ViU29ja2V0O1xuXG5jb25zdCBXU19PUEVOID0gMTtcblxuLyoqIFdoZXJlIGFuIGV2ZW50IGhhbmRlZCB0byBgb25VcGRhdGVgIGNhbWUgZnJvbS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlTWV0YSB7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgLyoqXG4gICAqIGAnc25hcHNob3QnYCDigJQgdGhlIGNoYW5uZWwncyBsYXN0IHZhbHVlLCBmZXRjaGVkIGZyb20gdGhlIGxhc3QtdmFsdWVcbiAgICogY2FjaGUgb24gc3Vic2NyaWJlIG9yIGFmdGVyIGEgcmVjb25uZWN0LiBgJ2xpdmUnYCDigJQgZGVsaXZlcmVkIG92ZXJcbiAgICogdGhlIHNvY2tldC5cbiAgICpcbiAgICogQXBwcyBnZW5lcmFsbHkgZG9uJ3QgbmVlZCB0byBicmFuY2ggb24gdGhpczsgdGhlIFNESyBoYXMgYWxyZWFkeVxuICAgKiBvcmRlcmVkIGFuZCBkZS1kdXBsaWNhdGVkIGJvdGggc291cmNlcyBieSBVTElELiBJdCdzIHRoZXJlIGZvclxuICAgKiB0ZWxlbWV0cnkgYW5kIGZvciBVSXMgdGhhdCB3YW50IHRvIGRpc3Rpbmd1aXNoIFwicmVzdG9yZWRcIiBmcm9tXG4gICAqIFwianVzdCBoYXBwZW5lZFwiLlxuICAgKi9cbiAgb3JpZ2luOiAnc25hcHNob3QnIHwgJ2xpdmUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmliZU9wdGlvbnMge1xuICAvKipcbiAgICogRmlyZXMgb25jZSB3aXRoIHRoZSBjaGFubmVsJ3MgbGF0ZXN0IGtub3duIHZhbHVlIChpZiBhbnkpLCB0aGVuIG9uXG4gICAqIGV2ZXJ5IGxpdmUgZXZlbnQuIE5ldmVyIGZpcmVzIHdpdGggYW4gZXZlbnQgb2xkZXIgdGhhbiBvbmUgYWxyZWFkeVxuICAgKiBkZWxpdmVyZWQgb24gdGhpcyBzdWJzY3JpcHRpb24uXG4gICAqL1xuICBvblVwZGF0ZShldmVudDogUmVhbHRpbWVFdmVudCwgbWV0YTogVXBkYXRlTWV0YSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBTdWJzY3JpcHRpb24tbGV2ZWwgZmFpbHVyZXM6IGEgcmVqZWN0ZWQgc3Vic2NyaWJlLCBhIG1hbGZvcm1lZFxuICAgKiBmcmFtZSwgYSBmYWlsZWQgc25hcHNob3QgZmV0Y2guIFRyYW5zaWVudCBzb2NrZXQgZHJvcHMgYXJlIGhhbmRsZWRcbiAgICogaW50ZXJuYWxseSBieSB0aGUgcmVjb25uZWN0IGxvb3AgYW5kIGFyZSBub3Qgc3VyZmFjZWQgaGVyZS5cbiAgICovXG4gIG9uRXJyb3I/KGVycm9yOiBFcnJvcik6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBidWlsdC1pbiBsYXN0LXZhbHVlIGZldGNoIGZvciB0aGlzIGNoYW5uZWwuIFJldHVybiBudWxsXG4gICAqIHdoZW4gdGhlcmUgaXMgbm8gc25hcHNob3QuIFVzZWZ1bCB3aGVuIGEgZG9tYWluIGhhcyBhIGJldHRlciBzb3VyY2VcbiAgICogb2YgdHJ1dGggdGhhbiB0aGUgY2FjaGUg4oCUIGUuZy4gZmFsbGluZyBiYWNrIHRvIHRoZSBvcmRlci1kZXRhaWxzIEFQSVxuICAgKiBmb3IgYW4gb3JkZXIgd2hvc2UgdHJhbnNpdGlvbnMgcHJlZGF0ZSBidXMgaW5zdHJ1bWVudGF0aW9uLlxuICAgKi9cbiAgZ2V0U25hcHNob3Q/KGNoYW5uZWw6IHN0cmluZyk6IFByb21pc2U8UmVhbHRpbWVFdmVudCB8IG51bGw+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmlwdGlvbiB7XG4gIHJlYWRvbmx5IGNoYW5uZWw6IHN0cmluZztcbiAgdW5zdWJzY3JpYmUoKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFsdGltZUNsaWVudCB7XG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gYSBjaGFubmVsLiBDaGFubmVscyBhcmUgdGhlIG9ubHkgY29uY2VwdCBoZXJlIOKAlCB0aGVcbiAgICogcmVhbHRpbWUgbGF5ZXIga25vd3Mgbm90aGluZyBhYm91dCBvcmRlcnM7IGAvb3JkZXJzL3tpZH1gIGlzIGFcbiAgICogbmFtaW5nIGNvbnZlbnRpb24gZW5mb3JjZWQgYnkgdGhlIHNlcnZpY2UncyBuYW1lc3BhY2UgcG9saWN5LCBub3QgYnlcbiAgICogdGhpcyBjbGllbnQuXG4gICAqXG4gICAqIE9uIHRoaXMgY2FsbCwgYW5kIGFnYWluIGFmdGVyIGV2ZXJ5IHJlY29ubmVjdCwgdGhlIFNESyBvcGVucyB0aGVcbiAgICogc3Vic2NyaXB0aW9uICpmaXJzdCogYW5kIG9ubHkgdGhlbiBmZXRjaGVzIHRoZSBjaGFubmVsJ3MgbGFzdCB2YWx1ZSxcbiAgICogc28gbm8gZXZlbnQgY2FuIGZhbGwgYmV0d2VlbiB0aGUgc25hcHNob3QgYW5kIHRoZSBzdHJlYW0uXG4gICAqL1xuICBzdWJzY3JpYmUoY2hhbm5lbDogc3RyaW5nLCBvcHRpb25zOiBTdWJzY3JpYmVPcHRpb25zKTogU3Vic2NyaXB0aW9uO1xuICAvKiogQ2xvc2UgdGhlIHNoYXJlZCBzb2NrZXQgYW5kIHN0b3AgcmVjb25uZWN0aW5nLiAqL1xuICBjbG9zZSgpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWx0aW1lQ29ubmVjdE9wdGlvbnMge1xuICAvKiogUmVzb2x2ZXMgZW5kcG9pbnRzIGZyb20gdGhlIGJ1aWx0LWluIHRhYmxlLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgZW5kcG9pbnRzYC4gKi9cbiAgZW52PzogUmVhbHRpbWVFbnY7XG4gIC8qKiBFeHBsaWNpdCBlbmRwb2ludHMsIGZvciBlbnZpcm9ubWVudHMgbm90IGluIHRoZSB0YWJsZS4gKi9cbiAgZW5kcG9pbnRzPzogUmVhbHRpbWVFbmRwb2ludHM7XG4gIC8qKlxuICAgKiBTdXBwbGllcyB0aGUgcGxhdGZvcm0gSldULiBDYWxsZWQgb24gY29ubmVjdCwgb24gZXZlcnkgKHJlKXN1YnNjcmliZSxcbiAgICogYW5kIGFnYWluIGFmdGVyIGEgdG9rZW4tZXhwaXJ5IHJlY29ubmVjdCDigJQgc28gcmV0dXJuaW5nIGEgZnJlc2ggdG9rZW5cbiAgICogZnJvbSB5b3VyIHNlc3Npb24gc3RvcmUgaXMgZW5vdWdoIHRvIGtlZXAgYSBsb25nLWxpdmVkIGNvbm5lY3Rpb25cbiAgICogYXV0aGVudGljYXRlZC5cbiAgICovXG4gIGdldFRva2VuKCk6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgLyoqIEluamVjdCBhIFdlYlNvY2tldCBpbXBsZW1lbnRhdGlvbi4gRGVmYXVsdHMgdG8gYGdsb2JhbFRoaXMuV2ViU29ja2V0YC4gKi9cbiAgd2ViU29ja2V0SW1wbD86IFdlYlNvY2tldEN0b3I7XG4gIC8qKiBJbmplY3QgYSBmZXRjaCBpbXBsZW1lbnRhdGlvbiBmb3Igc25hcHNob3QgZmV0Y2hlcy4gRGVmYXVsdHMgdG8gYGdsb2JhbFRoaXMuZmV0Y2hgLiAqL1xuICBmZXRjaEZuPzogdHlwZW9mIGZldGNoO1xuICAvKiogQmFja29mZiBjZWlsaW5nIGZvciByZWNvbm5lY3RzLiBEZWZhdWx0IDMwXzAwMC4gKi9cbiAgbWF4UmVjb25uZWN0RGVsYXlNcz86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFN1YnNjcmlwdGlvblJlY29yZCB7XG4gIGlkOiBzdHJpbmc7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgb3B0aW9uczogU3Vic2NyaWJlT3B0aW9ucztcbiAgLyoqIEhpZ2hlc3QgZW52ZWxvcGUgaWQgZGVsaXZlcmVkIHNvIGZhciDigJQgdGhlIG9yZGVyaW5nL2RlZHVwZSBndWFyZC4gKi9cbiAgbGFzdEV2ZW50SWQ/OiBzdHJpbmc7XG4gIC8qKiBDbGVhcmVkIG9uIHNvY2tldCBsb3NzLCBzZXQgb25jZSB0aGUgc2VydmVyIGFja3MgdGhlIHN1YnNjcmliZS4gKi9cbiAgc2VudDogYm9vbGVhbjtcbiAgY2xvc2VkOiBib29sZWFuO1xufVxuXG5jb25zdCBCQVNFX1JFQ09OTkVDVF9ERUxBWV9NUyA9IDUwMDtcbmNvbnN0IERFRkFVTFRfTUFYX1JFQ09OTkVDVF9ERUxBWV9NUyA9IDMwXzAwMDtcbmNvbnN0IERFRkFVTFRfS0VFUEFMSVZFX1RJTUVPVVRfTVMgPSA2MF8wMDA7XG4vKipcbiAqIEdyYWNlIG9uIHRvcCBvZiB0aGUgc2VydmVyJ3MgYWR2ZXJ0aXNlZCBrZWVwYWxpdmUgaW50ZXJ2YWwgYmVmb3JlIHdlXG4gKiBjYWxsIHRoZSBjb25uZWN0aW9uIGRlYWQuIEEgYGthYCBpcyBkdWUgZXZlcnkgYGNvbm5lY3Rpb25UaW1lb3V0TXNgO1xuICogd2FpdGluZyAxLjXDlyBhYnNvcmJzIG5vcm1hbCBqaXR0ZXIgd2l0aG91dCBsZXR0aW5nIGEgYmxhY2staG9sZWRcbiAqIHNvY2tldCBzaXQgdGhlcmUgbG9va2luZyBoZWFsdGh5LlxuICovXG5jb25zdCBLRUVQQUxJVkVfR1JBQ0UgPSAxLjU7XG4vKipcbiAqIEhvdyBsb25nIGEgc29ja2V0IG1heSBzaXQgYmV0d2VlbiBcIndlIHN0YXJ0ZWQgb3BlbmluZyBpdFwiIGFuZFxuICogYGNvbm5lY3Rpb25fYWNrYCBiZWZvcmUgd2UgZ2l2ZSB1cCBvbiBpdC5cbiAqXG4gKiBUaGUga2VlcGFsaXZlIHdhdGNoZG9nIGNhbiBvbmx5IHN0YXJ0IG9uY2UgYSBmcmFtZSBoYXMgYXJyaXZlZCwgc28gaXRcbiAqIGNhbm5vdCBjb3ZlciB0aGUgaGFuZHNoYWtlIGl0c2VsZi4gQSBzb2NrZXQgd2hvc2UgVENQL1dTIG9wZW4gc3VjY2VlZHNcbiAqIGJ1dCB3aGljaCB0aGVuIGdvZXMgc2lsZW50IC0gYmxhY2staG9sZWQgY29ubmVjdGlvbiwgTkFUIG1hcHBpbmdcbiAqIGRyb3BwZWQgcmlnaHQgYWZ0ZXIgb3BlbiwgcmFkaW8gZG96aW5nIC0gd291bGQgb3RoZXJ3aXNlIG5ldmVyIGZpcmVcbiAqIGBvbmNsb3NlYCwgbmV2ZXIgYXJtIHRoZSBrZWVwYWxpdmUsIGFuZCBsZWF2ZSBgY29ubmVjdGluZ2AgdHJ1ZSBzb1xuICogYGVuc3VyZVNvY2tldCgpYCBzaG9ydC1jaXJjdWl0cyBmb3JldmVyLiBFdmVyeSBzdWJzY3JpcHRpb24gd291bGQgYmVcbiAqIHNpbGVudGx5IGRlYWQgd2l0aCBub3RoaW5nIHN1cmZhY2VkLlxuICpcbiAqIEl0IGNvdmVycyB0aGUgdG9rZW4gc3RlcCB0b28sIHdoaWNoIGlzIHdoeSBpdCBpcyBhcm1lZCBiZWZvcmVcbiAqIGBnZXRUb2tlbigpYCBpcyBhd2FpdGVkIHJhdGhlciB0aGFuIGFmdGVyIHRoZSBzb2NrZXQgZXhpc3RzOiBhblxuICogYXBwLXN1cHBsaWVkIHRva2VuIHJlZnJlc2ggaXMgdXN1YWxseSBhIGBmZXRjaGAsIGFuZCBhIGBmZXRjaGAgdGhhdCBuZXZlclxuICogc2V0dGxlcyBwcm9kdWNlcyB0aGUgc2FtZSBwZXJtYW5lbnQgd2VkZ2Ugd2l0aG91dCBldmVyIGNyZWF0aW5nIGEgc29ja2V0LlxuICovXG5jb25zdCBDT05ORUNUX0RFQURMSU5FX01TID0gMTVfMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdChvcHRpb25zOiBSZWFsdGltZUNvbm5lY3RPcHRpb25zKTogUmVhbHRpbWVDbGllbnQge1xuICBjb25zdCBlbmRwb2ludHMgPSByZXNvbHZlRW5kcG9pbnRzKG9wdGlvbnMpO1xuICBjb25zdCBXZWJTb2NrZXRJbXBsID0gb3B0aW9ucy53ZWJTb2NrZXRJbXBsID8/IGdsb2JhbFdlYlNvY2tldCgpO1xuICBjb25zdCBmZXRjaEZuID0gb3B0aW9ucy5mZXRjaEZuID8/IChnbG9iYWxUaGlzLmZldGNoIGFzIHR5cGVvZiBmZXRjaCk7XG4gIGNvbnN0IG1heFJlY29ubmVjdERlbGF5TXMgPSBvcHRpb25zLm1heFJlY29ubmVjdERlbGF5TXMgPz8gREVGQVVMVF9NQVhfUkVDT05ORUNUX0RFTEFZX01TO1xuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgU3Vic2NyaXB0aW9uUmVjb3JkPigpO1xuXG4gIGxldCBzb2NrZXQ6IE1pbmltYWxXZWJTb2NrZXQgfCB1bmRlZmluZWQ7XG4gIGxldCBhY2tlZCA9IGZhbHNlO1xuICBsZXQgY29ubmVjdGluZyA9IGZhbHNlO1xuICBsZXQgY2xvc2VkQnlDYWxsZXIgPSBmYWxzZTtcbiAgbGV0IHJlY29ubmVjdEF0dGVtcHQgPSAwO1xuICBsZXQgcmVjb25uZWN0VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICBsZXQga2VlcGFsaXZlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICBsZXQgY29ubmVjdFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgbGV0IGtlZXBhbGl2ZVRpbWVvdXRNcyA9IERFRkFVTFRfS0VFUEFMSVZFX1RJTUVPVVRfTVM7XG4gIC8qKlxuICAgKiBCdW1wZWQgZm9yIGV2ZXJ5IGNvbm5lY3QgYXR0ZW1wdCwgYW5kIGFnYWluIHdoZW4gdGhlIGNvbm5lY3QgZGVhZGxpbmVcbiAgICogYWJhbmRvbnMgb25lLiBgZW5zdXJlU29ja2V0YCdzIGFzeW5jIGJvZHkgY2hlY2tzIGl0IGFmdGVyIGV2ZXJ5IGBhd2FpdGBcbiAgICogc28gYSBzbG93IGBnZXRUb2tlbigpYCB0aGF0IHNldHRsZXMgbGF0ZSBjYW5ub3QgYWRvcHQgaXRzIHNvY2tldCBvdmVyIGFcbiAgICogbmV3ZXIgYXR0ZW1wdCdzLlxuICAgKi9cbiAgbGV0IGNvbm5lY3RHZW5lcmF0aW9uID0gMDtcblxuICAvLyDilIDilIDilIAgU29ja2V0IGxpZmVjeWNsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBmdW5jdGlvbiBlbnN1cmVTb2NrZXQoKTogdm9pZCB7XG4gICAgaWYgKGNsb3NlZEJ5Q2FsbGVyIHx8IGNvbm5lY3RpbmcgfHwgc29ja2V0KSByZXR1cm47XG4gICAgY29ubmVjdGluZyA9IHRydWU7XG4gICAgY29uc3QgZ2VuZXJhdGlvbiA9ICsrY29ubmVjdEdlbmVyYXRpb247XG5cbiAgICAvLyBBcm1lZCBCRUZPUkUgdGhlIHRva2VuIGF3YWl0LCBub3QgYWZ0ZXIgdGhlIHNvY2tldCBleGlzdHMuIGBnZXRUb2tlbigpYFxuICAgIC8vIGlzIGFwcC1zdXBwbGllZCBhbmQgdGhlIG5vcm1hbCBpbXBsZW1lbnRhdGlvbiBpcyBhIGBmZXRjaGAsIHdoaWNoIGNhblxuICAgIC8vIGhhbmcgaW5kZWZpbml0ZWx5IGFjcm9zcyBhIG5ldHdvcmsgdHJhbnNpdGlvbi4gSWYgaXQgbmV2ZXIgc2V0dGxlcyBhbmRcbiAgICAvLyB0aGUgZGVhZGxpbmUgd2VyZSBhcm1lZCBsYXRlciwgYGNvbm5lY3RpbmdgIHdvdWxkIHN0YXkgdHJ1ZSB3aXRoIG5vXG4gICAgLy8gc29ja2V0IGFuZCBubyB0aW1lciwgYHNjaGVkdWxlUmVjb25uZWN0KClgIHdvdWxkIG5ldmVyIHJ1biwgYW5kIGV2ZXJ5XG4gICAgLy8gc3Vic2VxdWVudCBgc3Vic2NyaWJlKClgIHdvdWxkIHNob3J0LWNpcmN1aXQgb24gYGNvbm5lY3RpbmdgIC0gdGhlXG4gICAgLy8gY2xpZW50IGRlYWQgZm9yIHRoZSBwYWdlJ3MgbGlmZXRpbWUgd2l0aCBub3RoaW5nIG9uIGBvbkVycm9yYC5cbiAgICBhcm1Db25uZWN0RGVhZGxpbmUoZ2VuZXJhdGlvbik7XG5cbiAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgd3M6IE1pbmltYWxXZWJTb2NrZXQ7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IG9wdGlvbnMuZ2V0VG9rZW4oKTtcbiAgICAgICAgLy8gVGhlIGRlYWRsaW5lIG1heSBoYXZlIGFiYW5kb25lZCB0aGlzIGF0dGVtcHQgd2hpbGUgdGhlIHRva2VuIHdhc1xuICAgICAgICAvLyBwZW5kaW5nLiBCYWlsIGJlZm9yZSBidWlsZGluZyBhIHNvY2tldCBub2JvZHkgd2lsbCBvd24uXG4gICAgICAgIGlmIChjbG9zZWRCeUNhbGxlciB8fCBnZW5lcmF0aW9uICE9PSBjb25uZWN0R2VuZXJhdGlvbikgcmV0dXJuO1xuICAgICAgICBjb25zdCBoZWFkZXIgPSBhdXRoSGVhZGVyKGVuZHBvaW50cy5odHRwRG9tYWluLCB0b2tlbik7XG4gICAgICAgIHdzID0gbmV3IFdlYlNvY2tldEltcGwoYHdzczovLyR7ZW5kcG9pbnRzLnJlYWx0aW1lRG9tYWlufS9ldmVudC9yZWFsdGltZWAsIFtcbiAgICAgICAgICBFVkVOVF9XU19TVUJQUk9UT0NPTCxcbiAgICAgICAgICBhdXRoU3VicHJvdG9jb2woaGVhZGVyKSxcbiAgICAgICAgXSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IGNvbm5lY3RHZW5lcmF0aW9uKSByZXR1cm47XG4gICAgICAgIGNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgY2xlYXJDb25uZWN0RGVhZGxpbmUoKTtcbiAgICAgICAgYnJvYWRjYXN0RXJyb3IodG9FcnJvcihlcnIsICdyZWFsdGltZTogZmFpbGVkIHRvIG9wZW4gY29ubmVjdGlvbicpKTtcbiAgICAgICAgc2NoZWR1bGVSZWNvbm5lY3QoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xvc2VkQnlDYWxsZXIgfHwgZ2VuZXJhdGlvbiAhPT0gY29ubmVjdEdlbmVyYXRpb24pIHtcbiAgICAgICAgLy8gU3VwZXJzZWRlZCBiZXR3ZWVuIHRoZSB0b2tlbiByZXNvbHZpbmcgYW5kIHRoZSBzb2NrZXQgb3BlbmluZy5cbiAgICAgICAgLy8gQ2xvc2UgdGhlIG9ycGhhbiByYXRoZXIgdGhhbiBsZWFraW5nIGl0LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHdzLmNsb3NlKDEwMDAsICdzdXBlcnNlZGVkJyk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIE5vdGhpbmcgdXNlZnVsIHRvIGRvOyBpdCB3YXMgbmV2ZXIgYWRvcHRlZC5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNvY2tldCA9IHdzO1xuICAgICAgd3Mub25vcGVuID0gKCkgPT4ge1xuICAgICAgICB3cy5zZW5kKGNvbm5lY3Rpb25Jbml0RnJhbWUoKSk7XG4gICAgICB9O1xuICAgICAgd3Mub25tZXNzYWdlID0gKGV2KSA9PiB7XG4gICAgICAgIGFybUtlZXBhbGl2ZSgpO1xuICAgICAgICBoYW5kbGVGcmFtZSh0eXBlb2YgZXYuZGF0YSA9PT0gJ3N0cmluZycgPyBldi5kYXRhIDogU3RyaW5nKGV2LmRhdGEpKTtcbiAgICAgIH07XG4gICAgICB3cy5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAvLyBgb25jbG9zZWAgYWx3YXlzIGZvbGxvd3M7IHJlY29ubmVjdCBpcyBkcml2ZW4gZnJvbSB0aGVyZSBzbyB0aGVcbiAgICAgICAgLy8gdHdvIHBhdGhzIGNhbid0IGJvdGggc2NoZWR1bGUgYSByZXRyeS5cbiAgICAgIH07XG4gICAgICB3cy5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgICBpZiAoIWNsb3NlZEJ5Q2FsbGVyKSBzY2hlZHVsZVJlY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGVhcmRvd25Tb2NrZXQoKTogdm9pZCB7XG4gICAgaWYgKHNvY2tldCkge1xuICAgICAgc29ja2V0Lm9ub3BlbiA9IG51bGw7XG4gICAgICBzb2NrZXQub25tZXNzYWdlID0gbnVsbDtcbiAgICAgIHNvY2tldC5vbmVycm9yID0gbnVsbDtcbiAgICAgIHNvY2tldC5vbmNsb3NlID0gbnVsbDtcbiAgICB9XG4gICAgc29ja2V0ID0gdW5kZWZpbmVkO1xuICAgIGNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICBhY2tlZCA9IGZhbHNlO1xuICAgIGNsZWFyS2VlcGFsaXZlKCk7XG4gICAgY2xlYXJDb25uZWN0RGVhZGxpbmUoKTtcbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSByZWNvcmQuc2VudCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhaWwgYSBoYW5kc2hha2UgdGhhdCBuZXZlciBjb21wbGV0ZXMuIENsZWFyZWQgYnkgYGNvbm5lY3Rpb25fYWNrYCxcbiAgICogYWZ0ZXIgd2hpY2ggdGhlIGtlZXBhbGl2ZSB3YXRjaGRvZyB0YWtlcyBvdmVyLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJtQ29ubmVjdERlYWRsaW5lKGdlbmVyYXRpb246IG51bWJlcik6IHZvaWQge1xuICAgIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk7XG4gICAgY29ubmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gY29ubmVjdEdlbmVyYXRpb24pIHJldHVybjtcbiAgICAgIC8vIEFiYW5kb24gdGhpcyBhdHRlbXB0IGJ5IHJldGlyaW5nIGl0cyBnZW5lcmF0aW9uLiBBIGBnZXRUb2tlbigpYCBzdGlsbFxuICAgICAgLy8gcGVuZGluZyB3aGVuIHRoaXMgZmlyZXMgY2FuIHRoZW4gbm8gbG9uZ2VyIGluc3RhbGwgaXRzIHNvY2tldCwgd2hpY2hcbiAgICAgIC8vIHdvdWxkIG90aGVyd2lzZSBsYW5kIHVuLWRlYWRsaW5lZCBhbmQgdW4tYWNrZWQgb24gdG9wIG9mIHRoZSBmcmVzaFxuICAgICAgLy8gYXR0ZW1wdCBzY2hlZHVsZWQgYmVsb3cuXG4gICAgICBjb25uZWN0R2VuZXJhdGlvbisrO1xuICAgICAgY29uc3Qgc3RhbGxlZCA9IHNvY2tldDtcbiAgICAgIHRlYXJkb3duU29ja2V0KCk7XG4gICAgICBicm9hZGNhc3RFcnJvcihuZXcgRXJyb3IoJ3JlYWx0aW1lOiBjb25uZWN0aW9uIHRpbWVkIG91dCBiZWZvcmUgY29ubmVjdGlvbl9hY2snKSk7XG4gICAgICB0cnkge1xuICAgICAgICBzdGFsbGVkPy5jbG9zZSg0MDAxLCAnY29ubmVjdCB0aW1lb3V0Jyk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQWxyZWFkeSBnb25lOyB0aGUgcmVjb25uZWN0IGJlbG93IGlzIHdoYXQgbWF0dGVycy5cbiAgICAgIH1cbiAgICAgIGlmICghY2xvc2VkQnlDYWxsZXIpIHNjaGVkdWxlUmVjb25uZWN0KCk7XG4gICAgfSwgQ09OTkVDVF9ERUFETElORV9NUyk7XG4gICAgdW5yZWYoY29ubmVjdFRpbWVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk6IHZvaWQge1xuICAgIGlmIChjb25uZWN0VGltZXIpIGNsZWFyVGltZW91dChjb25uZWN0VGltZXIpO1xuICAgIGNvbm5lY3RUaW1lciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlUmVjb25uZWN0KCk6IHZvaWQge1xuICAgIGlmIChjbG9zZWRCeUNhbGxlciB8fCByZWNvbm5lY3RUaW1lcikgcmV0dXJuO1xuICAgIGlmIChzdWJzY3JpcHRpb25zLnNpemUgPT09IDApIHJldHVybjtcbiAgICBjb25zdCBkZWxheSA9IGppdHRlcmVkQmFja29mZihyZWNvbm5lY3RBdHRlbXB0LCBtYXhSZWNvbm5lY3REZWxheU1zKTtcbiAgICByZWNvbm5lY3RBdHRlbXB0Kys7XG4gICAgcmVjb25uZWN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlY29ubmVjdFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgZW5zdXJlU29ja2V0KCk7XG4gICAgfSwgZGVsYXkpO1xuICAgIHVucmVmKHJlY29ubmVjdFRpbWVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFybUtlZXBhbGl2ZSgpOiB2b2lkIHtcbiAgICBjbGVhcktlZXBhbGl2ZSgpO1xuICAgIGtlZXBhbGl2ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBObyBmcmFtZSDigJQgbm90IGV2ZW4gYSBga2FgIOKAlCB3aXRoaW4gdGhlIGdyYWNlIHdpbmRvdy4gVGhlIHNvY2tldFxuICAgICAgLy8gbWF5IGxvb2sgb3BlbiB3aGlsZSBkZWxpdmVyaW5nIG5vdGhpbmcgKGJhY2tncm91bmRlZCB0YWIsIGRvemluZ1xuICAgICAgLy8gcmFkaW8sIHNpbGVudGx5IGRyb3BwZWQgTkFUIG1hcHBpbmcpOyBmb3JjZSBpdCBjbG9zZWQgc28gdGhlXG4gICAgICAvLyBub3JtYWwgcmVjb25uZWN0IHBhdGggcnVucy5cbiAgICAgIGNvbnN0IGRlYWQgPSBzb2NrZXQ7XG4gICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGVhZD8uY2xvc2UoNDAwMCwgJ2tlZXBhbGl2ZSB0aW1lb3V0Jyk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQWxyZWFkeSBnb25lOyB0aGUgcmVjb25uZWN0IGJlbG93IGlzIHdoYXQgbWF0dGVycy5cbiAgICAgIH1cbiAgICAgIGlmICghY2xvc2VkQnlDYWxsZXIpIHNjaGVkdWxlUmVjb25uZWN0KCk7XG4gICAgfSwga2VlcGFsaXZlVGltZW91dE1zICogS0VFUEFMSVZFX0dSQUNFKTtcbiAgICB1bnJlZihrZWVwYWxpdmVUaW1lcik7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhcktlZXBhbGl2ZSgpOiB2b2lkIHtcbiAgICBpZiAoa2VlcGFsaXZlVGltZXIpIGNsZWFyVGltZW91dChrZWVwYWxpdmVUaW1lcik7XG4gICAga2VlcGFsaXZlVGltZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyDilIDilIDilIAgRnJhbWUgaGFuZGxpbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgZnVuY3Rpb24gaGFuZGxlRnJhbWUocmF3OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmcmFtZSA9IHBhcnNlU2VydmVyRnJhbWUocmF3KTtcbiAgICBpZiAoIWZyYW1lKSByZXR1cm47XG5cbiAgICBzd2l0Y2ggKGZyYW1lLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2Nvbm5lY3Rpb25fYWNrJzoge1xuICAgICAgICBhY2tlZCA9IHRydWU7XG4gICAgICAgIGNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgcmVjb25uZWN0QXR0ZW1wdCA9IDA7XG4gICAgICAgIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk7XG4gICAgICAgIGNvbnN0IGFkdmVydGlzZWQgPSAoZnJhbWUgYXMgeyBjb25uZWN0aW9uVGltZW91dE1zPzogbnVtYmVyIH0pLmNvbm5lY3Rpb25UaW1lb3V0TXM7XG4gICAgICAgIGlmICh0eXBlb2YgYWR2ZXJ0aXNlZCA9PT0gJ251bWJlcicgJiYgYWR2ZXJ0aXNlZCA+IDApIGtlZXBhbGl2ZVRpbWVvdXRNcyA9IGFkdmVydGlzZWQ7XG4gICAgICAgIGFybUtlZXBhbGl2ZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSB2b2lkIG9wZW5TdWJzY3JpcHRpb24ocmVjb3JkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAna2EnOlxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdzdWJzY3JpYmVfc3VjY2Vzcyc6IHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnZGF0YSc6IHtcbiAgICAgICAgY29uc3QgZGF0YUZyYW1lID0gZnJhbWUgYXMgRGF0YUZyYW1lO1xuICAgICAgICBjb25zdCByZWNvcmQgPSBzdWJzY3JpcHRpb25zLmdldChkYXRhRnJhbWUuaWQpO1xuICAgICAgICBpZiAoIXJlY29yZCB8fCByZWNvcmQuY2xvc2VkKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXJzZURhdGFGcmFtZUV2ZW50KGRhdGFGcmFtZSk7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gYXNSZWFsdGltZUV2ZW50KHBheWxvYWQpO1xuICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgcmVwb3J0RXJyb3IocmVjb3JkLCBuZXcgRXJyb3IoYHJlYWx0aW1lOiBkcm9wcGVkIG1hbGZvcm1lZCBldmVudCBvbiAke3JlY29yZC5jaGFubmVsfWApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVsaXZlcihyZWNvcmQsIGV2ZW50LCAnbGl2ZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlICdzdWJzY3JpYmVfZXJyb3InOlxuICAgICAgY2FzZSAnY29ubmVjdGlvbl9lcnJvcic6XG4gICAgICBjYXNlICdwdWJsaXNoX2Vycm9yJzoge1xuICAgICAgICBjb25zdCBlcnJvckZyYW1lID0gZnJhbWUgYXMgRXJyb3JGcmFtZTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGByZWFsdGltZTogJHtlcnJvckZyYW1lTWVzc2FnZShlcnJvckZyYW1lKX1gO1xuICAgICAgICBpZiAoZXJyb3JGcmFtZS5pZCkge1xuICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHN1YnNjcmlwdGlvbnMuZ2V0KGVycm9yRnJhbWUuaWQpO1xuICAgICAgICAgIGlmIChyZWNvcmQpIHtcbiAgICAgICAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgbmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJvYWRjYXN0RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGl2ZXIocmVjb3JkOiBTdWJzY3JpcHRpb25SZWNvcmQsIGV2ZW50OiBSZWFsdGltZUV2ZW50LCBvcmlnaW46IFVwZGF0ZU1ldGFbJ29yaWdpbiddKSB7XG4gICAgaWYgKHJlY29yZC5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAoIWlzTmV3ZXIoZXZlbnQuaWQsIHJlY29yZC5sYXN0RXZlbnRJZCkpIHJldHVybjtcbiAgICByZWNvcmQubGFzdEV2ZW50SWQgPSBldmVudC5pZDtcbiAgICB0cnkge1xuICAgICAgcmVjb3JkLm9wdGlvbnMub25VcGRhdGUoZXZlbnQsIHsgY2hhbm5lbDogcmVjb3JkLmNoYW5uZWwsIG9yaWdpbiB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgdG9FcnJvcihlcnIsICdyZWFsdGltZTogb25VcGRhdGUgdGhyZXcnKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVwb3J0RXJyb3IocmVjb3JkOiBTdWJzY3JpcHRpb25SZWNvcmQsIGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGlmICghcmVjb3JkLm9wdGlvbnMub25FcnJvcikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICByZWNvcmQub3B0aW9ucy5vbkVycm9yKGVycm9yKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEEgdGhyb3dpbmcgZXJyb3IgaGFuZGxlciBtdXN0IG5vdCB0YWtlIGRvd24gdGhlIHNvY2tldC5cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBicm9hZGNhc3RFcnJvcihlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSByZXBvcnRFcnJvcihyZWNvcmQsIGVycm9yKTtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBTdWJzY3JpcHRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBPcGVuIChvciByZS1vcGVuKSBvbmUgc3Vic2NyaXB0aW9uOiBzZW5kIHRoZSBzdWJzY3JpYmUgZnJhbWUgZmlyc3QsXG4gICAqIHRoZW4gZmV0Y2ggdGhlIGNoYW5uZWwncyBsYXN0IHZhbHVlLlxuICAgKlxuICAgKiBPcmRlciBtYXR0ZXJzLiBBcHBTeW5jIEV2ZW50cyBoYXMgbm8gcmV0ZW50aW9uLCBzbyBhbnl0aGluZyBwdWJsaXNoZWRcbiAgICogYmV0d2VlbiBcIndlIGFza2VkIGZvciB0aGUgc25hcHNob3RcIiBhbmQgXCJ0aGUgc3RyZWFtIGlzIGxpdmVcIiB3b3VsZCBiZVxuICAgKiBsb3N0IGZvcmV2ZXIuIFN1YnNjcmliaW5nIGZpcnN0IG1lYW5zIHRoZSB3b3JzdCBjYXNlIGlzIGEgZHVwbGljYXRlLFxuICAgKiB3aGljaCB0aGUgVUxJRCBndWFyZCBpbiBgZGVsaXZlcmAgYWJzb3Jicy5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW5TdWJzY3JpcHRpb24ocmVjb3JkOiBTdWJzY3JpcHRpb25SZWNvcmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocmVjb3JkLmNsb3NlZCB8fCAhc29ja2V0IHx8ICFhY2tlZCB8fCByZWNvcmQuc2VudCkgcmV0dXJuO1xuICAgIGxldCB0b2tlbjogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICB0b2tlbiA9IGF3YWl0IG9wdGlvbnMuZ2V0VG9rZW4oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgdG9FcnJvcihlcnIsICdyZWFsdGltZTogZ2V0VG9rZW4gZmFpbGVkJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVjb3JkLmNsb3NlZCB8fCAhc29ja2V0IHx8IHNvY2tldC5yZWFkeVN0YXRlICE9PSBXU19PUEVOKSByZXR1cm47XG4gICAgcmVjb3JkLnNlbnQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBzb2NrZXQuc2VuZChcbiAgICAgICAgc3Vic2NyaWJlRnJhbWUoXG4gICAgICAgICAgcmVjb3JkLmlkLFxuICAgICAgICAgIHRvQ2hhbm5lbFBhdGgocmVjb3JkLmNoYW5uZWwpLFxuICAgICAgICAgIGF1dGhIZWFkZXIoZW5kcG9pbnRzLmh0dHBEb21haW4sIHRva2VuKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZWNvcmQuc2VudCA9IGZhbHNlO1xuICAgICAgcmVwb3J0RXJyb3IocmVjb3JkLCB0b0Vycm9yKGVyciwgJ3JlYWx0aW1lOiBzdWJzY3JpYmUgZnJhbWUgZmFpbGVkIHRvIHNlbmQnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IGh5ZHJhdGUocmVjb3JkLCB0b2tlbik7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBoeWRyYXRlKHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gcmVjb3JkLm9wdGlvbnMuZ2V0U25hcHNob3RcbiAgICAgICAgPyBhd2FpdCByZWNvcmQub3B0aW9ucy5nZXRTbmFwc2hvdChyZWNvcmQuY2hhbm5lbClcbiAgICAgICAgOiBhd2FpdCBmZXRjaExhdGVzdChyZWNvcmQuY2hhbm5lbCwgdG9rZW4pO1xuICAgICAgaWYgKHNuYXBzaG90KSBkZWxpdmVyKHJlY29yZCwgc25hcHNob3QsICdzbmFwc2hvdCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVwb3J0RXJyb3IocmVjb3JkLCB0b0Vycm9yKGVyciwgYHJlYWx0aW1lOiBzbmFwc2hvdCBmZXRjaCBmYWlsZWQgZm9yICR7cmVjb3JkLmNoYW5uZWx9YCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoTGF0ZXN0KGNoYW5uZWw6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IFByb21pc2U8UmVhbHRpbWVFdmVudCB8IG51bGw+IHtcbiAgICBjb25zdCB1cmwgPSBgJHtlbmRwb2ludHMuYXBpQmFzZX0vdjEvcmVhbHRpbWUvbGF0ZXN0P2NoYW5uZWw9JHtlbmNvZGVVUklDb21wb25lbnQoY2hhbm5lbCl9YDtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEZuKHVybCwgeyBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0gfSk7XG4gICAgaWYgKHJlcy5zdGF0dXMgPT09IDQwNCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcihgc25hcHNob3QgZmV0Y2ggcmV0dXJuZWQgSFRUUCAke3Jlcy5zdGF0dXN9YCk7XG4gICAgY29uc3QgYm9keSA9IChhd2FpdCByZXMuanNvbigpKSBhcyB7IGV2ZW50PzogdW5rbm93biB9O1xuICAgIHJldHVybiBhc1JlYWx0aW1lRXZlbnQoYm9keT8uZXZlbnQpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdWJzY3JpYmUoY2hhbm5lbCwgc3Vic2NyaWJlT3B0aW9ucykge1xuICAgICAgdG9DaGFubmVsUGF0aChjaGFubmVsKTtcbiAgICAgIGNvbnN0IHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkID0ge1xuICAgICAgICBpZDogcmFuZG9tSWQoKSxcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgb3B0aW9uczogc3Vic2NyaWJlT3B0aW9ucyxcbiAgICAgICAgc2VudDogZmFsc2UsXG4gICAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgc3Vic2NyaXB0aW9ucy5zZXQocmVjb3JkLmlkLCByZWNvcmQpO1xuXG4gICAgICBpZiAoYWNrZWQgJiYgc29ja2V0KSB7XG4gICAgICAgIHZvaWQgb3BlblN1YnNjcmlwdGlvbihyZWNvcmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5zdXJlU29ja2V0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5uZWwsXG4gICAgICAgIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICAgIGlmIChyZWNvcmQuY2xvc2VkKSByZXR1cm47XG4gICAgICAgICAgcmVjb3JkLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgc3Vic2NyaXB0aW9ucy5kZWxldGUocmVjb3JkLmlkKTtcbiAgICAgICAgICBpZiAoc29ja2V0ICYmIHNvY2tldC5yZWFkeVN0YXRlID09PSBXU19PUEVOICYmIHJlY29yZC5zZW50KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzb2NrZXQuc2VuZCh1bnN1YnNjcmliZUZyYW1lKHJlY29yZC5pZCkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIC8vIFNvY2tldCBpcyBnb2luZyBhd2F5IGFueXdheTsgdGhlIHNlcnZlciBkcm9wcyB0aGVcbiAgICAgICAgICAgICAgLy8gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbm5lY3Rpb24gY2xvc2VzLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgY2xvc2VkQnlDYWxsZXIgPSB0cnVlO1xuICAgICAgaWYgKHJlY29ubmVjdFRpbWVyKSBjbGVhclRpbWVvdXQocmVjb25uZWN0VGltZXIpO1xuICAgICAgcmVjb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSByZWNvcmQuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIHN1YnNjcmlwdGlvbnMuY2xlYXIoKTtcbiAgICAgIGNvbnN0IG9wZW4gPSBzb2NrZXQ7XG4gICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3Blbj8uY2xvc2UoMTAwMCwgJ2NsaWVudCBjbG9zZWQnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBOb3RoaW5nIHVzZWZ1bCB0byBkbyBpZiB0aGUgc29ja2V0IGlzIGFscmVhZHkgdG9ybiBkb3duLlxuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbi8vIOKUgOKUgOKUgCBIZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZXNvbHZlRW5kcG9pbnRzKG9wdGlvbnM6IFJlYWx0aW1lQ29ubmVjdE9wdGlvbnMpOiBSZWFsdGltZUVuZHBvaW50cyB7XG4gIGlmIChvcHRpb25zLmVuZHBvaW50cykgcmV0dXJuIG9wdGlvbnMuZW5kcG9pbnRzO1xuICBpZiAoIW9wdGlvbnMuZW52KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWFsdGltZS5jb25uZWN0OiBwYXNzIGVpdGhlciB7ZW52fSBvciB7ZW5kcG9pbnRzfScpO1xuICB9XG4gIGNvbnN0IHJlc29sdmVkID0gZW5kcG9pbnRzRm9yKG9wdGlvbnMuZW52KTtcbiAgcmV0dXJuIHsgLi4ucmVzb2x2ZWQsIGFwaUJhc2U6IHJlc29sdmVkLmFwaUJhc2UgfHwgQVBJX0JBU0Vbb3B0aW9ucy5lbnZdIH07XG59XG5cbmZ1bmN0aW9uIGdsb2JhbFdlYlNvY2tldCgpOiBXZWJTb2NrZXRDdG9yIHtcbiAgY29uc3QgY3RvciA9IChnbG9iYWxUaGlzIGFzIHsgV2ViU29ja2V0PzogV2ViU29ja2V0Q3RvciB9KS5XZWJTb2NrZXQ7XG4gIGlmICghY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdyZWFsdGltZS5jb25uZWN0OiBubyBnbG9iYWwgV2ViU29ja2V0LiBQYXNzIHt3ZWJTb2NrZXRJbXBsfSAoTm9kZSA8IDIyLCBvciBhIHRlc3QgZG91YmxlKS4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGN0b3I7XG59XG5cbi8qKlxuICogRnVsbC1qaXR0ZXIgZXhwb25lbnRpYWwgYmFja29mZi4gRnVsbCBqaXR0ZXIgKHJhdGhlciB0aGFuXG4gKiBkZWxheSDCsSBqaXR0ZXIpIG1hdHRlcnMgaGVyZSBiZWNhdXNlIGV2ZXJ5IHRhYiB3YXRjaGluZyBhbiBvcmRlclxuICogcmVjb25uZWN0cyBvbiB0aGUgc2FtZSBzZXJ2ZXItc2lkZSBldmVudDsgd2l0aG91dCBpdCB0aGV5IHJldHJ5IGluXG4gKiBsb2Nrc3RlcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGppdHRlcmVkQmFja29mZihhdHRlbXB0OiBudW1iZXIsIG1heERlbGF5TXM6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGNlaWxpbmcgPSBNYXRoLm1pbihtYXhEZWxheU1zLCBCQVNFX1JFQ09OTkVDVF9ERUxBWV9NUyAqIDIgKiogYXR0ZW1wdCk7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjZWlsaW5nKTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tSWQoKTogc3RyaW5nIHtcbiAgY29uc3QgYyA9IChnbG9iYWxUaGlzIGFzIHsgY3J5cHRvPzogeyByYW5kb21VVUlEPzogKCkgPT4gc3RyaW5nIH0gfSkuY3J5cHRvO1xuICBpZiAoYz8ucmFuZG9tVVVJRCkgcmV0dXJuIGMucmFuZG9tVVVJRCgpO1xuICByZXR1cm4gYHN1Yi0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gO1xufVxuXG5mdW5jdGlvbiB0b0Vycm9yKGVycjogdW5rbm93biwgZmFsbGJhY2tNZXNzYWdlOiBzdHJpbmcpOiBFcnJvciB7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGVycjtcbiAgcmV0dXJuIG5ldyBFcnJvcihgJHtmYWxsYmFja01lc3NhZ2V9OiAke1N0cmluZyhlcnIpfWApO1xufVxuXG5mdW5jdGlvbiB1bnJlZih0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4pOiB2b2lkIHtcbiAgY29uc3QgdCA9IHRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH07XG4gIGlmICh0eXBlb2YgdC51bnJlZiA9PT0gJ2Z1bmN0aW9uJykgdC51bnJlZigpO1xufVxuIl19
|
package/dist/realtime/index.d.ts
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* getToken: () => session.jwt(),
|
|
15
15
|
* });
|
|
16
16
|
*
|
|
17
|
-
* const sub = client.subscribe(
|
|
17
|
+
* const sub = client.subscribe('delivery-updates', {
|
|
18
18
|
* onUpdate(event, meta) { render(event.data); },
|
|
19
19
|
* onError(err) { showOffline(err); },
|
|
20
20
|
* });
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
* stays a few KB in a frontend bundle and works unchanged in React
|
|
28
28
|
* Native. Do not import from `../` here.
|
|
29
29
|
*/
|
|
30
|
+
export { isChannelName, toChannelPath, nameFromChannelPath } from './channel';
|
|
30
31
|
import { connect } from './connect';
|
|
31
32
|
export declare const realtime: {
|
|
32
33
|
connect: typeof connect;
|
package/dist/realtime/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.base64UrlEncode = exports.authSubprotocol = exports.authHeader = exports.EVENT_WS_SUBPROTOCOL = exports.endpointsFor = exports.API_BASE = exports.isNewer = exports.asRealtimeEvent = exports.jitteredBackoff = exports.connect = exports.realtime = void 0;
|
|
3
|
+
exports.base64UrlEncode = exports.authSubprotocol = exports.authHeader = exports.EVENT_WS_SUBPROTOCOL = exports.endpointsFor = exports.API_BASE = exports.isNewer = exports.asRealtimeEvent = exports.jitteredBackoff = exports.connect = exports.realtime = exports.nameFromChannelPath = exports.toChannelPath = exports.isChannelName = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* `@uengage.io/platform-sdk/realtime` — browser-safe realtime client.
|
|
6
6
|
*
|
|
@@ -17,7 +17,7 @@ exports.base64UrlEncode = exports.authSubprotocol = exports.authHeader = exports
|
|
|
17
17
|
* getToken: () => session.jwt(),
|
|
18
18
|
* });
|
|
19
19
|
*
|
|
20
|
-
* const sub = client.subscribe(
|
|
20
|
+
* const sub = client.subscribe('delivery-updates', {
|
|
21
21
|
* onUpdate(event, meta) { render(event.data); },
|
|
22
22
|
* onError(err) { showOffline(err); },
|
|
23
23
|
* });
|
|
@@ -30,6 +30,10 @@ exports.base64UrlEncode = exports.authSubprotocol = exports.authHeader = exports
|
|
|
30
30
|
* stays a few KB in a frontend bundle and works unchanged in React
|
|
31
31
|
* Native. Do not import from `../` here.
|
|
32
32
|
*/
|
|
33
|
+
var channel_1 = require("./channel");
|
|
34
|
+
Object.defineProperty(exports, "isChannelName", { enumerable: true, get: function () { return channel_1.isChannelName; } });
|
|
35
|
+
Object.defineProperty(exports, "toChannelPath", { enumerable: true, get: function () { return channel_1.toChannelPath; } });
|
|
36
|
+
Object.defineProperty(exports, "nameFromChannelPath", { enumerable: true, get: function () { return channel_1.nameFromChannelPath; } });
|
|
33
37
|
const connect_1 = require("./connect");
|
|
34
38
|
exports.realtime = { connect: connect_1.connect };
|
|
35
39
|
var connect_2 = require("./connect");
|
|
@@ -46,4 +50,4 @@ Object.defineProperty(exports, "EVENT_WS_SUBPROTOCOL", { enumerable: true, get:
|
|
|
46
50
|
Object.defineProperty(exports, "authHeader", { enumerable: true, get: function () { return protocol_1.authHeader; } });
|
|
47
51
|
Object.defineProperty(exports, "authSubprotocol", { enumerable: true, get: function () { return protocol_1.authSubprotocol; } });
|
|
48
52
|
Object.defineProperty(exports, "base64UrlEncode", { enumerable: true, get: function () { return protocol_1.base64UrlEncode; } });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVhbHRpbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCxxQ0FBOEU7QUFBckUsd0dBQUEsYUFBYSxPQUFBO0FBQUUsd0dBQUEsYUFBYSxPQUFBO0FBQUUsOEdBQUEsbUJBQW1CLE9BQUE7QUFDMUQsdUNBQW9DO0FBRXZCLFFBQUEsUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFQLGlCQUFPLEVBQUUsQ0FBQztBQUVwQyxxQ0FVbUI7QUFUakIsa0dBQUEsT0FBTyxPQUFBO0FBQ1AsMEdBQUEsZUFBZSxPQUFBO0FBU2pCLHVDQUEwRTtBQUFqRSwyR0FBQSxlQUFlLE9BQUE7QUFBRSxtR0FBQSxPQUFPLE9BQUE7QUFDakMseUNBQStGO0FBQXRGLHFHQUFBLFFBQVEsT0FBQTtBQUFFLHlHQUFBLFlBQVksT0FBQTtBQUMvQix1Q0FBZ0c7QUFBdkYsZ0hBQUEsb0JBQW9CLE9BQUE7QUFBRSxzR0FBQSxVQUFVLE9BQUE7QUFBRSwyR0FBQSxlQUFlLE9BQUE7QUFBRSwyR0FBQSxlQUFlLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGBAdWVuZ2FnZS5pby9wbGF0Zm9ybS1zZGsvcmVhbHRpbWVgIOKAlCBicm93c2VyLXNhZmUgcmVhbHRpbWUgY2xpZW50LlxuICpcbiAqIEEgdGhpbiBjbGllbnQgZm9yIHRoZSBwbGF0Zm9ybSdzIEFwcFN5bmMgRXZlbnRzIEFQSTogaXQgb3ducyB0aGUgd2lyZVxuICogcHJvdG9jb2wsIHRoZSBrZWVwYWxpdmUgd2F0Y2hkb2csIHJlY29ubmVjdCB3aXRoIGppdHRlcmVkIGJhY2tvZmYsXG4gKiByZXN1YnNjcmliZSwgdG9rZW4gcmVmcmVzaCwgc25hcHNob3QgY2F0Y2gtdXAgb24gZXZlcnkgKHJlKWNvbm5lY3QsXG4gKiBhbmQgVUxJRC1iYXNlZCBvcmRlcmluZy9kZWR1cGUuIEFwcHMgb3duIHJlbmRlcmluZyBhbmQgY2hhbm5lbCBuYW1lcy5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmVhbHRpbWUgfSBmcm9tICdAdWVuZ2FnZS5pby9wbGF0Zm9ybS1zZGsvcmVhbHRpbWUnO1xuICpcbiAqIGNvbnN0IGNsaWVudCA9IHJlYWx0aW1lLmNvbm5lY3Qoe1xuICogICBlbnY6ICdwcm9kJyxcbiAqICAgZ2V0VG9rZW46ICgpID0+IHNlc3Npb24uand0KCksXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBzdWIgPSBjbGllbnQuc3Vic2NyaWJlKCdkZWxpdmVyeS11cGRhdGVzJywge1xuICogICBvblVwZGF0ZShldmVudCwgbWV0YSkgeyByZW5kZXIoZXZlbnQuZGF0YSk7IH0sXG4gKiAgIG9uRXJyb3IoZXJyKSB7IHNob3dPZmZsaW5lKGVycik7IH0sXG4gKiB9KTtcbiAqXG4gKiBzdWIudW5zdWJzY3JpYmUoKTtcbiAqIGBgYFxuICpcbiAqIFRoaXMgc3VicGF0aCBpcyBkZWxpYmVyYXRlbHkgaXNvbGF0ZWQgZnJvbSB0aGUgU0RLJ3MgbWFpbiBlbnRyeTogemVyb1xuICogcnVudGltZSBkZXBlbmRlbmNpZXMsIG5vIE5vZGUgYnVpbHQtaW5zLCBubyBzZXJ2ZXIgYXV0aCBjb2RlLCBzbyBpdFxuICogc3RheXMgYSBmZXcgS0IgaW4gYSBmcm9udGVuZCBidW5kbGUgYW5kIHdvcmtzIHVuY2hhbmdlZCBpbiBSZWFjdFxuICogTmF0aXZlLiBEbyBub3QgaW1wb3J0IGZyb20gYC4uL2AgaGVyZS5cbiAqL1xuZXhwb3J0IHsgaXNDaGFubmVsTmFtZSwgdG9DaGFubmVsUGF0aCwgbmFtZUZyb21DaGFubmVsUGF0aCB9IGZyb20gJy4vY2hhbm5lbCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAnLi9jb25uZWN0JztcblxuZXhwb3J0IGNvbnN0IHJlYWx0aW1lID0geyBjb25uZWN0IH07XG5cbmV4cG9ydCB7XG4gIGNvbm5lY3QsXG4gIGppdHRlcmVkQmFja29mZixcbiAgdHlwZSBSZWFsdGltZUNsaWVudCxcbiAgdHlwZSBSZWFsdGltZUNvbm5lY3RPcHRpb25zLFxuICB0eXBlIFN1YnNjcmlwdGlvbixcbiAgdHlwZSBTdWJzY3JpYmVPcHRpb25zLFxuICB0eXBlIFVwZGF0ZU1ldGEsXG4gIHR5cGUgTWluaW1hbFdlYlNvY2tldCxcbiAgdHlwZSBXZWJTb2NrZXRDdG9yLFxufSBmcm9tICcuL2Nvbm5lY3QnO1xuZXhwb3J0IHsgYXNSZWFsdGltZUV2ZW50LCBpc05ld2VyLCB0eXBlIFJlYWx0aW1lRXZlbnQgfSBmcm9tICcuL2VudmVsb3BlJztcbmV4cG9ydCB7IEFQSV9CQVNFLCBlbmRwb2ludHNGb3IsIHR5cGUgUmVhbHRpbWVFbmRwb2ludHMsIHR5cGUgUmVhbHRpbWVFbnYgfSBmcm9tICcuL2VuZHBvaW50cyc7XG5leHBvcnQgeyBFVkVOVF9XU19TVUJQUk9UT0NPTCwgYXV0aEhlYWRlciwgYXV0aFN1YnByb3RvY29sLCBiYXNlNjRVcmxFbmNvZGUgfSBmcm9tICcuL3Byb3RvY29sJztcbiJdfQ==
|
package/dist/upsell/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { upsell, createUpsellClient, UpsellApiError, type UpsellClient, type UpsellClientOptions, type UpsellEnv, } from './client';
|
|
2
|
-
export type { Cart, CartItem, Channel, ItemSource, KnownLayout, LadderRung, Layout, Placement, PlacementDeleteInput, PlacementDisplay, PlacementRecord, PlacementScope, PlacementUpsertInput, PlacementsQuery, ReasonCode, StrategyParams, SuggestionsInput, SuggestionsResult, Tenant, Touchpoint, UpsellEvent, UpsellEventType, UpsellEventsInput, UpsellItem, UpsellStrategy, } from './schema';
|
|
2
|
+
export type { Cart, CartItem, Channel, ItemSource, KnownLayout, LadderRung, Layout, Placement, PlacementDeleteInput, PlacementDisplay, PlacementRecord, PlacementScope, PlacementUpsertInput, PlacementsQuery, ReasonCode, StrategyParams, SuggestionsInput, SuggestionsResult, Tenant, Touchpoint, UpsellEvent, UpsellEventType, UpsellEventsInput, UpsellItem, UpsellStrategy, UpsellVariant, } from './schema';
|
package/dist/upsell/index.js
CHANGED
|
@@ -5,4 +5,4 @@ var client_1 = require("./client");
|
|
|
5
5
|
Object.defineProperty(exports, "upsell", { enumerable: true, get: function () { return client_1.upsell; } });
|
|
6
6
|
Object.defineProperty(exports, "createUpsellClient", { enumerable: true, get: function () { return client_1.createUpsellClient; } });
|
|
7
7
|
Object.defineProperty(exports, "UpsellApiError", { enumerable: true, get: function () { return client_1.UpsellApiError; } });
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXBzZWxsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQU9rQjtBQU5oQixnR0FBQSxNQUFNLE9BQUE7QUFDTiw0R0FBQSxrQkFBa0IsT0FBQTtBQUNsQix3R0FBQSxjQUFjLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICB1cHNlbGwsXG4gIGNyZWF0ZVVwc2VsbENsaWVudCxcbiAgVXBzZWxsQXBpRXJyb3IsXG4gIHR5cGUgVXBzZWxsQ2xpZW50LFxuICB0eXBlIFVwc2VsbENsaWVudE9wdGlvbnMsXG4gIHR5cGUgVXBzZWxsRW52LFxufSBmcm9tICcuL2NsaWVudCc7XG5leHBvcnQgdHlwZSB7XG4gIENhcnQsXG4gIENhcnRJdGVtLFxuICBDaGFubmVsLFxuICBJdGVtU291cmNlLFxuICBLbm93bkxheW91dCxcbiAgTGFkZGVyUnVuZyxcbiAgTGF5b3V0LFxuICBQbGFjZW1lbnQsXG4gIFBsYWNlbWVudERlbGV0ZUlucHV0LFxuICBQbGFjZW1lbnREaXNwbGF5LFxuICBQbGFjZW1lbnRSZWNvcmQsXG4gIFBsYWNlbWVudFNjb3BlLFxuICBQbGFjZW1lbnRVcHNlcnRJbnB1dCxcbiAgUGxhY2VtZW50c1F1ZXJ5LFxuICBSZWFzb25Db2RlLFxuICBTdHJhdGVneVBhcmFtcyxcbiAgU3VnZ2VzdGlvbnNJbnB1dCxcbiAgU3VnZ2VzdGlvbnNSZXN1bHQsXG4gIFRlbmFudCxcbiAgVG91Y2hwb2ludCxcbiAgVXBzZWxsRXZlbnQsXG4gIFVwc2VsbEV2ZW50VHlwZSxcbiAgVXBzZWxsRXZlbnRzSW5wdXQsXG4gIFVwc2VsbEl0ZW0sXG4gIFVwc2VsbFN0cmF0ZWd5LFxuICBVcHNlbGxWYXJpYW50LFxufSBmcm9tICcuL3NjaGVtYSc7XG4iXX0=
|
package/dist/upsell/schema.d.ts
CHANGED
|
@@ -101,6 +101,21 @@ export interface SuggestionsInput {
|
|
|
101
101
|
sessionId?: string;
|
|
102
102
|
};
|
|
103
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* One choosable size of an item with variants — what a picker lists.
|
|
106
|
+
*
|
|
107
|
+
* `itemId` here is what goes into the cart line once the customer
|
|
108
|
+
* chooses. Report it back to `/events` as `variantItemId`, keeping the
|
|
109
|
+
* event's own `itemId` as the DISH — otherwise the `added` event never
|
|
110
|
+
* joins to the `shown` that preceded it.
|
|
111
|
+
*/
|
|
112
|
+
export interface UpsellVariant {
|
|
113
|
+
itemId: number;
|
|
114
|
+
itemName: string;
|
|
115
|
+
itemSlug: string | null;
|
|
116
|
+
/** Selling price of THIS size (INR). */
|
|
117
|
+
price: number;
|
|
118
|
+
}
|
|
104
119
|
export interface UpsellItem {
|
|
105
120
|
itemId: number;
|
|
106
121
|
itemName: string;
|
|
@@ -114,6 +129,22 @@ export interface UpsellItem {
|
|
|
114
129
|
/** Raw legacy `vegNonvegBoth` flag, passed through untranslated. */
|
|
115
130
|
veg: number | null;
|
|
116
131
|
brandId: number | null;
|
|
132
|
+
/**
|
|
133
|
+
* True when `price` is a FROM price and the customer must choose a
|
|
134
|
+
* size before this can be added. Open your size picker over
|
|
135
|
+
* `variants` instead of adding `itemId` to the cart — `itemId` is the
|
|
136
|
+
* dish, which carries no price of its own and is not orderable.
|
|
137
|
+
*
|
|
138
|
+
* Only ever true on a channel + touchpoint the platform has opened
|
|
139
|
+
* for variant pickers, so a surface that cannot render one never sees
|
|
140
|
+
* it set and needs no code for it.
|
|
141
|
+
*
|
|
142
|
+
* Optional for the same reason as `source` below: an SDK is routinely
|
|
143
|
+
* newer than the deployment it talks to.
|
|
144
|
+
*/
|
|
145
|
+
hasVariants?: boolean;
|
|
146
|
+
/** The choosable sizes, in the merchant's order. Empty unless `hasVariants`. */
|
|
147
|
+
variants?: UpsellVariant[];
|
|
117
148
|
reasonCode: ReasonCode;
|
|
118
149
|
/**
|
|
119
150
|
* Which layer produced this item.
|
|
@@ -152,7 +183,21 @@ export interface SuggestionsResult {
|
|
|
152
183
|
/** Effective cap applied: min(display.maxItems, touchpoint policy). */
|
|
153
184
|
maxItems: number;
|
|
154
185
|
/** How long the client may reuse this response, in seconds. */
|
|
186
|
+
/** Seconds this response may be reused. ZERO means do not reuse it. */
|
|
155
187
|
ttlSeconds: number;
|
|
188
|
+
/**
|
|
189
|
+
* True when this customer's own order history shaped the ranking, so
|
|
190
|
+
* the response belongs to ONE person.
|
|
191
|
+
*
|
|
192
|
+
* `ttlSeconds` is 0 whenever this is set, so a client that caches on
|
|
193
|
+
* the TTL is already correct. Read this only if you want to cache
|
|
194
|
+
* per customer instead of not caching — in which case the customer
|
|
195
|
+
* MUST be part of your cache key.
|
|
196
|
+
*
|
|
197
|
+
* Optional for the same reason as `source`: an SDK is routinely
|
|
198
|
+
* newer than the deployment it talks to.
|
|
199
|
+
*/
|
|
200
|
+
personalised?: boolean;
|
|
156
201
|
/** True when the candidate source failed and the service degraded to empty. */
|
|
157
202
|
degraded?: boolean;
|
|
158
203
|
};
|
|
@@ -252,7 +297,19 @@ export interface UpsellEvent {
|
|
|
252
297
|
* comparable by layer if the layer is recorded on the event.
|
|
253
298
|
*/
|
|
254
299
|
source?: ItemSource;
|
|
300
|
+
/**
|
|
301
|
+
* ALWAYS the id the suggestion was served under. For an item with
|
|
302
|
+
* `hasVariants` that is the DISH, not the size the customer chose —
|
|
303
|
+
* sending the size id leaves this event unjoinable to the `shown`
|
|
304
|
+
* that preceded it, so attach rate for every picker card reads zero.
|
|
305
|
+
*/
|
|
255
306
|
itemId: number;
|
|
307
|
+
/**
|
|
308
|
+
* Which size was chosen, when `itemId` is an item with variants.
|
|
309
|
+
* Answers whether a "from 145" card sells Regulars or Larges, which
|
|
310
|
+
* cannot be recovered later from a dataset that never carried it.
|
|
311
|
+
*/
|
|
312
|
+
variantItemId?: number;
|
|
256
313
|
reasonCode?: ReasonCode;
|
|
257
314
|
/** ISO-8601. Defaults to server receive time when omitted. */
|
|
258
315
|
occurredAt?: string;
|
package/dist/upsell/schema.js
CHANGED
|
@@ -9,4 +9,4 @@
|
|
|
9
9
|
* admin methods.
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Vwc2VsbC9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlIHN1cmZhY2UgZm9yIHRoZSBwbGF0Zm9ybSBVcHNlbGwgQVBJLlxuICpcbiAqIFR3byBjb25zdW1lci1mYWNpbmcgY2FsbHM6IGBwbGFjZW1lbnRzKC4uLilgICh3aGljaCB1cHNlbGwgc3VyZmFjZXMgYVxuICogY2hhbm5lbCBzaG91bGQgcmVuZGVyIGZvciBhIHRlbmFudCkgYW5kIGBzdWdnZXN0KC4uLilgIChpdGVtcyBmb3Igb25lXG4gKiBwbGFjZW1lbnQgZ2l2ZW4gdGhlIGxpdmUgY2FydCkuIGByZXBvcnRFdmVudHMoLi4uKWAgZmVlZHMgYXR0YWNoLXJhdGVcbiAqIHRlbGVtZXRyeS4gUGxhY2VtZW50IGNvbmZpZyBpcyBtYW5hZ2VkIHZpYSB0aGUgc2VydmljZS1hY3Rvci1vbmx5XG4gKiBhZG1pbiBtZXRob2RzLlxuICovXG5cbmV4cG9ydCB0eXBlIENoYW5uZWwgPSAnbW9iaWxlX2FwcCcgfCAna2lvc2snIHwgJ3doaXRlbGFiZWxfd2ViJyB8ICd3aGF0c2FwcCcgfCAndm9pY2UnO1xuXG4vKipcbiAqIEEgbW9tZW50IGluIHRoZSBjdXN0b21lciBqb3VybmV5IOKAlCB0aGUgdW5pdCBvZiBwbGF0Zm9ybSBwb2xpY3lcbiAqIChwcmljZSBiYW5kLCBtYXggaXRlbXMsIGFuZCBsYXRlciB0aGUgc2lnbmFsIHdlaWdodCBwcm9maWxlKS4gQVxuICogcGxhY2VtZW50IGlzIGEgY2hhbm5lbCdzIGpvdXJuZXkgbGFiZWwgcG9pbnRpbmcgYXQgb25lIG9mIHRoZXNlLlxuICovXG5leHBvcnQgdHlwZSBUb3VjaHBvaW50ID1cbiAgfCAnaG9tZSdcbiAgfCAnbWVudV9icm93c2luZydcbiAgfCAnbWVudV9jb21wb3NpbmcnXG4gIHwgJ3NlYXJjaF9ub19yZXN1bHQnXG4gIHwgJ2NhcnQnXG4gIHwgJ3ByZV9jaGVja291dCdcbiAgfCAncG9zdF9vcmRlcic7XG5cbi8qKlxuICogUmVuZGVyaW5nIGhpbnQsIG93bmVkIGJ5IHRoZSBjaGFubmVsIGZyb250ZW5kIOKAlCB0aGUgcGxhdGZvcm0gbmV2ZXJcbiAqIGludGVycHJldHMgaXQuIEtub3duIHZhbHVlcyBhcmUgbGlzdGVkIGZvciBlZGl0b3IgY29tcGxldGlvbiwgYnV0IGFueVxuICogbG93ZXJjYXNlIGlkZW50aWZpZXIgaXMgdmFsaWQgc28gbmV3IGxheW91dHMgbmVlZCBubyBTREsgcmVsZWFzZS5cbiAqL1xuZXhwb3J0IHR5cGUgS25vd25MYXlvdXQgPVxuICB8ICdjYXJvdXNlbF8ydXAnXG4gIHwgJ2hvcml6b250YWxfY2Fyb3VzZWwnXG4gIHwgJ2dyaWRfMnhuX21vZGFsJ1xuICB8ICdjYXJvdXNlbF8xdXAnXG4gIHwgJ3ZlcnRpY2FsX2xpc3QnXG4gIHwgJ2dyaWRfM3huJ1xuICB8ICdjb21wYWN0X2xpc3QnXG4gIHwgJ2hlcm9fYmFubmVyJztcblxuZXhwb3J0IHR5cGUgTGF5b3V0ID0gS25vd25MYXlvdXQgfCAoc3RyaW5nICYge30pO1xuXG4vKiogV2h5IGFuIGl0ZW0gd2FzIHJlY29tbWVuZGVkLiBDaGFubmVscyByZW5kZXIgdGhlc2UgaW4gY3VzdG9tZXIgbGFuZ3VhZ2UuICovXG5leHBvcnQgdHlwZSBSZWFzb25Db2RlID1cbiAgfCAncG9wdWxhcl9ub3cnXG4gIHwgJ2NvbXBsZXRlc19tZWFsJ1xuICB8ICdvZnRlbl9vcmRlcmVkX3RvZ2V0aGVyJ1xuICB8ICd5b3VyX3VzdWFsJ1xuICB8ICdjaGVmc19waWNrJztcblxuLyoqXG4gKiBXaGljaCBsYXllciBwcm9kdWNlZCBhbiBpdGVtLlxuICpcbiAqIFNlcGFyYXRlIGZyb20gYHJlYXNvbkNvZGVgIG9uIHB1cnBvc2U6IGByZWFzb25Db2RlYCBpcyBjdXN0b21lci1mYWNpbmdcbiAqIGNvcHkgdGhlIGNoYW5uZWwgcmVuZGVycyAoXCJQb3B1bGFyIHJpZ2h0IG5vd1wiKSwgc28gb3ZlcmxvYWRpbmcgaXQgd2l0aFxuICogcHJvdmVuYW5jZSB3b3VsZCBjaGFuZ2UgdGhlIGN1c3RvbWVyJ3MgdmlzaWJsZSBsYWJlbCB3aGVuZXZlciB0aGVcbiAqIHNvdXJjZSBjaGFuZ2VkLlxuICpcbiAqICAgYWxnb3JpdGhtICAgICDigJQgc2NvcmVkIGJ5IHRoZSBlbmdpbmUsIHByaW9yaXR5IHBpbnMgaW5jbHVkZWRcbiAqICAgbWVyY2hhbnRfbGlzdCDigJQgdGhlIG1lcmNoYW50J3Mgb3duIGxpc3QgcmVwbGFjZWQgdGhlIGFsZ29yaXRobVxuICogICBmYWxsYmFjayAgICAgIOKAlCB0b3BwZWQgdXAgZnJvbSB0aGUgYmFja3VwIGxpc3QsIHNhZmV0eSBydWxlcyBvbmx5XG4gKi9cbmV4cG9ydCB0eXBlIEl0ZW1Tb3VyY2UgPSAnYWxnb3JpdGhtJyB8ICdtZXJjaGFudF9saXN0JyB8ICdmYWxsYmFjayc7XG5cbi8qKiBXaGljaCBydW5nIG9mIHRoZSByZXNvbHV0aW9uIGxhZGRlciBhbnN3ZXJlZCB0aGUgcmVxdWVzdC4gKi9cbmV4cG9ydCB0eXBlIExhZGRlclJ1bmcgPVxuICB8ICdmdWxsX2VuZ2luZSdcbiAgfCAnYmFuZF9yZWxheGF0aW9uJ1xuICB8ICdwb3B1bGFyaXR5X2Zsb29yJ1xuICB8ICdiYWNrdXBfc3VnZ2VzdGlvbnMnXG4gIHwgJ2VtcHR5X2RlZ3JhZGVkJztcblxuZXhwb3J0IHR5cGUgVXBzZWxsU3RyYXRlZ3kgPVxuICB8ICdtZW51LW9yZGVyLXBvcHVsYXJpdHknXG4gIHwgJ2xlZ2FjeS1jYXRhbG9nLXNhbXBsZSdcbiAgLyoqXG4gICAqIFRoZSBtZXJjaGFudCdzIG93biBsaXN0IHJlcGxhY2VzIHRoZSBhbGdvcml0aG0gYXQgdGhpcyBwbGFjZW1lbnQuXG4gICAqIFJlcXVpcmVzIGBzdHJhdGVneVBhcmFtcy5tZXJjaGFudExpc3RJdGVtU2x1Z3NgOyBhbiBlbXB0eSBsaXN0IGZhbGxzXG4gICAqIGJhY2sgdG8gYG1lbnUtb3JkZXItcG9wdWxhcml0eWAgcmF0aGVyIHRoYW4gc2VydmluZyBub3RoaW5nLlxuICAgKi9cbiAgfCAnbWVyY2hhbnQtbGlzdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50RGlzcGxheSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBSZXF1ZXN0ZWQgY291bnQuIFRvdWNocG9pbnQgcG9saWN5IG1heSBjYXAgaXQgbG93ZXIg4oCUIHNlZSBgbWV0YS5tYXhJdGVtc2AuICovXG4gIG1heEl0ZW1zOiBudW1iZXI7XG4gIGxheW91dDogTGF5b3V0O1xufVxuXG4vKiogUmVzb2x2ZWQgcHVibGljIHBsYWNlbWVudCAoYnVzaW5lc3Mgb3ZlcnJpZGUgPiBicmFuZCA+IHBsYXRmb3JtIGRlZmF1bHQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnQge1xuICBrZXk6IHN0cmluZztcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAgdG91Y2hwb2ludDogVG91Y2hwb2ludDtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgZGlzcGxheTogUGxhY2VtZW50RGlzcGxheTtcbiAgY29uZmlnVmVyc2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudCB7XG4gIHBhcmVudElkOiBudW1iZXI7XG4gIGJ1c2luZXNzSWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXJ0SXRlbSB7XG4gIGl0ZW1JZDogbnVtYmVyO1xuICBxdHk6IG51bWJlcjtcbiAgdW5pdFByaWNlOiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbDsgbGV0cyB0aGUgZGlldGFyeSBnYXRlIGFuZCBjYXRlZ29yeSBuby1yZXBlYXQgc2VlIGNhcnQgY29udGVudHMuICovXG4gIGl0ZW1TbHVnPzogc3RyaW5nO1xuICBzZWN0aW9uTmFtZT86IHN0cmluZztcbiAgLyoqIExlZ2FjeSB2ZWdOb252ZWdCb3RoIGZsYWc6IDEgdmVnLCAyIG5vbi12ZWcsIDMgYm90aC9lZ2cuICovXG4gIHZlZz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXJ0IHtcbiAgaXRlbXM6IENhcnRJdGVtW107XG4gIHN1YnRvdGFsOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VnZ2VzdGlvbnNJbnB1dCB7XG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIHBsYWNlbWVudDogc3RyaW5nO1xuICB0ZW5hbnQ6IFRlbmFudDtcbiAgY29udGV4dDoge1xuICAgIGNhcnQ6IENhcnQ7XG4gICAgZnVsZmlsbWVudE1vZGU/OiAnZGVsaXZlcnknIHwgJ3BpY2t1cCcgfCAnZGluZV9pbic7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWw7IHVudXNlZCBieSB0aGUgdjEgc2NvcmVycy4gSW4gdGhlIGNvbnRyYWN0IGZyb20gZGF5IG9uZVxuICAgICAqIHNvIHBlcnNvbmFsaXphdGlvbiBsYW5kcyB3aXRob3V0IGEgYnJlYWsuIGBpZGAgTVVTVCBiZSB0aGUgb3BhcXVlXG4gICAgICogcGxhdGZvcm0gY3VzdG9tZXIgaWQsIG5ldmVyIGEgbW9iaWxlIG51bWJlci5cbiAgICAgKi9cbiAgICBjdXN0b21lcj86IHsgaWQ6IHN0cmluZyB9O1xuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsOyBub3QgeWV0IGFjdGVkIG9uLiBJbXByZXNzaW9uIGZhdGlndWUgaXMgc2Vzc2lvbi1zY29wZWRcbiAgICAgKiBhbmQgc2hhcmVkIGFjcm9zcyB0b3VjaHBvaW50cyDigJQgc2VuZCBpdCBub3cgc28gY2hhbm5lbHNcbiAgICAgKiBpbnN0cnVtZW50IG9uY2UgcmF0aGVyIHRoYW4gdHdpY2UuXG4gICAgICovXG4gICAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwc2VsbEl0ZW0ge1xuICBpdGVtSWQ6IG51bWJlcjtcbiAgaXRlbU5hbWU6IHN0cmluZztcbiAgaXRlbVNsdWc6IHN0cmluZyB8IG51bGw7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICBzZWN0aW9uSWQ6IG51bWJlciB8IG51bGw7XG4gIHNlY3Rpb25OYW1lOiBzdHJpbmcgfCBudWxsO1xuICAvKiogU2VsbGluZyBwcmljZSAoSU5SKS4gKi9cbiAgcHJpY2U6IG51bWJlcjtcbiAgaW1hZ2U6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBSYXcgbGVnYWN5IGB2ZWdOb252ZWdCb3RoYCBmbGFnLCBwYXNzZWQgdGhyb3VnaCB1bnRyYW5zbGF0ZWQuICovXG4gIHZlZzogbnVtYmVyIHwgbnVsbDtcbiAgYnJhbmRJZDogbnVtYmVyIHwgbnVsbDtcbiAgcmVhc29uQ29kZTogUmVhc29uQ29kZTtcbiAgLyoqXG4gICAqIFdoaWNoIGxheWVyIHByb2R1Y2VkIHRoaXMgaXRlbS5cbiAgICpcbiAgICogT3B0aW9uYWwgb24gcHVycG9zZSwgYW5kIGl0IHN0YXlzIG9wdGlvbmFsLiBUaGUgc2VydmljZSBhbHdheXMgc2V0c1xuICAgKiBpdCwgYnV0IGFuIFNESyBpcyByb3V0aW5lbHkgbmV3ZXIgdGhhbiB0aGUgZGVwbG95bWVudCBpdCB0YWxrcyB0byDigJRcbiAgICogdHlwaW5nIGl0IGFzIHJlcXVpcmVkIHdvdWxkIGxldCBUeXBlU2NyaXB0IHByb21pc2UgYSBzdHJpbmcgdGhhdCBpc1xuICAgKiBgdW5kZWZpbmVkYCBhdCBydW50aW1lIGFnYWluc3QgYW55IHNlcnZpY2Ugb2xkZXIgdGhhbiB0aGUgcmVsZWFzZVxuICAgKiB0aGF0IGFkZGVkIGl0LiBOYXJyb3cgaXQgeW91cnNlbGYgaWYgeW91IGhhdmUgcGlubmVkIGJvdGguXG4gICAqL1xuICBzb3VyY2U/OiBJdGVtU291cmNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1Z2dlc3Rpb25zUmVzdWx0IHtcbiAgcGxhY2VtZW50OiBzdHJpbmc7XG4gIHRvdWNocG9pbnQ6IFRvdWNocG9pbnQ7XG4gIGl0ZW1zOiBVcHNlbGxJdGVtW107XG4gIG1ldGE6IHtcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIHN0cmF0ZWd5OiBVcHNlbGxTdHJhdGVneTtcbiAgICBjb25maWdWZXJzaW9uOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIHN0ZXAgdGhhdCBQUklNQVJJTFkgYW5zd2VyZWQg4oCUIHRoZSBmaXJzdCBvbmUgdG8gY29udHJpYnV0ZS5cbiAgICAgKlxuICAgICAqIFNpbmNlIHRoZSBsYWRkZXIgYmVjYW1lIGEgZmlsbCBsb29wLCBzZXZlcmFsIHN0ZXBzIGNhbiBjb250cmlidXRlXG4gICAgICogdG8gb25lIHJlc3BvbnNlOyBgcnVuZ2AgbmFtZXMgdGhlIG9uZSB0aGF0IGFuc3dlcmVkIGZpcnN0LCBzbyBhXG4gICAgICogaGVhbHRoeSBjYXJkIHRoYXQgbWVyZWx5IHRvcHBlZCB1cCBpdHMgbGFzdCBzbG90IGRvZXMgbm90IHJlYWQgYXNcbiAgICAgKiBmdWxseSBkZWdyYWRlZC4gUmVhZCBgc3RlcHNgIGZvciBob3cgZmFyIGRvd24gaXQgd2VudC5cbiAgICAgKi9cbiAgICBydW5nOiBMYWRkZXJSdW5nO1xuICAgIC8qKlxuICAgICAqIEV2ZXJ5IHN0ZXAgdGhhdCBjb250cmlidXRlZCBhdCBsZWFzdCBvbmUgaXRlbSwgaW4gdGhlIG9yZGVyIHRoZXlcbiAgICAgKiByYW4uIE9wdGlvbmFsIGZvciB0aGUgc2FtZSByZWFzb24gYXMgYFVwc2VsbEl0ZW0uc291cmNlYDogYW4gb2xkZXJcbiAgICAgKiBzZXJ2aWNlIGRvZXMgbm90IHNlbmQgaXQuXG4gICAgICovXG4gICAgc3RlcHM/OiBMYWRkZXJSdW5nW107XG4gICAgLyoqIEVmZmVjdGl2ZSBjYXAgYXBwbGllZDogbWluKGRpc3BsYXkubWF4SXRlbXMsIHRvdWNocG9pbnQgcG9saWN5KS4gKi9cbiAgICBtYXhJdGVtczogbnVtYmVyO1xuICAgIC8qKiBIb3cgbG9uZyB0aGUgY2xpZW50IG1heSByZXVzZSB0aGlzIHJlc3BvbnNlLCBpbiBzZWNvbmRzLiAqL1xuICAgIHR0bFNlY29uZHM6IG51bWJlcjtcbiAgICAvKiogVHJ1ZSB3aGVuIHRoZSBjYW5kaWRhdGUgc291cmNlIGZhaWxlZCBhbmQgdGhlIHNlcnZpY2UgZGVncmFkZWQgdG8gZW1wdHkuICovXG4gICAgZGVncmFkZWQ/OiBib29sZWFuO1xuICB9O1xufVxuXG4vKiogTWVyY2hhbnQtY29udHJvbGxlZCBzZWxlY3Rpb24gaW5wdXRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJhdGVneVBhcmFtcyB7XG4gIGluY2x1ZGVkSXRlbVNsdWdzPzogc3RyaW5nW107XG4gIGluY2x1ZGVkU2VjdGlvbnM/OiBzdHJpbmdbXTtcbiAgZXhjbHVkZWRTZWN0aW9ucz86IHN0cmluZ1tdO1xuICAvKiogXCJOZXZlciBTdWdnZXN0IFRoZXNlXCIg4oCUIGFic29sdXRlLCBvdmVycmlkZXMgdGhlIHByaW9yaXR5IGxpc3QuICovXG4gIG5ldmVyU3VnZ2VzdEl0ZW1TbHVncz86IHN0cmluZ1tdO1xuICAvKiogXCJNeSBQcmlvcml0eSBJdGVtc1wiIOKAlCBvY2N1cHkgcmVzZXJ2ZWQgc2xvdHMgYWhlYWQgb2Ygc2NvcmVkIGl0ZW1zLiAqL1xuICBwcmlvcml0eUl0ZW1TbHVncz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogXCJCYWNrdXAgU3VnZ2VzdGlvbnNcIiDigJQgdXAgdG8gNiBpdGVtcy4gU2tpcHMgdGhlIHByaWNlIGJhbmQgKHRoZSBiYW5kXG4gICAqIGlzIHVzdWFsbHkgd2hhdCBlbXB0aWVkIHRoZSBwb29sKSBidXQgc3RpbGwgcmVzcGVjdHMgc3RvY2ssIGNhcnQsXG4gICAqIGV4Y2x1c2lvbnMsIGRpZXQgYW5kIGBtYXhQcmljZWAuIEl0IFRPUFMgVVAgYSBzaG9ydCBsaXN0IHJhdGhlciB0aGFuXG4gICAqIG9ubHkgZmlyaW5nIHdoZW4gZXZlcnl0aGluZyBlbHNlIHJldHVybmVkIG5vdGhpbmcsIHNvIG9uZSBzY29yZWRcbiAgICogaXRlbSBwbHVzIHR3byBiYWNrdXAgaXRlbXMgaXMgYSB2YWxpZCByZXNwb25zZS5cbiAgICovXG4gIGJhY2t1cEl0ZW1TbHVncz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIG1lcmNoYW50J3Mgb3duIGxpc3QgZm9yIHRoaXMgcGxhY2VtZW50LCB1cCB0byAxMiBpdGVtcy4gT25seSByZWFkXG4gICAqIHdoZW4gYHN0cmF0ZWd5YCBpcyBgbWVyY2hhbnQtbGlzdGAuXG4gICAqXG4gICAqIERpc3RpbmN0IGZyb20gYGluY2x1ZGVkSXRlbVNsdWdzYCwgd2hpY2ggaXMgYSBGSUxURVIgb3ZlciB0aGUgd2hvbGVcbiAgICogbWVudSDigJQgaXRlbXMgc3RpbGwgZ2V0IHJhbmtlZCBieSB0aGUgc3RyYXRlZ3kgYW5kIHN0aWxsIHJlcG9ydCBhc1xuICAgKiBgc291cmNlOiAnYWxnb3JpdGhtJ2AuIFRoaXMgUkVQTEFDRVMgdGhlIHBvb2wsIHJvdGF0ZXMgd2l0aGluIGl0IHNvIGFcbiAgICogMTAtaXRlbSBsaXN0IG9uIGEgMy1zbG90IGNhcmQgc2hvd3MgYWxsIHRlbiBvdmVyIHRpbWUsIGFuZCByZXBvcnRzIGFzXG4gICAqIGBzb3VyY2U6ICdtZXJjaGFudF9saXN0J2AuXG4gICAqL1xuICBtZXJjaGFudExpc3RJdGVtU2x1Z3M/OiBzdHJpbmdbXTtcbiAgZXhjbHVkZUNhcnRJdGVtcz86IGJvb2xlYW47XG4gIG1heFByaWNlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBQbGFjZW1lbnRTY29wZSA9ICdkZWZhdWx0JyB8ICd0ZW5hbnQnIHwgJ2J1c2luZXNzJztcblxuLyoqIFJhdyBhZG1pbi1wbGFuZSBjb25maWcgcm93IChubyBwcmVjZWRlbmNlIG1lcmdlIGFwcGxpZWQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRSZWNvcmQge1xuICBzY29wZTogUGxhY2VtZW50U2NvcGU7XG4gIHBhcmVudElkPzogbnVtYmVyO1xuICBidXNpbmVzc0lkPzogbnVtYmVyO1xuICBjaGFubmVsOiBDaGFubmVsO1xuICBrZXk6IHN0cmluZztcbiAgdG91Y2hwb2ludDogVG91Y2hwb2ludDtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgZGlzcGxheTogUGxhY2VtZW50RGlzcGxheTtcbiAgc3RyYXRlZ3k6IFVwc2VsbFN0cmF0ZWd5O1xuICBzdHJhdGVneVBhcmFtczogU3RyYXRlZ3lQYXJhbXM7XG4gIGNvbmZpZ1ZlcnNpb246IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRCeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFkbWluIHVwc2VydC4gU2NvcGUgaXMgZGVyaXZlZDogbm8gcGFyZW50SWQg4oaSIHBsYXRmb3JtIGRlZmF1bHQ7XG4gKiBwYXJlbnRJZCBvbmx5IOKGkiBicmFuZCByb3c7IHBhcmVudElkICsgYnVzaW5lc3NJZCDihpIgYnVzaW5lc3Mgb3ZlcnJpZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50VXBzZXJ0SW5wdXQge1xuICBwYXJlbnRJZD86IG51bWJlcjtcbiAgYnVzaW5lc3NJZD86IG51bWJlcjtcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAga2V5OiBzdHJpbmc7XG4gIHRvdWNocG9pbnQ6IFRvdWNocG9pbnQ7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGRpc3BsYXk6IFBsYWNlbWVudERpc3BsYXk7XG4gIHN0cmF0ZWd5PzogVXBzZWxsU3RyYXRlZ3k7XG4gIHN0cmF0ZWd5UGFyYW1zPzogU3RyYXRlZ3lQYXJhbXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50RGVsZXRlSW5wdXQge1xuICBwYXJlbnRJZD86IG51bWJlcjtcbiAgYnVzaW5lc3NJZD86IG51bWJlcjtcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAga2V5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXF1aXJlZCBieSB0aGUgc2VydmVyIHdoZW4gYHBhcmVudElkYCBpcyBvbWl0dGVkLCBiZWNhdXNlIHRoYXQgY2FsbFxuICAgKiB0YXJnZXRzIHRoZSBQTEFURk9STSBERUZBVUxUIHJvdyBhbmQgc28gcmVtb3ZlcyB0aGUgcGxhY2VtZW50IGZvclxuICAgKiBldmVyeSB0ZW5hbnQgdGhhdCBoYXMgbm90IG92ZXJyaWRkZW4gaXQuIFdpdGhvdXQgdGhpcyB0aGUgc2VydmVyXG4gICAqIHJlamVjdHMgdGhlIHJlcXVlc3Qgd2l0aCA0MDAgcmF0aGVyIHRoYW4gZ3Vlc3NpbmcgdGhhdCBhIG1pc3NpbmdcbiAgICogcGFyZW50SWQgd2FzIGRlbGliZXJhdGUuXG4gICAqXG4gICAqIERlbGliZXJhdGVseSBub3QgZGVmYXVsdGVkIHRvIGB0cnVlYCBoZXJlOiB0aGUgd2hvbGUgcG9pbnQgb2YgdGhlXG4gICAqIGZsYWcgaXMgdGhhdCBkZWxldGluZyBhIGRlZmF1bHQgbXVzdCBiZSBzdGF0ZWQsIG5vdCBpbmZlcnJlZCBmcm9tXG4gICAqIHRoZSBzaGFwZSBvZiB0aGUgY2FsbC5cbiAgICovXG4gIGNvbmZpcm1EZWxldGVEZWZhdWx0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRzUXVlcnkge1xuICBjaGFubmVsOiBDaGFubmVsO1xuICBwYXJlbnRJZDogbnVtYmVyO1xuICBidXNpbmVzc0lkOiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgOKUgCBBdHRhY2gtcmF0ZSB0ZWxlbWV0cnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFVwc2VsbEV2ZW50VHlwZSA9ICdzaG93bicgfCAnYWRkZWQnIHwgJ2lnbm9yZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwc2VsbEV2ZW50IHtcbiAgdHlwZTogVXBzZWxsRXZlbnRUeXBlO1xuICAvKipcbiAgICogRWNobyB0aGUgaXRlbSdzIGBzb3VyY2VgLiBUaGlzIGlzIHdoYXQgbWFrZXMgXCJpcyBteSBsaXN0IHBlcmZvcm1pbmdcbiAgICogYmV0dGVyIHRoYW4geW91ciBhbGdvcml0aG0/XCIgYW5zd2VyYWJsZSDigJQgYXR0YWNoIHJhdGUgaXMgb25seVxuICAgKiBjb21wYXJhYmxlIGJ5IGxheWVyIGlmIHRoZSBsYXllciBpcyByZWNvcmRlZCBvbiB0aGUgZXZlbnQuXG4gICAqL1xuICBzb3VyY2U/OiBJdGVtU291cmNlO1xuICBpdGVtSWQ6IG51bWJlcjtcbiAgcmVhc29uQ29kZT86IFJlYXNvbkNvZGU7XG4gIC8qKiBJU08tODYwMS4gRGVmYXVsdHMgdG8gc2VydmVyIHJlY2VpdmUgdGltZSB3aGVuIG9taXR0ZWQuICovXG4gIG9jY3VycmVkQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBzZWxsRXZlbnRzSW5wdXQge1xuICBjaGFubmVsOiBDaGFubmVsO1xuICBwbGFjZW1lbnQ6IHN0cmluZztcbiAgdGVuYW50OiBUZW5hbnQ7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbiAgLyoqIEVjaG8gYG1ldGEuY29uZmlnVmVyc2lvbmAgZnJvbSB0aGUgcmVzcG9uc2UgYmVpbmcgcmVwb3J0ZWQgb24uICovXG4gIGNvbmZpZ1ZlcnNpb24/OiBzdHJpbmc7XG4gIGV2ZW50czogVXBzZWxsRXZlbnRbXTtcbn1cbiJdfQ==
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Vwc2VsbC9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlIHN1cmZhY2UgZm9yIHRoZSBwbGF0Zm9ybSBVcHNlbGwgQVBJLlxuICpcbiAqIFR3byBjb25zdW1lci1mYWNpbmcgY2FsbHM6IGBwbGFjZW1lbnRzKC4uLilgICh3aGljaCB1cHNlbGwgc3VyZmFjZXMgYVxuICogY2hhbm5lbCBzaG91bGQgcmVuZGVyIGZvciBhIHRlbmFudCkgYW5kIGBzdWdnZXN0KC4uLilgIChpdGVtcyBmb3Igb25lXG4gKiBwbGFjZW1lbnQgZ2l2ZW4gdGhlIGxpdmUgY2FydCkuIGByZXBvcnRFdmVudHMoLi4uKWAgZmVlZHMgYXR0YWNoLXJhdGVcbiAqIHRlbGVtZXRyeS4gUGxhY2VtZW50IGNvbmZpZyBpcyBtYW5hZ2VkIHZpYSB0aGUgc2VydmljZS1hY3Rvci1vbmx5XG4gKiBhZG1pbiBtZXRob2RzLlxuICovXG5cbmV4cG9ydCB0eXBlIENoYW5uZWwgPSAnbW9iaWxlX2FwcCcgfCAna2lvc2snIHwgJ3doaXRlbGFiZWxfd2ViJyB8ICd3aGF0c2FwcCcgfCAndm9pY2UnO1xuXG4vKipcbiAqIEEgbW9tZW50IGluIHRoZSBjdXN0b21lciBqb3VybmV5IOKAlCB0aGUgdW5pdCBvZiBwbGF0Zm9ybSBwb2xpY3lcbiAqIChwcmljZSBiYW5kLCBtYXggaXRlbXMsIGFuZCBsYXRlciB0aGUgc2lnbmFsIHdlaWdodCBwcm9maWxlKS4gQVxuICogcGxhY2VtZW50IGlzIGEgY2hhbm5lbCdzIGpvdXJuZXkgbGFiZWwgcG9pbnRpbmcgYXQgb25lIG9mIHRoZXNlLlxuICovXG5leHBvcnQgdHlwZSBUb3VjaHBvaW50ID1cbiAgfCAnaG9tZSdcbiAgfCAnbWVudV9icm93c2luZydcbiAgfCAnbWVudV9jb21wb3NpbmcnXG4gIHwgJ3NlYXJjaF9ub19yZXN1bHQnXG4gIHwgJ2NhcnQnXG4gIHwgJ3ByZV9jaGVja291dCdcbiAgfCAncG9zdF9vcmRlcic7XG5cbi8qKlxuICogUmVuZGVyaW5nIGhpbnQsIG93bmVkIGJ5IHRoZSBjaGFubmVsIGZyb250ZW5kIOKAlCB0aGUgcGxhdGZvcm0gbmV2ZXJcbiAqIGludGVycHJldHMgaXQuIEtub3duIHZhbHVlcyBhcmUgbGlzdGVkIGZvciBlZGl0b3IgY29tcGxldGlvbiwgYnV0IGFueVxuICogbG93ZXJjYXNlIGlkZW50aWZpZXIgaXMgdmFsaWQgc28gbmV3IGxheW91dHMgbmVlZCBubyBTREsgcmVsZWFzZS5cbiAqL1xuZXhwb3J0IHR5cGUgS25vd25MYXlvdXQgPVxuICB8ICdjYXJvdXNlbF8ydXAnXG4gIHwgJ2hvcml6b250YWxfY2Fyb3VzZWwnXG4gIHwgJ2dyaWRfMnhuX21vZGFsJ1xuICB8ICdjYXJvdXNlbF8xdXAnXG4gIHwgJ3ZlcnRpY2FsX2xpc3QnXG4gIHwgJ2dyaWRfM3huJ1xuICB8ICdjb21wYWN0X2xpc3QnXG4gIHwgJ2hlcm9fYmFubmVyJztcblxuZXhwb3J0IHR5cGUgTGF5b3V0ID0gS25vd25MYXlvdXQgfCAoc3RyaW5nICYge30pO1xuXG4vKiogV2h5IGFuIGl0ZW0gd2FzIHJlY29tbWVuZGVkLiBDaGFubmVscyByZW5kZXIgdGhlc2UgaW4gY3VzdG9tZXIgbGFuZ3VhZ2UuICovXG5leHBvcnQgdHlwZSBSZWFzb25Db2RlID1cbiAgfCAncG9wdWxhcl9ub3cnXG4gIHwgJ2NvbXBsZXRlc19tZWFsJ1xuICB8ICdvZnRlbl9vcmRlcmVkX3RvZ2V0aGVyJ1xuICB8ICd5b3VyX3VzdWFsJ1xuICB8ICdjaGVmc19waWNrJztcblxuLyoqXG4gKiBXaGljaCBsYXllciBwcm9kdWNlZCBhbiBpdGVtLlxuICpcbiAqIFNlcGFyYXRlIGZyb20gYHJlYXNvbkNvZGVgIG9uIHB1cnBvc2U6IGByZWFzb25Db2RlYCBpcyBjdXN0b21lci1mYWNpbmdcbiAqIGNvcHkgdGhlIGNoYW5uZWwgcmVuZGVycyAoXCJQb3B1bGFyIHJpZ2h0IG5vd1wiKSwgc28gb3ZlcmxvYWRpbmcgaXQgd2l0aFxuICogcHJvdmVuYW5jZSB3b3VsZCBjaGFuZ2UgdGhlIGN1c3RvbWVyJ3MgdmlzaWJsZSBsYWJlbCB3aGVuZXZlciB0aGVcbiAqIHNvdXJjZSBjaGFuZ2VkLlxuICpcbiAqICAgYWxnb3JpdGhtICAgICDigJQgc2NvcmVkIGJ5IHRoZSBlbmdpbmUsIHByaW9yaXR5IHBpbnMgaW5jbHVkZWRcbiAqICAgbWVyY2hhbnRfbGlzdCDigJQgdGhlIG1lcmNoYW50J3Mgb3duIGxpc3QgcmVwbGFjZWQgdGhlIGFsZ29yaXRobVxuICogICBmYWxsYmFjayAgICAgIOKAlCB0b3BwZWQgdXAgZnJvbSB0aGUgYmFja3VwIGxpc3QsIHNhZmV0eSBydWxlcyBvbmx5XG4gKi9cbmV4cG9ydCB0eXBlIEl0ZW1Tb3VyY2UgPSAnYWxnb3JpdGhtJyB8ICdtZXJjaGFudF9saXN0JyB8ICdmYWxsYmFjayc7XG5cbi8qKiBXaGljaCBydW5nIG9mIHRoZSByZXNvbHV0aW9uIGxhZGRlciBhbnN3ZXJlZCB0aGUgcmVxdWVzdC4gKi9cbmV4cG9ydCB0eXBlIExhZGRlclJ1bmcgPVxuICB8ICdmdWxsX2VuZ2luZSdcbiAgfCAnYmFuZF9yZWxheGF0aW9uJ1xuICB8ICdwb3B1bGFyaXR5X2Zsb29yJ1xuICB8ICdiYWNrdXBfc3VnZ2VzdGlvbnMnXG4gIHwgJ2VtcHR5X2RlZ3JhZGVkJztcblxuZXhwb3J0IHR5cGUgVXBzZWxsU3RyYXRlZ3kgPVxuICB8ICdtZW51LW9yZGVyLXBvcHVsYXJpdHknXG4gIHwgJ2xlZ2FjeS1jYXRhbG9nLXNhbXBsZSdcbiAgLyoqXG4gICAqIFRoZSBtZXJjaGFudCdzIG93biBsaXN0IHJlcGxhY2VzIHRoZSBhbGdvcml0aG0gYXQgdGhpcyBwbGFjZW1lbnQuXG4gICAqIFJlcXVpcmVzIGBzdHJhdGVneVBhcmFtcy5tZXJjaGFudExpc3RJdGVtU2x1Z3NgOyBhbiBlbXB0eSBsaXN0IGZhbGxzXG4gICAqIGJhY2sgdG8gYG1lbnUtb3JkZXItcG9wdWxhcml0eWAgcmF0aGVyIHRoYW4gc2VydmluZyBub3RoaW5nLlxuICAgKi9cbiAgfCAnbWVyY2hhbnQtbGlzdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50RGlzcGxheSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBSZXF1ZXN0ZWQgY291bnQuIFRvdWNocG9pbnQgcG9saWN5IG1heSBjYXAgaXQgbG93ZXIg4oCUIHNlZSBgbWV0YS5tYXhJdGVtc2AuICovXG4gIG1heEl0ZW1zOiBudW1iZXI7XG4gIGxheW91dDogTGF5b3V0O1xufVxuXG4vKiogUmVzb2x2ZWQgcHVibGljIHBsYWNlbWVudCAoYnVzaW5lc3Mgb3ZlcnJpZGUgPiBicmFuZCA+IHBsYXRmb3JtIGRlZmF1bHQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnQge1xuICBrZXk6IHN0cmluZztcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAgdG91Y2hwb2ludDogVG91Y2hwb2ludDtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgZGlzcGxheTogUGxhY2VtZW50RGlzcGxheTtcbiAgY29uZmlnVmVyc2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudCB7XG4gIHBhcmVudElkOiBudW1iZXI7XG4gIGJ1c2luZXNzSWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXJ0SXRlbSB7XG4gIGl0ZW1JZDogbnVtYmVyO1xuICBxdHk6IG51bWJlcjtcbiAgdW5pdFByaWNlOiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbDsgbGV0cyB0aGUgZGlldGFyeSBnYXRlIGFuZCBjYXRlZ29yeSBuby1yZXBlYXQgc2VlIGNhcnQgY29udGVudHMuICovXG4gIGl0ZW1TbHVnPzogc3RyaW5nO1xuICBzZWN0aW9uTmFtZT86IHN0cmluZztcbiAgLyoqIExlZ2FjeSB2ZWdOb252ZWdCb3RoIGZsYWc6IDEgdmVnLCAyIG5vbi12ZWcsIDMgYm90aC9lZ2cuICovXG4gIHZlZz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXJ0IHtcbiAgaXRlbXM6IENhcnRJdGVtW107XG4gIHN1YnRvdGFsOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VnZ2VzdGlvbnNJbnB1dCB7XG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIHBsYWNlbWVudDogc3RyaW5nO1xuICB0ZW5hbnQ6IFRlbmFudDtcbiAgY29udGV4dDoge1xuICAgIGNhcnQ6IENhcnQ7XG4gICAgZnVsZmlsbWVudE1vZGU/OiAnZGVsaXZlcnknIHwgJ3BpY2t1cCcgfCAnZGluZV9pbic7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWw7IHVudXNlZCBieSB0aGUgdjEgc2NvcmVycy4gSW4gdGhlIGNvbnRyYWN0IGZyb20gZGF5IG9uZVxuICAgICAqIHNvIHBlcnNvbmFsaXphdGlvbiBsYW5kcyB3aXRob3V0IGEgYnJlYWsuIGBpZGAgTVVTVCBiZSB0aGUgb3BhcXVlXG4gICAgICogcGxhdGZvcm0gY3VzdG9tZXIgaWQsIG5ldmVyIGEgbW9iaWxlIG51bWJlci5cbiAgICAgKi9cbiAgICBjdXN0b21lcj86IHsgaWQ6IHN0cmluZyB9O1xuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsOyBub3QgeWV0IGFjdGVkIG9uLiBJbXByZXNzaW9uIGZhdGlndWUgaXMgc2Vzc2lvbi1zY29wZWRcbiAgICAgKiBhbmQgc2hhcmVkIGFjcm9zcyB0b3VjaHBvaW50cyDigJQgc2VuZCBpdCBub3cgc28gY2hhbm5lbHNcbiAgICAgKiBpbnN0cnVtZW50IG9uY2UgcmF0aGVyIHRoYW4gdHdpY2UuXG4gICAgICovXG4gICAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIE9uZSBjaG9vc2FibGUgc2l6ZSBvZiBhbiBpdGVtIHdpdGggdmFyaWFudHMg4oCUIHdoYXQgYSBwaWNrZXIgbGlzdHMuXG4gKlxuICogYGl0ZW1JZGAgaGVyZSBpcyB3aGF0IGdvZXMgaW50byB0aGUgY2FydCBsaW5lIG9uY2UgdGhlIGN1c3RvbWVyXG4gKiBjaG9vc2VzLiBSZXBvcnQgaXQgYmFjayB0byBgL2V2ZW50c2AgYXMgYHZhcmlhbnRJdGVtSWRgLCBrZWVwaW5nIHRoZVxuICogZXZlbnQncyBvd24gYGl0ZW1JZGAgYXMgdGhlIERJU0gg4oCUIG90aGVyd2lzZSB0aGUgYGFkZGVkYCBldmVudCBuZXZlclxuICogam9pbnMgdG8gdGhlIGBzaG93bmAgdGhhdCBwcmVjZWRlZCBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcHNlbGxWYXJpYW50IHtcbiAgaXRlbUlkOiBudW1iZXI7XG4gIGl0ZW1OYW1lOiBzdHJpbmc7XG4gIGl0ZW1TbHVnOiBzdHJpbmcgfCBudWxsO1xuICAvKiogU2VsbGluZyBwcmljZSBvZiBUSElTIHNpemUgKElOUikuICovXG4gIHByaWNlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBzZWxsSXRlbSB7XG4gIGl0ZW1JZDogbnVtYmVyO1xuICBpdGVtTmFtZTogc3RyaW5nO1xuICBpdGVtU2x1Zzogc3RyaW5nIHwgbnVsbDtcbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gIHNlY3Rpb25JZDogbnVtYmVyIHwgbnVsbDtcbiAgc2VjdGlvbk5hbWU6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBTZWxsaW5nIHByaWNlIChJTlIpLiAqL1xuICBwcmljZTogbnVtYmVyO1xuICBpbWFnZTogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFJhdyBsZWdhY3kgYHZlZ05vbnZlZ0JvdGhgIGZsYWcsIHBhc3NlZCB0aHJvdWdoIHVudHJhbnNsYXRlZC4gKi9cbiAgdmVnOiBudW1iZXIgfCBudWxsO1xuICBicmFuZElkOiBudW1iZXIgfCBudWxsO1xuICAvKipcbiAgICogVHJ1ZSB3aGVuIGBwcmljZWAgaXMgYSBGUk9NIHByaWNlIGFuZCB0aGUgY3VzdG9tZXIgbXVzdCBjaG9vc2UgYVxuICAgKiBzaXplIGJlZm9yZSB0aGlzIGNhbiBiZSBhZGRlZC4gT3BlbiB5b3VyIHNpemUgcGlja2VyIG92ZXJcbiAgICogYHZhcmlhbnRzYCBpbnN0ZWFkIG9mIGFkZGluZyBgaXRlbUlkYCB0byB0aGUgY2FydCDigJQgYGl0ZW1JZGAgaXMgdGhlXG4gICAqIGRpc2gsIHdoaWNoIGNhcnJpZXMgbm8gcHJpY2Ugb2YgaXRzIG93biBhbmQgaXMgbm90IG9yZGVyYWJsZS5cbiAgICpcbiAgICogT25seSBldmVyIHRydWUgb24gYSBjaGFubmVsICsgdG91Y2hwb2ludCB0aGUgcGxhdGZvcm0gaGFzIG9wZW5lZFxuICAgKiBmb3IgdmFyaWFudCBwaWNrZXJzLCBzbyBhIHN1cmZhY2UgdGhhdCBjYW5ub3QgcmVuZGVyIG9uZSBuZXZlciBzZWVzXG4gICAqIGl0IHNldCBhbmQgbmVlZHMgbm8gY29kZSBmb3IgaXQuXG4gICAqXG4gICAqIE9wdGlvbmFsIGZvciB0aGUgc2FtZSByZWFzb24gYXMgYHNvdXJjZWAgYmVsb3c6IGFuIFNESyBpcyByb3V0aW5lbHlcbiAgICogbmV3ZXIgdGhhbiB0aGUgZGVwbG95bWVudCBpdCB0YWxrcyB0by5cbiAgICovXG4gIGhhc1ZhcmlhbnRzPzogYm9vbGVhbjtcbiAgLyoqIFRoZSBjaG9vc2FibGUgc2l6ZXMsIGluIHRoZSBtZXJjaGFudCdzIG9yZGVyLiBFbXB0eSB1bmxlc3MgYGhhc1ZhcmlhbnRzYC4gKi9cbiAgdmFyaWFudHM/OiBVcHNlbGxWYXJpYW50W107XG4gIHJlYXNvbkNvZGU6IFJlYXNvbkNvZGU7XG4gIC8qKlxuICAgKiBXaGljaCBsYXllciBwcm9kdWNlZCB0aGlzIGl0ZW0uXG4gICAqXG4gICAqIE9wdGlvbmFsIG9uIHB1cnBvc2UsIGFuZCBpdCBzdGF5cyBvcHRpb25hbC4gVGhlIHNlcnZpY2UgYWx3YXlzIHNldHNcbiAgICogaXQsIGJ1dCBhbiBTREsgaXMgcm91dGluZWx5IG5ld2VyIHRoYW4gdGhlIGRlcGxveW1lbnQgaXQgdGFsa3MgdG8g4oCUXG4gICAqIHR5cGluZyBpdCBhcyByZXF1aXJlZCB3b3VsZCBsZXQgVHlwZVNjcmlwdCBwcm9taXNlIGEgc3RyaW5nIHRoYXQgaXNcbiAgICogYHVuZGVmaW5lZGAgYXQgcnVudGltZSBhZ2FpbnN0IGFueSBzZXJ2aWNlIG9sZGVyIHRoYW4gdGhlIHJlbGVhc2VcbiAgICogdGhhdCBhZGRlZCBpdC4gTmFycm93IGl0IHlvdXJzZWxmIGlmIHlvdSBoYXZlIHBpbm5lZCBib3RoLlxuICAgKi9cbiAgc291cmNlPzogSXRlbVNvdXJjZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWdnZXN0aW9uc1Jlc3VsdCB7XG4gIHBsYWNlbWVudDogc3RyaW5nO1xuICB0b3VjaHBvaW50OiBUb3VjaHBvaW50O1xuICBpdGVtczogVXBzZWxsSXRlbVtdO1xuICBtZXRhOiB7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBzdHJhdGVneTogVXBzZWxsU3RyYXRlZ3k7XG4gICAgY29uZmlnVmVyc2lvbjogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVwIHRoYXQgUFJJTUFSSUxZIGFuc3dlcmVkIOKAlCB0aGUgZmlyc3Qgb25lIHRvIGNvbnRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBTaW5jZSB0aGUgbGFkZGVyIGJlY2FtZSBhIGZpbGwgbG9vcCwgc2V2ZXJhbCBzdGVwcyBjYW4gY29udHJpYnV0ZVxuICAgICAqIHRvIG9uZSByZXNwb25zZTsgYHJ1bmdgIG5hbWVzIHRoZSBvbmUgdGhhdCBhbnN3ZXJlZCBmaXJzdCwgc28gYVxuICAgICAqIGhlYWx0aHkgY2FyZCB0aGF0IG1lcmVseSB0b3BwZWQgdXAgaXRzIGxhc3Qgc2xvdCBkb2VzIG5vdCByZWFkIGFzXG4gICAgICogZnVsbHkgZGVncmFkZWQuIFJlYWQgYHN0ZXBzYCBmb3IgaG93IGZhciBkb3duIGl0IHdlbnQuXG4gICAgICovXG4gICAgcnVuZzogTGFkZGVyUnVuZztcbiAgICAvKipcbiAgICAgKiBFdmVyeSBzdGVwIHRoYXQgY29udHJpYnV0ZWQgYXQgbGVhc3Qgb25lIGl0ZW0sIGluIHRoZSBvcmRlciB0aGV5XG4gICAgICogcmFuLiBPcHRpb25hbCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGBVcHNlbGxJdGVtLnNvdXJjZWA6IGFuIG9sZGVyXG4gICAgICogc2VydmljZSBkb2VzIG5vdCBzZW5kIGl0LlxuICAgICAqL1xuICAgIHN0ZXBzPzogTGFkZGVyUnVuZ1tdO1xuICAgIC8qKiBFZmZlY3RpdmUgY2FwIGFwcGxpZWQ6IG1pbihkaXNwbGF5Lm1heEl0ZW1zLCB0b3VjaHBvaW50IHBvbGljeSkuICovXG4gICAgbWF4SXRlbXM6IG51bWJlcjtcbiAgICAvKiogSG93IGxvbmcgdGhlIGNsaWVudCBtYXkgcmV1c2UgdGhpcyByZXNwb25zZSwgaW4gc2Vjb25kcy4gKi9cbiAgICAvKiogU2Vjb25kcyB0aGlzIHJlc3BvbnNlIG1heSBiZSByZXVzZWQuIFpFUk8gbWVhbnMgZG8gbm90IHJldXNlIGl0LiAqL1xuICAgIHR0bFNlY29uZHM6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBUcnVlIHdoZW4gdGhpcyBjdXN0b21lcidzIG93biBvcmRlciBoaXN0b3J5IHNoYXBlZCB0aGUgcmFua2luZywgc29cbiAgICAgKiB0aGUgcmVzcG9uc2UgYmVsb25ncyB0byBPTkUgcGVyc29uLlxuICAgICAqXG4gICAgICogYHR0bFNlY29uZHNgIGlzIDAgd2hlbmV2ZXIgdGhpcyBpcyBzZXQsIHNvIGEgY2xpZW50IHRoYXQgY2FjaGVzIG9uXG4gICAgICogdGhlIFRUTCBpcyBhbHJlYWR5IGNvcnJlY3QuIFJlYWQgdGhpcyBvbmx5IGlmIHlvdSB3YW50IHRvIGNhY2hlXG4gICAgICogcGVyIGN1c3RvbWVyIGluc3RlYWQgb2Ygbm90IGNhY2hpbmcg4oCUIGluIHdoaWNoIGNhc2UgdGhlIGN1c3RvbWVyXG4gICAgICogTVVTVCBiZSBwYXJ0IG9mIHlvdXIgY2FjaGUga2V5LlxuICAgICAqXG4gICAgICogT3B0aW9uYWwgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBgc291cmNlYDogYW4gU0RLIGlzIHJvdXRpbmVseVxuICAgICAqIG5ld2VyIHRoYW4gdGhlIGRlcGxveW1lbnQgaXQgdGFsa3MgdG8uXG4gICAgICovXG4gICAgcGVyc29uYWxpc2VkPzogYm9vbGVhbjtcbiAgICAvKiogVHJ1ZSB3aGVuIHRoZSBjYW5kaWRhdGUgc291cmNlIGZhaWxlZCBhbmQgdGhlIHNlcnZpY2UgZGVncmFkZWQgdG8gZW1wdHkuICovXG4gICAgZGVncmFkZWQ/OiBib29sZWFuO1xuICB9O1xufVxuXG4vKiogTWVyY2hhbnQtY29udHJvbGxlZCBzZWxlY3Rpb24gaW5wdXRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJhdGVneVBhcmFtcyB7XG4gIGluY2x1ZGVkSXRlbVNsdWdzPzogc3RyaW5nW107XG4gIGluY2x1ZGVkU2VjdGlvbnM/OiBzdHJpbmdbXTtcbiAgZXhjbHVkZWRTZWN0aW9ucz86IHN0cmluZ1tdO1xuICAvKiogXCJOZXZlciBTdWdnZXN0IFRoZXNlXCIg4oCUIGFic29sdXRlLCBvdmVycmlkZXMgdGhlIHByaW9yaXR5IGxpc3QuICovXG4gIG5ldmVyU3VnZ2VzdEl0ZW1TbHVncz86IHN0cmluZ1tdO1xuICAvKiogXCJNeSBQcmlvcml0eSBJdGVtc1wiIOKAlCBvY2N1cHkgcmVzZXJ2ZWQgc2xvdHMgYWhlYWQgb2Ygc2NvcmVkIGl0ZW1zLiAqL1xuICBwcmlvcml0eUl0ZW1TbHVncz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogXCJCYWNrdXAgU3VnZ2VzdGlvbnNcIiDigJQgdXAgdG8gNiBpdGVtcy4gU2tpcHMgdGhlIHByaWNlIGJhbmQgKHRoZSBiYW5kXG4gICAqIGlzIHVzdWFsbHkgd2hhdCBlbXB0aWVkIHRoZSBwb29sKSBidXQgc3RpbGwgcmVzcGVjdHMgc3RvY2ssIGNhcnQsXG4gICAqIGV4Y2x1c2lvbnMsIGRpZXQgYW5kIGBtYXhQcmljZWAuIEl0IFRPUFMgVVAgYSBzaG9ydCBsaXN0IHJhdGhlciB0aGFuXG4gICAqIG9ubHkgZmlyaW5nIHdoZW4gZXZlcnl0aGluZyBlbHNlIHJldHVybmVkIG5vdGhpbmcsIHNvIG9uZSBzY29yZWRcbiAgICogaXRlbSBwbHVzIHR3byBiYWNrdXAgaXRlbXMgaXMgYSB2YWxpZCByZXNwb25zZS5cbiAgICovXG4gIGJhY2t1cEl0ZW1TbHVncz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIG1lcmNoYW50J3Mgb3duIGxpc3QgZm9yIHRoaXMgcGxhY2VtZW50LCB1cCB0byAxMiBpdGVtcy4gT25seSByZWFkXG4gICAqIHdoZW4gYHN0cmF0ZWd5YCBpcyBgbWVyY2hhbnQtbGlzdGAuXG4gICAqXG4gICAqIERpc3RpbmN0IGZyb20gYGluY2x1ZGVkSXRlbVNsdWdzYCwgd2hpY2ggaXMgYSBGSUxURVIgb3ZlciB0aGUgd2hvbGVcbiAgICogbWVudSDigJQgaXRlbXMgc3RpbGwgZ2V0IHJhbmtlZCBieSB0aGUgc3RyYXRlZ3kgYW5kIHN0aWxsIHJlcG9ydCBhc1xuICAgKiBgc291cmNlOiAnYWxnb3JpdGhtJ2AuIFRoaXMgUkVQTEFDRVMgdGhlIHBvb2wsIHJvdGF0ZXMgd2l0aGluIGl0IHNvIGFcbiAgICogMTAtaXRlbSBsaXN0IG9uIGEgMy1zbG90IGNhcmQgc2hvd3MgYWxsIHRlbiBvdmVyIHRpbWUsIGFuZCByZXBvcnRzIGFzXG4gICAqIGBzb3VyY2U6ICdtZXJjaGFudF9saXN0J2AuXG4gICAqL1xuICBtZXJjaGFudExpc3RJdGVtU2x1Z3M/OiBzdHJpbmdbXTtcbiAgZXhjbHVkZUNhcnRJdGVtcz86IGJvb2xlYW47XG4gIG1heFByaWNlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBQbGFjZW1lbnRTY29wZSA9ICdkZWZhdWx0JyB8ICd0ZW5hbnQnIHwgJ2J1c2luZXNzJztcblxuLyoqIFJhdyBhZG1pbi1wbGFuZSBjb25maWcgcm93IChubyBwcmVjZWRlbmNlIG1lcmdlIGFwcGxpZWQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRSZWNvcmQge1xuICBzY29wZTogUGxhY2VtZW50U2NvcGU7XG4gIHBhcmVudElkPzogbnVtYmVyO1xuICBidXNpbmVzc0lkPzogbnVtYmVyO1xuICBjaGFubmVsOiBDaGFubmVsO1xuICBrZXk6IHN0cmluZztcbiAgdG91Y2hwb2ludDogVG91Y2hwb2ludDtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgZGlzcGxheTogUGxhY2VtZW50RGlzcGxheTtcbiAgc3RyYXRlZ3k6IFVwc2VsbFN0cmF0ZWd5O1xuICBzdHJhdGVneVBhcmFtczogU3RyYXRlZ3lQYXJhbXM7XG4gIGNvbmZpZ1ZlcnNpb246IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRCeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFkbWluIHVwc2VydC4gU2NvcGUgaXMgZGVyaXZlZDogbm8gcGFyZW50SWQg4oaSIHBsYXRmb3JtIGRlZmF1bHQ7XG4gKiBwYXJlbnRJZCBvbmx5IOKGkiBicmFuZCByb3c7IHBhcmVudElkICsgYnVzaW5lc3NJZCDihpIgYnVzaW5lc3Mgb3ZlcnJpZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50VXBzZXJ0SW5wdXQge1xuICBwYXJlbnRJZD86IG51bWJlcjtcbiAgYnVzaW5lc3NJZD86IG51bWJlcjtcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAga2V5OiBzdHJpbmc7XG4gIHRvdWNocG9pbnQ6IFRvdWNocG9pbnQ7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGRpc3BsYXk6IFBsYWNlbWVudERpc3BsYXk7XG4gIHN0cmF0ZWd5PzogVXBzZWxsU3RyYXRlZ3k7XG4gIHN0cmF0ZWd5UGFyYW1zPzogU3RyYXRlZ3lQYXJhbXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50RGVsZXRlSW5wdXQge1xuICBwYXJlbnRJZD86IG51bWJlcjtcbiAgYnVzaW5lc3NJZD86IG51bWJlcjtcbiAgY2hhbm5lbDogQ2hhbm5lbDtcbiAga2V5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXF1aXJlZCBieSB0aGUgc2VydmVyIHdoZW4gYHBhcmVudElkYCBpcyBvbWl0dGVkLCBiZWNhdXNlIHRoYXQgY2FsbFxuICAgKiB0YXJnZXRzIHRoZSBQTEFURk9STSBERUZBVUxUIHJvdyBhbmQgc28gcmVtb3ZlcyB0aGUgcGxhY2VtZW50IGZvclxuICAgKiBldmVyeSB0ZW5hbnQgdGhhdCBoYXMgbm90IG92ZXJyaWRkZW4gaXQuIFdpdGhvdXQgdGhpcyB0aGUgc2VydmVyXG4gICAqIHJlamVjdHMgdGhlIHJlcXVlc3Qgd2l0aCA0MDAgcmF0aGVyIHRoYW4gZ3Vlc3NpbmcgdGhhdCBhIG1pc3NpbmdcbiAgICogcGFyZW50SWQgd2FzIGRlbGliZXJhdGUuXG4gICAqXG4gICAqIERlbGliZXJhdGVseSBub3QgZGVmYXVsdGVkIHRvIGB0cnVlYCBoZXJlOiB0aGUgd2hvbGUgcG9pbnQgb2YgdGhlXG4gICAqIGZsYWcgaXMgdGhhdCBkZWxldGluZyBhIGRlZmF1bHQgbXVzdCBiZSBzdGF0ZWQsIG5vdCBpbmZlcnJlZCBmcm9tXG4gICAqIHRoZSBzaGFwZSBvZiB0aGUgY2FsbC5cbiAgICovXG4gIGNvbmZpcm1EZWxldGVEZWZhdWx0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRzUXVlcnkge1xuICBjaGFubmVsOiBDaGFubmVsO1xuICBwYXJlbnRJZDogbnVtYmVyO1xuICBidXNpbmVzc0lkOiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgOKUgCBBdHRhY2gtcmF0ZSB0ZWxlbWV0cnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFVwc2VsbEV2ZW50VHlwZSA9ICdzaG93bicgfCAnYWRkZWQnIHwgJ2lnbm9yZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwc2VsbEV2ZW50IHtcbiAgdHlwZTogVXBzZWxsRXZlbnRUeXBlO1xuICAvKipcbiAgICogRWNobyB0aGUgaXRlbSdzIGBzb3VyY2VgLiBUaGlzIGlzIHdoYXQgbWFrZXMgXCJpcyBteSBsaXN0IHBlcmZvcm1pbmdcbiAgICogYmV0dGVyIHRoYW4geW91ciBhbGdvcml0aG0/XCIgYW5zd2VyYWJsZSDigJQgYXR0YWNoIHJhdGUgaXMgb25seVxuICAgKiBjb21wYXJhYmxlIGJ5IGxheWVyIGlmIHRoZSBsYXllciBpcyByZWNvcmRlZCBvbiB0aGUgZXZlbnQuXG4gICAqL1xuICBzb3VyY2U/OiBJdGVtU291cmNlO1xuICAvKipcbiAgICogQUxXQVlTIHRoZSBpZCB0aGUgc3VnZ2VzdGlvbiB3YXMgc2VydmVkIHVuZGVyLiBGb3IgYW4gaXRlbSB3aXRoXG4gICAqIGBoYXNWYXJpYW50c2AgdGhhdCBpcyB0aGUgRElTSCwgbm90IHRoZSBzaXplIHRoZSBjdXN0b21lciBjaG9zZSDigJRcbiAgICogc2VuZGluZyB0aGUgc2l6ZSBpZCBsZWF2ZXMgdGhpcyBldmVudCB1bmpvaW5hYmxlIHRvIHRoZSBgc2hvd25gXG4gICAqIHRoYXQgcHJlY2VkZWQgaXQsIHNvIGF0dGFjaCByYXRlIGZvciBldmVyeSBwaWNrZXIgY2FyZCByZWFkcyB6ZXJvLlxuICAgKi9cbiAgaXRlbUlkOiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGljaCBzaXplIHdhcyBjaG9zZW4sIHdoZW4gYGl0ZW1JZGAgaXMgYW4gaXRlbSB3aXRoIHZhcmlhbnRzLlxuICAgKiBBbnN3ZXJzIHdoZXRoZXIgYSBcImZyb20gMTQ1XCIgY2FyZCBzZWxscyBSZWd1bGFycyBvciBMYXJnZXMsIHdoaWNoXG4gICAqIGNhbm5vdCBiZSByZWNvdmVyZWQgbGF0ZXIgZnJvbSBhIGRhdGFzZXQgdGhhdCBuZXZlciBjYXJyaWVkIGl0LlxuICAgKi9cbiAgdmFyaWFudEl0ZW1JZD86IG51bWJlcjtcbiAgcmVhc29uQ29kZT86IFJlYXNvbkNvZGU7XG4gIC8qKiBJU08tODYwMS4gRGVmYXVsdHMgdG8gc2VydmVyIHJlY2VpdmUgdGltZSB3aGVuIG9taXR0ZWQuICovXG4gIG9jY3VycmVkQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBzZWxsRXZlbnRzSW5wdXQge1xuICBjaGFubmVsOiBDaGFubmVsO1xuICBwbGFjZW1lbnQ6IHN0cmluZztcbiAgdGVuYW50OiBUZW5hbnQ7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbiAgLyoqIEVjaG8gYG1ldGEuY29uZmlnVmVyc2lvbmAgZnJvbSB0aGUgcmVzcG9uc2UgYmVpbmcgcmVwb3J0ZWQgb24uICovXG4gIGNvbmZpZ1ZlcnNpb24/OiBzdHJpbmc7XG4gIGV2ZW50czogVXBzZWxsRXZlbnRbXTtcbn1cbiJdfQ==
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
|
@@ -16,5 +16,5 @@ exports.SDK_VERSION = void 0;
|
|
|
16
16
|
* namespace suite, so a later split or trim of one namespace cannot take
|
|
17
17
|
* the release guard with it.
|
|
18
18
|
*/
|
|
19
|
-
exports.SDK_VERSION = '
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
exports.SDK_VERSION = '3.0.0';
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ1UsUUFBQSxXQUFXLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYW51YWxseS1tYWludGFpbmVkIHZlcnNpb24gc3RyaW5nIHN1cmZhY2VkIHZpYSB0aGUgYFVzZXItQWdlbnRgXG4gKiBoZWFkZXIuIEtlcHQgaW4gc3luYyB3aXRoIGBwYWNrYWdlLmpzb25gIGJ5IGhhbmQgYmVjYXVzZSBwdWxsaW5nIHRoZVxuICogdmFsdWUgZnJvbSBwYWNrYWdlLmpzb24gYXQgcnVudGltZSB3b3VsZCByZXF1aXJlIGVpdGhlciBhIEpTT04gaW1wb3J0XG4gKiAoVFMgbGliIHNldHRpbmdzIGRlcGVuZGVudCkgb3IgYSBidWlsZC10aW1lIHJlcGxhY2VtZW50LCBhbmQgdGhlXG4gKiBjb3N0IG9mIG9uZSBidW1wLWluLXR3by1wbGFjZXMgcGVyIHJlbGVhc2UgaXMgc21hbGwuXG4gKlxuICogVGhhdCBjb3N0IHdhcyB1bmRlcmVzdGltYXRlZCBvbmNlOiB0aGUgcHVibGlzaCBqb2IgdmVyaWZpZXNcbiAqIHBhY2thZ2UuanNvbiBhZ2FpbnN0IHRoZSByZWxlYXNlIHRhZyBidXQgbmV2ZXIgcmVhZHMgdGhpcyBmaWxlLCBzbyB0aGVcbiAqIHR3byBkcmlmdGVkIGFuZCAxLjAuMCBzaGlwcGVkIHJlcG9ydGluZyAwLjkuMS4gQSB0ZXN0IG5vdyBwaW5zIHRoZW1cbiAqIHRvZ2V0aGVyIChgdGVzdC92ZXJzaW9uLnRlc3QudHNgKSwgc28gZm9yZ2V0dGluZyB0aGlzIGJ1bXAgZmFpbHMgdGhlXG4gKiBidWlsZCBpbnN0ZWFkIG9mIHRoZSBVc2VyLUFnZW50LiBJdCBsaXZlcyBhdCB0aGUgdG9wIGxldmVsLCBub3QgdW5kZXIgYVxuICogbmFtZXNwYWNlIHN1aXRlLCBzbyBhIGxhdGVyIHNwbGl0IG9yIHRyaW0gb2Ygb25lIG5hbWVzcGFjZSBjYW5ub3QgdGFrZVxuICogdGhlIHJlbGVhc2UgZ3VhcmQgd2l0aCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNES19WRVJTSU9OID0gJzMuMC4wJztcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uengage.io/platform-sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Client SDK for the uEngage platform API (audit, business, zones, wallet, upsell, auth, events). Single createClient(...) factory; OAuth2 client_credentials, static Bearer, or legacy session-token auth modes. Browser-safe realtime client at the /realtime subpath.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -67,7 +67,8 @@
|
|
|
67
67
|
"@types/node": "^20.14.10",
|
|
68
68
|
"jest": "^29.7.0",
|
|
69
69
|
"ts-jest": "^29.2.5",
|
|
70
|
-
"typescript": "^5.5.4"
|
|
70
|
+
"typescript": "^5.5.4",
|
|
71
|
+
"@uengage/common": "0.0.0"
|
|
71
72
|
},
|
|
72
73
|
"peerDependencies": {
|
|
73
74
|
"@aws-sdk/client-sns": "^3.0.0"
|
|
@@ -78,7 +79,7 @@
|
|
|
78
79
|
}
|
|
79
80
|
},
|
|
80
81
|
"scripts": {
|
|
81
|
-
"build": "tsc",
|
|
82
|
+
"build": "tsc && node scripts/include-channel-helpers.cjs",
|
|
82
83
|
"typecheck": "tsc --noEmit",
|
|
83
84
|
"test": "jest"
|
|
84
85
|
}
|