@cicctencent/midwayjs-base 1.0.23 → 1.0.24
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/dist/index.d.ts +1 -0
- package/dist/index.js +3 -2
- package/dist/lib/jwt.d.ts +135 -0
- package/dist/lib/jwt.js +38 -0
- package/dist/lib/utils.d.ts +2 -3
- package/dist/lib/utils.js +16 -30
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * as koa from '@midwayjs/koa';
|
|
2
2
|
export { BaseConfiguration as Configuration } from './configuration';
|
|
3
3
|
export * as utils from './lib/utils';
|
|
4
|
+
export * as jwt from './lib/jwt';
|
|
4
5
|
export * as decorators from './lib/decorator';
|
|
5
6
|
export * from '@fefeding/common/dist/models/base/enumType';
|
|
6
7
|
export { BaseORM as BaseEntity } from '@fefeding/common/dist/models/base/baseORM';
|
package/dist/index.js
CHANGED
|
@@ -14,12 +14,13 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.BaseEntity = exports.decorators = exports.utils = exports.Configuration = exports.koa = void 0;
|
|
17
|
+
exports.BaseEntity = exports.decorators = exports.jwt = exports.utils = exports.Configuration = exports.koa = void 0;
|
|
18
18
|
// @ts-ignore
|
|
19
19
|
exports.koa = require("@midwayjs/koa");
|
|
20
20
|
var configuration_1 = require("./configuration");
|
|
21
21
|
Object.defineProperty(exports, "Configuration", { enumerable: true, get: function () { return configuration_1.BaseConfiguration; } });
|
|
22
22
|
exports.utils = require("./lib/utils");
|
|
23
|
+
exports.jwt = require("./lib/jwt");
|
|
23
24
|
exports.decorators = require("./lib/decorator");
|
|
24
25
|
__exportStar(require("@fefeding/common/dist/models/base/enumType"), exports);
|
|
25
26
|
var baseORM_1 = require("@fefeding/common/dist/models/base/baseORM");
|
|
@@ -34,4 +35,4 @@ __exportStar(require("./base/base.model.service"), exports);
|
|
|
34
35
|
__exportStar(require("./service/session.service"), exports);
|
|
35
36
|
__exportStar(require("./service/tencent.service"), exports);
|
|
36
37
|
__exportStar(require("./base/base.controller"), exports);
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxhQUFhO0FBQ2IsdUNBQXFDO0FBRXJDLGlEQUFxRTtBQUE1RCw4R0FBQSxpQkFBaUIsT0FBaUI7QUFFM0MsdUNBQXFDO0FBQ3JDLG1DQUFpQztBQUNqQyxnREFBOEM7QUFHOUMsNkVBQTJEO0FBQzNELHFFQUFrRjtBQUF6RSxxR0FBQSxPQUFPLE9BQWM7QUFHOUIsa0VBQWdEO0FBQ2hELDJEQUF5QztBQUN6QyxpRUFBK0M7QUFFL0MsOENBQTRCO0FBQzVCLCtDQUE2QjtBQUU3QixzREFBb0M7QUFDcEMsNERBQTBDO0FBQzFDLDREQUEwQztBQUMxQyw0REFBMEM7QUFFMUMseURBQXVDIn0=
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
export type Algorithm = 'HS256' | 'HS384' | 'HS512' | 'RS256' | 'RS384' | 'RS512' | 'ES256' | 'ES384' | 'ES512' | 'PS256' | 'PS384' | 'PS512';
|
|
2
|
+
export interface VerifyOptions {
|
|
3
|
+
/**
|
|
4
|
+
* 允许的算法列表
|
|
5
|
+
* 如果未指定,将根据提供的密钥类型使用默认值:
|
|
6
|
+
* - secret: ['HS256', 'HS384', 'HS512']
|
|
7
|
+
* - rsa: ['RS256', 'RS384', 'RS512']
|
|
8
|
+
* - ec: ['ES256', 'ES384', 'ES512']
|
|
9
|
+
* - 默认: ['RS256', 'RS384', 'RS512']
|
|
10
|
+
*/
|
|
11
|
+
algorithms?: Algorithm[];
|
|
12
|
+
/**
|
|
13
|
+
* 用于验证受众(aud 声明)
|
|
14
|
+
* 可以是字符串、正则表达式或它们的数组
|
|
15
|
+
* 例如: "urn:foo", /urn:f[o]{2}/, [/urn:f[o]{2}/, "urn:bar"]
|
|
16
|
+
*/
|
|
17
|
+
audience?: string | RegExp | (string | RegExp)[];
|
|
18
|
+
/**
|
|
19
|
+
* 如果为 true,返回包含 decoded { payload, header, signature } 的对象
|
|
20
|
+
* 而不仅仅是 payload 的内容
|
|
21
|
+
*/
|
|
22
|
+
complete?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* issuer 声明的有效值(iss 字段),可以是字符串或字符串数组
|
|
25
|
+
*/
|
|
26
|
+
issuer?: string | string[];
|
|
27
|
+
/**
|
|
28
|
+
* 用于验证 JWT ID(jti 声明)的值
|
|
29
|
+
*/
|
|
30
|
+
jwtid?: string;
|
|
31
|
+
/**
|
|
32
|
+
* 如果为 true,则不验证令牌的过期时间(exp 声明)
|
|
33
|
+
*/
|
|
34
|
+
ignoreExpiration?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* 如果为 true,则不验证令牌的生效时间(nbf 声明)
|
|
37
|
+
*/
|
|
38
|
+
ignoreNotBefore?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* 用于验证主题(sub 声明)的值
|
|
41
|
+
*/
|
|
42
|
+
subject?: string;
|
|
43
|
+
/**
|
|
44
|
+
* 检查 nbf 和 exp 声明时允许的秒数偏差
|
|
45
|
+
* 用于处理不同服务器之间的时钟差异
|
|
46
|
+
*/
|
|
47
|
+
clockTolerance?: number;
|
|
48
|
+
/**
|
|
49
|
+
* 令牌仍然有效的最大允许年龄
|
|
50
|
+
* 可以是秒数或描述时间跨度的字符串
|
|
51
|
+
* 例如: 1000, "2 days", "10h", "7d"
|
|
52
|
+
* 数值被解释为秒数,字符串需提供时间单位
|
|
53
|
+
*/
|
|
54
|
+
maxAge?: number | string;
|
|
55
|
+
/**
|
|
56
|
+
* 用于所有必要比较的当前时间(以秒为单位)
|
|
57
|
+
*/
|
|
58
|
+
clockTimestamp?: number;
|
|
59
|
+
/**
|
|
60
|
+
* 用于验证 nonce 声明的值
|
|
61
|
+
* 在 OpenID 中用于 ID 令牌
|
|
62
|
+
*/
|
|
63
|
+
nonce?: string;
|
|
64
|
+
/**
|
|
65
|
+
* 如果为 true,允许与指定算法不匹配的非对称密钥
|
|
66
|
+
* 此选项仅用于向后兼容,应避免使用
|
|
67
|
+
*/
|
|
68
|
+
allowInvalidAsymmetricKeyTypes?: boolean;
|
|
69
|
+
}
|
|
70
|
+
export interface SignOptions {
|
|
71
|
+
/**
|
|
72
|
+
* 用于签名的算法
|
|
73
|
+
* @default 'HS256'
|
|
74
|
+
*/
|
|
75
|
+
algorithm?: Algorithm;
|
|
76
|
+
/**
|
|
77
|
+
* 令牌过期时间
|
|
78
|
+
* 可以是秒数或描述时间跨度的字符串(如 "2 days"、"10h")
|
|
79
|
+
* 不能与 payload 中的 exp 同时存在
|
|
80
|
+
*/
|
|
81
|
+
expiresIn?: number | string;
|
|
82
|
+
/**
|
|
83
|
+
* 令牌生效时间(在此时间前令牌无效)
|
|
84
|
+
* 可以是秒数或描述时间跨度的字符串(如 "2 days"、"10h")
|
|
85
|
+
* 不能与 payload 中的 nbf 同时存在
|
|
86
|
+
*/
|
|
87
|
+
notBefore?: number | string;
|
|
88
|
+
/**
|
|
89
|
+
* 受众声明(aud)
|
|
90
|
+
* 不能与 payload 中的 aud 同时存在
|
|
91
|
+
*/
|
|
92
|
+
audience?: string | string[];
|
|
93
|
+
/**
|
|
94
|
+
* 发行者声明(iss)
|
|
95
|
+
* 不能与 payload 中的 iss 同时存在
|
|
96
|
+
*/
|
|
97
|
+
issuer?: string;
|
|
98
|
+
/**
|
|
99
|
+
* JWT ID 声明(jti)
|
|
100
|
+
*/
|
|
101
|
+
jwtid?: string;
|
|
102
|
+
/**
|
|
103
|
+
* 主题声明(sub)
|
|
104
|
+
* 不能与 payload 中的 sub 同时存在
|
|
105
|
+
*/
|
|
106
|
+
subject?: string;
|
|
107
|
+
/**
|
|
108
|
+
* 如果为 true,则不在令牌中包含 iat(发行时间)声明
|
|
109
|
+
*/
|
|
110
|
+
noTimestamp?: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* 自定义 JWT 头部信息
|
|
113
|
+
*/
|
|
114
|
+
header?: Record<string, any>;
|
|
115
|
+
/**
|
|
116
|
+
* 用于头部中的 kid(密钥 ID)声明
|
|
117
|
+
*/
|
|
118
|
+
keyid?: string;
|
|
119
|
+
/**
|
|
120
|
+
* 如果为 true,签名函数将直接修改 payload 对象
|
|
121
|
+
* 在需要获取应用声明后但编码前的原始 payload 引用时有用
|
|
122
|
+
*/
|
|
123
|
+
mutatePayload?: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* 如果为 true,允许使用 modulus 小于 2048 的私钥进行 RSA 签名
|
|
126
|
+
*/
|
|
127
|
+
allowInsecureKeySizes?: boolean;
|
|
128
|
+
/**
|
|
129
|
+
* 如果为 true,允许与指定算法不匹配的非对称密钥
|
|
130
|
+
* 此选项仅用于向后兼容,应避免使用
|
|
131
|
+
*/
|
|
132
|
+
allowInvalidAsymmetricKeyTypes?: boolean;
|
|
133
|
+
}
|
|
134
|
+
export declare function decodeJWT(token: string, secretKey: string, options?: VerifyOptions): any;
|
|
135
|
+
export declare function encodeJWT(data: any, secretKey: string, options?: SignOptions): any;
|
package/dist/lib/jwt.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decodeJWT = decodeJWT;
|
|
4
|
+
exports.encodeJWT = encodeJWT;
|
|
5
|
+
const jwt = require("jsonwebtoken");
|
|
6
|
+
// 验证jwt
|
|
7
|
+
function decodeJWT(token, secretKey, options) {
|
|
8
|
+
try {
|
|
9
|
+
const decoded = jwt.verify(token, secretKey, {
|
|
10
|
+
algorithm: 'HS256',
|
|
11
|
+
...(options || {})
|
|
12
|
+
});
|
|
13
|
+
return decoded;
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
console.error('Token 验证失败:', err.message); // 如过期、篡改等
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/*
|
|
21
|
+
id: string;
|
|
22
|
+
code?: string;
|
|
23
|
+
loginId: string;
|
|
24
|
+
userId?: number;
|
|
25
|
+
user?: User;
|
|
26
|
+
account?: Account;
|
|
27
|
+
appId?: number;
|
|
28
|
+
status?: EStatus;
|
|
29
|
+
lastDate: Date;
|
|
30
|
+
*/
|
|
31
|
+
function encodeJWT(data, secretKey, options) {
|
|
32
|
+
const token = jwt.sign(data, secretKey, {
|
|
33
|
+
algorithm: 'HS256',
|
|
34
|
+
...(options || {})
|
|
35
|
+
});
|
|
36
|
+
return token;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9qd3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF3S0EsOEJBV0M7QUFhRCw4QkFNQztBQXJNRCxvQ0FBb0M7QUFzS3BDLFFBQVE7QUFDUixTQUFnQixTQUFTLENBQUMsS0FBYSxFQUFFLFNBQWlCLEVBQUUsT0FBdUI7SUFDL0UsSUFBSSxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFO1lBQzdDLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLEdBQUcsQ0FBQyxPQUFPLElBQUUsRUFBRSxDQUFDO1NBQ25CLENBQUMsQ0FBQztRQUNDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVTtRQUNyRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDUCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7RUFVRTtBQUNGLFNBQWdCLFNBQVMsQ0FBQyxJQUFTLEVBQUUsU0FBaUIsRUFBRSxPQUFxQjtJQUN6RSxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7UUFDcEMsU0FBUyxFQUFFLE9BQU87UUFDbEIsR0FBRyxDQUFDLE9BQU8sSUFBRSxFQUFFLENBQUM7S0FDbkIsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyJ9
|
package/dist/lib/utils.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Context } from '@midwayjs/koa';
|
|
2
2
|
import { CookieSetOptions, CookieGetOptions } from '@midwayjs/cookies';
|
|
3
|
+
export * from './jwt';
|
|
3
4
|
import { loadEnv } from '../config/env';
|
|
4
5
|
export declare function checkUrlHost(url: string, host: string | Array<string>): boolean;
|
|
5
6
|
/**
|
|
@@ -11,6 +12,4 @@ export declare function checkUrlHost(url: string, host: string | Array<string>):
|
|
|
11
12
|
export declare function getDefaultTemplate(ctx: Context, file?: string, data?: any): Promise<string>;
|
|
12
13
|
export declare function getAuthToken(ctx: Context, option?: CookieGetOptions): any;
|
|
13
14
|
export declare function setAuthToken(ctx: Context, token: string, option?: CookieSetOptions): void;
|
|
14
|
-
export
|
|
15
|
-
export declare function encodeJWT(data: any, secretKey: string): any;
|
|
16
|
-
export { loadEnv };
|
|
15
|
+
export { loadEnv, };
|
package/dist/lib/utils.js
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
2
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
17
|
exports.loadEnv = void 0;
|
|
4
18
|
exports.checkUrlHost = checkUrlHost;
|
|
5
19
|
exports.getDefaultTemplate = getDefaultTemplate;
|
|
6
20
|
exports.getAuthToken = getAuthToken;
|
|
7
21
|
exports.setAuthToken = setAuthToken;
|
|
8
|
-
exports
|
|
9
|
-
exports.encodeJWT = encodeJWT;
|
|
10
|
-
const jwt = require("jsonwebtoken");
|
|
22
|
+
__exportStar(require("./jwt"), exports);
|
|
11
23
|
const env_1 = require("../config/env");
|
|
12
24
|
Object.defineProperty(exports, "loadEnv", { enumerable: true, get: function () { return env_1.loadEnv; } });
|
|
13
25
|
//判断url是否是对应的域名
|
|
@@ -73,30 +85,4 @@ function setAuthToken(ctx, token, option) {
|
|
|
73
85
|
...(option || {})
|
|
74
86
|
});
|
|
75
87
|
}
|
|
76
|
-
|
|
77
|
-
function decodeJWT(token, secretKey) {
|
|
78
|
-
try {
|
|
79
|
-
const decoded = jwt.verify(token, secretKey);
|
|
80
|
-
return decoded;
|
|
81
|
-
}
|
|
82
|
-
catch (err) {
|
|
83
|
-
console.error('Token 验证失败:', err.message); // 如过期、篡改等
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
/*
|
|
88
|
-
id: string;
|
|
89
|
-
code?: string;
|
|
90
|
-
loginId: string;
|
|
91
|
-
userId?: number;
|
|
92
|
-
user?: User;
|
|
93
|
-
account?: Account;
|
|
94
|
-
appId?: number;
|
|
95
|
-
status?: EStatus;
|
|
96
|
-
lastDate: Date;
|
|
97
|
-
*/
|
|
98
|
-
function encodeJWT(data, secretKey) {
|
|
99
|
-
const token = jwt.sign(data, secretKey, { algorithm: 'HS256' });
|
|
100
|
-
return token;
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLG9DQVVDO0FBUUQsZ0RBcUJDO0FBR0Qsb0NBWUM7QUFHRCxvQ0FNQztBQUdELDhCQVFDO0FBYUQsOEJBR0M7QUE5RkQsb0NBQW9DO0FBQ3BDLHVDQUF3QztBQWdHcEMsd0ZBaEdLLGFBQU8sT0FnR0w7QUE5RlgsZUFBZTtBQUNmLFNBQWdCLFlBQVksQ0FBQyxHQUFXLEVBQUUsSUFBMEI7SUFDaEUsSUFBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pDLElBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JCLEtBQUksTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEIsSUFBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztRQUN6QyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2pELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7O09BS087QUFDUCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFZLEVBQUUsSUFBSSxHQUFDLFlBQVksRUFBRSxPQUFZLEVBQUU7SUFDOUUsc0JBQXNCO0lBQ3RCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7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
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0Esb0NBVUM7QUFRRCxnREFxQkM7QUFHRCxvQ0FZQztBQUdELG9DQU1DO0FBbkVELHdDQUFzQjtBQUN0Qix1Q0FBd0M7QUFzRXBDLHdGQXRFSyxhQUFPLE9Bc0VMO0FBcEVYLGVBQWU7QUFDZixTQUFnQixZQUFZLENBQUMsR0FBVyxFQUFFLElBQTBCO0lBQ2hFLElBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN6QyxJQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNyQixLQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLElBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDekMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNqRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7OztPQUtPO0FBQ1AsU0FBZ0Isa0JBQWtCLENBQUMsR0FBWSxFQUFFLElBQUksR0FBQyxZQUFZLEVBQUUsT0FBWSxFQUFFO0lBQzlFLHNCQUFzQjtJQUN0QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25DLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO0lBQ3ZDLE1BQU0sTUFBTSxHQUFHO1FBQ1gsSUFBSSxFQUFFO1lBQ0YsTUFBTSxFQUFFO2dCQUNKLE1BQU07YUFDVDtZQUNELE9BQU8sRUFBRSxHQUFHLENBQUMsY0FBYyxJQUFFLElBQUk7WUFDakMsR0FBRyxJQUFJO1NBQ1Y7UUFDRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ3ZCLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFO1FBQzFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztRQUNoQixNQUFNO1FBQ04sVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO0tBQ2xFLENBQUM7SUFDRiwwQkFBMEI7SUFDMUIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQsbUJBQW1CO0FBQ25CLFNBQWdCLFlBQVksQ0FBQyxHQUFZLEVBQUUsTUFBeUI7SUFDaEUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQVEsQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FDWCxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUNsQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7WUFDckIsTUFBTSxFQUFFLEtBQUs7WUFDYixHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztTQUNwQixDQUFDO1FBQ0YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUU7SUFDcEIsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVELFlBQVk7QUFDWixTQUFnQixZQUFZLENBQUMsR0FBWSxFQUFFLEtBQWEsRUFBRSxNQUF5QjtJQUMvRSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO1FBQzVCLFFBQVEsRUFBRSxJQUFJO1FBQ2QsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ2hDLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0tBQ3BCLENBQUMsQ0FBQztBQUNQLENBQUMifQ==
|