@bitgo-beta/sdk-coin-polyx 1.0.1-beta.1110 → 1.0.1-beta.1111

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.
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"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"}
@@ -194,7 +194,14 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
194
194
  // throwing, so tryGetV8Builder never fires. See SI-981.
195
195
  const bondArgs = args.calls[0].args;
196
196
  if (bondArgs.controller === undefined) {
197
- return this.getV8BatchStakingBuilder();
197
+ // Forward the factory's material (set by the caller, e.g. wallet-platform's
198
+ // getSignedTx via `.material(liveMaterial).from(...)`). Unlike the v7 getters,
199
+ // getV8BatchStakingBuilder() does NOT forward this._material and would otherwise
200
+ // keep the builder's static getV8Material(). On the decode-success path this._material
201
+ // is the material that just decoded the tx, so it is the correct one to rebuild with —
202
+ // without this, a rebuild uses stale static specVersion and the signable no longer
203
+ // matches the HSM-signed bytes (InvalidSignature on combine). See SI-1034.
204
+ return this.getV8BatchStakingBuilder().material(this._material);
198
205
  }
199
206
  return this.getBatchBuilder();
200
207
  }
@@ -297,4 +304,4 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
297
304
  }
298
305
  }
299
306
  exports.TransactionBuilderFactory = TransactionBuilderFactory;
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBMEY7QUFFMUYsc0VBQXVEO0FBQ3ZELHVEQUFvRDtBQUNwRCw2REFBMEQ7QUFDMUQsMkVBQXdFO0FBQ3hFLHlEQUFzRDtBQUN0RCwrREFBNEQ7QUFDNUQsbUVBQWdFO0FBQ2hFLG1EQUFnRDtBQUNoRCx1RUFBb0U7QUFDcEUsb0RBQTRCO0FBQzVCLHlCQUFzRTtBQUN0RSxtQ0FNaUI7QUFHakIscUVBQWtFO0FBQ2xFLGlFQUE4RDtBQUM5RCx1RUFBb0U7QUFDcEUseUVBQXNFO0FBQ3RFLHVEQUFvRDtBQUNwRCwyREFBd0Q7QUFDeEQsaUVBQThEO0FBQzlELCtFQUE0RTtBQUM1RSxpRUFBOEQ7QUFDOUQscUVBQWtFO0FBQ2xFLDJFQUF3RTtBQUN4RSx5RUFBc0U7QUFDdEUsbUVBQWdFO0FBQ2hFLDZEQUEwRDtBQUMxRCx1REFBb0Q7QUFDcEQsdUVBQW9FO0FBQ3BFLDJFQUF3RTtBQUN4RSwyREFBd0Q7QUFJeEQsTUFBYSx5QkFBMEIsU0FBUSx3Q0FBNkI7SUFHMUUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSx1Q0FBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENB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QUssT0FBTyxJQUFJLGdCQUFnQixLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNqRSxPQUFPLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2dCQUMzQyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDekMsQ0FBQzthQUFNLElBQUksVUFBVSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdEMsQ0FBQzthQUFNLElBQUksVUFBVSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDckMsQ0FBQzthQUFNLElBQUksVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ25DLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDbkMsQ0FBQzthQUFNLElBQUksVUFBVSxLQUFLLGtCQUFrQixFQUFFLENBQUM7WUFDN0MsT0FBTyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUM3QyxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBdlJELDhEQXVSQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgZGVjb2RlIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgSGV4VHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi9oZXhUcmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgUmVnaXN0ZXJEaWRXaXRoQ0REQnVpbGRlciB9IGZyb20gJy4vcmVnaXN0ZXJEaWRXaXRoQ0REQnVpbGRlcic7XG5pbXBvcnQgeyBCb25kRXh0cmFCdWlsZGVyIH0gZnJvbSAnLi9ib25kRXh0cmFCdWlsZGVyJztcbmltcG9ydCB7IEJhdGNoU3Rha2luZ0J1aWxkZXIgfSBmcm9tICcuL2JhdGNoU3Rha2luZ0J1aWxkZXInO1xuaW1wb3J0IHsgQmF0Y2hVbnN0YWtpbmdCdWlsZGVyIH0gZnJvbSAnLi9iYXRjaFVuc3Rha2luZ0J1aWxkZXInO1xuaW1wb3J0IHsgVW5ib25kQnVpbGRlciB9IGZyb20gJy4vdW5ib25kQnVpbGRlcic7XG5pbXBvcnQgeyBXaXRoZHJhd1VuYm9uZGVkQnVpbGRlciB9IGZyb20gJy4vd2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgSW50ZXJmYWNlLCBTaW5nbGV0b25SZWdpc3RyeSwgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi8nO1xuaW1wb3J0IHtcbiAgVHhNZXRob2QsXG4gIEJhdGNoQ2FsbE9iamVjdCxcbiAgTWV0aG9kTmFtZXMsXG4gIEFkZEFuZEFmZmlybVdpdGhNZWRpYXRvcnNBcmdzLFxuICBWOEFkZEFuZEFmZmlybVdpdGhNZWRpYXRvcnNBcmdzLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIGFzIEJhc2VUcmFuc2FjdGlvbiB9IGZyb20gJ0BiaXRnby1iZXRhL2Fic3RyYWN0LXN1YnN0cmF0ZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiBhcyBQb2x5eFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBQcmVBcHByb3ZlQXNzZXRCdWlsZGVyIH0gZnJvbSAnLi9wcmVBcHByb3ZlQXNzZXRCdWlsZGVyJztcbmltcG9ydCB7IFRva2VuVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90b2tlblRyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQgeyBIZXhUb2tlblRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vaGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgUmVqZWN0SW5zdHJ1Y3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9yZWplY3RJbnN0cnVjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgTm9taW5hdGVCdWlsZGVyIH0gZnJvbSAnLi9ub21pbmF0ZUJ1aWxkZXInO1xuaW1wb3J0IHsgVjhUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3Y4VHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IFY4SGV4VHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi92OEhleFRyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQgeyBWOFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXIgfSBmcm9tICcuL3Y4UmVnaXN0ZXJEaWRXaXRoQ0REQnVpbGRlcic7XG5pbXBvcnQgeyBWOFJlZ2lzdGVyRGlkQnVpbGRlciB9IGZyb20gJy4vdjhSZWdpc3RlckRpZEJ1aWxkZXInO1xuaW1wb3J0IHsgVjhUb2tlblRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdjhUb2tlblRyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQgeyBWOEhleFRva2VuVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi92OEhleFRva2VuVHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IFY4UHJlQXBwcm92ZUFzc2V0QnVpbGRlciB9IGZyb20gJy4vdjhQcmVBcHByb3ZlQXNzZXRCdWlsZGVyJztcbmltcG9ydCB7IFY4QmF0Y2hTdGFraW5nQnVpbGRlciB9IGZyb20gJy4vdjhCYXRjaFN0YWtpbmdCdWlsZGVyJztcbmltcG9ydCB7IFY4Qm9uZEV4dHJhQnVpbGRlciB9IGZyb20gJy4vdjhCb25kRXh0cmFCdWlsZGVyJztcbmltcG9ydCB7IFY4VW5ib25kQnVpbGRlciB9IGZyb20gJy4vdjhVbmJvbmRCdWlsZGVyJztcbmltcG9ydCB7IFY4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyIH0gZnJvbSAnLi92OEJhdGNoVW5zdGFraW5nQnVpbGRlcic7XG5pbXBvcnQgeyBWOFdpdGhkcmF3VW5ib25kZWRCdWlsZGVyIH0gZnJvbSAnLi92OFdpdGhkcmF3VW5ib25kZWRCdWlsZGVyJztcbmltcG9ydCB7IFY4Tm9taW5hdGVCdWlsZGVyIH0gZnJvbSAnLi92OE5vbWluYXRlQnVpbGRlcic7XG5cbmV4cG9ydCB0eXBlIFN1cHBvcnRlZFRyYW5zYWN0aW9uID0gQmFzZVRyYW5zYWN0aW9uIHwgUG9seXhUcmFuc2FjdGlvbjtcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIHByb3RlY3RlZCBfbWF0ZXJpYWw6IEludGVyZmFjZS5NYXRlcmlhbDtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fbWF0ZXJpYWwgPSB1dGlscy5nZXRNYXRlcmlhbChfY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUpO1xuICB9XG5cbiAgZ2V0VHJhbnNmZXJCdWlsZGVyKCk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpO1xuICB9XG5cbiAgZ2V0SGV4VHJhbnNmZXJCdWlsZGVyKCk6IEhleFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBIZXhUcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpO1xuICB9XG5cbiAgZ2V0UmVnaXN0ZXJEaWRXaXRoQ0REQnVpbGRlcigpOiBSZWdpc3RlckRpZFdpdGhDRERCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpO1xuICB9XG5cbiAgZ2V0UHJlQXBwcm92ZUFzc2V0QnVpbGRlcigpOiBQcmVBcHByb3ZlQXNzZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFByZUFwcHJvdmVBc3NldEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpO1xuICB9XG5cbiAgZ2V0VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTogVG9rZW5UcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVG9rZW5UcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpO1xuICB9XG5cbiAgZ2V0SGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTogSGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgSGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpO1xuICB9XG5cbiAgZ2V0UmVqZWN0SW5zdHJ1Y3Rpb25CdWlsZGVyKCk6IFJlamVjdEluc3RydWN0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBSZWplY3RJbnN0cnVjdGlvbkJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpO1xuICB9XG5cbiAgZ2V0Qm9uZEV4dHJhQnVpbGRlcigpOiBCb25kRXh0cmFCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEJvbmRFeHRyYUJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpO1xuICB9XG5cbiAgZ2V0QmF0Y2hCdWlsZGVyKCk6IEJhdGNoU3Rha2luZ0J1aWxkZXIge1xuICAgIHJldHVybiBuZXcgQmF0Y2hTdGFraW5nQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKS5tYXRlcmlhbCh0aGlzLl9tYXRlcmlhbCk7XG4gIH1cblxuICBnZXRCYXRjaFVuc3Rha2luZ0J1aWxkZXIoKTogQmF0Y2hVbnN0YWtpbmdCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEJhdGNoVW5zdGFraW5nQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKS5tYXRlcmlhbCh0aGlzLl9tYXRlcmlhbCk7XG4gIH1cblxuICBnZXRVbmJvbmRCdWlsZGVyKCk6IFVuYm9uZEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVW5ib25kQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKS5tYXRlcmlhbCh0aGlzLl9tYXRlcmlhbCk7XG4gIH1cblxuICBnZXRXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcigpOiBXaXRoZHJhd1VuYm9uZGVkQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKS5tYXRlcmlhbCh0aGlzLl9tYXRlcmlhbCk7XG4gIH1cblxuICBnZXROb21pbmF0ZUJ1aWxkZXIoKTogTm9taW5hdGVCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IE5vbWluYXRlQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKS5tYXRlcmlhbCh0aGlzLl9tYXRlcmlhbCk7XG4gIH1cblxuICBnZXRWOFRyYW5zZmVyQnVpbGRlcigpOiBWOFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWOFRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldFY4SGV4VHJhbnNmZXJCdWlsZGVyKCk6IFY4SGV4VHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFY4SGV4VHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0VjhSZWdpc3RlckRpZFdpdGhDRERCdWlsZGVyKCk6IFY4UmVnaXN0ZXJEaWRXaXRoQ0REQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWOFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXRWOFJlZ2lzdGVyRGlkQnVpbGRlcigpOiBWOFJlZ2lzdGVyRGlkQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWOFJlZ2lzdGVyRGlkQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTogVjhUb2tlblRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWOFRva2VuVHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0VjhIZXhUb2tlblRyYW5zZmVyQnVpbGRlcigpOiBWOEhleFRva2VuVHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFY4SGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXRWOFByZUFwcHJvdmVBc3NldEJ1aWxkZXIoKTogVjhQcmVBcHByb3ZlQXNzZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFY4UHJlQXBwcm92ZUFzc2V0QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpOiBWOEJhdGNoU3Rha2luZ0J1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVjhCYXRjaFN0YWtpbmdCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0VjhCb25kRXh0cmFCdWlsZGVyKCk6IFY4Qm9uZEV4dHJhQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWOEJvbmRFeHRyYUJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXRWOFVuYm9uZEJ1aWxkZXIoKTogVjhVbmJvbmRCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFY4VW5ib25kQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldFY4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyKCk6IFY4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFY4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0VjhXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcigpOiBWOFdpdGhkcmF3VW5ib25kZWRCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFY4V2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXRWOE5vbWluYXRlQnVpbGRlcigpOiBWOE5vbWluYXRlQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWOE5vbWluYXRlQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcihgd2FsbGV0SW5pdGlhbGl6YXRpb24gZm9yICR7dGhpcy5fY29pbkNvbmZpZy5uYW1lfSBub3QgaW1wbGVtZW50ZWRgKTtcbiAgfVxuXG4gIGZyb20ocmF3VHhuOiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXI8VHhNZXRob2QsIFN1cHBvcnRlZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgYnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcihyYXdUeG4pO1xuICAgIGJ1aWxkZXIuZnJvbShyYXdUeG4pO1xuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgbWF0ZXJpYWwobWF0ZXJpYWw6IEludGVyZmFjZS5NYXRlcmlhbCk6IHRoaXMge1xuICAgIHRoaXMuX21hdGVyaWFsID0gbWF0ZXJpYWw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGdldEJ1aWxkZXIocmF3VHhuOiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXI8VHhNZXRob2QsIFN1cHBvcnRlZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgcmVnaXN0cnkgPSBTaW5nbGV0b25SZWdpc3RyeS5nZXRJbnN0YW5jZSh0aGlzLl9tYXRlcmlhbCk7XG4gICAgbGV0IGRlY29kZWRUeG47XG4gICAgdHJ5IHtcbiAgICAgIGRlY29kZWRUeG4gPSBkZWNvZGUocmF3VHhuLCB7XG4gICAgICAgIG1ldGFkYXRhUnBjOiB0aGlzLl9tYXRlcmlhbC5tZXRhZGF0YSxcbiAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyB2OC1lbmNvZGVkIHRyYW5zYWN0aW9ucyB1c2UgZGlmZmVyZW50IGNoYWluIG1ldGFkYXRhIGFuZCBzaWduZWQgZXh0ZW5zaW9ucywgc28gdGhleVxuICAgICAgLy8gY2Fubm90IGJlIGRlY29kZWQgd2l0aCB2NyBtYXRlcmlhbC4gUmV0cnkgYWdhaW5zdCB2OCBtYXRlcmlhbCBhbmQgcm91dGUgdG8gdGhlIG1hdGNoaW5nXG4gICAgICAvLyB2OCBzdGFraW5nIGJ1aWxkZXIgKGUuZy4gYmF0Y2hBbGwoW2JvbmQsIG5vbWluYXRlXSkgd2l0aCB0aGUgMi1hcmcgdjggYm9uZCDihpIgbm9cbiAgICAgIC8vIGNvbnRyb2xsZXIpLiBGYWxscyBiYWNrIHRvIHJlLXRocm93aW5nIHRoZSBvcmlnaW5hbCB2NyBkZWNvZGUgZXJyb3IgaWYgdGhlIHRyYW5zYWN0aW9uIGlzXG4gICAgICAvLyBub3QgYSByZWNvZ25pemVkIHY4IHN0YWtpbmcgdHJhbnNhY3Rpb24uXG4gICAgICBjb25zdCB2OEJ1aWxkZXIgPSB0aGlzLnRyeUdldFY4QnVpbGRlcihyYXdUeG4pO1xuICAgICAgaWYgKHY4QnVpbGRlcikge1xuICAgICAgICByZXR1cm4gdjhCdWlsZGVyO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBkZWNvZGVkVHhuLm1ldGhvZD8ubmFtZTtcbiAgICBpZiAobWV0aG9kTmFtZSA9PT0gSW50ZXJmYWNlLk1ldGhvZE5hbWVzLlRyYW5zZmVyV2l0aE1lbW8pIHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIEludGVyZmFjZS5UcmFuc2ZlcldpdGhNZW1vQXJncztcbiAgICAgIGlmICh1dGlscy5pc05ld01lbW9FbmNvZGluZyhhcmdzLm1lbW8pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhleFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSBNZXRob2ROYW1lcy5SZWdpc3RlckRpZFdpdGhDREQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09IE1ldGhvZE5hbWVzLlByZUFwcHJvdmVBc3NldCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJlQXBwcm92ZUFzc2V0QnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gTWV0aG9kTmFtZXMuQWRkQW5kQWZmaXJtV2l0aE1lZGlhdG9ycykge1xuICAgICAgY29uc3QgYXJncyA9IGRlY29kZWRUeG4ubWV0aG9kLmFyZ3MgYXMgQWRkQW5kQWZmaXJtV2l0aE1lZGlhdG9yc0FyZ3M7XG4gICAgICBpZiAodXRpbHMuaXNOZXdNZW1vRW5jb2RpbmcoYXJncy5pbnN0cnVjdGlvbk1lbW8pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhleFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gTWV0aG9kTmFtZXMuUmVqZWN0SW5zdHJ1Y3Rpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlamVjdEluc3RydWN0aW9uQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ2JvbmRFeHRyYScpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJvbmRFeHRyYUJ1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdiYXRjaEFsbCcpIHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIHsgY2FsbHM/OiBCYXRjaENhbGxPYmplY3RbXSB9O1xuXG4gICAgICBpZiAoYXJncy5jYWxscyAmJiBhcmdzLmNhbGxzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBEZWNvZGUgbWV0aG9kIG5hbWVzIGZyb20gdGhlIGNhbGxzIHVzaW5nIHV0aWxzLmRlY29kZU1ldGhvZE5hbWVcbiAgICAgICAgY29uc3QgZmlyc3RDYWxsTWV0aG9kID0gdXRpbHMuZGVjb2RlTWV0aG9kTmFtZShhcmdzLmNhbGxzWzBdLCByZWdpc3RyeSk7XG4gICAgICAgIGNvbnN0IHNlY29uZENhbGxNZXRob2QgPSB1dGlscy5kZWNvZGVNZXRob2ROYW1lKGFyZ3MuY2FsbHNbMV0sIHJlZ2lzdHJ5KTtcblxuICAgICAgICAvLyBDaGVjayBmb3IgYmF0Y2ggc3Rha2luZyBwYXR0ZXJuOiBib25kICsgbm9taW5hdGVcbiAgICAgICAgaWYgKGZpcnN0Q2FsbE1ldGhvZCA9PT0gJ2JvbmQnICYmIHNlY29uZENhbGxNZXRob2QgPT09ICdub21pbmF0ZScpIHtcbiAgICAgICAgICAvLyB2OCBkcm9wcGVkIHRoZSBjb250cm9sbGVyIGxlZyBvZiBgc3Rha2luZy5ib25kYCAoYm9uZChjb250cm9sbGVyLCB2YWx1ZSwgcGF5ZWUpIOKGklxuICAgICAgICAgIC8vIGJvbmQodmFsdWUsIHBheWVlKSkuIFdoZW4gdGhlIHRyYW5zYWN0aW9uIHdhcyBkZWNvZGVkIGFnYWluc3QgdjggbWF0ZXJpYWwgdGhlIGJvbmQgY2FsbFxuICAgICAgICAgIC8vIGNhcnJpZXMgbm8gYGNvbnRyb2xsZXJgLCBzbyByb3V0ZSBpdCB0byB0aGUgdjggYmF0Y2ggc3Rha2luZyBidWlsZGVyIOKAlCB0aGUgdjdcbiAgICAgICAgICAvLyBCYXRjaFN0YWtpbmdCdWlsZGVyIHdvdWxkIG90aGVyd2lzZSBjcmFzaCByZWFkaW5nIGBhcmdzLmNvbnRyb2xsZXIuaWRgLiBUaGlzIHJ1bnMgb24gdGhlXG4gICAgICAgICAgLy8gZGVjb2RlLXN1Y2Nlc3MgcGF0aCBiZWNhdXNlLCB1bmxpa2UgdjggdHJhbnNmZXJzLCB2OCBzdGFraW5nIGJhdGNoQWxsIGNhbiBkZWNvZGUgd2l0aG91dFxuICAgICAgICAgIC8vIHRocm93aW5nLCBzbyB0cnlHZXRWOEJ1aWxkZXIgbmV2ZXIgZmlyZXMuIFNlZSBTSS05ODEuXG4gICAgICAgICAgY29uc3QgYm9uZEFyZ3MgPSBhcmdzLmNhbGxzWzBdLmFyZ3MgYXMgeyBjb250cm9sbGVyPzogdW5rbm93biB9O1xuICAgICAgICAgIGlmIChib25kQXJncy5jb250cm9sbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCYXRjaEJ1aWxkZXIoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBmb3IgYmF0Y2ggdW5zdGFraW5nIHBhdHRlcm46IGNoaWxsICsgdW5ib25kXG4gICAgICAgIGlmIChmaXJzdENhbGxNZXRob2QgPT09ICdjaGlsbCcgJiYgc2Vjb25kQ2FsbE1ldGhvZCA9PT0gJ3VuYm9uZCcpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCYXRjaFVuc3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRmFsbCBiYWNrIHRvIGdlbmVyYWwgYmF0Y2ggYnVpbGRlciBmb3Igb3RoZXIgYmF0Y2hBbGwgY2FzZXNcbiAgICAgIHJldHVybiB0aGlzLmdldEJhdGNoQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ2JhdGNoJykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QmF0Y2hCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSAnYm9uZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJhdGNoQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ25vbWluYXRlJykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Tm9taW5hdGVCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSAndW5ib25kJykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VW5ib25kQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ3dpdGhkcmF3VW5ib25kZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcigpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gY2Fubm90IGJlIHBhcnNlZCBvciBoYXMgYW4gdW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gZGVjb2RlIGEgdHJhbnNhY3Rpb24gYWdhaW5zdCB2OCBjaGFpbiBtZXRhZGF0YSBhbmQgcmV0dXJuIHRoZSBtYXRjaGluZyB2OCBzdGFraW5nXG4gICAqIGJ1aWxkZXIuIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGNhbm5vdCBiZSBkZWNvZGVkIHdpdGggdjggbWF0ZXJpYWwgb3IgaXMgbm90IGFcbiAgICogcmVjb2duaXplZCB2OCBzdGFraW5nIHRyYW5zYWN0aW9uLCBzbyB0aGUgY2FsbGVyIGNhbiBzdXJmYWNlIHRoZSBvcmlnaW5hbCB2NyBkZWNvZGUgZXJyb3IuXG4gICAqL1xuICBwcml2YXRlIHRyeUdldFY4QnVpbGRlcihyYXdUeG46IHN0cmluZyk6IFRyYW5zYWN0aW9uQnVpbGRlcjxUeE1ldGhvZCwgU3VwcG9ydGVkVHJhbnNhY3Rpb24+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB2OE1hdGVyaWFsID0gdXRpbHMuZ2V0VjhNYXRlcmlhbCh0aGlzLl9jb2luQ29uZmlnLm5ldHdvcmsudHlwZSk7XG4gICAgY29uc3QgcmVnaXN0cnkgPSBTaW5nbGV0b25SZWdpc3RyeS5nZXRJbnN0YW5jZSh2OE1hdGVyaWFsKTtcbiAgICBsZXQgZGVjb2RlZFR4bjtcbiAgICB0cnkge1xuICAgICAgZGVjb2RlZFR4biA9IGRlY29kZShyYXdUeG4sIHtcbiAgICAgICAgbWV0YWRhdGFScGM6IHY4TWF0ZXJpYWwubWV0YWRhdGEsXG4gICAgICAgIHJlZ2lzdHJ5OiByZWdpc3RyeSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IGRlY29kZWRUeG4ubWV0aG9kPy5uYW1lO1xuICAgIGlmIChtZXRob2ROYW1lID09PSBJbnRlcmZhY2UuTWV0aG9kTmFtZXMuVHJhbnNmZXJXaXRoTWVtbykge1xuICAgICAgY29uc3QgYXJncyA9IGRlY29kZWRUeG4ubWV0aG9kLmFyZ3MgYXMgSW50ZXJmYWNlLlRyYW5zZmVyV2l0aE1lbW9BcmdzO1xuICAgICAgaWYgKHV0aWxzLmlzTmV3TWVtb0VuY29kaW5nKGFyZ3MubWVtbykpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VjhIZXhUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFY4VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSBNZXRob2ROYW1lcy5BZGRBbmRBZmZpcm1XaXRoTWVkaWF0b3JzKSB7XG4gICAgICBjb25zdCBhcmdzID0gZGVjb2RlZFR4bi5tZXRob2QuYXJncyBhcyBBZGRBbmRBZmZpcm1XaXRoTWVkaWF0b3JzQXJncyB8IFY4QWRkQW5kQWZmaXJtV2l0aE1lZGlhdG9yc0FyZ3M7XG4gICAgICBpZiAodXRpbHMuaXNOZXdNZW1vRW5jb2RpbmcoYXJncy5pbnN0cnVjdGlvbk1lbW8pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFY4SGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09IE1ldGhvZE5hbWVzLlJlZ2lzdGVyRGlkV2l0aENERCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VjhSZWdpc3RlckRpZFdpdGhDRERCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSBNZXRob2ROYW1lcy5SZWdpc3RlckRpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VjhSZWdpc3RlckRpZEJ1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09IE1ldGhvZE5hbWVzLlByZUFwcHJvdmVBc3NldCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VjhQcmVBcHByb3ZlQXNzZXRCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSAnYmF0Y2hBbGwnKSB7XG4gICAgICBjb25zdCBhcmdzID0gZGVjb2RlZFR4bi5tZXRob2QuYXJncyBhcyB7IGNhbGxzPzogQmF0Y2hDYWxsT2JqZWN0W10gfTtcblxuICAgICAgaWYgKGFyZ3MuY2FsbHMgJiYgYXJncy5jYWxscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgZmlyc3RDYWxsTWV0aG9kID0gdXRpbHMuZGVjb2RlTWV0aG9kTmFtZShhcmdzLmNhbGxzWzBdLCByZWdpc3RyeSk7XG4gICAgICAgIGNvbnN0IHNlY29uZENhbGxNZXRob2QgPSB1dGlscy5kZWNvZGVNZXRob2ROYW1lKGFyZ3MuY2FsbHNbMV0sIHJlZ2lzdHJ5KTtcblxuICAgICAgICAvLyB2OCBiYXRjaCBzdGFraW5nIHBhdHRlcm46IGJvbmQgKDItYXJnLCBubyBjb250cm9sbGVyKSArIG5vbWluYXRlXG4gICAgICAgIGlmIChmaXJzdENhbGxNZXRob2QgPT09ICdib25kJyAmJiBzZWNvbmRDYWxsTWV0aG9kID09PSAnbm9taW5hdGUnKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VjhCYXRjaFN0YWtpbmdCdWlsZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdjggYmF0Y2ggdW5zdGFraW5nIHBhdHRlcm46IGNoaWxsICsgdW5ib25kXG4gICAgICAgIGlmIChmaXJzdENhbGxNZXRob2QgPT09ICdjaGlsbCcgJiYgc2Vjb25kQ2FsbE1ldGhvZCA9PT0gJ3VuYm9uZCcpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWOEJhdGNoVW5zdGFraW5nQnVpbGRlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdib25kRXh0cmEnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRWOEJvbmRFeHRyYUJ1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdub21pbmF0ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFY4Tm9taW5hdGVCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSAndW5ib25kJykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VjhVbmJvbmRCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSAnd2l0aGRyYXdVbmJvbmRlZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFY4V2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBMEY7QUFFMUYsc0VBQXVEO0FBQ3ZELHVEQUFvRDtBQUNwRCw2REFBMEQ7QUFDMUQsMkVBQXdFO0FBQ3hFLHlEQUFzRDtBQUN0RCwrREFBNEQ7QUFDNUQsbUVBQWdFO0FBQ2hFLG1EQUFnRDtBQUNoRCx1RUFBb0U7QUFDcEUsb0RBQTRCO0FBQzVCLHlCQUFzRTtBQUN0RSxtQ0FNaUI7QUFHakIscUVBQWtFO0FBQ2xFLGlFQUE4RDtBQUM5RCx1RUFBb0U7QUFDcEUseUVBQXNFO0FBQ3RFLHVEQUFvRDtBQUNwRCwyREFBd0Q7QUFDeEQsaUVBQThEO0FBQzlELCtFQUE0RTtBQUM1RSxpRUFBOEQ7QUFDOUQscUVBQWtFO0FBQ2xFLDJFQUF3RTtBQUN4RSx5RUFBc0U7QUFDdEUsbUVBQWdFO0FBQ2hFLDZEQUEwRDtBQUMxRCx1REFBb0Q7QUFDcEQsdUVBQW9FO0FBQ3BFLDJFQUF3RTtBQUN4RSwyREFBd0Q7QUFJeEQsTUFBYSx5QkFBMEIsU0FBUSx3Q0FBNkI7SUFHMUUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSx1Q0FBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENB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QUksZUFBZSxLQUFLLE1BQU0sSUFBSSxnQkFBZ0IsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDbEUsT0FBTyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFDekMsQ0FBQztnQkFDRCw2Q0FBNkM7Z0JBQzdDLElBQUksZUFBZSxLQUFLLE9BQU8sSUFBSSxnQkFBZ0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDakUsT0FBTyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztnQkFDM0MsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3pDLENBQUM7YUFBTSxJQUFJLFVBQVUsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUN0QyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3JDLENBQUM7YUFBTSxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ25DLENBQUM7YUFBTSxJQUFJLFVBQVUsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO1lBQzdDLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDN0MsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQTlSRCw4REE4UkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLXBvbGthZG90JztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IEhleFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vaGV4VHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXIgfSBmcm9tICcuL3JlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXInO1xuaW1wb3J0IHsgQm9uZEV4dHJhQnVpbGRlciB9IGZyb20gJy4vYm9uZEV4dHJhQnVpbGRlcic7XG5pbXBvcnQgeyBCYXRjaFN0YWtpbmdCdWlsZGVyIH0gZnJvbSAnLi9iYXRjaFN0YWtpbmdCdWlsZGVyJztcbmltcG9ydCB7IEJhdGNoVW5zdGFraW5nQnVpbGRlciB9IGZyb20gJy4vYmF0Y2hVbnN0YWtpbmdCdWlsZGVyJztcbmltcG9ydCB7IFVuYm9uZEJ1aWxkZXIgfSBmcm9tICcuL3VuYm9uZEJ1aWxkZXInO1xuaW1wb3J0IHsgV2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIgfSBmcm9tICcuL3dpdGhkcmF3VW5ib25kZWRCdWlsZGVyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEludGVyZmFjZSwgU2luZ2xldG9uUmVnaXN0cnksIFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vJztcbmltcG9ydCB7XG4gIFR4TWV0aG9kLFxuICBCYXRjaENhbGxPYmplY3QsXG4gIE1ldGhvZE5hbWVzLFxuICBBZGRBbmRBZmZpcm1XaXRoTWVkaWF0b3JzQXJncyxcbiAgVjhBZGRBbmRBZmZpcm1XaXRoTWVkaWF0b3JzQXJncyxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiBhcyBCYXNlVHJhbnNhY3Rpb24gfSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1zdWJzdHJhdGUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gYXMgUG9seXhUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgUHJlQXBwcm92ZUFzc2V0QnVpbGRlciB9IGZyb20gJy4vcHJlQXBwcm92ZUFzc2V0QnVpbGRlcic7XG5pbXBvcnQgeyBUb2tlblRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdG9rZW5UcmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgSGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL2hleFRva2VuVHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IFJlamVjdEluc3RydWN0aW9uQnVpbGRlciB9IGZyb20gJy4vcmVqZWN0SW5zdHJ1Y3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IE5vbWluYXRlQnVpbGRlciB9IGZyb20gJy4vbm9taW5hdGVCdWlsZGVyJztcbmltcG9ydCB7IFY4VHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi92OFRyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQgeyBWOEhleFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdjhIZXhUcmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgVjhSZWdpc3RlckRpZFdpdGhDRERCdWlsZGVyIH0gZnJvbSAnLi92OFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXInO1xuaW1wb3J0IHsgVjhSZWdpc3RlckRpZEJ1aWxkZXIgfSBmcm9tICcuL3Y4UmVnaXN0ZXJEaWRCdWlsZGVyJztcbmltcG9ydCB7IFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3Y4VG9rZW5UcmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgVjhIZXhUb2tlblRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdjhIZXhUb2tlblRyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQgeyBWOFByZUFwcHJvdmVBc3NldEJ1aWxkZXIgfSBmcm9tICcuL3Y4UHJlQXBwcm92ZUFzc2V0QnVpbGRlcic7XG5pbXBvcnQgeyBWOEJhdGNoU3Rha2luZ0J1aWxkZXIgfSBmcm9tICcuL3Y4QmF0Y2hTdGFraW5nQnVpbGRlcic7XG5pbXBvcnQgeyBWOEJvbmRFeHRyYUJ1aWxkZXIgfSBmcm9tICcuL3Y4Qm9uZEV4dHJhQnVpbGRlcic7XG5pbXBvcnQgeyBWOFVuYm9uZEJ1aWxkZXIgfSBmcm9tICcuL3Y4VW5ib25kQnVpbGRlcic7XG5pbXBvcnQgeyBWOEJhdGNoVW5zdGFraW5nQnVpbGRlciB9IGZyb20gJy4vdjhCYXRjaFVuc3Rha2luZ0J1aWxkZXInO1xuaW1wb3J0IHsgVjhXaXRoZHJhd1VuYm9uZGVkQnVpbGRlciB9IGZyb20gJy4vdjhXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcic7XG5pbXBvcnQgeyBWOE5vbWluYXRlQnVpbGRlciB9IGZyb20gJy4vdjhOb21pbmF0ZUJ1aWxkZXInO1xuXG5leHBvcnQgdHlwZSBTdXBwb3J0ZWRUcmFuc2FjdGlvbiA9IEJhc2VUcmFuc2FjdGlvbiB8IFBvbHl4VHJhbnNhY3Rpb247XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICBwcm90ZWN0ZWQgX21hdGVyaWFsOiBJbnRlcmZhY2UuTWF0ZXJpYWw7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX21hdGVyaWFsID0gdXRpbHMuZ2V0TWF0ZXJpYWwoX2NvaW5Db25maWcubmV0d29yay50eXBlKTtcbiAgfVxuXG4gIGdldFRyYW5zZmVyQnVpbGRlcigpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpLm1hdGVyaWFsKHRoaXMuX21hdGVyaWFsKTtcbiAgfVxuXG4gIGdldEhleFRyYW5zZmVyQnVpbGRlcigpOiBIZXhUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgSGV4VHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpLm1hdGVyaWFsKHRoaXMuX21hdGVyaWFsKTtcbiAgfVxuXG4gIGdldFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXIoKTogUmVnaXN0ZXJEaWRXaXRoQ0REQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBSZWdpc3RlckRpZFdpdGhDRERCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpLm1hdGVyaWFsKHRoaXMuX21hdGVyaWFsKTtcbiAgfVxuXG4gIGdldFByZUFwcHJvdmVBc3NldEJ1aWxkZXIoKTogUHJlQXBwcm92ZUFzc2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBQcmVBcHByb3ZlQXNzZXRCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpLm1hdGVyaWFsKHRoaXMuX21hdGVyaWFsKTtcbiAgfVxuXG4gIGdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCk6IFRva2VuVHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFRva2VuVHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpLm1hdGVyaWFsKHRoaXMuX21hdGVyaWFsKTtcbiAgfVxuXG4gIGdldEhleFRva2VuVHJhbnNmZXJCdWlsZGVyKCk6IEhleFRva2VuVHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEhleFRva2VuVHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpLm1hdGVyaWFsKHRoaXMuX21hdGVyaWFsKTtcbiAgfVxuXG4gIGdldFJlamVjdEluc3RydWN0aW9uQnVpbGRlcigpOiBSZWplY3RJbnN0cnVjdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgUmVqZWN0SW5zdHJ1Y3Rpb25CdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpLm1hdGVyaWFsKHRoaXMuX21hdGVyaWFsKTtcbiAgfVxuXG4gIGdldEJvbmRFeHRyYUJ1aWxkZXIoKTogQm9uZEV4dHJhQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBCb25kRXh0cmFCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpLm1hdGVyaWFsKHRoaXMuX21hdGVyaWFsKTtcbiAgfVxuXG4gIGdldEJhdGNoQnVpbGRlcigpOiBCYXRjaFN0YWtpbmdCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEJhdGNoU3Rha2luZ0J1aWxkZXIodGhpcy5fY29pbkNvbmZpZykubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpO1xuICB9XG5cbiAgZ2V0QmF0Y2hVbnN0YWtpbmdCdWlsZGVyKCk6IEJhdGNoVW5zdGFraW5nQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBCYXRjaFVuc3Rha2luZ0J1aWxkZXIodGhpcy5fY29pbkNvbmZpZykubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpO1xuICB9XG5cbiAgZ2V0VW5ib25kQnVpbGRlcigpOiBVbmJvbmRCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFVuYm9uZEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpO1xuICB9XG5cbiAgZ2V0V2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIoKTogV2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgV2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpO1xuICB9XG5cbiAgZ2V0Tm9taW5hdGVCdWlsZGVyKCk6IE5vbWluYXRlQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBOb21pbmF0ZUJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpO1xuICB9XG5cbiAgZ2V0VjhUcmFuc2ZlckJ1aWxkZXIoKTogVjhUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVjhUcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXRWOEhleFRyYW5zZmVyQnVpbGRlcigpOiBWOEhleFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWOEhleFRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldFY4UmVnaXN0ZXJEaWRXaXRoQ0REQnVpbGRlcigpOiBWOFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVjhSZWdpc3RlckRpZFdpdGhDRERCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0VjhSZWdpc3RlckRpZEJ1aWxkZXIoKTogVjhSZWdpc3RlckRpZEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVjhSZWdpc3RlckRpZEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXRWOFRva2VuVHJhbnNmZXJCdWlsZGVyKCk6IFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVjhUb2tlblRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldFY4SGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTogVjhIZXhUb2tlblRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWOEhleFRva2VuVHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0VjhQcmVBcHByb3ZlQXNzZXRCdWlsZGVyKCk6IFY4UHJlQXBwcm92ZUFzc2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWOFByZUFwcHJvdmVBc3NldEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTogVjhCYXRjaFN0YWtpbmdCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFY4QmF0Y2hTdGFraW5nQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldFY4Qm9uZEV4dHJhQnVpbGRlcigpOiBWOEJvbmRFeHRyYUJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVjhCb25kRXh0cmFCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0VjhVbmJvbmRCdWlsZGVyKCk6IFY4VW5ib25kQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWOFVuYm9uZEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXRWOEJhdGNoVW5zdGFraW5nQnVpbGRlcigpOiBWOEJhdGNoVW5zdGFraW5nQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWOEJhdGNoVW5zdGFraW5nQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldFY4V2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIoKTogVjhXaXRoZHJhd1VuYm9uZGVkQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWOFdpdGhkcmF3VW5ib25kZWRCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0VjhOb21pbmF0ZUJ1aWxkZXIoKTogVjhOb21pbmF0ZUJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVjhOb21pbmF0ZUJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoYHdhbGxldEluaXRpYWxpemF0aW9uIGZvciAke3RoaXMuX2NvaW5Db25maWcubmFtZX0gbm90IGltcGxlbWVudGVkYCk7XG4gIH1cblxuICBmcm9tKHJhd1R4bjogc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyPFR4TWV0aG9kLCBTdXBwb3J0ZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSB0aGlzLmdldEJ1aWxkZXIocmF3VHhuKTtcbiAgICBidWlsZGVyLmZyb20ocmF3VHhuKTtcbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfVxuXG4gIG1hdGVyaWFsKG1hdGVyaWFsOiBJbnRlcmZhY2UuTWF0ZXJpYWwpOiB0aGlzIHtcbiAgICB0aGlzLl9tYXRlcmlhbCA9IG1hdGVyaWFsO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWlsZGVyKHJhd1R4bjogc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyPFR4TWV0aG9kLCBTdXBwb3J0ZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gU2luZ2xldG9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UodGhpcy5fbWF0ZXJpYWwpO1xuICAgIGxldCBkZWNvZGVkVHhuO1xuICAgIHRyeSB7XG4gICAgICBkZWNvZGVkVHhuID0gZGVjb2RlKHJhd1R4biwge1xuICAgICAgICBtZXRhZGF0YVJwYzogdGhpcy5fbWF0ZXJpYWwubWV0YWRhdGEsXG4gICAgICAgIHJlZ2lzdHJ5OiByZWdpc3RyeSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gdjgtZW5jb2RlZCB0cmFuc2FjdGlvbnMgdXNlIGRpZmZlcmVudCBjaGFpbiBtZXRhZGF0YSBhbmQgc2lnbmVkIGV4dGVuc2lvbnMsIHNvIHRoZXlcbiAgICAgIC8vIGNhbm5vdCBiZSBkZWNvZGVkIHdpdGggdjcgbWF0ZXJpYWwuIFJldHJ5IGFnYWluc3QgdjggbWF0ZXJpYWwgYW5kIHJvdXRlIHRvIHRoZSBtYXRjaGluZ1xuICAgICAgLy8gdjggc3Rha2luZyBidWlsZGVyIChlLmcuIGJhdGNoQWxsKFtib25kLCBub21pbmF0ZV0pIHdpdGggdGhlIDItYXJnIHY4IGJvbmQg4oaSIG5vXG4gICAgICAvLyBjb250cm9sbGVyKS4gRmFsbHMgYmFjayB0byByZS10aHJvd2luZyB0aGUgb3JpZ2luYWwgdjcgZGVjb2RlIGVycm9yIGlmIHRoZSB0cmFuc2FjdGlvbiBpc1xuICAgICAgLy8gbm90IGEgcmVjb2duaXplZCB2OCBzdGFraW5nIHRyYW5zYWN0aW9uLlxuICAgICAgY29uc3QgdjhCdWlsZGVyID0gdGhpcy50cnlHZXRWOEJ1aWxkZXIocmF3VHhuKTtcbiAgICAgIGlmICh2OEJ1aWxkZXIpIHtcbiAgICAgICAgcmV0dXJuIHY4QnVpbGRlcjtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRob2ROYW1lID0gZGVjb2RlZFR4bi5tZXRob2Q/Lm5hbWU7XG4gICAgaWYgKG1ldGhvZE5hbWUgPT09IEludGVyZmFjZS5NZXRob2ROYW1lcy5UcmFuc2ZlcldpdGhNZW1vKSB7XG4gICAgICBjb25zdCBhcmdzID0gZGVjb2RlZFR4bi5tZXRob2QuYXJncyBhcyBJbnRlcmZhY2UuVHJhbnNmZXJXaXRoTWVtb0FyZ3M7XG4gICAgICBpZiAodXRpbHMuaXNOZXdNZW1vRW5jb2RpbmcoYXJncy5tZW1vKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIZXhUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gTWV0aG9kTmFtZXMuUmVnaXN0ZXJEaWRXaXRoQ0REKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZWdpc3RlckRpZFdpdGhDRERCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSBNZXRob2ROYW1lcy5QcmVBcHByb3ZlQXNzZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFByZUFwcHJvdmVBc3NldEJ1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09IE1ldGhvZE5hbWVzLkFkZEFuZEFmZmlybVdpdGhNZWRpYXRvcnMpIHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIEFkZEFuZEFmZmlybVdpdGhNZWRpYXRvcnNBcmdzO1xuICAgICAgaWYgKHV0aWxzLmlzTmV3TWVtb0VuY29kaW5nKGFyZ3MuaW5zdHJ1Y3Rpb25NZW1vKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIZXhUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09IE1ldGhvZE5hbWVzLlJlamVjdEluc3RydWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZWplY3RJbnN0cnVjdGlvbkJ1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdib25kRXh0cmEnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCb25kRXh0cmFCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSAnYmF0Y2hBbGwnKSB7XG4gICAgICBjb25zdCBhcmdzID0gZGVjb2RlZFR4bi5tZXRob2QuYXJncyBhcyB7IGNhbGxzPzogQmF0Y2hDYWxsT2JqZWN0W10gfTtcblxuICAgICAgaWYgKGFyZ3MuY2FsbHMgJiYgYXJncy5jYWxscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgLy8gRGVjb2RlIG1ldGhvZCBuYW1lcyBmcm9tIHRoZSBjYWxscyB1c2luZyB1dGlscy5kZWNvZGVNZXRob2ROYW1lXG4gICAgICAgIGNvbnN0IGZpcnN0Q2FsbE1ldGhvZCA9IHV0aWxzLmRlY29kZU1ldGhvZE5hbWUoYXJncy5jYWxsc1swXSwgcmVnaXN0cnkpO1xuICAgICAgICBjb25zdCBzZWNvbmRDYWxsTWV0aG9kID0gdXRpbHMuZGVjb2RlTWV0aG9kTmFtZShhcmdzLmNhbGxzWzFdLCByZWdpc3RyeSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGJhdGNoIHN0YWtpbmcgcGF0dGVybjogYm9uZCArIG5vbWluYXRlXG4gICAgICAgIGlmIChmaXJzdENhbGxNZXRob2QgPT09ICdib25kJyAmJiBzZWNvbmRDYWxsTWV0aG9kID09PSAnbm9taW5hdGUnKSB7XG4gICAgICAgICAgLy8gdjggZHJvcHBlZCB0aGUgY29udHJvbGxlciBsZWcgb2YgYHN0YWtpbmcuYm9uZGAgKGJvbmQoY29udHJvbGxlciwgdmFsdWUsIHBheWVlKSDihpJcbiAgICAgICAgICAvLyBib25kKHZhbHVlLCBwYXllZSkpLiBXaGVuIHRoZSB0cmFuc2FjdGlvbiB3YXMgZGVjb2RlZCBhZ2FpbnN0IHY4IG1hdGVyaWFsIHRoZSBib25kIGNhbGxcbiAgICAgICAgICAvLyBjYXJyaWVzIG5vIGBjb250cm9sbGVyYCwgc28gcm91dGUgaXQgdG8gdGhlIHY4IGJhdGNoIHN0YWtpbmcgYnVpbGRlciDigJQgdGhlIHY3XG4gICAgICAgICAgLy8gQmF0Y2hTdGFraW5nQnVpbGRlciB3b3VsZCBvdGhlcndpc2UgY3Jhc2ggcmVhZGluZyBgYXJncy5jb250cm9sbGVyLmlkYC4gVGhpcyBydW5zIG9uIHRoZVxuICAgICAgICAgIC8vIGRlY29kZS1zdWNjZXNzIHBhdGggYmVjYXVzZSwgdW5saWtlIHY4IHRyYW5zZmVycywgdjggc3Rha2luZyBiYXRjaEFsbCBjYW4gZGVjb2RlIHdpdGhvdXRcbiAgICAgICAgICAvLyB0aHJvd2luZywgc28gdHJ5R2V0VjhCdWlsZGVyIG5ldmVyIGZpcmVzLiBTZWUgU0ktOTgxLlxuICAgICAgICAgIGNvbnN0IGJvbmRBcmdzID0gYXJncy5jYWxsc1swXS5hcmdzIGFzIHsgY29udHJvbGxlcj86IHVua25vd24gfTtcbiAgICAgICAgICBpZiAoYm9uZEFyZ3MuY29udHJvbGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBGb3J3YXJkIHRoZSBmYWN0b3J5J3MgbWF0ZXJpYWwgKHNldCBieSB0aGUgY2FsbGVyLCBlLmcuIHdhbGxldC1wbGF0Zm9ybSdzXG4gICAgICAgICAgICAvLyBnZXRTaWduZWRUeCB2aWEgYC5tYXRlcmlhbChsaXZlTWF0ZXJpYWwpLmZyb20oLi4uKWApLiBVbmxpa2UgdGhlIHY3IGdldHRlcnMsXG4gICAgICAgICAgICAvLyBnZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKSBkb2VzIE5PVCBmb3J3YXJkIHRoaXMuX21hdGVyaWFsIGFuZCB3b3VsZCBvdGhlcndpc2VcbiAgICAgICAgICAgIC8vIGtlZXAgdGhlIGJ1aWxkZXIncyBzdGF0aWMgZ2V0VjhNYXRlcmlhbCgpLiBPbiB0aGUgZGVjb2RlLXN1Y2Nlc3MgcGF0aCB0aGlzLl9tYXRlcmlhbFxuICAgICAgICAgICAgLy8gaXMgdGhlIG1hdGVyaWFsIHRoYXQganVzdCBkZWNvZGVkIHRoZSB0eCwgc28gaXQgaXMgdGhlIGNvcnJlY3Qgb25lIHRvIHJlYnVpbGQgd2l0aCDigJRcbiAgICAgICAgICAgIC8vIHdpdGhvdXQgdGhpcywgYSByZWJ1aWxkIHVzZXMgc3RhbGUgc3RhdGljIHNwZWNWZXJzaW9uIGFuZCB0aGUgc2lnbmFibGUgbm8gbG9uZ2VyXG4gICAgICAgICAgICAvLyBtYXRjaGVzIHRoZSBIU00tc2lnbmVkIGJ5dGVzIChJbnZhbGlkU2lnbmF0dXJlIG9uIGNvbWJpbmUpLiBTZWUgU0ktMTAzNC5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpLm1hdGVyaWFsKHRoaXMuX21hdGVyaWFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QmF0Y2hCdWlsZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGJhdGNoIHVuc3Rha2luZyBwYXR0ZXJuOiBjaGlsbCArIHVuYm9uZFxuICAgICAgICBpZiAoZmlyc3RDYWxsTWV0aG9kID09PSAnY2hpbGwnICYmIHNlY29uZENhbGxNZXRob2QgPT09ICd1bmJvbmQnKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QmF0Y2hVbnN0YWtpbmdCdWlsZGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEZhbGwgYmFjayB0byBnZW5lcmFsIGJhdGNoIGJ1aWxkZXIgZm9yIG90aGVyIGJhdGNoQWxsIGNhc2VzXG4gICAgICByZXR1cm4gdGhpcy5nZXRCYXRjaEJ1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdiYXRjaCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJhdGNoQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ2JvbmQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCYXRjaEJ1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdub21pbmF0ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE5vbWluYXRlQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ3VuYm9uZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFVuYm9uZEJ1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICd3aXRoZHJhd1VuYm9uZGVkJykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0V2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIoKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIGNhbm5vdCBiZSBwYXJzZWQgb3IgaGFzIGFuIHVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0IHRvIGRlY29kZSBhIHRyYW5zYWN0aW9uIGFnYWluc3QgdjggY2hhaW4gbWV0YWRhdGEgYW5kIHJldHVybiB0aGUgbWF0Y2hpbmcgdjggc3Rha2luZ1xuICAgKiBidWlsZGVyLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSB0cmFuc2FjdGlvbiBjYW5ub3QgYmUgZGVjb2RlZCB3aXRoIHY4IG1hdGVyaWFsIG9yIGlzIG5vdCBhXG4gICAqIHJlY29nbml6ZWQgdjggc3Rha2luZyB0cmFuc2FjdGlvbiwgc28gdGhlIGNhbGxlciBjYW4gc3VyZmFjZSB0aGUgb3JpZ2luYWwgdjcgZGVjb2RlIGVycm9yLlxuICAgKi9cbiAgcHJpdmF0ZSB0cnlHZXRWOEJ1aWxkZXIocmF3VHhuOiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXI8VHhNZXRob2QsIFN1cHBvcnRlZFRyYW5zYWN0aW9uPiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdjhNYXRlcmlhbCA9IHV0aWxzLmdldFY4TWF0ZXJpYWwodGhpcy5fY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUpO1xuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gU2luZ2xldG9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UodjhNYXRlcmlhbCk7XG4gICAgbGV0IGRlY29kZWRUeG47XG4gICAgdHJ5IHtcbiAgICAgIGRlY29kZWRUeG4gPSBkZWNvZGUocmF3VHhuLCB7XG4gICAgICAgIG1ldGFkYXRhUnBjOiB2OE1hdGVyaWFsLm1ldGFkYXRhLFxuICAgICAgICByZWdpc3RyeTogcmVnaXN0cnksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBkZWNvZGVkVHhuLm1ldGhvZD8ubmFtZTtcbiAgICBpZiAobWV0aG9kTmFtZSA9PT0gSW50ZXJmYWNlLk1ldGhvZE5hbWVzLlRyYW5zZmVyV2l0aE1lbW8pIHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIEludGVyZmFjZS5UcmFuc2ZlcldpdGhNZW1vQXJncztcbiAgICAgIGlmICh1dGlscy5pc05ld01lbW9FbmNvZGluZyhhcmdzLm1lbW8pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFY4SGV4VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRWOFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gTWV0aG9kTmFtZXMuQWRkQW5kQWZmaXJtV2l0aE1lZGlhdG9ycykge1xuICAgICAgY29uc3QgYXJncyA9IGRlY29kZWRUeG4ubWV0aG9kLmFyZ3MgYXMgQWRkQW5kQWZmaXJtV2l0aE1lZGlhdG9yc0FyZ3MgfCBWOEFkZEFuZEFmZmlybVdpdGhNZWRpYXRvcnNBcmdzO1xuICAgICAgaWYgKHV0aWxzLmlzTmV3TWVtb0VuY29kaW5nKGFyZ3MuaW5zdHJ1Y3Rpb25NZW1vKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRWOEhleFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRWOFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSBNZXRob2ROYW1lcy5SZWdpc3RlckRpZFdpdGhDREQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFY4UmVnaXN0ZXJEaWRXaXRoQ0REQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gTWV0aG9kTmFtZXMuUmVnaXN0ZXJEaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFY4UmVnaXN0ZXJEaWRCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSBNZXRob2ROYW1lcy5QcmVBcHByb3ZlQXNzZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFY4UHJlQXBwcm92ZUFzc2V0QnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ2JhdGNoQWxsJykge1xuICAgICAgY29uc3QgYXJncyA9IGRlY29kZWRUeG4ubWV0aG9kLmFyZ3MgYXMgeyBjYWxscz86IEJhdGNoQ2FsbE9iamVjdFtdIH07XG5cbiAgICAgIGlmIChhcmdzLmNhbGxzICYmIGFyZ3MuY2FsbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q2FsbE1ldGhvZCA9IHV0aWxzLmRlY29kZU1ldGhvZE5hbWUoYXJncy5jYWxsc1swXSwgcmVnaXN0cnkpO1xuICAgICAgICBjb25zdCBzZWNvbmRDYWxsTWV0aG9kID0gdXRpbHMuZGVjb2RlTWV0aG9kTmFtZShhcmdzLmNhbGxzWzFdLCByZWdpc3RyeSk7XG5cbiAgICAgICAgLy8gdjggYmF0Y2ggc3Rha2luZyBwYXR0ZXJuOiBib25kICgyLWFyZywgbm8gY29udHJvbGxlcikgKyBub21pbmF0ZVxuICAgICAgICBpZiAoZmlyc3RDYWxsTWV0aG9kID09PSAnYm9uZCcgJiYgc2Vjb25kQ2FsbE1ldGhvZCA9PT0gJ25vbWluYXRlJykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHY4IGJhdGNoIHVuc3Rha2luZyBwYXR0ZXJuOiBjaGlsbCArIHVuYm9uZFxuICAgICAgICBpZiAoZmlyc3RDYWxsTWV0aG9kID09PSAnY2hpbGwnICYmIHNlY29uZENhbGxNZXRob2QgPT09ICd1bmJvbmQnKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VjhCYXRjaFVuc3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VjhCYXRjaFN0YWtpbmdCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSAnYm9uZEV4dHJhJykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VjhCb25kRXh0cmFCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSAnbm9taW5hdGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRWOE5vbWluYXRlQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ3VuYm9uZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFY4VW5ib25kQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ3dpdGhkcmF3VW5ib25kZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRWOFdpdGhkcmF3VW5ib25kZWRCdWlsZGVyKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -140,6 +140,46 @@ describe('V8BatchStakingBuilder', function () {
140
140
  const builder = v8Factory.from(rawTxHex);
141
141
  should_1.default.ok(builder instanceof lib_1.V8BatchStakingBuilder);
142
142
  });
143
+ it('factory.material(liveMaterial).from(...) forwards the live material into the rebuilt v8 batch staking builder (SI-1034)', async () => {
144
+ // Reproduces the custodial staking incident: the HSM signs against LIVE chain material
145
+ // (e.g. a specVersion bump after a runtime upgrade), but wallet-platform's getSignedTx
146
+ // re-verifies by calling `factory.material(liveMaterial).from(serializedTxHex)`. On the
147
+ // decode-success path, `getBuilder()` used to return `getV8BatchStakingBuilder()` without
148
+ // forwarding `this._material`, so the rebuild silently fell back to the builder's static
149
+ // `getV8Material()` (stale specVersion) instead of the caller's live material. Because
150
+ // specVersion is embedded in the raw ExtrinsicPayload bytes that are actually signed, the
151
+ // rebuilt signable payload would then diverge from the one the HSM signed, producing
152
+ // `InvalidSignature: invalid key signature` at Trust approval.
153
+ //
154
+ // Simulate a "live" chain that has moved past the pinned static testnet v8 material by
155
+ // bumping specVersion on a copy of it.
156
+ const liveMaterial = {
157
+ ...resources_1.testnetV8Material,
158
+ specVersion: resources_1.testnetV8Material.specVersion + 10,
159
+ };
160
+ const originalTx = await new lib_1.V8BatchStakingBuilder((0, base_1.buildTestConfig)())
161
+ .material(liveMaterial)
162
+ .amount(bondAmount)
163
+ .payee('Staked')
164
+ .validators([validator])
165
+ .sender({ address: stash })
166
+ .validity({ firstValid, maxDuration: 64 })
167
+ .referenceBlock(referenceBlock)
168
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: nonce })
169
+ .build();
170
+ const rawTxHex = originalTx.toBroadcastFormat();
171
+ const originalSignablePayload = originalTx.signablePayload.toString('hex');
172
+ const rebuiltBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tpolyx')).material(liveMaterial).from(rawTxHex);
173
+ // The raw signing payload does not carry the sender address or the raw `firstValid` block
174
+ // number (only the encoded era), so — like any real caller re-verifying a decoded
175
+ // transaction — they must be supplied again before build() can run.
176
+ rebuiltBuilder.sender({ address: stash }).validity({ firstValid, maxDuration: 64 });
177
+ const rebuiltTx = await rebuiltBuilder.build();
178
+ const rebuiltSignablePayload = rebuiltTx.signablePayload.toString('hex');
179
+ // Without the SI-1034 fix, this fails: the rebuild uses the static material (specVersion
180
+ // 8000000) instead of liveMaterial (specVersion 8000010), so the payloads differ.
181
+ should_1.default.equal(rebuiltSignablePayload, originalSignablePayload);
182
+ });
143
183
  });
144
184
  });
145
185
  describe('V8 staking wrappers (smoke build)', function () {
@@ -209,4 +249,4 @@ describe('V8 staking wrappers (smoke build)', function () {
209
249
  should_1.default.equal(tx.toJson().specVersion, resources_1.testnetV8Material.specVersion);
210
250
  });
211
251
  });
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhCYXRjaFN0YWtpbmdCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci92OEJhdGNoU3Rha2luZ0J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzRUFBdUQ7QUFDdkQsaURBQTRDO0FBQzVDLG9EQUE0QjtBQUM1QiwwQ0FTMEI7QUFFMUIsbUVBQTJDO0FBQzNDLHNEQUE4RTtBQUM5RSwrQ0FBOEM7QUFDOUMsaUNBQTZEO0FBRTdELFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtJQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVuRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyx1QkFBVyxDQUFDLE9BQU8sQ0FBQztJQUVoRyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUM3QixJQUFJLDJCQUFxQixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDO1NBQ3pDLE1BQU0sQ0FBQyxVQUFVLENBQUM7U0FDbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUNmLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZCLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUMxQixRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3pDLGNBQWMsQ0FBQyxjQUFjLENBQUM7U0FDOUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRW5FLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1FBQzNCLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSwyQkFBcUIsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQyxDQUFDO1lBQzdELE1BQU0sUUFBUSxHQUFJLE9BQWUsQ0FBQyxTQUFTLENBQUM7WUFDNUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSw2QkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlELGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1lBQzNELE1BQU0sT0FBTyxHQUFHLElBQUksMkJBQXFCLENBQUMsSUFBQSx5QkFBa0IsR0FBRSxDQUFDLENBQUM7WUFDaEUsTUFBTSxRQUFRLEdBQUksT0FBZSxDQUFDLFNBQVMsQ0FBQztZQUM1QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLDZCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsNkJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLCtFQUErRSxFQUFFLEdBQUcsRUFBRTtZQUN2RixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNuRCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFlBQVksMkJBQXFCLENBQUMsQ0FBQztZQUNwRCxnQkFBTSxDQUFDLEtBQUssQ0FBRSxPQUFlLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSw2QkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtRQUNqQyxFQUFFLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFO1lBQy9DLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ25ELGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQVEsT0FBZSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM5RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFRLE9BQWUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUUsR0FBRyxFQUFFO1lBQzFELElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2pELE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLGdEQUFnRCxDQUFDLENBQUM7WUFFcEcsT0FBTyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLGdEQUFnRCxDQUFDLENBQUM7WUFFcEcsT0FBTyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDbkUsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtRQUNqQyxFQUFFLENBQUMseUVBQXlFLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkYsTUFBTSxFQUFFLEdBQUcsTUFBTSxpQkFBaUIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9FQUFvRSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2xGLE1BQU0sRUFBRSxHQUFHLE1BQU0saUJBQWlCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QyxNQUFNLFNBQVMsR0FBSSxFQUFVLENBQUMscUJBQXFCLENBQUMsTUFBZ0IsQ0FBQztZQUNyRSwwRkFBMEY7WUFDMUYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHVCQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtRkFBbUYsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNqRyxNQUFNLEVBQUUsR0FBRyxNQUFNLGlCQUFpQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0MsTUFBTSxRQUFRLEdBQUcsZUFBSyxDQUFDLGFBQWEsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RSxNQUFNLFFBQVEsR0FBRyx1QkFBaUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBQSwyQkFBTSxFQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO2dCQUMvQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFFBQVE7Z0JBQzlCLFFBQVE7YUFDVCxDQUFDLENBQUM7WUFFSCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNoRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVqRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQTRCLENBQUM7WUFDaEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFeEMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUF3RCxDQUFDO1lBQ3BGLE1BQU0sU0FBUyxHQUFHLE9BQU8sUUFBUSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFFLFFBQVEsQ0FBQyxLQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlHLGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRTdDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN2RSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsSUFBK0IsQ0FBQztZQUNoRSxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hHLGdCQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFDMUMsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3BFLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFDcEMsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsTUFBTSxRQUFRLEdBQUcsZUFBSyxDQUFDLGFBQWEsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RSxNQUFNLFFBQVEsR0FBRyx1QkFBaUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBQSwyQkFBTSxFQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMvRixnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDbkQsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFnQixDQUFDLENBQUMsQ0FBQztRQUNoSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtRQUNwQyxFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLGlCQUFpQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRXpFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ3RELFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFMUIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM5QyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2pHLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxpQkFBaUIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLGdCQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sWUFBWSwyQkFBcUIsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFGQUFxRixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ25HLDZGQUE2RjtZQUM3Riw4RkFBOEY7WUFDOUYsc0ZBQXNGO1lBQ3RGLHdCQUF3QjtZQUN4QixNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0saUJBQWlCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekUsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLGFBQWEsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6RSxNQUFNLFNBQVMsR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUYsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFlBQVksMkJBQXFCLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsbUNBQW1DLEVBQUU7SUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbkUsTUFBTSxTQUFTLEdBQUcsdUJBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ2hELE1BQU0sTUFBTSxHQUFHLHVCQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN6QyxNQUFNLGNBQWMsR0FBRyx1QkFBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFFMUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUV6RCxFQUFFLENBQUMsNENBQTRDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDMUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDaEQsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxZQUFZLHdCQUFrQixDQUFDLENBQUM7UUFDakQsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPO2FBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQUM7YUFDbEIsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQzNCLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDaEIsY0FBYyxDQUFDLGNBQWMsQ0FBQzthQUM5QixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO2FBQzNELEtBQUssRUFBRSxDQUFDO1FBQ1gsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsRUFBRSw2QkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM3QyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFlBQVkscUJBQWUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTzthQUNyQixNQUFNLENBQUMsVUFBVSxDQUFDO2FBQ2xCLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUMzQixRQUFRLENBQUMsTUFBTSxDQUFDO2FBQ2hCLGNBQWMsQ0FBQyxjQUFjLENBQUM7YUFDOUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQzthQUMzRCxLQUFLLEVBQUUsQ0FBQztRQUNYLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsaURBQWlELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDL0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDckQsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxZQUFZLDZCQUF1QixDQUFDLENBQUM7UUFDdEQsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPO2FBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQUM7YUFDbEIsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQzNCLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDaEIsY0FBYyxDQUFDLGNBQWMsQ0FBQzthQUM5QixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO2FBQzNELEtBQUssRUFBRSxDQUFDO1FBQ1gsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsRUFBRSw2QkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNqRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUN2RCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFlBQVksK0JBQXlCLENBQUMsQ0FBQztRQUN4RCxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU87YUFDckIsYUFBYSxDQUFDLENBQUMsQ0FBQzthQUNoQixNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDM0IsUUFBUSxDQUFDLE1BQU0sQ0FBQzthQUNoQixjQUFjLENBQUMsY0FBYyxDQUFDO2FBQzlCLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7YUFDM0QsS0FBSyxFQUFFLENBQUM7UUFDWCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxFQUFFLDZCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQy9DLGdCQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sWUFBWSx1QkFBaUIsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTzthQUNyQixVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUN2QixNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDM0IsUUFBUSxDQUFDLE1BQU0sQ0FBQzthQUNoQixjQUFjLENBQUMsY0FBYyxDQUFDO2FBQzlCLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7YUFDM0QsS0FBSyxFQUFFLENBQUM7UUFDWCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxFQUFFLDZCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1wb2xrYWRvdCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSxcbiAgVjhCYXRjaFN0YWtpbmdCdWlsZGVyLFxuICBWOEJvbmRFeHRyYUJ1aWxkZXIsXG4gIFY4VW5ib25kQnVpbGRlcixcbiAgVjhCYXRjaFVuc3Rha2luZ0J1aWxkZXIsXG4gIFY4V2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIsXG4gIFY4Tm9taW5hdGVCdWlsZGVyLFxuICBTaW5nbGV0b25SZWdpc3RyeSxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBCYXRjaEFyZ3MsIE5vbWluYXRlQXJncywgVjhCb25kQXJncyB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvaWZhY2UnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgdGVzdG5ldFY4TWF0ZXJpYWwsIG1haW5uZXRWOE1hdGVyaWFsIH0gZnJvbSAnLi4vLi4vLi4vc3JjL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBzdGFraW5nVHhWOCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBidWlsZFRlc3RDb25maWcsIGJ1aWxkTWFpbm5ldENvbmZpZyB9IGZyb20gJy4vYmFzZSc7XG5cbmRlc2NyaWJlKCdWOEJhdGNoU3Rha2luZ0J1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3Rwb2x5eCcpKTtcblxuICBjb25zdCB7IHN0YXNoLCB2YWxpZGF0b3IsIGJvbmRBbW91bnQsIHJlZmVyZW5jZUJsb2NrLCBub25jZSwgZmlyc3RWYWxpZCB9ID0gc3Rha2luZ1R4Vjguc2FuZGJveDtcblxuICBjb25zdCBidWlsZFNhbmRib3hCYXRjaCA9ICgpID0+XG4gICAgbmV3IFY4QmF0Y2hTdGFraW5nQnVpbGRlcihidWlsZFRlc3RDb25maWcoKSlcbiAgICAgIC5hbW91bnQoYm9uZEFtb3VudClcbiAgICAgIC5wYXllZSgnU3Rha2VkJylcbiAgICAgIC52YWxpZGF0b3JzKFt2YWxpZGF0b3JdKVxuICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHN0YXNoIH0pXG4gICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IG5vbmNlIH0pO1xuXG4gIGRlc2NyaWJlKCd2OCBtYXRlcmlhbCcsICgpID0+IHtcbiAgICBpdCgndGVzdG5ldCBidWlsZGVyIHVzZXMgdjggc3BlY1ZlcnNpb24gYW5kIHR4VmVyc2lvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVjhCYXRjaFN0YWtpbmdCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gKGJ1aWxkZXIgYXMgYW55KS5fbWF0ZXJpYWw7XG4gICAgICBzaG91bGQuZXF1YWwobWF0ZXJpYWwuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5lcXVhbChtYXRlcmlhbC50eFZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnR4VmVyc2lvbik7XG4gICAgICBzaG91bGQuZXF1YWwobWF0ZXJpYWwuc3BlY1ZlcnNpb24sIDgwMDAwMDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ21haW5uZXQgYnVpbGRlciB1c2VzIHY4IHNwZWNWZXJzaW9uIGFuZCB0eFZlcnNpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFY4QmF0Y2hTdGFraW5nQnVpbGRlcihidWlsZE1haW5uZXRDb25maWcoKSk7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IChidWlsZGVyIGFzIGFueSkuX21hdGVyaWFsO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnNwZWNWZXJzaW9uLCBtYWlubmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZXF1YWwobWF0ZXJpYWwudHhWZXJzaW9uLCBtYWlubmV0VjhNYXRlcmlhbC50eFZlcnNpb24pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmFjdG9yeSBtZXRob2QnLCAoKSA9PiB7XG4gICAgaXQoJ2dldFY4QmF0Y2hTdGFraW5nQnVpbGRlciByZXR1cm5zIGEgVjhCYXRjaFN0YWtpbmdCdWlsZGVyIGNhcnJ5aW5nIHY4IG1hdGVyaWFsJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhCYXRjaFN0YWtpbmdCdWlsZGVyKCk7XG4gICAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4QmF0Y2hTdGFraW5nQnVpbGRlcik7XG4gICAgICBzaG91bGQuZXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fbWF0ZXJpYWwuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NldHRlciB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgbm90IGV4cG9zZSBhIGNvbnRyb2xsZXIgc2V0dGVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhCYXRjaFN0YWtpbmdCdWlsZGVyKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHlwZW9mIChidWlsZGVyIGFzIGFueSkuY29udHJvbGxlciwgJ3VuZGVmaW5lZCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR5cGVvZiAoYnVpbGRlciBhcyBhbnkpLmdldENvbnRyb2xsZXIsICd1bmRlZmluZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVxdWlyZSBib3RoIGJvbmQgYW5kIG5vbWluYXRlIG9wZXJhdGlvbnMnLCAoKSA9PiB7XG4gICAgICBsZXQgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhCYXRjaFN0YWtpbmdCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmFtb3VudChib25kQW1vdW50KS5wYXllZSgnU3Rha2VkJyk7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IGJ1aWxkZXIudGVzdFZhbGlkYXRlRmllbGRzKCksIC9tdXN0IGluY2x1ZGUgYm90aCBib25kIGFuZCBub21pbmF0ZSBvcGVyYXRpb25zLyk7XG5cbiAgICAgIGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgYnVpbGRlci52YWxpZGF0b3JzKFt2YWxpZGF0b3JdKTtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gYnVpbGRlci50ZXN0VmFsaWRhdGVGaWVsZHMoKSwgL211c3QgaW5jbHVkZSBib3RoIGJvbmQgYW5kIG5vbWluYXRlIG9wZXJhdGlvbnMvKTtcblxuICAgICAgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhCYXRjaFN0YWtpbmdCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmFtb3VudChib25kQW1vdW50KS5wYXllZSgnU3Rha2VkJykudmFsaWRhdG9ycyhbdmFsaWRhdG9yXSk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudGVzdFZhbGlkYXRlRmllbGRzKCkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGQgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ2J1aWxkcyBiYXRjaEFsbChbYm9uZCwgbm9taW5hdGVdKSB3aXRoIHY4IHNwZWNWZXJzaW9uIGFuZCBubyBjb250cm9sbGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFNhbmRib3hCYXRjaCgpLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIDgwMDAwMDApO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnR4VmVyc2lvbik7XG4gICAgfSk7XG5cbiAgICBpdCgnaW5uZXIgYm9uZCBsZWcgKyBmdWxsIGJhdGNoIG1ldGhvZCBoZXggbWF0Y2hlcyB0aGUgdGVzdG5ldCBzYW5kYm94JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFNhbmRib3hCYXRjaCgpLmJ1aWxkKCk7XG4gICAgICBjb25zdCBtZXRob2RIZXggPSAodHggYXMgYW55KS5fc3Vic3RyYXRlVHJhbnNhY3Rpb24ubWV0aG9kIGFzIHN0cmluZztcbiAgICAgIC8vIEZ1bGwgdXRpbGl0eS5iYXRjaEFsbCBtZXRob2QgaGV4IGlzIGJ5dGUtZm9yLWJ5dGUgaWRlbnRpY2FsIHRvIHRoZSBvbi1jaGFpbiBzYW5kYm94IHR4LlxuICAgICAgc2hvdWxkLmVxdWFsKG1ldGhvZEhleCwgc3Rha2luZ1R4VjguYmF0Y2guYm9uZEFuZE5vbWluYXRlLmNhbGxIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RlY29kZXMgd2l0aCB2OCBtYXRlcmlhbCB0byBib25kKHsgdmFsdWUsIHBheWVlIH0pIOKAlCBubyBjb250cm9sbGVyIOKAlCBhbmQgbm9taW5hdGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkU2FuZGJveEJhdGNoKCkuYnVpbGQoKTtcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gdXRpbHMuZ2V0VjhNYXRlcmlhbChjb2lucy5nZXQoJ3Rwb2x5eCcpLm5ldHdvcmsudHlwZSk7XG4gICAgICBjb25zdCByZWdpc3RyeSA9IFNpbmdsZXRvblJlZ2lzdHJ5LmdldEluc3RhbmNlKG1hdGVyaWFsKTtcbiAgICAgIGNvbnN0IGRlY29kZWRUeCA9IGRlY29kZSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB7XG4gICAgICAgIG1ldGFkYXRhUnBjOiBtYXRlcmlhbC5tZXRhZGF0YSxcbiAgICAgICAgcmVnaXN0cnksXG4gICAgICB9KTtcblxuICAgICAgc2hvdWxkLmVxdWFsKGRlY29kZWRUeC5tZXRob2QubmFtZSwgJ2JhdGNoQWxsJyk7XG4gICAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFR4Lm1ldGhvZC5wYWxsZXQsICd1dGlsaXR5Jyk7XG5cbiAgICAgIGNvbnN0IGJhdGNoQXJncyA9IGRlY29kZWRUeC5tZXRob2QuYXJncyBhcyB1bmtub3duIGFzIEJhdGNoQXJncztcbiAgICAgIHNob3VsZC5lcXVhbChiYXRjaEFyZ3MuY2FsbHMubGVuZ3RoLCAyKTtcblxuICAgICAgY29uc3QgZmlyc3RDYWxsID0gYmF0Y2hBcmdzLmNhbGxzWzBdO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmRlY29kZU1ldGhvZE5hbWUoZmlyc3RDYWxsLCByZWdpc3RyeSksICdib25kJyk7XG4gICAgICBjb25zdCBib25kQXJncyA9IGZpcnN0Q2FsbC5hcmdzIGFzIHVua25vd24gYXMgVjhCb25kQXJncyAmIHsgY29udHJvbGxlcj86IHVua25vd24gfTtcbiAgICAgIGNvbnN0IGJvbmRWYWx1ZSA9IHR5cGVvZiBib25kQXJncy52YWx1ZSA9PT0gJ3N0cmluZycgPyBib25kQXJncy52YWx1ZSA6IChib25kQXJncy52YWx1ZSBhcyBudW1iZXIpLnRvU3RyaW5nKCk7XG4gICAgICBzaG91bGQuZXF1YWwoYm9uZFZhbHVlLCBib25kQW1vdW50KTtcbiAgICAgIHNob3VsZC5lcXVhbChib25kQXJncy5jb250cm9sbGVyLCB1bmRlZmluZWQpO1xuXG4gICAgICBjb25zdCBzZWNvbmRDYWxsID0gYmF0Y2hBcmdzLmNhbGxzWzFdO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmRlY29kZU1ldGhvZE5hbWUoc2Vjb25kQ2FsbCwgcmVnaXN0cnkpLCAnbm9taW5hdGUnKTtcbiAgICAgIGNvbnN0IG5vbWluYXRlQXJncyA9IHNlY29uZENhbGwuYXJncyBhcyB1bmtub3duIGFzIE5vbWluYXRlQXJncztcbiAgICAgIGNvbnN0IHRhcmdldHMgPSBub21pbmF0ZUFyZ3MudGFyZ2V0cy5tYXAoKHQpID0+ICh0eXBlb2YgdCA9PT0gJ3N0cmluZycgPyB0IDogKHQgYXMgeyBpZDogc3RyaW5nIH0pLmlkKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHRhcmdldHMsIFt2YWxpZGF0b3JdKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZhbGlkYXRlRGVjb2RlZFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdhY2NlcHRzIGEgZGVjb2RlZCB2OCBiYXRjaCBib25kK25vbWluYXRlIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGJ1aWxkU2FuZGJveEJhdGNoKCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gdXRpbHMuZ2V0VjhNYXRlcmlhbChjb2lucy5nZXQoJ3Rwb2x5eCcpLm5ldHdvcmsudHlwZSk7XG4gICAgICBjb25zdCByZWdpc3RyeSA9IFNpbmdsZXRvblJlZ2lzdHJ5LmdldEluc3RhbmNlKG1hdGVyaWFsKTtcbiAgICAgIGNvbnN0IGRlY29kZWRUeCA9IGRlY29kZSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB7IG1ldGFkYXRhUnBjOiBtYXRlcmlhbC5tZXRhZGF0YSwgcmVnaXN0cnkgfSk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24oZGVjb2RlZFR4KSk7XG4gICAgfSk7XG5cbiAgICBpdCgndmFsaWRhdGVzIHY4IGJvbmQgYXJncyB3aXRob3V0IGEgY29udHJvbGxlciBmaWVsZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnRlc3RWYWxpZGF0ZUJvbmRBcmdzKHsgdmFsdWU6IGJvbmRBbW91bnQsIHBheWVlOiAnU3Rha2VkJyB9IGFzIFY4Qm9uZEFyZ3MpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Zyb20gcmF3IHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdyb3VuZC10cmlwcyBhIHY4IGJhdGNoIHRyYW5zYWN0aW9uIHRocm91Z2ggdGhlIGJ1aWxkZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByYXdUeEhleCA9IChhd2FpdCBidWlsZFNhbmRib3hCYXRjaCgpLmJ1aWxkKCkpLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIGNvbnN0IG5ld0J1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgbmV3QnVpbGRlci5mcm9tKHJhd1R4SGV4KTtcblxuICAgICAgc2hvdWxkLmVxdWFsKG5ld0J1aWxkZXIuZ2V0QW1vdW50KCksIGJvbmRBbW91bnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKG5ld0J1aWxkZXIuZ2V0UGF5ZWUoKSwgJ1N0YWtlZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChuZXdCdWlsZGVyLmdldFZhbGlkYXRvcnMoKSwgW3ZhbGlkYXRvcl0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhY3RvcnkuZnJvbSByb3V0ZXMgYSB2OCBiYXRjaCBib25kK25vbWluYXRlIHRyYW5zYWN0aW9uIHRvIFY4QmF0Y2hTdGFraW5nQnVpbGRlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJhd1R4SGV4ID0gKGF3YWl0IGJ1aWxkU2FuZGJveEJhdGNoKCkuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20ocmF3VHhIZXgpO1xuICAgICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOEJhdGNoU3Rha2luZ0J1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhY3RvcnkuZnJvbSByb3V0ZXMgdG8gVjhCYXRjaFN0YWtpbmdCdWlsZGVyIG9uIHRoZSB2OCBkZWNvZGUtc3VjY2VzcyBwYXRoIChTSS05ODEpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gUmVwcm9kdWNlcyB0aGUgc3RhZ2luZyBpbmNpZGVudDogd2hlbiB0aGUgZmFjdG9yeSBjYXJyaWVzIHY4IG1hdGVyaWFsLCBgZGVjb2RlKClgIHN1Y2NlZWRzXG4gICAgICAvLyBhbmQgeWllbGRzIGEgYm9uZCBjYWxsIHdpdGggbm8gYGNvbnRyb2xsZXJgLiBSb3V0aW5nIG11c3QgZGV0ZWN0IHRoZSBtaXNzaW5nIGNvbnRyb2xsZXIgYW5kXG4gICAgICAvLyByZXR1cm4gdGhlIHY4IGJ1aWxkZXIgcmF0aGVyIHRoYW4gdGhlIHY3IEJhdGNoU3Rha2luZ0J1aWxkZXIsIHdoaWNoIGNyYXNoZXMgcmVhZGluZ1xuICAgICAgLy8gYGFyZ3MuY29udHJvbGxlci5pZGAuXG4gICAgICBjb25zdCByYXdUeEhleCA9IChhd2FpdCBidWlsZFNhbmRib3hCYXRjaCgpLmJ1aWxkKCkpLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBjb25zdCB2OE1hdGVyaWFsID0gdXRpbHMuZ2V0VjhNYXRlcmlhbChjb2lucy5nZXQoJ3Rwb2x5eCcpLm5ldHdvcmsudHlwZSk7XG4gICAgICBjb25zdCB2OEZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3Rwb2x5eCcpKS5tYXRlcmlhbCh2OE1hdGVyaWFsKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSB2OEZhY3RvcnkuZnJvbShyYXdUeEhleCk7XG4gICAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4QmF0Y2hTdGFraW5nQnVpbGRlcik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdWOCBzdGFraW5nIHdyYXBwZXJzIChzbW9rZSBidWlsZCknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3Rwb2x5eCcpKTtcbiAgY29uc3QgdmFsaWRhdG9yID0gc3Rha2luZ1R4Vjguc2FuZGJveC52YWxpZGF0b3I7XG4gIGNvbnN0IHNlbmRlciA9IHN0YWtpbmdUeFY4LnNhbmRib3guc3Rhc2g7XG4gIGNvbnN0IHJlZmVyZW5jZUJsb2NrID0gc3Rha2luZ1R4Vjguc2FuZGJveC5yZWZlcmVuY2VCbG9jaztcblxuICBjb25zdCByZXBsYXkgPSB7IGZpcnN0VmFsaWQ6IDI0ODI5MTMyLCBtYXhEdXJhdGlvbjogNjQgfTtcblxuICBpdCgnVjhCb25kRXh0cmFCdWlsZGVyIGJ1aWxkcyB3aXRoIHY4IG1hdGVyaWFsJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4Qm9uZEV4dHJhQnVpbGRlcigpO1xuICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhCb25kRXh0cmFCdWlsZGVyKTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXJcbiAgICAgIC5hbW91bnQoJzEwMDAwMDAwJylcbiAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIgfSlcbiAgICAgIC52YWxpZGl0eShyZXBsYXkpXG4gICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxODkgfSlcbiAgICAgIC5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS5zcGVjVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICB9KTtcblxuICBpdCgnVjhVbmJvbmRCdWlsZGVyIGJ1aWxkcyB3aXRoIHY4IG1hdGVyaWFsJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4VW5ib25kQnVpbGRlcigpO1xuICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhVbmJvbmRCdWlsZGVyKTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXJcbiAgICAgIC5hbW91bnQoJzEwMDAwMDAwJylcbiAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIgfSlcbiAgICAgIC52YWxpZGl0eShyZXBsYXkpXG4gICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxODkgfSlcbiAgICAgIC5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS5zcGVjVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICB9KTtcblxuICBpdCgnVjhCYXRjaFVuc3Rha2luZ0J1aWxkZXIgYnVpbGRzIHdpdGggdjggbWF0ZXJpYWwnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhCYXRjaFVuc3Rha2luZ0J1aWxkZXIoKTtcbiAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyKTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXJcbiAgICAgIC5hbW91bnQoJzEwMDAwMDAwJylcbiAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIgfSlcbiAgICAgIC52YWxpZGl0eShyZXBsYXkpXG4gICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxODkgfSlcbiAgICAgIC5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS5zcGVjVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICB9KTtcblxuICBpdCgnVjhXaXRoZHJhd1VuYm9uZGVkQnVpbGRlciBidWlsZHMgd2l0aCB2OCBtYXRlcmlhbCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOFdpdGhkcmF3VW5ib25kZWRCdWlsZGVyKCk7XG4gICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOFdpdGhkcmF3VW5ib25kZWRCdWlsZGVyKTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXJcbiAgICAgIC5zbGFzaGluZ1NwYW5zKDApXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAudmFsaWRpdHkocmVwbGF5KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTg5IH0pXG4gICAgICAuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgfSk7XG5cbiAgaXQoJ1Y4Tm9taW5hdGVCdWlsZGVyIGJ1aWxkcyB3aXRoIHY4IG1hdGVyaWFsJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4Tm9taW5hdGVCdWlsZGVyKCk7XG4gICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOE5vbWluYXRlQnVpbGRlcik7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyXG4gICAgICAudmFsaWRhdG9ycyhbdmFsaWRhdG9yXSlcbiAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIgfSlcbiAgICAgIC52YWxpZGl0eShyZXBsYXkpXG4gICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxODkgfSlcbiAgICAgIC5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS5zcGVjVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICB9KTtcbn0pO1xuIl19
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhCYXRjaFN0YWtpbmdCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci92OEJhdGNoU3Rha2luZ0J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzRUFBdUQ7QUFDdkQsaURBQTRDO0FBQzVDLG9EQUE0QjtBQUM1QiwwQ0FVMEI7QUFFMUIsbUVBQTJDO0FBQzNDLHNEQUE4RTtBQUM5RSwrQ0FBOEM7QUFDOUMsaUNBQTZEO0FBRTdELFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtJQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVuRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyx1QkFBVyxDQUFDLE9BQU8sQ0FBQztJQUVoRyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUM3QixJQUFJLDJCQUFxQixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDO1NBQ3pDLE1BQU0sQ0FBQyxVQUFVLENBQUM7U0FDbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUNmLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZCLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUMxQixRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3pDLGNBQWMsQ0FBQyxjQUFjLENBQUM7U0FDOUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRW5FLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFF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Q0FBQztRQUNYLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDL0MsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxZQUFZLHVCQUFpQixDQUFDLENBQUM7UUFDaEQsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPO2FBQ3JCLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3ZCLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUMzQixRQUFRLENBQUMsTUFBTSxDQUFDO2FBQ2hCLGNBQWMsQ0FBQyxjQUFjLENBQUM7YUFDOUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQzthQUMzRCxLQUFLLEVBQUUsQ0FBQztRQUNYLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlY29kZSB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLXBvbGthZG90JztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LFxuICBWOEJhdGNoU3Rha2luZ0J1aWxkZXIsXG4gIFY4Qm9uZEV4dHJhQnVpbGRlcixcbiAgVjhVbmJvbmRCdWlsZGVyLFxuICBWOEJhdGNoVW5zdGFraW5nQnVpbGRlcixcbiAgVjhXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcixcbiAgVjhOb21pbmF0ZUJ1aWxkZXIsXG4gIFNpbmdsZXRvblJlZ2lzdHJ5LFxuICBJbnRlcmZhY2UsXG59IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgQmF0Y2hBcmdzLCBOb21pbmF0ZUFyZ3MsIFY4Qm9uZEFyZ3MgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IHRlc3RuZXRWOE1hdGVyaWFsLCBtYWlubmV0VjhNYXRlcmlhbCB9IGZyb20gJy4uLy4uLy4uL3NyYy9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgc3Rha2luZ1R4VjggfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgYnVpbGRUZXN0Q29uZmlnLCBidWlsZE1haW5uZXRDb25maWcgfSBmcm9tICcuL2Jhc2UnO1xuXG5kZXNjcmliZSgnVjhCYXRjaFN0YWtpbmdCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0cG9seXgnKSk7XG5cbiAgY29uc3QgeyBzdGFzaCwgdmFsaWRhdG9yLCBib25kQW1vdW50LCByZWZlcmVuY2VCbG9jaywgbm9uY2UsIGZpcnN0VmFsaWQgfSA9IHN0YWtpbmdUeFY4LnNhbmRib3g7XG5cbiAgY29uc3QgYnVpbGRTYW5kYm94QmF0Y2ggPSAoKSA9PlxuICAgIG5ldyBWOEJhdGNoU3Rha2luZ0J1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpXG4gICAgICAuYW1vdW50KGJvbmRBbW91bnQpXG4gICAgICAucGF5ZWUoJ1N0YWtlZCcpXG4gICAgICAudmFsaWRhdG9ycyhbdmFsaWRhdG9yXSlcbiAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzdGFzaCB9KVxuICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZCwgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiBub25jZSB9KTtcblxuICBkZXNjcmliZSgndjggbWF0ZXJpYWwnLCAoKSA9PiB7XG4gICAgaXQoJ3Rlc3RuZXQgYnVpbGRlciB1c2VzIHY4IHNwZWNWZXJzaW9uIGFuZCB0eFZlcnNpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFY4QmF0Y2hTdGFraW5nQnVpbGRlcihidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IChidWlsZGVyIGFzIGFueSkuX21hdGVyaWFsO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZXF1YWwobWF0ZXJpYWwudHhWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC50eFZlcnNpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnNwZWNWZXJzaW9uLCA4MDAwMDAwKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYWlubmV0IGJ1aWxkZXIgdXNlcyB2OCBzcGVjVmVyc2lvbiBhbmQgdHhWZXJzaW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOEJhdGNoU3Rha2luZ0J1aWxkZXIoYnVpbGRNYWlubmV0Q29uZmlnKCkpO1xuICAgICAgY29uc3QgbWF0ZXJpYWwgPSAoYnVpbGRlciBhcyBhbnkpLl9tYXRlcmlhbDtcbiAgICAgIHNob3VsZC5lcXVhbChtYXRlcmlhbC5zcGVjVmVyc2lvbiwgbWFpbm5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnR4VmVyc2lvbiwgbWFpbm5ldFY4TWF0ZXJpYWwudHhWZXJzaW9uKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZhY3RvcnkgbWV0aG9kJywgKCkgPT4ge1xuICAgIGl0KCdnZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIgcmV0dXJucyBhIFY4QmF0Y2hTdGFraW5nQnVpbGRlciBjYXJyeWluZyB2OCBtYXRlcmlhbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOEJhdGNoU3Rha2luZ0J1aWxkZXIpO1xuICAgICAgc2hvdWxkLmVxdWFsKChidWlsZGVyIGFzIGFueSkuX21hdGVyaWFsLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZXR0ZXIgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIG5vdCBleHBvc2UgYSBjb250cm9sbGVyIHNldHRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR5cGVvZiAoYnVpbGRlciBhcyBhbnkpLmNvbnRyb2xsZXIsICd1bmRlZmluZWQnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eXBlb2YgKGJ1aWxkZXIgYXMgYW55KS5nZXRDb250cm9sbGVyLCAndW5kZWZpbmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcXVpcmUgYm90aCBib25kIGFuZCBub21pbmF0ZSBvcGVyYXRpb25zJywgKCkgPT4ge1xuICAgICAgbGV0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5hbW91bnQoYm9uZEFtb3VudCkucGF5ZWUoJ1N0YWtlZCcpO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBidWlsZGVyLnRlc3RWYWxpZGF0ZUZpZWxkcygpLCAvbXVzdCBpbmNsdWRlIGJvdGggYm9uZCBhbmQgbm9taW5hdGUgb3BlcmF0aW9ucy8pO1xuXG4gICAgICBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIudmFsaWRhdG9ycyhbdmFsaWRhdG9yXSk7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IGJ1aWxkZXIudGVzdFZhbGlkYXRlRmllbGRzKCksIC9tdXN0IGluY2x1ZGUgYm90aCBib25kIGFuZCBub21pbmF0ZSBvcGVyYXRpb25zLyk7XG5cbiAgICAgIGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5hbW91bnQoYm9uZEFtb3VudCkucGF5ZWUoJ1N0YWtlZCcpLnZhbGlkYXRvcnMoW3ZhbGlkYXRvcl0pO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnRlc3RWYWxpZGF0ZUZpZWxkcygpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2J1aWxkIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdidWlsZHMgYmF0Y2hBbGwoW2JvbmQsIG5vbWluYXRlXSkgd2l0aCB2OCBzcGVjVmVyc2lvbiBhbmQgbm8gY29udHJvbGxlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCA4MDAwMDAwKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC50eFZlcnNpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lubmVyIGJvbmQgbGVnICsgZnVsbCBiYXRjaCBtZXRob2QgaGV4IG1hdGNoZXMgdGhlIHRlc3RuZXQgc2FuZGJveCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpO1xuICAgICAgY29uc3QgbWV0aG9kSGV4ID0gKHR4IGFzIGFueSkuX3N1YnN0cmF0ZVRyYW5zYWN0aW9uLm1ldGhvZCBhcyBzdHJpbmc7XG4gICAgICAvLyBGdWxsIHV0aWxpdHkuYmF0Y2hBbGwgbWV0aG9kIGhleCBpcyBieXRlLWZvci1ieXRlIGlkZW50aWNhbCB0byB0aGUgb24tY2hhaW4gc2FuZGJveCB0eC5cbiAgICAgIHNob3VsZC5lcXVhbChtZXRob2RIZXgsIHN0YWtpbmdUeFY4LmJhdGNoLmJvbmRBbmROb21pbmF0ZS5jYWxsSGV4KTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNvZGVzIHdpdGggdjggbWF0ZXJpYWwgdG8gYm9uZCh7IHZhbHVlLCBwYXllZSB9KSDigJQgbm8gY29udHJvbGxlciDigJQgYW5kIG5vbWluYXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFNhbmRib3hCYXRjaCgpLmJ1aWxkKCk7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHV0aWxzLmdldFY4TWF0ZXJpYWwoY29pbnMuZ2V0KCd0cG9seXgnKS5uZXR3b3JrLnR5cGUpO1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSBTaW5nbGV0b25SZWdpc3RyeS5nZXRJbnN0YW5jZShtYXRlcmlhbCk7XG4gICAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGUodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwge1xuICAgICAgICBtZXRhZGF0YVJwYzogbWF0ZXJpYWwubWV0YWRhdGEsXG4gICAgICAgIHJlZ2lzdHJ5LFxuICAgICAgfSk7XG5cbiAgICAgIHNob3VsZC5lcXVhbChkZWNvZGVkVHgubWV0aG9kLm5hbWUsICdiYXRjaEFsbCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKGRlY29kZWRUeC5tZXRob2QucGFsbGV0LCAndXRpbGl0eScpO1xuXG4gICAgICBjb25zdCBiYXRjaEFyZ3MgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgdW5rbm93biBhcyBCYXRjaEFyZ3M7XG4gICAgICBzaG91bGQuZXF1YWwoYmF0Y2hBcmdzLmNhbGxzLmxlbmd0aCwgMik7XG5cbiAgICAgIGNvbnN0IGZpcnN0Q2FsbCA9IGJhdGNoQXJncy5jYWxsc1swXTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5kZWNvZGVNZXRob2ROYW1lKGZpcnN0Q2FsbCwgcmVnaXN0cnkpLCAnYm9uZCcpO1xuICAgICAgY29uc3QgYm9uZEFyZ3MgPSBmaXJzdENhbGwuYXJncyBhcyB1bmtub3duIGFzIFY4Qm9uZEFyZ3MgJiB7IGNvbnRyb2xsZXI/OiB1bmtub3duIH07XG4gICAgICBjb25zdCBib25kVmFsdWUgPSB0eXBlb2YgYm9uZEFyZ3MudmFsdWUgPT09ICdzdHJpbmcnID8gYm9uZEFyZ3MudmFsdWUgOiAoYm9uZEFyZ3MudmFsdWUgYXMgbnVtYmVyKS50b1N0cmluZygpO1xuICAgICAgc2hvdWxkLmVxdWFsKGJvbmRWYWx1ZSwgYm9uZEFtb3VudCk7XG4gICAgICBzaG91bGQuZXF1YWwoYm9uZEFyZ3MuY29udHJvbGxlciwgdW5kZWZpbmVkKTtcblxuICAgICAgY29uc3Qgc2Vjb25kQ2FsbCA9IGJhdGNoQXJncy5jYWxsc1sxXTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5kZWNvZGVNZXRob2ROYW1lKHNlY29uZENhbGwsIHJlZ2lzdHJ5KSwgJ25vbWluYXRlJyk7XG4gICAgICBjb25zdCBub21pbmF0ZUFyZ3MgPSBzZWNvbmRDYWxsLmFyZ3MgYXMgdW5rbm93biBhcyBOb21pbmF0ZUFyZ3M7XG4gICAgICBjb25zdCB0YXJnZXRzID0gbm9taW5hdGVBcmdzLnRhcmdldHMubWFwKCh0KSA9PiAodHlwZW9mIHQgPT09ICdzdHJpbmcnID8gdCA6ICh0IGFzIHsgaWQ6IHN0cmluZyB9KS5pZCkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0YXJnZXRzLCBbdmFsaWRhdG9yXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2YWxpZGF0ZURlY29kZWRUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnYWNjZXB0cyBhIGRlY29kZWQgdjggYmF0Y2ggYm9uZCtub21pbmF0ZSB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBidWlsZFNhbmRib3hCYXRjaCgpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHV0aWxzLmdldFY4TWF0ZXJpYWwoY29pbnMuZ2V0KCd0cG9seXgnKS5uZXR3b3JrLnR5cGUpO1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSBTaW5nbGV0b25SZWdpc3RyeS5nZXRJbnN0YW5jZShtYXRlcmlhbCk7XG4gICAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGUodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgeyBtZXRhZGF0YVJwYzogbWF0ZXJpYWwubWV0YWRhdGEsIHJlZ2lzdHJ5IH0pO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnZhbGlkYXRlRGVjb2RlZFRyYW5zYWN0aW9uKGRlY29kZWRUeCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZhbGlkYXRlcyB2OCBib25kIGFyZ3Mgd2l0aG91dCBhIGNvbnRyb2xsZXIgZmllbGQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci50ZXN0VmFsaWRhdGVCb25kQXJncyh7IHZhbHVlOiBib25kQW1vdW50LCBwYXllZTogJ1N0YWtlZCcgfSBhcyBWOEJvbmRBcmdzKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmcm9tIHJhdyB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgncm91bmQtdHJpcHMgYSB2OCBiYXRjaCB0cmFuc2FjdGlvbiB0aHJvdWdoIHRoZSBidWlsZGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmF3VHhIZXggPSAoYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBjb25zdCBuZXdCdWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIG5ld0J1aWxkZXIuZnJvbShyYXdUeEhleCk7XG5cbiAgICAgIHNob3VsZC5lcXVhbChuZXdCdWlsZGVyLmdldEFtb3VudCgpLCBib25kQW1vdW50KTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdCdWlsZGVyLmdldFBheWVlKCksICdTdGFrZWQnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwobmV3QnVpbGRlci5nZXRWYWxpZGF0b3JzKCksIFt2YWxpZGF0b3JdKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWN0b3J5LmZyb20gcm91dGVzIGEgdjggYmF0Y2ggYm9uZCtub21pbmF0ZSB0cmFuc2FjdGlvbiB0byBWOEJhdGNoU3Rha2luZ0J1aWxkZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByYXdUeEhleCA9IChhd2FpdCBidWlsZFNhbmRib3hCYXRjaCgpLmJ1aWxkKCkpLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tKHJhd1R4SGV4KTtcbiAgICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhCYXRjaFN0YWtpbmdCdWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWN0b3J5LmZyb20gcm91dGVzIHRvIFY4QmF0Y2hTdGFraW5nQnVpbGRlciBvbiB0aGUgdjggZGVjb2RlLXN1Y2Nlc3MgcGF0aCAoU0ktOTgxKScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFJlcHJvZHVjZXMgdGhlIHN0YWdpbmcgaW5jaWRlbnQ6IHdoZW4gdGhlIGZhY3RvcnkgY2FycmllcyB2OCBtYXRlcmlhbCwgYGRlY29kZSgpYCBzdWNjZWVkc1xuICAgICAgLy8gYW5kIHlpZWxkcyBhIGJvbmQgY2FsbCB3aXRoIG5vIGBjb250cm9sbGVyYC4gUm91dGluZyBtdXN0IGRldGVjdCB0aGUgbWlzc2luZyBjb250cm9sbGVyIGFuZFxuICAgICAgLy8gcmV0dXJuIHRoZSB2OCBidWlsZGVyIHJhdGhlciB0aGFuIHRoZSB2NyBCYXRjaFN0YWtpbmdCdWlsZGVyLCB3aGljaCBjcmFzaGVzIHJlYWRpbmdcbiAgICAgIC8vIGBhcmdzLmNvbnRyb2xsZXIuaWRgLlxuICAgICAgY29uc3QgcmF3VHhIZXggPSAoYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3QgdjhNYXRlcmlhbCA9IHV0aWxzLmdldFY4TWF0ZXJpYWwoY29pbnMuZ2V0KCd0cG9seXgnKS5uZXR3b3JrLnR5cGUpO1xuICAgICAgY29uc3QgdjhGYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0cG9seXgnKSkubWF0ZXJpYWwodjhNYXRlcmlhbCk7XG4gICAgICBjb25zdCBidWlsZGVyID0gdjhGYWN0b3J5LmZyb20ocmF3VHhIZXgpO1xuICAgICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOEJhdGNoU3Rha2luZ0J1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhY3RvcnkubWF0ZXJpYWwobGl2ZU1hdGVyaWFsKS5mcm9tKC4uLikgZm9yd2FyZHMgdGhlIGxpdmUgbWF0ZXJpYWwgaW50byB0aGUgcmVidWlsdCB2OCBiYXRjaCBzdGFraW5nIGJ1aWxkZXIgKFNJLTEwMzQpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gUmVwcm9kdWNlcyB0aGUgY3VzdG9kaWFsIHN0YWtpbmcgaW5jaWRlbnQ6IHRoZSBIU00gc2lnbnMgYWdhaW5zdCBMSVZFIGNoYWluIG1hdGVyaWFsXG4gICAgICAvLyAoZS5nLiBhIHNwZWNWZXJzaW9uIGJ1bXAgYWZ0ZXIgYSBydW50aW1lIHVwZ3JhZGUpLCBidXQgd2FsbGV0LXBsYXRmb3JtJ3MgZ2V0U2lnbmVkVHhcbiAgICAgIC8vIHJlLXZlcmlmaWVzIGJ5IGNhbGxpbmcgYGZhY3RvcnkubWF0ZXJpYWwobGl2ZU1hdGVyaWFsKS5mcm9tKHNlcmlhbGl6ZWRUeEhleClgLiBPbiB0aGVcbiAgICAgIC8vIGRlY29kZS1zdWNjZXNzIHBhdGgsIGBnZXRCdWlsZGVyKClgIHVzZWQgdG8gcmV0dXJuIGBnZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKWAgd2l0aG91dFxuICAgICAgLy8gZm9yd2FyZGluZyBgdGhpcy5fbWF0ZXJpYWxgLCBzbyB0aGUgcmVidWlsZCBzaWxlbnRseSBmZWxsIGJhY2sgdG8gdGhlIGJ1aWxkZXIncyBzdGF0aWNcbiAgICAgIC8vIGBnZXRWOE1hdGVyaWFsKClgIChzdGFsZSBzcGVjVmVyc2lvbikgaW5zdGVhZCBvZiB0aGUgY2FsbGVyJ3MgbGl2ZSBtYXRlcmlhbC4gQmVjYXVzZVxuICAgICAgLy8gc3BlY1ZlcnNpb24gaXMgZW1iZWRkZWQgaW4gdGhlIHJhdyBFeHRyaW5zaWNQYXlsb2FkIGJ5dGVzIHRoYXQgYXJlIGFjdHVhbGx5IHNpZ25lZCwgdGhlXG4gICAgICAvLyByZWJ1aWx0IHNpZ25hYmxlIHBheWxvYWQgd291bGQgdGhlbiBkaXZlcmdlIGZyb20gdGhlIG9uZSB0aGUgSFNNIHNpZ25lZCwgcHJvZHVjaW5nXG4gICAgICAvLyBgSW52YWxpZFNpZ25hdHVyZTogaW52YWxpZCBrZXkgc2lnbmF0dXJlYCBhdCBUcnVzdCBhcHByb3ZhbC5cbiAgICAgIC8vXG4gICAgICAvLyBTaW11bGF0ZSBhIFwibGl2ZVwiIGNoYWluIHRoYXQgaGFzIG1vdmVkIHBhc3QgdGhlIHBpbm5lZCBzdGF0aWMgdGVzdG5ldCB2OCBtYXRlcmlhbCBieVxuICAgICAgLy8gYnVtcGluZyBzcGVjVmVyc2lvbiBvbiBhIGNvcHkgb2YgaXQuXG4gICAgICBjb25zdCBsaXZlTWF0ZXJpYWwgPSB7XG4gICAgICAgIC4uLnRlc3RuZXRWOE1hdGVyaWFsLFxuICAgICAgICBzcGVjVmVyc2lvbjogdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24gKyAxMCxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBJbnRlcmZhY2UuTWF0ZXJpYWw7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSBhd2FpdCBuZXcgVjhCYXRjaFN0YWtpbmdCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKVxuICAgICAgICAubWF0ZXJpYWwobGl2ZU1hdGVyaWFsKVxuICAgICAgICAuYW1vdW50KGJvbmRBbW91bnQpXG4gICAgICAgIC5wYXllZSgnU3Rha2VkJylcbiAgICAgICAgLnZhbGlkYXRvcnMoW3ZhbGlkYXRvcl0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzdGFzaCB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiBub25jZSB9KVxuICAgICAgICAuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4SGV4ID0gb3JpZ2luYWxUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3Qgb3JpZ2luYWxTaWduYWJsZVBheWxvYWQgPSBvcmlnaW5hbFR4LnNpZ25hYmxlUGF5bG9hZC50b1N0cmluZygnaGV4Jyk7XG5cbiAgICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0cG9seXgnKSkubWF0ZXJpYWwobGl2ZU1hdGVyaWFsKS5mcm9tKHJhd1R4SGV4KTtcbiAgICAgIC8vIFRoZSByYXcgc2lnbmluZyBwYXlsb2FkIGRvZXMgbm90IGNhcnJ5IHRoZSBzZW5kZXIgYWRkcmVzcyBvciB0aGUgcmF3IGBmaXJzdFZhbGlkYCBibG9ja1xuICAgICAgLy8gbnVtYmVyIChvbmx5IHRoZSBlbmNvZGVkIGVyYSksIHNvIOKAlCBsaWtlIGFueSByZWFsIGNhbGxlciByZS12ZXJpZnlpbmcgYSBkZWNvZGVkXG4gICAgICAvLyB0cmFuc2FjdGlvbiDigJQgdGhleSBtdXN0IGJlIHN1cHBsaWVkIGFnYWluIGJlZm9yZSBidWlsZCgpIGNhbiBydW4uXG4gICAgICAocmVidWlsdEJ1aWxkZXIgYXMgVjhCYXRjaFN0YWtpbmdCdWlsZGVyKS5zZW5kZXIoeyBhZGRyZXNzOiBzdGFzaCB9KS52YWxpZGl0eSh7IGZpcnN0VmFsaWQsIG1heER1cmF0aW9uOiA2NCB9KTtcbiAgICAgIGNvbnN0IHJlYnVpbHRUeCA9IGF3YWl0IHJlYnVpbHRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByZWJ1aWx0U2lnbmFibGVQYXlsb2FkID0gcmVidWlsdFR4LnNpZ25hYmxlUGF5bG9hZC50b1N0cmluZygnaGV4Jyk7XG5cbiAgICAgIC8vIFdpdGhvdXQgdGhlIFNJLTEwMzQgZml4LCB0aGlzIGZhaWxzOiB0aGUgcmVidWlsZCB1c2VzIHRoZSBzdGF0aWMgbWF0ZXJpYWwgKHNwZWNWZXJzaW9uXG4gICAgICAvLyA4MDAwMDAwKSBpbnN0ZWFkIG9mIGxpdmVNYXRlcmlhbCAoc3BlY1ZlcnNpb24gODAwMDAxMCksIHNvIHRoZSBwYXlsb2FkcyBkaWZmZXIuXG4gICAgICBzaG91bGQuZXF1YWwocmVidWlsdFNpZ25hYmxlUGF5bG9hZCwgb3JpZ2luYWxTaWduYWJsZVBheWxvYWQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnVjggc3Rha2luZyB3cmFwcGVycyAoc21va2UgYnVpbGQpJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0cG9seXgnKSk7XG4gIGNvbnN0IHZhbGlkYXRvciA9IHN0YWtpbmdUeFY4LnNhbmRib3gudmFsaWRhdG9yO1xuICBjb25zdCBzZW5kZXIgPSBzdGFraW5nVHhWOC5zYW5kYm94LnN0YXNoO1xuICBjb25zdCByZWZlcmVuY2VCbG9jayA9IHN0YWtpbmdUeFY4LnNhbmRib3gucmVmZXJlbmNlQmxvY2s7XG5cbiAgY29uc3QgcmVwbGF5ID0geyBmaXJzdFZhbGlkOiAyNDgyOTEzMiwgbWF4RHVyYXRpb246IDY0IH07XG5cbiAgaXQoJ1Y4Qm9uZEV4dHJhQnVpbGRlciBidWlsZHMgd2l0aCB2OCBtYXRlcmlhbCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJvbmRFeHRyYUJ1aWxkZXIoKTtcbiAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4Qm9uZEV4dHJhQnVpbGRlcik7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyXG4gICAgICAuYW1vdW50KCcxMDAwMDAwMCcpXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAudmFsaWRpdHkocmVwbGF5KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTg5IH0pXG4gICAgICAuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgfSk7XG5cbiAgaXQoJ1Y4VW5ib25kQnVpbGRlciBidWlsZHMgd2l0aCB2OCBtYXRlcmlhbCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOFVuYm9uZEJ1aWxkZXIoKTtcbiAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4VW5ib25kQnVpbGRlcik7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyXG4gICAgICAuYW1vdW50KCcxMDAwMDAwMCcpXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAudmFsaWRpdHkocmVwbGF5KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTg5IH0pXG4gICAgICAuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgfSk7XG5cbiAgaXQoJ1Y4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyIGJ1aWxkcyB3aXRoIHY4IG1hdGVyaWFsJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyKCk7XG4gICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOEJhdGNoVW5zdGFraW5nQnVpbGRlcik7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyXG4gICAgICAuYW1vdW50KCcxMDAwMDAwMCcpXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAudmFsaWRpdHkocmVwbGF5KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTg5IH0pXG4gICAgICAuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgfSk7XG5cbiAgaXQoJ1Y4V2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIgYnVpbGRzIHdpdGggdjggbWF0ZXJpYWwnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcigpO1xuICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcik7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyXG4gICAgICAuc2xhc2hpbmdTcGFucygwKVxuICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlciB9KVxuICAgICAgLnZhbGlkaXR5KHJlcGxheSlcbiAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDE4OSB9KVxuICAgICAgLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gIH0pO1xuXG4gIGl0KCdWOE5vbWluYXRlQnVpbGRlciBidWlsZHMgd2l0aCB2OCBtYXRlcmlhbCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOE5vbWluYXRlQnVpbGRlcigpO1xuICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhOb21pbmF0ZUJ1aWxkZXIpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlclxuICAgICAgLnZhbGlkYXRvcnMoW3ZhbGlkYXRvcl0pXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAudmFsaWRpdHkocmVwbGF5KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTg5IH0pXG4gICAgICAuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgfSk7XG59KTtcbiJdfQ==