137 lines
362 KiB
JavaScript
137 lines
362 KiB
JavaScript
/*
|
||
* ATTENTION: An "eval-source-map" devtool has been used.
|
||
* This devtool is neither made for production nor for readable output files.
|
||
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
||
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
||
* or disable the default devtool with "devtool: false".
|
||
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
||
*/
|
||
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app/page"],{
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FCommitSection.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FContact.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FNav.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FProjects.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&server=false!":
|
||
/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FCommitSection.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FContact.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FNav.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FProjects.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&server=false! ***!
|
||
\**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
||
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./components/CommitSection.tsx */ \"(app-pages-browser)/./components/CommitSection.tsx\"));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./components/Contact.tsx */ \"(app-pages-browser)/./components/Contact.tsx\"));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./components/Nav.tsx */ \"(app-pages-browser)/./components/Nav.tsx\"));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./components/Projects.tsx */ \"(app-pages-browser)/./components/Projects.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWNsaWVudC1lbnRyeS1sb2FkZXIuanM/bW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZ3aWxsJTJGRG9jdW1lbnRzJTJGd2lsbGlhbS1tYXJjaCUyRmNvbXBvbmVudHMlMkZDb21taXRTZWN0aW9uLnRzeCUyMiUyQyUyMmlkcyUyMiUzQSU1QiUyMmRlZmF1bHQlMjIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZ3aWxsJTJGRG9jdW1lbnRzJTJGd2lsbGlhbS1tYXJjaCUyRmNvbXBvbmVudHMlMkZDb250YWN0LnRzeCUyMiUyQyUyMmlkcyUyMiUzQSU1QiUyMmRlZmF1bHQlMjIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZ3aWxsJTJGRG9jdW1lbnRzJTJGd2lsbGlhbS1tYXJjaCUyRmNvbXBvbmVudHMlMkZOYXYudHN4JTIyJTJDJTIyaWRzJTIyJTNBJTVCJTIyZGVmYXVsdCUyMiU1RCU3RCZtb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZVc2VycyUyRndpbGwlMkZEb2N1bWVudHMlMkZ3aWxsaWFtLW1hcmNoJTJGY29tcG9uZW50cyUyRlByb2plY3RzLnRzeCUyMiUyQyUyMmlkcyUyMiUzQSU1QiUyMmRlZmF1bHQlMjIlNUQlN0Qmc2VydmVyPWZhbHNlISIsIm1hcHBpbmdzIjoiQUFBQSxzTEFBa0k7QUFDbEk7QUFDQSwwS0FBNEg7QUFDNUg7QUFDQSxrS0FBd0g7QUFDeEg7QUFDQSw0S0FBNkgiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLz9iOTVhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiLCB3ZWJwYWNrRXhwb3J0czogW1wiZGVmYXVsdFwiXSAqLyBcIi9Vc2Vycy93aWxsL0RvY3VtZW50cy93aWxsaWFtLW1hcmNoL2NvbXBvbmVudHMvQ29tbWl0U2VjdGlvbi50c3hcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiwgd2VicGFja0V4cG9ydHM6IFtcImRlZmF1bHRcIl0gKi8gXCIvVXNlcnMvd2lsbC9Eb2N1bWVudHMvd2lsbGlhbS1tYXJjaC9jb21wb25lbnRzL0NvbnRhY3QudHN4XCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIsIHdlYnBhY2tFeHBvcnRzOiBbXCJkZWZhdWx0XCJdICovIFwiL1VzZXJzL3dpbGwvRG9jdW1lbnRzL3dpbGxpYW0tbWFyY2gvY29tcG9uZW50cy9OYXYudHN4XCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIsIHdlYnBhY2tFeHBvcnRzOiBbXCJkZWZhdWx0XCJdICovIFwiL1VzZXJzL3dpbGwvRG9jdW1lbnRzL3dpbGxpYW0tbWFyY2gvY29tcG9uZW50cy9Qcm9qZWN0cy50c3hcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FCommitSection.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FContact.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FNav.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FProjects.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&server=false!\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/build/polyfills/process.js ***!
|
||
\***********************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _global_process, _global_process1;\nmodule.exports = ((_global_process = __webpack_require__.g.process) == null ? void 0 : _global_process.env) && typeof ((_global_process1 = __webpack_require__.g.process) == null ? void 0 : _global_process1.env) === \"object\" ? __webpack_require__.g.process : __webpack_require__(/*! next/dist/compiled/process */ \"(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js\");\n\n//# sourceMappingURL=process.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLHFDQUFxQyxxQkFBTSxpRkFBaUYscUJBQU0sa0VBQWtFLHFCQUFNLFdBQVcsbUJBQU8sQ0FBQyw0R0FBNEI7O0FBRXpQIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanM/MjczNCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfZ2xvYmFsX3Byb2Nlc3MsIF9nbG9iYWxfcHJvY2VzczE7XG5tb2R1bGUuZXhwb3J0cyA9ICgoX2dsb2JhbF9wcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfZ2xvYmFsX3Byb2Nlc3MuZW52KSAmJiB0eXBlb2YgKChfZ2xvYmFsX3Byb2Nlc3MxID0gZ2xvYmFsLnByb2Nlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfZ2xvYmFsX3Byb2Nlc3MxLmVudikgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwucHJvY2VzcyA6IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcHJvY2Vzc1wiKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvY2Vzcy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/process/browser.js ***!
|
||
\************************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){var e={229:function(e){var t=e.exports={};var r;var n;function defaultSetTimout(){throw new Error(\"setTimeout has not been defined\")}function defaultClearTimeout(){throw new Error(\"clearTimeout has not been defined\")}(function(){try{if(typeof setTimeout===\"function\"){r=setTimeout}else{r=defaultSetTimout}}catch(e){r=defaultSetTimout}try{if(typeof clearTimeout===\"function\"){n=clearTimeout}else{n=defaultClearTimeout}}catch(e){n=defaultClearTimeout}})();function runTimeout(e){if(r===setTimeout){return setTimeout(e,0)}if((r===defaultSetTimout||!r)&&setTimeout){r=setTimeout;return setTimeout(e,0)}try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}function runClearTimeout(e){if(n===clearTimeout){return clearTimeout(e)}if((n===defaultClearTimeout||!n)&&clearTimeout){n=clearTimeout;return clearTimeout(e)}try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}var i=[];var o=false;var u;var a=-1;function cleanUpNextTick(){if(!o||!u){return}o=false;if(u.length){i=u.concat(i)}else{a=-1}if(i.length){drainQueue()}}function drainQueue(){if(o){return}var e=runTimeout(cleanUpNextTick);o=true;var t=i.length;while(t){u=i;i=[];while(++a<t){if(u){u[a].run()}}a=-1;t=i.length}u=null;o=false;runClearTimeout(e)}t.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1){for(var r=1;r<arguments.length;r++){t[r-1]=arguments[r]}}i.push(new Item(e,t));if(i.length===1&&!o){runTimeout(drainQueue)}};function Item(e,t){this.fun=e;this.array=t}Item.prototype.run=function(){this.fun.apply(null,this.array)};t.title=\"browser\";t.browser=true;t.env={};t.argv=[];t.version=\"\";t.versions={};function noop(){}t.on=noop;t.addListener=noop;t.once=noop;t.off=noop;t.removeListener=noop;t.removeAllListeners=noop;t.emit=noop;t.prependListener=noop;t.prependOnceListener=noop;t.listeners=function(e){return[]};t.binding=function(e){throw new Error(\"process.binding is not supported\")};t.cwd=function(){return\"/\"};t.chdir=function(e){throw new Error(\"process.chdir is not supported\")};t.umask=function(){return 0}}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var i=t[r]={exports:{}};var o=true;try{e[r](i,i.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var r=__nccwpck_require__(229);module.exports=r})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcHJvY2Vzcy9icm93c2VyLmpzIiwibWFwcGluZ3MiOiI7QUFBQSxZQUFZLE9BQU8sZ0JBQWdCLG1CQUFtQixNQUFNLE1BQU0sNEJBQTRCLG1EQUFtRCwrQkFBK0IscURBQXFELFlBQVksSUFBSSxtQ0FBbUMsYUFBYSxLQUFLLG9CQUFvQixTQUFTLG1CQUFtQixJQUFJLHFDQUFxQyxlQUFlLEtBQUssdUJBQXVCLFNBQVMsdUJBQXVCLElBQUksdUJBQXVCLG1CQUFtQix1QkFBdUIsMkNBQTJDLGFBQWEsdUJBQXVCLElBQUksY0FBYyxTQUFTLElBQUksd0JBQXdCLFNBQVMsMEJBQTBCLDRCQUE0QixxQkFBcUIsdUJBQXVCLGdEQUFnRCxlQUFlLHVCQUF1QixJQUFJLFlBQVksU0FBUyxJQUFJLHNCQUFzQixTQUFTLHdCQUF3QixTQUFTLFlBQVksTUFBTSxTQUFTLDJCQUEyQixXQUFXLE9BQU8sUUFBUSxhQUFhLGNBQWMsS0FBSyxLQUFLLGFBQWEsY0FBYyxzQkFBc0IsTUFBTSxPQUFPLGtDQUFrQyxPQUFPLGVBQWUsU0FBUyxJQUFJLEtBQUssYUFBYSxNQUFNLFlBQVksS0FBSyxXQUFXLE9BQU8sUUFBUSxtQkFBbUIsdUJBQXVCLG9DQUFvQyx1QkFBdUIsWUFBWSxtQkFBbUIsS0FBSyxxQkFBcUIsc0JBQXNCLHFCQUFxQix5QkFBeUIsbUJBQW1CLFdBQVcsYUFBYSw4QkFBOEIsaUNBQWlDLGtCQUFrQixlQUFlLFNBQVMsVUFBVSxhQUFhLGNBQWMsaUJBQWlCLFVBQVUsbUJBQW1CLFlBQVksV0FBVyxzQkFBc0IsMEJBQTBCLFlBQVksdUJBQXVCLDJCQUEyQix3QkFBd0IsVUFBVSxzQkFBc0IscURBQXFELGlCQUFpQixXQUFXLG9CQUFvQixtREFBbUQsbUJBQW1CLFlBQVksU0FBUyxnQ0FBZ0MsV0FBVyxrQkFBa0IsaUJBQWlCLFlBQVksWUFBWSxXQUFXLElBQUksc0NBQXNDLFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLG1FQUFtRSxTQUFTLEtBQUssK0JBQStCLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3Byb2Nlc3MvYnJvd3Nlci5qcz9hODFiIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe3ZhciBlPXsyMjk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5leHBvcnRzPXt9O3ZhciByO3ZhciBuO2Z1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9KGZ1bmN0aW9uKCl7dHJ5e2lmKHR5cGVvZiBzZXRUaW1lb3V0PT09XCJmdW5jdGlvblwiKXtyPXNldFRpbWVvdXR9ZWxzZXtyPWRlZmF1bHRTZXRUaW1vdXR9fWNhdGNoKGUpe3I9ZGVmYXVsdFNldFRpbW91dH10cnl7aWYodHlwZW9mIGNsZWFyVGltZW91dD09PVwiZnVuY3Rpb25cIil7bj1jbGVhclRpbWVvdXR9ZWxzZXtuPWRlZmF1bHRDbGVhclRpbWVvdXR9fWNhdGNoKGUpe249ZGVmYXVsdENsZWFyVGltZW91dH19KSgpO2Z1bmN0aW9uIHJ1blRpbWVvdXQoZSl7aWYocj09PXNldFRpbWVvdXQpe3JldHVybiBzZXRUaW1lb3V0KGUsMCl9aWYoKHI9PT1kZWZhdWx0U2V0VGltb3V0fHwhcikmJnNldFRpbWVvdXQpe3I9c2V0VGltZW91dDtyZXR1cm4gc2V0VGltZW91dChlLDApfXRyeXtyZXR1cm4gcihlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gci5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gci5jYWxsKHRoaXMsZSwwKX19fWZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChlKXtpZihuPT09Y2xlYXJUaW1lb3V0KXtyZXR1cm4gY2xlYXJUaW1lb3V0KGUpfWlmKChuPT09ZGVmYXVsdENsZWFyVGltZW91dHx8IW4pJiZjbGVhclRpbWVvdXQpe249Y2xlYXJUaW1lb3V0O3JldHVybiBjbGVhclRpbWVvdXQoZSl9dHJ5e3JldHVybiBuKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuIG4uY2FsbCh0aGlzLGUpfX19dmFyIGk9W107dmFyIG89ZmFsc2U7dmFyIHU7dmFyIGE9LTE7ZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCl7aWYoIW98fCF1KXtyZXR1cm59bz1mYWxzZTtpZih1Lmxlbmd0aCl7aT11LmNvbmNhdChpKX1lbHNle2E9LTF9aWYoaS5sZW5ndGgpe2RyYWluUXVldWUoKX19ZnVuY3Rpb24gZHJhaW5RdWV1ZSgpe2lmKG8pe3JldHVybn12YXIgZT1ydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7bz10cnVlO3ZhciB0PWkubGVuZ3RoO3doaWxlKHQpe3U9aTtpPVtdO3doaWxlKCsrYTx0KXtpZih1KXt1W2FdLnJ1bigpfX1hPS0xO3Q9aS5sZW5ndGh9dT1udWxsO289ZmFsc2U7cnVuQ2xlYXJUaW1lb3V0KGUpfXQubmV4dFRpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt0W3ItMV09YXJndW1lbnRzW3JdfX1pLnB1c2gobmV3IEl0ZW0oZSx0KSk7aWYoaS5sZW5ndGg9PT0xJiYhbyl7cnVuVGltZW91dChkcmFpblF1ZXVlKX19O2Z1bmN0aW9uIEl0ZW0oZSx0KXt0aGlzLmZ1bj1lO3RoaXMuYXJyYXk9dH1JdGVtLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTt0LnRpdGxlPVwiYnJvd3NlclwiO3QuYnJvd3Nlcj10cnVlO3QuZW52PXt9O3QuYXJndj1bXTt0LnZlcnNpb249XCJcIjt0LnZlcnNpb25zPXt9O2Z1bmN0aW9uIG5vb3AoKXt9dC5vbj1ub29wO3QuYWRkTGlzdGVuZXI9bm9vcDt0Lm9uY2U9bm9vcDt0Lm9mZj1ub29wO3QucmVtb3ZlTGlzdGVuZXI9bm9vcDt0LnJlbW92ZUFsbExpc3RlbmVycz1ub29wO3QuZW1pdD1ub29wO3QucHJlcGVuZExpc3RlbmVyPW5vb3A7dC5wcmVwZW5kT25jZUxpc3RlbmVyPW5vb3A7dC5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuW119O3QuYmluZGluZz1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX07dC5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn07dC5jaGRpcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9O3QudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19fTt2YXIgdD17fTtmdW5jdGlvbiBfX25jY3dwY2tfcmVxdWlyZV9fKHIpe3ZhciBuPXRbcl07aWYobiE9PXVuZGVmaW5lZCl7cmV0dXJuIG4uZXhwb3J0c312YXIgaT10W3JdPXtleHBvcnRzOnt9fTt2YXIgbz10cnVlO3RyeXtlW3JdKGksaS5leHBvcnRzLF9fbmNjd3Bja19yZXF1aXJlX18pO289ZmFsc2V9ZmluYWxseXtpZihvKWRlbGV0ZSB0W3JdfXJldHVybiBpLmV4cG9ydHN9aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciByPV9fbmNjd3Bja19yZXF1aXJlX18oMjI5KTttb2R1bGUuZXhwb3J0cz1yfSkoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./components/CommitSection.tsx":
|
||
/*!**************************************!*\
|
||
!*** ./components/CommitSection.tsx ***!
|
||
\**************************************/
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CommitSection; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_gitea__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/gitea */ \"(app-pages-browser)/./lib/gitea.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$();\n\n\n// ── Calendar constants ──\nconst CELL = 12, GAP = 3, STEP = CELL + GAP;\nconst DAY_LABEL_W = 26;\nconst WEEKS = 52;\n// Luminosity levels (white-on-dark glow effect)\nconst LEVELS = [\n \"rgba(255,255,255,0.04)\",\n \"rgba(255,255,255,0.13)\",\n \"rgba(255,255,255,0.28)\",\n \"rgba(255,255,255,0.50)\",\n \"rgba(255,255,255,0.80)\"\n];\nfunction getLevel(n) {\n if (n === 0) return 0;\n if (n <= 2) return 1;\n if (n <= 5) return 2;\n if (n <= 9) return 3;\n return 4;\n}\nfunction timeAgo(s) {\n const d = Date.now() - new Date(s).getTime();\n const m = Math.floor(d / 60000);\n if (m < 1) return \"just now\";\n if (m < 60) return \"\".concat(m, \"m\");\n const h = Math.floor(m / 60);\n if (h < 24) return \"\".concat(h, \"h\");\n const days = Math.floor(h / 24);\n if (days < 30) return \"\".concat(days, \"d\");\n return \"\".concat(Math.floor(days / 30), \"mo\");\n}\n// ── Stat card ──\nfunction Stat(param) {\n let { label, value, sub } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"glass rounded-2xl px-5 py-4 flex flex-col gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[10px] font-semibold uppercase tracking-[.1em] text-white/25\",\n children: label\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 42,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[clamp(1.4rem,3vw,2rem)] font-black text-white tabular-nums leading-none\",\n children: value\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 43,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs text-white/30\",\n children: sub\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 44,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 41,\n columnNumber: 5\n }, this);\n}\n_c = Stat;\n// ── Contribution Calendar ──\nfunction ContributionCalendar(param) {\n let { data } = param;\n _s();\n const [tooltip, setTooltip] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const dateMap = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const m = new Map();\n data.forEach((e)=>{\n const k = new Date(e.timestamp * 1000).toISOString().split(\"T\")[0];\n m.set(k, (m.get(k) || 0) + e.contributions);\n });\n return m;\n }, [\n data\n ]);\n // Build 52-week grid starting from Sunday 51 weeks ago\n const { weeks, monthLabels } = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const startSunday = new Date(today);\n startSunday.setDate(today.getDate() - today.getDay() - 51 * 7);\n const weeks = [];\n const monthLabels = [];\n let lastMonth = -1;\n const cur = new Date(startSunday);\n for(let w = 0; w < WEEKS; w++){\n const week = [];\n for(let d = 0; d < 7; d++){\n const k = cur.toISOString().split(\"T\")[0];\n week.push({\n date: new Date(cur),\n key: k,\n count: dateMap.get(k) || 0\n });\n cur.setDate(cur.getDate() + 1);\n }\n const mo = week[0].date.getMonth();\n if (mo !== lastMonth) {\n monthLabels.push({\n label: week[0].date.toLocaleDateString(\"en-US\", {\n month: \"short\"\n }),\n x: w * STEP + DAY_LABEL_W\n });\n lastMonth = mo;\n }\n weeks.push(week);\n }\n return {\n weeks,\n monthLabels\n };\n }, [\n dateMap\n ]);\n const svgW = DAY_LABEL_W + WEEKS * STEP;\n const svgH = 7 * STEP + 20;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[11px] font-semibold uppercase tracking-[.1em] text-white/30\",\n children: \"Contribution Calendar \\xb7 last 12 months\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 100,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1.5 text-[10px] text-white/20\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Less\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 104,\n columnNumber: 11\n }, this),\n LEVELS.map((c, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"rounded-sm inline-block w-2.5 h-2.5 flex-shrink-0\",\n style: {\n background: c,\n border: \"1px solid rgba(255,255,255,0.06)\"\n },\n \"aria-hidden\": \"true\"\n }, i, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 106,\n columnNumber: 13\n }, this)),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"More\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 109,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 103,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 99,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-x-auto pb-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: svgW,\n height: svgH,\n \"aria-label\": \"Contribution calendar heatmap\",\n role: \"img\",\n children: [\n monthLabels.map((m, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"text\", {\n x: m.x,\n y: 10,\n fontSize: 9,\n fill: \"rgba(255,255,255,0.25)\",\n fontFamily: \"var(--font-geist-mono, monospace)\",\n children: m.label\n }, i, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 117,\n columnNumber: 13\n }, this)),\n [\n \"\",\n \"Mon\",\n \"\",\n \"Wed\",\n \"\",\n \"Fri\",\n \"\"\n ].map((d, i)=>d ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"text\", {\n x: DAY_LABEL_W - 4,\n y: 17 + i * STEP + CELL,\n fontSize: 9,\n fill: \"rgba(255,255,255,0.2)\",\n textAnchor: \"end\",\n fontFamily: \"var(--font-geist-mono, monospace)\",\n children: d\n }, i, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 122,\n columnNumber: 13\n }, this) : null),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"g\", {\n transform: \"translate(\".concat(DAY_LABEL_W, \", 14)\"),\n children: weeks.map((week, wi)=>week.map((day, di)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"rect\", {\n x: wi * STEP,\n y: di * STEP,\n width: CELL,\n height: CELL,\n rx: 2.5,\n fill: LEVELS[getLevel(day.count)],\n onMouseEnter: (e)=>setTooltip({\n x: e.clientX,\n y: e.clientY,\n date: day.date.toLocaleDateString(\"en-GB\", {\n weekday: \"short\",\n day: \"numeric\",\n month: \"short\",\n year: \"numeric\"\n }),\n count: day.count\n }),\n onMouseLeave: ()=>setTooltip(null),\n className: \"transition-opacity duration-100 hover:opacity-70 cursor-default\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"title\", {\n children: \"\".concat(day.count, \" contribution\").concat(day.count !== 1 ? \"s\" : \"\", \" on \").concat(day.date.toLocaleDateString())\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 143,\n columnNumber: 19\n }, this)\n }, day.key, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 130,\n columnNumber: 17\n }, this)))\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 127,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 114,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 113,\n columnNumber: 7\n }, this),\n tooltip && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed z-50 pointer-events-none px-2.5 py-1.5 rounded-lg text-xs font-medium text-white bg-[#1a1a1a] border border-white/[0.1] shadow-xl whitespace-nowrap\",\n style: {\n left: tooltip.x + 12,\n top: tooltip.y - 36\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-bold\",\n children: tooltip.count\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 157,\n columnNumber: 11\n }, this),\n \" contribution\",\n tooltip.count !== 1 ? \"s\" : \"\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-white/40 ml-1.5\",\n children: tooltip.date\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 159,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 153,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 98,\n columnNumber: 5\n }, this);\n}\n_s(ContributionCalendar, \"tOWR3QsZrl0k09d8y4a95yvsopU=\");\n_c1 = ContributionCalendar;\n// ── Monthly bar chart ──\nfunction MonthlyChart(param) {\n let { data } = param;\n _s1();\n const months = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Array.from({\n length: 12\n }, (_, i)=>{\n const d = new Date();\n d.setMonth(d.getMonth() - 11 + i);\n const key = \"\".concat(d.getFullYear(), \"-\").concat(String(d.getMonth() + 1).padStart(2, \"0\"));\n const label = d.toLocaleDateString(\"en-US\", {\n month: \"short\"\n });\n const count = data.filter((e)=>{\n const ed = new Date(e.timestamp * 1000);\n return \"\".concat(ed.getFullYear(), \"-\").concat(String(ed.getMonth() + 1).padStart(2, \"0\")) === key;\n }).reduce((s, e)=>s + e.contributions, 0);\n return {\n label,\n count\n };\n });\n }, [\n data\n ]);\n const maxVal = Math.max(...months.map((m)=>m.count), 1);\n const barW = 100 / 12;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[11px] font-semibold uppercase tracking-[.1em] text-white/30 block mb-5\",\n children: \"Monthly activity\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 189,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative h-24 flex items-end gap-1.5\",\n \"aria-label\": \"Monthly commit activity bar chart\",\n role: \"img\",\n children: months.map((m, i)=>{\n const pct = m.count / maxVal * 100;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex flex-col items-center gap-1.5 group\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full relative\",\n style: {\n height: \"80px\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute bottom-0 left-0 right-0 rounded-sm transition-all duration-300 ease-out\",\n style: {\n height: \"\".concat(Math.max(pct, 2), \"%\"),\n background: \"rgba(255,255,255,\".concat(0.06 + pct / 100 * 0.5, \")\")\n },\n title: \"\".concat(m.label, \": \").concat(m.count, \" contributions\")\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 198,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 197,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[8px] text-white/20 font-mono\",\n children: m.label\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 207,\n columnNumber: 15\n }, this)\n ]\n }, i, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 196,\n columnNumber: 13\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 192,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 188,\n columnNumber: 5\n }, this);\n}\n_s1(MonthlyChart, \"Kq3fxGFGSFXKQVpctKPo0h0Trvo=\");\n_c2 = MonthlyChart;\n// ── Recent commits ──\nfunction RecentCommits(param) {\n let { commits } = param;\n if (!commits.length) return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-white/20 py-4\",\n children: \"No recent commits.\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 219,\n columnNumber: 5\n }, this);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[11px] font-semibold uppercase tracking-[.1em] text-white/30 block mb-5\",\n children: \"Recent commits\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 223,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ol\", {\n className: \"flex flex-col\",\n \"aria-label\": \"Recent commit list\",\n children: commits.slice(0, 10).map((c, i)=>{\n var _c_commit, _c_commit_author, _c_commit1;\n const sha = (c.sha || \"\").slice(0, 7);\n const msg = (((_c_commit = c.commit) === null || _c_commit === void 0 ? void 0 : _c_commit.message) || \"\").split(\"\\n\")[0].slice(0, 64);\n const date = c.created || ((_c_commit1 = c.commit) === null || _c_commit1 === void 0 ? void 0 : (_c_commit_author = _c_commit1.author) === null || _c_commit_author === void 0 ? void 0 : _c_commit_author.date);\n const isLast = i === Math.min(9, commits.length - 1);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n className: \"commit-line relative flex gap-3 pb-4 \".concat(isLast ? \"\" : \"\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1.5 flex-shrink-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"block w-2 h-2 rounded-full bg-white/20 relative z-10\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 235,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 234,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-w-0 flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-baseline gap-2 mb-0.5 flex-wrap\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[10px] font-semibold uppercase tracking-wider text-white/25\",\n children: c._repo\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 239,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: c._repoUrl ? \"\".concat(c._repoUrl, \"/commit/\").concat(c.sha) : \"#\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"font-mono text-[10px] text-white/20 hover:text-white/50 transition-colors px-1 py-0.5 rounded bg-white/[0.04] border border-white/[0.06]\",\n \"aria-label\": \"View commit \".concat(sha),\n children: sha\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 242,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[10px] text-white/20 ml-auto\",\n children: date ? timeAgo(date) : \"\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 250,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 238,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-white/60 truncate leading-snug\",\n children: msg\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 252,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 237,\n columnNumber: 15\n }, this)\n ]\n }, c.sha, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 233,\n columnNumber: 13\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 226,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 222,\n columnNumber: 5\n }, this);\n}\n_c3 = RecentCommits;\n// ── Main section ──\nfunction CommitSection() {\n _s2();\n const [repos, setRepos] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [heatmap, setHeatmap] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [commits, setCommits] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n async function load() {\n try {\n const [r, h] = await Promise.all([\n (0,_lib_gitea__WEBPACK_IMPORTED_MODULE_2__.getRepos)(6),\n (0,_lib_gitea__WEBPACK_IMPORTED_MODULE_2__.getHeatmap)()\n ]);\n setRepos(r);\n setHeatmap(h);\n const c = await (0,_lib_gitea__WEBPACK_IMPORTED_MODULE_2__.getRecentCommits)(r);\n setCommits(c);\n } catch (e) {\n const msg = e instanceof Error ? e.message : \"Unknown error\";\n setError(msg);\n } finally{\n setLoading(false);\n }\n }\n load();\n }, []);\n const stats = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>(0,_lib_gitea__WEBPACK_IMPORTED_MODULE_2__.calcStats)(heatmap), [\n heatmap\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n id: \"activity\",\n className: \"py-24 px-6\",\n \"aria-labelledby\": \"activity-heading\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-5xl mx-auto\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"label\",\n children: \"Gitea \\xb7 Code activity\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 293,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n id: \"activity-heading\",\n className: \"text-[clamp(1.8rem,4vw,2.5rem)] font-black tracking-tight text-white mb-10\",\n children: \"Contributions\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 294,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 sm:grid-cols-4 gap-3 mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Stat, {\n label: \"Contributions\",\n value: loading ? \"—\" : stats.total.toLocaleString(),\n sub: \"this year\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 301,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Stat, {\n label: \"Current streak\",\n value: loading ? \"—\" : \"\".concat(stats.currentStreak, \"d\"),\n sub: \"days\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 302,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Stat, {\n label: \"Longest streak\",\n value: loading ? \"—\" : \"\".concat(stats.longestStreak, \"d\"),\n sub: \"days\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 303,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Stat, {\n label: \"Active days\",\n value: loading ? \"—\" : stats.activeDays,\n sub: \"this year\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 304,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 300,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"glass rounded-2xl p-5 sm:p-6 mb-4\",\n children: loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"skel h-3 w-48\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 311,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"skel h-[120px] w-full rounded-xl\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 312,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 310,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center py-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-white/30 text-sm\",\n children: \"Could not load heatmap\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 316,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-white/20 text-xs font-mono mt-1\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 317,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 315,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(ContributionCalendar, {\n data: heatmap\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 320,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 308,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid lg:grid-cols-[1fr_360px] gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"glass rounded-2xl p-5 sm:p-6\",\n children: loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"skel h-32 w-full rounded-xl\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 328,\n columnNumber: 17\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(MonthlyChart, {\n data: heatmap\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 329,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 326,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"glass rounded-2xl p-5 sm:p-6 overflow-hidden\",\n children: loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-4\",\n children: [\n ...Array(5)\n ].map((_, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"skel w-2 h-2 rounded-full mt-1.5 flex-shrink-0\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 338,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"skel h-2.5 w-1/3 mb-1.5\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 340,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"skel h-3.5 w-5/6\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 341,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 339,\n columnNumber: 23\n }, this)\n ]\n }, i, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 337,\n columnNumber: 21\n }, this))\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 335,\n columnNumber: 17\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(RecentCommits, {\n commits: commits\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 347,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 332,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 325,\n columnNumber: 9\n }, this),\n !loading && repos.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"glass rounded-2xl p-5 sm:p-6 mt-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[11px] font-semibold uppercase tracking-[.1em] text-white/30 block mb-5\",\n children: \"Repository breakdown\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 355,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2.5\",\n children: repos.slice(0, 6).map((r)=>{\n const maxStars = Math.max(...repos.map((x)=>x.stars_count), 1);\n const pct = r.stars_count / maxStars * 100;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3 group\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: r.html_url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"text-xs font-mono text-white/40 hover:text-white/70 transition-colors w-36 truncate shrink-0\",\n children: r.name\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 364,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 h-1.5 bg-white/[0.04] rounded-full overflow-hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-full rounded-full bg-white/25 transition-all duration-500\",\n style: {\n width: \"\".concat(Math.max(pct, 2), \"%\")\n }\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 369,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 368,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[10px] text-white/25 tabular-nums w-6 text-right\",\n children: r.stars_count\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 372,\n columnNumber: 21\n }, this)\n ]\n }, r.id, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 363,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 358,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 354,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 292,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/CommitSection.tsx\",\n lineNumber: 291,\n columnNumber: 5\n }, this);\n}\n_s2(CommitSection, \"qCLctXyN9y5nLmdKrip2Ctg6TKg=\");\n_c4 = CommitSection;\nvar _c, _c1, _c2, _c3, _c4;\n$RefreshReg$(_c, \"Stat\");\n$RefreshReg$(_c1, \"ContributionCalendar\");\n$RefreshReg$(_c2, \"MonthlyChart\");\n$RefreshReg$(_c3, \"RecentCommits\");\n$RefreshReg$(_c4, \"CommitSection\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvQ29tbWl0U2VjdGlvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUNxRDtBQUMyQjtBQUdoRiwyQkFBMkI7QUFDM0IsTUFBTU8sT0FBTyxJQUFJQyxNQUFNLEdBQUdDLE9BQU9GLE9BQU9DO0FBQ3hDLE1BQU1FLGNBQWM7QUFDcEIsTUFBTUMsUUFBUTtBQUNkLGdEQUFnRDtBQUNoRCxNQUFNQyxTQUFTO0lBQ2I7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBQ0QsU0FBU0MsU0FBU0MsQ0FBUztJQUN6QixJQUFJQSxNQUFNLEdBQUcsT0FBTztJQUNwQixJQUFJQSxLQUFLLEdBQUksT0FBTztJQUNwQixJQUFJQSxLQUFLLEdBQUksT0FBTztJQUNwQixJQUFJQSxLQUFLLEdBQUksT0FBTztJQUNwQixPQUFPO0FBQ1Q7QUFFQSxTQUFTQyxRQUFRQyxDQUFTO0lBQ3hCLE1BQU1DLElBQUlDLEtBQUtDLEdBQUcsS0FBSyxJQUFJRCxLQUFLRixHQUFHSSxPQUFPO0lBQzFDLE1BQU1DLElBQUlDLEtBQUtDLEtBQUssQ0FBQ04sSUFBSTtJQUN6QixJQUFJSSxJQUFJLEdBQUcsT0FBTztJQUNsQixJQUFJQSxJQUFJLElBQUksT0FBTyxHQUFLLE9BQUZBLEdBQUU7SUFDeEIsTUFBTUcsSUFBSUYsS0FBS0MsS0FBSyxDQUFDRixJQUFJO0lBQ3pCLElBQUlHLElBQUksSUFBSSxPQUFPLEdBQUssT0FBRkEsR0FBRTtJQUN4QixNQUFNQyxPQUFPSCxLQUFLQyxLQUFLLENBQUNDLElBQUk7SUFDNUIsSUFBSUMsT0FBTyxJQUFJLE9BQU8sR0FBUSxPQUFMQSxNQUFLO0lBQzlCLE9BQU8sR0FBeUIsT0FBdEJILEtBQUtDLEtBQUssQ0FBQ0UsT0FBTyxLQUFJO0FBQ2xDO0FBRUEsa0JBQWtCO0FBQ2xCLFNBQVNDLEtBQUssS0FBNkU7UUFBN0UsRUFBRUMsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLEdBQUcsRUFBMEQsR0FBN0U7SUFDWixxQkFDRSw4REFBQ0M7UUFBSUMsV0FBVTs7MEJBQ2IsOERBQUNDO2dCQUFLRCxXQUFVOzBCQUFxRUo7Ozs7OzswQkFDckYsOERBQUNLO2dCQUFLRCxXQUFVOzBCQUFpRkg7Ozs7OzswQkFDakcsOERBQUNJO2dCQUFLRCxXQUFVOzBCQUF5QkY7Ozs7Ozs7Ozs7OztBQUcvQztLQVJTSDtBQVVULDhCQUE4QjtBQUM5QixTQUFTTyxxQkFBcUIsS0FBa0M7UUFBbEMsRUFBRUMsSUFBSSxFQUE0QixHQUFsQzs7SUFDNUIsTUFBTSxDQUFDQyxTQUFTQyxXQUFXLEdBQUduQywrQ0FBUUEsQ0FBK0Q7SUFFckcsTUFBTW9DLFVBQVVuQyw4Q0FBT0EsQ0FBQztRQUN0QixNQUFNbUIsSUFBSSxJQUFJaUI7UUFDZEosS0FBS0ssT0FBTyxDQUFDQyxDQUFBQTtZQUNYLE1BQU1DLElBQUksSUFBSXZCLEtBQUtzQixFQUFFRSxTQUFTLEdBQUcsTUFBTUMsV0FBVyxHQUFHQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEV2QixFQUFFd0IsR0FBRyxDQUFDSixHQUFHLENBQUNwQixFQUFFeUIsR0FBRyxDQUFDTCxNQUFNLEtBQUtELEVBQUVPLGFBQWE7UUFDNUM7UUFDQSxPQUFPMUI7SUFDVCxHQUFHO1FBQUNhO0tBQUs7SUFFVCx1REFBdUQ7SUFDdkQsTUFBTSxFQUFFYyxLQUFLLEVBQUVDLFdBQVcsRUFBRSxHQUFHL0MsOENBQU9BLENBQUM7UUFDckMsTUFBTWdELFFBQVEsSUFBSWhDO1FBQ2xCZ0MsTUFBTUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHO1FBQ3hCLE1BQU1DLGNBQWMsSUFBSWxDLEtBQUtnQztRQUM3QkUsWUFBWUMsT0FBTyxDQUFDSCxNQUFNSSxPQUFPLEtBQUtKLE1BQU1LLE1BQU0sS0FBSyxLQUFLO1FBRTVELE1BQU1QLFFBQXdELEVBQUU7UUFDaEUsTUFBTUMsY0FBOEMsRUFBRTtRQUN0RCxJQUFJTyxZQUFZLENBQUM7UUFDakIsTUFBTUMsTUFBTSxJQUFJdkMsS0FBS2tDO1FBRXJCLElBQUssSUFBSU0sSUFBSSxHQUFHQSxJQUFJL0MsT0FBTytDLElBQUs7WUFDOUIsTUFBTUMsT0FBcUQsRUFBRTtZQUM3RCxJQUFLLElBQUkxQyxJQUFJLEdBQUdBLElBQUksR0FBR0EsSUFBSztnQkFDMUIsTUFBTXdCLElBQUlnQixJQUFJZCxXQUFXLEdBQUdDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDekNlLEtBQUtDLElBQUksQ0FBQztvQkFBRUMsTUFBTSxJQUFJM0MsS0FBS3VDO29CQUFNSyxLQUFLckI7b0JBQUdzQixPQUFPMUIsUUFBUVMsR0FBRyxDQUFDTCxNQUFNO2dCQUFFO2dCQUNwRWdCLElBQUlKLE9BQU8sQ0FBQ0ksSUFBSUgsT0FBTyxLQUFLO1lBQzlCO1lBQ0EsTUFBTVUsS0FBS0wsSUFBSSxDQUFDLEVBQUUsQ0FBQ0UsSUFBSSxDQUFDSSxRQUFRO1lBQ2hDLElBQUlELE9BQU9SLFdBQVc7Z0JBQ3BCUCxZQUFZVyxJQUFJLENBQUM7b0JBQ2ZqQyxPQUFPZ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQ0UsSUFBSSxDQUFDSyxrQkFBa0IsQ0FBQyxTQUFTO3dCQUFFQyxPQUFPO29CQUFRO29CQUNqRUMsR0FBR1YsSUFBSWpELE9BQU9DO2dCQUNoQjtnQkFDQThDLFlBQVlRO1lBQ2Q7WUFDQWhCLE1BQU1ZLElBQUksQ0FBQ0Q7UUFDYjtRQUNBLE9BQU87WUFBRVg7WUFBT0M7UUFBWTtJQUM5QixHQUFHO1FBQUNaO0tBQVE7SUFFWixNQUFNZ0MsT0FBTzNELGNBQWNDLFFBQVFGO0lBQ25DLE1BQU02RCxPQUFPLElBQUk3RCxPQUFPO0lBRXhCLHFCQUNFLDhEQUFDcUI7UUFBSUMsV0FBVTs7MEJBQ2IsOERBQUNEO2dCQUFJQyxXQUFVOztrQ0FDYiw4REFBQ0M7d0JBQUtELFdBQVU7a0NBQW9FOzs7Ozs7a0NBR3BGLDhEQUFDRDt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUNDOzBDQUFLOzs7Ozs7NEJBQ0xwQixPQUFPMkQsR0FBRyxDQUFDLENBQUNDLEdBQUdDLGtCQUNkLDhEQUFDekM7b0NBQWFELFdBQVU7b0NBQ3RCMkMsT0FBTzt3Q0FBRUMsWUFBWUg7d0NBQUdJLFFBQVE7b0NBQW1DO29DQUFHQyxlQUFZO21DQUR6RUo7Ozs7OzBDQUdiLDhEQUFDekM7MENBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFJViw4REFBQ0Y7Z0JBQUlDLFdBQVU7MEJBQ2IsNEVBQUMrQztvQkFBSUMsT0FBT1Y7b0JBQU1XLFFBQVFWO29CQUFNVyxjQUFXO29CQUFnQ0MsTUFBSzs7d0JBRTdFakMsWUFBWXNCLEdBQUcsQ0FBQyxDQUFDbEQsR0FBR29ELGtCQUNuQiw4REFBQ1U7Z0NBQWFmLEdBQUcvQyxFQUFFK0MsQ0FBQztnQ0FBRWdCLEdBQUc7Z0NBQUlDLFVBQVU7Z0NBQUdDLE1BQUs7Z0NBQzdDQyxZQUFXOzBDQUFxQ2xFLEVBQUVNLEtBQUs7K0JBRDlDOEM7Ozs7O3dCQUlaOzRCQUFDOzRCQUFJOzRCQUFPOzRCQUFJOzRCQUFPOzRCQUFJOzRCQUFPO3lCQUFHLENBQUNGLEdBQUcsQ0FBQyxDQUFDdEQsR0FBR3dELElBQU14RCxrQkFDbkQsOERBQUNrRTtnQ0FBYWYsR0FBRzFELGNBQWM7Z0NBQUcwRSxHQUFHLEtBQUtYLElBQUloRSxPQUFPRjtnQ0FDbkQ4RSxVQUFVO2dDQUFHQyxNQUFLO2dDQUF3QkUsWUFBVztnQ0FDckRELFlBQVc7MENBQXFDdEU7K0JBRnZDd0Q7Ozs7dUNBR1Q7c0NBRUosOERBQUNnQjs0QkFBRUMsV0FBVyxhQUF5QixPQUFaaEYsYUFBWTtzQ0FDcENzQyxNQUFNdUIsR0FBRyxDQUFDLENBQUNaLE1BQU1nQyxLQUNoQmhDLEtBQUtZLEdBQUcsQ0FBQyxDQUFDcUIsS0FBS0MsbUJBQ2IsOERBQUNDO3dDQUVDMUIsR0FBR3VCLEtBQUtsRjt3Q0FBTTJFLEdBQUdTLEtBQUtwRjt3Q0FDdEJzRSxPQUFPeEU7d0NBQU15RSxRQUFRekU7d0NBQU13RixJQUFJO3dDQUMvQlQsTUFBTTFFLE1BQU0sQ0FBQ0MsU0FBUytFLElBQUk3QixLQUFLLEVBQUU7d0NBQ2pDaUMsY0FBY3hELENBQUFBLElBQUtKLFdBQVc7Z0RBQzVCZ0MsR0FBRzVCLEVBQUV5RCxPQUFPO2dEQUFFYixHQUFHNUMsRUFBRTBELE9BQU87Z0RBQzFCckMsTUFBTStCLElBQUkvQixJQUFJLENBQUNLLGtCQUFrQixDQUFDLFNBQVM7b0RBQUVpQyxTQUFTO29EQUFTUCxLQUFLO29EQUFXekIsT0FBTztvREFBU2lDLE1BQU07Z0RBQVU7Z0RBQy9HckMsT0FBTzZCLElBQUk3QixLQUFLOzRDQUNsQjt3Q0FDQXNDLGNBQWMsSUFBTWpFLFdBQVc7d0NBQy9CTCxXQUFVO2tEQUVWLDRFQUFDdUU7c0RBQU8sR0FBNEJWLE9BQXpCQSxJQUFJN0IsS0FBSyxFQUFDLGlCQUFnRDZCLE9BQWpDQSxJQUFJN0IsS0FBSyxLQUFLLElBQUksTUFBTSxJQUFHLFFBQW9DLE9BQTlCNkIsSUFBSS9CLElBQUksQ0FBQ0ssa0JBQWtCOzs7Ozs7dUNBWjNGMEIsSUFBSTlCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQXFCdkIzQix5QkFDQyw4REFBQ0w7Z0JBQ0NDLFdBQVU7Z0JBRVYyQyxPQUFPO29CQUFFNkIsTUFBTXBFLFFBQVFpQyxDQUFDLEdBQUc7b0JBQUlvQyxLQUFLckUsUUFBUWlELENBQUMsR0FBRztnQkFBRzs7a0NBQ25ELDhEQUFDcEQ7d0JBQUtELFdBQVU7a0NBQWFJLFFBQVE0QixLQUFLOzs7Ozs7b0JBQ3pDO29CQUFpQjVCLFFBQVE0QixLQUFLLEtBQUssSUFBSSxNQUFNO2tDQUM5Qyw4REFBQy9CO3dCQUFLRCxXQUFVO2tDQUF3QkksUUFBUTBCLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUs5RDtHQWxIUzVCO01BQUFBO0FBb0hULDBCQUEwQjtBQUMxQixTQUFTd0UsYUFBYSxLQUFrQztRQUFsQyxFQUFFdkUsSUFBSSxFQUE0QixHQUFsQzs7SUFDcEIsTUFBTXdFLFNBQVN4Ryw4Q0FBT0EsQ0FBQztRQUNyQixPQUFPeUcsTUFBTUMsSUFBSSxDQUFDO1lBQUVDLFFBQVE7UUFBRyxHQUFHLENBQUNDLEdBQUdyQztZQUNwQyxNQUFNeEQsSUFBSSxJQUFJQztZQUNkRCxFQUFFOEYsUUFBUSxDQUFDOUYsRUFBRWdELFFBQVEsS0FBSyxLQUFLUTtZQUMvQixNQUFNWCxNQUFNLEdBQXNCa0QsT0FBbkIvRixFQUFFZ0csV0FBVyxJQUFHLEtBQTZDLE9BQTFDRCxPQUFPL0YsRUFBRWdELFFBQVEsS0FBSyxHQUFHaUQsUUFBUSxDQUFDLEdBQUc7WUFDdkUsTUFBTXZGLFFBQVFWLEVBQUVpRCxrQkFBa0IsQ0FBQyxTQUFTO2dCQUFFQyxPQUFPO1lBQVE7WUFDN0QsTUFBTUosUUFBUTdCLEtBQ1hpRixNQUFNLENBQUMzRSxDQUFBQTtnQkFDTixNQUFNNEUsS0FBSyxJQUFJbEcsS0FBS3NCLEVBQUVFLFNBQVMsR0FBRztnQkFDbEMsT0FBTyxHQUF1QnNFLE9BQXBCSSxHQUFHSCxXQUFXLElBQUcsS0FBOEMsT0FBM0NELE9BQU9JLEdBQUduRCxRQUFRLEtBQUssR0FBR2lELFFBQVEsQ0FBQyxHQUFHLFVBQVdwRDtZQUNqRixHQUNDdUQsTUFBTSxDQUFDLENBQUNyRyxHQUFHd0IsSUFBTXhCLElBQUl3QixFQUFFTyxhQUFhLEVBQUU7WUFDekMsT0FBTztnQkFBRXBCO2dCQUFPb0M7WUFBTTtRQUN4QjtJQUNGLEdBQUc7UUFBQzdCO0tBQUs7SUFFVCxNQUFNb0YsU0FBU2hHLEtBQUtpRyxHQUFHLElBQUliLE9BQU9uQyxHQUFHLENBQUNsRCxDQUFBQSxJQUFLQSxFQUFFMEMsS0FBSyxHQUFHO0lBQ3JELE1BQU15RCxPQUFPLE1BQU07SUFFbkIscUJBQ0UsOERBQUMxRjs7MEJBQ0MsOERBQUNFO2dCQUFLRCxXQUFVOzBCQUErRTs7Ozs7OzBCQUcvRiw4REFBQ0Q7Z0JBQUlDLFdBQVU7Z0JBQXVDa0QsY0FBVztnQkFBb0NDLE1BQUs7MEJBQ3ZHd0IsT0FBT25DLEdBQUcsQ0FBQyxDQUFDbEQsR0FBR29EO29CQUNkLE1BQU1nRCxNQUFNLEVBQUcxRCxLQUFLLEdBQUd1RCxTQUFVO29CQUNqQyxxQkFDRSw4REFBQ3hGO3dCQUFZQyxXQUFVOzswQ0FDckIsOERBQUNEO2dDQUFJQyxXQUFVO2dDQUFrQjJDLE9BQU87b0NBQUVNLFFBQVE7Z0NBQU87MENBQ3ZELDRFQUFDbEQ7b0NBQ0NDLFdBQVU7b0NBQ1YyQyxPQUFPO3dDQUNMTSxRQUFRLEdBQW9CLE9BQWpCMUQsS0FBS2lHLEdBQUcsQ0FBQ0UsS0FBSyxJQUFHO3dDQUM1QjlDLFlBQVksb0JBQTZDLE9BQXpCLE9BQU8sTUFBTyxNQUFPLEtBQUk7b0NBQzNEO29DQUNBMkIsT0FBTyxHQUFlakYsT0FBWkEsRUFBRU0sS0FBSyxFQUFDLE1BQVksT0FBUk4sRUFBRTBDLEtBQUssRUFBQzs7Ozs7Ozs7Ozs7MENBR2xDLDhEQUFDL0I7Z0NBQUtELFdBQVU7MENBQXNDVixFQUFFTSxLQUFLOzs7Ozs7O3VCQVhyRDhDOzs7OztnQkFjZDs7Ozs7Ozs7Ozs7O0FBSVI7SUEvQ1NnQztNQUFBQTtBQWlEVCx1QkFBdUI7QUFDdkIsU0FBU2lCLGNBQWMsS0FBdUM7UUFBdkMsRUFBRUMsT0FBTyxFQUE4QixHQUF2QztJQUNyQixJQUFJLENBQUNBLFFBQVFkLE1BQU0sRUFBRSxxQkFDbkIsOERBQUNlO1FBQUU3RixXQUFVO2tCQUE2Qjs7Ozs7O0lBRTVDLHFCQUNFLDhEQUFDRDs7MEJBQ0MsOERBQUNFO2dCQUFLRCxXQUFVOzBCQUErRTs7Ozs7OzBCQUcvRiw4REFBQzhGO2dCQUFHOUYsV0FBVTtnQkFBZ0JrRCxjQUFXOzBCQUN0QzBDLFFBQVFHLEtBQUssQ0FBQyxHQUFHLElBQUl2RCxHQUFHLENBQUMsQ0FBQ0MsR0FBR0M7d0JBRWZELFdBQ2FBLGtCQUFBQTtvQkFGMUIsTUFBTXVELE1BQU0sQ0FBQ3ZELEVBQUV1RCxHQUFHLElBQUksRUFBQyxFQUFHRCxLQUFLLENBQUMsR0FBRztvQkFDbkMsTUFBTUUsTUFBTSxDQUFDeEQsRUFBQUEsWUFBQUEsRUFBRXlELE1BQU0sY0FBUnpELGdDQUFBQSxVQUFVMEQsT0FBTyxLQUFJLEVBQUMsRUFBR3RGLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDa0YsS0FBSyxDQUFDLEdBQUc7b0JBQzlELE1BQU1qRSxPQUFPVyxFQUFFMkQsT0FBTyxNQUFJM0QsYUFBQUEsRUFBRXlELE1BQU0sY0FBUnpELGtDQUFBQSxtQkFBQUEsV0FBVTRELE1BQU0sY0FBaEI1RCx1Q0FBQUEsaUJBQWtCWCxJQUFJO29CQUNoRCxNQUFNd0UsU0FBUzVELE1BQU1uRCxLQUFLZ0gsR0FBRyxDQUFDLEdBQUdYLFFBQVFkLE1BQU0sR0FBRztvQkFDbEQscUJBQ0UsOERBQUMwQjt3QkFBZXhHLFdBQVcsd0NBQXlELE9BQWpCc0csU0FBUyxLQUFLOzswQ0FDL0UsOERBQUN2RztnQ0FBSUMsV0FBVTswQ0FDYiw0RUFBQ0M7b0NBQUtELFdBQVU7b0NBQXVEOEMsZUFBWTs7Ozs7Ozs7Ozs7MENBRXJGLDhEQUFDL0M7Z0NBQUlDLFdBQVU7O2tEQUNiLDhEQUFDRDt3Q0FBSUMsV0FBVTs7MERBQ2IsOERBQUNDO2dEQUFLRCxXQUFVOzBEQUNieUMsRUFBRWdFLEtBQUs7Ozs7OzswREFFViw4REFBQ0M7Z0RBQ0NDLE1BQU1sRSxFQUFFbUUsUUFBUSxHQUFHLEdBQXdCbkUsT0FBckJBLEVBQUVtRSxRQUFRLEVBQUMsWUFBZ0IsT0FBTm5FLEVBQUV1RCxHQUFHLElBQUs7Z0RBQ3JEYSxRQUFPO2dEQUFTQyxLQUFJO2dEQUNwQjlHLFdBQVU7Z0RBRVZrRCxjQUFZLGVBQW1CLE9BQUo4QzswREFDMUJBOzs7Ozs7MERBRUgsOERBQUMvRjtnREFBS0QsV0FBVTswREFBcUM4QixPQUFPOUMsUUFBUThDLFFBQVE7Ozs7Ozs7Ozs7OztrREFFOUUsOERBQUMrRDt3Q0FBRTdGLFdBQVU7a0RBQStDaUc7Ozs7Ozs7Ozs7Ozs7dUJBbkJ2RHhELEVBQUV1RCxHQUFHOzs7OztnQkF1QmxCOzs7Ozs7Ozs7Ozs7QUFJUjtNQTNDU0w7QUE2Q1QscUJBQXFCO0FBQ04sU0FBU29COztJQUN0QixNQUFNLENBQUNDLE9BQU9DLFNBQVMsR0FBTy9JLCtDQUFRQSxDQUFjLEVBQUU7SUFDdEQsTUFBTSxDQUFDZ0osU0FBU0MsV0FBVyxHQUFHakosK0NBQVFBLENBQWlCLEVBQUU7SUFDekQsTUFBTSxDQUFDMEgsU0FBU3dCLFdBQVcsR0FBR2xKLCtDQUFRQSxDQUFnQixFQUFFO0lBQ3hELE1BQU0sQ0FBQ21KLFNBQVNDLFdBQVcsR0FBR3BKLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3FKLE9BQU9DLFNBQVMsR0FBT3RKLCtDQUFRQSxDQUFnQjtJQUV0REQsZ0RBQVNBLENBQUM7UUFDUixlQUFld0o7WUFDYixJQUFJO2dCQUNGLE1BQU0sQ0FBQ0MsR0FBR2pJLEVBQUUsR0FBRyxNQUFNa0ksUUFBUUMsR0FBRyxDQUFDO29CQUFDeEosb0RBQVFBLENBQUM7b0JBQUlDLHNEQUFVQTtpQkFBRztnQkFDNUQ0SSxTQUFTUztnQkFDVFAsV0FBVzFIO2dCQUNYLE1BQU1nRCxJQUFJLE1BQU1uRSw0REFBZ0JBLENBQUNvSjtnQkFDakNOLFdBQVczRTtZQUNiLEVBQUUsT0FBT2hDLEdBQVk7Z0JBQ25CLE1BQU13RixNQUFNeEYsYUFBYW9ILFFBQVFwSCxFQUFFMEYsT0FBTyxHQUFHO2dCQUM3Q3FCLFNBQVN2QjtZQUNYLFNBQVU7Z0JBQ1JxQixXQUFXO1lBQ2I7UUFDRjtRQUNBRztJQUNGLEdBQUcsRUFBRTtJQUVMLE1BQU1LLFFBQVEzSiw4Q0FBT0EsQ0FBQyxJQUFNSSxxREFBU0EsQ0FBQzJJLFVBQVU7UUFBQ0E7S0FBUTtJQUV6RCxxQkFDRSw4REFBQ2E7UUFBUUMsSUFBRztRQUFXaEksV0FBVTtRQUFhaUksbUJBQWdCO2tCQUM1RCw0RUFBQ2xJO1lBQUlDLFdBQVU7OzhCQUNiLDhEQUFDQztvQkFBS0QsV0FBVTs4QkFBUTs7Ozs7OzhCQUN4Qiw4REFBQ2tJO29CQUFHRixJQUFHO29CQUNMaEksV0FBVTs4QkFBNkU7Ozs7Ozs4QkFLekYsOERBQUNEO29CQUFJQyxXQUFVOztzQ0FDYiw4REFBQ0w7NEJBQUtDLE9BQU07NEJBQWdCQyxPQUFPd0gsVUFBVSxNQUFNUyxNQUFNSyxLQUFLLENBQUNDLGNBQWM7NEJBQUl0SSxLQUFJOzs7Ozs7c0NBQ3JGLDhEQUFDSDs0QkFBS0MsT0FBTTs0QkFBaUJDLE9BQU93SCxVQUFVLE1BQU0sR0FBdUIsT0FBcEJTLE1BQU1PLGFBQWEsRUFBQzs0QkFBSXZJLEtBQUk7Ozs7OztzQ0FDbkYsOERBQUNIOzRCQUFLQyxPQUFNOzRCQUFpQkMsT0FBT3dILFVBQVUsTUFBTSxHQUF1QixPQUFwQlMsTUFBTVEsYUFBYSxFQUFDOzRCQUFJeEksS0FBSTs7Ozs7O3NDQUNuRiw4REFBQ0g7NEJBQUtDLE9BQU07NEJBQWlCQyxPQUFPd0gsVUFBVSxNQUFNUyxNQUFNUyxVQUFVOzRCQUFFekksS0FBSTs7Ozs7Ozs7Ozs7OzhCQUk1RSw4REFBQ0M7b0JBQUlDLFdBQVU7OEJBQ1pxSCx3QkFDQyw4REFBQ3RIO3dCQUFJQyxXQUFVOzswQ0FDYiw4REFBQ0Q7Z0NBQUlDLFdBQVU7Ozs7OzswQ0FDZiw4REFBQ0Q7Z0NBQUlDLFdBQVU7Ozs7Ozs7Ozs7OytCQUVmdUgsc0JBQ0YsOERBQUN4SDt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUM2RjtnQ0FBRTdGLFdBQVU7MENBQXdCOzs7Ozs7MENBQ3JDLDhEQUFDNkY7Z0NBQUU3RixXQUFVOzBDQUF3Q3VIOzs7Ozs7Ozs7Ozs2Q0FHdkQsOERBQUNySDt3QkFBcUJDLE1BQU0rRzs7Ozs7Ozs7Ozs7OEJBS2hDLDhEQUFDbkg7b0JBQUlDLFdBQVU7O3NDQUNiLDhEQUFDRDs0QkFBSUMsV0FBVTtzQ0FDWnFILHdCQUNHLDhEQUFDdEg7Z0NBQUlDLFdBQVU7Ozs7O3FEQUNmLDhEQUFDMEU7Z0NBQWF2RSxNQUFNK0c7Ozs7Ozs7Ozs7O3NDQUcxQiw4REFBQ25IOzRCQUFJQyxXQUFVO3NDQUNacUgsd0JBRUcsOERBQUN0SDtnQ0FBSUMsV0FBVTswQ0FDWjt1Q0FBSTRFLE1BQU07aUNBQUcsQ0FBQ3BDLEdBQUcsQ0FBQyxDQUFDdUMsR0FBR3JDLGtCQUNyQiw4REFBQzNDO3dDQUFZQyxXQUFVOzswREFDckIsOERBQUNEO2dEQUFJQyxXQUFVOzs7Ozs7MERBQ2YsOERBQUNEO2dEQUFJQyxXQUFVOztrRUFDYiw4REFBQ0Q7d0RBQUlDLFdBQVU7Ozs7OztrRUFDZiw4REFBQ0Q7d0RBQUlDLFdBQVU7Ozs7Ozs7Ozs7Ozs7dUNBSlQwQzs7Ozs7Ozs7O3FEQVVkLDhEQUFDaUQ7Z0NBQWNDLFNBQVNBOzs7Ozs7Ozs7Ozs7Ozs7OztnQkFNL0IsQ0FBQ3lCLFdBQVdMLE1BQU1sQyxNQUFNLEdBQUcsbUJBQzFCLDhEQUFDL0U7b0JBQUlDLFdBQVU7O3NDQUNiLDhEQUFDQzs0QkFBS0QsV0FBVTtzQ0FBK0U7Ozs7OztzQ0FHL0YsOERBQUNEOzRCQUFJQyxXQUFVO3NDQUNaZ0gsTUFBTWpCLEtBQUssQ0FBQyxHQUFHLEdBQUd2RCxHQUFHLENBQUNrRixDQUFBQTtnQ0FDckIsTUFBTWMsV0FBV2pKLEtBQUtpRyxHQUFHLElBQUl3QixNQUFNeEUsR0FBRyxDQUFDSCxDQUFBQSxJQUFLQSxFQUFFb0csV0FBVyxHQUFHO2dDQUM1RCxNQUFNL0MsTUFBTSxFQUFHK0MsV0FBVyxHQUFHRCxXQUFZO2dDQUN6QyxxQkFDRSw4REFBQ3pJO29DQUFlQyxXQUFVOztzREFDeEIsOERBQUMwRzs0Q0FBRUMsTUFBTWUsRUFBRWdCLFFBQVE7NENBQUU3QixRQUFPOzRDQUFTQyxLQUFJOzRDQUN2QzlHLFdBQVU7c0RBQ1QwSCxFQUFFaUIsSUFBSTs7Ozs7O3NEQUVULDhEQUFDNUk7NENBQUlDLFdBQVU7c0RBQ2IsNEVBQUNEO2dEQUFJQyxXQUFVO2dEQUNiMkMsT0FBTztvREFBRUssT0FBTyxHQUFvQixPQUFqQnpELEtBQUtpRyxHQUFHLENBQUNFLEtBQUssSUFBRztnREFBRzs7Ozs7Ozs7Ozs7c0RBRTNDLDhEQUFDekY7NENBQUtELFdBQVU7c0RBQXlEMEgsRUFBRWUsV0FBVzs7Ozs7OzttQ0FUOUVmLEVBQUVNLEVBQUU7Ozs7OzRCQVlsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPZDtJQXZId0JqQjtNQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL0NvbW1pdFNlY3Rpb24udHN4P2VmOGEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGdldFJlcG9zLCBnZXRIZWF0bWFwLCBnZXRSZWNlbnRDb21taXRzLCBjYWxjU3RhdHMgfSBmcm9tICdAL2xpYi9naXRlYSc7XG5pbXBvcnQgdHlwZSB7IEdpdGVhUmVwbywgR2l0ZWFDb21taXQsIEhlYXRtYXBFbnRyeSB9IGZyb20gJ0AvbGliL3R5cGVzJztcblxuLy8g4pSA4pSAIENhbGVuZGFyIGNvbnN0YW50cyDilIDilIBcbmNvbnN0IENFTEwgPSAxMiwgR0FQID0gMywgU1RFUCA9IENFTEwgKyBHQVA7XG5jb25zdCBEQVlfTEFCRUxfVyA9IDI2O1xuY29uc3QgV0VFS1MgPSA1Mjtcbi8vIEx1bWlub3NpdHkgbGV2ZWxzICh3aGl0ZS1vbi1kYXJrIGdsb3cgZWZmZWN0KVxuY29uc3QgTEVWRUxTID0gW1xuICAncmdiYSgyNTUsMjU1LDI1NSwwLjA0KScsICAvLyAwXG4gICdyZ2JhKDI1NSwyNTUsMjU1LDAuMTMpJywgIC8vIDEtMlxuICAncmdiYSgyNTUsMjU1LDI1NSwwLjI4KScsICAvLyAzLTVcbiAgJ3JnYmEoMjU1LDI1NSwyNTUsMC41MCknLCAgLy8gNi05XG4gICdyZ2JhKDI1NSwyNTUsMjU1LDAuODApJywgIC8vIDEwK1xuXTtcbmZ1bmN0aW9uIGdldExldmVsKG46IG51bWJlcikge1xuICBpZiAobiA9PT0gMCkgcmV0dXJuIDA7XG4gIGlmIChuIDw9IDIpICByZXR1cm4gMTtcbiAgaWYgKG4gPD0gNSkgIHJldHVybiAyO1xuICBpZiAobiA8PSA5KSAgcmV0dXJuIDM7XG4gIHJldHVybiA0O1xufVxuXG5mdW5jdGlvbiB0aW1lQWdvKHM6IHN0cmluZykge1xuICBjb25zdCBkID0gRGF0ZS5ub3coKSAtIG5ldyBEYXRlKHMpLmdldFRpbWUoKTtcbiAgY29uc3QgbSA9IE1hdGguZmxvb3IoZCAvIDYwMDAwKTtcbiAgaWYgKG0gPCAxKSByZXR1cm4gJ2p1c3Qgbm93JztcbiAgaWYgKG0gPCA2MCkgcmV0dXJuIGAke219bWA7XG4gIGNvbnN0IGggPSBNYXRoLmZsb29yKG0gLyA2MCk7XG4gIGlmIChoIDwgMjQpIHJldHVybiBgJHtofWhgO1xuICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihoIC8gMjQpO1xuICBpZiAoZGF5cyA8IDMwKSByZXR1cm4gYCR7ZGF5c31kYDtcbiAgcmV0dXJuIGAke01hdGguZmxvb3IoZGF5cyAvIDMwKX1tb2A7XG59XG5cbi8vIOKUgOKUgCBTdGF0IGNhcmQg4pSA4pSAXG5mdW5jdGlvbiBTdGF0KHsgbGFiZWwsIHZhbHVlLCBzdWIgfTogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyOyBzdWI6IHN0cmluZyB9KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJnbGFzcyByb3VuZGVkLTJ4bCBweC01IHB5LTQgZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1bMTBweF0gZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWy4xZW1dIHRleHQtd2hpdGUvMjVcIj57bGFiZWx9PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1bY2xhbXAoMS40cmVtLDN2dywycmVtKV0gZm9udC1ibGFjayB0ZXh0LXdoaXRlIHRhYnVsYXItbnVtcyBsZWFkaW5nLW5vbmVcIj57dmFsdWV9PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXdoaXRlLzMwXCI+e3N1Yn08L3NwYW4+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8vIOKUgOKUgCBDb250cmlidXRpb24gQ2FsZW5kYXIg4pSA4pSAXG5mdW5jdGlvbiBDb250cmlidXRpb25DYWxlbmRhcih7IGRhdGEgfTogeyBkYXRhOiBIZWF0bWFwRW50cnlbXSB9KSB7XG4gIGNvbnN0IFt0b29sdGlwLCBzZXRUb29sdGlwXSA9IHVzZVN0YXRlPHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IGRhdGU6IHN0cmluZzsgY291bnQ6IG51bWJlciB9IHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgZGF0ZU1hcCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IG0gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGRhdGEuZm9yRWFjaChlID0+IHtcbiAgICAgIGNvbnN0IGsgPSBuZXcgRGF0ZShlLnRpbWVzdGFtcCAqIDEwMDApLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcbiAgICAgIG0uc2V0KGssIChtLmdldChrKSB8fCAwKSArIGUuY29udHJpYnV0aW9ucyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG07XG4gIH0sIFtkYXRhXSk7XG5cbiAgLy8gQnVpbGQgNTItd2VlayBncmlkIHN0YXJ0aW5nIGZyb20gU3VuZGF5IDUxIHdlZWtzIGFnb1xuICBjb25zdCB7IHdlZWtzLCBtb250aExhYmVscyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIGNvbnN0IHN0YXJ0U3VuZGF5ID0gbmV3IERhdGUodG9kYXkpO1xuICAgIHN0YXJ0U3VuZGF5LnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpIC0gdG9kYXkuZ2V0RGF5KCkgLSA1MSAqIDcpO1xuXG4gICAgY29uc3Qgd2Vla3M6IHsgZGF0ZTogRGF0ZTsga2V5OiBzdHJpbmc7IGNvdW50OiBudW1iZXIgfVtdW10gPSBbXTtcbiAgICBjb25zdCBtb250aExhYmVsczogeyBsYWJlbDogc3RyaW5nOyB4OiBudW1iZXIgfVtdID0gW107XG4gICAgbGV0IGxhc3RNb250aCA9IC0xO1xuICAgIGNvbnN0IGN1ciA9IG5ldyBEYXRlKHN0YXJ0U3VuZGF5KTtcblxuICAgIGZvciAobGV0IHcgPSAwOyB3IDwgV0VFS1M7IHcrKykge1xuICAgICAgY29uc3Qgd2VlazogeyBkYXRlOiBEYXRlOyBrZXk6IHN0cmluZzsgY291bnQ6IG51bWJlciB9W10gPSBbXTtcbiAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgNzsgZCsrKSB7XG4gICAgICAgIGNvbnN0IGsgPSBjdXIudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuICAgICAgICB3ZWVrLnB1c2goeyBkYXRlOiBuZXcgRGF0ZShjdXIpLCBrZXk6IGssIGNvdW50OiBkYXRlTWFwLmdldChrKSB8fCAwIH0pO1xuICAgICAgICBjdXIuc2V0RGF0ZShjdXIuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICB9XG4gICAgICBjb25zdCBtbyA9IHdlZWtbMF0uZGF0ZS5nZXRNb250aCgpO1xuICAgICAgaWYgKG1vICE9PSBsYXN0TW9udGgpIHtcbiAgICAgICAgbW9udGhMYWJlbHMucHVzaCh7XG4gICAgICAgICAgbGFiZWw6IHdlZWtbMF0uZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ3Nob3J0JyB9KSxcbiAgICAgICAgICB4OiB3ICogU1RFUCArIERBWV9MQUJFTF9XLFxuICAgICAgICB9KTtcbiAgICAgICAgbGFzdE1vbnRoID0gbW87XG4gICAgICB9XG4gICAgICB3ZWVrcy5wdXNoKHdlZWspO1xuICAgIH1cbiAgICByZXR1cm4geyB3ZWVrcywgbW9udGhMYWJlbHMgfTtcbiAgfSwgW2RhdGVNYXBdKTtcblxuICBjb25zdCBzdmdXID0gREFZX0xBQkVMX1cgKyBXRUVLUyAqIFNURVA7XG4gIGNvbnN0IHN2Z0ggPSA3ICogU1RFUCArIDIwO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItNFwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bLjFlbV0gdGV4dC13aGl0ZS8zMFwiPlxuICAgICAgICAgIENvbnRyaWJ1dGlvbiBDYWxlbmRhciDCtyBsYXN0IDEyIG1vbnRoc1xuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzIwXCI+XG4gICAgICAgICAgPHNwYW4+TGVzczwvc3Bhbj5cbiAgICAgICAgICB7TEVWRUxTLm1hcCgoYywgaSkgPT4gKFxuICAgICAgICAgICAgPHNwYW4ga2V5PXtpfSBjbGFzc05hbWU9XCJyb3VuZGVkLXNtIGlubGluZS1ibG9jayB3LTIuNSBoLTIuNSBmbGV4LXNocmluay0wXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZDogYywgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wNiknIH19IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgPHNwYW4+TW9yZTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJvdmVyZmxvdy14LWF1dG8gcGItMVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPXtzdmdXfSBoZWlnaHQ9e3N2Z0h9IGFyaWEtbGFiZWw9XCJDb250cmlidXRpb24gY2FsZW5kYXIgaGVhdG1hcFwiIHJvbGU9XCJpbWdcIj5cbiAgICAgICAgICB7LyogTW9udGggbGFiZWxzICovfVxuICAgICAgICAgIHttb250aExhYmVscy5tYXAoKG0sIGkpID0+IChcbiAgICAgICAgICAgIDx0ZXh0IGtleT17aX0geD17bS54fSB5PXsxMH0gZm9udFNpemU9ezl9IGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMjUpXCJcbiAgICAgICAgICAgICAgZm9udEZhbWlseT1cInZhcigtLWZvbnQtZ2Vpc3QtbW9ubywgbW9ub3NwYWNlKVwiPnttLmxhYmVsfTwvdGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICB7LyogRGF5IGxhYmVscyAqL31cbiAgICAgICAgICB7WycnLCAnTW9uJywgJycsICdXZWQnLCAnJywgJ0ZyaScsICcnXS5tYXAoKGQsIGkpID0+IGQgPyAoXG4gICAgICAgICAgICA8dGV4dCBrZXk9e2l9IHg9e0RBWV9MQUJFTF9XIC0gNH0geT17MTcgKyBpICogU1RFUCArIENFTEx9XG4gICAgICAgICAgICAgIGZvbnRTaXplPXs5fSBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjIpXCIgdGV4dEFuY2hvcj1cImVuZFwiXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk9XCJ2YXIoLS1mb250LWdlaXN0LW1vbm8sIG1vbm9zcGFjZSlcIj57ZH08L3RleHQ+XG4gICAgICAgICAgKSA6IG51bGwpfVxuICAgICAgICAgIHsvKiBDZWxscyAqL31cbiAgICAgICAgICA8ZyB0cmFuc2Zvcm09e2B0cmFuc2xhdGUoJHtEQVlfTEFCRUxfV30sIDE0KWB9PlxuICAgICAgICAgICAge3dlZWtzLm1hcCgod2Vlaywgd2kpID0+XG4gICAgICAgICAgICAgIHdlZWsubWFwKChkYXksIGRpKSA9PiAoXG4gICAgICAgICAgICAgICAgPHJlY3RcbiAgICAgICAgICAgICAgICAgIGtleT17ZGF5LmtleX1cbiAgICAgICAgICAgICAgICAgIHg9e3dpICogU1RFUH0geT17ZGkgKiBTVEVQfVxuICAgICAgICAgICAgICAgICAgd2lkdGg9e0NFTEx9IGhlaWdodD17Q0VMTH0gcng9ezIuNX1cbiAgICAgICAgICAgICAgICAgIGZpbGw9e0xFVkVMU1tnZXRMZXZlbChkYXkuY291bnQpXX1cbiAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17ZSA9PiBzZXRUb29sdGlwKHtcbiAgICAgICAgICAgICAgICAgICAgeDogZS5jbGllbnRYLCB5OiBlLmNsaWVudFksXG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IGRheS5kYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tR0InLCB7IHdlZWtkYXk6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBtb250aDogJ3Nob3J0JywgeWVhcjogJ251bWVyaWMnIH0pLFxuICAgICAgICAgICAgICAgICAgICBjb3VudDogZGF5LmNvdW50LFxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldFRvb2x0aXAobnVsbCl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTAwIGhvdmVyOm9wYWNpdHktNzAgY3Vyc29yLWRlZmF1bHRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDx0aXRsZT57YCR7ZGF5LmNvdW50fSBjb250cmlidXRpb24ke2RheS5jb3VudCAhPT0gMSA/ICdzJyA6ICcnfSBvbiAke2RheS5kYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpfWB9PC90aXRsZT5cbiAgICAgICAgICAgICAgICA8L3JlY3Q+XG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIFRvb2x0aXAgKi99XG4gICAgICB7dG9vbHRpcCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmaXhlZCB6LTUwIHBvaW50ZXItZXZlbnRzLW5vbmUgcHgtMi41IHB5LTEuNSByb3VuZGVkLWxnIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC13aGl0ZVxuICAgICAgICAgICAgYmctWyMxYTFhMWFdIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMV0gc2hhZG93LXhsIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICBzdHlsZT17eyBsZWZ0OiB0b29sdGlwLnggKyAxMiwgdG9wOiB0b29sdGlwLnkgLSAzNiB9fT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LWJvbGRcIj57dG9vbHRpcC5jb3VudH08L3NwYW4+XG4gICAgICAgICAgeycgY29udHJpYnV0aW9uJ317dG9vbHRpcC5jb3VudCAhPT0gMSA/ICdzJyA6ICcnfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtd2hpdGUvNDAgbWwtMS41XCI+e3Rvb2x0aXAuZGF0ZX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLy8g4pSA4pSAIE1vbnRobHkgYmFyIGNoYXJ0IOKUgOKUgFxuZnVuY3Rpb24gTW9udGhseUNoYXJ0KHsgZGF0YSB9OiB7IGRhdGE6IEhlYXRtYXBFbnRyeVtdIH0pIHtcbiAgY29uc3QgbW9udGhzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpKSA9PiB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUoKTtcbiAgICAgIGQuc2V0TW9udGgoZC5nZXRNb250aCgpIC0gMTEgKyBpKTtcbiAgICAgIGNvbnN0IGtleSA9IGAke2QuZ2V0RnVsbFllYXIoKX0tJHtTdHJpbmcoZC5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgICAgY29uc3QgbGFiZWwgPSBkLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnc2hvcnQnIH0pO1xuICAgICAgY29uc3QgY291bnQgPSBkYXRhXG4gICAgICAgIC5maWx0ZXIoZSA9PiB7XG4gICAgICAgICAgY29uc3QgZWQgPSBuZXcgRGF0ZShlLnRpbWVzdGFtcCAqIDEwMDApO1xuICAgICAgICAgIHJldHVybiBgJHtlZC5nZXRGdWxsWWVhcigpfS0ke1N0cmluZyhlZC5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKX1gID09PSBrZXk7XG4gICAgICAgIH0pXG4gICAgICAgIC5yZWR1Y2UoKHMsIGUpID0+IHMgKyBlLmNvbnRyaWJ1dGlvbnMsIDApO1xuICAgICAgcmV0dXJuIHsgbGFiZWwsIGNvdW50IH07XG4gICAgfSk7XG4gIH0sIFtkYXRhXSk7XG5cbiAgY29uc3QgbWF4VmFsID0gTWF0aC5tYXgoLi4ubW9udGhzLm1hcChtID0+IG0uY291bnQpLCAxKTtcbiAgY29uc3QgYmFyVyA9IDEwMCAvIDEyO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVsuMWVtXSB0ZXh0LXdoaXRlLzMwIGJsb2NrIG1iLTVcIj5cbiAgICAgICAgTW9udGhseSBhY3Rpdml0eVxuICAgICAgPC9zcGFuPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBoLTI0IGZsZXggaXRlbXMtZW5kIGdhcC0xLjVcIiBhcmlhLWxhYmVsPVwiTW9udGhseSBjb21taXQgYWN0aXZpdHkgYmFyIGNoYXJ0XCIgcm9sZT1cImltZ1wiPlxuICAgICAgICB7bW9udGhzLm1hcCgobSwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBjdCA9IChtLmNvdW50IC8gbWF4VmFsKSAqIDEwMDtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBrZXk9e2l9IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMS41IGdyb3VwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIHJlbGF0aXZlXCIgc3R5bGU9e3sgaGVpZ2h0OiAnODBweCcgfX0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgcm91bmRlZC1zbSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgZWFzZS1vdXRcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtNYXRoLm1heChwY3QsIDIpfSVgLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBgcmdiYSgyNTUsMjU1LDI1NSwkezAuMDYgKyAocGN0IC8gMTAwKSAqIDAuNX0pYCxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICB0aXRsZT17YCR7bS5sYWJlbH06ICR7bS5jb3VudH0gY29udHJpYnV0aW9uc2B9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtWzhweF0gdGV4dC13aGl0ZS8yMCBmb250LW1vbm9cIj57bS5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyDilIDilIAgUmVjZW50IGNvbW1pdHMg4pSA4pSAXG5mdW5jdGlvbiBSZWNlbnRDb21taXRzKHsgY29tbWl0cyB9OiB7IGNvbW1pdHM6IEdpdGVhQ29tbWl0W10gfSkge1xuICBpZiAoIWNvbW1pdHMubGVuZ3RoKSByZXR1cm4gKFxuICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC13aGl0ZS8yMCBweS00XCI+Tm8gcmVjZW50IGNvbW1pdHMuPC9wPlxuICApO1xuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bLjFlbV0gdGV4dC13aGl0ZS8zMCBibG9jayBtYi01XCI+XG4gICAgICAgIFJlY2VudCBjb21taXRzXG4gICAgICA8L3NwYW4+XG4gICAgICA8b2wgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbFwiIGFyaWEtbGFiZWw9XCJSZWNlbnQgY29tbWl0IGxpc3RcIj5cbiAgICAgICAge2NvbW1pdHMuc2xpY2UoMCwgMTApLm1hcCgoYywgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNoYSA9IChjLnNoYSB8fCAnJykuc2xpY2UoMCwgNyk7XG4gICAgICAgICAgY29uc3QgbXNnID0gKGMuY29tbWl0Py5tZXNzYWdlIHx8ICcnKS5zcGxpdCgnXFxuJylbMF0uc2xpY2UoMCwgNjQpO1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBjLmNyZWF0ZWQgfHwgYy5jb21taXQ/LmF1dGhvcj8uZGF0ZTtcbiAgICAgICAgICBjb25zdCBpc0xhc3QgPSBpID09PSBNYXRoLm1pbig5LCBjb21taXRzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8bGkga2V5PXtjLnNoYX0gY2xhc3NOYW1lPXtgY29tbWl0LWxpbmUgcmVsYXRpdmUgZmxleCBnYXAtMyBwYi00ICR7aXNMYXN0ID8gJycgOiAnJ31gfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xLjUgZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJsb2NrIHctMiBoLTIgcm91bmRlZC1mdWxsIGJnLXdoaXRlLzIwIHJlbGF0aXZlIHotMTBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIGZsZXgtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1iYXNlbGluZSBnYXAtMiBtYi0wLjUgZmxleC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlciB0ZXh0LXdoaXRlLzI1XCI+XG4gICAgICAgICAgICAgICAgICAgIHtjLl9yZXBvfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgaHJlZj17Yy5fcmVwb1VybCA/IGAke2MuX3JlcG9Vcmx9L2NvbW1pdC8ke2Muc2hhfWAgOiAnIyd9XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC13aGl0ZS8yMCBob3Zlcjp0ZXh0LXdoaXRlLzUwIHRyYW5zaXRpb24tY29sb3JzIHB4LTEgcHktMC41XG4gICAgICAgICAgICAgICAgICAgICAgcm91bmRlZCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl1cIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgVmlldyBjb21taXQgJHtzaGF9YH0+XG4gICAgICAgICAgICAgICAgICAgIHtzaGF9XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzIwIG1sLWF1dG9cIj57ZGF0ZSA/IHRpbWVBZ28oZGF0ZSkgOiAnJ308L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXdoaXRlLzYwIHRydW5jYXRlIGxlYWRpbmctc251Z1wiPnttc2d9PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L29sPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyDilIDilIAgTWFpbiBzZWN0aW9uIOKUgOKUgFxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29tbWl0U2VjdGlvbigpIHtcbiAgY29uc3QgW3JlcG9zLCBzZXRSZXBvc10gICAgID0gdXNlU3RhdGU8R2l0ZWFSZXBvW10+KFtdKTtcbiAgY29uc3QgW2hlYXRtYXAsIHNldEhlYXRtYXBdID0gdXNlU3RhdGU8SGVhdG1hcEVudHJ5W10+KFtdKTtcbiAgY29uc3QgW2NvbW1pdHMsIHNldENvbW1pdHNdID0gdXNlU3RhdGU8R2l0ZWFDb21taXRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gICAgID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhc3luYyBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgW3IsIGhdID0gYXdhaXQgUHJvbWlzZS5hbGwoW2dldFJlcG9zKDYpLCBnZXRIZWF0bWFwKCldKTtcbiAgICAgICAgc2V0UmVwb3Mocik7XG4gICAgICAgIHNldEhlYXRtYXAoaCk7XG4gICAgICAgIGNvbnN0IGMgPSBhd2FpdCBnZXRSZWNlbnRDb21taXRzKHIpO1xuICAgICAgICBzZXRDb21taXRzKGMpO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBjb25zdCBtc2cgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgICAgIHNldEVycm9yKG1zZyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9hZCgpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgc3RhdHMgPSB1c2VNZW1vKCgpID0+IGNhbGNTdGF0cyhoZWF0bWFwKSwgW2hlYXRtYXBdKTtcblxuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uIGlkPVwiYWN0aXZpdHlcIiBjbGFzc05hbWU9XCJweS0yNCBweC02XCIgYXJpYS1sYWJlbGxlZGJ5PVwiYWN0aXZpdHktaGVhZGluZ1wiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy01eGwgbXgtYXV0b1wiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsYWJlbFwiPkdpdGVhIMK3IENvZGUgYWN0aXZpdHk8L3NwYW4+XG4gICAgICAgIDxoMiBpZD1cImFjdGl2aXR5LWhlYWRpbmdcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtW2NsYW1wKDEuOHJlbSw0dncsMi41cmVtKV0gZm9udC1ibGFjayB0cmFja2luZy10aWdodCB0ZXh0LXdoaXRlIG1iLTEwXCI+XG4gICAgICAgICAgQ29udHJpYnV0aW9uc1xuICAgICAgICA8L2gyPlxuXG4gICAgICAgIHsvKiBTdGF0cyByb3cgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBzbTpncmlkLWNvbHMtNCBnYXAtMyBtYi02XCI+XG4gICAgICAgICAgPFN0YXQgbGFiZWw9XCJDb250cmlidXRpb25zXCIgdmFsdWU9e2xvYWRpbmcgPyAn4oCUJyA6IHN0YXRzLnRvdGFsLnRvTG9jYWxlU3RyaW5nKCl9IHN1Yj1cInRoaXMgeWVhclwiIC8+XG4gICAgICAgICAgPFN0YXQgbGFiZWw9XCJDdXJyZW50IHN0cmVha1wiIHZhbHVlPXtsb2FkaW5nID8gJ+KAlCcgOiBgJHtzdGF0cy5jdXJyZW50U3RyZWFrfWRgfSBzdWI9XCJkYXlzXCIgLz5cbiAgICAgICAgICA8U3RhdCBsYWJlbD1cIkxvbmdlc3Qgc3RyZWFrXCIgdmFsdWU9e2xvYWRpbmcgPyAn4oCUJyA6IGAke3N0YXRzLmxvbmdlc3RTdHJlYWt9ZGB9IHN1Yj1cImRheXNcIiAvPlxuICAgICAgICAgIDxTdGF0IGxhYmVsPVwiQWN0aXZlIGRheXNcIiAgICB2YWx1ZT17bG9hZGluZyA/ICfigJQnIDogc3RhdHMuYWN0aXZlRGF5c30gc3ViPVwidGhpcyB5ZWFyXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIENhbGVuZGFyICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdsYXNzIHJvdW5kZWQtMnhsIHAtNSBzbTpwLTYgbWItNFwiPlxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2tlbCBoLTMgdy00OFwiIC8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2tlbCBoLVsxMjBweF0gdy1mdWxsIHJvdW5kZWQteGxcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IGVycm9yID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBweS02XCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtd2hpdGUvMzAgdGV4dC1zbVwiPkNvdWxkIG5vdCBsb2FkIGhlYXRtYXA8L3A+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtd2hpdGUvMjAgdGV4dC14cyBmb250LW1vbm8gbXQtMVwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPENvbnRyaWJ1dGlvbkNhbGVuZGFyIGRhdGE9e2hlYXRtYXB9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIE1vbnRobHkgKyBjb21taXRzICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgbGc6Z3JpZC1jb2xzLVsxZnJfMzYwcHhdIGdhcC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJnbGFzcyByb3VuZGVkLTJ4bCBwLTUgc206cC02XCI+XG4gICAgICAgICAgICB7bG9hZGluZ1xuICAgICAgICAgICAgICA/IDxkaXYgY2xhc3NOYW1lPVwic2tlbCBoLTMyIHctZnVsbCByb3VuZGVkLXhsXCIgLz5cbiAgICAgICAgICAgICAgOiA8TW9udGhseUNoYXJ0IGRhdGE9e2hlYXRtYXB9IC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJnbGFzcyByb3VuZGVkLTJ4bCBwLTUgc206cC02IG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAge2xvYWRpbmdcbiAgICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC00XCI+XG4gICAgICAgICAgICAgICAgICB7Wy4uLkFycmF5KDUpXS5tYXAoKF8sIGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2l9IGNsYXNzTmFtZT1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNrZWwgdy0yIGgtMiByb3VuZGVkLWZ1bGwgbXQtMS41IGZsZXgtc2hyaW5rLTBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNrZWwgaC0yLjUgdy0xLzMgbWItMS41XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2tlbCBoLTMuNSB3LTUvNlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiA8UmVjZW50Q29tbWl0cyBjb21taXRzPXtjb21taXRzfSAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7LyogUmVwbyBiYXIgY2hhcnQgKi99XG4gICAgICAgIHshbG9hZGluZyAmJiByZXBvcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdsYXNzIHJvdW5kZWQtMnhsIHAtNSBzbTpwLTYgbXQtNFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWy4xZW1dIHRleHQtd2hpdGUvMzAgYmxvY2sgbWItNVwiPlxuICAgICAgICAgICAgICBSZXBvc2l0b3J5IGJyZWFrZG93blxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0yLjVcIj5cbiAgICAgICAgICAgICAge3JlcG9zLnNsaWNlKDAsIDYpLm1hcChyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhTdGFycyA9IE1hdGgubWF4KC4uLnJlcG9zLm1hcCh4ID0+IHguc3RhcnNfY291bnQpLCAxKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwY3QgPSAoci5zdGFyc19jb3VudCAvIG1heFN0YXJzKSAqIDEwMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3IuaWR9IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIGdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e3IuaHRtbF91cmx9IHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tb25vIHRleHQtd2hpdGUvNDAgaG92ZXI6dGV4dC13aGl0ZS83MCB0cmFuc2l0aW9uLWNvbG9ycyB3LTM2IHRydW5jYXRlIHNocmluay0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3IubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBoLTEuNSBiZy13aGl0ZS9bMC4wNF0gcm91bmRlZC1mdWxsIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1mdWxsIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS8yNSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi01MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IGAke01hdGgubWF4KHBjdCwgMil9JWAgfX0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtWzEwcHhdIHRleHQtd2hpdGUvMjUgdGFidWxhci1udW1zIHctNiB0ZXh0LXJpZ2h0XCI+e3Iuc3RhcnNfY291bnR9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsInVzZU1lbW8iLCJnZXRSZXBvcyIsImdldEhlYXRtYXAiLCJnZXRSZWNlbnRDb21taXRzIiwiY2FsY1N0YXRzIiwiQ0VMTCIsIkdBUCIsIlNURVAiLCJEQVlfTEFCRUxfVyIsIldFRUtTIiwiTEVWRUxTIiwiZ2V0TGV2ZWwiLCJuIiwidGltZUFnbyIsInMiLCJkIiwiRGF0ZSIsIm5vdyIsImdldFRpbWUiLCJtIiwiTWF0aCIsImZsb29yIiwiaCIsImRheXMiLCJTdGF0IiwibGFiZWwiLCJ2YWx1ZSIsInN1YiIsImRpdiIsImNsYXNzTmFtZSIsInNwYW4iLCJDb250cmlidXRpb25DYWxlbmRhciIsImRhdGEiLCJ0b29sdGlwIiwic2V0VG9vbHRpcCIsImRhdGVNYXAiLCJNYXAiLCJmb3JFYWNoIiwiZSIsImsiLCJ0aW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsInNwbGl0Iiwic2V0IiwiZ2V0IiwiY29udHJpYnV0aW9ucyIsIndlZWtzIiwibW9udGhMYWJlbHMiLCJ0b2RheSIsInNldEhvdXJzIiwic3RhcnRTdW5kYXkiLCJzZXREYXRlIiwiZ2V0RGF0ZSIsImdldERheSIsImxhc3RNb250aCIsImN1ciIsInciLCJ3ZWVrIiwicHVzaCIsImRhdGUiLCJrZXkiLCJjb3VudCIsIm1vIiwiZ2V0TW9udGgiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJtb250aCIsIngiLCJzdmdXIiwic3ZnSCIsIm1hcCIsImMiLCJpIiwic3R5bGUiLCJiYWNrZ3JvdW5kIiwiYm9yZGVyIiwiYXJpYS1oaWRkZW4iLCJzdmciLCJ3aWR0aCIsImhlaWdodCIsImFyaWEtbGFiZWwiLCJyb2xlIiwidGV4dCIsInkiLCJmb250U2l6ZSIsImZpbGwiLCJmb250RmFtaWx5IiwidGV4dEFuY2hvciIsImciLCJ0cmFuc2Zvcm0iLCJ3aSIsImRheSIsImRpIiwicmVjdCIsInJ4Iiwib25Nb3VzZUVudGVyIiwiY2xpZW50WCIsImNsaWVudFkiLCJ3ZWVrZGF5IiwieWVhciIsIm9uTW91c2VMZWF2ZSIsInRpdGxlIiwibGVmdCIsInRvcCIsIk1vbnRobHlDaGFydCIsIm1vbnRocyIsIkFycmF5IiwiZnJvbSIsImxlbmd0aCIsIl8iLCJzZXRNb250aCIsIlN0cmluZyIsImdldEZ1bGxZZWFyIiwicGFkU3RhcnQiLCJmaWx0ZXIiLCJlZCIsInJlZHVjZSIsIm1heFZhbCIsIm1heCIsImJhclciLCJwY3QiLCJSZWNlbnRDb21taXRzIiwiY29tbWl0cyIsInAiLCJvbCIsInNsaWNlIiwic2hhIiwibXNnIiwiY29tbWl0IiwibWVzc2FnZSIsImNyZWF0ZWQiLCJhdXRob3IiLCJpc0xhc3QiLCJtaW4iLCJsaSIsIl9yZXBvIiwiYSIsImhyZWYiLCJfcmVwb1VybCIsInRhcmdldCIsInJlbCIsIkNvbW1pdFNlY3Rpb24iLCJyZXBvcyIsInNldFJlcG9zIiwiaGVhdG1hcCIsInNldEhlYXRtYXAiLCJzZXRDb21taXRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwibG9hZCIsInIiLCJQcm9taXNlIiwiYWxsIiwiRXJyb3IiLCJzdGF0cyIsInNlY3Rpb24iLCJpZCIsImFyaWEtbGFiZWxsZWRieSIsImgyIiwidG90YWwiLCJ0b0xvY2FsZVN0cmluZyIsImN1cnJlbnRTdHJlYWsiLCJsb25nZXN0U3RyZWFrIiwiYWN0aXZlRGF5cyIsIm1heFN0YXJzIiwic3RhcnNfY291bnQiLCJodG1sX3VybCIsIm5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/CommitSection.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./components/Contact.tsx":
|
||
/*!********************************!*\
|
||
!*** ./components/Contact.tsx ***!
|
||
\********************************/
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Contact; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/config */ \"(app-pages-browser)/./lib/config.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\nfunction Contact() {\n _s();\n const [status, setStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"idle\");\n function handleSubmit(e) {\n e.preventDefault();\n const fd = new FormData(e.currentTarget);\n const name = fd.get(\"name\");\n const email = fd.get(\"email\");\n const message = fd.get(\"message\");\n if (!name || !email || !message) return;\n const sub = encodeURIComponent(\"Message from \".concat(name, \" via williammarch.xyz\"));\n const body = encodeURIComponent(\"From: \".concat(name, \" <\").concat(email, \">\\n\\n\").concat(message));\n window.location.href = \"mailto:\".concat(_lib_config__WEBPACK_IMPORTED_MODULE_2__.SITE.email, \"?subject=\").concat(sub, \"&body=\").concat(body);\n setStatus(\"sent\");\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n id: \"contact\",\n className: \"py-24 px-6 bg-[#0a0a0a]\",\n \"aria-labelledby\": \"contact-heading\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-5xl mx-auto\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"label\",\n children: \"Get in touch\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 24,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n id: \"contact-heading\",\n className: \"text-[clamp(1.8rem,4vw,2.5rem)] font-black tracking-tight text-white mb-10\",\n children: \"Let’s work together.\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid md:grid-cols-[280px_1fr] gap-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"mailto:\".concat(_lib_config__WEBPACK_IMPORTED_MODULE_2__.SITE.email),\n className: \"glass rounded-xl p-4 flex items-center gap-3 group hover:border-white/[0.14] hover:-translate-x-[-4px] transition-all duration-150\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 rounded-lg bg-white/[0.05] flex items-center justify-center flex-shrink-0\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"rgba(255,255,255,0.5)\",\n strokeWidth: \"1.8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"rect\", {\n x: \"2\",\n y: \"4\",\n width: \"20\",\n height: \"16\",\n rx: \"2\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 38,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 38,\n columnNumber: 68\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 37,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 36,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-[10px] text-white/25 uppercase tracking-wider\",\n children: \"Email\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 42,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-medium text-white/55 truncate group-hover:text-white/80 transition-colors\",\n children: _lib_config__WEBPACK_IMPORTED_MODULE_2__.SITE.email\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 43,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 41,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 33,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"\".concat(_lib_config__WEBPACK_IMPORTED_MODULE_2__.GITEA_URL, \"/\").concat(_lib_config__WEBPACK_IMPORTED_MODULE_2__.GITEA_USERNAME),\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"glass rounded-xl p-4 flex items-center gap-3 group hover:border-white/[0.14] hover:translate-x-1 transition-all duration-150\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 rounded-lg bg-white/[0.05] flex items-center justify-center flex-shrink-0\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"rgba(255,255,255,0.5)\",\n strokeWidth: \"1.8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M15 22v-4a4.8 4.8 0 0 0-1-3.2c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 52,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M9 18c-4.51 2-5-2-7-2\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 53,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 51,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 50,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-[10px] text-white/25 uppercase tracking-wider\",\n children: \"Gitea\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 57,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-medium text-white/55 truncate group-hover:text-white/80 transition-colors font-mono\",\n children: [\n _lib_config__WEBPACK_IMPORTED_MODULE_2__.GITEA_URL.replace(/^https?:\\/\\//, \"\"),\n \"/\",\n _lib_config__WEBPACK_IMPORTED_MODULE_2__.GITEA_USERNAME\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 58,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 56,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 46,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 32,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSubmit,\n className: \"glass rounded-xl p-6 flex flex-col gap-4\",\n noValidate: true,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid sm:grid-cols-2 gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"flex flex-col gap-1.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[10px] font-semibold uppercase tracking-wider text-white/30\",\n children: \"Name\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 69,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n name: \"name\",\n type: \"text\",\n required: true,\n placeholder: \"Your name\",\n autoComplete: \"name\",\n className: \"bg-white/[0.03] border border-white/[0.08] rounded-lg px-3 py-2.5 text-sm text-white placeholder-white/20 outline-none transition-colors focus:border-white/[0.2] focus:ring-1 focus:ring-white/[0.1]\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 70,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 68,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"flex flex-col gap-1.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[10px] font-semibold uppercase tracking-wider text-white/30\",\n children: \"Email\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 76,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n name: \"email\",\n type: \"email\",\n required: true,\n placeholder: \"you@example.com\",\n autoComplete: \"email\",\n className: \"bg-white/[0.03] border border-white/[0.08] rounded-lg px-3 py-2.5 text-sm text-white placeholder-white/20 outline-none transition-colors focus:border-white/[0.2] focus:ring-1 focus:ring-white/[0.1]\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 77,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 75,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 67,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"flex flex-col gap-1.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[10px] font-semibold uppercase tracking-wider text-white/30\",\n children: \"Message\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 84,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n name: \"message\",\n required: true,\n placeholder: \"What's on your mind?\",\n rows: 4,\n className: \"bg-white/[0.03] border border-white/[0.08] rounded-lg px-3 py-2.5 text-sm text-white placeholder-white/20 outline-none resize-none transition-colors focus:border-white/[0.2] focus:ring-1 focus:ring-white/[0.1]\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 85,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 83,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"btn btn-primary\",\n children: [\n status === \"sent\" ? \"Opening email…\" : \"Send message\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"13\",\n height: \"13\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2.5\",\n \"aria-hidden\": \"true\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"line\", {\n x1: \"22\",\n y1: \"2\",\n x2: \"11\",\n y2: \"13\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 94,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"polygon\", {\n points: \"22 2 15 22 11 13 2 9 22 2\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 94,\n columnNumber: 57\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 93,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 91,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 90,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 66,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 30,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 23,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Contact.tsx\",\n lineNumber: 22,\n columnNumber: 5\n }, this);\n}\n_s(Contact, \"pMVgpsUAJOHrZfHrrx/6nNCpzkc=\");\n_c = Contact;\nvar _c;\n$RefreshReg$(_c, \"Contact\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvQ29udGFjdC50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUNpQztBQUM4QjtBQUVoRCxTQUFTSTs7SUFDdEIsTUFBTSxDQUFDQyxRQUFRQyxVQUFVLEdBQUdOLCtDQUFRQSxDQUFnQjtJQUVwRCxTQUFTTyxhQUFhQyxDQUFtQztRQUN2REEsRUFBRUMsY0FBYztRQUNoQixNQUFNQyxLQUFLLElBQUlDLFNBQVNILEVBQUVJLGFBQWE7UUFDdkMsTUFBTUMsT0FBVUgsR0FBR0ksR0FBRyxDQUFDO1FBQ3ZCLE1BQU1DLFFBQVVMLEdBQUdJLEdBQUcsQ0FBQztRQUN2QixNQUFNRSxVQUFVTixHQUFHSSxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDRCxRQUFRLENBQUNFLFNBQVMsQ0FBQ0MsU0FBUztRQUNqQyxNQUFNQyxNQUFPQyxtQkFBbUIsZ0JBQXFCLE9BQUxMLE1BQUs7UUFDckQsTUFBTU0sT0FBT0QsbUJBQW1CLFNBQWtCSCxPQUFURixNQUFLLE1BQWlCRyxPQUFiRCxPQUFNLFNBQWUsT0FBUkM7UUFDL0RJLE9BQU9DLFFBQVEsQ0FBQ0MsSUFBSSxHQUFHLFVBQWdDTCxPQUF0QmhCLDZDQUFJQSxDQUFDYyxLQUFLLEVBQUMsYUFBdUJJLE9BQVpGLEtBQUksVUFBYSxPQUFMRTtRQUNuRWIsVUFBVTtJQUNaO0lBRUEscUJBQ0UsOERBQUNpQjtRQUFRQyxJQUFHO1FBQVVDLFdBQVU7UUFBMEJDLG1CQUFnQjtrQkFDeEUsNEVBQUNDO1lBQUlGLFdBQVU7OzhCQUNiLDhEQUFDRztvQkFBS0gsV0FBVTs4QkFBUTs7Ozs7OzhCQUN4Qiw4REFBQ0k7b0JBQUdMLElBQUc7b0JBQ0xDLFdBQVU7OEJBQTZFOzs7Ozs7OEJBSXpGLDhEQUFDRTtvQkFBSUYsV0FBVTs7c0NBRWIsOERBQUNFOzRCQUFJRixXQUFVOzs4Q0FDYiw4REFBQ0s7b0NBQUVSLE1BQU0sVUFBcUIsT0FBWHJCLDZDQUFJQSxDQUFDYyxLQUFLO29DQUMzQlUsV0FBVTs7c0RBRVYsOERBQUNFOzRDQUFJRixXQUFVOzRDQUFvRk0sZUFBWTtzREFDN0csNEVBQUNDO2dEQUFJQyxPQUFNO2dEQUFLQyxRQUFPO2dEQUFLQyxTQUFRO2dEQUFZQyxNQUFLO2dEQUFPQyxRQUFPO2dEQUF3QkMsYUFBWTs7a0VBQ3JHLDhEQUFDQzt3REFBS0MsR0FBRTt3REFBSUMsR0FBRTt3REFBSVIsT0FBTTt3REFBS0MsUUFBTzt3REFBS1EsSUFBRzs7Ozs7O2tFQUFLLDhEQUFDQzt3REFBS0MsR0FBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7c0RBRzdELDhEQUFDakI7NENBQUlGLFdBQVU7OzhEQUNiLDhEQUFDb0I7b0RBQUVwQixXQUFVOzhEQUFxRDs7Ozs7OzhEQUNsRSw4REFBQ29CO29EQUFFcEIsV0FBVTs4REFBMEZ4Qiw2Q0FBSUEsQ0FBQ2MsS0FBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzhDQUdySCw4REFBQ2U7b0NBQUVSLE1BQU0sR0FBZ0JuQixPQUFiRCxrREFBU0EsRUFBQyxLQUFrQixPQUFmQyx1REFBY0E7b0NBQ3JDMkMsUUFBTztvQ0FBU0MsS0FBSTtvQ0FDcEJ0QixXQUFVOztzREFFViw4REFBQ0U7NENBQUlGLFdBQVU7NENBQW9GTSxlQUFZO3NEQUM3Ryw0RUFBQ0M7Z0RBQUlDLE9BQU07Z0RBQUtDLFFBQU87Z0RBQUtDLFNBQVE7Z0RBQVlDLE1BQUs7Z0RBQU9DLFFBQU87Z0RBQXdCQyxhQUFZOztrRUFDckcsOERBQUNLO3dEQUFLQyxHQUFFOzs7Ozs7a0VBQ1IsOERBQUNEO3dEQUFLQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OztzREFHWiw4REFBQ2pCOzRDQUFJRixXQUFVOzs4REFDYiw4REFBQ29CO29EQUFFcEIsV0FBVTs4REFBcUQ7Ozs7Ozs4REFDbEUsOERBQUNvQjtvREFBRXBCLFdBQVU7O3dEQUNWdkIsa0RBQVNBLENBQUM4QyxPQUFPLENBQUMsZ0JBQWdCO3dEQUFJO3dEQUFFN0MsdURBQWNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NDQU8vRCw4REFBQzhDOzRCQUFLQyxVQUFVM0M7NEJBQWNrQixXQUFVOzRCQUEyQzBCLFVBQVU7OzhDQUMzRiw4REFBQ3hCO29DQUFJRixXQUFVOztzREFDYiw4REFBQzJCOzRDQUFNM0IsV0FBVTs7OERBQ2YsOERBQUNHO29EQUFLSCxXQUFVOzhEQUFtRTs7Ozs7OzhEQUNuRiw4REFBQzRCO29EQUFNeEMsTUFBSztvREFBT3lDLE1BQUs7b0RBQU9DLFFBQVE7b0RBQUNDLGFBQVk7b0RBQVlDLGNBQWE7b0RBQzNFaEMsV0FBVTs7Ozs7Ozs7Ozs7O3NEQUlkLDhEQUFDMkI7NENBQU0zQixXQUFVOzs4REFDZiw4REFBQ0c7b0RBQUtILFdBQVU7OERBQW1FOzs7Ozs7OERBQ25GLDhEQUFDNEI7b0RBQU14QyxNQUFLO29EQUFReUMsTUFBSztvREFBUUMsUUFBUTtvREFBQ0MsYUFBWTtvREFBa0JDLGNBQWE7b0RBQ25GaEMsV0FBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7OzhDQUtoQiw4REFBQzJCO29DQUFNM0IsV0FBVTs7c0RBQ2YsOERBQUNHOzRDQUFLSCxXQUFVO3NEQUFtRTs7Ozs7O3NEQUNuRiw4REFBQ2lDOzRDQUFTN0MsTUFBSzs0Q0FBVTBDLFFBQVE7NENBQUNDLGFBQVk7NENBQXVCRyxNQUFNOzRDQUN6RWxDLFdBQVU7Ozs7Ozs7Ozs7Ozs4Q0FJZCw4REFBQ0U7b0NBQUlGLFdBQVU7OENBQ2IsNEVBQUNtQzt3Q0FBT04sTUFBSzt3Q0FBUzdCLFdBQVU7OzRDQUM3QnBCLFdBQVcsU0FBUyxtQkFBbUI7MERBQ3hDLDhEQUFDMkI7Z0RBQUlDLE9BQU07Z0RBQUtDLFFBQU87Z0RBQUtDLFNBQVE7Z0RBQVlDLE1BQUs7Z0RBQU9DLFFBQU87Z0RBQWVDLGFBQVk7Z0RBQU1QLGVBQVk7O2tFQUM5Ryw4REFBQzhCO3dEQUFLQyxJQUFHO3dEQUFLQyxJQUFHO3dEQUFJQyxJQUFHO3dEQUFLQyxJQUFHOzs7Ozs7a0VBQU0sOERBQUNDO3dEQUFRQyxRQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU3hFO0dBbEd3Qi9EO0tBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvQ29udGFjdC50c3g/YWI0ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNJVEUsIEdJVEVBX1VSTCwgR0lURUFfVVNFUk5BTUUgfSBmcm9tICdAL2xpYi9jb25maWcnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb250YWN0KCkge1xuICBjb25zdCBbc3RhdHVzLCBzZXRTdGF0dXNdID0gdXNlU3RhdGU8J2lkbGUnfCdzZW50Jz4oJ2lkbGUnKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTdWJtaXQoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxGb3JtRWxlbWVudD4pIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoZS5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCBuYW1lICAgID0gZmQuZ2V0KCduYW1lJykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGVtYWlsICAgPSBmZC5nZXQoJ2VtYWlsJykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBmZC5nZXQoJ21lc3NhZ2UnKSBhcyBzdHJpbmc7XG4gICAgaWYgKCFuYW1lIHx8ICFlbWFpbCB8fCAhbWVzc2FnZSkgcmV0dXJuO1xuICAgIGNvbnN0IHN1YiAgPSBlbmNvZGVVUklDb21wb25lbnQoYE1lc3NhZ2UgZnJvbSAke25hbWV9IHZpYSB3aWxsaWFtbWFyY2gueHl6YCk7XG4gICAgY29uc3QgYm9keSA9IGVuY29kZVVSSUNvbXBvbmVudChgRnJvbTogJHtuYW1lfSA8JHtlbWFpbH0+XFxuXFxuJHttZXNzYWdlfWApO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYG1haWx0bzoke1NJVEUuZW1haWx9P3N1YmplY3Q9JHtzdWJ9JmJvZHk9JHtib2R5fWA7XG4gICAgc2V0U3RhdHVzKCdzZW50Jyk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uIGlkPVwiY29udGFjdFwiIGNsYXNzTmFtZT1cInB5LTI0IHB4LTYgYmctWyMwYTBhMGFdXCIgYXJpYS1sYWJlbGxlZGJ5PVwiY29udGFjdC1oZWFkaW5nXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTV4bCBteC1hdXRvXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImxhYmVsXCI+R2V0IGluIHRvdWNoPC9zcGFuPlxuICAgICAgICA8aDIgaWQ9XCJjb250YWN0LWhlYWRpbmdcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtW2NsYW1wKDEuOHJlbSw0dncsMi41cmVtKV0gZm9udC1ibGFjayB0cmFja2luZy10aWdodCB0ZXh0LXdoaXRlIG1iLTEwXCI+XG4gICAgICAgICAgTGV0JnJzcXVvO3Mgd29yayB0b2dldGhlci5cbiAgICAgICAgPC9oMj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgbWQ6Z3JpZC1jb2xzLVsyODBweF8xZnJdIGdhcC02XCI+XG4gICAgICAgICAgey8qIExpbmtzICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiPlxuICAgICAgICAgICAgPGEgaHJlZj17YG1haWx0bzoke1NJVEUuZW1haWx9YH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ2xhc3Mgcm91bmRlZC14bCBwLTQgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgZ3JvdXAgaG92ZXI6Ym9yZGVyLXdoaXRlL1swLjE0XVxuICAgICAgICAgICAgICAgIGhvdmVyOi10cmFuc2xhdGUteC1bLTRweF0gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMTUwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy04IGgtOCByb3VuZGVkLWxnIGJnLXdoaXRlL1swLjA1XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmbGV4LXNocmluay0wXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNSlcIiBzdHJva2VXaWR0aD1cIjEuOFwiPlxuICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiNFwiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHJ4PVwiMlwiLz48cGF0aCBkPVwibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDdcIi8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzI1IHVwcGVyY2FzZSB0cmFja2luZy13aWRlclwiPkVtYWlsPC9wPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tZWRpdW0gdGV4dC13aGl0ZS81NSB0cnVuY2F0ZSBncm91cC1ob3Zlcjp0ZXh0LXdoaXRlLzgwIHRyYW5zaXRpb24tY29sb3JzXCI+e1NJVEUuZW1haWx9PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxhIGhyZWY9e2Ake0dJVEVBX1VSTH0vJHtHSVRFQV9VU0VSTkFNRX1gfVxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ2xhc3Mgcm91bmRlZC14bCBwLTQgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgZ3JvdXAgaG92ZXI6Ym9yZGVyLXdoaXRlL1swLjE0XVxuICAgICAgICAgICAgICAgIGhvdmVyOnRyYW5zbGF0ZS14LTEgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMTUwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy04IGgtOCByb3VuZGVkLWxnIGJnLXdoaXRlL1swLjA1XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmbGV4LXNocmluay0wXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNSlcIiBzdHJva2VXaWR0aD1cIjEuOFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNSAyMnYtNGE0LjggNC44IDAgMCAwLTEtMy4yYzMgMCA2LTIgNi01LjUuMDgtMS4yNS0uMjctMi40OC0xLTMuNS4yOC0xLjE1LjI4LTIuMzUgMC0zLjUgMCAwLTEgMC0zIDEuNS0yLjY0LS41LTUuMzYtLjUtOCAwQzYgMiA1IDIgNSAyYy0uMyAxLjE1LS4zIDIuMzUgMCAzLjVBNS40MDMgNS40MDMgMCAwIDAgNCA5YzAgMy41IDMgNS41IDYgNS41LS4zOS40OS0uNjggMS4wNS0uODUgMS42NS0uMTcuNi0uMjIgMS4yMy0uMTUgMS44NXY0XCIvPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDE4Yy00LjUxIDItNS0yLTctMlwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMFwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtWzEwcHhdIHRleHQtd2hpdGUvMjUgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyXCI+R2l0ZWE8L3A+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXdoaXRlLzU1IHRydW5jYXRlIGdyb3VwLWhvdmVyOnRleHQtd2hpdGUvODAgdHJhbnNpdGlvbi1jb2xvcnMgZm9udC1tb25vXCI+XG4gICAgICAgICAgICAgICAgICB7R0lURUFfVVJMLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgJycpfS97R0lURUFfVVNFUk5BTUV9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBGb3JtICovfVxuICAgICAgICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9IGNsYXNzTmFtZT1cImdsYXNzIHJvdW5kZWQteGwgcC02IGZsZXggZmxleC1jb2wgZ2FwLTRcIiBub1ZhbGlkYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIHNtOmdyaWQtY29scy0yIGdhcC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0xLjVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlciB0ZXh0LXdoaXRlLzMwXCI+TmFtZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cIm5hbWVcIiB0eXBlPVwidGV4dFwiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPVwiWW91ciBuYW1lXCIgYXV0b0NvbXBsZXRlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wOF0gcm91bmRlZC1sZyBweC0zIHB5LTIuNSB0ZXh0LXNtXG4gICAgICAgICAgICAgICAgICAgIHRleHQtd2hpdGUgcGxhY2Vob2xkZXItd2hpdGUvMjAgb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzOmJvcmRlci13aGl0ZS9bMC4yXSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy13aGl0ZS9bMC4xXVwiIC8+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0xLjVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlciB0ZXh0LXdoaXRlLzMwXCI+RW1haWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJlbWFpbFwiIHR5cGU9XCJlbWFpbFwiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPVwieW91QGV4YW1wbGUuY29tXCIgYXV0b0NvbXBsZXRlPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctd2hpdGUvWzAuMDNdIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDhdIHJvdW5kZWQtbGcgcHgtMyBweS0yLjUgdGV4dC1zbVxuICAgICAgICAgICAgICAgICAgICB0ZXh0LXdoaXRlIHBsYWNlaG9sZGVyLXdoaXRlLzIwIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9yc1xuICAgICAgICAgICAgICAgICAgICBmb2N1czpib3JkZXItd2hpdGUvWzAuMl0gZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctd2hpdGUvWzAuMV1cIiAvPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMS41XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyIHRleHQtd2hpdGUvMzBcIj5NZXNzYWdlPC9zcGFuPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT1cIm1lc3NhZ2VcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIldoYXQncyBvbiB5b3VyIG1pbmQ/XCIgcm93cz17NH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wOF0gcm91bmRlZC1sZyBweC0zIHB5LTIuNSB0ZXh0LXNtXG4gICAgICAgICAgICAgICAgICB0ZXh0LXdoaXRlIHBsYWNlaG9sZGVyLXdoaXRlLzIwIG91dGxpbmUtbm9uZSByZXNpemUtbm9uZSB0cmFuc2l0aW9uLWNvbG9yc1xuICAgICAgICAgICAgICAgICAgZm9jdXM6Ym9yZGVyLXdoaXRlL1swLjJdIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLXdoaXRlL1swLjFdXCIgLz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgIHtzdGF0dXMgPT09ICdzZW50JyA/ICdPcGVuaW5nIGVtYWls4oCmJyA6ICdTZW5kIG1lc3NhZ2UnfVxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjEzXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlV2lkdGg9XCIyLjVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPVwiMjJcIiB5MT1cIjJcIiB4Mj1cIjExXCIgeTI9XCIxM1wiLz48cG9seWdvbiBwb2ludHM9XCIyMiAyIDE1IDIyIDExIDEzIDIgOSAyMiAyXCIvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gICk7XG59XG4iXSwibmFtZXMiOlsidXNlU3RhdGUiLCJTSVRFIiwiR0lURUFfVVJMIiwiR0lURUFfVVNFUk5BTUUiLCJDb250YWN0Iiwic3RhdHVzIiwic2V0U3RhdHVzIiwiaGFuZGxlU3VibWl0IiwiZSIsInByZXZlbnREZWZhdWx0IiwiZmQiLCJGb3JtRGF0YSIsImN1cnJlbnRUYXJnZXQiLCJuYW1lIiwiZ2V0IiwiZW1haWwiLCJtZXNzYWdlIiwic3ViIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYm9keSIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsInNlY3Rpb24iLCJpZCIsImNsYXNzTmFtZSIsImFyaWEtbGFiZWxsZWRieSIsImRpdiIsInNwYW4iLCJoMiIsImEiLCJhcmlhLWhpZGRlbiIsInN2ZyIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInJlY3QiLCJ4IiwieSIsInJ4IiwicGF0aCIsImQiLCJwIiwidGFyZ2V0IiwicmVsIiwicmVwbGFjZSIsImZvcm0iLCJvblN1Ym1pdCIsIm5vVmFsaWRhdGUiLCJsYWJlbCIsImlucHV0IiwidHlwZSIsInJlcXVpcmVkIiwicGxhY2Vob2xkZXIiLCJhdXRvQ29tcGxldGUiLCJ0ZXh0YXJlYSIsInJvd3MiLCJidXR0b24iLCJsaW5lIiwieDEiLCJ5MSIsIngyIiwieTIiLCJwb2x5Z29uIiwicG9pbnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Contact.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./components/Nav.tsx":
|
||
/*!****************************!*\
|
||
!*** ./components/Nav.tsx ***!
|
||
\****************************/
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Nav; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/config */ \"(app-pages-browser)/./lib/config.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\nfunction Nav() {\n _s();\n const [scrolled, setScrolled] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [mobileOpen, setMobileOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const fn = ()=>setScrolled(window.scrollY > 24);\n window.addEventListener(\"scroll\", fn, {\n passive: true\n });\n return ()=>window.removeEventListener(\"scroll\", fn);\n }, []);\n const links = [\n {\n href: \"#about\",\n label: \"About\"\n },\n {\n href: \"#projects\",\n label: \"Projects\"\n },\n {\n href: \"#activity\",\n label: \"Activity\"\n },\n {\n href: \"#contact\",\n label: \"Contact\"\n }\n ];\n const navBase = \"fixed top-0 left-0 right-0 z-50 h-[60px] flex items-center transition-all duration-300\";\n const navStyle = scrolled ? \"bg-[rgba(7,7,7,0.85)] backdrop-blur-[20px] border-b border-white/[0.06]\" : \"bg-transparent\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"\".concat(navBase, \" \").concat(navStyle),\n \"aria-label\": \"Main navigation\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full max-w-5xl mx-auto px-6 flex items-center justify-between gap-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#\",\n className: \"flex items-center gap-2.5 group\",\n \"aria-label\": \"William March\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"26\",\n height: \"26\",\n viewBox: \"0 0 26 26\",\n fill: \"none\",\n \"aria-hidden\": \"true\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"rect\", {\n width: \"26\",\n height: \"26\",\n rx: \"5\",\n fill: \"rgba(255,255,255,0.9)\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 32,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M4 7.5L9 19L13 9.5L17 19L22 7.5\",\n stroke: \"#070707\",\n strokeWidth: \"2.2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 33,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 31,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-semibold text-white/80 group-hover:text-white transition-colors duration-150 tracking-tight\",\n children: \"William March\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 36,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 30,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"hidden md:flex items-center gap-7\",\n role: \"list\",\n children: links.map((l)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: l.href,\n className: \"text-sm text-white/40 hover:text-white/80 transition-colors duration-150 font-medium\",\n children: l.label\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 44,\n columnNumber: 15\n }, this)\n }, l.href, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 43,\n columnNumber: 13\n }, this))\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 41,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex items-center gap-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"\".concat(_lib_config__WEBPACK_IMPORTED_MODULE_2__.GITEA_URL, \"/\").concat(_lib_config__WEBPACK_IMPORTED_MODULE_2__.GITEA_USERNAME),\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"flex items-center gap-1.5 text-xs text-white/40 hover:text-white/70 transition-colors duration-150 font-mono\",\n \"aria-label\": \"Gitea profile\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.8\",\n \"aria-hidden\": \"true\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M15 22v-4a4.8 4.8 0 0 0-1-3.2c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 59,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M9 18c-4.51 2-5-2-7-2\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 60,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 58,\n columnNumber: 13\n }, this),\n \"gitea\"\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 53,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 52,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"md:hidden p-1.5 rounded-md text-white/50 hover:text-white/80 hover:bg-white/[0.05] transition-all\",\n onClick: ()=>setMobileOpen(!mobileOpen),\n \"aria-label\": \"Toggle menu\",\n \"aria-expanded\": mobileOpen,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n \"aria-hidden\": \"true\",\n children: mobileOpen ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"line\", {\n x1: \"18\",\n y1: \"6\",\n x2: \"6\",\n y2: \"18\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 72,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"line\", {\n x1: \"6\",\n y1: \"6\",\n x2: \"18\",\n y2: \"18\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 72,\n columnNumber: 56\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"line\", {\n x1: \"3\",\n y1: \"6\",\n x2: \"21\",\n y2: \"6\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 73,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"line\", {\n x1: \"3\",\n y1: \"12\",\n x2: \"21\",\n y2: \"12\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 73,\n columnNumber: 55\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"line\", {\n x1: \"3\",\n y1: \"18\",\n x2: \"21\",\n y2: \"18\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 73,\n columnNumber: 93\n }, this)\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 70,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 66,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 29,\n columnNumber: 7\n }, this),\n mobileOpen && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute top-[60px] left-0 right-0 bg-[#0f0f0f] border-b border-white/[0.06] px-6 py-4 md:hidden\",\n children: links.map((l)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: l.href,\n onClick: ()=>setMobileOpen(false),\n className: \"block py-2.5 text-sm text-white/60 hover:text-white transition-colors\",\n children: l.label\n }, l.href, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 82,\n columnNumber: 13\n }, this))\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 80,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Nav.tsx\",\n lineNumber: 28,\n columnNumber: 5\n }, this);\n}\n_s(Nav, \"moUcU2J4YHazgmQMN2Ea+ACEGYM=\");\n_c = Nav;\nvar _c;\n$RefreshReg$(_c, \"Nav\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTmF2LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQzRDO0FBQ21CO0FBRWhELFNBQVNJOztJQUN0QixNQUFNLENBQUNDLFVBQVVDLFlBQVksR0FBR0wsK0NBQVFBLENBQUM7SUFDekMsTUFBTSxDQUFDTSxZQUFZQyxjQUFjLEdBQUdQLCtDQUFRQSxDQUFDO0lBRTdDRCxnREFBU0EsQ0FBQztRQUNSLE1BQU1TLEtBQUssSUFBTUgsWUFBWUksT0FBT0MsT0FBTyxHQUFHO1FBQzlDRCxPQUFPRSxnQkFBZ0IsQ0FBQyxVQUFVSCxJQUFJO1lBQUVJLFNBQVM7UUFBSztRQUN0RCxPQUFPLElBQU1ILE9BQU9JLG1CQUFtQixDQUFDLFVBQVVMO0lBQ3BELEdBQUcsRUFBRTtJQUVMLE1BQU1NLFFBQVE7UUFDWjtZQUFFQyxNQUFNO1lBQWFDLE9BQU87UUFBUTtRQUNwQztZQUFFRCxNQUFNO1lBQWFDLE9BQU87UUFBVztRQUN2QztZQUFFRCxNQUFNO1lBQWFDLE9BQU87UUFBVztRQUN2QztZQUFFRCxNQUFNO1lBQWFDLE9BQU87UUFBVTtLQUN2QztJQUVELE1BQU1DLFVBQVU7SUFDaEIsTUFBTUMsV0FBV2QsV0FDYiw0RUFDQTtJQUVKLHFCQUNFLDhEQUFDZTtRQUFJQyxXQUFXLEdBQWNGLE9BQVhELFNBQVEsS0FBWSxPQUFUQztRQUFZRyxjQUFXOzswQkFDbkQsOERBQUNDO2dCQUFJRixXQUFVOztrQ0FDYiw4REFBQ0c7d0JBQUVSLE1BQUs7d0JBQUlLLFdBQVU7d0JBQWtDQyxjQUFXOzswQ0FDakUsOERBQUNHO2dDQUFJQyxPQUFNO2dDQUFLQyxRQUFPO2dDQUFLQyxTQUFRO2dDQUFZQyxNQUFLO2dDQUFPQyxlQUFZOztrREFDdEUsOERBQUNDO3dDQUFLTCxPQUFNO3dDQUFLQyxRQUFPO3dDQUFLSyxJQUFHO3dDQUFJSCxNQUFLOzs7Ozs7a0RBQ3pDLDhEQUFDSTt3Q0FBS0MsR0FBRTt3Q0FDTkMsUUFBTzt3Q0FBVUMsYUFBWTt3Q0FBTUMsZUFBYzt3Q0FBUUMsZ0JBQWU7Ozs7Ozs7Ozs7OzswQ0FFNUUsOERBQUNDO2dDQUFLbEIsV0FBVTswQ0FBMkc7Ozs7Ozs7Ozs7OztrQ0FLN0gsOERBQUNtQjt3QkFBR25CLFdBQVU7d0JBQW9Db0IsTUFBSztrQ0FDcEQxQixNQUFNMkIsR0FBRyxDQUFDQyxDQUFBQSxrQkFDVCw4REFBQ0M7MENBQ0MsNEVBQUNwQjtvQ0FBRVIsTUFBTTJCLEVBQUUzQixJQUFJO29DQUNiSyxXQUFVOzhDQUNUc0IsRUFBRTFCLEtBQUs7Ozs7OzsrQkFISDBCLEVBQUUzQixJQUFJOzs7Ozs7Ozs7O2tDQVNuQiw4REFBQ087d0JBQUlGLFdBQVU7a0NBQ2IsNEVBQUNHOzRCQUNDUixNQUFNLEdBQWdCYixPQUFiRCxrREFBU0EsRUFBQyxLQUFrQixPQUFmQyx1REFBY0E7NEJBQ3BDMEMsUUFBTzs0QkFBU0MsS0FBSTs0QkFDcEJ6QixXQUFVOzRCQUNWQyxjQUFXOzs4Q0FDWCw4REFBQ0c7b0NBQUlDLE9BQU07b0NBQUtDLFFBQU87b0NBQUtDLFNBQVE7b0NBQVlDLE1BQUs7b0NBQU9NLFFBQU87b0NBQWVDLGFBQVk7b0NBQU1OLGVBQVk7O3NEQUM5Ryw4REFBQ0c7NENBQUtDLEdBQUU7Ozs7OztzREFDUiw4REFBQ0Q7NENBQUtDLEdBQUU7Ozs7Ozs7Ozs7OztnQ0FDSjs7Ozs7Ozs7Ozs7O2tDQUtWLDhEQUFDYTt3QkFDQzFCLFdBQVU7d0JBQ1YyQixTQUFTLElBQU14QyxjQUFjLENBQUNEO3dCQUM5QmUsY0FBVzt3QkFBYzJCLGlCQUFlMUM7a0NBQ3hDLDRFQUFDa0I7NEJBQUlDLE9BQU07NEJBQUtDLFFBQU87NEJBQUtDLFNBQVE7NEJBQVlDLE1BQUs7NEJBQU9NLFFBQU87NEJBQWVDLGFBQVk7NEJBQUlOLGVBQVk7c0NBQzNHdkIsMkJBQ0c7O2tEQUFFLDhEQUFDMkM7d0NBQUtDLElBQUc7d0NBQUtDLElBQUc7d0NBQUlDLElBQUc7d0NBQUlDLElBQUc7Ozs7OztrREFBTSw4REFBQ0o7d0NBQUtDLElBQUc7d0NBQUlDLElBQUc7d0NBQUlDLElBQUc7d0NBQUtDLElBQUc7Ozs7Ozs7NkRBQ3RFOztrREFBRSw4REFBQ0o7d0NBQUtDLElBQUc7d0NBQUlDLElBQUc7d0NBQUlDLElBQUc7d0NBQUtDLElBQUc7Ozs7OztrREFBSyw4REFBQ0o7d0NBQUtDLElBQUc7d0NBQUlDLElBQUc7d0NBQUtDLElBQUc7d0NBQUtDLElBQUc7Ozs7OztrREFBTSw4REFBQ0o7d0NBQUtDLElBQUc7d0NBQUlDLElBQUc7d0NBQUtDLElBQUc7d0NBQUtDLElBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQU1ySC9DLDRCQUNDLDhEQUFDZ0I7Z0JBQUlGLFdBQVU7MEJBQ1pOLE1BQU0yQixHQUFHLENBQUNDLENBQUFBLGtCQUNULDhEQUFDbkI7d0JBQWVSLE1BQU0yQixFQUFFM0IsSUFBSTt3QkFDMUJnQyxTQUFTLElBQU14QyxjQUFjO3dCQUM3QmEsV0FBVTtrQ0FDVHNCLEVBQUUxQixLQUFLO3VCQUhGMEIsRUFBRTNCLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVMUI7R0F2RndCWjtLQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL05hdi50c3g/ZTYzMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU0lURSwgR0lURUFfVVJMLCBHSVRFQV9VU0VSTkFNRSB9IGZyb20gJ0AvbGliL2NvbmZpZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE5hdigpIHtcbiAgY29uc3QgW3Njcm9sbGVkLCBzZXRTY3JvbGxlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFttb2JpbGVPcGVuLCBzZXRNb2JpbGVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGZuID0gKCkgPT4gc2V0U2Nyb2xsZWQod2luZG93LnNjcm9sbFkgPiAyNCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZuLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmbik7XG4gIH0sIFtdKTtcblxuICBjb25zdCBsaW5rcyA9IFtcbiAgICB7IGhyZWY6ICcjYWJvdXQnLCAgICBsYWJlbDogJ0Fib3V0JyB9LFxuICAgIHsgaHJlZjogJyNwcm9qZWN0cycsIGxhYmVsOiAnUHJvamVjdHMnIH0sXG4gICAgeyBocmVmOiAnI2FjdGl2aXR5JywgbGFiZWw6ICdBY3Rpdml0eScgfSxcbiAgICB7IGhyZWY6ICcjY29udGFjdCcsICBsYWJlbDogJ0NvbnRhY3QnIH0sXG4gIF07XG5cbiAgY29uc3QgbmF2QmFzZSA9ICdmaXhlZCB0b3AtMCBsZWZ0LTAgcmlnaHQtMCB6LTUwIGgtWzYwcHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCc7XG4gIGNvbnN0IG5hdlN0eWxlID0gc2Nyb2xsZWRcbiAgICA/ICdiZy1bcmdiYSg3LDcsNywwLjg1KV0gYmFja2Ryb3AtYmx1ci1bMjBweF0gYm9yZGVyLWIgYm9yZGVyLXdoaXRlL1swLjA2XSdcbiAgICA6ICdiZy10cmFuc3BhcmVudCc7XG5cbiAgcmV0dXJuIChcbiAgICA8bmF2IGNsYXNzTmFtZT17YCR7bmF2QmFzZX0gJHtuYXZTdHlsZX1gfSBhcmlhLWxhYmVsPVwiTWFpbiBuYXZpZ2F0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBtYXgtdy01eGwgbXgtYXV0byBweC02IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtOFwiPlxuICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yLjUgZ3JvdXBcIiBhcmlhLWxhYmVsPVwiV2lsbGlhbSBNYXJjaFwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIyNlwiIGhlaWdodD1cIjI2XCIgdmlld0JveD1cIjAgMCAyNiAyNlwiIGZpbGw9XCJub25lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjI2XCIgaGVpZ2h0PVwiMjZcIiByeD1cIjVcIiBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjkpXCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk00IDcuNUw5IDE5TDEzIDkuNUwxNyAxOUwyMiA3LjVcIlxuICAgICAgICAgICAgICBzdHJva2U9XCIjMDcwNzA3XCIgc3Ryb2tlV2lkdGg9XCIyLjJcIiBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzgwIGdyb3VwLWhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMTUwIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICBXaWxsaWFtIE1hcmNoXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2E+XG5cbiAgICAgICAgPHVsIGNsYXNzTmFtZT1cImhpZGRlbiBtZDpmbGV4IGl0ZW1zLWNlbnRlciBnYXAtN1wiIHJvbGU9XCJsaXN0XCI+XG4gICAgICAgICAge2xpbmtzLm1hcChsID0+IChcbiAgICAgICAgICAgIDxsaSBrZXk9e2wuaHJlZn0+XG4gICAgICAgICAgICAgIDxhIGhyZWY9e2wuaHJlZn1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtd2hpdGUvNDAgaG92ZXI6dGV4dC13aGl0ZS84MCB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xNTAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICB7bC5sYWJlbH1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC91bD5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpmbGV4IGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBocmVmPXtgJHtHSVRFQV9VUkx9LyR7R0lURUFfVVNFUk5BTUV9YH1cbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSB0ZXh0LXhzIHRleHQtd2hpdGUvNDAgaG92ZXI6dGV4dC13aGl0ZS83MCB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xNTAgZm9udC1tb25vXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJHaXRlYSBwcm9maWxlXCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZVdpZHRoPVwiMS44XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUgMjJ2LTRhNC44IDQuOCAwIDAgMC0xLTMuMmMzIDAgNi0yIDYtNS41LjA4LTEuMjUtLjI3LTIuNDgtMS0zLjUuMjgtMS4xNS4yOC0yLjM1IDAtMy41IDAgMC0xIDAtMyAxLjUtMi42NC0uNS01LjM2LS41LTggMEM2IDIgNSAyIDUgMmMtLjMgMS4xNS0uMyAyLjM1IDAgMy41QTUuNDAzIDUuNDAzIDAgMCAwIDQgOWMwIDMuNSAzIDUuNSA2IDUuNS0uMzkuNDktLjY4IDEuMDUtLjg1IDEuNjUtLjE3LjYtLjIyIDEuMjMtLjE1IDEuODV2NFwiLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDE4Yy00LjUxIDItNS0yLTctMlwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgZ2l0ZWFcbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9XCJtZDpoaWRkZW4gcC0xLjUgcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzUwIGhvdmVyOnRleHQtd2hpdGUvODAgaG92ZXI6Ymctd2hpdGUvWzAuMDVdIHRyYW5zaXRpb24tYWxsXCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2JpbGVPcGVuKCFtb2JpbGVPcGVuKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiVG9nZ2xlIG1lbnVcIiBhcmlhLWV4cGFuZGVkPXttb2JpbGVPcGVufT5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZVdpZHRoPVwiMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAge21vYmlsZU9wZW5cbiAgICAgICAgICAgICAgPyA8PjxsaW5lIHgxPVwiMThcIiB5MT1cIjZcIiB4Mj1cIjZcIiB5Mj1cIjE4XCIvPjxsaW5lIHgxPVwiNlwiIHkxPVwiNlwiIHgyPVwiMThcIiB5Mj1cIjE4XCIvPjwvPlxuICAgICAgICAgICAgICA6IDw+PGxpbmUgeDE9XCIzXCIgeTE9XCI2XCIgeDI9XCIyMVwiIHkyPVwiNlwiLz48bGluZSB4MT1cIjNcIiB5MT1cIjEyXCIgeDI9XCIyMVwiIHkyPVwiMTJcIi8+PGxpbmUgeDE9XCIzXCIgeTE9XCIxOFwiIHgyPVwiMjFcIiB5Mj1cIjE4XCIvPjwvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7bW9iaWxlT3BlbiAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLVs2MHB4XSBsZWZ0LTAgcmlnaHQtMCBiZy1bIzBmMGYwZl0gYm9yZGVyLWIgYm9yZGVyLXdoaXRlL1swLjA2XSBweC02IHB5LTQgbWQ6aGlkZGVuXCI+XG4gICAgICAgICAge2xpbmtzLm1hcChsID0+IChcbiAgICAgICAgICAgIDxhIGtleT17bC5ocmVmfSBocmVmPXtsLmhyZWZ9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vYmlsZU9wZW4oZmFsc2UpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJibG9jayBweS0yLjUgdGV4dC1zbSB0ZXh0LXdoaXRlLzYwIGhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnNcIj5cbiAgICAgICAgICAgICAge2wubGFiZWx9XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L25hdj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsIkdJVEVBX1VSTCIsIkdJVEVBX1VTRVJOQU1FIiwiTmF2Iiwic2Nyb2xsZWQiLCJzZXRTY3JvbGxlZCIsIm1vYmlsZU9wZW4iLCJzZXRNb2JpbGVPcGVuIiwiZm4iLCJ3aW5kb3ciLCJzY3JvbGxZIiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlua3MiLCJocmVmIiwibGFiZWwiLCJuYXZCYXNlIiwibmF2U3R5bGUiLCJuYXYiLCJjbGFzc05hbWUiLCJhcmlhLWxhYmVsIiwiZGl2IiwiYSIsInN2ZyIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJhcmlhLWhpZGRlbiIsInJlY3QiLCJyeCIsInBhdGgiLCJkIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJzcGFuIiwidWwiLCJyb2xlIiwibWFwIiwibCIsImxpIiwidGFyZ2V0IiwicmVsIiwiYnV0dG9uIiwib25DbGljayIsImFyaWEtZXhwYW5kZWQiLCJsaW5lIiwieDEiLCJ5MSIsIngyIiwieTIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Nav.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./components/Projects.tsx":
|
||
/*!*********************************!*\
|
||
!*** ./components/Projects.tsx ***!
|
||
\*********************************/
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Projects; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_gitea__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/gitea */ \"(app-pages-browser)/./lib/gitea.ts\");\n/* harmony import */ var _lib_config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/config */ \"(app-pages-browser)/./lib/config.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\nconst LANG_COLOR = {\n python: \"#3572A5\",\n javascript: \"#f1e05a\",\n typescript: \"#3178c6\",\n go: \"#00add8\",\n rust: \"#dea584\",\n \"c++\": \"#f34b7d\",\n c: \"#555\",\n html: \"#e34c26\",\n css: \"#563d7c\",\n shell: \"#89e051\",\n ruby: \"#701516\",\n java: \"#b07219\"\n};\nfunction langColor(l) {\n return LANG_COLOR[(l || \"\").toLowerCase()] || \"#555\";\n}\nfunction timeAgo(d) {\n const diff = Date.now() - new Date(d).getTime();\n const m = Math.floor(diff / 60000);\n if (m < 60) return \"\".concat(m, \"m ago\");\n const h = Math.floor(m / 60);\n if (h < 24) return \"\".concat(h, \"h ago\");\n const days = Math.floor(h / 24);\n if (days < 30) return \"\".concat(days, \"d ago\");\n return \"\".concat(Math.floor(days / 30), \"mo ago\");\n}\nfunction Projects() {\n _s();\n const [repos, setRepos] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n (0,_lib_gitea__WEBPACK_IMPORTED_MODULE_2__.getRepos)(_lib_config__WEBPACK_IMPORTED_MODULE_3__.SITE.repoLimit).then(setRepos).catch((e)=>setError(e.message));\n }, []);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n id: \"projects\",\n className: \"py-24 px-6 bg-[#0a0a0a]\",\n \"aria-labelledby\": \"projects-heading\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-5xl mx-auto\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"label\",\n children: \"Gitea \\xb7 Public repos\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 41,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-end justify-between mb-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n id: \"projects-heading\",\n className: \"text-[clamp(1.8rem,4vw,2.5rem)] font-black tracking-tight text-white\",\n children: \"Recent Projects\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 43,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"\".concat(_lib_config__WEBPACK_IMPORTED_MODULE_3__.GITEA_URL, \"/\").concat(_lib_config__WEBPACK_IMPORTED_MODULE_3__.GITEA_USERNAME),\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"hidden sm:flex items-center gap-1.5 text-xs text-white/30 hover:text-white/60 transition-colors font-mono\",\n children: [\n \"All repos\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"12\",\n height: \"12\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M7 17L17 7M7 7h10v10\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 52,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 51,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 42,\n columnNumber: 9\n }, this),\n !repos && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid sm:grid-cols-2 lg:grid-cols-3 gap-4\",\n children: [\n ...Array(6)\n ].map((_, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"glass rounded-2xl p-5 flex flex-col gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"skel h-4 w-1/2\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 61,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"skel h-3 w-5/6\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 62,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"skel h-3 w-3/4\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 63,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"skel h-3 w-1/3 mt-auto\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 64,\n columnNumber: 17\n }, this)\n ]\n }, i, true, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 60,\n columnNumber: 15\n }, this))\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 58,\n columnNumber: 11\n }, this),\n error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"glass rounded-2xl p-10 text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-white/30 text-sm mb-1\",\n children: \"Could not load repositories\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 72,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-white/20 text-xs font-mono\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 73,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 71,\n columnNumber: 11\n }, this),\n repos && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid sm:grid-cols-2 lg:grid-cols-3 gap-4\",\n \"aria-live\": \"polite\",\n children: repos.map((repo)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: repo.html_url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"glass rounded-2xl p-5 flex flex-col gap-4 group transition-all duration-200 hover:border-white/[0.14] hover:shadow-[0_0_0_1px_rgba(0,0,0,0.6),0_16px_48px_rgba(0,0,0,0.6)] hover:-translate-y-[2px]\",\n \"aria-label\": \"\".concat(repo.name, \": \").concat(repo.description || \"No description\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-1.5 rounded-md bg-white/[0.04] border border-white/[0.07]\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"rgba(255,255,255,0.4)\",\n strokeWidth: \"1.8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M15 22v-4a4.8 4.8 0 0 0-1-3.2c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 91,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M9 18c-4.51 2-5-2-7-2\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 92,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 90,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 89,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"text-white/20 group-hover:text-white/40 transition-colors\",\n width: \"12\",\n height: \"12\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M7 17L17 7M7 7h10v10\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 97,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 95,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 88,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm font-semibold text-white mb-1 truncate\",\n children: repo.name\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 101,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-white/35 leading-relaxed line-clamp-2\",\n children: repo.description || /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"italic text-white/20\",\n children: \"No description\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 103,\n columnNumber: 42\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 102,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 100,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4 mt-auto\",\n children: [\n repo.language && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"flex items-center gap-1.5 text-xs text-white/30\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"w-2 h-2 rounded-full flex-shrink-0\",\n style: {\n background: langColor(repo.language)\n },\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 109,\n columnNumber: 23\n }, this),\n repo.language\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 108,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"flex items-center gap-1 text-xs text-white/25\",\n \"aria-label\": \"\".concat(repo.stars_count, \" stars\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n width: \"10\",\n height: \"10\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"polygon\", {\n points: \"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 116,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 115,\n columnNumber: 21\n }, this),\n repo.stars_count\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 114,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs text-white/20 ml-auto tabular-nums\",\n children: timeAgo(repo.updated)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 120,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 106,\n columnNumber: 17\n }, this)\n ]\n }, repo.id, true, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 80,\n columnNumber: 15\n }, this))\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 78,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 40,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/will/Documents/william-march/components/Projects.tsx\",\n lineNumber: 39,\n columnNumber: 5\n }, this);\n}\n_s(Projects, \"I0Qr5auao2zaL1pFF6ytUz3PGuw=\");\n_c = Projects;\nvar _c;\n$RefreshReg$(_c, \"Projects\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvUHJvamVjdHMudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQzRDO0FBQ0w7QUFFd0I7QUFFL0QsTUFBTU0sYUFBcUM7SUFDekNDLFFBQU87SUFBVUMsWUFBVztJQUFVQyxZQUFXO0lBQ2pEQyxJQUFHO0lBQVVDLE1BQUs7SUFBVSxPQUFNO0lBQVVDLEdBQUU7SUFDOUNDLE1BQUs7SUFBVUMsS0FBSTtJQUFVQyxPQUFNO0lBQVVDLE1BQUs7SUFBVUMsTUFBSztBQUNuRTtBQUVBLFNBQVNDLFVBQVVDLENBQWdCO0lBQ2pDLE9BQU9iLFVBQVUsQ0FBQyxDQUFDYSxLQUFHLEVBQUMsRUFBR0MsV0FBVyxHQUFHLElBQUk7QUFDOUM7QUFFQSxTQUFTQyxRQUFRQyxDQUFTO0lBQ3hCLE1BQU1DLE9BQU9DLEtBQUtDLEdBQUcsS0FBSyxJQUFJRCxLQUFLRixHQUFHSSxPQUFPO0lBQzdDLE1BQU1DLElBQUlDLEtBQUtDLEtBQUssQ0FBQ04sT0FBTztJQUM1QixJQUFJSSxJQUFJLElBQUksT0FBTyxHQUFLLE9BQUZBLEdBQUU7SUFDeEIsTUFBTUcsSUFBSUYsS0FBS0MsS0FBSyxDQUFDRixJQUFJO0lBQ3pCLElBQUlHLElBQUksSUFBSSxPQUFPLEdBQUssT0FBRkEsR0FBRTtJQUN4QixNQUFNQyxPQUFPSCxLQUFLQyxLQUFLLENBQUNDLElBQUk7SUFDNUIsSUFBSUMsT0FBTyxJQUFJLE9BQU8sR0FBUSxPQUFMQSxNQUFLO0lBQzlCLE9BQU8sR0FBeUIsT0FBdEJILEtBQUtDLEtBQUssQ0FBQ0UsT0FBTyxLQUFJO0FBQ2xDO0FBRWUsU0FBU0M7O0lBQ3RCLE1BQU0sQ0FBQ0MsT0FBT0MsU0FBUyxHQUFHakMsK0NBQVFBLENBQXFCO0lBQ3ZELE1BQU0sQ0FBQ2tDLE9BQU9DLFNBQVMsR0FBR25DLCtDQUFRQSxDQUFnQjtJQUVsREQsZ0RBQVNBLENBQUM7UUFDUkUsb0RBQVFBLENBQUNDLDZDQUFJQSxDQUFDa0Ms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V0FBVTtvREFDZDhCLE9BQU87d0RBQUVDLFlBQVl6RCxVQUFVa0QsS0FBS0ssUUFBUTtvREFBRTtvREFBR2IsZUFBWTs7Ozs7O2dEQUM5RFEsS0FBS0ssUUFBUTs7Ozs7OztzREFHbEIsOERBQUMxQjs0Q0FBS0gsV0FBVTs0Q0FBZ0QwQixjQUFZLEdBQW9CLE9BQWpCRixLQUFLUSxXQUFXLEVBQUM7OzhEQUM5Riw4REFBQ3ZCO29EQUFJQyxPQUFNO29EQUFLQyxRQUFPO29EQUFLQyxTQUFRO29EQUFZQyxNQUFLO29EQUFlRyxlQUFZOzhEQUM5RSw0RUFBQ2lCO3dEQUFRQyxRQUFPOzs7Ozs7Ozs7OztnREFFakJWLEtBQUtRLFdBQVc7Ozs7Ozs7c0RBRW5CLDhEQUFDN0I7NENBQUtILFdBQVU7c0RBQThDdkIsUUFBUStDLEtBQUtXLE9BQU87Ozs7Ozs7Ozs7Ozs7MkJBdkMvRVgsS0FBS3pCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdENUI7R0FyR3dCWDtLQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL1Byb2plY3RzLnRzeD9mM2Y4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBnZXRSZXBvcyB9IGZyb20gJ0AvbGliL2dpdGVhJztcbmltcG9ydCB0eXBlIHsgR2l0ZWFSZXBvIH0gZnJvbSAnQC9saWIvdHlwZXMnO1xuaW1wb3J0IHsgU0lURSwgR0lURUFfVVJMLCBHSVRFQV9VU0VSTkFNRSB9IGZyb20gJ0AvbGliL2NvbmZpZyc7XG5cbmNvbnN0IExBTkdfQ09MT1I6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHB5dGhvbjonIzM1NzJBNScsamF2YXNjcmlwdDonI2YxZTA1YScsdHlwZXNjcmlwdDonIzMxNzhjNicsXG4gIGdvOicjMDBhZGQ4JyxydXN0OicjZGVhNTg0JywnYysrJzonI2YzNGI3ZCcsYzonIzU1NScsXG4gIGh0bWw6JyNlMzRjMjYnLGNzczonIzU2M2Q3Yycsc2hlbGw6JyM4OWUwNTEnLHJ1Ynk6JyM3MDE1MTYnLGphdmE6JyNiMDcyMTknXG59O1xuXG5mdW5jdGlvbiBsYW5nQ29sb3IobDogc3RyaW5nIHwgbnVsbCkge1xuICByZXR1cm4gTEFOR19DT0xPUlsobHx8JycpLnRvTG93ZXJDYXNlKCldIHx8ICcjNTU1Jztcbn1cblxuZnVuY3Rpb24gdGltZUFnbyhkOiBzdHJpbmcpIHtcbiAgY29uc3QgZGlmZiA9IERhdGUubm93KCkgLSBuZXcgRGF0ZShkKS5nZXRUaW1lKCk7XG4gIGNvbnN0IG0gPSBNYXRoLmZsb29yKGRpZmYgLyA2MDAwMCk7XG4gIGlmIChtIDwgNjApIHJldHVybiBgJHttfW0gYWdvYDtcbiAgY29uc3QgaCA9IE1hdGguZmxvb3IobSAvIDYwKTtcbiAgaWYgKGggPCAyNCkgcmV0dXJuIGAke2h9aCBhZ29gO1xuICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihoIC8gMjQpO1xuICBpZiAoZGF5cyA8IDMwKSByZXR1cm4gYCR7ZGF5c31kIGFnb2A7XG4gIHJldHVybiBgJHtNYXRoLmZsb29yKGRheXMgLyAzMCl9bW8gYWdvYDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUHJvamVjdHMoKSB7XG4gIGNvbnN0IFtyZXBvcywgc2V0UmVwb3NdID0gdXNlU3RhdGU8R2l0ZWFSZXBvW10gfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGdldFJlcG9zKFNJVEUucmVwb0xpbWl0KVxuICAgICAgLnRoZW4oc2V0UmVwb3MpXG4gICAgICAuY2F0Y2goZSA9PiBzZXRFcnJvcihlLm1lc3NhZ2UpKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPHNlY3Rpb24gaWQ9XCJwcm9qZWN0c1wiIGNsYXNzTmFtZT1cInB5LTI0IHB4LTYgYmctWyMwYTBhMGFdXCIgYXJpYS1sYWJlbGxlZGJ5PVwicHJvamVjdHMtaGVhZGluZ1wiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy01eGwgbXgtYXV0b1wiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsYWJlbFwiPkdpdGVhIMK3IFB1YmxpYyByZXBvczwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWVuZCBqdXN0aWZ5LWJldHdlZW4gbWItMTBcIj5cbiAgICAgICAgICA8aDIgaWQ9XCJwcm9qZWN0cy1oZWFkaW5nXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtW2NsYW1wKDEuOHJlbSw0dncsMi41cmVtKV0gZm9udC1ibGFjayB0cmFja2luZy10aWdodCB0ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgICBSZWNlbnQgUHJvamVjdHNcbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDxhIGhyZWY9e2Ake0dJVEVBX1VSTH0vJHtHSVRFQV9VU0VSTkFNRX1gfVxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJoaWRkZW4gc206ZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSB0ZXh0LXhzIHRleHQtd2hpdGUvMzAgaG92ZXI6dGV4dC13aGl0ZS82MCB0cmFuc2l0aW9uLWNvbG9ycyBmb250LW1vbm9cIj5cbiAgICAgICAgICAgIEFsbCByZXBvc1xuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2VXaWR0aD1cIjJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk03IDE3TDE3IDdNNyA3aDEwdjEwXCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7IXJlcG9zICYmICFlcnJvciAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIHNtOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zIGdhcC00XCI+XG4gICAgICAgICAgICB7Wy4uLkFycmF5KDYpXS5tYXAoKF8sIGkpID0+IChcbiAgICAgICAgICAgICAgPGRpdiBrZXk9e2l9IGNsYXNzTmFtZT1cImdsYXNzIHJvdW5kZWQtMnhsIHAtNSBmbGV4IGZsZXgtY29sIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJza2VsIGgtNCB3LTEvMlwiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJza2VsIGgtMyB3LTUvNlwiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJza2VsIGgtMyB3LTMvNFwiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJza2VsIGgtMyB3LTEvMyBtdC1hdXRvXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ2xhc3Mgcm91bmRlZC0yeGwgcC0xMCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC13aGl0ZS8zMCB0ZXh0LXNtIG1iLTFcIj5Db3VsZCBub3QgbG9hZCByZXBvc2l0b3JpZXM8L3A+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlLzIwIHRleHQteHMgZm9udC1tb25vXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7cmVwb3MgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtMyBnYXAtNFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAge3JlcG9zLm1hcChyZXBvID0+IChcbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBrZXk9e3JlcG8uaWR9XG4gICAgICAgICAgICAgICAgaHJlZj17cmVwby5odG1sX3VybH1cbiAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJnbGFzcyByb3VuZGVkLTJ4bCBwLTUgZmxleCBmbGV4LWNvbCBnYXAtNCBncm91cCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDBcbiAgICAgICAgICAgICAgICAgIGhvdmVyOmJvcmRlci13aGl0ZS9bMC4xNF0gaG92ZXI6c2hhZG93LVswXzBfMF8xcHhfcmdiYSgwLDAsMCwwLjYpLDBfMTZweF80OHB4X3JnYmEoMCwwLDAsMC42KV1cbiAgICAgICAgICAgICAgICAgIGhvdmVyOi10cmFuc2xhdGUteS1bMnB4XVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YCR7cmVwby5uYW1lfTogJHtyZXBvLmRlc2NyaXB0aW9uIHx8ICdObyBkZXNjcmlwdGlvbid9YH0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTEuNSByb3VuZGVkLW1kIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA3XVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cInJnYmEoMjU1LDI1NSwyNTUsMC40KVwiIHN0cm9rZVdpZHRoPVwiMS44XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNSAyMnYtNGE0LjggNC44IDAgMCAwLTEtMy4yYzMgMCA2LTIgNi01LjUuMDgtMS4yNS0uMjctMi40OC0xLTMuNS4yOC0xLjE1LjI4LTIuMzUgMC0zLjUgMCAwLTEgMC0zIDEuNS0yLjY0LS41LTUuMzYtLjUtOCAwQzYgMiA1IDIgNSAyYy0uMyAxLjE1LS4zIDIuMzUgMCAzLjVBNS40MDMgNS40MDMgMCAwIDAgNCA5YzAgMy41IDMgNS41IDYgNS41LS4zOS40OS0uNjggMS4wNS0uODUgMS42NS0uMTcuNi0uMjIgMS4yMy0uMTUgMS44NXY0XCIvPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAxOGMtNC41MSAyLTUtMi03LTJcIi8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInRleHQtd2hpdGUvMjAgZ3JvdXAtaG92ZXI6dGV4dC13aGl0ZS80MCB0cmFuc2l0aW9uLWNvbG9yc1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZVdpZHRoPVwiMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcgMTdMMTcgN003IDdoMTB2MTBcIi8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUgbWItMSB0cnVuY2F0ZVwiPntyZXBvLm5hbWV9PC9wPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXdoaXRlLzM1IGxlYWRpbmctcmVsYXhlZCBsaW5lLWNsYW1wLTJcIj5cbiAgICAgICAgICAgICAgICAgICAge3JlcG8uZGVzY3JpcHRpb24gfHwgPHNwYW4gY2xhc3NOYW1lPVwiaXRhbGljIHRleHQtd2hpdGUvMjBcIj5ObyBkZXNjcmlwdGlvbjwvc3Bhbj59XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBtdC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICB7cmVwby5sYW5ndWFnZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgdGV4dC14cyB0ZXh0LXdoaXRlLzMwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidy0yIGgtMiByb3VuZGVkLWZ1bGwgZmxleC1zaHJpbmstMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kOiBsYW5nQ29sb3IocmVwby5sYW5ndWFnZSkgfX0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICB7cmVwby5sYW5ndWFnZX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQteHMgdGV4dC13aGl0ZS8yNVwiIGFyaWEtbGFiZWw9e2Ake3JlcG8uc3RhcnNfY291bnR9IHN0YXJzYH0+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9XCIxMiAyIDE1LjA5IDguMjYgMjIgOS4yNyAxNyAxNC4xNCAxOC4xOCAyMS4wMiAxMiAxNy43NyA1LjgyIDIxLjAyIDcgMTQuMTQgMiA5LjI3IDguOTEgOC4yNiAxMiAyXCIvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAge3JlcG8uc3RhcnNfY291bnR9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtd2hpdGUvMjAgbWwtYXV0byB0YWJ1bGFyLW51bXNcIj57dGltZUFnbyhyZXBvLnVwZGF0ZWQpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gICk7XG59XG4iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJnZXRSZXBvcyIsIlNJVEUiLCJHSVRFQV9VUkwiLCJHSVRFQV9VU0VSTkFNRSIsIkxBTkdfQ09MT1IiLCJweXRob24iLCJqYXZhc2NyaXB0IiwidHlwZXNjcmlwdCIsImdvIiwicnVzdCIsImMiLCJodG1sIiwiY3NzIiwic2hlbGwiLCJydWJ5IiwiamF2YSIsImxhbmdDb2xvciIsImwiLCJ0b0xvd2VyQ2FzZSIsInRpbWVBZ28iLCJkIiwiZGlmZiIsIkRhdGUiLCJub3ciLCJnZXRUaW1lIiwibSIsIk1hdGgiLCJmbG9vciIsImgiLCJkYXlzIiwiUHJvamVjdHMiLCJyZXBvcyIsInNldFJlcG9zIiwiZXJyb3IiLCJzZXRFcnJvciIsInJlcG9MaW1pdCIsInRoZW4iLCJjYXRjaCIsImUiLCJtZXNzYWdlIiwic2VjdGlvbiIsImlkIiwiY2xhc3NOYW1lIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZGl2Iiwic3BhbiIsImgyIiwiYSIsImhyZWYiLCJ0YXJnZXQiLCJyZWwiLCJzdmciLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJhcmlhLWhpZGRlbiIsInBhdGgiLCJBcnJheSIsIm1hcCIsIl8iLCJpIiwicCIsImFyaWEtbGl2ZSIsInJlcG8iLCJodG1sX3VybCIsImFyaWEtbGFiZWwiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJsYW5ndWFnZSIsInN0eWxlIiwiYmFja2dyb3VuZCIsInN0YXJzX2NvdW50IiwicG9seWdvbiIsInBvaW50cyIsInVwZGF0ZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Projects.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./lib/config.ts":
|
||
/*!***********************!*\
|
||
!*** ./lib/config.ts ***!
|
||
\***********************/
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GITEA_TOKEN: function() { return /* binding */ GITEA_TOKEN; },\n/* harmony export */ GITEA_URL: function() { return /* binding */ GITEA_URL; },\n/* harmony export */ GITEA_USERNAME: function() { return /* binding */ GITEA_USERNAME; },\n/* harmony export */ SITE: function() { return /* binding */ SITE; }\n/* harmony export */ });\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n// ★ UPDATE THESE ★\nvar _process_env_NEXT_PUBLIC_GITEA_URL;\nconst GITEA_URL = (_process_env_NEXT_PUBLIC_GITEA_URL = process.env.NEXT_PUBLIC_GITEA_URL) !== null && _process_env_NEXT_PUBLIC_GITEA_URL !== void 0 ? _process_env_NEXT_PUBLIC_GITEA_URL : \"https://git.williammarch.xyz\";\nvar _process_env_NEXT_PUBLIC_GITEA_USERNAME;\nconst GITEA_USERNAME = (_process_env_NEXT_PUBLIC_GITEA_USERNAME = process.env.NEXT_PUBLIC_GITEA_USERNAME) !== null && _process_env_NEXT_PUBLIC_GITEA_USERNAME !== void 0 ? _process_env_NEXT_PUBLIC_GITEA_USERNAME : \"m0dus\";\nvar _process_env_NEXT_PUBLIC_GITEA_TOKEN;\nconst GITEA_TOKEN = (_process_env_NEXT_PUBLIC_GITEA_TOKEN = process.env.NEXT_PUBLIC_GITEA_TOKEN) !== null && _process_env_NEXT_PUBLIC_GITEA_TOKEN !== void 0 ? _process_env_NEXT_PUBLIC_GITEA_TOKEN : \"\";\nconst SITE = {\n name: \"William March\",\n title: \"Software Engineer\",\n tagline: \"Building precise, purposeful, open-source software.\",\n about1: \"I'm a software engineer focused on writing clean, reliable code. I care about open-source tools that solve real problems — the kind that make other engineers' lives easier.\",\n about2: \"From small CLI utilities to complex systems, I approach every project with the same level of craft. Good code reads like good writing: clear, intentional, and easy to reason about.\",\n skills: [\n \"Go\",\n \"Python\",\n \"TypeScript\",\n \"Rust\",\n \"Linux\",\n \"Docker\",\n \"PostgreSQL\",\n \"Git\",\n \"Nix\"\n ],\n email: \"qemuguest@protonmail.com\",\n repoLimit: 6,\n commitFetchRepos: 4\n};\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2xpYi9jb25maWcudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxtQkFBbUI7SUFDV0E7QUFBdkIsTUFBTUMsWUFBaUJELENBQUFBLHFDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHFCQUFxQixjQUFqQ0gsZ0RBQUFBLHFDQUEwQywrQkFBK0I7SUFDekVBO0FBQXZCLE1BQU1JLGlCQUFpQkosQ0FBQUEsMENBQUFBLE9BQU9BLENBQUNFLEdBQUcsQ0FBQ0csMEJBQTBCLGNBQXRDTCxxREFBQUEsMENBQTBDLFFBQVE7SUFDbERBO0FBQXZCLE1BQU1NLGNBQWlCTixDQUFBQSx1Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDSyx1QkFBdUIsY0FBbkNQLGtEQUFBQSx1Q0FBMEMsR0FBRztBQUVwRSxNQUFNUSxPQUFPO0lBQ2xCQyxNQUFZO0lBQ1pDLE9BQVk7SUFDWkMsU0FBWTtJQUNaQyxRQUFZO0lBQ1pDLFFBQVk7SUFDWkMsUUFBWTtRQUFDO1FBQU07UUFBVTtRQUFjO1FBQVE7UUFBUztRQUFVO1FBQWM7UUFBTztLQUFNO0lBQ2pHQyxPQUFZO0lBQ1pDLFdBQVk7SUFDWkMsa0JBQWtCO0FBQ3BCLEVBQUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbGliL2NvbmZpZy50cz8xMjg1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIOKYhSBVUERBVEUgVEhFU0Ug4piFXG5leHBvcnQgY29uc3QgR0lURUFfVVJMICAgICAgPSBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19HSVRFQV9VUkwgICAgICA/PyAnaHR0cHM6Ly9naXQud2lsbGlhbW1hcmNoLnh5eic7XG5leHBvcnQgY29uc3QgR0lURUFfVVNFUk5BTUUgPSBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19HSVRFQV9VU0VSTkFNRSA/PyAnbTBkdXMnO1xuZXhwb3J0IGNvbnN0IEdJVEVBX1RPS0VOICAgID0gcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfR0lURUFfVE9LRU4gICAgPz8gJyc7XG5cbmV4cG9ydCBjb25zdCBTSVRFID0ge1xuICBuYW1lOiAgICAgICAnV2lsbGlhbSBNYXJjaCcsXG4gIHRpdGxlOiAgICAgICdTb2Z0d2FyZSBFbmdpbmVlcicsXG4gIHRhZ2xpbmU6ICAgICdCdWlsZGluZyBwcmVjaXNlLCBwdXJwb3NlZnVsLCBvcGVuLXNvdXJjZSBzb2Z0d2FyZS4nLFxuICBhYm91dDE6ICAgICBcIkknbSBhIHNvZnR3YXJlIGVuZ2luZWVyIGZvY3VzZWQgb24gd3JpdGluZyBjbGVhbiwgcmVsaWFibGUgY29kZS4gSSBjYXJlIGFib3V0IG9wZW4tc291cmNlIHRvb2xzIHRoYXQgc29sdmUgcmVhbCBwcm9ibGVtcyDigJQgdGhlIGtpbmQgdGhhdCBtYWtlIG90aGVyIGVuZ2luZWVycycgbGl2ZXMgZWFzaWVyLlwiLFxuICBhYm91dDI6ICAgICBcIkZyb20gc21hbGwgQ0xJIHV0aWxpdGllcyB0byBjb21wbGV4IHN5c3RlbXMsIEkgYXBwcm9hY2ggZXZlcnkgcHJvamVjdCB3aXRoIHRoZSBzYW1lIGxldmVsIG9mIGNyYWZ0LiBHb29kIGNvZGUgcmVhZHMgbGlrZSBnb29kIHdyaXRpbmc6IGNsZWFyLCBpbnRlbnRpb25hbCwgYW5kIGVhc3kgdG8gcmVhc29uIGFib3V0LlwiLFxuICBza2lsbHM6ICAgICBbJ0dvJywgJ1B5dGhvbicsICdUeXBlU2NyaXB0JywgJ1J1c3QnLCAnTGludXgnLCAnRG9ja2VyJywgJ1Bvc3RncmVTUUwnLCAnR2l0JywgJ05peCddLFxuICBlbWFpbDogICAgICAncWVtdWd1ZXN0QHByb3Rvbm1haWwuY29tJyxcbiAgcmVwb0xpbWl0OiAgNixcbiAgY29tbWl0RmV0Y2hSZXBvczogNCxcbn07XG4iXSwibmFtZXMiOlsicHJvY2VzcyIsIkdJVEVBX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0dJVEVBX1VSTCIsIkdJVEVBX1VTRVJOQU1FIiwiTkVYVF9QVUJMSUNfR0lURUFfVVNFUk5BTUUiLCJHSVRFQV9UT0tFTiIsIk5FWFRfUFVCTElDX0dJVEVBX1RPS0VOIiwiU0lURSIsIm5hbWUiLCJ0aXRsZSIsInRhZ2xpbmUiLCJhYm91dDEiLCJhYm91dDIiLCJza2lsbHMiLCJlbWFpbCIsInJlcG9MaW1pdCIsImNvbW1pdEZldGNoUmVwb3MiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./lib/config.ts\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./lib/gitea.ts":
|
||
/*!**********************!*\
|
||
!*** ./lib/gitea.ts ***!
|
||
\**********************/
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ calcStats: function() { return /* binding */ calcStats; },\n/* harmony export */ getHeatmap: function() { return /* binding */ getHeatmap; },\n/* harmony export */ getRecentCommits: function() { return /* binding */ getRecentCommits; },\n/* harmony export */ getRepoCommits: function() { return /* binding */ getRepoCommits; },\n/* harmony export */ getRepos: function() { return /* binding */ getRepos; }\n/* harmony export */ });\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config */ \"(app-pages-browser)/./lib/config.ts\");\n // keep only safe, non-secret values\nconst API_PREFIX = \"/api/gitea\";\nasync function get(path) {\n const res = await fetch(\"\".concat(API_PREFIX).concat(path), {\n headers: {\n Accept: \"application/json\"\n },\n cache: \"no-store\"\n });\n if (!res.ok) throw new Error(\"Gitea proxy \".concat(path, \": HTTP \").concat(res.status));\n return res.json();\n}\nasync function getRepos() {\n let limit = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 6;\n return get(\"/users/\".concat(_config__WEBPACK_IMPORTED_MODULE_0__.GITEA_USERNAME, \"/repos?limit=\").concat(limit, \"&sort=newest\"));\n}\nasync function getHeatmap() {\n return get(\"/users/\".concat(_config__WEBPACK_IMPORTED_MODULE_0__.GITEA_USERNAME, \"/heatmap\"));\n}\nasync function getRepoCommits(repo) {\n let limit = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 5;\n return get(\"/repos/\".concat(_config__WEBPACK_IMPORTED_MODULE_0__.GITEA_USERNAME, \"/\").concat(repo, \"/commits?limit=\").concat(limit));\n}\nasync function getRecentCommits(repos) {\n let perRepo = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 4;\n const results = await Promise.allSettled(repos.slice(0, 4).map((r)=>getRepoCommits(r.name, perRepo).then((commits)=>commits.map((c)=>({\n ...c,\n _repo: r.name,\n _repoUrl: r.html_url\n })))));\n const all = [];\n for (const r of results){\n if (r.status === \"fulfilled\") all.push(...r.value);\n }\n return all.sort((a, b)=>new Date(b.created).getTime() - new Date(a.created).getTime()).slice(0, 15);\n}\n/** Local date key (avoids UTC shift bugs) */ function dayKey(date) {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, \"0\");\n const d = String(date.getDate()).padStart(2, \"0\");\n return \"\".concat(y, \"-\").concat(m, \"-\").concat(d);\n}\nfunction calcStats(heatmap) {\n const yearAgo = Date.now() / 1000 - 365 * 86400;\n const year = heatmap.filter((e)=>e.timestamp > yearAgo);\n const total = year.reduce((s, e)=>s + e.contributions, 0);\n const activeDays = year.filter((e)=>e.contributions > 0).length;\n const dateSet = new Set();\n for (const e of year){\n if (e.contributions <= 0) continue;\n const d = new Date(e.timestamp * 1000);\n dateSet.add(dayKey(d));\n }\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n // Current streak (backwards from today)\n let currentStreak = 0;\n const cur = new Date(today);\n if (!dateSet.has(dayKey(cur))) {\n cur.setDate(cur.getDate() - 1);\n }\n while(dateSet.has(dayKey(cur))){\n currentStreak++;\n cur.setDate(cur.getDate() - 1);\n }\n // Longest streak\n let longestStreak = 0;\n let streak = 0;\n const sorted = Array.from(dateSet).sort();\n for(let i = 0; i < sorted.length; i++){\n if (i === 0) {\n streak = 1;\n longestStreak = 1;\n continue;\n }\n const prev = new Date(sorted[i - 1] + \"T00:00:00\");\n prev.setDate(prev.getDate() + 1);\n if (dayKey(prev) === sorted[i]) streak++;\n else streak = 1;\n if (streak > longestStreak) longestStreak = streak;\n }\n return {\n total,\n currentStreak,\n longestStreak,\n activeDays\n };\n}\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2xpYi9naXRlYS50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBMEMsQ0FBQyxvQ0FBb0M7QUFRL0UsTUFBTUMsYUFBYTtBQUVuQixlQUFlQyxJQUFPQyxJQUFZO0lBQ2hDLE1BQU1DLE1BQU0sTUFBTUMsTUFBTSxHQUFnQkYsT0FBYkYsWUFBa0IsT0FBTEUsT0FBUTtRQUM5Q0csU0FBUztZQUFFQyxRQUFRO1FBQW1CO1FBQ3RDQyxPQUFPO0lBQ1Q7SUFDQSxJQUFJLENBQUNKLElBQUlLLEVBQUUsRUFBRSxNQUFNLElBQUlDLE1BQU0sZUFBNkJOLE9BQWRELE1BQUssV0FBb0IsT0FBWEMsSUFBSU8sTUFBTTtJQUNwRSxPQUFPUCxJQUFJUSxJQUFJO0FBQ2pCO0FBRU8sZUFBZUM7UUFBU0MsUUFBQUEsaUVBQVE7SUFDckMsT0FBT1osSUFDTCxVQUF3Q1ksT0FBOUJkLG1EQUFjQSxFQUFDLGlCQUFxQixPQUFOYyxPQUFNO0FBRWxEO0FBRU8sZUFBZUM7SUFDcEIsT0FBT2IsSUFBb0IsVUFBeUIsT0FBZkYsbURBQWNBLEVBQUM7QUFDdEQ7QUFFTyxlQUFlZ0IsZUFDcEJDLElBQVk7UUFDWkgsUUFBQUEsaUVBQVE7SUFFUixPQUFPWixJQUNMLFVBQTRCZSxPQUFsQmpCLG1EQUFjQSxFQUFDLEtBQXlCYyxPQUF0QkcsTUFBSyxtQkFBdUIsT0FBTkg7QUFFdEQ7QUFFTyxlQUFlSSxpQkFDcEJDLEtBQWtCO1FBQ2xCQyxVQUFBQSxpRUFBVTtJQUVWLE1BQU1DLFVBQVUsTUFBTUMsUUFBUUMsVUFBVSxDQUN0Q0osTUFBTUssS0FBSyxDQUFDLEdBQUcsR0FBR0MsR0FBRyxDQUFDLENBQUNDLElBQ3JCVixlQUFlVSxFQUFFQyxJQUFJLEVBQUVQLFNBQVNRLElBQUksQ0FBQyxDQUFDQyxVQUNwQ0EsUUFBUUosR0FBRyxDQUFDLENBQUNLLElBQU87b0JBQ2xCLEdBQUdBLENBQUM7b0JBQ0pDLE9BQU9MLEVBQUVDLElBQUk7b0JBQ2JLLFVBQVVOLEVBQUVPLFFBQVE7Z0JBQ3RCO0lBS04sTUFBTUMsTUFBcUIsRUFBRTtJQUM3QixLQUFLLE1BQU1SLEtBQUtMLFFBQVM7UUFDdkIsSUFBSUssRUFBRWYsTUFBTSxLQUFLLGFBQWF1QixJQUFJQyxJQUFJLElBQUlULEVBQUVVLEtBQUs7SUFDbkQ7SUFFQSxPQUFPRixJQUNKRyxJQUFJLENBQ0gsQ0FBQ0MsR0FBR0MsSUFDRixJQUFJQyxLQUFLRCxFQUFFRSxPQUFPLEVBQUVDLE9BQU8sS0FBSyxJQUFJRixLQUFLRixFQUFFRyxPQUFPLEVBQUVDLE9BQU8sSUFFOURsQixLQUFLLENBQUMsR0FBRztBQUNkO0FBRUEsMkNBQTJDLEdBQzNDLFNBQVNtQixPQUFPQyxJQUFVO0lBQ3hCLE1BQU1DLElBQUlELEtBQUtFLFdBQVc7SUFDMUIsTUFBTUMsSUFBSUMsT0FBT0osS0FBS0ssUUFBUSxLQUFLLEdBQUdDLFFBQVEsQ0FBQyxHQUFHO0lBQ2xELE1BQU1DLElBQUlILE9BQU9KLEtBQUtRLE9BQU8sSUFBSUYsUUFBUSxDQUFDLEdBQUc7SUFDN0MsT0FBTyxHQUFRSCxPQUFMRixHQUFFLEtBQVFNLE9BQUxKLEdBQUUsS0FBSyxPQUFGSTtBQUN0QjtBQUVPLFNBQVNFLFVBQVVDLE9BQXVCO0lBQy9DLE1BQU1DLFVBQVVmLEtBQUtnQixHQUFHLEtBQUssT0FBTyxNQUFNO0lBQzFDLE1BQU1DLE9BQU9ILFFBQVFJLE1BQU0sQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxTQUFTLEdBQUdMO0lBQ2pELE1BQU1NLFFBQVFKLEtBQUtLLE1BQU0sQ0FBQyxDQUFDQyxHQUFHSixJQUFNSSxJQUFJSixFQUFFSyxhQUFhLEVBQUU7SUFDekQsTUFBTUMsYUFBYVIsS0FBS0MsTUFBTSxDQUFDLENBQUNDLElBQU1BLEVBQUVLLGFBQWEsR0FBRyxHQUFHRSxNQUFNO0lBRWpFLE1BQU1DLFVBQVUsSUFBSUM7SUFDcEIsS0FBSyxNQUFNVCxLQUFLRixLQUFNO1FBQ3BCLElBQUlFLEVBQUVLLGFBQWEsSUFBSSxHQUFHO1FBQzFCLE1BQU1iLElBQUksSUFBSVgsS0FBS21CLEVBQUVDLFNBQVMsR0FBRztRQUNqQ08sUUFBUUUsR0FBRyxDQUFDMUIsT0FBT1E7SUFDckI7SUFFQSxNQUFNbUIsUUFBUSxJQUFJOUI7SUFDbEI4QixNQUFNQyxRQUFRLENBQUMsR0FBRyxHQUFHLEdBQUc7SUFFeEIsd0NBQXdDO0lBQ3hDLElBQUlDLGdCQUFnQjtJQUNwQixNQUFNQyxNQUFNLElBQUlqQyxLQUFLOEI7SUFDckIsSUFBSSxDQUFDSCxRQUFRTyxHQUFHLENBQUMvQixPQUFPOEIsT0FBTztRQUM3QkEsSUFBSUUsT0FBTyxDQUFDRixJQUFJckIsT0FBTyxLQUFLO0lBQzlCO0lBQ0EsTUFBT2UsUUFBUU8sR0FBRyxDQUFDL0IsT0FBTzhCLE1BQU87UUFDL0JEO1FBQ0FDLElBQUlFLE9BQU8sQ0FBQ0YsSUFBSXJCLE9BQU8sS0FBSztJQUM5QjtJQUVBLGlCQUFpQjtJQUNqQixJQUFJd0IsZ0JBQWdCO0lBQ3BCLElBQUlDLFNBQVM7SUFDYixNQUFNQyxTQUFTQyxNQUFNQyxJQUFJLENBQUNiLFNBQVM5QixJQUFJO0lBQ3ZDLElBQUssSUFBSTRDLElBQUksR0FBR0EsSUFBSUgsT0FBT1osTUFBTSxFQUFFZSxJQUFLO1FBQ3RDLElBQUlBLE1BQU0sR0FBRztZQUNYSixTQUFTO1lBQ1RELGdCQUFnQjtZQUNoQjtRQUNGO1FBQ0EsTUFBTU0sT0FBTyxJQUFJMUMsS0FBS3NDLE1BQU0sQ0FBQ0csSUFBSSxFQUFFLEdBQUc7UUFDdENDLEtBQUtQLE9BQU8sQ0FBQ08sS0FBSzlCLE9BQU8sS0FBSztRQUM5QixJQUFJVCxPQUFPdUMsVUFBVUosTUFBTSxDQUFDRyxFQUFFLEVBQUVKO2FBQzNCQSxTQUFTO1FBQ2QsSUFBSUEsU0FBU0QsZUFBZUEsZ0JBQWdCQztJQUM5QztJQUVBLE9BQU87UUFBRWhCO1FBQU9XO1FBQWVJO1FBQWVYO0lBQVc7QUFDM0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbGliL2dpdGVhLnRzPzBiMzkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR0lURUFfVVNFUk5BTUUgfSBmcm9tICcuL2NvbmZpZyc7IC8vIGtlZXAgb25seSBzYWZlLCBub24tc2VjcmV0IHZhbHVlc1xuaW1wb3J0IHR5cGUge1xuICBHaXRlYVJlcG8sXG4gIEdpdGVhQ29tbWl0LFxuICBIZWF0bWFwRW50cnksXG4gIENvbW1pdFN0YXRzLFxufSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQVBJX1BSRUZJWCA9ICcvYXBpL2dpdGVhJztcblxuYXN5bmMgZnVuY3Rpb24gZ2V0PFQ+KHBhdGg6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtBUElfUFJFRklYfSR7cGF0aH1gLCB7XG4gICAgaGVhZGVyczogeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGNhY2hlOiAnbm8tc3RvcmUnLFxuICB9KTtcbiAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcihgR2l0ZWEgcHJveHkgJHtwYXRofTogSFRUUCAke3Jlcy5zdGF0dXN9YCk7XG4gIHJldHVybiByZXMuanNvbigpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UmVwb3MobGltaXQgPSA2KTogUHJvbWlzZTxHaXRlYVJlcG9bXT4ge1xuICByZXR1cm4gZ2V0PEdpdGVhUmVwb1tdPihcbiAgICBgL3VzZXJzLyR7R0lURUFfVVNFUk5BTUV9L3JlcG9zP2xpbWl0PSR7bGltaXR9JnNvcnQ9bmV3ZXN0YFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SGVhdG1hcCgpOiBQcm9taXNlPEhlYXRtYXBFbnRyeVtdPiB7XG4gIHJldHVybiBnZXQ8SGVhdG1hcEVudHJ5W10+KGAvdXNlcnMvJHtHSVRFQV9VU0VSTkFNRX0vaGVhdG1hcGApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UmVwb0NvbW1pdHMoXG4gIHJlcG86IHN0cmluZyxcbiAgbGltaXQgPSA1XG4pOiBQcm9taXNlPEdpdGVhQ29tbWl0W10+IHtcbiAgcmV0dXJuIGdldDxHaXRlYUNvbW1pdFtdPihcbiAgICBgL3JlcG9zLyR7R0lURUFfVVNFUk5BTUV9LyR7cmVwb30vY29tbWl0cz9saW1pdD0ke2xpbWl0fWBcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFJlY2VudENvbW1pdHMoXG4gIHJlcG9zOiBHaXRlYVJlcG9bXSxcbiAgcGVyUmVwbyA9IDRcbik6IFByb21pc2U8R2l0ZWFDb21taXRbXT4ge1xuICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgIHJlcG9zLnNsaWNlKDAsIDQpLm1hcCgocikgPT5cbiAgICAgIGdldFJlcG9Db21taXRzKHIubmFtZSwgcGVyUmVwbykudGhlbigoY29tbWl0cykgPT5cbiAgICAgICAgY29tbWl0cy5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgLi4uYyxcbiAgICAgICAgICBfcmVwbzogci5uYW1lLFxuICAgICAgICAgIF9yZXBvVXJsOiByLmh0bWxfdXJsLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY29uc3QgYWxsOiBHaXRlYUNvbW1pdFtdID0gW107XG4gIGZvciAoY29uc3QgciBvZiByZXN1bHRzKSB7XG4gICAgaWYgKHIuc3RhdHVzID09PSAnZnVsZmlsbGVkJykgYWxsLnB1c2goLi4uci52YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gYWxsXG4gICAgLnNvcnQoXG4gICAgICAoYSwgYikgPT5cbiAgICAgICAgbmV3IERhdGUoYi5jcmVhdGVkKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmNyZWF0ZWQpLmdldFRpbWUoKVxuICAgIClcbiAgICAuc2xpY2UoMCwgMTUpO1xufVxuXG4vKiogTG9jYWwgZGF0ZSBrZXkgKGF2b2lkcyBVVEMgc2hpZnQgYnVncykgKi9cbmZ1bmN0aW9uIGRheUtleShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgY29uc3QgeSA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgY29uc3QgbSA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICBjb25zdCBkID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICByZXR1cm4gYCR7eX0tJHttfS0ke2R9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGNTdGF0cyhoZWF0bWFwOiBIZWF0bWFwRW50cnlbXSk6IENvbW1pdFN0YXRzIHtcbiAgY29uc3QgeWVhckFnbyA9IERhdGUubm93KCkgLyAxMDAwIC0gMzY1ICogODY0MDA7XG4gIGNvbnN0IHllYXIgPSBoZWF0bWFwLmZpbHRlcigoZSkgPT4gZS50aW1lc3RhbXAgPiB5ZWFyQWdvKTtcbiAgY29uc3QgdG90YWwgPSB5ZWFyLnJlZHVjZSgocywgZSkgPT4gcyArIGUuY29udHJpYnV0aW9ucywgMCk7XG4gIGNvbnN0IGFjdGl2ZURheXMgPSB5ZWFyLmZpbHRlcigoZSkgPT4gZS5jb250cmlidXRpb25zID4gMCkubGVuZ3RoO1xuXG4gIGNvbnN0IGRhdGVTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBlIG9mIHllYXIpIHtcbiAgICBpZiAoZS5jb250cmlidXRpb25zIDw9IDApIGNvbnRpbnVlO1xuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShlLnRpbWVzdGFtcCAqIDEwMDApO1xuICAgIGRhdGVTZXQuYWRkKGRheUtleShkKSk7XG4gIH1cblxuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXG4gIC8vIEN1cnJlbnQgc3RyZWFrIChiYWNrd2FyZHMgZnJvbSB0b2RheSlcbiAgbGV0IGN1cnJlbnRTdHJlYWsgPSAwO1xuICBjb25zdCBjdXIgPSBuZXcgRGF0ZSh0b2RheSk7XG4gIGlmICghZGF0ZVNldC5oYXMoZGF5S2V5KGN1cikpKSB7XG4gICAgY3VyLnNldERhdGUoY3VyLmdldERhdGUoKSAtIDEpO1xuICB9XG4gIHdoaWxlIChkYXRlU2V0LmhhcyhkYXlLZXkoY3VyKSkpIHtcbiAgICBjdXJyZW50U3RyZWFrKys7XG4gICAgY3VyLnNldERhdGUoY3VyLmdldERhdGUoKSAtIDEpO1xuICB9XG5cbiAgLy8gTG9uZ2VzdCBzdHJlYWtcbiAgbGV0IGxvbmdlc3RTdHJlYWsgPSAwO1xuICBsZXQgc3RyZWFrID0gMDtcbiAgY29uc3Qgc29ydGVkID0gQXJyYXkuZnJvbShkYXRlU2V0KS5zb3J0KCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIHN0cmVhayA9IDE7XG4gICAgICBsb25nZXN0U3RyZWFrID0gMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBwcmV2ID0gbmV3IERhdGUoc29ydGVkW2kgLSAxXSArICdUMDA6MDA6MDAnKTtcbiAgICBwcmV2LnNldERhdGUocHJldi5nZXREYXRlKCkgKyAxKTtcbiAgICBpZiAoZGF5S2V5KHByZXYpID09PSBzb3J0ZWRbaV0pIHN0cmVhaysrO1xuICAgIGVsc2Ugc3RyZWFrID0gMTtcbiAgICBpZiAoc3RyZWFrID4gbG9uZ2VzdFN0cmVhaykgbG9uZ2VzdFN0cmVhayA9IHN0cmVhaztcbiAgfVxuXG4gIHJldHVybiB7IHRvdGFsLCBjdXJyZW50U3RyZWFrLCBsb25nZXN0U3RyZWFrLCBhY3RpdmVEYXlzIH07XG59XG4iXSwibmFtZXMiOlsiR0lURUFfVVNFUk5BTUUiLCJBUElfUFJFRklYIiwiZ2V0IiwicGF0aCIsInJlcyIsImZldGNoIiwiaGVhZGVycyIsIkFjY2VwdCIsImNhY2hlIiwib2siLCJFcnJvciIsInN0YXR1cyIsImpzb24iLCJnZXRSZXBvcyIsImxpbWl0IiwiZ2V0SGVhdG1hcCIsImdldFJlcG9Db21taXRzIiwicmVwbyIsImdldFJlY2VudENvbW1pdHMiLCJyZXBvcyIsInBlclJlcG8iLCJyZXN1bHRzIiwiUHJvbWlzZSIsImFsbFNldHRsZWQiLCJzbGljZSIsIm1hcCIsInIiLCJuYW1lIiwidGhlbiIsImNvbW1pdHMiLCJjIiwiX3JlcG8iLCJfcmVwb1VybCIsImh0bWxfdXJsIiwiYWxsIiwicHVzaCIsInZhbHVlIiwic29ydCIsImEiLCJiIiwiRGF0ZSIsImNyZWF0ZWQiLCJnZXRUaW1lIiwiZGF5S2V5IiwiZGF0ZSIsInkiLCJnZXRGdWxsWWVhciIsIm0iLCJTdHJpbmciLCJnZXRNb250aCIsInBhZFN0YXJ0IiwiZCIsImdldERhdGUiLCJjYWxjU3RhdHMiLCJoZWF0bWFwIiwieWVhckFnbyIsIm5vdyIsInllYXIiLCJmaWx0ZXIiLCJlIiwidGltZXN0YW1wIiwidG90YWwiLCJyZWR1Y2UiLCJzIiwiY29udHJpYnV0aW9ucyIsImFjdGl2ZURheXMiLCJsZW5ndGgiLCJkYXRlU2V0IiwiU2V0IiwiYWRkIiwidG9kYXkiLCJzZXRIb3VycyIsImN1cnJlbnRTdHJlYWsiLCJjdXIiLCJoYXMiLCJzZXREYXRlIiwibG9uZ2VzdFN0cmVhayIsInN0cmVhayIsInNvcnRlZCIsIkFycmF5IiwiZnJvbSIsImkiLCJwcmV2Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./lib/gitea.ts\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js":
|
||
/*!****************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js ***!
|
||
\****************************************************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider'); // TODO: Delete with enableRenderableContext\n\nvar REACT_CONSUMER_TYPE = Symbol.for('react.consumer');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\nvar enableRenderableContext = false;\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false;\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nvar REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n if (typeof type === 'function') {\n if (type.$$typeof === REACT_CLIENT_REFERENCE$2) {\n // TODO: Create a convention for naming client references with debug info.\n return null;\n }\n\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n case REACT_CACHE_TYPE:\n {\n return 'Cache';\n }\n\n }\n\n if (typeof type === 'object') {\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n {\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n }\n\n case REACT_CONTEXT_TYPE:\n var context = type;\n\n {\n return getContextName(context) + '.Consumer';\n }\n\n case REACT_CONSUMER_TYPE:\n {\n return null;\n }\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n }\n }\n\n return null;\n}\n\n// $FlowFixMe[method-unbinding]\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar assign = Object.assign;\n\n/*\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\n\n return type;\n }\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference');\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || enableRenderableContext || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n/**\n * Leverages native browser/VM stack frames to get proper details (e.g.\n * filename, line + col number) for a single component in a component stack. We\n * do this by:\n * (1) throwing and catching an error in the function - this will be our\n * control error.\n * (2) calling the component which will eventually throw an error that we'll\n * catch - this will be our sample error.\n * (3) diffing the control and sample error stacks to find the stack frame\n * which represents our component.\n */\n\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n /**\n * Finding a common stack frame between sample and control errors can be\n * tricky given the different types and levels of stack trace truncation from\n * different JS VMs. So instead we'll attempt to control what that common\n * frame should be through this object method:\n * Having both the sample and control errors be in the function under the\n * `DescribeNativeComponentFrameRoot` property, + setting the `name` and\n * `displayName` properties of the function ensures that a stack\n * frame exists that has the method name `DescribeNativeComponentFrameRoot` in\n * it for both control and sample stacks.\n */\n\n\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n var control;\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe[prop-missing]\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n } // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n } // TODO(luna): This will currently only throw if the function component\n // tries to access React/ReactDOM/props. We should probably make this throw\n // in simple components too\n\n\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\n // component, which we don't yet support. Attach a noop catch handler to\n // silence the error.\n // TODO: Implement component stacks for async client components?\n\n if (maybePromise && typeof maybePromise.catch === 'function') {\n maybePromise.catch(function () {});\n }\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n return [sample.stack, control.stack];\n }\n }\n\n return [null, null];\n }\n }; // $FlowFixMe[prop-missing]\n\n RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot';\n var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable.\n\n if (namePropDescriptor && namePropDescriptor.configurable) {\n // V8 utilizes a function's `name` property when generating a stack trace.\n Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor\n // is set to `false`.\n // $FlowFixMe[cannot-write]\n 'name', {\n value: 'DetermineComponentFrameRoot'\n });\n }\n\n try {\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n\n if (sampleStack && controlStack) {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sampleStack.split('\\n');\n var controlLines = controlStack.split('\\n');\n var s = 0;\n var c = 0;\n\n while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) {\n s++;\n }\n\n while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) {\n c++;\n } // We couldn't find our intentionally injected common root frame, attempt\n // to find another common root frame by search from the bottom of the\n // control stack...\n\n\n if (s === sampleLines.length || c === controlLines.length) {\n s = sampleLines.length - 1;\n c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n if (true) {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nfunction ReactElement(type, key, _ref, self, source, owner, props) {\n var ref;\n\n {\n ref = _ref;\n }\n\n var element;\n\n {\n // In prod, `ref` is a regular property. It will be removed in a\n // future release.\n element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n }\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // debugInfo contains Server Component debug information.\n\n Object.defineProperty(element, '_debugInfo', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: null\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n}\nvar didWarnAboutKeySpread = {};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV$1(type, config, maybeKey, isStaticChildren, source, self) {\n {\n if (!isValidElementType(type)) {\n // This is an invalid element type.\n //\n // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n } else {\n // This is a valid element type.\n // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing\n // errors. We don't want exception behavior to differ between dev and\n // prod. (Rendering will throw with a helpful message and as soon as the\n // type is fixed, the key warnings will appear.)\n var children = config.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n } // Warn about key spread regardless of whether the type is valid.\n\n\n if (hasOwnProperty.call(config, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n {\n ref = config.ref;\n }\n\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && // Skip over reserved prop names\n propName !== 'key' && (propName !== 'ref')) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n var element = ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n }\n\n return element;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner.current) {\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object' || !node) {\n return;\n }\n\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nvar ownerHasKeyUseWarning = {};\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement(null);\n }\n}\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = getComponentNameFromType(parentType);\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n // TODO: Move this to render phase instead of at element creation.\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement(null);\n }\n }\n}\n\nvar jsxDEV = jsxDEV$1 ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsxDEV = jsxDEV;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6QztBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzR0FBMEI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyxlQUFlO0FBQ2hIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVIsa0RBQWtEO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBLHFDQUFxQzs7QUFFckMsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBLHFFQUFxRTs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHOztBQUVsRztBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLGVBQWU7QUFDMUIsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtB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QUFXLGNBQWM7QUFDekI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQjtBQUNoQixjQUFjO0FBQ2QsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdFwiKTtcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50Jyk7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKTtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKTtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKTsgLy8gVE9ETzogRGVsZXRlIHdpdGggZW5hYmxlUmVuZGVyYWJsZUNvbnRleHRcblxudmFyIFJFQUNUX0NPTlNVTUVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jb25zdW1lcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xudmFyIFJFQUNUX0NBQ0hFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jYWNoZScpO1xudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXG5cbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXG52YXIgZW5hYmxlUmVuZGVyYWJsZUNvbnRleHQgPSBmYWxzZTtcbi8vIHN0dWZmLiBJbnRlbmRlZCB0byBlbmFibGUgUmVhY3QgY29yZSBtZW1iZXJzIHRvIG1vcmUgZWFzaWx5IGRlYnVnIHNjaGVkdWxpbmdcbi8vIGlzc3VlcyBpbiBERVYgYnVpbGRzLlxuXG52YXIgZW5hYmxlRGVidWdUcmFjaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZGlzcGxheU5hbWUgPSBvdXRlclR5cGUuZGlzcGxheU5hbWU7XG5cbiAgaWYgKGRpc3BsYXlOYW1lKSB7XG4gICAgcmV0dXJuIGRpc3BsYXlOYW1lO1xuICB9XG5cbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZTtcbn0gLy8gS2VlcCBpbiBzeW5jIHdpdGggcmVhY3QtcmVjb25jaWxlci9nZXRDb21wb25lbnROYW1lRnJvbUZpYmVyXG5cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59XG5cbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDIgPSBTeW1ib2wuZm9yKCdyZWFjdC5jbGllbnQucmVmZXJlbmNlJyk7IC8vIE5vdGUgdGhhdCB0aGUgcmVjb25jaWxlciBwYWNrYWdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIHRvIHVzZSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKCkgaW5zdGVhZC5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMikge1xuICAgICAgLy8gVE9ETzogQ3JlYXRlIGEgY29udmVudGlvbiBmb3IgbmFtaW5nIGNsaWVudCByZWZlcmVuY2VzIHdpdGggZGVidWcgaW5mby5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICAgIGNhc2UgUkVBQ1RfQ0FDSEVfVFlQRTpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICdDYWNoZSc7XG4gICAgICB9XG5cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcblxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICB2YXIgb3V0ZXJOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsO1xuXG4gICAgICAgIGlmIChvdXRlck5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gb3V0ZXJOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdNZW1vJztcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLypcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXG4gKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXG4gKi9cbi8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICB7XG4gICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuXG5cbmZ1bmN0aW9uIHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSB7XG4gIHtcbiAgICB0cnkge1xuICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIC8vIElmIHlvdSBlbmRlZCB1cCBoZXJlIGJ5IGZvbGxvd2luZyBhbiBleGNlcHRpb24gY2FsbCBzdGFjaywgaGVyZSdzIHdoYXQnc1xuICAvLyBoYXBwZW5lZDogeW91IHN1cHBsaWVkIGFuIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gUmVhY3QgKGFzIGEgcHJvcCwga2V5LFxuICAvLyBET00gYXR0cmlidXRlLCBDU1MgcHJvcGVydHksIHN0cmluZyByZWYsIGV0Yy4pIGFuZCB3aGVuIFJlYWN0IHRyaWVkIHRvXG4gIC8vIGNvZXJjZSBpdCB0byBhIHN0cmluZyB1c2luZyBgJycgKyB2YWx1ZWAsIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuICAvL1xuICAvLyBUaGUgbW9zdCBjb21tb24gdHlwZXMgdGhhdCB3aWxsIGNhdXNlIHRoaXMgZXhjZXB0aW9uIGFyZSBgU3ltYm9sYCBpbnN0YW5jZXNcbiAgLy8gYW5kIFRlbXBvcmFsIG9iamVjdHMgbGlrZSBgVGVtcG9yYWwuSW5zdGFudGAuIEJ1dCBhbnkgb2JqZWN0IHRoYXQgaGFzIGFcbiAgLy8gYHZhbHVlT2ZgIG9yIGBbU3ltYm9sLnRvUHJpbWl0aXZlXWAgbWV0aG9kIHRoYXQgdGhyb3dzIHdpbGwgYWxzbyBjYXVzZSB0aGlzXG4gIC8vIGV4Y2VwdGlvbi4gKExpYnJhcnkgYXV0aG9ycyBkbyB0aGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyBidWlsdC1pblxuICAvLyBudW1lcmljIG9wZXJhdG9ycyBsaWtlIGArYCBvciBjb21wYXJpc29uIG9wZXJhdG9ycyBsaWtlIGA+PWAgYmVjYXVzZSBjdXN0b21cbiAgLy8gbWV0aG9kcyBhcmUgbmVlZGVkIHRvIHBlcmZvcm0gYWNjdXJhdGUgYXJpdGhtZXRpYyBvciBjb21wYXJpc29uLilcbiAgLy9cbiAgLy8gVG8gZml4IHRoZSBwcm9ibGVtLCBjb2VyY2UgdGhpcyBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuICAvLyBwYXNzaW5nIGl0IHRvIFJlYWN0LiBUaGUgbW9zdCByZWxpYWJsZSB3YXkgaXMgdXN1YWxseSBgU3RyaW5nKHZhbHVlKWAuXG4gIC8vXG4gIC8vIFRvIGZpbmQgd2hpY2ggdmFsdWUgaXMgdGhyb3dpbmcsIGNoZWNrIHRoZSBicm93c2VyIG9yIGRlYnVnZ2VyIGNvbnNvbGUuXG4gIC8vIEJlZm9yZSB0aGlzIGV4Y2VwdGlvbiB3YXMgdGhyb3duLCB0aGVyZSBzaG91bGQgYmUgYGNvbnNvbGUuZXJyb3JgIG91dHB1dFxuICAvLyB0aGF0IHNob3dzIHRoZSB0eXBlIChTeW1ib2wsIFRlbXBvcmFsLlBsYWluRGF0ZSwgZXRjLikgdGhhdCBjYXVzZWQgdGhlXG4gIC8vIHByb2JsZW0gYW5kIGhvdyB0aGF0IHR5cGUgd2FzIHVzZWQ6IGtleSwgYXRycmlidXRlLCBpbnB1dCB2YWx1ZSBwcm9wLCBldGMuXG4gIC8vIEluIG1vc3QgY2FzZXMsIHRoaXMgY29uc29sZSBvdXRwdXQgYWxzbyBzaG93cyB0aGUgY29tcG9uZW50IGFuZCBpdHNcbiAgLy8gYW5jZXN0b3IgY29tcG9uZW50cyB3aGVyZSB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkLlxuICAvL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgZW5hYmxlUmVuZGVyYWJsZUNvbnRleHQgIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIC8vIHR5cGVzIHN1cHBvcnRlZCBieSBhbnkgRmxpZ2h0IGNvbmZpZ3VyYXRpb24gYW55d2hlcmUgc2luY2VcbiAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIEZsaWdodCBidWlsZCB0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHVzZWRcbiAgICAvLyB3aXRoLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuXG5mdW5jdGlvbiBpc0FycmF5KGEpIHtcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cbi8qKlxuICogTGV2ZXJhZ2VzIG5hdGl2ZSBicm93c2VyL1ZNIHN0YWNrIGZyYW1lcyB0byBnZXQgcHJvcGVyIGRldGFpbHMgKGUuZy5cbiAqIGZpbGVuYW1lLCBsaW5lICsgY29sIG51bWJlcikgZm9yIGEgc2luZ2xlIGNvbXBvbmVudCBpbiBhIGNvbXBvbmVudCBzdGFjay4gV2VcbiAqIGRvIHRoaXMgYnk6XG4gKiAgICgxKSB0aHJvd2luZyBhbmQgY2F0Y2hpbmcgYW4gZXJyb3IgaW4gdGhlIGZ1bmN0aW9uIC0gdGhpcyB3aWxsIGJlIG91clxuICogICAgICAgY29udHJvbCBlcnJvci5cbiAqICAgKDIpIGNhbGxpbmcgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIGV2ZW50dWFsbHkgdGhyb3cgYW4gZXJyb3IgdGhhdCB3ZSdsbFxuICogICAgICAgY2F0Y2ggLSB0aGlzIHdpbGwgYmUgb3VyIHNhbXBsZSBlcnJvci5cbiAqICAgKDMpIGRpZmZpbmcgdGhlIGNvbnRyb2wgYW5kIHNhbXBsZSBlcnJvciBzdGFja3MgdG8gZmluZCB0aGUgc3RhY2sgZnJhbWVcbiAqICAgICAgIHdoaWNoIHJlcHJlc2VudHMgb3VyIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmRpbmcgYSBjb21tb24gc3RhY2sgZnJhbWUgYmV0d2VlbiBzYW1wbGUgYW5kIGNvbnRyb2wgZXJyb3JzIGNhbiBiZVxuICAgKiB0cmlja3kgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcyBhbmQgbGV2ZWxzIG9mIHN0YWNrIHRyYWNlIHRydW5jYXRpb24gZnJvbVxuICAgKiBkaWZmZXJlbnQgSlMgVk1zLiBTbyBpbnN0ZWFkIHdlJ2xsIGF0dGVtcHQgdG8gY29udHJvbCB3aGF0IHRoYXQgY29tbW9uXG4gICAqIGZyYW1lIHNob3VsZCBiZSB0aHJvdWdoIHRoaXMgb2JqZWN0IG1ldGhvZDpcbiAgICogSGF2aW5nIGJvdGggdGhlIHNhbXBsZSBhbmQgY29udHJvbCBlcnJvcnMgYmUgaW4gdGhlIGZ1bmN0aW9uIHVuZGVyIHRoZVxuICAgKiBgRGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZVJvb3RgIHByb3BlcnR5LCArIHNldHRpbmcgdGhlIGBuYW1lYCBhbmRcbiAgICogYGRpc3BsYXlOYW1lYCBwcm9wZXJ0aWVzIG9mIHRoZSBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYSBzdGFja1xuICAgKiBmcmFtZSBleGlzdHMgdGhhdCBoYXMgdGhlIG1ldGhvZCBuYW1lIGBEZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lUm9vdGAgaW5cbiAgICogaXQgZm9yIGJvdGggY29udHJvbCBhbmQgc2FtcGxlIHN0YWNrcy5cbiAgICovXG5cblxuICB2YXIgUnVuSW5Sb290RnJhbWUgPSB7XG4gICAgRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udHJvbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgfSAvLyBUT0RPKGx1bmEpOiBUaGlzIHdpbGwgY3VycmVudGx5IG9ubHkgdGhyb3cgaWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgICAgICAgIC8vIHRyaWVzIHRvIGFjY2VzcyBSZWFjdC9SZWFjdERPTS9wcm9wcy4gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyB0aHJvd1xuICAgICAgICAgIC8vIGluIHNpbXBsZSBjb21wb25lbnRzIHRvb1xuXG5cbiAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gZm4oKTsgLy8gSWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCByZXR1cm5zIGEgcHJvbWlzZSwgaXQncyBsaWtlbHkgYW4gYXN5bmNcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHdoaWNoIHdlIGRvbid0IHlldCBzdXBwb3J0LiBBdHRhY2ggYSBub29wIGNhdGNoIGhhbmRsZXIgdG9cbiAgICAgICAgICAvLyBzaWxlbmNlIHRoZSBlcnJvci5cbiAgICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgY29tcG9uZW50IHN0YWNrcyBmb3IgYXN5bmMgY2xpZW50IGNvbXBvbmVudHM/XG5cbiAgICAgICAgICBpZiAobWF5YmVQcm9taXNlICYmIHR5cGVvZiBtYXliZVByb21pc2UuY2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1heWJlUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgfVxuICB9OyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPSAnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290JztcbiAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCAnbmFtZScpOyAvLyBCZWZvcmUgRVM2LCB0aGUgYG5hbWVgIHByb3BlcnR5IHdhcyBub3QgY29uZmlndXJhYmxlLlxuXG4gIGlmIChuYW1lUHJvcERlc2NyaXB0b3IgJiYgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgIC8vIFY4IHV0aWxpemVzIGEgZnVuY3Rpb24ncyBgbmFtZWAgcHJvcGVydHkgd2hlbiBnZW5lcmF0aW5nIGEgc3RhY2sgdHJhY2UuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwgLy8gQ29uZmlndXJhYmxlIHByb3BlcnRpZXMgY2FuIGJlIHVwZGF0ZWQgZXZlbiBpZiBpdHMgd3JpdGFibGUgZGVzY3JpcHRvclxuICAgIC8vIGlzIHNldCB0byBgZmFsc2VgLlxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuICAgICduYW1lJywge1xuICAgICAgdmFsdWU6ICdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnXG4gICAgfSk7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxcbiAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcblxuICAgIGlmIChzYW1wbGVTdGFjayAmJiBjb250cm9sU3RhY2spIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSAwO1xuICAgICAgdmFyIGMgPSAwO1xuXG4gICAgICB3aGlsZSAocyA8IHNhbXBsZUxpbmVzLmxlbmd0aCAmJiAhc2FtcGxlTGluZXNbc10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIHMrKztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGMgPCBjb250cm9sTGluZXMubGVuZ3RoICYmICFjb250cm9sTGluZXNbY10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIGMrKztcbiAgICAgIH0gLy8gV2UgY291bGRuJ3QgZmluZCBvdXIgaW50ZW50aW9uYWxseSBpbmplY3RlZCBjb21tb24gcm9vdCBmcmFtZSwgYXR0ZW1wdFxuICAgICAgLy8gdG8gZmluZCBhbm90aGVyIGNvbW1vbiByb290IGZyYW1lIGJ5IHNlYXJjaCBmcm9tIHRoZSBib3R0b20gb2YgdGhlXG4gICAgICAvLyBjb250cm9sIHN0YWNrLi4uXG5cblxuICAgICAgaWYgKHMgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fCBjID09PSBjb250cm9sTGluZXMubGVuZ3RoKSB7XG4gICAgICAgIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgICBjLS07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXG5cblxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duO1xudmFyIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB7XG4gICAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxuZnVuY3Rpb24gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgX3JlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIHJlZjtcblxuICB7XG4gICAgcmVmID0gX3JlZjtcbiAgfVxuXG4gIHZhciBlbGVtZW50O1xuXG4gIHtcbiAgICAvLyBJbiBwcm9kLCBgcmVmYCBpcyBhIHJlZ3VsYXIgcHJvcGVydHkuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhXG4gICAgLy8gZnV0dXJlIHJlbGVhc2UuXG4gICAgZWxlbWVudCA9IHtcbiAgICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBrZXk6IGtleSxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICAgIF9vd25lcjogb3duZXJcbiAgICB9O1xuICB9XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBkZWJ1Z0luZm8gY29udGFpbnMgU2VydmVyIENvbXBvbmVudCBkZWJ1ZyBpbmZvcm1hdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX2RlYnVnSW5mbycsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IG51bGxcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbnZhciBkaWRXYXJuQWJvdXRLZXlTcHJlYWQgPSB7fTtcbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzEwN1xuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuXG5mdW5jdGlvbiBqc3hERVYkMSh0eXBlLCBjb25maWcsIG1heWJlS2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBzb3VyY2UsIHNlbGYpIHtcbiAge1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpKSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIGludmFsaWQgZWxlbWVudCB0eXBlLlxuICAgICAgLy9cbiAgICAgIC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gICAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGVTdHJpbmc7XG5cbiAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkodHlwZSkpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCdSZWFjdC5qc3g6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSB2YWxpZCBlbGVtZW50IHR5cGUuXG4gICAgICAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAgICAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmdcbiAgICAgIC8vIGVycm9ycy4gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZFxuICAgICAgLy8gcHJvZC4gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlXG4gICAgICAvLyB0eXBlIGlzIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcbiAgICAgIHZhciBjaGlsZHJlbiA9IGNvbmZpZy5jaGlsZHJlbjtcblxuICAgICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW5baV0sIHR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gV2FybiBhYm91dCBrZXkgc3ByZWFkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdHlwZSBpcyB2YWxpZC5cblxuXG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhjb25maWcpLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgICByZXR1cm4gayAhPT0gJ2tleSc7XG4gICAgICB9KTtcbiAgICAgIHZhciBiZWZvcmVFeGFtcGxlID0ga2V5cy5sZW5ndGggPiAwID8gJ3trZXk6IHNvbWVLZXksICcgKyBrZXlzLmpvaW4oJzogLi4uLCAnKSArICc6IC4uLn0nIDogJ3trZXk6IHNvbWVLZXl9JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdKSB7XG4gICAgICAgIHZhciBhZnRlckV4YW1wbGUgPSBrZXlzLmxlbmd0aCA+IDAgPyAneycgKyBrZXlzLmpvaW4oJzogLi4uLCAnKSArICc6IC4uLn0nIDogJ3t9JztcblxuICAgICAgICBlcnJvcignQSBwcm9wcyBvYmplY3QgY29udGFpbmluZyBhIFwia2V5XCIgcHJvcCBpcyBiZWluZyBzcHJlYWQgaW50byBKU1g6XFxuJyArICcgIGxldCBwcm9wcyA9ICVzO1xcbicgKyAnICA8JXMgey4uLnByb3BzfSAvPlxcbicgKyAnUmVhY3Qga2V5cyBtdXN0IGJlIHBhc3NlZCBkaXJlY3RseSB0byBKU1ggd2l0aG91dCB1c2luZyBzcHJlYWQ6XFxuJyArICcgIGxldCBwcm9wcyA9ICVzO1xcbicgKyAnICA8JXMga2V5PXtzb21lS2V5fSB7Li4ucHJvcHN9IC8+JywgYmVmb3JlRXhhbXBsZSwgY29tcG9uZW50TmFtZSwgYWZ0ZXJFeGFtcGxlLCBjb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHZhciBrZXkgPSBudWxsO1xuICAgIHZhciByZWYgPSBudWxsOyAvLyBDdXJyZW50bHksIGtleSBjYW4gYmUgc3ByZWFkIGluIGFzIGEgcHJvcC4gVGhpcyBjYXVzZXMgYSBwb3RlbnRpYWxcbiAgICAvLyBpc3N1ZSBpZiBrZXkgaXMgYWxzbyBleHBsaWNpdGx5IGRlY2xhcmVkIChpZS4gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz5cbiAgICAvLyBvciA8ZGl2IGtleT1cIkhpXCIgey4uLnByb3BzfSAvPiApLiBXZSB3YW50IHRvIGRlcHJlY2F0ZSBrZXkgc3ByZWFkLFxuICAgIC8vIGJ1dCBhcyBhbiBpbnRlcm1lZGlhcnkgc3RlcCwgd2Ugd2lsbCB1c2UganN4REVWIGZvciBldmVyeXRoaW5nIGV4Y2VwdFxuICAgIC8vIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+LCBiZWNhdXNlIHdlIGFyZW4ndCBjdXJyZW50bHkgYWJsZSB0byB0ZWxsIGlmXG4gICAgLy8ga2V5IGlzIGV4cGxpY2l0bHkgZGVjbGFyZWQgdG8gYmUgdW5kZWZpbmVkIG9yIG5vdC5cblxuICAgIGlmIChtYXliZUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24obWF5YmVLZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIG1heWJlS2V5O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgfVxuXG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmIC8vIFNraXAgb3ZlciByZXNlcnZlZCBwcm9wIG5hbWVzXG4gICAgICBwcm9wTmFtZSAhPT0gJ2tleScgJiYgKHByb3BOYW1lICE9PSAncmVmJykpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xuXG4gICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHtcbiAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnIHx8ICFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIDsgZWxzZSBpZiAoaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gICAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAgIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICAgIHZhciBjaGlsZE93bmVyID0gJyc7XG5cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sIGNoaWxkT3duZXIpO1xuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAge1xuICAgIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgICBpZiAoIWluZm8pIHtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHBhcmVudFR5cGUpO1xuXG4gICAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgICBpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZm87XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gcmVuZGVyIHBoYXNlIGluc3RlYWQgb2YgYXQgZWxlbWVudCBjcmVhdGlvbi5cbiAge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcblxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG5cbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIganN4REVWID0ganN4REVWJDEgO1xuXG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuanN4REVWID0ganN4REVWO1xuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react/jsx-dev-runtime.js ***!
|
||
\******************************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSw4TEFBc0U7QUFDeEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtZGV2LXJ1bnRpbWUuanM/YmM2MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\n"));
|
||
|
||
/***/ })
|
||
|
||
},
|
||
/******/ function(__webpack_require__) { // webpackRuntimeModules
|
||
/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
|
||
/******/ __webpack_require__.O(0, ["main-app"], function() { return __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FCommitSection.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FContact.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FNav.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fwill%2FDocuments%2Fwilliam-march%2Fcomponents%2FProjects.tsx%22%2C%22ids%22%3A%5B%22default%22%5D%7D&server=false!"); });
|
||
/******/ var __webpack_exports__ = __webpack_require__.O();
|
||
/******/ _N_E = __webpack_exports__;
|
||
/******/ }
|
||
]); |