@lacussoft/cpf-gen
Version:
Utility function to generate valid CPF (Brazilian ID document).
9 lines (8 loc) • 36.9 kB
JavaScript
/**
* LacusSoft :: cpf-gen v1.5.1
*
* @author Julio L. Muller.
* @license MIT - 2020-2025
*/
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).cpfGen=n()}(this,(function(){"use strict";const{replace:e}="",n=/[&<>'"]/g,r={"&":"&","<":"<",">":">","'":"'",'"':"""},t=e=>r[e];function i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var o,a;var c,u,d=i(a?o:(a=1,o=function(e){return String(e).replace(/\D/g,"")}));var f=i(function(){if(u)return c;u=1;var e=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var r=Object.prototype.toString.call(e);return"[object RegExp]"===r||"[object Date]"===r||function(e){return e.$$typeof===n}(e)}(e)},n="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function r(e,n){return!1!==n.clone&&n.isMergeableObject(e)?d((r=e,Array.isArray(r)?[]:{}),e,n):e;var r}function t(e,n,t){return e.concat(n).map((function(e){return r(e,t)}))}function i(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(n){return Object.propertyIsEnumerable.call(e,n)})):[]}(e))}function o(e,n){try{return n in e}catch(e){return!1}}function a(e,n,t){var a={};return t.isMergeableObject(e)&&i(e).forEach((function(n){a[n]=r(e[n],t)})),i(n).forEach((function(i){(function(e,n){return o(e,n)&&!(Object.hasOwnProperty.call(e,n)&&Object.propertyIsEnumerable.call(e,n))})(e,i)||(o(e,i)&&t.isMergeableObject(n[i])?a[i]=function(e,n){if(!n.customMerge)return d;var r=n.customMerge(e);return"function"==typeof r?r:d}(i,t)(e[i],n[i],t):a[i]=r(n[i],t))})),a}function d(n,i,o){(o=o||{}).arrayMerge=o.arrayMerge||t,o.isMergeableObject=o.isMergeableObject||e,o.cloneUnlessOtherwiseSpecified=r;var c=Array.isArray(i);return c===Array.isArray(n)?c?o.arrayMerge(n,i,o):a(n,i,o):r(i,o)}return d.all=function(e,n){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,r){return d(e,r,n)}),{})},c=d}());const s={delimiters:{dot:".",dash:"-"},hiddenRange:{start:3,end:10},onFail:e=>e,hiddenKey:"*",hidden:!1,escape:!1};function l(r,i){const o=d(r).split(""),a=function(e={}){const n=f(s,e);if(n.hidden){if(isNaN(n.hiddenRange.start)||n.hiddenRange.start<0||n.hiddenRange.start>10)throw new TypeError('Option "hiddenRange.start" must be a number between 0 and 10.');if(isNaN(n.hiddenRange.end)||n.hiddenRange.end<0||n.hiddenRange.end>10)throw new TypeError('Option "hiddenRange.end" must be a number between 0 and 10.');if(n.hiddenRange.start>n.hiddenRange.end){const e=n.hiddenRange.start;n.hiddenRange.start=n.hiddenRange.end,n.hiddenRange.end=e}}if("function"!=typeof n.onFail)throw new TypeError('The option "onFail" must be a callback function.');return n}(i);if(11!==o.length){const e=new Error(`Parameter "${r}" does not contain 11 digits.`);return a.onFail(r,e)}if(a.hidden)for(let e=a.hiddenRange.start;e<=a.hiddenRange.end;e++)o[e]=a.hiddenKey;o.splice(9,0,a.delimiters.dash),o.splice(6,0,a.delimiters.dot),o.splice(3,0,a.delimiters.dot);const c=o.join("");return a.escape?(u=c,e.call(u,n,t)):c;var u}var p={format:!1,prefix:""};return function(e){var n,r=(void 0===(n=e)&&(n={}),f(p,n)),t=d(r.prefix),i=t.length;if(i<0||i>9)throw new Error('Option "prefix" must be a string containing between 1 and 9 digits.');var o=t.split("").map(Number).concat(function(e){for(var n=[];n.length<e;){var r=10*Math.random(),t=Math.floor(r);n.push(t)}return n}(9-i));return[9,10].forEach((function(e){for(var n=e+1,r=0,t=0;t<e;t++,n--)r+=o[t]*n;var i=11-r%11;o.push(i>9?0:i)})),r.format?l(o.join("")):o.join("")}}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BmLWdlbi5taW4uanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9odG1sLWVzY2FwZXIvZXNtL2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL251bS1vbmx5L2J1aWxkL2luZGV4LmNqcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9kZWVwbWVyZ2UvZGlzdC9janMuanMiLCIuLi8uLi9jcGYtZm10L2J1aWxkL2luZGV4Lm1qcyIsIi4uL3NyYy9tZXJnZS1vcHRpb25zLnRzIiwiLi4vc3JjL2NwZi1nZW4udHMiLCIuLi9zcmMvbnVtYmVyLWdlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoQykgMjAxNy1wcmVzZW50IGJ5IEFuZHJlYSBHaWFtbWFyY2hpIC0gQFdlYlJlZmxlY3Rpb25cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICovXG5cbmNvbnN0IHtyZXBsYWNlfSA9ICcnO1xuXG4vLyBlc2NhcGVcbmNvbnN0IGVzID0gLyYoPzphbXB8IzM4fGx0fCM2MHxndHwjNjJ8YXBvc3wjMzl8cXVvdHwjMzQpOy9nO1xuY29uc3QgY2EgPSAvWyY8PidcIl0vZztcblxuY29uc3QgZXNjYSA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gIFwiJ1wiOiAnJiMzOTsnLFxuICAnXCInOiAnJnF1b3Q7J1xufTtcbmNvbnN0IHBlID0gbSA9PiBlc2NhW21dO1xuXG4vKipcbiAqIFNhZmVseSBlc2NhcGUgSFRNTCBlbnRpdGllcyBzdWNoIGFzIGAmYCwgYDxgLCBgPmAsIGBcImAsIGFuZCBgJ2AuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXMgdGhlIGlucHV0IHRvIHNhZmVseSBlc2NhcGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBlc2NhcGVkIGlucHV0LCBhbmQgaXQgKip0aHJvd3MqKiBhbiBlcnJvciBpZlxuICogIHRoZSBpbnB1dCB0eXBlIGlzIHVuZXhwZWN0ZWQsIGV4Y2VwdCBmb3IgYm9vbGVhbiBhbmQgbnVtYmVycyxcbiAqICBjb252ZXJ0ZWQgYXMgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZXNjYXBlID0gZXMgPT4gcmVwbGFjZS5jYWxsKGVzLCBjYSwgcGUpO1xuXG5cbi8vIHVuZXNjYXBlXG5jb25zdCB1bmVzID0ge1xuICAnJmFtcDsnOiAnJicsXG4gICcmIzM4Oyc6ICcmJyxcbiAgJyZsdDsnOiAnPCcsXG4gICcmIzYwOyc6ICc8JyxcbiAgJyZndDsnOiAnPicsXG4gICcmIzYyOyc6ICc+JyxcbiAgJyZhcG9zOyc6IFwiJ1wiLFxuICAnJiMzOTsnOiBcIidcIixcbiAgJyZxdW90Oyc6ICdcIicsXG4gICcmIzM0Oyc6ICdcIidcbn07XG5jb25zdCBjYXBlID0gbSA9PiB1bmVzW21dO1xuXG4vKipcbiAqIFNhZmVseSB1bmVzY2FwZSBwcmV2aW91c2x5IGVzY2FwZWQgZW50aXRpZXMgc3VjaCBhcyBgJmAsIGA8YCwgYD5gLCBgXCJgLFxuICogYW5kIGAnYC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB1biBhIHByZXZpb3VzbHkgZXNjYXBlZCBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSB1bmVzY2FwZWQgaW5wdXQsIGFuZCBpdCAqKnRocm93cyoqIGFuIGVycm9yIGlmXG4gKiAgdGhlIGlucHV0IHR5cGUgaXMgdW5leHBlY3RlZCwgZXhjZXB0IGZvciBib29sZWFuIGFuZCBudW1iZXJzLFxuICogIGNvbnZlcnRlZCBhcyBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCB1bmVzY2FwZSA9IHVuID0+IHJlcGxhY2UuY2FsbCh1biwgZXMsIGNhcGUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBudW1Pbmx5KHRhcmdldCkge1xuICByZXR1cm4gU3RyaW5nKHRhcmdldCkucmVwbGFjZSgvXFxEL2csIFwiXCIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG51bU9ubHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1WTJweklpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZiblZ0TFc5dWJIa3VkSE1pWFN3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpuVnVZM1JwYjI0Z2JuVnRUMjVzZVNoMFlYSm5aWFE2SUhWdWEyNXZkMjRwT2lCemRISnBibWNnZTF4dUlDQnlaWFIxY200Z1UzUnlhVzVuS0hSaGNtZGxkQ2t1Y21Wd2JHRmpaU2d2WEZ4RUwyY3NJQ2NuS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdiblZ0VDI1c2VUdGNiaUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxGTkJRVk1zVVVGQlVTeE5RVUY1UWl4RlFVRkJPMEZCUTNoRExFVkJRVUVzVDBGQlR5eE5RVUZQTEVOQlFVRXNUVUZCVFN4RFFVRkZMRU5CUVVFc1QwRkJRU3hEUVVGUkxFOUJRVThzUlVGQlJTeERRVUZCTzBGQlEzcERPenM3T3lKOVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNNZXJnZWFibGVPYmplY3QgPSBmdW5jdGlvbiBpc01lcmdlYWJsZU9iamVjdCh2YWx1ZSkge1xuXHRyZXR1cm4gaXNOb25OdWxsT2JqZWN0KHZhbHVlKVxuXHRcdCYmICFpc1NwZWNpYWwodmFsdWUpXG59O1xuXG5mdW5jdGlvbiBpc05vbk51bGxPYmplY3QodmFsdWUpIHtcblx0cmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xufVxuXG5mdW5jdGlvbiBpc1NwZWNpYWwodmFsdWUpIHtcblx0dmFyIHN0cmluZ1ZhbHVlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcblxuXHRyZXR1cm4gc3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG5cdFx0fHwgc3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IERhdGVdJ1xuXHRcdHx8IGlzUmVhY3RFbGVtZW50KHZhbHVlKVxufVxuXG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvYjVhYzk2M2ZiNzkxZDEyOThlN2YzOTYyMzYzODNiYzk1NWY5MTZjMS9zcmMvaXNvbW9ycGhpYy9jbGFzc2ljL2VsZW1lbnQvUmVhY3RFbGVtZW50LmpzI0wyMS1MMjVcbnZhciBjYW5Vc2VTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gY2FuVXNlU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xuXG5mdW5jdGlvbiBpc1JlYWN0RWxlbWVudCh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxufVxuXG5mdW5jdGlvbiBlbXB0eVRhcmdldCh2YWwpIHtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKSA/IFtdIDoge31cbn1cblxuZnVuY3Rpb24gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQodmFsdWUsIG9wdGlvbnMpIHtcblx0cmV0dXJuIChvcHRpb25zLmNsb25lICE9PSBmYWxzZSAmJiBvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0KHZhbHVlKSlcblx0XHQ/IGRlZXBtZXJnZShlbXB0eVRhcmdldCh2YWx1ZSksIHZhbHVlLCBvcHRpb25zKVxuXHRcdDogdmFsdWVcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEFycmF5TWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcblx0cmV0dXJuIHRhcmdldC5jb25jYXQoc291cmNlKS5tYXAoZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdHJldHVybiBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZChlbGVtZW50LCBvcHRpb25zKVxuXHR9KVxufVxuXG5mdW5jdGlvbiBnZXRNZXJnZUZ1bmN0aW9uKGtleSwgb3B0aW9ucykge1xuXHRpZiAoIW9wdGlvbnMuY3VzdG9tTWVyZ2UpIHtcblx0XHRyZXR1cm4gZGVlcG1lcmdlXG5cdH1cblx0dmFyIGN1c3RvbU1lcmdlID0gb3B0aW9ucy5jdXN0b21NZXJnZShrZXkpO1xuXHRyZXR1cm4gdHlwZW9mIGN1c3RvbU1lcmdlID09PSAnZnVuY3Rpb24nID8gY3VzdG9tTWVyZ2UgOiBkZWVwbWVyZ2Vcbn1cblxuZnVuY3Rpb24gZ2V0RW51bWVyYWJsZU93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpIHtcblx0cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNcblx0XHQ/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KS5maWx0ZXIoZnVuY3Rpb24oc3ltYm9sKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodGFyZ2V0LCBzeW1ib2wpXG5cdFx0fSlcblx0XHQ6IFtdXG59XG5cbmZ1bmN0aW9uIGdldEtleXModGFyZ2V0KSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyh0YXJnZXQpLmNvbmNhdChnZXRFbnVtZXJhYmxlT3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpXG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5SXNPbk9iamVjdChvYmplY3QsIHByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHByb3BlcnR5IGluIG9iamVjdFxuXHR9IGNhdGNoKF8pIHtcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxufVxuXG4vLyBQcm90ZWN0cyBmcm9tIHByb3RvdHlwZSBwb2lzb25pbmcgYW5kIHVuZXhwZWN0ZWQgbWVyZ2luZyB1cCB0aGUgcHJvdG90eXBlIGNoYWluLlxuZnVuY3Rpb24gcHJvcGVydHlJc1Vuc2FmZSh0YXJnZXQsIGtleSkge1xuXHRyZXR1cm4gcHJvcGVydHlJc09uT2JqZWN0KHRhcmdldCwga2V5KSAvLyBQcm9wZXJ0aWVzIGFyZSBzYWZlIHRvIG1lcmdlIGlmIHRoZXkgZG9uJ3QgZXhpc3QgaW4gdGhlIHRhcmdldCB5ZXQsXG5cdFx0JiYgIShPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIGtleSkgLy8gdW5zYWZlIGlmIHRoZXkgZXhpc3QgdXAgdGhlIHByb3RvdHlwZSBjaGFpbixcblx0XHRcdCYmIE9iamVjdC5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHRhcmdldCwga2V5KSkgLy8gYW5kIGFsc28gdW5zYWZlIGlmIHRoZXkncmUgbm9uZW51bWVyYWJsZS5cbn1cblxuZnVuY3Rpb24gbWVyZ2VPYmplY3QodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcblx0dmFyIGRlc3RpbmF0aW9uID0ge307XG5cdGlmIChvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0KHRhcmdldCkpIHtcblx0XHRnZXRLZXlzKHRhcmdldCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcblx0XHRcdGRlc3RpbmF0aW9uW2tleV0gPSBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZCh0YXJnZXRba2V5XSwgb3B0aW9ucyk7XG5cdFx0fSk7XG5cdH1cblx0Z2V0S2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG5cdFx0aWYgKHByb3BlcnR5SXNVbnNhZmUodGFyZ2V0LCBrZXkpKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAocHJvcGVydHlJc09uT2JqZWN0KHRhcmdldCwga2V5KSAmJiBvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0KHNvdXJjZVtrZXldKSkge1xuXHRcdFx0ZGVzdGluYXRpb25ba2V5XSA9IGdldE1lcmdlRnVuY3Rpb24oa2V5LCBvcHRpb25zKSh0YXJnZXRba2V5XSwgc291cmNlW2tleV0sIG9wdGlvbnMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZXN0aW5hdGlvbltrZXldID0gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQoc291cmNlW2tleV0sIG9wdGlvbnMpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBkZXN0aW5hdGlvblxufVxuXG5mdW5jdGlvbiBkZWVwbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdG9wdGlvbnMuYXJyYXlNZXJnZSA9IG9wdGlvbnMuYXJyYXlNZXJnZSB8fCBkZWZhdWx0QXJyYXlNZXJnZTtcblx0b3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdCA9IG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3QgfHwgaXNNZXJnZWFibGVPYmplY3Q7XG5cdC8vIGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkIGlzIGFkZGVkIHRvIGBvcHRpb25zYCBzbyB0aGF0IGN1c3RvbSBhcnJheU1lcmdlKClcblx0Ly8gaW1wbGVtZW50YXRpb25zIGNhbiB1c2UgaXQuIFRoZSBjYWxsZXIgbWF5IG5vdCByZXBsYWNlIGl0LlxuXHRvcHRpb25zLmNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkID0gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQ7XG5cblx0dmFyIHNvdXJjZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHNvdXJjZSk7XG5cdHZhciB0YXJnZXRJc0FycmF5ID0gQXJyYXkuaXNBcnJheSh0YXJnZXQpO1xuXHR2YXIgc291cmNlQW5kVGFyZ2V0VHlwZXNNYXRjaCA9IHNvdXJjZUlzQXJyYXkgPT09IHRhcmdldElzQXJyYXk7XG5cblx0aWYgKCFzb3VyY2VBbmRUYXJnZXRUeXBlc01hdGNoKSB7XG5cdFx0cmV0dXJuIGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKHNvdXJjZSwgb3B0aW9ucylcblx0fSBlbHNlIGlmIChzb3VyY2VJc0FycmF5KSB7XG5cdFx0cmV0dXJuIG9wdGlvbnMuYXJyYXlNZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucylcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbWVyZ2VPYmplY3QodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpXG5cdH1cbn1cblxuZGVlcG1lcmdlLmFsbCA9IGZ1bmN0aW9uIGRlZXBtZXJnZUFsbChhcnJheSwgb3B0aW9ucykge1xuXHRpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXknKVxuXHR9XG5cblx0cmV0dXJuIGFycmF5LnJlZHVjZShmdW5jdGlvbihwcmV2LCBuZXh0KSB7XG5cdFx0cmV0dXJuIGRlZXBtZXJnZShwcmV2LCBuZXh0LCBvcHRpb25zKVxuXHR9LCB7fSlcbn07XG5cbnZhciBkZWVwbWVyZ2VfMSA9IGRlZXBtZXJnZTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWVwbWVyZ2VfMTtcbiIsImltcG9ydCB7IGVzY2FwZSB9IGZyb20gJ2h0bWwtZXNjYXBlcic7XG5pbXBvcnQgbnVtT25seSBmcm9tICdudW0tb25seSc7XG5pbXBvcnQgbWVyZ2VEZWVwIGZyb20gJ2RlZXBtZXJnZSc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBkZWxpbWl0ZXJzOiB7XG4gICAgZG90OiBcIi5cIixcbiAgICBkYXNoOiBcIi1cIlxuICB9LFxuICBoaWRkZW5SYW5nZToge1xuICAgIHN0YXJ0OiAzLFxuICAgIGVuZDogMTBcbiAgfSxcbiAgb25GYWlsOiAodmFsdWUpID0+IHZhbHVlLFxuICBoaWRkZW5LZXk6IFwiKlwiLFxuICBoaWRkZW46IGZhbHNlLFxuICBlc2NhcGU6IGZhbHNlXG59O1xuZnVuY3Rpb24gbWVyZ2VPcHRpb25zKGN1c3RvbU9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0gbWVyZ2VEZWVwKFxuICAgIGRlZmF1bHRPcHRpb25zLFxuICAgIGN1c3RvbU9wdGlvbnNcbiAgKTtcbiAgaWYgKG9wdGlvbnMuaGlkZGVuKSB7XG4gICAgaWYgKGlzTmFOKG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQpIHx8IG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQgPCAwIHx8IG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQgPiAxMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3B0aW9uIFwiaGlkZGVuUmFuZ2Uuc3RhcnRcIiBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAuJyk7XG4gICAgfVxuICAgIGlmIChpc05hTihvcHRpb25zLmhpZGRlblJhbmdlLmVuZCkgfHwgb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQgPCAwIHx8IG9wdGlvbnMuaGlkZGVuUmFuZ2UuZW5kID4gMTApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09wdGlvbiBcImhpZGRlblJhbmdlLmVuZFwiIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxMC4nKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQgPiBvcHRpb25zLmhpZGRlblJhbmdlLmVuZCkge1xuICAgICAgY29uc3QgYXV4ID0gb3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydDtcbiAgICAgIG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQgPSBvcHRpb25zLmhpZGRlblJhbmdlLmVuZDtcbiAgICAgIG9wdGlvbnMuaGlkZGVuUmFuZ2UuZW5kID0gYXV4O1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMub25GYWlsICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgb3B0aW9uIFwib25GYWlsXCIgbXVzdCBiZSBhIGNhbGxiYWNrIGZ1bmN0aW9uLicpO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiBjcGZGbXQoY3BmU3RyaW5nLCBvcHRpb25zKSB7XG4gIGNvbnN0IENQRl9MRU5HVEggPSAxMTtcbiAgY29uc3QgY3BmQXJyYXkgPSBudW1Pbmx5KGNwZlN0cmluZykuc3BsaXQoXCJcIik7XG4gIGNvbnN0IGN1c3RvbU9wdGlvbnMgPSBtZXJnZU9wdGlvbnMob3B0aW9ucyk7XG4gIGlmIChjcGZBcnJheS5sZW5ndGggIT09IENQRl9MRU5HVEgpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgUGFyYW1ldGVyIFwiJHtjcGZTdHJpbmd9XCIgZG9lcyBub3QgY29udGFpbiAke0NQRl9MRU5HVEh9IGRpZ2l0cy5gKTtcbiAgICByZXR1cm4gY3VzdG9tT3B0aW9ucy5vbkZhaWwoY3BmU3RyaW5nLCBlcnJvcik7XG4gIH1cbiAgaWYgKGN1c3RvbU9wdGlvbnMuaGlkZGVuKSB7XG4gICAgZm9yIChsZXQgaSA9IGN1c3RvbU9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQ7IGkgPD0gY3VzdG9tT3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQ7IGkrKykge1xuICAgICAgY3BmQXJyYXlbaV0gPSBjdXN0b21PcHRpb25zLmhpZGRlbktleTtcbiAgICB9XG4gIH1cbiAgY3BmQXJyYXkuc3BsaWNlKDksIDAsIGN1c3RvbU9wdGlvbnMuZGVsaW1pdGVycy5kYXNoKTtcbiAgY3BmQXJyYXkuc3BsaWNlKDYsIDAsIGN1c3RvbU9wdGlvbnMuZGVsaW1pdGVycy5kb3QpO1xuICBjcGZBcnJheS5zcGxpY2UoMywgMCwgY3VzdG9tT3B0aW9ucy5kZWxpbWl0ZXJzLmRvdCk7XG4gIGNvbnN0IGNwZlByZXR0eSA9IGNwZkFycmF5LmpvaW4oXCJcIik7XG4gIGlmIChjdXN0b21PcHRpb25zLmVzY2FwZSkge1xuICAgIHJldHVybiBlc2NhcGUoY3BmUHJldHR5KTtcbiAgfVxuICByZXR1cm4gY3BmUHJldHR5O1xufVxuXG5leHBvcnQgeyBjcGZGbXQgYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWJXcHpJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12YldWeVoyVXRiM0IwYVc5dWN5NTBjeUlzSWk0dUwzTnlZeTlqY0dZdFptMTBMblJ6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCdFpYSm5aVVJsWlhBZ1puSnZiU0FuWkdWbGNHMWxjbWRsSnp0Y2JseHVkSGx3WlNCRVpXVndVR0Z5ZEdsaGJEeFVQaUE5SUh0Y2JpQWdXMUFnYVc0Z2EyVjViMllnVkYwL09pQkVaV1Z3VUdGeWRHbGhiRHhVVzFCZFBqdGNibjA3WEc1Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1FXTjBkV0ZzUTNCbVJtOXliV0YwZEdsdVowOXdkR2x2Ym5NOFQyNUZjbkpHWVd4c1ltRmphejRnZTF4dUlDQmtaV3hwYldsMFpYSnpPaUI3WEc0Z0lDQWdaR0Z6YURvZ2MzUnlhVzVuTzF4dUlDQWdJR1J2ZERvZ2MzUnlhVzVuTzF4dUlDQjlPMXh1SUNCbGMyTmhjR1U2SUdKdmIyeGxZVzQ3WEc0Z0lHaHBaR1JsYmpvZ1ltOXZiR1ZoYmp0Y2JpQWdhR2xrWkdWdVMyVjVPaUJ6ZEhKcGJtYzdYRzRnSUdocFpHUmxibEpoYm1kbE9pQjdYRzRnSUNBZ1pXNWtPaUJ1ZFcxaVpYSTdYRzRnSUNBZ2MzUmhjblE2SUc1MWJXSmxjanRjYmlBZ2ZUdGNiaUFnYjI1R1lXbHNPaUFvZG1Gc2RXVTZJSE4wY21sdVp5d2daWEp5YjNJNklFVnljbTl5S1NBOVBpQlBia1Z5Y2taaGJHeGlZV05yTzF4dWZWeHVYRzVsZUhCdmNuUWdkSGx3WlNCRGNHWkdiM0p0WVhSMGFXNW5UM0IwYVc5dWN6eFBia1Z5Y2taaGJHeGlZV05yUGlBOUlFUmxaWEJRWVhKMGFXRnNQRnh1SUNCQlkzUjFZV3hEY0daR2IzSnRZWFIwYVc1blQzQjBhVzl1Y3p4UGJrVnlja1poYkd4aVlXTnJQbHh1UGp0Y2JseHVZMjl1YzNRZ1pHVm1ZWFZzZEU5d2RHbHZibk02SUVGamRIVmhiRU53WmtadmNtMWhkSFJwYm1kUGNIUnBiMjV6UEhOMGNtbHVaejRnUFNCN1hHNGdJR1JsYkdsdGFYUmxjbk02SUh0Y2JpQWdJQ0JrYjNRNklDY3VKeXhjYmlBZ0lDQmtZWE5vT2lBbkxTY3NYRzRnSUgwc1hHNGdJR2hwWkdSbGJsSmhibWRsT2lCN1hHNGdJQ0FnYzNSaGNuUTZJRE1zWEc0Z0lDQWdaVzVrT2lBeE1DeGNiaUFnZlN4Y2JpQWdiMjVHWVdsc09pQW9kbUZzZFdVcElEMCtJSFpoYkhWbExGeHVJQ0JvYVdSa1pXNUxaWGs2SUNjcUp5eGNiaUFnYUdsa1pHVnVPaUJtWVd4elpTeGNiaUFnWlhOallYQmxPaUJtWVd4elpTeGNibjA3WEc1Y2JpOHFLbHh1SUNvZ1RXVnlaMlVnWTNWemRHOXRJRzl3ZEdsdmJuTWdkRzhnZEdobElHUmxabUYxYkhRZ2IyNWxjeTVjYmlBcUwxeHVablZ1WTNScGIyNGdiV1Z5WjJWUGNIUnBiMjV6UEU5dVJYSnlSbUZzYkdKaFkycytLRnh1SUNCamRYTjBiMjFQY0hScGIyNXpPaUJEY0daR2IzSnRZWFIwYVc1blQzQjBhVzl1Y3p4UGJrVnlja1poYkd4aVlXTnJQaUE5SUh0OUxGeHVLVG9nUVdOMGRXRnNRM0JtUm05eWJXRjBkR2x1WjA5d2RHbHZibk04VDI1RmNuSkdZV3hzWW1GamF6NGdlMXh1SUNCamIyNXpkQ0J2Y0hScGIyNXpJRDBnYldWeVoyVkVaV1Z3S0Z4dUlDQWdJR1JsWm1GMWJIUlBjSFJwYjI1ekxGeHVJQ0FnSUdOMWMzUnZiVTl3ZEdsdmJuTXNYRzRnSUNrZ1lYTWdRV04wZFdGc1EzQm1SbTl5YldGMGRHbHVaMDl3ZEdsdmJuTThUMjVGY25KR1lXeHNZbUZqYXo0N1hHNWNiaUFnYVdZZ0tHOXdkR2x2Ym5NdWFHbGtaR1Z1S1NCN1hHNGdJQ0FnYVdZZ0tGeHVJQ0FnSUNBZ2FYTk9ZVTRvYjNCMGFXOXVjeTVvYVdSa1pXNVNZVzVuWlM1emRHRnlkQ2tnZkh4Y2JpQWdJQ0FnSUc5d2RHbHZibk11YUdsa1pHVnVVbUZ1WjJVdWMzUmhjblFnUENBd0lIeDhYRzRnSUNBZ0lDQnZjSFJwYjI1ekxtaHBaR1JsYmxKaGJtZGxMbk4wWVhKMElENGdNVEJjYmlBZ0lDQXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvSjA5d2RHbHZiaUJjSW1ocFpHUmxibEpoYm1kbExuTjBZWEowWENJZ2JYVnpkQ0JpWlNCaElHNTFiV0psY2lCaVpYUjNaV1Z1SURBZ1lXNWtJREV3TGljcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaGNiaUFnSUNBZ0lHbHpUbUZPS0c5d2RHbHZibk11YUdsa1pHVnVVbUZ1WjJVdVpXNWtLU0I4ZkZ4dUlDQWdJQ0FnYjNCMGFXOXVjeTVvYVdSa1pXNVNZVzVuWlM1bGJtUWdQQ0F3SUh4OFhHNGdJQ0FnSUNCdmNIUnBiMjV6TG1ocFpHUmxibEpoYm1kbExtVnVaQ0ErSURFd1hHNGdJQ0FnS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1ZIbHdaVVZ5Y205eUtDZFBjSFJwYjI0Z1hDSm9hV1JrWlc1U1lXNW5aUzVsYm1SY0lpQnRkWE4wSUdKbElHRWdiblZ0WW1WeUlHSmxkSGRsWlc0Z01DQmhibVFnTVRBdUp5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRzl3ZEdsdmJuTXVhR2xrWkdWdVVtRnVaMlV1YzNSaGNuUWdQaUJ2Y0hScGIyNXpMbWhwWkdSbGJsSmhibWRsTG1WdVpDa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1lYVjRJRDBnYjNCMGFXOXVjeTVvYVdSa1pXNVNZVzVuWlM1emRHRnlkRHRjYmlBZ0lDQWdJRzl3ZEdsdmJuTXVhR2xrWkdWdVVtRnVaMlV1YzNSaGNuUWdQU0J2Y0hScGIyNXpMbWhwWkdSbGJsSmhibWRsTG1WdVpEdGNiaUFnSUNBZ0lHOXdkR2x2Ym5NdWFHbGtaR1Z1VW1GdVoyVXVaVzVrSUQwZ1lYVjRPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJR2xtSUNoMGVYQmxiMllnYjNCMGFXOXVjeTV2YmtaaGFXd2dJVDA5SUNkbWRXNWpkR2x2YmljcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1ZIbHdaVVZ5Y205eUtDZFVhR1VnYjNCMGFXOXVJRndpYjI1R1lXbHNYQ0lnYlhWemRDQmlaU0JoSUdOaGJHeGlZV05ySUdaMWJtTjBhVzl1TGljcE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHOXdkR2x2Ym5NN1hHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJRzFsY21kbFQzQjBhVzl1Y3p0Y2JpSXNJbWx0Y0c5eWRDQjdJR1Z6WTJGd1pTQmhjeUJsYzJOaGNHVklWRTFNSUgwZ1puSnZiU0FuYUhSdGJDMWxjMk5oY0dWeUp6dGNibWx0Y0c5eWRDQnVkVzFQYm14NUlHWnliMjBnSjI1MWJTMXZibXg1Snp0Y2JseHVhVzF3YjNKMElHMWxjbWRsVDNCMGFXOXVjeUJtY205dElDY3VMMjFsY21kbExXOXdkR2x2Ym5Nbk8xeHVhVzF3YjNKMElIUjVjR1VnZXlCRGNHWkdiM0p0WVhSMGFXNW5UM0IwYVc5dWN5QjlJR1p5YjIwZ0p5NHZiV1Z5WjJVdGIzQjBhVzl1Y3ljN1hHNWNiaThxS2x4dUlDb2dSbTl5YldGMElHRWdaMmwyWlc0Z1ExQkdJR05vWVhJZ2MyVnhkV1Z1WTJVdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdOd1prWnRkRHhQYmtWeWNrWmhiR3hpWVdOcklEMGdjM1J5YVc1blBpaGNiaUFnWTNCbVUzUnlhVzVuT2lCemRISnBibWNzWEc0Z0lHOXdkR2x2Ym5NL09pQkRjR1pHYjNKdFlYUjBhVzVuVDNCMGFXOXVjenhQYmtWeWNrWmhiR3hpWVdOclBpeGNiaWs2SUhOMGNtbHVaeUI3WEc0Z0lHTnZibk4wSUVOUVJsOU1SVTVIVkVnZ1BTQXhNVHRjYmlBZ1kyOXVjM1FnWTNCbVFYSnlZWGtnUFNCdWRXMVBibXg1S0dOd1psTjBjbWx1WnlrdWMzQnNhWFFvSnljcE8xeHVJQ0JqYjI1emRDQmpkWE4wYjIxUGNIUnBiMjV6SUQwZ2JXVnlaMlZQY0hScGIyNXpLRzl3ZEdsdmJuTXBPMXh1WEc0Z0lHbG1JQ2hqY0daQmNuSmhlUzVzWlc1bmRHZ2dJVDA5SUVOUVJsOU1SVTVIVkVncElIdGNiaUFnSUNCamIyNXpkQ0JsY25KdmNpQTlJRzVsZHlCRmNuSnZjaWhnVUdGeVlXMWxkR1Z5SUZ3aUpIdGpjR1pUZEhKcGJtZDlYQ0lnWkc5bGN5QnViM1FnWTI5dWRHRnBiaUFrZTBOUVJsOU1SVTVIVkVoOUlHUnBaMmwwY3k1Z0tUdGNibHh1SUNBZ0lISmxkSFZ5YmlCamRYTjBiMjFQY0hScGIyNXpMbTl1Um1GcGJDaGpjR1pUZEhKcGJtY3NJR1Z5Y205eUtTQmhjeUJ6ZEhKcGJtYzdYRzRnSUgxY2JseHVJQ0JwWmlBb1kzVnpkRzl0VDNCMGFXOXVjeTVvYVdSa1pXNHBJSHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnWTNWemRHOXRUM0IwYVc5dWN5NW9hV1JrWlc1U1lXNW5aUzV6ZEdGeWREc2dhU0E4UFNCamRYTjBiMjFQY0hScGIyNXpMbWhwWkdSbGJsSmhibWRsTG1WdVpEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamNHWkJjbkpoZVZ0cFhTQTlJR04xYzNSdmJVOXdkR2x2Ym5NdWFHbGtaR1Z1UzJWNU8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lHTndaa0Z5Y21GNUxuTndiR2xqWlNnNUxDQXdMQ0JqZFhOMGIyMVBjSFJwYjI1ekxtUmxiR2x0YVhSbGNuTXVaR0Z6YUNrN1hHNGdJR053WmtGeWNtRjVMbk53YkdsalpTZzJMQ0F3TENCamRYTjBiMjFQY0hScGIyNXpMbVJsYkdsdGFYUmxjbk11Wkc5MEtUdGNiaUFnWTNCbVFYSnlZWGt1YzNCc2FXTmxLRE1zSURBc0lHTjFjM1J2YlU5d2RHbHZibk11WkdWc2FXMXBkR1Z5Y3k1a2IzUXBPMXh1SUNCamIyNXpkQ0JqY0daUWNtVjBkSGtnUFNCamNHWkJjbkpoZVM1cWIybHVLQ2NuS1R0Y2JseHVJQ0JwWmlBb1kzVnpkRzl0VDNCMGFXOXVjeTVsYzJOaGNHVXBJSHRjYmlBZ0lDQnlaWFIxY200Z1pYTmpZWEJsU0ZSTlRDaGpjR1pRY21WMGRIa3BPMXh1SUNCOVhHNWNiaUFnY21WMGRYSnVJR053WmxCeVpYUjBlVHRjYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1kzQm1SbTEwTzF4dUlsMHNJbTVoYldWeklqcGJJbVZ6WTJGd1pVaFVUVXdpWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3UVVGNVFrRXNUVUZCVFN4alFVRnhSQ3hIUVVGQk8wRkJRVUVzUlVGRGVrUXNWVUZCV1N4RlFVRkJPMEZCUVVFc1NVRkRWaXhIUVVGTExFVkJRVUVzUjBGQlFUdEJRVUZCTEVsQlEwd3NTVUZCVFN4RlFVRkJPMEZCUVVFc1IwRkRVanRCUVVGQkxFVkJRMEVzVjBGQllTeEZRVUZCTzBGQlFVRXNTVUZEV0N4TFFVRlBMRVZCUVVFc1EwRkJRVHRCUVVGQkxFbEJRMUFzUjBGQlN5eEZRVUZCTzBGQlFVRXNSMEZEVUR0QlFVRkJMRVZCUTBFc1RVRkJRU3hGUVVGUkxFTkJRVU1zUzBGQlZTeExRVUZCTEV0QlFVRTdRVUZCUVN4RlFVTnVRaXhUUVVGWExFVkJRVUVzUjBGQlFUdEJRVUZCTEVWQlExZ3NUVUZCVVN4RlFVRkJMRXRCUVVFN1FVRkJRU3hGUVVOU0xFMUJRVkVzUlVGQlFUdEJRVU5XTEVOQlFVRTdRVUZMUVN4VFFVRlRMRmxCUVVFc1EwRkRVQ3hoUVVGeFJDeEhRVUZCTEVWQlExWXNSVUZCUVR0QlFVTXpReXhGUVVGQkxFMUJRVTBzVDBGQlZTeEhRVUZCTEZOQlFVRTdRVUZCUVN4SlFVTmtMR05CUVVFN1FVRkJRU3hKUVVOQk8wRkJRVUVzUjBGRFJqdEJRVVZCTEVWQlFVRXNTVUZCU1N4UlFVRlJMRTFCUVZFc1JVRkJRVHRCUVVOc1FpeEpRVUZCTEVsQlEwVXNTMEZCVFN4RFFVRkJMRTlCUVVFc1EwRkJVU3hYUVVGWkxFTkJRVUVzUzBGQlN5eERRVU12UWl4SlFVRkJMRTlCUVVFc1EwRkJVU3hYUVVGWkxFTkJRVUVzUzBGQlFTeEhRVUZSTEVOQlF6VkNMRWxCUVVFc1QwRkJRU3hEUVVGUkxGZEJRVmtzUTBGQlFTeExRVUZCTEVkQlFWRXNSVUZETlVJc1JVRkJRVHRCUVVOQkxFMUJRVTBzVFVGQlFTeEpRVUZKTEZWQlFWVXNLMFJCUVN0RUxFTkJRVUU3UVVGQlFUdEJRVWR5Uml4SlFVRkJMRWxCUTBVc1MwRkJUU3hEUVVGQkxFOUJRVUVzUTBGQlVTeFhRVUZaTEVOQlFVRXNSMEZCUnl4RFFVTTNRaXhKUVVGQkxFOUJRVUVzUTBGQlVTeFhRVUZaTEVOQlFVRXNSMEZCUVN4SFFVRk5MRU5CUXpGQ0xFbEJRVUVzVDBGQlFTeERRVUZSTEZkQlFWa3NRMEZCUVN4SFFVRkJMRWRCUVUwc1JVRkRNVUlzUlVGQlFUdEJRVU5CTEUxQlFVMHNUVUZCUVN4SlFVRkpMRlZCUVZVc05rUkJRVFpFTEVOQlFVRTdRVUZCUVR0QlFVZHVSaXhKUVVGQkxFbEJRVWtzVDBGQlVTeERRVUZCTEZkQlFVRXNRMEZCV1N4TFFVRlJMRWRCUVVFc1QwRkJRU3hEUVVGUkxGbEJRVmtzUjBGQlN5eEZRVUZCTzBGQlEzWkVMRTFCUVUwc1RVRkJRU3hIUVVGQkxFZEJRVTBzVVVGQlVTeFhRVUZaTEVOQlFVRXNTMEZCUVR0QlFVTm9ReXhOUVVGUkxFOUJRVUVzUTBGQlFTeFhRVUZCTEVOQlFWa3NTMEZCVVN4SFFVRkJMRTlCUVVFc1EwRkJVU3hYUVVGWkxFTkJRVUVzUjBGQlFUdEJRVU5vUkN4TlFVRkJMRTlCUVVFc1EwRkJVU3haUVVGWkxFZEJRVTBzUjBGQlFTeEhRVUZCTzBGQlFVRTdRVUZETlVJN1FVRkhSaXhGUVVGSkxFbEJRVUVzVDBGQlR5eFBRVUZSTEVOQlFVRXNUVUZCUVN4TFFVRlhMRlZCUVZrc1JVRkJRVHRCUVVONFF5eEpRVUZOTEUxQlFVRXNTVUZCU1N4VlFVRlZMR3RFUVVGclJDeERRVUZCTzBGQlFVRTdRVUZIZUVVc1JVRkJUeXhQUVVGQkxFOUJRVUU3UVVGRFZEczdRVU4yUlVFc1UwRkJVeXhOUVVGQkxFTkJRMUFzVjBGRFFTeFBRVU5STEVWQlFVRTdRVUZEVWl4RlFVRkJMRTFCUVUwc1ZVRkJZU3hIUVVGQkxFVkJRVUU3UVVGRGJrSXNSVUZCUVN4TlFVRk5MRkZCUVZjc1IwRkJRU3hQUVVGQkxFTkJRVkVzVTBGQlV5eERRVUZCTEVOQlFVVXNUVUZCVFN4RlFVRkZMRU5CUVVFN1FVRkROVU1zUlVGQlRTeE5RVUZCTEdGQlFVRXNSMEZCWjBJc1lVRkJZU3hQUVVGUExFTkJRVUU3UVVGRk1VTXNSVUZCU1N4SlFVRkJMRkZCUVVFc1EwRkJVeXhYUVVGWExGVkJRVmtzUlVGQlFUdEJRVU5zUXl4SlFVRkJMRTFCUVUwc1VVRkJVU3hKUVVGSkxFdEJRVUVzUTBGQlRTeGpRVUZqTEZOQlFWTXNRMEZCUVN4dFFrRkJRU3hGUVVGelFpeFZRVUZWTEVOQlFWVXNVVUZCUVN4RFFVRkJMRU5CUVVFN1FVRkZla1lzU1VGQlR5eFBRVUZCTEdGQlFVRXNRMEZCWXl4TlFVRlBMRU5CUVVFc1UwRkJRU3hGUVVGWExFdEJRVXNzUTBGQlFUdEJRVUZCTzBGQlJ6bERMRVZCUVVFc1NVRkJTU3hqUVVGakxFMUJRVkVzUlVGQlFUdEJRVU40UWl4SlFVRlRMRXRCUVVFc1NVRkJRU3hEUVVGQkxFZEJRVWtzWTBGQll5eFhRVUZaTEVOQlFVRXNTMEZCUVN4RlFVRlBMRXRCUVVzc1lVRkJZeXhEUVVGQkxGZEJRVUVzUTBGQldTeExRVUZMTEVOQlFVc3NSVUZCUVN4RlFVRkJPMEZCUTNKR0xFMUJRVk1zVVVGQlFTeERRVUZCTEVOQlFVTXNTVUZCU1N4aFFVRmpMRU5CUVVFc1UwRkJRVHRCUVVGQk8wRkJRemxDTzBGQlIwWXNSVUZCUVN4UlFVRkJMRU5CUVZNc1RVRkJUeXhEUVVGQkxFTkJRVUVzUlVGQlJ5eERRVUZITEVWQlFVRXNZVUZCUVN4RFFVRmpMRmRCUVZjc1NVRkJTU3hEUVVGQk8wRkJRMjVFTEVWQlFVRXNVVUZCUVN4RFFVRlRMRTFCUVU4c1EwRkJRU3hEUVVGQkxFVkJRVWNzUTBGQlJ5eEZRVUZCTEdGQlFVRXNRMEZCWXl4WFFVRlhMRWRCUVVjc1EwRkJRVHRCUVVOc1JDeEZRVUZCTEZGQlFVRXNRMEZCVXl4TlFVRlBMRU5CUVVFc1EwRkJRU3hGUVVGSExFTkJRVWNzUlVGQlFTeGhRVUZCTEVOQlFXTXNWMEZCVnl4SFFVRkhMRU5CUVVFN1FVRkRiRVFzUlVGQlRTeE5RVUZCTEZOQlFVRXNSMEZCV1N4UlFVRlRMRU5CUVVFc1NVRkJRU3hEUVVGTExFVkJRVVVzUTBGQlFUdEJRVVZzUXl4RlFVRkJMRWxCUVVrc1kwRkJZeXhOUVVGUkxFVkJRVUU3UVVGRGVFSXNTVUZCUVN4UFFVRlBRU3hQUVVGWExGTkJRVk1zUTBGQlFUdEJRVUZCTzBGQlJ6ZENMRVZCUVU4c1QwRkJRU3hUUVVGQk8wRkJRMVE3T3pzN0luMD1cbiIsImltcG9ydCBtZXJnZURlZXAgZnJvbSAnZGVlcG1lcmdlJztcblxuZXhwb3J0IGludGVyZmFjZSBBY3R1YWxDcGZHZW5lcmF0b3JPcHRpb25zIHtcbiAgZm9ybWF0OiBib29sZWFuO1xuICBwcmVmaXg6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ3BmR2VuZXJhdG9yT3B0aW9ucyA9IFBhcnRpYWw8QWN0dWFsQ3BmR2VuZXJhdG9yT3B0aW9ucz47XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBmb3JtYXQ6IGZhbHNlLFxuICBwcmVmaXg6ICcnLFxufTtcblxuLyoqXG4gKiBNZXJnZSBjdXN0b20gb3B0aW9ucyB0byB0aGUgZGVmYXVsdCBvbmVzLlxuICovXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMoY3VzdG9tT3B0aW9uczogQ3BmR2VuZXJhdG9yT3B0aW9ucyA9IHt9KTogQWN0dWFsQ3BmR2VuZXJhdG9yT3B0aW9ucyB7XG4gIHJldHVybiBtZXJnZURlZXAoZGVmYXVsdE9wdGlvbnMsIGN1c3RvbU9wdGlvbnMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZXJnZU9wdGlvbnM7XG4iLCJpbXBvcnQgY3BmRm10IGZyb20gJ0BsYWN1c3NvZnQvY3BmLWZtdCc7XG5pbXBvcnQgbnVtT25seSBmcm9tICdudW0tb25seSc7XG5cbmltcG9ydCBtZXJnZU9wdGlvbnMgZnJvbSAnLi9tZXJnZS1vcHRpb25zJztcbmltcG9ydCB0eXBlIHsgQ3BmR2VuZXJhdG9yT3B0aW9ucyB9IGZyb20gJy4vbWVyZ2Utb3B0aW9ucyc7XG5pbXBvcnQgbnVtYmVyR2VuZXJhdG9yIGZyb20gJy4vbnVtYmVyLWdlbmVyYXRvcic7XG5cbi8qKlxuICogR2VuZXJhdGUgYSB2YWxpZCBDUEYgKEJyYXppbGlhbiBJRCBkb2N1bWVudCkgbnVtZXJpYyBzZXF1ZW5jZS5cbiAqL1xuZnVuY3Rpb24gY3BmR2VuKG9wdGlvbnM/OiBDcGZHZW5lcmF0b3JPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgdXNlck9wdGlvbnMgPSBtZXJnZU9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGJhc2VTZXF1ZW5jZSA9IG51bU9ubHkodXNlck9wdGlvbnMucHJlZml4KTtcbiAgY29uc3QgcHJlZml4TGVuZ3RoID0gYmFzZVNlcXVlbmNlLmxlbmd0aDtcblxuICBpZiAocHJlZml4TGVuZ3RoIDwgMCB8fCBwcmVmaXhMZW5ndGggPiA5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPcHRpb24gXCJwcmVmaXhcIiBtdXN0IGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgYmV0d2VlbiAxIGFuZCA5IGRpZ2l0cy4nKTtcbiAgfVxuXG4gIGNvbnN0IGNwZlNlcXVlbmNlID0gYmFzZVNlcXVlbmNlXG4gICAgLnNwbGl0KCcnKVxuICAgIC5tYXAoTnVtYmVyKVxuICAgIC5jb25jYXQobnVtYmVyR2VuZXJhdG9yKDkgLSBwcmVmaXhMZW5ndGgpKTtcbiAgWzksIDEwXS5mb3JFYWNoKChuZXh0TnVtSW5kZXgpID0+IHtcbiAgICBsZXQgZmFjdG9yID0gbmV4dE51bUluZGV4ICsgMTtcbiAgICBsZXQgc3VtID0gMDtcblxuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgbmV4dE51bUluZGV4OyBuKyssIGZhY3Rvci0tKSB7XG4gICAgICBzdW0gKz0gY3BmU2VxdWVuY2Vbbl0gKiBmYWN0b3I7XG4gICAgfVxuXG4gICAgY29uc3QgcmVtYWluZGVyID0gMTEgLSAoc3VtICUgMTEpO1xuICAgIGNwZlNlcXVlbmNlLnB1c2gocmVtYWluZGVyID4gOSA/IDAgOiByZW1haW5kZXIpO1xuICB9KTtcblxuICByZXR1cm4gdXNlck9wdGlvbnMuZm9ybWF0ID8gY3BmRm10KGNwZlNlcXVlbmNlLmpvaW4oJycpKSA6IGNwZlNlcXVlbmNlLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcGZHZW47XG4iLCIvKipcbiAqIEdlbmVyYXRlIGFuIGFycmF5IG9mIHJhbmRvbSBudW1iZXJzIChhcyBzdHJpbmcpIGJldHdlZW4gMCBhbmQgIDkuXG4gKi9cbmZ1bmN0aW9uIG51bWJlckdlbmVyYXRvcihsZW5ndGg6IG51bWJlcik6IG51bWJlcltdIHtcbiAgY29uc3QgbnVtZXJpY1NlcXVlbmNlOiBudW1iZXJbXSA9IFtdO1xuXG4gIHdoaWxlIChudW1lcmljU2VxdWVuY2UubGVuZ3RoIDwgbGVuZ3RoKSB7XG4gICAgY29uc3QgcmFuZG9tID0gTWF0aC5yYW5kb20oKSAqIDEwO1xuICAgIGNvbnN0IGludGVnZXIgPSBNYXRoLmZsb29yKHJhbmRvbSk7XG5cbiAgICBudW1lcmljU2VxdWVuY2UucHVzaChpbnRlZ2VyKTtcbiAgfVxuXG4gIHJldHVybiBudW1lcmljU2VxdWVuY2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG51bWJlckdlbmVyYXRvcjtcbiJdLCJuYW1lcyI6WyJyZXBsYWNlIiwiY2EiLCJlc2NhIiwicGUiLCJtIiwiYnVpbGQiLCJ0YXJnZXQiLCJTdHJpbmciLCJpc01lcmdlYWJsZU9iamVjdCIsInZhbHVlIiwiaXNOb25OdWxsT2JqZWN0Iiwic3RyaW5nVmFsdWUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCIkJHR5cGVvZiIsIlJFQUNUX0VMRU1FTlRfVFlQRSIsImlzUmVhY3RFbGVtZW50IiwiaXNTcGVjaWFsIiwiU3ltYm9sIiwiZm9yIiwiY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQiLCJvcHRpb25zIiwiY2xvbmUiLCJkZWVwbWVyZ2UiLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJkZWZhdWx0QXJyYXlNZXJnZSIsInNvdXJjZSIsImNvbmNhdCIsIm1hcCIsImVsZW1lbnQiLCJnZXRLZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsInN5bWJvbCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiZ2V0RW51bWVyYWJsZU93blByb3BlcnR5U3ltYm9scyIsInByb3BlcnR5SXNPbk9iamVjdCIsIm9iamVjdCIsInByb3BlcnR5IiwiXyIsIm1lcmdlT2JqZWN0IiwiZGVzdGluYXRpb24iLCJmb3JFYWNoIiwia2V5IiwiaGFzT3duUHJvcGVydHkiLCJwcm9wZXJ0eUlzVW5zYWZlIiwiY3VzdG9tTWVyZ2UiLCJnZXRNZXJnZUZ1bmN0aW9uIiwiYXJyYXlNZXJnZSIsInNvdXJjZUlzQXJyYXkiLCJhbGwiLCJhcnJheSIsIkVycm9yIiwicmVkdWNlIiwicHJldiIsIm5leHQiLCJjanMiLCJkZWZhdWx0T3B0aW9ucyIsImRlbGltaXRlcnMiLCJkb3QiLCJkYXNoIiwiaGlkZGVuUmFuZ2UiLCJzdGFydCIsImVuZCIsIm9uRmFpbCIsImhpZGRlbktleSIsImhpZGRlbiIsImVzY2FwZSIsImNwZkZtdCIsImNwZlN0cmluZyIsImNwZkFycmF5IiwibnVtT25seSIsInNwbGl0IiwiY3VzdG9tT3B0aW9ucyIsIm1lcmdlRGVlcCIsImlzTmFOIiwiVHlwZUVycm9yIiwiYXV4IiwibWVyZ2VPcHRpb25zIiwibGVuZ3RoIiwiZXJyb3IiLCJpIiwic3BsaWNlIiwiY3BmUHJldHR5Iiwiam9pbiIsImVzIiwiZm9ybWF0IiwicHJlZml4IiwidXNlck9wdGlvbnMiLCJiYXNlU2VxdWVuY2UiLCJwcmVmaXhMZW5ndGgiLCJjcGZTZXF1ZW5jZSIsIk51bWJlciIsIm51bWVyaWNTZXF1ZW5jZSIsInJhbmRvbSIsIk1hdGgiLCJpbnRlZ2VyIiwiZmxvb3IiLCJwdXNoIiwibnVtYmVyR2VuZXJhdG9yIiwibmV4dE51bUluZGV4IiwiZmFjdG9yIiwic3VtIiwibiIsInJlbWFpbmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O3VPQXNCQSxNQUFNQSxRQUFDQSxHQUFXLEdBSVpDLEVBQUssV0FFTEMsRUFBTyxDQUNYLElBQUssUUFDTCxJQUFLLE9BQ0wsSUFBSyxPQUNMLElBQUssUUFDTCxJ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