@wireio/protoc-gen-solana 1.0.4 → 1.0.6
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/bin/protoc-gen-solana +0 -0
- package/dist/bundle/protoc-gen-solana.cjs +221678 -0
- package/dist/bundle/protoc-gen-solana.cjs.map +7 -0
- package/lib/TypescriptFactoryShim.d.ts +14 -0
- package/lib/TypescriptFactoryShim.d.ts.map +1 -0
- package/lib/TypescriptFactoryShim.js +108 -0
- package/lib/generator/field.js +50 -43
- package/lib/generator/index.js +13 -4
- package/lib/generator/message.js +16 -13
- package/lib/generator/runtime.js +11 -5
- package/lib/generator/type-map.js +18 -11
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +12 -9
- package/lib/plugin.js +51 -15
- package/lib/util/logger.js +12 -5
- package/lib/util/names.js +9 -4
- package/package.json +13 -10
- package/dist/bundle/protoc-gen-solana.mjs +0 -7848
- package/dist/bundle/protoc-gen-solana.mjs.map +0 -7
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility shim for @protobuf-ts/plugin with TypeScript 5.x
|
|
3
|
+
*
|
|
4
|
+
* TypeScript 5.x removed the deprecated top-level ts.create* factory functions
|
|
5
|
+
* that @protobuf-ts/plugin@2.11.1 relies on (607 call sites). This shim restores
|
|
6
|
+
* them as thin wrappers around the current ts.factory.create* API.
|
|
7
|
+
*
|
|
8
|
+
* Three categories of changes between TS 4.x and 5.x factory APIs:
|
|
9
|
+
* 1. Same-name moves: ts.createFoo -> ts.factory.createFoo
|
|
10
|
+
* 2. Renames: ts.createCall -> ts.factory.createCallExpression
|
|
11
|
+
* 3. Signature changes: decorators param merged into modifiers
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=TypescriptFactoryShim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypescriptFactoryShim.d.ts","sourceRoot":"","sources":["../src/TypescriptFactoryShim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Compatibility shim for @protobuf-ts/plugin with TypeScript 5.x
|
|
4
|
+
*
|
|
5
|
+
* TypeScript 5.x removed the deprecated top-level ts.create* factory functions
|
|
6
|
+
* that @protobuf-ts/plugin@2.11.1 relies on (607 call sites). This shim restores
|
|
7
|
+
* them as thin wrappers around the current ts.factory.create* API.
|
|
8
|
+
*
|
|
9
|
+
* Three categories of changes between TS 4.x and 5.x factory APIs:
|
|
10
|
+
* 1. Same-name moves: ts.createFoo -> ts.factory.createFoo
|
|
11
|
+
* 2. Renames: ts.createCall -> ts.factory.createCallExpression
|
|
12
|
+
* 3. Signature changes: decorators param merged into modifiers
|
|
13
|
+
*/
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
19
|
+
const tsAny = typescript_1.default;
|
|
20
|
+
const factoryAny = typescript_1.default.factory;
|
|
21
|
+
// Only patch if the deprecated APIs are actually missing
|
|
22
|
+
if (typescript_1.default.factory && typeof tsAny.createTypeReferenceNode !== "function") {
|
|
23
|
+
// ── 1. Auto-map factory methods that kept the same name ─────────────────
|
|
24
|
+
for (const key of Object.getOwnPropertyNames(typescript_1.default.factory)) {
|
|
25
|
+
if (key.startsWith("create") &&
|
|
26
|
+
typeof factoryAny[key] === "function" &&
|
|
27
|
+
typeof tsAny[key] !== "function") {
|
|
28
|
+
tsAny[key] = factoryAny[key].bind(typescript_1.default.factory);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// ── 2. Renamed methods (old short name → new full name) ─────────────────
|
|
32
|
+
const renames = {
|
|
33
|
+
createArrayLiteral: "createArrayLiteralExpression",
|
|
34
|
+
createBinary: "createBinaryExpression",
|
|
35
|
+
createBreak: "createBreakStatement",
|
|
36
|
+
createCall: "createCallExpression",
|
|
37
|
+
createConditional: "createConditionalExpression",
|
|
38
|
+
createElementAccess: "createElementAccessExpression",
|
|
39
|
+
createFor: "createForStatement",
|
|
40
|
+
createForOf: "createForOfStatement",
|
|
41
|
+
createIf: "createIfStatement",
|
|
42
|
+
createNew: "createNewExpression",
|
|
43
|
+
createObjectLiteral: "createObjectLiteralExpression",
|
|
44
|
+
createParen: "createParenthesizedExpression",
|
|
45
|
+
createPostfix: "createPostfixUnaryExpression",
|
|
46
|
+
createPropertyAccess: "createPropertyAccessExpression",
|
|
47
|
+
createReturn: "createReturnStatement",
|
|
48
|
+
createSwitch: "createSwitchStatement",
|
|
49
|
+
createThrow: "createThrowStatement",
|
|
50
|
+
createWhile: "createWhileStatement",
|
|
51
|
+
};
|
|
52
|
+
for (const [oldName, newName] of Object.entries(renames)) {
|
|
53
|
+
if (typeof tsAny[oldName] !== "function" && typeof factoryAny[newName] === "function") {
|
|
54
|
+
tsAny[oldName] = factoryAny[newName].bind(typescript_1.default.factory);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// ── 3. Signature changes: decorators param removed in TS 5.x ───────────
|
|
58
|
+
//
|
|
59
|
+
// In TS 4.x many declaration functions took (decorators?, modifiers?, ...rest).
|
|
60
|
+
// In TS 5.x the signature is (modifiers?, ...rest) — decorators are merged
|
|
61
|
+
// into the modifiers array. @protobuf-ts/plugin always passes `undefined`
|
|
62
|
+
// for decorators, but we handle the general case for safety.
|
|
63
|
+
function withMergedDecorators(factoryFn) {
|
|
64
|
+
return function (decorators, modifiers, ...rest) {
|
|
65
|
+
const parts = [];
|
|
66
|
+
if (Array.isArray(decorators))
|
|
67
|
+
parts.push(...decorators);
|
|
68
|
+
if (Array.isArray(modifiers))
|
|
69
|
+
parts.push(...modifiers);
|
|
70
|
+
return factoryFn.call(typescript_1.default.factory, parts.length > 0 ? parts : undefined, ...rest);
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// Same-name functions that lost the decorators param
|
|
74
|
+
const sameNameDecoratorFns = [
|
|
75
|
+
"createClassDeclaration",
|
|
76
|
+
"createInterfaceDeclaration",
|
|
77
|
+
"createEnumDeclaration",
|
|
78
|
+
"createImportDeclaration",
|
|
79
|
+
"createIndexSignature",
|
|
80
|
+
];
|
|
81
|
+
for (const name of sameNameDecoratorFns) {
|
|
82
|
+
if (typeof factoryAny[name] === "function") {
|
|
83
|
+
tsAny[name] = withMergedDecorators(factoryAny[name]);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Renamed functions that ALSO lost the decorators param
|
|
87
|
+
const renamedDecoratorFns = {
|
|
88
|
+
createMethod: "createMethodDeclaration",
|
|
89
|
+
createProperty: "createPropertyDeclaration",
|
|
90
|
+
createConstructor: "createConstructorDeclaration",
|
|
91
|
+
createParameter: "createParameterDeclaration",
|
|
92
|
+
};
|
|
93
|
+
for (const [oldName, newName] of Object.entries(renamedDecoratorFns)) {
|
|
94
|
+
if (typeof factoryAny[newName] === "function") {
|
|
95
|
+
tsAny[oldName] = withMergedDecorators(factoryAny[newName]);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// ── 4. createPropertySignature: initializer param removed ───────────────
|
|
99
|
+
// Old: (modifiers?, name, questionToken?, type?, initializer?)
|
|
100
|
+
// New: (modifiers?, name, questionToken?, type?)
|
|
101
|
+
if (typeof typescript_1.default.factory.createPropertySignature === "function") {
|
|
102
|
+
const orig = typescript_1.default.factory.createPropertySignature.bind(typescript_1.default.factory);
|
|
103
|
+
tsAny.createPropertySignature = function (modifiers, name, questionToken, type, _initializer) {
|
|
104
|
+
return orig(modifiers, name, questionToken, type);
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZXNjcmlwdEZhY3RvcnlTaGltLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1R5cGVzY3JpcHRGYWN0b3J5U2hpbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7Ozs7O0FBRUgsNERBQTJCO0FBRTNCLE1BQU0sS0FBSyxHQUFHLG9CQUFTLENBQUE7QUFDdkIsTUFBTSxVQUFVLEdBQUcsb0JBQUUsQ0FBQyxPQUFjLENBQUE7QUFFcEMseURBQXlEO0FBQ3pELElBQUksb0JBQUUsQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLENBQUMsdUJBQXVCLEtBQUssVUFBVSxFQUFFLENBQUM7SUFFdEUsMkVBQTJFO0lBQzNFLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLG9CQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN6RCxJQUNFLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3hCLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFVBQVU7WUFDckMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxFQUNoQyxDQUFDO1lBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxNQUFNLE9BQU8sR0FBMkI7UUFDdEMsa0JBQWtCLEVBQUUsOEJBQThCO1FBQ2xELFlBQVksRUFBRSx3QkFBd0I7UUFDdEMsV0FBVyxFQUFFLHNCQUFzQjtRQUNuQyxVQUFVLEVBQUUsc0JBQXNCO1FBQ2xDLGlCQUFpQixFQUFFLDZCQUE2QjtRQUNoRCxtQkFBbUIsRUFBRSwrQkFBK0I7UUFDcEQsU0FBUyxFQUFFLG9CQUFvQjtRQUMvQixXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLFFB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QUFPLENBQUMsdUJBQXVCLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDN0QsTUFBTSxJQUFJLEdBQUcsb0JBQUUsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLG9CQUFFLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDaEUsS0FBSyxDQUFDLHVCQUF1QixHQUFHLFVBQVUsU0FBYyxFQUFFLElBQVMsRUFBRSxhQUFrQixFQUFFLElBQVMsRUFBRSxZQUFpQjtZQUNuSCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNuRCxDQUFDLENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tcGF0aWJpbGl0eSBzaGltIGZvciBAcHJvdG9idWYtdHMvcGx1Z2luIHdpdGggVHlwZVNjcmlwdCA1LnhcbiAqXG4gKiBUeXBlU2NyaXB0IDUueCByZW1vdmVkIHRoZSBkZXByZWNhdGVkIHRvcC1sZXZlbCB0cy5jcmVhdGUqIGZhY3RvcnkgZnVuY3Rpb25zXG4gKiB0aGF0IEBwcm90b2J1Zi10cy9wbHVnaW5AMi4xMS4xIHJlbGllcyBvbiAoNjA3IGNhbGwgc2l0ZXMpLiBUaGlzIHNoaW0gcmVzdG9yZXNcbiAqIHRoZW0gYXMgdGhpbiB3cmFwcGVycyBhcm91bmQgdGhlIGN1cnJlbnQgdHMuZmFjdG9yeS5jcmVhdGUqIEFQSS5cbiAqXG4gKiBUaHJlZSBjYXRlZ29yaWVzIG9mIGNoYW5nZXMgYmV0d2VlbiBUUyA0LnggYW5kIDUueCBmYWN0b3J5IEFQSXM6XG4gKiAgIDEuIFNhbWUtbmFtZSBtb3ZlczogdHMuY3JlYXRlRm9vIC0+IHRzLmZhY3RvcnkuY3JlYXRlRm9vXG4gKiAgIDIuIFJlbmFtZXM6IHRzLmNyZWF0ZUNhbGwgLT4gdHMuZmFjdG9yeS5jcmVhdGVDYWxsRXhwcmVzc2lvblxuICogICAzLiBTaWduYXR1cmUgY2hhbmdlczogZGVjb3JhdG9ycyBwYXJhbSBtZXJnZWQgaW50byBtb2RpZmllcnNcbiAqL1xuXG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIlxuXG5jb25zdCB0c0FueSA9IHRzIGFzIGFueVxuY29uc3QgZmFjdG9yeUFueSA9IHRzLmZhY3RvcnkgYXMgYW55XG5cbi8vIE9ubHkgcGF0Y2ggaWYgdGhlIGRlcHJlY2F0ZWQgQVBJcyBhcmUgYWN0dWFsbHkgbWlzc2luZ1xuaWYgKHRzLmZhY3RvcnkgJiYgdHlwZW9mIHRzQW55LmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlICE9PSBcImZ1bmN0aW9uXCIpIHtcblxuICAvLyDilIDilIAgMS4gQXV0by1tYXAgZmFjdG9yeSBtZXRob2RzIHRoYXQga2VwdCB0aGUgc2FtZSBuYW1lIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0cy5mYWN0b3J5KSkge1xuICAgIGlmIChcbiAgICAgIGtleS5zdGFydHNXaXRoKFwiY3JlYXRlXCIpICYmXG4gICAgICB0eXBlb2YgZmFjdG9yeUFueVtrZXldID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgIHR5cGVvZiB0c0FueVtrZXldICE9PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIHRzQW55W2tleV0gPSBmYWN0b3J5QW55W2tleV0uYmluZCh0cy5mYWN0b3J5KVxuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCAyLiBSZW5hbWVkIG1ldGhvZHMgKG9sZCBzaG9ydCBuYW1lIOKGkiBuZXcgZnVsbCBuYW1lKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3QgcmVuYW1lczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBjcmVhdGVBcnJheUxpdGVyYWw6IFwiY3JlYXRlQXJyYXlMaXRlcmFsRXhwcmVzc2lvblwiLFxuICAgIGNyZWF0ZUJpbmFyeTogXCJjcmVhdGVCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgY3JlYXRlQnJlYWs6IFwiY3JlYXRlQnJlYWtTdGF0ZW1lbnRcIixcbiAgICBjcmVhdGVDYWxsOiBcImNyZWF0ZUNhbGxFeHByZXNzaW9uXCIsXG4gICAgY3JlYXRlQ29uZGl0aW9uYWw6IFwiY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsXG4gICAgY3JlYXRlRWxlbWVudEFjY2VzczogXCJjcmVhdGVFbGVtZW50QWNjZXNzRXhwcmVzc2lvblwiLFxuICAgIGNyZWF0ZUZvcjogXCJjcmVhdGVGb3JTdGF0ZW1lbnRcIixcbiAgICBjcmVhdGVGb3JPZjogXCJjcmVhdGVGb3JPZlN0YXRlbWVudFwiLFxuICAgIGNyZWF0ZUlmOiBcImNyZWF0ZUlmU3RhdGVtZW50XCIsXG4gICAgY3JlYXRlTmV3OiBcImNyZWF0ZU5ld0V4cHJlc3Npb25cIixcbiAgICBjcmVhdGVPYmplY3RMaXRlcmFsOiBcImNyZWF0ZU9iamVjdExpdGVyYWxFeHByZXNzaW9uXCIsXG4gICAgY3JlYXRlUGFyZW46IFwiY3JlYXRlUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIixcbiAgICBjcmVhdGVQb3N0Zml4OiBcImNyZWF0ZVBvc3RmaXhVbmFyeUV4cHJlc3Npb25cIixcbiAgICBjcmVhdGVQcm9wZXJ0eUFjY2VzczogXCJjcmVhdGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb25cIixcbiAgICBjcmVhdGVSZXR1cm46IFwiY3JlYXRlUmV0dXJuU3RhdGVtZW50XCIsXG4gICAgY3JlYXRlU3dpdGNoOiBcImNyZWF0ZVN3aXRjaFN0YXRlbWVudFwiLFxuICAgIGNyZWF0ZVRocm93OiBcImNyZWF0ZVRocm93U3RhdGVtZW50XCIsXG4gICAgY3JlYXRlV2hpbGU6IFwiY3JlYXRlV2hpbGVTdGF0ZW1lbnRcIixcbiAgfVxuXG4gIGZvciAoY29uc3QgW29sZE5hbWUsIG5ld05hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlbmFtZXMpKSB7XG4gICAgaWYgKHR5cGVvZiB0c0FueVtvbGROYW1lXSAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBmYWN0b3J5QW55W25ld05hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRzQW55W29sZE5hbWVdID0gZmFjdG9yeUFueVtuZXdOYW1lXS5iaW5kKHRzLmZhY3RvcnkpXG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIDMuIFNpZ25hdHVyZSBjaGFuZ2VzOiBkZWNvcmF0b3JzIHBhcmFtIHJlbW92ZWQgaW4gVFMgNS54IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvL1xuICAvLyBJbiBUUyA0LnggbWFueSBkZWNsYXJhdGlvbiBmdW5jdGlvbnMgdG9vayAoZGVjb3JhdG9ycz8sIG1vZGlmaWVycz8sIC4uLnJlc3QpLlxuICAvLyBJbiBUUyA1LnggdGhlIHNpZ25hdHVyZSBpcyAobW9kaWZpZXJzPywgLi4ucmVzdCkg4oCUIGRlY29yYXRvcnMgYXJlIG1lcmdlZFxuICAvLyBpbnRvIHRoZSBtb2RpZmllcnMgYXJyYXkuIEBwcm90b2J1Zi10cy9wbHVnaW4gYWx3YXlzIHBhc3NlcyBgdW5kZWZpbmVkYFxuICAvLyBmb3IgZGVjb3JhdG9ycywgYnV0IHdlIGhhbmRsZSB0aGUgZ2VuZXJhbCBjYXNlIGZvciBzYWZldHkuXG5cbiAgZnVuY3Rpb24gd2l0aE1lcmdlZERlY29yYXRvcnMoZmFjdG9yeUZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZGVjb3JhdG9yczogYW55LCBtb2RpZmllcnM6IGFueSwgLi4ucmVzdDogYW55W10pIHtcbiAgICAgIGNvbnN0IHBhcnRzOiBhbnlbXSA9IFtdXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWNvcmF0b3JzKSkgcGFydHMucHVzaCguLi5kZWNvcmF0b3JzKVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobW9kaWZpZXJzKSkgcGFydHMucHVzaCguLi5tb2RpZmllcnMpXG4gICAgICByZXR1cm4gZmFjdG9yeUZuLmNhbGwodHMuZmFjdG9yeSwgcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzIDogdW5kZWZpbmVkLCAuLi5yZXN0KVxuICAgIH1cbiAgfVxuXG4gIC8vIFNhbWUtbmFtZSBmdW5jdGlvbnMgdGhhdCBsb3N0IHRoZSBkZWNvcmF0b3JzIHBhcmFtXG4gIGNvbnN0IHNhbWVOYW1lRGVjb3JhdG9yRm5zID0gW1xuICAgIFwiY3JlYXRlQ2xhc3NEZWNsYXJhdGlvblwiLFxuICAgIFwiY3JlYXRlSW50ZXJmYWNlRGVjbGFyYXRpb25cIixcbiAgICBcImNyZWF0ZUVudW1EZWNsYXJhdGlvblwiLFxuICAgIFwiY3JlYXRlSW1wb3J0RGVjbGFyYXRpb25cIixcbiAgICBcImNyZWF0ZUluZGV4U2lnbmF0dXJlXCIsXG4gIF1cbiAgZm9yIChjb25zdCBuYW1lIG9mIHNhbWVOYW1lRGVjb3JhdG9yRm5zKSB7XG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5QW55W25hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRzQW55W25hbWVdID0gd2l0aE1lcmdlZERlY29yYXRvcnMoZmFjdG9yeUFueVtuYW1lXSlcbiAgICB9XG4gIH1cblxuICAvLyBSZW5hbWVkIGZ1bmN0aW9ucyB0aGF0IEFMU08gbG9zdCB0aGUgZGVjb3JhdG9ycyBwYXJhbVxuICBjb25zdCByZW5hbWVkRGVjb3JhdG9yRm5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGNyZWF0ZU1ldGhvZDogXCJjcmVhdGVNZXRob2REZWNsYXJhdGlvblwiLFxuICAgIGNyZWF0ZVByb3BlcnR5OiBcImNyZWF0ZVByb3BlcnR5RGVjbGFyYXRpb25cIixcbiAgICBjcmVhdGVDb25zdHJ1Y3RvcjogXCJjcmVhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIsXG4gICAgY3JlYXRlUGFyYW1ldGVyOiBcImNyZWF0ZVBhcmFtZXRlckRlY2xhcmF0aW9uXCIsXG4gIH1cbiAgZm9yIChjb25zdCBbb2xkTmFtZSwgbmV3TmFtZV0gb2YgT2JqZWN0LmVudHJpZXMocmVuYW1lZERlY29yYXRvckZucykpIHtcbiAgICBpZiAodHlwZW9mIGZhY3RvcnlBbnlbbmV3TmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdHNBbnlbb2xkTmFtZV0gPSB3aXRoTWVyZ2VkRGVjb3JhdG9ycyhmYWN0b3J5QW55W25ld05hbWVdKVxuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCA0LiBjcmVhdGVQcm9wZXJ0eVNpZ25hdHVyZTogaW5pdGlhbGl6ZXIgcGFyYW0gcmVtb3ZlZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gT2xkOiAobW9kaWZpZXJzPywgbmFtZSwgcXVlc3Rpb25Ub2tlbj8sIHR5cGU/LCBpbml0aWFsaXplcj8pXG4gIC8vIE5ldzogKG1vZGlmaWVycz8sIG5hbWUsIHF1ZXN0aW9uVG9rZW4/LCB0eXBlPylcbiAgaWYgKHR5cGVvZiB0cy5mYWN0b3J5LmNyZWF0ZVByb3BlcnR5U2lnbmF0dXJlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjb25zdCBvcmlnID0gdHMuZmFjdG9yeS5jcmVhdGVQcm9wZXJ0eVNpZ25hdHVyZS5iaW5kKHRzLmZhY3RvcnkpXG4gICAgdHNBbnkuY3JlYXRlUHJvcGVydHlTaWduYXR1cmUgPSBmdW5jdGlvbiAobW9kaWZpZXJzOiBhbnksIG5hbWU6IGFueSwgcXVlc3Rpb25Ub2tlbjogYW55LCB0eXBlOiBhbnksIF9pbml0aWFsaXplcjogYW55KSB7XG4gICAgICByZXR1cm4gb3JpZyhtb2RpZmllcnMsIG5hbWUsIHF1ZXN0aW9uVG9rZW4sIHR5cGUpXG4gICAgfVxuICB9XG59XG4iXX0=
|
package/lib/generator/field.js
CHANGED
|
@@ -1,23 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isRepeated = isRepeated;
|
|
4
|
+
exports.isMessage = isMessage;
|
|
5
|
+
exports.genStructMember = genStructMember;
|
|
6
|
+
exports.genFieldEncode = genFieldEncode;
|
|
7
|
+
exports.genFieldDecode = genFieldDecode;
|
|
8
|
+
const names_js_1 = require("../util/names.js");
|
|
9
|
+
const type_map_js_1 = require("./type-map.js");
|
|
10
|
+
const logger_js_1 = require("../util/logger.js");
|
|
4
11
|
/** Check if field is repeated (label == 3). */
|
|
5
|
-
|
|
12
|
+
function isRepeated(field) {
|
|
6
13
|
return field.label === 3;
|
|
7
14
|
}
|
|
8
15
|
/** Check if field is a message type (type == 11). */
|
|
9
|
-
|
|
16
|
+
function isMessage(field) {
|
|
10
17
|
return field.type === 11;
|
|
11
18
|
}
|
|
12
19
|
/**
|
|
13
20
|
* Generate the Rust struct member declaration for a field.
|
|
14
21
|
*/
|
|
15
|
-
|
|
16
|
-
const rustName = toSnakeCase(field.name);
|
|
17
|
-
let rustType = resolveRustType(field.type, field.typeName);
|
|
22
|
+
function genStructMember(field) {
|
|
23
|
+
const rustName = (0, names_js_1.toSnakeCase)(field.name);
|
|
24
|
+
let rustType = (0, type_map_js_1.resolveRustType)(field.type, field.typeName);
|
|
18
25
|
if (field.mapEntry) {
|
|
19
|
-
const keyType = resolveRustType(field.mapEntry.keyType, undefined);
|
|
20
|
-
const valType = resolveRustType(field.mapEntry.valueType, field.mapEntry.valueTypeName);
|
|
26
|
+
const keyType = (0, type_map_js_1.resolveRustType)(field.mapEntry.keyType, undefined);
|
|
27
|
+
const valType = (0, type_map_js_1.resolveRustType)(field.mapEntry.valueType, field.mapEntry.valueTypeName);
|
|
21
28
|
// Maps become parallel Vecs: keys + values
|
|
22
29
|
return [
|
|
23
30
|
` pub ${rustName}_keys: Vec<${keyType}>,`,
|
|
@@ -33,14 +40,14 @@ export function genStructMember(field) {
|
|
|
33
40
|
* Generate encode logic for a single field.
|
|
34
41
|
* Returns Rust statements that append encoded bytes to a `Vec<u8> buf`.
|
|
35
42
|
*/
|
|
36
|
-
|
|
37
|
-
const rustName = toSnakeCase(field.name);
|
|
38
|
-
const typeInfo = PROTO_TYPE_MAP[field.type];
|
|
43
|
+
function genFieldEncode(field) {
|
|
44
|
+
const rustName = (0, names_js_1.toSnakeCase)(field.name);
|
|
45
|
+
const typeInfo = type_map_js_1.PROTO_TYPE_MAP[field.type];
|
|
39
46
|
if (!typeInfo) {
|
|
40
|
-
log.warn(`Skipping unsupported field type ${field.type} for ${field.name}`);
|
|
47
|
+
logger_js_1.log.warn(`Skipping unsupported field type ${field.type} for ${field.name}`);
|
|
41
48
|
return ` // TODO: unsupported field type ${field.type} for ${field.name}`;
|
|
42
49
|
}
|
|
43
|
-
const tag = fieldTag(field.number, field.mapEntry ? WireType.LengthDelimited : typeInfo.wireType);
|
|
50
|
+
const tag = (0, type_map_js_1.fieldTag)(field.number, field.mapEntry ? type_map_js_1.WireType.LengthDelimited : typeInfo.wireType);
|
|
44
51
|
const tagHex = `0x${tag.toString(16).padStart(2, "0")}`;
|
|
45
52
|
if (field.mapEntry) {
|
|
46
53
|
return genMapEncode(field, tagHex);
|
|
@@ -57,13 +64,13 @@ export function genFieldEncode(field) {
|
|
|
57
64
|
* Generate decode branch for a single field within the tag-dispatch match.
|
|
58
65
|
* Returns a `TAG => { ... }` arm.
|
|
59
66
|
*/
|
|
60
|
-
|
|
61
|
-
const rustName = toSnakeCase(field.name);
|
|
62
|
-
const typeInfo = PROTO_TYPE_MAP[field.type];
|
|
67
|
+
function genFieldDecode(field) {
|
|
68
|
+
const rustName = (0, names_js_1.toSnakeCase)(field.name);
|
|
69
|
+
const typeInfo = type_map_js_1.PROTO_TYPE_MAP[field.type];
|
|
63
70
|
if (!typeInfo) {
|
|
64
71
|
return ` // TODO: unsupported field type ${field.type} for ${field.name}`;
|
|
65
72
|
}
|
|
66
|
-
const tag = fieldTag(field.number, field.mapEntry ? WireType.LengthDelimited : typeInfo.wireType);
|
|
73
|
+
const tag = (0, type_map_js_1.fieldTag)(field.number, field.mapEntry ? type_map_js_1.WireType.LengthDelimited : typeInfo.wireType);
|
|
67
74
|
if (field.mapEntry) {
|
|
68
75
|
return genMapDecode(field, rustName, tag);
|
|
69
76
|
}
|
|
@@ -77,7 +84,7 @@ export function genFieldDecode(field) {
|
|
|
77
84
|
}
|
|
78
85
|
// ── Internal codegen helpers ──────────────────────────────────────────
|
|
79
86
|
function genScalarEncode(field, rustName, typeInfo, tagHex) {
|
|
80
|
-
const cast = needsVarintCast(field.type);
|
|
87
|
+
const cast = (0, type_map_js_1.needsVarintCast)(field.type);
|
|
81
88
|
// For float types, need to pass bits
|
|
82
89
|
if (field.type === 1) {
|
|
83
90
|
// double → f64.to_bits() → u64
|
|
@@ -131,19 +138,19 @@ function genRepeatedEncode(field, rustName, typeInfo, tagHex) {
|
|
|
131
138
|
lines.push(` ${typeInfo.encodeFunc}(&mut buf, elem);`);
|
|
132
139
|
}
|
|
133
140
|
else {
|
|
134
|
-
const cast = needsVarintCast(field.type);
|
|
141
|
+
const cast = (0, type_map_js_1.needsVarintCast)(field.type);
|
|
135
142
|
lines.push(` ${typeInfo.encodeFunc}(&mut buf, *elem${cast});`);
|
|
136
143
|
}
|
|
137
144
|
lines.push(` }`);
|
|
138
145
|
return lines.join("\n");
|
|
139
146
|
}
|
|
140
147
|
function genMapEncode(field, tagHex) {
|
|
141
|
-
const rustName = toSnakeCase(field.name);
|
|
148
|
+
const rustName = (0, names_js_1.toSnakeCase)(field.name);
|
|
142
149
|
const me = field.mapEntry;
|
|
143
|
-
const keyInfo = PROTO_TYPE_MAP[me.keyType];
|
|
144
|
-
const valInfo = PROTO_TYPE_MAP[me.valueType];
|
|
145
|
-
const keyTag = `0x${fieldTag(1, keyInfo.wireType).toString(16).padStart(2, "0")}`;
|
|
146
|
-
const keyCast = needsVarintCast(me.keyType);
|
|
150
|
+
const keyInfo = type_map_js_1.PROTO_TYPE_MAP[me.keyType];
|
|
151
|
+
const valInfo = type_map_js_1.PROTO_TYPE_MAP[me.valueType];
|
|
152
|
+
const keyTag = `0x${(0, type_map_js_1.fieldTag)(1, keyInfo.wireType).toString(16).padStart(2, "0")}`;
|
|
153
|
+
const keyCast = (0, type_map_js_1.needsVarintCast)(me.keyType);
|
|
147
154
|
const lines = [
|
|
148
155
|
` for i in 0..self.${rustName}_keys.len() {`,
|
|
149
156
|
` let mut entry = Vec::new();`,
|
|
@@ -156,12 +163,12 @@ function genMapEncode(field, tagHex) {
|
|
|
156
163
|
lines.push(` ${keyInfo.encodeFunc}(&mut entry, self.${rustName}_keys[i]${keyCast});`);
|
|
157
164
|
}
|
|
158
165
|
if (me.valueType === 11) {
|
|
159
|
-
const valTag = `0x${fieldTag(2, WireType.LengthDelimited).toString(16).padStart(2, "0")}`;
|
|
166
|
+
const valTag = `0x${(0, type_map_js_1.fieldTag)(2, type_map_js_1.WireType.LengthDelimited).toString(16).padStart(2, "0")}`;
|
|
160
167
|
lines.push(` encode_key(&mut entry, ${valTag});`, ` let val_encoded = self.${rustName}_values[i].encode();`, ` encode_varint(&mut entry, val_encoded.len() as u64);`, ` entry.extend_from_slice(&val_encoded);`);
|
|
161
168
|
}
|
|
162
169
|
else {
|
|
163
|
-
const valTag = `0x${fieldTag(2, valInfo.wireType).toString(16).padStart(2, "0")}`;
|
|
164
|
-
const valCast = needsVarintCast(me.valueType);
|
|
170
|
+
const valTag = `0x${(0, type_map_js_1.fieldTag)(2, valInfo.wireType).toString(16).padStart(2, "0")}`;
|
|
171
|
+
const valCast = (0, type_map_js_1.needsVarintCast)(me.valueType);
|
|
165
172
|
lines.push(` encode_key(&mut entry, ${valTag});`);
|
|
166
173
|
if (valInfo.encodeRef) {
|
|
167
174
|
lines.push(` ${valInfo.encodeFunc}(&mut entry, &self.${rustName}_values[i]);`);
|
|
@@ -174,7 +181,7 @@ function genMapEncode(field, tagHex) {
|
|
|
174
181
|
return lines.join("\n");
|
|
175
182
|
}
|
|
176
183
|
function genScalarDecode(field, rustName, typeInfo, tag) {
|
|
177
|
-
const cast = varintDecodeCast(field.type);
|
|
184
|
+
const cast = (0, type_map_js_1.varintDecodeCast)(field.type);
|
|
178
185
|
// Float types need from_bits
|
|
179
186
|
if (field.type === 1) {
|
|
180
187
|
// double → f64::from_bits
|
|
@@ -205,7 +212,7 @@ function genScalarDecode(field, rustName, typeInfo, tag) {
|
|
|
205
212
|
].join("\n");
|
|
206
213
|
}
|
|
207
214
|
function genMessageDecode(field, rustName, tag) {
|
|
208
|
-
const structType = resolveRustType(field.type, field.typeName);
|
|
215
|
+
const structType = (0, type_map_js_1.resolveRustType)(field.type, field.typeName);
|
|
209
216
|
return [
|
|
210
217
|
` ${tag} => {`,
|
|
211
218
|
` let (len, new_pos) = decode_varint(data, pos)?;`,
|
|
@@ -217,7 +224,7 @@ function genMessageDecode(field, rustName, tag) {
|
|
|
217
224
|
}
|
|
218
225
|
function genRepeatedDecode(field, rustName, typeInfo, tag) {
|
|
219
226
|
if (isMessage(field)) {
|
|
220
|
-
const structType = resolveRustType(field.type, field.typeName);
|
|
227
|
+
const structType = (0, type_map_js_1.resolveRustType)(field.type, field.typeName);
|
|
221
228
|
return [
|
|
222
229
|
` ${tag} => {`,
|
|
223
230
|
` let (len, new_pos) = decode_varint(data, pos)?;`,
|
|
@@ -227,7 +234,7 @@ function genRepeatedDecode(field, rustName, typeInfo, tag) {
|
|
|
227
234
|
` }`
|
|
228
235
|
].join("\n");
|
|
229
236
|
}
|
|
230
|
-
const cast = varintDecodeCast(field.type);
|
|
237
|
+
const cast = (0, type_map_js_1.varintDecodeCast)(field.type);
|
|
231
238
|
if (field.type === 1) {
|
|
232
239
|
return [
|
|
233
240
|
` ${tag} => {`,
|
|
@@ -256,12 +263,12 @@ function genRepeatedDecode(field, rustName, typeInfo, tag) {
|
|
|
256
263
|
}
|
|
257
264
|
function genMapDecode(field, rustName, tag) {
|
|
258
265
|
const me = field.mapEntry;
|
|
259
|
-
const keyInfo = PROTO_TYPE_MAP[me.keyType];
|
|
260
|
-
const valInfo = PROTO_TYPE_MAP[me.valueType];
|
|
261
|
-
const keySol = resolveRustType(me.keyType, undefined);
|
|
262
|
-
const valSol = resolveRustType(me.valueType, me.valueTypeName);
|
|
263
|
-
const keyTag = fieldTag(1, keyInfo.wireType);
|
|
264
|
-
const keyCast = varintDecodeCast(me.keyType);
|
|
266
|
+
const keyInfo = type_map_js_1.PROTO_TYPE_MAP[me.keyType];
|
|
267
|
+
const valInfo = type_map_js_1.PROTO_TYPE_MAP[me.valueType];
|
|
268
|
+
const keySol = (0, type_map_js_1.resolveRustType)(me.keyType, undefined);
|
|
269
|
+
const valSol = (0, type_map_js_1.resolveRustType)(me.valueType, me.valueTypeName);
|
|
270
|
+
const keyTag = (0, type_map_js_1.fieldTag)(1, keyInfo.wireType);
|
|
271
|
+
const keyCast = (0, type_map_js_1.varintDecodeCast)(me.keyType);
|
|
265
272
|
const lines = [
|
|
266
273
|
` ${tag} => {`,
|
|
267
274
|
` let (entry_len, new_pos) = decode_varint(data, pos)?;`,
|
|
@@ -280,15 +287,15 @@ function genMapDecode(field, rustName, tag) {
|
|
|
280
287
|
` }`
|
|
281
288
|
];
|
|
282
289
|
if (me.valueType === 11) {
|
|
283
|
-
const valTag = fieldTag(2, WireType.LengthDelimited);
|
|
290
|
+
const valTag = (0, type_map_js_1.fieldTag)(2, type_map_js_1.WireType.LengthDelimited);
|
|
284
291
|
lines.push(` ${valTag} => {`, ` let (v_len, new_pos) = decode_varint(data, pos)?;`, ` let v_end = new_pos + v_len as usize;`, ` val = ${valSol}::decode(&data[new_pos..v_end])?;`, ` pos = v_end;`, ` }`);
|
|
285
292
|
}
|
|
286
293
|
else {
|
|
287
|
-
const valTag = fieldTag(2, valInfo.wireType);
|
|
288
|
-
const valCast = varintDecodeCast(me.valueType);
|
|
294
|
+
const valTag = (0, type_map_js_1.fieldTag)(2, valInfo.wireType);
|
|
295
|
+
const valCast = (0, type_map_js_1.varintDecodeCast)(me.valueType);
|
|
289
296
|
lines.push(` ${valTag} => {`, ` let (v, new_pos) = ${valInfo.decodeFunc}(data, pos)?;`, ` val = v${valCast};`, ` pos = new_pos;`, ` }`);
|
|
290
297
|
}
|
|
291
298
|
lines.push(` _ => {`, ` pos = skip_field(data, pos, entry_tag & 0x07)?;`, ` }`, ` }`, ` }`, ` msg.${rustName}_keys.push(key);`, ` msg.${rustName}_values.push(val);`, ` }`);
|
|
292
299
|
return lines.join("\n");
|
|
293
300
|
}
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdG9yL2ZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM5QyxPQUFPLEVBQ0wsY0FBYyxFQUNkLFFBQVEsRUFDUixRQUFRLEVBQ1IsZUFBZSxFQUNmLGVBQWUsRUFDZixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBYXZDLCtDQUErQztBQUMvQyxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWdCO0lBQ3pDLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUE7QUFDMUIsQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWdCO0lBQ3hDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUE7QUFDMUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFnQjtJQUM5QyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3hDLElBQUksUUFBUSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUUxRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDbEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUM3QixLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFDeEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQzdCLENBQUE7UUFDRCwyQ0FBMkM7UUFDM0MsT0FBTztZQUNMLFdB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ImltcG9ydCB7IHRvU25ha2VDYXNlIH0gZnJvbSBcIi4uL3V0aWwvbmFtZXMuanNcIlxuaW1wb3J0IHtcbiAgUFJPVE9fVFlQRV9NQVAsXG4gIFdpcmVUeXBlLFxuICBmaWVsZFRhZyxcbiAgcmVzb2x2ZVJ1c3RUeXBlLFxuICBuZWVkc1ZhcmludENhc3QsXG4gIHZhcmludERlY29kZUNhc3Rcbn0gZnJvbSBcIi4vdHlwZS1tYXAuanNcIlxuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIi4uL3V0aWwvbG9nZ2VyLmpzXCJcblxuLyoqIFBhcnNlZCBmaWVsZCBkZXNjcmlwdG9yIHN1YnNldCBuZWVkZWQgZm9yIGNvZGVnZW4uICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkSW5mbyB7XG4gIG5hbWU6IHN0cmluZ1xuICBudW1iZXI6IG51bWJlclxuICB0eXBlOiBudW1iZXJcbiAgdHlwZU5hbWU/OiBzdHJpbmdcbiAgbGFiZWw6IG51bWJlciAvLyAxPW9wdGlvbmFsLCAyPXJlcXVpcmVkLCAzPXJlcGVhdGVkXG4gIG9uZW9mSW5kZXg/OiBudW1iZXJcbiAgbWFwRW50cnk/OiB7IGtleVR5cGU6IG51bWJlcjsgdmFsdWVUeXBlOiBudW1iZXI7IHZhbHVlVHlwZU5hbWU/OiBzdHJpbmcgfVxufVxuXG4vKiogQ2hlY2sgaWYgZmllbGQgaXMgcmVwZWF0ZWQgKGxhYmVsID09IDMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwZWF0ZWQoZmllbGQ6IEZpZWxkSW5mbyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmllbGQubGFiZWwgPT09IDNcbn1cblxuLyoqIENoZWNrIGlmIGZpZWxkIGlzIGEgbWVzc2FnZSB0eXBlICh0eXBlID09IDExKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01lc3NhZ2UoZmllbGQ6IEZpZWxkSW5mbyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmllbGQudHlwZSA9PT0gMTFcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgUnVzdCBzdHJ1Y3QgbWVtYmVyIGRlY2xhcmF0aW9uIGZvciBhIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuU3RydWN0TWVtYmVyKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGxldCBydXN0VHlwZSA9IHJlc29sdmVSdXN0VHlwZShmaWVsZC50eXBlLCBmaWVsZC50eXBlTmFtZSlcblxuICBpZiAoZmllbGQubWFwRW50cnkpIHtcbiAgICBjb25zdCBrZXlUeXBlID0gcmVzb2x2ZVJ1c3RUeXBlKGZpZWxkLm1hcEVudHJ5LmtleVR5cGUsIHVuZGVmaW5lZClcbiAgICBjb25zdCB2YWxUeXBlID0gcmVzb2x2ZVJ1c3RUeXBlKFxuICAgICAgZmllbGQubWFwRW50cnkudmFsdWVUeXBlLFxuICAgICAgZmllbGQubWFwRW50cnkudmFsdWVUeXBlTmFtZVxuICAgIClcbiAgICAvLyBNYXBzIGJlY29tZSBwYXJhbGxlbCBWZWNzOiBrZXlzICsgdmFsdWVzXG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgcHViICR7cnVzdE5hbWV9X2tleXM6IFZlYzwke2tleVR5cGV9PixgLFxuICAgICAgYCAgICBwdWIgJHtydXN0TmFtZX1fdmFsdWVzOiBWZWM8JHt2YWxUeXBlfT4sYFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG5cbiAgaWYgKGlzUmVwZWF0ZWQoZmllbGQpKSB7XG4gICAgcnVzdFR5cGUgPSBgVmVjPCR7cnVzdFR5cGV9PmBcbiAgfVxuXG4gIHJldHVybiBgICAgIHB1YiAke3J1c3ROYW1lfTogJHtydXN0VHlwZX0sYFxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGVuY29kZSBsb2dpYyBmb3IgYSBzaW5nbGUgZmllbGQuXG4gKiBSZXR1cm5zIFJ1c3Qgc3RhdGVtZW50cyB0aGF0IGFwcGVuZCBlbmNvZGVkIGJ5dGVzIHRvIGEgYFZlYzx1OD4gYnVmYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkZpZWxkRW5jb2RlKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IHR5cGVJbmZvID0gUFJPVE9fVFlQRV9NQVBbZmllbGQudHlwZV1cblxuICBpZiAoIXR5cGVJbmZvKSB7XG4gICAgbG9nLndhcm4oYFNraXBwaW5nIHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgJHtmaWVsZC50eXBlfSBmb3IgJHtmaWVsZC5uYW1lfWApXG4gICAgcmV0dXJuIGAgICAgICAgIC8vIFRPRE86IHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgJHtmaWVsZC50eXBlfSBmb3IgJHtmaWVsZC5uYW1lfWBcbiAgfVxuXG4gIGNvbnN0IHRhZyA9IGZpZWxkVGFnKFxuICAgIGZpZWxkLm51bWJlcixcbiAgICBmaWVsZC5tYXBFbnRyeSA/IFdpcmVUeXBlLkxlbmd0aERlbGltaXRlZCA6IHR5cGVJbmZvLndpcmVUeXBlXG4gIClcbiAgY29uc3QgdGFnSGV4ID0gYDB4JHt0YWcudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKX1gXG5cbiAgaWYgKGZpZWxkLm1hcEVudHJ5KSB7XG4gICAgcmV0dXJuIGdlbk1hcEVuY29kZShmaWVsZCwgdGFnSGV4KVxuICB9XG5cbiAgaWYgKGlzUmVwZWF0ZWQoZmllbGQpKSB7XG4gICAgcmV0dXJuIGdlblJlcGVhdGVkRW5jb2RlKGZpZWxkLCBydXN0TmFtZSwgdHlwZUluZm8sIHRhZ0hleClcbiAgfVxuXG4gIGlmIChpc01lc3NhZ2UoZmllbGQpKSB7XG4gICAgcmV0dXJuIGdlbk1lc3NhZ2VFbmNvZGUoZmllbGQsIHJ1c3ROYW1lLCB0YWdIZXgpXG4gIH1cblxuICByZXR1cm4gZ2VuU2NhbGFyRW5jb2RlKGZpZWxkLCBydXN0TmFtZSwgdHlwZUluZm8sIHRhZ0hleClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBkZWNvZGUgYnJhbmNoIGZvciBhIHNpbmdsZSBmaWVsZCB3aXRoaW4gdGhlIHRhZy1kaXNwYXRjaCBtYXRjaC5cbiAqIFJldHVybnMgYSBgVEFHID0+IHsgLi4uIH1gIGFybS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkZpZWxkRGVjb2RlKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IHR5cGVJbmZvID0gUFJPVE9fVFlQRV9NQVBbZmllbGQudHlwZV1cblxuICBpZiAoIXR5cGVJbmZvKSB7XG4gICAgcmV0dXJuIGAgICAgICAgICAgICAvLyBUT0RPOiB1bnN1cHBvcnRlZCBmaWVsZCB0eXBlICR7ZmllbGQudHlwZX0gZm9yICR7ZmllbGQubmFtZX1gXG4gIH1cblxuICBjb25zdCB0YWcgPSBmaWVsZFRhZyhcbiAgICBmaWVsZC5udW1iZXIsXG4gICAgZmllbGQubWFwRW50cnkgPyBXaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQgOiB0eXBlSW5mby53aXJlVHlwZVxuICApXG5cbiAgaWYgKGZpZWxkLm1hcEVudHJ5KSB7XG4gICAgcmV0dXJuIGdlbk1hcERlY29kZShmaWVsZCwgcnVzdE5hbWUsIHRhZylcbiAgfVxuXG4gIGlmIChpc1JlcGVhdGVkKGZpZWxkKSkge1xuICAgIHJldHVybiBnZW5SZXBlYXRlZERlY29kZShmaWVsZCwgcnVzdE5hbWUsIHR5cGVJbmZvLCB0YWcpXG4gIH1cblxuICBpZiAoaXNNZXNzYWdlKGZpZWxkKSkge1xuICAgIHJldHVybiBnZW5NZXNzYWdlRGVjb2RlKGZpZWxkLCBydXN0TmFtZSwgdGFnKVxuICB9XG5cbiAgcmV0dXJuIGdlblNjYWxhckRlY29kZShmaWVsZCwgcnVzdE5hbWUsIHR5cGVJbmZvLCB0YWcpXG59XG5cbi8vIOKUgOKUgCBJbnRlcm5hbCBjb2RlZ2VuIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIGdlblNjYWxhckVuY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdHlwZUluZm86ICh0eXBlb2YgUFJPVE9fVFlQRV9NQVApW251bWJlcl0sXG4gIHRhZ0hleDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBjYXN0ID0gbmVlZHNWYXJpbnRDYXN0KGZpZWxkLnR5cGUpXG4gIC8vIEZvciBmbG9hdCB0eXBlcywgbmVlZCB0byBwYXNzIGJpdHNcbiAgaWYgKGZpZWxkLnR5cGUgPT09IDEpIHtcbiAgICAvLyBkb3VibGUg4oaSIGY2NC50b19iaXRzKCkg4oaSIHU2NFxuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgICBgICAgICAgICBlbmNvZGVfZml4ZWQ2NCgmbXV0IGJ1Ziwgc2VsZi4ke3J1c3ROYW1lfS50b19iaXRzKCkpO2BcbiAgICBdLmpvaW4oXCJcXG5cIilcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gMikge1xuICAgIC8vIGZsb2F0IOKGkiBmMzIudG9fYml0cygpIOKGkiB1MzJcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgICAgYCAgICAgICAgZW5jb2RlX2ZpeGVkMzIoJm11dCBidWYsIHNlbGYuJHtydXN0TmFtZX0udG9fYml0cygpKTtgXG4gICAgXS5qb2luKFwiXFxuXCIpXG4gIH1cbiAgaWYgKHR5cGVJbmZvLmVuY29kZVJlZikge1xuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgICBgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCAmc2VsZi4ke3J1c3ROYW1lfSk7YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgIGAgICAgICAgICR7dHlwZUluZm8uZW5jb2RlRnVuY30oJm11dCBidWYsIHNlbGYuJHtydXN0TmFtZX0ke2Nhc3R9KTtgXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NZXNzYWdlRW5jb2RlKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBydXN0TmFtZTogc3RyaW5nLFxuICB0YWdIZXg6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgYCAgICAgICAgbGV0ICR7cnVzdE5hbWV9X2VuY29kZWQgPSBzZWxmLiR7cnVzdE5hbWV9LmVuY29kZSgpO2AsXG4gICAgYCAgICAgICAgZW5jb2RlX3ZhcmludCgmbXV0IGJ1ZiwgJHtydXN0TmFtZX1fZW5jb2RlZC5sZW4oKSBhcyB1NjQpO2AsXG4gICAgYCAgICAgICAgYnVmLmV4dGVuZF9mcm9tX3NsaWNlKCYke3J1c3ROYW1lfV9lbmNvZGVkKTtgXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5SZXBlYXRlZEVuY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdHlwZUluZm86ICh0eXBlb2YgUFJPVE9fVFlQRV9NQVApW251bWJlcl0sXG4gIHRhZ0hleDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuICBsaW5lcy5wdXNoKGAgICAgICAgIGZvciBlbGVtIGluICZzZWxmLiR7cnVzdE5hbWV9IHtgKVxuICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2ApXG5cbiAgaWYgKGlzTWVzc2FnZShmaWVsZCkpIHtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgICAgICAgICAgIGxldCBlbGVtX2VuY29kZWQgPSBlbGVtLmVuY29kZSgpO2AsXG4gICAgICBgICAgICAgICAgICAgZW5jb2RlX3ZhcmludCgmbXV0IGJ1ZiwgZWxlbV9lbmNvZGVkLmxlbigpIGFzIHU2NCk7YCxcbiAgICAgIGAgICAgICAgICAgICBidWYuZXh0ZW5kX2Zyb21fc2xpY2UoJmVsZW1fZW5jb2RlZCk7YFxuICAgIClcbiAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAxKSB7XG4gICAgLy8gcmVwZWF0ZWQgZG91YmxlXG4gICAgbGluZXMucHVzaChgICAgICAgICAgICAgZW5jb2RlX2ZpeGVkNjQoJm11dCBidWYsIGVsZW0udG9fYml0cygpKTtgKVxuICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IDIpIHtcbiAgICAvLyByZXBlYXRlZCBmbG9hdFxuICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgIGVuY29kZV9maXhlZDMyKCZtdXQgYnVmLCBlbGVtLnRvX2JpdHMoKSk7YClcbiAgfSBlbHNlIGlmICh0eXBlSW5mby5lbmNvZGVSZWYpIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCBlbGVtKTtgKVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNhc3QgPSBuZWVkc1ZhcmludENhc3QoZmllbGQudHlwZSlcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCAqZWxlbSR7Y2FzdH0pO2ApXG4gIH1cblxuICBsaW5lcy5wdXNoKGAgICAgICAgIH1gKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NYXBFbmNvZGUoZmllbGQ6IEZpZWxkSW5mbywgdGFnSGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IG1lID0gZmllbGQubWFwRW50cnkhXG4gIGNvbnN0IGtleUluZm8gPSBQUk9UT19UWVBFX01BUFttZS5rZXlUeXBlXVxuICBjb25zdCB2YWxJbmZvID0gUFJPVE9fVFlQRV9NQVBbbWUudmFsdWVUeXBlXVxuXG4gIGNvbnN0IGtleVRhZyA9IGAweCR7ZmllbGRUYWcoMSwga2V5SW5mby53aXJlVHlwZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKX1gXG4gIGNvbnN0IGtleUNhc3QgPSBuZWVkc1ZhcmludENhc3QobWUua2V5VHlwZSlcblxuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgICAgICAgICBmb3IgaSBpbiAwLi5zZWxmLiR7cnVzdE5hbWV9X2tleXMubGVuKCkge2AsXG4gICAgYCAgICAgICAgICAgIGxldCBtdXQgZW50cnkgPSBWZWM6Om5ldygpO2AsXG4gICAgYCAgICAgICAgICAgIGVuY29kZV9rZXkoJm11dCBlbnRyeSwgJHtrZXlUYWd9KTtgXG4gIF1cblxuICBpZiAoa2V5SW5mby5lbmNvZGVSZWYpIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke2tleUluZm8uZW5jb2RlRnVuY30oJm11dCBlbnRyeSwgJnNlbGYuJHtydXN0TmFtZX1fa2V5c1tpXSk7YClcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke2tleUluZm8uZW5jb2RlRnVuY30oJm11dCBlbnRyeSwgc2VsZi4ke3J1c3ROYW1lfV9rZXlzW2ldJHtrZXlDYXN0fSk7YClcbiAgfVxuXG4gIGlmIChtZS52YWx1ZVR5cGUgPT09IDExKSB7XG4gICAgY29uc3QgdmFsVGFnID0gYDB4JHtmaWVsZFRhZygyLCBXaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIil9YFxuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAgICAgICAgICAgZW5jb2RlX2tleSgmbXV0IGVudHJ5LCAke3ZhbFRhZ30pO2AsXG4gICAgICBgICAgICAgICAgICAgbGV0IHZhbF9lbmNvZGVkID0gc2VsZi4ke3J1c3ROYW1lfV92YWx1ZXNbaV0uZW5jb2RlKCk7YCxcbiAgICAgIGAgICAgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgZW50cnksIHZhbF9lbmNvZGVkLmxlbigpIGFzIHU2NCk7YCxcbiAgICAgIGAgICAgICAgICAgICBlbnRyeS5leHRlbmRfZnJvbV9zbGljZSgmdmFsX2VuY29kZWQpO2BcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmFsVGFnID0gYDB4JHtmaWVsZFRhZygyLCB2YWxJbmZvLndpcmVUeXBlKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpfWBcbiAgICBjb25zdCB2YWxDYXN0ID0gbmVlZHNWYXJpbnRDYXN0KG1lLnZhbHVlVHlwZSlcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgZW50cnksICR7dmFsVGFnfSk7YClcbiAgICBpZiAodmFsSW5mby5lbmNvZGVSZWYpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dmFsSW5mby5lbmNvZGVGdW5jfSgmbXV0IGVudHJ5LCAmc2VsZi4ke3J1c3ROYW1lfV92YWx1ZXNbaV0pO2ApXG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dmFsSW5mby5lbmNvZGVGdW5jfSgmbXV0IGVudHJ5LCBzZWxmLiR7cnVzdE5hbWV9X3ZhbHVlc1tpXSR7dmFsQ2FzdH0pO2ApXG4gICAgfVxuICB9XG5cbiAgbGluZXMucHVzaChcbiAgICBgICAgICAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgIGAgICAgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgYnVmLCBlbnRyeS5sZW4oKSBhcyB1NjQpO2AsXG4gICAgYCAgICAgICAgICAgIGJ1Zi5leHRlbmRfZnJvbV9zbGljZSgmZW50cnkpO2AsXG4gICAgYCAgICAgICAgfWBcbiAgKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5TY2FsYXJEZWNvZGUoXG4gIGZpZWxkOiBGaWVsZEluZm8sXG4gIHJ1c3ROYW1lOiBzdHJpbmcsXG4gIHR5cGVJbmZvOiAodHlwZW9mIFBST1RPX1RZUEVfTUFQKVtudW1iZXJdLFxuICB0YWc6IG51bWJlclxuKTogc3RyaW5nIHtcbiAgY29uc3QgY2FzdCA9IHZhcmludERlY29kZUNhc3QoZmllbGQudHlwZSlcblxuICAvLyBGbG9hdCB0eXBlcyBuZWVkIGZyb21fYml0c1xuICBpZiAoZmllbGQudHlwZSA9PT0gMSkge1xuICAgIC8vIGRvdWJsZSDihpIgZjY0Ojpmcm9tX2JpdHNcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbGV0ICh2LCBuZXdfcG9zKSA9IGRlY29kZV9maXhlZDY0KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgIG1zZy4ke3J1c3ROYW1lfSA9IGY2NDo6ZnJvbV9iaXRzKHYpO2AsXG4gICAgICBgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAyKSB7XG4gICAgLy8gZmxvYXQg4oaSIGYzMjo6ZnJvbV9iaXRzXG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSBkZWNvZGVfZml4ZWQzMihkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSBmMzI6OmZyb21fYml0cyh2KTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgICBgICAgICAgICAgICAgfWBcbiAgICBdLmpvaW4oXCJcXG5cIilcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSAke3R5cGVJbmZvLmRlY29kZUZ1bmN9KGRhdGEsIHBvcyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSB2JHtjYXN0fTtgLFxuICAgIGAgICAgICAgICAgICAgICAgcG9zID0gbmV3X3BvcztgLFxuICAgIGAgICAgICAgICAgICB9YFxuICBdLmpvaW4oXCJcXG5cIilcbn1cblxuZnVuY3Rpb24gZ2VuTWVzc2FnZURlY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdGFnOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGNvbnN0IHN0cnVjdFR5cGUgPSByZXNvbHZlUnVzdFR5cGUoZmllbGQudHlwZSwgZmllbGQudHlwZU5hbWUpXG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCAobGVuLCBuZXdfcG9zKSA9IGRlY29kZV92YXJpbnQoZGF0YSwgcG9zKT87YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBuZXdfcG9zICsgbGVuIGFzIHVzaXplO2AsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSAke3N0cnVjdFR5cGV9OjpkZWNvZGUoJmRhdGFbbmV3X3Bvcy4uZW5kXSk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBlbmQ7YCxcbiAgICBgICAgICAgICAgICAgfWBcbiAgXS5qb2luKFwiXFxuXCIpXG59XG5cbmZ1bmN0aW9uIGdlblJlcGVhdGVkRGVjb2RlKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBydXN0TmFtZTogc3RyaW5nLFxuICB0eXBlSW5mbzogKHR5cGVvZiBQUk9UT19UWVBFX01BUClbbnVtYmVyXSxcbiAgdGFnOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGlmIChpc01lc3NhZ2UoZmllbGQpKSB7XG4gICAgY29uc3Qgc3RydWN0VHlwZSA9IHJlc29sdmVSdXN0VHlwZShmaWVsZC50eXBlLCBmaWVsZC50eXBlTmFtZSlcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbGV0IChsZW4sIG5ld19wb3MpID0gZGVjb2RlX3ZhcmludChkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBsZXQgZW5kID0gbmV3X3BvcyArIGxlbiBhcyB1c2l6ZTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0ucHVzaCgke3N0cnVjdFR5cGV9OjpkZWNvZGUoJmRhdGFbbmV3X3Bvcy4uZW5kXSk/KTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBwb3MgPSBlbmQ7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG5cbiAgY29uc3QgY2FzdCA9IHZhcmludERlY29kZUNhc3QoZmllbGQudHlwZSlcblxuICBpZiAoZmllbGQudHlwZSA9PT0gMSkge1xuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICAgICAgJHt0YWd9ID0+IHtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gZGVjb2RlX2ZpeGVkNjQoZGF0YSwgcG9zKT87YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbXNnLiR7cnVzdE5hbWV9LnB1c2goZjY0Ojpmcm9tX2JpdHModikpO2AsXG4gICAgICBgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAyKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSBkZWNvZGVfZml4ZWQzMihkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0ucHVzaChmMzI6OmZyb21fYml0cyh2KSk7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgcG9zID0gbmV3X3BvcztgLFxuICAgICAgYCAgICAgICAgICAgIH1gXG4gICAgXS5qb2luKFwiXFxuXCIpXG4gIH1cblxuICByZXR1cm4gW1xuICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gJHt0eXBlSW5mby5kZWNvZGVGdW5jfShkYXRhLCBwb3MpPztgLFxuICAgIGAgICAgICAgICAgICAgICAgbXNnLiR7cnVzdE5hbWV9LnB1c2godiR7Y2FzdH0pO2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgIH1gXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NYXBEZWNvZGUoZmllbGQ6IEZpZWxkSW5mbywgcnVzdE5hbWU6IHN0cmluZywgdGFnOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBtZSA9IGZpZWxkLm1hcEVudHJ5IVxuICBjb25zdCBrZXlJbmZvID0gUFJPVE9fVFlQRV9NQVBbbWUua2V5VHlwZV1cbiAgY29uc3QgdmFsSW5mbyA9IFBST1RPX1RZUEVfTUFQW21lLnZhbHVlVHlwZV1cbiAgY29uc3Qga2V5U29sID0gcmVzb2x2ZVJ1c3RUeXBlKG1lLmtleVR5cGUsIHVuZGVmaW5lZClcbiAgY29uc3QgdmFsU29sID0gcmVzb2x2ZVJ1c3RUeXBlKG1lLnZhbHVlVHlwZSwgbWUudmFsdWVUeXBlTmFtZSlcblxuICBjb25zdCBrZXlUYWcgPSBmaWVsZFRhZygxLCBrZXlJbmZvLndpcmVUeXBlKVxuICBjb25zdCBrZXlDYXN0ID0gdmFyaW50RGVjb2RlQ2FzdChtZS5rZXlUeXBlKVxuXG4gIGNvbnN0IGxpbmVzID0gW1xuICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgKGVudHJ5X2xlbiwgbmV3X3BvcykgPSBkZWNvZGVfdmFyaW50KGRhdGEsIHBvcyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgZW50cnlfZW5kID0gcG9zICsgZW50cnlfbGVuIGFzIHVzaXplO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgbXV0IGtleTogJHtrZXlTb2x9ID0gRGVmYXVsdDo6ZGVmYXVsdCgpO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgbXV0IHZhbDogJHt2YWxTb2x9ID0gRGVmYXVsdDo6ZGVmYXVsdCgpO2AsXG4gICAgYCAgICAgICAgICAgICAgICB3aGlsZSBwb3MgPCBlbnRyeV9lbmQge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgbGV0IChlbnRyeV90YWcsIG5ld19wb3MpID0gZGVjb2RlX2tleShkYXRhLCBwb3MpPztgLFxuICAgIGAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICBtYXRjaCBlbnRyeV90YWcge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICR7a2V5VGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSAke2tleUluZm8uZGVjb2RlRnVuY30oZGF0YSwgcG9zKT87YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHYke2tleUNhc3R9O2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gXG4gIF1cblxuICBpZiAobWUudmFsdWVUeXBlID09PSAxMSkge1xuICAgIGNvbnN0IHZhbFRhZyA9IGZpZWxkVGFnKDIsIFdpcmVUeXBlLkxlbmd0aERlbGltaXRlZClcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsVGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0ICh2X2xlbiwgbmV3X3BvcykgPSBkZWNvZGVfdmFyaW50KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2X2VuZCA9IG5ld19wb3MgKyB2X2xlbiBhcyB1c2l6ZTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAke3ZhbFNvbH06OmRlY29kZSgmZGF0YVtuZXdfcG9zLi52X2VuZF0pPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSB2X2VuZDtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZhbFRhZyA9IGZpZWxkVGFnKDIsIHZhbEluZm8ud2lyZVR5cGUpXG4gICAgY29uc3QgdmFsQ2FzdCA9IHZhcmludERlY29kZUNhc3QobWUudmFsdWVUeXBlKVxuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgJHt2YWxUYWd9ID0+IHtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gJHt2YWxJbmZvLmRlY29kZUZ1bmN9KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHYke3ZhbENhc3R9O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgICAgICAgICB9YFxuICAgIClcbiAgfVxuXG4gIGxpbmVzLnB1c2goXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIF8gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBza2lwX2ZpZWxkKGRhdGEsIHBvcywgZW50cnlfdGFnICYgMHgwNyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgIGAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgIGAgICAgICAgICAgICAgICAgfWAsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX1fa2V5cy5wdXNoKGtleSk7YCxcbiAgICBgICAgICAgICAgICAgICAgIG1zZy4ke3J1c3ROYW1lfV92YWx1ZXMucHVzaCh2YWwpO2AsXG4gICAgYCAgICAgICAgICAgIH1gXG4gIClcbiAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIilcbn1cbiJdfQ==
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdG9yL2ZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBdUJBLGdDQUVDO0FBR0QsOEJBRUM7QUFLRCwwQ0FzQkM7QUFNRCx3Q0E0QkM7QUFNRCx3Q0EwQkM7QUEzSEQsK0NBQThDO0FBQzlDLCtDQU9zQjtBQUN0QixpREFBdUM7QUFhdkMsK0NBQStDO0FBQy9DLFNBQWdCLFVBQVUsQ0FBQyxLQUFnQjtJQUN6QyxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFBO0FBQzFCLENBQUM7QUFFRCxxREFBcUQ7QUFDckQsU0FBZ0IsU0FBUyxDQUFDLEtBQWdCO0lBQ3hDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUE7QUFDMUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLEtBQWdCO0lBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUEsc0JBQVcsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDeEMsSUFBSSxRQUFRLEdBQUcsSUFBQSw2QkFBZSxFQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRTFELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25CLE1BQU0sT0FBTyxHQUFHLElBQUEsNkJBQWUsRUFBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUNsRSxNQUFNLE9BQU8sR0FBRyxJQUFBLDZCQUFlLEVBQzdCLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUN4QixLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FDN0IsQ0FBQTtRQUNELDJDQUEyQztRQUMzQyxPQUFPO1lBQ0wsV0FBVyxRQUFRLGNBQWMsT0FBTyxJQUFJO1lBQzVDLFdBQVcsUUFBUSxnQkFBZ0IsT0FBTyxJQUFJO1NBQy9DLENBQUMs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QUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvU25ha2VDYXNlIH0gZnJvbSBcIi4uL3V0aWwvbmFtZXMuanNcIlxuaW1wb3J0IHtcbiAgUFJPVE9fVFlQRV9NQVAsXG4gIFdpcmVUeXBlLFxuICBmaWVsZFRhZyxcbiAgcmVzb2x2ZVJ1c3RUeXBlLFxuICBuZWVkc1ZhcmludENhc3QsXG4gIHZhcmludERlY29kZUNhc3Rcbn0gZnJvbSBcIi4vdHlwZS1tYXAuanNcIlxuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIi4uL3V0aWwvbG9nZ2VyLmpzXCJcblxuLyoqIFBhcnNlZCBmaWVsZCBkZXNjcmlwdG9yIHN1YnNldCBuZWVkZWQgZm9yIGNvZGVnZW4uICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkSW5mbyB7XG4gIG5hbWU6IHN0cmluZ1xuICBudW1iZXI6IG51bWJlclxuICB0eXBlOiBudW1iZXJcbiAgdHlwZU5hbWU/OiBzdHJpbmdcbiAgbGFiZWw6IG51bWJlciAvLyAxPW9wdGlvbmFsLCAyPXJlcXVpcmVkLCAzPXJlcGVhdGVkXG4gIG9uZW9mSW5kZXg/OiBudW1iZXJcbiAgbWFwRW50cnk/OiB7IGtleVR5cGU6IG51bWJlcjsgdmFsdWVUeXBlOiBudW1iZXI7IHZhbHVlVHlwZU5hbWU/OiBzdHJpbmcgfVxufVxuXG4vKiogQ2hlY2sgaWYgZmllbGQgaXMgcmVwZWF0ZWQgKGxhYmVsID09IDMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwZWF0ZWQoZmllbGQ6IEZpZWxkSW5mbyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmllbGQubGFiZWwgPT09IDNcbn1cblxuLyoqIENoZWNrIGlmIGZpZWxkIGlzIGEgbWVzc2FnZSB0eXBlICh0eXBlID09IDExKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01lc3NhZ2UoZmllbGQ6IEZpZWxkSW5mbyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmllbGQudHlwZSA9PT0gMTFcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgUnVzdCBzdHJ1Y3QgbWVtYmVyIGRlY2xhcmF0aW9uIGZvciBhIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuU3RydWN0TWVtYmVyKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGxldCBydXN0VHlwZSA9IHJlc29sdmVSdXN0VHlwZShmaWVsZC50eXBlLCBmaWVsZC50eXBlTmFtZSlcblxuICBpZiAoZmllbGQubWFwRW50cnkpIHtcbiAgICBjb25zdCBrZXlUeXBlID0gcmVzb2x2ZVJ1c3RUeXBlKGZpZWxkLm1hcEVudHJ5LmtleVR5cGUsIHVuZGVmaW5lZClcbiAgICBjb25zdCB2YWxUeXBlID0gcmVzb2x2ZVJ1c3RUeXBlKFxuICAgICAgZmllbGQubWFwRW50cnkudmFsdWVUeXBlLFxuICAgICAgZmllbGQubWFwRW50cnkudmFsdWVUeXBlTmFtZVxuICAgIClcbiAgICAvLyBNYXBzIGJlY29tZSBwYXJhbGxlbCBWZWNzOiBrZXlzICsgdmFsdWVzXG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgcHViICR7cnVzdE5hbWV9X2tleXM6IFZlYzwke2tleVR5cGV9PixgLFxuICAgICAgYCAgICBwdWIgJHtydXN0TmFtZX1fdmFsdWVzOiBWZWM8JHt2YWxUeXBlfT4sYFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG5cbiAgaWYgKGlzUmVwZWF0ZWQoZmllbGQpKSB7XG4gICAgcnVzdFR5cGUgPSBgVmVjPCR7cnVzdFR5cGV9PmBcbiAgfVxuXG4gIHJldHVybiBgICAgIHB1YiAke3J1c3ROYW1lfTogJHtydXN0VHlwZX0sYFxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGVuY29kZSBsb2dpYyBmb3IgYSBzaW5nbGUgZmllbGQuXG4gKiBSZXR1cm5zIFJ1c3Qgc3RhdGVtZW50cyB0aGF0IGFwcGVuZCBlbmNvZGVkIGJ5dGVzIHRvIGEgYFZlYzx1OD4gYnVmYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkZpZWxkRW5jb2RlKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IHR5cGVJbmZvID0gUFJPVE9fVFlQRV9NQVBbZmllbGQudHlwZV1cblxuICBpZiAoIXR5cGVJbmZvKSB7XG4gICAgbG9nLndhcm4oYFNraXBwaW5nIHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgJHtmaWVsZC50eXBlfSBmb3IgJHtmaWVsZC5uYW1lfWApXG4gICAgcmV0dXJuIGAgICAgICAgIC8vIFRPRE86IHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgJHtmaWVsZC50eXBlfSBmb3IgJHtmaWVsZC5uYW1lfWBcbiAgfVxuXG4gIGNvbnN0IHRhZyA9IGZpZWxkVGFnKFxuICAgIGZpZWxkLm51bWJlcixcbiAgICBmaWVsZC5tYXBFbnRyeSA/IFdpcmVUeXBlLkxlbmd0aERlbGltaXRlZCA6IHR5cGVJbmZvLndpcmVUeXBlXG4gIClcbiAgY29uc3QgdGFnSGV4ID0gYDB4JHt0YWcudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKX1gXG5cbiAgaWYgKGZpZWxkLm1hcEVudHJ5KSB7XG4gICAgcmV0dXJuIGdlbk1hcEVuY29kZShmaWVsZCwgdGFnSGV4KVxuICB9XG5cbiAgaWYgKGlzUmVwZWF0ZWQoZmllbGQpKSB7XG4gICAgcmV0dXJuIGdlblJlcGVhdGVkRW5jb2RlKGZpZWxkLCBydXN0TmFtZSwgdHlwZUluZm8sIHRhZ0hleClcbiAgfVxuXG4gIGlmIChpc01lc3NhZ2UoZmllbGQpKSB7XG4gICAgcmV0dXJuIGdlbk1lc3NhZ2VFbmNvZGUoZmllbGQsIHJ1c3ROYW1lLCB0YWdIZXgpXG4gIH1cblxuICByZXR1cm4gZ2VuU2NhbGFyRW5jb2RlKGZpZWxkLCBydXN0TmFtZSwgdHlwZUluZm8sIHRhZ0hleClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBkZWNvZGUgYnJhbmNoIGZvciBhIHNpbmdsZSBmaWVsZCB3aXRoaW4gdGhlIHRhZy1kaXNwYXRjaCBtYXRjaC5cbiAqIFJldHVybnMgYSBgVEFHID0+IHsgLi4uIH1gIGFybS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkZpZWxkRGVjb2RlKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IHR5cGVJbmZvID0gUFJPVE9fVFlQRV9NQVBbZmllbGQudHlwZV1cblxuICBpZiAoIXR5cGVJbmZvKSB7XG4gICAgcmV0dXJuIGAgICAgICAgICAgICAvLyBUT0RPOiB1bnN1cHBvcnRlZCBmaWVsZCB0eXBlICR7ZmllbGQudHlwZX0gZm9yICR7ZmllbGQubmFtZX1gXG4gIH1cblxuICBjb25zdCB0YWcgPSBmaWVsZFRhZyhcbiAgICBmaWVsZC5udW1iZXIsXG4gICAgZmllbGQubWFwRW50cnkgPyBXaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQgOiB0eXBlSW5mby53aXJlVHlwZVxuICApXG5cbiAgaWYgKGZpZWxkLm1hcEVudHJ5KSB7XG4gICAgcmV0dXJuIGdlbk1hcERlY29kZShmaWVsZCwgcnVzdE5hbWUsIHRhZylcbiAgfVxuXG4gIGlmIChpc1JlcGVhdGVkKGZpZWxkKSkge1xuICAgIHJldHVybiBnZW5SZXBlYXRlZERlY29kZShmaWVsZCwgcnVzdE5hbWUsIHR5cGVJbmZvLCB0YWcpXG4gIH1cblxuICBpZiAoaXNNZXNzYWdlKGZpZWxkKSkge1xuICAgIHJldHVybiBnZW5NZXNzYWdlRGVjb2RlKGZpZWxkLCBydXN0TmFtZSwgdGFnKVxuICB9XG5cbiAgcmV0dXJuIGdlblNjYWxhckRlY29kZShmaWVsZCwgcnVzdE5hbWUsIHR5cGVJbmZvLCB0YWcpXG59XG5cbi8vIOKUgOKUgCBJbnRlcm5hbCBjb2RlZ2VuIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIGdlblNjYWxhckVuY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdHlwZUluZm86ICh0eXBlb2YgUFJPVE9fVFlQRV9NQVApW251bWJlcl0sXG4gIHRhZ0hleDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBjYXN0ID0gbmVlZHNWYXJpbnRDYXN0KGZpZWxkLnR5cGUpXG4gIC8vIEZvciBmbG9hdCB0eXBlcywgbmVlZCB0byBwYXNzIGJpdHNcbiAgaWYgKGZpZWxkLnR5cGUgPT09IDEpIHtcbiAgICAvLyBkb3VibGUg4oaSIGY2NC50b19iaXRzKCkg4oaSIHU2NFxuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgICBgICAgICAgICBlbmNvZGVfZml4ZWQ2NCgmbXV0IGJ1Ziwgc2VsZi4ke3J1c3ROYW1lfS50b19iaXRzKCkpO2BcbiAgICBdLmpvaW4oXCJcXG5cIilcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gMikge1xuICAgIC8vIGZsb2F0IOKGkiBmMzIudG9fYml0cygpIOKGkiB1MzJcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgICAgYCAgICAgICAgZW5jb2RlX2ZpeGVkMzIoJm11dCBidWYsIHNlbGYuJHtydXN0TmFtZX0udG9fYml0cygpKTtgXG4gICAgXS5qb2luKFwiXFxuXCIpXG4gIH1cbiAgaWYgKHR5cGVJbmZvLmVuY29kZVJlZikge1xuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgICBgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCAmc2VsZi4ke3J1c3ROYW1lfSk7YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgIGAgICAgICAgICR7dHlwZUluZm8uZW5jb2RlRnVuY30oJm11dCBidWYsIHNlbGYuJHtydXN0TmFtZX0ke2Nhc3R9KTtgXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NZXNzYWdlRW5jb2RlKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBydXN0TmFtZTogc3RyaW5nLFxuICB0YWdIZXg6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgYCAgICAgICAgbGV0ICR7cnVzdE5hbWV9X2VuY29kZWQgPSBzZWxmLiR7cnVzdE5hbWV9LmVuY29kZSgpO2AsXG4gICAgYCAgICAgICAgZW5jb2RlX3ZhcmludCgmbXV0IGJ1ZiwgJHtydXN0TmFtZX1fZW5jb2RlZC5sZW4oKSBhcyB1NjQpO2AsXG4gICAgYCAgICAgICAgYnVmLmV4dGVuZF9mcm9tX3NsaWNlKCYke3J1c3ROYW1lfV9lbmNvZGVkKTtgXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5SZXBlYXRlZEVuY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdHlwZUluZm86ICh0eXBlb2YgUFJPVE9fVFlQRV9NQVApW251bWJlcl0sXG4gIHRhZ0hleDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuICBsaW5lcy5wdXNoKGAgICAgICAgIGZvciBlbGVtIGluICZzZWxmLiR7cnVzdE5hbWV9IHtgKVxuICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2ApXG5cbiAgaWYgKGlzTWVzc2FnZShmaWVsZCkpIHtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgICAgICAgICAgIGxldCBlbGVtX2VuY29kZWQgPSBlbGVtLmVuY29kZSgpO2AsXG4gICAgICBgICAgICAgICAgICAgZW5jb2RlX3ZhcmludCgmbXV0IGJ1ZiwgZWxlbV9lbmNvZGVkLmxlbigpIGFzIHU2NCk7YCxcbiAgICAgIGAgICAgICAgICAgICBidWYuZXh0ZW5kX2Zyb21fc2xpY2UoJmVsZW1fZW5jb2RlZCk7YFxuICAgIClcbiAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAxKSB7XG4gICAgLy8gcmVwZWF0ZWQgZG91YmxlXG4gICAgbGluZXMucHVzaChgICAgICAgICAgICAgZW5jb2RlX2ZpeGVkNjQoJm11dCBidWYsIGVsZW0udG9fYml0cygpKTtgKVxuICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IDIpIHtcbiAgICAvLyByZXBlYXRlZCBmbG9hdFxuICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgIGVuY29kZV9maXhlZDMyKCZtdXQgYnVmLCBlbGVtLnRvX2JpdHMoKSk7YClcbiAgfSBlbHNlIGlmICh0eXBlSW5mby5lbmNvZGVSZWYpIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCBlbGVtKTtgKVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNhc3QgPSBuZWVkc1ZhcmludENhc3QoZmllbGQudHlwZSlcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCAqZWxlbSR7Y2FzdH0pO2ApXG4gIH1cblxuICBsaW5lcy5wdXNoKGAgICAgICAgIH1gKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NYXBFbmNvZGUoZmllbGQ6IEZpZWxkSW5mbywgdGFnSGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IG1lID0gZmllbGQubWFwRW50cnkhXG4gIGNvbnN0IGtleUluZm8gPSBQUk9UT19UWVBFX01BUFttZS5rZXlUeXBlXVxuICBjb25zdCB2YWxJbmZvID0gUFJPVE9fVFlQRV9NQVBbbWUudmFsdWVUeXBlXVxuXG4gIGNvbnN0IGtleVRhZyA9IGAweCR7ZmllbGRUYWcoMSwga2V5SW5mby53aXJlVHlwZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKX1gXG4gIGNvbnN0IGtleUNhc3QgPSBuZWVkc1ZhcmludENhc3QobWUua2V5VHlwZSlcblxuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgICAgICAgICBmb3IgaSBpbiAwLi5zZWxmLiR7cnVzdE5hbWV9X2tleXMubGVuKCkge2AsXG4gICAgYCAgICAgICAgICAgIGxldCBtdXQgZW50cnkgPSBWZWM6Om5ldygpO2AsXG4gICAgYCAgICAgICAgICAgIGVuY29kZV9rZXkoJm11dCBlbnRyeSwgJHtrZXlUYWd9KTtgXG4gIF1cblxuICBpZiAoa2V5SW5mby5lbmNvZGVSZWYpIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke2tleUluZm8uZW5jb2RlRnVuY30oJm11dCBlbnRyeSwgJnNlbGYuJHtydXN0TmFtZX1fa2V5c1tpXSk7YClcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke2tleUluZm8uZW5jb2RlRnVuY30oJm11dCBlbnRyeSwgc2VsZi4ke3J1c3ROYW1lfV9rZXlzW2ldJHtrZXlDYXN0fSk7YClcbiAgfVxuXG4gIGlmIChtZS52YWx1ZVR5cGUgPT09IDExKSB7XG4gICAgY29uc3QgdmFsVGFnID0gYDB4JHtmaWVsZFRhZygyLCBXaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIil9YFxuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAgICAgICAgICAgZW5jb2RlX2tleSgmbXV0IGVudHJ5LCAke3ZhbFRhZ30pO2AsXG4gICAgICBgICAgICAgICAgICAgbGV0IHZhbF9lbmNvZGVkID0gc2VsZi4ke3J1c3ROYW1lfV92YWx1ZXNbaV0uZW5jb2RlKCk7YCxcbiAgICAgIGAgICAgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgZW50cnksIHZhbF9lbmNvZGVkLmxlbigpIGFzIHU2NCk7YCxcbiAgICAgIGAgICAgICAgICAgICBlbnRyeS5leHRlbmRfZnJvbV9zbGljZSgmdmFsX2VuY29kZWQpO2BcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmFsVGFnID0gYDB4JHtmaWVsZFRhZygyLCB2YWxJbmZvLndpcmVUeXBlKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpfWBcbiAgICBjb25zdCB2YWxDYXN0ID0gbmVlZHNWYXJpbnRDYXN0KG1lLnZhbHVlVHlwZSlcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgZW50cnksICR7dmFsVGFnfSk7YClcbiAgICBpZiAodmFsSW5mby5lbmNvZGVSZWYpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dmFsSW5mby5lbmNvZGVGdW5jfSgmbXV0IGVudHJ5LCAmc2VsZi4ke3J1c3ROYW1lfV92YWx1ZXNbaV0pO2ApXG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dmFsSW5mby5lbmNvZGVGdW5jfSgmbXV0IGVudHJ5LCBzZWxmLiR7cnVzdE5hbWV9X3ZhbHVlc1tpXSR7dmFsQ2FzdH0pO2ApXG4gICAgfVxuICB9XG5cbiAgbGluZXMucHVzaChcbiAgICBgICAgICAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgIGAgICAgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgYnVmLCBlbnRyeS5sZW4oKSBhcyB1NjQpO2AsXG4gICAgYCAgICAgICAgICAgIGJ1Zi5leHRlbmRfZnJvbV9zbGljZSgmZW50cnkpO2AsXG4gICAgYCAgICAgICAgfWBcbiAgKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5TY2FsYXJEZWNvZGUoXG4gIGZpZWxkOiBGaWVsZEluZm8sXG4gIHJ1c3ROYW1lOiBzdHJpbmcsXG4gIHR5cGVJbmZvOiAodHlwZW9mIFBST1RPX1RZUEVfTUFQKVtudW1iZXJdLFxuICB0YWc6IG51bWJlclxuKTogc3RyaW5nIHtcbiAgY29uc3QgY2FzdCA9IHZhcmludERlY29kZUNhc3QoZmllbGQudHlwZSlcblxuICAvLyBGbG9hdCB0eXBlcyBuZWVkIGZyb21fYml0c1xuICBpZiAoZmllbGQudHlwZSA9PT0gMSkge1xuICAgIC8vIGRvdWJsZSDihpIgZjY0Ojpmcm9tX2JpdHNcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbGV0ICh2LCBuZXdfcG9zKSA9IGRlY29kZV9maXhlZDY0KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgIG1zZy4ke3J1c3ROYW1lfSA9IGY2NDo6ZnJvbV9iaXRzKHYpO2AsXG4gICAgICBgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAyKSB7XG4gICAgLy8gZmxvYXQg4oaSIGYzMjo6ZnJvbV9iaXRzXG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSBkZWNvZGVfZml4ZWQzMihkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSBmMzI6OmZyb21fYml0cyh2KTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgICBgICAgICAgICAgICAgfWBcbiAgICBdLmpvaW4oXCJcXG5cIilcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSAke3R5cGVJbmZvLmRlY29kZUZ1bmN9KGRhdGEsIHBvcyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSB2JHtjYXN0fTtgLFxuICAgIGAgICAgICAgICAgICAgICAgcG9zID0gbmV3X3BvcztgLFxuICAgIGAgICAgICAgICAgICB9YFxuICBdLmpvaW4oXCJcXG5cIilcbn1cblxuZnVuY3Rpb24gZ2VuTWVzc2FnZURlY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdGFnOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGNvbnN0IHN0cnVjdFR5cGUgPSByZXNvbHZlUnVzdFR5cGUoZmllbGQudHlwZSwgZmllbGQudHlwZU5hbWUpXG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCAobGVuLCBuZXdfcG9zKSA9IGRlY29kZV92YXJpbnQoZGF0YSwgcG9zKT87YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBuZXdfcG9zICsgbGVuIGFzIHVzaXplO2AsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSAke3N0cnVjdFR5cGV9OjpkZWNvZGUoJmRhdGFbbmV3X3Bvcy4uZW5kXSk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBlbmQ7YCxcbiAgICBgICAgICAgICAgICAgfWBcbiAgXS5qb2luKFwiXFxuXCIpXG59XG5cbmZ1bmN0aW9uIGdlblJlcGVhdGVkRGVjb2RlKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBydXN0TmFtZTogc3RyaW5nLFxuICB0eXBlSW5mbzogKHR5cGVvZiBQUk9UT19UWVBFX01BUClbbnVtYmVyXSxcbiAgdGFnOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGlmIChpc01lc3NhZ2UoZmllbGQpKSB7XG4gICAgY29uc3Qgc3RydWN0VHlwZSA9IHJlc29sdmVSdXN0VHlwZShmaWVsZC50eXBlLCBmaWVsZC50eXBlTmFtZSlcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbGV0IChsZW4sIG5ld19wb3MpID0gZGVjb2RlX3ZhcmludChkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBsZXQgZW5kID0gbmV3X3BvcyArIGxlbiBhcyB1c2l6ZTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0ucHVzaCgke3N0cnVjdFR5cGV9OjpkZWNvZGUoJmRhdGFbbmV3X3Bvcy4uZW5kXSk/KTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBwb3MgPSBlbmQ7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG5cbiAgY29uc3QgY2FzdCA9IHZhcmludERlY29kZUNhc3QoZmllbGQudHlwZSlcblxuICBpZiAoZmllbGQudHlwZSA9PT0gMSkge1xuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICAgICAgJHt0YWd9ID0+IHtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gZGVjb2RlX2ZpeGVkNjQoZGF0YSwgcG9zKT87YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbXNnLiR7cnVzdE5hbWV9LnB1c2goZjY0Ojpmcm9tX2JpdHModikpO2AsXG4gICAgICBgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAyKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSBkZWNvZGVfZml4ZWQzMihkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0ucHVzaChmMzI6OmZyb21fYml0cyh2KSk7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgcG9zID0gbmV3X3BvcztgLFxuICAgICAgYCAgICAgICAgICAgIH1gXG4gICAgXS5qb2luKFwiXFxuXCIpXG4gIH1cblxuICByZXR1cm4gW1xuICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gJHt0eXBlSW5mby5kZWNvZGVGdW5jfShkYXRhLCBwb3MpPztgLFxuICAgIGAgICAgICAgICAgICAgICAgbXNnLiR7cnVzdE5hbWV9LnB1c2godiR7Y2FzdH0pO2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgIH1gXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NYXBEZWNvZGUoZmllbGQ6IEZpZWxkSW5mbywgcnVzdE5hbWU6IHN0cmluZywgdGFnOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBtZSA9IGZpZWxkLm1hcEVudHJ5IVxuICBjb25zdCBrZXlJbmZvID0gUFJPVE9fVFlQRV9NQVBbbWUua2V5VHlwZV1cbiAgY29uc3QgdmFsSW5mbyA9IFBST1RPX1RZUEVfTUFQW21lLnZhbHVlVHlwZV1cbiAgY29uc3Qga2V5U29sID0gcmVzb2x2ZVJ1c3RUeXBlKG1lLmtleVR5cGUsIHVuZGVmaW5lZClcbiAgY29uc3QgdmFsU29sID0gcmVzb2x2ZVJ1c3RUeXBlKG1lLnZhbHVlVHlwZSwgbWUudmFsdWVUeXBlTmFtZSlcblxuICBjb25zdCBrZXlUYWcgPSBmaWVsZFRhZygxLCBrZXlJbmZvLndpcmVUeXBlKVxuICBjb25zdCBrZXlDYXN0ID0gdmFyaW50RGVjb2RlQ2FzdChtZS5rZXlUeXBlKVxuXG4gIGNvbnN0IGxpbmVzID0gW1xuICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgKGVudHJ5X2xlbiwgbmV3X3BvcykgPSBkZWNvZGVfdmFyaW50KGRhdGEsIHBvcyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgZW50cnlfZW5kID0gcG9zICsgZW50cnlfbGVuIGFzIHVzaXplO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgbXV0IGtleTogJHtrZXlTb2x9ID0gRGVmYXVsdDo6ZGVmYXVsdCgpO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgbXV0IHZhbDogJHt2YWxTb2x9ID0gRGVmYXVsdDo6ZGVmYXVsdCgpO2AsXG4gICAgYCAgICAgICAgICAgICAgICB3aGlsZSBwb3MgPCBlbnRyeV9lbmQge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgbGV0IChlbnRyeV90YWcsIG5ld19wb3MpID0gZGVjb2RlX2tleShkYXRhLCBwb3MpPztgLFxuICAgIGAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICBtYXRjaCBlbnRyeV90YWcge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICR7a2V5VGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSAke2tleUluZm8uZGVjb2RlRnVuY30oZGF0YSwgcG9zKT87YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHYke2tleUNhc3R9O2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gXG4gIF1cblxuICBpZiAobWUudmFsdWVUeXBlID09PSAxMSkge1xuICAgIGNvbnN0IHZhbFRhZyA9IGZpZWxkVGFnKDIsIFdpcmVUeXBlLkxlbmd0aERlbGltaXRlZClcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsVGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0ICh2X2xlbiwgbmV3X3BvcykgPSBkZWNvZGVfdmFyaW50KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2X2VuZCA9IG5ld19wb3MgKyB2X2xlbiBhcyB1c2l6ZTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAke3ZhbFNvbH06OmRlY29kZSgmZGF0YVtuZXdfcG9zLi52X2VuZF0pPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSB2X2VuZDtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZhbFRhZyA9IGZpZWxkVGFnKDIsIHZhbEluZm8ud2lyZVR5cGUpXG4gICAgY29uc3QgdmFsQ2FzdCA9IHZhcmludERlY29kZUNhc3QobWUudmFsdWVUeXBlKVxuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgJHt2YWxUYWd9ID0+IHtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gJHt2YWxJbmZvLmRlY29kZUZ1bmN9KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHYke3ZhbENhc3R9O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgICAgICAgICB9YFxuICAgIClcbiAgfVxuXG4gIGxpbmVzLnB1c2goXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIF8gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBza2lwX2ZpZWxkKGRhdGEsIHBvcywgZW50cnlfdGFnICYgMHgwNyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgIGAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgIGAgICAgICAgICAgICAgICAgfWAsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX1fa2V5cy5wdXNoKGtleSk7YCxcbiAgICBgICAgICAgICAgICAgICAgIG1zZy4ke3J1c3ROYW1lfV92YWx1ZXMucHVzaCh2YWwpO2AsXG4gICAgYCAgICAgICAgICAgIH1gXG4gIClcbiAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIilcbn1cbiJdfQ==
|
package/lib/generator/index.js
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fieldTag = exports.resolveRustType = exports.WireType = exports.PROTO_TYPE_MAP = exports.generateRuntime = exports.generateRsFile = void 0;
|
|
4
|
+
var message_js_1 = require("./message.js");
|
|
5
|
+
Object.defineProperty(exports, "generateRsFile", { enumerable: true, get: function () { return message_js_1.generateRsFile; } });
|
|
6
|
+
var runtime_js_1 = require("./runtime.js");
|
|
7
|
+
Object.defineProperty(exports, "generateRuntime", { enumerable: true, get: function () { return runtime_js_1.generateRuntime; } });
|
|
8
|
+
var type_map_js_1 = require("./type-map.js");
|
|
9
|
+
Object.defineProperty(exports, "PROTO_TYPE_MAP", { enumerable: true, get: function () { return type_map_js_1.PROTO_TYPE_MAP; } });
|
|
10
|
+
Object.defineProperty(exports, "WireType", { enumerable: true, get: function () { return type_map_js_1.WireType; } });
|
|
11
|
+
Object.defineProperty(exports, "resolveRustType", { enumerable: true, get: function () { return type_map_js_1.resolveRustType; } });
|
|
12
|
+
Object.defineProperty(exports, "fieldTag", { enumerable: true, get: function () { return type_map_js_1.fieldTag; } });
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUE2QztBQUFwQyw0R0FBQSxjQUFjLE9BQUE7QUFDdkIsMkNBQThDO0FBQXJDLDZHQUFBLGVBQWUsT0FBQTtBQUd4Qiw2Q0FBbUY7QUFBMUUsNkdBQUEsY0FBYyxPQUFBO0FBQUUsdUdBQUEsUUFBUSxPQUFBO0FBQUUsOEdBQUEsZUFBZSxPQUFBO0FBQUUsdUdBQUEsUUFBUSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZ2VuZXJhdGVSc0ZpbGUgfSBmcm9tIFwiLi9tZXNzYWdlLmpzXCJcbmV4cG9ydCB7IGdlbmVyYXRlUnVudGltZSB9IGZyb20gXCIuL3J1bnRpbWUuanNcIlxuZXhwb3J0IHR5cGUgeyBNZXNzYWdlRGVzY3JpcHRvciB9IGZyb20gXCIuL21lc3NhZ2UuanNcIlxuZXhwb3J0IHR5cGUgeyBGaWVsZEluZm8gfSBmcm9tIFwiLi9maWVsZC5qc1wiXG5leHBvcnQgeyBQUk9UT19UWVBFX01BUCwgV2lyZVR5cGUsIHJlc29sdmVSdXN0VHlwZSwgZmllbGRUYWcgfSBmcm9tIFwiLi90eXBlLW1hcC5qc1wiXG4iXX0=
|