diff --git a/OpenToolbox/OpenToolbox/dist/electron/renderer.js b/OpenToolbox/OpenToolbox/dist/electron/renderer.js index 43680d9c86801ea2f24153dd0a5a7a7449cbcbf0..77d184e976671a7c43265da714d2bb0afe329915 100644 --- a/OpenToolbox/OpenToolbox/dist/electron/renderer.js +++ b/OpenToolbox/OpenToolbox/dist/electron/renderer.js @@ -1,7 +1,7 @@ -module.exports=function(t){function e(t){var e=N[t];if(!e)return p;var r=function(r){return e.hot.active?(N[r]?-1===N[r].parents.indexOf(t)&&N[r].parents.push(t):(k=[t],u=r),-1===e.children.indexOf(r)&&e.children.push(r)):(console.warn("[HMR] unexpected require("+r+") from disposed module "+t),k=[]),p(r)},n=function(t){return{configurable:!0,enumerable:!0,get:function(){return p[t]},set:function(e){p[t]=e}}};for(var i in p)Object.prototype.hasOwnProperty.call(p,i)&&"e"!==i&&"t"!==i&&Object.defineProperty(r,i,n(i));return r.e=function(t){function e(){A--,"prepare"===T&&(!O[t]&&a(t),0===A&&0===S&&l())}return"ready"===T&&o("prepare"),A++,p.e(t).then(e,(function(t){throw e(),t}))},r.t=function(t,e){return 1&e&&(t=r(t)),p.t(t,-2&e)},r}function r(e){var r={_acceptedDependencies:{},_declinedDependencies:{},_selfAccepted:!1,_selfDeclined:!1,_selfInvalidated:!1,_disposeHandlers:[],_main:u!==e,active:!0,accept:function(t,e){if(void 0===t)r._selfAccepted=!0;else if("function"==typeof t)r._selfAccepted=t;else if("object"==typeof t)for(var o=0;o ")),T.type){case"self-declined":e.onDeclined&&e.onDeclined(T),e.ignoreDeclined||(S=new Error("Aborted because of self decline: "+T.moduleId+j));break;case"declined":e.onDeclined&&e.onDeclined(T),e.ignoreDeclined||(S=new Error("Aborted because of declined dependency: "+T.moduleId+" in "+T.parentId+j));break;case"unaccepted":e.onUnaccepted&&e.onUnaccepted(T),e.ignoreUnaccepted||(S=new Error("Aborted because "+f+" is not accepted"+j));break;case"accepted":e.onAccepted&&e.onAccepted(T),A=!0;break;case"disposed":e.onDisposed&&e.onDisposed(T),O=!0;break;default:throw new Error("Unexception type "+T.type)}if(S)return o("abort"),Promise.reject(S);if(A)for(f in w[f]=h[f],i(x,T.outdatedModules),T.outdatedDependencies)Object.prototype.hasOwnProperty.call(T.outdatedDependencies,f)&&(g[f]||(g[f]=[]),i(g[f],T.outdatedDependencies[f]));O&&(i(x,[T.moduleId]),w[f]=C)}var D,I,z=[];for(l=0;lt.indexOf(e)&&t.push(e)})),t})):(o("idle"),new Promise((function(t){t(x)})))}function c(){if(v)return h||(h={}),v.forEach(m),v=void 0,!0}function m(e){Object.prototype.hasOwnProperty.call(h,e)||(h[e]=t[e])}function p(o){if(N[o])return N[o].exports;var n=N[o]={i:o,l:!1,exports:{},hot:r(o),parents:(C=k,k=[],C),children:[]};return t[o].call(n.exports,n,n.exports,e(o)),n.l=!0,n.exports}var f=window.webpackHotUpdate;window.webpackHotUpdate=function(t,e){(function(t,e){if($[t]&&j[t]){for(var r in j[t]=!1,e)Object.prototype.hasOwnProperty.call(e,r)&&(h[r]=e[r]);0==--S&&0===A&&l()}})(t,e),f&&f(t,e)};var u,g,h,b,v,x=!0,y="ddf371c15ffab9368366",w=1e4,_={},k=[],C=[],E=[],T="idle",S=0,A=0,O={},j={},$={},N={};return p.m=t,p.c=N,p.d=function(t,e,r){p.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},p.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},p.t=function(t,e){if(1&e&&(t=p(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(p.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)p.d(r,o,function(e){return t[e]}.bind(null,o));return r},p.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return p.d(e,"a",e),e},p.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},p.p="",p.h=function(){return y},e(30)(p.s=30)}([function(t){function e(t,e){var r=t[1]||"",o=t[3];if(!o)return r;if(e&&"function"==typeof btoa){var n=function(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}(o),i=o.sources.map((function(t){return"/*# sourceURL="+o.sourceRoot+t+" */"}));return[r].concat(i).concat([n]).join("\n")}return[r].join("\n")}t.exports=function(t){var r=[];return r.toString=function(){return this.map((function(r){var o=e(r,t);return r[2]?"@media "+r[2]+"{"+o+"}":o})).join("")},r.i=function(t,e){"string"==typeof t&&(t=[[null,t,""]]);for(var o,n={},i=0;ir.parts.length&&(o.parts.length=r.parts.length)}else{var i=[];for(n=0;ncode{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder,.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right .75rem center/8px 10px,url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E\") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right .75rem center/8px 10px,url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E\") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-ms-flexbox;display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem hsla(208,6%,54%,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(208,6%,54%,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success.focus,.btn-success:focus,.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info.focus,.btn-info:focus,.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light.focus,.btn-light:focus,.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem hsla(220,4%,85%,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(220,4%,85%,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:\"\"}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:\"Browse\"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);font-weight:400;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:\"Browse\";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb,.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:-ms-flexbox;display:flex;overflow:hidden}.progress-bar{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:\"\"}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E\")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:\"\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.857143%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:\"\";background-color:transparent}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}",""])},function(t,e,r){!function(t,e,r){"use strict";function o(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}function n(t,e){for(var r,o=0;o=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};f.jQueryDetection(),c.default.fn.emulateTransitionEnd=s,c.default.event.special[f.TRANSITION_END]={bindType:p,delegateType:p,handle:function(t){return c.default(t.target).is(this)?t.handleObj.handler.apply(this,arguments):void 0}};var u="alert",g="bs.alert",h="."+g,b=c.default.fn[u],v=function(){function t(t){this._element=t}var e=t.prototype;return e.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.dispose=function(){c.default.removeData(this._element,g),this._element=null},e._getRootElement=function(t){var e=f.getSelectorFromElement(t),r=!1;return e&&(r=document.querySelector(e)),r||(r=c.default(t).closest(".alert")[0]),r},e._triggerCloseEvent=function(t){var e=c.default.Event("close"+h);return c.default(t).trigger(e),e},e._removeElement=function(t){var e=this;if(c.default(t).removeClass("show"),c.default(t).hasClass("fade")){var r=f.getTransitionDurationFromElement(t);c.default(t).one(f.TRANSITION_END,(function(r){return e._destroyElement(t,r)})).emulateTransitionEnd(r)}else this._destroyElement(t)},e._destroyElement=function(t){c.default(t).detach().trigger("closed"+h).remove()},t._jQueryInterface=function(e){return this.each((function(){var r=c.default(this),o=r.data(g);o||(o=new t(this),r.data(g,o)),"close"===e&&o[e](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},i(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();c.default(document).on("click"+h+".data-api",'[data-dismiss="alert"]',v._handleDismiss(new v)),c.default.fn[u]=v._jQueryInterface,c.default.fn[u].Constructor=v,c.default.fn[u].noConflict=function(){return c.default.fn[u]=b,v._jQueryInterface};var x="button",y="bs.button",w="."+y,_=".data-api",k=c.default.fn[x],C="active",E='[data-toggle^="button"]',T='input:not([type="hidden"])',S=".btn",A=function(){function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,r=c.default(this._element).closest('[data-toggle="buttons"]')[0];if(r){var o=this._element.querySelector(T);if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains(C))t=!1;else{var n=r.querySelector(".active");n&&c.default(n).removeClass(C)}t&&(("checkbox"===o.type||"radio"===o.type)&&(o.checked=!this._element.classList.contains(C)),!this.shouldAvoidTriggerChange&&c.default(o).trigger("change")),o.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(C)),t&&c.default(this._element).toggleClass(C))},e.dispose=function(){c.default.removeData(this._element,y),this._element=null},t._jQueryInterface=function(e,r){return this.each((function(){var o=c.default(this),n=o.data(y);n||(n=new t(this),o.data(y,n)),n.shouldAvoidTriggerChange=r,"toggle"===e&&n[e]()}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();c.default(document).on("click"+w+_,E,(function(t){var e=t.target,r=e;if(c.default(e).hasClass("btn")||(e=c.default(e).closest(S)[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var o=e.querySelector(T);if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();("INPUT"===r.tagName||"LABEL"!==e.tagName)&&A._jQueryInterface.call(c.default(e),"toggle","INPUT"===r.tagName)}})).on("focus"+w+_+" blur"+w+_,E,(function(t){var e=c.default(t.target).closest(S)[0];c.default(e).toggleClass("focus",/^focus(in)?$/.test(t.type))})),c.default(window).on("load"+w+_,(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,r=t.length;ethis._items.length-1||0>t)){if(this._isSliding)return void c.default(this._element).one(P,(function(){return e.to(t)}));if(r===t)return this.pause(),void this.cycle();var o=t>r?L:M;this._slide(o,this._items[t])}},e.dispose=function(){c.default(this._element).off($),c.default.removeData(this._element,j),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(t){return t=a({},I,t),f.typeCheckConfig(O,t,z),t},e._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,0e&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&c.default(this._element).on("keydown"+$,(function(e){return t._keydown(e)})),"hover"===this._config.pause&&c.default(this._element).on("mouseenter"+$,(function(e){return t.pause(e)})).on("mouseleave"+$,(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var e=function(e){t._pointerEvent&&H[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:!t._pointerEvent&&(t.touchStartX=e.originalEvent.touches[0].clientX)},r=function(e){t.touchDeltaX=e.originalEvent.touches&&1i&&(i=0),n[i].focus()}}}},i(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return ht}},{key:"DefaultType",get:function(){return bt}}]),t}();c.default(document).on(ct,ut,vt._dataApiKeydownHandler).on(ct,gt,vt._dataApiKeydownHandler).on(dt+" keyup"+ot+nt,vt._clearMenus).on(dt,ut,(function(t){t.preventDefault(),t.stopPropagation(),vt._jQueryInterface.call(c.default(this),"toggle")})).on(dt,".dropdown form",(function(t){t.stopPropagation()})),c.default.fn[et]=vt._jQueryInterface,c.default.fn[et].Constructor=vt,c.default.fn[et].noConflict=function(){return c.default.fn[et]=it,vt._jQueryInterface};var xt="modal",yt="bs.modal",wt="."+yt,_t=c.default.fn[xt],kt={backdrop:!0,keyboard:!0,focus:!0,show:!0},Ct={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},Et="hidden"+wt,Tt="show"+wt,St="focusin"+wt,At="resize"+wt,Ot="click.dismiss"+wt,jt="keydown.dismiss"+wt,$t="mousedown.dismiss"+wt,Nt="modal-open",Dt="fade",It="show",zt="modal-static",Lt=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Mt=".sticky-top",Pt=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var e=t.prototype;return e.toggle=function(t){return this._isShown?this.hide():this.show(t)},e.show=function(t){var e=this;if(!this._isShown&&!this._isTransitioning){c.default(this._element).hasClass(Dt)&&(this._isTransitioning=!0);var r=c.default.Event(Tt,{relatedTarget:t});c.default(this._element).trigger(r),this._isShown||r.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),c.default(this._element).on(Ot,'[data-dismiss="modal"]',(function(t){return e.hide(t)})),c.default(this._dialog).on($t,(function(){c.default(e._element).one("mouseup.dismiss"+wt,(function(t){c.default(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return e._showElement(t)})))}},e.hide=function(t){var e=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var r=c.default.Event("hide"+wt);if(c.default(this._element).trigger(r),this._isShown&&!r.isDefaultPrevented()){this._isShown=!1;var o=c.default(this._element).hasClass(Dt);if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),c.default(document).off(St),c.default(this._element).removeClass(It),c.default(this._element).off(Ot),c.default(this._dialog).off($t),o){var n=f.getTransitionDurationFromElement(this._element);c.default(this._element).one(f.TRANSITION_END,(function(t){return e._hideModal(t)})).emulateTransitionEnd(n)}else this._hideModal()}}},e.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return c.default(t).off(wt)})),c.default(document).off(St),c.default.removeData(this._element,yt),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},e.handleUpdate=function(){this._adjustDialog()},e._getConfig=function(t){return t=a({},kt,t),f.typeCheckConfig(xt,t,Ct),t},e._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var e=c.default.Event("hidePrevented"+wt);if(c.default(this._element).trigger(e),e.isDefaultPrevented())return;var r=this._element.scrollHeight>document.documentElement.clientHeight;r||(this._element.style.overflowY="hidden"),this._element.classList.add(zt);var o=f.getTransitionDurationFromElement(this._dialog);c.default(this._element).off(f.TRANSITION_END),c.default(this._element).one(f.TRANSITION_END,(function(){t._element.classList.remove(zt),r||c.default(t._element).one(f.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,o)})).emulateTransitionEnd(o),this._element.focus()}else this.hide()},e._showElement=function(t){var e=this,r=c.default(this._element).hasClass(Dt),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),c.default(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,r&&f.reflow(this._element),c.default(this._element).addClass(It),this._config.focus&&this._enforceFocus();var n=c.default.Event("shown"+wt,{relatedTarget:t}),i=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,c.default(e._element).trigger(n)};if(r){var a=f.getTransitionDurationFromElement(this._dialog);c.default(this._dialog).one(f.TRANSITION_END,i).emulateTransitionEnd(a)}else i()},e._enforceFocus=function(){var t=this;c.default(document).off(St).on(St,(function(e){document!==e.target&&t._element!==e.target&&0===c.default(t._element).has(e.target).length&&t._element.focus()}))},e._setEscapeEvent=function(){var t=this;this._isShown?c.default(this._element).on(jt,(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):!t._config.keyboard&&27===e.which&&t._triggerBackdropTransition()})):!this._isShown&&c.default(this._element).off(jt)},e._setResizeEvent=function(){var t=this;this._isShown?c.default(window).on(At,(function(e){return t.handleUpdate(e)})):c.default(window).off(At)},e._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){c.default(document.body).removeClass(Nt),t._resetAdjustments(),t._resetScrollbar(),c.default(t._element).trigger(Et)}))},e._removeBackdrop=function(){this._backdrop&&(c.default(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,r=c.default(this._element).hasClass(Dt)?Dt:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",r&&this._backdrop.classList.add(r),c.default(this._backdrop).appendTo(document.body),c.default(this._element).on(Ot,(function(t){return e._ignoreBackdropClick?void(e._ignoreBackdropClick=!1):void(t.target!==t.currentTarget||e._triggerBackdropTransition())})),r&&f.reflow(this._backdrop),c.default(this._backdrop).addClass(It),!t)return;if(!r)return void t();var o=f.getTransitionDurationFromElement(this._backdrop);c.default(this._backdrop).one(f.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){c.default(this._backdrop).removeClass(It);var n=function(){e._removeBackdrop(),t&&t()};if(c.default(this._element).hasClass(Dt)){var i=f.getTransitionDurationFromElement(this._backdrop);c.default(this._backdrop).one(f.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}else t&&t()},e._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},Yt="show",Gt={HIDE:"hide"+qt,HIDDEN:"hidden"+qt,SHOW:"show"+qt,SHOWN:"shown"+qt,INSERTED:"inserted"+qt,CLICK:"click"+qt,FOCUSIN:"focusin"+qt,FOCUSOUT:"focusout"+qt,MOUSEENTER:"mouseenter"+qt,MOUSELEAVE:"mouseleave"+qt},Zt="fade",te="show",ee="hover",re="focus",oe=function(){function t(t,e){if(void 0===m.default)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,r=c.default(t.currentTarget).data(e);r||(r=new this.constructor(t.currentTarget,this._getDelegateConfig()),c.default(t.currentTarget).data(e,r)),r._activeTrigger.click=!r._activeTrigger.click,r._isWithActiveTrigger()?r._enter(null,r):r._leave(null,r)}else{if(c.default(this.getTipElement()).hasClass(te))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),c.default.removeData(this.element,this.constructor.DATA_KEY),c.default(this.element).off(this.constructor.EVENT_KEY),c.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&c.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===c.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=c.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){c.default(this.element).trigger(e);var r=f.findShadowRoot(this.element),o=c.default.contains(null===r?this.element.ownerDocument.documentElement:r,this.element);if(e.isDefaultPrevented()||!o)return;var n=this.getTipElement(),i=f.getUID(this.constructor.NAME);n.setAttribute("id",i),this.element.setAttribute("aria-describedby",i),this.setContent(),this.config.animation&&c.default(n).addClass(Zt);var a="function"==typeof this.config.placement?this.config.placement.call(this,n,this.element):this.config.placement,l=this._getAttachment(a);this.addAttachmentClass(l);var s=this._getContainer();c.default(n).data(this.constructor.DATA_KEY,this),c.default.contains(this.element.ownerDocument.documentElement,this.tip)||c.default(n).appendTo(s),c.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new m.default(this.element,n,this._getPopperConfig(l)),c.default(n).addClass(te),"ontouchstart"in document.documentElement&&c.default(document.body).children().on("mouseover",null,c.default.noop);var d=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,c.default(t.element).trigger(t.constructor.Event.SHOWN),"out"===e&&t._leave(null,t)};if(c.default(this.tip).hasClass(Zt)){var p=f.getTransitionDurationFromElement(this.tip);c.default(this.tip).one(f.TRANSITION_END,d).emulateTransitionEnd(p)}else d()}},e.hide=function(t){var e=this,r=this.getTipElement(),o=c.default.Event(this.constructor.Event.HIDE),n=function(){e._hoverState!==Yt&&r.parentNode&&r.parentNode.removeChild(r),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),c.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(c.default(this.element).trigger(o),!o.isDefaultPrevented()){if(c.default(r).removeClass(te),"ontouchstart"in document.documentElement&&c.default(document.body).children().off("mouseover",null,c.default.noop),this._activeTrigger.click=!1,this._activeTrigger[re]=!1,this._activeTrigger[ee]=!1,c.default(this.tip).hasClass(Zt)){var i=f.getTransitionDurationFromElement(r);c.default(r).one(f.TRANSITION_END,n).emulateTransitionEnd(i)}else n();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return!!this.getTitle()},e.addAttachmentClass=function(t){c.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||c.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(c.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),c.default(t).removeClass(Zt+" "+te)},e.setElementContent=function(t,e){return"object"==typeof e&&(e.nodeType||e.jquery)?void(this.config.html?!c.default(e).parent().is(t)&&t.empty().append(e):t.text(c.default(e).text())):void(this.config.html?(this.config.sanitize&&(e=d(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e))},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return a({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=a({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:f.isElement(this.config.container)?c.default(this.config.container):c.default(document).find(this.config.container)},e._getAttachment=function(t){return Xt[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)c.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var r=e===ee?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o=e===ee?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;c.default(t.element).on(r,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},c.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=a({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!=t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var r=this.constructor.DATA_KEY;return(e=e||c.default(t.currentTarget).data(r))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),c.default(t.currentTarget).data(r,e)),t&&(e._activeTrigger["focusin"===t.type?re:ee]=!0),c.default(e.getTipElement()).hasClass(te)||e._hoverState===Yt?void(e._hoverState=Yt):(clearTimeout(e._timeout),e._hoverState=Yt,e.config.delay&&e.config.delay.show?void(e._timeout=setTimeout((function(){e._hoverState===Yt&&e.show()}),e.config.delay.show)):void e.show())},e._leave=function(t,e){var r=this.constructor.DATA_KEY;if((e=e||c.default(t.currentTarget).data(r))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),c.default(t.currentTarget).data(r,e)),t&&(e._activeTrigger["focusout"===t.type?re:ee]=!1),!e._isWithActiveTrigger())return clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?void(e._timeout=setTimeout((function(){"out"===e._hoverState&&e.hide()}),e.config.delay.hide)):void e.hide()},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=c.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==Wt.indexOf(t)&&delete e[t]})),"number"==typeof(t=a({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),f.typeCheckConfig(Bt,t,this.constructor.DefaultType),t.sanitize&&(t.template=d(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=c.default(this.getTipElement()),e=t.attr("class").match(Vt);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null!==t.getAttribute("x-placement")||(c.default(t).removeClass(Zt),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var r=c.default(this),o=r.data(Ut);if((o||!/dispose|hide/.test(e))&&(o||(o=new t(this,"object"==typeof e&&e),r.data(Ut,o)),"string"==typeof e)){if(void 0===o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return Jt}},{key:"NAME",get:function(){return Bt}},{key:"DATA_KEY",get:function(){return Ut}},{key:"Event",get:function(){return Gt}},{key:"EVENT_KEY",get:function(){return qt}},{key:"DefaultType",get:function(){return Kt}}]),t}();c.default.fn[Bt]=oe._jQueryInterface,c.default.fn[Bt].Constructor=oe,c.default.fn[Bt].noConflict=function(){return c.default.fn[Bt]=Qt,oe._jQueryInterface};var ne="popover",ie="bs.popover",ae="."+ie,le=c.default.fn[ne],se=/(^|\s)bs-popover\S+/g,de=a({},oe.Default,{placement:"right",trigger:"click",content:"",template:''}),ce=a({},oe.DefaultType,{content:"(string|element|function)"}),me={HIDE:"hide"+ae,HIDDEN:"hidden"+ae,SHOW:"show"+ae,SHOWN:"shown"+ae,INSERTED:"inserted"+ae,CLICK:"click"+ae,FOCUSIN:"focusin"+ae,FOCUSOUT:"focusout"+ae,MOUSEENTER:"mouseenter"+ae,MOUSELEAVE:"mouseleave"+ae},pe=function(t){function e(){return t.apply(this,arguments)||this}!function(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}(e,t);var r=e.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){c.default(this.getTipElement()).addClass("bs-popover-"+t)},r.getTipElement=function(){return this.tip=this.tip||c.default(this.config.template)[0],this.tip},r.setContent=function(){var t=c.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=c.default(this.getTipElement()),e=t.attr("class").match(se);null!==e&&0=r){var o=this._targets[this._targets.length-1];this._activeTarget!==o&&this._activate(o)}else{if(this._activeTarget&&t=this._offsets[n]&&(void 0===this._offsets[n+1]||t li > .active",$e=function(){function t(t){this._element=t}var e=t.prototype;return e.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&c.default(this._element).hasClass(Ae)||c.default(this._element).hasClass("disabled"))){var e,r,o=c.default(this._element).closest(".nav, .list-group")[0],n=f.getSelectorFromElement(this._element);if(o){var i="UL"===o.nodeName||"OL"===o.nodeName?je:Oe;r=(r=c.default.makeArray(c.default(o).find(i)))[r.length-1]}var a=c.default.Event("hide"+Te,{relatedTarget:this._element}),l=c.default.Event("show"+Te,{relatedTarget:r});if(r&&c.default(r).trigger(a),c.default(this._element).trigger(l),!l.isDefaultPrevented()&&!a.isDefaultPrevented()){n&&(e=document.querySelector(n)),this._activate(this._element,o);var s=function(){var e=c.default.Event("hidden"+Te,{relatedTarget:t._element}),o=c.default.Event("shown"+Te,{relatedTarget:r});c.default(r).trigger(e),c.default(t._element).trigger(o)};e?this._activate(e,e.parentNode,s):s()}}},e.dispose=function(){c.default.removeData(this._element,Ee),this._element=null},e._activate=function(t,e,r){var o=this,n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?c.default(e).children(Oe):c.default(e).find(je))[0],i=r&&n&&c.default(n).hasClass("fade"),a=function(){return o._transitionComplete(t,n,r)};if(n&&i){var l=f.getTransitionDurationFromElement(n);c.default(n).removeClass("show").one(f.TRANSITION_END,a).emulateTransitionEnd(l)}else a()},e._transitionComplete=function(t,e,r){if(e){c.default(e).removeClass(Ae);var o=c.default(e.parentNode).find("> .dropdown-menu .active")[0];o&&c.default(o).removeClass(Ae),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(c.default(t).addClass(Ae),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),f.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&c.default(t.parentNode).hasClass("dropdown-menu")){var n=c.default(t).closest(".dropdown")[0];if(n){var i=[].slice.call(n.querySelectorAll(".dropdown-toggle"));c.default(i).addClass(Ae)}t.setAttribute("aria-expanded",!0)}r&&r()},t._jQueryInterface=function(e){return this.each((function(){var r=c.default(this),o=r.data(Ee);if(o||(o=new t(this),r.data(Ee,o)),"string"==typeof e){if(void 0===o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();c.default(document).on("click"+Te+".data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),$e._jQueryInterface.call(c.default(this),"show")})),c.default.fn.tab=$e._jQueryInterface,c.default.fn.tab.Constructor=$e,c.default.fn.tab.noConflict=function(){return c.default.fn.tab=Se,$e._jQueryInterface};var Ne="toast",De="bs.toast",Ie="."+De,ze=c.default.fn[Ne],Le="click.dismiss"+Ie,Me="show",Pe="showing",Re={animation:"boolean",autohide:"boolean",delay:"number"},Fe={animation:!0,autohide:!0,delay:500},He=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=c.default.Event("show"+Ie);if(c.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var r=function(){t._element.classList.remove(Pe),t._element.classList.add(Me),c.default(t._element).trigger("shown"+Ie),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),f.reflow(this._element),this._element.classList.add(Pe),this._config.animation){var o=f.getTransitionDurationFromElement(this._element);c.default(this._element).one(f.TRANSITION_END,r).emulateTransitionEnd(o)}else r()}},e.hide=function(){if(this._element.classList.contains(Me)){var t=c.default.Event("hide"+Ie);c.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains(Me)&&this._element.classList.remove(Me),c.default(this._element).off(Le),c.default.removeData(this._element,De),this._element=null,this._config=null},e._getConfig=function(t){return t=a({},Fe,c.default(this._element).data(),"object"==typeof t&&t?t:{}),f.typeCheckConfig(Ne,t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;c.default(this._element).on(Le,'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),c.default(t._element).trigger("hidden"+Ie)};if(this._element.classList.remove(Me),this._config.animation){var r=f.getTransitionDurationFromElement(this._element);c.default(this._element).one(f.TRANSITION_END,e).emulateTransitionEnd(r)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var r=c.default(this),o=r.data(De);if(o||(o=new t(this,"object"==typeof e&&e),r.data(De,o)),"string"==typeof e){if(void 0===o[e])throw new TypeError('No method named "'+e+'"');o[e](this)}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"DefaultType",get:function(){return Re}},{key:"Default",get:function(){return Fe}}]),t}();c.default.fn[Ne]=He._jQueryInterface,c.default.fn[Ne].Constructor=He,c.default.fn[Ne].noConflict=function(){return c.default.fn[Ne]=ze,He._jQueryInterface},t.Alert=v,t.Button=A,t.Carousel=B,t.Collapse=tt,t.Dropdown=vt,t.Modal=Pt,t.Popover=pe,t.Scrollspy=Ce,t.Tab=$e,t.Toast=He,t.Tooltip=oe,t.Util=f,Object.defineProperty(t,"__esModule",{value:!0})}(e,r(9),r(26))},function(t){t.exports=require("popper.js")},function(t,e,r){var o=r(28);"string"==typeof o&&(o=[[t.i,o,""]]),o.locals&&(t.exports=o.locals);(0,r(1).default)("40a81fda",o,!0,{})},function(t,e,r){(t.exports=r(0)(!1)).push([t.i,'.xterm{font-feature-settings:"liga" 0;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm{cursor:text}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility,.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:.5}.xterm-underline{text-decoration:underline}',""])},function(t){t.exports=require("vue-electron")},function(t,e,r){"use strict";function o(t){return null==t}function n(t){return null!=t}function i(t){return!0===t}function a(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function l(t){return null!==t&&"object"==typeof t}function s(t){return"[object Object]"===co.call(t)}function d(t){var e=parseFloat(t+"");return 0<=e&&Math.floor(e)===e&&isFinite(t)}function c(t){return n(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||s(t)&&t.toString===co?JSON.stringify(t,null,2):t+""}function p(t){var e=parseFloat(t);return isNaN(e)?t:e}function f(t,e){for(var r=Object.create(null),o=t.split(","),n=0;ns||la[r].indexOf(i)&&a[r].push(i):a[r]=[i]:a[r]=i}}function ue(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.isComment&&n(t.data)===n(e.data)&&function(t,e){if("input"!==t.tag)return!0;var r,o=n(r=t.data)&&n(r=r.attrs)&&r.type,i=n(r=e.data)&&n(r=r.attrs)&&r.type;return o===i||mi(o)&&mi(i)}(t,e)||i(t.isAsyncPlaceholder)&&t.asyncFactory===e.asyncFactory&&o(e.asyncFactory.error))}function ge(t,e,r){var o,i,a={};for(o=e;o<=r;++o)n(i=t[o].key)&&(a[i]=o);return a}function he(t,e){(t.data.directives||e.data.directives)&&function(t,e){var r,o,n,i=t===fi,a=be(t.data.directives,t.context),l=be(e.data.directives,e.context),s=[],d=[];for(r in l)o=a[r],n=l[r],o?(n.oldValue=o.value,n.oldArg=o.arg,xe(n,"update",e,t),n.def&&n.def.componentUpdated&&d.push(n)):(xe(n,"bind",e,t),n.def&&n.def.inserted&&s.push(n));if(s.length){var c=function(){for(var r=0;rr)return'_f("'+e+'")('+t+")";var o=e.slice(0,r),n=e.slice(r+1);return'_f("'+o+'")('+t+(")"===n?n:","+n)}function Te(t){console.error("[Vue compiler]: "+t)}function Se(t,e){return t?t.map((function(t){return t[e]})).filter((function(t){return t})):[]}function Ae(t,e,r,o,n){(t.props||(t.props=[])).push(Me({name:e,value:r,dynamic:n},o)),t.plain=!1}function Oe(t,e,r,o,n){(n?t.dynamicAttrs||(t.dynamicAttrs=[]):t.attrs||(t.attrs=[])).push(Me({name:e,value:r,dynamic:n},o)),t.plain=!1}function je(t,e,r,o){t.attrsMap[e]=r,t.attrsList.push(Me({name:e,value:r},o))}function $e(t,e,r,o,n,i,a,l){(t.directives||(t.directives=[])).push(Me({name:e,rawName:r,value:o,arg:n,isDynamicArg:i,modifiers:a},l)),t.plain=!1}function Ne(t,e,r){return r?"_p("+e+',"'+t+'")':t+e}function De(t,e,r,o,n,i,a,l){var s;(o=o||so).right?l?e="("+e+")==='click'?'contextmenu':("+e+")":"click"===e&&(e="contextmenu",delete o.right):o.middle&&(l?e="("+e+")==='click'?'mouseup':("+e+")":"click"===e&&(e="mouseup")),o.capture&&(delete o.capture,e=Ne("!",e,l)),o.once&&(delete o.once,e=Ne("~",e,l)),o.passive&&(delete o.passive,e=Ne("&",e,l)),o.native?(delete o.native,s=t.nativeEvents||(t.nativeEvents={})):s=t.events||(t.events={});var d=Me({value:r.trim(),dynamic:l},a);o!==so&&(d.modifiers=o);var c=s[e];Array.isArray(c)?n?c.unshift(d):c.push(d):s[e]=c?n?[d,c]:[c,d]:d,t.plain=!1}function Ie(t,e,r){var o=ze(t,":"+e)||ze(t,"v-bind:"+e);if(null!=o)return Ce(o);if(!1!==r){var n=ze(t,e);if(null!=n)return JSON.stringify(n)}}function ze(t,e,r){var o;if(null!=(o=t.attrsMap[e]))for(var n=t.attrsList,i=0,a=n.length;it.indexOf("[")||t.lastIndexOf("]")=Fn}function Be(t){return 34===t||39===t}function Ue(t){var e=1;for(qn=Un;!He();)if(Be(t=Fe()))qe(t);else if(91===t&&e++,93===t&&e--,0==e){Qn=Un;break}}function qe(t){for(var e=t;!He()&&(t=Fe())!==e;);}function Qe(t){if(n(t[bi])){var e=Do?"change":"input";t[e]=[].concat(t[bi],t[e]||[]),delete t[bi]}n(t[vi])&&(t.change=[].concat(t[vi],t.change||[]),delete t[vi])}function Ve(t,e,r){var o=Vn;return function n(){var i=e.apply(null,arguments);null!==i&&Ke(t,n,r,o)}}function We(t,e,r,o){if(xi){var n=jn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=n||0>=t.timeStamp||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Vn.addEventListener(t,e,Ro?{capture:r,passive:o}:r)}function Ke(t,e,r,o){(o||Vn).removeEventListener(t,e._wrapper||e,r)}function Xe(t,e){if(!o(t.data.on)||!o(e.data.on)){var r=e.data.on||{},n=t.data.on||{};Vn=e.elm,Qe(r),et(r,n,We,Ke,Ve,e.context),Vn=void 0}}function Je(t,e){if(!o(t.data.domProps)||!o(e.data.domProps)){var r,i,a=e.elm,l=t.data.domProps||{},s=e.data.domProps||{};for(r in n(s.__ob__)&&(s=e.data.domProps=v({},s)),l)r in s||(a[r]="");for(r in s){if(i=s[r],"textContent"===r||"innerHTML"===r){if(e.children&&(e.children.length=0),i===l[r])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===r&&"PROGRESS"!==a.tagName){a._value=i;var d=o(i)?"":i+"";Ye(a,d)&&(a.value=d)}else if("innerHTML"===r&&si(a.tagName)&&o(a.innerHTML)){(Wn=Wn||document.createElement("div")).innerHTML=""+i+"";for(var c=Wn.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;c.firstChild;)a.appendChild(c.firstChild)}else if(i!==l[r])try{a[r]=i}catch(e){}}}}function Ye(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var r=!0;try{r=document.activeElement!==t}catch(e){}return r&&t.value!==e}(t,e)||function(t,e){var r=t.value,o=t._vModifiers;if(n(o)){if(o.number)return p(r)!==p(e);if(o.trim)return r.trim()!==e.trim()}return r!==e}(t,e))}function Ge(t){var e=Ze(t.style);return t.staticStyle?v(t.staticStyle,e):e}function Ze(t){return Array.isArray(t)?x(t):"string"==typeof t?yi(t):t}function tr(t,e){var r=e.data,i=t.data;if(!(o(r.staticStyle)&&o(r.style)&&o(i.staticStyle)&&o(i.style))){var a,l,s=e.elm,d=i.staticStyle,c=i.normalizedStyle||i.style||{},m=d||c,p=Ze(e.data.style)||{};e.data.normalizedStyle=n(p.__ob__)?v({},p):p;var f=function(t,e){var r,o={};if(e)for(var n=t;n.componentInstance;)(n=n.componentInstance._vnode)&&n.data&&(r=Ge(n.data))&&v(o,r);(r=Ge(t.data))&&v(o,r);for(var i=t;i=i.parent;)i.data&&(r=Ge(i.data))&&v(o,r);return o}(e,!0);for(l in m)o(f[l])&&ki(s,l,"");for(l in f)(a=f[l])!==m[l]&&ki(s,l,null==a?"":a)}}function er(t,e){if(e&&(e=e.trim()))if(t.classList)-1r.indexOf(" "+e+" ")&&t.setAttribute("class",(r+e).trim())}}function rr(t,e){if(e&&(e=e.trim()))if(t.classList)-1r.indexOf(e)&&(r.push(e),er(t,e))}function ar(t,e){t._transitionClasses&&u(t._transitionClasses,e),rr(t,e)}function lr(t,e,r){var o=sr(t,e),n=o.type,i=o.timeout,a=o.propCount;if(!n)return r();var l=n===Oi?Ni:Ii,s=0,d=function(){t.removeEventListener(l,c),r()},c=function(e){e.target===t&&++s>=a&&d()};setTimeout((function(){sd?Oi:ji:null)?r===Oi?i.length:s.length:0,{type:r,timeout:c,propCount:m,hasTransform:r===Oi&&Li.test(o[$i+"Property"])}}function dr(t,e){for(;t.length=n;a--)e.end&&e.end(s[a].tag,r,o);s.length=n,l=n&&s[n-1].tag}else"br"===i?e.start&&e.start(t,[],!0,r,o):"p"===i&&(e.start&&e.start(t,[],!1,r,o),e.end&&e.end(t,r,o))}for(var a,l,s=[],d=e.expectHTML,c=e.isUnaryTag||yo,m=e.canBeLeftOpenTag||yo,p=0;t;){if(a=t,l&&ba(l)){var f=0,u=l.toLowerCase(),g=va[u]||(va[u]=new RegExp("([\\s\\S]*?)(]*>)","i")),h=t.replace(g,(function(t,r,o){return f=o.length,ba(u)||"noscript"===u||(r=r.replace(//g,"$1").replace(//g,"$1")),ka(u,r)&&(r=r.slice(1)),e.chars&&e.chars(r),""}));p+=t.length-h.length,t=h,i(u,p-f,p)}else{var b=t.indexOf("<");if(0===b){if(ga.test(t)){var v=t.indexOf("--\x3e");if(0<=v){e.shouldKeepComment&&e.comment(t.substring(4,v),p,p+v+3),r(v+3);continue}}if(ha.test(t)){var x=t.indexOf("]>");if(0<=x){r(x+2);continue}}var y=t.match(ua);if(y){r(y[0].length);continue}var w=t.match(fa);if(w){var _=p;r(w[0].length),i(w[1],_,p);continue}var k=o();if(k){n(k),ka(k.tagName,t)&&r(1);continue}}var C=void 0,E=void 0,T=void 0;if(0<=b){for(E=t.slice(b);!(fa.test(E)||ma.test(E)||ga.test(E)||ha.test(E)||(T=E.indexOf("<",1),0>T));)b+=T,E=t.slice(b);C=t.substring(0,b)}0>b&&(C=t),C&&r(C.length),e.chars&&C&&e.chars(C,p-C.length,p)}if(t===a){e.chars&&e.chars(t);break}}i()}(t,{warn:qi,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,outputSourceRange:e.outputSourceRange,start:function(t,o,n){var s=a&&a.ns||Yi(t);Do&&"svg"===s&&(o=function(t){for(var e,r=[],o=0;os&&(l.push(i=t.slice(s,n)),a.push(JSON.stringify(i)));var d=Ce(o[1].trim());a.push("_s("+d+")"),l.push({"@binding":d}),s=n+o[0].length}return s>>0}(a):"")+")"}(t,t.scopedSlots,e)+","),t.model&&(r+="model:{value:"+t.model.value+",callback:"+t.model.callback+",expression:"+t.model.expression+"},"),t.inlineTemplate){var i=function(t,e){var r=t.children[0];if(r&&1===r.type){var o=qr(r,e.options);return"inlineTemplate:{render:function(){"+o.render+"},staticRenderFns:["+o.staticRenderFns.map((function(t){return"function(){"+t+"}"})).join(",")+"]}"}}(t,e);i&&(r+=i+",")}return r=r.replace(/,$/,"")+"}",t.dynamicAttrs&&(r="_b("+r+',"'+t.tag+'",'+ro(t.dynamicAttrs)+")"),t.wrapData&&(r=t.wrapData(r)),t.wrapListeners&&(r=t.wrapListeners(r)),r}function Yr(t){return!(1!==t.type)&&("slot"===t.tag||t.children.some(Yr))}function Gr(t,e){var r=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!r)return Kr(t,e,Gr,"null");if(t.for&&!t.forProcessed)return Xr(t,e,Gr);var o=t.slotScope===Ma?"":t.slotScope+"",n="function("+o+"){return "+("template"===t.tag?t.if&&r?"("+t.if+")?"+(Zr(t,e)||"undefined")+":undefined":Zr(t,e)||"undefined":Qr(t,e))+"}",i=o?"":",proxy:true";return"{key:"+(t.slotTarget||'"default"')+",fn:"+n+i+"}"}function Zr(t,e,r,o,n){var i=t.children;if(i.length){var a=i[0];if(1===i.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var l=r?e.maybeComponent(a)?",1":",0":"";return""+(o||Qr)(a,e)+l}var s=r?function(t,e){for(var r,o=0,n=0;n':'
',0 ")),T.type){case"self-declined":e.onDeclined&&e.onDeclined(T),e.ignoreDeclined||(S=new Error("Aborted because of self decline: "+T.moduleId+j));break;case"declined":e.onDeclined&&e.onDeclined(T),e.ignoreDeclined||(S=new Error("Aborted because of declined dependency: "+T.moduleId+" in "+T.parentId+j));break;case"unaccepted":e.onUnaccepted&&e.onUnaccepted(T),e.ignoreUnaccepted||(S=new Error("Aborted because "+f+" is not accepted"+j));break;case"accepted":e.onAccepted&&e.onAccepted(T),A=!0;break;case"disposed":e.onDisposed&&e.onDisposed(T),O=!0;break;default:throw new Error("Unexception type "+T.type)}if(S)return o("abort"),Promise.reject(S);if(A)for(f in w[f]=h[f],i(x,T.outdatedModules),T.outdatedDependencies)Object.prototype.hasOwnProperty.call(T.outdatedDependencies,f)&&(g[f]||(g[f]=[]),i(g[f],T.outdatedDependencies[f]));O&&(i(x,[T.moduleId]),w[f]=C)}var D,I,z=[];for(l=0;lt.indexOf(e)&&t.push(e)})),t})):(o("idle"),new Promise((function(t){t(x)})))}function c(){if(v)return h||(h={}),v.forEach(m),v=void 0,!0}function m(e){Object.prototype.hasOwnProperty.call(h,e)||(h[e]=t[e])}function p(o){if(N[o])return N[o].exports;var n=N[o]={i:o,l:!1,exports:{},hot:r(o),parents:(C=k,k=[],C),children:[]};return t[o].call(n.exports,n,n.exports,e(o)),n.l=!0,n.exports}var f=window.webpackHotUpdate;window.webpackHotUpdate=function(t,e){(function(t,e){if($[t]&&j[t]){for(var r in j[t]=!1,e)Object.prototype.hasOwnProperty.call(e,r)&&(h[r]=e[r]);0==--S&&0===A&&l()}})(t,e),f&&f(t,e)};var u,g,h,b,v,x=!0,y="75896d36f8b1a59d4de0",w=1e4,_={},k=[],C=[],E=[],T="idle",S=0,A=0,O={},j={},$={},N={};return p.m=t,p.c=N,p.d=function(t,e,r){p.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},p.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},p.t=function(t,e){if(1&e&&(t=p(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(p.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)p.d(r,o,function(e){return t[e]}.bind(null,o));return r},p.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return p.d(e,"a",e),e},p.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},p.p="",p.h=function(){return y},e(30)(p.s=30)}([function(t){function e(t,e){var r=t[1]||"",o=t[3];if(!o)return r;if(e&&"function"==typeof btoa){var n=function(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}(o),i=o.sources.map((function(t){return"/*# sourceURL="+o.sourceRoot+t+" */"}));return[r].concat(i).concat([n]).join("\n")}return[r].join("\n")}t.exports=function(t){var r=[];return r.toString=function(){return this.map((function(r){var o=e(r,t);return r[2]?"@media "+r[2]+"{"+o+"}":o})).join("")},r.i=function(t,e){"string"==typeof t&&(t=[[null,t,""]]);for(var o,n={},i=0;ir.parts.length&&(o.parts.length=r.parts.length)}else{var i=[];for(n=0;ncode{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder,.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right .75rem center/8px 10px,url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E\") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right .75rem center/8px 10px,url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E\") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-ms-flexbox;display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem hsla(208,6%,54%,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(208,6%,54%,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success.focus,.btn-success:focus,.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info.focus,.btn-info:focus,.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light.focus,.btn-light:focus,.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem hsla(220,4%,85%,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(220,4%,85%,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:\"\"}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:\"Browse\"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);font-weight:400;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:\"Browse\";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb,.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:-ms-flexbox;display:flex;overflow:hidden}.progress-bar{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:\"\"}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E\")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:\"\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.857143%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:\"\";background-color:transparent}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}",""])},function(t,e,r){!function(t,e,r){"use strict";function o(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}function n(t,e){for(var r,o=0;o=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};f.jQueryDetection(),c.default.fn.emulateTransitionEnd=s,c.default.event.special[f.TRANSITION_END]={bindType:p,delegateType:p,handle:function(t){return c.default(t.target).is(this)?t.handleObj.handler.apply(this,arguments):void 0}};var u="alert",g="bs.alert",h="."+g,b=c.default.fn[u],v=function(){function t(t){this._element=t}var e=t.prototype;return e.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.dispose=function(){c.default.removeData(this._element,g),this._element=null},e._getRootElement=function(t){var e=f.getSelectorFromElement(t),r=!1;return e&&(r=document.querySelector(e)),r||(r=c.default(t).closest(".alert")[0]),r},e._triggerCloseEvent=function(t){var e=c.default.Event("close"+h);return c.default(t).trigger(e),e},e._removeElement=function(t){var e=this;if(c.default(t).removeClass("show"),c.default(t).hasClass("fade")){var r=f.getTransitionDurationFromElement(t);c.default(t).one(f.TRANSITION_END,(function(r){return e._destroyElement(t,r)})).emulateTransitionEnd(r)}else this._destroyElement(t)},e._destroyElement=function(t){c.default(t).detach().trigger("closed"+h).remove()},t._jQueryInterface=function(e){return this.each((function(){var r=c.default(this),o=r.data(g);o||(o=new t(this),r.data(g,o)),"close"===e&&o[e](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},i(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();c.default(document).on("click"+h+".data-api",'[data-dismiss="alert"]',v._handleDismiss(new v)),c.default.fn[u]=v._jQueryInterface,c.default.fn[u].Constructor=v,c.default.fn[u].noConflict=function(){return c.default.fn[u]=b,v._jQueryInterface};var x="button",y="bs.button",w="."+y,_=".data-api",k=c.default.fn[x],C="active",E='[data-toggle^="button"]',T='input:not([type="hidden"])',S=".btn",A=function(){function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,r=c.default(this._element).closest('[data-toggle="buttons"]')[0];if(r){var o=this._element.querySelector(T);if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains(C))t=!1;else{var n=r.querySelector(".active");n&&c.default(n).removeClass(C)}t&&(("checkbox"===o.type||"radio"===o.type)&&(o.checked=!this._element.classList.contains(C)),!this.shouldAvoidTriggerChange&&c.default(o).trigger("change")),o.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(C)),t&&c.default(this._element).toggleClass(C))},e.dispose=function(){c.default.removeData(this._element,y),this._element=null},t._jQueryInterface=function(e,r){return this.each((function(){var o=c.default(this),n=o.data(y);n||(n=new t(this),o.data(y,n)),n.shouldAvoidTriggerChange=r,"toggle"===e&&n[e]()}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();c.default(document).on("click"+w+_,E,(function(t){var e=t.target,r=e;if(c.default(e).hasClass("btn")||(e=c.default(e).closest(S)[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var o=e.querySelector(T);if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();("INPUT"===r.tagName||"LABEL"!==e.tagName)&&A._jQueryInterface.call(c.default(e),"toggle","INPUT"===r.tagName)}})).on("focus"+w+_+" blur"+w+_,E,(function(t){var e=c.default(t.target).closest(S)[0];c.default(e).toggleClass("focus",/^focus(in)?$/.test(t.type))})),c.default(window).on("load"+w+_,(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,r=t.length;ethis._items.length-1||0>t)){if(this._isSliding)return void c.default(this._element).one(P,(function(){return e.to(t)}));if(r===t)return this.pause(),void this.cycle();var o=t>r?L:M;this._slide(o,this._items[t])}},e.dispose=function(){c.default(this._element).off($),c.default.removeData(this._element,j),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(t){return t=a({},I,t),f.typeCheckConfig(O,t,z),t},e._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,0e&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&c.default(this._element).on("keydown"+$,(function(e){return t._keydown(e)})),"hover"===this._config.pause&&c.default(this._element).on("mouseenter"+$,(function(e){return t.pause(e)})).on("mouseleave"+$,(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var e=function(e){t._pointerEvent&&H[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:!t._pointerEvent&&(t.touchStartX=e.originalEvent.touches[0].clientX)},r=function(e){t.touchDeltaX=e.originalEvent.touches&&1i&&(i=0),n[i].focus()}}}},i(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return ht}},{key:"DefaultType",get:function(){return bt}}]),t}();c.default(document).on(ct,ut,vt._dataApiKeydownHandler).on(ct,gt,vt._dataApiKeydownHandler).on(dt+" keyup"+ot+nt,vt._clearMenus).on(dt,ut,(function(t){t.preventDefault(),t.stopPropagation(),vt._jQueryInterface.call(c.default(this),"toggle")})).on(dt,".dropdown form",(function(t){t.stopPropagation()})),c.default.fn[et]=vt._jQueryInterface,c.default.fn[et].Constructor=vt,c.default.fn[et].noConflict=function(){return c.default.fn[et]=it,vt._jQueryInterface};var xt="modal",yt="bs.modal",wt="."+yt,_t=c.default.fn[xt],kt={backdrop:!0,keyboard:!0,focus:!0,show:!0},Ct={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},Et="hidden"+wt,Tt="show"+wt,St="focusin"+wt,At="resize"+wt,Ot="click.dismiss"+wt,jt="keydown.dismiss"+wt,$t="mousedown.dismiss"+wt,Nt="modal-open",Dt="fade",It="show",zt="modal-static",Lt=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Mt=".sticky-top",Pt=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var e=t.prototype;return e.toggle=function(t){return this._isShown?this.hide():this.show(t)},e.show=function(t){var e=this;if(!this._isShown&&!this._isTransitioning){c.default(this._element).hasClass(Dt)&&(this._isTransitioning=!0);var r=c.default.Event(Tt,{relatedTarget:t});c.default(this._element).trigger(r),this._isShown||r.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),c.default(this._element).on(Ot,'[data-dismiss="modal"]',(function(t){return e.hide(t)})),c.default(this._dialog).on($t,(function(){c.default(e._element).one("mouseup.dismiss"+wt,(function(t){c.default(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return e._showElement(t)})))}},e.hide=function(t){var e=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var r=c.default.Event("hide"+wt);if(c.default(this._element).trigger(r),this._isShown&&!r.isDefaultPrevented()){this._isShown=!1;var o=c.default(this._element).hasClass(Dt);if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),c.default(document).off(St),c.default(this._element).removeClass(It),c.default(this._element).off(Ot),c.default(this._dialog).off($t),o){var n=f.getTransitionDurationFromElement(this._element);c.default(this._element).one(f.TRANSITION_END,(function(t){return e._hideModal(t)})).emulateTransitionEnd(n)}else this._hideModal()}}},e.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return c.default(t).off(wt)})),c.default(document).off(St),c.default.removeData(this._element,yt),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},e.handleUpdate=function(){this._adjustDialog()},e._getConfig=function(t){return t=a({},kt,t),f.typeCheckConfig(xt,t,Ct),t},e._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var e=c.default.Event("hidePrevented"+wt);if(c.default(this._element).trigger(e),e.isDefaultPrevented())return;var r=this._element.scrollHeight>document.documentElement.clientHeight;r||(this._element.style.overflowY="hidden"),this._element.classList.add(zt);var o=f.getTransitionDurationFromElement(this._dialog);c.default(this._element).off(f.TRANSITION_END),c.default(this._element).one(f.TRANSITION_END,(function(){t._element.classList.remove(zt),r||c.default(t._element).one(f.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,o)})).emulateTransitionEnd(o),this._element.focus()}else this.hide()},e._showElement=function(t){var e=this,r=c.default(this._element).hasClass(Dt),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),c.default(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,r&&f.reflow(this._element),c.default(this._element).addClass(It),this._config.focus&&this._enforceFocus();var n=c.default.Event("shown"+wt,{relatedTarget:t}),i=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,c.default(e._element).trigger(n)};if(r){var a=f.getTransitionDurationFromElement(this._dialog);c.default(this._dialog).one(f.TRANSITION_END,i).emulateTransitionEnd(a)}else i()},e._enforceFocus=function(){var t=this;c.default(document).off(St).on(St,(function(e){document!==e.target&&t._element!==e.target&&0===c.default(t._element).has(e.target).length&&t._element.focus()}))},e._setEscapeEvent=function(){var t=this;this._isShown?c.default(this._element).on(jt,(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):!t._config.keyboard&&27===e.which&&t._triggerBackdropTransition()})):!this._isShown&&c.default(this._element).off(jt)},e._setResizeEvent=function(){var t=this;this._isShown?c.default(window).on(At,(function(e){return t.handleUpdate(e)})):c.default(window).off(At)},e._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){c.default(document.body).removeClass(Nt),t._resetAdjustments(),t._resetScrollbar(),c.default(t._element).trigger(Et)}))},e._removeBackdrop=function(){this._backdrop&&(c.default(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,r=c.default(this._element).hasClass(Dt)?Dt:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",r&&this._backdrop.classList.add(r),c.default(this._backdrop).appendTo(document.body),c.default(this._element).on(Ot,(function(t){return e._ignoreBackdropClick?void(e._ignoreBackdropClick=!1):void(t.target!==t.currentTarget||e._triggerBackdropTransition())})),r&&f.reflow(this._backdrop),c.default(this._backdrop).addClass(It),!t)return;if(!r)return void t();var o=f.getTransitionDurationFromElement(this._backdrop);c.default(this._backdrop).one(f.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){c.default(this._backdrop).removeClass(It);var n=function(){e._removeBackdrop(),t&&t()};if(c.default(this._element).hasClass(Dt)){var i=f.getTransitionDurationFromElement(this._backdrop);c.default(this._backdrop).one(f.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}else t&&t()},e._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},Yt="show",Gt={HIDE:"hide"+qt,HIDDEN:"hidden"+qt,SHOW:"show"+qt,SHOWN:"shown"+qt,INSERTED:"inserted"+qt,CLICK:"click"+qt,FOCUSIN:"focusin"+qt,FOCUSOUT:"focusout"+qt,MOUSEENTER:"mouseenter"+qt,MOUSELEAVE:"mouseleave"+qt},Zt="fade",te="show",ee="hover",re="focus",oe=function(){function t(t,e){if(void 0===m.default)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,r=c.default(t.currentTarget).data(e);r||(r=new this.constructor(t.currentTarget,this._getDelegateConfig()),c.default(t.currentTarget).data(e,r)),r._activeTrigger.click=!r._activeTrigger.click,r._isWithActiveTrigger()?r._enter(null,r):r._leave(null,r)}else{if(c.default(this.getTipElement()).hasClass(te))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),c.default.removeData(this.element,this.constructor.DATA_KEY),c.default(this.element).off(this.constructor.EVENT_KEY),c.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&c.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===c.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=c.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){c.default(this.element).trigger(e);var r=f.findShadowRoot(this.element),o=c.default.contains(null===r?this.element.ownerDocument.documentElement:r,this.element);if(e.isDefaultPrevented()||!o)return;var n=this.getTipElement(),i=f.getUID(this.constructor.NAME);n.setAttribute("id",i),this.element.setAttribute("aria-describedby",i),this.setContent(),this.config.animation&&c.default(n).addClass(Zt);var a="function"==typeof this.config.placement?this.config.placement.call(this,n,this.element):this.config.placement,l=this._getAttachment(a);this.addAttachmentClass(l);var s=this._getContainer();c.default(n).data(this.constructor.DATA_KEY,this),c.default.contains(this.element.ownerDocument.documentElement,this.tip)||c.default(n).appendTo(s),c.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new m.default(this.element,n,this._getPopperConfig(l)),c.default(n).addClass(te),"ontouchstart"in document.documentElement&&c.default(document.body).children().on("mouseover",null,c.default.noop);var d=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,c.default(t.element).trigger(t.constructor.Event.SHOWN),"out"===e&&t._leave(null,t)};if(c.default(this.tip).hasClass(Zt)){var p=f.getTransitionDurationFromElement(this.tip);c.default(this.tip).one(f.TRANSITION_END,d).emulateTransitionEnd(p)}else d()}},e.hide=function(t){var e=this,r=this.getTipElement(),o=c.default.Event(this.constructor.Event.HIDE),n=function(){e._hoverState!==Yt&&r.parentNode&&r.parentNode.removeChild(r),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),c.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(c.default(this.element).trigger(o),!o.isDefaultPrevented()){if(c.default(r).removeClass(te),"ontouchstart"in document.documentElement&&c.default(document.body).children().off("mouseover",null,c.default.noop),this._activeTrigger.click=!1,this._activeTrigger[re]=!1,this._activeTrigger[ee]=!1,c.default(this.tip).hasClass(Zt)){var i=f.getTransitionDurationFromElement(r);c.default(r).one(f.TRANSITION_END,n).emulateTransitionEnd(i)}else n();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return!!this.getTitle()},e.addAttachmentClass=function(t){c.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||c.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(c.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),c.default(t).removeClass(Zt+" "+te)},e.setElementContent=function(t,e){return"object"==typeof e&&(e.nodeType||e.jquery)?void(this.config.html?!c.default(e).parent().is(t)&&t.empty().append(e):t.text(c.default(e).text())):void(this.config.html?(this.config.sanitize&&(e=d(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e))},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return a({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=a({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:f.isElement(this.config.container)?c.default(this.config.container):c.default(document).find(this.config.container)},e._getAttachment=function(t){return Xt[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)c.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var r=e===ee?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o=e===ee?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;c.default(t.element).on(r,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},c.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=a({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!=t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var r=this.constructor.DATA_KEY;return(e=e||c.default(t.currentTarget).data(r))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),c.default(t.currentTarget).data(r,e)),t&&(e._activeTrigger["focusin"===t.type?re:ee]=!0),c.default(e.getTipElement()).hasClass(te)||e._hoverState===Yt?void(e._hoverState=Yt):(clearTimeout(e._timeout),e._hoverState=Yt,e.config.delay&&e.config.delay.show?void(e._timeout=setTimeout((function(){e._hoverState===Yt&&e.show()}),e.config.delay.show)):void e.show())},e._leave=function(t,e){var r=this.constructor.DATA_KEY;if((e=e||c.default(t.currentTarget).data(r))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),c.default(t.currentTarget).data(r,e)),t&&(e._activeTrigger["focusout"===t.type?re:ee]=!1),!e._isWithActiveTrigger())return clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?void(e._timeout=setTimeout((function(){"out"===e._hoverState&&e.hide()}),e.config.delay.hide)):void e.hide()},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=c.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==Wt.indexOf(t)&&delete e[t]})),"number"==typeof(t=a({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),f.typeCheckConfig(Bt,t,this.constructor.DefaultType),t.sanitize&&(t.template=d(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=c.default(this.getTipElement()),e=t.attr("class").match(Vt);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null!==t.getAttribute("x-placement")||(c.default(t).removeClass(Zt),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var r=c.default(this),o=r.data(Ut);if((o||!/dispose|hide/.test(e))&&(o||(o=new t(this,"object"==typeof e&&e),r.data(Ut,o)),"string"==typeof e)){if(void 0===o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return Jt}},{key:"NAME",get:function(){return Bt}},{key:"DATA_KEY",get:function(){return Ut}},{key:"Event",get:function(){return Gt}},{key:"EVENT_KEY",get:function(){return qt}},{key:"DefaultType",get:function(){return Kt}}]),t}();c.default.fn[Bt]=oe._jQueryInterface,c.default.fn[Bt].Constructor=oe,c.default.fn[Bt].noConflict=function(){return c.default.fn[Bt]=Qt,oe._jQueryInterface};var ne="popover",ie="bs.popover",ae="."+ie,le=c.default.fn[ne],se=/(^|\s)bs-popover\S+/g,de=a({},oe.Default,{placement:"right",trigger:"click",content:"",template:''}),ce=a({},oe.DefaultType,{content:"(string|element|function)"}),me={HIDE:"hide"+ae,HIDDEN:"hidden"+ae,SHOW:"show"+ae,SHOWN:"shown"+ae,INSERTED:"inserted"+ae,CLICK:"click"+ae,FOCUSIN:"focusin"+ae,FOCUSOUT:"focusout"+ae,MOUSEENTER:"mouseenter"+ae,MOUSELEAVE:"mouseleave"+ae},pe=function(t){function e(){return t.apply(this,arguments)||this}!function(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}(e,t);var r=e.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){c.default(this.getTipElement()).addClass("bs-popover-"+t)},r.getTipElement=function(){return this.tip=this.tip||c.default(this.config.template)[0],this.tip},r.setContent=function(){var t=c.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=c.default(this.getTipElement()),e=t.attr("class").match(se);null!==e&&0=r){var o=this._targets[this._targets.length-1];this._activeTarget!==o&&this._activate(o)}else{if(this._activeTarget&&t=this._offsets[n]&&(void 0===this._offsets[n+1]||t li > .active",$e=function(){function t(t){this._element=t}var e=t.prototype;return e.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&c.default(this._element).hasClass(Ae)||c.default(this._element).hasClass("disabled"))){var e,r,o=c.default(this._element).closest(".nav, .list-group")[0],n=f.getSelectorFromElement(this._element);if(o){var i="UL"===o.nodeName||"OL"===o.nodeName?je:Oe;r=(r=c.default.makeArray(c.default(o).find(i)))[r.length-1]}var a=c.default.Event("hide"+Te,{relatedTarget:this._element}),l=c.default.Event("show"+Te,{relatedTarget:r});if(r&&c.default(r).trigger(a),c.default(this._element).trigger(l),!l.isDefaultPrevented()&&!a.isDefaultPrevented()){n&&(e=document.querySelector(n)),this._activate(this._element,o);var s=function(){var e=c.default.Event("hidden"+Te,{relatedTarget:t._element}),o=c.default.Event("shown"+Te,{relatedTarget:r});c.default(r).trigger(e),c.default(t._element).trigger(o)};e?this._activate(e,e.parentNode,s):s()}}},e.dispose=function(){c.default.removeData(this._element,Ee),this._element=null},e._activate=function(t,e,r){var o=this,n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?c.default(e).children(Oe):c.default(e).find(je))[0],i=r&&n&&c.default(n).hasClass("fade"),a=function(){return o._transitionComplete(t,n,r)};if(n&&i){var l=f.getTransitionDurationFromElement(n);c.default(n).removeClass("show").one(f.TRANSITION_END,a).emulateTransitionEnd(l)}else a()},e._transitionComplete=function(t,e,r){if(e){c.default(e).removeClass(Ae);var o=c.default(e.parentNode).find("> .dropdown-menu .active")[0];o&&c.default(o).removeClass(Ae),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(c.default(t).addClass(Ae),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),f.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&c.default(t.parentNode).hasClass("dropdown-menu")){var n=c.default(t).closest(".dropdown")[0];if(n){var i=[].slice.call(n.querySelectorAll(".dropdown-toggle"));c.default(i).addClass(Ae)}t.setAttribute("aria-expanded",!0)}r&&r()},t._jQueryInterface=function(e){return this.each((function(){var r=c.default(this),o=r.data(Ee);if(o||(o=new t(this),r.data(Ee,o)),"string"==typeof e){if(void 0===o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();c.default(document).on("click"+Te+".data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),$e._jQueryInterface.call(c.default(this),"show")})),c.default.fn.tab=$e._jQueryInterface,c.default.fn.tab.Constructor=$e,c.default.fn.tab.noConflict=function(){return c.default.fn.tab=Se,$e._jQueryInterface};var Ne="toast",De="bs.toast",Ie="."+De,ze=c.default.fn[Ne],Le="click.dismiss"+Ie,Me="show",Pe="showing",Re={animation:"boolean",autohide:"boolean",delay:"number"},Fe={animation:!0,autohide:!0,delay:500},He=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=c.default.Event("show"+Ie);if(c.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var r=function(){t._element.classList.remove(Pe),t._element.classList.add(Me),c.default(t._element).trigger("shown"+Ie),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),f.reflow(this._element),this._element.classList.add(Pe),this._config.animation){var o=f.getTransitionDurationFromElement(this._element);c.default(this._element).one(f.TRANSITION_END,r).emulateTransitionEnd(o)}else r()}},e.hide=function(){if(this._element.classList.contains(Me)){var t=c.default.Event("hide"+Ie);c.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains(Me)&&this._element.classList.remove(Me),c.default(this._element).off(Le),c.default.removeData(this._element,De),this._element=null,this._config=null},e._getConfig=function(t){return t=a({},Fe,c.default(this._element).data(),"object"==typeof t&&t?t:{}),f.typeCheckConfig(Ne,t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;c.default(this._element).on(Le,'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),c.default(t._element).trigger("hidden"+Ie)};if(this._element.classList.remove(Me),this._config.animation){var r=f.getTransitionDurationFromElement(this._element);c.default(this._element).one(f.TRANSITION_END,e).emulateTransitionEnd(r)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var r=c.default(this),o=r.data(De);if(o||(o=new t(this,"object"==typeof e&&e),r.data(De,o)),"string"==typeof e){if(void 0===o[e])throw new TypeError('No method named "'+e+'"');o[e](this)}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"DefaultType",get:function(){return Re}},{key:"Default",get:function(){return Fe}}]),t}();c.default.fn[Ne]=He._jQueryInterface,c.default.fn[Ne].Constructor=He,c.default.fn[Ne].noConflict=function(){return c.default.fn[Ne]=ze,He._jQueryInterface},t.Alert=v,t.Button=A,t.Carousel=B,t.Collapse=tt,t.Dropdown=vt,t.Modal=Pt,t.Popover=pe,t.Scrollspy=Ce,t.Tab=$e,t.Toast=He,t.Tooltip=oe,t.Util=f,Object.defineProperty(t,"__esModule",{value:!0})}(e,r(9),r(26))},function(t){t.exports=require("popper.js")},function(t,e,r){var o=r(28);"string"==typeof o&&(o=[[t.i,o,""]]),o.locals&&(t.exports=o.locals);(0,r(1).default)("40a81fda",o,!0,{})},function(t,e,r){(t.exports=r(0)(!1)).push([t.i,'.xterm{font-feature-settings:"liga" 0;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm{cursor:text}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility,.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:.5}.xterm-underline{text-decoration:underline}',""])},function(t){t.exports=require("vue-electron")},function(t,e,r){"use strict";function o(t){return null==t}function n(t){return null!=t}function i(t){return!0===t}function a(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function l(t){return null!==t&&"object"==typeof t}function s(t){return"[object Object]"===co.call(t)}function d(t){var e=parseFloat(t+"");return 0<=e&&Math.floor(e)===e&&isFinite(t)}function c(t){return n(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||s(t)&&t.toString===co?JSON.stringify(t,null,2):t+""}function p(t){var e=parseFloat(t);return isNaN(e)?t:e}function f(t,e){for(var r=Object.create(null),o=t.split(","),n=0;ns||la[r].indexOf(i)&&a[r].push(i):a[r]=[i]:a[r]=i}}function ue(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.isComment&&n(t.data)===n(e.data)&&function(t,e){if("input"!==t.tag)return!0;var r,o=n(r=t.data)&&n(r=r.attrs)&&r.type,i=n(r=e.data)&&n(r=r.attrs)&&r.type;return o===i||mi(o)&&mi(i)}(t,e)||i(t.isAsyncPlaceholder)&&t.asyncFactory===e.asyncFactory&&o(e.asyncFactory.error))}function ge(t,e,r){var o,i,a={};for(o=e;o<=r;++o)n(i=t[o].key)&&(a[i]=o);return a}function he(t,e){(t.data.directives||e.data.directives)&&function(t,e){var r,o,n,i=t===fi,a=be(t.data.directives,t.context),l=be(e.data.directives,e.context),s=[],d=[];for(r in l)o=a[r],n=l[r],o?(n.oldValue=o.value,n.oldArg=o.arg,xe(n,"update",e,t),n.def&&n.def.componentUpdated&&d.push(n)):(xe(n,"bind",e,t),n.def&&n.def.inserted&&s.push(n));if(s.length){var c=function(){for(var r=0;rr)return'_f("'+e+'")('+t+")";var o=e.slice(0,r),n=e.slice(r+1);return'_f("'+o+'")('+t+(")"===n?n:","+n)}function Te(t){console.error("[Vue compiler]: "+t)}function Se(t,e){return t?t.map((function(t){return t[e]})).filter((function(t){return t})):[]}function Ae(t,e,r,o,n){(t.props||(t.props=[])).push(Me({name:e,value:r,dynamic:n},o)),t.plain=!1}function Oe(t,e,r,o,n){(n?t.dynamicAttrs||(t.dynamicAttrs=[]):t.attrs||(t.attrs=[])).push(Me({name:e,value:r,dynamic:n},o)),t.plain=!1}function je(t,e,r,o){t.attrsMap[e]=r,t.attrsList.push(Me({name:e,value:r},o))}function $e(t,e,r,o,n,i,a,l){(t.directives||(t.directives=[])).push(Me({name:e,rawName:r,value:o,arg:n,isDynamicArg:i,modifiers:a},l)),t.plain=!1}function Ne(t,e,r){return r?"_p("+e+',"'+t+'")':t+e}function De(t,e,r,o,n,i,a,l){var s;(o=o||so).right?l?e="("+e+")==='click'?'contextmenu':("+e+")":"click"===e&&(e="contextmenu",delete o.right):o.middle&&(l?e="("+e+")==='click'?'mouseup':("+e+")":"click"===e&&(e="mouseup")),o.capture&&(delete o.capture,e=Ne("!",e,l)),o.once&&(delete o.once,e=Ne("~",e,l)),o.passive&&(delete o.passive,e=Ne("&",e,l)),o.native?(delete o.native,s=t.nativeEvents||(t.nativeEvents={})):s=t.events||(t.events={});var d=Me({value:r.trim(),dynamic:l},a);o!==so&&(d.modifiers=o);var c=s[e];Array.isArray(c)?n?c.unshift(d):c.push(d):s[e]=c?n?[d,c]:[c,d]:d,t.plain=!1}function Ie(t,e,r){var o=ze(t,":"+e)||ze(t,"v-bind:"+e);if(null!=o)return Ce(o);if(!1!==r){var n=ze(t,e);if(null!=n)return JSON.stringify(n)}}function ze(t,e,r){var o;if(null!=(o=t.attrsMap[e]))for(var n=t.attrsList,i=0,a=n.length;it.indexOf("[")||t.lastIndexOf("]")=Fn}function Be(t){return 34===t||39===t}function Ue(t){var e=1;for(qn=Un;!He();)if(Be(t=Fe()))qe(t);else if(91===t&&e++,93===t&&e--,0==e){Qn=Un;break}}function qe(t){for(var e=t;!He()&&(t=Fe())!==e;);}function Qe(t){if(n(t[bi])){var e=Do?"change":"input";t[e]=[].concat(t[bi],t[e]||[]),delete t[bi]}n(t[vi])&&(t.change=[].concat(t[vi],t.change||[]),delete t[vi])}function Ve(t,e,r){var o=Vn;return function n(){var i=e.apply(null,arguments);null!==i&&Ke(t,n,r,o)}}function We(t,e,r,o){if(xi){var n=jn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=n||0>=t.timeStamp||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Vn.addEventListener(t,e,Ro?{capture:r,passive:o}:r)}function Ke(t,e,r,o){(o||Vn).removeEventListener(t,e._wrapper||e,r)}function Xe(t,e){if(!o(t.data.on)||!o(e.data.on)){var r=e.data.on||{},n=t.data.on||{};Vn=e.elm,Qe(r),et(r,n,We,Ke,Ve,e.context),Vn=void 0}}function Je(t,e){if(!o(t.data.domProps)||!o(e.data.domProps)){var r,i,a=e.elm,l=t.data.domProps||{},s=e.data.domProps||{};for(r in n(s.__ob__)&&(s=e.data.domProps=v({},s)),l)r in s||(a[r]="");for(r in s){if(i=s[r],"textContent"===r||"innerHTML"===r){if(e.children&&(e.children.length=0),i===l[r])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===r&&"PROGRESS"!==a.tagName){a._value=i;var d=o(i)?"":i+"";Ye(a,d)&&(a.value=d)}else if("innerHTML"===r&&si(a.tagName)&&o(a.innerHTML)){(Wn=Wn||document.createElement("div")).innerHTML=""+i+"";for(var c=Wn.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;c.firstChild;)a.appendChild(c.firstChild)}else if(i!==l[r])try{a[r]=i}catch(e){}}}}function Ye(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var r=!0;try{r=document.activeElement!==t}catch(e){}return r&&t.value!==e}(t,e)||function(t,e){var r=t.value,o=t._vModifiers;if(n(o)){if(o.number)return p(r)!==p(e);if(o.trim)return r.trim()!==e.trim()}return r!==e}(t,e))}function Ge(t){var e=Ze(t.style);return t.staticStyle?v(t.staticStyle,e):e}function Ze(t){return Array.isArray(t)?x(t):"string"==typeof t?yi(t):t}function tr(t,e){var r=e.data,i=t.data;if(!(o(r.staticStyle)&&o(r.style)&&o(i.staticStyle)&&o(i.style))){var a,l,s=e.elm,d=i.staticStyle,c=i.normalizedStyle||i.style||{},m=d||c,p=Ze(e.data.style)||{};e.data.normalizedStyle=n(p.__ob__)?v({},p):p;var f=function(t,e){var r,o={};if(e)for(var n=t;n.componentInstance;)(n=n.componentInstance._vnode)&&n.data&&(r=Ge(n.data))&&v(o,r);(r=Ge(t.data))&&v(o,r);for(var i=t;i=i.parent;)i.data&&(r=Ge(i.data))&&v(o,r);return o}(e,!0);for(l in m)o(f[l])&&ki(s,l,"");for(l in f)(a=f[l])!==m[l]&&ki(s,l,null==a?"":a)}}function er(t,e){if(e&&(e=e.trim()))if(t.classList)-1r.indexOf(" "+e+" ")&&t.setAttribute("class",(r+e).trim())}}function rr(t,e){if(e&&(e=e.trim()))if(t.classList)-1r.indexOf(e)&&(r.push(e),er(t,e))}function ar(t,e){t._transitionClasses&&u(t._transitionClasses,e),rr(t,e)}function lr(t,e,r){var o=sr(t,e),n=o.type,i=o.timeout,a=o.propCount;if(!n)return r();var l=n===Oi?Ni:Ii,s=0,d=function(){t.removeEventListener(l,c),r()},c=function(e){e.target===t&&++s>=a&&d()};setTimeout((function(){sd?Oi:ji:null)?r===Oi?i.length:s.length:0,{type:r,timeout:c,propCount:m,hasTransform:r===Oi&&Li.test(o[$i+"Property"])}}function dr(t,e){for(;t.length=n;a--)e.end&&e.end(s[a].tag,r,o);s.length=n,l=n&&s[n-1].tag}else"br"===i?e.start&&e.start(t,[],!0,r,o):"p"===i&&(e.start&&e.start(t,[],!1,r,o),e.end&&e.end(t,r,o))}for(var a,l,s=[],d=e.expectHTML,c=e.isUnaryTag||yo,m=e.canBeLeftOpenTag||yo,p=0;t;){if(a=t,l&&ba(l)){var f=0,u=l.toLowerCase(),g=va[u]||(va[u]=new RegExp("([\\s\\S]*?)(]*>)","i")),h=t.replace(g,(function(t,r,o){return f=o.length,ba(u)||"noscript"===u||(r=r.replace(//g,"$1").replace(//g,"$1")),ka(u,r)&&(r=r.slice(1)),e.chars&&e.chars(r),""}));p+=t.length-h.length,t=h,i(u,p-f,p)}else{var b=t.indexOf("<");if(0===b){if(ga.test(t)){var v=t.indexOf("--\x3e");if(0<=v){e.shouldKeepComment&&e.comment(t.substring(4,v),p,p+v+3),r(v+3);continue}}if(ha.test(t)){var x=t.indexOf("]>");if(0<=x){r(x+2);continue}}var y=t.match(ua);if(y){r(y[0].length);continue}var w=t.match(fa);if(w){var _=p;r(w[0].length),i(w[1],_,p);continue}var k=o();if(k){n(k),ka(k.tagName,t)&&r(1);continue}}var C=void 0,E=void 0,T=void 0;if(0<=b){for(E=t.slice(b);!(fa.test(E)||ma.test(E)||ga.test(E)||ha.test(E)||(T=E.indexOf("<",1),0>T));)b+=T,E=t.slice(b);C=t.substring(0,b)}0>b&&(C=t),C&&r(C.length),e.chars&&C&&e.chars(C,p-C.length,p)}if(t===a){e.chars&&e.chars(t);break}}i()}(t,{warn:qi,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,outputSourceRange:e.outputSourceRange,start:function(t,o,n){var s=a&&a.ns||Yi(t);Do&&"svg"===s&&(o=function(t){for(var e,r=[],o=0;os&&(l.push(i=t.slice(s,n)),a.push(JSON.stringify(i)));var d=Ce(o[1].trim());a.push("_s("+d+")"),l.push({"@binding":d}),s=n+o[0].length}return s>>0}(a):"")+")"}(t,t.scopedSlots,e)+","),t.model&&(r+="model:{value:"+t.model.value+",callback:"+t.model.callback+",expression:"+t.model.expression+"},"),t.inlineTemplate){var i=function(t,e){var r=t.children[0];if(r&&1===r.type){var o=qr(r,e.options);return"inlineTemplate:{render:function(){"+o.render+"},staticRenderFns:["+o.staticRenderFns.map((function(t){return"function(){"+t+"}"})).join(",")+"]}"}}(t,e);i&&(r+=i+",")}return r=r.replace(/,$/,"")+"}",t.dynamicAttrs&&(r="_b("+r+',"'+t.tag+'",'+ro(t.dynamicAttrs)+")"),t.wrapData&&(r=t.wrapData(r)),t.wrapListeners&&(r=t.wrapListeners(r)),r}function Yr(t){return!(1!==t.type)&&("slot"===t.tag||t.children.some(Yr))}function Gr(t,e){var r=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!r)return Kr(t,e,Gr,"null");if(t.for&&!t.forProcessed)return Xr(t,e,Gr);var o=t.slotScope===Ma?"":t.slotScope+"",n="function("+o+"){return "+("template"===t.tag?t.if&&r?"("+t.if+")?"+(Zr(t,e)||"undefined")+":undefined":Zr(t,e)||"undefined":Qr(t,e))+"}",i=o?"":",proxy:true";return"{key:"+(t.slotTarget||'"default"')+",fn:"+n+i+"}"}function Zr(t,e,r,o,n){var i=t.children;if(i.length){var a=i[0];if(1===i.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var l=r?e.maybeComponent(a)?",1":",0":"";return""+(o||Qr)(a,e)+l}var s=r?function(t,e){for(var r,o=0,n=0;n':'
',0document.createEvent("Event").timeStamp&&($n=function(){return Nn.now()})}var Dn=0,In=function(t,e,r,o,n){this.vm=t,n&&(t._watcher=this),t._watchers.push(this),o?(this.deep=!!o.deep,this.user=!!o.user,this.lazy=!!o.lazy,this.sync=!!o.sync,this.before=o.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=r,this.id=++Dn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new Bo,this.newDepIds=new Bo,this.expression="","function"==typeof e?this.getter=e:(this.getter=function(t){if(!So.test(t)){var e=t.split(".");return function(t){for(var r=0;rOn&&Cn[r].id>t.id;)r--;Cn.splice(r+1,0,t)}else Cn.push(t);Sn||(Sn=!0,G(Wt))}}(this)},In.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||l(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(e){W(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},In.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},In.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},In.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||u(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var zn={enumerable:!0,configurable:!0,get:y,set:y},Ln={lazy:!0},Mn=0;(function(t){t.prototype._init=function(t){var e=this;e._uid=Mn++,e._isVue=!0,t&&t._isComponent?function(t,e){var r=t.$options=Object.create(t.constructor.options),o=e._parentVnode;r.parent=e.parent,r._parentVnode=o;var n=o.componentOptions;r.propsData=n.propsData,r._parentListeners=n.listeners,r._renderChildren=n.children,r._componentTag=n.tag,e.render&&(r.render=e.render,r.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=H(te(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,r=e.parent;if(r&&!e.abstract){for(;r.$options.abstract&&r.$parent;)r=r.$parent;r.$children.push(t)}t.$parent=r,t.$root=r?r.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Bt(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,r=t.$vnode=e._parentVnode,o=r&&r.context;t.$slots=lt(e._renderChildren,o),t.$scopedSlots=so,t._c=function(e,r,o,n){return Nt(t,e,r,o,n,!1)},t.$createElement=function(e,r,o,n){return Nt(t,e,r,o,n,!0)};var n=r&&r.data;D(t,"$attrs",n&&n.attrs||so,null,!0),D(t,"$listeners",e._parentListeners||so,null,!0)}(e),Vt(e,"beforeCreate"),function(t){var e=at(t.$options.inject,t);e&&($(!1),Object.keys(e).forEach((function(r){D(t,r,e[r])})),$(!0))}(e),Xt(e),function(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}(e),Vt(e,"created"),e.$options.el&&e.$mount(e.$options.el)}})(ee),function(t){var e={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",{get:function(){return this._data}}),Object.defineProperty(t.prototype,"$props",e),t.prototype.$set=I,t.prototype.$delete=z,t.prototype.$watch=function(t,e,r){var o=this;if(s(e))return Zt(o,t,e,r);(r=r||{}).user=!0;var n=new In(o,t,e,r);if(r.immediate)try{e.call(o,n.value)}catch(t){W(t,o,'callback for immediate watcher "'+n.expression+'"')}return function(){n.teardown()}}}(ee),function(t){var e=/^hook:/;t.prototype.$on=function(t,r){var o=this;if(Array.isArray(t))for(var n=0,i=t.length;nparseInt(this.max)&&ae(a,l[0],l,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}}};(function(t){var e={get:function(){return Eo}};Object.defineProperty(t,"config",e),t.util={warn:Vo,extend:v,mergeOptions:H,defineReactive:D},t.set=I,t.delete=z,t.nextTick=G,t.observable=function(t){return N(t),t},t.options=Object.create(null),ko.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,v(t.options.components,Rn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(-1=+Mo[1]),yi=h((function(t){var e={},r=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var o=t.split(r);1f?g(t,o(i[v+1])?null:i[v+1].elm,i,p,v,a):p>v&&b(e,m,f)}function y(t,e,r,o){for(var i,a=r;a\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,sa=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,da="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+To.source+"]*",ca="((?:"+da+"\\:)?"+da+")",ma=new RegExp("^<"+ca),pa=/^\s*(\/?)>/,fa=new RegExp("^<\\/"+ca+"[^>]*>"),ua=/^]+>/i,ga=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},ya=/&(?:lt|gt|quot|amp|#39);/g,wa=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,_a=f("pre,textarea",!0),ka=function(t,e){return t&&_a(t)&&"\n"===e[0]},Ca=/^@|^v-on:/,Ea=/^v-|^@|^:|^#/,Ta=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Sa=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Aa=/^\(|\)$/g,Oa=/^\[.*\]$/,ja=/:(.*)$/,$a=/^:|^\.|^v-bind:/,Na=/\.[^.\]]+(?=[^\]]*$)/g,Da=/^v-slot(:|$)|^#/,Ia=/[\r\n]/,za=/\s+/g,La=h((function(t){return(Ui=Ui||document.createElement("div")).innerHTML=t,Ui.textContent})),Ma="_empty_",Pa=/^xmlns:NS\d+/,Ra=/^NS\d+:/,Fa=[{staticKeys:["staticClass"],transformNode:function(t,e){e.warn;var r=ze(t,"class");r&&(t.staticClass=JSON.stringify(r));var o=Ie(t,"class",!1);o&&(t.classBinding=o)},genData:function(t){var e="";return t.staticClass&&(e+="staticClass:"+t.staticClass+","),t.classBinding&&(e+="class:"+t.classBinding+","),e}},{staticKeys:["staticStyle"],transformNode:function(t,e){e.warn;var r=ze(t,"style");r&&(t.staticStyle=JSON.stringify(yi(r)));var o=Ie(t,"style",!1);o&&(t.styleBinding=o)},genData:function(t){var e="";return t.staticStyle&&(e+="staticStyle:"+t.staticStyle+","),t.styleBinding&&(e+="style:("+t.styleBinding+"),"),e}},{preTransformNode:function(t,e){if("input"===t.tag){var r,o=t.attrsMap;if(!o["v-model"])return;if((o[":type"]||o["v-bind:type"])&&(r=Ie(t,"type")),o.type||r||!o["v-bind"]||(r="("+o["v-bind"]+").type"),r){var n=ze(t,"v-if",!0),i=n?"&&("+n+")":"",a=null!=ze(t,"v-else",!0),l=ze(t,"v-else-if",!0),s=Rr(t);Ir(s),je(s,"type","checkbox"),Dr(s,e),s.processed=!0,s.if="("+r+")==='checkbox'"+i,zr(s,{exp:s.if,block:s});var d=Rr(t);ze(d,"v-for",!0),je(d,"type","radio"),Dr(d,e),zr(s,{exp:"("+r+")==='radio'"+i,block:d});var c=Rr(t);return ze(c,"v-for",!0),je(c,":type",r),Dr(c,e),zr(s,{exp:n,block:c}),a?s.else=!0:l&&(s.elseif=l),s}}}}],Ha={expectHTML:!0,modules:Fa,directives:{model:function(t,e,r){var o=e.value,n=e.modifiers,i=t.tag,a=t.attrsMap.type;if(t.component)return Pe(t,o,n),!1;if("select"===i)!function(t,e,r){var o="var $$selectedVal = "+('Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(r&&r.number?"_n(val)":"val")+"})")+";";De(t,"change",o=o+" "+Re(e,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),null,!0)}(t,o,n);else if("input"===i&&"checkbox"===a)!function(t,e,r){var o=r&&r.number,n=Ie(t,"value")||"null",i=Ie(t,"true-value")||"true",a=Ie(t,"false-value")||"false";Ae(t,"checked","Array.isArray("+e+")?_i("+e+","+n+")>-1"+("true"===i?":("+e+")":":_q("+e+","+i+")")),De(t,"change","var $$a="+e+",$$el=$event.target,$$c=$$el.checked?("+i+"):("+a+");if(Array.isArray($$a)){var $$v="+(o?"_n("+n+")":n)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Re(e,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Re(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Re(e,"$$c")+"}",null,!0)}(t,o,n);else if("input"===i&&"radio"===a)!function(t,e,r){var o=r&&r.number,n=Ie(t,"value")||"null";Ae(t,"checked","_q("+e+","+(n=o?"_n("+n+")":n)+")"),De(t,"change",Re(e,n),null,!0)}(t,o,n);else if("input"===i||"textarea"===i)!function(t,e,r){var o=t.attrsMap.type,n=r||{},i=n.lazy,a=n.number,l=n.trim,s=i?"change":"range"===o?bi:"input",d="$event.target.value";l&&(d="$event.target.value.trim()"),a&&(d="_n("+d+")");var c=Re(e,d);!i&&"range"!==o&&(c="if($event.target.composing)return;"+c),Ae(t,"value","("+e+")"),De(t,s,c,null,!0),(l||a)&&De(t,"blur","$forceUpdate()")}(t,o,n);else if(!Eo.isReservedTag(i))return Pe(t,o,n),!1;return!0},text:function(t,e){e.value&&Ae(t,"textContent","_s("+e.value+")",e)},html:function(t,e){e.value&&Ae(t,"innerHTML","_s("+e.value+")",e)}},isPreTag:function(t){return"pre"===t},isUnaryTag:na,mustUseProp:Yn,canBeLeftOpenTag:ia,isReservedTag:di,getTagNamespace:me,staticKeys:function(t){return t.reduce((function(t,e){return t.concat(e.staticKeys||[])}),[]).join(",")}(Fa)},Ba=h((function(t){return f("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))})),Ua=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,qa=/\([^)]*?\);*$/,Qa=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Va={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Wa={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Ka=function(t){return"if("+t+")return null;"},Xa={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Ka("$event.target !== $event.currentTarget"),ctrl:Ka("!$event.ctrlKey"),shift:Ka("!$event.shiftKey"),alt:Ka("!$event.altKey"),meta:Ka("!$event.metaKey"),left:Ka("'button' in $event && $event.button !== 0"),middle:Ka("'button' in $event && $event.button !== 1"),right:Ka("'button' in $event && $event.button !== 2")},Ja={on:function(t,e){t.wrapListeners=function(t){return"_g("+t+","+e.value+")"}},bind:function(t,e){t.wrapData=function(r){return"_b("+r+",'"+t.tag+"',"+e.value+","+(e.modifiers&&e.modifiers.prop?"true":"false")+(e.modifiers&&e.modifiers.sync?",true":"")+")"}},cloak:y},Ya=function(t){this.options=t,this.warn=t.warn||Te,this.transforms=Se(t.modules,"transformCode"),this.dataGenFns=Se(t.modules,"genData"),this.directives=v(v({},Ja),t.directives);var e=t.isReservedTag||yo;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1},Ga=(new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+["delete","typeof","void"].join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)"),function(t){function e(e,r){var o=Object.create(t),n=[],i=[];if(r)for(var a in r.modules&&(o.modules=(t.modules||[]).concat(r.modules)),r.directives&&(o.directives=v(Object.create(t.directives||null),r.directives)),r)"modules"!==a&&"directives"!==a&&(o[a]=r[a]);o.warn=function(t,e,r){(r?i:n).push(t)};var l=function(t,e){var r=Nr(t.trim(),e);!1!==e.optimize&&Fr(r,e);var o=qr(r,e);return{ast:r,render:o.render,staticRenderFns:o.staticRenderFns}}(e.trim(),o);return l.errors=n,l.tips=i,l}return{compile:e,compileToFunctions:io(e)}}(Ha)),Za=(Ga.compile,Ga.compileToFunctions),tl=!!Oo&&ao(!1),el=!!Oo&&ao(!0),rl=h((function(t){var e=pe(t);return e&&e.innerHTML})),ol=ee.prototype.$mount;ee.prototype.$mount=function(t,e){if((t=t&&pe(t))===document.body||t===document.documentElement)return this;var r=this.$options;if(!r.render){var o=r.template;if(o)if("string"==typeof o)"#"===o.charAt(0)&&(o=rl(o));else{if(!o.nodeType)return this;o=o.innerHTML}else t&&(o=function(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}(t));if(o){var n=Za(o,{outputSourceRange:!1,shouldDecodeNewlines:tl,shouldDecodeNewlinesForHref:el,delimiters:r.delimiters,comments:r.comments},this),i=n.render,a=n.staticRenderFns;r.render=i,r.staticRenderFns=a}}return ol.call(this,t,e)},ee.compile=Za;var nl=ee,il=r(10),al=r.n(il),ll=(r(14),r(4)),sl=Object(ll.a)({name:"App"},(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"app"}},[e("router-view")],1)}),[],!1,null,null,null).exports,dl=r(6),cl=r.n(dl);nl.use(cl.a);var ml=new cl.a({routes:[{path:"/",name:"Terminal",component:r(31).default},{path:"*",redirect:"/"}]}),pl=r(7),fl=r.n(pl),ul=r(8),gl=r(5);nl.use(fl.a);var hl=new fl.a.Store({modules:gl.default,plugins:[Object(ul.createPersistedState)(),Object(ul.createSharedMutations)()],strict:!1});r(9),r(23),r(25),r(27);process.env.IS_WEB||nl.use(r(29)),nl.http=nl.prototype.$http=al.a,nl.config.productionTip=!1,new nl({components:{App:sl},router:ml,store:hl,template:""}).$mount("#app")},function(t,e,r){"use strict";r.r(e);var o=r(11),n=r(12),i=r(13),a=r.n(i),l=r(16),s=r(17),d=r(18),c=d.remote,m=(d.ipcRenderer,c.Menu);window.addEventListener("contextmenu",(function(t){t.preventDefault(),m.buildFromTemplate([{label:"Copy",role:"copy"},{label:"Paste",role:"paste"}]).popup({window:c.getCurrentWindow()})}),!1);r(19);var p=r(4),f=Object(p.a)({name:"Terminal",data:function(){return{xterm:null,isStop:!1,ptyProcess:null,shell:null,fitAddon:null,background:a.a}},methods:{initializeTerminal:function(){var t=this,e=this;this.xterm=new o.Terminal({cursorBlink:!0,fontSize:26,theme:{foreground:"lightgray",background:"#0000"},allowTransparency:!0}),this.fitAddon=new n.FitAddon,this.xterm.loadAddon(this.fitAddon),this.xterm.open(document.getElementById("xterm")),this.fitAddon.fit(),this.shell=process.env["win32"===l.platform()?"COMSPEC":"SHELL"],this.ptyProcess=s.spawn(this.shell,[],{rows:e.xterm.rows||80,cols:e.xterm.cols||24,cwd:process.env.HOME,env:process.env,encoding:"utf8"}),this.xterm.onData((function(r){e.isStop=!0,t.ptyProcess.write(r)})),this.ptyProcess.onData((function(r){t.xterm.write(r),e.isStop&&e.ptyProcess.resize(t.xterm.cols,t.xterm.rows),e.isStop=!1})),window.addEventListener("resize",(function(){e.fitAddon.fit()})),this.xterm.onResize((function(t){e.ptyProcess.resize(t.cols,t.rows)}))},ChangeWindowColor:function(){this.xterm.setOption("theme",{foreground:"lightgray",background:"#0004"})},DefaultWindowColor:function(){this.xterm.setOption("theme",{foreground:"lightgray",background:"#0000"})}},mounted:function(){this.initializeTerminal(),c.getCurrentWindow().setSize(1156,746)}},(function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{style:{backgroundImage:"url("+t.background+")"},attrs:{id:"xterm"},on:{keydown:[function(e){return(e.type.indexOf("key")||50===e.keyCode)&&e.ctrlKey&&e.altKey?t.DefaultWindowColor():null},function(e){return(e.type.indexOf("key")||51===e.keyCode)&&e.ctrlKey&&e.altKey?t.ChangeWindowColor():null}]}})}),[],!1,null,"7ce49827",null);e.default=f.exports}]); \ No newline at end of file +var so=Object.freeze({}),co=Object.prototype.toString,mo=f("slot,component",!0),po=f("key,ref,slot,slot-scope,is"),fo=Object.prototype.hasOwnProperty,uo=/-(\w)/g,go=h((function(t){return t.replace(uo,(function(t,e){return e?e.toUpperCase():""}))})),ho=h((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),bo=/\B([A-Z])/g,vo=h((function(t){return t.replace(bo,"-$1").toLowerCase()})),xo=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function r(r){var o=arguments.length;return o?1document.createEvent("Event").timeStamp&&($n=function(){return Nn.now()})}var Dn=0,In=function(t,e,r,o,n){this.vm=t,n&&(t._watcher=this),t._watchers.push(this),o?(this.deep=!!o.deep,this.user=!!o.user,this.lazy=!!o.lazy,this.sync=!!o.sync,this.before=o.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=r,this.id=++Dn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new Bo,this.newDepIds=new Bo,this.expression="","function"==typeof e?this.getter=e:(this.getter=function(t){if(!So.test(t)){var e=t.split(".");return function(t){for(var r=0;rOn&&Cn[r].id>t.id;)r--;Cn.splice(r+1,0,t)}else Cn.push(t);Sn||(Sn=!0,G(Wt))}}(this)},In.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||l(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(e){W(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},In.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},In.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},In.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||u(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var zn={enumerable:!0,configurable:!0,get:y,set:y},Ln={lazy:!0},Mn=0;(function(t){t.prototype._init=function(t){var e=this;e._uid=Mn++,e._isVue=!0,t&&t._isComponent?function(t,e){var r=t.$options=Object.create(t.constructor.options),o=e._parentVnode;r.parent=e.parent,r._parentVnode=o;var n=o.componentOptions;r.propsData=n.propsData,r._parentListeners=n.listeners,r._renderChildren=n.children,r._componentTag=n.tag,e.render&&(r.render=e.render,r.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=H(te(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,r=e.parent;if(r&&!e.abstract){for(;r.$options.abstract&&r.$parent;)r=r.$parent;r.$children.push(t)}t.$parent=r,t.$root=r?r.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Bt(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,r=t.$vnode=e._parentVnode,o=r&&r.context;t.$slots=lt(e._renderChildren,o),t.$scopedSlots=so,t._c=function(e,r,o,n){return Nt(t,e,r,o,n,!1)},t.$createElement=function(e,r,o,n){return Nt(t,e,r,o,n,!0)};var n=r&&r.data;D(t,"$attrs",n&&n.attrs||so,null,!0),D(t,"$listeners",e._parentListeners||so,null,!0)}(e),Vt(e,"beforeCreate"),function(t){var e=at(t.$options.inject,t);e&&($(!1),Object.keys(e).forEach((function(r){D(t,r,e[r])})),$(!0))}(e),Xt(e),function(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}(e),Vt(e,"created"),e.$options.el&&e.$mount(e.$options.el)}})(ee),function(t){var e={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",{get:function(){return this._data}}),Object.defineProperty(t.prototype,"$props",e),t.prototype.$set=I,t.prototype.$delete=z,t.prototype.$watch=function(t,e,r){var o=this;if(s(e))return Zt(o,t,e,r);(r=r||{}).user=!0;var n=new In(o,t,e,r);if(r.immediate)try{e.call(o,n.value)}catch(t){W(t,o,'callback for immediate watcher "'+n.expression+'"')}return function(){n.teardown()}}}(ee),function(t){var e=/^hook:/;t.prototype.$on=function(t,r){var o=this;if(Array.isArray(t))for(var n=0,i=t.length;nparseInt(this.max)&&ae(a,l[0],l,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}}};(function(t){var e={get:function(){return Eo}};Object.defineProperty(t,"config",e),t.util={warn:Vo,extend:v,mergeOptions:H,defineReactive:D},t.set=I,t.delete=z,t.nextTick=G,t.observable=function(t){return N(t),t},t.options=Object.create(null),ko.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,v(t.options.components,Rn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(-1=+Mo[1]),yi=h((function(t){var e={},r=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var o=t.split(r);1f?g(t,o(i[v+1])?null:i[v+1].elm,i,p,v,a):p>v&&b(e,m,f)}function y(t,e,r,o){for(var i,a=r;a\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,sa=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,da="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+To.source+"]*",ca="((?:"+da+"\\:)?"+da+")",ma=new RegExp("^<"+ca),pa=/^\s*(\/?)>/,fa=new RegExp("^<\\/"+ca+"[^>]*>"),ua=/^]+>/i,ga=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},ya=/&(?:lt|gt|quot|amp|#39);/g,wa=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,_a=f("pre,textarea",!0),ka=function(t,e){return t&&_a(t)&&"\n"===e[0]},Ca=/^@|^v-on:/,Ea=/^v-|^@|^:|^#/,Ta=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Sa=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Aa=/^\(|\)$/g,Oa=/^\[.*\]$/,ja=/:(.*)$/,$a=/^:|^\.|^v-bind:/,Na=/\.[^.\]]+(?=[^\]]*$)/g,Da=/^v-slot(:|$)|^#/,Ia=/[\r\n]/,za=/\s+/g,La=h((function(t){return(Ui=Ui||document.createElement("div")).innerHTML=t,Ui.textContent})),Ma="_empty_",Pa=/^xmlns:NS\d+/,Ra=/^NS\d+:/,Fa=[{staticKeys:["staticClass"],transformNode:function(t,e){e.warn;var r=ze(t,"class");r&&(t.staticClass=JSON.stringify(r));var o=Ie(t,"class",!1);o&&(t.classBinding=o)},genData:function(t){var e="";return t.staticClass&&(e+="staticClass:"+t.staticClass+","),t.classBinding&&(e+="class:"+t.classBinding+","),e}},{staticKeys:["staticStyle"],transformNode:function(t,e){e.warn;var r=ze(t,"style");r&&(t.staticStyle=JSON.stringify(yi(r)));var o=Ie(t,"style",!1);o&&(t.styleBinding=o)},genData:function(t){var e="";return t.staticStyle&&(e+="staticStyle:"+t.staticStyle+","),t.styleBinding&&(e+="style:("+t.styleBinding+"),"),e}},{preTransformNode:function(t,e){if("input"===t.tag){var r,o=t.attrsMap;if(!o["v-model"])return;if((o[":type"]||o["v-bind:type"])&&(r=Ie(t,"type")),o.type||r||!o["v-bind"]||(r="("+o["v-bind"]+").type"),r){var n=ze(t,"v-if",!0),i=n?"&&("+n+")":"",a=null!=ze(t,"v-else",!0),l=ze(t,"v-else-if",!0),s=Rr(t);Ir(s),je(s,"type","checkbox"),Dr(s,e),s.processed=!0,s.if="("+r+")==='checkbox'"+i,zr(s,{exp:s.if,block:s});var d=Rr(t);ze(d,"v-for",!0),je(d,"type","radio"),Dr(d,e),zr(s,{exp:"("+r+")==='radio'"+i,block:d});var c=Rr(t);return ze(c,"v-for",!0),je(c,":type",r),Dr(c,e),zr(s,{exp:n,block:c}),a?s.else=!0:l&&(s.elseif=l),s}}}}],Ha={expectHTML:!0,modules:Fa,directives:{model:function(t,e,r){var o=e.value,n=e.modifiers,i=t.tag,a=t.attrsMap.type;if(t.component)return Pe(t,o,n),!1;if("select"===i)!function(t,e,r){var o="var $$selectedVal = "+('Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(r&&r.number?"_n(val)":"val")+"})")+";";De(t,"change",o=o+" "+Re(e,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),null,!0)}(t,o,n);else if("input"===i&&"checkbox"===a)!function(t,e,r){var o=r&&r.number,n=Ie(t,"value")||"null",i=Ie(t,"true-value")||"true",a=Ie(t,"false-value")||"false";Ae(t,"checked","Array.isArray("+e+")?_i("+e+","+n+")>-1"+("true"===i?":("+e+")":":_q("+e+","+i+")")),De(t,"change","var $$a="+e+",$$el=$event.target,$$c=$$el.checked?("+i+"):("+a+");if(Array.isArray($$a)){var $$v="+(o?"_n("+n+")":n)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Re(e,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Re(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Re(e,"$$c")+"}",null,!0)}(t,o,n);else if("input"===i&&"radio"===a)!function(t,e,r){var o=r&&r.number,n=Ie(t,"value")||"null";Ae(t,"checked","_q("+e+","+(n=o?"_n("+n+")":n)+")"),De(t,"change",Re(e,n),null,!0)}(t,o,n);else if("input"===i||"textarea"===i)!function(t,e,r){var o=t.attrsMap.type,n=r||{},i=n.lazy,a=n.number,l=n.trim,s=i?"change":"range"===o?bi:"input",d="$event.target.value";l&&(d="$event.target.value.trim()"),a&&(d="_n("+d+")");var c=Re(e,d);!i&&"range"!==o&&(c="if($event.target.composing)return;"+c),Ae(t,"value","("+e+")"),De(t,s,c,null,!0),(l||a)&&De(t,"blur","$forceUpdate()")}(t,o,n);else if(!Eo.isReservedTag(i))return Pe(t,o,n),!1;return!0},text:function(t,e){e.value&&Ae(t,"textContent","_s("+e.value+")",e)},html:function(t,e){e.value&&Ae(t,"innerHTML","_s("+e.value+")",e)}},isPreTag:function(t){return"pre"===t},isUnaryTag:na,mustUseProp:Yn,canBeLeftOpenTag:ia,isReservedTag:di,getTagNamespace:me,staticKeys:function(t){return t.reduce((function(t,e){return t.concat(e.staticKeys||[])}),[]).join(",")}(Fa)},Ba=h((function(t){return f("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))})),Ua=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,qa=/\([^)]*?\);*$/,Qa=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Va={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Wa={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Ka=function(t){return"if("+t+")return null;"},Xa={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Ka("$event.target !== $event.currentTarget"),ctrl:Ka("!$event.ctrlKey"),shift:Ka("!$event.shiftKey"),alt:Ka("!$event.altKey"),meta:Ka("!$event.metaKey"),left:Ka("'button' in $event && $event.button !== 0"),middle:Ka("'button' in $event && $event.button !== 1"),right:Ka("'button' in $event && $event.button !== 2")},Ja={on:function(t,e){t.wrapListeners=function(t){return"_g("+t+","+e.value+")"}},bind:function(t,e){t.wrapData=function(r){return"_b("+r+",'"+t.tag+"',"+e.value+","+(e.modifiers&&e.modifiers.prop?"true":"false")+(e.modifiers&&e.modifiers.sync?",true":"")+")"}},cloak:y},Ya=function(t){this.options=t,this.warn=t.warn||Te,this.transforms=Se(t.modules,"transformCode"),this.dataGenFns=Se(t.modules,"genData"),this.directives=v(v({},Ja),t.directives);var e=t.isReservedTag||yo;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1},Ga=(new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+["delete","typeof","void"].join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)"),function(t){function e(e,r){var o=Object.create(t),n=[],i=[];if(r)for(var a in r.modules&&(o.modules=(t.modules||[]).concat(r.modules)),r.directives&&(o.directives=v(Object.create(t.directives||null),r.directives)),r)"modules"!==a&&"directives"!==a&&(o[a]=r[a]);o.warn=function(t,e,r){(r?i:n).push(t)};var l=function(t,e){var r=Nr(t.trim(),e);!1!==e.optimize&&Fr(r,e);var o=qr(r,e);return{ast:r,render:o.render,staticRenderFns:o.staticRenderFns}}(e.trim(),o);return l.errors=n,l.tips=i,l}return{compile:e,compileToFunctions:io(e)}}(Ha)),Za=(Ga.compile,Ga.compileToFunctions),tl=!!Oo&&ao(!1),el=!!Oo&&ao(!0),rl=h((function(t){var e=pe(t);return e&&e.innerHTML})),ol=ee.prototype.$mount;ee.prototype.$mount=function(t,e){if((t=t&&pe(t))===document.body||t===document.documentElement)return this;var r=this.$options;if(!r.render){var o=r.template;if(o)if("string"==typeof o)"#"===o.charAt(0)&&(o=rl(o));else{if(!o.nodeType)return this;o=o.innerHTML}else t&&(o=function(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}(t));if(o){var n=Za(o,{outputSourceRange:!1,shouldDecodeNewlines:tl,shouldDecodeNewlinesForHref:el,delimiters:r.delimiters,comments:r.comments},this),i=n.render,a=n.staticRenderFns;r.render=i,r.staticRenderFns=a}}return ol.call(this,t,e)},ee.compile=Za;var nl=ee,il=r(10),al=r.n(il),ll=(r(14),r(4)),sl=Object(ll.a)({name:"App"},(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"app"}},[e("router-view")],1)}),[],!1,null,null,null).exports,dl=r(6),cl=r.n(dl);nl.use(cl.a);var ml=new cl.a({routes:[{path:"/",name:"Terminal",component:r(31).default},{path:"*",redirect:"/"}]}),pl=r(7),fl=r.n(pl),ul=r(8),gl=r(5);nl.use(fl.a);var hl=new fl.a.Store({modules:gl.default,plugins:[Object(ul.createPersistedState)(),Object(ul.createSharedMutations)()],strict:!1});r(9),r(23),r(25),r(27);process.env.IS_WEB||nl.use(r(29)),nl.http=nl.prototype.$http=al.a,nl.config.productionTip=!1,new nl({components:{App:sl},router:ml,store:hl,template:""}).$mount("#app")},function(t,e,r){"use strict";r.r(e);var o=r(11),n=r(12),i=r(13),a=r.n(i),l=r(16),s=r(17),d=r(18),c=d.remote,m=(d.ipcRenderer,c.Menu);window.addEventListener("contextmenu",(function(t){t.preventDefault(),m.buildFromTemplate([{label:"Copy",role:"copy"},{label:"Paste",role:"paste"}]).popup({window:c.getCurrentWindow()})}),!1);r(19);var p=r(4),f=Object(p.a)({name:"Terminal",data:function(){return{xterm:null,isStop:!1,ptyProcess:null,shell:null,fitAddon:null,background:a.a}},methods:{initializeTerminal:function(){var t=this,e=this;this.xterm=new o.Terminal({cursorBlink:!0,fontSize:30,theme:{foreground:"lightgray",background:"#0000"},allowTransparency:!0}),this.fitAddon=new n.FitAddon,this.xterm.loadAddon(this.fitAddon),this.xterm.open(document.getElementById("xterm")),this.fitAddon.fit(),this.shell=process.env["win32"===l.platform()?"COMSPEC":"SHELL"],this.ptyProcess=s.spawn(this.shell,[],{rows:e.xterm.rows||80,cols:e.xterm.cols||24,cwd:process.env.HOME,env:process.env,encoding:"utf8"}),this.xterm.onData((function(r){e.isStop=!0,t.ptyProcess.write(r)})),this.ptyProcess.onData((function(r){t.xterm.write(r),e.isStop&&e.ptyProcess.resize(t.xterm.cols,t.xterm.rows),e.isStop=!1})),window.addEventListener("resize",(function(){e.fitAddon.fit()})),this.xterm.onResize((function(t){e.ptyProcess.resize(t.cols,t.rows)}))},ChangeWindowColor:function(){this.xterm.setOption("theme",{foreground:"lightgray",background:"#0004"})},DefaultWindowColor:function(){this.xterm.setOption("theme",{foreground:"lightgray",background:"#0000"})}},mounted:function(){this.initializeTerminal(),c.getCurrentWindow().setSize(1156,746)}},(function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{style:{backgroundImage:"url("+t.background+")"},attrs:{id:"xterm"},on:{keydown:[function(e){return(e.type.indexOf("key")||50===e.keyCode)&&e.ctrlKey&&e.altKey?t.DefaultWindowColor():null},function(e){return(e.type.indexOf("key")||51===e.keyCode)&&e.ctrlKey&&e.altKey?t.ChangeWindowColor():null}]}})}),[],!1,null,"31021e6e",null);e.default=f.exports}]); \ No newline at end of file diff --git a/OpenToolbox/OpenToolbox/npm_install.bat b/OpenToolbox/OpenToolbox/npm_install.bat index dd7e18f2947107506326e1c74bce1a01e3715bf3..30e9430178f4118daf95906d6f5891a80e2e0d7b 100644 --- a/OpenToolbox/OpenToolbox/npm_install.bat +++ b/OpenToolbox/OpenToolbox/npm_install.bat @@ -1,7 +1,7 @@ @echo off setlocal set npm_config_disturl="https://atom.io/download/electron" -set npm_config_target=9.1.0 +set npm_config_target=9.4.0 set npm_config_runtime="electron" set npm_config_cache=~\.npm-electron npm i diff --git a/OpenToolbox/OpenToolbox/src/renderer/components/Terminal.vue b/OpenToolbox/OpenToolbox/src/renderer/components/Terminal.vue index 8bf6dc467fbbc4dac31e4d2bdf968dce50bf3310..163033394b00dbbd606167f457cf4454e25b35bc 100644 --- a/OpenToolbox/OpenToolbox/src/renderer/components/Terminal.vue +++ b/OpenToolbox/OpenToolbox/src/renderer/components/Terminal.vue @@ -56,7 +56,7 @@ export default { this.xterm = new Terminal({ cursorBlink: true, // 鍏夋爣闂儊 - fontSize: 26, // 瀛椾綋澶у皬 + fontSize: 30, // 瀛椾綋澶у皬 theme: { foreground: 'lightgray', // 鍓嶆櫙鑹 diff --git a/README.md b/README.md index 14dca8aa08005abff2986b7a024a581545edad1d..2a8b2564451a99a744a9710529e80083ac899b21 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ 杩欎釜浠撳簱鏄 **java-for-linux 缁煎悎鍨嬪紑婧愰」鐩** 灏辨槸鎶婅嚜宸卞紑鍙戠殑**澶氫釜寮婧愰」鐩泦鎴**鍦ㄤ竴璧风淮鎶 涓庣紪绋嬬浉鍏崇殑鍐呭閮戒細瀛樻斁鍒 杩欎釜浠撳簱閲 鐩墠鏈 **6+ 涓紑婧愰」鐩細** **Gitee 瀹樻柟寮婧愭寚鍖楀瓙椤圭洰**銆佸紑婧愯绋嬪瓙椤圭洰銆佸紑婧愮瑪璁板瓙椤圭洰銆 **OpenToolbox 瀛愰」鐩** 銆**Java 娉℃场鍫傛父鎴忓瓙椤圭洰**銆2048 灏忔父鎴忓瓙椤圭洰銆 -**cppmm 瀛愰」鐩**銆**寮鍙戣呰嫳璇皬鎶勫瓙椤圭洰**銆**iooc-admin 鍚庡彴鏉冮檺绠$悊瀛愰」鐩**銆 鍏朵粬寮婧愬瓙椤圭洰绛 +**cppmm 瀛愰」鐩**銆**寮鍙戣呰嫳璇皬鎶勫瓙椤圭洰**銆**iooc-admin 鍚庡彴鏉冮檺绠$悊椤圭洰**銆 鍏朵粬寮婧愬瓙椤圭洰绛 ### java-for-linux 缁煎悎鍨嬪紑婧愬瓙椤圭洰锛 @@ -122,7 +122,7 @@ npm run dev npm run build:win32 ``` -**iooc-admin 鍚庡彴鏉冮檺绠$悊绯荤粺寮婧愬瓙椤圭洰**锛氾紙鍦 **[iooc-vue-admin](https://gitee.com/OpenDevel/java-for-linux/tree/master/%E5%BC%80%E6%BA%90%E5%AD%90%E4%BB%93%E5%BA%93/iooc-vue-admin)** 鏂囦欢澶癸級銆 +**iooc-admin 鍚庡彴鏉冮檺绠$悊绯荤粺寮婧愰」鐩**锛氾紙鍦 **[iooc-vue-admin](https://gitee.com/OpenDevel/java-for-linux/tree/master/%E5%BC%80%E6%BA%90%E5%AD%90%E4%BB%93%E5%BA%93/iooc-vue-admin)** 鏂囦欢澶癸級銆 **馃挕 浣跨敤璇存槑锛** @@ -607,14 +607,6 @@ JVM 绯诲垪鐨勯」鐩湴鍧锛 [椤圭洰瑙傜湅鍦板潃](https://www.bilibili.com/video/BV1qK411u7w6) -# 寮婧愰」鐩氦娴佺兢 - -java-for-linux & iooc-admin 寮婧愰」鐩妧鏈敮鎸 - -**QQ 缇**鍙 : **741396149** - -![image](https://github.com/OSrcD/java-for-linux/blob/master/image/group.png) - # 寮婧愯禐璧 ## 寰俊璧炶祻鐮 diff --git a/README.zh-CN.md b/README.zh-CN.md index 7abde00af8d5574aa1240f9c53bafea50037e52e..4252ac08972748e2716a58a962d0d2659ad8d525 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -1,27 +1,27 @@ -
+

java-for-linux: Welcome to Internet

## 浠撳簱绠浠 -杩欎釜浠撳簱鏄 **java-for-linux 缁煎悎鍨嬪紑婧愰」鐩** 灏辨槸鎶婅嚜宸卞紑鍙戠殑**澶氫釜寮婧愰」鐩泦鎴**鍦ㄤ竴璧风淮鎶 -涓庣紪绋嬬浉鍏崇殑鍐呭閮戒細瀛樻斁鍒 杩欎釜浠撳簱閲 鐩墠鏈 **6+ 涓紑婧愰」鐩**锛**Gitee 瀹樻柟寮婧愭寚鍖楅」鐩**銆佸紑婧愯绋嬪瓙椤圭洰銆佸紑婧愮瑪璁板瓙椤圭洰銆 -**OpenToolbox 瀛愰」鐩** 銆**Java 娉℃场鍫傛父鎴忓瓙椤圭洰**銆2048 灏忔父鎴忓瓙椤圭洰銆 -**cppmm 瀛愰」鐩**銆**寮鍙戣呰嫳璇瓙椤圭洰**銆**iooc-admin 鍚庡彴鏉冮檺绠$悊瀛愰」鐩**銆 鍏朵粬寮婧愬瓙椤圭洰绛 +杩欎釜浠撳簱涓昏鏄竴涓**浠g爜搴 & 椤圭洰搴** 鏂逛究鑷繁浠ュ悗**鍋氬叾浠栭」鐩**鐨勬椂鍊 鐩存帴 **Copy** 杩欎釜浠撳簱鐨勪唬鐮併傚悗缁細閫夋嫨 **cppmm 寮婧愰」鐩** 浣滀负鏈潵鐨勫紑婧愰」鐩**猸恓ava-for-linux 鏄綔鑰呯殑涓涓嚜濯掍綋涓庡紑婧愰」鐩粨鍚 缁煎悎鍨嬪紑婧愰」鐩** 浣滀负 **Gitee 瀹樻柟寮婧愭寚鍖楅」鐩础鐚呰础鐚簡 鑷獟浣撲笌寮婧愰」鐩粨鍚堢悊璁轰笌瀹為檯妯″潡** 灏辨槸鎶婅嚜宸卞紑鍙戠殑**澶氫釜寮婧愰」鐩泦鎴**鍦ㄤ竴璧风淮鎶 +涓庣紪绋嬬浉鍏崇殑鍐呭閮戒細瀛樻斁鍒 杩欎釜浠撳簱閲 鐩墠鏈 **6+ 涓紑婧愰」鐩**锛**猸恮ebrtc-live 鐩存挱瀵艰喘瀛愰」鐩** **猸怗itee 瀹樻柟寮婧愭寚鍖楅」鐩**銆丣ava 寮婧愯绋嬪瓙椤圭洰銆丣ava 寮婧愮瑪璁板瓙椤圭洰銆 +**猸怬penToolbox 浠块粦瀹㈠懡浠よ缁堢宸ュ叿瀛愰」鐩** 銆**猸怞ava 娉℃场鍫傛父鎴忓瓙椤圭洰**銆丣ava 2048 灏忔父鎴忓瓙椤圭洰銆 +**猸恈ppmm 鎼滈泦浜嗗競闈笂 JVM 婧愮爜 鎵鏈夌爺绌惰祫鏂欏瓙椤圭洰**銆**猸愬紑鍙戣呰嫳璇瓙椤圭洰**銆**鍏朵粬 Java 寮婧愬瓙椤圭洰绛** ### java-for-linux 缁煎悎鍨嬪紑婧愬瓙椤圭洰锛 -**Gitee 瀹樻柟寮婧愭寚鍖楀紑婧愰」鐩**锛**Gitee 瀹樻柟鑱斿悎 90 澶氫綅寮婧愮埍濂借呫佸紑婧愮ぞ鍖哄強 6 浣嶅鏍′笓瀹** +**猸怗itee 瀹樻柟寮婧愭寚鍖楀紑婧愰」鐩**锛**Gitee 瀹樻柟鑱斿悎 90 澶氫綅寮婧愮埍濂借呫佸紑婧愮ぞ鍖哄強 6 浣嶅鏍′笓瀹** 缂栧啓鐨勫崄鍒嗕紭绉鐨勫紑婧愭搷浣滄寚鍗椼佷繚濮嗙骇寮婧愮櫨绉戙婂紑婧愭寚鍖椼 涓洪偅浜涙兂鍙備笌寮婧愮殑寮鍙戣呬滑鎻愪緵涓涓赴瀵岃瀹炵殑鎿嶄綔鎸囧崡锛岃鏇村寮鍙戣呰璇嗗紑婧愩佸弬涓庡紑婧愩佺埍涓婂紑婧愩 寮婧愭寚鍖楃殑椤圭洰妯″潡鏈 **Git 鍏ラ棬锛堝垵绾х瘒锛夈丟it 鍛戒护璇﹁В銆丟it 鍥㈤槦鍗忎綔涓庣鐞嗭紙杩涢樁绡囷級銆 寮婧愭晠浜嬨傚垵璇嗗紑婧愩佸涔犲拰浣跨敤寮婧愰」鐩佸皾璇曞弬涓庡紑婧愩佸惎鍔ㄨ嚜宸辩殑寮婧愰」鐩佸紑婧愭不鐞嗐佹湁鍏冲紑婧愮殑鍏朵粬闂銆 寮婧愭寚鍖楃紪鍐欐垚鍛樸佸紑婧愭寚鍖 Logo銆佸紑婧 VLOG銆佸紑婧愬瘎璇 寮婧愭寚鍖楀畼鏂 pages 闃呰椤**锛岃椤甸潰杩樻敮鎸佷簡 PWA 锛孉ndroid 鎴栬 PC 绯荤粺鐨勭敤鎴疯繕鍙互鎶婂紑婧愭寚鍖楁坊鍔犲湪妗岄潰涓婏紝鑳藉璁╀綘闅忔椂闅忓湴鐨勯槄璇汇 -绉疮浜**57澶氫釜Issues銆403澶氭PR锛圥ull Requests锛夋彁浜ゃ997澶氭鐨凱ush鎻愪氦銆1.8K Star**銆佹垚涓轰簡 Gitee 瀹樻柟鎺ㄨ崘椤圭洰銆 -鐩墠寮婧愭寚鍖 1.0 鐗堟湰姝e紡涓婄嚎浜嗐 -**浣滆呬綔涓哄紑婧愭寚鍖楃紪鍐欐垚鍛** 璐$尞浜嗗紑婧愰」鐩笌濯掍綋缁撳悎瀹炴垬缁忛獙 PR锛屾彁浜ゅ浣曠敵璇 JetBrains 寮婧愯鍙瘉 Issue銆 +猸愮Н绱簡 **57 澶氫釜 Issues銆403 澶氭 PR锛圥ull Requests锛夋彁浜ゃ997 澶氭鐨 Push 鎻愪氦銆1.8K Star**銆佹垚涓轰簡 Gitee 瀹樻柟鎺ㄨ崘椤圭洰銆 +猸愮洰鍓嶅紑婧愭寚鍖 1.0 鐗堟湰姝e紡涓婄嚎浜嗐 +**猸愪綔鑰呬綔涓哄紑婧愭寚鍖楃紪鍐欐垚鍛** 璐$尞浜嗗紑婧愰」鐩笌濯掍綋缁撳悎瀹炴垬缁忛獙 PR锛屸瓙鎻愪氦濡備綍鐢宠 JetBrains 寮婧愯鍙瘉 Issue銆 **馃挕 浣跨敤璇存槑锛** @@ -31,7 +31,7 @@ [寮婧愭寚鍖 VLOG](https://www.bilibili.com/video/BV1pU4y147Fu) -**寮婧愯绋嬪瓙椤圭洰**锛**鍍 JDK 寮鍙戝洟闃熶竴鏍峰紑鍙 Java锛堝湪 JVM 婧愮爜鍐呭祵鍐 Native 鍑芥暟缁 Java 灞傝皟鐢級**銆**Java 鍐欐父鎴忓畨鍏**銆佸熀浜 Linux 鐨 JNI 鍔ㄦ佸嚱鏁版敞鍐屻並ali Linux 鍐呮牳缂栫▼銆佸熀浜 Java For OpenCV 鐨勭櫨搴︿簯澶辨晥閾炬帴鑷姩鍒嗕韩銆丆 璇█鎸囬拡銆丣ava 娉涘瀷鍙嶇紪璇戯紙鍦ㄥ紑婧**璇剧▼**鏂囦欢澶癸級銆 +**Java 寮婧愯绋嬪瓙椤圭洰**锛**猸愬儚 JDK 寮鍙戝洟闃熶竴鏍峰紑鍙 Java锛堝湪 JVM 婧愮爜鍐呭祵鍐 Native 鍑芥暟缁 Java 灞傝皟鐢級**銆**猸怞ava 鍐欐父鎴忓畨鍏**銆佲瓙鍩轰簬 Linux 鐨 JNI 澶栧祵绾 Native 鍑芥暟鍔ㄦ佹敞鍐屻並ali Linux 鍐呮牳缂栫▼銆佲瓙鍩轰簬 Java for OpenCV 鐨勭櫨搴︿簯澶辨晥閾炬帴鑷姩鍒嗕韩銆佲瓙C 璇█鎸囬拡銆佲瓙Java 娉涘瀷鍙嶇紪璇戯紙鍦ㄥ紑婧**璇剧▼**鏂囦欢澶癸級銆 **馃挕 浣跨敤璇存槑锛** @@ -39,17 +39,17 @@ [涓撴爮闃呰鍦板潃](https://space.bilibili.com/77266754/article) -**寮婧愮瑪璁板瓙椤圭洰**锛**闃呰鑻辨枃鎶鏈枃妗e熀纭**銆丏ocker銆並ubernetes銆丒lasticsearch銆丗astDFS銆丱SS銆丼pring Cloud銆乂ultr 鎼缓鏈嶅姟鍣ㄣ佷簰鑱旂綉瑙嗛楂樻晥鐜囧涔犳妧宸с丏DOS 闃插尽銆丯ginx銆丷edis銆丷ocketMQ銆丣ava 璇硶鍩虹銆乄eb 鍏ラ棬銆丣ava 鍚庡彴鏁版嵁搴撱丣ava SSM妗嗘灦銆丼pring Boot 绛夛紙鍦ㄥ紑婧**绗旇**銆乯ava-for-gitee 鏂囦欢澶癸級銆 +**Java 寮婧愮瑪璁板瓙椤圭洰**锛**猸愰槄璇昏嫳鏂囨妧鏈枃妗e熀纭**銆佲瓙Docker銆佲瓙Kubernetes銆丒lasticsearch銆丗astDFS銆丱SS銆佲瓙Spring Cloud 鍏ㄥ妗躲佲瓙Vultr 鎼缓鏈嶅姟鍣ㄣ佷簰鑱旂綉瑙嗛楂樻晥鐜囧涔犳妧宸с佲瓙DDOS 闃插尽銆丯ginx銆丷edis銆丷abbitMQ銆丷ocketMQ銆丣ava 璇硶鍩虹銆乄eb 鍏ラ棬銆丣ava 鍚庡彴鏁版嵁搴撱丣ava SSM 妗嗘灦銆丼pring Boot 绛夛紙鍦ㄥ紑婧**绗旇**銆乯ava-for-gitee 鏂囦欢澶癸級銆 **馃挕 浣跨敤璇存槑锛** -[绗旇闃呰鍦板潃](https://tburl.in/dClenu1t) +[绗旇闃呰鍦板潃](https://thoughts.teambition.com/sharespace/60b31958a2aa01004a28b7dc) -**OpenToolbox 瀛愰」鐩細**锛堝湪 **OpenToolbox** 鏂囦欢澶癸級銆 +**猸怬penToolbox 浠块粦瀹㈠懡浠よ缁堢宸ュ叿瀛愰」鐩細**锛堝湪 **OpenToolbox** 鏂囦欢澶癸級銆 **绠浠嬶細** -浠块粦瀹㈠懡浠よ缁堢宸ュ叿 涓涓緟鍔╃紪绋嬪皬宸ュ叿 鏄竴娆剧粓绔懡浠ゅ皬宸ュ叿 鐢ㄤ簬鏁 Linux 鍛戒护 鏁插悇绉嶈蒋浠剁殑鍛戒护琛屽懡浠 浣跨敤 SSH 鍛戒护杩炴帴鏈嶅姟鍣 鍙互澶氬紑绐楀彛銆 +猸愪豢榛戝鍛戒护琛岀粓绔伐鍏 涓涓緟鍔╃紪绋嬪皬宸ュ叿 鏄竴娆剧粓绔懡浠ゅ皬宸ュ叿 鐢ㄤ簬鏁 Linux 鍛戒护 鏁插悇绉嶈蒋浠剁殑鍛戒护琛屽懡浠 浣跨敤 SSH 鍛戒护杩炴帴鏈嶅姟鍣 鍙互澶氬紑绐楀彛銆 **OpenToolbox 涓昏鍔熻兘妯″潡锛** @@ -59,11 +59,11 @@ 鑷畾涔夐粦鑹茬殑鏍囬鏍忥紝涓嶈绯荤粺鑷甫鐨勬爣棰樻爮妯″潡銆 -hacker宸ュ叿绠辨ā鍧椼 +hacker 宸ュ叿绠辨ā鍧椼 -鐖櫕銆佺埇鍙栨渶鏂扮殑缃戠粶瀹夊叏鏂伴椈鏄剧ず鍒癎UI妯″潡銆 +鐖櫕銆佺埇鍙栨渶鏂扮殑缃戠粶瀹夊叏鏂伴椈鏄剧ず鍒 GUI 妯″潡銆 -Hacker瀛︿範璺嚎銆乭acking鎸囦护鎼滅储妯″潡銆 +Hacker 瀛︿範璺嚎銆乭acking 鎸囦护鎼滅储妯″潡銆 **璐熻矗绯荤粺妯″潡锛** @@ -122,26 +122,11 @@ npm run dev npm run build:win32 ``` -**iooc-admin 鍚庡彴鏉冮檺绠$悊绯荤粺寮婧愬瓙椤圭洰**锛氾紙鍦 **[iooc-vue-admin](https://gitee.com/OpenDevel/java-for-linux/tree/master/%E5%BC%80%E6%BA%90%E5%AD%90%E4%BB%93%E5%BA%93/iooc-vue-admin)** 鏂囦欢澶癸級銆 - -**馃挕 浣跨敤璇存槑锛** - -```shell -# 鍏嬮殕椤圭洰 -git clone https://gitee.com/OpenDevel/iooc-vue-admin -# 杩涘叆椤圭洰鐩綍 -cd iooc-admin -# 瀹夎渚濊禆 -yarn -# 鏈湴寮鍙 鍚姩椤圭洰 -yarn dev -``` - -**foodie-mall 鍚冭揣鍟嗗煄椤圭洰**锛堝湪 foodie-center foodie-cloud foodie-dev foodie-payment foodie-shop nginx-url-hash mybatis-generator sso-mtv sso-music java-for-gitee 寮婧愮瑪璁版枃浠跺す锛夈 +**猸恌oodie-mall 鍚冭揣鍟嗗煄椤圭洰**锛堝湪 **foodie-center foodie-cloud foodie-dev foodie-payment foodie-shop nginx-url-hash mybatis-generator sso-mtv sso-music java-for-gitee 寮婧愮瑪璁** 鏂囦欢澶癸級銆 **绠浠:** -涓撲负瀹㈡埛鎻愪緵铔嬬硶鐐瑰績銆侀ゼ骞茶啫鍖栥佺啛椋熻倝绫汇佺礌椋熷崵鍛炽佸潥鏋滅倰璐с佺硸鏋滆湝楗佸阀鍏嬪姏鏋滃喕銆佹捣椴滄捣鍛炽佽姳鑼躲佹灉鑼躲佺敓椴溿佽敩鏋溿侀鐗╃郴鐨勭洿鎾喘鐗╁钩鍙帮紝闆嗘垚浜嗙洿鎾璐寚瀵煎鎴疯喘涔板晢鍝佷紭璐ㄦ湇鍔° +涓撲负瀹㈡埛鎻愪緵铔嬬硶鐐瑰績銆侀ゼ骞茶啫鍖栥佺啛椋熻倝绫汇佺礌椋熷崵鍛炽佸潥鏋滅倰璐с佺硸鏋滆湝楗佸阀鍏嬪姏鏋滃喕銆佹捣椴滄捣鍛炽佽姳鑼躲佹灉鑼躲佺敓椴溿佽敩鏋溿佲瓙鍚冭揣绯荤殑鐩存挱瀵艰喘鐢靛晢骞冲彴锛岄泦鎴愪簡鐩存挱瀵艰喘鎸囧瀹㈡埛璐拱鍟嗗搧浼樿川鏈嶅姟銆 **foodie-mall 鍚冭揣鍟嗗煄鏍稿績绯荤粺妯″潡锛** @@ -150,46 +135,42 @@ yarn dev 鐢ㄦ埛涓績绯荤粺锛氱敤鎴蜂俊鎭ā鍧椼佸ご鍍忎笂浼犳牳蹇冩ā鍧椼佽鍗曠鐞嗘ā鍧椼佽瘎浠风鐞嗘ā鍧椼 -鏀粯涓績鏍稿績绯荤粺锛氬井淇℃敮浠樻牳蹇冩ā鍧椼佹敮浠樺疂鏀粯鏍稿績妯″潡銆 +猸愭敮浠樹腑蹇冩牳蹇冪郴缁燂細寰俊鏀粯鏍稿績妯″潡銆佹敮浠樺疂鏀粯鏍稿績妯″潡銆 鏁版嵁搴撴牳蹇冪郴缁燂細鏁版嵁搴撹〃鏍稿績妯″潡銆 -鐩存挱瀵艰喘瀛愰」鐩細寮濮嬬洿鎾牳蹇冩ā鍧椼佺洿鎾潈闄愭帶鍒舵ā鍧椼佽鐪嬬洿鎾牳蹇冩ā鍧椼乄ebSocket 淇′护鏈嶅姟鍣ㄦā鍧椼丅ootstrap 鍓嶇鐩存挱妯℃澘妯″潡銆 +猸愮洿鎾璐瓙椤圭洰锛氬紑濮嬬洿鎾牳蹇冩ā鍧椼佺洿鎾潈闄愭帶鍒舵ā鍧椼佽鐪嬬洿鎾牳蹇冩ā鍧椼乄ebSocket 淇′护鏈嶅姟鍣ㄦā鍧椼丅ootstrap 鍓嶇鐩存挱妯℃澘妯″潡銆 + +猸怤ginx 闆嗙兢绯荤粺锛歀VS 鍙屾満涓诲銆丯ginx 鍙屾満鐑銆佽礋杞藉潎琛°佸姩闈欏垎绂汇乀omcat 闆嗙兢銆佺綉鍏炽佸弽鍚戜唬鐞嗐 -Nginx 闆嗙兢绯荤粺锛歀VS 鍙屾満涓诲銆丯ginx 鍙屾満鐑銆佽礋杞藉潎琛°佸姩闈欏垎绂汇乀omcat 闆嗙兢銆佺綉鍏炽佸弽鍚戜唬鐞嗐 +猸怰edis 鍒嗗竷寮忕紦瀛樼郴缁燂細杞挱鍥剧紦瀛樸佸晢鍝佸垎绫荤紦瀛樸佸垎甯冨紡缂撳瓨璐墿杞︺丷edis 涓讳粠澶嶅埗璇诲啓鍒嗙鏋舵瀯銆丷edis 鍝ㄥ叺鏈哄埗涓庡疄鐜般丼pring Boot 闆嗘垚 Redis 鍝ㄥ叺銆丷edis 闆嗙兢銆丼pring Boot 闆嗘垚 Redis 闆嗙兢銆佺紦瀛樼┛閫忋丷edis 鍒嗗竷寮忕敤鎴蜂細璇濄佸垎甯冨紡浼氳瘽鎷︽埅鍣ㄣ CAS 鍗曠偣鐧婚檰銆 -Redis 鍒嗗竷寮忕紦瀛樼郴缁燂細杞挱鍥剧紦瀛樸佸晢鍝佸垎绫荤紦瀛樸佸垎甯冨紡缂撳瓨璐墿杞︺丷edis 涓讳粠澶嶅埗璇诲啓鍒嗙鏋舵瀯銆丷edis 鍝ㄥ叺鏈哄埗涓庡疄鐜般丼pring Boot 闆嗘垚 Redis 鍝ㄥ叺銆丷edis 闆嗙兢銆丼pring Boot 闆嗘垚 Redis 闆嗙兢銆佺紦瀛樼┛閫忋丷edis 鍒嗗竷寮忕敤鎴蜂細璇濄佸垎甯冨紡浼氳瘽鎷︽埅鍣ㄣ CAS 鍗曠偣鐧婚檰銆 +猸怑lasticsearch 鍒嗗竷寮忔悳绱㈠紩鎿庣郴缁燂細Logstatsh 鍟嗗搧琛ㄦ暟鎹簱鍚屾銆丒lasticsearch 鍟嗗搧鍒嗛〉鎼滅储銆侀珮浜佹帓搴忋 -Elasticsearch 鍒嗗竷寮忔悳绱㈠紩鎿庣郴缁燂細Logstatsh 鍟嗗搧琛ㄦ暟鎹簱鍚屾銆丒lasticsearch 鍟嗗搧鍒嗛〉鎼滅储銆侀珮浜佹帓搴忋 +猸怓astDFS 鍒嗗竷寮忔枃浠剁郴缁燂細FastDFS 澶村儚涓婁紶銆丱SS 澶村儚涓婁紶銆 -FastDFS 鍒嗗竷寮忔枃浠剁郴缁燂細FastDFS 澶村儚涓婁紶銆丱SS 澶村儚涓婁紶銆 +猸怱pring Cloud 寰湇鍔¢噸鏋 Spring Boot 椤圭洰锛氭惌寤洪」鐩暣浣撶粨鏋勩佸叕鍏变緷璧栨ā鍧椼侀泦鎴 Eureka 娉ㄥ唽涓績妯″潡銆佹敼閫犲晢鍝佷腑蹇冩ā鍧椼佹敼閫犵敤鎴蜂腑蹇冩ā鍧椼佹敼閫犺鍗曚腑蹇冩ā鍧椼佹敼閫犺喘鐗╄溅妯″潡銆佺敤鎴锋ā鍧楅泦鎴 Feign 缁勪欢銆佺敤鎴蜂笌璁㈠崟妯″潡闆嗘垚 Hystrix 鐩稿叧缁勪欢銆丆onfig 閰嶇疆涓績妯″潡銆佺敤鎴锋ā鍧楅泦鎴 Config 鐩稿叧缁勪欢銆侀泦鎴 Gateway 缃戝叧涓績妯″潡銆侀壌鏉冧腑蹇冩ā鍧椼侀泦鎴 Sleuth銆乑ipkin銆丒LK 鐩稿叧缁勪欢妯″潡銆侀泦鎴 Stream 寮哄埗閫鍑虹敤鎴枫佸叧闂秴鏃惰鍗曟ā鍧椼 -Spring Cloud寰湇鍔¢噸鏋凷pring Boot椤圭洰锛氭惌寤洪」鐩暣浣撶粨鏋勩佸叕鍏变緷璧栨ā鍧椼侀泦鎴 Eureka 娉ㄥ唽涓績妯″潡銆佹敼閫犲晢鍝佷腑蹇冩ā鍧椼佹敼閫犵敤鎴蜂腑蹇冩ā鍧椼佹敼閫犺鍗曚腑蹇冩ā鍧椼佹敼閫犺喘鐗╄溅妯″潡銆佺敤鎴锋ā鍧楅泦鎴 Feign 缁勪欢銆佺敤鎴蜂笌璁㈠崟妯″潡闆嗘垚 Hystrix 鐩稿叧缁勪欢銆丆onfig 閰嶇疆涓績妯″潡銆佺敤鎴锋ā鍧楅泦鎴 Config 鐩稿叧缁勪欢銆侀泦鎴 Gateway 缃戝叧涓績妯″潡銆侀壌鏉冧腑蹇冩ā鍧椼侀泦鎴 Sleuth銆乑ipkin銆丒LK 鐩稿叧缁勪欢妯″潡銆侀泦鎴 Stream 寮哄埗閫鍑虹敤鎴枫佸叧闂秴鏃惰鍗曟ā鍧椼 +猸怐ocker 閮ㄧ讲娉ㄥ唽涓績銆侀厤缃腑蹇冦侀壌鏉冧腑蹇冦佺敤鎴蜂腑蹇冦佺綉鍏充腑蹇冨井鏈嶅姟銆丯ginx 鍓嶇鍐呭涓績绯荤粺銆 -Docker 閮ㄧ讲娉ㄥ唽涓績銆侀厤缃腑蹇冦侀壌鏉冧腑蹇冦佺敤鎴蜂腑蹇冦佺綉鍏充腑蹇冨井鏈嶅姟銆丯ginx 鍓嶇鍐呭涓績绯荤粺銆 -闃块噷浜戦儴缃 浜戞暟鎹簱 MySQL銆佷簯鏁版嵁搴 Redis銆佷簯娑堟伅涓棿浠禦abbitMQ銆 +猸愰樋閲屼簯閮ㄧ讲 浜戞暟鎹簱 MySQL銆佷簯鏁版嵁搴 Redis銆佷簯娑堟伅涓棿浠 RabbitMQ銆 -K8S 閮ㄧ讲 RabbitMQ銆佹敞鍐屼腑蹇冦侀厤缃腑蹇冮泦缇ゃ侀壌鏉冧腑蹇冮泦缇ゃ佺敤鎴蜂腑蹇冮泦缇ゃ佸晢鍝佷腑蹇冮泦缇ゃ佽喘鐗╄溅涓績闆嗙兢銆佽鍗曚腑蹇冮泦缇ゃ佺綉鍏充腑蹇冮泦缇ゃ傝嚜鐢辨墿缂╁ 鐢ㄦ埛涓績闆嗙兢銆佸畨瑁 Istio銆並native 鏈夊鎴风璇锋眰灏辫嚜鍔ㄤ几缂╂寚瀹氬鍣ㄣ +猸怟8S 閮ㄧ讲 RabbitMQ銆佹敞鍐屼腑蹇冦侀厤缃腑蹇冮泦缇ゃ侀壌鏉冧腑蹇冮泦缇ゃ佺敤鎴蜂腑蹇冮泦缇ゃ佸晢鍝佷腑蹇冮泦缇ゃ佽喘鐗╄溅涓績闆嗙兢銆佽鍗曚腑蹇冮泦缇ゃ佺綉鍏充腑蹇冮泦缇ゃ傝嚜鐢辨墿缂╁ 鐢ㄦ埛涓績闆嗙兢銆佸畨瑁 Istio銆並native 鏈夊鎴风璇锋眰灏辫嚜鍔ㄤ几缂╂寚瀹氬鍣ㄣ **璐熻矗绯荤粺妯″潡锛** -1. 璐熻矗瀹炵幇鍟嗗搧鎼滅储鏍稿績妯″潡銆 - +1. 猸愯礋璐e疄鐜板晢鍝佹悳绱㈡牳蹇冩ā鍧椼 2. 璐熻矗瀹炵幇璐墿杞︽牳蹇冩ā鍧椼 - -3. 璐熻矗瀹炵幇璁㈠崟鏍稿績妯″潡銆 - +3. 猸愯礋璐e疄鐜拌鍗曟牳蹇冩ā鍧椼 4. 璐熻矗瀹炵幇澶村儚涓婁紶鏍稿績妯″潡銆 - 5. 璐熻矗瀹炵幇鏁版嵁搴撹〃鏍稿績妯″潡銆 - -6. 璐熻矗瀹炵幇鐩存挱瀵艰喘瀛愰」鐩牳蹇冩ā鍧椼 +6. 猸愯礋璐e疄鐜扮洿鎾璐瓙椤圭洰鏍稿績妯″潡銆 **foodie-mall 鍚冭揣鍟嗗煄鎶鏈爤锛** -閲囩敤鍓嶅悗绔垎绂诲崟浣撱侀泦缇ゃ佸垎甯冨紡銆佸井鏈嶅姟銆佸鍣ㄥ寲鏋舵瀯寮鍙戞ā寮忋 +猸愰噰鐢ㄥ墠鍚庣鍒嗙鍗曚綋銆侀泦缇ゃ佸垎甯冨紡銆佸井鏈嶅姟銆佸鍣ㄥ寲鏋舵瀯寮鍙戞ā寮忋 -鍚庣锛歋pring Boot 2.1.5 鏍稿績鎶鏈丼pring銆丼pring MVC銆丮yBatis銆丼wagger 2銆乀omcat 9.0.24闆嗙兢銆丣DK 8銆丮aven銆丷edis銆丩VS銆丯ginx銆丒lasticsearch銆丩ogstatsh銆丗astDFS銆丱SS銆丩ombok 1.18.8銆丼pring Cloud Greenwich.SR1 鏍稿績鎶鏈丒ureka銆丷ibbon銆丗eign銆丠ystrix銆丆onfig銆丟ateway銆丣WT 3.7.0銆丼leuth銆乑ipkin 2.8.4銆丒LK 5.2銆丼tream銆丏ocker銆並8S銆両stio銆並native銆丱penToolbox銆乂Mware銆 +鍚庣锛氣瓙Spring Boot 2.1.5 鏍稿績鎶鏈丼pring銆丼pring MVC銆丮yBatis銆丼wagger 2銆乀omcat 9.0.24銆丣DK 8銆丮aven銆丷edis銆丩VS銆丯ginx銆丒lasticsearch銆丩ogstatsh銆丗astDFS銆丱SS銆丩ombok 1.18.8銆佲瓙Spring Cloud Greenwich.SR1 鏍稿績鎶鏈丒ureka銆丷ibbon銆丗eign銆丠ystrix銆丆onfig銆丟ateway銆丣WT 3.7.0銆丼leuth銆乑ipkin 2.8.4銆丒LK 5.2銆丼tream銆佲瓙Docker銆佲瓙K8S銆両stio銆並native銆丱penToolbox銆乂Mware銆 鏁版嵁搴擄細MariaDB 10.4.8.1銆丠ikariCP 鏁版嵁婧愩 @@ -201,43 +182,56 @@ K8S 閮ㄧ讲 RabbitMQ銆佹敞鍐屼腑蹇冦侀厤缃腑蹇冮泦缇ゃ侀壌鏉冧腑蹇冮泦缇ゃ **涓氱哗锛** -1. 椤圭洰鍒嗗眰璁捐銆係wagger 2 鍚庣鎺ュ彛 API 鏂囨。鐢熸垚銆侾ostMan 娴嬭瘯鎺ュ彛 API銆備簯鏈嶅姟鍣ㄥ墠绔悗绔」鐩儴 缃蹭笌涓婄嚎銆 +1. 猸愬墠鍚庣杩斿洖璇锋眰鐨勬暟鎹牸寮忎笉涓鑷撮棶棰樸傝姹傛柟娉曚笉鍖归厤闂銆侻yBatis 鍒嗛〉鏁版嵁涓嶆纭棶棰樸傝法鍩熼厤缃 瀹炵幇鍓嶅悗绔仈璋冮棶棰樸傞儴缃查」鐩椂 Tomcat 鐨勬柊 Cookie 澶勭悊鍣ㄩ棶棰樸傝繙绋嬫暟鎹簱琛ㄥ鍏ラ棶棰樸 +2. 猸怤ginx 鎵句笉鍒 PID 闂銆侰entOS 铏氭嫙鏈哄厠闅嗙殑缃戠粶闂銆 +3. 猸愮敤鎴蜂慨鏀瑰畬淇℃伅淇濊瘉 Token 鏄渶鏂扮殑闂銆傚墠绔 Get 璇锋眰鎼哄甫 Headers 澶辨晥闂銆 CAS 鍗曠偣鐧婚檰鍓嶇 鍙戣捣楠岃瘉锛屽悗绔幏鍙栦笉鍒 Cookie 闂銆 +4. 猸怢ogstatsh 鏁版嵁搴撳悓姝ョ増鏈笉鍖归厤闂銆侺ogstash 鑷畾涔夋ā鏉块厤缃腑鏂囧垎璇 Mappings 鍚屾澶辨晥闂銆 +5. 猸怓astDFS 杩借釜鏈嶅姟鍣ㄥ櫒鏃犳硶璁块棶闂銆侽SS 澶村儚鏃犳硶涓婁紶闂銆 +6. 猸愬惎鍔ㄦ姤 Ambiguous mapping 閿欒闂銆亂ml 閰嶇疆鏂囦欢瀛樺偍鍦 Github 鏃犳硶鍔犺浇閰嶇疆闂銆 +7. 猸愬紩鍏 Bus 渚濊禆 Zipkin 閰嶇疆涓嶈捣浣滅敤闂銆俽etry 涓 requeue 閰嶇疆涔嬮棿鐨勫啿绐侀棶棰樸侱ocker 閮ㄧ讲寰湇鍔 Cookie 鍩熻缃棶棰樸 +8. 猸怌entOS 鎼缓 K8S 鏃犳硶璁块棶闀滃儚闂銆丳ing 涓嶉 ClusterIP 闂銆乧ni0 缃戠粶閿欒闂銆丮aster Ping 涓嶉 Node 鑺傜偣闂銆乮pv4 鍐呮牳鐗堟湰浣庨棶棰樸乭elm install 鏉冮檺闂銆 +9. 猸愬浣曠郴缁熺殑寮鍙戜竴涓崟浣撱侀泦缇ゃ佸垎甯冨紡銆佸井鏈嶅姟銆佸鍣ㄥ寲鏋舵瀯椤圭洰锛屽ぇ閮ㄥ垎鐨勯」鐩兘绂讳笉寮鍐呭涓績绯荤粺銆佹敮浠樹腑蹇冪郴缁熴佺敤鎴蜂腑蹇冪郴缁燂紝 绯荤粺鍐呴儴鐨勬ā鍧楅兘鏄氱敤鐨勶紝鍙互鍊熼壌澶嶇敤椤圭洰鐨勯氱敤绯荤粺妯″潡寮鍙戝叾浠栭」鐩 +10. 猸怗ateway 閰嶇疆缃戝叧灞 Redis 闄愭祦銆備簡瑙e彲浠ラ氳繃闃茬伀澧欍佽礋杞藉潎琛°佺紦瀛樸侀檺娴併並8S 寮规ф墿缂╁鎶鏈 缂撹В DDOS 鏀诲嚮銆 +11. 猸怌onfig Server 浣跨敤瀵圭О鎬у瘑閽ヨ繘琛 Github 閰嶇疆 yml 鏂囦欢 灞炴у艰繘琛屽姞瀵嗕笌瑙e瘑銆 +12. 鎼缓 Nginx 闆嗙兢绯荤粺锛孯edis 涓讳粠澶嶅埗璇诲啓鍒嗙鏋舵瀯浣滀负鏁版嵁搴撶殑淇濇姢灞忛殰绯荤粺銆 +13. 椤圭洰鍒嗗眰璁捐銆係wagger 2 鍚庣鎺ュ彛 API 鏂囨。鐢熸垚銆侾ostMan 娴嬭瘯鎺ュ彛 API銆備簯鏈嶅姟鍣ㄥ墠绔悗绔」鐩儴缃蹭笌涓婄嚎銆 -2. 鍓嶅悗绔繑鍥炶姹傜殑鏁版嵁鏍煎紡涓嶄竴鑷撮棶棰樸傝姹傛柟娉曚笉鍖归厤闂銆侻yBatis鍒嗛〉鏁版嵁涓嶆纭棶棰樸傝法鍩熼厤缃 瀹炵幇鍓嶅悗绔仈璋冮棶棰樸傞儴缃查」鐩椂Tomcat鐨勬柊Cookie澶勭悊鍣ㄩ棶棰樸傝繙绋嬫暟鎹簱琛ㄥ鍏ラ棶棰樸 -3. 鎼缓Nginx闆嗙兢绯荤粺锛孯edis涓讳粠澶嶅埗璇诲啓鍒嗙鏋舵瀯浣滀负鏁版嵁搴撶殑淇濇姢灞忛殰绯荤粺銆 -4. Nginx鎵句笉鍒癙ID闂銆侰entOS铏氭嫙鏈哄厠闅嗙殑缃戠粶闂銆 -5. 鐢ㄦ埛淇敼瀹屼俊鎭繚璇 Token 鏄渶鏂扮殑闂銆傚墠绔疓et璇锋眰鎼哄甫Headers澶辨晥闂銆 CAS 鍗曠偣鐧婚檰鍓嶇 鍙戣捣楠岃瘉锛屽悗绔幏鍙栦笉鍒癈ookie闂銆 -6. Logstatsh 鏁版嵁搴撳悓姝ョ増鏈笉鍖归厤闂銆侺ogstash 鑷畾涔夋ā鏉块厤缃腑鏂囧垎璇 Mappings 鍚屾澶辨晥闂銆 -7. FastDFS 杩借釜鏈嶅姟鍣ㄥ櫒鏃犳硶璁块棶闂銆侽SS 澶村儚鏃犳硶涓婁紶闂銆 -8. 鍚姩鎶 Ambiguous mapping 閿欒闂銆亂ml 閰嶇疆鏂囦欢瀛樺偍鍦 Github 鏃犳硶鍔犺浇閰嶇疆闂銆 -9. Config Server浣跨敤瀵圭О鎬у瘑閽ヨ繘琛 Github 閰嶇疆 yml 鏂囦欢 灞炴у艰繘琛屽姞瀵嗕笌瑙e瘑銆 -10. Gateway 閰嶇疆缃戝叧灞 Redis闄愭祦銆備簡瑙e彲浠ラ氳繃闃茬伀澧欍佽礋杞藉潎琛°佺紦瀛樸侀檺娴併並8S寮规ф墿缂╁鎶鏈 缂撹В DDOS 鏀诲嚮銆 -11. 寮曞叆 Bus 渚濊禆 Zipkin 閰嶇疆涓嶈捣浣滅敤闂銆俽etry 涓 requeue 閰嶇疆涔嬮棿鐨勫啿绐侀棶棰樸侱ocker 閮ㄧ讲寰湇鍔 Cookie 鍩熻缃棶棰樸 -12. CentOS 鎼缓K8S鏃犳硶璁块棶闀滃儚闂銆丳ing 涓嶉 ClusterIP 闂銆乧ni0 缃戠粶閿欒闂銆丮aster Ping 涓嶉 Node 鑺傜偣闂銆乮pv4 鍐呮牳鐗堟湰浣庨棶棰樸乭elm install 鏉冮檺闂銆 -13. 濡備綍绯荤粺鐨勫紑鍙戜竴涓崟浣撱侀泦缇ゃ佸垎甯冨紡銆佸井鏈嶅姟銆佸鍣ㄥ寲鏋舵瀯椤圭洰锛屽ぇ閮ㄥ垎鐨勯」鐩兘绂讳笉寮鍐呭涓績绯荤粺銆佹敮浠樹腑蹇冪郴缁熴佺敤鎴蜂腑蹇冪郴缁燂紝 绯荤粺鍐呴儴鐨勬ā鍧楅兘鏄氱敤鐨勶紝鍙互鍊熼壌澶嶇敤椤圭洰鐨勯氱敤绯荤粺妯″潡寮鍙戝叾浠栭」鐩 +**馃挕 浣跨敤璇存槑锛** +```shell +# 鍏嬮殕椤圭洰 +git clone https://gitee.com/OpenDevel/java-for-linux.git + +# 杩涘叆 foodie-dev 鏂囦欢澶 +cd foodie-dev + +# 瀹夎渚濊禆骞剁紪璇 +mvn clean install -**webrtc-live 鐩存挱瀵艰喘瀛愰」鐩**锛氾紙鍦 **WebRTC** 鏂囦欢澶癸級銆 +# 鍦 IDEA 閲岃繘琛岄厤缃佷慨鏀广佸惎鍔ㄩ」鐩 +``` + +**猸恮ebrtc-live 鐩存挱瀵艰喘瀛愰」鐩**锛氾紙鍦 **WebRTC** 鏂囦欢澶癸級銆 **绠浠:** -姝ら」鐩负 foodie-mall 鍚冭揣鍟嗗煄瀛愰」鐩紝涓昏鏄负瀹㈡埛鎻愪緵鐩存挱鎸囧鐢ㄦ埛璐墿锛岃В绛旂敤鎴疯喘鐗╃殑闂锛屼富鎾彲浠ヨ繘琛岀洿鎾璐紝瀹㈡埛鍙互瑙傜湅鐩存挱瀵艰喘浼樿川鏈嶅姟銆 +姝ら」鐩负 foodie-mall 鍚冭揣鍟嗗煄瀛愰」鐩紝猸愪富瑕佹槸涓哄鎴锋彁渚涚洿鎾寚瀵肩敤鎴疯喘鐗╋紝瑙g瓟鐢ㄦ埛璐墿鐨勯棶棰橈紝涓绘挱鍙互杩涜鐩存挱瀵艰喘锛屽鎴峰彲浠ヨ鐪嬬洿鎾璐紭璐ㄦ湇鍔° **webrtc-live 鐩存挱瀵艰喘鏍稿績绯荤粺妯″潡锛** 鍐呭涓績鏍稿績绯荤粺锛氬紑濮嬬洿鎾牳蹇冩ā鍧椼佺洿鎾潈闄愭帶鍒舵ā鍧椼佽鐪嬬洿鎾牳蹇冩ā鍧椼乄ebSocket 淇′护鏈嶅姟鍣ㄦā鍧椼丅ootstrap 鍓嶇鐩存挱妯℃澘妯″潡銆 -鍚冭揣鍟嗗煄鍐呭涓績绯荤粺锛氬晢鍩庨椤垫帹鑽愮洿鎾璐ā鍧椼佸晢鍝佷笌鐩存挱鎺ㄩ攢鍟嗗搧鍏宠仈妯″潡銆 +猸愬悆璐у晢鍩庡唴瀹逛腑蹇冪郴缁燂細鍟嗗煄棣栭〉鎺ㄨ崘鐩存挱瀵艰喘妯″潡銆佸晢鍝佷笌鐩存挱鎺ㄩ攢鍟嗗搧鍏宠仈妯″潡銆 -Vue 鍓嶅悗绔垎绂荤洿鎾郴缁熼噸鏋勶紝鍓嶅悗绔垎绂讳笉鍒嗙鐩存挱绯荤粺锛氶噸鏋勫唴瀹逛腑蹇冩牳蹇冪郴缁熴侀噸鏋勫悆璐у晢鍩庡唴瀹逛腑蹇冪郴缁熴 +猸怴ue 鍓嶅悗绔垎绂荤洿鎾郴缁熼噸鏋勶紝鍓嶅悗绔垎绂讳笉鍒嗙鐩存挱绯荤粺锛氶噸鏋勫唴瀹逛腑蹇冩牳蹇冪郴缁熴侀噸鏋勫悆璐у晢鍩庡唴瀹逛腑蹇冪郴缁熴 -OpenVidu CE 鐢熶骇绾у崟浣撴灦鏋 WebRTC 鐩存挱绯荤粺閲嶆瀯 Vue 鍗曚綋鏋舵瀯鐩存挱绯荤粺锛氭彁渚涚敓浜х骇鐨刉ebRTC鐩存挱SDK & API鏈嶅姟锛岄噸鏋勪负鍏煎鎬у己銆佺敓浜х幆澧冦佺ǔ瀹氱増 WebRTC 鐩存挱绯荤粺銆 +猸怬penVidu CE 鐢熶骇绾у崟浣撴灦鏋 WebRTC 鐩存挱绯荤粺閲嶆瀯 Vue 鍗曚綋鏋舵瀯鐩存挱绯荤粺锛氭彁渚涚敓浜х骇鐨 WebRTC 鐩存挱 SDK & API 鏈嶅姟锛岄噸鏋勪负鍏煎鎬у己銆佺敓浜х幆澧冦佺ǔ瀹氱増 WebRTC 鐩存挱绯荤粺銆 -OpenVidu Pro 鍟嗕笟绾ч泦缇ゆ灦鏋 WebRTC 鐩存挱绯荤粺閲嶆瀯 OpenVidu CE 鐢熶骇绾у崟浣撴灦鏋勭洿鎾郴缁燂細鎻愪緵鍟嗙敤鐢熶骇绾 WebRTC 鐩存挱闆嗙兢鏈嶅姟銆佸悗鍙扮洃瑙嗘湇鍔★紝绠$悊鍜屾煡鐪嬫墍鏈夎棰戜細璁湇鍔°佸綍闊崇鐞嗘湇鍔°佷細璇濆巻鍙茶褰曟湇鍔°侀泦缇ょ鐞嗘湇鍔°佸鎴峰湴鐞嗕綅缃湇鍔°丒lasticsearch & Kibana 鍙鍖栧悗鍙拌棰戜細璁湇鍔°佸綍闊崇鐞嗘湇鍔°佷細璇濆巻鍙茶褰曟湇鍔°侀泦缇ょ鐞嗘湇鍔★紝閲嶆瀯涓哄彲鍟嗙敤澶氫汉 WebRTC 鐩存挱绯荤粺銆 +猸怬penVidu Pro 鍟嗕笟绾ч泦缇ゆ灦鏋 WebRTC 鐩存挱绯荤粺閲嶆瀯 OpenVidu CE 鐢熶骇绾у崟浣撴灦鏋勭洿鎾郴缁燂細鎻愪緵鍟嗙敤鐢熶骇绾 WebRTC 鐩存挱闆嗙兢鏈嶅姟銆佸悗鍙扮洃瑙嗘湇鍔★紝绠$悊鍜屾煡鐪嬫墍鏈夎棰戜細璁湇鍔°佸綍闊崇鐞嗘湇鍔°佷細璇濆巻鍙茶褰曟湇鍔°侀泦缇ょ鐞嗘湇鍔°佸鎴峰湴鐞嗕綅缃湇鍔°丒lasticsearch & Kibana 鍙鍖栧悗鍙拌棰戜細璁湇鍔°佸綍闊崇鐞嗘湇鍔°佷細璇濆巻鍙茶褰曟湇鍔°侀泦缇ょ鐞嗘湇鍔★紝閲嶆瀯涓哄彲鍟嗙敤澶氫汉 WebRTC 鐩存挱绯荤粺銆 **璐熻矗绯荤粺妯″潡锛** -1. 璐熻矗瀹炵幇 Java 淇′护鏈嶅姟鍣ㄦ帴鏀 KMS 娴佸獟浣撴湇鍔″櫒鎴栧鎴风鍙戞潵鐨 WebRTC 鏁版嵁鏍稿績妯″潡銆 -2. 璐熻矗瀹炵幇灏佽鐢ㄦ埛浼氳瘽涓庢祦濯掍綋鍏冪礌銆佹祦濯掍綋绠¢亾杩涜涓瀵瑰鐩存挱鏍稿績妯″潡銆 +1. 猸愯礋璐e疄鐜 Java 淇′护鏈嶅姟鍣ㄦ帴鏀 KMS 娴佸獟浣撴湇鍔″櫒鎴栧鎴风鍙戞潵鐨 WebRTC 鏁版嵁鏍稿績妯″潡銆 +2. 猸愯礋璐e疄鐜板皝瑁呯敤鎴蜂細璇濅笌娴佸獟浣撳厓绱犮佹祦濯掍綋绠¢亾杩涜涓瀵瑰鐩存挱鏍稿績妯″潡銆 3. 璐熻矗瀹炵幇鐩存挱鏉冮檺鎺у埗妯″潡銆 4. 璐熻矗瀹炵幇 Bootstrap 鍓嶇鐩存挱妯℃澘鏀归犳暣鍚堜綔涓哄墠绔〉闈㈡ā鍧椼 @@ -245,7 +239,7 @@ OpenVidu Pro 鍟嗕笟绾ч泦缇ゆ灦鏋 WebRTC 鐩存挱绯荤粺閲嶆瀯 OpenVidu CE 鐢熶骇 閲囩敤鍓嶅悗绔笉鍒嗙鍒板垎绂诲崟浣撱侀泦缇ゃ佸垎甯冨紡銆佸井鏈嶅姟銆佸鍣ㄥ寲鏋舵瀯寮鍙戞ā寮忋 -鍚庣锛歋pring Boot 2.2.4銆丼pring銆丼pring MVC銆丼pring Security銆丼pring WebSocket 鏍稿績鎶鏈並urento Client 6.14.1銆乀omcat 9.0.24銆丣DK 8銆丮aven銆並urento Media Server銆丆oturn銆乂Mware銆丱penVidu CE銆丱penVidu Pro銆 +鍚庣锛氣瓙Spring Boot 2.2.4銆丼pring銆丼pring MVC銆丼pring Security銆佲瓙Spring WebSocket 鏍稿績鎶鏈並urento Client 6.14.1銆乀omcat 9.0.24銆丣DK 8銆丮aven銆並urento Media Server銆丆oturn銆乂Mware銆佲瓙OpenVidu CE銆佲瓙OpenVidu Pro銆 鏈嶅姟鍣ㄧ郴缁燂細CentOS 7.4銆 @@ -255,19 +249,19 @@ OpenVidu Pro 鍟嗕笟绾ч泦缇ゆ灦鏋 WebRTC 鐩存挱绯荤粺閲嶆瀯 OpenVidu CE 鐢熶骇 **涓氱哗锛** -1. 閲嶆瀯鍓嶅悗绔垎绂 Kurento 鐨 Client 瀹㈡埛绔氫俊闂銆備笁灞傝法鍩熼棶棰樸傚墠鍚庣寮鍚 HTTPS 鏈嶅姟鍣ㄩ棶棰樸侰hrome 娴忚鍣ㄦ棤娉曡闂 HTTPS 闂锛孲pring Security 鐧诲綍鎺ュ彛杩斿洖鏁版嵁鏍煎紡闂銆 -2. 閲嶆瀯椤圭洰涓哄墠鍚庣鍒嗙椤圭洰銆佸墠绔娇鐢 Vue 妗嗘灦銆佸墠鍚庣浣跨敤 STOMP 瀛愬崗璁氫俊銆 -3. 闃呰 WebRTC 寮婧愭妧鏈嫳鏂囨枃妗c -4. 浜戞湇鍔″櫒椤圭洰鎼缓寮婧 KMS 娴佸獟浣撴湇鍔″櫒銆佸紑婧 Coturn 绌块忔湇鍔″櫒閮ㄧ讲涓庝笂绾裤 -5. 涓烘湭鏉ョ粨鍚 5G 鏃朵唬鐨勯珮甯﹀銆佽秴浣庡欢鏃剁殑鐗规у仛鍑嗗锛岃祴浜 WebRTC 浣庡欢鏃舵ц兘銆 -6. 浼犵粺鐨 WebRTC 鐩存挱锛屽彧閫傚悎涓瀵逛竴鐩存挱锛屼笉閫傚悎涓瀵瑰鐩存挱銆傚彧鏈夊湪鏈嶅姟鍣ㄧ鎼缓娴佸獟浣撴湇鍔″櫒鎶婂鎴风娴侀噺杞彂鍒版祦濯掍綋鏈嶅姟鍣紝鎵嶉傚悎涓瀵瑰鐩存挱銆 +1. 猸愪笁灞傝法鍩熼棶棰樸傚墠鍚庣寮鍚 HTTPS 鏈嶅姟鍣ㄩ棶棰樸侰hrome 娴忚鍣ㄦ棤娉曡闂 HTTPS 闂锛孲pring Security 鐧诲綍鎺ュ彛杩斿洖鏁版嵁鏍煎紡闂銆傞噸鏋勫墠鍚庣鍒嗙 Kurento 鐨 Client 瀹㈡埛绔氫俊闂銆 +2. 猸愰噸鏋勯」鐩负 Vue 鍓嶅悗绔垎绂婚」鐩佸墠绔娇鐢 Vue 妗嗘灦銆佸墠鍚庣浣跨敤 STOMP 瀛愬崗璁氫俊銆 +3. 猸愰槄璇 WebRTC 寮婧愭妧鏈嫳鏂囨枃妗c +4. 猸愪紶缁熺殑 WebRTC 鐩存挱锛屽彧閫傚悎涓瀵逛竴鐩存挱锛屼笉閫傚悎涓瀵瑰鐩存挱銆傚彧鏈夊湪鏈嶅姟鍣ㄧ鎼缓娴佸獟浣撴湇鍔″櫒鎶婂鎴风娴侀噺杞彂鍒版祦濯掍綋鏈嶅姟鍣紝鎵嶉傚悎涓瀵瑰鐩存挱銆 +5. 浜戞湇鍔″櫒椤圭洰鎼缓寮婧 KMS 娴佸獟浣撴湇鍔″櫒銆佸紑婧 Coturn 绌块忔湇鍔″櫒閮ㄧ讲涓庝笂绾裤 +6. 涓烘湭鏉ョ粨鍚 5G 鏃朵唬鐨勯珮甯﹀銆佽秴浣庡欢鏃剁殑鐗规у仛鍑嗗锛岃祴浜 WebRTC 浣庡欢鏃舵ц兘銆 **馃挕 浣跨敤璇存槑锛** ```shell # 鍏嬮殕椤圭洰 git clone https://gitee.com/OpenDevel/java-for-linux.git -# 杩涘叆 webrtc瀛愰」鐩枃浠跺す +# 杩涘叆 webrtc 瀛愰」鐩枃浠跺す cd webrtc # 瀹夎渚濊禆 mvn clean install @@ -301,35 +295,35 @@ java -jar webrtc-6.14.1-SNAPSHOT.jar https://127.0.0.1:8443/admin.html ``` -**娉℃场鍫傚瓙椤圭洰**锛氾紙鍦 **bubble-hall** 鏂囦欢澶癸級銆 +**猸怞ava 娉℃场鍫傚瓙椤圭洰**锛氾紙鍦 **bubble-hall** 鏂囦欢澶癸級銆 **绠浠嬶細** -璇ラ」鐩槸鍩轰簬C/S鏋舵瀯浼戦棽绫诲瀷娉℃场鍫傛父鎴忥紝鏄竴绉嶇敱閿洏鎿嶄綔鐨勪紤闂插皬娓告垙锛屾父鎴忔帶鍒剁畝渚匡紝鍙浣跨敤涓涓柟鍚戦敭鎺у埗鏂瑰悜锛屽啀鍔犱笂涓涓┖鏍奸敭鏀剧疆娉℃场锛5涓寜閿氨鍙互杩涜娓告垙浜嗐 +猸愯椤圭洰鏄熀浜 C/S 鏋舵瀯浼戦棽绫诲瀷娉℃场鍫傛父鎴忥紝鏄竴绉嶇敱閿洏鎿嶄綔鐨勪紤闂插皬娓告垙锛屾父鎴忔帶鍒剁畝渚匡紝鍙浣跨敤涓涓柟鍚戦敭鎺у埗鏂瑰悜锛屽啀鍔犱笂涓涓┖鏍奸敭鏀剧疆娉℃场锛5 涓寜閿氨鍙互杩涜娓告垙浜嗐 **涓昏鍔熻兘妯″潡锛** - -Control妯″潡鍖呭惈娓告垙閫昏緫璁捐锛屾父鎴忓姩浣滀簨浠剁洃鍚紝Element妯″潡鍖呭惈鍏冪礌鍔犺浇銆佺鐞嗗厓绱狅紝鍏冪礌绫诲瀷锛孎rame妯″潡鍖呭惈绐楀彛鏄剧ず锛屽厓绱犲浘鍍忔覆鏌撶瓑妯″潡銆 + +猸怌ontrol 妯″潡鍖呭惈娓告垙閫昏緫璁捐銆佹父鎴忓姩浣滀簨浠剁洃鍚丒lement 妯″潡鍖呭惈鍏冪礌鍔犺浇銆佺鐞嗗厓绱犮佸厓绱犵被鍨嬨丗rame 妯″潡鍖呭惈绐楀彛鏄剧ず銆佸厓绱犲浘鍍忔覆鏌撶瓑妯″潡銆 **璐d换鎻忚堪锛** -1. 璐熻矗灏忕粍涔嬮棿鍚堢悊鐨勫垎閰嶄换鍔★紝妫鏌ュ皬缁勪换鍔″畬鎴愭儏鍐点 +1. 猸愯礋璐e皬缁勪箣闂村悎鐞嗙殑鍒嗛厤浠诲姟锛屾鏌ュ皬缁勪换鍔″畬鎴愭儏鍐点 2. 璐熻矗瀹炵幇娉℃场鐖嗙偢銆 -3. 璐熻矗瀹炵幇娉℃场鐖嗙偢杞崲涓烘场娉℃尝绾规暟缁勩 +3. 猸愯礋璐e疄鐜版场娉$垎鐐歌浆鎹负娉℃场娉㈢汗鏁扮粍銆 4. 璐熻矗瀹炵幇绠卞瓙涓庢场娉$垎鐐哥鎾炴懅姣併 -5. 璐熻矗瀹炵幇娉℃场娉㈢汗涓庢场娉$垎鐐哥鎾炲舰鎴愯繛鐖嗐 +5. 猸愯礋璐e疄鐜版场娉℃尝绾逛笌娉℃场鐖嗙偢纰版挒褰㈡垚杩炵垎銆 **鎶鏈弿杩帮細** -閲囩敤Java SE 鏍稿績鏋舵瀯寮鍙戞ā寮忋 +猸愰噰鐢 Java SE 鏍稿績鏋舵瀯寮鍙戞ā寮忋 -椤圭洰涓昏鍒╃敤鐨勬妧鏈湁Java SE 1.8 鏍稿績鎶鏈丣Layer銆丼wing銆丮Spaint銆丳hotoshop銆 +椤圭洰涓昏鍒╃敤鐨勬妧鏈湁 Java SE 1.8 鏍稿績鎶鏈丣Layer銆佲瓙Swing銆丮Spaint銆丳hotoshop銆 -寮鍙戠幆澧冿細IntelliJ IDEA寮鍙戝伐鍏枫乄indows 7銆 +寮鍙戠幆澧冿細IntelliJ IDEA 寮鍙戝伐鍏枫乄indows 7銆 **涓氱哗锛** -閫氳繃杩欎釜椤圭洰閿荤偧浜咼ava闈㈠悜瀵硅薄鍒嗘暎寮忛昏緫鎬濈淮锛屾帓闄や笉绗﹀悎閫昏緫鐨勭紪绋嬫濇兂锛屼笉鍚岀殑绫伙紝鍦ㄤ笉鍚岀殑鍖呫佷笉鍚岀殑妯″潡缂栧啓锛岃屼笉鏄竴涓被鍐欏嚭鎵鏈夋父鎴忔ā鍧楀姛鑳斤紱鍊熼壌Spring妗嗘灦IOC銆丏L鎬濇兂锛岀紪鍐欐父鎴忓厓绱犲璞″姞杞界被锛屽厓绱犲璞$鐞嗗櫒绫伙紝濡備綍浠ラ珮鍐呰仛浣庤﹀悎鐨勬柟寮忕鐞嗐佸姞杞芥父鎴忛噷鍚勭瀵硅薄璧勬簮锛涘綋鐒朵綔涓虹粍闀挎渶涓洪噸瑕佺殑鏄紝灏忕粍涔嬮棿濡備綍鍚堢悊鐨勫垎閰嶄换鍔′簡锛屽叡鍚岀殑鍘诲畬鎴愯繖涓」鐩 +閫氳繃杩欎釜椤圭洰閿荤偧浜 Java 闈㈠悜瀵硅薄鍒嗘暎寮忛昏緫鎬濈淮锛屾帓闄や笉绗﹀悎閫昏緫鐨勭紪绋嬫濇兂锛屼笉鍚岀殑绫伙紝鍦ㄤ笉鍚岀殑鍖呫佷笉鍚岀殑妯″潡缂栧啓锛岃屼笉鏄竴涓被鍐欏嚭鎵鏈夋父鎴忔ā鍧楀姛鑳斤紱猸愬熼壌 Spring 妗嗘灦 IOC銆丏L 鎬濇兂锛岀紪鍐欐父鎴忓厓绱犲璞″姞杞界被锛屽厓绱犲璞$鐞嗗櫒绫伙紝濡備綍浠ラ珮鍐呰仛浣庤﹀悎鐨勬柟寮忕鐞嗐佸姞杞芥父鎴忛噷鍚勭瀵硅薄璧勬簮锛涒瓙褰撶劧浣滀负缁勯暱鏈涓洪噸瑕佺殑鏄紝灏忕粍涔嬮棿濡備綍鍚堢悊鐨勫垎閰嶄换鍔′簡锛屽叡鍚岀殑鍘诲畬鎴愯繖涓」鐩 **馃挕 浣跨敤璇存槑锛** @@ -343,7 +337,7 @@ cd target java -jar bubble-hall-1.0-SNAPSHOT.jar ``` -**2048 灏忔父鎴忓瓙椤圭洰**锛氾紙鍦 **2048** 鏂囦欢澶归噷锛夈 +**Java 2048 灏忔父鎴忓瓙椤圭洰**锛氾紙鍦 **2048** 鏂囦欢澶归噷锛夈 **馃挕 浣跨敤璇存槑锛** @@ -357,7 +351,7 @@ cd target java -jar 2048-1.0-SNAPSHOT.jar ``` -**鍏朵粬寮婧愬瓙椤圭洰**锛歝ppmm 瀛愰」鐩悳闆嗕簡甯傞潰涓 JVM 婧愮爜 鎵鏈夌爺绌惰祫鏂欍乤uto-homework 瀛愰」鐩娇鐢 Selenium 搴撹嚜鍔ㄩ夋嫨璇曞嵎閫夐」棰樼瓟棰樿冨嵎锛堝湪 **cppmm** 鏂囦欢澶 **auto-homework** 鏂囦欢澶 **鍏朵粬**鏂囦欢澶癸級銆 +**猸愬叾浠 Java 寮婧愬瓙椤圭洰**锛歝ppmm 瀛愰」鐩悳闆嗕簡甯傞潰涓 JVM 婧愮爜 鎵鏈夌爺绌惰祫鏂欍乤uto-homework 瀛愰」鐩娇鐢 Selenium 搴撹嚜鍔ㄩ夋嫨璇曞嵎閫夐」棰樼瓟棰樿冨嵎锛堝湪 **cppmm** 鏂囦欢澶 **auto-homework** 鏂囦欢澶 **鍏朵粬**鏂囦欢澶癸級銆 **馃挕 浣跨敤璇存槑锛** @@ -365,21 +359,25 @@ java -jar 2048-1.0-SNAPSHOT.jar ### 璐熻矗瀹炵幇 java-for-linux 缁煎悎鍨嬪紑婧愬瓙椤圭洰锛 -1. 璐熻矗瀹炵幇寮婧愯绋嬪瓙椤圭洰銆 +1. 璐熻矗瀹炵幇 Java 寮婧愯绋嬪瓙椤圭洰銆 + +2. 璐熻矗瀹炵幇 Java 寮婧愮瑪璁板瓙椤圭洰銆 + +3. 猸愯礋璐e疄鐜 OpenToolbox 浠块粦瀹㈠懡浠よ缁堢宸ュ叿瀛愰」鐩 -2. 璐熻矗瀹炵幇寮婧愮瑪璁板瓙椤圭洰銆 +4. 璐熻矗瀹炵幇鍏朵粬 Java 寮婧愬瓙椤圭洰銆 -3. 璐熻矗瀹炵幇 OpenToolbox 瀛愰」鐩 +5. 猸愯礋璐e湪寮婧愭寚鍖楅」鐩础鐚紑婧愰」鐩笌鑷獟浣撶粨鍚堢悊璁轰笌瀹為檯妯″潡銆 -4. 璐熻矗瀹炵幇鍏朵粬寮婧愬瓙椤圭洰銆 +6. 猸愯礋璐e疄鐜 webrtc-live 鐩存挱瀵艰喘瀛愰」鐩 -5. 璐熻矗鍦ㄥ紑婧愭寚鍖楅」鐩础鐚紑婧愰」鐩笌鑷獟浣撶粨鍚堝疄鎴樼粡楠 +7. 猸愯礋璐e疄鐜 Java 娉℃场鍫傛父鎴忓瓙椤圭洰銆 -6. 璐熻矗瀹炵幇 WebRTC 鐩存挱瀛愰」鐩 +8. 璐熻矗瀹炵幇 Java 2048 灏忔父鎴忓瓙椤圭洰銆 -7. 璐熻矗瀹炵幇 娉℃场鍫傚瓙椤圭洰 +9. 猸愯礋璐e疄鐜板紑鍙戣呰嫳璇瓙椤圭洰銆 -8. 璐熻矗瀹炵幇 2048 灏忔父鎴忓瓙椤圭洰 +10. 猸愯礋璐e疄鐜 cppmm 瀛愰」鐩 ### java-for-linux 缁煎悎鍨嬪紑婧愰」鐩妧鏈爤锛 @@ -387,30 +385,27 @@ Gitee銆丟ithub銆佷负鐭ョ瑪璁般丅ilibili銆丣etBrains銆乀eambition銆丳hotoshop銆 ### java-for-linux 缁煎悎鍨嬪紑婧愰」鐩笟缁╋細 -1. 鑾峰緱 JetBrains 寮婧愯鍙瘉 鍙互鍏嶈垂浣跨敤 JetBrains 鍏ㄥ妗舵墍鏈変骇鍝 IntelliJ IDEA DataGrip WebStorm - Clion TeamCity 绛 浣跨敤 JetBrains 鍚勭宸ュ叿闆嗘垚鍒 IntelliJ IDEA 宸ュ叿閲屻 +1. 猸愯В鍐充簡澶嶆潅鐨 JVM 婧愮爜鍐 C & C++ 鍐呭祵绾у埆 Native 鍑芥暟闂銆丩inux 鐨 JNI 鍔ㄦ佸嚱鏁版敞鍐岄棶棰橈紝涓哄紑婧愮ぞ鍖烘彁渚涗簡鐮旂┒ Java Native 灞傚嚱鏁版簮鐮佽В鍐虫柟妗堛 +2. 猸怞ava 鍐欏唴瀛樼骇鍒父鎴忓畨鍏ㄨВ鍐虫柟妗堛侸ava 濡備綍杩涜鍥惧儚璇嗗埆闂銆傛纭悊瑙 C 璇█鎸囬拡闂銆 +3. 猸愮Н绱 1 骞 Java 寮婧愰」鐩疄鎴樼粡楠 +4. 猸愯幏寰 Gitee 瀹樻柟寮婧愭寚鍖楅」鐩础鐚焊璐ㄨ瘉涔 T 鎭 骞跺湪寮婧愭寚鍖楃數瀛愪功缂栧啓鎴愬憳鏍忕讲鍚 鎴愪负璇ラ」鐩殑浼樿川璐$尞鑰 鎴愪负鍏朵粬寮婧愮埍濂借呯殑寮婧愰」鐩础鐚呫 +5. 猸愪娇鐢 java-for-linux 缁煎悎鍨嬪紑婧愰」鐩敵璇蜂簡 JetBrains 寮婧愯鍙瘉 鍙互鍏嶈垂浣跨敤 JetBrains 鍏ㄥ妗舵墍鏈変骇鍝 IntelliJ IDEA DataGrip WebStorm Clion TeamCity 绛 浣跨敤 JetBrains 鍚勭宸ュ叿闆嗘垚鍒 IntelliJ IDEA 宸ュ叿閲屻 +6. 猸愬埗浣滀笓涓 Java 寮鍙戣 Logo 澶村儚 寮鍙戜笓涓氱殑浠块粦瀹㈠懡浠よ宸ュ叿 鎴愪负鏇村姞涓撲笟鐨 Java 寮鍙戣呫 +7. 猸愬涔犻槄璇昏嫳鏂囨妧鏈枃妗e熀纭銆傚涔 Github銆丟itee 鐗堟湰鎺у埗杞欢鐨勪娇鐢ㄣ -2. 鑾峰緱 Gitee 瀹樻柟寮婧愭寚鍖楅」鐩础鐚焊璐ㄨ瘉涔 T鎭 骞跺湪寮婧愭寚鍖楃數瀛愪功缂栧啓鎴愬憳鏍忕讲鍚 鎴愪负璇ラ」鐩殑浼樿川璐$尞鑰 鎴愪负鍏朵粬寮婧愮埍濂借呯殑寮婧愰」鐩础鐚呫 - -3. 寮婧愮殑鏀跺叆鏉ユ簮 寮婧愯禐璧忋 - -4. 涓庡叾浠栧紑婧愮埍濂借呯殑寮婧愰」鐩悎浣 鏀惰幏浜嗕竴缇ゅ紑婧愮埍濂借呮湅鍙 銆 - -5. 瀛︿範 Git Gitee 鐗堟湰鎺у埗杞欢鐨勪娇鐢 浠g爜鎵樼鍒 Git Gitee 鏂逛究澶嶄範浠g爜銆 - -6. 鑷獟浣撳紑婧愯绋嬩笌寮婧愰」鐩粨鍚 寤虹珛浜ゆ祦缇 浼犳挱寮婧愬叆闂ㄧ煡璇 璐$尞鑷繁涓鐐圭偣鐨勫紑婧愯础鐚 +### java-for-linux 缁煎悎鍨嬪紑婧愰」鐩摼鎺ワ細 -7. 鍒朵綔涓撲笟 Logo 澶村儚 寮鍙戜笓涓氬紑鍙戣呭皬宸ュ叿 鎴愪负鏇村姞涓撲笟鐨勫紑鍙戣呫 +[猸恓ava-for-linux 缁煎悎鍨嬪紑婧愰」鐩甝(https://gitee.com/OpenDevel/java-for-linux) -### java-for-linux 缁煎悎鍨嬪紑婧愰」鐩摼鎺ワ細 +[猸恓ava-for-linux 缁煎悎鍨嬪紑婧愰」鐩垱浣滃彿](https://space.bilibili.com/77266754) -[java-for-linux 缁煎悎鍨嬪紑婧愰」鐩甝(https://gitee.com/opendevel/java-for-linux) +[猸愬紑婧愭寚鍖椾粨搴揮(https://gitee.com/gitee-community/opensource-guide) -[java-for-linux 缁煎悎鍨嬪紑婧愰」鐩垱浣滃彿](https://space.bilibili.com/77266754) +[猸愬紑婧愭寚鍖楅槄璇婚椤礭(https://gitee.com/opensource-guide/) -[寮婧愭寚鍖楀紑婧愰」鐩甝(https://gitee.com/gitee-community/opensource-guide) +[猸愬紑婧愭寚鍖 VLOG](https://www.bilibili.com/video/BV1pU4y147Fu) -[iooc-admin鍚庡彴鏉冮檺绠$悊绯荤粺寮婧愰」鐩甝(https://gitee.com/OpenDevel/java-for-linux/tree/master/%E5%BC%80%E6%BA%90%E5%AD%90%E4%BB%93%E5%BA%93/iooc-vue-admin) +[猸愭紨绀哄湴鍧](https://www.bilibili.com/video/BV1qK411u7w6) ### java-for-linux 缁煎悎鍨嬪紑婧愰」鐩祫鏍艰瘉涔︼細 @@ -536,7 +531,7 @@ Gitee銆丟ithub銆佷负鐭ョ瑪璁般丅ilibili銆丣etBrains銆乀eambition銆丳hotoshop銆 [椤圭洰瑙傜湅鍦板潃](https://www.bilibili.com/video/BV1Xa4y1t7sS) -## 2048 灏忔父鎴 寮婧愰」鐩 +## Java 2048 灏忔父鎴 寮婧愰」鐩 ![image](https://gitee.com/OpenDevel/java-for-linux/raw/master/image/2048.png) @@ -560,11 +555,9 @@ Gitee銆丟ithub銆佷负鐭ョ瑪璁般丅ilibili銆丣etBrains銆乀eambition銆丳hotoshop銆 椤圭洰鍦板潃锛 -[Teambition 寮婧愮瑪璁癩(https://tburl.in/0jDNvpbK) - -[Gitee 寮婧愮瑪璁癩(https://gitee.com/OpenDevel/java-for-linux/tree/master/%E5%BC%80%E6%BA%90%E7%AC%94%E8%AE%B0) +[Thoughts 寮婧愮瑪璁癩(https://thoughts.teambition.com/sharespace/60b31958a2aa01004a28b7dc) -## OSrcD 鐨勮嫳璇皬鎶 寮婧愮瑪璁 +## 寮鍙戣呰嫳璇瑪璁 ![image](https://gitee.com/OpenDevel/java-for-linux/raw/master/image/programmer-for-english-00.png) @@ -688,28 +681,36 @@ JVM 绯诲垪鐨勯」鐩湴鍧锛 [auto-homework](https://gitee.com/OpenDevel/java-for-linux/tree/master/auto-homework) -## iooc-admin 鍓嶇閫氱敤鍚庡彴鏉冮檺绠$悊绯荤粺寮婧愰」鐩 +# 寮婧愯禐璧 -椤圭洰鍦板潃锛 +## 寰俊璧炶祻鐮 -[iooc-admin](https://gitee.com/OpenDevel/java-for-linux/tree/master/%E5%BC%80%E6%BA%90%E5%AD%90%E4%BB%93%E5%BA%93/iooc-vue-admin) +![image](https://gitee.com/OpenDevel/java-for-linux/raw/master/image/璧炶祻鐮.png) -[椤圭洰瑙傜湅鍦板潃](https://www.bilibili.com/video/BV1qK411u7w6) +# LICENSE -# 寮婧愰」鐩氦娴佺兢 +浣跨敤 Apache2.0 寮婧愯鍙崗璁 -java-for-linux & iooc-admin 寮婧愰」鐩妧鏈敮鎸 +# 楦h阿 -**QQ 缇**鍙 : **741396149** +foodie-mall 鍚冭揣鍟嗗煄椤圭洰搴擄紙foodie-center foodie-cloud foodie-dev foodie-payment foodie-shop mybatis-generator nginx-url-hash sso-mtv sso-music 鏂囦欢澶癸級 -![image](https://gitee.com/OpenDevel/java-for-linux/raw/master/image/group.png) +鏉ヨ嚜鎱曡缃 Java 鏋舵瀯甯-鎶鏈笓瀹 -# 寮婧愯禐璧 +movie-trailer 鐢靛奖棰勫憡椤圭洰搴擄紙movie-trailer 鏂囦欢澶癸級 -## 寰俊璧炶祻鐮 +鏉ヨ嚜鑵捐璇惧爞 uni-app 鍟嗕笟绾у簲鐢ㄥ疄鎴 -![image](https://gitee.com/OpenDevel/java-for-linux/raw/master/image/璧炶祻鐮.png) +OA 鍔炲叕椤圭洰搴擄紙oa 鏂囦欢澶癸級 -## LICENSE +鏉ヨ嚜 鎱曡缃 Java 宸ョ▼甯 2018 鐗 -浣跨敤 Apache2.0 寮婧愯鍙崗璁 +online-education 鍦ㄧ嚎鏁欒偛椤圭洰搴擄紙online-education 鏂囦欢澶癸級 + +鏉ヨ嚜 鎱曡缃 Spring Cloud + Vue 鍓嶅悗绔垎绂 寮鍙戜紒涓氱骇鍦ㄧ嚎瑙嗛璇剧▼绯荤粺 + +social-sharing 绀句氦鍒嗕韩椤圭洰搴 锛坰ocial-sharing 鏂囦欢澶癸級 + +鏉ヨ嚜 鎱曡缃 Spring Cloud Alibaba 寰湇鍔′粠鍏ラ棬鍒拌繘闃 + +鏉ヨ嚜 GitHub MyJacking 寮婧愪綔鑰 \ No newline at end of file diff --git a/cppmm/README.md b/cppmm/README.md index 8d2df51124359c469804fa5b93a564398b7e2eae..39cf5593f4dbdf3011a910740283c1efa15e0131 100755 --- a/cppmm/README.md +++ b/cppmm/README.md @@ -1,1307 +1,1208 @@ # cppmm - - cppmm 鏄 C++-- 鍏跺疄 Java 灏辨槸 C++ 鐨勭畝鍖栫増 鍦 C++ 鐨勫熀纭涓婅繘琛岀畝鍖 鎵浠ュ氨鏄 C++-- +## JVM & C & C++ & Linux 寮哄己鑱斿悎 +### JVM 绡 -## 缂栫▼鍋ュ悍鎸囧崡 - - - -## 绉戝涓婄綉鎸囧崡 - - -## 绀句細宸ョ▼瀛 - - - -### Google Hacking - - - -## 杩芥函鎶鏈巻鍙 - - -## JVM 鍓嶄笘浠婄敓 - - - -### JAVA 1.0 浠e彿 Oak锛堟鏍戯級 - -#### 1996-01-23 鍙戣 - -### JAVA 1.1 - -#### 1997-02-19 鍙戣,涓昏鏇存柊鍐呭锛 - -寮曞叆JDBC - -娣诲姞鍐呴儴绫绘敮鎸 - -寮曞叆JAVA BEAN - -寮曞叆RMI - -寮曞叆鍙嶅皠 - -### JAVA 1.2 浠e彿 Playground锛堟搷鍦猴級 - -#### 1998-12-8 鍙戣锛屼富瑕佹洿鏂板唴瀹癸細 - -寮曞叆闆嗗悎妗嗘灦 - -瀵瑰瓧绗︿覆甯搁噺鍋氬唴瀛樻槧灏 - -寮曞叆JIT锛圝ust In Time锛夌紪璇戝櫒 - -寮曞叆鎵撳寘鏂囦欢鏁板瓧绛惧悕 - -寮曞叆鎺у埗鎺堟潈璁块棶绯荤粺璧勬簮绛栫暐宸ュ叿 - -寮曞叆JFC锛圝ava Foundation Classes锛夛紝鍖呮嫭Swing1.0锛屾嫋鏀惧拰Java2D绫诲簱 - -寮曞叆Java鎻掍欢 - -JDBC涓紩鍏ュ彲婊氬姩缁撴灉闆嗭紝BLOB,CLOB,鎵归噺鏇存柊鍜岀敤鎴疯嚜瀹氫箟绫诲瀷 - -Applet涓坊鍔犲0闊虫敮鎸 - -### JAVA 1.3 浠e彿 Kestrel锛堢孩闅硷級 - -#### 2000-5-8 鍙戝竷锛屼富瑕佹洿鏂板唴瀹癸細 - -寮曞叆Java Sound API - -寮曞叆jar鏂囦欢绱㈠紩 - -瀵笿ava鍚勬柟闈㈠浜嗗ぇ閲忎紭鍖栧拰澧炲己 - -Java Platform Debugger Architecture鐢ㄤ簬 Java 璋冨紡鐨勫钩鍙般 - -JAVA 1.4 浠e彿 Merlin锛堥毤锛 - -#### 2004-2-6 鍙戝竷锛堥娆″湪 JCP 涓嬪彂琛岋級锛屼富瑕佹洿鏂板唴瀹癸細 - -娣诲姞XML澶勭悊 - -娣诲姞Java鎵撳嵃鏈嶅姟锛圝ava Print Service API锛 - -寮曞叆Logging API - -寮曞叆Java Web Start - -寮曞叆JDBC 3.0 API - -寮曞叆鏂█ - -寮曞叆Preferences API - -寮曞叆閾惧紡寮傚父澶勭悊 - -鏀寔IPV6 - -鏀寔姝e垯琛ㄨ揪寮 - -寮曞叆Image I/O API - -NIO锛岄潪闃诲鐨 IO锛屼紭鍖 Java 鐨 IO 璇诲彇銆 - -### JDK 5.0 浠e彿 Tiger锛堣佽檸锛夛紝鏈夐噸澶ф敼鍔 - -#### 2004-9-30 鍙戝竷 涓昏鏇存柊鍐呭锛 - -寮曞叆娉涘瀷 - -For-Each寰幆 澧炲己寰幆锛屽彲浣跨敤杩唬鏂瑰紡 - -鑷姩瑁呯涓庤嚜鍔ㄦ媶绠 - -寮曞叆绫诲瀷瀹夊叏鐨勬灇涓 - -寮曞叆鍙彉鍙傛暟 - -娣诲姞闈欐佸紩鍏 - -寮曞叆娉ㄨВ - -寮曞叆Instrumentation - -鎻愪緵浜 java.util.concurrent 骞跺彂鍖呫 - -### JDK 6 浠e彿 Mustang锛堥噹椹級 - -#### 2006-12-11 鍙戝竷锛屼富瑕佹洿鏂板唴瀹癸細 - -寮曞叆浜嗕竴涓敮鎸佽剼鏈紩鎿庣殑鏂版鏋讹紙鍩轰簬 Mozilla Rhino 鐨 JavaScript 鑴氭湰寮曟搸锛 - -UI鐨勫寮 - -瀵筗ebService鏀寔鐨勫寮猴紙JAX-WS2.0 鍜 JAXB2.0锛 - -寮曞叆JDBC4.0API - -寮曞叆Java Compiler API - -閫氱敤鐨凙nnotations鏀寔 - -### JDK 7 浠e彿 Dolphin锛堟捣璞氾級 - -#### 2011-07-28 鍙戝竷 杩欐槸 sun 琚 oracle 鏀惰喘锛2009 骞 4 鏈堬級鍚庣殑绗竴涓増鏈紝涓昏鏇存柊鍐呭锛 - -switch璇彞鍧椾腑鍏佽浠ュ瓧绗︿覆浣滀负鍒嗘敮鏉′欢 - -鍦ㄥ垱寤烘硾鍨嬪璞℃椂搴旂敤绫诲瀷鎺ㄦ柇,姣斿浣犱箣鍓嶇増鏈娇鐢ㄦ硾鍨嬬被鍨嬫椂杩欐牱鍐 ArrayList userList= new ArrayList();锛岃繖涓増鏈彧闇瑕佽繖鏍峰啓 ArrayList userList= new ArrayList<>();锛屼篃鍗虫槸鍚庨潰涓涓皷鎷彿鍐呯殑绫诲瀷锛孞VM 甯垜浠嚜鍔ㄧ被鍨嬪垽鏂ˉ鍏ㄤ簡銆 - -鍦ㄤ竴涓鍙ュ潡涓崟鑾峰绉嶅紓甯 - -娣诲姞try-with-resources璇硶鏀寔锛屼娇鐢ㄦ枃浠舵搷浣滃悗涓嶇敤鍐嶆樉绀烘墽琛宑lose浜嗐 - -鏀寔鍔ㄦ佽瑷 - -JSR203, NIO.2,AIO,鏂癐/O鏂囦欢绯荤粺锛屽鍔犲閲嶆枃浠剁殑鏀寔銆佹枃浠跺師濮嬫暟鎹拰绗﹀彿閾炬帴,鏀寔ZIP鏂囦欢鎿嶄綔 - -JDBC瑙勮寖鐗堟湰鍗囩骇涓篔DBC4.1 - -寮曞叆Fork/Join妗嗘灦锛岀敤浜庡苟琛屾墽琛屼换鍔 - -鏀寔甯︿笅鍒掔嚎鐨勬暟鍊硷紝濡 int a = 100000000;锛0 澶涓嶄究浜庝汉闃呰锛岃繖涓増鏈敮鎸佽繖鏍峰啓 int a = 100_000_000锛岃繖鏍峰氨瀵规暟鍊间竴鐩簡鐒朵簡銆 - -Swing缁勪欢澧炲己锛圝Layer,Nimbus Look Feel鈥︼級鍙傝 - -### JDK 8 - -#### 2014-3-19 鍙戝竷 oracle 鍘熻鍒 2013 骞村彂甯冿紝鐢变簬瀹夊叏鎬ч棶棰樹袱娆¤烦绁紝鏄嚜 JAVA 5 浠ユ潵鏈鍏烽潻鍛芥х殑鐗堟湰锛屼富瑕佹洿鏂板唴瀹癸細 - -鎺ュ彛鏀硅繘锛屾帴鍙e眳鐒跺彲浠ュ畾涔夐粯璁ゆ柟娉曞疄鐜板拰闈欐佹柟娉曚簡銆 - -寮曞叆鍑芥暟寮忔帴鍙 - -寮曞叆Lambda琛ㄨ揪寮 - -寮曞叆鍏ㄦ柊鐨凷tream API锛屾彁渚涗簡瀵瑰兼祦杩涜鍑芥暟寮忔搷浣溿 - -寮曞叆鏂扮殑Date-Time API - -寮曞叆鏂扮殑JavaScrpit寮曟搸Nashorn - -寮曞叆Base64绫诲簱 - -寮曞叆骞跺彂鏁扮粍锛坧arallel锛 - -娣诲姞鏂扮殑Java宸ュ叿锛歫js銆乯deps - -JavaFX锛屼竴绉嶇敤鍦ㄦ闈㈠紑鍙戦鍩熺殑鎶鏈 - -闈欐侀摼鎺 JNI 绋嬪簭搴 - -### JDK 9 - -#### 2017-9-21 鍙戝竷 - -妯″潡鍖栵紙jiqsaw锛 - -浜や簰寮忓懡浠よ锛圝Shell锛 - -榛樿鍨冨溇鍥炴敹鏈熷垏鎹负G1 - -杩涚▼鎿嶄綔鏀硅繘 - -绔炰簤閿佹ц兘浼樺寲 - -鍒嗘浠g爜缂撳瓨 - -浼樺寲瀛楃涓插崰鐢ㄧ┖闂 - -### JDK 10 - -#### 2018-3-21 鍙戝竷 - -JEP286锛寁ar 灞閮ㄥ彉閲忕被鍨嬫帹鏂 - -JEP296锛屽皢鍘熸潵鐢 Mercurial 绠$悊鐨勪紬澶 JDK 浠撳簱浠g爜锛屽悎骞跺埌涓涓粨搴撲腑锛岀畝鍖栧紑鍙戝拰绠$悊杩囩▼銆 - -JEP304锛岀粺涓鐨勫瀮鍦惧洖鏀舵帴鍙c - -JEP307锛孏1 鍨冨溇鍥炴敹鍣ㄧ殑骞惰瀹屾暣鍨冨溇鍥炴敹锛屽疄鐜板苟琛屾ф潵鏀瑰杽鏈鍧忔儏鍐典笅鐨勫欢杩熴 - -JEP310锛屽簲鐢ㄧ▼搴忕被鏁版嵁 (AppCDS) 鍏变韩锛岄氳繃璺ㄨ繘绋嬪叡浜氱敤绫诲厓鏁版嵁鏉ュ噺灏戝唴瀛樺崰鐢ㄧ┖闂达紝鍜屽噺灏戝惎鍔ㄦ椂闂淬 - -JEP312锛孴hreadLocal 鎻℃墜浜や簰銆傚湪涓嶈繘鍏ュ埌鍏ㄥ眬 JVM 瀹夊叏鐐 (Safepoint) 鐨勬儏鍐典笅锛屽绾跨▼鎵ц鍥炶皟銆備紭鍖栧彲浠ュ彧鍋滄鍗曚釜绾跨▼锛岃屼笉鏄仠鍏ㄩ儴绾跨▼鎴栦竴涓兘涓嶅仠銆 - -JEP313锛岀Щ闄 JDK 涓檮甯︾殑 javah 宸ュ叿銆傚彲浠ヤ娇鐢 javac -h 浠f浛銆 - -JEP314锛屼娇鐢ㄩ檮鍔犵殑 Unicode 璇█鏍囪鎵╁睍銆 - -JEP317锛岃兘灏嗗爢鍐呭瓨鍗犵敤鍒嗛厤缁欑敤鎴锋寚瀹氱殑澶囩敤鍐呭瓨璁惧銆 - -JEP317锛屼娇鐢 Graal 鍩轰簬 Java 鐨勭紪璇戝櫒锛屽彲浠ラ鍏堟妸 Java 浠g爜缂栬瘧鎴愭湰鍦颁唬鐮佹潵鎻愬崌鏁堣兘銆 - -JEP318锛屽湪 OpenJDK 涓彁渚涗竴缁勯粯璁ょ殑鏍硅瘉涔﹂鍙戞満鏋勮瘉涔︺傚紑婧愮洰鍓 Oracle 鎻愪緵鐨勭殑 Java SE 鐨勬牴璇佷功锛岃繖鏍 OpenJDK 瀵瑰紑鍙戜汉鍛樹娇鐢ㄨ捣鏉ユ洿鏂逛究銆 - -JEP322锛屽熀浜庢椂闂村畾涔夌殑鍙戝竷鐗堟湰锛屽嵆涓婅堪鎻愬埌鐨勫彂甯冨懆鏈熴傜増鏈彿涓$FEATURE.$INTERIM.$UPDATE.$PATCH锛屽垎鍒槸澶х増鏈紝涓棿鐗堟湰锛屽崌绾у寘鍜岃ˉ涓佺増鏈 - -### JDK 11 - -#### 2018-9-25 鍙戝竷 - -瀹樼綉鍏紑鐨 17 涓 JEP锛圝DK Enhancement Proposal 鐗规у寮烘彁璁級 - -JEP181: Nest-Based Access Control锛堝熀浜庡祵濂楃殑璁块棶鎺у埗锛 - -JEP309: Dynamic Class-File Constants锛堝姩鎬佺殑绫绘枃浠跺父閲忥級 - -JEP315: Improve Aarch64 Intrinsics锛堟敼杩 Aarch64 Intrinsics锛 - -JEP318: Epsilon: A No-Op Garbage Collector锛圗psilon 鍨冨溇鍥炴敹鍣紝鍙堣绉颁负鈥漀o-Op锛堟棤鎿嶄綔锛夆濆洖鏀跺櫒锛 - -JEP320: Remove the Java EE and CORBA Modules锛堢Щ闄 Java EE 鍜 CORBA 妯″潡锛孞avaFX 涔熷凡琚Щ闄わ級 - -JEP321: HTTP Client (Standard) - -JEP323: Local-Variable Syntax for Lambda Parameters锛堢敤浜 Lambda 鍙傛暟鐨勫眬閮ㄥ彉閲忚娉曪級 - -JEP324: Key Agreement with Curve25519 and Curve448锛堥噰鐢 Curve25519 鍜 Curve448 绠楁硶瀹炵幇鐨勫瘑閽ュ崗璁級 - -JEP327: Unicode 10 - -JEP328: Flight Recorder锛堥琛岃褰曚华锛 +#### Java 鐨 JNI 绡囦功绫嶅ぇ鍏 -JEP329: ChaCha20 and Poly1305 Cryptographic Algorithms锛堝疄鐜 ChaCha20 鍜 Poly1305 鍔犲瘑绠楁硶锛 +[Essential Jni Java Native Interface 鍑虹増骞 1998-3](https://book.douban.com/subject/6963703/) -JEP330: Launch Single-File Source-Code Programs锛堝惎鍔ㄥ崟涓 Java 婧愪唬鐮佹枃浠剁殑绋嬪簭锛 +[Java(TM) Native Interface 鍑虹増骞 1999-06-20](https://book.douban.com/subject/3162962/) -JEP331: Low-Overhead Heap Profiling锛堜綆寮閿鐨勫爢鍒嗛厤閲囨牱鏂规硶锛 +[Professional Java Native Interfaces with SWT/JFace (Programmer to Programmer) 鍑虹増骞 2005-02-11](https://book.douban.com/subject/1777711/) -JEP332: Transport Layer Security (TLS) 1.3锛堝 TLS 1.3 鐨勬敮鎸侊級 +[Java AWT Native Interface 椤垫暟 18](https://book.douban.com/subject/19369591/) -JEP333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)锛圸GC锛氬彲浼哥缉鐨勪綆寤惰繜鍨冨溇鍥炴敹鍣紝澶勪簬瀹為獙鎬ч樁娈碉級 +[Java Native Interface 椤垫暟 112](https://book.douban.com/subject/19369496/) -JEP335: Deprecate the Nashorn JavaScript Engine锛堝純鐢 Nashorn JavaScript 寮曟搸锛 +[Java Native Access 椤垫暟 112](https://book.douban.com/subject/19369503/) -JEP336: Deprecate the Pack200 Tools and API锛堝純鐢 Pack200 宸ュ叿鍙婂叾 API锛 +[IBM JNI](https://www.ibm.com/developerworks/cn/java/j-jni/) -### JDK 12 +[JNI](https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html) -#### 2019-3-19 鍙戝竷 +[JNA](http://java-native-access.github.io/jna/5.5.0/javadoc/) -JEP189:Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) +[JNR](https://github.com/jnr) -JEP230:Microbenchmark Suite +#### 瀹夊崜 NDK 绡囦功绫嶅ぇ鍏 -JEP325:Switch Expressions (Preview) +[缁嗚 Android 4.0 NDK 缂栫▼锛堟帹鑽怭C闃呰锛 鍑虹増鏃堕棿 2012-07-01](https://e.jd.com/30345270.html?ebook=1) -JEP334:JVM Constants API +[Android NDK Game Development Cookbook 鍑虹増鏃堕棿 2013-11-25](https://e.jd.com/30370939.html?ebook=1) -JEP340:One AArch64 Port, Not Two +[Android C++ 楂樼骇缂栫▼ 浣跨敤 NDK [Pro Android C++ with the NDK] 鍑虹増鏃堕棿 2014-01-01](https://item.jd.com/12666925.html) -JEP341:Default CDS Archives +[Android NDK Beginner's Guide Second Edition 鍑虹増鏃堕棿 2015-04-28](https://e.jd.com/30372196.html?ebook=1) -JEP344:Abortable Mixed Collections for G1 +[Mastering Android NDK 鍑虹増鏃堕棿 2015-09-30](https://e.jd.com/30371847.html?ebook=1) -JEP346:Promptly Return Unused Committed Memory from G1 +#### Java 铏氭嫙鏈轰功绫嶅ぇ鍏 -### JDK 13 +[Java 铏氭嫙鏈鸿鑼 鍑虹増骞 1996-12-01](https://book.douban.com/subject/1549489/) -#### 2019-9-17 鍙戝竷 +[Java Virtual Machine (Java Series) 鍑虹増骞 1997-04-01](https://book.douban.com/subject/1783913/) -JEP350:Dynamic CDS Archives +[Java 铏氭嫙鏈鸿鑼 鍑虹増骞 1997-10](https://book.douban.com/subject/19970045/) -JEP351:ZGC: Uncommit Unused Memory +[The Java鈩 Virtual Machine Specification 鍑虹増骞 1999-4-24](https://book.douban.com/subject/1783950/) -JEP353:Reimplement the Legacy Socket API +[Programming for the Java鈩 Virtual Machine 鍑虹増骞 1999-7-2](https://book.douban.com/subject/1610251/) -JEP354:Switch Expressions +[Proceedings of the Java Virtual Machine Research and Technology Symposium (JVM 01) April 23-24 2001 Monterey California USA 鍑虹増鏃堕棿 2001-1-1)](https://www.amazon.com/-/zh/dp/1880446111/ref=sr_1_246?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=java+virtual+machine&qid=1594370603&s=books&sr=1-246) -JEP355:Text Blocks +[Java and the Java Virtual Machine 鍑虹増骞 2001-6-27](https://book.douban.com/subject/1761726/) -### JDK 14 +[2nd Java Virtual Machine Reasearch and Technology Symposium (JVM 02) 鍑虹増骞 2002](https://book.douban.com/subject/4222747/) -#### 棰勮 2020-03-17 General Availability + **[娣卞叆宓屽叆寮 Java 铏氭嫙鏈 鍑虹増骞 2003-5-1](https://book.douban.com/subject/1103575/)** -JEP 305: Pattern Matching for instanceof (Preview) +[宓屽叆寮 Java 铏氭嫙鏈哄強鍏跺簲鐢ㄧ爺绌禲(https://kns.cnki.net/KCMS/detail/detail.aspx?dbcode=CMFD&dbname=CMFD0506&filename=2005151384.nh&uid=WEEvREcwSlJHSldRa1FhdkJkcGkzcUJrUmhxN2ZETTZCdFAyVno4dWhrWT0=$9A4hF_YAuvQ5obgVAqNKPCYcEjKensW4ggI8Fm4gTkoUKaID8j8gFw!!&v=MDE3NzExVDNxVHJXTTFGckNVUkwyZlpPZHRGeURoVjdyS1YxMjdHN0s5SDlMRXE1RWJQSVI4ZVgxTHV4WVM3RGg=) -JEP 358: Helpful NullPointerExceptions +[娣卞叆 Java 铏氭嫙鏈(鍘熶功绗 2 鐗) 鍑虹増骞 2003-9](https://book.douban.com/subject/1138768/) -JEP 361: Switch Expressions (Standard) +[A Real-Time Java Virtual Machine for Avionics (Preprint) 鍑虹増鏃堕棿 2006-1-1](https://www.amazon.com/-/zh/dp/B00OPI69CG/ref=sr_1_35?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=java+virtual+machine&qid=1594369619&s=books&sr=1-35) -JEP 345: NUMA-Aware Memory Allocation for G1 -JEP 349: JFR Event Streaming +[IBM Technology for Java Virtual Machine in IBM i5/OS 鍑虹増鏃堕棿 2007-2-14](https://www.amazon.com/-/zh/dp/0738486051/ref=sr_1_245?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=java+virtual+machine&qid=1594370603&s=books&sr=1-245) -JEP 366: Deprecate the ParallelScavenge + SerialOld GC Combination +[Java Virtual Machine 鍑虹増骞 2009-12-30](https://book.douban.com/subject/4291938/) -JEP 363: Remove the CMS Garbage Collector +[Principles of Computer Organization and Assembly Language (2-downloads) Using the Java Virtual Machine Kindle 鐢靛瓙涔 鍑虹増鏃堕棿 2011骞1鏈11鏃(https://www.amazon.com/-/zh/dp/B009TGBI1Q/ref=sr_1_12?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=java+virtual+machine&qid=1594369581&s=books&sr=1-12) -JEP 364: ZGC on macOS +[Java Virtual Machine 鍑虹増骞 2011-9](https://book.douban.com/subject/14156745/) -JEP 368: Text Blocks (Second Preview) +[Kaffe Real-Time JVM (鑻辫) 鍑虹増鏃堕棿 2013-3-22](https://www.amazon.com/-/zh/dp/365937539X/ref=sr_1_64?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=JVM&qid=1594368449&s=books&sr=1-64) -## 鍙傝冩枃鐚 +[Understanding Java Virtual Machine 鍑虹増骞 2013-3-31](https://book.douban.com/subject/24670621/) -### JVM&C&C++&Linux 寮哄己鑱斿悎 +[Java 铏氭嫙鏈哄苟鍙戠紪绋 鍑虹増鏃堕棿 2013-05-01](https://item.jd.com/11231128.html) -### JVM 绡 +[瑙f瀽 Java 铏氭嫙鏈哄紑鍙 鍑虹増骞 2013-5-1](https://book.douban.com/subject/24757135/) -#### Java 鐨 JNI 绡囦功绫嶅ぇ鍏 +[Java铏氭嫙鏈鸿鑼冿紙Java SE 7鐗堬級 [The Java Virtual Machine Specification] 鍑虹増鏃堕棿 2013-12-01](https://item.jd.com/11365561.html) -Essential Jni: Java Native Interface 鍑虹増骞: 1998-3 + **[HotSpot 瀹炴垬 鍑虹増鏃堕棿 2014-03-01](https://item.jd.com/11414422.html?dist=jd)** +[Java 铏氭嫙鏈虹簿璁 鍑虹増鏃堕棿 2015-05-01](https://item.jd.com/11631886.html?dist=jd) +[Java 鏍稿績鎶鏈郴鍒 Java 铏氭嫙鏈鸿鑼冿紙Java SE 8 鐗堬級 [The Java Virtual Machine Specification Jave SE 8 Edition] 鍑虹増鏃堕棿 2015-06-01](https://item.jd.com/11703581.html) -Java(TM) Native Interface 鍑虹増骞: 1999-06-20 + **[OpenJDK Cookbook 鍑虹増鏃堕棿 2015-01-30](https://e.jd.com/30372388.html?ebook=1)** + **[鑷繁鍔ㄦ墜鍐 Java 铏氭嫙鏈 鍑虹増鏃堕棿 2016-06-01](https://item.jd.com/11935272.html)** +[娣卞叆鐞嗚В JVM 锛 G1 GC 鍑虹増鏃堕棿 2017-06-01](https://item.jd.com/12087807.html) -Professional Java Native Interfaces with SWT/JFace (Programmer to Programmer) 鍑虹増骞: 2005-02-11 + **[鎻 Java 铏氭嫙鏈 JVM 璁捐鍘熺悊涓庡疄鐜 鍑虹増鏃堕棿 2017-06-01](https://item.jd.com/12095193.html?dist=jd)** +[Java 铏氭嫙鏈哄熀纭鏁欑▼ 鍑虹増鏃堕棿 2018-02-01](https://item.jd.com/12326931.html) +[Optimizing Java Practical Techniques for Improving JVM Application Performance (鑻辫) 鍑虹増鏃堕棿 2018-5-11](https://www.amazon.com/-/zh/Optimizing-Java-Techniques-Application-Performance/dp/1492025798/ref=sr_1_4?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=JVM&qid=1594368211&s=books&sr=1-4) -Java AWT Native Interface 椤垫暟: 18 +[Java virtual machine Second Edition Kindle 鐢靛瓙涔 鍑虹増鏃堕棿 2018-6-10](https://www.amazon.com/-/zh/virtual-machine-Second-Gerardus-Blokdyk-ebook/dp/B07DZHTF8K/ref=sr_1_9?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=java+virtual+machine&qid=1594369539&s=books&sr=1-9) +[JVM Tutorials Herong's Tutorial Examples Kindle 鐢靛瓙涔 鍑虹増鏃堕棿 2018-6-29](https://www.amazon.com/-/zh/dp/B07F5P5JVK/ref=sr_1_109?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=JVM&qid=1594368663&s=books&sr=1-109) +[JRockit 鏉冨▉鎸囧崡 娣卞叆鐞嗚В JVM 鍑虹増鏃堕棿 2019-01-01](https://item.jd.com/12471629.html?dist=jd) -Java Native Interface 椤垫暟: 112 +[JVM G1 婧愮爜鍒嗘瀽鍜岃皟浼 鍑虹増鏃堕棿 2019-04-01](https://item.jd.com/12513757.html?dist=jd) +[瀹炴垬 Java 铏氭嫙鏈 JVM 鏁呴殰璇婃柇涓庢ц兘浼樺寲锛堢2鐗堬級 鍑虹増鏃堕棿 2019-07-01](https://item.jd.com/12640292.html?dist=jd) +[娣卞叆鐞嗚В Java 铏氭嫙鏈 JVM 楂樼骇鐗规т笌鏈浣冲疄璺碉紙绗3鐗堬級 鍑虹増鏃堕棿 2019-12-01](https://item.jd.com/12607299.html?dist=jd) -Java Native Access 椤垫暟: 112 + **[铏氭嫙鏈鸿璁′笌瀹炵幇 浠 JVM 涓轰緥 鍑虹増鏃堕棿锛2020-01-01](https://item.jd.com/12802344.html?dist=jd)** + **[娣卞叆娴呭嚭 Java 铏氭嫙鏈鸿璁′笌瀹炵幇 鍑虹増鏃堕棿 2020-04-01](https://item.jd.com/12650601.html)** +[娣卞叆鐞嗚В JVM 瀛楄妭鐮 鍑虹増鏃堕棿 2020-06-01](https://item.jd.com/12876374.html) -IBM JNI +[Microsoft Java Virtual Machine 椤垫暟 88 JVM 1.1 闂簮](https://book.douban.com/subject/19795201/) +[A Dynamic Compiler for an Embedded Java Virtual Machine 椤垫暟 96](https://book.douban.com/subject/4560542/) +[Serializable Coroutines for Java Virtual Machines 椤垫暟 104](https://book.douban.com/subject/17987575/) -JNI +[Java Virtual Machine Including 椤垫暟 106](https://book.douban.com/subject/10992448/) +[Openjdk 椤垫暟 112](https://book.douban.com/subject/17991429/) +[Hotspot 椤垫暟 136](https://book.douban.com/subject/19174286/) -JNA锛圝NI鐨勬鏋讹級 +[Java Virtual Machine Design for Embedded Systems 椤垫暟 152](https://book.douban.com/subject/16135399/) +[Java Virtual Machines 椤垫暟 280](https://book.douban.com/subject/11146305/) +[Java Language and Virtual Machine Specifications](https://docs.oracle.com/javase/specs/index.html) -JNR锛圝NI鐨勬鏋讹級 +[OpenJDK JVM 1.6](http://openjdk.java.net/) +[jvms8](https://github.com/lxw420302/books/blob/master/java/jvms8.pdf) +#### 绗笁鏂 JVM 铏氭嫙鏈 -#### 瀹夊崜 NDK 绡囦功绫嶅ぇ鍏 +[JVM-1.2 JVM 1.2](https://github.com/mateusbraga/JVM-1.2) -缁嗚Android 4.0 NDK缂栫▼锛堟帹鑽怭C闃呰锛 鍑虹増鏃堕棿锛2012-07-01 + **[DS 铏氭嫙鏈 JVM 1.2](http://www.developservice.cz/dsvm/doc/index.html)** + **[ClassPath 铏氭嫙鏈 JVM 1.2 1.3 1.4 1.5](http://www.gnu.org/software/classpath/)** +[SableVM 铏氭嫙鏈 JVM 1.2](http://www.sablevm.org/) -Android NDK Game Development Cookbook 鍑虹増鏃堕棿锛2013-11-25 +[Harmony 铏氭嫙鏈 JVM 1.5](http://harmony.apache.org/) +[IBM 铏氭嫙鏈篯(https://github.com/eclipse/openj9) +[The Kaffe Virtual Machine 铏氭嫙鏈篯(http://www.kaffe.org/) -Android C++楂樼骇缂栫▼锛氫娇鐢∟DK [Pro Android C++ with the NDK] 鍑虹増鏃堕棿锛2014-01-01 +[Alibaba dragonwell8 铏氭嫙鏈 JVM 1.8](https://github.com/alibaba/dragonwell8) +鍗庝负 bishengjdk-8 铏氭嫙鏈 JVM 1.8 +``` +https://github.com/zhangkari/jvm +https://github.com/kayodesu/cabin +``` +[SAP JVM 铏氭嫙鏈篯(https://help.sap.com/doc/saphelp_nw73ehp1/7.31.19/en-US/47/dc90b4ef17452289f9128b8c2bbd77/frameset.htm) -Android NDK: Beginner's Guide - Second Edition 鍑虹増鏃堕棿锛2015-04-28 +[avian 铏氭嫙鏈篯(https://github.com/ReadyTalk/avian) +[鑵捐 TencentKona-8 铏氭嫙鏈 JVM 1.8](https://github.com/Tencent/TencentKona-8) + **Microsoft Build of OpenJDK jvm 11** +``` +https://github.com/microsoft/openjdk -Mastering Android NDK 鍑虹増鏃堕棿锛2015-09-30 +https://www.microsoft.com/openjdk#11 +``` + **[鍦 JVM 婧愮爜鍐欏唴宓岀骇鐨 Native 鍑芥暟](https://www.bilibili.com/video/BV1DD4y1U7k6)** +#### Android 铏氭嫙鏈轰功绫嶅ぇ鍏 +[Android Virtual Machine (VM) Setup on Linux 鍑虹増鏃堕棿 2014-01-01](https://www.amazon.com/-/zh/dp/B00W4BI2OO/ref=sr_1_1?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=android+virtual+machine&qid=1594367518&s=books&sr=1-1) -#### Java 铏氭嫙鏈轰功绫嶅ぇ鍏 +[娣卞叆瑙f瀽 Android 铏氭嫙鏈 鍑虹増鏃堕棿 2014-01-01](https://item.jd.com/11397767.html) -Java 铏氭嫙鏈鸿鑼 鍑虹増骞: 1996-12-01 +[Android Dalvik 铏氭嫙鏈虹粨鏋勫強鏈哄埗鍓栨瀽锛氱 1 鍗 Dalvik 铏氭嫙鏈虹粨鏋勫墫鏋 鍑虹増鏃堕棿 2014-11-01](https://item.jd.com/11573052.html) +[Android Dalvik 铏氭嫙鏈虹粨鏋勫強鏈哄埗鍓栨瀽锛氱 2 鍗 Dalvik 铏氭嫙鏈哄悇妯″潡鏈哄埗鍒嗘瀽 鍑虹増鏃堕棿 2014-08-01](https://item.jd.com/12060826.html) +[娣卞叆瑙f瀽 Android 铏氭嫙鏈 鍑虹増鏃堕棿 2016-09-01](https://item.jd.com/12060826.html) -Java Virtual Machine (Java Series) 鍑虹増骞: 1997-04-01 +[Programming for the Android Dalvik Virtual Machine 鍑虹増鏃堕棿 2017-1-15](https://www.amazon.com/-/zh/dp/1461423880/ref=sr_1_100?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=android+virtual+machine&qid=1594367885&s=books&sr=1-100) + **[娣卞叆鐞嗚В Android Java 铏氭嫙鏈 ART [Understanding Android Internals ART JVM] 鍑虹増鏃堕棿 2019-04-01](https://item.jd.com/12510921.html)** +[Dalvik Turbo Virtual Machine 椤垫暟 18](https://book.douban.com/subject/19378171/) -Java铏氭嫙鏈鸿鑼 鍑虹増骞: 1997-10 +[Dalvik 椤垫暟 80](https://book.douban.com/subject/19301198/) +[Dalvik Turbo Virtual Machine Lite Edition](https://book.douban.com/subject/33195510/) -The Java鈩 Virtual Machine Specification 鍑虹増骞: 1999-4-24 +### C & C++ 绡 +[婊存按閫嗗悜](https://274d6950.wiz03.com/wapp/pages/view/share/s/0DjmBg3sFh7F2ChxfR3bHE8d1dFI982juQzS2h9Hvo2ubgnA) +[C++ 鍙嶆眹缂栦笌閫嗗悜鍒嗘瀽鎶鏈彮绉榏(https://e.jd.com/30469361.html) -Programming for the Java鈩 Virtual Machine 鍑虹増骞: 1999-7-2 +``` +绗簩閮ㄥ垎 C++ 鍙嶆眹缂栨彮绉 +绗 2 绔 鍩烘湰鏁版嵁绫诲瀷鐨勮〃鐜板舰寮 +2.1 鏁存暟绫诲瀷 -Proceedings of the Java Virtual Machine Research and Technology Symposium (JVM'01) +2.1.1 鏃犵鍙锋暣鏁 +2.1.2 鏈夌鍙锋暣鏁 +2.2 娴偣鏁扮被鍨 -April 23-24, 2001 Monterey, California USA 鍑虹増鏃堕棿锛2001-1-1 +2.2.1 娴偣鏁扮殑缂栫爜鏂瑰紡 +2.2.2 鍩烘湰鐨勬诞鐐规暟鎸囦护 +2.3 瀛楃鍜屽瓧绗︿覆 -Java and the Java Virtual Machine 鍑虹増骞: 2001-6-27 +2.3.1 瀛楃鐨勭紪鐮 +2.3.2 瀛楃涓茬殑瀛樺偍鏂瑰紡 +2.4 甯冨皵绫诲瀷 -2nd Java Virtual Machine Reasearch and Technology Symposium (JVM '02) 鍑虹増骞: 2002 +2.5 鍦板潃銆佹寚閽堝拰寮曠敤 +2.5.1 鎸囬拡鍜屽湴鍧鐨勫尯鍒 +2.5.2 鍚勭被鍨嬫寚閽堢殑宸ヤ綔鏂瑰紡 -娣卞叆宓屽叆寮廕ava铏氭嫙鏈 鍑虹増骞: 2003-5-1 +2.5.3 寮曠敤 +2.6 甯搁噺 +2.6.1 甯搁噺鐨勫畾涔 -宓屽叆寮廕ava铏氭嫙鏈哄強鍏跺簲鐢ㄧ爺绌 +2.6.2 #define 鍜 const 鐨勫尯鍒 +2.7 鏈珷灏忕粨 +绗 3 绔 璁よ瘑鍚姩鍑芥暟 鎵惧埌鐢ㄦ埛鍏ュ彛 -娣卞叆Java铏氭嫙鏈(鍘熶功绗2鐗) 鍑虹増骞: 2003-9 +3.1 绋嬪簭鐨勭湡姝e叆鍙 +3.2 浜嗚В VC++ 6.0 鐨勫惎鍔ㄥ嚱鏁 +3.3 main 鍑芥暟鐨勮瘑鍒 -A Real-Time Java Virtual Machine for Avionics (Preprint) 鍑虹増鏃堕棿锛2006-1-1 +3.4 鏈珷灏忕粨 +绗 4 绔 瑙傚療鍚勭琛ㄨ揪寮忕殑姹傚艰繃绋 +4.1 绠楁湳杩愮畻鍜岃祴鍊 -IBM Technology for Java Virtual Machine in IBM i5/OS 鍑虹増鏃堕棿锛2007-2-14 +4.1.1 鍚勭绠楁湳杩愮畻鐨勫伐浣滃舰寮 +4.1.2 绠楁湳缁撴灉婧㈠嚭 +4.1.3 鑷鍜岃嚜鍑 -Java Virtual Machine 鍑虹増骞: 2009-12-30 +4.2 鍏崇郴杩愮畻鍜岄昏緫杩愮畻 +4.2.1 鍏崇郴杩愮畻鍜屾潯浠惰烦杞殑瀵瑰簲 +4.2.2 琛ㄨ揪寮忕煭璺 -Principles of Computer Organization and Assembly Language (2-downloads): Using the Java Virtual Machine Kindle鐢靛瓙涔 鍑虹増鏃堕棿锛2011骞1鏈11鏃 +4.2.3 鏉′欢琛ㄨ揪寮 +4.3 浣嶈繍绠 +4.4 缂栬瘧鍣ㄤ娇鐢ㄧ殑浼樺寲鎶宸 -Java Virtual Machine 鍑虹増骞: 2011-9 +4.4.1 娴佹按绾夸紭鍖栬鍒 +4.4.2 鍒嗘敮浼樺寲瑙勫垯 +4.4.3 楂橀熺紦瀛橈紙cache锛変紭鍖栬鍒 -Kaffe Real-Time JVM (鑻辫) 鍑虹増鏃堕棿锛2013-3-22 +4.5 涓娆$畻娉曢嗗悜涔嬫梾 +4.6 鏈珷灏忕粨 +绗 5 绔 娴佺▼鎺у埗璇彞鐨勮瘑鍒 -Understanding Java Virtual Machine 鍑虹増骞: 2013-3-31 +5.1 if 璇彞 +5.2 if鈥︹lse鈥︹ 璇彞 +5.3 鐢 if 鏋勬垚鐨勫鍒嗘敮娴佺▼ -Java铏氭嫙鏈哄苟鍙戠紪绋 鍑虹増鏃堕棿锛2013-05-01 +5.4 switch 鐨勭湡鐩 +5.5 闅句互鏋勬垚璺宠浆琛ㄧ殑 switch +5.6 闄嶄綆鍒ゅ畾鏍戠殑楂樺害 -瑙f瀽Java铏氭嫙鏈哄紑鍙 鍑虹増骞: 2013-5-1 +5.7 do/while/for 鐨勬瘮杈 +5.8 缂栬瘧鍣ㄥ寰幆缁撴瀯鐨勪紭鍖 +5.9 鏈珷灏忕粨 -Java铏氭嫙鏈鸿鑼冿紙Java SE 7鐗堬級 [The Java Virtual Machine Specification] 鍑虹増鏃堕棿锛2013-12-01 +绗 6 绔 鍑芥暟鐨勫伐浣滃師鐞 +6.1 鏍堝抚鐨勫舰鎴愬拰鍏抽棴 +6.2 鍚勭璋冪敤鏂瑰紡鐨勮冨療 -HotSpot瀹炴垬 鍑虹増鏃堕棿锛2014-03-01 +6.3 浣跨敤 ebp 鎴 esp 瀵诲潃 +6.4 鍑芥暟鐨勫弬鏁 +6.5 鍑芥暟鐨勮繑鍥炲 -Java铏氭嫙鏈虹簿璁 鍑虹増鏃堕棿锛2015-05-01 +6.6 鍥為【 +6.7 鏈珷灏忕粨 +绗 7 绔 鍙橀噺鍦ㄥ唴瀛樹腑鐨勪綅缃拰璁块棶鏂瑰紡 -Java鏍稿績鎶鏈郴鍒楋細Java铏氭嫙鏈鸿鑼冿紙Java SE 8鐗堬級 [The Java Virtual Machine +7.1 鍏ㄥ眬鍙橀噺鍜屽眬閮ㄥ彉閲忕殑鍖哄埆 +7.2 灞閮ㄩ潤鎬佸彉閲忕殑宸ヤ綔鏂瑰紡 +7.3 鍫嗗彉閲 -Specification Jave SE 8 Edition] 鍑虹増鏃堕棿锛2015-06-01 +7.4 鏈珷灏忕粨 +绗 8 绔 鏁扮粍鍜屾寚閽堢殑瀵诲潃 +8.1 鏁扮粍鍦ㄥ嚱鏁板唴 -OpenJDK Cookbook 鍑虹増鏃堕棿锛2015-01-30 +8.2 鏁扮粍浣滀负鍙傛暟 +8.3 鏁扮粍浣滀负杩斿洖鍊 +8.4 涓嬫爣瀵诲潃鍜屾寚閽堝鍧 -鑷繁鍔ㄦ墜鍐橨ava铏氭嫙鏈 鍑虹増鏃堕棿锛2016-06-01 +8.5 澶氱淮鏁扮粍 +8.6 瀛樻斁鎸囬拡绫诲瀷鏁版嵁鐨勬暟缁 +8.7 鎸囧悜鏁扮粍鐨勬寚閽堝彉閲 -娣卞叆鐞嗚ВJVM 锛 G1 GC 鍑虹増鏃堕棿锛2017-06-01 +8.8 鍑芥暟鎸囬拡 +8.9 鏈珷灏忕粨 +绗 9 绔 缁撴瀯浣撳拰绫 -鎻Java铏氭嫙鏈猴細JVM璁捐鍘熺悊涓庡疄鐜 鍑虹増鏃堕棿锛2017-06-01 +9.1 瀵硅薄鐨勫唴瀛樺竷灞 +9.2 this 鎸囬拡 +9.3 闈欐佹暟鎹垚鍛 - Java铏氭嫙鏈哄熀纭鏁欑▼ 鍑虹増鏃堕棿锛2018-02-01 +9.4 瀵硅薄浣滀负鍑芥暟鍙傛暟 +9.5 瀵硅薄浣滀负杩斿洖鍊 +9.6 鏈珷灏忕粨 -Optimizing Java: Practical Techniques for Improving JVM Application Performance (鑻辫) 鍑虹増鏃堕棿锛2018-5-11 +绗 10 绔 鍏充簬鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟 +10.1 鏋勯犲嚱鏁扮殑鍑虹幇鏃舵満 +10.2 姣忎釜瀵硅薄閮芥湁榛樿鐨勬瀯閫犲嚱鏁板悧 -Java virtual machine Second Edition Kindle鐢靛瓙涔 鍑虹増鏃堕棿锛2018-6-10 +10.3 鏋愭瀯鍑芥暟鐨勫嚭鐜版椂鏈 +10.4 鏈珷灏忕粨 +绗 11 绔 鍏充簬铏氬嚱鏁 -JVM Tutorials - Herong's Tutorial Examples Kindle鐢靛瓙涔 鍑虹増鏃堕棿锛2018-6-29 +11.1 铏氬嚱鏁扮殑鏈哄埗 +11.2 铏氬嚱鏁扮殑璇嗗埆 +11.3 鏈珷灏忕粨 -JRockit鏉冨▉鎸囧崡 娣卞叆鐞嗚ВJVM 鍑虹増鏃堕棿锛2019-01-01 +绗 12 绔 浠庡唴瀛樿搴︾湅缁ф壙鍜屽閲嶇户鎵 +12.1 璇嗗埆绫诲拰绫讳箣闂寸殑鍏崇郴 +12.2 澶氶噸缁ф壙 -JVM G1婧愮爜鍒嗘瀽鍜岃皟浼 鍑虹増鏃堕棿锛2019-04-01 +12.3 铏氬熀绫 +12.4 鑿卞舰缁ф壙 +12.5 鏈珷灏忕粨 -瀹炴垬Java铏氭嫙鏈猴細JVM鏁呴殰璇婃柇涓庢ц兘浼樺寲锛堢2鐗堬級 鍑虹増鏃堕棿锛2019-07-01 +绗 13 绔 寮傚父澶勭悊 +13.1 寮傚父澶勭悊鐨勭浉鍏崇煡璇 +13.2 寮傚父绫诲瀷涓哄熀鏈暟鎹被鍨嬬殑澶勭悊娴佺▼ -娣卞叆鐞嗚ВJava铏氭嫙鏈猴細JVM楂樼骇鐗规т笌鏈浣冲疄璺碉紙绗3鐗堬級 鍑虹増鏃堕棿锛2019-12-01 +13.3 寮傚父绫诲瀷涓哄璞$殑澶勭悊娴佺▼ +13.4 璇嗗埆寮傚父澶勭悊 +13.5 鏈珷灏忕粨 +``` -铏氭嫙鏈鸿璁′笌瀹炵幇 浠VM涓轰緥 鍑虹増鏃堕棿锛2020-01-01 +[澶╀功澶滆 浠庢眹缂栬瑷鍒 Windows 鍐呮牳缂栫▼](https://e.jd.com/30093093.html) +``` +鍐呭绠浠 +鍓嶈█ -娣卞叆娴呭嚭锛欽ava铏氭嫙鏈鸿璁′笌瀹炵幇 鍑虹増鏃堕棿锛2020-04-01 +鍏ユ墜绡 鐔熸倝姹囩紪 +绗 1 绔 姹囩紪鎸囦护涓 C 璇█ +1.1 涓婃満寤虹珛绗竴涓伐绋 -娣卞叆鐞嗚ВJVM瀛楄妭鐮 鍑虹増鏃堕棿锛2020-06-01 +1.2 绠瑕佸涔犲父鐢ㄧ殑姹囩紪鎸囦护 +1.3 C 鍑芥暟鐨勫弬鏁颁紶閫掕繃绋 -Microsoft Java Virtual Machine 椤垫暟: 88 JVM 1.1 闂簮 +绗 2 绔 C 璇█鐨勬祦绋嬪拰澶勭悊 +2.1 C 璇█鐨勫惊鐜弽姹囩紪 +2.2 C 璇█鍒ゆ柇涓庡垎鏀殑鍙嶆眹缂 -A Dynamic Compiler for an Embedded Java Virtual Machine 椤垫暟: 96 +2.3 C 璇█鐨勬暟缁勪笌缁撴瀯 +2.4 C 璇█鐨勫叡鐢ㄤ綋鍜屾灇涓剧被鍨 +绗3绔 缁冧範鍙嶆眹缂 C 璇█绋嬪簭 -Serializable Coroutines for Java Virtual Machines 椤垫暟: 104 +3.1 绠楁硶鐨勫弽姹囩紪 +3.2 鍙戣鐗堢殑鍙嶆眹缂 +3.3 姹囩紪鍙 C 璇█缁冧範 +``` -Java Virtual Machine, Including 椤垫暟: 106 +[瀹屽叏鎵嬪唽涓涗功锛欳++ 鍙傝冨ぇ鍏紙绗4鐗堬級 [C++ The Complete Reference] 鍑虹増鏃堕棿 2003-01-01](https://item.jd.com/10173500.html) +[C++ 璁捐鏂版濈淮 娉涘瀷缂栫▼涓庤璁℃ā寮忎箣搴旂敤 鍑虹増鏃堕棿 2003-03-01](https://item.jd.com/10215960.html) +[C++ STL 绋嬪簭鍛樺紑鍙戞寚鍗楋紙闄勫厜鐩橈級 鍑虹増鏃堕棿 2003-04-01](https://item.jd.com/10135932.html) -Openjdk 椤垫暟: 112 +[娣卞叆 C++ 绯诲垪 娉涘瀷缂栫▼涓 STL 鍑虹増鏃堕棿 2003-04-01](https://item.jd.com/10180107.html) +[C++ 骞惰涓庡垎甯冨紡缂栫▼ [Parallel and Distributed Programming Using C++] 鍑虹増鏃堕棿 2004-01-01](https://item.jd.com/10180197.html) +[C++ 缃戠粶缂栫▼ 鍗 2 鍩轰簬 ACE 鍜屾鏋剁殑绯荤粺鍖栧鐢 鍑虹増鏃堕棿 2004-01-01](https://item.jd.com/10173511.html) -Hotspot 椤垫暟: 136 +[ACE 绋嬪簭鍛樻寚鍗 缃戠粶涓庣郴缁熺紪绋嬬殑瀹炵敤璁捐妯″紡锛堥檮鍏夌洏锛 [The ACE Programmers Guide] 鍑虹増鏃堕棿 2004-01-01](https://item.jd.com/10180230.html) +[C++ 缂栫▼鑹烘湳 鍑虹増鏃堕棿 2005-04-01](https://item.jd.com/10078579.html) +[绮鹃 Oracle 10 g Pro C/C++缂栫▼ 鍑虹増鏃堕棿 2005-10-01](https://item.jd.com/10100729.html) -Java Virtual Machine Design for Embedded Systems 椤垫暟: 152 +[Effective C++ 涓枃鐗 鏀瑰杽绋嬪簭涓庤璁$殑 55 涓叿浣撳仛娉曪紙绗 3 鐗堬級 鍑虹増鏃堕棿 2006-07-01](https://item.jd.com/10066454.html) +[C++ 缃戠粶缂栫▼ 鍗 1 杩愮敤 ACE 鍜屾ā寮忔秷闄ゅ鏉傛 鍑虹増鏃堕棿 2007-05-01](https://item.jd.com/10142730.html) +[鎸夐渶鍗板埛 C++ STL 寮鍙戞妧鏈寮 鍑虹増鏃堕棿 2007-08-01](https://item.jd.com/12821994.html) -Java Virtual Machines 椤垫暟: 280 +[C++ 娌夋濆綍 Ruminations on C++ 鍑虹増鏃堕棿 2008-01-01](https://item.jd.com/10062652.html) +[C 鍜 C++ 缁忓吀钁椾綔 C 涓撳缂栫▼ Expert C Programming Deep C Secrets 鍑虹増鏃堕棿 2008-02-01](https://item.jd.com/10062655.html) +[C 鍜 C++ 缁忓吀钁椾綔 C 闄烽槺涓庣己闄 C Traps and Pitfalls 鍑虹増鏃堕棿 2008-02-01](https://item.jd.com/10062654.html) -Java Language and Virtual Machine Specifications +[C 鍜 C++ 缁忓吀钁椾綔 C 鍜屾寚閽 POINTERS ON C 鍑虹増鏃堕棿 2008-04-01](https://item.jd.com/10062667.html) +[Professional Multicore Programming Design And Implementation For C++ Developers 鍑虹増鏃堕棿 2008-08-22](https://e.jd.com/30130930.html) +[浣犲繀椤荤煡閬撶殑 495 涓 C 璇█闂 鍑虹増鏃堕棿 2009-02-01](https://item.jd.com/10063215.html) -OpenJDK JVM 1.6 +[浠g爜鎻 浠 C/C++ 鐨勮搴︽帰绉樿绠楁満绯荤粺锛堟帹鑽 PC 闃呰锛 鍑虹増鏃堕棿 2009-09-01](https://e.jd.com/30093070.html) +[C++ 缂栫▼瑙勮寖 101 鏉¤鍒 鍑嗗垯涓庢渶浣冲疄璺 鍑虹増鏃堕棿 2010-12-01](https://item.jd.com/10380538.html) +[More Exceptional C++ 40 涓柊鐨勫伐绋嬮毦棰樸佺紪绋嬬枒闂強瑙e喅鏂规硶锛堜腑鏂囩増锛 鍑虹増鏃堕棿 2011-01-01](https://item.jd.com/10484021.html) -jvms8 +[鎻愰珮 C++ 鎬ц兘鐨勭紪绋嬫妧鏈 鍑虹増鏃堕棿 2011-03-01](https://item.jd.com/10550805.html) +[鐧界洅娴嬭瘯涔嬮亾 C++ test 鍑虹増鏃堕棿 2011-04-01](https://item.jd.com/10667008.html) -#### 绗笁鏂 Java 铏氭嫙鏈 +[C++ 缂栫▼鎬濇兂锛堜袱鍗峰悎璁㈡湰锛 鍑虹増鏃堕棿 2011-07-01](https://item.jd.com/10790734.html) -https://github.com/mateusbraga/JVM-1.2 JVM 1.2 +[Professional C++ Second Edition 鍑虹増鏃堕棿 2011-09-16](https://e.jd.com/30134502.html) -DS铏氭嫙鏈 JVM 1.2 +[缂栧啓楂樿川閲忎唬鐮 鏀瑰杽 C++ 绋嬪簭鐨 150 涓缓璁 鍑虹増鏃堕棿 2011-12-01](https://item.jd.com/10898800.html) -ClassPath铏氭嫙鏈 JVM 1.2 1.3 1.4 1.5 +[Applied C++ 涓枃鐗 鍑虹増鏃堕棿 2012-01-01](https://item.jd.com/10894123.html) -SableVM 铏氭嫙鏈 JVM 1.2 +[娣卞害鎺㈢储 C++ 瀵硅薄妯″瀷 鍑虹増鏃堕棿 2012-01-01](https://item.jd.com/10909788.html) -Harmony铏氭嫙鏈 JVM 1.5 +[Imperfect C++锛堜腑鏂囩増锛 [Imperfect C++ Practical Solutions for Real-Life Programming] 鍑虹増鏃堕棿 2012-06-01](https://item.jd.com/11017239.html) -IBM铏氭嫙鏈 +[C++ 浠g爜璁捐涓庨噸鐢 [Designing and Coding Reusable C++] 鍑虹増鏃堕棿 2012-06-01](https://item.jd.com/11017240.html) -The Kaffe Virtual Machine 铏氭嫙鏈 +[ACE 鎶鏈唴骞 娣卞叆瑙f瀽 ACE 鏋舵瀯璁捐涓庡疄鐜板師鐞 鍑虹増鏃堕棿 2012-07-09](https://e.jd.com/30469252.html) -Alibaba dragonwell8 铏氭嫙鏈 JVM 1.8 +[楂樿川閲忕▼搴忚璁℃寚鍗 C++/C璇█ 鍑虹増鏃堕棿 2012-10-01](https://e.jd.com/30150029.html) -鍗庝负 bishengjdk-8 铏氭嫙鏈 JVM 1.8 +[C++ 缂栫▼璋冭瘯绉樼瑘 鍑虹増鏃堕棿 2013-01-01](https://item.jd.com/11142468.html) -https://github.com/zhangkari/jvm + **[Linux 澶氱嚎绋嬫湇鍔$缂栫▼ 浣跨敤 muduo C++ 缃戠粶搴 鍑虹増鏃堕棿 2013-01-01](https://item.jd.com/11163782.html)** -https://github.com/kayodesu/cabin +[C 鍜 C++ 瀹炲姟绮鹃 C++ Templates 涓枃鐗 鍑虹増鏃堕棿 2013-04-01](https://item.jd.com/11216941.html) -SAP JVM铏氭嫙鏈 +[瀹炴垬绯诲垪 娣卞叆瀹炶返 C++ 妯℃澘缂栫▼ 鍑虹増鏃堕棿 2013-06-01](https://item.jd.com/11267551.html) -avian 铏氭嫙鏈 +[鍍忚绠楁満绉戝瀹朵竴鏍锋濊 C++ 鍑虹増鏃堕棿 2013-06-01](https://item.jd.com/11254030.html) -#### 瀹夊崜铏氭嫙鏈轰功绫嶅ぇ鍏 +[鍗庣珷绉戞妧 娣卞叆鐞嗚В C++11 鏂扮壒鎬цВ鏋愪笌搴旂敤 鍑虹増鏃堕棿 2013-06-01](https://item.jd.com/11252776.html) -Android Virtual Machine (VM) Setup on Linux 鍑虹増鏃堕棿锛2014-01-01 +[Essential C++ 涓枃鐗 鍑虹増鏃堕棿 2013-08-01](https://item.jd.com/11294334.html) +[鍥剧伒绋嬪簭璁捐涓涗功 C++ API 璁捐 [API Design for C++] 鍑虹増鏃堕棿 2013-08-01](https://item.jd.com/11288309.html) +[浠庣己闄蜂腑瀛︿範 C/C++ 鍑虹増鏃堕棿 2013-09-01](https://e.jd.com/30336229.html) -娣卞叆瑙f瀽Android铏氭嫙鏈 鍑虹増鏃堕棿锛2014-01-01 +[鍗庣珷绋嬪簭鍛樹功搴 C 鍜 C++ 瀹夊叏缂栫爜锛堝師涔︾ 2 鐗堬級 鍑虹増鏃堕棿 2014-01-01](https://item.jd.com/11380971.html) +[缂栫爜鐨勬硶鍒 C++ 绋嬪簭鍛樹笉鍙笉鐭ョ殑 101 鏉″疄鐢ㄧ粡楠 鍑虹増鏃堕棿 2014-01-01](https://item.jd.com/11391235.html) +[C++ For Dummies 7th Edition 鍑虹増鏃堕棿 2014-01-01](https://e.jd.com/30167562.html) -Android Dalvik铏氭嫙鏈虹粨鏋勫強鏈哄埗鍓栨瀽锛氱1鍗 Dalvik铏氭嫙鏈虹粨鏋勫墫鏋 鍑虹増鏃堕棿锛2014-11-01 +[娣卞叆鐞嗚ВC鎸囬拡锛圕/C++绋嬪簭鍛樿繘闃跺繀澶囷紝閫忓交鐞嗚В鎸囬拡涓庡唴瀛樼鐞嗭級 鍑虹増鏃堕棿 2014-02-01](https://e.jd.com/30410332.html) +[C 鏍囧噯搴擄紙鑻辨枃鐗堬級 鍑虹増鏃堕棿 2014-04-01](https://item.jd.com/11424898.html) +[娣卞叆瀹炶返 Boost 绋嬪簭搴撳紑鍙戠殑 94 涓绗 鍑虹増鏃堕棿 2014-04-21](https://e.jd.com/30316616.html) -Android Dalvik铏氭嫙鏈虹粨鏋勫強鏈哄埗鍓栨瀽锛氱2鍗凤紙Dalvik铏氭嫙鏈哄悇妯″潡鏈哄埗鍒嗘瀽锛 鍑虹増鏃堕棿锛2014-08-01 +[C++ All-in-One For Dummies 3 rd Edition 鍑虹増鏃堕棿 2014-08-08](https://e.jd.com/30171371.html) +[澶ц妯 C++ 绋嬪簭璁捐 鍑虹増鏃堕棿 2014-10-01](https://e.jd.com/30426114.html) + **[鍗庣珷鍘熷垱绮惧搧 娣卞叆搴旂敤 C++ 11 浠g爜浼樺寲涓庡伐绋嬬骇搴旂敤 鍑虹増鏃堕棿 2015-05-01](https://item.jd.com/11701870.html)** -娣卞叆瑙f瀽Android铏氭嫙鏈 鍑虹増鏃堕棿锛2016-09-01 +[C++ STL 鍩虹鍙婂簲鐢紙绗 2 鐗堬級涓浗楂樼瓑瀛︽牎璁$畻鏈虹瀛︿笌鎶鏈笓涓 搴旂敤鍨 瑙勫垝鏁欐潗 鍑虹増鏃堕棿 2015-05-01](https://item.jd.com/11712422.html) +[C/C++ 鎶鏈笡涔 楂樼骇 C/C++ 缂栬瘧鎶鏈 [Advanced C and C++ Compiling] 鍑虹増鏃堕棿 2015-05-01](https://item.jd.com/11693895.html) +[C++ 鏍囧噯搴擄紙绗 2 鐗堬級 鍑虹増鏃堕棿 2015-06-01](https://item.jd.com/11706352.html) -Programming for the Android Dalvik Virtual Machine 鍑虹増鏃堕棿锛2017骞1鏈15鏃 +[C++ 骞跺彂缂栫▼瀹炴垬 鍑虹増鏃堕棿 2015-06-01](https://item.jd.com/11691853.html) +[Learning Boost C++ Libraries 鍑虹増鏃堕棿 2015-07-31](https://e.jd.com/30371972.html) +[鍐欑粰澶у繖浜虹湅鐨 C++ 鍑虹増鏃堕棿 2015-08-01](https://item.jd.com/11763012.html) -娣卞叆鐞嗚ВAndroid锛欽ava铏氭嫙鏈篈RT [Understanding Android Internals: ART JVM] 鍑虹増鏃堕棿锛2019-04-01 +[C 瀹夊叏缂栫爜鏍囧噯 寮鍙戝畨鍏 鍙潬 绋冲浐绯荤粺鐨 98 鏉¤鍒欙紙鍘熶功绗 2 鐗堬級 鍑虹増鏃堕棿 2015-08-01](https://item.jd.com/11758237.html) +[鏈鏂 C/C++ 鍑芥暟涓庣畻娉曢熸煡閫熺敤澶ц緸鍏革紙闄勫厜鐩橈級 鍑虹増鏃堕棿 2015-09-01](https://item.jd.com/11770080.html) +[Boost Asio C++ Network Programming Second Edition 鍑虹増鏃堕棿 2015-09-16](https://e.jd.com/30371894.html) -Dalvik Turbo Virtual Machine 椤垫暟: 18 +[澶ч亾鑷崇畝 C++ STL锛堟爣鍑嗘ā鏉垮簱锛夌簿瑙 鍑虹増鏃堕棿 2015-11-01](https://item.jd.com/11818713.html) +[C++ 娉涘瀷 STL 鍘熺悊鍜屽簲鐢 鍑虹増鏃堕棿 2015-12-01](https://item.jd.com/11876751.html) +[Boost Asio C++ Network Programming Cookbook 鍑虹増鏃堕棿 2016-01-25](https://e.jd.com/30372453.html) -Dalvik 椤垫暟: 80 +[C++ 缂栫▼鍓栨瀽 闂 鏂规鍜岃璁″噯鍒 鍑虹増鏃堕棿 2016-03-01](https://item.jd.com/11890425.html) +[C++ 澶氱嚎绋嬬紪绋嬪疄鎴 鍑虹増鏃堕棿 2016-04-01](https://item.jd.com/11919981.html) +[C++ 瑕嗚緳褰 鍑虹増鏃堕棿 2016-04-01](https://item.jd.com/11909224.html) -Dalvik Turbo Virtual Machine: Lite Edition +[C++ 蹇呯煡蹇呬細 鍑虹増鏃堕棿 2016-04-01](https://item.jd.com/11898671.html) + **[C 楂樼骇缂栫▼ 鍩轰簬妯″潡鍖栬璁℃濇兂鐨 C 璇█寮鍙 鍑虹増鏃堕棿 2016-05-01](https://item.jd.com/11924653.html)** -### C&C++ 绡 +[C 鎸囬拡 鍩烘湰姒傚康 鏍稿績鎶鏈強鏈浣冲疄璺 鍑虹増鏃堕棿 2016-05-01](https://item.jd.com/11928287.html) -婊存按閫嗗悜 +[鍚庡彴寮鍙 鏍稿績鎶鏈笌搴旂敤瀹炶返 鍑虹増鏃堕棿 2016-08-01](https://item.jd.com/12000166.html) -C++鍙嶆眹缂栦笌閫嗗悜鍒嗘瀽鎶鏈彮绉 +[鐮佸啘 缁忓吀 C++锛堢 26 鏈燂級 鍑虹増鏃堕棿 2016-12-22](https://e.jd.com/30354693.html) -绗簩閮ㄥ垎 C++鍙嶆眹缂栨彮绉 +[C++ 绋嬪簭璁捐瀹炶返涓庢妧宸 娴嬭瘯椹卞姩寮鍙 鍑虹増鏃堕棿 2017-01-01](https://e.jd.com/30410237.html) -绗2绔 鍩烘湰鏁版嵁绫诲瀷鐨勮〃鐜板舰寮 +[C++ 鏍囧噯妯℃澘搴撶紪绋嬪疄鎴 鍑虹増鏃堕棿 2017-01-01](https://e.jd.com/30410237.html) -2.1 鏁存暟绫诲瀷 +[C++ STL 鏍囧噯绋嬪簭搴撳紑鍙戞寚鍗楋紙绗 2 鐗堬級 鍑虹増鏃堕棿 2017-01-01](https://item.jd.com/12040121.html) -2.1.1 鏃犵鍙锋暣鏁 +[C++ 17 STL Cookbook 鍑虹増鏃堕棿 2017-06-28](https://e.jd.com/30373228.html) -2.1.2 鏈夌鍙锋暣鏁 +[Boost C++ Application Development Cookbook Second Edition 鍑虹増鏃堕棿 2017-08-30](https://e.jd.com/30381029.html) -2.2 娴偣鏁扮被鍨 +[Learning C++ Functional Programming 鍑虹増鏃堕棿 2017-08-10](https://e.jd.com/30380995.html) -2.2.1 娴偣鏁扮殑缂栫爜鏂瑰紡 +[Mastering the C++ 17 STL 鍑虹増鏃堕棿 2017-09-28](https://e.jd.com/30380973.html) -2.2.2 鍩烘湰鐨勬诞鐐规暟鎸囦护 +[C++ 鍏ラ棬缁忓吀锛堢 10 鐗堬級 鍑虹増鏃堕棿 2017-11-01](https://item.jd.com/12281050.html) -2.3 瀛楃鍜屽瓧绗︿覆 +[C++ 璇箟鍜屾ц兘鍒嗘瀽 鍑虹増鏃堕棿 2017-12-01](https://e.jd.com/30410196.html) -2.3.1 瀛楃鐨勭紪鐮 +[C++ 鎬ц兘浼樺寲鎸囧崡 鍑虹増鏃堕棿 2018-01-01](https://e.jd.com/30410196.html) -2.3.2 瀛楃涓茬殑瀛樺偍鏂瑰紡 +[C++ High Performance 鍑虹増鏃堕棿 2018-01-31](https://e.jd.com/30402033.html) -2.4 甯冨皵绫诲瀷 +[Effective Modern C++ (涓枃鐗) 鍑虹増鏃堕棿 2018-04-01](https://item.jd.com/12348026.html) -2.5 鍦板潃銆佹寚閽堝拰寮曠敤 +[澶氭牳寮傛瀯骞惰璁$畻锛圤penMP4.5 C C++绡囷級 瓒呯畻 浜戣绠椾笌澶ф暟鎹妧鏈笓涓氭暀绋嬄锋櫘閫氶珮绛夋暀鑲 鍗佷笁浜 瑙勫垝鏁欐潗 鍑虹増鏃堕棿 2018-04-01](https://item.jd.com/12375927.html) -2.5.1 鎸囬拡鍜屽湴鍧鐨勫尯鍒 +[C/C++ 瀹炶返杩涢樁涔嬮亾 鍐欑粰绋嬪簭鍛樼湅鐨勭紪绋嬩功 鍑虹増鏃堕棿 2018-05-01](https://item.jd.com/12331465.html) -2.5.2 鍚勭被鍨嬫寚閽堢殑宸ヤ綔鏂瑰紡 +[鏂版爣鍑 C++ 绋嬪簭璁捐 鍑虹増鏃堕棿 2018-08-01](https://e.jd.com/30451880.html) -2.5.3 寮曠敤 +[娓呭崕璁$畻鏈哄浘涔﹁瘧涓 绮鹃 C++锛堢 9 鐗堬級 鍑虹増鏃堕棿 2018-08-01](https://item.jd.com/12432130.html) -2.6 甯搁噺 +[Linux C 涓 C++ 涓绾垮紑鍙戝疄璺 鍑虹増鏃堕棿 2018-12-01](https://item.jd.com/12472663.html) -2.6.1 甯搁噺鐨勫畾涔 +[Hands-On System Programming with C++ 鍑虹増鏃堕棿 2018-12-26](https://e.jd.com/30506171.html) -2.6.2 #define鍜宑onst鐨勫尯鍒 +[Hands-On Design Patterns with C++ 鍑虹増鏃堕棿 2019-01-30](https://e.jd.com/30506113.html) -2.7 鏈珷灏忕粨 +[C++ 浠g爜鏁存磥涔嬮亾 C++ 17 鍙寔缁蒋浠跺紑鍙戞ā寮忓疄璺 鍑虹増鏃堕棿 2019-04-01](https://item.jd.com/12599914.html) -绗3绔 璁よ瘑鍚姩鍑芥暟锛屾壘鍒扮敤鎴峰叆鍙 +[C++ 楂樼骇缂栫▼(绗 4 鐗) 鍑虹増鏃堕棿 2019-04-01](https://item.jd.com/12600974.html) -3.1 绋嬪簭鐨勭湡姝e叆鍙 +[C 鎸囬拡鍘熺悊鎻 鍩轰簬搴曞眰瀹炵幇鏈哄埗 鍑虹増鏃堕棿 2019-05-01](https://e.jd.com/30485018.html) -3.2 浜嗚ВVC++6.0鐨勫惎鍔ㄥ嚱鏁 +[鐧借瘽 C++ 涔嬬粌鍔 鍑虹増鏃堕棿 2019-05-01](https://item.jd.com/12609616.html) -3.3 main鍑芥暟鐨勮瘑鍒 + **[C++ 绋嬪簭璁捐璇█锛堢 1-4 閮ㄥ垎 濂楄鍏 2 鍐岋級 鍑虹増鏃堕棿 2019-06-01](https://item.jd.com/12746690.html)** -3.4 鏈珷灏忕粨 +[C++ 17 鍏ラ棬缁忓吀锛堢 5 鐗堬級 鍑虹増鏃堕棿锛2019-06-01](https://item.jd.com/12620430.html) -绗4绔 瑙傚療鍚勭琛ㄨ揪寮忕殑姹傚艰繃绋 + **[C Primer Plus 绗 6 鐗 涓枃鐗 鍑虹増鏃堕棿 2019-11-01](https://item.jd.com/12627795.html)** -4.1 绠楁湳杩愮畻鍜岃祴鍊 +[C++ 鍑芥暟寮忕紪绋 [Functional Programming in C++] 鍑虹増鏃堕棿 2020-01-01](https://item.jd.com/12612787.html) -4.1.1 鍚勭绠楁湳杩愮畻鐨勫伐浣滃舰寮 +[Boost 绋嬪簭搴撳畬鍏ㄥ紑鍙戞寚鍗 娣卞叆 C++ 鏍囧噯搴擄紙绗 5 鐗堬級 鍑虹増鏃堕棿 2020-06-01](https://e.jd.com/30611143.html) -4.1.2 绠楁湳缁撴灉婧㈠嚭 +[C++ 鏂扮粡鍏 鍑虹増鏃堕棿 2020-07-01](https://item.jd.com/12945032.html) -4.1.3 鑷鍜岃嚜鍑 +### Linux 绡 -4.2 鍏崇郴杩愮畻鍜岄昏緫杩愮畻 +[Debug Hacks 涓枃鐗 鍑虹増骞 2011-8](https://book.douban.com/subject/6799412/) -4.2.1 鍏崇郴杩愮畻鍜屾潯浠惰烦杞殑瀵瑰簲 +[Linux 鍐呮牳瀹夊叏妯″潡娣卞叆鍓栨瀽 鍑虹増鏃堕棿 2016-12-01](https://item.jd.com/12019115.html) -4.2.2 琛ㄨ揪寮忕煭璺 +[Linux 鍐呮牳婧愪唬鐮佸垎鏋 鍑虹増骞 2000-06](https://book.douban.com/subject/1231837/) -4.2.3 鏉′欢琛ㄨ揪寮 +[Linux鍐呮牳鍒嗘瀽鍙婂父瑙侀棶棰樿В绛 (骞宠) 鍑虹増骞 2000-07](https://book.douban.com/subject/2008804/) -4.3 浣嶈繍绠 +[LINUX 鐨勫唴鏍镐笌缂栫▼ 鍑虹増鏃堕棿 2000-07-01](https://book.douban.com/subject/2011808/) -4.4 缂栬瘧鍣ㄤ娇鐢ㄧ殑浼樺寲鎶宸 +[Linux 鎿嶄綔绯荤粺鍐呮牳鍒嗘瀽 鍑虹増骞 2000-8](https://book.douban.com/subject/1240431/) -4.4.1 娴佹按绾夸紭鍖栬鍒 + **[LINUX 鍐呮牳婧愪唬鐮佹儏鏅垎鏋愶紙涓婂唽锛夊嚭鐗堟椂闂 2001-01-01](https://item.jd.com/10082548.html)** -4.4.2 鍒嗘敮浼樺寲瑙勫垯 + **[LINUX 鍐呮牳婧愪唬鐮佹儏鏅垎鏋愶紙涓嬪唽锛 鍑虹増鏃堕棿 2001-09-01](https://item.jd.com/10082549.html)** -4.4.3 楂橀熺紦瀛橈紙cache锛変紭鍖栬鍒 +[Linux 鍐呮牳 2.4 鐗堟簮浠g爜鍒嗘瀽澶у叏 鍑虹増骞 2002-1-1](https://book.douban.com/subject/1222347/) -4.5 涓娆$畻娉曢嗗悜涔嬫梾 +[Linux 鍐呮牳婧愪唬鐮 鍑虹増骞 2002-1-1](https://book.douban.com/subject/1240652/) -4.6 鏈珷灏忕粨 +[娣卞叆鍒嗘瀽 Linux 鍐呮牳婧愪唬鐮 鍑虹増鏃堕棿 2002-07-01](https://book.douban.com/subject/1222347/) -绗5绔 娴佺▼鎺у埗璇彞鐨勮瘑鍒 + **[鏅氶珮绛夋暀鑲 鍗佷竴浜 鍥藉绾ц鍒掓暀鏉 杈瑰共杈瑰锛圠INUX 鍐呮牳鎸囧锛 [LEARNING LINUX KERNEL BY PRACTICE] 鍑虹増鏃堕棿 2002-08-01](https://item.jd.com/10158963.html)** -5.1 if璇彞 +[Linux 鍐呮牳鍒嗘瀽涓庡疄渚嬪簲鐢 鍑虹増骞 2002-9](https://book.douban.com/subject/1241134/) -5.2 if鈥︹lse鈥︹﹁鍙 +[鎿嶄綔绯荤粺鏁欑▼ Linux 瀹炰緥鍒嗘瀽/闈㈠悜 21 涓栫邯楂樼瓑瀛︽牎璁$畻鏈虹被涓撲笟绯诲垪鏁欐潗 鍑虹増鏃堕棿 2004-01-01](https://item.jd.com/11261261.html) -5.3 鐢╥f鏋勬垚鐨勫鍒嗘敮娴佺▼ +[楂樼瓑瀛︽牎璁$畻鏈虹瀛︿笌鎶鏈暀鏉 Linux 鎿嶄綔绯荤粺鍒嗘瀽鏁欑▼锛堟帹鑽 PC 闃呰锛 鍑虹増鏃堕棿 2004-05-01](https://e.jd.com/30041166.html) -5.4 switch鐨勭湡鐩 +[Linux 鍐呮牳瀹屽叏娉ㄩ噴 鍑虹増鏃堕棿 2004-09-01](https://item.jd.com/10131755.html) -5.5 闅句互鏋勬垚璺宠浆琛ㄧ殑switch + **[Linux 0.01 鍐呮牳鍒嗘瀽涓庢搷浣滅郴缁熻璁★紙鍒涢犱綘鑷繁鐨勬搷浣滅郴缁燂級锛堥檮 CD鈥擱OM 鍏夌洏 1 寮狅級 鍑虹増鏃堕棿 2004-10-01](https://item.jd.com/10154771.html)** -5.6 闄嶄綆鍒ゅ畾鏍戠殑楂樺害 +[鍥藉璁$畻鏈虹瀛︾粡鍏告暀鏉 Linux 鍐呮牳缂栫▼鎸囧崡锛堢 3 鐗堬級 鍑虹増鏃堕棿 2004-11-01](https://item.jd.com/10154753.html) -5.7 do/while/for鐨勬瘮杈 +[IA-64 Linux 鍐呮牳璁捐涓庡疄鐜 鍑虹増骞 2004-11](https://book.douban.com/subject/1239565/) -5.8 缂栬瘧鍣ㄥ寰幆缁撴瀯鐨勪紭鍖 +[鎿嶄綔绯荤粺 Linux 绡 楂樿亴楂樹笓 21 涓栫邯瑙勫垝鏁欐潗 鍑虹増鏃堕棿 2005-01-01](https://item.jd.com/10353151.html) -5.9 鏈珷灏忕粨 +[Linux 鎿嶄綔绯荤粺鍐呮牳瀹炰範 鍑虹増骞 2005-2](https://book.douban.com/subject/1222388/) -绗6绔 鍑芥暟鐨勫伐浣滃師鐞 +[Linux 鍐呮牳鍒嗘瀽鍙婄紪绋 鍑虹増鏃堕棿 2005-09-01](https://item.jd.com/10142242.html) -6.1 鏍堝抚鐨勫舰鎴愬拰鍏抽棴 + **[O'Reilly LINUX 璁惧椹卞姩绋嬪簭锛堢 3 鐗堬級 鍑虹増鏃堕棿 2006-01-01](https://item.jd.com/10100144.html)** -6.2 鍚勭璋冪敤鏂瑰紡鐨勮冨療 +[Linux 缃戠粶浣撶郴缁撴瀯 Linux 鍐呮牳涓綉缁滃崗璁殑璁捐涓庡疄鐜 鍑虹増鏃堕棿 2006-07-01](https://item.jd.com/10155343.html) -6.3 浣跨敤ebp鎴杄sp瀵诲潃 +[Linux 鍐呮牳鍒嗘瀽鍙婇珮绾х紪绋嬶紙鎺ㄨ崘 PC 闃呰锛 鍑虹増鏃堕棿 2006-07-01](https://e.jd.com/30093200.html) -6.4 鍑芥暟鐨勫弬鏁 + **[O'Reilly 娣卞叆鐞嗚В LINUX 鍐呮牳锛堢 3 鐗堬級锛堟兜鐩 2.6 鐗堬級 鍑虹増鏃堕棿 2008-01-01](https://item.jd.com/10100237.html)** -6.5 鍑芥暟鐨勮繑鍥炲 +[璁$畻鏈虹瀛︿笌鎶鏈郴鍒楁暀鏉 Linux鍘熺悊涓庡簲鐢 鍑虹増鏃堕棿 2008-03-01](https://item.jd.com/10158748.html) -6.6 鍥為【 +[Linux 涓 TCP/IP 鍗忚瀹炵幇鍙婂祵鍏ュ紡搴旂敤 鍑虹増鏃堕棿 2008-07-01](https://item.jd.com/10251774.html) -6.7 鏈珷灏忕粨 +[楂樼瓑瀛︽牎璁$畻鏈轰笓涓氭暀鏉愮簿閫 璁$畻鏈哄師鐞 寰瀷璁$畻鏈烘搷浣滅郴缁熷熀纭 鍩轰簬Linux/i386 鍑虹増鏃堕棿 2008-07-01](https://item.jd.com/10399355.html) -绗7绔 鍙橀噺鍦ㄥ唴瀛樹腑鐨勪綅缃拰璁块棶鏂瑰紡 +[楂樼瓑瀛︽牎鐢靛瓙涓庤兘淇$被涓撲笟 鍗佷竴浜 瑙勫垝鏁欐潗 璁$畻鏈烘搷浣滅郴缁熷師鐞 Linux 瀹炰緥鍒嗘瀽 鍑虹増鏃堕棿 2008-09-01](https://item.jd.com/10215508.html) -7.1 鍏ㄥ眬鍙橀噺鍜屽眬閮ㄥ彉閲忕殑鍖哄埆 +[Linux 鎿嶄綔绯荤粺鍒嗘瀽涓庡疄璺 鍑虹増鏃堕棿 2008-11-01](https://item.jd.com/10156475.html) -7.2 灞閮ㄩ潤鎬佸彉閲忕殑宸ヤ綔鏂瑰紡 +[Linux 2.6 鍐呮牳鏍囧噯鏁欑▼锛堥檮鍏夌洏 1 寮狅級 鍑虹増鏃堕棿 2008-11-01](https://item.jd.com/10062983.html) -7.3 鍫嗗彉閲 + **[Linux 鍐呮牳瀹屽叏鍓栨瀽 鍩轰簬 0.12 鍐呮牳 鍑虹増鏃堕棿 2009-01-01](https://item.jd.com/10058764.html)** -7.4 鏈珷灏忕粨 +[Linux 鎿嶄綔绯荤粺瀹為獙鏁欑▼ 鍑虹増鏃堕棿 2009-02-01](https://e.jd.com/30459853.html) -绗8绔 鏁扮粍鍜屾寚閽堢殑瀵诲潃 +[楂樼瓑瀛︽牎璁$畻鏈哄疄璺垫暀瀛︾郴鍒楁暀鏉 Linux 鎿嶄綔绯荤粺瀹為獙鏁欑▼ 鍑虹増鏃堕棿 2009-04-01](https://item.jd.com/10945531.html) -8.1 鏁扮粍鍦ㄥ嚱鏁板唴 +[Linux 鎿嶄綔绯荤粺鍘熺悊涓庡簲鐢 鍑虹増鏃堕棿 2009-04-01](https://item.jd.com/11631584.html) -8.2 鏁扮粍浣滀负鍙傛暟 +[娣卞叆鐞嗚В Linux 缃戠粶鎶鏈唴骞 鍑虹増鏃堕棿 2009-06-01](https://item.jd.com/10100456.html) -8.3 鏁扮粍浣滀负杩斿洖鍊 +[鐙緹韫婂緞鍝佸唴鏍 Linux 鍐呮牳婧愪唬鐮佸璇伙紙鎺ㄨ崘 PC 闃呰锛夊嚭鐗堟椂闂 2009-08-01](https://e.jd.com/30093074.html) -8.4 涓嬫爣瀵诲潃鍜屾寚閽堝鍧 +[娣卞叆娴呭嚭 Linux TCP/IP 鍗忚鏍 鍑虹増鏃堕棿 2010-01-01](https://item.jd.com/12632209.html) -8.5 澶氱淮鏁扮粍 +[Linux 鍐呮牳缃戠粶鏍堟簮浠g爜鎯呮櫙鍒嗘瀽 鍑虹増骞 2010-1](https://book.douban.com/subject/4212924/) -8.6 瀛樻斁鎸囬拡绫诲瀷鏁版嵁鐨勬暟缁 +[杩借釜Linux TCP/IP 浠g爜杩愯 鍩轰簬 2.6 鍐呮牳锛堥檮 CD-ROM 鍏夌洏 1 寮狅級 鍑虹増鏃堕棿 2010-04-01](https://item.jd.com/10003924.html#none) -8.7 鎸囧悜鏁扮粍鐨勬寚閽堝彉閲 + **[Linux 浣撶郴涓庣紪绋 鍩轰簬 Linux 0.01 鐗堟湰 21 涓栫邯杞欢宸ョ▼甯堣鍒掓暀鏉 鍑虹増鏃堕棿 2010-04-01](https://item.jd.com/10307446.html)** -8.8 鍑芥暟鎸囬拡 +[O'Reilly Linux 鍐呮牳鎶鏈墜鍐 [Linux Kernel in a Nutsbell] 鍑虹増鏃堕棿 2010-06-01](https://item.jd.com/10100635.html) -8.9 鏈珷灏忕粨 +[娣卞叆 Linux 鍐呮牳鏋舵瀯 鍑虹増鏃堕棿 2010-06-01](https://e.jd.com/30137691.html) -绗9绔 缁撴瀯浣撳拰绫 +[Linux 鍐呮牳淇偧涔嬮亾 鍑虹増鏃堕棿 2010-07-01](https://item.jd.com/10064410.html) -9.1 瀵硅薄鐨勫唴瀛樺竷灞 +[Linux 缃戠粶鍐呮牳鍒嗘瀽涓庡紑鍙 鍑虹増骞 2010-8](https://item.jd.com/10064410.html) -9.2 this鎸囬拡 +[鎿嶄綔绯荤粺瀹為獙鏁欑▼鍙 Linux 鍜 Windows 绯荤粺璋冪敤缂栫▼ 璁$畻鏈鸿绋嬭璁′笌缁煎悎瀹炶返瑙勫垝鏁欐潗 鍑虹増鏃堕棿 2010-09-01](https://item.jd.com/11335438.html) -9.3 闈欐佹暟鎹垚鍛 +[Linux 鍐呮牳婧愮爜鍓栨瀽 TCP/IP 瀹炵幇锛堝瑁呬笂涓嬪唽锛夊嚭鐗堟椂闂 2011-01-01](https://item.jd.com/10490677.html) -9.4 瀵硅薄浣滀负鍑芥暟鍙傛暟 +[Linux 鍐呮牳璁捐涓庡疄鐜帮紙鍘熶功绗 3 鐗堬級 鍑虹増鏃堕棿 2011-05-01](https://item.jd.com/10664953.html) -9.5 瀵硅薄浣滀负杩斿洖鍊 +[宓屽叆寮 Linux 缃戠粶浣撶郴缁撴瀯璁捐涓 TCP/IP 鍗忚鏍 鍑虹増骞 2011-05](https://book.douban.com/subject/6116393/) -9.6 鏈珷灏忕粨 +[Linux 鍐呮牳缂栫▼ 鍑虹増骞 2011-5](https://book.douban.com/subject/6387052/) -绗10绔 鍏充簬鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟 +[瀛樺偍鎶鏈師鐞嗗垎鏋 鍩轰簬 Linux 2.6 鍐呮牳婧愪唬鐮 鍑虹増鏃堕棿 2011-09-01](https://item.jd.com/10830117.html) -10.1 鏋勯犲嚱鏁扮殑鍑虹幇鏃舵満 +[Linux 鍐呮牳娉ㄩ噴 鍑虹増鏃堕棿 2011-12-01](https://item.jd.com/10883042.html) -10.2 姣忎釜瀵硅薄閮芥湁榛樿鐨勬瀯閫犲嚱鏁板悧 +[Linux 鎿嶄綔绯荤粺鍘熺悊涓庡簲鐢紙绗 2 鐗堬級 鍑虹増鏃堕棿 2012-01-01](https://item.jd.com/12285169.html) -10.3 鏋愭瀯鍑芥暟鐨勫嚭鐜版椂鏈 +[娣卞叆 Linux 璁惧椹卞姩绋嬪簭鍐呮牳鏈哄埗 鍑虹増鏃堕棿 2012-01-01](https://e.jd.com/30150086.html) -10.4 鏈珷灏忕粨 +[Linux 鍘熺悊涓庣粨鏋 鍑虹増鏃堕棿 2012-02-01](https://item.jd.com/10970600.html) -绗11绔 鍏充簬铏氬嚱鏁 +[O'Reilly 绮惧搧鍥句功绯诲垪 Linux鍐呮牳绮鹃珦 绮鹃 Linux 鍐呮牳蹇呬細鐨 75 涓粷鎶 鍑虹増鏃堕棿 2012-02-01](https://item.jd.com/11185075.html) -11.1 铏氬嚱鏁扮殑鏈哄埗 +[Linux 閭d簺浜嬪効涔嬫垜鏄 USB锛堢 2 鐗堬級 鍑虹増鏃堕棿 2012-03-01](https://item.jd.com/10950780.html) -11.2 铏氬嚱鏁扮殑璇嗗埆 +[Linux 鍐呮牳鍒嗘瀽涓庨珮绾ф暀绋 鍑虹増骞 2012-8](https://book.douban.com/subject/19898484/) -11.3 鏈珷灏忕粨 +[Linux 鍐呮牳绮炬瀽锛堥檮 CD 鍏夌洏 1 寮狅級 鍑虹増鏃堕棿 2013-02-01](https://item.jd.com/11189135.html) -绗12绔 浠庡唴瀛樿搴︾湅缁ф壙鍜屽閲嶇户鎵 +[21 涓栫邯楂樼瓑瀛︽牎瑙勫垝鏁欐潗 璁$畻鏈虹瀛︿笌鎶鏈 鎿嶄綔绯荤粺鍘熺悊鍙婂簲鐢紙Linux锛 鍑虹増鏃堕棿 2013-04-01](https://item.jd.com/11215730.html) -12.1 璇嗗埆绫诲拰绫讳箣闂寸殑鍏崇郴 +[Linux 鍐呮牳璁捐鐨勮壓鏈 鍥捐В Linux 鎿嶄綔绯荤粺鏋舵瀯璁捐涓庡疄鐜板師鐞嗭紙绗 2 鐗堬級 鍑虹増鏃堕棿 2013-05-01](https://item.jd.com/11243705.html) -12.2 澶氶噸缁ф壙 + **[娣卞害鎺㈢储 Linux 鎿嶄綔绯荤粺 绯荤粺鏋勫缓鍜屽師鐞嗚В鏋 鍑虹増鏃堕棿 2013-10-08](https://e.jd.com/30189526.html)** -12.3 铏氬熀绫 +[Linux 鍐呮牳鎺㈢ 娣卞叆瑙f瀽鏂囦欢绯荤粺鍜岃澶囬┍鍔ㄧ殑鏋舵瀯涓庤璁 鍑虹増鏃堕棿 2013-12-01](https://item.jd.com/11370217.html) -12.4 鑿卞舰缁ф壙 +[鎿嶄綔绯荤粺鍘熺悊涓 Linux 瀹炰緥璁捐锛堢 2 鐗堬級 鍑虹増鏃堕棿 2014-06-01](https://e.jd.com/30467835.html) -12.5 鏈珷灏忕粨 +[璁$畻鏈烘搷浣滅郴缁熷疄楠屾寚瀵 (Linux 鐗) (鍥藉绮惧搧璇剧▼閰嶅瀹為獙鏁欐潗 鍥藉绮惧搧璧勬簮鍏变韩璇剧▼閰嶅瀹為獙鏁欐潗) 鍑虹増鏃堕棿 2014-07-01](https://item.jd.com/11506839.html) -绗13绔 寮傚父澶勭悊 + **[绮鹃 Linux 鍐呮牳缃戠粶 鍑虹増鏃堕棿 2015-06-01](https://item.jd.com/11713925.html)** -13.1 寮傚父澶勭悊鐨勭浉鍏崇煡璇 +[鎿嶄綔绯荤粺鍘熺悊涓庡疄璺垫暀绋嬶紙绗 2 鐗堬級璁$畻鏈虹郴鍒楁暀鏉 鍑虹増鏃堕棿 2015-08-01](https://item.jd.com/11778467.html) -13.2 寮傚父绫诲瀷涓哄熀鏈暟鎹被鍨嬬殑澶勭悊娴佺▼ +[娣卞叆鐞嗚В Linux 椹卞姩绋嬪簭璁捐 鍑虹増鏃堕棿 2015-11-01](https://e.jd.com/30285377.html) -13.3 寮傚父绫诲瀷涓哄璞$殑澶勭悊娴佺▼ +[鎿嶄綔绯荤粺鍘熺悊涓 Linux 瀹炶返鏁欑▼ 鍑虹増鏃堕棿 2016-01-01](https://e.jd.com/30386613.html) -13.4 璇嗗埆寮傚父澶勭悊 +[绮鹃 Linux 璁惧椹卞姩绋嬪簭寮鍙 鍑虹増鏃堕棿 2016-04-01](https://e.jd.com/30393021.html) -13.5 鏈珷灏忕粨 +[鎿嶄綔绯荤粺瀹為獙鎸囧 鍩轰簬 Linux 鍐呮牳锛堢 3 鐗堬級 鍑虹増鏃堕棿 2016-07-01](https://item.jd.com/12007400.html) -澶╀功澶滆锛氫粠姹囩紪璇█鍒癢indows鍐呮牳缂栫▼ +[Linux 鍐呮牳 API 瀹屽叏鍙傝冩墜鍐岋紙绗 2 鐗堬級 鍑虹増鏃堕棿 2016-10-01](https://e.jd.com/30469199.html) -鍐呭绠浠 +[Linux 鎶鏈唴骞 鍑虹増鏃堕棿 2016-12-01](https://item.jd.com/12086406.html) -鍓嶈█ +[娣卞叆 Linux 鍐呮牳鏋舵瀯涓庡簳灞傚師鐞 鍑虹増鏃堕棿 2017-11-01](https://item.jd.com/12233973.html) -鍏ユ墜绡 鐔熸倝姹囩紪 +[鎿嶄綔绯荤粺鍘熺悊鍙 Linux 鍐呮牳鍒嗘瀽(绗 2 鐗堬級21 涓栫邯楂樼瓑瀛︽牎瑙勫垝鏁欐潗 璁$畻鏈虹瀛︿笌鎶鏈 鍑虹増鏃堕棿 2018-08-01](https://item.jd.com/12420801.html) -绗1绔 姹囩紪鎸囦护涓嶤璇█ +[Linux 璁惧椹卞姩绋嬪簭寮鍙戯紙褰卞嵃鐗 鑻辨枃鐗堬級 [Linux Device Drivers Development] 鍑虹増鏃堕棿 2018-08-01](https://item.jd.com/12407112.html) -1.1 涓婃満寤虹珛绗竴涓伐绋 +[2016 鍚屾祹澶у鏈鏁欐潗鍑虹増鍩洪噾 Linux 鎿嶄綔绯荤粺瀹炵幇鍘熺悊 鍑虹増鏃堕棿 2018-09-01](https://item.jd.com/12466764.html) -1.2 绠瑕佸涔犲父鐢ㄧ殑姹囩紪鎸囦护 +[搴栦竵瑙g墰 Linux 鍐呮牳鍒嗘瀽 鍑虹増鏃堕棿 2018-10-01](https://item.jd.com/12449500.html) -1.3 C鍑芥暟鐨勫弬鏁颁紶閫掕繃绋 +[鎿嶄綔绯荤粺鍘熺悊涓庡簲鐢紙Linux锛 鍑虹増鏃堕棿 2018-12-01](https://item.jd.com/12706440.html) -绗2绔 C璇█鐨勬祦绋嬪拰澶勭悊 +[鎿嶄綔绯荤粺瀹為獙鎸囧涓庝範棰樿В鏋 鍑虹増鏃堕棿 2019-10-01](https://item.jd.com/12817694.html) -2.1 C璇█鐨勫惊鐜弽姹囩紪 +[绮鹃 Linux 鍐呮牳 鏅鸿兘璁惧寮鍙戞牳蹇冩妧鏈 鍑虹増鏃堕棿 2020-01-01](https://e.jd.com/30612571.html) -2.2 C璇█鍒ゆ柇涓庡垎鏀殑鍙嶆眹缂 +[鐢ㄨ姱鎺㈡牳 鍩轰簬榫欒姱鐨 Linux 鍐呮牳鎺㈢储瑙f瀽 鍑虹増鏃堕棿 2020-08-01](https://item.jd.com/12936362.html) -2.3 C璇█鐨勬暟缁勪笌缁撴瀯 +[Linux 鍐呮牳瑙傛祴鎶鏈 BPF [Linux Observability with BPF] 鍑虹増鏃堕棿 2020-08-01](https://item.jd.com/12939760.html) -2.4 C璇█鐨勫叡鐢ㄤ綋鍜屾灇涓剧被鍨 +[Linux Kernel Development Cookbook 鍑虹増鏃堕棿 2021-01](https://www.packtpub.com/product/linux-kernel-development-cookbook/9781789953435) -绗3绔 缁冧範鍙嶆眹缂朇璇█绋嬪簭 +[娣卞害鎺㈢储 Linux 绯荤粺铏氭嫙鍖 鍘熺悊涓庡疄鐜 鍑虹増鏃堕棿 2020-11-01](https://item.jd.com/12742101.html) -3.1 绠楁硶鐨勫弽姹囩紪 +## JVM 鍓嶄笘浠婄敓 -3.2 鍙戣鐗堢殑鍙嶆眹缂 +### JAVA 1.0 浠e彿 Oak锛堟鏍戯級 -3.3 姹囩紪鍙岰璇█缁冧範 +#### 1996-01-23 鍙戣 -瀹屽叏鎵嬪唽涓涗功锛欳++鍙傝冨ぇ鍏紙绗4鐗堬級 [C++: The Complete Reference] 鍑虹増鏃堕棿锛2003-01-01 +### JAVA 1.1 -C++璁捐鏂版濈淮锛氭硾鍨嬬紪绋嬩笌璁捐妯″紡涔嬪簲鐢 鍑虹増鏃堕棿锛2003-03-01 +#### 1997-02-19 鍙戣 涓昏鏇存柊鍐呭 -C++ STL绋嬪簭鍛樺紑鍙戞寚鍗楋紙闄勫厜鐩橈級 鍑虹増鏃堕棿锛2003-04-01 +寮曞叆 JDBC -娣卞叆C++绯诲垪锛氭硾鍨嬬紪绋嬩笌STL 鍑虹増鏃堕棿锛2003-04-01 +娣诲姞鍐呴儴绫绘敮鎸 -C++骞惰涓庡垎甯冨紡缂栫▼ [Parallel and Distributed Programming Using C++] 鍑虹増鏃堕棿锛2004-01-01 +寮曞叆 JAVA BEAN -C++缃戠粶缂栫▼锛屽嵎 2 锛氬熀浜嶢CE鍜屾鏋剁殑绯荤粺鍖栧鐢 鍑虹増鏃堕棿锛2004-01-01 +寮曞叆 RMI -ACE绋嬪簭鍛樻寚鍗楋細缃戠粶涓庣郴缁熺紪绋嬬殑瀹炵敤璁捐妯″紡锛堥檮鍏夌洏锛 [The ACE Programmers Guide] 鍑虹増鏃堕棿锛2004-01-01 +寮曞叆鍙嶅皠 -C++缂栫▼鑹烘湳 鍑虹増鏃堕棿锛2005-04-01 +### JAVA 1.2 浠e彿 Playground锛堟搷鍦猴級 -绮鹃歄racle10g Pro*C/C++缂栫▼ 鍑虹増鏃堕棿锛2005-10-01 +#### 1998-12-8 鍙戣 涓昏鏇存柊鍐呭 -Effective C++涓枃鐗堬細鏀瑰杽绋嬪簭涓庤璁$殑55涓叿浣撳仛娉曪紙绗3鐗堬級 鍑虹増鏃堕棿锛2006-07-01 +寮曞叆闆嗗悎妗嗘灦 -C++缃戠粶缂栫▼锛屽嵎1锛氳繍鐢ˋCE鍜屾ā寮忔秷闄ゅ鏉傛 鍑虹増鏃堕棿锛2007-05-01 +瀵瑰瓧绗︿覆甯搁噺鍋氬唴瀛樻槧灏 -[鎸夐渶鍗板埛]C++ STL寮鍙戞妧鏈寮 鍑虹増鏃堕棿锛2007-08-01 +寮曞叆 JIT锛圝ust In Time锛夌紪璇戝櫒 -C++娌夋濆綍锛歊uminations on C++ 鍑虹増鏃堕棿锛2008-01-01 +寮曞叆鎵撳寘鏂囦欢鏁板瓧绛惧悕 -C鍜孋++缁忓吀钁椾綔锛欳涓撳缂栫▼Expert C Programming Deep C Secrets 鍑虹増鏃堕棿锛2008-02-01 +寮曞叆鎺у埗鎺堟潈璁块棶绯荤粺璧勬簮绛栫暐宸ュ叿 -C鍜孋++缁忓吀钁椾綔锛欳闄烽槺涓庣己闄 [C Traps and Pitfalls] 鍑虹増鏃堕棿锛2008-02-01 +寮曞叆 JFC锛圝ava Foundation Classes锛 鍖呮嫭 Swing 1.0 鎷栨斁鍜 Java 2D 绫诲簱 -C鍜孋++缁忓吀钁椾綔锛欳鍜屾寚閽 POINTERS ON C 鍑虹増鏃堕棿锛2008-04-01 +寮曞叆 Java 鎻掍欢 -Professional Multicore Programming: Design And Implementation For C++ Developers 鍑虹増鏃堕棿锛2008-08-22 +JDBC 涓紩鍏ュ彲婊氬姩缁撴灉闆 BLOB CLOB 鎵归噺鏇存柊鍜岀敤鎴疯嚜瀹氫箟绫诲瀷 -浣犲繀椤荤煡閬撶殑495涓狢璇█闂 鍑虹増鏃堕棿锛2009-02-01 +Applet 涓坊鍔犲0闊虫敮鎸 -浠g爜鎻锛氫粠C/C++鐨勮搴︽帰绉樿绠楁満绯荤粺锛堟帹鑽怭C闃呰锛 鍑虹増鏃堕棿锛2009-09-01 +### JAVA 1.3 浠e彿 Kestrel锛堢孩闅硷級 -C++缂栫▼瑙勮寖锛101鏉¤鍒欍佸噯鍒欎笌鏈浣冲疄璺 鍑虹増鏃堕棿锛2010-12-01 +#### 2000-5-8 鍙戝竷 涓昏鏇存柊鍐呭 -More Exceptional C++锛40涓柊鐨勫伐绋嬮毦棰樸佺紪绋嬬枒闂強瑙e喅鏂规硶锛堜腑鏂囩増锛 鍑虹増鏃堕棿锛2011-01-01 +寮曞叆 Java Sound API -鎻愰珮C++鎬ц兘鐨勭紪绋嬫妧鏈 鍑虹増鏃堕棿锛2011-03-01 +寮曞叆 jar 鏂囦欢绱㈠紩 -鐧界洅娴嬭瘯涔嬮亾锛欳++test 鍑虹増鏃堕棿锛2011-04-01 +瀵 Java 鍚勬柟闈㈠浜嗗ぇ閲忎紭鍖栧拰澧炲己 -C++缂栫▼鎬濇兂锛堜袱鍗峰悎璁㈡湰锛 鍑虹増鏃堕棿锛2011-07-01 +Java Platform Debugger Architecture 鐢ㄤ簬 Java 璋冭瘯鐨勫钩鍙 -Professional C++, Second Edition 鍑虹増鏃堕棿锛2011-09-16 +JAVA 1.4 浠e彿 Merlin锛堥毤锛 -缂栧啓楂樿川閲忎唬鐮侊細鏀瑰杽C++绋嬪簭鐨150涓缓璁 鍑虹増鏃堕棿锛2011-12-01 +#### 2004-2-6 鍙戝竷锛堥娆″湪 JCP 涓嬪彂琛岋級 涓昏鏇存柊鍐呭 -Applied C++涓枃鐗 鍑虹増鏃堕棿锛2012-01-01 +娣诲姞 XML 澶勭悊 -娣卞害鎺㈢储C++瀵硅薄妯″瀷 鍑虹増鏃堕棿锛2012-01-01 +娣诲姞 Java 鎵撳嵃鏈嶅姟锛圝ava Print Service API锛 -Imperfect C++锛堜腑鏂囩増锛 [Imperfect C++: Practical Solutions for Real-Life Programming] 鍑虹増鏃堕棿锛2012-06-01 +寮曞叆 Logging API -C++浠g爜璁捐涓庨噸鐢 [Designing and Coding Reusable C++] 鍑虹増鏃堕棿锛2012-06-01 +寮曞叆 Java Web Start -ACE鎶鏈唴骞曪細娣卞叆瑙f瀽ACE鏋舵瀯璁捐涓庡疄鐜板師鐞 鍑虹増鏃堕棿锛2012-07-09 +寮曞叆 JDBC 3.0 API -楂樿川閲忕▼搴忚璁℃寚鍗楋細C++/C璇█ 鍑虹増鏃堕棿锛2012-10-01 +寮曞叆鏂█ -C++缂栫▼璋冭瘯绉樼瑘 鍑虹増鏃堕棿锛2013-01-01 +寮曞叆 Preferences API -Linux澶氱嚎绋嬫湇鍔$缂栫▼ 浣跨敤muduo C++缃戠粶搴 鍑虹増鏃堕棿锛2013-01-01 +寮曞叆閾惧紡寮傚父澶勭悊 -C鍜孋++瀹炲姟绮鹃夛細C++ Templates涓枃鐗 鍑虹増鏃堕棿锛2013-04-01 +鏀寔 IPV6 -瀹炴垬绯诲垪锛氭繁鍏ュ疄璺礐++妯℃澘缂栫▼ 鍑虹増鏃堕棿锛2013-06-01 +鏀寔姝e垯琛ㄨ揪寮 -鍍忚绠楁満绉戝瀹朵竴鏍锋濊僀++ 鍑虹増鏃堕棿锛2013-06-01 +寮曞叆 Image I/O API -鍗庣珷绉戞妧锛氭繁鍏ョ悊瑙++11锛欳++11鏂扮壒鎬цВ鏋愪笌搴旂敤 鍑虹増鏃堕棿锛2013-06-01 +NIO 闈為樆濉炵殑 IO 浼樺寲 Java 鐨 IO 璇诲彇 -Essential C++涓枃鐗 鍑虹増鏃堕棿锛2013-08-01 +### JDK 5.0 浠e彿 Tiger锛堣佽檸锛 鏈夐噸澶ф敼鍔 -鍥剧伒绋嬪簭璁捐涓涗功锛欳++ API璁捐 [API Design for C++] 鍑虹増鏃堕棿锛2013-08-01 +#### 2004-9-30 鍙戝竷 涓昏鏇存柊鍐呭 -浠庣己闄蜂腑瀛︿範C/C++ 鍑虹増鏃堕棿锛2013-09-01 +寮曞叆娉涘瀷 -鍗庣珷绋嬪簭鍛樹功搴擄細C鍜孋++瀹夊叏缂栫爜锛堝師涔︾2鐗堬級 鍑虹増鏃堕棿锛2014-01-01 +For-Each 寰幆 澧炲己寰幆 鍙娇鐢ㄨ凯浠f柟寮 -缂栫爜鐨勬硶鍒欙細C++绋嬪簭鍛樹笉鍙笉鐭ョ殑101鏉″疄鐢ㄧ粡楠 鍑虹増鏃堕棿锛2014-01-01 +鑷姩瑁呯涓庤嚜鍔ㄦ媶绠 -C++ For Dummies, 7th Edition 鍑虹増鏃堕棿锛2014-01-01 +寮曞叆绫诲瀷瀹夊叏鐨勬灇涓 -娣卞叆鐞嗚ВC鎸囬拡锛圕/C++绋嬪簭鍛樿繘闃跺繀澶囷紝閫忓交鐞嗚В鎸囬拡涓庡唴瀛樼鐞嗭級 鍑虹増鏃堕棿锛2014-02-01 +寮曞叆鍙彉鍙傛暟 -C鏍囧噯搴擄紙鑻辨枃鐗堬級 鍑虹増鏃堕棿锛2014-04-01 +娣诲姞闈欐佸紩鍏 -娣卞叆瀹炶返Boost锛欱oost绋嬪簭搴撳紑鍙戠殑94涓绗 鍑虹増鏃堕棿锛2014-04-21 +寮曞叆娉ㄨВ -C++ All-in-One For Dummies, 3rd Edition 鍑虹増鏃堕棿锛2014-08-08 +寮曞叆 Instrumentation -澶ц妯++绋嬪簭璁捐 鍑虹増鏃堕棿锛2014-10-01 +鎻愪緵浜 java.util.concurrent 骞跺彂鍖 -鍗庣珷鍘熷垱绮惧搧路娣卞叆搴旂敤C++11锛氫唬鐮佷紭鍖栦笌宸ョ▼绾у簲鐢 鍑虹増鏃堕棿锛2015-05-01 +### JDK 6 浠e彿 Mustang锛堥噹椹級 -C++ STL鍩虹鍙婂簲鐢紙绗2鐗堬級/涓浗楂樼瓑瀛︽牎璁$畻鏈虹瀛︿笌鎶鏈笓涓 搴旂敤鍨 瑙勫垝鏁欐潗 鍑虹増鏃堕棿锛2015-05-01 +#### 2006-12-11 鍙戝竷 涓昏鏇存柊鍐呭 -C/C++鎶鏈笡涔︼細楂樼骇C/C++缂栬瘧鎶鏈 [Advanced C and C++ Compiling] 鍑虹増鏃堕棿锛2015-05-01 +寮曞叆浜嗕竴涓敮鎸佽剼鏈紩鎿庣殑鏂版鏋讹紙鍩轰簬 Mozilla Rhino 鐨 JavaScript 鑴氭湰寮曟搸锛 -C++鏍囧噯搴擄紙绗2鐗堬級 鍑虹増鏃堕棿锛2015-06-01 +UI 鐨勫寮 -C++骞跺彂缂栫▼瀹炴垬 鍑虹増鏃堕棿锛2015-06-01 +瀵 WebService 鏀寔鐨勫寮猴紙JAX-WS 2.0 鍜 JAXB 2.0锛 -Learning Boost C++ Libraries 鍑虹増鏃堕棿锛2015-07-31 +寮曞叆 JDBC 4.0 API -鍐欑粰澶у繖浜虹湅鐨凜++ 鍑虹増鏃堕棿锛2015-08-01 +寮曞叆 Java Compiler API -C瀹夊叏缂栫爜鏍囧噯锛氬紑鍙戝畨鍏ㄣ佸彲闈犮佺ǔ鍥虹郴缁熺殑98鏉¤鍒欙紙鍘熶功绗2鐗堬級 鍑虹増鏃堕棿锛2015-08-01 +閫氱敤鐨 Annotations 鏀寔 -鏈鏂癈/C++鍑芥暟涓庣畻娉曢熸煡閫熺敤澶ц緸鍏革紙闄勫厜鐩橈級 鍑虹増鏃堕棿锛2015-09-01 +### JDK 7 浠e彿 Dolphin锛堟捣璞氾級 -Boost.Asio C++ Network Programming - Second Edition 鍑虹増鏃堕棿锛2015-09-16 +#### 2011-07-28 鍙戝竷 杩欐槸 sun 琚 oracle 鏀惰喘锛2009 骞 4 鏈堬級鍚庣殑绗竴涓増鏈 涓昏鏇存柊鍐呭 -澶ч亾鑷崇畝 C++ STL锛堟爣鍑嗘ā鏉垮簱锛夌簿瑙 鍑虹増鏃堕棿锛2015-11-01 +switch 璇彞鍧椾腑鍏佽浠ュ瓧绗︿覆浣滀负鍒嗘敮鏉′欢 -C++娉涘瀷锛歋TL鍘熺悊鍜屽簲鐢 鍑虹増鏃堕棿锛2015-12-01 +鍦ㄥ垱寤烘硾鍨嬪璞℃椂搴旂敤绫诲瀷鎺ㄦ柇 姣斿浣犱箣鍓嶇増鏈娇鐢ㄦ硾鍨嬬被鍨嬫椂杩欐牱鍐 ArrayList userList= new ArrayList(); 杩欎釜鐗堟湰鍙渶瑕佽繖鏍峰啓 ArrayList userList= new ArrayList<>(); 涔熷嵆鏄悗闈竴涓皷鎷彿鍐呯殑绫诲瀷 JVM 甯垜浠嚜鍔ㄧ被鍨嬪垽鏂ˉ鍏ㄤ簡 -Boost.Asio C++ Network Programming Cookbook 鍑虹増鏃堕棿锛2016-01-25 +鍦ㄤ竴涓鍙ュ潡涓崟鑾峰绉嶅紓甯 -C++缂栫▼鍓栨瀽 闂 鏂规鍜岃璁″噯鍒 鍑虹増鏃堕棿锛2016-03-01 +娣诲姞 try-with-resources 璇硶鏀寔 浣跨敤鏂囦欢鎿嶄綔鍚庝笉鐢ㄥ啀鏄剧ず鎵ц close 浜 -C++澶氱嚎绋嬬紪绋嬪疄鎴 鍑虹増鏃堕棿锛2016-04-01 +鏀寔鍔ㄦ佽瑷 -C++瑕嗚緳褰 鍑虹増鏃堕棿锛2016-04-01 +JSR 203 NIO 2.0 AIO 鏂 I/O 鏂囦欢绯荤粺 澧炲姞澶氶噸鏂囦欢鐨勬敮鎸 鏂囦欢鍘熷鏁版嵁鍜岀鍙烽摼鎺 鏀寔 ZIP 鏂囦欢鎿嶄綔 -C++蹇呯煡蹇呬細 鍑虹増鏃堕棿锛2016-04-01 +JDBC 瑙勮寖鐗堟湰鍗囩骇涓 JDBC 4.1 -C楂樼骇缂栫▼锛氬熀浜庢ā鍧楀寲璁捐鎬濇兂鐨凜璇█寮鍙 鍑虹増鏃堕棿锛2016-05-01 +寮曞叆 Fork/Join 妗嗘灦锛岀敤浜庡苟琛屾墽琛屼换鍔 -C鎸囬拡锛氬熀鏈蹇点佹牳蹇冩妧鏈強鏈浣冲疄璺 鍑虹増鏃堕棿锛2016-05-01 +鏀寔甯︿笅鍒掔嚎鐨勬暟鍊 濡 int a = 100000000; 0 澶涓嶄究浜庝汉闃呰 杩欎釜鐗堟湰鏀寔杩欐牱鍐 int a = 100_000_000 杩欐牱灏卞鏁板间竴鐩簡鐒朵簡 -鍚庡彴寮鍙戯細鏍稿績鎶鏈笌搴旂敤瀹炶返 鍑虹増鏃堕棿锛2016-08-01 +Swing 缁勪欢澧炲己锛圝Layer Nimbus Look Feel鈥︼級鍙傝 -鐮佸啘路缁忓吀C++锛堢26鏈燂級 鍑虹増鏃堕棿锛2016-12-22 +### JDK 8 -C++绋嬪簭璁捐瀹炶返涓庢妧宸э細娴嬭瘯椹卞姩寮鍙 鍑虹増鏃堕棿锛2017-01-01 +#### 2014-3-19 鍙戝竷 oracle 鍘熻鍒 2013 骞村彂甯 鐢变簬瀹夊叏鎬ч棶棰樹袱娆¤烦绁 鏄嚜 JAVA 5 浠ユ潵鏈鍏烽潻鍛芥х殑鐗堟湰 涓昏鏇存柊鍐呭 -C++鏍囧噯妯℃澘搴撶紪绋嬪疄鎴 鍑虹増鏃堕棿锛2017-01-01 +鎺ュ彛鏀硅繘 鎺ュ彛灞呯劧鍙互瀹氫箟榛樿鏂规硶瀹炵幇鍜岄潤鎬佹柟娉曚簡 -C++ STL鏍囧噯绋嬪簭搴撳紑鍙戞寚鍗楋紙绗2鐗堬級 鍑虹増鏃堕棿锛2017-01-01 +寮曞叆鍑芥暟寮忔帴鍙 -C++17 STL Cookbook 鍑虹増鏃堕棿锛2017-06-28 +寮曞叆 Lambda 琛ㄨ揪寮 -Boost C++ Application Development Cookbook - Second Edition 鍑虹増鏃堕棿锛2017-08-30 +寮曞叆鍏ㄦ柊鐨 Stream API 鎻愪緵浜嗗鍊兼祦杩涜鍑芥暟寮忔搷浣 -Learning C++ Functional Programming 鍑虹増鏃堕棿锛2017-08-10 +寮曞叆鏂扮殑 Date-Time API -Mastering the C++17 STL 鍑虹増鏃堕棿锛2017-09-28 +寮曞叆鏂扮殑 JavaScrpit 寮曟搸 Nashorn -C++鍏ラ棬缁忓吀锛堢10鐗堬級 鍑虹増鏃堕棿锛2017-11-01 +寮曞叆 Base64 绫诲簱 -C++璇箟鍜屾ц兘鍒嗘瀽 鍑虹増鏃堕棿锛2017-12-01 +寮曞叆骞跺彂鏁扮粍锛坧arallel锛 -C++鎬ц兘浼樺寲鎸囧崡 鍑虹増鏃堕棿锛2018-01-01 +娣诲姞鏂扮殑 Java 宸ュ叿 jjs jdeps -C++ High Performance 鍑虹増鏃堕棿锛2018-01-31 +Java FX 涓绉嶇敤鍦ㄦ闈㈠紑鍙戦鍩熺殑鎶鏈 -Effective Modern C++(涓枃鐗) 鍑虹増鏃堕棿锛2018-04-01 +闈欐侀摼鎺 JNI 绋嬪簭搴 -澶氭牳寮傛瀯骞惰璁$畻锛圤penMP4.5C\C++绡囷級/瓒呯畻銆佷簯璁$畻涓庡ぇ鏁版嵁鎶鏈笓涓氭暀绋嬄锋櫘閫氶珮绛夋暀鑲测滃崄涓変簲鈥濊鍒掓暀鏉 鍑虹増鏃堕棿锛2018-04-01 +### JDK 9 -C/C++瀹炶返杩涢樁涔嬮亾锛氬啓缁欑▼搴忓憳鐪嬬殑缂栫▼涔 鍑虹増鏃堕棿锛2018-05-01 +#### 2017-9-21 鍙戝竷 -鏂版爣鍑咰++绋嬪簭璁捐 鍑虹増鏃堕棿锛2018-08-01 +妯″潡鍖栵紙jiqsaw锛 -娓呭崕璁$畻鏈哄浘涔﹁瘧涓涳細绮鹃欳++锛堢9鐗堬級 鍑虹増鏃堕棿锛2018-08-01 +浜や簰寮忓懡浠よ锛圝Shell锛 -Linux C涓嶤++ 涓绾垮紑鍙戝疄璺 鍑虹増鏃堕棿锛2018-12-01 +榛樿鍨冨溇鍥炴敹鏈熷垏鎹负 G1 -Hands-On System Programming with C++ 鍑虹増鏃堕棿锛2018-12-26 +杩涚▼鎿嶄綔鏀硅繘 -Hands-On Design Patterns with C++ 鍑虹増鏃堕棿锛2019-01-30 +绔炰簤閿佹ц兘浼樺寲 -C++浠g爜鏁存磥涔嬮亾锛欳++17鍙寔缁蒋浠跺紑鍙戞ā寮忓疄璺 鍑虹増鏃堕棿锛2019-04-01 +鍒嗘浠g爜缂撳瓨 -C++楂樼骇缂栫▼(绗4鐗) 鍑虹増鏃堕棿锛2019-04-01 +浼樺寲瀛楃涓插崰鐢ㄧ┖闂 -C鎸囬拡鍘熺悊鎻锛氬熀浜庡簳灞傚疄鐜版満鍒 鍑虹増鏃堕棿锛2019-05-01 +### JDK 10 -鐧借瘽C++涔嬬粌鍔 鍑虹増鏃堕棿锛2019-05-01 +#### 2018-3-21 鍙戝竷 -C++绋嬪簭璁捐璇█锛堢1-4閮ㄥ垎 濂楄鍏2鍐岋級 鍑虹増鏃堕棿锛2019-06-01 +JEP 286 var 灞閮ㄥ彉閲忕被鍨嬫帹鏂 -C++17鍏ラ棬缁忓吀锛堢5鐗堬級 鍑虹増鏃堕棿锛2019-06-01 +JEP 296 灏嗗師鏉ョ敤 Mercurial 绠$悊鐨勪紬澶 JDK 浠撳簱浠g爜 鍚堝苟鍒颁竴涓粨搴撲腑 绠鍖栧紑鍙戝拰绠$悊杩囩▼ -C Primer Plus 绗6鐗 涓枃鐗 鍑虹増鏃堕棿锛2019-11-01 +JEP 304 缁熶竴鐨勫瀮鍦惧洖鏀舵帴鍙 -C++鍑芥暟寮忕紪绋 [Functional Programming in C++] 鍑虹増鏃堕棿锛2020-01-01 +JEP 307 G1 鍨冨溇鍥炴敹鍣ㄧ殑骞惰瀹屾暣鍨冨溇鍥炴敹 瀹炵幇骞惰鎬ф潵鏀瑰杽鏈鍧忔儏鍐典笅鐨勫欢杩 -Boost绋嬪簭搴撳畬鍏ㄥ紑鍙戞寚鍗楋細娣卞叆C++鈥滃噯鈥濇爣鍑嗗簱锛堢5鐗堬級 鍑虹増鏃堕棿锛2020-06-01 +JEP 310 搴旂敤绋嬪簭绫绘暟鎹 (AppCDS) 鍏变韩 閫氳繃璺ㄨ繘绋嬪叡浜氱敤绫诲厓鏁版嵁鏉ュ噺灏戝唴瀛樺崰鐢ㄧ┖闂 鍜屽噺灏戝惎鍔ㄦ椂闂 -C++鏂扮粡鍏 鍑虹増鏃堕棿锛2020-07-01 +JEP 312 ThreadLocal 鎻℃墜浜や簰 鍦ㄤ笉杩涘叆鍒板叏灞 JVM 瀹夊叏鐐 (Safepoint) 鐨勬儏鍐典笅 瀵圭嚎绋嬫墽琛屽洖璋 浼樺寲鍙互鍙仠姝㈠崟涓嚎绋 鑰屼笉鏄仠鍏ㄩ儴绾跨▼鎴栦竴涓兘涓嶅仠 -### Linux 绡 +JEP 313 绉婚櫎 JDK 涓檮甯︾殑 javah 宸ュ叿 鍙互浣跨敤 javac -h 浠f浛 -Debug Hacks涓枃鐗 鍑虹増骞: 2011-8 +JEP 314 浣跨敤闄勫姞鐨 Unicode 璇█鏍囪鎵╁睍 -Linux鍐呮牳瀹夊叏妯″潡娣卞叆鍓栨瀽 鍑虹増鏃堕棿锛2016-12-01 +JEP 317 鑳藉皢鍫嗗唴瀛樺崰鐢ㄥ垎閰嶇粰鐢ㄦ埛鎸囧畾鐨勫鐢ㄥ唴瀛樿澶 -Linux鍐呮牳婧愪唬鐮佸垎鏋 鍑虹増骞: 2000-06 +JEP 317 浣跨敤 Graal 鍩轰簬 Java 鐨勭紪璇戝櫒 鍙互棰勫厛鎶 Java 浠g爜缂栬瘧鎴愭湰鍦颁唬鐮佹潵鎻愬崌鏁堣兘 -Linux鍐呮牳鍒嗘瀽鍙婂父瑙侀棶棰樿В绛 (骞宠) 鍑虹増骞: 2000-07 +JEP 318 鍦 OpenJDK 涓彁渚涗竴缁勯粯璁ょ殑鏍硅瘉涔﹂鍙戞満鏋勮瘉涔 寮婧愮洰鍓 Oracle 鎻愪緵鐨勭殑 Java SE 鐨勬牴璇佷功 杩欐牱 OpenJDK 瀵瑰紑鍙戜汉鍛樹娇鐢ㄨ捣鏉ユ洿鏂逛究 -LINUX鐨勫唴鏍镐笌缂栫▼ 鍑虹増鏃堕棿锛 2000-07-01 +JEP 322 鍩轰簬鏃堕棿瀹氫箟鐨勫彂甯冪増鏈 鍗充笂杩版彁鍒扮殑鍙戝竷鍛ㄦ湡 鐗堟湰鍙蜂负 $FEATURE.$INTERIM.$UPDATE.$PATCH 鍒嗗埆鏄ぇ鐗堟湰 涓棿鐗堟湰 鍗囩骇鍖呭拰琛ヤ竵鐗堟湰 -Linux鎿嶄綔绯荤粺鍐呮牳鍒嗘瀽 鍑虹増骞: 2000-8 +### JDK 11 -LINUX鍐呮牳婧愪唬鐮佹儏鏅垎鏋愶紙涓婂唽锛 鍑虹増鏃堕棿锛2001-01-01 +#### 2018-9-25 鍙戝竷 -LINUX鍐呮牳婧愪唬鐮佹儏鏅垎鏋愶紙涓嬶級 鍑虹増鏃堕棿锛2001-09-01 +瀹樼綉鍏紑鐨 17 涓 JEP锛圝DK Enhancement Proposal 鐗规у寮烘彁璁級 -Linux鍐呮牳2.4鐗堟簮浠g爜鍒嗘瀽澶у叏 鍑虹増骞: 2002-1-1 +JEP 181 Nest-Based Access Control锛堝熀浜庡祵濂楃殑璁块棶鎺у埗锛 -Linux鍐呮牳婧愪唬鐮 鍑虹増骞: 2002-1-1 +JEP 309 Dynamic Class-File Constants锛堝姩鎬佺殑绫绘枃浠跺父閲忥級 -娣卞叆鍒嗘瀽Linux鍐呮牳婧愪唬鐮 鍑虹増鏃堕棿锛2002-07-01 +JEP 315 Improve Aarch64 Intrinsics锛堟敼杩 Aarch64 Intrinsics锛 -鏅氶珮绛夋暀鑲测滃崄涓浜斺濆浗瀹剁骇瑙勫垝鏁欐潗锛氳竟骞茶竟瀛︼紙LINUX鍐呮牳鎸囧锛 [LEARNING LINUX KERNEL BY PRACTICE] 鍑虹増鏃堕棿锛2002-08-01 +JEP 318 Epsilon A No-Op Garbage Collector锛圗psilon 鍨冨溇鍥炴敹鍣 鍙堣绉颁负 No-Op锛堟棤鎿嶄綔锛夊洖鏀跺櫒锛 -Linux鍐呮牳鍒嗘瀽涓庡疄渚嬪簲鐢 鍑虹増骞: 2002-9 +JEP 320 Remove the Java EE and CORBA Modules锛堢Щ闄 Java EE 鍜 CORBA 妯″潡 JavaFX 涔熷凡琚Щ闄わ級 -鎿嶄綔绯荤粺鏁欑▼锛歀inux瀹炰緥鍒嗘瀽/闈㈠悜21涓栫邯楂樼瓑瀛︽牎璁$畻鏈虹被涓撲笟绯诲垪鏁欐潗 鍑虹増鏃堕棿锛2004-01-01 +JEP 321 HTTP Client (Standard) -楂樼瓑瀛︽牎璁$畻鏈虹瀛︿笌鎶鏈暀鏉愶細Linux鎿嶄綔绯荤粺鍒嗘瀽鏁欑▼锛堟帹鑽怭C闃呰锛 鍑虹増鏃堕棿锛2004-05-01 +JEP 323 Local-Variable Syntax for Lambda Parameters锛堢敤浜 Lambda 鍙傛暟鐨勫眬閮ㄥ彉閲忚娉曪級 -Linux鍐呮牳瀹屽叏娉ㄩ噴 鍑虹増鏃堕棿锛2004-09-01 +JEP 324 Key Agreement with Curve25519 and Curve448锛堥噰鐢 Curve25519 鍜 Curve448 绠楁硶瀹炵幇鐨勫瘑閽ュ崗璁級 -Linux0.01鍐呮牳鍒嗘瀽涓庢搷浣滅郴缁熻璁★紙鍒涢犱綘鑷繁鐨勬搷浣滅郴缁燂級锛堥檮CD鈥擱OM鍏夌洏1寮狅級 鍑虹増鏃堕棿锛2004-10-01 +JEP 327 Unicode 10 -鍥藉璁$畻鏈虹瀛︾粡鍏告暀鏉愶細Linux鍐呮牳缂栫▼鎸囧崡锛堢3鐗堬級 鍑虹増鏃堕棿锛2004-11-01 +JEP 328 Flight Recorder锛堥琛岃褰曚华锛 -IA-64 Linux鍐呮牳璁捐涓庡疄鐜 鍑虹増骞: 2004-11 +JEP 329 ChaCha20 and Poly1305 Cryptographic Algorithms锛堝疄鐜 ChaCha20 鍜 Poly1305 鍔犲瘑绠楁硶锛 -鎿嶄綔绯荤粺锛歀inux 绡/楂樿亴楂樹笓21涓栫邯瑙勫垝鏁欐潗 鍑虹増鏃堕棿锛2005-01-01 +JEP 330 Launch Single-File Source-Code Programs锛堝惎鍔ㄥ崟涓 Java 婧愪唬鐮佹枃浠剁殑绋嬪簭锛 -Linux鎿嶄綔绯荤粺鍐呮牳瀹炰範 鍑虹増骞: 2005-2 +JEP 331 Low-Overhead Heap Profiling锛堜綆寮閿鐨勫爢鍒嗛厤閲囨牱鏂规硶锛 -LInux鍐呮牳鍒嗘瀽鍙婄紪绋 鍑虹増鏃堕棿锛2005-09-01 +JEP 332 Transport Layer Security (TLS) 1.3锛堝 TLS 1.3 鐨勬敮鎸侊級 -O'Reilly锛歀INUX璁惧椹卞姩绋嬪簭锛堢3鐗堬級 鍑虹増鏃堕棿锛2006-01-01 +JEP 333 ZGC A Scalable Low-Latency Garbage Collector (Experimental)锛圸GC 鍙几缂╃殑浣庡欢杩熷瀮鍦惧洖鏀跺櫒 澶勪簬瀹為獙鎬ч樁娈碉級 -Linux缃戠粶浣撶郴缁撴瀯锛歀inux鍐呮牳涓綉缁滃崗璁殑璁捐涓庡疄鐜 鍑虹増鏃堕棿锛2006-07-01 +JEP 335 Deprecate the Nashorn JavaScript Engine锛堝純鐢 Nashorn JavaScript 寮曟搸锛 -Linux鍐呮牳鍒嗘瀽鍙婇珮绾х紪绋嬶紙鎺ㄨ崘PC闃呰锛 鍑虹増鏃堕棿锛2006-07-01 +JEP 336 Deprecate the Pack200 Tools and API锛堝純鐢 Pack200 宸ュ叿鍙婂叾 API锛 -O'Reilly锛氭繁鍏ョ悊瑙INUX鍐呮牳锛堢3鐗堬級锛堟兜鐩2.6鐗堬級 鍑虹増鏃堕棿锛2008-01-01 +### JDK 12 -璁$畻鏈虹瀛︿笌鎶鏈郴鍒楁暀鏉愶細Linux鍘熺悊涓庡簲鐢 鍑虹増鏃堕棿锛2008-03-01 +#### 2019-3-19 鍙戝竷 -Linux涓璗CP/IP鍗忚瀹炵幇鍙婂祵鍏ュ紡搴旂敤 鍑虹増鏃堕棿锛2008-07-01 +JEP 189 Shenandoah A Low-Pause-Time Garbage Collector (Experimental) -楂樼瓑瀛︽牎璁$畻鏈轰笓涓氭暀鏉愮簿閫壜疯绠楁満鍘熺悊路寰瀷璁$畻鏈烘搷浣滅郴缁熷熀纭锛氬熀浜嶭inux/i386 鍑虹増鏃堕棿锛2008-07-01 +JEP 230 Microbenchmark Suite -楂樼瓑瀛︽牎鐢靛瓙涓庤兘淇$被涓撲笟鈥滃崄涓浜斺濊鍒掓暀鏉惵疯绠楁満鎿嶄綔绯荤粺鍘熺悊锛歀inux瀹炰緥鍒嗘瀽 鍑虹増鏃堕棿锛2008-09-01 +JEP 325 Switch Expressions (Preview) -Linux鎿嶄綔绯荤粺鍒嗘瀽涓庡疄璺 鍑虹増鏃堕棿锛2008-11-01 +JEP 334 JVM Constants API -Linux2.6鍐呮牳鏍囧噯鏁欑▼锛堥檮鍏夌洏1寮狅級 鍑虹増鏃堕棿锛2008-11-01 +JEP 340 One AArch64 Port Not Two -Linux鍐呮牳瀹屽叏鍓栨瀽锛氬熀浜0.12鍐呮牳 鍑虹増鏃堕棿锛2009-01-01 +JEP 341 Default CDS Archives -Linux鎿嶄綔绯荤粺瀹為獙鏁欑▼ 鍑虹増鏃堕棿锛2009-02-01 +JEP 344 Abortable Mixed Collections for G1 -楂樼瓑瀛︽牎璁$畻鏈哄疄璺垫暀瀛︾郴鍒楁暀鏉愶細Linux鎿嶄綔绯荤粺瀹為獙鏁欑▼ 鍑虹増鏃堕棿锛2009-04-01 +JEP 346 Promptly Return Unused Committed Memory from G1 -Linux鎿嶄綔绯荤粺鍘熺悊涓庡簲鐢 鍑虹増鏃堕棿锛2009-04-01 +### JDK 13 -娣卞叆鐞嗚ВLinux缃戠粶鎶鏈唴骞 鍑虹増鏃堕棿锛2009-06-01 +#### 2019-9-17 鍙戝竷 -鐙緹韫婂緞鍝佸唴鏍革細Linux鍐呮牳婧愪唬鐮佸璇伙紙鎺ㄨ崘PC闃呰锛 鍑虹増鏃堕棿锛2009-08-01 +JEP 350 Dynamic CDS Archives -娣卞叆娴呭嚭Linux TCP/IP鍗忚鏍 鍑虹増鏃堕棿锛2010-01-01 +JEP 351 ZGC Uncommit Unused Memory -Linux鍐呮牳缃戠粶鏍堟簮浠g爜鎯呮櫙鍒嗘瀽 鍑虹増骞: 2010-1 +JEP 353 Reimplement the Legacy Socket API -杩借釜Linux TCP/IP浠g爜杩愯锛氬熀浜2.6鍐呮牳锛堥檮CD-ROM鍏夌洏1寮狅級 鍑虹増鏃堕棿锛2010-04-01 +JEP 354 Switch Expressions -Linux浣撶郴涓庣紪绋嬶細鍩轰簬Linux0.01鐗堟湰/21涓栫邯杞欢宸ョ▼甯堣鍒掓暀鏉 鍑虹増鏃堕棿锛2010-04-01 +JEP 355 Text Blocks -O'Reilly锛歀inux 鍐呮牳鎶鏈墜鍐 [Linux Kernel in a Nutsbell] 鍑虹増鏃堕棿锛2010-06-01 +### JDK 14 -娣卞叆Linux鍐呮牳鏋舵瀯 鍑虹増鏃堕棿锛2010-06-01 +#### 棰勮 2020-03-17 General Availability -Linux鍐呮牳淇偧涔嬮亾 鍑虹増鏃堕棿锛2010-07-01 +JEP 305 Pattern Matching for instanceof (Preview) -Linux缃戠粶鍐呮牳鍒嗘瀽涓庡紑鍙 鍑虹増骞: 2010-8 +JEP 358 Helpful NullPointer Exceptions -鎿嶄綔绯荤粺瀹為獙鏁欑▼鍙奓inux鍜學indows绯荤粺璋冪敤缂栫▼/璁$畻鏈鸿绋嬭璁′笌缁煎悎瀹炶返瑙勫垝鏁欐潗 鍑虹増鏃堕棿锛2010-09-01 +JEP 361 Switch Expressions (Standard) -Linux鍐呮牳婧愮爜鍓栨瀽锛歍CP/IP瀹炵幇锛堝瑁呬笂涓嬪唽锛 鍑虹増鏃堕棿锛2011-01-01 +JEP 345 NUMA-Aware Memory Allocation for G1 -Linux鍐呮牳璁捐涓庡疄鐜帮紙鍘熶功绗3鐗堬級 鍑虹増鏃堕棿锛2011-05-01 +JEP 349 JFR Event Streaming -宓屽叆寮廘inux缃戠粶浣撶郴缁撴瀯璁捐涓嶵CP/IP鍗忚鏍 鍑虹増骞: 2011-05 +JEP 366 Deprecate the ParallelScavenge + SerialOld GC Combination -Linux鍐呮牳缂栫▼ 鍑虹増骞: 2011-5 +JEP 363 Remove the CMS Garbage Collector -瀛樺偍鎶鏈師鐞嗗垎鏋愶細鍩轰簬Linux 2.6鍐呮牳婧愪唬鐮 鍑虹増鏃堕棿锛2011-09-01 +JEP 364 ZGC on macOS -Linux鍐呮牳娉ㄩ噴 鍑虹増鏃堕棿锛2011-12-01 +JEP 368 Text Blocks (Second Preview) -Linux鎿嶄綔绯荤粺鍘熺悊涓庡簲鐢紙绗2鐗堬級 鍑虹増鏃堕棿锛2012-01-01 +### JDK 15 -娣卞叆Linux璁惧椹卞姩绋嬪簭鍐呮牳鏈哄埗 鍑虹増鏃堕棿锛2012-01-01 +#### 2020-9-15 鍙戝竷 -Linux鍘熺悊涓庣粨鏋 鍑虹増鏃堕棿锛2012-02-01 +JEP 339 EdDSA 鏁板瓧绛惧悕绠楁硶 -O'Reilly绮惧搧鍥句功绯诲垪路Linux鍐呮牳绮鹃珦锛氱簿閫歀inux鍐呮牳蹇呬細鐨75涓粷鎶 鍑虹増鏃堕棿锛2012-02-01 +JEP 360 瀵嗗皝绫伙紙棰勮锛 -Linux閭d簺浜嬪効涔嬫垜鏄疷SB锛堢2鐗堬級 鍑虹増鏃堕棿锛2012-03-01 +JEP 371 闅愯棌绫 -Linux鍐呮牳鍒嗘瀽涓庨珮绾ф暀绋 鍑虹増骞: 2012-8 +JEP 372 鍒犻櫎 Nashorn JavaScript 寮曟搸 -Linux鍐呮牳绮炬瀽锛堥檮CD鍏夌洏1寮狅級 鍑虹増鏃堕棿锛2013-02-01 +JEP 373 閲嶆柊瀹炵幇 Legacy DatagramSocket API -21涓栫邯楂樼瓑瀛︽牎瑙勫垝鏁欐潗路璁$畻鏈虹瀛︿笌鎶鏈細鎿嶄綔绯荤粺鍘熺悊鍙婂簲鐢紙Linux锛 鍑虹増鏃堕棿锛2013-04-01 +JEP 374 閲嶆柊瀹炵幇 DatagramSocket API -Linux鍐呮牳璁捐鐨勮壓鏈細鍥捐ВLinux鎿嶄綔绯荤粺鏋舵瀯璁捐涓庡疄鐜板師鐞嗭紙绗2鐗堬級 鍑虹増鏃堕棿锛2013-05-01 +JEP 375 瀹炰緥妯″紡鍖归厤锛堢浜屾棰勮锛 -娣卞害鎺㈢储Linux鎿嶄綔绯荤粺锛氱郴缁熸瀯寤哄拰鍘熺悊瑙f瀽 鍑虹増鏃堕棿锛2013-10-08 +JEP 377 ZGC 涓涓彲鎵╁睍鐨勪綆寤惰繜鍨冨溇鏀堕泦鍣 -Linux鍐呮牳鎺㈢锛氭繁鍏ヨВ鏋愭枃浠剁郴缁熷拰璁惧椹卞姩鐨勬灦鏋勪笌璁捐 鍑虹増鏃堕棿锛2013-12-01 +JEP 378 鏂囨湰鍧 -鎿嶄綔绯荤粺鍘熺悊涓嶭inux瀹炰緥璁捐锛堢2鐗堬級 鍑虹増鏃堕棿锛2014-06-01 +JEP 379 浣庢殏鍋滄椂闂村瀮鍦炬敹闆嗗櫒 -璁$畻鏈烘搷浣滅郴缁熷疄楠屾寚瀵(Linux鐗)(鍥藉绮惧搧璇剧▼閰嶅瀹為獙鏁欐潗銆鍥藉绮惧搧璧勬簮鍏变韩璇剧▼閰嶅瀹為獙鏁欐潗) 鍑虹増鏃堕棿锛2014-07-01 +JEP 381 绉婚櫎 Solaris 鍜 SPARC 绔彛 -绮鹃歀inux鍐呮牳缃戠粶 鍑虹増鏃堕棿锛2015-06-01 +JEP 383 澶栭儴瀛樺偍鍣ㄨ闂 API锛堢浜屼釜鍐呯疆绋嬪簭锛 -鎿嶄綔绯荤粺鍘熺悊涓庡疄璺垫暀绋嬶紙绗2鐗堬級/璁$畻鏈虹郴鍒楁暀鏉 鍑虹増鏃堕棿锛2015-08-01 +JEP 384 Records锛堢浜屾棰勮锛 -娣卞叆鐞嗚ВLinux椹卞姩绋嬪簭璁捐 鍑虹増鏃堕棿锛2015-11-01 +JEP 385 涓嶆帹鑽愮殑 RMI 婵娲诲幓闄 -鎿嶄綔绯荤粺鍘熺悊涓嶭inux瀹炶返鏁欑▼ 鍑虹増鏃堕棿锛2016-01-01 +### JDK 16 -绮鹃歀inux璁惧椹卞姩绋嬪簭寮鍙 鍑虹増鏃堕棿锛2016-04-01 +#### 2021-03-16 鍙戝竷 -鎿嶄綔绯荤粺瀹為獙鎸囧锛氬熀浜嶭inux鍐呮牳锛堢3鐗堬級 鍑虹増鏃堕棿锛2016-07-01 -Linux鍐呮牳API瀹屽叏鍙傝冩墜鍐岋紙绗2鐗堬級 鍑虹増鏃堕棿锛2016-10-01 +338 Vector API (Incubator) -Linux鎶鏈唴骞 鍑虹増鏃堕棿锛2016-12-01 +347 Enable C++ 14 Language Features -娣卞叆Linux鍐呮牳鏋舵瀯涓庡簳灞傚師鐞 鍑虹増鏃堕棿锛2017-11-01 +357 Migrate from Mercurial to Git -鎿嶄綔绯荤粺鍘熺悊鍙奓inux鍐呮牳鍒嗘瀽(绗2鐗堬級/21涓栫邯楂樼瓑瀛︽牎瑙勫垝鏁欐潗路璁$畻鏈虹瀛︿笌鎶鏈 鍑虹増鏃堕棿锛2018-08-01 +369 Migrate to GitHub -Linux璁惧椹卞姩绋嬪簭寮鍙戯紙褰卞嵃鐗 鑻辨枃鐗堬級 [Linux Device Drivers Development] 鍑虹増鏃堕棿锛2018-08-01 +376 ZGC Concurrent Thread-Stack Processing -2016鍚屾祹澶у鏈鏁欐潗鍑虹増鍩洪噾锛歀inux鎿嶄綔绯荤粺瀹炵幇鍘熺悊 鍑虹増鏃堕棿锛2018-09-01 +380 Unix-Domain Socket Channels -搴栦竵瑙g墰Linux鍐呮牳鍒嗘瀽 鍑虹増鏃堕棿锛2018-10-01 +386 Alpine Linux Port -鎿嶄綔绯荤粺鍘熺悊涓庡簲鐢紙Linux锛 鍑虹増鏃堕棿锛2018-12-01 +387 Elastic Metaspace -鎿嶄綔绯荤粺瀹為獙鎸囧涓庝範棰樿В鏋 鍑虹増鏃堕棿锛2019-10-01 +388 Windows / AArch64 Port -绮鹃歀inux鍐呮牳锛氭櫤鑳借澶囧紑鍙戞牳蹇冩妧鏈 鍑虹増鏃堕棿锛2020-01-01 +389 Foreign Linker API (Incubator) -鐢ㄢ滆姱鈥濇帰鏍 鍩轰簬榫欒姱鐨凩inux鍐呮牳鎺㈢储瑙f瀽 鍑虹増鏃堕棿锛2020-08-01 +390 Warnings for Value-Based Classes -Linux鍐呮牳瑙傛祴鎶鏈疊PF [Linux Observability with BPF] 鍑虹増鏃堕棿锛2020-08-01 +392 Packaging Tool -Linux Kernel Development Cookbook 鍑虹増鏃堕棿锛2021-01 +393 Foreign-Memory Access API (Third Incubator) -娣卞害鎺㈢储Linux绯荤粺铏氭嫙鍖栵細鍘熺悊涓庡疄鐜 鍑虹増鏃堕棿锛2020-11-01 +394 Pattern Matching for instanceof -### 寰俊璧炶祻鐮 +395 Records -![image](https://github.com/OpenSrcDeveloper/java-for-linux/blob/master/image/璧炶祻鐮.png) +396 Strongly Encapsulate JDK Internals by Default +397 Sealed Classes (Second Preview) \ No newline at end of file diff --git a/cppmm/README.zh-CN.md b/cppmm/README.zh-CN.md index 6c7112dad7814442fd123eeee3b7e16e62bc632e..39cf5593f4dbdf3011a910740283c1efa15e0131 100755 --- a/cppmm/README.zh-CN.md +++ b/cppmm/README.zh-CN.md @@ -1,1309 +1,1208 @@ # cppmm - - cppmm 鏄 C++-- 鍏跺疄 Java 灏辨槸 C++ 鐨勭畝鍖栫増 鍦 C++ 鐨勫熀纭涓婅繘琛岀畝鍖 鎵浠ュ氨鏄 C++-- +## JVM & C & C++ & Linux 寮哄己鑱斿悎 +### JVM 绡 -## 缂栫▼鍋ュ悍鎸囧崡 - - - -## 绉戝涓婄綉鎸囧崡 - - - -## 绀句細宸ョ▼瀛 - - - -### Google Hacking - - - -## 杩芥函鎶鏈巻鍙 - - -## JVM 鍓嶄笘浠婄敓 - - - -### JAVA 1.0 浠e彿 Oak锛堟鏍戯級 - -#### 1996-01-23 鍙戣 - -### JAVA 1.1 - -#### 1997-02-19 鍙戣,涓昏鏇存柊鍐呭锛 - -寮曞叆JDBC - -娣诲姞鍐呴儴绫绘敮鎸 - -寮曞叆JAVA BEAN - -寮曞叆RMI - -寮曞叆鍙嶅皠 - -### JAVA 1.2 浠e彿 Playground锛堟搷鍦猴級 - -#### 1998-12-8 鍙戣锛屼富瑕佹洿鏂板唴瀹癸細 - -寮曞叆闆嗗悎妗嗘灦 - -瀵瑰瓧绗︿覆甯搁噺鍋氬唴瀛樻槧灏 - -寮曞叆JIT锛圝ust In Time锛夌紪璇戝櫒 - -寮曞叆鎵撳寘鏂囦欢鏁板瓧绛惧悕 - -寮曞叆鎺у埗鎺堟潈璁块棶绯荤粺璧勬簮绛栫暐宸ュ叿 - -寮曞叆JFC锛圝ava Foundation Classes锛夛紝鍖呮嫭Swing1.0锛屾嫋鏀惧拰Java2D绫诲簱 - -寮曞叆Java鎻掍欢 - -JDBC涓紩鍏ュ彲婊氬姩缁撴灉闆嗭紝BLOB,CLOB,鎵归噺鏇存柊鍜岀敤鎴疯嚜瀹氫箟绫诲瀷 - -Applet涓坊鍔犲0闊虫敮鎸 - -### JAVA 1.3 浠e彿 Kestrel锛堢孩闅硷級 - -#### 2000-5-8 鍙戝竷锛屼富瑕佹洿鏂板唴瀹癸細 - -寮曞叆Java Sound API - -寮曞叆jar鏂囦欢绱㈠紩 - -瀵笿ava鍚勬柟闈㈠浜嗗ぇ閲忎紭鍖栧拰澧炲己 - -Java Platform Debugger Architecture鐢ㄤ簬 Java 璋冨紡鐨勫钩鍙般 - -JAVA 1.4 浠e彿 Merlin锛堥毤锛 - -#### 2004-2-6 鍙戝竷锛堥娆″湪 JCP 涓嬪彂琛岋級锛屼富瑕佹洿鏂板唴瀹癸細 - -娣诲姞XML澶勭悊 - -娣诲姞Java鎵撳嵃鏈嶅姟锛圝ava Print Service API锛 - -寮曞叆Logging API - -寮曞叆Java Web Start - -寮曞叆JDBC 3.0 API - -寮曞叆鏂█ - -寮曞叆Preferences API - -寮曞叆閾惧紡寮傚父澶勭悊 - -鏀寔IPV6 - -鏀寔姝e垯琛ㄨ揪寮 - -寮曞叆Image I/O API - -NIO锛岄潪闃诲鐨 IO锛屼紭鍖 Java 鐨 IO 璇诲彇銆 - -### JDK 5.0 浠e彿 Tiger锛堣佽檸锛夛紝鏈夐噸澶ф敼鍔 - -#### 2004-9-30 鍙戝竷 涓昏鏇存柊鍐呭锛 - -寮曞叆娉涘瀷 - -For-Each寰幆 澧炲己寰幆锛屽彲浣跨敤杩唬鏂瑰紡 - -鑷姩瑁呯涓庤嚜鍔ㄦ媶绠 - -寮曞叆绫诲瀷瀹夊叏鐨勬灇涓 - -寮曞叆鍙彉鍙傛暟 - -娣诲姞闈欐佸紩鍏 - -寮曞叆娉ㄨВ - -寮曞叆Instrumentation - -鎻愪緵浜 java.util.concurrent 骞跺彂鍖呫 - -### JDK 6 浠e彿 Mustang锛堥噹椹級 - -#### 2006-12-11 鍙戝竷锛屼富瑕佹洿鏂板唴瀹癸細 - -寮曞叆浜嗕竴涓敮鎸佽剼鏈紩鎿庣殑鏂版鏋讹紙鍩轰簬 Mozilla Rhino 鐨 JavaScript 鑴氭湰寮曟搸锛 - -UI鐨勫寮 - -瀵筗ebService鏀寔鐨勫寮猴紙JAX-WS2.0 鍜 JAXB2.0锛 - -寮曞叆JDBC4.0API - -寮曞叆Java Compiler API - -閫氱敤鐨凙nnotations鏀寔 - -### JDK 7 浠e彿 Dolphin锛堟捣璞氾級 - -#### 2011-07-28 鍙戝竷 杩欐槸 sun 琚 oracle 鏀惰喘锛2009 骞 4 鏈堬級鍚庣殑绗竴涓増鏈紝涓昏鏇存柊鍐呭锛 - -switch璇彞鍧椾腑鍏佽浠ュ瓧绗︿覆浣滀负鍒嗘敮鏉′欢 - -鍦ㄥ垱寤烘硾鍨嬪璞℃椂搴旂敤绫诲瀷鎺ㄦ柇,姣斿浣犱箣鍓嶇増鏈娇鐢ㄦ硾鍨嬬被鍨嬫椂杩欐牱鍐 ArrayList userList= new ArrayList();锛岃繖涓増鏈彧闇瑕佽繖鏍峰啓 ArrayList userList= new ArrayList<>();锛屼篃鍗虫槸鍚庨潰涓涓皷鎷彿鍐呯殑绫诲瀷锛孞VM 甯垜浠嚜鍔ㄧ被鍨嬪垽鏂ˉ鍏ㄤ簡銆 - -鍦ㄤ竴涓鍙ュ潡涓崟鑾峰绉嶅紓甯 - -娣诲姞try-with-resources璇硶鏀寔锛屼娇鐢ㄦ枃浠舵搷浣滃悗涓嶇敤鍐嶆樉绀烘墽琛宑lose浜嗐 - -鏀寔鍔ㄦ佽瑷 - -JSR203, NIO.2,AIO,鏂癐/O鏂囦欢绯荤粺锛屽鍔犲閲嶆枃浠剁殑鏀寔銆佹枃浠跺師濮嬫暟鎹拰绗﹀彿閾炬帴,鏀寔ZIP鏂囦欢鎿嶄綔 - -JDBC瑙勮寖鐗堟湰鍗囩骇涓篔DBC4.1 - -寮曞叆Fork/Join妗嗘灦锛岀敤浜庡苟琛屾墽琛屼换鍔 - -鏀寔甯︿笅鍒掔嚎鐨勬暟鍊硷紝濡 int a = 100000000;锛0 澶涓嶄究浜庝汉闃呰锛岃繖涓増鏈敮鎸佽繖鏍峰啓 int a = 100_000_000锛岃繖鏍峰氨瀵规暟鍊间竴鐩簡鐒朵簡銆 - -Swing缁勪欢澧炲己锛圝Layer,Nimbus Look Feel鈥︼級鍙傝 - -### JDK 8 - -#### 2014-3-19 鍙戝竷 oracle 鍘熻鍒 2013 骞村彂甯冿紝鐢变簬瀹夊叏鎬ч棶棰樹袱娆¤烦绁紝鏄嚜 JAVA 5 浠ユ潵鏈鍏烽潻鍛芥х殑鐗堟湰锛屼富瑕佹洿鏂板唴瀹癸細 - -鎺ュ彛鏀硅繘锛屾帴鍙e眳鐒跺彲浠ュ畾涔夐粯璁ゆ柟娉曞疄鐜板拰闈欐佹柟娉曚簡銆 - -寮曞叆鍑芥暟寮忔帴鍙 - -寮曞叆Lambda琛ㄨ揪寮 - -寮曞叆鍏ㄦ柊鐨凷tream API锛屾彁渚涗簡瀵瑰兼祦杩涜鍑芥暟寮忔搷浣溿 - -寮曞叆鏂扮殑Date-Time API - -寮曞叆鏂扮殑JavaScrpit寮曟搸Nashorn - -寮曞叆Base64绫诲簱 - -寮曞叆骞跺彂鏁扮粍锛坧arallel锛 - -娣诲姞鏂扮殑Java宸ュ叿锛歫js銆乯deps - -JavaFX锛屼竴绉嶇敤鍦ㄦ闈㈠紑鍙戦鍩熺殑鎶鏈 - -闈欐侀摼鎺 JNI 绋嬪簭搴 - -### JDK 9 - -#### 2017-9-21 鍙戝竷 - -妯″潡鍖栵紙jiqsaw锛 - -浜や簰寮忓懡浠よ锛圝Shell锛 - -榛樿鍨冨溇鍥炴敹鏈熷垏鎹负G1 - -杩涚▼鎿嶄綔鏀硅繘 - -绔炰簤閿佹ц兘浼樺寲 - -鍒嗘浠g爜缂撳瓨 - -浼樺寲瀛楃涓插崰鐢ㄧ┖闂 - -### JDK 10 - -#### 2018-3-21 鍙戝竷 - -JEP286锛寁ar 灞閮ㄥ彉閲忕被鍨嬫帹鏂 - -JEP296锛屽皢鍘熸潵鐢 Mercurial 绠$悊鐨勪紬澶 JDK 浠撳簱浠g爜锛屽悎骞跺埌涓涓粨搴撲腑锛岀畝鍖栧紑鍙戝拰绠$悊杩囩▼銆 - -JEP304锛岀粺涓鐨勫瀮鍦惧洖鏀舵帴鍙c - -JEP307锛孏1 鍨冨溇鍥炴敹鍣ㄧ殑骞惰瀹屾暣鍨冨溇鍥炴敹锛屽疄鐜板苟琛屾ф潵鏀瑰杽鏈鍧忔儏鍐典笅鐨勫欢杩熴 - -JEP310锛屽簲鐢ㄧ▼搴忕被鏁版嵁 (AppCDS) 鍏变韩锛岄氳繃璺ㄨ繘绋嬪叡浜氱敤绫诲厓鏁版嵁鏉ュ噺灏戝唴瀛樺崰鐢ㄧ┖闂达紝鍜屽噺灏戝惎鍔ㄦ椂闂淬 - -JEP312锛孴hreadLocal 鎻℃墜浜や簰銆傚湪涓嶈繘鍏ュ埌鍏ㄥ眬 JVM 瀹夊叏鐐 (Safepoint) 鐨勬儏鍐典笅锛屽绾跨▼鎵ц鍥炶皟銆備紭鍖栧彲浠ュ彧鍋滄鍗曚釜绾跨▼锛岃屼笉鏄仠鍏ㄩ儴绾跨▼鎴栦竴涓兘涓嶅仠銆 - -JEP313锛岀Щ闄 JDK 涓檮甯︾殑 javah 宸ュ叿銆傚彲浠ヤ娇鐢 javac -h 浠f浛銆 - -JEP314锛屼娇鐢ㄩ檮鍔犵殑 Unicode 璇█鏍囪鎵╁睍銆 - -JEP317锛岃兘灏嗗爢鍐呭瓨鍗犵敤鍒嗛厤缁欑敤鎴锋寚瀹氱殑澶囩敤鍐呭瓨璁惧銆 - -JEP317锛屼娇鐢 Graal 鍩轰簬 Java 鐨勭紪璇戝櫒锛屽彲浠ラ鍏堟妸 Java 浠g爜缂栬瘧鎴愭湰鍦颁唬鐮佹潵鎻愬崌鏁堣兘銆 - -JEP318锛屽湪 OpenJDK 涓彁渚涗竴缁勯粯璁ょ殑鏍硅瘉涔﹂鍙戞満鏋勮瘉涔︺傚紑婧愮洰鍓 Oracle 鎻愪緵鐨勭殑 Java SE 鐨勬牴璇佷功锛岃繖鏍 OpenJDK 瀵瑰紑鍙戜汉鍛樹娇鐢ㄨ捣鏉ユ洿鏂逛究銆 - -JEP322锛屽熀浜庢椂闂村畾涔夌殑鍙戝竷鐗堟湰锛屽嵆涓婅堪鎻愬埌鐨勫彂甯冨懆鏈熴傜増鏈彿涓$FEATURE.$INTERIM.$UPDATE.$PATCH锛屽垎鍒槸澶х増鏈紝涓棿鐗堟湰锛屽崌绾у寘鍜岃ˉ涓佺増鏈 - -### JDK 11 - -#### 2018-9-25 鍙戝竷 - -瀹樼綉鍏紑鐨 17 涓 JEP锛圝DK Enhancement Proposal 鐗规у寮烘彁璁級 - -JEP181: Nest-Based Access Control锛堝熀浜庡祵濂楃殑璁块棶鎺у埗锛 - -JEP309: Dynamic Class-File Constants锛堝姩鎬佺殑绫绘枃浠跺父閲忥級 - -JEP315: Improve Aarch64 Intrinsics锛堟敼杩 Aarch64 Intrinsics锛 - -JEP318: Epsilon: A No-Op Garbage Collector锛圗psilon 鍨冨溇鍥炴敹鍣紝鍙堣绉颁负鈥漀o-Op锛堟棤鎿嶄綔锛夆濆洖鏀跺櫒锛 - -JEP320: Remove the Java EE and CORBA Modules锛堢Щ闄 Java EE 鍜 CORBA 妯″潡锛孞avaFX 涔熷凡琚Щ闄わ級 - -JEP321: HTTP Client (Standard) - -JEP323: Local-Variable Syntax for Lambda Parameters锛堢敤浜 Lambda 鍙傛暟鐨勫眬閮ㄥ彉閲忚娉曪級 - -JEP324: Key Agreement with Curve25519 and Curve448锛堥噰鐢 Curve25519 鍜 Curve448 绠楁硶瀹炵幇鐨勫瘑閽ュ崗璁級 - -JEP327: Unicode 10 - -JEP328: Flight Recorder锛堥琛岃褰曚华锛 - -JEP329: ChaCha20 and Poly1305 Cryptographic Algorithms锛堝疄鐜 ChaCha20 鍜 Poly1305 鍔犲瘑绠楁硶锛 +#### Java 鐨 JNI 绡囦功绫嶅ぇ鍏 -JEP330: Launch Single-File Source-Code Programs锛堝惎鍔ㄥ崟涓 Java 婧愪唬鐮佹枃浠剁殑绋嬪簭锛 +[Essential Jni Java Native Interface 鍑虹増骞 1998-3](https://book.douban.com/subject/6963703/) -JEP331: Low-Overhead Heap Profiling锛堜綆寮閿鐨勫爢鍒嗛厤閲囨牱鏂规硶锛 +[Java(TM) Native Interface 鍑虹増骞 1999-06-20](https://book.douban.com/subject/3162962/) -JEP332: Transport Layer Security (TLS) 1.3锛堝 TLS 1.3 鐨勬敮鎸侊級 +[Professional Java Native Interfaces with SWT/JFace (Programmer to Programmer) 鍑虹増骞 2005-02-11](https://book.douban.com/subject/1777711/) -JEP333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)锛圸GC锛氬彲浼哥缉鐨勪綆寤惰繜鍨冨溇鍥炴敹鍣紝澶勪簬瀹為獙鎬ч樁娈碉級 +[Java AWT Native Interface 椤垫暟 18](https://book.douban.com/subject/19369591/) -JEP335: Deprecate the Nashorn JavaScript Engine锛堝純鐢 Nashorn JavaScript 寮曟搸锛 +[Java Native Interface 椤垫暟 112](https://book.douban.com/subject/19369496/) -JEP336: Deprecate the Pack200 Tools and API锛堝純鐢 Pack200 宸ュ叿鍙婂叾 API锛 +[Java Native Access 椤垫暟 112](https://book.douban.com/subject/19369503/) -### JDK 12 +[IBM JNI](https://www.ibm.com/developerworks/cn/java/j-jni/) -#### 2019-3-19 鍙戝竷 +[JNI](https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html) -JEP189:Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) +[JNA](http://java-native-access.github.io/jna/5.5.0/javadoc/) -JEP230:Microbenchmark Suite +[JNR](https://github.com/jnr) -JEP325:Switch Expressions (Preview) +#### 瀹夊崜 NDK 绡囦功绫嶅ぇ鍏 -JEP334:JVM Constants API +[缁嗚 Android 4.0 NDK 缂栫▼锛堟帹鑽怭C闃呰锛 鍑虹増鏃堕棿 2012-07-01](https://e.jd.com/30345270.html?ebook=1) -JEP340:One AArch64 Port, Not Two +[Android NDK Game Development Cookbook 鍑虹増鏃堕棿 2013-11-25](https://e.jd.com/30370939.html?ebook=1) -JEP341:Default CDS Archives +[Android C++ 楂樼骇缂栫▼ 浣跨敤 NDK [Pro Android C++ with the NDK] 鍑虹増鏃堕棿 2014-01-01](https://item.jd.com/12666925.html) -JEP344:Abortable Mixed Collections for G1 +[Android NDK Beginner's Guide Second Edition 鍑虹増鏃堕棿 2015-04-28](https://e.jd.com/30372196.html?ebook=1) -JEP346:Promptly Return Unused Committed Memory from G1 +[Mastering Android NDK 鍑虹増鏃堕棿 2015-09-30](https://e.jd.com/30371847.html?ebook=1) -### JDK 13 +#### Java 铏氭嫙鏈轰功绫嶅ぇ鍏 -#### 2019-9-17 鍙戝竷 +[Java 铏氭嫙鏈鸿鑼 鍑虹増骞 1996-12-01](https://book.douban.com/subject/1549489/) -JEP350:Dynamic CDS Archives +[Java Virtual Machine (Java Series) 鍑虹増骞 1997-04-01](https://book.douban.com/subject/1783913/) -JEP351:ZGC: Uncommit Unused Memory +[Java 铏氭嫙鏈鸿鑼 鍑虹増骞 1997-10](https://book.douban.com/subject/19970045/) -JEP353:Reimplement the Legacy Socket API +[The Java鈩 Virtual Machine Specification 鍑虹増骞 1999-4-24](https://book.douban.com/subject/1783950/) -JEP354:Switch Expressions +[Programming for the Java鈩 Virtual Machine 鍑虹増骞 1999-7-2](https://book.douban.com/subject/1610251/) -JEP355:Text Blocks +[Proceedings of the Java Virtual Machine Research and Technology Symposium (JVM 01) April 23-24 2001 Monterey California USA 鍑虹増鏃堕棿 2001-1-1)](https://www.amazon.com/-/zh/dp/1880446111/ref=sr_1_246?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=java+virtual+machine&qid=1594370603&s=books&sr=1-246) -### JDK 14 +[Java and the Java Virtual Machine 鍑虹増骞 2001-6-27](https://book.douban.com/subject/1761726/) -#### 棰勮 2020-03-17 General Availability +[2nd Java Virtual Machine Reasearch and Technology Symposium (JVM 02) 鍑虹増骞 2002](https://book.douban.com/subject/4222747/) -JEP 305: Pattern Matching for instanceof (Preview) + **[娣卞叆宓屽叆寮 Java 铏氭嫙鏈 鍑虹増骞 2003-5-1](https://book.douban.com/subject/1103575/)** -JEP 358: Helpful NullPointerExceptions +[宓屽叆寮 Java 铏氭嫙鏈哄強鍏跺簲鐢ㄧ爺绌禲(https://kns.cnki.net/KCMS/detail/detail.aspx?dbcode=CMFD&dbname=CMFD0506&filename=2005151384.nh&uid=WEEvREcwSlJHSldRa1FhdkJkcGkzcUJrUmhxN2ZETTZCdFAyVno4dWhrWT0=$9A4hF_YAuvQ5obgVAqNKPCYcEjKensW4ggI8Fm4gTkoUKaID8j8gFw!!&v=MDE3NzExVDNxVHJXTTFGckNVUkwyZlpPZHRGeURoVjdyS1YxMjdHN0s5SDlMRXE1RWJQSVI4ZVgxTHV4WVM3RGg=) -JEP 361: Switch Expressions (Standard) +[娣卞叆 Java 铏氭嫙鏈(鍘熶功绗 2 鐗) 鍑虹増骞 2003-9](https://book.douban.com/subject/1138768/) -JEP 345: NUMA-Aware Memory Allocation for G1 +[A Real-Time Java Virtual Machine for Avionics (Preprint) 鍑虹増鏃堕棿 2006-1-1](https://www.amazon.com/-/zh/dp/B00OPI69CG/ref=sr_1_35?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=java+virtual+machine&qid=1594369619&s=books&sr=1-35) -JEP 349: JFR Event Streaming -JEP 366: Deprecate the ParallelScavenge + SerialOld GC Combination +[IBM Technology for Java Virtual Machine in IBM i5/OS 鍑虹増鏃堕棿 2007-2-14](https://www.amazon.com/-/zh/dp/0738486051/ref=sr_1_245?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=java+virtual+machine&qid=1594370603&s=books&sr=1-245) -JEP 363: Remove the CMS Garbage Collector +[Java Virtual Machine 鍑虹増骞 2009-12-30](https://book.douban.com/subject/4291938/) -JEP 364: ZGC on macOS +[Principles of Computer Organization and Assembly Language (2-downloads) Using the Java Virtual Machine Kindle 鐢靛瓙涔 鍑虹増鏃堕棿 2011骞1鏈11鏃(https://www.amazon.com/-/zh/dp/B009TGBI1Q/ref=sr_1_12?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=java+virtual+machine&qid=1594369581&s=books&sr=1-12) -JEP 368: Text Blocks (Second Preview) +[Java Virtual Machine 鍑虹増骞 2011-9](https://book.douban.com/subject/14156745/) -## 鍙傝冩枃鐚 +[Kaffe Real-Time JVM (鑻辫) 鍑虹増鏃堕棿 2013-3-22](https://www.amazon.com/-/zh/dp/365937539X/ref=sr_1_64?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=JVM&qid=1594368449&s=books&sr=1-64) -### JVM&C&C++&Linux 寮哄己鑱斿悎 +[Understanding Java Virtual Machine 鍑虹増骞 2013-3-31](https://book.douban.com/subject/24670621/) -### JVM 绡 +[Java 铏氭嫙鏈哄苟鍙戠紪绋 鍑虹増鏃堕棿 2013-05-01](https://item.jd.com/11231128.html) -#### Java 鐨 JNI 绡囦功绫嶅ぇ鍏 +[瑙f瀽 Java 铏氭嫙鏈哄紑鍙 鍑虹増骞 2013-5-1](https://book.douban.com/subject/24757135/) -Essential Jni: Java Native Interface 鍑虹増骞: 1998-3 +[Java铏氭嫙鏈鸿鑼冿紙Java SE 7鐗堬級 [The Java Virtual Machine Specification] 鍑虹増鏃堕棿 2013-12-01](https://item.jd.com/11365561.html) + **[HotSpot 瀹炴垬 鍑虹増鏃堕棿 2014-03-01](https://item.jd.com/11414422.html?dist=jd)** +[Java 铏氭嫙鏈虹簿璁 鍑虹増鏃堕棿 2015-05-01](https://item.jd.com/11631886.html?dist=jd) -Java(TM) Native Interface 鍑虹増骞: 1999-06-20 +[Java 鏍稿績鎶鏈郴鍒 Java 铏氭嫙鏈鸿鑼冿紙Java SE 8 鐗堬級 [The Java Virtual Machine Specification Jave SE 8 Edition] 鍑虹増鏃堕棿 2015-06-01](https://item.jd.com/11703581.html) + **[OpenJDK Cookbook 鍑虹増鏃堕棿 2015-01-30](https://e.jd.com/30372388.html?ebook=1)** + **[鑷繁鍔ㄦ墜鍐 Java 铏氭嫙鏈 鍑虹増鏃堕棿 2016-06-01](https://item.jd.com/11935272.html)** -Professional Java Native Interfaces with SWT/JFace (Programmer to Programmer) 鍑虹増骞: 2005-02-11 +[娣卞叆鐞嗚В JVM 锛 G1 GC 鍑虹増鏃堕棿 2017-06-01](https://item.jd.com/12087807.html) + **[鎻 Java 铏氭嫙鏈 JVM 璁捐鍘熺悊涓庡疄鐜 鍑虹増鏃堕棿 2017-06-01](https://item.jd.com/12095193.html?dist=jd)** +[Java 铏氭嫙鏈哄熀纭鏁欑▼ 鍑虹増鏃堕棿 2018-02-01](https://item.jd.com/12326931.html) -Java AWT Native Interface 椤垫暟: 18 +[Optimizing Java Practical Techniques for Improving JVM Application Performance (鑻辫) 鍑虹増鏃堕棿 2018-5-11](https://www.amazon.com/-/zh/Optimizing-Java-Techniques-Application-Performance/dp/1492025798/ref=sr_1_4?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=JVM&qid=1594368211&s=books&sr=1-4) +[Java virtual machine Second Edition Kindle 鐢靛瓙涔 鍑虹増鏃堕棿 2018-6-10](https://www.amazon.com/-/zh/virtual-machine-Second-Gerardus-Blokdyk-ebook/dp/B07DZHTF8K/ref=sr_1_9?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=java+virtual+machine&qid=1594369539&s=books&sr=1-9) +[JVM Tutorials Herong's Tutorial Examples Kindle 鐢靛瓙涔 鍑虹増鏃堕棿 2018-6-29](https://www.amazon.com/-/zh/dp/B07F5P5JVK/ref=sr_1_109?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=JVM&qid=1594368663&s=books&sr=1-109) -Java Native Interface 椤垫暟: 112 +[JRockit 鏉冨▉鎸囧崡 娣卞叆鐞嗚В JVM 鍑虹増鏃堕棿 2019-01-01](https://item.jd.com/12471629.html?dist=jd) +[JVM G1 婧愮爜鍒嗘瀽鍜岃皟浼 鍑虹増鏃堕棿 2019-04-01](https://item.jd.com/12513757.html?dist=jd) +[瀹炴垬 Java 铏氭嫙鏈 JVM 鏁呴殰璇婃柇涓庢ц兘浼樺寲锛堢2鐗堬級 鍑虹増鏃堕棿 2019-07-01](https://item.jd.com/12640292.html?dist=jd) -Java Native Access 椤垫暟: 112 +[娣卞叆鐞嗚В Java 铏氭嫙鏈 JVM 楂樼骇鐗规т笌鏈浣冲疄璺碉紙绗3鐗堬級 鍑虹増鏃堕棿 2019-12-01](https://item.jd.com/12607299.html?dist=jd) + **[铏氭嫙鏈鸿璁′笌瀹炵幇 浠 JVM 涓轰緥 鍑虹増鏃堕棿锛2020-01-01](https://item.jd.com/12802344.html?dist=jd)** + **[娣卞叆娴呭嚭 Java 铏氭嫙鏈鸿璁′笌瀹炵幇 鍑虹増鏃堕棿 2020-04-01](https://item.jd.com/12650601.html)** -IBM JNI +[娣卞叆鐞嗚В JVM 瀛楄妭鐮 鍑虹増鏃堕棿 2020-06-01](https://item.jd.com/12876374.html) +[Microsoft Java Virtual Machine 椤垫暟 88 JVM 1.1 闂簮](https://book.douban.com/subject/19795201/) +[A Dynamic Compiler for an Embedded Java Virtual Machine 椤垫暟 96](https://book.douban.com/subject/4560542/) -JNI +[Serializable Coroutines for Java Virtual Machines 椤垫暟 104](https://book.douban.com/subject/17987575/) +[Java Virtual Machine Including 椤垫暟 106](https://book.douban.com/subject/10992448/) +[Openjdk 椤垫暟 112](https://book.douban.com/subject/17991429/) -JNA锛圝NI鐨勬鏋讹級 +[Hotspot 椤垫暟 136](https://book.douban.com/subject/19174286/) +[Java Virtual Machine Design for Embedded Systems 椤垫暟 152](https://book.douban.com/subject/16135399/) +[Java Virtual Machines 椤垫暟 280](https://book.douban.com/subject/11146305/) -JNR锛圝NI鐨勬鏋讹級 +[Java Language and Virtual Machine Specifications](https://docs.oracle.com/javase/specs/index.html) +[OpenJDK JVM 1.6](http://openjdk.java.net/) +[jvms8](https://github.com/lxw420302/books/blob/master/java/jvms8.pdf) -#### 瀹夊崜 NDK 绡囦功绫嶅ぇ鍏 +#### 绗笁鏂 JVM 铏氭嫙鏈 -缁嗚Android 4.0 NDK缂栫▼锛堟帹鑽怭C闃呰锛 鍑虹増鏃堕棿锛2012-07-01 +[JVM-1.2 JVM 1.2](https://github.com/mateusbraga/JVM-1.2) + **[DS 铏氭嫙鏈 JVM 1.2](http://www.developservice.cz/dsvm/doc/index.html)** + **[ClassPath 铏氭嫙鏈 JVM 1.2 1.3 1.4 1.5](http://www.gnu.org/software/classpath/)** -Android NDK Game Development Cookbook 鍑虹増鏃堕棿锛2013-11-25 +[SableVM 铏氭嫙鏈 JVM 1.2](http://www.sablevm.org/) +[Harmony 铏氭嫙鏈 JVM 1.5](http://harmony.apache.org/) +[IBM 铏氭嫙鏈篯(https://github.com/eclipse/openj9) -Android C++楂樼骇缂栫▼锛氫娇鐢∟DK [Pro Android C++ with the NDK] 鍑虹増鏃堕棿锛2014-01-01 +[The Kaffe Virtual Machine 铏氭嫙鏈篯(http://www.kaffe.org/) +[Alibaba dragonwell8 铏氭嫙鏈 JVM 1.8](https://github.com/alibaba/dragonwell8) +鍗庝负 bishengjdk-8 铏氭嫙鏈 JVM 1.8 +``` +https://github.com/zhangkari/jvm -Android NDK: Beginner's Guide - Second Edition 鍑虹増鏃堕棿锛2015-04-28 +https://github.com/kayodesu/cabin +``` +[SAP JVM 铏氭嫙鏈篯(https://help.sap.com/doc/saphelp_nw73ehp1/7.31.19/en-US/47/dc90b4ef17452289f9128b8c2bbd77/frameset.htm) +[avian 铏氭嫙鏈篯(https://github.com/ReadyTalk/avian) +[鑵捐 TencentKona-8 铏氭嫙鏈 JVM 1.8](https://github.com/Tencent/TencentKona-8) -Mastering Android NDK 鍑虹増鏃堕棿锛2015-09-30 + **Microsoft Build of OpenJDK jvm 11** +``` +https://github.com/microsoft/openjdk +https://www.microsoft.com/openjdk#11 +``` + **[鍦 JVM 婧愮爜鍐欏唴宓岀骇鐨 Native 鍑芥暟](https://www.bilibili.com/video/BV1DD4y1U7k6)** +#### Android 铏氭嫙鏈轰功绫嶅ぇ鍏 -#### Java 铏氭嫙鏈轰功绫嶅ぇ鍏 +[Android Virtual Machine (VM) Setup on Linux 鍑虹増鏃堕棿 2014-01-01](https://www.amazon.com/-/zh/dp/B00W4BI2OO/ref=sr_1_1?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=android+virtual+machine&qid=1594367518&s=books&sr=1-1) -Java 铏氭嫙鏈鸿鑼 鍑虹増骞: 1996-12-01 +[娣卞叆瑙f瀽 Android 铏氭嫙鏈 鍑虹増鏃堕棿 2014-01-01](https://item.jd.com/11397767.html) +[Android Dalvik 铏氭嫙鏈虹粨鏋勫強鏈哄埗鍓栨瀽锛氱 1 鍗 Dalvik 铏氭嫙鏈虹粨鏋勫墫鏋 鍑虹増鏃堕棿 2014-11-01](https://item.jd.com/11573052.html) +[Android Dalvik 铏氭嫙鏈虹粨鏋勫強鏈哄埗鍓栨瀽锛氱 2 鍗 Dalvik 铏氭嫙鏈哄悇妯″潡鏈哄埗鍒嗘瀽 鍑虹増鏃堕棿 2014-08-01](https://item.jd.com/12060826.html) -Java Virtual Machine (Java Series) 鍑虹増骞: 1997-04-01 +[娣卞叆瑙f瀽 Android 铏氭嫙鏈 鍑虹増鏃堕棿 2016-09-01](https://item.jd.com/12060826.html) +[Programming for the Android Dalvik Virtual Machine 鍑虹増鏃堕棿 2017-1-15](https://www.amazon.com/-/zh/dp/1461423880/ref=sr_1_100?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&dchild=1&keywords=android+virtual+machine&qid=1594367885&s=books&sr=1-100) + **[娣卞叆鐞嗚В Android Java 铏氭嫙鏈 ART [Understanding Android Internals ART JVM] 鍑虹増鏃堕棿 2019-04-01](https://item.jd.com/12510921.html)** -Java铏氭嫙鏈鸿鑼 鍑虹増骞: 1997-10 +[Dalvik Turbo Virtual Machine 椤垫暟 18](https://book.douban.com/subject/19378171/) +[Dalvik 椤垫暟 80](https://book.douban.com/subject/19301198/) +[Dalvik Turbo Virtual Machine Lite Edition](https://book.douban.com/subject/33195510/) -The Java鈩 Virtual Machine Specification 鍑虹増骞: 1999-4-24 +### C & C++ 绡 +[婊存按閫嗗悜](https://274d6950.wiz03.com/wapp/pages/view/share/s/0DjmBg3sFh7F2ChxfR3bHE8d1dFI982juQzS2h9Hvo2ubgnA) -Programming for the Java鈩 Virtual Machine 鍑虹増骞: 1999-7-2 +[C++ 鍙嶆眹缂栦笌閫嗗悜鍒嗘瀽鎶鏈彮绉榏(https://e.jd.com/30469361.html) +``` +绗簩閮ㄥ垎 C++ 鍙嶆眹缂栨彮绉 +绗 2 绔 鍩烘湰鏁版嵁绫诲瀷鐨勮〃鐜板舰寮 -Proceedings of the Java Virtual Machine Research and Technology Symposium (JVM'01) +2.1 鏁存暟绫诲瀷 +2.1.1 鏃犵鍙锋暣鏁 +2.1.2 鏈夌鍙锋暣鏁 -April 23-24, 2001 Monterey, California USA 鍑虹増鏃堕棿锛2001-1-1 +2.2 娴偣鏁扮被鍨 +2.2.1 娴偣鏁扮殑缂栫爜鏂瑰紡 +2.2.2 鍩烘湰鐨勬诞鐐规暟鎸囦护 -Java and the Java Virtual Machine 鍑虹増骞: 2001-6-27 +2.3 瀛楃鍜屽瓧绗︿覆 +2.3.1 瀛楃鐨勭紪鐮 +2.3.2 瀛楃涓茬殑瀛樺偍鏂瑰紡 -2nd Java Virtual Machine Reasearch and Technology Symposium (JVM '02) 鍑虹増骞: 2002 +2.4 甯冨皵绫诲瀷 +2.5 鍦板潃銆佹寚閽堝拰寮曠敤 +2.5.1 鎸囬拡鍜屽湴鍧鐨勫尯鍒 -娣卞叆宓屽叆寮廕ava铏氭嫙鏈 鍑虹増骞: 2003-5-1 +2.5.2 鍚勭被鍨嬫寚閽堢殑宸ヤ綔鏂瑰紡 +2.5.3 寮曠敤 +2.6 甯搁噺 -宓屽叆寮廕ava铏氭嫙鏈哄強鍏跺簲鐢ㄧ爺绌 +2.6.1 甯搁噺鐨勫畾涔 +2.6.2 #define 鍜 const 鐨勫尯鍒 +2.7 鏈珷灏忕粨 -娣卞叆Java铏氭嫙鏈(鍘熶功绗2鐗) 鍑虹増骞: 2003-9 +绗 3 绔 璁よ瘑鍚姩鍑芥暟 鎵惧埌鐢ㄦ埛鍏ュ彛 +3.1 绋嬪簭鐨勭湡姝e叆鍙 +3.2 浜嗚В VC++ 6.0 鐨勫惎鍔ㄥ嚱鏁 -A Real-Time Java Virtual Machine for Avionics (Preprint) 鍑虹増鏃堕棿锛2006-1-1 +3.3 main 鍑芥暟鐨勮瘑鍒 +3.4 鏈珷灏忕粨 +绗 4 绔 瑙傚療鍚勭琛ㄨ揪寮忕殑姹傚艰繃绋 -IBM Technology for Java Virtual Machine in IBM i5/OS 鍑虹増鏃堕棿锛2007-2-14 +4.1 绠楁湳杩愮畻鍜岃祴鍊 +4.1.1 鍚勭绠楁湳杩愮畻鐨勫伐浣滃舰寮 +4.1.2 绠楁湳缁撴灉婧㈠嚭 -Java Virtual Machine 鍑虹増骞: 2009-12-30 +4.1.3 鑷鍜岃嚜鍑 +4.2 鍏崇郴杩愮畻鍜岄昏緫杩愮畻 +4.2.1 鍏崇郴杩愮畻鍜屾潯浠惰烦杞殑瀵瑰簲 -Principles of Computer Organization and Assembly Language (2-downloads): Using the Java Virtual Machine Kindle鐢靛瓙涔 鍑虹増鏃堕棿锛2011骞1鏈11鏃 +4.2.2 琛ㄨ揪寮忕煭璺 +4.2.3 鏉′欢琛ㄨ揪寮 +4.3 浣嶈繍绠 -Java Virtual Machine 鍑虹増骞: 2011-9 +4.4 缂栬瘧鍣ㄤ娇鐢ㄧ殑浼樺寲鎶宸 +4.4.1 娴佹按绾夸紭鍖栬鍒 +4.4.2 鍒嗘敮浼樺寲瑙勫垯 -Kaffe Real-Time JVM (鑻辫) 鍑虹増鏃堕棿锛2013-3-22 +4.4.3 楂橀熺紦瀛橈紙cache锛変紭鍖栬鍒 +4.5 涓娆$畻娉曢嗗悜涔嬫梾 +4.6 鏈珷灏忕粨 -Understanding Java Virtual Machine 鍑虹増骞: 2013-3-31 +绗 5 绔 娴佺▼鎺у埗璇彞鐨勮瘑鍒 +5.1 if 璇彞 +5.2 if鈥︹lse鈥︹ 璇彞 -Java铏氭嫙鏈哄苟鍙戠紪绋 鍑虹増鏃堕棿锛2013-05-01 +5.3 鐢 if 鏋勬垚鐨勫鍒嗘敮娴佺▼ +5.4 switch 鐨勭湡鐩 +5.5 闅句互鏋勬垚璺宠浆琛ㄧ殑 switch -瑙f瀽Java铏氭嫙鏈哄紑鍙 鍑虹増骞: 2013-5-1 +5.6 闄嶄綆鍒ゅ畾鏍戠殑楂樺害 +5.7 do/while/for 鐨勬瘮杈 +5.8 缂栬瘧鍣ㄥ寰幆缁撴瀯鐨勪紭鍖 -Java铏氭嫙鏈鸿鑼冿紙Java SE 7鐗堬級 [The Java Virtual Machine Specification] 鍑虹増鏃堕棿锛2013-12-01 +5.9 鏈珷灏忕粨 +绗 6 绔 鍑芥暟鐨勫伐浣滃師鐞 +6.1 鏍堝抚鐨勫舰鎴愬拰鍏抽棴 -HotSpot瀹炴垬 鍑虹増鏃堕棿锛2014-03-01 +6.2 鍚勭璋冪敤鏂瑰紡鐨勮冨療 +6.3 浣跨敤 ebp 鎴 esp 瀵诲潃 +6.4 鍑芥暟鐨勫弬鏁 -Java铏氭嫙鏈虹簿璁 鍑虹増鏃堕棿锛2015-05-01 +6.5 鍑芥暟鐨勮繑鍥炲 +6.6 鍥為【 +6.7 鏈珷灏忕粨 -Java鏍稿績鎶鏈郴鍒楋細Java铏氭嫙鏈鸿鑼冿紙Java SE 8鐗堬級 [The Java Virtual Machine +绗 7 绔 鍙橀噺鍦ㄥ唴瀛樹腑鐨勪綅缃拰璁块棶鏂瑰紡 +7.1 鍏ㄥ眬鍙橀噺鍜屽眬閮ㄥ彉閲忕殑鍖哄埆 +7.2 灞閮ㄩ潤鎬佸彉閲忕殑宸ヤ綔鏂瑰紡 -Specification Jave SE 8 Edition] 鍑虹増鏃堕棿锛2015-06-01 +7.3 鍫嗗彉閲 +7.4 鏈珷灏忕粨 +绗 8 绔 鏁扮粍鍜屾寚閽堢殑瀵诲潃 -OpenJDK Cookbook 鍑虹増鏃堕棿锛2015-01-30 +8.1 鏁扮粍鍦ㄥ嚱鏁板唴 +8.2 鏁扮粍浣滀负鍙傛暟 +8.3 鏁扮粍浣滀负杩斿洖鍊 -鑷繁鍔ㄦ墜鍐橨ava铏氭嫙鏈 鍑虹増鏃堕棿锛2016-06-01 +8.4 涓嬫爣瀵诲潃鍜屾寚閽堝鍧 +8.5 澶氱淮鏁扮粍 +8.6 瀛樻斁鎸囬拡绫诲瀷鏁版嵁鐨勬暟缁 -娣卞叆鐞嗚ВJVM 锛 G1 GC 鍑虹増鏃堕棿锛2017-06-01 +8.7 鎸囧悜鏁扮粍鐨勬寚閽堝彉閲 +8.8 鍑芥暟鎸囬拡 +8.9 鏈珷灏忕粨 -鎻Java铏氭嫙鏈猴細JVM璁捐鍘熺悊涓庡疄鐜 鍑虹増鏃堕棿锛2017-06-01 +绗 9 绔 缁撴瀯浣撳拰绫 +9.1 瀵硅薄鐨勫唴瀛樺竷灞 +9.2 this 鎸囬拡 - Java铏氭嫙鏈哄熀纭鏁欑▼ 鍑虹増鏃堕棿锛2018-02-01 +9.3 闈欐佹暟鎹垚鍛 +9.4 瀵硅薄浣滀负鍑芥暟鍙傛暟 +9.5 瀵硅薄浣滀负杩斿洖鍊 -Optimizing Java: Practical Techniques for Improving JVM Application Performance (鑻辫) 鍑虹増鏃堕棿锛2018-5-11 +9.6 鏈珷灏忕粨 +绗 10 绔 鍏充簬鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟 +10.1 鏋勯犲嚱鏁扮殑鍑虹幇鏃舵満 -Java virtual machine Second Edition Kindle鐢靛瓙涔 鍑虹増鏃堕棿锛2018-6-10 +10.2 姣忎釜瀵硅薄閮芥湁榛樿鐨勬瀯閫犲嚱鏁板悧 +10.3 鏋愭瀯鍑芥暟鐨勫嚭鐜版椂鏈 +10.4 鏈珷灏忕粨 -JVM Tutorials - Herong's Tutorial Examples Kindle鐢靛瓙涔 鍑虹増鏃堕棿锛2018-6-29 +绗 11 绔 鍏充簬铏氬嚱鏁 +11.1 铏氬嚱鏁扮殑鏈哄埗 +11.2 铏氬嚱鏁扮殑璇嗗埆 -JRockit鏉冨▉鎸囧崡 娣卞叆鐞嗚ВJVM 鍑虹増鏃堕棿锛2019-01-01 +11.3 鏈珷灏忕粨 +绗 12 绔 浠庡唴瀛樿搴︾湅缁ф壙鍜屽閲嶇户鎵 +12.1 璇嗗埆绫诲拰绫讳箣闂寸殑鍏崇郴 -JVM G1婧愮爜鍒嗘瀽鍜岃皟浼 鍑虹増鏃堕棿锛2019-04-01 +12.2 澶氶噸缁ф壙 +12.3 铏氬熀绫 +12.4 鑿卞舰缁ф壙 -瀹炴垬Java铏氭嫙鏈猴細JVM鏁呴殰璇婃柇涓庢ц兘浼樺寲锛堢2鐗堬級 鍑虹増鏃堕棿锛2019-07-01 +12.5 鏈珷灏忕粨 +绗 13 绔 寮傚父澶勭悊 +13.1 寮傚父澶勭悊鐨勭浉鍏崇煡璇 -娣卞叆鐞嗚ВJava铏氭嫙鏈猴細JVM楂樼骇鐗规т笌鏈浣冲疄璺碉紙绗3鐗堬級 鍑虹増鏃堕棿锛2019-12-01 +13.2 寮傚父绫诲瀷涓哄熀鏈暟鎹被鍨嬬殑澶勭悊娴佺▼ +13.3 寮傚父绫诲瀷涓哄璞$殑澶勭悊娴佺▼ +13.4 璇嗗埆寮傚父澶勭悊 -铏氭嫙鏈鸿璁′笌瀹炵幇 浠VM涓轰緥 鍑虹増鏃堕棿锛2020-01-01 +13.5 鏈珷灏忕粨 +``` +[澶╀功澶滆 浠庢眹缂栬瑷鍒 Windows 鍐呮牳缂栫▼](https://e.jd.com/30093093.html) +``` +鍐呭绠浠 -娣卞叆娴呭嚭锛欽ava铏氭嫙鏈鸿璁′笌瀹炵幇 鍑虹増鏃堕棿锛2020-04-01 +鍓嶈█ +鍏ユ墜绡 鐔熸倝姹囩紪 +绗 1 绔 姹囩紪鎸囦护涓 C 璇█ -娣卞叆鐞嗚ВJVM瀛楄妭鐮 鍑虹増鏃堕棿锛2020-06-01 +1.1 涓婃満寤虹珛绗竴涓伐绋 +1.2 绠瑕佸涔犲父鐢ㄧ殑姹囩紪鎸囦护 -Microsoft Java Virtual Machine 椤垫暟: 88 JVM 1.1 闂簮 +1.3 C 鍑芥暟鐨勫弬鏁颁紶閫掕繃绋 +绗 2 绔 C 璇█鐨勬祦绋嬪拰澶勭悊 +2.1 C 璇█鐨勫惊鐜弽姹囩紪 -A Dynamic Compiler for an Embedded Java Virtual Machine 椤垫暟: 96 +2.2 C 璇█鍒ゆ柇涓庡垎鏀殑鍙嶆眹缂 +2.3 C 璇█鐨勬暟缁勪笌缁撴瀯 +2.4 C 璇█鐨勫叡鐢ㄤ綋鍜屾灇涓剧被鍨 -Serializable Coroutines for Java Virtual Machines 椤垫暟: 104 +绗3绔 缁冧範鍙嶆眹缂 C 璇█绋嬪簭 +3.1 绠楁硶鐨勫弽姹囩紪 +3.2 鍙戣鐗堢殑鍙嶆眹缂 -Java Virtual Machine, Including 椤垫暟: 106 +3.3 姹囩紪鍙 C 璇█缁冧範 +``` +[瀹屽叏鎵嬪唽涓涗功锛欳++ 鍙傝冨ぇ鍏紙绗4鐗堬級 [C++ The Complete Reference] 鍑虹増鏃堕棿 2003-01-01](https://item.jd.com/10173500.html) +[C++ 璁捐鏂版濈淮 娉涘瀷缂栫▼涓庤璁℃ā寮忎箣搴旂敤 鍑虹増鏃堕棿 2003-03-01](https://item.jd.com/10215960.html) -Openjdk 椤垫暟: 112 +[C++ STL 绋嬪簭鍛樺紑鍙戞寚鍗楋紙闄勫厜鐩橈級 鍑虹増鏃堕棿 2003-04-01](https://item.jd.com/10135932.html) +[娣卞叆 C++ 绯诲垪 娉涘瀷缂栫▼涓 STL 鍑虹増鏃堕棿 2003-04-01](https://item.jd.com/10180107.html) +[C++ 骞惰涓庡垎甯冨紡缂栫▼ [Parallel and Distributed Programming Using C++] 鍑虹増鏃堕棿 2004-01-01](https://item.jd.com/10180197.html) -Hotspot 椤垫暟: 136 +[C++ 缃戠粶缂栫▼ 鍗 2 鍩轰簬 ACE 鍜屾鏋剁殑绯荤粺鍖栧鐢 鍑虹増鏃堕棿 2004-01-01](https://item.jd.com/10173511.html) +[ACE 绋嬪簭鍛樻寚鍗 缃戠粶涓庣郴缁熺紪绋嬬殑瀹炵敤璁捐妯″紡锛堥檮鍏夌洏锛 [The ACE Programmers Guide] 鍑虹増鏃堕棿 2004-01-01](https://item.jd.com/10180230.html) +[C++ 缂栫▼鑹烘湳 鍑虹増鏃堕棿 2005-04-01](https://item.jd.com/10078579.html) -Java Virtual Machine Design for Embedded Systems 椤垫暟: 152 +[绮鹃 Oracle 10 g Pro C/C++缂栫▼ 鍑虹増鏃堕棿 2005-10-01](https://item.jd.com/10100729.html) +[Effective C++ 涓枃鐗 鏀瑰杽绋嬪簭涓庤璁$殑 55 涓叿浣撳仛娉曪紙绗 3 鐗堬級 鍑虹増鏃堕棿 2006-07-01](https://item.jd.com/10066454.html) +[C++ 缃戠粶缂栫▼ 鍗 1 杩愮敤 ACE 鍜屾ā寮忔秷闄ゅ鏉傛 鍑虹増鏃堕棿 2007-05-01](https://item.jd.com/10142730.html) -Java Virtual Machines 椤垫暟: 280 +[鎸夐渶鍗板埛 C++ STL 寮鍙戞妧鏈寮 鍑虹増鏃堕棿 2007-08-01](https://item.jd.com/12821994.html) +[C++ 娌夋濆綍 Ruminations on C++ 鍑虹増鏃堕棿 2008-01-01](https://item.jd.com/10062652.html) +[C 鍜 C++ 缁忓吀钁椾綔 C 涓撳缂栫▼ Expert C Programming Deep C Secrets 鍑虹増鏃堕棿 2008-02-01](https://item.jd.com/10062655.html) -Java Language and Virtual Machine Specifications +[C 鍜 C++ 缁忓吀钁椾綔 C 闄烽槺涓庣己闄 C Traps and Pitfalls 鍑虹増鏃堕棿 2008-02-01](https://item.jd.com/10062654.html) +[C 鍜 C++ 缁忓吀钁椾綔 C 鍜屾寚閽 POINTERS ON C 鍑虹増鏃堕棿 2008-04-01](https://item.jd.com/10062667.html) +[Professional Multicore Programming Design And Implementation For C++ Developers 鍑虹増鏃堕棿 2008-08-22](https://e.jd.com/30130930.html) -OpenJDK JVM 1.6 +[浣犲繀椤荤煡閬撶殑 495 涓 C 璇█闂 鍑虹増鏃堕棿 2009-02-01](https://item.jd.com/10063215.html) +[浠g爜鎻 浠 C/C++ 鐨勮搴︽帰绉樿绠楁満绯荤粺锛堟帹鑽 PC 闃呰锛 鍑虹増鏃堕棿 2009-09-01](https://e.jd.com/30093070.html) +[C++ 缂栫▼瑙勮寖 101 鏉¤鍒 鍑嗗垯涓庢渶浣冲疄璺 鍑虹増鏃堕棿 2010-12-01](https://item.jd.com/10380538.html) -jvms8 +[More Exceptional C++ 40 涓柊鐨勫伐绋嬮毦棰樸佺紪绋嬬枒闂強瑙e喅鏂规硶锛堜腑鏂囩増锛 鍑虹増鏃堕棿 2011-01-01](https://item.jd.com/10484021.html) +[鎻愰珮 C++ 鎬ц兘鐨勭紪绋嬫妧鏈 鍑虹増鏃堕棿 2011-03-01](https://item.jd.com/10550805.html) -#### 绗笁鏂 Java 铏氭嫙鏈 +[鐧界洅娴嬭瘯涔嬮亾 C++ test 鍑虹増鏃堕棿 2011-04-01](https://item.jd.com/10667008.html) -https://github.com/mateusbraga/JVM-1.2 JVM 1.2 +[C++ 缂栫▼鎬濇兂锛堜袱鍗峰悎璁㈡湰锛 鍑虹増鏃堕棿 2011-07-01](https://item.jd.com/10790734.html) -DS铏氭嫙鏈 JVM 1.2 +[Professional C++ Second Edition 鍑虹増鏃堕棿 2011-09-16](https://e.jd.com/30134502.html) -ClassPath铏氭嫙鏈 JVM 1.2 1.3 1.4 1.5 +[缂栧啓楂樿川閲忎唬鐮 鏀瑰杽 C++ 绋嬪簭鐨 150 涓缓璁 鍑虹増鏃堕棿 2011-12-01](https://item.jd.com/10898800.html) -SableVM 铏氭嫙鏈 JVM 1.2 +[Applied C++ 涓枃鐗 鍑虹増鏃堕棿 2012-01-01](https://item.jd.com/10894123.html) -Harmony铏氭嫙鏈 JVM 1.5 +[娣卞害鎺㈢储 C++ 瀵硅薄妯″瀷 鍑虹増鏃堕棿 2012-01-01](https://item.jd.com/10909788.html) -IBM铏氭嫙鏈 +[Imperfect C++锛堜腑鏂囩増锛 [Imperfect C++ Practical Solutions for Real-Life Programming] 鍑虹増鏃堕棿 2012-06-01](https://item.jd.com/11017239.html) -The Kaffe Virtual Machine 铏氭嫙鏈 +[C++ 浠g爜璁捐涓庨噸鐢 [Designing and Coding Reusable C++] 鍑虹増鏃堕棿 2012-06-01](https://item.jd.com/11017240.html) -Alibaba dragonwell8 铏氭嫙鏈 JVM 1.8 +[ACE 鎶鏈唴骞 娣卞叆瑙f瀽 ACE 鏋舵瀯璁捐涓庡疄鐜板師鐞 鍑虹増鏃堕棿 2012-07-09](https://e.jd.com/30469252.html) -鍗庝负 bishengjdk-8 铏氭嫙鏈 JVM 1.8 +[楂樿川閲忕▼搴忚璁℃寚鍗 C++/C璇█ 鍑虹増鏃堕棿 2012-10-01](https://e.jd.com/30150029.html) -https://github.com/zhangkari/jvm +[C++ 缂栫▼璋冭瘯绉樼瑘 鍑虹増鏃堕棿 2013-01-01](https://item.jd.com/11142468.html) -https://github.com/kayodesu/cabin + **[Linux 澶氱嚎绋嬫湇鍔$缂栫▼ 浣跨敤 muduo C++ 缃戠粶搴 鍑虹増鏃堕棿 2013-01-01](https://item.jd.com/11163782.html)** -SAP JVM铏氭嫙鏈 +[C 鍜 C++ 瀹炲姟绮鹃 C++ Templates 涓枃鐗 鍑虹増鏃堕棿 2013-04-01](https://item.jd.com/11216941.html) -avian 铏氭嫙鏈 +[瀹炴垬绯诲垪 娣卞叆瀹炶返 C++ 妯℃澘缂栫▼ 鍑虹増鏃堕棿 2013-06-01](https://item.jd.com/11267551.html) -#### 瀹夊崜铏氭嫙鏈轰功绫嶅ぇ鍏 +[鍍忚绠楁満绉戝瀹朵竴鏍锋濊 C++ 鍑虹増鏃堕棿 2013-06-01](https://item.jd.com/11254030.html) -Android Virtual Machine (VM) Setup on Linux 鍑虹増鏃堕棿锛2014-01-01 +[鍗庣珷绉戞妧 娣卞叆鐞嗚В C++11 鏂扮壒鎬цВ鏋愪笌搴旂敤 鍑虹増鏃堕棿 2013-06-01](https://item.jd.com/11252776.html) +[Essential C++ 涓枃鐗 鍑虹増鏃堕棿 2013-08-01](https://item.jd.com/11294334.html) +[鍥剧伒绋嬪簭璁捐涓涗功 C++ API 璁捐 [API Design for C++] 鍑虹増鏃堕棿 2013-08-01](https://item.jd.com/11288309.html) -娣卞叆瑙f瀽Android铏氭嫙鏈 鍑虹増鏃堕棿锛2014-01-01 +[浠庣己闄蜂腑瀛︿範 C/C++ 鍑虹増鏃堕棿 2013-09-01](https://e.jd.com/30336229.html) +[鍗庣珷绋嬪簭鍛樹功搴 C 鍜 C++ 瀹夊叏缂栫爜锛堝師涔︾ 2 鐗堬級 鍑虹増鏃堕棿 2014-01-01](https://item.jd.com/11380971.html) +[缂栫爜鐨勬硶鍒 C++ 绋嬪簭鍛樹笉鍙笉鐭ョ殑 101 鏉″疄鐢ㄧ粡楠 鍑虹増鏃堕棿 2014-01-01](https://item.jd.com/11391235.html) -Android Dalvik铏氭嫙鏈虹粨鏋勫強鏈哄埗鍓栨瀽锛氱1鍗 Dalvik铏氭嫙鏈虹粨鏋勫墫鏋 鍑虹増鏃堕棿锛2014-11-01 +[C++ For Dummies 7th Edition 鍑虹増鏃堕棿 2014-01-01](https://e.jd.com/30167562.html) +[娣卞叆鐞嗚ВC鎸囬拡锛圕/C++绋嬪簭鍛樿繘闃跺繀澶囷紝閫忓交鐞嗚В鎸囬拡涓庡唴瀛樼鐞嗭級 鍑虹増鏃堕棿 2014-02-01](https://e.jd.com/30410332.html) +[C 鏍囧噯搴擄紙鑻辨枃鐗堬級 鍑虹増鏃堕棿 2014-04-01](https://item.jd.com/11424898.html) -Android Dalvik铏氭嫙鏈虹粨鏋勫強鏈哄埗鍓栨瀽锛氱2鍗凤紙Dalvik铏氭嫙鏈哄悇妯″潡鏈哄埗鍒嗘瀽锛 鍑虹増鏃堕棿锛2014-08-01 +[娣卞叆瀹炶返 Boost 绋嬪簭搴撳紑鍙戠殑 94 涓绗 鍑虹増鏃堕棿 2014-04-21](https://e.jd.com/30316616.html) +[C++ All-in-One For Dummies 3 rd Edition 鍑虹増鏃堕棿 2014-08-08](https://e.jd.com/30171371.html) +[澶ц妯 C++ 绋嬪簭璁捐 鍑虹増鏃堕棿 2014-10-01](https://e.jd.com/30426114.html) -娣卞叆瑙f瀽Android铏氭嫙鏈 鍑虹増鏃堕棿锛2016-09-01 + **[鍗庣珷鍘熷垱绮惧搧 娣卞叆搴旂敤 C++ 11 浠g爜浼樺寲涓庡伐绋嬬骇搴旂敤 鍑虹増鏃堕棿 2015-05-01](https://item.jd.com/11701870.html)** +[C++ STL 鍩虹鍙婂簲鐢紙绗 2 鐗堬級涓浗楂樼瓑瀛︽牎璁$畻鏈虹瀛︿笌鎶鏈笓涓 搴旂敤鍨 瑙勫垝鏁欐潗 鍑虹増鏃堕棿 2015-05-01](https://item.jd.com/11712422.html) +[C/C++ 鎶鏈笡涔 楂樼骇 C/C++ 缂栬瘧鎶鏈 [Advanced C and C++ Compiling] 鍑虹増鏃堕棿 2015-05-01](https://item.jd.com/11693895.html) -Programming for the Android Dalvik Virtual Machine 鍑虹増鏃堕棿锛2017骞1鏈15鏃 +[C++ 鏍囧噯搴擄紙绗 2 鐗堬級 鍑虹増鏃堕棿 2015-06-01](https://item.jd.com/11706352.html) +[C++ 骞跺彂缂栫▼瀹炴垬 鍑虹増鏃堕棿 2015-06-01](https://item.jd.com/11691853.html) +[Learning Boost C++ Libraries 鍑虹増鏃堕棿 2015-07-31](https://e.jd.com/30371972.html) -娣卞叆鐞嗚ВAndroid锛欽ava铏氭嫙鏈篈RT [Understanding Android Internals: ART JVM] 鍑虹増鏃堕棿锛2019-04-01 +[鍐欑粰澶у繖浜虹湅鐨 C++ 鍑虹増鏃堕棿 2015-08-01](https://item.jd.com/11763012.html) +[C 瀹夊叏缂栫爜鏍囧噯 寮鍙戝畨鍏 鍙潬 绋冲浐绯荤粺鐨 98 鏉¤鍒欙紙鍘熶功绗 2 鐗堬級 鍑虹増鏃堕棿 2015-08-01](https://item.jd.com/11758237.html) +[鏈鏂 C/C++ 鍑芥暟涓庣畻娉曢熸煡閫熺敤澶ц緸鍏革紙闄勫厜鐩橈級 鍑虹増鏃堕棿 2015-09-01](https://item.jd.com/11770080.html) -Dalvik Turbo Virtual Machine 椤垫暟: 18 +[Boost Asio C++ Network Programming Second Edition 鍑虹増鏃堕棿 2015-09-16](https://e.jd.com/30371894.html) +[澶ч亾鑷崇畝 C++ STL锛堟爣鍑嗘ā鏉垮簱锛夌簿瑙 鍑虹増鏃堕棿 2015-11-01](https://item.jd.com/11818713.html) +[C++ 娉涘瀷 STL 鍘熺悊鍜屽簲鐢 鍑虹増鏃堕棿 2015-12-01](https://item.jd.com/11876751.html) -Dalvik 椤垫暟: 80 +[Boost Asio C++ Network Programming Cookbook 鍑虹増鏃堕棿 2016-01-25](https://e.jd.com/30372453.html) +[C++ 缂栫▼鍓栨瀽 闂 鏂规鍜岃璁″噯鍒 鍑虹増鏃堕棿 2016-03-01](https://item.jd.com/11890425.html) +[C++ 澶氱嚎绋嬬紪绋嬪疄鎴 鍑虹増鏃堕棿 2016-04-01](https://item.jd.com/11919981.html) -Dalvik Turbo Virtual Machine: Lite Edition +[C++ 瑕嗚緳褰 鍑虹増鏃堕棿 2016-04-01](https://item.jd.com/11909224.html) +[C++ 蹇呯煡蹇呬細 鍑虹増鏃堕棿 2016-04-01](https://item.jd.com/11898671.html) -### C&C++ 绡 + **[C 楂樼骇缂栫▼ 鍩轰簬妯″潡鍖栬璁℃濇兂鐨 C 璇█寮鍙 鍑虹増鏃堕棿 2016-05-01](https://item.jd.com/11924653.html)** -婊存按閫嗗悜 +[C 鎸囬拡 鍩烘湰姒傚康 鏍稿績鎶鏈強鏈浣冲疄璺 鍑虹増鏃堕棿 2016-05-01](https://item.jd.com/11928287.html) -C++鍙嶆眹缂栦笌閫嗗悜鍒嗘瀽鎶鏈彮绉 +[鍚庡彴寮鍙 鏍稿績鎶鏈笌搴旂敤瀹炶返 鍑虹増鏃堕棿 2016-08-01](https://item.jd.com/12000166.html) -绗簩閮ㄥ垎 C++鍙嶆眹缂栨彮绉 +[鐮佸啘 缁忓吀 C++锛堢 26 鏈燂級 鍑虹増鏃堕棿 2016-12-22](https://e.jd.com/30354693.html) -绗2绔 鍩烘湰鏁版嵁绫诲瀷鐨勮〃鐜板舰寮 +[C++ 绋嬪簭璁捐瀹炶返涓庢妧宸 娴嬭瘯椹卞姩寮鍙 鍑虹増鏃堕棿 2017-01-01](https://e.jd.com/30410237.html) -2.1 鏁存暟绫诲瀷 +[C++ 鏍囧噯妯℃澘搴撶紪绋嬪疄鎴 鍑虹増鏃堕棿 2017-01-01](https://e.jd.com/30410237.html) -2.1.1 鏃犵鍙锋暣鏁 +[C++ STL 鏍囧噯绋嬪簭搴撳紑鍙戞寚鍗楋紙绗 2 鐗堬級 鍑虹増鏃堕棿 2017-01-01](https://item.jd.com/12040121.html) -2.1.2 鏈夌鍙锋暣鏁 +[C++ 17 STL Cookbook 鍑虹増鏃堕棿 2017-06-28](https://e.jd.com/30373228.html) -2.2 娴偣鏁扮被鍨 +[Boost C++ Application Development Cookbook Second Edition 鍑虹増鏃堕棿 2017-08-30](https://e.jd.com/30381029.html) -2.2.1 娴偣鏁扮殑缂栫爜鏂瑰紡 +[Learning C++ Functional Programming 鍑虹増鏃堕棿 2017-08-10](https://e.jd.com/30380995.html) -2.2.2 鍩烘湰鐨勬诞鐐规暟鎸囦护 +[Mastering the C++ 17 STL 鍑虹増鏃堕棿 2017-09-28](https://e.jd.com/30380973.html) -2.3 瀛楃鍜屽瓧绗︿覆 +[C++ 鍏ラ棬缁忓吀锛堢 10 鐗堬級 鍑虹増鏃堕棿 2017-11-01](https://item.jd.com/12281050.html) -2.3.1 瀛楃鐨勭紪鐮 +[C++ 璇箟鍜屾ц兘鍒嗘瀽 鍑虹増鏃堕棿 2017-12-01](https://e.jd.com/30410196.html) -2.3.2 瀛楃涓茬殑瀛樺偍鏂瑰紡 +[C++ 鎬ц兘浼樺寲鎸囧崡 鍑虹増鏃堕棿 2018-01-01](https://e.jd.com/30410196.html) -2.4 甯冨皵绫诲瀷 +[C++ High Performance 鍑虹増鏃堕棿 2018-01-31](https://e.jd.com/30402033.html) -2.5 鍦板潃銆佹寚閽堝拰寮曠敤 +[Effective Modern C++ (涓枃鐗) 鍑虹増鏃堕棿 2018-04-01](https://item.jd.com/12348026.html) -2.5.1 鎸囬拡鍜屽湴鍧鐨勫尯鍒 +[澶氭牳寮傛瀯骞惰璁$畻锛圤penMP4.5 C C++绡囷級 瓒呯畻 浜戣绠椾笌澶ф暟鎹妧鏈笓涓氭暀绋嬄锋櫘閫氶珮绛夋暀鑲 鍗佷笁浜 瑙勫垝鏁欐潗 鍑虹増鏃堕棿 2018-04-01](https://item.jd.com/12375927.html) -2.5.2 鍚勭被鍨嬫寚閽堢殑宸ヤ綔鏂瑰紡 +[C/C++ 瀹炶返杩涢樁涔嬮亾 鍐欑粰绋嬪簭鍛樼湅鐨勭紪绋嬩功 鍑虹増鏃堕棿 2018-05-01](https://item.jd.com/12331465.html) -2.5.3 寮曠敤 +[鏂版爣鍑 C++ 绋嬪簭璁捐 鍑虹増鏃堕棿 2018-08-01](https://e.jd.com/30451880.html) -2.6 甯搁噺 +[娓呭崕璁$畻鏈哄浘涔﹁瘧涓 绮鹃 C++锛堢 9 鐗堬級 鍑虹増鏃堕棿 2018-08-01](https://item.jd.com/12432130.html) -2.6.1 甯搁噺鐨勫畾涔 +[Linux C 涓 C++ 涓绾垮紑鍙戝疄璺 鍑虹増鏃堕棿 2018-12-01](https://item.jd.com/12472663.html) -2.6.2 #define鍜宑onst鐨勫尯鍒 +[Hands-On System Programming with C++ 鍑虹増鏃堕棿 2018-12-26](https://e.jd.com/30506171.html) -2.7 鏈珷灏忕粨 +[Hands-On Design Patterns with C++ 鍑虹増鏃堕棿 2019-01-30](https://e.jd.com/30506113.html) -绗3绔 璁よ瘑鍚姩鍑芥暟锛屾壘鍒扮敤鎴峰叆鍙 +[C++ 浠g爜鏁存磥涔嬮亾 C++ 17 鍙寔缁蒋浠跺紑鍙戞ā寮忓疄璺 鍑虹増鏃堕棿 2019-04-01](https://item.jd.com/12599914.html) -3.1 绋嬪簭鐨勭湡姝e叆鍙 +[C++ 楂樼骇缂栫▼(绗 4 鐗) 鍑虹増鏃堕棿 2019-04-01](https://item.jd.com/12600974.html) -3.2 浜嗚ВVC++6.0鐨勫惎鍔ㄥ嚱鏁 +[C 鎸囬拡鍘熺悊鎻 鍩轰簬搴曞眰瀹炵幇鏈哄埗 鍑虹増鏃堕棿 2019-05-01](https://e.jd.com/30485018.html) -3.3 main鍑芥暟鐨勮瘑鍒 +[鐧借瘽 C++ 涔嬬粌鍔 鍑虹増鏃堕棿 2019-05-01](https://item.jd.com/12609616.html) -3.4 鏈珷灏忕粨 + **[C++ 绋嬪簭璁捐璇█锛堢 1-4 閮ㄥ垎 濂楄鍏 2 鍐岋級 鍑虹増鏃堕棿 2019-06-01](https://item.jd.com/12746690.html)** -绗4绔 瑙傚療鍚勭琛ㄨ揪寮忕殑姹傚艰繃绋 +[C++ 17 鍏ラ棬缁忓吀锛堢 5 鐗堬級 鍑虹増鏃堕棿锛2019-06-01](https://item.jd.com/12620430.html) -4.1 绠楁湳杩愮畻鍜岃祴鍊 + **[C Primer Plus 绗 6 鐗 涓枃鐗 鍑虹増鏃堕棿 2019-11-01](https://item.jd.com/12627795.html)** -4.1.1 鍚勭绠楁湳杩愮畻鐨勫伐浣滃舰寮 +[C++ 鍑芥暟寮忕紪绋 [Functional Programming in C++] 鍑虹増鏃堕棿 2020-01-01](https://item.jd.com/12612787.html) -4.1.2 绠楁湳缁撴灉婧㈠嚭 +[Boost 绋嬪簭搴撳畬鍏ㄥ紑鍙戞寚鍗 娣卞叆 C++ 鏍囧噯搴擄紙绗 5 鐗堬級 鍑虹増鏃堕棿 2020-06-01](https://e.jd.com/30611143.html) -4.1.3 鑷鍜岃嚜鍑 +[C++ 鏂扮粡鍏 鍑虹増鏃堕棿 2020-07-01](https://item.jd.com/12945032.html) -4.2 鍏崇郴杩愮畻鍜岄昏緫杩愮畻 +### Linux 绡 -4.2.1 鍏崇郴杩愮畻鍜屾潯浠惰烦杞殑瀵瑰簲 +[Debug Hacks 涓枃鐗 鍑虹増骞 2011-8](https://book.douban.com/subject/6799412/) -4.2.2 琛ㄨ揪寮忕煭璺 +[Linux 鍐呮牳瀹夊叏妯″潡娣卞叆鍓栨瀽 鍑虹増鏃堕棿 2016-12-01](https://item.jd.com/12019115.html) -4.2.3 鏉′欢琛ㄨ揪寮 +[Linux 鍐呮牳婧愪唬鐮佸垎鏋 鍑虹増骞 2000-06](https://book.douban.com/subject/1231837/) -4.3 浣嶈繍绠 +[Linux鍐呮牳鍒嗘瀽鍙婂父瑙侀棶棰樿В绛 (骞宠) 鍑虹増骞 2000-07](https://book.douban.com/subject/2008804/) -4.4 缂栬瘧鍣ㄤ娇鐢ㄧ殑浼樺寲鎶宸 +[LINUX 鐨勫唴鏍镐笌缂栫▼ 鍑虹増鏃堕棿 2000-07-01](https://book.douban.com/subject/2011808/) -4.4.1 娴佹按绾夸紭鍖栬鍒 +[Linux 鎿嶄綔绯荤粺鍐呮牳鍒嗘瀽 鍑虹増骞 2000-8](https://book.douban.com/subject/1240431/) -4.4.2 鍒嗘敮浼樺寲瑙勫垯 + **[LINUX 鍐呮牳婧愪唬鐮佹儏鏅垎鏋愶紙涓婂唽锛夊嚭鐗堟椂闂 2001-01-01](https://item.jd.com/10082548.html)** -4.4.3 楂橀熺紦瀛橈紙cache锛変紭鍖栬鍒 + **[LINUX 鍐呮牳婧愪唬鐮佹儏鏅垎鏋愶紙涓嬪唽锛 鍑虹増鏃堕棿 2001-09-01](https://item.jd.com/10082549.html)** -4.5 涓娆$畻娉曢嗗悜涔嬫梾 +[Linux 鍐呮牳 2.4 鐗堟簮浠g爜鍒嗘瀽澶у叏 鍑虹増骞 2002-1-1](https://book.douban.com/subject/1222347/) -4.6 鏈珷灏忕粨 +[Linux 鍐呮牳婧愪唬鐮 鍑虹増骞 2002-1-1](https://book.douban.com/subject/1240652/) -绗5绔 娴佺▼鎺у埗璇彞鐨勮瘑鍒 +[娣卞叆鍒嗘瀽 Linux 鍐呮牳婧愪唬鐮 鍑虹増鏃堕棿 2002-07-01](https://book.douban.com/subject/1222347/) -5.1 if璇彞 + **[鏅氶珮绛夋暀鑲 鍗佷竴浜 鍥藉绾ц鍒掓暀鏉 杈瑰共杈瑰锛圠INUX 鍐呮牳鎸囧锛 [LEARNING LINUX KERNEL BY PRACTICE] 鍑虹増鏃堕棿 2002-08-01](https://item.jd.com/10158963.html)** -5.2 if鈥︹lse鈥︹﹁鍙 +[Linux 鍐呮牳鍒嗘瀽涓庡疄渚嬪簲鐢 鍑虹増骞 2002-9](https://book.douban.com/subject/1241134/) -5.3 鐢╥f鏋勬垚鐨勫鍒嗘敮娴佺▼ +[鎿嶄綔绯荤粺鏁欑▼ Linux 瀹炰緥鍒嗘瀽/闈㈠悜 21 涓栫邯楂樼瓑瀛︽牎璁$畻鏈虹被涓撲笟绯诲垪鏁欐潗 鍑虹増鏃堕棿 2004-01-01](https://item.jd.com/11261261.html) -5.4 switch鐨勭湡鐩 +[楂樼瓑瀛︽牎璁$畻鏈虹瀛︿笌鎶鏈暀鏉 Linux 鎿嶄綔绯荤粺鍒嗘瀽鏁欑▼锛堟帹鑽 PC 闃呰锛 鍑虹増鏃堕棿 2004-05-01](https://e.jd.com/30041166.html) -5.5 闅句互鏋勬垚璺宠浆琛ㄧ殑switch +[Linux 鍐呮牳瀹屽叏娉ㄩ噴 鍑虹増鏃堕棿 2004-09-01](https://item.jd.com/10131755.html) -5.6 闄嶄綆鍒ゅ畾鏍戠殑楂樺害 + **[Linux 0.01 鍐呮牳鍒嗘瀽涓庢搷浣滅郴缁熻璁★紙鍒涢犱綘鑷繁鐨勬搷浣滅郴缁燂級锛堥檮 CD鈥擱OM 鍏夌洏 1 寮狅級 鍑虹増鏃堕棿 2004-10-01](https://item.jd.com/10154771.html)** -5.7 do/while/for鐨勬瘮杈 +[鍥藉璁$畻鏈虹瀛︾粡鍏告暀鏉 Linux 鍐呮牳缂栫▼鎸囧崡锛堢 3 鐗堬級 鍑虹増鏃堕棿 2004-11-01](https://item.jd.com/10154753.html) -5.8 缂栬瘧鍣ㄥ寰幆缁撴瀯鐨勪紭鍖 +[IA-64 Linux 鍐呮牳璁捐涓庡疄鐜 鍑虹増骞 2004-11](https://book.douban.com/subject/1239565/) -5.9 鏈珷灏忕粨 +[鎿嶄綔绯荤粺 Linux 绡 楂樿亴楂樹笓 21 涓栫邯瑙勫垝鏁欐潗 鍑虹増鏃堕棿 2005-01-01](https://item.jd.com/10353151.html) -绗6绔 鍑芥暟鐨勫伐浣滃師鐞 +[Linux 鎿嶄綔绯荤粺鍐呮牳瀹炰範 鍑虹増骞 2005-2](https://book.douban.com/subject/1222388/) -6.1 鏍堝抚鐨勫舰鎴愬拰鍏抽棴 +[Linux 鍐呮牳鍒嗘瀽鍙婄紪绋 鍑虹増鏃堕棿 2005-09-01](https://item.jd.com/10142242.html) -6.2 鍚勭璋冪敤鏂瑰紡鐨勮冨療 + **[O'Reilly LINUX 璁惧椹卞姩绋嬪簭锛堢 3 鐗堬級 鍑虹増鏃堕棿 2006-01-01](https://item.jd.com/10100144.html)** -6.3 浣跨敤ebp鎴杄sp瀵诲潃 +[Linux 缃戠粶浣撶郴缁撴瀯 Linux 鍐呮牳涓綉缁滃崗璁殑璁捐涓庡疄鐜 鍑虹増鏃堕棿 2006-07-01](https://item.jd.com/10155343.html) -6.4 鍑芥暟鐨勫弬鏁 +[Linux 鍐呮牳鍒嗘瀽鍙婇珮绾х紪绋嬶紙鎺ㄨ崘 PC 闃呰锛 鍑虹増鏃堕棿 2006-07-01](https://e.jd.com/30093200.html) -6.5 鍑芥暟鐨勮繑鍥炲 + **[O'Reilly 娣卞叆鐞嗚В LINUX 鍐呮牳锛堢 3 鐗堬級锛堟兜鐩 2.6 鐗堬級 鍑虹増鏃堕棿 2008-01-01](https://item.jd.com/10100237.html)** -6.6 鍥為【 +[璁$畻鏈虹瀛︿笌鎶鏈郴鍒楁暀鏉 Linux鍘熺悊涓庡簲鐢 鍑虹増鏃堕棿 2008-03-01](https://item.jd.com/10158748.html) -6.7 鏈珷灏忕粨 +[Linux 涓 TCP/IP 鍗忚瀹炵幇鍙婂祵鍏ュ紡搴旂敤 鍑虹増鏃堕棿 2008-07-01](https://item.jd.com/10251774.html) -绗7绔 鍙橀噺鍦ㄥ唴瀛樹腑鐨勪綅缃拰璁块棶鏂瑰紡 +[楂樼瓑瀛︽牎璁$畻鏈轰笓涓氭暀鏉愮簿閫 璁$畻鏈哄師鐞 寰瀷璁$畻鏈烘搷浣滅郴缁熷熀纭 鍩轰簬Linux/i386 鍑虹増鏃堕棿 2008-07-01](https://item.jd.com/10399355.html) -7.1 鍏ㄥ眬鍙橀噺鍜屽眬閮ㄥ彉閲忕殑鍖哄埆 +[楂樼瓑瀛︽牎鐢靛瓙涓庤兘淇$被涓撲笟 鍗佷竴浜 瑙勫垝鏁欐潗 璁$畻鏈烘搷浣滅郴缁熷師鐞 Linux 瀹炰緥鍒嗘瀽 鍑虹増鏃堕棿 2008-09-01](https://item.jd.com/10215508.html) -7.2 灞閮ㄩ潤鎬佸彉閲忕殑宸ヤ綔鏂瑰紡 +[Linux 鎿嶄綔绯荤粺鍒嗘瀽涓庡疄璺 鍑虹増鏃堕棿 2008-11-01](https://item.jd.com/10156475.html) -7.3 鍫嗗彉閲 +[Linux 2.6 鍐呮牳鏍囧噯鏁欑▼锛堥檮鍏夌洏 1 寮狅級 鍑虹増鏃堕棿 2008-11-01](https://item.jd.com/10062983.html) -7.4 鏈珷灏忕粨 + **[Linux 鍐呮牳瀹屽叏鍓栨瀽 鍩轰簬 0.12 鍐呮牳 鍑虹増鏃堕棿 2009-01-01](https://item.jd.com/10058764.html)** -绗8绔 鏁扮粍鍜屾寚閽堢殑瀵诲潃 +[Linux 鎿嶄綔绯荤粺瀹為獙鏁欑▼ 鍑虹増鏃堕棿 2009-02-01](https://e.jd.com/30459853.html) -8.1 鏁扮粍鍦ㄥ嚱鏁板唴 +[楂樼瓑瀛︽牎璁$畻鏈哄疄璺垫暀瀛︾郴鍒楁暀鏉 Linux 鎿嶄綔绯荤粺瀹為獙鏁欑▼ 鍑虹増鏃堕棿 2009-04-01](https://item.jd.com/10945531.html) -8.2 鏁扮粍浣滀负鍙傛暟 +[Linux 鎿嶄綔绯荤粺鍘熺悊涓庡簲鐢 鍑虹増鏃堕棿 2009-04-01](https://item.jd.com/11631584.html) -8.3 鏁扮粍浣滀负杩斿洖鍊 +[娣卞叆鐞嗚В Linux 缃戠粶鎶鏈唴骞 鍑虹増鏃堕棿 2009-06-01](https://item.jd.com/10100456.html) -8.4 涓嬫爣瀵诲潃鍜屾寚閽堝鍧 +[鐙緹韫婂緞鍝佸唴鏍 Linux 鍐呮牳婧愪唬鐮佸璇伙紙鎺ㄨ崘 PC 闃呰锛夊嚭鐗堟椂闂 2009-08-01](https://e.jd.com/30093074.html) -8.5 澶氱淮鏁扮粍 +[娣卞叆娴呭嚭 Linux TCP/IP 鍗忚鏍 鍑虹増鏃堕棿 2010-01-01](https://item.jd.com/12632209.html) -8.6 瀛樻斁鎸囬拡绫诲瀷鏁版嵁鐨勬暟缁 +[Linux 鍐呮牳缃戠粶鏍堟簮浠g爜鎯呮櫙鍒嗘瀽 鍑虹増骞 2010-1](https://book.douban.com/subject/4212924/) -8.7 鎸囧悜鏁扮粍鐨勬寚閽堝彉閲 +[杩借釜Linux TCP/IP 浠g爜杩愯 鍩轰簬 2.6 鍐呮牳锛堥檮 CD-ROM 鍏夌洏 1 寮狅級 鍑虹増鏃堕棿 2010-04-01](https://item.jd.com/10003924.html#none) -8.8 鍑芥暟鎸囬拡 + **[Linux 浣撶郴涓庣紪绋 鍩轰簬 Linux 0.01 鐗堟湰 21 涓栫邯杞欢宸ョ▼甯堣鍒掓暀鏉 鍑虹増鏃堕棿 2010-04-01](https://item.jd.com/10307446.html)** -8.9 鏈珷灏忕粨 +[O'Reilly Linux 鍐呮牳鎶鏈墜鍐 [Linux Kernel in a Nutsbell] 鍑虹増鏃堕棿 2010-06-01](https://item.jd.com/10100635.html) -绗9绔 缁撴瀯浣撳拰绫 +[娣卞叆 Linux 鍐呮牳鏋舵瀯 鍑虹増鏃堕棿 2010-06-01](https://e.jd.com/30137691.html) -9.1 瀵硅薄鐨勫唴瀛樺竷灞 +[Linux 鍐呮牳淇偧涔嬮亾 鍑虹増鏃堕棿 2010-07-01](https://item.jd.com/10064410.html) -9.2 this鎸囬拡 +[Linux 缃戠粶鍐呮牳鍒嗘瀽涓庡紑鍙 鍑虹増骞 2010-8](https://item.jd.com/10064410.html) -9.3 闈欐佹暟鎹垚鍛 +[鎿嶄綔绯荤粺瀹為獙鏁欑▼鍙 Linux 鍜 Windows 绯荤粺璋冪敤缂栫▼ 璁$畻鏈鸿绋嬭璁′笌缁煎悎瀹炶返瑙勫垝鏁欐潗 鍑虹増鏃堕棿 2010-09-01](https://item.jd.com/11335438.html) -9.4 瀵硅薄浣滀负鍑芥暟鍙傛暟 +[Linux 鍐呮牳婧愮爜鍓栨瀽 TCP/IP 瀹炵幇锛堝瑁呬笂涓嬪唽锛夊嚭鐗堟椂闂 2011-01-01](https://item.jd.com/10490677.html) -9.5 瀵硅薄浣滀负杩斿洖鍊 +[Linux 鍐呮牳璁捐涓庡疄鐜帮紙鍘熶功绗 3 鐗堬級 鍑虹増鏃堕棿 2011-05-01](https://item.jd.com/10664953.html) -9.6 鏈珷灏忕粨 +[宓屽叆寮 Linux 缃戠粶浣撶郴缁撴瀯璁捐涓 TCP/IP 鍗忚鏍 鍑虹増骞 2011-05](https://book.douban.com/subject/6116393/) -绗10绔 鍏充簬鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟 +[Linux 鍐呮牳缂栫▼ 鍑虹増骞 2011-5](https://book.douban.com/subject/6387052/) -10.1 鏋勯犲嚱鏁扮殑鍑虹幇鏃舵満 +[瀛樺偍鎶鏈師鐞嗗垎鏋 鍩轰簬 Linux 2.6 鍐呮牳婧愪唬鐮 鍑虹増鏃堕棿 2011-09-01](https://item.jd.com/10830117.html) -10.2 姣忎釜瀵硅薄閮芥湁榛樿鐨勬瀯閫犲嚱鏁板悧 +[Linux 鍐呮牳娉ㄩ噴 鍑虹増鏃堕棿 2011-12-01](https://item.jd.com/10883042.html) -10.3 鏋愭瀯鍑芥暟鐨勫嚭鐜版椂鏈 +[Linux 鎿嶄綔绯荤粺鍘熺悊涓庡簲鐢紙绗 2 鐗堬級 鍑虹増鏃堕棿 2012-01-01](https://item.jd.com/12285169.html) -10.4 鏈珷灏忕粨 +[娣卞叆 Linux 璁惧椹卞姩绋嬪簭鍐呮牳鏈哄埗 鍑虹増鏃堕棿 2012-01-01](https://e.jd.com/30150086.html) -绗11绔 鍏充簬铏氬嚱鏁 +[Linux 鍘熺悊涓庣粨鏋 鍑虹増鏃堕棿 2012-02-01](https://item.jd.com/10970600.html) -11.1 铏氬嚱鏁扮殑鏈哄埗 +[O'Reilly 绮惧搧鍥句功绯诲垪 Linux鍐呮牳绮鹃珦 绮鹃 Linux 鍐呮牳蹇呬細鐨 75 涓粷鎶 鍑虹増鏃堕棿 2012-02-01](https://item.jd.com/11185075.html) -11.2 铏氬嚱鏁扮殑璇嗗埆 +[Linux 閭d簺浜嬪効涔嬫垜鏄 USB锛堢 2 鐗堬級 鍑虹増鏃堕棿 2012-03-01](https://item.jd.com/10950780.html) -11.3 鏈珷灏忕粨 +[Linux 鍐呮牳鍒嗘瀽涓庨珮绾ф暀绋 鍑虹増骞 2012-8](https://book.douban.com/subject/19898484/) -绗12绔 浠庡唴瀛樿搴︾湅缁ф壙鍜屽閲嶇户鎵 +[Linux 鍐呮牳绮炬瀽锛堥檮 CD 鍏夌洏 1 寮狅級 鍑虹増鏃堕棿 2013-02-01](https://item.jd.com/11189135.html) -12.1 璇嗗埆绫诲拰绫讳箣闂寸殑鍏崇郴 +[21 涓栫邯楂樼瓑瀛︽牎瑙勫垝鏁欐潗 璁$畻鏈虹瀛︿笌鎶鏈 鎿嶄綔绯荤粺鍘熺悊鍙婂簲鐢紙Linux锛 鍑虹増鏃堕棿 2013-04-01](https://item.jd.com/11215730.html) -12.2 澶氶噸缁ф壙 +[Linux 鍐呮牳璁捐鐨勮壓鏈 鍥捐В Linux 鎿嶄綔绯荤粺鏋舵瀯璁捐涓庡疄鐜板師鐞嗭紙绗 2 鐗堬級 鍑虹増鏃堕棿 2013-05-01](https://item.jd.com/11243705.html) -12.3 铏氬熀绫 + **[娣卞害鎺㈢储 Linux 鎿嶄綔绯荤粺 绯荤粺鏋勫缓鍜屽師鐞嗚В鏋 鍑虹増鏃堕棿 2013-10-08](https://e.jd.com/30189526.html)** -12.4 鑿卞舰缁ф壙 +[Linux 鍐呮牳鎺㈢ 娣卞叆瑙f瀽鏂囦欢绯荤粺鍜岃澶囬┍鍔ㄧ殑鏋舵瀯涓庤璁 鍑虹増鏃堕棿 2013-12-01](https://item.jd.com/11370217.html) -12.5 鏈珷灏忕粨 +[鎿嶄綔绯荤粺鍘熺悊涓 Linux 瀹炰緥璁捐锛堢 2 鐗堬級 鍑虹増鏃堕棿 2014-06-01](https://e.jd.com/30467835.html) -绗13绔 寮傚父澶勭悊 +[璁$畻鏈烘搷浣滅郴缁熷疄楠屾寚瀵 (Linux 鐗) (鍥藉绮惧搧璇剧▼閰嶅瀹為獙鏁欐潗 鍥藉绮惧搧璧勬簮鍏变韩璇剧▼閰嶅瀹為獙鏁欐潗) 鍑虹増鏃堕棿 2014-07-01](https://item.jd.com/11506839.html) -13.1 寮傚父澶勭悊鐨勭浉鍏崇煡璇 + **[绮鹃 Linux 鍐呮牳缃戠粶 鍑虹増鏃堕棿 2015-06-01](https://item.jd.com/11713925.html)** -13.2 寮傚父绫诲瀷涓哄熀鏈暟鎹被鍨嬬殑澶勭悊娴佺▼ +[鎿嶄綔绯荤粺鍘熺悊涓庡疄璺垫暀绋嬶紙绗 2 鐗堬級璁$畻鏈虹郴鍒楁暀鏉 鍑虹増鏃堕棿 2015-08-01](https://item.jd.com/11778467.html) -13.3 寮傚父绫诲瀷涓哄璞$殑澶勭悊娴佺▼ +[娣卞叆鐞嗚В Linux 椹卞姩绋嬪簭璁捐 鍑虹増鏃堕棿 2015-11-01](https://e.jd.com/30285377.html) -13.4 璇嗗埆寮傚父澶勭悊 +[鎿嶄綔绯荤粺鍘熺悊涓 Linux 瀹炶返鏁欑▼ 鍑虹増鏃堕棿 2016-01-01](https://e.jd.com/30386613.html) -13.5 鏈珷灏忕粨 +[绮鹃 Linux 璁惧椹卞姩绋嬪簭寮鍙 鍑虹増鏃堕棿 2016-04-01](https://e.jd.com/30393021.html) -澶╀功澶滆锛氫粠姹囩紪璇█鍒癢indows鍐呮牳缂栫▼ +[鎿嶄綔绯荤粺瀹為獙鎸囧 鍩轰簬 Linux 鍐呮牳锛堢 3 鐗堬級 鍑虹増鏃堕棿 2016-07-01](https://item.jd.com/12007400.html) -鍐呭绠浠 +[Linux 鍐呮牳 API 瀹屽叏鍙傝冩墜鍐岋紙绗 2 鐗堬級 鍑虹増鏃堕棿 2016-10-01](https://e.jd.com/30469199.html) -鍓嶈█ +[Linux 鎶鏈唴骞 鍑虹増鏃堕棿 2016-12-01](https://item.jd.com/12086406.html) -鍏ユ墜绡 鐔熸倝姹囩紪 +[娣卞叆 Linux 鍐呮牳鏋舵瀯涓庡簳灞傚師鐞 鍑虹増鏃堕棿 2017-11-01](https://item.jd.com/12233973.html) -绗1绔 姹囩紪鎸囦护涓嶤璇█ +[鎿嶄綔绯荤粺鍘熺悊鍙 Linux 鍐呮牳鍒嗘瀽(绗 2 鐗堬級21 涓栫邯楂樼瓑瀛︽牎瑙勫垝鏁欐潗 璁$畻鏈虹瀛︿笌鎶鏈 鍑虹増鏃堕棿 2018-08-01](https://item.jd.com/12420801.html) -1.1 涓婃満寤虹珛绗竴涓伐绋 +[Linux 璁惧椹卞姩绋嬪簭寮鍙戯紙褰卞嵃鐗 鑻辨枃鐗堬級 [Linux Device Drivers Development] 鍑虹増鏃堕棿 2018-08-01](https://item.jd.com/12407112.html) -1.2 绠瑕佸涔犲父鐢ㄧ殑姹囩紪鎸囦护 +[2016 鍚屾祹澶у鏈鏁欐潗鍑虹増鍩洪噾 Linux 鎿嶄綔绯荤粺瀹炵幇鍘熺悊 鍑虹増鏃堕棿 2018-09-01](https://item.jd.com/12466764.html) -1.3 C鍑芥暟鐨勫弬鏁颁紶閫掕繃绋 +[搴栦竵瑙g墰 Linux 鍐呮牳鍒嗘瀽 鍑虹増鏃堕棿 2018-10-01](https://item.jd.com/12449500.html) -绗2绔 C璇█鐨勬祦绋嬪拰澶勭悊 +[鎿嶄綔绯荤粺鍘熺悊涓庡簲鐢紙Linux锛 鍑虹増鏃堕棿 2018-12-01](https://item.jd.com/12706440.html) -2.1 C璇█鐨勫惊鐜弽姹囩紪 +[鎿嶄綔绯荤粺瀹為獙鎸囧涓庝範棰樿В鏋 鍑虹増鏃堕棿 2019-10-01](https://item.jd.com/12817694.html) -2.2 C璇█鍒ゆ柇涓庡垎鏀殑鍙嶆眹缂 +[绮鹃 Linux 鍐呮牳 鏅鸿兘璁惧寮鍙戞牳蹇冩妧鏈 鍑虹増鏃堕棿 2020-01-01](https://e.jd.com/30612571.html) -2.3 C璇█鐨勬暟缁勪笌缁撴瀯 +[鐢ㄨ姱鎺㈡牳 鍩轰簬榫欒姱鐨 Linux 鍐呮牳鎺㈢储瑙f瀽 鍑虹増鏃堕棿 2020-08-01](https://item.jd.com/12936362.html) -2.4 C璇█鐨勫叡鐢ㄤ綋鍜屾灇涓剧被鍨 +[Linux 鍐呮牳瑙傛祴鎶鏈 BPF [Linux Observability with BPF] 鍑虹増鏃堕棿 2020-08-01](https://item.jd.com/12939760.html) -绗3绔 缁冧範鍙嶆眹缂朇璇█绋嬪簭 +[Linux Kernel Development Cookbook 鍑虹増鏃堕棿 2021-01](https://www.packtpub.com/product/linux-kernel-development-cookbook/9781789953435) -3.1 绠楁硶鐨勫弽姹囩紪 +[娣卞害鎺㈢储 Linux 绯荤粺铏氭嫙鍖 鍘熺悊涓庡疄鐜 鍑虹増鏃堕棿 2020-11-01](https://item.jd.com/12742101.html) -3.2 鍙戣鐗堢殑鍙嶆眹缂 +## JVM 鍓嶄笘浠婄敓 -3.3 姹囩紪鍙岰璇█缁冧範 +### JAVA 1.0 浠e彿 Oak锛堟鏍戯級 -瀹屽叏鎵嬪唽涓涗功锛欳++鍙傝冨ぇ鍏紙绗4鐗堬級 [C++: The Complete Reference] 鍑虹増鏃堕棿锛2003-01-01 +#### 1996-01-23 鍙戣 -C++璁捐鏂版濈淮锛氭硾鍨嬬紪绋嬩笌璁捐妯″紡涔嬪簲鐢 鍑虹増鏃堕棿锛2003-03-01 +### JAVA 1.1 -C++ STL绋嬪簭鍛樺紑鍙戞寚鍗楋紙闄勫厜鐩橈級 鍑虹増鏃堕棿锛2003-04-01 +#### 1997-02-19 鍙戣 涓昏鏇存柊鍐呭 -娣卞叆C++绯诲垪锛氭硾鍨嬬紪绋嬩笌STL 鍑虹増鏃堕棿锛2003-04-01 +寮曞叆 JDBC -C++骞惰涓庡垎甯冨紡缂栫▼ [Parallel and Distributed Programming Using C++] 鍑虹増鏃堕棿锛2004-01-01 +娣诲姞鍐呴儴绫绘敮鎸 -C++缃戠粶缂栫▼锛屽嵎 2 锛氬熀浜嶢CE鍜屾鏋剁殑绯荤粺鍖栧鐢 鍑虹増鏃堕棿锛2004-01-01 +寮曞叆 JAVA BEAN -ACE绋嬪簭鍛樻寚鍗楋細缃戠粶涓庣郴缁熺紪绋嬬殑瀹炵敤璁捐妯″紡锛堥檮鍏夌洏锛 [The ACE Programmers Guide] 鍑虹増鏃堕棿锛2004-01-01 +寮曞叆 RMI -C++缂栫▼鑹烘湳 鍑虹増鏃堕棿锛2005-04-01 +寮曞叆鍙嶅皠 -绮鹃歄racle10g Pro*C/C++缂栫▼ 鍑虹増鏃堕棿锛2005-10-01 +### JAVA 1.2 浠e彿 Playground锛堟搷鍦猴級 -Effective C++涓枃鐗堬細鏀瑰杽绋嬪簭涓庤璁$殑55涓叿浣撳仛娉曪紙绗3鐗堬級 鍑虹増鏃堕棿锛2006-07-01 +#### 1998-12-8 鍙戣 涓昏鏇存柊鍐呭 -C++缃戠粶缂栫▼锛屽嵎1锛氳繍鐢ˋCE鍜屾ā寮忔秷闄ゅ鏉傛 鍑虹増鏃堕棿锛2007-05-01 +寮曞叆闆嗗悎妗嗘灦 -[鎸夐渶鍗板埛]C++ STL寮鍙戞妧鏈寮 鍑虹増鏃堕棿锛2007-08-01 +瀵瑰瓧绗︿覆甯搁噺鍋氬唴瀛樻槧灏 -C++娌夋濆綍锛歊uminations on C++ 鍑虹増鏃堕棿锛2008-01-01 +寮曞叆 JIT锛圝ust In Time锛夌紪璇戝櫒 -C鍜孋++缁忓吀钁椾綔锛欳涓撳缂栫▼Expert C Programming Deep C Secrets 鍑虹増鏃堕棿锛2008-02-01 +寮曞叆鎵撳寘鏂囦欢鏁板瓧绛惧悕 -C鍜孋++缁忓吀钁椾綔锛欳闄烽槺涓庣己闄 [C Traps and Pitfalls] 鍑虹増鏃堕棿锛2008-02-01 +寮曞叆鎺у埗鎺堟潈璁块棶绯荤粺璧勬簮绛栫暐宸ュ叿 -C鍜孋++缁忓吀钁椾綔锛欳鍜屾寚閽 POINTERS ON C 鍑虹増鏃堕棿锛2008-04-01 +寮曞叆 JFC锛圝ava Foundation Classes锛 鍖呮嫭 Swing 1.0 鎷栨斁鍜 Java 2D 绫诲簱 -Professional Multicore Programming: Design And Implementation For C++ Developers 鍑虹増鏃堕棿锛2008-08-22 +寮曞叆 Java 鎻掍欢 -浣犲繀椤荤煡閬撶殑495涓狢璇█闂 鍑虹増鏃堕棿锛2009-02-01 +JDBC 涓紩鍏ュ彲婊氬姩缁撴灉闆 BLOB CLOB 鎵归噺鏇存柊鍜岀敤鎴疯嚜瀹氫箟绫诲瀷 -浠g爜鎻锛氫粠C/C++鐨勮搴︽帰绉樿绠楁満绯荤粺锛堟帹鑽怭C闃呰锛 鍑虹増鏃堕棿锛2009-09-01 +Applet 涓坊鍔犲0闊虫敮鎸 -C++缂栫▼瑙勮寖锛101鏉¤鍒欍佸噯鍒欎笌鏈浣冲疄璺 鍑虹増鏃堕棿锛2010-12-01 +### JAVA 1.3 浠e彿 Kestrel锛堢孩闅硷級 -More Exceptional C++锛40涓柊鐨勫伐绋嬮毦棰樸佺紪绋嬬枒闂強瑙e喅鏂规硶锛堜腑鏂囩増锛 鍑虹増鏃堕棿锛2011-01-01 +#### 2000-5-8 鍙戝竷 涓昏鏇存柊鍐呭 -鎻愰珮C++鎬ц兘鐨勭紪绋嬫妧鏈 鍑虹増鏃堕棿锛2011-03-01 +寮曞叆 Java Sound API -鐧界洅娴嬭瘯涔嬮亾锛欳++test 鍑虹増鏃堕棿锛2011-04-01 +寮曞叆 jar 鏂囦欢绱㈠紩 -C++缂栫▼鎬濇兂锛堜袱鍗峰悎璁㈡湰锛 鍑虹増鏃堕棿锛2011-07-01 +瀵 Java 鍚勬柟闈㈠浜嗗ぇ閲忎紭鍖栧拰澧炲己 -Professional C++, Second Edition 鍑虹増鏃堕棿锛2011-09-16 +Java Platform Debugger Architecture 鐢ㄤ簬 Java 璋冭瘯鐨勫钩鍙 -缂栧啓楂樿川閲忎唬鐮侊細鏀瑰杽C++绋嬪簭鐨150涓缓璁 鍑虹増鏃堕棿锛2011-12-01 +JAVA 1.4 浠e彿 Merlin锛堥毤锛 -Applied C++涓枃鐗 鍑虹増鏃堕棿锛2012-01-01 +#### 2004-2-6 鍙戝竷锛堥娆″湪 JCP 涓嬪彂琛岋級 涓昏鏇存柊鍐呭 -娣卞害鎺㈢储C++瀵硅薄妯″瀷 鍑虹増鏃堕棿锛2012-01-01 +娣诲姞 XML 澶勭悊 -Imperfect C++锛堜腑鏂囩増锛 [Imperfect C++: Practical Solutions for Real-Life Programming] 鍑虹増鏃堕棿锛2012-06-01 +娣诲姞 Java 鎵撳嵃鏈嶅姟锛圝ava Print Service API锛 -C++浠g爜璁捐涓庨噸鐢 [Designing and Coding Reusable C++] 鍑虹増鏃堕棿锛2012-06-01 +寮曞叆 Logging API -ACE鎶鏈唴骞曪細娣卞叆瑙f瀽ACE鏋舵瀯璁捐涓庡疄鐜板師鐞 鍑虹増鏃堕棿锛2012-07-09 +寮曞叆 Java Web Start -楂樿川閲忕▼搴忚璁℃寚鍗楋細C++/C璇█ 鍑虹増鏃堕棿锛2012-10-01 +寮曞叆 JDBC 3.0 API -C++缂栫▼璋冭瘯绉樼瑘 鍑虹増鏃堕棿锛2013-01-01 +寮曞叆鏂█ -Linux澶氱嚎绋嬫湇鍔$缂栫▼ 浣跨敤muduo C++缃戠粶搴 鍑虹増鏃堕棿锛2013-01-01 +寮曞叆 Preferences API -C鍜孋++瀹炲姟绮鹃夛細C++ Templates涓枃鐗 鍑虹増鏃堕棿锛2013-04-01 +寮曞叆閾惧紡寮傚父澶勭悊 -瀹炴垬绯诲垪锛氭繁鍏ュ疄璺礐++妯℃澘缂栫▼ 鍑虹増鏃堕棿锛2013-06-01 +鏀寔 IPV6 -鍍忚绠楁満绉戝瀹朵竴鏍锋濊僀++ 鍑虹増鏃堕棿锛2013-06-01 +鏀寔姝e垯琛ㄨ揪寮 -鍗庣珷绉戞妧锛氭繁鍏ョ悊瑙++11锛欳++11鏂扮壒鎬цВ鏋愪笌搴旂敤 鍑虹増鏃堕棿锛2013-06-01 +寮曞叆 Image I/O API -Essential C++涓枃鐗 鍑虹増鏃堕棿锛2013-08-01 +NIO 闈為樆濉炵殑 IO 浼樺寲 Java 鐨 IO 璇诲彇 -鍥剧伒绋嬪簭璁捐涓涗功锛欳++ API璁捐 [API Design for C++] 鍑虹増鏃堕棿锛2013-08-01 +### JDK 5.0 浠e彿 Tiger锛堣佽檸锛 鏈夐噸澶ф敼鍔 -浠庣己闄蜂腑瀛︿範C/C++ 鍑虹増鏃堕棿锛2013-09-01 +#### 2004-9-30 鍙戝竷 涓昏鏇存柊鍐呭 -鍗庣珷绋嬪簭鍛樹功搴擄細C鍜孋++瀹夊叏缂栫爜锛堝師涔︾2鐗堬級 鍑虹増鏃堕棿锛2014-01-01 +寮曞叆娉涘瀷 -缂栫爜鐨勬硶鍒欙細C++绋嬪簭鍛樹笉鍙笉鐭ョ殑101鏉″疄鐢ㄧ粡楠 鍑虹増鏃堕棿锛2014-01-01 +For-Each 寰幆 澧炲己寰幆 鍙娇鐢ㄨ凯浠f柟寮 -C++ For Dummies, 7th Edition 鍑虹増鏃堕棿锛2014-01-01 +鑷姩瑁呯涓庤嚜鍔ㄦ媶绠 -娣卞叆鐞嗚ВC鎸囬拡锛圕/C++绋嬪簭鍛樿繘闃跺繀澶囷紝閫忓交鐞嗚В鎸囬拡涓庡唴瀛樼鐞嗭級 鍑虹増鏃堕棿锛2014-02-01 +寮曞叆绫诲瀷瀹夊叏鐨勬灇涓 -C鏍囧噯搴擄紙鑻辨枃鐗堬級 鍑虹増鏃堕棿锛2014-04-01 +寮曞叆鍙彉鍙傛暟 -娣卞叆瀹炶返Boost锛欱oost绋嬪簭搴撳紑鍙戠殑94涓绗 鍑虹増鏃堕棿锛2014-04-21 +娣诲姞闈欐佸紩鍏 -C++ All-in-One For Dummies, 3rd Edition 鍑虹増鏃堕棿锛2014-08-08 +寮曞叆娉ㄨВ -澶ц妯++绋嬪簭璁捐 鍑虹増鏃堕棿锛2014-10-01 +寮曞叆 Instrumentation -鍗庣珷鍘熷垱绮惧搧路娣卞叆搴旂敤C++11锛氫唬鐮佷紭鍖栦笌宸ョ▼绾у簲鐢 鍑虹増鏃堕棿锛2015-05-01 +鎻愪緵浜 java.util.concurrent 骞跺彂鍖 -C++ STL鍩虹鍙婂簲鐢紙绗2鐗堬級/涓浗楂樼瓑瀛︽牎璁$畻鏈虹瀛︿笌鎶鏈笓涓 搴旂敤鍨 瑙勫垝鏁欐潗 鍑虹増鏃堕棿锛2015-05-01 +### JDK 6 浠e彿 Mustang锛堥噹椹級 -C/C++鎶鏈笡涔︼細楂樼骇C/C++缂栬瘧鎶鏈 [Advanced C and C++ Compiling] 鍑虹増鏃堕棿锛2015-05-01 +#### 2006-12-11 鍙戝竷 涓昏鏇存柊鍐呭 -C++鏍囧噯搴擄紙绗2鐗堬級 鍑虹増鏃堕棿锛2015-06-01 +寮曞叆浜嗕竴涓敮鎸佽剼鏈紩鎿庣殑鏂版鏋讹紙鍩轰簬 Mozilla Rhino 鐨 JavaScript 鑴氭湰寮曟搸锛 -C++骞跺彂缂栫▼瀹炴垬 鍑虹増鏃堕棿锛2015-06-01 +UI 鐨勫寮 -Learning Boost C++ Libraries 鍑虹増鏃堕棿锛2015-07-31 +瀵 WebService 鏀寔鐨勫寮猴紙JAX-WS 2.0 鍜 JAXB 2.0锛 -鍐欑粰澶у繖浜虹湅鐨凜++ 鍑虹増鏃堕棿锛2015-08-01 +寮曞叆 JDBC 4.0 API -C瀹夊叏缂栫爜鏍囧噯锛氬紑鍙戝畨鍏ㄣ佸彲闈犮佺ǔ鍥虹郴缁熺殑98鏉¤鍒欙紙鍘熶功绗2鐗堬級 鍑虹増鏃堕棿锛2015-08-01 +寮曞叆 Java Compiler API -鏈鏂癈/C++鍑芥暟涓庣畻娉曢熸煡閫熺敤澶ц緸鍏革紙闄勫厜鐩橈級 鍑虹増鏃堕棿锛2015-09-01 +閫氱敤鐨 Annotations 鏀寔 -Boost.Asio C++ Network Programming - Second Edition 鍑虹増鏃堕棿锛2015-09-16 +### JDK 7 浠e彿 Dolphin锛堟捣璞氾級 -澶ч亾鑷崇畝 C++ STL锛堟爣鍑嗘ā鏉垮簱锛夌簿瑙 鍑虹増鏃堕棿锛2015-11-01 +#### 2011-07-28 鍙戝竷 杩欐槸 sun 琚 oracle 鏀惰喘锛2009 骞 4 鏈堬級鍚庣殑绗竴涓増鏈 涓昏鏇存柊鍐呭 -C++娉涘瀷锛歋TL鍘熺悊鍜屽簲鐢 鍑虹増鏃堕棿锛2015-12-01 +switch 璇彞鍧椾腑鍏佽浠ュ瓧绗︿覆浣滀负鍒嗘敮鏉′欢 -Boost.Asio C++ Network Programming Cookbook 鍑虹増鏃堕棿锛2016-01-25 +鍦ㄥ垱寤烘硾鍨嬪璞℃椂搴旂敤绫诲瀷鎺ㄦ柇 姣斿浣犱箣鍓嶇増鏈娇鐢ㄦ硾鍨嬬被鍨嬫椂杩欐牱鍐 ArrayList userList= new ArrayList(); 杩欎釜鐗堟湰鍙渶瑕佽繖鏍峰啓 ArrayList userList= new ArrayList<>(); 涔熷嵆鏄悗闈竴涓皷鎷彿鍐呯殑绫诲瀷 JVM 甯垜浠嚜鍔ㄧ被鍨嬪垽鏂ˉ鍏ㄤ簡 -C++缂栫▼鍓栨瀽 闂 鏂规鍜岃璁″噯鍒 鍑虹増鏃堕棿锛2016-03-01 +鍦ㄤ竴涓鍙ュ潡涓崟鑾峰绉嶅紓甯 -C++澶氱嚎绋嬬紪绋嬪疄鎴 鍑虹増鏃堕棿锛2016-04-01 +娣诲姞 try-with-resources 璇硶鏀寔 浣跨敤鏂囦欢鎿嶄綔鍚庝笉鐢ㄥ啀鏄剧ず鎵ц close 浜 -C++瑕嗚緳褰 鍑虹増鏃堕棿锛2016-04-01 +鏀寔鍔ㄦ佽瑷 -C++蹇呯煡蹇呬細 鍑虹増鏃堕棿锛2016-04-01 +JSR 203 NIO 2.0 AIO 鏂 I/O 鏂囦欢绯荤粺 澧炲姞澶氶噸鏂囦欢鐨勬敮鎸 鏂囦欢鍘熷鏁版嵁鍜岀鍙烽摼鎺 鏀寔 ZIP 鏂囦欢鎿嶄綔 -C楂樼骇缂栫▼锛氬熀浜庢ā鍧楀寲璁捐鎬濇兂鐨凜璇█寮鍙 鍑虹増鏃堕棿锛2016-05-01 +JDBC 瑙勮寖鐗堟湰鍗囩骇涓 JDBC 4.1 -C鎸囬拡锛氬熀鏈蹇点佹牳蹇冩妧鏈強鏈浣冲疄璺 鍑虹増鏃堕棿锛2016-05-01 +寮曞叆 Fork/Join 妗嗘灦锛岀敤浜庡苟琛屾墽琛屼换鍔 -鍚庡彴寮鍙戯細鏍稿績鎶鏈笌搴旂敤瀹炶返 鍑虹増鏃堕棿锛2016-08-01 +鏀寔甯︿笅鍒掔嚎鐨勬暟鍊 濡 int a = 100000000; 0 澶涓嶄究浜庝汉闃呰 杩欎釜鐗堟湰鏀寔杩欐牱鍐 int a = 100_000_000 杩欐牱灏卞鏁板间竴鐩簡鐒朵簡 -鐮佸啘路缁忓吀C++锛堢26鏈燂級 鍑虹増鏃堕棿锛2016-12-22 +Swing 缁勪欢澧炲己锛圝Layer Nimbus Look Feel鈥︼級鍙傝 -C++绋嬪簭璁捐瀹炶返涓庢妧宸э細娴嬭瘯椹卞姩寮鍙 鍑虹増鏃堕棿锛2017-01-01 +### JDK 8 -C++鏍囧噯妯℃澘搴撶紪绋嬪疄鎴 鍑虹増鏃堕棿锛2017-01-01 +#### 2014-3-19 鍙戝竷 oracle 鍘熻鍒 2013 骞村彂甯 鐢变簬瀹夊叏鎬ч棶棰樹袱娆¤烦绁 鏄嚜 JAVA 5 浠ユ潵鏈鍏烽潻鍛芥х殑鐗堟湰 涓昏鏇存柊鍐呭 -C++ STL鏍囧噯绋嬪簭搴撳紑鍙戞寚鍗楋紙绗2鐗堬級 鍑虹増鏃堕棿锛2017-01-01 +鎺ュ彛鏀硅繘 鎺ュ彛灞呯劧鍙互瀹氫箟榛樿鏂规硶瀹炵幇鍜岄潤鎬佹柟娉曚簡 -C++17 STL Cookbook 鍑虹増鏃堕棿锛2017-06-28 +寮曞叆鍑芥暟寮忔帴鍙 -Boost C++ Application Development Cookbook - Second Edition 鍑虹増鏃堕棿锛2017-08-30 +寮曞叆 Lambda 琛ㄨ揪寮 -Learning C++ Functional Programming 鍑虹増鏃堕棿锛2017-08-10 +寮曞叆鍏ㄦ柊鐨 Stream API 鎻愪緵浜嗗鍊兼祦杩涜鍑芥暟寮忔搷浣 -Mastering the C++17 STL 鍑虹増鏃堕棿锛2017-09-28 +寮曞叆鏂扮殑 Date-Time API -C++鍏ラ棬缁忓吀锛堢10鐗堬級 鍑虹増鏃堕棿锛2017-11-01 +寮曞叆鏂扮殑 JavaScrpit 寮曟搸 Nashorn -C++璇箟鍜屾ц兘鍒嗘瀽 鍑虹増鏃堕棿锛2017-12-01 +寮曞叆 Base64 绫诲簱 -C++鎬ц兘浼樺寲鎸囧崡 鍑虹増鏃堕棿锛2018-01-01 +寮曞叆骞跺彂鏁扮粍锛坧arallel锛 -C++ High Performance 鍑虹増鏃堕棿锛2018-01-31 +娣诲姞鏂扮殑 Java 宸ュ叿 jjs jdeps -Effective Modern C++(涓枃鐗) 鍑虹増鏃堕棿锛2018-04-01 +Java FX 涓绉嶇敤鍦ㄦ闈㈠紑鍙戦鍩熺殑鎶鏈 -澶氭牳寮傛瀯骞惰璁$畻锛圤penMP4.5C\C++绡囷級/瓒呯畻銆佷簯璁$畻涓庡ぇ鏁版嵁鎶鏈笓涓氭暀绋嬄锋櫘閫氶珮绛夋暀鑲测滃崄涓変簲鈥濊鍒掓暀鏉 鍑虹増鏃堕棿锛2018-04-01 +闈欐侀摼鎺 JNI 绋嬪簭搴 -C/C++瀹炶返杩涢樁涔嬮亾锛氬啓缁欑▼搴忓憳鐪嬬殑缂栫▼涔 鍑虹増鏃堕棿锛2018-05-01 +### JDK 9 -鏂版爣鍑咰++绋嬪簭璁捐 鍑虹増鏃堕棿锛2018-08-01 +#### 2017-9-21 鍙戝竷 -娓呭崕璁$畻鏈哄浘涔﹁瘧涓涳細绮鹃欳++锛堢9鐗堬級 鍑虹増鏃堕棿锛2018-08-01 +妯″潡鍖栵紙jiqsaw锛 -Linux C涓嶤++ 涓绾垮紑鍙戝疄璺 鍑虹増鏃堕棿锛2018-12-01 +浜や簰寮忓懡浠よ锛圝Shell锛 -Hands-On System Programming with C++ 鍑虹増鏃堕棿锛2018-12-26 +榛樿鍨冨溇鍥炴敹鏈熷垏鎹负 G1 -Hands-On Design Patterns with C++ 鍑虹増鏃堕棿锛2019-01-30 +杩涚▼鎿嶄綔鏀硅繘 -C++浠g爜鏁存磥涔嬮亾锛欳++17鍙寔缁蒋浠跺紑鍙戞ā寮忓疄璺 鍑虹増鏃堕棿锛2019-04-01 +绔炰簤閿佹ц兘浼樺寲 -C++楂樼骇缂栫▼(绗4鐗) 鍑虹増鏃堕棿锛2019-04-01 +鍒嗘浠g爜缂撳瓨 -C鎸囬拡鍘熺悊鎻锛氬熀浜庡簳灞傚疄鐜版満鍒 鍑虹増鏃堕棿锛2019-05-01 +浼樺寲瀛楃涓插崰鐢ㄧ┖闂 -鐧借瘽C++涔嬬粌鍔 鍑虹増鏃堕棿锛2019-05-01 +### JDK 10 -C++绋嬪簭璁捐璇█锛堢1-4閮ㄥ垎 濂楄鍏2鍐岋級 鍑虹増鏃堕棿锛2019-06-01 +#### 2018-3-21 鍙戝竷 -C++17鍏ラ棬缁忓吀锛堢5鐗堬級 鍑虹増鏃堕棿锛2019-06-01 +JEP 286 var 灞閮ㄥ彉閲忕被鍨嬫帹鏂 -C Primer Plus 绗6鐗 涓枃鐗 鍑虹増鏃堕棿锛2019-11-01 +JEP 296 灏嗗師鏉ョ敤 Mercurial 绠$悊鐨勪紬澶 JDK 浠撳簱浠g爜 鍚堝苟鍒颁竴涓粨搴撲腑 绠鍖栧紑鍙戝拰绠$悊杩囩▼ -C++鍑芥暟寮忕紪绋 [Functional Programming in C++] 鍑虹増鏃堕棿锛2020-01-01 +JEP 304 缁熶竴鐨勫瀮鍦惧洖鏀舵帴鍙 -Boost绋嬪簭搴撳畬鍏ㄥ紑鍙戞寚鍗楋細娣卞叆C++鈥滃噯鈥濇爣鍑嗗簱锛堢5鐗堬級 鍑虹増鏃堕棿锛2020-06-01 +JEP 307 G1 鍨冨溇鍥炴敹鍣ㄧ殑骞惰瀹屾暣鍨冨溇鍥炴敹 瀹炵幇骞惰鎬ф潵鏀瑰杽鏈鍧忔儏鍐典笅鐨勫欢杩 -C++鏂扮粡鍏 鍑虹増鏃堕棿锛2020-07-01 +JEP 310 搴旂敤绋嬪簭绫绘暟鎹 (AppCDS) 鍏变韩 閫氳繃璺ㄨ繘绋嬪叡浜氱敤绫诲厓鏁版嵁鏉ュ噺灏戝唴瀛樺崰鐢ㄧ┖闂 鍜屽噺灏戝惎鍔ㄦ椂闂 -### Linux 绡 +JEP 312 ThreadLocal 鎻℃墜浜や簰 鍦ㄤ笉杩涘叆鍒板叏灞 JVM 瀹夊叏鐐 (Safepoint) 鐨勬儏鍐典笅 瀵圭嚎绋嬫墽琛屽洖璋 浼樺寲鍙互鍙仠姝㈠崟涓嚎绋 鑰屼笉鏄仠鍏ㄩ儴绾跨▼鎴栦竴涓兘涓嶅仠 -Debug Hacks涓枃鐗 鍑虹増骞: 2011-8 +JEP 313 绉婚櫎 JDK 涓檮甯︾殑 javah 宸ュ叿 鍙互浣跨敤 javac -h 浠f浛 -Linux鍐呮牳瀹夊叏妯″潡娣卞叆鍓栨瀽 鍑虹増鏃堕棿锛2016-12-01 +JEP 314 浣跨敤闄勫姞鐨 Unicode 璇█鏍囪鎵╁睍 -Linux鍐呮牳婧愪唬鐮佸垎鏋 鍑虹増骞: 2000-06 +JEP 317 鑳藉皢鍫嗗唴瀛樺崰鐢ㄥ垎閰嶇粰鐢ㄦ埛鎸囧畾鐨勫鐢ㄥ唴瀛樿澶 -Linux鍐呮牳鍒嗘瀽鍙婂父瑙侀棶棰樿В绛 (骞宠) 鍑虹増骞: 2000-07 +JEP 317 浣跨敤 Graal 鍩轰簬 Java 鐨勭紪璇戝櫒 鍙互棰勫厛鎶 Java 浠g爜缂栬瘧鎴愭湰鍦颁唬鐮佹潵鎻愬崌鏁堣兘 -LINUX鐨勫唴鏍镐笌缂栫▼ 鍑虹増鏃堕棿锛 2000-07-01 +JEP 318 鍦 OpenJDK 涓彁渚涗竴缁勯粯璁ょ殑鏍硅瘉涔﹂鍙戞満鏋勮瘉涔 寮婧愮洰鍓 Oracle 鎻愪緵鐨勭殑 Java SE 鐨勬牴璇佷功 杩欐牱 OpenJDK 瀵瑰紑鍙戜汉鍛樹娇鐢ㄨ捣鏉ユ洿鏂逛究 -Linux鎿嶄綔绯荤粺鍐呮牳鍒嗘瀽 鍑虹増骞: 2000-8 +JEP 322 鍩轰簬鏃堕棿瀹氫箟鐨勫彂甯冪増鏈 鍗充笂杩版彁鍒扮殑鍙戝竷鍛ㄦ湡 鐗堟湰鍙蜂负 $FEATURE.$INTERIM.$UPDATE.$PATCH 鍒嗗埆鏄ぇ鐗堟湰 涓棿鐗堟湰 鍗囩骇鍖呭拰琛ヤ竵鐗堟湰 -LINUX鍐呮牳婧愪唬鐮佹儏鏅垎鏋愶紙涓婂唽锛 鍑虹増鏃堕棿锛2001-01-01 +### JDK 11 -LINUX鍐呮牳婧愪唬鐮佹儏鏅垎鏋愶紙涓嬶級 鍑虹増鏃堕棿锛2001-09-01 +#### 2018-9-25 鍙戝竷 -Linux鍐呮牳2.4鐗堟簮浠g爜鍒嗘瀽澶у叏 鍑虹増骞: 2002-1-1 +瀹樼綉鍏紑鐨 17 涓 JEP锛圝DK Enhancement Proposal 鐗规у寮烘彁璁級 -Linux鍐呮牳婧愪唬鐮 鍑虹増骞: 2002-1-1 +JEP 181 Nest-Based Access Control锛堝熀浜庡祵濂楃殑璁块棶鎺у埗锛 -娣卞叆鍒嗘瀽Linux鍐呮牳婧愪唬鐮 鍑虹増鏃堕棿锛2002-07-01 +JEP 309 Dynamic Class-File Constants锛堝姩鎬佺殑绫绘枃浠跺父閲忥級 -鏅氶珮绛夋暀鑲测滃崄涓浜斺濆浗瀹剁骇瑙勫垝鏁欐潗锛氳竟骞茶竟瀛︼紙LINUX鍐呮牳鎸囧锛 [LEARNING LINUX KERNEL BY PRACTICE] 鍑虹増鏃堕棿锛2002-08-01 +JEP 315 Improve Aarch64 Intrinsics锛堟敼杩 Aarch64 Intrinsics锛 -Linux鍐呮牳鍒嗘瀽涓庡疄渚嬪簲鐢 鍑虹増骞: 2002-9 +JEP 318 Epsilon A No-Op Garbage Collector锛圗psilon 鍨冨溇鍥炴敹鍣 鍙堣绉颁负 No-Op锛堟棤鎿嶄綔锛夊洖鏀跺櫒锛 -鎿嶄綔绯荤粺鏁欑▼锛歀inux瀹炰緥鍒嗘瀽/闈㈠悜21涓栫邯楂樼瓑瀛︽牎璁$畻鏈虹被涓撲笟绯诲垪鏁欐潗 鍑虹増鏃堕棿锛2004-01-01 +JEP 320 Remove the Java EE and CORBA Modules锛堢Щ闄 Java EE 鍜 CORBA 妯″潡 JavaFX 涔熷凡琚Щ闄わ級 -楂樼瓑瀛︽牎璁$畻鏈虹瀛︿笌鎶鏈暀鏉愶細Linux鎿嶄綔绯荤粺鍒嗘瀽鏁欑▼锛堟帹鑽怭C闃呰锛 鍑虹増鏃堕棿锛2004-05-01 +JEP 321 HTTP Client (Standard) -Linux鍐呮牳瀹屽叏娉ㄩ噴 鍑虹増鏃堕棿锛2004-09-01 +JEP 323 Local-Variable Syntax for Lambda Parameters锛堢敤浜 Lambda 鍙傛暟鐨勫眬閮ㄥ彉閲忚娉曪級 -Linux0.01鍐呮牳鍒嗘瀽涓庢搷浣滅郴缁熻璁★紙鍒涢犱綘鑷繁鐨勬搷浣滅郴缁燂級锛堥檮CD鈥擱OM鍏夌洏1寮狅級 鍑虹増鏃堕棿锛2004-10-01 +JEP 324 Key Agreement with Curve25519 and Curve448锛堥噰鐢 Curve25519 鍜 Curve448 绠楁硶瀹炵幇鐨勫瘑閽ュ崗璁級 -鍥藉璁$畻鏈虹瀛︾粡鍏告暀鏉愶細Linux鍐呮牳缂栫▼鎸囧崡锛堢3鐗堬級 鍑虹増鏃堕棿锛2004-11-01 +JEP 327 Unicode 10 -IA-64 Linux鍐呮牳璁捐涓庡疄鐜 鍑虹増骞: 2004-11 +JEP 328 Flight Recorder锛堥琛岃褰曚华锛 -鎿嶄綔绯荤粺锛歀inux 绡/楂樿亴楂樹笓21涓栫邯瑙勫垝鏁欐潗 鍑虹増鏃堕棿锛2005-01-01 +JEP 329 ChaCha20 and Poly1305 Cryptographic Algorithms锛堝疄鐜 ChaCha20 鍜 Poly1305 鍔犲瘑绠楁硶锛 -Linux鎿嶄綔绯荤粺鍐呮牳瀹炰範 鍑虹増骞: 2005-2 +JEP 330 Launch Single-File Source-Code Programs锛堝惎鍔ㄥ崟涓 Java 婧愪唬鐮佹枃浠剁殑绋嬪簭锛 -LInux鍐呮牳鍒嗘瀽鍙婄紪绋 鍑虹増鏃堕棿锛2005-09-01 +JEP 331 Low-Overhead Heap Profiling锛堜綆寮閿鐨勫爢鍒嗛厤閲囨牱鏂规硶锛 -O'Reilly锛歀INUX璁惧椹卞姩绋嬪簭锛堢3鐗堬級 鍑虹増鏃堕棿锛2006-01-01 +JEP 332 Transport Layer Security (TLS) 1.3锛堝 TLS 1.3 鐨勬敮鎸侊級 -Linux缃戠粶浣撶郴缁撴瀯锛歀inux鍐呮牳涓綉缁滃崗璁殑璁捐涓庡疄鐜 鍑虹増鏃堕棿锛2006-07-01 +JEP 333 ZGC A Scalable Low-Latency Garbage Collector (Experimental)锛圸GC 鍙几缂╃殑浣庡欢杩熷瀮鍦惧洖鏀跺櫒 澶勪簬瀹為獙鎬ч樁娈碉級 -Linux鍐呮牳鍒嗘瀽鍙婇珮绾х紪绋嬶紙鎺ㄨ崘PC闃呰锛 鍑虹増鏃堕棿锛2006-07-01 +JEP 335 Deprecate the Nashorn JavaScript Engine锛堝純鐢 Nashorn JavaScript 寮曟搸锛 -O'Reilly锛氭繁鍏ョ悊瑙INUX鍐呮牳锛堢3鐗堬級锛堟兜鐩2.6鐗堬級 鍑虹増鏃堕棿锛2008-01-01 +JEP 336 Deprecate the Pack200 Tools and API锛堝純鐢 Pack200 宸ュ叿鍙婂叾 API锛 -璁$畻鏈虹瀛︿笌鎶鏈郴鍒楁暀鏉愶細Linux鍘熺悊涓庡簲鐢 鍑虹増鏃堕棿锛2008-03-01 +### JDK 12 -Linux涓璗CP/IP鍗忚瀹炵幇鍙婂祵鍏ュ紡搴旂敤 鍑虹増鏃堕棿锛2008-07-01 +#### 2019-3-19 鍙戝竷 -楂樼瓑瀛︽牎璁$畻鏈轰笓涓氭暀鏉愮簿閫壜疯绠楁満鍘熺悊路寰瀷璁$畻鏈烘搷浣滅郴缁熷熀纭锛氬熀浜嶭inux/i386 鍑虹増鏃堕棿锛2008-07-01 +JEP 189 Shenandoah A Low-Pause-Time Garbage Collector (Experimental) -楂樼瓑瀛︽牎鐢靛瓙涓庤兘淇$被涓撲笟鈥滃崄涓浜斺濊鍒掓暀鏉惵疯绠楁満鎿嶄綔绯荤粺鍘熺悊锛歀inux瀹炰緥鍒嗘瀽 鍑虹増鏃堕棿锛2008-09-01 +JEP 230 Microbenchmark Suite -Linux鎿嶄綔绯荤粺鍒嗘瀽涓庡疄璺 鍑虹増鏃堕棿锛2008-11-01 +JEP 325 Switch Expressions (Preview) -Linux2.6鍐呮牳鏍囧噯鏁欑▼锛堥檮鍏夌洏1寮狅級 鍑虹増鏃堕棿锛2008-11-01 +JEP 334 JVM Constants API -Linux鍐呮牳瀹屽叏鍓栨瀽锛氬熀浜0.12鍐呮牳 鍑虹増鏃堕棿锛2009-01-01 +JEP 340 One AArch64 Port Not Two -Linux鎿嶄綔绯荤粺瀹為獙鏁欑▼ 鍑虹増鏃堕棿锛2009-02-01 +JEP 341 Default CDS Archives -楂樼瓑瀛︽牎璁$畻鏈哄疄璺垫暀瀛︾郴鍒楁暀鏉愶細Linux鎿嶄綔绯荤粺瀹為獙鏁欑▼ 鍑虹増鏃堕棿锛2009-04-01 +JEP 344 Abortable Mixed Collections for G1 -Linux鎿嶄綔绯荤粺鍘熺悊涓庡簲鐢 鍑虹増鏃堕棿锛2009-04-01 +JEP 346 Promptly Return Unused Committed Memory from G1 -娣卞叆鐞嗚ВLinux缃戠粶鎶鏈唴骞 鍑虹増鏃堕棿锛2009-06-01 +### JDK 13 -鐙緹韫婂緞鍝佸唴鏍革細Linux鍐呮牳婧愪唬鐮佸璇伙紙鎺ㄨ崘PC闃呰锛 鍑虹増鏃堕棿锛2009-08-01 +#### 2019-9-17 鍙戝竷 -娣卞叆娴呭嚭Linux TCP/IP鍗忚鏍 鍑虹増鏃堕棿锛2010-01-01 +JEP 350 Dynamic CDS Archives -Linux鍐呮牳缃戠粶鏍堟簮浠g爜鎯呮櫙鍒嗘瀽 鍑虹増骞: 2010-1 +JEP 351 ZGC Uncommit Unused Memory -杩借釜Linux TCP/IP浠g爜杩愯锛氬熀浜2.6鍐呮牳锛堥檮CD-ROM鍏夌洏1寮狅級 鍑虹増鏃堕棿锛2010-04-01 +JEP 353 Reimplement the Legacy Socket API -Linux浣撶郴涓庣紪绋嬶細鍩轰簬Linux0.01鐗堟湰/21涓栫邯杞欢宸ョ▼甯堣鍒掓暀鏉 鍑虹増鏃堕棿锛2010-04-01 +JEP 354 Switch Expressions -O'Reilly锛歀inux 鍐呮牳鎶鏈墜鍐 [Linux Kernel in a Nutsbell] 鍑虹増鏃堕棿锛2010-06-01 +JEP 355 Text Blocks -娣卞叆Linux鍐呮牳鏋舵瀯 鍑虹増鏃堕棿锛2010-06-01 +### JDK 14 -Linux鍐呮牳淇偧涔嬮亾 鍑虹増鏃堕棿锛2010-07-01 +#### 棰勮 2020-03-17 General Availability -Linux缃戠粶鍐呮牳鍒嗘瀽涓庡紑鍙 鍑虹増骞: 2010-8 +JEP 305 Pattern Matching for instanceof (Preview) -鎿嶄綔绯荤粺瀹為獙鏁欑▼鍙奓inux鍜學indows绯荤粺璋冪敤缂栫▼/璁$畻鏈鸿绋嬭璁′笌缁煎悎瀹炶返瑙勫垝鏁欐潗 鍑虹増鏃堕棿锛2010-09-01 +JEP 358 Helpful NullPointer Exceptions -Linux鍐呮牳婧愮爜鍓栨瀽锛歍CP/IP瀹炵幇锛堝瑁呬笂涓嬪唽锛 鍑虹増鏃堕棿锛2011-01-01 +JEP 361 Switch Expressions (Standard) -Linux鍐呮牳璁捐涓庡疄鐜帮紙鍘熶功绗3鐗堬級 鍑虹増鏃堕棿锛2011-05-01 +JEP 345 NUMA-Aware Memory Allocation for G1 -宓屽叆寮廘inux缃戠粶浣撶郴缁撴瀯璁捐涓嶵CP/IP鍗忚鏍 鍑虹増骞: 2011-05 +JEP 349 JFR Event Streaming -Linux鍐呮牳缂栫▼ 鍑虹増骞: 2011-5 +JEP 366 Deprecate the ParallelScavenge + SerialOld GC Combination -瀛樺偍鎶鏈師鐞嗗垎鏋愶細鍩轰簬Linux 2.6鍐呮牳婧愪唬鐮 鍑虹増鏃堕棿锛2011-09-01 +JEP 363 Remove the CMS Garbage Collector -Linux鍐呮牳娉ㄩ噴 鍑虹増鏃堕棿锛2011-12-01 +JEP 364 ZGC on macOS -Linux鎿嶄綔绯荤粺鍘熺悊涓庡簲鐢紙绗2鐗堬級 鍑虹増鏃堕棿锛2012-01-01 +JEP 368 Text Blocks (Second Preview) -娣卞叆Linux璁惧椹卞姩绋嬪簭鍐呮牳鏈哄埗 鍑虹増鏃堕棿锛2012-01-01 +### JDK 15 -Linux鍘熺悊涓庣粨鏋 鍑虹増鏃堕棿锛2012-02-01 +#### 2020-9-15 鍙戝竷 -O'Reilly绮惧搧鍥句功绯诲垪路Linux鍐呮牳绮鹃珦锛氱簿閫歀inux鍐呮牳蹇呬細鐨75涓粷鎶 鍑虹増鏃堕棿锛2012-02-01 +JEP 339 EdDSA 鏁板瓧绛惧悕绠楁硶 -Linux閭d簺浜嬪効涔嬫垜鏄疷SB锛堢2鐗堬級 鍑虹増鏃堕棿锛2012-03-01 +JEP 360 瀵嗗皝绫伙紙棰勮锛 -Linux鍐呮牳鍒嗘瀽涓庨珮绾ф暀绋 鍑虹増骞: 2012-8 +JEP 371 闅愯棌绫 -Linux鍐呮牳绮炬瀽锛堥檮CD鍏夌洏1寮狅級 鍑虹増鏃堕棿锛2013-02-01 +JEP 372 鍒犻櫎 Nashorn JavaScript 寮曟搸 -21涓栫邯楂樼瓑瀛︽牎瑙勫垝鏁欐潗路璁$畻鏈虹瀛︿笌鎶鏈細鎿嶄綔绯荤粺鍘熺悊鍙婂簲鐢紙Linux锛 鍑虹増鏃堕棿锛2013-04-01 +JEP 373 閲嶆柊瀹炵幇 Legacy DatagramSocket API -Linux鍐呮牳璁捐鐨勮壓鏈細鍥捐ВLinux鎿嶄綔绯荤粺鏋舵瀯璁捐涓庡疄鐜板師鐞嗭紙绗2鐗堬級 鍑虹増鏃堕棿锛2013-05-01 +JEP 374 閲嶆柊瀹炵幇 DatagramSocket API -娣卞害鎺㈢储Linux鎿嶄綔绯荤粺锛氱郴缁熸瀯寤哄拰鍘熺悊瑙f瀽 鍑虹増鏃堕棿锛2013-10-08 +JEP 375 瀹炰緥妯″紡鍖归厤锛堢浜屾棰勮锛 -Linux鍐呮牳鎺㈢锛氭繁鍏ヨВ鏋愭枃浠剁郴缁熷拰璁惧椹卞姩鐨勬灦鏋勪笌璁捐 鍑虹増鏃堕棿锛2013-12-01 +JEP 377 ZGC 涓涓彲鎵╁睍鐨勪綆寤惰繜鍨冨溇鏀堕泦鍣 -鎿嶄綔绯荤粺鍘熺悊涓嶭inux瀹炰緥璁捐锛堢2鐗堬級 鍑虹増鏃堕棿锛2014-06-01 +JEP 378 鏂囨湰鍧 -璁$畻鏈烘搷浣滅郴缁熷疄楠屾寚瀵(Linux鐗)(鍥藉绮惧搧璇剧▼閰嶅瀹為獙鏁欐潗銆鍥藉绮惧搧璧勬簮鍏变韩璇剧▼閰嶅瀹為獙鏁欐潗) 鍑虹増鏃堕棿锛2014-07-01 +JEP 379 浣庢殏鍋滄椂闂村瀮鍦炬敹闆嗗櫒 -绮鹃歀inux鍐呮牳缃戠粶 鍑虹増鏃堕棿锛2015-06-01 +JEP 381 绉婚櫎 Solaris 鍜 SPARC 绔彛 -鎿嶄綔绯荤粺鍘熺悊涓庡疄璺垫暀绋嬶紙绗2鐗堬級/璁$畻鏈虹郴鍒楁暀鏉 鍑虹増鏃堕棿锛2015-08-01 +JEP 383 澶栭儴瀛樺偍鍣ㄨ闂 API锛堢浜屼釜鍐呯疆绋嬪簭锛 -娣卞叆鐞嗚ВLinux椹卞姩绋嬪簭璁捐 鍑虹増鏃堕棿锛2015-11-01 +JEP 384 Records锛堢浜屾棰勮锛 -鎿嶄綔绯荤粺鍘熺悊涓嶭inux瀹炶返鏁欑▼ 鍑虹増鏃堕棿锛2016-01-01 +JEP 385 涓嶆帹鑽愮殑 RMI 婵娲诲幓闄 -绮鹃歀inux璁惧椹卞姩绋嬪簭寮鍙 鍑虹増鏃堕棿锛2016-04-01 +### JDK 16 -鎿嶄綔绯荤粺瀹為獙鎸囧锛氬熀浜嶭inux鍐呮牳锛堢3鐗堬級 鍑虹増鏃堕棿锛2016-07-01 +#### 2021-03-16 鍙戝竷 -Linux鍐呮牳API瀹屽叏鍙傝冩墜鍐岋紙绗2鐗堬級 鍑虹増鏃堕棿锛2016-10-01 -Linux鎶鏈唴骞 鍑虹増鏃堕棿锛2016-12-01 +338 Vector API (Incubator) -娣卞叆Linux鍐呮牳鏋舵瀯涓庡簳灞傚師鐞 鍑虹増鏃堕棿锛2017-11-01 +347 Enable C++ 14 Language Features -鎿嶄綔绯荤粺鍘熺悊鍙奓inux鍐呮牳鍒嗘瀽(绗2鐗堬級/21涓栫邯楂樼瓑瀛︽牎瑙勫垝鏁欐潗路璁$畻鏈虹瀛︿笌鎶鏈 鍑虹増鏃堕棿锛2018-08-01 +357 Migrate from Mercurial to Git -Linux璁惧椹卞姩绋嬪簭寮鍙戯紙褰卞嵃鐗 鑻辨枃鐗堬級 [Linux Device Drivers Development] 鍑虹増鏃堕棿锛2018-08-01 +369 Migrate to GitHub -2016鍚屾祹澶у鏈鏁欐潗鍑虹増鍩洪噾锛歀inux鎿嶄綔绯荤粺瀹炵幇鍘熺悊 鍑虹増鏃堕棿锛2018-09-01 +376 ZGC Concurrent Thread-Stack Processing -搴栦竵瑙g墰Linux鍐呮牳鍒嗘瀽 鍑虹増鏃堕棿锛2018-10-01 +380 Unix-Domain Socket Channels -鎿嶄綔绯荤粺鍘熺悊涓庡簲鐢紙Linux锛 鍑虹増鏃堕棿锛2018-12-01 +386 Alpine Linux Port -鎿嶄綔绯荤粺瀹為獙鎸囧涓庝範棰樿В鏋 鍑虹増鏃堕棿锛2019-10-01 +387 Elastic Metaspace -绮鹃歀inux鍐呮牳锛氭櫤鑳借澶囧紑鍙戞牳蹇冩妧鏈 鍑虹増鏃堕棿锛2020-01-01 +388 Windows / AArch64 Port -鐢ㄢ滆姱鈥濇帰鏍 鍩轰簬榫欒姱鐨凩inux鍐呮牳鎺㈢储瑙f瀽 鍑虹増鏃堕棿锛2020-08-01 +389 Foreign Linker API (Incubator) -Linux鍐呮牳瑙傛祴鎶鏈疊PF [Linux Observability with BPF] 鍑虹増鏃堕棿锛2020-08-01 +390 Warnings for Value-Based Classes -Linux Kernel Development Cookbook 鍑虹増鏃堕棿锛2021-01 +392 Packaging Tool -娣卞害鎺㈢储Linux绯荤粺铏氭嫙鍖栵細鍘熺悊涓庡疄鐜 鍑虹増鏃堕棿锛2020-11-01 +393 Foreign-Memory Access API (Third Incubator) -### 寰俊璧炶祻鐮 +394 Pattern Matching for instanceof -![image](https://gitee.com/OpenDevel/java-for-linux/raw/master/image/璧炶祻鐮.png) +395 Records +396 Strongly Encapsulate JDK Internals by Default +397 Sealed Classes (Second Preview) \ No newline at end of file diff --git a/foodie-dev/foodie-dev-api/src/main/java/com/imooc/Application.java b/foodie-dev/foodie-dev-api/src/main/java/com/imooc/Application.java index 7f7f90035a2c5a2149973bd91860c48cd5efa532..54434629d84e869bbb94eaf0978f2a20fbe81306 100644 --- a/foodie-dev/foodie-dev-api/src/main/java/com/imooc/Application.java +++ b/foodie-dev/foodie-dev-api/src/main/java/com/imooc/Application.java @@ -1,11 +1,11 @@ package com.imooc; import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; +//import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; +//import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import tk.mybatis.spring.annotation.MapperScan; @SpringBootApplication(exclude = {SecurityAutoConfiguration.class}) @@ -14,11 +14,11 @@ import tk.mybatis.spring.annotation.MapperScan; // 鎵弿鎵鏈夊寘浠ュ強鐩稿叧缁勪欢鍖 @ComponentScan(basePackages={"com.imooc","org.n3r.idworker"}) @EnableScheduling // 寮鍚畾鏃朵换鍔 -@EnableRedisHttpSession // 寮鍚娇鐢╮edis浣滀负spring session +//@EnableRedisHttpSession // 寮鍚娇鐢╮edis浣滀负spring session public class Application extends Object { public static void main(String[] args) { - SpringApplication.run(Application.class,args); + SpringApplication.run(Application.class,args); } } diff --git a/foodie-dev/foodie-dev-api/src/main/resources/application-prod.yml b/foodie-dev/foodie-dev-api/src/main/resources/application-prod.yml index 87c6656fe7321d2bd3adb02cf70da25fd523d445..33677d213f37136399cdc3822d144542c52d4c77 100644 --- a/foodie-dev/foodie-dev-api/src/main/resources/application-prod.yml +++ b/foodie-dev/foodie-dev-api/src/main/resources/application-prod.yml @@ -3,5 +3,10 @@ server: spring: datasource: # 鏁版嵁婧愮殑鐩稿叧閰嶇疆 - url: jdbc:mysql://localhost:3306/foodie-shop-dev?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true - password: \ No newline at end of file + url: jdbc:mysql://120.77.47.215:3306/foodie-shop-dev?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true + password: + + +mybatis: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl \ No newline at end of file diff --git a/foodie-dev/foodie-dev-api/src/main/resources/application.yml b/foodie-dev/foodie-dev-api/src/main/resources/application.yml index 02382637fe4333beadab54fc97a825f3e35e7d38..cbbe2d5b78587e56125bd039e4dcbca910f8aad2 100644 --- a/foodie-dev/foodie-dev-api/src/main/resources/application.yml +++ b/foodie-dev/foodie-dev-api/src/main/resources/application.yml @@ -16,7 +16,7 @@ server: ############################################################ spring: profiles: - active: dev + active: prod datasource: # 鏁版嵁婧愮殑鐩稿叧閰嶇疆 type: com.zaxxer.hikari.HikariDataSource # 鏁版嵁婧愮被鍨嬶細HikariCP driver-class-name: com.mysql.jdbc.Driver # mysql椹卞姩 diff --git a/foodie-dev/foodie-dev-common/src/main/java/com/imooc/utils/RedisOperator.java b/foodie-dev/foodie-dev-common/src/main/java/com/imooc/utils/RedisOperator.java index 45649f030d525a910f34e3a6ba6c8e9eb32ef1f4..9d12fdbf1f6545e70e11a303813242b389938414 100755 --- a/foodie-dev/foodie-dev-common/src/main/java/com/imooc/utils/RedisOperator.java +++ b/foodie-dev/foodie-dev-common/src/main/java/com/imooc/utils/RedisOperator.java @@ -18,42 +18,41 @@ import java.util.concurrent.TimeUnit; /** * @Title: Redis 宸ュ叿绫 - * @author 鎱曡缃 */ @Component public class RedisOperator { - + // @Autowired // private RedisTemplate redisTemplate; - - @Autowired + +// @Autowired private StringRedisTemplate redisTemplate; - + // Key锛堥敭锛夛紝绠鍗曠殑key-value鎿嶄綔 /** * 瀹炵幇鍛戒护锛歍TL key锛屼互绉掍负鍗曚綅锛岃繑鍥炵粰瀹 key鐨勫墿浣欑敓瀛樻椂闂(TTL, time to live)銆 - * + * * @param key * @return */ public long ttl(String key) { return redisTemplate.getExpire(key); } - + /** * 瀹炵幇鍛戒护锛歟xpire 璁剧疆杩囨湡鏃堕棿锛屽崟浣嶇 - * + * * @param key * @return */ public void expire(String key, long timeout) { redisTemplate.expire(key, timeout, TimeUnit.SECONDS); } - + /** * 瀹炵幇鍛戒护锛欼NCR key锛屽鍔爇ey涓娆 - * + * * @param key * @return */ @@ -70,7 +69,7 @@ public class RedisOperator { /** * 瀹炵幇鍛戒护锛欴EL key锛屽垹闄や竴涓猭ey - * + * * @param key */ public void del(String key) { @@ -81,7 +80,7 @@ public class RedisOperator { /** * 瀹炵幇鍛戒护锛歋ET key value锛岃缃竴涓猭ey-value锛堝皢瀛楃涓插 value鍏宠仈鍒 key锛 - * + * * @param key * @param value */ @@ -91,7 +90,7 @@ public class RedisOperator { /** * 瀹炵幇鍛戒护锛歋ET key value EX seconds锛岃缃甼ey-value鍜岃秴鏃舵椂闂达紙绉掞級 - * + * * @param key * @param value * @param timeout @@ -103,7 +102,7 @@ public class RedisOperator { /** * 瀹炵幇鍛戒护锛欸ET key锛岃繑鍥 key鎵鍏宠仈鐨勫瓧绗︿覆鍊笺 - * + * * @param key * @return value */ @@ -151,7 +150,7 @@ public class RedisOperator { /** * 瀹炵幇鍛戒护锛欻SET key field value锛屽皢鍝堝笇琛 key涓殑鍩 field鐨勫艰涓 value - * + * * @param key * @param field * @param value @@ -162,7 +161,7 @@ public class RedisOperator { /** * 瀹炵幇鍛戒护锛欻GET key field锛岃繑鍥炲搱甯岃〃 key涓粰瀹氬煙 field鐨勫 - * + * * @param key * @param field * @return @@ -173,7 +172,7 @@ public class RedisOperator { /** * 瀹炵幇鍛戒护锛欻DEL key field [field ...]锛屽垹闄ゅ搱甯岃〃 key 涓殑涓涓垨澶氫釜鎸囧畾鍩燂紝涓嶅瓨鍦ㄧ殑鍩熷皢琚拷鐣ャ - * + * * @param key * @param fields */ @@ -183,7 +182,7 @@ public class RedisOperator { /** * 瀹炵幇鍛戒护锛欻GETALL key锛岃繑鍥炲搱甯岃〃 key涓紝鎵鏈夌殑鍩熷拰鍊笺 - * + * * @param key * @return */ @@ -195,7 +194,7 @@ public class RedisOperator { /** * 瀹炵幇鍛戒护锛歀PUSH key value锛屽皢涓涓 value鎻掑叆鍒板垪琛 key鐨勮〃澶 - * + * * @param key * @param value * @return 鎵ц LPUSH鍛戒护鍚庯紝鍒楄〃鐨勯暱搴︺ @@ -206,7 +205,7 @@ public class RedisOperator { /** * 瀹炵幇鍛戒护锛歀POP key锛岀Щ闄ゅ苟杩斿洖鍒楄〃 key鐨勫ご鍏冪礌銆 - * + * * @param key * @return 鍒楄〃key鐨勫ご鍏冪礌銆 */ @@ -216,7 +215,7 @@ public class RedisOperator { /** * 瀹炵幇鍛戒护锛歊PUSH key value锛屽皢涓涓 value鎻掑叆鍒板垪琛 key鐨勮〃灏(鏈鍙宠竟)銆 - * + * * @param key * @param value * @return 鎵ц LPUSH鍛戒护鍚庯紝鍒楄〃鐨勯暱搴︺ diff --git a/foodie-dev/pom.xml b/foodie-dev/pom.xml index ffe55abfbb35b500cf7b6425d1caa416bc200ac5..2ff6c7f75e8dbe5f77c1c7e728e60706d1f97602 100644 --- a/foodie-dev/pom.xml +++ b/foodie-dev/pom.xml @@ -102,10 +102,10 @@ - + diff --git "a/image/01-\350\257\201\344\271\246.png" "b/image/01-\350\257\201\344\271\246.png" index f22836d4f77889b278946ffc851228eb9c47a29b..ff5093d8f3e2ca879f953481cfddff11dafcba0b 100644 Binary files "a/image/01-\350\257\201\344\271\246.png" and "b/image/01-\350\257\201\344\271\246.png" differ diff --git a/image/kali-linux-kernel-programming.png.png b/image/kali-linux-kernel-programming.png.png new file mode 100644 index 0000000000000000000000000000000000000000..72ded74b32e1c5670f3717d70d8db0c9e12996f5 Binary files /dev/null and b/image/kali-linux-kernel-programming.png.png differ diff --git a/image/logo.png b/image/logo.png index 5246fe3aab31c09df090d7016740acd335e1de32..3a443e5c42917118c735b5a10a0413d9baa61e7d 100644 Binary files a/image/logo.png and b/image/logo.png differ diff --git a/java-for-gitee/db_kafka/pom.xml b/java-for-gitee/db_kafka/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..a3ae0c4eeb0b5e1cc3b4985661c8b607c308cd66 --- /dev/null +++ b/java-for-gitee/db_kafka/pom.xml @@ -0,0 +1,37 @@ + + + 4.0.0 + + com.osrcd + db_kafka + 1.0-SNAPSHOT + + + + org.apache.kafka + kafka-clients + 2.4.1 + + + + org.slf4j + slf4j-api + 1.7.10 + + + + + org.slf4j + slf4j-log4j12 + 1.7.10 + + + + + 8 + 8 + + + \ No newline at end of file diff --git a/java-for-gitee/db_kafka/src/main/java/com/imooc/kafka/ConsumerDemo.java b/java-for-gitee/db_kafka/src/main/java/com/imooc/kafka/ConsumerDemo.java new file mode 100644 index 0000000000000000000000000000000000000000..3abcc1c69ce65df6bc0440d91bdf1342b1789f2b --- /dev/null +++ b/java-for-gitee/db_kafka/src/main/java/com/imooc/kafka/ConsumerDemo.java @@ -0,0 +1,130 @@ +package com.imooc.kafka; + +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.apache.kafka.clients.consumer.ConsumerRecords; +import org.apache.kafka.clients.consumer.KafkaConsumer; +import org.apache.kafka.common.serialization.StringDeserializer; + +import java.text.SimpleDateFormat; +import java.time.Duration; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.Properties; + +/** + * 需求:使用 Java 代码实现消费者代码 + * 关闭 kafka 服务器的防火墙 + * 配置 Windows 的 hosts 文件 添加 kafka 节点的hostname和ip的映射关系 + */ +public class ConsumerDemo { + + public static void main(String[] args) { + + Properties prop = new Properties(); + + // 指定 kafka 的 Broker地址 如果是集群可以这样传递 bigdata01:9092,bigdata02:9092 + prop.put("bootstrap.servers", "120.77.47.215:9092"); + + // 指定 key-value 反序列化类型 + prop.put("key.deserializer", StringDeserializer.class.getName()); + prop.put("value.deserializer", StringDeserializer.class.getName()); + + /** + * 之前控制台测试的会自动消费者组 group.id + * 指定消费者组 在代码里面就需要自己指定了 + */ + prop.put("group.id", "con-1"); + + + /** + * 开启自动提交 offset 功能 针对消费者 + * 消费者在消费数据的时候 它会自动把你消费到哪个位置 把你消费的这个位置来提交上去 + * 保存一下 这样你后面再启动消费者的时候 是不是就可以根据上一次消费的位置 继续接下来往 + * 下面消费了 如果在这里不记录消费到哪个位置的话 你下次启动这个消费者 要么消费最新的 + * 要么就重新消费 这种情况下 其实我们应该把我们消费的位置给它保存下来 + * 默认就是开启的 + */ + prop.put("enable.auto.commit", "true"); + + /** + * 自动提交 offset 的时间间隔 单位是毫秒 + * 每隔 5 秒 提交 1次 你哪个消费的 offset 信息 + */ + prop.put("auto.commit.interval.ms", "5000"); + + /** + * 正常情况下 kafka 消费数据的流程是这样的 + * 先根据 group.id 指定的消费者组到 kafka 中查找之前保存的 offset 信息(下一次执行的时候) + * 根据使用的 消费者组 con-1 到 kafka 查一下 看一下说 我之前使用 这个消费者组 + * 有没有消费过 这个 hello topic 数据 如果消费过 哪我之前消费到哪个位置了 ? + * 把哪个位置拿过来 然后 这 1 次 我继续接着哪个位置 往下面继续消费 + * + * 如果查找到了 说明之前使用这个消费者组消费过数据 说明之前执行过这个代码 则根据之前保存 + * 的 offset 继续 进行消费 和 latest 参数就有关了 + * + * earliest 主要影响这种情况 是生效的 + * 如果没查找到(说明是第一次消费 也就是之前没有消费过) 或者 + * 查找到了,但是查找到的哪个 offset 对应的数据已经不存在了 + * + * 为什么找到了 哪个 offset 但是对应的数据不存在? + * 因为 kafka 默认只会保存最近 7 天的数据 超过时间数据会被删除 + * + * 那么这个时候消费者该如何消费数据? + * 此时会根据 auto.offset.reset 的值执行不同的消费逻辑 + * + * 这个参数的值有 3 种: earliest latest none + * + * earliest:表示从最早的数据开始消费(从头消费) 类似控制台指定的参数消费 + * 默认 latest:表示从最新的数据开始消费 + * none:如果根据指定的group.id没有找到之前消费的offset信息 就会抛异常 + * 实际工作中要么用 latest(用的最多) 要么用 earliest + * none 很少用 + * + * 解释 查找到了,但是查找到的哪个 offset 对应的数据已经不存在了 + * 没有办法根据 offset 继续往后面 消费数据了 + * 假设你第一天使用一个消费者去消费了1条数据,就把消费者停掉了 + * 等了 7 天之后 你又使用这个消费者去消费数据 + * 这个时候 这个消费者启动的时候会到 kafka 里面 查询它之前保存的 offset 信息 也就是 + * 之前消费到了 哪个位置 但是哪个 offset 对应的数据 已经被删了 所以此时再根据这个 offset + * 去消费是消费不到的数据的 那些数据其实已经被删了 + * + * 总结 一般在实时计算的场景下 这个参数的值 建议设置为 latest 消费最新的数据 你实时计算 + * 需要取人家实时的数据 就算这个 topic 里面 之前有很多的历史数据 我也不要取了 只取最新的 + * + * earliest 这个参数只有在消费者第一次消费数据(在 kafka 里面没有存储 offset 信息的),或者之前保存的offset信息已过期的情况下才会生效 + * 所以你只能根据它 类似针对 offset 重新给它 reset 机制 重置一下这个 offset + * 重置的话就是说 你重置之后 你是从最新的读啊 latest 还是从之前最老的读啊 earliest + * 这个参数不是在任何场景下面都生效的 + */ + prop.put("auto.offset.reset", "earliest"); + + // 创建消费者 + KafkaConsumer consumer = new KafkaConsumer(prop); + Collection topics = new ArrayList(); + topics.add("hello"); + + /** + * 订阅指定的 topic + * 订阅这个 topic 之后 你后续这个 topic里面有数据就能取出来 + */ + consumer.subscribe(topics); + + while (true) { + /** + * 传入超时时间 指定 1 秒 取数据的超时时间 + * 如果 1 秒钟之内没取出来 返回调用该方法 再次去调用 poll 方法 进行取数据 + * 一次消费多条数据 一批 从这里面迭代出来 + */ + ConsumerRecords poll = consumer.poll(Duration.ofSeconds(1)); + /** + * ConsumerRecord 消费一条数据 + * 默认是消费最新的 老的消费不出来 + */ + for (ConsumerRecord consumerRecord : poll) { + System.out.println(consumerRecord); + } + + } + } +} diff --git a/java-for-gitee/db_kafka/src/main/java/com/imooc/kafka/ProducerDemo.java b/java-for-gitee/db_kafka/src/main/java/com/imooc/kafka/ProducerDemo.java new file mode 100644 index 0000000000000000000000000000000000000000..b0dac97783140a167e7ce8f7ad0de44e743e606d --- /dev/null +++ b/java-for-gitee/db_kafka/src/main/java/com/imooc/kafka/ProducerDemo.java @@ -0,0 +1,40 @@ +package com.imooc.kafka; + +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.serialization.StringSerializer; + +import java.util.Properties; + +public class ProducerDemo { + + public static void main(String[] args) { + Properties prop = new Properties(); + + // 指定 kafka 的 Broker地址 如果是集群可以这样传递 bigdata01:9092,bigdata02:9092 + prop.put("bootstrap.servers", "120.77.47.215:9092"); + + /** + * 指定 key-value 数据的序列化格式 + * 之前说过 往哪个 Partition 写数据的时候 其实你呢 有时候可以指定 key + * 以及具体的 value 咱们之前往哪个 Partition 写数据 其实只写了 value + * 没有传哪个 key 咱们之前说过哪个 key 的话 可以按它的 key 来指定一个 partition + * 然后指定它具体把哪个数据放到哪个分区里面 可以通过 key 来控制 一般不传哪个东西 + * 在这里可以指定一下 在这里不指定会报错 + */ + prop.put("key.serializer", StringSerializer.class.getName()); + prop.put("value.serializer", StringSerializer.class.getName()); + // 创建 kafka 生产者 + KafkaProducer producer = new KafkaProducer(prop); + + // 指定 Topic + String topic = "hello"; + + // 向 Topic 中生产数据 + producer.send(new ProducerRecord("topic", "hello kafka")); + + // 关闭链接 + producer.close(); + } + +} diff --git a/java-for-gitee/jvm-tuning/pom.xml b/java-for-gitee/jvm-tuning/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..9f0fe8312d6653fdee24254eef7933cc56aae7ae --- /dev/null +++ b/java-for-gitee/jvm-tuning/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + com.osrcd + jvm-tuning + 1.0-SNAPSHOT + + + 8 + 8 + + + + + + org.slf4j + slf4j-api + 1.7.21 + + + + org.slf4j + slf4j-log4j12 + 1.7.21 + + + + \ No newline at end of file diff --git a/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/EscapeTest1.java b/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/EscapeTest1.java new file mode 100644 index 0000000000000000000000000000000000000000..daf36d945e993c2a47c27a052f38c9d3e7df8a15 --- /dev/null +++ b/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/EscapeTest1.java @@ -0,0 +1,71 @@ +package com.osrcd.jvm; + +public class EscapeTest1 { + + // 绫诲彉閲忕殑浣滅敤鍩 鏄湪绫婚噷闈 + public static SomeClass someClass; + + /** + * global 杩欎釜鏂规硶閲岄潰 鎴戜滑鎶婁竴涓眬閮ㄥ彉閲 璧嬪肩粰涓涓潤鎬佸彉閲 + * 灞閮ㄥ彉閲忕殑浣滅敤鍩 鏄湪鏂规硶鍐呴儴 + * 鎵浠ヤ綔鐢ㄥ煙琚斁澶т簡 璧嬪煎湪绫诲彉閲忎綔鐢ㄥ煙閲岄潰浜 鍙戠敓浜嗛冮 + */ + public void globalVariablePointerEscape() { + someClass = new SomeClass(); + } + + /** + * 鍋囪杩欎釜鏃跺欐湁鍙﹀涓涓柟娉 姣斿璇磋繖閲岀殑 someMethod 鏂规硶 + * 璋冪敤浜嗚繖閲岀殑 methodPointerEscape 鏂规硶 閭d箞杩欎釜 someClass 鐨勪綔鐢ㄥ煙 + * 鏄湪 someMethod 鏂规硶閲岄潰 鎵浠ヨ繖涓 return new SomeClass(); 浣滅敤鍩 + * 灏变粠 methodPointerEscape 鎵╁紶鍒颁簡 someMethod 鏂规硶 鎵浠ヤ篃鍙戠敓浜嗛冮 + * someMethod(){ + * SomeClass someClass = methodPointerEscape(); + * } + * + * 鎴戜滑杩斿洖浜嗕竴涓璞 杩欎釜瀵硅薄鐨勪綔鐢ㄥ煙 涓寮濮嬩篃鏄湪鏂规硶鍐呴儴鐨 + */ + public SomeClass methodPointerEscape() { + return new SomeClass(); + } + + /** + * 瀹炰緥寮曠敤浼犻掗冮 + * 杩欓噷鐨 this 浼犵粰浜 涓嬮潰鐨 printClassName 鏂规硶 + * this 鐨 浣滅敤鍩 鍘熷厛鏄湪褰撳墠瀹炰緥涓嬬殑 {} 浣嗘槸鐜板湪 + * 鎵╁紶鍒颁簡 SomeClass 瀹炰緥涓嬮潰鍘讳簡 鎵浠ヤ篃鍙戠敓浜嗛冮 + */ + public void instancePassPointerEscape() { + this.methodPointerEscape() + .printClassName(this); + } + + + /** + * 濡傛灉寮鍚簡鏍囬噺鏇挎崲 骞朵笉浼氱洿鎺ュ垱寤 SomeTest 杩欎釜瀹炰緥 鑰屾槸鍒涘缓SomeTest鎴愬憳鍙橀噺鍘讳唬鏇 + * 涔熷氨鏄寮鍚爣閲忔浛鎹箣鍚 + * 杩欐浠g爜灏辫浼樺寲鎴愪簡 + * int age = 1; + * int id = 1; + * 閭d箞鎶婂璞¤繘琛屾爣閲忔浛鎹箣鍚 鍘熸湰鐨勫璞 灏变笉闇瑕佸垎閰嶅唴瀛樼┖闂翠簡 + */ + public void someTest() { + SomeTest someTest = new SomeTest(); + someTest.age = 1; + someTest.id = 1; + } + + class SomeClass { + public void printClassName(EscapeTest1 escapeTest1) { + System.out.println(escapeTest1.getClass().getName()); + } + } + + class SomeTest { + // 鏍囬噺 + int id; + int age; + + } + +} diff --git a/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/InlineTest1.java b/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/InlineTest1.java new file mode 100644 index 0000000000000000000000000000000000000000..322706a2bb646f9dd652cc36aafdc220530d6639 --- /dev/null +++ b/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/InlineTest1.java @@ -0,0 +1,34 @@ +package com.osrcd.jvm; + +public class InlineTest1 { + + /** + * 璋冪敤浜 2 娆 add2 鏂规硶 + * 缂栬瘧鍣ㄤ細鎬庝箞鏍蜂紭鍖栬繖娈典唬鐮 + * 鎴戜滑鐭ラ亾璋冪敤鏂规硶闇瑕佺粡杩囧帇鏍堝拰鍑烘爤鐨勬搷浣 + * 杩涘叆鏂规硶鐨勬椂鍊 浼氬悜鏍堥噷闈㈠帇鍏ヤ竴涓 鍏冪礌 + * return 鐨勬椂鍊 浼氫粠鏍堥噷闈 寮瑰嚭杩欎釜鍏冪礌 鑰屽帇鏍堝拰鍑烘爤鎿嶄綔 閮芥槸鏈夊紑閿鐨 + * 姣旀柟璇 鍘嬫爤鐨勮瘽 寰楀線鏍堥噷闈㈠瓨鏁版嵁 瀛樺湪鍐呭瓨鐨勫紑閿 鍚屾椂鍘嬫爤鍜屽嚭鏍堜篃閮介渶瑕佹椂闂寸殑 + * 鎵浠ヨ繕鏈夋椂闂寸殑寮閿 濡傛灉杩欐浠g爜 璋冪敤娆℃暟涓嶅 閭d箞鍘嬫爤鍜屽嚭鏍堢殑寮閿鍊掍篃鏃犳墍璋撲簡 + * 浣嗘槸鍋囪杩欐浠g爜璋冪敤闈炲父棰戠箒 姣旀柟璇 姣忕瑕佽皟鐢 2w 娆 閭d箞绱涓嬫潵鐨勫紑閿 杩樻槸姣旇緝鍙鐨 + * 鏄笉鏄湁浠涔堝姙娉曞幓浼樺寲 褰撶劧鏄湁鐨 jvm 浼氳嚜鍔ㄨ瘑鍒 鐑偣鏂规硶 骞惰嚜鍔ㄧ殑鍘昏繘琛屾柟娉曞唴鑱 + * 鎶婄洰鏍囨柟娉曠殑浠g爜澶嶅埗鍒板彂璧疯皟鐢ㄧ殑鏂规硶涔嬩腑 閬垮厤鍙戠敓鐪熷疄鐨勬柟娉曡皟鐢 + * 姣斿璇村儚杩欐浠g爜 缁忚繃鏂规硶鍐呰仈涔嬪悗 灏卞彉鎴愪簡杩欐牱瀛 + */ + private static int add1(int x1,int x2,int x3,int x4) { + return add2(x1, x2) + add2(x3, x4); + } + + private static int add2(int x1, int x2) { + return x1 + x2; + } + + /** + * 鍐呰仈鍚 浼氳嚜鍔ㄧ殑鎶 add1 鏂规硶 鍜 add2 鏂规硶 鍚堝苟鍒颁竴璧峰幓 + * 浠庤屽噺灏戝帇鏍堝拰鍑烘爤鐨勬搷浣 + */ + private static int addInline(int x1, int x2, int x3, int x4) { + return x1 + x2 + x3 + x4; + } + +} diff --git a/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/InlineTest2.java b/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/InlineTest2.java new file mode 100644 index 0000000000000000000000000000000000000000..8657d76d74414258e22fb332dc9814750457f2c1 --- /dev/null +++ b/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/InlineTest2.java @@ -0,0 +1,50 @@ +package com.osrcd.jvm; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Random; + + +public class InlineTest2 { + + private static final Logger LOGGER = LoggerFactory.getLogger(InlineTest2.class); + + /** + * main 鏂规硶閲岄潰璋冪敤 compute 鏂规硶 + * compute 鏂规硶 寰幆璋冪敤 add1 鏂规硶 + * 鑰 add1 鏂规硶 鍙堜細璋冪敤 2娆 add2 鏂规硶 + */ + public static void main(String[] args) { + long cost = compute(); + // 鏂规硶鍐呰仈浜 鎵ц鑺辫垂浜 579ms add1 鏂规硶鏄 12 瀛楄妭 add2 鏂规硶鏄4瀛楄妭 + // 鏂规硶涓嶅唴鑱 580ms + LOGGER.info("鎵ц鑺辫垂浜唟}ms",cost); + } + + private static long compute() { + long start = System.currentTimeMillis(); + int result = 0; + Random random = new Random(); + for (int i = 0; i < 10000000; i++) { + int a = random.nextInt(); + int b = random.nextInt(); + int c = random.nextInt(); + int d = random.nextInt(); + result = add1(a, b, c, d); + } + long end = System.currentTimeMillis(); + return end - start; + } + + private static int add1(int x1, int x2, int x3, int x4) { + return add2(x1, x2) + add2(x3, x4); + } + + private static int add2(int x1, int x2) { + return x1 + x2; + } + + + +} diff --git a/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/JVMTest1.java b/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/JVMTest1.java new file mode 100644 index 0000000000000000000000000000000000000000..627e31ae9aa4c97606d88653e95cb822ba5a4ba4 --- /dev/null +++ b/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/JVMTest1.java @@ -0,0 +1,19 @@ +package com.osrcd.jvm; +public class JVMTest1 { + public static void main(String[] args) { + Demo demo = new Demo("aaa"); + demo.printName(); + } + +} +class Demo { + private String name; + + public Demo(String name) { + this.name = name; + } + + public void printName() { + System.out.println(this.name); + } +} diff --git a/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/gc/GCTest1.java b/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/gc/GCTest1.java new file mode 100644 index 0000000000000000000000000000000000000000..ddeb273111d00f2a2cc2ec801868f1fa9f875a83 --- /dev/null +++ b/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/gc/GCTest1.java @@ -0,0 +1,35 @@ +package com.osrcd.jvm.gc; + +@SuppressWarnings("Duplicates") +public class GCTest1 { + private static GCTest1 obj; + + @Override + protected void finalize() throws Throwable { + super.finalize(); + System.out.println("finalize琚皟鐢ㄤ簡"); + obj = this; + } + + public static void main(String[] args) throws InterruptedException { + obj = new GCTest1(); + obj = null; + System.gc(); + Thread.sleep(1000L); + if (obj == null) { + System.out.println("obj == null"); + } else { + System.out.println("obj 鍙敤"); + } + + Thread.sleep(1000L); + obj = null; + System.gc(); + if (obj == null) { + System.out.println("obj == null"); + } else { + System.out.println("obj 鍙敤"); + } + + } +} diff --git a/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/jhsdb/JHSDBTest.java b/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/jhsdb/JHSDBTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e35f62689107cb9e3f42a21b2fcf57a48e9b02f4 --- /dev/null +++ b/java-for-gitee/jvm-tuning/src/main/java/com/osrcd/jvm/jhsdb/JHSDBTest.java @@ -0,0 +1,28 @@ +package com.osrcd.jvm.jhsdb; + +public class JHSDBTest { + + + static class Test { + static SomeObject someObject = new SomeObject(); + SomeObject instanceObj = new SomeObject(); + + void foo() { + SomeObject localObj = new SomeObject(); + System.out.println("done"); // 这里打一个断点 + + } + } + + private static class SomeObject { + private Short age; + private String name; + } + + public static void main(String[] args) { + Test test = new JHSDBTest.Test(); + test.foo(); + } + + +} diff --git a/java-for-gitee/jvm-tuning/src/main/resources/.gitignore b/java-for-gitee/jvm-tuning/src/main/resources/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/java-for-gitee/jvm-tuning/src/main/resources/log4j.properties b/java-for-gitee/jvm-tuning/src/main/resources/log4j.properties new file mode 100644 index 0000000000000000000000000000000000000000..57046ed87060ef50271ae32c4ab5d98b4656d13b --- /dev/null +++ b/java-for-gitee/jvm-tuning/src/main/resources/log4j.properties @@ -0,0 +1,15 @@ +log4j.rootLogger=DEBUG,stdout,file +log4j.additivity.org.apache=true + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.threshold=INFO +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%-5p %c{1}:%L - %m%n + +log4j.appender.file=org.apache.log4j.DailyRollingFileAppender +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH-mm +log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n +log4j.appender.file.Threshold=INFO +log4j.appender.file.append=true +log4j.appender.file.File=/tmp/workspaces/logs/foodie-api/imooc.log \ No newline at end of file diff --git a/java-for-gitee/jvm-tuning/src/test/java/.gitignore b/java-for-gitee/jvm-tuning/src/test/java/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/java-for-gitee/sharding-jdbc-demo/.gitignore b/java-for-gitee/sharding-jdbc-demo/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..549e00a2a96fa9d7c5dbc9859664a78d980158c2 --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/java-for-gitee/sharding-jdbc-demo/pom.xml b/java-for-gitee/sharding-jdbc-demo/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..8a3ebf11f10b2422124e6eec24a4d89c40552747 --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/pom.xml @@ -0,0 +1,101 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.5.RELEASE + + + com.example + sharding-jdbc-demo + 0.0.1-SNAPSHOT + sharding-jdbc-demo + Demo project for Spring Boot + + 1.8 + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-web + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.4 + + + + mysql + mysql-connector-java + runtime + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + org.apache.shardingsphere + sharding-jdbc-spring-boot-starter + 4.0.0-RC2 + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + org.mybatis.generator + mybatis-generator-maven-plugin + 1.3.7 + + + mysql + mysql-connector-java + 8.0.17 + + + + + + + diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/ShardingJdbcDemoApplication.java b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/ShardingJdbcDemoApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..0c3711a894b813d95e4cfda4544cd24e2d495690 --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/ShardingJdbcDemoApplication.java @@ -0,0 +1,16 @@ +package com.example.shardingjdbcdemo; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ImportResource; + +@SpringBootApplication +@MapperScan("com.example.shardingjdbcdemo.dao") +public class ShardingJdbcDemoApplication { + + public static void main(String[] args) { + SpringApplication.run(ShardingJdbcDemoApplication.class, args); + } + +} diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/dao/AreaMapper.java b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/dao/AreaMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..7d7723b381133472aca8776678d202cd963bbbaf --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/dao/AreaMapper.java @@ -0,0 +1,96 @@ +package com.example.shardingjdbcdemo.dao; + +import com.example.shardingjdbcdemo.model.Area; +import com.example.shardingjdbcdemo.model.AreaExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface AreaMapper { + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + long countByExample(AreaExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + int deleteByExample(AreaExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + int deleteByPrimaryKey(Integer id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + int insert(Area record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + int insertSelective(Area record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + List selectByExample(AreaExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + Area selectByPrimaryKey(Integer id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + int updateByExampleSelective(@Param("record") Area record, @Param("example") AreaExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + int updateByExample(@Param("record") Area record, @Param("example") AreaExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + int updateByPrimaryKeySelective(Area record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + int updateByPrimaryKey(Area record); +} \ No newline at end of file diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/dao/OrderItemMapper.java b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/dao/OrderItemMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..5fdc0387ed1b89763dcb10dd02863534d5b1ab35 --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/dao/OrderItemMapper.java @@ -0,0 +1,96 @@ +package com.example.shardingjdbcdemo.dao; + +import com.example.shardingjdbcdemo.model.OrderItem; +import com.example.shardingjdbcdemo.model.OrderItemExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface OrderItemMapper { + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + long countByExample(OrderItemExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + int deleteByExample(OrderItemExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + int deleteByPrimaryKey(Integer id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + int insert(OrderItem record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + int insertSelective(OrderItem record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + List selectByExample(OrderItemExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + OrderItem selectByPrimaryKey(Integer id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + int updateByExampleSelective(@Param("record") OrderItem record, @Param("example") OrderItemExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + int updateByExample(@Param("record") OrderItem record, @Param("example") OrderItemExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + int updateByPrimaryKeySelective(OrderItem record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + int updateByPrimaryKey(OrderItem record); +} \ No newline at end of file diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/dao/OrderMapper.java b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/dao/OrderMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..336ffa25427a68e2805a52455ff7c9165660d41b --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/dao/OrderMapper.java @@ -0,0 +1,96 @@ +package com.example.shardingjdbcdemo.dao; + +import com.example.shardingjdbcdemo.model.Order; +import com.example.shardingjdbcdemo.model.OrderExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface OrderMapper { + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + long countByExample(OrderExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + int deleteByExample(OrderExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + int deleteByPrimaryKey(Integer orderId); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + int insert(Order record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + int insertSelective(Order record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + List selectByExample(OrderExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + Order selectByPrimaryKey(Integer orderId); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + int updateByExampleSelective(@Param("record") Order record, @Param("example") OrderExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + int updateByExample(@Param("record") Order record, @Param("example") OrderExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + int updateByPrimaryKeySelective(Order record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + int updateByPrimaryKey(Order record); +} \ No newline at end of file diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/Area.java b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/Area.java new file mode 100644 index 0000000000000000000000000000000000000000..a49e2998232ffefe8e9cd844a93067ca6c777e37 --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/Area.java @@ -0,0 +1,69 @@ +package com.example.shardingjdbcdemo.model; + +public class Area { + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column area.id + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + private Integer id; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column area.name + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + private String name; + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column area.id + * + * @return the value of area.id + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public Integer getId() { + return id; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column area.id + * + * @param id the value for area.id + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public void setId(Integer id) { + this.id = id; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column area.name + * + * @return the value of area.name + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public String getName() { + return name; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column area.name + * + * @param name the value for area.name + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } +} \ No newline at end of file diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/AreaExample.java b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/AreaExample.java new file mode 100644 index 0000000000000000000000000000000000000000..82e58c25c9cbba0d8214929281b3bd702b7700aa --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/AreaExample.java @@ -0,0 +1,432 @@ +package com.example.shardingjdbcdemo.model; + +import java.util.ArrayList; +import java.util.List; + +public class AreaExample { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + protected String orderByClause; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + protected boolean distinct; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + protected List oredCriteria; + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public AreaExample() { + oredCriteria = new ArrayList(); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public String getOrderByClause() { + return orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public boolean isDistinct() { + return distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public List getOredCriteria() { + return oredCriteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table area + * + * @mbg.generated do_not_delete_during_merge Sat Sep 21 22:01:41 CST 2019 + */ + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table area + * + * @mbg.generated Sat Sep 21 22:01:41 CST 2019 + */ + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/Order.java b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/Order.java new file mode 100644 index 0000000000000000000000000000000000000000..601c622701a17a70aaf4394e2b15ba66af814d2a --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/Order.java @@ -0,0 +1,137 @@ +package com.example.shardingjdbcdemo.model; + +import java.math.BigDecimal; + +public class Order { + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column t_order_1.order_id + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + private Long orderId; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column t_order_1.order_amount + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + private BigDecimal orderAmount; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column t_order_1.order_status + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + private Integer orderStatus; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column t_order_1.user_id + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + private Integer userId; + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column t_order_1.order_id + * + * @return the value of t_order_1.order_id + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public Long getOrderId() { + return orderId; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column t_order_1.order_id + * + * @param orderId the value for t_order_1.order_id + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public void setOrderId(Long orderId) { + this.orderId = orderId; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column t_order_1.order_amount + * + * @return the value of t_order_1.order_amount + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public BigDecimal getOrderAmount() { + return orderAmount; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column t_order_1.order_amount + * + * @param orderAmount the value for t_order_1.order_amount + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public void setOrderAmount(BigDecimal orderAmount) { + this.orderAmount = orderAmount; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column t_order_1.order_status + * + * @return the value of t_order_1.order_status + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public Integer getOrderStatus() { + return orderStatus; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column t_order_1.order_status + * + * @param orderStatus the value for t_order_1.order_status + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public void setOrderStatus(Integer orderStatus) { + this.orderStatus = orderStatus; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column t_order_1.user_id + * + * @return the value of t_order_1.user_id + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public Integer getUserId() { + return userId; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column t_order_1.user_id + * + * @param userId the value for t_order_1.user_id + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public void setUserId(Integer userId) { + this.userId = userId; + } +} \ No newline at end of file diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/OrderExample.java b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/OrderExample.java new file mode 100644 index 0000000000000000000000000000000000000000..370102a5ff1c4b21d92a7a9f538113e03719594d --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/OrderExample.java @@ -0,0 +1,543 @@ +package com.example.shardingjdbcdemo.model; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +public class OrderExample { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + protected String orderByClause; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + protected boolean distinct; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + protected List oredCriteria; + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public OrderExample() { + oredCriteria = new ArrayList(); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public String getOrderByClause() { + return orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public boolean isDistinct() { + return distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public List getOredCriteria() { + return oredCriteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andOrderIdIsNull() { + addCriterion("order_id is null"); + return (Criteria) this; + } + + public Criteria andOrderIdIsNotNull() { + addCriterion("order_id is not null"); + return (Criteria) this; + } + + public Criteria andOrderIdEqualTo(Long value) { + addCriterion("order_id =", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdNotEqualTo(Long value) { + addCriterion("order_id <>", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdGreaterThan(Long value) { + addCriterion("order_id >", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdGreaterThanOrEqualTo(Long value) { + addCriterion("order_id >=", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdLessThan(Long value) { + addCriterion("order_id <", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdLessThanOrEqualTo(Long value) { + addCriterion("order_id <=", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdIn(List values) { + addCriterion("order_id in", values, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdNotIn(List values) { + addCriterion("order_id not in", values, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdBetween(Long value1, Long value2) { + addCriterion("order_id between", value1, value2, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdNotBetween(Long value1, Long value2) { + addCriterion("order_id not between", value1, value2, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderAmountIsNull() { + addCriterion("order_amount is null"); + return (Criteria) this; + } + + public Criteria andOrderAmountIsNotNull() { + addCriterion("order_amount is not null"); + return (Criteria) this; + } + + public Criteria andOrderAmountEqualTo(BigDecimal value) { + addCriterion("order_amount =", value, "orderAmount"); + return (Criteria) this; + } + + public Criteria andOrderAmountNotEqualTo(BigDecimal value) { + addCriterion("order_amount <>", value, "orderAmount"); + return (Criteria) this; + } + + public Criteria andOrderAmountGreaterThan(BigDecimal value) { + addCriterion("order_amount >", value, "orderAmount"); + return (Criteria) this; + } + + public Criteria andOrderAmountGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("order_amount >=", value, "orderAmount"); + return (Criteria) this; + } + + public Criteria andOrderAmountLessThan(BigDecimal value) { + addCriterion("order_amount <", value, "orderAmount"); + return (Criteria) this; + } + + public Criteria andOrderAmountLessThanOrEqualTo(BigDecimal value) { + addCriterion("order_amount <=", value, "orderAmount"); + return (Criteria) this; + } + + public Criteria andOrderAmountIn(List values) { + addCriterion("order_amount in", values, "orderAmount"); + return (Criteria) this; + } + + public Criteria andOrderAmountNotIn(List values) { + addCriterion("order_amount not in", values, "orderAmount"); + return (Criteria) this; + } + + public Criteria andOrderAmountBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("order_amount between", value1, value2, "orderAmount"); + return (Criteria) this; + } + + public Criteria andOrderAmountNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("order_amount not between", value1, value2, "orderAmount"); + return (Criteria) this; + } + + public Criteria andOrderStatusIsNull() { + addCriterion("order_status is null"); + return (Criteria) this; + } + + public Criteria andOrderStatusIsNotNull() { + addCriterion("order_status is not null"); + return (Criteria) this; + } + + public Criteria andOrderStatusEqualTo(Integer value) { + addCriterion("order_status =", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusNotEqualTo(Integer value) { + addCriterion("order_status <>", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusGreaterThan(Integer value) { + addCriterion("order_status >", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusGreaterThanOrEqualTo(Integer value) { + addCriterion("order_status >=", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusLessThan(Integer value) { + addCriterion("order_status <", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusLessThanOrEqualTo(Integer value) { + addCriterion("order_status <=", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusIn(List values) { + addCriterion("order_status in", values, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusNotIn(List values) { + addCriterion("order_status not in", values, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusBetween(Integer value1, Integer value2) { + addCriterion("order_status between", value1, value2, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusNotBetween(Integer value1, Integer value2) { + addCriterion("order_status not between", value1, value2, "orderStatus"); + return (Criteria) this; + } + + public Criteria andUserIdIsNull() { + addCriterion("user_id is null"); + return (Criteria) this; + } + + public Criteria andUserIdIsNotNull() { + addCriterion("user_id is not null"); + return (Criteria) this; + } + + public Criteria andUserIdEqualTo(Integer value) { + addCriterion("user_id =", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotEqualTo(Integer value) { + addCriterion("user_id <>", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThan(Integer value) { + addCriterion("user_id >", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("user_id >=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThan(Integer value) { + addCriterion("user_id <", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThanOrEqualTo(Integer value) { + addCriterion("user_id <=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdIn(List values) { + addCriterion("user_id in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotIn(List values) { + addCriterion("user_id not in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdBetween(Integer value1, Integer value2) { + addCriterion("user_id between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("user_id not between", value1, value2, "userId"); + return (Criteria) this; + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table t_order_1 + * + * @mbg.generated do_not_delete_during_merge Sat Sep 21 23:03:14 CST 2019 + */ + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table t_order_1 + * + * @mbg.generated Sat Sep 21 23:03:14 CST 2019 + */ + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/OrderItem.java b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/OrderItem.java new file mode 100644 index 0000000000000000000000000000000000000000..1afb3dd2f688ecfb3d2b9d78902d1d4f3c106925 --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/OrderItem.java @@ -0,0 +1,168 @@ +package com.example.shardingjdbcdemo.model; + +public class OrderItem { + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column t_order_item_1.id + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + private Integer id; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column t_order_item_1.order_id + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + private Integer orderId; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column t_order_item_1.pruduct_name + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + private String pruductName; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column t_order_item_1.num + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + private Integer num; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column t_order_item_1.user_id + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + private Integer userId; + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column t_order_item_1.id + * + * @return the value of t_order_item_1.id + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public Integer getId() { + return id; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column t_order_item_1.id + * + * @param id the value for t_order_item_1.id + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public void setId(Integer id) { + this.id = id; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column t_order_item_1.order_id + * + * @return the value of t_order_item_1.order_id + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public Integer getOrderId() { + return orderId; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column t_order_item_1.order_id + * + * @param orderId the value for t_order_item_1.order_id + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public void setOrderId(Integer orderId) { + this.orderId = orderId; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column t_order_item_1.pruduct_name + * + * @return the value of t_order_item_1.pruduct_name + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public String getPruductName() { + return pruductName; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column t_order_item_1.pruduct_name + * + * @param pruductName the value for t_order_item_1.pruduct_name + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public void setPruductName(String pruductName) { + this.pruductName = pruductName == null ? null : pruductName.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column t_order_item_1.num + * + * @return the value of t_order_item_1.num + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public Integer getNum() { + return num; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column t_order_item_1.num + * + * @param num the value for t_order_item_1.num + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public void setNum(Integer num) { + this.num = num; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column t_order_item_1.user_id + * + * @return the value of t_order_item_1.user_id + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public Integer getUserId() { + return userId; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column t_order_item_1.user_id + * + * @param userId the value for t_order_item_1.user_id + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public void setUserId(Integer userId) { + this.userId = userId; + } +} \ No newline at end of file diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/OrderItemExample.java b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/OrderItemExample.java new file mode 100644 index 0000000000000000000000000000000000000000..0f268c61364c8e92f5992ddd5df9228d8748bf49 --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/java/com/example/shardingjdbcdemo/model/OrderItemExample.java @@ -0,0 +1,612 @@ +package com.example.shardingjdbcdemo.model; + +import java.util.ArrayList; +import java.util.List; + +public class OrderItemExample { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + protected String orderByClause; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + protected boolean distinct; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + protected List oredCriteria; + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public OrderItemExample() { + oredCriteria = new ArrayList(); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public String getOrderByClause() { + return orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public boolean isDistinct() { + return distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public List getOredCriteria() { + return oredCriteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andOrderIdIsNull() { + addCriterion("order_id is null"); + return (Criteria) this; + } + + public Criteria andOrderIdIsNotNull() { + addCriterion("order_id is not null"); + return (Criteria) this; + } + + public Criteria andOrderIdEqualTo(Integer value) { + addCriterion("order_id =", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdNotEqualTo(Integer value) { + addCriterion("order_id <>", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdGreaterThan(Integer value) { + addCriterion("order_id >", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdGreaterThanOrEqualTo(Integer value) { + addCriterion("order_id >=", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdLessThan(Integer value) { + addCriterion("order_id <", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdLessThanOrEqualTo(Integer value) { + addCriterion("order_id <=", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdIn(List values) { + addCriterion("order_id in", values, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdNotIn(List values) { + addCriterion("order_id not in", values, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdBetween(Integer value1, Integer value2) { + addCriterion("order_id between", value1, value2, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdNotBetween(Integer value1, Integer value2) { + addCriterion("order_id not between", value1, value2, "orderId"); + return (Criteria) this; + } + + public Criteria andPruductNameIsNull() { + addCriterion("pruduct_name is null"); + return (Criteria) this; + } + + public Criteria andPruductNameIsNotNull() { + addCriterion("pruduct_name is not null"); + return (Criteria) this; + } + + public Criteria andPruductNameEqualTo(String value) { + addCriterion("pruduct_name =", value, "pruductName"); + return (Criteria) this; + } + + public Criteria andPruductNameNotEqualTo(String value) { + addCriterion("pruduct_name <>", value, "pruductName"); + return (Criteria) this; + } + + public Criteria andPruductNameGreaterThan(String value) { + addCriterion("pruduct_name >", value, "pruductName"); + return (Criteria) this; + } + + public Criteria andPruductNameGreaterThanOrEqualTo(String value) { + addCriterion("pruduct_name >=", value, "pruductName"); + return (Criteria) this; + } + + public Criteria andPruductNameLessThan(String value) { + addCriterion("pruduct_name <", value, "pruductName"); + return (Criteria) this; + } + + public Criteria andPruductNameLessThanOrEqualTo(String value) { + addCriterion("pruduct_name <=", value, "pruductName"); + return (Criteria) this; + } + + public Criteria andPruductNameLike(String value) { + addCriterion("pruduct_name like", value, "pruductName"); + return (Criteria) this; + } + + public Criteria andPruductNameNotLike(String value) { + addCriterion("pruduct_name not like", value, "pruductName"); + return (Criteria) this; + } + + public Criteria andPruductNameIn(List values) { + addCriterion("pruduct_name in", values, "pruductName"); + return (Criteria) this; + } + + public Criteria andPruductNameNotIn(List values) { + addCriterion("pruduct_name not in", values, "pruductName"); + return (Criteria) this; + } + + public Criteria andPruductNameBetween(String value1, String value2) { + addCriterion("pruduct_name between", value1, value2, "pruductName"); + return (Criteria) this; + } + + public Criteria andPruductNameNotBetween(String value1, String value2) { + addCriterion("pruduct_name not between", value1, value2, "pruductName"); + return (Criteria) this; + } + + public Criteria andNumIsNull() { + addCriterion("num is null"); + return (Criteria) this; + } + + public Criteria andNumIsNotNull() { + addCriterion("num is not null"); + return (Criteria) this; + } + + public Criteria andNumEqualTo(Integer value) { + addCriterion("num =", value, "num"); + return (Criteria) this; + } + + public Criteria andNumNotEqualTo(Integer value) { + addCriterion("num <>", value, "num"); + return (Criteria) this; + } + + public Criteria andNumGreaterThan(Integer value) { + addCriterion("num >", value, "num"); + return (Criteria) this; + } + + public Criteria andNumGreaterThanOrEqualTo(Integer value) { + addCriterion("num >=", value, "num"); + return (Criteria) this; + } + + public Criteria andNumLessThan(Integer value) { + addCriterion("num <", value, "num"); + return (Criteria) this; + } + + public Criteria andNumLessThanOrEqualTo(Integer value) { + addCriterion("num <=", value, "num"); + return (Criteria) this; + } + + public Criteria andNumIn(List values) { + addCriterion("num in", values, "num"); + return (Criteria) this; + } + + public Criteria andNumNotIn(List values) { + addCriterion("num not in", values, "num"); + return (Criteria) this; + } + + public Criteria andNumBetween(Integer value1, Integer value2) { + addCriterion("num between", value1, value2, "num"); + return (Criteria) this; + } + + public Criteria andNumNotBetween(Integer value1, Integer value2) { + addCriterion("num not between", value1, value2, "num"); + return (Criteria) this; + } + + public Criteria andUserIdIsNull() { + addCriterion("user_id is null"); + return (Criteria) this; + } + + public Criteria andUserIdIsNotNull() { + addCriterion("user_id is not null"); + return (Criteria) this; + } + + public Criteria andUserIdEqualTo(Integer value) { + addCriterion("user_id =", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotEqualTo(Integer value) { + addCriterion("user_id <>", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThan(Integer value) { + addCriterion("user_id >", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("user_id >=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThan(Integer value) { + addCriterion("user_id <", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThanOrEqualTo(Integer value) { + addCriterion("user_id <=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdIn(List values) { + addCriterion("user_id in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotIn(List values) { + addCriterion("user_id not in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdBetween(Integer value1, Integer value2) { + addCriterion("user_id between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("user_id not between", value1, value2, "userId"); + return (Criteria) this; + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table t_order_item_1 + * + * @mbg.generated do_not_delete_during_merge Sat Sep 21 23:10:26 CST 2019 + */ + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table t_order_item_1 + * + * @mbg.generated Sat Sep 21 23:10:26 CST 2019 + */ + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/resources/application.properties b/java-for-gitee/sharding-jdbc-demo/src/main/resources/application.properties new file mode 100644 index 0000000000000000000000000000000000000000..c06d4aea6ccbf6a7aaac3fa8ac8a3a7366a5fab5 --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/resources/application.properties @@ -0,0 +1,44 @@ +# ds0 是写库 也就是主库 ms1 只是为配置分片规则的时候好配置 没配置默认为 主库 slave0 是从库 也就是读库 +spring.shardingsphere.datasource.names=ds0,ms1,slave0 + +spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver +spring.shardingsphere.datasource.ds0.jdbcUrl=jdbc:mysql://192.168.73.131:3306/sharding_order +spring.shardingsphere.datasource.ds0.username=imooc +spring.shardingsphere.datasource.ds0.password=Imooc@123456 + +spring.shardingsphere.datasource.slave0.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.slave0.driver-class-name=com.mysql.cj.jdbc.Driver +spring.shardingsphere.datasource.slave0.jdbcUrl=jdbc:mysql://192.168.73.130:3306/sharding_order +spring.shardingsphere.datasource.slave0.username=imooc +spring.shardingsphere.datasource.slave0.password=Imooc@123456 + + +spring.shardingsphere.datasource.ms1.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.ms1.driver-class-name=com.mysql.cj.jdbc.Driver +spring.shardingsphere.datasource.ms1.jdbcUrl=jdbc:mysql://192.168.73.132:3306/shard_order +spring.shardingsphere.datasource.ms1.username=imooc +spring.shardingsphere.datasource.ms1.password=Imooc@123456 + + +# 配置主的数据源 +spring.shardingsphere.sharding.master-slave-rules.ms0.master-data-source-name=ds0 +# 配置从的数据源 +spring.shardingsphere.sharding.master-slave-rules.ms0.slave-data-source-names=slave0 +# 负载均衡的策略 +spring.shardingsphere.sharding.master-slave-rules.ms0.load-balance-algorithm-type=RANDOM + +spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=ms$->{0..1}.t_order_$->{1..2} +# 先按照 user_id 分库 一个库中有多张表 然后按照 order_id 去分表 +spring.shardingsphere.sharding.tables.t_order.database-strategy.inline.sharding-column=user_id +spring.shardingsphere.sharding.tables.t_order.database-strategy.inline.algorithm-expression=ms$->{user_id % 2} +spring.shardingsphere.sharding.tables.t_order.table-strategy.standard.sharding-column=order_id +spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order_$->{order_id % 2 + 1} + +# 广播表 +spring.shardingsphere.sharding.broadcast-tables=area + +mybatis.mapper-locations=/mybatis/*.xml + +logging.pattern.dateformat=HH:mm:ss + diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/resources/generatorConfig.xml b/java-for-gitee/sharding-jdbc-demo/src/main/resources/generatorConfig.xml new file mode 100644 index 0000000000000000000000000000000000000000..35d80bc2d5298f79e5e88fedf5855ed8ff1957dd --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/resources/generatorConfig.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/resources/mybatis/AreaMapper.xml b/java-for-gitee/sharding-jdbc-demo/src/main/resources/mybatis/AreaMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..d1b1ce1010abef41d65c8ddb50df6f33579aee72 --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/resources/mybatis/AreaMapper.xml @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + id, name + + + + + + delete from area + where id = #{id,jdbcType=INTEGER} + + + + delete from area + + + + + + + insert into area (id, name) + values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}) + + + + insert into area + + + id, + + + name, + + + + + #{id,jdbcType=INTEGER}, + + + #{name,jdbcType=VARCHAR}, + + + + + + + update area + + + id = #{record.id,jdbcType=INTEGER}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + + + + + + + update area + set id = #{record.id,jdbcType=INTEGER}, + name = #{record.name,jdbcType=VARCHAR} + + + + + + + update area + + + name = #{name,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=INTEGER} + + + + update area + set name = #{name,jdbcType=VARCHAR} + where id = #{id,jdbcType=INTEGER} + + \ No newline at end of file diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/resources/mybatis/OrderMapper.xml b/java-for-gitee/sharding-jdbc-demo/src/main/resources/mybatis/OrderMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..a7966a803484aa7b33f5bef4b62225cc4772f53e --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/resources/mybatis/OrderMapper.xml @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + order_id, order_amount, order_status, user_id + + + + + + delete from t_order + where order_id = #{orderId,jdbcType=BIGINT} + + + + delete from t_order + + + + + + + insert into t_order (order_id, order_amount, order_status, + user_id) + values (#{orderId,jdbcType=BIGINT}, #{orderAmount,jdbcType=DECIMAL}, #{orderStatus,jdbcType=INTEGER}, + #{userId,jdbcType=INTEGER}) + + + + insert into t_order + + + order_id, + + + order_amount, + + + order_status, + + + user_id, + + + + + #{orderId,jdbcType=BIGINT}, + + + #{orderAmount,jdbcType=DECIMAL}, + + + #{orderStatus,jdbcType=INTEGER}, + + + #{userId,jdbcType=INTEGER}, + + + + + + + update t_order + + + order_id = #{record.orderId,jdbcType=BIGINT}, + + + order_amount = #{record.orderAmount,jdbcType=DECIMAL}, + + + order_status = #{record.orderStatus,jdbcType=INTEGER}, + + + user_id = #{record.userId,jdbcType=INTEGER}, + + + + + + + + + update t_order + set order_id = #{record.orderId,jdbcType=BIGINT}, + order_amount = #{record.orderAmount,jdbcType=DECIMAL}, + order_status = #{record.orderStatus,jdbcType=INTEGER}, + user_id = #{record.userId,jdbcType=INTEGER} + + + + + + + update t_order + + + order_amount = #{orderAmount,jdbcType=DECIMAL}, + + + order_status = #{orderStatus,jdbcType=INTEGER}, + + + user_id = #{userId,jdbcType=INTEGER}, + + + where order_id = #{orderId,jdbcType=BIGINT} + + + + update t_order + set order_amount = #{orderAmount,jdbcType=DECIMAL}, + order_status = #{orderStatus,jdbcType=INTEGER}, + user_id = #{userId,jdbcType=INTEGER} + where order_id = #{orderId,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/resources/sharding-jdbc.xml b/java-for-gitee/sharding-jdbc-demo/src/main/resources/sharding-jdbc.xml new file mode 100644 index 0000000000000000000000000000000000000000..610469fac13655d73d5b07727050e7d471a405c4 --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/resources/sharding-jdbc.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/resources/static/.gitignore b/java-for-gitee/sharding-jdbc-demo/src/main/resources/static/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..549e00a2a96fa9d7c5dbc9859664a78d980158c2 --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/resources/static/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/java-for-gitee/sharding-jdbc-demo/src/main/resources/templates/.gitignore b/java-for-gitee/sharding-jdbc-demo/src/main/resources/templates/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..549e00a2a96fa9d7c5dbc9859664a78d980158c2 --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/main/resources/templates/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/java-for-gitee/sharding-jdbc-demo/src/test/java/com/example/shardingjdbcdemo/ShardingJdbcDemoApplicationTests.java b/java-for-gitee/sharding-jdbc-demo/src/test/java/com/example/shardingjdbcdemo/ShardingJdbcDemoApplicationTests.java new file mode 100644 index 0000000000000000000000000000000000000000..089e2c62883e08fdb2a4064f1a7779b9c02b07fd --- /dev/null +++ b/java-for-gitee/sharding-jdbc-demo/src/test/java/com/example/shardingjdbcdemo/ShardingJdbcDemoApplicationTests.java @@ -0,0 +1,140 @@ +package com.example.shardingjdbcdemo; + +import com.example.shardingjdbcdemo.dao.AreaMapper; +import com.example.shardingjdbcdemo.dao.OrderItemMapper; +import com.example.shardingjdbcdemo.dao.OrderMapper; +import com.example.shardingjdbcdemo.model.*; +import org.junit.Test; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ImportResource; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.List; + +@SpringBootTest +@ImportResource("classpath*:sharding-jdbc.xml") +@MapperScan("com.example.shardingjdbcdemo.dao") +class ShardingJdbcDemoApplicationTests { + + + @Resource + private OrderMapper orderMapper; + + @Resource + private AreaMapper areaMapper; + + @Resource + private OrderItemMapper orderItemMapper; + + + @Test + void contextLoads() { + + } + + @Test + public void testOrder() { + /** + * 两个分片字段 首先要根据 user id 进行分片 + * user id 目前是 19 咱们再看一下这个分片规则 + * 数据库的分片 user_id 为 19 那么它是一个奇数 + * 会被分片到 ds1 当中 也就是 132 这个数据库 + * 然后 order id 也设置了一个奇数 这个奇数它得到的是 + * t_order 1+1为 2 也就是这条记录将会被插入到 132 的数据库 + * t_order_2 这张表 + */ + Order order = new Order(); + // 先进行数据库的分片 写一个奇数 + order.setUserId(20); + // 也设置一个奇数 + order.setOrderId(4L); + // 10 块钱 + order.setOrderAmount(BigDecimal.TEN); + order.setOrderStatus(1); + orderMapper.insert(order); + + } + + @Test + public void testSelectOrder() { + + OrderExample orderExample = new OrderExample(); + + orderExample.createCriteria().andOrderIdEqualTo(4l) + .andUserIdEqualTo(20); + + List orders = orderMapper.selectByExample(orderExample); + + orders.forEach(o -> System.out.println(o.getOrderId() + "----" + o.getUserId())); + + } + + + @Test + public void testGlobal() { + Area area = new Area(); + area.setId(1); + area.setName("北京"); + areaMapper.insert(area); + } + @Test + public void testGlobal2() { + Area area = new Area(); + area.setId(2); + area.setName("上海"); + areaMapper.insert(area); + } + + @Test + public void testSelectGlobal() { + AreaExample areaExample = new AreaExample(); + areaExample.createCriteria().andIdEqualTo(2); + List areas = areaMapper.selectByExample(areaExample); + System.out.println("area.size()=" + areas.size()); + } + + @Test + public void testOrderItem() { + OrderItem orderItem = new OrderItem(); + // id 随便 起 反正也不是通过 id 去进行分片 + orderItem.setId(2); + + /** + * 必须要在这个库当中 存在 随便找一个 看它会不会和这个 + * order_id = 1 的记录 落在 同一个分片 + */ + orderItem.setOrderId(1); + orderItem.setPruductName("测试商品"); + orderItem.setNum(1); + orderItem.setUserId(19); + orderItemMapper.insert(orderItem); + } + + @Test + public void testMsOrder() { + OrderExample orderExample = new OrderExample(); + + orderExample.createCriteria().andUserIdEqualTo(20) + .andOrderIdEqualTo(4L); + + + for (int i = 0; i < 10; i++) { + List orders = orderMapper.selectByExample(orderExample); + + orders.forEach(o->{ + System.out.println("orderId:" + o.getOrderId()); + System.out.println("userId:" + o.getUserId()); + System.out.println("orderAmount:" + o.getOrderAmount()); + }); + } + + + + + + } + +} + diff --git a/java-for-gitee/spring-boot-kafka/.gitignore b/java-for-gitee/spring-boot-kafka/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..549e00a2a96fa9d7c5dbc9859664a78d980158c2 --- /dev/null +++ b/java-for-gitee/spring-boot-kafka/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/java-for-gitee/spring-boot-kafka/mvnw.cmd b/java-for-gitee/spring-boot-kafka/mvnw.cmd new file mode 100644 index 0000000000000000000000000000000000000000..c8d43372c986d97911cdc21bd87e0cbe3d83bdda --- /dev/null +++ b/java-for-gitee/spring-boot-kafka/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/java-for-gitee/spring-boot-kafka/pom.xml b/java-for-gitee/spring-boot-kafka/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..26e0c2743cca40db01245a28733101e375f0ca71 --- /dev/null +++ b/java-for-gitee/spring-boot-kafka/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.4.5 + + + com.osrcd + spring-boot-kafka + 0.0.1-SNAPSHOT + spring-boot-kafka + Demo project for Spring Boot + + 1.8 + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.kafka + spring-kafka + + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.kafka + spring-kafka-test + test + + + + com.alibaba + fastjson + 1.2.44 + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/java-for-gitee/spring-boot-kafka/src/main/java/com/osrcd/springbootkafka/SpringBootKafkaApplication.java b/java-for-gitee/spring-boot-kafka/src/main/java/com/osrcd/springbootkafka/SpringBootKafkaApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..2087609a460580537b9852be4669f93ef2a1c759 --- /dev/null +++ b/java-for-gitee/spring-boot-kafka/src/main/java/com/osrcd/springbootkafka/SpringBootKafkaApplication.java @@ -0,0 +1,28 @@ +package com.osrcd.springbootkafka; + +import com.osrcd.springbootkafka.producer.Product; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import javax.annotation.PostConstruct; + +@SpringBootApplication +public class SpringBootKafkaApplication { + + + @Autowired + private Product product; + + @PostConstruct + public void init() { + for (int i = 0; i < 10; i++) { + product.send("afs" + i); + } + } + + public static void main(String[] args) { + SpringApplication.run(SpringBootKafkaApplication.class, args); + } + +} diff --git a/java-for-gitee/spring-boot-kafka/src/main/java/com/osrcd/springbootkafka/consumer/Consumer.java b/java-for-gitee/spring-boot-kafka/src/main/java/com/osrcd/springbootkafka/consumer/Consumer.java new file mode 100644 index 0000000000000000000000000000000000000000..80e1fdcd93816bc1c2d568cad471b6a04d6b06b8 --- /dev/null +++ b/java-for-gitee/spring-boot-kafka/src/main/java/com/osrcd/springbootkafka/consumer/Consumer.java @@ -0,0 +1,24 @@ +package com.osrcd.springbootkafka.consumer; + +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +@Component +public class Consumer { + + @KafkaListener(topics = "user") + public void consumer(ConsumerRecord consumerRecord) { + Optional kafkaMessage = Optional.ofNullable(consumerRecord.value()); + // 鍒ゆ柇鏌ヨ鐨勭被瀵硅薄鏄惁瀛樺湪 + if (kafkaMessage.isPresent()) { + // 寰楀埌鍊 + Object o = kafkaMessage.get(); + System.out.println(o); + } + } + + +} diff --git a/java-for-gitee/spring-boot-kafka/src/main/java/com/osrcd/springbootkafka/pojo/User.java b/java-for-gitee/spring-boot-kafka/src/main/java/com/osrcd/springbootkafka/pojo/User.java new file mode 100644 index 0000000000000000000000000000000000000000..bfde055865e8617d1cc6f6fa81fca4bbdb30fa61 --- /dev/null +++ b/java-for-gitee/spring-boot-kafka/src/main/java/com/osrcd/springbootkafka/pojo/User.java @@ -0,0 +1,32 @@ +package com.osrcd.springbootkafka.pojo; + +public class User { + + public User() { + } + + public User(String name, int age) { + this.name = name; + this.age = age; + } + + private String name; + + private int age; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } +} diff --git a/java-for-gitee/spring-boot-kafka/src/main/java/com/osrcd/springbootkafka/producer/Product.java b/java-for-gitee/spring-boot-kafka/src/main/java/com/osrcd/springbootkafka/producer/Product.java new file mode 100644 index 0000000000000000000000000000000000000000..17adfbd1e3dbc0f023c105d7837c2d70079e242b --- /dev/null +++ b/java-for-gitee/spring-boot-kafka/src/main/java/com/osrcd/springbootkafka/producer/Product.java @@ -0,0 +1,23 @@ +package com.osrcd.springbootkafka.producer; + +import com.alibaba.fastjson.JSON; +import com.osrcd.springbootkafka.pojo.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; + +@Component +public class Product { + + @Autowired + private KafkaTemplate kafkaTemplate; + + public void send(String name) { + User user = new User(); + user.setName(name); + user.setAge(11); + kafkaTemplate.send("user", JSON.toJSONString(user)); + } + + +} diff --git a/java-for-gitee/spring-boot-kafka/src/main/resources/application.properties b/java-for-gitee/spring-boot-kafka/src/main/resources/application.properties new file mode 100644 index 0000000000000000000000000000000000000000..a93e0a08bd65a2d1ab71dc29de0fddc7ba893613 --- /dev/null +++ b/java-for-gitee/spring-boot-kafka/src/main/resources/application.properties @@ -0,0 +1,27 @@ +spring.application.name=kafka-user +server.port=8080 +#============== kafka =================== +# 指定kafka 代理地址,可以多个 +spring.kafka.bootstrap-servers=localhost:9092 + +#=============== provider ======================= +spring.kafka.producer.retries=0 +# 每次批量发送消息的数量 +spring.kafka.producer.batch-size=16384 +spring.kafka.producer.buffer-memory=33554432 + +# 指定消息key和消息体的编解码方式 +spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer +spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer + +#=============== consumer ======================= +# 指定默认消费者group id +spring.kafka.consumer.group-id=user-log-group + +spring.kafka.consumer.auto-offset-reset=earliest +spring.kafka.consumer.enable-auto-commit=true +spring.kafka.consumer.auto-commit-interval=100 + +# 指定消息key和消息体的编解码方式 +spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer +spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer \ No newline at end of file diff --git a/java-for-gitee/spring-boot-kafka/src/test/java/com/osrcd/springbootkafka/SpringBootKafkaApplicationTests.java b/java-for-gitee/spring-boot-kafka/src/test/java/com/osrcd/springbootkafka/SpringBootKafkaApplicationTests.java new file mode 100644 index 0000000000000000000000000000000000000000..884d2e23446960137193d0ecd9946f399989ccf7 --- /dev/null +++ b/java-for-gitee/spring-boot-kafka/src/test/java/com/osrcd/springbootkafka/SpringBootKafkaApplicationTests.java @@ -0,0 +1,13 @@ +package com.osrcd.springbootkafka; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class SpringBootKafkaApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/java-game-security/java-game-security.iml b/java-game-security/java-game-security.iml deleted file mode 100644 index 78b2cc53b203f0b97534bb1184cdc7b474339fb4..0000000000000000000000000000000000000000 --- a/java-game-security/java-game-security.iml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/webrtc-live/webrtc-live-common/src/main/java/com/opendev/w.java b/webrtc-live/webrtc-live-common/src/main/java/com/opendev/w.java deleted file mode 100644 index e6aab95dc936c15d53ecb854ea66cda5e2c523ad..0000000000000000000000000000000000000000 --- a/webrtc-live/webrtc-live-common/src/main/java/com/opendev/w.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.opendev; - -public class w { -} diff --git "a/\345\274\200\346\272\220\345\205\266\344\273\226/\345\274\200\346\272\220\351\241\271\347\233\256\345\205\254\345\217\270\345\220\215\345\215\225\347\233\270\345\205\263\351\227\256\351\242\230/README.md" "b/\345\274\200\346\272\220\345\205\266\344\273\226/\345\274\200\346\272\220\351\241\271\347\233\256\345\205\254\345\217\270\345\220\215\345\215\225\347\233\270\345\205\263\351\227\256\351\242\230/README.md" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/\345\274\200\346\272\220\345\255\220\344\273\223\345\272\223/iooc-vue-admin/README.md" "b/\345\274\200\346\272\220\345\255\220\344\273\223\345\272\223/iooc-vue-admin/README.md" deleted file mode 100644 index 03badb59d933880475e830c0921544ddcfef789c..0000000000000000000000000000000000000000 --- "a/\345\274\200\346\272\220\345\255\220\344\273\223\345\272\223/iooc-vue-admin/README.md" +++ /dev/null @@ -1 +0,0 @@ -[iooc-vue-admin 寮婧愬瓙浠撳簱](https://gitee.com/OpenDevel/iooc-vue-admin) \ No newline at end of file diff --git "a/\345\274\200\346\272\220\346\212\200\346\234\257/README.md" "b/\345\274\200\346\272\220\346\212\200\346\234\257/README.md" index a14f6aa34b665ec7cb0e5f5f0cae0b90f9ef408b..bd64e804a486aa805a1951fea76748b6045645e1 100644 --- "a/\345\274\200\346\272\220\346\212\200\346\234\257/README.md" +++ "b/\345\274\200\346\272\220\346\212\200\346\234\257/README.md" @@ -1 +1 @@ -![image](https://gitee.com/OpenDevel/java-for-linux/raw/master/image/Java绀句細浜.png) +![image](https://gitee.com/OSrcDevel/java-for-linux/raw/master/image/Java绀句細浜.png)