Comparing version 0.5.0-alpha.8 to 0.5.0-alpha.9
@@ -0,1 +1,5 @@ | ||
# 0.5.0-alpha.9 (2017-07-14) | ||
- **[Fix]** Treat `{foo: undefined}` as `{}` if `foo` is an optional document property. | ||
# 0.5.0-alpha.8 (2017-07-13) | ||
@@ -2,0 +6,0 @@ |
@@ -90,2 +90,5 @@ "use strict"; | ||
for (const key of keysDiff.commonKeys) { | ||
if (val[key] === undefined && this.properties[key].optional) { | ||
continue; | ||
} | ||
const outKey = this.keys.get(key); | ||
@@ -114,4 +117,9 @@ // TODO(demurgos): Check if the format is supported instead of casting to `any` | ||
const descriptor = this.properties[key]; | ||
if (member === undefined && !descriptor.optional) { | ||
return null_property_1.NullPropertyError.create(key); | ||
if (member === undefined) { | ||
if (descriptor.optional) { | ||
continue; | ||
} | ||
else { | ||
return null_property_1.NullPropertyError.create(key); | ||
} | ||
} | ||
@@ -139,7 +147,10 @@ const error = descriptor.type.testError(member); | ||
else { | ||
if (val1.hasOwnProperty(key) || val2.hasOwnProperty(key)) { | ||
if (!(val1.hasOwnProperty(key) && val2.hasOwnProperty(key) && descriptor.type.equals(member1, member2))) { | ||
if (val1.hasOwnProperty(key) && val2.hasOwnProperty(key)) { | ||
if (!descriptor.type.equals(member1, member2)) { | ||
return false; | ||
} | ||
} | ||
else if (!(member1 === undefined && member2 === undefined)) { | ||
return false; | ||
} | ||
} | ||
@@ -232,2 +243,2 @@ } | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBQ0QsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBdUIsRUFBRSxLQUF1QjtRQUNyRCxNQUFNLHFDQUFtQixDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDRjtBQXJPRCxvQ0FxT0M7QUFFdUIsNEJBQUkiLCJmaWxlIjoibGliL3R5cGVzL2RvY3VtZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmNpZGVudH0gZnJvbSBcImluY2lkZW50XCI7XG5pbXBvcnQge0V4dHJhS2V5c0Vycm9yfSBmcm9tIFwiLi4vZXJyb3JzL2V4dHJhLWtleXNcIjtcbmltcG9ydCB7SW52YWxpZFByb3BlcnR5RXJyb3J9IGZyb20gXCIuLi9lcnJvcnMvaW52YWxpZC1wcm9wZXJ0eVwiO1xuaW1wb3J0IHtNaXNzaW5nS2V5c0Vycm9yfSBmcm9tIFwiLi4vZXJyb3JzL21pc3Npbmcta2V5c1wiO1xuaW1wb3J0IHtOb3RJbXBsZW1lbnRlZEVycm9yfSBmcm9tIFwiLi4vZXJyb3JzL25vdC1pbXBsZW1lbnRlZFwiO1xuaW1wb3J0IHtOdWxsUHJvcGVydHlFcnJvcn0gZnJvbSBcIi4uL2Vycm9ycy9udWxsLXByb3BlcnR5XCI7XG5pbXBvcnQge1dyb25nVHlwZUVycm9yfSBmcm9tIFwiLi4vZXJyb3JzL3dyb25nLXR5cGVcIjtcbmltcG9ydCB7Q2FzZVN0eWxlLCByZW5hbWV9IGZyb20gXCIuLi9oZWxwZXJzL3JlbmFtZVwiO1xuaW1wb3J0IHtTZXJpYWxpemFibGVUeXBlLCBUeXBlIGFzIEtyeW9UeXBlLCBWZXJzaW9uZWRUeXBlfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgdHlwZSBOYW1lID0gXCJkb2N1bWVudFwiO1xuZXhwb3J0IGNvbnN0IG5hbWU6IE5hbWUgPSBcImRvY3VtZW50XCI7XG5leHBvcnQgbmFtZXNwYWNlIGJzb24ge1xuICBleHBvcnQgaW50ZXJmYWNlIElucHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBUeXBlIHtcbiAgICBuYW1lOiBOYW1lO1xuICAgIG5vdE5hbjogYm9vbGVhbjtcbiAgICBub3RJbmZpbml0eTogYm9vbGVhbjtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBxcyB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5wdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIE91dHB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIERpZmYge1xuICBzZXQ6IHtba2V5OiBzdHJpbmddOiBhbnl9OyAvLyB2YWxcbiAgdXBkYXRlOiB7W2tleTogc3RyaW5nXTogYW55fTsgLy8gZGlmZlxuICB1bnNldDoge1trZXk6IHN0cmluZ106IGFueX07IC8vIHZhbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnM8VHlwZUtpbmQgZXh0ZW5kcyBLcnlvVHlwZTxhbnk+PiB7XG4gIC8qKlxuICAgKiBEbyBub3QgdGhyb3cgZXJyb3Igd2hlbiB0aGUgb2JqZWN0IGNvbnRhaW5zIGV4dHJhbmVvdXMga2V5cy5cbiAgICovXG4gIGlnbm9yZUV4dHJhS2V5cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgZGljdGlvbmFyeSBiZXR3ZWVuIGEgcHJvcGVydHkgbmFtZSBhbmQgaXRzIGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgcHJvcGVydGllczoge1trZXk6IHN0cmluZ106IFByb3BlcnR5RGVzY3JpcHRvcjxUeXBlS2luZD59O1xuXG4gIC8qKlxuICAgKiBUaGUga2V5cyBvZiB0aGUgc2VyaWFsaXplZCBkb2N1bWVudHMgYXJlIHJlbmFtZWQgZm9sbG93aW5nIHRoZVxuICAgKiBzdXBwbGllZCBzdHlsZSAodW5kZWZpbmVkIHRvIGtlZXAgdGhlIG9yaWdpbmFsIG5hbWUpLlxuICAgKi9cbiAgcmVuYW1lPzogQ2FzZVN0eWxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5RGVzY3JpcHRvcjxUeXBlS2luZCBleHRlbmRzIEtyeW9UeXBlPGFueT4+IHtcbiAgLyoqXG4gICAqIEFsbG93cyB0aGlzIHByb3BlcnR5IHRvIGJlIG1pc3NpbmcgKHVuZGVmaW5lZCB2YWx1ZXMgdGhyb3cgZXJyb3JzKS5cbiAgICovXG4gIG9wdGlvbmFsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhpcyBwcm9wZXJ0eS5cbiAgICovXG4gIHR5cGU6IFR5cGVLaW5kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZTZXRzUmVzdWx0PFQ+IHtcbiAgY29tbW9uS2V5czogU2V0PFQ+O1xuICBtaXNzaW5nS2V5czogU2V0PFQ+O1xuICBleHRyYUtleXM6IFNldDxUPjtcbn1cblxuZnVuY3Rpb24gZGlmZlNldHM8VD4ocmVmZXJlbmNlOiBJdGVyYWJsZTxUPiwgdmFsdWVzOiBJdGVyYWJsZTxUPik6IERpZmZTZXRzUmVzdWx0PFQ+IHtcbiAgY29uc3QgcmVmZXJlbmNlU2V0OiBTZXQ8VD4gPSBuZXcgU2V0PFQ+KHJlZmVyZW5jZSk7XG4gIGNvbnN0IHZhbHVlc1NldDogU2V0PFQ+ID0gbmV3IFNldDxUPih2YWx1ZXMpO1xuICBjb25zdCBhbGw6IFNldDxUPiA9IG5ldyBTZXQ8VD4oWy4uLnJlZmVyZW5jZVNldCwgLi4udmFsdWVzU2V0XSk7XG4gIGNvbnN0IGNvbW1vbktleXM6IFNldDxUPiA9IG5ldyBTZXQ8VD4oKTtcbiAgY29uc3QgbWlzc2luZ0tleXM6IFNldDxUPiA9IG5ldyBTZXQ8VD4oKTtcbiAgY29uc3QgZXh0cmFLZXlzOiBTZXQ8VD4gPSBuZXcgU2V0PFQ+KCk7XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgYWxsKSB7XG4gICAgaWYgKCF2YWx1ZXNTZXQuaGFzKGtleSkpIHtcbiAgICAgIG1pc3NpbmdLZXlzLmFkZChrZXkpO1xuICAgIH0gZWxzZSBpZiAoIXJlZmVyZW5jZVNldC5oYXMoa2V5KSkge1xuICAgICAgZXh0cmFLZXlzLmFkZChrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21tb25LZXlzLmFkZChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7Y29tbW9uS2V5cywgbWlzc2luZ0tleXMsIGV4dHJhS2V5c307XG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFR5cGU8VCBleHRlbmRzIHt9PlxuICBpbXBsZW1lbnRzIFZlcnNpb25lZFR5cGU8VCwganNvbi5JbnB1dCwganNvbi5PdXRwdXQsIERpZmY+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJic29uXCIsIGJzb24uSW5wdXQsIGJzb24uT3V0cHV0PixcbiAgICBTZXJpYWxpemFibGVUeXBlPFQsIFwicXNcIiwgcXMuSW5wdXQsIHFzLk91dHB1dD4ge1xuICByZWFkb25seSBuYW1lOiBOYW1lID0gbmFtZTtcbiAgcmVhZG9ubHkgaWdub3JlRXh0cmFLZXlzOiBib29sZWFuO1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiB7XG4gICAgW2tleTogc3RyaW5nXTogUHJvcGVydHlEZXNjcmlwdG9yPFZlcnNpb25lZFR5cGU8YW55LCBhbnksIGFueSwgYW55Pj47XG4gIH07XG4gIHJlYWRvbmx5IHJlbmFtZT86IENhc2VTdHlsZTtcblxuICAvKipcbiAgICogTWFwIGZyb20gdGhlIGRvY3VtZW50IGtleXMgdG8gdGhlIHNlcmlhbGl6ZWQgbmFtZXNcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkga2V5czogTWFwPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogTWFwIGZyb20gdGhlIHNlcmlhbGl6ZWQgbmFtZXMgdG8gdGhlIGRvY3VtZW50IGtleXNcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgb3V0S2V5czogTWFwPHN0cmluZywgc3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zPFZlcnNpb25lZFR5cGU8YW55LCBhbnksIGFueSwgYW55Pj4pIHtcbiAgICB0aGlzLmlnbm9yZUV4dHJhS2V5cyA9IG9wdGlvbnMuaWdub3JlRXh0cmFLZXlzIHx8IGZhbHNlO1xuICAgIHRoaXMucHJvcGVydGllcyA9IG9wdGlvbnMucHJvcGVydGllcztcbiAgICB0aGlzLnJlbmFtZSA9IG9wdGlvbnMucmVuYW1lO1xuICAgIHRoaXMua2V5cyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgdGhpcy5vdXRLZXlzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgY29uc3QgcmVuYW1lZDogc3RyaW5nID0gdGhpcy5yZW5hbWUgPT09IHVuZGVmaW5lZCA/IGtleSA6IHJlbmFtZShrZXksIHRoaXMucmVuYW1lKTtcbiAgICAgIHRoaXMua2V5cy5zZXQoa2V5LCByZW5hbWVkKTtcbiAgICAgIGlmICh0aGlzLm91dEtleXMuaGFzKHJlbmFtZWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIk5vbkJpamVjdGl2ZUtleVJlbmFtZVwiLCBcIlNvbWUga2V5cyBhcmUgdGhlIHNhbWUgYWZ0ZXIgcmVuYW1pbmdcIik7XG4gICAgICB9XG4gICAgICB0aGlzLm91dEtleXMuc2V0KHJlbmFtZWQsIGtleSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKG9wdGlvbnM6IGpzb24uVHlwZSk6IERvY3VtZW50VHlwZTx7fT4ge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiRG9jdW1lbnRUeXBlLmZyb21KU09OXCIpO1xuICB9XG5cbiAgdG9KU09OKCk6IGpzb24uVHlwZSB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJEb2N1bWVudFR5cGUjdG9KU09OXCIpO1xuICB9XG5cbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBic29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJqc29uXCIsIHZhbDoganNvbi5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwicXNcIiwgdmFsOiBxcy5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICBjb25zdCBvdXRLZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMub3V0S2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKGlucHV0KSk7XG4gICAgLy8gVE9ETyhkZW11cmdvcyk6IHVzZSBQYXJ0aWFsPFQ+IG9uY2UgdHlwZWRvYyBzdXBwb3J0cyBpdFxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgZm9yIChjb25zdCBvdXRLZXkgb2Ygb3V0S2V5c0RpZmYuY29tbW9uS2V5cykge1xuICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSB0aGlzLm91dEtleXMuZ2V0KG91dEtleSkhO1xuICAgICAgLy8gVE9ETyhkZW11cmdvcyk6IENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkIGluc3RlYWQgb2YgY2FzdGluZyB0byBgYW55YFxuICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLnJlYWQoPGFueT4gZm9ybWF0LCBpbnB1dFtvdXRLZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBUO1xuICB9XG5cbiAgcmVhZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICBjb25zdCBvdXRLZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMub3V0S2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKGlucHV0KSk7XG4gICAgY29uc3QgbWlzc2luZ1JlcXVpcmVkS2V5czogc3RyaW5nW10gPSBbLi4ub3V0S2V5c0RpZmYubWlzc2luZ0tleXNdLmZpbHRlcigob3V0S2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm9wZXJ0aWVzW3RoaXMub3V0S2V5cy5nZXQob3V0S2V5KSFdLm9wdGlvbmFsO1xuICAgIH0pO1xuICAgIGlmIChtaXNzaW5nUmVxdWlyZWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IE1pc3NpbmdLZXlzRXJyb3IuY3JlYXRlKG1pc3NpbmdSZXF1aXJlZEtleXMpO1xuICAgIH0gZWxzZSBpZiAob3V0S2V5c0RpZmYuZXh0cmFLZXlzLnNpemUgPiAwICYmICF0aGlzLmlnbm9yZUV4dHJhS2V5cykge1xuICAgICAgdGhyb3cgRXh0cmFLZXlzRXJyb3IuY3JlYXRlKFsuLi5vdXRLZXlzRGlmZi5leHRyYUtleXNdKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPKGRlbXVyZ29zKTogdXNlIFBhcnRpYWw8VD4gb25jZSB0eXBlZG9jIHN1cHBvcnRzIGl0XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IG91dEtleSBvZiBvdXRLZXlzRGlmZi5jb21tb25LZXlzKSB7XG4gICAgICBjb25zdCBrZXk6IHN0cmluZyA9IHRoaXMub3V0S2V5cy5nZXQob3V0S2V5KSE7XG4gICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICByZXN1bHRba2V5XSA9IHRoaXMucHJvcGVydGllc1trZXldLnR5cGUucmVhZCg8YW55PiBmb3JtYXQsIGlucHV0W291dEtleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gIH1cblxuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IFQpOiBic29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBUKToganNvbi5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJxc1wiLCB2YWw6IFQpOiBxcy5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgdmFsOiBUKTogYW55IHtcbiAgICBjb25zdCBrZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMua2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKHZhbCkpO1xuICAgIGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzRGlmZi5jb21tb25LZXlzKSB7XG4gICAgICBjb25zdCBvdXRLZXk6IHN0cmluZyA9IHRoaXMua2V5cy5nZXQoa2V5KSE7XG4gICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICByZXN1bHRbb3V0S2V5XSA9IHRoaXMucHJvcGVydGllc1trZXldLnR5cGUud3JpdGUoPGFueT4gZm9ybWF0LCAoPGFueT4gdmFsKVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFQpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09IFwib2JqZWN0XCIgfHwgdmFsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwib2JqZWN0XCIsIHZhbCk7XG4gICAgfVxuICAgIGNvbnN0IGtleXNEaWZmOiBEaWZmU2V0c1Jlc3VsdDxzdHJpbmc+ID0gZGlmZlNldHModGhpcy5rZXlzLmtleXMoKSwgT2JqZWN0LmtleXModmFsKSk7XG4gICAgY29uc3QgbWlzc2luZ1JlcXVpcmVkS2V5czogc3RyaW5nW10gPSBbLi4ua2V5c0RpZmYubWlzc2luZ0tleXNdLmZpbHRlcigoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm9wZXJ0aWVzW2tleV0ub3B0aW9uYWw7XG4gICAgfSk7XG4gICAgaWYgKG1pc3NpbmdSZXF1aXJlZEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIE1pc3NpbmdLZXlzRXJyb3IuY3JlYXRlKG1pc3NpbmdSZXF1aXJlZEtleXMpO1xuICAgIH0gZWxzZSBpZiAoa2V5c0RpZmYuZXh0cmFLZXlzLnNpemUgPiAwICYmICF0aGlzLmlnbm9yZUV4dHJhS2V5cykge1xuICAgICAgcmV0dXJuIEV4dHJhS2V5c0Vycm9yLmNyZWF0ZShbLi4ua2V5c0RpZmYuZXh0cmFLZXlzXSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0RpZmYuY29tbW9uS2V5cykge1xuICAgICAgY29uc3QgbWVtYmVyOiBhbnkgPSAoPGFueT4gdmFsKVtrZXldO1xuICAgICAgY29uc3QgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yPEtyeW9UeXBlPGFueT4+ID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICBpZiAobWVtYmVyID09PSB1bmRlZmluZWQgJiYgIWRlc2NyaXB0b3Iub3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIE51bGxQcm9wZXJ0eUVycm9yLmNyZWF0ZShrZXkpO1xuICAgICAgfVxuICAgICAgY29uc3QgZXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkID0gZGVzY3JpcHRvci50eXBlLnRlc3RFcnJvcihtZW1iZXIpO1xuICAgICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIEludmFsaWRQcm9wZXJ0eUVycm9yLmNyZWF0ZShrZXksIG1lbWJlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0ZXN0KHZhbDogVCk6IHZhbCBpcyBUIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0RXJyb3IodmFsKSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZXF1YWxzKHZhbDE6IFQsIHZhbDI6IFQpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcjxLcnlvVHlwZTxhbnk+PiA9IHRoaXMucHJvcGVydGllc1trZXldO1xuICAgICAgY29uc3QgbWVtYmVyMTogYW55ID0gKDxhbnk+IHZhbDEpW2tleV07XG4gICAgICBjb25zdCBtZW1iZXIyOiBhbnkgPSAoPGFueT4gdmFsMilba2V5XTtcbiAgICAgIGlmICghZGVzY3JpcHRvci5vcHRpb25hbCkge1xuICAgICAgICBpZiAoIWRlc2NyaXB0b3IudHlwZS5lcXVhbHMobWVtYmVyMSwgbWVtYmVyMikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWwxLmhhc093blByb3BlcnR5KGtleSkgfHwgdmFsMi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgaWYgKCEodmFsMS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHZhbDIuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBkZXNjcmlwdG9yLnR5cGUuZXF1YWxzKG1lbWJlcjEsIG1lbWJlcjIpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNsb25lKHZhbDogVCk6IFQge1xuICAgIC8vIFRPRE8oZGVtdXJnb3MpOiB1c2UgUGFydGlhbDxUPiBvbmNlIHR5cGVkb2Mgc3VwcG9ydHMgaXRcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgY29uc3QgbWVtYmVyOiBhbnkgPSAoPGFueT4gdmFsKVtrZXldO1xuICAgICAgaWYgKG1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5jbG9uZShtZW1iZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gIH1cblxuICBkaWZmKG9sZFZhbDogVCwgbmV3VmFsOiBUKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGVxdWFsOiBib29sZWFuID0gdHJ1ZTtcbiAgICBjb25zdCByZXN1bHQ6IERpZmYgPSB7c2V0OiB7fSwgdW5zZXQ6IHt9LCB1cGRhdGU6IHt9fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcjxWZXJzaW9uZWRUeXBlPGFueSwgYW55LCBhbnksIGFueT4+ID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICBjb25zdCBvbGRNZW1iZXI6IGFueSA9ICg8YW55PiBvbGRWYWwpW2tleV07XG4gICAgICBjb25zdCBuZXdNZW1iZXI6IGFueSA9ICg8YW55PiBuZXdWYWwpW2tleV07XG4gICAgICBpZiAob2xkTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG5ld01lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgZGlmZjogYW55ID0gZGVzY3JpcHRvci50eXBlLmRpZmYob2xkTWVtYmVyLCBuZXdNZW1iZXIpO1xuICAgICAgICAgIGlmIChkaWZmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC51cGRhdGVba2V5XSA9IGRpZmY7XG4gICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQudW5zZXRba2V5XSA9IGRlc2NyaXB0b3IudHlwZS5jbG9uZShvbGRNZW1iZXIpO1xuICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuZXdNZW1iZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc3VsdC5zZXRba2V5XSA9IGRlc2NyaXB0b3IudHlwZS5jbG9uZShuZXdNZW1iZXIpO1xuICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVxdWFsID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBULCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogVCB7XG4gICAgY29uc3QgcmVzdWx0OiBUID0gdGhpcy5jbG9uZShvbGRWYWwpO1xuICAgIGlmIChkaWZmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmYuc2V0KSB7XG4gICAgICAoPGFueT4gcmVzdWx0KVtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5jbG9uZShkaWZmLnNldFtrZXldKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlmZi51bnNldCkge1xuICAgICAgZGVsZXRlICg8YW55PiByZXN1bHQpW2tleV07XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmYudXBkYXRlKSB7XG4gICAgICAoPGFueT4gcmVzdWx0KVtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5wYXRjaCgoPGFueT4gcmVzdWx0KVtrZXldW2tleV0sIGRpZmYudXBkYXRlW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmV2ZXJzZURpZmYoZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIGlmIChkaWZmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogRGlmZiA9IHtcbiAgICAgIHNldDoge30sXG4gICAgICB1bnNldDoge30sXG4gICAgICB1cGRhdGU6IHt9LFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlmZi51bnNldCkge1xuICAgICAgcmVzdWx0LnNldFtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5jbG9uZShkaWZmLnVuc2V0W2tleV0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWZmLnNldCkge1xuICAgICAgcmVzdWx0LnVuc2V0W2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLmNsb25lKGRpZmYuc2V0W2tleV0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWZmLnVwZGF0ZSkge1xuICAgICAgcmVzdWx0LnVwZGF0ZVtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5yZXZlcnNlRGlmZihkaWZmLnVwZGF0ZVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHNxdWFzaChkaWZmMTogRGlmZiB8IHVuZGVmaW5lZCwgZGlmZjI6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkRvY3VtZW50VHlwZSNzcXVhc2hcIik7XG4gIH1cbn1cblxuZXhwb3J0IHtEb2N1bWVudFR5cGUgYXMgVHlwZX07XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQXVCLEVBQUUsS0FBdUI7UUFDckQsTUFBTSxxQ0FBbUIsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMxRCxDQUFDO0NBQ0Y7QUE5T0Qsb0NBOE9DO0FBRXVCLDRCQUFJIiwiZmlsZSI6ImxpYi90eXBlcy9kb2N1bWVudC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5jaWRlbnR9IGZyb20gXCJpbmNpZGVudFwiO1xuaW1wb3J0IHtFeHRyYUtleXNFcnJvcn0gZnJvbSBcIi4uL2Vycm9ycy9leHRyYS1rZXlzXCI7XG5pbXBvcnQge0ludmFsaWRQcm9wZXJ0eUVycm9yfSBmcm9tIFwiLi4vZXJyb3JzL2ludmFsaWQtcHJvcGVydHlcIjtcbmltcG9ydCB7TWlzc2luZ0tleXNFcnJvcn0gZnJvbSBcIi4uL2Vycm9ycy9taXNzaW5nLWtleXNcIjtcbmltcG9ydCB7Tm90SW1wbGVtZW50ZWRFcnJvcn0gZnJvbSBcIi4uL2Vycm9ycy9ub3QtaW1wbGVtZW50ZWRcIjtcbmltcG9ydCB7TnVsbFByb3BlcnR5RXJyb3J9IGZyb20gXCIuLi9lcnJvcnMvbnVsbC1wcm9wZXJ0eVwiO1xuaW1wb3J0IHtXcm9uZ1R5cGVFcnJvcn0gZnJvbSBcIi4uL2Vycm9ycy93cm9uZy10eXBlXCI7XG5pbXBvcnQge0Nhc2VTdHlsZSwgcmVuYW1lfSBmcm9tIFwiLi4vaGVscGVycy9yZW5hbWVcIjtcbmltcG9ydCB7U2VyaWFsaXphYmxlVHlwZSwgVHlwZSBhcyBLcnlvVHlwZSwgVmVyc2lvbmVkVHlwZX0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwiZG9jdW1lbnRcIjtcbmV4cG9ydCBjb25zdCBuYW1lOiBOYW1lID0gXCJkb2N1bWVudFwiO1xuZXhwb3J0IG5hbWVzcGFjZSBic29uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVHlwZSB7XG4gICAgbmFtZTogTmFtZTtcbiAgICBub3ROYW46IGJvb2xlYW47XG4gICAgbm90SW5maW5pdHk6IGJvb2xlYW47XG4gIH1cbn1cbmV4cG9ydCBuYW1lc3BhY2UgcXMge1xuICBleHBvcnQgaW50ZXJmYWNlIElucHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE91dHB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZiB7XG4gIHNldDoge1trZXk6IHN0cmluZ106IGFueX07IC8vIHZhbFxuICB1cGRhdGU6IHtba2V5OiBzdHJpbmddOiBhbnl9OyAvLyBkaWZmXG4gIHVuc2V0OiB7W2tleTogc3RyaW5nXTogYW55fTsgLy8gdmFsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uczxUeXBlS2luZCBleHRlbmRzIEtyeW9UeXBlPGFueT4+IHtcbiAgLyoqXG4gICAqIERvIG5vdCB0aHJvdyBlcnJvciB3aGVuIHRoZSBvYmplY3QgY29udGFpbnMgZXh0cmFuZW91cyBrZXlzLlxuICAgKi9cbiAgaWdub3JlRXh0cmFLZXlzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBkaWN0aW9uYXJ5IGJldHdlZW4gYSBwcm9wZXJ0eSBuYW1lIGFuZCBpdHMgZGVzY3JpcHRpb24uXG4gICAqL1xuICBwcm9wZXJ0aWVzOiB7W2tleTogc3RyaW5nXTogUHJvcGVydHlEZXNjcmlwdG9yPFR5cGVLaW5kPn07XG5cbiAgLyoqXG4gICAqIFRoZSBrZXlzIG9mIHRoZSBzZXJpYWxpemVkIGRvY3VtZW50cyBhcmUgcmVuYW1lZCBmb2xsb3dpbmcgdGhlXG4gICAqIHN1cHBsaWVkIHN0eWxlICh1bmRlZmluZWQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgbmFtZSkuXG4gICAqL1xuICByZW5hbWU/OiBDYXNlU3R5bGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlEZXNjcmlwdG9yPFR5cGVLaW5kIGV4dGVuZHMgS3J5b1R5cGU8YW55Pj4ge1xuICAvKipcbiAgICogQWxsb3dzIHRoaXMgcHJvcGVydHkgdG8gYmUgbWlzc2luZyAodW5kZWZpbmVkIHZhbHVlcyB0aHJvdyBlcnJvcnMpLlxuICAgKi9cbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGlzIHByb3BlcnR5LlxuICAgKi9cbiAgdHlwZTogVHlwZUtpbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZlNldHNSZXN1bHQ8VD4ge1xuICBjb21tb25LZXlzOiBTZXQ8VD47XG4gIG1pc3NpbmdLZXlzOiBTZXQ8VD47XG4gIGV4dHJhS2V5czogU2V0PFQ+O1xufVxuXG5mdW5jdGlvbiBkaWZmU2V0czxUPihyZWZlcmVuY2U6IEl0ZXJhYmxlPFQ+LCB2YWx1ZXM6IEl0ZXJhYmxlPFQ+KTogRGlmZlNldHNSZXN1bHQ8VD4ge1xuICBjb25zdCByZWZlcmVuY2VTZXQ6IFNldDxUPiA9IG5ldyBTZXQ8VD4ocmVmZXJlbmNlKTtcbiAgY29uc3QgdmFsdWVzU2V0OiBTZXQ8VD4gPSBuZXcgU2V0PFQ+KHZhbHVlcyk7XG4gIGNvbnN0IGFsbDogU2V0PFQ+ID0gbmV3IFNldDxUPihbLi4ucmVmZXJlbmNlU2V0LCAuLi52YWx1ZXNTZXRdKTtcbiAgY29uc3QgY29tbW9uS2V5czogU2V0PFQ+ID0gbmV3IFNldDxUPigpO1xuICBjb25zdCBtaXNzaW5nS2V5czogU2V0PFQ+ID0gbmV3IFNldDxUPigpO1xuICBjb25zdCBleHRyYUtleXM6IFNldDxUPiA9IG5ldyBTZXQ8VD4oKTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBhbGwpIHtcbiAgICBpZiAoIXZhbHVlc1NldC5oYXMoa2V5KSkge1xuICAgICAgbWlzc2luZ0tleXMuYWRkKGtleSk7XG4gICAgfSBlbHNlIGlmICghcmVmZXJlbmNlU2V0LmhhcyhrZXkpKSB7XG4gICAgICBleHRyYUtleXMuYWRkKGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1vbktleXMuYWRkKGtleSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtjb21tb25LZXlzLCBtaXNzaW5nS2V5cywgZXh0cmFLZXlzfTtcbn1cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50VHlwZTxUIGV4dGVuZHMge30+XG4gIGltcGxlbWVudHMgVmVyc2lvbmVkVHlwZTxULCBqc29uLklucHV0LCBqc29uLk91dHB1dCwgRGlmZj4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxULCBcImJzb25cIiwgYnNvbi5JbnB1dCwgYnNvbi5PdXRwdXQ+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJxc1wiLCBxcy5JbnB1dCwgcXMuT3V0cHV0PiB7XG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSBpZ25vcmVFeHRyYUtleXM6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eURlc2NyaXB0b3I8VmVyc2lvbmVkVHlwZTxhbnksIGFueSwgYW55LCBhbnk+PjtcbiAgfTtcbiAgcmVhZG9ubHkgcmVuYW1lPzogQ2FzZVN0eWxlO1xuXG4gIC8qKlxuICAgKiBNYXAgZnJvbSB0aGUgZG9jdW1lbnQga2V5cyB0byB0aGUgc2VyaWFsaXplZCBuYW1lc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBrZXlzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBNYXAgZnJvbSB0aGUgc2VyaWFsaXplZCBuYW1lcyB0byB0aGUgZG9jdW1lbnQga2V5c1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvdXRLZXlzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnM8VmVyc2lvbmVkVHlwZTxhbnksIGFueSwgYW55LCBhbnk+Pikge1xuICAgIHRoaXMuaWdub3JlRXh0cmFLZXlzID0gb3B0aW9ucy5pZ25vcmVFeHRyYUtleXMgfHwgZmFsc2U7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gb3B0aW9ucy5wcm9wZXJ0aWVzO1xuICAgIHRoaXMucmVuYW1lID0gb3B0aW9ucy5yZW5hbWU7XG4gICAgdGhpcy5rZXlzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICB0aGlzLm91dEtleXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBjb25zdCByZW5hbWVkOiBzdHJpbmcgPSB0aGlzLnJlbmFtZSA9PT0gdW5kZWZpbmVkID8ga2V5IDogcmVuYW1lKGtleSwgdGhpcy5yZW5hbWUpO1xuICAgICAgdGhpcy5rZXlzLnNldChrZXksIHJlbmFtZWQpO1xuICAgICAgaWYgKHRoaXMub3V0S2V5cy5oYXMocmVuYW1lZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFwiTm9uQmlqZWN0aXZlS2V5UmVuYW1lXCIsIFwiU29tZSBrZXlzIGFyZSB0aGUgc2FtZSBhZnRlciByZW5hbWluZ1wiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3V0S2V5cy5zZXQocmVuYW1lZCwga2V5KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04ob3B0aW9uczoganNvbi5UeXBlKTogRG9jdW1lbnRUeXBlPHt9PiB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJEb2N1bWVudFR5cGUuZnJvbUpTT05cIik7XG4gIH1cblxuICB0b0pTT04oKToganNvbi5UeXBlIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkRvY3VtZW50VHlwZSN0b0pTT05cIik7XG4gIH1cblxuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IGJzb24uT3V0cHV0KTogVDtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBqc29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJxc1wiLCB2YWw6IHFzLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IFQge1xuICAgIGNvbnN0IG91dEtleXNEaWZmOiBEaWZmU2V0c1Jlc3VsdDxzdHJpbmc+ID0gZGlmZlNldHModGhpcy5vdXRLZXlzLmtleXMoKSwgT2JqZWN0LmtleXMoaW5wdXQpKTtcbiAgICAvLyBUT0RPKGRlbXVyZ29zKTogdXNlIFBhcnRpYWw8VD4gb25jZSB0eXBlZG9jIHN1cHBvcnRzIGl0XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IG91dEtleSBvZiBvdXRLZXlzRGlmZi5jb21tb25LZXlzKSB7XG4gICAgICBjb25zdCBrZXk6IHN0cmluZyA9IHRoaXMub3V0S2V5cy5nZXQob3V0S2V5KSE7XG4gICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICByZXN1bHRba2V5XSA9IHRoaXMucHJvcGVydGllc1trZXldLnR5cGUucmVhZCg8YW55PiBmb3JtYXQsIGlucHV0W291dEtleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gIH1cblxuICByZWFkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IFQge1xuICAgIGNvbnN0IG91dEtleXNEaWZmOiBEaWZmU2V0c1Jlc3VsdDxzdHJpbmc+ID0gZGlmZlNldHModGhpcy5vdXRLZXlzLmtleXMoKSwgT2JqZWN0LmtleXMoaW5wdXQpKTtcbiAgICBjb25zdCBtaXNzaW5nUmVxdWlyZWRLZXlzOiBzdHJpbmdbXSA9IFsuLi5vdXRLZXlzRGlmZi5taXNzaW5nS2V5c10uZmlsdGVyKChvdXRLZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgICAgcmV0dXJuICF0aGlzLnByb3BlcnRpZXNbdGhpcy5vdXRLZXlzLmdldChvdXRLZXkpIV0ub3B0aW9uYWw7XG4gICAgfSk7XG4gICAgaWYgKG1pc3NpbmdSZXF1aXJlZEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgTWlzc2luZ0tleXNFcnJvci5jcmVhdGUobWlzc2luZ1JlcXVpcmVkS2V5cyk7XG4gICAgfSBlbHNlIGlmIChvdXRLZXlzRGlmZi5leHRyYUtleXMuc2l6ZSA+IDAgJiYgIXRoaXMuaWdub3JlRXh0cmFLZXlzKSB7XG4gICAgICB0aHJvdyBFeHRyYUtleXNFcnJvci5jcmVhdGUoWy4uLm91dEtleXNEaWZmLmV4dHJhS2V5c10pO1xuICAgIH1cblxuICAgIC8vIFRPRE8oZGVtdXJnb3MpOiB1c2UgUGFydGlhbDxUPiBvbmNlIHR5cGVkb2Mgc3VwcG9ydHMgaXRcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGZvciAoY29uc3Qgb3V0S2V5IG9mIG91dEtleXNEaWZmLmNvbW1vbktleXMpIHtcbiAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gdGhpcy5vdXRLZXlzLmdldChvdXRLZXkpITtcbiAgICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5yZWFkKDxhbnk+IGZvcm1hdCwgaW5wdXRbb3V0S2V5XSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgYXMgVDtcbiAgfVxuXG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIsIHZhbDogVCk6IGJzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwianNvblwiLCB2YWw6IFQpOiBqc29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcInFzXCIsIHZhbDogVCk6IHFzLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCB2YWw6IFQpOiBhbnkge1xuICAgIGNvbnN0IGtleXNEaWZmOiBEaWZmU2V0c1Jlc3VsdDxzdHJpbmc+ID0gZGlmZlNldHModGhpcy5rZXlzLmtleXMoKSwgT2JqZWN0LmtleXModmFsKSk7XG4gICAgY29uc3QgcmVzdWx0OiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXNEaWZmLmNvbW1vbktleXMpIHtcbiAgICAgIGlmICgoPGFueT4gdmFsKVtrZXldID09PSB1bmRlZmluZWQgJiYgdGhpcy5wcm9wZXJ0aWVzW2tleV0ub3B0aW9uYWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBvdXRLZXk6IHN0cmluZyA9IHRoaXMua2V5cy5nZXQoa2V5KSE7XG4gICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICByZXN1bHRbb3V0S2V5XSA9IHRoaXMucHJvcGVydGllc1trZXldLnR5cGUud3JpdGUoPGFueT4gZm9ybWF0LCAoPGFueT4gdmFsKVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFQpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09IFwib2JqZWN0XCIgfHwgdmFsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwib2JqZWN0XCIsIHZhbCk7XG4gICAgfVxuICAgIGNvbnN0IGtleXNEaWZmOiBEaWZmU2V0c1Jlc3VsdDxzdHJpbmc+ID0gZGlmZlNldHModGhpcy5rZXlzLmtleXMoKSwgT2JqZWN0LmtleXModmFsKSk7XG4gICAgY29uc3QgbWlzc2luZ1JlcXVpcmVkS2V5czogc3RyaW5nW10gPSBbLi4ua2V5c0RpZmYubWlzc2luZ0tleXNdLmZpbHRlcigoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm9wZXJ0aWVzW2tleV0ub3B0aW9uYWw7XG4gICAgfSk7XG4gICAgaWYgKG1pc3NpbmdSZXF1aXJlZEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIE1pc3NpbmdLZXlzRXJyb3IuY3JlYXRlKG1pc3NpbmdSZXF1aXJlZEtleXMpO1xuICAgIH0gZWxzZSBpZiAoa2V5c0RpZmYuZXh0cmFLZXlzLnNpemUgPiAwICYmICF0aGlzLmlnbm9yZUV4dHJhS2V5cykge1xuICAgICAgcmV0dXJuIEV4dHJhS2V5c0Vycm9yLmNyZWF0ZShbLi4ua2V5c0RpZmYuZXh0cmFLZXlzXSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0RpZmYuY29tbW9uS2V5cykge1xuICAgICAgY29uc3QgbWVtYmVyOiBhbnkgPSAoPGFueT4gdmFsKVtrZXldO1xuICAgICAgY29uc3QgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yPEtyeW9UeXBlPGFueT4+ID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICBpZiAobWVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3Iub3B0aW9uYWwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gTnVsbFByb3BlcnR5RXJyb3IuY3JlYXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZCA9IGRlc2NyaXB0b3IudHlwZS50ZXN0RXJyb3IobWVtYmVyKTtcbiAgICAgIGlmIChlcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJbnZhbGlkUHJvcGVydHlFcnJvci5jcmVhdGUoa2V5LCBtZW1iZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdGVzdCh2YWw6IFQpOiB2YWwgaXMgVCB7XG4gICAgcmV0dXJuIHRoaXMudGVzdEVycm9yKHZhbCkgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGVxdWFscyh2YWwxOiBULCB2YWwyOiBUKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3I8S3J5b1R5cGU8YW55Pj4gPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgIGNvbnN0IG1lbWJlcjE6IGFueSA9ICg8YW55PiB2YWwxKVtrZXldO1xuICAgICAgY29uc3QgbWVtYmVyMjogYW55ID0gKDxhbnk+IHZhbDIpW2tleV07XG4gICAgICBpZiAoIWRlc2NyaXB0b3Iub3B0aW9uYWwpIHtcbiAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnR5cGUuZXF1YWxzKG1lbWJlcjEsIG1lbWJlcjIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsMS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHZhbDIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIGlmICghZGVzY3JpcHRvci50eXBlLmVxdWFscyhtZW1iZXIxLCBtZW1iZXIyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghKG1lbWJlcjEgPT09IHVuZGVmaW5lZCAmJiBtZW1iZXIyID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2xvbmUodmFsOiBUKTogVCB7XG4gICAgLy8gVE9ETyhkZW11cmdvcyk6IHVzZSBQYXJ0aWFsPFQ+IG9uY2UgdHlwZWRvYyBzdXBwb3J0cyBpdFxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBjb25zdCBtZW1iZXI6IGFueSA9ICg8YW55PiB2YWwpW2tleV07XG4gICAgICBpZiAobWVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLmNsb25lKG1lbWJlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgYXMgVDtcbiAgfVxuXG4gIGRpZmYob2xkVmFsOiBULCBuZXdWYWw6IFQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgZXF1YWw6IGJvb2xlYW4gPSB0cnVlO1xuICAgIGNvbnN0IHJlc3VsdDogRGlmZiA9IHtzZXQ6IHt9LCB1bnNldDoge30sIHVwZGF0ZToge319O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgY29uc3QgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yPFZlcnNpb25lZFR5cGU8YW55LCBhbnksIGFueSwgYW55Pj4gPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgIGNvbnN0IG9sZE1lbWJlcjogYW55ID0gKDxhbnk+IG9sZFZhbClba2V5XTtcbiAgICAgIGNvbnN0IG5ld01lbWJlcjogYW55ID0gKDxhbnk+IG5ld1ZhbClba2V5XTtcbiAgICAgIGlmIChvbGRNZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobmV3TWVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBkaWZmOiBhbnkgPSBkZXNjcmlwdG9yLnR5cGUuZGlmZihvbGRNZW1iZXIsIG5ld01lbWJlcik7XG4gICAgICAgICAgaWYgKGRpZmYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0LnVwZGF0ZVtrZXldID0gZGlmZjtcbiAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC51bnNldFtrZXldID0gZGVzY3JpcHRvci50eXBlLmNsb25lKG9sZE1lbWJlcik7XG4gICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5ld01lbWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0LnNldFtrZXldID0gZGVzY3JpcHRvci50eXBlLmNsb25lKG5ld01lbWJlcik7XG4gICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXF1YWwgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cblxuICBwYXRjaChvbGRWYWw6IFQsIGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBUIHtcbiAgICBjb25zdCByZXN1bHQ6IFQgPSB0aGlzLmNsb25lKG9sZFZhbCk7XG4gICAgaWYgKGRpZmYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlmZi5zZXQpIHtcbiAgICAgICg8YW55PiByZXN1bHQpW2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLmNsb25lKGRpZmYuc2V0W2tleV0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWZmLnVuc2V0KSB7XG4gICAgICBkZWxldGUgKDxhbnk+IHJlc3VsdClba2V5XTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlmZi51cGRhdGUpIHtcbiAgICAgICg8YW55PiByZXN1bHQpW2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLnBhdGNoKCg8YW55PiByZXN1bHQpW2tleV1ba2V5XSwgZGlmZi51cGRhdGVba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXZlcnNlRGlmZihkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGRpZmYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0OiBEaWZmID0ge1xuICAgICAgc2V0OiB7fSxcbiAgICAgIHVuc2V0OiB7fSxcbiAgICAgIHVwZGF0ZToge30sXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWZmLnVuc2V0KSB7XG4gICAgICByZXN1bHQuc2V0W2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLmNsb25lKGRpZmYudW5zZXRba2V5XSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmYuc2V0KSB7XG4gICAgICByZXN1bHQudW5zZXRba2V5XSA9IHRoaXMucHJvcGVydGllc1trZXldLnR5cGUuY2xvbmUoZGlmZi5zZXRba2V5XSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmYudXBkYXRlKSB7XG4gICAgICByZXN1bHQudXBkYXRlW2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLnJldmVyc2VEaWZmKGRpZmYudXBkYXRlW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3F1YXNoKGRpZmYxOiBEaWZmIHwgdW5kZWZpbmVkLCBkaWZmMjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiRG9jdW1lbnRUeXBlI3NxdWFzaFwiKTtcbiAgfVxufVxuXG5leHBvcnQge0RvY3VtZW50VHlwZSBhcyBUeXBlfTtcbiJdfQ== |
@@ -90,2 +90,5 @@ "use strict"; | ||
for (const key of keysDiff.commonKeys) { | ||
if (val[key] === undefined && this.properties[key].optional) { | ||
continue; | ||
} | ||
const outKey = this.keys.get(key); | ||
@@ -114,4 +117,9 @@ // TODO(demurgos): Check if the format is supported instead of casting to `any` | ||
const descriptor = this.properties[key]; | ||
if (member === undefined && !descriptor.optional) { | ||
return null_property_1.NullPropertyError.create(key); | ||
if (member === undefined) { | ||
if (descriptor.optional) { | ||
continue; | ||
} | ||
else { | ||
return null_property_1.NullPropertyError.create(key); | ||
} | ||
} | ||
@@ -139,7 +147,10 @@ const error = descriptor.type.testError(member); | ||
else { | ||
if (val1.hasOwnProperty(key) || val2.hasOwnProperty(key)) { | ||
if (!(val1.hasOwnProperty(key) && val2.hasOwnProperty(key) && descriptor.type.equals(member1, member2))) { | ||
if (val1.hasOwnProperty(key) && val2.hasOwnProperty(key)) { | ||
if (!descriptor.type.equals(member1, member2)) { | ||
return false; | ||
} | ||
} | ||
else if (!(member1 === undefined && member2 === undefined)) { | ||
return false; | ||
} | ||
} | ||
@@ -232,2 +243,2 @@ } | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBQ0QsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBdUIsRUFBRSxLQUF1QjtRQUNyRCxNQUFNLHFDQUFtQixDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDRjtBQXJPRCxvQ0FxT0M7QUFFdUIsNEJBQUkiLCJmaWxlIjoibGliL3R5cGVzL2RvY3VtZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmNpZGVudH0gZnJvbSBcImluY2lkZW50XCI7XG5pbXBvcnQge0V4dHJhS2V5c0Vycm9yfSBmcm9tIFwiLi4vZXJyb3JzL2V4dHJhLWtleXNcIjtcbmltcG9ydCB7SW52YWxpZFByb3BlcnR5RXJyb3J9IGZyb20gXCIuLi9lcnJvcnMvaW52YWxpZC1wcm9wZXJ0eVwiO1xuaW1wb3J0IHtNaXNzaW5nS2V5c0Vycm9yfSBmcm9tIFwiLi4vZXJyb3JzL21pc3Npbmcta2V5c1wiO1xuaW1wb3J0IHtOb3RJbXBsZW1lbnRlZEVycm9yfSBmcm9tIFwiLi4vZXJyb3JzL25vdC1pbXBsZW1lbnRlZFwiO1xuaW1wb3J0IHtOdWxsUHJvcGVydHlFcnJvcn0gZnJvbSBcIi4uL2Vycm9ycy9udWxsLXByb3BlcnR5XCI7XG5pbXBvcnQge1dyb25nVHlwZUVycm9yfSBmcm9tIFwiLi4vZXJyb3JzL3dyb25nLXR5cGVcIjtcbmltcG9ydCB7Q2FzZVN0eWxlLCByZW5hbWV9IGZyb20gXCIuLi9oZWxwZXJzL3JlbmFtZVwiO1xuaW1wb3J0IHtTZXJpYWxpemFibGVUeXBlLCBUeXBlIGFzIEtyeW9UeXBlLCBWZXJzaW9uZWRUeXBlfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgdHlwZSBOYW1lID0gXCJkb2N1bWVudFwiO1xuZXhwb3J0IGNvbnN0IG5hbWU6IE5hbWUgPSBcImRvY3VtZW50XCI7XG5leHBvcnQgbmFtZXNwYWNlIGJzb24ge1xuICBleHBvcnQgaW50ZXJmYWNlIElucHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBUeXBlIHtcbiAgICBuYW1lOiBOYW1lO1xuICAgIG5vdE5hbjogYm9vbGVhbjtcbiAgICBub3RJbmZpbml0eTogYm9vbGVhbjtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBxcyB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5wdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIE91dHB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIERpZmYge1xuICBzZXQ6IHtba2V5OiBzdHJpbmddOiBhbnl9OyAvLyB2YWxcbiAgdXBkYXRlOiB7W2tleTogc3RyaW5nXTogYW55fTsgLy8gZGlmZlxuICB1bnNldDoge1trZXk6IHN0cmluZ106IGFueX07IC8vIHZhbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnM8VHlwZUtpbmQgZXh0ZW5kcyBLcnlvVHlwZTxhbnk+PiB7XG4gIC8qKlxuICAgKiBEbyBub3QgdGhyb3cgZXJyb3Igd2hlbiB0aGUgb2JqZWN0IGNvbnRhaW5zIGV4dHJhbmVvdXMga2V5cy5cbiAgICovXG4gIGlnbm9yZUV4dHJhS2V5cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgZGljdGlvbmFyeSBiZXR3ZWVuIGEgcHJvcGVydHkgbmFtZSBhbmQgaXRzIGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgcHJvcGVydGllczoge1trZXk6IHN0cmluZ106IFByb3BlcnR5RGVzY3JpcHRvcjxUeXBlS2luZD59O1xuXG4gIC8qKlxuICAgKiBUaGUga2V5cyBvZiB0aGUgc2VyaWFsaXplZCBkb2N1bWVudHMgYXJlIHJlbmFtZWQgZm9sbG93aW5nIHRoZVxuICAgKiBzdXBwbGllZCBzdHlsZSAodW5kZWZpbmVkIHRvIGtlZXAgdGhlIG9yaWdpbmFsIG5hbWUpLlxuICAgKi9cbiAgcmVuYW1lPzogQ2FzZVN0eWxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5RGVzY3JpcHRvcjxUeXBlS2luZCBleHRlbmRzIEtyeW9UeXBlPGFueT4+IHtcbiAgLyoqXG4gICAqIEFsbG93cyB0aGlzIHByb3BlcnR5IHRvIGJlIG1pc3NpbmcgKHVuZGVmaW5lZCB2YWx1ZXMgdGhyb3cgZXJyb3JzKS5cbiAgICovXG4gIG9wdGlvbmFsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhpcyBwcm9wZXJ0eS5cbiAgICovXG4gIHR5cGU6IFR5cGVLaW5kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZTZXRzUmVzdWx0PFQ+IHtcbiAgY29tbW9uS2V5czogU2V0PFQ+O1xuICBtaXNzaW5nS2V5czogU2V0PFQ+O1xuICBleHRyYUtleXM6IFNldDxUPjtcbn1cblxuZnVuY3Rpb24gZGlmZlNldHM8VD4ocmVmZXJlbmNlOiBJdGVyYWJsZTxUPiwgdmFsdWVzOiBJdGVyYWJsZTxUPik6IERpZmZTZXRzUmVzdWx0PFQ+IHtcbiAgY29uc3QgcmVmZXJlbmNlU2V0OiBTZXQ8VD4gPSBuZXcgU2V0PFQ+KHJlZmVyZW5jZSk7XG4gIGNvbnN0IHZhbHVlc1NldDogU2V0PFQ+ID0gbmV3IFNldDxUPih2YWx1ZXMpO1xuICBjb25zdCBhbGw6IFNldDxUPiA9IG5ldyBTZXQ8VD4oWy4uLnJlZmVyZW5jZVNldCwgLi4udmFsdWVzU2V0XSk7XG4gIGNvbnN0IGNvbW1vbktleXM6IFNldDxUPiA9IG5ldyBTZXQ8VD4oKTtcbiAgY29uc3QgbWlzc2luZ0tleXM6IFNldDxUPiA9IG5ldyBTZXQ8VD4oKTtcbiAgY29uc3QgZXh0cmFLZXlzOiBTZXQ8VD4gPSBuZXcgU2V0PFQ+KCk7XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgYWxsKSB7XG4gICAgaWYgKCF2YWx1ZXNTZXQuaGFzKGtleSkpIHtcbiAgICAgIG1pc3NpbmdLZXlzLmFkZChrZXkpO1xuICAgIH0gZWxzZSBpZiAoIXJlZmVyZW5jZVNldC5oYXMoa2V5KSkge1xuICAgICAgZXh0cmFLZXlzLmFkZChrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21tb25LZXlzLmFkZChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7Y29tbW9uS2V5cywgbWlzc2luZ0tleXMsIGV4dHJhS2V5c307XG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFR5cGU8VCBleHRlbmRzIHt9PlxuICBpbXBsZW1lbnRzIFZlcnNpb25lZFR5cGU8VCwganNvbi5JbnB1dCwganNvbi5PdXRwdXQsIERpZmY+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJic29uXCIsIGJzb24uSW5wdXQsIGJzb24uT3V0cHV0PixcbiAgICBTZXJpYWxpemFibGVUeXBlPFQsIFwicXNcIiwgcXMuSW5wdXQsIHFzLk91dHB1dD4ge1xuICByZWFkb25seSBuYW1lOiBOYW1lID0gbmFtZTtcbiAgcmVhZG9ubHkgaWdub3JlRXh0cmFLZXlzOiBib29sZWFuO1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiB7XG4gICAgW2tleTogc3RyaW5nXTogUHJvcGVydHlEZXNjcmlwdG9yPFZlcnNpb25lZFR5cGU8YW55LCBhbnksIGFueSwgYW55Pj47XG4gIH07XG4gIHJlYWRvbmx5IHJlbmFtZT86IENhc2VTdHlsZTtcblxuICAvKipcbiAgICogTWFwIGZyb20gdGhlIGRvY3VtZW50IGtleXMgdG8gdGhlIHNlcmlhbGl6ZWQgbmFtZXNcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkga2V5czogTWFwPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogTWFwIGZyb20gdGhlIHNlcmlhbGl6ZWQgbmFtZXMgdG8gdGhlIGRvY3VtZW50IGtleXNcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgb3V0S2V5czogTWFwPHN0cmluZywgc3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zPFZlcnNpb25lZFR5cGU8YW55LCBhbnksIGFueSwgYW55Pj4pIHtcbiAgICB0aGlzLmlnbm9yZUV4dHJhS2V5cyA9IG9wdGlvbnMuaWdub3JlRXh0cmFLZXlzIHx8IGZhbHNlO1xuICAgIHRoaXMucHJvcGVydGllcyA9IG9wdGlvbnMucHJvcGVydGllcztcbiAgICB0aGlzLnJlbmFtZSA9IG9wdGlvbnMucmVuYW1lO1xuICAgIHRoaXMua2V5cyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgdGhpcy5vdXRLZXlzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgY29uc3QgcmVuYW1lZDogc3RyaW5nID0gdGhpcy5yZW5hbWUgPT09IHVuZGVmaW5lZCA/IGtleSA6IHJlbmFtZShrZXksIHRoaXMucmVuYW1lKTtcbiAgICAgIHRoaXMua2V5cy5zZXQoa2V5LCByZW5hbWVkKTtcbiAgICAgIGlmICh0aGlzLm91dEtleXMuaGFzKHJlbmFtZWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIk5vbkJpamVjdGl2ZUtleVJlbmFtZVwiLCBcIlNvbWUga2V5cyBhcmUgdGhlIHNhbWUgYWZ0ZXIgcmVuYW1pbmdcIik7XG4gICAgICB9XG4gICAgICB0aGlzLm91dEtleXMuc2V0KHJlbmFtZWQsIGtleSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKG9wdGlvbnM6IGpzb24uVHlwZSk6IERvY3VtZW50VHlwZTx7fT4ge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiRG9jdW1lbnRUeXBlLmZyb21KU09OXCIpO1xuICB9XG5cbiAgdG9KU09OKCk6IGpzb24uVHlwZSB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJEb2N1bWVudFR5cGUjdG9KU09OXCIpO1xuICB9XG5cbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBic29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJqc29uXCIsIHZhbDoganNvbi5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwicXNcIiwgdmFsOiBxcy5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICBjb25zdCBvdXRLZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMub3V0S2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKGlucHV0KSk7XG4gICAgLy8gVE9ETyhkZW11cmdvcyk6IHVzZSBQYXJ0aWFsPFQ+IG9uY2UgdHlwZWRvYyBzdXBwb3J0cyBpdFxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgZm9yIChjb25zdCBvdXRLZXkgb2Ygb3V0S2V5c0RpZmYuY29tbW9uS2V5cykge1xuICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSB0aGlzLm91dEtleXMuZ2V0KG91dEtleSkhO1xuICAgICAgLy8gVE9ETyhkZW11cmdvcyk6IENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkIGluc3RlYWQgb2YgY2FzdGluZyB0byBgYW55YFxuICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLnJlYWQoPGFueT4gZm9ybWF0LCBpbnB1dFtvdXRLZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBUO1xuICB9XG5cbiAgcmVhZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICBjb25zdCBvdXRLZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMub3V0S2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKGlucHV0KSk7XG4gICAgY29uc3QgbWlzc2luZ1JlcXVpcmVkS2V5czogc3RyaW5nW10gPSBbLi4ub3V0S2V5c0RpZmYubWlzc2luZ0tleXNdLmZpbHRlcigob3V0S2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm9wZXJ0aWVzW3RoaXMub3V0S2V5cy5nZXQob3V0S2V5KSFdLm9wdGlvbmFsO1xuICAgIH0pO1xuICAgIGlmIChtaXNzaW5nUmVxdWlyZWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IE1pc3NpbmdLZXlzRXJyb3IuY3JlYXRlKG1pc3NpbmdSZXF1aXJlZEtleXMpO1xuICAgIH0gZWxzZSBpZiAob3V0S2V5c0RpZmYuZXh0cmFLZXlzLnNpemUgPiAwICYmICF0aGlzLmlnbm9yZUV4dHJhS2V5cykge1xuICAgICAgdGhyb3cgRXh0cmFLZXlzRXJyb3IuY3JlYXRlKFsuLi5vdXRLZXlzRGlmZi5leHRyYUtleXNdKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPKGRlbXVyZ29zKTogdXNlIFBhcnRpYWw8VD4gb25jZSB0eXBlZG9jIHN1cHBvcnRzIGl0XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IG91dEtleSBvZiBvdXRLZXlzRGlmZi5jb21tb25LZXlzKSB7XG4gICAgICBjb25zdCBrZXk6IHN0cmluZyA9IHRoaXMub3V0S2V5cy5nZXQob3V0S2V5KSE7XG4gICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICByZXN1bHRba2V5XSA9IHRoaXMucHJvcGVydGllc1trZXldLnR5cGUucmVhZCg8YW55PiBmb3JtYXQsIGlucHV0W291dEtleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gIH1cblxuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IFQpOiBic29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBUKToganNvbi5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJxc1wiLCB2YWw6IFQpOiBxcy5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgdmFsOiBUKTogYW55IHtcbiAgICBjb25zdCBrZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMua2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKHZhbCkpO1xuICAgIGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzRGlmZi5jb21tb25LZXlzKSB7XG4gICAgICBjb25zdCBvdXRLZXk6IHN0cmluZyA9IHRoaXMua2V5cy5nZXQoa2V5KSE7XG4gICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICByZXN1bHRbb3V0S2V5XSA9IHRoaXMucHJvcGVydGllc1trZXldLnR5cGUud3JpdGUoPGFueT4gZm9ybWF0LCAoPGFueT4gdmFsKVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFQpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09IFwib2JqZWN0XCIgfHwgdmFsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwib2JqZWN0XCIsIHZhbCk7XG4gICAgfVxuICAgIGNvbnN0IGtleXNEaWZmOiBEaWZmU2V0c1Jlc3VsdDxzdHJpbmc+ID0gZGlmZlNldHModGhpcy5rZXlzLmtleXMoKSwgT2JqZWN0LmtleXModmFsKSk7XG4gICAgY29uc3QgbWlzc2luZ1JlcXVpcmVkS2V5czogc3RyaW5nW10gPSBbLi4ua2V5c0RpZmYubWlzc2luZ0tleXNdLmZpbHRlcigoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm9wZXJ0aWVzW2tleV0ub3B0aW9uYWw7XG4gICAgfSk7XG4gICAgaWYgKG1pc3NpbmdSZXF1aXJlZEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIE1pc3NpbmdLZXlzRXJyb3IuY3JlYXRlKG1pc3NpbmdSZXF1aXJlZEtleXMpO1xuICAgIH0gZWxzZSBpZiAoa2V5c0RpZmYuZXh0cmFLZXlzLnNpemUgPiAwICYmICF0aGlzLmlnbm9yZUV4dHJhS2V5cykge1xuICAgICAgcmV0dXJuIEV4dHJhS2V5c0Vycm9yLmNyZWF0ZShbLi4ua2V5c0RpZmYuZXh0cmFLZXlzXSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0RpZmYuY29tbW9uS2V5cykge1xuICAgICAgY29uc3QgbWVtYmVyOiBhbnkgPSAoPGFueT4gdmFsKVtrZXldO1xuICAgICAgY29uc3QgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yPEtyeW9UeXBlPGFueT4+ID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICBpZiAobWVtYmVyID09PSB1bmRlZmluZWQgJiYgIWRlc2NyaXB0b3Iub3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIE51bGxQcm9wZXJ0eUVycm9yLmNyZWF0ZShrZXkpO1xuICAgICAgfVxuICAgICAgY29uc3QgZXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkID0gZGVzY3JpcHRvci50eXBlLnRlc3RFcnJvcihtZW1iZXIpO1xuICAgICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIEludmFsaWRQcm9wZXJ0eUVycm9yLmNyZWF0ZShrZXksIG1lbWJlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0ZXN0KHZhbDogVCk6IHZhbCBpcyBUIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0RXJyb3IodmFsKSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZXF1YWxzKHZhbDE6IFQsIHZhbDI6IFQpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcjxLcnlvVHlwZTxhbnk+PiA9IHRoaXMucHJvcGVydGllc1trZXldO1xuICAgICAgY29uc3QgbWVtYmVyMTogYW55ID0gKDxhbnk+IHZhbDEpW2tleV07XG4gICAgICBjb25zdCBtZW1iZXIyOiBhbnkgPSAoPGFueT4gdmFsMilba2V5XTtcbiAgICAgIGlmICghZGVzY3JpcHRvci5vcHRpb25hbCkge1xuICAgICAgICBpZiAoIWRlc2NyaXB0b3IudHlwZS5lcXVhbHMobWVtYmVyMSwgbWVtYmVyMikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWwxLmhhc093blByb3BlcnR5KGtleSkgfHwgdmFsMi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgaWYgKCEodmFsMS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHZhbDIuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBkZXNjcmlwdG9yLnR5cGUuZXF1YWxzKG1lbWJlcjEsIG1lbWJlcjIpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNsb25lKHZhbDogVCk6IFQge1xuICAgIC8vIFRPRE8oZGVtdXJnb3MpOiB1c2UgUGFydGlhbDxUPiBvbmNlIHR5cGVkb2Mgc3VwcG9ydHMgaXRcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgY29uc3QgbWVtYmVyOiBhbnkgPSAoPGFueT4gdmFsKVtrZXldO1xuICAgICAgaWYgKG1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5jbG9uZShtZW1iZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gIH1cblxuICBkaWZmKG9sZFZhbDogVCwgbmV3VmFsOiBUKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGVxdWFsOiBib29sZWFuID0gdHJ1ZTtcbiAgICBjb25zdCByZXN1bHQ6IERpZmYgPSB7c2V0OiB7fSwgdW5zZXQ6IHt9LCB1cGRhdGU6IHt9fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcjxWZXJzaW9uZWRUeXBlPGFueSwgYW55LCBhbnksIGFueT4+ID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICBjb25zdCBvbGRNZW1iZXI6IGFueSA9ICg8YW55PiBvbGRWYWwpW2tleV07XG4gICAgICBjb25zdCBuZXdNZW1iZXI6IGFueSA9ICg8YW55PiBuZXdWYWwpW2tleV07XG4gICAgICBpZiAob2xkTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG5ld01lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgZGlmZjogYW55ID0gZGVzY3JpcHRvci50eXBlLmRpZmYob2xkTWVtYmVyLCBuZXdNZW1iZXIpO1xuICAgICAgICAgIGlmIChkaWZmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC51cGRhdGVba2V5XSA9IGRpZmY7XG4gICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQudW5zZXRba2V5XSA9IGRlc2NyaXB0b3IudHlwZS5jbG9uZShvbGRNZW1iZXIpO1xuICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuZXdNZW1iZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc3VsdC5zZXRba2V5XSA9IGRlc2NyaXB0b3IudHlwZS5jbG9uZShuZXdNZW1iZXIpO1xuICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVxdWFsID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBULCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogVCB7XG4gICAgY29uc3QgcmVzdWx0OiBUID0gdGhpcy5jbG9uZShvbGRWYWwpO1xuICAgIGlmIChkaWZmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmYuc2V0KSB7XG4gICAgICAoPGFueT4gcmVzdWx0KVtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5jbG9uZShkaWZmLnNldFtrZXldKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlmZi51bnNldCkge1xuICAgICAgZGVsZXRlICg8YW55PiByZXN1bHQpW2tleV07XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmYudXBkYXRlKSB7XG4gICAgICAoPGFueT4gcmVzdWx0KVtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5wYXRjaCgoPGFueT4gcmVzdWx0KVtrZXldW2tleV0sIGRpZmYudXBkYXRlW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmV2ZXJzZURpZmYoZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIGlmIChkaWZmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogRGlmZiA9IHtcbiAgICAgIHNldDoge30sXG4gICAgICB1bnNldDoge30sXG4gICAgICB1cGRhdGU6IHt9LFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlmZi51bnNldCkge1xuICAgICAgcmVzdWx0LnNldFtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5jbG9uZShkaWZmLnVuc2V0W2tleV0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWZmLnNldCkge1xuICAgICAgcmVzdWx0LnVuc2V0W2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLmNsb25lKGRpZmYuc2V0W2tleV0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWZmLnVwZGF0ZSkge1xuICAgICAgcmVzdWx0LnVwZGF0ZVtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5yZXZlcnNlRGlmZihkaWZmLnVwZGF0ZVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHNxdWFzaChkaWZmMTogRGlmZiB8IHVuZGVmaW5lZCwgZGlmZjI6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkRvY3VtZW50VHlwZSNzcXVhc2hcIik7XG4gIH1cbn1cblxuZXhwb3J0IHtEb2N1bWVudFR5cGUgYXMgVHlwZX07XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQXVCLEVBQUUsS0FBdUI7UUFDckQsTUFBTSxxQ0FBbUIsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMxRCxDQUFDO0NBQ0Y7QUE5T0Qsb0NBOE9DO0FBRXVCLDRCQUFJIiwiZmlsZSI6ImxpYi90eXBlcy9kb2N1bWVudC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5jaWRlbnR9IGZyb20gXCJpbmNpZGVudFwiO1xuaW1wb3J0IHtFeHRyYUtleXNFcnJvcn0gZnJvbSBcIi4uL2Vycm9ycy9leHRyYS1rZXlzXCI7XG5pbXBvcnQge0ludmFsaWRQcm9wZXJ0eUVycm9yfSBmcm9tIFwiLi4vZXJyb3JzL2ludmFsaWQtcHJvcGVydHlcIjtcbmltcG9ydCB7TWlzc2luZ0tleXNFcnJvcn0gZnJvbSBcIi4uL2Vycm9ycy9taXNzaW5nLWtleXNcIjtcbmltcG9ydCB7Tm90SW1wbGVtZW50ZWRFcnJvcn0gZnJvbSBcIi4uL2Vycm9ycy9ub3QtaW1wbGVtZW50ZWRcIjtcbmltcG9ydCB7TnVsbFByb3BlcnR5RXJyb3J9IGZyb20gXCIuLi9lcnJvcnMvbnVsbC1wcm9wZXJ0eVwiO1xuaW1wb3J0IHtXcm9uZ1R5cGVFcnJvcn0gZnJvbSBcIi4uL2Vycm9ycy93cm9uZy10eXBlXCI7XG5pbXBvcnQge0Nhc2VTdHlsZSwgcmVuYW1lfSBmcm9tIFwiLi4vaGVscGVycy9yZW5hbWVcIjtcbmltcG9ydCB7U2VyaWFsaXphYmxlVHlwZSwgVHlwZSBhcyBLcnlvVHlwZSwgVmVyc2lvbmVkVHlwZX0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwiZG9jdW1lbnRcIjtcbmV4cG9ydCBjb25zdCBuYW1lOiBOYW1lID0gXCJkb2N1bWVudFwiO1xuZXhwb3J0IG5hbWVzcGFjZSBic29uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVHlwZSB7XG4gICAgbmFtZTogTmFtZTtcbiAgICBub3ROYW46IGJvb2xlYW47XG4gICAgbm90SW5maW5pdHk6IGJvb2xlYW47XG4gIH1cbn1cbmV4cG9ydCBuYW1lc3BhY2UgcXMge1xuICBleHBvcnQgaW50ZXJmYWNlIElucHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE91dHB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZiB7XG4gIHNldDoge1trZXk6IHN0cmluZ106IGFueX07IC8vIHZhbFxuICB1cGRhdGU6IHtba2V5OiBzdHJpbmddOiBhbnl9OyAvLyBkaWZmXG4gIHVuc2V0OiB7W2tleTogc3RyaW5nXTogYW55fTsgLy8gdmFsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uczxUeXBlS2luZCBleHRlbmRzIEtyeW9UeXBlPGFueT4+IHtcbiAgLyoqXG4gICAqIERvIG5vdCB0aHJvdyBlcnJvciB3aGVuIHRoZSBvYmplY3QgY29udGFpbnMgZXh0cmFuZW91cyBrZXlzLlxuICAgKi9cbiAgaWdub3JlRXh0cmFLZXlzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBkaWN0aW9uYXJ5IGJldHdlZW4gYSBwcm9wZXJ0eSBuYW1lIGFuZCBpdHMgZGVzY3JpcHRpb24uXG4gICAqL1xuICBwcm9wZXJ0aWVzOiB7W2tleTogc3RyaW5nXTogUHJvcGVydHlEZXNjcmlwdG9yPFR5cGVLaW5kPn07XG5cbiAgLyoqXG4gICAqIFRoZSBrZXlzIG9mIHRoZSBzZXJpYWxpemVkIGRvY3VtZW50cyBhcmUgcmVuYW1lZCBmb2xsb3dpbmcgdGhlXG4gICAqIHN1cHBsaWVkIHN0eWxlICh1bmRlZmluZWQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgbmFtZSkuXG4gICAqL1xuICByZW5hbWU/OiBDYXNlU3R5bGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlEZXNjcmlwdG9yPFR5cGVLaW5kIGV4dGVuZHMgS3J5b1R5cGU8YW55Pj4ge1xuICAvKipcbiAgICogQWxsb3dzIHRoaXMgcHJvcGVydHkgdG8gYmUgbWlzc2luZyAodW5kZWZpbmVkIHZhbHVlcyB0aHJvdyBlcnJvcnMpLlxuICAgKi9cbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGlzIHByb3BlcnR5LlxuICAgKi9cbiAgdHlwZTogVHlwZUtpbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZlNldHNSZXN1bHQ8VD4ge1xuICBjb21tb25LZXlzOiBTZXQ8VD47XG4gIG1pc3NpbmdLZXlzOiBTZXQ8VD47XG4gIGV4dHJhS2V5czogU2V0PFQ+O1xufVxuXG5mdW5jdGlvbiBkaWZmU2V0czxUPihyZWZlcmVuY2U6IEl0ZXJhYmxlPFQ+LCB2YWx1ZXM6IEl0ZXJhYmxlPFQ+KTogRGlmZlNldHNSZXN1bHQ8VD4ge1xuICBjb25zdCByZWZlcmVuY2VTZXQ6IFNldDxUPiA9IG5ldyBTZXQ8VD4ocmVmZXJlbmNlKTtcbiAgY29uc3QgdmFsdWVzU2V0OiBTZXQ8VD4gPSBuZXcgU2V0PFQ+KHZhbHVlcyk7XG4gIGNvbnN0IGFsbDogU2V0PFQ+ID0gbmV3IFNldDxUPihbLi4ucmVmZXJlbmNlU2V0LCAuLi52YWx1ZXNTZXRdKTtcbiAgY29uc3QgY29tbW9uS2V5czogU2V0PFQ+ID0gbmV3IFNldDxUPigpO1xuICBjb25zdCBtaXNzaW5nS2V5czogU2V0PFQ+ID0gbmV3IFNldDxUPigpO1xuICBjb25zdCBleHRyYUtleXM6IFNldDxUPiA9IG5ldyBTZXQ8VD4oKTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBhbGwpIHtcbiAgICBpZiAoIXZhbHVlc1NldC5oYXMoa2V5KSkge1xuICAgICAgbWlzc2luZ0tleXMuYWRkKGtleSk7XG4gICAgfSBlbHNlIGlmICghcmVmZXJlbmNlU2V0LmhhcyhrZXkpKSB7XG4gICAgICBleHRyYUtleXMuYWRkKGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1vbktleXMuYWRkKGtleSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtjb21tb25LZXlzLCBtaXNzaW5nS2V5cywgZXh0cmFLZXlzfTtcbn1cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50VHlwZTxUIGV4dGVuZHMge30+XG4gIGltcGxlbWVudHMgVmVyc2lvbmVkVHlwZTxULCBqc29uLklucHV0LCBqc29uLk91dHB1dCwgRGlmZj4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxULCBcImJzb25cIiwgYnNvbi5JbnB1dCwgYnNvbi5PdXRwdXQ+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJxc1wiLCBxcy5JbnB1dCwgcXMuT3V0cHV0PiB7XG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSBpZ25vcmVFeHRyYUtleXM6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eURlc2NyaXB0b3I8VmVyc2lvbmVkVHlwZTxhbnksIGFueSwgYW55LCBhbnk+PjtcbiAgfTtcbiAgcmVhZG9ubHkgcmVuYW1lPzogQ2FzZVN0eWxlO1xuXG4gIC8qKlxuICAgKiBNYXAgZnJvbSB0aGUgZG9jdW1lbnQga2V5cyB0byB0aGUgc2VyaWFsaXplZCBuYW1lc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBrZXlzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBNYXAgZnJvbSB0aGUgc2VyaWFsaXplZCBuYW1lcyB0byB0aGUgZG9jdW1lbnQga2V5c1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvdXRLZXlzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnM8VmVyc2lvbmVkVHlwZTxhbnksIGFueSwgYW55LCBhbnk+Pikge1xuICAgIHRoaXMuaWdub3JlRXh0cmFLZXlzID0gb3B0aW9ucy5pZ25vcmVFeHRyYUtleXMgfHwgZmFsc2U7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gb3B0aW9ucy5wcm9wZXJ0aWVzO1xuICAgIHRoaXMucmVuYW1lID0gb3B0aW9ucy5yZW5hbWU7XG4gICAgdGhpcy5rZXlzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICB0aGlzLm91dEtleXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBjb25zdCByZW5hbWVkOiBzdHJpbmcgPSB0aGlzLnJlbmFtZSA9PT0gdW5kZWZpbmVkID8ga2V5IDogcmVuYW1lKGtleSwgdGhpcy5yZW5hbWUpO1xuICAgICAgdGhpcy5rZXlzLnNldChrZXksIHJlbmFtZWQpO1xuICAgICAgaWYgKHRoaXMub3V0S2V5cy5oYXMocmVuYW1lZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFwiTm9uQmlqZWN0aXZlS2V5UmVuYW1lXCIsIFwiU29tZSBrZXlzIGFyZSB0aGUgc2FtZSBhZnRlciByZW5hbWluZ1wiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3V0S2V5cy5zZXQocmVuYW1lZCwga2V5KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04ob3B0aW9uczoganNvbi5UeXBlKTogRG9jdW1lbnRUeXBlPHt9PiB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJEb2N1bWVudFR5cGUuZnJvbUpTT05cIik7XG4gIH1cblxuICB0b0pTT04oKToganNvbi5UeXBlIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkRvY3VtZW50VHlwZSN0b0pTT05cIik7XG4gIH1cblxuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IGJzb24uT3V0cHV0KTogVDtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBqc29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJxc1wiLCB2YWw6IHFzLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IFQge1xuICAgIGNvbnN0IG91dEtleXNEaWZmOiBEaWZmU2V0c1Jlc3VsdDxzdHJpbmc+ID0gZGlmZlNldHModGhpcy5vdXRLZXlzLmtleXMoKSwgT2JqZWN0LmtleXMoaW5wdXQpKTtcbiAgICAvLyBUT0RPKGRlbXVyZ29zKTogdXNlIFBhcnRpYWw8VD4gb25jZSB0eXBlZG9jIHN1cHBvcnRzIGl0XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IG91dEtleSBvZiBvdXRLZXlzRGlmZi5jb21tb25LZXlzKSB7XG4gICAgICBjb25zdCBrZXk6IHN0cmluZyA9IHRoaXMub3V0S2V5cy5nZXQob3V0S2V5KSE7XG4gICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICByZXN1bHRba2V5XSA9IHRoaXMucHJvcGVydGllc1trZXldLnR5cGUucmVhZCg8YW55PiBmb3JtYXQsIGlucHV0W291dEtleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gIH1cblxuICByZWFkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IFQge1xuICAgIGNvbnN0IG91dEtleXNEaWZmOiBEaWZmU2V0c1Jlc3VsdDxzdHJpbmc+ID0gZGlmZlNldHModGhpcy5vdXRLZXlzLmtleXMoKSwgT2JqZWN0LmtleXMoaW5wdXQpKTtcbiAgICBjb25zdCBtaXNzaW5nUmVxdWlyZWRLZXlzOiBzdHJpbmdbXSA9IFsuLi5vdXRLZXlzRGlmZi5taXNzaW5nS2V5c10uZmlsdGVyKChvdXRLZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgICAgcmV0dXJuICF0aGlzLnByb3BlcnRpZXNbdGhpcy5vdXRLZXlzLmdldChvdXRLZXkpIV0ub3B0aW9uYWw7XG4gICAgfSk7XG4gICAgaWYgKG1pc3NpbmdSZXF1aXJlZEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgTWlzc2luZ0tleXNFcnJvci5jcmVhdGUobWlzc2luZ1JlcXVpcmVkS2V5cyk7XG4gICAgfSBlbHNlIGlmIChvdXRLZXlzRGlmZi5leHRyYUtleXMuc2l6ZSA+IDAgJiYgIXRoaXMuaWdub3JlRXh0cmFLZXlzKSB7XG4gICAgICB0aHJvdyBFeHRyYUtleXNFcnJvci5jcmVhdGUoWy4uLm91dEtleXNEaWZmLmV4dHJhS2V5c10pO1xuICAgIH1cblxuICAgIC8vIFRPRE8oZGVtdXJnb3MpOiB1c2UgUGFydGlhbDxUPiBvbmNlIHR5cGVkb2Mgc3VwcG9ydHMgaXRcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGZvciAoY29uc3Qgb3V0S2V5IG9mIG91dEtleXNEaWZmLmNvbW1vbktleXMpIHtcbiAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gdGhpcy5vdXRLZXlzLmdldChvdXRLZXkpITtcbiAgICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5yZWFkKDxhbnk+IGZvcm1hdCwgaW5wdXRbb3V0S2V5XSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgYXMgVDtcbiAgfVxuXG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIsIHZhbDogVCk6IGJzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwianNvblwiLCB2YWw6IFQpOiBqc29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcInFzXCIsIHZhbDogVCk6IHFzLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCB2YWw6IFQpOiBhbnkge1xuICAgIGNvbnN0IGtleXNEaWZmOiBEaWZmU2V0c1Jlc3VsdDxzdHJpbmc+ID0gZGlmZlNldHModGhpcy5rZXlzLmtleXMoKSwgT2JqZWN0LmtleXModmFsKSk7XG4gICAgY29uc3QgcmVzdWx0OiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXNEaWZmLmNvbW1vbktleXMpIHtcbiAgICAgIGlmICgoPGFueT4gdmFsKVtrZXldID09PSB1bmRlZmluZWQgJiYgdGhpcy5wcm9wZXJ0aWVzW2tleV0ub3B0aW9uYWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBvdXRLZXk6IHN0cmluZyA9IHRoaXMua2V5cy5nZXQoa2V5KSE7XG4gICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICByZXN1bHRbb3V0S2V5XSA9IHRoaXMucHJvcGVydGllc1trZXldLnR5cGUud3JpdGUoPGFueT4gZm9ybWF0LCAoPGFueT4gdmFsKVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFQpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09IFwib2JqZWN0XCIgfHwgdmFsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwib2JqZWN0XCIsIHZhbCk7XG4gICAgfVxuICAgIGNvbnN0IGtleXNEaWZmOiBEaWZmU2V0c1Jlc3VsdDxzdHJpbmc+ID0gZGlmZlNldHModGhpcy5rZXlzLmtleXMoKSwgT2JqZWN0LmtleXModmFsKSk7XG4gICAgY29uc3QgbWlzc2luZ1JlcXVpcmVkS2V5czogc3RyaW5nW10gPSBbLi4ua2V5c0RpZmYubWlzc2luZ0tleXNdLmZpbHRlcigoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm9wZXJ0aWVzW2tleV0ub3B0aW9uYWw7XG4gICAgfSk7XG4gICAgaWYgKG1pc3NpbmdSZXF1aXJlZEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIE1pc3NpbmdLZXlzRXJyb3IuY3JlYXRlKG1pc3NpbmdSZXF1aXJlZEtleXMpO1xuICAgIH0gZWxzZSBpZiAoa2V5c0RpZmYuZXh0cmFLZXlzLnNpemUgPiAwICYmICF0aGlzLmlnbm9yZUV4dHJhS2V5cykge1xuICAgICAgcmV0dXJuIEV4dHJhS2V5c0Vycm9yLmNyZWF0ZShbLi4ua2V5c0RpZmYuZXh0cmFLZXlzXSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0RpZmYuY29tbW9uS2V5cykge1xuICAgICAgY29uc3QgbWVtYmVyOiBhbnkgPSAoPGFueT4gdmFsKVtrZXldO1xuICAgICAgY29uc3QgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yPEtyeW9UeXBlPGFueT4+ID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICBpZiAobWVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3Iub3B0aW9uYWwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gTnVsbFByb3BlcnR5RXJyb3IuY3JlYXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZCA9IGRlc2NyaXB0b3IudHlwZS50ZXN0RXJyb3IobWVtYmVyKTtcbiAgICAgIGlmIChlcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJbnZhbGlkUHJvcGVydHlFcnJvci5jcmVhdGUoa2V5LCBtZW1iZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdGVzdCh2YWw6IFQpOiB2YWwgaXMgVCB7XG4gICAgcmV0dXJuIHRoaXMudGVzdEVycm9yKHZhbCkgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGVxdWFscyh2YWwxOiBULCB2YWwyOiBUKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3I8S3J5b1R5cGU8YW55Pj4gPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgIGNvbnN0IG1lbWJlcjE6IGFueSA9ICg8YW55PiB2YWwxKVtrZXldO1xuICAgICAgY29uc3QgbWVtYmVyMjogYW55ID0gKDxhbnk+IHZhbDIpW2tleV07XG4gICAgICBpZiAoIWRlc2NyaXB0b3Iub3B0aW9uYWwpIHtcbiAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnR5cGUuZXF1YWxzKG1lbWJlcjEsIG1lbWJlcjIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsMS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHZhbDIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIGlmICghZGVzY3JpcHRvci50eXBlLmVxdWFscyhtZW1iZXIxLCBtZW1iZXIyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghKG1lbWJlcjEgPT09IHVuZGVmaW5lZCAmJiBtZW1iZXIyID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2xvbmUodmFsOiBUKTogVCB7XG4gICAgLy8gVE9ETyhkZW11cmdvcyk6IHVzZSBQYXJ0aWFsPFQ+IG9uY2UgdHlwZWRvYyBzdXBwb3J0cyBpdFxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBjb25zdCBtZW1iZXI6IGFueSA9ICg8YW55PiB2YWwpW2tleV07XG4gICAgICBpZiAobWVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLmNsb25lKG1lbWJlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgYXMgVDtcbiAgfVxuXG4gIGRpZmYob2xkVmFsOiBULCBuZXdWYWw6IFQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgZXF1YWw6IGJvb2xlYW4gPSB0cnVlO1xuICAgIGNvbnN0IHJlc3VsdDogRGlmZiA9IHtzZXQ6IHt9LCB1bnNldDoge30sIHVwZGF0ZToge319O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgY29uc3QgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yPFZlcnNpb25lZFR5cGU8YW55LCBhbnksIGFueSwgYW55Pj4gPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgIGNvbnN0IG9sZE1lbWJlcjogYW55ID0gKDxhbnk+IG9sZFZhbClba2V5XTtcbiAgICAgIGNvbnN0IG5ld01lbWJlcjogYW55ID0gKDxhbnk+IG5ld1ZhbClba2V5XTtcbiAgICAgIGlmIChvbGRNZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobmV3TWVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBkaWZmOiBhbnkgPSBkZXNjcmlwdG9yLnR5cGUuZGlmZihvbGRNZW1iZXIsIG5ld01lbWJlcik7XG4gICAgICAgICAgaWYgKGRpZmYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0LnVwZGF0ZVtrZXldID0gZGlmZjtcbiAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC51bnNldFtrZXldID0gZGVzY3JpcHRvci50eXBlLmNsb25lKG9sZE1lbWJlcik7XG4gICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5ld01lbWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0LnNldFtrZXldID0gZGVzY3JpcHRvci50eXBlLmNsb25lKG5ld01lbWJlcik7XG4gICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXF1YWwgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cblxuICBwYXRjaChvbGRWYWw6IFQsIGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBUIHtcbiAgICBjb25zdCByZXN1bHQ6IFQgPSB0aGlzLmNsb25lKG9sZFZhbCk7XG4gICAgaWYgKGRpZmYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlmZi5zZXQpIHtcbiAgICAgICg8YW55PiByZXN1bHQpW2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLmNsb25lKGRpZmYuc2V0W2tleV0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWZmLnVuc2V0KSB7XG4gICAgICBkZWxldGUgKDxhbnk+IHJlc3VsdClba2V5XTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlmZi51cGRhdGUpIHtcbiAgICAgICg8YW55PiByZXN1bHQpW2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLnBhdGNoKCg8YW55PiByZXN1bHQpW2tleV1ba2V5XSwgZGlmZi51cGRhdGVba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXZlcnNlRGlmZihkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGRpZmYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0OiBEaWZmID0ge1xuICAgICAgc2V0OiB7fSxcbiAgICAgIHVuc2V0OiB7fSxcbiAgICAgIHVwZGF0ZToge30sXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWZmLnVuc2V0KSB7XG4gICAgICByZXN1bHQuc2V0W2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLmNsb25lKGRpZmYudW5zZXRba2V5XSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmYuc2V0KSB7XG4gICAgICByZXN1bHQudW5zZXRba2V5XSA9IHRoaXMucHJvcGVydGllc1trZXldLnR5cGUuY2xvbmUoZGlmZi5zZXRba2V5XSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmYudXBkYXRlKSB7XG4gICAgICByZXN1bHQudXBkYXRlW2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLnJldmVyc2VEaWZmKGRpZmYudXBkYXRlW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3F1YXNoKGRpZmYxOiBEaWZmIHwgdW5kZWZpbmVkLCBkaWZmMjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiRG9jdW1lbnRUeXBlI3NxdWFzaFwiKTtcbiAgfVxufVxuXG5leHBvcnQge0RvY3VtZW50VHlwZSBhcyBUeXBlfTtcbiJdfQ== |
{ | ||
"name": "kryo", | ||
"version": "0.5.0-alpha.8", | ||
"version": "0.5.0-alpha.9", | ||
"description": "Serialization for documents.", | ||
@@ -5,0 +5,0 @@ "main": "dist/lib-es2015/lib/index.es2015.js", |
@@ -17,2 +17,3 @@ import {Incident} from "incident"; | ||
} | ||
export interface Output { | ||
@@ -26,5 +27,7 @@ [key: string]: any; | ||
} | ||
export interface Output { | ||
[key: string]: any; | ||
} | ||
export interface Type { | ||
@@ -40,2 +43,3 @@ name: Name; | ||
} | ||
export interface Output { | ||
@@ -45,2 +49,3 @@ [key: string]: any; | ||
} | ||
export interface Diff { | ||
@@ -198,2 +203,5 @@ set: {[key: string]: any}; // val | ||
for (const key of keysDiff.commonKeys) { | ||
if ((<any> val)[key] === undefined && this.properties[key].optional) { | ||
continue; | ||
} | ||
const outKey: string = this.keys.get(key)!; | ||
@@ -223,4 +231,8 @@ // TODO(demurgos): Check if the format is supported instead of casting to `any` | ||
const descriptor: PropertyDescriptor<KryoType<any>> = this.properties[key]; | ||
if (member === undefined && !descriptor.optional) { | ||
return NullPropertyError.create(key); | ||
if (member === undefined) { | ||
if (descriptor.optional) { | ||
continue; | ||
} else { | ||
return NullPropertyError.create(key); | ||
} | ||
} | ||
@@ -249,6 +261,8 @@ const error: Error | undefined = descriptor.type.testError(member); | ||
} else { | ||
if (val1.hasOwnProperty(key) || val2.hasOwnProperty(key)) { | ||
if (!(val1.hasOwnProperty(key) && val2.hasOwnProperty(key) && descriptor.type.equals(member1, member2))) { | ||
if (val1.hasOwnProperty(key) && val2.hasOwnProperty(key)) { | ||
if (!descriptor.type.equals(member1, member2)) { | ||
return false; | ||
} | ||
} else if (!(member1 === undefined && member2 === undefined)) { | ||
return false; | ||
} | ||
@@ -255,0 +269,0 @@ } |
@@ -7,3 +7,3 @@ import {CaseStyle} from "../../lib/helpers/rename"; | ||
describe("Document", function () { | ||
describe.only("Document", function () { | ||
const documentType: DocumentType<any> = new DocumentType({ | ||
@@ -49,2 +49,15 @@ ignoreExtraKeys: true, | ||
}, | ||
{ | ||
value: { | ||
dateProp: new Date(0), | ||
optIntProp: undefined, | ||
nestedDoc: { | ||
id: 10, | ||
}, | ||
}, | ||
valid: true, | ||
output: { | ||
json: {dateProp: "1970-01-01T00:00:00.000Z", nestedDoc: {id: 10}}, | ||
}, | ||
}, | ||
@@ -51,0 +64,0 @@ {name: "new Date(0)", value: new Date(0), valid: false}, |
1127562
16614