UNPKG

amazon-route-53-dns-zone-file

Version:

Makes DNS Zone File easy. Parses and validates BIND zone files and can be extended for custom features. Functionality is modular. Features are made open for extension and closed for runtime mutation. Written in TypeScript.

189 lines 16.4 kB
var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = (this && this.__spreadArray) || function (to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i]; return to; }; /** @perf use const enums */ export var DirectiveKind; (function (DirectiveKind) { DirectiveKind["Origin"] = "$ORIGIN"; DirectiveKind["TimeToLive"] = "$TTL"; })(DirectiveKind || (DirectiveKind = {})); export var SUPPORTED_RECORD_TYPES = [ 'TXT', 'NS', 'A', 'AAAA', 'CNAME', 'MX', 'PTR', 'SPF', 'SRV', 'CAA', 'NAPTR', ]; export var ALL_RECORD_TYPES = __spreadArray(['SOA'], __read(SUPPORTED_RECORD_TYPES)); /** @private */ export var INSTRUCTION_TYPES = __spreadArray(__spreadArray([], __read(SUPPORTED_RECORD_TYPES)), [ DirectiveKind.TimeToLive, DirectiveKind.Origin, ]); /** @perf const enum */ export var RecordMinLengthKind; (function (RecordMinLengthKind) { /** * treemonkey1.ca. 3W IN TXT "v=DKIM1\; k=rsa\; p=MIGf..." * TXT "eh=true" */ RecordMinLengthKind[RecordMinLengthKind["TXT"] = 1] = "TXT"; /** * www 1h IN CNAME \\008\\99.igloo.com. * CNAME igloo.igloo.com. */ RecordMinLengthKind[RecordMinLengthKind["CNAME"] = 1] = "CNAME"; /** * eh 1w A 127.0.0.1 * eh A 127.0.0.1 * A 127.0.0.1 */ RecordMinLengthKind[RecordMinLengthKind["A"] = 1] = "A"; /** * eh 3W AAAA ::1 * @ AAAA ::1 */ RecordMinLengthKind[RecordMinLengthKind["AAAA"] = 1] = "AAAA"; /** * @ 1W NS ns.igloo.com. * @ NS NS2.NAMESERVER.NET. * 1W NS ns.igloo.com. */ RecordMinLengthKind[RecordMinLengthKind["NS"] = 1] = "NS"; /** * 1 3W PTR HOST1.igloo.com. * 10.3 PTR HOST3.igloo.com. * @ PTR HOST3.igloo.com. * PTR HOST3.igloo.com. */ RecordMinLengthKind[RecordMinLengthKind["PTR"] = 1] = "PTR"; /** * igloo.com. MX 10 mail.igloo.com. * MX 10 mail.igloo.com. */ RecordMinLengthKind[RecordMinLengthKind["MX"] = 2] = "MX"; /** * test1 3w IN SPF "v=spf2" "mx:gcloud-node.com." "-all" * SPF "v=spf3" "mx:gcloud-node.com." "-all " * SPF "v=spf4" "mx:gcloud-node.com." "-all" * SPF "v=spf4 mx:gcloud-node.com." */ RecordMinLengthKind[RecordMinLengthKind["SPF"] = 1] = "SPF"; /** * igloo.com 3W CAA 0 iodef "mailto:security@igloo.com" * CAA 0 iodef "mailto:security@igloo.com" */ RecordMinLengthKind[RecordMinLengthKind["CAA"] = 3] = "CAA"; /** * _foobar._tcp SRV 0 1 9 old-slow-box.igloo.com. * _foobar._tcp 1W SRV 0 1 9 old-slow-box.igloo.com. */ RecordMinLengthKind[RecordMinLengthKind["SRV"] = 4] = "SRV"; /** * rfc3403-1 86400 IN NAPTR 100 10 "u" "sip+E2U" "!^.*$!sip:information@foo.se!i" . * 69 42 "u" "sip" ".*" . */ RecordMinLengthKind[RecordMinLengthKind["NAPTR"] = 6] = "NAPTR"; /** * or 6 | 7... */ RecordMinLengthKind[RecordMinLengthKind["SOA"] = 7] = "SOA"; })(RecordMinLengthKind || (RecordMinLengthKind = {})); /** @perf const enum */ export var RecordMaxLengthKind; (function (RecordMaxLengthKind) { /** * @example SPF v=spf1 ip:4:192.168.0.1/16-all * @example SPF v=spf1 ip4:192.0.2.0/24 ip4:198.51.100.123 a -all */ RecordMaxLengthKind[RecordMaxLengthKind["SPF"] = Infinity] = "SPF"; RecordMaxLengthKind[RecordMaxLengthKind["SOA"] = Infinity] = "SOA"; RecordMaxLengthKind[RecordMaxLengthKind["TXT"] = 1] = "TXT"; RecordMaxLengthKind[RecordMaxLengthKind["CNAME"] = 1] = "CNAME"; RecordMaxLengthKind[RecordMaxLengthKind["A"] = 1] = "A"; RecordMaxLengthKind[RecordMaxLengthKind["AAAA"] = 1] = "AAAA"; RecordMaxLengthKind[RecordMaxLengthKind["NS"] = 1] = "NS"; RecordMaxLengthKind[RecordMaxLengthKind["PTR"] = 1] = "PTR"; RecordMaxLengthKind[RecordMaxLengthKind["MX"] = 2] = "MX"; RecordMaxLengthKind[RecordMaxLengthKind["CAA"] = 3] = "CAA"; RecordMaxLengthKind[RecordMaxLengthKind["SRV"] = 4] = "SRV"; RecordMaxLengthKind[RecordMaxLengthKind["NAPTR"] = 6] = "NAPTR"; })(RecordMaxLengthKind || (RecordMaxLengthKind = {})); /** @perf use numbers here in production & const enum */ export var ErrorKeyKind; (function (ErrorKeyKind) { // === special === /** api error, unused */ ErrorKeyKind["Api"] = "API"; /** nothing in the input */ ErrorKeyKind["EmptyInput"] = "EMPTY"; /** nothing to create */ ErrorKeyKind["NoRecords"] = "NO_RECORDS_TO_CREATE"; /** we have records, but none are valid */ ErrorKeyKind["NoValidRecords"] = "NO_VALID_RECORDS_TO_CREATE"; /** not standard */ ErrorKeyKind["BadDirective"] = "BAD_DIRECTIVE"; /** exists either in already created records or twice here */ ErrorKeyKind["Duplicated"] = "DUPLICATED"; /** unknown */ ErrorKeyKind["Unknown"] = "UNKNOWN"; /** fallback case */ ErrorKeyKind["Missing"] = ""; // === ttl === /** Invalid ttl format */ ErrorKeyKind["TtlInvalidFormat"] = "TTL_INVALID_FORMAT"; /** Value too large */ ErrorKeyKind["TtlOverflow"] = "TTL_OVERFLOW"; /** Invalid format & missing default value as a number */ ErrorKeyKind["TtlMissingDefault"] = "TTL_INVALID_FORMAT_MISSING_DEFAULT"; // === args === /** wrong number of args for this instruction */ ErrorKeyKind["WrongLength"] = "WRONG_LENGTH"; /** format of an instruction is wrong */ ErrorKeyKind["WrongNameArgsLength"] = "EXTRA_NAME_TTL_ARGS"; })(ErrorKeyKind || (ErrorKeyKind = {})); export var ERROR_KEYS = [ ErrorKeyKind.Api, ErrorKeyKind.EmptyInput, ErrorKeyKind.NoRecords, ErrorKeyKind.NoValidRecords, ErrorKeyKind.BadDirective, ErrorKeyKind.TtlInvalidFormat, ErrorKeyKind.TtlOverflow, ErrorKeyKind.TtlMissingDefault, ErrorKeyKind.WrongLength, ErrorKeyKind.WrongNameArgsLength, ErrorKeyKind.Duplicated, ErrorKeyKind.Unknown, ]; /** @idea move `warnings` to `errors` and make => `problems` + `severity` */ export var WarningKeyKind; (function (WarningKeyKind) { WarningKeyKind["NsIgnored"] = "SOA_IGNORED"; WarningKeyKind["SoaIgnored"] = "NS_IGNORED"; })(WarningKeyKind || (WarningKeyKind = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzX2RvbWFpbl9zcGVjaWZpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaGFyZWQvY29uc3RhbnRzX2RvbWFpbl9zcGVjaWZpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0QkFBNEI7QUFDNUIsTUFBTSxDQUFOLElBQVksYUFHWDtBQUhELFdBQVksYUFBYTtJQUN2QixtQ0FBa0IsQ0FBQTtJQUNsQixvQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSFcsYUFBYSxLQUFiLGFBQWEsUUFHeEI7QUFFRCxNQUFNLENBQUMsSUFBTSxzQkFBc0IsR0FBRztJQUNwQyxLQUFLO0lBQ0wsSUFBSTtJQUNKLEdBQUc7SUFDSCxNQUFNO0lBQ04sT0FBTztJQUNQLElBQUk7SUFDSixLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsT0FBTztDQUNDLENBQUM7QUFFWCxNQUFNLENBQUMsSUFBTSxnQkFBZ0IsR0FBRyxlQUFDLEtBQUssVUFBSyxzQkFBc0IsRUFBVSxDQUFDO0FBRTVFLGVBQWU7QUFDZixNQUFNLENBQUMsSUFBTSxpQkFBaUIsR0FBRyx1Q0FDNUIsc0JBQXNCO0lBQ3pCLGFBQWEsQ0FBQyxVQUFvQjtJQUNsQyxhQUFhLENBQUMsTUFBbUI7RUFDekIsQ0FBQztBQU1YLHVCQUF1QjtBQUN2QixNQUFNLENBQU4sSUFBWSxtQkE2RVg7QUE3RUQsV0FBWSxtQkFBbUI7SUFDN0I7OztPQUdHO0lBQ0gsMkRBQU8sQ0FBQTtJQUVQOzs7T0FHRztJQUNILCtEQUFTLENBQUE7SUFFVDs7OztPQUlHO0lBQ0gsdURBQUssQ0FBQTtJQUVMOzs7T0FHRztJQUNILDZEQUFRLENBQUE7SUFFUjs7OztPQUlHO0lBQ0gseURBQU0sQ0FBQTtJQUVOOzs7OztPQUtHO0lBQ0gsMkRBQU8sQ0FBQTtJQUVQOzs7T0FHRztJQUNILHlEQUFNLENBQUE7SUFFTjs7Ozs7T0FLRztJQUNILDJEQUFPLENBQUE7SUFFUDs7O09BR0c7SUFDSCwyREFBTyxDQUFBO0lBRVA7OztPQUdHO0lBQ0gsMkRBQU8sQ0FBQTtJQUVQOzs7T0FHRztJQUNILCtEQUFTLENBQUE7SUFFVDs7T0FFRztJQUNILDJEQUFPLENBQUE7QUFDVCxDQUFDLEVBN0VXLG1CQUFtQixLQUFuQixtQkFBbUIsUUE2RTlCO0FBRUQsdUJBQXVCO0FBQ3ZCLE1BQU0sQ0FBTixJQUFZLG1CQWlCWDtBQWpCRCxXQUFZLG1CQUFtQjtJQUM3Qjs7O09BR0c7SUFDSCxrRUFBYyxDQUFBO0lBQ2Qsa0VBQWMsQ0FBQTtJQUNkLDJEQUFPLENBQUE7SUFDUCwrREFBUyxDQUFBO0lBQ1QsdURBQUssQ0FBQTtJQUNMLDZEQUFRLENBQUE7SUFDUix5REFBTSxDQUFBO0lBQ04sMkRBQU8sQ0FBQTtJQUNQLHlEQUFNLENBQUE7SUFDTiwyREFBTyxDQUFBO0lBQ1AsMkRBQU8sQ0FBQTtJQUNQLCtEQUFTLENBQUE7QUFDWCxDQUFDLEVBakJXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFpQjlCO0FBRUQsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBTixJQUFZLFlBZ0NYO0FBaENELFdBQVksWUFBWTtJQUN0QixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLDJCQUFXLENBQUE7SUFDWCwyQkFBMkI7SUFDM0Isb0NBQW9CLENBQUE7SUFDcEIsd0JBQXdCO0lBQ3hCLGtEQUFrQyxDQUFBO0lBQ2xDLDBDQUEwQztJQUMxQyw2REFBNkMsQ0FBQTtJQUM3QyxtQkFBbUI7SUFDbkIsOENBQThCLENBQUE7SUFDOUIsNkRBQTZEO0lBQzdELHlDQUF5QixDQUFBO0lBQ3pCLGNBQWM7SUFDZCxtQ0FBbUIsQ0FBQTtJQUNuQixvQkFBb0I7SUFDcEIsNEJBQVksQ0FBQTtJQUVaLGNBQWM7SUFDZCx5QkFBeUI7SUFDekIsdURBQXVDLENBQUE7SUFDdkMsc0JBQXNCO0lBQ3RCLDRDQUE0QixDQUFBO0lBQzVCLHlEQUF5RDtJQUN6RCx3RUFBd0QsQ0FBQTtJQUV4RCxlQUFlO0lBQ2YsZ0RBQWdEO0lBQ2hELDRDQUE0QixDQUFBO0lBQzVCLHdDQUF3QztJQUN4QywyREFBMkMsQ0FBQTtBQUM3QyxDQUFDLEVBaENXLFlBQVksS0FBWixZQUFZLFFBZ0N2QjtBQUVELE1BQU0sQ0FBQyxJQUFNLFVBQVUsR0FBRztJQUN4QixZQUFZLENBQUMsR0FBRztJQUNoQixZQUFZLENBQUMsVUFBVTtJQUN2QixZQUFZLENBQUMsU0FBUztJQUN0QixZQUFZLENBQUMsY0FBYztJQUMzQixZQUFZLENBQUMsWUFBWTtJQUN6QixZQUFZLENBQUMsZ0JBQWdCO0lBQzdCLFlBQVksQ0FBQyxXQUFXO0lBQ3hCLFlBQVksQ0FBQyxpQkFBaUI7SUFDOUIsWUFBWSxDQUFDLFdBQVc7SUFDeEIsWUFBWSxDQUFDLG1CQUFtQjtJQUNoQyxZQUFZLENBQUMsVUFBVTtJQUN2QixZQUFZLENBQUMsT0FBTztDQUNaLENBQUM7QUFFWCw0RUFBNEU7QUFDNUUsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4QiwyQ0FBeUIsQ0FBQTtJQUN6QiwyQ0FBeUIsQ0FBQTtBQUMzQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQHBlcmYgdXNlIGNvbnN0IGVudW1zICovXG5leHBvcnQgZW51bSBEaXJlY3RpdmVLaW5kIHtcbiAgT3JpZ2luID0gJyRPUklHSU4nLFxuICBUaW1lVG9MaXZlID0gJyRUVEwnLFxufVxuXG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX1JFQ09SRF9UWVBFUyA9IFtcbiAgJ1RYVCcsXG4gICdOUycsXG4gICdBJyxcbiAgJ0FBQUEnLFxuICAnQ05BTUUnLFxuICAnTVgnLFxuICAnUFRSJyxcbiAgJ1NQRicsXG4gICdTUlYnLFxuICAnQ0FBJyxcbiAgJ05BUFRSJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBBTExfUkVDT1JEX1RZUEVTID0gWydTT0EnLCAuLi5TVVBQT1JURURfUkVDT1JEX1RZUEVTXSBhcyBjb25zdDtcblxuLyoqIEBwcml2YXRlICovXG5leHBvcnQgY29uc3QgSU5TVFJVQ1RJT05fVFlQRVMgPSBbXG4gIC4uLlNVUFBPUlRFRF9SRUNPUkRfVFlQRVMsXG4gIERpcmVjdGl2ZUtpbmQuVGltZVRvTGl2ZSBhcyAnJFRUTCcsXG4gIERpcmVjdGl2ZUtpbmQuT3JpZ2luIGFzICckT1JJR0lOJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFJlY29yZFR5cGUgPSB0eXBlb2YgU1VQUE9SVEVEX1JFQ09SRF9UWVBFU1tudW1iZXJdO1xuXG5leHBvcnQgdHlwZSBJbnN0cnVjdGlvblR5cGUgPSB0eXBlb2YgSU5TVFJVQ1RJT05fVFlQRVNbbnVtYmVyXTtcblxuLyoqIEBwZXJmIGNvbnN0IGVudW0gKi9cbmV4cG9ydCBlbnVtIFJlY29yZE1pbkxlbmd0aEtpbmQge1xuICAvKipcbiAgICogdHJlZW1vbmtleTEuY2EuIDNXIElOIFRYVCBcInY9REtJTTFcXDsgaz1yc2FcXDsgcD1NSUdmLi4uXCJcbiAgICogICAgICAgICAgICAgICAgICAgICAgIFRYVCBcImVoPXRydWVcIlxuICAgKi9cbiAgVFhUID0gMSxcblxuICAvKipcbiAgICogd3d3IDFoIElOIENOQU1FIFxcXFwwMDhcXFxcOTkuaWdsb28uY29tLlxuICAgKiAgICAgICAgICAgQ05BTUUgaWdsb28uaWdsb28uY29tLlxuICAgKi9cbiAgQ05BTUUgPSAxLFxuXG4gIC8qKlxuICAgKiBlaCAgMXcgICBBIDEyNy4wLjAuMVxuICAgKiBlaCAgICAgICBBIDEyNy4wLjAuMVxuICAgKiAgICAgICAgICBBIDEyNy4wLjAuMVxuICAgKi9cbiAgQSA9IDEsXG5cbiAgLyoqXG4gICAqIGVoIDNXIEFBQUEgIDo6MVxuICAgKiBAICAgICBBQUFBICA6OjFcbiAgICovXG4gIEFBQUEgPSAxLFxuXG4gIC8qKlxuICAgKiBAICAxVyAgICBOUyAgIG5zLmlnbG9vLmNvbS5cbiAgICogQCAgICAgICAgTlMgICBOUzIuTkFNRVNFUlZFUi5ORVQuXG4gICAqICAgIDFXICAgIE5TICAgbnMuaWdsb28uY29tLlxuICAgKi9cbiAgTlMgPSAxLFxuXG4gIC8qKlxuICAgKiAxICAgICAgIDNXICAgUFRSIEhPU1QxLmlnbG9vLmNvbS5cbiAgICogMTAuMyAgICAgICAgIFBUUiBIT1NUMy5pZ2xvby5jb20uXG4gICAqIEAgICAgICAgICAgICBQVFIgSE9TVDMuaWdsb28uY29tLlxuICAgKiAgICAgICAgICAgICAgUFRSIEhPU1QzLmlnbG9vLmNvbS5cbiAgICovXG4gIFBUUiA9IDEsXG5cbiAgLyoqXG4gICAqIGlnbG9vLmNvbS4gIE1YICAgIDEwIG1haWwuaWdsb28uY29tLlxuICAgKiAgICAgICAgICAgICBNWCAgICAxMCBtYWlsLmlnbG9vLmNvbS5cbiAgICovXG4gIE1YID0gMixcblxuICAvKipcbiAgICogdGVzdDEgICAzdyAgIElOIFNQRiAgIFwidj1zcGYyXCIgXCJteDpnY2xvdWQtbm9kZS5jb20uXCIgXCItYWxsXCJcbiAgICogICAgICAgICAgICAgICAgIFNQRiAgIFwidj1zcGYzXCIgXCJteDpnY2xvdWQtbm9kZS5jb20uXCIgXCItYWxsICAgIFwiXG4gICAqICAgICAgICAgICAgICAgICBTUEYgICBcInY9c3BmNFwiIFwibXg6Z2Nsb3VkLW5vZGUuY29tLlwiIFwiLWFsbFwiXG4gICAqICAgICAgICAgICAgICAgICBTUEYgICBcInY9c3BmNCBteDpnY2xvdWQtbm9kZS5jb20uXCJcbiAgICovXG4gIFNQRiA9IDEsXG5cbiAgLyoqXG4gICAqIGlnbG9vLmNvbSAgICAgICAzVyBDQUEgMCBpb2RlZiBcIm1haWx0bzpzZWN1cml0eUBpZ2xvby5jb21cIlxuICAgKiAgICAgICAgICAgICAgICAgICAgQ0FBIDAgaW9kZWYgXCJtYWlsdG86c2VjdXJpdHlAaWdsb28uY29tXCJcbiAgICovXG4gIENBQSA9IDMsXG5cbiAgLyoqXG4gICAqIF9mb29iYXIuX3RjcCAgICAgICAgU1JWICAgMCAxIDkgb2xkLXNsb3ctYm94LmlnbG9vLmNvbS5cbiAgICogX2Zvb2Jhci5fdGNwICAgMVcgICBTUlYgICAwIDEgOSBvbGQtc2xvdy1ib3guaWdsb28uY29tLlxuICAgKi9cbiAgU1JWID0gNCxcblxuICAvKipcbiAgICogcmZjMzQwMy0xIDg2NDAwIElOIE5BUFRSIDEwMCAxMCBcInVcIiBcInNpcCtFMlVcIiBcIiFeLiokIXNpcDppbmZvcm1hdGlvbkBmb28uc2UhaVwiIC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIDY5IDQyICBcInVcIiBcInNpcFwiICAgICBcIi4qXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5cbiAgICovXG4gIE5BUFRSID0gNixcblxuICAvKipcbiAgICogb3IgNiB8IDcuLi5cbiAgICovXG4gIFNPQSA9IDcsXG59XG5cbi8qKiBAcGVyZiBjb25zdCBlbnVtICovXG5leHBvcnQgZW51bSBSZWNvcmRNYXhMZW5ndGhLaW5kIHtcbiAgLyoqXG4gICAqIEBleGFtcGxlICAgICAgICAgICBTUEYgICAgdj1zcGYxICBpcDo0OjE5Mi4xNjguMC4xLzE2LWFsbFxuICAgKiBAZXhhbXBsZSAgICAgICAgICAgU1BGICAgIHY9c3BmMSAgaXA0OjE5Mi4wLjIuMC8yNCBpcDQ6MTk4LjUxLjEwMC4xMjMgYSAtYWxsXG4gICAqL1xuICBTUEYgPSBJbmZpbml0eSxcbiAgU09BID0gSW5maW5pdHksXG4gIFRYVCA9IDEsXG4gIENOQU1FID0gMSxcbiAgQSA9IDEsXG4gIEFBQUEgPSAxLFxuICBOUyA9IDEsXG4gIFBUUiA9IDEsXG4gIE1YID0gMixcbiAgQ0FBID0gMyxcbiAgU1JWID0gNCxcbiAgTkFQVFIgPSA2LFxufVxuXG4vKiogQHBlcmYgdXNlIG51bWJlcnMgaGVyZSBpbiBwcm9kdWN0aW9uICYgY29uc3QgZW51bSAqL1xuZXhwb3J0IGVudW0gRXJyb3JLZXlLaW5kIHtcbiAgLy8gPT09IHNwZWNpYWwgPT09XG4gIC8qKiBhcGkgZXJyb3IsIHVudXNlZCAqL1xuICBBcGkgPSAnQVBJJyxcbiAgLyoqIG5vdGhpbmcgaW4gdGhlIGlucHV0ICovXG4gIEVtcHR5SW5wdXQgPSAnRU1QVFknLFxuICAvKiogbm90aGluZyB0byBjcmVhdGUgKi9cbiAgTm9SZWNvcmRzID0gJ05PX1JFQ09SRFNfVE9fQ1JFQVRFJyxcbiAgLyoqIHdlIGhhdmUgcmVjb3JkcywgYnV0IG5vbmUgYXJlIHZhbGlkICovXG4gIE5vVmFsaWRSZWNvcmRzID0gJ05PX1ZBTElEX1JFQ09SRFNfVE9fQ1JFQVRFJyxcbiAgLyoqIG5vdCBzdGFuZGFyZCAqL1xuICBCYWREaXJlY3RpdmUgPSAnQkFEX0RJUkVDVElWRScsXG4gIC8qKiBleGlzdHMgZWl0aGVyIGluIGFscmVhZHkgY3JlYXRlZCByZWNvcmRzIG9yIHR3aWNlIGhlcmUgKi9cbiAgRHVwbGljYXRlZCA9ICdEVVBMSUNBVEVEJyxcbiAgLyoqIHVua25vd24gKi9cbiAgVW5rbm93biA9ICdVTktOT1dOJyxcbiAgLyoqIGZhbGxiYWNrIGNhc2UgKi9cbiAgTWlzc2luZyA9ICcnLFxuXG4gIC8vID09PSB0dGwgPT09XG4gIC8qKiBJbnZhbGlkIHR0bCBmb3JtYXQgKi9cbiAgVHRsSW52YWxpZEZvcm1hdCA9ICdUVExfSU5WQUxJRF9GT1JNQVQnLFxuICAvKiogVmFsdWUgdG9vIGxhcmdlICovXG4gIFR0bE92ZXJmbG93ID0gJ1RUTF9PVkVSRkxPVycsXG4gIC8qKiBJbnZhbGlkIGZvcm1hdCAmIG1pc3NpbmcgZGVmYXVsdCB2YWx1ZSBhcyBhIG51bWJlciAqL1xuICBUdGxNaXNzaW5nRGVmYXVsdCA9ICdUVExfSU5WQUxJRF9GT1JNQVRfTUlTU0lOR19ERUZBVUxUJyxcblxuICAvLyA9PT0gYXJncyA9PT1cbiAgLyoqIHdyb25nIG51bWJlciBvZiBhcmdzIGZvciB0aGlzIGluc3RydWN0aW9uICovXG4gIFdyb25nTGVuZ3RoID0gJ1dST05HX0xFTkdUSCcsXG4gIC8qKiBmb3JtYXQgb2YgYW4gaW5zdHJ1Y3Rpb24gaXMgd3JvbmcgKi9cbiAgV3JvbmdOYW1lQXJnc0xlbmd0aCA9ICdFWFRSQV9OQU1FX1RUTF9BUkdTJyxcbn1cblxuZXhwb3J0IGNvbnN0IEVSUk9SX0tFWVMgPSBbXG4gIEVycm9yS2V5S2luZC5BcGksXG4gIEVycm9yS2V5S2luZC5FbXB0eUlucHV0LFxuICBFcnJvcktleUtpbmQuTm9SZWNvcmRzLFxuICBFcnJvcktleUtpbmQuTm9WYWxpZFJlY29yZHMsXG4gIEVycm9yS2V5S2luZC5CYWREaXJlY3RpdmUsXG4gIEVycm9yS2V5S2luZC5UdGxJbnZhbGlkRm9ybWF0LFxuICBFcnJvcktleUtpbmQuVHRsT3ZlcmZsb3csXG4gIEVycm9yS2V5S2luZC5UdGxNaXNzaW5nRGVmYXVsdCxcbiAgRXJyb3JLZXlLaW5kLldyb25nTGVuZ3RoLFxuICBFcnJvcktleUtpbmQuV3JvbmdOYW1lQXJnc0xlbmd0aCxcbiAgRXJyb3JLZXlLaW5kLkR1cGxpY2F0ZWQsXG4gIEVycm9yS2V5S2luZC5Vbmtub3duLFxuXSBhcyBjb25zdDtcblxuLyoqIEBpZGVhIG1vdmUgYHdhcm5pbmdzYCB0byBgZXJyb3JzYCBhbmQgbWFrZSA9PiBgcHJvYmxlbXNgICsgYHNldmVyaXR5YCAqL1xuZXhwb3J0IGVudW0gV2FybmluZ0tleUtpbmQge1xuICBOc0lnbm9yZWQgPSAnU09BX0lHTk9SRUQnLFxuICBTb2FJZ25vcmVkID0gJ05TX0lHTk9SRUQnLFxufVxuXG5leHBvcnQgdHlwZSBUdGxFcnJvcktleVR5cGUgPVxuICB8IEVycm9yS2V5S2luZC5UdGxJbnZhbGlkRm9ybWF0XG4gIHwgRXJyb3JLZXlLaW5kLlR0bE1pc3NpbmdEZWZhdWx0XG4gIHwgRXJyb3JLZXlLaW5kLlR0bE92ZXJmbG93O1xuIl19